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 1r001D-002Yec-57 for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Nov 2023 13:51:56 +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 1r001B-00FstK-D5 for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Nov 2023 13:51:53 +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 1r001A-00FstC-S0 for pgsql-hackers@lists.postgresql.org; Mon, 06 Nov 2023 13:51:53 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r0016-0050Ud-L6 for pgsql-hackers@postgresql.org; Mon, 06 Nov 2023 13:51:52 +0000 Received: from [192.168.43.178] (unknown [176.59.52.29]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: a.rybakina@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 9C639E20E9F; Mon, 6 Nov 2023 16:51:46 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1699278707; bh=6xYprYsOIyJqJ5QbEtbGqAuQD8Pf3tARuZB31dRz9so=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=5O3m8XLpqgIm9bggpWNRpF+sDoqLuYSAoHrPlyrIBnP4qaiG/93pMyjv1fcCUBgOG 0821J8XSzodpodpfWdKKGXcACfDCko86ROUxSr1VoJy6/TwqLufFzRwZ+XTH3Yy6Xr ZH53iNdPwxHJ+HYm5dnaQ185w3I3F4DbIBddISzYEq6AXeOpWyQCAFxtNFORGp7nGD HfVZSV3gUQOwB963hrQJ0W9l67z69PDIT810jCHZDg4Xx0PRkguZrKwq58Nj5+k5iF 4IY5MQIJCzzOjSQarZfR8L0O+9onoRbUCUN3xPqNU2y2VaC1w249EPXK0Gf095WkMn /KlNN95upTYlQ== Content-Type: multipart/mixed; boundary="------------MBjRN210tAQXV9uZavXrL1Rl" Message-ID: <16a7e3aa-24c0-4986-8820-ea2857bd7b6b@postgrespro.ru> Date: Mon, 6 Nov 2023 16:51:45 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: POC, WIP: OR-clause support for indexes Content-Language: en-US To: Alexander Korotkov , Robert Haas Cc: Peter Geoghegan , pgsql-hackers@postgresql.org, "Finnerty, Jim" , Marcos Pegoraro , Andrey Lepikhov , teodor@sigaev.ru, Ranier Vilela , Tomas Vondra , Peter Eisentraut References: <567ED6CA.2040504@sigaev.ru> <89fb769c-7d45-f0c5-a9b3-b706c9661c57@postgrespro.ru> <668892c1-fb11-3a79-ce5e-1c194b7b3263@postgrespro.ru> From: Alena Rybakina In-Reply-To: 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. --------------MBjRN210tAQXV9uZavXrL1Rl Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 30.10.2023 17:06, Alexander Korotkov wrote: > On Mon, Oct 30, 2023 at 3:40 PM Robert Haas wrote: >> On Thu, Oct 26, 2023 at 5:05 PM Peter Geoghegan wrote: >>> On Thu, Oct 26, 2023 at 12:59 PM Robert Haas wrote: >>>> Alexander's example seems to show that it's not that simple. If I'm >>>> reading his example correctly, with things like aid = 1, the >>>> transformation usually wins even if the number of things in the OR >>>> expression is large, but with things like aid + 1 * bid = 1, the >>>> transformation seems to lose at least with larger numbers of items. So >>>> it's not JUST the number of OR elements but also what they contain, >>>> unless I'm misunderstanding his point. >>> Alexander said "Generally, I don't see why ANY could be executed >>> slower than the equivalent OR clause". I understood that this was his >>> way of expressing the following idea: >>> >>> "In principle, there is no reason to expect execution of ANY() to be >>> slower than execution of an equivalent OR clause (except for >>> noise-level differences). While it might not actually look that way >>> for every single type of plan you can imagine right now, that doesn't >>> argue for making a cost-based decision. It actually argues for fixing >>> the underlying issue, which can't possibly be due to some kind of >>> fundamental advantage enjoyed by expression evaluation with ORs". >>> >>> This is also what I think of all this. >> I agree with that, with some caveats, mainly that the reverse is to >> some extent also true. Maybe not completely, because arguably the >> ANY() formulation should just be straight-up easier to deal with, but >> in principle, the two are equivalent and it shouldn't matter which >> representation we pick. >> >> But practically, it may, and we need to be sure that we don't put in >> place a translation that is theoretically a win but in practice leads >> to large regressions. Avoiding regressions here is more important than >> capturing all the possible gains. A patch that wins in some scenarios >> and does nothing in others can be committed; a patch that wins in even >> more scenarios but causes serious regressions in some cases probably >> can't. > +1 > Sure, I've identified two cases where patch shows regression [1]. The > first one (quadratic complexity of expression processing) should be > already addressed by usage of hash. The second one (planning > regression with Bitmap OR) is not yet addressed. > > Links > 1. https://www.postgresql.org/message-id/CAPpHfduJtO0s9E%3DSHUTzrCD88BH0eik0UNog1_q3XBF2wLmH6g%40mail.gmail.com > I also support this approach. I have almost finished writing a patch that fixes the first problem related to the quadratic complexity of processing expressions by adding a hash table. I also added a check: if the number of groups is equal to the number of OR expressions, we assume that no expressions need to be converted and interrupt further execution. Now I am trying to fix the last problem in this patch: three tests have indicated a problem related to incorrect conversion. I don't think it can be serious, but I haven't figured out where the mistake is yet. I added log like that: ERROR:  unrecognized node type: 0. -- Regards, Alena Rybakina Postgres Professional --------------MBjRN210tAQXV9uZavXrL1Rl Content-Type: text/x-patch; charset=UTF-8; name="v8.1-Replace-OR-clause-to-ANY-expressions.patch" Content-Disposition: attachment; filename="v8.1-Replace-OR-clause-to-ANY-expressions.patch" Content-Transfer-Encoding: base64 RnJvbSAzMDYyYTI0MDhhZjI1OGI5ZTMyNzIxOTAyMDIyMWI3NTUwMWU4NTMwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbGVuYSBSeWJha2luYSA8YS5yeWJha2luYUBwb3N0 Z3Jlc3Byby5ydT4KRGF0ZTogTW9uLCA2IE5vdiAyMDIzIDE2OjQ4OjAwICswMzAwClN1Ympl Y3Q6IFtQQVRDSF0gUmVwbGFjZSBPUiBjbGF1c2UgdG8gQU5ZIGV4cHJlc3Npb25zLiBSZXBs YWNlIChYPU4xKSBPUgogKFg9TjIpIC4uLiB3aXRoIFggPSBBTlkoTjEsIE4yKSBvbiB0aGUg c3RhZ2Ugb2YgdGhlIG9wdGltaXNlciB3aGVuIHdlIGFyZQogc3RpbGwgd29ya2luZyB3aXRo IGEgdHJlZSBleHByZXNzaW9uLiBGaXJzdGx5LCB3ZSBkbyBub3QgdHJ5IHRvIG1ha2UgYQog dHJhbnNmb3JtYXRpb24gZm9yICJub24tb3IiIGV4cHJlc3Npb25zIG9yIGluZXF1YWxpdGll cyBhbmQgdGhlIGNyZWF0aW9uIG9mIGEKIHJlbGF0aW9uIHdpdGggIm9yIiBleHByZXNzaW9u cyBvY2N1cnMgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHNjZW5hcmlvLgogU2Vjb25kbHksIHdl IGRvIG5vdCBtYWtlIHRyYW5zZm9ybWF0aW9ucyBpZiB0aGVyZSBhcmUgbGVzcyB0aGFuIHNl dAogb3JfdHJhbnNmb3JtX2xpbWl0LiBUaGlyZGx5LCBpdCBpcyB3b3J0aCBjb25zaWRlcmlu ZyB0aGF0IHdlIGNvbnNpZGVyICJvciIKIGV4cHJlc3Npb25zIG9ubHkgYXQgdGhlIGN1cnJl bnQgbGV2ZWwuCgpBdXRob3JzOiBBbGVuYSBSeWJha2luYSA8bGVuYS5yaWJhY2tpbmFAeWFu ZGV4LnJ1PiwgQW5kcmV5IExlcGlraG92IDxhLmxlcGlraG92QHBvc3RncmVzcHJvLnJ1PgpS ZXZpZXdlZC1ieTogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPiwgUmFuaWVyIFZpbGVs YSA8cmFuaWVyLnZmQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEFsZXhhbmRlciBLb3JvdGtv diA8YWVrb3JvdGtvdkBnbWFpbC5jb20+LCBSb2JlcnQgSGFhcyA8cm9iZXJ0bWhhYXNAZ21h aWwuY29tPgotLS0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMgICAgICAgICAg ICAgICB8IDI5OSArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3RhYmxlcy5jICAgICAgICAgICB8ICAxMCArCiBzcmMvaW5jbHVkZS9wYXJzZXIvcGFy c2VfZXhwci5oICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9jcmVhdGVfaW5kZXgub3V0ICAgIHwgMTE1ICsrKysrKysKIHNyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvZ3VjLm91dCAgICAgICAgICAgICB8ICAgMyArLQogc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9qb2luLm91dCAgICAgICAgICAgIHwgIDUwICsrKwogc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fcHJ1bmUub3V0IHwgMTc5ICsrKysrKysrKysr CiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RpZHNjYW4ub3V0ICAgICAgICAgfCAgMTcg Kwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbCAgICAgICAgIHwgIDMy ICsrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbCAgICAgICAgICAgICAgICAgfCAg MTAgKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX3BydW5lLnNxbCAgICAgIHwg IDIyICsrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC90aWRzY2FuLnNxbCAgICAgICAgICAgICAg fCAgIDYgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAg IHwgICAxICsKIDEzIGZpbGVzIGNoYW5nZWQsIDc0MyBpbnNlcnRpb25zKCspLCAyIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMg Yi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCmluZGV4IDY0YzU4MmMzNDRjLi4y NWE0MjM1ZGJkOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIu YworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCkBAIC0xOCw2ICsxOCw3 IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hZ2dyZWdhdGUuaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX3Byb2MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRl ICJjb21tb24vaGFzaGZuLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZGJjb21tYW5kcy5oIgog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgpA QCAtNDMsNiArNDQsNyBAQAogCiAvKiBHVUMgcGFyYW1ldGVycyAqLwogYm9vbAkJVHJhbnNm b3JtX251bGxfZXF1YWxzID0gZmFsc2U7Citib29sCQlvcl90cmFuc2Zvcm1fbGltaXQgPSBm YWxzZTsKIAogCiBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtRXhwclJlY3Vyc2UoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBOb2RlICpleHByKTsKQEAgLTk4LDcgKzEwMCwzMDIgQEAgc3RhdGljIEV4 cHIgKm1ha2VfZGlzdGluY3Rfb3AoUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpvcG5hbWUs CiAJCQkJCQkJICBOb2RlICpsdHJlZSwgTm9kZSAqcnRyZWUsIGludCBsb2NhdGlvbik7CiBz dGF0aWMgTm9kZSAqbWFrZV9udWxsdGVzdF9mcm9tX2Rpc3RpbmN0KFBhcnNlU3RhdGUgKnBz dGF0ZSwKIAkJCQkJCQkJCQkgQV9FeHByICpkaXN0aW5jdGEsIE5vZGUgKmFyZyk7Cit0eXBl ZGVmIHN0cnVjdCBPckNsYXVzZUdyb3VwRW50cnkKK3sKKwljaGFyCQkgICAqaGFzaF9sZWZ0 dmFyX2tleTsKKworCU5vZGUJCSAgICpub2RlOworCUxpc3QJCSAgICpjb25zdHM7CisJT2lk CQkJCXNjYWxhcl90eXBlOworCU9pZAkJCQlvcG5vOworCUV4cHIgCQkgICAqZXhwcjsKK30g T3JDbGF1c2VHcm91cEVudHJ5OworCitzdGF0aWMgaW50Citvcl9uYW1lX21hdGNoKGNvbnN0 IHZvaWQgKmtleTEsIGNvbnN0IHZvaWQgKmtleTIsIFNpemUga2V5c2l6ZSkKK3sKKwljb25z dCBjaGFyICpuYW1lMSA9ICooY29uc3QgY2hhciAqY29uc3QgKikga2V5MTsKKwljb25zdCBj aGFyICpuYW1lMiA9ICooY29uc3QgY2hhciAqY29uc3QgKikga2V5MjsKKworCXJldHVybiBz dHJjbXAobmFtZTEsIG5hbWUyKTsKK30KKworc3RhdGljIHVpbnQzMgorb3JfbmFtZV9oYXNo KGNvbnN0IHZvaWQgKmtleSwgU2l6ZSBrZXlzaXplKQoreworCWNvbnN0IGNoYXIgKm5hbWUg PSAqKGNvbnN0IGNoYXIgKmNvbnN0ICopIGtleTsKKworCXJldHVybiBEYXR1bUdldEludDMy KGhhc2hfYW55KCh1bnNpZ25lZCBjaGFyICopbmFtZSwgc3RybGVuKG5hbWUpKSk7Cit9CisK K3N0YXRpYyBjaGFyICoKK2dldF9rZXlfbmNvbnN0X25vZGUoTm9kZSAqbmNvbnN0X25vZGUp Cit7CisJaWYgKElzQShuY29uc3Rfbm9kZSwgT3BFeHByKSkKKwl7CisJCU9wRXhwciAJICAg KmNsYXVzZSA9IChPcEV4cHIqKSBuY29uc3Rfbm9kZTsKKwkJT3BFeHByCSAgICp0ZW1wID0g bWFrZU5vZGUoT3BFeHByKTsKKworCQl0ZW1wLT5vcG5vID0gY2xhdXNlLT5vcG5vOworCQl0 ZW1wLT5vcGZ1bmNpZCA9IEludmFsaWRPaWQ7CisJCXRlbXAtPm9wcmVzdWx0dHlwZSA9IGNs YXVzZS0+b3ByZXN1bHR0eXBlOworCQl0ZW1wLT5vcHJldHNldCA9IGNsYXVzZS0+b3ByZXRz ZXQ7CisJCXRlbXAtPm9wY29sbGlkID0gY2xhdXNlLT5vcGNvbGxpZDsKKwkJdGVtcC0+aW5w dXRjb2xsaWQgPSBjbGF1c2UtPmlucHV0Y29sbGlkOworCQl0ZW1wLT5sb2NhdGlvbiA9IC0x OworCisJCXRlbXAtPmFyZ3MgPSBsaXN0X2NvcHkoY2xhdXNlLT5hcmdzKTsKKwkJcmV0dXJu IG5vZGVUb1N0cmluZyh0ZW1wKTsKKwl9CisJZWxzZSBpZiAoSXNBKG5jb25zdF9ub2RlLCBW YXIpKQorCXsKKwkJVmFyCSAgICpjbGF1c2UgPSAoVmFyKikgbmNvbnN0X25vZGU7CisJCVZh cgkgICAqdmFyID0gbWFrZU5vZGUoVmFyKTsKKworCQl2YXItPnZhcm5vID0gY2xhdXNlLT52 YXJubzsKKwkJdmFyLT52YXJhdHRubyA9IGNsYXVzZS0+dmFyYXR0bm87CisJCXZhci0+dmFy dHlwZSA9IGNsYXVzZS0+dmFydHlwZTsKKwkJdmFyLT52YXJ0eXBtb2QgPSBjbGF1c2UtPnZh cnR5cG1vZDsKKwkJdmFyLT52YXJjb2xsaWQgPSBjbGF1c2UtPnZhcmNvbGxpZDsKKwkJdmFy LT52YXJsZXZlbHN1cCA9IGNsYXVzZS0+dmFybGV2ZWxzdXA7CisJCXZhci0+dmFyYXR0bm9z eW4gPSBjbGF1c2UtPnZhcmF0dG5vOworCQl2YXItPmxvY2F0aW9uID0gLTE7CisKKwkJcmV0 dXJuIG5vZGVUb1N0cmluZyh2YXIpOworCX0KKwllbHNlCisJeworCQlyZXR1cm4gTlVMTDsK Kwl9CisgfQorCitzdGF0aWMgTm9kZSAqCit0cmFuc2Zvcm1Cb29sRXhwck9yKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgQm9vbEV4cHIgKmV4cHJfb3JpZykKK3sKKwlMaXN0CQkgICAqb3JfbGlz dCA9IE5JTDsKKwlMaXN0Q2VsbAkgICAqbGM7CisJSEFTSENUTAkJCWluZm87CisJSFRBQiAJ CSAgICpvcl9ncm91cF9odGFiID0gTlVMTDsKKwlpbnQgCQkJbGVuX29ycyA9IGxpc3RfbGVu Z3RoKGV4cHJfb3JpZy0+YXJncyk7CisKKwlNZW1TZXQoJmluZm8sIDAsIHNpemVvZihpbmZv KSk7CisJaW5mby5rZXlzaXplID0gc2l6ZW9mKGNoYXIgKik7CisJaW5mby5lbnRyeXNpemUg PSBzaXplb2YoT3JDbGF1c2VHcm91cEVudHJ5KTsKKwlpbmZvLmhhc2ggPSBvcl9uYW1lX2hh c2g7CisJaW5mby5tYXRjaCA9IG9yX25hbWVfbWF0Y2g7CisJb3JfZ3JvdXBfaHRhYiA9IGhh c2hfY3JlYXRlKCJPUiBHcm91cHMiLAorCQkJCQkJCQkJICBsZW5fb3JzLAorCQkJCQkJCQkJ ICAmaW5mbywKKwkJCQkJCQkJCSAgSEFTSF9FTEVNIHwgSEFTSF9GVU5DVElPTiB8IEhBU0hf Q09NUEFSRSk7CisKKwkvKiBJZiB0aGlzIGlzIG5vdCBhbiAnT1InIGV4cHJlc3Npb24sIHNr aXAgdGhlIHRyYW5zZm9ybWF0aW9uICovCisJaWYgKGV4cHJfb3JpZy0+Ym9vbG9wICE9IE9S X0VYUFIgfHwgIW9yX3RyYW5zZm9ybV9saW1pdCB8fCBsZW5fb3JzID09IDEgfHwgIW9yX2dy b3VwX2h0YWIpCisJCXJldHVybiB0cmFuc2Zvcm1Cb29sRXhwcihwc3RhdGUsIChCb29sRXhw ciAqKSBleHByX29yaWcpOworCisJZm9yZWFjaChsYywgZXhwcl9vcmlnLT5hcmdzKQorCXsK KwkJTm9kZQkJCSAgICphcmcgPSBsZmlyc3QobGMpOworCQlOb2RlCQkJICAgKm9ycXVhbDsK KwkJTm9kZQkJCSAgICpjb25zdF9leHByOworCQlOb2RlCQkJICAgKm5jb25zdF9leHByOwor CQlPckNsYXVzZUdyb3VwRW50cnkgKmdlbnRyeTsKKwkJYm9vbAkJCQlmb3VuZDsKKwkJY2hh cgkJICAgCSAgICpzdHI7CisKKwkJLyogQXQgZmlyc3QsIHRyYW5zZm9ybSB0aGUgYXJnIGFu ZCBldmFsdWF0ZSBjb25zdGFudCBleHByZXNzaW9ucy4gKi8KKwkJb3JxdWFsID0gdHJhbnNm b3JtRXhwclJlY3Vyc2UocHN0YXRlLCAoTm9kZSAqKSBhcmcpOworCQlvcnF1YWwgPSBjb2Vy Y2VfdG9fYm9vbGVhbihwc3RhdGUsIG9ycXVhbCwgIk9SIik7CisJCW9ycXVhbCA9IGV2YWxf Y29uc3RfZXhwcmVzc2lvbnMoTlVMTCwgb3JxdWFsKTsKKworCQlpZiAoIUlzQShvcnF1YWws IE9wRXhwcikpCisJCXsKKwkJCW9yX2xpc3QgPSBsYXBwZW5kKG9yX2xpc3QsIG9ycXVhbCk7 CisJCQljb250aW51ZTsKKwkJfQogCisJCS8qCisJCSAqIERldGVjdCB0aGUgY29uc3RhbnQg c2lkZSBvZiB0aGUgY2xhdXNlLiBSZWNhbGwgbm9uLWNvbnN0YW50CisJCSAqIGV4cHJlc3Np b24gY2FuIGJlIG1hZGUgbm90IG9ubHkgd2l0aCBWYXJzLCBidXQgYWxzbyB3aXRoIFBhcmFt cywKKwkJICogd2hpY2ggaXMgbm90IGJvbmRlZCB3aXRoIGFueSByZWxhdGlvbi4gVGh1cywg d2UgZGV0ZWN0IHRoZSBjb25zdAorCQkgKiBzaWRlIC0gaWYgYW5vdGhlciBzaWRlIGlzIGNv bnN0YW50IHRvbywgdGhlIG9ycXVhbCBjb3VsZG4ndCBiZQorCQkgKiBhbiBPcEV4cHIuCisJ CSAqIEdldCBwb2ludGVycyB0byBjb25zdGFudCBhbmQgZXhwcmVzc2lvbiBzaWRlcyBvZiB0 aGUgcXVhbC4KKwkJICovCisJCWlmIChJc0EoZ2V0X2xlZnRvcChvcnF1YWwpLCBDb25zdCkp CisJCXsKKwkJCW5jb25zdF9leHByID0gZ2V0X3JpZ2h0b3Aob3JxdWFsKTsKKwkJCWNvbnN0 X2V4cHIgPSBnZXRfbGVmdG9wKG9ycXVhbCk7CisJCX0KKwkJZWxzZSBpZiAoSXNBKGdldF9y aWdodG9wKG9ycXVhbCksIENvbnN0KSkKKwkJeworCQkJY29uc3RfZXhwciA9IGdldF9yaWdo dG9wKG9ycXVhbCk7CisJCQluY29uc3RfZXhwciA9IGdldF9sZWZ0b3Aob3JxdWFsKTsKKwkJ fQorCQllbHNlCisJCXsKKwkJCW9yX2xpc3QgPSBsYXBwZW5kKG9yX2xpc3QsIG9ycXVhbCk7 CisJCQljb250aW51ZTsKKwkJfQorCisJCXN0ciA9IGdldF9rZXlfbmNvbnN0X25vZGUobmNv bnN0X2V4cHIpOworCisJCWlmICghb3BfbWVyZ2Vqb2luYWJsZSgoKE9wRXhwciAqKSBvcnF1 YWwpLT5vcG5vLCBleHByVHlwZShuY29uc3RfZXhwcikpIHx8IHN0ciA9PSBOVUxMKQorCQl7 CisJCQlvcl9saXN0ID0gbGFwcGVuZChvcl9saXN0LCBvcnF1YWwpOworCQkJY29udGludWU7 CisJCX0KKworCQkvKgorCQkqIEF0IHRoaXMgcG9pbnQgd2UgZGVmaW5pdGVseSBoYXZlIGEg dHJhbnNmb3JtYWJsZSBjbGF1c2UuCisJCSogQ2xhc3NpZnkgaXQgYW5kIGFkZCBpbnRvIHNw ZWNpZmljIGdyb3VwIG9mIGNsYXVzZXMsIG9yIGNyZWF0ZSBuZXcKKwkJKiBncm91cC4KKwkJ KiBUT0RPOiB0byBtYW5hZ2UgY29tcGxleGl0eSBpbiB0aGUgY2FzZSBvZiBtYW55IGRpZmZl cmVudCBjbGF1c2VzCisJCSogKFgxPUMxKSBPUiAoWDI9QzIgT1IpIC4uLiAoWE4gPSBDTikg d2UgY291bGQgaW52ZW50IHNvbWV0aGluZworCQkqIGxpa2UgYSBoYXNoIHRhYmxlLiBCdXQg YWxzbyB3ZSBiZWxpZXZlLCB0aGF0IHRoZSBjYXNlIG9mIG1hbnkKKwkJKiBkaWZmZXJlbnQg dmFyaWFibGUgc2lkZXMgaXMgdmVyeSByYXJlLgorCQkqLworCQlnZW50cnkgPSBoYXNoX3Nl YXJjaChvcl9ncm91cF9odGFiLCAmc3RyLCBIQVNIX0ZJTkQsICZmb3VuZCk7CisKKwkJaWYg KGZvdW5kKQorCQl7CisJCQlnZW50cnktPmNvbnN0cyA9IGxhcHBlbmQoZ2VudHJ5LT5jb25z dHMsIGNvbnN0X2V4cHIpOworCQkJLyoKKwkJCQkqIFRoZSBjbGF1c2UgY2xhc3NpZmllZCBz dWNjZXNzZnVsbHkgYW5kIGFkZGVkIGludG8gZXhpc3RlZAorCQkJCSogY2xhdXNlIGdyb3Vw LgorCQkJCSovCisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIE5ldyBjbGF1c2UgZ3JvdXAg bmVlZGVkICovCisJCWdlbnRyeSA9IGhhc2hfc2VhcmNoKG9yX2dyb3VwX2h0YWIsICZzdHIs IEhBU0hfRU5URVIsICZmb3VuZCk7CisJCWdlbnRyeS0+bm9kZSA9IG5jb25zdF9leHByOwor CQlnZW50cnktPmNvbnN0cyA9IGxpc3RfbWFrZTEoY29uc3RfZXhwcik7CisJCWdlbnRyeS0+ ZXhwciA9IChFeHByICopIG9ycXVhbDsKKwkJZ2VudHJ5LT5oYXNoX2xlZnR2YXJfa2V5ID0g c3RyOworCX0KKworCWlmIChvcl9ncm91cF9odGFiICYmIChoYXNoX2dldF9udW1fZW50cmll cyhvcl9ncm91cF9odGFiKSA8IDEgfHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgaGFz aF9nZXRfbnVtX2VudHJpZXMob3JfZ3JvdXBfaHRhYikgPT0gbGVuX29ycykpCisJeworCQkv KgorCQkqIE5vIGFueSB0cmFuc2Zvcm1hdGlvbnMgcG9zc2libGUgd2l0aCB0aGlzIGxpc3Qg b2YgYXJndW1lbnRzLiBIZXJlIHdlCisJCSogYWxyZWFkeSBtYWRlIGFsbCB1bmRlcmx5aW5n IHRyYW5zZm9ybWF0aW9ucy4gVGh1cywganVzdCByZXR1cm4gdGhlCisJCSogdHJhbnNmb3Jt ZWQgYm9vbCBleHByZXNzaW9uLgorCQkqLworCQloYXNoX2Rlc3Ryb3kob3JfZ3JvdXBfaHRh Yik7CisJCWxpc3RfZnJlZShvcl9saXN0KTsKKwkJcmV0dXJuIChOb2RlICopIG1ha2VCb29s RXhwcihPUl9FWFBSLCBvcl9saXN0LCBleHByX29yaWctPmxvY2F0aW9uKTsKKwl9CisJZWxz ZQorCXsKKwkJSEFTSF9TRVFfU1RBVFVTCQloYXNoX3NlcTsKKwkJT3JDbGF1c2VHcm91cEVu dHJ5ICpnZW50cnk7CisKKwkJaGFzaF9zZXFfaW5pdCgmaGFzaF9zZXEsIG9yX2dyb3VwX2h0 YWIpOworCisJCS8qIExldCdzIGNvbnZlcnQgZWFjaCBncm91cCBvZiBjbGF1c2VzIHRvIGFu IElOIG9wZXJhdGlvbi4gKi8KKworCQkvKgorCQkqIEdvIHRocm91Z2ggdGhlIGxpc3Qgb2Yg Z3JvdXBzIGFuZCBjb252ZXJ0IGVhY2gsIHdoZXJlIG51bWJlciBvZgorCQkqIGNvbnN0cyBt b3JlIHRoYW4gMS4gdHJpdmlhbCBncm91cHMgbW92ZSB0byBPUi1saXN0IGFnYWluCisJCSov CisKKwkJd2hpbGUgKChnZW50cnkgPSAoT3JDbGF1c2VHcm91cEVudHJ5ICopIGhhc2hfc2Vx X3NlYXJjaCgmaGFzaF9zZXEpKSAhPSBOVUxMKQorCQl7CisJCQlMaXN0CQkJICAgKmFsbGV4 cHJzOworCQkJT2lkCQkJCSAgICBzY2FsYXJfdHlwZTsKKwkJCU9pZAkJCQkJYXJyYXlfdHlw ZTsKKworCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKGdlbnRyeS0+Y29uc3RzKSA+IDApOworCisJ CQlpZiAobGlzdF9sZW5ndGgoZ2VudHJ5LT5jb25zdHMpID09IDEpCisJCQl7CisJCQkJLyoK KwkJCQkgKiBPbmx5IG9uZSBlbGVtZW50IGluIHRoZSBjbGFzcy4gUmV0dXJuIHJpbmZvIGlu dG8gdGhlIEJvb2xFeHByCisJCQkJICogYXJncyBsaXN0IHVuY2hhbmdlZC4KKwkJCQkgKi8K KwkJCQlsaXN0X2ZyZWUoZ2VudHJ5LT5jb25zdHMpOworCQkJCW9yX2xpc3QgPSBsYXBwZW5k KG9yX2xpc3QsIGdlbnRyeS0+ZXhwcik7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8q CisJCQkgKiBEbyB0aGUgdHJhbnNmb3JtYXRpb24uCisJCQkgKgorCQkJICogRmlyc3Qgb2Yg YWxsLCB0cnkgdG8gc2VsZWN0IGEgY29tbW9uIHR5cGUgZm9yIHRoZSBhcnJheSBlbGVtZW50 cy4KKwkJCSAqIE5vdGUgdGhhdCBzaW5jZSB0aGUgTEhTJyB0eXBlIGlzIGZpcnN0IGluIHRo ZSBsaXN0LCBpdCB3aWxsIGJlCisJCQkgKiBwcmVmZXJyZWQgd2hlbiB0aGVyZSBpcyBkb3Vi dCAoZWcsIHdoZW4gYWxsIHRoZSBSSFMgaXRlbXMgYXJlCisJCQkgKiB1bmtub3duIGxpdGVy YWxzKS4KKwkJCSAqCisJCQkgKiBOb3RlOiB1c2UgbGlzdF9jb25jYXQgaGVyZSBub3QgbGNv bnMsIHRvIGF2b2lkIGRhbWFnaW5nIHJub252YXJzLgorCQkJICoKKwkJCSAqIEFzIGEgc291 cmNlIG9mIGluc2lkZXMsIHVzZSBtYWtlX3NjYWxhcl9hcnJheV9vcCgpCisJCQkgKi8KKwkJ CWFsbGV4cHJzID0gbGlzdF9jb25jYXQobGlzdF9tYWtlMShnZW50cnktPm5vZGUpLCBnZW50 cnktPmNvbnN0cyk7CisJCQlzY2FsYXJfdHlwZSA9IHNlbGVjdF9jb21tb25fdHlwZShOVUxM LCBhbGxleHBycywgTlVMTCwgTlVMTCk7CisKKwkJCWlmIChzY2FsYXJfdHlwZSAhPSBSRUNP UkRPSUQgJiYgT2lkSXNWYWxpZChzY2FsYXJfdHlwZSkpCisJCQkJYXJyYXlfdHlwZSA9IGdl dF9hcnJheV90eXBlKHNjYWxhcl90eXBlKTsKKwkJCWVsc2UKKwkJCQlhcnJheV90eXBlID0g SW52YWxpZE9pZDsKKworCQkJaWYgKGFycmF5X3R5cGUgIT0gSW52YWxpZE9pZCkKKwkJCXsK KwkJCQkvKgorCQkJCSAqIE9LOiBjb2VyY2UgYWxsIHRoZSByaWdodC1oYW5kIG5vbi1WYXIg aW5wdXRzIHRvIHRoZSBjb21tb24KKwkJCQkgKiB0eXBlIGFuZCBidWlsZCBhbiBBcnJheUV4 cHIgZm9yIHRoZW0uCisJCQkJICovCisJCQkJTGlzdAkgICAqYWV4cHJzOworCQkJCUFycmF5 RXhwciAgKm5ld2E7CisJCQkJU2NhbGFyQXJyYXlPcEV4cHIgKnNhb3BleHByOworCQkJCUxp c3RDZWxsICpsOworCisJCQkJYWV4cHJzID0gTklMOworCisJCQkJZm9yZWFjaChsLCBnZW50 cnktPmNvbnN0cykKKwkJCQl7CisJCQkJCU5vZGUJICAgKnJleHByID0gKE5vZGUgKikgbGZp cnN0KGwpOworCisJCQkJCXJleHByID0gY29lcmNlX3RvX2NvbW1vbl90eXBlKHBzdGF0ZSwg cmV4cHIsCisJCQkJCQkJCQkJCQlzY2FsYXJfdHlwZSwKKwkJCQkJCQkJCQkJCSJJTiIpOwor CQkJCQlhZXhwcnMgPSBsYXBwZW5kKGFleHBycywgcmV4cHIpOworCQkJCX0KKworCQkJCW5l d2EgPSBtYWtlTm9kZShBcnJheUV4cHIpOworCQkJCS8qIGFycmF5X2NvbGxpZCB3aWxsIGJl IHNldCBieSBwYXJzZV9jb2xsYXRlLmMgKi8KKwkJCQluZXdhLT5lbGVtZW50X3R5cGVpZCA9 IHNjYWxhcl90eXBlOworCQkJCW5ld2EtPmFycmF5X3R5cGVpZCA9IGFycmF5X3R5cGU7CisJ CQkJbmV3YS0+bXVsdGlkaW1zID0gZmFsc2U7CisJCQkJbmV3YS0+ZWxlbWVudHMgPSBhZXhw cnM7CisJCQkJbmV3YS0+bG9jYXRpb24gPSAtMTsKKworCQkJCXNhb3BleHByID0KKwkJCQkJ KFNjYWxhckFycmF5T3BFeHByICopCisJCQkJCQltYWtlX3NjYWxhcl9hcnJheV9vcChwc3Rh dGUsCisJCQkJCQkJCQkJCSBsaXN0X21ha2UxKG1ha2VTdHJpbmcoKGNoYXIgKikgIj0iKSks CisJCQkJCQkJCQkJCSB0cnVlLAorCQkJCQkJCQkJCQkgZ2VudHJ5LT5ub2RlLAorCQkJCQkJ CQkJCQkgKE5vZGUgKikgbmV3YSwKKwkJCQkJCQkJCQkJIC0xKTsKKworCQkJCW9yX2xpc3Qg PSBsYXBwZW5kKG9yX2xpc3QsICh2b2lkICopIHNhb3BleHByKTsKKwkJCX0KKwkJCWVsc2UK KwkJCXsKKwkJCQlsaXN0X2ZyZWUoZ2VudHJ5LT5jb25zdHMpOworCQkJCW9yX2xpc3QgPSBs YXBwZW5kKG9yX2xpc3QsIGdlbnRyeS0+ZXhwcik7CisJCQl9CisJCQloYXNoX3NlYXJjaChv cl9ncm91cF9odGFiLCAmZ2VudHJ5LT5oYXNoX2xlZnR2YXJfa2V5LCBIQVNIX1JFTU9WRSwg TlVMTCk7CisJCX0KKwkJaGFzaF9kZXN0cm95KG9yX2dyb3VwX2h0YWIpOworCX0KKworCS8q IE9uZSBtb3JlIHRyaWNrOiBhc3NlbWJsZSBjb3JyZWN0IGNsYXVzZSAqLworCXJldHVybiAo Tm9kZSAqKSAoKGxpc3RfbGVuZ3RoKG9yX2xpc3QpID4gMSkgPworCQkJCQkJbWFrZUJvb2xF eHByKE9SX0VYUFIsIG9yX2xpc3QsIGV4cHJfb3JpZy0+bG9jYXRpb24pIDoKKwkJCQkJCWxp bml0aWFsKG9yX2xpc3QpKTsKK30KIAogLyoKICAqIHRyYW5zZm9ybUV4cHIgLQpAQCAtMjEy LDcgKzUwOSw3IEBAIHRyYW5zZm9ybUV4cHJSZWN1cnNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwg Tm9kZSAqZXhwcikKIAkJCX0KIAogCQljYXNlIFRfQm9vbEV4cHI6Ci0JCQlyZXN1bHQgPSB0 cmFuc2Zvcm1Cb29sRXhwcihwc3RhdGUsIChCb29sRXhwciAqKSBleHByKTsKKwkJCXJlc3Vs dCA9IChOb2RlICopdHJhbnNmb3JtQm9vbEV4cHJPcihwc3RhdGUsIChCb29sRXhwciAqKSBl eHByKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVF9GdW5jQ2FsbDoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9ndWNfdGFibGVzLmMKaW5kZXggNzYwNWVmZjliOWQuLmE4ZTgwNTRlN2U2IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAtMTA0OCw2ICsxMDQ4LDE2IEBA IHN0cnVjdCBjb25maWdfYm9vbCBDb25maWd1cmVOYW1lc0Jvb2xbXSA9CiAJCXRydWUsCiAJ CU5VTEwsIE5VTEwsIE5VTEwKIAl9LAorCXsKKwkJeyJvcl90cmFuc2Zvcm1fbGltaXQiLCBQ R0NfVVNFUlNFVCwgUVVFUllfVFVOSU5HX09USEVSLAorCQkJZ2V0dGV4dF9ub29wKCJUcmFu c2Zvcm0gYSBzZXF1ZW5jZSBvZiBPUiBjbGF1c2VzIHRvIGFuIElOIGV4cHJlc3Npb24uIiks CisJCQlnZXR0ZXh0X25vb3AoIlRoZSBwbGFubmVyIHdpbGwgcmVwbGFjZSBjbGF1c2VzIGxp a2UgJ3g9YzEgT1IgeD1jMiAuLiIKKwkJCQkJCSAidG8gdGhlIGNsYXVzZSAneCBJTiAoYzEs YzIsLi4uKSciKQorCQl9LAorCQkmb3JfdHJhbnNmb3JtX2xpbWl0LAorCQlmYWxzZSwKKwkJ TlVMTCwgTlVMTCwgTlVMTAorCX0sCiAJewogCQkvKgogCQkgKiBOb3QgZm9yIGdlbmVyYWwg dXNlIC0tLSB1c2VkIGJ5IFNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT04gYW5kIFNFVApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX2V4cHIuaCBiL3NyYy9pbmNsdWRl L3BhcnNlci9wYXJzZV9leHByLmgKaW5kZXggN2QzOGNhNzVmN2IuLjdhNjk0M2MxMTZjIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfZXhwci5oCisrKyBiL3NyYy9p bmNsdWRlL3BhcnNlci9wYXJzZV9leHByLmgKQEAgLTE3LDYgKzE3LDcgQEAKIAogLyogR1VD IHBhcmFtZXRlcnMgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBib29sIFRyYW5zZm9ybV9udWxs X2VxdWFsczsKK2V4dGVybiBQR0RMTElNUE9SVCBib29sIG9yX3RyYW5zZm9ybV9saW1pdDsK IAogZXh0ZXJuIE5vZGUgKnRyYW5zZm9ybUV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2Rl ICpleHByLCBQYXJzZUV4cHJLaW5kIGV4cHJLaW5kKTsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0CmluZGV4IGFjZmQ5ZDFmNGY3Li4yOWMyYmM2 YTJiMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5k ZXgub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91 dApAQCAtMTg4Myw2ICsxODgzLDEyMSBAQCBTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQog ICAgIDEwCiAoMSByb3cpCiAKK1NFVCBvcl90cmFuc2Zvcm1fbGltaXQgPSBvbjsKK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gdGVuazEKKyAgV0hFUkUgdGhvdXNhbmQg PSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9IDMgT1IgdGVudGhvdXMgPSA0 Mik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEluZGV4IFNjYW4gdXNpbmcgdGVuazFfdGhvdXNfdGVudGhvdXMgb24gdGVuazEKKyAg IEluZGV4IENvbmQ6ICgodGhvdXNhbmQgPSA0MikgQU5EICh0ZW50aG91cyA9IEFOWSAoJ3sx LDMsNDJ9Jzo6aW50ZWdlcltdKSkpCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHRlbmsx CisgIFdIRVJFIHRob3VzYW5kID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMg PSAzIE9SIHRlbnRob3VzID0gNDIpOworIHVuaXF1ZTEgfCB1bmlxdWUyIHwgdHdvIHwgZm91 ciB8IHRlbiB8IHR3ZW50eSB8IGh1bmRyZWQgfCB0aG91c2FuZCB8IHR3b3Rob3VzYW5kIHwg Zml2ZXRob3VzIHwgdGVudGhvdXMgfCBvZGQgfCBldmVuIHwgc3RyaW5ndTEgfCBzdHJpbmd1 MiB8IHN0cmluZzQgCistLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLSst LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0t LS0KKyAgICAgIDQyIHwgICAgNTUzMCB8ICAgMCB8ICAgIDIgfCAgIDIgfCAgICAgIDIgfCAg ICAgIDQyIHwgICAgICAgNDIgfCAgICAgICAgICA0MiB8ICAgICAgICA0MiB8ICAgICAgIDQy IHwgIDg0IHwgICA4NSB8IFFCQUFBQSAgIHwgU0VJQUFBICAgfCBPT09PeHgKKygxIHJvdykK KworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAg V0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9IDk5 KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0 ZW5rMQorICAgICAgICAgUmVjaGVjayBDb25kOiAoKGh1bmRyZWQgPSA0MikgQU5EICh0aG91 c2FuZCA9IEFOWSAoJ3s0Miw5OX0nOjppbnRlZ2VyW10pKSkKKyAgICAgICAgIC0+ICBCaXRt YXBBbmQKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV9o dW5kcmVkCisgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaHVuZHJlZCA9IDQy KQorICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3Vz X3RlbnRob3VzCisgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQg PSBBTlkgKCd7NDIsOTl9Jzo6aW50ZWdlcltdKSkKKyg4IHJvd3MpCisKK1NFTEVDVCBjb3Vu dCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0g NDIgT1IgdGhvdXNhbmQgPSA5OSk7CisgY291bnQgCistLS0tLS0tCisgICAgMTAKKygxIHJv dykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEK KyAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9 IDMpIE9SIHRob3VzYW5kID0gNDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBCaXRtYXAgSGVhcCBTY2Fu IG9uIHRlbmsxCisgICAgICAgICBSZWNoZWNrIENvbmQ6ICgoKHRob3VzYW5kID0gNDIpIEFO RCAodGVudGhvdXMgPSBBTlkgKCd7MSwzfSc6OmludGVnZXJbXSkpKSBPUiAodGhvdXNhbmQg PSA0MSkpCisgICAgICAgICAtPiAgQml0bWFwT3IKKyAgICAgICAgICAgICAgIC0+ICBCaXRt YXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cworICAgICAgICAgICAgICAg ICAgICAgSW5kZXggQ29uZDogKCh0aG91c2FuZCA9IDQyKSBBTkQgKHRlbnRob3VzID0gQU5Z ICgnezEsM30nOjppbnRlZ2VyW10pKSkKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5k ZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cworICAgICAgICAgICAgICAgICAgICAg SW5kZXggQ29uZDogKHRob3VzYW5kID0gNDEpCisoOCByb3dzKQorCitTRUxFQ1QgY291bnQo KikgRlJPTSB0ZW5rMQorICBXSEVSRSB0aG91c2FuZCA9IDQyIEFORCAodGVudGhvdXMgPSAx IE9SIHRlbnRob3VzID0gMykgT1IgdGhvdXNhbmQgPSA0MTsKKyBjb3VudCAKKy0tLS0tLS0K KyAgICAxMAorKDEgcm93KQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQo KikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQy IE9SIHRob3VzYW5kID0gOTkgT1IgdGVudGhvdXMgPCAyKSBPUiB0aG91c2FuZCA9IDQxOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAt PiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5rMQorICAgICAgICAgUmVjaGVjayBDb25kOiAo KChodW5kcmVkID0gNDIpIEFORCAoKHRlbnRob3VzIDwgMikgT1IgKHRob3VzYW5kID0gQU5Z ICgnezQyLDk5fSc6OmludGVnZXJbXSkpKSkgT1IgKHRob3VzYW5kID0gNDEpKQorICAgICAg ICAgLT4gIEJpdG1hcE9yCisgICAgICAgICAgICAgICAtPiAgQml0bWFwQW5kCisgICAgICAg ICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfaHVuZHJlZAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGh1bmRyZWQgPSA0MikK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXBPcgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3Vz CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGVudGhv dXMgPCAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBT Y2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQgPSBBTlkgKCd7NDIsOTl9Jzo6aW50ZWdl cltdKSkKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90 aG91c190ZW50aG91cworICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHRob3Vz YW5kID0gNDEpCisoMTQgcm93cykKKworU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAg V0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9IDk5 IE9SIHRlbnRob3VzIDwgMikgT1IgdGhvdXNhbmQgPSA0MTsKKyBjb3VudCAKKy0tLS0tLS0K KyAgICAyMAorKDEgcm93KQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQo KikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQy IE9SIHRob3VzYW5kID0gNDEgT1IgdGhvdXNhbmQgPSA5OSBBTkQgdGVudGhvdXMgPSAyKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisg ICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5rMQorICAgICAgICAgUmVjaGVjayBDb25k OiAoKGh1bmRyZWQgPSA0MikgQU5EICgoKHRob3VzYW5kID0gOTkpIEFORCAodGVudGhvdXMg PSAyKSkgT1IgKHRob3VzYW5kID0gQU5ZICgnezQyLDQxfSc6OmludGVnZXJbXSkpKSkKKyAg ICAgICAgIC0+ICBCaXRtYXBBbmQKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXgg U2NhbiBvbiB0ZW5rMV9odW5kcmVkCisgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25k OiAoaHVuZHJlZCA9IDQyKQorICAgICAgICAgICAgICAgLT4gIEJpdG1hcE9yCisgICAgICAg ICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhvdXNfdGVu dGhvdXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICgodGhvdXNh bmQgPSA5OSkgQU5EICh0ZW50aG91cyA9IDIpKQorICAgICAgICAgICAgICAgICAgICAgLT4g IEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQgPSBBTlkgKCd7NDIsNDF9 Jzo6aW50ZWdlcltdKSkKKygxMSByb3dzKQorCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5r MQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5k ID0gNDEgT1IgdGhvdXNhbmQgPSA5OSBBTkQgdGVudGhvdXMgPSAyKTsKKyBjb3VudCAKKy0t LS0tLS0KKyAgICAxMAorKDEgcm93KQorCitSRVNFVCBvcl90cmFuc2Zvcm1fbGltaXQ7CiAt LQogLS0gQ2hlY2sgYmVoYXZpb3Igd2l0aCBkdXBsaWNhdGUgaW5kZXggY29sdW1uIGNvbnRl bnRzCiAtLQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ndWMub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ndWMub3V0CmluZGV4IDEyN2M5NTMyOTc2 Li5jMDUyYjExM2VlYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9n dWMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ3VjLm91dApAQCAtODYx LDcgKzg2MSw4IEBAIFNFTEVDVCBuYW1lIEZST00gdGFiX3NldHRpbmdzX2ZsYWdzCiAgICAg ICAgICAgIG5hbWUgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog IGRlZmF1bHRfc3RhdGlzdGljc190YXJnZXQKLSgxIHJvdykKKyBvcl90cmFuc2Zvcm1fbGlt aXQKKygyIHJvd3MpCiAKIC0tIFJ1bnRpbWUtY29tcHV0ZWQgR1VDcyBzaG91bGQgYmUgcGFy dCBvZiB0aGUgcHJlc2V0IGNhdGVnb3J5LgogU0VMRUNUIG5hbWUgRlJPTSB0YWJfc2V0dGlu Z3NfZmxhZ3MKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CmluZGV4IDQ0Njk1OWUz YzVmLi5kODY4NGU5NTllNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9qb2luLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CkBA IC00MjA3LDYgKzQyMDcsNTYgQEAgc2VsZWN0ICogZnJvbSB0ZW5rMSBhIGpvaW4gdGVuazEg YiBvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTIg PSA3KQogKDE5IHJvd3MpCiAKK1NFVCBvcl90cmFuc2Zvcm1fbGltaXQgPSBvbjsKK2V4cGxh aW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gdGVuazEgYSBqb2luIHRlbmsxIGIgb24K KyAgKGEudW5pcXVlMSA9IDEgYW5kIGIudW5pcXVlMSA9IDIpIG9yCisgICgoYS51bmlxdWUy ID0gMyBvciBhLnVuaXF1ZTIgPSA3KSBhbmQgYi5odW5kcmVkID0gNCk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKCgoYS51 bmlxdWUxID0gMSkgQU5EIChiLnVuaXF1ZTEgPSAyKSkgT1IgKChhLnVuaXF1ZTIgPSBBTlkg KCd7Myw3fSc6OmludGVnZXJbXSkpIEFORCAoYi5odW5kcmVkID0gNCkpKQorICAgLT4gIEJp dG1hcCBIZWFwIFNjYW4gb24gdGVuazEgYgorICAgICAgICAgUmVjaGVjayBDb25kOiAoKHVu aXF1ZTEgPSAyKSBPUiAoaHVuZHJlZCA9IDQpKQorICAgICAgICAgLT4gIEJpdG1hcE9yCisg ICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdW5pcXVlMQor ICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTEgPSAyKQorICAgICAg ICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX2h1bmRyZWQKKyAgICAg ICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChodW5kcmVkID0gNCkKKyAgIC0+ICBNYXRl cmlhbGl6ZQorICAgICAgICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVuazEgYQorICAg ICAgICAgICAgICAgUmVjaGVjayBDb25kOiAoKHVuaXF1ZTEgPSAxKSBPUiAodW5pcXVlMiA9 IEFOWSAoJ3szLDd9Jzo6aW50ZWdlcltdKSkpCisgICAgICAgICAgICAgICAtPiAgQml0bWFw T3IKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5r MV91bmlxdWUxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5p cXVlMSA9IDEpCisgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4g b24gdGVuazFfdW5pcXVlMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29u ZDogKHVuaXF1ZTIgPSBBTlkgKCd7Myw3fSc6OmludGVnZXJbXSkpCisoMTcgcm93cykKKwor ZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSB0ZW5rMSBhIGpvaW4gdGVuazEg YiBvbgorICAoYS51bmlxdWUxIDwgMjAgb3IgYS51bmlxdWUxID0gMyBvciBhLnVuaXF1ZTEg PSAxIGFuZCBiLnVuaXF1ZTEgPSAyKSBvcgorICAoKGEudW5pcXVlMiA9IDMgb3IgYS51bmlx dWUyID0gNykgYW5kIGIuaHVuZHJlZCA9IDQpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0 ZXI6ICgoYS51bmlxdWUxIDwgMjApIE9SICgoYS51bmlxdWUxID0gMSkgQU5EIChiLnVuaXF1 ZTEgPSAyKSkgT1IgKChhLnVuaXF1ZTIgPSBBTlkgKCd7Myw3fSc6OmludGVnZXJbXSkpIEFO RCAoYi5odW5kcmVkID0gNCkpIE9SIChhLnVuaXF1ZTEgPSAzKSkKKyAgIC0+ICBTZXEgU2Nh biBvbiB0ZW5rMSBiCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBCaXRtYXAg SGVhcCBTY2FuIG9uIHRlbmsxIGEKKyAgICAgICAgICAgICAgIFJlY2hlY2sgQ29uZDogKCh1 bmlxdWUxIDwgMjApIE9SICh1bmlxdWUxID0gMSkgT1IgKHVuaXF1ZTIgPSBBTlkgKCd7Myw3 fSc6OmludGVnZXJbXSkpIE9SICh1bmlxdWUxID0gMykpCisgICAgICAgICAgICAgICAtPiAg Qml0bWFwT3IKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBv biB0ZW5rMV91bmlxdWUxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25k OiAodW5pcXVlMSA8IDIwKQorICAgICAgICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRl eCBTY2FuIG9uIHRlbmsxX3VuaXF1ZTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElu ZGV4IENvbmQ6ICh1bmlxdWUxID0gMSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRt YXAgSW5kZXggU2NhbiBvbiB0ZW5rMV91bmlxdWUyCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBJbmRleCBDb25kOiAodW5pcXVlMiA9IEFOWSAoJ3szLDd9Jzo6aW50ZWdlcltdKSkK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV91 bmlxdWUxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVl MSA9IDMpCisoMTUgcm93cykKKworUkVTRVQgb3JfdHJhbnNmb3JtX2xpbWl0OwogLS0KIC0t IHRlc3QgcGxhY2VtZW50IG9mIG1vdmFibGUgcXVhbHMgaW4gYSBwYXJhbWV0ZXJpemVkIGpv aW4gdHJlZQogLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFy dGl0aW9uX3BydW5lLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9u X3BydW5lLm91dAppbmRleCA5YTRjNDhjMDU1Ni4uMTc4OWQzYzFmZDcgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX3BydW5lLm91dAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQKQEAgLTEwMSw2 ICsxMDEsMjggQEAgZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxwIHdoZXJl IGEgaXMgbm90IG51bGwgYW5kIChhID0gJ2EnIG9yIGEgPSAnYycKICAgICAgICAgIEZpbHRl cjogKChhIElTIE5PVCBOVUxMKSBBTkQgKChhID0gJ2EnOjpicGNoYXIpIE9SIChhID0gJ2Mn OjpicGNoYXIpKSkKICg1IHJvd3MpCiAKK1NFVCBvcl90cmFuc2Zvcm1fbGltaXQgPSBvbjsK K2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBhID0gJ2EnIG9y IGEgPSAnYyc7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBBcHBlbmQKKyAgIC0+ICBTZXEgU2NhbiBvbiBscF9hZCBscF8xCisgICAgICAgICBGaWx0 ZXI6IChhID0gQU5ZICgne2EsY30nOjpicGNoYXJbXSkpCisgICAtPiAgU2VxIFNjYW4gb24g bHBfYmMgbHBfMgorICAgICAgICAgRmlsdGVyOiAoYSA9IEFOWSAoJ3thLGN9Jzo6YnBjaGFy W10pKQorKDUgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxw IHdoZXJlIGEgaXMgbm90IG51bGwgYW5kIChhID0gJ2EnIG9yIGEgPSAnYycpOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBTZXEgU2NhbiBv biBscF9hZCBscF8xCisgICAgICAgICBGaWx0ZXI6ICgoYSBJUyBOT1QgTlVMTCkgQU5EIChh ID0gQU5ZICgne2EsY30nOjpicGNoYXJbXSkpKQorICAgLT4gIFNlcSBTY2FuIG9uIGxwX2Jj IGxwXzIKKyAgICAgICAgIEZpbHRlcjogKChhIElTIE5PVCBOVUxMKSBBTkQgKGEgPSBBTlkg KCd7YSxjfSc6OmJwY2hhcltdKSkpCisoNSByb3dzKQorCitSRVNFVCBvcl90cmFuc2Zvcm1f bGltaXQ7CiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSA8 PiAnZyc7CiAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjcxLDYgKzY5MywxNjMgQEAgZXhw bGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSAoYSA9IDEgYW5kIGEg PSAzKSBvciAoYSA+IDEgYW5kIGEgPQogICAgICAgICAgRmlsdGVyOiAoKChhID0gMSkgQU5E IChhID0gMykpIE9SICgoYSA+IDEpIEFORCAoYSA9IDE1KSkpCiAoMTEgcm93cykKIAorU0VU IG9yX3RyYW5zZm9ybV9saW1pdCA9IG9uOworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3Qg KiBmcm9tIHJscCB3aGVyZSBhID0gMSBvciBhID0gNzsKKyAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcmxwMiBybHAKKyAgIEZpbHRlcjogKGEgPSBB TlkgKCd7MSw3fSc6OmludGVnZXJbXSkpCisoMiByb3dzKQorCitleHBsYWluIChjb3N0cyBv ZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPSAxIG9yIGIgPSAnYWInOworICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEFwcGVuZAorICAgLT4gIFNlcSBTY2FuIG9uIHJscDEgcmxwXzEKKyAgICAgICAgIEZpbHRl cjogKChhID0gMSkgT1IgKChiKTo6dGV4dCA9ICdhYic6OnRleHQpKQorICAgLT4gIFNlcSBT Y2FuIG9uIHJscDIgcmxwXzIKKyAgICAgICAgIEZpbHRlcjogKChhID0gMSkgT1IgKChiKTo6 dGV4dCA9ICdhYic6OnRleHQpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDNhYmNkIHJscF8z CisgICAgICAgICBGaWx0ZXI6ICgoYSA9IDEpIE9SICgoYik6OnRleHQgPSAnYWInOjp0ZXh0 KSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHA0XzEgcmxwXzQKKyAgICAgICAgIEZpbHRlcjog KChhID0gMSkgT1IgKChiKTo6dGV4dCA9ICdhYic6OnRleHQpKQorICAgLT4gIFNlcSBTY2Fu IG9uIHJscDRfMiBybHBfNQorICAgICAgICAgRmlsdGVyOiAoKGEgPSAxKSBPUiAoKGIpOjp0 ZXh0ID0gJ2FiJzo6dGV4dCkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNF9kZWZhdWx0IHJs cF82CisgICAgICAgICBGaWx0ZXI6ICgoYSA9IDEpIE9SICgoYik6OnRleHQgPSAnYWInOjp0 ZXh0KSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHA1XzEgcmxwXzcKKyAgICAgICAgIEZpbHRl cjogKChhID0gMSkgT1IgKChiKTo6dGV4dCA9ICdhYic6OnRleHQpKQorICAgLT4gIFNlcSBT Y2FuIG9uIHJscDVfZGVmYXVsdCBybHBfOAorICAgICAgICAgRmlsdGVyOiAoKGEgPSAxKSBP UiAoKGIpOjp0ZXh0ID0gJ2FiJzo6dGV4dCkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwX2Rl ZmF1bHRfMTAgcmxwXzkKKyAgICAgICAgIEZpbHRlcjogKChhID0gMSkgT1IgKChiKTo6dGV4 dCA9ICdhYic6OnRleHQpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscF9kZWZhdWx0XzMwIHJs cF8xMAorICAgICAgICAgRmlsdGVyOiAoKGEgPSAxKSBPUiAoKGIpOjp0ZXh0ID0gJ2FiJzo6 dGV4dCkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwX2RlZmF1bHRfbnVsbCBybHBfMTEKKyAg ICAgICAgIEZpbHRlcjogKChhID0gMSkgT1IgKChiKTo6dGV4dCA9ICdhYic6OnRleHQpKQor ICAgLT4gIFNlcSBTY2FuIG9uIHJscF9kZWZhdWx0X2RlZmF1bHQgcmxwXzEyCisgICAgICAg ICBGaWx0ZXI6ICgoYSA9IDEpIE9SICgoYik6OnRleHQgPSAnYWInOjp0ZXh0KSkKKygyNSBy b3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEg PiAyMCBhbmQgYSA8IDI3OworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQXBw ZW5kCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNF8xIHJscF8xCisgICAgICAgICBGaWx0ZXI6 ICgoYSA+IDIwKSBBTkQgKGEgPCAyNykpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNF8yIHJs cF8yCisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDIwKSBBTkQgKGEgPCAyNykpCisoNSByb3dz KQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPSAy OTsKKyAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcmxwNF9kZWZhdWx0IHJscAorICAgRmlsdGVy OiAoYSA9IDI5KQorKDIgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBm cm9tIHJscCB3aGVyZSBhID49IDI5OworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHA0X2RlZmF1bHQgcmxw XzEKKyAgICAgICAgIEZpbHRlcjogKGEgPj0gMjkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxw NV8xIHJscF8yCisgICAgICAgICBGaWx0ZXI6IChhID49IDI5KQorICAgLT4gIFNlcSBTY2Fu IG9uIHJscDVfZGVmYXVsdCBybHBfMworICAgICAgICAgRmlsdGVyOiAoYSA+PSAyOSkKKyAg IC0+ICBTZXEgU2NhbiBvbiBybHBfZGVmYXVsdF8zMCBybHBfNAorICAgICAgICAgRmlsdGVy OiAoYSA+PSAyOSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHBfZGVmYXVsdF9kZWZhdWx0IHJs cF81CisgICAgICAgICBGaWx0ZXI6IChhID49IDI5KQorKDExIHJvd3MpCisKK2V4cGxhaW4g KGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA8IDEgb3IgKGEgPiAyMCBh bmQgYSA8IDI1KTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQXBwZW5kCisgICAtPiAgU2VxIFNjYW4gb24gcmxwMSBybHBf MQorICAgICAgICAgRmlsdGVyOiAoKGEgPCAxKSBPUiAoKGEgPiAyMCkgQU5EIChhIDwgMjUp KSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHA0XzEgcmxwXzIKKyAgICAgICAgIEZpbHRlcjog KChhIDwgMSkgT1IgKChhID4gMjApIEFORCAoYSA8IDI1KSkpCisoNSByb3dzKQorCitleHBs YWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPSAyMCBvciBhID0g NDA7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBBcHBlbmQKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHA0XzEgcmxwXzEKKyAgICAgICAgIEZp bHRlcjogKGEgPSBBTlkgKCd7MjAsNDB9Jzo6aW50ZWdlcltdKSkKKyAgIC0+ICBTZXEgU2Nh biBvbiBybHA1X2RlZmF1bHQgcmxwXzIKKyAgICAgICAgIEZpbHRlcjogKGEgPSBBTlkgKCd7 MjAsNDB9Jzo6aW50ZWdlcltdKSkKKyg1IHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikg c2VsZWN0ICogZnJvbSBybHAzIHdoZXJlIGEgPSAyMDsgICAvKiBlbXB0eSAqLworICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVz dWx0CisgICBPbmUtVGltZSBGaWx0ZXI6IGZhbHNlCisoMiByb3dzKQorCitleHBsYWluIChj b3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPiAxIGFuZCBhID0gMTA7CS8q IG9ubHkgZGVmYXVsdCAqLworICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHJscF9k ZWZhdWx0XzEwIHJscAorICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEgPSAxMCkpCisoMiBy b3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEg PiAxIGFuZCBhID49MTU7CS8qIHJscDMgb253YXJkcywgaW5jbHVkaW5nIGRlZmF1bHQgKi8K KyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAg IC0+ICBTZXEgU2NhbiBvbiBybHAzYWJjZCBybHBfMQorICAgICAgICAgRmlsdGVyOiAoKGEg PiAxKSBBTkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDNlZmdoIHJscF8y CisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDEpIEFORCAoYSA+PSAxNSkpCisgICAtPiAgU2Vx IFNjYW4gb24gcmxwM251bGx4eSBybHBfMworICAgICAgICAgRmlsdGVyOiAoKGEgPiAxKSBB TkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDNfZGVmYXVsdCBybHBfNAor ICAgICAgICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBT Y2FuIG9uIHJscDRfMSBybHBfNQorICAgICAgICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEg Pj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDRfMiBybHBfNgorICAgICAgICAgRmls dGVyOiAoKGEgPiAxKSBBTkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDRf ZGVmYXVsdCBybHBfNworICAgICAgICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEgPj0gMTUp KQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDVfMSBybHBfOAorICAgICAgICAgRmlsdGVyOiAo KGEgPiAxKSBBTkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDVfZGVmYXVs dCBybHBfOQorICAgICAgICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEgPj0gMTUpKQorICAg LT4gIFNlcSBTY2FuIG9uIHJscF9kZWZhdWx0XzMwIHJscF8xMAorICAgICAgICAgRmlsdGVy OiAoKGEgPiAxKSBBTkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscF9kZWZh dWx0X2RlZmF1bHQgcmxwXzExCisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDEpIEFORCAoYSA+ PSAxNSkpCisoMjMgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9t IHJscCB3aGVyZSBhID0gMSBhbmQgYSA9IDM7CS8qIGVtcHR5ICovCisgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyAg IE9uZS1UaW1lIEZpbHRlcjogZmFsc2UKKygyIHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9m Zikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgKGEgPSAxIGFuZCBhID0gMykgb3IgKGEgPiAx IGFuZCBhID0gMTUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAor ICAgLT4gIFNlcSBTY2FuIG9uIHJscDIgcmxwXzEKKyAgICAgICAgIEZpbHRlcjogKCgoYSA9 IDEpIEFORCAoYSA9IDMpKSBPUiAoKGEgPiAxKSBBTkQgKGEgPSAxNSkpKQorICAgLT4gIFNl cSBTY2FuIG9uIHJscDNhYmNkIHJscF8yCisgICAgICAgICBGaWx0ZXI6ICgoKGEgPSAxKSBB TkQgKGEgPSAzKSkgT1IgKChhID4gMSkgQU5EIChhID0gMTUpKSkKKyAgIC0+ICBTZXEgU2Nh biBvbiBybHAzZWZnaCBybHBfMworICAgICAgICAgRmlsdGVyOiAoKChhID0gMSkgQU5EIChh ID0gMykpIE9SICgoYSA+IDEpIEFORCAoYSA9IDE1KSkpCisgICAtPiAgU2VxIFNjYW4gb24g cmxwM251bGx4eSBybHBfNAorICAgICAgICAgRmlsdGVyOiAoKChhID0gMSkgQU5EIChhID0g MykpIE9SICgoYSA+IDEpIEFORCAoYSA9IDE1KSkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxw M19kZWZhdWx0IHJscF81CisgICAgICAgICBGaWx0ZXI6ICgoKGEgPSAxKSBBTkQgKGEgPSAz KSkgT1IgKChhID4gMSkgQU5EIChhID0gMTUpKSkKKygxMSByb3dzKQorCitSRVNFVCBvcl90 cmFuc2Zvcm1fbGltaXQ7CiAtLSBtdWx0aS1jb2x1bW4ga2V5cwogY3JlYXRlIHRhYmxlIG1j M3AgKGEgaW50LCBiIGludCwgYyBpbnQpIHBhcnRpdGlvbiBieSByYW5nZSAoYSwgYWJzKGIp LCBjKTsKIGNyZWF0ZSB0YWJsZSBtYzNwX2RlZmF1bHQgcGFydGl0aW9uIG9mIG1jM3AgZGVm YXVsdDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdGlkc2Nhbi5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RpZHNjYW4ub3V0CmluZGV4IGYxMzNi NWE0YWM3Li44YTMxZTJlNjcwZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC90aWRzY2FuLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RpZHNj YW4ub3V0CkBAIC01Niw2ICs1NiwyMyBAQCBTRUxFQ1QgY3RpZCwgKiBGUk9NIHRpZHNjYW4g V0hFUkUgY3RpZCA9ICcoMCwyKScgT1IgJygwLDEpJyA9IGN0aWQ7CiAgKDAsMikgfCAgMgog KDIgcm93cykKIAorU0VUIG9yX3RyYW5zZm9ybV9saW1pdCA9IG9uOworRVhQTEFJTiAoQ09T VFMgT0ZGKQorU0VMRUNUIGN0aWQsICogRlJPTSB0aWRzY2FuIFdIRVJFIGN0aWQgPSAnKDAs MiknIE9SICcoMCwxKScgPSBjdGlkOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRpZCBTY2FuIG9uIHRpZHNjYW4KKyAg IFRJRCBDb25kOiAoY3RpZCA9IEFOWSAoJ3siKDAsMikiLCIoMCwxKSJ9Jzo6dGlkW10pKQor KDIgcm93cykKKworU0VMRUNUIGN0aWQsICogRlJPTSB0aWRzY2FuIFdIRVJFIGN0aWQgPSAn KDAsMiknIE9SICcoMCwxKScgPSBjdGlkOworIGN0aWQgIHwgaWQgCistLS0tLS0tKy0tLS0K KyAoMCwxKSB8ICAxCisgKDAsMikgfCAgMgorKDIgcm93cykKKworUkVTRVQgb3JfdHJhbnNm b3JtX2xpbWl0OwogLS0gY3RpZCA9IFNjYWxhckFycmF5T3AgLSBpbXBsZW1lbnRlZCBhcyB0 aWRzY2FuCiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgY3RpZCwgKiBGUk9NIHRpZHNj YW4gV0hFUkUgY3RpZCA9IEFOWShBUlJBWVsnKDAsMSknLCAnKDAsMiknXTo6dGlkW10pOwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbCBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwKaW5kZXggZDQ5Y2U5ZjMwMDcu LmE3MDliMmMxYWJjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVf aW5kZXguc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwK QEAgLTczNyw2ICs3MzcsMzggQEAgU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKIFNFTEVD VCBjb3VudCgqKSBGUk9NIHRlbmsxCiAgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3Vz YW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5OSk7CiAKK1NFVCBvcl90cmFuc2Zvcm1fbGltaXQg PSBvbjsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gdGVuazEKKyAgV0hF UkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9IDMgT1Ig dGVudGhvdXMgPSA0Mik7CitTRUxFQ1QgKiBGUk9NIHRlbmsxCisgIFdIRVJFIHRob3VzYW5k ID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAzIE9SIHRlbnRob3VzID0g NDIpOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5r MQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5k ID0gOTkpOworU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9 IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9IDk5KTsKKworRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgdGhvdXNh bmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9IDMpIE9SIHRob3VzYW5k ID0gNDE7CitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSB0aG91c2FuZCA9 IDQyIEFORCAodGVudGhvdXMgPSAxIE9SIHRlbnRob3VzID0gMykgT1IgdGhvdXNhbmQgPSA0 MTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEK KyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9 IDk5IE9SIHRlbnRob3VzIDwgMikgT1IgdGhvdXNhbmQgPSA0MTsKK1NFTEVDVCBjb3VudCgq KSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIg T1IgdGhvdXNhbmQgPSA5OSBPUiB0ZW50aG91cyA8IDIpIE9SIHRob3VzYW5kID0gNDE7CisK K0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdI RVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA0MSBP UiB0aG91c2FuZCA9IDk5IEFORCB0ZW50aG91cyA9IDIpOworU0VMRUNUIGNvdW50KCopIEZS T00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0 aG91c2FuZCA9IDQxIE9SIHRob3VzYW5kID0gOTkgQU5EIHRlbnRob3VzID0gMik7CitSRVNF VCBvcl90cmFuc2Zvcm1fbGltaXQ7CisKIC0tCiAtLSBDaGVjayBiZWhhdmlvciB3aXRoIGR1 cGxpY2F0ZSBpbmRleCBjb2x1bW4gY29udGVudHMKIC0tCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9qb2luLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3Fs CmluZGV4IDY2ZGQwM2RkODhiLi5mNWRjZjhiOTBhNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvam9pbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbi5z cWwKQEAgLTEzOTYsNiArMTM5NiwxNiBAQCBleHBsYWluIChjb3N0cyBvZmYpCiBzZWxlY3Qg KiBmcm9tIHRlbmsxIGEgam9pbiB0ZW5rMSBiIG9uCiAgIChhLnVuaXF1ZTEgPSAxIGFuZCBi LnVuaXF1ZTEgPSAyKSBvcgogICAoKGEudW5pcXVlMiA9IDMgb3IgYS51bmlxdWUyID0gNykg YW5kIGIuaHVuZHJlZCA9IDQpOworU0VUIG9yX3RyYW5zZm9ybV9saW1pdCA9IG9uOworZXhw bGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSB0ZW5rMSBhIGpvaW4gdGVuazEgYiBv bgorICAoYS51bmlxdWUxID0gMSBhbmQgYi51bmlxdWUxID0gMikgb3IKKyAgKChhLnVuaXF1 ZTIgPSAzIG9yIGEudW5pcXVlMiA9IDcpIGFuZCBiLmh1bmRyZWQgPSA0KTsKK2V4cGxhaW4g KGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gdGVuazEgYSBqb2luIHRlbmsxIGIgb24KKyAg KGEudW5pcXVlMSA8IDIwIG9yIGEudW5pcXVlMSA9IDMgb3IgYS51bmlxdWUxID0gMSBhbmQg Yi51bmlxdWUxID0gMikgb3IKKyAgKChhLnVuaXF1ZTIgPSAzIG9yIGEudW5pcXVlMiA9IDcp IGFuZCBiLmh1bmRyZWQgPSA0KTsKK1JFU0VUIG9yX3RyYW5zZm9ybV9saW1pdDsKIAogLS0K IC0tIHRlc3QgcGxhY2VtZW50IG9mIG1vdmFibGUgcXVhbHMgaW4gYSBwYXJhbWV0ZXJpemVk IGpvaW4gdHJlZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9u X3BydW5lLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9wcnVuZS5zcWwK aW5kZXggN2JmMzkyMDgyN2YuLjg4NzA5OTEwNTkyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9wYXJ0aXRpb25fcHJ1bmUuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3BhcnRpdGlvbl9wcnVuZS5zcWwKQEAgLTIxLDYgKzIxLDEyIEBAIGV4cGxhaW4gKGNv c3RzIG9mZikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBhIGlzIG5vdCBudWxsOwogZXhwbGFp biAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgaXMgbnVsbDsKIGV4cGxh aW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBhID0gJ2EnIG9yIGEgPSAn Yyc7CiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSBpcyBu b3QgbnVsbCBhbmQgKGEgPSAnYScgb3IgYSA9ICdjJyk7CisKK1NFVCBvcl90cmFuc2Zvcm1f bGltaXQgPSBvbjsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBscCB3aGVy ZSBhID0gJ2EnIG9yIGEgPSAnYyc7CitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZy b20gbHAgd2hlcmUgYSBpcyBub3QgbnVsbCBhbmQgKGEgPSAnYScgb3IgYSA9ICdjJyk7CitS RVNFVCBvcl90cmFuc2Zvcm1fbGltaXQ7CisKIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0 ICogZnJvbSBscCB3aGVyZSBhIDw+ICdnJzsKIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0 ICogZnJvbSBscCB3aGVyZSBhIDw+ICdhJyBhbmQgYSA8PiAnZCc7CiBleHBsYWluIChjb3N0 cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSBub3QgaW4gKCdhJywgJ2QnKTsKQEAg LTk5LDYgKzEwNSwyMiBAQCBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxw IHdoZXJlIGEgPiAxIGFuZCBhID49MTU7CS8qIHJscDMgb253YXJkcywgaQogZXhwbGFpbiAo Y29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID0gMSBhbmQgYSA9IDM7CS8q IGVtcHR5ICovCiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJl IChhID0gMSBhbmQgYSA9IDMpIG9yIChhID4gMSBhbmQgYSA9IDE1KTsKIAorCitTRVQgb3Jf dHJhbnNmb3JtX2xpbWl0ID0gb247CitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZy b20gcmxwIHdoZXJlIGEgPSAxIG9yIGEgPSA3OworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxl Y3QgKiBmcm9tIHJscCB3aGVyZSBhID0gMSBvciBiID0gJ2FiJzsKK2V4cGxhaW4gKGNvc3Rz IG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA+IDIwIGFuZCBhIDwgMjc7CitleHBs YWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPSAyOTsKK2V4cGxh aW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA+PSAyOTsKK2V4cGxh aW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA8IDEgb3IgKGEgPiAy MCBhbmQgYSA8IDI1KTsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAg d2hlcmUgYSA9IDIwIG9yIGEgPSA0MDsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICog ZnJvbSBybHAzIHdoZXJlIGEgPSAyMDsgICAvKiBlbXB0eSAqLworZXhwbGFpbiAoY29zdHMg b2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID4gMSBhbmQgYSA9IDEwOwkvKiBvbmx5 IGRlZmF1bHQgKi8KK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hl cmUgYSA+IDEgYW5kIGEgPj0xNTsJLyogcmxwMyBvbndhcmRzLCBpbmNsdWRpbmcgZGVmYXVs dCAqLworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID0g MSBhbmQgYSA9IDM7CS8qIGVtcHR5ICovCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAq IGZyb20gcmxwIHdoZXJlIChhID0gMSBhbmQgYSA9IDMpIG9yIChhID4gMSBhbmQgYSA9IDE1 KTsKK1JFU0VUIG9yX3RyYW5zZm9ybV9saW1pdDsKKwogLS0gbXVsdGktY29sdW1uIGtleXMK IGNyZWF0ZSB0YWJsZSBtYzNwIChhIGludCwgYiBpbnQsIGMgaW50KSBwYXJ0aXRpb24gYnkg cmFuZ2UgKGEsIGFicyhiKSwgYyk7CiBjcmVhdGUgdGFibGUgbWMzcF9kZWZhdWx0IHBhcnRp dGlvbiBvZiBtYzNwIGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC90aWRzY2FuLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RpZHNjYW4uc3FsCmluZGV4 IDMxM2UwZmI5YjY3Li5jNzM1ZTIxOTU4OSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvdGlkc2Nhbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdGlkc2Nhbi5z cWwKQEAgLTIyLDYgKzIyLDEyIEBAIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCBjdGlk LCAqIEZST00gdGlkc2NhbiBXSEVSRSBjdGlkID0gJygwLDIpJyBPUiAnKDAsMSknID0gY3Rp ZDsKIFNFTEVDVCBjdGlkLCAqIEZST00gdGlkc2NhbiBXSEVSRSBjdGlkID0gJygwLDIpJyBP UiAnKDAsMSknID0gY3RpZDsKIAorU0VUIG9yX3RyYW5zZm9ybV9saW1pdCA9IG9uOworRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGN0aWQsICogRlJPTSB0aWRzY2FuIFdIRVJFIGN0 aWQgPSAnKDAsMiknIE9SICcoMCwxKScgPSBjdGlkOworU0VMRUNUIGN0aWQsICogRlJPTSB0 aWRzY2FuIFdIRVJFIGN0aWQgPSAnKDAsMiknIE9SICcoMCwxKScgPSBjdGlkOworUkVTRVQg b3JfdHJhbnNmb3JtX2xpbWl0OworCiAtLSBjdGlkID0gU2NhbGFyQXJyYXlPcCAtIGltcGxl bWVudGVkIGFzIHRpZHNjYW4KIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCBjdGlkLCAq IEZST00gdGlkc2NhbiBXSEVSRSBjdGlkID0gQU5ZKEFSUkFZWycoMCwxKScsICcoMCwyKSdd Ojp0aWRbXSk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDg3YzFhZWUzNzlm Li44Y2VhNmE2Yjg1MSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE2Mzgs NiArMTYzOCw3IEBAIE51bWVyaWNWYXIKIE9NX3VpbnQzMgogT1AKIE9TQVBlckdyb3VwU3Rh dGUKK09yQ2xhdXNlR3JvdXBFbnRyeQogT1NBUGVyUXVlcnlTdGF0ZQogT1NJbmZvCiBPU1NM Q2lwaGVyCi0tIAoyLjM0LjEKCg== --------------MBjRN210tAQXV9uZavXrL1Rl--