From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH i-g-t] tests/gem_softpin: New tests for softpin feature Date: Thu, 26 Nov 2015 16:09:13 +0000 Message-ID: <56572EA9.2090104@linux.intel.com> References: <1448462654-19316-1-git-send-email-vinay.belgaumkar@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 644686E0C1 for ; Thu, 26 Nov 2015 08:09:16 -0800 (PST) In-Reply-To: <1448462654-19316-1-git-send-email-vinay.belgaumkar@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Vinay Belgaumkar , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org CkhpLAoKT24gMjUvMTEvMTUgMTQ6NDQsIFZpbmF5IEJlbGdhdW1rYXIgd3JvdGU6Cj4gVGhlc2Ug dGVzdHMgZXhlcmNpc2UgdGhlIHVzZXJwdHIgaW9jdGwgdG8gY3JlYXRlIHNoYXJlZCBidWZmZXJz Cj4gYmV0d2VlbiBDUFUgYW5kIEdQVS4gVGhleSBjb250YWluIGVycm9yIGFuZCBub3JtYWwgdXNh Z2Ugc2NlbmFyaW9zLgo+IFRoZXkgYWxzbyBjb250YWluIGEgY291cGxlIG9mIHN0cmVzcyB0ZXN0 cyB3aGljaCBjb3B5IGJ1ZmZlcnMgYmV0d2Vlbgo+IENQVSBhbmQgR1BVLiBUaGVzZSB0ZXN0cyBy ZWx5IG9uIHRoZSBzb2Z0cGluIHBhdGNoIGluIG9yZGVyIHRvIHBpbiBidWZmZXJzCj4gdG8gYSBj ZXJ0YWluIFZBLgo+Cj4gQ2F2ZWF0OiBUaGVzZSB0ZXN0cyB3ZXJlIGRlc2lnbmVkIHRvIHJ1biBv biA2NC1iaXQgc3lzdGVtLiBGdXR1cmUgd29yawo+IGluY2x1ZGVzIGFkZGluZyBsb2dpYyB0byBl bnN1cmUgdGhlc2UgdGVzdHMgY2FuIHJ1biBvbiAzMi1iaXQgc3lzdGVtcyB3aXRoCj4gUFBHVFQg c3VwcG9ydC4gU29tZSB0ZXN0cyBhcmUgY3VycmVudGx5IGRpc2FibGVkIGZvciAzMi1iaXQgc3lz dGVtcyBmb3IgdGhhdAo+IHJlYXNvbi4KPgo+IHYyOiBBZGRlZCBjYyBhbmQgc2lnbmVkLW9mZi1i eSBmaWVsZHMKPgo+IHYzOiBGaXhlZCByZXZpZXcgY29tbWVudHMsIGFkZGVkIGhlbHBlciBmdW5j dGlvbnMuIFJlbW92ZWQgdXNlcnB0ciBlcnJvcgo+IHNjZW5hcmlvcyBjb3ZlcmVkIGJ5IGV4aXN0 aW5nIHVzZXJwdHIgdGVzdHMuIE1vZGlmaWVkIHN0cmVzcyB0ZXN0IHRvIGhhdmUKPiAxMDBLIGJ1 ZmZlcnMsIGl0IG5vdyBydW5zIGZvciB+MzAgbWlucywgY2hlY2tzIGV2ZXJ5IGVsZW1lbnQgaGFz IGJlZW4gd3JpdHRlbgo+IHRvIGNvcnJlY3RseSwgYW5kIHBpbnMgYnVmZmVycyBhdCBkaWZmZXJl bnQgVk1Bcy4KPgo+IHY0OiBDaGFuZ2VkIG5hbWUgdG8gZ2VtX3NvZnRwaW4KPgo+IHY1OiBNb3Jl IGZpeGVzLiBSZW1vdmVkIHRoZSBmaWxlIGJhc2VkIHRlc3RzLCB3aWxsIG1vdmUgdGhlbSB0byB1 c2VycHRyIHRlc3RzLgo+IEFkZGVkIGEgZnVuY3Rpb24gdGhhdCB2YWxpZGF0ZXMgYXBwcm9wcmlh dGUgUFBHVFQgc3VwcG9ydCBiZWZvcmUgcnVubmluZyB0ZXN0cy4KPiBPcHRpbWl6ZWQgc3RhY2sg c3BhY2UgYW5kIG1lbW9yeSBmb290cHJpbnQgaW4gc3RyZXNzIHRlc3QuIFJlbW92ZWQgdGhlIGV2 aWN0aW9uCj4gdGVzdCwgd2lsbCBhZGQgaXQgYmFjayBhZnRlciB2ZXJpZnlpbmcgcHJvcGVyIGZ1 bmN0aW9uYWxpdHkuCj4KPiBDYzogTWljaGVsIFRoaWVycnkgPG1pY2hlbC50aGllcnJ5QGludGVs LmNvbT4KPiBDYzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPiBT aWduZWQtb2ZmLWJ5OiBWaW5heSBCZWxnYXVta2FyIDx2aW5heS5iZWxnYXVta2FyQGludGVsLmNv bT4KPiAtLS0KPiAgIHRlc3RzLy5naXRpZ25vcmUgICAgICAgfCAgIDEgKwo+ICAgdGVzdHMvTWFr ZWZpbGUuc291cmNlcyB8ICAgMSArCj4gICB0ZXN0cy9nZW1fc29mdHBpbi5jICAgIHwgOTcyICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgIDMgZmls ZXMgY2hhbmdlZCwgOTc0IGluc2VydGlvbnMoKykKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0 cy9nZW1fc29mdHBpbi5jCj4KPiBkaWZmIC0tZ2l0IGEvdGVzdHMvLmdpdGlnbm9yZSBiL3Rlc3Rz Ly5naXRpZ25vcmUKPiBpbmRleCA4MGFmOWE3Li40MjQ4NzBiIDEwMDY0NAo+IC0tLSBhL3Rlc3Rz Ly5naXRpZ25vcmUKPiArKysgYi90ZXN0cy8uZ2l0aWdub3JlCj4gQEAgLTIxLDYgKzIxLDcgQEAg Z2VtX2JhZF9ibGl0Cj4gICBnZW1fYmFkX2xlbmd0aAo+ICAgZ2VtX2JhZF9yZWxvYwo+ICAgZ2Vt X2Jhc2ljCj4gK2dlbV9zb2Z0cGluCj4gICBnZW1fY2FjaGluZwo+ICAgZ2VtX2Nsb3NlX3JhY2UK PiAgIGdlbV9jb25jdXJyZW50X2FsbAo+IGRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3Vy Y2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+IGluZGV4IDhmYjJkZTguLjIwMDhkNGEgMTAw NjQ0Cj4gLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ICsrKyBiL3Rlc3RzL01ha2VmaWxl LnNvdXJjZXMKPiBAQCAtMTEsNiArMTEsNyBAQCBURVNUU19wcm9nc19NID0gXAo+ICAgCWRydl9o YW5nbWFuIFwKPiAgIAlnZW1fYmFkX3JlbG9jIFwKPiAgIAlnZW1fYmFzaWMgXAo+ICsJZ2VtX3Nv ZnRwaW4gXAo+ICAgCWdlbV9jYWNoaW5nIFwKPiAgIAlnZW1fY2xvc2VfcmFjZSBcCj4gICAJZ2Vt X2NvbmN1cnJlbnRfYmxpdCBcCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2dlbV9zb2Z0cGluLmMgYi90 ZXN0cy9nZW1fc29mdHBpbi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw Li45NWI2NjRhCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3Rlc3RzL2dlbV9zb2Z0cGluLmMKPiBA QCAtMCwwICsxLDk3MiBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNSBJbnRlbCBDb3Jw b3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29m dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIp LAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs dWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQv b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3Rh bnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4g KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKiBBdXRob3JzOgo+ ICsgKiAgICBWaW5heSBCZWxnYXVta2FyIDx2aW5heS5iZWxnYXVta2FyQGludGVsLmNvbT4KPiAr ICogICAgVGhvbWFzIERhbmllbCA8dGhvbWFzLmRhbmllbEBpbnRlbC5jb20+Cj4gKyAqCj4gKyAq Lwo+ICsKPiArI2luY2x1ZGUgPHVuaXN0ZC5oPgo+ICsjaW5jbHVkZSA8c3RkbGliLmg+Cj4gKyNp bmNsdWRlIDxzdGRpbnQuaD4KPiArI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gKyNpbmNsdWRlIDxzdHJp bmcuaD4KPiArI2luY2x1ZGUgPGZjbnRsLmg+Cj4gKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgo+ICsj aW5jbHVkZSA8ZXJybm8uaD4KPiArI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cj4gKyNpbmNsdWRlIDxz eXMvaW9jdGwuaD4KPiArI2luY2x1ZGUgPHN5cy90aW1lLmg+Cj4gKyNpbmNsdWRlIDxtYWxsb2Mu aD4KPiArI2luY2x1ZGUgImRybS5oIgo+ICsjaW5jbHVkZSAiaW9jdGxfd3JhcHBlcnMuaCIKPiAr I2luY2x1ZGUgImRybXRlc3QuaCIKPiArI2luY2x1ZGUgImludGVsX2NoaXBzZXQuaCIKPiArI2lu Y2x1ZGUgImludGVsX2lvLmgiCj4gKyNpbmNsdWRlICJpOTE1X2RybS5oIgo+ICsjaW5jbHVkZSA8 YXNzZXJ0Lmg+Cj4gKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgo+ICsjaW5jbHVkZSA8c3lzL2lwYy5o Pgo+ICsjaW5jbHVkZSA8c3lzL3NobS5oPgo+ICsjaW5jbHVkZSAiaWd0X2ttcy5oIgo+ICsjaW5j bHVkZSA8aW50dHlwZXMuaD4KPiArI2luY2x1ZGUgPHN5cy90eXBlcy5oPgo+ICsjaW5jbHVkZSA8 c3lzL3N0YXQuaD4KPiArCj4gKyNkZWZpbmUgQk9fU0laRSA0MDk2Cj4gKyNkZWZpbmUgTVVMVElQ QUdFX0JPX1NJWkUgMiAqIEJPX1NJWkUKPiArI2RlZmluZSBTVE9SRV9CQVRDSF9CVUZGRVJfU0la RSA0Cj4gKyNkZWZpbmUgRVhFQ19PQkpFQ1RfUElOTkVECSgxPDw0KQo+ICsjZGVmaW5lIEVYRUNf T0JKRUNUX1NVUFBPUlRTXzQ4Ql9BRERSRVNTICgxPDwzKQo+ICsjZGVmaW5lIFNIQVJFRF9CVUZG RVJfU0laRSA0MDk2Cj4gKyNkZWZpbmUgTlVNX0VYRUNfT0JKRUNUUyAyCgpJIHdvdWxkIGp1c3Qg aGFyZGNvZGUgMiBvciAzIChvciAxKSBpbiByZWxldmFudCBwbGFjZXMgc2luY2Ugc29tZSB0ZXN0 cyAKdXNlIE5VTV9FWEVDX09CSkVDVFMgKyAxIGFueXdheSBzbyBpdCBpcyBub3Qgc28gdXNlZnVs IHRvIGhhdmUgYSBkZWZpbmUgCndpdGggYSBsb25nIG5hbWUgZm9yIHRoaXMuCgo+ICsKPiArdHlw ZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3VzZXJwdHIgaTkxNV9nZW1fdXNlcnB0cjsKPiArCj4g K3N0YXRpYyB1aW50MzJfdCBpbml0X3VzZXJwdHIoaW50IGZkLCBpOTE1X2dlbV91c2VycHRyKiwg dm9pZCogcHRyLAo+ICsJCQkJdWludDY0X3Qgc2l6ZSwgYm9vbCByZWFkX29ubHkpOwoKaTkxNV9n ZW1fdXNlcnB0ciAqLCB2b2lkICpwdHIKCj4gK3N0YXRpYyB2b2lkICpjcmVhdGVfbWVtX2J1ZmZl cih1aW50NjRfdCBzaXplKTsKPiArc3RhdGljIGludCBnZW1fY2FsbF91c2VycHRyX2lvY3RsKGlu dCBmZCwgaTkxNV9nZW1fdXNlcnB0ciAqdXNlcnB0cik7Cj4gK3N0YXRpYyB2b2lkIGdlbV9iYXNp Y190ZXN0KHZvaWQpOwo+ICtzdGF0aWMgdm9pZCBnZW1fcGluX2ludmFsaWRfdm1hX3Rlc3Qodm9p ZCk7Cj4gK3N0YXRpYyB2b2lkIGdlbV9waW5fb3ZlcmxhcF90ZXN0KHZvaWQpOwo+ICtzdGF0aWMg dm9pZCBnZW1fcGluX2hpZ2hfYWRkcmVzc190ZXN0KHZvaWQpOwo+ICsKPiArI2RlZmluZSBOT19Q UEdUVCAwCj4gKyNkZWZpbmUgQUxJQVNJTkdfUFBHVFQgMQo+ICsjZGVmaW5lIEZVTExfMzJfQklU X1BQR1RUIDIKPiArI2RlZmluZSBGVUxMXzQ4X0JJVF9QUEdUVCAzCj4gKy8qIHVzZXNfZnVsbF9w cGd0dAo+ICsgKiBGaW5kcyBzdXBwb3J0ZWQgUFBHVFQgZGV0YWlscy4KPiArICogQGZkIERSTSBm ZAo+ICsgKiBAbWluIGNhbiBiZQo+ICsgKiAwIC0gTm8gUFBHVFQKPiArICogMSAtIEFsaWFzaW5n IFBQR1RUCj4gKyAqIDIgLSBGdWxsIFBQR1RUICgzMmIpCj4gKyAqIDMgLSBGdWxsIFBQR1RUICg0 OGIpCj4gKyAqIFJFVFVSTlMgdHJ1ZS9mYWxzZSBpZiBtaW4gc3VwcG9ydCBpcyBwcmVzZW50Cj4g KyovCj4gK3N0YXRpYyBib29sIHVzZXNfZnVsbF9wcGd0dChpbnQgZmQsIGludCBtaW4pCj4gK3sK PiArCXN0cnVjdCBkcm1faTkxNV9nZXRwYXJhbSBncDsKPiArCWludCB2YWwgPSAwOwo+ICsKPiAr CW1lbXNldCgmZ3AsIDAsIHNpemVvZihncCkpOwo+ICsJZ3AucGFyYW0gPSAxODsgLyogSEFTX0FM SUFTSU5HX1BQR1RUICovCj4gKwlncC52YWx1ZSA9ICZ2YWw7Cj4gKwo+ICsJaWYgKGRybUlvY3Rs KGZkLCBEUk1fSU9DVExfSTkxNV9HRVRQQVJBTSwgJmdwKSkKPiArCQlyZXR1cm4gMDsKPiArCj4g KwllcnJubyA9IDA7CiA+ICsKPiArCXJldHVybiB2YWwgPj0gbWluOwo+ICt9Cj4gKwo+ICsKPiAr LyogZ2VtX2NhbGxfdXNlcnB0cl9pb2N0bAo+ICsgKiBIZWxwZXIgdG8gY2FsbCBpb2N0bCAtIFRP RE86IG1vdmUgdG8gbGliCj4gKyAqIEBmZCAtIGRybSBmZAo+ICsgKiBAdXNlcnB0ciAtIHBvaW50 ZXIgdG8gaW5pdGlhbGlzZWQgdXNlcnB0cgo+ICsgKiBSRVRVUk5TIHN0YXR1cyBvZiBpb2N0bCBj YWxsCj4gKyovCj4gK3N0YXRpYyBpbnQgZ2VtX2NhbGxfdXNlcnB0cl9pb2N0bChpbnQgZmQsIGk5 MTVfZ2VtX3VzZXJwdHIgKnVzZXJwdHIpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0g ZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9VU0VSUFRSLCB1c2VycHRyKTsKPiArCj4g KwlpZiAocmV0KQo+ICsJCXJldCA9IGVycm5vOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiAr Cj4gKy8qIGluaXRfdXNlcnB0cgo+ICsgKiBIZWxwZXIgdGhhdCBpbml0cyB1c2VycHRyIGFuIHJl dHVybnMgaGFuZGxlCj4gKyAqIEBmZCAtIGRybSBmZAo+ICsgKiBAdXNlcnB0ciAtIHBvaW50ZXIg dG8gZW1wdHkgdXNlcnB0cgo+ICsgKiBAcHRyIC0gYnVmZmVyIHRvIGJlIHNoYXJlZAo+ICsgKiBA c2l6ZSAtIHNpemUgb2YgYnVmZmVyCj4gKyAqIEBybyAtIHJlYWQgb25seSBmbGFnCj4gKyAqIFJF VFVSTlMgaGFuZGxlIHRvIHNoYXJlZCBidWZmZXIKPiArKi8KPiArc3RhdGljIHVpbnQzMl90IGlu aXRfdXNlcnB0cihpbnQgZmQsIGk5MTVfZ2VtX3VzZXJwdHIgKnVzZXJwdHIsIHZvaWQgKnB0ciwK PiArCQkJCXVpbnQ2NF90IHNpemUsIGJvb2wgcm8pCgpJIHdvdWxkIGxvc2UgdGhlIHJlYWQtb25s eSBhcmd1bWVudCBpZiBpdCBpcyBub3QgaW50ZXJlc3RpbmcgaW4gdGhpcyAKdGVzdCwganVzdCBh ZGRzIHZlcmJvc2l0eS4KCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJbWVtc2V0KCh2b2lkKil1 c2VycHRyLCAwLCBzaXplb2YoaTkxNV9nZW1fdXNlcnB0cikpOwo+ICsKPiArCXVzZXJwdHItPnVz ZXJfcHRyID0gKHVpbnQ2NF90KXB0cjsgLyogTmVlZCB0aGUgY2FzdCB0byBvdmVyY29tZSBjb21w aWxlciB3YXJuaW5nICovCj4gKwl1c2VycHRyLT51c2VyX3NpemUgPSBzaXplOwo+ICsJdXNlcnB0 ci0+ZmxhZ3MgPSBJOTE1X1VTRVJQVFJfVU5TWU5DSFJPTklaRUQ7CgpJdCB3b3VsZCBiZSBiZXR0 ZXIgZm9yIHRlc3QgY292ZXJhZ2UgdG8gdHJ5IHRoZSBzeW5jaHJvbml6ZWQgdmVyc2lvbiBpZiAK YXZhaWxhYmxlIHNpbmNlIHRoYXQgaXMgd2hhdCBtYWpvcml0eSBvZiB1c2VycyB3aWxsIHVzZSwg Z2l2ZW4gaG93IAp1bnN5bmMgaXMgYSByb290IG9ubHkgZmVhdHVyZS4KCj4gKwo+ICsJaWYgKHJv KQo+ICsJCXVzZXJwdHItPmZsYWdzIHw9IEk5MTVfVVNFUlBUUl9SRUFEX09OTFk7Cj4gKwo+ICsJ cmV0ID0gZ2VtX2NhbGxfdXNlcnB0cl9pb2N0bChmZCwgdXNlcnB0cik7Cj4gKwlpZ3RfYXNzZXJ0 X2VxKHJldCwgMCk7Cj4gKwo+ICsJcmV0dXJuIHVzZXJwdHItPmhhbmRsZTsKPiArfQo+ICsKPiAr LyogY3JlYXRlX21lbV9idWZmZXIKPiArICogQ3JlYXRlcyBhIDRLIGFsaWduZWQgQ1BVIGJ1ZmZl cgo+ICsgKiBAc2l6ZSAtIHNpemUgb2YgYnVmZmVyCj4gKyAqIFJFVFVSTlMgcG9pbnRlciB0byBi dWZmZXIgb2YgQHNpemUKPiArKi8KPiArc3RhdGljIHZvaWQgKmNyZWF0ZV9tZW1fYnVmZmVyKHVp bnQ2NF90IHNpemUpCj4gK3sKPiArCXZvaWQgKmFkZHI7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJl dCA9IHBvc2l4X21lbWFsaWduKCZhZGRyLCA0MDk2LCBzaXplKTsKPiArCWlndF9hc3NlcnQocmV0 ID09IDApOwo+ICsKPiArCXJldHVybiBhZGRyOwo+ICt9Cj4gKwo+ICsvKiBzZXR1cF9leGVjX29i ago+ICsgKiBwb3B1bGF0ZSBleGVjIG9iamVjdAo+ICsgKiBAZXhlYyAtIGV4ZWMgb2JqZWN0Cj4g KyAqIEBoYW5kbGUgLSBoYW5kbGUgdG8gZ2VtIGJ1ZmZlcgo+ICsgKiBAZmxhZ3MgLSBhbnkgZmxh Z3MKPiArICogQG9mZnNldCAtIHJlcXVlc3RlZCBWTUEKPiArKi8KPiArc3RhdGljIHZvaWQgc2V0 dXBfZXhlY19vYmooc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmV4ZWMsCj4gKwkJ CQl1aW50MzJfdCBoYW5kbGUsIHVpbnQzMl90IGZsYWdzLAo+ICsJCQkJdWludDY0X3Qgb2Zmc2V0 KQo+ICt7Cj4gKwltZW1zZXQoZXhlYywgMCwgc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y19vYmplY3QyKSk7Cj4gKwlleGVjLT5oYW5kbGUgPSBoYW5kbGU7Cj4gKwlleGVjLT5mbGFncyA9 IGZsYWdzOwo+ICsJZXhlYy0+b2Zmc2V0ID0gb2Zmc2V0Owo+ICt9Cj4gKwo+ICsvKiBnZW1fc3Rv cmVfZGF0YV9zdm0KPiArICogcG9wdWxhdGUgYmF0Y2ggYnVmZmVyIHdpdGggTUlfU1RPUkVfRFdP UkRfSU1NIGNvbW1hbmQKPiArICogQGZkOiBkcm0gZmlsZSBkZXNjcmlwdG9yCj4gKyAqIEBjbWRf YnVmOiBiYXRjaCBidWZmZXIKPiArICogQHZhZGRyOiBkZXN0aW5hdGlvbiBWaXJ0dWFsIGFkZHJl c3MKPiArICogQGRhdGE6IGRhdGEgdG8gYmUgc3RvcmUgYXQgZGVzdGluYXRpb24KPiArICogQGVu ZDogd2hldGhlciB0byBlbmQgYmF0Y2ggYnVmZmVyIG9yIG5vdAo+ICsqLwo+ICtzdGF0aWMgaW50 IGdlbV9zdG9yZV9kYXRhX3N2bShpbnQgZmQsIHVpbnQzMl90ICpjbWRfYnVmLCB1aW50NjRfdCB2 YWRkciwKPiArCQkJICAgICAgdWludDMyX3QgZGF0YSwgYm9vbCBlbmQpCj4gK3sKPiArCWludCBp ID0gMCwgbGVuID0gMDsKCk5pdHBpY2s6IERvbid0IG5lZWQgdG8gaW5pdCBsZW4uIE9uIGJldHRl ciBsb29rIHlvdSBkb24ndCBldmVuIG5lZWQgdGhhdCAKdmFyaWFibGU/IEJ1dCBzdGlsbCBhIG5p dHBpY2suLgoKPiArCj4gKwljbWRfYnVmW2krK10gPSBNSV9TVE9SRV9EV09SRF9JTU07Cj4gKwlj bWRfYnVmW2krK10gPSB2YWRkciAmIDB4RkZGRkZGRkM7Cj4gKwljbWRfYnVmW2krK10gPSAodmFk ZHIgPj4gMzIpICYgMHhGRkZGOyAvKiBiaXRzIDMyOjQ3ICovCj4gKwo+ICsJY21kX2J1ZltpKytd ID0gZGF0YTsKPiArCWlmIChlbmQpewoKTWlzc2luZyBzcGFjZSwgImlmIChlbmQpIHsiLCBoZXJl IGFuZCBlbHNld2hlcmUuCgo+ICsJCWNtZF9idWZbaSsrXSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7 Cj4gKwkJY21kX2J1ZltpKytdID0gMDsKPiArCX0KPiArCj4gKwlsZW4gPSBpICogc2l6ZW9mKHVp bnQzMl90KTsKPiArCj4gKwlyZXR1cm4gbGVuOwo+ICt9Cj4gKwo+ICsvKiBnZW1fc3RvcmVfZGF0 YQo+ICsgKiBwb3B1bGF0ZSBiYXRjaCBidWZmZXIgd2l0aCBNSV9TVE9SRV9EV09SRF9JTU0gY29t bWFuZAo+ICsgKiBUaGlzIG9uZSBmaWxscyB1cCByZWxvYyBidWZmZXIgYXMgd2VsbAo+ICsgKiBA ZmQ6IGRybSBmaWxlIGRlc2NyaXB0b3IKPiArICogQGNtZF9idWY6IGJhdGNoIGJ1ZmZlcgo+ICsg KiBAZGF0YTogZGF0YSB0byBiZSBzdG9yZSBhdCBkZXN0aW5hdGlvbgo+ICsgKiBAcmVsb2MgLSBy ZWxvY2F0aW9uIGVudHJ5Cj4gKyAqIEBlbmQ6IHdoZXRoZXIgdG8gZW5kIGJhdGNoIGJ1ZmZlciBv ciBub3QKPiArKi8KPiArc3RhdGljIGludCBnZW1fc3RvcmVfZGF0YShpbnQgZmQsIHVpbnQzMl90 ICpjbWRfYnVmLAo+ICsJCQkgICAgICB1aW50MzJfdCBoYW5kbGUsIHVpbnQzMl90IGRhdGEsCj4g KwkJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2MsCj4g KwkJCSAgICAgIGJvb2wgZW5kKQoKTW9yZSBjb2Rpbmcgc3R5bGUgKGVsc2V3aGVyZSBpbiBmaWxl IGFzIHdlbGwpIC0gcGxlYXNlIGFsaWduIHBhcmFtZXRlcnMgCnRvIHRoZSBmaXJzdCBsaW5lLgoK PiArewo+ICsJaW50IGkgPSAwOwo+ICsKPiArCWNtZF9idWZbaSsrXSA9IE1JX1NUT1JFX0RXT1JE X0lNTTsKPiArCWNtZF9idWZbaSsrXSA9IDA7IC8qIGxvd2VyIDMxIGJpdHMgb2YgNDggYml0IGFk ZHJlc3MgLSAwIHJlbG9jIG5lZWRlZCAqLwo+ICsJY21kX2J1ZltpKytdID0gMDsgLyogdXBwZXIg MTUgYml0cyBvZiA0OCBiaXQgYWRkcmVzcyAtIDAgcmVsb2MgbmVlZGVkICovCj4gKwlyZWxvYy0+ b2Zmc2V0ID0gMSAqIHNpemVvZih1aW50MzJfdCk7Cj4gKwlyZWxvYy0+ZGVsdGEgPSAwOwo+ICsJ cmVsb2MtPnRhcmdldF9oYW5kbGUgPSBoYW5kbGU7Cj4gKwlyZWxvYy0+cmVhZF9kb21haW5zID0g STkxNV9HRU1fRE9NQUlOX1JFTkRFUjsKPiArCXJlbG9jLT53cml0ZV9kb21haW4gPSBJOTE1X0dF TV9ET01BSU5fUkVOREVSOwo+ICsJcmVsb2MtPnByZXN1bWVkX29mZnNldCA9IDA7Cj4gKwljbWRf YnVmW2krK10gPSBkYXRhOwo+ICsJaWYgKGVuZCl7Cj4gKwkJY21kX2J1ZltpKytdID0gTUlfQkFU Q0hfQlVGRkVSX0VORDsKPiArCQljbWRfYnVmW2krK10gPSAwOwo+ICsJfQo+ICsKPiArCXJldHVy biAoaSAqIHNpemVvZih1aW50MzJfdCkpOwo+ICt9Cj4gKwo+ICsvKiBzZXR1cF9leGVjYnVmZmVy Cj4gKyAqIGhlbHBlciBmb3IgYnVmZmVyIGV4ZWN1dGlvbgo+ICsgKiBAZXhlY2J1ZiAtIHBvaW50 ZXIgdG8gZXhlY2J1ZmZlcgo+ICsgKiBAZXhlY19vYmplY3QgLSBwb2ludGVyIHRvIGV4ZWMgb2Jq ZWN0MiBzdHJ1Y3QKPiArICogQHJpbmcgLSByaW5nIHRvIGJlIHVzZWQKPiArICogQGJ1ZmZlcl9j b3VudCAtIGhvdyBtYW51IGJ1ZmZlcnMgdG8gc3VibWl0Cj4gKyAqIEBiYXRjaF9sZW5ndGggLSBs ZW5ndGggb2YgYmF0Y2ggYnVmZmVyCj4gKyovCj4gK3N0YXRpYyB2b2lkIHNldHVwX2V4ZWNidWZm ZXIoc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqZXhlY2J1ZiwKPiArCQkJCXN0cnVj dCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpleGVjX29iamVjdCwKPiArCQkJCWludCByaW5n LCBpbnQgYnVmZmVyX2NvdW50LCBpbnQgYmF0Y2hfbGVuZ3RoKQo+ICt7Cj4gKwlleGVjYnVmLT5i dWZmZXJzX3B0ciA9ICh1aW50cHRyX3QpZXhlY19vYmplY3Q7CgpCYWggdWludHB0cl90Li4gSSBz ZWUgdGhhdCB0aGUgY29kZSBiYXNlIGlzIGZ1bGwgb2YgdGhhdCBpbmFwcHJvcHJpYXRlIAp0aGlu ZyBzbyB5b3UgYXJlIGV4Y3VzZWQuIDopCgo+ICsJZXhlY2J1Zi0+YnVmZmVyX2NvdW50ID0gYnVm ZmVyX2NvdW50Owo+ICsJZXhlY2J1Zi0+YmF0Y2hfc3RhcnRfb2Zmc2V0ID0gMDsKPiArCWV4ZWNi dWYtPmJhdGNoX2xlbiA9IGJhdGNoX2xlbmd0aDsKPiArCWV4ZWNidWYtPmNsaXByZWN0c19wdHIg PSAwOwo+ICsJZXhlY2J1Zi0+bnVtX2NsaXByZWN0cyA9IDA7Cj4gKwlleGVjYnVmLT5EUjEgPSAw Owo+ICsJZXhlY2J1Zi0+RFI0ID0gMDsKPiArCWV4ZWNidWYtPmZsYWdzID0gcmluZzsKPiArCWk5 MTVfZXhlY2J1ZmZlcjJfc2V0X2NvbnRleHRfaWQoKmV4ZWNidWYsIDApOwo+ICsJZXhlY2J1Zi0+ cnN2ZDIgPSAwOwo+ICt9Cj4gKwo+ICsvKiBzdWJtaXRfYW5kX3N5bmMKPiArICogSGVscGVyIGZ1 bmN0aW9uIGZvciBleGVjIGFuZCBzeW5jIGZ1bmN0aW9ucwo+ICsgKiBAZmQgLSBkcm0gZmQKPiAr ICogQGV4ZWNidWYgLSBwb2ludGVyIHRvIGV4ZWNidWZmZXIKPiArICogQGJhdGNoX2J1Zl9oYW5k bGUgLSBiYXRjaCBidWZmZXIgaGFuZGxlCj4gKyovCj4gK3N0YXRpYyB2b2lkIHN1Ym1pdF9hbmRf c3luYyhpbnQgZmQsIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgKmV4ZWNidWYsCj4g KwkJCQl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlKQo+ICt7Cj4gKwlnZW1fZXhlY2J1ZihmZCwg ZXhlY2J1Zik7Cj4gKwlnZW1fc3luYyhmZCwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gK30KPiArCj4g Ky8qIGdlbV91c2VycHRyX3N5bmMKPiArICogaGVscGVyIGZvciBzeW5jaW5nIHRvIENQVSBkb21h aW4gLSBjb3B5L3Bhc3RlIGZyb20gdXNlcmJsaXQKPiArICogQGZkIC0gZHJtIGZkCj4gKyAqIEBo YW5kbGUgLSBidWZmZXIgaGFuZGxlIHRvIHN5bmMKPiArKi8KPiArc3RhdGljIHZvaWQgZ2VtX3Vz ZXJwdHJfc3luYyhpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSkKPiArewo+ICsJZ2VtX3NldF9kb21h aW4oZmQsIGhhbmRsZSwgSTkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQVSk7 Cj4gK30KPiArCj4gKwo+ICsvKiBnZW1fYmFzaWNfdGVzdAo+ICsgKiBUaGlzIHRlc3Qgd2lsbCBj cmVhdGUgYSBzaGFyZWQgYnVmZmVyLCBhbmQgY3JlYXRlIGEgY29tbWFuZAo+ICsgKiBmb3IgR1BV IHRvIHdyaXRlIGRhdGEgaW4gaXQKPiArICogQ1BVIHdpbGwgcmVhZCBhbmQgbWFrZSBzdXJlIGV4 cGVjdGVkIHZhbHVlIGlzIG9idGFpbmVkCj4gKyAqIEB2YWxpZF9zaGFyZWRfYnVmZmVyIC0gd2hl dGhlciB0ZXN0IHdpdGggdmFsaWQgbWFsbG9jJ2QgYnVmZmVyIG9yIG5vdAoKVGhpcyBwYXJhbWV0 ZXIgaXMgbm8gbW9yZSwgaW5jbHVkaW5nIHRoZSB0ZXN0IGRlc2NyaXB0aW9uIGJlbG93LgoKPiAr ICogaWYgKHZhbGlkX3NoYXJlZF9idWZmZXIgPT0gdHJ1ZSkKPiArICogTWFsbG9jIGEgNEsgYnVm ZmVyCj4gKyAqIFNoYXJlIGJ1ZmZlciB3aXRoIHdpdGggR1BVIGJ5IHVzaW5nIHVzZXJwdHIgaW9j dGwKPiArICogQ3JlYXRlIGJhdGNoIGJ1ZmZlciB0byB3cml0ZSBEQVRBIHRvIGZpcnN0IGR3b3Jk IG9mIGJ1ZmZlcgo+ICsgKiBVc2UgMHgxMDAwIGFkZHJlc3MgYXMgZGVzdGluYXRpb24gYWRkcmVz cyBpbiBiYXRjaCBidWZmZXIKPiArICogU2V0IEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnIGluIGV4 ZWMgb2JqZWN0Cj4gKyAqIFNldCAnb2Zmc2V0JyBpbiBleGVjIG9iamVjdCB0byAweDEwMDAKPiAr ICogU3VibWl0IGV4ZWNidWZmZXIKPiArICogVmVyaWZ5IHZhbHVlIG9mIGZpcnN0IERXT1JEIGlu IHNoYXJlZCBidWZmZXIgbWF0Y2hlcyBEQVRBCj4gKwo+ICsgKiBpZiAodmFsaWRfc2hhcmVkX2J1 ZmZlciA9PSBmYWxzZSkKPiArICogRGVjbGFyZSBudWxsIGJ1ZmZlcgo+ICsgKiBDYWxsIFVzZXJw dHIgaW9jdGwgd2l0aCBudWxsIGJ1ZmZlcgo+ICsgKiBSdW4gQmFzaWMgVGVzdAo+ICsgKiBUZXN0 IHNob3VsZCBmYWlsIGF0IHN1Ym1pdCBleGVjYnVmZmVyCj4gKyovCj4gK3N0YXRpYyB2b2lkIGdl bV9iYXNpY190ZXN0KHZvaWQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsKPiAr CWludCBmZDsKPiArCXVpbnQzMl90KiBzaGFyZWRfYnVmZmVyID0gTlVMTDsKCkNvZGluZyBzdHls ZSwgcGx1cyBkb24ndCBuZWVkIHRvIGluaXRpYWxpc2UuCgo+ICsJc3RydWN0IGRybV9pOTE1X2dl bV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVj dDIgZXhlY19vYmplY3QyW05VTV9FWEVDX09CSkVDVFMgKyAxXTsKPiArCXVpbnQzMl90IGJhdGNo X2J1ZmZlcltTVE9SRV9CQVRDSF9CVUZGRVJfU0laRSArIDJdOwo+ICsJdWludDMyX3QgYmF0Y2hf YnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5kbGUsIHVuc2hhcmVkX2J1Zl9oYW5kbGU7Cj4gKwlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVsb2NbNF07Cj4gKwlpbnQgcmlu ZywgbGVuOwo+ICsJdWludDMyX3QgdmFsdWU7Cj4gKwljb25zdCB1aW50MzJfdCBkYXRhID0gMHgx MjM0NTY3ODsKPiArCXVpbnQ2NF90IHBpbm5pbmdfb2Zmc2V0ID0gMHgxMDAwOwo+ICsKPiArCWZk ID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gKwlpZ3RfcmVxdWlyZSh1c2VzX2Z1 bGxfcHBndHQoZmQsIEFMSUFTSU5HX1BQR1RUKSk7Cj4gKwliYXRjaF9idWZfaGFuZGxlID0gZ2Vt X2NyZWF0ZShmZCwgQk9fU0laRSk7Cj4gKwo+ICsJLyogY3JlYXRlIGNwdSBidWZmZXIgKi8KPiAr CXNoYXJlZF9idWZmZXIgPSBjcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpFKTsKPiArCXVuc2hhcmVk X2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCT19TSVpFKTsKPiArCQo+ICsJLyogc2hhcmUg d2l0aCBHUFUgKi8KPiArCXNoYXJlZF9idWZfaGFuZGxlID0gaW5pdF91c2VycHRyKGZkLCAmdXNl cnB0ciwgc2hhcmVkX2J1ZmZlciwKPiArCQkJCQkJQk9fU0laRSwgZmFsc2UpOwoKV2VpcmQgYWxp Z25tZW50LiBQbGVhc2UgY2hlY2sgdGhyb3VnaG91dC4KCj4gKwo+ICsJLyogY3JlYXRlIGNvbW1h bmQgYnVmZmVyIHdpdGggd3JpdGUgY29tbWFuZCAqLwo+ICsJbGVuID0gZ2VtX3N0b3JlX2RhdGFf c3ZtKGZkLCBiYXRjaF9idWZmZXIsIHBpbm5pbmdfb2Zmc2V0LCBkYXRhLCBmYWxzZSk7Cj4gKwls ZW4gKz0gZ2VtX3N0b3JlX2RhdGEoZmQsIGJhdGNoX2J1ZmZlciArIChsZW4vNCksIHVuc2hhcmVk X2J1Zl9oYW5kbGUsIGRhdGEsCj4gKwkJCQlyZWxvYywgdHJ1ZSk7Cj4gKwlnZW1fd3JpdGUoZmQs IGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCj4gKwkvKiBzdWJt aXQgY29tbWFuZCBidWZmZXIgKi8KPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0s IHNoYXJlZF9idWZfaGFuZGxlLAo+ICsJCQlFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zm c2V0KTsKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIHVuc2hhcmVkX2J1Zl9o YW5kbGUsIDAsIDApOwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlsyXSwgYmF0Y2hf YnVmX2hhbmRsZSwgMCwgMCk7Cj4gKwo+ICsJcmluZyA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4gKwo+ ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLCBOVU1fRVhF Q19PQkpFQ1RTICsgMSwgbGVuKTsKPiArCXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJh dGNoX2J1Zl9oYW5kbGUpOwo+ICsJZ2VtX3VzZXJwdHJfc3luYyhmZCwgc2hhcmVkX2J1Zl9oYW5k bGUpOwo+ICsKPiArCS8qIENoZWNrIGlmIGRyaXZlciBwaW5uZWQgdGhlIGJ1ZmZlciBhcyByZXF1 ZXN0ZWQgKi8KPiArCWlndF9mYWlsX29uX2YoZXhlY19vYmplY3QyWzBdLm9mZnNldCAhPSBwaW5u aW5nX29mZnNldCwKPiArCQkJIlxuRmFpbGVkIHRvIHBpbiBhdCByZXF1ZXN0ZWQgb2Zmc2V0Iik7 Cj4gKwkvKiBjaGVjayBvbiBDUFUgdG8gc2VlIGlmIHZhbHVlIGNoYW5nZXMgKi8KPiArCWlndF9m YWlsX29uX2Yoc2hhcmVkX2J1ZmZlclswXSAhPSBkYXRhLAo+ICsJCSAgICAgICJcbkNQVSByZWFk IGRvZXMgbm90IG1hdGNoIEdQVSB3cml0ZSxcCj4gKwkJCWV4cGVjdGVkOiAweCV4LCBnb3Q6IDB4 JXhcbiIsCj4gKwkJCWRhdGEsIHNoYXJlZF9idWZmZXJbMF0pOwo+ICsJZ2VtX3JlYWQoZmQsIHVu c2hhcmVkX2J1Zl9oYW5kbGUsIDAsICh2b2lkKikmdmFsdWUsIDQpOwo+ICsJaWd0X2Fzc2VydCh2 YWx1ZSA9PSBkYXRhKTsKPiArCj4gKwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ ICsJY2xvc2UoZmQpOwo+ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiArfQoKSSB0aG91Z2ggd2Ug YWdyZWVkIHRvIGhhdmUgc2VwYXJhdGUgYmFzaWMgdGVzdCBjYXNlIGZvciBhIG5vcm1hbCBibywg YW5kIAphIHNlcGFyYXRlIGZvciB1c2VycHRyPwoKKEFuZCB0byBleGVyY2lzZSBFWEVDX09CSkVD VF9QSU5ORUQgaW4gYm90aCBjYXNlcy4pCgo+ICsvKiBnZW1fbXVsdGlwbGVfcHJvY2Vzc190ZXN0 Cj4gKyAqIFJ1biBiYXNpYyB0ZXN0IHNpbXVsdGFuZW91c2x5IHdpdGggbXVsdGlwbGUgcHJvY2Vz c2VzCj4gKyAqIFRoaXMgd2lsbCB0ZXN0IHBpbm5pbmcgc2FtZSBWQSBzZXBhcmF0ZWx5IGluIGVh Y2ggcHJvY2Vzcwo+ICsKPiArICogZm9yaygpOwo+ICsgKiBFeGVjdXRlIGJhc2ljIHRlc3QgaW4g cGFyZW50L2NoaWxkIHByb2Nlc3Nlcwo+ICsqLwo+ICsjZGVmaW5lIE1BWF9OVU1fUFJPQ0VTU0VT IDEwCj4gKwo+ICtzdGF0aWMgdm9pZCBnZW1fbXVsdGlwbGVfcHJvY2Vzc190ZXN0KHZvaWQpCj4g K3sKPiArCWlndF9mb3JrKGNoaWxkLCBNQVhfTlVNX1BST0NFU1NFUykgewo+ICsJCWdlbV9iYXNp Y190ZXN0KCk7Cj4gKwl9Cj4gKwlpZ3Rfd2FpdGNoaWxkcmVuKCk7Cj4gK30KPiArCj4gKwo+ICsv KiBnZW1fcmVwaW5fdGVzdAo+ICsgKiBUaGlzIHRlc3QgdHJpZXMgdG8gcmVwaW4gYSBidWZmZXIg YXQgYSBwcmV2aW91c2x5IHBpbm5lZCB2bWEKPiArICogZnJvbSBhIGRpZmZlcmVudCBleGVjYnVm Lgo+ICsgKiBNYWxsb2MgYSA0SyBidWZmZXIKPiArICogU2hhcmUgYnVmZmVyIHdpdGggd2l0aCBH UFUgYnkgdXNpbmcgdXNlcnB0ciBpb2N0bAo+ICsgKiBDcmVhdGUgYmF0Y2ggYnVmZmVyIHRvIHdy aXRlIERBVEEgdG8gZmlyc3QgZHdvcmQgb2YgYnVmZmVyCj4gKyAqIFVzZSAweDEwMDAgYWRkcmVz cyBhcyBkZXN0aW5hdGlvbiBhZGRyZXNzIGluIGJhdGNoIGJ1ZmZlcgo+ICsgKiBTZXQgRVhFQ19P QkpFQ1RfUElOTkVEIGZsYWcgaW4gZXhlYyBvYmplY3QKPiArICogU2V0ICdvZmZzZXQnIGluIGV4 ZWMgb2JqZWN0IHRvIDB4MTAwMCBWTUEKPiArICogU3VibWl0IGV4ZWNidWZmZXIKPiArICogVmVy aWZ5IHZhbHVlIG9mIGZpcnN0IERXT1JEIGluIHNoYXJlZCBidWZmZXIgbWF0Y2hlcyBEQVRBCj4g Kwo+ICsgKiBDcmVhdGUgc2Vjb25kIHNoYXJlZCBidWZmZXIKPiArICogRm9sbG93IGFsbCBzdGVw cyBhYm92ZQo+ICsgKiBFeGVjcHQsIGZvciBvZmZzZXQsIHVzZSBWTUEgb2YgZmlyc3QgYnVmZmVy IGFib3ZlCj4gKyAqIFN1Ym1pdCBleGVjYnVmZmVyCj4gKyAqIFZlcmlmeSB2YWx1ZSBvZiBmaXJz dCBEV09SRCBpbiBzZWNvbmQgc2hhcmVkIGJ1ZmZlciBtYXRjaGVzIERBVEEKPiArKi8KPiArc3Rh dGljIHZvaWQgZ2VtX3JlcGluX3Rlc3Qodm9pZCkKPiArewo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1 c2VycHRyOwo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyMTsKPiArCWludCBmZDsKPiArCXVp bnQzMl90KiBzaGFyZWRfYnVmZmVyID0gTlVMTDsKPiArCXVpbnQzMl90KiBzaGFyZWRfYnVmZmVy MSA9IE5VTEw7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbTlVNX0VYRUNf T0JKRUNUU107Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZmZXJbU1RPUkVfQkFUQ0hfQlVGRkVSX1NJ WkUgKyAyXTsKPiArCXVpbnQzMl90IGJhdGNoX2J1Zl9oYW5kbGUsIHNoYXJlZF9idWZfaGFuZGxl LCBzaGFyZWRfYnVmX2hhbmRsZTE7Cj4gKwlpbnQgcmluZywgbGVuOwo+ICsJY29uc3QgdWludDMy X3QgZGF0YSA9IDB4MTIzNDU2Nzg7Cj4gKwl1aW50NjRfdCBwaW5uaW5nX29mZnNldCA9IDB4MTAw MDsKPiArCj4gKwkvKiBDcmVhdGUgZ2VtIG9iamVjdCAqLwo+ICsJZmQgPSBkcm1fb3Blbl9kcml2 ZXIoRFJJVkVSX0lOVEVMKTsKPiArCWlndF9yZXF1aXJlKHVzZXNfZnVsbF9wcGd0dChmZCwgQUxJ QVNJTkdfUFBHVFQpKTsKPiArCj4gKwliYXRjaF9idWZfaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwg Qk9fU0laRSk7Cj4gKwo+ICsJLyogY3JlYXRlIGNwdSBidWZmZXIsIHNldCBmaXJzdCBlbGVtZW50 cyB0byAweDAgKi8KPiArCXNoYXJlZF9idWZmZXIgPSBjcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpF KTsKPiArCXNoYXJlZF9idWZmZXIxID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSk7Cj4gKwlz aGFyZWRfYnVmZmVyWzBdID0gMHgwOwo+ICsJc2hhcmVkX2J1ZmZlcjFbMF0gPSAweDA7Cj4gKwo+ ICsJLyogc2hhcmUgd2l0aCBHUFUgYW5kIGdldCBoYW5kbGVzICovCj4gKwlzaGFyZWRfYnVmX2hh bmRsZSA9IGluaXRfdXNlcnB0cihmZCwgJnVzZXJwdHIsIHNoYXJlZF9idWZmZXIsCj4gKwkJCQkJ CUJPX1NJWkUsIGZhbHNlKTsKPiArCXNoYXJlZF9idWZfaGFuZGxlMSA9IGluaXRfdXNlcnB0cihm ZCwgJnVzZXJwdHIxLCBzaGFyZWRfYnVmZmVyMSwKPiArCQkJCQkJQk9fU0laRSwgZmFsc2UpOwo+ ICsKPiArCS8qIGNyZWF0ZSBjb21tYW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmQgKi8KPiAr CWxlbiA9IGdlbV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hfYnVmZmVyLCBwaW5uaW5nX29mZnNl dCwgZGF0YSwgdHJ1ZSk7Cj4gKwlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJh dGNoX2J1ZmZlciwgbGVuKTsKPiArCj4gKwkvKiBzdWJtaXQgY29tbWFuZCBidWZmZXIgKi8KPiAr CXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHNoYXJlZF9idWZfaGFuZGxlLAo+ICsJ CQlFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiArCXNldHVwX2V4ZWNfb2Jq KCZleGVjX29iamVjdDJbMV0sIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+ICsKPiArCXJpbmcg PSBJOTE1X0VYRUNfUkVOREVSOwo+ICsKPiArCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4 ZWNfb2JqZWN0MiwgcmluZywgTlVNX0VYRUNfT0JKRUNUUywgbGVuKTsKPiArCXN1Ym1pdF9hbmRf c3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJZ2VtX3VzZXJwdHJfc3lu YyhmZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+ICsKPiArCWlndF9hc3NlcnQoKnNoYXJlZF9idWZm ZXIgPT0gZGF0YSk7CgpJIHN1Z2dlc3QgYWx3YXlzIGNoZWNraW5nIHRoZSBvZmZzZXRzLCBub3Qg b25seSBkYXRhLCB3aGVuZXZlciAKRVhFQ19PQkpFQ1RfUElOTkVEIGlzIGFza2VkIGZvci4KCj4g Kwo+ICsJLyogU2Vjb25kIGJ1ZmZlciAqLwo+ICsJLyogY3JlYXRlIGNvbW1hbmQgYnVmZmVyIHdp dGggd3JpdGUgY29tbWFuZCAqLwo+ICsJcGlubmluZ19vZmZzZXQgPSBleGVjX29iamVjdDJbMF0u b2Zmc2V0Owo+ICsJbGVuID0gZ2VtX3N0b3JlX2RhdGFfc3ZtKGZkLCBiYXRjaF9idWZmZXIsIHBp bm5pbmdfb2Zmc2V0LCBkYXRhLCB0cnVlKTsKPiArCWdlbV93cml0ZShmZCwgYmF0Y2hfYnVmX2hh bmRsZSwgMCwgYmF0Y2hfYnVmZmVyLCBsZW4pOwo+ICsKPiArCS8qIHN1Ym1pdCBjb21tYW5kIGJ1 ZmZlciAqLwo+ICsJLyogUGluIGF0IHNoYXJlZF9idWZmZXIsIG5vdCBzaGFyZWRfYnVmZmVyMSAq Lwo+ICsJLyogV2UgYXJlIHJlcXVlc3RpbmcgYWRkcmVzcyB3aGVyZSBhbm90aGVyIGJ1ZmZlciB3 YXMgcGlubmVkIHByZXZpb3VzbHkgKi8KPiArCS8qIEl0IGRvZXMgbm90IGV4aXN0IHRoZXJlIGFu eW1vcmUsIHNpbmNlIGV4ZWNidWYgd2FzIGFscmVhZHkgZXhlY3V0ZWQgKi8KCkl0IGNvdWxkIHN0 aWxsIGJlIHRoZXJlIGFuZCB3aWxsIHRoZW4gbmVlZCB0byBiZSByZW1vdmVkIHRvIG1ha2UgcGxh Y2UgCmZvciB0aGlzIG9uZS4KCj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBz aGFyZWRfYnVmX2hhbmRsZTEsCj4gKwkJCUVYRUNfT0JKRUNUX1BJTk5FRCwgcGlubmluZ19vZmZz ZXQpOwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlsxXSwgYmF0Y2hfYnVmX2hhbmRs ZSwgMCwgMCk7Cj4gKwo+ICsJcmluZyA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4gKwo+ICsJc2V0dXBf ZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLCBOVU1fRVhFQ19PQkpFQ1RT LCBsZW4pOwo+ICsJc3VibWl0X2FuZF9zeW5jKGZkLCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hhbmRs ZSk7Cj4gKwlnZW1fdXNlcnB0cl9zeW5jKGZkLCBzaGFyZWRfYnVmX2hhbmRsZTEpOwo+ICsKPiAr CWlndF9hc3NlcnQoKnNoYXJlZF9idWZmZXIxID09IGRhdGEpOwo+ICsKPiArCWdlbV9jbG9zZShm ZCwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwljbG9zZShmZCk7Cj4gKwo+ICsJZnJlZShzaGFyZWRf YnVmZmVyKTsKPiArCWZyZWUoc2hhcmVkX2J1ZmZlcjEpOwo+ICt9Cj4gKwo+ICsKPiArLyogZ2Vt X3JlcGluX292ZXJsYXBfdGVzdAo+ICsgKiBUaGlzIHRlc3Qgd2lsbCBhdHRlbXB0IHRvIHBpbiB0 d28gYnVmZmVycyBhdCB0aGUgc2FtZSBWTUEgYXMgcGFydCBvZiB0aGUgc2FtZQo+ICsgICBleGVj YnVmZmVyIG9iamVjdAo+ICsKPiArICogTWFsbG9jIGEgNEsgYnVmZmVyCj4gKyAqIFNoYXJlIGJ1 ZmZlciB3aXRoIHdpdGggR1BVIGJ5IHVzaW5nIHVzZXJwdHIgaW9jdGwKPiArICogQ3JlYXRlIHNl Y29uZCBzaGFyZWQgYnVmZmVyCj4gKyAqIENyZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3JpdGUgREFU QSB0byBmaXJzdCBkd29yZCBvZiBlYWNoIGJ1ZmZlcgo+ICsgKiBVc2Ugc2FtZSB2aXJ0dWFsIGFk ZHJlc3MgYXMgZGVzdGluYXRpb24gYWRkcmVzc2VzIGluIGJhdGNoIGJ1ZmZlcgo+ICsgKiBTZXQg RVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcgaW4gYm90aCBleGVjIG9iamVjdHMKPiArICogU2V0ICdv ZmZzZXQnIGluIGJvdGggZXhlYyBvYmplY3RzIHRvIHNhbWUgVk1BCj4gKyAqIFN1Ym1pdCBleGVj YnVmZmVyCj4gKyAqIENvbW1hbmQgc2hvdWxkIHJldHVybiBFSU5WQUwsIHNpbmNlIHdlIGFyZSB0 cnlpbmcgdG8gcGluIHRvIHNhbWUgVk1BCj4gKyovCj4gK3N0YXRpYyB2b2lkIGdlbV9waW5fb3Zl cmxhcF90ZXN0KHZvaWQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsKPiArCWk5 MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjE7Cj4gKwlpbnQgZmQsIHJldDsKPiArCXVpbnQzMl90KiBz aGFyZWRfYnVmZmVyID0gTlVMTDsKPiArCXVpbnQzMl90KiBzaGFyZWRfYnVmZmVyMSA9IE5VTEw7 Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbTlVNX0VYRUNfT0JKRUNUUyAr IDFdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmZmVyW0JPX1NJWkVdOwo+ICsJdWludDMyX3QgYmF0 Y2hfYnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5kbGUsIHNoYXJlZF9idWZfaGFuZGxlMTsKPiAr CWludCByaW5nLCBsZW47Cj4gKwljb25zdCB1aW50MzJfdCBkYXRhID0gMHgxMjM0NTY3ODsKPiAr CXVpbnQ2NF90IHBpbm5pbmdfb2Zmc2V0ID0gMHgxMDAwOwo+ICsKPiArCWZkID0gZHJtX29wZW5f ZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gKwlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQs IEFMSUFTSU5HX1BQR1RUKSk7Cj4gKwo+ICsJYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUo ZmQsIEJPX1NJWkUpOwo+ICsKPiArCXNoYXJlZF9idWZmZXIgPSBjcmVhdGVfbWVtX2J1ZmZlcihC T19TSVpFKTsKPiArCXNoYXJlZF9idWZmZXIxID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSAq IDIpOwo+ICsKPiArCS8qIHNoYXJlIHdpdGggR1BVICovCj4gKwlzaGFyZWRfYnVmX2hhbmRsZSA9 IGluaXRfdXNlcnB0cihmZCwgJnVzZXJwdHIsIHNoYXJlZF9idWZmZXIsCj4gKwkJCQkJCUJPX1NJ WkUsIGZhbHNlKTsKPiArCXNoYXJlZF9idWZfaGFuZGxlMSA9IGluaXRfdXNlcnB0cihmZCwgJnVz ZXJwdHIxLCBzaGFyZWRfYnVmZmVyMSwKPiArCQkJCQkJQk9fU0laRSAqIDIsIGZhbHNlKTsKPiAr Cj4gKwlsZW4gPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciwKPiArCQkJCQlw aW5uaW5nX29mZnNldCwgZGF0YSwgZmFsc2UpOwo+ICsJbGVuICs9IGdlbV9zdG9yZV9kYXRhX3N2 bShmZCwgKGJhdGNoX2J1ZmZlciArIGxlbi80KSwKPiArCQkJCQlwaW5uaW5nX29mZnNldCwgZGF0 YSwgdHJ1ZSk7Cj4gKwlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1 ZmZlciwgbGVuKTsKCllvdSBjYW4gcmVtb3ZlIHN0b3JlIGR3b3JkcyBzaW5jZSB5b3UgZG9uJ3Qg ZXhwZWN0IHRoaXMgdGVzdCB0byBldmVyIApzdWNjZWVkLiBJIHRoaW5rIEkgc3VnZ2VzdGVkIHRo aXMgaW4gdGhlIHByZXZpb3VzIHJvdW5kPyBXb3VsZCBtYWtlIHRoZSAKdGVzdCBzaG9ydGVyIGFu ZCBlYXNpZXIgdG8gcmVhZC4KCkFsc28sIG9uZSB0aGluZyB3b3J0aCBhZGRpbmcgd291bGQgYmUg ZGlmZmVyZW50IG92ZXJsYXBzLiBPYmplY3RzIGJlZm9yZSAKYW5kIGFmdGVyIGFuZCBvdmVybGFw IGJ5IHBhZ2UgYW5kIHZpY2UtdmVyc2EgYW5kIHNpbWlsYXIuCgpUaGlzIGlzIHJlYWxseSB0aGUg Y29yZSBvZiB0aGUgc29mdHBpbiBmdW5jdGlvbmFsaXR5IHNvIGl0IGlzIHdvcnRoIApzY3J1dGlu aXNpbmcgYSBiaXQuCgpBbmQgdGhlbiBwb3NzaWJseSB0aGUgc2FtZSBidXQgd2l0aCBzb21ldGhp bmcgYWxyZWFkeSBhdCB0aGUgVk1BIGluIApxdWVzdGlvbiwgc28gaXQgbmVlZHMgdG8gbW92ZSBv bmUgYW5kIHNlZSB0aGF0IGl0IGNhbm5vdCBmaXQgdGhlIG90aGVyLgoKQW5kIHRoZW4gcGVyaGFw cyBhZGQgYW4gb2JqZWN0IHdoaWNoIGlzIGltbW92YWJsZSwgbGlrZSBzb21lIGxvbmcgCnJ1bm5p bmcgd29ya2xvYWQgb24gYW5vdGhlciByaW5nIGFuZCB0cnkgdG8gcGluIGF0IHRoYXQgYWRkcmVz cyBmcm9tIApkaWZmZXJlbnQgcmluZyB3aGlsZSBpdCBpcyBydW5uaW5nIHRvIHZlcmlmeSBpdCBm YWlscy4KCkNhbiBhZGQgdGhlc2UgYXMgZm9sbG93IHVwIHRlc3RzIGNhc2VzLgoKPiArCj4gKwkv KiBzdWJtaXQgY29tbWFuZCBidWZmZXIgKi8KPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVj dDJbMF0sIHNoYXJlZF9idWZfaGFuZGxlLAo+ICsJCQlFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5p bmdfb2Zmc2V0KTsKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIHNoYXJlZF9i dWZfaGFuZGxlMSwKPiArCQkJRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29mZnNldCk7Cj4g KwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzJdLCBiYXRjaF9idWZfaGFuZGxlLCAwLCAw KTsKPiArCj4gKwlyaW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKPiArCj4gKwlzZXR1cF9leGVjYnVm ZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJpbmcsIE5VTV9FWEVDX09CSkVDVFMrMSwgbGVu KTsKPiArCj4gKwlyZXQgPSBkcm1Jb2N0bChmZCwKPiArCSAgICAgIERSTV9JT0NUTF9JOTE1X0dF TV9FWEVDQlVGRkVSMiwKPiArCSAgICAgICZleGVjYnVmKTsKPiArCj4gKwkvKiBleHBlY3QgdG8g ZmFpbCAqLwo+ICsJaWd0X2Fzc2VydF9uZXEocmV0LCAwKTsKPiArCWlndF9hc3NlcnQoZXJybm8g PT0gMjIpOwo+ICsKPiArCWdlbV9jbG9zZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwljbG9z ZShmZCk7Cj4gKwo+ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiArCWZyZWUoc2hhcmVkX2J1ZmZl cjEpOwo+ICt9Cj4gKwo+ICsvKiBnZW1fc29mdHBpbl9zdHJlc3NfdGVzdAo+ICsgKiBTdHJlc3Mg dGVzdCB3aGljaCBjcmVhdGVzIDEwSyBidWZmZXJzIGFuZCBzaGFyZXMgd2l0aCBHUFUKPiArICog Q3JlYXRlIDEwMEsgdWludDMyIGJ1ZmZlcnMgb2Ygc2l6ZSA0SyBlYWNoCj4gKyAqIFNoYXJlIHdp dGggR1BVIHVzaW5nIHVzZXJwdHIgaW9jdGwKPiArICogQ3JlYXRlIGJhdGNoIGJ1ZmZlciB0byB3 cml0ZSBEQVRBIGluIGZpcnN0IGVsZW1lbnQgb2YgZWFjaCBidWZmZXIKPiArICogUGluIGVhY2gg YnVmZmVyIHRvIHZhcnlpbmcgYWRkcmVzc2VzIHN0YXJ0aW5nIGZyb20gMHg4MDAwMDAwMDAwMDAg Z29pbmcgYmVsb3cKPiArICogRXhlY3V0ZSBCYXRjaCBCdWZmZXIgb24gQmxpdCByaW5nIFNUUkVT U19OVU1fTE9PUFMgdGltZXMKPiArICogVmFsaWRhdGUgZXZlcnkgYnVmZmVyIGhhcyBEQVRBIGlu IGZpcnN0IGVsZW1lbnQKPiArICogUmluc2UgYW5kIFJlcGVhdCBvbiBSZW5kZXIgcmluZwo+ICsq Lwo+ICsjZGVmaW5lIFNUUkVTU19OVU1fQlVGRkVSUyAxMDAwMDAKPiArI2RlZmluZSBTVFJFU1Nf TlVNX0xPT1BTIDEwMAo+ICsjZGVmaW5lIFNUUkVTU19TVE9SRV9DT01NQU5EUyA0ICogU1RSRVNT X05VTV9CVUZGRVJTCj4gKwo+ICtzdGF0aWMgdm9pZCBnZW1fc29mdHBpbl9zdHJlc3NfdGVzdCh2 b2lkKQo+ICt7Cj4gKwlpOTE1X2dlbV91c2VycHRyIHVzZXJwdHI7Cj4gKwlpbnQgZmQ7Cj4gKwl1 aW50MzJfdCAqKnNoYXJlZF9idWZmZXI7Cj4gKwl1aW50MzJfdCAqc2hhcmVkX2hhbmRsZTsKPiAr CXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY19vYmplY3QyICpleGVjX29iamVjdDI7Cj4gKwl1aW50MzJfdCAqYmF0Y2hf YnVmZmVyOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmX2hhbmRsZTsKPiArCWludCByaW5nLCBsZW47 Cj4gKwlpbnQgYnVmLCBsb29wOwo+ICsJdWludDY0X3QgcGlubmluZ19vZmZzZXQgPSAweDgwMDAw MDAwMDAwMDsKPiArCj4gKwlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+ICsJ aWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBGVUxMXzQ4X0JJVF9QUEdUVCkpOwo+ICsK PiArCS8qIEFsbG9jYXRlIGJsb2JzIGZvciBhbGwgZGF0YSBzdHJ1Y3R1cmVzICovCj4gKwlzaGFy ZWRfaGFuZGxlID0gY2FsbG9jKFNUUkVTU19OVU1fQlVGRkVSUywgc2l6ZW9mKHVpbnQzMl90KSk7 Cj4gKwlzaGFyZWRfYnVmZmVyID0gY2FsbG9jKFNUUkVTU19OVU1fQlVGRkVSUywgc2l6ZW9mKHVp bnQzMl90KikpOwo+ICsJZXhlY19vYmplY3QyID0gY2FsbG9jKFNUUkVTU19OVU1fQlVGRkVSUyAr IDEsCj4gKwkJCQlzaXplb2Yoc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIpKTsKPiAr CS8qIDQgZHdvcmRzIHBlciBidWZmZXIgKyAyIGZvciB0aGUgZW5kIG9mIGJhdGNoYnVmZmVyICov Cj4gKwliYXRjaF9idWZmZXIgPSBjYWxsb2MoU1RSRVNTX1NUT1JFX0NPTU1BTkRTICsgMiwgc2l6 ZW9mKHVpbnQzMl90KSk7Cj4gKwliYXRjaF9idWZfaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgKFNU UkVTU19TVE9SRV9DT01NQU5EUyArIDIpKjQpOwo+ICsKPiArCS8qIGNyZWF0ZSBjb21tYW5kIGJ1 ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmRzICovCj4gKwlsZW4gPSAwOwo+ICsJZm9yKGJ1ZiA9IDA7 IGJ1ZiA8IFNUUkVTU19OVU1fQlVGRkVSUzsgYnVmKyspIHsKPiArCQlzaGFyZWRfYnVmZmVyW2J1 Zl0gPSBjcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpFKTsKPiArCQkqc2hhcmVkX2J1ZmZlcltidWZd ID0gMHhGRkZGRkZGRjsKPiArCj4gKwkJLyogc2hhcmUgd2l0aCBHUFUgKi8KPiArCQlzaGFyZWRf aGFuZGxlW2J1Zl0gPSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRyLCBzaGFyZWRfYnVmZmVyW2J1 Zl0sCj4gKwkJCQkJCUJPX1NJWkUsIGZhbHNlKTsKPiArCj4gKwkJc2V0dXBfZXhlY19vYmooJmV4 ZWNfb2JqZWN0MltidWZdLCBzaGFyZWRfaGFuZGxlW2J1Zl0sCj4gKwkJCQlFWEVDX09CSkVDVF9Q SU5ORUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiArCQlsZW4gKz0gZ2VtX3N0b3JlX2RhdGFfc3ZtKGZk LCBiYXRjaF9idWZmZXIgKyAobGVuLzQpLCBwaW5uaW5nX29mZnNldCwKPiArCQkJYnVmICwgKGJ1 ZiA9PSBTVFJFU1NfTlVNX0JVRkZFUlMtMSkgPyB0cnVlOmZhbHNlKTsKPiArCQkKPiArCQkvKiBk ZWNyZW1lbnRhbCA0SyBhbGlnbmVkIGFkZHJlc3MgKi8KPiArCQlwaW5uaW5nX29mZnNldCA9IEFM SUdOKHBpbm5pbmdfb2Zmc2V0IC0gMHgyMDAwMDAsIDQwOTYpOwoKT2ggSSB3YXNuJ3QgY2xlYXIs IG15IGNvbW1lbnQgd2FzIGFib3V0IDB4MjAwMDAwLCB3aHkgaGFyZGNvZGUgdGhhdCBhbmQgCm5v dCBqdXN0IHVzZQoKICBwaW5uaW5nX29mZnNldCAtPSBBTElHTihCT19TSVpFLCA0MDk2KQoKPwoK PiArCX0KPiArCWdlbV93cml0ZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgYmF0Y2hfYnVmZmVy LCBsZW4pOwo+ICsKPiArCS8qIHN1Ym1pdCBjb21tYW5kIGJ1ZmZlciAqLwo+ICsJc2V0dXBfZXhl Y19vYmooJmV4ZWNfb2JqZWN0MltTVFJFU1NfTlVNX0JVRkZFUlNdLCBiYXRjaF9idWZfaGFuZGxl LCAwLCAwKTsKPiArCj4gKwkvKiBXZSB3YW50IHRvIHJ1biB0aGlzIG9uIEJMVCByaW5nIGlmIHBv c3NpYmxlICovCj4gKwlpZiAoSEFTX0JMVF9SSU5HKGludGVsX2dldF9kcm1fZGV2aWQoZmQpKSl7 Cj4gKwkJcmluZyA9IEk5MTVfRVhFQ19CTFQ7Cj4gKwo+ICsJCXNldHVwX2V4ZWNidWZmZXIoJmV4 ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywKPiArCQkJCVNUUkVTU19OVU1fQlVGRkVSUyArIDEs IGxlbik7CgpzZXR1cF9leGVjYnVmZmVyIHdvbid0IGJlIGNhbGxlZCBpZiB0aGVyZSBpcyBub3Qg Ymx0IHJpbmcgZm9yIHRoZSByZW5kZXIgCnJpbmcgYmVsb3cuCgo+ICsJCWZvciAobG9vcCA9IDA7 IGxvb3AgPCBTVFJFU1NfTlVNX0xPT1BTOyBsb29wKyspewo+ICsJCQlzdWJtaXRfYW5kX3N5bmMo ZmQsICZleGVjYnVmLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCQkJZm9yKGJ1ZiA9IDA7IGJ1ZiA8 IFNUUkVTU19OVU1fQlVGRkVSUzsgYnVmKyspewo+ICsJCQkJZ2VtX3VzZXJwdHJfc3luYyhmZCwg c2hhcmVkX2hhbmRsZVtidWZdKTsKPiArCQkJCWlndF9mYWlsX29uX2YoKnNoYXJlZF9idWZmZXJb YnVmXSAhPSBidWYsIFwKPiArCQkJCSJNaXNtYXRjaCBpbiBidWZmZXIgJWQsIGl0ZXJhdGlvbiAl ZDogMHglMDhYXG4iLCBcCj4gKwkJCQlidWYsIGxvb3AsICpzaGFyZWRfYnVmZmVyW2J1Zl0pOwo+ ICsJCQl9Cj4gKwkJfQo+ICsJfQo+ICsKPiArCS8qIE5vdyBSZW5kZXIgUmluZyAqLwo+ICsJcmlu ZyA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4gKwlleGVjYnVmLmZsYWdzID0gcmluZzsKPiArCWZvciAo bG9vcCA9IDA7IGxvb3AgPCBTVFJFU1NfTlVNX0xPT1BTOyBsb29wKyspewo+ICsJCXN1Ym1pdF9h bmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJCWZvcihidWYgPSAw OyBidWYgPCBTVFJFU1NfTlVNX0JVRkZFUlM7IGJ1ZisrKXsKPiArCQkJZ2VtX3VzZXJwdHJfc3lu YyhmZCwgc2hhcmVkX2hhbmRsZVtidWZdKTsKPiArCQkJaWd0X2ZhaWxfb25fZigqc2hhcmVkX2J1 ZmZlcltidWZdICE9IGJ1ZiwgXAo+ICsJCQkiTWlzbWF0Y2ggaW4gYnVmZmVyICVkLCBcCj4gKwkJ CWl0ZXJhdGlvbiAlZDogMHglMDhYXG4iLCBidWYsIGxvb3AsICpzaGFyZWRfYnVmZmVyW2J1Zl0p Owo+ICsJCX0KPiArCX0KPiArCj4gKwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ ICsJY2xvc2UoZmQpOwo+ICsKPiArCWZvcihsb29wID0gMDsgbG9vcCA8IFNUUkVTU19OVU1fQlVG RkVSUzsgbG9vcCsrKXsKPiArCQlmcmVlKHNoYXJlZF9idWZmZXJbbG9vcF0pOwo+ICsJfQo+ICsK PiArCWZyZWUoc2hhcmVkX2hhbmRsZSk7Cj4gKwlmcmVlKHNoYXJlZF9idWZmZXIpOwo+ICsJZnJl ZShleGVjX29iamVjdDIpOwo+ICsJZnJlZShiYXRjaF9idWZmZXIpOwo+ICt9Cj4gKwo+ICsvKiBn ZW1fd3JpdGVfbXVsdGlwYWdlX2J1ZmZlcgo+ICsgKiBDcmVhdGUgYSBidWZmZXIgc3Bhbm5pbmcg bXVsdGlwbGUgcGFnZXMsIGFuZCBzaGFyZSB3aXRoIEdQVS4KPiArICogV3JpdGUgdG8gZXZlcnkg ZWxlbWVudCBvZiB0aGUgYnVmZmVyCj4gKyAqIGFuZCB2ZXJpZnkgY29ycmVjdCBjb250ZW50cy4K PiArCj4gKyAqIENyZWF0ZSA4SyBidWZmZXIKPiArICogU2hhcmUgd2l0aCBHUFUgdXNpbmcgdXNl cnB0ciBpb2N0bAo+ICsgKiBDcmVhdGUgYmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgaW4gYWxs IGVsZW1lbnRzIG9mIGJ1ZmZlcgo+ICsgKiBFeGVjdXRlIEJhdGNoIEJ1ZmZlcgo+ICsgKiBWYWxp ZGF0ZSBldmVyeSBlbGVtZW50IGhhcyBEQVRBCj4gKyovCj4gKwo+ICsjZGVmaW5lIERXT1JEX1NJ WkUgc2l6ZW9mKHVpbnQzMl90KQo+ICsjZGVmaW5lIEJCX1NJWkUgKChNVUxUSVBBR0VfQk9fU0la RSAvIERXT1JEX1NJWkUpICogU1RPUkVfQkFUQ0hfQlVGRkVSX1NJWkUpICsgMgo+ICtzdGF0aWMg dm9pZCBnZW1fd3JpdGVfbXVsdGlwYWdlX2J1ZmZlcl90ZXN0KHZvaWQpCj4gK3sKPiArCWk5MTVf Z2VtX3VzZXJwdHIgdXNlcnB0cjsKPiArCWludCBmZDsKPiArCXVpbnQzMl90KiBzaGFyZWRfYnVm ZmVyOwo+ICsJdWludDMyX3Qgc2hhcmVkX2hhbmRsZTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3Qy IGV4ZWNfb2JqZWN0MltOVU1fRVhFQ19PQkpFQ1RTXTsKPiArCXVpbnQzMl90IGJhdGNoX2J1ZmZl cltCQl9TSVpFXTsKPiArCXVpbnQzMl90IGJhdGNoX2J1Zl9oYW5kbGU7Cj4gKwlpbnQgcmluZywg bGVuLCBqOwo+ICsJdWludDY0X3QgcGlubmluZ19vZmZzZXQ9MHgxMDAwOwo+ICsJdWludDY0X3Qg dmFkZHI7Cj4gKwo+ICsJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCWln dF9yZXF1aXJlKHVzZXNfZnVsbF9wcGd0dChmZCwgQUxJQVNJTkdfUFBHVFQpKTsKPiArCj4gKwli YXRjaF9idWZfaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgc2l6ZW9mKGJhdGNoX2J1ZmZlcikpOwo+ ICsJc2hhcmVkX2J1ZmZlciA9IGNyZWF0ZV9tZW1fYnVmZmVyKE1VTFRJUEFHRV9CT19TSVpFKTsK PiArCj4gKwlsZW4gPSAwOwo+ICsJbWVtc2V0KGJhdGNoX2J1ZmZlciwgMCwgc2l6ZW9mKGJhdGNo X2J1ZmZlcikpOwo+ICsJbWVtc2V0KHNoYXJlZF9idWZmZXIsIDAsIE1VTFRJUEFHRV9CT19TSVpF KTsKPiArCj4gKwkvKiBzaGFyZSB3aXRoIEdQVSAqLwo+ICsJc2hhcmVkX2hhbmRsZSA9IGluaXRf dXNlcnB0cihmZCwgJnVzZXJwdHIsIHNoYXJlZF9idWZmZXIsCj4gKwkJCQkJTVVMVElQQUdFX0JP X1NJWkUsIGZhbHNlKTsKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHNoYXJl ZF9oYW5kbGUsCj4gKwkJCUVYRUNfT0JKRUNUX1BJTk5FRCwgcGlubmluZ19vZmZzZXQpOwo+ICsK PiArCS8qIGNyZWF0ZSBjb21tYW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmRzICovCj4gKwl2 YWRkciA9IHBpbm5pbmdfb2Zmc2V0Owo+ICsJZm9yKGo9MDsgajwgKE1VTFRJUEFHRV9CT19TSVpF L3NpemVvZih1aW50MzJfdCkpOyBqKyspewo+ICsJCS8qIEJPX1NJWkUgYmVjYXVzZSBpdCBpcyAx NksgNCBieXRlIGVudHJpZXMgKi8KClN0YWxlIGNvbW1lbnQ/Cgo+ICsJCWxlbiArPSBnZW1fc3Rv cmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciArIChsZW4vNCksIHZhZGRyLAo+ICsJCQlqLCAo aiA9PSAoKChNVUxUSVBBR0VfQk9fU0laRS9zaXplb2YodWludDMyX3QpKS0xKSkpID9cCj4gKwkJ CSB0cnVlOmZhbHNlKTsKPiArCQl2YWRkciArPSBzaXplb2Yoc2hhcmVkX2J1ZmZlclswXSk7ICAv KiA0IGJ5dGVzICovCj4gKwl9Cj4gKwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxl LCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gKwo+ICsJLyogc3VibWl0IGNvbW1hbmQgYnVmZmVy ICovCj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBiYXRjaF9idWZfaGFuZGxl LCAwLCAwKTsKPiArCj4gKwlyaW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKPiArCXNldHVwX2V4ZWNi dWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywgTlVNX0VYRUNfT0JKRUNUUywgbGVu KTsKPiArCXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ ICsJZ2VtX3VzZXJwdHJfc3luYyhmZCwgc2hhcmVkX2hhbmRsZSk7Cj4gKwo+ICsJZm9yKGogPSAw OyBqIDwgKE1VTFRJUEFHRV9CT19TSVpFL3NpemVvZih1aW50MzJfdCkpOyBqKyspewo+ICsJCWln dF9mYWlsX29uX2Yoc2hhcmVkX2J1ZmZlcltqXSAhPSBqLAo+ICsJCSJNaXNtYXRjaCBpbiBpbmRl eCAlZDogMHglMDhYXG4iLCBqLCBzaGFyZWRfYnVmZmVyW2pdKTsKPiArCX0KPiArCj4gKwlnZW1f Y2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJY2xvc2UoZmQpOwo+ICsKPiArCWZyZWUo c2hhcmVkX2J1ZmZlcik7Cj4gK30KPiArCj4gKy8qIGdlbV9waW5faW52YWxpZF92bWFfdGVzdAo+ ICsgKiBUaGlzIHRlc3Qgd2lsbCByZXF1ZXN0IHRvIHBpbiBhIHNoYXJlZCBidWZmZXIgdG8gYW4g aW52YWxpZAo+ICsgKiBWTUEgID4gNDgtYml0IGFkZHJlc3MKPiArICogQ3JlYXRlIHNoYXJlZCBi dWZmZXIgb2Ygc2l6ZSA0Swo+ICsgKiBUcnkgYW5kIFBpbiBvYmplY3QgdG8gYWRkcmVzcyAweDkw MDAwMDAwMDAwMDAKPiArKi8KPiArc3RhdGljIHZvaWQgZ2VtX3Bpbl9pbnZhbGlkX3ZtYV90ZXN0 KHZvaWQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsKPiArCWludCBmZCwgcmV0 Owo+ICsJdWludDMyX3QqIHNoYXJlZF9idWZmZXIgPSBOVUxMOwo+ICsJc3RydWN0IGRybV9pOTE1 X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29i amVjdDIgZXhlY19vYmplY3QyW05VTV9FWEVDX09CSkVDVFMgLSAxXTsKPiArCXVpbnQzMl90IHNo YXJlZF9idWZfaGFuZGxlOwo+ICsJaW50IHJpbmc7Cj4gKwl1aW50NjRfdCBpbnZhbGlkX2FkZHJl c3MgPSAweDkwMDAwMDAwMDAwMDA7IC8qIDUyIGJpdCBhZGRyZXNzICovCgpXb3VsZCB0aGlzIGZh aWwgd2l0aCBhID4zMi1iaXQgYWRkcmVzcyBhcyB3ZWxsPyBJIHRob3VnaHQgSSBzcG90dGVkIApz b21ld2hlcmUgZWxzZSB0aGF0IHlvdSBuZWVkIHRvIHBhc3MgaW4gYSBzcGVjaWFsIGZsYWcgaWYg eW91IHdhbnQgdG8gCnVzZSA0OC1iaXQgb2Zmc2V0cz8gT3IgSSBhbSBjb25mdXNpbmcgc29tZXRo aW5nPwoKSG0sIHllcywgIEVYRUNfT0JKRUNUX1NVUFBPUlRTXzQ4Ql9BRERSRVNTID8KClNvIG1h eWJlIHR3byB0ZXN0IGNhc2VzLCA+MzItYml0IG9mZnNldCB3aXRob3V0IHRoaXMgZmxhZyBzaG91 bGQgZmFpbCwgCmFuZCA+NDgtYml0IG9mZnNldCB3aXRoIGl0Pwo+ICsKPiArCWZkID0gZHJtX29w ZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gKwlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQo ZmQsIEZVTExfNDhfQklUX1BQR1RUKSk7Cj4gKwo+ICsJc2hhcmVkX2J1ZmZlciA9IGNyZWF0ZV9t ZW1fYnVmZmVyKEJPX1NJWkUpOwo+ICsJKnNoYXJlZF9idWZmZXIgPSAweEZGRkZGRkZGOwo+ICsJ Cj4gKwkvKiBzaGFyZSB3aXRoIEdQVSAqLwo+ICsJc2hhcmVkX2J1Zl9oYW5kbGUgPSBpbml0X3Vz ZXJwdHIoZmQsICZ1c2VycHRyLCBzaGFyZWRfYnVmZmVyLCBCT19TSVpFLCBmYWxzZSk7Cj4gKwlz ZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZSwKPiArCQkJ RVhFQ19PQkpFQ1RfUElOTkVELCBpbnZhbGlkX2FkZHJlc3MpOwo+ICsKPiArCXJpbmcgPSBJOTE1 X0VYRUNfUkVOREVSOwo+ICsKPiArCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2Jq ZWN0MiwgcmluZywgTlVNX0VYRUNfT0JKRUNUUyAtIDEsIDApOwo+ICsKPiArCS8qIEV4cGVjdCBl eGVjYnVmIHRvIGZhaWwgKi8KPiArCXJldCA9IGRybUlvY3RsKGZkLAo+ICsJICAgICAgIERSTV9J T0NUTF9JOTE1X0dFTV9FWEVDQlVGRkVSMiwKPiArCSAgICAgICAmZXhlY2J1Zik7Cj4gKwo+ICsJ aWd0X2Fzc2VydF9uZXEocmV0LCAwKTsKCkRvIHlvdSBhbHNvIHdhbnQgdG8gY2hlY2sgdGhlIGV4 YWN0IGVycm5vPyBTb3VuZHMgbGlrZSBhIGdvb2QgaWRlYSB0byAKbWUsIGV2ZW4gdGhvdWdoIGV4 ZWNidWYgcmV0dXJucyBFSU5WQUwgZm9yIGEgdG9uIG9mIHJlYXNvbnMuLgoKPiArCQo+ICsJY2xv c2UoZmQpOwo+ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiArfQo+ICsKPiArCj4gKy8qIGdlbV9w aW5faGlnaF9hZGRyZXNzX3Rlc3QKPiArICogVGhpcyB0ZXN0IHdpbGwgY3JlYXRlIGEgc2hhcmVk IGJ1ZmZlciwgYW5kIGNyZWF0ZSBhIGNvbW1hbmQKPiArICogZm9yIEdQVSB0byB3cml0ZSBkYXRh IGluIGl0LiBJdCB3aWxsIGF0dGVtcHQgdG8gcGluIHRoZSBidWZmZXIgYXQgYWRkcmVzcyA+IDMy IGJpdHMuCj4gKyAqIENQVSB3aWxsIHJlYWQgYW5kIG1ha2Ugc3VyZSBleHBlY3RlZCB2YWx1ZSBp cyBvYnRhaW5lZAo+ICsKPiArICogTWFsbG9jIGEgNEsgYnVmZmVyCj4gKyAqIFNoYXJlIGJ1ZmZl ciB3aXRoIHdpdGggR1BVIGJ5IHVzaW5nIHVzZXJwdHIgaW9jdGwKPiArICogQ3JlYXRlIGJhdGNo IGJ1ZmZlciB0byB3cml0ZSBEQVRBIHRvIGZpcnN0IGR3b3JkIG9mIGJ1ZmZlcgo+ICsgKiBVc2Ug dmlydHVhbCBhZGRyZXNzIG9mIGJ1ZmZlciBhcyAweDExMDAwMDAwMDAgKD4gMzIgYml0KQo+ICsg KiBTZXQgRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcgaW4gZXhlYyBvYmplY3QKPiArICogU2V0ICdv ZmZzZXQnIGluIGV4ZWMgb2JqZWN0IHRvIHNoYXJlZCBidWZmZXIgVk1BCj4gKyAqIFN1Ym1pdCBl eGVjYnVmZmVyCj4gKyAqIFZlcmlmeSB2YWx1ZSBvZiBmaXJzdCBEV09SRCBpbiBzaGFyZWQgYnVm ZmVyIG1hdGNoZXMgREFUQQo+ICsqLwo+ICsKPiArc3RhdGljIHZvaWQgZ2VtX3Bpbl9oaWdoX2Fk ZHJlc3NfdGVzdCh2b2lkKQo+ICt7Cj4gKwlpOTE1X2dlbV91c2VycHRyIHVzZXJwdHI7Cj4gKwlp bnQgZmQ7Cj4gKwl1aW50MzJfdCogc2hhcmVkX2J1ZmZlciA9IE5VTEw7Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4 ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbTlVNX0VYRUNfT0JKRUNUU107Cj4gKwl1aW50MzJfdCBi YXRjaF9idWZmZXJbQk9fU0laRV07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlLCBzaGFy ZWRfYnVmX2hhbmRsZTsKPiArCWludCByaW5nLCBsZW47Cj4gKwljb25zdCB1aW50MzJfdCBkYXRh ID0gMHgxMjM0NTY3ODsKPiArCXVpbnQ2NF90IGhpZ2hfYWRkcmVzcyA9IDB4MTExMUZGRkYwMDA7 IC8qIDQ0IGJpdCBhZGRyZXNzICovCj4gKwo+ICsJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVS X0lOVEVMKTsKPiArCWlndF9yZXF1aXJlKHVzZXNfZnVsbF9wcGd0dChmZCwgRlVMTF80OF9CSVRf UFBHVFQpKTsKPiArCj4gKwliYXRjaF9idWZfaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0la RSk7Cj4gKwo+ICsJLyogY3JlYXRlIGNwdSBidWZmZXIsIHNldCB0byBhbGwgMHhGJ3MgKi8KPiAr CXNoYXJlZF9idWZmZXIgPSBjcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpFKTsKPiArCSpzaGFyZWRf YnVmZmVyID0gMHhGRkZGRkZGRjsKPiArCj4gKwkvKiBzaGFyZSB3aXRoIEdQVSAqLwo+ICsJc2hh cmVkX2J1Zl9oYW5kbGUgPSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRyLCBzaGFyZWRfYnVmZmVy LCBCT19TSVpFLCBmYWxzZSk7Cj4gKwo+ICsJLyogY3JlYXRlIGNvbW1hbmQgYnVmZmVyIHdpdGgg d3JpdGUgY29tbWFuZCAqLwo+ICsJbGVuID0gZ2VtX3N0b3JlX2RhdGFfc3ZtKGZkLCBiYXRjaF9i dWZmZXIsIGhpZ2hfYWRkcmVzcywgZGF0YSwgdHJ1ZSk7Cj4gKwlnZW1fd3JpdGUoZmQsIGJhdGNo X2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCj4gKwkvKiBzdWJtaXQgY29t bWFuZCBidWZmZXIgKi8KPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHNoYXJl ZF9idWZfaGFuZGxlLAo+ICsJCUVYRUNfT0JKRUNUX1BJTk5FRCB8IEVYRUNfT0JKRUNUX1NVUFBP UlRTXzQ4Ql9BRERSRVNTLCBoaWdoX2FkZHJlc3MpOwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNf b2JqZWN0MlsxXSwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgMCk7Cj4gKwo+ICsJcmluZyA9IEk5MTVf RVhFQ19SRU5ERVI7Cj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmpl Y3QyLCByaW5nLCBOVU1fRVhFQ19PQkpFQ1RTLCBsZW4pOwo+ICsJc3VibWl0X2FuZF9zeW5jKGZk LCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwlnZW1fdXNlcnB0cl9zeW5jKGZkLCBz aGFyZWRfYnVmX2hhbmRsZSk7Cj4gKwo+ICsJLyogY2hlY2sgb24gQ1BVIHRvIHNlZSBpZiB2YWx1 ZSBjaGFuZ2VzICovCj4gKwlpZ3RfZmFpbF9vbl9mKHNoYXJlZF9idWZmZXJbMF0gIT0gZGF0YSwK PiArCQkiXG5DUFUgcmVhZCBkb2VzIG5vdCBtYXRjaCBHUFUgd3JpdGUsIFwKPiArCQlleHBlY3Rl ZDogMHgleCwgZ290OiAweCV4XG4iLCBkYXRhLCBzaGFyZWRfYnVmZmVyWzBdKTsKPiArCj4gKwln ZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJY2xvc2UoZmQpOwo+ICsJZnJlZShz aGFyZWRfYnVmZmVyKTsKPiArfQo+ICsKPiArLyogZ2VtX3Bpbl9uZWFyXzQ4Qml0X3Rlc3QKPiAr ICogVGhpcyB0ZXN0IHdpbGwgY3JlYXRlIGEgc2hhcmVkIGJ1ZmZlciwKPiArICogYW5kIGNyZWF0 ZSBhIGNvbW1hbmQgZm9yIEdQVSB0byB3cml0ZSBkYXRhIGluIGl0LiBJdCB3aWxsIGF0dGVtcHQK PiArICogdG8gcGluIHRoZSBidWZmZXIgYXQgYWRkcmVzcyA+IDQ3IGJpdHMgPD0gNDgtYml0Lgo+ ICsgKiBDUFUgd2lsbCByZWFkIGFuZCBtYWtlIHN1cmUgZXhwZWN0ZWQgdmFsdWUgaXMgb2J0YWlu ZWQKPiArCj4gKyAqIE1hbGxvYyBhIDRLIGJ1ZmZlcgo+ICsgKiBTaGFyZSBidWZmZXIgd2l0aCB3 aXRoIEdQVSBieSB1c2luZyB1c2VycHRyIGlvY3RsCj4gKyAqIENyZWF0ZSBiYXRjaCBidWZmZXIg dG8gd3JpdGUgREFUQSB0byBmaXJzdCBkd29yZCBvZiBidWZmZXIKPiArICogVXNlIHZpcnR1YWwg YWRkcmVzcyBvZiBidWZmZXIgYXMgcmFuZ2UgYmV0d2VlbiA0Ny1iaXQgYW5kIDQ4LWJpdAo+ICsg KiBTZXQgRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcgaW4gZXhlYyBvYmplY3QKPiArICogU2V0ICdv ZmZzZXQnIGluIGV4ZWMgb2JqZWN0IHRvIHNoYXJlZCBidWZmZXIgVk1BCj4gKyAqIFN1Ym1pdCBl eGVjYnVmZmVyCj4gKyAqIFZlcmlmeSB2YWx1ZSBvZiBmaXJzdCBEV09SRCBpbiBzaGFyZWQgYnVm ZmVyIG1hdGNoZXMgREFUQQo+ICsqLwo+ICsjZGVmaW5lIEJFR0lOX0hJR0hfQUREUkVTUyAweDdG RkZGRkZGRjAwMAo+ICsjZGVmaW5lIEVORF9ISUdIX0FERFJFU1MgMHhGRkZGRkZGRkMwMDAKPiAr I2RlZmluZSBBRERSRVNTX0lOQ1JFTUVOVCAweDIwMDAwMDAwMDAKPiArc3RhdGljIHZvaWQgZ2Vt X3Bpbl9uZWFyXzQ4Qml0X3Rlc3Qodm9pZCkKPiArewo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1c2Vy cHRyOwo+ICsJaW50IGZkOwo+ICsJdWludDMyX3QqIHNoYXJlZF9idWZmZXIgPSBOVUxMOwo+ICsJ c3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ICsJc3RydWN0IGRybV9p OTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmplY3QyW05VTV9FWEVDX09CSkVDVFNdOwo+ICsJ dWludDMyX3QgYmF0Y2hfYnVmZmVyW0JPX1NJWkVdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmX2hh bmRsZSwgc2hhcmVkX2J1Zl9oYW5kbGU7Cj4gKwlpbnQgcmluZywgbGVuOwo+ICsJY29uc3QgdWlu dDMyX3QgZGF0YSA9IDB4MTIzNDU2Nzg7Cj4gKwl1aW50NjRfdCBoaWdoX2FkZHJlc3M7Cj4gKwo+ ICsJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCWlndF9yZXF1aXJlKHVz ZXNfZnVsbF9wcGd0dChmZCwgRlVMTF80OF9CSVRfUFBHVFQpKTsKPiArCj4gKwliYXRjaF9idWZf aGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0laRSk7Cj4gKwo+ICsJLyogY3JlYXRlIGNwdSBi dWZmZXIsIHNldCB0byBhbGwgMHhGJ3MgKi8KPiArCXNoYXJlZF9idWZmZXIgPSBjcmVhdGVfbWVt X2J1ZmZlcihCT19TSVpFKTsKPiArCSpzaGFyZWRfYnVmZmVyID0gMHhGRkZGRkZGRjsKPiArCj4g KwkvKiBzaGFyZSB3aXRoIEdQVSAqLwo+ICsJc2hhcmVkX2J1Zl9oYW5kbGUgPSBpbml0X3VzZXJw dHIoZmQsICZ1c2VycHRyLCBzaGFyZWRfYnVmZmVyLCBCT19TSVpFLCBmYWxzZSk7Cj4gKwo+ICsJ Zm9yIChoaWdoX2FkZHJlc3MgPSBCRUdJTl9ISUdIX0FERFJFU1M7IGhpZ2hfYWRkcmVzcyA8PSBF TkRfSElHSF9BRERSRVNTOwo+ICsJCQkJCQloaWdoX2FkZHJlc3MrPUFERFJFU1NfSU5DUkVNRU5U KXsKPiArCQkvKiBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kICovCj4g KwkJbGVuID0gZ2VtX3N0b3JlX2RhdGFfc3ZtKGZkLCBiYXRjaF9idWZmZXIsIGhpZ2hfYWRkcmVz cywKPiArCQkJCQlkYXRhLCB0cnVlKTsKPiArCQlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5k bGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCQkvKiBzdWJtaXQgY29tbWFuZCBidWZmZXIg Ki8KPiArCQlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRs ZSwKPiArCQkJCUVYRUNfT0JKRUNUX1BJTk5FRCB8IEVYRUNfT0JKRUNUX1NVUFBPUlRTXzQ4Ql9B RERSRVNTLAo+ICsJCQkJaGlnaF9hZGRyZXNzKTsKPiArCQlzZXR1cF9leGVjX29iaigmZXhlY19v YmplY3QyWzFdLCBiYXRjaF9idWZfaGFuZGxlLCAwLCAwKTsKPiArCj4gKwkJcmluZyA9IEk5MTVf RVhFQ19SRU5ERVI7Cj4gKwkJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3Qy LCByaW5nLCBOVU1fRVhFQ19PQkpFQ1RTLCBsZW4pOwo+ICsJCXN1Ym1pdF9hbmRfc3luYyhmZCwg JmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJCWdlbV91c2VycHRyX3N5bmMoZmQsIHNo YXJlZF9idWZfaGFuZGxlKTsKPiArCj4gKwkJLyogY2hlY2sgb24gQ1BVIHRvIHNlZSBpZiB2YWx1 ZSBjaGFuZ2VzICovCj4gKwkJaWd0X2ZhaWxfb25fZihzaGFyZWRfYnVmZmVyWzBdICE9IGRhdGEs Cj4gKwkJIlxuQ1BVIHJlYWQgZG9lcyBub3QgbWF0Y2ggR1BVIHdyaXRlLCBleHBlY3RlZDogMHgl eCwgXAo+ICsJCWdvdDogMHgleFxuLCAweCUiUFJJeDY0IiIsIGRhdGEsIHNoYXJlZF9idWZmZXJb MF0sIGhpZ2hfYWRkcmVzcyk7Cj4gKwl9Cj4gKwo+ICsJZ2VtX2Nsb3NlKGZkLCBiYXRjaF9idWZf aGFuZGxlKTsKPiArCWNsb3NlKGZkKTsKPiArCWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4gK30KPiAr Cj4gKwo+ICtpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQo+ICt7Cj4gKwlpZ3Rfc3Vi dGVzdF9pbml0KGFyZ2MsIGFyZ3YpOwo+ICsJaWd0X3NraXBfb25fc2ltdWxhdGlvbigpOwo+ICsK PiArCS8qIEFsbCB0ZXN0cyBuZWVkIFBQR1RUIHN1cHBvcnQgKi8KPiArCWlndF9zdWJ0ZXN0KCJn ZW1fYmFzaWMiKXsKPiArCQlnZW1fYmFzaWNfdGVzdCgpOwo+ICsJfQo+ICsJaWd0X3N1YnRlc3Qo ImdlbV9tdWx0aXBsZV9wcm9jZXNzIil7Cj4gKwkJZ2VtX211bHRpcGxlX3Byb2Nlc3NfdGVzdCgp Owo+ICsJfQo+ICsJaWd0X3N1YnRlc3QoImdlbV9yZXBpbiIpewo+ICsJCWdlbV9yZXBpbl90ZXN0 KCk7Cj4gKwl9Cj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX3Bpbl9vdmVybGFwIil7Cj4gKwkJZ2VtX3Bp bl9vdmVybGFwX3Rlc3QoKTsKPiArCX0KPiArCWlndF9zdWJ0ZXN0KCJnZW1fd3JpdGVfbXVsdGlw YWdlX2J1ZmZlciIpewo+ICsJCWdlbV93cml0ZV9tdWx0aXBhZ2VfYnVmZmVyX3Rlc3QoKTsKPiAr CX0KPiArCj4gKwkvKiBGb2xsb3dpbmcgdGVzdHMgbmVlZCA0OCBCaXQgUFBHVFQgc3VwcG9ydCAq Lwo+ICsJaWd0X3N1YnRlc3QoImdlbV9waW5faW52YWxpZF92bWEiKXsKPiArCQlnZW1fcGluX2lu dmFsaWRfdm1hX3Rlc3QoKTsKPiArCX0KPiArCWlndF9zdWJ0ZXN0KCJnZW1fc29mdHBpbl9zdHJl c3MiKXsKPiArCQlnZW1fc29mdHBpbl9zdHJlc3NfdGVzdCgpOwo+ICsJfQo+ICsJaWd0X3N1YnRl c3QoImdlbV9waW5faGlnaF9hZGRyZXNzIil7Cj4gKwkJZ2VtX3Bpbl9oaWdoX2FkZHJlc3NfdGVz dCgpOwo+ICsJfQo+ICsJaWd0X3N1YnRlc3QoImdlbV9waW5fbmVhcl80OEJpdCIpewo+ICsJCWdl bV9waW5fbmVhcl80OEJpdF90ZXN0KCk7Cj4gKwl9Cj4gKwo+ICsJaWd0X2V4aXQoKTsKPiArfQo+ CgpSZWdhcmRzLAoKVHZydGtvCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lu dGVsLWdmeAo=