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 1utYQy-009kj5-1h for pgsql-hackers@arkaria.postgresql.org; Tue, 02 Sep 2025 21:20:58 +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 1utYQx-005fjz-2k for pgsql-hackers@arkaria.postgresql.org; Tue, 02 Sep 2025 21:20:55 +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 1utYQw-005fjr-FT for pgsql-hackers@lists.postgresql.org; Tue, 02 Sep 2025 21:20:55 +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 1utYQq-000Ecl-08 for pgsql-hackers@lists.postgresql.org; Tue, 02 Sep 2025 21:20:54 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1756848047; bh=lMjF3IGpLGo6eZFgf60o/UqS9npeqiCY/XiXZBVSHTI=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=tudMQ8k84XfWHRbfv23lzDhYqZk1bjkjhWREmMYAbm2r7aI42f7D61mbrdPuwK0F4 7iM5jMGeg5rUzQWRP565Uh2hUKRrAJnsbVIGOMLdy4hhBXKx2P7cP5riXVLEt0Gbzk hGmQH+GNtHAABICUt1L9XrlVYXrZQBQnZNs4yJ4jaNZQSScnP/Jc8emt/e1rzPQQth T0xfv7cHEDtniTHR4eO73oba/pNDo/Xf83ua31pPQGnDVyO0yvIZKYG7OslyonE4Kl P8dLhpjQov0ewhWfH9pLwo3Xl0ADN6+c8niqYofsByjH1ikZ7OwMhh4w0+MwEheEgM 51ViF7gz2dtjA== Received: from [172.20.10.3] (unknown [213.87.149.89]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: a.rybakina@postgrespro.ru) by mail.postgrespro.ru (Postfix/465) with ESMTPSA id D8F7860BFB; Wed, 3 Sep 2025 00:20:46 +0300 (MSK) Content-Type: multipart/mixed; boundary="------------3hlp0eypk3TM21yM4bUhvk3o" Message-ID: <386165c3-3c01-4a85-b618-7919e64a52de@postgrespro.ru> Date: Wed, 3 Sep 2025 00:20:46 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: pull-up subquery if JOIN-ON contains refs to upper-query To: Ilia Evdokimov Cc: Ranier Vilela , PostgreSQL Hackers , Peter Petrov , David Rowley References: <0b1f670d-b39d-4966-bf32-f0d502ebc564@postgrespro.ru> <46bc4eaf-58c5-42ab-8041-d3380a0768de@postgrespro.ru> <9b041978-06e3-4a50-8a5d-dacbb054f23e@tantorlabs.com> <8d7cbbf6-ddc0-4696-8af2-a68d740e14f2@postgrespro.ru> <6078f7e1-4b29-4b31-bd28-b84149e404e4@postgrespro.ru> <975a3736-a8b5-49b3-8009-4d4e86867aa1@postgrespro.ru> <0adbf75a-2059-4bb7-b878-c33892dbc1f0@tantorlabs.com> <300d7bb0-345c-4c0b-a0ef-4de573fcc94b@postgrespro.ru> <32446f52-1b18-499a-a77b-d6b66ad0f4cf@tantorlabs.com> <87a6fcbf-929a-408a-9471-28be3080254a@postgrespro.ru> <4e9d279c-83c1-42d3-b74d-7366ecd7f085@tantorlabs.com> Content-Language: en-US From: Alena Rybakina In-Reply-To: <4e9d279c-83c1-42d3-b74d-7366ecd7f085@tantorlabs.com> X-KSMG-AntiPhishing: NotDetected, bases: 2025/09/02 20:20:00 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/09/02 17:13:00 #27732957 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 This is a multi-part message in MIME format. --------------3hlp0eypk3TM21yM4bUhvk3o Content-Type: multipart/alternative; boundary="------------zYjN6ilrKnLide1AkWvygJMY" --------------zYjN6ilrKnLide1AkWvygJMY Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi! Thank you for your attention to this patch! On 03.09.2025 00:07, Ilia Evdokimov wrote: > On 04.06.2025 13:40, Alena Rybakina wrote: >> >> Do you have any ideas on how to solve this problem? So far, the only >> approach I see is to try an alternative plan but I'm still learning this. >> > Hi, > > I've reviewed this patch, and I have suggestion about the approach. > > Currently, the patch extends 'convert_EXISTS_sublick_to_join' with > quite complex logic (clause collection, volatile checks, rewriting > join quals, etc). While it works, the amount of branching and special > cases makes the function harder to follow. > > Looking at the logic, it seems that a large part of the complexity > comes from trying to directly adapt 'convert_EXISTS_sublink_to_join' > instead of factoring out a dedicated path. An alternative would be to > introduce a separate function > *'convert_EXISTS_sublink_to_lateral_join' *- with a similar API to > 'convert_ANY_sublink_to_join'. Such a function can focus only on the > EXISTS-to-join case, while keeping the existing function shorter and > easier to reason about. > > I even made some first rough sketches of this approach (not a finished > patch, just an outline). Of course, it would still need proper > adaptation, but I think it demonstrates that the overall structure can > be kept simpler. > > What do you think about refactoring in this direction? > > -- > Best regards, > Ilia Evdokimov, > Tantor Labs LLC, > https://tantorlabs.com > I'll look at this. I need some time to consider it. I'm working on this approach right now. I introduced mutator and made the transformation if it is possible there but I need to fix some bugs. --------------zYjN6ilrKnLide1AkWvygJMY Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit
Hi! Thank you for your attention to this patch!

On 03.09.2025 00:07, Ilia Evdokimov wrote:
On 04.06.2025 13:40, Alena Rybakina wrote:

Do you have any ideas on how to solve this problem? So far, the only approach I see is to try an alternative plan but I'm still learning this.

Hi,

I've reviewed this patch, and I have suggestion about the approach.

Currently, the patch extends 'convert_EXISTS_sublick_to_join' with quite complex logic (clause collection, volatile checks, rewriting join quals, etc). While it works, the amount of branching and special cases makes the function harder to follow.

Looking at the logic, it seems that a large part of the complexity comes from trying to directly adapt 'convert_EXISTS_sublink_to_join' instead of factoring out a dedicated path. An alternative would be to introduce a separate function 'convert_EXISTS_sublink_to_lateral_join' - with a similar API to 'convert_ANY_sublink_to_join'. Such a function can focus only on the EXISTS-to-join case, while keeping the existing function shorter and easier to reason about.

I even made some first rough sketches of this approach (not a finished patch, just an outline). Of course, it would still need proper adaptation, but I think it demonstrates that the overall structure can be kept simpler.

What do you think about refactoring in this direction?

--
Best regards,
Ilia Evdokimov,
Tantor Labs LLC,
https://tantorlabs.com

I'll look at this. I need some time to consider it.

I'm working on this approach right now. I introduced mutator and made the transformation if it is possible there but I need to fix some bugs.

--------------zYjN6ilrKnLide1AkWvygJMY-- --------------3hlp0eypk3TM21yM4bUhvk3o Content-Type: text/x-patch; charset=UTF-8; name="pull_up.diff" Content-Disposition: attachment; filename="pull_up.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3N1YnNlbGVjdC5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc3Vic2VsZWN0LmMKaW5kZXggZDcxZWQ5NThl MzEuLjBkMjgyMGNhNzlmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9zdWJzZWxlY3QuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxl Y3QuYwpAQCAtMTQzOSw2ICsxNDM5LDIzOSBAQCBjb252ZXJ0X0FOWV9zdWJsaW5rX3RvX2pv aW4oUGxhbm5lckluZm8gKnJvb3QsIFN1YkxpbmsgKnN1YmxpbmssCiAJcmV0dXJuIHJlc3Vs dDsKIH0KIAordHlwZWRlZiBzdHJ1Y3QgSG9pc3RKb2luUXVhbHNDb250ZXh0Cit7CisJTGlz dCAqb3V0ZXJfY2xhdXNlczsgICAvKiBjb2xsZWN0IGhvaXN0ZWQgY2xhdXNlcyAqLworCVJl bGlkcyBvYnNlcnZlZF9udWxsdGVzdF92YXJzOworfSBIb2lzdEpvaW5RdWFsc0NvbnRleHQ7 CisKK3N0YXRpYyBOb2RlICoKK3ByZXByb2Nlc3NfcXVhbHMoTm9kZSAqbm9kZSkKK3sKKwkv KgorCSAqIFJ1biBjb25zdC1mb2xkaW5nIHdpdGhvdXQgcGxhbm5lciBjb250ZXh0LgorCSAq CisJICogSU1QT1JUQU5UOiBQYXNzIE5VTEwgYXMgUGxhbm5lckluZm8gaGVyZSBiZWNhdXNl IHdl4oCZcmUgc2ltcGxpZnlpbmcKKwkgKiBhICpzdWJxdWVyeeKAmXMqIHF1YWxzIGJlZm9y ZSBpdHMgcnRhYmxlIGhhcyBiZWVuIG1lcmdlZCB3aXRoIHRoZQorCSAqIHBhcmVudC4gSWYg d2UgcGFzc2VkIGEgbm9uLU5VTEwgcm9vdCwgZXZhbF9jb25zdF9leHByZXNzaW9ucygpCisJ ICogY291bGQgcGVyZm9ybSByb290LWRlcGVuZGVudCB0cmFuc2Zvcm1zIChlLmcuLCBmb2xk IE51bGxUZXN0IG9uIFZhcgorCSAqIHVzaW5nIHZhcl9pc19ub25udWxsYWJsZSkgYWdhaW5z dCB0aGUgKndyb25nKiByYW5nZXRhYmxlLCByaXNraW5nCisJICogb3V0LW9mLWJvdW5kcyBS VEUgYWNjZXNzLiBTZWUgZXZhbF9jb25zdF9leHByZXNzaW9ucygp4oCZcyBjb250cmFjdDoK KwkgKiDigJxyb290IGNhbiBiZSBwYXNzZWQgYXMgTlVMTCDigKbigJ0gZm9yIGV4YWN0bHkg dGhpcyB1c2UtY2FzZS4KKwkgKi8KKwlub2RlID0gZXZhbF9jb25zdF9leHByZXNzaW9ucyhO VUxMLCBub2RlKTsKKwlub2RlID0gKE5vZGUgKikgY2Fub25pY2FsaXplX3F1YWwoKEV4cHIg Kikgbm9kZSwgZmFsc2UpOworCisJbm9kZSA9IChOb2RlICopIG1ha2VfYW5kc19pbXBsaWNp dCgoRXhwciAqKSBub2RlKTsKKworCXJldHVybiBub2RlOworfQorCitzdGF0aWMgTnVsbFRl c3QgKgorbWFrZV9udWxsdGVzdChWYXIgKnZhciwgTnVsbFRlc3RUeXBlIHR5cGUpCit7CisJ TnVsbFRlc3QgKm51bGx0ZXN0ID0gbWFrZU5vZGUoTnVsbFRlc3QpOworCW51bGx0ZXN0LT5h cmcgPSAoRXhwciAqKSB2YXI7CisJbnVsbHRlc3QtPm51bGx0ZXN0dHlwZSA9IHR5cGU7CisJ bnVsbHRlc3QtPmFyZ2lzcm93ID0gZmFsc2U7CisJbnVsbHRlc3QtPmxvY2F0aW9uID0gLTE7 CisKKwlyZXR1cm4gbnVsbHRlc3Q7Cit9CisKK3N0YXRpYyBib29sCitzaW1wbGljaXR5X2No ZWNrX3dhbGtlcihOb2RlICpub2RlLCB2b2lkICpjdHgpCit7CisJaWYgKG5vZGUgPT0gTlVM TCkKKwl7CisJCXJldHVybiBmYWxzZTsKKwl9CisJZWxzZSBpZihJc0Eobm9kZSwgVmFyKSkK KwkJcmV0dXJuIHRydWU7CisJZWxzZSBpZihJc0Eobm9kZSwgUXVlcnkpKQorCQlyZXR1cm4g cXVlcnlfdHJlZV93YWxrZXIoKFF1ZXJ5ICopIG5vZGUsCisJCQkJCQkJCSBzaW1wbGljaXR5 X2NoZWNrX3dhbGtlciwKKwkJCQkJCQkJICh2b2lkKikgY3R4LAorCQkJCQkJCQkgUVRXX0VY QU1JTkVfUlRFU19CRUZPUkUpOworCisJcmV0dXJuIGV4cHJlc3Npb25fdHJlZV93YWxrZXIo bm9kZSwgc2ltcGxpY2l0eV9jaGVja193YWxrZXIsCisJCQkJCQkJCSAgKHZvaWQgKikgY3R4 KTsKK30KKworc3RhdGljIExpc3QgKgorZ2VuZXJhdGVfbm90X251bGxfZXhwcnMoTGlzdCAq bGlzdF9leHByLCBSZWxpZHMgKm9ic2VydmVkX3ZhcnMpCit7CisJTGlzdENlbGwgKmxjOwor CUxpc3QgKnJlc3VsdCA9IE5JTDsKKworCWZvcmVhY2gobGMsIGxpc3RfZXhwcikKKwl7CisJ CU5vZGUgKm5vZGUgPSAoTm9kZSAqKSBsZmlyc3QobGMpOworCisJCWlmIChJc0Eobm9kZSwg T3BFeHByKSkKKwkJeworCQkJTm9kZSAqbGFyZyA9IGdldF9sZWZ0b3Aobm9kZSk7CisJCQlO b2RlICpyYXJnID0gZ2V0X3JpZ2h0b3Aobm9kZSk7CisKKwkJCWlmIChJc0EobGFyZywgUmVs YWJlbFR5cGUpKQorCQkJCWxhcmcgPSAoTm9kZSAqKSAoKFJlbGFiZWxUeXBlICopIGxhcmcp LT5hcmc7CisKKwkJCWlmIChJc0EocmFyZywgUmVsYWJlbFR5cGUpKQorCQkJCXJhcmcgPSAo Tm9kZSAqKSAoKFJlbGFiZWxUeXBlICopIHJhcmcpLT5hcmc7CisKKwkJCWlmKElzQShsYXJn LCBWYXIpKQorCQkJeworCQkJCVZhciAqdmFyID0gKFZhciAqKSBsYXJnOworCQkJCWlmICgh Ym1zX2lzX21lbWJlcih2YXItPnZhcm5vLCAqb2JzZXJ2ZWRfdmFycykgJiYgdmFyLT52YXJs ZXZlbHN1cCA9PSAxKQorCQkJCXsKKwkJCQkJTnVsbFRlc3QgKm51bGx0ZXN0ID0gbWFrZV9u dWxsdGVzdCh2YXIsIElTX05PVF9OVUxMKTsKKwkJCQkJcmVzdWx0ID0gbGFwcGVuZChyZXN1 bHQsIG51bGx0ZXN0KTsKKwkJCQkJKm9ic2VydmVkX3ZhcnMgPSBibXNfYWRkX21lbWJlcigq b2JzZXJ2ZWRfdmFycywgdmFyLT52YXJubyk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJ CX0KKworCQkJaWYoSXNBKHJhcmcsIFZhcikpCisJCQl7CisJCQkJVmFyICp2YXIgPSAoVmFy ICopIHJhcmc7CisJCQkJaWYgKCFibXNfaXNfbWVtYmVyKHZhci0+dmFybm8sICpvYnNlcnZl ZF92YXJzKSAmJiB2YXItPnZhcmxldmVsc3VwID09IDEpCisJCQkJeworCQkJCQlOdWxsVGVz dCAqbnVsbHRlc3QgPSBtYWtlX251bGx0ZXN0KHZhciwgSVNfTk9UX05VTEwpOworCQkJCQly ZXN1bHQgPSBsYXBwZW5kKHJlc3VsdCwgbnVsbHRlc3QpOworCQkJCQkqb2JzZXJ2ZWRfdmFy cyA9IGJtc19hZGRfbWVtYmVyKCpvYnNlcnZlZF92YXJzLCB2YXItPnZhcm5vKTsKKwkJCQkJ Y29udGludWU7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30K Kworc3RhdGljIE5vZGUgKgoraG9pc3RfcGFyZW50X3F1YWxzX2pvaW50cmVlX211dGF0b3Io Tm9kZSAqanRub2RlLCBIb2lzdEpvaW5RdWFsc0NvbnRleHQgKmNvbnRleHQpCit7CisJaWYg KGp0bm9kZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChJc0EoanRub2RlLCBS YW5nZVRibFJlZikpCisJCXJldHVybiBqdG5vZGU7ICAvKiBub3RoaW5nIHRvIGNoYW5nZSAq LworCisJaWYgKElzQShqdG5vZGUsIEpvaW5FeHByKSkKKwl7CisJCUpvaW5FeHByICpqID0g KEpvaW5FeHByICopIGp0bm9kZTsKKwkJSm9pbkV4cHIgKm5ld2ogPSBtYWtlTm9kZShKb2lu RXhwcik7CisJCUxpc3RDZWxsICpsYzsKKwkJTGlzdCAqam9pbl9jbGF1c2VzID0gTklMOwor CQlOb2RlICpxdWFsOworCQltZW1jcHkobmV3aiwgaiwgc2l6ZW9mKEpvaW5FeHByKSk7CisK KwkJLyogUmVjdXJzZSBpbnRvIGpvaW4gaW5wdXRzICovCisJCW5ld2otPmxhcmcgPSAoTm9k ZSAqKSBob2lzdF9wYXJlbnRfcXVhbHNfam9pbnRyZWVfbXV0YXRvcihqLT5sYXJnLCBjb250 ZXh0KTsKKwkJbmV3ai0+cmFyZyA9IChOb2RlICopIGhvaXN0X3BhcmVudF9xdWFsc19qb2lu dHJlZV9tdXRhdG9yKGotPnJhcmcsIGNvbnRleHQpOworCisJCWlmKGNvbnRhaW5fdm9sYXRp bGVfZnVuY3Rpb25zKG5ld2otPnF1YWxzKSB8fAorCQkJCQkJCQluZXdqLT5sYXJnID09IE5V TEwgfHwKKwkJCQkJCQkJbmV3ai0+cmFyZyA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CisK KwkJcXVhbCA9IG5ld2otPnF1YWxzOworCQlxdWFsID0gcHJlcHJvY2Vzc19xdWFscyhxdWFs KTsKKworCQlmb3JlYWNoKGxjLCAoTGlzdCAqKSBxdWFsKQorCQl7CisJCQlOb2RlICpub2Rl ID0gKE5vZGUgKikgbGZpcnN0KGxjKTsKKworCQkJaWYgKElzQShub2RlLCBPcEV4cHIpKQor CQkJeworCQkJCWlmKHNpbXBsaWNpdHlfY2hlY2tfd2Fsa2VyKGdldF9sZWZ0b3Aobm9kZSks IE5VTEwpICYmCisJCQkJCQlzaW1wbGljaXR5X2NoZWNrX3dhbGtlcihnZXRfcmlnaHRvcChu b2RlKSwgTlVMTCkpCisJCQkJeworCQkJCQlqb2luX2NsYXVzZXMgPSBsYXBwZW5kKGpvaW5f Y2xhdXNlcywgbm9kZSk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCWNvbnRl eHQtPm91dGVyX2NsYXVzZXMgPSBsYXBwZW5kKGNvbnRleHQtPm91dGVyX2NsYXVzZXMsIG5v ZGUpOworCQl9CisKKwkJLyogT25seSB0b3VjaCBJTk5FUiBKT0lOcyAqLworCQlpZiAoKGot PmpvaW50eXBlICE9IEpPSU5fTEVGVCAmJgorCQkJIGotPmpvaW50eXBlICE9IEpPSU5fUklH SFQgJiYKKwkJCSBqLT5qb2ludHlwZSAhPSBKT0lOX0ZVTEwpKSAgLyogc3VicXVlcnkgdmFy cyAqLworCQl7CisJCQlMaXN0ICpudWxsX3Rlc3RzOworCisJCQlpZiAoam9pbl9jbGF1c2Vz ID09IE5JTCkgIC8qIHN1YnF1ZXJ5IHZhcnMgKi8KKwkJCXsKKwkJCQluZXdqLT5xdWFscyA9 IChOb2RlICopIG1ha2VCb29sQ29uc3QodHJ1ZSwgZmFsc2UpOworCQkJfQorCQkJZWxzZSBp Zihqb2luX2NsYXVzZXMgIT0gTklMICYmIGNvbnRhaW5fdmFyc19vZl9sZXZlbCgoTm9kZSAq KSBqb2luX2NsYXVzZXMsIDEpKQorCQkJeworCQkJCW51bGxfdGVzdHMgPSBnZW5lcmF0ZV9u b3RfbnVsbF9leHBycyhqb2luX2NsYXVzZXMsICZjb250ZXh0LT5vYnNlcnZlZF9udWxsdGVz dF92YXJzKTsKKwkJCQljb250ZXh0LT5vdXRlcl9jbGF1c2VzID0gbGlzdF9jb25jYXQoY29u dGV4dC0+b3V0ZXJfY2xhdXNlcywgbnVsbF90ZXN0cyk7CisJCQkJY29udGV4dC0+b3V0ZXJf Y2xhdXNlcyA9IGxpc3RfY29uY2F0KGNvbnRleHQtPm91dGVyX2NsYXVzZXMsIGpvaW5fY2xh dXNlcyk7CisJCQkJbmV3ai0+cXVhbHMgPSAoTm9kZSAqKSBtYWtlQm9vbENvbnN0KHRydWUs IGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQluZXdqLT5xdWFscyA9IChOb2Rl ICopIG1ha2VfYW5kc19leHBsaWNpdChqb2luX2NsYXVzZXMpOworCQkJfQorCQl9CisJCWVs c2UKKwkJeworCQkJaWYgKGNvbnRhaW5fdmFyc19vZl9sZXZlbChqLT5xdWFscywgMSkpCisJ CQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlyZXR1cm4gKE5vZGUgKikgbmV3ajsKKwl9CisK KwlpZiAoSXNBKGp0bm9kZSwgRnJvbUV4cHIpKQorCXsKKwkJRnJvbUV4cHIgKmYgPSAoRnJv bUV4cHIgKikganRub2RlOworCQlGcm9tRXhwciAqbmV3ZiA9IG1ha2VOb2RlKEZyb21FeHBy KTsKKwkJTGlzdENlbGwgKmxjOworCQlMaXN0ICpmcm9tbGlzdCA9IE5JTDsKKworCQkvKiBS ZWN1cnNlIGludG8gZnJvbWxpc3QgKi8KKwkJbWVtY3B5KG5ld2YsIGYsIHNpemVvZihGcm9t RXhwcikpOworCisJCS8qCisJCSAqIFByb2Nlc3MgY2hpbGRyZW4sIGlmIGFueSBvZiB0aGVp ciBqb2ludHJlZSBjb250YWlucyBWYXJzIG9mIHRoZQorCQkgKiBwYXJlbnQgcXVlcnkgb3Ig cXVhbHMgb2YgdGhlaXIgSm9pbkV4cHIgY29udGFpbnMgdm9sYXRpbGUgZnVuY3Rpb25zCisJ CSAqIHRoZW4gZXhpdAorCQkgKi8KKwkJZm9yZWFjaChsYywgbmV3Zi0+ZnJvbWxpc3QpCisJ CXsKKwkJCU5vZGUgKmZub2RlID0gaG9pc3RfcGFyZW50X3F1YWxzX2pvaW50cmVlX211dGF0 b3IobGZpcnN0KGxjKSwgY29udGV4dCk7CisKKwkJCWlmIChmbm9kZSA9PSBOVUxMKQorCQkJ CXJldHVybiBOVUxMOworCQkJZnJvbWxpc3QgPSBsYXBwZW5kKGZyb21saXN0LCBmbm9kZSk7 CisJCX0KKworCQluZXdmLT5mcm9tbGlzdCA9IGZyb21saXN0OworCisJCWlmKGNvbnRhaW5f dm9sYXRpbGVfZnVuY3Rpb25zKG5ld2YtPnF1YWxzKSkKKwkJCXJldHVybiBOVUxMOworCisJ CWlmKG5ld2YtPnF1YWxzKQorCQl7CisJCQlOb2RlICpxdWFsID0gbmV3Zi0+cXVhbHM7CisJ CQkvKiBRdWFscyAoV0hFUkUgY2xhdXNlKSBtYXkgc3RpbGwgY29udGFpbiBzdWJsaW5rcyBl dGMgKi8KKwkJCXF1YWwgPSBwcmVwcm9jZXNzX3F1YWxzKHF1YWwpOworCQkJY29udGV4dC0+ b3V0ZXJfY2xhdXNlcyA9IGxpc3RfY29uY2F0KGNvbnRleHQtPm91dGVyX2NsYXVzZXMsIChM aXN0ICopIHF1YWwpOworCQkJbmV3Zi0+cXVhbHMgPSBOVUxMOworCQl9CisKKwkJcmV0dXJu IChOb2RlICopIG5ld2Y7CisJfQorCisJcmV0dXJuIGp0bm9kZTsgIC8qIHF1aWV0IGNvbXBp bGVyICovCit9CisKK2Jvb2wgcHVsbF91cF93aXRoX2pvaW5zID0gdHJ1ZTsKKwogLyoKICAq IGNvbnZlcnRfRVhJU1RTX3N1YmxpbmtfdG9fam9pbjogdHJ5IHRvIGNvbnZlcnQgYW4gRVhJ U1RTIFN1YkxpbmsgdG8gYSBqb2luCiAgKgpAQCAtMTQ1MywxMiArMTY4NiwxMyBAQCBjb252 ZXJ0X0VYSVNUU19zdWJsaW5rX3RvX2pvaW4oUGxhbm5lckluZm8gKnJvb3QsIFN1Ykxpbmsg KnN1YmxpbmssCiAJSm9pbkV4cHIgICAqcmVzdWx0OwogCVF1ZXJ5CSAgICpwYXJzZSA9IHJv b3QtPnBhcnNlOwogCVF1ZXJ5CSAgICpzdWJzZWxlY3QgPSAoUXVlcnkgKikgc3VibGluay0+ c3Vic2VsZWN0OwotCU5vZGUJICAgKndoZXJlQ2xhdXNlOworCU5vZGUJICAgKndoZXJlQ2xh dXNlID0gTlVMTDsKIAlQbGFubmVySW5mbyBzdWJyb290OwogCWludAkJCXJ0b2Zmc2V0Owog CWludAkJCXZhcm5vOwogCVJlbGlkcwkJY2xhdXNlX3Zhcm5vczsKIAlSZWxpZHMJCXVwcGVy X3Zhcm5vczsKKwlMaXN0IAkgICAqbmV3V2hlcmUgPSBOSUw7CiAKIAlBc3NlcnQoc3VibGlu ay0+c3ViTGlua1R5cGUgPT0gRVhJU1RTX1NVQkxJTkspOwogCkBAIC0xNDg4LDE0NSArMTcy MiwyNjkgQEAgY29udmVydF9FWElTVFNfc3VibGlua190b19qb2luKFBsYW5uZXJJbmZvICpy b290LCBTdWJMaW5rICpzdWJsaW5rLAogCWlmICghc2ltcGxpZnlfRVhJU1RTX3F1ZXJ5KHJv b3QsIHN1YnNlbGVjdCkpCiAJCXJldHVybiBOVUxMOwogCi0JLyoKLQkgKiBTZXBhcmF0ZSBv dXQgdGhlIFdIRVJFIGNsYXVzZS4gIChXZSBjb3VsZCB0aGVvcmV0aWNhbGx5IGFsc28gcmVt b3ZlCi0JICogdG9wLWxldmVsIHBsYWluIEpPSU4vT04gY2xhdXNlcywgYnV0IGl0J3MgcHJv YmFibHkgbm90IHdvcnRoIHRoZQotCSAqIHRyb3VibGUuKQotCSAqLwotCXdoZXJlQ2xhdXNl ID0gc3Vic2VsZWN0LT5qb2ludHJlZS0+cXVhbHM7Ci0Jc3Vic2VsZWN0LT5qb2ludHJlZS0+ cXVhbHMgPSBOVUxMOwogCi0JLyoKLQkgKiBUaGUgcmVzdCBvZiB0aGUgc3ViLXNlbGVjdCBt dXN0IG5vdCByZWZlciB0byBhbnkgVmFycyBvZiB0aGUgcGFyZW50Ci0JICogcXVlcnkuICAo VmFycyBvZiBoaWdoZXIgbGV2ZWxzIHNob3VsZCBiZSBva2F5LCB0aG91Z2guKQotCSAqLwot CWlmIChjb250YWluX3ZhcnNfb2ZfbGV2ZWwoKE5vZGUgKikgc3Vic2VsZWN0LCAxKSkKLQkJ cmV0dXJuIE5VTEw7CisJaWYocHVsbF91cF93aXRoX2pvaW5zKQorCXsKKwkJSG9pc3RKb2lu UXVhbHNDb250ZXh0IGhqcV9jb250ZXh0ID0ge05JTCwgTlVMTH07CiAKLQkvKgotCSAqIE9u IHRoZSBvdGhlciBoYW5kLCB0aGUgV0hFUkUgY2xhdXNlIG11c3QgY29udGFpbiBzb21lIFZh cnMgb2YgdGhlCi0JICogcGFyZW50IHF1ZXJ5LCBlbHNlIGl0J3Mgbm90IGdvbm5hIGJlIGEg am9pbi4KLQkgKi8KLQlpZiAoIWNvbnRhaW5fdmFyc19vZl9sZXZlbCh3aGVyZUNsYXVzZSwg MSkpCi0JCXJldHVybiBOVUxMOworCQlzdWJzZWxlY3QtPmpvaW50cmVlID0gKEZyb21FeHBy ICogKSBob2lzdF9wYXJlbnRfcXVhbHNfam9pbnRyZWVfbXV0YXRvcigoTm9kZSAqKSBzdWJz ZWxlY3QtPmpvaW50cmVlLCAmaGpxX2NvbnRleHQpOwogCi0JLyoKLQkgKiBXZSBkb24ndCBy aXNrIG9wdGltaXppbmcgaWYgdGhlIFdIRVJFIGNsYXVzZSBpcyB2b2xhdGlsZSwgZWl0aGVy LgotCSAqLwotCWlmIChjb250YWluX3ZvbGF0aWxlX2Z1bmN0aW9ucyh3aGVyZUNsYXVzZSkp Ci0JCXJldHVybiBOVUxMOworCQlpZihzdWJzZWxlY3QtPmpvaW50cmVlID09IE5VTEwgfHwg aGpxX2NvbnRleHQub3V0ZXJfY2xhdXNlcyA9PSBOSUwpCisJCQlyZXR1cm4gTlVMTDsKIAot CS8qCi0JICogU2NhbiB0aGUgcmFuZ2V0YWJsZSBmb3IgcmVsYXRpb24gUlRFcyBhbmQgcmV0 cmlldmUgdGhlIG5lY2Vzc2FyeQotCSAqIGNhdGFsb2cgaW5mb3JtYXRpb24gZm9yIGVhY2gg cmVsYXRpb24uICBVc2luZyB0aGlzIGluZm9ybWF0aW9uLCBjbGVhcgotCSAqIHRoZSBpbmgg ZmxhZyBmb3IgYW55IHJlbGF0aW9uIHRoYXQgaGFzIG5vIGNoaWxkcmVuLCBjb2xsZWN0IG5v dC1udWxsCi0JICogYXR0cmlidXRlIG51bWJlcnMgZm9yIGFueSByZWxhdGlvbiB0aGF0IGhh cyBjb2x1bW4gbm90LW51bGwKLQkgKiBjb25zdHJhaW50cywgYW5kIGV4cGFuZCB2aXJ0dWFs IGdlbmVyYXRlZCBjb2x1bW5zIGZvciBhbnkgcmVsYXRpb24gdGhhdAotCSAqIGNvbnRhaW5z IHRoZW0uCi0JICoKLQkgKiBOb3RlOiB3ZSBjb25zdHJ1Y3QgdXAgYW4gZW50aXJlbHkgZHVt bXkgUGxhbm5lckluZm8gZm9yIHVzZSBoZXJlLiAgVGhpcwotCSAqIGlzIGZpbmUgYmVjYXVz ZSBvbmx5IHRoZSAiZ2xvYiIgYW5kICJwYXJzZSIgbGlua3Mgd2lsbCBiZSB1c2VkIGluIHRo aXMKLQkgKiBjYXNlLgotCSAqCi0JICogTm90ZTogd2UgdGVtcG9yYXJpbHkgYXNzaWduIGJh Y2sgdGhlIFdIRVJFIGNsYXVzZSBzbyB0aGF0IGFueSB2aXJ0dWFsCi0JICogZ2VuZXJhdGVk IGNvbHVtbiByZWZlcmVuY2VzIHdpdGhpbiBpdCBjYW4gYmUgZXhwYW5kZWQuICBJdCBzaG91 bGQgYmUKLQkgKiBzZXBhcmF0ZWQgb3V0IGFnYWluIGFmdGVyd2FyZC4KLQkgKi8KLQlNZW1T ZXQoJnN1YnJvb3QsIDAsIHNpemVvZihzdWJyb290KSk7Ci0Jc3Vicm9vdC50eXBlID0gVF9Q bGFubmVySW5mbzsKLQlzdWJyb290Lmdsb2IgPSByb290LT5nbG9iOwotCXN1YnJvb3QucGFy c2UgPSBzdWJzZWxlY3Q7Ci0Jc3Vic2VsZWN0LT5qb2ludHJlZS0+cXVhbHMgPSB3aGVyZUNs YXVzZTsKLQlzdWJzZWxlY3QgPSBwcmVwcm9jZXNzX3JlbGF0aW9uX3J0ZXMoJnN1YnJvb3Qp OworCQluZXdXaGVyZSA9IGhqcV9jb250ZXh0Lm91dGVyX2NsYXVzZXM7CiAKLQkvKgotCSAq IE5vdyBzZXBhcmF0ZSBvdXQgdGhlIFdIRVJFIGNsYXVzZSBhZ2Fpbi4KLQkgKi8KLQl3aGVy ZUNsYXVzZSA9IHN1YnNlbGVjdC0+am9pbnRyZWUtPnF1YWxzOwotCXN1YnNlbGVjdC0+am9p bnRyZWUtPnF1YWxzID0gTlVMTDsKKwkJYm1zX2ZyZWUoaGpxX2NvbnRleHQub2JzZXJ2ZWRf bnVsbHRlc3RfdmFycyk7CiAKLQkvKgotCSAqIFRoZSBzdWJxdWVyeSBtdXN0IGhhdmUgYSBu b25lbXB0eSBqb2ludHJlZSwgYnV0IHdlIGNhbiBtYWtlIGl0IHNvLgotCSAqLwotCXJlcGxh Y2VfZW1wdHlfam9pbnRyZWUoc3Vic2VsZWN0KTsKIAotCS8qCi0JICogUHJlcGFyZSB0byBw dWxsIHVwIHRoZSBzdWItc2VsZWN0IGludG8gdG9wIHJhbmdlIHRhYmxlLgotCSAqCi0JICog V2UgcmVseSBoZXJlIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIG91dGVyIHF1ZXJ5IGhh cyBubyByZWZlcmVuY2VzCi0JICogdG8gdGhlIGlubmVyIChuZWNlc3NhcmlseSB0cnVlKS4g VGhlcmVmb3JlIHRoaXMgaXMgYSBsb3QgZWFzaWVyIHRoYW4KLQkgKiB3aGF0IHB1bGxfdXBf c3VicXVlcmllcyBoYXMgdG8gZ28gdGhyb3VnaC4KLQkgKgotCSAqIEluIGZhY3QsIGl0J3Mg ZXZlbiBlYXNpZXIgdGhhbiB3aGF0IGNvbnZlcnRfQU5ZX3N1YmxpbmtfdG9fam9pbiBoYXMg dG8KLQkgKiBkby4gIFRoZSBtYWNoaW5hdGlvbnMgb2Ygc2ltcGxpZnlfRVhJU1RTX3F1ZXJ5 IGVuc3VyZWQgdGhhdCB0aGVyZSBpcwotCSAqIG5vdGhpbmcgaW50ZXJlc3RpbmcgaW4gdGhl IHN1YnF1ZXJ5IGV4Y2VwdCBhbiBydGFibGUgYW5kIGpvaW50cmVlLCBhbmQKLQkgKiBldmVu IHRoZSBqb2ludHJlZSBGcm9tRXhwciBubyBsb25nZXIgaGFzIHF1YWxzLiAgU28gd2UgY2Fu IGp1c3QgYXBwZW5kCi0JICogdGhlIHJ0YWJsZSB0byBvdXIgb3duIGFuZCB1c2UgdGhlIEZy b21FeHByIGluIG91ciBqb2ludHJlZS4gQnV0IGZpcnN0LAotCSAqIGFkanVzdCBhbGwgbGV2 ZWwtemVybyB2YXJub3MgaW4gdGhlIHN1YnF1ZXJ5IHRvIGFjY291bnQgZm9yIHRoZSBydGFi bGUKLQkgKiBtZXJnZXIuCi0JICovCi0JcnRvZmZzZXQgPSBsaXN0X2xlbmd0aChwYXJzZS0+ cnRhYmxlKTsKLQlPZmZzZXRWYXJOb2RlcygoTm9kZSAqKSBzdWJzZWxlY3QsIHJ0b2Zmc2V0 LCAwKTsKLQlPZmZzZXRWYXJOb2Rlcyh3aGVyZUNsYXVzZSwgcnRvZmZzZXQsIDApOworCQkv KgorCQkqIFRoZSBzdWJxdWVyeSBtdXN0IGhhdmUgYSBub25lbXB0eSBqb2ludHJlZSwgYnV0 IHdlIGNhbiBtYWtlIGl0IHNvLgorCQkqLworCQlyZXBsYWNlX2VtcHR5X2pvaW50cmVlKHN1 YnNlbGVjdCk7CiAKLQkvKgotCSAqIFVwcGVyLWxldmVsIHZhcnMgaW4gc3VicXVlcnkgd2ls bCBub3cgYmUgb25lIGxldmVsIGNsb3NlciB0byB0aGVpcgotCSAqIHBhcmVudCB0aGFuIGJl Zm9yZTsgaW4gcGFydGljdWxhciwgYW55dGhpbmcgdGhhdCBoYWQgYmVlbiBsZXZlbCAxCi0J ICogYmVjb21lcyBsZXZlbCB6ZXJvLgotCSAqLwotCUluY3JlbWVudFZhclN1YmxldmVsc1Vw KChOb2RlICopIHN1YnNlbGVjdCwgLTEsIDEpOwotCUluY3JlbWVudFZhclN1YmxldmVsc1Vw KHdoZXJlQ2xhdXNlLCAtMSwgMSk7CisJCS8qCisJCSogUHJlcGFyZSB0byBwdWxsIHVwIHRo ZSBzdWItc2VsZWN0IGludG8gdG9wIHJhbmdlIHRhYmxlLgorCQkqCisJCSogV2UgcmVseSBo ZXJlIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIG91dGVyIHF1ZXJ5IGhhcyBubyByZWZl cmVuY2VzCisJCSogdG8gdGhlIGlubmVyIChuZWNlc3NhcmlseSB0cnVlKS4gVGhlcmVmb3Jl IHRoaXMgaXMgYSBsb3QgZWFzaWVyIHRoYW4KKwkJKiB3aGF0IHB1bGxfdXBfc3VicXVlcmll cyBoYXMgdG8gZ28gdGhyb3VnaC4KKwkJKgorCQkqIEluIGZhY3QsIGl0J3MgZXZlbiBlYXNp ZXIgdGhhbiB3aGF0IGNvbnZlcnRfQU5ZX3N1YmxpbmtfdG9fam9pbiBoYXMgdG8KKwkJKiBk by4gIFRoZSBtYWNoaW5hdGlvbnMgb2Ygc2ltcGxpZnlfRVhJU1RTX3F1ZXJ5IGVuc3VyZWQg dGhhdCB0aGVyZSBpcworCQkqIG5vdGhpbmcgaW50ZXJlc3RpbmcgaW4gdGhlIHN1YnF1ZXJ5 IGV4Y2VwdCBhbiBydGFibGUgYW5kIGpvaW50cmVlLCBhbmQKKwkJKiBldmVuIHRoZSBqb2lu dHJlZSBGcm9tRXhwciBubyBsb25nZXIgaGFzIHF1YWxzLiAgU28gd2UgY2FuIGp1c3QgYXBw ZW5kCisJCSogdGhlIHJ0YWJsZSB0byBvdXIgb3duIGFuZCB1c2UgdGhlIEZyb21FeHByIGlu IG91ciBqb2ludHJlZS4gQnV0IGZpcnN0LAorCQkqIGFkanVzdCBhbGwgbGV2ZWwtemVybyB2 YXJub3MgaW4gdGhlIHN1YnF1ZXJ5IHRvIGFjY291bnQgZm9yIHRoZSBydGFibGUKKwkJKiBt ZXJnZXIuCisJCSovCisJCXJ0b2Zmc2V0ID0gbGlzdF9sZW5ndGgocGFyc2UtPnJ0YWJsZSk7 CisJCU9mZnNldFZhck5vZGVzKChOb2RlICopIHN1YnNlbGVjdCwgcnRvZmZzZXQsIDApOwog Ci0JLyoKLQkgKiBOb3cgdGhhdCB0aGUgV0hFUkUgY2xhdXNlIGlzIGFkanVzdGVkIHRvIG1h dGNoIHRoZSBwYXJlbnQgcXVlcnkKLQkgKiBlbnZpcm9ubWVudCwgd2UgY2FuIGVhc2lseSBp ZGVudGlmeSBhbGwgdGhlIGxldmVsLXplcm8gcmVscyBpdCB1c2VzLgotCSAqIFRoZSBvbmVz IDw9IHJ0b2Zmc2V0IGJlbG9uZyB0byB0aGUgdXBwZXIgcXVlcnk7IHRoZSBvbmVzID4gcnRv ZmZzZXQgZG8KLQkgKiBub3QuCi0JICovCi0JY2xhdXNlX3Zhcm5vcyA9IHB1bGxfdmFybm9z KHJvb3QsIHdoZXJlQ2xhdXNlKTsKLQl1cHBlcl92YXJub3MgPSBOVUxMOwotCXZhcm5vID0g LTE7Ci0Jd2hpbGUgKCh2YXJubyA9IGJtc19uZXh0X21lbWJlcihjbGF1c2VfdmFybm9zLCB2 YXJubykpID49IDApCi0JewotCQlpZiAodmFybm8gPD0gcnRvZmZzZXQpCi0JCQl1cHBlcl92 YXJub3MgPSBibXNfYWRkX21lbWJlcih1cHBlcl92YXJub3MsIHZhcm5vKTsKLQl9Ci0JYm1z X2ZyZWUoY2xhdXNlX3Zhcm5vcyk7Ci0JQXNzZXJ0KCFibXNfaXNfZW1wdHkodXBwZXJfdmFy bm9zKSk7CisJCS8qCisJCSogVXBwZXItbGV2ZWwgdmFycyBpbiBzdWJxdWVyeSB3aWxsIG5v dyBiZSBvbmUgbGV2ZWwgY2xvc2VyIHRvIHRoZWlyCisJCSogcGFyZW50IHRoYW4gYmVmb3Jl OyBpbiBwYXJ0aWN1bGFyLCBhbnl0aGluZyB0aGF0IGhhZCBiZWVuIGxldmVsIDEKKwkJKiBi ZWNvbWVzIGxldmVsIHplcm8uCisJCSovCisJCUluY3JlbWVudFZhclN1YmxldmVsc1VwKChO b2RlICopIHN1YnNlbGVjdCwgLTEsIDEpOwogCi0JLyoKLQkgKiBOb3cgdGhhdCB3ZSd2ZSBn b3QgdGhlIHNldCBvZiB1cHBlci1sZXZlbCB2YXJub3MsIHdlIGNhbiBtYWtlIHRoZSBsYXN0 Ci0JICogY2hlY2s6IG9ubHkgYXZhaWxhYmxlX3JlbHMgY2FuIGJlIHJlZmVyZW5jZWQuCi0J ICovCi0JaWYgKCFibXNfaXNfc3Vic2V0KHVwcGVyX3Zhcm5vcywgYXZhaWxhYmxlX3JlbHMp KQotCQlyZXR1cm4gTlVMTDsKKwkJT2Zmc2V0VmFyTm9kZXMoKE5vZGUgKikgbmV3V2hlcmUs IHJ0b2Zmc2V0LCAwKTsKKwkJSW5jcmVtZW50VmFyU3VibGV2ZWxzVXAoKE5vZGUgKikgbmV3 V2hlcmUsIC0xLCAxKTsKIAotCS8qCi0JICogTm93IHdlIGNhbiBhdHRhY2ggdGhlIG1vZGlm aWVkIHN1YnF1ZXJ5IHJ0YWJsZSB0byB0aGUgcGFyZW50LiBUaGlzIGFsc28KLQkgKiBhZGRz IHN1YnF1ZXJ5J3MgUlRFUGVybWlzc2lvbkluZm9zIGludG8gdGhlIHVwcGVyIHF1ZXJ5Lgot CSAqLwotCUNvbWJpbmVSYW5nZVRhYmxlcygmcGFyc2UtPnJ0YWJsZSwgJnBhcnNlLT5ydGVw ZXJtaW5mb3MsCi0JCQkJCSAgIHN1YnNlbGVjdC0+cnRhYmxlLCBzdWJzZWxlY3QtPnJ0ZXBl cm1pbmZvcyk7CisJCS8qCisJCSogTm93IHRoYXQgdGhlIFdIRVJFIGNsYXVzZSBpcyBhZGp1 c3RlZCB0byBtYXRjaCB0aGUgcGFyZW50IHF1ZXJ5CisJCSogZW52aXJvbm1lbnQsIHdlIGNh biBlYXNpbHkgaWRlbnRpZnkgYWxsIHRoZSBsZXZlbC16ZXJvIHJlbHMgaXQgdXNlcy4KKwkJ KiBUaGUgb25lcyA8PSBydG9mZnNldCBiZWxvbmcgdG8gdGhlIHVwcGVyIHF1ZXJ5OyB0aGUg b25lcyA+IHJ0b2Zmc2V0IGRvCisJCSogbm90LgorCQkqLworCQljbGF1c2VfdmFybm9zID0g cHVsbF92YXJub3Mocm9vdCwgKE5vZGUgKikgbmV3V2hlcmUpOworCQl1cHBlcl92YXJub3Mg PSBOVUxMOworCQl2YXJubyA9IC0xOworCQl3aGlsZSAoKHZhcm5vID0gYm1zX25leHRfbWVt YmVyKGNsYXVzZV92YXJub3MsIHZhcm5vKSkgPj0gMCkKKwkJeworCQkJaWYgKHZhcm5vIDw9 IHJ0b2Zmc2V0KQorCQkJCXVwcGVyX3Zhcm5vcyA9IGJtc19hZGRfbWVtYmVyKHVwcGVyX3Zh cm5vcywgdmFybm8pOworCQl9CisJCWJtc19mcmVlKGNsYXVzZV92YXJub3MpOwogCi0JLyoK LQkgKiBBbmQgZmluYWxseSwgYnVpbGQgdGhlIEpvaW5FeHByIG5vZGUuCi0JICovCi0JcmVz dWx0ID0gbWFrZU5vZGUoSm9pbkV4cHIpOwotCXJlc3VsdC0+am9pbnR5cGUgPSB1bmRlcl9u b3QgPyBKT0lOX0FOVEkgOiBKT0lOX1NFTUk7Ci0JcmVzdWx0LT5pc05hdHVyYWwgPSBmYWxz ZTsKLQlyZXN1bHQtPmxhcmcgPSBOVUxMOwkJLyogY2FsbGVyIG11c3QgZmlsbCB0aGlzIGlu ICovCi0JLyogZmxhdHRlbiBvdXQgdGhlIEZyb21FeHByIG5vZGUgaWYgaXQncyB1c2VsZXNz ICovCi0JaWYgKGxpc3RfbGVuZ3RoKHN1YnNlbGVjdC0+am9pbnRyZWUtPmZyb21saXN0KSA9 PSAxKQotCQlyZXN1bHQtPnJhcmcgPSAoTm9kZSAqKSBsaW5pdGlhbChzdWJzZWxlY3QtPmpv aW50cmVlLT5mcm9tbGlzdCk7CisJCS8qCisJCSogTm93IHRoYXQgd2UndmUgZ290IHRoZSBz ZXQgb2YgdXBwZXItbGV2ZWwgdmFybm9zLCB3ZSBjYW4gbWFrZSB0aGUgbGFzdAorCQkqIGNo ZWNrOiBvbmx5IGF2YWlsYWJsZV9yZWxzIGNhbiBiZSByZWZlcmVuY2VkLgorCQkqLworCQlp ZiAoIWJtc19pc19lbXB0eSh1cHBlcl92YXJub3MpICYmICFibXNfaXNfc3Vic2V0KHVwcGVy X3Zhcm5vcywgYXZhaWxhYmxlX3JlbHMpKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJLyoKKwkJ KiBOb3cgd2UgY2FuIGF0dGFjaCB0aGUgbW9kaWZpZWQgc3VicXVlcnkgcnRhYmxlIHRvIHRo ZSBwYXJlbnQuIFRoaXMgYWxzbworCQkqIGFkZHMgc3VicXVlcnkncyBSVEVQZXJtaXNzaW9u SW5mb3MgaW50byB0aGUgdXBwZXIgcXVlcnkuCisJCSovCisJCUNvbWJpbmVSYW5nZVRhYmxl cygmcGFyc2UtPnJ0YWJsZSwgJnBhcnNlLT5ydGVwZXJtaW5mb3MsCisJCQkJCQlzdWJzZWxl Y3QtPnJ0YWJsZSwgc3Vic2VsZWN0LT5ydGVwZXJtaW5mb3MpOworCisJCS8qCisJCSogQW5k IGZpbmFsbHksIGJ1aWxkIHRoZSBKb2luRXhwciBub2RlLgorCQkqLworCQlyZXN1bHQgPSBt YWtlTm9kZShKb2luRXhwcik7CisJCXJlc3VsdC0+am9pbnR5cGUgPSB1bmRlcl9ub3QgPyBK T0lOX0FOVEkgOiBKT0lOX1NFTUk7CisJCXJlc3VsdC0+aXNOYXR1cmFsID0gZmFsc2U7CisJ CXJlc3VsdC0+bGFyZyA9IE5VTEw7CQkvKiBjYWxsZXIgbXVzdCBmaWxsIHRoaXMgaW4gKi8K KwkJLyogZmxhdHRlbiBvdXQgdGhlIEZyb21FeHByIG5vZGUgaWYgaXQncyB1c2VsZXNzICov CisJCWlmIChsaXN0X2xlbmd0aChzdWJzZWxlY3QtPmpvaW50cmVlLT5mcm9tbGlzdCkgPT0g MSkKKwkJCXJlc3VsdC0+cmFyZyA9IChOb2RlICopIGxpbml0aWFsKHN1YnNlbGVjdC0+am9p bnRyZWUtPmZyb21saXN0KTsKKwkJZWxzZQorCQkJcmVzdWx0LT5yYXJnID0gKE5vZGUgKikg c3Vic2VsZWN0LT5qb2ludHJlZTsKKwkJcmVzdWx0LT51c2luZ0NsYXVzZSA9IE5JTDsKKwkJ cmVzdWx0LT5qb2luX3VzaW5nX2FsaWFzID0gTlVMTDsKKwkJcmVzdWx0LT5xdWFscyA9IChO b2RlICopIG1ha2VfYW5kc19leHBsaWNpdChuZXdXaGVyZSk7CisJCXJlc3VsdC0+YWxpYXMg PSBOVUxMOworCQlyZXN1bHQtPnJ0aW5kZXggPSAwOwkJLyogd2UgZG9uJ3QgbmVlZCBhbiBS VEUgZm9yIGl0ICovCisKKwkJLyoKKwkJKiBTY2FuIHRoZSByYW5nZXRhYmxlIGZvciByZWxh dGlvbiBSVEVzIGFuZCByZXRyaWV2ZSB0aGUgbmVjZXNzYXJ5CisJCSogY2F0YWxvZyBpbmZv cm1hdGlvbiBmb3IgZWFjaCByZWxhdGlvbi4gIFVzaW5nIHRoaXMgaW5mb3JtYXRpb24sIGNs ZWFyCisJCSogdGhlIGluaCBmbGFnIGZvciBhbnkgcmVsYXRpb24gdGhhdCBoYXMgbm8gY2hp bGRyZW4sIGNvbGxlY3Qgbm90LW51bGwKKwkJKiBhdHRyaWJ1dGUgbnVtYmVycyBmb3IgYW55 IHJlbGF0aW9uIHRoYXQgaGFzIGNvbHVtbiBub3QtbnVsbAorCQkqIGNvbnN0cmFpbnRzLCBh bmQgZXhwYW5kIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMgZm9yIGFueSByZWxhdGlvbiB0 aGF0CisJCSogY29udGFpbnMgdGhlbS4KKwkJKgorCQkqIE5vdGU6IHdlIGNvbnN0cnVjdCB1 cCBhbiBlbnRpcmVseSBkdW1teSBQbGFubmVySW5mbyBmb3IgdXNlIGhlcmUuICBUaGlzCisJ CSogaXMgZmluZSBiZWNhdXNlIG9ubHkgdGhlICJnbG9iIiBhbmQgInBhcnNlIiBsaW5rcyB3 aWxsIGJlIHVzZWQgaW4gdGhpcworCQkqIGNhc2UuCisJCSoKKwkJKiBOb3RlOiB3ZSB0ZW1w b3JhcmlseSBhc3NpZ24gYmFjayB0aGUgV0hFUkUgY2xhdXNlIHNvIHRoYXQgYW55IHZpcnR1 YWwKKwkJKiBnZW5lcmF0ZWQgY29sdW1uIHJlZmVyZW5jZXMgd2l0aGluIGl0IGNhbiBiZSBl eHBhbmRlZC4gIEl0IHNob3VsZCBiZQorCQkqIHNlcGFyYXRlZCBvdXQgYWdhaW4gYWZ0ZXJ3 YXJkLgorCQkqLworCQlNZW1TZXQoJnN1YnJvb3QsIDAsIHNpemVvZihzdWJyb290KSk7CisJ CXN1YnJvb3QudHlwZSA9IFRfUGxhbm5lckluZm87CisJCXN1YnJvb3QuZ2xvYiA9IHJvb3Qt Pmdsb2I7CisJCXN1YnJvb3QucGFyc2UgPSBzdWJzZWxlY3Q7CisJCXN1YnNlbGVjdC0+am9p bnRyZWUtPnF1YWxzID0gcmVzdWx0LT5xdWFsczsKKwkJc3Vic2VsZWN0ID0gcHJlcHJvY2Vz c19yZWxhdGlvbl9ydGVzKCZzdWJyb290KTsKKworCQlyZXR1cm4gcmVzdWx0OworCX0KIAll bHNlCi0JCXJlc3VsdC0+cmFyZyA9IChOb2RlICopIHN1YnNlbGVjdC0+am9pbnRyZWU7Ci0J cmVzdWx0LT51c2luZ0NsYXVzZSA9IE5JTDsKLQlyZXN1bHQtPmpvaW5fdXNpbmdfYWxpYXMg PSBOVUxMOwotCXJlc3VsdC0+cXVhbHMgPSB3aGVyZUNsYXVzZTsKLQlyZXN1bHQtPmFsaWFz ID0gTlVMTDsKLQlyZXN1bHQtPnJ0aW5kZXggPSAwOwkJLyogd2UgZG9uJ3QgbmVlZCBhbiBS VEUgZm9yIGl0ICovCisJeworCQkvKgorCQkqIFNlcGFyYXRlIG91dCB0aGUgV0hFUkUgY2xh dXNlLiAgKFdlIGNvdWxkIHRoZW9yZXRpY2FsbHkgYWxzbyByZW1vdmUKKwkJKiB0b3AtbGV2 ZWwgcGxhaW4gSk9JTi9PTiBjbGF1c2VzLCBidXQgaXQncyBwcm9iYWJseSBub3Qgd29ydGgg dGhlCisJCSogdHJvdWJsZS4pCisJCSovCisJCXdoZXJlQ2xhdXNlID0gc3Vic2VsZWN0LT5q b2ludHJlZS0+cXVhbHM7CisJCXN1YnNlbGVjdC0+am9pbnRyZWUtPnF1YWxzID0gTlVMTDsK IAotCXJldHVybiByZXN1bHQ7CisJCS8qCisJCSogVGhlIHJlc3Qgb2YgdGhlIHN1Yi1zZWxl Y3QgbXVzdCBub3QgcmVmZXIgdG8gYW55IFZhcnMgb2YgdGhlIHBhcmVudAorCQkqIHF1ZXJ5 LiAgKFZhcnMgb2YgaGlnaGVyIGxldmVscyBzaG91bGQgYmUgb2theSwgdGhvdWdoLikKKwkJ Ki8KKwkJaWYgKGNvbnRhaW5fdmFyc19vZl9sZXZlbCgoTm9kZSAqKSBzdWJzZWxlY3QsIDEp KQorCQkJcmV0dXJuIE5VTEw7CisKKwkJLyoKKwkJKiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhl IFdIRVJFIGNsYXVzZSBtdXN0IGNvbnRhaW4gc29tZSBWYXJzIG9mIHRoZQorCQkqIHBhcmVu dCBxdWVyeSwgZWxzZSBpdCdzIG5vdCBnb25uYSBiZSBhIGpvaW4uCisJCSovCisJCWlmICgh Y29udGFpbl92YXJzX29mX2xldmVsKHdoZXJlQ2xhdXNlLCAxKSkKKwkJCXJldHVybiBOVUxM OworCisJCS8qCisJCSogV2UgZG9uJ3QgcmlzayBvcHRpbWl6aW5nIGlmIHRoZSBXSEVSRSBj bGF1c2UgaXMgdm9sYXRpbGUsIGVpdGhlci4KKwkJKi8KKwkJaWYgKGNvbnRhaW5fdm9sYXRp bGVfZnVuY3Rpb25zKHdoZXJlQ2xhdXNlKSkKKwkJCXJldHVybiBOVUxMOworCisJCS8qCisJ CSogU2NhbiB0aGUgcmFuZ2V0YWJsZSBmb3IgcmVsYXRpb24gUlRFcyBhbmQgcmV0cmlldmUg dGhlIG5lY2Vzc2FyeQorCQkqIGNhdGFsb2cgaW5mb3JtYXRpb24gZm9yIGVhY2ggcmVsYXRp b24uICBVc2luZyB0aGlzIGluZm9ybWF0aW9uLCBjbGVhcgorCQkqIHRoZSBpbmggZmxhZyBm b3IgYW55IHJlbGF0aW9uIHRoYXQgaGFzIG5vIGNoaWxkcmVuLCBjb2xsZWN0IG5vdC1udWxs CisJCSogYXR0cmlidXRlIG51bWJlcnMgZm9yIGFueSByZWxhdGlvbiB0aGF0IGhhcyBjb2x1 bW4gbm90LW51bGwKKwkJKiBjb25zdHJhaW50cywgYW5kIGV4cGFuZCB2aXJ0dWFsIGdlbmVy YXRlZCBjb2x1bW5zIGZvciBhbnkgcmVsYXRpb24gdGhhdAorCQkqIGNvbnRhaW5zIHRoZW0u CisJCSoKKwkJKiBOb3RlOiB3ZSBjb25zdHJ1Y3QgdXAgYW4gZW50aXJlbHkgZHVtbXkgUGxh bm5lckluZm8gZm9yIHVzZSBoZXJlLiAgVGhpcworCQkqIGlzIGZpbmUgYmVjYXVzZSBvbmx5 IHRoZSAiZ2xvYiIgYW5kICJwYXJzZSIgbGlua3Mgd2lsbCBiZSB1c2VkIGluIHRoaXMKKwkJ KiBjYXNlLgorCQkqCisJCSogTm90ZTogd2UgdGVtcG9yYXJpbHkgYXNzaWduIGJhY2sgdGhl IFdIRVJFIGNsYXVzZSBzbyB0aGF0IGFueSB2aXJ0dWFsCisJCSogZ2VuZXJhdGVkIGNvbHVt biByZWZlcmVuY2VzIHdpdGhpbiBpdCBjYW4gYmUgZXhwYW5kZWQuICBJdCBzaG91bGQgYmUK KwkJKiBzZXBhcmF0ZWQgb3V0IGFnYWluIGFmdGVyd2FyZC4KKwkJKi8KKwkJTWVtU2V0KCZz dWJyb290LCAwLCBzaXplb2Yoc3Vicm9vdCkpOworCQlzdWJyb290LnR5cGUgPSBUX1BsYW5u ZXJJbmZvOworCQlzdWJyb290Lmdsb2IgPSByb290LT5nbG9iOworCQlzdWJyb290LnBhcnNl ID0gc3Vic2VsZWN0OworCQlzdWJzZWxlY3QtPmpvaW50cmVlLT5xdWFscyA9IHdoZXJlQ2xh dXNlOworCQlzdWJzZWxlY3QgPSBwcmVwcm9jZXNzX3JlbGF0aW9uX3J0ZXMoJnN1YnJvb3Qp OworCisJCS8qCisJCSogTm93IHNlcGFyYXRlIG91dCB0aGUgV0hFUkUgY2xhdXNlIGFnYWlu LgorCQkqLworCQl3aGVyZUNsYXVzZSA9IHN1YnNlbGVjdC0+am9pbnRyZWUtPnF1YWxzOwor CQlzdWJzZWxlY3QtPmpvaW50cmVlLT5xdWFscyA9IE5VTEw7CisKKwkJLyoKKwkJKiBUaGUg c3VicXVlcnkgbXVzdCBoYXZlIGEgbm9uZW1wdHkgam9pbnRyZWUsIGJ1dCB3ZSBjYW4gbWFr ZSBpdCBzby4KKwkJKi8KKwkJcmVwbGFjZV9lbXB0eV9qb2ludHJlZShzdWJzZWxlY3QpOwor CisJCS8qCisJCSogUHJlcGFyZSB0byBwdWxsIHVwIHRoZSBzdWItc2VsZWN0IGludG8gdG9w IHJhbmdlIHRhYmxlLgorCQkqCisJCSogV2UgcmVseSBoZXJlIG9uIHRoZSBhc3N1bXB0aW9u IHRoYXQgdGhlIG91dGVyIHF1ZXJ5IGhhcyBubyByZWZlcmVuY2VzCisJCSogdG8gdGhlIGlu bmVyIChuZWNlc3NhcmlseSB0cnVlKS4gVGhlcmVmb3JlIHRoaXMgaXMgYSBsb3QgZWFzaWVy IHRoYW4KKwkJKiB3aGF0IHB1bGxfdXBfc3VicXVlcmllcyBoYXMgdG8gZ28gdGhyb3VnaC4K KwkJKgorCQkqIEluIGZhY3QsIGl0J3MgZXZlbiBlYXNpZXIgdGhhbiB3aGF0IGNvbnZlcnRf QU5ZX3N1YmxpbmtfdG9fam9pbiBoYXMgdG8KKwkJKiBkby4gIFRoZSBtYWNoaW5hdGlvbnMg b2Ygc2ltcGxpZnlfRVhJU1RTX3F1ZXJ5IGVuc3VyZWQgdGhhdCB0aGVyZSBpcworCQkqIG5v dGhpbmcgaW50ZXJlc3RpbmcgaW4gdGhlIHN1YnF1ZXJ5IGV4Y2VwdCBhbiBydGFibGUgYW5k IGpvaW50cmVlLCBhbmQKKwkJKiBldmVuIHRoZSBqb2ludHJlZSBGcm9tRXhwciBubyBsb25n ZXIgaGFzIHF1YWxzLiAgU28gd2UgY2FuIGp1c3QgYXBwZW5kCisJCSogdGhlIHJ0YWJsZSB0 byBvdXIgb3duIGFuZCB1c2UgdGhlIEZyb21FeHByIGluIG91ciBqb2ludHJlZS4gQnV0IGZp cnN0LAorCQkqIGFkanVzdCBhbGwgbGV2ZWwtemVybyB2YXJub3MgaW4gdGhlIHN1YnF1ZXJ5 IHRvIGFjY291bnQgZm9yIHRoZSBydGFibGUKKwkJKiBtZXJnZXIuCisJCSovCisJCXJ0b2Zm c2V0ID0gbGlzdF9sZW5ndGgocGFyc2UtPnJ0YWJsZSk7CisJCU9mZnNldFZhck5vZGVzKChO b2RlICopIHN1YnNlbGVjdCwgcnRvZmZzZXQsIDApOworCQlPZmZzZXRWYXJOb2Rlcyh3aGVy ZUNsYXVzZSwgcnRvZmZzZXQsIDApOworCisJCS8qCisJCSogVXBwZXItbGV2ZWwgdmFycyBp biBzdWJxdWVyeSB3aWxsIG5vdyBiZSBvbmUgbGV2ZWwgY2xvc2VyIHRvIHRoZWlyCisJCSog cGFyZW50IHRoYW4gYmVmb3JlOyBpbiBwYXJ0aWN1bGFyLCBhbnl0aGluZyB0aGF0IGhhZCBi ZWVuIGxldmVsIDEKKwkJKiBiZWNvbWVzIGxldmVsIHplcm8uCisJCSovCisJCUluY3JlbWVu dFZhclN1YmxldmVsc1VwKChOb2RlICopIHN1YnNlbGVjdCwgLTEsIDEpOworCQlJbmNyZW1l bnRWYXJTdWJsZXZlbHNVcCh3aGVyZUNsYXVzZSwgLTEsIDEpOworCisJCS8qCisJCSogTm93 IHRoYXQgdGhlIFdIRVJFIGNsYXVzZSBpcyBhZGp1c3RlZCB0byBtYXRjaCB0aGUgcGFyZW50 IHF1ZXJ5CisJCSogZW52aXJvbm1lbnQsIHdlIGNhbiBlYXNpbHkgaWRlbnRpZnkgYWxsIHRo ZSBsZXZlbC16ZXJvIHJlbHMgaXQgdXNlcy4KKwkJKiBUaGUgb25lcyA8PSBydG9mZnNldCBi ZWxvbmcgdG8gdGhlIHVwcGVyIHF1ZXJ5OyB0aGUgb25lcyA+IHJ0b2Zmc2V0IGRvCisJCSog bm90LgorCQkqLworCQljbGF1c2VfdmFybm9zID0gcHVsbF92YXJub3Mocm9vdCwgd2hlcmVD bGF1c2UpOworCQl1cHBlcl92YXJub3MgPSBOVUxMOworCQl2YXJubyA9IC0xOworCQl3aGls ZSAoKHZhcm5vID0gYm1zX25leHRfbWVtYmVyKGNsYXVzZV92YXJub3MsIHZhcm5vKSkgPj0g MCkKKwkJeworCQkJaWYgKHZhcm5vIDw9IHJ0b2Zmc2V0KQorCQkJCXVwcGVyX3Zhcm5vcyA9 IGJtc19hZGRfbWVtYmVyKHVwcGVyX3Zhcm5vcywgdmFybm8pOworCQl9CisJCWJtc19mcmVl KGNsYXVzZV92YXJub3MpOworCQlBc3NlcnQoIWJtc19pc19lbXB0eSh1cHBlcl92YXJub3Mp KTsKKworCQkvKgorCQkqIE5vdyB0aGF0IHdlJ3ZlIGdvdCB0aGUgc2V0IG9mIHVwcGVyLWxl dmVsIHZhcm5vcywgd2UgY2FuIG1ha2UgdGhlIGxhc3QKKwkJKiBjaGVjazogb25seSBhdmFp bGFibGVfcmVscyBjYW4gYmUgcmVmZXJlbmNlZC4KKwkJKi8KKwkJaWYgKCFibXNfaXNfc3Vi c2V0KHVwcGVyX3Zhcm5vcywgYXZhaWxhYmxlX3JlbHMpKQorCQkJcmV0dXJuIE5VTEw7CisK KwkJLyoKKwkJKiBOb3cgd2UgY2FuIGF0dGFjaCB0aGUgbW9kaWZpZWQgc3VicXVlcnkgcnRh YmxlIHRvIHRoZSBwYXJlbnQuIFRoaXMgYWxzbworCQkqIGFkZHMgc3VicXVlcnkncyBSVEVQ ZXJtaXNzaW9uSW5mb3MgaW50byB0aGUgdXBwZXIgcXVlcnkuCisJCSovCisJCUNvbWJpbmVS YW5nZVRhYmxlcygmcGFyc2UtPnJ0YWJsZSwgJnBhcnNlLT5ydGVwZXJtaW5mb3MsCisJCQkJ CQlzdWJzZWxlY3QtPnJ0YWJsZSwgc3Vic2VsZWN0LT5ydGVwZXJtaW5mb3MpOworCisJCS8q CisJCSogQW5kIGZpbmFsbHksIGJ1aWxkIHRoZSBKb2luRXhwciBub2RlLgorCQkqLworCQly ZXN1bHQgPSBtYWtlTm9kZShKb2luRXhwcik7CisJCXJlc3VsdC0+am9pbnR5cGUgPSB1bmRl cl9ub3QgPyBKT0lOX0FOVEkgOiBKT0lOX1NFTUk7CisJCXJlc3VsdC0+aXNOYXR1cmFsID0g ZmFsc2U7CisJCXJlc3VsdC0+bGFyZyA9IE5VTEw7CQkvKiBjYWxsZXIgbXVzdCBmaWxsIHRo aXMgaW4gKi8KKwkJLyogZmxhdHRlbiBvdXQgdGhlIEZyb21FeHByIG5vZGUgaWYgaXQncyB1 c2VsZXNzICovCisJCWlmIChsaXN0X2xlbmd0aChzdWJzZWxlY3QtPmpvaW50cmVlLT5mcm9t bGlzdCkgPT0gMSkKKwkJCXJlc3VsdC0+cmFyZyA9IChOb2RlICopIGxpbml0aWFsKHN1YnNl bGVjdC0+am9pbnRyZWUtPmZyb21saXN0KTsKKwkJZWxzZQorCQkJcmVzdWx0LT5yYXJnID0g KE5vZGUgKikgc3Vic2VsZWN0LT5qb2ludHJlZTsKKwkJcmVzdWx0LT51c2luZ0NsYXVzZSA9 IE5JTDsKKwkJcmVzdWx0LT5qb2luX3VzaW5nX2FsaWFzID0gTlVMTDsKKwkJcmVzdWx0LT5x dWFscyA9IHdoZXJlQ2xhdXNlOworCQlyZXN1bHQtPmFsaWFzID0gTlVMTDsKKwkJcmVzdWx0 LT5ydGluZGV4ID0gMDsJCS8qIHdlIGRvbid0IG5lZWQgYW4gUlRFIGZvciBpdCAqLworCisJ CXJldHVybiByZXN1bHQ7CisJfQogfQogCiAvKgpAQCAtMjk1OSw3ICszMzE3LDcgQEAgZmlu YWxpemVfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgUGxhbiAqcGxhbiwKIAkJCWJyZWFrOwog CiAJCWRlZmF1bHQ6Ci0JCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZTog JWQiLAorCQkJZWxvZyhQQU5JQywgInVucmVjb2duaXplZCBub2RlIHR5cGU6ICVkIiwKIAkJ CQkgKGludCkgbm9kZVRhZyhwbGFuKSk7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X3RhYmxlcy5jCmluZGV4IGYxMzcxMjkyMDlmLi4wYTZlYTk0YzMyMCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKQEAgLTEwNjAsNiArMTA2MCwxNyBAQCBzdHJ1Y3Qg Y29uZmlnX2Jvb2wgQ29uZmlndXJlTmFtZXNCb29sW10gPQogCQlOVUxMLCBOVUxMLCBOVUxM CiAJfSwKIAorCXsKKwkJeyJwdWxsX3VwX3dpdGhfam9pbnMiLCBQR0NfVVNFUlNFVCwgUVVF UllfVFVOSU5HX01FVEhPRCwKKwkJCWdldHRleHRfbm9vcCgiRW5hYmxlcyB0aGUgcGxhbm5l cidzIHVzZSBvZiBleGlzdHMgcHVsbC11cCB3aXRoIGpvaW4gZXhwcmVzc2lvbnMuIiksCisJ CQlOVUxMLAorCQkJR1VDX0VYUExBSU4KKwkJfSwKKwkJJnB1bGxfdXBfd2l0aF9qb2lucywK KwkJdHJ1ZSwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKIAl7CiAJCXsiZ2VxbyIsIFBH Q19VU0VSU0VULCBRVUVSWV9UVU5JTkdfR0VRTywKIAkJCWdldHRleHRfbm9vcCgiRW5hYmxl cyBnZW5ldGljIHF1ZXJ5IG9wdGltaXphdGlvbi4iKSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBhOWQ4MjkzNDc0YS4uYzQz ZjJhMWEyZDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNx bC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwu Y29uZi5zYW1wbGUKQEAgLTQyNyw2ICs0MjcsNyBAQAogI2VuYWJsZV90aWRzY2FuID0gb24K ICNlbmFibGVfZ3JvdXBfYnlfcmVvcmRlcmluZyA9IG9uCiAjZW5hYmxlX2Rpc3RpbmN0X3Jl b3JkZXJpbmcgPSBvbgorI3B1bGxfdXBfd2l0aF9qb2lucyA9IG9uCiAjZW5hYmxlX3NlbGZf am9pbl9lbGltaW5hdGlvbiA9IG9uCiAKICMgLSBQbGFubmVyIENvc3QgQ29uc3RhbnRzIC0K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9vcHRpbWl6ZXIuaCBiL3NyYy9p bmNsdWRlL29wdGltaXplci9vcHRpbWl6ZXIuaAppbmRleCAzN2JjMTNjMmNiZC4uZmE4ZGIx MzYyYzcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9vcHRpbWl6ZXIuaAor KysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvb3B0aW1pemVyLmgKQEAgLTExMiw2ICsxMTIs NyBAQCB0eXBlZGVmIGVudW0KIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgZGVidWdfcGFyYWxs ZWxfcXVlcnk7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBwYXJhbGxlbF9sZWFkZXJfcGFy dGljaXBhdGlvbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9kaXN0aW5jdF9y ZW9yZGVyaW5nOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgcHVsbF91cF93aXRoX2pvaW5z OwogCiBleHRlcm4gc3RydWN0IFBsYW5uZWRTdG10ICpwbGFubmVyKFF1ZXJ5ICpwYXJzZSwg Y29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAogCQkJCQkJCQkgICBpbnQgY3Vyc29yT3B0aW9u cywKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91 dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dAppbmRleCAwNTYz ZDBjZDVhMS4uZTJkNzhiYzgwYjIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvc3Vic2VsZWN0Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1 YnNlbGVjdC5vdXQKQEAgLTEwMTksNiArMTAxOSw4MDIgQEAgd2hlcmUgZXhpc3RzICgKICAg d2hlcmUgcm9hZC5uYW1lID0gc3MuZjEgKTsKIHJvbGxiYWNrOwogLS0KKy0tIFRlc3QgY2Fz ZSBmb3IgZXhpc3Qgc3VibGluayB3aGVyZSB3ZSBjYW4gY29uc2lkZXIgc29tZSB1bmRlcGVu ZGVudCBleHByZXNzaW9uCistLSB3aXRoIG91dGVyIGxpbmsKKy0tCitFWFBMQUlOIChDT1NU UyBPRkYpCitTRUxFQ1QgMQorRlJPTSB0YQorV0hFUkUgRVhJU1RTICgKKyAgU0VMRUNUIDEK KyAgRlJPTSB0YgorICBKT0lOIHRjIE9OIHRhLmlkID0gdGIuaWQKKyk7CisgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgU2Vt aSBKb2luCisgICAtPiAgU2VxIFNjYW4gb24gdGEKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAg ICAgICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyB0Yl9wa2V5IG9uIHRiCisgICAgICAg ICAgICAgICBJbmRleCBDb25kOiAoaWQgPSB0YS5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiB0YworKDYgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZS T00gdGEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gdGIKKyAgSk9JTiB0 YyBPTiB0YS5pZCA9IHRjLmlkCispOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIFNlbWkgSm9pbgorICAgLT4gIFNlcSBT Y2FuIG9uIHRhCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBJbmRleCBPbmx5 IFNjYW4gdXNpbmcgdGNfcGtleSBvbiB0YworICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KGlkID0gdGEuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGIKKyg2IHJvd3MpCisK K0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRhCitXSEVSRSBFWElTVFMg KAorICBTRUxFQ1QgMQorICBGUk9NIHRiCisgIEpPSU4gdGMgT04gMSA9IDEKKyAgV0hFUkUg dGEuaWQgPSB0Yy5pZAorKTsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBTZW1pIEpvaW4KKyAgIC0+ICBTZXEgU2NhbiBv biB0YQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSW5kZXggT25seSBTY2Fu IHVzaW5nIHRjX3BrZXkgb24gdGMKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9 IHRhLmlkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRiCisoNiByb3dzKQorCistLSBK b2luIGNvbXBvdW5kIGV4cHJlc3Npb24KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAx CitGUk9NIHRhCitXSEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9NIHRiCisgIEpP SU4gdGMgT04gdGEuaWQgPSB0Yy5pZAorICAgICAgICAgICBBTkQgdGEuaWQgPSB0Yi5pZAor KTsKKyAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBSaWdodCBTZW1pIEpvaW4KKyAgIEhh c2ggQ29uZDogKHRjLmlkID0gdGEuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBI YXNoIENvbmQ6ICh0Yi5pZCA9IHRjLmlkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRi CisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRj CisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRhCisoOSByb3dzKQor CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgMQorRlJPTSB0YSB0YTEKK1dIRVJFIEVY SVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gdGIKKyAgSk9JTiB0YyBPTiB0Yi5hdmFsID0g dGMuYWlkCisgICAgICAgICAgIEFORCB0Yi5hdmFsID0gdGExLmlkCispOworICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9p bgorICAgSGFzaCBDb25kOiAodGExLmlkID0gdGIuYXZhbCkKKyAgIC0+ICBTZXEgU2NhbiBv biB0YSB0YTEKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAg ICAgICAgICAgICAgR3JvdXAgS2V5OiB0Yi5hdmFsCisgICAgICAgICAgICAgICAtPiAgTWVy Z2UgSm9pbgorICAgICAgICAgICAgICAgICAgICAgTWVyZ2UgQ29uZDogKHRiLmF2YWwgPSB0 Yy5haWQpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgU29ydCBLZXk6IHRiLmF2YWwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiB0YgorICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0Yy5haWQKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0YworKDE0IHJvd3MpCisKK0VY UExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRhCitKT0lOIHRiIE9OIHRydWUK K1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gdGIgdGIxCisgIEpPSU4gdGMg T04gdGEuaWQgPSB0Yi5pZAorKTsKKyAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExv b3AgU2VtaSBKb2luCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6ICh0 YS5pZCA9IHRiLmlkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRhCisgICAgICAgICAt PiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRiCisgICAtPiAgTmVz dGVkIExvb3AKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0YiB0YjEKKyAgICAgICAgIC0+ ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRjCisoMTAg cm93cykKKworLS0gQ29tcG91bmQgZXhwcmVzc2lvbiB3aXRoIGNvbnN0IHR5cGUgb3Igb3Ro ZXIgdHlwZSBvZiBleHByZXNzaW9ucworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEK K0ZST00gdGEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gdGIKKyAgSk9J TiB0YyBPTiB0YS5pZCA9IHRjLmlkCisgICAgICAgICAgIEFORCB0YS5pZCA9IDEKKyk7Cisg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVk IExvb3AgU2VtaSBKb2luCisgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIHRhX3BrZXkg b24gdGEKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IDEpCisgICAtPiAgTmVzdGVkIExv b3AKKyAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgdGNfcGtleSBvbiB0Ywor ICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gMSkKKyAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiB0YgorKDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEK K0ZST00gdGEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gdGIKKyAgSk9J TiB0YyBPTiB0YS5pZCA9IHRjLmlkCisgICAgICAgICAgIEFORCB0Yi5pZCA9IDEKKyk7Cisg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBS aWdodCBTZW1pIEpvaW4KKyAgIEhhc2ggQ29uZDogKHRjLmlkID0gdGEuaWQpCisgICAtPiAg TmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgdGJfcGtl eSBvbiB0YgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gMSkKKyAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiB0YworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiB0YQorKDggcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZS T00gdGEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gdGIKKyAgUklHSFQg Sk9JTiB0YyBPTiB0YS5pZCA9IHRjLmlkCisgIFdIRVJFIHRhLnZhbCA9IDEKKyk7CisgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gdGEK KyAgIEZpbHRlcjogRVhJU1RTKFN1YlBsYW4gMSkKKyAgIFN1YlBsYW4gMQorICAgICAtPiAg UmVzdWx0CisgICAgICAgICAgIE9uZS1UaW1lIEZpbHRlcjogKHRhLnZhbCA9IDEpCisgICAg ICAgICAgIC0+ICBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgICAgICAgICAgICAgICAgSm9p biBGaWx0ZXI6ICh0YS5pZCA9IHRjLmlkKQorICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gdGMKKyAgICAgICAgICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0YgorKDEwIHJvd3MpCisKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRhCitXSEVSRSBFWElTVFMgKAorICBTRUxF Q1QgMQorICBGUk9NIHRiCisgIEpPSU4gdGMgT04gdGEuaWQgPSB0Yi5pZAorICAgICAgICAg ICBBTkQgdGIuYXZhbCA9IEFOWSAoJ3sxfSc6OmludFtdKQorKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDog KHRhLmlkID0gdGIuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gdGEKKyAgIC0+ICBIYXNoCisg ICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0 Yi5pZAorICAgICAgICAgICAgICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gdGMKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBNYXRl cmlhbGl6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRi CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChhdmFsID0gQU5Z ICgnezF9Jzo6aW50ZWdlcltdKSkKKygxMSByb3dzKQorCistLSBFeGlzdHMgU3ViTGluayBl eHByZXNzaW9uIHdpdGhpbiBleHByZXNzaW9uCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgMQorRlJPTSB0YSB0YTEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00g dGEKKyAgSk9JTiB0YiBPTiB0YS5pZCA9IHRhMS5pZAorICAgICAgICAgICBBTkQgdGExLnZh bCA9IDEKKyAgV0hFUkUgRVhJU1RTICgKKyAgICBTRUxFQ1QgMQorICAgIEZST00gdGEgdGEy CisgICAgV0hFUkUgdGEyLmlkID0gdGExLmlkCisgICkKKyk7CisgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgU2VtaSBKb2lu CisgICAtPiAgU2VxIFNjYW4gb24gdGEgdGEyCisgICAgICAgICBGaWx0ZXI6ICh2YWwgPSAx KQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVz aW5nIHRhX3BrZXkgb24gdGEKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHRh Mi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0YgorKDcgcm93cykKKworRVhQTEFJ TiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZST00gdGEgdGExCitXSEVSRSBFWElTVFMgKAor ICBTRUxFQ1QgMQorICBGUk9NIHRhCisgIEpPSU4gdGIgT04gdGEudmFsID0gdGExLmlkCisg ICAgICAgICAgIEFORCB0YTEuaWQgPSAxCisgIFdIRVJFIEVYSVNUUyAoCisgICAgU0VMRUNU IDEKKyAgICBGUk9NIHRhIHRhMgorICAgIFdIRVJFIHRhMi5pZCA9IHRhLmlkCisgICkKKyk7 CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQg TG9vcCBTZW1pIEpvaW4KKyAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgdGFfcGtleSBv biB0YSB0YTEKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IDEpCisgICAtPiAgTmVzdGVk IExvb3AKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0YgorICAgICAgICAgLT4gIE1hdGVy aWFsaXplCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGEgdGEyCisgICAgICAg ICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwgPSAxKQorKDggcm93cykKKworRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZST00gdGEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVD VCAxCisgIEZST00gdGIKKyAgV0hFUkUgdGEuaWQgPSB0Yi5pZAorICAgIEFORCBFWElTVFMg KAorICAgICAgU0VMRUNUIDEKKyAgICAgIEZST00gdGMKKyAgICAgIFdIRVJFIHRjLmlkID0g dGIuaWQKKyAgICAgICAgQU5EIHRjLmFpZCArIHRiLmF2YWwgPiAwCisgICAgKQorKTsKKyAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEhhc2ggU2VtaSBKb2luCisgICBIYXNoIENvbmQ6ICh0YS5pZCA9IHRjLmlkKQorICAgLT4g IFNlcSBTY2FuIG9uIHRhCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIEhhc2ggSm9pbgor ICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodGIuaWQgPSB0Yy5pZCkKKyAgICAgICAgICAg ICAgIEpvaW4gRmlsdGVyOiAoKHRjLmFpZCArIHRiLmF2YWwpID4gMCkKKyAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiB0YgorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0YworKDEwIHJvd3MpCisKK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRhCitXSEVSRSBFWElTVFMgKAorICBT RUxFQ1QgMQorICBGUk9NIHRiCisgIFdIRVJFIHRhLmlkID0gdGIuaWQKKyAgICBBTkQgRVhJ U1RTICgKKyAgICAgIFNFTEVDVCAxCisgICAgICBGUk9NIHRjCisgICAgICBXSEVSRSB0Yy5p ZCA9IHRiLmlkCisgICAgICAgIEFORCB0Yy5haWQgKyB0YS52YWwgPiAwCisgICAgKQorKTsK KyAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29u ZDogKHRhLmlkID0gdGIuaWQpCisgICBKb2luIEZpbHRlcjogRVhJU1RTKFN1YlBsYW4gMSkK KyAgIC0+ICBTZXEgU2NhbiBvbiB0YQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiB0YgorICAgU3ViUGxhbiAxCisgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHRj X3BrZXkgb24gdGMKKyAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gdGIuaWQpCisgICAg ICAgICAgIEZpbHRlcjogKChhaWQgKyB0YS52YWwpID4gMCkKKygxMCByb3dzKQorCistLSBD aGVjayB3aXRoIE5VTEwgYW5kIE5PVCBOVUxMIGV4cHJlc3Npb25zCitBTFRFUiBUQUJMRSB0 YSBBREQgQ09MVU1OIGlzX2FjdGl2ZSBib29sOworVVBEQVRFIHRhIFNFVCBpc19hY3RpdmUg PSB0cnVlOworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZST00gdGEKK1dIRVJF IEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gdGIKKyAgSk9JTiB0YyBPTiB0YS5pZCA9 IHRiLmlkCisgICAgICAgICBBTkQgQ09BTEVTQ0UodGEuaXNfYWN0aXZlLCB0cnVlKQorKTsK KyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0 ZWQgTG9vcCBTZW1pIEpvaW4KKyAgIC0+ICBTZXEgU2NhbiBvbiB0YQorICAgICAgICAgRmls dGVyOiBDT0FMRVNDRShpc19hY3RpdmUsIHRydWUpCisgICAtPiAgTmVzdGVkIExvb3AKKyAg ICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgdGJfcGtleSBvbiB0YgorICAgICAg ICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gdGEuaWQpCisgICAgICAgICAtPiAgU2VxIFNj YW4gb24gdGMKKyg3IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAxCitG Uk9NIHRiCitXSEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9NIHRhCisgIEpPSU4g dGMgT04gdGEuaWQgPSB0Yi5pZAorICAgICAgICAgQU5EIENPQUxFU0NFKHRhLmlzX2FjdGl2 ZSwgdHJ1ZSkKKyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2lu CisgICBIYXNoIENvbmQ6ICh0Yi5pZCA9IHRhLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIHRi CisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAg ICAgIEdyb3VwIEtleTogdGEuaWQKKyAgICAgICAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcAor ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRjCisgICAgICAgICAgICAg ICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiB0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmls dGVyOiBDT0FMRVNDRShpc19hY3RpdmUsIHRydWUpCisoMTEgcm93cykKKworRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZST00gdGEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVD VCAxCisgIEZST00gdGIKKyAgSk9JTiB0YyBPTiB0YS5pZCA9IHRiLmlkCisgICAgICAgICBB TkQgQ0FTRQorICAgICAgICAgICAgICAgV0hFTiB0YS5pc19hY3RpdmUgVEhFTiB0cnVlCisg ICAgICAgICAgICAgICBFTFNFIGZhbHNlCisgICAgICAgICAgICAgRU5EID0gdHJ1ZQorKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIFNlbWkgSm9pbgorICAgLT4gIFNl cSBTY2FuIG9uIHRhCisgICAgICAgICBGaWx0ZXI6IENBU0UgV0hFTiBpc19hY3RpdmUgVEhF TiB0cnVlIEVMU0UgZmFsc2UgRU5ECisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgdGJfcGtleSBvbiB0YgorICAgICAgICAgICAgICAg SW5kZXggQ29uZDogKGlkID0gdGEuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGMK Kyg3IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRiCitX SEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9NIHRhCisgIEpPSU4gdGMgT04gdGEu aWQgPSB0Yi5pZAorICAgICAgICAgQU5EIENBU0UKKyAgICAgICAgICAgICAgIFdIRU4gdGEu aXNfYWN0aXZlIFRIRU4gdHJ1ZQorICAgICAgICAgICAgICAgRUxTRSBmYWxzZQorICAgICAg ICAgICAgIEVORCA9IHRydWUKKyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhh c2ggQ29uZDogKHRiLmlkID0gdGEuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gdGIKKyAgIC0+ ICBIYXNoCisgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgR3Jv dXAgS2V5OiB0YS5pZAorICAgICAgICAgICAgICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGMKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IENB U0UgV0hFTiBpc19hY3RpdmUgVEhFTiB0cnVlIEVMU0UgZmFsc2UgRU5ECisoMTEgcm93cykK KworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZST00gdGEKK1dIRVJFIEVYSVNU UyAoCisgIFNFTEVDVCAxCisgIEZST00gdGIKKyAgSk9JTiB0YyBPTiB0YS5pZCA9IHRiLmlk CisgICAgICAgICBBTkQgdGEuaXNfYWN0aXZlCispOworICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIFNlbWkgSm9pbgorICAg LT4gIFNlcSBTY2FuIG9uIHRhCisgICAgICAgICBGaWx0ZXI6IGlzX2FjdGl2ZQorICAgLT4g IE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIHRiX3Br ZXkgb24gdGIKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHRhLmlkKQorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHRjCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBP RkYpCitTRUxFQ1QgMQorRlJPTSB0YQorV0hFUkUgRVhJU1RTICgKKyAgU0VMRUNUIDEKKyAg RlJPTSB0YgorICBKT0lOIHRjIE9OIHRhLmlkID0gdGIuaWQKKyAgICAgICAgIEFORCB0YS5p c19hY3RpdmUgSVMgTk9UIE5VTEwKKyk7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgU2VtaSBKb2luCisgICAtPiAgU2Vx IFNjYW4gb24gdGEKKyAgICAgICAgIEZpbHRlcjogKGlzX2FjdGl2ZSBJUyBOT1QgTlVMTCkK KyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2lu ZyB0Yl9wa2V5IG9uIHRiCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSB0YS5p ZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0YworKDcgcm93cykKKworLS0gRGlzYWJs ZWQgcHVsbCB1cCBiZWNhdXNlIGl0IGlzIGFwcGxjYXBhYmxlIGZvciBJTk5FUiBKT0lOIGNv bm5lY3Rpb24KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRhCitXSEVS RSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9NIHRiCisgIFJJR0hUIEpPSU4gdGMgT04g dGEuaWQgPSB0Yy5pZAorKTsKKyAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEg U2NhbiBvbiB0YQorICAgRmlsdGVyOiBFWElTVFMoU3ViUGxhbiAxKQorICAgU3ViUGxhbiAx CisgICAgIC0+ICBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgICAgICAgICAgSm9pbiBGaWx0 ZXI6ICh0YS5pZCA9IHRjLmlkKQorICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGMKKyAg ICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiB0YgorKDggcm93cykKKworLS0gRGlzYWJsZSBwdWxsLXVwIGR1ZSB0byBsYWNrIG9m IHRoZSBvdXRlciB2YXIKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRh CitXSEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9NIHRiCisgIEpPSU4gdGMgT04g dGMuaWQgPSB0Yi5pZAorKTsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgICBPbmUtVGltZSBGaWx0ZXI6IChJbml0UGxh biAxKS5jb2wxCisgICBJbml0UGxhbiAxCisgICAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gdGIKKyAgICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2Nh biB1c2luZyB0Y19wa2V5IG9uIHRjCisgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChp ZCA9IHRiLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIHRhCisoOCByb3dzKQorCitDUkVBVEUg VEFCTEUgdGQgKGlkIGludCwgdGNfaWQgYnl0ZWEsIHZhbCBpbnQpOworSU5TRVJUIElOVE8g dGQKK1NFTEVDVCBnLmlkLCAnVGVzdDEnOjpieXRlYSBBUyB0Y19pZCwgNiBBUyB2YWwKK0ZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsIDI1KSBBUyBnKGlkKQorVU5JT04gQUxMCitTRUxFQ1Qg Zy5pZCwgJ1Rlc3QyJzo6Ynl0ZWEgQVMgdGNfaWQsIDcgQVMgdmFsCitGUk9NIGdlbmVyYXRl X3NlcmllcygyNiwgNTApIEFTIGcoaWQpCitVTklPTiBBTEwKK1NFTEVDVCBnLmlkLCAnVGVz dDQnOjpieXRlYSBBUyB0Y19pZCwgNiBBUyB2YWwKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDUx LCA3NSkgQVMgZyhpZCkKK1VOSU9OIEFMTAorU0VMRUNUIGcuaWQsICdUZXN0NSc6OmJ5dGVh IEFTIHRjX2lkLCA3IEFTIHZhbAorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNzYsIDEwMCkgQVMg ZyhpZCk7CitFWFBMQUlOIChDT1NUUyBPRkYpCisgU0VMRUNUIHRhLmlkCisgICBGUk9NIHRh CisgIFdIRVJFIEVYSVNUUyAoCisgICAgU0VMRUNUIDEKKyAgICAgIEZST00gdGIKKyAgICAg V0hFUkUgdGIuaWQgPSB0YS5pZCBBTkQKKyAgICAgICAgICAgRVhJU1RTCisgICAgICAgIChT RUxFQ1QgMQorICAgICAgICAgICBGUk9NIHRjCisgICAgICAgICAgV0hFUkUgdGMuaWQgPSB0 Yi5pZCkKKyAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2gg UmlnaHQgU2VtaSBKb2luCisgICBIYXNoIENvbmQ6ICh0Yy5pZCA9IHRhLmlkKQorICAgLT4g IEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAodGIuaWQgPSB0Yy5pZCkKKyAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiB0YgorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiB0YworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiB0YQorKDkgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorIFNFTEVDVCB0 YS5pZAorICAgRlJPTSB0YQorICBXSEVSRSBFWElTVFMgKAorICAgIFNFTEVDVCAxCisgICAg ICBGUk9NIHRiCisgICAgIFdIRVJFIHRiLmlkID0gdGEuaWQgQU5ECisgICAgICAgICAgIEVY SVNUUworICAgICAgICAoU0VMRUNUIDEKKyAgICAgICAgICAgRlJPTSB0YworICAgICAgICAg IFdIRVJFIHRjLmlkID0gdGEuaWQpCisgICAgICAgICAgICAgICApOworICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKHRjLmlkID0gdGIuaWQpCisg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6ICh0Yy5pZCA9IHRhLmlkKQor ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRjCisgICAgICAgICAtPiAgSGFzaAorICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRhCisgICAtPiAgSGFzaAorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHRiCisoOSByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYpCisgU0VM RUNUIHRhLmlkCisgICBGUk9NIHRhCisgIFdIRVJFIEVYSVNUUyAoCisgICAgU0VMRUNUIDEK KyAgICAgIEZST00gdGIKKyAgICAgV0hFUkUgdGIuaWQgPSB0YS5pZAorICAgICAgIEFORCBF WElTVFMKKyAgICAgICAgICAgICAgKFNFTEVDVCAxCisgICAgICAgICAgICAgICAgIEZST00g dGMKKyAgICAgICAgICAgICAgIFdIRVJFIHRiLmlkID0gdGEuaWQpCisgICAgICAgICAgICAg ICAgKTsKKyAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9p bgorICAgSGFzaCBDb25kOiAodGIuaWQgPSB0YS5pZCkKKyAgIEpvaW4gRmlsdGVyOiBFWElT VFMoU3ViUGxhbiAxKQorICAgLT4gIFNlcSBTY2FuIG9uIHRiCisgICAtPiAgSGFzaAorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHRhCisgICBTdWJQbGFuIDEKKyAgICAgLT4gIFJlc3Vs dAorICAgICAgICAgICBPbmUtVGltZSBGaWx0ZXI6ICh0Yi5pZCA9IHRhLmlkKQorICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gdGMKKygxMCByb3dzKQorCitleHBsYWluIChDT1NUUyBP RkYpCisgU0VMRUNUIHRhLmlkCisgICBGUk9NIHRhCisgIFdIRVJFIEVYSVNUUyAoCisgICAg U0VMRUNUIDEKKyAgICAgIEZST00gdGIKKyAgICAgICAgam9pbiB0YyBvbiB0Yy5pZCA9IHRh LmlkCisgICAgICAgICAgQU5EIEVYSVNUUyAoCisgICAgICAgICAgICAgICAgU0VMRUNUIDEK KyAgICAgICAgICAgICAgICAgIEZST00gdGQKKyAgICAgICAgICAgICAgICBXSEVSRSB0ZC5p ZCA9IHRhLmlkKQorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBI YXNoIENvbmQ6ICh0YS5pZCA9IHRkLmlkKQorICAgLT4gIE5lc3RlZCBMb29wIFNlbWkgSm9p bgorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRhCisgICAgICAgICAtPiAgTmVzdGVkIExv b3AKKyAgICAgICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgdGNfcGtleSBv biB0YworICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gdGEuaWQpCisg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGIKKyAgIC0+ICBIYXNoCisgICAgICAg ICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0ZC5pZAor ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRkCisoMTIgcm93cykKKworZXhwbGFp biAoQ09TVFMgT0ZGKQorIFNFTEVDVCB0YS5pZAorICAgRlJPTSB0YQorICBXSEVSRSBFWElT VFMgKAorICAgIFNFTEVDVCAxCisgICAgICBGUk9NIHRiCisgICAgICAgIGpvaW4gdGMgb24g dGMuaWQgPSB0YS5pZAorICAgICAgICAgIEFORCBFWElTVFMgKAorICAgICAgICAgICAgICAg IFNFTEVDVCAxCisgICAgICAgICAgICAgICAgICBGUk9NIHRkCisgICAgICAgICAgICAgICAg V0hFUkUgdGIuaWQgPSB0YS5pZCkKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgU2Vt aSBKb2luCisgICAtPiAgU2VxIFNjYW4gb24gdGEKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAg ICAgICAgSm9pbiBGaWx0ZXI6IEVYSVNUUyhTdWJQbGFuIDEpCisgICAgICAgICAtPiAgSW5k ZXggT25seSBTY2FuIHVzaW5nIHRjX3BrZXkgb24gdGMKKyAgICAgICAgICAgICAgIEluZGV4 IENvbmQ6IChpZCA9IHRhLmlkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRiCisgICAg ICAgICBTdWJQbGFuIDEKKyAgICAgICAgICAgLT4gIFJlc3VsdAorICAgICAgICAgICAgICAg ICBPbmUtVGltZSBGaWx0ZXI6ICh0Yi5pZCA9IHRhLmlkKQorICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gdGQKKygxMSByb3dzKQorCitDUkVBVEUgVEFCTEUgdGUgKGlkIGlu dCwgdGNfaWQgYnl0ZWEsIHZhbCBpbnQpOworSU5TRVJUIElOVE8gdGUgU0VMRUNUICogRlJP TSB0ZDsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCB0MS4qCitGUk9NIHRhIHQxCitX SEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9NIChTRUxFQ1QgMSBBUyBTREJMX0RV TU1ZKSBTREJMX0RVQUwKKyAgSk9JTiB0YiB0MiBPTiB0Mi5pZCA9IHQxLmlkCisgIFdIRVJF IEVYSVNUUyAoCisgICAgU0VMRUNUIDEKKyAgICBGUk9NIChTRUxFQ1QgMSBBUyBTREJMX0RV TU1ZKSBTREJMX0RVQUwKKyAgICBKT0lOIHRkIHQzIE9OIHQzLnRjX2lkIElOICgnVGVzdDEn OjpieXRlYSwgJ1Rlc3QyJzo6Ynl0ZWEpCisgICAgV0hFUkUgRVhJU1RTICgKKyAgICAgIFNF TEVDVCAxCisgICAgICBGUk9NIHRlIHQ0CisgICAgICBXSEVSRSB0NC50Y19pZCA9IHQzLnRj X2lkCisgICAgICAgIEFORCB0NC52YWwgPSB0Mi5hdmFsCisgICAgKSA9IEVYSVNUUyAoCisg ICAgICBTRUxFQ1QgMQorICAgICAgRlJPTSB0YyB0NQorICAgICAgV0hFUkUgdDUuaWQgPSB0 My5pZAorICAgICkKKyAgKQorKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBNZXJnZSBTZW1pIEpvaW4KKyAgIE1lcmdlIENvbmQ6ICh0MS5pZCA9IHQyLmlkKQor ICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdGFfcGtleSBvbiB0YSB0MQorICAgLT4gIE5lc3Rl ZCBMb29wIFNlbWkgSm9pbgorICAgICAgICAgSm9pbiBGaWx0ZXI6ICgoQU5ZICgodDMudGNf aWQgPSAoaGFzaGVkIFN1YlBsYW4gMikuY29sMSkgQU5EICh0Mi5hdmFsID0gKGhhc2hlZCBT dWJQbGFuIDIpLmNvbDIpKSkgPSAoQU5ZICh0My5pZCA9IChoYXNoZWQgU3ViUGxhbiA0KS5j b2wxKSkpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyB0Yl9wa2V5IG9uIHRiIHQy CisgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiB0ZCB0MworICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodGNfaWQgPSBBTlkg KCd7IlxceDU0NjU3Mzc0MzEiLCJcXHg1NDY1NzM3NDMyIn0nOjpieXRlYVtdKSkKKyAgICAg ICAgIFN1YlBsYW4gMgorICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGUgdDQKKyAgICAg ICAgIFN1YlBsYW4gNAorICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGMgdDUKKygxMyBy b3dzKQorCitFWFBMQUlOCitTRUxFQ1QgdGEuKgorRlJPTSB0YQorV0hFUkUgRVhJU1RTICgK KyAgU0VMRUNUIDEKKyAgRlJPTSB0YgorICBKT0lOIHRjIE9OIHRjLmlkID0gdGIuaWQKKyAg ICAgICAgIEFORCB0Yi5pZCA9IHRhLmlkCisgIEpPSU4gdGQgT04gdGQuaWQgPSB0Yy5pZAor KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgSGFzaCBSaWdodCBTZW1pIEpvaW4gIChjb3N0PTE4MS4yMC4uMjE5LjM1IHJvd3M9MTEw MCB3aWR0aD05KQorICAgSGFzaCBDb25kOiAodGQuaWQgPSB0YS5pZCkKKyAgIC0+ICBIYXNo IEpvaW4gIChjb3N0PTEyMS43MC4uMTUwLjAyIHJvd3M9MTIwMCB3aWR0aD0xMikKKyAgICAg ICAgIEhhc2ggQ29uZDogKHRkLmlkID0gdGMuaWQpCisgICAgICAgICAtPiAgSGFzaCBKb2lu ICAoY29zdD02MC44NS4uODYuMDEgcm93cz0xMjAwIHdpZHRoPTgpCisgICAgICAgICAgICAg ICBIYXNoIENvbmQ6ICh0ZC5pZCA9IHRiLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHRkICAoY29zdD0wLjAwLi4yMi4wMCByb3dzPTEyMDAgd2lkdGg9NCkKKyAgICAg ICAgICAgICAgIC0+ICBIYXNoICAoY29zdD0zMi42MC4uMzIuNjAgcm93cz0yMjYwIHdpZHRo PTQpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGIgIChjb3N0PTAu MDAuLjMyLjYwIHJvd3M9MjI2MCB3aWR0aD00KQorICAgICAgICAgLT4gIEhhc2ggIChjb3N0 PTMyLjYwLi4zMi42MCByb3dzPTIyNjAgd2lkdGg9NCkKKyAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiB0YyAgKGNvc3Q9MC4wMC4uMzIuNjAgcm93cz0yMjYwIHdpZHRoPTQpCisg ICAtPiAgSGFzaCAgKGNvc3Q9MzIuMDAuLjMyLjAwIHJvd3M9MjIwMCB3aWR0aD05KQorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHRhICAoY29zdD0wLjAwLi4zMi4wMCByb3dzPTIyMDAg d2lkdGg9OSkKKygxMyByb3dzKQorCitEUk9QIFRBQkxFIHRkLCB0ZTsKK0NSRUFURSBUQUJM RSB0c3QxIChpZCBpbnQsIG1lcyB2YXJjaGFyKDIwKSk7CitDUkVBVEUgVEFCTEUgdHN0MiAo aWQgaW50LCB0c3QxX2lkIGludCwgdHlwZV9pZCBpbnQpOworQ1JFQVRFIFRBQkxFIHRzdDMg KGlkIGJ5dGVhKTsKK0NSRUFURSBUQUJMRSB0c3Q0IChpZCBpbnQsIHRzdDNfaWQgYnl0ZWEs IHR5cGVfaWQgaW50KTsKK0NSRUFURSBUQUJMRSB0c3Q1IChpZCBpbnQsIHRzdDNfaWQgYnl0 ZWEsIHR5cGVfaWQgaW50KTsKK0lOU0VSVCBJTlRPIHRzdDEgVkFMVUVTICgxLCAndGVzdDEn KTsKK0lOU0VSVCBJTlRPIHRzdDEgVkFMVUVTICgyLCAndGVzdDInKTsKK0lOU0VSVCBJTlRP IHRzdDEgVkFMVUVTICgzLCAndGVzdDMnKTsKK0lOU0VSVCBJTlRPIHRzdDIgVkFMVUVTICgx LCAyLCA3KTsKK0lOU0VSVCBJTlRPIHRzdDIgVkFMVUVTICgxLCAyLCA2KTsKK0lOU0VSVCBJ TlRPIHRzdDIgVkFMVUVTICgyLCAzLCA3KTsKK0lOU0VSVCBJTlRPIHRzdDMKK1NFTEVDVCAo J1Rlc3QnIHx8IGcuaWQpOjpieXRlYSBBUyBpZAorICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwgNSkgQVMgZyhpZCk7CitJTlNFUlQgSU5UTyB0c3Q0CisoU0VMRUNUIGcuaWQsICdUZXN0 MSc6OmJ5dGVhIEFTIHRzdDNfaWQsIDYgQVMgdHlwZV9pZAorICAgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwgMjUpIEFTIGcoaWQpKQorVU5JT04gQUxMCisoU0VMRUNUIGcuaWQsICdUZXN0 Mic6OmJ5dGVhIEFTIHRzdDNfaWQsIDcgQVMgdHlwZV9pZAorICAgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMjYsIDUwKSBBUyBnKGlkKSkKK1VOSU9OIEFMTAorKFNFTEVDVCBnLmlkLCAnVGVz dDQnOjpieXRlYSBBUyB0c3QzX2lkLCA2IEFTIHR5cGVfaWQKKyAgIEZST00gZ2VuZXJhdGVf c2VyaWVzKDUxLCA3NSkgQVMgZyhpZCkpCitVTklPTiBBTEwKKyhTRUxFQ1QgZy5pZCwgJ1Rl c3Q1Jzo6Ynl0ZWEgQVMgdHN0M19pZCwgNyBBUyB0eXBlX2lkCisgICBGUk9NIGdlbmVyYXRl X3Nlcmllcyg3NiwgMTAwKSBBUyBnKGlkKSk7CitJTlNFUlQgSU5UTyB0c3Q1IFNFTEVDVCAq IEZST00gdHN0NDsKK1ZBQ1VVTSAoQU5BTFlaRSkgdHN0MSwgdHN0MiwgdHN0MywgdHN0NCwg dHN0NTsKKy0tIENhc2Ugd2l0aCB0d28gZXhpc3RzIGluIE9wRXhwciwgaW4gdGhlIGZpcnN0 IG9uZSB0My5pZCBpcyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgcXVlcnkKKy0tIGFu ZCB0Mi50eXBlLWlkIGlzIHRoZSByZWZlcmVuY2UgdG8gZ3JhbmRwYXJlbnQgcXVlcnkKK0VY UExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCB0MS4qCitGUk9NIHRzdDEgdDEKK1dIRVJFIEVY SVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gKFNFTEVDVCAxIEFTIFNEQkxfRFVNTVkpIFNE QkxfRFVBTAorICBKT0lOIHRzdDIgdDIgT04gdDIudHN0MV9pZCA9IHQxLmlkCisgIFdIRVJF IEVYSVNUUyAoCisgICAgU0VMRUNUIDEKKyAgICBGUk9NIChTRUxFQ1QgMSBBUyBTREJMX0RV TU1ZKSBTREJMX0RVQUwKKyAgICBKT0lOIHRzdDMgdDMgT04gdDMuaWQgSU4gKCdUZXN0MSc6 OmJ5dGVhLCAnVGVzdDInOjpieXRlYSkKKyAgICBXSEVSRSBFWElTVFMgKAorICAgICAgU0VM RUNUIDEKKyAgICAgIEZST00gdHN0NCB0NAorICAgICAgV0hFUkUgdDQudHN0M19pZCA9IHQz LmlkCisgICAgICAgIEFORCB0NC50eXBlX2lkID0gdDIudHlwZV9pZAorICAgICkgPSBFWElT VFMgKAorICAgICAgU0VMRUNUIDEKKyAgICAgIEZST00gdHN0NSB0NQorICAgICAgV0hFUkUg dDUudHN0M19pZCA9IHQzLmlkCisgICAgKQorICApCispOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBI YXNoIFJpZ2h0IFNlbWkgSm9pbgorICAgSGFzaCBDb25kOiAodDIudHN0MV9pZCA9IHQxLmlk KQorICAgLT4gIE5lc3RlZCBMb29wIFNlbWkgSm9pbgorICAgICAgICAgSm9pbiBGaWx0ZXI6 IChFWElTVFMoU3ViUGxhbiAxKSA9IEVYSVNUUyhTdWJQbGFuIDMpKQorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHRzdDIgdDIKKyAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRzdDMgdDMKKyAgICAgICAgICAgICAgICAgICAg IEZpbHRlcjogKGlkID0gQU5ZICgneyJcXHg1NDY1NzM3NDMxIiwiXFx4NTQ2NTczNzQzMiJ9 Jzo6Ynl0ZWFbXSkpCisgICAgICAgICBTdWJQbGFuIDEKKyAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHRzdDQgdDQKKyAgICAgICAgICAgICAgICAgRmlsdGVyOiAoKHRzdDNfaWQgPSB0 My5pZCkgQU5EICh0eXBlX2lkID0gdDIudHlwZV9pZCkpCisgICAgICAgICBTdWJQbGFuIDMK KyAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRzdDUgdDUKKyAgICAgICAgICAgICAgICAg RmlsdGVyOiAodHN0M19pZCA9IHQzLmlkKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiB0c3QxIHQxCisgICAgICAgICAgICAgICBGaWx0ZXI6IChpZCBJUyBOT1Qg TlVMTCkKKygxNyByb3dzKQorCitEUk9QIFRBQkxFIHRzdDEsIHRzdDIsIHRzdDMsIHRzdDQs IHRzdDU7CiAtLSBUZXN0IGNhc2UgZm9yIHN1YmxpbmtzIHB1c2hlZCBkb3duIGludG8gc3Vi c2VsZWN0cyB2aWEgam9pbiBhbGlhcyBleHBhbnNpb24KIC0tCiBzZWxlY3QKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdXBkYXRhYmxlX3ZpZXdzLm91dCBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdXBkYXRhYmxlX3ZpZXdzLm91dAppbmRleCAwOTVk ZjBhNjcwYy4uZDA3NjJjMTI5OWUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvdXBkYXRhYmxlX3ZpZXdzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3VwZGF0YWJsZV92aWV3cy5vdXQKQEAgLTMxNzcsMTQgKzMxNzcsMTIgQEAgRVhQTEFJ TiAoY29zdHMgb2ZmKSBJTlNFUlQgSU5UTyByd192aWV3MSBWQUxVRVMgKDIsICdOZXcgcm93 IDInKTsKICAgICAgICAgIE9uZS1UaW1lIEZpbHRlcjogKChJbml0UGxhbiAxKS5jb2wxIElT IE5PVCBUUlVFKQogIAogIFVwZGF0ZSBvbiBiYXNlX3RibAotICAgSW5pdFBsYW4gMQotICAg ICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGJhc2VfdGJsX3BrZXkgb24gYmFzZV90Ymwg dAotICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSAyKQotICAgLT4gIFJlc3VsdAotICAg ICAgICAgT25lLVRpbWUgRmlsdGVyOiAoSW5pdFBsYW4gMSkuY29sMQorICAgLT4gIE5lc3Rl ZCBMb29wIFNlbWkgSm9pbgogICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgYmFzZV90 YmxfcGtleSBvbiBiYXNlX3RibAogICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0g MikKLSgxNSByb3dzKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgYmFzZV90Ymxf cGtleSBvbiBiYXNlX3RibCB0CisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSAy KQorKDEzIHJvd3MpCiAKIElOU0VSVCBJTlRPIHJ3X3ZpZXcxIFZBTFVFUyAoMiwgJ05ldyBy b3cgMicpOwogU0VMRUNUICogRlJPTSBiYXNlX3RibDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3N1YnNlbGVjdC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJz ZWxlY3Quc3FsCmluZGV4IGE2ZDI3NmExMTViLi5jYTMxZTQ3Yzk3MyAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9zcWwvc3Vic2VsZWN0LnNxbAorKysgYi9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9zdWJzZWxlY3Quc3FsCkBAIC01MDcsNiArNTA3LDQ0OSBAQCB3aGVyZSBleGlz dHMgKAogcm9sbGJhY2s7CiAKIC0tCistLSBUZXN0IGNhc2UgZm9yIGV4aXN0IHN1Ymxpbmsg d2hlcmUgd2UgY2FuIGNvbnNpZGVyIHNvbWUgdW5kZXBlbmRlbnQgZXhwcmVzc2lvbgorLS0g d2l0aCBvdXRlciBsaW5rCistLQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgMQor RlJPTSB0YQorV0hFUkUgRVhJU1RTICgKKyAgU0VMRUNUIDEKKyAgRlJPTSB0YgorICBKT0lO IHRjIE9OIHRhLmlkID0gdGIuaWQKKyk7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCAxCitGUk9NIHRhCitXSEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9NIHRiCisg IEpPSU4gdGMgT04gdGEuaWQgPSB0Yy5pZAorKTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUIDEKK0ZST00gdGEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00g dGIKKyAgSk9JTiB0YyBPTiAxID0gMQorICBXSEVSRSB0YS5pZCA9IHRjLmlkCispOworCist LSBKb2luIGNvbXBvdW5kIGV4cHJlc3Npb24KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCAxCitGUk9NIHRhCitXSEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9NIHRiCisg IEpPSU4gdGMgT04gdGEuaWQgPSB0Yy5pZAorICAgICAgICAgICBBTkQgdGEuaWQgPSB0Yi5p ZAorKTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZST00gdGEgdGExCitX SEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9NIHRiCisgIEpPSU4gdGMgT04gdGIu YXZhbCA9IHRjLmFpZAorICAgICAgICAgICBBTkQgdGIuYXZhbCA9IHRhMS5pZAorKTsKKwor RVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZST00gdGEKK0pPSU4gdGIgT04gdHJ1 ZQorV0hFUkUgRVhJU1RTICgKKyAgU0VMRUNUIDEKKyAgRlJPTSB0YiB0YjEKKyAgSk9JTiB0 YyBPTiB0YS5pZCA9IHRiLmlkCispOworCistLSBDb21wb3VuZCBleHByZXNzaW9uIHdpdGgg Y29uc3QgdHlwZSBvciBvdGhlciB0eXBlIG9mIGV4cHJlc3Npb25zCitFWFBMQUlOIChDT1NU UyBPRkYpCitTRUxFQ1QgMQorRlJPTSB0YQorV0hFUkUgRVhJU1RTICgKKyAgU0VMRUNUIDEK KyAgRlJPTSB0YgorICBKT0lOIHRjIE9OIHRhLmlkID0gdGMuaWQKKyAgICAgICAgICAgQU5E IHRhLmlkID0gMQorKTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZST00g dGEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gdGIKKyAgSk9JTiB0YyBP TiB0YS5pZCA9IHRjLmlkCisgICAgICAgICAgIEFORCB0Yi5pZCA9IDEKKyk7CisKK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRhCitXSEVSRSBFWElTVFMgKAorICBT RUxFQ1QgMQorICBGUk9NIHRiCisgIFJJR0hUIEpPSU4gdGMgT04gdGEuaWQgPSB0Yy5pZAor ICBXSEVSRSB0YS52YWwgPSAxCispOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg MQorRlJPTSB0YQorV0hFUkUgRVhJU1RTICgKKyAgU0VMRUNUIDEKKyAgRlJPTSB0YgorICBK T0lOIHRjIE9OIHRhLmlkID0gdGIuaWQKKyAgICAgICAgICAgQU5EIHRiLmF2YWwgPSBBTlkg KCd7MX0nOjppbnRbXSkKKyk7CisKKy0tIEV4aXN0cyBTdWJMaW5rIGV4cHJlc3Npb24gd2l0 aGluIGV4cHJlc3Npb24KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRh IHRhMQorV0hFUkUgRVhJU1RTICgKKyAgU0VMRUNUIDEKKyAgRlJPTSB0YQorICBKT0lOIHRi IE9OIHRhLmlkID0gdGExLmlkCisgICAgICAgICAgIEFORCB0YTEudmFsID0gMQorICBXSEVS RSBFWElTVFMgKAorICAgIFNFTEVDVCAxCisgICAgRlJPTSB0YSB0YTIKKyAgICBXSEVSRSB0 YTIuaWQgPSB0YTEuaWQKKyAgKQorKTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNU IDEKK0ZST00gdGEgdGExCitXSEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9NIHRh CisgIEpPSU4gdGIgT04gdGEudmFsID0gdGExLmlkCisgICAgICAgICAgIEFORCB0YTEuaWQg PSAxCisgIFdIRVJFIEVYSVNUUyAoCisgICAgU0VMRUNUIDEKKyAgICBGUk9NIHRhIHRhMgor ICAgIFdIRVJFIHRhMi5pZCA9IHRhLmlkCisgICkKKyk7CisKK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCAxCitGUk9NIHRhCitXSEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBG Uk9NIHRiCisgIFdIRVJFIHRhLmlkID0gdGIuaWQKKyAgICBBTkQgRVhJU1RTICgKKyAgICAg IFNFTEVDVCAxCisgICAgICBGUk9NIHRjCisgICAgICBXSEVSRSB0Yy5pZCA9IHRiLmlkCisg ICAgICAgIEFORCB0Yy5haWQgKyB0Yi5hdmFsID4gMAorICAgICkKKyk7CisKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRhCitXSEVSRSBFWElTVFMgKAorICBTRUxF Q1QgMQorICBGUk9NIHRiCisgIFdIRVJFIHRhLmlkID0gdGIuaWQKKyAgICBBTkQgRVhJU1RT ICgKKyAgICAgIFNFTEVDVCAxCisgICAgICBGUk9NIHRjCisgICAgICBXSEVSRSB0Yy5pZCA9 IHRiLmlkCisgICAgICAgIEFORCB0Yy5haWQgKyB0YS52YWwgPiAwCisgICAgKQorKTsKKwor LS0gQ2hlY2sgd2l0aCBOVUxMIGFuZCBOT1QgTlVMTCBleHByZXNzaW9ucworQUxURVIgVEFC TEUgdGEgQUREIENPTFVNTiBpc19hY3RpdmUgYm9vbDsKK1VQREFURSB0YSBTRVQgaXNfYWN0 aXZlID0gdHJ1ZTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZST00gdGEK K1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gdGIKKyAgSk9JTiB0YyBPTiB0 YS5pZCA9IHRiLmlkCisgICAgICAgICBBTkQgQ09BTEVTQ0UodGEuaXNfYWN0aXZlLCB0cnVl KQorKTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZST00gdGIKK1dIRVJF IEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gdGEKKyAgSk9JTiB0YyBPTiB0YS5pZCA9 IHRiLmlkCisgICAgICAgICBBTkQgQ09BTEVTQ0UodGEuaXNfYWN0aXZlLCB0cnVlKQorKTsK KworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZST00gdGEKK1dIRVJFIEVYSVNU UyAoCisgIFNFTEVDVCAxCisgIEZST00gdGIKKyAgSk9JTiB0YyBPTiB0YS5pZCA9IHRiLmlk CisgICAgICAgICBBTkQgQ0FTRQorICAgICAgICAgICAgICAgV0hFTiB0YS5pc19hY3RpdmUg VEhFTiB0cnVlCisgICAgICAgICAgICAgICBFTFNFIGZhbHNlCisgICAgICAgICAgICAgRU5E ID0gdHJ1ZQorKTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZST00gdGIK K1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gdGEKKyAgSk9JTiB0YyBPTiB0 YS5pZCA9IHRiLmlkCisgICAgICAgICBBTkQgQ0FTRQorICAgICAgICAgICAgICAgV0hFTiB0 YS5pc19hY3RpdmUgVEhFTiB0cnVlCisgICAgICAgICAgICAgICBFTFNFIGZhbHNlCisgICAg ICAgICAgICAgRU5EID0gdHJ1ZQorKTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNU IDEKK0ZST00gdGEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gdGIKKyAg Sk9JTiB0YyBPTiB0YS5pZCA9IHRiLmlkCisgICAgICAgICBBTkQgdGEuaXNfYWN0aXZlCisp OworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgMQorRlJPTSB0YQorV0hFUkUgRVhJ U1RTICgKKyAgU0VMRUNUIDEKKyAgRlJPTSB0YgorICBKT0lOIHRjIE9OIHRhLmlkID0gdGIu aWQKKyAgICAgICAgIEFORCB0YS5pc19hY3RpdmUgSVMgTk9UIE5VTEwKKyk7CisKKworLS0g RGlzYWJsZWQgcHVsbCB1cCBiZWNhdXNlIGl0IGlzIGFwcGxjYXBhYmxlIGZvciBJTk5FUiBK T0lOIGNvbm5lY3Rpb24KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRh CitXSEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9NIHRiCisgIFJJR0hUIEpPSU4g dGMgT04gdGEuaWQgPSB0Yy5pZAorKTsKKworLS0gRGlzYWJsZSBwdWxsLXVwIGR1ZSB0byBs YWNrIG9mIHRoZSBvdXRlciB2YXIKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAxCitG Uk9NIHRhCitXSEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9NIHRiCisgIEpPSU4g dGMgT04gdGMuaWQgPSB0Yi5pZAorKTsKKworQ1JFQVRFIFRBQkxFIHRkIChpZCBpbnQsIHRj X2lkIGJ5dGVhLCB2YWwgaW50KTsKKworSU5TRVJUIElOVE8gdGQKK1NFTEVDVCBnLmlkLCAn VGVzdDEnOjpieXRlYSBBUyB0Y19pZCwgNiBBUyB2YWwKK0ZST00gZ2VuZXJhdGVfc2VyaWVz KDEsIDI1KSBBUyBnKGlkKQorCitVTklPTiBBTEwKKworU0VMRUNUIGcuaWQsICdUZXN0Mic6 OmJ5dGVhIEFTIHRjX2lkLCA3IEFTIHZhbAorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjYsIDUw KSBBUyBnKGlkKQorCitVTklPTiBBTEwKKworU0VMRUNUIGcuaWQsICdUZXN0NCc6OmJ5dGVh IEFTIHRjX2lkLCA2IEFTIHZhbAorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTEsIDc1KSBBUyBn KGlkKQorCitVTklPTiBBTEwKKworU0VMRUNUIGcuaWQsICdUZXN0NSc6OmJ5dGVhIEFTIHRj X2lkLCA3IEFTIHZhbAorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNzYsIDEwMCkgQVMgZyhpZCk7 CisKK0VYUExBSU4gKENPU1RTIE9GRikKKyBTRUxFQ1QgdGEuaWQKKyAgIEZST00gdGEKKyAg V0hFUkUgRVhJU1RTICgKKyAgICBTRUxFQ1QgMQorICAgICAgRlJPTSB0YgorICAgICBXSEVS RSB0Yi5pZCA9IHRhLmlkIEFORAorICAgICAgICAgICBFWElTVFMKKyAgICAgICAgKFNFTEVD VCAxCisgICAgICAgICAgIEZST00gdGMKKyAgICAgICAgICBXSEVSRSB0Yy5pZCA9IHRiLmlk KQorICAgICAgICAgICAgICAgKTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorIFNFTEVDVCB0 YS5pZAorICAgRlJPTSB0YQorICBXSEVSRSBFWElTVFMgKAorICAgIFNFTEVDVCAxCisgICAg ICBGUk9NIHRiCisgICAgIFdIRVJFIHRiLmlkID0gdGEuaWQgQU5ECisgICAgICAgICAgIEVY SVNUUworICAgICAgICAoU0VMRUNUIDEKKyAgICAgICAgICAgRlJPTSB0YworICAgICAgICAg IFdIRVJFIHRjLmlkID0gdGEuaWQpCisgICAgICAgICAgICAgICApOworCitFWFBMQUlOIChD T1NUUyBPRkYpCisgU0VMRUNUIHRhLmlkCisgICBGUk9NIHRhCisgIFdIRVJFIEVYSVNUUyAo CisgICAgU0VMRUNUIDEKKyAgICAgIEZST00gdGIKKyAgICAgV0hFUkUgdGIuaWQgPSB0YS5p ZAorICAgICAgIEFORCBFWElTVFMKKyAgICAgICAgICAgICAgKFNFTEVDVCAxCisgICAgICAg ICAgICAgICAgIEZST00gdGMKKyAgICAgICAgICAgICAgIFdIRVJFIHRiLmlkID0gdGEuaWQp CisgICAgICAgICAgICAgICAgKTsKKworZXhwbGFpbiAoQ09TVFMgT0ZGKQorIFNFTEVDVCB0 YS5pZAorICAgRlJPTSB0YQorICBXSEVSRSBFWElTVFMgKAorICAgIFNFTEVDVCAxCisgICAg ICBGUk9NIHRiCisgICAgICAgIGpvaW4gdGMgb24gdGMuaWQgPSB0YS5pZAorICAgICAgICAg IEFORCBFWElTVFMgKAorICAgICAgICAgICAgICAgIFNFTEVDVCAxCisgICAgICAgICAgICAg ICAgICBGUk9NIHRkCisgICAgICAgICAgICAgICAgV0hFUkUgdGQuaWQgPSB0YS5pZCkKKyAg ICAgICAgICAgICAgICApOworCitleHBsYWluIChDT1NUUyBPRkYpCisgU0VMRUNUIHRhLmlk CisgICBGUk9NIHRhCisgIFdIRVJFIEVYSVNUUyAoCisgICAgU0VMRUNUIDEKKyAgICAgIEZS T00gdGIKKyAgICAgICAgam9pbiB0YyBvbiB0Yy5pZCA9IHRhLmlkCisgICAgICAgICAgQU5E IEVYSVNUUyAoCisgICAgICAgICAgICAgICAgU0VMRUNUIDEKKyAgICAgICAgICAgICAgICAg IEZST00gdGQKKyAgICAgICAgICAgICAgICBXSEVSRSB0Yi5pZCA9IHRhLmlkKQorICAgICAg ICAgICAgICAgICk7CisKK0NSRUFURSBUQUJMRSB0ZSAoaWQgaW50LCB0Y19pZCBieXRlYSwg dmFsIGludCk7CitJTlNFUlQgSU5UTyB0ZSBTRUxFQ1QgKiBGUk9NIHRkOworCitFWFBMQUlO IChDT1NUUyBPRkYpCitTRUxFQ1QgdDEuKgorRlJPTSB0YSB0MQorV0hFUkUgRVhJU1RTICgK KyAgU0VMRUNUIDEKKyAgRlJPTSAoU0VMRUNUIDEgQVMgU0RCTF9EVU1NWSkgU0RCTF9EVUFM CisgIEpPSU4gdGIgdDIgT04gdDIuaWQgPSB0MS5pZAorICBXSEVSRSBFWElTVFMgKAorICAg IFNFTEVDVCAxCisgICAgRlJPTSAoU0VMRUNUIDEgQVMgU0RCTF9EVU1NWSkgU0RCTF9EVUFM CisgICAgSk9JTiB0ZCB0MyBPTiB0My50Y19pZCBJTiAoJ1Rlc3QxJzo6Ynl0ZWEsICdUZXN0 Mic6OmJ5dGVhKQorICAgIFdIRVJFIEVYSVNUUyAoCisgICAgICBTRUxFQ1QgMQorICAgICAg RlJPTSB0ZSB0NAorICAgICAgV0hFUkUgdDQudGNfaWQgPSB0My50Y19pZAorICAgICAgICBB TkQgdDQudmFsID0gdDIuYXZhbAorICAgICkgPSBFWElTVFMgKAorICAgICAgU0VMRUNUIDEK KyAgICAgIEZST00gdGMgdDUKKyAgICAgIFdIRVJFIHQ1LmlkID0gdDMuaWQKKyAgICApCisg ICkKKyk7CisKK0VYUExBSU4KK1NFTEVDVCB0YS4qCitGUk9NIHRhCitXSEVSRSBFWElTVFMg KAorICBTRUxFQ1QgMQorICBGUk9NIHRiCisgIEpPSU4gdGMgT04gdGMuaWQgPSB0Yi5pZAor ICAgICAgICAgQU5EIHRiLmlkID0gdGEuaWQKKyAgSk9JTiB0ZCBPTiB0ZC5pZCA9IHRjLmlk CispOworCitEUk9QIFRBQkxFIHRkLCB0ZTsKKworQ1JFQVRFIFRBQkxFIHRzdDEgKGlkIGlu dCwgbWVzIHZhcmNoYXIoMjApKTsKK0NSRUFURSBUQUJMRSB0c3QyIChpZCBpbnQsIHRzdDFf aWQgaW50LCB0eXBlX2lkIGludCk7CitDUkVBVEUgVEFCTEUgdHN0MyAoaWQgYnl0ZWEpOwor Q1JFQVRFIFRBQkxFIHRzdDQgKGlkIGludCwgdHN0M19pZCBieXRlYSwgdHlwZV9pZCBpbnQp OworQ1JFQVRFIFRBQkxFIHRzdDUgKGlkIGludCwgdHN0M19pZCBieXRlYSwgdHlwZV9pZCBp bnQpOworCitJTlNFUlQgSU5UTyB0c3QxIFZBTFVFUyAoMSwgJ3Rlc3QxJyk7CitJTlNFUlQg SU5UTyB0c3QxIFZBTFVFUyAoMiwgJ3Rlc3QyJyk7CitJTlNFUlQgSU5UTyB0c3QxIFZBTFVF UyAoMywgJ3Rlc3QzJyk7CitJTlNFUlQgSU5UTyB0c3QyIFZBTFVFUyAoMSwgMiwgNyk7CitJ TlNFUlQgSU5UTyB0c3QyIFZBTFVFUyAoMSwgMiwgNik7CitJTlNFUlQgSU5UTyB0c3QyIFZB TFVFUyAoMiwgMywgNyk7CisKK0lOU0VSVCBJTlRPIHRzdDMKK1NFTEVDVCAoJ1Rlc3QnIHx8 IGcuaWQpOjpieXRlYSBBUyBpZAorICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNSkgQVMg ZyhpZCk7CisKK0lOU0VSVCBJTlRPIHRzdDQKKyhTRUxFQ1QgZy5pZCwgJ1Rlc3QxJzo6Ynl0 ZWEgQVMgdHN0M19pZCwgNiBBUyB0eXBlX2lkCisgICBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LCAyNSkgQVMgZyhpZCkpCitVTklPTiBBTEwKKyhTRUxFQ1QgZy5pZCwgJ1Rlc3QyJzo6Ynl0 ZWEgQVMgdHN0M19pZCwgNyBBUyB0eXBlX2lkCisgICBGUk9NIGdlbmVyYXRlX3Nlcmllcygy NiwgNTApIEFTIGcoaWQpKQorVU5JT04gQUxMCisoU0VMRUNUIGcuaWQsICdUZXN0NCc6OmJ5 dGVhIEFTIHRzdDNfaWQsIDYgQVMgdHlwZV9pZAorICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo NTEsIDc1KSBBUyBnKGlkKSkKK1VOSU9OIEFMTAorKFNFTEVDVCBnLmlkLCAnVGVzdDUnOjpi eXRlYSBBUyB0c3QzX2lkLCA3IEFTIHR5cGVfaWQKKyAgIEZST00gZ2VuZXJhdGVfc2VyaWVz KDc2LCAxMDApIEFTIGcoaWQpKTsKK0lOU0VSVCBJTlRPIHRzdDUgU0VMRUNUICogRlJPTSB0 c3Q0OworCitWQUNVVU0gKEFOQUxZWkUpIHRzdDEsIHRzdDIsIHRzdDMsIHRzdDQsIHRzdDU7 CisKKy0tIENhc2Ugd2l0aCB0d28gZXhpc3RzIGluIE9wRXhwciwgaW4gdGhlIGZpcnN0IG9u ZSB0My5pZCBpcyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgcXVlcnkKKy0tIGFuZCB0 Mi50eXBlLWlkIGlzIHRoZSByZWZlcmVuY2UgdG8gZ3JhbmRwYXJlbnQgcXVlcnkKK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCB0MS4qCitGUk9NIHRzdDEgdDEKK1dIRVJFIEVYSVNU UyAoCisgIFNFTEVDVCAxCisgIEZST00gKFNFTEVDVCAxIEFTIFNEQkxfRFVNTVkpIFNEQkxf RFVBTAorICBKT0lOIHRzdDIgdDIgT04gdDIudHN0MV9pZCA9IHQxLmlkCisgIFdIRVJFIEVY SVNUUyAoCisgICAgU0VMRUNUIDEKKyAgICBGUk9NIChTRUxFQ1QgMSBBUyBTREJMX0RVTU1Z KSBTREJMX0RVQUwKKyAgICBKT0lOIHRzdDMgdDMgT04gdDMuaWQgSU4gKCdUZXN0MSc6OmJ5 dGVhLCAnVGVzdDInOjpieXRlYSkKKyAgICBXSEVSRSBFWElTVFMgKAorICAgICAgU0VMRUNU IDEKKyAgICAgIEZST00gdHN0NCB0NAorICAgICAgV0hFUkUgdDQudHN0M19pZCA9IHQzLmlk CisgICAgICAgIEFORCB0NC50eXBlX2lkID0gdDIudHlwZV9pZAorICAgICkgPSBFWElTVFMg KAorICAgICAgU0VMRUNUIDEKKyAgICAgIEZST00gdHN0NSB0NQorICAgICAgV0hFUkUgdDUu dHN0M19pZCA9IHQzLmlkCisgICAgKQorICApCispOworCitEUk9QIFRBQkxFIHRzdDEsIHRz dDIsIHRzdDMsIHRzdDQsIHRzdDU7CisKIC0tIFRlc3QgY2FzZSBmb3Igc3VibGlua3MgcHVz aGVkIGRvd24gaW50byBzdWJzZWxlY3RzIHZpYSBqb2luIGFsaWFzIGV4cGFuc2lvbgogLS0K IAo= --------------3hlp0eypk3TM21yM4bUhvk3o--