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 1ty8jW-002vgP-FW for pgsql-hackers@arkaria.postgresql.org; Fri, 28 Mar 2025 12:22:47 +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 1ty8jU-0096fD-Cd for pgsql-hackers@arkaria.postgresql.org; Fri, 28 Mar 2025 12:22:44 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ty8jT-0096f5-Mr for pgsql-hackers@lists.postgresql.org; Fri, 28 Mar 2025 12:22:44 +0000 Received: from mail.postgrespro.ru ([93.174.132.70]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1ty8jR-001hjn-08 for pgsql-hackers@lists.postgresql.org; Fri, 28 Mar 2025 12:22:43 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1743164559; bh=zr/n0a/GrNN+zqQCShq886qpClsKAOnzg4qpVU4TiSU=; h=Date:From:To:Cc:Subject:In-Reply-To:References:Message-ID:From; b=3NiPFO2zQmnq6+byR3QnS1LSTBBEn53iwc1+3Zgw6fmLtaeEzSae50CXgV63H4q52 B/56t28FQuql32PHCrRvTb5PFbT52BoVnFp0XvHC4MhL/UwH0HEYDBe//aV69qEK4B iLuy1sc3hdGqSdBd5oiySFxQg6i7769dttiU4t4+M5TSPKzhuoejguPL5aiuupFN3t LeIsISCV2IJF9xpnLagN18fNoSKZqvwIdCK0ERO1oYXmMuQYWZhoGTYEIRJKZLIEcR hBFhz6aXG8BmJkqmvDEVuQq+Byg5PvVSsMrw0KaUKwx0HDTAevNjcJVu/Hb6ZcluUO Mst7VZmDGcM4g== Received: from mail.postgrespro.ru (webmail-slave-mstn.l.postgrespro.ru [192.168.2.28]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: a.pyhalov@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 3F6136084A; Fri, 28 Mar 2025 15:22:39 +0300 (MSK) MIME-Version: 1.0 Date: Fri, 28 Mar 2025 15:22:39 +0300 From: Alexander Pyhalov To: Tom Lane Cc: Pavel Stehule , Alexander Korotkov , pgsql-hackers@lists.postgresql.org, Ronan Dunklau Subject: Re: SQLFunctionCache and generic plans In-Reply-To: <3344719.1741985546@sss.pgh.pa.us> References: <8216639.NyiUUSuA9g@aivenlaptop> <3084885.1675783797@sss.pgh.pa.us> <758251661a3e8760ff52dd5c672a7505@postgrespro.ru> <30f02ca545915627905fbe3f23d93ec1@postgrespro.ru> <2275997.1737138456@sss.pgh.pa.us> <51ebc5f3b846ce279b75ac4f5e5ac33f@postgrespro.ru> <401652.1738598448@sss.pgh.pa.us> <445556.1738612687@sss.pgh.pa.us> <464677.1738620525@sss.pgh.pa.us> <1fc18af56d5fb27bf3e153ffaa2ed70d@postgrespro.ru> <2615770.1740688857@sss.pgh.pa.us> <448c63cf9b4f917c01802309b9c29eb9@postgrespro.ru> <2827970.1741890560@sss.pgh.pa.us> <337e011069b6831e063bfa346f49bb46@postgrespro.ru> <3344719.1741985546@sss.pgh.pa.us> Message-ID: X-Sender: a.pyhalov@postgrespro.ru Content-Type: multipart/mixed; boundary="=_9edd4529df066ffc45b0306aea50116b" X-KSMG-AntiPhishing: NotDetected X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.0.7854, bases: 2025/03/28 11:27:00 #27851261 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_9edd4529df066ffc45b0306aea50116b Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Tom Lane писал(а) 2025-03-14 23:52: > I spent some time today going through the actual code in this patch. > I realized that there's no longer any point in 0001: the later patches > don't move or repeatedly-call that bit of code, so it can be left > as-is. > > What I think we could stand to split out, though, is the changes in > the plancache support. The new 0001 attached is just the plancache > and analyze.c changes. That could be committed separately, although > of course there's little point in pushing it till we're happy with > the rest. > Hi. Sorry that didn't reply immediately, was busy with another tasks. > In general, this patch series is paying far too little attention to > updating existing comments that it obsoletes or adding new ones > explaining what's going on. For example, the introductory comment > for struct SQLFunctionCache still says > > * Note that currently this has only the lifespan of the calling query. > * Someday we should rewrite this code to use plancache.c to save > parse/plan > * results for longer than that. > > and I wonder how much of the para after that is still accurate either. > The new structs aren't adequately documented either IMO. We now have > about three different structs that have something to do with caches > by their names, but the reader is left to guess how they fit together. > Another example is that the header comment for init_execution_state > still describes an argument list it hasn't got anymore. > > I tried to clean up the comment situation in the plancache in 0001, > but I've not done much of anything to functions.c. I've added some comments to functions.c. Modified comments you've spotted out. > > I'm fairly confused why 0002 and 0003 are separate patches, and the > commit messages for them do nothing to clarify that. It seems like > you're expecting reviewers to review a very transitory state of > affairs in 0002, and it's not clear why. Maybe the code is fine > and you just need to explain the change sequence a bit more > in the commit messages. 0002 could stand to explain the point > of the new test cases, too, especially since one of them seems to > be demonstrating the fixing of a pre-existing bug. Also merged introducing plan cache to sql functions and session-level plan cache support. Mostly they were separate for historic reasons. > > Something is very wrong in 0004: it should not be breaking that > test case in test_extensions. It seems to me we should already > have the necessary infrastructure for that, in that the plan > ought to have a PlanInvalItem referencing public.dep_req2(), > and the ALTER SET SCHEMA that gets done on that function should > result in an invalidation. So it looks to me like that patch > has somehow rearranged things so we miss an invalidation. > I've not tried to figure out why. Plan is invalidated in both cases (before and after the patch). What happens here is that earlier when revalidation happened, we couldn't find renamed function. Now function in Query is identified by its oid, and it didn't change. So, we still can find function by oid and rebuild cached plan. > I'm also sad that 0004 > doesn't appear to include any test cases showing it doing > something right: without that, why do it at all? I've added sample, which is fixed by this patch. It can happen that plan is adjusted and saved. Later it's invalidated and when revalidation happens, we miss modifications, added by check_sql_fn_retval(). Another interesting issue is that cached plan is checked for being valid before function starts executing (like earlier planning happened before function started executing). So, once we discard cached plans, plan for second query in function is not invalidated immediately, just on the second execution. And after rebuilding plan, it becomes wrong. -- Best regards, Alexander Pyhalov, Postgres Professional --=_9edd4529df066ffc45b0306aea50116b Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0003-Handle-SQL-functions-which-result-type-is-adjuisted.patch Content-Disposition: attachment; filename=0003-Handle-SQL-functions-which-result-type-is-adjuisted.patch; size=9379 RnJvbSBlODQ5MGUwNzI2NWE5YTgzYzE5MmRjNGIzY2IzMWM2ZDE1MDliMTMwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBUaHUsIDI3IE1hciAyMDI1IDA5OjAyOjQ3ICswMzAwClN1YmplY3Q6IFtQ QVRDSCAzLzNdIEhhbmRsZSBTUUwgZnVuY3Rpb25zIHdoaWNoIHJlc3VsdCB0eXBlIGlzIGFkanVp c3RlZAoKUXVlcnkgY291bGQgYmUgbW9kaWZpZWQgYmV0d2VlbiByZXdyaXRlIGFuZCBwbGFuIHN0 YWdlcyBieQpjaGVja19zcWxfZm5fcmV0dmFsKCkuIFdlIG1vdmUgdGhpcyBzdGVwIGVhcmxpZXIs IHNvIHRoYXQKY2FjaGVkIHBsYW5zIHdlcmUgY3JlYXRlZCB3aXRoIGFscmVhZHkgbW9kaWZpZWQg dGxpc3QuIEluIHRoaXMKY2FzZSBpZiBsYXRlciByZXZhbGlkYXRpb24gaXMgY29uc2lkZXJlZCBi eSBSZXZhbGlkYXRlQ2FjaGVkUXVlcnkoKSwKbW9kaWZpY2F0aW9ucywgZG9uZSBieSBjaGVja19z cWxfZm5fcmV0dmFsKCksIHdpbGwgbm90IGJlIGxvc3QuCgpXZSBjb25zaWRlciB0aGF0IHJld3Jp dGluZyBxdWVyeSBjYW5ub3QgZXZlciBjaGFuZ2VzIHRoZSB0YXJnZXRsaXN0CnJlc3VsdHMuCgpO b3RlIHRoYXQgdGVzdF9leHRlbnNpb25zIHJlc3VsdCBoYXMgY2hhbmdlZCBhcyBjYWNoZWQgcXVl cnkKY2FuIGJlIHJldmFsaWRhdGVkIGFmdGVyIGV4dGVuc2lvbiBpcyBtb3ZlZCB0byBhbm90aGVy IHNjaGVtYSAtCmZ1bmN0aW9uIG9pZCBpbiB0aGUgcXVlcnkgc3RpbGwgbWF0Y2hlcyB0aGUgZXhp c3Rpbmcgb25lLgotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jICAgICAgICAg ICAgICB8IDc2ICsrKysrKysrKystLS0tLS0tLS0KIC4uLi9leHBlY3RlZC90ZXN0X2V4dGVuc2lv bnMub3V0ICAgICAgICAgICAgICB8IDExICsrLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w bGFuY2FjaGUub3V0ICAgICAgIHwgMjggKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGxh bmNhY2hlLnNxbCAgICAgICAgICAgIHwgMjcgKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA5OSBp bnNlcnRpb25zKCspLCA0MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9mdW5jdGlvbnMuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCmlu ZGV4IDdkMTJjYTEyNmU2Li41NDhiMWMwYzJmMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZnVuY3Rpb25zLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMK QEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rl cy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKKyNpbmNsdWRlICJw YXJzZXIvYW5hbHl6ZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9jb2VyY2UuaCIKICNpbmNs dWRlICJwYXJzZXIvcGFyc2VfY29sbGF0ZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9mdW5j LmgiCkBAIC05ODAsNiArOTgxLDcgQEAgaW5pdF9zcWxfZmNhY2hlKEZ1bmN0aW9uQ2FsbEluZm8g ZmNpbmZvLCBPaWQgY29sbGF0aW9uLCBib29sICpsYXp5RXZhbE9LKQogCVNRTEZ1bmN0aW9uUGxh bktleSBwbGFuX2NhY2hlX2VudHJ5X2tleTsKIAlib29sCQl1c2VfcGxhbl9jYWNoZTsKIAlib29s CQlwbGFuX2NhY2hlX2VudHJ5X3ZhbGlkOworCUxpc3QJICAgKnF1ZXJ5X2xpc3Q7CiAKIAkvKgog CSAqIENyZWF0ZSBtZW1vcnkgY29udGV4dCB0aGF0IGhvbGRzIGFsbCB0aGUgU1FMRnVuY3Rpb25D YWNoZSBkYXRhLiAgSXQKQEAgLTExMzksMzIgKzExNDEsMTcgQEAgaW5pdF9zcWxfZmNhY2hlKEZ1 bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBPaWQgY29sbGF0aW9uLCBib29sICpsYXp5RXZhbE9LKQog CiAJCXBsYW5zb3VyY2VfbGlzdCA9IE5JTDsKIAotCQlxdWVyeVRyZWVfbGlzdCA9IE5JTDsKKwkJ LyogQ29uc3RydWN0IGEgbGlzdCBvZiBhbmFseXplZCBwYXJzZXRyZWVzLiAqLworCQlxdWVyeV9s aXN0ID0gTklMOwogCQlpZiAoIWlzTnVsbCkKIAkJewogCQkJTm9kZQkgICAqbjsKLQkJCUxpc3QJ ICAgKnN0b3JlZF9xdWVyeV9saXN0OwogCiAJCQluID0gc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdl dENTdHJpbmcodG1wKSk7CiAJCQlpZiAoSXNBKG4sIExpc3QpKQotCQkJCXN0b3JlZF9xdWVyeV9s aXN0ID0gbGluaXRpYWxfbm9kZShMaXN0LCBjYXN0Tm9kZShMaXN0LCBuKSk7CisJCQkJcXVlcnlf bGlzdCA9IGxpbml0aWFsX25vZGUoTGlzdCwgY2FzdE5vZGUoTGlzdCwgbikpOwogCQkJZWxzZQot CQkJCXN0b3JlZF9xdWVyeV9saXN0ID0gbGlzdF9tYWtlMShuKTsKLQotCQkJZm9yZWFjaChsYywg c3RvcmVkX3F1ZXJ5X2xpc3QpCi0JCQl7Ci0JCQkJUXVlcnkJICAgKnBhcnNldHJlZSA9IGxmaXJz dF9ub2RlKFF1ZXJ5LCBsYyk7Ci0JCQkJTGlzdAkgICAqcXVlcnlUcmVlX3N1Ymxpc3Q7Ci0JCQkJ Q2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZTsKLQotCQkJCUFjcXVpcmVSZXdyaXRlTG9ja3Mo cGFyc2V0cmVlLCB0cnVlLCBmYWxzZSk7Ci0KLQkJCQlwbGFuc291cmNlID0gQ3JlYXRlQ2FjaGVk UGxhbkZvclF1ZXJ5KHBhcnNldHJlZSwgZmNhY2hlLT5zcmMsIENyZWF0ZUNvbW1hbmRUYWcoKE5v ZGUgKikgcGFyc2V0cmVlKSk7Ci0JCQkJcGxhbnNvdXJjZV9saXN0ID0gbGFwcGVuZChwbGFuc291 cmNlX2xpc3QsIHBsYW5zb3VyY2UpOwotCi0JCQkJcXVlcnlUcmVlX3N1Ymxpc3QgPSBwZ19yZXdy aXRlX3F1ZXJ5KHBhcnNldHJlZSk7Ci0JCQkJcXVlcnlUcmVlX2xpc3QgPSBsYXBwZW5kKHF1ZXJ5 VHJlZV9saXN0LCBxdWVyeVRyZWVfc3VibGlzdCk7Ci0JCQl9CisJCQkJcXVlcnlfbGlzdCA9IGxp c3RfbWFrZTEobik7CiAJCX0KIAkJZWxzZQogCQl7CkBAIC0xMTc1LDI1ICsxMTYyLDE1IEBAIGlu aXRfc3FsX2ZjYWNoZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgT2lkIGNvbGxhdGlvbiwgYm9v bCAqbGF6eUV2YWxPSykKIAkJCWZvcmVhY2gobGMsIHJhd19wYXJzZXRyZWVfbGlzdCkKIAkJCXsK IAkJCQlSYXdTdG10ICAgICpwYXJzZXRyZWUgPSBsZmlyc3Rfbm9kZShSYXdTdG10LCBsYyk7Ci0J CQkJTGlzdAkgICAqcXVlcnlUcmVlX3N1Ymxpc3Q7Ci0JCQkJQ2FjaGVkUGxhblNvdXJjZSAqcGxh bnNvdXJjZTsKLQotCQkJCXBsYW5zb3VyY2UgPSBDcmVhdGVDYWNoZWRQbGFuKHBhcnNldHJlZSwg ZmNhY2hlLT5zcmMsIENyZWF0ZUNvbW1hbmRUYWcocGFyc2V0cmVlLT5zdG10KSk7Ci0JCQkJcGxh bnNvdXJjZV9saXN0ID0gbGFwcGVuZChwbGFuc291cmNlX2xpc3QsIHBsYW5zb3VyY2UpOwotCi0J CQkJcXVlcnlUcmVlX3N1Ymxpc3QgPSBwZ19hbmFseXplX2FuZF9yZXdyaXRlX3dpdGhjYihwYXJz ZXRyZWUsCi0JCQkJCQkJCQkJCQkJCQkJICBmY2FjaGUtPnNyYywKLQkJCQkJCQkJCQkJCQkJCQkg IChQYXJzZXJTZXR1cEhvb2spIHNxbF9mbl9wYXJzZXJfc2V0dXAsCi0JCQkJCQkJCQkJCQkJCQkJ ICBmY2FjaGUtPnBpbmZvLAotCQkJCQkJCQkJCQkJCQkJCSAgTlVMTCk7Ci0JCQkJcXVlcnlUcmVl X2xpc3QgPSBsYXBwZW5kKHF1ZXJ5VHJlZV9saXN0LCBxdWVyeVRyZWVfc3VibGlzdCk7CisJCQkJ UXVlcnkJICAgKnF1ZXJ5OworCisJCQkJcXVlcnkgPSBwYXJzZV9hbmFseXplX3dpdGhjYihwYXJz ZXRyZWUsIGZjYWNoZS0+c3JjLCAoUGFyc2VyU2V0dXBIb29rKSBzcWxfZm5fcGFyc2VyX3NldHVw LCBmY2FjaGUtPnBpbmZvLAorCQkJCQkJCQkJCQkgTlVMTCk7CisKKwkJCQlxdWVyeV9saXN0ID0g bGFwcGVuZChxdWVyeV9saXN0LCBxdWVyeSk7CiAJCQl9CiAJCX0KIAotCQkvKgotCQkgKiBDaGVj ayB0aGF0IHRoZXJlIGFyZSBubyBzdGF0ZW1lbnRzIHdlIGRvbid0IHdhbnQgdG8gYWxsb3cuCi0J CSAqLwotCQljaGVja19zcWxfZm5fc3RhdGVtZW50cyhxdWVyeVRyZWVfbGlzdCk7CiAKIAkJLyoK IAkJICogQ2hlY2sgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgdHlwZSBpdCBjbGFpbXMg dG8uICBBbHRob3VnaCBpbgpAQCAtMTIwMyw3ICsxMTgwLDEwIEBAIGluaXRfc3FsX2ZjYWNoZShG dW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgT2lkIGNvbGxhdGlvbiwgYm9vbCAqbGF6eUV2YWxPSykK IAkJICogdGhlIGZ1bmN0aW9uIGhhZCBhbnkgcG9seW1vcnBoaWMgYXJndW1lbnRzLiAgTW9yZW92 ZXIsCiAJCSAqIGNoZWNrX3NxbF9mbl9yZXR2YWwgdGFrZXMgY2FyZSBvZiBpbmplY3RpbmcgYW55 IHJlcXVpcmVkIGNvbHVtbgogCQkgKiB0eXBlIGNvZXJjaW9ucy4gIChCdXQgd2UgZG9uJ3QgYXNr IGl0IHRvIGluc2VydCBudWxscyBmb3IgZHJvcHBlZAotCQkgKiBjb2x1bW5zOyB0aGUganVua2Zp bHRlciBoYW5kbGVzIHRoYXQuKQorCQkgKiBjb2x1bW5zOyB0aGUganVua2ZpbHRlciBoYW5kbGVz IHRoYXQuKSBBcyBjaGVja19zcWxfZm5fcmV0dmFsKCkgY2FuCisJCSAqIG1vZGlmeSBxdWVyaWVz IHRvIG1hdGNoIGV4cGVjdGVkIHJldHVybiB0eXBlcywgd2UgZXhlY3V0ZSBpdCBwcmlvcgorCQkg KiB0byBjcmVhdGluZyBjYWNoZWQgcGxhbnMsIHNvIHRoYXQgaWYgcmV2YWxpZGF0aW9uIGhhcHBl bnMgYW5kCisJCSAqIHRyaWdnZXJzIHF1ZXJ5IHJld3JpdGluZywgcmV0dXJuIHR5cGUgd291bGQg YmUgYWxyZWFkeSBjb3JyZWN0LgogCQkgKgogCQkgKiBOb3RlOiB3ZSBzZXQgZmNhY2hlLT5yZXR1 cm5zVHVwbGUgYWNjb3JkaW5nIHRvIHdoZXRoZXIgd2UgYXJlCiAJCSAqIHJldHVybmluZyB0aGUg d2hvbGUgdHVwbGUgcmVzdWx0IG9yIGp1c3QgYSBzaW5nbGUgY29sdW1uLiAgSW4gdGhlCkBAIC0x MjE1LDEzICsxMTk1LDM1IEBAIGluaXRfc3FsX2ZjYWNoZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5m bywgT2lkIGNvbGxhdGlvbiwgYm9vbCAqbGF6eUV2YWxPSykKIAkJICogZG8gdGhhdC4pCiAJCSAq LwogCi0JCWZjYWNoZS0+cmV0dXJuc1R1cGxlID0gY2hlY2tfc3FsX2ZuX3JldHZhbChxdWVyeVRy ZWVfbGlzdCwKKwkJZmNhY2hlLT5yZXR1cm5zVHVwbGUgPSBjaGVja19zcWxfZm5fcmV0dmFsKGxp c3RfbWFrZTEocXVlcnlfbGlzdCksCiAJCQkJCQkJCQkJCQkgICByZXR0eXBlLAogCQkJCQkJCQkJ CQkJICAgcmV0dHVwZGVzYywKIAkJCQkJCQkJCQkJCSAgIHByb2NlZHVyZVN0cnVjdC0+cHJva2lu ZCwKIAkJCQkJCQkJCQkJCSAgIGZhbHNlLAogCQkJCQkJCQkJCQkJICAgJnJlc3VsdHRsaXN0KTsK IAorCQlxdWVyeVRyZWVfbGlzdCA9IE5JTDsKKworCQlmb3JlYWNoKGxjLCBxdWVyeV9saXN0KQor CQl7CisJCQlRdWVyeQkgICAqcGFyc2V0cmVlID0gbGZpcnN0X25vZGUoUXVlcnksIGxjKTsKKwkJ CUxpc3QJICAgKnF1ZXJ5VHJlZV9zdWJsaXN0OworCQkJQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNv dXJjZTsKKworCQkJQWNxdWlyZVJld3JpdGVMb2NrcyhwYXJzZXRyZWUsIHRydWUsIGZhbHNlKTsK KworCQkJcGxhbnNvdXJjZSA9IENyZWF0ZUNhY2hlZFBsYW5Gb3JRdWVyeShwYXJzZXRyZWUsIGZj YWNoZS0+c3JjLCBDcmVhdGVDb21tYW5kVGFnKChOb2RlICopIHBhcnNldHJlZSkpOworCQkJcGxh bnNvdXJjZV9saXN0ID0gbGFwcGVuZChwbGFuc291cmNlX2xpc3QsIHBsYW5zb3VyY2UpOworCisJ CQlxdWVyeVRyZWVfc3VibGlzdCA9IHBnX3Jld3JpdGVfcXVlcnkocGFyc2V0cmVlKTsKKwkJCXF1 ZXJ5VHJlZV9saXN0ID0gbGFwcGVuZChxdWVyeVRyZWVfbGlzdCwgcXVlcnlUcmVlX3N1Ymxpc3Qp OworCQl9CisKKwkJLyoKKwkJICogQ2hlY2sgdGhhdCB0aGVyZSBhcmUgbm8gc3RhdGVtZW50cyB3 ZSBkb24ndCB3YW50IHRvIGFsbG93LgorCQkgKi8KKwkJY2hlY2tfc3FsX2ZuX3N0YXRlbWVudHMo cXVlcnlUcmVlX2xpc3QpOworCiAJCS8qCiAJCSAqIFF1ZXJpZXMgY291bGQgYmUgcmV3cml0dGVu IGJ5IGNoZWNrX3NxbF9mbl9yZXR2YWwoKS4gTm93IHdoZW4gdGhleQogCQkgKiBoYXZlIHRoZWly IGZpbmFsIGZvcm0sIHdlIGNhbiBjb21wbGV0ZSBwbGFuIGNhY2hlIGVudHJ5IGNyZWF0aW9uLgpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2V4dGVuc2lvbnMvZXhwZWN0ZWQvdGVz dF9leHRlbnNpb25zLm91dCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9leHRlbnNpb25zL2V4cGVj dGVkL3Rlc3RfZXh0ZW5zaW9ucy5vdXQKaW5kZXggNzJiYWUxYmYyNTQuLmVhM2Q0Y2E2MWQ4IDEw MDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZXh0ZW5zaW9ucy9leHBlY3RlZC90ZXN0 X2V4dGVuc2lvbnMub3V0CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9leHRlbnNpb25zL2V4 cGVjdGVkL3Rlc3RfZXh0ZW5zaW9ucy5vdXQKQEAgLTY0NiwxMiArNjQ2LDExIEBAIFNFTEVDVCBk ZXBfcmVxMygpOwogKDEgcm93KQogCiBTRUxFQ1QgZGVwX3JlcTNiKCk7ICAtLSBmYWlscwotRVJS T1I6ICBmdW5jdGlvbiBwdWJsaWMuZGVwX3JlcTIoKSBkb2VzIG5vdCBleGlzdAotTElORSAxOiAg U0VMRUNUIHB1YmxpYy5kZXBfcmVxMigpIHx8ICcgcmVxM2InIAotICAgICAgICAgICAgICAgIF4K LUhJTlQ6ICBObyBmdW5jdGlvbiBtYXRjaGVzIHRoZSBnaXZlbiBuYW1lIGFuZCBhcmd1bWVudCB0 eXBlcy4gWW91IG1pZ2h0IG5lZWQgdG8gYWRkIGV4cGxpY2l0IHR5cGUgY2FzdHMuCi1RVUVSWTog ICBTRUxFQ1QgcHVibGljLmRlcF9yZXEyKCkgfHwgJyByZXEzYicgCi1DT05URVhUOiAgU1FMIGZ1 bmN0aW9uICJkZXBfcmVxM2IiIHN0YXRlbWVudCAxCisgICAgZGVwX3JlcTNiICAgIAorLS0tLS0t LS0tLS0tLS0tLS0KKyByZXExIHJlcTIgcmVxM2IKKygxIHJvdykKKwogRFJPUCBFWFRFTlNJT04g dGVzdF9leHRfcmVxX3NjaGVtYTM7CiBBTFRFUiBFWFRFTlNJT04gdGVzdF9leHRfcmVxX3NjaGVt YTEgU0VUIFNDSEVNQSB0ZXN0X3NfZGVwMjsgIC0tIG5vdyBvawogU0VMRUNUIHRlc3Rfc19kZXAy LmRlcF9yZXExKCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BsYW5j YWNoZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BsYW5jYWNoZS5vdXQKaW5kZXgg NGU1OTE4ODE5NmMuLjgxNTYxOGNlZGI2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3BsYW5jYWNoZS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wbGFu Y2FjaGUub3V0CkBAIC0zOTgsMyArMzk4LDMxIEBAIHNlbGVjdCBuYW1lLCBnZW5lcmljX3BsYW5z LCBjdXN0b21fcGxhbnMgZnJvbSBwZ19wcmVwYXJlZF9zdGF0ZW1lbnRzCiAoMSByb3cpCiAKIGRy b3AgdGFibGUgdGVzdF9tb2RlOworLS0gSGVyZSBTUUwgZnVuY3Rpb24gcmV0dXJuIHR5cGUgaXMg YWRqdXN0ZWQgdG8gbWF0Y2ggdGFyZ2V0LgorLS0gUGxhbiBpcyBzYXZlZCwgYnV0IGRyb3BwZWQg aW1tZWRpYXRlbHkgb24gdGhlIGZpcnN0IGNhY2hlZCBwbGFuCistLSB1c2FnZS4gV2hlbiBwbGFu IGlzIHJldmFsaWRhdGVkLCByZXR1cm4gdHlwZSBzaG91bGQgbWF0Y2ggZXhwZWN0ZWQgb25lLgor Y3JlYXRlIHRhYmxlIHQxIChpZCBpbnQsIG5zcG5hbWUgbmFtZSwgdG5hbWUgIG5hbWUpOworY3Jl YXRlIHRhYmxlIHQyIChpZCBpbnQsIG5zcG5hbWUgdGV4dCwgdG5hbWUgIHRleHQpOworQ1JFQVRF IE9SIFJFUExBQ0UgRlVOQ1RJT04gZ2V0X3ZhbHVlcyhpZCBpbnQpCisgUkVUVVJOUyBUQUJMRShp ZCBpbnQsIG5zcG5hbWUgdGV4dCwgdG5hbWUgdGV4dCkKKyBMQU5HVUFHRSBzcWwKK0FTICRmdW5j dGlvbiQKKyAgICBESVNDQVJEIFBMQU5TOworICAgIFNFTEVDVAorICAgICAgIGlkLCBuc3BuYW1l LCB0bmFtZQorICAgIEZST00gdDEKKyAgICBXSEVSRSBpZCA9ICQxOworJGZ1bmN0aW9uJDsKK3Nl dCBwbGFuX2NhY2hlX21vZGUgPSBmb3JjZV9nZW5lcmljX3BsYW47CitJTlNFUlQgSU5UTyB0MSBW QUxVRVMgKDEsICduc3BuYW1lJywgJ3RuYW1lJyk7CitJTlNFUlQgSU5UTyB0MiBTRUxFQ1QgKiBG Uk9NIGdldF92YWx1ZXMoMSk7CitJTlNFUlQgSU5UTyB0MiBTRUxFQ1QgKiBGUk9NIGdldF92YWx1 ZXMoMSk7CityZXNldCBwbGFuX2NhY2hlX21vZGU7CitTRUxFQ1QgKiBGUk9NIHQyOworIGlkIHwg bnNwbmFtZSB8IHRuYW1lIAorLS0tLSstLS0tLS0tLS0rLS0tLS0tLQorICAxIHwgbnNwbmFtZSB8 IHRuYW1lCisgIDEgfCBuc3BuYW1lIHwgdG5hbWUKKygyIHJvd3MpCisKK2Ryb3AgdGFibGUgdDEs IHQyOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGxhbmNhY2hlLnNxbCBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3BsYW5jYWNoZS5zcWwKaW5kZXggNGIyZjExZGNjNjQuLjIwZTkz Y2NlZTE4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wbGFuY2FjaGUuc3FsCisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BsYW5jYWNoZS5zcWwKQEAgLTIyMywzICsyMjMsMzAg QEAgc2VsZWN0IG5hbWUsIGdlbmVyaWNfcGxhbnMsIGN1c3RvbV9wbGFucyBmcm9tIHBnX3ByZXBh cmVkX3N0YXRlbWVudHMKICAgd2hlcmUgIG5hbWUgPSAndGVzdF9tb2RlX3BwJzsKIAogZHJvcCB0 YWJsZSB0ZXN0X21vZGU7CisKKy0tIEhlcmUgU1FMIGZ1bmN0aW9uIHJldHVybiB0eXBlIGlzIGFk anVzdGVkIHRvIG1hdGNoIHRhcmdldC4KKy0tIFBsYW4gaXMgc2F2ZWQsIGJ1dCBkcm9wcGVkIGlt bWVkaWF0ZWx5IG9uIHRoZSBmaXJzdCBjYWNoZWQgcGxhbgorLS0gdXNhZ2UuIFdoZW4gcGxhbiBp cyByZXZhbGlkYXRlZCwgcmV0dXJuIHR5cGUgc2hvdWxkIG1hdGNoIGV4cGVjdGVkIG9uZS4KK2Ny ZWF0ZSB0YWJsZSB0MSAoaWQgaW50LCBuc3BuYW1lIG5hbWUsIHRuYW1lICBuYW1lKTsKK2NyZWF0 ZSB0YWJsZSB0MiAoaWQgaW50LCBuc3BuYW1lIHRleHQsIHRuYW1lICB0ZXh0KTsKKworQ1JFQVRF IE9SIFJFUExBQ0UgRlVOQ1RJT04gZ2V0X3ZhbHVlcyhpZCBpbnQpCisgUkVUVVJOUyBUQUJMRShp ZCBpbnQsIG5zcG5hbWUgdGV4dCwgdG5hbWUgdGV4dCkKKyBMQU5HVUFHRSBzcWwKK0FTICRmdW5j dGlvbiQKKyAgICBESVNDQVJEIFBMQU5TOworICAgIFNFTEVDVAorICAgICAgIGlkLCBuc3BuYW1l LCB0bmFtZQorICAgIEZST00gdDEKKyAgICBXSEVSRSBpZCA9ICQxOworJGZ1bmN0aW9uJDsKKwor c2V0IHBsYW5fY2FjaGVfbW9kZSA9IGZvcmNlX2dlbmVyaWNfcGxhbjsKK0lOU0VSVCBJTlRPIHQx IFZBTFVFUyAoMSwgJ25zcG5hbWUnLCAndG5hbWUnKTsKKworSU5TRVJUIElOVE8gdDIgU0VMRUNU ICogRlJPTSBnZXRfdmFsdWVzKDEpOworSU5TRVJUIElOVE8gdDIgU0VMRUNUICogRlJPTSBnZXRf dmFsdWVzKDEpOworcmVzZXQgcGxhbl9jYWNoZV9tb2RlOworU0VMRUNUICogRlJPTSB0MjsKKwor ZHJvcCB0YWJsZSB0MSwgdDI7Ci0tIAoyLjQzLjAKCg== --=_9edd4529df066ffc45b0306aea50116b Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0002-Use-cached-plans-machinery-for-SQL-function.patch Content-Disposition: attachment; filename=0002-Use-cached-plans-machinery-for-SQL-function.patch; size=44191 RnJvbSA2NWFiMzRhNmRjYThkZGVlM2VjYTVmZWNmMzViNjBkZWIyYmU0YjYxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBUaHUsIDI3IE1hciAyMDI1IDA5OjAwOjU4ICswMzAwClN1YmplY3Q6IFtQ QVRDSCAyLzNdIFVzZSBjYWNoZWQgcGxhbnMgbWFjaGluZXJ5IGZvciBTUUwgZnVuY3Rpb24KCldl IGNyZWF0ZSBjYWNoZWQgcGxhbnMgZm9yIFNRTCBmdW5jdGlvbnMgcXVlcmllcy4KUGxhbnMgYXJl IHNhdmVkIGluIHNlc3Npb24tbGV2ZWwgY2FjaGUuCldlIGRvbid0IHNhdmUgZnVsbCBTUUxGdW5j dGlvbkNhY2hlIGVudHJ5LApidXQgb25seSBsaXN0IG9mIGNhY2hlZCBwbGFucywgc29tZSBkYXRh LCByZXF1aXJlZAp0byByZWNyZWF0ZSB0aGlzIGVudHJ5IGFuZCBzb21lIGFkZGl0aW9uYWwgZmll bGRzLApuZWNlc3NhcnkgdG8gdmFsaWRhdGUgY2FjaGVkIHBsYW4uCgpTb21lIHRlc3RzIHdlcmUg YWRkZWQgdG8gdmFsaWRhdGUgY29ybmVyIGNhc2VzLCBpbmNsdWRpbmcKc3FsIGZ1bmN0aW9ucyBw bGFuIGludmFsaWRhdGlvbiBhbmQgZnVuY3Rpb25zIHdpdGggc3RhdGVtZW50cywKd2hpY2ggYXJl IGNvbXBsZXRlbHkgZWxlbWluYXRlZCBieSByZXdyaXRlIHJ1bGVzLgotLS0KIHNyYy9iYWNrZW5k L2V4ZWN1dG9yL2Z1bmN0aW9ucy5jICAgICAgICAgICAgICB8IDg2OSArKysrKysrKysrKysrKyst LS0KIC4uLi9leHBlY3RlZC90ZXN0X2V4dGVuc2lvbnMub3V0ICAgICAgICAgICAgICB8ICAgMiAr LQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9yb3dzZWN1cml0eS5vdXQgICAgIHwgIDUxICsK IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0ICAgICAgICAgICB8ICAzNSArCiBz cmMvdGVzdC9yZWdyZXNzL3NxbC9yb3dzZWN1cml0eS5zcWwgICAgICAgICAgfCAgNDEgKwogc3Jj L3Rlc3QvcmVncmVzcy9zcWwvcnVsZXMuc3FsICAgICAgICAgICAgICAgIHwgIDI0ICsKIHNyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMiArCiA3IGZpbGVz IGNoYW5nZWQsIDg3NSBpbnNlcnRpb25zKCspLCAxNDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9mdW5jdGlvbnMuYwppbmRleCA2YWE4ZTljNGQ4YS4uN2QxMmNhMTI2ZTYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2Z1bmN0aW9ucy5jCkBAIC0xOCw2ICsxOCw4IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hhY3Qu aCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5 cGUuaCIKKyNpbmNsdWRlICJjb21tYW5kcy90cmlnZ2VyLmgiCisjaW5jbHVkZSAiY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2Z1bmN0aW9ucy5oIgogI2luY2x1 ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKQEAgLTMzLDYgKzM1LDcgQEAK ICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgog I2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvcGxhbmNhY2hlLmgi CiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgi CiAKQEAgLTc4LDE3ICs4MSwyNiBAQCB0eXBlZGVmIHN0cnVjdCBleGVjdXRpb25fc3RhdGUKICAq IGFuZCBsaW5rZWQgdG8gZnJvbSB0aGUgZm5fZXh0cmEgZmllbGQgb2YgdGhlIEZtZ3JJbmZvIHN0 cnVjdC4KICAqCiAgKiBOb3RlIHRoYXQgY3VycmVudGx5IHRoaXMgaGFzIG9ubHkgdGhlIGxpZmVz cGFuIG9mIHRoZSBjYWxsaW5nIHF1ZXJ5LgotICogU29tZWRheSB3ZSBzaG91bGQgcmV3cml0ZSB0 aGlzIGNvZGUgdG8gdXNlIHBsYW5jYWNoZS5jIHRvIHNhdmUgcGFyc2UvcGxhbgotICogcmVzdWx0 cyBmb3IgbG9uZ2VyIHRoYW4gdGhhdC4KKyAqIFdoZW4gY2FjaGVkIHNxbCBmdW5jdGlvbiBwbGFu cyBhcmUgdXNlZCwgU1FMRnVuY3Rpb25DYWNoZSBlbnRyeQorICogaXMgcmVjcmVhdGVkIGZyb20g c2VwYXJhdGUgY2FjaGVkIHBsYW4gZW50cnksIHdoaWNoIGlzIHJlcHJlc2VudGVkCisgKiBieSBT UUxGdW5jdGlvblBsYW5FbnRyeS4gUGxhbiBjYWNoZSBlbnRyaWVzIGFyZSBwcmVzZXJ2ZWQgaW4g c2Vzc2lvbi1sZXZlbAorICogY2FjaGUgKHNxbF9wbGFuX2NhY2hlX2h0YWIpLgogICoKLSAqIFBo eXNpY2FsbHksIHRob3VnaCwgdGhlIGRhdGEgaGFzIHRoZSBsaWZlc3BhbiBvZiB0aGUgRm1ncklu Zm8gdGhhdCdzIHVzZWQKLSAqIHRvIGNhbGwgdGhlIGZ1bmN0aW9uLCBhbmQgdGhlcmUgYXJlIGNh c2VzIChwYXJ0aWN1bGFybHkgd2l0aCBpbmRleGVzKQorICogUGh5c2ljYWxseSwgdGhvdWdoLCB0 aGUgZGF0YSBpbiBTUUxGdW5jdGlvbkNhY2hlIHJlY29yZCBpdHNlbGYgaGFzIHRoZQorICogbGlm ZXNwYW4gb2YgdGhlIEZtZ3JJbmZvIHRoYXQncyB1c2VkIHRvIGNhbGwgdGhlIGZ1bmN0aW9uLCBh bmQgdGhlcmUgYXJlCisgKiBjYXNlcyAocGFydGljdWxhcmx5IHdpdGggaW5kZXhlcykKICAqIHdo ZXJlIHRoZSBGbWdySW5mbyBtaWdodCBzdXJ2aXZlIGFjcm9zcyB0cmFuc2FjdGlvbnMuICBXZSBj YW5ub3QgYXNzdW1lCiAgKiB0aGF0IHRoZSBwYXJzZS9wbGFuIHRyZWVzIGFyZSBnb29kIGZvciBs b25nZXIgdGhhbiB0aGUgKHN1Yil0cmFuc2FjdGlvbiBpbgogICogd2hpY2ggcGFyc2luZyB3YXMg ZG9uZSwgc28gd2UgbXVzdCBtYXJrIHRoZSByZWNvcmQgd2l0aCB0aGUgTFhJRC9zdWJ4aWQgb2YK LSAqIGl0cyBjcmVhdGlvbiB0aW1lLCBhbmQgcmVnZW5lcmF0ZSBldmVyeXRoaW5nIGlmIHRoYXQn cyBvYnNvbGV0ZS4gIFRvIGF2b2lkCisgKiBpdHMgY3JlYXRpb24gdGltZSwgYW5kIHJlY2hlY2sg cGxhbnMsIGlmIExYSUQvc3VieGlkIGlzIG9ic29sZXRlLiAgVG8gYXZvaWQKICAqIG1lbW9yeSBs ZWFrYWdlIHdoZW4gd2UgZG8gaGF2ZSB0byByZWdlbmVyYXRlIHRoaW5ncywgYWxsIHRoZSBkYXRh IGlzIGtlcHQKICAqIGluIGEgc3ViLWNvbnRleHQgb2YgdGhlIEZtZ3JJbmZvJ3MgZm5fbWN4dC4K KyAqCisgKiBUaGUgb25seSBleGNlcHRpb24gaXMgU1FMRnVuY3Rpb25QYXJzZUluZm8uIEl0IHNo b3VsZCBzdXJ2aXZlIGJldHdlZW4KKyAqIGZ1bmN0aW9uIGNhbGxzLCBhcyBpdCdzIG5lY2Vzc2Fy eSBpZiBwbGFuIHJldmFsaWRhdGlvbiB0cmlnZ2VycyByZXBsYW5uaW5nLgorICogSXQncyBzYWZl IHRvIHByZXNlcnZlIGl0IGFzIGxvbmcgYXMgZnVuY3Rpb24gY2FjaGUgZW50cnkgbGl2ZXMsIGFz IHBpbmZvCisgKiBpcyBkZXRlcm1pbmVkIGJ5IHByb2NlZHVyZVR1cGxlLiBJZiBpdCdzIGNoYW5n ZWQsIGZ1bmN0aW9uIHBsYW4gY2FjaGUgZW50cnkKKyAqIGlzIGludmFsaWRhdGVkIHRvZ2V0aGVy IHdpdGggU1FMRnVuY3Rpb25QYXJzZUluZm8uCiAgKi8KIHR5cGVkZWYgc3RydWN0CiB7CkBAIC0x MTIsNiArMTI0LDEyIEBAIHR5cGVkZWYgc3RydWN0CiAKIAlKdW5rRmlsdGVyICpqdW5rRmlsdGVy OwkJLyogd2lsbCBiZSBOVUxMIGlmIGZ1bmN0aW9uIHJldHVybnMgVk9JRCAqLwogCisJLyogQ2Fj aGVkIHBsYW5zIHN1cHBvcnQgKi8KKwlMaXN0CSAgICpwbGFuc291cmNlX2xpc3Q7CS8qIGxpc3Qg b2YgcGxhbnNvdXJjZSAqLworCUxpc3QJICAgKmNwbGFuX2xpc3Q7CQkvKiBsaXN0IG9mIGNhY2hl ZCBwbGFucyAqLworCWludAkJCXBsYW5uaW5nX3N0bXRfbnVtYmVyOwkvKiB0aGUgbnVtYmVyIG9m IHN0YXRlbWVudCB3ZSBhcmUKKwkJCQkJCQkJCQkgKiBjdXJyZW50bHkgcGxhbm5pbmcgKi8KKwog CS8qCiAJICogZnVuY19zdGF0ZSBpcyBhIExpc3Qgb2YgZXhlY3V0aW9uX3N0YXRlIHJlY29yZHMs IGVhY2ggb2Ygd2hpY2ggaXMgdGhlCiAJICogZmlyc3QgZm9yIGl0cyBvcmlnaW5hbCBwYXJzZXRy ZWUsIHdpdGggYW55IGFkZGl0aW9uYWwgcmVjb3JkcyBjaGFpbmVkCkBAIC0xMjIsNiArMTQwLDgg QEAgdHlwZWRlZiBzdHJ1Y3QKIAogCU1lbW9yeUNvbnRleHQgZmNvbnRleHQ7CQkvKiBtZW1vcnkg Y29udGV4dCBob2xkaW5nIHRoaXMgc3RydWN0IGFuZCBhbGwKIAkJCQkJCQkJICogc3Vic2lkaWFy eSBkYXRhICovCisJTWVtb3J5Q29udGV4dCBwbGFubmluZ19jb250ZXh0OyAvKiBtZW1vcnkgY29u dGV4dCB3aGljaCBpcyB1c2VkIGZvcgorCQkJCQkJCQkJICogcGxhbm5pbmcgKi8KIAogCUxvY2Fs VHJhbnNhY3Rpb25JZCBseGlkOwkvKiBseGlkIGluIHdoaWNoIGNhY2hlIHdhcyBtYWRlICovCiAJ U3ViVHJhbnNhY3Rpb25JZCBzdWJ4aWQ7CS8qIHN1YnhpZCBpbiB3aGljaCBjYWNoZSB3YXMgbWFk ZSAqLwpAQCAtMTI5LDYgKzE0OSw2NCBAQCB0eXBlZGVmIHN0cnVjdAogCiB0eXBlZGVmIFNRTEZ1 bmN0aW9uQ2FjaGUgKlNRTEZ1bmN0aW9uQ2FjaGVQdHI7CiAKKy8qCisgKiBQbGFuIGNhY2hlLXJl bGF0ZWQgc3RydWN0dXJlcworICovCisKKy8qCisgKiBTUUxGdW5jdGlvblBsYW5LZXkgZ3JvdXBz IGRhdGEgd2hpY2ggaXMgdXNlZCB0byBzZWFyY2ggZm9yCisgKiBmdW5jdGlvbiBwbGFuIGluIHBs YW4gY2FjaGUuIEVhY2ggY2FjaGVkIHBsYW4gZW50cnkKKyAqIGlzIGlkZW50aWZpZWQgYnkgZnVu Y3Rpb24gb2lkLCBpdCdzIGFyZ3VtZW50IHR5cGVzCisgKiBhbmQgaW5wdXQgY29sbGF0aW9uLgor ICovCit0eXBlZGVmIHN0cnVjdCBTUUxGdW5jdGlvblBsYW5LZXkKK3sKKwlPaWQJCQlmbl9vaWQ7 CisJT2lkCQkJaW5wdXRDb2xsYXRpb247CisJT2lkCQkJYXJndHlwZXNbRlVOQ19NQVhfQVJHU107 Cit9IFNRTEZ1bmN0aW9uUGxhbktleTsKKworLyoKKyAqIFNlc3Npb24tbGV2ZWwgc3FsIGZ1bmN0 aW9uIHBsYW4gY2FjaGUgZW50cnkuCisgKi8KK3R5cGVkZWYgc3RydWN0IFNRTEZ1bmN0aW9uUGxh bkVudHJ5Cit7CisJU1FMRnVuY3Rpb25QbGFuS2V5IGtleTsKKworCS8qIEZpZWxkcyByZXF1aXJl ZCB0byBpbnZhbGlkYXRlIGEgY2FjaGUgZW50cnkgKi8KKwlUcmFuc2FjdGlvbklkIGZuX3htaW47 CQkvKiB4bWluL1RJRCBvZiBwcm9jZWR1cmUncyBwZ19wcm9jIHR1cGxlICovCisJSXRlbVBvaW50 ZXJEYXRhIGZuX3RpZDsKKworCS8qCisJICogRmllbGRzIHJlcXVpcmVkIHRvIHJlY3JlYXRlIFNR TEZ1bmN0aW9uQ2FjaGUgZGF0YSBmb3IgY2FjaGVkIGZ1bmN0aW9ucworCSAqIHBsYW5zCisJICov CisKKwkvKgorCSAqIEZ1bmN0aW9uIGV4cGVjdGVkIHJlc3VsdCB0bGlzdC4gSXQgaXMgcmVxdWly ZWQgdG8gcmVjcmVhdGUgZnVuY3Rpb24KKwkgKiBleGVjdXRpb24gc3RhdGUgYXMgd2VsbCBhcyB0 byB2YWxpZGF0ZSBhIGNhY2hlIGVudHJ5LiBJdCBjYW5ub3QgYmUKKwkgKiBkaXJlY3RseSBpbmZl cnJlZCBmcm9tIGZ1bmN0aW9uIGFyZ3VtZW50IHR5cGVzLCBhcyBmdW5jdGlvbiBjYW4gYmUKKwkg KiBtb2RpZmllZCB0byBtYXRjaCBleHBlY3RlZCByZXN1dCB0eXBlLgorCSAqLworCUxpc3QJICAg KnJlc3VsdF90bGlzdDsKKworCWJvb2wJCXJldHVybnNUdXBsZTsJLyogVHJ1ZSBpZiB0aGlzIGZ1 bmN0aW9uIHJldHVybnMgdHVwbGUgKi8KKwlMaXN0CSAgICpwbGFuc291cmNlX2xpc3Q7CS8qIExp c3Qgb2YgQ2FjaGVkUGxhblNvdXJjZSBmb3IgdGhpcworCQkJCQkJCQkJICogZnVuY3Rpb24gKi8K KworCS8qCisJICogU1FMRnVuY3Rpb25QYXJzZUluZm9QdHIgaXMgdXNlZCBhcyBob29rcyBhcmd1 bWVudHMsIHNvIHNob3VsZCBwZXJzaXN0CisJICogYWNyb3NzIGNhbGxzLiBGb3J0dW5hdGVseSwg aWYgaXQgZG9lc24ndCwgdGhpcyBtZWFucyB0aGF0IGFyZ3R5cGVzIG9yCisJICogY29sbGF0aW9u IG1pc21hdGNoZXMgYW5kIHdlIGdldCBuZXcgY2FjaGUgZW50cnkuCisJICovCisJU1FMRnVuY3Rp b25QYXJzZUluZm9QdHIgcGluZm87CS8qIGNhY2hlZCBpbmZvcm1hdGlvbiBhYm91dCBhcmd1bWVu dHMgKi8KKworCU1lbW9yeUNvbnRleHQgZW50cnlfY3R4OwkvKiBtZW1vcnkgY29udGV4dCBmb3Ig YWxsb2NhdGVkIGZpZWxkcyBvZiB0aGlzCisJCQkJCQkJCSAqIGVudHJ5ICovCit9IFNRTEZ1bmN0 aW9uUGxhbkVudHJ5OworCisvKiBTUUwgZnVuY3Rpb25zIHBsYW4gY2FjaGUgKi8KK3N0YXRpYyBI VEFCICpzcWxfcGxhbl9jYWNoZV9odGFiID0gTlVMTDsKIAogLyogbm9uLWV4cG9ydCBmdW5jdGlv biBwcm90b3R5cGVzICovCiBzdGF0aWMgTm9kZSAqc3FsX2ZuX3BhcmFtX3JlZihQYXJzZVN0YXRl ICpwc3RhdGUsIFBhcmFtUmVmICpwcmVmKTsKQEAgLTEzOCwxMCArMjE2LDkgQEAgc3RhdGljIE5v ZGUgKnNxbF9mbl9tYWtlX3BhcmFtKFNRTEZ1bmN0aW9uUGFyc2VJbmZvUHRyIHBpbmZvLAogCQkJ CQkJCSAgIGludCBwYXJhbW5vLCBpbnQgbG9jYXRpb24pOwogc3RhdGljIE5vZGUgKnNxbF9mbl9y ZXNvbHZlX3BhcmFtX25hbWUoU1FMRnVuY3Rpb25QYXJzZUluZm9QdHIgcGluZm8sCiAJCQkJCQkJ CQkgICBjb25zdCBjaGFyICpwYXJhbW5hbWUsIGludCBsb2NhdGlvbik7Ci1zdGF0aWMgTGlzdCAq aW5pdF9leGVjdXRpb25fc3RhdGUoTGlzdCAqcXVlcnlUcmVlX2xpc3QsCi0JCQkJCQkJCSAgU1FM RnVuY3Rpb25DYWNoZVB0ciBmY2FjaGUsCitzdGF0aWMgTGlzdCAqaW5pdF9leGVjdXRpb25fc3Rh dGUoU1FMRnVuY3Rpb25DYWNoZVB0ciBmY2FjaGUsCiAJCQkJCQkJCSAgYm9vbCBsYXp5RXZhbE9L KTsKLXN0YXRpYyB2b2lkIGluaXRfc3FsX2ZjYWNoZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywg T2lkIGNvbGxhdGlvbiwgYm9vbCBsYXp5RXZhbE9LKTsKK3N0YXRpYyB2b2lkIGluaXRfc3FsX2Zj YWNoZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgT2lkIGNvbGxhdGlvbiwgYm9vbCAqbGF6eUV2 YWxPSyk7CiBzdGF0aWMgdm9pZCBwb3N0cXVlbF9zdGFydChleGVjdXRpb25fc3RhdGUgKmVzLCBT UUxGdW5jdGlvbkNhY2hlUHRyIGZjYWNoZSk7CiBzdGF0aWMgYm9vbCBwb3N0cXVlbF9nZXRuZXh0 KGV4ZWN1dGlvbl9zdGF0ZSAqZXMsIFNRTEZ1bmN0aW9uQ2FjaGVQdHIgZmNhY2hlKTsKIHN0YXRp YyB2b2lkIHBvc3RxdWVsX2VuZChleGVjdXRpb25fc3RhdGUgKmVzKTsKQEAgLTE2Myw2ICsyNDAs NDggQEAgc3RhdGljIGJvb2wgc3FsZnVuY3Rpb25fcmVjZWl2ZShUdXBsZVRhYmxlU2xvdCAqc2xv dCwgRGVzdFJlY2VpdmVyICpzZWxmKTsKIHN0YXRpYyB2b2lkIHNxbGZ1bmN0aW9uX3NodXRkb3du KERlc3RSZWNlaXZlciAqc2VsZik7CiBzdGF0aWMgdm9pZCBzcWxmdW5jdGlvbl9kZXN0cm95KERl c3RSZWNlaXZlciAqc2VsZik7CiAKKy8qIFNRTC1mdW5jdGlvbnMgcGxhbiBjYWNoZS1yZWxhdGVk IHJvdXRpbmVzICovCitzdGF0aWMgdm9pZCBjb21wdXRlX3BsYW5fZW50cnlfa2V5KFNRTEZ1bmN0 aW9uUGxhbktleSAqaGFzaGtleSwgRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIEZvcm1fcGdfcHJv YyBwcm9jZWR1cmVTdHJ1Y3QpOworc3RhdGljIFNRTEZ1bmN0aW9uUGxhbkVudHJ5ICpnZXRfY2Fj aGVkX3BsYW5fZW50cnkoU1FMRnVuY3Rpb25QbGFuS2V5ICpoYXNoa2V5KTsKK3N0YXRpYyB2b2lk IHNhdmVfY2FjaGVkX3BsYW5fZW50cnkoU1FMRnVuY3Rpb25QbGFuS2V5ICpoYXNoa2V5LCBIZWFw VHVwbGUgcHJvY2VkdXJlVHVwbGUsIExpc3QgKnBsYW5zb3VyY2VfbGlzdCwgTGlzdCAqcmVzdWx0 X3RsaXN0LCBib29sIHJldHVybnNUdXBsZSwgU1FMRnVuY3Rpb25QYXJzZUluZm9QdHIgcGluZm8s IE1lbW9yeUNvbnRleHQgYWxpYW5hYmxlX2NvbnRleHQpOworc3RhdGljIHZvaWQgZGVsZXRlX2Nh Y2hlZF9wbGFuX2VudHJ5KFNRTEZ1bmN0aW9uUGxhbkVudHJ5ICplbnRyeSk7CisKK3N0YXRpYyBi b29sIGNoZWNrX3NxbF9mbl9yZXR2YWxfbWF0Y2hlcyhMaXN0ICp0bGlzdCwgT2lkIHJldHR5cGUs IFR1cGxlRGVzYyByZXR0dXBkZXNjLCBjaGFyIHByb2tpbmQpOworc3RhdGljIGJvb2wgdGFyZ2V0 X2VudHJ5X2hhc19jb21wYXRpYmxlX3R5cGUoVGFyZ2V0RW50cnkgKnRsZSwgT2lkIHJlc190eXBl LCBpbnQzMiByZXNfdHlwbW9kKTsKKworLyoKKyAqIEZpbGwgYXJyYXkgb2YgYXJndW1lbnRzIHdp dGggYWN0dWFsIGZ1bmN0aW9uIGFyZ3VtZW50IHR5cGVzIG9pZHMKKyAqLworc3RhdGljIHZvaWQK K2NvbXB1dGVfYXJndW1lbnRfdHlwZXMoT2lkICphcmdPaWRWZWN0LCBGb3JtX3BnX3Byb2MgcHJv Y2VkdXJlU3RydWN0LCBOb2RlICpjYWxsX2V4cHIpCit7CisJaW50CQkJYXJnbnVtOworCWludAkJ CW5hcmdzOworCisJbmFyZ3MgPSBwcm9jZWR1cmVTdHJ1Y3QtPnByb25hcmdzOworCWlmIChuYXJn cyA+IDApCisJeworCQltZW1jcHkoYXJnT2lkVmVjdCwKKwkJCSAgIHByb2NlZHVyZVN0cnVjdC0+ cHJvYXJndHlwZXMudmFsdWVzLAorCQkJICAgbmFyZ3MgKiBzaXplb2YoT2lkKSk7CisKKwkJZm9y IChhcmdudW0gPSAwOyBhcmdudW0gPCBuYXJnczsgYXJnbnVtKyspCisJCXsKKwkJCU9pZAkJCWFy Z3R5cGUgPSBhcmdPaWRWZWN0W2FyZ251bV07CisKKwkJCWlmIChJc1BvbHltb3JwaGljVHlwZShh cmd0eXBlKSkKKwkJCXsKKwkJCQlhcmd0eXBlID0gZ2V0X2NhbGxfZXhwcl9hcmd0eXBlKGNhbGxf ZXhwciwgYXJnbnVtKTsKKwkJCQlpZiAoYXJndHlwZSA9PSBJbnZhbGlkT2lkKQorCQkJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFUQ0gpLAor CQkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBkZXRlcm1pbmUgYWN0dWFsIHR5cGUgb2YgYXJndW1l bnQgZGVjbGFyZWQgJXMiLAorCQkJCQkJCQkJZm9ybWF0X3R5cGVfYmUoYXJnT2lkVmVjdFthcmdu dW1dKSkpKTsKKwkJCQlhcmdPaWRWZWN0W2FyZ251bV0gPSBhcmd0eXBlOworCQkJfQorCQl9CisJ fQorfQogCiAvKgogICogUHJlcGFyZSB0aGUgU1FMRnVuY3Rpb25QYXJzZUluZm8gc3RydWN0IGZv ciBwYXJzaW5nIGEgU1FMIGZ1bmN0aW9uIGJvZHkKQEAgLTE5NiwzMSArMzE1LDggQEAgcHJlcGFy ZV9zcWxfZm5fcGFyc2VfaW5mbyhIZWFwVHVwbGUgcHJvY2VkdXJlVHVwbGUsCiAJcGluZm8tPm5h cmdzID0gbmFyZ3MgPSBwcm9jZWR1cmVTdHJ1Y3QtPnByb25hcmdzOwogCWlmIChuYXJncyA+IDAp CiAJewotCQlPaWQJCSAgICphcmdPaWRWZWN0OwotCQlpbnQJCQlhcmdudW07Ci0KLQkJYXJnT2lk VmVjdCA9IChPaWQgKikgcGFsbG9jKG5hcmdzICogc2l6ZW9mKE9pZCkpOwotCQltZW1jcHkoYXJn T2lkVmVjdCwKLQkJCSAgIHByb2NlZHVyZVN0cnVjdC0+cHJvYXJndHlwZXMudmFsdWVzLAotCQkJ ICAgbmFyZ3MgKiBzaXplb2YoT2lkKSk7Ci0KLQkJZm9yIChhcmdudW0gPSAwOyBhcmdudW0gPCBu YXJnczsgYXJnbnVtKyspCi0JCXsKLQkJCU9pZAkJCWFyZ3R5cGUgPSBhcmdPaWRWZWN0W2FyZ251 bV07Ci0KLQkJCWlmIChJc1BvbHltb3JwaGljVHlwZShhcmd0eXBlKSkKLQkJCXsKLQkJCQlhcmd0 eXBlID0gZ2V0X2NhbGxfZXhwcl9hcmd0eXBlKGNhbGxfZXhwciwgYXJnbnVtKTsKLQkJCQlpZiAo YXJndHlwZSA9PSBJbnZhbGlkT2lkKQotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCShlcnJj b2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFUQ0gpLAotCQkJCQkJCSBlcnJtc2coImNvdWxkIG5v dCBkZXRlcm1pbmUgYWN0dWFsIHR5cGUgb2YgYXJndW1lbnQgZGVjbGFyZWQgJXMiLAotCQkJCQkJ CQkJZm9ybWF0X3R5cGVfYmUoYXJnT2lkVmVjdFthcmdudW1dKSkpKTsKLQkJCQlhcmdPaWRWZWN0 W2FyZ251bV0gPSBhcmd0eXBlOwotCQkJfQotCQl9Ci0KLQkJcGluZm8tPmFyZ3R5cGVzID0gYXJn T2lkVmVjdDsKKwkJcGluZm8tPmFyZ3R5cGVzID0gKE9pZCAqKSBwYWxsb2MobmFyZ3MgKiBzaXpl b2YoT2lkKSk7CisJCWNvbXB1dGVfYXJndW1lbnRfdHlwZXMocGluZm8tPmFyZ3R5cGVzLCBwcm9j ZWR1cmVTdHJ1Y3QsIGNhbGxfZXhwcik7CiAJfQogCiAJLyoKQEAgLTQ1Nyw0OSArNTUzLDU2IEBA IHNxbF9mbl9yZXNvbHZlX3BhcmFtX25hbWUoU1FMRnVuY3Rpb25QYXJzZUluZm9QdHIgcGluZm8s CiAvKgogICogU2V0IHVwIHRoZSBwZXItcXVlcnkgZXhlY3V0aW9uX3N0YXRlIHJlY29yZHMgZm9y IGEgU1FMIGZ1bmN0aW9uLgogICoKLSAqIFRoZSBpbnB1dCBpcyBhIExpc3Qgb2YgTGlzdHMgb2Yg cGFyc2VkIGFuZCByZXdyaXR0ZW4sIGJ1dCBub3QgcGxhbm5lZCwKLSAqIHF1ZXJ5dHJlZXMuICBU aGUgc3VibGlzdCBzdHJ1Y3R1cmUgZGVub3RlcyB0aGUgb3JpZ2luYWwgcXVlcnkgYm91bmRhcmll cy4KKyAqIFRoZSBpbnB1dCBpcyBhIHNxbCBmdW5jdGlvbiBjYWNoZSByZWNvcmQgYW5kIGEgZmxh ZyB3aGljaCBzcGVjaWZpZXMKKyAqIGlmIGxhenkgZXZhbHVhdGlvbiBpcyBhbGxvd2VkLgogICov CiBzdGF0aWMgTGlzdCAqCi1pbml0X2V4ZWN1dGlvbl9zdGF0ZShMaXN0ICpxdWVyeVRyZWVfbGlz dCwKLQkJCQkJIFNRTEZ1bmN0aW9uQ2FjaGVQdHIgZmNhY2hlLAoraW5pdF9leGVjdXRpb25fc3Rh dGUoU1FMRnVuY3Rpb25DYWNoZVB0ciBmY2FjaGUsCiAJCQkJCSBib29sIGxhenlFdmFsT0spCiB7 CiAJTGlzdAkgICAqZXNsaXN0ID0gTklMOworCUxpc3QJICAgKmNwbGFuX2xpc3QgPSBOSUw7CiAJ ZXhlY3V0aW9uX3N0YXRlICpsYXN0dGFnZXMgPSBOVUxMOwogCUxpc3RDZWxsICAgKmxjMTsKKwlN ZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwkvKgorCSAqIEludmFsaWRhdGUgZnVuY19zdGF0 ZSBwcmlvciB0byByZXNldHRpbmcgLSBvdGhlcndpc2UgZXJyb3IgY2FsbGJhY2sgY2FuCisJICog YWNjZXNzIGl0CisJICovCisJZmNhY2hlLT5mdW5jX3N0YXRlID0gTklMOworCU1lbW9yeUNvbnRl eHRSZXNldChmY2FjaGUtPnBsYW5uaW5nX2NvbnRleHQpOworCisJb2xkY29udGV4dCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyhmY2FjaGUtPnBsYW5uaW5nX2NvbnRleHQpOwogCi0JZm9yZWFjaChs YzEsIHF1ZXJ5VHJlZV9saXN0KQorCWZvcmVhY2gobGMxLCBmY2FjaGUtPnBsYW5zb3VyY2VfbGlz dCkKIAl7Ci0JCUxpc3QJICAgKnF0bGlzdCA9IGxmaXJzdF9ub2RlKExpc3QsIGxjMSk7CisJCUNh Y2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UgPSAoQ2FjaGVkUGxhblNvdXJjZSAqKSBsZmlyc3Qo bGMxKTsKIAkJZXhlY3V0aW9uX3N0YXRlICpmaXJzdGVzID0gTlVMTDsKIAkJZXhlY3V0aW9uX3N0 YXRlICpwcmV2ZXMgPSBOVUxMOwogCQlMaXN0Q2VsbCAgICpsYzI7CisJCUNhY2hlZFBsYW4gKmNw bGFuOworCisJCS8qIFNhdmUgc3RhdGVtZW50IG51bWJlciBmb3IgZXJyb3IgcmVwb3J0aW5nICov CisJCWZjYWNoZS0+cGxhbm5pbmdfc3RtdF9udW1iZXIgPSBmb3JlYWNoX2N1cnJlbnRfaW5kZXgo bGMxKSArIDE7CiAKLQkJZm9yZWFjaChsYzIsIHF0bGlzdCkKKwkJLyoKKwkJICogR2V0IHBsYW4g Zm9yIHRoZSBxdWVyeS4gSWYgcGFyYW1MSSBpcyBzZXQsIHdlIGNhbiBnZXQgY3VzdG9tIHBsYW4K KwkJICovCisJCWNwbGFuID0gR2V0Q2FjaGVkUGxhbihwbGFuc291cmNlLAorCQkJCQkJCSAgZmNh Y2hlLT5wYXJhbUxJLAorCQkJCQkJCSAgcGxhbnNvdXJjZS0+aXNfc2F2ZWQgPyBDdXJyZW50UmVz b3VyY2VPd25lciA6IE5VTEwsCisJCQkJCQkJICBOVUxMKTsKKworCQkvKiBSZWNvcmQgY3BsYW4g aW4gcGxhbiBsaXN0IHRvIGJlIHJlbGVhc2VkIG9uIHJlcGxhbm5pbmcgKi8KKwkJY3BsYW5fbGlz dCA9IGxhcHBlbmQoY3BsYW5fbGlzdCwgY3BsYW4pOworCisJCS8qIEZvciBlYWNoIHBsYW5uZWQg c3RhdGVtZW50IGNyZWF0ZSBleGVjdXRpb24gc3RhdGUgKi8KKwkJZm9yZWFjaChsYzIsIGNwbGFu LT5zdG10X2xpc3QpCiAJCXsKLQkJCVF1ZXJ5CSAgICpxdWVyeVRyZWUgPSBsZmlyc3Rfbm9kZShR dWVyeSwgbGMyKTsKLQkJCVBsYW5uZWRTdG10ICpzdG10OworCQkJUGxhbm5lZFN0bXQgKnN0bXQg PSBsZmlyc3Rfbm9kZShQbGFubmVkU3RtdCwgbGMyKTsKIAkJCWV4ZWN1dGlvbl9zdGF0ZSAqbmV3 ZXM7CiAKLQkJCS8qIFBsYW4gdGhlIHF1ZXJ5IGlmIG5lZWRlZCAqLwotCQkJaWYgKHF1ZXJ5VHJl ZS0+Y29tbWFuZFR5cGUgPT0gQ01EX1VUSUxJVFkpCi0JCQl7Ci0JCQkJLyogVXRpbGl0eSBjb21t YW5kcyByZXF1aXJlIG5vIHBsYW5uaW5nLiAqLwotCQkJCXN0bXQgPSBtYWtlTm9kZShQbGFubmVk U3RtdCk7Ci0JCQkJc3RtdC0+Y29tbWFuZFR5cGUgPSBDTURfVVRJTElUWTsKLQkJCQlzdG10LT5j YW5TZXRUYWcgPSBxdWVyeVRyZWUtPmNhblNldFRhZzsKLQkJCQlzdG10LT51dGlsaXR5U3RtdCA9 IHF1ZXJ5VHJlZS0+dXRpbGl0eVN0bXQ7Ci0JCQkJc3RtdC0+c3RtdF9sb2NhdGlvbiA9IHF1ZXJ5 VHJlZS0+c3RtdF9sb2NhdGlvbjsKLQkJCQlzdG10LT5zdG10X2xlbiA9IHF1ZXJ5VHJlZS0+c3Rt dF9sZW47Ci0JCQkJc3RtdC0+cXVlcnlJZCA9IHF1ZXJ5VHJlZS0+cXVlcnlJZDsKLQkJCX0KLQkJ CWVsc2UKLQkJCQlzdG10ID0gcGdfcGxhbl9xdWVyeShxdWVyeVRyZWUsCi0JCQkJCQkJCQkgZmNh Y2hlLT5zcmMsCi0JCQkJCQkJCQkgQ1VSU09SX09QVF9QQVJBTExFTF9PSywKLQkJCQkJCQkJCSBO VUxMKTsKLQogCQkJLyoKIAkJCSAqIFByZWNoZWNrIGFsbCBjb21tYW5kcyBmb3IgdmFsaWRpdHkg aW4gYSBmdW5jdGlvbi4gIFRoaXMgc2hvdWxkCiAJCQkgKiBnZW5lcmFsbHkgbWF0Y2ggdGhlIHJl c3RyaWN0aW9ucyBzcGkuYyBhcHBsaWVzLgpAQCAtNTQxLDcgKzY0NCw3IEBAIGluaXRfZXhlY3V0 aW9uX3N0YXRlKExpc3QgKnF1ZXJ5VHJlZV9saXN0LAogCQkJbmV3ZXMtPnN0bXQgPSBzdG10Owog CQkJbmV3ZXMtPnFkID0gTlVMTDsKIAotCQkJaWYgKHF1ZXJ5VHJlZS0+Y2FuU2V0VGFnKQorCQkJ aWYgKHN0bXQtPmNhblNldFRhZykKIAkJCQlsYXN0dGFnZXMgPSBuZXdlczsKIAogCQkJcHJldmVz ID0gbmV3ZXM7CkBAIC01NzMsMTQgKzY3NiwyOTAgQEAgaW5pdF9leGVjdXRpb25fc3RhdGUoTGlz dCAqcXVlcnlUcmVlX2xpc3QsCiAJCQlmY2FjaGUtPmxhenlFdmFsID0gbGFzdHRhZ2VzLT5sYXp5 RXZhbCA9IHRydWU7CiAJfQogCisJLyogV2UndmUgZmluaXNoZWQgcGxhbm5pbmcsIHJlc2V0IHBs YW5uaW5nIHN0YXRlbWVudCBudW1iZXIgKi8KKwlmY2FjaGUtPnBsYW5uaW5nX3N0bXRfbnVtYmVy ID0gMDsKKwlmY2FjaGUtPmNwbGFuX2xpc3QgPSBjcGxhbl9saXN0OworCisJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZGNvbnRleHQpOwogCXJldHVybiBlc2xpc3Q7CiB9CiAKKy8qCisgKiBDb21w dXRlIGtleSBmb3Igc2VhcmNoaW5nIHBsYW4gZW50cnkgaW4gYmFja2VuZCBjYWNoZQorICovCitz dGF0aWMgdm9pZAorY29tcHV0ZV9wbGFuX2VudHJ5X2tleShTUUxGdW5jdGlvblBsYW5LZXkgKmhh c2hrZXksIEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBGb3JtX3BnX3Byb2MgcHJvY2VkdXJlU3Ry dWN0KQoreworCU1lbVNldChoYXNoa2V5LCAwLCBzaXplb2YoU1FMRnVuY3Rpb25QbGFuS2V5KSk7 CisKKwloYXNoa2V5LT5mbl9vaWQgPSBmY2luZm8tPmZsaW5mby0+Zm5fb2lkOworCisJLyogc2V0 IGlucHV0IGNvbGxhdGlvbiwgaWYga25vd24gKi8KKwloYXNoa2V5LT5pbnB1dENvbGxhdGlvbiA9 IGZjaW5mby0+Zm5jb2xsYXRpb247CisKKwlpZiAocHJvY2VkdXJlU3RydWN0LT5wcm9uYXJncyA+ IDApCisJeworCQkvKiBnZXQgdGhlIGFyZ3VtZW50IHR5cGVzICovCisJCWNvbXB1dGVfYXJndW1l bnRfdHlwZXMoaGFzaGtleS0+YXJndHlwZXMsIHByb2NlZHVyZVN0cnVjdCwgZmNpbmZvLT5mbGlu Zm8tPmZuX2V4cHIpOworCX0KK30KKworLyoKKyAqIEdldCBjYWNoZWQgcGxhbiBieSBwcmUtY29t cHV0ZWQga2V5CisgKi8KK3N0YXRpYyBTUUxGdW5jdGlvblBsYW5FbnRyeSAqCitnZXRfY2FjaGVk X3BsYW5fZW50cnkoU1FMRnVuY3Rpb25QbGFuS2V5ICpoYXNoa2V5KQoreworCVNRTEZ1bmN0aW9u UGxhbkVudHJ5ICpwbGFuX2VudHJ5ID0gTlVMTDsKKworCWlmIChzcWxfcGxhbl9jYWNoZV9odGFi KQorCXsKKwkJcGxhbl9lbnRyeSA9IChTUUxGdW5jdGlvblBsYW5FbnRyeSAqKSBoYXNoX3NlYXJj aChzcWxfcGxhbl9jYWNoZV9odGFiLAorCQkJCQkJCQkJCQkJCQkgIGhhc2hrZXksCisJCQkJCQkJ CQkJCQkJCSAgSEFTSF9GSU5ELAorCQkJCQkJCQkJCQkJCQkgIE5VTEwpOworCX0KKwlyZXR1cm4g cGxhbl9lbnRyeTsKK30KKworLyoKKyAqIFNhdmUgZnVuY3Rpb24gZXhlY3V0aW9uIHBsYW4gaW4g Y2FjaGUKKyAqLworc3RhdGljIHZvaWQKK3NhdmVfY2FjaGVkX3BsYW5fZW50cnkoU1FMRnVuY3Rp b25QbGFuS2V5ICpoYXNoa2V5LCBIZWFwVHVwbGUgcHJvY2VkdXJlVHVwbGUsIExpc3QgKnBsYW5z b3VyY2VfbGlzdCwgTGlzdCAqcmVzdWx0X3RsaXN0LCBib29sIHJldHVybnNUdXBsZSwgU1FMRnVu Y3Rpb25QYXJzZUluZm9QdHIgcGluZm8sIE1lbW9yeUNvbnRleHQgYWxpYW5hYmxlX2NvbnRleHQp Cit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCU1lbW9yeUNvbnRleHQgZW50cnlfY29u dGV4dDsKKwlTUUxGdW5jdGlvblBsYW5FbnRyeSAqZW50cnk7CisJTGlzdENlbGwgICAqbGM7CisJ Ym9vbAkJZm91bmQ7CisKKwlpZiAoc3FsX3BsYW5fY2FjaGVfaHRhYiA9PSBOVUxMKQorCXsKKwkJ SEFTSENUTAkJY3RsOworCisJCS8qIEluaXRpYWxpemUgU1FMIGZ1bmN0aW9ucyBwbGFuIGNhY2hl IGlmIGl0IGRvZXNuJ3QgZXhpc3QgKi8KKwkJY3RsLmtleXNpemUgPSBzaXplb2YoU1FMRnVuY3Rp b25QbGFuS2V5KTsKKwkJY3RsLmVudHJ5c2l6ZSA9IHNpemVvZihTUUxGdW5jdGlvblBsYW5FbnRy eSk7CisJCWN0bC5oY3h0ID0gQ2FjaGVNZW1vcnlDb250ZXh0OworCisJCXNxbF9wbGFuX2NhY2hl X2h0YWIgPSBoYXNoX2NyZWF0ZSgiU1FMIGZ1bmN0aW9uIHBsYW4gaGFzaCIsCisJCQkJCQkJCQkJ ICAxMDAgLyogYXJiaXRyYXJ5IGluaXRpYWwgc2l6ZSAqLyAsCisJCQkJCQkJCQkJICAmY3RsLAor CQkJCQkJCQkJCSAgSEFTSF9FTEVNIHwgSEFTSF9CTE9CUyB8IEhBU0hfQ09OVEVYVCk7CisJfQor CisJZW50cnkgPSAoU1FMRnVuY3Rpb25QbGFuRW50cnkgKikgaGFzaF9zZWFyY2goc3FsX3BsYW5f Y2FjaGVfaHRhYiwKKwkJCQkJCQkJCQkJCSBoYXNoa2V5LAorCQkJCQkJCQkJCQkJIEhBU0hfRU5U RVIsCisJCQkJCQkJCQkJCQkgJmZvdW5kKTsKKworCS8qCisJICogSW4gcHJhY3RpY2UsIHNob3Vs ZG4ndCBoYXBwZW4sIGFzIGluIGluaXRfc3FsX2ZjYWNoZSgpIGlmIHdlIGZpbmQKKwkgKiBlbnRy eSwgd2hpY2ggY2FuJ3QgYmUgdXNlZCwgaXQncyByZW1vdmVkIGZyb20gY2FjaGUuCisJICovCisJ aWYgKGZvdW5kKQorCQllbG9nKFdBUk5JTkcsICJ0cnlpbmcgdG8gaW5zZXJ0IGEgZnVuY3Rpb24g dGhhdCBhbHJlYWR5IGV4aXN0cyIpOworCisJLyoKKwkgKiBDcmVhdGUgbG9uZy1saXZlZCBtZW1v cnkgY29udGV4dCB0aGF0IGhvbGRzIGVudHJ5IGZpZWxkcworCSAqLworCWVudHJ5X2NvbnRleHQg PSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ2FjaGVNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCSAg IlNRTCBmdW5jdGlvbiBwbGFuIGVudHJ5IGNvbnRleHQiLAorCQkJCQkJCQkJCSAgQUxMT0NTRVRf REVGQVVMVF9TSVpFUyk7CisKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGVu dHJ5X2NvbnRleHQpOworCisJLyogRmlsbCBlbnRyeSAqLworCW1lbWNweSgmZW50cnktPmtleSwg aGFzaGtleSwgc2l6ZW9mKFNRTEZ1bmN0aW9uUGxhbktleSkpOworCisJZW50cnktPmVudHJ5X2N0 eCA9IGVudHJ5X2NvbnRleHQ7CisKKwkvKiBTb21lIGdlbmVyYXRlZCBkYXRhLCBsaWtlIHBpbmZv LCBzaG91bGQgYmUgcmVwYXJlbnRlZCAqLworCU1lbW9yeUNvbnRleHRTZXRQYXJlbnQoYWxpYW5h YmxlX2NvbnRleHQsIGVudHJ5LT5lbnRyeV9jdHgpOworCisJZW50cnktPnBpbmZvID0gcGluZm87 CisKKwkvKiBQcmVzZXJ2ZSBsaXN0IGluIGxvbmctbGl2ZWQgY29udGV4dCAqLworCWlmIChwbGFu c291cmNlX2xpc3QpCisJCWVudHJ5LT5wbGFuc291cmNlX2xpc3QgPSBsaXN0X2NvcHkocGxhbnNv dXJjZV9saXN0KTsKKwllbHNlCisJCWVudHJ5LT5wbGFuc291cmNlX2xpc3QgPSBOVUxMOworCisJ ZW50cnktPnJlc3VsdF90bGlzdCA9IGNvcHlPYmplY3QocmVzdWx0X3RsaXN0KTsKKworCWVudHJ5 LT5yZXR1cm5zVHVwbGUgPSByZXR1cm5zVHVwbGU7CisKKwkvKiBGaWxsIGZpZWxkcyBuZWVkZWQg dG8gaW52YWxpZGF0ZSBjYWNoZSBlbnRyeSAqLworCWVudHJ5LT5mbl94bWluID0gSGVhcFR1cGxl SGVhZGVyR2V0UmF3WG1pbihwcm9jZWR1cmVUdXBsZS0+dF9kYXRhKTsKKwllbnRyeS0+Zm5fdGlk ID0gcHJvY2VkdXJlVHVwbGUtPnRfc2VsZjsKKworCS8qIFNhdmUgcGxhbnMgKi8KKwlmb3JlYWNo KGxjLCBlbnRyeS0+cGxhbnNvdXJjZV9saXN0KQorCXsKKwkJQ2FjaGVkUGxhblNvdXJjZSAqcGxh bnNvdXJjZSA9IChDYWNoZWRQbGFuU291cmNlICopIGxmaXJzdChsYyk7CisKKwkJU2F2ZUNhY2hl ZFBsYW4ocGxhbnNvdXJjZSk7CisJfQorCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0 KTsKKworfQorCisvKgorICogUmVtb3ZlIHBsYW4gZnJvbSBjYWNoZQorICoKKyAqIFdlIGRvbid0 IGNhcmUgbXVjaCBhYm91dCBwbGFuIHJldmFsaWRhdGlvbnMsIGhhcHBlbmluZyBkdXJpbmcKKyAq IHJlY3Vyc2l2ZSBjYWxscywgYXMgY29uc2lkZXIgdGhpcyBpbXBvc3NpYmxlIGR1ZSB0byB0aGUg ZmFjdAorICogdGhhdCBTUUwgZnVuY3Rpb24gZXhlY3V0aW9uIGlzIGF0b21pYy4gSWYgZnVuY3Rp b24gZGVmaW5pdGlvbiBpcworICogY2hhbmdlZCBkdXJpbmcgU1FMIGZ1bmN0aW9uIGV4ZWN1dGlv biwgYmFja2VuZCwgaW4gd2hpY2ggZnVuY3Rpb24KKyAqIGlzIGV4ZWN1dGVkLCB3aWxsIG5vdCBz ZWUgdGhlIGVmZmVjdHMgb2YgdGhlIGNoYW5nZSB3aGlsZQorICogZnVuY3Rpb24gaXMgZXhlY3V0 aW5nLgorICovCitzdGF0aWMgdm9pZAorZGVsZXRlX2NhY2hlZF9wbGFuX2VudHJ5KFNRTEZ1bmN0 aW9uUGxhbkVudHJ5ICplbnRyeSkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlib29sCQlmb3VuZDsK KworCS8qIFJlbGVhc2UgcGxhbnMgKi8KKwlmb3JlYWNoKGxjLCBlbnRyeS0+cGxhbnNvdXJjZV9s aXN0KQorCXsKKwkJQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSA9IChDYWNoZWRQbGFuU291 cmNlICopIGxmaXJzdChsYyk7CisKKwkJRHJvcENhY2hlZFBsYW4ocGxhbnNvdXJjZSk7CisJfQor CU1lbW9yeUNvbnRleHREZWxldGUoZW50cnktPmVudHJ5X2N0eCk7CisKKwloYXNoX3NlYXJjaChz cWxfcGxhbl9jYWNoZV9odGFiLCAmZW50cnktPmtleSwgSEFTSF9SRU1PVkUsICZmb3VuZCk7CisJ QXNzZXJ0KGZvdW5kKTsKK30KKworLyoKKyAqIERldGVybWluZSBpZiBUYXJnZXRFbnRyeSBpcyBj b21wYXRpYmxlIHRvIHNwZWNpZmllZCB0eXBlCisgKi8KK3N0YXRpYyBib29sCit0YXJnZXRfZW50 cnlfaGFzX2NvbXBhdGlibGVfdHlwZShUYXJnZXRFbnRyeSAqdGxlLCBPaWQgcmVzX3R5cGUsIGlu dDMyIHJlc190eXBtb2QpCit7CisJVmFyCQkgICAqdmFyOworCU5vZGUJICAgKmNhc3RfcmVzdWx0 OworCWJvb2wJCXJlc3VsdCA9IHRydWU7CisKKwkvKiBBcmUgdHlwZXMgZXF1aXZhbGVudD8gKi8K Kwl2YXIgPSBtYWtlVmFyRnJvbVRhcmdldEVudHJ5KDEsIHRsZSk7CisKKwljYXN0X3Jlc3VsdCA9 IGNvZXJjZV90b190YXJnZXRfdHlwZShOVUxMLAorCQkJCQkJCQkJCShOb2RlICopIHZhciwKKwkJ CQkJCQkJCQl2YXItPnZhcnR5cGUsCisJCQkJCQkJCQkJcmVzX3R5cGUsIHJlc190eXBtb2QsCisJ CQkJCQkJCQkJQ09FUkNJT05fQVNTSUdOTUVOVCwKKwkJCQkJCQkJCQlDT0VSQ0VfSU1QTElDSVRf Q0FTVCwKKwkJCQkJCQkJCQktMSk7CisKKwkvKgorCSAqIElmIGNvbnZlcnNpb24gaXMgbm90IHBv c3NpYmxlIG9yIHJlcXVpcmVzIGEgY2FzdCwgZW50cnkgaXMgaW5jb21wYXRpYmxlCisJICogd2l0 aCB0aGUgdHlwZS4KKwkgKi8KKwlpZiAoY2FzdF9yZXN1bHQgPT0gTlVMTCB8fCBjYXN0X3Jlc3Vs dCAhPSAoTm9kZSAqKSB2YXIpCisJCXJlc3VsdCA9IGZhbHNlOworCisJaWYgKGNhc3RfcmVzdWx0 ICYmIGNhc3RfcmVzdWx0ICE9IChOb2RlICopIHZhcikKKwkJcGZyZWUoY2FzdF9yZXN1bHQpOwor CXBmcmVlKHZhcik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ2hlY2sgaWYgcmVz dWx0IHRsaXN0IHdvdWxkIGJlIGNoYW5nZWQgYnkgY2hlY2tfc3FsX2ZuX3JldHZhbCgpCisgKi8K K3N0YXRpYyBib29sCitjaGVja19zcWxfZm5fcmV0dmFsX21hdGNoZXMoTGlzdCAqdGxpc3QsIE9p ZCByZXR0eXBlLCBUdXBsZURlc2MgcmV0dHVwZGVzYywgY2hhciBwcm9raW5kKQoreworCWNoYXIJ CWZuX3R5cHR5cGU7CisJaW50CQkJdGxpc3RsZW47CisKKwkvKgorCSAqIENvdW50IHRoZSBub24t anVuayBlbnRyaWVzIGluIHRoZSByZXN1bHQgdGFyZ2V0bGlzdC4KKwkgKi8KKwl0bGlzdGxlbiA9 IEV4ZWNDbGVhblRhcmdldExpc3RMZW5ndGgodGxpc3QpOworCisJZm5fdHlwdHlwZSA9IGdldF90 eXB0eXBlKHJldHR5cGUpOworCisJaWYgKGZuX3R5cHR5cGUgPT0gVFlQVFlQRV9CQVNFIHx8CisJ CWZuX3R5cHR5cGUgPT0gVFlQVFlQRV9ET01BSU4gfHwKKwkJZm5fdHlwdHlwZSA9PSBUWVBUWVBF X0VOVU0gfHwKKwkJZm5fdHlwdHlwZSA9PSBUWVBUWVBFX1JBTkdFIHx8CisJCWZuX3R5cHR5cGUg PT0gVFlQVFlQRV9NVUxUSVJBTkdFKQorCXsKKwkJVGFyZ2V0RW50cnkgKnRsZTsKKworCQkvKiBT b21ldGhpbmcgdW5leHBlY3RlZCwgaW52YWxpZGF0ZSBjYWNoZWQgcGxhbiAqLworCQlpZiAodGxp c3RsZW4gIT0gMSkKKwkJCXJldHVybiBmYWxzZTsKKworCQl0bGUgPSAoVGFyZ2V0RW50cnkgKikg bGluaXRpYWwodGxpc3QpOworCisJCXJldHVybiB0YXJnZXRfZW50cnlfaGFzX2NvbXBhdGlibGVf dHlwZSh0bGUsIHJldHR5cGUsIC0xKTsKKwl9CisJZWxzZSBpZiAoZm5fdHlwdHlwZSA9PSBUWVBU WVBFX0NPTVBPU0lURSB8fCByZXR0eXBlID09IFJFQ09SRE9JRCkKKwl7CisJCUxpc3RDZWxsICAg KmxjOworCQlpbnQJCQljb2xpbmRleDsKKwkJaW50CQkJdHVwbmF0dHM7CisKKwkJaWYgKHRsaXN0 bGVuID09IDEgJiYgcHJva2luZCAhPSBQUk9LSU5EX1BST0NFRFVSRSkKKwkJeworCQkJVGFyZ2V0 RW50cnkgKnRsZSA9IChUYXJnZXRFbnRyeSAqKSBsaW5pdGlhbCh0bGlzdCk7CisKKwkJCXJldHVy biB0YXJnZXRfZW50cnlfaGFzX2NvbXBhdGlibGVfdHlwZSh0bGUsIHJldHR5cGUsIC0xKTsKKwkJ fQorCisJCS8qIFdlIGNvbnNpZGVyIHJlc3VsdHMgY29tbnBhdGlibGUgaWYgdGhlcmUncyBubyB0 dXBsZWRlc2MgKi8KKwkJaWYgKHJldHR1cGRlc2MgPT0gTlVMTCkKKwkJCXJldHVybiB0cnVlOwor CisJCS8qCisJCSAqIFZlcmlmeSB0aGF0IHNhdmVkIHRhcmdldGxpc3QgbWF0Y2hlcyB0aGUgcmV0 dXJuIHR1cGxlIHR5cGUuCisJCSAqLworCQl0dXBuYXR0cyA9IHJldHR1cGRlc2MtPm5hdHRzOwor CQljb2xpbmRleCA9IDA7CisJCWZvcmVhY2gobGMsIHRsaXN0KQorCQl7CisJCQlUYXJnZXRFbnRy eSAqdGxlID0gKFRhcmdldEVudHJ5ICopIGxmaXJzdChsYyk7CisJCQlGb3JtX3BnX2F0dHJpYnV0 ZSBhdHRyOworCisJCQkvKiByZXNqdW5rIGNvbHVtbnMgY2FuIHNpbXBseSBiZSBpZ25vcmVkICov CisJCQlpZiAodGxlLT5yZXNqdW5rKQorCQkJCWNvbnRpbnVlOworCisJCQlkbworCQkJeworCQkJ CWNvbGluZGV4Kys7CisJCQkJaWYgKGNvbGluZGV4ID4gdHVwbmF0dHMpCisJCQkJCXJldHVybiBm YWxzZTsKKworCQkJCWF0dHIgPSBUdXBsZURlc2NBdHRyKHJldHR1cGRlc2MsIGNvbGluZGV4IC0g MSk7CisJCQl9IHdoaWxlIChhdHRyLT5hdHRpc2Ryb3BwZWQpOworCisJCQlpZiAoIXRhcmdldF9l bnRyeV9oYXNfY29tcGF0aWJsZV90eXBlKHRsZSwgYXR0ci0+YXR0dHlwaWQsIGF0dHItPmF0dHR5 cG1vZCkpCisJCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLyogcmVtYWluaW5nIGNvbHVtbnMg aW4gcmV0dHVwZGVzYyBoYWQgYmV0dGVyIGFsbCBiZSBkcm9wcGVkICovCisJCWZvciAoY29saW5k ZXgrKzsgY29saW5kZXggPD0gdHVwbmF0dHM7IGNvbGluZGV4KyspCisJCXsKKwkJCWlmICghVHVw bGVEZXNjQ29tcGFjdEF0dHIocmV0dHVwZGVzYywgY29saW5kZXggLSAxKS0+YXR0aXNkcm9wcGVk KQorCQkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoKICAq IEluaXRpYWxpemUgdGhlIFNRTEZ1bmN0aW9uQ2FjaGUgZm9yIGEgU1FMIGZ1bmN0aW9uCiAgKi8K IHN0YXRpYyB2b2lkCi1pbml0X3NxbF9mY2FjaGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIE9p ZCBjb2xsYXRpb24sIGJvb2wgbGF6eUV2YWxPSykKK2luaXRfc3FsX2ZjYWNoZShGdW5jdGlvbkNh bGxJbmZvIGZjaW5mbywgT2lkIGNvbGxhdGlvbiwgYm9vbCAqbGF6eUV2YWxPSykKIHsKIAlGbWdy SW5mbyAgICpmaW5mbyA9IGZjaW5mby0+ZmxpbmZvOwogCU9pZAkJCWZvaWQgPSBmaW5mby0+Zm5f b2lkOwpAQCAtNTk2LDYgKzk3NSwxMSBAQCBpbml0X3NxbF9mY2FjaGUoRnVuY3Rpb25DYWxsSW5m byBmY2luZm8sIE9pZCBjb2xsYXRpb24sIGJvb2wgbGF6eUV2YWxPSykKIAlMaXN0Q2VsbCAgICps YzsKIAlEYXR1bQkJdG1wOwogCWJvb2wJCWlzTnVsbDsKKwlMaXN0CSAgICpwbGFuc291cmNlX2xp c3Q7CisJU1FMRnVuY3Rpb25QbGFuRW50cnkgKmNhY2hlZF9wbGFuX2VudHJ5ID0gTlVMTDsKKwlT UUxGdW5jdGlvblBsYW5LZXkgcGxhbl9jYWNoZV9lbnRyeV9rZXk7CisJYm9vbAkJdXNlX3BsYW5f Y2FjaGU7CisJYm9vbAkJcGxhbl9jYWNoZV9lbnRyeV92YWxpZDsKIAogCS8qCiAJICogQ3JlYXRl IG1lbW9yeSBjb250ZXh0IHRoYXQgaG9sZHMgYWxsIHRoZSBTUUxGdW5jdGlvbkNhY2hlIGRhdGEu ICBJdApAQCAtNjE0LDYgKzk5OCwxMCBAQCBpbml0X3NxbF9mY2FjaGUoRnVuY3Rpb25DYWxsSW5m byBmY2luZm8sIE9pZCBjb2xsYXRpb24sIGJvb2wgbGF6eUV2YWxPSykKIAkgKi8KIAlmY2FjaGUg PSAoU1FMRnVuY3Rpb25DYWNoZVB0cikgcGFsbG9jMChzaXplb2YoU1FMRnVuY3Rpb25DYWNoZSkp OwogCWZjYWNoZS0+ZmNvbnRleHQgPSBmY29udGV4dDsKKwkvKiBDcmVhdGUgc2VwYXJhdGUgY29u dGV4dCBmb3IgcGxhbm5pbmcgKi8KKwlmY2FjaGUtPnBsYW5uaW5nX2NvbnRleHQgPSBBbGxvY1Nl dENvbnRleHRDcmVhdGUoZmNhY2hlLT5mY29udGV4dCwKKwkJCQkJCQkJCQkJCQkgIlNRTCBsYW5n dWFnZSBmdW5jdGlvbnMgcGxhbm5pbmcgY29udGV4dCIsCisJCQkJCQkJCQkJCQkJIEFMTE9DU0VU X1NNQUxMX1NJWkVTKTsKIAlmaW5mby0+Zm5fZXh0cmEgPSBmY2FjaGU7CiAKIAkvKgpAQCAtNjQ5 LDE1ICsxMDM3LDYgQEAgaW5pdF9zcWxfZmNhY2hlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBP aWQgY29sbGF0aW9uLCBib29sIGxhenlFdmFsT0spCiAJZmNhY2hlLT5yZWFkb25seV9mdW5jID0K IAkJKHByb2NlZHVyZVN0cnVjdC0+cHJvdm9sYXRpbGUgIT0gUFJPVk9MQVRJTEVfVk9MQVRJTEUp OwogCi0JLyoKLQkgKiBXZSBuZWVkIHRoZSBhY3R1YWwgYXJndW1lbnQgdHlwZXMgdG8gcGFzcyB0 byB0aGUgcGFyc2VyLiAgQWxzbyBtYWtlCi0JICogc3VyZSB0aGF0IHBhcmFtZXRlciBzeW1ib2xz IGFyZSBjb25zaWRlcmVkIHRvIGhhdmUgdGhlIGZ1bmN0aW9uJ3MKLQkgKiByZXNvbHZlZCBpbnB1 dCBjb2xsYXRpb24uCi0JICovCi0JZmNhY2hlLT5waW5mbyA9IHByZXBhcmVfc3FsX2ZuX3BhcnNl X2luZm8ocHJvY2VkdXJlVHVwbGUsCi0JCQkJCQkJCQkJCSAgZmluZm8tPmZuX2V4cHIsCi0JCQkJ CQkJCQkJCSAgY29sbGF0aW9uKTsKLQogCS8qCiAJICogQW5kIG9mIGNvdXJzZSB3ZSBuZWVkIHRo ZSBmdW5jdGlvbiBib2R5IHRleHQuCiAJICovCkBAIC02NzAsODYgKzEwNDksMjEwIEBAIGluaXRf c3FsX2ZjYWNoZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgT2lkIGNvbGxhdGlvbiwgYm9vbCBs YXp5RXZhbE9LKQogCQkJCQkJICBBbnVtX3BnX3Byb2NfcHJvc3FsYm9keSwKIAkJCQkJCSAgJmlz TnVsbCk7CiAKKworCXVzZV9wbGFuX2NhY2hlID0gdHJ1ZTsKKwlwbGFuX2NhY2hlX2VudHJ5X3Zh bGlkID0gZmFsc2U7CisKIAkvKgotCSAqIFBhcnNlIGFuZCByZXdyaXRlIHRoZSBxdWVyaWVzIGlu IHRoZSBmdW5jdGlvbiB0ZXh0LiAgVXNlIHN1Ymxpc3RzIHRvCi0JICoga2VlcCB0cmFjayBvZiB0 aGUgb3JpZ2luYWwgcXVlcnkgYm91bmRhcmllcy4KLQkgKgotCSAqIE5vdGU6IHNpbmNlIHBhcnNp bmcgYW5kIHBsYW5uaW5nIGlzIGRvbmUgaW4gZmNvbnRleHQsIHdlIHdpbGwgZ2VuZXJhdGUKLQkg KiBhIGxvdCBvZiBjcnVmdCB0aGF0IGxpdmVzIGFzIGxvbmcgYXMgdGhlIGZjYWNoZSBkb2VzLiAg VGhpcyBpcyBhbm5veWluZwotCSAqIGJ1dCB3ZSdsbCBub3Qgd29ycnkgYWJvdXQgaXQgdW50aWwg dGhlIG1vZHVsZSBpcyByZXdyaXR0ZW4gdG8gdXNlCi0JICogcGxhbmNhY2hlLmMuCisJICogSWYg ZnVuY3Rpb24gaXMgdHJpZ2dlciwgd2UgY2FuIHNlZSBkaWZmZXJlbnQgcm93dHlwZXMgb3IgdHJh bnNpdGlvbgorCSAqIHRhYmxlIG5hbWVzLiAgU28gZG9uJ3QgdXNlIGNhY2hlIGZvciBzdWNoIHBs YW5zLgogCSAqLwotCXF1ZXJ5VHJlZV9saXN0ID0gTklMOwotCWlmICghaXNOdWxsKQotCXsKLQkJ Tm9kZQkgICAqbjsKLQkJTGlzdAkgICAqc3RvcmVkX3F1ZXJ5X2xpc3Q7CisJaWYgKENBTExFRF9B U19UUklHR0VSKGZjaW5mbykgfHwgQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJ dXNlX3BsYW5fY2FjaGUgPSBmYWxzZTsKIAotCQluID0gc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdl dENTdHJpbmcodG1wKSk7Ci0JCWlmIChJc0EobiwgTGlzdCkpCi0JCQlzdG9yZWRfcXVlcnlfbGlz dCA9IGxpbml0aWFsX25vZGUoTGlzdCwgY2FzdE5vZGUoTGlzdCwgbikpOwotCQllbHNlCi0JCQlz dG9yZWRfcXVlcnlfbGlzdCA9IGxpc3RfbWFrZTEobik7CisJLyoKKwkgKiBJZiB3ZSBkZWNpZGVk IHRoYXQgd2UgY2FuIHVzZSBjYWNoZWQgcGxhbnMsIGxvb2t1cCBhbmQgdmVyaWZ5IHNhdmVkCisJ ICogcGxhbgorCSAqLworCWlmICh1c2VfcGxhbl9jYWNoZSkKKwl7CisJCWNvbXB1dGVfcGxhbl9l bnRyeV9rZXkoJnBsYW5fY2FjaGVfZW50cnlfa2V5LCBmY2luZm8sIHByb2NlZHVyZVN0cnVjdCk7 CiAKLQkJZm9yZWFjaChsYywgc3RvcmVkX3F1ZXJ5X2xpc3QpCisJCWNhY2hlZF9wbGFuX2VudHJ5 ID0gZ2V0X2NhY2hlZF9wbGFuX2VudHJ5KCZwbGFuX2NhY2hlX2VudHJ5X2tleSk7CisJCWlmIChj YWNoZWRfcGxhbl9lbnRyeSkKIAkJewotCQkJUXVlcnkJICAgKnBhcnNldHJlZSA9IGxmaXJzdF9u b2RlKFF1ZXJ5LCBsYyk7Ci0JCQlMaXN0CSAgICpxdWVyeVRyZWVfc3VibGlzdDsKLQotCQkJQWNx dWlyZVJld3JpdGVMb2NrcyhwYXJzZXRyZWUsIHRydWUsIGZhbHNlKTsKLQkJCXF1ZXJ5VHJlZV9z dWJsaXN0ID0gcGdfcmV3cml0ZV9xdWVyeShwYXJzZXRyZWUpOwotCQkJcXVlcnlUcmVlX2xpc3Qg PSBsYXBwZW5kKHF1ZXJ5VHJlZV9saXN0LCBxdWVyeVRyZWVfc3VibGlzdCk7CisJCQkvKiBDYW4n dCB1c2UgcGxhbiBlbnRyeSBpZiBmdW5jdGlvbiBkZWZpbml0aW9uIGhhcyBiZWVuIGNoYW5nZWQg Ki8KKwkJCWlmIChjYWNoZWRfcGxhbl9lbnRyeS0+Zm5feG1pbiA9PSBIZWFwVHVwbGVIZWFkZXJH ZXRSYXdYbWluKHByb2NlZHVyZVR1cGxlLT50X2RhdGEpICYmCisJCQkJSXRlbVBvaW50ZXJFcXVh bHMoJmNhY2hlZF9wbGFuX2VudHJ5LT5mbl90aWQsICZwcm9jZWR1cmVUdXBsZS0+dF9zZWxmKSkK KwkJCXsKKwkJCQkvKgorCQkJCSAqIEF2b2lkIHVzaW5nIHBsYW4gaWYgcmV0dXJuZWQgcmVzdWx0 IHR5cGUgZG9lc24ndCBtYXRjaCB0aGUKKwkJCQkgKiBleHBlY3RlZCBvbmUuIGNoZWNrX3NxbF9m bl9yZXR2YWwoKSBpbiB0aGlzIGNhc2Ugd291bGQKKwkJCQkgKiBjaGFuZ2UgcXVlcnkgdG8gbWF0 Y2ggZXhwZWN0ZWQgcmVzdWx0IHR5cGUuIEJ1dCB3ZSd2ZQorCQkJCSAqIGFscmVhZHkgcGxhbm5l ZCBxdWVyeSwgcG9zc2libHkgbW9kaWZpZWQgdG8gbWF0Y2ggYW5vdGhlcgorCQkJCSAqIHJlc3Vs dCB0eXBlLiBTbyBkaXNjYXJkIHRoZSBjYWNoZWQgZW50cnkgYW5kIHJlcGxhbi4KKwkJCQkgKi8K KwkJCQlpZiAoY2hlY2tfc3FsX2ZuX3JldHZhbF9tYXRjaGVzKGNhY2hlZF9wbGFuX2VudHJ5LT5y ZXN1bHRfdGxpc3QsIHJldHR5cGUsIHJldHR1cGRlc2MsIHByb2NlZHVyZVN0cnVjdC0+cHJva2lu ZCkpCisJCQkJCXBsYW5fY2FjaGVfZW50cnlfdmFsaWQgPSB0cnVlOworCQkJfQorCQkJaWYgKCFw bGFuX2NhY2hlX2VudHJ5X3ZhbGlkKQorCQkJCWRlbGV0ZV9jYWNoZWRfcGxhbl9lbnRyeShjYWNo ZWRfcGxhbl9lbnRyeSk7CiAJCX0KIAl9CisKKwkvKgorCSAqIElmIHdlIGhhdmUgdmFsaWQgc2F2 ZWQgcGxhbiBjYWNoZSBlbnRyeSwganVzdCB1c2UgaXQsIG90aGVyd2lzZSB3ZSBoYXZlCisJICog dG8gY3JlYXRlIHBsYW4gZnJvbSBzY3JhdGNoLgorCSAqLworCWlmIChwbGFuX2NhY2hlX2VudHJ5 X3ZhbGlkKQorCXsKKwkJcGxhbnNvdXJjZV9saXN0ID0gY2FjaGVkX3BsYW5fZW50cnktPnBsYW5z b3VyY2VfbGlzdDsKKwkJcmVzdWx0dGxpc3QgPSBjb3B5T2JqZWN0KGNhY2hlZF9wbGFuX2VudHJ5 LT5yZXN1bHRfdGxpc3QpOworCQlmY2FjaGUtPnJldHVybnNUdXBsZSA9IGNhY2hlZF9wbGFuX2Vu dHJ5LT5yZXR1cm5zVHVwbGU7CisJCWZjYWNoZS0+cGluZm8gPSBjYWNoZWRfcGxhbl9lbnRyeS0+ cGluZm87CisJfQogCWVsc2UKIAl7Ci0JCUxpc3QJICAgKnJhd19wYXJzZXRyZWVfbGlzdDsKKwkJ TWVtb3J5Q29udGV4dCBhbGlhbmFibGVfY29udGV4dCA9IGZjb250ZXh0OworCisJCS8qIFdlIG5l ZWQgdG8gcHJlc2VydmUgcGFyc2UgaW5mbyBpbiBsb25nLWxpdmVkIGNvbnRleHQgKi8KKwkJaWYg KHVzZV9wbGFuX2NhY2hlKQorCQl7CisJCQlhbGlhbmFibGVfY29udGV4dCA9IEFsbG9jU2V0Q29u dGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkJCQkgICJTUUwgZnVu Y3Rpb24gcGxhbiBlbnRyeSBhbGlhbmFibGUgY29udGV4dCIsCisJCQkJCQkJCQkJCQkJICBBTExP Q1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKGFsaWFuYWJs ZV9jb250ZXh0KTsKKwkJfQorCisJCS8qCisJCSAqIFdlIG5lZWQgdGhlIGFjdHVhbCBhcmd1bWVu dCB0eXBlcyB0byBwYXNzIHRvIHRoZSBwYXJzZXIuICBBbHNvIG1ha2UKKwkJICogc3VyZSB0aGF0 IHBhcmFtZXRlciBzeW1ib2xzIGFyZSBjb25zaWRlcmVkIHRvIGhhdmUgdGhlIGZ1bmN0aW9uJ3MK KwkJICogcmVzb2x2ZWQgaW5wdXQgY29sbGF0aW9uLgorCQkgKi8KKwkJZmNhY2hlLT5waW5mbyA9 IHByZXBhcmVfc3FsX2ZuX3BhcnNlX2luZm8ocHJvY2VkdXJlVHVwbGUsCisJCQkJCQkJCQkJCQkg IGZpbmZvLT5mbl9leHByLAorCQkJCQkJCQkJCQkJICBjb2xsYXRpb24pOworCisJCWlmICh1c2Vf cGxhbl9jYWNoZSkKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmY29udGV4dCk7CisKKwkJLyoK KwkJICogUGFyc2UgYW5kIHJld3JpdGUgdGhlIHF1ZXJpZXMgaW4gdGhlIGZ1bmN0aW9uIHRleHQu ICBVc2Ugc3VibGlzdHMKKwkJICogdG8ga2VlcCB0cmFjayBvZiB0aGUgb3JpZ2luYWwgcXVlcnkg Ym91bmRhcmllcy4KKwkJICoKKwkJICogTm90ZTogc2luY2UgcGFyc2luZyBhbmQgcGxhbm5pbmcg aXMgZG9uZSBpbiBmY29udGV4dCwgd2Ugd2lsbAorCQkgKiBnZW5lcmF0ZSBhIGxvdCBvZiBjcnVm dCB0aGF0IGxpdmVzIGFzIGxvbmcgYXMgdGhlIGZjYWNoZSBkb2VzLiBUaGlzCisJCSAqIGlzIGFu bm95aW5nIGJ1dCB3ZSdsbCBub3Qgd29ycnkgYWJvdXQgaXQgdW50aWwgdGhlIG1vZHVsZSBpcwor CQkgKiByZXdyaXR0ZW4gdG8gdXNlIHBsYW5jYWNoZS5jLgorCQkgKi8KKworCQlwbGFuc291cmNl X2xpc3QgPSBOSUw7CisKKwkJcXVlcnlUcmVlX2xpc3QgPSBOSUw7CisJCWlmICghaXNOdWxsKQor CQl7CisJCQlOb2RlCSAgICpuOworCQkJTGlzdAkgICAqc3RvcmVkX3F1ZXJ5X2xpc3Q7CisKKwkJ CW4gPSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyh0bXApKTsKKwkJCWlmIChJc0Eo biwgTGlzdCkpCisJCQkJc3RvcmVkX3F1ZXJ5X2xpc3QgPSBsaW5pdGlhbF9ub2RlKExpc3QsIGNh c3ROb2RlKExpc3QsIG4pKTsKKwkJCWVsc2UKKwkJCQlzdG9yZWRfcXVlcnlfbGlzdCA9IGxpc3Rf bWFrZTEobik7CisKKwkJCWZvcmVhY2gobGMsIHN0b3JlZF9xdWVyeV9saXN0KQorCQkJeworCQkJ CVF1ZXJ5CSAgICpwYXJzZXRyZWUgPSBsZmlyc3Rfbm9kZShRdWVyeSwgbGMpOworCQkJCUxpc3QJ ICAgKnF1ZXJ5VHJlZV9zdWJsaXN0OworCQkJCUNhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2U7 CisKKwkJCQlBY3F1aXJlUmV3cml0ZUxvY2tzKHBhcnNldHJlZSwgdHJ1ZSwgZmFsc2UpOwogCi0J CXJhd19wYXJzZXRyZWVfbGlzdCA9IHBnX3BhcnNlX3F1ZXJ5KGZjYWNoZS0+c3JjKTsKKwkJCQlw bGFuc291cmNlID0gQ3JlYXRlQ2FjaGVkUGxhbkZvclF1ZXJ5KHBhcnNldHJlZSwgZmNhY2hlLT5z cmMsIENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKikgcGFyc2V0cmVlKSk7CisJCQkJcGxhbnNvdXJj ZV9saXN0ID0gbGFwcGVuZChwbGFuc291cmNlX2xpc3QsIHBsYW5zb3VyY2UpOwogCi0JCWZvcmVh Y2gobGMsIHJhd19wYXJzZXRyZWVfbGlzdCkKKwkJCQlxdWVyeVRyZWVfc3VibGlzdCA9IHBnX3Jl d3JpdGVfcXVlcnkocGFyc2V0cmVlKTsKKwkJCQlxdWVyeVRyZWVfbGlzdCA9IGxhcHBlbmQocXVl cnlUcmVlX2xpc3QsIHF1ZXJ5VHJlZV9zdWJsaXN0KTsKKwkJCX0KKwkJfQorCQllbHNlCiAJCXsK LQkJCVJhd1N0bXQgICAgKnBhcnNldHJlZSA9IGxmaXJzdF9ub2RlKFJhd1N0bXQsIGxjKTsKLQkJ CUxpc3QJICAgKnF1ZXJ5VHJlZV9zdWJsaXN0OwotCi0JCQlxdWVyeVRyZWVfc3VibGlzdCA9IHBn X2FuYWx5emVfYW5kX3Jld3JpdGVfd2l0aGNiKHBhcnNldHJlZSwKLQkJCQkJCQkJCQkJCQkJCSAg ZmNhY2hlLT5zcmMsCi0JCQkJCQkJCQkJCQkJCQkgIChQYXJzZXJTZXR1cEhvb2spIHNxbF9mbl9w YXJzZXJfc2V0dXAsCi0JCQkJCQkJCQkJCQkJCQkgIGZjYWNoZS0+cGluZm8sCi0JCQkJCQkJCQkJ CQkJCQkgIE5VTEwpOwotCQkJcXVlcnlUcmVlX2xpc3QgPSBsYXBwZW5kKHF1ZXJ5VHJlZV9saXN0 LCBxdWVyeVRyZWVfc3VibGlzdCk7CisJCQlMaXN0CSAgICpyYXdfcGFyc2V0cmVlX2xpc3Q7CisK KwkJCXJhd19wYXJzZXRyZWVfbGlzdCA9IHBnX3BhcnNlX3F1ZXJ5KGZjYWNoZS0+c3JjKTsKKwor CQkJZm9yZWFjaChsYywgcmF3X3BhcnNldHJlZV9saXN0KQorCQkJeworCQkJCVJhd1N0bXQgICAg KnBhcnNldHJlZSA9IGxmaXJzdF9ub2RlKFJhd1N0bXQsIGxjKTsKKwkJCQlMaXN0CSAgICpxdWVy eVRyZWVfc3VibGlzdDsKKwkJCQlDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlOworCisJCQkJ cGxhbnNvdXJjZSA9IENyZWF0ZUNhY2hlZFBsYW4ocGFyc2V0cmVlLCBmY2FjaGUtPnNyYywgQ3Jl YXRlQ29tbWFuZFRhZyhwYXJzZXRyZWUtPnN0bXQpKTsKKwkJCQlwbGFuc291cmNlX2xpc3QgPSBs YXBwZW5kKHBsYW5zb3VyY2VfbGlzdCwgcGxhbnNvdXJjZSk7CisKKwkJCQlxdWVyeVRyZWVfc3Vi bGlzdCA9IHBnX2FuYWx5emVfYW5kX3Jld3JpdGVfd2l0aGNiKHBhcnNldHJlZSwKKwkJCQkJCQkJ CQkJCQkJCQkgIGZjYWNoZS0+c3JjLAorCQkJCQkJCQkJCQkJCQkJCSAgKFBhcnNlclNldHVwSG9v aykgc3FsX2ZuX3BhcnNlcl9zZXR1cCwKKwkJCQkJCQkJCQkJCQkJCQkgIGZjYWNoZS0+cGluZm8s CisJCQkJCQkJCQkJCQkJCQkJICBOVUxMKTsKKwkJCQlxdWVyeVRyZWVfbGlzdCA9IGxhcHBlbmQo cXVlcnlUcmVlX2xpc3QsIHF1ZXJ5VHJlZV9zdWJsaXN0KTsKKwkJCX0KIAkJfQotCX0KIAotCS8q Ci0JICogQ2hlY2sgdGhhdCB0aGVyZSBhcmUgbm8gc3RhdGVtZW50cyB3ZSBkb24ndCB3YW50IHRv IGFsbG93LgotCSAqLwotCWNoZWNrX3NxbF9mbl9zdGF0ZW1lbnRzKHF1ZXJ5VHJlZV9saXN0KTsK KwkJLyoKKwkJICogQ2hlY2sgdGhhdCB0aGVyZSBhcmUgbm8gc3RhdGVtZW50cyB3ZSBkb24ndCB3 YW50IHRvIGFsbG93LgorCQkgKi8KKwkJY2hlY2tfc3FsX2ZuX3N0YXRlbWVudHMocXVlcnlUcmVl X2xpc3QpOwogCi0JLyoKLQkgKiBDaGVjayB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSB0 eXBlIGl0IGNsYWltcyB0by4gIEFsdGhvdWdoIGluCi0JICogc2ltcGxlIGNhc2VzIHRoaXMgd2Fz IGFscmVhZHkgZG9uZSB3aGVuIHRoZSBmdW5jdGlvbiB3YXMgZGVmaW5lZCwgd2UKLQkgKiBoYXZl IHRvIHJlY2hlY2sgYmVjYXVzZSBkYXRhYmFzZSBvYmplY3RzIHVzZWQgaW4gdGhlIGZ1bmN0aW9u J3MgcXVlcmllcwotCSAqIG1pZ2h0IGhhdmUgY2hhbmdlZCB0eXBlLiAgV2UnZCBoYXZlIHRvIHJl Y2hlY2sgYW55d2F5IGlmIHRoZSBmdW5jdGlvbgotCSAqIGhhZCBhbnkgcG9seW1vcnBoaWMgYXJn dW1lbnRzLiAgTW9yZW92ZXIsIGNoZWNrX3NxbF9mbl9yZXR2YWwgdGFrZXMKLQkgKiBjYXJlIG9m IGluamVjdGluZyBhbnkgcmVxdWlyZWQgY29sdW1uIHR5cGUgY29lcmNpb25zLiAgKEJ1dCB3ZSBk b24ndAotCSAqIGFzayBpdCB0byBpbnNlcnQgbnVsbHMgZm9yIGRyb3BwZWQgY29sdW1uczsgdGhl IGp1bmtmaWx0ZXIgaGFuZGxlcwotCSAqIHRoYXQuKQotCSAqCi0JICogTm90ZTogd2Ugc2V0IGZj YWNoZS0+cmV0dXJuc1R1cGxlIGFjY29yZGluZyB0byB3aGV0aGVyIHdlIGFyZSByZXR1cm5pbmcK LQkgKiB0aGUgd2hvbGUgdHVwbGUgcmVzdWx0IG9yIGp1c3QgYSBzaW5nbGUgY29sdW1uLiAgSW4g dGhlIGxhdHRlciBjYXNlIHdlCi0JICogY2xlYXIgcmV0dXJuc1R1cGxlIGJlY2F1c2Ugd2UgbmVl ZCBub3QgYWN0IGRpZmZlcmVudCBmcm9tIHRoZSBzY2FsYXIKLQkgKiByZXN1bHQgY2FzZSwgZXZl biBpZiBpdCdzIGEgcm93dHlwZSBjb2x1bW4uICAoSG93ZXZlciwgd2UgaGF2ZSB0byBmb3JjZQot CSAqIGxhenkgZXZhbCBtb2RlIGluIHRoYXQgY2FzZTsgb3RoZXJ3aXNlIHdlJ2QgbmVlZCBleHRy YSBjb2RlIHRvIGV4cGFuZAotCSAqIHRoZSByb3d0eXBlIGNvbHVtbiBpbnRvIG11bHRpcGxlIGNv bHVtbnMsIHNpbmNlIHdlIGhhdmUgbm8gd2F5IHRvCi0JICogbm90aWZ5IHRoZSBjYWxsZXIgdGhh dCBpdCBzaG91bGQgZG8gdGhhdC4pCi0JICovCi0JZmNhY2hlLT5yZXR1cm5zVHVwbGUgPSBjaGVj a19zcWxfZm5fcmV0dmFsKHF1ZXJ5VHJlZV9saXN0LAotCQkJCQkJCQkJCQkgICByZXR0eXBlLAot CQkJCQkJCQkJCQkgICByZXR0dXBkZXNjLAotCQkJCQkJCQkJCQkgICBwcm9jZWR1cmVTdHJ1Y3Qt PnByb2tpbmQsCi0JCQkJCQkJCQkJCSAgIGZhbHNlLAotCQkJCQkJCQkJCQkgICAmcmVzdWx0dGxp c3QpOworCQkvKgorCQkgKiBDaGVjayB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSB0eXBl IGl0IGNsYWltcyB0by4gIEFsdGhvdWdoIGluCisJCSAqIHNpbXBsZSBjYXNlcyB0aGlzIHdhcyBh bHJlYWR5IGRvbmUgd2hlbiB0aGUgZnVuY3Rpb24gd2FzIGRlZmluZWQsCisJCSAqIHdlIGhhdmUg dG8gcmVjaGVjayBiZWNhdXNlIGRhdGFiYXNlIG9iamVjdHMgdXNlZCBpbiB0aGUgZnVuY3Rpb24n cworCQkgKiBxdWVyaWVzIG1pZ2h0IGhhdmUgY2hhbmdlZCB0eXBlLiAgV2UnZCBoYXZlIHRvIHJl Y2hlY2sgYW55d2F5IGlmCisJCSAqIHRoZSBmdW5jdGlvbiBoYWQgYW55IHBvbHltb3JwaGljIGFy Z3VtZW50cy4gIE1vcmVvdmVyLAorCQkgKiBjaGVja19zcWxfZm5fcmV0dmFsIHRha2VzIGNhcmUg b2YgaW5qZWN0aW5nIGFueSByZXF1aXJlZCBjb2x1bW4KKwkJICogdHlwZSBjb2VyY2lvbnMuICAo QnV0IHdlIGRvbid0IGFzayBpdCB0byBpbnNlcnQgbnVsbHMgZm9yIGRyb3BwZWQKKwkJICogY29s dW1uczsgdGhlIGp1bmtmaWx0ZXIgaGFuZGxlcyB0aGF0LikKKwkJICoKKwkJICogTm90ZTogd2Ug c2V0IGZjYWNoZS0+cmV0dXJuc1R1cGxlIGFjY29yZGluZyB0byB3aGV0aGVyIHdlIGFyZQorCQkg KiByZXR1cm5pbmcgdGhlIHdob2xlIHR1cGxlIHJlc3VsdCBvciBqdXN0IGEgc2luZ2xlIGNvbHVt bi4gIEluIHRoZQorCQkgKiBsYXR0ZXIgY2FzZSB3ZSBjbGVhciByZXR1cm5zVHVwbGUgYmVjYXVz ZSB3ZSBuZWVkIG5vdCBhY3QgZGlmZmVyZW50CisJCSAqIGZyb20gdGhlIHNjYWxhciByZXN1bHQg Y2FzZSwgZXZlbiBpZiBpdCdzIGEgcm93dHlwZSBjb2x1bW4uCisJCSAqIChIb3dldmVyLCB3ZSBo YXZlIHRvIGZvcmNlIGxhenkgZXZhbCBtb2RlIGluIHRoYXQgY2FzZTsgb3RoZXJ3aXNlCisJCSAq IHdlJ2QgbmVlZCBleHRyYSBjb2RlIHRvIGV4cGFuZCB0aGUgcm93dHlwZSBjb2x1bW4gaW50byBt dWx0aXBsZQorCQkgKiBjb2x1bW5zLCBzaW5jZSB3ZSBoYXZlIG5vIHdheSB0byBub3RpZnkgdGhl IGNhbGxlciB0aGF0IGl0IHNob3VsZAorCQkgKiBkbyB0aGF0LikKKwkJICovCisKKwkJZmNhY2hl LT5yZXR1cm5zVHVwbGUgPSBjaGVja19zcWxfZm5fcmV0dmFsKHF1ZXJ5VHJlZV9saXN0LAorCQkJ CQkJCQkJCQkJICAgcmV0dHlwZSwKKwkJCQkJCQkJCQkJCSAgIHJldHR1cGRlc2MsCisJCQkJCQkJ CQkJCQkgICBwcm9jZWR1cmVTdHJ1Y3QtPnByb2tpbmQsCisJCQkJCQkJCQkJCQkgICBmYWxzZSwK KwkJCQkJCQkJCQkJCSAgICZyZXN1bHR0bGlzdCk7CisKKwkJLyoKKwkJICogUXVlcmllcyBjb3Vs ZCBiZSByZXdyaXR0ZW4gYnkgY2hlY2tfc3FsX2ZuX3JldHZhbCgpLiBOb3cgd2hlbiB0aGV5CisJ CSAqIGhhdmUgdGhlaXIgZmluYWwgZm9ybSwgd2UgY2FuIGNvbXBsZXRlIHBsYW4gY2FjaGUgZW50 cnkgY3JlYXRpb24uCisJCSAqLworCQlpZiAocGxhbnNvdXJjZV9saXN0ICE9IE5JTCkKKwkJewor CQkJTGlzdENlbGwgICAqcWxjOworCQkJTGlzdENlbGwgICAqcGxjOworCisJCQlmb3Jib3RoKHFs YywgcXVlcnlUcmVlX2xpc3QsIHBsYywgcGxhbnNvdXJjZV9saXN0KQorCQkJeworCQkJCUxpc3QJ ICAgKnF1ZXJ5VHJlZV9zdWJsaXN0ID0gbGZpcnN0KHFsYyk7CisJCQkJQ2FjaGVkUGxhblNvdXJj ZSAqcGxhbnNvdXJjZSA9IGxmaXJzdChwbGMpOworCisJCQkJLyogRmluaXNoIGZpbGxpbmcgaW4g dGhlIENhY2hlZFBsYW5Tb3VyY2UgKi8KKwkJCQlDb21wbGV0ZUNhY2hlZFBsYW4ocGxhbnNvdXJj ZSwKKwkJCQkJCQkJICAgcXVlcnlUcmVlX3N1Ymxpc3QsCisJCQkJCQkJCSAgIE5VTEwsCisJCQkJ CQkJCSAgIE5VTEwsCisJCQkJCQkJCSAgIDAsCisJCQkJCQkJCSAgIChQYXJzZXJTZXR1cEhvb2sp IHNxbF9mbl9wYXJzZXJfc2V0dXAsCisJCQkJCQkJCSAgIGZjYWNoZS0+cGluZm8sCisJCQkJCQkJ CSAgIENVUlNPUl9PUFRfUEFSQUxMRUxfT0sgfCBDVVJTT1JfT1BUX05PX1NDUk9MTCwKKwkJCQkJ CQkJICAgZmFsc2UpOworCQkJfQorCQl9CisKKwkJLyogSWYgd2UgY2FuIHBvc3NpYmx5IHVzZSBj YWNoZWQgcGxhbiBlbnRyeSwgc2F2ZSBpdC4gKi8KKwkJaWYgKHVzZV9wbGFuX2NhY2hlKQorCQkJ c2F2ZV9jYWNoZWRfcGxhbl9lbnRyeSgmcGxhbl9jYWNoZV9lbnRyeV9rZXksIHByb2NlZHVyZVR1 cGxlLCBwbGFuc291cmNlX2xpc3QsIHJlc3VsdHRsaXN0LCBmY2FjaGUtPnJldHVybnNUdXBsZSwg ZmNhY2hlLT5waW5mbywgYWxpYW5hYmxlX2NvbnRleHQpOworCX0KIAogCS8qCiAJICogQ29uc3Ry dWN0IGEgSnVua0ZpbHRlciB3ZSBjYW4gdXNlIHRvIGNvZXJjZSB0aGUgcmV0dXJuZWQgcm93dHlw ZSB0byB0aGUKQEAgLTc5MiwxMyArMTI5NSwxMCBAQCBpbml0X3NxbF9mY2FjaGUoRnVuY3Rpb25D YWxsSW5mbyBmY2luZm8sIE9pZCBjb2xsYXRpb24sIGJvb2wgbGF6eUV2YWxPSykKIAkJICogbWF0 ZXJpYWxpemUgbW9kZSwgYnV0IHRvIGFkZCBtb3JlIHNtYXJ0cyBpbiBpbml0X2V4ZWN1dGlvbl9z dGF0ZQogCQkgKiBhYm91dCB0aGlzLCB3ZSdkIHByb2JhYmx5IG5lZWQgYSB0aHJlZS13YXkgZmxh ZyBpbnN0ZWFkIG9mIGJvb2wuCiAJCSAqLwotCQlsYXp5RXZhbE9LID0gdHJ1ZTsKKwkJKmxhenlF dmFsT0sgPSB0cnVlOwogCX0KIAotCS8qIEZpbmFsbHksIHBsYW4gdGhlIHF1ZXJpZXMgKi8KLQlm Y2FjaGUtPmZ1bmNfc3RhdGUgPSBpbml0X2V4ZWN1dGlvbl9zdGF0ZShxdWVyeVRyZWVfbGlzdCwK LQkJCQkJCQkJCQkJICBmY2FjaGUsCi0JCQkJCQkJCQkJCSAgbGF6eUV2YWxPSyk7CisJZmNhY2hl LT5wbGFuc291cmNlX2xpc3QgPSBwbGFuc291cmNlX2xpc3Q7CiAKIAkvKiBNYXJrIGZjYWNoZSB3 aXRoIHRpbWUgb2YgY3JlYXRpb24gdG8gc2hvdyBpdCdzIHZhbGlkICovCiAJZmNhY2hlLT5seGlk ID0gTXlQcm9jLT52eGlkLmx4aWQ7CkBAIC05NzEsNyArMTQ3MSwxMiBAQCBwb3N0cXVlbF9zdWJf cGFyYW1zKFNRTEZ1bmN0aW9uQ2FjaGVQdHIgZmNhY2hlLAogCQkJcHJtLT52YWx1ZSA9IE1ha2VF eHBhbmRlZE9iamVjdFJlYWRPbmx5KGZjaW5mby0+YXJnc1tpXS52YWx1ZSwKIAkJCQkJCQkJCQkJ CQlwcm0tPmlzbnVsbCwKIAkJCQkJCQkJCQkJCQlnZXRfdHlwbGVuKGFyZ3R5cGVzW2ldKSk7Ci0J CQlwcm0tPnBmbGFncyA9IDA7CisKKwkJCS8qCisJCQkgKiBQQVJBTV9GTEFHX0NPTlNUIGlzIG5l Y2Vzc2FyeSB0byBidWlsZCBlZmZpY2llbnQgY3VzdG9tIHBsYW4uCisJCQkgKi8KKwkJCXBybS0+ cGZsYWdzID0gUEFSQU1fRkxBR19DT05TVDsKKwogCQkJcHJtLT5wdHlwZSA9IGFyZ3R5cGVzW2ld OwogCQl9CiAJfQpAQCAtMTAyNCw2ICsxNTI5LDMwIEBAIHBvc3RxdWVsX2dldF9zaW5nbGVfcmVz dWx0KFR1cGxlVGFibGVTbG90ICpzbG90LAogCXJldHVybiB2YWx1ZTsKIH0KIAorLyoKKyAqIFJl bGVhc2UgcGxhbnMuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHByaW9yIHRvIHBsYW5uaW5nCisg KiBzdGF0ZW1lbnRzIHdpdGggbmV3IHBhcmFtZXRlcnMuIFdoZW4gY3VzdG9tIHBsYW5zIGFyZSBn ZW5lcmF0ZWQKKyAqIGZvciBlYWNoIGZ1bmN0aW9uIGNhbGwgaW4gYSBzdGF0ZW1lbnQsIHRoZXkg Y2FuIGNvbnN1bWUgdG9vIG11Y2ggbWVtb3J5LCBzbworICogcmVsZWFzZSB0aGVtLiBHZW5lcmlj IHBsYW5zIHdpbGwgc3Vydml2ZSBpdCBhcyBwbGFuc291cmNlIGhvbGRzCisgKiByZWZlcmVuY2Ug dG8gYSBnZW5lcmljIHBsYW4uCisgKi8KK3N0YXRpYyB2b2lkCityZWxlYXNlX3BsYW5zKExpc3Qg KmNwbGFucykKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCS8qCisJICogV2Ugc3VwcG9ydCBzZXBh cmF0ZSBwbGFuIGxpc3QsIHNvIHRoYXQgd2UgdmlzaXQgZWFjaCBwbGFuIGhlcmUgb25seQorCSAq IG9uY2UKKwkgKi8KKwlmb3JlYWNoKGxjLCBjcGxhbnMpCisJeworCQlDYWNoZWRQbGFuICpjcGxh biA9IGxmaXJzdChsYyk7CisKKwkJUmVsZWFzZUNhY2hlZFBsYW4oY3BsYW4sIGNwbGFuLT5pc19z YXZlZCA/IEN1cnJlbnRSZXNvdXJjZU93bmVyIDogTlVMTCk7CisJfQorfQorCiAvKgogICogZm1n cl9zcWw6IGZ1bmN0aW9uIGNhbGwgbWFuYWdlciBmb3IgU1FMIGZ1bmN0aW9ucwogICovCkBAIC0x MDQyLDYgKzE1NzEsNyBAQCBmbWdyX3NxbChQR19GVU5DVElPTl9BUkdTKQogCURhdHVtCQlyZXN1 bHQ7CiAJTGlzdAkgICAqZXNsaXN0OwogCUxpc3RDZWxsICAgKmVzbGM7CisJYm9vbAkJYnVpbGRf Y2FjaGVkX3BsYW5zID0gZmFsc2U7CiAKIAkvKgogCSAqIFNldHVwIGVycm9yIHRyYWNlYmFjayBz dXBwb3J0IGZvciBlcmVwb3J0KCkKQEAgLTEwOTcsNyArMTYyNywxMSBAQCBmbWdyX3NxbChQR19G VU5DVElPTl9BUkdTKQogCiAJaWYgKGZjYWNoZSA9PSBOVUxMKQogCXsKLQkJaW5pdF9zcWxfZmNh Y2hlKGZjaW5mbywgUEdfR0VUX0NPTExBVElPTigpLCBsYXp5RXZhbE9LKTsKKwkJLyoKKwkJICog aW5pdF9zcWxfZmNhY2hlKCkgY2FuIHNldCBsYXp5RXZhbE9LIGluIGFkZGl0aW9uYWwgY2FzZXMg d2hlbiBpdAorCQkgKiBkZXRlcm1pbmVzIHRoYXQgbWF0ZXJpYWxpemUgd29uJ3Qgd29yay4KKwkJ ICovCisJCWluaXRfc3FsX2ZjYWNoZShmY2luZm8sIFBHX0dFVF9DT0xMQVRJT04oKSwgJmxhenlF dmFsT0spOwogCQlmY2FjaGUgPSAoU1FMRnVuY3Rpb25DYWNoZVB0cikgZmNpbmZvLT5mbGluZm8t PmZuX2V4dHJhOwogCX0KIApAQCAtMTEzMSwxMiArMTY2NSwzNyBAQCBmbWdyX3NxbChQR19GVU5D VElPTl9BUkdTKQogCQkJYnJlYWs7CiAJfQogCisJLyoKKwkgKiBXZSBza2lwIGFjdHVhbCBwbGFu bmluZyBmb3IgaW5pdGlhbCBydW4sIHNvIGluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvCisJICogYnVp bGQgY2FjaGVkIHBsYW5zIG5vdy4KKwkgKi8KKwlpZiAoZmNhY2hlLT5wbGFuc291cmNlX2xpc3Qg IT0gTklMICYmIGVzbGlzdCA9PSBOSUwpCisJCWJ1aWxkX2NhY2hlZF9wbGFucyA9IHRydWU7CisK IAkvKgogCSAqIENvbnZlcnQgcGFyYW1zIHRvIGFwcHJvcHJpYXRlIGZvcm1hdCBpZiBzdGFydGlu ZyBhIGZyZXNoIGV4ZWN1dGlvbi4gKElmCiAJICogY29udGludWluZyBleGVjdXRpb24sIHdlIGNh biByZS11c2UgcHJpb3IgcGFyYW1zLikKIAkgKi8KLQlpZiAoaXNfZmlyc3QgJiYgZXMgJiYgZXMt PnN0YXR1cyA9PSBGX0VYRUNfU1RBUlQpCisJaWYgKChpc19maXJzdCAmJiBlcyAmJiBlcy0+c3Rh dHVzID09IEZfRVhFQ19TVEFSVCkgfHwgYnVpbGRfY2FjaGVkX3BsYW5zKQorCXsKIAkJcG9zdHF1 ZWxfc3ViX3BhcmFtcyhmY2FjaGUsIGZjaW5mbyk7CisJCWlmIChmY2FjaGUtPnBsYW5zb3VyY2Vf bGlzdCkKKwkJeworCQkJLyogcmVwbGFuIHRoZSBxdWVyaWVzICovCisJCQlmY2FjaGUtPmZ1bmNf c3RhdGUgPSBpbml0X2V4ZWN1dGlvbl9zdGF0ZShmY2FjaGUsCisJCQkJCQkJCQkJCQkJICBsYXp5 RXZhbE9LKTsKKwkJCS8qIHJlc3RvcmUgZXhlY3V0aW9uIHN0YXRlIGFuZCBlc2xpc3QtcmVsYXRl ZCB2YXJpYWJsZXMgKi8KKwkJCWVzbGlzdCA9IGZjYWNoZS0+ZnVuY19zdGF0ZTsKKwkJCS8qIGZp bmQgdGhlIGZpcnN0IG5vbi1OVUxMIGV4ZWN1dGlvbiBzdGF0ZSAqLworCQkJZm9yZWFjaChlc2xj LCBlc2xpc3QpCisJCQl7CisJCQkJZXMgPSAoZXhlY3V0aW9uX3N0YXRlICopIGxmaXJzdChlc2xj KTsKKworCQkJCWlmIChlcykKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CiAKIAkvKgogCSAq IEJ1aWxkIHR1cGxlc3RvcmUgdG8gaG9sZCByZXN1bHRzLCBpZiB3ZSBkb24ndCBoYXZlIG9uZSBh bHJlYWR5LiBOb3RlCkBAIC0xMzkxLDYgKzE5NTAsMTAgQEAgZm1ncl9zcWwoUEdfRlVOQ1RJT05f QVJHUykKIAkJCQllcyA9IGVzLT5uZXh0OwogCQkJfQogCQl9CisKKwkJLyogUmVsZWFzZSBwbGFu cyB3aGVuIGZ1bmN0aW9ucyBzdG9wcyBleGVjdXRpbmcgKi8KKwkJcmVsZWFzZV9wbGFucyhmY2Fj aGUtPmNwbGFuX2xpc3QpOworCQlmY2FjaGUtPmNwbGFuX2xpc3QgPSBOVUxMOwogCX0KIAogCWVy cm9yX2NvbnRleHRfc3RhY2sgPSBzcWxlcnJjb250ZXh0LnByZXZpb3VzOwpAQCAtMTQzMCwxMyAr MTk5MywxOSBAQCBzcWxfZXhlY19lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpCiAJfQogCiAJLyoK LQkgKiBUcnkgdG8gZGV0ZXJtaW5lIHdoZXJlIGluIHRoZSBmdW5jdGlvbiB3ZSBmYWlsZWQuICBJ ZiB0aGVyZSBpcyBhIHF1ZXJ5Ci0JICogd2l0aCBub24tbnVsbCBRdWVyeURlc2MsIGZpbmdlciBp dC4gIChXZSBjaGVjayB0aGlzIHJhdGhlciB0aGFuIGxvb2tpbmcKLQkgKiBmb3IgRl9FWEVDX1JV TiBzdGF0ZSwgc28gdGhhdCBlcnJvcnMgZHVyaW5nIEV4ZWN1dG9yU3RhcnQgb3IKKwkgKiBUcnkg dG8gZGV0ZXJtaW5lIHdoZXJlIGluIHRoZSBmdW5jdGlvbiB3ZSBmYWlsZWQuICBJZiBmYWlsdXJl IGhhcHBlbnMKKwkgKiB3aGlsZSBidWlsZGluZyBwbGFucywgbG9vayBhdCBwbGFubmluZ19zdG10 X251bWJlci4gIEVsc2UgaWYgdGhlcmUgaXMgYQorCSAqIHF1ZXJ5IHdpdGggbm9uLW51bGwgUXVl cnlEZXNjLCBmaW5nZXIgaXQuICAoV2UgY2hlY2sgdGhpcyByYXRoZXIgdGhhbgorCSAqIGxvb2tp bmcgZm9yIEZfRVhFQ19SVU4gc3RhdGUsIHNvIHRoYXQgZXJyb3JzIGR1cmluZyBFeGVjdXRvclN0 YXJ0IG9yCiAJICogRXhlY3V0b3JFbmQgYXJlIGJsYW1lZCBvbiB0aGUgYXBwcm9wcmlhdGUgcXVl cnk7IHNlZSBwb3N0cXVlbF9zdGFydCBhbmQKIAkgKiBwb3N0cXVlbF9lbmQuKQogCSAqLwotCWlm IChmY2FjaGUtPmZ1bmNfc3RhdGUpCisJaWYgKGZjYWNoZS0+cGxhbm5pbmdfc3RtdF9udW1iZXIp CisJeworCQllcnJjb250ZXh0KCJTUUwgZnVuY3Rpb24gXCIlc1wiIHN0YXRlbWVudCAlZCIsCisJ CQkJICAgZmNhY2hlLT5mbmFtZSwgZmNhY2hlLT5wbGFubmluZ19zdG10X251bWJlcik7CisJfQor CWVsc2UgaWYgKGZjYWNoZS0+ZnVuY19zdGF0ZSkKIAl7CiAJCWV4ZWN1dGlvbl9zdGF0ZSAqZXM7 CiAJCWludAkJCXF1ZXJ5X251bTsKQEAgLTE1MjIsNiArMjA5MSwxMCBAQCBTaHV0ZG93blNRTEZ1 bmN0aW9uKERhdHVtIGFyZykKIAkJdHVwbGVzdG9yZV9lbmQoZmNhY2hlLT50c3RvcmUpOwogCWZj YWNoZS0+dHN0b3JlID0gTlVMTDsKIAorCS8qIFJlbGVhc2UgcGxhbnMgd2hlbiBmdW5jdGlvbnMg c3RvcHMgZXhlY3V0aW5nICovCisJcmVsZWFzZV9wbGFucyhmY2FjaGUtPmNwbGFuX2xpc3QpOwor CWZjYWNoZS0+Y3BsYW5fbGlzdCA9IE5VTEw7CisKIAkvKiBleGVjVXRpbHMgd2lsbCBkZXJlZ2lz dGVyIHRoZSBjYWxsYmFjay4uLiAqLwogCWZjYWNoZS0+c2h1dGRvd25fcmVnID0gZmFsc2U7CiB9 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZXh0ZW5zaW9ucy9leHBlY3RlZC90 ZXN0X2V4dGVuc2lvbnMub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2V4dGVuc2lvbnMvZXhw ZWN0ZWQvdGVzdF9leHRlbnNpb25zLm91dAppbmRleCBkNTM4OGExZmVjZi4uNzJiYWUxYmYyNTQg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9leHRlbnNpb25zL2V4cGVjdGVkL3Rl c3RfZXh0ZW5zaW9ucy5vdXQKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2V4dGVuc2lvbnMv ZXhwZWN0ZWQvdGVzdF9leHRlbnNpb25zLm91dApAQCAtNjUxLDcgKzY1MSw3IEBAIExJTkUgMTog IFNFTEVDVCBwdWJsaWMuZGVwX3JlcTIoKSB8fCAnIHJlcTNiJwogICAgICAgICAgICAgICAgIF4K IEhJTlQ6ICBObyBmdW5jdGlvbiBtYXRjaGVzIHRoZSBnaXZlbiBuYW1lIGFuZCBhcmd1bWVudCB0 eXBlcy4gWW91IG1pZ2h0IG5lZWQgdG8gYWRkIGV4cGxpY2l0IHR5cGUgY2FzdHMuCiBRVUVSWTog ICBTRUxFQ1QgcHVibGljLmRlcF9yZXEyKCkgfHwgJyByZXEzYicgCi1DT05URVhUOiAgU1FMIGZ1 bmN0aW9uICJkZXBfcmVxM2IiIGR1cmluZyBzdGFydHVwCitDT05URVhUOiAgU1FMIGZ1bmN0aW9u ICJkZXBfcmVxM2IiIHN0YXRlbWVudCAxCiBEUk9QIEVYVEVOU0lPTiB0ZXN0X2V4dF9yZXFfc2No ZW1hMzsKIEFMVEVSIEVYVEVOU0lPTiB0ZXN0X2V4dF9yZXFfc2NoZW1hMSBTRVQgU0NIRU1BIHRl c3Rfc19kZXAyOyAgLS0gbm93IG9rCiBTRUxFQ1QgdGVzdF9zX2RlcDIuZGVwX3JlcTEoKTsKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcm93c2VjdXJpdHkub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9yb3dzZWN1cml0eS5vdXQKaW5kZXggODc5MjkxOTFkMDYu LjQzOGVhZjY5OTI4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jvd3Nl Y3VyaXR5Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jvd3NlY3VyaXR5Lm91 dApAQCAtNDY5NSw2ICs0Njk1LDU3IEBAIFJFU0VUIFJPTEU7CiBEUk9QIEZVTkNUSU9OIHJsc19m KCk7CiBEUk9QIFZJRVcgcmxzX3Y7CiBEUk9QIFRBQkxFIHJsc190OworLS0gUkxTIGNoYW5nZXMg aW52YWxpZGF0ZSBjYWNoZWQgZnVuY3Rpb24gcGxhbnMKK2NyZWF0ZSB0YWJsZSBybHNfdCAoYyB0 ZXh0KTsKK2NyZWF0ZSB0YWJsZSB0ZXN0X3QgKGMgdGV4dCk7CitpbnNlcnQgaW50byBybHNfdCB2 YWx1ZXMgKCdhJyksICgnYicpLCAoJ2MnKSwgKCdkJyk7CitpbnNlcnQgaW50byB0ZXN0X3QgdmFs dWVzICgnYScpLCAoJ2InKTsKK2FsdGVyIHRhYmxlIHJsc190IGVuYWJsZSByb3cgbGV2ZWwgc2Vj dXJpdHk7CitncmFudCBzZWxlY3Qgb24gcmxzX3QgdG8gcmVncmVzc19ybHNfYWxpY2U7CitncmFu dCBzZWxlY3Qgb24gdGVzdF90IHRvIHJlZ3Jlc3NfcmxzX2FsaWNlOworY3JlYXRlIHBvbGljeSBw MSBvbiBybHNfdCBmb3Igc2VsZWN0IHRvIHJlZ3Jlc3NfcmxzX2FsaWNlIHVzaW5nIChjID0gY3Vy cmVudF9zZXR0aW5nKCdybHNfdGVzdC5ibGFoJykpOworLS0gRnVuY3Rpb24gY2hhbmdlcyByb3df c2VjdXJpdHkgc2V0dGluZyBhbmQgc28gaW52YWxpZGF0ZXMgcGxhbgorY3JlYXRlIG9yIHJlcGxh Y2UgZnVuY3Rpb24gcmxzX2YodGV4dCkKKyBSRVRVUk5TIHRleHQKKyBMQU5HVUFHRSBzcWwKK0JF R0lOIEFUT01JQworIHNlbGVjdCBzZXRfY29uZmlnKCdybHNfdGVzdC5ibGFoJywgJDEsIHRydWUp IHx8IHNldF9jb25maWcoJ3Jvd19zZWN1cml0eScsICdmYWxzZScsIHRydWUpIHx8IHN0cmluZ19h Z2coYywgJywnIG9yZGVyIGJ5IGMpIGZyb20gcmxzX3Q7CitFTkQ7CistLSBUYWJsZSBvd25lciBi eXBhc3NlcyBSTFMKK3NlbGVjdCBybHNfZihjKSBmcm9tIHRlc3RfdCBvcmRlciBieSBybHNfZjsK KyAgICBybHNfZiAgICAKKy0tLS0tLS0tLS0tLS0KKyBhb2ZmYSxiLGMsZAorIGJvZmZhLGIsYyxk CisoMiByb3dzKQorCitzZXQgcm9sZSByZWdyZXNzX3Jsc19hbGljZTsKKy0tIEZvciBjYXN1YWwg dXNlciBjaGFuZ2VzIGluIHJvd19zZWN1cml0eSBzZXR0aW5nIGxlYWQKKy0tIHRvIGVycm9yIGR1 cmluZyBxdWVyeSByZXdyaXRlCitzZWxlY3QgcmxzX2YoYykgZnJvbSB0ZXN0X3Qgb3JkZXIgYnkg cmxzX2Y7CitFUlJPUjogIHF1ZXJ5IHdvdWxkIGJlIGFmZmVjdGVkIGJ5IHJvdy1sZXZlbCBzZWN1 cml0eSBwb2xpY3kgZm9yIHRhYmxlICJybHNfdCIKK0NPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gInJs c19mIiBzdGF0ZW1lbnQgMQorcmVzZXQgcm9sZTsKK3NldCBwbGFuX2NhY2hlX21vZGUgdG8gZm9y Y2VfZ2VuZXJpY19wbGFuOworLS0gVGFibGUgb3duZXIgYnlwYXNzZXMgUkxTLCBidXQgY2FjaGVk IHBsYW4gaW52YWxpZGF0ZXMKK3NlbGVjdCBybHNfZihjKSBmcm9tIHRlc3RfdCBvcmRlciBieSBy bHNfZjsKKyAgICBybHNfZiAgICAKKy0tLS0tLS0tLS0tLS0KKyBhb2ZmYSxiLGMsZAorIGJvZmZh LGIsYyxkCisoMiByb3dzKQorCistLSBGb3IgY2FzdWFsIHVzZXIgY2hhbmdlcyBpbiByb3dfc2Vj dXJpdHkgc2V0dGluZyBsZWFkCistLSB0byBwbGFuIGludmFsaWRhdGlvbiBhbmQgZXJyb3IgZHVy aW5nIHF1ZXJ5IHJld3JpdGUKK3NldCByb2xlIHJlZ3Jlc3NfcmxzX2FsaWNlOworc2VsZWN0IHJs c19mKGMpIGZyb20gdGVzdF90IG9yZGVyIGJ5IHJsc19mOworRVJST1I6ICBxdWVyeSB3b3VsZCBi ZSBhZmZlY3RlZCBieSByb3ctbGV2ZWwgc2VjdXJpdHkgcG9saWN5IGZvciB0YWJsZSAicmxzX3Qi CitDT05URVhUOiAgU1FMIGZ1bmN0aW9uICJybHNfZiIgc3RhdGVtZW50IDEKK3Jlc2V0IHJvbGU7 CityZXNldCBwbGFuX2NhY2hlX21vZGU7CityZXNldCBybHNfdGVzdC5ibGFoOworZHJvcCBmdW5j dGlvbiBybHNfZjsKK2Ryb3AgdGFibGUgcmxzX3QsIHRlc3RfdDsKIC0tCiAtLSBDbGVhbiB1cCBv YmplY3RzCiAtLQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dAppbmRleCA0NzQ3ODk2OTEz NS4uYmViMGI0YzVkYjQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVs ZXMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CkBAIC0zODc5 LDMgKzM4NzksMzggQEAgRFJPUCBUQUJMRSBydWxldGVzdF90MzsKIERST1AgVEFCTEUgcnVsZXRl c3RfdDI7CiBEUk9QIFRBQkxFIHJ1bGV0ZXN0X3QxOwogRFJPUCBVU0VSIHJlZ3Jlc3NfcnVsZV91 c2VyMTsKKy0tIFRlc3QgdGhhdCBTUUwgZnVuY3Rpb25zIGNvcnJlY3RseSBoYW5kbGUgRE8gTk9U SElORyBydWxlCitDUkVBVEUgVEFCTEUgc29tZV9kYXRhIChpIGludCwgZGF0YSB0ZXh0KTsKK0NS RUFURSBUQUJMRSBzb21lX2RhdGFfdmFsdWVzIChpIGludCwgZGF0YSB0ZXh0KTsKK0NSRUFURSBG VU5DVElPTiBpbnNlcnRfZGF0YShpIGludCwgZGF0YSB0ZXh0KQorUkVUVVJOUyBJTlQKK0FTICQk CitJTlNFUlQgSU5UTyBzb21lX2RhdGEgVkFMVUVTICgkMSwgJDIpOworU0VMRUNUIDE7CiskJCBM QU5HVUFHRSBTUUw7CitJTlNFUlQgSU5UTyBzb21lX2RhdGFfdmFsdWVzIFNFTEVDVCBpICwgJ2Rh dGEnfHwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMCkgaTsKK0NSRUFURSBSVUxFIHNvbWVf ZGF0YV9ub2luc2VydCBBUyBPTiBJTlNFUlQgVE8gc29tZV9kYXRhIERPIElOU1RFQUQgTk9USElO RzsKK1NFTEVDVCBpbnNlcnRfZGF0YShpLCBkYXRhKSBGUk9NIHNvbWVfZGF0YV92YWx1ZXM7Cisg aW5zZXJ0X2RhdGEgCistLS0tLS0tLS0tLS0tCisgICAgICAgICAgIDEKKyAgICAgICAgICAgMQor ICAgICAgICAgICAxCisgICAgICAgICAgIDEKKyAgICAgICAgICAgMQorICAgICAgICAgICAxCisg ICAgICAgICAgIDEKKyAgICAgICAgICAgMQorICAgICAgICAgICAxCisgICAgICAgICAgIDEKKygx MCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHNvbWVfZGF0YSBPUkRFUiBCWSBpOworIGkgfCBkYXRh IAorLS0tKy0tLS0tLQorKDAgcm93cykKKworRFJPUCBSVUxFIHNvbWVfZGF0YV9ub2luc2VydCBP TiBzb21lX2RhdGE7CitEUk9QIFRBQkxFIHNvbWVfZGF0YV92YWx1ZXM7CitEUk9QIFRBQkxFIHNv bWVfZGF0YTsKK0RST1AgRlVOQ1RJT04gaW5zZXJ0X2RhdGEoaW50LCB0ZXh0KTsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jvd3NlY3VyaXR5LnNxbCBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3Jvd3NlY3VyaXR5LnNxbAppbmRleCBmNjFkYmJmOTU4MS4uOWZlOGY0YjA1OWMgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jvd3NlY3VyaXR5LnNxbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9yb3dzZWN1cml0eS5zcWwKQEAgLTIzMDcsNiArMjMwNyw0NyBAQCBE Uk9QIEZVTkNUSU9OIHJsc19mKCk7CiBEUk9QIFZJRVcgcmxzX3Y7CiBEUk9QIFRBQkxFIHJsc190 OwogCistLSBSTFMgY2hhbmdlcyBpbnZhbGlkYXRlIGNhY2hlZCBmdW5jdGlvbiBwbGFucworY3Jl YXRlIHRhYmxlIHJsc190IChjIHRleHQpOworY3JlYXRlIHRhYmxlIHRlc3RfdCAoYyB0ZXh0KTsK KworaW5zZXJ0IGludG8gcmxzX3QgdmFsdWVzICgnYScpLCAoJ2InKSwgKCdjJyksICgnZCcpOwor aW5zZXJ0IGludG8gdGVzdF90IHZhbHVlcyAoJ2EnKSwgKCdiJyk7CithbHRlciB0YWJsZSBybHNf dCBlbmFibGUgcm93IGxldmVsIHNlY3VyaXR5OworZ3JhbnQgc2VsZWN0IG9uIHJsc190IHRvIHJl Z3Jlc3NfcmxzX2FsaWNlOworZ3JhbnQgc2VsZWN0IG9uIHRlc3RfdCB0byByZWdyZXNzX3Jsc19h bGljZTsKK2NyZWF0ZSBwb2xpY3kgcDEgb24gcmxzX3QgZm9yIHNlbGVjdCB0byByZWdyZXNzX3Js c19hbGljZSB1c2luZyAoYyA9IGN1cnJlbnRfc2V0dGluZygncmxzX3Rlc3QuYmxhaCcpKTsKKwor LS0gRnVuY3Rpb24gY2hhbmdlcyByb3dfc2VjdXJpdHkgc2V0dGluZyBhbmQgc28gaW52YWxpZGF0 ZXMgcGxhbgorY3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gcmxzX2YodGV4dCkKKyBSRVRVUk5T IHRleHQKKyBMQU5HVUFHRSBzcWwKK0JFR0lOIEFUT01JQworIHNlbGVjdCBzZXRfY29uZmlnKCdy bHNfdGVzdC5ibGFoJywgJDEsIHRydWUpIHx8IHNldF9jb25maWcoJ3Jvd19zZWN1cml0eScsICdm YWxzZScsIHRydWUpIHx8IHN0cmluZ19hZ2coYywgJywnIG9yZGVyIGJ5IGMpIGZyb20gcmxzX3Q7 CitFTkQ7CisKKy0tIFRhYmxlIG93bmVyIGJ5cGFzc2VzIFJMUworc2VsZWN0IHJsc19mKGMpIGZy b20gdGVzdF90IG9yZGVyIGJ5IHJsc19mOworc2V0IHJvbGUgcmVncmVzc19ybHNfYWxpY2U7Cist LSBGb3IgY2FzdWFsIHVzZXIgY2hhbmdlcyBpbiByb3dfc2VjdXJpdHkgc2V0dGluZyBsZWFkCist LSB0byBlcnJvciBkdXJpbmcgcXVlcnkgcmV3cml0ZQorc2VsZWN0IHJsc19mKGMpIGZyb20gdGVz dF90IG9yZGVyIGJ5IHJsc19mOworcmVzZXQgcm9sZTsKKworc2V0IHBsYW5fY2FjaGVfbW9kZSB0 byBmb3JjZV9nZW5lcmljX3BsYW47CistLSBUYWJsZSBvd25lciBieXBhc3NlcyBSTFMsIGJ1dCBj YWNoZWQgcGxhbiBpbnZhbGlkYXRlcworc2VsZWN0IHJsc19mKGMpIGZyb20gdGVzdF90IG9yZGVy IGJ5IHJsc19mOworLS0gRm9yIGNhc3VhbCB1c2VyIGNoYW5nZXMgaW4gcm93X3NlY3VyaXR5IHNl dHRpbmcgbGVhZAorLS0gdG8gcGxhbiBpbnZhbGlkYXRpb24gYW5kIGVycm9yIGR1cmluZyBxdWVy eSByZXdyaXRlCitzZXQgcm9sZSByZWdyZXNzX3Jsc19hbGljZTsKK3NlbGVjdCBybHNfZihjKSBm cm9tIHRlc3RfdCBvcmRlciBieSBybHNfZjsKK3Jlc2V0IHJvbGU7CityZXNldCBwbGFuX2NhY2hl X21vZGU7CityZXNldCBybHNfdGVzdC5ibGFoOworCitkcm9wIGZ1bmN0aW9uIHJsc19mOworZHJv cCB0YWJsZSBybHNfdCwgdGVzdF90OworCiAtLQogLS0gQ2xlYW4gdXAgb2JqZWN0cwogLS0KZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3J1bGVzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3J1bGVzLnNxbAppbmRleCBmZGQzZmYxZDE2MS4uNTA1NDQ5NDUyZWUgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3J1bGVzLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9ydWxlcy5zcWwKQEAgLTE0MzIsMyArMTQzMiwyNyBAQCBEUk9QIFRBQkxFIHJ1bGV0ZXN0 X3QyOwogRFJPUCBUQUJMRSBydWxldGVzdF90MTsKIAogRFJPUCBVU0VSIHJlZ3Jlc3NfcnVsZV91 c2VyMTsKKworLS0gVGVzdCB0aGF0IFNRTCBmdW5jdGlvbnMgY29ycmVjdGx5IGhhbmRsZSBETyBO T1RISU5HIHJ1bGUKK0NSRUFURSBUQUJMRSBzb21lX2RhdGEgKGkgaW50LCBkYXRhIHRleHQpOwor Q1JFQVRFIFRBQkxFIHNvbWVfZGF0YV92YWx1ZXMgKGkgaW50LCBkYXRhIHRleHQpOworCitDUkVB VEUgRlVOQ1RJT04gaW5zZXJ0X2RhdGEoaSBpbnQsIGRhdGEgdGV4dCkKK1JFVFVSTlMgSU5UCitB UyAkJAorSU5TRVJUIElOVE8gc29tZV9kYXRhIFZBTFVFUyAoJDEsICQyKTsKK1NFTEVDVCAxOwor JCQgTEFOR1VBR0UgU1FMOworCitJTlNFUlQgSU5UTyBzb21lX2RhdGFfdmFsdWVzIFNFTEVDVCBp ICwgJ2RhdGEnfHwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMCkgaTsKKworQ1JFQVRFIFJV TEUgc29tZV9kYXRhX25vaW5zZXJ0IEFTIE9OIElOU0VSVCBUTyBzb21lX2RhdGEgRE8gSU5TVEVB RCBOT1RISU5HOworCitTRUxFQ1QgaW5zZXJ0X2RhdGEoaSwgZGF0YSkgRlJPTSBzb21lX2RhdGFf dmFsdWVzOworCitTRUxFQ1QgKiBGUk9NIHNvbWVfZGF0YSBPUkRFUiBCWSBpOworCitEUk9QIFJV TEUgc29tZV9kYXRhX25vaW5zZXJ0IE9OIHNvbWVfZGF0YTsKK0RST1AgVEFCTEUgc29tZV9kYXRh X3ZhbHVlczsKK0RST1AgVEFCTEUgc29tZV9kYXRhOworRFJPUCBGVU5DVElPTiBpbnNlcnRfZGF0 YShpbnQsIHRleHQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA5NDQyYTQ4NDFhYS4u Y2IwZGRlNTRiYTEgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0yNjA1LDYgKzI2MDUs OCBAQCBTUUxGdW5jdGlvbkNhY2hlCiBTUUxGdW5jdGlvbkNhY2hlUHRyCiBTUUxGdW5jdGlvblBh cnNlSW5mbwogU1FMRnVuY3Rpb25QYXJzZUluZm9QdHIKK1NRTEZ1bmN0aW9uUGxhbkVudHJ5CitT UUxGdW5jdGlvblBsYW5LZXkKIFNRTFZhbHVlRnVuY3Rpb24KIFNRTFZhbHVlRnVuY3Rpb25PcAog U1NMCi0tIAoyLjQzLjAKCg== --=_9edd4529df066ffc45b0306aea50116b Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0001-Support-cached-plans-that-work-from-a-parse-analyzed.patch Content-Disposition: attachment; filename=0001-Support-cached-plans-that-work-from-a-parse-analyzed.patch; size=17359 RnJvbSBkYzRlYTU5OWU3OGUxNGUzOTI5ZDFhNDgwMDg0ZTc0ZTRlMzhkMGM5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUb20gTGFuZSA8dGdsQHNzcy5wZ2gucGEudXM+CkRhdGU6IFRo dSwgMjcgTWFyIDIwMjUgMDg6NTg6MzMgKzAzMDAKU3ViamVjdDogW1BBVENIIDEvM10gU3VwcG9y dCBjYWNoZWQgcGxhbnMgdGhhdCB3b3JrIGZyb20gYSBwYXJzZS1hbmFseXplZAogUXVlcnkuCgpV cCB0byBub3csIHBsYW5jYWNoZS5jIGRlYWx0IG9ubHkgd2l0aCByYXcgcGFyc2UgdHJlZXMgYXMg dGhlCnN0YXJ0aW5nIHBvaW50IGZvciBhIGNhY2hlZCBwbGFuLiAgSG93ZXZlciwgd2UnZCBsaWtl IHRvIHVzZQp0aGlzIGluZnJhc3RydWN0dXJlIGZvciBTUUwgZnVuY3Rpb25zLCBhbmQgaW4gdGhl IGNhc2Ugb2YgYQpuZXctc3R5bGUgU1FMIGZ1bmN0aW9uIHdlJ2xsIG9ubHkgaGF2ZSB0aGUgc3Rv cmVkIHF1ZXJ5dHJlZSwKd2hpY2ggY29ycmVzcG9uZHMgdG8gYW4gYW5hbHl6ZWQtYnV0LW5vdC1y ZXdyaXR0ZW4gUXVlcnkuCgpGb3J0dW5hdGVseSwgd2UgY2FuIG1ha2UgcGxhbmNhY2hlLmMgaGFu ZGxlIHRoYXQgc2NlbmFyaW8Kd2l0aCBvbmx5IG1pbm9yIG1vZGlmaWNhdGlvbnM7IHRoZSBiaWdn ZXN0IGNoYW5nZSBpcyBpbgpSZXZhbGlkYXRlQ2FjaGVkUXVlcnkoKSB3aGVyZSB3ZSB3aWxsIG5l ZWQgdG8gYXBwbHkgb25seQpwZ19yZXdyaXRlX3F1ZXJ5IG5vdCBwZ19hbmFseXplX2FuZF9yZXdy aXRlLgoKVGhpcyBwYXRjaCBqdXN0IGluc3RhbGxzIHRoZSBpbmZyYXN0cnVjdHVyZTsgdGhlcmUn cyBubwpjYWxsZXIgYXMgeWV0LgotLS0KIHNyYy9iYWNrZW5kL3BhcnNlci9hbmFseXplLmMgICAg ICAgIHwgIDM5ICsrKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jIHwg MTU4ICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KIHNyYy9pbmNsdWRlL3BhcnNlci9hbmFs eXplLmggICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oICAgICAg IHwgIDIzICsrKy0KIDQgZmlsZXMgY2hhbmdlZCwgMTc5IGluc2VydGlvbnMoKyksIDQyIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXplLmMgYi9zcmMv YmFja2VuZC9wYXJzZXIvYW5hbHl6ZS5jCmluZGV4IDc2ZjU4YjNhY2EzLi4xZjRkNmFkZGE1MiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYworKysgYi9zcmMvYmFja2Vu ZC9wYXJzZXIvYW5hbHl6ZS5jCkBAIC01OTEsNiArNTkxLDQ1IEBAIGFuYWx5emVfcmVxdWlyZXNf c25hcHNob3QoUmF3U3RtdCAqcGFyc2VUcmVlKQogCXJldHVybiBzdG10X3JlcXVpcmVzX3BhcnNl X2FuYWx5c2lzKHBhcnNlVHJlZSk7CiB9CiAKKy8qCisgKiBxdWVyeV9yZXF1aXJlc19yZXdyaXRl X3BsYW4oKQorICoJCVJldHVybnMgdHJ1ZSBpZiByZXdyaXRpbmcgb3IgcGxhbm5pbmcgaXMgbm9u LXRyaXZpYWwgZm9yIHRoaXMgUXVlcnkuCisgKgorICogVGhpcyBpcyBtdWNoIGxpa2Ugc3RtdF9y ZXF1aXJlc19wYXJzZV9hbmFseXNpcygpLCBidXQgYXBwbGllcyBvbmUgc3RlcAorICogZnVydGhl ciBkb3duIHRoZSBwaXBlbGluZS4KKyAqCisgKiBXZSBkbyBub3QgcHJvdmlkZSBhbiBlcXVpdmFs ZW50IG9mIGFuYWx5emVfcmVxdWlyZXNfc25hcHNob3QoKTogY2FsbGVycworICogY2FuIGFzc3Vt ZSB0aGF0IGFueSByZXdyaXRpbmcgb3IgcGxhbm5pbmcgYWN0aXZpdHkgbmVlZHMgYSBzbmFwc2hv dC4KKyAqLworYm9vbAorcXVlcnlfcmVxdWlyZXNfcmV3cml0ZV9wbGFuKFF1ZXJ5ICpxdWVyeSkK K3sKKwlib29sCQlyZXN1bHQ7CisKKwlpZiAocXVlcnktPmNvbW1hbmRUeXBlICE9IENNRF9VVElM SVRZKQorCXsKKwkJLyogQWxsIG9wdGltaXphYmxlIHN0YXRlbWVudHMgcmVxdWlyZSByZXdyaXRp bmcvcGxhbm5pbmcgKi8KKwkJcmVzdWx0ID0gdHJ1ZTsKKwl9CisJZWxzZQorCXsKKwkJLyogVGhp cyBsaXN0IHNob3VsZCBtYXRjaCBzdG10X3JlcXVpcmVzX3BhcnNlX2FuYWx5c2lzKCkgKi8KKwkJ c3dpdGNoIChub2RlVGFnKHF1ZXJ5LT51dGlsaXR5U3RtdCkpCisJCXsKKwkJCWNhc2UgVF9EZWNs YXJlQ3Vyc29yU3RtdDoKKwkJCWNhc2UgVF9FeHBsYWluU3RtdDoKKwkJCWNhc2UgVF9DcmVhdGVU YWJsZUFzU3RtdDoKKwkJCWNhc2UgVF9DYWxsU3RtdDoKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJ CWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyZXN1bHQgPSBmYWxzZTsKKwkJCQlicmVhazsKKwkJ fQorCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCiAvKgogICogdHJhbnNmb3JtRGVsZXRlU3RtdCAt CiAgKgkgIHRyYW5zZm9ybXMgYSBEZWxldGUgU3RhdGVtZW50CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3Bs YW5jYWNoZS5jCmluZGV4IDZjMjk3OWQ1YzgyLi41OTgzOTI3YTRjMiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvcGxhbmNhY2hlLmMKQEAgLTE0LDcgKzE0LDcgQEAKICAqIENhY2hlIGludmFsaWRhdGlv biBpcyBkcml2ZW4gb2ZmIHNpbnZhbCBldmVudHMuICBBbnkgQ2FjaGVkUGxhblNvdXJjZQogICog dGhhdCBtYXRjaGVzIHRoZSBldmVudCBpcyBtYXJrZWQgaW52YWxpZCwgYXMgaXMgaXRzIGdlbmVy aWMgQ2FjaGVkUGxhbgogICogaWYgaXQgaGFzIG9uZS4gIFdoZW4gKGFuZCBpZikgdGhlIG5leHQg ZGVtYW5kIGZvciBhIGNhY2hlZCBwbGFuIG9jY3VycywKLSAqIHBhcnNlIGFuYWx5c2lzIGFuZCBy ZXdyaXRlIGlzIHJlcGVhdGVkIHRvIGJ1aWxkIGEgbmV3IHZhbGlkIHF1ZXJ5IHRyZWUsCisgKiBw YXJzZSBhbmFseXNpcyBhbmQvb3IgcmV3cml0ZSBpcyByZXBlYXRlZCB0byBidWlsZCBhIG5ldyB2 YWxpZCBxdWVyeSB0cmVlLAogICogYW5kIHRoZW4gcGxhbm5pbmcgaXMgcGVyZm9ybWVkIGFzIG5v cm1hbC4gIFdlIGFsc28gZm9yY2UgcmUtYW5hbHlzaXMgYW5kCiAgKiByZS1wbGFubmluZyBpZiB0 aGUgYWN0aXZlIHNlYXJjaF9wYXRoIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBwcmV2aW91cyB0aW1l CiAgKiBvciwgaWYgUkxTIGlzIGludm9sdmVkLCBpZiB0aGUgdXNlciBjaGFuZ2VzIG9yIHRoZSBS TFMgZW52aXJvbm1lbnQgY2hhbmdlcy4KQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlICJub2Rl cy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCiAjaW5jbHVk ZSAicGFyc2VyL2FuYWx5emUuaCIKKyNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAidGNvcC9wcXVlcnkuaCIKICNp bmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKQEAgLTc0LDE4ICs3NSw2IEBACiAjaW5jbHVkZSAidXRp bHMvc3lzY2FjaGUuaCIKIAogCi0vKgotICogV2UgbXVzdCBza2lwICJvdmVyaGVhZCIgb3BlcmF0 aW9ucyB0aGF0IGludm9sdmUgZGF0YWJhc2UgYWNjZXNzIHdoZW4gdGhlCi0gKiBjYWNoZWQgcGxh bidzIHN1YmplY3Qgc3RhdGVtZW50IGlzIGEgdHJhbnNhY3Rpb24gY29udHJvbCBjb21tYW5kIG9y IG9uZQotICogdGhhdCByZXF1aXJlcyBhIHNuYXBzaG90IG5vdCB0byBiZSBzZXQgeWV0IChzdWNo IGFzIFNFVCBvciBMT0NLKS4gIE1vcmUKLSAqIGdlbmVyYWxseSwgc3RhdGVtZW50cyB0aGF0IGRv IG5vdCByZXF1aXJlIHBhcnNlIGFuYWx5c2lzL3Jld3JpdGUvcGxhbgotICogYWN0aXZpdHkgbmV2 ZXIgbmVlZCB0byBiZSByZXZhbGlkYXRlZCwgc28gd2UgY2FuIHRyZWF0IHRoZW0gYWxsIGxpa2Ug dGhhdC4KLSAqIEZvciB0aGUgY29udmVuaWVuY2Ugb2YgcG9zdGdyZXMuYywgdHJlYXQgZW1wdHkg c3RhdGVtZW50cyB0aGF0IHdheSB0b28uCi0gKi8KLSNkZWZpbmUgU3RtdFBsYW5SZXF1aXJlc1Jl dmFsaWRhdGlvbihwbGFuc291cmNlKSAgXAotCSgocGxhbnNvdXJjZSktPnJhd19wYXJzZV90cmVl ICE9IE5VTEwgJiYgXAotCSBzdG10X3JlcXVpcmVzX3BhcnNlX2FuYWx5c2lzKChwbGFuc291cmNl KS0+cmF3X3BhcnNlX3RyZWUpKQotCiAvKgogICogVGhpcyBpcyB0aGUgaGVhZCBvZiB0aGUgYmFj a2VuZCdzIGxpc3Qgb2YgInNhdmVkIiBDYWNoZWRQbGFuU291cmNlcyAoaS5lLiwKICAqIHRob3Nl IHRoYXQgYXJlIGluIGxvbmctbGl2ZWQgc3RvcmFnZSBhbmQgYXJlIGV4YW1pbmVkIGZvciBzaW52 YWwgZXZlbnRzKS4KQEAgLTEwMCw2ICs4OSw4IEBAIHN0YXRpYyBkbGlzdF9oZWFkIHNhdmVkX3Bs YW5fbGlzdCA9IERMSVNUX1NUQVRJQ19JTklUKHNhdmVkX3BsYW5fbGlzdCk7CiBzdGF0aWMgZGxp c3RfaGVhZCBjYWNoZWRfZXhwcmVzc2lvbl9saXN0ID0gRExJU1RfU1RBVElDX0lOSVQoY2FjaGVk X2V4cHJlc3Npb25fbGlzdCk7CiAKIHN0YXRpYyB2b2lkIFJlbGVhc2VHZW5lcmljUGxhbihDYWNo ZWRQbGFuU291cmNlICpwbGFuc291cmNlKTsKK3N0YXRpYyBib29sIFN0bXRQbGFuUmVxdWlyZXNS ZXZhbGlkYXRpb24oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSk7CitzdGF0aWMgYm9vbCBC dWlsZGluZ1BsYW5SZXF1aXJlc1NuYXBzaG90KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2Up Owogc3RhdGljIExpc3QgKlJldmFsaWRhdGVDYWNoZWRRdWVyeShDYWNoZWRQbGFuU291cmNlICpw bGFuc291cmNlLAogCQkJCQkJCQkgICBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwKIAkJCQkJ CQkJICAgYm9vbCByZWxlYXNlX2dlbmVyaWMpOwpAQCAtMTY2LDcgKzE1Nyw3IEBAIEluaXRQbGFu Q2FjaGUodm9pZCkKIH0KIAogLyoKLSAqIENyZWF0ZUNhY2hlZFBsYW46IGluaXRpYWxseSBjcmVh dGUgYSBwbGFuIGNhY2hlIGVudHJ5LgorICogQ3JlYXRlQ2FjaGVkUGxhbjogaW5pdGlhbGx5IGNy ZWF0ZSBhIHBsYW4gY2FjaGUgZW50cnkgZm9yIGEgcmF3IHBhcnNlIHRyZWUuCiAgKgogICogQ3Jl YXRpb24gb2YgYSBjYWNoZWQgcGxhbiBpcyBkaXZpZGVkIGludG8gdHdvIHN0ZXBzLCBDcmVhdGVD YWNoZWRQbGFuIGFuZAogICogQ29tcGxldGVDYWNoZWRQbGFuLiAgQ3JlYXRlQ2FjaGVkUGxhbiBz aG91bGQgYmUgY2FsbGVkIGFmdGVyIHJ1bm5pbmcgdGhlCkBAIC0yMjAsNiArMjExLDcgQEAgQ3Jl YXRlQ2FjaGVkUGxhbihSYXdTdG10ICpyYXdfcGFyc2VfdHJlZSwKIAlwbGFuc291cmNlID0gKENh Y2hlZFBsYW5Tb3VyY2UgKikgcGFsbG9jMChzaXplb2YoQ2FjaGVkUGxhblNvdXJjZSkpOwogCXBs YW5zb3VyY2UtPm1hZ2ljID0gQ0FDSEVEUExBTlNPVVJDRV9NQUdJQzsKIAlwbGFuc291cmNlLT5y YXdfcGFyc2VfdHJlZSA9IGNvcHlPYmplY3QocmF3X3BhcnNlX3RyZWUpOworCXBsYW5zb3VyY2Ut PmFuYWx5emVkX3BhcnNlX3RyZWUgPSBOVUxMOwogCXBsYW5zb3VyY2UtPnF1ZXJ5X3N0cmluZyA9 IHBzdHJkdXAocXVlcnlfc3RyaW5nKTsKIAlNZW1vcnlDb250ZXh0U2V0SWRlbnRpZmllcihzb3Vy Y2VfY29udGV4dCwgcGxhbnNvdXJjZS0+cXVlcnlfc3RyaW5nKTsKIAlwbGFuc291cmNlLT5jb21t YW5kVGFnID0gY29tbWFuZFRhZzsKQEAgLTI1NSw2ICsyNDcsMzQgQEAgQ3JlYXRlQ2FjaGVkUGxh bihSYXdTdG10ICpyYXdfcGFyc2VfdHJlZSwKIAlyZXR1cm4gcGxhbnNvdXJjZTsKIH0KIAorLyoK KyAqIENyZWF0ZUNhY2hlZFBsYW5Gb3JRdWVyeTogaW5pdGlhbGx5IGNyZWF0ZSBhIHBsYW4gY2Fj aGUgZW50cnkgZm9yIGEgUXVlcnkuCisgKgorICogVGhpcyBpcyB1c2VkIGluIHRoZSBzYW1lIHdh eSBhcyBDcmVhdGVDYWNoZWRQbGFuLCBleGNlcHQgdGhhdCB0aGUgc291cmNlCisgKiBxdWVyeSBo YXMgYWxyZWFkeSBiZWVuIHRocm91Z2ggcGFyc2UgYW5hbHlzaXMsIGFuZCB0aGUgcGxhbmNhY2hl IHdpbGwgbmV2ZXIKKyAqIHRyeSB0byByZS1kbyB0aGF0IHN0ZXAuCisgKgorICogQ3VycmVudGx5 IHRoaXMgaXMgdXNlZCBvbmx5IGZvciBuZXctc3R5bGUgU1FMIGZ1bmN0aW9ucywgd2hlcmUgd2Ug aGF2ZSBhCisgKiBRdWVyeSBmcm9tIHRoZSBmdW5jdGlvbidzIHByb3NxbGJvZHksIGJ1dCBubyBz b3VyY2UgdGV4dC4gIFRoZSBxdWVyeV9zdHJpbmcKKyAqIGlzIHR5cGljYWxseSBlbXB0eSwgYnV0 IGlzIHJlcXVpcmVkIGFueXdheS4KKyAqLworQ2FjaGVkUGxhblNvdXJjZSAqCitDcmVhdGVDYWNo ZWRQbGFuRm9yUXVlcnkoUXVlcnkgKmFuYWx5emVkX3BhcnNlX3RyZWUsCisJCQkJCQkgY29uc3Qg Y2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQkJIENvbW1hbmRUYWcgY29tbWFuZFRhZykKK3sKKwlD YWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlOworCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCisJ LyogUmF0aGVyIHRoYW4gZHVwbGljYXRpbmcgQ3JlYXRlQ2FjaGVkUGxhbiwganVzdCBkbyB0aGlz OiAqLworCXBsYW5zb3VyY2UgPSBDcmVhdGVDYWNoZWRQbGFuKE5VTEwsIHF1ZXJ5X3N0cmluZywg Y29tbWFuZFRhZyk7CisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBsYW5zb3VyY2Ut PmNvbnRleHQpOworCXBsYW5zb3VyY2UtPmFuYWx5emVkX3BhcnNlX3RyZWUgPSBjb3B5T2JqZWN0 KGFuYWx5emVkX3BhcnNlX3RyZWUpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwor CisJcmV0dXJuIHBsYW5zb3VyY2U7Cit9CisKIC8qCiAgKiBDcmVhdGVPbmVTaG90Q2FjaGVkUGxh bjogaW5pdGlhbGx5IGNyZWF0ZSBhIG9uZS1zaG90IHBsYW4gY2FjaGUgZW50cnkuCiAgKgpAQCAt Mjg5LDYgKzMwOSw3IEBAIENyZWF0ZU9uZVNob3RDYWNoZWRQbGFuKFJhd1N0bXQgKnJhd19wYXJz ZV90cmVlLAogCXBsYW5zb3VyY2UgPSAoQ2FjaGVkUGxhblNvdXJjZSAqKSBwYWxsb2MwKHNpemVv ZihDYWNoZWRQbGFuU291cmNlKSk7CiAJcGxhbnNvdXJjZS0+bWFnaWMgPSBDQUNIRURQTEFOU09V UkNFX01BR0lDOwogCXBsYW5zb3VyY2UtPnJhd19wYXJzZV90cmVlID0gcmF3X3BhcnNlX3RyZWU7 CisJcGxhbnNvdXJjZS0+YW5hbHl6ZWRfcGFyc2VfdHJlZSA9IE5VTEw7CiAJcGxhbnNvdXJjZS0+ cXVlcnlfc3RyaW5nID0gcXVlcnlfc3RyaW5nOwogCXBsYW5zb3VyY2UtPmNvbW1hbmRUYWcgPSBj b21tYW5kVGFnOwogCXBsYW5zb3VyY2UtPnBhcmFtX3R5cGVzID0gTlVMTDsKQEAgLTU2Niw2ICs1 ODcsNDIgQEAgUmVsZWFzZUdlbmVyaWNQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2Up CiAJfQogfQogCisvKgorICogV2UgbXVzdCBza2lwICJvdmVyaGVhZCIgb3BlcmF0aW9ucyB0aGF0 IGludm9sdmUgZGF0YWJhc2UgYWNjZXNzIHdoZW4gdGhlCisgKiBjYWNoZWQgcGxhbidzIHN1Ympl Y3Qgc3RhdGVtZW50IGlzIGEgdHJhbnNhY3Rpb24gY29udHJvbCBjb21tYW5kIG9yIG9uZQorICog dGhhdCByZXF1aXJlcyBhIHNuYXBzaG90IG5vdCB0byBiZSBzZXQgeWV0IChzdWNoIGFzIFNFVCBv ciBMT0NLKS4gIE1vcmUKKyAqIGdlbmVyYWxseSwgc3RhdGVtZW50cyB0aGF0IGRvIG5vdCByZXF1 aXJlIHBhcnNlIGFuYWx5c2lzL3Jld3JpdGUvcGxhbgorICogYWN0aXZpdHkgbmV2ZXIgbmVlZCB0 byBiZSByZXZhbGlkYXRlZCwgc28gd2UgY2FuIHRyZWF0IHRoZW0gYWxsIGxpa2UgdGhhdC4KKyAq IEZvciB0aGUgY29udmVuaWVuY2Ugb2YgcG9zdGdyZXMuYywgdHJlYXQgZW1wdHkgc3RhdGVtZW50 cyB0aGF0IHdheSB0b28uCisgKi8KK3N0YXRpYyBib29sCitTdG10UGxhblJlcXVpcmVzUmV2YWxp ZGF0aW9uKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpCit7CisJaWYgKHBsYW5zb3VyY2Ut PnJhd19wYXJzZV90cmVlICE9IE5VTEwpCisJCXJldHVybiBzdG10X3JlcXVpcmVzX3BhcnNlX2Fu YWx5c2lzKHBsYW5zb3VyY2UtPnJhd19wYXJzZV90cmVlKTsKKwllbHNlIGlmIChwbGFuc291cmNl LT5hbmFseXplZF9wYXJzZV90cmVlICE9IE5VTEwpCisJCXJldHVybiBxdWVyeV9yZXF1aXJlc19y ZXdyaXRlX3BsYW4ocGxhbnNvdXJjZS0+YW5hbHl6ZWRfcGFyc2VfdHJlZSk7CisJLyogZW1wdHkg cXVlcnkgbmV2ZXIgbmVlZHMgcmV2YWxpZGF0aW9uICovCisJcmV0dXJuIGZhbHNlOworfQorCisv KgorICogRGV0ZXJtaW5lIGlmIGNyZWF0aW5nIGEgcGxhbiBmb3IgdGhpcyBDYWNoZWRQbGFuU291 cmNlIHJlcXVpcmVzIGEgc25hcHNob3QuCisgKiBJbiBmYWN0IHRoaXMgZnVuY3Rpb24gbWF0Y2hl cyBTdG10UGxhblJlcXVpcmVzUmV2YWxpZGF0aW9uKCksIGJ1dCB3ZSB3YW50CisgKiB0byBwcmVz ZXJ2ZSB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBzdG10X3JlcXVpcmVzX3BhcnNlX2FuYWx5c2lz KCkgYW5kCisgKiBhbmFseXplX3JlcXVpcmVzX3NuYXBzaG90KCkuCisgKi8KK3N0YXRpYyBib29s CitCdWlsZGluZ1BsYW5SZXF1aXJlc1NuYXBzaG90KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3Vy Y2UpCit7CisJaWYgKHBsYW5zb3VyY2UtPnJhd19wYXJzZV90cmVlICE9IE5VTEwpCisJCXJldHVy biBhbmFseXplX3JlcXVpcmVzX3NuYXBzaG90KHBsYW5zb3VyY2UtPnJhd19wYXJzZV90cmVlKTsK KwllbHNlIGlmIChwbGFuc291cmNlLT5hbmFseXplZF9wYXJzZV90cmVlICE9IE5VTEwpCisJCXJl dHVybiBxdWVyeV9yZXF1aXJlc19yZXdyaXRlX3BsYW4ocGxhbnNvdXJjZS0+YW5hbHl6ZWRfcGFy c2VfdHJlZSk7CisJLyogZW1wdHkgcXVlcnkgbmV2ZXIgbmVlZHMgYSBzbmFwc2hvdCAqLworCXJl dHVybiBmYWxzZTsKK30KKwogLyoKICAqIFJldmFsaWRhdGVDYWNoZWRRdWVyeTogZW5zdXJlIHZh bGlkaXR5IG9mIGFuYWx5emVkLWFuZC1yZXdyaXR0ZW4gcXVlcnkgdHJlZS4KICAqCkBAIC01OTIs NyArNjQ5LDYgQEAgUmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5z b3VyY2UsCiAJCQkJCSAgYm9vbCByZWxlYXNlX2dlbmVyaWMpCiB7CiAJYm9vbAkJc25hcHNob3Rf c2V0OwotCVJhd1N0bXQgICAgKnJhd3RyZWU7CiAJTGlzdAkgICAqdGxpc3Q7CQkJLyogdHJhbnNp ZW50IHF1ZXJ5LXRyZWUgbGlzdCAqLwogCUxpc3QJICAgKnFsaXN0OwkJCS8qIHBlcm1hbmVudCBx dWVyeS10cmVlIGxpc3QgKi8KIAlUdXBsZURlc2MJcmVzdWx0RGVzYzsKQEAgLTYxNSw3ICs2NzEs MTAgQEAgUmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2Us CiAJLyoKIAkgKiBJZiB0aGUgcXVlcnkgaXMgY3VycmVudGx5IHZhbGlkLCB3ZSBzaG91bGQgaGF2 ZSBhIHNhdmVkIHNlYXJjaF9wYXRoIC0tLQogCSAqIGNoZWNrIHRvIHNlZSBpZiB0aGF0IG1hdGNo ZXMgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuICBJZiBub3QsIHdlIHdhbnQKLQkgKiB0byBmb3Jj ZSByZXBsYW4uCisJICogdG8gZm9yY2UgcmVwbGFuLiAgKFdlIGNvdWxkIGFsbW9zdCBpZ25vcmUg dGhpcyBjb25zaWRlcmF0aW9uIHdoZW4KKwkgKiB3b3JraW5nIGZyb20gYW4gYW5hbHl6ZWQgcGFy c2UgdHJlZTsgYnV0IHRoZXJlIGFyZSBzY2VuYXJpb3Mgd2hlcmUKKwkgKiBwbGFubmluZyBjYW4g aGF2ZSBzZWFyY2hfcGF0aC1kZXBlbmRlbnQgcmVzdWx0cywgZm9yIGV4YW1wbGUgaWYgaXQKKwkg KiBpbmxpbmVzIGFuIG9sZC1zdHlsZSBTUUwgZnVuY3Rpb24uKQogCSAqLwogCWlmIChwbGFuc291 cmNlLT5pc192YWxpZCkKIAl7CkBAIC02NjIsOSArNzIxLDkgQEAgUmV2YWxpZGF0ZUNhY2hlZFF1 ZXJ5KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCiAJfQogCiAJLyoKLQkgKiBEaXNjYXJk IHRoZSBuby1sb25nZXItdXNlZnVsIHF1ZXJ5IHRyZWUuICAoTm90ZTogd2UgZG9uJ3Qgd2FudCB0 byBkbwotCSAqIHRoaXMgYW55IGVhcmxpZXIsIGVsc2Ugd2UnZCBub3QgaGF2ZSBiZWVuIGFibGUg dG8gcmVsZWFzZSBsb2NrcwotCSAqIGNvcnJlY3RseSBpbiB0aGUgcmFjZSBjb25kaXRpb24gY2Fz ZS4pCisJICogRGlzY2FyZCB0aGUgbm8tbG9uZ2VyLXVzZWZ1bCByZXdyaXR0ZW4gcXVlcnkgdHJl ZS4gIChOb3RlOiB3ZSBkb24ndAorCSAqIHdhbnQgdG8gZG8gdGhpcyBhbnkgZWFybGllciwgZWxz ZSB3ZSdkIG5vdCBoYXZlIGJlZW4gYWJsZSB0byByZWxlYXNlCisJICogbG9ja3MgY29ycmVjdGx5 IGluIHRoZSByYWNlIGNvbmRpdGlvbiBjYXNlLikKIAkgKi8KIAlwbGFuc291cmNlLT5pc192YWxp ZCA9IGZhbHNlOwogCXBsYW5zb3VyY2UtPnF1ZXJ5X2xpc3QgPSBOSUw7CkBAIC03MTEsMjUgKzc3 MCw0OCBAQCBSZXZhbGlkYXRlQ2FjaGVkUXVlcnkoQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJj ZSwKIAl9CiAKIAkvKgotCSAqIFJ1biBwYXJzZSBhbmFseXNpcyBhbmQgcnVsZSByZXdyaXRpbmcu ICBUaGUgcGFyc2VyIHRlbmRzIHRvIHNjcmliYmxlIG9uCi0JICogaXRzIGlucHV0LCBzbyB3ZSBt dXN0IGNvcHkgdGhlIHJhdyBwYXJzZSB0cmVlIHRvIHByZXZlbnQgY29ycnVwdGlvbiBvZgotCSAq IHRoZSBjYWNoZS4KKwkgKiBSdW4gcGFyc2UgYW5hbHlzaXMgKGlmIG5lZWRlZCkgYW5kIHJ1bGUg cmV3cml0aW5nLgogCSAqLwotCXJhd3RyZWUgPSBjb3B5T2JqZWN0KHBsYW5zb3VyY2UtPnJhd19w YXJzZV90cmVlKTsKLQlpZiAocmF3dHJlZSA9PSBOVUxMKQotCQl0bGlzdCA9IE5JTDsKLQllbHNl IGlmIChwbGFuc291cmNlLT5wYXJzZXJTZXR1cCAhPSBOVUxMKQotCQl0bGlzdCA9IHBnX2FuYWx5 emVfYW5kX3Jld3JpdGVfd2l0aGNiKHJhd3RyZWUsCi0JCQkJCQkJCQkJCSAgcGxhbnNvdXJjZS0+ cXVlcnlfc3RyaW5nLAotCQkJCQkJCQkJCQkgIHBsYW5zb3VyY2UtPnBhcnNlclNldHVwLAotCQkJ CQkJCQkJCQkgIHBsYW5zb3VyY2UtPnBhcnNlclNldHVwQXJnLAotCQkJCQkJCQkJCQkgIHF1ZXJ5 RW52KTsKKwlpZiAocGxhbnNvdXJjZS0+cmF3X3BhcnNlX3RyZWUgIT0gTlVMTCkKKwl7CisJCS8q IFNvdXJjZSBpcyByYXcgcGFyc2UgdHJlZSAqLworCQlSYXdTdG10ICAgICpyYXd0cmVlOworCisJ CS8qCisJCSAqIFRoZSBwYXJzZXIgdGVuZHMgdG8gc2NyaWJibGUgb24gaXRzIGlucHV0LCBzbyB3 ZSBtdXN0IGNvcHkgdGhlIHJhdworCQkgKiBwYXJzZSB0cmVlIHRvIHByZXZlbnQgY29ycnVwdGlv biBvZiB0aGUgY2FjaGUuCisJCSAqLworCQlyYXd0cmVlID0gY29weU9iamVjdChwbGFuc291cmNl LT5yYXdfcGFyc2VfdHJlZSk7CisJCWlmIChwbGFuc291cmNlLT5wYXJzZXJTZXR1cCAhPSBOVUxM KQorCQkJdGxpc3QgPSBwZ19hbmFseXplX2FuZF9yZXdyaXRlX3dpdGhjYihyYXd0cmVlLAorCQkJ CQkJCQkJCQkJICBwbGFuc291cmNlLT5xdWVyeV9zdHJpbmcsCisJCQkJCQkJCQkJCQkgIHBsYW5z b3VyY2UtPnBhcnNlclNldHVwLAorCQkJCQkJCQkJCQkJICBwbGFuc291cmNlLT5wYXJzZXJTZXR1 cEFyZywKKwkJCQkJCQkJCQkJCSAgcXVlcnlFbnYpOworCQllbHNlCisJCQl0bGlzdCA9IHBnX2Fu YWx5emVfYW5kX3Jld3JpdGVfZml4ZWRwYXJhbXMocmF3dHJlZSwKKwkJCQkJCQkJCQkJCQkgICBw bGFuc291cmNlLT5xdWVyeV9zdHJpbmcsCisJCQkJCQkJCQkJCQkJICAgcGxhbnNvdXJjZS0+cGFy YW1fdHlwZXMsCisJCQkJCQkJCQkJCQkJICAgcGxhbnNvdXJjZS0+bnVtX3BhcmFtcywKKwkJCQkJ CQkJCQkJCQkgICBxdWVyeUVudik7CisJfQorCWVsc2UgaWYgKHBsYW5zb3VyY2UtPmFuYWx5emVk X3BhcnNlX3RyZWUgIT0gTlVMTCkKKwl7CisJCS8qIFNvdXJjZSBpcyBwcmUtYW5hbHl6ZWQgcXVl cnksIHNvIHdlIG9ubHkgbmVlZCB0byByZXdyaXRlICovCisJCVF1ZXJ5CSAgICphbmFseXplZF90 cmVlOworCisJCS8qIFRoZSByZXdyaXRlciBzY3JpYmJsZXMgb24gaXRzIGlucHV0LCB0b28sIHNv IGNvcHkgKi8KKwkJYW5hbHl6ZWRfdHJlZSA9IGNvcHlPYmplY3QocGxhbnNvdXJjZS0+YW5hbHl6 ZWRfcGFyc2VfdHJlZSk7CisJCS8qIEFjcXVpcmUgbG9ja3MgbmVlZGVkIGJlZm9yZSByZXdyaXRp bmcgLi4uICovCisJCUFjcXVpcmVSZXdyaXRlTG9ja3MoYW5hbHl6ZWRfdHJlZSwgdHJ1ZSwgZmFs c2UpOworCQkvKiAuLi4gYW5kIGRvIGl0ICovCisJCXRsaXN0ID0gcGdfcmV3cml0ZV9xdWVyeShh bmFseXplZF90cmVlKTsKKwl9CiAJZWxzZQotCQl0bGlzdCA9IHBnX2FuYWx5emVfYW5kX3Jld3Jp dGVfZml4ZWRwYXJhbXMocmF3dHJlZSwKLQkJCQkJCQkJCQkJCSAgIHBsYW5zb3VyY2UtPnF1ZXJ5 X3N0cmluZywKLQkJCQkJCQkJCQkJCSAgIHBsYW5zb3VyY2UtPnBhcmFtX3R5cGVzLAotCQkJCQkJ CQkJCQkJICAgcGxhbnNvdXJjZS0+bnVtX3BhcmFtcywKLQkJCQkJCQkJCQkJCSAgIHF1ZXJ5RW52 KTsKKwl7CisJCS8qIEVtcHR5IHF1ZXJ5LCBub3RoaW5nIHRvIGRvICovCisJCXRsaXN0ID0gTklM OworCX0KIAogCS8qIFJlbGVhc2Ugc25hcHNob3QgaWYgd2UgZ290IG9uZSAqLwogCWlmIChzbmFw c2hvdF9zZXQpCkBAIC05NjMsOCArMTA0NSw3IEBAIEJ1aWxkQ2FjaGVkUGxhbihDYWNoZWRQbGFu U291cmNlICpwbGFuc291cmNlLCBMaXN0ICpxbGlzdCwKIAkgKi8KIAlzbmFwc2hvdF9zZXQgPSBm YWxzZTsKIAlpZiAoIUFjdGl2ZVNuYXBzaG90U2V0KCkgJiYKLQkJcGxhbnNvdXJjZS0+cmF3X3Bh cnNlX3RyZWUgJiYKLQkJYW5hbHl6ZV9yZXF1aXJlc19zbmFwc2hvdChwbGFuc291cmNlLT5yYXdf cGFyc2VfdHJlZSkpCisJCUJ1aWxkaW5nUGxhblJlcXVpcmVzU25hcHNob3QocGxhbnNvdXJjZSkp CiAJewogCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKIAkJ c25hcHNob3Rfc2V0ID0gdHJ1ZTsKQEAgLTE3MDMsNiArMTc4NCw3IEBAIENvcHlDYWNoZWRQbGFu KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpCiAJbmV3c291cmNlID0gKENhY2hlZFBsYW5T b3VyY2UgKikgcGFsbG9jMChzaXplb2YoQ2FjaGVkUGxhblNvdXJjZSkpOwogCW5ld3NvdXJjZS0+ bWFnaWMgPSBDQUNIRURQTEFOU09VUkNFX01BR0lDOwogCW5ld3NvdXJjZS0+cmF3X3BhcnNlX3Ry ZWUgPSBjb3B5T2JqZWN0KHBsYW5zb3VyY2UtPnJhd19wYXJzZV90cmVlKTsKKwluZXdzb3VyY2Ut PmFuYWx5emVkX3BhcnNlX3RyZWUgPSBjb3B5T2JqZWN0KHBsYW5zb3VyY2UtPmFuYWx5emVkX3Bh cnNlX3RyZWUpOwogCW5ld3NvdXJjZS0+cXVlcnlfc3RyaW5nID0gcHN0cmR1cChwbGFuc291cmNl LT5xdWVyeV9zdHJpbmcpOwogCU1lbW9yeUNvbnRleHRTZXRJZGVudGlmaWVyKHNvdXJjZV9jb250 ZXh0LCBuZXdzb3VyY2UtPnF1ZXJ5X3N0cmluZyk7CiAJbmV3c291cmNlLT5jb21tYW5kVGFnID0g cGxhbnNvdXJjZS0+Y29tbWFuZFRhZzsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BhcnNlci9h bmFseXplLmggYi9zcmMvaW5jbHVkZS9wYXJzZXIvYW5hbHl6ZS5oCmluZGV4IGYxYmQxOGM0OWYy Li5mMjllZDAzYjQ3NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGFyc2VyL2FuYWx5emUuaAor KysgYi9zcmMvaW5jbHVkZS9wYXJzZXIvYW5hbHl6ZS5oCkBAIC01Miw2ICs1Miw3IEBAIGV4dGVy biBRdWVyeSAqdHJhbnNmb3JtU3RtdChQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUgKnBhcnNlVHJl ZSk7CiAKIGV4dGVybiBib29sIHN0bXRfcmVxdWlyZXNfcGFyc2VfYW5hbHlzaXMoUmF3U3RtdCAq cGFyc2VUcmVlKTsKIGV4dGVybiBib29sIGFuYWx5emVfcmVxdWlyZXNfc25hcHNob3QoUmF3U3Rt dCAqcGFyc2VUcmVlKTsKK2V4dGVybiBib29sIHF1ZXJ5X3JlcXVpcmVzX3Jld3JpdGVfcGxhbihR dWVyeSAqcXVlcnkpOwogCiBleHRlcm4gY29uc3QgY2hhciAqTENTX2FzU3RyaW5nKExvY2tDbGF1 c2VTdHJlbmd0aCBzdHJlbmd0aCk7CiBleHRlcm4gdm9pZCBDaGVja1NlbGVjdExvY2tpbmcoUXVl cnkgKnFyeSwgTG9ja0NsYXVzZVN0cmVuZ3RoIHN0cmVuZ3RoKTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmgK aW5kZXggMTk5Y2MzMjNhMjguLjU5MzBmY2I1MGYwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91 dGlscy9wbGFuY2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaApAQCAt MjUsNyArMjUsOCBAQAogI2luY2x1ZGUgInV0aWxzL3Jlc293bmVyLmgiCiAKIAotLyogRm9yd2Fy ZCBkZWNsYXJhdGlvbiwgdG8gYXZvaWQgaW5jbHVkaW5nIHBhcnNlbm9kZXMuaCBoZXJlICovCisv KiBGb3J3YXJkIGRlY2xhcmF0aW9ucywgdG8gYXZvaWQgaW5jbHVkaW5nIHBhcnNlbm9kZXMuaCBo ZXJlICovCitzdHJ1Y3QgUXVlcnk7CiBzdHJ1Y3QgUmF3U3RtdDsKIAogLyogcG9zc2libGUgdmFs dWVzIGZvciBwbGFuX2NhY2hlX21vZGUgKi8KQEAgLTQ1LDEyICs0NiwyMiBAQCBleHRlcm4gUEdE TExJTVBPUlQgaW50IHBsYW5fY2FjaGVfbW9kZTsKIAogLyoKICAqIENhY2hlZFBsYW5Tb3VyY2Ug KHdoaWNoIG1pZ2h0IGJldHRlciBoYXZlIGJlZW4gY2FsbGVkIENhY2hlZFF1ZXJ5KQotICogcmVw cmVzZW50cyBhIFNRTCBxdWVyeSB0aGF0IHdlIGV4cGVjdCB0byB1c2UgbXVsdGlwbGUgdGltZXMu ICBJdCBzdG9yZXMKLSAqIHRoZSBxdWVyeSBzb3VyY2UgdGV4dCwgdGhlIHJhdyBwYXJzZSB0cmVl LCBhbmQgdGhlIGFuYWx5emVkLWFuZC1yZXdyaXR0ZW4KKyAqIHJlcHJlc2VudHMgYSBTUUwgcXVl cnkgdGhhdCB3ZSBleHBlY3QgdG8gdXNlIG11bHRpcGxlIHRpbWVzLiAgSXQgc3RvcmVzIHRoZQor ICogcXVlcnkgc291cmNlIHRleHQsIHRoZSBzb3VyY2UgcGFyc2UgdHJlZSwgYW5kIHRoZSBhbmFs eXplZC1hbmQtcmV3cml0dGVuCiAgKiBxdWVyeSB0cmVlLCBhcyB3ZWxsIGFzIGFkanVuY3QgZGF0 YS4gIENhY2hlIGludmFsaWRhdGlvbiBjYW4gaGFwcGVuIGFzIGEKICAqIHJlc3VsdCBvZiBEREwg YWZmZWN0aW5nIG9iamVjdHMgdXNlZCBieSB0aGUgcXVlcnkuICBJbiB0aGF0IGNhc2Ugd2UgZGlz Y2FyZAogICogdGhlIGFuYWx5emVkLWFuZC1yZXdyaXR0ZW4gcXVlcnkgdHJlZSwgYW5kIHJlYnVp bGQgaXQgd2hlbiBuZXh0IG5lZWRlZC4KICAqCisgKiBUaGVyZSBhcmUgdHdvIHdheXMgaW4gd2hp Y2ggdGhlIHNvdXJjZSBxdWVyeSBjYW4gYmUgcmVwcmVzZW50ZWQ6IGVpdGhlcgorICogYXMgYSBy YXcgcGFyc2UgdHJlZSwgb3IgYXMgYW4gYW5hbHl6ZWQtYnV0LW5vdC1yZXdyaXR0ZW4gcGFyc2Ug dHJlZS4KKyAqIEluIHRoZSBsYXR0ZXIgY2FzZSB3ZSBleHBlY3QgdGhhdCBjYWNoZSBpbnZhbGlk YXRpb24gbmVlZCBub3QgYWZmZWN0CisgKiB0aGUgcGFyc2UtYW5hbHlzaXMgcmVzdWx0cywgb25s eSB0aGUgcmV3cml0aW5nIGFuZCBwbGFubmluZyBzdGVwcy4KKyAqIE9ubHkgb25lIG9mIHJhd19w YXJzZV90cmVlIGFuZCBhbmFseXplZF9wYXJzZV90cmVlIGNhbiBiZSBub24tTlVMTC4KKyAqIChJ ZiBib3RoIGFyZSBOVUxMLCB0aGUgQ2FjaGVkUGxhblNvdXJjZSByZXByZXNlbnRzIGFuIGVtcHR5 IHF1ZXJ5LikKKyAqIE5vdGUgdGhhdCBxdWVyeV9zdHJpbmcgaXMgdHlwaWNhbGx5IGp1c3QgYW4g ZW1wdHkgc3RyaW5nIHdoZW4gdGhlCisgKiBzb3VyY2UgcXVlcnkgaXMgYW4gYW5hbHl6ZWQgcGFy c2UgdHJlZTsgYWxzbywgcGFyYW1fdHlwZXMsIG51bV9wYXJhbXMsCisgKiBwYXJzZXJTZXR1cCwg YW5kIHBhcnNlclNldHVwQXJnIHdpbGwgbm90IGJlIHVzZWQuCisgKgogICogQW4gYWN0dWFsIGV4 ZWN1dGlvbiBwbGFuLCByZXByZXNlbnRlZCBieSBDYWNoZWRQbGFuLCBpcyBkZXJpdmVkIGZyb20g dGhlCiAgKiBDYWNoZWRQbGFuU291cmNlIHdoZW4gd2UgbmVlZCB0byBleGVjdXRlIHRoZSBxdWVy eS4gIFRoZSBwbGFuIGNvdWxkIGJlCiAgKiBlaXRoZXIgZ2VuZXJpYyAodXNhYmxlIHdpdGggYW55 IHNldCBvZiBwbGFuIHBhcmFtZXRlcnMpIG9yIGN1c3RvbSAoZm9yIGEKQEAgLTc4LDcgKzg5LDcg QEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBwbGFuX2NhY2hlX21vZGU7CiAgKiB0aG91Z2ggaXQg bWF5IGJlIHVzZWZ1bCBpZiB0aGUgQ2FjaGVkUGxhbiBjYW4gYmUgZGlzY2FyZGVkIGVhcmx5LikK ICAqCiAgKiBBIENhY2hlZFBsYW5Tb3VyY2UgaGFzIHR3byBhc3NvY2lhdGVkIG1lbW9yeSBjb250 ZXh0czogb25lIHRoYXQgaG9sZHMgdGhlCi0gKiBzdHJ1Y3QgaXRzZWxmLCB0aGUgcXVlcnkgc291 cmNlIHRleHQgYW5kIHRoZSByYXcgcGFyc2UgdHJlZSwgYW5kIGFub3RoZXIKKyAqIHN0cnVjdCBp dHNlbGYsIHRoZSBxdWVyeSBzb3VyY2UgdGV4dCBhbmQgdGhlIHNvdXJjZSBwYXJzZSB0cmVlLCBh bmQgYW5vdGhlcgogICogY29udGV4dCB0aGF0IGhvbGRzIHRoZSByZXdyaXR0ZW4gcXVlcnkgdHJl ZSBhbmQgYXNzb2NpYXRlZCBkYXRhLiAgVGhpcwogICogYWxsb3dzIHRoZSBxdWVyeSB0cmVlIHRv IGJlIGRpc2NhcmRlZCBlYXNpbHkgd2hlbiBpdCBpcyBpbnZhbGlkYXRlZC4KICAqCkBAIC05NCw2 ICsxMDUsNyBAQCB0eXBlZGVmIHN0cnVjdCBDYWNoZWRQbGFuU291cmNlCiB7CiAJaW50CQkJbWFn aWM7CQkJLyogc2hvdWxkIGVxdWFsIENBQ0hFRFBMQU5TT1VSQ0VfTUFHSUMgKi8KIAlzdHJ1Y3Qg UmF3U3RtdCAqcmF3X3BhcnNlX3RyZWU7IC8qIG91dHB1dCBvZiByYXdfcGFyc2VyKCksIG9yIE5V TEwgKi8KKwlzdHJ1Y3QgUXVlcnkgKmFuYWx5emVkX3BhcnNlX3RyZWU7CS8qIGFuYWx5emVkIHBh cnNlIHRyZWUsIG9yIE5VTEwgKi8KIAljb25zdCBjaGFyICpxdWVyeV9zdHJpbmc7CS8qIHNvdXJj ZSB0ZXh0IG9mIHF1ZXJ5ICovCiAJQ29tbWFuZFRhZwljb21tYW5kVGFnOwkJLyogY29tbWFuZCB0 YWcgZm9yIHF1ZXJ5ICovCiAJT2lkCQkgICAqcGFyYW1fdHlwZXM7CS8qIGFycmF5IG9mIHBhcmFt ZXRlciB0eXBlIE9JRHMsIG9yIE5VTEwgKi8KQEAgLTE5Niw2ICsyMDgsOSBAQCBleHRlcm4gdm9p ZCBSZWxlYXNlQWxsUGxhbkNhY2hlUmVmc0luT3duZXIoUmVzb3VyY2VPd25lciBvd25lcik7CiBl eHRlcm4gQ2FjaGVkUGxhblNvdXJjZSAqQ3JlYXRlQ2FjaGVkUGxhbihzdHJ1Y3QgUmF3U3RtdCAq cmF3X3BhcnNlX3RyZWUsCiAJCQkJCQkJCQkJICBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCiAJ CQkJCQkJCQkJICBDb21tYW5kVGFnIGNvbW1hbmRUYWcpOworZXh0ZXJuIENhY2hlZFBsYW5Tb3Vy Y2UgKkNyZWF0ZUNhY2hlZFBsYW5Gb3JRdWVyeShzdHJ1Y3QgUXVlcnkgKmFuYWx5emVkX3BhcnNl X3RyZWUsCisJCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJ CQkJCSAgQ29tbWFuZFRhZyBjb21tYW5kVGFnKTsKIGV4dGVybiBDYWNoZWRQbGFuU291cmNlICpD cmVhdGVPbmVTaG90Q2FjaGVkUGxhbihzdHJ1Y3QgUmF3U3RtdCAqcmF3X3BhcnNlX3RyZWUsCiAJ CQkJCQkJCQkJCQkgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAogCQkJCQkJCQkJCQkJIENvbW1h bmRUYWcgY29tbWFuZFRhZyk7Ci0tIAoyLjQzLjAKCg== --=_9edd4529df066ffc45b0306aea50116b--