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 1pI4yE-0000aJ-QO for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Jan 2023 09:43:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pI4yD-0006wZ-MF for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Jan 2023 09:43:01 +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 1pI4yD-0006vj-94 for pgsql-hackers@lists.postgresql.org; Wed, 18 Jan 2023 09:43:01 +0000 Received: from mail-oo1-xc36.google.com ([2607:f8b0:4864:20::c36]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pI4yA-0000av-Km for pgsql-hackers@lists.postgresql.org; Wed, 18 Jan 2023 09:43:00 +0000 Received: by mail-oo1-xc36.google.com with SMTP id 123-20020a4a0681000000b004faa9c6f6b9so670369ooj.11 for ; Wed, 18 Jan 2023 01:42:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=1UggMFGn/62f8w3u0mVMXgtQs3JwJ3+3nun1zi6Qv+g=; b=FUYmuyrpxAPQlpiI1sTfAMrYBzvhxVA4Bgbj0s9iRT3vGWrrCe7OndpjBKDnNCRdKv XaepKss8HEWM6KBs4x7vfzyu1ebMc5sj3kqNe6JGWzMlrrrbJFdx1R8Z5hhUe9JctM/D GB0Gt0296cL4pkYHKdMF1cHNo5L4X5EydIzOUx7YIfTBF8P0RRBsC+X21ddLT1OSCWKP 8AM7OZ9u98ED74mP+6vUXPemsaVmsswFxTxu+eX3iEEAlN0Qk5mPyx/xZ9cHwpvCK4IG tmJsr6c01Pdey1iPPL80AghGGjTwnd7xXriTII95jk/6aXKI+caIQoj4XWzzUIMCt7+P 0p9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=1UggMFGn/62f8w3u0mVMXgtQs3JwJ3+3nun1zi6Qv+g=; b=Nh5/0or9AWK4HuZWdioClXn/czAD8wnxHVY/pLv9tVwG+BzQKkzATbltS39NaqEoCU eU+75PKuxezKKj7I4csS7iIiTSHIfF5xCLL2RLqKvfme34Tu5r2pT+dlQgUbHvb4VEiN 2bW2hMjAjoaeHxw4wuOhVATlR5OGwfxfvaxz473PmYG/2F1+V070Y+GX5SLsrHexQs+V 9v2gCIlCVc2rVUTcZR46511FtEkBGCCavbQl4Hn/4yPAmhc8Hd34GzhUWJeReMq5liNB zNBL7c1WQjT6dDvgYeszcUX9SFBcFee6M9/WKYhuzz+5HrODsNunufkoEGEhVyG7Z4Q9 pwdg== X-Gm-Message-State: AFqh2kpK+9ySR6nej2mksT/6OjcMw7m7x2km0tEEcljuWkwNACE7EDeT J+/VoP8bLkILUaRNNZdMgoTyYH//OBAx7SqBEvw= X-Google-Smtp-Source: AMrXdXvNUCrIFs2knw0ScmEAkOxvpREQDvCQkEpvDpI7yma927HbMYeSG/LhgbKTCd+Gv6MVujyFVEDoToy8Q4I1aw8= X-Received: by 2002:a4a:e712:0:b0:4f5:2859:f146 with SMTP id y18-20020a4ae712000000b004f52859f146mr285919oou.97.1674034976689; Wed, 18 Jan 2023 01:42:56 -0800 (PST) MIME-Version: 1.0 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> <4ef7f947-526b-c4ec-f7a0-8b4586e693e4@gmail.com> In-Reply-To: <4ef7f947-526b-c4ec-f7a0-8b4586e693e4@gmail.com> From: David Rowley Date: Wed, 18 Jan 2023 22:42:40 +1300 Message-ID: Subject: Re: Todo: Teach planner to evaluate multiple windows in the optimal order To: Ankit Kumar Pandey Cc: pghackers , Vik Fearing Content-Type: multipart/mixed; boundary="00000000000020b55e05f286a417" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000020b55e05f286a417 Content-Type: text/plain; charset="UTF-8" On Tue, 10 Jan 2023 at 06:15, Ankit Kumar Pandey wrote: > > > > On 09/01/23 17:53, David Rowley wrote: > > 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 also thought I'd better test that foreach_delete_current() works with foreach_reverse(). I can confirm that it *does not* work correctly. I guess maybe you only tested the fact that it deleted the current item and not that the subsequent loop correctly went to the item directly before the deleted item. There's a problem with that. We skip an item. Instead of fixing that, I think it's likely better just to loop backwards manually with a for() loop, so I've adjusted the patch to work that way. It's quite likely that the additional code in foreach() and what was in foreach_reverse() is slower than looping manually due to the additional work those macros do to set the cell to NULL when we run out of cells to loop over. > I have attached patch with one extra test case (as mentioned above). > Rest of the changes are looking fine. I made another pass over the v7 patch and fixed a bug that was disabling the optimization when the deepest WindowAgg had a runCondition. This should have been using llast_node instead of linitial_node. The top-level WindowAgg is the last in the list. I also made a pass over the tests and added a test case for the runCondition check to make sure we disable the optimization when the top-level WindowAgg has one of those. I wasn't sure what your test comments case numbers were meant to represent. They were not aligned with the code comments that document when the optimisation is disabled, they started out aligned, but seemed to go off the rails at #3. I've now made them follow the comments in create_one_window_path() and made it more clear what we expect the test outcome to be in each case. I've attached the v9 patch. I feel like this patch is quite self-contained and I'm quite happy with it now. If there are no objections soon, I'm planning on pushing it. David --00000000000020b55e05f286a417 Content-Type: text/plain; charset="US-ASCII"; name="better_windowclause_sorting_dgr-v9.patch" Content-Disposition: attachment; filename="better_windowclause_sorting_dgr-v9.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ld1h2p0j0 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCAwOTNhY2UwODY0Li5jMTEwNjk2 NDAzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysr IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC00NDY0LDggKzQ0NjQs MTEgQEAgY3JlYXRlX29uZV93aW5kb3dfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJICAg TGlzdCAqYWN0aXZlV2luZG93cykKIHsKIAlQYXRoVGFyZ2V0ICp3aW5kb3dfdGFyZ2V0OworCVF1 ZXJ5CSAgICpwYXJzZSA9IHJvb3QtPnBhcnNlOwogCUxpc3RDZWxsICAgKmw7CiAJTGlzdAkgICAq dG9wcXVhbCA9IE5JTDsKKwlMaXN0CSAgICpvcmRlcmJ5X3BhdGhrZXlzID0gTklMOworCWludAkJ CXNvcnRfcHVzaGRvd25faWR4ID0gLTE7CiAKIAkvKgogCSAqIFNpbmNlIGVhY2ggd2luZG93IGNs YXVzZSBjb3VsZCByZXF1aXJlIGEgZGlmZmVyZW50IHNvcnQgb3JkZXIsIHdlIHN0YWNrCkBAIC00 NDg0LDYgKzQ0ODcsNzUgQEAgY3JlYXRlX29uZV93aW5kb3dfcGF0aChQbGFubmVySW5mbyAqcm9v dCwKIAkgKi8KIAl3aW5kb3dfdGFyZ2V0ID0gaW5wdXRfdGFyZ2V0OwogCisJLyoKKwkgKiBIZXJl IHdlIGF0dGVtcHQgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBzb3J0cyB3aGljaCBtdXN0IGJl IHBlcmZvcm1lZAorCSAqIGZvciBxdWVyaWVzIHdpdGggYW4gT1JERVIgQlkgY2xhdXNlLgorCSAq CisJICogSXQncyBwb3NzaWJsZSBkdWUgdG8gc2VsZWN0X2FjdGl2ZV93aW5kb3dzKCkgcHV0dGlu ZyB0aGUgV2luZG93Q2xhdXNlcworCSAqIHdpdGggdGhlIGxvd2VzdCB0bGVTb3J0R3JvdXBSZWYg bGFzdCBpbiB0aGUgYWN0aXZlV2luZG93cyBsaXN0IHRoYXQgdGhlCisJICogZmluYWwgV2luZG93 Q2xhdXNlIGhhcyBhIHN1YnNldCBvZiB0aGUgc29ydCByZXF1aXJlbWVudHMgdGhhdCB0aGUKKwkg KiBxdWVyeSdzIE9SREVSIEJZIGNsYXVzZSBoYXMuICBCZWxvdyB3ZSB0cnkgdG8gZGV0ZWN0IHRo aXMgY2FzZSBhbmQgaWYKKwkgKiB3ZSBmaW5kIHRoaXMgaXMgdHJ1ZSwgd2UgY29uc2lkZXIgYWRq dXN0aW5nIHRoZSBzb3J0IHRoYXQncyBkb25lIGZvcgorCSAqIFdpbmRvd0FnZ3MgYW5kIGluY2x1 ZGUgdGhlIGFkZGl0aW9uYWwgY2xhdXNlcyBzbyB0aGF0IG5vIGFkZGl0aW9uYWwKKwkgKiBzb3J0 aW5nIGlzIHJlcXVpcmVkIGZvciB0aGUgcXVlcnkncyBPUkRFUiBCWSBjbGF1c2UuCisJICoKKwkg KiBXZSBkb24ndCB0cnkgdGhpcyBvcHRpbWl6YXRpb24gZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXM6 CisJICoKKwkgKiAxLiBJZiB0aGUgcXVlcnkgaGFzIGEgRElTVElOQ1QgY2xhdXNlLiAgV2UgbmVl ZG4ndCB3YXN0ZSBhbnkgYWRkaXRpb25hbAorCSAqIGVmZm9ydCBmb3IgdGhlIG1vcmUgc3RyaWN0 IHNvcnQgb3JkZXIgYXMgaWYgRElTVElOQ1QgaXMgZG9uZSB2aWEgSGFzaAorCSAqIEFnZ3JlZ2F0 ZSB0aGVuIHRoYXQncyBnb2luZyB0byB1bmRvIHRoaXMgd29yay4KKwkgKgorCSAqIDIuIElmIHRo ZSBxdWVyeSBoYXMgYSBMSU1JVCBjbGF1c2UuICBUaGUgdG9wLWxldmVsIHNvcnQgd2lsbCBiZSBh YmxlIHRvCisJICogdXNlIGEgdG9wLW4gc29ydCB3aGljaCBtaWdodCBiZSBtb3JlIGVmZmljaWVu dCB0aGFuIHNvcnRpbmcJYnkgdGhlCisJICogYWRkaXRpb25hbCBjb2x1bW5zLiAgSWYgdGhlIExJ TUlUIGRvZXMgbm90IHJlZHVjZSB0aGUJbnVtYmVyIG9mIHJvd3MKKwkgKiBzaWduaWZpY2FudGx5 IHRoZW4gdGhpcyBtaWdodCBub3QgYmUgdHJ1ZSwgYnV0IHdlIGRvbid0IHRyeSB0byBjb25zaWRl cgorCSAqIHRoYXQgaGVyZS4KKwkgKgorCSAqIDMuIElmIHRoZSB0b3AtbGV2ZWwgV2luZG93Q2xh dXNlIGhhcyBhIHJ1bkNvbmRpdGlvbiB0aGVuIHRoaXMgY2FuCisJICogZmlsdGVyIG91dCB0dXBs ZXMgYW5kIG1ha2UgdGhlIGZpbmFsIHNvcnQgY2hlYXBlci4gIElmIHdlIHB1c2hlZCB0aGUKKwkg KiBzb3J0IGRvd24gYmVsb3cgdGhlIFdpbmRvd0FnZyB0aGVuIHdlJ2QgbmVlZCB0byBzb3J0IGFs bCByb3dzIGluY2x1ZGluZworCSAqIG9uZXMgdGhhdCB0aGUgcnVuQ29uZGl0aW9uIG1pZ2h0IGZp bHRlciBvdXQuICBUaGlzIG1heSB3YXN0ZSBlZmZvcnQgc28KKwkgKiB3ZSBqdXN0IGRvbid0IHRy eSB0byBwdXNoIGRvd24gdGhlIHNvcnQgZm9yIHRoaXMgY2FzZS4KKwkgKgorCSAqIDQuIElmIHRo ZSBPUkRFUiBCWSBjb250YWlucyBhbnkgZXhwcmVzc2lvbnMgY29udGFpbmluZyBXaW5kb3dGdW5j cyB0aGVuCisJICogd2UgY2FuJ3QgcHVzaCBkb3duIHRoZSBzb3J0IGFzIHRoZXNlIG9idmlvdXNs eSBtdXN0IGJlIGV2YWx1YXRlZCBiZWZvcmUKKwkgKiB0aGV5IGNhbiBiZSBzb3J0ZWQuCisJICov CisJaWYgKHBhcnNlLT5zb3J0Q2xhdXNlICE9IE5JTCAmJiBwYXJzZS0+ZGlzdGluY3RDbGF1c2Ug PT0gTklMICYmCisJCXBhcnNlLT5saW1pdENvdW50ID09IE5VTEwgJiYKKwkJbGxhc3Rfbm9kZShX aW5kb3dDbGF1c2UsIGFjdGl2ZVdpbmRvd3MpLT5ydW5Db25kaXRpb24gPT0gTklMICYmCisJCSFj b250YWluX3dpbmRvd19mdW5jdGlvbigoTm9kZSAqKSBnZXRfc29ydGdyb3VwbGlzdF9leHBycyhw YXJzZS0+c29ydENsYXVzZSwKKwkJCQkJCQkJCQkJCQkJCQkgIHJvb3QtPnByb2Nlc3NlZF90bGlz dCkpKQorCXsKKwkJb3JkZXJieV9wYXRoa2V5cyA9IG1ha2VfcGF0aGtleXNfZm9yX3NvcnRjbGF1 c2VzKHJvb3QsCisJCQkJCQkJCQkJCQkJCSBwYXJzZS0+c29ydENsYXVzZSwKKwkJCQkJCQkJCQkJ CQkJIHJvb3QtPnByb2Nlc3NlZF90bGlzdCk7CisKKwkJLyoKKwkJICogTG9vcCBiYWNrd2FyZHMg b3ZlciB0aGUgV2luZG93Q2xhdXNlcyBsb29raW5nIGZvciB0aGUgZmlyc3QKKwkJICogV2luZG93 Q2xhdXNlIHdoaWNoIGhhcyBwYXRoa2V5cyBub3QgY29udGFpbmVkIGluIHRoZQorCQkgKiBvcmRl cmJ5X3BhdGhrZXlzLiAgV2hhdCB3ZSdyZSBsb29raW5nIGZvciBoZXJlIGlzIHRoZSBsb3dlc3Qg bGV2ZWwKKwkJICogdGhhdCB3ZSBwdXNoIHRoZSBhZGRpdGlvbmFsIHNvcnQgcmVxdWlyZW1lbnRz IGRvd24gaW50by4gIElmIHdlCisJCSAqIGNhbid0IGZpbmQgYW55IFdpbmRvd0NsYXVzZSB3aXRo IHN1aXRhYmxlIHBhdGhrZXlzIGhlcmUgdGhlbgorCQkgKiBzb3J0X3B1c2hkb3duX2lkeCB3aWxs IHJlbWFpbiBhdCAtMSB3aGljaCB3aWxsIGVmZmVjdGl2ZWx5IGRpc2FibGUKKwkJICogdGhlIHB1 c2hkb3duIGF0dGVtcHQgbGF0ZXIgaW4gdGhpcyBmdW5jdGlvbi4KKwkJICovCisJCWZvciAoaW50 IGkgPSBsaXN0X2xlbmd0aChhY3RpdmVXaW5kb3dzKSAtIDE7IGkgPj0gMDsgaS0tKQorCQl7CisJ CQlXaW5kb3dDbGF1c2UgKndjID0gbGlzdF9udGhfbm9kZShXaW5kb3dDbGF1c2UsIGFjdGl2ZVdp bmRvd3MsIGkpOworCQkJTGlzdAkgICAqd2luZG93X3BhdGhrZXlzOworCisJCQl3aW5kb3dfcGF0 aGtleXMgPSBtYWtlX3BhdGhrZXlzX2Zvcl93aW5kb3cocm9vdCwKKwkJCQkJCQkJCQkJCQkgICB3 YywKKwkJCQkJCQkJCQkJCQkgICByb290LT5wcm9jZXNzZWRfdGxpc3QpOworCisJCQlpZiAocGF0 aGtleXNfY29udGFpbmVkX2luKHdpbmRvd19wYXRoa2V5cywgb3JkZXJieV9wYXRoa2V5cykpCisJ CQkJc29ydF9wdXNoZG93bl9pZHggPSBpOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJfQor CiAJZm9yZWFjaChsLCBhY3RpdmVXaW5kb3dzKQogCXsKIAkJV2luZG93Q2xhdXNlICp3YyA9IGxm aXJzdF9ub2RlKFdpbmRvd0NsYXVzZSwgbCk7CkBAIC00NDk2LDYgKzQ1NjgsMjUgQEAgY3JlYXRl X29uZV93aW5kb3dfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCSAgIHdjLAog CQkJCQkJCQkJCQkJICAgcm9vdC0+cHJvY2Vzc2VkX3RsaXN0KTsKIAorCQkvKgorCQkgKiBXaGVu IHdlIGdldCB0byB0aGUgc29ydF9wdXNoZG93bl9pZHggV2luZG93Q2xhdXNlLCBpZiB0aGUgcGF0 aCBpcworCQkgKiBub3QgYWxyZWFkeSBjb3JyZWN0bHkgc29ydGVkLCB0aGVuIGp1c3QgdXNlIHRo ZSBwYXRoa2V5cyBmb3IgdGhlCisJCSAqIHF1ZXJ5J3MgT1JERVIgQlkgY2xhdXNlIGluc3RlYWQg b2YgdGhlIFdpbmRvd0NsYXVzZSdzIHBhdGhrZXlzLgorCQkgKiBXaGVuIHRoZSBwYXRoIGlzIGFs cmVhZHkgY29ycmVjdGx5IHNvcnRlZCB0aGVyZSdzIG5vIHBvaW50IGluCisJCSAqIGFkanVzdGlu ZyB0aGUgcGF0aGtleXMgYXMgdGhpcyBqdXN0IG1vdmVzIHRoZSBzb3J0IGRvd24gd2l0aG91dAor CQkgKiBhY3R1YWxseSByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIHNvcnRzIHdoaWNoIGFyZSByZXF1 aXJlZCBpbiB0aGUKKwkJICogcGxhbiBvdmVyYWxsLiAgc29ydF9wdXNoZG93bl9pZHggd2lsbCBi ZSAtMSBhbmQgbmV2ZXIgbWF0Y2ggd2hlbgorCQkgKiB0aGlzIG9wdGltaXphdGlvbiB3YXMgZGlz YWJsZWQgYWJvdmUuCisJCSAqLworCQlpZiAoZm9yZWFjaF9jdXJyZW50X2luZGV4KGwpID09IHNv cnRfcHVzaGRvd25faWR4ICYmCisJCQkhcGF0aGtleXNfY29udGFpbmVkX2luKHdpbmRvd19wYXRo a2V5cywgcGF0aC0+cGF0aGtleXMpKQorCQl7CisJCQkvKiBjaGVjayB0byBtYWtlIHN1cmUgc29y dF9wdXNoZG93bl9pZHggd2FzIHNldCBjb3JyZWN0bHkgKi8KKwkJCUFzc2VydChwYXRoa2V5c19j b250YWluZWRfaW4od2luZG93X3BhdGhrZXlzLCBvcmRlcmJ5X3BhdGhrZXlzKSk7CisKKwkJCXdp bmRvd19wYXRoa2V5cyA9IG9yZGVyYnlfcGF0aGtleXM7CisJCX0KKwogCQlpc19zb3J0ZWQgPSBw YXRoa2V5c19jb3VudF9jb250YWluZWRfaW4od2luZG93X3BhdGhrZXlzLAogCQkJCQkJCQkJCQkJ cGF0aC0+cGF0aGtleXMsCiAJCQkJCQkJCQkJCQkmcHJlc29ydGVkX2tleXMpOwpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aW5kb3cub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC93aW5kb3cub3V0CmluZGV4IGIyYzY2MDVlNjAuLjFhMTQxNDEzZjggMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2luZG93Lm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3dpbmRvdy5vdXQKQEAgLTM5ODQsNiArMzk4NCwyMjYgQEAgT1JE RVIgQlkgZGVwbmFtZSwgZW1wbm87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gZW1wc2FsYXJ5CiAoMTIgcm93cykKIAorQ1JFQVRFIElOREVYIGVtcHNh bGFyeV9kZXBuYW1lX2lkeCBPTiBlbXBzYWxhcnkoZGVwbmFtZSk7CitTRVQgZW5hYmxlX3NlcXNj YW4gVE8gb2ZmOworLS0gRW5zdXJlIHdlIGRvbid0IHB1c2ggdGhlIE9SREVSIEJZIHNvcnQgYmVs b3cgdGhlIFdpbmRvd0FnZyB3aGVuIHRoZSBpbnB1dAorLS0gbm9kZSB0byB0aGUgV2luZG93QWdn IGlzIGFscmVhZHkgc29ydGVkIGNvcnJlY3RseS4gIFRoaXMgd291bGQganVzdCBtb3ZlCistLSB0 aGUgc29ydCBkb3duIGFuZCBub3QgcmVkdWNlIHRoZSBudW1iZXIgb2Ygc29ydHMuCitFWFBMQUlO IChDT1NUUyBPRkYpCitTRUxFQ1QgZW1wbm8sCisgICAgICAgbWluKHNhbGFyeSkgT1ZFUiAoUEFS VElUSU9OIEJZIGRlcG5hbWUpIGRlcG1pbnNhbGFyeQorRlJPTSBlbXBzYWxhcnkKK09SREVSIEJZ IGRlcG5hbWUsIGVtcG5vOworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5jcmVtZW50YWwgU29ydAor ICAgU29ydCBLZXk6IGRlcG5hbWUsIGVtcG5vCisgICBQcmVzb3J0ZWQgS2V5OiBkZXBuYW1lCisg ICAtPiAgV2luZG93QWdnCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBlbXBzYWxhcnlf ZGVwbmFtZV9pZHggb24gZW1wc2FsYXJ5CisoNSByb3dzKQorCitEUk9QIElOREVYIGVtcHNhbGFy eV9kZXBuYW1lX2lkeDsKK1JFU0VUIGVuYWJsZV9zZXFzY2FuOworLS0gRW5zdXJlIHdlIHB1c2gg dGhlIE9SREVSIEJZIHNvcnQgYmVsb3cgdGhlIFdpbmRvd0FnZworRVhQTEFJTiAoQ09TVFMgT0ZG KQorU0VMRUNUIGVtcG5vLAorICAgICAgIG1pbihzYWxhcnkpIE9WRVIgKFBBUlRJVElPTiBCWSBk ZXBuYW1lLCBlbXBubykgZGVwbWluc2FsYXJ5CitGUk9NIGVtcHNhbGFyeQorT1JERVIgQlkgZGVw bmFtZSwgZW1wbm8sIGVucm9sbF9kYXRlOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgV2luZG93QWdnCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGRl cG5hbWUsIGVtcG5vLCBlbnJvbGxfZGF0ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGVtcHNh bGFyeQorKDQgcm93cykKKworLS0gQSBtb3JlIGNvbXBsZXggcGVybXV0YXRpb24gb2YgdGhlIGFi b3ZlLiAgRW5zdXJlIHRoZSBPUkRFUiBCWSBzb3J0IGlzCistLSBwdXNoZWQgZG93biBiZWxvdyB0 aGUgV2luZG93QWdnIHdoZW4gdGhlcmUgaXMgYSBQQVJUSVRJT04gQlkgYW5kIE9SREVSIEJZCist LSBjbGF1c2UgaW4gdGhlIFdpbmRvd0Z1bmMKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBl bXBubywKKyAgICAgICBkZXBuYW1lLAorICAgICAgIG1pbihzYWxhcnkpIE9WRVIgKFBBUlRJVElP TiBCWSBkZXBuYW1lIE9SREVSIEJZIGVtcG5vKSBkZXBtaW5zYWxhcnkKK0ZST00gZW1wc2FsYXJ5 CitPUkRFUiBCWSBkZXBuYW1lLCBlbXBubywgZW5yb2xsX2RhdGU7CisgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBXaW5kb3dBZ2cKKyAgIC0+ICBTb3J0CisgICAgICAg ICBTb3J0IEtleTogZGVwbmFtZSwgZW1wbm8sIGVucm9sbF9kYXRlCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gZW1wc2FsYXJ5CisoNCByb3dzKQorCistLSBUcnkgbW9yZSBjb21wbGV4IHBlcm11 dGF0aW9ucyBvZiBwdXNoaW5nIHRoZSBPUkRFUiBCWSdzIHNvcnQgYmVsb3cgdGhlCistLSBXaW5k b3dBZ2cuICBXaXRoIG11bHRpcGxlIFdpbmRvd0FnZ3Mgc2hhcmluZyB0aGUgc2FtZSBzb3J0LCBl bnN1cmUgd2UgcHVzaAorLS0gdGhlIHNvcnQgdG8gdGhlIGNvcnJlY3QgbGV2ZWwuCitFWFBMQUlO IChDT1NUUyBPRkYpCitTRUxFQ1QgZW1wbm8sCisgICAgICAgZGVwbmFtZSwKKyAgICAgICBtaW4o c2FsYXJ5KSBPVkVSIChQQVJUSVRJT04gQlkgZGVwbmFtZSBPUkRFUiBCWSBlbXBubykgZGVwbWlu c2FsYXJ5LAorICAgICAgIHN1bShzYWxhcnkpIE9WRVIgKFBBUlRJVElPTiBCWSBkZXBuYW1lKSBk ZXBzYWxhcnksCisgICAgICAgY291bnQoKikgT1ZFUiAoT1JERVIgQlkgZW5yb2xsX2RhdGUgREVT QykgYworRlJPTSBlbXBzYWxhcnkKK09SREVSIEJZIGRlcG5hbWUsIGVtcG5vLCBlbnJvbGxfZGF0 ZTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgV2luZG93QWdnCisgICAtPiAgV2luZG93QWdnCisgICAgICAgICAtPiAgU29ydAorICAgICAg ICAgICAgICAgU29ydCBLZXk6IGRlcG5hbWUsIGVtcG5vLCBlbnJvbGxfZGF0ZQorICAgICAgICAg ICAgICAgLT4gIFdpbmRvd0FnZworICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBlbnJvbGxfZGF0ZSBERVNDCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZW1wc2FsYXJ5CisoOCByb3dzKQor CistLSBBcyBhYm92ZSwgYnV0IHN3YXAgdGhlIG9yZGVyIG9mIHRoZSBXaW5kb3dGdW5jcyB0byBl bnN1cmUgdGhlaXIgb3JkZXIgaXMKKy0tIG5vdCBhIGZhY3RvciBpbiB0aGUgcGxhbiBjaG9pY2Uu CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgZW1wbm8sCisgICAgICAgZGVwbmFtZSwKKyAg ICAgICBjb3VudCgqKSBPVkVSIChPUkRFUiBCWSBlbnJvbGxfZGF0ZSBERVNDKSBjLAorICAgICAg IHN1bShzYWxhcnkpIE9WRVIgKFBBUlRJVElPTiBCWSBkZXBuYW1lKSBkZXBzYWxhcnksCisgICAg ICAgbWluKHNhbGFyeSkgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUgT1JERVIgQlkgZW1wbm8p IGRlcG1pbnNhbGFyeQorRlJPTSBlbXBzYWxhcnkKK09SREVSIEJZIGRlcG5hbWUsIGVtcG5vLCBl bnJvbGxfZGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgV2luZG93QWdnCisgICAtPiAgV2luZG93QWdnCisgICAgICAgICAtPiAgU29y dAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGRlcG5hbWUsIGVtcG5vLCBlbnJvbGxfZGF0ZQor ICAgICAgICAgICAgICAgLT4gIFdpbmRvd0FnZworICAgICAgICAgICAgICAgICAgICAgLT4gIFNv cnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBlbnJvbGxfZGF0ZSBERVND CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZW1wc2FsYXJ5Ciso OCByb3dzKQorCistLSBFbnN1cmUgdGhhdCB3ZSBkb24ndCBwdXNoIHRoZSBPUkRFUiBCWSdzIHNv cnQgZG93biBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcy4KKy0tIFNlZSB0aGUgY29tbWVudCBpbiBj cmVhdGVfb25lX3dpbmRvd19wYXRoKCkgZm9yIGRldGFpbHMgb2YgZWFjaCBjYXNlIHRoYXQKKy0t IHdlIGRvbid0IHBlcmZvcm0gdGhlIG9wdGltaXphdGlvbi4KKy0tIENhc2UgIzE6IERvbid0IHB1 c2ggdGhlIE9SREVSIEJZJ3Mgc29ydCBkb3duIHdoZW4gdGhlcmUncyBhIERJU1RJTkNUIGNsYXVz ZQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIERJU1RJTkNUIGVtcG5vLAorICAgICAgIGRl cG5hbWUsCisgICAgICAgbWluKHNhbGFyeSkgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUpIGRl cG1pbnNhbGFyeSwKKyAgICAgICBzdW0oc2FsYXJ5KSBPVkVSIChQQVJUSVRJT04gQlkgZGVwbmFt ZSkgZGVwc2FsYXJ5LAorICAgICAgIGNvdW50KCopIE9WRVIgKE9SREVSIEJZIGVucm9sbF9kYXRl IERFU0MpIGMKK0ZST00gZW1wc2FsYXJ5CitPUkRFUiBCWSBkZXBuYW1lLCBlbXBubzsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBVbmlxdWUKKyAgIC0+ICBJbmNyZW1l bnRhbCBTb3J0CisgICAgICAgICBTb3J0IEtleTogZGVwbmFtZSwgZW1wbm8sIChtaW4oc2FsYXJ5 KSBPVkVSICg/KSksIChzdW0oc2FsYXJ5KSBPVkVSICg/KSksIChjb3VudCgqKSBPVkVSICg/KSkK KyAgICAgICAgIFByZXNvcnRlZCBLZXk6IGRlcG5hbWUKKyAgICAgICAgIC0+ICBXaW5kb3dBZ2cK KyAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTog ZGVwbmFtZQorICAgICAgICAgICAgICAgICAgICAgLT4gIFdpbmRvd0FnZworICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFNvcnQgS2V5OiBlbnJvbGxfZGF0ZSBERVNDCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gZW1wc2FsYXJ5CisoMTEgcm93cykKKworLS0gQ2FzZSAjMjog RG9uJ3QgcHVzaCB0aGUgT1JERVIgQlkncyBzb3J0IGRvd24gd2hlbiB0aGVyZSdzIGEgTElNSVQg Y2xhdXNlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgZW1wbm8sCisgICAgICAgZGVwbmFt ZSwKKyAgICAgICBtaW4oc2FsYXJ5KSBPVkVSIChQQVJUSVRJT04gQlkgZW1wbm8pIGRlcG1pbnNh bGFyeSwKKyAgICAgICBzdW0oc2FsYXJ5KSBPVkVSIChQQVJUSVRJT04gQlkgZW1wbm8pIGRlcHNh bGFyeQorRlJPTSBlbXBzYWxhcnkKK09SREVSIEJZIGVtcG5vLCBkZXBuYW1lCitMSU1JVCAxOwor ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTGltaXQKKyAgIC0+ICBJ bmNyZW1lbnRhbCBTb3J0CisgICAgICAgICBTb3J0IEtleTogZW1wbm8sIGRlcG5hbWUKKyAgICAg ICAgIFByZXNvcnRlZCBLZXk6IGVtcG5vCisgICAgICAgICAtPiAgV2luZG93QWdnCisgICAgICAg ICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IGVtcG5vCisg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZW1wc2FsYXJ5CisoOCByb3dzKQor CistLSBDYXNlICMzOiBEb24ndCBwdXNoIHRoZSBPUkRFUiBCWSdzIHNvcnQgZG93biB3aGVuIHRo ZSB0b3AtbGV2ZWwgV2luZG93QWdnCistLSBoYXMgYSBydW5Db25kaXRpb24uCitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NICgKKyAgU0VMRUNUIGRlcG5hbWUsCisgICAgICAgICBl bXBubywKKyAgICAgICAgIHJvd19udW1iZXIoKSBPVkVSIChQQVJUSVRJT04gQlkgZGVwbmFtZSBP UkRFUiBCWSBlbnJvbGxfZGF0ZSkgZW1wcm4sCisgICAgICAgICBzdW0oc2FsYXJ5KSBPVkVSIChQ QVJUSVRJT04gQlkgZGVwbmFtZSBPUkRFUiBCWSBlbXBubykgZGVwc2FsYXJ5CisgIEZST00gZW1w c2FsYXJ5CisgIE9SREVSIEJZIGRlcG5hbWUsIGVucm9sbF9kYXRlLCBlbXBubworKSBlCitXSEVS RSBlbXBybiA8IDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIFN1YnF1ZXJ5IFNjYW4gb24gZQorICAgLT4gIEluY3JlbWVudGFsIFNvcnQKKyAgICAgICAg IFNvcnQgS2V5OiBlbXBzYWxhcnkuZGVwbmFtZSwgZW1wc2FsYXJ5LmVucm9sbF9kYXRlLCBlbXBz YWxhcnkuZW1wbm8KKyAgICAgICAgIFByZXNvcnRlZCBLZXk6IGVtcHNhbGFyeS5kZXBuYW1lLCBl bXBzYWxhcnkuZW5yb2xsX2RhdGUKKyAgICAgICAgIC0+ICBXaW5kb3dBZ2cKKyAgICAgICAgICAg ICAgIFJ1biBDb25kaXRpb246IChyb3dfbnVtYmVyKCkgT1ZFUiAoPykgPCAzKQorICAgICAgICAg ICAgICAgLT4gIEluY3JlbWVudGFsIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5 OiBlbXBzYWxhcnkuZGVwbmFtZSwgZW1wc2FsYXJ5LmVucm9sbF9kYXRlCisgICAgICAgICAgICAg ICAgICAgICBQcmVzb3J0ZWQgS2V5OiBlbXBzYWxhcnkuZGVwbmFtZQorICAgICAgICAgICAgICAg ICAgICAgLT4gIFdpbmRvd0FnZworICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBlbXBzYWxhcnkuZGVw bmFtZSwgZW1wc2FsYXJ5LmVtcG5vCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gZW1wc2FsYXJ5CisoMTMgcm93cykKKworLS0gVHJ5IGEgcG9zaXRpdmUg dmVyc2lvbiBvZiBjYXNlICMzIHdoZXJlIHRoZSBydW5Db25kaXRpb24gZXhpc3RzIGJ1dCBpdCdz CistLSBub3Qgb24gdGhlIGZpbmFsIFdpbmRvd0FnZy4gIEVuc3VyZSB0aGUgc29ydCBpcyBwdXNo ZWQgYmVsb3cgdGhlIFdpbmRvd0FnZworLS0gaW4gdGhpcyBjYXNlLgorRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSAoCisgIFNFTEVDVCBkZXBuYW1lLAorICAgICAgICAgZW1wbm8s CisgICAgICAgICByb3dfbnVtYmVyKCkgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUgT1JERVIg QlkgZW5yb2xsX2RhdGUpIGVtcHJuLAorICAgICAgICAgcm93X251bWJlcigpIE9WRVIgKFBBUlRJ VElPTiBCWSBkZXBuYW1lIE9SREVSIEJZIGVtcG5vKSBlbXBybjIKKyAgRlJPTSBlbXBzYWxhcnkK KyAgT1JERVIgQlkgZGVwbmFtZSwgZW5yb2xsX2RhdGUsIGVtcG5vCispIGUKK1dIRVJFIGVtcHJu MiA8IDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBTdWJxdWVyeSBTY2FuIG9uIGUKKyAgIC0+ICBXaW5kb3dBZ2cKKyAgICAgICAgIEZp bHRlcjogKChyb3dfbnVtYmVyKCkgT1ZFUiAoPykpIDwgMykKKyAgICAgICAgIC0+ICBJbmNyZW1l bnRhbCBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogZW1wc2FsYXJ5LmRlcG5hbWUsIGVt cHNhbGFyeS5lbnJvbGxfZGF0ZSwgZW1wc2FsYXJ5LmVtcG5vCisgICAgICAgICAgICAgICBQcmVz b3J0ZWQgS2V5OiBlbXBzYWxhcnkuZGVwbmFtZQorICAgICAgICAgICAgICAgLT4gIFdpbmRvd0Fn ZworICAgICAgICAgICAgICAgICAgICAgUnVuIENvbmRpdGlvbjogKHJvd19udW1iZXIoKSBPVkVS ICg/KSA8IDMpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgU29ydCBLZXk6IGVtcHNhbGFyeS5kZXBuYW1lLCBlbXBzYWxhcnkuZW1wbm8K KyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBlbXBzYWxhcnkKKygx MSByb3dzKQorCistLSBDYXNlICM0OiBEb24ndCBwdXNoIHRoZSBPUkRFUiBCWSdzIHNvcnQgZG93 biB3aGVuIHRoZSBPUkRFUiBCWSBjb250YWlucworLS0gV2luZG93RnVuYyByZXN1bHRzCitFWFBM QUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgZW1wbm8sCisgICAgICAgcm93X251bWJlcigpIG92ZXIg KFBBUlRJVElPTiBCWSBlbXBubykgZXNhbGFyeQorRlJPTSBlbXBzYWxhcnkKK09SREVSIEJZIGVt cG5vLCBlc2FsYXJ5OworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5jcmVt ZW50YWwgU29ydAorICAgU29ydCBLZXk6IGVtcG5vLCAocm93X251bWJlcigpIE9WRVIgKD8pKQor ICAgUHJlc29ydGVkIEtleTogZW1wbm8KKyAgIC0+ICBXaW5kb3dBZ2cKKyAgICAgICAgIC0+ICBT b3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogZW1wbm8KKyAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBlbXBzYWxhcnkKKyg3IHJvd3MpCisKIFJFU0VUIGVuYWJsZV9oYXNoYWdnOwog LS0gVGVzdCBTb3J0IG5vZGUgcmVvcmRlcmluZwogRVhQTEFJTiAoQ09TVFMgT0ZGKQpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvd2luZG93LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3dpbmRvdy5zcWwKaW5kZXggYjdiZDBhODNkYS4uNmM3ZGU0OGEyYiAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9zcWwvd2luZG93LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC93aW5kb3cuc3FsCkBAIC0xMzI0LDYgKzEzMjQsMTIwIEBAIFNFTEVDVCBESVNUSU5DVAogRlJP TSBlbXBzYWxhcnkKIE9SREVSIEJZIGRlcG5hbWUsIGVtcG5vOwogCitDUkVBVEUgSU5ERVggZW1w c2FsYXJ5X2RlcG5hbWVfaWR4IE9OIGVtcHNhbGFyeShkZXBuYW1lKTsKK1NFVCBlbmFibGVfc2Vx c2NhbiBUTyBvZmY7CisKKy0tIEVuc3VyZSB3ZSBkb24ndCBwdXNoIHRoZSBPUkRFUiBCWSBzb3J0 IGJlbG93IHRoZSBXaW5kb3dBZ2cgd2hlbiB0aGUgaW5wdXQKKy0tIG5vZGUgdG8gdGhlIFdpbmRv d0FnZyBpcyBhbHJlYWR5IHNvcnRlZCBjb3JyZWN0bHkuICBUaGlzIHdvdWxkIGp1c3QgbW92ZQor LS0gdGhlIHNvcnQgZG93biBhbmQgbm90IHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNvcnRzLgorRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGVtcG5vLAorICAgICAgIG1pbihzYWxhcnkpIE9WRVIg KFBBUlRJVElPTiBCWSBkZXBuYW1lKSBkZXBtaW5zYWxhcnkKK0ZST00gZW1wc2FsYXJ5CitPUkRF UiBCWSBkZXBuYW1lLCBlbXBubzsKKworRFJPUCBJTkRFWCBlbXBzYWxhcnlfZGVwbmFtZV9pZHg7 CitSRVNFVCBlbmFibGVfc2Vxc2NhbjsKKworLS0gRW5zdXJlIHdlIHB1c2ggdGhlIE9SREVSIEJZ IHNvcnQgYmVsb3cgdGhlIFdpbmRvd0FnZworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGVt cG5vLAorICAgICAgIG1pbihzYWxhcnkpIE9WRVIgKFBBUlRJVElPTiBCWSBkZXBuYW1lLCBlbXBu bykgZGVwbWluc2FsYXJ5CitGUk9NIGVtcHNhbGFyeQorT1JERVIgQlkgZGVwbmFtZSwgZW1wbm8s IGVucm9sbF9kYXRlOworCistLSBBIG1vcmUgY29tcGxleCBwZXJtdXRhdGlvbiBvZiB0aGUgYWJv dmUuICBFbnN1cmUgdGhlIE9SREVSIEJZIHNvcnQgaXMKKy0tIHB1c2hlZCBkb3duIGJlbG93IHRo ZSBXaW5kb3dBZ2cgd2hlbiB0aGVyZSBpcyBhIFBBUlRJVElPTiBCWSBhbmQgT1JERVIgQlkKKy0t IGNsYXVzZSBpbiB0aGUgV2luZG93RnVuYworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGVt cG5vLAorICAgICAgIGRlcG5hbWUsCisgICAgICAgbWluKHNhbGFyeSkgT1ZFUiAoUEFSVElUSU9O IEJZIGRlcG5hbWUgT1JERVIgQlkgZW1wbm8pIGRlcG1pbnNhbGFyeQorRlJPTSBlbXBzYWxhcnkK K09SREVSIEJZIGRlcG5hbWUsIGVtcG5vLCBlbnJvbGxfZGF0ZTsKKworLS0gVHJ5IG1vcmUgY29t cGxleCBwZXJtdXRhdGlvbnMgb2YgcHVzaGluZyB0aGUgT1JERVIgQlkncyBzb3J0IGJlbG93IHRo ZQorLS0gV2luZG93QWdnLiAgV2l0aCBtdWx0aXBsZSBXaW5kb3dBZ2dzIHNoYXJpbmcgdGhlIHNh bWUgc29ydCwgZW5zdXJlIHdlIHB1c2gKKy0tIHRoZSBzb3J0IHRvIHRoZSBjb3JyZWN0IGxldmVs LgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGVtcG5vLAorICAgICAgIGRlcG5hbWUsCisg ICAgICAgbWluKHNhbGFyeSkgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUgT1JERVIgQlkgZW1w bm8pIGRlcG1pbnNhbGFyeSwKKyAgICAgICBzdW0oc2FsYXJ5KSBPVkVSIChQQVJUSVRJT04gQlkg ZGVwbmFtZSkgZGVwc2FsYXJ5LAorICAgICAgIGNvdW50KCopIE9WRVIgKE9SREVSIEJZIGVucm9s bF9kYXRlIERFU0MpIGMKK0ZST00gZW1wc2FsYXJ5CitPUkRFUiBCWSBkZXBuYW1lLCBlbXBubywg ZW5yb2xsX2RhdGU7CisKKy0tIEFzIGFib3ZlLCBidXQgc3dhcCB0aGUgb3JkZXIgb2YgdGhlIFdp bmRvd0Z1bmNzIHRvIGVuc3VyZSB0aGVpciBvcmRlciBpcworLS0gbm90IGEgZmFjdG9yIGluIHRo ZSBwbGFuIGNob2ljZS4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBlbXBubywKKyAgICAg ICBkZXBuYW1lLAorICAgICAgIGNvdW50KCopIE9WRVIgKE9SREVSIEJZIGVucm9sbF9kYXRlIERF U0MpIGMsCisgICAgICAgc3VtKHNhbGFyeSkgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUpIGRl cHNhbGFyeSwKKyAgICAgICBtaW4oc2FsYXJ5KSBPVkVSIChQQVJUSVRJT04gQlkgZGVwbmFtZSBP UkRFUiBCWSBlbXBubykgZGVwbWluc2FsYXJ5CitGUk9NIGVtcHNhbGFyeQorT1JERVIgQlkgZGVw bmFtZSwgZW1wbm8sIGVucm9sbF9kYXRlOworCistLSBFbnN1cmUgdGhhdCB3ZSBkb24ndCBwdXNo IHRoZSBPUkRFUiBCWSdzIHNvcnQgZG93biBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcy4KKy0tIFNl ZSB0aGUgY29tbWVudCBpbiBjcmVhdGVfb25lX3dpbmRvd19wYXRoKCkgZm9yIGRldGFpbHMgb2Yg ZWFjaCBjYXNlIHRoYXQKKy0tIHdlIGRvbid0IHBlcmZvcm0gdGhlIG9wdGltaXphdGlvbi4KKwor LS0gQ2FzZSAjMTogRG9uJ3QgcHVzaCB0aGUgT1JERVIgQlkncyBzb3J0IGRvd24gd2hlbiB0aGVy ZSdzIGEgRElTVElOQ1QgY2xhdXNlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgRElTVElO Q1QgZW1wbm8sCisgICAgICAgZGVwbmFtZSwKKyAgICAgICBtaW4oc2FsYXJ5KSBPVkVSIChQQVJU SVRJT04gQlkgZGVwbmFtZSkgZGVwbWluc2FsYXJ5LAorICAgICAgIHN1bShzYWxhcnkpIE9WRVIg KFBBUlRJVElPTiBCWSBkZXBuYW1lKSBkZXBzYWxhcnksCisgICAgICAgY291bnQoKikgT1ZFUiAo T1JERVIgQlkgZW5yb2xsX2RhdGUgREVTQykgYworRlJPTSBlbXBzYWxhcnkKK09SREVSIEJZIGRl cG5hbWUsIGVtcG5vOworCistLSBDYXNlICMyOiBEb24ndCBwdXNoIHRoZSBPUkRFUiBCWSdzIHNv cnQgZG93biB3aGVuIHRoZXJlJ3MgYSBMSU1JVCBjbGF1c2UKK0VYUExBSU4gKENPU1RTIE9GRikK K1NFTEVDVCBlbXBubywKKyAgICAgICBkZXBuYW1lLAorICAgICAgIG1pbihzYWxhcnkpIE9WRVIg KFBBUlRJVElPTiBCWSBlbXBubykgZGVwbWluc2FsYXJ5LAorICAgICAgIHN1bShzYWxhcnkpIE9W RVIgKFBBUlRJVElPTiBCWSBlbXBubykgZGVwc2FsYXJ5CitGUk9NIGVtcHNhbGFyeQorT1JERVIg QlkgZW1wbm8sIGRlcG5hbWUKK0xJTUlUIDE7CisKKy0tIENhc2UgIzM6IERvbid0IHB1c2ggdGhl IE9SREVSIEJZJ3Mgc29ydCBkb3duIHdoZW4gdGhlIHRvcC1sZXZlbCBXaW5kb3dBZ2cKKy0tIGhh cyBhIHJ1bkNvbmRpdGlvbi4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gKAor ICBTRUxFQ1QgZGVwbmFtZSwKKyAgICAgICAgIGVtcG5vLAorICAgICAgICAgcm93X251bWJlcigp IE9WRVIgKFBBUlRJVElPTiBCWSBkZXBuYW1lIE9SREVSIEJZIGVucm9sbF9kYXRlKSBlbXBybiwK KyAgICAgICAgIHN1bShzYWxhcnkpIE9WRVIgKFBBUlRJVElPTiBCWSBkZXBuYW1lIE9SREVSIEJZ IGVtcG5vKSBkZXBzYWxhcnkKKyAgRlJPTSBlbXBzYWxhcnkKKyAgT1JERVIgQlkgZGVwbmFtZSwg ZW5yb2xsX2RhdGUsIGVtcG5vCispIGUKK1dIRVJFIGVtcHJuIDwgMzsKKworLS0gVHJ5IGEgcG9z aXRpdmUgdmVyc2lvbiBvZiBjYXNlICMzIHdoZXJlIHRoZSBydW5Db25kaXRpb24gZXhpc3RzIGJ1 dCBpdCdzCistLSBub3Qgb24gdGhlIGZpbmFsIFdpbmRvd0FnZy4gIEVuc3VyZSB0aGUgc29ydCBp cyBwdXNoZWQgYmVsb3cgdGhlIFdpbmRvd0FnZworLS0gaW4gdGhpcyBjYXNlLgorRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSAoCisgIFNFTEVDVCBkZXBuYW1lLAorICAgICAgICAg ZW1wbm8sCisgICAgICAgICByb3dfbnVtYmVyKCkgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUg T1JERVIgQlkgZW5yb2xsX2RhdGUpIGVtcHJuLAorICAgICAgICAgcm93X251bWJlcigpIE9WRVIg KFBBUlRJVElPTiBCWSBkZXBuYW1lIE9SREVSIEJZIGVtcG5vKSBlbXBybjIKKyAgRlJPTSBlbXBz YWxhcnkKKyAgT1JERVIgQlkgZGVwbmFtZSwgZW5yb2xsX2RhdGUsIGVtcG5vCispIGUKK1dIRVJF IGVtcHJuMiA8IDM7CisKKy0tIENhc2UgIzQ6IERvbid0IHB1c2ggdGhlIE9SREVSIEJZJ3Mgc29y dCBkb3duIHdoZW4gdGhlIE9SREVSIEJZIGNvbnRhaW5zCistLSBXaW5kb3dGdW5jIHJlc3VsdHMK K0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBlbXBubywKKyAgICAgICByb3dfbnVtYmVyKCkg b3ZlciAoUEFSVElUSU9OIEJZIGVtcG5vKSBlc2FsYXJ5CitGUk9NIGVtcHNhbGFyeQorT1JERVIg QlkgZW1wbm8sIGVzYWxhcnk7CisKIFJFU0VUIGVuYWJsZV9oYXNoYWdnOwogCiAtLSBUZXN0IFNv cnQgbm9kZSByZW9yZGVyaW5nCg== --00000000000020b55e05f286a417--