From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rodrigo Vivi Subject: Re: [PATCH] drm/i915: Engine relative MMIO Date: Thu, 20 Jun 2019 12:15:23 -0700 Message-ID: <20190620191523.GG15907@intel.com> References: <20190513194552.6600-1-John.C.Harrison@Intel.com> <20190620072444.GA6272@sdutt> <43ff893f-a53a-a808-676b-ea5b2eed2ff3@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 521C46E433 for ; Thu, 20 Jun 2019 19:14:53 +0000 (UTC) Content-Disposition: inline In-Reply-To: <43ff893f-a53a-a808-676b-ea5b2eed2ff3@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Tvrtko Ursulin Cc: Intel-GFX@lists.freedesktop.org, Chris P List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBKdW4gMjAsIDIwMTkgYXQgMDU6MzM6MTJQTSArMDEwMCwgVHZydGtvIFVyc3VsaW4g d3JvdGU6Cj4gCj4gW2ZpeGVkIENocmlzJyBlbWFpbF0KPiAKPiBPbiAyMC8wNi8yMDE5IDA4OjI0 LCBNYXR0aGV3IEJyb3N0IHdyb3RlOgo+ID4gT24gTW9uLCBNYXkgMTMsIDIwMTkgYXQgMTI6NDU6 NTJQTSAtMDcwMCwgSm9obi5DLkhhcnJpc29uQEludGVsLmNvbSB3cm90ZToKPiA+ID4gRnJvbTog Sm9obiBIYXJyaXNvbiA8Sm9obi5DLkhhcnJpc29uQEludGVsLmNvbT4KPiA+ID4gCj4gPiA+IFdp dGggdmlydHVhbCBlbmdpbmVzLCBpdCBpcyBubyBsb25nZXIgcG9zc2libGUgdG8ga25vdyB3aGlj aCBzcGVjaWZpYwo+ID4gPiBwaHlzaWNhbCBlbmdpbmUgYSBnaXZlbiByZXF1ZXN0IHdpbGwgYmUg ZXhlY3V0ZWQgb24gYXQgdGhlIHRpbWUgdGhhdAo+ID4gPiByZXF1ZXN0IGlzIGdlbmVyYXRlZC4g VGhpcyBtZWFucyB0aGF0IHRoZSByZXF1ZXN0IGl0c2VsZiBtdXN0IGJlIGVuZ2luZQo+ID4gPiBh Z25vc3RpYyAtIGFueSBkaXJlY3QgcmVnaXN0ZXIgd3JpdGVzIG11c3QgYmUgcmVsYXRpdmUgdG8g dGhlIGVuZ2luZQo+ID4gPiBhbmQgbm90IGFic29sdXRlIGFkZHJlc3Nlcy4KPiA+ID4gCj4gPiA+ IFRoZSBMUkkgY29tbWFuZCBoYXMgc3VwcG9ydCBmb3IgZW5naW5lIHJlbGF0aXZlIGFkZHJlc3Np bmcuIEhvd2V2ZXIsCj4gPiA+IHRoZSBtZWNoYW5pc20gaXMgbm90IHRyYW5zcGFyZW50IHRvIHRo ZSBkcml2ZXIuIFRoZSBzY2hlbWUgZm9yIEdlbjExCj4gPiA+IChNSV9MUklfQUREX0NTX01NSU9f U1RBUlQpIHJlcXVpcmVzIHRoZSBMUkkgYWRkcmVzcyB0byBoYXZlIG5vCj4gPiA+IGFic29sdXRl IGVuZ2luZSBiYXNlIGNvbXBvbmVudC4gVGhlIGhhcmR3YXJlIHRoZW4gYWRkcyBvbiB0aGUgY29y cmVjdAo+ID4gPiBlbmdpbmUgb2Zmc2V0IGF0IGV4ZWN1dGlvbiB0aW1lLgo+ID4gPiAKPiA+ID4g RHVlIHRvIHRoZSBub24tdHJpdmlhbCBhbmQgZGlmZmVyaW5nIHNjaGVtZXMgb24gZGlmZmVyZW50 IGhhcmR3YXJlLCBpdAo+ID4gPiBpcyBub3QgcG9zc2libGUgdG8gc2ltcGx5IHVwZGF0ZSB0aGUg Y29kZSB0aGF0IGNyZWF0ZXMgdGhlIExSSQo+ID4gPiBjb21tYW5kcyB0byBzZXQgYSByZW1hcCBm bGFnIGFuZCBsZXQgdGhlIGhhcmR3YXJlIGdldCBvbiB3aXRoIGl0Lgo+ID4gPiBJbnN0ZWFkLCB0 aGlzIHBhdGNoIGFkZHMgZnVuY3Rpb24gd3JhcHBlcnMgZm9yIGdlbmVyYXRpbmcgdGhlIExSSQo+ ID4gPiBjb21tYW5kIGl0c2VsZiBhbmQgdGhlbiBmb3IgY29uc3RydWN0aW5nIHRoZSBjb3JyZWN0 IGFkZHJlc3MgdG8gdXNlCj4gPiA+IHdpdGggdGhlIExSSS4KPiA+ID4gCj4gPiA+IHYyOiBGaXgg YnVpbGQgYnJlYWsgaW4gR1ZULiBSZW1vdmUgZmxhZ3MgcGFyYW1ldGVyIFtyZXZpZXcgZmVlZGJh Y2sKPiA+ID4gZnJvbSBDaHJpcyBXXS4KPiA+ID4gCj4gPiA+IHYzOiBGaXggYnVpbGQgYnJlYWsg aW4gc2VsZnRlc3QuIFJlYmFzZSB0byBuZXdlciBiYXNlIHRyZWUgYW5kIGZpeAo+ID4gPiBtZXJn ZSBjb25mbGljdC4KPiA+ID4gCj4gPiA+IHY0OiBNb3JlIHJlYmFzaW5nLiBSbW92ZWQgcmVsYXRp dmUgYWRkcmVzc2luZyBzdXBwb3J0IGZyb20gR2VuNy05IG9ubHkKPiA+ID4gY29kZSBwYXRocyBb cmV2aWV3IGZlZWRiYWNrIGZyb20gQ2hyaXMgV10uCj4gPiA+IAo+ID4gPiB2NTogTW9yZSByZWJh c2luZyAobmV3ICdndCcgZGlyZWN0b3J5KS4gRml4IHdoaXRlIHNwYWNlIGlzc3VlLiBVc2UKPiA+ ID4gQ09QWSBjbGFzcyByYXRoZXIgdGhhbiBCQ1MwIGlkIGZvciBjaGVja2luZyBhZ2FpbnN0IEJD UyBlbmdpbmUuCj4gPiA+IAo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBKb2huIEhhcnJpc29uIDxKb2hu LkMuSGFycmlzb25ASW50ZWwuY29tPgo+ID4gPiBDQzogUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZp dmlAaW50ZWwuY29tPgo+ID4gPiBDQzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGxp bnV4LmludGVsLmNvbT4KPiA+ID4gQ0M6IFdpbHNvbiwgQ2hyaXMgUCA8Y2hyaXMucC53aWxzb25A aW50ZWwuY29tPgo+ID4gCj4gPiBJJ3ZlIHJldmlld2VkIHRoaXMgc2VyaWVzIGFuZCB0byBtZSBp dCBsb29rcyBsaWtlIGFsbCB0aGUgY29uY2VybnMgaGF2ZQo+ID4gYmVlbgo+ID4gYWRkcmVzc2Vk ICsgQ0kgaXMgcGFzc2luZy4gRG8gbm90IGZlZWwgY29tZm9ydGFibGUgZ2l2ZSBhIFItQiBidXQg dGhpcwo+ID4gcGF0Y2ggaXMKPiA+IG5lZWRlZCBmb3IgYSBzZXJpZXMgSSdtIHdvcmtpbmcgb24g c28gSSdkIGxpa2UgdG8gc2VlIGl0IG1lcmdlZC4gR2VudGxlCj4gPiBwaW5nIHRvCj4gPiBnZXQg dGhpcyBtZXJnZWQuCj4gCj4gQUZBSVIgdGhlIGNvbmNsdXNpb24gYmV0d2VlbiBSb2RyaWdvIGFu ZCBtZSB3YXMgdG8gbGVhdmUgdGhlIGV4aXN0aW5nIG1hY3JvCj4gYXMgaXMgYW5kIGxlYXZlIGEg bmV3IG9uZSAoaW4gdXBwZXJjYXNlKSBmb3IgcmVsYXRpdmUgYWRkcmVzc2luZy4KPiAKPiBTbyBs ZWF2ZSBNSV9MT0FEX1JFR0lTVEVSX0lNTSBhcyBpcywgYWRkIE1JX0xPQURfUkVHSVNURVJfSU1N X1JFTCBmb3IgdXNhZ2UKPiBvbiByZWxldmFudCAobmV3KSBwYXRocy4KCnllYXAsIHRoYXQncyBt eSB2aWV3IGFzIHdlbGwuCldlIHNob3VsZCBiZSBhYmxlIHRvIGRvIHRoaXMgYXMgc2ltcGxlIGFz IHBvc3NpYmxlLgoKPiAKPiBDaHJpcyBkaWQgbm90IHNheSBhbnl0aGluZyBidXQgSSBleHBlY3Qg dGhpcyB3b3VsZCBhbHNvIHNhdGlzZnkgaGlzIHdpc2ggdG8KPiBrZWVwIHRoZSBwYXRjaCBhcyBz bWFsbCBhcyBwb3NzaWJsZSBlZyBub3QgdG91Y2ggbGVnYWN5IGNvZGUgcGF0aHMuCj4gCj4gUmVn YXJkcywKPiAKPiBUdnJ0a28KPiAKPiA+IAo+ID4gVGhhbmtzLAo+ID4gTWF0dAo+ID4gCj4gPiA+ IC0tLQo+ID4gPiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmUuaMKgwqDCoMKg wqDCoMKgIHzCoCA0ICsKPiA+ID4gZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5l X2NzLmPCoMKgwqDCoCB8IDExICsrKwo+ID4gPiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9ncHVfY29tbWFuZHMuaMKgIHzCoCA2ICstCj4gPiA+IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX2xyYy5jwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCA3OSArKysrKysrKysrLS0tLS0tLS0t Cj4gPiA+IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyY19yZWcuaMKgwqDCoMKgwqDC oCB8wqAgNCArLQo+ID4gPiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9tb2NzLmPCoMKg wqDCoMKgwqDCoMKgwqAgfCAxNyArKy0tCj4gPiA+IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX3JpbmdidWZmZXIuY8KgwqDCoCB8IDQ1ICsrKysrKysrKy0tCj4gPiA+IGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX3dvcmthcm91bmRzLmPCoMKgIHzCoCA0ICstCj4gPiA+IC4uLi9n cHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3Rfd29ya2Fyb3VuZHMuY8KgwqDCoCB8wqAgOSArKy0KPiA+ ID4gZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L21taW9fY29udGV4dC5jwqDCoMKgwqDCoMKgIHwg MTYgKysrLQo+ID4gPiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2NtZF9wYXJzZXIuY8KgwqDC oMKgwqDCoMKgIHzCoCA0ICstCj4gPiA+IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2Nv bnRleHQuY8KgwqDCoMKgwqDCoCB8IDEyICstLQo+ID4gPiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV9leGVjYnVmZmVyLmPCoMKgwqAgfMKgIDMgKy0KPiA+ID4gZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9wZXJmLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDE5ICsrKy0tCj4g PiA+IDE0IGZpbGVzIGNoYW5nZWQsIDE1NCBpbnNlcnRpb25zKCspLCA3OSBkZWxldGlvbnMoLSkK PiA+ID4gCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9l bmdpbmUuaAo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZS5oCj4g PiA+IGluZGV4IDkzNTliM2E3YWQ5Yy4uMzUwNmM5OTIxODJjIDEwMDY0NAo+ID4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmUuaAo+ID4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmUuaAo+ID4gPiBAQCAtNTQ2LDQgKzU0Niw4IEBA IHN0YXRpYyBpbmxpbmUgYm9vbCBpbmplY3RfcHJlZW1wdF9oYW5nKHN0cnVjdAo+ID4gPiBpbnRl bF9lbmdpbmVfZXhlY2xpc3RzICpleGVjbGlzdHMpCj4gPiA+IAo+ID4gPiAjZW5kaWYKPiA+ID4g Cj4gPiA+ICtib29sIGk5MTVfZW5naW5lX2hhc19yZWxhdGl2ZV9scmkoY29uc3Qgc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiA+ID4gK3UzMiBpOTE1X2dldF9scmlfY21kKGNvbnN0 IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyCj4gPiA+IHdvcmRfY291bnQpOwo+ ID4gPiArdTMyIGk5MTVfZ2V0X2xyaV9yZWcoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lLAo+ID4gPiBpOTE1X3JlZ190IHJlZyk7Cj4gPiA+ICsKPiA+ID4gI2VuZGlmIC8qIF9J TlRFTF9SSU5HQlVGRkVSX0hfICovCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9pbnRlbF9lbmdpbmVfY3MuYwo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX2VuZ2luZV9jcy5jCj4gPiA+IGluZGV4IDRjMzc1M2MxYjU3My4uMjMzMjk1ZDY4OWQy IDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVf Y3MuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfY3Mu Ywo+ID4gPiBAQCAtMjUzLDYgKzI1MywxNyBAQCBzdGF0aWMgdTMyIF9fZW5naW5lX21taW9fYmFz ZShzdHJ1Y3QKPiA+ID4gZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiA+ID4gwqDCoMKgwqByZXR1 cm4gYmFzZXNbaV0uYmFzZTsKPiA+ID4gfQo+ID4gPiAKPiA+ID4gK2Jvb2wgaTkxNV9lbmdpbmVf aGFzX3JlbGF0aXZlX2xyaShjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4g PiA+ICt7Cj4gPiA+ICvCoMKgwqAgaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpIDwgMTEpCj4g PiA+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gZmFsc2U7Cj4gPiA+ICsKPiA+ID4gK8KgwqDCoCBp ZiAoZW5naW5lLT5jbGFzcyA9PSBDT1BZX0VOR0lORV9DTEFTUykKPiA+ID4gK8KgwqDCoMKgwqDC oMKgIHJldHVybiBmYWxzZTsKPiA+ID4gKwo+ID4gPiArwqDCoMKgIHJldHVybiB0cnVlOwo+ID4g PiArfQo+ID4gPiArCj4gPiA+IHN0YXRpYyB2b2lkIF9fc3ByaW50X2VuZ2luZV9uYW1lKGNoYXIg Km5hbWUsIGNvbnN0IHN0cnVjdAo+ID4gPiBlbmdpbmVfaW5mbyAqaW5mbykKPiA+ID4gewo+ID4g PiDCoMKgwqDCoFdBUk5fT04oc25wcmludGYobmFtZSwgSU5URUxfRU5HSU5FX0NTX01BWF9OQU1F LCAiJXMldSIsCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9ncHVfY29tbWFuZHMuaAo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2dw dV9jb21tYW5kcy5oCj4gPiA+IGluZGV4IGEzNGVjZTUzYTc3MS4uZTc3ODRiM2ZiNzU5IDEwMDY0 NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ncHVfY29tbWFuZHMu aAo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ncHVfY29tbWFuZHMu aAo+ID4gPiBAQCAtMTIzLDkgKzEyMywxMyBAQAo+ID4gPiDCoCrCoMKgIHNpbXBseSBpZ25vcmVz IHRoZSByZWdpc3RlciBsb2FkIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KPiA+ID4gwqAqIC0g T25lIGNhbiBhY3R1YWxseSBsb2FkIGFyYml0cmFyeSBtYW55IGFyYml0cmFyeSByZWdpc3RlcnM6 Cj4gPiA+IFNpbXBseSBpc3N1ZSB4Cj4gPiA+IMKgKsKgwqAgYWRkcmVzcy92YWx1ZSBwYWlycy4g RG9uJ3Qgb3ZlcmR1ZSBpdCwgdGhvdWdoLCB4IDw9IDJeNCBtdXN0IGhvbGQhCj4gPiA+ICsgKiAt IE5ld2VyIGhhcmR3YXJlIHN1cHBvcnRzIGVuZ2luZSByZWxhdGl2ZSBhZGRyZXNzZXMgYnV0IG9s ZGVyCj4gPiA+IGhhcmR3YXJlIGRvZXMKPiA+ID4gKyAqwqDCoCBub3QuIFNvIG5ldmVyIGNhbGwg TUlfTFJJIGRpcmVjdGx5LCBhbHdheXMgdXNlIHRoZQo+ID4gPiBpOTE1X2dldF9scmlfY21kKCkK PiA+ID4gKyAqwqDCoCBhbmQgaTkxNV9nZXRfbHJpX3JlZygpIGhlbHBlciBmdW5jdGlvbnMuCj4g PiA+IMKgKi8KPiA+ID4gLSNkZWZpbmUgTUlfTE9BRF9SRUdJU1RFUl9JTU0oeCnCoMKgwqAgTUlf SU5TVFIoMHgyMiwgMiooeCktMSkKPiA+ID4gKyNkZWZpbmUgX19NSV9MT0FEX1JFR0lTVEVSX0lN TSh4KcKgwqDCoCBNSV9JTlNUUigweDIyLCAyKih4KS0xKQo+ID4gPiAjZGVmaW5lwqDCoCBNSV9M UklfRk9SQ0VfUE9TVEVEwqDCoMKgwqDCoMKgwqAgKDE8PDEyKQo+ID4gPiArI2RlZmluZcKgwqAg TUlfTFJJX0FERF9DU19NTUlPX1NUQVJUX0dFTjExwqDCoMKgICgxPDwxOSkKPiA+ID4gI2RlZmlu ZSBNSV9TVE9SRV9SRUdJU1RFUl9NRU3CoMKgwqDCoMKgwqDCoCBNSV9JTlNUUigweDI0LCAxKQo+ ID4gPiAjZGVmaW5lIE1JX1NUT1JFX1JFR0lTVEVSX01FTV9HRU44wqDCoCBNSV9JTlNUUigweDI0 LCAyKQo+ID4gPiAjZGVmaW5lwqDCoCBNSV9TUk1fTFJNX0dMT0JBTF9HVFTCoMKgwqDCoMKgwqDC oCAoMTw8MjIpCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9scmMuYwo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyYy5jCj4gPiA+ IGluZGV4IGUxODYyM2RlZjI4Mi4uNDlhOWE2NjQ4YjljIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9scmMuYwo+ID4gPiBAQCAtMTM4OCwxNCArMTM4OCwxNSBAQCBzdGF0 aWMgaW50IGVtaXRfcGRwcyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiA+ID4gwqDCoMKgwqDC oMKgwqAgcmV0dXJuIFBUUl9FUlIoY3MpOwo+ID4gPiAKPiA+ID4gwqDCoMKgwqAvKiBFbnN1cmUg dGhlIExSSSBoYXZlIGxhbmRlZCBiZWZvcmUgd2UgaW52YWxpZGF0ZSAmIGNvbnRpbnVlICovCj4g PiA+IC3CoMKgwqAgKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTSgyICogR0VOOF8zTFZMX1BE UEVTKSB8Cj4gPiA+IE1JX0xSSV9GT1JDRV9QT1NURUQ7Cj4gPiA+ICvCoMKgwqAgKmNzKysgPSBp OTE1X2dldF9scmlfY21kKGVuZ2luZSwgMiAqIEdFTjhfM0xWTF9QRFBFUykgfAo+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTUlfTFJJX0ZPUkNFX1BPU1RFRDsKPiA+ID4g wqDCoMKgwqBmb3IgKGkgPSBHRU44XzNMVkxfUERQRVM7IGktLTsgKSB7Cj4gPiA+IMKgwqDCoMKg wqDCoMKgIGNvbnN0IGRtYV9hZGRyX3QgcGRfZGFkZHIgPSBpOTE1X3BhZ2VfZGlyX2RtYV9hZGRy KHBwZ3R0LCBpKTsKPiA+ID4gwqDCoMKgwqDCoMKgwqAgdTMyIGJhc2UgPSBlbmdpbmUtPm1taW9f YmFzZTsKPiA+ID4gCj4gPiA+IC3CoMKgwqDCoMKgwqDCoCAqY3MrKyA9IGk5MTVfbW1pb19yZWdf b2Zmc2V0KEdFTjhfUklOR19QRFBfVURXKGJhc2UsIGkpKTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKg ICpjcysrID0gaTkxNV9nZXRfbHJpX3JlZyhlbmdpbmUsIEdFTjhfUklOR19QRFBfVURXKGJhc2Us IGkpKTsKPiA+ID4gwqDCoMKgwqDCoMKgwqAgKmNzKysgPSB1cHBlcl8zMl9iaXRzKHBkX2RhZGRy KTsKPiA+ID4gLcKgwqDCoMKgwqDCoMKgICpjcysrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VO OF9SSU5HX1BEUF9MRFcoYmFzZSwgaSkpOwo+ID4gPiArwqDCoMKgwqDCoMKgwqAgKmNzKysgPSBp OTE1X2dldF9scmlfcmVnKGVuZ2luZSwgR0VOOF9SSU5HX1BEUF9MRFcoYmFzZSwgaSkpOwo+ID4g PiDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IGxvd2VyXzMyX2JpdHMocGRfZGFkZHIpOwo+ID4gPiDC oMKgwqDCoH0KPiA+ID4gwqDCoMKgwqAqY3MrKyA9IE1JX05PT1A7Cj4gPiA+IEBAIC0xNDY5LDcg KzE0NzAsOCBAQCBnZW44X2VtaXRfZmx1c2hfY29oZXJlbnRsM193YShzdHJ1Y3QKPiA+ID4gaW50 ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiAqYmF0Y2gpCj4gPiA+IMKgwqDCoMKgKmJhdGNoKysg PSBpOTE1X3NjcmF0Y2hfb2Zmc2V0KGVuZ2luZS0+aTkxNSkgKyAyNTY7Cj4gPiA+IMKgwqDCoMKg KmJhdGNoKysgPSAwOwo+ID4gPiAKPiA+ID4gLcKgwqDCoCAqYmF0Y2grKyA9IE1JX0xPQURfUkVH SVNURVJfSU1NKDEpOwo+ID4gPiArwqDCoMKgIC8qIEdlbjgvOSBvbmx5IHNvIG5vIG5lZWQgdG8g c3VwcG9ydCByZWxhdGl2ZSBvZmZzZXRzICovCj4gPiA+ICvCoMKgwqAgKmJhdGNoKysgPSBfX01J X0xPQURfUkVHSVNURVJfSU1NKDEpOwo+ID4gPiDCoMKgwqDCoCpiYXRjaCsrID0gaTkxNV9tbWlv X3JlZ19vZmZzZXQoR0VOOF9MM1NRQ1JFRzQpOwo+ID4gPiDCoMKgwqDCoCpiYXRjaCsrID0gMHg0 MDQwMDAwMCB8IEdFTjhfTFFTQ19GTFVTSF9DT0hFUkVOVF9MSU5FUzsKPiA+ID4gCj4gPiA+IEBA IC0xNTQwLDEzICsxNTQyLDE0IEBAIHN0cnVjdCBscmkgewo+ID4gPiDCoMKgwqDCoHUzMiB2YWx1 ZTsKPiA+ID4gfTsKPiA+ID4gCj4gPiA+IC1zdGF0aWMgdTMyICplbWl0X2xyaSh1MzIgKmJhdGNo LCBjb25zdCBzdHJ1Y3QgbHJpICpscmksIHVuc2lnbmVkCj4gPiA+IGludCBjb3VudCkKPiA+ID4g K3N0YXRpYyB1MzIgKmVtaXRfbHJpKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMy ICpiYXRjaCwKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBzdHJ1Y3QgbHJp ICpscmksIHVuc2lnbmVkIGludCBjb3VudCkKPiA+ID4gewo+ID4gPiDCoMKgwqDCoEdFTV9CVUdf T04oIWNvdW50IHx8IGNvdW50ID4gNjMpOwo+ID4gPiAKPiA+ID4gLcKgwqDCoCAqYmF0Y2grKyA9 IE1JX0xPQURfUkVHSVNURVJfSU1NKGNvdW50KTsKPiA+ID4gK8KgwqDCoCAqYmF0Y2grKyA9IGk5 MTVfZ2V0X2xyaV9jbWQoZW5naW5lLCBjb3VudCk7Cj4gPiA+IMKgwqDCoMKgZG8gewo+ID4gPiAt wqDCoMKgwqDCoMKgwqAgKmJhdGNoKysgPSBpOTE1X21taW9fcmVnX29mZnNldChscmktPnJlZyk7 Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoCAqYmF0Y2grKyA9IGk5MTVfZ2V0X2xyaV9yZWcoZW5naW5l LCBscmktPnJlZyk7Cj4gPiA+IMKgwqDCoMKgwqDCoMKgICpiYXRjaCsrID0gbHJpLT52YWx1ZTsK PiA+ID4gwqDCoMKgwqB9IHdoaWxlIChscmkrKywgLS1jb3VudCk7Cj4gPiA+IMKgwqDCoMKgKmJh dGNoKysgPSBNSV9OT09QOwo+ID4gPiBAQCAtMTU4NCw3ICsxNTg3LDcgQEAgc3RhdGljIHUzMiAq Z2VuOV9pbml0X2luZGlyZWN0Y3R4X2JiKHN0cnVjdAo+ID4gPiBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwgdTMyICpiYXRjaCkKPiA+ID4gwqDCoMKgwqAvKiBXYUZsdXNoQ29oZXJlbnRMM0NhY2hl TGluZXNBdENvbnRleHRTd2l0Y2g6c2tsLGJ4dCxnbGsgKi8KPiA+ID4gwqDCoMKgwqBiYXRjaCA9 IGdlbjhfZW1pdF9mbHVzaF9jb2hlcmVudGwzX3dhKGVuZ2luZSwgYmF0Y2gpOwo+ID4gPiAKPiA+ ID4gLcKgwqDCoCBiYXRjaCA9IGVtaXRfbHJpKGJhdGNoLCBscmksIEFSUkFZX1NJWkUobHJpKSk7 Cj4gPiA+ICvCoMKgwqAgYmF0Y2ggPSBlbWl0X2xyaShlbmdpbmUsIGJhdGNoLCBscmksIEFSUkFZ X1NJWkUobHJpKSk7Cj4gPiA+IAo+ID4gPiDCoMKgwqDCoC8qIFdhTWVkaWFQb29sU3RhdGVDbWRJ bldBQkI6Ynh0LGdsayAqLwo+ID4gPiDCoMKgwqDCoGlmIChIQVNfUE9PTEVEX0VVKGVuZ2luZS0+ aTkxNSkpIHsKPiA+ID4gQEAgLTI1MzcsMTAgKzI1NDAsMTAgQEAgc3RhdGljIHZvaWQgZXhlY2xp c3RzX2luaXRfcmVnX3N0YXRlKHUzMiAqcmVncywKPiA+ID4gwqDCoMKgwqAgKiB2YWx1ZXMgKGlu Y2x1ZGluZyBhbGwgdGhlIG1pc3NpbmcgTUlfTE9BRF9SRUdJU1RFUl9JTU0KPiA+ID4gY29tbWFu ZHMgdGhhdAo+ID4gPiDCoMKgwqDCoCAqIHdlIGFyZSBub3QgaW5pdGlhbGl6aW5nIGhlcmUpLgo+ ID4gPiDCoMKgwqDCoCAqLwo+ID4gPiAtwqDCoMKgIHJlZ3NbQ1RYX0xSSV9IRUFERVJfMF0gPSBN SV9MT0FEX1JFR0lTVEVSX0lNTShyY3MgPyAxNCA6IDExKSB8Cj4gPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBNSV9MUklfRk9SQ0VfUE9TVEVEOwo+ID4gPiArwqDCoMKgIHJl Z3NbQ1RYX0xSSV9IRUFERVJfMF0gPSBpOTE1X2dldF9scmlfY21kKGVuZ2luZSwgcmNzID8gMTQg OiAxMSkgfAo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgTUlfTFJJX0ZPUkNFX1BPU1RFRDsKPiA+ID4gCj4gPiA+IC3CoMKgwqAgQ1RYX1JF RyhyZWdzLCBDVFhfQ09OVEVYVF9DT05UUk9MLCBSSU5HX0NPTlRFWFRfQ09OVFJPTChiYXNlKSwK PiA+ID4gK8KgwqDCoCBDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RYX0NPTlRFWFRfQ09OVFJPTCwK PiA+ID4gUklOR19DT05URVhUX0NPTlRST0woYmFzZSksCj4gPiA+IMKgwqDCoMKgwqDCoMKgIF9N QVNLRURfQklUX0RJU0FCTEUoQ1RYX0NUUkxfRU5HSU5FX0NUWF9SRVNUT1JFX0lOSElCSVQpIHwK PiA+ID4gwqDCoMKgwqDCoMKgwqAgX01BU0tFRF9CSVRfRU5BQkxFKENUWF9DVFJMX0lOSElCSVRf U1lOX0NUWF9TV0lUQ0gpKTsKPiA+ID4gwqDCoMKgwqBpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkx NSkgPCAxMSkgewo+ID4gPiBAQCAtMjU0OCwyMiArMjU1MSwyMyBAQCBzdGF0aWMgdm9pZCBleGVj bGlzdHNfaW5pdF9yZWdfc3RhdGUodTMyICpyZWdzLAo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIF9NQVNLRURfQklUX0RJU0FCTEUoQ1RYX0NUUkxfRU5HSU5FX0NUWF9TQVZFX0lOSElCSVQg fAo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIENU WF9DVFJMX1JTX0NUWF9FTkFCTEUpOwo+ID4gPiDCoMKgwqDCoH0KPiA+ID4gLcKgwqDCoCBDVFhf UkVHKHJlZ3MsIENUWF9SSU5HX0hFQUQsIFJJTkdfSEVBRChiYXNlKSwgMCk7Cj4gPiA+IC3CoMKg wqAgQ1RYX1JFRyhyZWdzLCBDVFhfUklOR19UQUlMLCBSSU5HX1RBSUwoYmFzZSksIDApOwo+ID4g PiAtwqDCoMKgIENUWF9SRUcocmVncywgQ1RYX1JJTkdfQlVGRkVSX1NUQVJULCBSSU5HX1NUQVJU KGJhc2UpLCAwKTsKPiA+ID4gLcKgwqDCoCBDVFhfUkVHKHJlZ3MsIENUWF9SSU5HX0JVRkZFUl9D T05UUk9MLCBSSU5HX0NUTChiYXNlKSwKPiA+ID4gK8KgwqDCoCBDVFhfUkVHKGVuZ2luZSwgcmVn cywgQ1RYX1JJTkdfSEVBRCwgUklOR19IRUFEKGJhc2UpLCAwKTsKPiA+ID4gK8KgwqDCoCBDVFhf UkVHKGVuZ2luZSwgcmVncywgQ1RYX1JJTkdfVEFJTCwgUklOR19UQUlMKGJhc2UpLCAwKTsKPiA+ ID4gK8KgwqDCoCBDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RYX1JJTkdfQlVGRkVSX1NUQVJULCBS SU5HX1NUQVJUKGJhc2UpLCAwKTsKPiA+ID4gK8KgwqDCoCBDVFhfUkVHKGVuZ2luZSwgcmVncywg Q1RYX1JJTkdfQlVGRkVSX0NPTlRST0wsIFJJTkdfQ1RMKGJhc2UpLAo+ID4gPiDCoMKgwqDCoMKg wqDCoCBSSU5HX0NUTF9TSVpFKHJpbmctPnNpemUpIHwgUklOR19WQUxJRCk7Cj4gPiA+IC3CoMKg wqAgQ1RYX1JFRyhyZWdzLCBDVFhfQkJfSEVBRF9VLCBSSU5HX0JCQUREUl9VRFcoYmFzZSksIDAp Owo+ID4gPiAtwqDCoMKgIENUWF9SRUcocmVncywgQ1RYX0JCX0hFQURfTCwgUklOR19CQkFERFIo YmFzZSksIDApOwo+ID4gPiAtwqDCoMKgIENUWF9SRUcocmVncywgQ1RYX0JCX1NUQVRFLCBSSU5H X0JCU1RBVEUoYmFzZSksIFJJTkdfQkJfUFBHVFQpOwo+ID4gPiAtwqDCoMKgIENUWF9SRUcocmVn cywgQ1RYX1NFQ09ORF9CQl9IRUFEX1UsIFJJTkdfU0JCQUREUl9VRFcoYmFzZSksIDApOwo+ID4g PiAtwqDCoMKgIENUWF9SRUcocmVncywgQ1RYX1NFQ09ORF9CQl9IRUFEX0wsIFJJTkdfU0JCQURE UihiYXNlKSwgMCk7Cj4gPiA+IC3CoMKgwqAgQ1RYX1JFRyhyZWdzLCBDVFhfU0VDT05EX0JCX1NU QVRFLCBSSU5HX1NCQlNUQVRFKGJhc2UpLCAwKTsKPiA+ID4gK8KgwqDCoCBDVFhfUkVHKGVuZ2lu ZSwgcmVncywgQ1RYX0JCX0hFQURfVSwgUklOR19CQkFERFJfVURXKGJhc2UpLCAwKTsKPiA+ID4g K8KgwqDCoCBDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RYX0JCX0hFQURfTCwgUklOR19CQkFERFIo YmFzZSksIDApOwo+ID4gPiArwqDCoMKgIENUWF9SRUcoZW5naW5lLCByZWdzLCBDVFhfQkJfU1RB VEUsIFJJTkdfQkJTVEFURShiYXNlKSwKPiA+ID4gUklOR19CQl9QUEdUVCk7Cj4gPiA+ICvCoMKg wqAgQ1RYX1JFRyhlbmdpbmUsIHJlZ3MsIENUWF9TRUNPTkRfQkJfSEVBRF9VLAo+ID4gPiBSSU5H X1NCQkFERFJfVURXKGJhc2UpLCAwKTsKPiA+ID4gK8KgwqDCoCBDVFhfUkVHKGVuZ2luZSwgcmVn cywgQ1RYX1NFQ09ORF9CQl9IRUFEX0wsIFJJTkdfU0JCQUREUihiYXNlKSwgMCk7Cj4gPiA+ICvC oMKgwqAgQ1RYX1JFRyhlbmdpbmUsIHJlZ3MsIENUWF9TRUNPTkRfQkJfU1RBVEUsIFJJTkdfU0JC U1RBVEUoYmFzZSksIDApOwo+ID4gPiDCoMKgwqDCoGlmIChyY3MpIHsKPiA+ID4gwqDCoMKgwqDC oMKgwqAgc3RydWN0IGk5MTVfY3R4X3dvcmthcm91bmRzICp3YV9jdHggPSAmZW5naW5lLT53YV9j dHg7Cj4gPiA+IAo+ID4gPiAtwqDCoMKgwqDCoMKgwqAgQ1RYX1JFRyhyZWdzLCBDVFhfUkNTX0lO RElSRUNUX0NUWCwgUklOR19JTkRJUkVDVF9DVFgoYmFzZSksIDApOwo+ID4gPiAtwqDCoMKgwqDC oMKgwqAgQ1RYX1JFRyhyZWdzLCBDVFhfUkNTX0lORElSRUNUX0NUWF9PRkZTRVQsCj4gPiA+ICvC oMKgwqDCoMKgwqDCoCBDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RYX1JDU19JTkRJUkVDVF9DVFgs Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFJJTkdfSU5ESVJFQ1RfQ1RYKGJhc2UpLCAw KTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgIENUWF9SRUcoZW5naW5lLCByZWdzLCBDVFhfUkNTX0lO RElSRUNUX0NUWF9PRkZTRVQsCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUklOR19JTkRJ UkVDVF9DVFhfT0ZGU0VUKGJhc2UpLCAwKTsKPiA+ID4gwqDCoMKgwqDCoMKgwqAgaWYgKHdhX2N0 eC0+aW5kaXJlY3RfY3R4LnNpemUpIHsKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIg Z2d0dF9vZmZzZXQgPSBpOTE1X2dndHRfb2Zmc2V0KHdhX2N0eC0+dm1hKTsKPiA+ID4gQEAgLTI1 NzYsNyArMjU4MCw4IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19pbml0X3JlZ19zdGF0ZSh1MzIg KnJlZ3MsCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnRlbF9scl9pbmRp cmVjdF9jdHhfb2Zmc2V0KGVuZ2luZSkgPDwgNjsKPiA+ID4gwqDCoMKgwqDCoMKgwqAgfQo+ID4g PiAKPiA+ID4gLcKgwqDCoMKgwqDCoMKgIENUWF9SRUcocmVncywgQ1RYX0JCX1BFUl9DVFhfUFRS LCBSSU5HX0JCX1BFUl9DVFhfUFRSKGJhc2UpLCAwKTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgIENU WF9SRUcoZW5naW5lLCByZWdzLCBDVFhfQkJfUEVSX0NUWF9QVFIsCj4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIFJJTkdfQkJfUEVSX0NUWF9QVFIoYmFzZSksIDApOwo+ID4gPiDCoMKgwqDC oMKgwqDCoCBpZiAod2FfY3R4LT5wZXJfY3R4LnNpemUpIHsKPiA+ID4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB1MzIgZ2d0dF9vZmZzZXQgPSBpOTE1X2dndHRfb2Zmc2V0KHdhX2N0eC0+dm1hKTsK PiA+ID4gCj4gPiA+IEBAIC0yNTg1LDE4ICsyNTkwLDE5IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0 c19pbml0X3JlZ19zdGF0ZSh1MzIgKnJlZ3MsCj4gPiA+IMKgwqDCoMKgwqDCoMKgIH0KPiA+ID4g wqDCoMKgwqB9Cj4gPiA+IAo+ID4gPiAtwqDCoMKgIHJlZ3NbQ1RYX0xSSV9IRUFERVJfMV0gPSBN SV9MT0FEX1JFR0lTVEVSX0lNTSg5KSB8Cj4gPiA+IE1JX0xSSV9GT1JDRV9QT1NURUQ7Cj4gPiA+ ICvCoMKgwqAgcmVnc1tDVFhfTFJJX0hFQURFUl8xXSA9IGk5MTVfZ2V0X2xyaV9jbWQoZW5naW5l LCA5KSB8Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBNSV9MUklfRk9SQ0VfUE9TVEVEOwo+ID4gPiAKPiA+ID4gLcKgwqDCoCBDVFhfUkVH KHJlZ3MsIENUWF9DVFhfVElNRVNUQU1QLCBSSU5HX0NUWF9USU1FU1RBTVAoYmFzZSksIDApOwo+ ID4gPiArwqDCoMKgIENUWF9SRUcoZW5naW5lLCByZWdzLCBDVFhfQ1RYX1RJTUVTVEFNUCwKPiA+ ID4gUklOR19DVFhfVElNRVNUQU1QKGJhc2UpLCAwKTsKPiA+ID4gwqDCoMKgwqAvKiBQRFAgdmFs dWVzIHdlbGwgYmUgYXNzaWduZWQgbGF0ZXIgaWYgbmVlZGVkICovCj4gPiA+IC3CoMKgwqAgQ1RY X1JFRyhyZWdzLCBDVFhfUERQM19VRFcsIEdFTjhfUklOR19QRFBfVURXKGJhc2UsIDMpLCAwKTsK PiA+ID4gLcKgwqDCoCBDVFhfUkVHKHJlZ3MsIENUWF9QRFAzX0xEVywgR0VOOF9SSU5HX1BEUF9M RFcoYmFzZSwgMyksIDApOwo+ID4gPiAtwqDCoMKgIENUWF9SRUcocmVncywgQ1RYX1BEUDJfVURX LCBHRU44X1JJTkdfUERQX1VEVyhiYXNlLCAyKSwgMCk7Cj4gPiA+IC3CoMKgwqAgQ1RYX1JFRyhy ZWdzLCBDVFhfUERQMl9MRFcsIEdFTjhfUklOR19QRFBfTERXKGJhc2UsIDIpLCAwKTsKPiA+ID4g LcKgwqDCoCBDVFhfUkVHKHJlZ3MsIENUWF9QRFAxX1VEVywgR0VOOF9SSU5HX1BEUF9VRFcoYmFz ZSwgMSksIDApOwo+ID4gPiAtwqDCoMKgIENUWF9SRUcocmVncywgQ1RYX1BEUDFfTERXLCBHRU44 X1JJTkdfUERQX0xEVyhiYXNlLCAxKSwgMCk7Cj4gPiA+IC3CoMKgwqAgQ1RYX1JFRyhyZWdzLCBD VFhfUERQMF9VRFcsIEdFTjhfUklOR19QRFBfVURXKGJhc2UsIDApLCAwKTsKPiA+ID4gLcKgwqDC oCBDVFhfUkVHKHJlZ3MsIENUWF9QRFAwX0xEVywgR0VOOF9SSU5HX1BEUF9MRFcoYmFzZSwgMCks IDApOwo+ID4gPiArwqDCoMKgIENUWF9SRUcoZW5naW5lLCByZWdzLCBDVFhfUERQM19VRFcsIEdF TjhfUklOR19QRFBfVURXKGJhc2UsIDMpLCAwKTsKPiA+ID4gK8KgwqDCoCBDVFhfUkVHKGVuZ2lu ZSwgcmVncywgQ1RYX1BEUDNfTERXLCBHRU44X1JJTkdfUERQX0xEVyhiYXNlLCAzKSwgMCk7Cj4g PiA+ICvCoMKgwqAgQ1RYX1JFRyhlbmdpbmUsIHJlZ3MsIENUWF9QRFAyX1VEVywgR0VOOF9SSU5H X1BEUF9VRFcoYmFzZSwgMiksIDApOwo+ID4gPiArwqDCoMKgIENUWF9SRUcoZW5naW5lLCByZWdz LCBDVFhfUERQMl9MRFcsIEdFTjhfUklOR19QRFBfTERXKGJhc2UsIDIpLCAwKTsKPiA+ID4gK8Kg wqDCoCBDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RYX1BEUDFfVURXLCBHRU44X1JJTkdfUERQX1VE VyhiYXNlLCAxKSwgMCk7Cj4gPiA+ICvCoMKgwqAgQ1RYX1JFRyhlbmdpbmUsIHJlZ3MsIENUWF9Q RFAxX0xEVywgR0VOOF9SSU5HX1BEUF9MRFcoYmFzZSwgMSksIDApOwo+ID4gPiArwqDCoMKgIENU WF9SRUcoZW5naW5lLCByZWdzLCBDVFhfUERQMF9VRFcsIEdFTjhfUklOR19QRFBfVURXKGJhc2Us IDApLCAwKTsKPiA+ID4gK8KgwqDCoCBDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RYX1BEUDBfTERX LCBHRU44X1JJTkdfUERQX0xEVyhiYXNlLCAwKSwgMCk7Cj4gPiA+IAo+ID4gPiDCoMKgwqDCoGlm IChpOTE1X3ZtX2lzXzRsdmwoJnBwZ3R0LT52bSkpIHsKPiA+ID4gwqDCoMKgwqDCoMKgwqAgLyog NjRiIFBQR1RUICg0OGJpdCBjYW5vbmljYWwpCj4gPiA+IEBAIC0yNjEyLDggKzI2MTgsOSBAQCBz dGF0aWMgdm9pZCBleGVjbGlzdHNfaW5pdF9yZWdfc3RhdGUodTMyICpyZWdzLAo+ID4gPiDCoMKg wqDCoH0KPiA+ID4gCj4gPiA+IMKgwqDCoMKgaWYgKHJjcykgewo+ID4gPiAtwqDCoMKgwqDCoMKg wqAgcmVnc1tDVFhfTFJJX0hFQURFUl8yXSA9IE1JX0xPQURfUkVHSVNURVJfSU1NKDEpOwo+ID4g PiAtwqDCoMKgwqDCoMKgwqAgQ1RYX1JFRyhyZWdzLCBDVFhfUl9QV1JfQ0xLX1NUQVRFLCBHRU44 X1JfUFdSX0NMS19TVEFURSwgMCk7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoCByZWdzW0NUWF9MUklf SEVBREVSXzJdID0gaTkxNV9nZXRfbHJpX2NtZChlbmdpbmUsIDEpOwo+ID4gPiArwqDCoMKgwqDC oMKgwqAgQ1RYX1JFRyhlbmdpbmUsIHJlZ3MsIENUWF9SX1BXUl9DTEtfU1RBVEUsCj4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTjhfUl9QV1JfQ0xLX1NUQVRFLCAwKTsKPiA+ID4gCj4g PiA+IMKgwqDCoMKgwqDCoMKgIGk5MTVfb2FfaW5pdF9yZWdfc3RhdGUoZW5naW5lLCBjZSwgcmVn cyk7Cj4gPiA+IMKgwqDCoMKgfQo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfbHJjX3JlZy5oCj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfbHJjX3JlZy5oCj4gPiA+IGluZGV4IDVlZjkzMmQ4MTBhNy4uNDBiMTE0MmQwZDc0IDEwMDY0 NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmNfcmVnLmgKPiA+ ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjX3JlZy5oCj4gPiA+IEBA IC0zOSwxMCArMzksMTAgQEAKPiA+ID4gI2RlZmluZSBDVFhfUl9QV1JfQ0xLX1NUQVRFwqDCoMKg wqDCoMKgwqAgMHg0Mgo+ID4gPiAjZGVmaW5lIENUWF9FTkTCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgMHg0NAo+ID4gPiAKPiA+ID4gLSNkZWZpbmUgQ1RYX1JFRyhyZWdfc3RhdGUsIHBv cywgcmVnLCB2YWwpIGRvIHsgXAo+ID4gPiArI2RlZmluZSBDVFhfUkVHKGVuZ2luZSwgcmVnX3N0 YXRlLCBwb3MsIHJlZywgdmFsKSBkbyB7IFwKPiA+ID4gwqDCoMKgwqB1MzIgKnJlZ19zdGF0ZV9f ID0gKHJlZ19zdGF0ZSk7IFwKPiA+ID4gwqDCoMKgwqBjb25zdCB1MzIgcG9zX18gPSAocG9zKTsg XAo+ID4gPiAtwqDCoMKgIChyZWdfc3RhdGVfXylbKHBvc19fKSArIDBdID0gaTkxNV9tbWlvX3Jl Z19vZmZzZXQocmVnKTsgXAo+ID4gPiArwqDCoMKgIChyZWdfc3RhdGVfXylbKHBvc19fKSArIDBd ID0gaTkxNV9nZXRfbHJpX3JlZygoZW5naW5lKSwgKHJlZykpOyBcCj4gPiA+IMKgwqDCoMKgKHJl Z19zdGF0ZV9fKVsocG9zX18pICsgMV0gPSAodmFsKTsgXAo+ID4gPiB9IHdoaWxlICgwKQo+ID4g PiAKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX21vY3Mu Ywo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX21vY3MuYwo+ID4gPiBpbmRl eCA3OWRmNjYwMjJkM2EuLjVkYWU2MzMzNDgxZCAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfbW9jcy5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX21vY3MuYwo+ID4gPiBAQCAtMzI0LDkgKzMyNCw2IEBAIHN0YXRpYyB1MzIg Z2V0X2VudHJ5X2NvbnRyb2woY29uc3Qgc3RydWN0Cj4gPiA+IGRybV9pOTE1X21vY3NfdGFibGUg KnRhYmxlLAo+ID4gPiAvKioKPiA+ID4gwqAqIGludGVsX21vY3NfaW5pdF9lbmdpbmUoKSAtIGVt aXQgdGhlIG1vY3MgY29udHJvbCB0YWJsZQo+ID4gPiDCoCogQGVuZ2luZTrCoMKgwqAgVGhlIGVu Z2luZSBmb3Igd2hvbSB0byBlbWl0IHRoZSByZWdpc3RlcnMuCj4gPiA+IC0gKgo+ID4gPiAtICog VGhpcyBmdW5jdGlvbiBzaW1wbHkgZW1pdHMgYSBNSV9MT0FEX1JFR0lTVEVSX0lNTSBjb21tYW5k IGZvciB0aGUKPiA+ID4gLSAqIGdpdmVuIHRhYmxlIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBhZGRy ZXNzLgo+ID4gPiDCoCovCj4gPiA+IHZvaWQgaW50ZWxfbW9jc19pbml0X2VuZ2luZShzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gPiA+IHsKPiA+ID4gQEAgLTM4MCwxOCArMzc3LDIw IEBAIHN0YXRpYyBpbnQgZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUoc3RydWN0Cj4gPiA+IGk5MTVf cmVxdWVzdCAqcnEsCj4gPiA+IMKgwqDCoMKgaWYgKElTX0VSUihjcykpCj4gPiA+IMKgwqDCoMKg wqDCoMKgIHJldHVybiBQVFJfRVJSKGNzKTsKPiA+ID4gCj4gPiA+IC3CoMKgwqAgKmNzKysgPSBN SV9MT0FEX1JFR0lTVEVSX0lNTSh0YWJsZS0+bl9lbnRyaWVzKTsKPiA+ID4gK8KgwqDCoCAqY3Mr KyA9IGk5MTVfZ2V0X2xyaV9jbWQocnEtPmVuZ2luZSwgdGFibGUtPm5fZW50cmllcyk7Cj4gPiA+ IAo+ID4gPiDCoMKgwqDCoGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRhYmxlLT5zaXplOyBpbmRl eCsrKSB7Cj4gPiA+IMKgwqDCoMKgwqDCoMKgIHUzMiB2YWx1ZSA9IGdldF9lbnRyeV9jb250cm9s KHRhYmxlLCBpbmRleCk7Cj4gPiA+IAo+ID4gPiAtwqDCoMKgwqDCoMKgwqAgKmNzKysgPSBpOTE1 X21taW9fcmVnX29mZnNldChtb2NzX3JlZ2lzdGVyKGVuZ2luZSwgaW5kZXgpKTsKPiA+ID4gK8Kg wqDCoMKgwqDCoMKgICpjcysrID0gaTkxNV9nZXRfbHJpX3JlZyhycS0+ZW5naW5lLAo+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtb2NzX3JlZ2lzdGVyKGVu Z2luZSwgaW5kZXgpKTsKPiA+ID4gwqDCoMKgwqDCoMKgwqAgKmNzKysgPSB2YWx1ZTsKPiA+ID4g wqDCoMKgwqB9Cj4gPiA+IAo+ID4gPiDCoMKgwqDCoC8qIEFsbCByZW1haW5pbmcgZW50cmllcyBh cmUgYWxzbyB1bnVzZWQgKi8KPiA+ID4gwqDCoMKgwqBmb3IgKDsgaW5kZXggPCB0YWJsZS0+bl9l bnRyaWVzOyBpbmRleCsrKSB7Cj4gPiA+IC3CoMKgwqDCoMKgwqDCoCAqY3MrKyA9IGk5MTVfbW1p b19yZWdfb2Zmc2V0KG1vY3NfcmVnaXN0ZXIoZW5naW5lLCBpbmRleCkpOwo+ID4gPiArwqDCoMKg wqDCoMKgwqAgKmNzKysgPSBpOTE1X2dldF9scmlfcmVnKHJxLT5lbmdpbmUsCj4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1vY3NfcmVnaXN0ZXIoZW5naW5l LCBpbmRleCkpOwo+ID4gPiDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IHVudXNlZF92YWx1ZTsKPiA+ ID4gwqDCoMKgwqB9Cj4gPiA+IAo+ID4gPiBAQCAtNDQ5LDcgKzQ0OCwxMSBAQCBzdGF0aWMgaW50 IGVtaXRfbW9jc19sM2NjX3RhYmxlKHN0cnVjdAo+ID4gPiBpOTE1X3JlcXVlc3QgKnJxLAo+ID4g PiDCoMKgwqDCoGlmIChJU19FUlIoY3MpKQo+ID4gPiDCoMKgwqDCoMKgwqDCoCByZXR1cm4gUFRS X0VSUihjcyk7Cj4gPiA+IAo+ID4gPiAtwqDCoMKgICpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9J TU0odGFibGUtPm5fZW50cmllcyAvIDIpOwo+ID4gPiArwqDCoMKgIC8qCj4gPiA+ICvCoMKgwqDC oCAqIEdFTjlfTE5DRkNNT0NTIGlzIG5vdCBlbmdpbmUgcmVsYXRpdmUsIHRoZXJlZm9yZSB0aGVy ZSBpcyBubwo+ID4gPiArwqDCoMKgwqAgKiBuZWVkIGZvciByZWxhdGl2ZSBhZGRyZXNzaW5nPwo+ ID4gPiArwqDCoMKgwqAgKi8KPiA+ID4gK8KgwqDCoCAqY3MrKyA9IF9fTUlfTE9BRF9SRUdJU1RF Ul9JTU0odGFibGUtPm5fZW50cmllcyAvIDIpOwo+ID4gPiAKPiA+ID4gwqDCoMKgwqBmb3IgKGkg PSAwOyBpIDwgdGFibGUtPnNpemUgLyAyOyBpKyspIHsKPiA+ID4gwqDCoMKgwqDCoMKgwqAgdTE2 IGxvdyA9IGdldF9lbnRyeV9sM2NjKHRhYmxlLCAyICogaSk7Cj4gPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nYnVmZmVyLmMKPiA+ID4gYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nYnVmZmVyLmMKPiA+ID4gaW5kZXggZjBkNjBhZmZk YmEzLi5lOThjMmZlNzI3YTUgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX3JpbmdidWZmZXIuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9yaW5nYnVmZmVyLmMKPiA+ID4gQEAgLTE1MTYsMTIgKzE1MTYsMTMgQEAgc3RhdGlj IGludCBsb2FkX3BkX2RpcihzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiA+ID4gwqDCoMKgwqBp ZiAoSVNfRVJSKGNzKSkKPiA+ID4gwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIoY3MpOwo+ ID4gPiAKPiA+ID4gLcKgwqDCoCAqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKDEpOwo+ID4g PiAtwqDCoMKgICpjcysrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19QUF9ESVJfRENMVihl bmdpbmUtPm1taW9fYmFzZSkpOwo+ID4gPiArwqDCoMKgIC8qIENhbiB0aGVzZSBub3QgYmUgbWVy Z2VkIGludG8gYSBzaW5nbGUgTFJJPz8/ICovCj4gPiA+ICvCoMKgwqAgKmNzKysgPSBpOTE1X2dl dF9scmlfY21kKGVuZ2luZSwgMSk7Cj4gPiA+ICvCoMKgwqAgKmNzKysgPSBpOTE1X2dldF9scmlf cmVnKGVuZ2luZSwKPiA+ID4gUklOR19QUF9ESVJfRENMVihlbmdpbmUtPm1taW9fYmFzZSkpOwo+ ID4gPiDCoMKgwqDCoCpjcysrID0gUFBfRElSX0RDTFZfMkc7Cj4gPiA+IAo+ID4gPiAtwqDCoMKg ICpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU0oMSk7Cj4gPiA+IC3CoMKgwqAgKmNzKysgPSBp OTE1X21taW9fcmVnX29mZnNldChSSU5HX1BQX0RJUl9CQVNFKGVuZ2luZS0+bW1pb19iYXNlKSk7 Cj4gPiA+ICvCoMKgwqAgKmNzKysgPSBpOTE1X2dldF9scmlfY21kKGVuZ2luZSwgMSk7Cj4gPiA+ ICvCoMKgwqAgKmNzKysgPSBpOTE1X2dldF9scmlfcmVnKGVuZ2luZSwKPiA+ID4gUklOR19QUF9E SVJfQkFTRShlbmdpbmUtPm1taW9fYmFzZSkpOwo+ID4gPiDCoMKgwqDCoCpjcysrID0gcHBndHQt PnBkLmJhc2UuZ2d0dF9vZmZzZXQgPDwgMTA7Cj4gPiA+IAo+ID4gPiDCoMKgwqDCoGludGVsX3Jp bmdfYWR2YW5jZShycSwgY3MpOwo+ID4gPiBAQCAtMTU4OSw3ICsxNTkwLDExIEBAIHN0YXRpYyBp bmxpbmUgaW50IG1pX3NldF9jb250ZXh0KHN0cnVjdAo+ID4gPiBpOTE1X3JlcXVlc3QgKnJxLCB1 MzIgZmxhZ3MpCj4gPiA+IMKgwqDCoMKgwqDCoMKgIGlmIChudW1fZW5naW5lcykgewo+ID4gPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNpZ25hbGxlcjsK PiA+ID4gCj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpjcysrID0gTUlfTE9BRF9SRUdJ U1RFUl9JTU0obnVtX2VuZ2luZXMpOwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKgo+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogTXVzdCB1c2UgYWJzb2x1dGUgZW5naW5l IGFkZHJlc3MgYXMgdGhlIHJlZ2lzdGVyCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KiB3cml0ZSBpcyB0YXJnZXRpbmcgYSBkaWZmZXJlbnQgZW5naW5lLgo+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICovCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpjcysrID0g X19NSV9MT0FEX1JFR0lTVEVSX0lNTShudW1fZW5naW5lcyk7Cj4gPiA+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZm9yX2VhY2hfZW5naW5lKHNpZ25hbGxlciwgaTkxNSwgaWQpIHsKPiA+ID4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChzaWduYWxsZXIgPT0gZW5naW5lKQo+ID4g PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPiA+ID4g QEAgLTE2NDMsNyArMTY0OCwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBtaV9zZXRfY29udGV4dChz dHJ1Y3QKPiA+ID4gaTkxNV9yZXF1ZXN0ICpycSwgdTMyIGZsYWdzKQo+ID4gPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNpZ25hbGxlcjsKPiA+ID4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpOTE1X3JlZ190IGxhc3RfcmVnID0ge307IC8qIGtlZXAgZ2Nj IHF1aWV0ICovCj4gPiA+IAo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IE1J X0xPQURfUkVHSVNURVJfSU1NKG51bV9lbmdpbmVzKTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgLyoKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIE11c3QgdXNlIGFic29s dXRlIGVuZ2luZSBhZGRyZXNzIGFzIHRoZSByZWdpc3Rlcgo+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICogd3JpdGUgaXMgdGFyZ2V0aW5nIGEgZGlmZmVyZW50IGVuZ2luZS4KPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAqY3MrKyA9IF9fTUlfTE9BRF9SRUdJU1RFUl9JTU0obnVtX2VuZ2luZXMpOwo+ID4gPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGZvcl9lYWNoX2VuZ2luZShzaWduYWxsZXIsIGk5MTUsIGlkKSB7 Cj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoc2lnbmFsbGVyID09IGVu Z2luZSkKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGlu dWU7Cj4gPiA+IEBAIC0xNjg3LDkgKzE2OTYsOSBAQCBzdGF0aWMgaW50IHJlbWFwX2wzKHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJxLAo+ID4gPiBpbnQgc2xpY2UpCj4gPiA+IMKgwqDCoMKgICogaGVy ZSBiZWNhdXNlIG5vIG90aGVyIGNvZGUgc2hvdWxkIGFjY2VzcyB0aGVzZSByZWdpc3RlcnMKPiA+ ID4gb3RoZXIgdGhhbgo+ID4gPiDCoMKgwqDCoCAqIGF0IGluaXRpYWxpemF0aW9uIHRpbWUuCj4g PiA+IMKgwqDCoMKgICovCj4gPiA+IC3CoMKgwqAgKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lN TShHRU43X0wzTE9HX1NJWkUvNCk7Cj4gPiA+ICvCoMKgwqAgKmNzKysgPSBpOTE1X2dldF9scmlf Y21kKHJxLT5lbmdpbmUsIEdFTjdfTDNMT0dfU0laRS80KTsKPiA+ID4gwqDCoMKgwqBmb3IgKGkg PSAwOyBpIDwgR0VON19MM0xPR19TSVpFLzQ7IGkrKykgewo+ID4gPiAtwqDCoMKgwqDCoMKgwqAg KmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldChHRU43X0wzTE9HKHNsaWNlLCBpKSk7Cj4gPiA+ ICvCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IGk5MTVfZ2V0X2xyaV9yZWcocnEtPmVuZ2luZSwgR0VO N19MM0xPRyhzbGljZSwgaSkpOwo+ID4gPiDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IHJlbWFwX2lu Zm9baV07Cj4gPiA+IMKgwqDCoMKgfQo+ID4gPiDCoMKgwqDCoCpjcysrID0gTUlfTk9PUDsKPiA+ ID4gQEAgLTIzMzUsMyArMjM0NCwyMyBAQCBpbnQgaW50ZWxfcmluZ19zdWJtaXNzaW9uX2luaXQo c3RydWN0Cj4gPiA+IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ID4gPiDCoMKgwqDCoGludGVs X2VuZ2luZV9jbGVhbnVwX2NvbW1vbihlbmdpbmUpOwo+ID4gPiDCoMKgwqDCoHJldHVybiBlcnI7 Cj4gPiA+IH0KPiA+ID4gKwo+ID4gPiArdTMyIGk5MTVfZ2V0X2xyaV9jbWQoY29uc3Qgc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIKPiA+ID4gd29yZF9jb3VudCkKPiA+ID4gK3sK PiA+ID4gK8KgwqDCoCB1MzIgd29yZDsKPiA+ID4gKwo+ID4gPiArwqDCoMKgIHdvcmQgPSBfX01J X0xPQURfUkVHSVNURVJfSU1NKHdvcmRfY291bnQpOwo+ID4gPiArCj4gPiA+ICvCoMKgwqAgaWYg KGk5MTVfZW5naW5lX2hhc19yZWxhdGl2ZV9scmkoZW5naW5lKSkKPiA+ID4gK8KgwqDCoMKgwqDC oMKgIHdvcmQgfD0gTUlfTFJJX0FERF9DU19NTUlPX1NUQVJUX0dFTjExOwo+ID4gPiArCj4gPiA+ ICvCoMKgwqAgcmV0dXJuIHdvcmQ7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3UzMiBpOTE1X2dl dF9scmlfcmVnKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiA+ID4gaTkx NV9yZWdfdCByZWcpCj4gPiA+ICt7Cj4gPiA+ICvCoMKgwqAgaWYgKCFpOTE1X2VuZ2luZV9oYXNf cmVsYXRpdmVfbHJpKGVuZ2luZSkpCj4gPiA+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gaTkxNV9t bWlvX3JlZ19vZmZzZXQocmVnKTsKPiA+ID4gKwo+ID4gPiArwqDCoMKgIHJldHVybiBpOTE1X21t aW9fcmVnX29mZnNldChyZWcpIC0gZW5naW5lLT5tbWlvX2Jhc2U7Cj4gPiA+ICt9Cj4gPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF93b3JrYXJvdW5kcy5jCj4g PiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfd29ya2Fyb3VuZHMuYwo+ID4gPiBp bmRleCA0M2UyOTAzMDY1NTEuLmQ1ZWRjMTBjODYwYyAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfd29ya2Fyb3VuZHMuYwo+ID4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF93b3JrYXJvdW5kcy5jCj4gPiA+IEBAIC02MjUsOSArNjI1 LDkgQEAgaW50IGludGVsX2VuZ2luZV9lbWl0X2N0eF93YShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy cSkKPiA+ID4gwqDCoMKgwqBpZiAoSVNfRVJSKGNzKSkKPiA+ID4gwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIFBUUl9FUlIoY3MpOwo+ID4gPiAKPiA+ID4gLcKgwqDCoCAqY3MrKyA9IE1JX0xPQURfUkVH SVNURVJfSU1NKHdhbC0+Y291bnQpOwo+ID4gPiArwqDCoMKgICpjcysrID0gaTkxNV9nZXRfbHJp X2NtZChycS0+ZW5naW5lLCB3YWwtPmNvdW50KTsKPiA+ID4gwqDCoMKgwqBmb3IgKGkgPSAwLCB3 YSA9IHdhbC0+bGlzdDsgaSA8IHdhbC0+Y291bnQ7IGkrKywgd2ErKykgewo+ID4gPiAtwqDCoMKg wqDCoMKgwqAgKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldCh3YS0+cmVnKTsKPiA+ID4gK8Kg wqDCoMKgwqDCoMKgICpjcysrID0gaTkxNV9nZXRfbHJpX3JlZyhycS0+ZW5naW5lLCB3YS0+cmVn KTsKPiA+ID4gwqDCoMKgwqDCoMKgwqAgKmNzKysgPSB3YS0+dmFsOwo+ID4gPiDCoMKgwqDCoH0K PiA+ID4gwqDCoMKgwqAqY3MrKyA9IE1JX05PT1A7Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF93b3JrYXJvdW5kcy5jCj4gPiA+IGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3Rfd29ya2Fyb3VuZHMuYwo+ID4gPiBpbmRleCA5Zjc2ODBi OTk4NGIuLmIwNTEzYzFkZTUzYyAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Qvc2VsZnRlc3Rfd29ya2Fyb3VuZHMuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9zZWxmdGVzdF93b3JrYXJvdW5kcy5jCj4gPiA+IEBAIC00NDIsNiArNDQyLDcgQEAg c3RhdGljIGludCBjaGVja19kaXJ0eV93aGl0ZWxpc3Qoc3RydWN0Cj4gPiA+IGk5MTVfZ2VtX2Nv bnRleHQgKmN0eCwKPiA+ID4gCj4gPiA+IMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IGVuZ2luZS0+ d2hpdGVsaXN0LmNvdW50OyBpKyspIHsKPiA+ID4gwqDCoMKgwqDCoMKgwqAgdTMyIHJlZyA9IGk5 MTVfbW1pb19yZWdfb2Zmc2V0KGVuZ2luZS0+d2hpdGVsaXN0Lmxpc3RbaV0ucmVnKTsKPiA+ID4g K8KgwqDCoMKgwqDCoMKgIHUzMiByZWdMUkkgPSBpOTE1X2dldF9scmlfcmVnKGVuZ2luZSwKPiA+ ID4gZW5naW5lLT53aGl0ZWxpc3QubGlzdFtpXS5yZWcpOwo+ID4gPiDCoMKgwqDCoMKgwqDCoCB1 NjQgYWRkciA9IHNjcmF0Y2gtPm5vZGUuc3RhcnQ7Cj4gPiA+IMKgwqDCoMKgwqDCoMKgIHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJxOwo+ID4gPiDCoMKgwqDCoMKgwqDCoCB1MzIgc3JtLCBscm0sIHJz dmQ7Cj4gPiA+IEBAIC00NzQsOCArNDc1LDggQEAgc3RhdGljIGludCBjaGVja19kaXJ0eV93aGl0 ZWxpc3Qoc3RydWN0Cj4gPiA+IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiA+ID4gwqDCoMKgwqDC oMKgwqAgaWR4ID0gMTsKPiA+ID4gwqDCoMKgwqDCoMKgwqAgZm9yICh2ID0gMDsgdiA8IEFSUkFZ X1NJWkUodmFsdWVzKTsgdisrKSB7Cj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogTFJJ IGdhcmJhZ2UgKi8KPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKmNzKysgPSBNSV9MT0FE X1JFR0lTVEVSX0lNTSgxKTsKPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKmNzKysgPSBy ZWc7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpjcysrID0gaTkxNV9nZXRfbHJpX2Nt ZChlbmdpbmUsIDEpOwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IHJlZ0xS STsKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IHZhbHVlc1t2XTsKPiA+ID4g Cj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogU1JNIHJlc3VsdCAqLwo+ID4gPiBAQCAt NDg3LDggKzQ4OCw4IEBAIHN0YXRpYyBpbnQgY2hlY2tfZGlydHlfd2hpdGVsaXN0KHN0cnVjdAo+ ID4gPiBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gPiA+IMKgwqDCoMKgwqDCoMKgIH0KPiA+ID4g wqDCoMKgwqDCoMKgwqAgZm9yICh2ID0gMDsgdiA8IEFSUkFZX1NJWkUodmFsdWVzKTsgdisrKSB7 Cj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogTFJJIGdhcmJhZ2UgKi8KPiA+ID4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTSgxKTsKPiA+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKmNzKysgPSByZWc7Cj4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICpjcysrID0gaTkxNV9nZXRfbHJpX2NtZChlbmdpbmUsIDEpOwo+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IHJlZ0xSSTsKPiA+ID4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAqY3MrKyA9IH52YWx1ZXNbdl07Cj4gPiA+IAo+ID4gPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIC8qIFNSTSByZXN1bHQgKi8KPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d2dC9tbWlvX2NvbnRleHQuYwo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d2dC9tbWlvX2NvbnRleHQuYwo+ID4gPiBpbmRleCBhMjdiZGQzOTUxZjYuLjM4MDdjZTVmZTU2 NCAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L21taW9fY29udGV4 dC5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9tbWlvX2NvbnRleHQuYwo+ ID4gPiBAQCAtMjAwLDE0ICsyMDAsMTQgQEAgcmVzdG9yZV9jb250ZXh0X21taW9fZm9yX2luaGli aXQoc3RydWN0Cj4gPiA+IGludGVsX3ZncHUgKnZncHUsCj4gPiA+IMKgwqDCoMKgaWYgKElTX0VS UihjcykpCj4gPiA+IMKgwqDCoMKgwqDCoMKgIHJldHVybiBQVFJfRVJSKGNzKTsKPiA+ID4gCj4g PiA+IC3CoMKgwqAgKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTShjb3VudCk7Cj4gPiA+ICvC oMKgwqAgKmNzKysgPSBpOTE1X2dldF9scmlfY21kKHJlcS0+ZW5naW5lLCBjb3VudCk7Cj4gPiA+ IMKgwqDCoMKgZm9yIChtbWlvID0gZ3Z0LT5lbmdpbmVfbW1pb19saXN0Lm1taW87Cj4gPiA+IMKg wqDCoMKgwqDCoMKgwqAgaTkxNV9tbWlvX3JlZ192YWxpZChtbWlvLT5yZWcpOyBtbWlvKyspIHsK PiA+ID4gwqDCoMKgwqDCoMKgwqAgaWYgKG1taW8tPnJpbmdfaWQgIT0gcmluZ19pZCB8fAo+ID4g PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICFtbWlvLT5pbl9jb250ZXh0KQo+ID4gPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+ID4gPiAKPiA+ID4gLcKgwqDCoMKgwqDCoMKgICpj cysrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQobW1pby0+cmVnKTsKPiA+ID4gK8KgwqDCoMKgwqDC oMKgICpjcysrID0gaTkxNV9nZXRfbHJpX3JlZyhyZXEtPmVuZ2luZSwgbW1pby0+cmVnKTsKPiA+ ID4gwqDCoMKgwqDCoMKgwqAgKmNzKysgPSB2Z3B1X3ZyZWdfdCh2Z3B1LCBtbWlvLT5yZWcpIHwK PiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChtbWlvLT5tYXNrIDw8IDE2KTsK PiA+ID4gwqDCoMKgwqDCoMKgwqAgZ3Z0X2RiZ19jb3JlKCJhZGQgbHJpIHJlZyBwYWlyIDB4JXg6 MHgleCBpbiBpbmhpYml0IGN0eCwKPiA+ID4gdmdwdTolZCwgcmluZF9pZDolZFxuIiwKPiA+ID4g QEAgLTIzNSw3ICsyMzUsMTEgQEAgcmVzdG9yZV9yZW5kZXJfbW9jc19jb250cm9sX2Zvcl9pbmhp Yml0KHN0cnVjdAo+ID4gPiBpbnRlbF92Z3B1ICp2Z3B1LAo+ID4gPiDCoMKgwqDCoGlmIChJU19F UlIoY3MpKQo+ID4gPiDCoMKgwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihjcyk7Cj4gPiA+IAo+ ID4gPiAtwqDCoMKgICpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU0oR0VOOV9NT0NTX1NJWkUp Owo+ID4gPiArwqDCoMKgIC8qCj4gPiA+ICvCoMKgwqDCoCAqIEdFTjlfR0ZYX01PQ1MgaXMgbm90 IGVuZ2luZSByZWxhdGl2ZSwgdGhlcmVmb3JlIHRoZXJlIGlzIG5vCj4gPiA+ICvCoMKgwqDCoCAq IG5lZWQgZm9yIHJlbGF0aXZlIGFkZHJlc3NpbmcuCj4gPiA+ICvCoMKgwqDCoCAqLwo+ID4gPiAr wqDCoMKgICpjcysrID0gX19NSV9MT0FEX1JFR0lTVEVSX0lNTShHRU45X01PQ1NfU0laRSk7Cj4g PiA+IAo+ID4gPiDCoMKgwqDCoGZvciAoaW5kZXggPSAwOyBpbmRleCA8IEdFTjlfTU9DU19TSVpF OyBpbmRleCsrKSB7Cj4gPiA+IMKgwqDCoMKgwqDCoMKgICpjcysrID0gaTkxNV9tbWlvX3JlZ19v ZmZzZXQoR0VOOV9HRlhfTU9DUyhpbmRleCkpOwo+ID4gPiBAQCAtMjYyLDcgKzI2NiwxMSBAQCBy ZXN0b3JlX3JlbmRlcl9tb2NzX2wzY2NfZm9yX2luaGliaXQoc3RydWN0Cj4gPiA+IGludGVsX3Zn cHUgKnZncHUsCj4gPiA+IMKgwqDCoMKgaWYgKElTX0VSUihjcykpCj4gPiA+IMKgwqDCoMKgwqDC oMKgIHJldHVybiBQVFJfRVJSKGNzKTsKPiA+ID4gCj4gPiA+IC3CoMKgwqAgKmNzKysgPSBNSV9M T0FEX1JFR0lTVEVSX0lNTShHRU45X01PQ1NfU0laRSAvIDIpOwo+ID4gPiArwqDCoMKgIC8qCj4g PiA+ICvCoMKgwqDCoCAqIEdFTjlfTE5DRkNNT0NTIGlzIG5vdCBlbmdpbmUgcmVsYXRpdmUsIHRo ZXJlZm9yZSB0aGVyZSBpcyBubwo+ID4gPiArwqDCoMKgwqAgKiBuZWVkIGZvciByZWxhdGl2ZSBh ZGRyZXNzaW5nLgo+ID4gPiArwqDCoMKgwqAgKi8KPiA+ID4gK8KgwqDCoCAqY3MrKyA9IF9fTUlf TE9BRF9SRUdJU1RFUl9JTU0oR0VOOV9NT0NTX1NJWkUgLyAyKTsKPiA+ID4gCj4gPiA+IMKgwqDC oMKgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgR0VOOV9NT0NTX1NJWkUgLyAyOyBpbmRleCsrKSB7 Cj4gPiA+IMKgwqDCoMKgwqDCoMKgICpjcysrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOV9M TkNGQ01PQ1MoaW5kZXgpKTsKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfY21kX3BhcnNlci5jCj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRf cGFyc2VyLmMKPiA+ID4gaW5kZXggZTlmYWRjYjRkNTkyLi5mZDE4M2U3MmRhY2UgMTAwNjQ0Cj4g PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfY21kX3BhcnNlci5jCj4gPiA+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfY21kX3BhcnNlci5jCj4gPiA+IEBAIC0yMjEs NyArMjIxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9jbWRfZGVzY3JpcHRvcgo+ ID4gPiBjb21tb25fY21kc1tdID0gewo+ID4gPiDCoMKgwqDCoENNRCjCoCBNSV9TVVNQRU5EX0ZM VVNILMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFNNSSzCoMKgwqAgRizCoCAxLMKg wqDCoMKgwqAgU8KgICksCj4gPiA+IMKgwqDCoMKgQ01EKMKgIE1JX1NFTUFQSE9SRV9NQk9YLMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTTUkswqDCoCAhRizCoCAweEZGLMKgwqAgUsKg ICksCj4gPiA+IMKgwqDCoMKgQ01EKMKgIE1JX1NUT1JFX0RXT1JEX0lOREVYLMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBTTUkswqDCoCAhRizCoCAweEZGLMKgwqAgUsKgICksCj4gPiA+IC3CoMKg wqAgQ01EKMKgIE1JX0xPQURfUkVHSVNURVJfSU1NKDEpLMKgwqDCoMKgwqDCoMKgwqDCoCBTTUks wqDCoCAhRizCoCAweEZGLMKgwqAgVywKPiA+ID4gK8KgwqDCoCBDTUQowqAgX19NSV9MT0FEX1JF R0lTVEVSX0lNTSgxKSzCoMKgwqDCoMKgwqDCoCBTTUkswqDCoCAhRizCoCAweEZGLMKgwqAgVywK PiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgIC5yZWcgPSB7IC5vZmZzZXQgPSAxLCAubWFzayA9IDB4 MDA3RkZGRkMsIC5zdGVwID0gMiB9wqDCoMKgICksCj4gPiA+IMKgwqDCoMKgQ01EKMKgIE1JX1NU T1JFX1JFR0lTVEVSX01FTSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFNNSSzCoMKgwqAgRizCoCAz LMKgwqDCoMKgIFcgfCBCLAo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqAgLnJlZyA9IHsgLm9mZnNl dCA9IDEsIC5tYXNrID0gMHgwMDdGRkZGQyB9LAo+ID4gPiBAQCAtMTE4Myw3ICsxMTgzLDcgQEAg c3RhdGljIGJvb2wgY2hlY2tfY21kKGNvbnN0IHN0cnVjdAo+ID4gPiBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSwKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIGZhbHNlOwo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ID4gPiAK PiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoZGVzYy0+Y21kLnZhbHVl ID09IE1JX0xPQURfUkVHSVNURVJfSU1NKDEpICYmCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaWYgKGRlc2MtPmNtZC52YWx1ZSA9PSBfX01JX0xPQURfUkVHSVNURVJfSU1N KDEpICYmCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChvZmZz ZXQgKyAyID4gbGVuZ3RoIHx8Cj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKGNtZFtvZmZzZXQgKyAxXSAmIHJlZy0+bWFzaykgIT0gcmVnLT52YWx1ZSkpIHsK PiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRFJNX0RFQlVHX0RS SVZFUigiQ01EOiBSZWplY3RlZCBMUkkgdG8gbWFza2VkCj4gPiA+IHJlZ2lzdGVyIDB4JTA4WFxu IiwKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRl eHQuYwo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwo+ID4g PiBpbmRleCA2NWNlZmM1MjBlNzkuLjk4MjYwZDhhNDViZSAxMDA2NDQKPiA+ID4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCj4gPiA+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwo+ID4gPiBAQCAtMTAyNiwxMSArMTAyNiwx MSBAQCBzdGF0aWMgaW50IGVtaXRfcHBndHRfdXBkYXRlKHN0cnVjdAo+ID4gPiBpOTE1X3JlcXVl c3QgKnJxLCB2b2lkICpkYXRhKQo+ID4gPiDCoMKgwqDCoMKgwqDCoCBpZiAoSVNfRVJSKGNzKSkK PiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihjcyk7Cj4gPiA+IAo+ ID4gPiAtwqDCoMKgwqDCoMKgwqAgKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTSgyKTsKPiA+ ID4gK8KgwqDCoMKgwqDCoMKgICpjcysrID0gaTkxNV9nZXRfbHJpX2NtZChlbmdpbmUsIDIpOwo+ ID4gPiAKPiA+ID4gLcKgwqDCoMKgwqDCoMKgICpjcysrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQo R0VOOF9SSU5HX1BEUF9VRFcoYmFzZSwgMCkpOwo+ID4gPiArwqDCoMKgwqDCoMKgwqAgKmNzKysg PSBpOTE1X2dldF9scmlfcmVnKGVuZ2luZSwgR0VOOF9SSU5HX1BEUF9VRFcoYmFzZSwgMCkpOwo+ ID4gPiDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IHVwcGVyXzMyX2JpdHMocGRfZGFkZHIpOwo+ID4g PiAtwqDCoMKgwqDCoMKgwqAgKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44X1JJTkdf UERQX0xEVyhiYXNlLCAwKSk7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IGk5MTVfZ2V0 X2xyaV9yZWcoZW5naW5lLCBHRU44X1JJTkdfUERQX0xEVyhiYXNlLCAwKSk7Cj4gPiA+IMKgwqDC oMKgwqDCoMKgICpjcysrID0gbG93ZXJfMzJfYml0cyhwZF9kYWRkcik7Cj4gPiA+IAo+ID4gPiDC oMKgwqDCoMKgwqDCoCAqY3MrKyA9IE1JX05PT1A7Cj4gPiA+IEBAIC0xMDQwLDEzICsxMDQwLDEz IEBAIHN0YXRpYyBpbnQgZW1pdF9wcGd0dF91cGRhdGUoc3RydWN0Cj4gPiA+IGk5MTVfcmVxdWVz dCAqcnEsIHZvaWQgKmRhdGEpCj4gPiA+IMKgwqDCoMKgwqDCoMKgIGlmIChJU19FUlIoY3MpKQo+ ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBQVFJfRVJSKGNzKTsKPiA+ID4gCj4g PiA+IC3CoMKgwqDCoMKgwqDCoCAqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKDIgKiBHRU44 XzNMVkxfUERQRVMpOwo+ID4gPiArwqDCoMKgwqDCoMKgwqAgKmNzKysgPSBpOTE1X2dldF9scmlf Y21kKGVuZ2luZSwgMiAqIEdFTjhfM0xWTF9QRFBFUyk7Cj4gPiA+IMKgwqDCoMKgwqDCoMKgIGZv ciAoaSA9IEdFTjhfM0xWTF9QRFBFUzsgaS0tOyApIHsKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBjb25zdCBkbWFfYWRkcl90IHBkX2RhZGRyID0gaTkxNV9wYWdlX2Rpcl9kbWFfYWRkcihw cGd0dCwgaSk7Cj4gPiA+IAo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IGk5 MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfUklOR19QRFBfVURXKGJhc2UsIGkpKTsKPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKmNzKysgPSBpOTE1X2dldF9scmlfcmVnKGVuZ2luZSwKPiA+ ID4gR0VOOF9SSU5HX1BEUF9VRFcoYmFzZSwgaSkpOwo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICpjcysrID0gdXBwZXJfMzJfYml0cyhwZF9kYWRkcik7Cj4gPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgICpjcysrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9MRFco YmFzZSwgaSkpOwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IGk5MTVfZ2V0 X2xyaV9yZWcoZW5naW5lLAo+ID4gPiBHRU44X1JJTkdfUERQX0xEVyhiYXNlLCBpKSk7Cj4gPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKmNzKysgPSBsb3dlcl8zMl9iaXRzKHBkX2RhZGRyKTsK PiA+ID4gwqDCoMKgwqDCoMKgwqAgfQo+ID4gPiDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IE1JX05P T1A7Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVj YnVmZmVyLmMKPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVy LmMKPiA+ID4gaW5kZXggNjc5ZjdjMTU2MWJhLi5hYzViMDZkMmZmZGMgMTAwNjQ0Cj4gPiA+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+ID4gPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKPiA+ID4gQEAgLTE5 NjMsNyArMTk2Myw4IEBAIHN0YXRpYyBpbnQgaTkxNV9yZXNldF9nZW43X3NvbF9vZmZzZXRzKHN0 cnVjdAo+ID4gPiBpOTE1X3JlcXVlc3QgKnJxKQo+ID4gPiDCoMKgwqDCoGlmIChJU19FUlIoY3Mp KQo+ID4gPiDCoMKgwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihjcyk7Cj4gPiA+IAo+ID4gPiAt wqDCoMKgICpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU0oNCk7Cj4gPiA+ICvCoMKgwqAgLyog R2VuNyBvbmx5IHNvIG5vIG5lZWQgdG8gc3VwcG9ydCByZWxhdGl2ZSBvZmZzZXRzICovCj4gPiA+ ICvCoMKgwqAgKmNzKysgPSBfX01JX0xPQURfUkVHSVNURVJfSU1NKDQpOwo+ID4gPiDCoMKgwqDC oGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKPiA+ID4gwqDCoMKgwqDCoMKgwqAgKmNzKysgPSBp OTE1X21taW9fcmVnX29mZnNldChHRU43X1NPX1dSSVRFX09GRlNFVChpKSk7Cj4gPiA+IMKgwqDC oMKgwqDCoMKgICpjcysrID0gMDsKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfcGVyZi5jCj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMK PiA+ID4gaW5kZXggYzQ5OTVkNWExNmQyLi44NmZhY2JjY2RiMDIgMTAwNjQ0Cj4gPiA+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcGVyZi5jCj4gPiA+IEBAIC0xNjM2LDcgKzE2MzYsOCBAQCBzdGF0aWMg dm9pZCBoc3dfZGlzYWJsZV9tZXRyaWNfc2V0KHN0cnVjdAo+ID4gPiBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKPiA+ID4gwqAqIGluIHRoZSBjYXNlIHRoYXQgdGhlIE9BIHVuaXQgaGFzIGJl ZW4gZGlzYWJsZWQuCj4gPiA+IMKgKi8KPiA+ID4gc3RhdGljIHZvaWQKPiA+ID4gLWdlbjhfdXBk YXRlX3JlZ19zdGF0ZV91bmxvY2tlZChzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCj4gPiA+ICtn ZW44X3VwZGF0ZV9yZWdfc3RhdGVfdW5sb2NrZWQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lLAo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBp bnRlbF9jb250ZXh0ICpjZSwKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHUzMiAqcmVnX3N0YXRlLAo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY29uc3Qgc3RydWN0IGk5MTVfb2FfY29uZmlnICpvYV9jb25maWcpCj4gPiA+IHsKPiA+ ID4gQEAgLTE2NTUsNyArMTY1NiwxMiBAQCBnZW44X3VwZGF0ZV9yZWdfc3RhdGVfdW5sb2NrZWQo c3RydWN0Cj4gPiA+IGludGVsX2NvbnRleHQgKmNlLAo+ID4gPiDCoMKgwqDCoH07Cj4gPiA+IMKg wqDCoMKgaW50IGk7Cj4gPiA+IAo+ID4gPiAtwqDCoMKgIENUWF9SRUcocmVnX3N0YXRlLCBjdHhf b2FjdHhjdHJsLCBHRU44X09BQ1RYQ09OVFJPTCwKPiA+ID4gK8KgwqDCoCAvKgo+ID4gPiArwqDC oMKgwqAgKiBOQjogVGhlIExSSSBpbnN0cnVjdGlvbiBpcyBnZW5lcmF0ZWQgYnkgdGhlIGhhcmR3 YXJlLgo+ID4gPiArwqDCoMKgwqAgKiBTaG91bGQgd2UgcmVhZCBpdCBpbiBhbmQgYXNzZXJ0IHRo YXQgdGhlIG9mZnNldCBmbGFnIGlzIHNldD8KPiA+ID4gK8KgwqDCoMKgICovCj4gPiA+ICsKPiA+ ID4gK8KgwqDCoCBDVFhfUkVHKGVuZ2luZSwgcmVnX3N0YXRlLCBjdHhfb2FjdHhjdHJsLCBHRU44 X09BQ1RYQ09OVFJPTCwKPiA+ID4gwqDCoMKgwqDCoMKgwqAgKGk5MTUtPnBlcmYub2EucGVyaW9k X2V4cG9uZW50IDw8IEdFTjhfT0FfVElNRVJfUEVSSU9EX1NISUZUKSB8Cj4gPiA+IMKgwqDCoMKg wqDCoMKgIChpOTE1LT5wZXJmLm9hLnBlcmlvZGljID8gR0VOOF9PQV9USU1FUl9FTkFCTEUgOiAw KSB8Cj4gPiA+IMKgwqDCoMKgwqDCoMKgIEdFTjhfT0FfQ09VTlRFUl9SRVNVTUUpOwo+ID4gPiBA QCAtMTY4MiwxMCArMTY4OCwxMCBAQCBnZW44X3VwZGF0ZV9yZWdfc3RhdGVfdW5sb2NrZWQoc3Ry dWN0Cj4gPiA+IGludGVsX2NvbnRleHQgKmNlLAo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IH0KPiA+ID4gwqDCoMKgwqDCoMKgwqAgfQo+ID4gPiAKPiA+ID4gLcKgwqDCoMKgwqDCoMKgIENU WF9SRUcocmVnX3N0YXRlLCBzdGF0ZV9vZmZzZXQsIGZsZXhfcmVnc1tpXSwgdmFsdWUpOwo+ID4g PiArwqDCoMKgwqDCoMKgwqAgQ1RYX1JFRyhlbmdpbmUsIHJlZ19zdGF0ZSwgc3RhdGVfb2Zmc2V0 LCBmbGV4X3JlZ3NbaV0sIHZhbHVlKTsKPiA+ID4gwqDCoMKgwqB9Cj4gPiA+IAo+ID4gPiAtwqDC oMKgIENUWF9SRUcocmVnX3N0YXRlLAo+ID4gPiArwqDCoMKgIENUWF9SRUcoZW5naW5lLCByZWdf c3RhdGUsCj4gPiA+IMKgwqDCoMKgwqDCoMKgIENUWF9SX1BXUl9DTEtfU1RBVEUsIEdFTjhfUl9Q V1JfQ0xLX1NUQVRFLAo+ID4gPiDCoMKgwqDCoMKgwqDCoCBpbnRlbF9zc2V1X21ha2VfcnBjcyhp OTE1LCAmY2UtPnNzZXUpKTsKPiA+ID4gfQo+ID4gPiBAQCAtMTc3MCw3ICsxNzc2LDcgQEAgc3Rh dGljIGludCBnZW44X2NvbmZpZ3VyZV9hbGxfY29udGV4dHMoc3RydWN0Cj4gPiA+IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNlLT5zdGF0 ZS0+b2JqLT5tbS5kaXJ0eSA9IHRydWU7Cj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVn cyArPSBMUkNfU1RBVEVfUE4gKiBQQUdFX1NJWkUgLyBzaXplb2YoKnJlZ3MpOwo+ID4gPiAKPiA+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ2VuOF91cGRhdGVfcmVnX3N0YXRlX3VubG9ja2Vk KGNlLCByZWdzLCBvYV9jb25maWcpOwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnZW44 X3VwZGF0ZV9yZWdfc3RhdGVfdW5sb2NrZWQoZGV2X3ByaXYtPmVuZ2luZVtSQ1MwXSwKPiA+ID4g Y2UsIHJlZ3MsIG9hX2NvbmZpZyk7Cj4gPiA+IAo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoY2UtPnN0YXRlLT5vYmopOwo+ID4gPiDCoMKgwqDC oMKgwqDCoCB9Cj4gPiA+IEBAIC0yMTY2LDcgKzIxNzIsOCBAQCB2b2lkIGk5MTVfb2FfaW5pdF9y ZWdfc3RhdGUoc3RydWN0Cj4gPiA+IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ID4gPiAKPiA+ ID4gwqDCoMKgwqBzdHJlYW0gPSBlbmdpbmUtPmk5MTUtPnBlcmYub2EuZXhjbHVzaXZlX3N0cmVh bTsKPiA+ID4gwqDCoMKgwqBpZiAoc3RyZWFtKQo+ID4gPiAtwqDCoMKgwqDCoMKgwqAgZ2VuOF91 cGRhdGVfcmVnX3N0YXRlX3VubG9ja2VkKGNlLCByZWdzLCBzdHJlYW0tPm9hX2NvbmZpZyk7Cj4g PiA+ICvCoMKgwqDCoMKgwqDCoCBnZW44X3VwZGF0ZV9yZWdfc3RhdGVfdW5sb2NrZWQoZW5naW5l LCBjZSwgcmVncywKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3RyZWFtLT5vYV9jb25maWcpOwo+ID4gPiB9Cj4gPiA+IAo+ID4gPiAv KioKPiA+ID4gLS0gCj4gPiA+IDIuMjEuMC41LmdhZWI1ODJhOTgzCj4gPiA+IAo+ID4gPiBfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4gPiBJbnRlbC1n ZnggbWFpbGluZyBsaXN0Cj4gPiA+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiA+ ID4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n ZngKPiA+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4g PiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCj4gPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lu dGVsLWdmeAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Cj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRl bC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=