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 1pknmJ-0005si-PW for pgsql-hackers@arkaria.postgresql.org; Fri, 07 Apr 2023 15:13: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 1pknmH-0007ya-9z for pgsql-hackers@arkaria.postgresql.org; Fri, 07 Apr 2023 15:13:25 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pknmG-0007vU-Hu for pgsql-hackers@lists.postgresql.org; Fri, 07 Apr 2023 15:13:24 +0000 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pknmA-00064i-5b for pgsql-hackers@postgresql.org; Fri, 07 Apr 2023 15:13:23 +0000 Received: by mail-wr1-x431.google.com with SMTP id r11so42536445wrr.12 for ; Fri, 07 Apr 2023 08:13:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1680880396; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=CfpxThLgfdS2hD+ST5a2x9yuIKlmPNAexbwMhI9KzEI=; b=Gv1rDju0roFNTwzZ6XOytu7W1/csxKz7WNu+AQJmX5U1yIRroSV7/yWo5sG6FMPq9m 0BtCCOpo+u4UrPlAjPHtuvzU0+1Gx89wiAifN5mwnMpT++MRbmEjkePsAt7a9RJBl1d1 x2PCD6p5suwKNShD/S3ABzVrTfrojvNPEh5S949W/h2oevzGIK5HDXRPiGI6gndFZd4J h29gvBjXdpIdJSGvGtaWUk3WPxQkY0tDzI5hC2W0yOxrTaSMPnuTFceFMkQqmvLOS5mk yS3jYnMBASMnXCuwhQqdbjECK8iUV8bEXZBHfdAjmHmW9Xd7gT+P1Tcb5OtjWg5NArsg qV3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680880396; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=CfpxThLgfdS2hD+ST5a2x9yuIKlmPNAexbwMhI9KzEI=; b=np3kMqPLlF9TVnEYUrF4ro4mHtDehUdnk4TlxV9XOsdRaR0aAnxUQ67KGRBrxMnapi VWOUqZ6nLG8pjRT4nNBxWCc9BQRblGH09JV3g5Jr/7lnyUTsU6qak1lLyq9y0vHUtYxg C0ho69LU7A5Q+7ZS8+gTFanQVg+3yc2BWHs8oDvyHnaUmg9WjHbS4Jh20W2nkVU8Hd1i k99eWfUmUTQ4+M4prOE1QjoYfgewbV/mMjR9taTJ3qCde5rA5stEreQVByHhkRMNRIDt +1P+8wkSOn/xo9ytCfTaw7wVlmP0GSI6JvRJ/aCJwf7yHn++vM+chrhXTMk5XpHuH3kp z25A== X-Gm-Message-State: AAQBX9ePuRSl0p6ZG2rZ6iudGzZQcAZzgZwkbnmEz62R0J+vHPRuTSPL Lakz0gxgxYrA3JryA6O1QM8= X-Google-Smtp-Source: AKy350bYj8i85C3gSLDcRNRMeR6yGeDOl/aLkeFuxPpOytht5Xk3CuL0zfQFJNRBwiI+U7VHBLq3cw== X-Received: by 2002:a05:6000:1a45:b0:2d1:9b6b:92a with SMTP id t5-20020a0560001a4500b002d19b6b092amr1569427wry.23.1680880396154; Fri, 07 Apr 2023 08:13:16 -0700 (PDT) Received: from [192.168.26.244] ([54.239.6.185]) by smtp.gmail.com with ESMTPSA id f1-20020a5d58e1000000b002c71a32394dsm4690417wrd.64.2023.04.07.08.13.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 07 Apr 2023 08:13:15 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------5s9kHaky1oIhUgmyEzJJIa9p" Message-ID: <1e923731-ed09-3621-c8b9-61f938b4c355@gmail.com> Date: Fri, 7 Apr 2023 17:13:13 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 Subject: Re: Minimal logical decoding on standbys Content-Language: en-US To: Andres Freund Cc: Amit Kapila , Alvaro Herrera , Jeff Davis , Robert Haas , Thomas Munro , Ibrar Ahmed , Amit Khandekar , fabriziomello@gmail.com, tushar , Rahila Syed , pgsql-hackers References: <8c6e7670-3914-35d1-7977-34f60e598477@gmail.com> <1903ca9b-1dc9-20a6-404a-d4c460c7bdcc@gmail.com> <2b002763-f39f-0814-e98e-c48989ddc3c3@gmail.com> <3c9d4998-a338-081f-a5f6-d038ead75384@gmail.com> <20230407055618.33gjg5vd5hq3kje4@awork3.anarazel.de> <71c3d91a-6b3b-5c0a-ffb9-630f17fe693e@gmail.com> <20230407075009.igg7be27ha2htkbt@awork3.anarazel.de> From: "Drouvot, Bertrand" In-Reply-To: <20230407075009.igg7be27ha2htkbt@awork3.anarazel.de> 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. --------------5s9kHaky1oIhUgmyEzJJIa9p Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, On 4/7/23 9:50 AM, Andres Freund wrote: > Hi, > Here's my current working state - I'll go to bed soon. Thanks a lot for this Andres! > > Changes: > > - shared catalog relations weren't handled correctly, because the dboid is > InvalidOid for them. I wrote a test for that as well. > > - ReplicationSlotsComputeRequiredXmin() took invalidated logical slots into > account (ReplicationSlotsComputeLogicalRestartLSN() too, but it never looks > at logical slots) > > - I don't think the subset of slot xids that were checked when invalidating > was right. We need to check effective_xmin and effective_catalog_xmin - the > latter was using catalog_xmin. > > - similarly, it wasn't right that specifically those two fields were > overwritten when invalidated - as that was done, I suspect the changes might > get lost on a restart... > > - As mentioned previously, I did not like all the functions in slot.h, nor > their naming. Not yet quite finished with that, but a good bit further > > - There were a lot of unrelated changes, e.g. removing comments like > * NB - this runs as part of checkpoint, so avoid raising errors if possible. > > - I still don't like the order of the patches, fixing the walsender patches > after introducing support for logical decoding on standby. Reordered. > > - I don't think logical slots being invalidated as checked e.g. in > pg_logical_replication_slot_advance() > > - I didn't like much that InvalidatePossiblyObsoleteSlot() switched between > kill() and SendProcSignal() based on the "conflict". There very well could > be reasons to use InvalidatePossiblyObsoleteSlot() with an xid from outside > of the startup process in the future. Instead I made it differentiate based > on MyBackendType == B_STARTUP. > Thanks for all of this and the above explanations. > > I also: > > Added new patch that replaces invalidated_at with a new enum, 'invalidated', > listing the reason for the invalidation. Yeah, that's a great idea. > I added a check for !invalidated to > ReplicationSlotsComputeRequiredLSN() etc. > looked at 65-0001 and it looks good to me. > Added new patch moving checks for invalid logical slots into > CreateDecodingContext(). Otherwise we end up with 5 or so checks, which makes > no sense. As far as I can tell the old message in > pg_logical_slot_get_changes_guts() was bogus, one couldn't get there having > "never previously reserved WAL" > looked at 65-0002 and it looks good to me. > Split "Handle logical slot conflicts on standby." into two. I'm not sure that > should stay that way, but it made it easier to hack on > InvalidateObsoleteReplicationSlots. > looked at 65-0003 and the others. It's easier to understand/read the code now that the ReplicationSlotInvalidationCause enum has been created and that data.invalidated also make use of the enum. It does "simplify" the review and that looks good to me. > > Todo: > - write a test that invalidated logical slots stay invalidated across a restart Done in 65-66-0008 attached. > - write a test that invalidated logical slots do not lead to retaining WAL I'm not sure how to do that since pg_switch_wal() and friends can't be executed on a standby. > - Further evolve the API of InvalidateObsoleteReplicationSlots() > - pass in the ReplicationSlotInvalidationCause we're trying to conflict on? > - rename xid to snapshotConflictHorizon, that'd be more in line with the > ResolveRecoveryConflictWithSnapshot and easier to understand, I think > Done. The new API can be found in v65-66-InvalidateObsoleteReplicationSlots_API.patch attached. It propagates the cause to InvalidatePossiblyObsoleteSlot() where a switch/case can now be used. The "default" case does not emit an error since this code runs as part of checkpoint. > - The test could stand a bit of cleanup and consolidation > - No need to start 4 psql processes to do 4 updates, just do it in one > safe_psql() Right, done in v65-66-0008-New-TAP-test-for-logical-decoding-on-standby.patch attached. > - the sequence of drop_logical_slots(), create_logical_slots(), > change_hot_standby_feedback_and_wait_for_xmins(), make_slot_active() is > repeated quite a few times grouped in reactive_slots_change_hfs_and_wait_for_xmins() in 65-66-0008 attached. > - the stats queries checking for specific conflict counts, including > preceding tests, is pretty painful. I suggest to reset the stats at the > end of the test instead (likely also do the drop_logical_slot() there). Good idea, done in 65-66-0008 attached. > - it's hard to correlate postgres log and the tap test, because the slots > are named the same across all tests. Perhaps they could have a per-test > prefix? Good point. Done in 65-66-0008 attached. Thanks to that and the stats reset the check for invalidation is now done in a single function "check_for_invalidation" that looks for invalidation messages in the logfile and in pg_stat_database_conflicts. Thanks for the suggestions: the TAP test is now easier to read/understand. > - numbering tests is a PITA, I had to renumber the later ones, when adding a > test for shared catalog tables Yeah, sorry about that, it has been fixed in V63. Regards, -- Bertrand Drouvot PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --------------5s9kHaky1oIhUgmyEzJJIa9p Content-Type: text/plain; charset=UTF-8; name="v65-66-InvalidateObsoleteReplicationSlots_API.patch" Content-Disposition: attachment; filename="v65-66-InvalidateObsoleteReplicationSlots_API.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCBhNDE1MzUxOGZkLi44ZGQ4ZDQw YzA3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC02ODE4LDcgKzY4MTgs NyBAQCBDcmVhdGVDaGVja1BvaW50KGludCBmbGFncykKIAlYTEJ5dGVUb1NlZyhSZWRvUmVj UHRyLCBfbG9nU2VnTm8sIHdhbF9zZWdtZW50X3NpemUpOwogCUtlZXBMb2dTZWcocmVjcHRy LCAmX2xvZ1NlZ05vKTsKIAlpZiAoSW52YWxpZGF0ZU9ic29sZXRlUmVwbGljYXRpb25TbG90 cyhfbG9nU2VnTm8sIEludmFsaWRPaWQsCi0JCQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0 aW9uSWQpKQorCQkJCQkJCQkJCSAgIEludmFsaWRUcmFuc2FjdGlvbklkLCBSU19JTlZBTF9X QUwpKQogCXsKIAkJLyoKIAkJICogU29tZSBzbG90cyBoYXZlIGJlZW4gaW52YWxpZGF0ZWQ7 IHJlY2FsY3VsYXRlIHRoZSBvbGQtc2VnbWVudApAQCAtNzI2Myw3ICs3MjYzLDcgQEAgQ3Jl YXRlUmVzdGFydFBvaW50KGludCBmbGFncykKIAllbmRwdHIgPSAocmVjZWl2ZVB0ciA8IHJl cGxheVB0cikgPyByZXBsYXlQdHIgOiByZWNlaXZlUHRyOwogCUtlZXBMb2dTZWcoZW5kcHRy LCAmX2xvZ1NlZ05vKTsKIAlpZiAoSW52YWxpZGF0ZU9ic29sZXRlUmVwbGljYXRpb25TbG90 cyhfbG9nU2VnTm8sIEludmFsaWRPaWQsCi0JCQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0 aW9uSWQpKQorCQkJCQkJCQkJCSAgIEludmFsaWRUcmFuc2FjdGlvbklkLCBSU19JTlZBTF9X QUwpKQogCXsKIAkJLyoKIAkJICogU29tZSBzbG90cyBoYXZlIGJlZW4gaW52YWxpZGF0ZWQ7 IHJlY2FsY3VsYXRlIHRoZSBvbGQtc2VnbWVudApAQCAtNzk4OCw3ICs3OTg4LDggQEAgeGxv Z19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQkJeGxyZWMud2FsX2xldmVsIDwg V0FMX0xFVkVMX0xPR0lDQUwgJiYKIAkJCXdhbF9sZXZlbCA+PSBXQUxfTEVWRUxfTE9HSUNB TCkKIAkJCUludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMoMCwgSW52YWxpZE9p ZCwKLQkJCQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCQkJCQkJCQkJCQkg ICBJbnZhbGlkVHJhbnNhY3Rpb25JZCwKKwkJCQkJCQkJCQkJICAgUlNfSU5WQUxfV0FMX0xF VkVMKTsKIAogCQlMV0xvY2tBY3F1aXJlKENvbnRyb2xGaWxlTG9jaywgTFdfRVhDTFVTSVZF KTsKIAkJQ29udHJvbEZpbGUtPk1heENvbm5lY3Rpb25zID0geGxyZWMuTWF4Q29ubmVjdGlv bnM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMKaW5kZXggNDExZjZjMDE0OS4uM2M1Mjc3NDJk ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5jCisrKyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYwpAQCAtMTMyMiwxMiArMTMyMiwxMyBAQCBM b2dpY2FsUmVwbGljYXRpb25TbG90WGlkc0NvbmZsaWN0KFJlcGxpY2F0aW9uU2xvdCAqcywg T2lkIGRib2lkLCBUcmFuc2FjdGlvbklkCiAgKi8KIHN0YXRpYyBib29sCiBJbnZhbGlkYXRl UG9zc2libHlPYnNvbGV0ZVNsb3QoUmVwbGljYXRpb25TbG90ICpzLCBYTG9nUmVjUHRyIG9s ZGVzdExTTiwKLQkJCQkJCQkgICBPaWQgZGJvaWQsIFRyYW5zYWN0aW9uSWQgeGlkLCBib29s ICppbnZhbGlkYXRlZCkKKwkJCQkJCQkgICBPaWQgZGJvaWQsIFRyYW5zYWN0aW9uSWQgeGlk LCBib29sICppbnZhbGlkYXRlZCwKKwkJCQkJCQkgICBSZXBsaWNhdGlvblNsb3RJbnZhbGlk YXRpb25DYXVzZSBjYXVzZSkKIHsKIAlpbnQJCQlsYXN0X3NpZ25hbGVkX3BpZCA9IDA7CiAJ Ym9vbAkJcmVsZWFzZWRfbG9jayA9IGZhbHNlOwogCWJvb2wJCWludmFsaWRhdGVfYWxsX2xv Z2ljYWwgPSAhVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSAmJgotCQlvbGRlc3RMU04gPT0g SW52YWxpZFhMb2dSZWNQdHI7CisJb2xkZXN0TFNOID09IEludmFsaWRYTG9nUmVjUHRyOwog CiAKIAlmb3IgKDs7KQpAQCAtMTM2MywxNCArMTM2NCwzMCBAQCBJbnZhbGlkYXRlUG9zc2li bHlPYnNvbGV0ZVNsb3QoUmVwbGljYXRpb25TbG90ICpzLCBYTG9nUmVjUHRyIG9sZGVzdExT TiwKIAkJICovCiAJCWlmIChzLT5kYXRhLmludmFsaWRhdGVkID09IFJTX0lOVkFMX05PTkUp CiAJCXsKLQkJCWlmIChvbGRlc3RMU04gIT0gSW52YWxpZFhMb2dSZWNQdHIgJiYgcy0+ZGF0 YS5yZXN0YXJ0X2xzbiAhPSBJbnZhbGlkWExvZ1JlY1B0ciAmJgotCQkJCXMtPmRhdGEucmVz dGFydF9sc24gPCBvbGRlc3RMU04pCi0JCQkJY29uZmxpY3QgPSBSU19JTlZBTF9XQUw7Ci0J CQlpZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSAmJiBTbG90SXNMb2dpY2FsKHMpICYm Ci0JCQkJTG9naWNhbFJlcGxpY2F0aW9uU2xvdFhpZHNDb25mbGljdChzLCBkYm9pZCwgeGlk KSkKLQkJCQljb25mbGljdCA9IFJTX0lOVkFMX1hJRDsKLQkJCWVsc2UgaWYgKGludmFsaWRh dGVfYWxsX2xvZ2ljYWwgJiYgU2xvdElzTG9naWNhbChzKSkKLQkJCQljb25mbGljdCA9IFJT X0lOVkFMX1dBTF9MRVZFTDsKKwkJCXN3aXRjaCAoY2F1c2UpCisJCQl7CisJCQkJY2FzZSBS U19JTlZBTF9XQUw6CisJCQkJCWlmIChvbGRlc3RMU04gIT0gSW52YWxpZFhMb2dSZWNQdHIg JiYgcy0+ZGF0YS5yZXN0YXJ0X2xzbiAhPSBJbnZhbGlkWExvZ1JlY1B0ciAmJgorCQkJCQkJ cy0+ZGF0YS5yZXN0YXJ0X2xzbiA8IG9sZGVzdExTTikKKwkJCQkJCWNvbmZsaWN0ID0gY2F1 c2U7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgUlNfSU5WQUxfWElEOgorCQkJCQlpZiAoVHJh bnNhY3Rpb25JZElzVmFsaWQoeGlkKSAmJiBTbG90SXNMb2dpY2FsKHMpICYmCisJCQkJCQlM b2dpY2FsUmVwbGljYXRpb25TbG90WGlkc0NvbmZsaWN0KHMsIGRib2lkLCB4aWQpKQorCQkJ CQkJY29uZmxpY3QgPSBjYXVzZTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBSU19JTlZBTF9X QUxfTEVWRUw6CisJCQkJCWlmIChpbnZhbGlkYXRlX2FsbF9sb2dpY2FsICYmIFNsb3RJc0xv Z2ljYWwocykpCisJCQkJCQljb25mbGljdCA9IGNhdXNlOworCQkJCQlicmVhazsKKwkJCQlk ZWZhdWx0OgorCQkJCQlicmVhazsKKworCQkJCQkvKgorCQkJCQkgKiB0aGlzIHJ1bnMgYXMg cGFydCBvZiBjaGVja3BvaW50LCBzbyBhdm9pZCByYWlzaW5nCisJCQkJCSAqIGVycm9ycyBp ZiBwb3NzaWJsZQorCQkJCQkgKi8KKwkJCX0KIAkJfQogCiAJCS8qIGlmIHRoZXJlJ3Mgbm8g Y29uZmxpY3QsIHdlJ3JlIGRvbmUgKi8KQEAgLTE1MTEsMTYgKzE1MjgsMTIgQEAgSW52YWxp ZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KFJlcGxpY2F0aW9uU2xvdCAqcywgWExvZ1JlY1B0 ciBvbGRlc3RMU04sCiAgKgkgYmUgaW52YWxpZGF0ZWQuIE5vdGUgdGhhdCBXYWl0RXhjZWVk c01heFN0YW5kYnlEZWxheSgpIGlzIG5vdCB0YWtlbiBpbnRvCiAgKgkgYWNjb3VudCBoZXJl IChhcyBvcHBvc2VkIHRvIFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aFZpcnR1YWxYSURz KCkpOiBYWFhYCiAgKgotICoKLSAqIFhYWDogU2hvdWxkIHdlIGhhdmUgdGhlIGNhbGxlciBw YXNzIGluIGEgc3BlY2lmaWMKLSAqIFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNl IHRoYXQgd2Ugc2hvdWxkIHNlYXJjaCBmb3I/IFRoYXQnZCBsaWtlbHkKLSAqIG1ha2Ugc29t ZSB0aGluZ3MgYSBiaXQgbmVhdGVyLgotICoKICAqIE5CIC0gdGhpcyBydW5zIGFzIHBhcnQg b2YgY2hlY2twb2ludCwgc28gYXZvaWQgcmFpc2luZyBlcnJvcnMgaWYgcG9zc2libGUuCiAg Ki8KIGJvb2wKIEludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMoWExvZ1NlZ05v IG9sZGVzdFNlZ25vLCBPaWQgZGJvaWQsCi0JCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgeGlk KQorCQkJCQkJCQkgICBUcmFuc2FjdGlvbklkIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uLAor CQkJCQkJCQkgICBSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZSBjYXVzZSkKIHsK IAlYTG9nUmVjUHRyCW9sZGVzdExTTjsKIAlib29sCQlpbnZhbGlkYXRlZCA9IGZhbHNlOwpA QCAtMTUzOSw3ICsxNTUyLDkgQEAgcmVzdGFydDoKIAkJaWYgKCFzLT5pbl91c2UpCiAJCQlj b250aW51ZTsKIAotCQlpZiAoSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KHMsIG9s ZGVzdExTTiwgZGJvaWQsIHhpZCwgJmludmFsaWRhdGVkKSkKKwkJaWYgKEludmFsaWRhdGVQ b3NzaWJseU9ic29sZXRlU2xvdChzLCBvbGRlc3RMU04sIGRib2lkLAorCQkJCQkJCQkJCSAg IHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uLCAmaW52YWxpZGF0ZWQsCisJCQkJCQkJCQkJICAg Y2F1c2UpKQogCQl7CiAJCQkvKiBpZiB0aGUgbG9jayB3YXMgcmVsZWFzZWQsIHN0YXJ0IGZy b20gc2NyYXRjaCAqLwogCQkJZ290byByZXN0YXJ0OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvc3RhbmRieS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc3Rh bmRieS5jCmluZGV4IGNlNTg0MmIwZGIuLjc3MTY2MTI3ZjIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9zdGFuZGJ5LmMKQEAgLTQ5Niw3ICs0OTYsNyBAQCBSZXNvbHZlUmVjb3ZlcnlDb25m bGljdFdpdGhTbmFwc2hvdChUcmFuc2FjdGlvbklkIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9u LAogCiAJaWYgKHdhbF9sZXZlbCA+PSBXQUxfTEVWRUxfTE9HSUNBTCAmJiBpc0NhdGFsb2dS ZWwpCiAJCUludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMoMCwgbG9jYXRvci5k Yk9pZCwKLQkJCQkJCQkJCQkgICBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbik7CisJCQkJCQkJ CQkJICAgc25hcHNob3RDb25mbGljdEhvcml6b24sIFJTX0lOVkFMX1hJRCk7CiB9CiAKIC8q CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90LmggYi9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9zbG90LmgKaW5kZXggMzVjYWZlOTRiYy4uMTQzMGM3ZTkwOCAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCisrKyBiL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaApAQCAtMjMxLDcgKzIzMSw4IEBAIGV4dGVybiBY TG9nUmVjUHRyIFJlcGxpY2F0aW9uU2xvdHNDb21wdXRlTG9naWNhbFJlc3RhcnRMU04odm9p ZCk7CiBleHRlcm4gYm9vbCBSZXBsaWNhdGlvblNsb3RzQ291bnREQlNsb3RzKE9pZCBkYm9p ZCwgaW50ICpuc2xvdHMsIGludCAqbmFjdGl2ZSk7CiBleHRlcm4gdm9pZCBSZXBsaWNhdGlv blNsb3RzRHJvcERCU2xvdHMoT2lkIGRib2lkKTsKIGV4dGVybiBib29sIEludmFsaWRhdGVP YnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMoWExvZ1NlZ05vIG9sZGVzdFNlZ25vLCBPaWQgZGJv aWQsCi0JCQkJCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgeGlkKTsKKwkJCQkJCQkJCQkJICAg VHJhbnNhY3Rpb25JZCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbiwKKwkJCQkJCQkJCQkJICAg UmVwbGljYXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2UgY2F1c2UpOwogZXh0ZXJuIFJlcGxp Y2F0aW9uU2xvdCAqU2VhcmNoTmFtZWRSZXBsaWNhdGlvblNsb3QoY29uc3QgY2hhciAqbmFt ZSwgYm9vbCBuZWVkX2xvY2spOwogZXh0ZXJuIGludAlSZXBsaWNhdGlvblNsb3RJbmRleChS ZXBsaWNhdGlvblNsb3QgKnNsb3QpOwogZXh0ZXJuIGJvb2wgUmVwbGljYXRpb25TbG90TmFt ZShpbnQgaW5kZXgsIE5hbWUgbmFtZSk7Cg== --------------5s9kHaky1oIhUgmyEzJJIa9p Content-Type: text/plain; charset=UTF-8; name="v65-66-0008-New-TAP-test-for-logical-decoding-on-standby.patch" Content-Disposition: attachment; filename*0="v65-66-0008-New-TAP-test-for-logical-decoding-on-standby.pat"; filename*1="ch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDM1X3N0YW5kYnlfbG9naWNhbF9k ZWNvZGluZy5wbCBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDM1X3N0YW5kYnlfbG9naWNhbF9k ZWNvZGluZy5wbAppbmRleCBlMmM0NmE2YmY2Li41NjFkY2QzM2MzIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWNvdmVyeS90LzAzNV9zdGFuZGJ5X2xvZ2ljYWxfZGVjb2RpbmcucGwKKysr IGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMzVfc3RhbmRieV9sb2dpY2FsX2RlY29kaW5nLnBs CkBAIC01MSwxNiArNTEsMjMgQEAgc3ViIHdhaXRfZm9yX3htaW5zCiAjIENyZWF0ZSB0aGUg cmVxdWlyZWQgbG9naWNhbCBzbG90cyBvbiBzdGFuZGJ5Lgogc3ViIGNyZWF0ZV9sb2dpY2Fs X3Nsb3RzCiB7Ci0JbXkgKCRub2RlKSA9IEBfOwotCSRub2RlLT5jcmVhdGVfbG9naWNhbF9z bG90X29uX3N0YW5kYnkoJG5vZGVfcHJpbWFyeSwgJ2luYWN0aXZlc2xvdCcsICd0ZXN0ZGIn KTsKLQkkbm9kZS0+Y3JlYXRlX2xvZ2ljYWxfc2xvdF9vbl9zdGFuZGJ5KCRub2RlX3ByaW1h cnksICdhY3RpdmVzbG90JywgJ3Rlc3RkYicpOworCW15ICgkbm9kZSwgJHNsb3RfcHJlZml4 KSA9IEBfOworCisJbXkgJGFjdGl2ZV9zbG90ID0gJHNsb3RfcHJlZml4IC4gJ2FjdGl2ZXNs b3QnOworCW15ICRpbmFjdGl2ZV9zbG90ID0gJHNsb3RfcHJlZml4IC4gJ2luYWN0aXZlc2xv dCc7CisJJG5vZGUtPmNyZWF0ZV9sb2dpY2FsX3Nsb3Rfb25fc3RhbmRieSgkbm9kZV9wcmlt YXJ5LCBxcSgkaW5hY3RpdmVfc2xvdCksICd0ZXN0ZGInKTsKKwkkbm9kZS0+Y3JlYXRlX2xv Z2ljYWxfc2xvdF9vbl9zdGFuZGJ5KCRub2RlX3ByaW1hcnksIHFxKCRhY3RpdmVfc2xvdCks ICd0ZXN0ZGInKTsKIH0KIAogIyBEcm9wIHRoZSBsb2dpY2FsIHNsb3RzIG9uIHN0YW5kYnku CiBzdWIgZHJvcF9sb2dpY2FsX3Nsb3RzCiB7Ci0JJG5vZGVfc3RhbmRieS0+cHNxbCgncG9z dGdyZXMnLCBxW1NFTEVDVCBwZ19kcm9wX3JlcGxpY2F0aW9uX3Nsb3QoJ2luYWN0aXZlc2xv dCcpXSk7Ci0JJG5vZGVfc3RhbmRieS0+cHNxbCgncG9zdGdyZXMnLCBxW1NFTEVDVCBwZ19k cm9wX3JlcGxpY2F0aW9uX3Nsb3QoJ2FjdGl2ZXNsb3QnKV0pOworCW15ICgkc2xvdF9wcmVm aXgpID0gQF87CisJbXkgJGFjdGl2ZV9zbG90ID0gJHNsb3RfcHJlZml4IC4gJ2FjdGl2ZXNs b3QnOworCW15ICRpbmFjdGl2ZV9zbG90ID0gJHNsb3RfcHJlZml4IC4gJ2luYWN0aXZlc2xv dCc7CisKKwkkbm9kZV9zdGFuZGJ5LT5wc3FsKCdwb3N0Z3JlcycsIHFxW1NFTEVDVCBwZ19k cm9wX3JlcGxpY2F0aW9uX3Nsb3QoJyRpbmFjdGl2ZV9zbG90JyldKTsKKwkkbm9kZV9zdGFu ZGJ5LT5wc3FsKCdwb3N0Z3JlcycsIHFxW1NFTEVDVCBwZ19kcm9wX3JlcGxpY2F0aW9uX3Ns b3QoJyRhY3RpdmVfc2xvdCcpXSk7CiB9CiAKICMgQWNxdWlyZSBvbmUgb2YgdGhlIHN0YW5k YnkgbG9naWNhbCBzbG90cyBjcmVhdGVkIGJ5IGNyZWF0ZV9sb2dpY2FsX3Nsb3RzKCkuCkBA IC02OCwxNiArNzUsMTcgQEAgc3ViIGRyb3BfbG9naWNhbF9zbG90cwogIyBJZiB3YWl0IGlz IG5vdCB0cnVlIGl0IG1lYW5zIHdlIGFyZSB0ZXN0aW5nIGEga25vd24gZmFpbHVyZSBzY2Vu YXJpby4KIHN1YiBtYWtlX3Nsb3RfYWN0aXZlCiB7Ci0JbXkgKCRub2RlLCAkd2FpdCwgJHRv X3N0ZG91dCwgJHRvX3N0ZGVycikgPSBAXzsKKwlteSAoJG5vZGUsICRzbG90X3ByZWZpeCwg JHdhaXQsICR0b19zdGRvdXQsICR0b19zdGRlcnIpID0gQF87CiAJbXkgJHNsb3RfdXNlcl9o YW5kbGU7CiAKLQkkc2xvdF91c2VyX2hhbmRsZSA9IElQQzo6UnVuOjpzdGFydChbJ3BnX3Jl Y3Zsb2dpY2FsJywgJy1kJywgJG5vZGUtPmNvbm5zdHIoJ3Rlc3RkYicpLCAnLVMnLCAnYWN0 aXZlc2xvdCcsICctbycsICdpbmNsdWRlLXhpZHM9MCcsICctbycsICdza2lwLWVtcHR5LXhh Y3RzPTEnLCAnLS1uby1sb29wJywgJy0tc3RhcnQnLCAnLWYnLCAnLSddLCAnPicsICR0b19z dGRvdXQsICcyPicsICR0b19zdGRlcnIpOworCW15ICRhY3RpdmVfc2xvdCA9ICRzbG90X3By ZWZpeCAuICdhY3RpdmVzbG90JzsKKwkkc2xvdF91c2VyX2hhbmRsZSA9IElQQzo6UnVuOjpz dGFydChbJ3BnX3JlY3Zsb2dpY2FsJywgJy1kJywgJG5vZGUtPmNvbm5zdHIoJ3Rlc3RkYicp LCAnLVMnLCBxcSgkYWN0aXZlX3Nsb3QpLCAnLW8nLCAnaW5jbHVkZS14aWRzPTAnLCAnLW8n LCAnc2tpcC1lbXB0eS14YWN0cz0xJywgJy0tbm8tbG9vcCcsICctLXN0YXJ0JywgJy1mJywg Jy0nXSwgJz4nLCAkdG9fc3Rkb3V0LCAnMj4nLCAkdG9fc3RkZXJyKTsKIAogCWlmICgkd2Fp dCkKIAl7CiAJCSMgbWFrZSBzdXJlIGFjdGl2ZXNsb3QgaXMgaW4gdXNlCiAJCSRub2RlLT5w b2xsX3F1ZXJ5X3VudGlsKCd0ZXN0ZGInLAotCQkJIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAx IEZST00gcGdfcmVwbGljYXRpb25fc2xvdHMgV0hFUkUgc2xvdF9uYW1lID0gJ2FjdGl2ZXNs b3QnIEFORCBhY3RpdmVfcGlkIElTIE5PVCBOVUxMKSIKKwkJCXFxW1NFTEVDVCBFWElTVFMg KFNFTEVDVCAxIEZST00gcGdfcmVwbGljYXRpb25fc2xvdHMgV0hFUkUgc2xvdF9uYW1lID0g JyRhY3RpdmVfc2xvdCcgQU5EIGFjdGl2ZV9waWQgSVMgTk9UIE5VTEwpXQogCQkpIG9yIGRp ZSAic2xvdCBuZXZlciBiZWNhbWUgYWN0aXZlIjsKIAl9CiAJcmV0dXJuICRzbG90X3VzZXJf aGFuZGxlOwpAQCAtMTA0LDEwICsxMTIsMTAgQEAgc3ViIGNoZWNrX3BnX3JlY3Zsb2dpY2Fs X3N0ZGVycgogIyB0aGF0IHdhcyBhY3F1aXJlZCBieSBtYWtlX3Nsb3RfYWN0aXZlKCksIGFu ZCB0aGUgbm9uLWFjdGl2ZSAnaW5hY3RpdmVzbG90Jy4KIHN1YiBjaGVja19zbG90c19kcm9w cGVkCiB7Ci0JbXkgKCRzbG90X3VzZXJfaGFuZGxlKSA9IEBfOworCW15ICgkc2xvdF9wcmVm aXgsICRzbG90X3VzZXJfaGFuZGxlKSA9IEBfOwogCi0JaXMoJG5vZGVfc3RhbmRieS0+c2xv dCgnaW5hY3RpdmVzbG90JyktPnsnc2xvdF90eXBlJ30sICcnLCAnaW5hY3RpdmVzbG90IG9u IHN0YW5kYnkgZHJvcHBlZCcpOwotCWlzKCRub2RlX3N0YW5kYnktPnNsb3QoJ2FjdGl2ZXNs b3QnKS0+eydzbG90X3R5cGUnfSwgJycsICdhY3RpdmVzbG90IG9uIHN0YW5kYnkgZHJvcHBl ZCcpOworCWlzKCRub2RlX3N0YW5kYnktPnNsb3QoJHNsb3RfcHJlZml4IC4gJ2luYWN0aXZl c2xvdCcpLT57J3Nsb3RfdHlwZSd9LCAnJywgJ2luYWN0aXZlc2xvdCBvbiBzdGFuZGJ5IGRy b3BwZWQnKTsKKwlpcygkbm9kZV9zdGFuZGJ5LT5zbG90KCRzbG90X3ByZWZpeCAuICdhY3Rp dmVzbG90JyktPnsnc2xvdF90eXBlJ30sICcnLCAnYWN0aXZlc2xvdCBvbiBzdGFuZGJ5IGRy b3BwZWQnKTsKIAogCWNoZWNrX3BnX3JlY3Zsb2dpY2FsX3N0ZGVycigkc2xvdF91c2VyX2hh bmRsZSwgImNvbmZsaWN0IHdpdGggcmVjb3ZlcnkiKTsKIH0KQEAgLTE3MCw2ICsxNzgsNTEg QEAgc3ViIGNoZWNrX3Nsb3RzX2NvbmZsaWN0aW5nX3N0YXR1cwogCX0KIH0KIAorIyBEcm9w IHRoZSBzbG90cywgcmUtY3JlYXRlIHRoZW0sIGNoYW5nZSBob3Rfc3RhbmRieV9mZWVkYmFj aywKKyMgY2hlY2sgeG1pbiBhbmQgY2F0YWxvZ194bWluIHZhbHVlcywgbWFrZSBzbG90IGFj dGl2ZSBhbmQgcmVzZXQgc3RhdC4KK3N1YiByZWFjdGl2ZV9zbG90c19jaGFuZ2VfaGZzX2Fu ZF93YWl0X2Zvcl94bWlucworeworCW15ICgkcHJldmlvdXNfc2xvdF9wcmVmaXgsICRzbG90 X3ByZWZpeCwgJGhzZiwgJGludmFsaWRhdGVkKSA9IEBfOworCisJIyBkcm9wIHRoZSBsb2dp Y2FsIHNsb3RzCisJZHJvcF9sb2dpY2FsX3Nsb3RzKCRwcmV2aW91c19zbG90X3ByZWZpeCk7 CisKKwkjIGNyZWF0ZSB0aGUgbG9naWNhbCBzbG90cworCWNyZWF0ZV9sb2dpY2FsX3Nsb3Rz KCRub2RlX3N0YW5kYnksICRzbG90X3ByZWZpeCk7CisKKwljaGFuZ2VfaG90X3N0YW5kYnlf ZmVlZGJhY2tfYW5kX3dhaXRfZm9yX3htaW5zKCRoc2YsICRpbnZhbGlkYXRlZCk7CisKKwkk aGFuZGxlID0gbWFrZV9zbG90X2FjdGl2ZSgkbm9kZV9zdGFuZGJ5LCAkc2xvdF9wcmVmaXgs IDEsIFwkc3Rkb3V0LCBcJHN0ZGVycik7CisKKwkjIHJlc2V0IHN0YXQ6IGVhc2llciB0byBj aGVjayBmb3IgY29uZmxfYWN0aXZlX2xvZ2ljYWxzbG90IGluIHBnX3N0YXRfZGF0YWJhc2Vf Y29uZmxpY3RzCisJJG5vZGVfc3RhbmRieS0+cHNxbCgndGVzdGRiJywgcVtzZWxlY3QgcGdf c3RhdF9yZXNldCgpO10pOworfQorCisjIENoZWNrIGludmFsaWRhdGlvbiBpbiB0aGUgbG9n ZmlsZSBhbmQgaW4gcGdfc3RhdF9kYXRhYmFzZV9jb25mbGljdHMKK3N1YiBjaGVja19mb3Jf aW52YWxpZGF0aW9uCit7CisJbXkgKCRzbG90X3ByZWZpeCwgJGxvZ19zdGFydCwgJHRlc3Rf bmFtZSkgPSBAXzsKKworCW15ICRhY3RpdmVfc2xvdCA9ICRzbG90X3ByZWZpeCAuICdhY3Rp dmVzbG90JzsKKwlteSAkaW5hY3RpdmVfc2xvdCA9ICRzbG90X3ByZWZpeCAuICdpbmFjdGl2 ZXNsb3QnOworCisJIyBtZXNzYWdlIHNob3VsZCBiZSBpc3N1ZWQKKwlvayggZmluZF9pbl9s b2coCisJCSRub2RlX3N0YW5kYnksCisJCSJpbnZhbGlkYXRpbmcgb2Jzb2xldGUgcmVwbGlj YXRpb24gc2xvdCBcIiRpbmFjdGl2ZV9zbG90XCIiLCAkbG9nX3N0YXJ0KSwKKwkJImluYWN0 aXZlc2xvdCBzbG90IGludmFsaWRhdGlvbiBpcyBsb2dnZWQgJHRlc3RfbmFtZSIpOworCisJ b2soIGZpbmRfaW5fbG9nKAorCQkkbm9kZV9zdGFuZGJ5LAorCQkiaW52YWxpZGF0aW5nIG9i c29sZXRlIHJlcGxpY2F0aW9uIHNsb3QgXCIkYWN0aXZlX3Nsb3RcIiIsICRsb2dfc3RhcnQp LAorCQkiYWN0aXZlc2xvdCBzbG90IGludmFsaWRhdGlvbiBpcyBsb2dnZWQgJHRlc3RfbmFt ZSIpOworCisJIyBWZXJpZnkgdGhhdCBwZ19zdGF0X2RhdGFiYXNlX2NvbmZsaWN0cy5jb25m bF9hY3RpdmVfbG9naWNhbHNsb3QgaGFzIGJlZW4gdXBkYXRlZAorCW9rKCAkbm9kZV9zdGFu ZGJ5LT5wb2xsX3F1ZXJ5X3VudGlsKAorCQkncG9zdGdyZXMnLAorCQkic2VsZWN0IChjb25m bF9hY3RpdmVfbG9naWNhbHNsb3QgPSAxKSBmcm9tIHBnX3N0YXRfZGF0YWJhc2VfY29uZmxp Y3RzIHdoZXJlIGRhdG5hbWUgPSAndGVzdGRiJyIsICd0JyksCisJCSdjb25mbF9hY3RpdmVf bG9naWNhbHNsb3QgdXBkYXRlZCcpIG9yIGRpZSAiVGltZWQgb3V0IHdhaXRpbmcgY29uZmxf YWN0aXZlX2xvZ2ljYWxzbG90IHRvIGJlIHVwZGF0ZWQiOworfQogIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCiAjIEluaXRpYWxpemUgcHJpbWFyeSBub2RlCiAjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKQEAgLTIzMyw3ICsyODYsNyBAQCAkbm9kZV9zdGFuZGJ5LT53YWl0X2Zvcl9y ZXBsYXlfY2F0Y2h1cCgkbm9kZV9jYXNjYWRpbmdfc3RhbmRieSwgJG5vZGVfcHJpbWFyeSk7 CiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwog CiAjIGNyZWF0ZSB0aGUgbG9naWNhbCBzbG90cwotY3JlYXRlX2xvZ2ljYWxfc2xvdHMoJG5v ZGVfc3RhbmRieSk7CitjcmVhdGVfbG9naWNhbF9zbG90cygkbm9kZV9zdGFuZGJ5LCAnYmVo YXZlc19va18nKTsKIAogJG5vZGVfcHJpbWFyeS0+c2FmZV9wc3FsKCd0ZXN0ZGInLCBxcVtD UkVBVEUgVEFCTEUgZGVjb2RpbmdfdGVzdCh4IGludGVnZXIsIHkgdGV4dCk7XSk7CiAkbm9k ZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Rlc3RkYicsIHFxW0lOU0VSVCBJTlRPIGRlY29kaW5n X3Rlc3QoeCx5KSBTRUxFQ1Qgcywgczo6dGV4dCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEw KSBzO10pOwpAQCAtMjQxLDcgKzI5NCw3IEBAICRub2RlX3ByaW1hcnktPnNhZmVfcHNxbCgn dGVzdGRiJywgcXFbSU5TRVJUIElOVE8gZGVjb2RpbmdfdGVzdCh4LHkpIFNFTEVDVCBzLCBz CiAkbm9kZV9wcmltYXJ5LT53YWl0X2Zvcl9yZXBsYXlfY2F0Y2h1cCgkbm9kZV9zdGFuZGJ5 KTsKIAogbXkgJHJlc3VsdCA9ICRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgndGVzdGRiJywK LQlxcVtTRUxFQ1QgcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdhY3RpdmVzbG90Jywg TlVMTCwgTlVMTCk7XSk7CisJcXFbU0VMRUNUIHBnX2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdl cygnYmVoYXZlc19va19hY3RpdmVzbG90JywgTlVMTCwgTlVMTCk7XSk7CiAKICMgdGVzdCBp ZiBiYXNpYyBkZWNvZGluZyB3b3JrcwogaXMoc2NhbGFyKG15IEBmb29iYXIgPSBzcGxpdCAv Xi9tLCAkcmVzdWx0KSwKQEAgLTI2MywxMyArMzE2LDEzIEBAIENPTU1JVH07CiAkbm9kZV9w cmltYXJ5LT53YWl0X2Zvcl9yZXBsYXlfY2F0Y2h1cCgkbm9kZV9zdGFuZGJ5KTsKIAogbXkg JHN0ZG91dF9zcWwgPSAkbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Rlc3RkYicsCi0JcXFb U0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfcGVla19jaGFuZ2VzKCdhY3RpdmVz bG90JywgTlVMTCwgTlVMTCwgJ2luY2x1ZGUteGlkcycsICcwJywgJ3NraXAtZW1wdHkteGFj dHMnLCAnMScpO10KKwlxcVtTRUxFQ1QgZGF0YSBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9wZWVr X2NoYW5nZXMoJ2JlaGF2ZXNfb2tfYWN0aXZlc2xvdCcsIE5VTEwsIE5VTEwsICdpbmNsdWRl LXhpZHMnLCAnMCcsICdza2lwLWVtcHR5LXhhY3RzJywgJzEnKTtdCiApOwogCiBpcygkc3Rk b3V0X3NxbCwgJGV4cGVjdGVkLCAnZ290IGV4cGVjdGVkIG91dHB1dCBmcm9tIFNRTCBkZWNv ZGluZyBzZXNzaW9uJyk7CiAKIG15ICRlbmRwb3MgPSAkbm9kZV9zdGFuZGJ5LT5zYWZlX3Bz cWwoJ3Rlc3RkYicsCi0JIlNFTEVDVCBsc24gRlJPTSBwZ19sb2dpY2FsX3Nsb3RfcGVla19j aGFuZ2VzKCdhY3RpdmVzbG90JywgTlVMTCwgTlVMTCkgT1JERVIgQlkgbHNuIERFU0MgTElN SVQgMTsiCisJIlNFTEVDVCBsc24gRlJPTSBwZ19sb2dpY2FsX3Nsb3RfcGVla19jaGFuZ2Vz KCdiZWhhdmVzX29rX2FjdGl2ZXNsb3QnLCBOVUxMLCBOVUxMKSBPUkRFUiBCWSBsc24gREVT QyBMSU1JVCAxOyIKICk7CiAKICMgSW5zZXJ0IHNvbWUgcm93cyBhZnRlciAkZW5kcG9zLCB3 aGljaCB3ZSB3b24ndCByZWFkLgpAQCAtMjgwLDcgKzMzMyw3IEBAICRub2RlX3ByaW1hcnkt PnNhZmVfcHNxbCgndGVzdGRiJywKICRub2RlX3ByaW1hcnktPndhaXRfZm9yX2NhdGNodXAo JG5vZGVfc3RhbmRieSk7CiAKIG15ICRzdGRvdXRfcmVjdiA9ICRub2RlX3N0YW5kYnktPnBn X3JlY3Zsb2dpY2FsX3VwdG8oCi0gICAgJ3Rlc3RkYicsICdhY3RpdmVzbG90JywgJGVuZHBv cywgJGRlZmF1bHRfdGltZW91dCwKKyAgICAndGVzdGRiJywgJ2JlaGF2ZXNfb2tfYWN0aXZl c2xvdCcsICRlbmRwb3MsICRkZWZhdWx0X3RpbWVvdXQsCiAgICAgJ2luY2x1ZGUteGlkcycg ICAgID0+ICcwJywKICAgICAnc2tpcC1lbXB0eS14YWN0cycgPT4gJzEnKTsKIGNob21wKCRz dGRvdXRfcmVjdik7CkBAIC0yODgsMTEgKzM0MSwxMSBAQCBpcygkc3Rkb3V0X3JlY3YsICRl eHBlY3RlZCwKICAgICAnZ290IHNhbWUgZXhwZWN0ZWQgb3V0cHV0IGZyb20gcGdfcmVjdmxv Z2ljYWwgZGVjb2Rpbmcgc2Vzc2lvbicpOwogCiAkbm9kZV9zdGFuZGJ5LT5wb2xsX3F1ZXJ5 X3VudGlsKCd0ZXN0ZGInLAotCSJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIHBnX3Jl cGxpY2F0aW9uX3Nsb3RzIFdIRVJFIHNsb3RfbmFtZSA9ICdhY3RpdmVzbG90JyBBTkQgYWN0 aXZlX3BpZCBJUyBOVUxMKSIKKwkiU0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBwZ19y ZXBsaWNhdGlvbl9zbG90cyBXSEVSRSBzbG90X25hbWUgPSAnYmVoYXZlc19va19hY3RpdmVz bG90JyBBTkQgYWN0aXZlX3BpZCBJUyBOVUxMKSIKICkgb3IgZGllICJzbG90IG5ldmVyIGJl Y2FtZSBpbmFjdGl2ZSI7CiAKICRzdGRvdXRfcmVjdiA9ICRub2RlX3N0YW5kYnktPnBnX3Jl Y3Zsb2dpY2FsX3VwdG8oCi0gICAgJ3Rlc3RkYicsICdhY3RpdmVzbG90JywgJGVuZHBvcywg JGRlZmF1bHRfdGltZW91dCwKKyAgICAndGVzdGRiJywgJ2JlaGF2ZXNfb2tfYWN0aXZlc2xv dCcsICRlbmRwb3MsICRkZWZhdWx0X3RpbWVvdXQsCiAgICAgJ2luY2x1ZGUteGlkcycgICAg ID0+ICcwJywKICAgICAnc2tpcC1lbXB0eS14YWN0cycgPT4gJzEnKTsKIGNob21wKCRzdGRv dXRfcmVjdik7CkBAIC0zMDIsMjggKzM1NSwyMCBAQCAkbm9kZV9wcmltYXJ5LT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBEQVRBQkFTRSBvdGhlcmRiJyk7CiAKIGlzKCAkbm9k ZV9wcmltYXJ5LT5wc3FsKAogICAgICAgICAnb3RoZXJkYicsCi0gICAgICAgICJTRUxFQ1Qg bHNuIEZST00gcGdfbG9naWNhbF9zbG90X3BlZWtfY2hhbmdlcygnYWN0aXZlc2xvdCcsIE5V TEwsIE5VTEwpIE9SREVSIEJZIGxzbiBERVNDIExJTUlUIDE7IgorICAgICAgICAiU0VMRUNU IGxzbiBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9wZWVrX2NoYW5nZXMoJ2JlaGF2ZXNfb2tfYWN0 aXZlc2xvdCcsIE5VTEwsIE5VTEwpIE9SREVSIEJZIGxzbiBERVNDIExJTUlUIDE7IgogICAg ICksCiAgICAgMywKICAgICAncmVwbGF5aW5nIGxvZ2ljYWwgc2xvdCBmcm9tIGFub3RoZXIg ZGF0YWJhc2UgZmFpbHMnKTsKIAotIyBkcm9wIHRoZSBsb2dpY2FsIHNsb3RzCi1kcm9wX2xv Z2ljYWxfc2xvdHMoKTsKLQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKICMgUmVjb3ZlcnkgY29uZmxpY3Q6IEludmFsaWRhdGUgY29uZmxp Y3Rpbmcgc2xvdHMsIGluY2x1ZGluZyBpbi11c2Ugc2xvdHMKICMgU2NlbmFyaW8gMTogaG90 X3N0YW5kYnlfZmVlZGJhY2sgb2ZmIGFuZCB2YWN1dW0gRlVMTAogIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotIyBjcmVhdGUgdGhlIGxv Z2ljYWwgc2xvdHMKLWNyZWF0ZV9sb2dpY2FsX3Nsb3RzKCRub2RlX3N0YW5kYnkpOwotCiAj IE9uZSB3YXkgdG8gcHJvZHVjZSByZWNvdmVyeSBjb25mbGljdCBpcyB0byBjcmVhdGUvZHJv cCBhIHJlbGF0aW9uIGFuZAogIyBsYXVuY2ggYSB2YWN1dW0gZnVsbCBvbiBwZ19jbGFzcyB3 aXRoIGhvdF9zdGFuZGJ5X2ZlZWRiYWNrIHR1cm5lZCBvZmYgb24KICMgdGhlIHN0YW5kYnku Ci1jaGFuZ2VfaG90X3N0YW5kYnlfZmVlZGJhY2tfYW5kX3dhaXRfZm9yX3htaW5zKDAsMSk7 Ci0KLSRoYW5kbGUgPSBtYWtlX3Nsb3RfYWN0aXZlKCRub2RlX3N0YW5kYnksIDEsIFwkc3Rk b3V0LCBcJHN0ZGVycik7CityZWFjdGl2ZV9zbG90c19jaGFuZ2VfaGZzX2FuZF93YWl0X2Zv cl94bWlucygnYmVoYXZlc19va18nLCAndmFjdXVtX2Z1bGxfJywgMCwgMSk7CiAKICMgVGhp cyBzaG91bGQgdHJpZ2dlciB0aGUgY29uZmxpY3QKICRub2RlX3ByaW1hcnktPnNhZmVfcHNx bCgndGVzdGRiJywgcXFbQ1JFQVRFIFRBQkxFIGNvbmZsaWN0X3Rlc3QoeCBpbnRlZ2VyLCB5 IHRleHQpO10pOwpAQCAtMzMyLDM0ICszNzcsMzMgQEAgJG5vZGVfcHJpbWFyeS0+c2FmZV9w c3FsKCd0ZXN0ZGInLCAnVkFDVVVNIGZ1bGwgcGdfY2xhc3M7Jyk7CiAKICRub2RlX3ByaW1h cnktPndhaXRfZm9yX3JlcGxheV9jYXRjaHVwKCRub2RlX3N0YW5kYnkpOwogCi0jIG1lc3Nh Z2Ugc2hvdWxkIGJlIGlzc3VlZAotb2soIGZpbmRfaW5fbG9nKAotICAgJG5vZGVfc3RhbmRi eSwKLSAgImludmFsaWRhdGluZyBvYnNvbGV0ZSByZXBsaWNhdGlvbiBzbG90IFwiaW5hY3Rp dmVzbG90XCIiKSwKLSAgJ2luYWN0aXZlc2xvdCBzbG90IGludmFsaWRhdGlvbiBpcyBsb2dn ZWQgd2l0aCB2YWN1dW0gRlVMTCBvbiBwZ19jbGFzcycpOwotCi1vayggZmluZF9pbl9sb2co Ci0gICAkbm9kZV9zdGFuZGJ5LAotICAiaW52YWxpZGF0aW5nIG9ic29sZXRlIHJlcGxpY2F0 aW9uIHNsb3QgXCJhY3RpdmVzbG90XCIiKSwKLSAgJ2FjdGl2ZXNsb3Qgc2xvdCBpbnZhbGlk YXRpb24gaXMgbG9nZ2VkIHdpdGggdmFjdXVtIEZVTEwgb24gcGdfY2xhc3MnKTsKLQotIyBW ZXJpZnkgdGhhdCBwZ19zdGF0X2RhdGFiYXNlX2NvbmZsaWN0cy5jb25mbF9hY3RpdmVfbG9n aWNhbHNsb3QgaGFzIGJlZW4gdXBkYXRlZAotb2soICRub2RlX3N0YW5kYnktPnBvbGxfcXVl cnlfdW50aWwoCi0JJ3Bvc3RncmVzJywKLQkic2VsZWN0IChjb25mbF9hY3RpdmVfbG9naWNh bHNsb3QgPSAxKSBmcm9tIHBnX3N0YXRfZGF0YWJhc2VfY29uZmxpY3RzIHdoZXJlIGRhdG5h bWUgPSAndGVzdGRiJyIsICd0JyksCi0JJ2NvbmZsX2FjdGl2ZV9sb2dpY2Fsc2xvdCB1cGRh dGVkJykgb3IgZGllICJUaW1lZCBvdXQgd2FpdGluZyBjb25mbF9hY3RpdmVfbG9naWNhbHNs b3QgdG8gYmUgdXBkYXRlZCI7CisjIENoZWNrIGludmFsaWRhdGlvbiBpbiB0aGUgbG9nZmls ZSBhbmQgaW4gcGdfc3RhdF9kYXRhYmFzZV9jb25mbGljdHMKK2NoZWNrX2Zvcl9pbnZhbGlk YXRpb24oJ3ZhY3V1bV9mdWxsXycsIDEsICd3aXRoIHZhY3V1bSBGVUxMIG9uIHBnX2NsYXNz Jyk7CiAKICMgVmVyaWZ5IHNsb3RzIGFyZSByZXBvcnRlZCBhcyBjb25mbGljdGluZyBpbiBw Z19yZXBsaWNhdGlvbl9zbG90cwogY2hlY2tfc2xvdHNfY29uZmxpY3Rpbmdfc3RhdHVzKDEp OwogCi0kaGFuZGxlID0gbWFrZV9zbG90X2FjdGl2ZSgkbm9kZV9zdGFuZGJ5LCAwLCBcJHN0 ZG91dCwgXCRzdGRlcnIpOworJGhhbmRsZSA9IG1ha2Vfc2xvdF9hY3RpdmUoJG5vZGVfc3Rh bmRieSwgJ3ZhY3V1bV9mdWxsXycsIDAsIFwkc3Rkb3V0LCBcJHN0ZGVycik7CiAKICMgV2Ug YXJlIG5vdCBhYmxlIHRvIHJlYWQgZnJvbSB0aGUgc2xvdCBhcyBpdCBoYXMgYmVlbiBpbnZh bGlkYXRlZAotY2hlY2tfcGdfcmVjdmxvZ2ljYWxfc3RkZXJyKCRoYW5kbGUsICJjYW5ub3Qg cmVhZCBmcm9tIGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdCBcImFjdGl2ZXNsb3RcIiIpOwor Y2hlY2tfcGdfcmVjdmxvZ2ljYWxfc3RkZXJyKCRoYW5kbGUsICJjYW5ub3QgcmVhZCBmcm9t IGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdCBcInZhY3V1bV9mdWxsX2FjdGl2ZXNsb3RcIiIp OwogCiAjIFR1cm4gaG90X3N0YW5kYnlfZmVlZGJhY2sgYmFjayBvbgogY2hhbmdlX2hvdF9z dGFuZGJ5X2ZlZWRiYWNrX2FuZF93YWl0X2Zvcl94bWlucygxLDEpOwogCisjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBWZXJpZnkgdGhh dCBpbnZhbGlkYXRlZCBsb2dpY2FsIHNsb3RzIHN0YXkgaW52YWxpZGF0ZWQgYWNyb3NzIGEg cmVzdGFydC4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCiskbm9kZV9zdGFuZGJ5LT5yZXN0YXJ0OworCisjIFZlcmlmeSBzbG90cyBhcmUg cmVwb3J0ZWQgYXMgY29uZmxpY3RpbmcgaW4gcGdfcmVwbGljYXRpb25fc2xvdHMKK2NoZWNr X3Nsb3RzX2NvbmZsaWN0aW5nX3N0YXR1cygxKTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVmVyaWZ5IHRoYXQgaW52YWxpZGF0 ZWQgbG9naWNhbCBzbG90cyBkbyBub3QgbGVhZCB0byByZXRhaW5pbmcgV0FMCisjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYWFhYWCBU T0RPCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCiAjIFJlY292ZXJ5IGNvbmZsaWN0OiBJbnZhbGlkYXRlIGNvbmZsaWN0aW5nIHNsb3Rz LCBpbmNsdWRpbmcgaW4tdXNlIHNsb3RzCiAjIFNjZW5hcmlvIDI6IGNvbmZsaWN0IGR1ZSB0 byByb3cgcmVtb3ZhbCB3aXRoIGhvdF9zdGFuZGJ5X2ZlZWRiYWNrIG9mZi4KQEAgLTM2OCwx NyArNDEyLDkgQEAgY2hhbmdlX2hvdF9zdGFuZGJ5X2ZlZWRiYWNrX2FuZF93YWl0X2Zvcl94 bWlucygxLDEpOwogIyBnZXQgdGhlIHBvc2l0aW9uIHRvIHNlYXJjaCBmcm9tIGluIHRoZSBz dGFuZGJ5IGxvZ2ZpbGUKIG15ICRsb2dzdGFydCA9IC1zICRub2RlX3N0YW5kYnktPmxvZ2Zp bGU7CiAKLSMgZHJvcCB0aGUgbG9naWNhbCBzbG90cwotZHJvcF9sb2dpY2FsX3Nsb3RzKCk7 Ci0KLSMgY3JlYXRlIHRoZSBsb2dpY2FsIHNsb3RzCi1jcmVhdGVfbG9naWNhbF9zbG90cygk bm9kZV9zdGFuZGJ5KTsKLQogIyBPbmUgd2F5IHRvIHByb2R1Y2UgcmVjb3ZlcnkgY29uZmxp Y3QgaXMgdG8gY3JlYXRlL2Ryb3AgYSByZWxhdGlvbiBhbmQKICMgbGF1bmNoIGEgdmFjdXVt IG9uIHBnX2NsYXNzIHdpdGggaG90X3N0YW5kYnlfZmVlZGJhY2sgdHVybmVkIG9mZiBvbiB0 aGUgc3RhbmRieS4KLWNoYW5nZV9ob3Rfc3RhbmRieV9mZWVkYmFja19hbmRfd2FpdF9mb3Jf eG1pbnMoMCwxKTsKLQotJGhhbmRsZSA9IG1ha2Vfc2xvdF9hY3RpdmUoJG5vZGVfc3RhbmRi eSwgMSwgXCRzdGRvdXQsIFwkc3RkZXJyKTsKK3JlYWN0aXZlX3Nsb3RzX2NoYW5nZV9oZnNf YW5kX3dhaXRfZm9yX3htaW5zKCd2YWN1dW1fZnVsbF8nLCAncm93X3JlbW92YWxfJywgMCwg MSk7CiAKICMgVGhpcyBzaG91bGQgdHJpZ2dlciB0aGUgY29uZmxpY3QKICRub2RlX3ByaW1h cnktPnNhZmVfcHNxbCgndGVzdGRiJywgcXFbQ1JFQVRFIFRBQkxFIGNvbmZsaWN0X3Rlc3Qo eCBpbnRlZ2VyLCB5IHRleHQpO10pOwpAQCAtMzg3LDMxICs0MjMsMTYgQEAgJG5vZGVfcHJp bWFyeS0+c2FmZV9wc3FsKCd0ZXN0ZGInLCAnVkFDVVVNIHBnX2NsYXNzOycpOwogCiAkbm9k ZV9wcmltYXJ5LT53YWl0X2Zvcl9yZXBsYXlfY2F0Y2h1cCgkbm9kZV9zdGFuZGJ5KTsKIAot IyBtZXNzYWdlIHNob3VsZCBiZSBpc3N1ZWQKLW9rKCBmaW5kX2luX2xvZygKLSAgICRub2Rl X3N0YW5kYnksCi0gICJpbnZhbGlkYXRpbmcgb2Jzb2xldGUgcmVwbGljYXRpb24gc2xvdCBc ImluYWN0aXZlc2xvdFwiIiwgJGxvZ3N0YXJ0KSwKLSAgJ2luYWN0aXZlc2xvdCBzbG90IGlu dmFsaWRhdGlvbiBpcyBsb2dnZWQgd2l0aCB2YWN1dW0gb24gcGdfY2xhc3MnKTsKLQotb2so IGZpbmRfaW5fbG9nKAotICAgJG5vZGVfc3RhbmRieSwKLSAgImludmFsaWRhdGluZyBvYnNv bGV0ZSByZXBsaWNhdGlvbiBzbG90IFwiYWN0aXZlc2xvdFwiIiwgJGxvZ3N0YXJ0KSwKLSAg J2FjdGl2ZXNsb3Qgc2xvdCBpbnZhbGlkYXRpb24gaXMgbG9nZ2VkIHdpdGggdmFjdXVtIG9u IHBnX2NsYXNzJyk7Ci0KLSMgVmVyaWZ5IHRoYXQgcGdfc3RhdF9kYXRhYmFzZV9jb25mbGlj dHMuY29uZmxfYWN0aXZlX2xvZ2ljYWxzbG90IGhhcyBiZWVuIHVwZGF0ZWQKLSMgd2Ugbm93 IGV4cGVjdCAyIGNvbmZsaWN0cyByZXBvcnRlZCBhcyB0aGUgY291bnRlciBwZXJzaXN0IGFj cm9zcyByZWxvYWRzCi1vayggJG5vZGVfc3RhbmRieS0+cG9sbF9xdWVyeV91bnRpbCgKLQkn cG9zdGdyZXMnLAotCSJzZWxlY3QgKGNvbmZsX2FjdGl2ZV9sb2dpY2Fsc2xvdCA9IDIpIGZy b20gcGdfc3RhdF9kYXRhYmFzZV9jb25mbGljdHMgd2hlcmUgZGF0bmFtZSA9ICd0ZXN0ZGIn IiwgJ3QnKSwKLQknY29uZmxfYWN0aXZlX2xvZ2ljYWxzbG90IHVwZGF0ZWQnKSBvciBkaWUg IlRpbWVkIG91dCB3YWl0aW5nIGNvbmZsX2FjdGl2ZV9sb2dpY2Fsc2xvdCB0byBiZSB1cGRh dGVkIjsKKyMgQ2hlY2sgaW52YWxpZGF0aW9uIGluIHRoZSBsb2dmaWxlIGFuZCBpbiBwZ19z dGF0X2RhdGFiYXNlX2NvbmZsaWN0cworY2hlY2tfZm9yX2ludmFsaWRhdGlvbigncm93X3Jl bW92YWxfJywgJGxvZ3N0YXJ0LCAnd2l0aCB2YWN1dW0gb24gcGdfY2xhc3MnKTsKIAogIyBW ZXJpZnkgc2xvdHMgYXJlIHJlcG9ydGVkIGFzIGNvbmZsaWN0aW5nIGluIHBnX3JlcGxpY2F0 aW9uX3Nsb3RzCiBjaGVja19zbG90c19jb25mbGljdGluZ19zdGF0dXMoMSk7CiAKLSRoYW5k bGUgPSBtYWtlX3Nsb3RfYWN0aXZlKCRub2RlX3N0YW5kYnksIDAsIFwkc3Rkb3V0LCBcJHN0 ZGVycik7CiskaGFuZGxlID0gbWFrZV9zbG90X2FjdGl2ZSgkbm9kZV9zdGFuZGJ5LCAncm93 X3JlbW92YWxfJywgMCwgXCRzdGRvdXQsIFwkc3RkZXJyKTsKIAogIyBXZSBhcmUgbm90IGFi bGUgdG8gcmVhZCBmcm9tIHRoZSBzbG90IGFzIGl0IGhhcyBiZWVuIGludmFsaWRhdGVkCi1j aGVja19wZ19yZWN2bG9naWNhbF9zdGRlcnIoJGhhbmRsZSwgImNhbm5vdCByZWFkIGZyb20g bG9naWNhbCByZXBsaWNhdGlvbiBzbG90IFwiYWN0aXZlc2xvdFwiIik7CitjaGVja19wZ19y ZWN2bG9naWNhbF9zdGRlcnIoJGhhbmRsZSwgImNhbm5vdCByZWFkIGZyb20gbG9naWNhbCBy ZXBsaWNhdGlvbiBzbG90IFwicm93X3JlbW92YWxfYWN0aXZlc2xvdFwiIik7CiAKICMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIFJlY292 ZXJ5IGNvbmZsaWN0OiBTYW1lIGFzIFNjZW5hcmlvIDIgYnV0IG9uIGEgc2hhcmVkIGNhdGFs b2cgdGFibGUKQEAgLTQyMSwxNyArNDQyLDkgQEAgY2hlY2tfcGdfcmVjdmxvZ2ljYWxfc3Rk ZXJyKCRoYW5kbGUsICJjYW5ub3QgcmVhZCBmcm9tIGxvZ2ljYWwgcmVwbGljYXRpb24gc2xv dAogIyBnZXQgdGhlIHBvc2l0aW9uIHRvIHNlYXJjaCBmcm9tIGluIHRoZSBzdGFuZGJ5IGxv Z2ZpbGUKICRsb2dzdGFydCA9IC1zICRub2RlX3N0YW5kYnktPmxvZ2ZpbGU7CiAKLSMgZHJv cCB0aGUgbG9naWNhbCBzbG90cwotZHJvcF9sb2dpY2FsX3Nsb3RzKCk7Ci0KLSMgY3JlYXRl IHRoZSBsb2dpY2FsIHNsb3RzCi1jcmVhdGVfbG9naWNhbF9zbG90cygkbm9kZV9zdGFuZGJ5 KTsKLQogIyBPbmUgd2F5IHRvIHByb2R1Y2UgcmVjb3ZlcnkgY29uZmxpY3QgaXMgdG8gY3Jl YXRlL2Ryb3AgYSByZWxhdGlvbiBhbmQKICMgbGF1bmNoIGEgdmFjdXVtIG9uIHBnX2NsYXNz IHdpdGggaG90X3N0YW5kYnlfZmVlZGJhY2sgdHVybmVkIG9mZiBvbiB0aGUgc3RhbmRieS4K LWNoYW5nZV9ob3Rfc3RhbmRieV9mZWVkYmFja19hbmRfd2FpdF9mb3JfeG1pbnMoMCwxKTsK LQotJGhhbmRsZSA9IG1ha2Vfc2xvdF9hY3RpdmUoJG5vZGVfc3RhbmRieSwgMSwgXCRzdGRv dXQsIFwkc3RkZXJyKTsKK3JlYWN0aXZlX3Nsb3RzX2NoYW5nZV9oZnNfYW5kX3dhaXRfZm9y X3htaW5zKCdyb3dfcmVtb3ZhbF8nLCAnc2hhcmVkX3Jvd19yZW1vdmFsXycsIDAsIDEpOwog CiAjIFRyaWdnZXIgdGhlIGNvbmZsaWN0LiBUaGUgdHhpZF9jdXJyZW50KCkgaXMgdG8gZW5z dXJlIHRoZXJlJ3Mgc29tZSBXQUwKICMgcmVjb3JkIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0 YWJhc2UsIG90aGVyd2lzZSB0aGUgd2FpdCBiZWxvdyBkb2VzIG5vdCB3b3JrCkBAIC00NDUs MzEgKzQ1OCwxNiBAQCAkbm9kZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Rlc3RkYicsICdWQUNV VU0gcGdfYXV0aGlkOycpOwogCiAkbm9kZV9wcmltYXJ5LT53YWl0X2Zvcl9yZXBsYXlfY2F0 Y2h1cCgkbm9kZV9zdGFuZGJ5KTsKIAotIyBtZXNzYWdlIHNob3VsZCBiZSBpc3N1ZWQKLW9r KCBmaW5kX2luX2xvZygKLSAgICRub2RlX3N0YW5kYnksCi0gICJpbnZhbGlkYXRpbmcgb2Jz b2xldGUgcmVwbGljYXRpb24gc2xvdCBcImluYWN0aXZlc2xvdFwiIiwgJGxvZ3N0YXJ0KSwK LSAgJ2luYWN0aXZlc2xvdCBzbG90IGludmFsaWRhdGlvbiBpcyBsb2dnZWQgd2l0aCB2YWN1 dW0gb24gcGdfYXV0aGlkJyk7Ci0KLW9rKCBmaW5kX2luX2xvZygKLSAgICRub2RlX3N0YW5k YnksCi0gICJpbnZhbGlkYXRpbmcgb2Jzb2xldGUgcmVwbGljYXRpb24gc2xvdCBcImFjdGl2 ZXNsb3RcIiIsICRsb2dzdGFydCksCi0gICdhY3RpdmVzbG90IHNsb3QgaW52YWxpZGF0aW9u IGlzIGxvZ2dlZCB3aXRoIHZhY3V1bSBvbiBwZ19hdXRoaWQnKTsKLQotIyBWZXJpZnkgdGhh dCBwZ19zdGF0X2RhdGFiYXNlX2NvbmZsaWN0cy5jb25mbF9hY3RpdmVfbG9naWNhbHNsb3Qg aGFzIGJlZW4gdXBkYXRlZAotIyB3ZSBub3cgZXhwZWN0IDIgY29uZmxpY3RzIHJlcG9ydGVk IGFzIHRoZSBjb3VudGVyIHBlcnNpc3QgYWNyb3NzIHJlbG9hZHMKLW9rKCAkbm9kZV9zdGFu ZGJ5LT5wb2xsX3F1ZXJ5X3VudGlsKAotCSdwb3N0Z3JlcycsCi0JInNlbGVjdCAoY29uZmxf YWN0aXZlX2xvZ2ljYWxzbG90ID0gMykgZnJvbSBwZ19zdGF0X2RhdGFiYXNlX2NvbmZsaWN0 cyB3aGVyZSBkYXRuYW1lID0gJ3Rlc3RkYiciLCAndCcpLAotCSdjb25mbF9hY3RpdmVfbG9n aWNhbHNsb3QgdXBkYXRlZCcpIG9yIGRpZSAiVGltZWQgb3V0IHdhaXRpbmcgY29uZmxfYWN0 aXZlX2xvZ2ljYWxzbG90IHRvIGJlIHVwZGF0ZWQiOworIyBDaGVjayBpbnZhbGlkYXRpb24g aW4gdGhlIGxvZ2ZpbGUgYW5kIGluIHBnX3N0YXRfZGF0YWJhc2VfY29uZmxpY3RzCitjaGVj a19mb3JfaW52YWxpZGF0aW9uKCdzaGFyZWRfcm93X3JlbW92YWxfJywgJGxvZ3N0YXJ0LCAn d2l0aCB2YWN1dW0gb24gcGdfYXV0aGlkJyk7CiAKICMgVmVyaWZ5IHNsb3RzIGFyZSByZXBv cnRlZCBhcyBjb25mbGljdGluZyBpbiBwZ19yZXBsaWNhdGlvbl9zbG90cwogY2hlY2tfc2xv dHNfY29uZmxpY3Rpbmdfc3RhdHVzKDEpOwogCi0kaGFuZGxlID0gbWFrZV9zbG90X2FjdGl2 ZSgkbm9kZV9zdGFuZGJ5LCAwLCBcJHN0ZG91dCwgXCRzdGRlcnIpOworJGhhbmRsZSA9IG1h a2Vfc2xvdF9hY3RpdmUoJG5vZGVfc3RhbmRieSwgJ3NoYXJlZF9yb3dfcmVtb3ZhbF8nLCAw LCBcJHN0ZG91dCwgXCRzdGRlcnIpOwogCiAjIFdlIGFyZSBub3QgYWJsZSB0byByZWFkIGZy b20gdGhlIHNsb3QgYXMgaXQgaGFzIGJlZW4gaW52YWxpZGF0ZWQKLWNoZWNrX3BnX3JlY3Zs b2dpY2FsX3N0ZGVycigkaGFuZGxlLCAiY2Fubm90IHJlYWQgZnJvbSBsb2dpY2FsIHJlcGxp Y2F0aW9uIHNsb3QgXCJhY3RpdmVzbG90XCIiKTsKK2NoZWNrX3BnX3JlY3Zsb2dpY2FsX3N0 ZGVycigkaGFuZGxlLCAiY2Fubm90IHJlYWQgZnJvbSBsb2dpY2FsIHJlcGxpY2F0aW9uIHNs b3QgXCJzaGFyZWRfcm93X3JlbW92YWxfYWN0aXZlc2xvdFwiIik7CiAKICMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIFJlY292ZXJ5IGNv bmZsaWN0OiBTYW1lIGFzIFNjZW5hcmlvIDIgYnV0IG9uIGEgbm9uIGNhdGFsb2cgdGFibGUK QEAgLTQ3OSw0MSArNDc3LDMwIEBAIGNoZWNrX3BnX3JlY3Zsb2dpY2FsX3N0ZGVycigkaGFu ZGxlLCAiY2Fubm90IHJlYWQgZnJvbSBsb2dpY2FsIHJlcGxpY2F0aW9uIHNsb3QKICMgZ2V0 IHRoZSBwb3NpdGlvbiB0byBzZWFyY2ggZnJvbSBpbiB0aGUgc3RhbmRieSBsb2dmaWxlCiAk bG9nc3RhcnQgPSAtcyAkbm9kZV9zdGFuZGJ5LT5sb2dmaWxlOwogCi0jIGRyb3AgdGhlIGxv Z2ljYWwgc2xvdHMKLWRyb3BfbG9naWNhbF9zbG90cygpOwotCi0jIGNyZWF0ZSB0aGUgbG9n aWNhbCBzbG90cwotY3JlYXRlX2xvZ2ljYWxfc2xvdHMoJG5vZGVfc3RhbmRieSk7Ci0KLSMg cHV0IGhvdCBzdGFuZGJ5IGZlZWRiYWNrIHRvIG9mZgotY2hhbmdlX2hvdF9zdGFuZGJ5X2Zl ZWRiYWNrX2FuZF93YWl0X2Zvcl94bWlucygwLDEpOwotCi0kaGFuZGxlID0gbWFrZV9zbG90 X2FjdGl2ZSgkbm9kZV9zdGFuZGJ5LCAxLCBcJHN0ZG91dCwgXCRzdGRlcnIpOworcmVhY3Rp dmVfc2xvdHNfY2hhbmdlX2hmc19hbmRfd2FpdF9mb3JfeG1pbnMoJ3NoYXJlZF9yb3dfcmVt b3ZhbF8nLCAnbm9fY29uZmxpY3RfJywgMCwgMSk7CiAKICMgVGhpcyBzaG91bGQgbm90IHRy aWdnZXIgYSBjb25mbGljdAotJG5vZGVfcHJpbWFyeS0+c2FmZV9wc3FsKCd0ZXN0ZGInLCBx cVtDUkVBVEUgVEFCTEUgY29uZmxpY3RfdGVzdCh4IGludGVnZXIsIHkgdGV4dCk7XSk7Ci0k bm9kZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Rlc3RkYicsIHFxW0lOU0VSVCBJTlRPIGNvbmZs aWN0X3Rlc3QoeCx5KSBTRUxFQ1Qgcywgczo6dGV4dCBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDQpIHM7XSk7Ci0kbm9kZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Rlc3RkYicsIHFxW1VQREFU RSBjb25mbGljdF90ZXN0IHNldCB4PTEsIHk9MTtdKTsKLSRub2RlX3ByaW1hcnktPnNhZmVf cHNxbCgndGVzdGRiJywgJ1ZBQ1VVTSBjb25mbGljdF90ZXN0OycpOwotCiskbm9kZV9wcmlt YXJ5LT5zYWZlX3BzcWwoJ3Rlc3RkYicsIHFxW0NSRUFURSBUQUJMRSBjb25mbGljdF90ZXN0 KHggaW50ZWdlciwgeSB0ZXh0KTsKKwkJCQkJCQkJCSAgSU5TRVJUIElOVE8gY29uZmxpY3Rf dGVzdCh4LHkpIFNFTEVDVCBzLCBzOjp0ZXh0IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsNCkg czsKKwkJCQkJCQkJCSAgVVBEQVRFIGNvbmZsaWN0X3Rlc3Qgc2V0IHg9MSwgeT0xOworCQkJ CQkJCQkJICBWQUNVVU0gY29uZmxpY3RfdGVzdDtdKTsKICRub2RlX3ByaW1hcnktPndhaXRf Zm9yX3JlcGxheV9jYXRjaHVwKCRub2RlX3N0YW5kYnkpOwogCiAjIG1lc3NhZ2Ugc2hvdWxk IG5vdCBiZSBpc3N1ZWQKIG9rKCAhZmluZF9pbl9sb2coCiAgICAkbm9kZV9zdGFuZGJ5LAot ICAiaW52YWxpZGF0aW5nIG9ic29sZXRlIHNsb3QgXCJpbmFjdGl2ZXNsb3RcIiIsICRsb2dz dGFydCksCisgICJpbnZhbGlkYXRpbmcgb2Jzb2xldGUgc2xvdCBcIm5vX2NvbmZsaWN0X2lu YWN0aXZlc2xvdFwiIiwgJGxvZ3N0YXJ0KSwKICAgJ2luYWN0aXZlc2xvdCBzbG90IGludmFs aWRhdGlvbiBpcyBub3QgbG9nZ2VkIHdpdGggdmFjdXVtIG9uIGNvbmZsaWN0X3Rlc3QnKTsK IAogb2soICFmaW5kX2luX2xvZygKICAgICRub2RlX3N0YW5kYnksCi0gICJpbnZhbGlkYXRp bmcgb2Jzb2xldGUgc2xvdCBcImFjdGl2ZXNsb3RcIiIsICRsb2dzdGFydCksCisgICJpbnZh bGlkYXRpbmcgb2Jzb2xldGUgc2xvdCBcIm5vX2NvbmZsaWN0X2FjdGl2ZXNsb3RcIiIsICRs b2dzdGFydCksCiAgICdhY3RpdmVzbG90IHNsb3QgaW52YWxpZGF0aW9uIGlzIG5vdCBsb2dn ZWQgd2l0aCB2YWN1dW0gb24gY29uZmxpY3RfdGVzdCcpOwogCiAjIFZlcmlmeSB0aGF0IHBn X3N0YXRfZGF0YWJhc2VfY29uZmxpY3RzLmNvbmZsX2FjdGl2ZV9sb2dpY2Fsc2xvdCBoYXMg bm90IGJlZW4gdXBkYXRlZAotIyB3ZSBub3cgc3RpbGwgZXhwZWN0IDIgY29uZmxpY3RzIHJl cG9ydGVkIGFzIHRoZSBjb3VudGVyIHBlcnNpc3QgYWNyb3NzIHJlbG9hZHMKIG9rKCAkbm9k ZV9zdGFuZGJ5LT5wb2xsX3F1ZXJ5X3VudGlsKAogCSdwb3N0Z3JlcycsCi0JInNlbGVjdCAo Y29uZmxfYWN0aXZlX2xvZ2ljYWxzbG90ID0gMykgZnJvbSBwZ19zdGF0X2RhdGFiYXNlX2Nv bmZsaWN0cyB3aGVyZSBkYXRuYW1lID0gJ3Rlc3RkYiciLCAndCcpLAorCSJzZWxlY3QgKGNv bmZsX2FjdGl2ZV9sb2dpY2Fsc2xvdCA9IDApIGZyb20gcGdfc3RhdF9kYXRhYmFzZV9jb25m bGljdHMgd2hlcmUgZGF0bmFtZSA9ICd0ZXN0ZGInIiwgJ3QnKSwKIAknY29uZmxfYWN0aXZl X2xvZ2ljYWxzbG90IG5vdCB1cGRhdGVkJykgb3IgZGllICJUaW1lZCBvdXQgd2FpdGluZyBj b25mbF9hY3RpdmVfbG9naWNhbHNsb3QgdG8gYmUgdXBkYXRlZCI7CiAKICMgVmVyaWZ5IHNs b3RzIGFyZSByZXBvcnRlZCBhcyBub24gY29uZmxpY3RpbmcgaW4gcGdfcmVwbGljYXRpb25f c2xvdHMKQEAgLTUyMiw2ICs1MDksOSBAQCBjaGVja19zbG90c19jb25mbGljdGluZ19zdGF0 dXMoMCk7CiAjIFR1cm4gaG90X3N0YW5kYnlfZmVlZGJhY2sgYmFjayBvbgogY2hhbmdlX2hv dF9zdGFuZGJ5X2ZlZWRiYWNrX2FuZF93YWl0X2Zvcl94bWlucygxLCAwKTsKIAorIyBSZXN0 YXJ0IHRoZSBzdGFuZGJ5IG5vZGUgdG8gZW5zdXJlIG5vIHNsb3RzIGFyZSBzdGlsbCBhY3Rp dmUKKyRub2RlX3N0YW5kYnktPnJlc3RhcnQ7CisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIFJlY292ZXJ5IGNvbmZsaWN0OiBJbnZh bGlkYXRlIGNvbmZsaWN0aW5nIHNsb3RzLCBpbmNsdWRpbmcgaW4tdXNlIHNsb3RzCiAjIFNj ZW5hcmlvIDQ6IGNvbmZsaWN0IGR1ZSB0byBvbi1hY2Nlc3MgcHJ1bmluZy4KQEAgLTUzMCwx NyArNTIwLDkgQEAgY2hhbmdlX2hvdF9zdGFuZGJ5X2ZlZWRiYWNrX2FuZF93YWl0X2Zvcl94 bWlucygxLCAwKTsKICMgZ2V0IHRoZSBwb3NpdGlvbiB0byBzZWFyY2ggZnJvbSBpbiB0aGUg c3RhbmRieSBsb2dmaWxlCiAkbG9nc3RhcnQgPSAtcyAkbm9kZV9zdGFuZGJ5LT5sb2dmaWxl OwogCi0jIGRyb3AgdGhlIGxvZ2ljYWwgc2xvdHMKLWRyb3BfbG9naWNhbF9zbG90cygpOwot Ci0jIGNyZWF0ZSB0aGUgbG9naWNhbCBzbG90cwotY3JlYXRlX2xvZ2ljYWxfc2xvdHMoJG5v ZGVfc3RhbmRieSk7Ci0KICMgT25lIHdheSB0byBwcm9kdWNlIHJlY292ZXJ5IGNvbmZsaWN0 IGlzIHRvIHRyaWdnZXIgYW4gb24tYWNjZXNzIHBydW5pbmcKICMgb24gYSByZWxhdGlvbiBt YXJrZWQgYXMgdXNlcl9jYXRhbG9nX3RhYmxlLgotY2hhbmdlX2hvdF9zdGFuZGJ5X2ZlZWRi YWNrX2FuZF93YWl0X2Zvcl94bWlucygwLDApOwotCi0kaGFuZGxlID0gbWFrZV9zbG90X2Fj dGl2ZSgkbm9kZV9zdGFuZGJ5LCAxLCBcJHN0ZG91dCwgXCRzdGRlcnIpOworcmVhY3RpdmVf c2xvdHNfY2hhbmdlX2hmc19hbmRfd2FpdF9mb3JfeG1pbnMoJ25vX2NvbmZsaWN0XycsICdw cnVuaW5nXycsIDAsIDApOwogCiAjIFRoaXMgc2hvdWxkIHRyaWdnZXIgdGhlIGNvbmZsaWN0 CiAkbm9kZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Rlc3RkYicsIHFxW0NSRUFURSBUQUJMRSBw cnVuKGlkIGludGVnZXIsIHMgY2hhcigyMDAwKSkgV0lUSCAoZmlsbGZhY3RvciA9IDc1LCB1 c2VyX2NhdGFsb2dfdGFibGUgPSB0cnVlKTtdKTsKQEAgLTU1MiwzMSArNTM0LDE2IEBAICRu b2RlX3ByaW1hcnktPnNhZmVfcHNxbCgndGVzdGRiJywgcXFbVVBEQVRFIHBydW4gU0VUIHMg PSAnRSc7XSk7CiAKICRub2RlX3ByaW1hcnktPndhaXRfZm9yX3JlcGxheV9jYXRjaHVwKCRu b2RlX3N0YW5kYnkpOwogCi0jIG1lc3NhZ2Ugc2hvdWxkIGJlIGlzc3VlZAotb2soIGZpbmRf aW5fbG9nKAotICAgJG5vZGVfc3RhbmRieSwKLSAgImludmFsaWRhdGluZyBvYnNvbGV0ZSBy ZXBsaWNhdGlvbiBzbG90IFwiaW5hY3RpdmVzbG90XCIiLCAkbG9nc3RhcnQpLAotICAnaW5h Y3RpdmVzbG90IHNsb3QgaW52YWxpZGF0aW9uIGlzIGxvZ2dlZCB3aXRoIG9uLWFjY2VzcyBw cnVuaW5nJyk7Ci0KLW9rKCBmaW5kX2luX2xvZygKLSAgICRub2RlX3N0YW5kYnksCi0gICJp bnZhbGlkYXRpbmcgb2Jzb2xldGUgcmVwbGljYXRpb24gc2xvdCBcImFjdGl2ZXNsb3RcIiIs ICRsb2dzdGFydCksCi0gICdhY3RpdmVzbG90IHNsb3QgaW52YWxpZGF0aW9uIGlzIGxvZ2dl ZCB3aXRoIG9uLWFjY2VzcyBwcnVuaW5nJyk7Ci0KLSMgVmVyaWZ5IHRoYXQgcGdfc3RhdF9k YXRhYmFzZV9jb25mbGljdHMuY29uZmxfYWN0aXZlX2xvZ2ljYWxzbG90IGhhcyBiZWVuIHVw ZGF0ZWQKLSMgd2Ugbm93IGV4cGVjdCAzIGNvbmZsaWN0cyByZXBvcnRlZCBhcyB0aGUgY291 bnRlciBwZXJzaXN0IGFjcm9zcyByZWxvYWRzCi1vayggJG5vZGVfc3RhbmRieS0+cG9sbF9x dWVyeV91bnRpbCgKLQkncG9zdGdyZXMnLAotCSJzZWxlY3QgKGNvbmZsX2FjdGl2ZV9sb2dp Y2Fsc2xvdCA9IDQpIGZyb20gcGdfc3RhdF9kYXRhYmFzZV9jb25mbGljdHMgd2hlcmUgZGF0 bmFtZSA9ICd0ZXN0ZGInIiwgJ3QnKSwKLQknY29uZmxfYWN0aXZlX2xvZ2ljYWxzbG90IHVw ZGF0ZWQnKSBvciBkaWUgIlRpbWVkIG91dCB3YWl0aW5nIGNvbmZsX2FjdGl2ZV9sb2dpY2Fs c2xvdCB0byBiZSB1cGRhdGVkIjsKKyMgQ2hlY2sgaW52YWxpZGF0aW9uIGluIHRoZSBsb2dm aWxlIGFuZCBpbiBwZ19zdGF0X2RhdGFiYXNlX2NvbmZsaWN0cworY2hlY2tfZm9yX2ludmFs aWRhdGlvbigncHJ1bmluZ18nLCAkbG9nc3RhcnQsICd3aXRoIG9uLWFjY2VzcyBwcnVuaW5n Jyk7CiAKICMgVmVyaWZ5IHNsb3RzIGFyZSByZXBvcnRlZCBhcyBjb25mbGljdGluZyBpbiBw Z19yZXBsaWNhdGlvbl9zbG90cwogY2hlY2tfc2xvdHNfY29uZmxpY3Rpbmdfc3RhdHVzKDEp OwogCi0kaGFuZGxlID0gbWFrZV9zbG90X2FjdGl2ZSgkbm9kZV9zdGFuZGJ5LCAwLCBcJHN0 ZG91dCwgXCRzdGRlcnIpOworJGhhbmRsZSA9IG1ha2Vfc2xvdF9hY3RpdmUoJG5vZGVfc3Rh bmRieSwgJ3BydW5pbmdfJywgMCwgXCRzdGRvdXQsIFwkc3RkZXJyKTsKIAogIyBXZSBhcmUg bm90IGFibGUgdG8gcmVhZCBmcm9tIHRoZSBzbG90IGFzIGl0IGhhcyBiZWVuIGludmFsaWRh dGVkCi1jaGVja19wZ19yZWN2bG9naWNhbF9zdGRlcnIoJGhhbmRsZSwgImNhbm5vdCByZWFk IGZyb20gbG9naWNhbCByZXBsaWNhdGlvbiBzbG90IFwiYWN0aXZlc2xvdFwiIik7CitjaGVj a19wZ19yZWN2bG9naWNhbF9zdGRlcnIoJGhhbmRsZSwgImNhbm5vdCByZWFkIGZyb20gbG9n aWNhbCByZXBsaWNhdGlvbiBzbG90IFwicHJ1bmluZ19hY3RpdmVzbG90XCIiKTsKIAogIyBU dXJuIGhvdF9zdGFuZGJ5X2ZlZWRiYWNrIGJhY2sgb24KIGNoYW5nZV9ob3Rfc3RhbmRieV9m ZWVkYmFja19hbmRfd2FpdF9mb3JfeG1pbnMoMSwgMSk7CkBAIC01OTAsMTIgKzU1NywxNSBA QCBjaGFuZ2VfaG90X3N0YW5kYnlfZmVlZGJhY2tfYW5kX3dhaXRfZm9yX3htaW5zKDEsIDEp OwogJGxvZ3N0YXJ0ID0gLXMgJG5vZGVfc3RhbmRieS0+bG9nZmlsZTsKIAogIyBkcm9wIHRo ZSBsb2dpY2FsIHNsb3RzCi1kcm9wX2xvZ2ljYWxfc2xvdHMoKTsKK2Ryb3BfbG9naWNhbF9z bG90cygncHJ1bmluZ18nKTsKIAogIyBjcmVhdGUgdGhlIGxvZ2ljYWwgc2xvdHMKLWNyZWF0 ZV9sb2dpY2FsX3Nsb3RzKCRub2RlX3N0YW5kYnkpOworY3JlYXRlX2xvZ2ljYWxfc2xvdHMo JG5vZGVfc3RhbmRieSwgJ3dhbF9sZXZlbF8nKTsKKworJGhhbmRsZSA9IG1ha2Vfc2xvdF9h Y3RpdmUoJG5vZGVfc3RhbmRieSwgJ3dhbF9sZXZlbF8nLCAxLCBcJHN0ZG91dCwgXCRzdGRl cnIpOwogCi0kaGFuZGxlID0gbWFrZV9zbG90X2FjdGl2ZSgkbm9kZV9zdGFuZGJ5LCAxLCBc JHN0ZG91dCwgXCRzdGRlcnIpOworIyByZXNldCBzdGF0OiBlYXNpZXIgdG8gY2hlY2sgZm9y IGNvbmZsX2FjdGl2ZV9sb2dpY2Fsc2xvdCBpbiBwZ19zdGF0X2RhdGFiYXNlX2NvbmZsaWN0 cworJG5vZGVfc3RhbmRieS0+cHNxbCgndGVzdGRiJywgcVtzZWxlY3QgcGdfc3RhdF9yZXNl dCgpO10pOwogCiAjIE1ha2UgcHJpbWFyeSB3YWxfbGV2ZWwgcmVwbGljYS4gVGhpcyB3aWxs IHRyaWdnZXIgc2xvdCBjb25mbGljdC4KICRub2RlX3ByaW1hcnktPmFwcGVuZF9jb25mKCdw b3N0Z3Jlc3FsLmNvbmYnLHFbCkBAIC02MDUsMjggKzU3NSwxMyBAQCAkbm9kZV9wcmltYXJ5 LT5yZXN0YXJ0OwogCiAkbm9kZV9wcmltYXJ5LT53YWl0X2Zvcl9yZXBsYXlfY2F0Y2h1cCgk bm9kZV9zdGFuZGJ5KTsKIAotIyBtZXNzYWdlIHNob3VsZCBiZSBpc3N1ZWQKLW9rKCBmaW5k X2luX2xvZygKLSAgICRub2RlX3N0YW5kYnksCi0gICJpbnZhbGlkYXRpbmcgb2Jzb2xldGUg cmVwbGljYXRpb24gc2xvdCBcImluYWN0aXZlc2xvdFwiIiwgJGxvZ3N0YXJ0KSwKLSAgJ2lu YWN0aXZlc2xvdCBzbG90IGludmFsaWRhdGlvbiBpcyBsb2dnZWQgZHVlIHRvIHdhbF9sZXZl bCcpOwotCi1vayggZmluZF9pbl9sb2coCi0gICAkbm9kZV9zdGFuZGJ5LAotICAiaW52YWxp ZGF0aW5nIG9ic29sZXRlIHJlcGxpY2F0aW9uIHNsb3QgXCJhY3RpdmVzbG90XCIiLCAkbG9n c3RhcnQpLAotICAnYWN0aXZlc2xvdCBzbG90IGludmFsaWRhdGlvbiBpcyBsb2dnZWQgZHVl IHRvIHdhbF9sZXZlbCcpOwotCi0jIFZlcmlmeSB0aGF0IHBnX3N0YXRfZGF0YWJhc2VfY29u ZmxpY3RzLmNvbmZsX2FjdGl2ZV9sb2dpY2Fsc2xvdCBoYXMgYmVlbiB1cGRhdGVkCi0jIHdl IG5vdyBleHBlY3QgNSBjb25mbGljdHMgcmVwb3J0ZWQgYXMgdGhlIGNvdW50ZXIgcGVyc2lz dCBhY3Jvc3MgcmVsb2Fkcwotb2soICRub2RlX3N0YW5kYnktPnBvbGxfcXVlcnlfdW50aWwo Ci0JJ3Bvc3RncmVzJywKLQkic2VsZWN0IChjb25mbF9hY3RpdmVfbG9naWNhbHNsb3QgPSA1 KSBmcm9tIHBnX3N0YXRfZGF0YWJhc2VfY29uZmxpY3RzIHdoZXJlIGRhdG5hbWUgPSAndGVz dGRiJyIsICd0JyksCi0JJ2NvbmZsX2FjdGl2ZV9sb2dpY2Fsc2xvdCB1cGRhdGVkJykgb3Ig ZGllICJUaW1lZCBvdXQgd2FpdGluZyBjb25mbF9hY3RpdmVfbG9naWNhbHNsb3QgdG8gYmUg dXBkYXRlZCI7CisjIENoZWNrIGludmFsaWRhdGlvbiBpbiB0aGUgbG9nZmlsZSBhbmQgaW4g cGdfc3RhdF9kYXRhYmFzZV9jb25mbGljdHMKK2NoZWNrX2Zvcl9pbnZhbGlkYXRpb24oJ3dh bF9sZXZlbF8nLCAkbG9nc3RhcnQsICdkdWUgdG8gd2FsX2xldmVsJyk7CiAKICMgVmVyaWZ5 IHNsb3RzIGFyZSByZXBvcnRlZCBhcyBjb25mbGljdGluZyBpbiBwZ19yZXBsaWNhdGlvbl9z bG90cwogY2hlY2tfc2xvdHNfY29uZmxpY3Rpbmdfc3RhdHVzKDEpOwogCi0kaGFuZGxlID0g bWFrZV9zbG90X2FjdGl2ZSgkbm9kZV9zdGFuZGJ5LCAwLCBcJHN0ZG91dCwgXCRzdGRlcnIp OworJGhhbmRsZSA9IG1ha2Vfc2xvdF9hY3RpdmUoJG5vZGVfc3RhbmRieSwgJ3dhbF9sZXZl bF8nLCAwLCBcJHN0ZG91dCwgXCRzdGRlcnIpOwogIyBXZSBhcmUgbm90IGFibGUgdG8gcmVh ZCBmcm9tIHRoZSBzbG90IGFzIGl0IHJlcXVpcmVzIHdhbF9sZXZlbCBhdCBsZWFzdCBsb2dp Y2FsIG9uIHRoZSBwcmltYXJ5IHNlcnZlcgogY2hlY2tfcGdfcmVjdmxvZ2ljYWxfc3RkZXJy KCRoYW5kbGUsICJsb2dpY2FsIGRlY29kaW5nIG9uIHN0YW5kYnkgcmVxdWlyZXMgd2FsX2xl dmVsIHRvIGJlIGF0IGxlYXN0IGxvZ2ljYWwgb24gdGhlIHByaW1hcnkgc2VydmVyIik7CiAK QEAgLTYzNywyMSArNTkyLDIyIEBAIHdhbF9sZXZlbCA9ICdsb2dpY2FsJwogJG5vZGVfcHJp bWFyeS0+cmVzdGFydDsKICRub2RlX3ByaW1hcnktPndhaXRfZm9yX3JlcGxheV9jYXRjaHVw KCRub2RlX3N0YW5kYnkpOwogCi0kaGFuZGxlID0gbWFrZV9zbG90X2FjdGl2ZSgkbm9kZV9z dGFuZGJ5LCAwLCBcJHN0ZG91dCwgXCRzdGRlcnIpOworJGhhbmRsZSA9IG1ha2Vfc2xvdF9h Y3RpdmUoJG5vZGVfc3RhbmRieSwgJ3dhbF9sZXZlbF8nLCAwLCBcJHN0ZG91dCwgXCRzdGRl cnIpOwogIyBhcyB0aGUgc2xvdCBoYXMgYmVlbiBpbnZhbGlkYXRlZCB3ZSBzaG91bGQgbm90 IGJlIGFibGUgdG8gcmVhZAotY2hlY2tfcGdfcmVjdmxvZ2ljYWxfc3RkZXJyKCRoYW5kbGUs ICJjYW5ub3QgcmVhZCBmcm9tIGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdCBcImFjdGl2ZXNs b3RcIiIpOworY2hlY2tfcGdfcmVjdmxvZ2ljYWxfc3RkZXJyKCRoYW5kbGUsICJjYW5ub3Qg cmVhZCBmcm9tIGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdCBcIndhbF9sZXZlbF9hY3RpdmVz bG90XCIiKTsKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKICMgRFJPUCBEQVRBQkFTRSBzaG91bGQgZHJvcHMgaXQncyBzbG90cywgaW5j bHVkaW5nIGFjdGl2ZSBzbG90cy4KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCiAKICMgZHJvcCB0aGUgbG9naWNhbCBzbG90cwotZHJvcF9s b2dpY2FsX3Nsb3RzKCk7Citkcm9wX2xvZ2ljYWxfc2xvdHMoJ3dhbF9sZXZlbF8nKTsKIAog IyBjcmVhdGUgdGhlIGxvZ2ljYWwgc2xvdHMKLWNyZWF0ZV9sb2dpY2FsX3Nsb3RzKCRub2Rl X3N0YW5kYnkpOworY3JlYXRlX2xvZ2ljYWxfc2xvdHMoJG5vZGVfc3RhbmRieSwgJ2Ryb3Bf ZGJfJyk7CisKKyRoYW5kbGUgPSBtYWtlX3Nsb3RfYWN0aXZlKCRub2RlX3N0YW5kYnksICdk cm9wX2RiXycsIDEsIFwkc3Rkb3V0LCBcJHN0ZGVycik7CiAKLSRoYW5kbGUgPSBtYWtlX3Ns b3RfYWN0aXZlKCRub2RlX3N0YW5kYnksIDEsIFwkc3Rkb3V0LCBcJHN0ZGVycik7CiAjIENy ZWF0ZSBhIHNsb3Qgb24gYSBkYXRhYmFzZSB0aGF0IHdvdWxkIG5vdCBiZSBkcm9wcGVkLiBU aGlzIHNsb3Qgc2hvdWxkIG5vdAogIyBnZXQgZHJvcHBlZC4KICRub2RlX3N0YW5kYnktPmNy ZWF0ZV9sb2dpY2FsX3Nsb3Rfb25fc3RhbmRieSgkbm9kZV9wcmltYXJ5LCAnb3RoZXJzbG90 JywgJ3Bvc3RncmVzJyk7CkBAIC02NjUsNyArNjIxLDcgQEAgaXMoJG5vZGVfc3RhbmRieS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJcVtTRUxFQ1QgRVhJU1RTKFNFTEVDVCAxIEZST00g cGdfZGF0YWJhc2UgV0hFUkUgZGF0bmFtZSA9ICd0ZXN0ZGInKV0pLCAnZicsCiAJJ2RhdGFi YXNlIGRyb3BwZWQgb24gc3RhbmRieScpOwogCi1jaGVja19zbG90c19kcm9wcGVkKCRoYW5k bGUpOworY2hlY2tfc2xvdHNfZHJvcHBlZCgnZHJvcF9kYicsICRoYW5kbGUpOwogCiBpcygk bm9kZV9zdGFuZGJ5LT5zbG90KCdvdGhlcnNsb3QnKS0+eydzbG90X3R5cGUnfSwgJ2xvZ2lj YWwnLAogCSdvdGhlcnNsb3Qgb24gc3RhbmRieSBub3QgZHJvcHBlZCcpOwpAQCAtNjg0LDE0 ICs2NDAsMTQgQEAgJG5vZGVfcHJpbWFyeS0+cHNxbCgncG9zdGdyZXMnLCBxW0NSRUFURSBE QVRBQkFTRSB0ZXN0ZGJdKTsKICRub2RlX3ByaW1hcnktPnNhZmVfcHNxbCgndGVzdGRiJywg cXFbQ1JFQVRFIFRBQkxFIGRlY29kaW5nX3Rlc3QoeCBpbnRlZ2VyLCB5IHRleHQpO10pOwog CiAjIGNyZWF0ZSB0aGUgbG9naWNhbCBzbG90cwotY3JlYXRlX2xvZ2ljYWxfc2xvdHMoJG5v ZGVfc3RhbmRieSk7CitjcmVhdGVfbG9naWNhbF9zbG90cygkbm9kZV9zdGFuZGJ5LCAncHJv bW90aW9uXycpOwogCiAjIGNyZWF0ZSB0aGUgbG9naWNhbCBzbG90cyBvbiB0aGUgY2FzY2Fk aW5nIHN0YW5kYnkgdG9vCi1jcmVhdGVfbG9naWNhbF9zbG90cygkbm9kZV9jYXNjYWRpbmdf c3RhbmRieSk7CitjcmVhdGVfbG9naWNhbF9zbG90cygkbm9kZV9jYXNjYWRpbmdfc3RhbmRi eSwgJ3Byb21vdGlvbl8nKTsKIAogIyBNYWtlIHNsb3RzIGFjdGl2ZXMKLSRoYW5kbGUgPSBt YWtlX3Nsb3RfYWN0aXZlKCRub2RlX3N0YW5kYnksIDEsIFwkc3Rkb3V0LCBcJHN0ZGVycik7 Ci1teSAkY2FzY2FkaW5nX2hhbmRsZSA9IG1ha2Vfc2xvdF9hY3RpdmUoJG5vZGVfY2FzY2Fk aW5nX3N0YW5kYnksIDEsIFwkY2FzY2FkaW5nX3N0ZG91dCwgXCRjYXNjYWRpbmdfc3RkZXJy KTsKKyRoYW5kbGUgPSBtYWtlX3Nsb3RfYWN0aXZlKCRub2RlX3N0YW5kYnksICdwcm9tb3Rp b25fJywgMSwgXCRzdGRvdXQsIFwkc3RkZXJyKTsKK215ICRjYXNjYWRpbmdfaGFuZGxlID0g bWFrZV9zbG90X2FjdGl2ZSgkbm9kZV9jYXNjYWRpbmdfc3RhbmRieSwgJ3Byb21vdGlvbl8n LCAxLCBcJGNhc2NhZGluZ19zdGRvdXQsIFwkY2FzY2FkaW5nX3N0ZGVycik7CiAKICMgSW5z ZXJ0IHNvbWUgcm93cyBiZWZvcmUgdGhlIHByb21vdGlvbgogJG5vZGVfcHJpbWFyeS0+c2Fm ZV9wc3FsKCd0ZXN0ZGInLApAQCAtNzI3LDcgKzY4Myw3IEBAIENPTU1JVH07CiAKICMgY2hl Y2sgdGhhdCB3ZSBhcmUgZGVjb2RpbmcgcHJlIGFuZCBwb3N0IHByb21vdGlvbiBpbnNlcnRl ZCByb3dzCiAkc3Rkb3V0X3NxbCA9ICRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgndGVzdGRi JywKLQlxcVtTRUxFQ1QgZGF0YSBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9wZWVrX2NoYW5nZXMo J2luYWN0aXZlc2xvdCcsIE5VTEwsIE5VTEwsICdpbmNsdWRlLXhpZHMnLCAnMCcsICdza2lw LWVtcHR5LXhhY3RzJywgJzEnKTtdCisJcXFbU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2Fs X3Nsb3RfcGVla19jaGFuZ2VzKCdwcm9tb3Rpb25faW5hY3RpdmVzbG90JywgTlVMTCwgTlVM TCwgJ2luY2x1ZGUteGlkcycsICcwJywgJ3NraXAtZW1wdHkteGFjdHMnLCAnMScpO10KICk7 CiAKIGlzKCRzdGRvdXRfc3FsLCAkZXhwZWN0ZWQsICdnb3QgZXhwZWN0ZWQgb3V0cHV0IGZy b20gU1FMIGRlY29kaW5nIHNlc3Npb24gb24gcHJvbW90ZWQgc3RhbmRieScpOwpAQCAtNzQ2 LDcgKzcwMiw3IEBAIGlzKCRzdGRvdXQsICRleHBlY3RlZCwKIAogIyBjaGVjayB0aGF0IHdl IGFyZSBkZWNvZGluZyBwcmUgYW5kIHBvc3QgcHJvbW90aW9uIGluc2VydGVkIHJvd3Mgb24g dGhlIGNhc2NhZGluZyBzdGFuZGJ5CiAkc3Rkb3V0X3NxbCA9ICRub2RlX2Nhc2NhZGluZ19z dGFuZGJ5LT5zYWZlX3BzcWwoJ3Rlc3RkYicsCi0JcXFbU0VMRUNUIGRhdGEgRlJPTSBwZ19s b2dpY2FsX3Nsb3RfcGVla19jaGFuZ2VzKCdpbmFjdGl2ZXNsb3QnLCBOVUxMLCBOVUxMLCAn aW5jbHVkZS14aWRzJywgJzAnLCAnc2tpcC1lbXB0eS14YWN0cycsICcxJyk7XQorCXFxW1NF TEVDVCBkYXRhIEZST00gcGdfbG9naWNhbF9zbG90X3BlZWtfY2hhbmdlcygncHJvbW90aW9u X2luYWN0aXZlc2xvdCcsIE5VTEwsIE5VTEwsICdpbmNsdWRlLXhpZHMnLCAnMCcsICdza2lw LWVtcHR5LXhhY3RzJywgJzEnKTtdCiApOwogCiBpcygkc3Rkb3V0X3NxbCwgJGV4cGVjdGVk LCAnZ290IGV4cGVjdGVkIG91dHB1dCBmcm9tIFNRTCBkZWNvZGluZyBzZXNzaW9uIG9uIGNh c2NhZGluZyBzdGFuZGJ5Jyk7Cg== --------------5s9kHaky1oIhUgmyEzJJIa9p--