X-Authentication-Warning: delorie.com: mail set sender to geda-user-bounces using -f X-Recipient: geda-user AT delorie DOT com X-Original-DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=robspanton.com; h= content-type:date:from:message-id:mime-version:references :reply-to:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=wtTMxxW nYK7hUwQ64YeDlxOSw6c=; b=Q9DZgyLdjMlrAgxu/OHLxvZRrnqftRRQDCfVDg0 musuhxgVikd2Xpa7B1BXvVWQRrhbwL6x3BB4VRW8aIoZgeql0WB2OCsd1WFXq82o EmWbs9pG7FDU+tSYmA+2MjKiKWHpRJr5K34KXGZW/DHGJZ8gtJtvOJ/J3lw2JeiI jDgY= X-Original-DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:message-id :mime-version:references:reply-to:subject:to:x-sasl-enc :x-sasl-enc; s=smtpout; bh=wtTMxxWnYK7hUwQ64YeDlxOSw6c=; b=YIVZu kXKtTGj04fl/wEC6PRUnVwzgnDk0P5XWoZNNJhrX17k9gQhykz2dWHKai4/xrekf HqrHN890U4efZoNxKMf+HjuuYebnT+zTBLzFtcDOoigMMy+q46BHItMq9uSfzs65 Df9C6P5vnM0PQG5vAdSNn5cn5VUazDNZvLLE6A= X-Sasl-enc: LHEEdfNstQWCQVPtz+2sPb2W18mKf++UBl5PnSi4NYRv 1455234591 Message-ID: <1455234590.2726.11.camel@robspanton.com> Subject: [geda-user] [PATCH] Elements Window From: "Rob Spanton (rob AT robspanton DOT com) [via geda-user AT delorie DOT com]" To: geda-user AT delorie DOT com Date: Thu, 11 Feb 2016 23:49:50 +0000 References: <1455231503 DOT 28583 DOT 17 DOT camel AT robspanton DOT com> Content-Type: multipart/signed; micalg="pgp-sha1"; protocol="application/pgp-signature"; boundary="=-IouJQOJRnOQySrdiMlSj" X-Mailer: Evolution 3.18.4 (3.18.4-1.fc23) Mime-Version: 1.0 Reply-To: geda-user AT delorie DOT com --=-IouJQOJRnOQySrdiMlSj Content-Type: multipart/mixed; boundary="=-kDLW01Wybge5FyLAOOGg" --=-kDLW01Wybge5FyLAOOGg Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, When I'm editing a PCB, I often find that I want to find a group of components on it.=C2=A0=C2=A0For example, I want to find a certain set of decoupling capacitors to make sure they're positioned appropriately. This is quite a slow process in pcb at the moment, as one has to use the "Select by name" menu a lot etc. So I've added a new window to pcb for browsing the elements that are on a board.=C2=A0=C2=A0Please find a patch series attached that adds this, and= a screenshot here [1].=C2=A0=C2=A0It would be great if the patches could be m= erged in. At the moment, these provide just above the most basic level of functionality that one could expect from this window.=C2=A0=C2=A0It has opt= ions for enabling/disabling search case sensitivity, enabling/disabling regexes, and selecting/deselecting elements. There are a few more things that I intend on extending this with in future, including element name editing, and element attribute display/search/editing. Cheers, Rob [1]=C2=A0http://imgur.com/wQdMJrP --=-kDLW01Wybge5FyLAOOGg Content-Disposition: attachment; filename="0001-Add-a-HID-action-for-element-changes.patch" Content-Type: text/x-patch; name="0001-Add-a-HID-action-for-element-changes.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAwZTY3MmNmNDVjZmRmOGY3MjQ3MmE2MTk3ZmMxYzhlMDdjOTMwMjAyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2IgU3BhbnRvbiA8cm9iQHJvYnNwYW50b24uY29tPgpEYXRl OiBUaHUsIDExIEZlYiAyMDE2IDIxOjQxOjE3ICswMDAwClN1YmplY3Q6IFtQQVRDSCAxLzNdIEFk ZCBhIEhJRCBhY3Rpb24gZm9yIGVsZW1lbnQgY2hhbmdlcwoKVGhpcyBjYWxscyBhbiAiRWxlbWVu dHNDaGFuZ2VkIiBISUQgYWN0aW9uIHdoZW4gZWxlbWVudHMgaW4gdGhlIFBDQiBhcmUKY2hhbmdl ZC4gIFRoaXMgd2lsbCBiZSB1c2VmdWwgZm9yIGFuIGVsZW1lbnQgYnJvd3NlciB3aW5kb3cgdGhh dCBJIGFtCndvcmtpbmcgb24uCi0tLQogc3JjL2NoYW5nZS5jIHwgNiArKysrKy0KIHNyYy9jb3B5 LmMgICB8IDMgKysrCiBzcmMvcmVtb3ZlLmMgfCAzICsrKwogMyBmaWxlcyBjaGFuZ2VkLCAxMSBp bnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2NoYW5nZS5jIGIv c3JjL2NoYW5nZS5jCmluZGV4IGEyODIzYjcuLjg0NDBkOTEgMTAwNjQ0Ci0tLSBhL3NyYy9jaGFu Z2UuYworKysgYi9zcmMvY2hhbmdlLmMKQEAgLTEwNjUsNiArMTA2NSw4IEBAIENoYW5nZUVsZW1l bnRUZXh0IChQQ0JUeXBlICpwY2IsIERhdGFUeXBlICpkYXRhLCBFbGVtZW50VHlwZSAqRWxlbWVu dCwgaW50IHdoaWNoCiBzdGF0aWMgdm9pZCAqCiBDaGFuZ2VFbGVtZW50TmFtZSAoRWxlbWVudFR5 cGUgKkVsZW1lbnQpCiB7CisgIGNoYXIqIHJldDsKKwogICBpZiAoVEVTVF9GTEFHIChMT0NLRkxB RywgJkVsZW1lbnQtPk5hbWVbMF0pKQogICAgIHJldHVybiAoTlVMTCk7CiAgIGlmIChOQU1FX0lO REVYIChQQ0IpID09IE5BTUVPTlBDQl9JTkRFWCkKQEAgLTEwNzcsNyArMTA3OSw5IEBAIENoYW5n ZUVsZW1lbnROYW1lIChFbGVtZW50VHlwZSAqRWxlbWVudCkKIAl9CiAgICAgfQogCi0gIHJldHVy biBDaGFuZ2VFbGVtZW50VGV4dCAoUENCLCBQQ0ItPkRhdGEsIEVsZW1lbnQsIE5BTUVfSU5ERVgg KFBDQiksIE5ld05hbWUpOworICByZXQgPSBDaGFuZ2VFbGVtZW50VGV4dCAoUENCLCBQQ0ItPkRh dGEsIEVsZW1lbnQsIE5BTUVfSU5ERVggKFBDQiksIE5ld05hbWUpOworICBoaWRfYWN0aW9uKCJF bGVtZW50c0NoYW5nZWQiKTsKKyAgcmV0dXJuIHJldDsKIH0KIAogLyohCmRpZmYgLS1naXQgYS9z cmMvY29weS5jIGIvc3JjL2NvcHkuYwppbmRleCA4MWIxNGE3Li5mYTA5NDJjIDEwMDY0NAotLS0g YS9zcmMvY29weS5jCisrKyBiL3NyYy9jb3B5LmMKQEAgLTI5OCw2ICsyOTgsOSBAQCBDb3B5RWxl bWVudCAoRWxlbWVudFR5cGUgKkVsZW1lbnQpCiAKICAgLyogdGhpcyBjYWxsIGNsZWFycyB0aGUg cG9seWdvbnMgKi8KICAgQWRkT2JqZWN0VG9DcmVhdGVVbmRvTGlzdCAoRUxFTUVOVF9UWVBFLCBl bGVtZW50LCBlbGVtZW50LCBlbGVtZW50KTsKKworICBoaWRfYWN0aW9uKCJFbGVtZW50c0NoYW5n ZWQiKTsKKwogICBpZiAoUENCLT5FbGVtZW50T24gJiYgKEZST05UIChlbGVtZW50KSB8fCBQQ0It PkludmlzaWJsZU9iamVjdHNPbikpCiAgICAgewogICAgICAgRHJhd0VsZW1lbnROYW1lIChlbGVt ZW50KTsKZGlmZiAtLWdpdCBhL3NyYy9yZW1vdmUuYyBiL3NyYy9yZW1vdmUuYwppbmRleCAzOWFm NDhmLi5iMTE4NTUyIDEwMDY0NAotLS0gYS9zcmMvcmVtb3ZlLmMKKysrIGIvc3JjL3JlbW92ZS5j CkBAIC0yNzksNiArMjc5LDggQEAgRGVzdHJveUVsZW1lbnQgKEVsZW1lbnRUeXBlICpFbGVtZW50 KQogCiAgIGdfc2xpY2VfZnJlZSAoRWxlbWVudFR5cGUsIEVsZW1lbnQpOwogCisgIGhpZF9hY3Rp b24oIkVsZW1lbnRzQ2hhbmdlZCIpOworCiAgIHJldHVybiBOVUxMOwogfQogCkBAIC01NzgsNiAr NTgwLDcgQEAgUmVtb3ZlRWxlbWVudCAoRWxlbWVudFR5cGUgKkVsZW1lbnQpCiAJRHJhdyAoKTsK ICAgICB9CiAgIE1vdmVPYmplY3RUb1JlbW92ZVVuZG9MaXN0IChFTEVNRU5UX1RZUEUsIEVsZW1l bnQsIEVsZW1lbnQsIEVsZW1lbnQpOworICBoaWRfYWN0aW9uKCJFbGVtZW50c0NoYW5nZWQiKTsK ICAgcmV0dXJuIE5VTEw7CiB9CiAKLS0gCjIuNS4wCgo= --=-kDLW01Wybge5FyLAOOGg Content-Disposition: attachment; filename="0002-Add-a-function-to-select-an-element-by-pointer.patch" Content-Type: text/x-patch; name="0002-Add-a-function-to-select-an-element-by-pointer.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAzMGRiNzVlZWE4NWQ4ODg4MGNkYTVjYmU3OGMxNjZlNzE1YWRlNDNiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2IgU3BhbnRvbiA8cm9iQHJvYnNwYW50b24uY29tPgpEYXRl OiBUaHUsIDExIEZlYiAyMDE2IDIxOjQzOjMxICswMDAwClN1YmplY3Q6IFtQQVRDSCAyLzNdIEFk ZCBhIGZ1bmN0aW9uIHRvIHNlbGVjdCBhbiBlbGVtZW50IGJ5IHBvaW50ZXIKClByZXZpb3VzbHkg dGhlIG9ubHkgbWV0aG9kIG9mIHNlbGVjdGluZyBhbiBlbGVtZW50IHdhcyB0byB1c2UKU2VsZWN0 T2JqZWN0QnlOYW1lKCksIHdoaWNoIChhcyBpdCBzYXlzIGluIGl0cyBuYW1lKSBzZWxlY3RzIG9i amVjdHMgYnkKbmFtZS4gIEl0IGlzIG9mdGVuIGluY29udmVuaWVudCBhbmQgdW5uZWNlc3Nhcmls eSBpbmRpcmVjdCB0byBzZWxlY3QKZWxlbWVudHMgYnkgbmFtZSwgc28gdGhpcyBwYXRjaCBpbnRy b2R1Y2VzIFNlbGVjdEVsZW1lbnQoKSwgd2hpY2ggdGFrZXMKYSBwb2ludGVyIHRvIGFuIGVsZW1l bnQuCi0tLQogc3JjL3NlbGVjdC5jIHwgOTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvc2VsZWN0LmggfCAgMiArKwogMiBm aWxlcyBjaGFuZ2VkLCA2MSBpbnNlcnRpb25zKCspLCAzMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvc2VsZWN0LmMgYi9zcmMvc2VsZWN0LmMKaW5kZXggYzJjYjEzMC4uNjBlNTNlYSAx MDA2NDQKLS0tIGEvc3JjL3NlbGVjdC5jCisrKyBiL3NyYy9zZWxlY3QuYwpAQCAtNDQsNiArNDQs NyBAQAogI2luY2x1ZGUgIm1pc2MuaCIKICNpbmNsdWRlICJmaW5kLmgiCiAKKyNpbmNsdWRlIDxh c3NlcnQuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZmRlZiBIQVZFX1JFR0VYX0gKICNp bmNsdWRlIDxyZWdleC5oPgpAQCAtODI0LDYgKzgyNSw1OSBAQCByZWdleGVjX21hdGNoX2FsbCAo Y29uc3QgIHJlZ2V4X3QgICpwcmVnLCAgY29uc3QgIGNoYXIgICpzdHJpbmcpCiB9CiAjZW5kaWYK IAorLyogU2VsZWN0IGFuIGVsZW1lbnQsIGJ1dCBkb24ndCByZWRyYXcgR1VJICovCitzdGF0aWMg Ym9vbAorc2VsZWN0X2VsZW1lbnRfbm9fZHJhdyhFbGVtZW50VHlwZSogZWxlbWVudCwgYm9vbCBz ZWxlY3QpCit7CisgIGFzc2VydChlbGVtZW50ICE9IE5VTEwpOworCisgIGlmICghVEVTVF9GTEFH IChMT0NLRkxBRywgZWxlbWVudCkKKyAgICAgICYmICgoVEVTVF9GTEFHIChPTlNPTERFUkZMQUcs IGVsZW1lbnQpICE9IDApID09IFNXQVBfSURFTlQKKwkgIHx8IFBDQi0+SW52aXNpYmxlT2JqZWN0 c09uKQorICAgICAgJiYgVEVTVF9GTEFHIChTRUxFQ1RFREZMQUcsIGVsZW1lbnQpICE9IHNlbGVj dCkKKyAgeworICAgIEFkZE9iamVjdFRvRmxhZ1VuZG9MaXN0IChFTEVNRU5UX1RZUEUsIGVsZW1l bnQsIGVsZW1lbnQsIGVsZW1lbnQpOworICAgIEFTU0lHTl9GTEFHIChTRUxFQ1RFREZMQUcsIHNl bGVjdCwgZWxlbWVudCk7CisgICAgUElOX0xPT1AgKGVsZW1lbnQpOworICAgIHsKKyAgICAgIEFk ZE9iamVjdFRvRmxhZ1VuZG9MaXN0IChQSU5fVFlQRSwgZWxlbWVudCwgcGluLCBwaW4pOworICAg ICAgQVNTSUdOX0ZMQUcgKFNFTEVDVEVERkxBRywgc2VsZWN0LCBwaW4pOworICAgIH0KKyAgICBF TkRfTE9PUDsKKyAgICBQQURfTE9PUCAoZWxlbWVudCk7CisgICAgeworICAgICAgQWRkT2JqZWN0 VG9GbGFnVW5kb0xpc3QgKFBBRF9UWVBFLCBlbGVtZW50LCBwYWQsIHBhZCk7CisgICAgICBBU1NJ R05fRkxBRyAoU0VMRUNURURGTEFHLCBzZWxlY3QsIHBhZCk7CisgICAgfQorICAgIEVORF9MT09Q OworICAgIEVMRU1FTlRURVhUX0xPT1AgKGVsZW1lbnQpOworICAgIHsKKyAgICAgIEFkZE9iamVj dFRvRmxhZ1VuZG9MaXN0IChFTEVNRU5UTkFNRV9UWVBFLCBlbGVtZW50LCB0ZXh0LCB0ZXh0KTsK KyAgICAgIEFTU0lHTl9GTEFHIChTRUxFQ1RFREZMQUcsIHNlbGVjdCwgdGV4dCk7CisgICAgfQor ICAgIEVORF9MT09QOworICAgIERyYXdFbGVtZW50TmFtZSAoZWxlbWVudCk7CisgICAgRHJhd0Vs ZW1lbnQgKGVsZW1lbnQpOworCisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICAvKiBOb3RoaW5n IHdhcyBjaGFuZ2VkICovCisgIHJldHVybiBmYWxzZTsKK30KKworYm9vbAorU2VsZWN0RWxlbWVu dChFbGVtZW50VHlwZSogZWxlbWVudCwgYm9vbCBzZWxlY3QpCit7CisgIGlmKCBzZWxlY3RfZWxl bWVudF9ub19kcmF3KGVsZW1lbnQsIHNlbGVjdCkgKSB7CisgICAgSW5jcmVtZW50VW5kb1Nlcmlh bE51bWJlciAoKTsKKyAgICBEcmF3ICgpOworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgcmV0 dXJuIGZhbHNlOworfQorCiBib29sCiBTZWxlY3RPYmplY3RCeU5hbWUgKGludCBUeXBlLCBjaGFy ICpQYXR0ZXJuLCBib29sIHNlbGVjdCkKIHsKQEAgLTg4MCwzOSArOTM0LDExIEBAIFNlbGVjdE9i amVjdEJ5TmFtZSAoaW50IFR5cGUsIGNoYXIgKlBhdHRlcm4sIGJvb2wgc2VsZWN0KQogICBpZiAo UENCLT5FbGVtZW50T24gJiYgKFR5cGUgJiBFTEVNRU5UX1RZUEUpKQogICAgIEVMRU1FTlRfTE9P UCAoUENCLT5EYXRhKTsKICAgewotICAgIGlmICghVEVTVF9GTEFHIChMT0NLRkxBRywgZWxlbWVu dCkKLQkmJiAoKFRFU1RfRkxBRyAoT05TT0xERVJGTEFHLCBlbGVtZW50KSAhPSAwKSA9PSBTV0FQ X0lERU5UCi0JICAgIHx8IFBDQi0+SW52aXNpYmxlT2JqZWN0c09uKQotCSYmIFRFU1RfRkxBRyAo U0VMRUNURURGTEFHLCBlbGVtZW50KSAhPSBzZWxlY3QpCi0gICAgICB7Ci0JU3RyaW5nIG5hbWUg PSBFTEVNRU5UX05BTUUgKFBDQiwgZWxlbWVudCk7Ci0JaWYgKG5hbWUgJiYgUkVHRVhFQyAobmFt ZSkpCi0JICB7Ci0JICAgIEFkZE9iamVjdFRvRmxhZ1VuZG9MaXN0IChFTEVNRU5UX1RZUEUsIGVs ZW1lbnQsIGVsZW1lbnQsIGVsZW1lbnQpOwotCSAgICBBU1NJR05fRkxBRyAoU0VMRUNURURGTEFH LCBzZWxlY3QsIGVsZW1lbnQpOwotCSAgICBQSU5fTE9PUCAoZWxlbWVudCk7Ci0JICAgIHsKLQkg ICAgICBBZGRPYmplY3RUb0ZsYWdVbmRvTGlzdCAoUElOX1RZUEUsIGVsZW1lbnQsIHBpbiwgcGlu KTsKLQkgICAgICBBU1NJR05fRkxBRyAoU0VMRUNURURGTEFHLCBzZWxlY3QsIHBpbik7Ci0JICAg IH0KLQkgICAgRU5EX0xPT1A7Ci0JICAgIFBBRF9MT09QIChlbGVtZW50KTsKLQkgICAgewotCSAg ICAgIEFkZE9iamVjdFRvRmxhZ1VuZG9MaXN0IChQQURfVFlQRSwgZWxlbWVudCwgcGFkLCBwYWQp OwotCSAgICAgIEFTU0lHTl9GTEFHIChTRUxFQ1RFREZMQUcsIHNlbGVjdCwgcGFkKTsKLQkgICAg fQotCSAgICBFTkRfTE9PUDsKLQkgICAgRUxFTUVOVFRFWFRfTE9PUCAoZWxlbWVudCk7Ci0JICAg IHsKLQkgICAgICBBZGRPYmplY3RUb0ZsYWdVbmRvTGlzdCAoRUxFTUVOVE5BTUVfVFlQRSwgZWxl bWVudCwgdGV4dCwgdGV4dCk7Ci0JICAgICAgQVNTSUdOX0ZMQUcgKFNFTEVDVEVERkxBRywgc2Vs ZWN0LCB0ZXh0KTsKLQkgICAgfQotCSAgICBFTkRfTE9PUDsKLQkgICAgRHJhd0VsZW1lbnROYW1l IChlbGVtZW50KTsKLQkgICAgRHJhd0VsZW1lbnQgKGVsZW1lbnQpOwotCSAgICBjaGFuZ2VkID0g dHJ1ZTsKLQkgIH0KLSAgICAgIH0KKyAgICBTdHJpbmcgbmFtZSA9IEVMRU1FTlRfTkFNRSAoUENC LCBlbGVtZW50KTsKKyAgICBpZiAobmFtZSAmJiBSRUdFWEVDIChuYW1lKQorCSYmIHNlbGVjdF9l bGVtZW50X25vX2RyYXcoZWxlbWVudCwgc2VsZWN0KSkgeworICAgICAgY2hhbmdlZCA9IHRydWU7 CisgICAgfQogICB9CiAgIEVORF9MT09QOwogICBpZiAoUENCLT5QaW5PbiAmJiAoVHlwZSAmIFBJ Tl9UWVBFKSkKZGlmZiAtLWdpdCBhL3NyYy9zZWxlY3QuaCBiL3NyYy9zZWxlY3QuaAppbmRleCA0 MGU0NzVkLi4wYzJkN2RlIDEwMDY0NAotLS0gYS9zcmMvc2VsZWN0LmgKKysrIGIvc3JjL3NlbGVj dC5oCkBAIC00Niw0ICs0Niw2IEBAIGJvb2wgU2VsZWN0QnlGbGFnIChpbnQgZmxhZywgYm9vbCBz ZWxlY3QpOwogYm9vbCBTZWxlY3RPYmplY3RCeU5hbWUgKGludCwgY2hhciAqLCBib29sKTsKICNl bmRpZgogCitib29sIFNlbGVjdEVsZW1lbnQoRWxlbWVudFR5cGUqIGVsZW1lbnQsIGJvb2wgc2Vs ZWN0KTsKKwogI2VuZGlmCi0tIAoyLjUuMAoK --=-kDLW01Wybge5FyLAOOGg Content-Disposition: attachment; filename="0003-Add-an-elements-window.patch" Content-Type: text/x-patch; name="0003-Add-an-elements-window.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAxMWUwZDI3ZTExM2U3NWQ1NTNiODcyZDgzYjA0ZDU2ZWZlZjdkNDExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2IgU3BhbnRvbiA8cm9iQHJvYnNwYW50b24uY29tPgpEYXRl OiBUaHUsIDExIEZlYiAyMDE2IDIxOjQ2OjIxICswMDAwClN1YmplY3Q6IFtQQVRDSCAzLzNdIEFk ZCBhbiBlbGVtZW50cyB3aW5kb3cKCkkgZmluZCB0aGF0IEkgYW0gb2Z0ZW4gdHJ5aW5nIHRvIGZp bmQgYSBjb21wb25lbnQsIG9yIGEgc2V0IG9mCmNvbXBvbmVudHMsIG9uIGEgUENCIGJ5IHJlZmRl cy4gIFRoaXMgcGF0Y2ggYWRkcyBhIG5ldyB3aW5kb3cgdG8gUENCCnRoYXQgc2hvd3MgYSBzZWFy Y2hhYmxlIGxpc3Qgb2YgYWxsIGVsZW1lbnRzLiAgRWxlbWVudHMgY2FuIGJlIHNlbGVjdGVkCmlu IHRoYXQgbGlzdCBhbmQgdGhlbiBvcHRpb25hbGx5IHNlbGVjdGVkL2Rlc2VsZWN0ZWQuCgpJIGFt IGhvcGluZyB0byBleHRlbmQgdGhpcyB3aW5kb3cgdG8gcHJvdmlkZSBhY2Nlc3MgdG8sIGFuZCBz ZWFyY2gsIHRoZQphdHRyaWJ1dGVzIG9mIGVsZW1lbnRzIHRvby4KLS0tCiBzcmMvTWFrZWZpbGUu YW0gICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9ncGNiLW1lbnUucmVzLmluICAg ICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2hpZC9ndGsvZ3RraGlkLW1haW4uYyAgICAgICAg ICAgICB8ICAgOSArLQogc3JjL2hpZC9ndGsvZ3VpLWNvbmZpZy5jICAgICAgICAgICAgICB8ICAg MiArCiBzcmMvaGlkL2d0ay9ndWktZWxlbWVudHMtc2VhcmNoLWJhci5jIHwgMTgzICsrKysrKysr KysrKysKIHNyYy9oaWQvZ3RrL2d1aS1lbGVtZW50cy1zZWFyY2gtYmFyLmggfCAgNTkgKysrKwog c3JjL2hpZC9ndGsvZ3VpLWVsZW1lbnRzLXdpbmRvdy5jICAgICB8IDQ5OSArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiBzcmMvaGlkL2d0ay9ndWktZWxlbWVudHMtd2luZG93Lmgg ICAgIHwgIDY1ICsrKysrCiBzcmMvaGlkL2d0ay9ndWkuaCAgICAgICAgICAgICAgICAgICAgIHwg ICAyICsKIDkgZmlsZXMgY2hhbmdlZCwgODIwIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2hpZC9ndGsvZ3VpLWVsZW1lbnRzLXNlYXJjaC1iYXIu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9oaWQvZ3RrL2d1aS1lbGVtZW50cy1zZWFyY2gtYmFy LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaGlkL2d0ay9ndWktZWxlbWVudHMtd2luZG93LmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaGlkL2d0ay9ndWktZWxlbWVudHMtd2luZG93LmgKCmRp ZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KaW5kZXggNjlhNGRm Mi4uOTI4YjliOSAxMDA2NDQKLS0tIGEvc3JjL01ha2VmaWxlLmFtCisrKyBiL3NyYy9NYWtlZmls ZS5hbQpAQCAtMzEwLDYgKzMxMCw4IEBAIExJQkdUS19TUkNTID0gXAogCWhpZC9ndGsvZ3VpLWRp YWxvZy5jIFwKIAloaWQvZ3RrL2d1aS1kcmMtd2luZG93LmMgXAogCWhpZC9ndGsvZ3VpLWRyYy13 aW5kb3cuaCBcCisJaGlkL2d0ay9ndWktZWxlbWVudHMtd2luZG93LmMgXAorCWhpZC9ndGsvZ3Vp LWVsZW1lbnRzLXNlYXJjaC1iYXIuYyBcCiAJaGlkL2d0ay9ndWkta2V5cmVmLXdpbmRvdy5jIFwK IAloaWQvZ3RrL2d1aS1saWJyYXJ5LXdpbmRvdy5jIFwKIAloaWQvZ3RrL2d1aS1saWJyYXJ5LXdp bmRvdy5oIFwKZGlmZiAtLWdpdCBhL3NyYy9ncGNiLW1lbnUucmVzLmluIGIvc3JjL2dwY2ItbWVu dS5yZXMuaW4KaW5kZXggNGNlYTE3OS4uODhiZDlmZSAxMDA2NDQKLS0tIGEvc3JjL2dwY2ItbWVu dS5yZXMuaW4KKysrIGIvc3JjL2dwY2ItbWVudS5yZXMuaW4KQEAgLTQ2MCw2ICs0NjAsNyBAQCBN YWluTWVudSA9CiAgICB7Ik5ldGxpc3QiIERvV2luZG93cyhOZXRsaXN0KX0KICAgIHsiQ29tbWFu ZCBFbnRyeSIgQ29tbWFuZCgpIGE9eyI6IiAiPEtleT46In19CiAgICB7IlBpbm91dCIgRGlzcGxh eShQaW5vdXQpIGE9eyJTaGlmdC1EIiAiU2hpZnQ8S2V5PmQifX0KKyAgIHsiRWxlbWVudHMiIERv V2luZG93cyhFbGVtZW50cyl9CiAgICAtCiAgICB7IkFib3V0Li4uIiBBYm91dCgpfQogICB9CmRp ZmYgLS1naXQgYS9zcmMvaGlkL2d0ay9ndGtoaWQtbWFpbi5jIGIvc3JjL2hpZC9ndGsvZ3RraGlk LW1haW4uYwppbmRleCAxZTIxMGFiLi40MmI4MGZiIDEwMDY0NAotLS0gYS9zcmMvaGlkL2d0ay9n dGtoaWQtbWFpbi5jCisrKyBiL3NyYy9oaWQvZ3RrL2d0a2hpZC1tYWluLmMKQEAgLTE2LDYgKzE2 LDcgQEAKICNpbmNsdWRlICJlcnJvci5oIgogI2luY2x1ZGUgIi4uL2hpZGludC5oIgogI2luY2x1 ZGUgImd1aS5oIgorI2luY2x1ZGUgImd1aS1lbGVtZW50cy13aW5kb3cuaCIKICNpbmNsdWRlICJo aWQvY29tbW9uL2hpZG5vZ3VpLmgiCiAjaW5jbHVkZSAiaGlkL2NvbW1vbi9kcmF3X2hlbHBlcnMu aCIKICNpbmNsdWRlICJwY2ItcHJpbnRmLmgiCkBAIC0xNzI3LDggKzE3MjgsOCBAQCBDdXJzb3JB Y3Rpb24oaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBDb29yZCB4LCBDb29yZCB5KQogLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICov CiAKIHN0YXRpYyBjb25zdCBjaGFyIGRvd2luZG93c19zeW50YXhbXSA9Ci0iRG9XaW5kb3dzKDF8 MnwzfDR8NXw2KVxuIgotIkRvV2luZG93cyhMYXlvdXR8TGlicmFyeXxMb2d8TmV0bGlzdHxQcmVm ZXJlbmNlc3xEUkMpIjsKKyJEb1dpbmRvd3MoMXwyfDN8NHw1fDZ8NylcbiIKKyJEb1dpbmRvd3Mo TGF5b3V0fExpYnJhcnl8TG9nfE5ldGxpc3R8UHJlZmVyZW5jZXN8RFJDfEVsZW1lbnRzKSI7CiAK IHN0YXRpYyBjb25zdCBjaGFyIGRvd2luZG93c19oZWxwW10gPQogTl8oIk9wZW4gdmFyaW91cyBH VUkgd2luZG93cy4iKTsKQEAgLTE3OTQsNiArMTc5NSwxMCBAQCBEb1dpbmRvd3MgKGludCBhcmdj LCBjaGFyICoqYXJndiwgQ29vcmQgeCwgQ29vcmQgeSkKICAgICB7CiAgICAgICBnaGlkX2RyY193 aW5kb3dfc2hvdyAoVFJVRSk7CiAgICAgfQorICBlbHNlIGlmKCBzdHJjbXAgKGEsICI3IikgPT0g MCB8fCBzdHJjYXNlY21wIChhLCAiRWxlbWVudHMiKSA9PSAwICkKKyAgICB7CisgICAgICBnaGlk X2VsZW1lbnRzX3dpbmRvd19zaG93KCk7CisgICAgfQogICBlbHNlCiAgICAgewogICAgICAgQUZB SUwgKGRvd2luZG93cyk7CmRpZmYgLS1naXQgYS9zcmMvaGlkL2d0ay9ndWktY29uZmlnLmMgYi9z cmMvaGlkL2d0ay9ndWktY29uZmlnLmMKaW5kZXggYWE5MWRiZi4uMzBmOTZlYSAxMDA2NDQKLS0t IGEvc3JjL2hpZC9ndGsvZ3VpLWNvbmZpZy5jCisrKyBiL3NyYy9oaWQvZ3RrL2d1aS1jb25maWcu YwpAQCAtMTQ3LDYgKzE0Nyw4IEBAIHN0YXRpYyBDb25maWdBdHRyaWJ1dGUgY29uZmlnX2F0dHJp YnV0ZXNbXSA9IHsKICAgeyJuZXRsaXN0LXdpbmRvdy1oZWlnaHQiLCBDT05GSUdfSW50ZWdlciwg Jl9naGlkZ3VpLm5ldGxpc3Rfd2luZG93X2hlaWdodH0sCiAgIHsia2V5cmVmLXdpbmRvdy13aWR0 aCIsIENPTkZJR19JbnRlZ2VyLCAmX2doaWRndWkua2V5cmVmX3dpbmRvd193aWR0aH0sCiAgIHsi a2V5cmVmLXdpbmRvdy1oZWlnaHQiLCBDT05GSUdfSW50ZWdlciwgJl9naGlkZ3VpLmtleXJlZl93 aW5kb3dfaGVpZ2h0fSwKKyAgeyJlbGVtZW50cy13aW5kb3ctd2lkdGgiLCBDT05GSUdfSW50ZWdl ciwgJl9naGlkZ3VpLmVsZW1lbnRzX3dpbmRvd193aWR0aH0sCisgIHsiZWxlbWVudHMtd2luZG93 LWhlaWdodCIsIENPTkZJR19JbnRlZ2VyLCAmX2doaWRndWkuZWxlbWVudHNfd2luZG93X2hlaWdo dH0sCiAgIHsidGV4dC1zY2FsZSIsIENPTkZJR19VbnVzZWQsIE5VTEx9LAogICB7InZpYS10aGlj a25lc3MiLCBDT05GSUdfVW51c2VkLCBOVUxMfSwKICAgeyJ2aWEtZHJpbGxpbmctaG9sZSIsIENP TkZJR19VbnVzZWQsIE5VTEx9LApkaWZmIC0tZ2l0IGEvc3JjL2hpZC9ndGsvZ3VpLWVsZW1lbnRz LXNlYXJjaC1iYXIuYyBiL3NyYy9oaWQvZ3RrL2d1aS1lbGVtZW50cy1zZWFyY2gtYmFyLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEzZTc0YQotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9oaWQvZ3RrL2d1aS1lbGVtZW50cy1zZWFyY2gtYmFyLmMKQEAgLTAsMCArMSwxODMg QEAKKy8qIGdFREEgLSBHUEwgRWxlY3Ryb25pYyBEZXNpZ24gQXV0b21hdGlvbgorICogQ29weXJp Z2h0IChDKSAyMDE2IFJvYiBTcGFudG9uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5 IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg U29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBN QSAwMjEzOSwgVVNBLgorICoKKyAqIFJvYiBTcGFudG9uOiByb2JAcm9ic3BhbnRvbi5jb20KKyAq LworI2luY2x1ZGUgImdsb2JhbC5oIgorI2luY2x1ZGUgImd1aS1lbGVtZW50cy1zZWFyY2gtYmFy LmgiCisKK0dfREVGSU5FX1RZUEUoR2hpZEVsZW1lbnRzU2VhcmNoQmFyLCBnaGlkX2VsZW1lbnRz X3NlYXJjaF9iYXIsIEdUS19UWVBFX0VOVFJZKTsKKworZW51bSB7CisJUFJPUF9SRUdFWCA9IDEs CisJUFJPUF9DQVNFX1NFTlNJVElWRSwKKwlOX1BST1BFUlRJRVMsCit9OworCisvKiBUaGUgR2hp ZEVsZW1lbnRzU2VhcmNoQmFyIEdPYmplY3QgcHJvcGVydGllcyAqLworc3RhdGljIEdQYXJhbVNw ZWMgKm9ial9wcm9wZXJ0aWVzW05fUFJPUEVSVElFU10gPSB7IE5VTEwsIH07CisKKy8qIEdoaWRF bGVtZW50c1NlYXJjaEJhciBwcm9wZXJ0eSBnZXR0ZXIgKi8KK3N0YXRpYyB2b2lkIGdldF9wcm9w ZXJ0eShHT2JqZWN0ICpvYmplY3QsCisJCQkgZ3VpbnQgcHJvcGVydHlfaWQsCisJCQkgR1ZhbHVl ICp2YWx1ZSwKKwkJCSBHUGFyYW1TcGVjICpwc3BlYykKK3sKKwlHaGlkRWxlbWVudHNTZWFyY2hC YXIgKnNlbGYgPSBHSElEX0VMRU1FTlRTX1NFQVJDSF9CQVIob2JqZWN0KTsKKworCXN3aXRjaChw cm9wZXJ0eV9pZCkgeworCWNhc2UgUFJPUF9SRUdFWDoKKwkJZ192YWx1ZV9zZXRfYm9vbGVhbih2 YWx1ZSwKKwkJCQkgICAgZ3RrX2NoZWNrX21lbnVfaXRlbV9nZXRfYWN0aXZlKEdUS19DSEVDS19N RU5VX0lURU0oc2VsZi0+ZW5hYmxlX3JlZ2V4KSkpOworCQlicmVhazsKKworCWNhc2UgUFJPUF9D QVNFX1NFTlNJVElWRToKKwkJZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwKKwkJCQkgICAgZ3Rr X2NoZWNrX21lbnVfaXRlbV9nZXRfYWN0aXZlKEdUS19DSEVDS19NRU5VX0lURU0oc2VsZi0+Y2Fz ZV9zZW5zZSkpKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlHX09CSkVDVF9XQVJOX0lOVkFM SURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eV9pZCwgcHNwZWMpOworCQlicmVhazsKKwl9 Cit9CisKKy8qIEdoaWRFbGVtZW50c1NlYXJjaEJhckNsYXNzIGluaXRpYWxpc2VyICovCitzdGF0 aWMgdm9pZCBnaGlkX2VsZW1lbnRzX3NlYXJjaF9iYXJfY2xhc3NfaW5pdChHaGlkRWxlbWVudHNT ZWFyY2hCYXJDbGFzcyAqa2xhc3MpCit7CisJR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBH X09CSkVDVF9DTEFTUyhrbGFzcyk7CisKKwlvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdl dF9wcm9wZXJ0eTsKKworCW9ial9wcm9wZXJ0aWVzW1BST1BfUkVHRVhdID0gZ19wYXJhbV9zcGVj X2Jvb2xlYW4oInJlZ2V4IiwKKwkJCQkJCQkgICJSZWdleCBlbmFibGVkIiwKKwkJCQkJCQkgICJX aGV0aGVyIHJlZ3VsYXIgZXhwcmVzc2lvbiBzZWFyY2ggaXMgZW5hYmxlZCIsCisJCQkJCQkJICBU UlVFLAorCQkJCQkJCSAgR19QQVJBTV9SRUFEQUJMRSk7CisKKwlvYmpfcHJvcGVydGllc1tQUk9Q X0NBU0VfU0VOU0lUSVZFXSA9IGdfcGFyYW1fc3BlY19ib29sZWFuKCJjYXNlLXNlbnNpdGl2ZSIs CisJCQkJCQkJCSAgICJDYXNlIHNlbnNpdGl2ZSIsCisJCQkJCQkJCSAgICJXaGV0aGVyIHNlYXJj aCBpcyBjYXNlIHNlbnNpdGl2ZSIsCisJCQkJCQkJCSAgIEZBTFNFLAorCQkJCQkJCQkgICBHX1BB UkFNX1JFQURBQkxFKTsKKworCWdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydGllcyhvYmpl Y3RfY2xhc3MsCisJCQkJCSAgTl9QUk9QRVJUSUVTLAorCQkJCQkgIG9ial9wcm9wZXJ0aWVzKTsK K30KKworLyogQ2FsbGJhY2sgZm9yIHdoZW4gdGhlIHNlYXJjaCBpY29uIGlzIGNsaWNrZWQgKi8K K3N0YXRpYyB2b2lkIHNlYXJjaF9pY29uX2NsaWNrZWQoIEd0a0VudHJ5ICplbnRyeSwKKwkJCQkg R3RrRW50cnlJY29uUG9zaXRpb24gaWNvbl9wb3MsCisJCQkJIEdka0V2ZW50ICpldmVudCwKKwkJ CQkgZ3BvaW50ZXIgX21lbnUgKQoreworCUd0a01lbnUgKm1lbnUgPSBHVEtfTUVOVShfbWVudSk7 CisKKwlpZiggZXZlbnQtPnR5cGUgPT0gR0RLX0JVVFRPTl9QUkVTUyApIHsKKwkJR2RrRXZlbnRC dXR0b24gKmJ1dHRvbiA9IChHZGtFdmVudEJ1dHRvbiopZXZlbnQ7CisJCWd0a19tZW51X3BvcHVw KG1lbnUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkgICAgICAgYnV0dG9uLT5idXR0b24s IGJ1dHRvbi0+dGltZSk7CisJfQorfQorCisvKiBDYWxsYmFjayBmb3Igd2hlbiB0aGUgcmVnZXgg b3B0aW9uIGlzIHRvZ2dsZWQgaW4gdGhlIHNlYXJjaCBtZW51ICovCitzdGF0aWMgdm9pZCByZWdl eF90b2dnbGVkKCBHdGtDaGVja01lbnVJdGVtICppdGVtLAorCQkJICAgZ3BvaW50ZXIgX3NlbGYg KQoreworCUdoaWRFbGVtZW50c1NlYXJjaEJhciAqc2VsZiA9IEdISURfRUxFTUVOVFNfU0VBUkNI X0JBUihfc2VsZik7CisKKwlnX29iamVjdF9ub3RpZnlfYnlfcHNwZWMoIEdfT0JKRUNUKHNlbGYp LAorCQkJCSAgb2JqX3Byb3BlcnRpZXNbUFJPUF9SRUdFWF0gKTsKK30KKworLyogQ2FsbGJhY2sg Zm9yIHdoZW4gY2FzZSBzZW5zaXRpdml0eSBpcyB0b2dnbGVkIGluIHRoZSBzZWFyY2ggbWVudSAq Lworc3RhdGljIHZvaWQgY2FzZV90b2dnbGVkKCBHdGtDaGVja01lbnVJdGVtICppdGVtLAorCQkJ ICBncG9pbnRlciBfc2VsZiApCit7CisJR2hpZEVsZW1lbnRzU2VhcmNoQmFyICpzZWxmID0gR0hJ RF9FTEVNRU5UU19TRUFSQ0hfQkFSKF9zZWxmKTsKKworCWdfb2JqZWN0X25vdGlmeV9ieV9wc3Bl YyggR19PQkpFQ1Qoc2VsZiksCisJCQkJICBvYmpfcHJvcGVydGllc1tQUk9QX0NBU0VfU0VOU0lU SVZFXSApOworfQorCisvKiBDYWxsYmFjayBmb3Igd2hlbiB0aGUgc2VhcmNoIHRleHQgaXMgY2hh bmdlZCAqLworc3RhdGljIHZvaWQgdGV4dF9jaGFuZ2VfY2IoIEd0a0VkaXRhYmxlICplbnRyeSwK KwkJCSAgICBncG9pbnRlciBfdWQgKQoreworCWNvbnN0IGNoYXIqIGljb25fbmFtZSA9IE5VTEw7 CisKKwkvKiBEaXNhYmxlIHRoZSBjbGVhciBidXR0b24gaWYgdGhlcmUgaXMgbm8gdGV4dCAqLwor CWlmKCBndGtfZW50cnlfZ2V0X3RleHRfbGVuZ3RoKEdUS19FTlRSWShlbnRyeSkpID4gMCApIHsK KwkJaWNvbl9uYW1lID0gImVkaXQtY2xlYXIiOworCX0KKworCWd0a19lbnRyeV9zZXRfaWNvbl9m cm9tX2ljb25fbmFtZShHVEtfRU5UUlkoZW50cnkpLAorCQkJCQkgIEdUS19FTlRSWV9JQ09OX1NF Q09OREFSWSwKKwkJCQkJICBpY29uX25hbWUpOworfQorCisvKiBHaGlkRWxlbWVudHNTZWFyY2hC YXIgaW5pdGlhbGlzZXIgKi8KK3N0YXRpYyB2b2lkIGdoaWRfZWxlbWVudHNfc2VhcmNoX2Jhcl9p bml0KEdoaWRFbGVtZW50c1NlYXJjaEJhciAqc2VsZikKK3sKKwlzZWxmLT5tZW51ID0gZ3RrX21l bnVfbmV3KCk7CisKKwlzZWxmLT5lbmFibGVfcmVnZXggPSBndGtfY2hlY2tfbWVudV9pdGVtX25l d193aXRoX2xhYmVsKF8oIlJlZ3VsYXIgRXhwcmVzc2lvbiIpKTsKKwlndGtfY2hlY2tfbWVudV9p dGVtX3NldF9hY3RpdmUoR1RLX0NIRUNLX01FTlVfSVRFTShzZWxmLT5lbmFibGVfcmVnZXgpLCBU UlVFKTsKKwlndGtfbWVudV9zaGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwoc2VsZi0+bWVudSks IHNlbGYtPmVuYWJsZV9yZWdleCk7CisKKworCXNlbGYtPmNhc2Vfc2Vuc2UgPSBndGtfY2hlY2tf bWVudV9pdGVtX25ld193aXRoX2xhYmVsKF8oIkNhc2UgU2Vuc2l0aXZlIikpOworCWd0a19jaGVj a19tZW51X2l0ZW1fc2V0X2FjdGl2ZShHVEtfQ0hFQ0tfTUVOVV9JVEVNKHNlbGYtPmNhc2Vfc2Vu c2UpLCBUUlVFKTsKKwlndGtfbWVudV9zaGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwoc2VsZi0+ bWVudSksIHNlbGYtPmNhc2Vfc2Vuc2UpOworCisKKwlndGtfd2lkZ2V0X3Nob3dfYWxsKHNlbGYt Pm1lbnUpOworCisJZ19zaWduYWxfY29ubmVjdChzZWxmLT5lbmFibGVfcmVnZXgsICJ0b2dnbGVk IiwKKwkJCSBHX0NBTExCQUNLKHJlZ2V4X3RvZ2dsZWQpLCBzZWxmKTsKKwkKKwlnX3NpZ25hbF9j b25uZWN0KHNlbGYtPmNhc2Vfc2Vuc2UsICJ0b2dnbGVkIiwKKwkJCSBHX0NBTExCQUNLKGNhc2Vf dG9nZ2xlZCksIHNlbGYpOworCisJLyogU2V0dXAgdGhlIHNlYXJjaCBpY29uICovCisJZ3RrX2Vu dHJ5X3NldF9pY29uX2Zyb21faWNvbl9uYW1lKEdUS19FTlRSWShzZWxmKSwKKwkJCQkJICBHVEtf RU5UUllfSUNPTl9QUklNQVJZLAorCQkJCQkgICJlZGl0LWZpbmQiKTsKKworCWd0a19lbnRyeV9z ZXRfaWNvbl9hY3RpdmF0YWJsZShHVEtfRU5UUlkoc2VsZiksCisJCQkJICAgICAgIEdUS19FTlRS WV9JQ09OX1BSSU1BUlksCisJCQkJICAgICAgIHRydWUgKTsKKworCS8qIEJyaW5nIHVwIHRoZSBz ZWFyY2ggbWVudSB3aGVuIHRoZSBpY29uIGlzIGNsaWNrZWQgKi8KKwlnX3NpZ25hbF9jb25uZWN0 KHNlbGYsICJpY29uLXByZXNzIiwKKwkJCSBHX0NBTExCQUNLKHNlYXJjaF9pY29uX2NsaWNrZWQp LCBzZWxmLT5tZW51KTsKKworCS8qIE1hbmFnZSB0aGUgY2xlYXIgaWNvbidzIHZpc2liaWxpdHkg Ki8KKwlnX3NpZ25hbF9jb25uZWN0KHNlbGYsICJjaGFuZ2VkIiwKKwkJCSBHX0NBTExCQUNLKHRl eHRfY2hhbmdlX2NiKSwgTlVMTCk7CisKK30KKworLyoqIENyZWF0ZSBhIG5ldyBHaGlkRWxlbWVu dHNTZWFyY2hCYXIuCisgKiBAcmV0dXJuIEEgbmV3IEdoaWRFbGVtZW50c1NlYXJjaEJhciAqLwor R2hpZEVsZW1lbnRzU2VhcmNoQmFyKiBnaGlkX2VsZW1lbnRzX3NlYXJjaF9iYXJfbmV3KHZvaWQp Cit7CisJcmV0dXJuIGdfb2JqZWN0X25ldyhHSElEX1RZUEVfRUxFTUVOVFNfU0VBUkNIX0JBUiwg TlVMTCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvc3JjL2hpZC9ndGsvZ3VpLWVsZW1lbnRzLXNlYXJj aC1iYXIuaCBiL3NyYy9oaWQvZ3RrL2d1aS1lbGVtZW50cy1zZWFyY2gtYmFyLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRlZjk2ZgotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9oaWQvZ3RrL2d1aS1lbGVtZW50cy1zZWFyY2gtYmFyLmgKQEAgLTAsMCArMSw1OSBAQAorLyog Z0VEQSAtIEdQTCBFbGVjdHJvbmljIERlc2lnbiBBdXRvbWF0aW9uCisgKiBDb3B5cmlnaHQgKEMp IDIwMTYgUm9iIFNwYW50b24KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5 LCBVU0EuCisgKgorICogUm9iIFNwYW50b246IHJvYkByb2JzcGFudG9uLmNvbQorICovCisjaWZu ZGVmIFBDQl9ISURfR1RLX0dVSV9FTEVNRU5UU19TRUFSQ0hfQkFSX0gKKyNkZWZpbmUgUENCX0hJ RF9HVEtfR1VJX0VMRU1FTlRTX1NFQVJDSF9CQVJfSAorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+ CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorR19CRUdJTl9ERUNMUworCisvKiBHaGlkRWxlbWVudHNT ZWFyY2hCYXIgKi8KKyNkZWZpbmUgR0hJRF9UWVBFX0VMRU1FTlRTX1NFQVJDSF9CQVIgKGdoaWRf ZWxlbWVudHNfc2VhcmNoX2Jhcl9nZXRfdHlwZSgpKQorI2RlZmluZSBHSElEX0VMRU1FTlRTX1NF QVJDSF9CQVIob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEdISURfVFlQ RV9FTEVNRU5UU19TRUFSQ0hfQkFSLCBHaGlkRWxlbWVudHNTZWFyY2hCYXIpKQorI2RlZmluZSBH SElEX0VMRU1FTlRTX1NFQVJDSF9CQVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf Q0FTVCgoa2xhc3MpLCBHSElEX1RZUEVfRUxFTUVOVFNfU0VBUkNIX0JBUiwgR2hpZEVsZW1lbnRz U2VhcmNoQmFyQ2xhc3MpKQorI2RlZmluZSBHSElEX0lTX0VMRU1FTlRTX1NFQVJDSF9CQVIob2Jq KSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEdISURfVFlQRV9FTEVNRU5UU19T RUFSQ0hfQkFSKSkKKyNkZWZpbmUgR0hJRF9HRVRfRUxFTUVOVFNfU0VBUkNIX0JBUl9DTEFTUyhv YmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBHSElEX1RZUEVfRUxFTUVOVFNf U0VBUkNIX0JBUiwgR2hpZEVsZW1lbnRzU2VhcmNoQmFyQ2xhc3MpKQorCitHVHlwZSBnaGlkX2Vs ZW1lbnRzX3NlYXJjaF9iYXJfZ2V0X3R5cGUgKHZvaWQpOworCit0eXBlZGVmIHN0cnVjdCB7CisJ R3RrRW50cnlDbGFzcyBwYXJlbnRfY2xhc3M7CisKK30gR2hpZEVsZW1lbnRzU2VhcmNoQmFyQ2xh c3M7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlHdGtFbnRyeSBwYXJlbnRfaW5zdGFuY2U7CisKKwkv KioqIFRoZSBwb3B1cCBzZWFyY2ggbWVudSAqKiovCisJR3RrV2lkZ2V0ICptZW51OworCisJLyog RW50cmllcyBpbiB0aGF0IG1lbnU6ICovCisKKwkvKiBUaGUgZW5hYmxlL2Rpc2FibGUgcmVnZXgg b3B0aW9uICovCisJR3RrV2lkZ2V0ICplbmFibGVfcmVnZXg7CisKKwkvKiBUaGUgY2FzZSBzZW5z aXRpdmUgb3B0aW9uICovCisJR3RrV2lkZ2V0ICpjYXNlX3NlbnNlOworCit9IEdoaWRFbGVtZW50 c1NlYXJjaEJhcjsKKworR2hpZEVsZW1lbnRzU2VhcmNoQmFyKiBnaGlkX2VsZW1lbnRzX3NlYXJj aF9iYXJfbmV3KHZvaWQpOworCitHX0VORF9ERUNMUworI2VuZGlmIC8qIFBDQl9ISURfR1RLX0dV SV9FTEVNRU5UU19TRUFSQ0hfQkFSX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9oaWQvZ3RrL2d1aS1l bGVtZW50cy13aW5kb3cuYyBiL3NyYy9oaWQvZ3RrL2d1aS1lbGVtZW50cy13aW5kb3cuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTNiMzM3Ci0tLSAvZGV2L251bGwKKysr IGIvc3JjL2hpZC9ndGsvZ3VpLWVsZW1lbnRzLXdpbmRvdy5jCkBAIC0wLDAgKzEsNDk5IEBACisv KiBnRURBIC0gR1BMIEVsZWN0cm9uaWMgRGVzaWduIEF1dG9tYXRpb24KKyAqIENvcHlyaWdodCAo QykgMjAxNiBSb2IgU3BhbnRvbgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIx MzksIFVTQS4KKyAqCisgKiBSb2IgU3BhbnRvbjogcm9iQHJvYnNwYW50b24uY29tCisgKi8KKyNp bmNsdWRlICJkYXRhLmgiCisjaW5jbHVkZSAiZ2xvYmFsLmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5o PgorI2luY2x1ZGUgImd1aS5oIgorI2luY2x1ZGUgImd1aS1lbGVtZW50cy13aW5kb3cuaCIKKyNp bmNsdWRlICJzZWxlY3QuaCIKKworR19ERUZJTkVfVFlQRShHaGlkRWxlbWVudHNXaW5kb3csIGdo aWRfZWxlbWVudHNfd2luZG93LCBHVEtfVFlQRV9XSU5ET1cpOworCitzdGF0aWMgR2hpZEVsZW1l bnRzV2luZG93KiBlbGVtd2luID0gTlVMTDsKKworLyogVGhlIGNvbHVtbnMgb2Ygb3VyIGxpc3Qg c3RvcmUsIHdoaWNoIHN0b3JlcyBhIGxpc3Qgb2YgZWxlbWVudHMgKi8KK2VudW0geworCS8qIFRo ZSBuYW1lIG9mIHRoZSBlbGVtZW50ICovCisJRUxFTUxJU1RfTkFNRV9DT0xVTU4sCisJLyogUG9p bnRlciB0byB0aGUgZWxlbWVudCBpdHNlbGYgKEVsZW1lbnRUeXBlKikgKi8KKwlFTEVNTElTVF9F TEVNRU5UX1BfQ09MVU1OLAorCS8qIFRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyAqLworCUVM RU1MSVNUX05fQ09MVU1OUywKK307CisKKy8qKiBDYWxsYmFjayBmdW5jdGlvbiBmb3Igc2VsZWN0 aW5nIGFuIGVsZW1lbnQuCisgKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBzZWxlY3Qg Ki8KK3N0YXRpYyB2b2lkIG9wX2VsZW1lbnRfc2VsZWN0KEVsZW1lbnRUeXBlICplbGVtZW50KQor eworCVNlbGVjdEVsZW1lbnQoZWxlbWVudCwgdHJ1ZSk7Cit9CisKKy8qKiBDYWxsYmFjayBmdW5j dGlvbiBmb3IgZGVzZWxlY3RpbmcgYW4gZWxlbWVudC4KKyAqIEBwYXJhbSBlbGVtZW50IFRoZSBl bGVtZW50IHRvIGRlc2VsZWN0ICovCitzdGF0aWMgdm9pZCBvcF9lbGVtZW50X2Rlc2VsZWN0KEVs ZW1lbnRUeXBlICplbGVtZW50KQoreworCVNlbGVjdEVsZW1lbnQoZWxlbWVudCwgZmFsc2UpOwor fQorCisvKiogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGFwcGx5aW5nIHRoZSBnaXZlbiBvcGVyYXRp b24gdG8gdGhlIGdpdmVuCisgKiBpdGVtIGZyb20gdGhlIHRyZWV2aWV3LgorICogQHBhcmFtIG1v ZGVsIFRoZSBtb2RlbCB0aGUgaXRlbSBpcyBzdG9yZWQgaW4uCisgKiBAcGFyYW0gcGF0aCBUaGUg cGF0aCBvZiB0aGUgaXRlbSB3aXRoaW4gdGhlIHN0b3JlLgorICogQHBhcmFtIGl0ZXIgQW4gaXRl ciBwb2ludGluZyB0byB0aGUgaXRlbSBpbiBxdWVzdGlvbi4KKyAqIEBwYXJhbSBfb3AgUG9pbnRl ciB0byBvcGVyYXRpb24gdG8gYXBwbHkgdG8gZWxlbWVudC4gKi8KK3N0YXRpYyB2b2lkIHByb2Nf c2VsZWN0ZWQoIEd0a1RyZWVNb2RlbCAqbW9kZWwsCisJCQkgICBHdGtUcmVlUGF0aCAqcGF0aCwK KwkJCSAgIEd0a1RyZWVJdGVyICppdGVyLAorCQkJICAgZ3BvaW50ZXIgX29wICkKK3sKKwlFbGVt ZW50VHlwZSAqZWxlbWVudDsKKwl2b2lkICgqb3ApIChFbGVtZW50VHlwZSAqZWxlbWVudCkgPSBf b3A7CisKKwlndGtfdHJlZV9tb2RlbF9nZXQobW9kZWwsIGl0ZXIsCisJCQkgICBFTEVNTElTVF9F TEVNRU5UX1BfQ09MVU1OLCAmZWxlbWVudCwgLTEpOworCisJb3AoZWxlbWVudCk7Cit9CisKKy8q KiBDYWxsYmFjayBmdW5jdGlvbiBmb3Igc2VsZWN0IGJ1dHRvbiBjbGljayBldmVudCAqLworc3Rh dGljIHZvaWQgc2VsX2J1dHRvbl9jbGlja2VkKCBHdGtCdXR0b24gKmJ1dHRvbl9zZWxlY3QsIGdw b2ludGVyIF9zZWxmICkKK3sKKwlHaGlkRWxlbWVudHNXaW5kb3cgKnNlbGYgPSBHSElEX0VMRU1F TlRTX1dJTkRPVyhfc2VsZik7CisJR3RrVHJlZVNlbGVjdGlvbiAqc2VsID0gZ3RrX3RyZWVfdmll d19nZXRfc2VsZWN0aW9uKEdUS19UUkVFX1ZJRVcoc2VsZi0+dHJlZXZpZXcpKTsKKworCWd0a190 cmVlX3NlbGVjdGlvbl9zZWxlY3RlZF9mb3JlYWNoKHNlbCwgcHJvY19zZWxlY3RlZCwgb3BfZWxl bWVudF9zZWxlY3QpOworfQorCisvKiogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGRlc2VsZWN0IGJ1 dHRvbiBjbGljayBldmVudCAqLworc3RhdGljIHZvaWQgZGVzZWxfYnV0dG9uX2NsaWNrZWQoIEd0 a0J1dHRvbiAqYnV0dG9uX3NlbGVjdCwgZ3BvaW50ZXIgX3NlbGYgKQoreworCUdoaWRFbGVtZW50 c1dpbmRvdyAqc2VsZiA9IEdISURfRUxFTUVOVFNfV0lORE9XKF9zZWxmKTsKKwlHdGtUcmVlU2Vs ZWN0aW9uICpzZWwgPSBndGtfdHJlZV92aWV3X2dldF9zZWxlY3Rpb24oR1RLX1RSRUVfVklFVyhz ZWxmLT50cmVldmlldykpOworCisJZ3RrX3RyZWVfc2VsZWN0aW9uX3NlbGVjdGVkX2ZvcmVhY2go c2VsLCBwcm9jX3NlbGVjdGVkLCBvcF9lbGVtZW50X2Rlc2VsZWN0KTsKK30KKworLyoqIEZpbHRl ciBmdW5jdGlvbiBmb3IgdGhlIGZpbHRlcmVkIHRyZWUgbW9kZWwuICBSZXR1cm5zIHRydWUgaWYg dGhlCisgKiBpdGVtIGNvbXBsaWVzIHdpdGggdGhlIGN1cnJlbnQgc2VhcmNoIHBhcmFtZXRlcnMu CisgKiBAcGFyYW0gbW9kZWwgVGhlIG1vZGVsIHRvIGZpbHRlciBmcm9tLgorICogQHBhcmFtIGl0 ZXIgVGhlIGl0ZXIgb2YgdGhlIGl0ZW0gdG8gZXhhbWluZS4KKyAqIEBwYXJhbSBfc2VsZiBQb2lu dGVyIHRvIHRoZSBHaGlkRWxlbWVudHNXaW5kb3cgaW5zdGFuY2UuCisgKiBAcmV0dXJuIFdoZXRo ZXIgdG8gaW5jbHVkZSB0aGlzIGl0ZW0gaW4gdGhlIGZpbHRlcmVkIHRyZWUgdmlldy4gKi8KK3N0 YXRpYyBnYm9vbGVhbiBlbGVtbGlzdF9maWx0ZXIoIEd0a1RyZWVNb2RlbCAqbW9kZWwsCisJCQkJ IEd0a1RyZWVJdGVyICppdGVyLAorCQkJCSBncG9pbnRlciBfc2VsZiApCit7CisJY2hhciAqbmFt ZTsKKwlHaGlkRWxlbWVudHNXaW5kb3cgKnNlbGYgPSBHSElEX0VMRU1FTlRTX1dJTkRPVyhfc2Vs Zik7CisJZ2Jvb2xlYW4gcmVnZXhfbW9kZSwgY2FzZV9zZW5zaXRpdmU7CisKKwlndGtfdHJlZV9t b2RlbF9nZXQobW9kZWwsIGl0ZXIsCisJCQkgICBFTEVNTElTVF9OQU1FX0NPTFVNTiwgJm5hbWUs IC0xKTsKKworCWlmKCBuYW1lID09IE5VTEwgKSB7CisJCS8qIFRoaXMgZnVuY3Rpb24gY2FuIGJl IGNhbGxlZCB3aGlsc3QgYW4gZW50cnkgaW4gdGhlCisJCSAqIG1vZGVsIGlzIG5vdCBjb21wbGV0 ZS4gIEF2b2lkIGRpc3BsYXlpbmcKKwkJICogaW5jb21wbGV0ZSBlbnRyaWVzLiAqLworCQlyZXR1 cm4gRkFMU0U7CisJfQorCisJZ19vYmplY3RfZ2V0KHNlbGYtPnNlYXJjaCwKKwkJICAgICAicmVn ZXgiLCAmcmVnZXhfbW9kZSwKKwkJICAgICAiY2FzZS1zZW5zaXRpdmUiLCAmY2FzZV9zZW5zaXRp dmUsCisJCSAgICAgTlVMTCk7CisKKwlpZiggcmVnZXhfbW9kZSApIHsKKwkJaWYoIHNlbGYtPnNl YXJjaF9yZWdleCA9PSBOVUxMICkgeworCQkJLyogQ3VycmVudGx5IG5vIHNlYXJjaCBwYXR0ZXJu LCBzbyBldmVyeXRoaW5nIG1hdGNoZXMgKi8KKwkJCXJldHVybiBUUlVFOworCQl9CisKKwkJcmV0 dXJuIGdfcmVnZXhfbWF0Y2goc2VsZi0+c2VhcmNoX3JlZ2V4LCBuYW1lLCAwLCBOVUxMKTsKKwl9 IGVsc2UgeworCQlib29sIG1hdGNoOworCQljb25zdCBjaGFyKiBuZWVkbGUgPSBndGtfZW50cnlf Z2V0X3RleHQoR1RLX0VOVFJZKHNlbGYtPnNlYXJjaCkpOworCQlnY2hhciAqZl9uZWVkbGUsICpm X2hheXN0YWNrOworCisJCWlmKCBjYXNlX3NlbnNpdGl2ZSApIHsKKwkJCWZfbmVlZGxlID0gKGNo YXIqKW5lZWRsZTsKKwkJCWZfaGF5c3RhY2sgPSBuYW1lOworCQl9IGVsc2UgeworCQkJLyogRm9y IHVuaWNvZGUgY29tcGF0aWJpbGl0eSwgZm9sZCB0aGUgY2FzZSBiZWZvcmUgY29tcGFyaXNvbiAq LworCQkJZl9oYXlzdGFjayA9IGdfdXRmOF9jYXNlZm9sZChuYW1lLCAtMSk7CisJCQlmX25lZWRs ZSA9IGdfdXRmOF9jYXNlZm9sZChuZWVkbGUsIC0xKTsKKwkJfQorCisJCW1hdGNoID0gZ19zdHJz dHJfbGVuKGZfaGF5c3RhY2ssIC0xLCBmX25lZWRsZSk7CisKKwkJaWYoICFjYXNlX3NlbnNpdGl2 ZSApIHsKKwkJCS8qIENhc2UgZm9sZGluZyBhbGxvY2F0ZWQgc3RyaW5ncywgc28gZnJlZSB0aGVt ICovCisJCQlnX2ZyZWUoZl9oYXlzdGFjayk7CisJCQlnX2ZyZWUoZl9uZWVkbGUpOworCQl9CisK KwkJcmV0dXJuIG1hdGNoOworCX0KK30KKworLyoqIENvbXBhcmUgZnVuY3Rpb24gZm9yIHNvcnRp bmcgaXRlbXMgaW4gdGhlIHRyZWV2aWV3IGJ5IG5hbWUuCisgKiBUaGlzIHBlcmZvcm1zIGEgIm5h dHVyYWwiIHNvcnQuCisgKiBAcGFyYW0gbW9kZWwgVGhlIHN0b3JlIHRoYXQgdGhlIGl0ZW1zIGFy ZSBpbi4KKyAqIEBwYXJhbSBhIEl0ZW0gQSB0byBjb21wYXJlLgorICogQHBhcmFtIGIgSXRlbSBC IHRvIGNvbXBhcmUuCisgKiBAcGFyYW0gdWQgVW51c2VkCisgKiBAcmV0dXJuIFNhbWUgYmVoYXZp b3VyIGFzIHN0cmNtcCdzIHJldHVybiB2YWx1ZS4KKyAgKi8KK3N0YXRpYyBnaW50IGVsZW1saXN0 X3NvcnRfbmFtZV9jbXAoIEd0a1RyZWVNb2RlbCAqbW9kZWwsCisJCQkJICAgIEd0a1RyZWVJdGVy ICphLAorCQkJCSAgICBHdGtUcmVlSXRlciAqYiwKKwkJCQkgICAgZ3BvaW50ZXIgdWQgKQorewor CWNvbnN0IGNoYXIgKmFfbmFtZSwgKmJfbmFtZTsKKworCWd0a190cmVlX21vZGVsX2dldChtb2Rl bCwgYSwKKwkJCSAgIEVMRU1MSVNUX05BTUVfQ09MVU1OLCAmYV9uYW1lLCAtMSk7CisJZ3RrX3Ry ZWVfbW9kZWxfZ2V0KG1vZGVsLCBiLAorCQkJICAgRUxFTUxJU1RfTkFNRV9DT0xVTU4sICZiX25h bWUsIC0xKTsKKwkKKwkvKiBzdHJ2ZXJzY21wIGRvZXMgbW9yZSBvZiBhICJuYXR1cmFsIiBzdHJp bmcgc29ydCB0aGFuCisJICogc3RyY21wLiAgVGhpcyBtZWFucyB0aGF0IG5hbWVzIHdpdGggbnVt YmVycyBpbiB3aWxsIHNvcnQKKwkgKiBSMSwgUjIsIFIxMCwgcmF0aGVyIHRoYW4gUjEsIFIxMCwg UjIuCisJICogVGhlcmUgYXJlIGxpa2VseSBsb2NhbGVzIGluIHdoaWNoIHRoaXMgZnVuY3Rpb24g ZG9lcyBub3QgZG8KKwkgKiB0aGUgcmlnaHQgdGhpbmcgLS0gaG93ZXZlciwgbm9uZSBvZiBvdXIg Y3VycmVudAorCSAqIGRlcGVuZGVuY2llcyBwcm92aWRlIGEgYmV0dGVyIG9wdGlvbiB0aGFuIHN0 cnZlcnNjbXAuICovCisJcmV0dXJuIHN0cnZlcnNjbXAoYV9uYW1lLCBiX25hbWUpOworfQorCisv KiogRmluZCBhbiBlbGVtZW50IGluIHRoZSBlbGVtZW50IHN0b3JlLgorICogQHBhcmFtIHN0b3Jl IFRoZSBzdG9yZSB0byBzZWFyY2guCisgKiBAcGFyYW0gbmVlZGxlIFRoZSBlbGVtZW50IHRvIGZp bmQuCisgKiBAcGFyYW0gX2l0ZXIgUG9pbnRlciB0byB0aGUgaXRlciB0byBwb3B1bGF0ZSB3aXRo IHRoZSBsb2NhdGVkCisgKiAgICAgICAgICAgICAgaXRlbS4gIENhbiBiZSBOVUxMIGlmIG5vdCBy ZXF1aXJlZC4KKyAqIEByZXR1cm4gV2hldGhlciB0aGUgZWxlbWVudCB3YXMgZm91bmQuICovCitz dGF0aWMgYm9vbCBlbGVtbGlzdF9maW5kX2VsZW1lbnQoIEd0a1RyZWVNb2RlbCAqc3RvcmUsIAor CQkJCSAgIGNvbnN0IEVsZW1lbnRUeXBlKiBuZWVkbGUsCisJCQkJICAgR3RrVHJlZUl0ZXIgKl9p dGVyICkKK3sKKwlnYm9vbGVhbiB2YWxpZDsKKwlHdGtUcmVlSXRlciBsb2NhbF9pdGVyOworCUd0 a1RyZWVJdGVyICppdGVyID0gJmxvY2FsX2l0ZXI7CisKKwlpZiggX2l0ZXIgIT0gTlVMTCApCisJ CWl0ZXIgPSBfaXRlcjsKKworCXZhbGlkID0gZ3RrX3RyZWVfbW9kZWxfZ2V0X2l0ZXJfZmlyc3Qo c3RvcmUsIGl0ZXIpOworCXdoaWxlKHZhbGlkKSB7CisJCUVsZW1lbnRUeXBlKiBlbGVtZW50Owor CisJCWd0a190cmVlX21vZGVsX2dldChzdG9yZSwgaXRlciwKKwkJCQkgICBFTEVNTElTVF9FTEVN RU5UX1BfQ09MVU1OLCAmZWxlbWVudCwgLTEpOworCisJCWlmKCBlbGVtZW50ID09IG5lZWRsZSAp IHsKKwkJCS8qIEZvdW5kIHRoZSBlbGVtZW50ICovCisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJ CXZhbGlkID0gZ3RrX3RyZWVfbW9kZWxfaXRlcl9uZXh0KHN0b3JlLCBpdGVyKTsKKwl9CisKKwkv KiBOb3QgZm91bmQgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiB1 bm5hbWVkX2VsZW1lbnQgPSAiW05vbmVdIjsKKworLyoqIFN5bmNocm9uaXNlIHRoZSBsaXN0IHN0 b3JlIHdpdGggdGhlIG1haW4gbGlzdCBvZiBlbGVtZW50cy4KKyAqIEBwYXJhbSBzZWxmIFRoZSBH aGlkRWxlbWVudHNXaW5kb3cgaW5zdGFuY2UuICovCitzdGF0aWMgdm9pZCB1cGRhdGVfbGlzdChH aGlkRWxlbWVudHNXaW5kb3cgKnNlbGYpCit7CisJZ2Jvb2xlYW4gdmFsaWQ7CisJR3RrVHJlZUl0 ZXIgaXRlcjsKKworCS8qIEZpbmQgbmV3IGVsZW1lbnRzIHRoYXQgaGF2ZSBhcnJpdmVkICovCisJ RUxFTUVOVF9MT09QKFBDQi0+RGF0YSk7CisJeworCQljb25zdCBjaGFyKiBuYW1lID0gRUxFTUVO VF9OQU1FKFBDQiwgZWxlbWVudCk7CisKKwkJaWYoIGVsZW1saXN0X2ZpbmRfZWxlbWVudChHVEtf VFJFRV9NT0RFTChzZWxmLT5zdG9yZSksIGVsZW1lbnQsICZpdGVyKSApIHsKKwkJCS8qIEVsZW1l bnQgaXMgYWxyZWFkeSBpbiBsaXN0ICovCisJCQkvKiBDaGVjayB0aGF0IGl0cyBuYW1lIGhhc24n dCBjaGFuZ2VkICovCisJCQljaGFyICpvbGRfbmFtZTsKKworCQkJZ3RrX3RyZWVfbW9kZWxfZ2V0 KEdUS19UUkVFX01PREVMKHNlbGYtPnN0b3JlKSwgJml0ZXIsCisJCQkJCSAgIEVMRU1MSVNUX05B TUVfQ09MVU1OLCAmb2xkX25hbWUsIC0xKTsKKworCisJCQlpZiggZ19zdHJjbXAwKG5hbWUsIG9s ZF9uYW1lKSAhPSAwICkgeworCQkJCS8qIE5hbWUgaGFzIGNoYW5nZWQgKi8KKwkJCQlndGtfbGlz dF9zdG9yZV9zZXQoc2VsZi0+c3RvcmUsICZpdGVyLAorCQkJCQkJICAgRUxFTUxJU1RfTkFNRV9D T0xVTU4sIG5hbWUsIC0xKTsKKwkJCX0KKworCQkJZ19mcmVlKG9sZF9uYW1lKTsKKwkJCWNvbnRp bnVlOworCQl9CisKKwkJaWYoIG5hbWUgPT0gTlVMTCApIHsKKwkJCW5hbWUgPSB1bm5hbWVkX2Vs ZW1lbnQ7CisJCX0KKworCQlndGtfbGlzdF9zdG9yZV9hcHBlbmQoc2VsZi0+c3RvcmUsICZpdGVy KTsKKwkJZ3RrX2xpc3Rfc3RvcmVfc2V0KHNlbGYtPnN0b3JlLCAmaXRlciwKKwkJCQkgICBFTEVN TElTVF9OQU1FX0NPTFVNTiwgbmFtZSwKKwkJCQkgICBFTEVNTElTVF9FTEVNRU5UX1BfQ09MVU1O LCBlbGVtZW50LAorCQkJCSAgIC0xKTsKKwl9CisJRU5EX0xPT1A7CisKKwkvKiBGaW5kIGVsZW1l bnRzIHRoYXQgaGF2ZSBkaXNhcHBlYXJlZCAqLworCXZhbGlkID0gZ3RrX3RyZWVfbW9kZWxfZ2V0 X2l0ZXJfZmlyc3QoR1RLX1RSRUVfTU9ERUwoc2VsZi0+c3RvcmUpLCAmaXRlcik7CisJd2hpbGUo dmFsaWQpIHsKKwkJRWxlbWVudFR5cGUqIHN0b3JlX2VsZW1lbnQ7CisJCWJvb2wgZm91bmQgPSBm YWxzZTsKKworCQlndGtfdHJlZV9tb2RlbF9nZXQoR1RLX1RSRUVfTU9ERUwoc2VsZi0+c3RvcmUp LCAmaXRlciwKKwkJCQkgICBFTEVNTElTVF9FTEVNRU5UX1BfQ09MVU1OLCAmc3RvcmVfZWxlbWVu dCwgLTEpOworCisKKwkJLyogRG9lcyB0aGlzIGVsZW1lbnQgZmVhdHVyZSBpbiB0aGUgZWxlbWVu dCBsaXN0PyAqLworCQlFTEVNRU5UX0xPT1AoUENCLT5EYXRhKTsKKwkJeworCQkJaWYoZWxlbWVu dCA9PSBzdG9yZV9lbGVtZW50KSB7CisJCQkJZm91bmQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJ fQorCQl9CisJCUVORF9MT09QOworCisJCWlmKCAhZm91bmQgKSB7CisJCQkvKiBUaGlzIGVsZW1l bnQgbm8gbG9uZ2VyIGV4aXN0cyBpbiB0aGUgdHJlZXZpZXcsIHNvIAorCQkJICAgcmVtb3ZlIGl0 IGZyb20gdGhlIHRyZWV2aWV3ICovCisJCQl2YWxpZCA9IGd0a19saXN0X3N0b3JlX3JlbW92ZShH VEtfTElTVF9TVE9SRShzZWxmLT5zdG9yZSksICZpdGVyKTsKKwkJfSBlbHNlIHsKKwkJCXZhbGlk ID0gZ3RrX3RyZWVfbW9kZWxfaXRlcl9uZXh0KEdUS19UUkVFX01PREVMKHNlbGYtPnN0b3JlKSwg Jml0ZXIpOworCQl9CisJfQorfQorCisvKiogQ3JlYXRlIHRoZSB0cmVldmlldyB3aWRnZXQuCisg KiBAcGFyYW0gc2VsZiBUaGUgR2hpZEVsZW1lbnRzV2luZG93IGluc3RhbmNlLiAqLworc3RhdGlj IHZvaWQgY3JlYXRlX3RyZWV2aWV3KCBHaGlkRWxlbWVudHNXaW5kb3cgKnNlbGYgKQoreworCUd0 a0NlbGxSZW5kZXJlciAqcmVuZGVyZXI7CisJR3RrVHJlZVZpZXdDb2x1bW4gKnZpZXdjb2w7CisJ R3RrVHJlZVNlbGVjdGlvbiAqc2VsOworCisJLyoqKiBFbGVtZW50IGxpc3QgY3JlYXRpb24gKioq LworCisJLyoqIExpc3Qgc3RvcmUgY3JlYXRpb24gKiovCisJLyogVGhpcyBjb250YWlucyB0aGUg ZGF0YSBzaG93biBpbiB0aGUgbGlzdCwgYW5kIGlzIHRoZSBtb2RlbCBpbiB0aGUgTVZDICovCisJ c2VsZi0+c3RvcmUgPSBndGtfbGlzdF9zdG9yZV9uZXcoIEVMRU1MSVNUX05fQ09MVU1OUywKKwkJ CQkJICAvKiBOYW1lICovCisJCQkJCSAgR19UWVBFX1NUUklORywKKwkJCQkJICAvKiBFbGVtZW50 IHBvaW50ZXIgKi8KKwkJCQkJICBHX1RZUEVfUE9JTlRFUiApOworCisJLyogQ3JlYXRlIGEgZmls dGVyZWQgdmVyc2lvbiBvZiB0aGUgbW9kZWwgb24tdG9wIG9mIHRoZSBiYXNlIG1vZGVsICovCisJ c2VsZi0+ZmlsdGVyZWRfc3RvcmUgPSBndGtfdHJlZV9tb2RlbF9maWx0ZXJfbmV3KEdUS19UUkVF X01PREVMKHNlbGYtPnN0b3JlKSwgTlVMTCk7CisKKwlndGtfdHJlZV9tb2RlbF9maWx0ZXJfc2V0 X3Zpc2libGVfZnVuYyhHVEtfVFJFRV9NT0RFTF9GSUxURVIoc2VsZi0+ZmlsdGVyZWRfc3RvcmUp LAorCQkJCQkgICAgICAgZWxlbWxpc3RfZmlsdGVyLCBzZWxmLCBOVUxMKTsKKworCS8qIENyZWF0 ZSBhIHNvcnRlZCB2ZXJzaW9uIG9mIHRoZSBmaWx0ZXJlZCBtb2RlbCAqLworCXNlbGYtPnNvcnRl ZF9zdG9yZSA9IGd0a190cmVlX21vZGVsX3NvcnRfbmV3X3dpdGhfbW9kZWwoR1RLX1RSRUVfTU9E RUwoc2VsZi0+ZmlsdGVyZWRfc3RvcmUpKTsKKworCS8qIERlZmF1bHQgdG8gc29ydGluZyBieSB0 aGUgbmFtZSBjb2x1bW4gKi8KKwlndGtfdHJlZV9zb3J0YWJsZV9zZXRfc29ydF9jb2x1bW5faWQo R1RLX1RSRUVfU09SVEFCTEUoc2VsZi0+c29ydGVkX3N0b3JlKSwKKwkJCQkJICAgICBFTEVNTElT VF9OQU1FX0NPTFVNTiwgR1RLX1NPUlRfQVNDRU5ESU5HKTsKKworCS8qIFNldCB0aGUgc29ydCBm dW5jdGlvbiBmb3IgdGhlIG5hbWUgY29sdW1uICovCisJZ3RrX3RyZWVfc29ydGFibGVfc2V0X3Nv cnRfZnVuYyhHVEtfVFJFRV9TT1JUQUJMRShzZWxmLT5zb3J0ZWRfc3RvcmUpLAorCQkJCQlFTEVN TElTVF9OQU1FX0NPTFVNTiwKKwkJCQkJZWxlbWxpc3Rfc29ydF9uYW1lX2NtcCwgTlVMTCwgTlVM TCk7CisKKwkvKiBQb3B1bGF0ZSB0aGUgbGlzdCAqLworCXVwZGF0ZV9saXN0KHNlbGYpOworCisJ LyoqIENyZWF0ZSB0aGUgdmlldyAqKi8KKwlzZWxmLT5zY3JvbGxlZCA9IGd0a19zY3JvbGxlZF93 aW5kb3dfbmV3KE5VTEwsIE5VTEwpOworCXNlbGYtPnRyZWV2aWV3ID0gZ3RrX3RyZWVfdmlld19u ZXdfd2l0aF9tb2RlbChHVEtfVFJFRV9NT0RFTChzZWxmLT5zb3J0ZWRfc3RvcmUpKTsKKworCWd0 a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoc2VsZi0+c2Nyb2xsZWQpLCBHVEtfV0lER0VU KHNlbGYtPnRyZWV2aWV3KSk7CisJZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19T Q1JPTExFRF9XSU5ET1coc2VsZi0+c2Nyb2xsZWQpLAorCQkJCSAgICAgICBHVEtfUE9MSUNZX0FV VE9NQVRJQywgR1RLX1BPTElDWV9BVVRPTUFUSUMpOworCisJLyogSW5mb3JtIHRoZSB3aWRnZXQg aG93IHRvIHJlbmRlciAqLworCXJlbmRlcmVyID0gZ3RrX2NlbGxfcmVuZGVyZXJfdGV4dF9uZXco KTsKKwl2aWV3Y29sID0gZ3RrX3RyZWVfdmlld19jb2x1bW5fbmV3X3dpdGhfYXR0cmlidXRlcyhf KCJFbGVtZW50IE5hbWUiKSwgcmVuZGVyZXIsCisJCQkJCQkJICAgInRleHQiLCBFTEVNTElTVF9O QU1FX0NPTFVNTiwKKwkJCQkJCQkgICBOVUxMKTsKKwkvKiBTZXQgdGhpcyBjb2x1bW4gdG8gc29y dCBieSBpdHMgb3duIGNvbnRlbnRzLCBhbmQgZW5hYmxlCisJICogY2xpY2thYmxlIGNvbHVtbiBo ZWFkaW5nIHRvIGFkanVzdCBzb3J0aW5nLiAqLworCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF9z b3J0X2NvbHVtbl9pZCh2aWV3Y29sLCBFTEVNTElTVF9OQU1FX0NPTFVNTik7CisJZ3RrX3RyZWVf dmlld19hcHBlbmRfY29sdW1uKEdUS19UUkVFX1ZJRVcoc2VsZi0+dHJlZXZpZXcpLCB2aWV3Y29s KTsKKworCS8qIEFsbG93IG11bHRpcGxlIGl0ZW1zIHRvIGJlIHNlbGVjdGVkICovCisJc2VsID0g Z3RrX3RyZWVfdmlld19nZXRfc2VsZWN0aW9uKEdUS19UUkVFX1ZJRVcoc2VsZi0+dHJlZXZpZXcp KTsKKwlndGtfdHJlZV9zZWxlY3Rpb25fc2V0X21vZGUoc2VsLCBHVEtfU0VMRUNUSU9OX01VTFRJ UExFKTsKK30KKworLyoqIENhbGxiYWNrIGZvciB3aGVuIHRoZSBzZWFyY2ggcGFyYW1ldGVycyBj aGFuZ2UuCisgKiBAcGFyYW0gX3NlbGYgVGhlIEdoaWRFbGVtZW50c1dpbmRvdyBpbnN0YW5jZS4g Ki8KK3N0YXRpYyB2b2lkIHVwZGF0ZV9zZWFyY2goIGdwb2ludGVyICpfc2VsZiApCit7CisJR2hp ZEVsZW1lbnRzV2luZG93ICpzZWxmID0gR0hJRF9FTEVNRU5UU19XSU5ET1coX3NlbGYpOworCWdi b29sZWFuIHJlZ2V4X21vZGUsIGNhc2Vfc2Vuc2l0aXZlOworCisJZ19vYmplY3RfZ2V0KHNlbGYt PnNlYXJjaCwKKwkJICAgICAicmVnZXgiLCAmcmVnZXhfbW9kZSwKKwkJICAgICAiY2FzZS1zZW5z aXRpdmUiLCAmY2FzZV9zZW5zaXRpdmUsCisJCSAgICAgTlVMTCk7CisKKwlpZiggcmVnZXhfbW9k ZSApIHsKKwkJR1JlZ2V4Q29tcGlsZUZsYWdzIGNmbGFncyA9IDA7CisKKwkJaWYoIHNlbGYtPnNl YXJjaF9yZWdleCAhPSBOVUxMICkKKwkJCS8qIEdldCByaWQgb2Ygb2xkIHJlZ2V4ICovCisJCQln X3JlZ2V4X3VucmVmKHNlbGYtPnNlYXJjaF9yZWdleCk7CisJCQorCQlpZiggIWNhc2Vfc2Vuc2l0 aXZlICkgeworCQkJY2ZsYWdzIHw9IEdfUkVHRVhfQ0FTRUxFU1M7CisJCX0KKworCQlzZWxmLT5z ZWFyY2hfcmVnZXggPSBnX3JlZ2V4X25ldyggZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShz ZWxmLT5zZWFyY2gpKSwKKwkJCQkJCSAgY2ZsYWdzLCAwLCBOVUxMICk7CisJfQorCisJZ3RrX3Ry ZWVfbW9kZWxfZmlsdGVyX3JlZmlsdGVyKEdUS19UUkVFX01PREVMX0ZJTFRFUihzZWxmLT5maWx0 ZXJlZF9zdG9yZSkpOworfQorCisvKiogU2hvdyB0aGUgZWxlbWVudHMgd2luZG93LCBjcmVhdGlu ZyBpdCBpZiBuZWNlc3NhcnkuICovCit2b2lkIGdoaWRfZWxlbWVudHNfd2luZG93X3Nob3coIHZv aWQgKQoreworCWlmKCBlbGVtd2luID09IE5VTEwgKSB7CisJCWVsZW13aW4gPSBnX29iamVjdF9u ZXcoR0hJRF9UWVBFX0VMRU1FTlRTX1dJTkRPVywgTlVMTCk7CisJfQorCQorCWd0a193aWRnZXRf c2hvd19hbGwoR1RLX1dJREdFVChlbGVtd2luKSk7CisJZ3RrX3dpbmRvd19wcmVzZW50KEdUS19X SU5ET1coZWxlbXdpbikpOworfQorCisvKiogR2hpZEVsZW1lbnRzV2luZG93Q2xhc3MgaW5pdGlh bGlzZXIgICovCitzdGF0aWMgdm9pZCBnaGlkX2VsZW1lbnRzX3dpbmRvd19jbGFzc19pbml0KEdo aWRFbGVtZW50c1dpbmRvd0NsYXNzICprbGFzcykKK3sKK30KKworLyoqIFdpbmRvdydzICJjb25m aWd1cmUtZXZlbnQiIHNpZ25hbCBoYW5kbGVyICovCitzdGF0aWMgZ2Jvb2xlYW4gd2luZG93X2Nv bmZpZ3VyZV9jYiggR3RrV2lkZ2V0ICp3aWRnZXQsCisJCQkJICAgICBHZGtFdmVudCAqZXZlbnQs CisJCQkJICAgICBncG9pbnRlciB1c2VyX2RhdGEgKQoreworCUd0a0FsbG9jYXRpb24gYWxsb2M7 CisKKwlndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKHdpZGdldCwgJmFsbG9jKTsKKwlnaGlkZ3Vp LT5lbGVtZW50c193aW5kb3dfd2lkdGggPSBhbGxvYy53aWR0aDsKKwlnaGlkZ3VpLT5lbGVtZW50 c193aW5kb3dfaGVpZ2h0ID0gYWxsb2MuaGVpZ2h0OworCWdoaWRndWktPmNvbmZpZ19tb2RpZmll ZCA9IFRSVUU7CisJcmV0dXJuIEZBTFNFOworfQorCisvKiogR2hpZEVsZW1lbnRzV2luZG93IGlu aXRpYWxpc2VyICAqLworc3RhdGljIHZvaWQgZ2hpZF9lbGVtZW50c193aW5kb3dfaW5pdChHaGlk RWxlbWVudHNXaW5kb3cgKnNlbGYpCit7CisJR3RrV2lkZ2V0ICpidXR0b25fc2VsZWN0LCAqYnV0 dG9uX2Rlc2VsLCAqaGJveCwgKnZib3g7CisKKwlzZWxmLT5zZWFyY2hfcmVnZXggPSBOVUxMOwor CisJZ19zaWduYWxfY29ubmVjdChzZWxmLCAiZGVsZXRlLWV2ZW50IiwKKwkJCSBHX0NBTExCQUNL KGd0a193aWRnZXRfaGlkZV9vbl9kZWxldGUpLCBOVUxMKTsKKworCWdfc2lnbmFsX2Nvbm5lY3Qo c2VsZiwgImNvbmZpZ3VyZS1ldmVudCIsCisJCQkgR19DQUxMQkFDSyh3aW5kb3dfY29uZmlndXJl X2NiKSwgTlVMTCk7CisKKwlndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKHNlbGYpLCBf KCJQQ0IgRWxlbWVudHMiKSk7CisKKwkvKiBUaGUgZGVmYXVsdHMgZm9yIHRoZSBzZXR0aW5nIGFy ZSB6ZXJvLCB3aGljaCBpcyBvYnZpb3VzbHkKKwkgKiBub3QgYW4gYXBwcm9wcmlhdGUgd2luZG93 IHNpemUuICovCisJaWYoIGdoaWRndWktPmVsZW1lbnRzX3dpbmRvd19oZWlnaHQgPT0gMCB8fAor CSAgICBnaGlkZ3VpLT5lbGVtZW50c193aW5kb3dfd2lkdGggPT0gMCApIHsKKwkJZ2hpZGd1aS0+ ZWxlbWVudHNfd2luZG93X2hlaWdodCA9IDQwMDsKKwkJZ2hpZGd1aS0+ZWxlbWVudHNfd2luZG93 X3dpZHRoID0gNDAwOworCX0KKworCWd0a193aW5kb3dfcmVzaXplKEdUS19XSU5ET1coc2VsZiks CisJCQkgIGdoaWRndWktPmVsZW1lbnRzX3dpbmRvd193aWR0aCwKKwkJCSAgZ2hpZGd1aS0+ZWxl bWVudHNfd2luZG93X2hlaWdodCk7CisKKwl2Ym94ID0gZ3RrX3Zib3hfbmV3KEZBTFNFLCAwKTsK KwlndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHNlbGYpLCB2Ym94KTsKKworCXNlbGYt PnNlYXJjaCA9IGdoaWRfZWxlbWVudHNfc2VhcmNoX2Jhcl9uZXcoKTsKKworCWd0a19ib3hfcGFj a19zdGFydChHVEtfQk9YKHZib3gpLCBHVEtfV0lER0VUKHNlbGYtPnNlYXJjaCksIGZhbHNlLCB0 cnVlLCAwKTsKKworCWdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChzZWxmLT5zZWFyY2gsICJjaGFu Z2VkIiwKKwkJCQkgR19DQUxMQkFDSyh1cGRhdGVfc2VhcmNoKSwgc2VsZik7CisJZ19zaWduYWxf Y29ubmVjdF9zd2FwcGVkKHNlbGYtPnNlYXJjaCwgIm5vdGlmeTo6cmVnZXgiLAorCQkJCSBHX0NB TExCQUNLKHVwZGF0ZV9zZWFyY2gpLCBzZWxmKTsKKwlnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQo c2VsZi0+c2VhcmNoLCAibm90aWZ5OjpjYXNlLXNlbnNpdGl2ZSIsCisJCQkJIEdfQ0FMTEJBQ0so dXBkYXRlX3NlYXJjaCksIHNlbGYpOworCisJY3JlYXRlX3RyZWV2aWV3KHNlbGYpOworCisJZ3Rr X2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIHNlbGYtPnNjcm9sbGVkLCB0cnVlLCB0cnVl LCAwKTsKKworCWhib3ggPSBndGtfaGJveF9uZXcoRkFMU0UsIDApOworCWd0a19ib3hfcGFja19z dGFydChHVEtfQk9YKHZib3gpLCBoYm94LCBmYWxzZSwgdHJ1ZSwgMCk7CisKKwlidXR0b25fc2Vs ZWN0ID0gZ3RrX2J1dHRvbl9uZXdfd2l0aF9sYWJlbChfKCJTZWxlY3QiKSk7CisJYnV0dG9uX2Rl c2VsID0gZ3RrX2J1dHRvbl9uZXdfd2l0aF9sYWJlbChfKCJEZXNlbGVjdCIpKTsKKworCWd0a19j b250YWluZXJfYWRkKEdUS19DT05UQUlORVIoaGJveCksIGJ1dHRvbl9zZWxlY3QpOworCWdfc2ln bmFsX2Nvbm5lY3QoYnV0dG9uX3NlbGVjdCwgImNsaWNrZWQiLAorCQkJIEdfQ0FMTEJBQ0soc2Vs X2J1dHRvbl9jbGlja2VkKSwgc2VsZik7CisKKwlndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJ TkVSKGhib3gpLCBidXR0b25fZGVzZWwpOworCWdfc2lnbmFsX2Nvbm5lY3QoYnV0dG9uX2Rlc2Vs LCAiY2xpY2tlZCIsCisJCQkgR19DQUxMQkFDSyhkZXNlbF9idXR0b25fY2xpY2tlZCksIHNlbGYp OworfQorCisvKiogSElEIGFjdGlvbiBmdW5jdGlvbiBmb3Igd2hlbiBlbGVtZW50cyBhcmUgbW9k aWZpZWQgKi8KK3N0YXRpYyBpbnQgZWxlbWVudHNfY2hhbmdlZF9jYihpbnQgYXJnYywgY2hhcioq IGFyZ3YsIENvb3JkIHgsIENvb3JkIHkpCit7CisJLyogSWdub3JlIGlmIHRoZSBzdG9yZSBoYXNu J3QgeWV0IGJlZW4gY29uc3RydWN0ZWQKKwkgICAoZS5nLiBpZiB0aGUgd2luZG93IGhhc24ndCBi ZWVuIHNob3duKS4gKi8KKwlpZiggZWxlbXdpbiA9PSBOVUxMICkKKwkJcmV0dXJuIDA7CisKKwl1 cGRhdGVfbGlzdChlbGVtd2luKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIEhJRF9BY3Rpb24g Z2hpZF9lbGVtZW50c193aW5kb3dfYWN0aW9uc1tdID0geworCXsKKwkJLm5hbWUgPSAiRWxlbWVu dHNDaGFuZ2VkIiwKKwkJLm5lZWRfY29vcmRfbXNnID0gTlVMTCwKKwkJLnRyaWdnZXJfY2IgPSBl bGVtZW50c19jaGFuZ2VkX2NiLAorCQkuZGVzY3JpcHRpb24gPSAiVGVsbHMgdGhlIEdVSSB0aGF0 IHRoZSBlbGVtZW50IGxpc3QgaGFzIGNoYW5nZWQiLAorCQkuc3ludGF4ID0gIkVsZW1lbnRzQ2hh bmdlZCgpIiwKKwl9LAorfTsKKworUkVHSVNURVJfQUNUSU9OUyhnaGlkX2VsZW1lbnRzX3dpbmRv d19hY3Rpb25zKTsKZGlmZiAtLWdpdCBhL3NyYy9oaWQvZ3RrL2d1aS1lbGVtZW50cy13aW5kb3cu aCBiL3NyYy9oaWQvZ3RrL2d1aS1lbGVtZW50cy13aW5kb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi4xNzE4NDAzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2hpZC9ndGsv Z3VpLWVsZW1lbnRzLXdpbmRvdy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qIGdFREEgLSBHUEwgRWxl Y3Ryb25pYyBEZXNpZ24gQXV0b21hdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDE2IFJvYiBTcGFu dG9uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz IHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRp b24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAq IFJvYiBTcGFudG9uOiByb2JAcm9ic3BhbnRvbi5jb20KKyAqLworI2lmbmRlZiBQQ0JfSElEX0dU S19HVUlfRUxFTUVOVFNfV0lORE9XX0gKKyNkZWZpbmUgUENCX0hJRF9HVEtfR1VJX0VMRU1FTlRT X1dJTkRPV19ICisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+ CisjaW5jbHVkZSAiZ3VpLWVsZW1lbnRzLXNlYXJjaC1iYXIuaCIKK0dfQkVHSU5fREVDTFMKKwor LyogR2hpZEVsZW1lbnRzV2luZG93ICovCisjZGVmaW5lIEdISURfVFlQRV9FTEVNRU5UU19XSU5E T1cgKGdoaWRfZWxlbWVudHNfd2luZG93X2dldF90eXBlKCkpCisjZGVmaW5lIEdISURfRUxFTUVO VFNfV0lORE9XKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBHSElEX1RZ UEVfRUxFTUVOVFNfV0lORE9XLCBHaGlkRWxlbWVudHNXaW5kb3cpKQorI2RlZmluZSBHSElEX0VM RU1FTlRTX1dJTkRPV19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFz cyksIEdISURfVFlQRV9FTEVNRU5UU19XSU5ET1csIEdoaWRFbGVtZW50c1dpbmRvd0NsYXNzKSkK KyNkZWZpbmUgR0hJRF9JU19FTEVNRU5UU19XSU5ET1cob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RB TkNFX1RZUEUoKG9iaiksIEdISURfVFlQRV9FTEVNRU5UU19XSU5ET1cpKQorI2RlZmluZSBHSElE X0dFVF9FTEVNRU5UU19XSU5ET1dfQ0xBU1Mob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT Uygob2JqKSwgR0hJRF9UWVBFX0VMRU1FTlRTX1dJTkRPVywgR2hpZEVsZW1lbnRzV2luZG93Q2xh c3MpKQorCitHVHlwZSBnaGlkX2VsZW1lbnRzX3dpbmRvd19nZXRfdHlwZSAodm9pZCk7CisKK3R5 cGVkZWYgc3RydWN0IHsKKwlHdGtXaW5kb3dDbGFzcyBwYXJlbnRfY2xhc3M7CisKK30gR2hpZEVs ZW1lbnRzV2luZG93Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlHdGtXaW5kb3cgcGFyZW50 X2luc3RhbmNlOworCisJLyogVGhlIHRyZWV2aWV3IHdpZGdldCAqLworCUd0a1dpZGdldCogdHJl ZXZpZXc7CisKKwkvKiBUaGUgc3RvcmUgd2l0aGluIHdoaWNoIHRoZSBlbGVtZW50IGxpc3QgaXMg aGVsZCAqLworCUd0a0xpc3RTdG9yZSAqc3RvcmU7CisJLyogVGhlIGZpbHRlcmVkIHN0b3JlLCBh bmQgaXRzIHNvcnRlZCB2ZXJzaW9uICovCisJR3RrVHJlZU1vZGVsICpmaWx0ZXJlZF9zdG9yZSwg KnNvcnRlZF9zdG9yZTsKKworCS8qIFRoZSBzY3JvbGxlZCB3aW5kb3cgd2l0aGluIHdoaWNoIHRo ZSB0cmVldmlldyByZXNpZGVzICovCisJR3RrV2lkZ2V0ICpzY3JvbGxlZDsKKworCS8qIFRoZSBz ZWFyY2ggYm94ICovCisJR2hpZEVsZW1lbnRzU2VhcmNoQmFyICpzZWFyY2g7CisKKwkvKiBUaGUg Y29tcGlsZWQgcmVnZXggd2UncmUgc2VhcmNoaW5nIGZvciBub3cgKi8KKwlHUmVnZXggKnNlYXJj aF9yZWdleDsKK30gR2hpZEVsZW1lbnRzV2luZG93OworCit2b2lkIGdoaWRfZWxlbWVudHNfd2lu ZG93X3Nob3coIHZvaWQgKTsKKworR19FTkRfREVDTFMKKyNlbmRpZiAvKiBQQ0JfSElEX0dUS19H VUlfRUxFTUVOVFNfV0lORE9XX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9oaWQvZ3RrL2d1aS5oIGIv c3JjL2hpZC9ndGsvZ3VpLmgKaW5kZXggNGIzNmRhOS4uYjQwNzQwYSAxMDA2NDQKLS0tIGEvc3Jj L2hpZC9ndGsvZ3VpLmgKKysrIGIvc3JjL2hpZC9ndGsvZ3VpLmgKQEAgLTE0OCw2ICsxNDgsOCBA QCB0eXBlZGVmIHN0cnVjdAogICAgIGxpYnJhcnlfd2luZG93X2hlaWdodCwKICAgICBuZXRsaXN0 X3dpbmRvd193aWR0aCwKICAgICBuZXRsaXN0X3dpbmRvd19oZWlnaHQsCisgICAgZWxlbWVudHNf d2luZG93X3dpZHRoLAorICAgIGVsZW1lbnRzX3dpbmRvd19oZWlnaHQsCiAgICAgaGlzdG9yeV9z aXplLAogICAgIHNldHRpbmdzX21vZGU7CiAKLS0gCjIuNS4wCgo= --=-kDLW01Wybge5FyLAOOGg-- --=-IouJQOJRnOQySrdiMlSj Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJWvR4eAAoJELnJXuxeMxduF0IQAJFdrp7DSy5CRgBkdeuagxqc QJF99bYIajLsjsxq3IkysO7xOLv7PfNE1WhINdkELXUwat2JV6wnv4fUKIgQPSYj +bwQ0xXZ7ggOYNNIpo5Z46q7LDATsF4FPQAD8t7pPB+rDgj6l4yN8+D2InnE9KSS ChHknNKGaSlCpJgK3AxtvLKPy6vMZksxU41mCTXmX2v6kkYdgQvKpruPnAGqajLW E1vTW1BiQDkxHC7tzrPfNInS9dVCyDBIovXXSPW+KWz/bcz7DscU6GTu8wtILMk8 dLhuFO+l0Io7sLn1Ddh7xB/r+O47GCdQ3dfYejsf/Hq6qMx5/4qAinigVJR3zBmH eeR4rdfC5NtSGzbAp3bT3jp/WDD/6NRrDZQWHt30qU10n6VAcbFUq2Qwl2VTwBcK s+6bhNP/ob9Sxjx8oY9TK0qlBptI4jfmrpWpiMMY/M+m1xD/PiXgg0XKkeB0pnjd cHEiMsERd9p+OEwKbJzgxbbAuO2JGBpRDBsVF9R0whQ6cWVHcdCmnLevbpUVy+ob WU9m5k1hTbIPniLolCSasRKK3863TddJnAge/C0jNINoJlNn45ZD1Dh5u4w2zvIr nAtaPJf+cmUSRyns+9xIDJJGy3nbHqv8Aejl2JDyc0JVPr/3f6zgHoStrWJbgO1Q 3kQ44d2hcVN5umKkcMH2 =qRg6 -----END PGP SIGNATURE----- --=-IouJQOJRnOQySrdiMlSj--