From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kahola Subject: Re: [PATCH i-g-t v2] tests/kms_atomic: Convert/rewrite tests to use igt_kms framework, v2. Date: Fri, 20 Oct 2017 13:02:36 +0300 Message-ID: <1508493756.3274.148.camel@intel.com> References: <20171012115435.18880-15-maarten.lankhorst@linux.intel.com> <20171012153348.18154-1-maarten.lankhorst@linux.intel.com> Reply-To: mika.kahola@intel.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 161136EBF4 for ; Fri, 20 Oct 2017 10:00:30 +0000 (UTC) In-Reply-To: <20171012153348.18154-1-maarten.lankhorst@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: Maarten Lankhorst , intel-gfx@lists.freedesktop.org Cc: Daniel Stone List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCAyMDE3LTEwLTEyIGF0IDE3OjMzICswMjAwLCBNYWFydGVuIExhbmtob3JzdCB3cm90 ZToKPiBOb3cgdGhhdCB3ZSBjYW4gc2V0IGluZGl2aWR1YWwgcHJvcGVydGllcyB0aHJvdWdoIHRo ZSBpZ3Rfa21zIGFwaSwKPiB3ZSBubyBsb25nZXIgbmVlZCB0byBkdXBsaWNhdGUgZnVuY3Rpb25h bGl0eSBmcm9tIGlndF9rbXMuIFNldAo+IGludmFsaWQKPiBwcm9wZXJ0aWVzIGRpcmVjdGx5LCBh bmQgcmV3cml0ZSBrbXNfYXRvbWljLmMgdG8gdXNlIGlndF9kaXNwbGF5Lgo+IFRoaXMgd2lsbCBh bGxvdyB1cyB0byByZW1vdmUgYSBsb3Qgb2YgY29kZSBpbiBrbXNfYXRvbWljLmMsCj4gYW5kIGJl bmVmaXQgZnJvbSBob3cgaWd0X2ttcyBjYW4gc2V0IHVwIGEgdmFsaWQgY29uZmlndXJhdGlvbiwK PiBpbnN0ZWFkIG9mIGhhdmluZyB0byBpbmhlcml0IGl0IGZyb20gZmJjb24uCj4gCj4gQ2hhbmdl cyBzaW5jZSB2MToKPiAtIEZpeCB0ZXN0IGZhaWx1cmUgd2hlbiBhdG9taWNfaW52YWxpZF9wYXJh bXMgaXMgcnVuIHN0YW5kYWxvbmUuCj4gCj4gU2lnbmVkLW9mZi1ieTogTWFhcnRlbiBMYW5raG9y c3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4LmludGVsLmNvbT4KPiBDYzogRGFuaWVsIFN0b25l IDxkYW5pZWxzQGNvbGxhYm9yYS5jb20+Cj4gLS0tCj4gwqB0ZXN0cy9rbXNfYXRvbWljLmMgfCAx NjY4ICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAtLS0tLS0tLS0t LS0KPiDCoDEgZmlsZSBjaGFuZ2VkLCA1MTIgaW5zZXJ0aW9ucygrKSwgMTE1NiBkZWxldGlvbnMo LSkKPiAKPiBkaWZmIC0tZ2l0IGEvdGVzdHMva21zX2F0b21pYy5jIGIvdGVzdHMva21zX2F0b21p Yy5jCj4gaW5kZXggMDQyYTdjMjYzYWFiLi5lMGZjMzI0ZWFiNjEgMTAwNjQ0Cj4gLS0tIGEvdGVz dHMva21zX2F0b21pYy5jCj4gKysrIGIvdGVzdHMva21zX2F0b21pYy5jCj4gQEAgLTQ2LDEwICs0 Niw2IEBACj4gwqAjaW5jbHVkZSAiaWd0X2F1eC5oIgo+IMKgI2luY2x1ZGUgInN3X3N5bmMuaCIK PiDCoAo+IC0jaWZuZGVmIERSTV9DTElFTlRfQ0FQX0FUT01JQwo+IC0jZGVmaW5lIERSTV9DTElF TlRfQ0FQX0FUT01JQyAzCj4gLSNlbmRpZgo+IC0KPiDCoCNpZm5kZWYgRFJNX0NBUF9DVVJTT1Jf V0lEVEgKPiDCoCNkZWZpbmUgRFJNX0NBUF9DVVJTT1JfV0lEVEggMHg4Cj4gwqAjZW5kaWYKPiBA QCAtNTgsMjMgKzU0LDYgQEAKPiDCoCNkZWZpbmUgRFJNX0NBUF9DVVJTT1JfSEVJR0hUIDB4OQo+ IMKgI2VuZGlmCj4gwqAKPiAtI2lmbmRlZiBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZCj4gLSNk ZWZpbmUgRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSAweDAxMDAKPiAtI2RlZmluZSBEUk1fTU9E RV9BVE9NSUNfTk9OQkxPQ0sgMHgwMjAwCj4gLSNkZWZpbmUgRFJNX01PREVfQVRPTUlDX0FMTE9X X01PREVTRVQgMHgwNDAwCj4gLQo+IC1zdHJ1Y3QgZHJtX21vZGVfYXRvbWljIHsKPiAtCV9fdTMy IGZsYWdzOwo+IC0JX191MzIgY291bnRfb2JqczsKPiAtCV9fdTY0IG9ianNfcHRyOwo+IC0JX191 NjQgY291bnRfcHJvcHNfcHRyOwo+IC0JX191NjQgcHJvcHNfcHRyOwo+IC0JX191NjQgcHJvcF92 YWx1ZXNfcHRyOwo+IC0JX191NjQgcmVzZXJ2ZWQ7Cj4gLQlfX3U2NCB1c2VyX2RhdGE7Cj4gLX07 Cj4gLSNlbmRpZgo+IC0KPiDCoElHVF9URVNUX0RFU0NSSVBUSU9OKCJUZXN0IGF0b21pYyBtb2Rl c2V0dGluZyBBUEkiKTsKPiDCoAo+IMKgZW51bSBrbXNfYXRvbWljX2NoZWNrX3JlbGF4IHsKPiBA QCAtODMsMTI1OSArNjIsNjUyIEBAIGVudW0ga21zX2F0b21pY19jaGVja19yZWxheCB7Cj4gwqAJ UExBTkVfUkVMQVhfRkIgPSAoMSA8PCAxKQo+IMKgfTsKPiDCoAo+IC0vKioKPiAtICogS01TIHBs YW5lIHR5cGUgZW51bQo+IC0gKgo+IC0gKiBLTVMgcGxhbmUgdHlwZXMgYXJlIHJlcHJlc2VudGVk IGJ5IGVudW1zLCB3aGljaCBkbyBub3QgaGF2ZQo+IHN0YWJsZSBudW1lcmljCj4gLSAqIHZhbHVl cywgYnV0IG11c3QgYmUgbG9va2VkIHVwIGJ5IHRoZWlyIHN0cmluZyB2YWx1ZSBlYWNoIHRpbWUu Cj4gLSAqCj4gLSAqIFRvIG1ha2UgdGhlIGNvZGUgbW9yZSBzaW1wbGUsIHdlIGRlZmluZSBhIHBs YW5lX3R5cGUgZW51bSB3aGljaAo+IG1hcHMgdG8KPiAtICogZWFjaCBLTVMgZW51bSB2YWx1ZS4g VGhlc2UgdmFsdWVzIG11c3QgYmUgbG9va2VkIHVwIHRocm91Z2ggdGhlCj4gbWFwLCBhbmQKPiAt ICogY2Fubm90IGJlIHBhc3NlZCBkaXJlY3RseSB0byBLTVMgZnVuY3Rpb25zLgo+IC0gKi8KPiAt ZW51bSBwbGFuZV90eXBlIHsKPiAtCVBMQU5FX1RZUEVfUFJJTUFSWSA9IDAsCj4gLQlQTEFORV9U WVBFX09WRVJMQVksCj4gLQlQTEFORV9UWVBFX0NVUlNPUiwKPiAtCU5VTV9QTEFORV9UWVBFX1BS T1BTCj4gLX07Cj4gLQo+IC1zdGF0aWMgY29uc3QgY2hhciAqcGxhbmVfdHlwZV9wcm9wX25hbWVz W05VTV9QTEFORV9UWVBFX1BST1BTXSA9IHsKPiAtCSJQcmltYXJ5IiwKPiAtCSJPdmVybGF5IiwK PiAtCSJDdXJzb3IiCj4gLX07Cj4gLQo+IC1zdHJ1Y3Qga21zX2F0b21pY19ibG9iIHsKPiAtCXVp bnQzMl90IGlkOyAvKiAwIGlmIG5vdCBhbHJlYWR5IGFsbG9jYXRlZCAqLwo+IC0Jc2l6ZV90IGxl bjsKPiAtCXZvaWQgKmRhdGE7Cj4gLX07Cj4gLQo+IC1zdHJ1Y3Qga21zX2F0b21pY19jb25uZWN0 b3Jfc3RhdGUgewo+IC0Jc3RydWN0IGttc19hdG9taWNfc3RhdGUgKnN0YXRlOwo+IC0JdWludDMy X3Qgb2JqOwo+IC0JdWludDMyX3QgY3J0Y19pZDsKPiAtfTsKPiAtCj4gLXN0cnVjdCBrbXNfYXRv bWljX3BsYW5lX3N0YXRlIHsKPiAtCXN0cnVjdCBrbXNfYXRvbWljX3N0YXRlICpzdGF0ZTsKPiAt CXVpbnQzMl90IG9iajsKPiAtCWVudW0gcGxhbmVfdHlwZSB0eXBlOwo+IC0JdWludDMyX3QgY3J0 Y19tYXNrOwo+IC0JdWludDMyX3QgY3J0Y19pZDsgLyogMCB0byBkaXNhYmxlICovCj4gLQl1aW50 MzJfdCBmYl9pZDsgLyogMCB0byBkaXNhYmxlICovCj4gLQl1aW50MzJfdCBzcmNfeCwgc3JjX3ks IHNyY193LCBzcmNfaDsgLyogMTYuMTYgZml4ZWQtcG9pbnQgKi8KPiAtCXVpbnQzMl90IGNydGNf eCwgY3J0Y195LCBjcnRjX3csIGNydGNfaDsgLyogbm9ybWFsIGludGVnZXJzCj4gKi8KPiAtCWlu dDMyX3QgZmVuY2VfZmQ7Cj4gLX07Cj4gLQo+IC1zdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0YXRl IHsKPiAtCXN0cnVjdCBrbXNfYXRvbWljX3N0YXRlICpzdGF0ZTsKPiAtCXVpbnQzMl90IG9iajsK PiAtCWludCBpZHg7Cj4gLQlib29sIGFjdGl2ZTsKPiAtCWludDMyX3QgKm91dF9mZW5jZV9wdHI7 Cj4gLQlzdHJ1Y3Qga21zX2F0b21pY19ibG9iIG1vZGU7Cj4gLX07Cj4gLQo+IC1zdHJ1Y3Qga21z X2F0b21pY19zdGF0ZSB7Cj4gLQlzdHJ1Y3Qga21zX2F0b21pY19jb25uZWN0b3Jfc3RhdGUgKmNv bm5lY3RvcnM7Cj4gLQlpbnQgbnVtX2Nvbm5lY3RvcnM7Cj4gLQlzdHJ1Y3Qga21zX2F0b21pY19j cnRjX3N0YXRlICpjcnRjczsKPiAtCWludCBudW1fY3J0Y3M7Cj4gLQlzdHJ1Y3Qga21zX2F0b21p Y19wbGFuZV9zdGF0ZSAqcGxhbmVzOwo+IC0JaW50IG51bV9wbGFuZXM7Cj4gLQlzdHJ1Y3Qga21z X2F0b21pY19kZXNjICpkZXNjOwo+IC19Owo+IC0KPiAtc3RydWN0IGttc19hdG9taWNfZGVzYyB7 Cj4gLQlpbnQgZmQ7Cj4gLQl1aW50MzJfdCBwcm9wc19jb25uZWN0b3JbSUdUX05VTV9DT05ORUNU T1JfUFJPUFNdOwo+IC0JdWludDMyX3QgcHJvcHNfY3J0Y1tJR1RfTlVNX0NSVENfUFJPUFNdOwo+ IC0JdWludDMyX3QgcHJvcHNfcGxhbmVbSUdUX05VTV9QTEFORV9QUk9QU107Cj4gLQl1aW50NjRf dCBwcm9wc19wbGFuZV90eXBlW05VTV9QTEFORV9UWVBFX1BST1BTXTsKPiAtfTsKPiAtCj4gLXN0 YXRpYyB1aW50MzJfdCBibG9iX2R1cGxpY2F0ZShpbnQgZmQsIHVpbnQzMl90IGlkX29yaWcpCj4g K3N0YXRpYyBib29sIHBsYW5lX2ZpbHRlcihlbnVtIGlndF9hdG9taWNfcGxhbmVfcHJvcGVydGll cyBwcm9wKQo+IMKgewo+IC0JZHJtTW9kZVByb3BlcnR5QmxvYlB0ciBvcmlnID0gZHJtTW9kZUdl dFByb3BlcnR5QmxvYihmZCwKPiBpZF9vcmlnKTsKPiAtCXVpbnQzMl90IGlkX25ldzsKPiAtCj4g LQlpZ3RfYXNzZXJ0KG9yaWcpOwo+IC0JZG9fb3JfZGllKGRybU1vZGVDcmVhdGVQcm9wZXJ0eUJs b2IoZmQsIG9yaWctPmRhdGEsIG9yaWctCj4gPmxlbmd0aCwKPiAtCQkJCQnCoMKgwqDCoCZpZF9u ZXcpKTsKPiAtCWRybU1vZGVGcmVlUHJvcGVydHlCbG9iKG9yaWcpOwo+ICsJaWYgKCgxIDw8IHBy b3ApICYgSUdUX1BMQU5FX0NPT1JEX0NIQU5HRURfTUFTSykKPiArCQlyZXR1cm4gZmFsc2U7Cj4g wqAKPiAtCXJldHVybiBpZF9uZXc7Cj4gLX0KPiAtCj4gLSNkZWZpbmUgY3J0Y19zZXRfcHJvcChy ZXEsIGNydGMsIHByb3AsIHZhbHVlKSBcCj4gLQlpZ3RfYXNzZXJ0X2x0KDAsIGRybU1vZGVBdG9t aWNBZGRQcm9wZXJ0eShyZXEsIGNydGMtPm9iaiwgXAo+IC0JCQkJCQnCoMKgY3J0Yy0+c3RhdGUt PmRlc2MtCj4gPnByb3BzX2NydGNbcHJvcF0sIFwKPiAtCQkJCQkJwqDCoHZhbHVlKSk7Cj4gLQo+ IC0jZGVmaW5lIHBsYW5lX3NldF9wcm9wKHJlcSwgcGxhbmUsIHByb3AsIHZhbHVlKSBcCj4gLQlp Z3RfYXNzZXJ0X2x0KDAsIGRybU1vZGVBdG9taWNBZGRQcm9wZXJ0eShyZXEsIHBsYW5lLT5vYmos IFwKPiAtCQkJCQkJwqDCoHBsYW5lLT5zdGF0ZS0KPiA+ZGVzYy0+cHJvcHNfcGxhbmVbcHJvcF0s IFwKPiAtCQkJCQkJwqDCoHZhbHVlKSk7Cj4gLQo+IC0jZGVmaW5lIGRvX2F0b21pY19jb21taXQo ZmQsIHJlcSwgZmxhZ3MpIFwKPiAtCWRvX29yX2RpZShkcm1Nb2RlQXRvbWljQ29tbWl0KGZkLCBy ZXEsIGZsYWdzLCBOVUxMKSk7Cj4gKwlpZiAocHJvcCA9PSBJR1RfUExBTkVfQ1JUQ19JRCB8fCBw cm9wID09IElHVF9QTEFORV9GQl9JRCkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gwqAKPiAtI2RlZmlu ZSBkb19hdG9taWNfY29tbWl0X2VycihmZCwgcmVxLCBmbGFncywgZXJyKSB7IFwKPiAtCWlndF9h c3NlcnRfbmVxKGRybU1vZGVBdG9taWNDb21taXQoZmQsIHJlcSwgZmxhZ3MsIE5VTEwpLAo+IDAp OyBcCj4gLQlpZ3RfYXNzZXJ0X2VxKGVycm5vLCBlcnIpOyBcCj4gLX0KPiAtCj4gLSNkZWZpbmUg Y3J0Y19jb21taXRfYXRvbWljKGNydGMsIHBsYW5lLCByZXEsIHJlbGF4LCBmbGFncykgeyBcCj4g LQlkcm1Nb2RlQXRvbWljU2V0Q3Vyc29yKHJlcSwgMCk7IFwKPiAtCWNydGNfcG9wdWxhdGVfcmVx KGNydGMsIHJlcSk7IFwKPiAtCXBsYW5lX3BvcHVsYXRlX3JlcShwbGFuZSwgcmVxKTsgXAo+IC0J ZG9fYXRvbWljX2NvbW1pdCgoY3J0YyktPnN0YXRlLT5kZXNjLT5mZCwgcmVxLCBmbGFncyk7IFwK PiAtCWlmICghKGZsYWdzICYgRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSkpIHsgXAo+IC0JCWNy dGNfY2hlY2tfY3VycmVudF9zdGF0ZShjcnRjLCBwbGFuZSwgcmVsYXgpOyBcCj4gLQkJcGxhbmVf Y2hlY2tfY3VycmVudF9zdGF0ZShwbGFuZSwgcmVsYXgpOyBcCj4gLQl9IFwKPiAtfQo+ICsJaWYg KHByb3AgPT0gSUdUX1BMQU5FX0lOX0ZFTkNFX0ZEKQo+ICsJCXJldHVybiBmYWxzZTsKPiDCoAo+ IC0jZGVmaW5lIGNydGNfY29tbWl0X2F0b21pY19lcnIoY3J0YywgcGxhbmUsIGNydGNfb2xkLCBw bGFuZV9vbGQsCj4gcmVxLCBmbGFncywgcmVsYXgsIGUpIHsgXAo+IC0JZHJtTW9kZUF0b21pY1Nl dEN1cnNvcihyZXEsIDApOyBcCj4gLQljcnRjX3BvcHVsYXRlX3JlcShjcnRjLCByZXEpOyBcCj4g LQlwbGFuZV9wb3B1bGF0ZV9yZXEocGxhbmUsIHJlcSk7IFwKPiAtCWRvX2F0b21pY19jb21taXRf ZXJyKChjcnRjKS0+c3RhdGUtPmRlc2MtPmZkLCByZXEsIGZsYWdzLAo+IGUpOyBcCj4gLQljcnRj X2NoZWNrX2N1cnJlbnRfc3RhdGUoY3J0Y19vbGQsIHBsYW5lX29sZCwgcmVsYXgpOyBcCj4gLQlw bGFuZV9jaGVja19jdXJyZW50X3N0YXRlKHBsYW5lX29sZCwgcmVsYXgpOyBcCj4gKwkvKiBEb24n dCBjYXJlIGFib3V0IG90aGVyIHByb3BlcnRpZXMgKi8KPiArCXJldHVybiB0cnVlOwo+IMKgfQo+ IMKgCj4gLSNkZWZpbmUgcGxhbmVfY29tbWl0X2F0b21pYyhwbGFuZSwgcmVxLCByZWxheCkgeyBc Cj4gLQlkcm1Nb2RlQXRvbWljU2V0Q3Vyc29yKHJlcSwgMCk7IFwKPiAtCXBsYW5lX3BvcHVsYXRl X3JlcShwbGFuZSwgcmVxKTsgXAo+IC0JZG9fYXRvbWljX2NvbW1pdCgocGxhbmUpLT5zdGF0ZS0+ ZGVzYy0+ZmQsIHJlcSwgMCk7IFwKPiAtCXBsYW5lX2NoZWNrX2N1cnJlbnRfc3RhdGUocGxhbmUs IHJlbGF4KTsgXAo+IC19Cj4gLQo+IC0jZGVmaW5lIHBsYW5lX2NvbW1pdF9hdG9taWNfZXJyKHBs YW5lLCBwbGFuZV9vbGQsIHJlcSwgcmVsYXgsIGUpIHsgXAo+IC0JZHJtTW9kZUF0b21pY1NldEN1 cnNvcihyZXEsIDApOyBcCj4gLQlwbGFuZV9wb3B1bGF0ZV9yZXEocGxhbmUsIHJlcSk7IFwKPiAt CWRvX2F0b21pY19jb21taXRfZXJyKChwbGFuZSktPnN0YXRlLT5kZXNjLT5mZCwgcmVxLCAwLCBl KTsgXAo+IC0JcGxhbmVfY2hlY2tfY3VycmVudF9zdGF0ZShwbGFuZV9vbGQsIHJlbGF4KTsgXAo+ IC19Cj4gLQo+IC1zdGF0aWMgdm9pZAo+IC1jb25uZWN0b3JfZ2V0X2N1cnJlbnRfc3RhdGUoc3Ry dWN0IGttc19hdG9taWNfY29ubmVjdG9yX3N0YXRlCj4gKmNvbm5lY3RvcikKPiAtewo+IC0JZHJt TW9kZU9iamVjdFByb3BlcnRpZXNQdHIgcHJvcHM7Cj4gLQlpbnQgaTsKPiAtCj4gLQlwcm9wcyA9 IGRybU1vZGVPYmplY3RHZXRQcm9wZXJ0aWVzKGNvbm5lY3Rvci0+c3RhdGUtPmRlc2MtCj4gPmZk LAo+IC0JCQkJCcKgwqDCoGNvbm5lY3Rvci0+b2JqLAo+IC0JCQkJCcKgwqDCoERSTV9NT0RFX09C SkVDVF9DT05ORUNUT1IKPiApOwo+IC0JaWd0X2Fzc2VydChwcm9wcyk7Cj4gLQo+IC0JZm9yIChp ID0gMDsgaSA8IHByb3BzLT5jb3VudF9wcm9wczsgaSsrKSB7Cj4gLQkJdWludDMyX3QgKnByb3Bf aWRzID0gY29ubmVjdG9yLT5zdGF0ZS0+ZGVzYy0KPiA+cHJvcHNfY29ubmVjdG9yOwo+IC0KPiAt CQlpZiAocHJvcHMtPnByb3BzW2ldID09Cj4gcHJvcF9pZHNbSUdUX0NPTk5FQ1RPUl9DUlRDX0lE XSkKPiAtCQkJY29ubmVjdG9yLT5jcnRjX2lkID0gcHJvcHMtPnByb3BfdmFsdWVzW2ldOwo+IC0J fQo+IC0JZHJtTW9kZUZyZWVPYmplY3RQcm9wZXJ0aWVzKHByb3BzKTsKPiAtfQo+IC0KPiAtI2lm IDAKPiAtLyogWFhYOiBDaGVja2luZyB0aGlzIHJlcGVhdGVkbHkgYWN0dWFsbHkgaGFuZ3MgdGhl IEdQVS4gSSBoYXZlCj4gbGl0ZXJhbGx5IG5vCj4gLSAqwqDCoMKgwqDCoMKgaWRlYSB3aHkuICov Cj4gLXN0YXRpYyB2b2lkCj4gLWNvbm5lY3Rvcl9jaGVja19jdXJyZW50X3N0YXRlKHN0cnVjdCBr bXNfYXRvbWljX2Nvbm5lY3Rvcl9zdGF0ZQo+ICpjb25uZWN0b3IpCj4gLXsKPiAtCXN0cnVjdCBr bXNfYXRvbWljX2Nvbm5lY3Rvcl9zdGF0ZSBjb25uZWN0b3Jfa2VybmVsOwo+IC0JZHJtTW9kZUNv bm5lY3RvclB0ciBsZWdhY3k7Cj4gLQl1aW50MzJfdCBjcnRjX2lkOwo+IC0KPiAtCWxlZ2FjeSA9 IGRybU1vZGVHZXRDb25uZWN0b3JDdXJyZW50KGNvbm5lY3Rvci0+c3RhdGUtPmRlc2MtCj4gPmZk LAo+IC0JCQkJCcKgwqDCoMKgY29ubmVjdG9yLT5vYmopOwo+IC0JaWd0X2Fzc2VydChsZWdhY3kp Owo+IC0KPiAtCWlmIChsZWdhY3ktPmVuY29kZXJfaWQpIHsKPiAtCQlkcm1Nb2RlRW5jb2RlclB0 ciBsZWdhY3lfZW5jOwo+IC0KPiAtCQlsZWdhY3lfZW5jID0gZHJtTW9kZUdldEVuY29kZXIoY29u bmVjdG9yLT5zdGF0ZS0KPiA+ZGVzYy0+ZmQsCj4gLQkJCQkJwqDCoMKgwqDCoMKgwqBsZWdhY3kt PmVuY29kZXJfaWQpOwo+IC0JCWlndF9hc3NlcnQobGVnYWN5X2VuYyk7Cj4gLQo+IC0JCWNydGNf aWQgPSBsZWdhY3lfZW5jLT5jcnRjX2lkOwo+IC0JCWRybU1vZGVGcmVlRW5jb2RlcihsZWdhY3lf ZW5jKTsKPiAtCX0gZWxzZSB7Cj4gLQkJY3J0Y19pZCA9IDA7Cj4gLQl9Cj4gLQo+IC0JaWd0X2Fz c2VydF9lcV91MzIoY3J0Y19pZCwgY29ubmVjdG9yLT5jcnRjX2lkKTsKPiAtCj4gLQltZW1jcHko JmNvbm5lY3Rvcl9rZXJuZWwsIGNvbm5lY3RvciwKPiBzaXplb2YoY29ubmVjdG9yX2tlcm5lbCkp Owo+IC0JY29ubmVjdG9yX2dldF9jdXJyZW50X3N0YXRlKCZjb25uZWN0b3Jfa2VybmVsKTsKPiAt CWRvX29yX2RpZShtZW1jbXAoJmNvbm5lY3Rvcl9rZXJuZWwsIGNvbm5lY3RvciwKPiAtCQkJwqBz aXplb2YoY29ubmVjdG9yX2tlcm5lbCkpKTsKPiAtCj4gLQlkcm1Nb2RlRnJlZUNvbm5lY3Rvcihs ZWdhY3kpOwo+IC19Cj4gLSNlbmRpZgo+IC0KPiAtc3RhdGljIHN0cnVjdCBrbXNfYXRvbWljX2Nv bm5lY3Rvcl9zdGF0ZSAqCj4gLWZpbmRfY29ubmVjdG9yKHN0cnVjdCBrbXNfYXRvbWljX3N0YXRl ICpzdGF0ZSwKPiAtCcKgwqDCoMKgwqDCoMKgc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAq Y3J0YykKPiArc3RhdGljIHZvaWQgcGxhbmVfZ2V0X2N1cnJlbnRfc3RhdGUoaWd0X3BsYW5lX3Qg KnBsYW5lLCB1aW50NjRfdAo+ICp2YWx1ZXMpCj4gwqB7Cj4gwqAJaW50IGk7Cj4gwqAKPiAtCWZv ciAoaSA9IDA7IGkgPCBzdGF0ZS0+bnVtX2Nvbm5lY3RvcnM7IGkrKykgewo+IC0JCXN0cnVjdCBr bXNfYXRvbWljX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubmVjdG9yID0KPiAtCQkJJnN0YXRlLT5jb25u ZWN0b3JzW2ldOwo+IC0KPiAtCQlpZiAoIWNvbm5lY3Rvci0+b2JqKQo+ICsJZm9yIChpID0gMDsg aSA8IElHVF9OVU1fUExBTkVfUFJPUFM7IGkrKykgewo+ICsJCWlmIChwbGFuZV9maWx0ZXIoaSkp IHsKPiArCQkJdmFsdWVzW2ldID0gMDsKPiDCoAkJCWNvbnRpbnVlOwo+IC0JCWlmIChjcnRjICYm IGNvbm5lY3Rvci0+Y3J0Y19pZCAhPSBjcnRjLT5vYmopCj4gLQkJCWNvbnRpbnVlOwo+IC0KPiAt CQlyZXR1cm4gY29ubmVjdG9yOwo+IC0JfQo+IC0KPiAtCXJldHVybiBOVUxMOwo+IC19Cj4gLQo+ IC1zdGF0aWMgdm9pZCBwbGFuZV9wb3B1bGF0ZV9yZXEoc3RydWN0IGttc19hdG9taWNfcGxhbmVf c3RhdGUgKnBsYW5lLAo+IC0JCQnCoMKgwqDCoMKgwqDCoGRybU1vZGVBdG9taWNSZXEgKnJlcSkK PiAtewo+IC0JaWYgKHBsYW5lLT5mZW5jZV9mZCkKPiAtCQlwbGFuZV9zZXRfcHJvcChyZXEsIHBs YW5lLCBJR1RfUExBTkVfSU5fRkVOQ0VfRkQsCj4gcGxhbmUtPmZlbmNlX2ZkKTsKPiAtCj4gLQlw bGFuZV9zZXRfcHJvcChyZXEsIHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19JRCwgcGxhbmUtCj4gPmNy dGNfaWQpOwo+IC0JcGxhbmVfc2V0X3Byb3AocmVxLCBwbGFuZSwgSUdUX1BMQU5FX0ZCX0lELCBw bGFuZS0+ZmJfaWQpOwo+IC0JcGxhbmVfc2V0X3Byb3AocmVxLCBwbGFuZSwgSUdUX1BMQU5FX1NS Q19YLCBwbGFuZS0+c3JjX3gpOwo+IC0JcGxhbmVfc2V0X3Byb3AocmVxLCBwbGFuZSwgSUdUX1BM QU5FX1NSQ19ZLCBwbGFuZS0+c3JjX3kpOwo+IC0JcGxhbmVfc2V0X3Byb3AocmVxLCBwbGFuZSwg SUdUX1BMQU5FX1NSQ19XLCBwbGFuZS0+c3JjX3cpOwo+IC0JcGxhbmVfc2V0X3Byb3AocmVxLCBw bGFuZSwgSUdUX1BMQU5FX1NSQ19ILCBwbGFuZS0+c3JjX2gpOwo+IC0JcGxhbmVfc2V0X3Byb3Ao cmVxLCBwbGFuZSwgSUdUX1BMQU5FX0NSVENfWCwgcGxhbmUtPmNydGNfeCk7Cj4gLQlwbGFuZV9z ZXRfcHJvcChyZXEsIHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19ZLCBwbGFuZS0+Y3J0Y195KTsKPiAt CXBsYW5lX3NldF9wcm9wKHJlcSwgcGxhbmUsIElHVF9QTEFORV9DUlRDX1csIHBsYW5lLT5jcnRj X3cpOwo+IC0JcGxhbmVfc2V0X3Byb3AocmVxLCBwbGFuZSwgSUdUX1BMQU5FX0NSVENfSCwgcGxh bmUtPmNydGNfaCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHBsYW5lX2dldF9jdXJyZW50X3N0 YXRlKHN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlCj4gKnBsYW5lKQo+IC17Cj4gLQlzdHJ1 Y3Qga21zX2F0b21pY19kZXNjICpkZXNjID0gcGxhbmUtPnN0YXRlLT5kZXNjOwo+IC0JZHJtTW9k ZU9iamVjdFByb3BlcnRpZXNQdHIgcHJvcHM7Cj4gLQlpbnQgaTsKPiAtCj4gLQlwcm9wcyA9IGRy bU1vZGVPYmplY3RHZXRQcm9wZXJ0aWVzKGRlc2MtPmZkLCBwbGFuZS0+b2JqLAo+IC0JCQkJCcKg wqDCoERSTV9NT0RFX09CSkVDVF9QTEFORSk7Cj4gLQlpZ3RfYXNzZXJ0KHByb3BzKTsKPiAtCj4g LQlmb3IgKGkgPSAwOyBpIDwgcHJvcHMtPmNvdW50X3Byb3BzOyBpKyspIHsKPiAtCQl1aW50MzJf dCAqcHJvcF9pZHMgPSBkZXNjLT5wcm9wc19wbGFuZTsKPiAtCj4gLQkJaWYgKHByb3BzLT5wcm9w c1tpXSA9PSBwcm9wX2lkc1tJR1RfUExBTkVfQ1JUQ19JRF0pCj4gLQkJCXBsYW5lLT5jcnRjX2lk ID0gcHJvcHMtPnByb3BfdmFsdWVzW2ldOwo+IC0JCWVsc2UgaWYgKHByb3BzLT5wcm9wc1tpXSA9 PQo+IHByb3BfaWRzW0lHVF9QTEFORV9GQl9JRF0pCj4gLQkJCXBsYW5lLT5mYl9pZCA9IHByb3Bz LT5wcm9wX3ZhbHVlc1tpXTsKPiAtCQllbHNlIGlmIChwcm9wcy0+cHJvcHNbaV0gPT0KPiBwcm9w X2lkc1tJR1RfUExBTkVfQ1JUQ19YXSkKPiAtCQkJcGxhbmUtPmNydGNfeCA9IHByb3BzLT5wcm9w X3ZhbHVlc1tpXTsKPiAtCQllbHNlIGlmIChwcm9wcy0+cHJvcHNbaV0gPT0KPiBwcm9wX2lkc1tJ R1RfUExBTkVfQ1JUQ19ZXSkKPiAtCQkJcGxhbmUtPmNydGNfeSA9IHByb3BzLT5wcm9wX3ZhbHVl c1tpXTsKPiAtCQllbHNlIGlmIChwcm9wcy0+cHJvcHNbaV0gPT0KPiBwcm9wX2lkc1tJR1RfUExB TkVfQ1JUQ19XXSkKPiAtCQkJcGxhbmUtPmNydGNfdyA9IHByb3BzLT5wcm9wX3ZhbHVlc1tpXTsK PiAtCQllbHNlIGlmIChwcm9wcy0+cHJvcHNbaV0gPT0KPiBwcm9wX2lkc1tJR1RfUExBTkVfQ1JU Q19IXSkKPiAtCQkJcGxhbmUtPmNydGNfaCA9IHByb3BzLT5wcm9wX3ZhbHVlc1tpXTsKPiAtCQll bHNlIGlmIChwcm9wcy0+cHJvcHNbaV0gPT0KPiBwcm9wX2lkc1tJR1RfUExBTkVfU1JDX1hdKQo+ IC0JCQlwbGFuZS0+c3JjX3ggPSBwcm9wcy0+cHJvcF92YWx1ZXNbaV07Cj4gLQkJZWxzZSBpZiAo cHJvcHMtPnByb3BzW2ldID09Cj4gcHJvcF9pZHNbSUdUX1BMQU5FX1NSQ19ZXSkKPiAtCQkJcGxh bmUtPnNyY195ID0gcHJvcHMtPnByb3BfdmFsdWVzW2ldOwo+IC0JCWVsc2UgaWYgKHByb3BzLT5w cm9wc1tpXSA9PQo+IHByb3BfaWRzW0lHVF9QTEFORV9TUkNfV10pCj4gLQkJCXBsYW5lLT5zcmNf dyA9IHByb3BzLT5wcm9wX3ZhbHVlc1tpXTsKPiAtCQllbHNlIGlmIChwcm9wcy0+cHJvcHNbaV0g PT0KPiBwcm9wX2lkc1tJR1RfUExBTkVfU1JDX0hdKQo+IC0JCQlwbGFuZS0+c3JjX2ggPSBwcm9w cy0+cHJvcF92YWx1ZXNbaV07Cj4gLQkJZWxzZSBpZiAocHJvcHMtPnByb3BzW2ldID09Cj4gcHJv cF9pZHNbSUdUX1BMQU5FX1RZUEVdKSB7Cj4gLQkJCWludCBqOwo+IC0KPiAtCQkJZm9yIChqID0g MDsgaiA8IEFSUkFZX1NJWkUoZGVzYy0KPiA+cHJvcHNfcGxhbmVfdHlwZSk7IGorKykgewo+IC0J CQkJaWYgKHByb3BzLT5wcm9wX3ZhbHVlc1tpXSA9PSBkZXNjLQo+ID5wcm9wc19wbGFuZV90eXBl W2pdKSB7Cj4gLQkJCQkJcGxhbmUtPnR5cGUgPSBqOwo+IC0JCQkJCWJyZWFrOwo+IC0JCQkJfQo+ IC0JCQl9Cj4gwqAJCX0KPiAtCX0KPiDCoAo+IC0JZHJtTW9kZUZyZWVPYmplY3RQcm9wZXJ0aWVz KHByb3BzKTsKPiArCQl2YWx1ZXNbaV0gPSBpZ3RfcGxhbmVfZ2V0X3Byb3AocGxhbmUsIGkpOwo+ ICsJfQo+IMKgfQo+IMKgCj4gLXN0YXRpYyB2b2lkIHBsYW5lX2NoZWNrX2N1cnJlbnRfc3RhdGUo c3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUKPiAqcGxhbmUsCj4gK3N0YXRpYyB2b2lkIHBs YW5lX2NoZWNrX2N1cnJlbnRfc3RhdGUoaWd0X3BsYW5lX3QgKnBsYW5lLCBjb25zdAo+IHVpbnQ2 NF90ICp2YWx1ZXMsCj4gwqAJCQkJwqDCoMKgwqDCoMKgZW51bSBrbXNfYXRvbWljX2NoZWNrX3Jl bGF4Cj4gcmVsYXgpCj4gwqB7Cj4gwqAJZHJtTW9kZVBsYW5lUHRyIGxlZ2FjeTsKPiAtCXN0cnVj dCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlIHBsYW5lX2tlcm5lbDsKPiArCXVpbnQ2NF90IGN1cnJl bnRfdmFsdWVzW0lHVF9OVU1fUExBTkVfUFJPUFNdOwo+ICsJaW50IGk7Cj4gwqAKPiAtCWxlZ2Fj eSA9IGRybU1vZGVHZXRQbGFuZShwbGFuZS0+c3RhdGUtPmRlc2MtPmZkLCBwbGFuZS0KPiA+b2Jq KTsKPiArCWxlZ2FjeSA9IGRybU1vZGVHZXRQbGFuZShwbGFuZS0+cGlwZS0+ZGlzcGxheS0+ZHJt X2ZkLAo+IHBsYW5lLT5kcm1fcGxhbmUtPnBsYW5lX2lkKTsKPiDCoAlpZ3RfYXNzZXJ0KGxlZ2Fj eSk7Cj4gwqAKPiAtCWlndF9hc3NlcnRfZXFfdTMyKGxlZ2FjeS0+Y3J0Y19pZCwgcGxhbmUtPmNy dGNfaWQpOwo+ICsJaWd0X2Fzc2VydF9lcV91MzIobGVnYWN5LT5jcnRjX2lkLAo+IHZhbHVlc1tJ R1RfUExBTkVfQ1JUQ19JRF0pOwo+IMKgCj4gwqAJaWYgKCEocmVsYXggJiBQTEFORV9SRUxBWF9G QikpCj4gLQkJaWd0X2Fzc2VydF9lcV91MzIobGVnYWN5LT5mYl9pZCwgcGxhbmUtPmZiX2lkKTsK PiArCQlpZ3RfYXNzZXJ0X2VxX3UzMihsZWdhY3ktPmZiX2lkLAo+IHZhbHVlc1tJR1RfUExBTkVf RkJfSURdKTsKPiDCoAo+IC0JbWVtY3B5KCZwbGFuZV9rZXJuZWwsIHBsYW5lLCBzaXplb2YocGxh bmVfa2VybmVsKSk7Cj4gLQlwbGFuZV9nZXRfY3VycmVudF9zdGF0ZSgmcGxhbmVfa2VybmVsKTsK PiArCXBsYW5lX2dldF9jdXJyZW50X3N0YXRlKHBsYW5lLCBjdXJyZW50X3ZhbHVlcyk7Cj4gwqAK PiDCoAkvKiBMZWdhY3kgY3Vyc29yIGlvY3RscyBjcmVhdGUgdGhlaXIgb3duLCB1bmtub3dhYmxl LAo+IGludGVybmFsCj4gwqAJwqAqIGZyYW1lYnVmZmVyIHdoaWNoIHdlIGNhbid0IHJlYXNvbiBh Ym91dC4gKi8KPiDCoAlpZiAocmVsYXggJiBQTEFORV9SRUxBWF9GQikKPiAtCQlwbGFuZV9rZXJu ZWwuZmJfaWQgPSBwbGFuZS0+ZmJfaWQ7Cj4gLQlkb19vcl9kaWUobWVtY21wKCZwbGFuZV9rZXJu ZWwsIHBsYW5lLAo+IHNpemVvZihwbGFuZV9rZXJuZWwpKSk7Cj4gKwkJY3VycmVudF92YWx1ZXNb SUdUX1BMQU5FX0ZCX0lEXSA9Cj4gdmFsdWVzW0lHVF9QTEFORV9GQl9JRF07Cj4gKwo+ICsJZm9y IChpID0gMDsgaSA8IElHVF9OVU1fUExBTkVfUFJPUFM7IGkrKykKPiArCQlpZiAoIXBsYW5lX2Zp bHRlcihpKSkKPiArCQkJaWd0X2Fzc2VydF9lcV91NjQoY3VycmVudF92YWx1ZXNbaV0sCj4gdmFs dWVzW2ldKTsKPiDCoAo+IMKgCWRybU1vZGVGcmVlUGxhbmUobGVnYWN5KTsKPiDCoH0KPiDCoAo+ IC1zdGF0aWMgdm9pZCBwbGFuZV9jb21taXRfbGVnYWN5KHN0cnVjdCBrbXNfYXRvbWljX3BsYW5l X3N0YXRlCj4gKnBsYW5lLAo+ICtzdGF0aWMgdm9pZCBwbGFuZV9jb21taXQoaWd0X3BsYW5lX3Qg KnBsYW5lLCBlbnVtIGlndF9jb21taXRfc3R5bGUKPiBzLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVudW0ga21zX2F0 b21pY19jaGVja19yZWxheCByZWxheCkKPiDCoHsKPiAtCWRvX29yX2RpZShkcm1Nb2RlU2V0UGxh bmUocGxhbmUtPnN0YXRlLT5kZXNjLT5mZCwgcGxhbmUtCj4gPm9iaiwKPiAtCQkJCcKgwqBwbGFu ZS0+Y3J0Y19pZCwKPiAtCQkJCcKgwqBwbGFuZS0+ZmJfaWQsIDAsCj4gLQkJCQnCoMKgcGxhbmUt PmNydGNfeCwgcGxhbmUtPmNydGNfeSwKPiAtCQkJCcKgwqBwbGFuZS0+Y3J0Y193LCBwbGFuZS0+ Y3J0Y19oLAo+IC0JCQkJwqDCoHBsYW5lLT5zcmNfeCwgcGxhbmUtPnNyY195LAo+IC0JCQkJwqDC oHBsYW5lLT5zcmNfdywgcGxhbmUtPnNyY19oKSk7Cj4gLQlwbGFuZV9jaGVja19jdXJyZW50X3N0 YXRlKHBsYW5lLCByZWxheCk7Cj4gKwlpZ3RfZGlzcGxheV9jb21taXQyKHBsYW5lLT5waXBlLT5k aXNwbGF5LCBzKTsKPiArCXBsYW5lX2NoZWNrX2N1cnJlbnRfc3RhdGUocGxhbmUsIHBsYW5lLT52 YWx1ZXMsIHJlbGF4KTsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgc3RydWN0IGttc19hdG9taWNfcGxh bmVfc3RhdGUgKgo+IC1maW5kX3BsYW5lKHN0cnVjdCBrbXNfYXRvbWljX3N0YXRlICpzdGF0ZSwg ZW51bSBwbGFuZV90eXBlIHR5cGUsCj4gLQnCoMKgwqBzdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0 YXRlICpjcnRjKQo+ICtzdGF0aWMgdm9pZCBwbGFuZV9jb21taXRfYXRvbWljX2VycihpZ3RfcGxh bmVfdCAqcGxhbmUsCj4gKwkJCQnCoMKgwqDCoGVudW0ga21zX2F0b21pY19jaGVja19yZWxheAo+ IHJlbGF4LAo+ICsJCQkJwqDCoMKgwqBpbnQgZXJyKQo+IMKgewo+IC0Jc3RydWN0IGttc19hdG9t aWNfcGxhbmVfc3RhdGUgKnJldCA9IE5VTEw7Cj4gLQlpbnQgaTsKPiAtCj4gLQlmb3IgKGkgPSAw OyBpIDwgc3RhdGUtPm51bV9wbGFuZXM7IGkrKykgewo+IC0JCXN0cnVjdCBrbXNfYXRvbWljX3Bs YW5lX3N0YXRlICpwbGFuZSA9ICZzdGF0ZS0KPiA+cGxhbmVzW2ldOwo+IC0KPiAtCQlpZiAoIXBs YW5lLT5vYmopCj4gLQkJCWNvbnRpbnVlOwo+IC0JCWlmICh0eXBlICE9IE5VTV9QTEFORV9UWVBF X1BST1BTICYmIHBsYW5lLT50eXBlICE9Cj4gdHlwZSkKPiAtCQkJY29udGludWU7Cj4gLQkJaWYg KGNydGMgJiYgIShwbGFuZS0+Y3J0Y19tYXNrICYgKDEgPDwgY3J0Yy0+aWR4KSkpCj4gLQkJCWNv bnRpbnVlOwo+ICsJdWludDY0X3QgY3VycmVudF92YWx1ZXNbSUdUX05VTV9QTEFORV9QUk9QU107 Cj4gwqAKPiAtCQlwbGFuZV9nZXRfY3VycmVudF9zdGF0ZShwbGFuZSk7Cj4gKwlwbGFuZV9nZXRf Y3VycmVudF9zdGF0ZShwbGFuZSwgY3VycmVudF92YWx1ZXMpOwo+IMKgCj4gLQkJLyogVHJ5IHRv IGZpbmQgYSBwbGFuZSB0aGF0J3MgYWxyZWFkeSBvbiB0aGlzIENSVEMuCj4gSW4KPiAtCQnCoCog cGFydGljdWxhciwgdGhpcyBlbnN1cmVzIHRoYXQgZm9yIHNwZWNpYWwKPiAocHJpbWFyeS9jdXJz b3IpCj4gLQkJwqAqIHBsYW5lcyB0aGF0IGNhbiBiZSBvbiBtdWx0aXBsZSBDUlRDcywgd2UgZmlu ZCB0aGUKPiBzYW1lCj4gLQkJwqAqIG9uZSB0aGF0IHRoZSBsZWdhY3kgaW9jdGxzIHdpbGwuICov Cj4gLQkJaWYgKCFjcnRjIHx8IHBsYW5lLT5jcnRjX2lkID09IGNydGMtPm9iaikKPiAtCQkJcmV0 dXJuIHBsYW5lOwo+IC0KPiAtCQlyZXQgPSBwbGFuZTsKPiAtCX0KPiArCWlndF9hc3NlcnRfZXEo LWVyciwgaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIocGxhbmUtPnBpcGUtCj4gPmRpc3BsYXksIENP TU1JVF9BVE9NSUMpKTsKPiDCoAo+IC0JcmV0dXJuIHJldDsKPiArCXBsYW5lX2NoZWNrX2N1cnJl bnRfc3RhdGUocGxhbmUsIGN1cnJlbnRfdmFsdWVzLCByZWxheCk7Cj4gwqB9Cj4gwqAKPiAtc3Rh dGljIHZvaWQgY3J0Y19wb3B1bGF0ZV9yZXEoc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAq Y3J0YywKPiAtCQkJwqDCoMKgwqDCoMKgZHJtTW9kZUF0b21pY1JlcSAqcmVxKQo+ICtzdGF0aWMg Ym9vbCBjcnRjX2ZpbHRlcihlbnVtIGlndF9hdG9taWNfY3J0Y19wcm9wZXJ0aWVzIHByb3ApCj4g wqB7Cj4gLQlpZiAoY3J0Yy0+b3V0X2ZlbmNlX3B0cikKPiAtCQljcnRjX3NldF9wcm9wKHJlcSwg Y3J0YywgSUdUX0NSVENfT1VUX0ZFTkNFX1BUUiwKPiAtCQkJwqDCoMKgwqDCoMKgdG9fdXNlcl9w b2ludGVyKGNydGMtPm91dF9mZW5jZV9wdHIpKTsKPiArCWlmIChwcm9wID09IElHVF9DUlRDX01P REVfSUQgfHwgcHJvcCA9PSBJR1RfQ1JUQ19BQ1RJVkUpCj4gKwkJcmV0dXJuIGZhbHNlOwo+IMKg Cj4gLQljcnRjX3NldF9wcm9wKHJlcSwgY3J0YywgSUdUX0NSVENfTU9ERV9JRCwgY3J0Yy0+bW9k ZS5pZCk7Cj4gLQljcnRjX3NldF9wcm9wKHJlcSwgY3J0YywgSUdUX0NSVENfQUNUSVZFLCBjcnRj LT5hY3RpdmUpOwo+ICsJcmV0dXJuIHRydWU7Cj4gwqB9Cj4gwqAKPiAtc3RhdGljIHZvaWQgY3J0 Y19nZXRfY3VycmVudF9zdGF0ZShzdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlCj4gKmNydGMp Cj4gK3N0YXRpYyB2b2lkIGNydGNfZ2V0X2N1cnJlbnRfc3RhdGUoaWd0X3BpcGVfdCAqcGlwZSwg dWludDY0X3QKPiAqdmFsdWVzKQo+IMKgewo+IC0JZHJtTW9kZU9iamVjdFByb3BlcnRpZXNQdHIg cHJvcHM7Cj4gwqAJaW50IGk7Cj4gwqAKPiAtCXByb3BzID0gZHJtTW9kZU9iamVjdEdldFByb3Bl cnRpZXMoY3J0Yy0+c3RhdGUtPmRlc2MtPmZkLAo+IGNydGMtPm9iaiwKPiAtCQkJCQnCoMKgwqBE Uk1fTU9ERV9PQkpFQ1RfQ1JUQyk7Cj4gLQlpZ3RfYXNzZXJ0KHByb3BzKTsKPiAtCj4gLQlmb3Ig KGkgPSAwOyBpIDwgcHJvcHMtPmNvdW50X3Byb3BzOyBpKyspIHsKPiAtCQl1aW50MzJfdCAqcHJv cF9pZHMgPSBjcnRjLT5zdGF0ZS0+ZGVzYy0+cHJvcHNfY3J0YzsKPiAtCj4gLQkJaWYgKHByb3Bz LT5wcm9wc1tpXSA9PSBwcm9wX2lkc1tJR1RfQ1JUQ19NT0RFX0lEXSkgewo+IC0JCQlkcm1Nb2Rl UHJvcGVydHlCbG9iUHRyIGJsb2I7Cj4gLQo+IC0JCQljcnRjLT5tb2RlLmlkID0gcHJvcHMtPnBy b3BfdmFsdWVzW2ldOwo+IC0JCQlpZiAoIWNydGMtPm1vZGUuaWQpIHsKPiAtCQkJCWNydGMtPm1v ZGUubGVuID0gMDsKPiAtCQkJCWNvbnRpbnVlOwo+IC0JCQl9Cj4gLQo+IC0JCQlibG9iID0gZHJt TW9kZUdldFByb3BlcnR5QmxvYihjcnRjLT5zdGF0ZS0KPiA+ZGVzYy0+ZmQsCj4gLQkJCQkJCcKg wqDCoMKgwqDCoGNydGMtCj4gPm1vZGUuaWQpOwo+IC0JCQlpZ3RfYXNzZXJ0KGJsb2IpOwo+IC0J CQlpZ3RfYXNzZXJ0X2VxX3UzMihibG9iLT5sZW5ndGgsCj4gLQkJCQkJwqDCoHNpemVvZihzdHJ1 Y3QKPiBkcm1fbW9kZV9tb2RlaW5mbykpOwo+IC0KPiAtCQkJaWYgKCFjcnRjLT5tb2RlLmRhdGEg fHwKPiAtCQkJwqDCoMKgwqBtZW1jbXAoY3J0Yy0+bW9kZS5kYXRhLCBibG9iLT5kYXRhLAo+IGJs b2ItPmxlbmd0aCkgIT0gMCkKPiAtCQkJCWNydGMtPm1vZGUuZGF0YSA9IGJsb2ItPmRhdGE7Cj4g LQkJCWNydGMtPm1vZGUubGVuID0gYmxvYi0+bGVuZ3RoOwo+IC0JCX0KPiAtCQllbHNlIGlmIChw cm9wcy0+cHJvcHNbaV0gPT0KPiBwcm9wX2lkc1tJR1RfQ1JUQ19BQ1RJVkVdKSB7Cj4gLQkJCWNy dGMtPmFjdGl2ZSA9IHByb3BzLT5wcm9wX3ZhbHVlc1tpXTsKPiArCWZvciAoaSA9IDA7IGkgPCBJ R1RfTlVNX0NSVENfUFJPUFM7IGkrKykgewo+ICsJCWlmIChjcnRjX2ZpbHRlcihpKSkgewo+ICsJ CQl2YWx1ZXNbaV0gPSAwOwo+ICsJCQljb250aW51ZTsKPiDCoAkJfQo+IC0JfQo+IMKgCj4gLQlk cm1Nb2RlRnJlZU9iamVjdFByb3BlcnRpZXMocHJvcHMpOwo+ICsJCXZhbHVlc1tpXSA9IGlndF9w aXBlX29ial9nZXRfcHJvcChwaXBlLCBpKTsKPiArCX0KPiDCoH0KPiDCoAo+IC1zdGF0aWMgdm9p ZCBjcnRjX2NoZWNrX2N1cnJlbnRfc3RhdGUoc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZQo+ ICpjcnRjLAo+IC0JCQkJwqDCoMKgwqDCoHN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlCj4g KnByaW1hcnksCj4gK3N0YXRpYyB2b2lkIGNydGNfY2hlY2tfY3VycmVudF9zdGF0ZShpZ3RfcGlw ZV90ICpwaXBlLAo+ICsJCQkJwqDCoMKgwqDCoGNvbnN0IHVpbnQ2NF90ICpwaXBlX3ZhbHVlcywK PiArCQkJCcKgwqDCoMKgwqBjb25zdCB1aW50NjRfdCAqcHJpbWFyeV92YWx1ZXMsCj4gwqAJCQkJ wqDCoMKgwqDCoGVudW0ga21zX2F0b21pY19jaGVja19yZWxheAo+IHJlbGF4KQo+IMKgewo+IC0J c3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSBjcnRjX2tlcm5lbDsKPiArCXVpbnQ2NF90IGN1 cnJlbnRfcGlwZV92YWx1ZXNbSUdUX05VTV9DUlRDX1BST1BTXTsKPiDCoAlkcm1Nb2RlQ3J0Y1B0 ciBsZWdhY3k7Cj4gKwlkcm1Nb2RlUHJvcGVydHlCbG9iUmVzICptb2RlX3Byb3AgPSBOVUxMOwo+ ICsJc3RydWN0IGRybV9tb2RlX21vZGVpbmZvICptb2RlID0gTlVMTDsKPiDCoAo+IC0JbGVnYWN5 ID0gZHJtTW9kZUdldENydGMoY3J0Yy0+c3RhdGUtPmRlc2MtPmZkLCBjcnRjLT5vYmopOwo+IC0J aWd0X2Fzc2VydChsZWdhY3kpOwo+IC0KPiAtCWlndF9hc3NlcnRfZXFfdTMyKGxlZ2FjeS0+Y3J0 Y19pZCwgY3J0Yy0+b2JqKTsKPiAtCWlndF9hc3NlcnRfZXFfdTMyKGxlZ2FjeS0+eCwgcHJpbWFy eS0+c3JjX3ggPj4gMTYpOwo+IC0JaWd0X2Fzc2VydF9lcV91MzIobGVnYWN5LT55LCBwcmltYXJ5 LT5zcmNfeSA+PiAxNik7Cj4gLQo+IC0JaWYgKGNydGMtPmFjdGl2ZSkKPiAtCQlpZ3RfYXNzZXJ0 X2VxX3UzMihsZWdhY3ktPmJ1ZmZlcl9pZCwgcHJpbWFyeS0KPiA+ZmJfaWQpOwo+IC0JZWxzZQo+ IC0JCWlndF9hc3NlcnRfZXFfdTMyKGxlZ2FjeS0+YnVmZmVyX2lkLCAwKTsKPiArCWlmIChwaXBl X3ZhbHVlc1tJR1RfQ1JUQ19NT0RFX0lEXSkgewo+ICsJCW1vZGVfcHJvcCA9IGRybU1vZGVHZXRQ cm9wZXJ0eUJsb2IocGlwZS0+ZGlzcGxheS0KPiA+ZHJtX2ZkLAo+ICsJCQkJCQnCoMKgwqBwaXBl X3ZhbHVlc1tJR1RfQwo+IFJUQ19NT0RFX0lEXSk7Cj4gwqAKPiAtCWlmIChsZWdhY3ktPm1vZGVf dmFsaWQpIHsKPiAtCQlpZ3RfYXNzZXJ0X25lcShsZWdhY3ktPm1vZGVfdmFsaWQsIDApOwo+IC0J CWlndF9hc3NlcnRfZXEoY3J0Yy0+bW9kZS5sZW4sCj4gLQkJwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHNpemVvZihzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8pKTsKPiAtCQlkb19vcl9kaWUo bWVtY21wKCZsZWdhY3ktPm1vZGUsIGNydGMtPm1vZGUuZGF0YSwKPiAtCQnCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgY3J0Yy0+bW9kZS5sZW4pKTsKPiAtCQlpZ3RfYXNzZXJ0X2Vx KGxlZ2FjeS0+d2lkdGgsIGxlZ2FjeS0+bW9kZS5oZGlzcGxheSk7Cj4gLQkJaWd0X2Fzc2VydF9l cShsZWdhY3ktPmhlaWdodCwgbGVnYWN5LQo+ID5tb2RlLnZkaXNwbGF5KTsKPiAtCX0gZWxzZSB7 Cj4gLQkJaWd0X2Fzc2VydF9lcShsZWdhY3ktPm1vZGVfdmFsaWQsIDApOwo+IC0JfQo+ICsJCWln dF9hc3NlcnQobW9kZV9wcm9wKTsKPiDCoAo+IC0JbWVtY3B5KCZjcnRjX2tlcm5lbCwgY3J0Yywg c2l6ZW9mKGNydGNfa2VybmVsKSk7Cj4gLQljcnRjX2dldF9jdXJyZW50X3N0YXRlKCZjcnRjX2tl cm5lbCk7Cj4gLQo+IC0JaWYgKGNydGNfa2VybmVsLm1vZGUuaWQgIT0gMCkKPiAtCQlpZ3RfYXNz ZXJ0X2VxKGNydGNfa2VybmVsLm1vZGUubGVuLAo+ICsJCWlndF9hc3NlcnRfZXEobW9kZV9wcm9w LT5sZW5ndGgsCj4gwqAJCcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzaXplb2Yoc3RydWN0 IGRybV9tb2RlX21vZGVpbmZvKSk7Cj4gLQo+IC0JLyogT3B0aW9uYWxseSByZWxheCB0aGUgY2hl Y2sgZm9yIE1PREVfSUQ6IHVzaW5nIHRoZSBsZWdhY3kKPiBTZXRDcnRjCj4gLQnCoCogQVBJIGNh biBwb3RlbnRpYWxseSBjaGFuZ2UgTU9ERV9JRCBldmVuIGlmIHRoZSBtb2RlCj4gaXRzZWxmIHJl bWFpbnMKPiAtCcKgKiB1bmNoYW5nZWQuICovCj4gLQlpZiAoKChyZWxheCAmIENSVENfUkVMQVhf TU9ERSkgJiYKPiAtCcKgwqDCoMKgKGNydGNfa2VybmVsLm1vZGUuaWQgIT0gY3J0Yy0+bW9kZS5p ZCAmJgo+IC0JwqDCoMKgwqDCoGNydGNfa2VybmVsLm1vZGUuaWQgIT0gMCAmJiBjcnRjLT5tb2Rl LmlkICE9IDApKSAmJgo+IC0JwqDCoMKgwqBtZW1jbXAoY3J0Y19rZXJuZWwubW9kZS5kYXRhLCBj cnRjLT5tb2RlLmRhdGEsCj4gLQkJwqDCoMKgc2l6ZW9mKHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5m bykpID09IDApIHsKPiAtCQljcnRjX2tlcm5lbC5tb2RlLmlkID0gY3J0Yy0+bW9kZS5pZDsKPiAt CQljcnRjX2tlcm5lbC5tb2RlLmRhdGEgPSBjcnRjLT5tb2RlLmRhdGE7Cj4gLQl9Cj4gLQo+IC0J ZG9fb3JfZGllKG1lbWNtcCgmY3J0Y19rZXJuZWwsIGNydGMsIHNpemVvZihjcnRjX2tlcm5lbCkp KTsKPiAtCj4gLQlkcm1Nb2RlRnJlZUNydGMobGVnYWN5KTsKPiAtfQo+IC0KPiAtc3RhdGljIHZv aWQgY3J0Y19jb21taXRfbGVnYWN5KHN0cnVjdCBrbXNfYXRvbWljX2NydGNfc3RhdGUgKmNydGMs Cj4gLQkJCcKgwqDCoMKgwqDCoMKgc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgKnBsYW5l LAo+IC0JCQnCoMKgwqDCoMKgwqDCoGVudW0ga21zX2F0b21pY19jaGVja19yZWxheCByZWxheCkK PiAtewo+IC0JZHJtTW9kZU9iamVjdFByb3BlcnRpZXNQdHIgcHJvcHM7Cj4gLQl1aW50MzJfdCAq Y29ubmVjdG9yczsKPiAtCWludCBudW1fY29ubmVjdG9ycyA9IDA7Cj4gLQlpbnQgaTsKPiAtCj4g LQlpZiAoIWNydGMtPmFjdGl2ZSkgewo+IC0JCWRvX29yX2RpZShkcm1Nb2RlU2V0Q3J0YyhjcnRj LT5zdGF0ZS0+ZGVzYy0+ZmQsCj4gLQkJCQkJwqBjcnRjLT5vYmosIDAsIDAsIDAsIE5VTEwsCj4g MCwgTlVMTCkpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gLQljb25uZWN0b3JzID0gY2FsbG9j KGNydGMtPnN0YXRlLT5udW1fY29ubmVjdG9ycywKPiAtCQkJwqDCoMKgwqBzaXplb2YoKmNvbm5l Y3RvcnMpKTsKPiAtCWlndF9hc3NlcnQoY29ubmVjdG9ycyk7Cj4gLQo+IC0JaWd0X2Fzc2VydF9u ZXFfdTMyKGNydGMtPm1vZGUuaWQsIDApOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBjcnRjLT5z dGF0ZS0+bnVtX2Nvbm5lY3RvcnM7IGkrKykgewo+IC0JCXN0cnVjdCBrbXNfYXRvbWljX2Nvbm5l Y3Rvcl9zdGF0ZSAqY29ubmVjdG9yID0KPiAtCQkJJmNydGMtPnN0YXRlLT5jb25uZWN0b3JzW2ld Owo+IC0KPiAtCQlpZiAoY29ubmVjdG9yLT5jcnRjX2lkICE9IGNydGMtPm9iaikKPiAtCQkJY29u dGludWU7Cj4gLQo+IC0JCWNvbm5lY3RvcnNbbnVtX2Nvbm5lY3RvcnMrK10gPSBjb25uZWN0b3It Pm9iajsKPiArCQltb2RlID0gbW9kZV9wcm9wLT5kYXRhOwo+IMKgCX0KPiDCoAo+IC0JZG9fb3Jf ZGllKGRybU1vZGVTZXRDcnRjKGNydGMtPnN0YXRlLT5kZXNjLT5mZCwgY3J0Yy0+b2JqLAo+IC0J wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwbGFuZS0+ ZmJfaWQsCj4gLQkJCQnCoHBsYW5lLT5zcmNfeCA+PiAxNiwgcGxhbmUtPnNyY195ID4+Cj4gMTYs Cj4gLQkJCQnCoChudW1fY29ubmVjdG9ycykgPyBjb25uZWN0b3JzIDoKPiBOVUxMLAo+IC0JCQkJ wqBudW1fY29ubmVjdG9ycywKPiAtCQkJCcKgY3J0Yy0+bW9kZS5kYXRhKSk7Cj4gLQkvKiBXaGVu IGRvaW5nIGEgbGVnYWN5IGNvbW1pdCwgdGhlIGNvcmUgbWF5IHVwZGF0ZSBNT0RFX0lECj4gdG8g YmUgYSBuZXcKPiAtCcKgKiBibG9iIGltcGxpY2l0bHkgY3JlYXRlZCBieSB0aGUgbGVnYWN5IHJl cXVlc3QuIEhlbmNlIHdlCj4gYmFja2ZpbGwKPiAtCcKgKiB0aGUgdmFsdWUgaW4gdGhlIHN0YXRl IG9iamVjdCB0byBlbnN1cmUgdGhleSBtYXRjaC4gKi8KPiAtCXByb3BzID0gZHJtTW9kZU9iamVj dEdldFByb3BlcnRpZXMoY3J0Yy0+c3RhdGUtPmRlc2MtPmZkLAo+IGNydGMtPm9iaiwKPiAtCQkJ CQnCoMKgwqBEUk1fTU9ERV9PQkpFQ1RfQ1JUQyk7Cj4gLQlpZ3RfYXNzZXJ0KHByb3BzKTsKPiAt Cj4gLQlmb3IgKGkgPSAwOyBpIDwgcHJvcHMtPmNvdW50X3Byb3BzOyBpKyspIHsKPiAtCQlpZiAo cHJvcHMtPnByb3BzW2ldICE9Cj4gLQkJwqDCoMKgwqBjcnRjLT5zdGF0ZS0+ZGVzYy0+cHJvcHNf Y3J0Y1tJR1RfQ1JUQ19NT0RFX0lEXSkKPiAtCQkJY29udGludWU7Cj4gLQkJY3J0Yy0+bW9kZS5p ZCA9IHByb3BzLT5wcm9wX3ZhbHVlc1tpXTsKPiAtCQlicmVhazsKPiAtCX0KPiArCWxlZ2FjeSA9 IGRybU1vZGVHZXRDcnRjKHBpcGUtPmRpc3BsYXktPmRybV9mZCwgcGlwZS0KPiA+Y3J0Y19pZCk7 Cj4gKwlpZ3RfYXNzZXJ0KGxlZ2FjeSk7Cj4gwqAKPiAtCWRybU1vZGVGcmVlT2JqZWN0UHJvcGVy dGllcyhwcm9wcyk7Cj4gKwlpZ3RfYXNzZXJ0X2VxX3UzMihsZWdhY3ktPmNydGNfaWQsIHBpcGUt PmNydGNfaWQpOwo+ICsJaWd0X2Fzc2VydF9lcV91MzIobGVnYWN5LT54LCBwcmltYXJ5X3ZhbHVl c1tJR1RfUExBTkVfU1JDX1hdCj4gPj4gMTYpOwo+ICsJaWd0X2Fzc2VydF9lcV91MzIobGVnYWN5 LT55LCBwcmltYXJ5X3ZhbHVlc1tJR1RfUExBTkVfU1JDX1ldCj4gPj4gMTYpOwo+IMKgCj4gLQlj cnRjX2NoZWNrX2N1cnJlbnRfc3RhdGUoY3J0YywgcGxhbmUsIHJlbGF4KTsKPiAtCXBsYW5lX2No ZWNrX2N1cnJlbnRfc3RhdGUocGxhbmUsIHJlbGF4KTsKPiAtfQo+ICsJaWd0X2Fzc2VydF9lcV91 MzIobGVnYWN5LT5idWZmZXJfaWQsCj4gcHJpbWFyeV92YWx1ZXNbSUdUX1BMQU5FX0ZCX0lEXSk7 Cj4gwqAKPiAtc3RhdGljIHN0cnVjdCBrbXNfYXRvbWljX2NydGNfc3RhdGUgKmZpbmRfY3J0Yyhz dHJ1Y3QKPiBrbXNfYXRvbWljX3N0YXRlICpzdGF0ZSwKPiAtCQkJCQnCoMKgwqDCoMKgwqDCoGJv b2wgbXVzdF9iZV9lbmFibGVkKQo+IC17Cj4gLQlpbnQgaTsKPiArCWlmIChsZWdhY3ktPm1vZGVf dmFsaWQpIHsKPiArCQlpZ3RfYXNzZXJ0KG1vZGVfcHJvcCk7Cj4gwqAKPiAtCWZvciAoaSA9IDA7 IGkgPCBzdGF0ZS0+bnVtX2NydGNzOyBpKyspIHsKPiAtCQlzdHJ1Y3Qga21zX2F0b21pY19jcnRj X3N0YXRlICpjcnRjID0gJnN0YXRlLQo+ID5jcnRjc1tpXTsKPiArCQlkb19vcl9kaWUobWVtY21w KCZsZWdhY3ktPm1vZGUsIG1vZGUsCj4gc2l6ZW9mKCptb2RlKSkpOwo+IMKgCj4gLQkJaWYgKCFj cnRjLT5vYmopCj4gLQkJCWNvbnRpbnVlOwo+IC0JCWlmIChtdXN0X2JlX2VuYWJsZWQgJiYgIWNy dGMtPmFjdGl2ZSkKPiAtCQkJY29udGludWU7Cj4gKwkJaWd0X2Fzc2VydF9lcShsZWdhY3ktPndp ZHRoLCBsZWdhY3ktPm1vZGUuaGRpc3BsYXkpOwo+ICsJCWlndF9hc3NlcnRfZXEobGVnYWN5LT5o ZWlnaHQsIGxlZ2FjeS0KPiA+bW9kZS52ZGlzcGxheSk7Cj4gwqAKPiAtCQljcnRjX2dldF9jdXJy ZW50X3N0YXRlKGNydGMpOwo+IC0JCXJldHVybiBjcnRjOwo+ICsJCWlndF9hc3NlcnRfbmVxKHBp cGVfdmFsdWVzW0lHVF9DUlRDX01PREVfSURdLCAwKTsKPiArCX0gZWxzZSB7Cj4gKwkJaWd0X2Fz c2VydCghbW9kZV9wcm9wKTsKPiDCoAl9Cj4gwqAKPiAtCXJldHVybiBOVUxMOwo+IC19Cj4gKwlj cnRjX2dldF9jdXJyZW50X3N0YXRlKHBpcGUsIGN1cnJlbnRfcGlwZV92YWx1ZXMpOwo+IMKgCj4g LXN0YXRpYyB2b2lkIGZpbGxfb2JqX3Byb3BzKGludCBmZCwgdWludDMyX3QgaWQsIGludCB0eXBl LCBpbnQKPiBudW1fcHJvcHMsCj4gLQkJCcKgwqDCoGNvbnN0IGNoYXIgKipwcm9wX25hbWVzLCB1 aW50MzJfdAo+ICpwcm9wX2lkcykKPiAtewo+IC0JZHJtTW9kZU9iamVjdFByb3BlcnRpZXNQdHIg cHJvcHM7Cj4gLQlpbnQgaSwgajsKPiAtCj4gLQlwcm9wcyA9IGRybU1vZGVPYmplY3RHZXRQcm9w ZXJ0aWVzKGZkLCBpZCwgdHlwZSk7Cj4gLQlpZ3RfYXNzZXJ0KHByb3BzKTsKPiArCS8qIE9wdGlv bmFsbHkgcmVsYXggdGhlIGNoZWNrIGZvciBNT0RFX0lEOiB1c2luZyB0aGUgbGVnYWN5Cj4gU2V0 Q3J0Ywo+ICsJwqAqIEFQSSBjYW4gcG90ZW50aWFsbHkgY2hhbmdlIE1PREVfSUQgZXZlbiBpZiB0 aGUgbW9kZQo+IGl0c2VsZiByZW1haW5zCj4gKwnCoCogdW5jaGFuZ2VkLiAqLwo+ICsJaWYgKHJl bGF4ICYgQ1JUQ19SRUxBWF9NT0RFICYmIG1vZGUgJiYKPiBjdXJyZW50X3BpcGVfdmFsdWVzW0lH VF9DUlRDX01PREVfSURdICYmCj4gKwnCoMKgwqDCoGN1cnJlbnRfcGlwZV92YWx1ZXNbSUdUX0NS VENfTU9ERV9JRF0gIT0KPiBwaXBlX3ZhbHVlc1tJR1RfQ1JUQ19NT0RFX0lEXSkgewo+ICsJCWRy bU1vZGVQcm9wZXJ0eUJsb2JSZXMgKmN1cl9wcm9wID0KPiArCQkJZHJtTW9kZUdldFByb3BlcnR5 QmxvYihwaXBlLT5kaXNwbGF5LQo+ID5kcm1fZmQsCj4gKwkJCQkJwqDCoMKgwqDCoMKgwqBjdXJy ZW50X3BpcGVfdmFsdWVzW0kKPiBHVF9DUlRDX01PREVfSURdKTsKPiDCoAo+IC0JZm9yIChpID0g MDsgaSA8IHByb3BzLT5jb3VudF9wcm9wczsgaSsrKSB7Cj4gLQkJZHJtTW9kZVByb3BlcnR5UHRy IHByb3AgPQo+IC0JCQlkcm1Nb2RlR2V0UHJvcGVydHkoZmQsIHByb3BzLT5wcm9wc1tpXSk7Cj4g KwkJaWd0X2Fzc2VydChjdXJfcHJvcCk7Cj4gKwkJaWd0X2Fzc2VydF9lcShjdXJfcHJvcC0+bGVu Z3RoLCBzaXplb2Yoc3RydWN0Cj4gZHJtX21vZGVfbW9kZWluZm8pKTsKPiDCoAo+IC0JCWZvciAo aiA9IDA7IGogPCBudW1fcHJvcHM7IGorKykgewo+IC0JCQlpZiAoc3RyY21wKHByb3AtPm5hbWUs IHByb3BfbmFtZXNbal0pICE9IDApCj4gLQkJCQljb250aW51ZTsKPiAtCQkJcHJvcF9pZHNbal0g PSBwcm9wcy0+cHJvcHNbaV07Cj4gLQkJCWJyZWFrOwo+IC0JCX0KPiArCQlpZiAoIW1lbWNtcChj dXJfcHJvcC0+ZGF0YSwgbW9kZSwgc2l6ZW9mKCptb2RlKSkpCj4gKwkJCWN1cnJlbnRfcGlwZV92 YWx1ZXNbSUdUX0NSVENfTU9ERV9JRF0gPQo+IHBpcGVfdmFsdWVzW0lHVF9DUlRDX01PREVfSURd Owo+IMKgCj4gLQkJZHJtTW9kZUZyZWVQcm9wZXJ0eShwcm9wKTsKPiArCQlkcm1Nb2RlRnJlZVBy b3BlcnR5QmxvYihjdXJfcHJvcCk7Cj4gwqAJfQo+IMKgCj4gLQlkcm1Nb2RlRnJlZU9iamVjdFBy b3BlcnRpZXMocHJvcHMpOwo+IC19Cj4gKwlkb19vcl9kaWUobWVtY21wKHBpcGVfdmFsdWVzLCBj dXJyZW50X3BpcGVfdmFsdWVzLAo+IHNpemVvZihjdXJyZW50X3BpcGVfdmFsdWVzKSkpOwo+IMKg Cj4gLXN0YXRpYyB2b2lkIGZpbGxfb2JqX3Byb3BfbWFwKGludCBmZCwgdWludDMyX3QgaWQsIGlu dCB0eXBlLCBjb25zdAo+IGNoYXIgKm5hbWUsCj4gLQkJCcKgwqDCoMKgwqDCoGludCBudW1fZW51 bXMsIGNvbnN0IGNoYXIKPiAqKmVudW1fbmFtZXMsCj4gLQkJCcKgwqDCoMKgwqDCoHVpbnQ2NF90 ICplbnVtX2lkcykKPiAtewo+IC0JZHJtTW9kZU9iamVjdFByb3BlcnRpZXNQdHIgcHJvcHM7Cj4g LQlpbnQgaSwgaiwgazsKPiAtCj4gLQlwcm9wcyA9IGRybU1vZGVPYmplY3RHZXRQcm9wZXJ0aWVz KGZkLCBpZCwgdHlwZSk7Cj4gLQlpZ3RfYXNzZXJ0KHByb3BzKTsKPiAtCj4gLQlmb3IgKGkgPSAw OyBpIDwgcHJvcHMtPmNvdW50X3Byb3BzOyBpKyspIHsKPiAtCQlkcm1Nb2RlUHJvcGVydHlQdHIg cHJvcCA9Cj4gLQkJCWRybU1vZGVHZXRQcm9wZXJ0eShmZCwgcHJvcHMtPnByb3BzW2ldKTsKPiAt Cj4gLQkJaWd0X2Fzc2VydChwcm9wKTsKPiAtCj4gLQkJaWYgKHN0cmNtcChwcm9wLT5uYW1lLCBu YW1lKSAhPSAwKSB7Cj4gLQkJCWRybU1vZGVGcmVlUHJvcGVydHkocHJvcCk7Cj4gLQkJCWNvbnRp bnVlOwo+IC0JCX0KPiAtCj4gLQkJZm9yIChqID0gMDsgaiA8IHByb3AtPmNvdW50X2VudW1zOyBq KyspIHsKPiAtCQkJc3RydWN0IGRybV9tb2RlX3Byb3BlcnR5X2VudW0gKmUgPSAmcHJvcC0KPiA+ ZW51bXNbal07Cj4gLQo+IC0JCQlmb3IgKGsgPSAwOyBrIDwgbnVtX2VudW1zOyBrKyspIHsKPiAt CQkJCWlmIChzdHJjbXAoZS0+bmFtZSwgZW51bV9uYW1lc1trXSkKPiAhPSAwKQo+IC0JCQkJCWNv bnRpbnVlOwo+IC0KPiAtCQkJCWVudW1faWRzW2tdID0gZS0+dmFsdWU7Cj4gLQkJCQlicmVhazsK PiAtCQkJfQo+IC0JCX0KPiAtCj4gLQkJZHJtTW9kZUZyZWVQcm9wZXJ0eShwcm9wKTsKPiAtCX0K PiArCWRybU1vZGVGcmVlQ3J0YyhsZWdhY3kpOwo+ICsJZHJtTW9kZUZyZWVQcm9wZXJ0eUJsb2Io bW9kZV9wcm9wKTsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgdm9pZCBhdG9taWNfc2V0dXAoc3RydWN0 IGttc19hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICtzdGF0aWMgdm9pZCBjcnRjX2NvbW1pdChpZ3Rf cGlwZV90ICpwaXBlLCBpZ3RfcGxhbmVfdCAqcGxhbmUsCj4gKwkJCWVudW0gaWd0X2NvbW1pdF9z dHlsZSBzLAo+ICsJCQllbnVtIGttc19hdG9taWNfY2hlY2tfcmVsYXggcmVsYXgpCj4gwqB7Cj4g LQlzdHJ1Y3Qga21zX2F0b21pY19kZXNjICpkZXNjID0gc3RhdGUtPmRlc2M7Cj4gLQlkcm1Nb2Rl UmVzUHRyIHJlczsKPiAtCWRybU1vZGVQbGFuZVJlc1B0ciByZXNfcGxhbmU7Cj4gLQlpbnQgaTsK PiAtCj4gLQlkZXNjLT5mZCA9IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIoRFJJVkVSX0FOWSk7Cj4g LQlpZ3RfYXNzZXJ0X2ZkKGRlc2MtPmZkKTsKPiAtCj4gLQlpZ3Rfc2tpcF9vbihkcm1TZXRDbGll bnRDYXAoZGVzYy0+ZmQsIERSTV9DTElFTlRfQ0FQX0FUT01JQywKPiAxKSk7Cj4gLQo+IC0JcmVz ID0gZHJtTW9kZUdldFJlc291cmNlcyhkZXNjLT5mZCk7Cj4gLQlyZXNfcGxhbmUgPSBkcm1Nb2Rl R2V0UGxhbmVSZXNvdXJjZXMoZGVzYy0+ZmQpOwo+IC0JaWd0X2Fzc2VydChyZXMpOwo+IC0JaWd0 X2Fzc2VydChyZXNfcGxhbmUpOwo+IC0KPiAtCWlndF9hc3NlcnRfbHQoMCwgcmVzLT5jb3VudF9j cnRjcyk7Cj4gLQlzdGF0ZS0+bnVtX2NydGNzID0gcmVzLT5jb3VudF9jcnRjczsKPiAtCXN0YXRl LT5jcnRjcyA9IGNhbGxvYyhzdGF0ZS0+bnVtX2NydGNzLCBzaXplb2YoKnN0YXRlLQo+ID5jcnRj cykpOwo+IC0JaWd0X2Fzc2VydChzdGF0ZS0+Y3J0Y3MpOwo+IC0KPiAtCWlndF9hc3NlcnRfbHQo MCwgcmVzX3BsYW5lLT5jb3VudF9wbGFuZXMpOwo+IC0Jc3RhdGUtPm51bV9wbGFuZXMgPSByZXNf cGxhbmUtPmNvdW50X3BsYW5lczsKPiAtCXN0YXRlLT5wbGFuZXMgPSBjYWxsb2Moc3RhdGUtPm51 bV9wbGFuZXMsIHNpemVvZigqc3RhdGUtCj4gPnBsYW5lcykpOwo+IC0JaWd0X2Fzc2VydChzdGF0 ZS0+cGxhbmVzKTsKPiAtCj4gLQlpZ3RfYXNzZXJ0X2x0KDAsIHJlcy0+Y291bnRfY29ubmVjdG9y cyk7Cj4gLQlzdGF0ZS0+bnVtX2Nvbm5lY3RvcnMgPSByZXMtPmNvdW50X2Nvbm5lY3RvcnM7Cj4g LQlzdGF0ZS0+Y29ubmVjdG9ycyA9IGNhbGxvYyhzdGF0ZS0+bnVtX2Nvbm5lY3RvcnMsCj4gLQkJ CQnCoMKgwqBzaXplb2YoKnN0YXRlLT5jb25uZWN0b3JzKSk7Cj4gLQlpZ3RfYXNzZXJ0KHN0YXRl LT5jb25uZWN0b3JzKTsKPiAtCj4gLQlmaWxsX29ial9wcm9wcyhkZXNjLT5mZCwgcmVzLT5jcnRj c1swXSwKPiAtCQnCoMKgwqDCoMKgwqDCoERSTV9NT0RFX09CSkVDVF9DUlRDLCBJR1RfTlVNX0NS VENfUFJPUFMsCj4gLQkJwqDCoMKgwqDCoMKgwqBpZ3RfY3J0Y19wcm9wX25hbWVzLCBkZXNjLT5w cm9wc19jcnRjKTsKPiAtCj4gLQlmaWxsX29ial9wcm9wcyhkZXNjLT5mZCwgcmVzX3BsYW5lLT5w bGFuZXNbMF0sCj4gLQkJwqDCoMKgwqDCoMKgwqBEUk1fTU9ERV9PQkpFQ1RfUExBTkUsIElHVF9O VU1fUExBTkVfUFJPUFMsCj4gLQkJwqDCoMKgwqDCoMKgwqBpZ3RfcGxhbmVfcHJvcF9uYW1lcywg ZGVzYy0+cHJvcHNfcGxhbmUpOwo+IC0JZmlsbF9vYmpfcHJvcF9tYXAoZGVzYy0+ZmQsIHJlc19w bGFuZS0+cGxhbmVzWzBdLAo+IC0JCQnCoMKgRFJNX01PREVfT0JKRUNUX1BMQU5FLCAidHlwZSIs Cj4gLQkJCcKgwqBOVU1fUExBTkVfVFlQRV9QUk9QUywKPiBwbGFuZV90eXBlX3Byb3BfbmFtZXMs Cj4gLQkJCcKgwqBkZXNjLT5wcm9wc19wbGFuZV90eXBlKTsKPiAtCj4gLQlmaWxsX29ial9wcm9w cyhkZXNjLT5mZCwgcmVzLT5jb25uZWN0b3JzWzBdLAo+IC0JCcKgwqDCoMKgwqDCoMKgRFJNX01P REVfT0JKRUNUX0NPTk5FQ1RPUiwKPiBJR1RfTlVNX0NPTk5FQ1RPUl9QUk9QUywKPiAtCQnCoMKg wqDCoMKgwqDCoGlndF9jb25uZWN0b3JfcHJvcF9uYW1lcywgZGVzYy0KPiA+cHJvcHNfY29ubmVj dG9yKTsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgc3RhdGUtPm51bV9jcnRjczsgaSsrKSB7Cj4g LQkJc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YyA9ICZzdGF0ZS0KPiA+Y3J0Y3Nb aV07Cj4gLQo+IC0JCWNydGMtPnN0YXRlID0gc3RhdGU7Cj4gLQkJY3J0Yy0+b2JqID0gcmVzLT5j cnRjc1tpXTsKPiAtCQljcnRjLT5pZHggPSBpOwo+IC0JCWNydGNfZ2V0X2N1cnJlbnRfc3RhdGUo Y3J0Yyk7Cj4gLQo+IC0JCS8qIFRoZSBibG9iIHBvaW50ZWQgdG8gYnkgTU9ERV9JRCBjb3VsZCB3 ZWxsIGJlCj4gdHJhbnNpZW50LAo+IC0JCcKgKiBhbmQgbG9zZSBpdHMgbGFzdCByZWZlcmVuY2Ug YXMgd2Ugc3dpdGNoIGF3YXkKPiBmcm9tIGl0Lgo+IC0JCcKgKiBEdXBsaWNhdGUgdGhlIGJsb2Ig aGVyZSBzbyB3ZSBoYXZlIGEgcmVmZXJlbmNlIHdlCj4ga25vdyB3ZQo+IC0JCcKgKiBvd24uICov Cj4gLQkJaWYgKGNydGMtPm1vZGUuaWQgIT0gMCkKPiAtCQnCoMKgwqDCoGNydGMtPm1vZGUuaWQg PSBibG9iX2R1cGxpY2F0ZShkZXNjLT5mZCwgY3J0Yy0KPiA+bW9kZS5pZCk7Cj4gLQl9Cj4gKwlp Z3RfZGlzcGxheV9jb21taXQyKHBpcGUtPmRpc3BsYXksIHMpOwo+IMKgCj4gLQlmb3IgKGkgPSAw OyBpIDwgc3RhdGUtPm51bV9wbGFuZXM7IGkrKykgewo+IC0JCWRybU1vZGVQbGFuZVB0ciBwbGFu ZSA9Cj4gLQkJCWRybU1vZGVHZXRQbGFuZShkZXNjLT5mZCwgcmVzX3BsYW5lLQo+ID5wbGFuZXNb aV0pOwo+IC0JCWlndF9hc3NlcnQocGxhbmUpOwo+IC0KPiAtCQlzdGF0ZS0+cGxhbmVzW2ldLnN0 YXRlID0gc3RhdGU7Cj4gLQkJc3RhdGUtPnBsYW5lc1tpXS5vYmogPSByZXNfcGxhbmUtPnBsYW5l c1tpXTsKPiAtCQlzdGF0ZS0+cGxhbmVzW2ldLmNydGNfbWFzayA9IHBsYW5lLT5wb3NzaWJsZV9j cnRjczsKPiAtCQlwbGFuZV9nZXRfY3VycmVudF9zdGF0ZSgmc3RhdGUtPnBsYW5lc1tpXSk7Cj4g LQl9Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IHN0YXRlLT5udW1fY29ubmVjdG9yczsgaSsrKSB7 Cj4gLQkJc3RhdGUtPmNvbm5lY3RvcnNbaV0uc3RhdGUgPSBzdGF0ZTsKPiAtCQlzdGF0ZS0+Y29u bmVjdG9yc1tpXS5vYmogPSByZXMtPmNvbm5lY3RvcnNbaV07Cj4gLQkJY29ubmVjdG9yX2dldF9j dXJyZW50X3N0YXRlKCZzdGF0ZS0+Y29ubmVjdG9yc1tpXSk7Cj4gLQl9Cj4gLQo+IC0JZHJtTW9k ZUZyZWVQbGFuZVJlc291cmNlcyhyZXNfcGxhbmUpOwo+IC0JZHJtTW9kZUZyZWVSZXNvdXJjZXMo cmVzKTsKPiArCWNydGNfY2hlY2tfY3VycmVudF9zdGF0ZShwaXBlLCBwaXBlLT52YWx1ZXMsIHBs YW5lLT52YWx1ZXMsCj4gcmVsYXgpOwo+ICsJcGxhbmVfY2hlY2tfY3VycmVudF9zdGF0ZShwbGFu ZSwgcGxhbmUtPnZhbHVlcywgcmVsYXgpOwo+IMKgfQo+IMKgCj4gLXN0YXRpYyBzdHJ1Y3Qga21z X2F0b21pY19zdGF0ZSAqCj4gLWF0b21pY19zdGF0ZV9kdXAoY29uc3Qgc3RydWN0IGttc19hdG9t aWNfc3RhdGUgKnN0YXRlKQo+ICtzdGF0aWMgdm9pZCBjcnRjX2NvbW1pdF9hdG9taWNfZmxhZ3Nf ZXJyKGlndF9waXBlX3QgKnBpcGUsCj4gaWd0X3BsYW5lX3QgKnBsYW5lLAo+ICsJCQkJCcKgdW5z aWduZWQgZmxhZ3MsCj4gKwkJCQkJwqBlbnVtIGttc19hdG9taWNfY2hlY2tfcmVsYXgKPiByZWxh eCwKPiArCQkJCQnCoGludCBlcnIpCj4gwqB7Cj4gLQlzdHJ1Y3Qga21zX2F0b21pY19zdGF0ZSAq cmV0ID0gY2FsbG9jKDEsIHNpemVvZigqcmV0KSk7Cj4gLQo+IC0JaWd0X2Fzc2VydChyZXQpOwo+ IC0JKnJldCA9ICpzdGF0ZTsKPiArCXVpbnQ2NF90IGN1cnJlbnRfcGlwZV92YWx1ZXNbSUdUX05V TV9DUlRDX1BST1BTXTsKPiArCXVpbnQ2NF90IGN1cnJlbnRfcGxhbmVfdmFsdWVzW0lHVF9OVU1f UExBTkVfUFJPUFNdOwo+IMKgCj4gLQlyZXQtPmNydGNzID0gY2FsbG9jKHJldC0+bnVtX2NydGNz LCBzaXplb2YoKnJldC0+Y3J0Y3MpKTsKPiAtCWlndF9hc3NlcnQocmV0LT5jcnRjcyk7Cj4gLQlt ZW1jcHkocmV0LT5jcnRjcywgc3RhdGUtPmNydGNzLCByZXQtPm51bV9jcnRjcyAqCj4gc2l6ZW9m KCpyZXQtPmNydGNzKSk7Cj4gKwljcnRjX2dldF9jdXJyZW50X3N0YXRlKHBpcGUsIGN1cnJlbnRf cGlwZV92YWx1ZXMpOwo+ICsJcGxhbmVfZ2V0X2N1cnJlbnRfc3RhdGUocGxhbmUsIGN1cnJlbnRf cGxhbmVfdmFsdWVzKTsKPiDCoAo+IC0JcmV0LT5wbGFuZXMgPSBjYWxsb2MocmV0LT5udW1fcGxh bmVzLCBzaXplb2YoKnJldC0+cGxhbmVzKSk7Cj4gLQlpZ3RfYXNzZXJ0KHJldC0+cGxhbmVzKTsK PiAtCW1lbWNweShyZXQtPnBsYW5lcywgc3RhdGUtPnBsYW5lcywKPiAtCcKgwqDCoMKgwqDCoMKg cmV0LT5udW1fcGxhbmVzICogc2l6ZW9mKCpyZXQtPnBsYW5lcykpOwo+ICsJaWd0X2Fzc2VydF9l cSgtZXJyLCBpZ3RfZGlzcGxheV90cnlfY29tbWl0X2F0b21pYyhwaXBlLQo+ID5kaXNwbGF5LCBm bGFncywgTlVMTCkpOwo+IMKgCj4gLQlyZXQtPmNvbm5lY3RvcnMgPSBjYWxsb2MocmV0LT5udW1f Y29ubmVjdG9ycywgc2l6ZW9mKCpyZXQtCj4gPmNvbm5lY3RvcnMpKTsKPiAtCWlndF9hc3NlcnQo cmV0LT5jb25uZWN0b3JzKTsKPiAtCW1lbWNweShyZXQtPmNvbm5lY3RvcnMsIHN0YXRlLT5jb25u ZWN0b3JzLAo+IC0JwqDCoMKgwqDCoMKgwqByZXQtPm51bV9jb25uZWN0b3JzICogc2l6ZW9mKCpy ZXQtPmNvbm5lY3RvcnMpKTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICsJY3J0Y19jaGVja19jdXJy ZW50X3N0YXRlKHBpcGUsIGN1cnJlbnRfcGlwZV92YWx1ZXMsCj4gY3VycmVudF9wbGFuZV92YWx1 ZXMsIHJlbGF4KTsKPiArCXBsYW5lX2NoZWNrX2N1cnJlbnRfc3RhdGUocGxhbmUsIGN1cnJlbnRf cGxhbmVfdmFsdWVzLAo+IHJlbGF4KTsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgdm9pZCBhdG9taWNf c3RhdGVfZnJlZShzdHJ1Y3Qga21zX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gLXsKPiAtCWZyZWUo c3RhdGUtPmNydGNzKTsKPiAtCWZyZWUoc3RhdGUtPnBsYW5lcyk7Cj4gLQlmcmVlKHN0YXRlLT5j b25uZWN0b3JzKTsKPiAtCWZyZWUoc3RhdGUpOwo+IC19Cj4gKyNkZWZpbmUgY3J0Y19jb21taXRf YXRvbWljX2VycihwaXBlLCBwbGFuZSwgcmVsYXgsIGVycikgXAo+ICsJY3J0Y19jb21taXRfYXRv bWljX2ZsYWdzX2VycihwaXBlLCBwbGFuZSwKPiBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNF VCwgcmVsYXgsIGVycikKPiDCoAo+IC1zdGF0aWMgdWludDMyX3QgcGxhbmVfZ2V0X2lndF9mb3Jt YXQoc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUKPiAqcGxhbmUpCj4gK3N0YXRpYyB1aW50 MzJfdCBwbGFuZV9nZXRfaWd0X2Zvcm1hdChpZ3RfcGxhbmVfdCAqcGxhbmUpCj4gwqB7Cj4gwqAJ ZHJtTW9kZVBsYW5lUHRyIHBsYW5lX2ttczsKPiDCoAljb25zdCB1aW50MzJfdCAqaWd0X2Zvcm1h dHM7Cj4gLQl1aW50MzJfdCByZXQgPSAwOwo+IMKgCWludCBudW1faWd0X2Zvcm1hdHM7Cj4gwqAJ aW50IGk7Cj4gwqAKPiAtCXBsYW5lX2ttcyA9IGRybU1vZGVHZXRQbGFuZShwbGFuZS0+c3RhdGUt PmRlc2MtPmZkLCBwbGFuZS0KPiA+b2JqKTsKPiAtCWlndF9hc3NlcnQocGxhbmVfa21zKTsKPiAr CXBsYW5lX2ttcyA9IHBsYW5lLT5kcm1fcGxhbmU7Cj4gwqAKPiDCoAlpZ3RfZ2V0X2FsbF9jYWly b19mb3JtYXRzKCZpZ3RfZm9ybWF0cywgJm51bV9pZ3RfZm9ybWF0cyk7Cj4gwqAJZm9yIChpID0g MDsgaSA8IG51bV9pZ3RfZm9ybWF0czsgaSsrKSB7Cj4gwqAJCWludCBqOwo+IMKgCj4gwqAJCWZv ciAoaiA9IDA7IGogPCBwbGFuZV9rbXMtPmNvdW50X2Zvcm1hdHM7IGorKykgewo+IC0JCQlpZiAo cGxhbmVfa21zLT5mb3JtYXRzW2pdID09IGlndF9mb3JtYXRzW2ldKQo+IHsKPiAtCQkJCXJldCA9 IHBsYW5lX2ttcy0+Zm9ybWF0c1tqXTsKPiAtCQkJCWJyZWFrOwo+IC0JCQl9Cj4gKwkJCWlmIChw bGFuZV9rbXMtPmZvcm1hdHNbal0gPT0gaWd0X2Zvcm1hdHNbaV0pCj4gKwkJCQlyZXR1cm4gcGxh bmVfa21zLT5mb3JtYXRzW2pdOwo+IMKgCQl9Cj4gwqAJfQo+IMKgCj4gLQlkcm1Nb2RlRnJlZVBs YW5lKHBsYW5lX2ttcyk7Cj4gLQlyZXR1cm4gcmV0Owo+ICsJcmV0dXJuIDA7Cj4gwqB9Cj4gwqAK PiDCoHN0YXRpYyB2b2lkCj4gLXNldF9kcG1zKGludCBmZCwgaW50IG1vZGUpCj4gK3NldF9kcG1z KGlndF9vdXRwdXRfdCAqb3V0cHV0LCBpbnQgbW9kZSkKPiDCoHsKPiAtCWludCBpOwo+IC0JZHJt TW9kZUNvbm5lY3RvciAqY29ubmVjdG9yOwo+IC0JdWludDMyX3QgaWQ7Cj4gLQlkcm1Nb2RlUmVz ICpyZXNvdXJjZXMgPSBkcm1Nb2RlR2V0UmVzb3VyY2VzKGZkKTsKPiAtCj4gLQlmb3IgKGkgPSAw OyBpIDwgcmVzb3VyY2VzLT5jb3VudF9jb25uZWN0b3JzOyBpKyspIHsKPiAtCQlpZCA9IHJlc291 cmNlcy0+Y29ubmVjdG9yc1tpXTsKPiAtCj4gLQkJY29ubmVjdG9yID0gZHJtTW9kZUdldENvbm5l Y3RvckN1cnJlbnQoZmQsIGlkKTsKPiAtCj4gLQkJa21zdGVzdF9zZXRfY29ubmVjdG9yX2RwbXMo ZmQsIGNvbm5lY3RvciwgbW9kZSk7Cj4gLQo+IC0JCWRybU1vZGVGcmVlQ29ubmVjdG9yKGNvbm5l Y3Rvcik7Cj4gLQl9Cj4gKwlkb19vcl9kaWUoZHJtTW9kZUNvbm5lY3RvclNldFByb3BlcnR5KG91 dHB1dC0+ZGlzcGxheS0KPiA+ZHJtX2ZkLCBvdXRwdXQtPmlkLAo+ICsJCQkJCcKgwqDCoMKgwqDC oG91dHB1dC0KPiA+cHJvcHNbSUdUX0NPTk5FQ1RPUl9EUE1TXSwgbW9kZSkpOwo+IMKgfQo+IMKg Cj4gLXN0YXRpYyB2b2lkIHBsYW5lX292ZXJsYXkoc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0 ZSAqY3J0YywKPiAtCQkJwqDCoHN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlICpwbGFuZV9v bGQpCj4gK3N0YXRpYyB2b2lkIHBsYW5lX292ZXJsYXkoaWd0X3BpcGVfdCAqcGlwZSwgaWd0X291 dHB1dF90ICpvdXRwdXQsCj4gaWd0X3BsYW5lX3QgKnBsYW5lKQo+IMKgewo+IC0Jc3RydWN0IGRy bV9tb2RlX21vZGVpbmZvICptb2RlID0gY3J0Yy0+bW9kZS5kYXRhOwo+IC0Jc3RydWN0IGttc19h dG9taWNfcGxhbmVfc3RhdGUgcGxhbmUgPSAqcGxhbmVfb2xkOwo+IC0JdWludDMyX3QgZm9ybWF0 ID0gcGxhbmVfZ2V0X2lndF9mb3JtYXQoJnBsYW5lKTsKPiAtCWRybU1vZGVBdG9taWNSZXEgKnJl cSA9IGRybU1vZGVBdG9taWNBbGxvYygpOwo+ICsJZHJtTW9kZU1vZGVJbmZvICptb2RlID0gaWd0 X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOwo+ICsJdWludDMyX3QgZm9ybWF0ID0gcGxhbmVfZ2V0 X2lndF9mb3JtYXQocGxhbmUpOwo+IMKgCXN0cnVjdCBpZ3RfZmIgZmI7Cj4gKwl1aW50MzJfdCB3 ID0gbW9kZS0+aGRpc3BsYXkgLyAyOwo+ICsJdWludDMyX3QgaCA9IG1vZGUtPnZkaXNwbGF5IC8g MjsKPiDCoAo+IC0JaWd0X3JlcXVpcmUocmVxKTsKPiDCoAlpZ3RfcmVxdWlyZShmb3JtYXQgIT0g MCk7Cj4gwqAKPiAtCXBsYW5lLnNyY194ID0gMDsKPiAtCXBsYW5lLnNyY195ID0gMDsKPiAtCXBs YW5lLnNyY193ID0gKG1vZGUtPmhkaXNwbGF5IC8gMikgPDwgMTY7Cj4gLQlwbGFuZS5zcmNfaCA9 IChtb2RlLT52ZGlzcGxheSAvIDIpIDw8IDE2Owo+IC0JcGxhbmUuY3J0Y194ID0gbW9kZS0+aGRp c3BsYXkgLyA0Owo+IC0JcGxhbmUuY3J0Y195ID0gbW9kZS0+dmRpc3BsYXkgLyA0Owo+IC0JcGxh bmUuY3J0Y193ID0gbW9kZS0+aGRpc3BsYXkgLyAyOwo+IC0JcGxhbmUuY3J0Y19oID0gbW9kZS0+ dmRpc3BsYXkgLyAyOwo+IC0JcGxhbmUuY3J0Y19pZCA9IGNydGMtPm9iajsKPiAtCXBsYW5lLmZi X2lkID0gaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKHBsYW5lLnN0YXRlLT5kZXNjLT5mZCwKPiAtCQkJ CQnCoMKgwqDCoHBsYW5lLmNydGNfdywKPiBwbGFuZS5jcnRjX2gsCj4gLQkJCQkJwqDCoMKgwqBm b3JtYXQsCj4gSTkxNV9USUxJTkdfTk9ORSwgJmZiKTsKPiArCWlndF9jcmVhdGVfcGF0dGVybl9m YihwaXBlLT5kaXNwbGF5LT5kcm1fZmQsIHcsIGgsCj4gKwkJCcKgwqDCoMKgwqDCoGZvcm1hdCwg STkxNV9USUxJTkdfTk9ORSwgJmZiKTsKPiArCj4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAm ZmIpOwo+ICsJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgdy8yLCBoLzIpOwo+IMKgCj4g wqAJLyogRW5hYmxlIHRoZSBvdmVybGF5IHBsYW5lIHVzaW5nIHRoZSBhdG9taWMgQVBJLCBhbmQK PiBkb3VibGUtY2hlY2sKPiDCoAnCoCogc3RhdGUgaXMgd2hhdCB3ZSB0aGluayBpdCBzaG91bGQg YmUuICovCj4gLQlwbGFuZV9jb21taXRfYXRvbWljKCZwbGFuZSwgcmVxLCBBVE9NSUNfUkVMQVhf Tk9ORSk7Cj4gKwlwbGFuZV9jb21taXQocGxhbmUsIENPTU1JVF9BVE9NSUMsIEFUT01JQ19SRUxB WF9OT05FKTsKPiDCoAo+IMKgCS8qIERpc2FibGUgdGhlIHBsYW5lIGFuZCBjaGVjayB0aGUgc3Rh dGUgbWF0Y2hlcyB0aGUgb2xkLiAqLwo+IC0JcGxhbmVfY29tbWl0X2F0b21pYyhwbGFuZV9vbGQs IHJlcSwgQVRPTUlDX1JFTEFYX05PTkUpOwo+ICsJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgTlVM TCk7Cj4gKwlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCAwLCAwKTsKPiArCXBsYW5lX2Nv bW1pdChwbGFuZSwgQ09NTUlUX0FUT01JQywgQVRPTUlDX1JFTEFYX05PTkUpOwo+IMKgCj4gwqAJ LyogUmUtZW5hYmxlIHRoZSBwbGFuZSB0aHJvdWdoIHRoZSBsZWdhY3kgcGxhbmUgQVBJLCBhbmQK PiB2ZXJpZnkgdGhyb3VnaAo+IMKgCcKgKiBhdG9taWMuICovCj4gLQlwbGFuZV9jb21taXRfbGVn YWN5KCZwbGFuZSwgQVRPTUlDX1JFTEFYX05PTkUpOwo+ICsJaWd0X3BsYW5lX3NldF9mYihwbGFu ZSwgJmZiKTsKPiArCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIHcvMiwgaC8yKTsKPiAr CXBsYW5lX2NvbW1pdChwbGFuZSwgQ09NTUlUX0xFR0FDWSwgQVRPTUlDX1JFTEFYX05PTkUpOwo+ IMKgCj4gwqAJLyogUmVzdG9yZSB0aGUgcGxhbmUgdG8gaXRzIG9yaWdpbmFsIHNldHRpbmdzIHRo cm91Z2ggdGhlCj4gbGVnYWN5IHBsYW5lCj4gwqAJwqAqIEFQSSwgYW5kIHZlcmlmeSB0aHJvdWdo IGF0b21pYy4gKi8KPiAtCXBsYW5lX2NvbW1pdF9sZWdhY3kocGxhbmVfb2xkLCBBVE9NSUNfUkVM QVhfTk9ORSk7Cj4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKPiArCWlndF9wbGFu ZV9zZXRfcG9zaXRpb24ocGxhbmUsIDAsIDApOwo+ICsJcGxhbmVfY29tbWl0KHBsYW5lLCBDT01N SVRfTEVHQUNZLCBBVE9NSUNfUkVMQVhfTk9ORSk7Cj4gwqAKPiAtCWRybU1vZGVBdG9taWNGcmVl KHJlcSk7Cj4gKwlpZ3RfcmVtb3ZlX2ZiKHBpcGUtPmRpc3BsYXktPmRybV9mZCwgJmZiKTsKPiDC oH0KPiDCoAo+IC1zdGF0aWMgdm9pZCBwbGFuZV9wcmltYXJ5KHN0cnVjdCBrbXNfYXRvbWljX2Ny dGNfc3RhdGUgKmNydGMsCj4gLQkJCcKgwqBzdHJ1Y3Qga21zX2F0b21pY19wbGFuZV9zdGF0ZSAq cGxhbmVfb2xkKQo+ICtzdGF0aWMgdm9pZCBwbGFuZV9wcmltYXJ5KGlndF9waXBlX3QgKnBpcGUs IGlndF9wbGFuZV90ICpwbGFuZSwKPiBzdHJ1Y3QgaWd0X2ZiICpmYikKPiDCoHsKPiAtCXN0cnVj dCBkcm1fbW9kZV9tb2RlaW5mbyAqbW9kZSA9IGNydGMtPm1vZGUuZGF0YTsKPiAtCXN0cnVjdCBr bXNfYXRvbWljX3BsYW5lX3N0YXRlIHBsYW5lID0gKnBsYW5lX29sZDsKPiAtCXVpbnQzMl90IGZv cm1hdCA9IHBsYW5lX2dldF9pZ3RfZm9ybWF0KCZwbGFuZSk7Cj4gLQlkcm1Nb2RlQXRvbWljUmVx ICpyZXEgPSBkcm1Nb2RlQXRvbWljQWxsb2MoKTsKPiAtCXN0cnVjdCBpZ3RfZmIgZmI7Cj4gLQl1 aW50MzJfdCBmbGFncyA9IDA7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCWlndF9yZXF1aXJlKGZvcm1h dCAhPSAwKTsKPiArCXN0cnVjdCBpZ3RfZmIgZmIyOwo+IMKgCj4gLQlwbGFuZS5zcmNfeCA9IDA7 Cj4gLQlwbGFuZS5zcmNfeSA9IDA7Cj4gLQlwbGFuZS5zcmNfdyA9IG1vZGUtPmhkaXNwbGF5IDw8 IDE2Owo+IC0JcGxhbmUuc3JjX2ggPSBtb2RlLT52ZGlzcGxheSA8PCAxNjsKPiAtCXBsYW5lLmNy dGNfeCA9IDA7Cj4gLQlwbGFuZS5jcnRjX3kgPSAwOwo+IC0JcGxhbmUuY3J0Y193ID0gbW9kZS0+ aGRpc3BsYXk7Cj4gLQlwbGFuZS5jcnRjX2ggPSBtb2RlLT52ZGlzcGxheTsKPiAtCXBsYW5lLmNy dGNfaWQgPSBjcnRjLT5vYmo7Cj4gLQlwbGFuZS5mYl9pZCA9IGlndF9jcmVhdGVfcGF0dGVybl9m YihwbGFuZS5zdGF0ZS0+ZGVzYy0+ZmQsCj4gLQkJCQkJwqDCoMKgwqBwbGFuZS5jcnRjX3csCj4g cGxhbmUuY3J0Y19oLAo+IC0JCQkJCcKgwqDCoMKgZm9ybWF0LAo+IEk5MTVfVElMSU5HX05PTkUs ICZmYik7Cj4gLQo+IC0JZHJtTW9kZUF0b21pY1NldEN1cnNvcihyZXEsIDApOwo+IC0JY3J0Y19w b3B1bGF0ZV9yZXEoY3J0YywgcmVxKTsKPiAtCXBsYW5lX3BvcHVsYXRlX3JlcSgmcGxhbmUsIHJl cSk7Cj4gLQlyZXQgPSBkcm1Nb2RlQXRvbWljQ29tbWl0KGNydGMtPnN0YXRlLT5kZXNjLT5mZCwg cmVxLAo+IC0JCQkJwqDCoERSTV9NT0RFX0FUT01JQ19URVNUX09OTFksIE5VTEwpOwo+IC0JLyog VHJ5IGhhcmRlciBpbiBjYXNlIHRoZSBmYWlsdXJlIGlzIGNhdXNlZCBieSBkaXNhbGxvd2luZwo+ IG1vZGVzZXQuICovCj4gLQlpZiAocmV0ID09IC1FSU5WQUwpCj4gLQkJZmxhZ3MgfD0gRFJNX01P REVfQVRPTUlDX0FMTE9XX01PREVTRVQ7Cj4gKwlpZ3RfY3JlYXRlX2NvbG9yX3BhdHRlcm5fZmIo cGlwZS0+ZGlzcGxheS0+ZHJtX2ZkLAo+ICsJCQkJwqDCoMKgwqBmYi0+d2lkdGgsIGZiLT5oZWln aHQsCj4gKwkJCQnCoMKgwqDCoGZiLT5kcm1fZm9ybWF0LAo+IEk5MTVfVElMSU5HX05PTkUsCj4g KwkJCQnCoMKgwqDCoDAuMiwgMC4yLCAwLjIsICZmYjIpOwo+IMKgCj4gwqAJLyogRmxpcCB0aGUg cHJpbWFyeSBwbGFuZSB1c2luZyB0aGUgYXRvbWljIEFQSSwgYW5kIGRvdWJsZS0KPiBjaGVjawo+ IMKgCcKgKiBzdGF0ZSBpcyB3aGF0IHdlIHRoaW5rIGl0IHNob3VsZCBiZS4gKi8KPiAtCWNydGNf Y29tbWl0X2F0b21pYyhjcnRjLCAmcGxhbmUsIHJlcSwgQVRPTUlDX1JFTEFYX05PTkUsCj4gZmxh Z3MpOwo+ICsJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmZiMik7Cj4gKwljcnRjX2NvbW1pdChw aXBlLCBwbGFuZSwgQ09NTUlUX0FUT01JQywgQVRPTUlDX1JFTEFYX05PTkUpOwo+IMKgCj4gwqAJ LyogUmVzdG9yZSB0aGUgcHJpbWFyeSBwbGFuZSBhbmQgY2hlY2sgdGhlIHN0YXRlIG1hdGNoZXMg dGhlCj4gb2xkLiAqLwo+IC0JY3J0Y19jb21taXRfYXRvbWljKGNydGMsIHBsYW5lX29sZCwgcmVx LCBBVE9NSUNfUkVMQVhfTk9ORSwKPiBmbGFncyk7Cj4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5l LCBmYik7Cj4gKwljcnRjX2NvbW1pdChwaXBlLCBwbGFuZSwgQ09NTUlUX0FUT01JQywgQVRPTUlD X1JFTEFYX05PTkUpOwo+IMKgCj4gLQkvKiBSZS1lbmFibGUgdGhlIHBsYW5lIHRocm91Z2ggdGhl IGxlZ2FjeSBDUlRDL3ByaW1hcnktcGxhbmUgCj4gQVBJLCBhbmQKPiArCS8qIFNldCB0aGUgcGxh bmUgdGhyb3VnaCB0aGUgbGVnYWN5IENSVEMvcHJpbWFyeS1wbGFuZSBBUEksCj4gYW5kCj4gwqAJ wqAqIHZlcmlmeSB0aHJvdWdoIGF0b21pYy4gKi8KPiAtCWNydGNfY29tbWl0X2xlZ2FjeShjcnRj LCAmcGxhbmUsIENSVENfUkVMQVhfTU9ERSk7Cj4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAm ZmIyKTsKPiArCWNydGNfY29tbWl0KHBpcGUsIHBsYW5lLCBDT01NSVRfTEVHQUNZLCBDUlRDX1JF TEFYX01PREUpOwo+IMKgCj4gwqAJLyogUmVzdG9yZSB0aGUgcGxhbmUgdG8gaXRzIG9yaWdpbmFs IHNldHRpbmdzIHRocm91Z2ggdGhlCj4gbGVnYWN5IENSVEMKPiDCoAnCoCogQVBJLCBhbmQgdmVy aWZ5IHRocm91Z2ggYXRvbWljLiAqLwo+IC0JY3J0Y19jb21taXRfbGVnYWN5KGNydGMsIHBsYW5l X29sZCwgQ1JUQ19SRUxBWF9NT0RFKTsKPiAtCj4gLQkvKiBGaW5hbGx5LCByZXN0b3JlIHRvIHRo ZSBvcmlnaW5hbCBzdGF0ZS4gKi8KPiAtCWNydGNfY29tbWl0X2F0b21pYyhjcnRjLCBwbGFuZV9v bGQsIHJlcSwgQVRPTUlDX1JFTEFYX05PTkUsCj4gZmxhZ3MpOwo+ICsJaWd0X3BsYW5lX3NldF9m YihwbGFuZSwgZmIpOwo+ICsJY3J0Y19jb21taXQocGlwZSwgcGxhbmUsIENPTU1JVF9MRUdBQ1ks IENSVENfUkVMQVhfTU9ERSk7Cj4gwqAKPiAtCWRybU1vZGVBdG9taWNGcmVlKHJlcSk7Cj4gKwkv KiBTZXQgdGhlIHBsYW5lIHRocm91Z2ggdGhlIHVuaXZlcnNhbCBzZXRwbGFuZSBBUEksIGFuZAo+ ICsJwqAqIHZlcmlmeSB0aHJvdWdoIGF0b21pYy4gKi8KPiArCWlndF9wbGFuZV9zZXRfZmIocGxh bmUsICZmYjIpOwo+ICsJcGxhbmVfY29tbWl0KHBsYW5lLCBDT01NSVRfVU5JVkVSU0FMLCBBVE9N SUNfUkVMQVhfTk9ORSk7Cj4gwqB9Cj4gwqAKPiDCoC8qIHRlc3QgdG8gZW5zdXJlIHRoYXQgRFJN X01PREVfQVRPTUlDX1RFU1RfT05MWSByZWFsbHkgb25seSB0b3VjaGVzCj4gdGhlCj4gwqAgKiBm cmVlLXN0YW5kaW5nIHN0YXRlIG9iamVjdHMgYW5kIG5vdGhpbmcgZWxzZS4KPiDCoCAqLwo+IC1z dGF0aWMgdm9pZCB0ZXN0X29ubHkoc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YywK PiAtCQnCoMKgwqDCoMKgwqBzdHJ1Y3Qga21zX2F0b21pY19wbGFuZV9zdGF0ZSAqcGxhbmVfb2xk KQo+ICtzdGF0aWMgdm9pZCB0ZXN0X29ubHkoaWd0X3BpcGVfdCAqcGlwZV9vYmosCj4gKwkJwqDC oMKgwqDCoMKgaWd0X3BsYW5lX3QgKnByaW1hcnksCj4gKwkJwqDCoMKgwqDCoMKgaWd0X291dHB1 dF90ICpvdXRwdXQpCj4gwqB7Cj4gLQlzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gKm1vZGUgPSBj cnRjLT5tb2RlLmRhdGE7Cj4gLQlzdHJ1Y3Qga21zX2F0b21pY19wbGFuZV9zdGF0ZSBwbGFuZSA9 ICpwbGFuZV9vbGQ7Cj4gLQl1aW50MzJfdCBmb3JtYXQgPSBwbGFuZV9nZXRfaWd0X2Zvcm1hdCgm cGxhbmUpOwo+IC0JZHJtTW9kZUF0b21pY1JlcSAqcmVxID0gZHJtTW9kZUF0b21pY0FsbG9jKCk7 Cj4gKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91dHB1dCk7 Cj4gKwl1aW50MzJfdCBmb3JtYXQgPSBwbGFuZV9nZXRfaWd0X2Zvcm1hdChwcmltYXJ5KTsKPiDC oAlzdHJ1Y3QgaWd0X2ZiIGZiOwo+IC0JaW50IHJldDsKPiArCXVpbnQ2NF90IG9sZF9wbGFuZV92 YWx1ZXNbSUdUX05VTV9QTEFORV9QUk9QU10sCj4gb2xkX2NydGNfdmFsdWVzW0lHVF9OVU1fQ1JU Q19QUk9QU107Cj4gwqAKPiDCoAlpZ3RfcmVxdWlyZShmb3JtYXQgIT0gMCk7Cj4gwqAKPiAtCXBs YW5lLnNyY194ID0gMDsKPiAtCXBsYW5lLnNyY195ID0gMDsKPiAtCXBsYW5lLnNyY193ID0gbW9k ZS0+aGRpc3BsYXkgPDwgMTY7Cj4gLQlwbGFuZS5zcmNfaCA9IG1vZGUtPnZkaXNwbGF5IDw8IDE2 Owo+IC0JcGxhbmUuY3J0Y194ID0gMDsKPiAtCXBsYW5lLmNydGNfeSA9IDA7Cj4gLQlwbGFuZS5j cnRjX3cgPSBtb2RlLT5oZGlzcGxheTsKPiAtCXBsYW5lLmNydGNfaCA9IG1vZGUtPnZkaXNwbGF5 Owo+IC0JcGxhbmUuY3J0Y19pZCA9IGNydGMtPm9iajsKPiAtCXBsYW5lLmZiX2lkID0gaWd0X2Ny ZWF0ZV9wYXR0ZXJuX2ZiKHBsYW5lLnN0YXRlLT5kZXNjLT5mZCwKPiAtCQkJCQnCoMKgwqDCoHBs YW5lLmNydGNfdywKPiBwbGFuZS5jcnRjX2gsCj4gLQkJCQkJwqDCoMKgwqBmb3JtYXQsCj4gSTkx NV9USUxJTkdfTk9ORSwgJmZiKTsKPiAtCj4gLQlkcm1Nb2RlQXRvbWljU2V0Q3Vyc29yKHJlcSwg MCk7Cj4gLQljcnRjX3BvcHVsYXRlX3JlcShjcnRjLCByZXEpOwo+IC0JcGxhbmVfcG9wdWxhdGVf cmVxKCZwbGFuZSwgcmVxKTsKPiAtCXJldCA9IGRybU1vZGVBdG9taWNDb21taXQoY3J0Yy0+c3Rh dGUtPmRlc2MtPmZkLCByZXEsCj4gLQkJCQnCoMKgRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSwg TlVMTCk7Cj4gLQo+IC0JaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+IC0KPiAtCS8qIGdvIHRocm91 Z2ggZHBtcyBvZmYvb24gY3ljbGUgKi8KPiAtCXNldF9kcG1zKGNydGMtPnN0YXRlLT5kZXNjLT5m ZCwgRFJNX01PREVfRFBNU19PRkYpOwo+IC0Jc2V0X2RwbXMoY3J0Yy0+c3RhdGUtPmRlc2MtPmZk LCBEUk1fTU9ERV9EUE1TX09OKTsKPiAtCj4gLQkvKiBjaGVjayB0aGUgc3RhdGUgKi8KPiAtCWNy dGNfY2hlY2tfY3VycmVudF9zdGF0ZShjcnRjLCBwbGFuZV9vbGQsCj4gQVRPTUlDX1JFTEFYX05P TkUpOwo+IC0JcGxhbmVfY2hlY2tfY3VycmVudF9zdGF0ZShwbGFuZV9vbGQsIEFUT01JQ19SRUxB WF9OT05FKTsKPiAtCj4gLQkvKiBSZS1lbmFibGUgdGhlIHBsYW5lIHRocm91Z2ggdGhlIGxlZ2Fj eSBDUlRDL3ByaW1hcnktcGxhbmUgCj4gQVBJLCBhbmQKPiAtCcKgKiB2ZXJpZnkgdGhyb3VnaCBh dG9taWMuICovCj4gLQljcnRjX2NvbW1pdF9sZWdhY3koY3J0YywgcGxhbmVfb2xkLCBDUlRDX1JF TEFYX01PREUpOwo+ICsJcGxhbmVfZ2V0X2N1cnJlbnRfc3RhdGUocHJpbWFyeSwgb2xkX3BsYW5l X3ZhbHVlcyk7Cj4gKwljcnRjX2dldF9jdXJyZW50X3N0YXRlKHBpcGVfb2JqLCBvbGRfY3J0Y192 YWx1ZXMpOwo+ICsKPiArCWlndF9hc3NlcnQoIW9sZF9jcnRjX3ZhbHVlc1tJR1RfQ1JUQ19NT0RF X0lEXSk7Cj4gKwo+ICsJaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKHBpcGVfb2JqLT5kaXNwbGF5LT5k cm1fZmQsCj4gKwkJCcKgwqDCoMKgwqBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4g KwkJCcKgwqDCoMKgwqBmb3JtYXQsIEk5MTVfVElMSU5HX05PTkUsICZmYik7Cj4gKwlpZ3RfcGxh bmVfc2V0X2ZiKHByaW1hcnksICZmYik7Cj4gKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwg cGlwZV9vYmotPnBpcGUpOwo+ICsKPiArCWlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMocGlwZV9v YmotPmRpc3BsYXksCj4gRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSB8IERSTV9NT0RFX0FUT01J Q19BTExPV19NT0RFU0VULCBOVUxMKTsKPiArCj4gKwkvKiBjaGVjayB0aGUgc3RhdGUsIHNob3Vs ZCBzdGlsbCBiZSBvbGQgc3RhdGUgKi8KPiArCWNydGNfY2hlY2tfY3VycmVudF9zdGF0ZShwaXBl X29iaiwgb2xkX2NydGNfdmFsdWVzLAo+IG9sZF9wbGFuZV92YWx1ZXMsIEFUT01JQ19SRUxBWF9O T05FKTsKPiArCXBsYW5lX2NoZWNrX2N1cnJlbnRfc3RhdGUocHJpbWFyeSwgb2xkX3BsYW5lX3Zh bHVlcywKPiBBVE9NSUNfUkVMQVhfTk9ORSk7Cj4gKwo+ICsJLyoKPiArCcKgKiBFbmFibGUgdGhl IHBsYW5lIHRocm91Z2ggdGhlIGxlZ2FjeSBDUlRDL3ByaW1hcnktcGxhbmUKPiBBUEksIGFuZAo+ ICsJwqAqIHZlcmlmeSB0aHJvdWdoIGF0b21pYy4KPiArCcKgKi8KPiArCWNydGNfY29tbWl0KHBp cGVfb2JqLCBwcmltYXJ5LCBDT01NSVRfTEVHQUNZLAo+IENSVENfUkVMQVhfTU9ERSk7Cj4gKwo+ ICsJLyogU2FtZSBmb3IgZGlzYWJsZS4uICovCj4gKwlwbGFuZV9nZXRfY3VycmVudF9zdGF0ZShw cmltYXJ5LCBvbGRfcGxhbmVfdmFsdWVzKTsKPiArCWNydGNfZ2V0X2N1cnJlbnRfc3RhdGUocGlw ZV9vYmosIG9sZF9jcnRjX3ZhbHVlcyk7Cj4gKwo+ICsJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5 LCBOVUxMKTsKPiArCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBQSVBFX05PTkUpOwo+ICsK PiArCWlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMocGlwZV9vYmotPmRpc3BsYXksCj4gRFJNX01P REVfQVRPTUlDX1RFU1RfT05MWSB8IERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VULCBOVUxM KTsKPiDCoAo+IC0JZHJtTW9kZUF0b21pY0ZyZWUocmVxKTsKPiArCS8qIGZvciBleHRyYSBzdHJl c3MsIGdvIHRocm91Z2ggZHBtcyBvZmYvb24gY3ljbGUgKi8KPiArCXNldF9kcG1zKG91dHB1dCwg RFJNX01PREVfRFBNU19PRkYpOwo+ICsJc2V0X2RwbXMob3V0cHV0LCBEUk1fTU9ERV9EUE1TX09O KTsKVGhlcmUgaXMgdGhpcyBsaWJyYXJ5IGZ1bmN0aW9uICdrbXN0ZXN0X3NldF9jb25uZWN0b3Jf ZHBtcygpJy4gQ291bGQgd2UKdXRpbGl6ZSB0aGlzIGZ1bmN0aW9uIGhlcmUgaW5zdGVhZD8KCj4g Kwo+ICsJLyogY2hlY2sgdGhlIHN0YXRlLCBzaG91bGQgc3RpbGwgYmUgb2xkIHN0YXRlICovCj4g KwljcnRjX2NoZWNrX2N1cnJlbnRfc3RhdGUocGlwZV9vYmosIG9sZF9jcnRjX3ZhbHVlcywKPiBv bGRfcGxhbmVfdmFsdWVzLCBBVE9NSUNfUkVMQVhfTk9ORSk7Cj4gKwlwbGFuZV9jaGVja19jdXJy ZW50X3N0YXRlKHByaW1hcnksIG9sZF9wbGFuZV92YWx1ZXMsCj4gQVRPTUlDX1JFTEFYX05PTkUp Owo+ICsKPiArCS8qIEFuZCBkaXNhYmxlIHRoZSBwaXBlIGFuZCByZW1vdmUgZmIsIHRlc3QgY29t cGxldGUgKi8KPiArCWNydGNfY29tbWl0KHBpcGVfb2JqLCBwcmltYXJ5LCBDT01NSVRfQVRPTUlD LAo+IEFUT01JQ19SRUxBWF9OT05FKTsKPiArCWlndF9yZW1vdmVfZmIocGlwZV9vYmotPmRpc3Bs YXktPmRybV9mZCwgJmZiKTsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgdm9pZCBwbGFuZV9jdXJzb3Io c3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YywKPiAtCQkJwqBzdHJ1Y3Qga21zX2F0 b21pY19wbGFuZV9zdGF0ZSAqcGxhbmVfb2xkKQo+ICtzdGF0aWMgdm9pZCBwbGFuZV9jdXJzb3Io aWd0X3BpcGVfdCAqcGlwZV9vYmosCj4gKwkJCcKgaWd0X291dHB1dF90ICpvdXRwdXQsCj4gKwkJ CcKgaWd0X3BsYW5lX3QgKmN1cnNvcikKPiDCoHsKPiAtCXN0cnVjdCBkcm1fbW9kZV9tb2RlaW5m byAqbW9kZSA9IGNydGMtPm1vZGUuZGF0YTsKPiAtCXN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0 YXRlIHBsYW5lID0gKnBsYW5lX29sZDsKPiAtCWRybU1vZGVBdG9taWNSZXEgKnJlcSA9IGRybU1v ZGVBdG9taWNBbGxvYygpOwo+ICsJZHJtTW9kZU1vZGVJbmZvICptb2RlID0gaWd0X291dHB1dF9n ZXRfbW9kZShvdXRwdXQpOwo+IMKgCXN0cnVjdCBpZ3RfZmIgZmI7Cj4gwqAJdWludDY0X3Qgd2lk dGgsIGhlaWdodDsKPiAtCj4gLQlpZ3RfYXNzZXJ0KHJlcSk7Cj4gKwlpbnQgeCA9IG1vZGUtPmhk aXNwbGF5IC8gMjsKPiArCWludCB5ID0gbW9kZS0+dmRpc3BsYXkgLyAyOwo+IMKgCj4gwqAJLyog QW55IGtlcm5lbCBuZXcgZW5vdWdoIGZvciBhdG9taWMsIGFsc28gaGFzIHRoZSBjdXJzb3IKPiBz aXplIGNhcHMuICovCj4gLQlkb19vcl9kaWUoZHJtR2V0Q2FwKHBsYW5lLnN0YXRlLT5kZXNjLT5m ZCwKPiArCWRvX29yX2RpZShkcm1HZXRDYXAocGlwZV9vYmotPmRpc3BsYXktPmRybV9mZCwKPiDC oAnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0NBUF9DVVJTT1Jf V0lEVEgsICZ3aWR0aCkpOwo+IC0JZG9fb3JfZGllKGRybUdldENhcChwbGFuZS5zdGF0ZS0+ZGVz Yy0+ZmQsCj4gKwlkb19vcl9kaWUoZHJtR2V0Q2FwKHBpcGVfb2JqLT5kaXNwbGF5LT5kcm1fZmQs Cj4gwqAJwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9DQVBfQ1VS U09SX0hFSUdIVCwgJmhlaWdodCkpOwo+IMKgCj4gLQlwbGFuZS5zcmNfeCA9IDA7Cj4gLQlwbGFu ZS5zcmNfeSA9IDA7Cj4gLQlwbGFuZS5zcmNfdyA9IHdpZHRoIDw8IDE2Owo+IC0JcGxhbmUuc3Jj X2ggPSBoZWlnaHQgPDwgMTY7Cj4gLQlwbGFuZS5jcnRjX3ggPSBtb2RlLT5oZGlzcGxheSAvIDI7 Cj4gLQlwbGFuZS5jcnRjX3kgPSBtb2RlLT52ZGlzcGxheSAvIDI7Cj4gLQlwbGFuZS5jcnRjX3cg PSB3aWR0aDsKPiAtCXBsYW5lLmNydGNfaCA9IGhlaWdodDsKPiAtCXBsYW5lLmNydGNfaWQgPSBj cnRjLT5vYmo7Cj4gLQlwbGFuZS5mYl9pZCA9IGlndF9jcmVhdGVfY29sb3JfZmIocGxhbmUuc3Rh dGUtPmRlc2MtPmZkLAo+IC0JCQkJCcKgwqB3aWR0aCwgaGVpZ2h0LAo+IC0JCQkJCcKgwqBEUk1f Rk9STUFUX0FSR0I4ODg4LAo+IC0JCQkJCcKgwqBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAo+ IC0JCQkJCcKgwqAwLjAsIDAuMCwgMC4wLAo+IC0JCQkJCcKgwqAmZmIpOwo+IC0JaWd0X2Fzc2Vy dF9uZXFfdTMyKHBsYW5lLmZiX2lkLCAwKTsKPiArCWlndF9jcmVhdGVfY29sb3JfZmIocGlwZV9v YmotPmRpc3BsYXktPmRybV9mZCwKPiArCQkJwqDCoMKgwqB3aWR0aCwgaGVpZ2h0LCBEUk1fRk9S TUFUX0FSR0I4ODg4LAo+ICsJCQnCoMKgwqDCoExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4g KwkJCcKgwqDCoMKgMC4wLCAwLjAsIDAuMCwgJmZiKTsKPiDCoAo+IMKgCS8qIEZsaXAgdGhlIGN1 cnNvciBwbGFuZSB1c2luZyB0aGUgYXRvbWljIEFQSSwgYW5kIGRvdWJsZS0KPiBjaGVjawo+IMKg CcKgKiBzdGF0ZSBpcyB3aGF0IHdlIHRoaW5rIGl0IHNob3VsZCBiZS4gKi8KPiAtCXBsYW5lX2Nv bW1pdF9hdG9taWMoJnBsYW5lLCByZXEsIEFUT01JQ19SRUxBWF9OT05FKTsKPiArCWlndF9wbGFu ZV9zZXRfZmIoY3Vyc29yLCAmZmIpOwo+ICsJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihjdXJzb3Is IHgsIHkpOwo+ICsJcGxhbmVfY29tbWl0KGN1cnNvciwgQ09NTUlUX0FUT01JQywgQVRPTUlDX1JF TEFYX05PTkUpOwo+IMKgCj4gwqAJLyogUmVzdG9yZSB0aGUgY3Vyc29yIHBsYW5lIGFuZCBjaGVj ayB0aGUgc3RhdGUgbWF0Y2hlcyB0aGUKPiBvbGQuICovCj4gLQlwbGFuZV9jb21taXRfYXRvbWlj KHBsYW5lX29sZCwgcmVxLCBBVE9NSUNfUkVMQVhfTk9ORSk7Cj4gKwlpZ3RfcGxhbmVfc2V0X2Zi KGN1cnNvciwgTlVMTCk7Cj4gKwlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKGN1cnNvciwgMCwgMCk7 Cj4gKwlwbGFuZV9jb21taXQoY3Vyc29yLCBDT01NSVRfQVRPTUlDLCBBVE9NSUNfUkVMQVhfTk9O RSk7Cj4gwqAKPiDCoAkvKiBSZS1lbmFibGUgdGhlIHBsYW5lIHRocm91Z2ggdGhlIGxlZ2FjeSBj dXJzb3IgQVBJLCBhbmQKPiB2ZXJpZnkKPiDCoAnCoCogdGhyb3VnaCBhdG9taWMuICovCj4gLQlk b19vcl9kaWUoZHJtTW9kZU1vdmVDdXJzb3IocGxhbmUuc3RhdGUtPmRlc2MtPmZkLAo+IHBsYW5l LmNydGNfaWQsCj4gLQkJCQnCoMKgwqDCoHBsYW5lLmNydGNfeCwgcGxhbmUuY3J0Y195KSk7Cj4g LQlkb19vcl9kaWUoZHJtTW9kZVNldEN1cnNvcihwbGFuZS5zdGF0ZS0+ZGVzYy0+ZmQsCj4gcGxh bmUuY3J0Y19pZCwKPiAtCQkJCcKgwqDCoGZiLmdlbV9oYW5kbGUsIHdpZHRoLCBoZWlnaHQpKTsK PiAtCXBsYW5lX2NoZWNrX2N1cnJlbnRfc3RhdGUoJnBsYW5lLCBQTEFORV9SRUxBWF9GQik7Cj4g KwlpZ3RfcGxhbmVfc2V0X2ZiKGN1cnNvciwgJmZiKTsKPiArCWlndF9wbGFuZV9zZXRfcG9zaXRp b24oY3Vyc29yLCB4LCB5KTsKPiArCXBsYW5lX2NvbW1pdChjdXJzb3IsIENPTU1JVF9MRUdBQ1ks IFBMQU5FX1JFTEFYX0ZCKTsKPiDCoAo+IMKgCS8qIFdpZ2dsZS4gKi8KPiAtCXBsYW5lLmNydGNf eCAtPSAxNjsKPiAtCXBsYW5lLmNydGNfeSAtPSAxNjsKPiAtCWRvX29yX2RpZShkcm1Nb2RlTW92 ZUN1cnNvcihwbGFuZS5zdGF0ZS0+ZGVzYy0+ZmQsCj4gcGxhbmUuY3J0Y19pZCwKPiAtCQkJCcKg wqDCoMKgcGxhbmUuY3J0Y194LCBwbGFuZS5jcnRjX3kpKTsKPiAtCXBsYW5lX2NoZWNrX2N1cnJl bnRfc3RhdGUoJnBsYW5lLCBQTEFORV9SRUxBWF9GQik7Cj4gKwlpZ3RfcGxhbmVfc2V0X3Bvc2l0 aW9uKGN1cnNvciwgeCAtIDE2LCB5IC0gMTYpOwo+ICsJcGxhbmVfY29tbWl0KGN1cnNvciwgQ09N TUlUX0xFR0FDWSwgUExBTkVfUkVMQVhfRkIpOwo+IMKgCj4gwqAJLyogUmVzdG9yZSB0aGUgcGxh bmUgdG8gaXRzIG9yaWdpbmFsIHNldHRpbmdzIHRocm91Z2ggdGhlCj4gbGVnYWN5IGN1cnNvcgo+ IMKgCcKgKiBBUEksIGFuZCB2ZXJpZnkgdGhyb3VnaCBhdG9taWMuICovCj4gLQlkb19vcl9kaWUo ZHJtTW9kZVNldEN1cnNvcjIocGxhbmUuc3RhdGUtPmRlc2MtPmZkLAo+IHBsYW5lLmNydGNfaWQs Cj4gLQkJCQnCoMKgwqDCoDAsIDAsIDAsIDAsIDApKTsKPiAtCXBsYW5lX2NoZWNrX2N1cnJlbnRf c3RhdGUocGxhbmVfb2xkLCBBVE9NSUNfUkVMQVhfTk9ORSk7Cj4gLQo+IC0JLyogRmluYWxseSwg cmVzdG9yZSB0byB0aGUgb3JpZ2luYWwgc3RhdGUuICovCj4gLQlwbGFuZV9jb21taXRfYXRvbWlj KHBsYW5lX29sZCwgcmVxLCBBVE9NSUNfUkVMQVhfTk9ORSk7Cj4gLQo+IC0JZHJtTW9kZUF0b21p Y0ZyZWUocmVxKTsKPiArCWlndF9wbGFuZV9zZXRfZmIoY3Vyc29yLCBOVUxMKTsKPiArCWlndF9w bGFuZV9zZXRfcG9zaXRpb24oY3Vyc29yLCAwLCAwKTsKPiArCXBsYW5lX2NvbW1pdChjdXJzb3Is IENPTU1JVF9MRUdBQ1ksIEFUT01JQ19SRUxBWF9OT05FKTsKPiDCoH0KPiDCoAo+IC1zdGF0aWMg dm9pZCBwbGFuZV9pbnZhbGlkX3BhcmFtcyhzdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlICpj cnRjLAo+IC0JCQkJwqBzdHJ1Y3Qga21zX2F0b21pY19wbGFuZV9zdGF0ZQo+ICpwbGFuZV9vbGQs Cj4gLQkJCQnCoHN0cnVjdCBrbXNfYXRvbWljX2Nvbm5lY3Rvcl9zdGF0ZQo+ICpjb25uKQo+ICtz dGF0aWMgdm9pZCBwbGFuZV9pbnZhbGlkX3BhcmFtcyhpZ3RfcGlwZV90ICpwaXBlLAo+ICsJCQkJ wqBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKPiArCQkJCcKgaWd0X3BsYW5lX3QgKnBsYW5lLAo+ICsJ CQkJwqBzdHJ1Y3QgaWd0X2ZiICpmYikKPiDCoHsKPiAtCXN0cnVjdCBkcm1fbW9kZV9tb2RlaW5m byAqbW9kZSA9IGNydGMtPm1vZGUuZGF0YTsKPiAtCXN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0 YXRlIHBsYW5lID0gKnBsYW5lX29sZDsKPiAtCXVpbnQzMl90IGZvcm1hdCA9IHBsYW5lX2dldF9p Z3RfZm9ybWF0KCZwbGFuZSk7Cj4gLQlkcm1Nb2RlQXRvbWljUmVxICpyZXEgPSBkcm1Nb2RlQXRv bWljQWxsb2MoKTsKPiAtCXN0cnVjdCBpZ3RfZmIgZmI7Cj4gKwlzdHJ1Y3QgaWd0X2ZiIGZiMjsK PiDCoAo+IMKgCS8qIFBhc3MgYSBzZXJpZXMgb2YgaW52YWxpZCBvYmplY3QgSURzIGZvciB0aGUg RkIgSUQuICovCj4gLQlwbGFuZS5mYl9pZCA9IHBsYW5lLm9iajsKPiAtCXBsYW5lX2NvbW1pdF9h dG9taWNfZXJyKCZwbGFuZSwgcGxhbmVfb2xkLCByZXEsCj4gLQnCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsK PiArCWlndF9wbGFuZV9zZXRfcHJvcF92YWx1ZShwbGFuZSwgSUdUX1BMQU5FX0ZCX0lELCBwbGFu ZS0KPiA+ZHJtX3BsYW5lLT5wbGFuZV9pZCk7Cj4gKwlwbGFuZV9jb21taXRfYXRvbWljX2Vycihw bGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7Cj4gwqAKPiAtCXBsYW5lLmZiX2lkID0g Y3J0Yy0+b2JqOwo+IC0JcGxhbmVfY29tbWl0X2F0b21pY19lcnIoJnBsYW5lLCBwbGFuZV9vbGQs IHJlcSwKPiAtCcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOwo+ICsJaWd0X3BsYW5lX3NldF9wcm9wX3ZhbHVl KHBsYW5lLCBJR1RfUExBTkVfRkJfSUQsIHBpcGUtCj4gPmNydGNfaWQpOwo+ICsJcGxhbmVfY29t bWl0X2F0b21pY19lcnIocGxhbmUsIEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOwo+IMKgCj4g LQlwbGFuZS5mYl9pZCA9IGNvbm4tPm9iajsKPiAtCXBsYW5lX2NvbW1pdF9hdG9taWNfZXJyKCZw bGFuZSwgcGxhbmVfb2xkLCByZXEsCj4gLQnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsKPiArCWlndF9wbGFu ZV9zZXRfcHJvcF92YWx1ZShwbGFuZSwgSUdUX1BMQU5FX0ZCX0lELCBvdXRwdXQtCj4gPmlkKTsK PiArCXBsYW5lX2NvbW1pdF9hdG9taWNfZXJyKHBsYW5lLCBBVE9NSUNfUkVMQVhfTk9ORSwgRUlO VkFMKTsKPiDCoAo+IC0JcGxhbmUuZmJfaWQgPSBjcnRjLT5tb2RlLmlkOwo+IC0JcGxhbmVfY29t bWl0X2F0b21pY19lcnIoJnBsYW5lLCBwbGFuZV9vbGQsIHJlcSwKPiAtCcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEFUT01JQ19SRUxBWF9OT05FLCBFSU5W QUwpOwo+ICsJaWd0X3BsYW5lX3NldF9wcm9wX3ZhbHVlKHBsYW5lLCBJR1RfUExBTkVfRkJfSUQs IHBpcGUtCj4gPnZhbHVlc1tJR1RfQ1JUQ19NT0RFX0lEXSk7Cj4gKwlwbGFuZV9jb21taXRfYXRv bWljX2VycihwbGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7Cj4gwqAKPiAtCXBsYW5l LmZiX2lkID0gcGxhbmVfb2xkLT5mYl9pZDsKPiAtCXBsYW5lX2NvbW1pdF9hdG9taWMoJnBsYW5l LCByZXEsIEFUT01JQ19SRUxBWF9OT05FKTsKPiArCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIGZi KTsKPiArCXBsYW5lX2NvbW1pdChwbGFuZSwgQ09NTUlUX0FUT01JQywgQVRPTUlDX1JFTEFYX05P TkUpOwo+IMKgCj4gwqAJLyogUGFzcyBhIHNlcmllcyBvZiBpbnZhbGlkIG9iamVjdCBJRHMgZm9y IHRoZSBDUlRDIElELiAqLwo+IC0JcGxhbmUuY3J0Y19pZCA9IHBsYW5lLm9iajsKPiAtCXBsYW5l X2NvbW1pdF9hdG9taWNfZXJyKCZwbGFuZSwgcGxhbmVfb2xkLCByZXEsCj4gLQnCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBBVE9NSUNfUkVMQVhfTk9ORSwg RUlOVkFMKTsKPiArCWlndF9wbGFuZV9zZXRfcHJvcF92YWx1ZShwbGFuZSwgSUdUX1BMQU5FX0NS VENfSUQsIHBsYW5lLQo+ID5kcm1fcGxhbmUtPnBsYW5lX2lkKTsKPiArCXBsYW5lX2NvbW1pdF9h dG9taWNfZXJyKHBsYW5lLCBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsKPiDCoAo+IC0JcGxh bmUuY3J0Y19pZCA9IHBsYW5lLmZiX2lkOwo+IC0JcGxhbmVfY29tbWl0X2F0b21pY19lcnIoJnBs YW5lLCBwbGFuZV9vbGQsIHJlcSwKPiAtCcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOwo+ICsJaWd0X3BsYW5l X3NldF9wcm9wX3ZhbHVlKHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19JRCwgZmItCj4gPmZiX2lkKTsK PiArCXBsYW5lX2NvbW1pdF9hdG9taWNfZXJyKHBsYW5lLCBBVE9NSUNfUkVMQVhfTk9ORSwgRUlO VkFMKTsKPiDCoAo+IC0JcGxhbmUuY3J0Y19pZCA9IGNvbm4tPm9iajsKPiAtCXBsYW5lX2NvbW1p dF9hdG9taWNfZXJyKCZwbGFuZSwgcGxhbmVfb2xkLCByZXEsCj4gLQnCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFM KTsKPiArCWlndF9wbGFuZV9zZXRfcHJvcF92YWx1ZShwbGFuZSwgSUdUX1BMQU5FX0NSVENfSUQs IG91dHB1dC0KPiA+aWQpOwo+ICsJcGxhbmVfY29tbWl0X2F0b21pY19lcnIocGxhbmUsIEFUT01J Q19SRUxBWF9OT05FLCBFSU5WQUwpOwo+IMKgCj4gLQlwbGFuZS5jcnRjX2lkID0gY3J0Yy0+bW9k ZS5pZDsKPiAtCXBsYW5lX2NvbW1pdF9hdG9taWNfZXJyKCZwbGFuZSwgcGxhbmVfb2xkLCByZXEs Cj4gLQnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBBVE9N SUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsKPiArCWlndF9wbGFuZV9zZXRfcHJvcF92YWx1ZShwbGFu ZSwgSUdUX1BMQU5FX0NSVENfSUQsIHBpcGUtCj4gPnZhbHVlc1tJR1RfQ1JUQ19NT0RFX0lEXSk7 Cj4gKwlwbGFuZV9jb21taXRfYXRvbWljX2VycihwbGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVJ TlZBTCk7Cj4gwqAKPiAtCXBsYW5lLmNydGNfaWQgPSBwbGFuZV9vbGQtPmNydGNfaWQ7Cj4gLQlw bGFuZV9jb21taXRfYXRvbWljKCZwbGFuZSwgcmVxLCBBVE9NSUNfUkVMQVhfTk9ORSk7Cj4gKwlp Z3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBmYik7Cj4gKwlwbGFuZV9jb21taXQocGxhbmUsIENPTU1J VF9BVE9NSUMsIEFUT01JQ19SRUxBWF9OT05FKTsKPiDCoAo+IMKgCS8qIENyZWF0ZSBhIGZyYW1l YnVmZmVyIHRvbyBzbWFsbCBmb3IgdGhlIHBsYW5lCj4gY29uZmlndXJhdGlvbi4gKi8KPiAtCWln dF9yZXF1aXJlKGZvcm1hdCAhPSAwKTsKPiArCWlndF9jcmVhdGVfcGF0dGVybl9mYihwaXBlLT5k aXNwbGF5LT5kcm1fZmQsCj4gKwkJCcKgwqDCoMKgwqDCoGZiLT53aWR0aCAtIDEsIGZiLT5oZWln aHQgLSAxLAo+ICsJCQnCoMKgwqDCoMKgwqBmYi0+ZHJtX2Zvcm1hdCwgSTkxNV9USUxJTkdfTk9O RSwKPiAmZmIyKTsKPiDCoAo+IC0JcGxhbmUuc3JjX3ggPSAwOwo+IC0JcGxhbmUuc3JjX3kgPSAw Owo+IC0JcGxhbmUuc3JjX3cgPSBtb2RlLT5oZGlzcGxheSA8PCAxNjsKPiAtCXBsYW5lLnNyY19o ID0gbW9kZS0+dmRpc3BsYXkgPDwgMTY7Cj4gLQlwbGFuZS5jcnRjX3ggPSAwOwo+IC0JcGxhbmUu Y3J0Y195ID0gMDsKPiAtCXBsYW5lLmNydGNfdyA9IG1vZGUtPmhkaXNwbGF5Owo+IC0JcGxhbmUu Y3J0Y19oID0gbW9kZS0+dmRpc3BsYXk7Cj4gLQlwbGFuZS5jcnRjX2lkID0gY3J0Yy0+b2JqOwo+ IC0JcGxhbmUuZmJfaWQgPSBpZ3RfY3JlYXRlX3BhdHRlcm5fZmIocGxhbmUuc3RhdGUtPmRlc2Mt PmZkLAo+IC0JCQkJCcKgwqDCoMKgcGxhbmUuY3J0Y193IC0gMSwKPiBwbGFuZS5jcnRjX2ggLSAx LAo+IC0JCQkJCcKgwqDCoMKgZm9ybWF0LAo+IEk5MTVfVElMSU5HX05PTkUsICZmYik7Cj4gLQo+ IC0JcGxhbmVfY29tbWl0X2F0b21pY19lcnIoJnBsYW5lLCBwbGFuZV9vbGQsIHJlcSwKPiAtCcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEFUT01JQ19SRUxB WF9OT05FLCBFTk9TUEMpOwo+ICsJaWd0X3BsYW5lX3NldF9wcm9wX3ZhbHVlKHBsYW5lLCBJR1Rf UExBTkVfRkJfSUQsIGZiMi5mYl9pZCk7Cj4gKwlwbGFuZV9jb21taXRfYXRvbWljX2VycihwbGFu ZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVOT1NQQyk7Cj4gwqAKPiDCoAkvKiBSZXN0b3JlIHRoZSBw cmltYXJ5IHBsYW5lIGFuZCBjaGVjayB0aGUgc3RhdGUgbWF0Y2hlcyB0aGUKPiBvbGQuICovCj4g LQlwbGFuZV9jb21taXRfYXRvbWljKHBsYW5lX29sZCwgcmVxLCBBVE9NSUNfUkVMQVhfTk9ORSk7 Cj4gLQo+IC0JZHJtTW9kZUF0b21pY0ZyZWUocmVxKTsKPiArCWlndF9wbGFuZV9zZXRfZmIocGxh bmUsIGZiKTsKPiArCXBsYW5lX2NvbW1pdChwbGFuZSwgQ09NTUlUX0FUT01JQywgQVRPTUlDX1JF TEFYX05PTkUpOwo+IMKgfQo+IMKgCj4gLXN0YXRpYyB2b2lkIHBsYW5lX2ludmFsaWRfcGFyYW1z X2ZlbmNlKHN0cnVjdCBrbXNfYXRvbWljX2NydGNfc3RhdGUKPiAqY3J0YywKPiAtCQkJCXN0cnVj dCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlCj4gKnBsYW5lX29sZCwKPiAtCQkJCXN0cnVjdCBrbXNf YXRvbWljX2Nvbm5lY3Rvcl9zdGF0ZQo+ICpjb25uKQo+ICtzdGF0aWMgdm9pZCBwbGFuZV9pbnZh bGlkX3BhcmFtc19mZW5jZShpZ3RfcGlwZV90ICpwaXBlLAo+ICsJCQkJwqDCoMKgwqDCoMKgwqBp Z3Rfb3V0cHV0X3QgKm91dHB1dCwKPiArCQkJCcKgwqDCoMKgwqDCoMKgaWd0X3BsYW5lX3QgKnBs YW5lKQo+IMKgewo+IC0Jc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgcGxhbmUgPSAqcGxh bmVfb2xkOwo+IC0JZHJtTW9kZUF0b21pY1JlcSAqcmVxID0gZHJtTW9kZUF0b21pY0FsbG9jKCk7 Cj4gwqAJaW50IHRpbWVsaW5lLCBmZW5jZV9mZDsKPiDCoAo+IMKgCWlndF9yZXF1aXJlX3N3X3N5 bmMoKTsKPiDCoAo+ICsJdGltZWxpbmUgPSBzd19zeW5jX3RpbWVsaW5lX2NyZWF0ZSgpOwo+ICsK PiDCoAkvKiBpbnZhbGlkIGZlbmNlIGZkICovCj4gLQlwbGFuZS5mZW5jZV9mZCA9IHBsYW5lLnN0 YXRlLT5kZXNjLT5mZDsKPiAtCXBsYW5lLmNydGNfaWQgPSBwbGFuZV9vbGQtPmNydGNfaWQ7Cj4g LQlwbGFuZV9jb21taXRfYXRvbWljX2VycigmcGxhbmUsIHBsYW5lX29sZCwgcmVxLAo+IC0JwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQVRPTUlDX1JFTEFY X05PTkUsIEVJTlZBTCk7Cj4gKwlpZ3RfcGxhbmVfc2V0X2ZlbmNlX2ZkKHBsYW5lLCBwaXBlLT5k aXNwbGF5LT5kcm1fZmQpOwo+ICsJcGxhbmVfY29tbWl0X2F0b21pY19lcnIocGxhbmUsIEFUT01J Q19SRUxBWF9OT05FLCBFSU5WQUwpOwo+IMKgCj4gwqAJLyogVmFsaWQgZmVuY2VfZmQgYnV0IGlu dmFsaWQgQ1JUQyAqLwo+IC0JdGltZWxpbmUgPSBzd19zeW5jX3RpbWVsaW5lX2NyZWF0ZSgpOwo+ IC0JZmVuY2VfZmQgPcKgwqBzd19zeW5jX3RpbWVsaW5lX2NyZWF0ZV9mZW5jZSh0aW1lbGluZSwg MSk7Cj4gLQlwbGFuZS5mZW5jZV9mZCA9IGZlbmNlX2ZkOwo+IC0JcGxhbmUuY3J0Y19pZCA9IH4w VTsKPiAtCXBsYW5lX2NvbW1pdF9hdG9taWNfZXJyKCZwbGFuZSwgcGxhbmVfb2xkLCByZXEsCj4g LQnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBBVE9NSUNf UkVMQVhfTk9ORSwgRUlOVkFMKTsKPiArCWZlbmNlX2ZkID0gc3dfc3luY190aW1lbGluZV9jcmVh dGVfZmVuY2UodGltZWxpbmUsIDEpOwo+ICsKPiArCWlndF9wbGFuZV9zZXRfcHJvcF92YWx1ZShw bGFuZSwgSUdUX1BMQU5FX0NSVENfSUQsIH4wKTsKPiArCWlndF9wbGFuZV9zZXRfZmVuY2VfZmQo cGxhbmUsIGZlbmNlX2ZkKTsKPiArCXBsYW5lX2NvbW1pdF9hdG9taWNfZXJyKHBsYW5lLCBBVE9N SUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsKPiArCj4gKwlzd19zeW5jX3RpbWVsaW5lX2luYyh0aW1l bGluZSwgMSk7Cj4gKwlpZ3RfcGxhbmVfc2V0X3Byb3BfdmFsdWUocGxhbmUsIElHVF9QTEFORV9D UlRDX0lELCBwaXBlLQo+ID5jcnRjX2lkKTsKPiArCXBsYW5lX2NvbW1pdChwbGFuZSwgQ09NTUlU X0FUT01JQywgQVRPTUlDX1JFTEFYX05PTkUpOwo+IMKgCj4gLQlwbGFuZS5mZW5jZV9mZCA9IC0x Owo+IMKgCWNsb3NlKGZlbmNlX2ZkKTsKPiDCoAljbG9zZSh0aW1lbGluZSk7Cj4gLQo+IC0JZHJt TW9kZUF0b21pY0ZyZWUocmVxKTsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgdm9pZCBjcnRjX2ludmFs aWRfcGFyYW1zKHN0cnVjdCBrbXNfYXRvbWljX2NydGNfc3RhdGUKPiAqY3J0Y19vbGQsCj4gLQkJ CQlzdHJ1Y3Qga21zX2F0b21pY19wbGFuZV9zdGF0ZQo+ICpwbGFuZSwKPiAtCQkJCXN0cnVjdCBr bXNfYXRvbWljX2Nvbm5lY3Rvcl9zdGF0ZQo+ICpjb25uKQo+ICtzdGF0aWMgdm9pZCBjcnRjX2lu dmFsaWRfcGFyYW1zKGlndF9waXBlX3QgKnBpcGUsCj4gKwkJCQlpZ3Rfb3V0cHV0X3QgKm91dHB1 dCwKPiArCQkJCWlndF9wbGFuZV90ICpwbGFuZSwKPiArCQkJCXN0cnVjdCBpZ3RfZmIgKmZiKQo+ IMKgewo+IC0Jc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSBjcnRjID0gKmNydGNfb2xkOwo+ IC0JZHJtTW9kZUF0b21pY1JlcSAqcmVxID0gZHJtTW9kZUF0b21pY0FsbG9jKCk7Cj4gLQo+IC0J aWd0X2Fzc2VydChyZXEpOwo+ICsJdWludDY0X3Qgb2xkX21vZGVfaWQgPSBwaXBlLT52YWx1ZXNb SUdUX0NSVENfTU9ERV9JRF07Cj4gKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGUgPSBpZ3Rfb3V0cHV0 X2dldF9tb2RlKG91dHB1dCk7Cj4gwqAKPiDCoAkvKiBQYXNzIGEgc2VyaWVzIG9mIGludmFsaWQg b2JqZWN0IElEcyBmb3IgdGhlIG1vZGUgSUQuICovCj4gLQljcnRjLm1vZGUuaWQgPSBwbGFuZS0+ b2JqOwo+IC0JY3J0Y19jb21taXRfYXRvbWljX2VycigmY3J0YywgcGxhbmUsIGNydGNfb2xkLCBw bGFuZSwgcmVxLAo+IDAsCj4gLQnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7Cj4gKwlpZ3RfcGlwZV9vYmpfc2V0 X3Byb3BfdmFsdWUocGlwZSwgSUdUX0NSVENfTU9ERV9JRCwgcGxhbmUtCj4gPmRybV9wbGFuZS0+ cGxhbmVfaWQpOwo+ICsJY3J0Y19jb21taXRfYXRvbWljX2VycihwaXBlLCBwbGFuZSwgQVRPTUlD X1JFTEFYX05PTkUsCj4gRUlOVkFMKTsKPiDCoAo+IC0JY3J0Yy5tb2RlLmlkID0gY3J0Yy5vYmo7 Cj4gLQljcnRjX2NvbW1pdF9hdG9taWNfZXJyKCZjcnRjLCBwbGFuZSwgY3J0Y19vbGQsIHBsYW5l LCByZXEsCj4gMCwKPiAtCcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsKPiArCWlndF9waXBlX29ial9zZXRfcHJv cF92YWx1ZShwaXBlLCBJR1RfQ1JUQ19NT0RFX0lELCBwaXBlLQo+ID5jcnRjX2lkKTsKPiArCWNy dGNfY29tbWl0X2F0b21pY19lcnIocGlwZSwgcGxhbmUsIEFUT01JQ19SRUxBWF9OT05FLAo+IEVJ TlZBTCk7Cj4gwqAKPiAtCWNydGMubW9kZS5pZCA9IGNvbm4tPm9iajsKPiAtCWNydGNfY29tbWl0 X2F0b21pY19lcnIoJmNydGMsIHBsYW5lLCBjcnRjX29sZCwgcGxhbmUsIHJlcSwKPiAwLAo+IC0J wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEFUT01JQ19SRUxB WF9OT05FLCBFSU5WQUwpOwo+ICsJaWd0X3BpcGVfb2JqX3NldF9wcm9wX3ZhbHVlKHBpcGUsIElH VF9DUlRDX01PREVfSUQsIG91dHB1dC0KPiA+aWQpOwo+ICsJY3J0Y19jb21taXRfYXRvbWljX2Vy cihwaXBlLCBwbGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsCj4gRUlOVkFMKTsKPiDCoAo+IC0JY3J0 Yy5tb2RlLmlkID0gcGxhbmUtPmZiX2lkOwo+IC0JY3J0Y19jb21taXRfYXRvbWljX2VycigmY3J0 YywgcGxhbmUsIGNydGNfb2xkLCBwbGFuZSwgcmVxLAo+IDAsCj4gLQnCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7 Cj4gKwlpZ3RfcGlwZV9vYmpfc2V0X3Byb3BfdmFsdWUocGlwZSwgSUdUX0NSVENfTU9ERV9JRCwg ZmItCj4gPmZiX2lkKTsKPiArCWNydGNfY29tbWl0X2F0b21pY19lcnIocGlwZSwgcGxhbmUsIEFU T01JQ19SRUxBWF9OT05FLAo+IEVJTlZBTCk7Cj4gwqAKPiAtCS8qIHN1Y2Nlc3NmdWwgVEVTVF9P TkxZIHdpdGggZmVuY2VzIHNldCAqLwo+IC0JY3J0Yy5tb2RlLmlkID0gY3J0Y19vbGQtPm1vZGUu aWQ7Cj4gLQljcnRjX2NvbW1pdF9hdG9taWMoJmNydGMsIHBsYW5lLCByZXEsIEFUT01JQ19SRUxB WF9OT05FLAo+IC0JCQnCoMKgwqBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZKTsKPiArCS8qIENh biB3ZSByZXN0b3JlIG1vZGU/ICovCj4gKwlpZ3RfcGlwZV9vYmpfc2V0X3Byb3BfdmFsdWUocGlw ZSwgSUdUX0NSVENfTU9ERV9JRCwKPiBvbGRfbW9kZV9pZCk7Cj4gKwljcnRjX2NvbW1pdF9hdG9t aWNfZmxhZ3NfZXJyKHBpcGUsIHBsYW5lLAo+IERSTV9NT0RFX0FUT01JQ19URVNUX09OTFksIEFU T01JQ19SRUxBWF9OT05FLCAwKTsKPiDCoAo+IMKgCS8qCj4gwqAJwqAqIFRFU1RfT05MWSBjYW5u b3QgYmUgY29tYmluZWQgd2l0aAo+IERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVCwKPiDCoAnCoCog YnV0IERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVCB3aWxsIGFsd2F5cyBnZW5lcmF0ZSBFSU5WQUwK PiDCoAnCoCogd2l0aG91dCB2YWxpZCBjcnRjLCBzbyB0ZXN0IGl0IGhlcmUuCj4gwqAJwqAqLwo+ IC0JY3J0Y19jb21taXRfYXRvbWljX2VycigmY3J0YywgcGxhbmUsIGNydGNfb2xkLCBwbGFuZSwg cmVxLAo+IC0JCQnCoMKgwqDCoMKgwqDCoERSTV9NT0RFX0FUT01JQ19URVNUX09OTFkgfAo+IERS TV9NT0RFX1BBR0VfRkxJUF9FVkVOVCwKPiAtCQkJwqDCoMKgwqDCoMKgwqBBVE9NSUNfUkVMQVhf Tk9ORSwgRUlOVkFMKTsKPiArCWNydGNfY29tbWl0X2F0b21pY19mbGFnc19lcnIocGlwZSwgcGxh bmUsCj4gKwkJCQnCoMKgwqDCoMKgRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSB8Cj4gRFJNX01P REVfUEFHRV9GTElQX0VWRU5ULAo+ICsJCQkJwqDCoMKgwqDCoEFUT01JQ19SRUxBWF9OT05FLCBF SU5WQUwpOwo+IMKgCj4gwqAJLyogQ3JlYXRlIGEgYmxvYiB3aGljaCBpcyB0aGUgd3Jvbmcgc2l6 ZSB0byBiZSBhIHZhbGlkIG1vZGUuCj4gKi8KPiAtCWRvX29yX2RpZShkcm1Nb2RlQ3JlYXRlUHJv cGVydHlCbG9iKGNydGMuc3RhdGUtPmRlc2MtPmZkLAo+IC0JCQkJCcKgwqDCoMKgY3J0Yy5tb2Rl LmRhdGEsCj4gLQkJCQkJwqDCoMKgwqBzaXplb2Yoc3RydWN0Cj4gZHJtX21vZGVfbW9kZWluZm8p IC0gMSwKPiAtCQkJCQnCoMKgwqDCoCZjcnRjLm1vZGUuaWQpKTsKPiAtCWNydGNfY29tbWl0X2F0 b21pY19lcnIoJmNydGMsIHBsYW5lLCBjcnRjX29sZCwgcGxhbmUsIHJlcSwKPiAwLAo+IC0JwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEFUT01JQ19SRUxBWF9O T05FLCBFSU5WQUwpOwo+ICsJaWd0X3BpcGVfb2JqX3JlcGxhY2VfcHJvcF9ibG9iKHBpcGUsIElH VF9DUlRDX01PREVfSUQsIG1vZGUsCj4gc2l6ZW9mKCptb2RlKSAtIDEpOwo+ICsJY3J0Y19jb21t aXRfYXRvbWljX2VycihwaXBlLCBwbGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsCj4gRUlOVkFMKTsK PiDCoAo+IC0KPiAtCWRvX29yX2RpZShkcm1Nb2RlQ3JlYXRlUHJvcGVydHlCbG9iKGNydGMuc3Rh dGUtPmRlc2MtPmZkLAo+IC0JCQkJCcKgwqDCoMKgY3J0Yy5tb2RlLmRhdGEsCj4gLQkJCQkJwqDC oMKgwqBzaXplb2Yoc3RydWN0Cj4gZHJtX21vZGVfbW9kZWluZm8pICsgMSwKPiAtCQkJCQnCoMKg wqDCoCZjcnRjLm1vZGUuaWQpKTsKPiAtCWNydGNfY29tbWl0X2F0b21pY19lcnIoJmNydGMsIHBs YW5lLCBjcnRjX29sZCwgcGxhbmUsIHJlcSwKPiAwLAo+IC0JwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOwo+ICsJ aWd0X3BpcGVfb2JqX3JlcGxhY2VfcHJvcF9ibG9iKHBpcGUsIElHVF9DUlRDX01PREVfSUQsIG1v ZGUsCj4gc2l6ZW9mKCptb2RlKSArIDEpOwo+ICsJY3J0Y19jb21taXRfYXRvbWljX2VycihwaXBl LCBwbGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsCj4gRUlOVkFMKTsKPiDCoAo+IMKgCj4gwqAJLyog UmVzdG9yZSB0aGUgQ1JUQyBhbmQgY2hlY2sgdGhlIHN0YXRlIG1hdGNoZXMgdGhlIG9sZC4gKi8K PiAtCWNydGNfY29tbWl0X2F0b21pYyhjcnRjX29sZCwgcGxhbmUsIHJlcSwgQVRPTUlDX1JFTEFY X05PTkUsCj4gMCk7Cj4gLQo+IC0JZHJtTW9kZUF0b21pY0ZyZWUocmVxKTsKPiArCWlndF9waXBl X29ial9yZXBsYWNlX3Byb3BfYmxvYihwaXBlLCBJR1RfQ1JUQ19NT0RFX0lELCBtb2RlLAo+IHNp emVvZigqbW9kZSkpOwo+ICsJY3J0Y19jb21taXQocGlwZSwgcGxhbmUsIENPTU1JVF9BVE9NSUMs IEFUT01JQ19SRUxBWF9OT05FKTsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgdm9pZCBjcnRjX2ludmFs aWRfcGFyYW1zX2ZlbmNlKHN0cnVjdCBrbXNfYXRvbWljX2NydGNfc3RhdGUKPiAqY3J0Y19vbGQs Cj4gLQkJCQlzdHJ1Y3Qga21zX2F0b21pY19wbGFuZV9zdGF0ZQo+ICpwbGFuZSwKPiAtCQkJCXN0 cnVjdCBrbXNfYXRvbWljX2Nvbm5lY3Rvcl9zdGF0ZQo+ICpjb25uKQo+ICtzdGF0aWMgdm9pZCBj cnRjX2ludmFsaWRfcGFyYW1zX2ZlbmNlKGlndF9waXBlX3QgKnBpcGUsCj4gKwkJCQnCoMKgwqDC oMKgwqBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKPiArCQkJCcKgwqDCoMKgwqDCoGlndF9wbGFuZV90 ICpwbGFuZSwKPiArCQkJCcKgwqDCoMKgwqDCoHN0cnVjdCBpZ3RfZmIgKmZiKQo+IMKgewo+IC0J c3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSBjcnRjID0gKmNydGNfb2xkOwo+IC0JZHJtTW9k ZUF0b21pY1JlcSAqcmVxID0gZHJtTW9kZUF0b21pY0FsbG9jKCk7Cj4gLQlpbnQgdGltZWxpbmUs IGZlbmNlX2ZkLCAqb3V0X2ZlbmNlOwo+ICsJaW50IHRpbWVsaW5lLCBmZW5jZV9mZDsKPiArCXZv aWQgKm1hcDsKPiArCWNvbnN0IHB0cmRpZmZfdCBQQUdFX1NJWkUgPSBzeXNjb25mKF9TQ19QQUdF X1NJWkUpOwo+ICsJdWludDY0X3Qgb2xkX21vZGVfaWQgPSBwaXBlLT52YWx1ZXNbSUdUX0NSVENf TU9ERV9JRF07Cj4gwqAKPiDCoAlpZ3RfcmVxdWlyZV9zd19zeW5jKCk7Cj4gwqAKPiArCXRpbWVs aW5lID0gc3dfc3luY190aW1lbGluZV9jcmVhdGUoKTsKPiArCj4gKwkvKiBpbnZhbGlkIG91dF9m ZW5jZV9wdHIgKi8KPiArCW1hcCA9IG1tYXAoTlVMTCwgUEFHRV9TSVpFLCBQUk9UX1JFQUQsIE1B UF9BTk9OWU1PVVMgfAo+IE1BUF9QUklWQVRFLCAtMSwgMCk7Cj4gKwlpZ3RfYXNzZXJ0KG1hcCAh PSBNQVBfRkFJTEVEKTsKPiArCj4gKwlpZ3RfcGlwZV9vYmpfc2V0X3Byb3BfdmFsdWUocGlwZSwg SUdUX0NSVENfT1VUX0ZFTkNFX1BUUiwKPiAocHRyZGlmZl90KW1hcCk7Cj4gKwljcnRjX2NvbW1p dF9hdG9taWNfZXJyKHBpcGUsIHBsYW5lLCBBVE9NSUNfUkVMQVhfTk9ORSwKPiBFRkFVTFQpOwo+ ICsJbXVubWFwKG1hcCwgUEFHRV9TSVpFKTsKPiArCj4gwqAJLyogaW52YWxpZCBvdXRfZmVuY2Vf cHRyICovCj4gLQljcnRjLm1vZGUuaWQgPSBjcnRjX29sZC0+bW9kZS5pZDsKPiAtCWNydGMub3V0 X2ZlbmNlX3B0ciA9IChpbnQzMl90ICopIGNydGNfaW52YWxpZF9wYXJhbXM7Cj4gLQljcnRjX2Nv bW1pdF9hdG9taWNfZXJyKCZjcnRjLCBwbGFuZSwgY3J0Y19vbGQsIHBsYW5lLCByZXEsCj4gMCwK PiAtCcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBBVE9NSUNf UkVMQVhfTk9ORSwgRUZBVUxUKTsKPiArCW1hcCA9IG1tYXAoTlVMTCwgUEFHRV9TSVpFLCBQUk9U X0VYRUMsIE1BUF9BTk9OWU1PVVMgfAo+IE1BUF9QUklWQVRFLCAtMSwgMCk7Cj4gKwlpZ3RfYXNz ZXJ0KG1hcCAhPSBNQVBfRkFJTEVEKTsKPiArCj4gKwlpZ3RfcGlwZV9vYmpfc2V0X3Byb3BfdmFs dWUocGlwZSwgSUdUX0NSVENfT1VUX0ZFTkNFX1BUUiwKPiAocHRyZGlmZl90KW1hcCk7Cj4gKwlj cnRjX2NvbW1pdF9hdG9taWNfZXJyKHBpcGUsIHBsYW5lLCBBVE9NSUNfUkVMQVhfTk9ORSwKPiBF RkFVTFQpOwo+ICsJbXVubWFwKG1hcCwgUEFHRV9TSVpFKTsKPiDCoAo+IMKgCS8qIGludmFsaWQg b3V0X2ZlbmNlX3B0ciAqLwo+IC0JY3J0Yy5tb2RlLmlkID0gY3J0Y19vbGQtPm1vZGUuaWQ7Cj4g LQljcnRjLm91dF9mZW5jZV9wdHIgPSAoaW50MzJfdCAqKSAweDg7Cj4gLQljcnRjX2NvbW1pdF9h dG9taWNfZXJyKCZjcnRjLCBwbGFuZSwgY3J0Y19vbGQsIHBsYW5lLCByZXEsCj4gMCwKPiAtCcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBBVE9NSUNfUkVMQVhf Tk9ORSwgRUZBVUxUKTsKPiAtCWNydGMub3V0X2ZlbmNlX3B0ciA9IChpbnQzMl90ICopIDA7Cj4g KwltYXAgPSBtbWFwKE5VTEwsIFBBR0VfU0laRSwgUFJPVF9OT05FLCBNQVBfQU5PTllNT1VTIHwK PiBNQVBfUFJJVkFURSwgLTEsIDApOwo+ICsJaWd0X2Fzc2VydChtYXAgIT0gTUFQX0ZBSUxFRCk7 Cj4gKwo+ICsJaWd0X3BpcGVfb2JqX3NldF9wcm9wX3ZhbHVlKHBpcGUsIElHVF9DUlRDX09VVF9G RU5DRV9QVFIsCj4gKHB0cmRpZmZfdCltYXApOwo+ICsJY3J0Y19jb21taXRfYXRvbWljX2Vycihw aXBlLCBwbGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsCj4gRUZBVUxUKTsKPiArCW11bm1hcChtYXAs IFBBR0VfU0laRSk7Cj4gwqAKPiDCoAkvKiB2YWxpZCBpbiBmZW5jZSBidXQgbm90IGFsbG93ZWQg cHJvcCBvbiBjcnRjICovCj4gLQl0aW1lbGluZSA9IHN3X3N5bmNfdGltZWxpbmVfY3JlYXRlKCk7 Cj4gLQlmZW5jZV9mZCA9wqDCoHN3X3N5bmNfdGltZWxpbmVfY3JlYXRlX2ZlbmNlKHRpbWVsaW5l LCAxKTsKPiAtCXBsYW5lLT5mZW5jZV9mZCA9IGZlbmNlX2ZkOwo+IC0JY3J0Yy5hY3RpdmUgPSBm YWxzZTsKPiAtCWNydGNfY29tbWl0X2F0b21pY19lcnIoJmNydGMsIHBsYW5lLCBjcnRjX29sZCwg cGxhbmUsIHJlcSwKPiAwLAo+IC0JCQnCoMKgwqDCoMKgwqDCoEFUT01JQ19SRUxBWF9OT05FLCBF SU5WQUwpOwo+ICsJZmVuY2VfZmQgPSBzd19zeW5jX3RpbWVsaW5lX2NyZWF0ZV9mZW5jZSh0aW1l bGluZSwgMSk7Cj4gKwlpZ3RfcGxhbmVfc2V0X2ZlbmNlX2ZkKHBsYW5lLCBmZW5jZV9mZCk7Cj4g wqAKPiAtCW91dF9mZW5jZSA9IG1hbGxvYyhzaXplb2YodWludDY0X3QpKTsKPiAtCWlndF9hc3Nl cnQob3V0X2ZlbmNlKTsKPiArCWlndF9waXBlX29ial9zZXRfcHJvcF92YWx1ZShwaXBlLCBJR1Rf Q1JUQ19BQ1RJVkUsIDApOwo+ICsJaWd0X3BpcGVfb2JqX2NsZWFyX3Byb3BfY2hhbmdlZChwaXBl LAo+IElHVF9DUlRDX09VVF9GRU5DRV9QVFIpOwo+IMKgCj4gKwljcnRjX2NvbW1pdF9hdG9taWNf ZmxhZ3NfZXJyKHBpcGUsIHBsYW5lLCAwLAo+IEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOwo+ IMKgCj4gwqAJLyogdmFsaWQgb3V0IGZlbmNlIHB0ciBhbmQgZmxpcCBldmVudCBidXQgbm90IGFs bG93ZWQgcHJvcAo+IG9uIGNydGMgKi8KPiAtCWNydGMub3V0X2ZlbmNlX3B0ciA9IChpbnQzMl90 ICopIG91dF9mZW5jZTsKPiAtCWNydGNfY29tbWl0X2F0b21pY19lcnIoJmNydGMsIHBsYW5lLCBj cnRjX29sZCwgcGxhbmUsIHJlcSwKPiAwLAo+IC0JCQnCoMKgwqDCoMKgwqDCoEFUT01JQ19SRUxB WF9OT05FLCBFSU5WQUwpOwo+ICsJaWd0X3BpcGVfcmVxdWVzdF9vdXRfZmVuY2UocGlwZSk7Cj4g KwljcnRjX2NvbW1pdF9hdG9taWNfZmxhZ3NfZXJyKHBpcGUsIHBsYW5lLAo+IERSTV9NT0RFX1BB R0VfRkxJUF9FVkVOVCwKPiArCQkJCcKgwqDCoMKgwqBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFM KTsKPiDCoAo+IC0JLyogdmFsaWQgb3V0IGZlbmNlIHB0ciBhbmQgZmxpcCBldmVudCBidXQgbm90 IGFsbG93ZWQgcHJvcAo+IG9uIGNydGMgKi8KPiAtCWNydGNfY29tbWl0X2F0b21pY19lcnIoJmNy dGMsIHBsYW5lLCBjcnRjX29sZCwgcGxhbmUsIHJlcSwKPiAtCQkJwqDCoMKgwqDCoMKgwqBEUk1f TU9ERV9QQUdFX0ZMSVBfRVZFTlQsCj4gLQkJCcKgwqDCoMKgwqDCoMKgQVRPTUlDX1JFTEFYX05P TkUsIEVJTlZBTCk7Cj4gLQo+IC0JLyogdmFsaWQgcGFnZSBmbGlwIGV2ZW50IGJ1dCBub3QgYWxs b3dlZCBwcm9wIG9uIGNydGMgKi8KPiAtCWNydGMub3V0X2ZlbmNlX3B0ciA9IChpbnQzMl90ICop IDA7Cj4gLQljcnRjX2NvbW1pdF9hdG9taWNfZXJyKCZjcnRjLCBwbGFuZSwgY3J0Y19vbGQsIHBs YW5lLCByZXEsCj4gLQkJCcKgwqDCoMKgwqDCoMKgRFJNX01PREVfUEFHRV9GTElQX0VWRU5ULAo+ IC0JCQnCoMKgwqDCoMKgwqDCoEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOwo+IC0JY3J0Yy5h Y3RpdmUgPSB0cnVlOwo+IC0KPiAtCS8qIHZhbGlkIG91dCBmZW5jZcKgwqBwdHIgYW5kIGZsaXAg ZXZlbnQgYnV0IGludmFsaWQgcHJvcCBvbgo+IGNydGMgKi8KPiAtCWNydGMub3V0X2ZlbmNlX3B0 ciA9IChpbnQzMl90ICopIG91dF9mZW5jZTsKPiAtCWNydGMubW9kZS5pZCA9IHBsYW5lLT5mYl9p ZDsKPiAtCWNydGNfY29tbWl0X2F0b21pY19lcnIoJmNydGMsIHBsYW5lLCBjcnRjX29sZCwgcGxh bmUsIHJlcSwKPiAwLAo+IC0JCQnCoMKgwqDCoMKgwqDCoEFUT01JQ19SRUxBWF9OT05FLCBFSU5W QUwpOwo+ICsJLyogdmFsaWQgZmxpcCBldmVudCBidXQgbm90IGFsbG93ZWQgcHJvcCBvbiBjcnRj ICovCj4gKwlpZ3RfcGlwZV9vYmpfY2xlYXJfcHJvcF9jaGFuZ2VkKHBpcGUsCj4gSUdUX0NSVENf T1VUX0ZFTkNFX1BUUik7Cj4gKwljcnRjX2NvbW1pdF9hdG9taWNfZmxhZ3NfZXJyKHBpcGUsIHBs YW5lLAo+IERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVCwKPiArCQkJCcKgwqDCoMKgwqBBVE9NSUNf UkVMQVhfTk9ORSwgRUlOVkFMKTsKPiArCj4gKwlpZ3RfcGlwZV9vYmpfc2V0X3Byb3BfdmFsdWUo cGlwZSwgSUdUX0NSVENfQUNUSVZFLCAxKTsKPiArCj4gKwkvKiBDb25maWd1cmF0aW9uIHNob3Vs ZCBiZSB2YWxpZCBhZ2FpbiAqLwo+ICsJY3J0Y19jb21taXRfYXRvbWljX2ZsYWdzX2VycihwaXBl LCBwbGFuZSwKPiBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZLAo+ICsJCQkJwqDCoMKgwqDCoEFU T01JQ19SRUxBWF9OT05FLCAwKTsKPiArCj4gKwkvKiBTZXQgaW52YWxpZCBwcm9wICovCj4gKwlp Z3RfcGlwZV9vYmpfc2V0X3Byb3BfdmFsdWUocGlwZSwgSUdUX0NSVENfTU9ERV9JRCwgZmItCj4g PmZiX2lkKTsKPiArCj4gKwkvKiB2YWxpZCBvdXQgZmVuY2UgYnV0IGludmFsaWQgcHJvcCBvbiBj cnRjICovCj4gKwlpZ3RfcGlwZV9yZXF1ZXN0X291dF9mZW5jZShwaXBlKTsKPiArCWNydGNfY29t bWl0X2F0b21pY19mbGFnc19lcnIocGlwZSwgcGxhbmUsIDAsCj4gKwkJCQnCoMKgwqDCoMKgQVRP TUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7Cj4gwqAKPiDCoAkvKiB2YWxpZCBvdXQgZmVuY2UgcHRy IGFuZCBmbGlwIGV2ZW50IGJ1dCBpbnZhbGlkIHByb3Agb24KPiBjcnRjICovCj4gLQljcnRjX2Nv bW1pdF9hdG9taWNfZXJyKCZjcnRjLCBwbGFuZSwgY3J0Y19vbGQsIHBsYW5lLCByZXEsCj4gLQkJ CcKgwqDCoMKgwqDCoMKgRFJNX01PREVfUEFHRV9GTElQX0VWRU5ULAo+IC0JCQnCoMKgwqDCoMKg wqDCoEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOwo+ICsJY3J0Y19jb21taXRfYXRvbWljX2Zs YWdzX2VycihwaXBlLCBwbGFuZSwKPiBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQsCj4gKwkJCQnC oMKgwqDCoMKgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7Cj4gwqAKPiDCoAkvKiB2YWxpZCBw YWdlIGZsaXAgZXZlbnQgYnV0IGludmFsaWQgcHJvcCBvbiBjcnRjICovCj4gLQljcnRjLm91dF9m ZW5jZV9wdHIgPSAoaW50MzJfdCAqKSAwOwo+IC0JY3J0Y19jb21taXRfYXRvbWljX2VycigmY3J0 YywgcGxhbmUsIGNydGNfb2xkLCBwbGFuZSwgcmVxLAo+IC0JCQnCoMKgwqDCoMKgwqDCoERSTV9N T0RFX1BBR0VfRkxJUF9FVkVOVCwKPiAtCQkJwqDCoMKgwqDCoMKgwqBBVE9NSUNfUkVMQVhfTk9O RSwgRUlOVkFMKTsKPiArCWNydGNfY29tbWl0X2F0b21pY19mbGFnc19lcnIocGlwZSwgcGxhbmUs Cj4gRFJNX01PREVfUEFHRV9GTElQX0VWRU5ULAo+ICsJCQkJwqDCoMKgwqDCoEFUT01JQ19SRUxB WF9OT05FLCBFSU5WQUwpOwo+IMKgCj4gwqAJLyogc3VjY2Vzc2Z1bCBURVNUX09OTFkgd2l0aCBm ZW5jZXMgc2V0ICovCj4gLQlwbGFuZS0+ZmVuY2VfZmQgPSBmZW5jZV9mZDsKPiAtCWNydGMubW9k ZS5pZCA9IGNydGNfb2xkLT5tb2RlLmlkOwo+IC0JY3J0Y19jb21taXRfYXRvbWljKCZjcnRjLCBw bGFuZSwgcmVxLCBBVE9NSUNfUkVMQVhfTk9ORSwKPiAtCQkJwqDCoMKgRFJNX01PREVfQVRPTUlD X1RFU1RfT05MWSk7Cj4gLQlpZ3RfYXNzZXJ0KCpvdXRfZmVuY2UgPT0gLTEpOwo+ICsJaWd0X3Bp cGVfb2JqX3NldF9wcm9wX3ZhbHVlKHBpcGUsIElHVF9DUlRDX01PREVfSUQsCj4gb2xkX21vZGVf aWQpOwo+ICsJY3J0Y19jb21taXRfYXRvbWljX2ZsYWdzX2VycihwaXBlLCBwbGFuZSwKPiBEUk1f TU9ERV9BVE9NSUNfVEVTVF9PTkxZLAo+ICsJCQkJwqDCoMKgwqDCoEFUT01JQ19SRUxBWF9OT05F LCAwKTsKPiArCWlndF9hc3NlcnQocGlwZS0+b3V0X2ZlbmNlX2ZkID09IC0xKTsKPiDCoAljbG9z ZShmZW5jZV9mZCk7Cj4gwqAJY2xvc2UodGltZWxpbmUpOwo+IMKgCj4gwqAJLyogcmVzZXQgZmVu Y2VzICovCj4gLQlwbGFuZS0+ZmVuY2VfZmQgPSAtMTsKPiAtCWNydGMub3V0X2ZlbmNlX3B0ciA9 IChpbnQzMl90ICopIDA7Cj4gLQljcnRjX2NvbW1pdF9hdG9taWMoJmNydGMsIHBsYW5lLCByZXEs IEFUT01JQ19SRUxBWF9OT05FLCAwKTsKPiArCWlndF9wbGFuZV9zZXRfZmVuY2VfZmQocGxhbmUs IC0xKTsKPiArCWlndF9waXBlX29ial9zZXRfcHJvcF92YWx1ZShwaXBlLCBJR1RfQ1JUQ19PVVRf RkVOQ0VfUFRSLAo+IDApOwo+ICsJaWd0X3BpcGVfb2JqX2NsZWFyX3Byb3BfY2hhbmdlZChwaXBl LAo+IElHVF9DUlRDX09VVF9GRU5DRV9QVFIpOwo+ICsJY3J0Y19jb21taXQocGlwZSwgcGxhbmUs IENPTU1JVF9BVE9NSUMsIEFUT01JQ19SRUxBWF9OT05FKTsKPiDCoAo+IMKgCS8qIG91dCBmZW5j ZSBwdHIgYnV0IG5vdCBwYWdlIGZsaXAgZXZlbnQgKi8KPiAtCWNydGMub3V0X2ZlbmNlX3B0ciA9 IChpbnQzMl90ICopIG91dF9mZW5jZTsKPiAtCWNydGNfY29tbWl0X2F0b21pYyhjcnRjX29sZCwg cGxhbmUsIHJlcSwgQVRPTUlDX1JFTEFYX05PTkUsCj4gMCk7Cj4gKwlpZ3RfcGlwZV9yZXF1ZXN0 X291dF9mZW5jZShwaXBlKTsKPiArCWNydGNfY29tbWl0KHBpcGUsIHBsYW5lLCBDT01NSVRfQVRP TUlDLCBBVE9NSUNfUkVMQVhfTk9ORSk7Cj4gwqAKPiAtCWNsb3NlKCpvdXRfZmVuY2UpOwo+IC0J ZnJlZShvdXRfZmVuY2UpOwo+IC0JZHJtTW9kZUF0b21pY0ZyZWUocmVxKTsKPiArCWlndF9hc3Nl cnQocGlwZS0+b3V0X2ZlbmNlX2ZkICE9IC0xKTsKPiDCoH0KPiDCoAo+IMKgLyogQWJ1c2UgdGhl IGF0b21pYyBpb2N0bCBkaXJlY3RseSBpbiBvcmRlciB0byB0ZXN0IHZhcmlvdXMgaW52YWxpZAo+ IGNvbmRpdGlvbnMsCj4gwqAgKiB3aGljaCB0aGUgbGliZHJtIHdyYXBwZXIgd29uJ3QgYWxsb3cg dXMgdG8gY3JlYXRlLiAqLwo+IC1zdGF0aWMgdm9pZCBhdG9taWNfaW52YWxpZF9wYXJhbXMoc3Ry dWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZQo+ICpjcnRjLAo+IC0JCQkJwqDCoHN0cnVjdCBrbXNf YXRvbWljX3BsYW5lX3N0YXRlCj4gKnBsYW5lLAo+IC0JCQkJwqDCoHN0cnVjdCBrbXNfYXRvbWlj X2Nvbm5lY3Rvcl9zdGF0ZQo+ICpjb25uZWN0b3IpCj4gK3N0YXRpYyB2b2lkIGF0b21pY19pbnZh bGlkX3BhcmFtcyhpZ3RfcGlwZV90ICpwaXBlLAo+ICsJCQkJwqDCoGlndF9wbGFuZV90ICpwbGFu ZSwKPiArCQkJCcKgwqBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKPiArCQkJCcKgwqBzdHJ1Y3QgaWd0 X2ZiICpmYikKPiDCoHsKPiAtCXN0cnVjdCBrbXNfYXRvbWljX2Rlc2MgKmRlc2MgPSBjcnRjLT5z dGF0ZS0+ZGVzYzsKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSBwaXBlLT5kaXNwbGF5Owo+ IMKgCXN0cnVjdCBkcm1fbW9kZV9hdG9taWMgaW9jOwo+IMKgCXVpbnQzMl90IG9ial9yYXdbMTZd OyAvKiBhcnJheSBvZiBvYmplY3RzIChzaXplZCBieQo+IGNvdW50X29ianMpICovCj4gwqAJdWlu dDMyX3QgbnVtX3Byb3BzX3Jhd1sxNl07IC8qIGFycmF5IG9mIG51bSBwcm9wcyBwZXIgb2JqCj4g KGRpdHRvKSAqLwo+IEBAIC0xMzQ2LDcgKzcxOCw3IEBAIHN0YXRpYyB2b2lkIGF0b21pY19pbnZh bGlkX3BhcmFtcyhzdHJ1Y3QKPiBrbXNfYXRvbWljX2NydGNfc3RhdGUgKmNydGMsCj4gwqAJbWVt c2V0KCZpb2MsIDAsIHNpemVvZihpb2MpKTsKPiDCoAo+IMKgCS8qIEFuIGVtcHR5IHJlcXVlc3Qg c2hvdWxkIGRvIG5vdGhpbmcuICovCj4gLQlkb19pb2N0bChkZXNjLT5mZCwgRFJNX0lPQ1RMX01P REVfQVRPTUlDLCAmaW9jKTsKPiArCWRvX2lvY3RsKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RM X01PREVfQVRPTUlDLCAmaW9jKTsKPiDCoAo+IMKgCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF KG9ial9yYXcpOyBpKyspCj4gwqAJCW9ial9yYXdbaV0gPSAwOwo+IEBAIC0xMzYzLDI0OCArNzM1 LDIzMiBAQCBzdGF0aWMgdm9pZCBhdG9taWNfaW52YWxpZF9wYXJhbXMoc3RydWN0Cj4ga21zX2F0 b21pY19jcnRjX3N0YXRlICpjcnRjLAo+IMKgCWlvYy5wcm9wX3ZhbHVlc19wdHIgPSAodWludHB0 cl90KSB2YWx1ZXNfcmF3Owo+IMKgCj4gwqAJLyogVmFsaWQgcG9pbnRlcnMsIGJ1dCBzdGlsbCBz aG91bGQgY29weSBub3RoaW5nLiAqLwo+IC0JZG9faW9jdGwoZGVzYy0+ZmQsIERSTV9JT0NUTF9N T0RFX0FUT01JQywgJmlvYyk7Cj4gKwlkb19pb2N0bChkaXNwbGF5LT5kcm1fZmQsIERSTV9JT0NU TF9NT0RFX0FUT01JQywgJmlvYyk7Cj4gwqAKPiDCoAkvKiBWYWxpZCBub29wLCBidXQgd2l0aCBl dmVudCBzZXQgc2hvdWxkIGZhaWwuICovCj4gwqAJaW9jLmZsYWdzID0gRFJNX01PREVfUEFHRV9G TElQX0VWRU5UOwo+IC0JZG9faW9jdGxfZXJyKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9N SUMsICZpb2MsIEVJTlZBTCk7Cj4gKwlkb19pb2N0bF9lcnIoZGlzcGxheS0+ZHJtX2ZkLCBEUk1f SU9DVExfTU9ERV9BVE9NSUMsICZpb2MsCj4gRUlOVkFMKTsKPiDCoAo+IMKgCS8qIE5vbnNlbnNl IGZsYWdzLiAqLwo+IMKgCWlvYy5mbGFncyA9IDB4ZGVhZGJlZWY7Cj4gLQlkb19pb2N0bF9lcnIo ZGVzYy0+ZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYywgRUlOVkFMKTsKPiArCWRvX2lv Y3RsX2VycihkaXNwbGF5LT5kcm1fZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYywKPiBF SU5WQUwpOwo+IMKgCj4gwqAJaW9jLmZsYWdzID0gMDsKPiDCoAkvKiBTYWZldHkgY2hlY2sgdGhh dCBmbGFncyBpcyByZXNldCBwcm9wZXJseS4gKi8KPiAtCWRvX2lvY3RsKGRlc2MtPmZkLCBEUk1f SU9DVExfTU9ERV9BVE9NSUMsICZpb2MpOwo+ICsJZG9faW9jdGwoZGlzcGxheS0+ZHJtX2ZkLCBE Uk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MpOwo+IMKgCj4gwqAJLyogUmVzZXJ2ZWQvTUJaLiAq Lwo+IMKgCWlvYy5yZXNlcnZlZCA9IDE7Cj4gLQlkb19pb2N0bF9lcnIoZGVzYy0+ZmQsIERSTV9J T0NUTF9NT0RFX0FUT01JQywgJmlvYywgRUlOVkFMKTsKPiArCWRvX2lvY3RsX2VycihkaXNwbGF5 LT5kcm1fZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYywKPiBFSU5WQUwpOwo+IMKgCWlv Yy5yZXNlcnZlZCA9IDA7Cj4gLQlkb19pb2N0bChkZXNjLT5mZCwgRFJNX0lPQ1RMX01PREVfQVRP TUlDLCAmaW9jKTsKPiArCWRvX2lvY3RsKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01PREVf QVRPTUlDLCAmaW9jKTsKPiDCoAo+IMKgCS8qIFplcm8gaXMgbm90IGEgdmFsaWQgb2JqZWN0IElE LiAqLwo+IMKgCWlvYy5jb3VudF9vYmpzID0gQVJSQVlfU0laRShvYmpfcmF3KTsKPiAtCWRvX2lv Y3RsX2VycihkZXNjLT5mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBFTk9FTlQpOwo+ ICsJZG9faW9jdGxfZXJyKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAm aW9jLAo+IEVOT0VOVCk7Cj4gwqAKPiDCoAkvKiBJbnZhbGlkIG9iamVjdCB0eXBlIChub3QgYSB0 aGluZyB3ZSBjYW4gc2V0IHByb3BlcnRpZXMKPiBvbikuICovCj4gwqAJaW9jLmNvdW50X29ianMg PSAxOwo+IC0Jb2JqX3Jhd1swXSA9IGNydGMtPm1vZGUuaWQ7Cj4gLQlkb19pb2N0bF9lcnIoZGVz Yy0+ZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYywgRU5PRU5UKTsKPiAtCW9ial9yYXdb MF0gPSBwbGFuZS0+ZmJfaWQ7Cj4gLQlkb19pb2N0bF9lcnIoZGVzYy0+ZmQsIERSTV9JT0NUTF9N T0RFX0FUT01JQywgJmlvYywgRU5PRU5UKTsKPiArCW9ial9yYXdbMF0gPSBwaXBlLT52YWx1ZXNb SUdUX0NSVENfTU9ERV9JRF07Cj4gKwlkb19pb2N0bF9lcnIoZGlzcGxheS0+ZHJtX2ZkLCBEUk1f SU9DVExfTU9ERV9BVE9NSUMsICZpb2MsCj4gRU5PRU5UKTsKPiArCW9ial9yYXdbMF0gPSBmYi0+ ZmJfaWQ7Cj4gKwlkb19pb2N0bF9lcnIoZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9B VE9NSUMsICZpb2MsCj4gRU5PRU5UKTsKPiDCoAo+IMKgCS8qIEZpbGxlZCBvYmplY3QgYnV0IHdp dGggbm8gcHJvcGVydGllczsgbm8tb3AuICovCj4gwqAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUob2JqX3Jhdyk7IGkrKykKPiAtCQlvYmpfcmF3W2ldID0gY3J0Yy0+b2JqOwo+IC0JZG9faW9j dGwoZGVzYy0+ZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYyk7Cj4gKwkJb2JqX3Jhd1tp XSA9IHBpcGUtPmNydGNfaWQ7Cj4gKwlkb19pb2N0bChkaXNwbGF5LT5kcm1fZmQsIERSTV9JT0NU TF9NT0RFX0FUT01JQywgJmlvYyk7Cj4gwqAKPiDCoAkvKiBQYXNzIGluIGFsbCBzb3J0cyBvZiB0 aGluZ3Mgb3RoZXIgdGhhbiB0aGUgcHJvcGVydHkgSUQuCj4gKi8KPiDCoAludW1fcHJvcHNfcmF3 WzBdID0gMTsKPiAtCWRvX2lvY3RsX2VycihkZXNjLT5mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlD LCAmaW9jLCBFTk9FTlQpOwo+IC0JcHJvcHNfcmF3WzBdID0gY3J0Yy0+b2JqOwo+IC0JZG9faW9j dGxfZXJyKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MsIEVOT0VOVCk7Cj4g LQlwcm9wc19yYXdbMF0gPSBwbGFuZS0+b2JqOwo+IC0JZG9faW9jdGxfZXJyKGRlc2MtPmZkLCBE Uk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MsIEVOT0VOVCk7Cj4gLQlwcm9wc19yYXdbMF0gPSBj b25uZWN0b3ItPm9iajsKPiAtCWRvX2lvY3RsX2VycihkZXNjLT5mZCwgRFJNX0lPQ1RMX01PREVf QVRPTUlDLCAmaW9jLCBFTk9FTlQpOwo+IC0JcHJvcHNfcmF3WzBdID0gY3J0Yy0+bW9kZS5pZDsK PiAtCWRvX2lvY3RsX2VycihkZXNjLT5mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBF Tk9FTlQpOwo+ICsJZG9faW9jdGxfZXJyKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01PREVf QVRPTUlDLCAmaW9jLAo+IEVOT0VOVCk7Cj4gKwlwcm9wc19yYXdbMF0gPSBwaXBlLT5jcnRjX2lk Owo+ICsJZG9faW9jdGxfZXJyKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlD LCAmaW9jLAo+IEVOT0VOVCk7Cj4gKwlwcm9wc19yYXdbMF0gPSBwbGFuZS0+ZHJtX3BsYW5lLT5w bGFuZV9pZDsKPiArCWRvX2lvY3RsX2VycihkaXNwbGF5LT5kcm1fZmQsIERSTV9JT0NUTF9NT0RF X0FUT01JQywgJmlvYywKPiBFTk9FTlQpOwo+ICsJcHJvcHNfcmF3WzBdID0gb3V0cHV0LT5pZDsK PiArCWRvX2lvY3RsX2VycihkaXNwbGF5LT5kcm1fZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywg JmlvYywKPiBFTk9FTlQpOwo+ICsJcHJvcHNfcmF3WzBdID0gcGlwZS0+dmFsdWVzW0lHVF9DUlRD X01PREVfSURdOwo+ICsJZG9faW9jdGxfZXJyKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01P REVfQVRPTUlDLCAmaW9jLAo+IEVOT0VOVCk7Cj4gwqAKPiDCoAkvKiBWYWxpZCBwcm9wZXJ0eSwg dmFsaWQgdmFsdWUuICovCj4gKwo+IMKgCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByb3Bz X3Jhdyk7IGkrKykgewo+IC0JCXByb3BzX3Jhd1tpXSA9IGRlc2MtPnByb3BzX2NydGNbSUdUX0NS VENfTU9ERV9JRF07Cj4gLQkJdmFsdWVzX3Jhd1tpXSA9IGNydGMtPm1vZGUuaWQ7Cj4gKwkJcHJv cHNfcmF3W2ldID0gcGlwZS0+cHJvcHNbSUdUX0NSVENfTU9ERV9JRF07Cj4gKwkJdmFsdWVzX3Jh d1tpXSA9IHBpcGUtPnZhbHVlc1tJR1RfQ1JUQ19NT0RFX0lEXTsKPiDCoAl9Cj4gLQlkb19pb2N0 bChkZXNjLT5mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jKTsKPiArCWRvX2lvY3RsKGRp c3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jKTsKPiDCoAo+IMKgCS8q IFNldHRpbmcgdGhlIHNhbWUgdGhpbmcgbXVsdGlwbGUgdGltZXMgaXMgT0suICovCj4gwqAJZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUob2JqX3Jhdyk7IGkrKykKPiDCoAkJbnVtX3Byb3BzX3Jh d1tpXSA9IEFSUkFZX1NJWkUocHJvcHNfcmF3KSAvCj4gQVJSQVlfU0laRShvYmpfcmF3KTsKPiAt CWRvX2lvY3RsKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MpOwo+ICsJZG9f aW9jdGwoZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MpOwo+IMKg CWlvYy5jb3VudF9vYmpzID0gQVJSQVlfU0laRShvYmpfcmF3KTsKPiAtCWRvX2lvY3RsKGRlc2Mt PmZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MpOwo+ICsJZG9faW9jdGwoZGlzcGxheS0+ ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MpOwo+IMKgCj4gwqAJLyogUGFzcyBh IHNlcmllcyBvZiBvdXRsYW5kaXNoIGFkZHJlc3Nlcy4gKi8KPiDCoAlpb2Mub2Jqc19wdHIgPSAw Owo+IC0JZG9faW9jdGxfZXJyKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2Ms IEVGQVVMVCk7Cj4gKwlkb19pb2N0bF9lcnIoZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9E RV9BVE9NSUMsICZpb2MsCj4gRUZBVUxUKTsKPiDCoAo+IMKgCWlvYy5vYmpzX3B0ciA9ICh1aW50 cHRyX3QpIG9ial9yYXc7Cj4gwqAJaW9jLmNvdW50X3Byb3BzX3B0ciA9IDA7Cj4gLQlkb19pb2N0 bF9lcnIoZGVzYy0+ZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYywgRUZBVUxUKTsKPiAr CWRvX2lvY3RsX2VycihkaXNwbGF5LT5kcm1fZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlv YywKPiBFRkFVTFQpOwo+IMKgCj4gwqAJaW9jLmNvdW50X3Byb3BzX3B0ciA9ICh1aW50cHRyX3Qp IG51bV9wcm9wc19yYXc7Cj4gwqAJaW9jLnByb3BzX3B0ciA9IDA7Cj4gLQlkb19pb2N0bF9lcnIo ZGVzYy0+ZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYywgRUZBVUxUKTsKPiArCWRvX2lv Y3RsX2VycihkaXNwbGF5LT5kcm1fZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYywKPiBF RkFVTFQpOwo+IMKgCj4gwqAJaW9jLnByb3BzX3B0ciA9ICh1aW50cHRyX3QpIHByb3BzX3JhdzsK PiDCoAlpb2MucHJvcF92YWx1ZXNfcHRyID0gMDsKPiAtCWRvX2lvY3RsX2VycihkZXNjLT5mZCwg RFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBFRkFVTFQpOwo+ICsJZG9faW9jdGxfZXJyKGRp c3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLAo+IEVGQVVMVCk7Cj4g wqAKPiDCoAlpb2MucHJvcF92YWx1ZXNfcHRyID0gKHVpbnRwdHJfdCkgdmFsdWVzX3JhdzsKPiAt CWRvX2lvY3RsKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MpOwo+ICsJZG9f aW9jdGwoZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MpOwo+IMKg Cj4gwqAJLyogQXR0ZW1wdCB0byBvdmVyZmxvdyBhbmQvb3IgdHJpcCB2YXJpb3VzIGJvdW5kYXJ5 Cj4gY29uZGl0aW9ucy4gKi8KPiDCoAlpb2MuY291bnRfb2JqcyA9IFVJTlQzMl9NQVggLyBzaXpl b2YodWludDMyX3QpOwo+IC0JZG9faW9jdGxfZXJyKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9B VE9NSUMsICZpb2MsIEVOT0VOVCk7Cj4gKwlkb19pb2N0bF9lcnIoZGlzcGxheS0+ZHJtX2ZkLCBE Uk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MsCj4gRU5PRU5UKTsKPiDCoAo+IMKgCWlvYy5jb3Vu dF9vYmpzID0gQVJSQVlfU0laRShvYmpfcmF3KTsKPiDCoAlpb2Mub2Jqc19wdHIgPSBVSU5UNjRf TUFYIC0gc2l6ZW9mKHVpbnQzMl90KTsKPiAtCWRvX2lvY3RsX2VycihkZXNjLT5mZCwgRFJNX0lP Q1RMX01PREVfQVRPTUlDLCAmaW9jLCBFRkFVTFQpOwo+ICsJZG9faW9jdGxfZXJyKGRpc3BsYXkt PmRybV9mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLAo+IEVGQVVMVCk7Cj4gwqAJaW9j LmNvdW50X29ianMgPSAxOwo+IMKgCWlvYy5vYmpzX3B0ciA9IFVJTlQ2NF9NQVggLSBzaXplb2Yo dWludDMyX3QpOwo+IC0JZG9faW9jdGxfZXJyKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9N SUMsICZpb2MsIEVGQVVMVCk7Cj4gKwlkb19pb2N0bF9lcnIoZGlzcGxheS0+ZHJtX2ZkLCBEUk1f SU9DVExfTU9ERV9BVE9NSUMsICZpb2MsCj4gRUZBVUxUKTsKPiDCoAo+IMKgCW51bV9wcm9wc19y YXdbMF0gPSBVSU5UMzJfTUFYIC8gc2l6ZW9mKHVpbnQzMl90KTsKPiAtCWRvX2lvY3RsX2Vycihk ZXNjLT5mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBFRkFVTFQpOwo+ICsJZG9faW9j dGxfZXJyKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLAo+IEVG QVVMVCk7Cj4gwqAJbnVtX3Byb3BzX3Jhd1swXSA9IFVJTlQzMl9NQVggLSAxOwo+IC0JZG9faW9j dGxfZXJyKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MsIEVGQVVMVCk7Cj4g Kwlkb19pb2N0bF9lcnIoZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZp b2MsCj4gRUZBVUxUKTsKPiDCoAo+IMKgCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9ial9y YXcpOyBpKyspCj4gwqAJCW51bV9wcm9wc19yYXdbaV0gPSAoVUlOVDMyX01BWCAvCj4gQVJSQVlf U0laRShvYmpfcmF3KSkgKyAxOwo+IC0JZG9faW9jdGxfZXJyKGRlc2MtPmZkLCBEUk1fSU9DVExf TU9ERV9BVE9NSUMsICZpb2MsIEVGQVVMVCk7Cj4gKwlkb19pb2N0bF9lcnIoZGlzcGxheS0+ZHJt X2ZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MsCj4gRUZBVUxUKTsKPiDCoAlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShvYmpfcmF3KTsgaSsrKQo+IMKgCQludW1fcHJvcHNfcmF3W2ld ID0gQVJSQVlfU0laRShwcm9wc19yYXcpIC8KPiBBUlJBWV9TSVpFKG9ial9yYXcpOwo+IC0JZG9f aW9jdGxfZXJyKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MsIEVGQVVMVCk7 Cj4gKwlkb19pb2N0bF9lcnIoZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMs ICZpb2MsCj4gRUZBVUxUKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYXRvbWljX3NldHVwKGln dF9kaXNwbGF5X3QgKmRpc3BsYXksIGVudW0gcGlwZSBwaXBlLAo+IGlndF9vdXRwdXRfdCAqb3V0 cHV0LCBpZ3RfcGxhbmVfdCAqcHJpbWFyeSwgc3RydWN0IGlndF9mYiAqZmIpCj4gK3sKPiArCWln dF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwaXBlKTsKPiArCWlndF9wbGFuZV9zZXRfZmIocHJp bWFyeSwgZmIpOwo+ICsKPiArCWNydGNfY29tbWl0KHByaW1hcnktPnBpcGUsIHByaW1hcnksIENP TU1JVF9BVE9NSUMsCj4gQVRPTUlDX1JFTEFYX05PTkUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBhdG9taWNfY2xlYXIoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgZW51bSBwaXBlIHBpcGUsCj4g aWd0X3BsYW5lX3QgKnByaW1hcnksIGlndF9vdXRwdXRfdCAqb3V0cHV0KQo+ICt7Cj4gKwlpZ3Rf cGxhbmVfdCAqcGxhbmU7Cj4gKwo+ICsJZm9yX2VhY2hfcGxhbmVfb25fcGlwZShkaXNwbGF5LCBw aXBlLCBwbGFuZSkgewo+ICsJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIE5VTEwpOwo+ICsJCWln dF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDAsIDApOwo+ICsJfQo+ICsKPiArCWlndF9vdXRw dXRfc2V0X3BpcGUob3V0cHV0LCBQSVBFX05PTkUpOwo+ICsJY3J0Y19jb21taXQocHJpbWFyeS0+ cGlwZSwgcHJpbWFyeSwgQ09NTUlUX0FUT01JQywKPiBBVE9NSUNfUkVMQVhfTk9ORSk7Cj4gwqB9 Cj4gwqAKPiDCoGlndF9tYWluCj4gwqB7Cj4gLQlzdHJ1Y3Qga21zX2F0b21pY19kZXNjIGRlc2M7 Cj4gLQlzdHJ1Y3Qga21zX2F0b21pY19zdGF0ZSAqY3VycmVudDsKPiArCWlndF9kaXNwbGF5X3Qg ZGlzcGxheTsKPiArCWVudW0gcGlwZSBwaXBlID0gUElQRV9OT05FOwo+ICsJaWd0X3BpcGVfdCAq cGlwZV9vYmo7Cj4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dCA9IE5VTEw7Cj4gKwlpZ3RfcGxhbmVf dCAqcHJpbWFyeSA9IE5VTEw7Cj4gKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7Cj4gKwlzdHJ1Y3Qg aWd0X2ZiIGZiOwo+ICsKPiArCWlndF9maXh0dXJlIHsKPiArCQlkaXNwbGF5LmRybV9mZCA9IGRy bV9vcGVuX2RyaXZlcl9tYXN0ZXIoRFJJVkVSX0FOWSk7Cj4gKwo+ICsJCWttc3Rlc3Rfc2V0X3Z0 X2dyYXBoaWNzX21vZGUoKTsKPiArCj4gKwkJaWd0X2Rpc3BsYXlfaW5pdCgmZGlzcGxheSwgZGlz cGxheS5kcm1fZmQpOwo+ICsKPiArCQlpZ3RfcmVxdWlyZShkaXNwbGF5LmlzX2F0b21pYyk7Cj4g KwkJaWd0X2Rpc3BsYXlfcmVxdWlyZV9vdXRwdXQoJmRpc3BsYXkpOwo+IMKgCj4gLQltZW1zZXQo JmRlc2MsIDAsIHNpemVvZihkZXNjKSk7Cj4gKwkJZm9yX2VhY2hfcGlwZV93aXRoX3ZhbGlkX291 dHB1dCgmZGlzcGxheSwgcGlwZSwKPiBvdXRwdXQpCj4gKwkJCWJyZWFrOwo+ICsKPiArCQlwaXBl X29iaiA9ICZkaXNwbGF5LnBpcGVzW3BpcGVdOwo+ICsJCXByaW1hcnkgPSBpZ3RfcGlwZV9nZXRf cGxhbmVfdHlwZShwaXBlX29iaiwKPiBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKPiDCoAo+IC0J Y3VycmVudCA9IGNhbGxvYygxLCBzaXplb2YoKmN1cnJlbnQpKTsKPiAtCWlndF9hc3NlcnQoY3Vy cmVudCk7Cj4gLQljdXJyZW50LT5kZXNjID0gJmRlc2M7Cj4gKwkJbW9kZSA9IGlndF9vdXRwdXRf Z2V0X21vZGUob3V0cHV0KTsKPiDCoAo+IC0JaWd0X2ZpeHR1cmUKPiAtCQlhdG9taWNfc2V0dXAo Y3VycmVudCk7Cj4gKwkJaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKGRpc3BsYXkuZHJtX2ZkLAo+ICsJ CQkJwqDCoMKgwqDCoMKgbW9kZS0+aGRpc3BsYXksIG1vZGUtCj4gPnZkaXNwbGF5LAo+ICsJCQkJ wqDCoMKgwqDCoMKgcGxhbmVfZ2V0X2lndF9mb3JtYXQocHJpbWFyeSksCj4gKwkJCQnCoMKgwqDC oMKgwqBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAo+ICZmYik7Cj4gKwl9Cj4gwqAKPiDCoAlp Z3Rfc3VidGVzdCgicGxhbmVfb3ZlcmxheV9sZWdhY3kiKSB7Cj4gLQkJc3RydWN0IGttc19hdG9t aWNfc3RhdGUgKnNjcmF0Y2ggPQo+IGF0b21pY19zdGF0ZV9kdXAoY3VycmVudCk7Cj4gLQkJc3Ry dWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YyA9Cj4gZmluZF9jcnRjKHNjcmF0Y2gsIHRy dWUpOwo+IC0JCXN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlICpwbGFuZSA9Cj4gLQkJCWZp bmRfcGxhbmUoc2NyYXRjaCwgUExBTkVfVFlQRV9PVkVSTEFZLAo+IGNydGMpOwo+IC0KPiAtCQlp Z3RfcmVxdWlyZShjcnRjKTsKPiAtCQlpZ3RfcmVxdWlyZShwbGFuZSk7Cj4gLQkJcGxhbmVfb3Zl cmxheShjcnRjLCBwbGFuZSk7Cj4gLQkJYXRvbWljX3N0YXRlX2ZyZWUoc2NyYXRjaCk7Cj4gKwkJ aWd0X3BsYW5lX3QgKm92ZXJsYXkgPQo+ICsJCQlpZ3RfcGlwZV9nZXRfcGxhbmVfdHlwZShwaXBl X29iaiwKPiBEUk1fUExBTkVfVFlQRV9PVkVSTEFZKTsKPiArCj4gKwkJaWd0X3JlcXVpcmUob3Zl cmxheSk7Cj4gKwo+ICsJCWF0b21pY19zZXR1cCgmZGlzcGxheSwgcGlwZSwgb3V0cHV0LCBwcmlt YXJ5LCAmZmIpOwo+ICsJCXBsYW5lX292ZXJsYXkocGlwZV9vYmosIG91dHB1dCwgb3ZlcmxheSk7 Cj4gwqAJfQo+IMKgCj4gwqAJaWd0X3N1YnRlc3QoInBsYW5lX3ByaW1hcnlfbGVnYWN5Iikgewo+ IC0JCXN0cnVjdCBrbXNfYXRvbWljX3N0YXRlICpzY3JhdGNoID0KPiBhdG9taWNfc3RhdGVfZHVw KGN1cnJlbnQpOwo+IC0JCXN0cnVjdCBrbXNfYXRvbWljX2NydGNfc3RhdGUgKmNydGMgPQo+IGZp bmRfY3J0YyhzY3JhdGNoLCB0cnVlKTsKPiAtCQlzdHJ1Y3Qga21zX2F0b21pY19wbGFuZV9zdGF0 ZSAqcGxhbmUgPQo+IC0JCQlmaW5kX3BsYW5lKHNjcmF0Y2gsIFBMQU5FX1RZUEVfUFJJTUFSWSwK PiBjcnRjKTsKPiAtCj4gLQkJaWd0X3JlcXVpcmUoY3J0Yyk7Cj4gLQkJaWd0X3JlcXVpcmUocGxh bmUpOwo+IC0JCXBsYW5lX3ByaW1hcnkoY3J0YywgcGxhbmUpOwo+IC0JCWF0b21pY19zdGF0ZV9m cmVlKHNjcmF0Y2gpOwo+ICsJCWF0b21pY19zZXR1cCgmZGlzcGxheSwgcGlwZSwgb3V0cHV0LCBw cmltYXJ5LCAmZmIpOwo+ICsKPiArCQlwbGFuZV9wcmltYXJ5KHBpcGVfb2JqLCBwcmltYXJ5LCAm ZmIpOwo+IMKgCX0KPiDCoAo+IMKgCWlndF9zdWJ0ZXN0KCJ0ZXN0X29ubHkiKSB7Cj4gLQkJc3Ry dWN0IGttc19hdG9taWNfc3RhdGUgKnNjcmF0Y2ggPQo+IGF0b21pY19zdGF0ZV9kdXAoY3VycmVu dCk7Cj4gLQkJc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YyA9Cj4gZmluZF9jcnRj KHNjcmF0Y2gsIHRydWUpOwo+IC0JCXN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlICpwbGFu ZSA9Cj4gLQkJCWZpbmRfcGxhbmUoc2NyYXRjaCwgUExBTkVfVFlQRV9QUklNQVJZLAo+IGNydGMp Owo+IC0KPiAtCQlpZ3RfcmVxdWlyZShjcnRjKTsKPiAtCQlpZ3RfcmVxdWlyZShwbGFuZSk7Cj4g LQkJdGVzdF9vbmx5KGNydGMsIHBsYW5lKTsKPiAtCQlhdG9taWNfc3RhdGVfZnJlZShzY3JhdGNo KTsKPiAtCX0KPiArCQlhdG9taWNfY2xlYXIoJmRpc3BsYXksIHBpcGUsIHByaW1hcnksIG91dHB1 dCk7Cj4gwqAKPiArCQl0ZXN0X29ubHkocGlwZV9vYmosIHByaW1hcnksIG91dHB1dCk7Cj4gKwl9 Cj4gwqAJaWd0X3N1YnRlc3QoInBsYW5lX2N1cnNvcl9sZWdhY3kiKSB7Cj4gLQkJc3RydWN0IGtt c19hdG9taWNfc3RhdGUgKnNjcmF0Y2ggPQo+IGF0b21pY19zdGF0ZV9kdXAoY3VycmVudCk7Cj4g LQkJc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YyA9Cj4gZmluZF9jcnRjKHNjcmF0 Y2gsIHRydWUpOwo+IC0JCXN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlICpwbGFuZSA9Cj4g LQkJCWZpbmRfcGxhbmUoc2NyYXRjaCwgUExBTkVfVFlQRV9DVVJTT1IsCj4gY3J0Yyk7Cj4gLQo+ IC0JCWlndF9yZXF1aXJlKGNydGMpOwo+IC0JCWlndF9yZXF1aXJlKHBsYW5lKTsKPiAtCQlwbGFu ZV9jdXJzb3IoY3J0YywgcGxhbmUpOwo+IC0JCWF0b21pY19zdGF0ZV9mcmVlKHNjcmF0Y2gpOwo+ ICsJCWlndF9wbGFuZV90ICpjdXJzb3IgPQo+ICsJCQlpZ3RfcGlwZV9nZXRfcGxhbmVfdHlwZShw aXBlX29iaiwKPiBEUk1fUExBTkVfVFlQRV9DVVJTT1IpOwo+ICsKPiArCQlpZ3RfcmVxdWlyZShj dXJzb3IpOwo+ICsKPiArCQlhdG9taWNfc2V0dXAoJmRpc3BsYXksIHBpcGUsIG91dHB1dCwgcHJp bWFyeSwgJmZiKTsKPiArCQlwbGFuZV9jdXJzb3IocGlwZV9vYmosIG91dHB1dCwgY3Vyc29yKTsK PiDCoAl9Cj4gwqAKPiDCoAlpZ3Rfc3VidGVzdCgicGxhbmVfaW52YWxpZF9wYXJhbXMiKSB7Cj4g LQkJc3RydWN0IGttc19hdG9taWNfc3RhdGUgKnNjcmF0Y2ggPQo+IGF0b21pY19zdGF0ZV9kdXAo Y3VycmVudCk7Cj4gLQkJc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YyA9Cj4gZmlu ZF9jcnRjKHNjcmF0Y2gsIHRydWUpOwo+IC0JCXN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRl ICpwbGFuZSA9Cj4gLQkJCWZpbmRfcGxhbmUoY3VycmVudCwgUExBTkVfVFlQRV9QUklNQVJZLAo+ IGNydGMpOwo+IC0JCXN0cnVjdCBrbXNfYXRvbWljX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubiA9Cj4g LQkJCWZpbmRfY29ubmVjdG9yKHNjcmF0Y2gsIGNydGMpOwo+IC0KPiAtCQlpZ3RfcmVxdWlyZShj cnRjKTsKPiAtCQlpZ3RfcmVxdWlyZShwbGFuZSk7Cj4gLQkJcGxhbmVfaW52YWxpZF9wYXJhbXMo Y3J0YywgcGxhbmUsIGNvbm4pOwo+IC0JCWF0b21pY19zdGF0ZV9mcmVlKHNjcmF0Y2gpOwo+ICsJ CWF0b21pY19zZXR1cCgmZGlzcGxheSwgcGlwZSwgb3V0cHV0LCBwcmltYXJ5LCAmZmIpOwo+ICsK PiArCQlwbGFuZV9pbnZhbGlkX3BhcmFtcyhwaXBlX29iaiwgb3V0cHV0LCBwcmltYXJ5LAo+ICZm Yik7Cj4gwqAJfQo+IMKgCj4gwqAJaWd0X3N1YnRlc3QoInBsYW5lX2ludmFsaWRfcGFyYW1zX2Zl bmNlIikgewo+IC0JCXN0cnVjdCBrbXNfYXRvbWljX3N0YXRlICpzY3JhdGNoID0KPiBhdG9taWNf c3RhdGVfZHVwKGN1cnJlbnQpOwo+IC0JCXN0cnVjdCBrbXNfYXRvbWljX2NydGNfc3RhdGUgKmNy dGMgPQo+IGZpbmRfY3J0YyhzY3JhdGNoLCB0cnVlKTsKPiAtCQlzdHJ1Y3Qga21zX2F0b21pY19w bGFuZV9zdGF0ZSAqcGxhbmUgPQo+IC0JCQlmaW5kX3BsYW5lKGN1cnJlbnQsIFBMQU5FX1RZUEVf UFJJTUFSWSwKPiBjcnRjKTsKPiAtCQlzdHJ1Y3Qga21zX2F0b21pY19jb25uZWN0b3Jfc3RhdGUg KmNvbm4gPQo+IC0JCQlmaW5kX2Nvbm5lY3RvcihzY3JhdGNoLCBjcnRjKTsKPiAtCj4gLQkJaWd0 X3JlcXVpcmUoY3J0Yyk7Cj4gLQkJaWd0X3JlcXVpcmUocGxhbmUpOwo+IC0JCXBsYW5lX2ludmFs aWRfcGFyYW1zX2ZlbmNlKGNydGMsIHBsYW5lLCBjb25uKTsKPiAtCQlhdG9taWNfc3RhdGVfZnJl ZShzY3JhdGNoKTsKPiArCQlhdG9taWNfc2V0dXAoJmRpc3BsYXksIHBpcGUsIG91dHB1dCwgcHJp bWFyeSwgJmZiKTsKPiArCj4gKwkJcGxhbmVfaW52YWxpZF9wYXJhbXNfZmVuY2UocGlwZV9vYmos IG91dHB1dCwKPiBwcmltYXJ5KTsKPiDCoAl9Cj4gwqAKPiDCoAlpZ3Rfc3VidGVzdCgiY3J0Y19p bnZhbGlkX3BhcmFtcyIpIHsKPiAtCQlzdHJ1Y3Qga21zX2F0b21pY19zdGF0ZSAqc2NyYXRjaCA9 Cj4gYXRvbWljX3N0YXRlX2R1cChjdXJyZW50KTsKPiAtCQlzdHJ1Y3Qga21zX2F0b21pY19jcnRj X3N0YXRlICpjcnRjID0KPiBmaW5kX2NydGMoc2NyYXRjaCwgdHJ1ZSk7Cj4gLQkJc3RydWN0IGtt c19hdG9taWNfcGxhbmVfc3RhdGUgKnBsYW5lID0KPiAtCQkJZmluZF9wbGFuZShzY3JhdGNoLCBO VU1fUExBTkVfVFlQRV9QUk9QUywKPiBjcnRjKTsKPiAtCQlzdHJ1Y3Qga21zX2F0b21pY19jb25u ZWN0b3Jfc3RhdGUgKmNvbm4gPQo+IC0JCQlmaW5kX2Nvbm5lY3RvcihzY3JhdGNoLCBjcnRjKTsK PiAtCj4gLQkJaWd0X3JlcXVpcmUoY3J0Yyk7Cj4gLQkJaWd0X3JlcXVpcmUocGxhbmUpOwo+IC0J CWlndF9yZXF1aXJlKGNvbm4pOwo+IC0JCWNydGNfaW52YWxpZF9wYXJhbXMoY3J0YywgcGxhbmUs IGNvbm4pOwo+IC0JCWF0b21pY19zdGF0ZV9mcmVlKHNjcmF0Y2gpOwo+ICsJCWF0b21pY19zZXR1 cCgmZGlzcGxheSwgcGlwZSwgb3V0cHV0LCBwcmltYXJ5LCAmZmIpOwo+ICsKPiArCQljcnRjX2lu dmFsaWRfcGFyYW1zKHBpcGVfb2JqLCBvdXRwdXQsIHByaW1hcnksICZmYik7Cj4gwqAJfQo+IMKg Cj4gwqAJaWd0X3N1YnRlc3QoImNydGNfaW52YWxpZF9wYXJhbXNfZmVuY2UiKSB7Cj4gLQkJc3Ry dWN0IGttc19hdG9taWNfc3RhdGUgKnNjcmF0Y2ggPQo+IGF0b21pY19zdGF0ZV9kdXAoY3VycmVu dCk7Cj4gLQkJc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YyA9Cj4gZmluZF9jcnRj KHNjcmF0Y2gsIHRydWUpOwo+IC0JCXN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlICpwbGFu ZSA9Cj4gLQkJCWZpbmRfcGxhbmUoc2NyYXRjaCwgTlVNX1BMQU5FX1RZUEVfUFJPUFMsCj4gY3J0 Yyk7Cj4gLQkJc3RydWN0IGttc19hdG9taWNfY29ubmVjdG9yX3N0YXRlICpjb25uID0KPiAtCQkJ ZmluZF9jb25uZWN0b3Ioc2NyYXRjaCwgY3J0Yyk7Cj4gLQo+IC0JCWlndF9yZXF1aXJlKGNydGMp Owo+IC0JCWlndF9yZXF1aXJlKHBsYW5lKTsKPiAtCQlpZ3RfcmVxdWlyZShjb25uKTsKPiAtCQlj cnRjX2ludmFsaWRfcGFyYW1zX2ZlbmNlKGNydGMsIHBsYW5lLCBjb25uKTsKPiAtCQlhdG9taWNf c3RhdGVfZnJlZShzY3JhdGNoKTsKPiArCQlhdG9taWNfc2V0dXAoJmRpc3BsYXksIHBpcGUsIG91 dHB1dCwgcHJpbWFyeSwgJmZiKTsKPiArCj4gKwkJY3J0Y19pbnZhbGlkX3BhcmFtc19mZW5jZShw aXBlX29iaiwgb3V0cHV0LCBwcmltYXJ5LAo+ICZmYik7Cj4gwqAJfQo+IMKgCj4gwqAJaWd0X3N1 YnRlc3QoImF0b21pY19pbnZhbGlkX3BhcmFtcyIpIHsKPiAtCQlzdHJ1Y3Qga21zX2F0b21pY19z dGF0ZSAqc2NyYXRjaCA9Cj4gYXRvbWljX3N0YXRlX2R1cChjdXJyZW50KTsKPiAtCQlzdHJ1Y3Qg a21zX2F0b21pY19jcnRjX3N0YXRlICpjcnRjID0KPiBmaW5kX2NydGMoc2NyYXRjaCwgdHJ1ZSk7 Cj4gLQkJc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgKnBsYW5lID0KPiAtCQkJZmluZF9w bGFuZShzY3JhdGNoLCBOVU1fUExBTkVfVFlQRV9QUk9QUywKPiBjcnRjKTsKPiAtCQlzdHJ1Y3Qg a21zX2F0b21pY19jb25uZWN0b3Jfc3RhdGUgKmNvbm4gPQo+IC0JCQlmaW5kX2Nvbm5lY3Rvcihz Y3JhdGNoLCBjcnRjKTsKPiAtCj4gLQkJaWd0X3JlcXVpcmUoY3J0Yyk7Cj4gLQkJaWd0X3JlcXVp cmUocGxhbmUpOwo+IC0JCWlndF9yZXF1aXJlKGNvbm4pOwo+IC0JCWF0b21pY19pbnZhbGlkX3Bh cmFtcyhjcnRjLCBwbGFuZSwgY29ubik7Cj4gLQkJYXRvbWljX3N0YXRlX2ZyZWUoc2NyYXRjaCk7 Cj4gKwkJYXRvbWljX3NldHVwKCZkaXNwbGF5LCBwaXBlLCBvdXRwdXQsIHByaW1hcnksICZmYik7 Cj4gKwo+ICsJCWF0b21pY19pbnZhbGlkX3BhcmFtcyhwaXBlX29iaiwgcHJpbWFyeSwgb3V0cHV0 LAo+ICZmYik7Cj4gwqAJfQo+IMKgCj4gLQlhdG9taWNfc3RhdGVfZnJlZShjdXJyZW50KTsKPiAr CWlndF9maXh0dXJlIHsKPiArCQlhdG9taWNfY2xlYXIoJmRpc3BsYXksIHBpcGUsIHByaW1hcnks IG91dHB1dCk7Cj4gKwkJaWd0X3JlbW92ZV9mYihkaXNwbGF5LmRybV9mZCwgJmZiKTsKPiDCoAo+ IC0JaWd0X2ZpeHR1cmUKPiAtCQljbG9zZShkZXNjLmZkKTsKPiArCQlpZ3RfZGlzcGxheV9maW5p KCZkaXNwbGF5KTsKPiArCX0KPiDCoH0KLS0gCk1pa2EgS2Fob2xhIC0gSW50ZWwgT1RDCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK