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 1rmRqf-007uTE-2N for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Mar 2024 05:17:18 +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 1rmRqc-009in6-Tf for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Mar 2024 05:17:15 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rmRqc-009imy-3i for pgsql-hackers@lists.postgresql.org; Tue, 19 Mar 2024 05:17:15 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rmRqV-005GRT-Ut for pgsql-hackers@postgresql.org; Tue, 19 Mar 2024 05:17:12 +0000 Received: from [172.30.8.38] (unknown [172.30.8.38]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: a.lepikhov@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 4EDE6E203BF; Tue, 19 Mar 2024 08:17:02 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1710825425; bh=HsebtCA8poqXGNqUGjMq/akTW1l3coyR4BTsRiD3H5k=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=R13QKdHO+mDsw5MmuhenpxAws85ZRnNnZzbuTx5kgHvnTyqkfyjZF/B+ZlqN8M/X9 iDl/mhUK/GxN/q8pWh0Ru5z4FVfshHlVMkaBzJt4LSpNoxNBhXwP/PeH2sQN6OvhhT YfkP3gqGtY6asyd5q7RVcpCrG/HmqOlwlrrlM3iAbtPYoSu0oGMvVQR6XjXiUP3Rms CcR52elRTxNGfEDZSLWDorswd9ibduQr8X7g7oUyMPyAFSQuGGj55RKH6f0vsexd4G 42r2ViBhV5KFsaYji2PDQbV7fOCfUwLOL1ir9Q+H5m4zI/1GQY4jvFdKFWO9GoXCMg B3saswF8Fjzeg== Content-Type: multipart/mixed; boundary="------------IiW4MTF0rMfRGDJ0qWmZ0xc1" Message-ID: <6d27d752-db0b-4cac-9843-6ba3dd7a1e94@postgrespro.ru> Date: Tue, 19 Mar 2024 12:16:59 +0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: POC, WIP: OR-clause support for indexes Content-Language: en-US To: Alexander Korotkov Cc: jian he , Alena Rybakina , Robert Haas , pgsql-hackers@postgresql.org, Peter Geoghegan , "Finnerty, Jim" , Marcos Pegoraro , teodor@sigaev.ru, Tomas Vondra , Peter Eisentraut , Ranier Vilela References: <567ED6CA.2040504@sigaev.ru> <54009ba5-4aea-4344-a30d-e3558a59e2a9@postgrespro.ru> <380e5683-cdfd-4220-ab9b-7cccb9d3e480@postgrespro.ru> <7389d0dd-05d5-41b7-a12d-2e73f939f851@postgrespro.ru> <74e3c8bc-dccd-45e5-ad2d-6a6e96fc5864@postgrespro.ru> From: Andrei Lepikhov Organization: Postgres Professional 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. --------------IiW4MTF0rMfRGDJ0qWmZ0xc1 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 14/3/2024 16:31, Alexander Korotkov wrote: > On Wed, Mar 13, 2024 at 2:16 PM Andrei Lepikhov > As you can see this case is not related to partial indexes.  Just no > index selective for the whole query.  However, splitting scan by the OR > qual lets use a combination of two selective indexes. I have rewritten the 0002-* patch according to your concern. A candidate and some thoughts are attached. As I see, we have a problem here: expanding each array and trying to apply an element to each index can result in a lengthy planning stage. Also, an index scan with the SAOP may potentially be more effective than with the list of OR clauses. Originally, the transformation's purpose was to reduce a query's complexity and the number of optimization ways to speed up planning and (sometimes) execution. Here, we reduce planning complexity only in the case of an array size larger than MAX_SAOP_ARRAY_SIZE. Maybe we can fall back to the previous version of the second patch, keeping in mind that someone who wants to get maximum profit from the BitmapOr scan of multiple indexes can just disable this optimization, enabling deep search of the most optimal scanning way? As a compromise solution, I propose adding one more option to the previous version: if an element doesn't fit any partial index, try to cover it with a plain index. In this case, we still do not guarantee the most optimal fit of elements to the set of indexes, but we speed up planning. Does that make sense? -- regards, Andrei Lepikhov Postgres Professional --------------IiW4MTF0rMfRGDJ0qWmZ0xc1 Content-Type: text/plain; charset=UTF-8; name="v22-1-0002-Teach-generate_bitmap_or_paths-to-build-BitmapOr-pat.patch" Content-Disposition: attachment; filename*0="v22-1-0002-Teach-generate_bitmap_or_paths-to-build-BitmapOr-"; filename*1="pat.patch" Content-Transfer-Encoding: base64 RnJvbSBkMmQ4OTQ0ZmM4M2NjZDA5MDY1M2MxYjE1NzAzYTJjM2JhMDk2ZmE5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmV5IFYuIExlcGlraG92IiA8YS5sZXBpa2hv dkBwb3N0Z3Jlc3Byby5ydT4KRGF0ZTogV2VkLCAxMyBNYXIgMjAyNCAxMjoyNjowMiArMDcw MApTdWJqZWN0OiBbUEFUQ0ggMi8yXSBUZWFjaCBnZW5lcmF0ZV9iaXRtYXBfb3JfcGF0aHMg dG8gYnVpbGQgQml0bWFwT3IgcGF0aHMKIG92ZXIgU0FPUCBjbGF1c2VzLgoKTGlrZXdpc2Ug T1IgY2xhdXNlcywgZGlzY292ZXIgU0FPUCBhcnJheSBhbmQgdHJ5IHRvIHNwbGl0IGl0cyBl bGVtZW50cwpiZXR3ZWVuIHNtYWxsZXIgc2l6ZWQgYXJyYXlzIHRvIGZpdCBhIHNldCBvZiBw YXJ0aWFsIGluZGV4ZXMuCi0tLQogZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sICAgICAgICAg ICAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRo LmMgICAgICB8ICA3NCArKysrKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3ByZWR0 ZXN0LmMgICAgICB8ICAzNyArKysKIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3Jlc3Ry aWN0aW5mby5jICB8ICAxMyArCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvb3B0aW1pemVyLmgg ICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3Jlc3RyaWN0aW5mby5o ICAgICAgIHwgICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4 Lm91dCB8ICAyNCArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zZWxlY3Qub3V0ICAg ICAgIHwgMjgwICsrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwv c2VsZWN0LnNxbCAgICAgICAgICAgIHwgIDgyICsrKysrKwogOSBmaWxlcyBjaGFuZ2VkLCA1 MDAgaW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IDJk ZTZhZTMwMWEuLjBkZjU2ZjQ0ZTMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcu c2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTU0ODUsNiArNTQ4NSw5 IEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtX3N5bmM8L3JlcGxh Y2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAgICAgICAgIFRoZSBncm91cGluZyB0 ZWNobmlxdWUgb2YgdGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyBiYXNlZCBvbiB0aGUgZXF1aXZh bGVuY2Ugb2YgdmFyaWFibGUgc2lkZXMuCiAgICAgICAgIE9uZSBzaWRlIG9mIHN1Y2ggYW4g ZXhwcmVzc2lvbiBtdXN0IGJlIGEgY29uc3RhbnQgY2xhdXNlLCBhbmQgdGhlIG90aGVyIG11 c3QgY29udGFpbiBhIHZhcmlhYmxlIGNsYXVzZS4KICAgICAgICAgVGhlIGRlZmF1bHQgaXMg PGxpdGVyYWw+b248L2xpdGVyYWw+LgorICAgICAgICBBbHNvLCBkdXJpbmcgQml0bWFwU2Nh biBwYXRocyBnZW5lcmF0aW9uIGl0IGVuYWJsZXMgYW5hbHlzaXMgb2YgZWxlbWVudHMKKyAg ICAgICAgb2YgSU4gb3IgQU5ZIGNvbnN0YW50IGFycmF5cyB0byBjb3ZlciBzdWNoIGNsYXVz ZSB3aXRoIEJpdG1hcE9yIHNldCBvZgorICAgICAgICBwYXJ0aWFsIGluZGV4IHNjYW5zLgog ICAgICAgICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRy eT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCmluZGV4IDMyYzZhOGJi ZGMuLjk2Njg1NDI5ZGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2luZHhwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGgu YwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIm9wdGltaXplci9wYXRocy5oIgogI2lu Y2x1ZGUgIm9wdGltaXplci9wcmVwLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3Jlc3RyaWN0 aW5mby5oIgorI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5 c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvc2VsZnVuY3MuaCIKIApAQCAtMTIyMCwxMSAr MTIyMSw2NiBAQCBidWlsZF9wYXRoc19mb3JfT1IoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCwKIAlyZXR1cm4gcmVzdWx0OwogfQogCisvKgorICogRXhwYW5kIFNBT1Ag bm9kZSB0byB1c2UgaXQgaW4gYml0bWFwc2NhbiBwYXRoIGJ1aWxkaW5nIHJvdXRpbmUuCisg KgorICogSWYgUmVzdHJpY3RJbmZvIGlzIGFuIE9SIGJvb2wgZXhwcmVzc2lvbiwgZXh0cmFj dCBlYWNoIFNBT1AgZnJvbSB0aGUgbGlzdCBvZgorICogYXJndW1lbnRzLCBpZiBwb3NzaWJs ZS4KKyAqIFdvcmtpbmcgam9pbnRseSB3aXRoIHRoZSBUcmFuc2Zvcm1PckV4cHJUb0FOWSBy b3V0aW5lLCBpdCBwcm92aWRlcyBhIHVzZXIKKyAqIHdpdGggc29tZSBzb3J0IG9mIGluZGVw ZW5kZW5jZSBvZiB0aGUgcXVlcnkgcGxhbiBmcm9tIHRoZSBhcHByb2FjaCB0byB3cml0aW5n CisgKiBhbHRlcm5hdGl2ZXMgZm9yIHRoZSBzYW1lIGVudGl0eSBpbiB0aGUgV0hFUkUgc2Vj dGlvbi4KKyAqLworc3RhdGljIExpc3QgKgorZXh0cmFjdF9zYW9wX29ycyhQbGFubmVySW5m byAqcm9vdCwgUmVzdHJpY3RJbmZvICpyaW5mbykKK3sKKwlMaXN0CQkgICAqb3JsaXN0ID0g TklMOworCUxpc3QJCSAgICpyZXN1bHQgPSBOSUw7CisJTGlzdENlbGwJICAgKmxjOworCisJ QXNzZXJ0KElzQShyaW5mbywgUmVzdHJpY3RJbmZvKSk7CisKKwlpZiAocmVzdHJpY3Rpb25f aXNfb3JfY2xhdXNlKHJpbmZvKSkKKwkJb3JsaXN0ID0gKChCb29sRXhwciAqKSByaW5mby0+ b3JjbGF1c2UpLT5hcmdzOworCisJaWYgKCFlbmFibGVfb3JfdHJhbnNmb3JtYXRpb24pCisJ CXJldHVybiBvcmxpc3Q7CisKKwlpZiAocmVzdHJpY3Rpb25faXNfc2FvcF9jbGF1c2Uocmlu Zm8pKQorCXsKKwkJcmVzdWx0ID0gdHJhbnNmb3JtX3Nhb3BfdG9fb3JzKHJvb3QsIHJpbmZv KTsKKwkJcmV0dXJuIChyZXN1bHQgPT0gTklMKSA/IGxpc3RfbWFrZTEocmluZm8pIDogcmVz dWx0OworCX0KKworCWZvcmVhY2gobGMsIG9ybGlzdCkKKwl7CisJCUV4cHIgKmV4cHIgPSAo RXhwciAqKSBsZmlyc3QobGMpOworCisJCWlmIChJc0EoZXhwciwgUmVzdHJpY3RJbmZvKSAm JiByZXN0cmljdGlvbl9pc19zYW9wX2NsYXVzZSgoUmVzdHJpY3RJbmZvICopIGV4cHIpKQor CQl7CisJCQlMaXN0ICpzdWJsaXN0OworCisJCQlzdWJsaXN0ID0gZXh0cmFjdF9zYW9wX29y cyhyb290LCAoUmVzdHJpY3RJbmZvICopIGxmaXJzdChsYykpOworCQkJaWYgKHN1Ymxpc3Qg IT0gTklMKQorCQkJeworCQkJCXJlc3VsdCA9IGxpc3RfY29uY2F0KHJlc3VsdCwgc3VibGlz dCk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIE5lZWQgdG8gcmV0dXJuIGV4cHIg dG8gdGhlIHJlc3VsdCBsaXN0ICovCisJCX0KKworCQlyZXN1bHQgPSBsYXBwZW5kKHJlc3Vs dCwgZXhwcik7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKwogLyoKICAqIGdlbmVyYXRl X2JpdG1hcF9vcl9wYXRocwotICoJCUxvb2sgdGhyb3VnaCB0aGUgbGlzdCBvZiBjbGF1c2Vz IHRvIGZpbmQgT1IgY2xhdXNlcywgYW5kIGdlbmVyYXRlCi0gKgkJYSBCaXRtYXBPclBhdGgg Zm9yIGVhY2ggb25lIHdlIGNhbiBoYW5kbGUgdGhhdCB3YXkuICBSZXR1cm4gYSBsaXN0Ci0g KgkJb2YgdGhlIGdlbmVyYXRlZCBCaXRtYXBPclBhdGhzLgorICoJCUxvb2sgdGhyb3VnaCB0 aGUgbGlzdCBvZiBjbGF1c2VzIHRvIGZpbmQgT1IgYW5kIFNBT1AgY2xhdXNlcywgYW5kCisg KgkJRWFjaCBzYW9wIGNsYXVzZSBhcmUgc3BsaXR0ZWQgdG8gYmUgY292ZXJlZCBieSBwYXJ0 aWFsIGluZGV4ZXMuCisgKgkJZ2VuZXJhdGUgYSBCaXRtYXBPclBhdGggZm9yIGVhY2ggb25l IHdlIGNhbiBoYW5kbGUgdGhhdCB3YXkuCisgKgkJUmV0dXJuIGEgbGlzdCBvZiB0aGUgZ2Vu ZXJhdGVkIEJpdG1hcE9yUGF0aHMuCiAgKgogICogb3RoZXJfY2xhdXNlcyBpcyBhIGxpc3Qg b2YgYWRkaXRpb25hbCBjbGF1c2VzIHRoYXQgY2FuIGJlIGFzc3VtZWQgdHJ1ZQogICogZm9y IHRoZSBwdXJwb3NlIG9mIGdlbmVyYXRpbmcgaW5kZXhxdWFscywgYnV0IGFyZSBub3QgdG8g YmUgc2VhcmNoZWQgZm9yCkBAIC0xMjQ3LDIwICsxMzAzLDI0IEBAIGdlbmVyYXRlX2JpdG1h cF9vcl9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCWZvcmVh Y2gobGMsIGNsYXVzZXMpCiAJewogCQlSZXN0cmljdEluZm8gKnJpbmZvID0gbGZpcnN0X25v ZGUoUmVzdHJpY3RJbmZvLCBsYyk7Ci0JCUxpc3QJICAgKnBhdGhsaXN0OworCQlMaXN0CSAg ICpwYXRobGlzdCA9IE5JTDsKIAkJUGF0aAkgICAqYml0bWFwcXVhbDsKIAkJTGlzdENlbGwg ICAqajsKKwkJTGlzdAkgICAqb3JsaXN0ID0gTklMOwogCi0JCS8qIElnbm9yZSBSZXN0cmlj dEluZm9zIHRoYXQgYXJlbid0IE9ScyAqLwotCQlpZiAoIXJlc3RyaWN0aW9uX2lzX29yX2Ns YXVzZShyaW5mbykpCisJCW9ybGlzdCA9IGV4dHJhY3Rfc2FvcF9vcnMocm9vdCwgcmluZm8p OworCQlpZiAob3JsaXN0ID09IE5JTCkKKwkJCS8qIElnbm9yZSBSZXN0cmljdEluZm8gdGhh dCBkb2Vzbid0IHByb3ZpZGUgT1JzICovCiAJCQljb250aW51ZTsKIAorCQlhbGxfY2xhdXNl cyA9IGxpc3RfZGVsZXRlKGFsbF9jbGF1c2VzLCByaW5mbyk7CisKIAkJLyoKIAkJICogV2Ug bXVzdCBiZSBhYmxlIHRvIG1hdGNoIGF0IGxlYXN0IG9uZSBpbmRleCB0byBlYWNoIG9mIHRo ZSBhcm1zIG9mCiAJCSAqIHRoZSBPUiwgZWxzZSB3ZSBjYW4ndCB1c2UgaXQuCiAJCSAqLwog CQlwYXRobGlzdCA9IE5JTDsKLQkJZm9yZWFjaChqLCAoKEJvb2xFeHByICopIHJpbmZvLT5v cmNsYXVzZSktPmFyZ3MpCisJCWZvcmVhY2goaiwgb3JsaXN0KQogCQl7CiAJCQlOb2RlCSAg ICpvcmFyZyA9IChOb2RlICopIGxmaXJzdChqKTsKIAkJCUxpc3QJICAgKmluZGxpc3Q7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wcmVkdGVzdC5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcHJlZHRlc3QuYwppbmRleCBjMzdiNDE2ZTI0Li5l MTU5NDkzYTIxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wcmVk dGVzdC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3ByZWR0ZXN0LmMKQEAg LTExMSw2ICsxMTEsNDMgQEAgc3RhdGljIGJvb2wgb3BlcmF0b3Jfc2FtZV9zdWJleHByc19s b29rdXAoT2lkIHByZWRfb3AsIE9pZCBjbGF1c2Vfb3AsCiBzdGF0aWMgT2lkCWdldF9idHJl ZV90ZXN0X29wKE9pZCBwcmVkX29wLCBPaWQgY2xhdXNlX29wLCBib29sIHJlZnV0ZV9pdCk7 CiBzdGF0aWMgdm9pZCBJbnZhbGlkYXRlT3ByUHJvb2ZDYWNoZUNhbGxCYWNrKERhdHVtIGFy ZywgaW50IGNhY2hlaWQsIHVpbnQzMiBoYXNodmFsdWUpOwogCisvKgorICogRXhwYW5kIGEg U0FPUCBvcGVyYXRpb24gaW50byB0aGUgbGlzdCBvZiBPUiBleHByZXNzaW9ucworICovCitM aXN0ICoKK3RyYW5zZm9ybV9zYW9wX3RvX29ycyhQbGFubmVySW5mbyAqcm9vdCwgUmVzdHJp Y3RJbmZvICpyaW5mbykKK3sKKwlQcmVkSXRlckluZm9EYXRhCWNsYXVzZV9pbmZvOworCUxp c3QJCQkgICAqb3JsaXN0ID0gTklMOworCU5vZGUJCQkgICAqc2FvcCA9IChOb2RlICopIHJp bmZvLT5jbGF1c2U7CisKKwlBc3NlcnQoSXNBKHNhb3AsIFNjYWxhckFycmF5T3BFeHByKSk7 CisKKwlpZiAocHJlZGljYXRlX2NsYXNzaWZ5KHNhb3AsICZjbGF1c2VfaW5mbykgIT0gQ0xB U1NfT1IpCisJCXJldHVybiBOSUw7CisKKwlpdGVyYXRlX2JlZ2luKHBpdGVtLCBzYW9wLCBj bGF1c2VfaW5mbykKKwl7CisJCVJlc3RyaWN0SW5mbyAgICpyaW5mbzE7CisKKwkJLyogUHJl ZGljYXRlIGlzIGZvdW5kLiBBZGQgdGhlIGVsZW0gdG8gdGhlIHNhb3AgY2xhdXNlICovCisJ CUFzc2VydChJc0EocGl0ZW0sIE9wRXhwcikpOworCisJCS8qIEV4dHJhY3QgY29uc3RhbnQg ZnJvbSB0aGUgZXhwcmVzc2lvbiAqLworCQlyaW5mbzEgPSBtYWtlX3Jlc3RyaWN0aW5mbyhy b290LCAoRXhwciAqKSBjb3B5T2JqZWN0KHBpdGVtKSwKKwkJCQkJCQkJICAgcmluZm8tPmlz X3B1c2hlZF9kb3duLAorCQkJCQkJCQkgICByaW5mby0+aGFzX2Nsb25lLCByaW5mby0+aXNf Y2xvbmUsCisJCQkJCQkJCSAgIHJpbmZvLT5wc2V1ZG9jb25zdGFudCwKKwkJCQkJCQkJICAg cmluZm8tPnNlY3VyaXR5X2xldmVsLAorCQkJCQkJCQkgICByaW5mby0+cmVxdWlyZWRfcmVs aWRzLAorCQkJCQkJCQkgICByaW5mby0+aW5jb21wYXRpYmxlX3JlbGlkcywKKwkJCQkJCQkJ ICAgcmluZm8tPm91dGVyX3JlbGlkcyk7CisJCW9ybGlzdCA9IGxhcHBlbmQob3JsaXN0LCBy aW5mbzEpOworCX0KKwlpdGVyYXRlX2VuZChjbGF1c2VfaW5mbyk7CisKKwlyZXR1cm4gb3Js aXN0OworfQogCiAvKgogICogcHJlZGljYXRlX2ltcGxpZWRfYnkKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL3Jlc3RyaWN0aW5mby5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcmVzdHJpY3RpbmZvLmMKaW5kZXggMGI0MDZlOTMzNC4uMWRhZDFk YzY1NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVzdHJpY3Rp bmZvLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVzdHJpY3RpbmZvLmMK QEAgLTQyMSw2ICs0MjEsMTkgQEAgcmVzdHJpY3Rpb25faXNfb3JfY2xhdXNlKFJlc3RyaWN0 SW5mbyAqcmVzdHJpY3RpbmZvKQogCQlyZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wKK3Jlc3Ry aWN0aW9uX2lzX3Nhb3BfY2xhdXNlKFJlc3RyaWN0SW5mbyAqcmVzdHJpY3RpbmZvKQorewor CWlmIChyZXN0cmljdGluZm8tPmNsYXVzZSAmJiBJc0EocmVzdHJpY3RpbmZvLT5jbGF1c2Us IFNjYWxhckFycmF5T3BFeHByKSkKKwl7CisJCVNjYWxhckFycmF5T3BFeHByICpzYW9wID0g KFNjYWxhckFycmF5T3BFeHByICopIHJlc3RyaWN0aW5mby0+Y2xhdXNlOworCisJCWlmIChz YW9wLT51c2VPcikKKwkJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisK IC8qCiAgKiByZXN0cmljdGlvbl9pc19zZWN1cmVseV9wcm9tb3RhYmxlCiAgKgpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL29wdGltaXplci5oIGIvc3JjL2luY2x1ZGUv b3B0aW1pemVyL29wdGltaXplci5oCmluZGV4IDMyZWVjMGIyN2MuLjQ5MjM2OGQ5ZTIgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9vcHRpbWl6ZXIuaAorKysgYi9zcmMv aW5jbHVkZS9vcHRpbWl6ZXIvb3B0aW1pemVyLmgKQEAgLTIzLDYgKzIzLDcgQEAKICNkZWZp bmUgT1BUSU1JWkVSX0gKIAogI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKKyNpbmNs dWRlICJvcHRpbWl6ZXIvcmVzdHJpY3RpbmZvLmgiCiAKIC8qCiAgKiBXZSBkb24ndCB3YW50 IHRvIGluY2x1ZGUgbm9kZXMvcGF0aG5vZGVzLmggaGVyZSwgYmVjYXVzZSBub24tcGxhbm5l cgpAQCAtMTYxLDYgKzE2Miw4IEBAIGV4dGVybiBMaXN0ICpleHBhbmRfZnVuY3Rpb25fYXJn dW1lbnRzKExpc3QgKmFyZ3MsIGJvb2wgaW5jbHVkZV9vdXRfYXJndW1lbnRzLAogCiAvKiBp biB1dGlsL3ByZWR0ZXN0LmM6ICovCiAKKworZXh0ZXJuIExpc3QgKnRyYW5zZm9ybV9zYW9w X3RvX29ycyhQbGFubmVySW5mbyAqcm9vdCwgUmVzdHJpY3RJbmZvICpyaW5mbyk7CiBleHRl cm4gYm9vbCBwcmVkaWNhdGVfaW1wbGllZF9ieShMaXN0ICpwcmVkaWNhdGVfbGlzdCwgTGlz dCAqY2xhdXNlX2xpc3QsCiAJCQkJCQkJCSBib29sIHdlYWspOwogZXh0ZXJuIGJvb2wgcHJl ZGljYXRlX3JlZnV0ZWRfYnkoTGlzdCAqcHJlZGljYXRlX2xpc3QsIExpc3QgKmNsYXVzZV9s aXN0LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3Jlc3RyaWN0aW5mby5o IGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3Jlc3RyaWN0aW5mby5oCmluZGV4IDFiNDJjODMy YzUuLjJjZDVmYmY5NDMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9yZXN0 cmljdGluZm8uaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcmVzdHJpY3RpbmZvLmgK QEAgLTM0LDYgKzM0LDcgQEAgZXh0ZXJuIFJlc3RyaWN0SW5mbyAqbWFrZV9yZXN0cmljdGlu Zm8oUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkgICBSZWxpZHMgb3V0ZXJfcmVsaWRz KTsKIGV4dGVybiBSZXN0cmljdEluZm8gKmNvbW11dGVfcmVzdHJpY3RpbmZvKFJlc3RyaWN0 SW5mbyAqcmluZm8sIE9pZCBjb21tX29wKTsKIGV4dGVybiBib29sIHJlc3RyaWN0aW9uX2lz X29yX2NsYXVzZShSZXN0cmljdEluZm8gKnJlc3RyaWN0aW5mbyk7CitleHRlcm4gYm9vbCBy ZXN0cmljdGlvbl9pc19zYW9wX2NsYXVzZShSZXN0cmljdEluZm8gKnJlc3RyaWN0aW5mbyk7 CiBleHRlcm4gYm9vbCByZXN0cmljdGlvbl9pc19zZWN1cmVseV9wcm9tb3RhYmxlKFJlc3Ry aWN0SW5mbyAqcmVzdHJpY3RpbmZvLAogCQkJCQkJCQkJCQkgICBSZWxPcHRJbmZvICpyZWwp OwogZXh0ZXJuIExpc3QgKmdldF9hY3R1YWxfY2xhdXNlcyhMaXN0ICpyZXN0cmljdGluZm9f bGlzdCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9p bmRleC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQK aW5kZXggNjZlOWEzOTVlMC4uM2Y1N2Q1Yzk2OCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dApAQCAtMTk1MiwyMyArMTk1MiwyNSBAQCBTRUxF Q1QgY291bnQoKikgRlJPTSB0ZW5rMQogRVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUIGNv dW50KCopIEZST00gdGVuazEKICAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQg PSA0MiBPUiB0aG91c2FuZCA9IDk5IE9SIHRlbnRob3VzIDwgMikgT1IgdGhvdXNhbmQgPSA0 MTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICBBZ2dyZWdhdGUKICAgIC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9u IHRlbmsxCi0gICAgICAgICBSZWNoZWNrIENvbmQ6ICgoKGh1bmRyZWQgPSA0MikgQU5EICgo dGhvdXNhbmQgPSBBTlkgKCd7NDIsOTl9Jzo6aW50ZWdlcltdKSkgT1IgKHRlbnRob3VzIDwg MikpKSBPUiAodGhvdXNhbmQgPSA0MSkpCisgICAgICAgICBSZWNoZWNrIENvbmQ6ICgoKGh1 bmRyZWQgPSA0MikgQU5EICgodGhvdXNhbmQgPSA0MikgT1IgKHRob3VzYW5kID0gOTkpIE9S ICh0ZW50aG91cyA8IDIpKSkgT1IgKHRob3VzYW5kID0gNDEpKQogICAgICAgICAgLT4gIEJp dG1hcE9yCiAgICAgICAgICAgICAgICAtPiAgQml0bWFwQW5kCiAgICAgICAgICAgICAgICAg ICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfaHVuZHJlZAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGh1bmRyZWQgPSA0MikKICAgICAgICAg ICAgICAgICAgICAgIC0+ICBCaXRtYXBPcgogICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQgPSBBTlkg KCd7NDIsOTl9Jzo6aW50ZWdlcltdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEluZGV4IENvbmQ6ICh0aG91c2FuZCA9IDQyKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQg PSA5OSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2Nh biBvbiB0ZW5rMV90aG91c190ZW50aG91cwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSW5kZXggQ29uZDogKHRlbnRob3VzIDwgMikKICAgICAgICAgICAgICAgIC0+ICBC aXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cwogICAgICAgICAgICAg ICAgICAgICAgSW5kZXggQ29uZDogKHRob3VzYW5kID0gNDEpCi0oMTQgcm93cykKKygxNiBy b3dzKQogCiBTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQogICBXSEVSRSBodW5kcmVkID0g NDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkgT1IgdGVudGhvdXMgPCAy KSBPUiB0aG91c2FuZCA9IDQxOwpAQCAtMTk4MCwyMCArMTk4MiwyMiBAQCBTRUxFQ1QgY291 bnQoKikgRlJPTSB0ZW5rMQogRVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUIGNvdW50KCop IEZST00gdGVuazEKICAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBP UiB0aG91c2FuZCA9IDQxIE9SIHRob3VzYW5kID0gOTkgQU5EIHRlbnRob3VzID0gMik7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogIEFnZ3JlZ2F0ZQogICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24g dGVuazEKLSAgICAgICAgIFJlY2hlY2sgQ29uZDogKChodW5kcmVkID0gNDIpIEFORCAoKHRo b3VzYW5kID0gQU5ZICgnezQyLDQxfSc6OmludGVnZXJbXSkpIE9SICgodGhvdXNhbmQgPSA5 OSkgQU5EICh0ZW50aG91cyA9IDIpKSkpCisgICAgICAgICBSZWNoZWNrIENvbmQ6ICgoaHVu ZHJlZCA9IDQyKSBBTkQgKCh0aG91c2FuZCA9IDQyKSBPUiAodGhvdXNhbmQgPSA0MSkgT1Ig KCh0aG91c2FuZCA9IDk5KSBBTkQgKHRlbnRob3VzID0gMikpKSkKICAgICAgICAgIC0+ICBC aXRtYXBBbmQKICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5r MV9odW5kcmVkCiAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaHVuZHJlZCA9 IDQyKQogICAgICAgICAgICAgICAgLT4gIEJpdG1hcE9yCiAgICAgICAgICAgICAgICAgICAg ICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhvdXNfdGVudGhvdXMKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh0aG91c2FuZCA9IEFOWSAoJ3s0 Miw0MX0nOjppbnRlZ2VyW10pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgg Q29uZDogKHRob3VzYW5kID0gNDIpCisgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFw IEluZGV4IFNjYW4gb24gdGVuazFfdGhvdXNfdGVudGhvdXMKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIEluZGV4IENvbmQ6ICh0aG91c2FuZCA9IDQxKQogICAgICAgICAgICAgICAg ICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoKHRob3VzYW5kID0gOTkp IEFORCAodGVudGhvdXMgPSAyKSkKLSgxMSByb3dzKQorKDEzIHJvd3MpCiAKIFNFTEVDVCBj b3VudCgqKSBGUk9NIHRlbmsxCiAgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5k ID0gNDIgT1IgdGhvdXNhbmQgPSA0MSBPUiB0aG91c2FuZCA9IDk5IEFORCB0ZW50aG91cyA9 IDIpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zZWxlY3Qub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zZWxlY3Qub3V0CmluZGV4IDMzYTZkY2Vi MGUuLmQwMzUyYTA1NGMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv c2VsZWN0Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NlbGVjdC5vdXQK QEAgLTkwNyw2ICs5MDcsMjg2IEBAIHNlbGVjdCB1bmlxdWUxLCB1bmlxdWUyIGZyb20gb25l azIKICAgICAgICAwIHwgICAgIDk5OAogKDIgcm93cykKIAorU0VUIGVuYWJsZV9zZXFzY2Fu IFRPIG9mZjsKK1NFVCBlbmFibGVfaW5kZXhzY2FuIFRPIG9mZjsgLS0gT25seSBCaXRtYXBT Y2FuIGlzIGEgc3ViamVjdCBtYXR0ZXIgaGVyZQorU0VUIGVuYWJsZV9vcl90cmFuc2Zvcm1h dGlvbiA9ICdvZmYnOworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZS T00gb25lazIgV0hFUkUgc3RyaW5ndTEgPSAnQScgT1Igc3RyaW5ndTEgPSAnSic7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAg IC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIG9uZWsyCisgICAgICAgICBSZWNoZWNrIENvbmQ6 ICgoc3RyaW5ndTEgPCAnQic6Om5hbWUpIE9SIChzdHJpbmd1MSA9ICdKJzo6bmFtZSkpCisg ICAgICAgICBGaWx0ZXI6ICgoc3RyaW5ndTEgPSAnQSc6Om5hbWUpIE9SIChzdHJpbmd1MSA9 ICdKJzo6bmFtZSkpCisgICAgICAgICAtPiAgQml0bWFwT3IKKyAgICAgICAgICAgICAgIC0+ ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBvbmVrMl91Ml9wcnRsCisgICAgICAgICAgICAgICAt PiAgQml0bWFwIEluZGV4IFNjYW4gb24gb25lazJfc3R1MV9wcnRsCisgICAgICAgICAgICAg ICAgICAgICBJbmRleCBDb25kOiAoc3RyaW5ndTEgPSAnSic6Om5hbWUpCisoOCByb3dzKQor CistLSBXaXRob3V0IHRoZSB0cmFuc2Zvcm1hdGlvbiBvbmx5IHNlcXNjYW4gcG9zc2libGUg aGVyZQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIHVuaXF1ZTIsIHN0cmluZ3UxIEZS T00gb25lazIKK1dIRVJFIHVuaXF1ZTIgPCAxIEFORCBzdHJpbmd1MSBJTiAoJ0EnLCdKJykg QU5EIHN0cmluZ3UxIDwgJ1onOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEg U2NhbiBvbiBvbmVrMgorICAgRmlsdGVyOiAoKHVuaXF1ZTIgPCAxKSBBTkQgKHN0cmluZ3Ux ID0gQU5ZICgne0EsSn0nOjpuYW1lW10pKSBBTkQgKHN0cmluZ3UxIDwgJ1onOjpuYW1lKSkK KygyIHJvd3MpCisKKy0tIFVzZSBwYXJ0aWFsIGluZGV4ZXMKK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIG9uZWsyCitXSEVSRSBzdHJpbmd1MSBJTiAoJ0In LCdKJykgQU5EIChzdHJpbmd1MSA9ICdBJyBPUiB1bmlxdWUxID0gMSk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgQml0 bWFwIEhlYXAgU2NhbiBvbiBvbmVrMgorICAgICAgICAgUmVjaGVjayBDb25kOiAoKHN0cmlu Z3UxIDwgJ0InOjpuYW1lKSBPUiAodW5pcXVlMSA9IDEpKQorICAgICAgICAgRmlsdGVyOiAo KHN0cmluZ3UxID0gQU5ZICgne0IsSn0nOjpuYW1lW10pKSBBTkQgKChzdHJpbmd1MSA9ICdB Jzo6bmFtZSkgT1IgKHVuaXF1ZTEgPSAxKSkpCisgICAgICAgICAtPiAgQml0bWFwT3IKKyAg ICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBvbmVrMl91Ml9wcnRsCisg ICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gb25lazJfdTFfcHJ0bAor ICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTEgPSAxKQorKDggcm93 cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIHVuaXF1ZTIsIHN0cmluZ3UxIEZS T00gb25lazIKK1dIRVJFIHVuaXF1ZTEgPCAxIE9SIChzdHJpbmd1MSA9ICdBJyBPUiBzdHJp bmd1MSA9ICdKJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhlYXAgU2NhbiBvbiBvbmVrMgor ICAgUmVjaGVjayBDb25kOiAoKHVuaXF1ZTEgPCAxKSBPUiAoc3RyaW5ndTEgPCAnQic6Om5h bWUpIE9SIChzdHJpbmd1MSA9ICdKJzo6bmFtZSkpCisgICBGaWx0ZXI6ICgodW5pcXVlMSA8 IDEpIE9SIChzdHJpbmd1MSA9ICdBJzo6bmFtZSkgT1IgKHN0cmluZ3UxID0gJ0onOjpuYW1l KSkKKyAgIC0+ICBCaXRtYXBPcgorICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9u IG9uZWsyX3UxX3BydGwKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUxIDwg MSkKKyAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBvbmVrMl91Ml9wcnRsCisg ICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gb25lazJfc3R1MV9wcnRsCisgICAg ICAgICAgICAgICBJbmRleCBDb25kOiAoc3RyaW5ndTEgPSAnSic6Om5hbWUpCisoOSByb3dz KQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgdW5pcXVlMiwgc3RyaW5ndTEgRlJP TSBvbmVrMgorV0hFUkUgdW5pcXVlMSA9IDEgT1IgdW5pcXVlMiA9IFBJKCk6OmludGVnZXI7 CisgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBv bmVrMgorICAgRmlsdGVyOiAoKHVuaXF1ZTEgPSAxKSBPUiAodW5pcXVlMiA9IDMpKQorKDIg cm93cykKKworUkVTRVQgZW5hYmxlX29yX3RyYW5zZm9ybWF0aW9uOworLS0gT1IgPC0+IEFO WSB0cmFuc2Zvcm1hdGlvbiBtdXN0IGZpbmQgYSBwYXRoIHdpdGggcGFydGlhbCBpbmRleGVz IHNjYW4KKy0tIHJlZ2FyZGxlc3MgdGhlIGNsYXVzZSByZXByZXNlbnRhdGlvbi4KK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIG9uZWsyIFdIRVJFIHN0cmlu Z3UxID0gJ0EnIE9SIHN0cmluZ3UxID0gJ0onOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgQml0bWFwIEhlYXAgU2Nh biBvbiBvbmVrMgorICAgICAgICAgUmVjaGVjayBDb25kOiAoKHN0cmluZ3UxIDwgJ0InOjpu YW1lKSBPUiAoc3RyaW5ndTEgPSAnSic6Om5hbWUpKQorICAgICAgICAgRmlsdGVyOiAoc3Ry aW5ndTEgPSBBTlkgKCd7QSxKfSc6Om5hbWVbXSkpCisgICAgICAgICAtPiAgQml0bWFwT3IK KyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBvbmVrMl91Ml9wcnRs CisgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gb25lazJfc3R1MV9w cnRsCisgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoc3RyaW5ndTEgPSAnSic6 Om5hbWUpCisoOCByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQo KikgRlJPTSBvbmVrMiBXSEVSRSBzdHJpbmd1MSBJTiAoJ0EnLCdKJyk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBC aXRtYXAgSGVhcCBTY2FuIG9uIG9uZWsyCisgICAgICAgICBSZWNoZWNrIENvbmQ6ICgoc3Ry aW5ndTEgPCAnQic6Om5hbWUpIE9SIChzdHJpbmd1MSA9ICdKJzo6bmFtZSkpCisgICAgICAg ICBGaWx0ZXI6IChzdHJpbmd1MSA9IEFOWSAoJ3tBLEp9Jzo6bmFtZVtdKSkKKyAgICAgICAg IC0+ICBCaXRtYXBPcgorICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9u IG9uZWsyX3UyX3BydGwKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBv biBvbmVrMl9zdHUxX3BydGwKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChz dHJpbmd1MSA9ICdKJzo6bmFtZSkKKyg4IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikK K1NFTEVDVCBjb3VudCgqKSBGUk9NIG9uZWsyIFdIRVJFIHN0cmluZ3UxID0gQU5ZICgne0Es Sn0nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFn Z3JlZ2F0ZQorICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gb25lazIKKyAgICAgICAgIFJl Y2hlY2sgQ29uZDogKChzdHJpbmd1MSA8ICdCJzo6bmFtZSkgT1IgKHN0cmluZ3UxID0gJ0on OjpuYW1lKSkKKyAgICAgICAgIEZpbHRlcjogKHN0cmluZ3UxID0gQU5ZICgne0EsSn0nOjpu YW1lW10pKQorICAgICAgICAgLT4gIEJpdG1hcE9yCisgICAgICAgICAgICAgICAtPiAgQml0 bWFwIEluZGV4IFNjYW4gb24gb25lazJfdTJfcHJ0bAorICAgICAgICAgICAgICAgLT4gIEJp dG1hcCBJbmRleCBTY2FuIG9uIG9uZWsyX3N0dTFfcHJ0bAorICAgICAgICAgICAgICAgICAg ICAgSW5kZXggQ29uZDogKHN0cmluZ3UxID0gJ0onOjpuYW1lKQorKDggcm93cykKKworRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gb25lazIgV0hFUkUgc3Ry aW5ndTEgSU4gKCdBJykgT1Igc3RyaW5ndTEgSU4gKCdKJyk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBCaXRtYXAg SGVhcCBTY2FuIG9uIG9uZWsyCisgICAgICAgICBSZWNoZWNrIENvbmQ6ICgoc3RyaW5ndTEg PCAnQic6Om5hbWUpIE9SIChzdHJpbmd1MSA9ICdKJzo6bmFtZSkpCisgICAgICAgICBGaWx0 ZXI6IChzdHJpbmd1MSA9IEFOWSAoJ3tBLEp9Jzo6bmFtZVtdKSkKKyAgICAgICAgIC0+ICBC aXRtYXBPcgorICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIG9uZWsy X3UyX3BydGwKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBvbmVr Ml9zdHUxX3BydGwKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChzdHJpbmd1 MSA9ICdKJzo6bmFtZSkKKyg4IHJvd3MpCisKKy0tIERvbid0IHNjYW4gcGFydGlhbCBpbmRl eGVzIGJlY2F1c2Ugb2YgZXh0cmEgdmFsdWUuCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgY291bnQoKikgRlJPTSBvbmVrMiBXSEVSRSBzdHJpbmd1MSBJTiAoJ0EnLCAnSicsICdD Jyk7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIFNlcSBTY2FuIG9uIG9uZWsyCisgICAgICAg ICBGaWx0ZXI6IChzdHJpbmd1MSA9IEFOWSAoJ3tBLEosQ30nOjpuYW1lW10pKQorKDMgcm93 cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIHVuaXF1ZTIgRlJPTSBvbmVrMgor V0hFUkUgc3RyaW5ndTEgSU4gKCdBJywgJ0EnKSBBTkQgKHN0cmluZ3UxID0gJ0EnIE9SIHN0 cmluZ3UxID0gJ0EnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQml0bWFwIEhlYXAgU2NhbiBvbiBvbmVrMgorICAgUmVjaGVjayBDb25kOiAo c3RyaW5ndTEgPCAnQic6Om5hbWUpCisgICBGaWx0ZXI6ICgoc3RyaW5ndTEgPSBBTlkgKCd7 QSxBfSc6Om5hbWVbXSkpIEFORCAoc3RyaW5ndTEgPSAnQSc6Om5hbWUpKQorICAgLT4gIEJp dG1hcCBJbmRleCBTY2FuIG9uIG9uZWsyX3UyX3BydGwKKyg0IHJvd3MpCisKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCB1bmlxdWUyLCBzdHJpbmd1MSBGUk9NIG9uZWsyCitXSEVS RSB1bmlxdWUyIDwgMSBBTkQgc3RyaW5ndTEgSU4gKCdBJywnSicpIEFORCBzdHJpbmd1MSA8 ICdaJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhlYXAgU2NhbiBvbiBvbmVr MgorICAgUmVjaGVjayBDb25kOiAoKCh1bmlxdWUyIDwgMSkgQU5EIChzdHJpbmd1MSA8ICdC Jzo6bmFtZSkpIE9SICgoc3RyaW5ndTEgPSAnSic6Om5hbWUpIEFORCAoc3RyaW5ndTEgPCAn Wic6Om5hbWUpKSkKKyAgIEZpbHRlcjogKCh1bmlxdWUyIDwgMSkgQU5EIChzdHJpbmd1MSA9 IEFOWSAoJ3tBLEp9Jzo6bmFtZVtdKSkpCisgICAtPiAgQml0bWFwT3IKKyAgICAgICAgIC0+ ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBvbmVrMl91Ml9wcnRsCisgICAgICAgICAgICAgICBJ bmRleCBDb25kOiAodW5pcXVlMiA8IDEpCisgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNj YW4gb24gb25lazJfc3R1MV9wcnRsCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoKHN0 cmluZ3UxID0gJ0onOjpuYW1lKSBBTkQgKHN0cmluZ3UxIDwgJ1onOjpuYW1lKSkKKyg4IHJv d3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCB1bmlxdWUyLCBzdHJpbmd1MSBG Uk9NIG9uZWsyCitXSEVSRSB1bmlxdWUxID0gMSBPUiB1bmlxdWUxID0gUEkoKTo6aW50ZWdl cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIG9uZWsyCisgICBSZWNoZWNr IENvbmQ6ICh1bmlxdWUxID0gQU5ZICgnezEsM30nOjppbnRlZ2VyW10pKQorICAgLT4gIEJp dG1hcCBJbmRleCBTY2FuIG9uIG9uZWsyX3UxX3BydGwKKyAgICAgICAgIEluZGV4IENvbmQ6 ICh1bmlxdWUxID0gQU5ZICgnezEsM30nOjppbnRlZ2VyW10pKQorKDQgcm93cykKKworRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIHVuaXF1ZTIsIHN0cmluZ3UxIEZST00gb25lazIK K1dIRVJFIHVuaXF1ZTEgSU4gKDEsIFBJKCk6OmludGVnZXIpOworICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJp dG1hcCBIZWFwIFNjYW4gb24gb25lazIKKyAgIFJlY2hlY2sgQ29uZDogKHVuaXF1ZTEgPSBB TlkgKCd7MSwzfSc6OmludGVnZXJbXSkpCisgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24g b25lazJfdTFfcHJ0bAorICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTEgPSBBTlkgKCd7 MSwzfSc6OmludGVnZXJbXSkpCisoNCByb3dzKQorCistLSBEb24ndCBhcHBseSB0aGUgb3B0 aW1pemF0aW9uIHRvIGNsYXVzZXMsIGNvbnRhaW5pbmcgdm9sYXRpbGUgZnVuY3Rpb25zCitF WFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgdW5pcXVlMixzdHJpbmd1MSBGUk9NIG9uZWsy CitXSEVSRSB1bmlxdWUxID0gKHJhbmRvbSgpKjIpOjppbnRlZ2VyIE9SIHVuaXF1ZTEgPSAo cmFuZG9tKCkqMyk6OmludGVnZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIG9uZWsyCisgICBGaWx0ZXI6ICgo dW5pcXVlMSA9ICgocmFuZG9tKCkgKiAnMic6OmRvdWJsZSBwcmVjaXNpb24pKTo6aW50ZWdl cikgT1IgKHVuaXF1ZTEgPSAoKHJhbmRvbSgpICogJzMnOjpkb3VibGUgcHJlY2lzaW9uKSk6 OmludGVnZXIpKQorKDIgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIHVu aXF1ZTIsc3RyaW5ndTEgRlJPTSBvbmVrMgorV0hFUkUgdW5pcXVlMSBJTiAoKHJhbmRvbSgp KjIpOjppbnRlZ2VyLCAocmFuZG9tKCkqMyk6OmludGVnZXIpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBvbmVrMgorICAg RmlsdGVyOiAodW5pcXVlMSA9IEFOWSAoQVJSQVlbKChyYW5kb20oKSAqICcyJzo6ZG91Ymxl IHByZWNpc2lvbikpOjppbnRlZ2VyLCAoKHJhbmRvbSgpICogJzMnOjpkb3VibGUgcHJlY2lz aW9uKSk6OmludGVnZXJdKSkKKygyIHJvd3MpCisKKy0tIENvbWJpbmUgZGlmZmVyZW50IHNh b3BzLiBTb21lIG9mIHRoZW0gZG9lc250JyBmaXQgYSBzZXQgb2YgcGFydGlhbCBpbmRleGVz LAorLS0gYnV0IG90aGVyIGZpdHMuCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgdW5p cXVlMixzdHJpbmd1MSBGUk9NIG9uZWsyCitXSEVSRQorICB1bmlxdWUxIElOICgxLDIsMjEp IEFORAorICAoc3RyaW5ndTEgSU4gKCdBJywnSicpIE9SIHVuaXF1ZTEgSU4gKDMsNCkgT1Ig c3RyaW5ndTEgPSAnSicpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEJpdG1hcCBIZWFwIFNjYW4gb24gb25lazIKKyAgIFJlY2hl Y2sgQ29uZDogKChzdHJpbmd1MSA8ICdCJzo6bmFtZSkgT1IgKHN0cmluZ3UxID0gJ0onOjpu YW1lKSBPUiAodW5pcXVlMSA9IDMpIE9SICh1bmlxdWUxID0gNCkgT1IgKHN0cmluZ3UxID0g J0onOjpuYW1lKSkKKyAgIEZpbHRlcjogKCh1bmlxdWUxID0gQU5ZICgnezEsMiwyMX0nOjpp bnRlZ2VyW10pKSBBTkQgKChzdHJpbmd1MSA9IEFOWSAoJ3tBLEp9Jzo6bmFtZVtdKSkgT1Ig KHVuaXF1ZTEgPSBBTlkgKCd7Myw0fSc6OmludGVnZXJbXSkpIE9SIChzdHJpbmd1MSA9ICdK Jzo6bmFtZSkpKQorICAgLT4gIEJpdG1hcE9yCisgICAgICAgICAtPiAgQml0bWFwIEluZGV4 IFNjYW4gb24gb25lazJfdTJfcHJ0bAorICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2Fu IG9uIG9uZWsyX3N0dTFfcHJ0bAorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHN0cmlu Z3UxID0gJ0onOjpuYW1lKQorICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIG9u ZWsyX3UxX3BydGwKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUxID0gMykK KyAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBvbmVrMl91MV9wcnRsCisgICAg ICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMSA9IDQpCisgICAgICAgICAtPiAgQml0 bWFwIEluZGV4IFNjYW4gb24gb25lazJfc3R1MV9wcnRsCisgICAgICAgICAgICAgICBJbmRl eCBDb25kOiAoc3RyaW5ndTEgPSAnSic6Om5hbWUpCisoMTMgcm93cykKKworLS0gQ2hlY2sg cmVjdXJzaXZlIGNvbWJpbmF0aW9uIG9mIE9SIGFuZCBTQU9QIGV4cHJlc3Npb25zCitFWFBM QUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgdW5pcXVlMiwgc3RyaW5ndTEgRlJPTSBvbmVrMgor V0hFUkUgdW5pcXVlMSA8IDEgT1IgKHN0cmluZ3UxID0gJ0EnIE9SIHN0cmluZ3UxID0gJ0on KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIG9uZWsyCisgICBSZWNoZWNr IENvbmQ6ICgodW5pcXVlMSA8IDEpIE9SIChzdHJpbmd1MSA8ICdCJzo6bmFtZSkgT1IgKHN0 cmluZ3UxID0gJ0onOjpuYW1lKSkKKyAgIEZpbHRlcjogKCh1bmlxdWUxIDwgMSkgT1IgKHN0 cmluZ3UxID0gQU5ZICgne0EsSn0nOjpuYW1lW10pKSkKKyAgIC0+ICBCaXRtYXBPcgorICAg ICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIG9uZWsyX3UxX3BydGwKKyAgICAgICAg ICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUxIDwgMSkKKyAgICAgICAgIC0+ICBCaXRtYXAg SW5kZXggU2NhbiBvbiBvbmVrMl91Ml9wcnRsCisgICAgICAgICAtPiAgQml0bWFwIEluZGV4 IFNjYW4gb24gb25lazJfc3R1MV9wcnRsCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAo c3RyaW5ndTEgPSAnSic6Om5hbWUpCisoOSByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYp CitTRUxFQ1QgdW5pcXVlMiwgc3RyaW5ndTEgRlJPTSBvbmVrMgorV0hFUkUgKHVuaXF1ZTEg PCAxIE9SIHN0cmluZ3UxIElOICgnQScsJ0onKSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhl YXAgU2NhbiBvbiBvbmVrMgorICAgUmVjaGVjayBDb25kOiAoKHVuaXF1ZTEgPCAxKSBPUiAo c3RyaW5ndTEgPCAnQic6Om5hbWUpIE9SIChzdHJpbmd1MSA9ICdKJzo6bmFtZSkpCisgICBG aWx0ZXI6ICgodW5pcXVlMSA8IDEpIE9SIChzdHJpbmd1MSA9IEFOWSAoJ3tBLEp9Jzo6bmFt ZVtdKSkpCisgICAtPiAgQml0bWFwT3IKKyAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2Nh biBvbiBvbmVrMl91MV9wcnRsCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVl MSA8IDEpCisgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gb25lazJfdTJfcHJ0 bAorICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIG9uZWsyX3N0dTFfcHJ0bAor ICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHN0cmluZ3UxID0gJ0onOjpuYW1lKQorKDkg cm93cykKKworLS0gQWx0aG91Z2ggU0FPUCBkb2Vzbid0IGZpdCBwYXJ0aWFsIGluZGV4ZXMg ZnVsbHksIHdlIGNhbiB1c2UgYW5kZWQgT1IgY2xhdXNlCistLSB0byBzY2FuIGFub3RoZXIg Y291cGxlIG9mIHBhcnRpYWwgaW5kZXhlcy4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCBjb3VudCgqKSBGUk9NIG9uZWsyCitXSEVSRSBzdHJpbmd1MSBJTiAoJ0InLCdKJykgQU5E IChzdHJpbmd1MSA9ICdBJyBPUiB1bmlxdWUxID0gMSk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgQml0bWFwIEhlYXAg U2NhbiBvbiBvbmVrMgorICAgICAgICAgUmVjaGVjayBDb25kOiAoKHN0cmluZ3UxIDwgJ0In OjpuYW1lKSBPUiAodW5pcXVlMSA9IDEpKQorICAgICAgICAgRmlsdGVyOiAoKHN0cmluZ3Ux ID0gQU5ZICgne0IsSn0nOjpuYW1lW10pKSBBTkQgKChzdHJpbmd1MSA9ICdBJzo6bmFtZSkg T1IgKHVuaXF1ZTEgPSAxKSkpCisgICAgICAgICAtPiAgQml0bWFwT3IKKyAgICAgICAgICAg ICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBvbmVrMl91Ml9wcnRsCisgICAgICAgICAg ICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gb25lazJfdTFfcHJ0bAorICAgICAgICAg ICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTEgPSAxKQorKDggcm93cykKKworUkVT RVQgZW5hYmxlX2luZGV4c2NhbjsKK1JFU0VUIGVuYWJsZV9zZXFzY2FuOwogLS0KIC0tIFRl c3Qgc29tZSBjb3JuZXIgY2FzZXMgdGhhdCBoYXZlIGJlZW4ga25vd24gdG8gY29uZnVzZSB0 aGUgcGxhbm5lcgogLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NlbGVj dC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zZWxlY3Quc3FsCmluZGV4IDAxOWYxZTc2 NzMuLjM3Njg1Njk0ZTYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NlbGVj dC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc2VsZWN0LnNxbApAQCAtMjM0LDYg KzIzNCw4OCBAQCBzZWxlY3QgdW5pcXVlMSwgdW5pcXVlMiBmcm9tIG9uZWsyCiBzZWxlY3Qg dW5pcXVlMSwgdW5pcXVlMiBmcm9tIG9uZWsyCiAgIHdoZXJlICh1bmlxdWUyID0gMTEgYW5k IHN0cmluZ3UxIDwgJ0InKSBvciB1bmlxdWUxID0gMDsKIAorU0VUIGVuYWJsZV9zZXFzY2Fu IFRPIG9mZjsKK1NFVCBlbmFibGVfaW5kZXhzY2FuIFRPIG9mZjsgLS0gT25seSBCaXRtYXBT Y2FuIGlzIGEgc3ViamVjdCBtYXR0ZXIgaGVyZQorU0VUIGVuYWJsZV9vcl90cmFuc2Zvcm1h dGlvbiA9ICdvZmYnOworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZS T00gb25lazIgV0hFUkUgc3RyaW5ndTEgPSAnQScgT1Igc3RyaW5ndTEgPSAnSic7CistLSBX aXRob3V0IHRoZSB0cmFuc2Zvcm1hdGlvbiBvbmx5IHNlcXNjYW4gcG9zc2libGUgaGVyZQor RVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIHVuaXF1ZTIsIHN0cmluZ3UxIEZST00gb25l azIKK1dIRVJFIHVuaXF1ZTIgPCAxIEFORCBzdHJpbmd1MSBJTiAoJ0EnLCdKJykgQU5EIHN0 cmluZ3UxIDwgJ1onOworLS0gVXNlIHBhcnRpYWwgaW5kZXhlcworRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gb25lazIKK1dIRVJFIHN0cmluZ3UxIElOICgn QicsJ0onKSBBTkQgKHN0cmluZ3UxID0gJ0EnIE9SIHVuaXF1ZTEgPSAxKTsKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCB1bmlxdWUyLCBzdHJpbmd1MSBGUk9NIG9uZWsyCitXSEVS RSB1bmlxdWUxIDwgMSBPUiAoc3RyaW5ndTEgPSAnQScgT1Igc3RyaW5ndTEgPSAnSicpOwor RVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIHVuaXF1ZTIsIHN0cmluZ3UxIEZST00gb25l azIKK1dIRVJFIHVuaXF1ZTEgPSAxIE9SIHVuaXF1ZTIgPSBQSSgpOjppbnRlZ2VyOworUkVT RVQgZW5hYmxlX29yX3RyYW5zZm9ybWF0aW9uOworCistLSBPUiA8LT4gQU5ZIHRyYW5zZm9y bWF0aW9uIG11c3QgZmluZCBhIHBhdGggd2l0aCBwYXJ0aWFsIGluZGV4ZXMgc2NhbgorLS0g cmVnYXJkbGVzcyB0aGUgY2xhdXNlIHJlcHJlc2VudGF0aW9uLgorRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gb25lazIgV0hFUkUgc3RyaW5ndTEgPSAnQScg T1Igc3RyaW5ndTEgPSAnSic7CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQo KikgRlJPTSBvbmVrMiBXSEVSRSBzdHJpbmd1MSBJTiAoJ0EnLCdKJyk7CitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBvbmVrMiBXSEVSRSBzdHJpbmd1MSA9 IEFOWSAoJ3tBLEp9Jyk7CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikg RlJPTSBvbmVrMiBXSEVSRSBzdHJpbmd1MSBJTiAoJ0EnKSBPUiBzdHJpbmd1MSBJTiAoJ0on KTsKKworLS0gRG9uJ3Qgc2NhbiBwYXJ0aWFsIGluZGV4ZXMgYmVjYXVzZSBvZiBleHRyYSB2 YWx1ZS4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIG9uZWsy IFdIRVJFIHN0cmluZ3UxIElOICgnQScsICdKJywgJ0MnKTsKK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCB1bmlxdWUyIEZST00gb25lazIKK1dIRVJFIHN0cmluZ3UxIElOICgnQScs ICdBJykgQU5EIChzdHJpbmd1MSA9ICdBJyBPUiBzdHJpbmd1MSA9ICdBJyk7CisKK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCB1bmlxdWUyLCBzdHJpbmd1MSBGUk9NIG9uZWsyCitX SEVSRSB1bmlxdWUyIDwgMSBBTkQgc3RyaW5ndTEgSU4gKCdBJywnSicpIEFORCBzdHJpbmd1 MSA8ICdaJzsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCB1bmlxdWUyLCBzdHJpbmd1 MSBGUk9NIG9uZWsyCitXSEVSRSB1bmlxdWUxID0gMSBPUiB1bmlxdWUxID0gUEkoKTo6aW50 ZWdlcjsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCB1bmlxdWUyLCBzdHJpbmd1MSBG Uk9NIG9uZWsyCitXSEVSRSB1bmlxdWUxIElOICgxLCBQSSgpOjppbnRlZ2VyKTsKKworLS0g RG9uJ3QgYXBwbHkgdGhlIG9wdGltaXphdGlvbiB0byBjbGF1c2VzLCBjb250YWluaW5nIHZv bGF0aWxlIGZ1bmN0aW9ucworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIHVuaXF1ZTIs c3RyaW5ndTEgRlJPTSBvbmVrMgorV0hFUkUgdW5pcXVlMSA9IChyYW5kb20oKSoyKTo6aW50 ZWdlciBPUiB1bmlxdWUxID0gKHJhbmRvbSgpKjMpOjppbnRlZ2VyOworRVhQTEFJTiAoQ09T VFMgT0ZGKQorU0VMRUNUIHVuaXF1ZTIsc3RyaW5ndTEgRlJPTSBvbmVrMgorV0hFUkUgdW5p cXVlMSBJTiAoKHJhbmRvbSgpKjIpOjppbnRlZ2VyLCAocmFuZG9tKCkqMyk6OmludGVnZXIp OworCistLSBDb21iaW5lIGRpZmZlcmVudCBzYW9wcy4gU29tZSBvZiB0aGVtIGRvZXNudCcg Zml0IGEgc2V0IG9mIHBhcnRpYWwgaW5kZXhlcywKKy0tIGJ1dCBvdGhlciBmaXRzLgorCitF WFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgdW5pcXVlMixzdHJpbmd1MSBGUk9NIG9uZWsy CitXSEVSRQorICB1bmlxdWUxIElOICgxLDIsMjEpIEFORAorICAoc3RyaW5ndTEgSU4gKCdB JywnSicpIE9SIHVuaXF1ZTEgSU4gKDMsNCkgT1Igc3RyaW5ndTEgPSAnSicpOworCistLSBD aGVjayByZWN1cnNpdmUgY29tYmluYXRpb24gb2YgT1IgYW5kIFNBT1AgZXhwcmVzc2lvbnMK K0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCB1bmlxdWUyLCBzdHJpbmd1MSBGUk9NIG9u ZWsyCitXSEVSRSB1bmlxdWUxIDwgMSBPUiAoc3RyaW5ndTEgPSAnQScgT1Igc3RyaW5ndTEg PSAnSicpOworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIHVuaXF1ZTIsIHN0cmluZ3Ux IEZST00gb25lazIKK1dIRVJFICh1bmlxdWUxIDwgMSBPUiBzdHJpbmd1MSBJTiAoJ0EnLCdK JykpOworLS0gQWx0aG91Z2ggU0FPUCBkb2Vzbid0IGZpdCBwYXJ0aWFsIGluZGV4ZXMgZnVs bHksIHdlIGNhbiB1c2UgYW5kZWQgT1IgY2xhdXNlCistLSB0byBzY2FuIGFub3RoZXIgY291 cGxlIG9mIHBhcnRpYWwgaW5kZXhlcy4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBj b3VudCgqKSBGUk9NIG9uZWsyCitXSEVSRSBzdHJpbmd1MSBJTiAoJ0InLCdKJykgQU5EIChz dHJpbmd1MSA9ICdBJyBPUiB1bmlxdWUxID0gMSk7CisKK1JFU0VUIGVuYWJsZV9pbmRleHNj YW47CitSRVNFVCBlbmFibGVfc2Vxc2NhbjsKKwogLS0KIC0tIFRlc3Qgc29tZSBjb3JuZXIg Y2FzZXMgdGhhdCBoYXZlIGJlZW4ga25vd24gdG8gY29uZnVzZSB0aGUgcGxhbm5lcgogLS0K LS0gCjIuNDQuMAoK --------------IiW4MTF0rMfRGDJ0qWmZ0xc1--