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.96) (envelope-from ) id 1w2S10-000Ile-2m for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Mar 2026 10:51:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w2S0z-000WZk-29 for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Mar 2026 10:51:09 +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.96) (envelope-from ) id 1w2S0z-000WZc-0G for pgsql-hackers@lists.postgresql.org; Tue, 17 Mar 2026 10:51:09 +0000 Received: from forward501a.mail.yandex.net ([178.154.239.81]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1w2S0t-00000000aaR-1IYl for pgsql-hackers@lists.postgresql.org; Tue, 17 Mar 2026 10:51:08 +0000 Received: from mail-nwsmtp-smtp-production-main-81.vla.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-81.vla.yp-c.yandex.net [IPv6:2a02:6b8:c0f:571a:0:640:23e3:0]) by forward501a.mail.yandex.net (Yandex) with ESMTPS id 096C282705; Tue, 17 Mar 2026 13:51:01 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-81.vla.yp-c.yandex.net (smtp/Yandex) with ESMTPSA id xoJaWBBGsGk0-8Rb7Kacg; Tue, 17 Mar 2026 13:51:00 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tantorlabs.com; s=mail; t=1773744660; bh=6BBB9zSMVVpUUEA7wkcA7U5xZkIeK0djR2oZ6n+PciI=; h=In-Reply-To:Cc:Date:References:To:Subject:Message-ID:From; b=wWPIGnBy2tmYj1v9IysL5zewxTnClqtsJ4tVqJwsJYPJbYEc4HhplLdmvSkyNZB2q JCeZsgEVRl9ghspx19H3XsPcfrp2AlLEowyo91jbAJEOU+TeiFWox8GT1sNoKudh65 8AIU1hsnQqjizqPE2hLZp5fGILWYHlexVegkyenE= Authentication-Results: mail-nwsmtp-smtp-production-main-81.vla.yp-c.yandex.net; dkim=pass header.i=@tantorlabs.com Content-Type: multipart/mixed; boundary="------------ZKa4Aj4asdiiIxbmK5lylcuS" Message-ID: <977365f2-2ab7-4008-8d9c-f62ef5271cea@tantorlabs.com> Date: Tue, 17 Mar 2026 13:50:59 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Reduce planning time for large NOT IN lists containing NULL From: Ilia Evdokimov To: David Rowley Cc: Zsolt Parragi , David Geier , PostgreSQL Developers References: <52596e08-0902-475b-ad0f-265ec6918f19@gmail.com> <7791ec74-369d-48c7-969c-cf4ad18024f2@tantorlabs.com> <6b3aebb5-f26c-4f50-abd6-e733d452af26@gmail.com> <52f3c637-465d-4f0e-9546-732ecf61ab87@tantorlabs.com> <3fc74079-f429-48c8-ad8c-688b21d4d1c1@gmail.com> <4c761b02-5a60-4076-aa0c-9c6fef06e2c1@tantorlabs.com> <2bdf4a7e-f5b9-4e75-b5a3-1e2608fd3297@tantorlabs.com> <390a46f3-dbc4-4dc1-b49d-5cc61dd36026@tantorlabs.com> Content-Language: en-US In-Reply-To: <390a46f3-dbc4-4dc1-b49d-5cc61dd36026@tantorlabs.com> 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. --------------ZKa4Aj4asdiiIxbmK5lylcuS Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Rebased the v7-patches to fix git apply failure. -- Best regards, Ilia Evdokimov, Tantor Labs LLC, https://tantorlabs.com/ --------------ZKa4Aj4asdiiIxbmK5lylcuS Content-Type: text/x-patch; charset=UTF-8; name="v7-0002-Reduce-planning-time-for-large-NOT-IN-lists-conta.patch" Content-Disposition: attachment; filename*0="v7-0002-Reduce-planning-time-for-large-NOT-IN-lists-conta.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAzMzA5NGQ4ZTExMDE1MmM1YzlhZjExOTM3MzY5OWJlMmNlYjQyYWJiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBJbGlhIEV2ZG9raW1vdiA8aWx5YS5ldmRva2ltb3ZA dGFudG9ybGFicy5ydT4KRGF0ZTogVHVlLCAxNyBNYXIgMjAyNiAxMzo0MDo1NyArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjcgMi8yXSBSZWR1Y2UgcGxhbm5pbmcgdGltZSBmb3IgbGFyZ2Ug Tk9UIElOIGxpc3RzIGNvbnRhaW5pbmcKIE5VTEwKCkZvciB4IDw+IEFMTCAoLi4uKSwgdGhl IHByZXNlbmNlIG9mIGEgTlVMTCBtYWtlcyB0aGUgc2VsZWN0aXZpdHkgMC4wLgoKVGhlIHBs YW5uZXIgY3VycmVudGx5IHN0aWxsIGl0ZXJhdGVzIG92ZXIgYWxsIGVsZW1lbnRzIGFuZCBj b21wdXRlcwpwZXItZWxlbWVudCBzZWxlY3Rpdml0eSwgZXZlbiB0aG91Z2ggdGhlIGZpbmFs IHJlc3VsdCBpcyBrbm93bi4KCkFkZCBhbiBlYXJseSBOVUxMIGNoZWNrIGZvciBjb25zdGFu dCBhcnJheXMgYW5kIGltbWVkaWF0ZWx5IHJldHVybgowLjAgdW5kZXIgQUxMIHNlbWFudGlj cy4KClRoaXMgcmVkdWNlcyBwbGFubmluZyB0aW1lIGZvciBsYXJnZSA8PiBBTEwgbGlzdHMg d2l0aG91dApjaGFuZ2luZyBzZW1hbnRpY3MuCi0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3NlbGZ1bmNzLmMgICAgICAgICAgICAgIHwgMTcgKysrKysrKysrKysKIHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc2VsZWN0aXZpdHlfZXN0Lm91dCB8IDMwICsrKysrKysrKysrKysr KysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NlbGVjdGl2aXR5X2VzdC5zcWwgICAgICB8 IDIyICsrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDY5IGluc2VydGlvbnMoKykK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCmluZGV4IGQ0ZGEwZThkZWE5Li4wNzNkOTNm NGYzZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKQEAgLTIwMTgsNiArMjAxOCwx NSBAQCBzY2FsYXJhcnJheXNlbChQbGFubmVySW5mbyAqcm9vdCwKIAkJaWYgKGFycmF5aXNu dWxsKQkJLyogcXVhbCBjYW4ndCBzdWNjZWVkIGlmIG51bGwgYXJyYXkgKi8KIAkJCXJldHVy biAoU2VsZWN0aXZpdHkpIDAuMDsKIAkJYXJyYXl2YWwgPSBEYXR1bUdldEFycmF5VHlwZVAo YXJyYXlkYXR1bSk7CisKKwkJLyoKKwkJICogRm9yIEFMTCBzZW1hbnRpY3MsIGlmIHRoZSBh cnJheSBjb250YWlucyBOVUxMLCBhc3N1bWUgb3BlcmF0b3IgaXMKKwkJICogc3RyaWN0LiBU aGUgU2NhbGFyQXJyYXlPcEV4cHIgY2Fubm90IGV2YWx1YXRlIHRvIFRSVUUsIHNvIHJldHVy bgorCQkgKiB6ZXJvLgorCQkgKi8KKwkJaWYgKCF1c2VPciAmJiBhcnJheV9jb250YWluc19u dWxscyhhcnJheXZhbCkpCisJCQlyZXR1cm4gKFNlbGVjdGl2aXR5KSAwLjA7CisKIAkJZ2V0 X3R5cGxlbmJ5dmFsYWxpZ24oQVJSX0VMRU1UWVBFKGFycmF5dmFsKSwKIAkJCQkJCQkgJmVs bWxlbiwgJmVsbWJ5dmFsLCAmZWxtYWxpZ24pOwogCQlkZWNvbnN0cnVjdF9hcnJheShhcnJh eXZhbCwKQEAgLTIxMTUsNiArMjEyNCwxNCBAQCBzY2FsYXJhcnJheXNlbChQbGFubmVySW5m byAqcm9vdCwKIAkJCUxpc3QJICAgKmFyZ3M7CiAJCQlTZWxlY3Rpdml0eSBzMjsKIAorCQkJ LyoKKwkJCSAqIEZvciBBTEwgc2VtYW50aWNzLCBpZiB0aGUgYXJyYXkgY29udGFpbnMgTlVM TCwgYXNzdW1lIG9wZXJhdG9yCisJCQkgKiBpcyBzdHJpY3QuIFRoZSBTY2FsYXJBcnJheU9w RXhwciBjYW5ub3QgZXZhbHVhdGUgdG8gVFJVRSwgc28KKwkJCSAqIHJldHVybiB6ZXJvLgor CQkJICovCisJCQlpZiAoIXVzZU9yICYmIElzQShlbGVtLCBDb25zdCkgJiYgKChDb25zdCAq KSBlbGVtKS0+Y29uc3Rpc251bGwpCisJCQkJcmV0dXJuIChTZWxlY3Rpdml0eSkgMC4wOwor CiAJCQkvKgogCQkJICogVGhlb3JldGljYWxseSwgaWYgZWxlbSBpc24ndCBvZiBub21pbmFs X2VsZW1lbnRfdHlwZSB3ZSBzaG91bGQKIAkJCSAqIGluc2VydCBhIFJlbGFiZWxUeXBlLCBi dXQgaXQgc2VlbXMgdW5saWtlbHkgdGhhdCBhbnkgb3BlcmF0b3IKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc2VsZWN0aXZpdHlfZXN0Lm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc2VsZWN0aXZpdHlfZXN0Lm91dAppbmRleCA4ZmM1YzljOWUw Ny4uZDQ4MmYyYWU3YTAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv c2VsZWN0aXZpdHlfZXN0Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Nl bGVjdGl2aXR5X2VzdC5vdXQKQEAgLTE3NSw0ICsxNzUsMzQgQEAgZmFsc2UsIHRydWUsIGZh bHNlLCB0cnVlKTsKICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnICAoY29z dD1OLi5OIHJvd3M9MTAwMCB3aWR0aD1OKQogKDEgcm93KQogCistLQorLS0gVGVzdCA8PiBB TEwgd2hlbiBhcnJheSBpbml0aWFsbHkgY29udGFpbmVkIE5VTEwgYnV0IG5vIGxvbmdlciBk b2VzCistLQorQ1JFQVRFIEZVTkNUSU9OIHJlcGxhY2VfZWxlbShhcnIgaW50W10sIGlkeCBp bnQsIHZhbCBpbnQpCitSRVRVUk5TIGludFtdIEFTICQkCitCRUdJTgorICAgICAgICBhcnJb aWR4XSA6PSB2YWw7CisgICAgICAgIFJFVFVSTiBhcnI7CitlbmQ7CiskJCBsYW5ndWFnZSBw bHBnc3FsIElNTVVUQUJMRTsKK1NFTEVDVCBleHBsYWluX21hc2tfY29zdHMoCisgICAgJ1NF TEVDVCAqIEZST00gdGVuazEgV0hFUkUgdW5pcXVlMSA8PiBBTEwoQVJSQVlbMSw5OSwzXSkn LAorZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlICk7CisgICAgICAgICAgICAgICAgIGV4cGxh aW5fbWFza19jb3N0cyAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gdGVuazEgIChj b3N0PU4uLk4gcm93cz05OTk3IHdpZHRoPU4pCisgICBGaWx0ZXI6ICh1bmlxdWUxIDw+IEFM TCAoJ3sxLDk5LDN9Jzo6aW50ZWdlcltdKSkKKygyIHJvd3MpCisKKy0tIHNhbWUgYXJyYXks IGNvbnN0cnVjdGVkIGZyb20gYW4gYXJyYXkgd2l0aCBhIE5VTEwKK1NFTEVDVCBleHBsYWlu X21hc2tfY29zdHMoCisgICAgJ1NFTEVDVCAqIEZST00gdGVuazEgV0hFUkUgdW5pcXVlMSA8 PiBBTEwocmVwbGFjZV9lbGVtKEFSUkFZWzEsTlVMTCwzXSwgMiwgOTkpKScsCitmYWxzZSwg dHJ1ZSwgZmFsc2UsIHRydWUgKTsKKyAgICAgICAgICAgICAgICAgZXhwbGFpbl9tYXNrX2Nv c3RzICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiB0ZW5rMSAgKGNvc3Q9Ti4uTiBy b3dzPTk5OTcgd2lkdGg9TikKKyAgIEZpbHRlcjogKHVuaXF1ZTEgPD4gQUxMICgnezEsOTks M30nOjppbnRlZ2VyW10pKQorKDIgcm93cykKKworRFJPUCBGVU5DVElPTiByZXBsYWNlX2Vs ZW07CiBEUk9QIEZVTkNUSU9OIGV4cGxhaW5fbWFza19jb3N0cyh0ZXh0LCBib29sLCBib29s LCBib29sLCBib29sKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NlbGVj dGl2aXR5X2VzdC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zZWxlY3Rpdml0eV9lc3Qu c3FsCmluZGV4IDQxNmQ1ZWExZjc1Li4zZmZlYzQzOTA3ZiAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvc2VsZWN0aXZpdHlfZXN0LnNxbAorKysgYi9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9zZWxlY3Rpdml0eV9lc3Quc3FsCkBAIC0xMjIsNSArMTIyLDI3IEBAIFNFTEVD VCBleHBsYWluX21hc2tfY29zdHMoJCQKIFNFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVz KDI1LjAsIDIuMCwgMC4wKSBnKHMpOyQkLAogZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlKTsK IAorLS0KKy0tIFRlc3QgPD4gQUxMIHdoZW4gYXJyYXkgaW5pdGlhbGx5IGNvbnRhaW5lZCBO VUxMIGJ1dCBubyBsb25nZXIgZG9lcworLS0KK0NSRUFURSBGVU5DVElPTiByZXBsYWNlX2Vs ZW0oYXJyIGludFtdLCBpZHggaW50LCB2YWwgaW50KQorUkVUVVJOUyBpbnRbXSBBUyAkJAor QkVHSU4KKyAgICAgICAgYXJyW2lkeF0gOj0gdmFsOworICAgICAgICBSRVRVUk4gYXJyOwor ZW5kOworJCQgbGFuZ3VhZ2UgcGxwZ3NxbCBJTU1VVEFCTEU7CisKK1NFTEVDVCBleHBsYWlu X21hc2tfY29zdHMoCisgICAgJ1NFTEVDVCAqIEZST00gdGVuazEgV0hFUkUgdW5pcXVlMSA8 PiBBTEwoQVJSQVlbMSw5OSwzXSknLAorZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlICk7CisK Ky0tIHNhbWUgYXJyYXksIGNvbnN0cnVjdGVkIGZyb20gYW4gYXJyYXkgd2l0aCBhIE5VTEwK K1NFTEVDVCBleHBsYWluX21hc2tfY29zdHMoCisgICAgJ1NFTEVDVCAqIEZST00gdGVuazEg V0hFUkUgdW5pcXVlMSA8PiBBTEwocmVwbGFjZV9lbGVtKEFSUkFZWzEsTlVMTCwzXSwgMiwg OTkpKScsCitmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUgKTsKKworRFJPUCBGVU5DVElPTiBy ZXBsYWNlX2VsZW07CisKIAogRFJPUCBGVU5DVElPTiBleHBsYWluX21hc2tfY29zdHModGV4 dCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCk7Ci0tIAoyLjM0LjEKCg== --------------ZKa4Aj4asdiiIxbmK5lylcuS Content-Type: text/x-patch; charset=UTF-8; name="v7-0001-Move-planner-row-estimation-tests-to-selectivity..patch" Content-Disposition: attachment; filename*0="v7-0001-Move-planner-row-estimation-tests-to-selectivity..pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA2NDRmYTlhMDc3YWFmN2Q3N2MzYTU4YWRkOTI1ZDJlMDFjYmNhZTIwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBJbGlhIEV2ZG9raW1vdiA8aWx5YS5ldmRva2ltb3ZA dGFudG9ybGFicy5ydT4KRGF0ZTogVHVlLCAxNyBNYXIgMjAyNiAxMzozOTozOCArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjcgMS8yXSBNb3ZlIHBsYW5uZXIgcm93LWVzdGltYXRpb24gdGVz dHMgdG8gc2VsZWN0aXZpdHkuc3FsCgpNb3ZlIGV4cGxhaW5fbWFza19jb3N0cygpIGFuZCB0 aGUgYXNzb2NpYXRlZCBwbGFubmVyIHJvdy1lc3RpbWF0aW9uCnRlc3RzIGZyb20gbWlzY19m dW5jdGlvbnMuc3FsIHRvIGEgbmV3IHJlZ3Jlc3Npb24gdGVzdCBmaWxlLApzZWxlY3Rpdml0 eS5zcWwuCgpUaGUgdGVzdHMgZXhlcmNpc2UgU3VwcG9ydFJlcXVlc3RSb3dzIHN1cHBvcnQg ZnVuY3Rpb25zIGFuZCBvdGhlcgpwbGFubmVyIHNlbGVjdGl2aXR5IGVzdGltYXRpb24gYmVo YXZpb3IsIHNvIHRoZXkgZG8gbm90IGxvZ2ljYWxseQpiZWxvbmcgaW4gbWlzY19mdW5jdGlv bnMuc3FsLgotLS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMu b3V0ICB8IDE3OCAtLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvc2VsZWN0aXZpdHlfZXN0Lm91dCB8IDE3OCArKysrKysrKysrKysrKysrKysKIHNyYy90 ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgICAgICAgICAgICB8ICAgMiArLQogc3Jj L3Rlc3QvcmVncmVzcy9zcWwvbWlzY19mdW5jdGlvbnMuc3FsICAgICAgIHwgMTI1IC0tLS0t LS0tLS0tLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvc2VsZWN0aXZpdHlfZXN0LnNxbCAgICAg IHwgMTI2ICsrKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgMzA1IGluc2VydGlvbnMo KyksIDMwNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3NlbGVjdGl2aXR5X2VzdC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvdGVzdC9yZWdyZXNzL3NxbC9zZWxlY3Rpdml0eV9lc3Quc3FsCgpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL21pc2NfZnVuY3Rpb25zLm91dAppbmRleCA2YzAzYjFhNzlk Ny4uY2Y1NWNkZjM2ODggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv bWlzY19mdW5jdGlvbnMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlz Y19mdW5jdGlvbnMub3V0CkBAIC0yLDQ2ICsyLDYgQEAKIFxnZXRlbnYgbGliZGlyIFBHX0xJ QkRJUgogXGdldGVudiBkbHN1ZmZpeCBQR19ETFNVRkZJWAogXHNldCByZWdyZXNzbGliIDps aWJkaXIgJy9yZWdyZXNzJyA6ZGxzdWZmaXgKLS0tIEZ1bmN0aW9uIHRvIGFzc2lzdCB3aXRo IHZlcmlmeWluZyBFWFBMQUlOIHdoaWNoIGluY2x1ZGVzIGNvc3RzLiAgQSBzZXJpZXMKLS0t IG9mIGJvb2wgZmxhZ3MgYWxsb3dzIGNvbnRyb2wgb3ZlciB3aGljaCBwb3J0aW9ucyBhcmUg bWFza2VkIG91dAotQ1JFQVRFIEZVTkNUSU9OIGV4cGxhaW5fbWFza19jb3N0cyhxdWVyeSB0 ZXh0LCBkb19hbmFseXplIGJvb2wsCi0gICAgaGlkZV9jb3N0cyBib29sLCBoaWRlX3Jvd19l c3QgYm9vbCwgaGlkZV93aWR0aCBib29sKSBSRVRVUk5TIHNldG9mIHRleHQKLUxBTkdVQUdF IHBscGdzcWwgQVMKLSQkCi1ERUNMQVJFCi0gICAgbG4gdGV4dDsKLSAgICBhbmFseXplX3N0 ciB0ZXh0OwotQkVHSU4KLSAgICBJRiBkb19hbmFseXplID0gdHJ1ZSBUSEVOCi0gICAgICAg IGFuYWx5emVfc3RyIDo9ICdvbic7Ci0gICAgRUxTRQotICAgICAgICBhbmFseXplX3N0ciA6 PSAnb2ZmJzsKLSAgICBFTkQgSUY7Ci0KLSAgICAtLSBhdm9pZCBqaXQgcmVsYXRlZCBvdXRw dXQgYnkgZGlzYWJsaW5nIGl0Ci0gICAgU0VUIExPQ0FMIGppdCA9IDA7Ci0KLSAgICBGT1Ig bG4gSU4KLSAgICAgICAgRVhFQ1VURSBmb3JtYXQoJ2V4cGxhaW4gKGFuYWx5emUgJXMsIGNv c3RzIG9uLCBzdW1tYXJ5IG9mZiwgdGltaW5nIG9mZiwgYnVmZmVycyBvZmYpICVzJywKLSAg ICAgICAgICAgIGFuYWx5emVfc3RyLCBxdWVyeSkKLSAgICBMT09QCi0gICAgICAgIElGIGhp ZGVfY29zdHMgPSB0cnVlIFRIRU4KLSAgICAgICAgICAgIGxuIDo9IHJlZ2V4cF9yZXBsYWNl KGxuLCAnY29zdD1cZCtcLlxkXGRcLlwuXGQrXC5cZFxkJywgJ2Nvc3Q9Ti4uTicpOwotICAg ICAgICBFTkQgSUY7Ci0KLSAgICAgICAgSUYgaGlkZV9yb3dfZXN0ID0gdHJ1ZSBUSEVOCi0g ICAgICAgICAgICAtLSBkb24ndCB1c2UgJ2cnIHNvIHRoYXQgd2UgbGVhdmUgdGhlIGFjdHVh bCByb3dzIGludGFjdAotICAgICAgICAgICAgbG4gOj0gcmVnZXhwX3JlcGxhY2UobG4sICdy b3dzPVxkKycsICdyb3dzPU4nKTsKLSAgICAgICAgRU5EIElGOwotCi0gICAgICAgIElGIGhp ZGVfd2lkdGggPSB0cnVlIFRIRU4KLSAgICAgICAgICAgIGxuIDo9IHJlZ2V4cF9yZXBsYWNl KGxuLCAnd2lkdGg9XGQrJywgJ3dpZHRoPU4nKTsKLSAgICAgICAgRU5EIElGOwotCi0gICAg ICAgIFJFVFVSTiBORVhUIGxuOwotICAgIEVORCBMT09QOwotRU5EOwotJCQ7CiAtLQogLS0g bnVtX251bGxzKCkKIC0tCkBAIC02NzEsMTQzICs2MzEsNiBAQCBTRUxFQ1QgKiBGUk9NIHRl bmsxIGEgSk9JTiBteV9nZW5fc2VyaWVzKDEsMTApIGcgT04gYS51bmlxdWUxID0gZzsKICAg ICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUxID0gZy5nKQogKDQgcm93cykKIAotLS0KLS0t IFRlc3QgdGhlIFN1cHBvcnRSZXF1ZXN0Um93cyBzdXBwb3J0IGZ1bmN0aW9uIGZvciBnZW5l cmF0ZV9zZXJpZXNfdGltZXN0YW1wKCkKLS0tCi0tLSBFbnN1cmUgdGhlIHJvdyBlc3RpbWF0 ZSBtYXRjaGVzIHRoZSBhY3R1YWwgcm93cwotU0VMRUNUIGV4cGxhaW5fbWFza19jb3N0cygk JAotU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoVElNRVNUQU1QVFogJzIwMjQtMDIt MDEnLCBUSU1FU1RBTVBUWiAnMjAyNC0wMy0wMScsIElOVEVSVkFMICcxIGRheScpIGcocyk7 JCQsCi10cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZXhwbGFpbl9tYXNrX2Nvc3RzICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQotIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcgIChjb3N0PU4uLk4g cm93cz0zMCB3aWR0aD1OKSAoYWN0dWFsIHJvd3M9MzAuMDAgbG9vcHM9MSkKLSgxIHJvdykK LQotLS0gQXMgYWJvdmUgYnV0IHdpdGggZ2VuZXJhdGVfc2VyaWVzX3RpbWVzdGFtcAotU0VM RUNUIGV4cGxhaW5fbWFza19jb3N0cygkJAotU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoVElNRVNUQU1QICcyMDI0LTAyLTAxJywgVElNRVNUQU1QICcyMDI0LTAzLTAxJywgSU5U RVJWQUwgJzEgZGF5JykgZyhzKTskJCwKLXRydWUsIHRydWUsIGZhbHNlLCB0cnVlKTsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBsYWluX21hc2tfY29zdHMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9z ZXJpZXMgZyAgKGNvc3Q9Ti4uTiByb3dzPTMwIHdpZHRoPU4pIChhY3R1YWwgcm93cz0zMC4w MCBsb29wcz0xKQotKDEgcm93KQotCi0tLSBBcyBhYm92ZSBidXQgd2l0aCBnZW5lcmF0ZV9z ZXJpZXNfdGltZXN0YW1wdHpfYXRfem9uZSgpCi1TRUxFQ1QgZXhwbGFpbl9tYXNrX2Nvc3Rz KCQkCi1TRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcyhUSU1FU1RBTVBUWiAnMjAyNC0w Mi0wMScsIFRJTUVTVEFNUFRaICcyMDI0LTAzLTAxJywgSU5URVJWQUwgJzEgZGF5JywgJ1VU QycpIGcocyk7JCQsCi10cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGFpbl9tYXNrX2Nvc3RzICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQotIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcgIChj b3N0PU4uLk4gcm93cz0zMCB3aWR0aD1OKSAoYWN0dWFsIHJvd3M9MzAuMDAgbG9vcHM9MSkK LSgxIHJvdykKLQotLS0gRW5zdXJlIHRoZSBlc3RpbWF0ZWQgYW5kIGFjdHVhbCByb3cgY291 bnRzIG1hdGNoIHdoZW4gdGhlIHJhbmdlIGlzbid0Ci0tLSBldmVubHkgZGl2aXNpYmxlIGJ5 IHRoZSBzdGVwCi1TRUxFQ1QgZXhwbGFpbl9tYXNrX2Nvc3RzKCQkCi1TRUxFQ1QgKiBGUk9N IGdlbmVyYXRlX3NlcmllcyhUSU1FU1RBTVBUWiAnMjAyNC0wMi0wMScsIFRJTUVTVEFNUFRa ICcyMDI0LTAzLTAxJywgSU5URVJWQUwgJzcgZGF5JykgZyhzKTskJCwKLXRydWUsIHRydWUs IGZhbHNlLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4 cGxhaW5fbWFza19jb3N0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBGdW5jdGlvbiBTY2Fu IG9uIGdlbmVyYXRlX3NlcmllcyBnICAoY29zdD1OLi5OIHJvd3M9NSB3aWR0aD1OKSAoYWN0 dWFsIHJvd3M9NS4wMCBsb29wcz0xKQotKDEgcm93KQotCi0tLSBFbnN1cmUgdGhlIGVzdGlt YXRlcyBtYXRjaCB3aGVuIHN0ZXAgaXMgZGVjcmVhc2luZwotU0VMRUNUIGV4cGxhaW5fbWFz a19jb3N0cygkJAotU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoVElNRVNUQU1QVFog JzIwMjQtMDMtMDEnLCBUSU1FU1RBTVBUWiAnMjAyNC0wMi0wMScsIElOVEVSVkFMICctMSBk YXknKSBnKHMpOyQkLAotdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUpOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxhaW5fbWFza19jb3N0cyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLSBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnICAo Y29zdD1OLi5OIHJvd3M9MzAgd2lkdGg9TikgKGFjdHVhbCByb3dzPTMwLjAwIGxvb3BzPTEp Ci0oMSByb3cpCi0KLS0tIEVuc3VyZSBhbiBlbXB0eSByYW5nZSBlc3RpbWF0ZXMgMSByb3cK LVNFTEVDVCBleHBsYWluX21hc2tfY29zdHMoJCQKLVNFTEVDVCAqIEZST00gZ2VuZXJhdGVf c2VyaWVzKFRJTUVTVEFNUFRaICcyMDI0LTAzLTAxJywgVElNRVNUQU1QVFogJzIwMjQtMDIt MDEnLCBJTlRFUlZBTCAnMSBkYXknKSBnKHMpOyQkLAotdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRy dWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGFpbl9tYXNr X2Nvc3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJh dGVfc2VyaWVzIGcgIChjb3N0PU4uLk4gcm93cz0xIHdpZHRoPU4pIChhY3R1YWwgcm93cz0w LjAwIGxvb3BzPTEpCi0oMSByb3cpCi0KLS0tIEVuc3VyZSB3ZSBnZXQgdGhlIGRlZmF1bHQg cm93IGVzdGltYXRlIGZvciBpbmZpbml0eSB2YWx1ZXMKLVNFTEVDVCBleHBsYWluX21hc2tf Y29zdHMoJCQKLVNFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKFRJTUVTVEFNUFRaICct aW5maW5pdHknLCBUSU1FU1RBTVBUWiAnaW5maW5pdHknLCBJTlRFUlZBTCAnMSBkYXknKSBn KHMpOyQkLAotZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGV4cGxhaW5fbWFza19jb3N0cyAgICAgICAgICAgICAgICAgICAgICAgICAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KLSBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnICAoY29z dD1OLi5OIHJvd3M9MTAwMCB3aWR0aD1OKQotKDEgcm93KQotCi0tLSBFbnN1cmUgdGhlIHJv dyBlc3RpbWF0ZSBiZWhhdmVzIGNvcnJlY3RseSB3aGVuIHN0ZXAgc2l6ZSBpcyB6ZXJvLgot LS0gV2UgZXhwZWN0IGdlbmVyYXRlX3Nlcmllc190aW1lc3RhbXAoKSB0byB0aHJvdyB0aGUg ZXJyb3IgcmF0aGVyIHRoYW4gaW4KLS0tIHRoZSBzdXBwb3J0IGZ1bmN0aW9uLgotU0VMRUNU ICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoVElNRVNUQU1QVFogJzIwMjQtMDItMDEnLCBUSU1F U1RBTVBUWiAnMjAyNC0wMy0wMScsIElOVEVSVkFMICcwIGRheScpIGcocyk7Ci1FUlJPUjog IHN0ZXAgc2l6ZSBjYW5ub3QgZXF1YWwgemVybwotLS0KLS0tIFRlc3QgdGhlIFN1cHBvcnRS ZXF1ZXN0Um93cyBzdXBwb3J0IGZ1bmN0aW9uIGZvciBnZW5lcmF0ZV9zZXJpZXNfbnVtZXJp YygpCi0tLQotLS0gRW5zdXJlIHRoZSByb3cgZXN0aW1hdGUgbWF0Y2hlcyB0aGUgYWN0dWFs IHJvd3MKLVNFTEVDVCBleHBsYWluX21hc2tfY29zdHMoJCQKLVNFTEVDVCAqIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEuMCwgMjUuMCkgZyhzKTskJCwKLXRydWUsIHRydWUsIGZhbHNlLCB0 cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBsYWluX21h c2tfY29zdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gRnVuY3Rpb24gU2NhbiBvbiBn ZW5lcmF0ZV9zZXJpZXMgZyAgKGNvc3Q9Ti4uTiByb3dzPTI1IHdpZHRoPU4pIChhY3R1YWwg cm93cz0yNS4wMCBsb29wcz0xKQotKDEgcm93KQotCi0tLSBBcyBhYm92ZSBidXQgd2l0aCBu b24tZGVmYXVsdCBzdGVwCi1TRUxFQ1QgZXhwbGFpbl9tYXNrX2Nvc3RzKCQkCi1TRUxFQ1Qg KiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLjAsIDI1LjAsIDIuMCkgZyhzKTskJCwKLXRydWUs IHRydWUsIGZhbHNlLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBleHBsYWluX21hc2tfY29zdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gRnVu Y3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZyAgKGNvc3Q9Ti4uTiByb3dzPTEzIHdp ZHRoPU4pIChhY3R1YWwgcm93cz0xMy4wMCBsb29wcz0xKQotKDEgcm93KQotCi0tLSBFbnN1 cmUgdGhlIGVzdGltYXRlcyBtYXRjaCB3aGVuIHN0ZXAgaXMgZGVjcmVhc2luZwotU0VMRUNU IGV4cGxhaW5fbWFza19jb3N0cygkJAotU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MjUuMCwgMS4wLCAtMS4wKSBnKHMpOyQkLAotdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUpOwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxhaW5fbWFza19jb3N0 cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRl X3NlcmllcyBnICAoY29zdD1OLi5OIHJvd3M9MjUgd2lkdGg9TikgKGFjdHVhbCByb3dzPTI1 LjAwIGxvb3BzPTEpCi0oMSByb3cpCi0KLS0tIEVuc3VyZSBhbiBlbXB0eSByYW5nZSBlc3Rp bWF0ZXMgMSByb3cKLVNFTEVDVCBleHBsYWluX21hc2tfY29zdHMoJCQKLVNFTEVDVCAqIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDI1LjAsIDEuMCwgMS4wKSBnKHMpOyQkLAotdHJ1ZSwgdHJ1 ZSwgZmFsc2UsIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZXhwbGFpbl9tYXNrX2Nvc3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIEZ1bmN0aW9uIFNj YW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcgIChjb3N0PU4uLk4gcm93cz0xIHdpZHRoPU4pIChh Y3R1YWwgcm93cz0wLjAwIGxvb3BzPTEpCi0oMSByb3cpCi0KLS0tIEVuc3VyZSB3ZSBnZXQg dGhlIGRlZmF1bHQgcm93IGVzdGltYXRlIGZvciBlcnJvciBjYXNlcyAoaW5maW5pdHkvTmFO IHZhbHVlcwotLS0gYW5kIHplcm8gc3RlcCBzaXplKQotU0VMRUNUIGV4cGxhaW5fbWFza19j b3N0cygkJAotU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoJy1pbmZpbml0eSc6Ok5V TUVSSUMsICdpbmZpbml0eSc6Ok5VTUVSSUMsIDEuMCkgZyhzKTskJCwKLWZhbHNlLCB0cnVl LCBmYWxzZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHBsYWluX21hc2tf Y29zdHMgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gRnVuY3Rp b24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZyAgKGNvc3Q9Ti4uTiByb3dzPTEwMDAgd2lk dGg9TikKLSgxIHJvdykKLQotU0VMRUNUIGV4cGxhaW5fbWFza19jb3N0cygkJAotU0VMRUNU ICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMS4wLCAyNS4wLCAnTmFOJzo6TlVNRVJJQykgZyhz KTskJCwKLWZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBleHBsYWluX21hc2tfY29zdHMgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCi0gRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZyAgKGNvc3Q9 Ti4uTiByb3dzPTEwMDAgd2lkdGg9TikKLSgxIHJvdykKLQotU0VMRUNUIGV4cGxhaW5fbWFz a19jb3N0cygkJAotU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjUuMCwgMi4wLCAw LjApIGcocyk7JCQsCi1mYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUpOwotICAgICAgICAgICAg ICAgICAgICAgICAgZXhwbGFpbl9tYXNrX2Nvc3RzICAgICAgICAgICAgICAgICAgICAgICAg IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcg IChjb3N0PU4uLk4gcm93cz0xMDAwIHdpZHRoPU4pCi0oMSByb3cpCi0KIC0tCiAtLSBUZXN0 IFN1cHBvcnRSZXF1ZXN0SW5saW5lSW5Gcm9tIHJlcXVlc3QKIC0tCkBAIC05NzAsNyArNzkz LDYgQEAgU0VMRUNUIHBnX2NvbHVtbl90b2FzdF9jaHVua19pZChhKSBJUyBOVUxMLAogKDEg cm93KQogCiBEUk9QIFRBQkxFIHRlc3RfY2h1bmtfaWQ7Ci1EUk9QIEZVTkNUSU9OIGV4cGxh aW5fbWFza19jb3N0cyh0ZXh0LCBib29sLCBib29sLCBib29sLCBib29sKTsKIC0tIHRlc3Qg c3RyYXRudW0gdHJhbnNsYXRpb24gc3VwcG9ydCBmdW5jdGlvbnMKIFNFTEVDVCBnaXN0X3Ry YW5zbGF0ZV9jbXB0eXBlX2NvbW1vbig3KTsKICBnaXN0X3RyYW5zbGF0ZV9jbXB0eXBlX2Nv bW1vbiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc2VsZWN0aXZp dHlfZXN0Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc2VsZWN0aXZpdHlfZXN0 Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGZjNWM5Yzll MDcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NlbGVj dGl2aXR5X2VzdC5vdXQKQEAgLTAsMCArMSwxNzggQEAKKy0tIEZ1bmN0aW9uIHRvIGFzc2lz dCB3aXRoIHZlcmlmeWluZyBFWFBMQUlOIHdoaWNoIGluY2x1ZGVzIGNvc3RzLiAgQSBzZXJp ZXMKKy0tIG9mIGJvb2wgZmxhZ3MgYWxsb3dzIGNvbnRyb2wgb3ZlciB3aGljaCBwb3J0aW9u cyBhcmUgbWFza2VkIG91dAorQ1JFQVRFIEZVTkNUSU9OIGV4cGxhaW5fbWFza19jb3N0cyhx dWVyeSB0ZXh0LCBkb19hbmFseXplIGJvb2wsCisgICAgaGlkZV9jb3N0cyBib29sLCBoaWRl X3Jvd19lc3QgYm9vbCwgaGlkZV93aWR0aCBib29sKSBSRVRVUk5TIHNldG9mIHRleHQKK0xB TkdVQUdFIHBscGdzcWwgQVMKKyQkCitERUNMQVJFCisgICAgbG4gdGV4dDsKKyAgICBhbmFs eXplX3N0ciB0ZXh0OworQkVHSU4KKyAgICBJRiBkb19hbmFseXplID0gdHJ1ZSBUSEVOCisg ICAgICAgIGFuYWx5emVfc3RyIDo9ICdvbic7CisgICAgRUxTRQorICAgICAgICBhbmFseXpl X3N0ciA6PSAnb2ZmJzsKKyAgICBFTkQgSUY7CisKKyAgICAtLSBhdm9pZCBqaXQgcmVsYXRl ZCBvdXRwdXQgYnkgZGlzYWJsaW5nIGl0CisgICAgU0VUIExPQ0FMIGppdCA9IDA7CisKKyAg ICBGT1IgbG4gSU4KKyAgICAgICAgRVhFQ1VURSBmb3JtYXQoJ2V4cGxhaW4gKGFuYWx5emUg JXMsIGNvc3RzIG9uLCBzdW1tYXJ5IG9mZiwgdGltaW5nIG9mZiwgYnVmZmVycyBvZmYpICVz JywKKyAgICAgICAgICAgIGFuYWx5emVfc3RyLCBxdWVyeSkKKyAgICBMT09QCisgICAgICAg IElGIGhpZGVfY29zdHMgPSB0cnVlIFRIRU4KKyAgICAgICAgICAgIGxuIDo9IHJlZ2V4cF9y ZXBsYWNlKGxuLCAnY29zdD1cZCtcLlxkXGRcLlwuXGQrXC5cZFxkJywgJ2Nvc3Q9Ti4uTicp OworICAgICAgICBFTkQgSUY7CisKKyAgICAgICAgSUYgaGlkZV9yb3dfZXN0ID0gdHJ1ZSBU SEVOCisgICAgICAgICAgICAtLSBkb24ndCB1c2UgJ2cnIHNvIHRoYXQgd2UgbGVhdmUgdGhl IGFjdHVhbCByb3dzIGludGFjdAorICAgICAgICAgICAgbG4gOj0gcmVnZXhwX3JlcGxhY2Uo bG4sICdyb3dzPVxkKycsICdyb3dzPU4nKTsKKyAgICAgICAgRU5EIElGOworCisgICAgICAg IElGIGhpZGVfd2lkdGggPSB0cnVlIFRIRU4KKyAgICAgICAgICAgIGxuIDo9IHJlZ2V4cF9y ZXBsYWNlKGxuLCAnd2lkdGg9XGQrJywgJ3dpZHRoPU4nKTsKKyAgICAgICAgRU5EIElGOwor CisgICAgICAgIFJFVFVSTiBORVhUIGxuOworICAgIEVORCBMT09QOworRU5EOworJCQ7Cist LQorLS0gVGVzdCB0aGUgU3VwcG9ydFJlcXVlc3RSb3dzIHN1cHBvcnQgZnVuY3Rpb24gZm9y IGdlbmVyYXRlX3Nlcmllc190aW1lc3RhbXAoKQorLS0KKy0tIEVuc3VyZSB0aGUgcm93IGVz dGltYXRlIG1hdGNoZXMgdGhlIGFjdHVhbCByb3dzCitTRUxFQ1QgZXhwbGFpbl9tYXNrX2Nv c3RzKCQkCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcyhUSU1FU1RBTVBUWiAnMjAy NC0wMi0wMScsIFRJTUVTVEFNUFRaICcyMDI0LTAzLTAxJywgSU5URVJWQUwgJzEgZGF5Jykg ZyhzKTskJCwKK3RydWUsIHRydWUsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBleHBsYWluX21hc2tfY29zdHMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZyAgKGNvc3Q9 Ti4uTiByb3dzPTMwIHdpZHRoPU4pIChhY3R1YWwgcm93cz0zMC4wMCBsb29wcz0xKQorKDEg cm93KQorCistLSBBcyBhYm92ZSBidXQgd2l0aCBnZW5lcmF0ZV9zZXJpZXNfdGltZXN0YW1w CitTRUxFQ1QgZXhwbGFpbl9tYXNrX2Nvc3RzKCQkCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRl X3NlcmllcyhUSU1FU1RBTVAgJzIwMjQtMDItMDEnLCBUSU1FU1RBTVAgJzIwMjQtMDMtMDEn LCBJTlRFUlZBTCAnMSBkYXknKSBnKHMpOyQkLAordHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxhaW5fbWFza19j b3N0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGdW5jdGlvbiBTY2FuIG9uIGdlbmVy YXRlX3NlcmllcyBnICAoY29zdD1OLi5OIHJvd3M9MzAgd2lkdGg9TikgKGFjdHVhbCByb3dz PTMwLjAwIGxvb3BzPTEpCisoMSByb3cpCisKKy0tIEFzIGFib3ZlIGJ1dCB3aXRoIGdlbmVy YXRlX3Nlcmllc190aW1lc3RhbXB0el9hdF96b25lKCkKK1NFTEVDVCBleHBsYWluX21hc2tf Y29zdHMoJCQKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKFRJTUVTVEFNUFRaICcy MDI0LTAyLTAxJywgVElNRVNUQU1QVFogJzIwMjQtMDMtMDEnLCBJTlRFUlZBTCAnMSBkYXkn LCAnVVRDJykgZyhzKTskJCwKK3RydWUsIHRydWUsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBsYWluX21hc2tfY29zdHMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMg ZyAgKGNvc3Q9Ti4uTiByb3dzPTMwIHdpZHRoPU4pIChhY3R1YWwgcm93cz0zMC4wMCBsb29w cz0xKQorKDEgcm93KQorCistLSBFbnN1cmUgdGhlIGVzdGltYXRlZCBhbmQgYWN0dWFsIHJv dyBjb3VudHMgbWF0Y2ggd2hlbiB0aGUgcmFuZ2UgaXNuJ3QKKy0tIGV2ZW5seSBkaXZpc2li bGUgYnkgdGhlIHN0ZXAKK1NFTEVDVCBleHBsYWluX21hc2tfY29zdHMoJCQKK1NFTEVDVCAq IEZST00gZ2VuZXJhdGVfc2VyaWVzKFRJTUVTVEFNUFRaICcyMDI0LTAyLTAxJywgVElNRVNU QU1QVFogJzIwMjQtMDMtMDEnLCBJTlRFUlZBTCAnNyBkYXknKSBnKHMpOyQkLAordHJ1ZSwg dHJ1ZSwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZXhwbGFpbl9tYXNrX2Nvc3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZ1bmN0aW9u IFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcgIChjb3N0PU4uLk4gcm93cz01IHdpZHRoPU4p IChhY3R1YWwgcm93cz01LjAwIGxvb3BzPTEpCisoMSByb3cpCisKKy0tIEVuc3VyZSB0aGUg ZXN0aW1hdGVzIG1hdGNoIHdoZW4gc3RlcCBpcyBkZWNyZWFzaW5nCitTRUxFQ1QgZXhwbGFp bl9tYXNrX2Nvc3RzKCQkCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcyhUSU1FU1RB TVBUWiAnMjAyNC0wMy0wMScsIFRJTUVTVEFNUFRaICcyMDI0LTAyLTAxJywgSU5URVJWQUwg Jy0xIGRheScpIGcocyk7JCQsCit0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGFpbl9tYXNrX2Nvc3RzICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVz IGcgIChjb3N0PU4uLk4gcm93cz0zMCB3aWR0aD1OKSAoYWN0dWFsIHJvd3M9MzAuMDAgbG9v cHM9MSkKKygxIHJvdykKKworLS0gRW5zdXJlIGFuIGVtcHR5IHJhbmdlIGVzdGltYXRlcyAx IHJvdworU0VMRUNUIGV4cGxhaW5fbWFza19jb3N0cygkJAorU0VMRUNUICogRlJPTSBnZW5l cmF0ZV9zZXJpZXMoVElNRVNUQU1QVFogJzIwMjQtMDMtMDEnLCBUSU1FU1RBTVBUWiAnMjAy NC0wMi0wMScsIElOVEVSVkFMICcxIGRheScpIGcocyk7JCQsCit0cnVlLCB0cnVlLCBmYWxz ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBsYWlu X21hc2tfY29zdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRnVuY3Rpb24gU2NhbiBvbiBn ZW5lcmF0ZV9zZXJpZXMgZyAgKGNvc3Q9Ti4uTiByb3dzPTEgd2lkdGg9TikgKGFjdHVhbCBy b3dzPTAuMDAgbG9vcHM9MSkKKygxIHJvdykKKworLS0gRW5zdXJlIHdlIGdldCB0aGUgZGVm YXVsdCByb3cgZXN0aW1hdGUgZm9yIGluZmluaXR5IHZhbHVlcworU0VMRUNUIGV4cGxhaW5f bWFza19jb3N0cygkJAorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoVElNRVNUQU1Q VFogJy1pbmZpbml0eScsIFRJTUVTVEFNUFRaICdpbmZpbml0eScsIElOVEVSVkFMICcxIGRh eScpIGcocyk7JCQsCitmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAg ICAgICAgICAgICAgZXhwbGFpbl9tYXNrX2Nvc3RzICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcg IChjb3N0PU4uLk4gcm93cz0xMDAwIHdpZHRoPU4pCisoMSByb3cpCisKKy0tIEVuc3VyZSB0 aGUgcm93IGVzdGltYXRlIGJlaGF2ZXMgY29ycmVjdGx5IHdoZW4gc3RlcCBzaXplIGlzIHpl cm8uCistLSBXZSBleHBlY3QgZ2VuZXJhdGVfc2VyaWVzX3RpbWVzdGFtcCgpIHRvIHRocm93 IHRoZSBlcnJvciByYXRoZXIgdGhhbiBpbgorLS0gdGhlIHN1cHBvcnQgZnVuY3Rpb24uCitT RUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcyhUSU1FU1RBTVBUWiAnMjAyNC0wMi0wMScs IFRJTUVTVEFNUFRaICcyMDI0LTAzLTAxJywgSU5URVJWQUwgJzAgZGF5JykgZyhzKTsKK0VS Uk9SOiAgc3RlcCBzaXplIGNhbm5vdCBlcXVhbCB6ZXJvCistLQorLS0gVGVzdCB0aGUgU3Vw cG9ydFJlcXVlc3RSb3dzIHN1cHBvcnQgZnVuY3Rpb24gZm9yIGdlbmVyYXRlX3Nlcmllc19u dW1lcmljKCkKKy0tCistLSBFbnN1cmUgdGhlIHJvdyBlc3RpbWF0ZSBtYXRjaGVzIHRoZSBh Y3R1YWwgcm93cworU0VMRUNUIGV4cGxhaW5fbWFza19jb3N0cygkJAorU0VMRUNUICogRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMS4wLCAyNS4wKSBnKHMpOyQkLAordHJ1ZSwgdHJ1ZSwgZmFs c2UsIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxh aW5fbWFza19jb3N0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGdW5jdGlvbiBTY2Fu IG9uIGdlbmVyYXRlX3NlcmllcyBnICAoY29zdD1OLi5OIHJvd3M9MjUgd2lkdGg9TikgKGFj dHVhbCByb3dzPTI1LjAwIGxvb3BzPTEpCisoMSByb3cpCisKKy0tIEFzIGFib3ZlIGJ1dCB3 aXRoIG5vbi1kZWZhdWx0IHN0ZXAKK1NFTEVDVCBleHBsYWluX21hc2tfY29zdHMoJCQKK1NF TEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEuMCwgMjUuMCwgMi4wKSBnKHMpOyQkLAor dHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGV4cGxhaW5fbWFza19jb3N0cyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnICAoY29zdD1OLi5OIHJvd3M9 MTMgd2lkdGg9TikgKGFjdHVhbCByb3dzPTEzLjAwIGxvb3BzPTEpCisoMSByb3cpCisKKy0t IEVuc3VyZSB0aGUgZXN0aW1hdGVzIG1hdGNoIHdoZW4gc3RlcCBpcyBkZWNyZWFzaW5nCitT RUxFQ1QgZXhwbGFpbl9tYXNrX2Nvc3RzKCQkCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3Nl cmllcygyNS4wLCAxLjAsIC0xLjApIGcocyk7JCQsCit0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1 ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGFpbl9tYXNr X2Nvc3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZ1bmN0aW9uIFNjYW4gb24gZ2Vu ZXJhdGVfc2VyaWVzIGcgIChjb3N0PU4uLk4gcm93cz0yNSB3aWR0aD1OKSAoYWN0dWFsIHJv d3M9MjUuMDAgbG9vcHM9MSkKKygxIHJvdykKKworLS0gRW5zdXJlIGFuIGVtcHR5IHJhbmdl IGVzdGltYXRlcyAxIHJvdworU0VMRUNUIGV4cGxhaW5fbWFza19jb3N0cygkJAorU0VMRUNU ICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjUuMCwgMS4wLCAxLjApIGcocyk7JCQsCit0cnVl LCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBleHBsYWluX21hc2tfY29zdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRnVuY3Rp b24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZyAgKGNvc3Q9Ti4uTiByb3dzPTEgd2lkdGg9 TikgKGFjdHVhbCByb3dzPTAuMDAgbG9vcHM9MSkKKygxIHJvdykKKworLS0gRW5zdXJlIHdl IGdldCB0aGUgZGVmYXVsdCByb3cgZXN0aW1hdGUgZm9yIGVycm9yIGNhc2VzIChpbmZpbml0 eS9OYU4gdmFsdWVzCistLSBhbmQgemVybyBzdGVwIHNpemUpCitTRUxFQ1QgZXhwbGFpbl9t YXNrX2Nvc3RzKCQkCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygnLWluZmluaXR5 Jzo6TlVNRVJJQywgJ2luZmluaXR5Jzo6TlVNRVJJQywgMS4wKSBnKHMpOyQkLAorZmFsc2Us IHRydWUsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxhaW5f bWFza19jb3N0cyAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBG dW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnICAoY29zdD1OLi5OIHJvd3M9MTAw MCB3aWR0aD1OKQorKDEgcm93KQorCitTRUxFQ1QgZXhwbGFpbl9tYXNrX2Nvc3RzKCQkCitT RUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLjAsIDI1LjAsICdOYU4nOjpOVU1FUklD KSBnKHMpOyQkLAorZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGV4cGxhaW5fbWFza19jb3N0cyAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnICAo Y29zdD1OLi5OIHJvd3M9MTAwMCB3aWR0aD1OKQorKDEgcm93KQorCitTRUxFQ1QgZXhwbGFp bl9tYXNrX2Nvc3RzKCQkCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygyNS4wLCAy LjAsIDAuMCkgZyhzKTskJCwKK2ZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAg ICAgICAgICAgICAgICAgICBleHBsYWluX21hc2tfY29zdHMgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJp ZXMgZyAgKGNvc3Q9Ti4uTiByb3dzPTEwMDAgd2lkdGg9TikKKygxIHJvdykKKworRFJPUCBG VU5DVElPTiBleHBsYWluX21hc2tfY29zdHModGV4dCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9v bCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlIGIv c3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQppbmRleCBlNzc5YWRhNzBjYi4u NjQ1ZjQ5MzMxOWIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2No ZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQpAQCAtMTIz LDcgKzEyMyw3IEBAIHRlc3Q6IHBsYW5jYWNoZSBsaW1pdCBwbHBnc3FsIGNvcHkyIHRlbXAg ZG9tYWluIHJhbmdlZnVuY3MgcHJlcGFyZSBjb252ZXJzaW9uIHRyCiAjIFRoZSBzdGF0cyB0 ZXN0IHJlc2V0cyBzdGF0cywgc28gbm90aGluZyBlbHNlIG5lZWRpbmcgc3RhdHMgYWNjZXNz IGNhbiBiZSBpbgogIyB0aGlzIGdyb3VwLgogIyAtLS0tLS0tLS0tCi10ZXN0OiBwYXJ0aXRp b25fbWVyZ2UgcGFydGl0aW9uX3NwbGl0IHBhcnRpdGlvbl9qb2luIHBhcnRpdGlvbl9wcnVu ZSByZWxvcHRpb25zIGhhc2hfcGFydCBpbmRleGluZyBwYXJ0aXRpb25fYWdncmVnYXRlIHBh cnRpdGlvbl9pbmZvIHR1cGxlc29ydCBleHBsYWluIGNvbXByZXNzaW9uIGNvbXByZXNzaW9u X2x6NCBtZW1vaXplIHN0YXRzIHByZWRpY2F0ZSBudW1hIGVhZ2VyX2FnZ3JlZ2F0ZSBncmFw aF90YWJsZV9ybHMKK3Rlc3Q6IHBhcnRpdGlvbl9tZXJnZSBwYXJ0aXRpb25fc3BsaXQgcGFy dGl0aW9uX2pvaW4gcGFydGl0aW9uX3BydW5lIHJlbG9wdGlvbnMgaGFzaF9wYXJ0IGluZGV4 aW5nIHBhcnRpdGlvbl9hZ2dyZWdhdGUgcGFydGl0aW9uX2luZm8gdHVwbGVzb3J0IGV4cGxh aW4gY29tcHJlc3Npb24gY29tcHJlc3Npb25fbHo0IG1lbW9pemUgc3RhdHMgcHJlZGljYXRl IG51bWEgZWFnZXJfYWdncmVnYXRlIGdyYXBoX3RhYmxlX3JscyBzZWxlY3Rpdml0eV9lc3QK IAogIyBldmVudF90cmlnZ2VyIGRlcGVuZHMgb24gY3JlYXRlX2FtIGFuZCBjYW5ub3QgcnVu IGNvbmN1cnJlbnRseSB3aXRoCiAjIGFueSB0ZXN0IHRoYXQgcnVucyBEREwKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbCBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbAppbmRleCAzNWI3OTgzOTk2Yy4uYzgy MjY2NTJmMmMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rp b25zLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9taXNjX2Z1bmN0aW9ucy5zcWwK QEAgLTQsNDcgKzQsNiBAQAogCiBcc2V0IHJlZ3Jlc3NsaWIgOmxpYmRpciAnL3JlZ3Jlc3Mn IDpkbHN1ZmZpeAogCi0tLSBGdW5jdGlvbiB0byBhc3Npc3Qgd2l0aCB2ZXJpZnlpbmcgRVhQ TEFJTiB3aGljaCBpbmNsdWRlcyBjb3N0cy4gIEEgc2VyaWVzCi0tLSBvZiBib29sIGZsYWdz IGFsbG93cyBjb250cm9sIG92ZXIgd2hpY2ggcG9ydGlvbnMgYXJlIG1hc2tlZCBvdXQKLUNS RUFURSBGVU5DVElPTiBleHBsYWluX21hc2tfY29zdHMocXVlcnkgdGV4dCwgZG9fYW5hbHl6 ZSBib29sLAotICAgIGhpZGVfY29zdHMgYm9vbCwgaGlkZV9yb3dfZXN0IGJvb2wsIGhpZGVf d2lkdGggYm9vbCkgUkVUVVJOUyBzZXRvZiB0ZXh0Ci1MQU5HVUFHRSBwbHBnc3FsIEFTCi0k JAotREVDTEFSRQotICAgIGxuIHRleHQ7Ci0gICAgYW5hbHl6ZV9zdHIgdGV4dDsKLUJFR0lO Ci0gICAgSUYgZG9fYW5hbHl6ZSA9IHRydWUgVEhFTgotICAgICAgICBhbmFseXplX3N0ciA6 PSAnb24nOwotICAgIEVMU0UKLSAgICAgICAgYW5hbHl6ZV9zdHIgOj0gJ29mZic7Ci0gICAg RU5EIElGOwotCi0gICAgLS0gYXZvaWQgaml0IHJlbGF0ZWQgb3V0cHV0IGJ5IGRpc2FibGlu ZyBpdAotICAgIFNFVCBMT0NBTCBqaXQgPSAwOwotCi0gICAgRk9SIGxuIElOCi0gICAgICAg IEVYRUNVVEUgZm9ybWF0KCdleHBsYWluIChhbmFseXplICVzLCBjb3N0cyBvbiwgc3VtbWFy eSBvZmYsIHRpbWluZyBvZmYsIGJ1ZmZlcnMgb2ZmKSAlcycsCi0gICAgICAgICAgICBhbmFs eXplX3N0ciwgcXVlcnkpCi0gICAgTE9PUAotICAgICAgICBJRiBoaWRlX2Nvc3RzID0gdHJ1 ZSBUSEVOCi0gICAgICAgICAgICBsbiA6PSByZWdleHBfcmVwbGFjZShsbiwgJ2Nvc3Q9XGQr XC5cZFxkXC5cLlxkK1wuXGRcZCcsICdjb3N0PU4uLk4nKTsKLSAgICAgICAgRU5EIElGOwot Ci0gICAgICAgIElGIGhpZGVfcm93X2VzdCA9IHRydWUgVEhFTgotICAgICAgICAgICAgLS0g ZG9uJ3QgdXNlICdnJyBzbyB0aGF0IHdlIGxlYXZlIHRoZSBhY3R1YWwgcm93cyBpbnRhY3QK LSAgICAgICAgICAgIGxuIDo9IHJlZ2V4cF9yZXBsYWNlKGxuLCAncm93cz1cZCsnLCAncm93 cz1OJyk7Ci0gICAgICAgIEVORCBJRjsKLQotICAgICAgICBJRiBoaWRlX3dpZHRoID0gdHJ1 ZSBUSEVOCi0gICAgICAgICAgICBsbiA6PSByZWdleHBfcmVwbGFjZShsbiwgJ3dpZHRoPVxk KycsICd3aWR0aD1OJyk7Ci0gICAgICAgIEVORCBJRjsKLQotICAgICAgICBSRVRVUk4gTkVY VCBsbjsKLSAgICBFTkQgTE9PUDsKLUVORDsKLSQkOwotCiAtLQogLS0gbnVtX251bGxzKCkK IC0tCkBAIC0yNzcsODkgKzIzNiw2IEBAIFNFTEVDVCAqIEZST00gdGVuazEgYSBKT0lOIG15 X2dlbl9zZXJpZXMoMSwxMDAwKSBnIE9OIGEudW5pcXVlMSA9IGc7CiBFWFBMQUlOIChDT1NU UyBPRkYpCiBTRUxFQ1QgKiBGUk9NIHRlbmsxIGEgSk9JTiBteV9nZW5fc2VyaWVzKDEsMTAp IGcgT04gYS51bmlxdWUxID0gZzsKIAotLS0KLS0tIFRlc3QgdGhlIFN1cHBvcnRSZXF1ZXN0 Um93cyBzdXBwb3J0IGZ1bmN0aW9uIGZvciBnZW5lcmF0ZV9zZXJpZXNfdGltZXN0YW1wKCkK LS0tCi0KLS0tIEVuc3VyZSB0aGUgcm93IGVzdGltYXRlIG1hdGNoZXMgdGhlIGFjdHVhbCBy b3dzCi1TRUxFQ1QgZXhwbGFpbl9tYXNrX2Nvc3RzKCQkCi1TRUxFQ1QgKiBGUk9NIGdlbmVy YXRlX3NlcmllcyhUSU1FU1RBTVBUWiAnMjAyNC0wMi0wMScsIFRJTUVTVEFNUFRaICcyMDI0 LTAzLTAxJywgSU5URVJWQUwgJzEgZGF5JykgZyhzKTskJCwKLXRydWUsIHRydWUsIGZhbHNl LCB0cnVlKTsKLQotLS0gQXMgYWJvdmUgYnV0IHdpdGggZ2VuZXJhdGVfc2VyaWVzX3RpbWVz dGFtcAotU0VMRUNUIGV4cGxhaW5fbWFza19jb3N0cygkJAotU0VMRUNUICogRlJPTSBnZW5l cmF0ZV9zZXJpZXMoVElNRVNUQU1QICcyMDI0LTAyLTAxJywgVElNRVNUQU1QICcyMDI0LTAz LTAxJywgSU5URVJWQUwgJzEgZGF5JykgZyhzKTskJCwKLXRydWUsIHRydWUsIGZhbHNlLCB0 cnVlKTsKLQotLS0gQXMgYWJvdmUgYnV0IHdpdGggZ2VuZXJhdGVfc2VyaWVzX3RpbWVzdGFt cHR6X2F0X3pvbmUoKQotU0VMRUNUIGV4cGxhaW5fbWFza19jb3N0cygkJAotU0VMRUNUICog RlJPTSBnZW5lcmF0ZV9zZXJpZXMoVElNRVNUQU1QVFogJzIwMjQtMDItMDEnLCBUSU1FU1RB TVBUWiAnMjAyNC0wMy0wMScsIElOVEVSVkFMICcxIGRheScsICdVVEMnKSBnKHMpOyQkLAot dHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUpOwotCi0tLSBFbnN1cmUgdGhlIGVzdGltYXRlZCBh bmQgYWN0dWFsIHJvdyBjb3VudHMgbWF0Y2ggd2hlbiB0aGUgcmFuZ2UgaXNuJ3QKLS0tIGV2 ZW5seSBkaXZpc2libGUgYnkgdGhlIHN0ZXAKLVNFTEVDVCBleHBsYWluX21hc2tfY29zdHMo JCQKLVNFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKFRJTUVTVEFNUFRaICcyMDI0LTAy LTAxJywgVElNRVNUQU1QVFogJzIwMjQtMDMtMDEnLCBJTlRFUlZBTCAnNyBkYXknKSBnKHMp OyQkLAotdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUpOwotCi0tLSBFbnN1cmUgdGhlIGVzdGlt YXRlcyBtYXRjaCB3aGVuIHN0ZXAgaXMgZGVjcmVhc2luZwotU0VMRUNUIGV4cGxhaW5fbWFz a19jb3N0cygkJAotU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoVElNRVNUQU1QVFog JzIwMjQtMDMtMDEnLCBUSU1FU1RBTVBUWiAnMjAyNC0wMi0wMScsIElOVEVSVkFMICctMSBk YXknKSBnKHMpOyQkLAotdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUpOwotCi0tLSBFbnN1cmUg YW4gZW1wdHkgcmFuZ2UgZXN0aW1hdGVzIDEgcm93Ci1TRUxFQ1QgZXhwbGFpbl9tYXNrX2Nv c3RzKCQkCi1TRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcyhUSU1FU1RBTVBUWiAnMjAy NC0wMy0wMScsIFRJTUVTVEFNUFRaICcyMDI0LTAyLTAxJywgSU5URVJWQUwgJzEgZGF5Jykg ZyhzKTskJCwKLXRydWUsIHRydWUsIGZhbHNlLCB0cnVlKTsKLQotLS0gRW5zdXJlIHdlIGdl dCB0aGUgZGVmYXVsdCByb3cgZXN0aW1hdGUgZm9yIGluZmluaXR5IHZhbHVlcwotU0VMRUNU IGV4cGxhaW5fbWFza19jb3N0cygkJAotU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMo VElNRVNUQU1QVFogJy1pbmZpbml0eScsIFRJTUVTVEFNUFRaICdpbmZpbml0eScsIElOVEVS VkFMICcxIGRheScpIGcocyk7JCQsCi1mYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUpOwotCi0t LSBFbnN1cmUgdGhlIHJvdyBlc3RpbWF0ZSBiZWhhdmVzIGNvcnJlY3RseSB3aGVuIHN0ZXAg c2l6ZSBpcyB6ZXJvLgotLS0gV2UgZXhwZWN0IGdlbmVyYXRlX3Nlcmllc190aW1lc3RhbXAo KSB0byB0aHJvdyB0aGUgZXJyb3IgcmF0aGVyIHRoYW4gaW4KLS0tIHRoZSBzdXBwb3J0IGZ1 bmN0aW9uLgotU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoVElNRVNUQU1QVFogJzIw MjQtMDItMDEnLCBUSU1FU1RBTVBUWiAnMjAyNC0wMy0wMScsIElOVEVSVkFMICcwIGRheScp IGcocyk7Ci0KLS0tCi0tLSBUZXN0IHRoZSBTdXBwb3J0UmVxdWVzdFJvd3Mgc3VwcG9ydCBm dW5jdGlvbiBmb3IgZ2VuZXJhdGVfc2VyaWVzX251bWVyaWMoKQotLS0KLQotLS0gRW5zdXJl IHRoZSByb3cgZXN0aW1hdGUgbWF0Y2hlcyB0aGUgYWN0dWFsIHJvd3MKLVNFTEVDVCBleHBs YWluX21hc2tfY29zdHMoJCQKLVNFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEuMCwg MjUuMCkgZyhzKTskJCwKLXRydWUsIHRydWUsIGZhbHNlLCB0cnVlKTsKLQotLS0gQXMgYWJv dmUgYnV0IHdpdGggbm9uLWRlZmF1bHQgc3RlcAotU0VMRUNUIGV4cGxhaW5fbWFza19jb3N0 cygkJAotU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMS4wLCAyNS4wLCAyLjApIGco cyk7JCQsCi10cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7Ci0KLS0tIEVuc3VyZSB0aGUgZXN0 aW1hdGVzIG1hdGNoIHdoZW4gc3RlcCBpcyBkZWNyZWFzaW5nCi1TRUxFQ1QgZXhwbGFpbl9t YXNrX2Nvc3RzKCQkCi1TRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygyNS4wLCAxLjAs IC0xLjApIGcocyk7JCQsCi10cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7Ci0KLS0tIEVuc3Vy ZSBhbiBlbXB0eSByYW5nZSBlc3RpbWF0ZXMgMSByb3cKLVNFTEVDVCBleHBsYWluX21hc2tf Y29zdHMoJCQKLVNFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDI1LjAsIDEuMCwgMS4w KSBnKHMpOyQkLAotdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUpOwotCi0tLSBFbnN1cmUgd2Ug Z2V0IHRoZSBkZWZhdWx0IHJvdyBlc3RpbWF0ZSBmb3IgZXJyb3IgY2FzZXMgKGluZmluaXR5 L05hTiB2YWx1ZXMKLS0tIGFuZCB6ZXJvIHN0ZXAgc2l6ZSkKLVNFTEVDVCBleHBsYWluX21h c2tfY29zdHMoJCQKLVNFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKCctaW5maW5pdHkn OjpOVU1FUklDLCAnaW5maW5pdHknOjpOVU1FUklDLCAxLjApIGcocyk7JCQsCi1mYWxzZSwg dHJ1ZSwgZmFsc2UsIHRydWUpOwotCi1TRUxFQ1QgZXhwbGFpbl9tYXNrX2Nvc3RzKCQkCi1T RUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLjAsIDI1LjAsICdOYU4nOjpOVU1FUklD KSBnKHMpOyQkLAotZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlKTsKLQotU0VMRUNUIGV4cGxh aW5fbWFza19jb3N0cygkJAotU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjUuMCwg Mi4wLCAwLjApIGcocyk7JCQsCi1mYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUpOwotCiAtLQog LS0gVGVzdCBTdXBwb3J0UmVxdWVzdElubGluZUluRnJvbSByZXF1ZXN0CiAtLQpAQCAtNDQz LDcgKzMxOSw2IEBAIFNFTEVDVCBwZ19jb2x1bW5fdG9hc3RfY2h1bmtfaWQoYSkgSVMgTlVM TCwKICAgcGdfY29sdW1uX3RvYXN0X2NodW5rX2lkKGIpIElOIChTRUxFQ1QgY2h1bmtfaWQg RlJPTSBwZ190b2FzdC46dG9hc3RyZWwpCiAgIEZST00gdGVzdF9jaHVua19pZDsKIERST1Ag VEFCTEUgdGVzdF9jaHVua19pZDsKLURST1AgRlVOQ1RJT04gZXhwbGFpbl9tYXNrX2Nvc3Rz KHRleHQsIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wpOwogCiAtLSB0ZXN0IHN0cmF0bnVtIHRy YW5zbGF0aW9uIHN1cHBvcnQgZnVuY3Rpb25zCiBTRUxFQ1QgZ2lzdF90cmFuc2xhdGVfY21w dHlwZV9jb21tb24oNyk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zZWxl Y3Rpdml0eV9lc3Quc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc2VsZWN0aXZpdHlfZXN0 LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDE2ZDVlYTFm NzUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zZWxlY3Rpdml0 eV9lc3Quc3FsCkBAIC0wLDAgKzEsMTI2IEBACistLSBGdW5jdGlvbiB0byBhc3Npc3Qgd2l0 aCB2ZXJpZnlpbmcgRVhQTEFJTiB3aGljaCBpbmNsdWRlcyBjb3N0cy4gIEEgc2VyaWVzCist LSBvZiBib29sIGZsYWdzIGFsbG93cyBjb250cm9sIG92ZXIgd2hpY2ggcG9ydGlvbnMgYXJl IG1hc2tlZCBvdXQKK0NSRUFURSBGVU5DVElPTiBleHBsYWluX21hc2tfY29zdHMocXVlcnkg dGV4dCwgZG9fYW5hbHl6ZSBib29sLAorICAgIGhpZGVfY29zdHMgYm9vbCwgaGlkZV9yb3df ZXN0IGJvb2wsIGhpZGVfd2lkdGggYm9vbCkgUkVUVVJOUyBzZXRvZiB0ZXh0CitMQU5HVUFH RSBwbHBnc3FsIEFTCiskJAorREVDTEFSRQorICAgIGxuIHRleHQ7CisgICAgYW5hbHl6ZV9z dHIgdGV4dDsKK0JFR0lOCisgICAgSUYgZG9fYW5hbHl6ZSA9IHRydWUgVEhFTgorICAgICAg ICBhbmFseXplX3N0ciA6PSAnb24nOworICAgIEVMU0UKKyAgICAgICAgYW5hbHl6ZV9zdHIg Oj0gJ29mZic7CisgICAgRU5EIElGOworCisgICAgLS0gYXZvaWQgaml0IHJlbGF0ZWQgb3V0 cHV0IGJ5IGRpc2FibGluZyBpdAorICAgIFNFVCBMT0NBTCBqaXQgPSAwOworCisgICAgRk9S IGxuIElOCisgICAgICAgIEVYRUNVVEUgZm9ybWF0KCdleHBsYWluIChhbmFseXplICVzLCBj b3N0cyBvbiwgc3VtbWFyeSBvZmYsIHRpbWluZyBvZmYsIGJ1ZmZlcnMgb2ZmKSAlcycsCisg ICAgICAgICAgICBhbmFseXplX3N0ciwgcXVlcnkpCisgICAgTE9PUAorICAgICAgICBJRiBo aWRlX2Nvc3RzID0gdHJ1ZSBUSEVOCisgICAgICAgICAgICBsbiA6PSByZWdleHBfcmVwbGFj ZShsbiwgJ2Nvc3Q9XGQrXC5cZFxkXC5cLlxkK1wuXGRcZCcsICdjb3N0PU4uLk4nKTsKKyAg ICAgICAgRU5EIElGOworCisgICAgICAgIElGIGhpZGVfcm93X2VzdCA9IHRydWUgVEhFTgor ICAgICAgICAgICAgLS0gZG9uJ3QgdXNlICdnJyBzbyB0aGF0IHdlIGxlYXZlIHRoZSBhY3R1 YWwgcm93cyBpbnRhY3QKKyAgICAgICAgICAgIGxuIDo9IHJlZ2V4cF9yZXBsYWNlKGxuLCAn cm93cz1cZCsnLCAncm93cz1OJyk7CisgICAgICAgIEVORCBJRjsKKworICAgICAgICBJRiBo aWRlX3dpZHRoID0gdHJ1ZSBUSEVOCisgICAgICAgICAgICBsbiA6PSByZWdleHBfcmVwbGFj ZShsbiwgJ3dpZHRoPVxkKycsICd3aWR0aD1OJyk7CisgICAgICAgIEVORCBJRjsKKworICAg ICAgICBSRVRVUk4gTkVYVCBsbjsKKyAgICBFTkQgTE9PUDsKK0VORDsKKyQkOworCistLQor LS0gVGVzdCB0aGUgU3VwcG9ydFJlcXVlc3RSb3dzIHN1cHBvcnQgZnVuY3Rpb24gZm9yIGdl bmVyYXRlX3Nlcmllc190aW1lc3RhbXAoKQorLS0KKworLS0gRW5zdXJlIHRoZSByb3cgZXN0 aW1hdGUgbWF0Y2hlcyB0aGUgYWN0dWFsIHJvd3MKK1NFTEVDVCBleHBsYWluX21hc2tfY29z dHMoJCQKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKFRJTUVTVEFNUFRaICcyMDI0 LTAyLTAxJywgVElNRVNUQU1QVFogJzIwMjQtMDMtMDEnLCBJTlRFUlZBTCAnMSBkYXknKSBn KHMpOyQkLAordHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUpOworCistLSBBcyBhYm92ZSBidXQg d2l0aCBnZW5lcmF0ZV9zZXJpZXNfdGltZXN0YW1wCitTRUxFQ1QgZXhwbGFpbl9tYXNrX2Nv c3RzKCQkCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcyhUSU1FU1RBTVAgJzIwMjQt MDItMDEnLCBUSU1FU1RBTVAgJzIwMjQtMDMtMDEnLCBJTlRFUlZBTCAnMSBkYXknKSBnKHMp OyQkLAordHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUpOworCistLSBBcyBhYm92ZSBidXQgd2l0 aCBnZW5lcmF0ZV9zZXJpZXNfdGltZXN0YW1wdHpfYXRfem9uZSgpCitTRUxFQ1QgZXhwbGFp bl9tYXNrX2Nvc3RzKCQkCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcyhUSU1FU1RB TVBUWiAnMjAyNC0wMi0wMScsIFRJTUVTVEFNUFRaICcyMDI0LTAzLTAxJywgSU5URVJWQUwg JzEgZGF5JywgJ1VUQycpIGcocyk7JCQsCit0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CisK Ky0tIEVuc3VyZSB0aGUgZXN0aW1hdGVkIGFuZCBhY3R1YWwgcm93IGNvdW50cyBtYXRjaCB3 aGVuIHRoZSByYW5nZSBpc24ndAorLS0gZXZlbmx5IGRpdmlzaWJsZSBieSB0aGUgc3RlcAor U0VMRUNUIGV4cGxhaW5fbWFza19jb3N0cygkJAorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoVElNRVNUQU1QVFogJzIwMjQtMDItMDEnLCBUSU1FU1RBTVBUWiAnMjAyNC0wMy0w MScsIElOVEVSVkFMICc3IGRheScpIGcocyk7JCQsCit0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1 ZSk7CisKKy0tIEVuc3VyZSB0aGUgZXN0aW1hdGVzIG1hdGNoIHdoZW4gc3RlcCBpcyBkZWNy ZWFzaW5nCitTRUxFQ1QgZXhwbGFpbl9tYXNrX2Nvc3RzKCQkCitTRUxFQ1QgKiBGUk9NIGdl bmVyYXRlX3NlcmllcyhUSU1FU1RBTVBUWiAnMjAyNC0wMy0wMScsIFRJTUVTVEFNUFRaICcy MDI0LTAyLTAxJywgSU5URVJWQUwgJy0xIGRheScpIGcocyk7JCQsCit0cnVlLCB0cnVlLCBm YWxzZSwgdHJ1ZSk7CisKKy0tIEVuc3VyZSBhbiBlbXB0eSByYW5nZSBlc3RpbWF0ZXMgMSBy b3cKK1NFTEVDVCBleHBsYWluX21hc2tfY29zdHMoJCQKK1NFTEVDVCAqIEZST00gZ2VuZXJh dGVfc2VyaWVzKFRJTUVTVEFNUFRaICcyMDI0LTAzLTAxJywgVElNRVNUQU1QVFogJzIwMjQt MDItMDEnLCBJTlRFUlZBTCAnMSBkYXknKSBnKHMpOyQkLAordHJ1ZSwgdHJ1ZSwgZmFsc2Us IHRydWUpOworCistLSBFbnN1cmUgd2UgZ2V0IHRoZSBkZWZhdWx0IHJvdyBlc3RpbWF0ZSBm b3IgaW5maW5pdHkgdmFsdWVzCitTRUxFQ1QgZXhwbGFpbl9tYXNrX2Nvc3RzKCQkCitTRUxF Q1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcyhUSU1FU1RBTVBUWiAnLWluZmluaXR5JywgVElN RVNUQU1QVFogJ2luZmluaXR5JywgSU5URVJWQUwgJzEgZGF5JykgZyhzKTskJCwKK2ZhbHNl LCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CisKKy0tIEVuc3VyZSB0aGUgcm93IGVzdGltYXRlIGJl aGF2ZXMgY29ycmVjdGx5IHdoZW4gc3RlcCBzaXplIGlzIHplcm8uCistLSBXZSBleHBlY3Qg Z2VuZXJhdGVfc2VyaWVzX3RpbWVzdGFtcCgpIHRvIHRocm93IHRoZSBlcnJvciByYXRoZXIg dGhhbiBpbgorLS0gdGhlIHN1cHBvcnQgZnVuY3Rpb24uCitTRUxFQ1QgKiBGUk9NIGdlbmVy YXRlX3NlcmllcyhUSU1FU1RBTVBUWiAnMjAyNC0wMi0wMScsIFRJTUVTVEFNUFRaICcyMDI0 LTAzLTAxJywgSU5URVJWQUwgJzAgZGF5JykgZyhzKTsKKworLS0KKy0tIFRlc3QgdGhlIFN1 cHBvcnRSZXF1ZXN0Um93cyBzdXBwb3J0IGZ1bmN0aW9uIGZvciBnZW5lcmF0ZV9zZXJpZXNf bnVtZXJpYygpCistLQorCistLSBFbnN1cmUgdGhlIHJvdyBlc3RpbWF0ZSBtYXRjaGVzIHRo ZSBhY3R1YWwgcm93cworU0VMRUNUIGV4cGxhaW5fbWFza19jb3N0cygkJAorU0VMRUNUICog RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMS4wLCAyNS4wKSBnKHMpOyQkLAordHJ1ZSwgdHJ1ZSwg ZmFsc2UsIHRydWUpOworCistLSBBcyBhYm92ZSBidXQgd2l0aCBub24tZGVmYXVsdCBzdGVw CitTRUxFQ1QgZXhwbGFpbl9tYXNrX2Nvc3RzKCQkCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRl X3NlcmllcygxLjAsIDI1LjAsIDIuMCkgZyhzKTskJCwKK3RydWUsIHRydWUsIGZhbHNlLCB0 cnVlKTsKKworLS0gRW5zdXJlIHRoZSBlc3RpbWF0ZXMgbWF0Y2ggd2hlbiBzdGVwIGlzIGRl Y3JlYXNpbmcKK1NFTEVDVCBleHBsYWluX21hc2tfY29zdHMoJCQKK1NFTEVDVCAqIEZST00g Z2VuZXJhdGVfc2VyaWVzKDI1LjAsIDEuMCwgLTEuMCkgZyhzKTskJCwKK3RydWUsIHRydWUs IGZhbHNlLCB0cnVlKTsKKworLS0gRW5zdXJlIGFuIGVtcHR5IHJhbmdlIGVzdGltYXRlcyAx IHJvdworU0VMRUNUIGV4cGxhaW5fbWFza19jb3N0cygkJAorU0VMRUNUICogRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMjUuMCwgMS4wLCAxLjApIGcocyk7JCQsCit0cnVlLCB0cnVlLCBmYWxz ZSwgdHJ1ZSk7CisKKy0tIEVuc3VyZSB3ZSBnZXQgdGhlIGRlZmF1bHQgcm93IGVzdGltYXRl IGZvciBlcnJvciBjYXNlcyAoaW5maW5pdHkvTmFOIHZhbHVlcworLS0gYW5kIHplcm8gc3Rl cCBzaXplKQorU0VMRUNUIGV4cGxhaW5fbWFza19jb3N0cygkJAorU0VMRUNUICogRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoJy1pbmZpbml0eSc6Ok5VTUVSSUMsICdpbmZpbml0eSc6Ok5VTUVS SUMsIDEuMCkgZyhzKTskJCwKK2ZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CisKK1NFTEVD VCBleHBsYWluX21hc2tfY29zdHMoJCQKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEuMCwgMjUuMCwgJ05hTic6Ok5VTUVSSUMpIGcocyk7JCQsCitmYWxzZSwgdHJ1ZSwgZmFs c2UsIHRydWUpOworCitTRUxFQ1QgZXhwbGFpbl9tYXNrX2Nvc3RzKCQkCitTRUxFQ1QgKiBG Uk9NIGdlbmVyYXRlX3NlcmllcygyNS4wLCAyLjAsIDAuMCkgZyhzKTskJCwKK2ZhbHNlLCB0 cnVlLCBmYWxzZSwgdHJ1ZSk7CisKKworRFJPUCBGVU5DVElPTiBleHBsYWluX21hc2tfY29z dHModGV4dCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCk7Ci0tIAoyLjM0LjEKCg== --------------ZKa4Aj4asdiiIxbmK5lylcuS--