Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pEvk7-000469-RJ for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Jan 2023 17:15:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pEvk5-0002c2-AJ for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Jan 2023 17:15:25 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pEvk4-0002bo-Sw for pgsql-hackers@lists.postgresql.org; Mon, 09 Jan 2023 17:15:25 +0000 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pEvk0-0003QM-Ae for pgsql-hackers@lists.postgresql.org; Mon, 09 Jan 2023 17:15:23 +0000 Received: by mail-pj1-x102d.google.com with SMTP id z4-20020a17090a170400b00226d331390cso10340191pjd.5 for ; Mon, 09 Jan 2023 09:15:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=US4fTx6XomjN5m/jWBo8zkCTx4re47WjT8F1Bhf8gzs=; b=JROujZZvNLyTw1Kqi40D0kLmtqVe5Z72m7GT9LmKGSJVDOZklwitlaKQIpzzQqpUhj gMZNj1UGz7iHEn3yiq1rONq/1bmxz3bc/KLitb5hS1LT6vA6bvB75w5QHuQi242F79Hl TZjQ/x1Id78LhK2fZlA5ykgvlzFNGCGZ6kp15iQjjzzxmDkhNRH/ldIZoX1bCShp1MVD 1Y+T7RiCvU6iJF6YZuCVHiguGERLu6nCWt36jpgUgz+icrvzcbTTxJRqtGY08aTfZHDP juxl4AjOHYjXF2FnEfn3M8FK5Up6zHLtT+TkHjcZk0vT1hQS/IxfxvyZRyOzbdhYZSLM h8DQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=US4fTx6XomjN5m/jWBo8zkCTx4re47WjT8F1Bhf8gzs=; b=FatXg2mC8f/Qs4XeLa8npBVp7E0dPrXbDlBx0XzNf6f8mpwCnPIaJZTqG2UcXAgdz7 aD58fEJoL1OkRbV+T1H8NjWTJe13tH2t29/Fn4iLOSq9uo7ObX6zDnvW6hXKbgpjun8X lEl5XYI06ZwM1OzzxahAG+3ytGUuk+kmKKTscdakuuddggl4QW/ieTN4fN1k6n3+DgIv GM8n03GlQCj5pmNp1vl4UtY1TKPli393joyLaAUmfvbY9pJPs4Ha8PwKlLD9hZvjJUnc 4tC0DXllmC/riJzTvNa0o0T812YF7mIKenlt4VJ+uO7PSmVDV1EMgFIMtu5uAgqcLoR2 040w== X-Gm-Message-State: AFqh2kqC0Y2sCZnJN2Srxnmvs15XT/H3OpAUYEUCdPwQmddjkN/Kh/+y Mw2gjIbq2HSl07s6RlZ7vaYVPMU6d/M= X-Google-Smtp-Source: AMrXdXsI/FwE5k6nPT7fDKP8Rc1ibfNFhx2qhI555SjfFANXevH49HK2vDNEvcObqQRtF7HKa+dMEw== X-Received: by 2002:a17:90b:23d7:b0:226:e01f:3fb with SMTP id md23-20020a17090b23d700b00226e01f03fbmr12337477pjb.3.1673284517968; Mon, 09 Jan 2023 09:15:17 -0800 (PST) Received: from [10.0.2.15] ([106.201.23.151]) by smtp.gmail.com with ESMTPSA id ms19-20020a17090b235300b002132f3e71c6sm5780112pjb.52.2023.01.09.09.15.15 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 09 Jan 2023 09:15:17 -0800 (PST) Content-Type: multipart/mixed; boundary="------------NU0WAbYLYg56IrxaeSqW9upW" Message-ID: <4ef7f947-526b-c4ec-f7a0-8b4586e693e4@gmail.com> Date: Mon, 9 Jan 2023 22:45:12 +0530 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Subject: Re: Todo: Teach planner to evaluate multiple windows in the optimal order To: David Rowley Cc: pghackers , Vik Fearing References: <83d80853-a45c-d85c-68eb-59acfe7fb5fb@gmail.com> <6ebcc137-45ea-6373-e3e1-3c304c452e1f@gmail.com> <441d135e-1941-c3ef-1649-18c3e8811549@postgresfriends.org> <9620d994-b89a-2dcf-fca5-821e19d56858@gmail.com> <01248493-182b-0f92-f2f2-ff28dc4b2e83@gmail.com> <2040c902-32b1-46c8-0b26-d3f43a16b9bb@gmail.com> <12f6ef19-e06e-8ea9-ad98-3fd92afb7f0b@gmail.com> <8d0b24ce-f8ba-cd63-82ae-be853b4067e8@gmail.com> Content-Language: en-US From: Ankit Kumar Pandey 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. --------------NU0WAbYLYg56IrxaeSqW9upW Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit > On 09/01/23 17:53, David Rowley wrote: > We need to keep looping backwards until we find the first WindowClause > which does not contain the pathkeys of the ORDER BY. I found the cause of confusion, *first* WindowClause means first from forward direction. Since we are looping from backward, I took it first from the last. eg: select count(*) over (order by a), count(*) over (order by a,b), count(*) over (order by a,b,c) from abcd order by a,b,c,d; first window clause is count(*) over (order by a) which we are using for order-by pushdown. This is in sync with implementation as well. > I couldn't quite understand why the foreach() loop's > condition couldn't just be "if (foreach_current_index(l) == > sort_pushdown_idx)", but I see that if we don't check if the path is > already correctly sorted that we could end up pushing the sort down > onto the path that's already correctly sorted. We decided we didn't > want to move the sort around if it does not reduce the amount of > sorting. Yes, this was the reason, the current patch handles this without is_sort now, which is great. > All the tests you added still pass. Although, I didn't > really study the tests yet to see if everything we talked about is > covered. It covers general cases and exceptions. Also, I did few additional tests. Looked good. > It turned out the sort_pushdown_idx = foreach_current_index(l) - 1; > break; didn't work as if all the WindowClauses have pathkeys contained > in the order by pathkeys then we don't ever set sort_pushdown_idx. I > adjusted it to do: > if (pathkeys_contained_in(window_pathkeys, orderby_pathkeys)) > sort_pushdown_idx = foreach_current_index(l); > else > break; Yes, that would have been problematic. I have verified this case and on related note, I have added a test case that ensure order by pushdown shouldn't happen if window function's order by is superset of query's order by. > I also fixed up the outdated comments and changed it so we only set > orderby_pathkeys once instead of once per loop in the > foreach_reverse() loop. Thanks, code look a lot neater now (is_sorted is gone and handled in a better way). > I gave some thought to whether doing foreach_delete_current() is safe > within a foreach_reverse() loop. I didn't try it, but I couldn't see > any reason why not. It is pretty late here and I'd need to test that > to be certain. If it turns out not to be safe then we need to document > that fact in the comments of the foreach_reverse() macro and the > foreach_delete_current() macro. I tested foreach_delete_current inside foreach_reverse loop. It worked fine. I have attached patch with one extra test case (as mentioned above). Rest of the changes are looking fine. Ran pgbench again and optimized version still had a lead (168 tps vs 135 tps) in performance. Do we have any pending items for this patch now? -- Regards, Ankit Kumar Pandey --------------NU0WAbYLYg56IrxaeSqW9upW Content-Type: text/x-patch; charset=UTF-8; name="better_windowclause_sorting_dgr-v7.patch" Content-Disposition: attachment; filename="better_windowclause_sorting_dgr-v7.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCAwMDBkNzU3YmRkLi5j ZjU5ZWJmZTg3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFu bmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC00 NDIxLDggKzQ0MjEsMTQgQEAgY3JlYXRlX29uZV93aW5kb3dfcGF0aChQbGFubmVySW5mbyAq cm9vdCwKIAkJCQkJICAgTGlzdCAqYWN0aXZlV2luZG93cykKIHsKIAlQYXRoVGFyZ2V0ICp3 aW5kb3dfdGFyZ2V0OworCVF1ZXJ5CSAgICpwYXJzZSA9IHJvb3QtPnBhcnNlOwogCUxpc3RD ZWxsICAgKmw7CiAJTGlzdAkgICAqdG9wcXVhbCA9IE5JTDsKKwlMaXN0CSAgICp3aW5kb3df cGF0aGtleXM7CisJTGlzdAkgICAqb3JkZXJieV9wYXRoa2V5cyA9IE5JTDsKKwlpbnQJCQlz b3J0X3B1c2hkb3duX2lkeCA9IC0xOworCWludAkJCXByZXNvcnRlZF9rZXlzOworCWJvb2wJ CWlzX3NvcnRlZDsKIAogCS8qCiAJICogU2luY2UgZWFjaCB3aW5kb3cgY2xhdXNlIGNvdWxk IHJlcXVpcmUgYSBkaWZmZXJlbnQgc29ydCBvcmRlciwgd2Ugc3RhY2sKQEAgLTQ0NDEsMTcg KzQ0NDcsOTkgQEAgY3JlYXRlX29uZV93aW5kb3dfcGF0aChQbGFubmVySW5mbyAqcm9vdCwK IAkgKi8KIAl3aW5kb3dfdGFyZ2V0ID0gaW5wdXRfdGFyZ2V0OwogCisJLyoKKwkgKiBIZXJl IHdlIGF0dGVtcHQgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBzb3J0cyB3aGljaCBtdXN0 IGJlIHBlcmZvcm1lZAorCSAqIGZvciBxdWVyaWVzIHdpdGggYW4gT1JERVIgQlkgY2xhdXNl LgorCSAqCisJICogSXQncyBwb3NzaWJsZSBkdWUgdG8gc2VsZWN0X2FjdGl2ZV93aW5kb3dz KCkgcHV0dGluZyB0aGUgV2luZG93Q2xhdXNlcworCSAqIHdpdGggdGhlIGxvd2VzdCB0bGVT b3J0R3JvdXBSZWYgbGFzdCBpbiB0aGUgYWN0aXZlV2luZG93cyBsaXN0IHRoYXQgdGhlCisJ ICogZmluYWwgV2luZG93Q2xhdXNlIGhhcyBhIHN1YnNldCBvZiB0aGUgc29ydCByZXF1aXJl bWVudHMgdGhhdCB0aGUKKwkgKiBxdWVyeSdzIE9SREVSIEJZIGNsYXVzZSBoYXMuICBCZWxv dyB3ZSB0cnkgdG8gZGV0ZWN0IHRoaXMgY2FzZSBhbmQgaWYKKwkgKiB3ZSBmaW5kIHRoaXMg aXMgdHJ1ZSwgd2UgY29uc2lkZXIgYWRqdXN0aW5nIHRoZSBzb3J0IHRoYXQncyBkb25lIGZv cgorCSAqIFdpbmRvd0FnZ3MgYW5kIGluY2x1ZGUgdGhlIGFkZGl0aW9uYWwgY2xhdXNlcyBz byB0aGF0IG5vIGFkZGl0aW9uYWwKKwkgKiBzb3J0aW5nIGlzIHJlcXVpcmVkIGZvciB0aGUg cXVlcnkncyBPUkRFUiBCWSBjbGF1c2UuCisJICoKKwkgKiBXZSBkb24ndCB0cnkgdGhpcyBv cHRpbWl6YXRpb24gZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXM6CisJICoKKwkgKiAxLglJZiB0 aGUgcXVlcnkgaGFzIGEgRElTVElOQ1QgY2xhdXNlLiAgV2UgbmVlZG4ndCB3YXN0ZSBhbnkK KwkgKgkJYWRkaXRpb25hbCBlZmZvcnQgZm9yIHRoZSBtb3JlIHN0cmljdCBzb3J0IG9yZGVy IGFzIGlmIERJU1RJTkNUCisJICoJCWlzIGRvbmUgdmlhIEhhc2ggQWdncmVnYXRlIHRoZW4g dGhhdCdzIGdvaW5nIHRvIHVuZG8gdGhpcyB3b3JrLgorCSAqCisJICogMi4JSWYgdGhlIHF1 ZXJ5IGhhcyBhIExJTUlUIGNsYXVzZS4gIFRoZSB0b3AtbGV2ZWwgc29ydCB3aWxsIGJlCisJ ICoJCWFibGUgdG8gdXNlIGEgdG9wLW4gc29ydCB3aGljaCBtaWdodCBiZSBtb3JlIGVmZmlj aWVudCB0aGFuCisJICoJCXNvcnRpbmcJYnkgdGhlIGFkZGl0aW9uYWwgY29sdW1ucy4gIElm IHRoZSBMSU1JVCBkb2VzIG5vdCByZWR1Y2UKKwkgKgkJdGhlCW51bWJlciBvZiByb3dzIHNp Z25pZmljYW50bHkgdGhlbiB0aGlzIG1pZ2h0IG5vdCBiZSB0cnVlLCBidXQKKwkgKgkJd2Ug ZG9uJ3QgdHJ5IHRvIGNvbnNpZGVyIHRoYXQgaGVyZS4KKwkgKgorCSAqIDMuCUlmIHRoZSB0 b3AtbGV2ZWwgV2luZG93Q2xhdXNlIGhhcyBhIHJ1bkNvbmRpdGlvbiB0aGVuIHRoaXMgY2Fu CisJICoJCWZpbHRlciBvdXQgdHVwbGVzIGFuZCBtYWtlIHRoZSBmaW5hbCBzb3J0IGNoZWFw ZXIuICBJZiB3ZSBwdXNoZWQKKwkgKgkJdGhlIHNvcnQgZG93biBiZWxvdyB0aGUgV2luZG93 QWdnIHRoZW4gd2UnZCBuZWVkIHRvIHNvcnQgYWxsIHJvd3MKKwkgKgkJaW5jbHVkaW5nIG9u ZXMgdGhhdCB0aGUgcnVuQ29uZGl0aW9uIG1pZ2h0IGZpbHRlci4gIFRoaXMgbWF5IHdhc3Rl CisJICoJCWVmZm9ydCBzbyB3ZSBqdXN0IGRvbid0IHRyeSB0byBwdXNoIGRvd24gdGhlIHNv cnQgZm9yIHRoaXMgY2FzZS4KKwkgKgorCSAqIDQuCUlmIHRoZSBPUkRFUiBCWSBjb250YWlu cyBhbnkgZXhwcmVzc2lvbnMgY29udGFpbmluZyBXaW5kb3dGdW5jcworCSAqCQl0aGVuIHdl IGNhbid0IHB1c2ggZG93biB0aGUgc29ydCBhcyB0aGVzZSBvYnZpb3VzbHkgbXVzdCBiZQor CSAqCQlldmFsdWF0ZWQgYmVmb3JlIHRoZXkgY2FuIGJlIHNvcnRlZC4KKwkgKi8KKwlpZiAo cGFyc2UtPnNvcnRDbGF1c2UgIT0gTklMICYmIHBhcnNlLT5kaXN0aW5jdENsYXVzZSA9PSBO SUwgJiYKKwkJcGFyc2UtPmxpbWl0Q291bnQgPT0gTlVMTCAmJgorCQlsaW5pdGlhbF9ub2Rl KFdpbmRvd0NsYXVzZSwgYWN0aXZlV2luZG93cyktPnJ1bkNvbmRpdGlvbiA9PSBOSUwgJiYK KwkJIWNvbnRhaW5fd2luZG93X2Z1bmN0aW9uKChOb2RlICopIGdldF9zb3J0Z3JvdXBsaXN0 X2V4cHJzKHBhcnNlLT5zb3J0Q2xhdXNlLAorCQkJCQkJCQkgcm9vdC0+cHJvY2Vzc2VkX3Rs aXN0KSkpCisJeworCQlvcmRlcmJ5X3BhdGhrZXlzID0gbWFrZV9wYXRoa2V5c19mb3Jfc29y dGNsYXVzZXMocm9vdCwKKwkJCQkJCQkJCQkJCQkJIHBhcnNlLT5zb3J0Q2xhdXNlLAorCQkJ CQkJCQkJCQkJCQkgcm9vdC0+cHJvY2Vzc2VkX3RsaXN0KTsKKworCQkvKgorCQkgKiBMb29w IGJhY2t3YXJkcyBvdmVyIHRoZSBXaW5kb3dDbGF1c2VzIGxvb2tpbmcgZm9yIHRoZSBmaXJz dAorCQkgKiBXaW5kb3dDbGF1c2Ugd2hpY2ggaGFzIHBhdGhrZXlzIG5vdCBjb250YWluZWQg aW4gdGhlCisJCSAqIG9yZGVyYnlfcGF0aGtleXMuICBXaGF0IHdlJ3JlIGxvb2tpbmcgZm9y IGhlcmUgaXMgdGhlIGxvd2VzdCBsZXZlbAorCQkgKiB0aGF0IHdlIHB1c2ggdGhlIGFkZGl0 aW9uYWwgc29ydCByZXF1aXJlbWVudHMgZG93biBpbnRvLiAgSWYgd2UKKwkJICogZmFpbCBo ZXJlIHRoZW4gc29ydF9wdXNoZG93bl9pZHggd2lsbCByZW1haW4gYXQgLTEuCisJCSAqLwor CQlmb3JlYWNoX3JldmVyc2UobCwgYWN0aXZlV2luZG93cykKKwkJeworCQkJV2luZG93Q2xh dXNlICp3YyA9IGxmaXJzdF9ub2RlKFdpbmRvd0NsYXVzZSwgbCk7CisKKwkJCXdpbmRvd19w YXRoa2V5cyA9IG1ha2VfcGF0aGtleXNfZm9yX3dpbmRvdyhyb290LAorCQkJCQkJCQkJCQkJ CQl3YywKKwkJCQkJCQkJCQkJCQkJcm9vdC0+cHJvY2Vzc2VkX3RsaXN0KTsKKworCQkJaWYg KHBhdGhrZXlzX2NvbnRhaW5lZF9pbih3aW5kb3dfcGF0aGtleXMsIG9yZGVyYnlfcGF0aGtl eXMpKQorCQkJCXNvcnRfcHVzaGRvd25faWR4ID0gZm9yZWFjaF9jdXJyZW50X2luZGV4KGwp OworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJfQorCiAJZm9yZWFjaChsLCBhY3RpdmVX aW5kb3dzKQogCXsKIAkJV2luZG93Q2xhdXNlICp3YyA9IGxmaXJzdF9ub2RlKFdpbmRvd0Ns YXVzZSwgbCk7Ci0JCUxpc3QJICAgKndpbmRvd19wYXRoa2V5czsKLQkJaW50CQkJcHJlc29y dGVkX2tleXM7Ci0JCWJvb2wJCWlzX3NvcnRlZDsKIAkJYm9vbAkJdG9wd2luZG93OwogCiAJ CXdpbmRvd19wYXRoa2V5cyA9IG1ha2VfcGF0aGtleXNfZm9yX3dpbmRvdyhyb290LAotCQkJ CQkJCQkJCQkJICAgd2MsCi0JCQkJCQkJCQkJCQkgICByb290LT5wcm9jZXNzZWRfdGxpc3Qp OworCQkJCQkJCQkJCQkJCXdjLAorCQkJCQkJCQkJCQkJCXJvb3QtPnByb2Nlc3NlZF90bGlz dCk7CisKKwkJLyoKKwkJICogV2hlbiB3ZSBnZXQgdG8gdGhlIHNvcnRfcHVzaGRvd25faWR4 IFdpbmRvd0NsYXVzZSwgaWYgdGhlIHBhdGggaXMKKwkJICogbm90IGFscmVhZHkgY29ycmVj dGx5IHNvcnRlZCwgdGhlbiBqdXN0IHVzZSB0aGUgcGF0aGtleXMgZm9yIHRoZQorCQkgKiBx dWVyeSdzIE9SREVSIEJZIGNsYXVzZSBpbnN0ZWFkIG9mIHRoZSBXaW5kb3dDbGF1c2UncyBw YXRoa2V5cy4KKwkJICogV2hlbiB0aGUgcGF0aCBpcyBhbHJlYWR5IGNvcnJlY3RseSBzb3J0 ZWQgdGhlcmUncyBubyBwb2ludCBpbgorCQkgKiBhZGp1c3RpbmcgdGhlIHBhdGhrZXlzIGFz IHRoaXMganVzdCBtb3ZlcyB0aGUgc29ydCBkb3duIHdpdGhvdXQKKwkJICogYWN0dWFsbHkg cmVkdWNpbmcgdGhlIG51bWJlciBvZiBzb3J0cyB3aGljaCBhcmUgcmVxdWlyZWQgaW4gdGhl CisJCSAqIHBsYW4gb3ZlcmFsbC4gIHNvcnRfcHVzaGRvd25faWR4IHdpbGwgYmUgLTEgYW5k IG5ldmVyIG1hdGNoIHdoZW4KKwkJICogdGhpcyBvcHRpbWl6YXRpb24gd2FzIGRpc2FibGVk IGFib3ZlLgorCQkgKi8KKwkJaWYgKGZvcmVhY2hfY3VycmVudF9pbmRleChsKSA9PSBzb3J0 X3B1c2hkb3duX2lkeCAmJgorCQkJIXBhdGhrZXlzX2NvbnRhaW5lZF9pbih3aW5kb3dfcGF0 aGtleXMsIHBhdGgtPnBhdGhrZXlzKSkKKwkJeworCQkJLyogY2hlY2sgdG8gbWFrZSBzdXJl IHNvcnRfcHVzaGRvd25faWR4IHdhcyBzZXQgY29ycmVjdGx5ICovCisJCQlBc3NlcnQocGF0 aGtleXNfY29udGFpbmVkX2luKHdpbmRvd19wYXRoa2V5cywgb3JkZXJieV9wYXRoa2V5cykp OworCisJCQl3aW5kb3dfcGF0aGtleXMgPSBvcmRlcmJ5X3BhdGhrZXlzOworCQl9CiAKIAkJ aXNfc29ydGVkID0gcGF0aGtleXNfY291bnRfY29udGFpbmVkX2luKHdpbmRvd19wYXRoa2V5 cywKIAkJCQkJCQkJCQkJCXBhdGgtPnBhdGhrZXlzLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvbm9kZXMvcGdfbGlzdC5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGdfbGlzdC5oCmluZGV4 IDUyOWEzODJkMjguLjBkZTlkNzNkYWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVz L3BnX2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wZ19saXN0LmgKQEAgLTM3OCwx NCArMzc4LDMwIEBAIGxuZXh0KGNvbnN0IExpc3QgKmwsIGNvbnN0IExpc3RDZWxsICpjKQog CQkgKGNlbGwgPSBOVUxMLCBmYWxzZSk7IFwKIAkJIGNlbGwjI19fc3RhdGUuaSsrKQogCisv KgorICogZm9yZWFjaF9yZXZlcnNlIC0KKyAqCSAgYSBjb252ZW5pZW5jZSBtYWNybyBmb3Ig bG9vcGluZyB0aHJvdWdoIGEgbGlzdCBpbiByZXZlcnNlCisgKgorICogVGhpcyBpcyBlcXVp dmFsZW50IHRvIGZvcmVhY2gsIG9ubHkgaXQgbG9vcHMgb3ZlciB0aGUgbGlzdCBzdGFydGlu ZyB3aXRoCisgKiB0aGUgbGFzdCBlbGVtZW50IGFuZCBlbmRzIG9uIHRoZSBmaXJzdCBlbGVt ZW50LgorICovCisjZGVmaW5lIGZvcmVhY2hfcmV2ZXJzZShjZWxsLCBsc3QpCVwKKwlmb3Ig KEZvckVhY2hTdGF0ZSBjZWxsIyNfX3N0YXRlID0geyhsc3QpLCBjZWxsIyNfX3N0YXRlLmwt Pmxlbmd0aCAtIDF9OyBcCisJCSAoY2VsbCMjX19zdGF0ZS5sICE9IE5JTCAmJiBcCisJCSAg Y2VsbCMjX19zdGF0ZS5pID49IDApID8gXAorCQkgKGNlbGwgPSAmY2VsbCMjX19zdGF0ZS5s LT5lbGVtZW50c1tjZWxsIyNfX3N0YXRlLmldLCB0cnVlKSA6IFwKKwkJIChjZWxsID0gTlVM TCwgZmFsc2UpOyBcCisJCSBjZWxsIyNfX3N0YXRlLmktLSkKKwogLyoKICAqIGZvcmVhY2hf ZGVsZXRlX2N1cnJlbnQgLQogICoJICBkZWxldGUgdGhlIGN1cnJlbnQgbGlzdCBlbGVtZW50 IGZyb20gdGhlIExpc3QgYXNzb2NpYXRlZCB3aXRoIGEKLSAqCSAgc3Vycm91bmRpbmcgZm9y ZWFjaCgpIGxvb3AsIHJldHVybmluZyB0aGUgbmV3IExpc3QgcG9pbnRlci4KKyAqCSAgc3Vy cm91bmRpbmcgZm9yZWFjaCgpIG9yIGZvcmVhY2hfcmV2ZXJzZSgpIGxvb3AsIHJldHVybmlu ZyB0aGUgbmV3IExpc3QKKyoJICBwb2ludGVyLgogICoKICAqIFRoaXMgaXMgZXF1aXZhbGVu dCB0byBsaXN0X2RlbGV0ZV9jZWxsKCksIGJ1dCBpdCBhbHNvIGFkanVzdHMgdGhlIGZvcmVh Y2gKLSAqIGxvb3AncyBzdGF0ZSBzbyB0aGF0IG5vIGxpc3QgZWxlbWVudHMgd2lsbCBiZSBt aXNzZWQuICBEbyBub3QgZGVsZXRlCi0gKiBlbGVtZW50cyBmcm9tIGFuIGFjdGl2ZSBmb3Jl YWNoIGxvb3AncyBsaXN0IGluIGFueSBvdGhlciB3YXkhCisgKiBvciBmb3JlYWNoX3JldmVy c2UgbG9vcCdzIHN0YXRlIHNvIHRoYXQgbm8gbGlzdCBlbGVtZW50cyB3aWxsIGJlIG1pc3Nl ZC4KKyAqIERvIG5vdCBkZWxldGUgZWxlbWVudHMgZnJvbSBhbiBhY3RpdmUgZm9yZWFjaCBs b29wJ3MgbGlzdCBpbiBhbnkgb3RoZXIgd2F5IQogICovCiAjZGVmaW5lIGZvcmVhY2hfZGVs ZXRlX2N1cnJlbnQobHN0LCBjZWxsKQlcCiAJKGNlbGwjI19fc3RhdGUuaS0tLCBcCkBAIC0z OTMsOCArNDA5LDkgQEAgbG5leHQoY29uc3QgTGlzdCAqbCwgY29uc3QgTGlzdENlbGwgKmMp CiAKIC8qCiAgKiBmb3JlYWNoX2N1cnJlbnRfaW5kZXggLQotICoJICBnZXQgdGhlIHplcm8t YmFzZWQgbGlzdCBpbmRleCBvZiBhIHN1cnJvdW5kaW5nIGZvcmVhY2goKSBsb29wJ3MKLSAq CSAgY3VycmVudCBlbGVtZW50OyBwYXNzIHRoZSBuYW1lIG9mIHRoZSAiTGlzdENlbGwgKiIg aXRlcmF0b3IgdmFyaWFibGUuCisgKgkgIGdldCB0aGUgemVyby1iYXNlZCBpbmRleCB3aXRo aW4gdGhlIGxpc3Qgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBpbiB0aGUKKyAqCSAgc3Vycm91 bmRpbmcgZm9yZWFjaCgpIG9yIGZvcmVhY2hfcmV2ZXJzZSgpIGxvb3A7IHBhc3MgdGhlIG5h bWUgb2YgdGhlCisgKgkgICJMaXN0Q2VsbCAqIiBpdGVyYXRvciB2YXJpYWJsZS4KICAqCiAg KiBCZXdhcmUgb2YgdXNpbmcgdGhpcyBhZnRlciBmb3JlYWNoX2RlbGV0ZV9jdXJyZW50KCk7 IHRoZSB2YWx1ZSB3aWxsIGJlCiAgKiBvdXQgb2Ygc3luYyBmb3IgdGhlIHJlc3Qgb2YgdGhl IGN1cnJlbnQgbG9vcCBpdGVyYXRpb24uICBBbnl3YXksIHNpbmNlCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3dpbmRvdy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3dpbmRvdy5vdXQKaW5kZXggOTBlODlmYjViNi4uZmUwZjhhMDM5YiAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aW5kb3cub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2luZG93Lm91dApAQCAtMzk4Miw3ICszOTgyLDIx MCBAQCBPUkRFUiBCWSBkZXBuYW1lLCBlbXBubzsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBlbXBzYWxhcnkKICgxMSByb3dzKQogCistLSBE byBub3QgcGVyZm9ybSBzb3J0IHB1c2hkb3duIGlmIGNvbHVtbiBpcyBwcmVzb3J0ZWQKK0NS RUFURSBJTkRFWCBkZXBuYW1lX2lkeCBPTiBlbXBzYWxhcnkoZGVwbmFtZSk7CitTRVQgZW5h YmxlX3NlcXNjYW49MDsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBlbXBubywKKyAg ICAgICAgbWluKHNhbGFyeSkgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUpIGRlcG1pbnNh bGFyeQorRlJPTSBlbXBzYWxhcnkKK09SREVSIEJZIGRlcG5hbWUsIGVtcG5vOworICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEluY3JlbWVudGFsIFNvcnQKKyAgIFNvcnQgS2V5OiBkZXBuYW1lLCBlbXBubworICAgUHJl c29ydGVkIEtleTogZGVwbmFtZQorICAgLT4gIFdpbmRvd0FnZworICAgICAgICAgLT4gIElu ZGV4IFNjYW4gdXNpbmcgZGVwbmFtZV9pZHggb24gZW1wc2FsYXJ5CisoNSByb3dzKQorCist LSBEbyBwZXJmb3JtIHNvcnQgcHVzaGRvd24gaWYgY29sdW1ucyBhcmUgb25seSBwYXJ0aWFs bHkgc29ydGVkCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgZW1wbm8sCisgICAgICAg IG1pbihzYWxhcnkpIE9WRVIgKFBBUlRJVElPTiBCWSBkZXBuYW1lLCBlbXBubykgZGVwbWlu c2FsYXJ5CitGUk9NIGVtcHNhbGFyeQorT1JERVIgQlkgZGVwbmFtZSwgZW1wbm8sIGVucm9s bF9kYXRlOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFdpbmRvd0FnZworICAgLT4gIEluY3JlbWVudGFsIFNvcnQKKyAg ICAgICAgIFNvcnQgS2V5OiBkZXBuYW1lLCBlbXBubywgZW5yb2xsX2RhdGUKKyAgICAgICAg IFByZXNvcnRlZCBLZXk6IGRlcG5hbWUKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5n IGRlcG5hbWVfaWR4IG9uIGVtcHNhbGFyeQorKDUgcm93cykKKworRFJPUCBJTkRFWCBkZXBu YW1lX2lkeDsKK1JFU0VUIGVuYWJsZV9zZXFzY2FuOwogUkVTRVQgZW5hYmxlX2hhc2hhZ2c7 CistLSBJZiB3aW5kb3cgZnVuY3Rpb24ncyBPUkRFUiBCWSBpcyBzdWJzZXQgb2YgUVVFUlkn cyBPUkRFUiBCWSwgc29ydCBhcyBwZXIgYXMKKy0tIFFVRVJZJ3MgT1JERVIgQlkgdG8gc2F2 ZSBhZGRpdGlvbmFsIHNvcnRpbmcgaW4gdGhlIGVuZAorRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUIGVtcG5vLAorICAgICAgIGRlcG5hbWUsCisgICAgICAgbWluKHNhbGFyeSkgT1ZF UiAoT1JERVIgQlkgZGVwbmFtZSkgZGVwbWluc2FsYXJ5CitGUk9NIGVtcHNhbGFyeQorT1JE RVIgQlkgZGVwbmFtZSwgZW1wbm87CisgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBXaW5kb3dBZ2cK KyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZGVwbmFtZSwgZW1wbm8KKyAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBlbXBzYWxhcnkKKyg0IHJvd3MpCisKKy0tIFNhbWUgYXMg YWJvdmUsIGJ1dCBQQVJUSVRJT04gQlkgY2xhdXNlIGlzIGluY2x1ZGVkIGFzIHdlbGwKK0VY UExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBlbXBubywKKyAgICAgICBkZXBuYW1lLAorICAg ICAgIG1pbihzYWxhcnkpIE9WRVIgKFBBUlRJVElPTiBCWSBkZXBuYW1lIE9SREVSIEJZIGVt cG5vKSBkZXBtaW5zYWxhcnkKK0ZST00gZW1wc2FsYXJ5CitPUkRFUiBCWSBkZXBuYW1lLCBl bXBubywgZW5yb2xsX2RhdGU7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBXaW5kb3dBZ2cKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTog ZGVwbmFtZSwgZW1wbm8sIGVucm9sbF9kYXRlCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24g ZW1wc2FsYXJ5CisoNCByb3dzKQorCistLSBOZWdhdGlvbiBvZiBhYm92ZSwgd2hlbiBzb3J0 IG9wdGltaXphdGlvbiBpcyBub3QgbmVlZGVkIHRvIGJlIHBlcmZvcm1lZAorRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUIGVtcG5vLAorICAgICAgIGRlcG5hbWUsCisgICAgICAgbWlu KHNhbGFyeSkgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUgT1JERVIgQlkgZW1wbm8pIGRl cG1pbnNhbGFyeQorRlJPTSBlbXBzYWxhcnkKK09SREVSIEJZIGVtcG5vLCBlbnJvbGxfZGF0 ZTsKKyAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIFNvcnQgS2V5 OiBlbXBubywgZW5yb2xsX2RhdGUKKyAgIC0+ICBXaW5kb3dBZ2cKKyAgICAgICAgIC0+ICBT b3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogZGVwbmFtZSwgZW1wbm8KKyAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBlbXBzYWxhcnkKKyg2IHJvd3MpCisKKy0tIE9SREVS IEJZJ3MgaW4gbXVsdGlwbGUgV2luZG93IGZ1bmN0aW9ucyBjYW4gYmUgY29tYmluZWQgaW50 byBvbmUKKy0tIGlmIHRoZXkgYXJlIHN1YnNldCBvZiBRVUVSWSdzIE9SREVSIEJZCitFWFBM QUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgZW1wbm8sCisgICAgICAgZGVwbmFtZSwKKyAgICAg ICBtaW4oc2FsYXJ5KSBPVkVSIChQQVJUSVRJT04gQlkgZGVwbmFtZSBPUkRFUiBCWSBlbXBu bykgZGVwbWluc2FsYXJ5LAorICAgICAgIHN1bShzYWxhcnkpIE9WRVIgKFBBUlRJVElPTiBC WSBkZXBuYW1lKSBkZXBzYWxhcnksCisgICAgICAgY291bnQoKikgT1ZFUiAoT1JERVIgQlkg ZW5yb2xsX2RhdGUgREVTQykgYworRlJPTSBlbXBzYWxhcnkKK09SREVSIEJZIGRlcG5hbWUs IGVtcG5vLCBlbnJvbGxfZGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgV2luZG93QWdnCisgICAtPiAgV2luZG93QWdn CisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGRlcG5hbWUs IGVtcG5vLCBlbnJvbGxfZGF0ZQorICAgICAgICAgICAgICAgLT4gIFdpbmRvd0FnZworICAg ICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IFNvcnQgS2V5OiBlbnJvbGxfZGF0ZSBERVNDCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gZW1wc2FsYXJ5CisoOCByb3dzKQorCistLSBvcmRlciBvZiB3 aW5kb3cgZnVuY3Rpb24gc2hvdWxkbid0IGFmZmVjdCBxdWVyeSdzIE9SREVSIEJZIHB1c2hk b3duCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgZW1wbm8sCisgICAgICAgZGVwbmFt ZSwKKyAgICAgICBjb3VudCgqKSBPVkVSIChPUkRFUiBCWSBlbnJvbGxfZGF0ZSBERVNDKSBj LAorICAgICAgIHN1bShzYWxhcnkpIE9WRVIgKFBBUlRJVElPTiBCWSBkZXBuYW1lKSBkZXBz YWxhcnksCisgICAgICAgbWluKHNhbGFyeSkgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUg T1JERVIgQlkgZW1wbm8pIGRlcG1pbnNhbGFyeQorRlJPTSBlbXBzYWxhcnkKK09SREVSIEJZ IGRlcG5hbWUsIGVtcG5vLCBlbnJvbGxfZGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgV2luZG93QWdnCisgICAtPiAg V2luZG93QWdnCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6 IGRlcG5hbWUsIGVtcG5vLCBlbnJvbGxfZGF0ZQorICAgICAgICAgICAgICAgLT4gIFdpbmRv d0FnZworICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNvcnQgS2V5OiBlbnJvbGxfZGF0ZSBERVNDCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZW1wc2FsYXJ5CisoOCByb3dzKQorCistLSBT T1JUIE9QVElNSVpBVElPTiAoYXMgaW4gY2FzZXMgYWJvdmUpIGlzIG5vdCBuZWVkZWQgdG8g YmUgcGVyZm9ybWVkCistLSBpbiBjYXNlcywgYXMgbWVudGlvbmVkIGJlbG93LgorLS0gQ2Fz ZSAjMTogV2hlbiBkaXN0aW5jdCBjbGF1c2UgaXMgaW5jbHVkZWQKK0VYUExBSU4gKENPU1RT IE9GRikKK1NFTEVDVCBESVNUSU5DVCBlbXBubywKKyAgICAgICBkZXBuYW1lLAorICAgICAg IG1pbihzYWxhcnkpIE9WRVIgKFBBUlRJVElPTiBCWSBkZXBuYW1lKSBkZXBtaW5zYWxhcnks CisgICAgICAgc3VtKHNhbGFyeSkgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUpIGRlcHNh bGFyeSwKKyAgICAgICBjb3VudCgqKSBPVkVSIChPUkRFUiBCWSBlbnJvbGxfZGF0ZSBERVND KSBjCitGUk9NIGVtcHNhbGFyeQorT1JERVIgQlkgZGVwbmFtZSwgZW1wbm87CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVW5pcXVlCisgICAt PiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGRlcG5hbWUsIGVtcG5vLCAobWluKHNhbGFy eSkgT1ZFUiAoPykpLCAoc3VtKHNhbGFyeSkgT1ZFUiAoPykpLCAoY291bnQoKikgT1ZFUiAo PykpCisgICAgICAgICAtPiAgV2luZG93QWdnCisgICAgICAgICAgICAgICAtPiAgU29ydAor ICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IGRlcG5hbWUKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBXaW5kb3dBZ2cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBT b3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogZW5yb2xs X2RhdGUgREVTQworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGVtcHNhbGFyeQorKDEwIHJvd3MpCisKKy0tIENhc2UgIzI6IFdoZW4gTGltaXQg Y2xhdXNlIGlzIHNwZWNpZmllZAorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGVtcG5v LAorICAgICAgIGRlcG5hbWUsCisgICAgICAgbWluKHNhbGFyeSkgT1ZFUiAoUEFSVElUSU9O IEJZIGVtcG5vKSBkZXBtaW5zYWxhcnksCisgICAgICAgc3VtKHNhbGFyeSkgT1ZFUiAoUEFS VElUSU9OIEJZIGVtcG5vKSBkZXBzYWxhcnkKK0ZST00gZW1wc2FsYXJ5CitPUkRFUiBCWSBl bXBubywgZGVwbmFtZSBMSU1JVCAxOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgTGltaXQKKyAgIC0+ICBJbmNyZW1lbnRhbCBTb3J0CisgICAgICAg ICBTb3J0IEtleTogZW1wbm8sIGRlcG5hbWUKKyAgICAgICAgIFByZXNvcnRlZCBLZXk6IGVt cG5vCisgICAgICAgICAtPiAgV2luZG93QWdnCisgICAgICAgICAgICAgICAtPiAgU29ydAor ICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IGVtcG5vCisgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gZW1wc2FsYXJ5CisoOCByb3dzKQorCistLSBDYXNlICMz OiBXaGVuIE9SREVSIEJZIGNvbnRhaW5zIGFueSBXaW5kb3dGdW5jcworRVhQTEFJTiAoQ09T VFMgT0ZGKQorU0VMRUNUIGVtcG5vLAorICAgICAgIHJvd19udW1iZXIoKSBvdmVyIChQQVJU SVRJT04gQlkgZW1wbm8pIGVzYWxhcnkKK0ZST00gZW1wc2FsYXJ5CitPUkRFUiBCWSBlbXBu bywgZXNhbGFyeTsKKyAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIElu Y3JlbWVudGFsIFNvcnQKKyAgIFNvcnQgS2V5OiBlbXBubywgKHJvd19udW1iZXIoKSBPVkVS ICg/KSkKKyAgIFByZXNvcnRlZCBLZXk6IGVtcG5vCisgICAtPiAgV2luZG93QWdnCisgICAg ICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGVtcG5vCisgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gZW1wc2FsYXJ5CisoNyByb3dzKQorCistLSBDYXNl ICM0OiBXaGVuIFdpbmRvd0Z1bmMgT1JERVIgQlkgaXMgc3VwZXJzZXQgb2YgUVVFUlkncyBP UkRFUiBCWQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGVtcG5vLAorICAgICAgIHN1 bShzYWxhcnkpIE9WRVIgKFBBUlRJVElPTiBCWSBkZXBuYW1lKSBkZXBzYWxhcnksCisgICAg ICAgbWluKHNhbGFyeSkgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUgT1JERVIgQlkgZW1w bm8pIGRlcG1pbnNhbGFyeQorRlJPTSBlbXBzYWxhcnkKK09SREVSIEJZIGRlcG5hbWU7Cisg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBXaW5kb3dBZ2cKKyAgIC0+ICBXaW5k b3dBZ2cKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogZGVw bmFtZSwgZW1wbm8KKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBlbXBzYWxhcnkK Kyg1IHJvd3MpCisKIC0tIFRlc3QgU29ydCBub2RlIHJlb3JkZXJpbmcKIEVYUExBSU4gKENP U1RTIE9GRikKIFNFTEVDVApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvd2lu ZG93LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3dpbmRvdy5zcWwKaW5kZXggYjdiZDBh ODNkYS4uNjY1ZTE1NjkyMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvd2lu ZG93LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC93aW5kb3cuc3FsCkBAIC0xMzI0 LDggKzEzMjQsMTEwIEBAIFNFTEVDVCBESVNUSU5DVAogRlJPTSBlbXBzYWxhcnkKIE9SREVS IEJZIGRlcG5hbWUsIGVtcG5vOwogCistLSBEbyBub3QgcGVyZm9ybSBzb3J0IHB1c2hkb3du IGlmIGNvbHVtbiBpcyBwcmVzb3J0ZWQKK0NSRUFURSBJTkRFWCBkZXBuYW1lX2lkeCBPTiBl bXBzYWxhcnkoZGVwbmFtZSk7CitTRVQgZW5hYmxlX3NlcXNjYW49MDsKKworRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUIGVtcG5vLAorICAgICAgICBtaW4oc2FsYXJ5KSBPVkVSIChQ QVJUSVRJT04gQlkgZGVwbmFtZSkgZGVwbWluc2FsYXJ5CitGUk9NIGVtcHNhbGFyeQorT1JE RVIgQlkgZGVwbmFtZSwgZW1wbm87CisKKy0tIERvIHBlcmZvcm0gc29ydCBwdXNoZG93biBp ZiBjb2x1bW5zIGFyZSBvbmx5IHBhcnRpYWxseSBzb3J0ZWQKK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCBlbXBubywKKyAgICAgICAgbWluKHNhbGFyeSkgT1ZFUiAoUEFSVElUSU9O IEJZIGRlcG5hbWUsIGVtcG5vKSBkZXBtaW5zYWxhcnkKK0ZST00gZW1wc2FsYXJ5CitPUkRF UiBCWSBkZXBuYW1lLCBlbXBubywgZW5yb2xsX2RhdGU7CisKK0RST1AgSU5ERVggZGVwbmFt ZV9pZHg7CitSRVNFVCBlbmFibGVfc2Vxc2NhbjsKIFJFU0VUIGVuYWJsZV9oYXNoYWdnOwog CistLSBJZiB3aW5kb3cgZnVuY3Rpb24ncyBPUkRFUiBCWSBpcyBzdWJzZXQgb2YgUVVFUlkn cyBPUkRFUiBCWSwgc29ydCBhcyBwZXIgYXMKKy0tIFFVRVJZJ3MgT1JERVIgQlkgdG8gc2F2 ZSBhZGRpdGlvbmFsIHNvcnRpbmcgaW4gdGhlIGVuZAorRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUIGVtcG5vLAorICAgICAgIGRlcG5hbWUsCisgICAgICAgbWluKHNhbGFyeSkgT1ZF UiAoT1JERVIgQlkgZGVwbmFtZSkgZGVwbWluc2FsYXJ5CitGUk9NIGVtcHNhbGFyeQorT1JE RVIgQlkgZGVwbmFtZSwgZW1wbm87CisKKy0tIFNhbWUgYXMgYWJvdmUsIGJ1dCBQQVJUSVRJ T04gQlkgY2xhdXNlIGlzIGluY2x1ZGVkIGFzIHdlbGwKK0VYUExBSU4gKENPU1RTIE9GRikK K1NFTEVDVCBlbXBubywKKyAgICAgICBkZXBuYW1lLAorICAgICAgIG1pbihzYWxhcnkpIE9W RVIgKFBBUlRJVElPTiBCWSBkZXBuYW1lIE9SREVSIEJZIGVtcG5vKSBkZXBtaW5zYWxhcnkK K0ZST00gZW1wc2FsYXJ5CitPUkRFUiBCWSBkZXBuYW1lLCBlbXBubywgZW5yb2xsX2RhdGU7 CisKKy0tIE5lZ2F0aW9uIG9mIGFib3ZlLCB3aGVuIHNvcnQgb3B0aW1pemF0aW9uIGlzIG5v dCBuZWVkZWQgdG8gYmUgcGVyZm9ybWVkCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg ZW1wbm8sCisgICAgICAgZGVwbmFtZSwKKyAgICAgICBtaW4oc2FsYXJ5KSBPVkVSIChQQVJU SVRJT04gQlkgZGVwbmFtZSBPUkRFUiBCWSBlbXBubykgZGVwbWluc2FsYXJ5CitGUk9NIGVt cHNhbGFyeQorT1JERVIgQlkgZW1wbm8sIGVucm9sbF9kYXRlOworCistLSBPUkRFUiBCWSdz IGluIG11bHRpcGxlIFdpbmRvdyBmdW5jdGlvbnMgY2FuIGJlIGNvbWJpbmVkIGludG8gb25l CistLSBpZiB0aGV5IGFyZSBzdWJzZXQgb2YgUVVFUlkncyBPUkRFUiBCWQorRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUIGVtcG5vLAorICAgICAgIGRlcG5hbWUsCisgICAgICAgbWlu KHNhbGFyeSkgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUgT1JERVIgQlkgZW1wbm8pIGRl cG1pbnNhbGFyeSwKKyAgICAgICBzdW0oc2FsYXJ5KSBPVkVSIChQQVJUSVRJT04gQlkgZGVw bmFtZSkgZGVwc2FsYXJ5LAorICAgICAgIGNvdW50KCopIE9WRVIgKE9SREVSIEJZIGVucm9s bF9kYXRlIERFU0MpIGMKK0ZST00gZW1wc2FsYXJ5CitPUkRFUiBCWSBkZXBuYW1lLCBlbXBu bywgZW5yb2xsX2RhdGU7CisKKy0tIG9yZGVyIG9mIHdpbmRvdyBmdW5jdGlvbiBzaG91bGRu J3QgYWZmZWN0IHF1ZXJ5J3MgT1JERVIgQlkgcHVzaGRvd24KK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCBlbXBubywKKyAgICAgICBkZXBuYW1lLAorICAgICAgIGNvdW50KCopIE9W RVIgKE9SREVSIEJZIGVucm9sbF9kYXRlIERFU0MpIGMsCisgICAgICAgc3VtKHNhbGFyeSkg T1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUpIGRlcHNhbGFyeSwKKyAgICAgICBtaW4oc2Fs YXJ5KSBPVkVSIChQQVJUSVRJT04gQlkgZGVwbmFtZSBPUkRFUiBCWSBlbXBubykgZGVwbWlu c2FsYXJ5CitGUk9NIGVtcHNhbGFyeQorT1JERVIgQlkgZGVwbmFtZSwgZW1wbm8sIGVucm9s bF9kYXRlOworCistLSBTT1JUIE9QVElNSVpBVElPTiAoYXMgaW4gY2FzZXMgYWJvdmUpIGlz IG5vdCBuZWVkZWQgdG8gYmUgcGVyZm9ybWVkCistLSBpbiBjYXNlcywgYXMgbWVudGlvbmVk IGJlbG93LgorCistLSBDYXNlICMxOiBXaGVuIGRpc3RpbmN0IGNsYXVzZSBpcyBpbmNsdWRl ZAorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIERJU1RJTkNUIGVtcG5vLAorICAgICAg IGRlcG5hbWUsCisgICAgICAgbWluKHNhbGFyeSkgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5h bWUpIGRlcG1pbnNhbGFyeSwKKyAgICAgICBzdW0oc2FsYXJ5KSBPVkVSIChQQVJUSVRJT04g QlkgZGVwbmFtZSkgZGVwc2FsYXJ5LAorICAgICAgIGNvdW50KCopIE9WRVIgKE9SREVSIEJZ IGVucm9sbF9kYXRlIERFU0MpIGMKK0ZST00gZW1wc2FsYXJ5CitPUkRFUiBCWSBkZXBuYW1l LCBlbXBubzsKKworLS0gQ2FzZSAjMjogV2hlbiBMaW1pdCBjbGF1c2UgaXMgc3BlY2lmaWVk CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgZW1wbm8sCisgICAgICAgZGVwbmFtZSwK KyAgICAgICBtaW4oc2FsYXJ5KSBPVkVSIChQQVJUSVRJT04gQlkgZW1wbm8pIGRlcG1pbnNh bGFyeSwKKyAgICAgICBzdW0oc2FsYXJ5KSBPVkVSIChQQVJUSVRJT04gQlkgZW1wbm8pIGRl cHNhbGFyeQorRlJPTSBlbXBzYWxhcnkKK09SREVSIEJZIGVtcG5vLCBkZXBuYW1lIExJTUlU IDE7CisKKy0tIENhc2UgIzM6IFdoZW4gT1JERVIgQlkgY29udGFpbnMgYW55IFdpbmRvd0Z1 bmNzCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgZW1wbm8sCisgICAgICAgcm93X251 bWJlcigpIG92ZXIgKFBBUlRJVElPTiBCWSBlbXBubykgZXNhbGFyeQorRlJPTSBlbXBzYWxh cnkKK09SREVSIEJZIGVtcG5vLCBlc2FsYXJ5OworCistLSBDYXNlICM0OiBXaGVuIFdpbmRv d0Z1bmMgT1JERVIgQlkgaXMgc3VwZXJzZXQgb2YgUVVFUlkncyBPUkRFUiBCWQorRVhQTEFJ TiAoQ09TVFMgT0ZGKQorU0VMRUNUIGVtcG5vLAorICAgICAgIHN1bShzYWxhcnkpIE9WRVIg KFBBUlRJVElPTiBCWSBkZXBuYW1lKSBkZXBzYWxhcnksCisgICAgICAgbWluKHNhbGFyeSkg T1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUgT1JERVIgQlkgZW1wbm8pIGRlcG1pbnNhbGFy eQorRlJPTSBlbXBzYWxhcnkKK09SREVSIEJZIGRlcG5hbWU7CisKIC0tIFRlc3QgU29ydCBu b2RlIHJlb3JkZXJpbmcKIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVDVAotLSAKMi4zNy4y Cgo= --------------NU0WAbYLYg56IrxaeSqW9upW--