Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ra8mH-008GFq-VD for pgsql-hackers@arkaria.postgresql.org; Wed, 14 Feb 2024 06:29:54 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1ra8mF-004FHU-Bf for pgsql-hackers@arkaria.postgresql.org; Wed, 14 Feb 2024 06:29:51 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ra8mE-004FFj-Cr for pgsql-hackers@lists.postgresql.org; Wed, 14 Feb 2024 06:29:51 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ra8m4-006fDL-Eb for pgsql-hackers@lists.postgresql.org; Wed, 14 Feb 2024 06:29:48 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTPA id 1E20F60E9D; Wed, 14 Feb 2024 15:29:35 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_2c1288a8b707acfbf4c8b8a543c8509a" Content-Transfer-Encoding: 7bit Date: Wed, 14 Feb 2024 15:29:35 +0900 From: torikoshia To: pgsql-hackers@lists.postgresql.org Cc: =?UTF-8?Q?=C3=89tienne_BERSAC?= , Andres Freund , jtc331@gmail.com, ashutosh.bapat.oss@gmail.com, rafaelthca@gmail.com, jian.universality@gmail.com Subject: Re: RFC: Logging plan of the running query In-Reply-To: <3d5fd6d955944b5e8e4b8d1917f14885@oss.nttdata.com> References: <4e1e4e5d022964953e84468fe4e511b0@oss.nttdata.com> <4af7712833d4ce989cf5e658106e42da@oss.nttdata.com> <7ab57ab0ba3416e2dbf54927752bc310@oss.nttdata.com> <20231006155850.kjjb2vwbkawj7moq@alap3.anarazel.de> <0e0e7ca08dff077a625c27a5e0c2ef0a@oss.nttdata.com> <2d6d7846b6b794c0e727c431852a113c@oss.nttdata.com> <0eb66e8c72f23695957466db5c76c69c@oss.nttdata.com> <9c36599db62ef7466a297843fe812fc60e827cd2.camel@dalibo.com> <66d29d2c10ca9181c7e183eeeb4525f8@oss.nttdata.com> <7bc1cc1bcc3289e9354ebb00ac1c8440c01b736c.camel@dalibo.com> <0eafbfbe8dc39e80bce358b48a258510@oss.nttdata.com> <6d13f7485091f51ad7d11cb7c65f75038c10d747.camel@dalibo.com> <61b4add9a01f21011789b6ee04085751@oss.nttdata.com> <3d5fd6d955944b5e8e4b8d1917f14885@oss.nttdata.com> User-Agent: Roundcube Webmail/1.4.11 Message-ID: <67fac921c935d7b9db51609a7599520f@oss.nttdata.com> X-Sender: torikoshia@oss.nttdata.com List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_2c1288a8b707acfbf4c8b8a543c8509a Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed On 2024-02-13 11:30, torikoshia wrote: > I'll update the patch including other points such as removing ensuring > no page lock code. Updated the patch. > Using injection point support we should be able to add tests for > testing pg_log_query_plan behaviour when there are page locks held or > when auto_explain (with instrumentation) and pg_log_query_plan() work > on the same query plan. Use injection point to make the backend > running query wait at a suitable point to delay its execution and fire > pg_log_query_plan() from other backend. May be the same test could > examine the server log file to see if the plan is indeed output to the > server log file. Attached patch uses injection point as below: - There may be more points to inject, but added an injection point at ExecutorRun(), which seems to be the first interruption point where plans can be reliably displayed. - At injection point, it'd be possible to wait for some duration and fire pg_log_plan_query() as you suggested. However, I'm not sure how long duration is appropriate considering the variety of testing environments. Instead, attached patch calls HandleLogQueryPlanInterrupt() directly and set InterruptPending. - Tests both pg_log_plan_query() and auto_explain logs for their output, and the logged plans are the same. -- Regards, -- Atsushi Torikoshi NTT DATA Group Corporation --=_2c1288a8b707acfbf4c8b8a543c8509a Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v36-0001-Add-function-to-log-the-plan-of-the-query.patch Content-Disposition: attachment; filename=v36-0001-Add-function-to-log-the-plan-of-the-query.patch; size=34167 RnJvbSAxZGNhYzRmYjQyOTFlM2I5MjczMzQ5NDYyNGNiYjA5MGRmZjdhZGVkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IFdlZCwgMTQgRmViIDIwMjQgMTQ6NDE6MDQgKzA5MDAKU3ViamVjdDog W1BBVENIIHYzNl0gQWRkIGZ1bmN0aW9uIHRvIGxvZyB0aGUgcGxhbiBvZiB0aGUgcXVlcnkKCkN1 cnJlbnRseSwgd2UgaGF2ZSB0byB3YWl0IGZvciB0aGUgcXVlcnkgZXhlY3V0aW9uIHRvIGZpbmlz aAp0byBjaGVjayBpdHMgcGxhbi4gVGhpcyBpcyBub3Qgc28gY29udmVuaWVudCB3aGVuCmludmVz dGlnYXRpbmcgbG9uZy1ydW5uaW5nIHF1ZXJpZXMgb24gcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMK d2hlcmUgd2UgY2Fubm90IHVzZSBkZWJ1Z2dlcnMuClRvIGltcHJvdmUgdGhpcyBzaXR1YXRpb24s IHRoaXMgcGF0Y2ggYWRkcwpwZ19sb2dfcXVlcnlfcGxhbigpIGZ1bmN0aW9uIHRoYXQgcmVxdWVz dHMgdG8gbG9nIHRoZQpwbGFuIG9mIHRoZSBzcGVjaWZpZWQgYmFja2VuZCBwcm9jZXNzLgoKQnkg ZGVmYXVsdCwgb25seSBzdXBlcnVzZXJzIGFyZSBhbGxvd2VkIHRvIHJlcXVlc3QgdG8gbG9nIHRo ZQpwbGFucyBiZWNhdXNlIGFsbG93aW5nIGFueSB1c2VycyB0byBpc3N1ZSB0aGlzIHJlcXVlc3Qg YXQgYW4KdW5ib3VuZGVkIHJhdGUgd291bGQgY2F1c2UgbG90cyBvZiBsb2cgbWVzc2FnZXMgYW5k IHdoaWNoIGNhbgpsZWFkIHRvIGRlbmlhbCBvZiBzZXJ2aWNlLgoKT24gcmVjZWlwdCBvZiB0aGUg cmVxdWVzdCwgYXQgdGhlIG5leHQgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSwKdGhlIHRhcmdldCBi YWNrZW5kIGxvZ3MgaXRzIHBsYW4gYXQgTE9HX1NFUlZFUl9PTkxZIGxldmVsLCBzbwp0aGF0IHRo ZXNlIHBsYW5zIHdpbGwgYXBwZWFyIGluIHRoZSBzZXJ2ZXIgbG9nIGJ1dCBub3QgYmUgc2VudAp0 byB0aGUgY2xpZW50LgoKUmV2aWV3ZWQtYnk6IEJoYXJhdGggUnVwaXJlZGR5LCBGdWppaSBNYXNh bywgRGlsaXAgS3VtYXIsCk1hc2FoaXJvIElrZWRhLCBFa2F0ZXJpbmEgU29rb2xvdmEsIEp1c3Rp biBQcnl6YnksIEt5b3Rhcm8KSG9yaWd1Y2hpLCBSb2JlcnQgVHJlYXQsIEFsZW5hIFJ5YmFraW5h LCBBc2h1dG9zaCBCYXBhdCwKSmlhbiBIZQoKQ28tYXV0aG9yZWQtYnk6IEphbWVzIENvbGVtYW4g PGphbWVjb2xlbWFuQHBheXBhbC5jb20+CgpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jl c3FsLm9yZy9tZXNzYWdlLWlkL2NmODUwMWJjZDk1YmE0ZDcyN2NiYmE4ODZiYTllZWE4JTQwb3Nz Lm50dGRhdGEuY29tCkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3Nh Z2UtaWQvZmxhdC9kNjhjM2FlMzE2NzI2NjQ4NzZiMjJkMmRjYmI1MjZkMiU0MHBvc3RncmVzcHJv LnJ1Ci0tLQogY29udHJpYi9hdXRvX2V4cGxhaW4vTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwg ICAyICsKIGNvbnRyaWIvYXV0b19leHBsYWluL2F1dG9fZXhwbGFpbi5jICAgICAgICAgICB8ICAy MyArLS0KIGNvbnRyaWIvYXV0b19leHBsYWluL3QvMDAxX2F1dG9fZXhwbGFpbi5wbCAgICB8ICAz NSArKysrCiBkb2Mvc3JjL3NnbWwvZnVuYy5zZ21sICAgICAgICAgICAgICAgICAgICAgICAgfCAg NTAgKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYyAgICAgICAgICAgICB8 ICAxNyArKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNxbCAgICAgIHwg ICAyICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICAgICAgICB8IDE4 MCArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMgICAg ICAgICAgICAgICB8ICAxOSArKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5j ICAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMgICAgICAg ICAgICAgICB8ICAgOSArLQogc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgICAg ICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jICAgICAgICAg ICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAg ICAgfCAgIDYgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oICAgICAgICAgICAgICAg IHwgICA5ICsKIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgICAgICAgICB8 ICAgMSArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaCAgICAgICAgICAgICAgICAgICAgfCAg IDIgLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggICAgICAgICAgICAgIHwgICAx ICsKIHNyYy9pbmNsdWRlL3Rjb3AvcHF1ZXJ5LmggICAgICAgICAgICAgICAgICAgICB8ICAgMiAr LQogc3JjL2luY2x1ZGUvdXRpbHMvZWxvZy5oICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsK IC4uLi9pbmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9wb2ludHMuYyAgICAgICB8ICAxMSArKwog c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQgIHwgIDU0ICsrKysr LQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvbWlzY19mdW5jdGlvbnMuc3FsICAgICAgIHwgIDQxICsr Ky0KIDIyIGZpbGVzIGNoYW5nZWQsIDQyNyBpbnNlcnRpb25zKCspLCA0OCBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9jb250cmliL2F1dG9fZXhwbGFpbi9NYWtlZmlsZSBiL2NvbnRyaWIvYXV0 b19leHBsYWluL01ha2VmaWxlCmluZGV4IGVmZDEyN2QzY2EuLjY0ZmUwZTA1NzMgMTAwNjQ0Ci0t LSBhL2NvbnRyaWIvYXV0b19leHBsYWluL01ha2VmaWxlCisrKyBiL2NvbnRyaWIvYXV0b19leHBs YWluL01ha2VmaWxlCkBAIC04LDYgKzgsOCBAQCBQR0ZJTEVERVNDID0gImF1dG9fZXhwbGFpbiAt IGxvZ2dpbmcgZmFjaWxpdHkgZm9yIGV4ZWN1dGlvbiBwbGFucyIKIAogVEFQX1RFU1RTID0gMQog CitFWFRSQV9JTlNUQUxMID0gc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzCisKIGlm ZGVmIFVTRV9QR1hTCiBQR19DT05GSUcgPSBwZ19jb25maWcKIFBHWFMgOj0gJChzaGVsbCAkKFBH X0NPTkZJRykgLS1wZ3hzKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9hdXRvX2V4cGxhaW4vYXV0b19l eHBsYWluLmMgYi9jb250cmliL2F1dG9fZXhwbGFpbi9hdXRvX2V4cGxhaW4uYwppbmRleCA2Nzdj MTM1ZjU5Li5lMDQxYjEwYjBlIDEwMDY0NAotLS0gYS9jb250cmliL2F1dG9fZXhwbGFpbi9hdXRv X2V4cGxhaW4uYworKysgYi9jb250cmliL2F1dG9fZXhwbGFpbi9hdXRvX2V4cGxhaW4uYwpAQCAt NDAxLDI2ICs0MDEsOSBAQCBleHBsYWluX0V4ZWN1dG9yRW5kKFF1ZXJ5RGVzYyAqcXVlcnlEZXNj KQogCQkJZXMtPmZvcm1hdCA9IGF1dG9fZXhwbGFpbl9sb2dfZm9ybWF0OwogCQkJZXMtPnNldHRp bmdzID0gYXV0b19leHBsYWluX2xvZ19zZXR0aW5nczsKIAotCQkJRXhwbGFpbkJlZ2luT3V0cHV0 KGVzKTsKLQkJCUV4cGxhaW5RdWVyeVRleHQoZXMsIHF1ZXJ5RGVzYyk7Ci0JCQlFeHBsYWluUXVl cnlQYXJhbWV0ZXJzKGVzLCBxdWVyeURlc2MtPnBhcmFtcywgYXV0b19leHBsYWluX2xvZ19wYXJh bWV0ZXJfbWF4X2xlbmd0aCk7Ci0JCQlFeHBsYWluUHJpbnRQbGFuKGVzLCBxdWVyeURlc2MpOwot CQkJaWYgKGVzLT5hbmFseXplICYmIGF1dG9fZXhwbGFpbl9sb2dfdHJpZ2dlcnMpCi0JCQkJRXhw bGFpblByaW50VHJpZ2dlcnMoZXMsIHF1ZXJ5RGVzYyk7Ci0JCQlpZiAoZXMtPmNvc3RzKQotCQkJ CUV4cGxhaW5QcmludEpJVFN1bW1hcnkoZXMsIHF1ZXJ5RGVzYyk7Ci0JCQlFeHBsYWluRW5kT3V0 cHV0KGVzKTsKLQotCQkJLyogUmVtb3ZlIGxhc3QgbGluZSBicmVhayAqLwotCQkJaWYgKGVzLT5z dHItPmxlbiA+IDAgJiYgZXMtPnN0ci0+ZGF0YVtlcy0+c3RyLT5sZW4gLSAxXSA9PSAnXG4nKQot CQkJCWVzLT5zdHItPmRhdGFbLS1lcy0+c3RyLT5sZW5dID0gJ1wwJzsKLQotCQkJLyogRml4IEpT T04gdG8gb3V0cHV0IGFuIG9iamVjdCAqLwotCQkJaWYgKGF1dG9fZXhwbGFpbl9sb2dfZm9ybWF0 ID09IEVYUExBSU5fRk9STUFUX0pTT04pCi0JCQl7Ci0JCQkJZXMtPnN0ci0+ZGF0YVswXSA9ICd7 JzsKLQkJCQllcy0+c3RyLT5kYXRhW2VzLT5zdHItPmxlbiAtIDFdID0gJ30nOwotCQkJfQorCQkJ RXhwbGFpbkFzc2VtYmxlTG9nT3V0cHV0KGVzLCBxdWVyeURlc2MsIGF1dG9fZXhwbGFpbl9sb2df Zm9ybWF0LAorCQkJCQkJCQkJIGF1dG9fZXhwbGFpbl9sb2dfdHJpZ2dlcnMsCisJCQkJCQkJCQkg YXV0b19leHBsYWluX2xvZ19wYXJhbWV0ZXJfbWF4X2xlbmd0aCk7CiAKIAkJCS8qCiAJCQkgKiBO b3RlOiB3ZSByZWx5IG9uIHRoZSBleGlzdGluZyBsb2dnaW5nIG9mIGNvbnRleHQgb3IKZGlmZiAt LWdpdCBhL2NvbnRyaWIvYXV0b19leHBsYWluL3QvMDAxX2F1dG9fZXhwbGFpbi5wbCBiL2NvbnRy aWIvYXV0b19leHBsYWluL3QvMDAxX2F1dG9fZXhwbGFpbi5wbAppbmRleCAwZTViMzRhZmE5Li4z NmE3ODcxNzRlIDEwMDY0NAotLS0gYS9jb250cmliL2F1dG9fZXhwbGFpbi90LzAwMV9hdXRvX2V4 cGxhaW4ucGwKKysrIGIvY29udHJpYi9hdXRvX2V4cGxhaW4vdC8wMDFfYXV0b19leHBsYWluLnBs CkBAIC0zNSw2ICszNSw4IEBAICRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywg ImF1dG9fZXhwbGFpbi5sb2dfbWluX2R1cmF0aW9uID0gMCIpOwogJG5vZGUtPmFwcGVuZF9jb25m KCdwb3N0Z3Jlc3FsLmNvbmYnLCAiYXV0b19leHBsYWluLmxvZ19hbmFseXplID0gb24iKTsKICRu b2RlLT5zdGFydDsKIAorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ1JFQVRFIEVYVEVO U0lPTiBpbmplY3Rpb25fcG9pbnRzJyk7CisKICMgU2ltcGxlIHF1ZXJ5LgogbXkgJGxvZ19jb250 ZW50cyA9IHF1ZXJ5X2xvZygkbm9kZSwgIlNFTEVDVCAqIEZST00gcGdfY2xhc3M7Iik7CiAKQEAg LTIxMiw0ICsyMTQsMzcgQEAgUkVWT0tFIFNFVCBPTiBQQVJBTUVURVIgYXV0b19leHBsYWluLmxv Z19mb3JtYXQgRlJPTSByZWdyZXNzX3VzZXIxOwogRFJPUCBVU0VSIHJlZ3Jlc3NfdXNlcjE7CiB9 KTsKIAorIyBDaGVjayB0aGF0IHVzaW5nIGJvdGggYXV0b19leHBsYWluIGFuZCBwZ19sb2dfcXVl cnlfcGxhbigpIHdvcmtzIGZpbmUKKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxe1NF TEVDVCBpbmplY3Rpb25fcG9pbnRzX2F0dGFjaCgnZXhlY3V0b3ItcnVuJywgJ2xvZ3F1ZXJ5cGxh bicpfSk7CisKKyRsb2dfY29udGVudHMgPSBxdWVyeV9sb2coCisJJG5vZGUsCisJIlNFTEVDVCAq IEZST00gcGdfY2xhc3M7IiwKKwl7CisJCSJhdXRvX2V4cGxhaW4ubG9nX3ZlcmJvc2UiID0+ICJv biIsCisJCSJhdXRvX2V4cGxhaW4ubG9nX3NldHRpbmdzIiA9PiAib24iLAorCQkiYXV0b19leHBs YWluLmxvZ19hbmFseXplIiA9PiAib2ZmIiwKKwkJImNvbXB1dGVfcXVlcnlfaWQiID0+ICJvbiIK Kwl9KTsKKworbGlrZSgKKwkkbG9nX2NvbnRlbnRzLAorCXFyL3F1ZXJ5IHBsYW4gcnVubmluZyBv biBiYWNrZW5kIHdpdGggUElELywKKwkid2l0aCBwZ19sb2dfcXVlcnlfcGxhbigpLCBwZ19sb2df cXVlcnlfcGxhbigpIGxvZ2dlZCIpOworCitsaWtlKAorCSRsb2dfY29udGVudHMsCisJcXIvZHVy YXRpb246IC4rbXMgIHBsYW46LywKKwkid2l0aCBwZ19sb2dfcXVlcnlfcGxhbigpLCBhdXRvX2V4 cGxhaW4gbG9nZ2VkIik7CisKKyRsb2dfY29udGVudHMgPX4gLyhRdWVyeSBUZXh0Oi4qUXVlcnkg SWRlbnRpZmllcjogXGQrKS4qKFF1ZXJ5IFRleHQ6LipRdWVyeSBJZGVudGlmaWVyOiBcZCspL3M7 CitteSAkcGdfbG9nX3BsYW5fcXVlcnlfb3V0cHV0ID0gJDE7CitteSAkYXV0b19leHBsYWluX291 dHB1dCA9ICQyOworCitjbXBfb2soCisJJHBnX2xvZ19wbGFuX3F1ZXJ5X291dHB1dCwgImVxIiwK KwkkYXV0b19leHBsYWluX291dHB1dCwKKwkid2l0aCBwZ19sb2dfcGxhbl9xdWVyeV9sb2coKSwg bG9nZ2VkIHBsYW5zIGFyZSB0aGUgc2FtZSIpOworCiBkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCmluZGV4 IDhmMTQ3YTI0MTcuLjYxZGVjMGU0MTUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5jLnNn bWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbApAQCAtMjcxOTEsNiArMjcxOTEsMjUgQEAg U0VMRUNUIGNvbGxhdGlvbiBmb3IgKCdmb28nIENPTExBVEUgImRlX0RFIik7CiAgICAgICAgPC9w YXJhPjwvZW50cnk+CiAgICAgICA8L3Jvdz4KIAorICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnkg cm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAg ICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgPHByaW1hcnk+cGdfbG9nX3F1ZXJ5X3BsYW48L3By aW1hcnk+CisgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+cGdfbG9nX3F1 ZXJ5X3BsYW48L2Z1bmN0aW9uPiAoIDxwYXJhbWV0ZXI+cGlkPC9wYXJhbWV0ZXI+IDx0eXBlPmlu dGVnZXI8L3R5cGU+ICkKKyAgICAgICAgPHJldHVybnZhbHVlPmJvb2xlYW48L3JldHVybnZhbHVl PgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmVxdWVzdHMgdG8gbG9n IHRoZSBwbGFuIG9mIHRoZSBxdWVyeSBjdXJyZW50bHkgcnVubmluZyBvbiB0aGUKKyAgICAgICAg YmFja2VuZCB3aXRoIHNwZWNpZmllZCBwcm9jZXNzIElELgorICAgICAgICBJdCB3aWxsIGJlIGxv Z2dlZCBhdCA8bGl0ZXJhbD5MT0c8L2xpdGVyYWw+IG1lc3NhZ2UgbGV2ZWwgYW5kCisgICAgICAg IHdpbGwgYXBwZWFyIGluIHRoZSBzZXJ2ZXIgbG9nIGJhc2VkIG9uIHRoZSBsb2cKKyAgICAgICAg Y29uZmlndXJhdGlvbiBzZXQgKFNlZSA8eHJlZiBsaW5rZW5kPSJydW50aW1lLWNvbmZpZy1sb2dn aW5nIi8+CisgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uKSwgYnV0IHdpbGwgbm90IGJlIHNl bnQgdG8gdGhlIGNsaWVudAorICAgICAgICByZWdhcmRsZXNzIG9mIDx4cmVmIGxpbmtlbmQ9Imd1 Yy1jbGllbnQtbWluLW1lc3NhZ2VzIi8+LgorICAgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAg IDwvcm93PgorCiAgICAgICA8cm93PgogICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2Vu dHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CiAgICAgICAgIDxpbmRleHRlcm0+CkBA IC0yNzMwNSw2ICsyNzMyNCwzNyBAQCBMT0c6ICBHcmFuZCB0b3RhbDogMTY1MTkyMCBieXRlcyBp biAyMDEgYmxvY2tzOyA2MjIzNjAgZnJlZSAoODggY2h1bmtzKTsgMTAyOTU2MAogICAgIGJlY2F1 c2UgaXQgbWF5IGdlbmVyYXRlIGEgbGFyZ2UgbnVtYmVyIG9mIGxvZyBtZXNzYWdlcy4KICAgIDwv cGFyYT4KIAorICAgPHBhcmE+CisgICAgPGZ1bmN0aW9uPnBnX2xvZ19xdWVyeV9wbGFuPC9mdW5j dGlvbj4gY2FuIGJlIHVzZWQKKyAgICB0byBsb2cgdGhlIHBsYW4gb2YgYSBiYWNrZW5kIHByb2Nl c3MuIEZvciBleGFtcGxlOgorPHByb2dyYW1saXN0aW5nPgorcG9zdGdyZXM9IyBTRUxFQ1QgcGdf bG9nX3F1ZXJ5X3BsYW4oMjAxMTE2KTsKKyBwZ19sb2dfcXVlcnlfcGxhbgorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorPC9wcm9ncmFtbGlzdGluZz4KK1RoZSBmb3Jt YXQgb2YgdGhlIHF1ZXJ5IHBsYW4gaXMgdGhlIHNhbWUgYXMgd2hlbiA8bGl0ZXJhbD5WRVJCT1NF PC9saXRlcmFsPiwKKzxsaXRlcmFsPkNPU1RTPC9saXRlcmFsPiwgPGxpdGVyYWw+U0VUVElOR1M8 L2xpdGVyYWw+IGFuZAorPGxpdGVyYWw+Rk9STUFUIFRFWFQ8L2xpdGVyYWw+IGFyZSB1c2VkIGlu IHRoZSA8Y29tbWFuZD5FWFBMQUlOPC9jb21tYW5kPgorY29tbWFuZC4gRm9yIGV4YW1wbGU6Cis8 c2NyZWVuPgorTE9HOiAgcXVlcnkgcGxhbiBydW5uaW5nIG9uIGJhY2tlbmQgd2l0aCBQSUQgMjAx MTE2IGlzOgorICAgICAgICBRdWVyeSBUZXh0OiBTRUxFQ1QgKiBGUk9NIHBnYmVuY2hfYWNjb3Vu dHM7CisgICAgICAgIFNlcSBTY2FuIG9uIHB1YmxpYy5wZ2JlbmNoX2FjY291bnRzICAoY29zdD0w LjAwLi41Mjc4Ny4wMCByb3dzPTIwMDAwMDAgd2lkdGg9OTcpCisgICAgICAgICAgT3V0cHV0OiBh aWQsIGJpZCwgYWJhbGFuY2UsIGZpbGxlcgorICAgICAgICBTZXR0aW5nczogd29ya19tZW0gPSAn MU1CJworICAgICAgICBRdWVyeSBJZGVudGlmaWVyOiA4NjIxMjU1NTQ2NTYwNzM5NjgwCis8L3Nj cmVlbj4KKyAgICBOb3RlIHRoYXQgd2hlbiBzdGF0ZW1lbnRzIGFyZSBleGVjdXRlZCBpbnNpZGUg YSBmdW5jdGlvbiwgb25seSB0aGUKKyAgICBwbGFuIG9mIHRoZSBtb3N0IGRlZXBseSBuZXN0ZWQg cXVlcnkgaXMgbG9nZ2VkLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBXaGVuIGEgc3Vi dHJhbnNhY3Rpb24gaXMgYWJvcnRlZCwgPGZ1bmN0aW9uPnBnX2xvZ19xdWVyeV9wbGFuPC9mdW5j dGlvbj4KKyAgICBjYW5ub3QgbG9nIHRoZSBxdWVyeSBwbGFuIGFmdGVyIHRoZSBhYm9ydC4KKyAg IDwvcGFyYT4KKwogICA8L3NlY3QyPgogCiAgIDxzZWN0MiBpZD0iZnVuY3Rpb25zLWFkbWluLWJh Y2t1cCI+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKaW5kZXggNDY0ODU4MTE3ZS4uZDBiNTk1 NDYyNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYwpAQCAtNjEsNiArNjEsNyBAQAogI2lu Y2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaW52YWxhZHQu aCIKICNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKKyNpbmNsdWRlICJ0Y29wL3BxdWVyeS5oIgog I2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvY2F0Y2FjaGUuaCIK ICNpbmNsdWRlICJ1dGlscy9jb21ib2NpZC5oIgpAQCAtMjc1MCw2ICsyNzUxLDE0IEBAIEFib3J0 VHJhbnNhY3Rpb24odm9pZCkKIAkgKi8KIAlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJlVuQmxv Y2tTaWcsIE5VTEwpOwogCisJLyoKKwkgKiBSZXNldCBwZ19sb2dfcXVlcnlfcGxhbigpIHJlbGF0 ZWQgZ2xvYmFsIHZhcmlhYmxlcy4KKwkgKiBXaGVuIEFjdGl2ZVF1ZXJ5RGVzYyBpcyByZWZlcmVu Y2VkIGFmdGVyIGFib3J0LCBzb21lIG9mIGl0cyBlbGVtZW50cworCSAqIGFyZSBmcmVlZC4gVG8g YXZvaWQgYWNjZXNzaW5nIHRoZW0sIHJlc2V0IEFjdGl2ZVF1ZXJ5RGVzYyBoZXJlLgorCSAqLwor CUFjdGl2ZVF1ZXJ5RGVzYyA9IE5VTEw7CisJUHJvY2Vzc0xvZ1F1ZXJ5UGxhbkludGVycnVwdEFj dGl2ZSA9IGZhbHNlOworCiAJLyoKIAkgKiBjaGVjayB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBz dGF0ZQogCSAqLwpAQCAtNTEwOSw2ICs1MTE4LDE0IEBAIEFib3J0U3ViVHJhbnNhY3Rpb24odm9p ZCkKIAkgKi8KIAlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJlVuQmxvY2tTaWcsIE5VTEwpOwog CisJLyoKKwkgKiBSZXNldCBwZ19sb2dfcXVlcnlfcGxhbigpIHJlbGF0ZWQgZ2xvYmFsIHZhcmlh Ymxlcy4KKwkgKiBXaGVuIEFjdGl2ZVF1ZXJ5RGVzYyBpcyByZWZlcmVuY2VkIGFmdGVyIGFib3J0 LCBzb21lIG9mIGl0cyBlbGVtZW50cworCSAqIGFyZSBmcmVlZC4gVG8gYXZvaWQgYWNjZXNzaW5n IHRoZW0sIHJlc2V0IEFjdGl2ZVF1ZXJ5RGVzYyBoZXJlLgorCSAqLworCUFjdGl2ZVF1ZXJ5RGVz YyA9IE5VTEw7CisJUHJvY2Vzc0xvZ1F1ZXJ5UGxhbkludGVycnVwdEFjdGl2ZSA9IGZhbHNlOwor CiAJLyoKIAkgKiBjaGVjayB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBzdGF0ZQogCSAqLwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNxbCBiL3NyYy9i YWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwKaW5kZXggMzQ2Y2ZiOThhMC4uYzY0 Y2E5OTQ2ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25z LnNxbAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsCkBAIC03 NTcsNiArNzU3LDggQEAgUkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfbHNfbG9naWNhbG1h cGRpcigpIEZST00gUFVCTElDOwogCiBSRVZPS0UgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19sc19y ZXBsc2xvdGRpcih0ZXh0KSBGUk9NIFBVQkxJQzsKIAorUkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJ T04gcGdfbG9nX3F1ZXJ5X3BsYW4oaW50ZWdlcikgRlJPTSBQVUJMSUM7CisKIC0tCiAtLSBXZSBh bHNvIHNldCB1cCBzb21lIHRoaW5ncyBhcyBhY2Nlc3NpYmxlIHRvIHN0YW5kYXJkIHJvbGVzLgog LS0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCA4M2QwMGE0NjYzLi5hNjU2NWMwYmFiIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZXhwbGFpbi5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiZXhlY3V0b3Iv bm9kZUhhc2guaCIKICNpbmNsdWRlICJmb3JlaWduL2Zkd2FwaS5oIgogI2luY2x1ZGUgImppdC9q aXQuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9leHRlbnNpYmxl LmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1 bmNzLmgiCkBAIC0yOCw3ICsyOSwxMCBAQAogI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIK ICNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9i dWZtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInRjb3Av cHF1ZXJ5LmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgorI2luY2x1ZGUgInV0aWxzL2Jh Y2tlbmRfc3RhdHVzLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1 dGlscy9ndWNfdGFibGVzLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbi5oIgpAQCAtNDAsNiArNDQs NyBAQAogI2luY2x1ZGUgInV0aWxzL3R5cGNhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMveG1sLmgi CiAKK2Jvb2wgUHJvY2Vzc0xvZ1F1ZXJ5UGxhbkludGVycnVwdEFjdGl2ZSA9IGZhbHNlOwogCiAv KiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIGluIEV4cGxhaW5PbmVRdWVyeSgpICov CiBFeHBsYWluT25lUXVlcnlfaG9va190eXBlIEV4cGxhaW5PbmVRdWVyeV9ob29rID0gTlVMTDsK QEAgLTc4NCw2ICs3ODksMzcgQEAgRXhwbGFpblByaW50U2V0dGluZ3MoRXhwbGFpblN0YXRlICpl cykKIAl9CiB9CiAKKy8qCisgKiBFeHBsYWluQXNzZW1ibGVMb2dPdXRwdXQgLQorICogICBBc3Nl bWJsZSBlcy0+c3RyIGZvciBsb2dnaW5nIGFjY29yZGluZyB0byBzcGVjaWZpZWQgY29udGVudHMg YW5kIGZvcm1hdAorICovCisKK3ZvaWQKK0V4cGxhaW5Bc3NlbWJsZUxvZ091dHB1dChFeHBsYWlu U3RhdGUgKmVzLCBRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGxvZ0Zvcm1hdCwKKwkJCQkJCSBi b29sIGxvZ1RyaWdnZXJzLCBpbnQgbG9nUGFyYW1ldGVyTWF4TGVuZ3RoKQoreworCUV4cGxhaW5C ZWdpbk91dHB1dChlcyk7CisJRXhwbGFpblF1ZXJ5VGV4dChlcywgcXVlcnlEZXNjKTsKKwlFeHBs YWluUXVlcnlQYXJhbWV0ZXJzKGVzLCBxdWVyeURlc2MtPnBhcmFtcywgbG9nUGFyYW1ldGVyTWF4 TGVuZ3RoKTsKKwlFeHBsYWluUHJpbnRQbGFuKGVzLCBxdWVyeURlc2MpOworCWlmIChlcy0+YW5h bHl6ZSAmJiBsb2dUcmlnZ2VycykKKwkJRXhwbGFpblByaW50VHJpZ2dlcnMoZXMsIHF1ZXJ5RGVz Yyk7CisJaWYgKGVzLT5jb3N0cykKKwkJRXhwbGFpblByaW50SklUU3VtbWFyeShlcywgcXVlcnlE ZXNjKTsKKwlFeHBsYWluRW5kT3V0cHV0KGVzKTsKKworCS8qIFJlbW92ZSBsYXN0IGxpbmUgYnJl YWsgKi8KKwlpZiAoZXMtPnN0ci0+bGVuID4gMCAmJiBlcy0+c3RyLT5kYXRhW2VzLT5zdHItPmxl biAtIDFdID09ICdcbicpCisJCWVzLT5zdHItPmRhdGFbLS1lcy0+c3RyLT5sZW5dID0gJ1wwJzsK KworCS8qIEZpeCBKU09OIHRvIG91dHB1dCBhbiBvYmplY3QgKi8KKwlpZiAobG9nRm9ybWF0ID09 IEVYUExBSU5fRk9STUFUX0pTT04pCisJeworCQllcy0+c3RyLT5kYXRhWzBdID0gJ3snOworCQll cy0+c3RyLT5kYXRhW2VzLT5zdHItPmxlbiAtIDFdID0gJ30nOworCX0KK30KKwogLyoKICAqIEV4 cGxhaW5QcmludFBsYW4gLQogICoJICBjb252ZXJ0IGEgUXVlcnlEZXNjJ3MgcGxhbiB0cmVlIHRv IHRleHQgYW5kIGFwcGVuZCBpdCB0byBlcy0+c3RyCkBAIC0xNjk0LDYgKzE3MzAsOSBAQCBFeHBs YWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCS8qCiAJICog V2UgaGF2ZSB0byBmb3JjaWJseSBjbGVhbiB1cCB0aGUgaW5zdHJ1bWVudGF0aW9uIHN0YXRlIGJl Y2F1c2Ugd2UKIAkgKiBoYXZlbid0IGRvbmUgRXhlY3V0b3JFbmQgeWV0LiAgVGhpcyBpcyBwcmV0 dHkgZ3JvdHR5IC4uLgorCSAqIFRoaXMgY2xlYW51cCBzaG91bGQgbm90IGJlIGRvbmUgd2hlbiB0 aGUgcXVlcnkgaGFzIGFscmVhZHkgYmVlbgorCSAqIGV4ZWN1dGVkIGFuZCBleHBsYWluIGhhcyBi ZWVuIGNhbGxlZCBieSBzaWduYWwsIGFzIHRoZSB0YXJnZXQgcXVlcnkKKwkgKiBtYXkgdXNlIGlu c3RydW1lbnRhdGlvbiBhbmQgY2xlYW4gaXRzZWxmIHVwLgogCSAqCiAJICogTm90ZTogY29udHJp Yi9hdXRvX2V4cGxhaW4gY291bGQgY2F1c2UgaW5zdHJ1bWVudGF0aW9uIHRvIGJlIHNldCB1cAog CSAqIGV2ZW4gdGhvdWdoIHdlIGRpZG4ndCBhc2sgZm9yIGl0IGhlcmUuICBCZSBjYXJlZnVsIG5v dCB0byBwcmludCBhbnkKQEAgLTE3MDEsNyArMTc0MCw3IEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0 ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJICogSW5zdHJFbmRMb29wIGNhbGwgYW55 d2F5LCBpZiBwb3NzaWJsZSwgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgY2FzZXMKIAkgKiBhdXRv X2V4cGxhaW4gaGFzIHRvIGNvbnRlbmQgd2l0aC4KIAkgKi8KLQlpZiAocGxhbnN0YXRlLT5pbnN0 cnVtZW50KQorCWlmIChwbGFuc3RhdGUtPmluc3RydW1lbnQgJiYgIWVzLT5zaWduYWxlZCkKIAkJ SW5zdHJFbmRMb29wKHBsYW5zdGF0ZS0+aW5zdHJ1bWVudCk7CiAKIAlpZiAoZXMtPmFuYWx5emUg JiYKQEAgLTUxODIsMyArNTIyMSwxNDIgQEAgZXNjYXBlX3lhbWwoU3RyaW5nSW5mbyBidWYsIGNv bnN0IGNoYXIgKnN0cikKIHsKIAllc2NhcGVfanNvbihidWYsIHN0cik7CiB9CisKKy8qCisgKiBI YW5kbGVMb2dRdWVyeVBsYW5JbnRlcnJ1cHQKKyAqCQlIYW5kbGUgcmVjZWlwdCBvZiBhbiBpbnRl cnJ1cHQgaW5kaWNhdGluZyBsb2dnaW5nIHRoZSBwbGFuIG9mCisgKgkJdGhlIGN1cnJlbnRseSBy dW5uaW5nIHF1ZXJ5LgorICoKKyAqIEFsbCB0aGUgYWN0dWFsIHdvcmsgaXMgZGVmZXJyZWQgdG8g UHJvY2Vzc0xvZ1F1ZXJ5UGxhbkludGVycnVwdCgpLAorICogYmVjYXVzZSB3ZSBjYW5ub3Qgc2Fm ZWx5IGVtaXQgYSBsb2cgbWVzc2FnZSBpbnNpZGUgdGhlIHNpZ25hbCBoYW5kbGVyLgorICovCit2 b2lkCitIYW5kbGVMb2dRdWVyeVBsYW5JbnRlcnJ1cHQodm9pZCkKK3sKKwlJbnRlcnJ1cHRQZW5k aW5nID0gdHJ1ZTsKKwlMb2dRdWVyeVBsYW5QZW5kaW5nID0gdHJ1ZTsKKwkvKiBsYXRjaCB3aWxs IGJlIHNldCBieSBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlciAqLworfQorCisvKgorICogUHJv Y2Vzc0xvZ1F1ZXJ5UGxhbkludGVycnVwdAorICogCQlQZXJmb3JtIGxvZ2dpbmcgdGhlIHBsYW4g b2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIHF1ZXJ5IG9uIHRoaXMKKyAqIAkJYmFja2VuZCBwcm9j ZXNzLgorICoKKyAqIEFueSBiYWNrZW5kIHRoYXQgcGFydGljaXBhdGVzIGluIFByb2NTaWduYWwg c2lnbmFsaW5nIG11c3QgYXJyYW5nZSB0byBjYWxsCisgKiB0aGlzIGZ1bmN0aW9uIGlmIHdlIHNl ZSBMb2dRdWVyeVBsYW5QZW5kaW5nIHNldC4KKyAqIEl0IGlzIGNhbGxlZCBmcm9tIENIRUNLX0ZP Ul9JTlRFUlJVUFRTKCksIHdoaWNoIGlzIGVub3VnaCBiZWNhdXNlIHRoZSB0YXJnZXQKKyAqIHBy b2Nlc3MgZm9yIGxvZ2dpbmcgcGxhbiBpcyBhIGJhY2tlbmQuCisgKi8KK3ZvaWQKK1Byb2Nlc3NM b2dRdWVyeVBsYW5JbnRlcnJ1cHQodm9pZCkKK3sKKwlFeHBsYWluU3RhdGUgKmVzOworCU1lbW9y eUNvbnRleHQgY3h0OworCU1lbW9yeUNvbnRleHQgb2xkX2N4dDsKKwlMb2dRdWVyeVBsYW5QZW5k aW5nID0gZmFsc2U7CisKKwkvKiBDYW5ub3QgcmUtZW50ZXIuICovCisJaWYgKFByb2Nlc3NMb2dR dWVyeVBsYW5JbnRlcnJ1cHRBY3RpdmUpCisJCXJldHVybjsKKworCVByb2Nlc3NMb2dRdWVyeVBs YW5JbnRlcnJ1cHRBY3RpdmUgPSB0cnVlOworCisJaWYgKEFjdGl2ZVF1ZXJ5RGVzYyA9PSBOVUxM KQorCXsKKwkJZXJlcG9ydChMT0dfU0VSVkVSX09OTFksCisJCQkJZXJybXNnKCJiYWNrZW5kIHdp dGggUElEICVkIGlzIG5vdCBydW5uaW5nIGEgcXVlcnkgb3IgYSBzdWJ0cmFuc2FjdGlvbiBpcyBh Ym9ydGVkIiwKKwkJCQkJTXlQcm9jUGlkKSwKKwkJCQllcnJoaWRlc3RtdCh0cnVlKSwKKwkJCQll cnJoaWRlY29udGV4dCh0cnVlKSk7CisKKwkJUHJvY2Vzc0xvZ1F1ZXJ5UGxhbkludGVycnVwdEFj dGl2ZSA9IGZhbHNlOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBFbnN1cmUgbm8gbG9jayBp cyBhbHJlYWR5IGhlbGQgb24gdGhlIGxvY2thYmxlIG9iamVjdC4KKwkgKiBPdGhlcndpc2UgRVhQ TEFJTiBjYW4gYmUgYWxzbyBob2xkIG9uIGl0LgorCSAqLworCWlmIChNeVByb2MtPmhlbGRMb2Nr cykKKwl7CisJCWVyZXBvcnQoTE9HX1NFUlZFUl9PTkxZLAorCQkJZXJybXNnKCJpZ25vcmVkIHJl cXVlc3QgZm9yIGxvZ2dpbmcgcXVlcnkgcGxhbiBkdWUgdG8gbG9jayBjb25mbGljdHMiKSwKKwkJ CWVycmRldGFpbCgiWW91IGNhbiB0cnkgYWdhaW4gaW4gYSBtb21lbnQuIikpOworCQkJcmV0dXJu OworCX0KKworCWN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4 dCwKKwkJCQkJCQkJImxvZ19xdWVyeV9wbGFuIHRlbXBvcmFyeSBjb250ZXh0IiwKKwkJCQkJCQkJ QUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisKKwlvbGRfY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRj aFRvKGN4dCk7CisKKwllcyA9IE5ld0V4cGxhaW5TdGF0ZSgpOworCisJZXMtPmZvcm1hdCA9IEVY UExBSU5fRk9STUFUX1RFWFQ7CisJZXMtPnNldHRpbmdzID0gdHJ1ZTsKKwllcy0+dmVyYm9zZSA9 IHRydWU7CisJZXMtPnNpZ25hbGVkID0gdHJ1ZTsKKworCUV4cGxhaW5Bc3NlbWJsZUxvZ091dHB1 dChlcywgQWN0aXZlUXVlcnlEZXNjLCBFWFBMQUlOX0ZPUk1BVF9URVhULCAwLCAtMSk7CisKKwll cmVwb3J0KExPR19TRVJWRVJfT05MWSwKKwkJCWVycm1zZygicXVlcnkgcGxhbiBydW5uaW5nIG9u IGJhY2tlbmQgd2l0aCBQSUQgJWQgaXM6XG4lcyIsCisJCQkJCU15UHJvY1BpZCwgZXMtPnN0ci0+ ZGF0YSksCisJCQkgZXJyaGlkZXN0bXQodHJ1ZSksCisJCQkgZXJyaGlkZWNvbnRleHQodHJ1ZSkp OworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZF9jeHQpOworCU1lbW9yeUNvbnRleHREZWxl dGUoY3h0KTsKKworCVByb2Nlc3NMb2dRdWVyeVBsYW5JbnRlcnJ1cHRBY3RpdmUgPSBmYWxzZTsK K30KKworLyoKKyAqIHBnX2xvZ19xdWVyeV9wbGFuCisgKgkJU2lnbmFsIGEgYmFja2VuZCBwcm9j ZXNzIHRvIGxvZyB0aGUgcXVlcnkgcGxhbiBvZiB0aGUgcnVubmluZyBxdWVyeS4KKyAqCisgKiBC eSBkZWZhdWx0LCBvbmx5IHN1cGVydXNlcnMgYXJlIGFsbG93ZWQgdG8gc2lnbmFsIHRvIGxvZyB0 aGUgcGxhbiBiZWNhdXNlCisgKiBhbGxvd2luZyBhbnkgdXNlcnMgdG8gaXNzdWUgdGhpcyByZXF1 ZXN0IGF0IGFuIHVuYm91bmRlZCByYXRlIHdvdWxkCisgKiBjYXVzZSBsb3RzIG9mIGxvZyBtZXNz YWdlcyBhbmQgd2hpY2ggY2FuIGxlYWQgdG8gZGVuaWFsIG9mIHNlcnZpY2UuCisgKiBBZGRpdGlv bmFsIHJvbGVzIGNhbiBiZSBwZXJtaXR0ZWQgd2l0aCBHUkFOVC4KKyAqLworRGF0dW0KK3BnX2xv Z19xdWVyeV9wbGFuKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJaW50CQkJcGlkID0gUEdfR0VUQVJH X0lOVDMyKDApOworCVBHUFJPQwkgICAqcHJvYzsKKwlQZ0JhY2tlbmRTdGF0dXMJKmJlX3N0YXR1 czsKKworCXByb2MgPSBCYWNrZW5kUGlkR2V0UHJvYyhwaWQpOworCisJaWYgKHByb2MgPT0gTlVM TCkKKwl7CisJCS8qCisJCSAqIFRoaXMgaXMganVzdCBhIHdhcm5pbmcgc28gYSBsb29wLXRocm91 Z2gtcmVzdWx0c2V0IHdpbGwgbm90IGFib3J0CisJCSAqIGlmIG9uZSBiYWNrZW5kIHRlcm1pbmF0 ZWQgb24gaXRzIG93biBkdXJpbmcgdGhlIHJ1bi4KKwkJICovCisJCWVyZXBvcnQoV0FSTklORywK KwkJCQkoZXJybXNnKCJQSUQgJWQgaXMgbm90IGEgUG9zdGdyZVNRTCBiYWNrZW5kIHByb2Nlc3Mi LCBwaWQpKSk7CisJCVBHX1JFVFVSTl9CT09MKGZhbHNlKTsKKwl9CisKKwliZV9zdGF0dXMgPSBw Z3N0YXRfZ2V0X2JlZW50cnlfYnlfYmFja2VuZF9pZChwcm9jLT5iYWNrZW5kSWQpOworCWlmIChi ZV9zdGF0dXMtPnN0X2JhY2tlbmRUeXBlICE9IEJfQkFDS0VORCkKKwl7CisJCWVyZXBvcnQoV0FS TklORywKKwkJCQkoZXJybXNnKCJQSUQgJWQgaXMgbm90IGEgUG9zdGdyZVNRTCBjbGllbnQgYmFj a2VuZCBwcm9jZXNzIiwgcGlkKSkpOworCQlQR19SRVRVUk5fQk9PTChmYWxzZSk7CisJfQorCisJ aWYgKFNlbmRQcm9jU2lnbmFsKHBpZCwgUFJPQ1NJR19MT0dfUVVFUllfUExBTiwgcHJvYy0+YmFj a2VuZElkKSA8IDApCisJeworCQkvKiBBZ2FpbiwganVzdCBhIHdhcm5pbmcgdG8gYWxsb3cgbG9v cHMgKi8KKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJtc2coImNvdWxkIG5vdCBzZW5kIHNp Z25hbCB0byBwcm9jZXNzICVkOiAlbSIsIHBpZCkpKTsKKwkJUEdfUkVUVVJOX0JPT0woZmFsc2Up OworCX0KKworCVBHX1JFVFVSTl9CT09MKHRydWUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY01haW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMK aW5kZXggMTNhOWI3ZGE4My4uNGVlZTk5ODE2MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY01haW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCkBA IC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCiAjaW5jbHVkZSAidXRp bHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYmFja2VuZF9zdGF0dXMuaCIKKyNpbmNsdWRlICJ1 dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNp bmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3BhcnRjYWNoZS5oIgpA QCAtNzgsNiArNzksOSBAQCBFeGVjdXRvckVuZF9ob29rX3R5cGUgRXhlY3V0b3JFbmRfaG9vayA9 IE5VTEw7CiAvKiBIb29rIGZvciBwbHVnaW4gdG8gZ2V0IGNvbnRyb2wgaW4gRXhlY0NoZWNrUGVy bWlzc2lvbnMoKSAqLwogRXhlY3V0b3JDaGVja1Blcm1zX2hvb2tfdHlwZSBFeGVjdXRvckNoZWNr UGVybXNfaG9vayA9IE5VTEw7CiAKKy8qIEN1cnJlbnRseSBleGVjdXRpbmcgcXVlcnkncyBRdWVy eURlc2MgKi8KK1F1ZXJ5RGVzYyAqQWN0aXZlUXVlcnlEZXNjID0gTlVMTDsKKwogLyogZGVjbHMg Zm9yIGxvY2FsIHJvdXRpbmVzIG9ubHkgdXNlZCB3aXRoaW4gdGhpcyBtb2R1bGUgKi8KIHN0YXRp YyB2b2lkIEluaXRQbGFuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKTsKIHN0YXRp YyB2b2lkIENoZWNrVmFsaWRSb3dNYXJrUmVsKFJlbGF0aW9uIHJlbCwgUm93TWFya1R5cGUgbWFy a1R5cGUpOwpAQCAtMzAzLDEwICszMDcsMjUgQEAgRXhlY3V0b3JSdW4oUXVlcnlEZXNjICpxdWVy eURlc2MsCiAJCQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgdWludDY0IGNvdW50LAogCQkJYm9v bCBleGVjdXRlX29uY2UpCiB7CisJLyoKKwkgKiBVcGRhdGUgQWN0aXZlUXVlcnlEZXNjIGhlcmUg dG8gZW5hYmxlIHJldHJpZXZhbCBvZiB0aGUgY3VycmVudGx5CisJICogcnVubmluZyBxdWVyeURl c2MgZm9yIG5lc3RlZCBxdWVyaWVzLgorCSAqLworCVF1ZXJ5RGVzYyAqc2F2ZV9BY3RpdmVRdWVy eURlc2M7CisKKwlzYXZlX0FjdGl2ZVF1ZXJ5RGVzYyA9IEFjdGl2ZVF1ZXJ5RGVzYzsKKwlBY3Rp dmVRdWVyeURlc2MgPSBxdWVyeURlc2M7CisKKyNpZmRlZiBVU0VfSU5KRUNUSU9OX1BPSU5UUwor CUlOSkVDVElPTl9QT0lOVCgiZXhlY3V0b3ItcnVuIik7CisjZW5kaWYKKwogCWlmIChFeGVjdXRv clJ1bl9ob29rKQogCQkoKkV4ZWN1dG9yUnVuX2hvb2spIChxdWVyeURlc2MsIGRpcmVjdGlvbiwg Y291bnQsIGV4ZWN1dGVfb25jZSk7CiAJZWxzZQogCQlzdGFuZGFyZF9FeGVjdXRvclJ1bihxdWVy eURlc2MsIGRpcmVjdGlvbiwgY291bnQsIGV4ZWN1dGVfb25jZSk7CisKKwlBY3RpdmVRdWVyeURl c2MgPSBzYXZlX0FjdGl2ZVF1ZXJ5RGVzYzsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv cHJvY3NpZ25hbC5jCmluZGV4IGU4NDYxOWU1YTUuLjY5NjM4ZTY0YmIgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9wcm9jc2lnbmFsLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJhY2Nlc3Mv cGFyYWxsZWwuaCIKICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCiAjaW5jbHVkZSAiY29t bWFuZHMvYXN5bmMuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluLmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24v bG9naWNhbHdvcmtlci5oIgpAQCAtNjU4LDYgKzY1OSw5IEBAIHByb2NzaWduYWxfc2lndXNyMV9o YW5kbGVyKFNJR05BTF9BUkdTKQogCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19MT0dfTUVN T1JZX0NPTlRFWFQpKQogCQlIYW5kbGVMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CiAKKwlp ZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfTE9HX1FVRVJZX1BMQU4pKQorCQlIYW5kbGVMb2dR dWVyeVBsYW5JbnRlcnJ1cHQoKTsKKwogCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19QQVJB TExFTF9BUFBMWV9NRVNTQUdFKSkKIAkJSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2VJbnRlcnJ1 cHQoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMKaW5kZXggYzcwYTFhZGI5YS4uZmVkMmVhMTky NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYworKysgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jCkBAIC02MDIsMTcgKzYwMiwxOCBAQCBMb2NrSGVs ZEJ5TWUoY29uc3QgTE9DS1RBRyAqbG9ja3RhZywgTE9DS01PREUgbG9ja21vZGUpCiAJcmV0dXJu IChsb2NhbGxvY2sgJiYgbG9jYWxsb2NrLT5uTG9ja3MgPiAwKTsKIH0KIAotI2lmZGVmIFVTRV9B U1NFUlRfQ0hFQ0tJTkcKIC8qCi0gKiBHZXRMb2NrTWV0aG9kTG9jYWxIYXNoIC0tIHJldHVybiB0 aGUgaGFzaCBvZiBsb2NhbCBsb2NrcywgZm9yIG1vZHVsZXMgdGhhdAotICoJCWV2YWx1YXRlIGFz c2VydGlvbnMgYmFzZWQgb24gYWxsIGxvY2tzIGhlbGQuCisgKiBHZXRMb2NrTWV0aG9kTG9jYWxI YXNoIC0tIHJldHVybiB0aGUgaGFzaCBvZiBsb2NhbCBsb2NrcywgbWFpbmx5IGZvcgorICoJCW1v ZHVsZXMgdGhhdCBldmFsdWF0ZSBhc3NlcnRpb25zIGJhc2VkIG9uIGFsbCBsb2NrcyBoZWxkLgor ICoKKyAqIE5PVEU6IFdoZW4gdGhlcmUgYXJlIG1hbnkgZW50cmllcyBpbiBMb2NrTWV0aG9kTG9j YWxIYXNoLCBjYWxsaW5nIHRoaXMKKyAqIGZ1bmN0aW9uIGFuZCBsb29raW5nIGludG8gYWxsIG9m IHRoZW0gY2FuIGxlYWQgdG8gcGVyZm9ybWFuY2UgcHJvYmxlbXMuCiAgKi8KIEhUQUIgKgogR2V0 TG9ja01ldGhvZExvY2FsSGFzaCh2b2lkKQogewogCXJldHVybiBMb2NrTWV0aG9kTG9jYWxIYXNo OwogfQotI2VuZGlmCiAKIC8qCiAgKiBMb2NrSGFzV2FpdGVycyAtLSBsb29rIHVwICdsb2NrdGFn JyBhbmQgY2hlY2sgaWYgcmVsZWFzaW5nIHRoaXMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rj b3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwppbmRleCAxYTM0YmQz NzE1Li4wNzc5N2VmN2RkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMK KysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5j bHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKICNp bmNsdWRlICJjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhw bGFpbi5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ByZXBhcmUuaCIKICNpbmNsdWRlICJjb21tb24v cGdfcHJuZy5oIgogI2luY2x1ZGUgImppdC9qaXQuaCIKQEAgLTM0NTcsNiArMzQ1OCw5IEBAIFBy b2Nlc3NJbnRlcnJ1cHRzKHZvaWQpCiAJaWYgKExvZ01lbW9yeUNvbnRleHRQZW5kaW5nKQogCQlQ cm9jZXNzTG9nTWVtb3J5Q29udGV4dEludGVycnVwdCgpOwogCisJaWYgKExvZ1F1ZXJ5UGxhblBl bmRpbmcpCisJCVByb2Nlc3NMb2dRdWVyeVBsYW5JbnRlcnJ1cHQoKTsKKwogCWlmIChQYXJhbGxl bEFwcGx5TWVzc2FnZVBlbmRpbmcpCiAJCUhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlcygpOwog fQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgYi9zcmMvYmFj a2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwppbmRleCA4OGIwM2U4ZmEzLi4wNjNhOTJhNWJjIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwpAQCAtMzcsNiArMzcsOCBAQCB2b2xhdGlsZSBzaWdf YXRvbWljX3QgSWRsZVNlc3Npb25UaW1lb3V0UGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUgc2ln X2F0b21pY190IFByb2NTaWduYWxCYXJyaWVyUGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUgc2ln X2F0b21pY190IExvZ01lbW9yeUNvbnRleHRQZW5kaW5nID0gZmFsc2U7CiB2b2xhdGlsZSBzaWdf YXRvbWljX3QgSWRsZVN0YXRzVXBkYXRlVGltZW91dFBlbmRpbmcgPSBmYWxzZTsKK3ZvbGF0aWxl IHNpZ19hdG9taWNfdCBMb2dRdWVyeVBsYW5QZW5kaW5nID0gZmFsc2U7CisKIHZvbGF0aWxlIHVp bnQzMiBJbnRlcnJ1cHRIb2xkb2ZmQ291bnQgPSAwOwogdm9sYXRpbGUgdWludDMyIFF1ZXJ5Q2Fu Y2VsSG9sZG9mZkNvdW50ID0gMDsKIHZvbGF0aWxlIHVpbnQzMiBDcml0U2VjdGlvbkNvdW50ID0g MDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDljMTIwZmMyYjcuLmE1NGJmOTdjNjAgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtODI3NCw2ICs4Mjc0LDEyIEBACiAgIHByb3JldHR5 cGUgPT4gJ2Jvb2wnLCBwcm9hcmd0eXBlcyA9PiAnaW50NCcsCiAgIHByb3NyYyA9PiAncGdfbG9n X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzJyB9LAogCisjIGxvZ2dpbmcgcGxhbiBvZiB0aGUgcnVu bmluZyBxdWVyeSBvbiB0aGUgc3BlY2lmaWVkIGJhY2tlbmQKK3sgb2lkID0+ICc4MDAwJywgZGVz Y3IgPT4gJ2xvZyBwbGFuIG9mIHRoZSBydW5uaW5nIHF1ZXJ5IG9uIHRoZSBzcGVjaWZpZWQgYmFj a2VuZCcsCisgIHByb25hbWUgPT4gJ3BnX2xvZ19xdWVyeV9wbGFuJywKKyAgcHJvdm9sYXRpbGUg PT4gJ3YnLCBwcm9yZXR0eXBlID0+ICdib29sJywKKyAgcHJvYXJndHlwZXMgPT4gJ2ludDQnLCBw cm9zcmMgPT4gJ3BnX2xvZ19xdWVyeV9wbGFuJyB9LAorCiAjIG5vbi1wZXJzaXN0ZW50IHNlcmll cyBnZW5lcmF0b3IKIHsgb2lkID0+ICcxMDY2JywgZGVzY3IgPT4gJ25vbi1wZXJzaXN0ZW50IHNl cmllcyBnZW5lcmF0b3InLAogICBwcm9uYW1lID0+ICdnZW5lcmF0ZV9zZXJpZXMnLCBwcm9yb3dz ID0+ICcxMDAwJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaCBi L3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaAppbmRleCA3YzBmMGI1NjM2Li5mNzNmOTg0 YzM3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKKysrIGIvc3Jj L2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCkBAIC0xNyw2ICsxNyw4IEBACiAjaW5jbHVkZSAi bGliL3N0cmluZ2luZm8uaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2Vfbm9kZS5oIgogCitleHRl cm4gUEdETExJTVBPUlQgYm9vbCBQcm9jZXNzTG9nUXVlcnlQbGFuSW50ZXJydXB0QWN0aXZlOwor CiB0eXBlZGVmIGVudW0gRXhwbGFpbkZvcm1hdAogewogCUVYUExBSU5fRk9STUFUX1RFWFQsCkBA IC02MSw2ICs2Myw3IEBAIHR5cGVkZWYgc3RydWN0IEV4cGxhaW5TdGF0ZQogCWJvb2wJCWhpZGVf d29ya2VyczsJLyogc2V0IGlmIHdlIGZpbmQgYW4gaW52aXNpYmxlIEdhdGhlciAqLwogCS8qIHN0 YXRlIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgcGxhbiBub2RlICovCiAJRXhwbGFpbldvcmtlcnNT dGF0ZSAqd29ya2Vyc19zdGF0ZTsgLyogbmVlZGVkIGlmIHBhcmFsbGVsIHBsYW4gKi8KKwlib29s CQlzaWduYWxlZDsJCS8qIHdoZXRoZXIgZXhwbGFpbiBpcyBjYWxsZWQgYnkgc2lnbmFsICovCiB9 IEV4cGxhaW5TdGF0ZTsKIAogLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBF eHBsYWluT25lUXVlcnkoKSAqLwpAQCAtOTYsNiArOTksMTAgQEAgZXh0ZXJuIHZvaWQgRXhwbGFp bk9uZVBsYW4oUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBJbnRvQ2xhdXNlICppbnRvLAogCQkJ CQkJICAgY29uc3QgQnVmZmVyVXNhZ2UgKmJ1ZnVzYWdlLAogCQkJCQkJICAgY29uc3QgTWVtb3J5 Q29udGV4dENvdW50ZXJzICptZW1fY291bnRlcnMpOwogCitleHRlcm4gdm9pZCBFeHBsYWluQXNz ZW1ibGVMb2dPdXRwdXQoRXhwbGFpblN0YXRlICplcywgUXVlcnlEZXNjICpxdWVyeURlc2MsCisJ CQkJCQkJCQkgaW50IGxvZ0Zvcm1hdCwgYm9vbCBsb2dUcmlnZ2VycywKKwkJCQkJCQkJCSBpbnQg bG9nUGFyYW1ldGVyTWF4TGVuZ3RoKTsKKwogZXh0ZXJuIHZvaWQgRXhwbGFpblByaW50UGxhbihF eHBsYWluU3RhdGUgKmVzLCBRdWVyeURlc2MgKnF1ZXJ5RGVzYyk7CiBleHRlcm4gdm9pZCBFeHBs YWluUHJpbnRUcmlnZ2VycyhFeHBsYWluU3RhdGUgKmVzLCBRdWVyeURlc2MgKnF1ZXJ5RGVzYyk7 CiAKQEAgLTEyOCw0ICsxMzUsNiBAQCBleHRlcm4gdm9pZCBFeHBsYWluT3Blbkdyb3VwKGNvbnN0 IGNoYXIgKm9ianR5cGUsIGNvbnN0IGNoYXIgKmxhYmVsbmFtZSwKIGV4dGVybiB2b2lkIEV4cGxh aW5DbG9zZUdyb3VwKGNvbnN0IGNoYXIgKm9ianR5cGUsIGNvbnN0IGNoYXIgKmxhYmVsbmFtZSwK IAkJCQkJCQkgIGJvb2wgbGFiZWxlZCwgRXhwbGFpblN0YXRlICplcyk7CiAKK2V4dGVybiB2b2lk IEhhbmRsZUxvZ1F1ZXJ5UGxhbkludGVycnVwdCh2b2lkKTsKK2V4dGVybiB2b2lkIFByb2Nlc3NM b2dRdWVyeVBsYW5JbnRlcnJ1cHQodm9pZCk7CiAjZW5kaWYJCQkJCQkJLyogRVhQTEFJTl9IICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaCBiL3NyYy9pbmNsdWRlL21pc2Nh ZG1pbi5oCmluZGV4IDBiMDFjMWYwOTMuLjM5MTRiYTlmNzEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCkBAIC05NSw2ICs5 NSw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRsZVNlc3Np b25UaW1lb3V0UGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWlj X3QgUHJvY1NpZ25hbEJhcnJpZXJQZW5kaW5nOwogZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxl IHNpZ19hdG9taWNfdCBMb2dNZW1vcnlDb250ZXh0UGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9S VCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRsZVN0YXRzVXBkYXRlVGltZW91dFBlbmRpbmc7Citl eHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IExvZ1F1ZXJ5UGxhblBlbmRp bmc7CiAKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgQ2hlY2tDbGll bnRDb25uZWN0aW9uUGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRv bWljX3QgQ2xpZW50Q29ubmVjdGlvbkxvc3Q7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9y YWdlL2xvY2suaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG9jay5oCmluZGV4IDAwNjc5NjI0Zjcu LjM4MjkzMDA3M2EgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG9jay5oCisrKyBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG9jay5oCkBAIC01NjksOSArNTY5LDcgQEAgZXh0ZXJuIHZv aWQgTG9ja1JlbGVhc2VTZXNzaW9uKExPQ0tNRVRIT0RJRCBsb2NrbWV0aG9kaWQpOwogZXh0ZXJu IHZvaWQgTG9ja1JlbGVhc2VDdXJyZW50T3duZXIoTE9DQUxMT0NLICoqbG9jYWxsb2NrcywgaW50 IG5sb2Nrcyk7CiBleHRlcm4gdm9pZCBMb2NrUmVhc3NpZ25DdXJyZW50T3duZXIoTE9DQUxMT0NL ICoqbG9jYWxsb2NrcywgaW50IG5sb2Nrcyk7CiBleHRlcm4gYm9vbCBMb2NrSGVsZEJ5TWUoY29u c3QgTE9DS1RBRyAqbG9ja3RhZywgTE9DS01PREUgbG9ja21vZGUpOwotI2lmZGVmIFVTRV9BU1NF UlRfQ0hFQ0tJTkcKIGV4dGVybiBIVEFCICpHZXRMb2NrTWV0aG9kTG9jYWxIYXNoKHZvaWQpOwot I2VuZGlmCiBleHRlcm4gYm9vbCBMb2NrSGFzV2FpdGVycyhjb25zdCBMT0NLVEFHICpsb2NrdGFn LAogCQkJCQkJICAgTE9DS01PREUgbG9ja21vZGUsIGJvb2wgc2Vzc2lvbkxvY2spOwogZXh0ZXJu IFZpcnR1YWxUcmFuc2FjdGlvbklkICpHZXRMb2NrQ29uZmxpY3RzKGNvbnN0IExPQ0tUQUcgKmxv Y2t0YWcsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaCBiL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCmluZGV4IDUyZGNiNGMyYWQuLjQwMGM1Mjcy OTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCisrKyBiL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCkBAIC0zNSw2ICszNSw3IEBAIHR5cGVkZWYg ZW51bQogCVBST0NTSUdfV0FMU05EX0lOSVRfU1RPUFBJTkcsCS8qIGFzayB3YWxzZW5kZXJzIHRv IHByZXBhcmUgZm9yIHNodXRkb3duICAqLwogCVBST0NTSUdfQkFSUklFUiwJCQkvKiBnbG9iYWwg YmFycmllciBpbnRlcnJ1cHQgICovCiAJUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRFWFQsIC8qIGFz ayBiYWNrZW5kIHRvIGxvZyB0aGUgbWVtb3J5IGNvbnRleHRzICovCisJUFJPQ1NJR19MT0dfUVVF UllfUExBTiwgLyogYXNrIGJhY2tlbmQgdG8gbG9nIHBsYW4gb2YgdGhlIGN1cnJlbnQgcXVlcnkg Ki8KIAlQUk9DU0lHX1BBUkFMTEVMX0FQUExZX01FU1NBR0UsIC8qIE1lc3NhZ2UgZnJvbSBwYXJh bGxlbCBhcHBseSB3b3JrZXJzICovCiAKIAkvKiBSZWNvdmVyeSBjb25mbGljdCByZWFzb25zICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL3BxdWVyeS5oIGIvc3JjL2luY2x1ZGUvdGNv cC9wcXVlcnkuaAppbmRleCAwNzNmYjMyM2JjLi4zZGQ3ZWRmOTNjIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS90Y29wL3BxdWVyeS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvcHF1ZXJ5LmgKQEAg LTIxLDcgKzIxLDcgQEAgc3RydWN0IFBsYW5uZWRTdG10OwkJCQkvKiBhdm9pZCBpbmNsdWRpbmcg cGxhbm5vZGVzLmggaGVyZSAqLwogCiAKIGV4dGVybiBQR0RMTElNUE9SVCBQb3J0YWwgQWN0aXZl UG9ydGFsOwotCitleHRlcm4gUEdETExJTVBPUlQgUXVlcnlEZXNjICpBY3RpdmVRdWVyeURlc2M7 CiAKIGV4dGVybiBQb3J0YWxTdHJhdGVneSBDaG9vc2VQb3J0YWxTdHJhdGVneShMaXN0ICpzdG10 cyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2Vsb2cuaCBiL3NyYy9pbmNsdWRl L3V0aWxzL2Vsb2cuaAppbmRleCA3NjFlZTI1MTJkLi4zZDViNGIzN2ZkIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS91dGlscy9lbG9nLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvZWxvZy5oCkBA IC0xNjcsNiArMTY3LDcgQEAgc3RydWN0IE5vZGU7CiAKIGV4dGVybiBib29sIG1lc3NhZ2VfbGV2 ZWxfaXNfaW50ZXJlc3RpbmcoaW50IGVsZXZlbCk7CiAKK2V4dGVybiBQR0RMTElNUE9SVCBib29s IFByb2Nlc3NMb2dRdWVyeVBsYW5JbnRlcnJ1cHRBY3RpdmU7CiBleHRlcm4gYm9vbCBlcnJzdGFy dChpbnQgZWxldmVsLCBjb25zdCBjaGFyICpkb21haW4pOwogZXh0ZXJuIHBnX2F0dHJpYnV0ZV9j b2xkIGJvb2wgZXJyc3RhcnRfY29sZChpbnQgZWxldmVsLCBjb25zdCBjaGFyICpkb21haW4pOwog ZXh0ZXJuIHZvaWQgZXJyZmluaXNoKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vLCBj b25zdCBjaGFyICpmdW5jbmFtZSk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2luamVj dGlvbl9wb2ludHMvaW5qZWN0aW9uX3BvaW50cy5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rp b25fcG9pbnRzL2luamVjdGlvbl9wb2ludHMuYwppbmRleCBlODQzZTY1OTRmLi5kYjA0NDBkZDkx IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9u X3BvaW50cy5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rp b25fcG9pbnRzLmMKQEAgLTE3LDYgKzE3LDcgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAK KyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluLmgiCiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgpAQCAtMjgs NiArMjksNyBAQCBQR19NT0RVTEVfTUFHSUM7CiAKIGV4dGVybiBQR0RMTEVYUE9SVCB2b2lkIGlu amVjdGlvbl9lcnJvcihjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiBQR0RMTEVYUE9SVCB2b2lk IGluamVjdGlvbl9ub3RpY2UoY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gUEdETExFWFBPUlQg dm9pZCBpbmplY3Rpb25fSGFuZGxlTG9nUXVlcnlQbGFuSW50ZXJydXB0KGNvbnN0IGNoYXIgKm5h bWUpOwogCiAKIC8qIFNldCBvZiBjYWxsYmFja3MgYXZhaWxhYmxlIHRvIGJlIGF0dGFjaGVkIHRv IGFuIGluamVjdGlvbiBwb2ludC4gKi8KQEAgLTQzLDYgKzQ1LDEzIEBAIGluamVjdGlvbl9ub3Rp Y2UoY29uc3QgY2hhciAqbmFtZSkKIAllbG9nKE5PVElDRSwgIm5vdGljZSB0cmlnZ2VyZWQgZm9y IGluamVjdGlvbiBwb2ludCAlcyIsIG5hbWUpOwogfQogCit2b2lkCitpbmplY3Rpb25fSGFuZGxl TG9nUXVlcnlQbGFuSW50ZXJydXB0KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJSGFuZGxlTG9nUXVl cnlQbGFuSW50ZXJydXB0KCk7CisJZWxvZyhMT0csICJ0cmlnZ2VyZWQgaW5qZWN0aW9uX0hhbmRs ZUxvZ1F1ZXJ5UGxhbkludGVycnVwdCBmb3IgaW5qZWN0aW9uIHBvaW50ICVzIiwgbmFtZSk7Cit9 CisKIC8qCiAgKiBTUUwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGFuIGluamVjdGlvbiBwb2ludC4K ICAqLwpAQCAtNTgsNiArNjcsOCBAQCBpbmplY3Rpb25fcG9pbnRzX2F0dGFjaChQR19GVU5DVElP Tl9BUkdTKQogCQlmdW5jdGlvbiA9ICJpbmplY3Rpb25fZXJyb3IiOwogCWVsc2UgaWYgKHN0cmNt cChhY3Rpb24sICJub3RpY2UiKSA9PSAwKQogCQlmdW5jdGlvbiA9ICJpbmplY3Rpb25fbm90aWNl IjsKKwllbHNlIGlmIChzdHJjbXAoYWN0aW9uLCAibG9ncXVlcnlwbGFuIikgPT0gMCkKKwkJZnVu Y3Rpb24gPSAiaW5qZWN0aW9uX0hhbmRsZUxvZ1F1ZXJ5UGxhbkludGVycnVwdCI7CiAJZWxzZQog CQllbG9nKEVSUk9SLCAiaW5jb3JyZWN0IGFjdGlvbiBcIiVzXCIgZm9yIGluamVjdGlvbiBwb2lu dCBjcmVhdGlvbiIsIGFjdGlvbik7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNj X2Z1bmN0aW9ucy5vdXQKaW5kZXggN2MxNTQ3NzEwNC4uZjM0ZjJiY2Q3YiAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQKQEAgLTI3NiwxNCArMjc2LDE1 IEBAIFNFTEVDVCB0ZXN0X2Nhbm9uaWNhbGl6ZV9wYXRoKCcuL2FiYy8uL2RlZi8uLi8uL2doaS8u Li8uLi8uLi9qa2wvbW5vJyk7CiAgLi4vamtsL21ubwogKDEgcm93KQogCistLSBUZXN0IGxvZ2dp bmcgZnVuY3Rpb25zCiAtLQotLS0gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKCkKLS0t Ci0tLSBNZW1vcnkgY29udGV4dHMgYXJlIGxvZ2dlZCBhbmQgdGhleSBhcmUgbm90IHJldHVybmVk IHRvIHRoZSBmdW5jdGlvbi4KKy0tIFRoZSBvdXRwdXRzIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUg bG9nZ2VkIGFuZCB0aGV5IGFyZSBub3QgcmV0dXJuZWQgdG8KKy0tIHRoZSBmdW5jdGlvbi4KIC0t IEZ1cnRoZXJtb3JlLCB0aGVpciBjb250ZW50cyBjYW4gdmFyeSBkZXBlbmRpbmcgb24gdGhlIHRp bWluZy4gSG93ZXZlciwKIC0tIHdlIGNhbiBhdCBsZWFzdCB2ZXJpZnkgdGhhdCB0aGUgY29kZSBk b2Vzbid0IGZhaWwsIGFuZCB0aGF0IHRoZQogLS0gcGVybWlzc2lvbnMgYXJlIHNldCBwcm9wZXJs eS4KIC0tCistLSBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKQogU0VMRUNUIHBnX2xv Z19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhwZ19iYWNrZW5kX3BpZCgpKTsKICBwZ19sb2dfYmFj a2VuZF9tZW1vcnlfY29udGV4dHMgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA QCAtMjk3LDggKzI5OCw4IEBAIFNFTEVDVCBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMo cGlkKSBGUk9NIHBnX3N0YXRfYWN0aXZpdHkKICB0CiAoMSByb3cpCiAKLUNSRUFURSBST0xFIHJl Z3Jlc3NfbG9nX21lbW9yeTsKLVNFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdyZXNz X2xvZ19tZW1vcnknLAorQ1JFQVRFIFJPTEUgcmVncmVzc19sb2dfZnVuY3Rpb247CitTRUxFQ1Qg aGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVncmVzc19sb2dfZnVuY3Rpb24nLAogICAncGdfbG9n X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKGludGVnZXIpJywgJ0VYRUNVVEUnKTsgLS0gbm8KICBo YXNfZnVuY3Rpb25fcHJpdmlsZWdlIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMDYs MTUgKzMwNywxNSBAQCBTRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVncmVzc19sb2df bWVtb3J5JywKICgxIHJvdykKIAogR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19sb2dfYmFj a2VuZF9tZW1vcnlfY29udGV4dHMoaW50ZWdlcikKLSAgVE8gcmVncmVzc19sb2dfbWVtb3J5Owot U0VMRUNUIGhhc19mdW5jdGlvbl9wcml2aWxlZ2UoJ3JlZ3Jlc3NfbG9nX21lbW9yeScsCisgIFRP IHJlZ3Jlc3NfbG9nX2Z1bmN0aW9uOworU0VMRUNUIGhhc19mdW5jdGlvbl9wcml2aWxlZ2UoJ3Jl Z3Jlc3NfbG9nX2Z1bmN0aW9uJywKICAgJ3BnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhp bnRlZ2VyKScsICdFWEVDVVRFJyk7IC0tIHllcwogIGhhc19mdW5jdGlvbl9wcml2aWxlZ2UgCiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICB0CiAoMSByb3cpCiAKLVNFVCBST0xFIHJlZ3Jlc3Nf bG9nX21lbW9yeTsKK1NFVCBST0xFIHJlZ3Jlc3NfbG9nX2Z1bmN0aW9uOwogU0VMRUNUIHBnX2xv Z19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhwZ19iYWNrZW5kX3BpZCgpKTsKICBwZ19sb2dfYmFj a2VuZF9tZW1vcnlfY29udGV4dHMgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA QCAtMzIzLDggKzMyNCw0MSBAQCBTRUxFQ1QgcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRz KHBnX2JhY2tlbmRfcGlkKCkpOwogCiBSRVNFVCBST0xFOwogUkVWT0tFIEVYRUNVVEUgT04gRlVO Q1RJT04gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKGludGVnZXIpCi0gIEZST00gcmVn cmVzc19sb2dfbWVtb3J5OwotRFJPUCBST0xFIHJlZ3Jlc3NfbG9nX21lbW9yeTsKKyAgRlJPTSBy ZWdyZXNzX2xvZ19mdW5jdGlvbjsKKy0tIHBnX2xvZ19xdWVyeV9wbGFuKCkKK1NFTEVDVCBwZ19s b2dfcXVlcnlfcGxhbihwZ19iYWNrZW5kX3BpZCgpKTsKKyBwZ19sb2dfcXVlcnlfcGxhbiAKKy0t LS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBoYXNfZnVuY3Rpb25fcHJp dmlsZWdlKCdyZWdyZXNzX2xvZ19mdW5jdGlvbicsCisgICdwZ19sb2dfcXVlcnlfcGxhbihpbnRl Z2VyKScsICdFWEVDVVRFJyk7IC0tIG5vCisgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKworR1JBTlQgRVhFQ1VURSBPTiBGVU5D VElPTiBwZ19sb2dfcXVlcnlfcGxhbihpbnRlZ2VyKQorICBUTyByZWdyZXNzX2xvZ19mdW5jdGlv bjsKK1NFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdyZXNzX2xvZ19mdW5jdGlvbics CisgICdwZ19sb2dfcXVlcnlfcGxhbihpbnRlZ2VyKScsICdFWEVDVVRFJyk7IC0tIHllcworIGhh c19mdW5jdGlvbl9wcml2aWxlZ2UgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSBy b3cpCisKK1NFVCBST0xFIHJlZ3Jlc3NfbG9nX2Z1bmN0aW9uOworU0VMRUNUIHBnX2xvZ19xdWVy eV9wbGFuKHBnX2JhY2tlbmRfcGlkKCkpOworIHBnX2xvZ19xdWVyeV9wbGFuIAorLS0tLS0tLS0t LS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworUkVTRVQgUk9MRTsKK1JFVk9LRSBFWEVDVVRFIE9O IEZVTkNUSU9OIHBnX2xvZ19xdWVyeV9wbGFuKGludGVnZXIpCisgIEZST00gcmVncmVzc19sb2df ZnVuY3Rpb247CitEUk9QIFJPTEUgcmVncmVzc19sb2dfZnVuY3Rpb247CiAtLQogLS0gVGVzdCBz b21lIGJ1aWx0LWluIFNSRnMKIC0tCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9t aXNjX2Z1bmN0aW9ucy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9taXNjX2Z1bmN0aW9ucy5z cWwKaW5kZXggODUxZGFkOTBmNC4uZjQ3MmE4MzliZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvbWlzY19mdW5jdGlvbnMuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21p c2NfZnVuY3Rpb25zLnNxbApAQCAtNjgsMzkgKzY4LDYwIEBAIFNFTEVDVCB0ZXN0X2Nhbm9uaWNh bGl6ZV9wYXRoKCcuL2FiYy8uL2RlZi8uJyk7CiBTRUxFQ1QgdGVzdF9jYW5vbmljYWxpemVfcGF0 aCgnLi9hYmMvLi8uL2RlZi8uJyk7CiBTRUxFQ1QgdGVzdF9jYW5vbmljYWxpemVfcGF0aCgnLi9h YmMvLi9kZWYvLi4vLi9naGkvLi4vLi4vLi4vamtsL21ubycpOwogCistLSBUZXN0IGxvZ2dpbmcg ZnVuY3Rpb25zCiAtLQotLS0gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKCkKLS0tCi0t LSBNZW1vcnkgY29udGV4dHMgYXJlIGxvZ2dlZCBhbmQgdGhleSBhcmUgbm90IHJldHVybmVkIHRv IHRoZSBmdW5jdGlvbi4KKy0tIFRoZSBvdXRwdXRzIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbG9n Z2VkIGFuZCB0aGV5IGFyZSBub3QgcmV0dXJuZWQgdG8KKy0tIHRoZSBmdW5jdGlvbi4KIC0tIEZ1 cnRoZXJtb3JlLCB0aGVpciBjb250ZW50cyBjYW4gdmFyeSBkZXBlbmRpbmcgb24gdGhlIHRpbWlu Zy4gSG93ZXZlciwKIC0tIHdlIGNhbiBhdCBsZWFzdCB2ZXJpZnkgdGhhdCB0aGUgY29kZSBkb2Vz bid0IGZhaWwsIGFuZCB0aGF0IHRoZQogLS0gcGVybWlzc2lvbnMgYXJlIHNldCBwcm9wZXJseS4K IC0tCiAKKy0tIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cygpCisKIFNFTEVDVCBwZ19s b2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMocGdfYmFja2VuZF9waWQoKSk7CiAKIFNFTEVDVCBw Z19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMocGlkKSBGUk9NIHBnX3N0YXRfYWN0aXZpdHkK ICAgV0hFUkUgYmFja2VuZF90eXBlID0gJ2NoZWNrcG9pbnRlcic7CiAKLUNSRUFURSBST0xFIHJl Z3Jlc3NfbG9nX21lbW9yeTsKK0NSRUFURSBST0xFIHJlZ3Jlc3NfbG9nX2Z1bmN0aW9uOwogCi1T RUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVncmVzc19sb2dfbWVtb3J5JywKK1NFTEVD VCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdyZXNzX2xvZ19mdW5jdGlvbicsCiAgICdwZ19s b2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoaW50ZWdlciknLCAnRVhFQ1VURScpOyAtLSBubwog CiBHUkFOVCBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0 cyhpbnRlZ2VyKQotICBUTyByZWdyZXNzX2xvZ19tZW1vcnk7CisgIFRPIHJlZ3Jlc3NfbG9nX2Z1 bmN0aW9uOwogCi1TRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVncmVzc19sb2dfbWVt b3J5JywKK1NFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdyZXNzX2xvZ19mdW5jdGlv bicsCiAgICdwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoaW50ZWdlciknLCAnRVhFQ1VU RScpOyAtLSB5ZXMKIAotU0VUIFJPTEUgcmVncmVzc19sb2dfbWVtb3J5OworU0VUIFJPTEUgcmVn cmVzc19sb2dfZnVuY3Rpb247CiBTRUxFQ1QgcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRz KHBnX2JhY2tlbmRfcGlkKCkpOwogUkVTRVQgUk9MRTsKIAogUkVWT0tFIEVYRUNVVEUgT04gRlVO Q1RJT04gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKGludGVnZXIpCi0gIEZST00gcmVn cmVzc19sb2dfbWVtb3J5OworICBGUk9NIHJlZ3Jlc3NfbG9nX2Z1bmN0aW9uOworCistLSBwZ19s b2dfcXVlcnlfcGxhbigpCitTRUxFQ1QgcGdfbG9nX3F1ZXJ5X3BsYW4ocGdfYmFja2VuZF9waWQo KSk7CisKK1NFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdyZXNzX2xvZ19mdW5jdGlv bicsCisgICdwZ19sb2dfcXVlcnlfcGxhbihpbnRlZ2VyKScsICdFWEVDVVRFJyk7IC0tIG5vCisK K0dSQU5UIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfbG9nX3F1ZXJ5X3BsYW4oaW50ZWdlcikKKyAg VE8gcmVncmVzc19sb2dfZnVuY3Rpb247CisKK1NFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdl KCdyZWdyZXNzX2xvZ19mdW5jdGlvbicsCisgICdwZ19sb2dfcXVlcnlfcGxhbihpbnRlZ2VyKScs ICdFWEVDVVRFJyk7IC0tIHllcworCitTRVQgUk9MRSByZWdyZXNzX2xvZ19mdW5jdGlvbjsKK1NF TEVDVCBwZ19sb2dfcXVlcnlfcGxhbihwZ19iYWNrZW5kX3BpZCgpKTsKK1JFU0VUIFJPTEU7CisK K1JFVk9LRSBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19xdWVyeV9wbGFuKGludGVnZXIpCisg IEZST00gcmVncmVzc19sb2dfZnVuY3Rpb247CiAKLURST1AgUk9MRSByZWdyZXNzX2xvZ19tZW1v cnk7CitEUk9QIFJPTEUgcmVncmVzc19sb2dfZnVuY3Rpb247CiAKIC0tCiAtLSBUZXN0IHNvbWUg YnVpbHQtaW4gU1JGcwoKYmFzZS1jb21taXQ6IGRkZDVmNGY1NGEwMjZkYjZhNjY5Mjg3NmQwZDQ0 YWVmOTAyYWI2ODYKLS0gCjIuMzkuMgoK --=_2c1288a8b707acfbf4c8b8a543c8509a--