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:16:02 +0300 Message-ID: <1508494562.3274.153.camel@intel.com> References: <20171012115435.18880-15-maarten.lankhorst@linux.intel.com> <20171012153348.18154-1-maarten.lankhorst@linux.intel.com> <1508493756.3274.148.camel@intel.com> <0c305d7e-3d85-eb88-3c43-846c354b16e7@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 mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 701396EC29 for ; Fri, 20 Oct 2017 10:16:09 +0000 (UTC) In-Reply-To: <0c305d7e-3d85-eb88-3c43-846c354b16e7@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 T24gRnJpLCAyMDE3LTEwLTIwIGF0IDEyOjA4ICswMjAwLCBNYWFydGVuIExhbmtob3JzdCB3cm90 ZToKPiBPcCAyMC0xMC0xNyBvbSAxMjowMiBzY2hyZWVmIE1pa2EgS2Fob2xhOgo+ID4gCj4gPiBP biBUaHUsIDIwMTctMTAtMTIgYXQgMTc6MzMgKzAyMDAsIE1hYXJ0ZW4gTGFua2hvcnN0IHdyb3Rl Ogo+ID4gPiAKPiA+ID4gTm93IHRoYXQgd2UgY2FuIHNldCBpbmRpdmlkdWFsIHByb3BlcnRpZXMg dGhyb3VnaCB0aGUgaWd0X2ttcwo+ID4gPiBhcGksCj4gPiA+IHdlIG5vIGxvbmdlciBuZWVkIHRv IGR1cGxpY2F0ZSBmdW5jdGlvbmFsaXR5IGZyb20gaWd0X2ttcy4gU2V0Cj4gPiA+IGludmFsaWQK PiA+ID4gcHJvcGVydGllcyBkaXJlY3RseSwgYW5kIHJld3JpdGUga21zX2F0b21pYy5jIHRvIHVz ZSBpZ3RfZGlzcGxheS4KPiA+ID4gVGhpcyB3aWxsIGFsbG93IHVzIHRvIHJlbW92ZSBhIGxvdCBv ZiBjb2RlIGluIGttc19hdG9taWMuYywKPiA+ID4gYW5kIGJlbmVmaXQgZnJvbSBob3cgaWd0X2tt cyBjYW4gc2V0IHVwIGEgdmFsaWQgY29uZmlndXJhdGlvbiwKPiA+ID4gaW5zdGVhZCBvZiBoYXZp bmcgdG8gaW5oZXJpdCBpdCBmcm9tIGZiY29uLgo+ID4gPiAKPiA+ID4gQ2hhbmdlcyBzaW5jZSB2 MToKPiA+ID4gLSBGaXggdGVzdCBmYWlsdXJlIHdoZW4gYXRvbWljX2ludmFsaWRfcGFyYW1zIGlz IHJ1biBzdGFuZGFsb25lLgo+ID4gPiAKPiA+ID4gU2lnbmVkLW9mZi1ieTogTWFhcnRlbiBMYW5r aG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4LmludGVsLmMKPiA+ID4gb20+Cj4gPiA+IENj OiBEYW5pZWwgU3RvbmUgPGRhbmllbHNAY29sbGFib3JhLmNvbT4KPiA+ID4gLS0tCj4gPiA+IMKg dGVzdHMva21zX2F0b21pYy5jIHwgMTY2OCArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0t LS0tLS0KPiA+ID4gLS0tLQo+ID4gPiAtLS0tLS0tLS0tLS0KPiA+ID4gwqAxIGZpbGUgY2hhbmdl ZCwgNTEyIGluc2VydGlvbnMoKyksIDExNTYgZGVsZXRpb25zKC0pCj4gPiA+IAo+ID4gPiBkaWZm IC0tZ2l0IGEvdGVzdHMva21zX2F0b21pYy5jIGIvdGVzdHMva21zX2F0b21pYy5jCj4gPiA+IGlu ZGV4IDA0MmE3YzI2M2FhYi4uZTBmYzMyNGVhYjYxIDEwMDY0NAo+ID4gPiAtLS0gYS90ZXN0cy9r bXNfYXRvbWljLmMKPiA+ID4gKysrIGIvdGVzdHMva21zX2F0b21pYy5jCj4gPiA+IEBAIC00Niwx MCArNDYsNiBAQAo+ID4gPiDCoCNpbmNsdWRlICJpZ3RfYXV4LmgiCj4gPiA+IMKgI2luY2x1ZGUg InN3X3N5bmMuaCIKPiA+ID4gwqAKPiA+ID4gLSNpZm5kZWYgRFJNX0NMSUVOVF9DQVBfQVRPTUlD Cj4gPiA+IC0jZGVmaW5lIERSTV9DTElFTlRfQ0FQX0FUT01JQyAzCj4gPiA+IC0jZW5kaWYKPiA+ ID4gLQo+ID4gPiDCoCNpZm5kZWYgRFJNX0NBUF9DVVJTT1JfV0lEVEgKPiA+ID4gwqAjZGVmaW5l IERSTV9DQVBfQ1VSU09SX1dJRFRIIDB4OAo+ID4gPiDCoCNlbmRpZgo+ID4gPiBAQCAtNTgsMjMg KzU0LDYgQEAKPiA+ID4gwqAjZGVmaW5lIERSTV9DQVBfQ1VSU09SX0hFSUdIVCAweDkKPiA+ID4g wqAjZW5kaWYKPiA+ID4gwqAKPiA+ID4gLSNpZm5kZWYgRFJNX01PREVfQVRPTUlDX1RFU1RfT05M WQo+ID4gPiAtI2RlZmluZSBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZIDB4MDEwMAo+ID4gPiAt I2RlZmluZSBEUk1fTU9ERV9BVE9NSUNfTk9OQkxPQ0sgMHgwMjAwCj4gPiA+IC0jZGVmaW5lIERS TV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VUIDB4MDQwMAo+ID4gPiAtCj4gPiA+IC1zdHJ1Y3Qg ZHJtX21vZGVfYXRvbWljIHsKPiA+ID4gLQlfX3UzMiBmbGFnczsKPiA+ID4gLQlfX3UzMiBjb3Vu dF9vYmpzOwo+ID4gPiAtCV9fdTY0IG9ianNfcHRyOwo+ID4gPiAtCV9fdTY0IGNvdW50X3Byb3Bz X3B0cjsKPiA+ID4gLQlfX3U2NCBwcm9wc19wdHI7Cj4gPiA+IC0JX191NjQgcHJvcF92YWx1ZXNf cHRyOwo+ID4gPiAtCV9fdTY0IHJlc2VydmVkOwo+ID4gPiAtCV9fdTY0IHVzZXJfZGF0YTsKPiA+ ID4gLX07Cj4gPiA+IC0jZW5kaWYKPiA+ID4gLQo+ID4gPiDCoElHVF9URVNUX0RFU0NSSVBUSU9O KCJUZXN0IGF0b21pYyBtb2Rlc2V0dGluZyBBUEkiKTsKPiA+ID4gwqAKPiA+ID4gwqBlbnVtIGtt c19hdG9taWNfY2hlY2tfcmVsYXggewo+ID4gPiBAQCAtODMsMTI1OSArNjIsNjUyIEBAIGVudW0g a21zX2F0b21pY19jaGVja19yZWxheCB7Cj4gPiA+IMKgCVBMQU5FX1JFTEFYX0ZCID0gKDEgPDwg MSkKPiA+ID4gwqB9Owo+ID4gPiDCoAo+ID4gPiAtLyoqCj4gPiA+IC0gKiBLTVMgcGxhbmUgdHlw ZSBlbnVtCj4gPiA+IC0gKgo+ID4gPiAtICogS01TIHBsYW5lIHR5cGVzIGFyZSByZXByZXNlbnRl ZCBieSBlbnVtcywgd2hpY2ggZG8gbm90IGhhdmUKPiA+ID4gc3RhYmxlIG51bWVyaWMKPiA+ID4g LSAqIHZhbHVlcywgYnV0IG11c3QgYmUgbG9va2VkIHVwIGJ5IHRoZWlyIHN0cmluZyB2YWx1ZSBl YWNoCj4gPiA+IHRpbWUuCj4gPiA+IC0gKgo+ID4gPiAtICogVG8gbWFrZSB0aGUgY29kZSBtb3Jl IHNpbXBsZSwgd2UgZGVmaW5lIGEgcGxhbmVfdHlwZSBlbnVtCj4gPiA+IHdoaWNoCj4gPiA+IG1h cHMgdG8KPiA+ID4gLSAqIGVhY2ggS01TIGVudW0gdmFsdWUuIFRoZXNlIHZhbHVlcyBtdXN0IGJl IGxvb2tlZCB1cCB0aHJvdWdoCj4gPiA+IHRoZQo+ID4gPiBtYXAsIGFuZAo+ID4gPiAtICogY2Fu bm90IGJlIHBhc3NlZCBkaXJlY3RseSB0byBLTVMgZnVuY3Rpb25zLgo+ID4gPiAtICovCj4gPiA+ IC1lbnVtIHBsYW5lX3R5cGUgewo+ID4gPiAtCVBMQU5FX1RZUEVfUFJJTUFSWSA9IDAsCj4gPiA+ IC0JUExBTkVfVFlQRV9PVkVSTEFZLAo+ID4gPiAtCVBMQU5FX1RZUEVfQ1VSU09SLAo+ID4gPiAt CU5VTV9QTEFORV9UWVBFX1BST1BTCj4gPiA+IC19Owo+ID4gPiAtCj4gPiA+IC1zdGF0aWMgY29u c3QgY2hhciAqcGxhbmVfdHlwZV9wcm9wX25hbWVzW05VTV9QTEFORV9UWVBFX1BST1BTXSA9Cj4g PiA+IHsKPiA+ID4gLQkiUHJpbWFyeSIsCj4gPiA+IC0JIk92ZXJsYXkiLAo+ID4gPiAtCSJDdXJz b3IiCj4gPiA+IC19Owo+ID4gPiAtCj4gPiA+IC1zdHJ1Y3Qga21zX2F0b21pY19ibG9iIHsKPiA+ ID4gLQl1aW50MzJfdCBpZDsgLyogMCBpZiBub3QgYWxyZWFkeSBhbGxvY2F0ZWQgKi8KPiA+ID4g LQlzaXplX3QgbGVuOwo+ID4gPiAtCXZvaWQgKmRhdGE7Cj4gPiA+IC19Owo+ID4gPiAtCj4gPiA+ IC1zdHJ1Y3Qga21zX2F0b21pY19jb25uZWN0b3Jfc3RhdGUgewo+ID4gPiAtCXN0cnVjdCBrbXNf YXRvbWljX3N0YXRlICpzdGF0ZTsKPiA+ID4gLQl1aW50MzJfdCBvYmo7Cj4gPiA+IC0JdWludDMy X3QgY3J0Y19pZDsKPiA+ID4gLX07Cj4gPiA+IC0KPiA+ID4gLXN0cnVjdCBrbXNfYXRvbWljX3Bs YW5lX3N0YXRlIHsKPiA+ID4gLQlzdHJ1Y3Qga21zX2F0b21pY19zdGF0ZSAqc3RhdGU7Cj4gPiA+ IC0JdWludDMyX3Qgb2JqOwo+ID4gPiAtCWVudW0gcGxhbmVfdHlwZSB0eXBlOwo+ID4gPiAtCXVp bnQzMl90IGNydGNfbWFzazsKPiA+ID4gLQl1aW50MzJfdCBjcnRjX2lkOyAvKiAwIHRvIGRpc2Fi bGUgKi8KPiA+ID4gLQl1aW50MzJfdCBmYl9pZDsgLyogMCB0byBkaXNhYmxlICovCj4gPiA+IC0J dWludDMyX3Qgc3JjX3gsIHNyY195LCBzcmNfdywgc3JjX2g7IC8qIDE2LjE2IGZpeGVkLQo+ID4g PiBwb2ludCAqLwo+ID4gPiAtCXVpbnQzMl90IGNydGNfeCwgY3J0Y195LCBjcnRjX3csIGNydGNf aDsgLyogbm9ybWFsCj4gPiA+IGludGVnZXJzCj4gPiA+ICovCj4gPiA+IC0JaW50MzJfdCBmZW5j ZV9mZDsKPiA+ID4gLX07Cj4gPiA+IC0KPiA+ID4gLXN0cnVjdCBrbXNfYXRvbWljX2NydGNfc3Rh dGUgewo+ID4gPiAtCXN0cnVjdCBrbXNfYXRvbWljX3N0YXRlICpzdGF0ZTsKPiA+ID4gLQl1aW50 MzJfdCBvYmo7Cj4gPiA+IC0JaW50IGlkeDsKPiA+ID4gLQlib29sIGFjdGl2ZTsKPiA+ID4gLQlp bnQzMl90ICpvdXRfZmVuY2VfcHRyOwo+ID4gPiAtCXN0cnVjdCBrbXNfYXRvbWljX2Jsb2IgbW9k ZTsKPiA+ID4gLX07Cj4gPiA+IC0KPiA+ID4gLXN0cnVjdCBrbXNfYXRvbWljX3N0YXRlIHsKPiA+ ID4gLQlzdHJ1Y3Qga21zX2F0b21pY19jb25uZWN0b3Jfc3RhdGUgKmNvbm5lY3RvcnM7Cj4gPiA+ IC0JaW50IG51bV9jb25uZWN0b3JzOwo+ID4gPiAtCXN0cnVjdCBrbXNfYXRvbWljX2NydGNfc3Rh dGUgKmNydGNzOwo+ID4gPiAtCWludCBudW1fY3J0Y3M7Cj4gPiA+IC0Jc3RydWN0IGttc19hdG9t aWNfcGxhbmVfc3RhdGUgKnBsYW5lczsKPiA+ID4gLQlpbnQgbnVtX3BsYW5lczsKPiA+ID4gLQlz dHJ1Y3Qga21zX2F0b21pY19kZXNjICpkZXNjOwo+ID4gPiAtfTsKPiA+ID4gLQo+ID4gPiAtc3Ry dWN0IGttc19hdG9taWNfZGVzYyB7Cj4gPiA+IC0JaW50IGZkOwo+ID4gPiAtCXVpbnQzMl90IHBy b3BzX2Nvbm5lY3RvcltJR1RfTlVNX0NPTk5FQ1RPUl9QUk9QU107Cj4gPiA+IC0JdWludDMyX3Qg cHJvcHNfY3J0Y1tJR1RfTlVNX0NSVENfUFJPUFNdOwo+ID4gPiAtCXVpbnQzMl90IHByb3BzX3Bs YW5lW0lHVF9OVU1fUExBTkVfUFJPUFNdOwo+ID4gPiAtCXVpbnQ2NF90IHByb3BzX3BsYW5lX3R5 cGVbTlVNX1BMQU5FX1RZUEVfUFJPUFNdOwo+ID4gPiAtfTsKPiA+ID4gLQo+ID4gPiAtc3RhdGlj IHVpbnQzMl90IGJsb2JfZHVwbGljYXRlKGludCBmZCwgdWludDMyX3QgaWRfb3JpZykKPiA+ID4g K3N0YXRpYyBib29sIHBsYW5lX2ZpbHRlcihlbnVtIGlndF9hdG9taWNfcGxhbmVfcHJvcGVydGll cyBwcm9wKQo+ID4gPiDCoHsKPiA+ID4gLQlkcm1Nb2RlUHJvcGVydHlCbG9iUHRyIG9yaWcgPSBk cm1Nb2RlR2V0UHJvcGVydHlCbG9iKGZkLAo+ID4gPiBpZF9vcmlnKTsKPiA+ID4gLQl1aW50MzJf dCBpZF9uZXc7Cj4gPiA+IC0KPiA+ID4gLQlpZ3RfYXNzZXJ0KG9yaWcpOwo+ID4gPiAtCWRvX29y X2RpZShkcm1Nb2RlQ3JlYXRlUHJvcGVydHlCbG9iKGZkLCBvcmlnLT5kYXRhLAo+ID4gPiBvcmln LQo+ID4gPiA+IAo+ID4gPiA+IGxlbmd0aCwKPiA+ID4gLQkJCQkJwqDCoMKgwqAmaWRfbmV3KSk7 Cj4gPiA+IC0JZHJtTW9kZUZyZWVQcm9wZXJ0eUJsb2Iob3JpZyk7Cj4gPiA+ICsJaWYgKCgxIDw8 IHByb3ApICYgSUdUX1BMQU5FX0NPT1JEX0NIQU5HRURfTUFTSykKPiA+ID4gKwkJcmV0dXJuIGZh bHNlOwo+ID4gPiDCoAo+ID4gPiAtCXJldHVybiBpZF9uZXc7Cj4gPiA+IC19Cj4gPiA+IC0KPiA+ ID4gLSNkZWZpbmUgY3J0Y19zZXRfcHJvcChyZXEsIGNydGMsIHByb3AsIHZhbHVlKSBcCj4gPiA+ IC0JaWd0X2Fzc2VydF9sdCgwLCBkcm1Nb2RlQXRvbWljQWRkUHJvcGVydHkocmVxLCBjcnRjLQo+ ID4gPiA+b2JqLCBcCj4gPiA+IC0JCQkJCQnCoMKgY3J0Yy0+c3RhdGUtCj4gPiA+ID5kZXNjLQo+ ID4gPiA+IAo+ID4gPiA+IHByb3BzX2NydGNbcHJvcF0sIFwKPiA+ID4gLQkJCQkJCcKgwqB2YWx1 ZSkpOwo+ID4gPiAtCj4gPiA+IC0jZGVmaW5lIHBsYW5lX3NldF9wcm9wKHJlcSwgcGxhbmUsIHBy b3AsIHZhbHVlKSBcCj4gPiA+IC0JaWd0X2Fzc2VydF9sdCgwLCBkcm1Nb2RlQXRvbWljQWRkUHJv cGVydHkocmVxLCBwbGFuZS0KPiA+ID4gPm9iaiwgXAo+ID4gPiAtCQkJCQkJwqDCoHBsYW5lLT5z dGF0ZS0KPiA+ID4gPiAKPiA+ID4gPiBkZXNjLT5wcm9wc19wbGFuZVtwcm9wXSwgXAo+ID4gPiAt CQkJCQkJwqDCoHZhbHVlKSk7Cj4gPiA+IC0KPiA+ID4gLSNkZWZpbmUgZG9fYXRvbWljX2NvbW1p dChmZCwgcmVxLCBmbGFncykgXAo+ID4gPiAtCWRvX29yX2RpZShkcm1Nb2RlQXRvbWljQ29tbWl0 KGZkLCByZXEsIGZsYWdzLCBOVUxMKSk7Cj4gPiA+ICsJaWYgKHByb3AgPT0gSUdUX1BMQU5FX0NS VENfSUQgfHwgcHJvcCA9PQo+ID4gPiBJR1RfUExBTkVfRkJfSUQpCj4gPiA+ICsJCXJldHVybiBm YWxzZTsKPiA+ID4gwqAKPiA+ID4gLSNkZWZpbmUgZG9fYXRvbWljX2NvbW1pdF9lcnIoZmQsIHJl cSwgZmxhZ3MsIGVycikgeyBcCj4gPiA+IC0JaWd0X2Fzc2VydF9uZXEoZHJtTW9kZUF0b21pY0Nv bW1pdChmZCwgcmVxLCBmbGFncywKPiA+ID4gTlVMTCksCj4gPiA+IDApOyBcCj4gPiA+IC0JaWd0 X2Fzc2VydF9lcShlcnJubywgZXJyKTsgXAo+ID4gPiAtfQo+ID4gPiAtCj4gPiA+IC0jZGVmaW5l IGNydGNfY29tbWl0X2F0b21pYyhjcnRjLCBwbGFuZSwgcmVxLCByZWxheCwgZmxhZ3MpIHsgXAo+ ID4gPiAtCWRybU1vZGVBdG9taWNTZXRDdXJzb3IocmVxLCAwKTsgXAo+ID4gPiAtCWNydGNfcG9w dWxhdGVfcmVxKGNydGMsIHJlcSk7IFwKPiA+ID4gLQlwbGFuZV9wb3B1bGF0ZV9yZXEocGxhbmUs IHJlcSk7IFwKPiA+ID4gLQlkb19hdG9taWNfY29tbWl0KChjcnRjKS0+c3RhdGUtPmRlc2MtPmZk LCByZXEsIGZsYWdzKTsgXAo+ID4gPiAtCWlmICghKGZsYWdzICYgRFJNX01PREVfQVRPTUlDX1RF U1RfT05MWSkpIHsgXAo+ID4gPiAtCQljcnRjX2NoZWNrX2N1cnJlbnRfc3RhdGUoY3J0YywgcGxh bmUsIHJlbGF4KTsgXAo+ID4gPiAtCQlwbGFuZV9jaGVja19jdXJyZW50X3N0YXRlKHBsYW5lLCBy ZWxheCk7IFwKPiA+ID4gLQl9IFwKPiA+ID4gLX0KPiA+ID4gKwlpZiAocHJvcCA9PSBJR1RfUExB TkVfSU5fRkVOQ0VfRkQpCj4gPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ID4gwqAKPiA+ID4gLSNk ZWZpbmUgY3J0Y19jb21taXRfYXRvbWljX2VycihjcnRjLCBwbGFuZSwgY3J0Y19vbGQsIHBsYW5l X29sZCwKPiA+ID4gcmVxLCBmbGFncywgcmVsYXgsIGUpIHsgXAo+ID4gPiAtCWRybU1vZGVBdG9t aWNTZXRDdXJzb3IocmVxLCAwKTsgXAo+ID4gPiAtCWNydGNfcG9wdWxhdGVfcmVxKGNydGMsIHJl cSk7IFwKPiA+ID4gLQlwbGFuZV9wb3B1bGF0ZV9yZXEocGxhbmUsIHJlcSk7IFwKPiA+ID4gLQlk b19hdG9taWNfY29tbWl0X2VycigoY3J0YyktPnN0YXRlLT5kZXNjLT5mZCwgcmVxLAo+ID4gPiBm bGFncywKPiA+ID4gZSk7IFwKPiA+ID4gLQljcnRjX2NoZWNrX2N1cnJlbnRfc3RhdGUoY3J0Y19v bGQsIHBsYW5lX29sZCwgcmVsYXgpOyBcCj4gPiA+IC0JcGxhbmVfY2hlY2tfY3VycmVudF9zdGF0 ZShwbGFuZV9vbGQsIHJlbGF4KTsgXAo+ID4gPiArCS8qIERvbid0IGNhcmUgYWJvdXQgb3RoZXIg cHJvcGVydGllcyAqLwo+ID4gPiArCXJldHVybiB0cnVlOwo+ID4gPiDCoH0KPiA+ID4gwqAKPiA+ ID4gLSNkZWZpbmUgcGxhbmVfY29tbWl0X2F0b21pYyhwbGFuZSwgcmVxLCByZWxheCkgeyBcCj4g PiA+IC0JZHJtTW9kZUF0b21pY1NldEN1cnNvcihyZXEsIDApOyBcCj4gPiA+IC0JcGxhbmVfcG9w dWxhdGVfcmVxKHBsYW5lLCByZXEpOyBcCj4gPiA+IC0JZG9fYXRvbWljX2NvbW1pdCgocGxhbmUp LT5zdGF0ZS0+ZGVzYy0+ZmQsIHJlcSwgMCk7IFwKPiA+ID4gLQlwbGFuZV9jaGVja19jdXJyZW50 X3N0YXRlKHBsYW5lLCByZWxheCk7IFwKPiA+ID4gLX0KPiA+ID4gLQo+ID4gPiAtI2RlZmluZSBw bGFuZV9jb21taXRfYXRvbWljX2VycihwbGFuZSwgcGxhbmVfb2xkLCByZXEsIHJlbGF4LCBlKQo+ ID4gPiB7IFwKPiA+ID4gLQlkcm1Nb2RlQXRvbWljU2V0Q3Vyc29yKHJlcSwgMCk7IFwKPiA+ID4g LQlwbGFuZV9wb3B1bGF0ZV9yZXEocGxhbmUsIHJlcSk7IFwKPiA+ID4gLQlkb19hdG9taWNfY29t bWl0X2VycigocGxhbmUpLT5zdGF0ZS0+ZGVzYy0+ZmQsIHJlcSwgMCwKPiA+ID4gZSk7IFwKPiA+ ID4gLQlwbGFuZV9jaGVja19jdXJyZW50X3N0YXRlKHBsYW5lX29sZCwgcmVsYXgpOyBcCj4gPiA+ IC19Cj4gPiA+IC0KPiA+ID4gLXN0YXRpYyB2b2lkCj4gPiA+IC1jb25uZWN0b3JfZ2V0X2N1cnJl bnRfc3RhdGUoc3RydWN0IGttc19hdG9taWNfY29ubmVjdG9yX3N0YXRlCj4gPiA+ICpjb25uZWN0 b3IpCj4gPiA+IC17Cj4gPiA+IC0JZHJtTW9kZU9iamVjdFByb3BlcnRpZXNQdHIgcHJvcHM7Cj4g PiA+IC0JaW50IGk7Cj4gPiA+IC0KPiA+ID4gLQlwcm9wcyA9IGRybU1vZGVPYmplY3RHZXRQcm9w ZXJ0aWVzKGNvbm5lY3Rvci0+c3RhdGUtCj4gPiA+ID5kZXNjLQo+ID4gPiA+IAo+ID4gPiA+IGZk LAo+ID4gPiAtCQkJCQnCoMKgwqBjb25uZWN0b3ItPm9iaiwKPiA+ID4gLQkJCQkJwqDCoMKgRFJN X01PREVfT0JKRUNUX0NPTk5FCj4gPiA+IENUT1IKPiA+ID4gKTsKPiA+ID4gLQlpZ3RfYXNzZXJ0 KHByb3BzKTsKPiA+ID4gLQo+ID4gPiAtCWZvciAoaSA9IDA7IGkgPCBwcm9wcy0+Y291bnRfcHJv cHM7IGkrKykgewo+ID4gPiAtCQl1aW50MzJfdCAqcHJvcF9pZHMgPSBjb25uZWN0b3ItPnN0YXRl LT5kZXNjLQo+ID4gPiA+IAo+ID4gPiA+IHByb3BzX2Nvbm5lY3RvcjsKPiA+ID4gLQo+ID4gPiAt CQlpZiAocHJvcHMtPnByb3BzW2ldID09Cj4gPiA+IHByb3BfaWRzW0lHVF9DT05ORUNUT1JfQ1JU Q19JRF0pCj4gPiA+IC0JCQljb25uZWN0b3ItPmNydGNfaWQgPSBwcm9wcy0KPiA+ID4gPnByb3Bf dmFsdWVzW2ldOwo+ID4gPiAtCX0KPiA+ID4gLQlkcm1Nb2RlRnJlZU9iamVjdFByb3BlcnRpZXMo cHJvcHMpOwo+ID4gPiAtfQo+ID4gPiAtCj4gPiA+IC0jaWYgMAo+ID4gPiAtLyogWFhYOiBDaGVj a2luZyB0aGlzIHJlcGVhdGVkbHkgYWN0dWFsbHkgaGFuZ3MgdGhlIEdQVS4gSSBoYXZlCj4gPiA+ IGxpdGVyYWxseSBubwo+ID4gPiAtICrCoMKgwqDCoMKgwqBpZGVhIHdoeS4gKi8KPiA+ID4gLXN0 YXRpYyB2b2lkCj4gPiA+IC1jb25uZWN0b3JfY2hlY2tfY3VycmVudF9zdGF0ZShzdHJ1Y3Qga21z X2F0b21pY19jb25uZWN0b3Jfc3RhdGUKPiA+ID4gKmNvbm5lY3RvcikKPiA+ID4gLXsKPiA+ID4g LQlzdHJ1Y3Qga21zX2F0b21pY19jb25uZWN0b3Jfc3RhdGUgY29ubmVjdG9yX2tlcm5lbDsKPiA+ ID4gLQlkcm1Nb2RlQ29ubmVjdG9yUHRyIGxlZ2FjeTsKPiA+ID4gLQl1aW50MzJfdCBjcnRjX2lk Owo+ID4gPiAtCj4gPiA+IC0JbGVnYWN5ID0gZHJtTW9kZUdldENvbm5lY3RvckN1cnJlbnQoY29u bmVjdG9yLT5zdGF0ZS0KPiA+ID4gPmRlc2MtCj4gPiA+ID4gCj4gPiA+ID4gZmQsCj4gPiA+IC0J CQkJCcKgwqDCoMKgY29ubmVjdG9yLT5vYmopOwo+ID4gPiAtCWlndF9hc3NlcnQobGVnYWN5KTsK PiA+ID4gLQo+ID4gPiAtCWlmIChsZWdhY3ktPmVuY29kZXJfaWQpIHsKPiA+ID4gLQkJZHJtTW9k ZUVuY29kZXJQdHIgbGVnYWN5X2VuYzsKPiA+ID4gLQo+ID4gPiAtCQlsZWdhY3lfZW5jID0gZHJt TW9kZUdldEVuY29kZXIoY29ubmVjdG9yLT5zdGF0ZS0KPiA+ID4gPiAKPiA+ID4gPiBkZXNjLT5m ZCwKPiA+ID4gLQkJCQkJwqDCoMKgwqDCoMKgwqBsZWdhY3ktCj4gPiA+ID5lbmNvZGVyX2lkKTsK PiA+ID4gLQkJaWd0X2Fzc2VydChsZWdhY3lfZW5jKTsKPiA+ID4gLQo+ID4gPiAtCQljcnRjX2lk ID0gbGVnYWN5X2VuYy0+Y3J0Y19pZDsKPiA+ID4gLQkJZHJtTW9kZUZyZWVFbmNvZGVyKGxlZ2Fj eV9lbmMpOwo+ID4gPiAtCX0gZWxzZSB7Cj4gPiA+IC0JCWNydGNfaWQgPSAwOwo+ID4gPiAtCX0K PiA+ID4gLQo+ID4gPiAtCWlndF9hc3NlcnRfZXFfdTMyKGNydGNfaWQsIGNvbm5lY3Rvci0+Y3J0 Y19pZCk7Cj4gPiA+IC0KPiA+ID4gLQltZW1jcHkoJmNvbm5lY3Rvcl9rZXJuZWwsIGNvbm5lY3Rv ciwKPiA+ID4gc2l6ZW9mKGNvbm5lY3Rvcl9rZXJuZWwpKTsKPiA+ID4gLQljb25uZWN0b3JfZ2V0 X2N1cnJlbnRfc3RhdGUoJmNvbm5lY3Rvcl9rZXJuZWwpOwo+ID4gPiAtCWRvX29yX2RpZShtZW1j bXAoJmNvbm5lY3Rvcl9rZXJuZWwsIGNvbm5lY3RvciwKPiA+ID4gLQkJCcKgc2l6ZW9mKGNvbm5l Y3Rvcl9rZXJuZWwpKSk7Cj4gPiA+IC0KPiA+ID4gLQlkcm1Nb2RlRnJlZUNvbm5lY3RvcihsZWdh Y3kpOwo+ID4gPiAtfQo+ID4gPiAtI2VuZGlmCj4gPiA+IC0KPiA+ID4gLXN0YXRpYyBzdHJ1Y3Qg a21zX2F0b21pY19jb25uZWN0b3Jfc3RhdGUgKgo+ID4gPiAtZmluZF9jb25uZWN0b3Ioc3RydWN0 IGttc19hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiAtCcKgwqDCoMKgwqDCoMKgc3RydWN0IGtt c19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YykKPiA+ID4gK3N0YXRpYyB2b2lkIHBsYW5lX2dldF9j dXJyZW50X3N0YXRlKGlndF9wbGFuZV90ICpwbGFuZSwgdWludDY0X3QKPiA+ID4gKnZhbHVlcykK PiA+ID4gwqB7Cj4gPiA+IMKgCWludCBpOwo+ID4gPiDCoAo+ID4gPiAtCWZvciAoaSA9IDA7IGkg PCBzdGF0ZS0+bnVtX2Nvbm5lY3RvcnM7IGkrKykgewo+ID4gPiAtCQlzdHJ1Y3Qga21zX2F0b21p Y19jb25uZWN0b3Jfc3RhdGUgKmNvbm5lY3RvciA9Cj4gPiA+IC0JCQkmc3RhdGUtPmNvbm5lY3Rv cnNbaV07Cj4gPiA+IC0KPiA+ID4gLQkJaWYgKCFjb25uZWN0b3ItPm9iaikKPiA+ID4gKwlmb3Ig KGkgPSAwOyBpIDwgSUdUX05VTV9QTEFORV9QUk9QUzsgaSsrKSB7Cj4gPiA+ICsJCWlmIChwbGFu ZV9maWx0ZXIoaSkpIHsKPiA+ID4gKwkJCXZhbHVlc1tpXSA9IDA7Cj4gPiA+IMKgCQkJY29udGlu dWU7Cj4gPiA+IC0JCWlmIChjcnRjICYmIGNvbm5lY3Rvci0+Y3J0Y19pZCAhPSBjcnRjLT5vYmop Cj4gPiA+IC0JCQljb250aW51ZTsKPiA+ID4gLQo+ID4gPiAtCQlyZXR1cm4gY29ubmVjdG9yOwo+ ID4gPiAtCX0KPiA+ID4gLQo+ID4gPiAtCXJldHVybiBOVUxMOwo+ID4gPiAtfQo+ID4gPiAtCj4g PiA+IC1zdGF0aWMgdm9pZCBwbGFuZV9wb3B1bGF0ZV9yZXEoc3RydWN0IGttc19hdG9taWNfcGxh bmVfc3RhdGUKPiA+ID4gKnBsYW5lLAo+ID4gPiAtCQkJwqDCoMKgwqDCoMKgwqBkcm1Nb2RlQXRv bWljUmVxICpyZXEpCj4gPiA+IC17Cj4gPiA+IC0JaWYgKHBsYW5lLT5mZW5jZV9mZCkKPiA+ID4g LQkJcGxhbmVfc2V0X3Byb3AocmVxLCBwbGFuZSwKPiA+ID4gSUdUX1BMQU5FX0lOX0ZFTkNFX0ZE LAo+ID4gPiBwbGFuZS0+ZmVuY2VfZmQpOwo+ID4gPiAtCj4gPiA+IC0JcGxhbmVfc2V0X3Byb3Ao cmVxLCBwbGFuZSwgSUdUX1BMQU5FX0NSVENfSUQsIHBsYW5lLQo+ID4gPiA+IAo+ID4gPiA+IGNy dGNfaWQpOwo+ID4gPiAtCXBsYW5lX3NldF9wcm9wKHJlcSwgcGxhbmUsIElHVF9QTEFORV9GQl9J RCwgcGxhbmUtCj4gPiA+ID5mYl9pZCk7Cj4gPiA+IC0JcGxhbmVfc2V0X3Byb3AocmVxLCBwbGFu ZSwgSUdUX1BMQU5FX1NSQ19YLCBwbGFuZS0KPiA+ID4gPnNyY194KTsKPiA+ID4gLQlwbGFuZV9z ZXRfcHJvcChyZXEsIHBsYW5lLCBJR1RfUExBTkVfU1JDX1ksIHBsYW5lLQo+ID4gPiA+c3JjX3kp Owo+ID4gPiAtCXBsYW5lX3NldF9wcm9wKHJlcSwgcGxhbmUsIElHVF9QTEFORV9TUkNfVywgcGxh bmUtCj4gPiA+ID5zcmNfdyk7Cj4gPiA+IC0JcGxhbmVfc2V0X3Byb3AocmVxLCBwbGFuZSwgSUdU X1BMQU5FX1NSQ19ILCBwbGFuZS0KPiA+ID4gPnNyY19oKTsKPiA+ID4gLQlwbGFuZV9zZXRfcHJv cChyZXEsIHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19YLCBwbGFuZS0KPiA+ID4gPmNydGNfeCk7Cj4g PiA+IC0JcGxhbmVfc2V0X3Byb3AocmVxLCBwbGFuZSwgSUdUX1BMQU5FX0NSVENfWSwgcGxhbmUt Cj4gPiA+ID5jcnRjX3kpOwo+ID4gPiAtCXBsYW5lX3NldF9wcm9wKHJlcSwgcGxhbmUsIElHVF9Q TEFORV9DUlRDX1csIHBsYW5lLQo+ID4gPiA+Y3J0Y193KTsKPiA+ID4gLQlwbGFuZV9zZXRfcHJv cChyZXEsIHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19ILCBwbGFuZS0KPiA+ID4gPmNydGNfaCk7Cj4g PiA+IC19Cj4gPiA+IC0KPiA+ID4gLXN0YXRpYyB2b2lkIHBsYW5lX2dldF9jdXJyZW50X3N0YXRl KHN0cnVjdAo+ID4gPiBrbXNfYXRvbWljX3BsYW5lX3N0YXRlCj4gPiA+ICpwbGFuZSkKPiA+ID4g LXsKPiA+ID4gLQlzdHJ1Y3Qga21zX2F0b21pY19kZXNjICpkZXNjID0gcGxhbmUtPnN0YXRlLT5k ZXNjOwo+ID4gPiAtCWRybU1vZGVPYmplY3RQcm9wZXJ0aWVzUHRyIHByb3BzOwo+ID4gPiAtCWlu dCBpOwo+ID4gPiAtCj4gPiA+IC0JcHJvcHMgPSBkcm1Nb2RlT2JqZWN0R2V0UHJvcGVydGllcyhk ZXNjLT5mZCwgcGxhbmUtPm9iaiwKPiA+ID4gLQkJCQkJwqDCoMKgRFJNX01PREVfT0JKRUNUX1BM QU5FCj4gPiA+ICk7Cj4gPiA+IC0JaWd0X2Fzc2VydChwcm9wcyk7Cj4gPiA+IC0KPiA+ID4gLQlm b3IgKGkgPSAwOyBpIDwgcHJvcHMtPmNvdW50X3Byb3BzOyBpKyspIHsKPiA+ID4gLQkJdWludDMy X3QgKnByb3BfaWRzID0gZGVzYy0+cHJvcHNfcGxhbmU7Cj4gPiA+IC0KPiA+ID4gLQkJaWYgKHBy b3BzLT5wcm9wc1tpXSA9PQo+ID4gPiBwcm9wX2lkc1tJR1RfUExBTkVfQ1JUQ19JRF0pCj4gPiA+ IC0JCQlwbGFuZS0+Y3J0Y19pZCA9IHByb3BzLT5wcm9wX3ZhbHVlc1tpXTsKPiA+ID4gLQkJZWxz ZSBpZiAocHJvcHMtPnByb3BzW2ldID09Cj4gPiA+IHByb3BfaWRzW0lHVF9QTEFORV9GQl9JRF0p Cj4gPiA+IC0JCQlwbGFuZS0+ZmJfaWQgPSBwcm9wcy0+cHJvcF92YWx1ZXNbaV07Cj4gPiA+IC0J CWVsc2UgaWYgKHByb3BzLT5wcm9wc1tpXSA9PQo+ID4gPiBwcm9wX2lkc1tJR1RfUExBTkVfQ1JU Q19YXSkKPiA+ID4gLQkJCXBsYW5lLT5jcnRjX3ggPSBwcm9wcy0+cHJvcF92YWx1ZXNbaV07Cj4g PiA+IC0JCWVsc2UgaWYgKHByb3BzLT5wcm9wc1tpXSA9PQo+ID4gPiBwcm9wX2lkc1tJR1RfUExB TkVfQ1JUQ19ZXSkKPiA+ID4gLQkJCXBsYW5lLT5jcnRjX3kgPSBwcm9wcy0+cHJvcF92YWx1ZXNb aV07Cj4gPiA+IC0JCWVsc2UgaWYgKHByb3BzLT5wcm9wc1tpXSA9PQo+ID4gPiBwcm9wX2lkc1tJ R1RfUExBTkVfQ1JUQ19XXSkKPiA+ID4gLQkJCXBsYW5lLT5jcnRjX3cgPSBwcm9wcy0+cHJvcF92 YWx1ZXNbaV07Cj4gPiA+IC0JCWVsc2UgaWYgKHByb3BzLT5wcm9wc1tpXSA9PQo+ID4gPiBwcm9w X2lkc1tJR1RfUExBTkVfQ1JUQ19IXSkKPiA+ID4gLQkJCXBsYW5lLT5jcnRjX2ggPSBwcm9wcy0+ cHJvcF92YWx1ZXNbaV07Cj4gPiA+IC0JCWVsc2UgaWYgKHByb3BzLT5wcm9wc1tpXSA9PQo+ID4g PiBwcm9wX2lkc1tJR1RfUExBTkVfU1JDX1hdKQo+ID4gPiAtCQkJcGxhbmUtPnNyY194ID0gcHJv cHMtPnByb3BfdmFsdWVzW2ldOwo+ID4gPiAtCQllbHNlIGlmIChwcm9wcy0+cHJvcHNbaV0gPT0K PiA+ID4gcHJvcF9pZHNbSUdUX1BMQU5FX1NSQ19ZXSkKPiA+ID4gLQkJCXBsYW5lLT5zcmNfeSA9 IHByb3BzLT5wcm9wX3ZhbHVlc1tpXTsKPiA+ID4gLQkJZWxzZSBpZiAocHJvcHMtPnByb3BzW2ld ID09Cj4gPiA+IHByb3BfaWRzW0lHVF9QTEFORV9TUkNfV10pCj4gPiA+IC0JCQlwbGFuZS0+c3Jj X3cgPSBwcm9wcy0+cHJvcF92YWx1ZXNbaV07Cj4gPiA+IC0JCWVsc2UgaWYgKHByb3BzLT5wcm9w c1tpXSA9PQo+ID4gPiBwcm9wX2lkc1tJR1RfUExBTkVfU1JDX0hdKQo+ID4gPiAtCQkJcGxhbmUt PnNyY19oID0gcHJvcHMtPnByb3BfdmFsdWVzW2ldOwo+ID4gPiAtCQllbHNlIGlmIChwcm9wcy0+ cHJvcHNbaV0gPT0KPiA+ID4gcHJvcF9pZHNbSUdUX1BMQU5FX1RZUEVdKSB7Cj4gPiA+IC0JCQlp bnQgajsKPiA+ID4gLQo+ID4gPiAtCQkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoZGVzYy0K PiA+ID4gPiAKPiA+ID4gPiBwcm9wc19wbGFuZV90eXBlKTsgaisrKSB7Cj4gPiA+IC0JCQkJaWYg KHByb3BzLT5wcm9wX3ZhbHVlc1tpXSA9PQo+ID4gPiBkZXNjLQo+ID4gPiA+IAo+ID4gPiA+IHBy b3BzX3BsYW5lX3R5cGVbal0pIHsKPiA+ID4gLQkJCQkJcGxhbmUtPnR5cGUgPSBqOwo+ID4gPiAt CQkJCQlicmVhazsKPiA+ID4gLQkJCQl9Cj4gPiA+IC0JCQl9Cj4gPiA+IMKgCQl9Cj4gPiA+IC0J fQo+ID4gPiDCoAo+ID4gPiAtCWRybU1vZGVGcmVlT2JqZWN0UHJvcGVydGllcyhwcm9wcyk7Cj4g PiA+ICsJCXZhbHVlc1tpXSA9IGlndF9wbGFuZV9nZXRfcHJvcChwbGFuZSwgaSk7Cj4gPiA+ICsJ fQo+ID4gPiDCoH0KPiA+ID4gwqAKPiA+ID4gLXN0YXRpYyB2b2lkIHBsYW5lX2NoZWNrX2N1cnJl bnRfc3RhdGUoc3RydWN0Cj4gPiA+IGttc19hdG9taWNfcGxhbmVfc3RhdGUKPiA+ID4gKnBsYW5l LAo+ID4gPiArc3RhdGljIHZvaWQgcGxhbmVfY2hlY2tfY3VycmVudF9zdGF0ZShpZ3RfcGxhbmVf dCAqcGxhbmUsIGNvbnN0Cj4gPiA+IHVpbnQ2NF90ICp2YWx1ZXMsCj4gPiA+IMKgCQkJCcKgwqDC oMKgwqDCoGVudW0KPiA+ID4ga21zX2F0b21pY19jaGVja19yZWxheAo+ID4gPiByZWxheCkKPiA+ ID4gwqB7Cj4gPiA+IMKgCWRybU1vZGVQbGFuZVB0ciBsZWdhY3k7Cj4gPiA+IC0Jc3RydWN0IGtt c19hdG9taWNfcGxhbmVfc3RhdGUgcGxhbmVfa2VybmVsOwo+ID4gPiArCXVpbnQ2NF90IGN1cnJl bnRfdmFsdWVzW0lHVF9OVU1fUExBTkVfUFJPUFNdOwo+ID4gPiArCWludCBpOwo+ID4gPiDCoAo+ ID4gPiAtCWxlZ2FjeSA9IGRybU1vZGVHZXRQbGFuZShwbGFuZS0+c3RhdGUtPmRlc2MtPmZkLCBw bGFuZS0KPiA+ID4gPiAKPiA+ID4gPiBvYmopOwo+ID4gPiArCWxlZ2FjeSA9IGRybU1vZGVHZXRQ bGFuZShwbGFuZS0+cGlwZS0+ZGlzcGxheS0+ZHJtX2ZkLAo+ID4gPiBwbGFuZS0+ZHJtX3BsYW5l LT5wbGFuZV9pZCk7Cj4gPiA+IMKgCWlndF9hc3NlcnQobGVnYWN5KTsKPiA+ID4gwqAKPiA+ID4g LQlpZ3RfYXNzZXJ0X2VxX3UzMihsZWdhY3ktPmNydGNfaWQsIHBsYW5lLT5jcnRjX2lkKTsKPiA+ ID4gKwlpZ3RfYXNzZXJ0X2VxX3UzMihsZWdhY3ktPmNydGNfaWQsCj4gPiA+IHZhbHVlc1tJR1Rf UExBTkVfQ1JUQ19JRF0pOwo+ID4gPiDCoAo+ID4gPiDCoAlpZiAoIShyZWxheCAmIFBMQU5FX1JF TEFYX0ZCKSkKPiA+ID4gLQkJaWd0X2Fzc2VydF9lcV91MzIobGVnYWN5LT5mYl9pZCwgcGxhbmUt PmZiX2lkKTsKPiA+ID4gKwkJaWd0X2Fzc2VydF9lcV91MzIobGVnYWN5LT5mYl9pZCwKPiA+ID4g dmFsdWVzW0lHVF9QTEFORV9GQl9JRF0pOwo+ID4gPiDCoAo+ID4gPiAtCW1lbWNweSgmcGxhbmVf a2VybmVsLCBwbGFuZSwgc2l6ZW9mKHBsYW5lX2tlcm5lbCkpOwo+ID4gPiAtCXBsYW5lX2dldF9j dXJyZW50X3N0YXRlKCZwbGFuZV9rZXJuZWwpOwo+ID4gPiArCXBsYW5lX2dldF9jdXJyZW50X3N0 YXRlKHBsYW5lLCBjdXJyZW50X3ZhbHVlcyk7Cj4gPiA+IMKgCj4gPiA+IMKgCS8qIExlZ2FjeSBj dXJzb3IgaW9jdGxzIGNyZWF0ZSB0aGVpciBvd24sIHVua25vd2FibGUsCj4gPiA+IGludGVybmFs Cj4gPiA+IMKgCcKgKiBmcmFtZWJ1ZmZlciB3aGljaCB3ZSBjYW4ndCByZWFzb24gYWJvdXQuICov Cj4gPiA+IMKgCWlmIChyZWxheCAmIFBMQU5FX1JFTEFYX0ZCKQo+ID4gPiAtCQlwbGFuZV9rZXJu ZWwuZmJfaWQgPSBwbGFuZS0+ZmJfaWQ7Cj4gPiA+IC0JZG9fb3JfZGllKG1lbWNtcCgmcGxhbmVf a2VybmVsLCBwbGFuZSwKPiA+ID4gc2l6ZW9mKHBsYW5lX2tlcm5lbCkpKTsKPiA+ID4gKwkJY3Vy cmVudF92YWx1ZXNbSUdUX1BMQU5FX0ZCX0lEXSA9Cj4gPiA+IHZhbHVlc1tJR1RfUExBTkVfRkJf SURdOwo+ID4gPiArCj4gPiA+ICsJZm9yIChpID0gMDsgaSA8IElHVF9OVU1fUExBTkVfUFJPUFM7 IGkrKykKPiA+ID4gKwkJaWYgKCFwbGFuZV9maWx0ZXIoaSkpCj4gPiA+ICsJCQlpZ3RfYXNzZXJ0 X2VxX3U2NChjdXJyZW50X3ZhbHVlc1tpXSwKPiA+ID4gdmFsdWVzW2ldKTsKPiA+ID4gwqAKPiA+ ID4gwqAJZHJtTW9kZUZyZWVQbGFuZShsZWdhY3kpOwo+ID4gPiDCoH0KPiA+ID4gwqAKPiA+ID4g LXN0YXRpYyB2b2lkIHBsYW5lX2NvbW1pdF9sZWdhY3koc3RydWN0IGttc19hdG9taWNfcGxhbmVf c3RhdGUKPiA+ID4gKnBsYW5lLAo+ID4gPiArc3RhdGljIHZvaWQgcGxhbmVfY29tbWl0KGlndF9w bGFuZV90ICpwbGFuZSwgZW51bQo+ID4gPiBpZ3RfY29tbWl0X3N0eWxlCj4gPiA+IHMsCj4gPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGVudW0ga21zX2F0b21pY19jaGVja19yZWxheAo+ID4gPiByZWxheCkKPiA+ID4g wqB7Cj4gPiA+IC0JZG9fb3JfZGllKGRybU1vZGVTZXRQbGFuZShwbGFuZS0+c3RhdGUtPmRlc2Mt PmZkLCBwbGFuZS0KPiA+ID4gPiAKPiA+ID4gPiBvYmosCj4gPiA+IC0JCQkJwqDCoHBsYW5lLT5j cnRjX2lkLAo+ID4gPiAtCQkJCcKgwqBwbGFuZS0+ZmJfaWQsIDAsCj4gPiA+IC0JCQkJwqDCoHBs YW5lLT5jcnRjX3gsIHBsYW5lLT5jcnRjX3ksCj4gPiA+IC0JCQkJwqDCoHBsYW5lLT5jcnRjX3cs IHBsYW5lLT5jcnRjX2gsCj4gPiA+IC0JCQkJwqDCoHBsYW5lLT5zcmNfeCwgcGxhbmUtPnNyY195 LAo+ID4gPiAtCQkJCcKgwqBwbGFuZS0+c3JjX3csIHBsYW5lLT5zcmNfaCkpOwo+ID4gPiAtCXBs YW5lX2NoZWNrX2N1cnJlbnRfc3RhdGUocGxhbmUsIHJlbGF4KTsKPiA+ID4gKwlpZ3RfZGlzcGxh eV9jb21taXQyKHBsYW5lLT5waXBlLT5kaXNwbGF5LCBzKTsKPiA+ID4gKwlwbGFuZV9jaGVja19j dXJyZW50X3N0YXRlKHBsYW5lLCBwbGFuZS0+dmFsdWVzLCByZWxheCk7Cj4gPiA+IMKgfQo+ID4g PiDCoAo+ID4gPiAtc3RhdGljIHN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlICoKPiA+ID4g LWZpbmRfcGxhbmUoc3RydWN0IGttc19hdG9taWNfc3RhdGUgKnN0YXRlLCBlbnVtIHBsYW5lX3R5 cGUgdHlwZSwKPiA+ID4gLQnCoMKgwqBzdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlICpjcnRj KQo+ID4gPiArc3RhdGljIHZvaWQgcGxhbmVfY29tbWl0X2F0b21pY19lcnIoaWd0X3BsYW5lX3Qg KnBsYW5lLAo+ID4gPiArCQkJCcKgwqDCoMKgZW51bSBrbXNfYXRvbWljX2NoZWNrX3JlbGF4Cj4g PiA+IHJlbGF4LAo+ID4gPiArCQkJCcKgwqDCoMKgaW50IGVycikKPiA+ID4gwqB7Cj4gPiA+IC0J c3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgKnJldCA9IE5VTEw7Cj4gPiA+IC0JaW50IGk7 Cj4gPiA+IC0KPiA+ID4gLQlmb3IgKGkgPSAwOyBpIDwgc3RhdGUtPm51bV9wbGFuZXM7IGkrKykg ewo+ID4gPiAtCQlzdHJ1Y3Qga21zX2F0b21pY19wbGFuZV9zdGF0ZSAqcGxhbmUgPSAmc3RhdGUt Cj4gPiA+ID4gCj4gPiA+ID4gcGxhbmVzW2ldOwo+ID4gPiAtCj4gPiA+IC0JCWlmICghcGxhbmUt Pm9iaikKPiA+ID4gLQkJCWNvbnRpbnVlOwo+ID4gPiAtCQlpZiAodHlwZSAhPSBOVU1fUExBTkVf VFlQRV9QUk9QUyAmJiBwbGFuZS0+dHlwZQo+ID4gPiAhPQo+ID4gPiB0eXBlKQo+ID4gPiAtCQkJ Y29udGludWU7Cj4gPiA+IC0JCWlmIChjcnRjICYmICEocGxhbmUtPmNydGNfbWFzayAmICgxIDw8 IGNydGMtCj4gPiA+ID5pZHgpKSkKPiA+ID4gLQkJCWNvbnRpbnVlOwo+ID4gPiArCXVpbnQ2NF90 IGN1cnJlbnRfdmFsdWVzW0lHVF9OVU1fUExBTkVfUFJPUFNdOwo+ID4gPiDCoAo+ID4gPiAtCQlw bGFuZV9nZXRfY3VycmVudF9zdGF0ZShwbGFuZSk7Cj4gPiA+ICsJcGxhbmVfZ2V0X2N1cnJlbnRf c3RhdGUocGxhbmUsIGN1cnJlbnRfdmFsdWVzKTsKPiA+ID4gwqAKPiA+ID4gLQkJLyogVHJ5IHRv IGZpbmQgYSBwbGFuZSB0aGF0J3MgYWxyZWFkeSBvbiB0aGlzCj4gPiA+IENSVEMuCj4gPiA+IElu Cj4gPiA+IC0JCcKgKiBwYXJ0aWN1bGFyLCB0aGlzIGVuc3VyZXMgdGhhdCBmb3Igc3BlY2lhbAo+ ID4gPiAocHJpbWFyeS9jdXJzb3IpCj4gPiA+IC0JCcKgKiBwbGFuZXMgdGhhdCBjYW4gYmUgb24g bXVsdGlwbGUgQ1JUQ3MsIHdlIGZpbmQKPiA+ID4gdGhlCj4gPiA+IHNhbWUKPiA+ID4gLQkJwqAq IG9uZSB0aGF0IHRoZSBsZWdhY3kgaW9jdGxzIHdpbGwuICovCj4gPiA+IC0JCWlmICghY3J0YyB8 fCBwbGFuZS0+Y3J0Y19pZCA9PSBjcnRjLT5vYmopCj4gPiA+IC0JCQlyZXR1cm4gcGxhbmU7Cj4g PiA+IC0KPiA+ID4gLQkJcmV0ID0gcGxhbmU7Cj4gPiA+IC0JfQo+ID4gPiArCWlndF9hc3NlcnRf ZXEoLWVyciwgaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIocGxhbmUtPnBpcGUtCj4gPiA+ID4gCj4g PiA+ID4gZGlzcGxheSwgQ09NTUlUX0FUT01JQykpOwo+ID4gPiDCoAo+ID4gPiAtCXJldHVybiBy ZXQ7Cj4gPiA+ICsJcGxhbmVfY2hlY2tfY3VycmVudF9zdGF0ZShwbGFuZSwgY3VycmVudF92YWx1 ZXMsIHJlbGF4KTsKPiA+ID4gwqB9Cj4gPiA+IMKgCj4gPiA+IC1zdGF0aWMgdm9pZCBjcnRjX3Bv cHVsYXRlX3JlcShzdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlCj4gPiA+ICpjcnRjLAo+ID4g PiAtCQkJwqDCoMKgwqDCoMKgZHJtTW9kZUF0b21pY1JlcSAqcmVxKQo+ID4gPiArc3RhdGljIGJv b2wgY3J0Y19maWx0ZXIoZW51bSBpZ3RfYXRvbWljX2NydGNfcHJvcGVydGllcyBwcm9wKQo+ID4g PiDCoHsKPiA+ID4gLQlpZiAoY3J0Yy0+b3V0X2ZlbmNlX3B0cikKPiA+ID4gLQkJY3J0Y19zZXRf cHJvcChyZXEsIGNydGMsIElHVF9DUlRDX09VVF9GRU5DRV9QVFIsCj4gPiA+IC0JCQnCoMKgwqDC oMKgwqB0b191c2VyX3BvaW50ZXIoY3J0Yy0KPiA+ID4gPm91dF9mZW5jZV9wdHIpKTsKPiA+ID4g KwlpZiAocHJvcCA9PSBJR1RfQ1JUQ19NT0RFX0lEIHx8IHByb3AgPT0gSUdUX0NSVENfQUNUSVZF KQo+ID4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiA+IMKgCj4gPiA+IC0JY3J0Y19zZXRfcHJvcChy ZXEsIGNydGMsIElHVF9DUlRDX01PREVfSUQsIGNydGMtCj4gPiA+ID5tb2RlLmlkKTsKPiA+ID4g LQljcnRjX3NldF9wcm9wKHJlcSwgY3J0YywgSUdUX0NSVENfQUNUSVZFLCBjcnRjLT5hY3RpdmUp Owo+ID4gPiArCXJldHVybiB0cnVlOwo+ID4gPiDCoH0KPiA+ID4gwqAKPiA+ID4gLXN0YXRpYyB2 b2lkIGNydGNfZ2V0X2N1cnJlbnRfc3RhdGUoc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZQo+ ID4gPiAqY3J0YykKPiA+ID4gK3N0YXRpYyB2b2lkIGNydGNfZ2V0X2N1cnJlbnRfc3RhdGUoaWd0 X3BpcGVfdCAqcGlwZSwgdWludDY0X3QKPiA+ID4gKnZhbHVlcykKPiA+ID4gwqB7Cj4gPiA+IC0J ZHJtTW9kZU9iamVjdFByb3BlcnRpZXNQdHIgcHJvcHM7Cj4gPiA+IMKgCWludCBpOwo+ID4gPiDC oAo+ID4gPiAtCXByb3BzID0gZHJtTW9kZU9iamVjdEdldFByb3BlcnRpZXMoY3J0Yy0+c3RhdGUt PmRlc2MtCj4gPiA+ID5mZCwKPiA+ID4gY3J0Yy0+b2JqLAo+ID4gPiAtCQkJCQnCoMKgwqBEUk1f TU9ERV9PQkpFQ1RfQ1JUQykKPiA+ID4gOwo+ID4gPiAtCWlndF9hc3NlcnQocHJvcHMpOwo+ID4g PiAtCj4gPiA+IC0JZm9yIChpID0gMDsgaSA8IHByb3BzLT5jb3VudF9wcm9wczsgaSsrKSB7Cj4g PiA+IC0JCXVpbnQzMl90ICpwcm9wX2lkcyA9IGNydGMtPnN0YXRlLT5kZXNjLQo+ID4gPiA+cHJv cHNfY3J0YzsKPiA+ID4gLQo+ID4gPiAtCQlpZiAocHJvcHMtPnByb3BzW2ldID09Cj4gPiA+IHBy b3BfaWRzW0lHVF9DUlRDX01PREVfSURdKSB7Cj4gPiA+IC0JCQlkcm1Nb2RlUHJvcGVydHlCbG9i UHRyIGJsb2I7Cj4gPiA+IC0KPiA+ID4gLQkJCWNydGMtPm1vZGUuaWQgPSBwcm9wcy0+cHJvcF92 YWx1ZXNbaV07Cj4gPiA+IC0JCQlpZiAoIWNydGMtPm1vZGUuaWQpIHsKPiA+ID4gLQkJCQljcnRj LT5tb2RlLmxlbiA9IDA7Cj4gPiA+IC0JCQkJY29udGludWU7Cj4gPiA+IC0JCQl9Cj4gPiA+IC0K PiA+ID4gLQkJCWJsb2IgPSBkcm1Nb2RlR2V0UHJvcGVydHlCbG9iKGNydGMtCj4gPiA+ID5zdGF0 ZS0KPiA+ID4gPiAKPiA+ID4gPiBkZXNjLT5mZCwKPiA+ID4gLQkJCQkJCcKgwqDCoMKgwqDCoGNy dGMtCj4gPiA+ID4gCj4gPiA+ID4gbW9kZS5pZCk7Cj4gPiA+IC0JCQlpZ3RfYXNzZXJ0KGJsb2Ip Owo+ID4gPiAtCQkJaWd0X2Fzc2VydF9lcV91MzIoYmxvYi0+bGVuZ3RoLAo+ID4gPiAtCQkJCQnC oMKgc2l6ZW9mKHN0cnVjdAo+ID4gPiBkcm1fbW9kZV9tb2RlaW5mbykpOwo+ID4gPiAtCj4gPiA+ IC0JCQlpZiAoIWNydGMtPm1vZGUuZGF0YSB8fAo+ID4gPiAtCQkJwqDCoMKgwqBtZW1jbXAoY3J0 Yy0+bW9kZS5kYXRhLCBibG9iLT5kYXRhLAo+ID4gPiBibG9iLT5sZW5ndGgpICE9IDApCj4gPiA+ IC0JCQkJY3J0Yy0+bW9kZS5kYXRhID0gYmxvYi0+ZGF0YTsKPiA+ID4gLQkJCWNydGMtPm1vZGUu bGVuID0gYmxvYi0+bGVuZ3RoOwo+ID4gPiAtCQl9Cj4gPiA+IC0JCWVsc2UgaWYgKHByb3BzLT5w cm9wc1tpXSA9PQo+ID4gPiBwcm9wX2lkc1tJR1RfQ1JUQ19BQ1RJVkVdKSB7Cj4gPiA+IC0JCQlj cnRjLT5hY3RpdmUgPSBwcm9wcy0+cHJvcF92YWx1ZXNbaV07Cj4gPiA+ICsJZm9yIChpID0gMDsg aSA8IElHVF9OVU1fQ1JUQ19QUk9QUzsgaSsrKSB7Cj4gPiA+ICsJCWlmIChjcnRjX2ZpbHRlcihp KSkgewo+ID4gPiArCQkJdmFsdWVzW2ldID0gMDsKPiA+ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiDC oAkJfQo+ID4gPiAtCX0KPiA+ID4gwqAKPiA+ID4gLQlkcm1Nb2RlRnJlZU9iamVjdFByb3BlcnRp ZXMocHJvcHMpOwo+ID4gPiArCQl2YWx1ZXNbaV0gPSBpZ3RfcGlwZV9vYmpfZ2V0X3Byb3AocGlw ZSwgaSk7Cj4gPiA+ICsJfQo+ID4gPiDCoH0KPiA+ID4gwqAKPiA+ID4gLXN0YXRpYyB2b2lkIGNy dGNfY2hlY2tfY3VycmVudF9zdGF0ZShzdHJ1Y3QKPiA+ID4ga21zX2F0b21pY19jcnRjX3N0YXRl Cj4gPiA+ICpjcnRjLAo+ID4gPiAtCQkJCcKgwqDCoMKgwqBzdHJ1Y3QKPiA+ID4ga21zX2F0b21p Y19wbGFuZV9zdGF0ZQo+ID4gPiAqcHJpbWFyeSwKPiA+ID4gK3N0YXRpYyB2b2lkIGNydGNfY2hl Y2tfY3VycmVudF9zdGF0ZShpZ3RfcGlwZV90ICpwaXBlLAo+ID4gPiArCQkJCcKgwqDCoMKgwqBj b25zdCB1aW50NjRfdAo+ID4gPiAqcGlwZV92YWx1ZXMsCj4gPiA+ICsJCQkJwqDCoMKgwqDCoGNv bnN0IHVpbnQ2NF90Cj4gPiA+ICpwcmltYXJ5X3ZhbHVlcywKPiA+ID4gwqAJCQkJwqDCoMKgwqDC oGVudW0ga21zX2F0b21pY19jaGVja19yZWxheAo+ID4gPiByZWxheCkKPiA+ID4gwqB7Cj4gPiA+ IC0Jc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSBjcnRjX2tlcm5lbDsKPiA+ID4gKwl1aW50 NjRfdCBjdXJyZW50X3BpcGVfdmFsdWVzW0lHVF9OVU1fQ1JUQ19QUk9QU107Cj4gPiA+IMKgCWRy bU1vZGVDcnRjUHRyIGxlZ2FjeTsKPiA+ID4gKwlkcm1Nb2RlUHJvcGVydHlCbG9iUmVzICptb2Rl X3Byb3AgPSBOVUxMOwo+ID4gPiArCXN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyAqbW9kZSA9IE5V TEw7Cj4gPiA+IMKgCj4gPiA+IC0JbGVnYWN5ID0gZHJtTW9kZUdldENydGMoY3J0Yy0+c3RhdGUt PmRlc2MtPmZkLCBjcnRjLQo+ID4gPiA+b2JqKTsKPiA+ID4gLQlpZ3RfYXNzZXJ0KGxlZ2FjeSk7 Cj4gPiA+IC0KPiA+ID4gLQlpZ3RfYXNzZXJ0X2VxX3UzMihsZWdhY3ktPmNydGNfaWQsIGNydGMt Pm9iaik7Cj4gPiA+IC0JaWd0X2Fzc2VydF9lcV91MzIobGVnYWN5LT54LCBwcmltYXJ5LT5zcmNf eCA+PiAxNik7Cj4gPiA+IC0JaWd0X2Fzc2VydF9lcV91MzIobGVnYWN5LT55LCBwcmltYXJ5LT5z cmNfeSA+PiAxNik7Cj4gPiA+IC0KPiA+ID4gLQlpZiAoY3J0Yy0+YWN0aXZlKQo+ID4gPiAtCQlp Z3RfYXNzZXJ0X2VxX3UzMihsZWdhY3ktPmJ1ZmZlcl9pZCwgcHJpbWFyeS0KPiA+ID4gPiAKPiA+ ID4gPiBmYl9pZCk7Cj4gPiA+IC0JZWxzZQo+ID4gPiAtCQlpZ3RfYXNzZXJ0X2VxX3UzMihsZWdh Y3ktPmJ1ZmZlcl9pZCwgMCk7Cj4gPiA+ICsJaWYgKHBpcGVfdmFsdWVzW0lHVF9DUlRDX01PREVf SURdKSB7Cj4gPiA+ICsJCW1vZGVfcHJvcCA9IGRybU1vZGVHZXRQcm9wZXJ0eUJsb2IocGlwZS0K PiA+ID4gPmRpc3BsYXktCj4gPiA+ID4gCj4gPiA+ID4gZHJtX2ZkLAo+ID4gPiArCQkJCQkJwqDC oMKgcGlwZV92YWx1ZXNbSQo+ID4gPiBHVF9DCj4gPiA+IFJUQ19NT0RFX0lEXSk7Cj4gPiA+IMKg Cj4gPiA+IC0JaWYgKGxlZ2FjeS0+bW9kZV92YWxpZCkgewo+ID4gPiAtCQlpZ3RfYXNzZXJ0X25l cShsZWdhY3ktPm1vZGVfdmFsaWQsIDApOwo+ID4gPiAtCQlpZ3RfYXNzZXJ0X2VxKGNydGMtPm1v ZGUubGVuLAo+ID4gPiAtCQnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2l6ZW9mKHN0cnVj dCBkcm1fbW9kZV9tb2RlaW5mbykpOwo+ID4gPiAtCQlkb19vcl9kaWUobWVtY21wKCZsZWdhY3kt Pm1vZGUsIGNydGMtPm1vZGUuZGF0YSwKPiA+ID4gLQkJwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGNydGMtPm1vZGUubGVuKSk7Cj4gPiA+IC0JCWlndF9hc3NlcnRfZXEobGVnYWN5 LT53aWR0aCwgbGVnYWN5LQo+ID4gPiA+bW9kZS5oZGlzcGxheSk7Cj4gPiA+IC0JCWlndF9hc3Nl cnRfZXEobGVnYWN5LT5oZWlnaHQsIGxlZ2FjeS0KPiA+ID4gPiAKPiA+ID4gPiBtb2RlLnZkaXNw bGF5KTsKPiA+ID4gLQl9IGVsc2Ugewo+ID4gPiAtCQlpZ3RfYXNzZXJ0X2VxKGxlZ2FjeS0+bW9k ZV92YWxpZCwgMCk7Cj4gPiA+IC0JfQo+ID4gPiArCQlpZ3RfYXNzZXJ0KG1vZGVfcHJvcCk7Cj4g PiA+IMKgCj4gPiA+IC0JbWVtY3B5KCZjcnRjX2tlcm5lbCwgY3J0Yywgc2l6ZW9mKGNydGNfa2Vy bmVsKSk7Cj4gPiA+IC0JY3J0Y19nZXRfY3VycmVudF9zdGF0ZSgmY3J0Y19rZXJuZWwpOwo+ID4g PiAtCj4gPiA+IC0JaWYgKGNydGNfa2VybmVsLm1vZGUuaWQgIT0gMCkKPiA+ID4gLQkJaWd0X2Fz c2VydF9lcShjcnRjX2tlcm5lbC5tb2RlLmxlbiwKPiA+ID4gKwkJaWd0X2Fzc2VydF9lcShtb2Rl X3Byb3AtPmxlbmd0aCwKPiA+ID4gwqAJCcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzaXpl b2Yoc3RydWN0IGRybV9tb2RlX21vZGVpbmZvKSk7Cj4gPiA+IC0KPiA+ID4gLQkvKiBPcHRpb25h bGx5IHJlbGF4IHRoZSBjaGVjayBmb3IgTU9ERV9JRDogdXNpbmcgdGhlCj4gPiA+IGxlZ2FjeQo+ ID4gPiBTZXRDcnRjCj4gPiA+IC0JwqAqIEFQSSBjYW4gcG90ZW50aWFsbHkgY2hhbmdlIE1PREVf SUQgZXZlbiBpZiB0aGUgbW9kZQo+ID4gPiBpdHNlbGYgcmVtYWlucwo+ID4gPiAtCcKgKiB1bmNo YW5nZWQuICovCj4gPiA+IC0JaWYgKCgocmVsYXggJiBDUlRDX1JFTEFYX01PREUpICYmCj4gPiA+ IC0JwqDCoMKgwqAoY3J0Y19rZXJuZWwubW9kZS5pZCAhPSBjcnRjLT5tb2RlLmlkICYmCj4gPiA+ IC0JwqDCoMKgwqDCoGNydGNfa2VybmVsLm1vZGUuaWQgIT0gMCAmJiBjcnRjLT5tb2RlLmlkICE9 IDApKSAmJgo+ID4gPiAtCcKgwqDCoMKgbWVtY21wKGNydGNfa2VybmVsLm1vZGUuZGF0YSwgY3J0 Yy0+bW9kZS5kYXRhLAo+ID4gPiAtCQnCoMKgwqBzaXplb2Yoc3RydWN0IGRybV9tb2RlX21vZGVp bmZvKSkgPT0gMCkgewo+ID4gPiAtCQljcnRjX2tlcm5lbC5tb2RlLmlkID0gY3J0Yy0+bW9kZS5p ZDsKPiA+ID4gLQkJY3J0Y19rZXJuZWwubW9kZS5kYXRhID0gY3J0Yy0+bW9kZS5kYXRhOwo+ID4g PiAtCX0KPiA+ID4gLQo+ID4gPiAtCWRvX29yX2RpZShtZW1jbXAoJmNydGNfa2VybmVsLCBjcnRj LAo+ID4gPiBzaXplb2YoY3J0Y19rZXJuZWwpKSk7Cj4gPiA+IC0KPiA+ID4gLQlkcm1Nb2RlRnJl ZUNydGMobGVnYWN5KTsKPiA+ID4gLX0KPiA+ID4gLQo+ID4gPiAtc3RhdGljIHZvaWQgY3J0Y19j b21taXRfbGVnYWN5KHN0cnVjdCBrbXNfYXRvbWljX2NydGNfc3RhdGUKPiA+ID4gKmNydGMsCj4g PiA+IC0JCQnCoMKgwqDCoMKgwqDCoHN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlCj4gPiA+ ICpwbGFuZSwKPiA+ID4gLQkJCcKgwqDCoMKgwqDCoMKgZW51bSBrbXNfYXRvbWljX2NoZWNrX3Jl bGF4Cj4gPiA+IHJlbGF4KQo+ID4gPiAtewo+ID4gPiAtCWRybU1vZGVPYmplY3RQcm9wZXJ0aWVz UHRyIHByb3BzOwo+ID4gPiAtCXVpbnQzMl90ICpjb25uZWN0b3JzOwo+ID4gPiAtCWludCBudW1f Y29ubmVjdG9ycyA9IDA7Cj4gPiA+IC0JaW50IGk7Cj4gPiA+IC0KPiA+ID4gLQlpZiAoIWNydGMt PmFjdGl2ZSkgewo+ID4gPiAtCQlkb19vcl9kaWUoZHJtTW9kZVNldENydGMoY3J0Yy0+c3RhdGUt PmRlc2MtPmZkLAo+ID4gPiAtCQkJCQnCoGNydGMtPm9iaiwgMCwgMCwgMCwKPiA+ID4gTlVMTCwK PiA+ID4gMCwgTlVMTCkpOwo+ID4gPiAtCQlyZXR1cm47Cj4gPiA+IC0JfQo+ID4gPiAtCj4gPiA+ IC0JY29ubmVjdG9ycyA9IGNhbGxvYyhjcnRjLT5zdGF0ZS0+bnVtX2Nvbm5lY3RvcnMsCj4gPiA+ IC0JCQnCoMKgwqDCoHNpemVvZigqY29ubmVjdG9ycykpOwo+ID4gPiAtCWlndF9hc3NlcnQoY29u bmVjdG9ycyk7Cj4gPiA+IC0KPiA+ID4gLQlpZ3RfYXNzZXJ0X25lcV91MzIoY3J0Yy0+bW9kZS5p ZCwgMCk7Cj4gPiA+IC0KPiA+ID4gLQlmb3IgKGkgPSAwOyBpIDwgY3J0Yy0+c3RhdGUtPm51bV9j b25uZWN0b3JzOyBpKyspIHsKPiA+ID4gLQkJc3RydWN0IGttc19hdG9taWNfY29ubmVjdG9yX3N0 YXRlICpjb25uZWN0b3IgPQo+ID4gPiAtCQkJJmNydGMtPnN0YXRlLT5jb25uZWN0b3JzW2ldOwo+ ID4gPiAtCj4gPiA+IC0JCWlmIChjb25uZWN0b3ItPmNydGNfaWQgIT0gY3J0Yy0+b2JqKQo+ID4g PiAtCQkJY29udGludWU7Cj4gPiA+IC0KPiA+ID4gLQkJY29ubmVjdG9yc1tudW1fY29ubmVjdG9y cysrXSA9IGNvbm5lY3Rvci0+b2JqOwo+ID4gPiArCQltb2RlID0gbW9kZV9wcm9wLT5kYXRhOwo+ ID4gPiDCoAl9Cj4gPiA+IMKgCj4gPiA+IC0JZG9fb3JfZGllKGRybU1vZGVTZXRDcnRjKGNydGMt PnN0YXRlLT5kZXNjLT5mZCwgY3J0Yy0KPiA+ID4gPm9iaiwKPiA+ID4gLQnCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBsYW5lLT5mYl9pZCwKPiA+ID4g LQkJCQnCoHBsYW5lLT5zcmNfeCA+PiAxNiwgcGxhbmUtCj4gPiA+ID5zcmNfeSA+Pgo+ID4gPiAx NiwKPiA+ID4gLQkJCQnCoChudW1fY29ubmVjdG9ycykgPyBjb25uZWN0b3JzIDoKPiA+ID4gTlVM TCwKPiA+ID4gLQkJCQnCoG51bV9jb25uZWN0b3JzLAo+ID4gPiAtCQkJCcKgY3J0Yy0+bW9kZS5k YXRhKSk7Cj4gPiA+IC0JLyogV2hlbiBkb2luZyBhIGxlZ2FjeSBjb21taXQsIHRoZSBjb3JlIG1h eSB1cGRhdGUKPiA+ID4gTU9ERV9JRAo+ID4gPiB0byBiZSBhIG5ldwo+ID4gPiAtCcKgKiBibG9i IGltcGxpY2l0bHkgY3JlYXRlZCBieSB0aGUgbGVnYWN5IHJlcXVlc3QuIEhlbmNlCj4gPiA+IHdl Cj4gPiA+IGJhY2tmaWxsCj4gPiA+IC0JwqAqIHRoZSB2YWx1ZSBpbiB0aGUgc3RhdGUgb2JqZWN0 IHRvIGVuc3VyZSB0aGV5IG1hdGNoLgo+ID4gPiAqLwo+ID4gPiAtCXByb3BzID0gZHJtTW9kZU9i amVjdEdldFByb3BlcnRpZXMoY3J0Yy0+c3RhdGUtPmRlc2MtCj4gPiA+ID5mZCwKPiA+ID4gY3J0 Yy0+b2JqLAo+ID4gPiAtCQkJCQnCoMKgwqBEUk1fTU9ERV9PQkpFQ1RfQ1JUQykKPiA+ID4gOwo+ ID4gPiAtCWlndF9hc3NlcnQocHJvcHMpOwo+ID4gPiAtCj4gPiA+IC0JZm9yIChpID0gMDsgaSA8 IHByb3BzLT5jb3VudF9wcm9wczsgaSsrKSB7Cj4gPiA+IC0JCWlmIChwcm9wcy0+cHJvcHNbaV0g IT0KPiA+ID4gLQkJwqDCoMKgwqBjcnRjLT5zdGF0ZS0+ZGVzYy0KPiA+ID4gPnByb3BzX2NydGNb SUdUX0NSVENfTU9ERV9JRF0pCj4gPiA+IC0JCQljb250aW51ZTsKPiA+ID4gLQkJY3J0Yy0+bW9k ZS5pZCA9IHByb3BzLT5wcm9wX3ZhbHVlc1tpXTsKPiA+ID4gLQkJYnJlYWs7Cj4gPiA+IC0JfQo+ ID4gPiArCWxlZ2FjeSA9IGRybU1vZGVHZXRDcnRjKHBpcGUtPmRpc3BsYXktPmRybV9mZCwgcGlw ZS0KPiA+ID4gPiAKPiA+ID4gPiBjcnRjX2lkKTsKPiA+ID4gKwlpZ3RfYXNzZXJ0KGxlZ2FjeSk7 Cj4gPiA+IMKgCj4gPiA+IC0JZHJtTW9kZUZyZWVPYmplY3RQcm9wZXJ0aWVzKHByb3BzKTsKPiA+ ID4gKwlpZ3RfYXNzZXJ0X2VxX3UzMihsZWdhY3ktPmNydGNfaWQsIHBpcGUtPmNydGNfaWQpOwo+ ID4gPiArCWlndF9hc3NlcnRfZXFfdTMyKGxlZ2FjeS0+eCwKPiA+ID4gcHJpbWFyeV92YWx1ZXNb SUdUX1BMQU5FX1NSQ19YXQo+ID4gPiA+IAo+ID4gPiA+ID4gCj4gPiA+ID4gPiAxNik7Cj4gPiA+ ICsJaWd0X2Fzc2VydF9lcV91MzIobGVnYWN5LT55LAo+ID4gPiBwcmltYXJ5X3ZhbHVlc1tJR1Rf UExBTkVfU1JDX1ldCj4gPiA+ID4gCj4gPiA+ID4gPiAKPiA+ID4gPiA+IDE2KTsKPiA+ID4gwqAK PiA+ID4gLQljcnRjX2NoZWNrX2N1cnJlbnRfc3RhdGUoY3J0YywgcGxhbmUsIHJlbGF4KTsKPiA+ ID4gLQlwbGFuZV9jaGVja19jdXJyZW50X3N0YXRlKHBsYW5lLCByZWxheCk7Cj4gPiA+IC19Cj4g PiA+ICsJaWd0X2Fzc2VydF9lcV91MzIobGVnYWN5LT5idWZmZXJfaWQsCj4gPiA+IHByaW1hcnlf dmFsdWVzW0lHVF9QTEFORV9GQl9JRF0pOwo+ID4gPiDCoAo+ID4gPiAtc3RhdGljIHN0cnVjdCBr bXNfYXRvbWljX2NydGNfc3RhdGUgKmZpbmRfY3J0YyhzdHJ1Y3QKPiA+ID4ga21zX2F0b21pY19z dGF0ZSAqc3RhdGUsCj4gPiA+IC0JCQkJCcKgwqDCoMKgwqDCoMKgYm9vbAo+ID4gPiBtdXN0X2Jl X2VuYWJsZWQpCj4gPiA+IC17Cj4gPiA+IC0JaW50IGk7Cj4gPiA+ICsJaWYgKGxlZ2FjeS0+bW9k ZV92YWxpZCkgewo+ID4gPiArCQlpZ3RfYXNzZXJ0KG1vZGVfcHJvcCk7Cj4gPiA+IMKgCj4gPiA+ IC0JZm9yIChpID0gMDsgaSA8IHN0YXRlLT5udW1fY3J0Y3M7IGkrKykgewo+ID4gPiAtCQlzdHJ1 Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlICpjcnRjID0gJnN0YXRlLQo+ID4gPiA+IAo+ID4gPiA+ IGNydGNzW2ldOwo+ID4gPiArCQlkb19vcl9kaWUobWVtY21wKCZsZWdhY3ktPm1vZGUsIG1vZGUs Cj4gPiA+IHNpemVvZigqbW9kZSkpKTsKPiA+ID4gwqAKPiA+ID4gLQkJaWYgKCFjcnRjLT5vYmop Cj4gPiA+IC0JCQljb250aW51ZTsKPiA+ID4gLQkJaWYgKG11c3RfYmVfZW5hYmxlZCAmJiAhY3J0 Yy0+YWN0aXZlKQo+ID4gPiAtCQkJY29udGludWU7Cj4gPiA+ICsJCWlndF9hc3NlcnRfZXEobGVn YWN5LT53aWR0aCwgbGVnYWN5LQo+ID4gPiA+bW9kZS5oZGlzcGxheSk7Cj4gPiA+ICsJCWlndF9h c3NlcnRfZXEobGVnYWN5LT5oZWlnaHQsIGxlZ2FjeS0KPiA+ID4gPiAKPiA+ID4gPiBtb2RlLnZk aXNwbGF5KTsKPiA+ID4gwqAKPiA+ID4gLQkJY3J0Y19nZXRfY3VycmVudF9zdGF0ZShjcnRjKTsK PiA+ID4gLQkJcmV0dXJuIGNydGM7Cj4gPiA+ICsJCWlndF9hc3NlcnRfbmVxKHBpcGVfdmFsdWVz W0lHVF9DUlRDX01PREVfSURdLAo+ID4gPiAwKTsKPiA+ID4gKwl9IGVsc2Ugewo+ID4gPiArCQlp Z3RfYXNzZXJ0KCFtb2RlX3Byb3ApOwo+ID4gPiDCoAl9Cj4gPiA+IMKgCj4gPiA+IC0JcmV0dXJu IE5VTEw7Cj4gPiA+IC19Cj4gPiA+ICsJY3J0Y19nZXRfY3VycmVudF9zdGF0ZShwaXBlLCBjdXJy ZW50X3BpcGVfdmFsdWVzKTsKPiA+ID4gwqAKPiA+ID4gLXN0YXRpYyB2b2lkIGZpbGxfb2JqX3By b3BzKGludCBmZCwgdWludDMyX3QgaWQsIGludCB0eXBlLCBpbnQKPiA+ID4gbnVtX3Byb3BzLAo+ ID4gPiAtCQkJwqDCoMKgY29uc3QgY2hhciAqKnByb3BfbmFtZXMsIHVpbnQzMl90Cj4gPiA+ICpw cm9wX2lkcykKPiA+ID4gLXsKPiA+ID4gLQlkcm1Nb2RlT2JqZWN0UHJvcGVydGllc1B0ciBwcm9w czsKPiA+ID4gLQlpbnQgaSwgajsKPiA+ID4gLQo+ID4gPiAtCXByb3BzID0gZHJtTW9kZU9iamVj dEdldFByb3BlcnRpZXMoZmQsIGlkLCB0eXBlKTsKPiA+ID4gLQlpZ3RfYXNzZXJ0KHByb3BzKTsK PiA+ID4gKwkvKiBPcHRpb25hbGx5IHJlbGF4IHRoZSBjaGVjayBmb3IgTU9ERV9JRDogdXNpbmcg dGhlCj4gPiA+IGxlZ2FjeQo+ID4gPiBTZXRDcnRjCj4gPiA+ICsJwqAqIEFQSSBjYW4gcG90ZW50 aWFsbHkgY2hhbmdlIE1PREVfSUQgZXZlbiBpZiB0aGUgbW9kZQo+ID4gPiBpdHNlbGYgcmVtYWlu cwo+ID4gPiArCcKgKiB1bmNoYW5nZWQuICovCj4gPiA+ICsJaWYgKHJlbGF4ICYgQ1JUQ19SRUxB WF9NT0RFICYmIG1vZGUgJiYKPiA+ID4gY3VycmVudF9waXBlX3ZhbHVlc1tJR1RfQ1JUQ19NT0RF X0lEXSAmJgo+ID4gPiArCcKgwqDCoMKgY3VycmVudF9waXBlX3ZhbHVlc1tJR1RfQ1JUQ19NT0RF X0lEXSAhPQo+ID4gPiBwaXBlX3ZhbHVlc1tJR1RfQ1JUQ19NT0RFX0lEXSkgewo+ID4gPiArCQlk cm1Nb2RlUHJvcGVydHlCbG9iUmVzICpjdXJfcHJvcCA9Cj4gPiA+ICsJCQlkcm1Nb2RlR2V0UHJv cGVydHlCbG9iKHBpcGUtPmRpc3BsYXktCj4gPiA+ID4gCj4gPiA+ID4gZHJtX2ZkLAo+ID4gPiAr CQkJCQnCoMKgwqDCoMKgwqDCoGN1cnJlbnRfcGlwZV92YWx1Cj4gPiA+IGVzW0kKPiA+ID4gR1Rf Q1JUQ19NT0RFX0lEXSk7Cj4gPiA+IMKgCj4gPiA+IC0JZm9yIChpID0gMDsgaSA8IHByb3BzLT5j b3VudF9wcm9wczsgaSsrKSB7Cj4gPiA+IC0JCWRybU1vZGVQcm9wZXJ0eVB0ciBwcm9wID0KPiA+ ID4gLQkJCWRybU1vZGVHZXRQcm9wZXJ0eShmZCwgcHJvcHMtPnByb3BzW2ldKTsKPiA+ID4gKwkJ aWd0X2Fzc2VydChjdXJfcHJvcCk7Cj4gPiA+ICsJCWlndF9hc3NlcnRfZXEoY3VyX3Byb3AtPmxl bmd0aCwgc2l6ZW9mKHN0cnVjdAo+ID4gPiBkcm1fbW9kZV9tb2RlaW5mbykpOwo+ID4gPiDCoAo+ ID4gPiAtCQlmb3IgKGogPSAwOyBqIDwgbnVtX3Byb3BzOyBqKyspIHsKPiA+ID4gLQkJCWlmIChz dHJjbXAocHJvcC0+bmFtZSwgcHJvcF9uYW1lc1tqXSkgIT0KPiA+ID4gMCkKPiA+ID4gLQkJCQlj b250aW51ZTsKPiA+ID4gLQkJCXByb3BfaWRzW2pdID0gcHJvcHMtPnByb3BzW2ldOwo+ID4gPiAt CQkJYnJlYWs7Cj4gPiA+IC0JCX0KPiA+ID4gKwkJaWYgKCFtZW1jbXAoY3VyX3Byb3AtPmRhdGEs IG1vZGUsCj4gPiA+IHNpemVvZigqbW9kZSkpKQo+ID4gPiArCQkJY3VycmVudF9waXBlX3ZhbHVl c1tJR1RfQ1JUQ19NT0RFX0lEXSA9Cj4gPiA+IHBpcGVfdmFsdWVzW0lHVF9DUlRDX01PREVfSURd Owo+ID4gPiDCoAo+ID4gPiAtCQlkcm1Nb2RlRnJlZVByb3BlcnR5KHByb3ApOwo+ID4gPiArCQlk cm1Nb2RlRnJlZVByb3BlcnR5QmxvYihjdXJfcHJvcCk7Cj4gPiA+IMKgCX0KPiA+ID4gwqAKPiA+ ID4gLQlkcm1Nb2RlRnJlZU9iamVjdFByb3BlcnRpZXMocHJvcHMpOwo+ID4gPiAtfQo+ID4gPiAr CWRvX29yX2RpZShtZW1jbXAocGlwZV92YWx1ZXMsIGN1cnJlbnRfcGlwZV92YWx1ZXMsCj4gPiA+ IHNpemVvZihjdXJyZW50X3BpcGVfdmFsdWVzKSkpOwo+ID4gPiDCoAo+ID4gPiAtc3RhdGljIHZv aWQgZmlsbF9vYmpfcHJvcF9tYXAoaW50IGZkLCB1aW50MzJfdCBpZCwgaW50IHR5cGUsCj4gPiA+ IGNvbnN0Cj4gPiA+IGNoYXIgKm5hbWUsCj4gPiA+IC0JCQnCoMKgwqDCoMKgwqBpbnQgbnVtX2Vu dW1zLCBjb25zdCBjaGFyCj4gPiA+ICoqZW51bV9uYW1lcywKPiA+ID4gLQkJCcKgwqDCoMKgwqDC oHVpbnQ2NF90ICplbnVtX2lkcykKPiA+ID4gLXsKPiA+ID4gLQlkcm1Nb2RlT2JqZWN0UHJvcGVy dGllc1B0ciBwcm9wczsKPiA+ID4gLQlpbnQgaSwgaiwgazsKPiA+ID4gLQo+ID4gPiAtCXByb3Bz ID0gZHJtTW9kZU9iamVjdEdldFByb3BlcnRpZXMoZmQsIGlkLCB0eXBlKTsKPiA+ID4gLQlpZ3Rf YXNzZXJ0KHByb3BzKTsKPiA+ID4gLQo+ID4gPiAtCWZvciAoaSA9IDA7IGkgPCBwcm9wcy0+Y291 bnRfcHJvcHM7IGkrKykgewo+ID4gPiAtCQlkcm1Nb2RlUHJvcGVydHlQdHIgcHJvcCA9Cj4gPiA+ IC0JCQlkcm1Nb2RlR2V0UHJvcGVydHkoZmQsIHByb3BzLT5wcm9wc1tpXSk7Cj4gPiA+IC0KPiA+ ID4gLQkJaWd0X2Fzc2VydChwcm9wKTsKPiA+ID4gLQo+ID4gPiAtCQlpZiAoc3RyY21wKHByb3At Pm5hbWUsIG5hbWUpICE9IDApIHsKPiA+ID4gLQkJCWRybU1vZGVGcmVlUHJvcGVydHkocHJvcCk7 Cj4gPiA+IC0JCQljb250aW51ZTsKPiA+ID4gLQkJfQo+ID4gPiAtCj4gPiA+IC0JCWZvciAoaiA9 IDA7IGogPCBwcm9wLT5jb3VudF9lbnVtczsgaisrKSB7Cj4gPiA+IC0JCQlzdHJ1Y3QgZHJtX21v ZGVfcHJvcGVydHlfZW51bSAqZSA9Cj4gPiA+ICZwcm9wLQo+ID4gPiA+IAo+ID4gPiA+IGVudW1z W2pdOwo+ID4gPiAtCj4gPiA+IC0JCQlmb3IgKGsgPSAwOyBrIDwgbnVtX2VudW1zOyBrKyspIHsK PiA+ID4gLQkJCQlpZiAoc3RyY21wKGUtPm5hbWUsCj4gPiA+IGVudW1fbmFtZXNba10pCj4gPiA+ ICE9IDApCj4gPiA+IC0JCQkJCWNvbnRpbnVlOwo+ID4gPiAtCj4gPiA+IC0JCQkJZW51bV9pZHNb a10gPSBlLT52YWx1ZTsKPiA+ID4gLQkJCQlicmVhazsKPiA+ID4gLQkJCX0KPiA+ID4gLQkJfQo+ ID4gPiAtCj4gPiA+IC0JCWRybU1vZGVGcmVlUHJvcGVydHkocHJvcCk7Cj4gPiA+IC0JfQo+ID4g PiArCWRybU1vZGVGcmVlQ3J0YyhsZWdhY3kpOwo+ID4gPiArCWRybU1vZGVGcmVlUHJvcGVydHlC bG9iKG1vZGVfcHJvcCk7Cj4gPiA+IMKgfQo+ID4gPiDCoAo+ID4gPiAtc3RhdGljIHZvaWQgYXRv bWljX3NldHVwKHN0cnVjdCBrbXNfYXRvbWljX3N0YXRlICpzdGF0ZSkKPiA+ID4gK3N0YXRpYyB2 b2lkIGNydGNfY29tbWl0KGlndF9waXBlX3QgKnBpcGUsIGlndF9wbGFuZV90ICpwbGFuZSwKPiA+ ID4gKwkJCWVudW0gaWd0X2NvbW1pdF9zdHlsZSBzLAo+ID4gPiArCQkJZW51bSBrbXNfYXRvbWlj X2NoZWNrX3JlbGF4IHJlbGF4KQo+ID4gPiDCoHsKPiA+ID4gLQlzdHJ1Y3Qga21zX2F0b21pY19k ZXNjICpkZXNjID0gc3RhdGUtPmRlc2M7Cj4gPiA+IC0JZHJtTW9kZVJlc1B0ciByZXM7Cj4gPiA+ IC0JZHJtTW9kZVBsYW5lUmVzUHRyIHJlc19wbGFuZTsKPiA+ID4gLQlpbnQgaTsKPiA+ID4gLQo+ ID4gPiAtCWRlc2MtPmZkID0gZHJtX29wZW5fZHJpdmVyX21hc3RlcihEUklWRVJfQU5ZKTsKPiA+ ID4gLQlpZ3RfYXNzZXJ0X2ZkKGRlc2MtPmZkKTsKPiA+ID4gLQo+ID4gPiAtCWlndF9za2lwX29u KGRybVNldENsaWVudENhcChkZXNjLT5mZCwKPiA+ID4gRFJNX0NMSUVOVF9DQVBfQVRPTUlDLAo+ ID4gPiAxKSk7Cj4gPiA+IC0KPiA+ID4gLQlyZXMgPSBkcm1Nb2RlR2V0UmVzb3VyY2VzKGRlc2Mt PmZkKTsKPiA+ID4gLQlyZXNfcGxhbmUgPSBkcm1Nb2RlR2V0UGxhbmVSZXNvdXJjZXMoZGVzYy0+ ZmQpOwo+ID4gPiAtCWlndF9hc3NlcnQocmVzKTsKPiA+ID4gLQlpZ3RfYXNzZXJ0KHJlc19wbGFu ZSk7Cj4gPiA+IC0KPiA+ID4gLQlpZ3RfYXNzZXJ0X2x0KDAsIHJlcy0+Y291bnRfY3J0Y3MpOwo+ ID4gPiAtCXN0YXRlLT5udW1fY3J0Y3MgPSByZXMtPmNvdW50X2NydGNzOwo+ID4gPiAtCXN0YXRl LT5jcnRjcyA9IGNhbGxvYyhzdGF0ZS0+bnVtX2NydGNzLCBzaXplb2YoKnN0YXRlLQo+ID4gPiA+ IAo+ID4gPiA+IGNydGNzKSk7Cj4gPiA+IC0JaWd0X2Fzc2VydChzdGF0ZS0+Y3J0Y3MpOwo+ID4g PiAtCj4gPiA+IC0JaWd0X2Fzc2VydF9sdCgwLCByZXNfcGxhbmUtPmNvdW50X3BsYW5lcyk7Cj4g PiA+IC0Jc3RhdGUtPm51bV9wbGFuZXMgPSByZXNfcGxhbmUtPmNvdW50X3BsYW5lczsKPiA+ID4g LQlzdGF0ZS0+cGxhbmVzID0gY2FsbG9jKHN0YXRlLT5udW1fcGxhbmVzLCBzaXplb2YoKnN0YXRl LQo+ID4gPiA+IAo+ID4gPiA+IHBsYW5lcykpOwo+ID4gPiAtCWlndF9hc3NlcnQoc3RhdGUtPnBs YW5lcyk7Cj4gPiA+IC0KPiA+ID4gLQlpZ3RfYXNzZXJ0X2x0KDAsIHJlcy0+Y291bnRfY29ubmVj dG9ycyk7Cj4gPiA+IC0Jc3RhdGUtPm51bV9jb25uZWN0b3JzID0gcmVzLT5jb3VudF9jb25uZWN0 b3JzOwo+ID4gPiAtCXN0YXRlLT5jb25uZWN0b3JzID0gY2FsbG9jKHN0YXRlLT5udW1fY29ubmVj dG9ycywKPiA+ID4gLQkJCQnCoMKgwqBzaXplb2YoKnN0YXRlLT5jb25uZWN0b3JzKSk7Cj4gPiA+ IC0JaWd0X2Fzc2VydChzdGF0ZS0+Y29ubmVjdG9ycyk7Cj4gPiA+IC0KPiA+ID4gLQlmaWxsX29i al9wcm9wcyhkZXNjLT5mZCwgcmVzLT5jcnRjc1swXSwKPiA+ID4gLQkJwqDCoMKgwqDCoMKgwqBE Uk1fTU9ERV9PQkpFQ1RfQ1JUQywgSUdUX05VTV9DUlRDX1BST1BTLAo+ID4gPiAtCQnCoMKgwqDC oMKgwqDCoGlndF9jcnRjX3Byb3BfbmFtZXMsIGRlc2MtPnByb3BzX2NydGMpOwo+ID4gPiAtCj4g PiA+IC0JZmlsbF9vYmpfcHJvcHMoZGVzYy0+ZmQsIHJlc19wbGFuZS0+cGxhbmVzWzBdLAo+ID4g PiAtCQnCoMKgwqDCoMKgwqDCoERSTV9NT0RFX09CSkVDVF9QTEFORSwKPiA+ID4gSUdUX05VTV9Q TEFORV9QUk9QUywKPiA+ID4gLQkJwqDCoMKgwqDCoMKgwqBpZ3RfcGxhbmVfcHJvcF9uYW1lcywg ZGVzYy0+cHJvcHNfcGxhbmUpOwo+ID4gPiAtCWZpbGxfb2JqX3Byb3BfbWFwKGRlc2MtPmZkLCBy ZXNfcGxhbmUtPnBsYW5lc1swXSwKPiA+ID4gLQkJCcKgwqBEUk1fTU9ERV9PQkpFQ1RfUExBTkUs ICJ0eXBlIiwKPiA+ID4gLQkJCcKgwqBOVU1fUExBTkVfVFlQRV9QUk9QUywKPiA+ID4gcGxhbmVf dHlwZV9wcm9wX25hbWVzLAo+ID4gPiAtCQkJwqDCoGRlc2MtPnByb3BzX3BsYW5lX3R5cGUpOwo+ ID4gPiAtCj4gPiA+IC0JZmlsbF9vYmpfcHJvcHMoZGVzYy0+ZmQsIHJlcy0+Y29ubmVjdG9yc1sw XSwKPiA+ID4gLQkJwqDCoMKgwqDCoMKgwqBEUk1fTU9ERV9PQkpFQ1RfQ09OTkVDVE9SLAo+ID4g PiBJR1RfTlVNX0NPTk5FQ1RPUl9QUk9QUywKPiA+ID4gLQkJwqDCoMKgwqDCoMKgwqBpZ3RfY29u bmVjdG9yX3Byb3BfbmFtZXMsIGRlc2MtCj4gPiA+ID4gCj4gPiA+ID4gcHJvcHNfY29ubmVjdG9y KTsKPiA+ID4gLQo+ID4gPiAtCWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bnVtX2NydGNzOyBpKysp IHsKPiA+ID4gLQkJc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YyA9ICZzdGF0ZS0K PiA+ID4gPiAKPiA+ID4gPiBjcnRjc1tpXTsKPiA+ID4gLQo+ID4gPiAtCQljcnRjLT5zdGF0ZSA9 IHN0YXRlOwo+ID4gPiAtCQljcnRjLT5vYmogPSByZXMtPmNydGNzW2ldOwo+ID4gPiAtCQljcnRj LT5pZHggPSBpOwo+ID4gPiAtCQljcnRjX2dldF9jdXJyZW50X3N0YXRlKGNydGMpOwo+ID4gPiAt Cj4gPiA+IC0JCS8qIFRoZSBibG9iIHBvaW50ZWQgdG8gYnkgTU9ERV9JRCBjb3VsZCB3ZWxsIGJl Cj4gPiA+IHRyYW5zaWVudCwKPiA+ID4gLQkJwqAqIGFuZCBsb3NlIGl0cyBsYXN0IHJlZmVyZW5j ZSBhcyB3ZSBzd2l0Y2ggYXdheQo+ID4gPiBmcm9tIGl0Lgo+ID4gPiAtCQnCoCogRHVwbGljYXRl IHRoZSBibG9iIGhlcmUgc28gd2UgaGF2ZSBhCj4gPiA+IHJlZmVyZW5jZSB3ZQo+ID4gPiBrbm93 IHdlCj4gPiA+IC0JCcKgKiBvd24uICovCj4gPiA+IC0JCWlmIChjcnRjLT5tb2RlLmlkICE9IDAp Cj4gPiA+IC0JCcKgwqDCoMKgY3J0Yy0+bW9kZS5pZCA9IGJsb2JfZHVwbGljYXRlKGRlc2MtPmZk LAo+ID4gPiBjcnRjLQo+ID4gPiA+IAo+ID4gPiA+IG1vZGUuaWQpOwo+ID4gPiAtCX0KPiA+ID4g KwlpZ3RfZGlzcGxheV9jb21taXQyKHBpcGUtPmRpc3BsYXksIHMpOwo+ID4gPiDCoAo+ID4gPiAt CWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bnVtX3BsYW5lczsgaSsrKSB7Cj4gPiA+IC0JCWRybU1v ZGVQbGFuZVB0ciBwbGFuZSA9Cj4gPiA+IC0JCQlkcm1Nb2RlR2V0UGxhbmUoZGVzYy0+ZmQsIHJl c19wbGFuZS0KPiA+ID4gPiAKPiA+ID4gPiBwbGFuZXNbaV0pOwo+ID4gPiAtCQlpZ3RfYXNzZXJ0 KHBsYW5lKTsKPiA+ID4gLQo+ID4gPiAtCQlzdGF0ZS0+cGxhbmVzW2ldLnN0YXRlID0gc3RhdGU7 Cj4gPiA+IC0JCXN0YXRlLT5wbGFuZXNbaV0ub2JqID0gcmVzX3BsYW5lLT5wbGFuZXNbaV07Cj4g PiA+IC0JCXN0YXRlLT5wbGFuZXNbaV0uY3J0Y19tYXNrID0gcGxhbmUtCj4gPiA+ID5wb3NzaWJs ZV9jcnRjczsKPiA+ID4gLQkJcGxhbmVfZ2V0X2N1cnJlbnRfc3RhdGUoJnN0YXRlLT5wbGFuZXNb aV0pOwo+ID4gPiAtCX0KPiA+ID4gLQo+ID4gPiAtCWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bnVt X2Nvbm5lY3RvcnM7IGkrKykgewo+ID4gPiAtCQlzdGF0ZS0+Y29ubmVjdG9yc1tpXS5zdGF0ZSA9 IHN0YXRlOwo+ID4gPiAtCQlzdGF0ZS0+Y29ubmVjdG9yc1tpXS5vYmogPSByZXMtPmNvbm5lY3Rv cnNbaV07Cj4gPiA+IC0JCWNvbm5lY3Rvcl9nZXRfY3VycmVudF9zdGF0ZSgmc3RhdGUtCj4gPiA+ ID5jb25uZWN0b3JzW2ldKTsKPiA+ID4gLQl9Cj4gPiA+IC0KPiA+ID4gLQlkcm1Nb2RlRnJlZVBs YW5lUmVzb3VyY2VzKHJlc19wbGFuZSk7Cj4gPiA+IC0JZHJtTW9kZUZyZWVSZXNvdXJjZXMocmVz KTsKPiA+ID4gKwljcnRjX2NoZWNrX2N1cnJlbnRfc3RhdGUocGlwZSwgcGlwZS0+dmFsdWVzLCBw bGFuZS0KPiA+ID4gPnZhbHVlcywKPiA+ID4gcmVsYXgpOwo+ID4gPiArCXBsYW5lX2NoZWNrX2N1 cnJlbnRfc3RhdGUocGxhbmUsIHBsYW5lLT52YWx1ZXMsIHJlbGF4KTsKPiA+ID4gwqB9Cj4gPiA+ IMKgCj4gPiA+IC1zdGF0aWMgc3RydWN0IGttc19hdG9taWNfc3RhdGUgKgo+ID4gPiAtYXRvbWlj X3N0YXRlX2R1cChjb25zdCBzdHJ1Y3Qga21zX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gPiA+ICtz dGF0aWMgdm9pZCBjcnRjX2NvbW1pdF9hdG9taWNfZmxhZ3NfZXJyKGlndF9waXBlX3QgKnBpcGUs Cj4gPiA+IGlndF9wbGFuZV90ICpwbGFuZSwKPiA+ID4gKwkJCQkJwqB1bnNpZ25lZCBmbGFncywK PiA+ID4gKwkJCQkJwqBlbnVtCj4gPiA+IGttc19hdG9taWNfY2hlY2tfcmVsYXgKPiA+ID4gcmVs YXgsCj4gPiA+ICsJCQkJCcKgaW50IGVycikKPiA+ID4gwqB7Cj4gPiA+IC0Jc3RydWN0IGttc19h dG9taWNfc3RhdGUgKnJldCA9IGNhbGxvYygxLCBzaXplb2YoKnJldCkpOwo+ID4gPiAtCj4gPiA+ IC0JaWd0X2Fzc2VydChyZXQpOwo+ID4gPiAtCSpyZXQgPSAqc3RhdGU7Cj4gPiA+ICsJdWludDY0 X3QgY3VycmVudF9waXBlX3ZhbHVlc1tJR1RfTlVNX0NSVENfUFJPUFNdOwo+ID4gPiArCXVpbnQ2 NF90IGN1cnJlbnRfcGxhbmVfdmFsdWVzW0lHVF9OVU1fUExBTkVfUFJPUFNdOwo+ID4gPiDCoAo+ ID4gPiAtCXJldC0+Y3J0Y3MgPSBjYWxsb2MocmV0LT5udW1fY3J0Y3MsIHNpemVvZigqcmV0LQo+ ID4gPiA+Y3J0Y3MpKTsKPiA+ID4gLQlpZ3RfYXNzZXJ0KHJldC0+Y3J0Y3MpOwo+ID4gPiAtCW1l bWNweShyZXQtPmNydGNzLCBzdGF0ZS0+Y3J0Y3MsIHJldC0+bnVtX2NydGNzICoKPiA+ID4gc2l6 ZW9mKCpyZXQtPmNydGNzKSk7Cj4gPiA+ICsJY3J0Y19nZXRfY3VycmVudF9zdGF0ZShwaXBlLCBj dXJyZW50X3BpcGVfdmFsdWVzKTsKPiA+ID4gKwlwbGFuZV9nZXRfY3VycmVudF9zdGF0ZShwbGFu ZSwgY3VycmVudF9wbGFuZV92YWx1ZXMpOwo+ID4gPiDCoAo+ID4gPiAtCXJldC0+cGxhbmVzID0g Y2FsbG9jKHJldC0+bnVtX3BsYW5lcywgc2l6ZW9mKCpyZXQtCj4gPiA+ID5wbGFuZXMpKTsKPiA+ ID4gLQlpZ3RfYXNzZXJ0KHJldC0+cGxhbmVzKTsKPiA+ID4gLQltZW1jcHkocmV0LT5wbGFuZXMs IHN0YXRlLT5wbGFuZXMsCj4gPiA+IC0JwqDCoMKgwqDCoMKgwqByZXQtPm51bV9wbGFuZXMgKiBz aXplb2YoKnJldC0+cGxhbmVzKSk7Cj4gPiA+ICsJaWd0X2Fzc2VydF9lcSgtZXJyLCBpZ3RfZGlz cGxheV90cnlfY29tbWl0X2F0b21pYyhwaXBlLQo+ID4gPiA+IAo+ID4gPiA+IGRpc3BsYXksIGZs YWdzLCBOVUxMKSk7Cj4gPiA+IMKgCj4gPiA+IC0JcmV0LT5jb25uZWN0b3JzID0gY2FsbG9jKHJl dC0+bnVtX2Nvbm5lY3RvcnMsCj4gPiA+IHNpemVvZigqcmV0LQo+ID4gPiA+IAo+ID4gPiA+IGNv bm5lY3RvcnMpKTsKPiA+ID4gLQlpZ3RfYXNzZXJ0KHJldC0+Y29ubmVjdG9ycyk7Cj4gPiA+IC0J bWVtY3B5KHJldC0+Y29ubmVjdG9ycywgc3RhdGUtPmNvbm5lY3RvcnMsCj4gPiA+IC0JwqDCoMKg wqDCoMKgwqByZXQtPm51bV9jb25uZWN0b3JzICogc2l6ZW9mKCpyZXQtPmNvbm5lY3RvcnMpKTsK PiA+ID4gLQo+ID4gPiAtCXJldHVybiByZXQ7Cj4gPiA+ICsJY3J0Y19jaGVja19jdXJyZW50X3N0 YXRlKHBpcGUsIGN1cnJlbnRfcGlwZV92YWx1ZXMsCj4gPiA+IGN1cnJlbnRfcGxhbmVfdmFsdWVz LCByZWxheCk7Cj4gPiA+ICsJcGxhbmVfY2hlY2tfY3VycmVudF9zdGF0ZShwbGFuZSwgY3VycmVu dF9wbGFuZV92YWx1ZXMsCj4gPiA+IHJlbGF4KTsKPiA+ID4gwqB9Cj4gPiA+IMKgCj4gPiA+IC1z dGF0aWMgdm9pZCBhdG9taWNfc3RhdGVfZnJlZShzdHJ1Y3Qga21zX2F0b21pY19zdGF0ZSAqc3Rh dGUpCj4gPiA+IC17Cj4gPiA+IC0JZnJlZShzdGF0ZS0+Y3J0Y3MpOwo+ID4gPiAtCWZyZWUoc3Rh dGUtPnBsYW5lcyk7Cj4gPiA+IC0JZnJlZShzdGF0ZS0+Y29ubmVjdG9ycyk7Cj4gPiA+IC0JZnJl ZShzdGF0ZSk7Cj4gPiA+IC19Cj4gPiA+ICsjZGVmaW5lIGNydGNfY29tbWl0X2F0b21pY19lcnIo cGlwZSwgcGxhbmUsIHJlbGF4LCBlcnIpIFwKPiA+ID4gKwljcnRjX2NvbW1pdF9hdG9taWNfZmxh Z3NfZXJyKHBpcGUsIHBsYW5lLAo+ID4gPiBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwg cmVsYXgsIGVycikKPiA+ID4gwqAKPiA+ID4gLXN0YXRpYyB1aW50MzJfdCBwbGFuZV9nZXRfaWd0 X2Zvcm1hdChzdHJ1Y3QKPiA+ID4ga21zX2F0b21pY19wbGFuZV9zdGF0ZQo+ID4gPiAqcGxhbmUp Cj4gPiA+ICtzdGF0aWMgdWludDMyX3QgcGxhbmVfZ2V0X2lndF9mb3JtYXQoaWd0X3BsYW5lX3Qg KnBsYW5lKQo+ID4gPiDCoHsKPiA+ID4gwqAJZHJtTW9kZVBsYW5lUHRyIHBsYW5lX2ttczsKPiA+ ID4gwqAJY29uc3QgdWludDMyX3QgKmlndF9mb3JtYXRzOwo+ID4gPiAtCXVpbnQzMl90IHJldCA9 IDA7Cj4gPiA+IMKgCWludCBudW1faWd0X2Zvcm1hdHM7Cj4gPiA+IMKgCWludCBpOwo+ID4gPiDC oAo+ID4gPiAtCXBsYW5lX2ttcyA9IGRybU1vZGVHZXRQbGFuZShwbGFuZS0+c3RhdGUtPmRlc2Mt PmZkLAo+ID4gPiBwbGFuZS0KPiA+ID4gPiAKPiA+ID4gPiBvYmopOwo+ID4gPiAtCWlndF9hc3Nl cnQocGxhbmVfa21zKTsKPiA+ID4gKwlwbGFuZV9rbXMgPSBwbGFuZS0+ZHJtX3BsYW5lOwo+ID4g PiDCoAo+ID4gPiDCoAlpZ3RfZ2V0X2FsbF9jYWlyb19mb3JtYXRzKCZpZ3RfZm9ybWF0cywKPiA+ ID4gJm51bV9pZ3RfZm9ybWF0cyk7Cj4gPiA+IMKgCWZvciAoaSA9IDA7IGkgPCBudW1faWd0X2Zv cm1hdHM7IGkrKykgewo+ID4gPiDCoAkJaW50IGo7Cj4gPiA+IMKgCj4gPiA+IMKgCQlmb3IgKGog PSAwOyBqIDwgcGxhbmVfa21zLT5jb3VudF9mb3JtYXRzOyBqKyspIHsKPiA+ID4gLQkJCWlmIChw bGFuZV9rbXMtPmZvcm1hdHNbal0gPT0KPiA+ID4gaWd0X2Zvcm1hdHNbaV0pCj4gPiA+IHsKPiA+ ID4gLQkJCQlyZXQgPSBwbGFuZV9rbXMtPmZvcm1hdHNbal07Cj4gPiA+IC0JCQkJYnJlYWs7Cj4g PiA+IC0JCQl9Cj4gPiA+ICsJCQlpZiAocGxhbmVfa21zLT5mb3JtYXRzW2pdID09Cj4gPiA+IGln dF9mb3JtYXRzW2ldKQo+ID4gPiArCQkJCXJldHVybiBwbGFuZV9rbXMtPmZvcm1hdHNbal07Cj4g PiA+IMKgCQl9Cj4gPiA+IMKgCX0KPiA+ID4gwqAKPiA+ID4gLQlkcm1Nb2RlRnJlZVBsYW5lKHBs YW5lX2ttcyk7Cj4gPiA+IC0JcmV0dXJuIHJldDsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gwqB9 Cj4gPiA+IMKgCj4gPiA+IMKgc3RhdGljIHZvaWQKPiA+ID4gLXNldF9kcG1zKGludCBmZCwgaW50 IG1vZGUpCj4gPiA+ICtzZXRfZHBtcyhpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgaW50IG1vZGUpCj4g PiA+IMKgewo+ID4gPiAtCWludCBpOwo+ID4gPiAtCWRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3Rv cjsKPiA+ID4gLQl1aW50MzJfdCBpZDsKPiA+ID4gLQlkcm1Nb2RlUmVzICpyZXNvdXJjZXMgPSBk cm1Nb2RlR2V0UmVzb3VyY2VzKGZkKTsKPiA+ID4gLQo+ID4gPiAtCWZvciAoaSA9IDA7IGkgPCBy ZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3RvcnM7IGkrKykgewo+ID4gPiAtCQlpZCA9IHJlc291cmNl cy0+Y29ubmVjdG9yc1tpXTsKPiA+ID4gLQo+ID4gPiAtCQljb25uZWN0b3IgPSBkcm1Nb2RlR2V0 Q29ubmVjdG9yQ3VycmVudChmZCwgaWQpOwo+ID4gPiAtCj4gPiA+IC0JCWttc3Rlc3Rfc2V0X2Nv bm5lY3Rvcl9kcG1zKGZkLCBjb25uZWN0b3IsIG1vZGUpOwo+ID4gPiAtCj4gPiA+IC0JCWRybU1v ZGVGcmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7Cj4gPiA+IC0JfQo+ID4gPiArCWRvX29yX2RpZShk cm1Nb2RlQ29ubmVjdG9yU2V0UHJvcGVydHkob3V0cHV0LT5kaXNwbGF5LQo+ID4gPiA+IAo+ID4g PiA+IGRybV9mZCwgb3V0cHV0LT5pZCwKPiA+ID4gKwkJCQkJwqDCoMKgwqDCoMKgb3V0cHV0LQo+ ID4gPiA+IAo+ID4gPiA+IHByb3BzW0lHVF9DT05ORUNUT1JfRFBNU10sIG1vZGUpKTsKPiA+ID4g wqB9Cj4gPiA+IMKgCj4gPiA+IC1zdGF0aWMgdm9pZCBwbGFuZV9vdmVybGF5KHN0cnVjdCBrbXNf YXRvbWljX2NydGNfc3RhdGUgKmNydGMsCj4gPiA+IC0JCQnCoMKgc3RydWN0IGttc19hdG9taWNf cGxhbmVfc3RhdGUKPiA+ID4gKnBsYW5lX29sZCkKPiA+ID4gK3N0YXRpYyB2b2lkIHBsYW5lX292 ZXJsYXkoaWd0X3BpcGVfdCAqcGlwZSwgaWd0X291dHB1dF90Cj4gPiA+ICpvdXRwdXQsCj4gPiA+ IGlndF9wbGFuZV90ICpwbGFuZSkKPiA+ID4gwqB7Cj4gPiA+IC0Jc3RydWN0IGRybV9tb2RlX21v ZGVpbmZvICptb2RlID0gY3J0Yy0+bW9kZS5kYXRhOwo+ID4gPiAtCXN0cnVjdCBrbXNfYXRvbWlj X3BsYW5lX3N0YXRlIHBsYW5lID0gKnBsYW5lX29sZDsKPiA+ID4gLQl1aW50MzJfdCBmb3JtYXQg PSBwbGFuZV9nZXRfaWd0X2Zvcm1hdCgmcGxhbmUpOwo+ID4gPiAtCWRybU1vZGVBdG9taWNSZXEg KnJlcSA9IGRybU1vZGVBdG9taWNBbGxvYygpOwo+ID4gPiArCWRybU1vZGVNb2RlSW5mbyAqbW9k ZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKPiA+ID4gKwl1aW50MzJfdCBmb3JtYXQg PSBwbGFuZV9nZXRfaWd0X2Zvcm1hdChwbGFuZSk7Cj4gPiA+IMKgCXN0cnVjdCBpZ3RfZmIgZmI7 Cj4gPiA+ICsJdWludDMyX3QgdyA9IG1vZGUtPmhkaXNwbGF5IC8gMjsKPiA+ID4gKwl1aW50MzJf dCBoID0gbW9kZS0+dmRpc3BsYXkgLyAyOwo+ID4gPiDCoAo+ID4gPiAtCWlndF9yZXF1aXJlKHJl cSk7Cj4gPiA+IMKgCWlndF9yZXF1aXJlKGZvcm1hdCAhPSAwKTsKPiA+ID4gwqAKPiA+ID4gLQlw bGFuZS5zcmNfeCA9IDA7Cj4gPiA+IC0JcGxhbmUuc3JjX3kgPSAwOwo+ID4gPiAtCXBsYW5lLnNy Y193ID0gKG1vZGUtPmhkaXNwbGF5IC8gMikgPDwgMTY7Cj4gPiA+IC0JcGxhbmUuc3JjX2ggPSAo bW9kZS0+dmRpc3BsYXkgLyAyKSA8PCAxNjsKPiA+ID4gLQlwbGFuZS5jcnRjX3ggPSBtb2RlLT5o ZGlzcGxheSAvIDQ7Cj4gPiA+IC0JcGxhbmUuY3J0Y195ID0gbW9kZS0+dmRpc3BsYXkgLyA0Owo+ ID4gPiAtCXBsYW5lLmNydGNfdyA9IG1vZGUtPmhkaXNwbGF5IC8gMjsKPiA+ID4gLQlwbGFuZS5j cnRjX2ggPSBtb2RlLT52ZGlzcGxheSAvIDI7Cj4gPiA+IC0JcGxhbmUuY3J0Y19pZCA9IGNydGMt Pm9iajsKPiA+ID4gLQlwbGFuZS5mYl9pZCA9IGlndF9jcmVhdGVfcGF0dGVybl9mYihwbGFuZS5z dGF0ZS0+ZGVzYy0KPiA+ID4gPmZkLAo+ID4gPiAtCQkJCQnCoMKgwqDCoHBsYW5lLmNydGNfdywK PiA+ID4gcGxhbmUuY3J0Y19oLAo+ID4gPiAtCQkJCQnCoMKgwqDCoGZvcm1hdCwKPiA+ID4gSTkx NV9USUxJTkdfTk9ORSwgJmZiKTsKPiA+ID4gKwlpZ3RfY3JlYXRlX3BhdHRlcm5fZmIocGlwZS0+ ZGlzcGxheS0+ZHJtX2ZkLCB3LCBoLAo+ID4gPiArCQkJwqDCoMKgwqDCoMKgZm9ybWF0LCBJOTE1 X1RJTElOR19OT05FLCAmZmIpOwo+ID4gPiArCj4gPiA+ICsJaWd0X3BsYW5lX3NldF9mYihwbGFu ZSwgJmZiKTsKPiA+ID4gKwlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCB3LzIsIGgvMik7 Cj4gPiA+IMKgCj4gPiA+IMKgCS8qIEVuYWJsZSB0aGUgb3ZlcmxheSBwbGFuZSB1c2luZyB0aGUg YXRvbWljIEFQSSwgYW5kCj4gPiA+IGRvdWJsZS1jaGVjawo+ID4gPiDCoAnCoCogc3RhdGUgaXMg d2hhdCB3ZSB0aGluayBpdCBzaG91bGQgYmUuICovCj4gPiA+IC0JcGxhbmVfY29tbWl0X2F0b21p YygmcGxhbmUsIHJlcSwgQVRPTUlDX1JFTEFYX05PTkUpOwo+ID4gPiArCXBsYW5lX2NvbW1pdChw bGFuZSwgQ09NTUlUX0FUT01JQywgQVRPTUlDX1JFTEFYX05PTkUpOwo+ID4gPiDCoAo+ID4gPiDC oAkvKiBEaXNhYmxlIHRoZSBwbGFuZSBhbmQgY2hlY2sgdGhlIHN0YXRlIG1hdGNoZXMgdGhlCj4g PiA+IG9sZC4gKi8KPiA+ID4gLQlwbGFuZV9jb21taXRfYXRvbWljKHBsYW5lX29sZCwgcmVxLCBB VE9NSUNfUkVMQVhfTk9ORSk7Cj4gPiA+ICsJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgTlVMTCk7 Cj4gPiA+ICsJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgMCwgMCk7Cj4gPiA+ICsJcGxh bmVfY29tbWl0KHBsYW5lLCBDT01NSVRfQVRPTUlDLCBBVE9NSUNfUkVMQVhfTk9ORSk7Cj4gPiA+ IMKgCj4gPiA+IMKgCS8qIFJlLWVuYWJsZSB0aGUgcGxhbmUgdGhyb3VnaCB0aGUgbGVnYWN5IHBs YW5lIEFQSSwgYW5kCj4gPiA+IHZlcmlmeSB0aHJvdWdoCj4gPiA+IMKgCcKgKiBhdG9taWMuICov Cj4gPiA+IC0JcGxhbmVfY29tbWl0X2xlZ2FjeSgmcGxhbmUsIEFUT01JQ19SRUxBWF9OT05FKTsK PiA+ID4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZmIpOwo+ID4gPiArCWlndF9wbGFuZV9z ZXRfcG9zaXRpb24ocGxhbmUsIHcvMiwgaC8yKTsKPiA+ID4gKwlwbGFuZV9jb21taXQocGxhbmUs IENPTU1JVF9MRUdBQ1ksIEFUT01JQ19SRUxBWF9OT05FKTsKPiA+ID4gwqAKPiA+ID4gwqAJLyog UmVzdG9yZSB0aGUgcGxhbmUgdG8gaXRzIG9yaWdpbmFsIHNldHRpbmdzIHRocm91Z2gKPiA+ID4g dGhlCj4gPiA+IGxlZ2FjeSBwbGFuZQo+ID4gPiDCoAnCoCogQVBJLCBhbmQgdmVyaWZ5IHRocm91 Z2ggYXRvbWljLiAqLwo+ID4gPiAtCXBsYW5lX2NvbW1pdF9sZWdhY3kocGxhbmVfb2xkLCBBVE9N SUNfUkVMQVhfTk9ORSk7Cj4gPiA+ICsJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgTlVMTCk7Cj4g PiA+ICsJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgMCwgMCk7Cj4gPiA+ICsJcGxhbmVf Y29tbWl0KHBsYW5lLCBDT01NSVRfTEVHQUNZLCBBVE9NSUNfUkVMQVhfTk9ORSk7Cj4gPiA+IMKg Cj4gPiA+IC0JZHJtTW9kZUF0b21pY0ZyZWUocmVxKTsKPiA+ID4gKwlpZ3RfcmVtb3ZlX2ZiKHBp cGUtPmRpc3BsYXktPmRybV9mZCwgJmZiKTsKPiA+ID4gwqB9Cj4gPiA+IMKgCj4gPiA+IC1zdGF0 aWMgdm9pZCBwbGFuZV9wcmltYXJ5KHN0cnVjdCBrbXNfYXRvbWljX2NydGNfc3RhdGUgKmNydGMs Cj4gPiA+IC0JCQnCoMKgc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUKPiA+ID4gKnBsYW5l X29sZCkKPiA+ID4gK3N0YXRpYyB2b2lkIHBsYW5lX3ByaW1hcnkoaWd0X3BpcGVfdCAqcGlwZSwg aWd0X3BsYW5lX3QgKnBsYW5lLAo+ID4gPiBzdHJ1Y3QgaWd0X2ZiICpmYikKPiA+ID4gwqB7Cj4g PiA+IC0Jc3RydWN0IGRybV9tb2RlX21vZGVpbmZvICptb2RlID0gY3J0Yy0+bW9kZS5kYXRhOwo+ ID4gPiAtCXN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlIHBsYW5lID0gKnBsYW5lX29sZDsK PiA+ID4gLQl1aW50MzJfdCBmb3JtYXQgPSBwbGFuZV9nZXRfaWd0X2Zvcm1hdCgmcGxhbmUpOwo+ ID4gPiAtCWRybU1vZGVBdG9taWNSZXEgKnJlcSA9IGRybU1vZGVBdG9taWNBbGxvYygpOwo+ID4g PiAtCXN0cnVjdCBpZ3RfZmIgZmI7Cj4gPiA+IC0JdWludDMyX3QgZmxhZ3MgPSAwOwo+ID4gPiAt CWludCByZXQ7Cj4gPiA+IC0KPiA+ID4gLQlpZ3RfcmVxdWlyZShmb3JtYXQgIT0gMCk7Cj4gPiA+ ICsJc3RydWN0IGlndF9mYiBmYjI7Cj4gPiA+IMKgCj4gPiA+IC0JcGxhbmUuc3JjX3ggPSAwOwo+ ID4gPiAtCXBsYW5lLnNyY195ID0gMDsKPiA+ID4gLQlwbGFuZS5zcmNfdyA9IG1vZGUtPmhkaXNw bGF5IDw8IDE2Owo+ID4gPiAtCXBsYW5lLnNyY19oID0gbW9kZS0+dmRpc3BsYXkgPDwgMTY7Cj4g PiA+IC0JcGxhbmUuY3J0Y194ID0gMDsKPiA+ID4gLQlwbGFuZS5jcnRjX3kgPSAwOwo+ID4gPiAt CXBsYW5lLmNydGNfdyA9IG1vZGUtPmhkaXNwbGF5Owo+ID4gPiAtCXBsYW5lLmNydGNfaCA9IG1v ZGUtPnZkaXNwbGF5Owo+ID4gPiAtCXBsYW5lLmNydGNfaWQgPSBjcnRjLT5vYmo7Cj4gPiA+IC0J cGxhbmUuZmJfaWQgPSBpZ3RfY3JlYXRlX3BhdHRlcm5fZmIocGxhbmUuc3RhdGUtPmRlc2MtCj4g PiA+ID5mZCwKPiA+ID4gLQkJCQkJwqDCoMKgwqBwbGFuZS5jcnRjX3csCj4gPiA+IHBsYW5lLmNy dGNfaCwKPiA+ID4gLQkJCQkJwqDCoMKgwqBmb3JtYXQsCj4gPiA+IEk5MTVfVElMSU5HX05PTkUs ICZmYik7Cj4gPiA+IC0KPiA+ID4gLQlkcm1Nb2RlQXRvbWljU2V0Q3Vyc29yKHJlcSwgMCk7Cj4g PiA+IC0JY3J0Y19wb3B1bGF0ZV9yZXEoY3J0YywgcmVxKTsKPiA+ID4gLQlwbGFuZV9wb3B1bGF0 ZV9yZXEoJnBsYW5lLCByZXEpOwo+ID4gPiAtCXJldCA9IGRybU1vZGVBdG9taWNDb21taXQoY3J0 Yy0+c3RhdGUtPmRlc2MtPmZkLCByZXEsCj4gPiA+IC0JCQkJwqDCoERSTV9NT0RFX0FUT01JQ19U RVNUX09OTFksCj4gPiA+IE5VTEwpOwo+ID4gPiAtCS8qIFRyeSBoYXJkZXIgaW4gY2FzZSB0aGUg ZmFpbHVyZSBpcyBjYXVzZWQgYnkKPiA+ID4gZGlzYWxsb3dpbmcKPiA+ID4gbW9kZXNldC4gKi8K PiA+ID4gLQlpZiAocmV0ID09IC1FSU5WQUwpCj4gPiA+IC0JCWZsYWdzIHw9IERSTV9NT0RFX0FU T01JQ19BTExPV19NT0RFU0VUOwo+ID4gPiArCWlndF9jcmVhdGVfY29sb3JfcGF0dGVybl9mYihw aXBlLT5kaXNwbGF5LT5kcm1fZmQsCj4gPiA+ICsJCQkJwqDCoMKgwqBmYi0+d2lkdGgsIGZiLT5o ZWlnaHQsCj4gPiA+ICsJCQkJwqDCoMKgwqBmYi0+ZHJtX2Zvcm1hdCwKPiA+ID4gSTkxNV9USUxJ TkdfTk9ORSwKPiA+ID4gKwkJCQnCoMKgwqDCoDAuMiwgMC4yLCAwLjIsICZmYjIpOwo+ID4gPiDC oAo+ID4gPiDCoAkvKiBGbGlwIHRoZSBwcmltYXJ5IHBsYW5lIHVzaW5nIHRoZSBhdG9taWMgQVBJ LCBhbmQKPiA+ID4gZG91YmxlLQo+ID4gPiBjaGVjawo+ID4gPiDCoAnCoCogc3RhdGUgaXMgd2hh dCB3ZSB0aGluayBpdCBzaG91bGQgYmUuICovCj4gPiA+IC0JY3J0Y19jb21taXRfYXRvbWljKGNy dGMsICZwbGFuZSwgcmVxLCBBVE9NSUNfUkVMQVhfTk9ORSwKPiA+ID4gZmxhZ3MpOwo+ID4gPiAr CWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZmYjIpOwo+ID4gPiArCWNydGNfY29tbWl0KHBpcGUs IHBsYW5lLCBDT01NSVRfQVRPTUlDLAo+ID4gPiBBVE9NSUNfUkVMQVhfTk9ORSk7Cj4gPiA+IMKg Cj4gPiA+IMKgCS8qIFJlc3RvcmUgdGhlIHByaW1hcnkgcGxhbmUgYW5kIGNoZWNrIHRoZSBzdGF0 ZSBtYXRjaGVzCj4gPiA+IHRoZQo+ID4gPiBvbGQuICovCj4gPiA+IC0JY3J0Y19jb21taXRfYXRv bWljKGNydGMsIHBsYW5lX29sZCwgcmVxLAo+ID4gPiBBVE9NSUNfUkVMQVhfTk9ORSwKPiA+ID4g ZmxhZ3MpOwo+ID4gPiArCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIGZiKTsKPiA+ID4gKwljcnRj X2NvbW1pdChwaXBlLCBwbGFuZSwgQ09NTUlUX0FUT01JQywKPiA+ID4gQVRPTUlDX1JFTEFYX05P TkUpOwo+ID4gPiDCoAo+ID4gPiAtCS8qIFJlLWVuYWJsZSB0aGUgcGxhbmUgdGhyb3VnaCB0aGUg bGVnYWN5IENSVEMvcHJpbWFyeS0KPiA+ID4gcGxhbmXCoAo+ID4gPiBBUEksIGFuZAo+ID4gPiAr CS8qIFNldCB0aGUgcGxhbmUgdGhyb3VnaCB0aGUgbGVnYWN5IENSVEMvcHJpbWFyeS1wbGFuZQo+ ID4gPiBBUEksCj4gPiA+IGFuZAo+ID4gPiDCoAnCoCogdmVyaWZ5IHRocm91Z2ggYXRvbWljLiAq Lwo+ID4gPiAtCWNydGNfY29tbWl0X2xlZ2FjeShjcnRjLCAmcGxhbmUsIENSVENfUkVMQVhfTU9E RSk7Cj4gPiA+ICsJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmZiMik7Cj4gPiA+ICsJY3J0Y19j b21taXQocGlwZSwgcGxhbmUsIENPTU1JVF9MRUdBQ1ksCj4gPiA+IENSVENfUkVMQVhfTU9ERSk7 Cj4gPiA+IMKgCj4gPiA+IMKgCS8qIFJlc3RvcmUgdGhlIHBsYW5lIHRvIGl0cyBvcmlnaW5hbCBz ZXR0aW5ncyB0aHJvdWdoCj4gPiA+IHRoZQo+ID4gPiBsZWdhY3kgQ1JUQwo+ID4gPiDCoAnCoCog QVBJLCBhbmQgdmVyaWZ5IHRocm91Z2ggYXRvbWljLiAqLwo+ID4gPiAtCWNydGNfY29tbWl0X2xl Z2FjeShjcnRjLCBwbGFuZV9vbGQsIENSVENfUkVMQVhfTU9ERSk7Cj4gPiA+IC0KPiA+ID4gLQkv KiBGaW5hbGx5LCByZXN0b3JlIHRvIHRoZSBvcmlnaW5hbCBzdGF0ZS4gKi8KPiA+ID4gLQljcnRj X2NvbW1pdF9hdG9taWMoY3J0YywgcGxhbmVfb2xkLCByZXEsCj4gPiA+IEFUT01JQ19SRUxBWF9O T05FLAo+ID4gPiBmbGFncyk7Cj4gPiA+ICsJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgZmIpOwo+ ID4gPiArCWNydGNfY29tbWl0KHBpcGUsIHBsYW5lLCBDT01NSVRfTEVHQUNZLAo+ID4gPiBDUlRD X1JFTEFYX01PREUpOwo+ID4gPiDCoAo+ID4gPiAtCWRybU1vZGVBdG9taWNGcmVlKHJlcSk7Cj4g PiA+ICsJLyogU2V0IHRoZSBwbGFuZSB0aHJvdWdoIHRoZSB1bml2ZXJzYWwgc2V0cGxhbmUgQVBJ LCBhbmQKPiA+ID4gKwnCoCogdmVyaWZ5IHRocm91Z2ggYXRvbWljLiAqLwo+ID4gPiArCWlndF9w bGFuZV9zZXRfZmIocGxhbmUsICZmYjIpOwo+ID4gPiArCXBsYW5lX2NvbW1pdChwbGFuZSwgQ09N TUlUX1VOSVZFUlNBTCwKPiA+ID4gQVRPTUlDX1JFTEFYX05PTkUpOwo+ID4gPiDCoH0KPiA+ID4g wqAKPiA+ID4gwqAvKiB0ZXN0IHRvIGVuc3VyZSB0aGF0IERSTV9NT0RFX0FUT01JQ19URVNUX09O TFkgcmVhbGx5IG9ubHkKPiA+ID4gdG91Y2hlcwo+ID4gPiB0aGUKPiA+ID4gwqAgKiBmcmVlLXN0 YW5kaW5nIHN0YXRlIG9iamVjdHMgYW5kIG5vdGhpbmcgZWxzZS4KPiA+ID4gwqAgKi8KPiA+ID4g LXN0YXRpYyB2b2lkIHRlc3Rfb25seShzdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlICpjcnRj LAo+ID4gPiAtCQnCoMKgwqDCoMKgwqBzdHJ1Y3Qga21zX2F0b21pY19wbGFuZV9zdGF0ZSAqcGxh bmVfb2xkKQo+ID4gPiArc3RhdGljIHZvaWQgdGVzdF9vbmx5KGlndF9waXBlX3QgKnBpcGVfb2Jq LAo+ID4gPiArCQnCoMKgwqDCoMKgwqBpZ3RfcGxhbmVfdCAqcHJpbWFyeSwKPiA+ID4gKwkJwqDC oMKgwqDCoMKgaWd0X291dHB1dF90ICpvdXRwdXQpCj4gPiA+IMKgewo+ID4gPiAtCXN0cnVjdCBk cm1fbW9kZV9tb2RlaW5mbyAqbW9kZSA9IGNydGMtPm1vZGUuZGF0YTsKPiA+ID4gLQlzdHJ1Y3Qg a21zX2F0b21pY19wbGFuZV9zdGF0ZSBwbGFuZSA9ICpwbGFuZV9vbGQ7Cj4gPiA+IC0JdWludDMy X3QgZm9ybWF0ID0gcGxhbmVfZ2V0X2lndF9mb3JtYXQoJnBsYW5lKTsKPiA+ID4gLQlkcm1Nb2Rl QXRvbWljUmVxICpyZXEgPSBkcm1Nb2RlQXRvbWljQWxsb2MoKTsKPiA+ID4gKwlkcm1Nb2RlTW9k ZUluZm8gKm1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91dHB1dCk7Cj4gPiA+ICsJdWludDMy X3QgZm9ybWF0ID0gcGxhbmVfZ2V0X2lndF9mb3JtYXQocHJpbWFyeSk7Cj4gPiA+IMKgCXN0cnVj dCBpZ3RfZmIgZmI7Cj4gPiA+IC0JaW50IHJldDsKPiA+ID4gKwl1aW50NjRfdCBvbGRfcGxhbmVf dmFsdWVzW0lHVF9OVU1fUExBTkVfUFJPUFNdLAo+ID4gPiBvbGRfY3J0Y192YWx1ZXNbSUdUX05V TV9DUlRDX1BST1BTXTsKPiA+ID4gwqAKPiA+ID4gwqAJaWd0X3JlcXVpcmUoZm9ybWF0ICE9IDAp Owo+ID4gPiDCoAo+ID4gPiAtCXBsYW5lLnNyY194ID0gMDsKPiA+ID4gLQlwbGFuZS5zcmNfeSA9 IDA7Cj4gPiA+IC0JcGxhbmUuc3JjX3cgPSBtb2RlLT5oZGlzcGxheSA8PCAxNjsKPiA+ID4gLQlw bGFuZS5zcmNfaCA9IG1vZGUtPnZkaXNwbGF5IDw8IDE2Owo+ID4gPiAtCXBsYW5lLmNydGNfeCA9 IDA7Cj4gPiA+IC0JcGxhbmUuY3J0Y195ID0gMDsKPiA+ID4gLQlwbGFuZS5jcnRjX3cgPSBtb2Rl LT5oZGlzcGxheTsKPiA+ID4gLQlwbGFuZS5jcnRjX2ggPSBtb2RlLT52ZGlzcGxheTsKPiA+ID4g LQlwbGFuZS5jcnRjX2lkID0gY3J0Yy0+b2JqOwo+ID4gPiAtCXBsYW5lLmZiX2lkID0gaWd0X2Ny ZWF0ZV9wYXR0ZXJuX2ZiKHBsYW5lLnN0YXRlLT5kZXNjLQo+ID4gPiA+ZmQsCj4gPiA+IC0JCQkJ CcKgwqDCoMKgcGxhbmUuY3J0Y193LAo+ID4gPiBwbGFuZS5jcnRjX2gsCj4gPiA+IC0JCQkJCcKg wqDCoMKgZm9ybWF0LAo+ID4gPiBJOTE1X1RJTElOR19OT05FLCAmZmIpOwo+ID4gPiAtCj4gPiA+ IC0JZHJtTW9kZUF0b21pY1NldEN1cnNvcihyZXEsIDApOwo+ID4gPiAtCWNydGNfcG9wdWxhdGVf cmVxKGNydGMsIHJlcSk7Cj4gPiA+IC0JcGxhbmVfcG9wdWxhdGVfcmVxKCZwbGFuZSwgcmVxKTsK PiA+ID4gLQlyZXQgPSBkcm1Nb2RlQXRvbWljQ29tbWl0KGNydGMtPnN0YXRlLT5kZXNjLT5mZCwg cmVxLAo+ID4gPiAtCQkJCcKgwqBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZLAo+ID4gPiBOVUxM KTsKPiA+ID4gLQo+ID4gPiAtCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiA+ID4gLQo+ID4gPiAt CS8qIGdvIHRocm91Z2ggZHBtcyBvZmYvb24gY3ljbGUgKi8KPiA+ID4gLQlzZXRfZHBtcyhjcnRj LT5zdGF0ZS0+ZGVzYy0+ZmQsIERSTV9NT0RFX0RQTVNfT0ZGKTsKPiA+ID4gLQlzZXRfZHBtcyhj cnRjLT5zdGF0ZS0+ZGVzYy0+ZmQsIERSTV9NT0RFX0RQTVNfT04pOwo+ID4gPiAtCj4gPiA+IC0J LyogY2hlY2sgdGhlIHN0YXRlICovCj4gPiA+IC0JY3J0Y19jaGVja19jdXJyZW50X3N0YXRlKGNy dGMsIHBsYW5lX29sZCwKPiA+ID4gQVRPTUlDX1JFTEFYX05PTkUpOwo+ID4gPiAtCXBsYW5lX2No ZWNrX2N1cnJlbnRfc3RhdGUocGxhbmVfb2xkLCBBVE9NSUNfUkVMQVhfTk9ORSk7Cj4gPiA+IC0K PiA+ID4gLQkvKiBSZS1lbmFibGUgdGhlIHBsYW5lIHRocm91Z2ggdGhlIGxlZ2FjeSBDUlRDL3By aW1hcnktCj4gPiA+IHBsYW5lwqAKPiA+ID4gQVBJLCBhbmQKPiA+ID4gLQnCoCogdmVyaWZ5IHRo cm91Z2ggYXRvbWljLiAqLwo+ID4gPiAtCWNydGNfY29tbWl0X2xlZ2FjeShjcnRjLCBwbGFuZV9v bGQsIENSVENfUkVMQVhfTU9ERSk7Cj4gPiA+ICsJcGxhbmVfZ2V0X2N1cnJlbnRfc3RhdGUocHJp bWFyeSwgb2xkX3BsYW5lX3ZhbHVlcyk7Cj4gPiA+ICsJY3J0Y19nZXRfY3VycmVudF9zdGF0ZShw aXBlX29iaiwgb2xkX2NydGNfdmFsdWVzKTsKPiA+ID4gKwo+ID4gPiArCWlndF9hc3NlcnQoIW9s ZF9jcnRjX3ZhbHVlc1tJR1RfQ1JUQ19NT0RFX0lEXSk7Cj4gPiA+ICsKPiA+ID4gKwlpZ3RfY3Jl YXRlX3BhdHRlcm5fZmIocGlwZV9vYmotPmRpc3BsYXktPmRybV9mZCwKPiA+ID4gKwkJCcKgwqDC oMKgwqBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4gPiA+ICsJCQnCoMKgwqDCoMKg Zm9ybWF0LCBJOTE1X1RJTElOR19OT05FLCAmZmIpOwo+ID4gPiArCWlndF9wbGFuZV9zZXRfZmIo cHJpbWFyeSwgJmZiKTsKPiA+ID4gKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZV9v YmotPnBpcGUpOwo+ID4gPiArCj4gPiA+ICsJaWd0X2Rpc3BsYXlfY29tbWl0X2F0b21pYyhwaXBl X29iai0+ZGlzcGxheSwKPiA+ID4gRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSB8IERSTV9NT0RF X0FUT01JQ19BTExPV19NT0RFU0VULCBOVUxMKTsKPiA+ID4gKwo+ID4gPiArCS8qIGNoZWNrIHRo ZSBzdGF0ZSwgc2hvdWxkIHN0aWxsIGJlIG9sZCBzdGF0ZSAqLwo+ID4gPiArCWNydGNfY2hlY2tf Y3VycmVudF9zdGF0ZShwaXBlX29iaiwgb2xkX2NydGNfdmFsdWVzLAo+ID4gPiBvbGRfcGxhbmVf dmFsdWVzLCBBVE9NSUNfUkVMQVhfTk9ORSk7Cj4gPiA+ICsJcGxhbmVfY2hlY2tfY3VycmVudF9z dGF0ZShwcmltYXJ5LCBvbGRfcGxhbmVfdmFsdWVzLAo+ID4gPiBBVE9NSUNfUkVMQVhfTk9ORSk7 Cj4gPiA+ICsKPiA+ID4gKwkvKgo+ID4gPiArCcKgKiBFbmFibGUgdGhlIHBsYW5lIHRocm91Z2gg dGhlIGxlZ2FjeSBDUlRDL3ByaW1hcnktCj4gPiA+IHBsYW5lCj4gPiA+IEFQSSwgYW5kCj4gPiA+ ICsJwqAqIHZlcmlmeSB0aHJvdWdoIGF0b21pYy4KPiA+ID4gKwnCoCovCj4gPiA+ICsJY3J0Y19j b21taXQocGlwZV9vYmosIHByaW1hcnksIENPTU1JVF9MRUdBQ1ksCj4gPiA+IENSVENfUkVMQVhf TU9ERSk7Cj4gPiA+ICsKPiA+ID4gKwkvKiBTYW1lIGZvciBkaXNhYmxlLi4gKi8KPiA+ID4gKwlw bGFuZV9nZXRfY3VycmVudF9zdGF0ZShwcmltYXJ5LCBvbGRfcGxhbmVfdmFsdWVzKTsKPiA+ID4g KwljcnRjX2dldF9jdXJyZW50X3N0YXRlKHBpcGVfb2JqLCBvbGRfY3J0Y192YWx1ZXMpOwo+ID4g PiArCj4gPiA+ICsJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCBOVUxMKTsKPiA+ID4gKwlpZ3Rf b3V0cHV0X3NldF9waXBlKG91dHB1dCwgUElQRV9OT05FKTsKPiA+ID4gKwo+ID4gPiArCWlndF9k aXNwbGF5X2NvbW1pdF9hdG9taWMocGlwZV9vYmotPmRpc3BsYXksCj4gPiA+IERSTV9NT0RFX0FU T01JQ19URVNUX09OTFkgfCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgTlVMTCk7Cj4g PiA+IMKgCj4gPiA+IC0JZHJtTW9kZUF0b21pY0ZyZWUocmVxKTsKPiA+ID4gKwkvKiBmb3IgZXh0 cmEgc3RyZXNzLCBnbyB0aHJvdWdoIGRwbXMgb2ZmL29uIGN5Y2xlICovCj4gPiA+ICsJc2V0X2Rw bXMob3V0cHV0LCBEUk1fTU9ERV9EUE1TX09GRik7Cj4gPiA+ICsJc2V0X2RwbXMob3V0cHV0LCBE Uk1fTU9ERV9EUE1TX09OKTsKPiA+IFRoZXJlIGlzIHRoaXMgbGlicmFyeSBmdW5jdGlvbiAna21z dGVzdF9zZXRfY29ubmVjdG9yX2RwbXMoKScuCj4gPiBDb3VsZCB3ZQo+ID4gdXRpbGl6ZSB0aGlz IGZ1bmN0aW9uIGhlcmUgaW5zdGVhZD8KPiBTdXJlLCBJIG5ldmVyIHVuZGVyc3Rvb2Qgd2hhdCB0 aGUgZHBtcyBjYWxsIHdhcyBzdXBwb3NlZCB0byBleHBvc2UKPiB0aG91Z2guLgo+IAo+IFdhbnQg bWUgdG8gcmVzZW5kIG9yIGlzIHJlcGxhY2luZyB0aGUgY2FsbCB3aXRoCj4ga21zdGVzdF9zZXRf Y29ubmVjdG9yX2RwbXMocywgb3V0cHV0LT5jb25maWcuY29ubmVjdG9yLAo+IERSTV9NT0RFX0RQ TVNfT0ZGKTsgZW5vdWdoPwpXZWxsLCBteSBwb2ludCBvZiB2aWV3IGlzIHRoYXQgd2Ugc2hvdWxk IHVzZSBsaWJyYXJ5IGZ1bmN0aW9ucyBhcyBtdWNoCmFzIHBvc3NpYmxlLiBJIGd1ZXNzIHRoYXQn cyB0aGUgcmVhc29uIHdoeSB3ZSBoYXZlIHRoZSBsaWJyYXJpZXMgaW4gdGhlCmZpcnN0IHBsYWNl LiBTbyBhIHZvdGUgZm9yIGEgcmVwbGFjZW1lbnQuCgotLSAKTWlrYSBLYWhvbGEgLSBJbnRlbCBP VEMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=