Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1i0516-0000TJ-Uv for pgsql-hackers@arkaria.postgresql.org; Tue, 20 Aug 2019 14:21:45 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1i0515-00063H-Nl for pgsql-hackers@arkaria.postgresql.org; Tue, 20 Aug 2019 14:21:43 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1i0514-0005pf-81 for pgsql-hackers@lists.postgresql.org; Tue, 20 Aug 2019 14:21:43 +0000 Received: from [66.111.4.26] (helo=out2-smtp.messagingengine.com) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.92) (envelope-from ) id 1i050y-0006Vz-LQ for pgsql-hackers@postgresql.org; Tue, 20 Aug 2019 14:21:41 +0000 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id 2E56021B84 for ; Tue, 20 Aug 2019 10:21:25 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Tue, 20 Aug 2019 10:21:25 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:message-id :mime-version:subject:to:x-me-proxy:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm3; bh=yAA9lMHmoHeBHlWzO13elmhC6CLCX schPRQzr0Jgs3U=; b=qs05dtlNyW2Y6VKKLYL83ktDuv9PY8VUc6PSP6EY2tPck Gr+8Rh1xmBuazriVzcUiFRxQOKK8mSgXmblgxdA7MPBL350wsBmiVE5hHWfjdsaW glFrVjjC503sxy2ottiSYJMUoOOvi9AIaBJ19hRLx+Yzp86J64EPmWmRgEuFLd2H iOcKaeIclJUN3+PwNjrbxywX5EzvHJnAAIGjQHlAgQaHDW37CpEqBWVMvQ3kLwbm grLc/uRvvdVl4EWD2FaIqrsGEvKATUr+MGfOEm8kV2muZ+PGHYPtrLm6qQsG/Evd XJTJo5wz4PWWRx9sLPKvCNZlPFFZZR+CQ9bo+n3sw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduvddrudeguddgjeefucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhuffvohfkffgfgggtsehmtderre dtfeejnecuhfhrohhmpefrvghtvghrucfgihhsvghnthhrrghuthcuoehpvghtvghrrdgv ihhsvghnthhrrghuthesvdhnughquhgrughrrghnthdrtghomheqnecuffhomhgrihhnpe dvnhguqhhurggurhgrnhhtrdgtohhmnecukfhppeelfedrvdegvddrgedtrddvtddvnecu rfgrrhgrmhepmhgrihhlfhhrohhmpehpvghtvghrrdgvihhsvghnthhrrghuthesvdhnug hquhgrughrrghnthdrtghomhenucevlhhushhtvghrufhiiigvpedt X-ME-Proxy: Received: from april.pezone.net (p5df228ca.dip0.t-ipconnect.de [93.242.40.202]) by mail.messagingengine.com (Postfix) with ESMTPA id 565438005B for ; Tue, 20 Aug 2019 10:21:23 -0400 (EDT) From: Peter Eisentraut Subject: ICU for global collation Openpgp: preference=signencrypt Autocrypt: addr=peter.eisentraut@2ndquadrant.com; prefer-encrypt=mutual; keydata= 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 3jI= To: pgsql-hackers Organization: 2ndQuadrant Message-ID: <5e756dd6-0e91-d778-96fd-b1bcb06c161a@2ndquadrant.com> Date: Tue, 20 Aug 2019 16:21:21 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------51A103652852E44284833A35" Content-Language: en-US X-Host-Lookup-Failed: Reverse DNS lookup failed for 66.111.4.26 (deferred) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------51A103652852E44284833A35 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Here is an initial patch to add the option to use ICU as the global collation provider, a long-requested feature. To activate, use something like initdb --collation-provider=icu --locale=... A trick here is that since we need to also still set the normal POSIX locales, the --locale value needs to be valid as both a POSIX locale and a ICU locale. If that doesn't work out, there is also a way to specify it separately, e.g., initdb --collation-provider=icu --locale=en_US.utf8 --icu-locale=en This complexity is unfortunate, but I don't see a way around it right now. There are also options for createdb and CREATE DATABASE to do this for a particular database only. Besides this, the implementation is quite small: When starting up a database, we create an ICU collator object, store it in a global variable, and then use it when appropriate. All the ICU code for creating and invoking those collators already exists of course. For the version tracking, I use the pg_collation row for the "default" collation. Again, this mostly reuses existing code and concepts. Nondeterministic collations are not supported for the global collation, because then LIKE and regular expressions don't work and that breaks some system views. This needs some separate research. To test, run the existing regression tests against a database initialized with ICU. Perhaps some options for pg_regress could facilitate that. I fear that the Localization chapter in the documentation will need a bit of a rewrite after this, because the hitherto separately treated concepts of locale and collation are fusing together. I haven't done that here yet, but that would be the plan for later. -- Peter Eisentraut http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services --------------51A103652852E44284833A35 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="v1-0001-Add-option-to-use-ICU-as-global-collation-provide.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="v1-0001-Add-option-to-use-ICU-as-global-collation-provide.pa"; filename*1="tch" RnJvbSAwNzFhOTU1ZDQ0YjU4OGQ0NjMzMDMwZTdhN2QwNmM1Y2ZiNGZmODM4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogVHVlLCAyMCBBdWcgMjAxOSAxNjowMjo0NiArMDIwMApTdWJqZWN0 OiBbUEFUQ0ggdjFdIEFkZCBvcHRpb24gdG8gdXNlIElDVSBhcyBnbG9iYWwgY29sbGF0aW9u IHByb3ZpZGVyCgpUaGlzIGFkZHMgdGhlIG9wdGlvbiB0byB1c2UgSUNVIGFzIHRoZSBkZWZh dWx0IGNvbGxhdGlvbiBwcm92aWRlciBmb3IKZWl0aGVyIHRoZSB3aG9sZSBjbHVzdGVyIG9y IGEgZGF0YWJhc2UuICBOZXcgb3B0aW9ucyBmb3IgaW5pdGRiLApjcmVhdGVkYiwgYW5kIENS RUFURSBEQVRBQkFTRSBhcmUgdXNlZCB0byBzZWxlY3QgdGhpcy4KLS0tCiBkb2Mvc3JjL3Nn bWwvcmVmL2NyZWF0ZWRiLnNnbWwgICAgICAgfCAgIDkgKysKIGRvYy9zcmMvc2dtbC9yZWYv aW5pdGRiLnNnbWwgICAgICAgICB8ICAyMyArKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNoZnVuYy5jICAgfCAgMTggKystCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kYmNvbW1h bmRzLmMgICAgfCAgNTIgKysrKysrKystCiBzcmMvYmFja2VuZC9yZWdleC9yZWdjX3BnX2xv Y2FsZS5jICAgfCAgIDcgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMg ICB8ICAgNiArCiBzcmMvYmFja2VuZC91dGlscy9hZHQvbGlrZS5jICAgICAgICAgfCAgMjAg KysrLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xpa2Vfc3VwcG9ydC5jIHwgICAyICsKIHNy Yy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYyAgICB8IDE2OCArKysrKysrKysrKysr KysrLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJjaGFyLmMgICAgICB8 ICAyMiArKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jICAgICAgfCAgMjYg KysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYyAgICB8ICAyMSArKysr CiBzcmMvYmluL2luaXRkYi9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2Jp bi9pbml0ZGIvaW5pdGRiLmMgICAgICAgICAgICAgIHwgIDYzICsrKysrKysrLS0KIHNyYy9i aW4vaW5pdGRiL3QvMDAxX2luaXRkYi5wbCAgICAgICB8ICAxOCArKy0KIHNyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICB8ICAxNiArKysKIHNyYy9iaW4vcHNxbC9kZXNj cmliZS5jICAgICAgICAgICAgICB8ICAgOCArKwogc3JjL2Jpbi9zY3JpcHRzL01ha2VmaWxl ICAgICAgICAgICAgIHwgICAyICsKIHNyYy9iaW4vc2NyaXB0cy9jcmVhdGVkYi5jICAgICAg ICAgICB8ICAgOSArKwogc3JjL2Jpbi9zY3JpcHRzL3QvMDIwX2NyZWF0ZWRiLnBsICAgIHwg IDE5ICsrLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19kYXRhYmFzZS5kYXQgIHwgICAyICst CiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2RhdGFiYXNlLmggICAgfCAgIDMgKwogc3JjL2lu Y2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmggICAgICAgIHwgICA2ICsKIDIzIGZpbGVzIGNoYW5n ZWQsIDQxNyBpbnNlcnRpb25zKCspLCAxMDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVkYi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVh dGVkYi5zZ21sCmluZGV4IDhmYzgxMjhiZjkuLjViNzNhZmFkOTEgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9yZWYvY3JlYXRlZGIuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2Ny ZWF0ZWRiLnNnbWwKQEAgLTg1LDYgKzg1LDE1IEBAIDx0aXRsZT5PcHRpb25zPC90aXRsZT4K ICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJs aXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi0tY29sbGF0aW9uLXByb3ZpZGVyPXs8 bGl0ZXJhbD5saWJjPC9saXRlcmFsPnw8bGl0ZXJhbD5pY3U8L2xpdGVyYWw+fTwvb3B0aW9u PjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgU3Bl Y2lmaWVzIHRoZSBjb2xsYXRpb24gcHJvdmlkZXIgZm9yIHRoZSBkYXRhYmFzZS4KKyAgICAg ICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwog ICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tRCA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVzcGFjZTwvcmVwbGFjZWFibGU+PC9vcHRpb24+ PC90ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLXRhYmxlc3BhY2U9PHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlc3BhY2U8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwv dGVybT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvaW5pdGRiLnNnbWwgYi9kb2Mv c3JjL3NnbWwvcmVmL2luaXRkYi5zZ21sCmluZGV4IGRhNWM4ZjUzMDcuLjlhZDdiMmUxMTIg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvaW5pdGRiLnNnbWwKKysrIGIvZG9jL3Ny Yy9zZ21sL3JlZi9pbml0ZGIuc2dtbApAQCAtMTY1LDYgKzE2NSwxOCBAQCA8dGl0bGU+T3B0 aW9uczwvdGl0bGU+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4K IAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWNvbGxhdGlv bi1wcm92aWRlcj17PGxpdGVyYWw+bGliYzwvbGl0ZXJhbD58PGxpdGVyYWw+aWN1PC9saXRl cmFsPn08L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+ CisgICAgICAgIFRoaXMgb3B0aW9uIHNldHMgdGhlIGNvbGxhdGlvbiBwcm92aWRlciBmb3Ig ZGF0YWJhc2VzIGNyZWF0ZWQgaW4gdGhlCisgICAgICAgIG5ldyBjbHVzdGVyLiAgSXQgY2Fu IGJlIG92ZXJyaWRkZW4gaW4gdGhlIDxjb21tYW5kPkNSRUFURQorICAgICAgICBEQVRBQkFT RTwvY29tbWFuZD4gY29tbWFuZCB3aGVuIG5ldyBkYXRhYmFzZXMgYXJlIHN1YnNlcXVlbnRs eQorICAgICAgICBjcmVhdGVkLiAgVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+bGliYzwvbGl0 ZXJhbD4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJs aXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+ LUQgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmRpcmVjdG9yeTwvcmVwbGFjZWFi bGU+PC9vcHRpb24+PC90ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLXBnZGF0YT08cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT48L29w dGlvbj48L3Rlcm0+CkBAIC0yMDksNiArMjIxLDE3IEBAIDx0aXRsZT5PcHRpb25zPC90aXRs ZT4KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2 YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi0taWN1LWxvY2FsZT08cmVwbGFj ZWFibGU+bG9jYWxlPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlz dGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFNwZWNpZmllcyB0aGUgSUNVIGxvY2Fs ZSBpZiB0aGUgSUNVIGNvbGxhdGlvbiBwcm92aWRlciBpcyB1c2VkLiAgSWYKKyAgICAgICAg dGhpcyBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgdmFsdWUgZnJvbSB0aGUgPG9wdGlvbj4tLWxv Y2FsZTwvb3B0aW9uPgorICAgICAgICBvcHRpb24gaXMgdXNlZC4KKyAgICAgICA8L3BhcmE+ CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFy bGlzdGVudHJ5IGlkPSJhcHAtaW5pdGRiLWRhdGEtY2hlY2tzdW1zIiB4cmVmbGFiZWw9ImRh dGEgY2hlY2tzdW1zIj4KICAgICAgIDx0ZXJtPjxvcHRpb24+LWs8L29wdGlvbj48L3Rlcm0+ CiAgICAgICA8dGVybT48b3B0aW9uPi0tZGF0YS1jaGVja3N1bXM8L29wdGlvbj48L3Rlcm0+ CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoZnVuYy5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaGZ1bmMuYwppbmRleCA2ZWMxZWMzZGYzLi4yZjhm MjIwNTQ5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoZnVuYy5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hmdW5jLmMKQEAgLTI1NSw4ICsy NTUsMTMgQEAgaGFzaHRleHQoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkgZXJybXNnKCJjb3Vs ZCBub3QgZGV0ZXJtaW5lIHdoaWNoIGNvbGxhdGlvbiB0byB1c2UgZm9yIHN0cmluZyBoYXNo aW5nIiksCiAJCQkJIGVycmhpbnQoIlVzZSB0aGUgQ09MTEFURSBjbGF1c2UgdG8gc2V0IHRo ZSBjb2xsYXRpb24gZXhwbGljaXRseS4iKSkpOwogCi0JaWYgKCFsY19jb2xsYXRlX2lzX2Mo Y29sbGlkKSAmJiBjb2xsaWQgIT0gREVGQVVMVF9DT0xMQVRJT05fT0lEKQotCQlteWxvY2Fs ZSA9IHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihjb2xsaWQpOworCWlmICghbGNfY29s bGF0ZV9pc19jKGNvbGxpZCkpCisJeworCQlpZiAoY29sbGlkICE9IERFRkFVTFRfQ09MTEFU SU9OX09JRCkKKwkJCW15bG9jYWxlID0gcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0aW9uKGNv bGxpZCk7CisJCWVsc2UgaWYgKGdsb2JhbF9sb2NhbGUucHJvdmlkZXIgPT0gQ09MTFBST1ZJ REVSX0lDVSkKKwkJCW15bG9jYWxlID0gJmdsb2JhbF9sb2NhbGU7CisJfQogCiAJaWYgKCFt eWxvY2FsZSB8fCBteWxvY2FsZS0+ZGV0ZXJtaW5pc3RpYykKIAl7CkBAIC0zMTEsOCArMzE2 LDEzIEBAIGhhc2h0ZXh0ZXh0ZW5kZWQoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkgZXJybXNn KCJjb3VsZCBub3QgZGV0ZXJtaW5lIHdoaWNoIGNvbGxhdGlvbiB0byB1c2UgZm9yIHN0cmlu ZyBoYXNoaW5nIiksCiAJCQkJIGVycmhpbnQoIlVzZSB0aGUgQ09MTEFURSBjbGF1c2UgdG8g c2V0IHRoZSBjb2xsYXRpb24gZXhwbGljaXRseS4iKSkpOwogCi0JaWYgKCFsY19jb2xsYXRl X2lzX2MoY29sbGlkKSAmJiBjb2xsaWQgIT0gREVGQVVMVF9DT0xMQVRJT05fT0lEKQotCQlt eWxvY2FsZSA9IHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihjb2xsaWQpOworCWlmICgh bGNfY29sbGF0ZV9pc19jKGNvbGxpZCkpCisJeworCQlpZiAoY29sbGlkICE9IERFRkFVTFRf Q09MTEFUSU9OX09JRCkKKwkJCW15bG9jYWxlID0gcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0 aW9uKGNvbGxpZCk7CisJCWVsc2UgaWYgKGdsb2JhbF9sb2NhbGUucHJvdmlkZXIgPT0gQ09M TFBST1ZJREVSX0lDVSkKKwkJCW15bG9jYWxlID0gJmdsb2JhbF9sb2NhbGU7CisJfQogCiAJ aWYgKCFteWxvY2FsZSB8fCBteWxvY2FsZS0+ZGV0ZXJtaW5pc3RpYykKIAl7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kYmNvbW1hbmRzLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9kYmNvbW1hbmRzLmMKaW5kZXggOTU4ODFhODU1MC4uYTAwZjA4NjgyZCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGJjb21tYW5kcy5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2RiY29tbWFuZHMuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1 ZGUgImNhdGFsb2cvaW5kZXhpbmcuaCIKICNpbmNsdWRlICJjYXRhbG9nL29iamVjdGFjY2Vz cy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYXV0aGlkLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19jb2xsYXRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RhdGFiYXNlLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19kYl9yb2xlX3NldHRpbmcuaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX3N1YnNjcmlwdGlvbi5oIgpAQCAtODYsNyArODcsOCBAQCBzdGF0aWMgYm9vbCBn ZXRfZGJfaW5mbyhjb25zdCBjaGFyICpuYW1lLCBMT0NLTU9ERSBsb2NrbW9kZSwKIAkJCQkJ CWludCAqZW5jb2RpbmdQLCBib29sICpkYklzVGVtcGxhdGVQLCBib29sICpkYkFsbG93Q29u blAsCiAJCQkJCQlPaWQgKmRiTGFzdFN5c09pZFAsIFRyYW5zYWN0aW9uSWQgKmRiRnJvemVu WGlkUCwKIAkJCQkJCU11bHRpWGFjdElkICpkYk1pbk11bHRpUCwKLQkJCQkJCU9pZCAqZGJU YWJsZXNwYWNlLCBjaGFyICoqZGJDb2xsYXRlLCBjaGFyICoqZGJDdHlwZSk7CisJCQkJCQlP aWQgKmRiVGFibGVzcGFjZSwgY2hhciAqKmRiQ29sbGF0ZSwgY2hhciAqKmRiQ3R5cGUsCisJ CQkJCQljaGFyICpkYkNvbGxQcm92aWRlcik7CiBzdGF0aWMgYm9vbCBoYXZlX2NyZWF0ZWRi X3ByaXZpbGVnZSh2b2lkKTsKIHN0YXRpYyB2b2lkIHJlbW92ZV9kYnRhYmxlc3BhY2VzKE9p ZCBkYl9pZCk7CiBzdGF0aWMgYm9vbCBjaGVja19kYl9maWxlX2NvbmZsaWN0KE9pZCBkYl9p ZCk7CkBAIC0xMDYsNiArMTA4LDcgQEAgY3JlYXRlZGIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBj b25zdCBDcmVhdGVkYlN0bXQgKnN0bXQpCiAJaW50CQkJc3JjX2VuY29kaW5nOwogCWNoYXIJ ICAgKnNyY19jb2xsYXRlOwogCWNoYXIJICAgKnNyY19jdHlwZTsKKwljaGFyCQlzcmNfY29s bHByb3ZpZGVyOwogCWJvb2wJCXNyY19pc3RlbXBsYXRlOwogCWJvb2wJCXNyY19hbGxvd2Nv bm47CiAJT2lkCQkJc3JjX2xhc3RzeXNvaWQ7CkBAIC0xMjcsNiArMTMwLDcgQEAgY3JlYXRl ZGIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBjb25zdCBDcmVhdGVkYlN0bXQgKnN0bXQpCiAJRGVm RWxlbSAgICAqZGxvY2FsZSA9IE5VTEw7CiAJRGVmRWxlbSAgICAqZGNvbGxhdGUgPSBOVUxM OwogCURlZkVsZW0gICAgKmRjdHlwZSA9IE5VTEw7CisJRGVmRWxlbQkgICAqZGNvbGxwcm92 aWRlciA9IE5VTEw7CiAJRGVmRWxlbSAgICAqZGlzdGVtcGxhdGUgPSBOVUxMOwogCURlZkVs ZW0gICAgKmRhbGxvd2Nvbm5lY3Rpb25zID0gTlVMTDsKIAlEZWZFbGVtICAgICpkY29ubmxp bWl0ID0gTlVMTDsKQEAgLTEzNSw2ICsxMzksNyBAQCBjcmVhdGVkYihQYXJzZVN0YXRlICpw c3RhdGUsIGNvbnN0IENyZWF0ZWRiU3RtdCAqc3RtdCkKIAljb25zdCBjaGFyICpkYnRlbXBs YXRlID0gTlVMTDsKIAljaGFyCSAgICpkYmNvbGxhdGUgPSBOVUxMOwogCWNoYXIJICAgKmRi Y3R5cGUgPSBOVUxMOworCWNoYXIJCWRiY29sbHByb3ZpZGVyID0gJ1wwJzsKIAljaGFyCSAg ICpjYW5vbm5hbWU7CiAJaW50CQkJZW5jb2RpbmcgPSAtMTsKIAlib29sCQlkYmlzdGVtcGxh dGUgPSBmYWxzZTsKQEAgLTIxMiw2ICsyMTcsMTUgQEAgY3JlYXRlZGIoUGFyc2VTdGF0ZSAq cHN0YXRlLCBjb25zdCBDcmVhdGVkYlN0bXQgKnN0bXQpCiAJCQkJCQkgcGFyc2VyX2VycnBv c2l0aW9uKHBzdGF0ZSwgZGVmZWwtPmxvY2F0aW9uKSkpOwogCQkJZGN0eXBlID0gZGVmZWw7 CiAJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAiY29sbGF0aW9uX3By b3ZpZGVyIikgPT0gMCkKKwkJeworCQkJaWYgKGRjb2xscHJvdmlkZXIpCisJCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJ CSBlcnJtc2coImNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBvcHRpb25zIiksCisJCQkJCQkg cGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgZGVmZWwtPmxvY2F0aW9uKSkpOworCQkJZGNv bGxwcm92aWRlciA9IGRlZmVsOworCQl9CiAJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVm bmFtZSwgImlzX3RlbXBsYXRlIikgPT0gMCkKIAkJewogCQkJaWYgKGRpc3RlbXBsYXRlKQpA QCAtMzAxLDYgKzMxNSwyMyBAQCBjcmVhdGVkYihQYXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0 IENyZWF0ZWRiU3RtdCAqc3RtdCkKIAkJZGJjb2xsYXRlID0gZGVmR2V0U3RyaW5nKGRjb2xs YXRlKTsKIAlpZiAoZGN0eXBlICYmIGRjdHlwZS0+YXJnKQogCQlkYmN0eXBlID0gZGVmR2V0 U3RyaW5nKGRjdHlwZSk7CisJaWYgKGRjb2xscHJvdmlkZXIgJiYgZGNvbGxwcm92aWRlci0+ YXJnKQorCXsKKwkJY2hhcgkgICAqY29sbHByb3ZpZGVyc3RyID0gZGVmR2V0U3RyaW5nKGRj b2xscHJvdmlkZXIpOworCisjaWZkZWYgVVNFX0lDVQorCQlpZiAocGdfc3RyY2FzZWNtcChj b2xscHJvdmlkZXJzdHIsICJpY3UiKSA9PSAwKQorCQkJZGJjb2xscHJvdmlkZXIgPSBDT0xM UFJPVklERVJfSUNVOworCQllbHNlCisjZW5kaWYKKwkJaWYgKHBnX3N0cmNhc2VjbXAoY29s bHByb3ZpZGVyc3RyLCAibGliYyIpID09IDApCisJCQlkYmNvbGxwcm92aWRlciA9IENPTExQ Uk9WSURFUl9MSUJDOworCQllbHNlCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfT0JKRUNUX0RFRklOSVRJT04pLAorCQkJCQkgZXJybXNnKCJ1 bnJlY29nbml6ZWQgY29sbGF0aW9uIHByb3ZpZGVyOiAlcyIsCisJCQkJCQkJY29sbHByb3Zp ZGVyc3RyKSkpOworCX0KIAlpZiAoZGlzdGVtcGxhdGUgJiYgZGlzdGVtcGxhdGUtPmFyZykK IAkJZGJpc3RlbXBsYXRlID0gZGVmR2V0Qm9vbGVhbihkaXN0ZW1wbGF0ZSk7CiAJaWYgKGRh bGxvd2Nvbm5lY3Rpb25zICYmIGRhbGxvd2Nvbm5lY3Rpb25zLT5hcmcpCkBAIC0zNTAsNyAr MzgxLDcgQEAgY3JlYXRlZGIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBjb25zdCBDcmVhdGVkYlN0 bXQgKnN0bXQpCiAJCQkJCSAmc3JjX2Rib2lkLCAmc3JjX293bmVyLCAmc3JjX2VuY29kaW5n LAogCQkJCQkgJnNyY19pc3RlbXBsYXRlLCAmc3JjX2FsbG93Y29ubiwgJnNyY19sYXN0c3lz b2lkLAogCQkJCQkgJnNyY19mcm96ZW54aWQsICZzcmNfbWlubXhpZCwgJnNyY19kZWZ0YWJs ZXNwYWNlLAotCQkJCQkgJnNyY19jb2xsYXRlLCAmc3JjX2N0eXBlKSkKKwkJCQkJICZzcmNf Y29sbGF0ZSwgJnNyY19jdHlwZSwgJnNyY19jb2xscHJvdmlkZXIpKQogCQllcmVwb3J0KEVS Uk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX0RBVEFCQVNFKSwKIAkJCQkg ZXJybXNnKCJ0ZW1wbGF0ZSBkYXRhYmFzZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QiLApAQCAt Mzc2LDYgKzQwNyw4IEBAIGNyZWF0ZWRiKFBhcnNlU3RhdGUgKnBzdGF0ZSwgY29uc3QgQ3Jl YXRlZGJTdG10ICpzdG10KQogCQlkYmNvbGxhdGUgPSBzcmNfY29sbGF0ZTsKIAlpZiAoZGJj dHlwZSA9PSBOVUxMKQogCQlkYmN0eXBlID0gc3JjX2N0eXBlOworCWlmIChkYmNvbGxwcm92 aWRlciA9PSAnXDAnKQorCQlkYmNvbGxwcm92aWRlciA9IHNyY19jb2xscHJvdmlkZXI7CiAK IAkvKiBTb21lIGVuY29kaW5ncyBhcmUgY2xpZW50IG9ubHkgKi8KIAlpZiAoIVBHX1ZBTElE X0JFX0VOQ09ESU5HKGVuY29kaW5nKSkKQEAgLTM4Myw2ICs0MTYsOCBAQCBjcmVhdGVkYihQ YXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0IENyZWF0ZWRiU3RtdCAqc3RtdCkKIAkJCQkoZXJy Y29kZShFUlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwKIAkJCQkgZXJybXNnKCJpbnZhbGlk IHNlcnZlciBlbmNvZGluZyAlZCIsIGVuY29kaW5nKSkpOwogCisJaWYgKGRiY29sbHByb3Zp ZGVyID09IENPTExQUk9WSURFUl9MSUJDKQorCXsKIAkvKiBDaGVjayB0aGF0IHRoZSBjaG9z ZW4gbG9jYWxlcyBhcmUgdmFsaWQsIGFuZCBnZXQgY2Fub25pY2FsIHNwZWxsaW5ncyAqLwog CWlmICghY2hlY2tfbG9jYWxlKExDX0NPTExBVEUsIGRiY29sbGF0ZSwgJmNhbm9ubmFtZSkp CiAJCWVyZXBvcnQoRVJST1IsCkBAIC0zOTYsNiArNDMxLDcgQEAgY3JlYXRlZGIoUGFyc2VT dGF0ZSAqcHN0YXRlLCBjb25zdCBDcmVhdGVkYlN0bXQgKnN0bXQpCiAJZGJjdHlwZSA9IGNh bm9ubmFtZTsKIAogCWNoZWNrX2VuY29kaW5nX2xvY2FsZV9tYXRjaGVzKGVuY29kaW5nLCBk YmNvbGxhdGUsIGRiY3R5cGUpOworCX0KIAogCS8qCiAJICogQ2hlY2sgdGhhdCB0aGUgbmV3 IGVuY29kaW5nIGFuZCBsb2NhbGUgc2V0dGluZ3MgbWF0Y2ggdGhlIHNvdXJjZQpAQCAtNTU5 LDYgKzU5NSw3IEBAIGNyZWF0ZWRiKFBhcnNlU3RhdGUgKnBzdGF0ZSwgY29uc3QgQ3JlYXRl ZGJTdG10ICpzdG10KQogCQlEaXJlY3RGdW5jdGlvbkNhbGwxKG5hbWVpbiwgQ1N0cmluZ0dl dERhdHVtKGRiY29sbGF0ZSkpOwogCW5ld19yZWNvcmRbQW51bV9wZ19kYXRhYmFzZV9kYXRj dHlwZSAtIDFdID0KIAkJRGlyZWN0RnVuY3Rpb25DYWxsMShuYW1laW4sIENTdHJpbmdHZXRE YXR1bShkYmN0eXBlKSk7CisJbmV3X3JlY29yZFtBbnVtX3BnX2RhdGFiYXNlX2RhdGNvbGxw cm92aWRlciAtIDFdID0gQ2hhckdldERhdHVtKGRiY29sbHByb3ZpZGVyKTsKIAluZXdfcmVj b3JkW0FudW1fcGdfZGF0YWJhc2VfZGF0aXN0ZW1wbGF0ZSAtIDFdID0gQm9vbEdldERhdHVt KGRiaXN0ZW1wbGF0ZSk7CiAJbmV3X3JlY29yZFtBbnVtX3BnX2RhdGFiYXNlX2RhdGFsbG93 Y29ubiAtIDFdID0gQm9vbEdldERhdHVtKGRiYWxsb3djb25uZWN0aW9ucyk7CiAJbmV3X3Jl Y29yZFtBbnVtX3BnX2RhdGFiYXNlX2RhdGNvbm5saW1pdCAtIDFdID0gSW50MzJHZXREYXR1 bShkYmNvbm5saW1pdCk7CkBAIC04MzIsNyArODY5LDcgQEAgZHJvcGRiKGNvbnN0IGNoYXIg KmRibmFtZSwgYm9vbCBtaXNzaW5nX29rKQogCXBnZGJyZWwgPSB0YWJsZV9vcGVuKERhdGFi YXNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CiAKIAlpZiAoIWdldF9kYl9pbmZv KGRibmFtZSwgQWNjZXNzRXhjbHVzaXZlTG9jaywgJmRiX2lkLCBOVUxMLCBOVUxMLAotCQkJ CQkgJmRiX2lzdGVtcGxhdGUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwpKQorCQkJCQkgJmRiX2lzdGVtcGxhdGUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKQogCXsKIAkJaWYgKCFtaXNzaW5nX29rKQogCQl7 CkBAIC0xMDIzLDcgKzEwNjAsNyBAQCBSZW5hbWVEYXRhYmFzZShjb25zdCBjaGFyICpvbGRu YW1lLCBjb25zdCBjaGFyICpuZXduYW1lKQogCXJlbCA9IHRhYmxlX29wZW4oRGF0YWJhc2VS ZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKIAogCWlmICghZ2V0X2RiX2luZm8ob2xk bmFtZSwgQWNjZXNzRXhjbHVzaXZlTG9jaywgJmRiX2lkLCBOVUxMLCBOVUxMLAotCQkJCQkg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkpCisJCQkJ CSBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM KSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9E QVRBQkFTRSksCiAJCQkJIGVycm1zZygiZGF0YWJhc2UgXCIlc1wiIGRvZXMgbm90IGV4aXN0 Iiwgb2xkbmFtZSkpKTsKQEAgLTExMzYsNyArMTE3Myw3IEBAIG1vdmVkYihjb25zdCBjaGFy ICpkYm5hbWUsIGNvbnN0IGNoYXIgKnRibHNwY25hbWUpCiAJcGdkYnJlbCA9IHRhYmxlX29w ZW4oRGF0YWJhc2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKIAogCWlmICghZ2V0 X2RiX2luZm8oZGJuYW1lLCBBY2Nlc3NFeGNsdXNpdmVMb2NrLCAmZGJfaWQsIE5VTEwsIE5V TEwsCi0JCQkJCSBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAmc3JjX3RibHNwY29p ZCwgTlVMTCwgTlVMTCkpCisJCQkJCSBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAm c3JjX3RibHNwY29pZCwgTlVMTCwgTlVMTCwgTlVMTCkpCiAJCWVyZXBvcnQoRVJST1IsCiAJ CQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfREFUQUJBU0UpLAogCQkJCSBlcnJtc2co ImRhdGFiYXNlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsIGRibmFtZSkpKTsKQEAgLTE3Njgs NyArMTgwNSw4IEBAIGdldF9kYl9pbmZvKGNvbnN0IGNoYXIgKm5hbWUsIExPQ0tNT0RFIGxv Y2ttb2RlLAogCQkJaW50ICplbmNvZGluZ1AsIGJvb2wgKmRiSXNUZW1wbGF0ZVAsIGJvb2wg KmRiQWxsb3dDb25uUCwKIAkJCU9pZCAqZGJMYXN0U3lzT2lkUCwgVHJhbnNhY3Rpb25JZCAq ZGJGcm96ZW5YaWRQLAogCQkJTXVsdGlYYWN0SWQgKmRiTWluTXVsdGlQLAotCQkJT2lkICpk YlRhYmxlc3BhY2UsIGNoYXIgKipkYkNvbGxhdGUsIGNoYXIgKipkYkN0eXBlKQorCQkJT2lk ICpkYlRhYmxlc3BhY2UsIGNoYXIgKipkYkNvbGxhdGUsIGNoYXIgKipkYkN0eXBlLAorCQkJ Y2hhciAqZGJDb2xsUHJvdmlkZXIpCiB7CiAJYm9vbAkJcmVzdWx0ID0gZmFsc2U7CiAJUmVs YXRpb24JcmVsYXRpb247CkBAIC0xODY1LDYgKzE5MDMsOCBAQCBnZXRfZGJfaW5mbyhjb25z dCBjaGFyICpuYW1lLCBMT0NLTU9ERSBsb2NrbW9kZSwKIAkJCQkJKmRiQ29sbGF0ZSA9IHBz dHJkdXAoTmFtZVN0cihkYmZvcm0tPmRhdGNvbGxhdGUpKTsKIAkJCQlpZiAoZGJDdHlwZSkK IAkJCQkJKmRiQ3R5cGUgPSBwc3RyZHVwKE5hbWVTdHIoZGJmb3JtLT5kYXRjdHlwZSkpOwor CQkJCWlmIChkYkNvbGxQcm92aWRlcikKKwkJCQkJKmRiQ29sbFByb3ZpZGVyID0gZGJmb3Jt LT5kYXRjb2xscHJvdmlkZXI7CiAJCQkJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKIAkJCQly ZXN1bHQgPSB0cnVlOwogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVn ZXgvcmVnY19wZ19sb2NhbGUuYyBiL3NyYy9iYWNrZW5kL3JlZ2V4L3JlZ2NfcGdfbG9jYWxl LmMKaW5kZXggNGE4MDhiNzYwNi4uNTEwYmQ3MTM3MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcmVnZXgvcmVnY19wZ19sb2NhbGUuYworKysgYi9zcmMvYmFja2VuZC9yZWdleC9yZWdj X3BnX2xvY2FsZS5jCkBAIC0yNDEsNyArMjQxLDEyIEBAIHBnX3NldF9yZWdleF9jb2xsYXRp b24oT2lkIGNvbGxhdGlvbikKIAllbHNlCiAJewogCQlpZiAoY29sbGF0aW9uID09IERFRkFV TFRfQ09MTEFUSU9OX09JRCkKLQkJCXBnX3JlZ2V4X2xvY2FsZSA9IDA7CisJCXsKKwkJCWlm IChnbG9iYWxfbG9jYWxlLnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCisJCQkJcGdf cmVnZXhfbG9jYWxlID0gJmdsb2JhbF9sb2NhbGU7CisJCQllbHNlCisJCQkJcGdfcmVnZXhf bG9jYWxlID0gMDsKKwkJfQogCQllbHNlIGlmIChPaWRJc1ZhbGlkKGNvbGxhdGlvbikpCiAJ CXsKIAkJCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0dGlu Zy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYwppbmRleCBiMzExNWU0 YmVhLi5iYjVhOTkyYjlmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9y bWF0dGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMKQEAg LTE1NzAsNiArMTU3MCw4IEBAIHN0cl90b2xvd2VyKGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVf dCBuYnl0ZXMsIE9pZCBjb2xsaWQpCiAJCQl9CiAJCQlteWxvY2FsZSA9IHBnX25ld2xvY2Fs ZV9mcm9tX2NvbGxhdGlvbihjb2xsaWQpOwogCQl9CisJCWVsc2UgaWYgKGdsb2JhbF9sb2Nh bGUucHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJCW15bG9jYWxlID0gJmdsb2Jh bF9sb2NhbGU7CiAKICNpZmRlZiBVU0VfSUNVCiAJCWlmIChteWxvY2FsZSAmJiBteWxvY2Fs ZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKQEAgLTE2OTMsNiArMTY5NSw4IEBA IHN0cl90b3VwcGVyKGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0ZXMsIE9pZCBjb2xs aWQpCiAJCQl9CiAJCQlteWxvY2FsZSA9IHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihj b2xsaWQpOwogCQl9CisJCWVsc2UgaWYgKGdsb2JhbF9sb2NhbGUucHJvdmlkZXIgPT0gQ09M TFBST1ZJREVSX0lDVSkKKwkJCW15bG9jYWxlID0gJmdsb2JhbF9sb2NhbGU7CiAKICNpZmRl ZiBVU0VfSUNVCiAJCWlmIChteWxvY2FsZSAmJiBteWxvY2FsZS0+cHJvdmlkZXIgPT0gQ09M TFBST1ZJREVSX0lDVSkKQEAgLTE4MTcsNiArMTgyMSw4IEBAIHN0cl9pbml0Y2FwKGNvbnN0 IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0ZXMsIE9pZCBjb2xsaWQpCiAJCQl9CiAJCQlteWxv Y2FsZSA9IHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihjb2xsaWQpOwogCQl9CisJCWVs c2UgaWYgKGdsb2JhbF9sb2NhbGUucHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJ CW15bG9jYWxlID0gJmdsb2JhbF9sb2NhbGU7CiAKICNpZmRlZiBVU0VfSUNVCiAJCWlmICht eWxvY2FsZSAmJiBteWxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlLmMgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvbGlrZS5jCmluZGV4IDEzZDVjYjA4M2MuLjU3ZGQzZmU1OWQgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2xpa2UuYwpAQCAtMTUwLDkgKzE1MCwxNCBAQCBTQl9sb3dlcl9jaGFyKHVuc2ln bmVkIGNoYXIgYywgcGdfbG9jYWxlX3QgbG9jYWxlLCBib29sIGxvY2FsZV9pc19jKQogc3Rh dGljIGlubGluZSBpbnQKIEdlbmVyaWNNYXRjaFRleHQoY29uc3QgY2hhciAqcywgaW50IHNs ZW4sIGNvbnN0IGNoYXIgKnAsIGludCBwbGVuLCBPaWQgY29sbGF0aW9uKQogewotCWlmIChj b2xsYXRpb24gJiYgIWxjX2N0eXBlX2lzX2MoY29sbGF0aW9uKSAmJiBjb2xsYXRpb24gIT0g REVGQVVMVF9DT0xMQVRJT05fT0lEKQorCWlmIChjb2xsYXRpb24gJiYgIWxjX2N0eXBlX2lz X2MoY29sbGF0aW9uKSkKIAl7Ci0JCXBnX2xvY2FsZV90IGxvY2FsZSA9IHBnX25ld2xvY2Fs ZV9mcm9tX2NvbGxhdGlvbihjb2xsYXRpb24pOworCQlwZ19sb2NhbGVfdCBsb2NhbGUgPSAw OworCisJCWlmIChjb2xsYXRpb24gIT0gREVGQVVMVF9DT0xMQVRJT05fT0lEKQorCQkJbG9j YWxlID0gcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0aW9uKGNvbGxhdGlvbik7CisJCWVsc2Ug aWYgKGdsb2JhbF9sb2NhbGUucHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJCWxv Y2FsZSA9ICZnbG9iYWxfbG9jYWxlOwogCiAJCWlmIChsb2NhbGUgJiYgIWxvY2FsZS0+ZGV0 ZXJtaW5pc3RpYykKIAkJCWVyZXBvcnQoRVJST1IsCkBAIC0xOTUsMTEgKzIwMCwxNCBAQCBH ZW5lcmljX1RleHRfSUNfbGlrZSh0ZXh0ICpzdHIsIHRleHQgKnBhdCwgT2lkIGNvbGxhdGlv bikKIAkJfQogCQlsb2NhbGUgPSBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oY29sbGF0 aW9uKTsKIAotCQlpZiAobG9jYWxlICYmICFsb2NhbGUtPmRldGVybWluaXN0aWMpCi0JCQll cmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBP UlRFRCksCi0JCQkJCSBlcnJtc2coIm5vbmRldGVybWluaXN0aWMgY29sbGF0aW9ucyBhcmUg bm90IHN1cHBvcnRlZCBmb3IgSUxJS0UiKSkpOwogCX0KKwllbHNlIGlmIChnbG9iYWxfbG9j YWxlLnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCisJCWxvY2FsZSA9ICZnbG9iYWxf bG9jYWxlOworCisJaWYgKGxvY2FsZSAmJiAhbG9jYWxlLT5kZXRlcm1pbmlzdGljKQorCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9S VEVEKSwKKwkJCQkgZXJybXNnKCJub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbnMgYXJlIG5v dCBzdXBwb3J0ZWQgZm9yIElMSUtFIikpKTsKIAogCS8qCiAJICogRm9yIGVmZmljaWVuY3kg cmVhc29ucywgaW4gdGhlIHNpbmdsZSBieXRlIGNhc2Ugd2UgZG9uJ3QgY2FsbCBsb3dlcigp CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbGlrZV9zdXBwb3J0LmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvbGlrZV9zdXBwb3J0LmMKaW5kZXggYzhmZWM3ODYzZi4u MDlhMjhhYWI4ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xpa2Vfc3Vw cG9ydC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlX3N1cHBvcnQuYwpAQCAt OTY2LDYgKzk2Niw4IEBAIGxpa2VfZml4ZWRfcHJlZml4KENvbnN0ICpwYXR0X2NvbnN0LCBi b29sIGNhc2VfaW5zZW5zaXRpdmUsIE9pZCBjb2xsYXRpb24sCiAJCQl9CiAJCQlsb2NhbGUg PSBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oY29sbGF0aW9uKTsKIAkJfQorCQllbHNl IGlmIChnbG9iYWxfbG9jYWxlLnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCisJCQls b2NhbGUgPSAmZ2xvYmFsX2xvY2FsZTsKIAl9CiAKIAlpZiAodHlwZWlkICE9IEJZVEVBT0lE KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCmluZGV4IGIyZjA4ZWFkNDUuLjE2ODg5 MGI2ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMKQEAgLTEyMDYsNiArMTIw Niw5IEBAIGxjX2NvbGxhdGVfaXNfYyhPaWQgY29sbGF0aW9uKQogCQlzdGF0aWMgaW50CXJl c3VsdCA9IC0xOwogCQljaGFyCSAgICpsb2NhbGVwdHI7CiAKKwkJaWYgKGdsb2JhbF9sb2Nh bGUucHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJCXJldHVybiBmYWxzZTsKKwog CQlpZiAocmVzdWx0ID49IDApCiAJCQlyZXR1cm4gKGJvb2wpIHJlc3VsdDsKIAkJbG9jYWxl cHRyID0gc2V0bG9jYWxlKExDX0NPTExBVEUsIE5VTEwpOwpAQCAtMTI1Niw2ICsxMjU5LDkg QEAgbGNfY3R5cGVfaXNfYyhPaWQgY29sbGF0aW9uKQogCQlzdGF0aWMgaW50CXJlc3VsdCA9 IC0xOwogCQljaGFyCSAgICpsb2NhbGVwdHI7CiAKKwkJaWYgKGdsb2JhbF9sb2NhbGUucHJv dmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJCXJldHVybiBmYWxzZTsKKwogCQlpZiAo cmVzdWx0ID49IDApCiAJCQlyZXR1cm4gKGJvb2wpIHJlc3VsdDsKIAkJbG9jYWxlcHRyID0g c2V0bG9jYWxlKExDX0NUWVBFLCBOVUxMKTsKQEAgLTEyODQsNiArMTI5MCw4OSBAQCBsY19j dHlwZV9pc19jKE9pZCBjb2xsYXRpb24pCiAJcmV0dXJuIChsb29rdXBfY29sbGF0aW9uX2Nh Y2hlKGNvbGxhdGlvbiwgdHJ1ZSkpLT5jdHlwZV9pc19jOwogfQogCitzdHJ1Y3QgcGdfbG9j YWxlX3N0cnVjdCBnbG9iYWxfbG9jYWxlOworCit2b2lkCittYWtlX2ljdV9jb2xsYXRvcihj b25zdCBjaGFyICpjb2xsY29sbGF0ZSwgY29uc3QgY2hhciAqY29sbGN0eXBlLAorCQkJCSAg c3RydWN0IHBnX2xvY2FsZV9zdHJ1Y3QgKnJlc3VsdHApCit7CisjaWZkZWYgVVNFX0lDVQor CVVDb2xsYXRvciAgKmNvbGxhdG9yOworCVVFcnJvckNvZGUJc3RhdHVzOworCisJaWYgKHN0 cmNtcChjb2xsY29sbGF0ZSwgY29sbGN0eXBlKSAhPSAwKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkgZXJy bXNnKCJjb2xsYXRpb25zIHdpdGggZGlmZmVyZW50IGNvbGxhdGUgYW5kIGN0eXBlIHZhbHVl cyBhcmUgbm90IHN1cHBvcnRlZCBieSBJQ1UiKSkpOworCisJc3RhdHVzID0gVV9aRVJPX0VS Uk9SOworCWNvbGxhdG9yID0gdWNvbF9vcGVuKGNvbGxjb2xsYXRlLCAmc3RhdHVzKTsKKwlp ZiAoVV9GQUlMVVJFKHN0YXR1cykpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygi Y291bGQgbm90IG9wZW4gY29sbGF0b3IgZm9yIGxvY2FsZSBcIiVzXCI6ICVzIiwKKwkJCQkJ CWNvbGxjb2xsYXRlLCB1X2Vycm9yTmFtZShzdGF0dXMpKSkpOworCisJaWYgKFVfSUNVX1ZF UlNJT05fTUFKT1JfTlVNIDwgNTQpCisJCWljdV9zZXRfY29sbGF0aW9uX2F0dHJpYnV0ZXMo Y29sbGF0b3IsIGNvbGxjb2xsYXRlKTsKKworCS8qIFdlIHdpbGwgbGVhayB0aGlzIHN0cmlu ZyBpZiB3ZSBnZXQgYW4gZXJyb3IgYmVsb3cgOi0oICovCisJcmVzdWx0cC0+aW5mby5pY3Uu bG9jYWxlID0gTWVtb3J5Q29udGV4dFN0cmR1cChUb3BNZW1vcnlDb250ZXh0LAorCQkJCQkJ CQkJCQkJCQkgICBjb2xsY29sbGF0ZSk7CisJcmVzdWx0cC0+aW5mby5pY3UudWNvbCA9IGNv bGxhdG9yOworI2Vsc2UJCQkJCQkJLyogbm90IFVTRV9JQ1UgKi8KKwkvKiBjb3VsZCBnZXQg aGVyZSBpZiBhIGNvbGxhdGlvbiB3YXMgY3JlYXRlZCBieSBhIGJ1aWxkIHdpdGggSUNVICov CisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQ UE9SVEVEKSwKKwkJCSBlcnJtc2coIklDVSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnVp bGQiKSwgXAorCQkJIGVycmhpbnQoIllvdSBuZWVkIHRvIHJlYnVpbGQgUG9zdGdyZVNRTCB1 c2luZyAtLXdpdGgtaWN1LiIpKSk7CisjZW5kaWYJCQkJCQkJLyogbm90IFVTRV9JQ1UgKi8K K30KKwordm9pZAorY2hlY2tfY29sbGF0aW9uX3ZlcnNpb24oSGVhcFR1cGxlIGNvbGx0dXBs ZSkKK3sKKwlGb3JtX3BnX2NvbGxhdGlvbiBjb2xsZm9ybTsKKwlEYXR1bQkJY29sbHZlcnNp b247CisJYm9vbAkJaXNudWxsOworCisJY29sbGZvcm0gPSAoRm9ybV9wZ19jb2xsYXRpb24p IEdFVFNUUlVDVChjb2xsdHVwbGUpOworCisJY29sbHZlcnNpb24gPSBTeXNDYWNoZUdldEF0 dHIoQ09MTE9JRCwgY29sbHR1cGxlLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsdmVyc2lvbiwK KwkJCQkJCQkJICAmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCWNoYXIJICAgKmFj dHVhbF92ZXJzaW9uc3RyOworCQljaGFyCSAgICpjb2xsdmVyc2lvbnN0cjsKKworCQlhY3R1 YWxfdmVyc2lvbnN0ciA9IGdldF9jb2xsYXRpb25fYWN0dWFsX3ZlcnNpb24oY29sbGZvcm0t PmNvbGxwcm92aWRlciwKKwkJCQkJCQkJCQkJCQkJIE5hbWVTdHIoY29sbGZvcm0tPmNvbGxj b2xsYXRlKSk7CisJCWlmICghYWN0dWFsX3ZlcnNpb25zdHIpCisJCXsKKwkJCS8qCisJCQkg KiBUaGlzIGNvdWxkIGhhcHBlbiB3aGVuIHNwZWNpZnlpbmcgYSB2ZXJzaW9uIGluIENSRUFU RQorCQkJICogQ09MTEFUSU9OIGZvciBhIGxpYmMgbG9jYWxlLCBvciBtYW51YWxseSBjcmVh dGluZyBhIG1lc3MgaW4KKwkJCSAqIHRoZSBjYXRhbG9ncy4KKwkJCSAqLworCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJKGVycm1zZygiY29sbGF0aW9uIFwiJXNcIiBoYXMgbm8gYWN0dWFs IHZlcnNpb24sIGJ1dCBhIHZlcnNpb24gd2FzIHNwZWNpZmllZCIsCisJCQkJCQkJTmFtZVN0 cihjb2xsZm9ybS0+Y29sbG5hbWUpKSkpOworCQl9CisJCWNvbGx2ZXJzaW9uc3RyID0gVGV4 dERhdHVtR2V0Q1N0cmluZyhjb2xsdmVyc2lvbik7CisKKwkJaWYgKHN0cmNtcChhY3R1YWxf dmVyc2lvbnN0ciwgY29sbHZlcnNpb25zdHIpICE9IDApCisJCQllcmVwb3J0KFdBUk5JTkcs CisJCQkJCShlcnJtc2coImNvbGxhdGlvbiBcIiVzXCIgaGFzIHZlcnNpb24gbWlzbWF0Y2gi LAorCQkJCQkJCU5hbWVTdHIoY29sbGZvcm0tPmNvbGxuYW1lKSksCisJCQkJCSBlcnJkZXRh aWwoIlRoZSBjb2xsYXRpb24gaW4gdGhlIGRhdGFiYXNlIHdhcyBjcmVhdGVkIHVzaW5nIHZl cnNpb24gJXMsICIKKwkJCQkJCQkgICAiYnV0IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHByb3Zp ZGVzIHZlcnNpb24gJXMuIiwKKwkJCQkJCQkgICBjb2xsdmVyc2lvbnN0ciwgYWN0dWFsX3Zl cnNpb25zdHIpLAorCQkJCQkgZXJyaGludCgiUmVidWlsZCBhbGwgb2JqZWN0cyBhZmZlY3Rl ZCBieSB0aGlzIGNvbGxhdGlvbiBhbmQgcnVuICIKKwkJCQkJCQkgIkFMVEVSIENPTExBVElP TiAlcyBSRUZSRVNIIFZFUlNJT04sICIKKwkJCQkJCQkgIm9yIGJ1aWxkIFBvc3RncmVTUUwg d2l0aCB0aGUgcmlnaHQgbGlicmFyeSB2ZXJzaW9uLiIsCisJCQkJCQkJIHF1b3RlX3F1YWxp ZmllZF9pZGVudGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZShjb2xsZm9ybS0+Y29sbG5hbWVz cGFjZSksCisJCQkJCQkJCQkJCQkJCU5hbWVTdHIoY29sbGZvcm0tPmNvbGxuYW1lKSkpKSk7 CisJfQorfQogCiAvKiBzaW1wbGUgc3Vicm91dGluZSBmb3IgcmVwb3J0aW5nIGVycm9ycyBm cm9tIG5ld2xvY2FsZSgpICovCiAjaWZkZWYgSEFWRV9MT0NBTEVfVApAQCAtMTM1Nyw4ICsx NDQ2LDYgQEAgcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0aW9uKE9pZCBjb2xsaWQpCiAJCWNv bnN0IGNoYXIgKmNvbGxjdHlwZSBwZ19hdHRyaWJ1dGVfdW51c2VkKCk7CiAJCXN0cnVjdCBw Z19sb2NhbGVfc3RydWN0IHJlc3VsdDsKIAkJcGdfbG9jYWxlX3QgcmVzdWx0cDsKLQkJRGF0 dW0JCWNvbGx2ZXJzaW9uOwotCQlib29sCQlpc251bGw7CiAKIAkJdHAgPSBTZWFyY2hTeXND YWNoZTEoQ09MTE9JRCwgT2JqZWN0SWRHZXREYXR1bShjb2xsaWQpKTsKIAkJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHRwKSkKQEAgLTE0MjgsNzIgKzE1MTUsMTAgQEAgcGdfbmV3bG9jYWxl X2Zyb21fY29sbGF0aW9uKE9pZCBjb2xsaWQpCiAJCX0KIAkJZWxzZSBpZiAoY29sbGZvcm0t PmNvbGxwcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQogCQl7Ci0jaWZkZWYgVVNFX0lD VQotCQkJVUNvbGxhdG9yICAqY29sbGF0b3I7Ci0JCQlVRXJyb3JDb2RlCXN0YXR1czsKLQot CQkJaWYgKHN0cmNtcChjb2xsY29sbGF0ZSwgY29sbGN0eXBlKSAhPSAwKQotCQkJCWVyZXBv cnQoRVJST1IsCi0JCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRF RCksCi0JCQkJCQkgZXJybXNnKCJjb2xsYXRpb25zIHdpdGggZGlmZmVyZW50IGNvbGxhdGUg YW5kIGN0eXBlIHZhbHVlcyBhcmUgbm90IHN1cHBvcnRlZCBieSBJQ1UiKSkpOwotCi0JCQlz dGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0JCQljb2xsYXRvciA9IHVjb2xfb3Blbihjb2xsY29s bGF0ZSwgJnN0YXR1cyk7Ci0JCQlpZiAoVV9GQUlMVVJFKHN0YXR1cykpCi0JCQkJZXJlcG9y dChFUlJPUiwKLQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBvcGVuIGNvbGxhdG9yIGZvciBs b2NhbGUgXCIlc1wiOiAlcyIsCi0JCQkJCQkJCWNvbGxjb2xsYXRlLCB1X2Vycm9yTmFtZShz dGF0dXMpKSkpOwotCi0JCQlpZiAoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPCA1NCkKLQkJ CQlpY3Vfc2V0X2NvbGxhdGlvbl9hdHRyaWJ1dGVzKGNvbGxhdG9yLCBjb2xsY29sbGF0ZSk7 Ci0KLQkJCS8qIFdlIHdpbGwgbGVhayB0aGlzIHN0cmluZyBpZiB3ZSBnZXQgYW4gZXJyb3Ig YmVsb3cgOi0oICovCi0JCQlyZXN1bHQuaW5mby5pY3UubG9jYWxlID0gTWVtb3J5Q29udGV4 dFN0cmR1cChUb3BNZW1vcnlDb250ZXh0LAotCQkJCQkJCQkJCQkJCQkgY29sbGNvbGxhdGUp OwotCQkJcmVzdWx0LmluZm8uaWN1LnVjb2wgPSBjb2xsYXRvcjsKLSNlbHNlCQkJCQkJCS8q IG5vdCBVU0VfSUNVICovCi0JCQkvKiBjb3VsZCBnZXQgaGVyZSBpZiBhIGNvbGxhdGlvbiB3 YXMgY3JlYXRlZCBieSBhIGJ1aWxkIHdpdGggSUNVICovCi0JCQllcmVwb3J0KEVSUk9SLAot CQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJCSBl cnJtc2coIklDVSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnVpbGQiKSwgXAotCQkJCQkg ZXJyaGludCgiWW91IG5lZWQgdG8gcmVidWlsZCBQb3N0Z3JlU1FMIHVzaW5nIC0td2l0aC1p Y3UuIikpKTsKLSNlbmRpZgkJCQkJCQkvKiBub3QgVVNFX0lDVSAqLworCQkJbWFrZV9pY3Vf Y29sbGF0b3IoY29sbGNvbGxhdGUsIGNvbGxjdHlwZSwgJnJlc3VsdCk7CiAJCX0KIAotCQlj b2xsdmVyc2lvbiA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCB0cCwgQW51bV9wZ19jb2xs YXRpb25fY29sbHZlcnNpb24sCi0JCQkJCQkJCQkgICZpc251bGwpOwotCQlpZiAoIWlzbnVs bCkKLQkJewotCQkJY2hhcgkgICAqYWN0dWFsX3ZlcnNpb25zdHI7Ci0JCQljaGFyCSAgICpj b2xsdmVyc2lvbnN0cjsKLQotCQkJYWN0dWFsX3ZlcnNpb25zdHIgPSBnZXRfY29sbGF0aW9u X2FjdHVhbF92ZXJzaW9uKGNvbGxmb3JtLT5jb2xscHJvdmlkZXIsIGNvbGxjb2xsYXRlKTsK LQkJCWlmICghYWN0dWFsX3ZlcnNpb25zdHIpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBUaGlz IGNvdWxkIGhhcHBlbiB3aGVuIHNwZWNpZnlpbmcgYSB2ZXJzaW9uIGluIENSRUFURQotCQkJ CSAqIENPTExBVElPTiBmb3IgYSBsaWJjIGxvY2FsZSwgb3IgbWFudWFsbHkgY3JlYXRpbmcg YSBtZXNzIGluCi0JCQkJICogdGhlIGNhdGFsb2dzLgotCQkJCSAqLwotCQkJCWVyZXBvcnQo RVJST1IsCi0JCQkJCQkoZXJybXNnKCJjb2xsYXRpb24gXCIlc1wiIGhhcyBubyBhY3R1YWwg dmVyc2lvbiwgYnV0IGEgdmVyc2lvbiB3YXMgc3BlY2lmaWVkIiwKLQkJCQkJCQkJTmFtZVN0 cihjb2xsZm9ybS0+Y29sbG5hbWUpKSkpOwotCQkJfQotCQkJY29sbHZlcnNpb25zdHIgPSBU ZXh0RGF0dW1HZXRDU3RyaW5nKGNvbGx2ZXJzaW9uKTsKLQotCQkJaWYgKHN0cmNtcChhY3R1 YWxfdmVyc2lvbnN0ciwgY29sbHZlcnNpb25zdHIpICE9IDApCi0JCQkJZXJlcG9ydChXQVJO SU5HLAotCQkJCQkJKGVycm1zZygiY29sbGF0aW9uIFwiJXNcIiBoYXMgdmVyc2lvbiBtaXNt YXRjaCIsCi0JCQkJCQkJCU5hbWVTdHIoY29sbGZvcm0tPmNvbGxuYW1lKSksCi0JCQkJCQkg ZXJyZGV0YWlsKCJUaGUgY29sbGF0aW9uIGluIHRoZSBkYXRhYmFzZSB3YXMgY3JlYXRlZCB1 c2luZyB2ZXJzaW9uICVzLCAiCi0JCQkJCQkJCSAgICJidXQgdGhlIG9wZXJhdGluZyBzeXN0 ZW0gcHJvdmlkZXMgdmVyc2lvbiAlcy4iLAotCQkJCQkJCQkgICBjb2xsdmVyc2lvbnN0ciwg YWN0dWFsX3ZlcnNpb25zdHIpLAotCQkJCQkJIGVycmhpbnQoIlJlYnVpbGQgYWxsIG9iamVj dHMgYWZmZWN0ZWQgYnkgdGhpcyBjb2xsYXRpb24gYW5kIHJ1biAiCi0JCQkJCQkJCSAiQUxU RVIgQ09MTEFUSU9OICVzIFJFRlJFU0ggVkVSU0lPTiwgIgotCQkJCQkJCQkgIm9yIGJ1aWxk IFBvc3RncmVTUUwgd2l0aCB0aGUgcmlnaHQgbGlicmFyeSB2ZXJzaW9uLiIsCi0JCQkJCQkJ CSBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUoY29sbGZv cm0tPmNvbGxuYW1lc3BhY2UpLAotCQkJCQkJCQkJCQkJCQkJTmFtZVN0cihjb2xsZm9ybS0+ Y29sbG5hbWUpKSkpKTsKLQkJfQorCQljaGVja19jb2xsYXRpb25fdmVyc2lvbih0cCk7CiAK IAkJUmVsZWFzZVN5c0NhY2hlKHRwKTsKIApAQCAtMTUyMCw2ICsxNTQ1LDE3IEBAIGdldF9j b2xsYXRpb25fYWN0dWFsX3ZlcnNpb24oY2hhciBjb2xscHJvdmlkZXIsIGNvbnN0IGNoYXIg KmNvbGxjb2xsYXRlKQogewogCWNoYXIJICAgKmNvbGx2ZXJzaW9uOwogCisJaWYgKGNvbGxw cm92aWRlciA9PSBDT0xMUFJPVklERVJfREVGQVVMVCkKKwl7CisjaWZkZWYgVVNFX0lDVQor CQlpZiAoZ2xvYmFsX2xvY2FsZS5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQorCQkJ Y29sbHZlcnNpb24gPSBnZXRfY29sbGF0aW9uX2FjdHVhbF92ZXJzaW9uKGdsb2JhbF9sb2Nh bGUucHJvdmlkZXIsCisJCQkJCQkJCQkJCQkJICAgZ2xvYmFsX2xvY2FsZS5pbmZvLmljdS5s b2NhbGUpOworCQllbHNlCisjZW5kaWYKKwkJCWNvbGx2ZXJzaW9uID0gTlVMTDsKKwl9CisJ ZWxzZQogI2lmZGVmIFVTRV9JQ1UKIAlpZiAoY29sbHByb3ZpZGVyID09IENPTExQUk9WSURF Ul9JQ1UpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmNoYXIu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJjaGFyLmMKaW5kZXggMzMyZGM4NjBjNC4u NzAzYjg3YTdjMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmNoYXIu YworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFyY2hhci5jCkBAIC03NTEsNyArNzUx LDcgQEAgYnBjaGFyZXEoUEdfRlVOQ1RJT05fQVJHUykKIAlsZW4yID0gYmNUcnVlbGVuKGFy ZzIpOwogCiAJaWYgKGxjX2NvbGxhdGVfaXNfYyhjb2xsaWQpIHx8Ci0JCWNvbGxpZCA9PSBE RUZBVUxUX0NPTExBVElPTl9PSUQgfHwKKwkJKGNvbGxpZCA9PSBERUZBVUxUX0NPTExBVElP Tl9PSUQgJiYgZ2xvYmFsX2xvY2FsZS5kZXRlcm1pbmlzdGljKSB8fAogCQlwZ19uZXdsb2Nh bGVfZnJvbV9jb2xsYXRpb24oY29sbGlkKS0+ZGV0ZXJtaW5pc3RpYykKIAl7CiAJCS8qCkBA IC03ODksNyArNzg5LDcgQEAgYnBjaGFybmUoUEdfRlVOQ1RJT05fQVJHUykKIAlsZW4yID0g YmNUcnVlbGVuKGFyZzIpOwogCiAJaWYgKGxjX2NvbGxhdGVfaXNfYyhjb2xsaWQpIHx8Ci0J CWNvbGxpZCA9PSBERUZBVUxUX0NPTExBVElPTl9PSUQgfHwKKwkJKGNvbGxpZCA9PSBERUZB VUxUX0NPTExBVElPTl9PSUQgJiYgZ2xvYmFsX2xvY2FsZS5kZXRlcm1pbmlzdGljKSB8fAog CQlwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oY29sbGlkKS0+ZGV0ZXJtaW5pc3RpYykK IAl7CiAJCS8qCkBAIC05OTUsOCArOTk1LDEzIEBAIGhhc2hicGNoYXIoUEdfRlVOQ1RJT05f QVJHUykKIAlrZXlkYXRhID0gVkFSREFUQV9BTlkoa2V5KTsKIAlrZXlsZW4gPSBiY1RydWVs ZW4oa2V5KTsKIAotCWlmICghbGNfY29sbGF0ZV9pc19jKGNvbGxpZCkgJiYgY29sbGlkICE9 IERFRkFVTFRfQ09MTEFUSU9OX09JRCkKLQkJbXlsb2NhbGUgPSBwZ19uZXdsb2NhbGVfZnJv bV9jb2xsYXRpb24oY29sbGlkKTsKKwlpZiAoIWxjX2NvbGxhdGVfaXNfYyhjb2xsaWQpKQor CXsKKwkJaWYgKGNvbGxpZCAhPSBERUZBVUxUX0NPTExBVElPTl9PSUQpCisJCQlteWxvY2Fs ZSA9IHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihjb2xsaWQpOworCQllbHNlIGlmIChn bG9iYWxfbG9jYWxlLnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCisJCQlteWxvY2Fs ZSA9ICZnbG9iYWxfbG9jYWxlOworCX0KIAogCWlmICghbXlsb2NhbGUgfHwgbXlsb2NhbGUt PmRldGVybWluaXN0aWMpCiAJewpAQCAtMTA1NSw4ICsxMDYwLDEzIEBAIGhhc2hicGNoYXJl eHRlbmRlZChQR19GVU5DVElPTl9BUkdTKQogCWtleWRhdGEgPSBWQVJEQVRBX0FOWShrZXkp OwogCWtleWxlbiA9IGJjVHJ1ZWxlbihrZXkpOwogCi0JaWYgKCFsY19jb2xsYXRlX2lzX2Mo Y29sbGlkKSAmJiBjb2xsaWQgIT0gREVGQVVMVF9DT0xMQVRJT05fT0lEKQotCQlteWxvY2Fs ZSA9IHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihjb2xsaWQpOworCWlmICghbGNfY29s bGF0ZV9pc19jKGNvbGxpZCkpCisJeworCQlpZiAoY29sbGlkICE9IERFRkFVTFRfQ09MTEFU SU9OX09JRCkKKwkJCW15bG9jYWxlID0gcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0aW9uKGNv bGxpZCk7CisJCWVsc2UgaWYgKGdsb2JhbF9sb2NhbGUucHJvdmlkZXIgPT0gQ09MTFBST1ZJ REVSX0lDVSkKKwkJCW15bG9jYWxlID0gJmdsb2JhbF9sb2NhbGU7CisJfQogCiAJaWYgKCFt eWxvY2FsZSB8fCBteWxvY2FsZS0+ZGV0ZXJtaW5pc3RpYykKIAl7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3ZhcmxlbmEuYwppbmRleCBmYTA4YjU1ZWI2Li5lNTljZjJkNDllIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC92YXJsZW5hLmMKQEAgLTExNTYsOCArMTE1NiwxMyBAQCB0ZXh0X3Bvc2l0aW9uX3Nl dHVwKHRleHQgKnQxLCB0ZXh0ICp0MiwgT2lkIGNvbGxpZCwgVGV4dFBvc2l0aW9uU3RhdGUg KnN0YXRlKQogCiAJY2hlY2tfY29sbGF0aW9uX3NldChjb2xsaWQpOwogCi0JaWYgKCFsY19j b2xsYXRlX2lzX2MoY29sbGlkKSAmJiBjb2xsaWQgIT0gREVGQVVMVF9DT0xMQVRJT05fT0lE KQotCQlteWxvY2FsZSA9IHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihjb2xsaWQpOwor CWlmICghbGNfY29sbGF0ZV9pc19jKGNvbGxpZCkpCisJeworCQlpZiAoY29sbGlkICE9IERF RkFVTFRfQ09MTEFUSU9OX09JRCkKKwkJCW15bG9jYWxlID0gcGdfbmV3bG9jYWxlX2Zyb21f Y29sbGF0aW9uKGNvbGxpZCk7CisJCWVsc2UgaWYgKGdsb2JhbF9sb2NhbGUucHJvdmlkZXIg PT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJCW15bG9jYWxlID0gJmdsb2JhbF9sb2NhbGU7CisJ fQogCiAJaWYgKG15bG9jYWxlICYmICFteWxvY2FsZS0+ZGV0ZXJtaW5pc3RpYykKIAkJZXJl cG9ydChFUlJPUiwKQEAgLTE0OTMsNiArMTQ5OCw4IEBAIHZhcnN0cl9jbXAoY29uc3QgY2hh ciAqYXJnMSwgaW50IGxlbjEsIGNvbnN0IGNoYXIgKmFyZzIsIGludCBsZW4yLCBPaWQgY29s bGlkKQogCiAJCWlmIChjb2xsaWQgIT0gREVGQVVMVF9DT0xMQVRJT05fT0lEKQogCQkJbXls b2NhbGUgPSBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oY29sbGlkKTsKKwkJZWxzZSBp ZiAoZ2xvYmFsX2xvY2FsZS5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQorCQkJbXls b2NhbGUgPSAmZ2xvYmFsX2xvY2FsZTsKIAogCQkvKgogCQkgKiBtZW1jbXAoKSBjYW4ndCB0 ZWxsIHVzIHdoaWNoIG9mIHR3byB1bmVxdWFsIHN0cmluZ3Mgc29ydHMgZmlyc3QsCkBAIC0x NzE0LDcgKzE3MjEsNyBAQCB0ZXh0ZXEoUEdfRlVOQ1RJT05fQVJHUykKIAljaGVja19jb2xs YXRpb25fc2V0KGNvbGxpZCk7CiAKIAlpZiAobGNfY29sbGF0ZV9pc19jKGNvbGxpZCkgfHwK LQkJY29sbGlkID09IERFRkFVTFRfQ09MTEFUSU9OX09JRCB8fAorCQkoY29sbGlkID09IERF RkFVTFRfQ09MTEFUSU9OX09JRCAmJiBnbG9iYWxfbG9jYWxlLmRldGVybWluaXN0aWMpIHx8 CiAJCXBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihjb2xsaWQpLT5kZXRlcm1pbmlzdGlj KQogCXsKIAkJRGF0dW0JCWFyZzEgPSBQR19HRVRBUkdfREFUVU0oMCk7CkBAIC0xNzY4LDcg KzE3NzUsNyBAQCB0ZXh0bmUoUEdfRlVOQ1RJT05fQVJHUykKIAljaGVja19jb2xsYXRpb25f c2V0KGNvbGxpZCk7CiAKIAlpZiAobGNfY29sbGF0ZV9pc19jKGNvbGxpZCkgfHwKLQkJY29s bGlkID09IERFRkFVTFRfQ09MTEFUSU9OX09JRCB8fAorCQkoY29sbGlkID09IERFRkFVTFRf Q09MTEFUSU9OX09JRCAmJiBnbG9iYWxfbG9jYWxlLmRldGVybWluaXN0aWMpIHx8CiAJCXBn X25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihjb2xsaWQpLT5kZXRlcm1pbmlzdGljKQogCXsK IAkJRGF0dW0JCWFyZzEgPSBQR19HRVRBUkdfREFUVU0oMCk7CkBAIC0xODgwLDggKzE4ODcs MTMgQEAgdGV4dF9zdGFydHNfd2l0aChQR19GVU5DVElPTl9BUkdTKQogCiAJY2hlY2tfY29s bGF0aW9uX3NldChjb2xsaWQpOwogCi0JaWYgKCFsY19jb2xsYXRlX2lzX2MoY29sbGlkKSAm JiBjb2xsaWQgIT0gREVGQVVMVF9DT0xMQVRJT05fT0lEKQotCQlteWxvY2FsZSA9IHBnX25l d2xvY2FsZV9mcm9tX2NvbGxhdGlvbihjb2xsaWQpOworCWlmICghbGNfY29sbGF0ZV9pc19j KGNvbGxpZCkpCisJeworCQlpZiAoY29sbGlkICE9IERFRkFVTFRfQ09MTEFUSU9OX09JRCkK KwkJCW15bG9jYWxlID0gcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0aW9uKGNvbGxpZCk7CisJ CWVsc2UgaWYgKGdsb2JhbF9sb2NhbGUucHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkK KwkJCW15bG9jYWxlID0gJmdsb2JhbF9sb2NhbGU7CisJfQogCiAJaWYgKG15bG9jYWxlICYm ICFteWxvY2FsZS0+ZGV0ZXJtaW5pc3RpYykKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTE5OTYs NiArMjAwOCw4IEBAIHZhcnN0cl9zb3J0c3VwcG9ydChTb3J0U3VwcG9ydCBzc3VwLCBPaWQg dHlwaWQsIE9pZCBjb2xsaWQpCiAJCSAqLwogCQlpZiAoY29sbGlkICE9IERFRkFVTFRfQ09M TEFUSU9OX09JRCkKIAkJCWxvY2FsZSA9IHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihj b2xsaWQpOworCQllbHNlIGlmIChnbG9iYWxfbG9jYWxlLnByb3ZpZGVyID09IENPTExQUk9W SURFUl9JQ1UpCisJCQlsb2NhbGUgPSAmZ2xvYmFsX2xvY2FsZTsKIAogCQkvKgogCQkgKiBU aGVyZSBpcyBhIGZ1cnRoZXIgZXhjZXB0aW9uIG9uIFdpbmRvd3MuICBXaGVuIHRoZSBkYXRh YmFzZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9wb3N0aW5pdC5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9wb3N0aW5pdC5jCmluZGV4IDQzYjlmMTdmNzIuLjgz YTM2ZjYxOWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQu YworKysgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMKQEAgLTMxLDYgKzMx LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL2luZGV4aW5nLmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9uYW1lc3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2F1dGhpZC5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRh YmFzZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGJfcm9sZV9zZXR0aW5nLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ190YWJsZXNwYWNlLmgiCkBAIC00MDQsNiArNDA1LDggQEAgQ2hl Y2tNeURhdGFiYXNlKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgYW1fc3VwZXJ1c2VyLCBib29s IG92ZXJyaWRlX2FsbG93X2Nvbm5lY3QKIAljb2xsYXRlID0gTmFtZVN0cihkYmZvcm0tPmRh dGNvbGxhdGUpOwogCWN0eXBlID0gTmFtZVN0cihkYmZvcm0tPmRhdGN0eXBlKTsKIAorCWlm IChkYmZvcm0tPmRhdGNvbGxwcm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQykKKwl7CiAJ aWYgKHBnX3Blcm1fc2V0bG9jYWxlKExDX0NPTExBVEUsIGNvbGxhdGUpID09IE5VTEwpCiAJ CWVyZXBvcnQoRkFUQUwsCiAJCQkJKGVycm1zZygiZGF0YWJhc2UgbG9jYWxlIGlzIGluY29t cGF0aWJsZSB3aXRoIG9wZXJhdGluZyBzeXN0ZW0iKSwKQEAgLTQxNyw2ICs0MjAsMjQgQEAg Q2hlY2tNeURhdGFiYXNlKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgYW1fc3VwZXJ1c2VyLCBi b29sIG92ZXJyaWRlX2FsbG93X2Nvbm5lY3QKIAkJCQkgZXJyZGV0YWlsKCJUaGUgZGF0YWJh c2Ugd2FzIGluaXRpYWxpemVkIHdpdGggTENfQ1RZUEUgXCIlc1wiLCAiCiAJCQkJCQkgICAi IHdoaWNoIGlzIG5vdCByZWNvZ25pemVkIGJ5IHNldGxvY2FsZSgpLiIsIGN0eXBlKSwKIAkJ CQkgZXJyaGludCgiUmVjcmVhdGUgdGhlIGRhdGFiYXNlIHdpdGggYW5vdGhlciBsb2NhbGUg b3IgaW5zdGFsbCB0aGUgbWlzc2luZyBsb2NhbGUuIikpKTsKKwl9CisJZWxzZSBpZiAoZGJm b3JtLT5kYXRjb2xscHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwl7CisJCW1ha2Vf aWN1X2NvbGxhdG9yKGNvbGxhdGUsIGN0eXBlLCAmZ2xvYmFsX2xvY2FsZSk7CisJfQorCisJ Z2xvYmFsX2xvY2FsZS5wcm92aWRlciA9IGRiZm9ybS0+ZGF0Y29sbHByb3ZpZGVyOworCWds b2JhbF9sb2NhbGUuZGV0ZXJtaW5pc3RpYyA9IHRydWU7CS8vIFRPRE8KKworCXsKKwkJSGVh cFR1cGxlCXRwOworCisJCXRwID0gU2VhcmNoU3lzQ2FjaGUxKENPTExPSUQsIE9iamVjdElk R2V0RGF0dW0oREVGQVVMVF9DT0xMQVRJT05fT0lEKSk7CisJCWlmICghSGVhcFR1cGxlSXNW YWxpZCh0cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29s bGF0aW9uICV1IiwgREVGQVVMVF9DT0xMQVRJT05fT0lEKTsKKwkJY2hlY2tfY29sbGF0aW9u X3ZlcnNpb24odHApOworCQlSZWxlYXNlU3lzQ2FjaGUodHApOworCX0KIAogCS8qIE1ha2Ug dGhlIGxvY2FsZSBzZXR0aW5ncyB2aXNpYmxlIGFzIEdVQyB2YXJpYWJsZXMsIHRvbyAqLwog CVNldENvbmZpZ09wdGlvbigibGNfY29sbGF0ZSIsIGNvbGxhdGUsIFBHQ19JTlRFUk5BTCwg UEdDX1NfT1ZFUlJJREUpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9pbml0ZGIvTWFrZWZpbGUg Yi9zcmMvYmluL2luaXRkYi9NYWtlZmlsZQppbmRleCA3YzQwNDQzMGE5Li5hOTMzNWE4YmE2 IDEwMDY0NAotLS0gYS9zcmMvYmluL2luaXRkYi9NYWtlZmlsZQorKysgYi9zcmMvYmluL2lu aXRkYi9NYWtlZmlsZQpAQCAtNjEsNiArNjEsOCBAQCBjbGVhbiBkaXN0Y2xlYW4gbWFpbnRh aW5lci1jbGVhbjoKICMgZW5zdXJlIHRoYXQgY2hhbmdlcyBpbiBkYXRhZGlyIHByb3BhZ2F0 ZSBpbnRvIG9iamVjdCBmaWxlCiBpbml0ZGIubzogaW5pdGRiLmMgJCh0b3BfYnVpbGRkaXIp L3NyYy9NYWtlZmlsZS5nbG9iYWwKIAorZXhwb3J0IHdpdGhfaWN1CisKIGNoZWNrOgogCSQo cHJvdmVfY2hlY2spCiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vaW5pdGRiL2luaXRkYi5jIGIv c3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMKaW5kZXggODhhMjYxZDliZC4uNjJjMzEwMDQwYSAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMKKysrIGIvc3JjL2Jpbi9pbml0 ZGIvaW5pdGRiLmMKQEAgLTEyOSw2ICsxMjksOCBAQCBzdGF0aWMgY2hhciAqbGNfbW9uZXRh cnkgPSBOVUxMOwogc3RhdGljIGNoYXIgKmxjX251bWVyaWMgPSBOVUxMOwogc3RhdGljIGNo YXIgKmxjX3RpbWUgPSBOVUxMOwogc3RhdGljIGNoYXIgKmxjX21lc3NhZ2VzID0gTlVMTDsK K3N0YXRpYyBjaGFyIGNvbGxhdGlvbl9wcm92aWRlcltdID0ge0NPTExQUk9WSURFUl9MSUJD LCAnXDAnfTsKK3N0YXRpYyBjaGFyICppY3VfbG9jYWxlID0gTlVMTDsKIHN0YXRpYyBjb25z dCBjaGFyICpkZWZhdWx0X3RleHRfc2VhcmNoX2NvbmZpZyA9IE5VTEw7CiBzdGF0aWMgY2hh ciAqdXNlcm5hbWUgPSBOVUxMOwogc3RhdGljIGJvb2wgcHdwcm9tcHQgPSBmYWxzZTsKQEAg LTE0MTIsMTAgKzE0MTQsMTMgQEAgYm9vdHN0cmFwX3RlbXBsYXRlMSh2b2lkKQogCQkJCQkJ CSAgZW5jb2RpbmdpZF90b19zdHJpbmcoZW5jb2RpbmdpZCkpOwogCiAJYmtpX2xpbmVzID0g cmVwbGFjZV90b2tlbihia2lfbGluZXMsICJMQ19DT0xMQVRFIiwKLQkJCQkJCQkgIGVzY2Fw ZV9xdW90ZXNfYmtpKGxjX2NvbGxhdGUpKTsKKwkJCQkJCQkgIGVzY2FwZV9xdW90ZXNfYmtp KGNvbGxhdGlvbl9wcm92aWRlclswXSA9PSBDT0xMUFJPVklERVJfSUNVID8gaWN1X2xvY2Fs ZSA6IGxjX2NvbGxhdGUpKTsKIAogCWJraV9saW5lcyA9IHJlcGxhY2VfdG9rZW4oYmtpX2xp bmVzLCAiTENfQ1RZUEUiLAotCQkJCQkJCSAgZXNjYXBlX3F1b3Rlc19ia2kobGNfY3R5cGUp KTsKKwkJCQkJCQkgIGVzY2FwZV9xdW90ZXNfYmtpKGNvbGxhdGlvbl9wcm92aWRlclswXSA9 PSBDT0xMUFJPVklERVJfSUNVID8gaWN1X2xvY2FsZSA6IGxjX2N0eXBlKSk7CisKKwlia2lf bGluZXMgPSByZXBsYWNlX3Rva2VuKGJraV9saW5lcywgIkNPTExQUk9WSURFUiIsCisJCQkJ CQkJICBjb2xsYXRpb25fcHJvdmlkZXIpOwogCiAJLyogQWxzbyBlbnN1cmUgYmFja2VuZCBp c24ndCBjb25mdXNlZCBieSB0aGlzIGVudmlyb25tZW50IHZhcjogKi8KIAl1bnNldGVudigi UEdDTElFTlRFTkNPRElORyIpOwpAQCAtMTcwNyw2ICsxNzEyLDEyIEBAIHNldHVwX2Rlc2Ny aXB0aW9uKEZJTEUgKmNtZGZkKQogc3RhdGljIHZvaWQKIHNldHVwX2NvbGxhdGlvbihGSUxF ICpjbWRmZCkKIHsKKwkvKgorCSAqIFNldCB2ZXJzaW9uIG9mIHRoZSBkZWZhdWx0IGNvbGxh dGlvbi4KKwkgKi8KKwlQR19DTURfUFJJTlRGKCJVUERBVEUgcGdfY29sbGF0aW9uIFNFVCBj b2xsdmVyc2lvbiA9IHBnX2NvbGxhdGlvbl9hY3R1YWxfdmVyc2lvbihvaWQpIFdIRVJFIG9p ZCA9ICVkO1xuXG4iLAorCQkJCSAgREVGQVVMVF9DT0xMQVRJT05fT0lEKTsKKwogCS8qCiAJ ICogQWRkIGFuIFNRTC1zdGFuZGFyZCBuYW1lLiAgV2UgZG9uJ3Qgd2FudCB0byBwaW4gdGhp cywgc28gaXQgZG9lc24ndCBnbwogCSAqIGluIHBnX2NvbGxhdGlvbi5oLiAgQnV0IGFkZCBp dCBiZWZvcmUgcmVhZGluZyBzeXN0ZW0gY29sbGF0aW9ucywgc28KQEAgLTE5OTUsOCArMjAw Niw2IEBAIG1ha2VfdGVtcGxhdGUwKEZJTEUgKmNtZGZkKQogewogCWNvbnN0IGNoYXIgKmNv bnN0ICpsaW5lOwogCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0ZW1wbGF0ZTBfc2V0dXBb XSA9IHsKLQkJIkNSRUFURSBEQVRBQkFTRSB0ZW1wbGF0ZTAgSVNfVEVNUExBVEUgPSB0cnVl IEFMTE9XX0NPTk5FQ1RJT05TID0gZmFsc2U7XG5cbiIsCi0KIAkJLyoKIAkJICogV2UgdXNl IHRoZSBPSUQgb2YgdGVtcGxhdGUwIHRvIGRldGVybWluZSBkYXRsYXN0c3lzb2lkCiAJCSAq LwpAQCAtMjAyMSw2ICsyMDMwLDkgQEAgbWFrZV90ZW1wbGF0ZTAoRklMRSAqY21kZmQpCiAJ CU5VTEwKIAl9OwogCisJUEdfQ01EX1BSSU5URigiQ1JFQVRFIERBVEFCQVNFIHRlbXBsYXRl MCBJU19URU1QTEFURSA9IHRydWUgQUxMT1dfQ09OTkVDVElPTlMgPSBmYWxzZSBDT0xMQVRJ T05fUFJPVklERVIgPSAlcztcblxuIiwKKwkJCQkgIGNvbGxhdGlvbl9wcm92aWRlclswXSA9 PSBDT0xMUFJPVklERVJfSUNVID8gImljdSIgOiAibGliYyIpOworCiAJZm9yIChsaW5lID0g dGVtcGxhdGUwX3NldHVwOyAqbGluZTsgbGluZSsrKQogCQlQR19DTURfUFVUUygqbGluZSk7 CiB9CkBAIC0yMjkzLDEzICsyMzA1LDE0IEBAIHNldGxvY2FsZXModm9pZCkKIAkJCWxjX21v bmV0YXJ5ID0gbG9jYWxlOwogCQlpZiAoIWxjX21lc3NhZ2VzKQogCQkJbGNfbWVzc2FnZXMg PSBsb2NhbGU7CisJCWlmICghaWN1X2xvY2FsZSkKKwkJCWljdV9sb2NhbGUgPSBsb2NhbGU7 CiAJfQogCiAJLyoKIAkgKiBjYW5vbmljYWxpemUgbG9jYWxlIG5hbWVzLCBhbmQgb2J0YWlu IGFueSBtaXNzaW5nIHZhbHVlcyBmcm9tIG91cgogCSAqIGN1cnJlbnQgZW52aXJvbm1lbnQK IAkgKi8KLQogCWNoZWNrX2xvY2FsZV9uYW1lKExDX0NUWVBFLCBsY19jdHlwZSwgJmNhbm9u bmFtZSk7CiAJbGNfY3R5cGUgPSBjYW5vbm5hbWU7CiAJY2hlY2tfbG9jYWxlX25hbWUoTENf Q09MTEFURSwgbGNfY29sbGF0ZSwgJmNhbm9ubmFtZSk7CkBAIC0yMzE4LDYgKzIzMzEsMTgg QEAgc2V0bG9jYWxlcyh2b2lkKQogCWNoZWNrX2xvY2FsZV9uYW1lKExDX0NUWVBFLCBsY19t ZXNzYWdlcywgJmNhbm9ubmFtZSk7CiAJbGNfbWVzc2FnZXMgPSBjYW5vbm5hbWU7CiAjZW5k aWYKKworCS8qCisJICogSWYgSUNVIGlzIHNlbGVjdGVkIGJ1dCBubyBJQ1UgbG9jYWxlIGhh cyBiZWVuIGdpdmVuLCB0YWtlIHRoZQorCSAqIGxjX2NvbGxhdGUgbG9jYWxlIGFuZCBjaG9w IG9mZiBhbnkgZW5jb2Rpbmcgc3VmZml4LiAgVGhpcyBzaG91bGQgZ2l2ZQorCSAqIHRoZSB1 c2VyIGEgY29uZmlndXJhdGlvbiB0aGF0IHJlc2VtYmxlcyB0aGVpciBvcGVyYXRpbmcgc3lz dGVtJ3MgbG9jYWxlCisJICogc2V0dXAuCisJICovCisJaWYgKGNvbGxhdGlvbl9wcm92aWRl clswXSA9PSBDT0xMUFJPVklERVJfSUNVICYmICFpY3VfbG9jYWxlKQorCXsKKwkJaWN1X2xv Y2FsZSA9IHBnX3N0cmR1cChsY19jb2xsYXRlKTsKKwkJaWN1X2xvY2FsZVtzdHJjc3BuKGlj dV9sb2NhbGUsICIuIildID0gJ1wwJzsKKwl9CiB9CiAKIC8qCkBAIC0yMzMzLDkgKzIzNTgs MTIgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLUEsIC0t YXV0aD1NRVRIT0QgICAgICAgICBkZWZhdWx0IGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBmb3Ig bG9jYWwgY29ubmVjdGlvbnNcbiIpKTsKIAlwcmludGYoXygiICAgICAgLS1hdXRoLWhvc3Q9 TUVUSE9EICAgIGRlZmF1bHQgYXV0aGVudGljYXRpb24gbWV0aG9kIGZvciBsb2NhbCBUQ1Av SVAgY29ubmVjdGlvbnNcbiIpKTsKIAlwcmludGYoXygiICAgICAgLS1hdXRoLWxvY2FsPU1F VEhPRCAgIGRlZmF1bHQgYXV0aGVudGljYXRpb24gbWV0aG9kIGZvciBsb2NhbC1zb2NrZXQg Y29ubmVjdGlvbnNcbiIpKTsKKwlwcmludGYoXygiICAgICAgLS1jb2xsYXRpb24tcHJvdmlk ZXI9e2xpYmN8aWN1fVxuIgorCQkJICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0 IGRlZmF1bHQgY29sbGF0aW9uIHByb3ZpZGVyIGZvciBuZXcgZGF0YWJhc2VzXG4iKSk7CiAJ cHJpbnRmKF8oIiBbLUQsIC0tcGdkYXRhPV1EQVRBRElSICAgICBsb2NhdGlvbiBmb3IgdGhp cyBkYXRhYmFzZSBjbHVzdGVyXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUUsIC0tZW5jb2Rpbmc9 RU5DT0RJTkcgICBzZXQgZGVmYXVsdCBlbmNvZGluZyBmb3IgbmV3IGRhdGFiYXNlc1xuIikp OwogCXByaW50ZihfKCIgIC1nLCAtLWFsbG93LWdyb3VwLWFjY2VzcyAgYWxsb3cgZ3JvdXAg cmVhZC9leGVjdXRlIG9uIGRhdGEgZGlyZWN0b3J5XG4iKSk7CisJcHJpbnRmKF8oIiAgICAg IC0taWN1LWxvY2FsZSAgICAgICAgICBzZXQgSUNVIGxvY2FsZSBmb3IgbmV3IGRhdGFiYXNl c1xuIikpOwogCXByaW50ZihfKCIgICAgICAtLWxvY2FsZT1MT0NBTEUgICAgICAgc2V0IGRl ZmF1bHQgbG9jYWxlIGZvciBuZXcgZGF0YWJhc2VzXG4iKSk7CiAJcHJpbnRmKF8oIiAgICAg IC0tbGMtY29sbGF0ZT0sIC0tbGMtY3R5cGU9LCAtLWxjLW1lc3NhZ2VzPUxPQ0FMRVxuIgog CQkJICIgICAgICAtLWxjLW1vbmV0YXJ5PSwgLS1sYy1udW1lcmljPSwgLS1sYy10aW1lPUxP Q0FMRVxuIgpAQCAtMjUxMCw3ICsyNTM4LDggQEAgc2V0dXBfbG9jYWxlX2VuY29kaW5nKHZv aWQpCiAJCXN0cmNtcChsY19jdHlwZSwgbGNfdGltZSkgPT0gMCAmJgogCQlzdHJjbXAobGNf Y3R5cGUsIGxjX251bWVyaWMpID09IDAgJiYKIAkJc3RyY21wKGxjX2N0eXBlLCBsY19tb25l dGFyeSkgPT0gMCAmJgotCQlzdHJjbXAobGNfY3R5cGUsIGxjX21lc3NhZ2VzKSA9PSAwKQor CQlzdHJjbXAobGNfY3R5cGUsIGxjX21lc3NhZ2VzKSA9PSAwICYmCisJCSghaWN1X2xvY2Fs ZSB8fCBzdHJjbXAobGNfY3R5cGUsIGljdV9sb2NhbGUpID09IDApKQogCQlwcmludGYoXygi VGhlIGRhdGFiYXNlIGNsdXN0ZXIgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIGxvY2FsZSBc IiVzXCIuXG4iKSwgbGNfY3R5cGUpOwogCWVsc2UKIAl7CkBAIC0yNTI3LDkgKzI1NTYsMTMg QEAgc2V0dXBfbG9jYWxlX2VuY29kaW5nKHZvaWQpCiAJCQkgICBsY19tb25ldGFyeSwKIAkJ CSAgIGxjX251bWVyaWMsCiAJCQkgICBsY190aW1lKTsKKwkJaWYgKGljdV9sb2NhbGUpCisJ CQlwcmludGYoXygiICBJQ1U6ICAgICAgJXNcbiIpLCBpY3VfbG9jYWxlKTsKIAl9CiAKLQlp ZiAoIWVuY29kaW5nKQorCWlmICghZW5jb2RpbmcgJiYgY29sbGF0aW9uX3Byb3ZpZGVyWzBd ID09IENPTExQUk9WSURFUl9JQ1UpCisJCWVuY29kaW5naWQgPSBQR19VVEY4OworCWVsc2Ug aWYgKCFlbmNvZGluZykKIAl7CiAJCWludAkJCWN0eXBlX2VuYzsKIApAQCAtMzAyOSw2ICsz MDYyLDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQl7IndhbC1zZWdzaXpl IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDEyfSwKIAkJeyJkYXRhLWNoZWNrc3VtcyIs IG5vX2FyZ3VtZW50LCBOVUxMLCAnayd9LAogCQl7ImFsbG93LWdyb3VwLWFjY2VzcyIsIG5v X2FyZ3VtZW50LCBOVUxMLCAnZyd9LAorCQl7ImNvbGxhdGlvbi1wcm92aWRlciIsIHJlcXVp cmVkX2FyZ3VtZW50LCBOVUxMLCAxM30sCisJCXsiaWN1LWxvY2FsZSIsIHJlcXVpcmVkX2Fy Z3VtZW50LCBOVUxMLCAxNH0sCiAJCXtOVUxMLCAwLCBOVUxMLCAwfQogCX07CiAKQEAgLTMx NjcsNiArMzIwMiwyMCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQljYXNl ICdnJzoKIAkJCQlTZXREYXRhRGlyZWN0b3J5Q3JlYXRlUGVybShQR19ESVJfTU9ERV9HUk9V UCk7CiAJCQkJYnJlYWs7CisJCQljYXNlIDEzOgorCQkJCWlmIChzdHJjbXAob3B0YXJnLCAi aWN1IikgPT0gMCkKKwkJCQkJY29sbGF0aW9uX3Byb3ZpZGVyWzBdID0gQ09MTFBST1ZJREVS X0lDVTsKKwkJCQllbHNlIGlmIChzdHJjbXAob3B0YXJnLCAibGliYyIpID09IDApCisJCQkJ CWNvbGxhdGlvbl9wcm92aWRlclswXSA9IENPTExQUk9WSURFUl9MSUJDOworCQkJCWVsc2UK KwkJCQl7CisJCQkJCXBnX2xvZ19lcnJvcigidW5yZWNvZ25pemVkIGNvbGxhdGlvbiBwcm92 aWRlcjogJXMiLCBvcHRhcmcpOworCQkJCQlleGl0KDEpOworCQkJCX0KKwkJCQlicmVhazsK KwkJCWNhc2UgMTQ6CisJCQkJaWN1X2xvY2FsZSA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJ CWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQkvKiBnZXRvcHRfbG9uZyBhbHJlYWR5IGVtaXR0 ZWQgYSBjb21wbGFpbnQgKi8KIAkJCQlmcHJpbnRmKHN0ZGVyciwgXygiVHJ5IFwiJXMgLS1o ZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iKSwKZGlmZiAtLWdpdCBhL3NyYy9iaW4v aW5pdGRiL3QvMDAxX2luaXRkYi5wbCBiL3NyYy9iaW4vaW5pdGRiL3QvMDAxX2luaXRkYi5w bAppbmRleCA4Mzg3Yjk0NWQzLi45MGY2ZmM4ZjE0IDEwMDY0NAotLS0gYS9zcmMvYmluL2lu aXRkYi90LzAwMV9pbml0ZGIucGwKKysrIGIvc3JjL2Jpbi9pbml0ZGIvdC8wMDFfaW5pdGRi LnBsCkBAIC04LDcgKzgsNyBAQAogdXNlIEZpbGU6OnN0YXQgcXd7bHN0YXR9OwogdXNlIFBv c3RncmVzTm9kZTsKIHVzZSBUZXN0TGliOwotdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMjI7 Cit1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAyNDsKIAogbXkgJHRlbXBkaXIgPSBUZXN0TGli Ojp0ZW1wZGlyOwogbXkgJHhsb2dkaXIgPSAiJHRlbXBkaXIvcGd4bG9nIjsKQEAgLTg5LDMg Kzg5LDE5IEBACiAJb2soY2hlY2tfbW9kZV9yZWN1cnNpdmUoJGRhdGFkaXJfZ3JvdXAsIDA3 NTAsIDA2NDApLAogCQknY2hlY2sgUEdEQVRBIHBlcm1pc3Npb25zJyk7CiB9CisKKyMgQ29s bGF0aW9uIHByb3ZpZGVyIHRlc3RzCisKK2lmICgkRU5We3dpdGhfaWN1fSBlcSAneWVzJykK K3sKKwljb21tYW5kX29rKFsnaW5pdGRiJywgJy0tbm8tc3luYycsICctLWNvbGxhdGlvbi1w cm92aWRlcj1pY3UnLCAiJHRlbXBkaXIvZGF0YTIiXSwKKwkJCSAgICdjb2xsYXRpb24gcHJv dmlkZXIgSUNVJyk7Cit9CitlbHNlCit7CisJY29tbWFuZF9mYWlscyhbJ2luaXRkYicsICct LW5vLXN5bmMnLCAnLS1jb2xsYXRpb24tcHJvdmlkZXI9aWN1JywgIiR0ZW1wZGlyL2RhdGEy Il0sCisJCQkJICAnY29sbGF0aW9uIHByb3ZpZGVyIElDVSBmYWlscyBzaW5jZSBubyBJQ1Ug c3VwcG9ydCcpOworfQorCitjb21tYW5kX2ZhaWxzKFsnaW5pdGRiJywgJy0tbm8tc3luYycs ICctLWNvbGxhdGlvbi1wcm92aWRlcj14eXonLCAiJHRlbXBkaXIvZGF0YVgiXSwKKwkJCSAg J2ZhaWxzIGZvciBpbnZhbGlkIGNvbGxhdGlvbiBwcm92aWRlcicpOwpkaWZmIC0tZ2l0IGEv c3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMK aW5kZXggMzQ5ODE0MDFiZi4uYjE5MzJjMjI3ZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0yNjM4 LDYgKzI2MzgsNyBAQCBkdW1wRGF0YWJhc2UoQXJjaGl2ZSAqZm91dCkKIAkJCQlpX2RhdG5h bWUsCiAJCQkJaV9kYmEsCiAJCQkJaV9lbmNvZGluZywKKwkJCQlpX2RhdGNvbGxwcm92aWRl ciwKIAkJCQlpX2NvbGxhdGUsCiAJCQkJaV9jdHlwZSwKIAkJCQlpX2Zyb3plbnhpZCwKQEAg LTI2NTIsNiArMjY1Myw3IEBAIGR1bXBEYXRhYmFzZShBcmNoaXZlICpmb3V0KQogCWNvbnN0 IGNoYXIgKmRhdG5hbWUsCiAJCQkgICAqZGJhLAogCQkJICAgKmVuY29kaW5nLAorCQkJICAg KmRhdGNvbGxwcm92aWRlciwKIAkJCSAgICpjb2xsYXRlLAogCQkJICAgKmN0eXBlLAogCQkJ ICAgKmRhdGFjbCwKQEAgLTI2ODAsNiArMjY4Miw3IEBAIGR1bXBEYXRhYmFzZShBcmNoaXZl ICpmb3V0KQogCQlhcHBlbmRQUUV4cEJ1ZmZlcihkYlFyeSwgIlNFTEVDVCB0YWJsZW9pZCwg b2lkLCBkYXRuYW1lLCAiCiAJCQkJCQkgICIoJXMgZGF0ZGJhKSBBUyBkYmEsICIKIAkJCQkJ CSAgInBnX2VuY29kaW5nX3RvX2NoYXIoZW5jb2RpbmcpIEFTIGVuY29kaW5nLCAiCisJCQkJ CQkgICJkYXRjb2xscHJvdmlkZXIsICIKIAkJCQkJCSAgImRhdGNvbGxhdGUsIGRhdGN0eXBl LCBkYXRmcm96ZW54aWQsIGRhdG1pbm14aWQsICIKIAkJCQkJCSAgIihTRUxFQ1QgYXJyYXlf YWdnKGFjbCBPUkRFUiBCWSByb3dfbikgRlJPTSAiCiAJCQkJCQkgICIgIChTRUxFQ1QgYWNs LCByb3dfbiBGUk9NICIKQEAgLTI3NzIsNiArMjc3NSw3IEBAIGR1bXBEYXRhYmFzZShBcmNo aXZlICpmb3V0KQogCWlfZGF0bmFtZSA9IFBRZm51bWJlcihyZXMsICJkYXRuYW1lIik7CiAJ aV9kYmEgPSBQUWZudW1iZXIocmVzLCAiZGJhIik7CiAJaV9lbmNvZGluZyA9IFBRZm51bWJl cihyZXMsICJlbmNvZGluZyIpOworCWlfZGF0Y29sbHByb3ZpZGVyID0gUFFmbnVtYmVyKHJl cywgImRhdGNvbGxwcm92aWRlciIpOwogCWlfY29sbGF0ZSA9IFBRZm51bWJlcihyZXMsICJk YXRjb2xsYXRlIik7CiAJaV9jdHlwZSA9IFBRZm51bWJlcihyZXMsICJkYXRjdHlwZSIpOwog CWlfZnJvemVueGlkID0gUFFmbnVtYmVyKHJlcywgImRhdGZyb3plbnhpZCIpOwpAQCAtMjc4 Nyw2ICsyNzkxLDcgQEAgZHVtcERhdGFiYXNlKEFyY2hpdmUgKmZvdXQpCiAJZGF0bmFtZSA9 IFBRZ2V0dmFsdWUocmVzLCAwLCBpX2RhdG5hbWUpOwogCWRiYSA9IFBRZ2V0dmFsdWUocmVz LCAwLCBpX2RiYSk7CiAJZW5jb2RpbmcgPSBQUWdldHZhbHVlKHJlcywgMCwgaV9lbmNvZGlu Zyk7CisJZGF0Y29sbHByb3ZpZGVyID0gUFFnZXR2YWx1ZShyZXMsIDAsIGlfZGF0Y29sbHBy b3ZpZGVyKTsKIAljb2xsYXRlID0gUFFnZXR2YWx1ZShyZXMsIDAsIGlfY29sbGF0ZSk7CiAJ Y3R5cGUgPSBQUWdldHZhbHVlKHJlcywgMCwgaV9jdHlwZSk7CiAJZnJvemVueGlkID0gYXRv b2lkKFBRZ2V0dmFsdWUocmVzLCAwLCBpX2Zyb3plbnhpZCkpOwpAQCAtMjgxMiw2ICsyODE3 LDE3IEBAIGR1bXBEYXRhYmFzZShBcmNoaXZlICpmb3V0KQogCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cihjcmVhUXJ5LCAiIEVOQ09ESU5HID0gIik7CiAJCWFwcGVuZFN0cmluZ0xpdGVyYWxB SChjcmVhUXJ5LCBlbmNvZGluZywgZm91dCk7CiAJfQorCWlmIChzdHJsZW4oZGF0Y29sbHBy b3ZpZGVyKSA+IDApCisJeworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihjcmVhUXJ5LCAiIENP TExBVElPTl9QUk9WSURFUiA9ICIpOworCQlpZiAoZGF0Y29sbHByb3ZpZGVyWzBdID09ICdj JykKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKGNyZWFRcnksICJsaWJjIik7CisJCWVsc2Ug aWYgKGRhdGNvbGxwcm92aWRlclswXSA9PSAnaScpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cihjcmVhUXJ5LCAiaWN1Iik7CisJCWVsc2UKKwkJCWZhdGFsKCJ1bnJlY29nbml6ZWQgY29s bGF0aW9uIHByb3ZpZGVyOiAlcyIsCisJCQkJICBkYXRjb2xscHJvdmlkZXIpOworCX0KIAlp ZiAoc3RybGVuKGNvbGxhdGUpID4gMCAmJiBzdHJjbXAoY29sbGF0ZSwgY3R5cGUpID09IDAp CiAJewogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihjcmVhUXJ5LCAiIExPQ0FMRSA9ICIpOwpk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgYi9zcmMvYmluL3BzcWwvZGVz Y3JpYmUuYwppbmRleCA3NzRjYzc2NGZmLi4wYTM4ZWIxNWIxIDEwMDY0NAotLS0gYS9zcmMv YmluL3BzcWwvZGVzY3JpYmUuYworKysgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwpAQCAt ODc5LDYgKzg3OSwxNCBAQCBsaXN0QWxsRGJzKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGJvb2wg dmVyYm9zZSkKIAkJCQkJCSAgIiAgICAgICBkLmRhdGN0eXBlIGFzIFwiJXNcIixcbiIsCiAJ CQkJCQkgIGdldHRleHRfbm9vcCgiQ29sbGF0ZSIpLAogCQkJCQkJICBnZXR0ZXh0X25vb3Ao IkN0eXBlIikpOworCWlmIChwc2V0LnN2ZXJzaW9uID49IDEzMDAwMCkKKwkJYXBwZW5kUFFF eHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCSAgIiAgICAgICBDQVNFIGQuZGF0Y29sbHByb3ZpZGVy IFdIRU4gJ2MnIFRIRU4gJ2xpYmMnIFdIRU4gJ2knIFRIRU4gJ2ljdScgRU5EIEFTIFwiJXNc IixcbiIsCisJCQkJCQkgIGdldHRleHRfbm9vcCgiUHJvdmlkZXIiKSk7CisJZWxzZQorCQlh cHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJICAiICAgICAgICdsaWJjJyBBUyBcIiVz XCIsXG4iLAorCQkJCQkJICBnZXR0ZXh0X25vb3AoIlByb3ZpZGVyIikpOwogCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZidWYsICIgICAgICAgIik7CiAJcHJpbnRBQ0xDb2x1bW4oJmJ1Ziwg ImQuZGF0YWNsIik7CiAJaWYgKHZlcmJvc2UgJiYgcHNldC5zdmVyc2lvbiA+PSA4MDIwMCkK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vc2NyaXB0cy9NYWtlZmlsZSBiL3NyYy9iaW4vc2NyaXB0 cy9NYWtlZmlsZQppbmRleCBlZGU2NjUwOTBmLi5lZjRmODU5M2RjIDEwMDY0NAotLS0gYS9z cmMvYmluL3NjcmlwdHMvTWFrZWZpbGUKKysrIGIvc3JjL2Jpbi9zY3JpcHRzL01ha2VmaWxl CkBAIC01Myw2ICs1Myw4IEBAIGNsZWFuIGRpc3RjbGVhbiBtYWludGFpbmVyLWNsZWFuOgog CXJtIC1mIGNvbW1vbi5vIHNjcmlwdHNfcGFyYWxsZWwubyAkKFdJTjMyUkVTKQogCXJtIC1y ZiB0bXBfY2hlY2sKIAorZXhwb3J0IHdpdGhfaWN1CisKIGNoZWNrOgogCSQocHJvdmVfY2hl Y2spCiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vc2NyaXB0cy9jcmVhdGVkYi5jIGIvc3JjL2Jp bi9zY3JpcHRzL2NyZWF0ZWRiLmMKaW5kZXggNjRiY2MyMGNiNC4uNTk0NGZkM2Y2MyAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9zY3JpcHRzL2NyZWF0ZWRiLmMKKysrIGIvc3JjL2Jpbi9zY3Jp cHRzL2NyZWF0ZWRiLmMKQEAgLTM3LDYgKzM3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQogCQl7ImxjLWN0eXBlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDJ9LAog CQl7ImxvY2FsZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnbCd9LAogCQl7Im1haW50 ZW5hbmNlLWRiIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDN9LAorCQl7ImNvbGxhdGlv bi1wcm92aWRlciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA0fSwKIAkJe05VTEwsIDAs IE5VTEwsIDB9CiAJfTsKIApAQCAtNTksNiArNjAsNyBAQCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCiAJY2hhcgkgICAqbGNfY29sbGF0ZSA9IE5VTEw7CiAJY2hhcgkgICAqbGNf Y3R5cGUgPSBOVUxMOwogCWNoYXIJICAgKmxvY2FsZSA9IE5VTEw7CisJY2hhcgkgICAqY29s bGF0aW9uX3Byb3ZpZGVyID0gTlVMTDsKIAogCVBRRXhwQnVmZmVyRGF0YSBzcWw7CiAKQEAg LTExNyw2ICsxMTksOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQljYXNl IDM6CiAJCQkJbWFpbnRlbmFuY2VfZGIgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVh azsKKwkJCWNhc2UgNDoKKwkJCQljb2xsYXRpb25fcHJvdmlkZXIgPSBwZ19zdHJkdXAob3B0 YXJnKTsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJZnByaW50ZihzdGRlcnIsIF8o IlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIiksIHByb2duYW1l KTsKIAkJCQlleGl0KDEpOwpAQCAtMTkzLDYgKzE5OCw4IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKIAkJYXBwZW5kUFFFeHBCdWZmZXIoJnNxbCwgIiBMQ19DT0xMQVRFICcl cyciLCBsY19jb2xsYXRlKTsKIAlpZiAobGNfY3R5cGUpCiAJCWFwcGVuZFBRRXhwQnVmZmVy KCZzcWwsICIgTENfQ1RZUEUgJyVzJyIsIGxjX2N0eXBlKTsKKwlpZiAoY29sbGF0aW9uX3By b3ZpZGVyKQorCQlhcHBlbmRQUUV4cEJ1ZmZlcigmc3FsLCAiIENPTExBVElPTl9QUk9WSURF UiAlcyIsIGNvbGxhdGlvbl9wcm92aWRlcik7CiAKIAlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIo JnNxbCwgJzsnKTsKIApAQCAtMjUwLDYgKzI1Nyw4IEBAIGhlbHAoY29uc3QgY2hhciAqcHJv Z25hbWUpCiAJcHJpbnRmKF8oIlVzYWdlOlxuIikpOwogCXByaW50ZihfKCIgICVzIFtPUFRJ T05dLi4uIFtEQk5BTUVdIFtERVNDUklQVElPTl1cbiIpLCBwcm9nbmFtZSk7CiAJcHJpbnRm KF8oIlxuT3B0aW9uczpcbiIpKTsKKwlwcmludGYoXygiICAgICAgLS1jb2xsYXRpb24tcHJv dmlkZXI9e2xpYmN8aWN1fVxuIgorCQkJICIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29sbGF0aW9uIHByb3ZpZGVyIGZvciB0aGUgZGF0YWJhc2VcbiIpKTsKIAlwcmludGYo XygiICAtRCwgLS10YWJsZXNwYWNlPVRBQkxFU1BBQ0UgIGRlZmF1bHQgdGFibGVzcGFjZSBm b3IgdGhlIGRhdGFiYXNlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLWUsIC0tZWNobyAgICAgICAg ICAgICAgICAgICBzaG93IHRoZSBjb21tYW5kcyBiZWluZyBzZW50IHRvIHRoZSBzZXJ2ZXJc biIpKTsKIAlwcmludGYoXygiICAtRSwgLS1lbmNvZGluZz1FTkNPRElORyAgICAgIGVuY29k aW5nIGZvciB0aGUgZGF0YWJhc2VcbiIpKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vc2NyaXB0 cy90LzAyMF9jcmVhdGVkYi5wbCBiL3NyYy9iaW4vc2NyaXB0cy90LzAyMF9jcmVhdGVkYi5w bAppbmRleCBjMGY2MDY3YTkyLi45ZTgyMjAzMzVmIDEwMDY0NAotLS0gYS9zcmMvYmluL3Nj cmlwdHMvdC8wMjBfY3JlYXRlZGIucGwKKysrIGIvc3JjL2Jpbi9zY3JpcHRzL3QvMDIwX2Ny ZWF0ZWRiLnBsCkBAIC0zLDcgKzMsNyBAQAogCiB1c2UgUG9zdGdyZXNOb2RlOwogdXNlIFRl c3RMaWI7Ci11c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAxMzsKK3VzZSBUZXN0OjpNb3JlIHRl c3RzID0+IDE2OwogCiBwcm9ncmFtX2hlbHBfb2soJ2NyZWF0ZWRiJyk7CiBwcm9ncmFtX3Zl cnNpb25fb2soJ2NyZWF0ZWRiJyk7CkBAIC0yMiw1ICsyMiwyMiBAQAogCXFyL3N0YXRlbWVu dDogQ1JFQVRFIERBVEFCQVNFIGZvb2JhcjIgRU5DT0RJTkcgJ0xBVElOMScvLAogCSdjcmVh dGUgZGF0YWJhc2Ugd2l0aCBlbmNvZGluZycpOwogCitpZiAoJEVOVnt3aXRoX2ljdX0gZXEg J3llcycpCit7CisJJG5vZGUtPmlzc3Vlc19zcWxfbGlrZSgKKwkJWyAnY3JlYXRlZGInLCAn LVQnLCAndGVtcGxhdGUwJywgJy0tY29sbGF0aW9uLXByb3ZpZGVyPWljdScsICdmb29iYXIz JyBdLAorCQlxci9zdGF0ZW1lbnQ6IENSRUFURSBEQVRBQkFTRSBmb29iYXIzIC4qIENPTExB VElPTl9QUk9WSURFUiBpY3UvLAorCQknY3JlYXRlIGRhdGFiYXNlIHdpdGggSUNVJyk7Cit9 CitlbHNlCit7CisJJG5vZGUtPmNvbW1hbmRfZmFpbHMoCisJCVsgJ2NyZWF0ZWRiJywgJy1U JywgJ3RlbXBsYXRlMCcsICctLWNvbGxhdGlvbi1wcm92aWRlcj1pY3UnLCAnZm9vYmFyMycg XSwKKwkJJ2NyZWF0ZSBkYXRhYmFzZSB3aXRoIElDVSBmYWlscyBzaW5jZSBubyBJQ1Ugc3Vw cG9ydCcpOworCXBhc3M7Cit9CisKICRub2RlLT5jb21tYW5kX2ZhaWxzKFsgJ2NyZWF0ZWRi JywgJ2Zvb2JhcjEnIF0sCiAJJ2ZhaWxzIGlmIGRhdGFiYXNlIGFscmVhZHkgZXhpc3RzJyk7 Ciskbm9kZS0+Y29tbWFuZF9mYWlscyhbICdjcmVhdGVkYicsICctVCcsICd0ZW1wbGF0ZTAn LCAnLS1jb2xsYXRpb24tcHJvdmlkZXI9eHl6JywgJ2Zvb2JhclgnIF0sCisJJ2ZhaWxzIGZv ciBpbnZhbGlkIGNvbGxhdGlvbiBwcm92aWRlcicpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19kYXRhYmFzZS5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2Rh dGFiYXNlLmRhdAppbmRleCA4OWJkNzVkMDI0Li5mMjYxY2RkODM4IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX2RhdGFiYXNlLmRhdAorKysgYi9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX2RhdGFiYXNlLmRhdApAQCAtMTUsNyArMTUsNyBAQAogeyBvaWQgPT4gJzEn LCBvaWRfc3ltYm9sID0+ICdUZW1wbGF0ZURiT2lkJywKICAgZGVzY3IgPT4gJ2RlZmF1bHQg dGVtcGxhdGUgZm9yIG5ldyBkYXRhYmFzZXMnLAogICBkYXRuYW1lID0+ICd0ZW1wbGF0ZTEn LCBlbmNvZGluZyA9PiAnRU5DT0RJTkcnLCBkYXRjb2xsYXRlID0+ICdMQ19DT0xMQVRFJywK LSAgZGF0Y3R5cGUgPT4gJ0xDX0NUWVBFJywgZGF0aXN0ZW1wbGF0ZSA9PiAndCcsIGRhdGFs bG93Y29ubiA9PiAndCcsCisgIGRhdGN0eXBlID0+ICdMQ19DVFlQRScsIGRhdGNvbGxwcm92 aWRlciA9PiAnQ09MTFBST1ZJREVSJywgZGF0aXN0ZW1wbGF0ZSA9PiAndCcsIGRhdGFsbG93 Y29ubiA9PiAndCcsCiAgIGRhdGNvbm5saW1pdCA9PiAnLTEnLCBkYXRsYXN0c3lzb2lkID0+ ICcwJywgZGF0ZnJvemVueGlkID0+ICcwJywKICAgZGF0bWlubXhpZCA9PiAnMScsIGRhdHRh Ymxlc3BhY2UgPT4gJ3BnX2RlZmF1bHQnLCBkYXRhY2wgPT4gJ19udWxsXycgfSwKIApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19kYXRhYmFzZS5oIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19kYXRhYmFzZS5oCmluZGV4IDA2ZmVhNDVmNTMuLmFiM2MwOTUxZGYg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfZGF0YWJhc2UuaAorKysgYi9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX2RhdGFiYXNlLmgKQEAgLTQ2LDYgKzQ2LDkgQEAgQ0FU QUxPRyhwZ19kYXRhYmFzZSwxMjYyLERhdGFiYXNlUmVsYXRpb25JZCkgQktJX1NIQVJFRF9S RUxBVElPTiBCS0lfUk9XVFlQRV9PSUQKIAkvKiBMQ19DVFlQRSBzZXR0aW5nICovCiAJTmFt ZURhdGEJZGF0Y3R5cGU7CiAKKwkvKiBzZWUgcGdfY29sbGF0aW9uLmNvbGxwcm92aWRlciAq LworCWNoYXIJCWRhdGNvbGxwcm92aWRlcjsKKwogCS8qIGFsbG93ZWQgYXMgQ1JFQVRFIERB VEFCQVNFIHRlbXBsYXRlPyAqLwogCWJvb2wJCWRhdGlzdGVtcGxhdGU7CiAKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMv cGdfbG9jYWxlLmgKaW5kZXggYjRiM2FhNTg0My4uMTdmY2VlMWU4OSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMv cGdfbG9jYWxlLmgKQEAgLTEwMSw2ICsxMDEsMTIgQEAgc3RydWN0IHBnX2xvY2FsZV9zdHJ1 Y3QKIAogdHlwZWRlZiBzdHJ1Y3QgcGdfbG9jYWxlX3N0cnVjdCAqcGdfbG9jYWxlX3Q7CiAK K2V4dGVybiBzdHJ1Y3QgcGdfbG9jYWxlX3N0cnVjdCBnbG9iYWxfbG9jYWxlOworCitleHRl cm4gdm9pZCBtYWtlX2ljdV9jb2xsYXRvcihjb25zdCBjaGFyICpjb2xsY29sbGF0ZSwgY29u c3QgY2hhciAqY29sbGN0eXBlLAorCQkJCQkJCSAgc3RydWN0IHBnX2xvY2FsZV9zdHJ1Y3Qg KnJlc3VsdHApOworZXh0ZXJuIHZvaWQgY2hlY2tfY29sbGF0aW9uX3ZlcnNpb24oSGVhcFR1 cGxlIGNvbGx0dXBsZSk7CisKIGV4dGVybiBwZ19sb2NhbGVfdCBwZ19uZXdsb2NhbGVfZnJv bV9jb2xsYXRpb24oT2lkIGNvbGxpZCk7CiAKIGV4dGVybiBjaGFyICpnZXRfY29sbGF0aW9u X2FjdHVhbF92ZXJzaW9uKGNoYXIgY29sbHByb3ZpZGVyLCBjb25zdCBjaGFyICpjb2xsY29s bGF0ZSk7CgpiYXNlLWNvbW1pdDogNTZmOGY5NjI0YmEwNTBjN2M0N2RkOTc1NDdiN2ZhZmI4 NjZmMmJkZAotLSAKMi4yMi4wCgo= --------------51A103652852E44284833A35--