From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpbgau2.qq.com (smtpbgau2.qq.com [54.206.34.216]) by sourceware.org (Postfix) with ESMTPS id A38133858D37 for ; Tue, 9 May 2023 14:34:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A38133858D37 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=rivai.ai Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=rivai.ai X-QQ-mid: bizesmtp78t1683642887tbwnmlkr Received: from TABLET-POE6JQHH ( [115.44.118.116]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 09 May 2023 22:34:46 +0800 (CST) X-QQ-SSF: 01400000000000F0Q000000A0000000 X-QQ-FEAT: 3M0okmaRx3jCYqjMfVjGRiymMVtQsQSh6PR0Ez0xle/kTcL1NVX0W2MGVVals 3lpmoq6Kb7JHNXkemMXVoHR50iUE+rN7TqdCDLWnAY2MacjOeU+JaWHgARSWguhvJlcVWQV lyFtSxSADtqn4CFLNQC+o4MqU9LK+qunc7lBut1F3+ME2E82XJwimVWB4jdqyM2SM+IkXfr taO8AIIO3ZZmM0yKm8eYi1qEtiIssaeQGjzTUn3MtcKQiO4OMAbNcfD3GX6j5u3z/tPy4FU r/zdPZJ59QH70avJqcIRO/vJL0+qnd6LozHYa25ACMXIpNhEkcQ8RCL7IfWuMfDpJpf0wHl Pk0lUGJy9EJMBvNQbKZYTKiZOZKrTJ58cmMwi/EGNwBsAtZvMrPPgTYbem+9HrECGmvbmD9 F/aLyoF0FvFHlKEylNl05g== X-QQ-GoodBg: 2 X-BIZMAIL-ID: 1001632266051231941 Date: Tue, 9 May 2023 22:34:48 +0800 From: =?UTF-8?B?6ZKf5bGF5ZOy?= To: richard.sandiford Cc: gcc-patches , rguenther Subject: Re: Re: [PATCH V4] VECT: Add decrement IV iteration loop control by variable amount support References: <20230504132540.286148-1-juzhe.zhong@rivai.ai>, <4EF09AECDA5B339B+2023050607411407276371@rivai.ai>, , <796FD4F43279CBA1+20230509212722712059135@rivai.ai> X-Priority: 3 X-GUID: F4CD6E5D-2948-46CF-A12A-99CAA4F48A1E X-Has-Attach: no X-Mailer: Foxmail 7.2.23.121[cn] Mime-Version: 1.0 Message-ID: <36BE1D51524D4AEF+2023050922344795952123@rivai.ai> Content-Type: multipart/alternative; boundary="----=_001_NextPart655588805722_=----" X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:rivai.ai:qybglogicsvrgz:qybglogicsvrgz7a-one-0 X-Spam-Status: No, score=-9.4 required=5.0 tests=BAYES_00,BODY_8BITS,GIT_PATCH_0,HTML_MESSAGE,KAM_DMARC_STATUS,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SCC_10_SHORT_WORD_LINES,SCC_5_SHORT_WORD_LINES,SPF_HELO_PASS,SPF_PASS,TXREP,T_KAM_HTML_FONT_INVALID,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. ------=_001_NextPart655588805722_=---- Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 TW9yZSBkZXRhaWxzIGZvciBDYXNlIDI6DQorCV83MiA9IE1JTl9FWFBSIDxp dnRtcF83MCwgMTY+OworCV83NSA9IE1JTl9FWFBSIDxpdnRtcF83MywgMTY+ OworCS4uLgorCS5MRU5fU1RPUkUgKHZlY3RwX2YuOF81MSwgMTI4QiwgXzc1 LCB7IDEsIDIsIDEsIDIsIDEsIDIsIDEsIDIgfSwgMCk7CisJdmVjdHBfZi44 XzU2ID0gdmVjdHBfZi44XzUxICsgMTY7CisJLkxFTl9TVE9SRSAodmVjdHBf Zi44XzU2LCAxMjhCLCBfNzIsIHsgMSwgMiwgMSwgMiwgMSwgMiwgMSwgMiB9 LCAwKTsKKwkuLi4KKwlfNjEgPSBfNzUgLyAyOworCS5MRU5fU1RPUkUgKHZl Y3RwX2QuMTBfNTksIDEyOEIsIF82MSwgeyAzLCAzLCAzLCAzIH0sIDApOwor CXZlY3RwX2QuMTBfNjMgPSB2ZWN0cF9kLjEwXzU5ICsgMTY7CisJXzY0ID0g XzcyIC8gMjsKKwkuTEVOX1NUT1JFICh2ZWN0cF9kLjEwXzYzLCAxMjhCLCBf NjQsIHsgMywgMywgMywgMyB9LCAwKTsNCllvdSBtYXkgYmUgY29uZnVzZWQg dGhhdCBfNjEgPSBfNzUgLyAyOyBhbmQgXzY0ID0gXzcyIC8gMjsNCldlbGws IHRoaXMgaXMgc2ltaWxpYXIgVklFV19DT05WRVJUX0VYUFIgb2YgbWFzayBp biBBUk0gU1ZFLg0KDQpMaWtlIEFSTSBTVkU6DQp0cmVlDQp2ZWN0X2dldF9s b29wX21hc2sgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2ksIHZlY19sb29w X21hc2tzICptYXNrcywNCiAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IG52ZWN0b3JzLCB0cmVlIHZlY3R5cGUsIHVuc2lnbmVkIGludCBpbmRl eCkNCnsNCiAgcmdyb3VwX2NvbnRyb2xzICpyZ20gPSAmKCptYXNrcylbbnZl Y3RvcnMgLSAxXTsNCiAgdHJlZSBtYXNrX3R5cGUgPSByZ20tPnR5cGU7DQoN CiAgLyogUG9wdWxhdGUgdGhlIHJncm91cCdzIG1hc2sgYXJyYXksIGlmIHRo aXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUNCiAgICAgdXNlZCBpdC4gICov DQogIGlmIChyZ20tPmNvbnRyb2xzLmlzX2VtcHR5ICgpKQ0KICAgIHsNCiAg ICAgIHJnbS0+Y29udHJvbHMuc2FmZV9ncm93X2NsZWFyZWQgKG52ZWN0b3Jz LCB0cnVlKTsNCiAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg bnZlY3RvcnM7ICsraSkNCiAgICAgICAgew0KICAgICAgICAgIHRyZWUgbWFz ayA9IG1ha2VfdGVtcF9zc2FfbmFtZSAobWFza190eXBlLCBOVUxMLCAibG9v cF9tYXNrIik7DQogICAgICAgICAgLyogUHJvdmlkZSBhIGR1bW15IGRlZmlu aXRpb24gdW50aWwgdGhlIHJlYWwgb25lIGlzIGF2YWlsYWJsZS4gICovDQog ICAgICAgICAgU1NBX05BTUVfREVGX1NUTVQgKG1hc2spID0gZ2ltcGxlX2J1 aWxkX25vcCAoKTsNCiAgICAgICAgICByZ20tPmNvbnRyb2xzW2ldID0gbWFz azsNCiAgICAgICAgfQ0KICAgIH0NCg0KICB0cmVlIG1hc2sgPSByZ20tPmNv bnRyb2xzW2luZGV4XTsNCiAgaWYgKG1heWJlX25lIChUWVBFX1ZFQ1RPUl9T VUJQQVJUUyAobWFza190eXBlKSwNCiAgICAgICAgICAgICAgICBUWVBFX1ZF Q1RPUl9TVUJQQVJUUyAodmVjdHlwZSkpKQ0KICAgIHsNCiAgICAgIC8qIEEg bG9vcCBtYXNrIGZvciBkYXRhIHR5cGUgWCBjYW4gYmUgcmV1c2VkIGZvciBk YXRhIHR5cGUgWQ0KICAgICAgICAgaWYgWCBoYXMgTiB0aW1lcyBtb3JlIGVs ZW1lbnRzIHRoYW4gWSBhbmQgaWYgWSdzIGVsZW1lbnRzDQogICAgICAgICBh cmUgTiB0aW1lcyBiaWdnZXIgdGhhbiBYJ3MuICBJbiB0aGlzIGNhc2UgZWFj aCBzZXF1ZW5jZQ0KICAgICAgICAgb2YgTiBlbGVtZW50cyBpbiB0aGUgbG9v cCBtYXNrIHdpbGwgYmUgYWxsLXplcm8gb3IgYWxsLW9uZS4NCiAgICAgICAg IFdlIGNhbiB0aGVuIHZpZXctY29udmVydCB0aGUgbWFzayBzbyB0aGF0IGVh Y2ggc2VxdWVuY2Ugb2YNCiAgICAgICAgIE4gZWxlbWVudHMgaXMgcmVwbGFj ZWQgYnkgYSBzaW5nbGUgZWxlbWVudC4gICovDQogICAgICBnY2NfYXNzZXJ0 IChtdWx0aXBsZV9wIChUWVBFX1ZFQ1RPUl9TVUJQQVJUUyAobWFza190eXBl KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRZUEVfVkVDVE9S X1NVQlBBUlRTICh2ZWN0eXBlKSkpOw0KICAgICAgZ2ltcGxlX3NlcSBzZXEg PSBOVUxMOw0KICAgICAgbWFza190eXBlID0gdHJ1dGhfdHlwZV9mb3IgKHZl Y3R5cGUpOw0KICAgICAgbWFzayA9IGdpbXBsZV9idWlsZCAoJnNlcSwgVklF V19DT05WRVJUX0VYUFIsIG1hc2tfdHlwZSwgbWFzayk7DQogICAgICBpZiAo c2VxKQ0KICAgICAgICBnc2lfaW5zZXJ0X3NlcV9iZWZvcmUgKGdzaSwgc2Vx LCBHU0lfU0FNRV9TVE1UKTsNCiAgICB9DQogIHJldHVybiBtYXNrOw0KfQ0K DQoNCkkgYW0gZG9pbmcgc2ltaWxpYXIgdGhpbmcgZm9yIFJWVjoNCit2ZWN0 X2dldF9sb29wX2xlbiAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCBnaW1w bGVfc3RtdF9pdGVyYXRvciAqZ3NpLAorCQkgICB2ZWNfbG9vcF9sZW5zICps ZW5zLCB1bnNpZ25lZCBpbnQgbnZlY3RvcnMsIHRyZWUgdmVjdHlwZSwKKwkJ ICAgdW5zaWduZWQgaW50IGluZGV4KQogewogICByZ3JvdXBfY29udHJvbHMg KnJnbCA9ICYoKmxlbnMpW252ZWN0b3JzIC0gMV07CiAgIGJvb2wgdXNlX2Jp YXNfYWRqdXN0ZWRfbGVuID0KICAgICBMT09QX1ZJTkZPX1BBUlRJQUxfTE9B RF9TVE9SRV9CSUFTIChsb29wX3ZpbmZvKSAhPSAwOworICB0cmVlIGl2X3R5 cGUgPSBMT09QX1ZJTkZPX1JHUk9VUF9JVl9UWVBFIChsb29wX3ZpbmZvKTsK IAogICAvKiBQb3B1bGF0ZSB0aGUgcmdyb3VwJ3MgbGVuIGFycmF5LCBpZiB0 aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlCiAgICAgIHVzZWQgaXQuICAq LwpAQCAtMTA0MDAsNiArMTA0MDMsMjcgQEAgdmVjdF9nZXRfbG9vcF9sZW4g KGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgdmVjX2xvb3BfbGVucyAqbGVu cywKIAogICBpZiAodXNlX2JpYXNfYWRqdXN0ZWRfbGVuKQogICAgIHJldHVy biByZ2wtPmJpYXNfYWRqdXN0ZWRfY3RybDsKKyAgZWxzZSBpZiAoZGlyZWN0 X2ludGVybmFsX2ZuX3N1cHBvcnRlZF9wIChJRk5fU0VMRUNUX1ZMLCBpdl90 eXBlLAorCQkJCQkgICBPUFRJTUlaRV9GT1JfU1BFRUQpKQorICAgIHsKKyAg ICAgIHRyZWUgbG9vcF9sZW4gPSByZ2wtPmNvbnRyb2xzW2luZGV4XTsKKyAg ICAgIHBvbHlfaW50NjQgbnVuaXRzMSA9IFRZUEVfVkVDVE9SX1NVQlBBUlRT IChyZ2wtPnR5cGUpOworICAgICAgcG9seV9pbnQ2NCBudW5pdHMyID0gVFlQ RV9WRUNUT1JfU1VCUEFSVFMgKHZlY3R5cGUpOworICAgICAgaWYgKG1heWJl X25lIChudW5pdHMxLCBudW5pdHMyKSkKKwl7CisJICAvKiBBIGxvb3AgbGVu IGZvciBkYXRhIHR5cGUgWCBjYW4gYmUgcmV1c2VkIGZvciBkYXRhIHR5cGUg WQorCSAgICAgaWYgWCBoYXMgTiB0aW1lcyBtb3JlIGVsZW1lbnRzIHRoYW4g WSBhbmQgaWYgWSdzIGVsZW1lbnRzCisJICAgICBhcmUgTiB0aW1lcyBiaWdn ZXIgdGhhbiBYJ3MuICAqLworCSAgZ2NjX2Fzc2VydCAobXVsdGlwbGVfcCAo bnVuaXRzMSwgbnVuaXRzMikpOworCSAgdW5zaWduZWQgaW50IGZhY3RvciA9 IGV4YWN0X2RpdiAobnVuaXRzMSwgbnVuaXRzMikudG9fY29uc3RhbnQgKCk7 CisJICBnaW1wbGVfc2VxIHNlcSA9IE5VTEw7CisJICBsb29wX2xlbiA9IGdp bXBsZV9idWlsZCAoJnNlcSwgUkRJVl9FWFBSLCBpdl90eXBlLCBsb29wX2xl biwKKwkJCQkgICBidWlsZF9pbnRfY3N0IChpdl90eXBlLCBmYWN0b3IpKTsK KwkgIGlmIChzZXEpCisJICAgIGdzaV9pbnNlcnRfc2VxX2JlZm9yZSAoZ3Np LCBzZXEsIEdTSV9TQU1FX1NUTVQpOworCX0KKyAgICAgIHJldHVybiBsb29w X2xlbjsKKyAgICB9CiAgIGVsc2UKICAgICByZXR1cm4gcmdsLT5jb250cm9s c1tpbmRleF07CiB9VGhhbnNrLg0KDQoNCmp1emhlLnpob25nQHJpdmFpLmFp DQogDQpGcm9tOiBqdXpoZS56aG9uZ0ByaXZhaS5haQ0KRGF0ZTogMjAyMy0w NS0wOSAyMToyNw0KVG86IHJpY2hhcmQuc2FuZGlmb3JkDQpDQzogZ2NjLXBh dGNoZXM7IHJndWVudGhlcg0KU3ViamVjdDogUmU6IFJlOiBbUEFUQ0ggVjRd IFZFQ1Q6IEFkZCBkZWNyZW1lbnQgSVYgaXRlcmF0aW9uIGxvb3AgY29udHJv bCBieSB2YXJpYWJsZSBhbW91bnQgc3VwcG9ydA0KVGhhbmtzLCBSaWNoYXJk Lg0KDQo+PiBDb3VsZCB5b3UgZ28gaW50byBtb3JlIGRldGFpbHMgYWJvdXQg dGhpcz8gIEkgaW1hZ2luZWQgdGhhdCBmb3IgY2FzZSAzLA0KPj4gdGhlcmUg d291bGQgYmUgYSBzaW5nbGUgU0VMRUNUX1ZMIHRoYXQgZGVjaWRlcyBob3cg bWFueSBzY2FsYXIgaXRlcmF0aW9ucw0KPj4gd2lsbCBiZSBoYW5kbGVkIGJ5 IHRoZSBjdXJyZW50IHZlY3RvciBpdGVyYXRpb24sIHRoZW4gd2Ugd291bGQg ImV4cGFuZCINCj4+IHRoZSByZXN1bHQgKHVzaW5nIE1JTl9FWFBScykgdG8g dGhlIG11bHRpLWNvbnRyb2wgY2FzZXMuDQoNCkZvciBjYXNlIDIgLCBoZXJl IGlzIHRoZSBleGFtcGxlOg0KKyAgIDIuIE11bHRpcGxlIHJncm91cCwgdGhl IEdpbXBsZSBJUiBzaG91bGQgYmU6CisKKwkjIGlfMjMgPSBQSEkgPGlfMjAo NiksIDAoMTEpPgorCSMgdmVjdHBfZi44XzUxID0gUEhJIDx2ZWN0cF9mLjhf NTIoNiksIGZfMTUoRCkoMTEpPgorCSMgdmVjdHBfZC4xMF81OSA9IFBISSA8 dmVjdHBfZC4xMF82MCg2KSwgZF8xOChEKSgxMSk+CisJIyBpdnRtcF83MCA9 IFBISSA8aXZ0bXBfNzEoNiksIF82OSgxMSk+CisJIyBpdnRtcF83MyA9IFBI SSA8aXZ0bXBfNzQoNiksIF82NygxMSk+CisJXzcyID0gTUlOX0VYUFIgPGl2 dG1wXzcwLCAxNj47CisJXzc1ID0gTUlOX0VYUFIgPGl2dG1wXzczLCAxNj47 CisJXzEgPSBpXzIzICogMjsKKwlfMiA9IChsb25nIHVuc2lnbmVkIGludCkg XzE7CisJXzMgPSBfMiAqIDI7CisJXzQgPSBmXzE1KEQpICsgXzM7CisJXzUg PSBfMiArIDE7CisJXzYgPSBfNSAqIDI7CisJXzcgPSBmXzE1KEQpICsgXzY7 CisJLkxFTl9TVE9SRSAodmVjdHBfZi44XzUxLCAxMjhCLCBfNzUsIHsgMSwg MiwgMSwgMiwgMSwgMiwgMSwgMiB9LCAwKTsKKwl2ZWN0cF9mLjhfNTYgPSB2 ZWN0cF9mLjhfNTEgKyAxNjsKKwkuTEVOX1NUT1JFICh2ZWN0cF9mLjhfNTYs IDEyOEIsIF83MiwgeyAxLCAyLCAxLCAyLCAxLCAyLCAxLCAyIH0sIDApOwor CV84ID0gKGxvbmcgdW5zaWduZWQgaW50KSBpXzIzOworCV85ID0gXzggKiA0 OworCV8xMCA9IGRfMTgoRCkgKyBfOTsKKwlfNjEgPSBfNzUgLyAyOworCS5M RU5fU1RPUkUgKHZlY3RwX2QuMTBfNTksIDEyOEIsIF82MSwgeyAzLCAzLCAz LCAzIH0sIDApOworCXZlY3RwX2QuMTBfNjMgPSB2ZWN0cF9kLjEwXzU5ICsg MTY7CisJXzY0ID0gXzcyIC8gMjsKKwkuTEVOX1NUT1JFICh2ZWN0cF9kLjEw XzYzLCAxMjhCLCBfNjQsIHsgMywgMywgMywgMyB9LCAwKTsKKwlpXzIwID0g aV8yMyArIDE7CisJdmVjdHBfZi44XzUyID0gdmVjdHBfZi44XzU2ICsgMTY7 CisJdmVjdHBfZC4xMF82MCA9IHZlY3RwX2QuMTBfNjMgKyAxNjsKKwlpdnRt cF83NCA9IGl2dG1wXzczIC0gXzc1OworCWl2dG1wXzcxID0gaXZ0bXBfNzAg LSBfNzI7CisJaWYgKGl2dG1wXzc0ICE9IDApCisJICBnb3RvIDxiYiA2Pjsg WzgzLjMzJV0KKwllbHNlCisJICBnb3RvIDxiYiAxMz47IFsxNi42NyVdCisK KyAgIE5vdGU6IFdlIERPIE5PVCB1c2UgLlNFTEVDVF9WTCBpbiBTTFAgYXV0 by12ZWN0b3JpemF0aW9uIGZvciBtdWx0aXBsZQorICAgcmdyb3Vwcy4gSW5z dGVhZCwgd2UgdXNlIE1JTl9FWFBSIHRvIGd1YXJhbnRlZSB3ZSBhbHdheXMg dXNlIFZGIGFzIHRoZQorICAgaXRlcmF0aW9uIGFtb3VudCBmb3IgbXV0aXBs ZSByZ3JvdXBzLisgICBUaGUgYW5hbHlzaXMgb2YgdGhlIGZsb3cgb2YgbXVs dGlwbGUgcmdyb3VwczoKKwlfNzIgPSBNSU5fRVhQUiA8aXZ0bXBfNzAsIDE2 PjsKKwlfNzUgPSBNSU5fRVhQUiA8aXZ0bXBfNzMsIDE2PjsKKwkuLi4KKwku TEVOX1NUT1JFICh2ZWN0cF9mLjhfNTEsIDEyOEIsIF83NSwgeyAxLCAyLCAx LCAyLCAxLCAyLCAxLCAyIH0sIDApOworCXZlY3RwX2YuOF81NiA9IHZlY3Rw X2YuOF81MSArIDE2OworCS5MRU5fU1RPUkUgKHZlY3RwX2YuOF81NiwgMTI4 QiwgXzcyLCB7IDEsIDIsIDEsIDIsIDEsIDIsIDEsIDIgfSwgMCk7CisJLi4u CisJXzYxID0gXzc1IC8gMjsKKwkuTEVOX1NUT1JFICh2ZWN0cF9kLjEwXzU5 LCAxMjhCLCBfNjEsIHsgMywgMywgMywgMyB9LCAwKTsKKwl2ZWN0cF9kLjEw XzYzID0gdmVjdHBfZC4xMF81OSArIDE2OworCV82NCA9IF83MiAvIDI7CisJ LkxFTl9TVE9SRSAodmVjdHBfZC4xMF82MywgMTI4QiwgXzY0LCB7IDMsIDMs IDMsIDMgfSwgMCk7SGVyZSwgSWYgdXNlIFNFTEVDVF9WTCBpbnN0ZWFkIG9m IE1JTl9FWFBSLiBTaW5jZSB3ZSBkZWZpbmUgdGhlIG91dGNvbWUgb2YgU0VM RUNUX1ZMIGNhbiBiZSBhbnkgbnVtYmVyIGluIG5vbi1maW5hbCBpdGVyYXRp b24uSXQgc2VlbXMgbm90IGVhc3kgdG8gYWRqdXN0IGFkZHJlc3MgcG9pbnRl ciBJViAodmVjdHBfZi44XzU2ID0gdmVjdHBfZi44XzUxICsgMTY7KSBhbmQg dGhlIG5leHQgbGVuZ3RoIChfNjEgPSBfNzUgLyAyOykuDQpGb3IgY2FzZSAz OiArICAzLiBNdWx0aXBsZSByZ3JvdXBzIGZvciBub24tU0xQIGF1dG8tdmVj dG9yaXphdGlvbi4rCisgICAgICMgaXZ0bXBfMjYgPSBQSEkgPGl2dG1wXzI3 KDQpLCBfMjUoMyk+CisgICAgICMgaXZ0bXAuMzVfMTAgPSBQSEkgPGl2dG1w LjM1XzExKDQpLCBpdnRtcC4zNV8xKDMpPgorICAgICAjIGl2dG1wLjM2XzIg PSBQSEkgPGl2dG1wLjM2XzgoNCksIGl2dG1wLjM2XzIzKDMpPgorICAgICBf MjggPSBNSU5fRVhQUiA8aXZ0bXBfMjYsIFBPTFlfSU5UX0NTVCBbOCwgOF0+ OworICAgICBsb29wX2xlbl8xNSA9IE1JTl9FWFBSIDxfMjgsIFBPTFlfSU5U X0NTVCBbNCwgNF0+OworICAgICBsb29wX2xlbl8xNiA9IF8yOCAtIGxvb3Bf bGVuXzE1OworICAgICBfMjkgPSAodm9pZCAqKSBpdnRtcC4zNV8xMDsKKyAg ICAgXzcgPSAmTUVNIDx2ZWN0b3IoWzQsNF0pIGludD4gWyhpbnQgKilfMjld OworICAgICB2ZWN0X18xLjI1XzE3ID0gLkxFTl9MT0FEIChfNywgMTI4Qiwg bG9vcF9sZW5fMTUsIDApOworICAgICBfMzMgPSBfMjkgKyBQT0xZX0lOVF9D U1QgWzE2LCAxNl07CisgICAgIF8zNCA9ICZNRU0gPHZlY3RvcihbNCw0XSkg aW50PiBbKGludCAqKV8zM107CisgICAgIHZlY3RfXzEuMjZfMTkgPSAuTEVO X0xPQUQgKF8zNCwgMTI4QiwgbG9vcF9sZW5fMTYsIDApOworICAgICB2ZWN0 X18yLjI3XzIwID0gVkVDX1BBQ0tfVFJVTkNfRVhQUiA8dmVjdF9fMS4yNV8x NywgdmVjdF9fMS4yNl8xOT47CisgICAgIF8zMCA9ICh2b2lkICopIGl2dG1w LjM2XzI7CisgICAgIF8zMSA9ICZNRU0gPHZlY3RvcihbOCw4XSkgc2hvcnQg aW50PiBbKHNob3J0IGludCAqKV8zMF07CisgICAgIC5MRU5fU1RPUkUgKF8z MSwgMTI4QiwgXzI4LCB2ZWN0X18yLjI3XzIwLCAwKTsKKyAgICAgaXZ0bXBf MjcgPSBpdnRtcF8yNiAtIF8yODsKKyAgICAgaXZ0bXAuMzVfMTEgPSBpdnRt cC4zNV8xMCArIFBPTFlfSU5UX0NTVCBbMzIsIDMyXTsKKyAgICAgaXZ0bXAu MzZfOCA9IGl2dG1wLjM2XzIgKyBQT0xZX0lOVF9DU1QgWzE2LCAxNl07Cisg ICAgIGlmIChpdnRtcF8yNyAhPSAwKQorICAgICAgIGdvdG8gPGJiIDQ+OyBb ODMuMzMlXQorICAgICBlbHNlCisgICAgICAgZ290byA8YmIgNT47IFsxNi42 NyVdCisKKyAgICAgVGhlIHRvdGFsIGxlbmd0aDogXzI4ID0gTUlOX0VYUFIg PGl2dG1wXzI2LCBQT0xZX0lOVF9DU1QgWzgsIDhdPjsKKworICAgICBUaGUg bGVuZ3RoIG9mIGZpcnN0IGhhbGYgdmVjdG9yOgorICAgICAgIGxvb3BfbGVu XzE1ID0gTUlOX0VYUFIgPF8yOCwgUE9MWV9JTlRfQ1NUIFs0LCA0XT47CisK KyAgICAgVGhlIGxlbmd0aCBvZiBzZWNvbmQgaGFsZiB2ZWN0b3I6CisgICAg ICAgbG9vcF9sZW5fMTUgPSBNSU5fRVhQUiA8XzI4LCBQT0xZX0lOVF9DU1Qg WzQsIDRdPjsKKyAgICAgICBsb29wX2xlbl8xNiA9IF8yOCAtIGxvb3BfbGVu XzE1OworCisgICAgIDEpLiBfMjggYWx3YXlzIDw9IFBPTFlfSU5UX0NTVCBb OCwgOF0uCisgICAgIDIpLiBXaGVuIF8yOCA8PSBQT0xZX0lOVF9DU1QgWzQs IDRdLCBzZWNvbmQgaGFsZiB2ZWN0b3IgaXMgbm90IHByb2Nlc3NlZC4KKyAg ICAgMykuIFdoZW4gXzI4ID4gUE9MWV9JTlRfQ1NUIFs0LCA0XSwgc2Vjb25k IGhhbGYgdmVjdG9yIGlzIHByb2Nlc3NlZC5XZSBrbm93biBpbiBDYXNlIDMs IHdlIHNob3VsZCBkZWFsIHdpdGggMiB2ZWN0b3JzOiB2ZWN0X18yLjI3XzIw ID0gVkVDX1BBQ0tfVFJVTkNfRVhQUiA8dmVjdF9fMS4yNV8xNywgdmVjdF9f MS4yNl8xOT47Rmlyc3Qgd2UgdXNlICBfMjggPSBNSU5fRVhQUiA8aXZ0bXBf MjYsIFBPTFlfSU5UX0NTVCBbOCwgOF0+OyB0byBnZW5lcmF0ZSB0aGUgbnVt YmVyIG9mIGVsZW1lbnRzIHRvIGJlIHByb2Nlc3NlZGZvciB0aGVzZSAyIHZl Y3Rvci5TZWNvbmQsIHdlIHVzZSAibG9vcF9sZW5fMTUgPSBNSU5fRVhQUiA8 XzI4LCBQT0xZX0lOVF9DU1QgWzQsIDRdPjsiICAibG9vcF9sZW5fMTUiIGlz IHRoZSAgbnVtYmVyIGVsZW1lbnRzIHRvIGJlIHByb2Nlc3NlZCBmb3IgZmly c3QgdmVjdG9yLlRoZW4sICJsb29wX2xlbl8xNiA9IF8yOCAtIGxvb3BfbGVu XzE1OyAibG9vcF9sZW5fMTYiIGlzIHRoZSAgbnVtYmVyIGVsZW1lbnRzIHRv IGJlIHByb2Nlc3NlZCBmb3IgZmlyc3QgdmVjdG9yLkkgdGhpbmsgImxvb3Bf bGVuXzE1ID0gTUlOX0VYUFIgPF8yOCwgUE9MWV9JTlRfQ1NUIFs0LCA0XT47 IiBpcyB2ZXJ5IHNpbWlsaWFyIHRoZSB1bnBhY2tsbyBpbiBBUk0gU1ZFLiJs b29wX2xlbl8xNiA9IF8yOCAtIGxvb3BfbGVuXzE1OyAibG9vcF9sZW5fMTYi IGlzIHZlcnkgc2ltaWxpYXIgdGhlIHVucGFja2hpIGluIEFSTSBTVkUuDQo+ PiBJdCdzIHVwIHRvIHlvdS4gIElmIHlvdSBkb24ndCB0aGluayBzZWxlY3Rf dmwgaXMgd29ydGggaXQgdGhlbiBpdCB3b3VsZA0KPj5vYnZpb3VzbHkgbWFr ZSB0aGUgdmVjdG9yaXNlciBjaGFuZ2VzIGEgYml0IHNpbXBsZXIuDQo+PkJ1 dCBtYWtpbmcgdGhlIHZlY3RvcmlzZXIgc2ltcGxlciBpc24ndCBJTU8gdGhl IGdvYWwgaGVyZS4gIFNFTEVDVF9WTA0KPj5zZWVtcyBsaWtlIGEgcGVyZmVj dGx5IHJlYXNvbmFibGUgY29uc3RydWN0IHRvIGFkZCB0byB0YXJnZXQtaW5k ZXBlbmRlbnQNCj4+Y29kZS4gIFdlIGp1c3QgbmVlZCB0byB3b3JrIG91dCBz b21lIG9mIHRoZSBkZXRhaWxzLg0KDQpPaywgSSBhbHNvIHByZWZlciBrZWVw aW5nIHNlbGVjdF92bC4NCg0KPj5GV0lXLCBJIHNoYXJlIEtld2VuJ3MgY29u Y2VybiBhYm91dCBkdXBsaWNhdGluZyB0b28gbXVjaCBsb2dpYyBiZXR3ZWVu DQo+Pm1hc2tzLCBjdXJyZW50IGxlbmd0aHMsIGFuZCBTRUxFQ1RfVkwgbGVu Z3Rocy4gIEJ1dCBJIGhhdmVuJ3QgbG9va2VkIGF0DQo+PnRoZSBwYXRjaCB5 ZXQgYW5kIHNvIEkgZG9uJ3Qga25vdyBob3cgZWFzeSBpdCB3b3VsZCBiZSB0 byBhdm9pZCB0aGF0Lg0KDQpJIHVuZGVyc3RhbmQgdGhlIGNvbmNlcm4sIHRo ZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFyZSBpbiB0aGUgaXNvbGF0ZWQg ZnVuY3Rpb24gInZlY3Rfc2V0X2xvb3BfY29udHJvbHNfYnlfc2VsZWN0X3Zs IiwNCml0J3MgZWFzaWVyIHRvIHJldmlldyB0aGUgaW1wbGVtZW50YXRpb24u DQpNYXliZSB3ZSBjYW4gZmlyc3QgbWFrZSB0aGUgd2hvbGUgaW1wbGVtZW50 YXRpb24gY29kZXMgaW4gInZlY3Rfc2V0X2xvb3BfY29udHJvbHNfYnlfc2Vs ZWN0X3ZsIiB0byBiZSBzdGFibGUgYWZ0ZXIgcmV2aWV3LA0KdGhlbiB3ZSBj YW4gdHJ5IHRvIGluY29ycG9yYXRlIHRoZXNlIGNvZGVzIG9mICJ2ZWN0X3Nl dF9sb29wX2NvbnRyb2xzX2J5X3NlbGVjdF92bCIgaW50byAidmVjdF9zZXRf bG9vcF9jb250cm9sc19kaXJlY3RseSIuDQoNCg0KVGhhbmtzLg0KDQoNCmp1 emhlLnpob25nQHJpdmFpLmFpDQogDQpGcm9tOiBSaWNoYXJkIFNhbmRpZm9y ZA0KRGF0ZTogMjAyMy0wNS0wOSAyMDo1OQ0KVG86IOmSn+WxheWTsg0KQ0M6 IGdjYy1wYXRjaGVzOyByZ3VlbnRoZXINClN1YmplY3Q6IFJlOiBbUEFUQ0gg VjRdIFZFQ1Q6IEFkZCBkZWNyZW1lbnQgSVYgaXRlcmF0aW9uIGxvb3AgY29u dHJvbCBieSB2YXJpYWJsZSBhbW91bnQgc3VwcG9ydA0K6ZKf5bGF5ZOyIDxq dXpoZS56aG9uZ0ByaXZhaS5haT4gd3JpdGVzOg0KPiBIaSwgUmljaGFyZHMu IEkgd291bGQgbGlrZSB0byBnaXZlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQg dGhpcyBwYXRjaCBzbyB0aGF0IGl0IHdpbGwgbWFrZSB0aGlzIHBhdGNoIGVh c2llciBmb3IgeW91IHRvIHJldmlldy4NCj4NCj4gQ3VycmVudGx5LCBJIHNh dyB3ZSBoYXZlIDMgc2l0dWF0aW9ucyB0aGF0IHdlIG5lZWQgdG8gaGFuZGxl IGluIGNhc2Ugb2YgbG9vcCBjb250cm9sIElWIGluIGF1dG8tdmVjdG9yaXph dGlvbjoNCj4gMS4gU2luZ2xlIHJncm91cCBsb29wIGNvbnRyb2wgKG5jb3Bp ZXMgPT0gMSAmJiB2ZWNfbnVtID09IDEgc28gbG9vcF9sZW4ubGVuZ3RoICgp ID09IDEgb3IgcmdjLT5sZW5naCAoKSA9PSAxKQ0KPiAyLiBNdWx0aXBsZSBy Z3JvdXAgZm9yIFNMUC4NCj4gMy4gTXVsdGlwbGUgcmdyb3VwIGZvciBub24t U0xQIHdoaWNoIGlzIFJpY2hhcmQgU2FuZGlmb3JkIHBvaW50IG91dCBwcmV2 aW91c2x5IChGb3IgZXhhbXBsZSwgVkVDX1BBQ0tfVFJVTkMpLg0KPg0KPiBU byB0YWxrIGFib3V0IHRoaXMgcGF0Y2gsIGxldCBtZSB0YWxrIGFib3V0IFJW ViBMTFZNIGltcGxlbWVudGF0aW9uIGZpcnN0IHdoaWNoIGluc3BpcmUgbWUg dG8gc2VuZCB0aGlzIHBhdGNoOg0KPiBodHRwczovL3Jldmlld3MubGx2bS5v cmcvRDk5NzUwIA0KPg0KPiBBY2NvcmRpbmcgdG8gTExWTSBpbXBsZW1lbnRh dGlvbiwgdGhleSBhcmUgYWRkaW5nIGEgbWlkZGxlLWVuZCBJUiBjYWxsZWQg ImdldF92ZWN0b3JfbGVuZ3RoIiB3aGljaCBoYXMgdG90YWxseQ0KPiBzYW1l IGZ1bmN0aW9uYWxpdHkgYXMgInNlbGVjdF92bCIgaW4gdGhpcyBwYXRjaCAo SSBjYWxsIGl0ICJ3aGlsZV9sZW4iIHByZXZpb3VzbHksIG5vdyBJIHJlbmFt ZSBpdCBhcyAic2VsZWN0X3ZsIiBmb2xsb3dpbmcgUmljaGFyZCBzdWdnZXN0 aW9uKS4NCj4NCj4gVGhlIExMVk0gaW1wbGVtZW50YXRpb24gaXMgb25seSBs ZXQgImdldF92ZWN0b3JfbGVuZ3RoIiBjYWxjdWxhdGUgdGhlIG51bWJlciBv ZiBlbGVtZW50cyBpbiBzaW5nbGUgcmdyb3VwIGxvb3AuDQo+IEZvciBtdWx0 aSByZ3JvdXAsIGxldCdzIHRha2UgYSBsb29rIGF0IGl0Og0KPiBodHRwczov L2dvZGJvbHQub3JnL3ovM0dQNzhlZlRZIA0KPg0KPiB2b2lkDQo+IGZvbzEg KHNob3J0ICpfX3Jlc3RyaWN0IGYsIGludCAqX19yZXN0cmljdCBkLCBpbnQg bikNCj4gew0KPiAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQ0KPiAg ICAgew0KPiAgICAgICBmW2kgKiAyICsgMF0gPSAxOw0KPiAgICAgICBmW2kg KiAyICsgMV0gPSAyOw0KPiAgICAgICBkW2ldID0gMzsNCj4gICAgIH0NCj4g fSANCj4NCj4gUklTQy1WIENsYW5nOg0KPiBmb28xOiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIyBAZm9vMQ0KPiAjICViYi4wOg0KPiAg ICAgICAgIGJsZXogICAgYTIsIC5MQkIwXzgNCj4gIyAlYmIuMToNCj4gICAg ICAgICBsaSAgICAgIGEzLCAxNg0KPiAgICAgICAgIGJnZXUgICAgYTIsIGEz LCAuTEJCMF8zDQo+ICMgJWJiLjI6DQo+ICAgICAgICAgbGkgICAgICBhNiwg MA0KPiAgICAgICAgIGogICAgICAgLkxCQjBfNg0KPiAuTEJCMF8zOg0KPiAg ICAgICAgIGFuZGkgICAgYTYsIGEyLCAtMTYNCj4gICAgICAgICBsdWkgICAg IGEzLCAzMg0KPiAgICAgICAgIGFkZGl3ICAgYTMsIGEzLCAxDQo+ICAgICAg ICAgdnNldGl2bGkgICAgICAgIHplcm8sIDgsIGUzMiwgbTIsIHRhLCBtYQ0K PiAgICAgICAgIHZtdi52LnggdjgsIGEzDQo+ICAgICAgICAgdm12LnYuaSB2 MTAsIDMNCj4gICAgICAgICBtdiAgICAgIGE0LCBhNg0KPiAgICAgICAgIG12 ICAgICAgYTUsIGExDQo+ICAgICAgICAgbXYgICAgICBhMywgYTANCj4gLkxC QjBfNDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgPT5UaGlz IElubmVyIExvb3AgSGVhZGVyOiBEZXB0aD0xDQo+ICAgICAgICAgYWRkaSAg ICBhNywgYTUsIDMyDQo+ICAgICAgICAgYWRkaSAgICB0MCwgYTMsIDMyDQo+ ICAgICAgICAgdnNldGl2bGkgICAgICAgIHplcm8sIDE2LCBlMTYsIG0yLCB0 YSwgbWENCj4gICAgICAgICB2c2UxNi52IHY4LCAoYTMpDQo+ICAgICAgICAg dnNlMTYudiB2OCwgKHQwKQ0KPiAgICAgICAgIHZzZXRpdmxpICAgICAgICB6 ZXJvLCA4LCBlMzIsIG0yLCB0YSwgbWENCj4gICAgICAgICB2c2UzMi52IHYx MCwgKGE1KQ0KPiAgICAgICAgIHZzZTMyLnYgdjEwLCAoYTcpDQo+ICAgICAg ICAgYWRkaSAgICBhMywgYTMsIDY0DQo+ICAgICAgICAgYWRkaSAgICBhNCwg YTQsIC0xNg0KPiAgICAgICAgIGFkZGkgICAgYTUsIGE1LCA2NA0KPiAgICAg ICAgIGJuZXogICAgYTQsIC5MQkIwXzQNCj4gIyAlYmIuNToNCj4gICAgICAg ICBiZXEgICAgIGE2LCBhMiwgLkxCQjBfOA0KPiAuTEJCMF82Og0KPiAgICAg ICAgIHNsbGkgICAgYTMsIGE2LCAyDQo+ICAgICAgICAgYWRkICAgICBhMCwg YTAsIGEzDQo+ICAgICAgICAgYWRkaSAgICBhMCwgYTAsIDINCj4gICAgICAg ICBhZGQgICAgIGExLCBhMSwgYTMNCj4gICAgICAgICBzdWIgICAgIGEyLCBh MiwgYTYNCj4gICAgICAgICBsaSAgICAgIGEzLCAxDQo+ICAgICAgICAgbGkg ICAgICBhNCwgMg0KPiAgICAgICAgIGxpICAgICAgYTUsIDMNCj4gLkxCQjBf NzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgPT5UaGlzIElu bmVyIExvb3AgSGVhZGVyOiBEZXB0aD0xDQo+ICAgICAgICAgc2ggICAgICBh MywgLTIoYTApDQo+ICAgICAgICAgc2ggICAgICBhNCwgMChhMCkNCj4gICAg ICAgICBzdyAgICAgIGE1LCAwKGExKQ0KPiAgICAgICAgIGFkZGkgICAgYTAs IGEwLCA0DQo+ICAgICAgICAgYWRkaSAgICBhMiwgYTIsIC0xDQo+ICAgICAg ICAgYWRkaSAgICBhMSwgYTEsIDQNCj4gICAgICAgICBibmV6ICAgIGEyLCAu TEJCMF83DQo+IC5MQkIwXzg6DQo+ICAgICAgICAgcmV0DQo+DQo+IEFSTSBH Q0M6DQo+IGZvbzE6DQo+ICAgICAgICAgY21wICAgICB3MiwgMA0KPiAgICAg ICAgIGJsZSAgICAgLkwxDQo+ICAgICAgICAgYWRkdmwgICB4NCwgeDAsICMx DQo+ICAgICAgICAgbW92ICAgICB4MywgMA0KPiAgICAgICAgIGNudGIgICAg eDcNCj4gICAgICAgICBjbnRiICAgIHg2LCBhbGwsIG11bCAjMg0KPiAgICAg ICAgIHNiZml6ICAgeDIsIHgyLCAxLCAzMg0KPiAgICAgICAgIHB0cnVlICAg cDAuYiwgYWxsDQo+ICAgICAgICAgbW92ICAgICB4NSwgeDINCj4gICAgICAg ICBhZHJwICAgIHg4LCAuTEMwDQo+ICAgICAgICAgdXFkZWNoICB4NQ0KPiAg ICAgICAgIGFkZCAgICAgeDgsIHg4LCA6bG8xMjouTEMwDQo+ICAgICAgICAg d2hpbGVsbyBwMS5oLCB4enIsIHg1DQo+ICAgICAgICAgbGQxcncgICB6MS5z LCBwMC96LCBbeDhdDQo+ICAgICAgICAgbW92ICAgICB6MC5zLCAjMw0KPiAg ICAgICAgIHdoaWxlbG8gcDAuaCwgeHpyLCB4Mg0KPiAuTDM6DQo+ICAgICAg ICAgc3QxaCAgICB6MS5oLCBwMCwgW3gwLCB4MywgbHNsIDFdDQo+ICAgICAg ICAgc3QxaCAgICB6MS5oLCBwMSwgW3g0LCB4MywgbHNsIDFdDQo+ICAgICAg ICAgc3QxdyAgICB6MC5zLCBwMSwgW3gxLCAjMSwgbXVsIHZsXQ0KPiAgICAg ICAgIGFkZCAgICAgeDMsIHgzLCB4Nw0KPiAgICAgICAgIHdoaWxlbG8gcDEu aCwgeDMsIHg1DQo+ICAgICAgICAgc3QxdyAgICB6MC5zLCBwMCwgW3gxXQ0K PiAgICAgICAgIGFkZCAgICAgeDEsIHgxLCB4Ng0KPiAgICAgICAgIHdoaWxl bG8gcDAuaCwgeDMsIHgyDQo+ICAgICAgICAgYi5hbnkgICAuTDMNCj4gLkwx Og0KPiAgICAgICAgIHJldA0KPg0KPiBJdCdzIHZlcnkgb2J2aW91cyB0aGF0 IEFSTSBHQ0MgaGFzIG11Y2ggYmV0dGVyIGNvZGVnZW4gc2luY2UgUlZWIExM Vk0ganVzdCB1c2UgU0lNRCBzdHlsZSB0byBoYW5kbGUgbXVsdGktcmdyb3Vw IFNMUCBhdXRvLXZlY3Rvcml6YXRpb24uDQo+DQo+IFdlbGwsIEkgYW0gdG90 YWxseSBhZ2dyZWUgdGhhdCB3ZSBzaG91bGQgYWRkIGxlbmd0aCBzdHVmZiBp biBhdXRvLXZlY3Rvcml6YXRpb24gbm90IG9ubHkgZm9yIHNpbmdsZSByZ3Jv dXAgYnV0IGFsc28gbXVsdGlwbGUgcmdyb3VwLg0KPiBIb3dldmVyLCB3aGVu IEkgYW0gdHJ5aW5nIHRvIGltcGxlbWVudCBtdWx0aXBsZSByZ3JvdXAgbGVu Z3RoIGZvciBib3RoIFNMUCBhbmQgbm9uLVNMUCBhbmQgdGVzdGluZywgdHVy bnMgb3V0IGl0J3MgaGFyZCB0byB1c2Ugc2VsZWN0X3ZsDQo+IHNpbmNlICJz ZWxlY3RfdmwiIHBhdHRlcm4gYWxsb3dzIG5vbi1WRiBmbGV4aWJsZSBsZW5n dGggKGxlbmd0aCA8PSBtaW4gKHJlbWFpbixWRikpIGluIGFueSBpdGVyYXRp b24sIGl0J3MgY29uc3VtaW5nIG11Y2ggbW9yZSBvcGVyYXRpb25zIGZvcg0K PiBhZGp1c3QgbG9vcCBjb250cm9scyBJViBhbmQgZGF0YSByZWZlcmVuY2Ug YWRkcmVzcyBwb2ludCBJViB0aGFuIGp1c3QgdXNpbmcgIk1JTl9FWFBSIi4N Cj4NCj4gU28gZm9yIENhc2UgMiAmJiBDYXNlIDMsIEkganVzdCB1c2UgTUlO X0VYUFIgZGlyZWN0bHkgaW5zdGVhZCBvZiBTRUxFQ1RfVkwgYWZ0ZXIgbXkg c2VydmVyYWwgaW50ZXJuYWwgdGVzdGluZy4NCiANCkNvdWxkIHlvdSBnbyBp bnRvIG1vcmUgZGV0YWlscyBhYm91dCB0aGlzPyAgSSBpbWFnaW5lZCB0aGF0 IGZvciBjYXNlIDMsDQp0aGVyZSB3b3VsZCBiZSBhIHNpbmdsZSBTRUxFQ1Rf VkwgdGhhdCBkZWNpZGVzIGhvdyBtYW55IHNjYWxhciBpdGVyYXRpb25zDQp3 aWxsIGJlIGhhbmRsZWQgYnkgdGhlIGN1cnJlbnQgdmVjdG9yIGl0ZXJhdGlv biwgdGhlbiB3ZSB3b3VsZCAiZXhwYW5kIg0KdGhlIHJlc3VsdCAodXNpbmcg TUlOX0VYUFJzKSB0byB0aGUgbXVsdGktY29udHJvbCBjYXNlcy4NCiANCklu IGEgc2Vuc2UgdGhhdCByZXBsaWNhdGVzIHdoYXQgdGhlIFNWRSBjb2RlIGFi b3ZlIGlzIGRvaW5nLiAgQnV0IGZvciBTVkUsDQppdCdzIHBvc3NpYmxlIHRv ICJvcHRpbWlzZSIgdGhlIHVucGFja2luZyBvZiBhIFdISUxFTE8gcmVzdWx0 IGR1ZSB0byB0aGUNCmxhY2sgb2YgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBi ZWhhdmlvdXIuICBTbyBjb25jZXB0dWFsbHkgd2UgaGF2ZSBhDQpzaW5nbGUg V0hJTEVMTyB0aGF0IGlzIHVucGFja2VkIG9uZSBsYXllciB0byBnaXZlIHR3 byBtYXNrcy4gIEJ1dCBpbg0KcmVhbGl0eSB3ZSBvcHRpbWlzZSB0aGF0IHR3 byBXSElMRUxPcy4gIE5vIHN1Y2ggb3B0aW1pc2F0aW9uIGlzIHBvc3NpYmxl DQp3aXRoIFNFTEVDVF9WTCwgYW5kIG1heWJlIHRoYXQgcHJvZHVjZXMgcG9v ci1xdWFsaXR5IGNvZGUuDQogDQpUaGF0IG1pZ2h0IGJlIHdoYXQgeW91IG1l YW4gKGhhdmVuJ3QgaGFkIGNoYW5jZSB0byBsb29rIGF0IHRoZSBwYXRjaA0K aXRzZWxmIHlldCwgYnV0IGhvcGUgdG8gdG9tb3Jyb3cpLg0KIA0KRm9yIGNh c2UgMiAobWF4X25zY2FsYXJzX3Blcl9pdGVyID4gMSksIEkgdGhpbmsgaXQg d291bGQgbWFrZSBjb25jZXB0dWFsDQpzZW5zZSB0byBwYXNzIG1heF9uc2Nh bGFyc19wZXJfaXRlciB0byBTRUxFQ1RfVkwgb3IgKGFsdGVybmF0aXZlbHkp DQptdWx0aXBseSB0aGUgcmVzdWx0IG9mIHRoZSBTRUxFQ1RfVkwgYnkgbWF4 X25zY2FsYXJzX3Blcl9pdGVyLg0KQnV0IGl0J3Mgb25seSB3b3J0aCBkb2lu ZyBvbmUgb2YgdGhvc2UgdHdvIHRoaW5ncyBpZiBpdCBwcm9kdWNlcw0KcmVh c29uYWJsZSBjb2RlIGZvciBSVlYuDQogDQo+IE5vdyBiYXNlIG9uIHRoZXNl IHNpdHVhdGlvbnMsIHdlIG9ubHkgaGF2ZSAic2VsZWN0X3ZsIiBmb3Igc2lu Z2xlLXJncm91cCwgYnV0IG11bHRpcGxlLXJncm91cCAoYm90aCBTTFAgYW5k IG5vbi1TTFApLCB3ZSBqdXN0DQo+IHVzZSBNSU5fRVhQUi4NCj4NCj4gSXMg aXQgbW9yZSBhcHByb3ByaWF0ZSB0aGF0IHdlIHNob3VsZCByZW1vdmUgInNl bGVjdF92bCIgYW5kIGp1c3QgdXNlIE1JTl9FWFBSIGZvcmNlIFZGIGVsZW1l bnRzIGluIGVhY2ggbm9uLWZpbmFsIGl0ZXJhdGlvbiBpbiBzaW5nbGUgcmdy b3VwPw0KIA0KSXQncyB1cCB0byB5b3UuICBJZiB5b3UgZG9uJ3QgdGhpbmsg c2VsZWN0X3ZsIGlzIHdvcnRoIGl0IHRoZW4gaXQgd291bGQNCm9idmlvdXNs eSBtYWtlIHRoZSB2ZWN0b3Jpc2VyIGNoYW5nZXMgYSBiaXQgc2ltcGxlci4N CiANCkJ1dCBtYWtpbmcgdGhlIHZlY3RvcmlzZXIgc2ltcGxlciBpc24ndCBJ TU8gdGhlIGdvYWwgaGVyZS4gIFNFTEVDVF9WTA0Kc2VlbXMgbGlrZSBhIHBl cmZlY3RseSByZWFzb25hYmxlIGNvbnN0cnVjdCB0byBhZGQgdG8gdGFyZ2V0 LWluZGVwZW5kZW50DQpjb2RlLiAgV2UganVzdCBuZWVkIHRvIHdvcmsgb3V0 IHNvbWUgb2YgdGhlIGRldGFpbHMuDQogDQpGV0lXLCBJIHNoYXJlIEtld2Vu J3MgY29uY2VybiBhYm91dCBkdXBsaWNhdGluZyB0b28gbXVjaCBsb2dpYyBi ZXR3ZWVuDQptYXNrcywgY3VycmVudCBsZW5ndGhzLCBhbmQgU0VMRUNUX1ZM IGxlbmd0aHMuICBCdXQgSSBoYXZlbid0IGxvb2tlZCBhdA0KdGhlIHBhdGNo IHlldCBhbmQgc28gSSBkb24ndCBrbm93IGhvdyBlYXN5IGl0IHdvdWxkIGJl IHRvIGF2b2lkIHRoYXQuDQogDQpUaGFua3MsDQpSaWNoYXJkDQogDQo+IExp a2UgdGhlIGNvZGVnZW4gYWNjb3JkaW5nIHRvIFJWViBJU0EgZXhhbXBsZSAo c2hvdyBhcyBSVlYgTExWTSk6DQo+IGh0dHBzOi8vcmVwby5oY2EuYnNjLmVz L2VwaWMvei9veW5oelAgDQo+DQo+IEFTTToNCj4gdmVjX2FkZDogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMgQHZlY19hZGQNCj4gICAgICAg ICBibGV6ICAgIGEzLCAuTEJCMF8zDQo+ICAgICAgICAgbGkgICAgICBhNCwg MA0KPiAuTEJCMF8yOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IyAldmVjdG9yLmJvZHkNCj4gICAgICAgICBzdWIgICAgIGE1LCBhMywgYTQN Cj4gICAgICAgICB2c2V0dmxpIGE2LCBhNSwgZTY0LCBtMSwgdGEsIG11ICA9 PT4gY2hhbmdlIGl0IGludG8gYTYgPSBtaW4gKGE1LCBWRikgJiYgdnNldHZs aSB6ZXJvLCBhNiwgZTY0LCBtMSwgdGEsIG11DQo+ICAgICAgICAgc2xsaSAg ICBhNywgYTQsIDMNCj4gICAgICAgICBhZGQgICAgIGE1LCBhMSwgYTcNCj4g ICAgICAgICB2bGU2NC52IHY4LCAoYTUpDQo+ICAgICAgICAgYWRkICAgICBh NSwgYTIsIGE3DQo+ICAgICAgICAgdmxlNjQudiB2OSwgKGE1KQ0KPiAgICAg ICAgIHZmYWRkLnZ2ICAgICAgICB2OCwgdjgsIHY5DQo+ICAgICAgICAgYWRk ICAgICBhNywgYTcsIGEwDQo+ICAgICAgICAgYWRkICAgICBhNCwgYTQsIGE2 DQo+ICAgICAgICAgdnNlNjQudiB2OCwgKGE3KQ0KPiAgICAgICAgIGJuZSAg ICAgYTQsIGEzLCAuTEJCMF8yDQo+IC5MQkIwXzM6ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjICVmb3IuY29uZC5jbGVhbnVwDQo+ICAgICAg ICAgcmV0DQo+DQo+IFNvIGlmIHdlIHJlbW92ZSAic2VsZWN0X3ZsIiBqdXN0 IHVzZSBNSU5fRVhQUiB0byBmb3JjZSBWRiBlbGVtZW50cyBpbiBub24tZmlu YWwgaXRlcmF0aW9uLCB3ZSB3aWxsIGVuZCB1cCB3aXRoIGhhdmluZyBsaWtl IHRoaXM6DQo+DQo+IHZlY19hZGQ6ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIEB2ZWNfYWRkDQo+ICAgICAgICAgYmxleiAgICBhMywgLkxC QjBfMw0KPiAgICAgICAgIGNzcnIgICAgVkYgaW4gYnl0ZXMsIHZsZW5iDQo+ IC5MQkIwXzI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICV2 ZWN0b3IuYm9keQ0KPiAgICAgICAgIHN1YiAgICAgYTUsIGEzLCBWRiBpbiBl bGVtZW50cw0KPiAgICAgICAgIGE2ID0gbWluIChhNSwgVkYgaW4gZWxlbWVu dHMpIA0KPiAgICAgICAgIHZzZXR2bGkgemVybywgYTYsIGU2NCwgbTEsIHRh LCBtdQ0KPiAgICAgICAgIGFkZCAgICAgYTUsIGExLCBWRiBpbiBieXRlcw0K PiAgICAgICAgIHZsZTY0LnYgdjgsIChhNSkNCj4gICAgICAgICBhZGQgICAg IGE1LCBhMiwgVkYgaW4gYnl0ZXMNCj4gICAgICAgICB2bGU2NC52IHY5LCAo YTUpDQo+ICAgICAgICAgdmZhZGQudnYgICAgICAgIHY4LCB2OCwgdjkNCj4g ICAgICAgICBhZGQgICAgIGE3LCBhNywgYTANCj4gICAgICAgICB2c2U2NC52 IHY4LCAoYTcpDQo+ICAgICAgICAgYm5lICAgICBhNCwgYTMsIC5MQkIwXzIN Cj4gLkxCQjBfMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg JWZvci5jb25kLmNsZWFudXANCj4gICAgICAgICByZXQNCj4NCj4gQm90aCBj b2RlZ2VuIGFyZSB3b3JraW5nIGdvb2QgZm9yIFJWVi4NCj4gSnVzdCBvbmx5 IHRoZSBzZWNvbmQgb25lIGNhbiBub3QgaGF2ZSB0aGUgUlZWIHNwZWNpYWwg b3B0aW1pemF0aW9uIChldmVuIGRpc3RyaWJ1dGVkIHdvcmtsb2FkIGluIGxh c3QgMiBpdGVyYXRpb25zKS4NCj4NCj4gRXhwZWN0aW5nIGFueSBzdWdnZXN0 aW9ucyBmcm9tIHlvdS4NCj4gVGhhbmtzLg0KPg0KPg0KPiBqdXpoZS56aG9u Z0ByaXZhaS5haQ0KPiAgDQo+IEZyb206IGp1emhlLnpob25nDQo+IERhdGU6 IDIwMjMtMDUtMDQgMjE6MjUNCj4gVG86IGdjYy1wYXRjaGVzDQo+IENDOiBy aWNoYXJkLnNhbmRpZm9yZDsgcmd1ZW50aGVyOyBKdS1aaGUgWmhvbmcNCj4g U3ViamVjdDogW1BBVENIIFY0XSBWRUNUOiBBZGQgZGVjcmVtZW50IElWIGl0 ZXJhdGlvbiBsb29wIGNvbnRyb2wgYnkgdmFyaWFibGUgYW1vdW50IHN1cHBv cnQNCj4gRnJvbTogSnUtWmhlIFpob25nIDxqdXpoZS56aG9uZ0ByaXZhaS5h aT4NCj4gIA0KPiBUaGlzIHBhdGNoIGlzIGZpeGluZyBWMyBwYXRjaDoNCj4g aHR0cHM6Ly9wYXRjaHdvcmsuc291cmNld2FyZS5vcmcvcHJvamVjdC9nY2Mv cGF0Y2gvMjAyMzA0MDcwMTQ3NDEuMTM5Mzg3LTEtanV6aGUuemhvbmdAcml2 YWkuYWkvDQo+ICANCj4gRml4IGlzc3VlcyBhY2NvcmRpbmcgdG8gUmljaGFy ZCBTYW5kaWZvcmQgJiYgUmljaGFyZCBCaWVuZXIuDQo+ICANCj4gMS4gUmVu YW1lIFdISUxFX0xFTiBwYXR0ZXJuIGludG8gU0VMRUNUX1ZMIGFjY29yZGlu ZyB0byBSaWNoYXJkIFNhbmRpZm9yZC4NCj4gMi4gU3VwcG9ydCBtdWx0aXBs ZS1yZ3JvdXAgZm9yIG5vbi1TTFAgYXV0by12ZWN0b3JpemF0aW9uLg0KPiAg DQo+ICAgIEZvciB2ZWNfcGFja190cnVuYyBwYXR0ZXJuIChtdWx0aS1yZ3Jv dXAgb2Ygbm9uLVNMUCksIHdlIGdlbmVyYXRlIHRoZSB0b3RhbCBsZW5ndGg6 DQo+ICANCj4gICAgICBfMzYgPSBNSU5fRVhQUiA8aXZ0bXBfMzQsIFBPTFlf SU5UX0NTVCBbOCwgOF0+Ow0KPiAgDQo+ICAgICAgRmlyc3QgbGVuZ3RoIChN SU4gKFgsIFZGL04pKToNCj4gICAgICAgIGxvb3BfbGVuXzE1ID0gTUlOX0VY UFIgPF8zNiwgUE9MWV9JTlRfQ1NUIFsyLCAyXT47DQo+ICANCj4gICAgICBT ZWNvbmQgbGVuZ3RoIChYIC0gTUlOIChYLCAxICogVkYvTikpOg0KPiAgICAg ICAgbG9vcF9sZW5fMTYgPSBfMzYgLSBsb29wX2xlbl8xNTsNCj4gIA0KPiAg ICAgIFRoaXJkIGxlbmd0aCAoWCAtIE1JTiAoWCwgMiAqIFZGL04pKToNCj4g ICAgICAgIF8zOCA9IE1JTl9FWFBSIDxfMzYsIFBPTFlfSU5UX0NTVCBbNCwg NF0+Ow0KPiAgICAgICAgbG9vcF9sZW5fMTcgPSBfMzYgLSBfMzg7DQo+ICAN Cj4gICAgICBGb3J0aCBsZW5ndGggKFggLSBNSU4gKFgsIDMgKiBWRi9OKSk6 DQo+ICAgICAgICBfMzkgPSBNSU5fRVhQUiA8XzM2LCBQT0xZX0lOVF9DU1Qg WzYsIDZdPjsNCj4gICAgICAgIGxvb3BfbGVuXzE4ID0gXzM2IC0gXzM5Ow0K PiAgDQo+IFRoZSByZWFzb24gdGhhdCBJIHVzZSBNSU5fRVhQUiBpbnN0ZWFk IG9mIFNFTEVDVF9WTCB0byBjYWxjdWxhdGUgdG90YWwgbGVuZ3RoIHNpbmNl IHVzaW5nIFNFTEVDVF9WTA0KPiB0byBhZGFwdCBpbmR1Y3Rpb24gSVYgY29u c3VtZXMgbW9yZSBpbnN0cnVjdGlvbnMgdGhhbiBqdXN0IHVzaW5nIE1JTl9F WFBSLiBBbHNvLCBkdXJpbmcgdGVzdGluZywNCj4gSSBmb3VuZCBpdCdzIGhh cmQgdG8gYWRqdXN0IGxlbmd0aCBjb3JyZWN0bHkgYWNjb3JkaW5nIHRvIFNF TEVDVF9WTC4NCj4gIA0KPiBTbywgdGhpcyBwYXRjaCB3ZSBvbmx5IHVzZSBT RUxFQ1RfVkwgZm9yIHNpbmdsZS1yZ3JvdXAgd2l0aCBzaW5nbGUgbGVuZ3Ro IGNvbnRyb2wuDQo+ICANCj4gMy4gRml4IGRvY3VtZW50IG9mIHNlbGVjdF92 bCBmb3IgUmljaGFyZCBCaWVuZXIgKHJlbW92ZSBtb2RlIE4pLg0KPiA0LiBG aXggY29tbWVudHMgb2YgdmVjdF9zZXRfbG9vcF9jb250cm9sc19ieV9zZWxl Y3RfdmwgYWNjb3JkaW5nIHRvIFJpY2hhcmQgQmllbmVyLg0KPiA1LiBLZWVw IGxvb3BfdmluZm8gYXMgZmlyc3QgcGFyYW1ldGVyIGZvciAidmVjdF9nZXRf bG9vcF9sZW4iLg0KPiA2LiBtYWtlIHJlcXVpcmVtZW50IG9mIGdldF93aGls ZV9sZW5fZGF0YV9yZWZfcHRyIG91dHNpZGUsIGxldCBpdCB0byBiZSBnYXRl ZCBhdCB0aGUgY2FsbGVyIHNpdGUuDQo+ICANCj4gTW9yZSBjb21tZW50cyBm cm9tIFJpY2hhcmQgQmllbmVyOg0KPj4+IFNvIGl0J3Mgbm90IGFjdHVhbGx5 IHNhdHVyYXRpbmcuICBUaGUgc2F0dXJhdGluZyBvcGVyYXRpb24gaXMgZG9u ZSBieSAuV0hJTEVfTEVOPw0KPiBJIGRlZmluZSB0aGUgb3V0Y29tZSBvZiBT RUxFQ1RfVkwgKG4sIHZmKSAgKFdISUxFX0xFTikgPSBJTl9SQU5HRSAoMCwg bWluIChuLCB2ZikpIHdpbGwgbWFrZSANCj4gdGhlIGxvb3AgY29udHJvbCBj b3VudGVyIG5ldmVyIHVuZGVyZmxvdyB6ZXJvLg0KPiAgDQo+Pj4gSSBzZWUu ICBJIHdvbmRlciBpZiBpdCBtYWtlcyBzZW5zZSB0byBsZWF2ZSAuV0hJTEVf TEVOIGFzaWRlIGZvciBhIHN0YXJ0LA0KPj4+IHRoZSBhYm92ZSBzY2hlbWUg c2hvdWxkIGFsc28gd29yayBmb3Igc2luZ2xlIHJncm91cHMsIG5vPw0KPj4+ IEFzIHNhaWQsIGl0IF9sb29rc18gbGlrZSB5b3UgY2FuIHByb2dyZXNzIHdp dGhvdXQgLldISUxFX0xFTiBhbmQgdXNpbmcNCj4+PiAuV0hJTEVfTEVOIGlz IGEgcHVyZSBvcHRpbWl6YXRpb24/DQo+IFllcywgU0VMRUNUX1ZMIChXSElM RV9MRU4pIGlzIHB1cmUgb3B0aW1pemF0aW9uIGZvciBzaW5nbGUtcmdyb3Vw IGFuZCBhbGxvdw0KPiB0YXJnZXQgYWRqdXN0IGFueSBsZW5ndGggPSBJTlJB TkdFICgwLCBtaW4gKG4sIHZmKSkgZWFjaCBpdGVyYXRpb24uDQo+ICANCj4g TGV0IG1lIGtub3duIGlmIEkgbWlzc2VkIHNvbWV0aGluZyBmb3IgdGhlIFYz IHBhdGNoLg0KPiBUaGFua3MuDQo+ICANCj4gLS0tDQo+IGdjYy9jZmdsb29w bWFuaXAuY2MgICAgICAgICAgICB8ICAgMiArLQ0KPiBnY2MvZG9jL21kLnRl eGkgICAgICAgICAgICAgICAgfCAgMzQgKysrDQo+IGdjYy9naW1wbGUtbG9v cC1pbnRlcmNoYW5nZS5jYyB8ICAgMiArLQ0KPiBnY2MvaW50ZXJuYWwtZm4u ZGVmICAgICAgICAgICAgfCAgIDEgKw0KPiBnY2Mvb3B0YWJzLmRlZiAgICAg ICAgICAgICAgICAgfCAgIDEgKw0KPiBnY2MvdHJlZS1zc2EtbG9vcC1pdmNh bm9uLmNjICAgfCAgIDIgKy0NCj4gZ2NjL3RyZWUtc3NhLWxvb3AtaXZvcHRz LmNjICAgIHwgICAyICstDQo+IGdjYy90cmVlLXNzYS1sb29wLW1hbmlwLmNj ICAgICB8ICAxOCArLQ0KPiBnY2MvdHJlZS1zc2EtbG9vcC1tYW5pcC5oICAg ICAgfCAgIDQgKy0NCj4gZ2NjL3RyZWUtdmVjdC1kYXRhLXJlZnMuY2MgICAg IHwgICA4ICstDQo+IGdjYy90cmVlLXZlY3QtbG9vcC1tYW5pcC5jYyAgICB8 IDM3NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0NCj4gZ2Nj L3RyZWUtdmVjdC1sb29wLmNjICAgICAgICAgIHwgIDMyICsrLQ0KPiBnY2Mv dHJlZS12ZWN0LXN0bXRzLmNjICAgICAgICAgfCAgODkgKysrKysrKy0NCj4g Z2NjL3RyZWUtdmVjdG9yaXplci5oICAgICAgICAgIHwgICA0ICstDQo+IDE0 IGZpbGVzIGNoYW5nZWQsIDUzNSBpbnNlcnRpb25zKCspLCAzOCBkZWxldGlv bnMoLSkNCj4gIA0KPiBkaWZmIC0tZ2l0IGEvZ2NjL2NmZ2xvb3BtYW5pcC5j YyBiL2djYy9jZmdsb29wbWFuaXAuY2MNCj4gaW5kZXggMGUzYWQ4ZWQ3NDIu LjZlMDlkY2JiMGIxIDEwMDY0NA0KPiAtLS0gYS9nY2MvY2ZnbG9vcG1hbmlw LmNjDQo+ICsrKyBiL2djYy9jZmdsb29wbWFuaXAuY2MNCj4gQEAgLTgyNiw3 ICs4MjYsNyBAQCBjcmVhdGVfZW1wdHlfbG9vcF9vbl9lZGdlIChlZGdlIGVu dHJ5X2VkZ2UsDQo+ICAgICAgfQ0KPiAgICBnc2kgPSBnc2lfbGFzdF9iYiAo bG9vcF9oZWFkZXIpOw0KPiAtICBjcmVhdGVfaXYgKGluaXRpYWxfdmFsdWUs IHN0cmlkZSwgaXYsIGxvb3AsICZnc2ksIGZhbHNlLA0KPiArICBjcmVhdGVf aXYgKGluaXRpYWxfdmFsdWUsIFBMVVNfRVhQUiwgc3RyaWRlLCBpdiwgbG9v cCwgJmdzaSwgZmFsc2UsDQo+ICAgICAgaXZfYmVmb3JlLCBpdl9hZnRlcik7 DQo+ICAgIC8qIEluc2VydCBsb29wIGV4aXQgY29uZGl0aW9uLiAgKi8NCj4g ZGlmZiAtLWdpdCBhL2djYy9kb2MvbWQudGV4aSBiL2djYy9kb2MvbWQudGV4 aQ0KPiBpbmRleCBjYzRhOTNhODc2My4uOTljZjBjZGJkY2EgMTAwNjQ0DQo+ IC0tLSBhL2djYy9kb2MvbWQudGV4aQ0KPiArKysgYi9nY2MvZG9jL21kLnRl eGkNCj4gQEAgLTQ5NzQsNiArNDk3NCw0MCBAQCBmb3IgKGkgPSAxOyBpIDwg b3BlcmFuZDM7IGkrKykNCj4gICAgb3BlcmFuZDBbaV0gPSBvcGVyYW5kMFtp IC0gMV0gJiYgKG9wZXJhbmQxICsgaSA8IG9wZXJhbmQyKTsNCj4gQGVuZCBz bWFsbGV4YW1wbGUNCj4gK0BjaW5kZXggQGNvZGV7c2VsZWN0X3ZsQHZhcntt fX0gaW5zdHJ1Y3Rpb24gcGF0dGVybg0KPiArQGl0ZW0gQGNvZGV7c2VsZWN0 X3ZsQHZhcnttfX0NCj4gK1NldCBvcGVyYW5kIDAgdG8gdGhlIG51bWJlciBv ZiBhY3RpdmUgZWxlbWVudHMgaW4gdmVjdG9yIHdpbGwgYmUgdXBkYXRlZCB2 YWx1ZS4NCj4gK29wZXJhbmQgMSBpcyB0aGUgdG90YWwgZWxlbWVudHMgbmVl ZCB0byBiZSB1cGRhdGVkIHZhbHVlLg0KPiArb3BlcmFuZCAyIGlzIHRoZSB2 ZWN0b3JpemF0aW9uIGZhY3Rvci4NCj4gK1RoZSB2YWx1ZSBvZiBvcGVyYW5k IDAgaXMgdGFyZ2V0IGRlcGVuZGVudCBhbmQgZmxleGlibGUgaW4gZWFjaCBp dGVyYXRpb24uDQo+ICtUaGUgb3BlcmF0aW9uIG9mIHRoaXMgcGF0dGVybiBj YW4gYmU6DQo+ICsNCj4gK0BzbWFsbGV4YW1wbGUNCj4gK0Nhc2UgMToNCj4g K29wZXJhbmQwID0gTUlOIChvcGVyYW5kMSwgb3BlcmFuZDIpOw0KPiArb3Bl cmFuZDIgY2FuIGJlIGNvbnN0X3BvbHlfaW50IG9yIHBvbHlfaW50IHJlbGF0 ZWQgdG8gdmVjdG9yIG1vZGUgc2l6ZS4NCj4gK1NvbWUgdGFyZ2V0IGxpa2Ug UklTQy1WIGhhcyBhIHN0YW5kYWxvbmUgaW5zdHJ1Y3Rpb24gdG8gZ2V0IE1J TiAobiwgTU9ERSBTSVpFKSBzbw0KPiArdGhhdCB3ZSBjYW4gcmVkdWNlIGEg dXNlIG9mIGdlbmVyYWwgcHVycG9zZSByZWdpc3Rlci4NCj4gKw0KPiArSW4g dGhpcyBjYXNlLCBvbmx5IHRoZSBsYXN0IGl0ZXJhdGlvbiBvZiB0aGUgbG9v cCBpcyBwYXJ0aWFsIGl0ZXJhdGlvbi4NCj4gK0BlbmQgc21hbGxleGFtcGxl DQo+ICsNCj4gK0BzbWFsbGV4YW1wbGUNCj4gK0Nhc2UgMjoNCj4gK2lmIChv cGVyYW5kMSA8PSBvcGVyYW5kMikNCj4gKyAgb3BlcmFuZDAgPSBvcGVyYW5k MTsNCj4gK2Vsc2UgaWYgKG9wZXJhbmQxIDwgMiAqIG9wZXJhbmQyKQ0KPiAr ICBvcGVyYW5kMCA9IElOX1JBTkdFIChjZWlsIChvcGVyYW5kMSAvIDIpLCBv cGVyYW5kMik7DQo+ICtlbHNlDQo+ICsgIG9wZXJhbmQwID0gb3BlcmFuZDI7 DQo+ICsNCj4gK1RoaXMgY2FzZSB3aWxsIGV2ZW5seSBkaXN0cmlidXRlIHdv cmsgb3ZlciB0aGUgbGFzdCAyIGl0ZXJhdGlvbnMgb2YgYSBzdHJpcG1pbmUg bG9vcC4NCj4gK0BlbmQgc21hbGxleGFtcGxlDQo+ICsNCj4gK1RoZSBvdXRw dXQgb2YgdGhpcyBwYXR0ZXJuIGlzIG5vdCBvbmx5IHVzZWQgYXMgSVYgb2Yg bG9vcCBjb250cm9sIGNvdW50ZXIsIGJ1dCBhbHNvDQo+ICtpcyB1c2VkIGFz IHRoZSBJViBvZiBhZGRyZXNzIGNhbGN1bGF0aW9uIHdpdGggbXVsdGlwbHkv c2hpZnQgb3BlcmF0aW9uLiBUaGlzIGFsbG93DQo+ICt1cyBkeW5hbWljIGFk anVzdCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGlzIHByb2Nlc3NlZCBpbiBl YWNoIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcC4NCj4gKw0KPiBAY2luZGV4IEBj b2Rle2NoZWNrX3Jhd19wdHJzQHZhcnttfX0gaW5zdHJ1Y3Rpb24gcGF0dGVy bg0KPiBAaXRlbSBAc2FtcHtjaGVja19yYXdfcHRyc0B2YXJ7bX19DQo+IENo ZWNrIHdoZXRoZXIsIGdpdmVuIHR3byBwb2ludGVycyBAdmFye2F9IGFuZCBA dmFye2J9IGFuZCBhIGxlbmd0aCBAdmFye2xlbn0sDQo+IGRpZmYgLS1naXQg YS9nY2MvZ2ltcGxlLWxvb3AtaW50ZXJjaGFuZ2UuY2MgYi9nY2MvZ2ltcGxl LWxvb3AtaW50ZXJjaGFuZ2UuY2MNCj4gaW5kZXggMWI3N2JmZDQ2YjIuLmU1 NTkwMzc0ZTU5IDEwMDY0NA0KPiAtLS0gYS9nY2MvZ2ltcGxlLWxvb3AtaW50 ZXJjaGFuZ2UuY2MNCj4gKysrIGIvZ2NjL2dpbXBsZS1sb29wLWludGVyY2hh bmdlLmNjDQo+IEBAIC0xMTg1LDcgKzExODUsNyBAQCB0cmVlX2xvb3BfaW50 ZXJjaGFuZ2U6Om1hcF9pbmR1Y3Rpb25zX3RvX2xvb3AgKGxvb3BfY2FuZCAm c3JjLCBsb29wX2NhbmQgJnRndCkNCj4gICB0cmVlIHZhcl9iZWZvcmUsIHZh cl9hZnRlcjsNCj4gICB0cmVlIGJhc2UgPSB1bnNoYXJlX2V4cHIgKGl2LT5p bml0X2V4cHIpOw0KPiAgIHRyZWUgc3RlcCA9IHVuc2hhcmVfZXhwciAoaXYt PnN0ZXApOw0KPiAtICAgY3JlYXRlX2l2IChiYXNlLCBzdGVwLCBTU0FfTkFN RV9WQVIgKGl2LT52YXIpLA0KPiArICAgY3JlYXRlX2l2IChiYXNlLCBQTFVT X0VYUFIsIHN0ZXAsIFNTQV9OQU1FX1ZBUiAoaXYtPnZhciksDQo+ICAgICAg dGd0Lm1fbG9vcCwgJmluY3JfcG9zLCBmYWxzZSwgJnZhcl9iZWZvcmUsICZ2 YXJfYWZ0ZXIpOw0KPiAgIGJpdG1hcF9zZXRfYml0IChtX2RjZV9zZWVkcywg U1NBX05BTUVfVkVSU0lPTiAodmFyX2JlZm9yZSkpOw0KPiAgIGJpdG1hcF9z ZXRfYml0IChtX2RjZV9zZWVkcywgU1NBX05BTUVfVkVSU0lPTiAodmFyX2Fm dGVyKSk7DQo+IGRpZmYgLS1naXQgYS9nY2MvaW50ZXJuYWwtZm4uZGVmIGIv Z2NjL2ludGVybmFsLWZuLmRlZg0KPiBpbmRleCA3ZmU3NDJjMmFlNy4uNmY2 ZmE3ZDM3ZjkgMTAwNjQ0DQo+IC0tLSBhL2djYy9pbnRlcm5hbC1mbi5kZWYN Cj4gKysrIGIvZ2NjL2ludGVybmFsLWZuLmRlZg0KPiBAQCAtMTUzLDYgKzE1 Myw3IEBAIERFRl9JTlRFUk5BTF9PUFRBQl9GTiAoVkVDX1NFVCwgMCwgdmVj X3NldCwgdmVjX3NldCkNCj4gREVGX0lOVEVSTkFMX09QVEFCX0ZOIChMRU5f U1RPUkUsIDAsIGxlbl9zdG9yZSwgbGVuX3N0b3JlKQ0KPiBERUZfSU5URVJO QUxfT1BUQUJfRk4gKFdISUxFX1VMVCwgRUNGX0NPTlNUIHwgRUNGX05PVEhS T1csIHdoaWxlX3VsdCwgd2hpbGUpDQo+ICtERUZfSU5URVJOQUxfT1BUQUJf Rk4gKFNFTEVDVF9WTCwgRUNGX0NPTlNUIHwgRUNGX05PVEhST1csIHNlbGVj dF92bCwgYmluYXJ5KQ0KPiBERUZfSU5URVJOQUxfT1BUQUJfRk4gKENIRUNL X1JBV19QVFJTLCBFQ0ZfQ09OU1QgfCBFQ0ZfTk9USFJPVywNCj4gICAgICAg IGNoZWNrX3Jhd19wdHJzLCBjaGVja19wdHJzKQ0KPiBERUZfSU5URVJOQUxf T1BUQUJfRk4gKENIRUNLX1dBUl9QVFJTLCBFQ0ZfQ09OU1QgfCBFQ0ZfTk9U SFJPVywNCj4gZGlmZiAtLWdpdCBhL2djYy9vcHRhYnMuZGVmIGIvZ2NjL29w dGFicy5kZWYNCj4gaW5kZXggNjk1ZjU5MTFiMzAuLmI2Mzc0NzFiNzZlIDEw MDY0NA0KPiAtLS0gYS9nY2Mvb3B0YWJzLmRlZg0KPiArKysgYi9nY2Mvb3B0 YWJzLmRlZg0KPiBAQCAtNDc2LDMgKzQ3Niw0IEBAIE9QVEFCX0RDICh2ZWNf c2VyaWVzX29wdGFiLCAidmVjX3NlcmllcyRhIiwgVkVDX1NFUklFUykNCj4g T1BUQUJfRCAodmVjX3NobF9pbnNlcnRfb3B0YWIsICJ2ZWNfc2hsX2luc2Vy dF8kYSIpDQo+IE9QVEFCX0QgKGxlbl9sb2FkX29wdGFiLCAibGVuX2xvYWRf JGEiKQ0KPiBPUFRBQl9EIChsZW5fc3RvcmVfb3B0YWIsICJsZW5fc3RvcmVf JGEiKQ0KPiArT1BUQUJfRCAoc2VsZWN0X3ZsX29wdGFiLCAic2VsZWN0X3Zs JGEiKQ0KPiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtc3NhLWxvb3AtaXZjYW5v bi5jYyBiL2djYy90cmVlLXNzYS1sb29wLWl2Y2Fub24uY2MNCj4gaW5kZXgg ZTQxZWM3M2E1MmEuLmQ0ZTExM2M0NGRmIDEwMDY0NA0KPiAtLS0gYS9nY2Mv dHJlZS1zc2EtbG9vcC1pdmNhbm9uLmNjDQo+ICsrKyBiL2djYy90cmVlLXNz YS1sb29wLWl2Y2Fub24uY2MNCj4gQEAgLTExMyw3ICsxMTMsNyBAQCBjcmVh dGVfY2Fub25pY2FsX2l2IChjbGFzcyBsb29wICpsb29wLCBlZGdlIGV4aXQs IHRyZWUgbml0ZXIsDQo+ICAgICAgICBuaXRlciwNCj4gICAgICAgIGJ1aWxk X2ludF9jc3QgKHR5cGUsIDEpKTsNCj4gICAgaW5jcl9hdCA9IGdzaV9sYXN0 X2JiIChpbi0+c3JjKTsNCj4gLSAgY3JlYXRlX2l2IChuaXRlciwNCj4gKyAg Y3JlYXRlX2l2IChuaXRlciwgUExVU19FWFBSLA0KPiAgICAgIGJ1aWxkX2lu dF9jc3QgKHR5cGUsIC0xKSwNCj4gICAgICBOVUxMX1RSRUUsIGxvb3AsDQo+ ICAgICAgJmluY3JfYXQsIGZhbHNlLCB2YXJfYmVmb3JlLCAmdmFyKTsNCj4g ZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYS1sb29wLWl2b3B0cy5jYyBiL2dj Yy90cmVlLXNzYS1sb29wLWl2b3B0cy5jYw0KPiBpbmRleCA3OGU4Y2JjNzVi NS4uODY0MGZlMmQ0ODcgMTAwNjQ0DQo+IC0tLSBhL2djYy90cmVlLXNzYS1s b29wLWl2b3B0cy5jYw0KPiArKysgYi9nY2MvdHJlZS1zc2EtbG9vcC1pdm9w dHMuY2MNCj4gQEAgLTcyNjcsNyArNzI2Nyw3IEBAIGNyZWF0ZV9uZXdfaXYg KHN0cnVjdCBpdm9wdHNfZGF0YSAqZGF0YSwgc3RydWN0IGl2X2NhbmQgKmNh bmQpDQo+ICAgIGJhc2UgPSB1bnNoYXJlX2V4cHIgKGNhbmQtPml2LT5iYXNl KTsNCj4gLSAgY3JlYXRlX2l2IChiYXNlLCB1bnNoYXJlX2V4cHIgKGNhbmQt Pml2LT5zdGVwKSwNCj4gKyAgY3JlYXRlX2l2IChiYXNlLCBQTFVTX0VYUFIs IHVuc2hhcmVfZXhwciAoY2FuZC0+aXYtPnN0ZXApLA0KPiAgICAgIGNhbmQt PnZhcl9iZWZvcmUsIGRhdGEtPmN1cnJlbnRfbG9vcCwNCj4gICAgICAmaW5j cl9wb3MsIGFmdGVyLCAmY2FuZC0+dmFyX2JlZm9yZSwgJmNhbmQtPnZhcl9h ZnRlcik7DQo+IH0NCj4gZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYS1sb29w LW1hbmlwLmNjIGIvZ2NjL3RyZWUtc3NhLWxvb3AtbWFuaXAuY2MNCj4gaW5k ZXggOTA5YjcwNWQwMGQuLjVhYmNhNjQzNzllIDEwMDY0NA0KPiAtLS0gYS9n Y2MvdHJlZS1zc2EtbG9vcC1tYW5pcC5jYw0KPiArKysgYi9nY2MvdHJlZS1z c2EtbG9vcC1tYW5pcC5jYw0KPiBAQCAtNDcsNyArNDcsOSBAQCBhbG9uZyB3 aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQ0K PiAgICAgc28gdGhhdCB3ZSBjYW4gZnJlZSB0aGVtIGFsbCBhdCBvbmNlLiAg Ki8NCj4gc3RhdGljIGJpdG1hcF9vYnN0YWNrIGxvb3BfcmVuYW1lcl9vYnN0 YWNrOw0KPiAtLyogQ3JlYXRlcyBhbiBpbmR1Y3Rpb24gdmFyaWFibGUgd2l0 aCB2YWx1ZSBCQVNFICsgU1RFUCAqIGl0ZXJhdGlvbiBpbiBMT09QLg0KPiAr LyogQ3JlYXRlcyBhbiBpbmR1Y3Rpb24gdmFyaWFibGUgd2l0aCB2YWx1ZSBC QVNFICgrLy0pIFNURVAgKiBpdGVyYXRpb24gaW4gTE9PUC4NCj4gKyAgIElm IENPREUgaXMgUExVU19FWFBSLCB0aGUgaW5kdWN0aW9uIHZhcmlhYmxlIGlz IEJBU0UgKyBTVEVQICogaXRlcmF0aW9uLg0KPiArICAgSWYgQ09ERSBpcyBN SU5VU19FWFBSLCB0aGUgaW5kdWN0aW9uIHZhcmlhYmxlIGlzIEJBU0UgLSBT VEVQICogaXRlcmF0aW9uLg0KPiAgICAgSXQgaXMgZXhwZWN0ZWQgdGhhdCBu ZWl0aGVyIEJBU0Ugbm9yIFNURVAgYXJlIHNoYXJlZCB3aXRoIG90aGVyIGV4 cHJlc3Npb25zDQo+ICAgICAodW5sZXNzIHRoZSBzaGFyaW5nIHJ1bGVzIGFs bG93IHRoaXMpLiAgVXNlIFZBUiBhcyBhIGJhc2UgdmFyX2RlY2wgZm9yIGl0 DQo+ICAgICAoaWYgTlVMTCwgYSBuZXcgdGVtcG9yYXJ5IHdpbGwgYmUgY3Jl YXRlZCkuICBUaGUgaW5jcmVtZW50IHdpbGwgb2NjdXIgYXQNCj4gQEAgLTU3 LDggKzU5LDggQEAgc3RhdGljIGJpdG1hcF9vYnN0YWNrIGxvb3BfcmVuYW1l cl9vYnN0YWNrOw0KPiAgICAgVkFSX0FGVEVSICh1bmxlc3MgdGhleSBhcmUg TlVMTCkuICAqLw0KPiB2b2lkDQo+IC1jcmVhdGVfaXYgKHRyZWUgYmFzZSwg dHJlZSBzdGVwLCB0cmVlIHZhciwgY2xhc3MgbG9vcCAqbG9vcCwNCj4gLSAg ICBnaW1wbGVfc3RtdF9pdGVyYXRvciAqaW5jcl9wb3MsIGJvb2wgYWZ0ZXIs DQo+ICtjcmVhdGVfaXYgKHRyZWUgYmFzZSwgdHJlZV9jb2RlIGNvZGUsIHRy ZWUgc3RlcCwgdHJlZSB2YXIsDQo+ICsgICAgY2xhc3MgbG9vcCAqbG9vcCwg Z2ltcGxlX3N0bXRfaXRlcmF0b3IgKmluY3JfcG9zLCBib29sIGFmdGVyLA0K PiAgICB0cmVlICp2YXJfYmVmb3JlLCB0cmVlICp2YXJfYWZ0ZXIpDQo+IHsN Cj4gICAgZ2Fzc2lnbiAqc3RtdDsNCj4gQEAgLTY2LDcgKzY4LDkgQEAgY3Jl YXRlX2l2ICh0cmVlIGJhc2UsIHRyZWUgc3RlcCwgdHJlZSB2YXIsIGNsYXNz IGxvb3AgKmxvb3AsDQo+ICAgIHRyZWUgaW5pdGlhbCwgc3RlcDE7DQo+ICAg IGdpbXBsZV9zZXEgc3RtdHM7DQo+ICAgIHRyZWUgdmIsIHZhOw0KPiAtICBl bnVtIHRyZWVfY29kZSBpbmNyX29wID0gUExVU19FWFBSOw0KPiArICAvKiBU aGUgY29kZSBjYW4gb25seSBiZSBQTFVTX0VYUFIgb3IgTUlOVVNfRVhQUi4g ICovDQo+ICsgIGdjY19hc3NlcnQgKGNvZGUgPT0gUExVU19FWFBSIHx8IGNv ZGUgPT0gTUlOVVNfRVhQUik7DQo+ICsgIHRyZWVfY29kZSBpbmNyX29wID0g Y29kZTsNCj4gICAgZWRnZSBwZSA9IGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxv b3ApOw0KPiAgICBpZiAodmFyICE9IE5VTExfVFJFRSkNCj4gQEAgLTEzNjUs NyArMTM2OSw3IEBAIHRyZWVfdHJhbnNmb3JtX2FuZF91bnJvbGxfbG9vcCAo Y2xhc3MgbG9vcCAqbG9vcCwgdW5zaWduZWQgZmFjdG9yLA0KPiAgICAgICAg dHJlZSBjdHJfYmVmb3JlLCBjdHJfYWZ0ZXI7DQo+ICAgICAgICBnaW1wbGVf c3RtdF9pdGVyYXRvciBic2kgPSBnc2lfbGFzdF9ub25kZWJ1Z19iYiAobmV3 X2V4aXQtPnNyYyk7DQo+ICAgICAgICBleGl0X2lmID0gYXNfYSA8Z2NvbmQg Kj4gKGdzaV9zdG10IChic2kpKTsNCj4gLSAgICAgIGNyZWF0ZV9pdiAoZXhp dF9iYXNlLCBleGl0X3N0ZXAsIE5VTExfVFJFRSwgbG9vcCwNCj4gKyAgICAg IGNyZWF0ZV9pdiAoZXhpdF9iYXNlLCBQTFVTX0VYUFIsIGV4aXRfc3RlcCwg TlVMTF9UUkVFLCBsb29wLA0KPiAmYnNpLCBmYWxzZSwgJmN0cl9iZWZvcmUs ICZjdHJfYWZ0ZXIpOw0KPiAgICAgICAgZ2ltcGxlX2NvbmRfc2V0X2NvZGUg KGV4aXRfaWYsIGV4aXRfY21wKTsNCj4gICAgICAgIGdpbXBsZV9jb25kX3Nl dF9saHMgKGV4aXRfaWYsIGN0cl9hZnRlcik7DQo+IEBAIC0xNTgwLDggKzE1 ODQsOCBAQCBjYW5vbmljYWxpemVfbG9vcF9pdnMgKGNsYXNzIGxvb3AgKmxv b3AsIHRyZWUgKm5pdCwgYm9vbCBidW1wX2luX2xhdGNoKQ0KPiAgICAgIGdz aSA9IGdzaV9sYXN0X2JiIChsb29wLT5sYXRjaCk7DQo+ICAgIGVsc2UNCj4g ICAgICBnc2kgPSBnc2lfbGFzdF9ub25kZWJ1Z19iYiAobG9vcC0+aGVhZGVy KTsNCj4gLSAgY3JlYXRlX2l2IChidWlsZF9pbnRfY3N0X3R5cGUgKHR5cGUs IDApLCBidWlsZF9pbnRfY3N0ICh0eXBlLCAxKSwgTlVMTF9UUkVFLA0KPiAt ICAgICAgbG9vcCwgJmdzaSwgYnVtcF9pbl9sYXRjaCwgJnZhcl9iZWZvcmUs IE5VTEwpOw0KPiArICBjcmVhdGVfaXYgKGJ1aWxkX2ludF9jc3RfdHlwZSAo dHlwZSwgMCksIFBMVVNfRVhQUiwgYnVpbGRfaW50X2NzdCAodHlwZSwgMSks DQo+ICsgICAgICBOVUxMX1RSRUUsIGxvb3AsICZnc2ksIGJ1bXBfaW5fbGF0 Y2gsICZ2YXJfYmVmb3JlLCBOVUxMKTsNCj4gICAgcmV3cml0ZV9hbGxfcGhp X25vZGVzX3dpdGhfaXYgKGxvb3AsIHZhcl9iZWZvcmUpOw0KPiBkaWZmIC0t Z2l0IGEvZ2NjL3RyZWUtc3NhLWxvb3AtbWFuaXAuaCBiL2djYy90cmVlLXNz YS1sb29wLW1hbmlwLmgNCj4gaW5kZXggZDQ5MjczYTM5ODcuLmJkYTA5ZjUx ZDU2IDEwMDY0NA0KPiAtLS0gYS9nY2MvdHJlZS1zc2EtbG9vcC1tYW5pcC5o DQo+ICsrKyBiL2djYy90cmVlLXNzYS1sb29wLW1hbmlwLmgNCj4gQEAgLTIy LDggKzIyLDggQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZ SU5HMy4gIElmIG5vdCBzZWUNCj4gdHlwZWRlZiB2b2lkICgqdHJhbnNmb3Jt X2NhbGxiYWNrKShjbGFzcyBsb29wICosIHZvaWQgKik7DQo+IC1leHRlcm4g dm9pZCBjcmVhdGVfaXYgKHRyZWUsIHRyZWUsIHRyZWUsIGNsYXNzIGxvb3Ag KiwgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwNCj4gLSAgICAgICAgYm9vbCwg dHJlZSAqLCB0cmVlICopOw0KPiArZXh0ZXJuIHZvaWQgY3JlYXRlX2l2ICh0 cmVlLCB0cmVlX2NvZGUsIHRyZWUsIHRyZWUsIGNsYXNzIGxvb3AgKiwNCj4g KyAgICAgICAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgYm9vbCwgdHJlZSAq LCB0cmVlICopOw0KPiBleHRlcm4gdm9pZCByZXdyaXRlX2ludG9fbG9vcF9j bG9zZWRfc3NhIChiaXRtYXAsIHVuc2lnbmVkKTsNCj4gZXh0ZXJuIHZvaWQg dmVyaWZ5X2xvb3BfY2xvc2VkX3NzYSAoYm9vbCwgY2xhc3MgbG9vcCAqID0g TlVMTCk7DQo+IGRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0LWRhdGEtcmVm cy5jYyBiL2djYy90cmVlLXZlY3QtZGF0YS1yZWZzLmNjDQo+IGluZGV4IDY3 MjFhYjZlZmM0Li41YzkxMDNiMTZlNSAxMDA2NDQNCj4gLS0tIGEvZ2NjL3Ry ZWUtdmVjdC1kYXRhLXJlZnMuY2MNCj4gKysrIGIvZ2NjL3RyZWUtdmVjdC1k YXRhLXJlZnMuY2MNCj4gQEAgLTUwOTksNyArNTA5OSw3IEBAIHZlY3RfY3Jl YXRlX2RhdGFfcmVmX3B0ciAodmVjX2luZm8gKnZpbmZvLCBzdG10X3ZlY19p bmZvIHN0bXRfaW5mbywNCj4gICAgICAgIHN0YW5kYXJkX2l2X2luY3JlbWVu dF9wb3NpdGlvbiAobG9vcCwgJmluY3JfZ3NpLCAmaW5zZXJ0X2FmdGVyKTsN Cj4gLSAgICAgIGNyZWF0ZV9pdiAoYWdncl9wdHJfaW5pdCwNCj4gKyAgICAg IGNyZWF0ZV9pdiAoYWdncl9wdHJfaW5pdCwgUExVU19FWFBSLA0KPiBmb2xk X2NvbnZlcnQgKGFnZ3JfcHRyX3R5cGUsIGl2X3N0ZXApLA0KPiBhZ2dyX3B0 ciwgbG9vcCwgJmluY3JfZ3NpLCBpbnNlcnRfYWZ0ZXIsDQo+ICZpbmR4X2Jl Zm9yZV9pbmNyLCAmaW5keF9hZnRlcl9pbmNyKTsNCj4gQEAgLTUxMjksOSAr NTEyOSw5IEBAIHZlY3RfY3JlYXRlX2RhdGFfcmVmX3B0ciAodmVjX2luZm8g KnZpbmZvLCBzdG10X3ZlY19pbmZvIHN0bXRfaW5mbywNCj4gICAgICB7DQo+ ICAgICAgICBzdGFuZGFyZF9pdl9pbmNyZW1lbnRfcG9zaXRpb24gKGNvbnRh aW5pbmdfbG9vcCwgJmluY3JfZ3NpLA0KPiAgICAgICAmaW5zZXJ0X2FmdGVy KTsNCj4gLSAgICAgIGNyZWF0ZV9pdiAoYXB0ciwgZm9sZF9jb252ZXJ0IChh Z2dyX3B0cl90eXBlLCBEUl9TVEVQIChkcikpLCBhZ2dyX3B0ciwNCj4gLSBj b250YWluaW5nX2xvb3AsICZpbmNyX2dzaSwgaW5zZXJ0X2FmdGVyLCAmaW5k eF9iZWZvcmVfaW5jciwNCj4gLSAmaW5keF9hZnRlcl9pbmNyKTsNCj4gKyAg ICAgIGNyZWF0ZV9pdiAoYXB0ciwgUExVU19FWFBSLCBmb2xkX2NvbnZlcnQg KGFnZ3JfcHRyX3R5cGUsIERSX1NURVAgKGRyKSksDQo+ICsgYWdncl9wdHIs IGNvbnRhaW5pbmdfbG9vcCwgJmluY3JfZ3NpLCBpbnNlcnRfYWZ0ZXIsDQo+ ICsgJmluZHhfYmVmb3JlX2luY3IsICZpbmR4X2FmdGVyX2luY3IpOw0KPiAg ICAgICAgaW5jciA9IGdzaV9zdG10IChpbmNyX2dzaSk7DQo+ICAgICAgICAv KiBDb3B5IHRoZSBwb2ludHMtdG8gaW5mb3JtYXRpb24gaWYgaXQgZXhpc3Rz LiAqLw0KPiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC1sb29wLW1hbmlw LmNjIGIvZ2NjL3RyZWUtdmVjdC1sb29wLW1hbmlwLmNjDQo+IGluZGV4IDQ0 YmQ1ZjJjODA1Li5kNjNkZWQ1ZDRmMCAxMDA2NDQNCj4gLS0tIGEvZ2NjL3Ry ZWUtdmVjdC1sb29wLW1hbmlwLmNjDQo+ICsrKyBiL2djYy90cmVlLXZlY3Qt bG9vcC1tYW5pcC5jYw0KPiBAQCAtMzg1LDYgKzM4NSw0OCBAQCB2ZWN0X21h eWJlX3Blcm11dGVfbG9vcF9tYXNrcyAoZ2ltcGxlX3NlcSAqc2VxLCByZ3Jv dXBfY29udHJvbHMgKmRlc3RfcmdtLA0KPiAgICByZXR1cm4gZmFsc2U7DQo+ IH0NCj4gKy8qIFRyeSB0byB1c2UgcGVybXV0ZXMgdG8gZGVmaW5lIHRoZSBs ZW5zIGluIERFU1RfUkdNIHVzaW5nIHRoZSBsZW5zDQo+ICsgICBpbiBTUkNf UkdNLCBnaXZlbiB0aGF0IHRoZSBmb3JtZXIgaGFzIHR3aWNlIGFzIG1hbnkg bGVucyBhcyB0aGUNCj4gKyAgIGxhdHRlci4gIFJldHVybiB0cnVlIG9uIHN1 Y2Nlc3MsIGFkZGluZyBhbnkgbmV3IHN0YXRlbWVudHMgdG8gU0VRLiAgKi8N Cj4gKw0KPiArc3RhdGljIGJvb2wNCj4gK3ZlY3RfbWF5YmVfcGVybXV0ZV9s b29wX2xlbnMgKHRyZWUgaXZfdHlwZSwgZ2ltcGxlX3NlcSAqc2VxLA0KPiAr ICAgICAgIHJncm91cF9jb250cm9scyAqZGVzdF9yZ20sDQo+ICsgICAgICAg cmdyb3VwX2NvbnRyb2xzICpzcmNfcmdtKQ0KPiArew0KPiArICB0cmVlIGN0 cmxfdHlwZSA9IGRlc3RfcmdtLT50eXBlOw0KPiArICBwb2x5X3VpbnQ2NCBu aXRlbXNfcGVyX2N0cmwNCj4gKyAgICA9IFRZUEVfVkVDVE9SX1NVQlBBUlRT IChjdHJsX3R5cGUpICogZGVzdF9yZ20tPmZhY3RvcjsNCj4gKyAgaWYgKGRl c3RfcmdtLT5tYXhfbnNjYWxhcnNfcGVyX2l0ZXIgPD0gc3JjX3JnbS0+bWF4 X25zY2FsYXJzX3Blcl9pdGVyKQ0KPiArICAgIHsNCj4gKyAgICAgIGZvciAo dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZGVzdF9yZ20tPmNvbnRyb2xzLmxl bmd0aCAoKTsgKytpKQ0KPiArIHsNCj4gKyAgIHRyZWUgc3JjID0gc3JjX3Jn bS0+Y29udHJvbHNbaSAvIGRlc3RfcmdtLT5jb250cm9scy5sZW5ndGggKCld Ow0KPiArICAgdHJlZSBkZXN0ID0gZGVzdF9yZ20tPmNvbnRyb2xzW2ldOw0K PiArICAgZ2Fzc2lnbiAqc3RtdDsNCj4gKyAgIGlmIChpID09IDApDQo+ICsg ICAgIHsNCj4gKyAgICAgICAvKiBNSU4gKFgsIFZGKkkvTikgY2FwcGVkIHRv IHRoZSByYW5nZSBbMCwgVkYvTl0uICAqLw0KPiArICAgICAgIHRyZWUgZmFj dG9yID0gYnVpbGRfaW50X2NzdCAoaXZfdHlwZSwgbml0ZW1zX3Blcl9jdHJs KTsNCj4gKyAgICAgICBzdG10ID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAoZGVz dCwgTUlOX0VYUFIsIHNyYywgZmFjdG9yKTsNCj4gKyAgICAgICBnaW1wbGVf c2VxX2FkZF9zdG10IChzZXEsIHN0bXQpOw0KPiArICAgICB9DQo+ICsgICBl bHNlDQo+ICsgICAgIHsNCj4gKyAgICAgICAvKiAoWCAtIE1JTiAoWCwgVkYq SS9OKSkgY2FwcGVkIHRvIHRoZSByYW5nZSBbMCwgVkYvTl0uICAqLw0KPiAr ICAgICAgIHRyZWUgZmFjdG9yID0gYnVpbGRfaW50X2NzdCAoaXZfdHlwZSwg bml0ZW1zX3Blcl9jdHJsICogaSk7DQo+ICsgICAgICAgdHJlZSB0ZW1wID0g bWFrZV9zc2FfbmFtZSAoaXZfdHlwZSk7DQo+ICsgICAgICAgc3RtdCA9IGdp bXBsZV9idWlsZF9hc3NpZ24gKHRlbXAsIE1JTl9FWFBSLCBzcmMsIGZhY3Rv cik7DQo+ICsgICAgICAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoc2VxLCBzdG10 KTsNCj4gKyAgICAgICBzdG10ID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAoZGVz dCwgTUlOVVNfRVhQUiwgc3JjLCB0ZW1wKTsNCj4gKyAgICAgICBnaW1wbGVf c2VxX2FkZF9zdG10IChzZXEsIHN0bXQpOw0KPiArICAgICB9DQo+ICsgfQ0K PiArICAgICAgcmV0dXJuIHRydWU7DQo+ICsgICAgfQ0KPiArICByZXR1cm4g ZmFsc2U7DQo+ICt9DQo+ICsNCj4gLyogSGVscGVyIGZvciB2ZWN0X3NldF9s b29wX2NvbmRpdGlvbl9wYXJ0aWFsX3ZlY3RvcnMuICBHZW5lcmF0ZSBkZWZp bml0aW9ucw0KPiAgICAgZm9yIGFsbCB0aGUgcmdyb3VwIGNvbnRyb2xzIGlu IFJHQyBhbmQgcmV0dXJuIGEgY29udHJvbCB0aGF0IGlzIG5vbnplcm8NCj4g ICAgIHdoZW4gdGhlIGxvb3AgbmVlZHMgdG8gaXRlcmF0ZS4gIEFkZCBhbnkg bmV3IHByZWhlYWRlciBzdGF0ZW1lbnRzIHRvDQo+IEBAIC00NjgsOCArNTEw LDkgQEAgdmVjdF9zZXRfbG9vcF9jb250cm9sc19kaXJlY3RseSAoY2xhc3Mg bG9vcCAqbG9vcCwgbG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiAgICBn aW1wbGVfc3RtdF9pdGVyYXRvciBpbmNyX2dzaTsNCj4gICAgYm9vbCBpbnNl cnRfYWZ0ZXI7DQo+ICAgIHN0YW5kYXJkX2l2X2luY3JlbWVudF9wb3NpdGlv biAobG9vcCwgJmluY3JfZ3NpLCAmaW5zZXJ0X2FmdGVyKTsNCj4gLSAgY3Jl YXRlX2l2IChidWlsZF9pbnRfY3N0IChpdl90eXBlLCAwKSwgbml0ZW1zX3N0 ZXAsIE5VTExfVFJFRSwgbG9vcCwNCj4gLSAgICAgICZpbmNyX2dzaSwgaW5z ZXJ0X2FmdGVyLCAmaW5kZXhfYmVmb3JlX2luY3IsICZpbmRleF9hZnRlcl9p bmNyKTsNCj4gKyAgY3JlYXRlX2l2IChidWlsZF9pbnRfY3N0IChpdl90eXBl LCAwKSwgUExVU19FWFBSLCBuaXRlbXNfc3RlcCwgTlVMTF9UUkVFLA0KPiAr ICAgICAgbG9vcCwgJmluY3JfZ3NpLCBpbnNlcnRfYWZ0ZXIsICZpbmRleF9i ZWZvcmVfaW5jciwNCj4gKyAgICAgICZpbmRleF9hZnRlcl9pbmNyKTsNCj4g ICAgdHJlZSB6ZXJvX2luZGV4ID0gYnVpbGRfaW50X2NzdCAoY29tcGFyZV90 eXBlLCAwKTsNCj4gICAgdHJlZSB0ZXN0X2luZGV4LCB0ZXN0X2xpbWl0LCBm aXJzdF9saW1pdDsNCj4gQEAgLTY4Miw2ICs3MjUsMzAwIEBAIHZlY3Rfc2V0 X2xvb3BfY29udHJvbHNfZGlyZWN0bHkgKGNsYXNzIGxvb3AgKmxvb3AsIGxv b3BfdmVjX2luZm8gbG9vcF92aW5mbywNCj4gICAgcmV0dXJuIG5leHRfY3Ry bDsNCj4gfQ0KPiArLyogSGVscGVyIGZvciB2ZWN0X3NldF9sb29wX2NvbmRp dGlvbl9wYXJ0aWFsX3ZlY3RvcnMuICBHZW5lcmF0ZSBkZWZpbml0aW9ucw0K PiArICAgZm9yIGFsbCB0aGUgcmdyb3VwIGNvbnRyb2xzIGluIFJHQyBhbmQg cmV0dXJuIGEgY29udHJvbCB0aGF0IGlzIG5vbnplcm8NCj4gKyAgIHdoZW4g dGhlIGxvb3AgbmVlZHMgdG8gaXRlcmF0ZS4gIEFkZCBhbnkgbmV3IHByZWhl YWRlciBzdGF0ZW1lbnRzIHRvDQo+ICsgICBQUkVIRUFERVJfU0VRLiAgVXNl IExPT1BfQ09ORF9HU0kgdG8gaW5zZXJ0IGNvZGUgYmVmb3JlIHRoZSBleGl0 IGdjb25kLg0KPiArDQo+ICsgICBSR0MgYmVsb25ncyB0byBsb29wIExPT1Au ICBUaGUgbG9vcCBvcmlnaW5hbGx5IGl0ZXJhdGVkIE5JVEVSUw0KPiArICAg dGltZXMgYW5kIGhhcyBiZWVuIHZlY3Rvcml6ZWQgYWNjb3JkaW5nIHRvIExP T1BfVklORk8uDQo+ICsNCj4gKyAgIFVubGlrZSB2ZWN0X3NldF9sb29wX2Nv bnRyb2xzX2RpcmVjdGx5IHdoaWNoIGlzIGl0ZXJhdGluZyBmcm9tIDAtYmFz ZWQgSVYNCj4gKyAgIHRvIFRFU1RfTElNSVQgLSBiaWFzLg0KPiArDQo+ICsg ICBJbiB2ZWN0X3NldF9sb29wX2NvbnRyb2xzX2J5X3NlbGVjdF92bCwgd2Ug YXJlIGl0ZXJhdGluZyBmcm9tIHN0YXJ0IGF0DQo+ICsgICBJViA9IFRFU1Rf TElNSVQgLSBiaWFzIGFuZCBrZWVwIHN1YnRyYWN0IElWIGJ5IHRoZSBsZW5n dGggY2FsY3VsYXRlZCBieQ0KPiArICAgSUZOX1NFTEVDVF9WTCBwYXR0ZXJu Lg0KPiArDQo+ICsgICAxLiBTaW5nbGUgcmdyb3VwLCB0aGUgR2ltcGxlIElS IHNob3VsZCBiZToNCj4gKw0KPiArICMgdmVjdHBfQi42XzggPSBQSEkgPHZl Y3RwX0IuNl8xMyg2KSwgJkIoNSk+DQo+ICsgIyB2ZWN0cF9CLjhfMTYgPSBQ SEkgPHZlY3RwX0IuOF8xNyg2KSwgJkIoNSk+DQo+ICsgIyB2ZWN0cF9BLjEx XzE5ID0gUEhJIDx2ZWN0cF9BLjExXzIwKDYpLCAmQSg1KT4NCj4gKyAjIHZl Y3RwX0EuMTNfMjIgPSBQSEkgPHZlY3RwX0EuMTNfMjMoNiksICZBKDUpPg0K PiArICMgaXZ0bXBfMjYgPSBQSEkgPGl2dG1wXzI3KDYpLCBfMjUoNSk+DQo+ ICsgXzI4ID0gLlNFTEVDVF9WTCAoaXZ0bXBfMjYsIFBPTFlfSU5UX0NTVCBb NCwgNF0pOw0KPiArIGl2dG1wXzE1ID0gXzI4ICogNDsNCj4gKyB2ZWN0X18x LjEwXzE4ID0gLkxFTl9MT0FEICh2ZWN0cF9CLjhfMTYsIDEyOEIsIF8yOCwg MCk7DQo+ICsgXzEgPSBCW2lfMTBdOw0KPiArIC5MRU5fU1RPUkUgKHZlY3Rw X0EuMTNfMjIsIDEyOEIsIF8yOCwgdmVjdF9fMS4xMF8xOCwgMCk7DQo+ICsg aV83ID0gaV8xMCArIDE7DQo+ICsgdmVjdHBfQi44XzE3ID0gdmVjdHBfQi44 XzE2ICsgaXZ0bXBfMTU7DQo+ICsgdmVjdHBfQS4xM18yMyA9IHZlY3RwX0Eu MTNfMjIgKyBpdnRtcF8xNTsNCj4gKyBpdnRtcF8yNyA9IGl2dG1wXzI2IC0g XzI4Ow0KPiArIGlmIChpdnRtcF8yNyAhPSAwKQ0KPiArICAgZ290byA8YmIg Nj47IFs4My4zMyVdDQo+ICsgZWxzZQ0KPiArICAgZ290byA8YmIgNz47IFsx Ni42NyVdDQo+ICsNCj4gKyAgIE5vdGU6IFdlIHVzZSB0aGUgb3V0Y29tZSBv ZiAuU0VMRUNUX1ZMIHRvIGFkanVzdCBib3RoIGxvb3AgY29udHJvbCBJViBh bmQNCj4gKyAgIGRhdGEgcmVmZXJlbmNlIHBvaW50ZXIgSVYuDQo+ICsNCj4g KyAgIDEpLiBUaGUgcmVzdWx0IG9mIC5TRUxFQ1RfVkw6DQo+ICsgICAgICAg XzI4ID0gLlNFTEVDVF9WTCAoaXZ0bXBfMjYsIFBPTFlfSU5UX0NTVCBbNCwg NF0pOw0KPiArICAgICAgIFRoZSBfMjggaXMgbm90IG5lY2Vzc2FyeSB0byBi ZSBWRiBpbiBhbnkgaXRlcmF0aW9uLCBpbnN0ZWFkLCB3ZSBhbGxvdw0KPiAr ICAgICAgIF8yOCB0byBiZSBhbnkgdmFsdWUgYXMgbG9uZyBhcyBfMjggPD0g VkYuIFN1Y2ggZmxleGlibGUgU0VMRUNUX1ZMDQo+ICsgICAgICAgcGF0dGVy biBhbGxvd3MgdGFyZ2V0IGhhdmUgdmFyaW91cyBmbGV4aWJsZSBvcHRpbWl6 YXRpb25zIGluIHZlY3Rvcg0KPiArICAgICAgIGxvb3AgaXRlcmF0aW9ucy4g VGFyZ2V0IGxpa2UgUklTQy1WIGhhcyBzcGVjaWFsIGFwcGxpY2F0aW9uIHZl Y3Rvcg0KPiArICAgICAgIGxlbmd0aCBjYWxjdWxhdGlvbiBpbnN0cnVjdGlv biB3aGljaCB3aWxsIGRpc3RyaWJ1dGUgZXZlbiB3b3JrbG9hZA0KPiArICAg ICAgIGluIHRoZSBsYXN0IDIgaXRlcmF0aW9ucy4NCj4gKw0KPiArICAgICAg IE90aGVyIGV4YW1wbGUgaXMgdGhhdCB3ZSBjYW4gYWxsb3cgZXZlbiBnZW5l cmF0ZSBfMjggPD0gVkYgLyAyIHNvDQo+ICsgICAgICAgdGhhdCBzb21lIG1h Y2hpbmUgY2FuIHJ1biB2ZWN0b3IgY29kZXMgaW4gbG93IHBvd2VyIG1vZGUu DQo+ICsNCj4gKyAgIDIpLiBMb29wIGNvbnRyb2wgSVY6DQo+ICsgICAgICAg aXZ0bXBfMjcgPSBpdnRtcF8yNiAtIF8yODsNCj4gKyAgICAgICBpZiAoaXZ0 bXBfMjcgIT0gMCkNCj4gKyBnb3RvIDxiYiA2PjsgWzgzLjMzJV0NCj4gKyAg ICAgICBlbHNlDQo+ICsgZ290byA8YmIgNz47IFsxNi42NyVdDQo+ICsNCj4g KyAgICAgICBUaGlzIGlzIHRoZSBzYXR1cmF0aW5nLXN1YnRyYWN0aW9uIHRv d2FyZHMgemVybywgdGhlIG91dGNvbWUgb2YNCj4gKyAgICAgICAuU0VMRUNU X1ZMIHdpbCBtYWtlIGl2dG1wXzI3IG5ldmVyIHVuZGVyZmxvdyB6ZXJvLg0K PiArDQo+ICsgICAzKS4gRGF0YSByZWZlcmVuY2UgcG9pbnRlciBJVjoNCj4g KyAgICAgICBpdnRtcF8xNSA9IF8yOCAqIDQ7DQo+ICsgICAgICAgdmVjdHBf Qi44XzE3ID0gdmVjdHBfQi44XzE2ICsgaXZ0bXBfMTU7DQo+ICsgICAgICAg dmVjdHBfQS4xM18yMyA9IHZlY3RwX0EuMTNfMjIgKyBpdnRtcF8xNTsNCj4g Kw0KPiArICAgICAgIFRoZSBwb2ludGVyIElWIGlzIGFkanVzdGVkIGFjY3Vy YXRlbHkgYWNjb3JkaW5nIHRvIHRoZSAuU0VMRUNUX1ZMLg0KPiArDQo+ICsg ICAyLiBNdWx0aXBsZSByZ3JvdXAsIHRoZSBHaW1wbGUgSVIgc2hvdWxkIGJl Og0KPiArDQo+ICsgIyBpXzIzID0gUEhJIDxpXzIwKDYpLCAwKDExKT4NCj4g KyAjIHZlY3RwX2YuOF81MSA9IFBISSA8dmVjdHBfZi44XzUyKDYpLCBmXzE1 KEQpKDExKT4NCj4gKyAjIHZlY3RwX2QuMTBfNTkgPSBQSEkgPHZlY3RwX2Qu MTBfNjAoNiksIGRfMTgoRCkoMTEpPg0KPiArICMgaXZ0bXBfNzAgPSBQSEkg PGl2dG1wXzcxKDYpLCBfNjkoMTEpPg0KPiArICMgaXZ0bXBfNzMgPSBQSEkg PGl2dG1wXzc0KDYpLCBfNjcoMTEpPg0KPiArIF83MiA9IE1JTl9FWFBSIDxp dnRtcF83MCwgMTY+Ow0KPiArIF83NSA9IE1JTl9FWFBSIDxpdnRtcF83Mywg MTY+Ow0KPiArIF8xID0gaV8yMyAqIDI7DQo+ICsgXzIgPSAobG9uZyB1bnNp Z25lZCBpbnQpIF8xOw0KPiArIF8zID0gXzIgKiAyOw0KPiArIF80ID0gZl8x NShEKSArIF8zOw0KPiArIF81ID0gXzIgKyAxOw0KPiArIF82ID0gXzUgKiAy Ow0KPiArIF83ID0gZl8xNShEKSArIF82Ow0KPiArIC5MRU5fU1RPUkUgKHZl Y3RwX2YuOF81MSwgMTI4QiwgXzc1LCB7IDEsIDIsIDEsIDIsIDEsIDIsIDEs IDIgfSwgMCk7DQo+ICsgdmVjdHBfZi44XzU2ID0gdmVjdHBfZi44XzUxICsg MTY7DQo+ICsgLkxFTl9TVE9SRSAodmVjdHBfZi44XzU2LCAxMjhCLCBfNzIs IHsgMSwgMiwgMSwgMiwgMSwgMiwgMSwgMiB9LCAwKTsNCj4gKyBfOCA9IChs b25nIHVuc2lnbmVkIGludCkgaV8yMzsNCj4gKyBfOSA9IF84ICogNDsNCj4g KyBfMTAgPSBkXzE4KEQpICsgXzk7DQo+ICsgXzYxID0gXzc1IC8gMjsNCj4g KyAuTEVOX1NUT1JFICh2ZWN0cF9kLjEwXzU5LCAxMjhCLCBfNjEsIHsgMywg MywgMywgMyB9LCAwKTsNCj4gKyB2ZWN0cF9kLjEwXzYzID0gdmVjdHBfZC4x MF81OSArIDE2Ow0KPiArIF82NCA9IF83MiAvIDI7DQo+ICsgLkxFTl9TVE9S RSAodmVjdHBfZC4xMF82MywgMTI4QiwgXzY0LCB7IDMsIDMsIDMsIDMgfSwg MCk7DQo+ICsgaV8yMCA9IGlfMjMgKyAxOw0KPiArIHZlY3RwX2YuOF81MiA9 IHZlY3RwX2YuOF81NiArIDE2Ow0KPiArIHZlY3RwX2QuMTBfNjAgPSB2ZWN0 cF9kLjEwXzYzICsgMTY7DQo+ICsgaXZ0bXBfNzQgPSBpdnRtcF83MyAtIF83 NTsNCj4gKyBpdnRtcF83MSA9IGl2dG1wXzcwIC0gXzcyOw0KPiArIGlmIChp dnRtcF83NCAhPSAwKQ0KPiArICAgZ290byA8YmIgNj47IFs4My4zMyVdDQo+ ICsgZWxzZQ0KPiArICAgZ290byA8YmIgMTM+OyBbMTYuNjclXQ0KPiArDQo+ ICsgICBOb3RlOiBXZSBETyBOT1QgdXNlIC5TRUxFQ1RfVkwgaW4gU0xQIGF1 dG8tdmVjdG9yaXphdGlvbiBmb3IgbXVsdGlwbGUNCj4gKyAgIHJncm91cHMu IEluc3RlYWQsIHdlIHVzZSBNSU5fRVhQUiB0byBndWFyYW50ZWUgd2UgYWx3 YXlzIHVzZSBWRiBhcyB0aGUNCj4gKyAgIGl0ZXJhdGlvbiBhbW91bnQgZm9y IG11dGlwbGUgcmdyb3Vwcy4NCj4gKw0KPiArICAgVGhlIGFuYWx5c2lzIG9m IHRoZSBmbG93IG9mIG11bHRpcGxlIHJncm91cHM6DQo+ICsgXzcyID0gTUlO X0VYUFIgPGl2dG1wXzcwLCAxNj47DQo+ICsgXzc1ID0gTUlOX0VYUFIgPGl2 dG1wXzczLCAxNj47DQo+ICsgLi4uDQo+ICsgLkxFTl9TVE9SRSAodmVjdHBf Zi44XzUxLCAxMjhCLCBfNzUsIHsgMSwgMiwgMSwgMiwgMSwgMiwgMSwgMiB9 LCAwKTsNCj4gKyB2ZWN0cF9mLjhfNTYgPSB2ZWN0cF9mLjhfNTEgKyAxNjsN Cj4gKyAuTEVOX1NUT1JFICh2ZWN0cF9mLjhfNTYsIDEyOEIsIF83MiwgeyAx LCAyLCAxLCAyLCAxLCAyLCAxLCAyIH0sIDApOw0KPiArIC4uLg0KPiArIF82 MSA9IF83NSAvIDI7DQo+ICsgLkxFTl9TVE9SRSAodmVjdHBfZC4xMF81OSwg MTI4QiwgXzYxLCB7IDMsIDMsIDMsIDMgfSwgMCk7DQo+ICsgdmVjdHBfZC4x MF82MyA9IHZlY3RwX2QuMTBfNTkgKyAxNjsNCj4gKyBfNjQgPSBfNzIgLyAy Ow0KPiArIC5MRU5fU1RPUkUgKHZlY3RwX2QuMTBfNjMsIDEyOEIsIF82NCwg eyAzLCAzLCAzLCAzIH0sIDApOw0KPiArDQo+ICsgIFdlIHVzZSBfNzIgPSBN SU5fRVhQUiA8aXZ0bXBfNzAsIDE2PjsgdG8gZ2VuZXJhdGUgdGhlIG51bWJl ciBvZiB0aGUgZWxlbWVudHMNCj4gKyAgdG8gYmUgcHJvY2Vzc2VkIGluIGVh Y2ggaXRlcmF0aW9uLg0KPiArDQo+ICsgIFRoZSByZWxhdGVkIFNUT1JFczoN Cj4gKyAgICBfNzIgPSBNSU5fRVhQUiA8aXZ0bXBfNzAsIDE2PjsNCj4gKyAg ICAuTEVOX1NUT1JFICh2ZWN0cF9mLjhfNTYsIDEyOEIsIF83MiwgeyAxLCAy LCAxLCAyLCAxLCAyLCAxLCAyIH0sIDApOw0KPiArICAgIF82NCA9IF83MiAv IDI7DQo+ICsgICAgLkxFTl9TVE9SRSAodmVjdHBfZC4xMF82MywgMTI4Qiwg XzY0LCB7IDMsIDMsIDMsIDMgfSwgMCk7DQo+ICsgIFNpbmNlIHRoZXNlIDIg U1RPUkVzIHN0b3JlIDIgdmVjdG9ycyB0aGF0IHRoZSBzZWNvbmQgdmVjdG9y IGlzIGhhbGYgZWxlbWVudHMNCj4gKyAgb2YgdGhlIGZpcnN0IHZlY3Rvci4g U28gdGhlIGxlbmd0aCBvZiBzZWNvbmQgU1RPUkUgd2lsbCBiZSBfNjQgPSBf NzIgLyAyOw0KPiArICBJdCdzIHNpbWlsYXIgdG8gdGhlIFZJRVdfQ09OVkVS VCBvZiBoYW5kbGluZyBtYXNrcyBpbiBTTFAuDQo+ICsNCj4gKyAgMy4gTXVs dGlwbGUgcmdyb3VwcyBmb3Igbm9uLVNMUCBhdXRvLXZlY3Rvcml6YXRpb24u DQo+ICsNCj4gKyAgICAgIyBpdnRtcF8yNiA9IFBISSA8aXZ0bXBfMjcoNCks IF8yNSgzKT4NCj4gKyAgICAgIyBpdnRtcC4zNV8xMCA9IFBISSA8aXZ0bXAu MzVfMTEoNCksIGl2dG1wLjM1XzEoMyk+DQo+ICsgICAgICMgaXZ0bXAuMzZf MiA9IFBISSA8aXZ0bXAuMzZfOCg0KSwgaXZ0bXAuMzZfMjMoMyk+DQo+ICsg ICAgIF8yOCA9IE1JTl9FWFBSIDxpdnRtcF8yNiwgUE9MWV9JTlRfQ1NUIFs4 LCA4XT47DQo+ICsgICAgIGxvb3BfbGVuXzE1ID0gTUlOX0VYUFIgPF8yOCwg UE9MWV9JTlRfQ1NUIFs0LCA0XT47DQo+ICsgICAgIGxvb3BfbGVuXzE2ID0g XzI4IC0gbG9vcF9sZW5fMTU7DQo+ICsgICAgIF8yOSA9ICh2b2lkICopIGl2 dG1wLjM1XzEwOw0KPiArICAgICBfNyA9ICZNRU0gPHZlY3RvcihbNCw0XSkg aW50PiBbKGludCAqKV8yOV07DQo+ICsgICAgIHZlY3RfXzEuMjVfMTcgPSAu TEVOX0xPQUQgKF83LCAxMjhCLCBsb29wX2xlbl8xNSwgMCk7DQo+ICsgICAg IF8zMyA9IF8yOSArIFBPTFlfSU5UX0NTVCBbMTYsIDE2XTsNCj4gKyAgICAg XzM0ID0gJk1FTSA8dmVjdG9yKFs0LDRdKSBpbnQ+IFsoaW50ICopXzMzXTsN Cj4gKyAgICAgdmVjdF9fMS4yNl8xOSA9IC5MRU5fTE9BRCAoXzM0LCAxMjhC LCBsb29wX2xlbl8xNiwgMCk7DQo+ICsgICAgIHZlY3RfXzIuMjdfMjAgPSBW RUNfUEFDS19UUlVOQ19FWFBSIDx2ZWN0X18xLjI1XzE3LCB2ZWN0X18xLjI2 XzE5PjsNCj4gKyAgICAgXzMwID0gKHZvaWQgKikgaXZ0bXAuMzZfMjsNCj4g KyAgICAgXzMxID0gJk1FTSA8dmVjdG9yKFs4LDhdKSBzaG9ydCBpbnQ+IFso c2hvcnQgaW50ICopXzMwXTsNCj4gKyAgICAgLkxFTl9TVE9SRSAoXzMxLCAx MjhCLCBfMjgsIHZlY3RfXzIuMjdfMjAsIDApOw0KPiArICAgICBpdnRtcF8y NyA9IGl2dG1wXzI2IC0gXzI4Ow0KPiArICAgICBpdnRtcC4zNV8xMSA9IGl2 dG1wLjM1XzEwICsgUE9MWV9JTlRfQ1NUIFszMiwgMzJdOw0KPiArICAgICBp dnRtcC4zNl84ID0gaXZ0bXAuMzZfMiArIFBPTFlfSU5UX0NTVCBbMTYsIDE2 XTsNCj4gKyAgICAgaWYgKGl2dG1wXzI3ICE9IDApDQo+ICsgICAgICAgZ290 byA8YmIgND47IFs4My4zMyVdDQo+ICsgICAgIGVsc2UNCj4gKyAgICAgICBn b3RvIDxiYiA1PjsgWzE2LjY3JV0NCj4gKw0KPiArICAgICBUaGUgdG90YWwg bGVuZ3RoOiBfMjggPSBNSU5fRVhQUiA8aXZ0bXBfMjYsIFBPTFlfSU5UX0NT VCBbOCwgOF0+Ow0KPiArDQo+ICsgICAgIFRoZSBsZW5ndGggb2YgZmlyc3Qg aGFsZiB2ZWN0b3I6DQo+ICsgICAgICAgbG9vcF9sZW5fMTUgPSBNSU5fRVhQ UiA8XzI4LCBQT0xZX0lOVF9DU1QgWzQsIDRdPjsNCj4gKw0KPiArICAgICBU aGUgbGVuZ3RoIG9mIHNlY29uZCBoYWxmIHZlY3RvcjoNCj4gKyAgICAgICBs b29wX2xlbl8xNSA9IE1JTl9FWFBSIDxfMjgsIFBPTFlfSU5UX0NTVCBbNCwg NF0+Ow0KPiArICAgICAgIGxvb3BfbGVuXzE2ID0gXzI4IC0gbG9vcF9sZW5f MTU7DQo+ICsNCj4gKyAgICAgMSkuIF8yOCBhbHdheXMgPD0gUE9MWV9JTlRf Q1NUIFs4LCA4XS4NCj4gKyAgICAgMikuIFdoZW4gXzI4IDw9IFBPTFlfSU5U X0NTVCBbNCwgNF0sIHNlY29uZCBoYWxmIHZlY3RvciBpcyBub3QgcHJvY2Vz c2VkLg0KPiArICAgICAzKS4gV2hlbiBfMjggPiBQT0xZX0lOVF9DU1QgWzQs IDRdLCBzZWNvbmQgaGFsZiB2ZWN0b3IgaXMgcHJvY2Vzc2VkLg0KPiArKi8N Cj4gKw0KPiArc3RhdGljIHRyZWUNCj4gK3ZlY3Rfc2V0X2xvb3BfY29udHJv bHNfYnlfc2VsZWN0X3ZsIChjbGFzcyBsb29wICpsb29wLCBsb29wX3ZlY19p bmZvIGxvb3BfdmluZm8sDQo+ICsgICAgICBnaW1wbGVfc2VxICpwcmVoZWFk ZXJfc2VxLA0KPiArICAgICAgZ2ltcGxlX3NlcSAqaGVhZGVyX3NlcSwNCj4g KyAgICAgIHJncm91cF9jb250cm9scyAqcmdjLCB0cmVlIG5pdGVycywNCj4g KyAgICAgIHVuc2lnbmVkIGludCBjb250cm9sc19sZW5ndGgpDQo+ICt7DQo+ ICsgIHRyZWUgY29tcGFyZV90eXBlID0gTE9PUF9WSU5GT19SR1JPVVBfQ09N UEFSRV9UWVBFIChsb29wX3ZpbmZvKTsNCj4gKyAgdHJlZSBpdl90eXBlID0g TE9PUF9WSU5GT19SR1JPVVBfSVZfVFlQRSAobG9vcF92aW5mbyk7DQo+ICsg IC8qIFdlIGFyZSBub3QgYWxsb3dpbmcgbWFza2VkIGFwcHJvYWNoIGluIFNF TEVDVF9WTC4gICovDQo+ICsgIGdjY19hc3NlcnQgKCFMT09QX1ZJTkZPX0ZV TExZX01BU0tFRF9QIChsb29wX3ZpbmZvKSk7DQo+ICsNCj4gKyAgdHJlZSBj dHJsX3R5cGUgPSByZ2MtPnR5cGU7DQo+ICsgIHVuc2lnbmVkIGludCBuaXRl bXNfcGVyX2l0ZXIgPSByZ2MtPm1heF9uc2NhbGFyc19wZXJfaXRlciAqIHJn Yy0+ZmFjdG9yOw0KPiArICBwb2x5X3VpbnQ2NCBuaXRlbXNfcGVyX2N0cmwg PSBUWVBFX1ZFQ1RPUl9TVUJQQVJUUyAoY3RybF90eXBlKSAqIHJnYy0+ZmFj dG9yOw0KPiArICBwb2x5X3VpbnQ2NCB2ZiA9IExPT1BfVklORk9fVkVDVF9G QUNUT1IgKGxvb3BfdmluZm8pOw0KPiArDQo+ICsgIC8qIENhbGN1bGF0ZSB0 aGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbSB2YWx1ZXMgdGhhdCB0aGUgcmdy b3VwDQo+ICsgICAgIGhhbmRsZXMgaW4gdG90YWwsIHRoZSBudW1iZXIgdGhh dCBpdCBoYW5kbGVzIGZvciBlYWNoIGl0ZXJhdGlvbg0KPiArICAgICBvZiB0 aGUgdmVjdG9yIGxvb3AuICAqLw0KPiArICB0cmVlIG5pdGVtc190b3RhbCA9 IG5pdGVyczsNCj4gKyAgaWYgKG5pdGVtc19wZXJfaXRlciAhPSAxKQ0KPiAr ICAgIHsNCj4gKyAgICAgIC8qIFdlIGNoZWNrZWQgYmVmb3JlIHNldHRpbmcg TE9PUF9WSU5GT19VU0lOR19QQVJUSUFMX1ZFQ1RPUlNfUCB0aGF0DQo+ICsg dGhlc2UgbXVsdGlwbGljYXRpb25zIGRvbid0IG92ZXJmbG93LiAgKi8NCj4g KyAgICAgIHRyZWUgY29tcGFyZV9mYWN0b3IgPSBidWlsZF9pbnRfY3N0IChj b21wYXJlX3R5cGUsIG5pdGVtc19wZXJfaXRlcik7DQo+ICsgICAgICBuaXRl bXNfdG90YWwgPSBnaW1wbGVfYnVpbGQgKHByZWhlYWRlcl9zZXEsIE1VTFRf RVhQUiwgY29tcGFyZV90eXBlLA0KPiArICAgIG5pdGVtc190b3RhbCwgY29t cGFyZV9mYWN0b3IpOw0KPiArICAgIH0NCj4gKw0KPiArICAvKiBDb252ZXJ0 IHRoZSBjb21wYXJpc29uIHZhbHVlIHRvIHRoZSBJViB0eXBlIChlaXRoZXIg YSBuby1vcCBvcg0KPiArICAgICBhIHByb21vdGlvbikuICAqLw0KPiArICBu aXRlbXNfdG90YWwgPSBnaW1wbGVfY29udmVydCAocHJlaGVhZGVyX3NlcSwg aXZfdHlwZSwgbml0ZW1zX3RvdGFsKTsNCj4gKw0KPiArICAvKiBDcmVhdGUg YW4gaW5kdWN0aW9uIHZhcmlhYmxlIHRoYXQgY291bnRzIHRoZSBudW1iZXIg b2YgaXRlbXMNCj4gKyAgICAgcHJvY2Vzc2VkLiAgKi8NCj4gKyAgdHJlZSBp bmRleF9iZWZvcmVfaW5jciwgaW5kZXhfYWZ0ZXJfaW5jcjsNCj4gKyAgZ2lt cGxlX3N0bXRfaXRlcmF0b3IgaW5jcl9nc2k7DQo+ICsgIGJvb2wgaW5zZXJ0 X2FmdGVyOw0KPiArICBzdGFuZGFyZF9pdl9pbmNyZW1lbnRfcG9zaXRpb24g KGxvb3AsICZpbmNyX2dzaSwgJmluc2VydF9hZnRlcik7DQo+ICsNCj4gKyAg LyogVGVzdCB0aGUgZGVjcmVtZW50ZWQgSVYsIHdoaWNoIHdpbGwgbmV2ZXIg dW5kZXJmbG93IDAgc2luY2Ugd2UgaGF2ZQ0KPiArICAgICBJRk5fU0VMRUNU X1ZMIHRvIGd1cmFudGVlIHRoYXQuICAqLw0KPiArICB0cmVlIHRlc3RfbGlt aXQgPSBuaXRlbXNfdG90YWw7DQo+ICsNCj4gKyAgLyogUHJvdmlkZSBhIGRl ZmluaXRpb24gb2YgZWFjaCBjb250cm9sIGluIHRoZSBncm91cC4gICovDQo+ ICsgIHRyZWUgY3RybDsNCj4gKyAgdW5zaWduZWQgaW50IGk7DQo+ICsgIEZP Ul9FQUNIX1ZFQ19FTFRfUkVWRVJTRSAocmdjLT5jb250cm9scywgaSwgY3Ry bCkNCj4gKyAgICB7DQo+ICsgICAgICAvKiBQcmV2aW91cyBjb250cm9scyB3 aWxsIGNvdmVyIEJJQVMgaXRlbXMuICBUaGlzIGNvbnRyb2wgY292ZXJzIHRo ZQ0KPiArIG5leHQgYmF0Y2guICAqLw0KPiArICAgICAgcG9seV91aW50NjQg YmlhcyA9IG5pdGVtc19wZXJfY3RybCAqIGk7DQo+ICsgICAgICB0cmVlIGJp YXNfdHJlZSA9IGJ1aWxkX2ludF9jc3QgKGl2X3R5cGUsIGJpYXMpOw0KPiAr DQo+ICsgICAgICAvKiBSYXRoZXIgdGhhbiBoYXZlIGEgbmV3IElWIHRoYXQg c3RhcnRzIGF0IFRFU1RfTElNSVQgYW5kIGdvZXMgZG93biB0bw0KPiArIEJJ QVMsIHByZWZlciB0byB1c2UgdGhlIHNhbWUgVEVTVF9MSU1JVCAtIEJJQVMg YmFzZWQgSVYgZm9yIGVhY2gNCj4gKyBjb250cm9sIGFuZCBhZGp1c3QgdGhl IGJvdW5kIGRvd24gYnkgQklBUy4gICovDQo+ICsgICAgICB0cmVlIHRoaXNf dGVzdF9saW1pdCA9IHRlc3RfbGltaXQ7DQo+ICsgICAgICBpZiAoaSAhPSAw KQ0KPiArIHsNCj4gKyAgIHRoaXNfdGVzdF9saW1pdCA9IGdpbXBsZV9idWls ZCAocHJlaGVhZGVyX3NlcSwgTUFYX0VYUFIsIGl2X3R5cGUsDQo+ICsgICB0 aGlzX3Rlc3RfbGltaXQsIGJpYXNfdHJlZSk7DQo+ICsgICB0aGlzX3Rlc3Rf bGltaXQgPSBnaW1wbGVfYnVpbGQgKHByZWhlYWRlcl9zZXEsIE1JTlVTX0VY UFIsIGl2X3R5cGUsDQo+ICsgICB0aGlzX3Rlc3RfbGltaXQsIGJpYXNfdHJl ZSk7DQo+ICsgfQ0KPiArDQo+ICsgICAgICAvKiBDcmVhdGUgZGVjcmVtZW50 IElWLiAgKi8NCj4gKyAgICAgIGNyZWF0ZV9pdiAodGhpc190ZXN0X2xpbWl0 LCBNSU5VU19FWFBSLCBjdHJsLCBOVUxMX1RSRUUsIGxvb3AsICZpbmNyX2dz aSwNCj4gKyBpbnNlcnRfYWZ0ZXIsICZpbmRleF9iZWZvcmVfaW5jciwgJmlu ZGV4X2FmdGVyX2luY3IpOw0KPiArDQo+ICsgICAgICBwb2x5X3VpbnQ2NCBm aW5hbF92ZiA9IHZmICogbml0ZW1zX3Blcl9pdGVyOw0KPiArICAgICAgdHJl ZSB2Zl9zdGVwID0gYnVpbGRfaW50X2NzdCAoaXZfdHlwZSwgZmluYWxfdmYp Ow0KPiArICAgICAgdHJlZSByZXNfbGVuOw0KPiArICAgICAgaWYgKG5pdGVt c19wZXJfaXRlciAhPSAxIHx8IGNvbnRyb2xzX2xlbmd0aCAhPSAxKQ0KPiAr IHsNCj4gKyAgIC8qIEZvciBTTFAsIHdlIGNhbid0IGFsbG93IG5vbi1WRiBu dW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgcHJvY2Vzc2VkDQo+ICsgICAgICBp biBub24tZmluYWwgaXRlcmF0aW9uLiBXZSBmb3JjZSB0aGUgbnVtYmVyIG9m IGVsZW1lbnRzIHRvIGJlDQo+ICsgICAgcHJvY2Vzc2VkIGluIGVhY2ggbm9u LWZpbmFsIGl0ZXJhdGlvbiBpcyBWRiBlbGVtZW50cy4gSWYgd2UgYWxsb3cN Cj4gKyAgICBub24tVkYgZWxlbWVudHMgcHJvY2Vzc2luZyBpbiBub24tZmlu YWwgaXRlcmF0aW9uIHdpbGwgbWFrZSBTTFAgdG9vDQo+ICsgICAgY29tcGxp Y2F0ZWQgYW5kIHByb2R1Y2UgaW5mZXJpb3IgY29kZWdlbi4NCj4gKw0KPiAr ICAgICAgICBGb3IgZXhhbXBsZToNCj4gKw0KPiArIElmIG5vbi1maW5hbCBp dGVyYXRpb24gcHJvY2VzcyBWRiBlbGVtZW50cy4NCj4gKw0KPiArICAgLi4u DQo+ICsgICAuTEVOX1NUT1JFICh2ZWN0cF9mLjhfNTEsIDEyOEIsIF83MSwg eyAxLCAyLCAxLCAyIH0sIDApOw0KPiArICAgLkxFTl9TVE9SRSAodmVjdHBf Zi44XzU2LCAxMjhCLCBfNzIsIHsgMSwgMiwgMSwgMiB9LCAwKTsNCj4gKyAg IC4uLg0KPiArDQo+ICsgSWYgbm9uLWZpbmFsIGl0ZXJhdGlvbiBwcm9jZXNz IG5vbi1WRiBlbGVtZW50cy4NCj4gKw0KPiArICAgLi4uDQo+ICsgICAuTEVO X1NUT1JFICh2ZWN0cF9mLjhfNTEsIDEyOEIsIF83MSwgeyAxLCAyLCAxLCAy IH0sIDApOw0KPiArICAgaWYgKF83MSAlIDIgPT0gMCkNCj4gKyAgICAuTEVO X1NUT1JFICh2ZWN0cF9mLjhfNTYsIDEyOEIsIF83MiwgeyAxLCAyLCAxLCAy IH0sIDApOw0KPiArICAgZWxzZQ0KPiArICAgIC5MRU5fU1RPUkUgKHZlY3Rw X2YuOF81NiwgMTI4QiwgXzcyLCB7IDIsIDEsIDIsIDEgfSwgMCk7DQo+ICsg ICAuLi4NCj4gKw0KPiArICAgIFRoaXMgaXMgdGhlIHNpbXBsZSBjYXNlIG9m IDItZWxlbWVudHMgaW50ZXJsZWF2ZWQgdmVjdG9yIFNMUC4gV2UNCj4gKyAg ICBjb25zaWRlciBvdGhlciBpbnRlcmxlYXZlIHZlY3RvciwgdGhlIHNpdHVh dGlvbiB3aWxsIGJlY29tZSBtb3JlDQo+ICsgICAgY29tcGxpY2F0ZWQuICAq Lw0KPiArICAgcmVzX2xlbiA9IGdpbXBsZV9idWlsZCAoaGVhZGVyX3NlcSwg TUlOX0VYUFIsIGl2X3R5cGUsDQo+ICsgICBpbmRleF9iZWZvcmVfaW5jciwg dmZfc3RlcCk7DQo+ICsgfQ0KPiArICAgICAgZWxzZQ0KPiArIHsNCj4gKyAg IHJlc19sZW4gPSBnaW1wbGVfYnVpbGQgKGhlYWRlcl9zZXEsIElGTl9TRUxF Q1RfVkwsIGl2X3R5cGUsDQo+ICsgICBpbmRleF9iZWZvcmVfaW5jciwgdmZf c3RlcCk7DQo+ICsgfQ0KPiArICAgICAgZ2Fzc2lnbiAqYXNzaWduID0gZ2lt cGxlX2J1aWxkX2Fzc2lnbiAoY3RybCwgcmVzX2xlbik7DQo+ICsgICAgICBn aW1wbGVfc2VxX2FkZF9zdG10IChoZWFkZXJfc2VxLCBhc3NpZ24pOw0KPiAr ICAgIH0NCj4gKw0KPiArICByZXR1cm4gaW5kZXhfYWZ0ZXJfaW5jcjsNCj4g K30NCj4gKw0KPiAvKiBTZXQgdXAgdGhlIGl0ZXJhdGlvbiBjb25kaXRpb24g YW5kIHJncm91cCBjb250cm9scyBmb3IgTE9PUCwgZ2l2ZW4NCj4gICAgIHRo YXQgTE9PUF9WSU5GT19VU0lOR19QQVJUSUFMX1ZFQ1RPUlNfUCBpcyB0cnVl IGZvciB0aGUgdmVjdG9yaXplZA0KPiAgICAgbG9vcC4gIExPT1BfVklORk8g ZGVzY3JpYmVzIHRoZSB2ZWN0b3JpemF0aW9uIG9mIExPT1AuICBOSVRFUlMg aXMNCj4gQEAgLTcwMyw2ICsxMDQwLDEwIEBAIHZlY3Rfc2V0X2xvb3BfY29u ZGl0aW9uX3BhcnRpYWxfdmVjdG9ycyAoY2xhc3MgbG9vcCAqbG9vcCwNCj4g ICAgYm9vbCB1c2VfbWFza3NfcCA9IExPT1BfVklORk9fRlVMTFlfTUFTS0VE X1AgKGxvb3BfdmluZm8pOw0KPiAgICB0cmVlIGNvbXBhcmVfdHlwZSA9IExP T1BfVklORk9fUkdST1VQX0NPTVBBUkVfVFlQRSAobG9vcF92aW5mbyk7DQo+ ICsgIHRyZWUgaXZfdHlwZSA9IExPT1BfVklORk9fUkdST1VQX0lWX1RZUEUg KGxvb3BfdmluZm8pOw0KPiArICBib29sIHVzZV92bF9wID0gIXVzZV9tYXNr c19wDQo+ICsgICAmJiBkaXJlY3RfaW50ZXJuYWxfZm5fc3VwcG9ydGVkX3Ag KElGTl9TRUxFQ1RfVkwsIGl2X3R5cGUsDQo+ICsgICAgICBPUFRJTUlaRV9G T1JfU1BFRUQpOw0KPiAgICB1bnNpZ25lZCBpbnQgY29tcGFyZV9wcmVjaXNp b24gPSBUWVBFX1BSRUNJU0lPTiAoY29tcGFyZV90eXBlKTsNCj4gICAgdHJl ZSBvcmlnX25pdGVycyA9IG5pdGVyczsNCj4gQEAgLTc1MiwxNyArMTA5Mywz MiBAQCB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbl9wYXJ0aWFsX3ZlY3RvcnMg KGNsYXNzIGxvb3AgKmxvb3AsDQo+ICAgICAgIGNvbnRpbnVlOw0KPiAgIH0N Cj4gKyBpZiAodXNlX3ZsX3AgJiYgcmdjLT5jb250cm9scy5sZW5ndGggKCkg IT0gMSkNCj4gKyAgIHsNCj4gKyAgICAgcmdyb3VwX2NvbnRyb2xzICpzdWJf cmdjDQo+ICsgICAgICAgPSAmKCpjb250cm9scylbbm1hc2tzIC8gcmdjLT5j b250cm9scy5sZW5ndGggKCkgLSAxXTsNCj4gKyAgICAgaWYgKCFzdWJfcmdj LT5jb250cm9scy5pc19lbXB0eSAoKQ0KPiArICYmIHZlY3RfbWF5YmVfcGVy bXV0ZV9sb29wX2xlbnMgKGl2X3R5cGUsICZoZWFkZXJfc2VxLCByZ2MsDQo+ ICsgc3ViX3JnYykpDQo+ICsgICAgICAgY29udGludWU7DQo+ICsgICB9DQo+ ICsNCj4gLyogU2VlIHdoZXRoZXIgemVyby1iYXNlZCBJViB3b3VsZCBldmVy IGdlbmVyYXRlIGFsbC1mYWxzZSBtYXNrcw0KPiAgICBvciB6ZXJvIGxlbmd0 aCBiZWZvcmUgd3JhcHBpbmcgYXJvdW5kLiAgKi8NCj4gYm9vbCBtaWdodF93 cmFwX3AgPSB2ZWN0X3Jncm91cF9pdl9taWdodF93cmFwX3AgKGxvb3Bfdmlu Zm8sIHJnYyk7DQo+IC8qIFNldCB1cCBhbGwgY29udHJvbHMgZm9yIHRoaXMg Z3JvdXAuICAqLw0KPiAtIHRlc3RfY3RybCA9IHZlY3Rfc2V0X2xvb3BfY29u dHJvbHNfZGlyZWN0bHkgKGxvb3AsIGxvb3BfdmluZm8sDQo+IC0gICAgICAm cHJlaGVhZGVyX3NlcSwNCj4gLSAgICAgICZoZWFkZXJfc2VxLA0KPiAtICAg ICAgbG9vcF9jb25kX2dzaSwgcmdjLA0KPiAtICAgICAgbml0ZXJzLCBuaXRl cnNfc2tpcCwNCj4gLSAgICAgIG1pZ2h0X3dyYXBfcCk7DQo+ICsgaWYgKHVz ZV92bF9wKQ0KPiArICAgdGVzdF9jdHJsDQo+ICsgICAgID0gdmVjdF9zZXRf bG9vcF9jb250cm9sc19ieV9zZWxlY3RfdmwgKGxvb3AsIGxvb3BfdmluZm8s DQo+ICsgICAgJnByZWhlYWRlcl9zZXEsICZoZWFkZXJfc2VxLA0KPiArICAg IHJnYywgbml0ZXJzLCBjb250cm9scy0+bGVuZ3RoICgpKTsNCj4gKyBlbHNl DQo+ICsgICB0ZXN0X2N0cmwNCj4gKyAgICAgPSB2ZWN0X3NldF9sb29wX2Nv bnRyb2xzX2RpcmVjdGx5IChsb29wLCBsb29wX3ZpbmZvLCAmcHJlaGVhZGVy X3NlcSwNCj4gKyAgICAgICAgJmhlYWRlcl9zZXEsIGxvb3BfY29uZF9nc2ks IHJnYywNCj4gKyAgICAgICAgbml0ZXJzLCBuaXRlcnNfc2tpcCwNCj4gKyAg ICAgICAgbWlnaHRfd3JhcF9wKTsNCj4gICAgICAgIH0NCj4gICAgLyogRW1p dCBhbGwgYWNjdW11bGF0ZWQgc3RhdGVtZW50cy4gICovDQo+IEBAIC04OTMs NyArMTI0OSw3IEBAIHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uX25vcm1hbCAo Y2xhc3MgbG9vcCAqbG9vcCwgdHJlZSBuaXRlcnMsIHRyZWUgc3RlcCwNCj4g ICAgICB9DQo+ICAgIHN0YW5kYXJkX2l2X2luY3JlbWVudF9wb3NpdGlvbiAo bG9vcCwgJmluY3JfZ3NpLCAmaW5zZXJ0X2FmdGVyKTsNCj4gLSAgY3JlYXRl X2l2IChpbml0LCBzdGVwLCBOVUxMX1RSRUUsIGxvb3AsDQo+ICsgIGNyZWF0 ZV9pdiAoaW5pdCwgUExVU19FWFBSLCBzdGVwLCBOVUxMX1RSRUUsIGxvb3As DQo+ICAgICAgICAgICAgICAgJmluY3JfZ3NpLCBpbnNlcnRfYWZ0ZXIsICZp bmR4X2JlZm9yZV9pbmNyLCAmaW5keF9hZnRlcl9pbmNyKTsNCj4gICAgaW5k eF9hZnRlcl9pbmNyID0gZm9yY2VfZ2ltcGxlX29wZXJhbmRfZ3NpICgmbG9v cF9jb25kX2dzaSwgaW5keF9hZnRlcl9pbmNyLA0KPiAgICAgICB0cnVlLCBO VUxMX1RSRUUsIHRydWUsDQo+IGRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0 LWxvb3AuY2MgYi9nY2MvdHJlZS12ZWN0LWxvb3AuY2MNCj4gaW5kZXggNmVh MGYyMWZkMTMuLmQ3Y2Y5MjU3NmQxIDEwMDY0NA0KPiAtLS0gYS9nY2MvdHJl ZS12ZWN0LWxvb3AuY2MNCj4gKysrIGIvZ2NjL3RyZWUtdmVjdC1sb29wLmNj DQo+IEBAIC01NTY3LDcgKzU1NjcsNyBAQCB2ZWN0X2NyZWF0ZV9lcGlsb2df Zm9yX3JlZHVjdGlvbiAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiAg ICAgICAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgaW5jcl9nc2k7DQo+ICAgICAg ICBib29sIGluc2VydF9hZnRlcjsNCj4gICAgICAgIHN0YW5kYXJkX2l2X2lu Y3JlbWVudF9wb3NpdGlvbiAobG9vcCwgJmluY3JfZ3NpLCAmaW5zZXJ0X2Fm dGVyKTsNCj4gLSAgICAgIGNyZWF0ZV9pdiAoc2VyaWVzX3ZlY3QsIHZlY19z dGVwLCBOVUxMX1RSRUUsIGxvb3AsICZpbmNyX2dzaSwNCj4gKyAgICAgIGNy ZWF0ZV9pdiAoc2VyaWVzX3ZlY3QsIFBMVVNfRVhQUiwgdmVjX3N0ZXAsIE5V TExfVFJFRSwgbG9vcCwgJmluY3JfZ3NpLA0KPiBpbnNlcnRfYWZ0ZXIsICZp bmR4X2JlZm9yZV9pbmNyLCAmaW5keF9hZnRlcl9pbmNyKTsNCj4gICAgICAg IC8qIE5leHQgY3JlYXRlIGEgbmV3IHBoaSBub2RlIHZlY3RvciAoTkVXX1BI SV9UUkVFKSB3aGljaCBzdGFydHMNCj4gQEAgLTEwMzYxLDE1ICsxMDM2MSwx OCBAQCB2ZWN0X3JlY29yZF9sb29wX2xlbiAobG9vcF92ZWNfaW5mbyBsb29w X3ZpbmZvLCB2ZWNfbG9vcF9sZW5zICpsZW5zLA0KPiB9DQo+IC8qIEdpdmVu IGEgY29tcGxldGUgc2V0IG9mIGxlbmd0aCBMRU5TLCBleHRyYWN0IGxlbmd0 aCBudW1iZXIgSU5ERVggZm9yIGFuDQo+IC0gICByZ3JvdXAgdGhhdCBvcGVy YXRlcyBvbiBOVkVDVE9SUyB2ZWN0b3JzLCB3aGVyZSAwIDw9IElOREVYIDwg TlZFQ1RPUlMuICAqLw0KPiArICAgcmdyb3VwIHRoYXQgb3BlcmF0ZXMgb24g TlZFQ1RPUlMgdmVjdG9ycywgd2hlcmUgMCA8PSBJTkRFWCA8IE5WRUNUT1JT Lg0KPiArICAgSW5zZXJ0IGFueSBzZXQtdXAgc3RhdGVtZW50cyBiZWZvcmUg R1NJLiAgKi8NCj4gdHJlZQ0KPiAtdmVjdF9nZXRfbG9vcF9sZW4gKGxvb3Bf dmVjX2luZm8gbG9vcF92aW5mbywgdmVjX2xvb3BfbGVucyAqbGVucywNCj4g LSAgICB1bnNpZ25lZCBpbnQgbnZlY3RvcnMsIHVuc2lnbmVkIGludCBpbmRl eCkNCj4gK3ZlY3RfZ2V0X2xvb3BfbGVuIChsb29wX3ZlY19pbmZvIGxvb3Bf dmluZm8sIGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2ksDQo+ICsgICAgdmVj X2xvb3BfbGVucyAqbGVucywgdW5zaWduZWQgaW50IG52ZWN0b3JzLCB0cmVl IHZlY3R5cGUsDQo+ICsgICAgdW5zaWduZWQgaW50IGluZGV4KQ0KPiB7DQo+ ICAgIHJncm91cF9jb250cm9scyAqcmdsID0gJigqbGVucylbbnZlY3RvcnMg LSAxXTsNCj4gICAgYm9vbCB1c2VfYmlhc19hZGp1c3RlZF9sZW4gPQ0KPiAg ICAgIExPT1BfVklORk9fUEFSVElBTF9MT0FEX1NUT1JFX0JJQVMgKGxvb3Bf dmluZm8pICE9IDA7DQo+ICsgIHRyZWUgaXZfdHlwZSA9IExPT1BfVklORk9f UkdST1VQX0lWX1RZUEUgKGxvb3BfdmluZm8pOw0KPiAgICAvKiBQb3B1bGF0 ZSB0aGUgcmdyb3VwJ3MgbGVuIGFycmF5LCBpZiB0aGlzIGlzIHRoZSBmaXJz dCB0aW1lIHdlJ3ZlDQo+ICAgICAgIHVzZWQgaXQuICAqLw0KPiBAQCAtMTA0 MDAsNiArMTA0MDMsMjcgQEAgdmVjdF9nZXRfbG9vcF9sZW4gKGxvb3BfdmVj X2luZm8gbG9vcF92aW5mbywgdmVjX2xvb3BfbGVucyAqbGVucywNCj4gICAg aWYgKHVzZV9iaWFzX2FkanVzdGVkX2xlbikNCj4gICAgICByZXR1cm4gcmds LT5iaWFzX2FkanVzdGVkX2N0cmw7DQo+ICsgIGVsc2UgaWYgKGRpcmVjdF9p bnRlcm5hbF9mbl9zdXBwb3J0ZWRfcCAoSUZOX1NFTEVDVF9WTCwgaXZfdHlw ZSwNCj4gKyAgICBPUFRJTUlaRV9GT1JfU1BFRUQpKQ0KPiArICAgIHsNCj4g KyAgICAgIHRyZWUgbG9vcF9sZW4gPSByZ2wtPmNvbnRyb2xzW2luZGV4XTsN Cj4gKyAgICAgIHBvbHlfaW50NjQgbnVuaXRzMSA9IFRZUEVfVkVDVE9SX1NV QlBBUlRTIChyZ2wtPnR5cGUpOw0KPiArICAgICAgcG9seV9pbnQ2NCBudW5p dHMyID0gVFlQRV9WRUNUT1JfU1VCUEFSVFMgKHZlY3R5cGUpOw0KPiArICAg ICAgaWYgKG1heWJlX25lIChudW5pdHMxLCBudW5pdHMyKSkNCj4gKyB7DQo+ ICsgICAvKiBBIGxvb3AgbGVuIGZvciBkYXRhIHR5cGUgWCBjYW4gYmUgcmV1 c2VkIGZvciBkYXRhIHR5cGUgWQ0KPiArICAgICAgaWYgWCBoYXMgTiB0aW1l cyBtb3JlIGVsZW1lbnRzIHRoYW4gWSBhbmQgaWYgWSdzIGVsZW1lbnRzDQo+ ICsgICAgICBhcmUgTiB0aW1lcyBiaWdnZXIgdGhhbiBYJ3MuICAqLw0KPiAr ICAgZ2NjX2Fzc2VydCAobXVsdGlwbGVfcCAobnVuaXRzMSwgbnVuaXRzMikp Ow0KPiArICAgdW5zaWduZWQgaW50IGZhY3RvciA9IGV4YWN0X2RpdiAobnVu aXRzMSwgbnVuaXRzMikudG9fY29uc3RhbnQgKCk7DQo+ICsgICBnaW1wbGVf c2VxIHNlcSA9IE5VTEw7DQo+ICsgICBsb29wX2xlbiA9IGdpbXBsZV9idWls ZCAoJnNlcSwgUkRJVl9FWFBSLCBpdl90eXBlLCBsb29wX2xlbiwNCj4gKyAg ICBidWlsZF9pbnRfY3N0IChpdl90eXBlLCBmYWN0b3IpKTsNCj4gKyAgIGlm IChzZXEpDQo+ICsgICAgIGdzaV9pbnNlcnRfc2VxX2JlZm9yZSAoZ3NpLCBz ZXEsIEdTSV9TQU1FX1NUTVQpOw0KPiArIH0NCj4gKyAgICAgIHJldHVybiBs b29wX2xlbjsNCj4gKyAgICB9DQo+ICAgIGVsc2UNCj4gICAgICByZXR1cm4g cmdsLT5jb250cm9sc1tpbmRleF07DQo+IH0NCj4gZGlmZiAtLWdpdCBhL2dj Yy90cmVlLXZlY3Qtc3RtdHMuY2MgYi9nY2MvdHJlZS12ZWN0LXN0bXRzLmNj DQo+IGluZGV4IDNhZDZhN2QyOGQ3Li4yNjgxM2FiNTZlOSAxMDA2NDQNCj4g LS0tIGEvZ2NjL3RyZWUtdmVjdC1zdG10cy5jYw0KPiArKysgYi9nY2MvdHJl ZS12ZWN0LXN0bXRzLmNjDQo+IEBAIC0zMTQ3LDYgKzMxNDcsNjEgQEAgdmVj dF9nZXRfZGF0YV9wdHJfaW5jcmVtZW50ICh2ZWNfaW5mbyAqdmluZm8sDQo+ ICAgIHJldHVybiBpdl9zdGVwOw0KPiB9DQo+ICsvKiBQcmVwYXJlIHRoZSBw b2ludGVyIElWcyB3aGljaCBuZWVkcyB0byBiZSB1cGRhdGVkIGJ5IGEgdmFy aWFibGUgYW1vdW50Lg0KPiArICAgU3VjaCB2YXJpYWJsZSBhbW91bnQgaXMg dGhlIG91dGNvbWUgb2YgLlNFTEVDVF9WTC4gSW4gdGhpcyBjYXNlLCB3ZSBj YW4NCj4gKyAgIGFsbG93IGVhY2ggaXRlcmF0aW9uIHByb2Nlc3MgdGhlIGZs ZXhpYmxlIG51bWJlciBvZiBlbGVtZW50cyBhcyBsb25nIGFzDQo+ICsgICB0 aGUgbnVtYmVyIDw9IHZmIGVsbWVudHMuDQo+ICsNCj4gKyAgIFJldHVybiBk YXRhIHJlZmVyZW5jZSBhY2NvcmRpbmcgdG8gU0VMRUNUX1ZMLg0KPiArICAg SWYgbmV3IHN0YXRlbWVudHMgYXJlIG5lZWRlZCwgaW5zZXJ0IHRoZW0gYmVm b3JlIEdTSS4gICovDQo+ICsNCj4gK3N0YXRpYyB0cmVlDQo+ICtnZXRfc2Vs ZWN0X3ZsX2RhdGFfcmVmX3B0ciAodmVjX2luZm8gKnZpbmZvLCBzdG10X3Zl Y19pbmZvIHN0bXRfaW5mbywNCj4gKyAgICAgdHJlZSBhZ2dyX3R5cGUsIGNs YXNzIGxvb3AgKmF0X2xvb3AsIHRyZWUgb2Zmc2V0LA0KPiArICAgICB0cmVl ICpkdW1teSwgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwNCj4gKyAgICAg Ym9vbCBzaW1kX2xhbmVfYWNjZXNzX3AsIHZlY19sb29wX2xlbnMgKmxvb3Bf bGVucywNCj4gKyAgICAgZHJfdmVjX2luZm8gKmRyX2luZm8sDQo+ICsgICAg IHZlY3RfbWVtb3J5X2FjY2Vzc190eXBlIG1lbW9yeV9hY2Nlc3NfdHlwZSkN Cj4gK3sNCj4gKyAgbG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvID0gZHluX2Nh c3Q8bG9vcF92ZWNfaW5mbz4gKHZpbmZvKTsNCj4gKyAgdHJlZSBzdGVwID0g dmVjdF9kcl9iZWhhdmlvciAodmluZm8sIGRyX2luZm8pLT5zdGVwOw0KPiAr DQo+ICsgIC8qIFRPRE86IFdlIGRvbid0IHN1cHBvcnQgZ2F0aGVyL3NjYXR0 ZXIgb3IgbG9hZF9sYW5lcy9zdG9yZV9sYW5lcyBmb3IgcG9pbnRlcg0KPiAr ICAgICBJVnMgYXJlIHVwZGF0ZWQgYnkgdmFyaWFibGUgYW1vdW50IGJ1dCB3 ZSB3aWxsIHN1cHBvcnQgdGhlbSBpbiB0aGUgZnV0dXJlLg0KPiArICAgKi8N Cj4gKyAgZ2NjX2Fzc2VydCAobWVtb3J5X2FjY2Vzc190eXBlICE9IFZNQVRf R0FUSEVSX1NDQVRURVINCj4gKyAgICAgICAmJiBtZW1vcnlfYWNjZXNzX3R5 cGUgIT0gVk1BVF9MT0FEX1NUT1JFX0xBTkVTKTsNCj4gKw0KPiArICAvKiBX aGVuIHdlIHN1cHBvcnQgU0VMRUNUX1ZMIHBhdHRlcm4sIHdlIGR5bmFtaWMg YWRqdXN0DQo+ICsgICAgIHRoZSBtZW1vcnkgYWRkcmVzcyBieSAuU0VMRUNU X1ZMIHJlc3VsdC4NCj4gKw0KPiArICAgICBUaGUgcmVzdWx0IG9mIC5TRUxF Q1RfVkwgaXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyB0bw0KPiArICAgICBi ZSBwcm9jZXNzZWQgb2YgZWFjaCBpdGVyYXRpb24uIFNvIHRoZSBtZW1vcnkg YWRkcmVzcw0KPiArICAgICBhZGp1c3RtZW50IG9wZXJhdGlvbiBzaG91bGQg YmU6DQo+ICsNCj4gKyAgICAgYnl0ZXNpemUgPSBHRVRfTU9ERV9TSVpFIChl bGVtZW50X21vZGUgKGFnZ3JfdHlwZSkpOw0KPiArICAgICBhZGRyID0gYWRk ciArIC5TRUxFQ1RfVkwgKEFSRy4uKSAqIGJ5dGVzaXplOw0KPiArICAqLw0K PiArICBnaW1wbGUgKnB0cl9pbmNyOw0KPiArICB0cmVlIGxvb3BfbGVuDQo+ ICsgICAgPSB2ZWN0X2dldF9sb29wX2xlbiAobG9vcF92aW5mbywgZ3NpLCBs b29wX2xlbnMsIDEsIGFnZ3JfdHlwZSwgMCk7DQo+ICsgIHRyZWUgbGVuX3R5 cGUgPSBUUkVFX1RZUEUgKGxvb3BfbGVuKTsNCj4gKyAgcG9seV91aW50NjQg Ynl0ZXNpemUgPSBHRVRfTU9ERV9TSVpFIChlbGVtZW50X21vZGUgKGFnZ3Jf dHlwZSkpOw0KPiArICAvKiBTaW5jZSB0aGUgb3V0Y29tZSBvZiAuU0VMRUNU X1ZMIGlzIGVsZW1lbnQgc2l6ZSwgd2Ugc2hvdWxkIGFkanVzdA0KPiArICAg ICBpdCBpbnRvIGJ5dGVzaXplIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4g YWRkcmVzcyBwb2ludGVyIHZhcmlhYmxlDQo+ICsgICAgIGFtb3VudCBJVnMg YWRqdXN0bWVudC4gICovDQo+ICsgIHRyZWUgdG1wID0gZm9sZF9idWlsZDIg KE1VTFRfRVhQUiwgbGVuX3R5cGUsIGxvb3BfbGVuLA0KPiArICAgYnVpbGRf aW50X2NzdCAobGVuX3R5cGUsIGJ5dGVzaXplKSk7DQo+ICsgIGlmICh0cmVl X2ludF9jc3Rfc2duIChzdGVwKSA9PSAtMSkNCj4gKyAgICB0bXAgPSBmb2xk X2J1aWxkMSAoTkVHQVRFX0VYUFIsIGxlbl90eXBlLCB0bXApOw0KPiArICB0 cmVlIGJ1bXAgPSBtYWtlX3RlbXBfc3NhX25hbWUgKGxlbl90eXBlLCBOVUxM LCAiaXZ0bXAiKTsNCj4gKyAgZ2Fzc2lnbiAqYXNzaWduID0gZ2ltcGxlX2J1 aWxkX2Fzc2lnbiAoYnVtcCwgdG1wKTsNCj4gKyAgZ3NpX2luc2VydF9iZWZv cmUgKGdzaSwgYXNzaWduLCBHU0lfU0FNRV9TVE1UKTsNCj4gKyAgcmV0dXJu IHZlY3RfY3JlYXRlX2RhdGFfcmVmX3B0ciAodmluZm8sIHN0bXRfaW5mbywg YWdncl90eXBlLCBhdF9sb29wLCBvZmZzZXQsDQo+ICsgICAgZHVtbXksIGdz aSwgJnB0cl9pbmNyLCBzaW1kX2xhbmVfYWNjZXNzX3AsDQo+ICsgICAgYnVt cCk7DQo+ICt9DQo+ICsNCj4gLyogQ2hlY2sgYW5kIHBlcmZvcm0gdmVjdG9y aXphdGlvbiBvZiBCVUlMVF9JTl9CU1dBUHsxNiwzMiw2NCwxMjh9LiAgKi8N Cj4gc3RhdGljIGJvb2wNCj4gQEAgLTgyNzksNyArODMzNCw3IEBAIHZlY3Rv cml6YWJsZV9zdG9yZSAodmVjX2luZm8gKnZpbmZvLA0KPiAgICAgICAgc3Ry aWRlX2Jhc2UgPSBjc2VfYW5kX2dpbXBsaWZ5X3RvX3ByZWhlYWRlciAobG9v cF92aW5mbywgc3RyaWRlX2Jhc2UpOw0KPiAgICAgICAgaXZzdGVwID0gY3Nl X2FuZF9naW1wbGlmeV90b19wcmVoZWFkZXIgKGxvb3BfdmluZm8sIGl2c3Rl cCk7DQo+IC0gICAgICBjcmVhdGVfaXYgKHN0cmlkZV9iYXNlLCBpdnN0ZXAs IE5VTEwsDQo+ICsgICAgICBjcmVhdGVfaXYgKHN0cmlkZV9iYXNlLCBQTFVT X0VYUFIsIGl2c3RlcCwgTlVMTCwNCj4gbG9vcCwgJmluY3JfZ3NpLCBpbnNl cnRfYWZ0ZXIsDQo+ICZvZmZ2YXIsIE5VTEwpOw0KPiAgICAgICAgaW5jciA9 IGdzaV9zdG10IChpbmNyX2dzaSk7DQo+IEBAIC04NTQwLDYgKzg1OTUsMTcg QEAgdmVjdG9yaXphYmxlX3N0b3JlICh2ZWNfaW5mbyAqdmluZm8sDQo+ICAg ICB2ZWN0X2dldF9nYXRoZXJfc2NhdHRlcl9vcHMgKGxvb3BfdmluZm8sIGxv b3AsIHN0bXRfaW5mbywNCj4gc2xwX25vZGUsICZnc19pbmZvLCAmZGF0YXJl Zl9wdHIsDQo+ICZ2ZWNfb2Zmc2V0cyk7DQo+ICsgICBlbHNlIGlmIChsb29w X2xlbnMgJiYgbG9vcF9sZW5zLT5sZW5ndGggKCkgPT0gMQ0KPiArICAgICYm IGRpcmVjdF9pbnRlcm5hbF9mbl9zdXBwb3J0ZWRfcCAoDQo+ICsgICAgICBJ Rk5fU0VMRUNUX1ZMLCBMT09QX1ZJTkZPX1JHUk9VUF9JVl9UWVBFIChsb29w X3ZpbmZvKSwNCj4gKyAgICAgIE9QVElNSVpFX0ZPUl9TUEVFRCkNCj4gKyAg ICAmJiBtZW1vcnlfYWNjZXNzX3R5cGUgIT0gVk1BVF9JTlZBUklBTlQpDQo+ ICsgICAgIGRhdGFyZWZfcHRyDQo+ICsgICAgICAgPSBnZXRfc2VsZWN0X3Zs X2RhdGFfcmVmX3B0ciAodmluZm8sIHN0bXRfaW5mbywgYWdncl90eXBlLA0K PiArICAgICBzaW1kX2xhbmVfYWNjZXNzX3AgPyBsb29wIDogTlVMTCwNCj4g KyAgICAgb2Zmc2V0LCAmZHVtbXksIGdzaSwNCj4gKyAgICAgc2ltZF9sYW5l X2FjY2Vzc19wLCBsb29wX2xlbnMsDQo+ICsgICAgIGRyX2luZm8sIG1lbW9y eV9hY2Nlc3NfdHlwZSk7DQo+ICAgZWxzZQ0KPiAgICAgZGF0YXJlZl9wdHIN Cj4gICAgICAgPSB2ZWN0X2NyZWF0ZV9kYXRhX3JlZl9wdHIgKHZpbmZvLCBm aXJzdF9zdG10X2luZm8sIGFnZ3JfdHlwZSwNCj4gQEAgLTg3ODgsOCArODg1 NCw5IEBAIHZlY3Rvcml6YWJsZV9zdG9yZSAodmVjX2luZm8gKnZpbmZvLA0K PiAgICAgICBlbHNlIGlmIChsb29wX2xlbnMpDQo+IHsNCj4gICB0cmVlIGZp bmFsX2xlbg0KPiAtICAgICA9IHZlY3RfZ2V0X2xvb3BfbGVuIChsb29wX3Zp bmZvLCBsb29wX2xlbnMsDQo+IC0gdmVjX251bSAqIG5jb3BpZXMsIHZlY19u dW0gKiBqICsgaSk7DQo+ICsgICAgID0gdmVjdF9nZXRfbG9vcF9sZW4gKGxv b3BfdmluZm8sIGdzaSwgbG9vcF9sZW5zLA0KPiArIHZlY19udW0gKiBuY29w aWVzLCB2ZWN0eXBlLA0KPiArIHZlY19udW0gKiBqICsgaSk7DQo+ICAgdHJl ZSBwdHIgPSBidWlsZF9pbnRfY3N0IChyZWZfdHlwZSwgYWxpZ24gKiBCSVRT X1BFUl9VTklUKTsNCj4gICBtYWNoaW5lX21vZGUgdm1vZGUgPSBUWVBFX01P REUgKHZlY3R5cGUpOw0KPiAgIG9wdF9tYWNoaW5lX21vZGUgbmV3X292bW9k ZQ0KPiBAQCAtOTQ1MCw3ICs5NTE3LDcgQEAgdmVjdG9yaXphYmxlX2xvYWQg KHZlY19pbmZvICp2aW5mbywNCj4gICAgICAgIHN0cmlkZV9iYXNlID0gY3Nl X2FuZF9naW1wbGlmeV90b19wcmVoZWFkZXIgKGxvb3BfdmluZm8sIHN0cmlk ZV9iYXNlKTsNCj4gICAgICAgIGl2c3RlcCA9IGNzZV9hbmRfZ2ltcGxpZnlf dG9fcHJlaGVhZGVyIChsb29wX3ZpbmZvLCBpdnN0ZXApOw0KPiAtICAgICAg Y3JlYXRlX2l2IChzdHJpZGVfYmFzZSwgaXZzdGVwLCBOVUxMLA0KPiArICAg ICAgY3JlYXRlX2l2IChzdHJpZGVfYmFzZSwgUExVU19FWFBSLCBpdnN0ZXAs IE5VTEwsDQo+IGxvb3AsICZpbmNyX2dzaSwgaW5zZXJ0X2FmdGVyLA0KPiAm b2ZmdmFyLCBOVUxMKTsNCj4gQEAgLTk5MjgsNiArOTk5NSwxNiBAQCB2ZWN0 b3JpemFibGVfbG9hZCAodmVjX2luZm8gKnZpbmZvLA0KPiAgICBzbHBfbm9k ZSwgJmdzX2luZm8sICZkYXRhcmVmX3B0ciwNCj4gICAgJnZlY19vZmZzZXRz KTsNCj4gICAgIH0NCj4gKyAgIGVsc2UgaWYgKGxvb3BfbGVucyAmJiBsb29w X2xlbnMtPmxlbmd0aCAoKSA9PSAxDQo+ICsgICAgJiYgZGlyZWN0X2ludGVy bmFsX2ZuX3N1cHBvcnRlZF9wICgNCj4gKyAgICAgIElGTl9TRUxFQ1RfVkws IExPT1BfVklORk9fUkdST1VQX0lWX1RZUEUgKGxvb3BfdmluZm8pLA0KPiAr ICAgICAgT1BUSU1JWkVfRk9SX1NQRUVEKQ0KPiArICAgICYmIG1lbW9yeV9h Y2Nlc3NfdHlwZSAhPSBWTUFUX0lOVkFSSUFOVCkNCj4gKyAgICAgZGF0YXJl Zl9wdHINCj4gKyAgICAgICA9IGdldF9zZWxlY3RfdmxfZGF0YV9yZWZfcHRy ICh2aW5mbywgc3RtdF9pbmZvLCBhZ2dyX3R5cGUsDQo+ICsgICAgIGF0X2xv b3AsIG9mZnNldCwgJmR1bW15LCBnc2ksDQo+ICsgICAgIHNpbWRfbGFuZV9h Y2Nlc3NfcCwgbG9vcF9sZW5zLA0KPiArICAgICBkcl9pbmZvLCBtZW1vcnlf YWNjZXNzX3R5cGUpOw0KPiAgIGVsc2UNCj4gICAgIGRhdGFyZWZfcHRyDQo+ ICAgICAgID0gdmVjdF9jcmVhdGVfZGF0YV9yZWZfcHRyICh2aW5mbywgZmly c3Rfc3RtdF9pbmZvLCBhZ2dyX3R5cGUsDQo+IEBAIC0xMDE0NCw4ICsxMDIy MSw4IEBAIHZlY3Rvcml6YWJsZV9sb2FkICh2ZWNfaW5mbyAqdmluZm8sDQo+ ICAgICBlbHNlIGlmIChsb29wX2xlbnMgJiYgbWVtb3J5X2FjY2Vzc190eXBl ICE9IFZNQVRfSU5WQVJJQU5UKQ0KPiAgICAgICB7DQo+IHRyZWUgZmluYWxf bGVuDQo+IC0gICA9IHZlY3RfZ2V0X2xvb3BfbGVuIChsb29wX3ZpbmZvLCBs b29wX2xlbnMsDQo+IC0gICAgICAgIHZlY19udW0gKiBuY29waWVzLA0KPiAr ICAgPSB2ZWN0X2dldF9sb29wX2xlbiAobG9vcF92aW5mbywgZ3NpLCBsb29w X2xlbnMsDQo+ICsgICAgICAgIHZlY19udW0gKiBuY29waWVzLCB2ZWN0eXBl LA0KPiAgICAgICAgdmVjX251bSAqIGogKyBpKTsNCj4gdHJlZSBwdHIgPSBi dWlsZF9pbnRfY3N0IChyZWZfdHlwZSwNCj4gICBhbGlnbiAqIEJJVFNfUEVS X1VOSVQpOw0KPiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdG9yaXplci5o IGIvZ2NjL3RyZWUtdmVjdG9yaXplci5oDQo+IGluZGV4IDljZjJmYjIzZmUz Li4zNTdiYzVjNzMxNSAxMDA2NDQNCj4gLS0tIGEvZ2NjL3RyZWUtdmVjdG9y aXplci5oDQo+ICsrKyBiL2djYy90cmVlLXZlY3Rvcml6ZXIuaA0KPiBAQCAt MjI5Myw4ICsyMjkzLDggQEAgZXh0ZXJuIHRyZWUgdmVjdF9nZXRfbG9vcF9t YXNrIChnaW1wbGVfc3RtdF9pdGVyYXRvciAqLCB2ZWNfbG9vcF9tYXNrcyAq LA0KPiB1bnNpZ25lZCBpbnQsIHRyZWUsIHVuc2lnbmVkIGludCk7DQo+IGV4 dGVybiB2b2lkIHZlY3RfcmVjb3JkX2xvb3BfbGVuIChsb29wX3ZlY19pbmZv LCB2ZWNfbG9vcF9sZW5zICosIHVuc2lnbmVkIGludCwNCj4gICB0cmVlLCB1 bnNpZ25lZCBpbnQpOw0KPiAtZXh0ZXJuIHRyZWUgdmVjdF9nZXRfbG9vcF9s ZW4gKGxvb3BfdmVjX2luZm8sIHZlY19sb29wX2xlbnMgKiwgdW5zaWduZWQg aW50LA0KPiAtICAgICAgICB1bnNpZ25lZCBpbnQpOw0KPiArZXh0ZXJuIHRy ZWUgdmVjdF9nZXRfbG9vcF9sZW4gKGxvb3BfdmVjX2luZm8sIGdpbXBsZV9z dG10X2l0ZXJhdG9yICosIHZlY19sb29wX2xlbnMgKiwNCj4gKyAgICAgICAg dW5zaWduZWQgaW50LCB0cmVlLCB1bnNpZ25lZCBpbnQpOw0KPiBleHRlcm4g Z2ltcGxlX3NlcSB2ZWN0X2dlbl9sZW4gKHRyZWUsIHRyZWUsIHRyZWUsIHRy ZWUpOw0KPiBleHRlcm4gc3RtdF92ZWNfaW5mbyBpbmZvX2Zvcl9yZWR1Y3Rp b24gKHZlY19pbmZvICosIHN0bXRfdmVjX2luZm8pOw0KPiBleHRlcm4gYm9v bCByZWR1Y3Rpb25fZm5fZm9yX3NjYWxhcl9jb2RlIChjb2RlX2hlbHBlciwg aW50ZXJuYWxfZm4gKik7DQogDQo= ------=_001_NextPart655588805722_=------