Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uts61-00FFvt-Fq for pgsql-hackers@arkaria.postgresql.org; Wed, 03 Sep 2025 18:20:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uts5z-00AqYD-CP for pgsql-hackers@arkaria.postgresql.org; Wed, 03 Sep 2025 18:20:35 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uts5y-00AqY3-JS for pgsql-hackers@lists.postgresql.org; Wed, 03 Sep 2025 18:20:35 +0000 Received: from mail-vk1-xa2e.google.com ([2607:f8b0:4864:20::a2e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uts5x-000N9s-09 for pgsql-hackers@postgresql.org; Wed, 03 Sep 2025 18:20:34 +0000 Received: by mail-vk1-xa2e.google.com with SMTP id 71dfb90a1353d-544a2339775so87011e0c.0 for ; Wed, 03 Sep 2025 11:20:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756923632; x=1757528432; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=2goj0Pl7TgzMRnPmS84dy0KZKjwBh9/xztgE+knAqC4=; b=KS493ATEOf6DvDoxt+iRjKP5MliDD1mp/0duVG2FSFl3pwnPigHQDNydKmTC6ShQod xIdQjr30itUVInvf4KhgYUpz70qguVPYGZeMvJ7C3WcPTxMix7CHZ+2dJZEfbQxNP9X8 MlXz6jEi1a5io1RVam6YUG5XAUXZiKafBqmCXOJkmI5JtmQwXuhehx5u/yScrQ3H/aKE pvdxwpjjOc/zajmg/Y12r39U18khZ7Z34A9xiSL8Mq9D9+dRqeSMD5mICMmFHzjOaNuD 0oA/9zCAfJpDlZmQ/WpqLNYTuic9jkusuGufKyu7/nu51g398xt9SUYq1QKrWTI5gpyZ PpyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756923632; x=1757528432; 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=2goj0Pl7TgzMRnPmS84dy0KZKjwBh9/xztgE+knAqC4=; b=hzeszp1+dG/qsFn0Ip2ItZUbsQBm9pQGN/wu8x6V0eCyzd/iKFQjEs5vCb+Zg2wtCg gYVVArfDQVd13TTbB72YSpSxKyPlhwt0xqnixl1NpqvWGpRT0aCNKxuljGit6+v22zS8 UiFxwp2S7eZgYYqANgyAoSmivNbS3EglFGcTXvSyy4M46MHlVsyC4OHbnv4kQr0n6OAH T9PQ/P1HYV5EIKhp9iRTpSO1Xhz5LWEh93iet6dvqHXmFpP0M5ZrEmq46/pF+J4PNNMb 5RlHJGpdaTWEixQT+Lmo3cYIWxBn7VoG/lG3RQtJ/7lWW5VqhtjYvkjHZP0NR7LjCAe7 7S2A== X-Forwarded-Encrypted: i=1; AJvYcCVBQMmtZ8KOGp7GD4te57Z1jOEtL7N93fce4B+PDJdtI8KQ84k5zcWrBs/HrXabtx/VJdYe5BQ3COZSf2wt@postgresql.org X-Gm-Message-State: AOJu0Yw6/HnPoRUEp9oUcwYSo3PSrUo9rIoYEcQXeM7/RVdX7lrckmnk r3gt58Azy6CdbCa4dWlU9SiW/yARAkNvdFW5sBwnofGDLxmioOXoMITlECSFkrH1azUH32cqRCl arWhQEe6yr0ndpBqI0j6MdOGVEf9KxnA= X-Gm-Gg: ASbGnctSdganmlB+rROFJd5ajuptF2k6EDf87M5qVjwFKcw3Ta02Di7oEoDygFmVJlU vjUA3JNHjj+wF7JxjJqrKQRlmPD0Vn3BPTBiDkjvFA2BJVdJpfjz8b7JFtZZzYLx6cWhJrGRAd6 TeyfmaPmBJRvvzK03rlAmrJ5Ewm3VJX01IKYV42x5rrqU7AackcVJiiaVtfh+dcOYfWvZo//g6d ZP8493X3+n/hfdSmg== X-Google-Smtp-Source: AGHT+IGZ7a2fz3X7YPj9TDGBI/RzF/oe1k8UZXyXxRU+2U5d3pztFm3lUnUZk9424yDhPvDanMmWR9CnvXi/Dt1srqw= X-Received: by 2002:a05:6122:1350:b0:539:52d1:1f65 with SMTP id 71dfb90a1353d-544a0258219mr4928656e0c.9.1756923632069; Wed, 03 Sep 2025 11:20:32 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Mihail Nikalayeu Date: Wed, 3 Sep 2025 20:20:21 +0200 X-Gm-Features: Ac12FXyVESmEwHmYMeogSVdou_fSMVEsw1OLc-LgHO3C6K9-U30S4-g4GqVle6c Message-ID: Subject: Re: [BUG?] check_exclusion_or_unique_constraint false negative To: Amit Kapila Cc: "Zhijie Hou (Fujitsu)" , Peter Geoghegan , "Hayato Kuroda (Fujitsu)" , PostgreSQL Hackers , Andres Freund , peter@eisentraut.org Content-Type: multipart/mixed; boundary="000000000000fcd971063de9a8b5" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000fcd971063de9a8b5 Content-Type: multipart/alternative; boundary="000000000000fcd971063de9a8b3" --000000000000fcd971063de9a8b3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hello, Amit! > Now, I > would like to know the opinion of others who were involved in the > initial commit, so added Peter E. to see what he thinks of the same. Peter answered in [0]: > I don=E2=80=99t remember. I was just the committer. I=E2=80=99ve attached a new version of the proposed solution. The first commit includes tests, some README updates, and an additional pgbench test that reproduces the issue without explicitly simulating the wait/resume race. This last test is heavy and isn't intended to be committed. Instead of adding extra locking in btree, a more lightweight approach is used: since we already call GetLatestSnapshot before table_tuple_lock, we can simply call it before each scan attempt and use that snapshot for the scan. As a result: * MVCC scan will not miss updated tuples, while DirtyScan may * in both cases, table_tuple_lock will wait for the updating transaction to commit before retrying * MVCC scan cannot see not-yet-committed new rows, while DirtyScan can. However, this does not provide any stronger guarantee: in the case of INSERT vs INSERT, two parallel inserts are still possible. DirtyScan only slightly reduces the probability, but if the scan does not find the row, there is still no guarantee that it won=E2=80=99t be inserted immediately afterward. Therefore, the MVCC version appears to provide the same guarantees, without missing tuples, and with the same performance. Best regards, Mikhail. [0]: https://discord.com/channels/1258108670710124574/1407753138991009913/141130= 3541900841090 --000000000000fcd971063de9a8b3 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello, Amit!

> Now, I
> would like to know the opinion of others who were involved in the
> initial commit, so added Peter E. to see what he thinks of the same.
Peter answered in [0]:
> I don=E2=80=99t remember. I was just the committer.

I=E2=80=99ve attached a new version of the proposed solution.
The first commit includes tests, some README updates, and an
additional pgbench test that reproduces the issue without explicitly
simulating the wait/resume race. This last test is heavy and isn't
intended to be committed.

Instead of adding extra locking in btree, a more lightweight approach
is used: since we already call GetLatestSnapshot before
table_tuple_lock, we can simply call it before each scan attempt and
use that snapshot for the scan.

As a result:
* MVCC scan will not miss updated tuples, while DirtyScan may
* in both cases, table_tuple_lock will wait for the updating
transaction to commit before retrying
* MVCC scan cannot see not-yet-committed new rows, while DirtyScan
can. However, this does not provide any stronger guarantee: in the
case of INSERT vs INSERT, two parallel inserts are still possible.
DirtyScan only slightly reduces the probability, but if the scan does
not find the row, there is still no guarantee that it won=E2=80=99t be
inserted immediately afterward.

Therefore, the MVCC version appears to provide the same guarantees,
without missing tuples, and with the same performance.

Best regards,
Mikhail.

[0]: https://discord.com/channels/1258108670710124574/1407753138991009913/14= 11303541900841090
--000000000000fcd971063de9a8b3-- --000000000000fcd971063de9a8b5 Content-Type: application/x-patch; name="v11-0002-Fix-logical-replication-conflict-detection-durin.patch" Content-Disposition: attachment; filename="v11-0002-Fix-logical-replication-conflict-detection-durin.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mf48k6590 RnJvbSA2MGRjYTc0M2JmNzU1YjA2OGNjZGZmNGNiMmYzNTQ2NzE2N2Y1OTJhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBua2V5IDxua2V5QHRvbG9rYS5haT4KRGF0ZTogV2VkLCAzIFNl cCAyMDI1IDE5OjA4OjU1ICswMjAwClN1YmplY3Q6IFtQQVRDSCB2MTEgMi8yXSBGaXggbG9naWNh bCByZXBsaWNhdGlvbiBjb25mbGljdCBkZXRlY3Rpb24gZHVyaW5nCiB0dXBsZSBsb29rdXAKClNO QVBTSE9UX0RJUlRZIHNjYW5zIGNvdWxkIG1pc3MgY29uZmxpY3QgZGV0ZWN0aW9uIHdpdGggY29u Y3VycmVudCB0cmFuc2FjdGlvbnMgZHVyaW5nIGxvZ2ljYWwgcmVwbGljYXRpb24uClJlcGxhY2Ug U05BUFNIT1RfRElSVFkgc2NhbiB3aXRoIHRoZSBHZXRMYXRlc3RTbmFwc2hvdCBpbiBSZWxhdGlv bkZpbmRSZXBsVHVwbGVCeUluZGV4IGFuZCBSZWxhdGlvbkZpbmRSZXBsVHVwbGVTZXEuCi0tLQog c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgfCA2MyArKysrKysrKy0tLS0t LS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDQ1IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlv bi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKaW5kZXggYjQwOWQ0 ZWNiZjUuLjBkZTQwYWVjNzMzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj UmVwbGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24u YwpAQCAtMTg2LDggKzE4Niw2IEBAIFJlbGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgoUmVsYXRp b24gcmVsLCBPaWQgaWR4b2lkLAogCVNjYW5LZXlEYXRhIHNrZXlbSU5ERVhfTUFYX0tFWVNdOwog CWludAkJCXNrZXlfYXR0b2ZmOwogCUluZGV4U2NhbkRlc2Mgc2NhbjsKLQlTbmFwc2hvdERhdGEg c25hcDsKLQlUcmFuc2FjdGlvbklkIHh3YWl0OwogCVJlbGF0aW9uCWlkeHJlbDsKIAlib29sCQlm b3VuZDsKIAlUeXBlQ2FjaGVFbnRyeSAqKmVxID0gTlVMTDsKQEAgLTE5OCwxNyArMTk2LDE3IEBA IFJlbGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgoUmVsYXRpb24gcmVsLCBPaWQgaWR4b2lkLAog CiAJaXNJZHhTYWZlVG9Ta2lwRHVwbGljYXRlcyA9IChHZXRSZWxhdGlvbklkZW50aXR5T3JQSyhy ZWwpID09IGlkeG9pZCk7CiAKLQlJbml0RGlydHlTbmFwc2hvdChzbmFwKTsKLQogCS8qIEJ1aWxk IHNjYW4ga2V5LiAqLwogCXNrZXlfYXR0b2ZmID0gYnVpbGRfcmVwbGluZGV4X3NjYW5fa2V5KHNr ZXksIHJlbCwgaWR4cmVsLCBzZWFyY2hzbG90KTsKIAotCS8qIFN0YXJ0IGFuIGluZGV4IHNjYW4u ICovCi0Jc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwgJnNuYXAsIE5VTEwsIHNr ZXlfYXR0b2ZmLCAwKTsKKwkvKiBTdGFydCBhbiBpbmRleCBzY2FuLiBTbmFwc2hvdEFueSB3aWxs IGJlIHJlcGxhY2VkIGJlbG93LiAqLworCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhy ZWwsIFNuYXBzaG90QW55LCBOVUxMLCBza2V5X2F0dG9mZiwgMCk7CiAKIHJldHJ5OgogCWZvdW5k ID0gZmFsc2U7Ci0KKwlQdXNoQWN0aXZlU25hcHNob3QoR2V0TGF0ZXN0U25hcHNob3QoKSk7CisJ LyogVXBkYXRlIHRoZSBhY3R1YWwgc2NhbiBzbmFwc2hvdCBlYWNoIHJldHJ5ICovCisJc2Nhbi0+ eHNfc25hcHNob3QgPSBHZXRBY3RpdmVTbmFwc2hvdCgpOwogCWluZGV4X3Jlc2NhbihzY2FuLCBz a2V5LCBza2V5X2F0dG9mZiwgTlVMTCwgMCk7CiAKIAkvKiBUcnkgdG8gZmluZCB0aGUgdHVwbGUg Ki8KQEAgLTIyOSwxOSArMjI3LDYgQEAgcmV0cnk6CiAKIAkJRXhlY01hdGVyaWFsaXplU2xvdChv dXRzbG90KTsKIAotCQl4d2FpdCA9IFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHNuYXAueG1pbikgPwot CQkJc25hcC54bWluIDogc25hcC54bWF4OwotCi0JCS8qCi0JCSAqIElmIHRoZSB0dXBsZSBpcyBs b2NrZWQsIHdhaXQgZm9yIGxvY2tpbmcgdHJhbnNhY3Rpb24gdG8gZmluaXNoIGFuZAotCQkgKiBy ZXRyeS4KLQkJICovCi0JCWlmIChUcmFuc2FjdGlvbklkSXNWYWxpZCh4d2FpdCkpCi0JCXsKLQkJ CVhhY3RMb2NrVGFibGVXYWl0KHh3YWl0LCBOVUxMLCBOVUxMLCBYTFRXX05vbmUpOwotCQkJZ290 byByZXRyeTsKLQkJfQotCiAJCS8qIEZvdW5kIG91ciB0dXBsZSBhbmQgaXQncyBub3QgbG9ja2Vk ICovCiAJCWZvdW5kID0gdHJ1ZTsKIAkJYnJlYWs7CkBAIC0yNTMsOCArMjM4LDYgQEAgcmV0cnk6 CiAJCVRNX0ZhaWx1cmVEYXRhIHRtZmQ7CiAJCVRNX1Jlc3VsdAlyZXM7CiAKLQkJUHVzaEFjdGl2 ZVNuYXBzaG90KEdldExhdGVzdFNuYXBzaG90KCkpOwotCiAJCXJlcyA9IHRhYmxlX3R1cGxlX2xv Y2socmVsLCAmKG91dHNsb3QtPnR0c190aWQpLCBHZXRBY3RpdmVTbmFwc2hvdCgpLAogCQkJCQkJ CSAgIG91dHNsb3QsCiAJCQkJCQkJICAgR2V0Q3VycmVudENvbW1hbmRJZChmYWxzZSksCkBAIC0y NjMsMTMgKzI0NiwxNSBAQCByZXRyeToKIAkJCQkJCQkgICAwIC8qIGRvbid0IGZvbGxvdyB1cGRh dGVzICovICwKIAkJCQkJCQkgICAmdG1mZCk7CiAKLQkJUG9wQWN0aXZlU25hcHNob3QoKTsKLQog CQlpZiAoc2hvdWxkX3JlZmV0Y2hfdHVwbGUocmVzLCAmdG1mZCkpCisJCXsKKwkJCVBvcEFjdGl2 ZVNuYXBzaG90KCk7CiAJCQlnb3RvIHJldHJ5OworCQl9CiAJfQogCiAJaW5kZXhfZW5kc2Nhbihz Y2FuKTsKKwlQb3BBY3RpdmVTbmFwc2hvdCgpOwogCiAJLyogRG9uJ3QgcmVsZWFzZSBsb2NrIHVu dGlsIGNvbW1pdC4gKi8KIAlpbmRleF9jbG9zZShpZHhyZWwsIE5vTG9jayk7CkBAIC0zNzAsOSAr MzU1LDcgQEAgUmVsYXRpb25GaW5kUmVwbFR1cGxlU2VxKFJlbGF0aW9uIHJlbCwgTG9ja1R1cGxl TW9kZSBsb2NrbW9kZSwKIHsKIAlUdXBsZVRhYmxlU2xvdCAqc2NhbnNsb3Q7CiAJVGFibGVTY2Fu RGVzYyBzY2FuOwotCVNuYXBzaG90RGF0YSBzbmFwOwogCVR5cGVDYWNoZUVudHJ5ICoqZXE7Ci0J VHJhbnNhY3Rpb25JZCB4d2FpdDsKIAlib29sCQlmb3VuZDsKIAlUdXBsZURlc2MJZGVzYyBQR19V U0VEX0ZPUl9BU1NFUlRTX09OTFkgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CiAKQEAgLTM4MCwx MyArMzYzLDE1IEBAIFJlbGF0aW9uRmluZFJlcGxUdXBsZVNlcShSZWxhdGlvbiByZWwsIExvY2tU dXBsZU1vZGUgbG9ja21vZGUsCiAKIAllcSA9IHBhbGxvYzAoc2l6ZW9mKCplcSkgKiBvdXRzbG90 LT50dHNfdHVwbGVEZXNjcmlwdG9yLT5uYXR0cyk7CiAKLQkvKiBTdGFydCBhIGhlYXAgc2Nhbi4g Ki8KLQlJbml0RGlydHlTbmFwc2hvdChzbmFwKTsKLQlzY2FuID0gdGFibGVfYmVnaW5zY2FuKHJl bCwgJnNuYXAsIDAsIE5VTEwpOworCS8qIFN0YXJ0IGEgaGVhcCBzY2FuLiBTbmFwc2hvdEFueSB3 aWxsIGJlIHJlcGxhY2VkIGJlbG93LiAqLworCXNjYW4gPSB0YWJsZV9iZWdpbnNjYW4ocmVsLCBT bmFwc2hvdEFueSwgMCwgTlVMTCk7CiAJc2NhbnNsb3QgPSB0YWJsZV9zbG90X2NyZWF0ZShyZWws IE5VTEwpOwogCiByZXRyeToKIAlmb3VuZCA9IGZhbHNlOworCVB1c2hBY3RpdmVTbmFwc2hvdChH ZXRMYXRlc3RTbmFwc2hvdCgpKTsKKwkvKiBVcGRhdGUgdGhlIGFjdHVhbCBzY2FuIHNuYXBzaG90 IGVhY2ggcmV0cnkgKi8KKwlzY2FuLT5yc19zbmFwc2hvdCA9IEdldEFjdGl2ZVNuYXBzaG90KCk7 CiAKIAl0YWJsZV9yZXNjYW4oc2NhbiwgTlVMTCk7CiAKQEAgLTM5OSwxOSArMzg0LDYgQEAgcmV0 cnk6CiAJCWZvdW5kID0gdHJ1ZTsKIAkJRXhlY0NvcHlTbG90KG91dHNsb3QsIHNjYW5zbG90KTsK IAotCQl4d2FpdCA9IFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHNuYXAueG1pbikgPwotCQkJc25hcC54 bWluIDogc25hcC54bWF4OwotCi0JCS8qCi0JCSAqIElmIHRoZSB0dXBsZSBpcyBsb2NrZWQsIHdh aXQgZm9yIGxvY2tpbmcgdHJhbnNhY3Rpb24gdG8gZmluaXNoIGFuZAotCQkgKiByZXRyeS4KLQkJ ICovCi0JCWlmIChUcmFuc2FjdGlvbklkSXNWYWxpZCh4d2FpdCkpCi0JCXsKLQkJCVhhY3RMb2Nr VGFibGVXYWl0KHh3YWl0LCBOVUxMLCBOVUxMLCBYTFRXX05vbmUpOwotCQkJZ290byByZXRyeTsK LQkJfQotCiAJCS8qIEZvdW5kIG91ciB0dXBsZSBhbmQgaXQncyBub3QgbG9ja2VkICovCiAJCWJy ZWFrOwogCX0KQEAgLTQyMiw4ICszOTQsNiBAQCByZXRyeToKIAkJVE1fRmFpbHVyZURhdGEgdG1m ZDsKIAkJVE1fUmVzdWx0CXJlczsKIAotCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0TGF0ZXN0U25h cHNob3QoKSk7Ci0KIAkJcmVzID0gdGFibGVfdHVwbGVfbG9jayhyZWwsICYob3V0c2xvdC0+dHRz X3RpZCksIEdldEFjdGl2ZVNuYXBzaG90KCksCiAJCQkJCQkJICAgb3V0c2xvdCwKIAkJCQkJCQkg ICBHZXRDdXJyZW50Q29tbWFuZElkKGZhbHNlKSwKQEAgLTQzMiwxMyArNDAyLDE2IEBAIHJldHJ5 OgogCQkJCQkJCSAgIDAgLyogZG9uJ3QgZm9sbG93IHVwZGF0ZXMgKi8gLAogCQkJCQkJCSAgICZ0 bWZkKTsKIAotCQlQb3BBY3RpdmVTbmFwc2hvdCgpOwogCiAJCWlmIChzaG91bGRfcmVmZXRjaF90 dXBsZShyZXMsICZ0bWZkKSkKKwkJeworCQkJUG9wQWN0aXZlU25hcHNob3QoKTsKIAkJCWdvdG8g cmV0cnk7CisJCX0KIAl9CiAKIAl0YWJsZV9lbmRzY2FuKHNjYW4pOworCVBvcEFjdGl2ZVNuYXBz aG90KCk7CiAJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChzY2Fuc2xvdCk7CiAKIAlyZXR1 cm4gZm91bmQ7Ci0tIAoyLjQ4LjEKCg== --000000000000fcd971063de9a8b5 Content-Type: application/x-patch; name="v11-0001-This-patch-introduces-new-injection-points-and-T.patch" Content-Disposition: attachment; filename="v11-0001-This-patch-introduces-new-injection-points-and-T.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mf48k65g1 RnJvbSBlNzMwNDZhMGRhNzIxMzMzMmEzNzAxMTIzZTA0MGRlMWZkM2YyZjU0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBua2V5IDxtaWNoYWlsLm5pa29sYWV2QGdtYWlsLmNvbT4KRGF0 ZTogU2F0LCAyMyBOb3YgMjAyNCAxMzoyNToxMSArMDEwMApTdWJqZWN0OiBbUEFUQ0ggdjExIDEv Ml0gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBpbmplY3Rpb24gcG9pbnRzIGFuZCBUQVAKIHRl c3RzIHRvIHJlcHJvZHVjZSBhbmQgdmVyaWZ5IGNvbmZsaWN0IGRldGVjdGlvbiBpc3N1ZXMgdGhh dCBhcmlzZSBkdXJpbmcKIFNOQVBTSE9UX0RJUlRZIGluZGV4IHNjYW5zIGluIGxvZ2ljYWwgcmVw bGljYXRpb24uCgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgICAgICAg ICAgICB8ICAgOSArKwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUgICAgICAgICAg ICAgIHwgICA5ICsrCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyAgICAgICAg ICAgfCAgIDcgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgICAg ICB8ICAgNCArCiBzcmMvaW5jbHVkZS91dGlscy9zbmFwc2hvdC5oICAgICAgICAgICAgICAgICAg fCAgMTQgKysKIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi9NYWtlZmlsZSAgICAgICAgICAgICAgICB8 ICAgMSArCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vbWVzb24uYnVpbGQgICAgICAgICAgICAgfCAg IDkgKy0KIC4uLi9zdWJzY3JpcHRpb24vdC8wMzZfZGVsZXRlX21pc3NpbmdfcmFjZS5wbCB8IDEz NyArKysrKysrKysrKysrKysrKwogLi4uL3N1YnNjcmlwdGlvbi90LzAzN191cGRhdGVfbWlzc2lu Z19yYWNlLnBsIHwgMTM5ICsrKysrKysrKysrKysrKysrCiAuLi4vdC8wMzhfdXBkYXRlX21pc3Np bmdfd2l0aF9yZXRhaW4ucGwgICAgICAgfCAxNDEgKysrKysrKysrKysrKysrKysrCiAuLi4vdC8w MzlfdXBkYXRlX21pc3Npbmdfc2ltdWxhdGlvbi5wbCAgICAgICAgfCAxMjMgKysrKysrKysrKysr KysrCiAxMSBmaWxlcyBjaGFuZ2VkLCA1OTEgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzZfZGVsZXRlX21p c3NpbmdfcmFjZS5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAzN191cGRhdGVfbWlzc2luZ19yYWNlLnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv c3Vic2NyaXB0aW9uL3QvMDM4X3VwZGF0ZV9taXNzaW5nX3dpdGhfcmV0YWluLnBsCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM5X3VwZGF0ZV9taXNzaW5nX3Np bXVsYXRpb24ucGwKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhh bS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwppbmRleCA4NmQxMWY0ZWM3 OS4uYTUwM2ZhMDJhYzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRl eGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwpAQCAtNTIsMTEg KzUyLDEzIEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAibm9kZXMv ZXhlY25vZGVzLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24v bG9naWNhbHdvcmtlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvcnVsZXV0aWxzLmgiCiAjaW5jbHVk ZSAidXRpbHMvc25hcG1nci5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisjaW5jbHVk ZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzUxLDYgKzc1 MywxMyBAQCBpbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcmVjdGlvbiwgVHVwbGVUYWJsZVNsb3QgKgogCQkgKiB0aGUgaW5kZXguCiAJCSAqLwog CQlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2FuLT54c19oZWFwdGlkKSk7CisjaWZkZWYg VVNFX0lOSkVDVElPTl9QT0lOVFMKKwkJaWYgKCFJc0NhdGFsb2dSZWxhdGlvbihzY2FuLT5oZWFw UmVsYXRpb24pICYmIElzTG9naWNhbFdvcmtlcigpKQorCQl7CisJCQlJTkpFQ1RJT05fUE9JTlQo ImluZGV4X2dldG5leHRfc2xvdF9iZWZvcmVfZmV0Y2hfYXBwbHlfZGlydHkiLCBOVUxMKTsKKwkJ fQorI2VuZGlmCisKIAkJaWYgKGluZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCkpCiAJCQlyZXR1 cm4gdHJ1ZTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURN RSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCmluZGV4IDUzZDRhNjFkYzNmLi42 MzRhM2QxMGJiMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUKQEAgLTEwMyw2ICsxMDMsMTUg QEAgV2UgYWxzbyByZW1lbWJlciB0aGUgbGVmdC1saW5rLCBhbmQgZm9sbG93IGl0IHdoZW4gdGhl IHNjYW4gbW92ZXMgYmFja3dhcmRzCiAodGhvdWdoIHRoaXMgcmVxdWlyZXMgZXh0cmEgaGFuZGxp bmcgdG8gYWNjb3VudCBmb3IgY29uY3VycmVudCBzcGxpdHMgb2YKIHRoZSBsZWZ0IHNpYmxpbmc7 IHNlZSBkZXRhaWxlZCBtb3ZlLWxlZnQgYWxnb3JpdGhtIGJlbG93KS4KIAorRGVzcGl0ZSB0aGUg ZGVzY3JpYmVkIG1lY2hhbmljcyBpbiBwbGFjZSwgaW5jb25zaXN0ZW50IHJlc3VsdHMgbWF5IHN0 aWxsIG9jY3VyCitkdXJpbmcgbm9uLU1WQ0Mgc2NhbnMgKFNuYXBzaG90RGlydHkgYW5kIFNuYXBz aG90U2VsZikuIFRoaXMgaXNzdWUgY2FuIG9jY3VyIGlmIGEgCitjb25jdXJyZW50IHRyYW5zYWN0 aW9uIGRlbGV0ZXMgYSB0dXBsZSBhbmQgaW5zZXJ0cyBhIG5ldyB0dXBsZSB3aXRoIGEgbmV3IFRJ RCBpbiB0aGUgCitzYW1lIHBhZ2Ugb3IgdG8gdGhlIGxlZnQvcmlnaHQgKGRlcGVuZGluZyBvbiBz Y2FuIGRpcmVjdGlvbikgb2YgY3VycmVudCBzY2FuIHBvc2l0aW9uLgorSWYgdGhlIHNjYW4gaGFz IGFscmVhZHkgdmlzaXRlZCB0aGUgcGFnZSBhbmQgY2FjaGVkIGl0cyBjb250ZW50IGluIHRoZQor YmFja2VuZC1sb2NhbCBzdG9yYWdlLCBpdCBtaWdodCBza2lwIHRoZSBvbGQgdHVwbGUgZHVlIHRv IGRlbGV0aW9uIGFuZCBtaXNzIHRoZSBuZXcgCit0dXBsZSBiZWNhdXNlIHRoZSBzY2FuIGRvZXMg bm90IHJlLXJlYWQgdGhlIHBhZ2UuIE5vdGUgaXQgYWZmZWN0cyBub3Qgb25seSBidHJlZQorc2Nh biBidXQgYWxzbyBhIGhlYXAgc2Nhbi4KKwogSW4gbW9zdCBjYXNlcyB3ZSByZWxlYXNlIG91ciBs b2NrIGFuZCBwaW4gb24gYSBwYWdlIGJlZm9yZSBhdHRlbXB0aW5nCiB0byBhY3F1aXJlIHBpbiBh bmQgbG9jayBvbiB0aGUgcGFnZSB3ZSBhcmUgbW92aW5nIHRvLiAgSW4gYSBmZXcgcGxhY2VzCiBp dCBpcyBuZWNlc3NhcnkgdG8gbG9jayB0aGUgbmV4dCBwYWdlIGJlZm9yZSByZWxlYXNpbmcgdGhl IGN1cnJlbnQgb25lLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4 aW5nLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwppbmRleCBjYTMzYTg1 NDI3OC4uNjFhNTA5N2Y3ODkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJ bmRleGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBAIC0x MTcsNiArMTE3LDcgQEAKICNpbmNsdWRlICJ1dGlscy9tdWx0aXJhbmdldHlwZXMuaCIKICNpbmNs dWRlICJ1dGlscy9yYW5nZXR5cGVzLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgorI2lu Y2x1ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogCiAvKiB3YWl0TW9kZSBhcmd1bWVudCB0 byBjaGVja19leGNsdXNpb25fb3JfdW5pcXVlX2NvbnN0cmFpbnQoKSAqLwogdHlwZWRlZiBlbnVt CkBAIC03ODAsNyArNzgxLDkgQEAgY2hlY2tfZXhjbHVzaW9uX29yX3VuaXF1ZV9jb25zdHJhaW50 KFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LAogCS8qCiAJICogU2VhcmNoIHRoZSB0dXBs ZXMgdGhhdCBhcmUgaW4gdGhlIGluZGV4IGZvciBhbnkgdmlvbGF0aW9ucywgaW5jbHVkaW5nCiAJ ICogdHVwbGVzIHRoYXQgYXJlbid0IHZpc2libGUgeWV0LgotCSAqLworCSAqIFNuYXBzaG90IGRp cnR5IG1heSBtaXNzIHNvbWUgdHVwbGVzIGluIHRoZSBjYXNlIG9mIHBhcmFsbGVsIHVwZGF0ZXMs CisJICogYnV0IGl0IGlzIGFjY2VwdGFibGUgaGVyZS4KKwkqLwogCUluaXREaXJ0eVNuYXBzaG90 KERpcnR5U25hcHNob3QpOwogCiAJZm9yIChpID0gMDsgaSA8IGluZG5rZXlhdHRzOyBpKyspCkBA IC05NDMsNiArOTQ2LDggQEAgcmV0cnk6CiAKIAlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90 KGV4aXN0aW5nX3Nsb3QpOwogCisJaWYgKCFjb25mbGljdCkKKwkJSU5KRUNUSU9OX1BPSU5UKCJj aGVja19leGNsdXNpb25fb3JfdW5pcXVlX2NvbnN0cmFpbnRfbm9fY29uZmxpY3QiLCBOVUxMKTsK IAlyZXR1cm4gIWNvbmZsaWN0OwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93 b3JrZXIuYwppbmRleCAyMmFkOTA1MWRiMy4uYmIzYWFmMjFkNjUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC93b3JrZXIuYwpAQCAtMjcwLDYgKzI3MCw3IEBACiAjaW5jbHVkZSAi dXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvZHluYWhhc2guaCIKICNpbmNsdWRlICJ1dGls cy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKICNpbmNsdWRlICJ1 dGlscy9pbnZhbC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0 aWxzL21lbXV0aWxzLmgiCkBAIC0yOTMyLDcgKzI5MzMsMTAgQEAgYXBwbHlfaGFuZGxlX3VwZGF0 ZV9pbnRlcm5hbChBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRhLAogCQkJY29uZmxpY3R0dXBsZS5v cmlnaW4gIT0gcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbikKIAkJCXR5cGUgPSBDVF9VUERBVEVf REVMRVRFRDsKIAkJZWxzZQorCQl7CisJCQlJTkpFQ1RJT05fUE9JTlQoImFwcGx5X2hhbmRsZV91 cGRhdGVfaW50ZXJuYWxfdXBkYXRlX21pc3NpbmciLCBOVUxMKTsKIAkJCXR5cGUgPSBDVF9VUERB VEVfTUlTU0lORzsKKwkJfQogCiAJCS8qIFN0b3JlIHRoZSBuZXcgdHVwbGUgZm9yIGNvbmZsaWN0 IHJlcG9ydGluZyAqLwogCQlzbG90X3N0b3JlX2RhdGEobmV3c2xvdCwgcmVsbWFwZW50cnksIG5l d3R1cCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9zbmFwc2hvdC5oIGIvc3JjL2lu Y2x1ZGUvdXRpbHMvc25hcHNob3QuaAppbmRleCAwZTU0NmVjMTQ5Ny4uMTg5ZGZkNzExMDMgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3NuYXBzaG90LmgKKysrIGIvc3JjL2luY2x1ZGUv dXRpbHMvc25hcHNob3QuaApAQCAtNTMsNiArNTMsMTMgQEAgdHlwZWRlZiBlbnVtIFNuYXBzaG90 VHlwZQogCSAqIC0gcHJldmlvdXMgY29tbWFuZHMgb2YgdGhpcyB0cmFuc2FjdGlvbgogCSAqIC0g Y2hhbmdlcyBtYWRlIGJ5IHRoZSBjdXJyZW50IGNvbW1hbmQKIAkgKgorCSAqIE5vdGU6IHN1Y2gg YSBzbmFwc2hvdCBtYXkgbWlzcyBhbiBleGlzdGluZyBsb2dpY2FsIHR1cGxlIGluIGNhc2Ugb2YK KwkgKiBwYXJhbGxlbCB1cGRhdGUuCisJICogSWYgYSBuZXcgdmVyc2lvbiBvZiBhIHR1cGxlIGlz IGluc2VydGVkIGludG8gYW4gYWxyZWFkeSBwcm9jZXNzZWQgcGFnZQorCSAqIGJ1dCB0aGUgb2xk IG9uZSBtYXJrZWQgd2l0aCBjb21taXR0ZWQgeG1heCAtIHNuYXBzaG90IHdpbGwgc2tpcCB0aGUg b2xkCisJICogb25lIGFuZCBuZXZlciBtZWV0IHRoZSBuZXcgb25lIGR1cmluZyB0aGF0IHNjYW4g LSByZXN1bHRpbmcgaW4gc2tpcHBpbmcKKwkgKiB0aGF0IHR1cGxlIGF0IGFsbC4KKwkgKgogCSAq IERvZXMgX25vdF8gaW5jbHVkZToKIAkgKiAtIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucyAoYXMg b2YgdGhlIGN1cnJlbnQgaW5zdGFudCkKIAkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04Miw2ICs4 OSwxMyBAQCB0eXBlZGVmIGVudW0gU25hcHNob3RUeXBlCiAJICogdHJhbnNhY3Rpb24gYW5kIGNv bW1pdHRlZC9hYm9ydGVkIHhhY3RzIGFyZSBjb25jZXJuZWQuICBIb3dldmVyLCBpdAogCSAqIGFs c28gaW5jbHVkZXMgdGhlIGVmZmVjdHMgb2Ygb3RoZXIgeGFjdHMgc3RpbGwgaW4gcHJvZ3Jlc3Mu CiAJICoKKwkgKiBOb3RlOiBzdWNoIGEgc25hcHNob3QgbWF5IG1pc3MgYW4gZXhpc3RpbmcgbG9n aWNhbCB0dXBsZSBpbiBjYXNlIG9mCisJICogcGFyYWxsZWwgdXBkYXRlLgorCSAqIElmIGEgbmV3 IHZlcnNpb24gb2YgYSB0dXBsZSBpcyBpbnNlcnRlZCBpbnRvIGFuIGFscmVhZHkgcHJvY2Vzc2Vk IHBhZ2UgYnV0IHRoZQorCSAqIG9sZCBvbmUgbWFya2VkIHdpdGggY29tbWl0dGVkL2luLXByb2dy ZXNzIHhtYXggLSBzbmFwc2hvdCB3aWxsIHNraXAgdGhlIG9sZCBvbmUKKwkgKiBhbmQgbmV2ZXIg bWVldCB0aGUgbmV3IG9uZSBkdXJpbmcgdGhhdCBzY2FuIC0gcmVzdWx0aW5nIGluIHNraXBwaW5n IHRoYXQgdHVwbGUKKwkgKiBhdCBhbGwuCisJICoKIAkgKiBBIHNwZWNpYWwgaGFjayBpcyB0aGF0 IHdoZW4gYSBzbmFwc2hvdCBvZiB0aGlzIHR5cGUgaXMgdXNlZCB0bwogCSAqIGRldGVybWluZSB0 dXBsZSB2aXNpYmlsaXR5LCB0aGUgcGFzc2VkLWluIHNuYXBzaG90IHN0cnVjdCBpcyB1c2VkIGFz IGFuCiAJICogb3V0cHV0IGFyZ3VtZW50IHRvIHJldHVybiB0aGUgeGlkcyBvZiBjb25jdXJyZW50 IHhhY3RzIHRoYXQgYWZmZWN0ZWQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi9N YWtlZmlsZSBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi9NYWtlZmlsZQppbmRleCA1MGI2NWQ4ZjZl YS4uNTFkMjhlY2EwOTEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi9NYWtlZmls ZQorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAg aW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogRVhUUkFfSU5TVEFM TCA9IGNvbnRyaWIvaHN0b3JlCiAKIGV4cG9ydCB3aXRoX2ljdQorZXhwb3J0IGVuYWJsZV9pbmpl Y3Rpb25fcG9pbnRzCiAKIGNoZWNrOgogCSQocHJvdmVfY2hlY2spCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9zdWJzY3JpcHRpb24vbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vbWVz b24uYnVpbGQKaW5kZXggNTg2ZmZiYTQzNGUuLjhiMjRkNzZhMjQ3IDEwMDY0NAotLS0gYS9zcmMv dGVzdC9zdWJzY3JpcHRpb24vbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9u L21lc29uLmJ1aWxkCkBAIC01LDcgKzUsMTAgQEAgdGVzdHMgKz0gewogICAnc2QnOiBtZXNvbi5j dXJyZW50X3NvdXJjZV9kaXIoKSwKICAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwK ICAgJ3RhcCc6IHsKLSAgICAnZW52Jzogeyd3aXRoX2ljdSc6IGljdS5mb3VuZCgpID8gJ3llcycg OiAnbm8nfSwKKyAgICAnZW52JzogeworICAgICAgJ3dpdGhfaWN1JzogaWN1LmZvdW5kKCkgPyAn eWVzJyA6ICdubycsCisgICAgICAnZW5hYmxlX2luamVjdGlvbl9wb2ludHMnOiBnZXRfb3B0aW9u KCdpbmplY3Rpb25fcG9pbnRzJykgPyAneWVzJyA6ICdubycKKyAgICB9LAogICAgICd0ZXN0cyc6 IFsKICAgICAgICd0LzAwMV9yZXBfY2hhbmdlcy5wbCcsCiAgICAgICAndC8wMDJfdHlwZXMucGwn LApAQCAtNDIsNiArNDUsMTAgQEAgdGVzdHMgKz0gewogICAgICAgJ3QvMDMzX3J1bl9hc190YWJs ZV9vd25lci5wbCcsCiAgICAgICAndC8wMzRfdGVtcG9yYWwucGwnLAogICAgICAgJ3QvMDM1X2Nv bmZsaWN0cy5wbCcsCisgICAgICAndC8wMzZfZGVsZXRlX21pc3NpbmdfcmFjZS5wbCcsCisgICAg ICAndC8wMzdfdXBkYXRlX21pc3NpbmdfcmFjZS5wbCcsCisgICAgICAndC8wMzhfdXBkYXRlX21p c3Npbmdfd2l0aF9yZXRhaW4ucGwnLAorICAgICAgJ3QvMDM5X3VwZGF0ZV9taXNzaW5nX3NpbXVs YXRpb24ucGwnLAogICAgICAgJ3QvMTAwX2J1Z3MucGwnLAogICAgIF0sCiAgIH0sCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzZfZGVsZXRlX21pc3NpbmdfcmFjZS5wbCBi L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzNl9kZWxldGVfbWlzc2luZ19yYWNlLnBsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMzE5NTEzZmQ2MAotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzNl9kZWxldGVfbWlzc2luZ19yYWNl LnBsCkBAIC0wLDAgKzEsMTM3IEBACisjIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworIyBUZXN0IHRoZSBjb25mbGljdCBkZXRlY3Rpb24g YW5kIHJlc29sdXRpb24gaW4gbG9naWNhbCByZXBsaWNhdGlvbgordXNlIHN0cmljdDsKK3VzZSB3 YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwor dXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKK2lmICgkRU5W e2VuYWJsZV9pbmplY3Rpb25fcG9pbnRzfSBuZSAneWVzJykKK3sKKwlwbGFuIHNraXBfYWxsID0+ ICdJbmplY3Rpb24gcG9pbnRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBidWlsZCc7Cit9CisKKyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBTZXQgaXQgdG8gMCB0byBtYWtlIHNldCBzdWNj ZXNzOyBUT0RPOiBkZWxldGUgdGhhdCBmb3IgY29tbWl0CitteSAkc2ltdWxhdGVfcmFjZV9jb25k aXRpb24gPSAxOworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU2V0dXAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKKworIyBJbml0aWFsaXplIHB1Ymxpc2hlciBub2RlCitteSAkbm9kZV9wdWJsaXNoZXIg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOworJG5vZGVfcHVi bGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3B1Ymxp c2hlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJcXEodHJhY2tfY29tbWl0X3Rp bWVzdGFtcCA9IG9uKSk7Ciskbm9kZV9wdWJsaXNoZXItPnN0YXJ0OworCisKKyMgQ3JlYXRlIHN1 YnNjcmliZXIgbm9kZSB3aXRoIHRyYWNrX2NvbW1pdF90aW1lc3RhbXAgZW5hYmxlZAorbXkgJG5v ZGVfc3Vic2NyaWJlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3Vic2NyaWJl cicpOworJG5vZGVfc3Vic2NyaWJlci0+aW5pdDsKKyRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9j b25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCXFxKHRyYWNrX2NvbW1pdF90aW1lc3RhbXAgPSBvbikp OworJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKKworIyBDaGVjayBpZiB0aGUgZXh0ZW5zaW9u IGluamVjdGlvbl9wb2ludHMgaXMgYXZhaWxhYmxlLCBhcyBpdCBtYXkgYmUKKyMgcG9zc2libGUg dGhhdCB0aGlzIHNjcmlwdCBpcyBydW4gd2l0aCBpbnN0YWxsY2hlY2ssIHdoZXJlIHRoZSBtb2R1 bGUKKyMgd291bGQgbm90IGJlIGluc3RhbGxlZCBieSBkZWZhdWx0LgoraWYgKCEkbm9kZV9zdWJz Y3JpYmVyLT5jaGVja19leHRlbnNpb24oJ2luamVjdGlvbl9wb2ludHMnKSkKK3sKKwlwbGFuIHNr aXBfYWxsID0+ICdFeHRlbnNpb24gaW5qZWN0aW9uX3BvaW50cyBub3QgaW5zdGFsbGVkJzsKK30K KworIyBDcmVhdGUgdGFibGUgb24gcHVibGlzaGVyCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgKKwkncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgY29uZl90YWIoYSBpbnQgUFJJTUFSWSBr ZXksIGRhdGEgdGV4dCk7Iik7CisKKyMgQ3JlYXRlIHNpbWlsYXIgdGFibGUgb24gc3Vic2NyaWJl ciB3aXRoIGFkZGl0aW9uYWwgaW5kZXggdG8gZGlzYWJsZSBIT1QgdXBkYXRlcworJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSBjb25mX3Rh YihhIGludCBQUklNQVJZIGtleSwgZGF0YSB0ZXh0KTsKKwkgQ1JFQVRFIElOREVYIGRhdGFfaW5k ZXggT04gY29uZl90YWIoZGF0YSk7Iik7CisKKyMgU2V0IHVwIGV4dGVuc2lvbiB0byBzaW11bGF0 ZSByYWNlIGNvbmRpdGlvbgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICdDUkVBVEUgRVhURU5TSU9OIGluamVjdGlvbl9wb2ludHM7Jyk7CisKKyMgU2V0dXAgbG9naWNh bCByZXBsaWNhdGlvbgorbXkgJHB1Ymxpc2hlcl9jb25uc3RyID0gJG5vZGVfcHVibGlzaGVyLT5j b25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWIgRk9SIFRBQkxFIGNvbmZf dGFiIik7CisKKyMgSW5zZXJ0IHJvdyB0byBiZSB1cGRhdGVkIGxhdGVyCiskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyBjb25mX3RhYihhLCBkYXRh KSBWQUxVRVMgKDEsJ2Zyb21wdWInKSIpOworCisjIENyZWF0ZSB0aGUgc3Vic2NyaXB0aW9uCitt eSAkYXBwbmFtZSA9ICd0YXBfc3ViJzsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgKKwkn cG9zdGdyZXMnLAorCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWIKKwkgQ09OTkVDVElPTiAn JHB1Ymxpc2hlcl9jb25uc3RyIGFwcGxpY2F0aW9uX25hbWU9JGFwcG5hbWUnCisJIFBVQkxJQ0FU SU9OIHRhcF9wdWIiKTsKKworIyBXYWl0IGZvciBpbml0aWFsIHRhYmxlIHN5bmMgdG8gZmluaXNo Ciskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9wdWJs aXNoZXIsICRhcHBuYW1lKTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKKyMgUmFjZSBjb25kaXRpb24gYmVjYXVzZSBvZiBEaXJ0eVNuYXBzaG90CisjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitteSAkcHNxbF9zZXNz aW9uX3N1YnNjcmliZXIgPSAkbm9kZV9zdWJzY3JpYmVyLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3Rn cmVzJyk7CitpZiAoJHNpbXVsYXRlX3JhY2VfY29uZGl0aW9uKQoreworCSRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfYXR0 YWNoKCdpbmRleF9nZXRuZXh0X3Nsb3RfYmVmb3JlX2ZldGNoX2FwcGx5X2RpcnR5JywgJ3dhaXQn KSIpOworfQorCitteSAkbG9nX29mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7 CisKKyMgRGVsZXRlIHR1cGxlIG9uIHB1Ymxpc2hlcgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIGNvbmZfdGFiIFdIRVJFIGE9MTsiKTsKKworaWYg KCRzaW11bGF0ZV9yYWNlX2NvbmRpdGlvbikKK3sKKwkjIFdhaXQgYXBwbHkgd29ya2VyIHRvIHN0 YXJ0IHRoZSBzZWFyY2ggZm9yIHRoZSB0dXBsZSB1c2luZyBpbmRleAorCSRub2RlX3N1YnNjcmli ZXItPndhaXRfZm9yX2V2ZW50KCdsb2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlcicsCisJ CSdpbmRleF9nZXRuZXh0X3Nsb3RfYmVmb3JlX2ZldGNoX2FwcGx5X2RpcnR5Jyk7Cit9CisKKyMg VXBkYXRlciB0dXBsZSBvbiBzdWJzY3JpYmVyCiskcHNxbF9zZXNzaW9uX3N1YnNjcmliZXItPnF1 ZXJ5X3VudGlsKAorCXFyL3N0YXJ0LywgcXFbCisJXFxlY2hvIHN0YXJ0CisJVVBEQVRFIGNvbmZf dGFiIFNFVCBkYXRhID0gJ2Zyb21zdWJuZXcnIFdIRVJFIChhPTEpOworXSk7CisKKworaWYgKCRz aW11bGF0ZV9yYWNlX2NvbmRpdGlvbikKK3sKKwkjIFdha2UgdXAgYXBwbHkgd29ya2VyCisJJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIgorCQlTRUxFQ1QgaW5qZWN0aW9u X3BvaW50c19kZXRhY2goJ2luZGV4X2dldG5leHRfc2xvdF9iZWZvcmVfZmV0Y2hfYXBwbHlfZGly dHknKTsKKwkJU0VMRUNUIGluamVjdGlvbl9wb2ludHNfd2FrZXVwKCdpbmRleF9nZXRuZXh0X3Ns b3RfYmVmb3JlX2ZldGNoX2FwcGx5X2RpcnR5Jyk7CisJCSIpOworfQorCisjIFR1cGxlIHdhcyB1 cGRhdGVkIC0gc28sIHdlIGhhdmUgY29uZmxpY3QKKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9y X2xvZygKKwlxci9jb25mbGljdCBkZXRlY3RlZCBvbiByZWxhdGlvbiBcInB1YmxpYy5jb25mX3Rh YlwiLywKKwkkbG9nX29mZnNldCk7CisKKyMgQnV0IHR1cGxlIHNob3VsZCBiZSBkZWxldGVkIG9u IHN1YnNjcmliZXIgYW55IHdheQoraXMoJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICdTRUxFQ1QgY291bnQoKikgZnJvbSBjb25mX3RhYicpLCAwLCAncmVjb3JkIGRlbGV0 ZWQgb24gc3Vic2NyaWJlcicpOworCitvayghJG5vZGVfc3Vic2NyaWJlci0+bG9nX2NvbnRhaW5z KAorCQlxci9MT0c6ICBjb25mbGljdCBkZXRlY3RlZCBvbiByZWxhdGlvbiBcInB1YmxpYy5jb25m X3RhYlwiOiBjb25mbGljdD1kZWxldGVfbWlzc2luZy8sCisJCSRsb2dfb2Zmc2V0KSwgJ2ludmFs aWQgY29uZmxpY3QgZGV0ZWN0ZWQnKTsKKworb2soJG5vZGVfc3Vic2NyaWJlci0+bG9nX2NvbnRh aW5zKAorCQlxci9MT0c6ICBjb25mbGljdCBkZXRlY3RlZCBvbiByZWxhdGlvbiBcInB1YmxpYy5j b25mX3RhYlwiOiBjb25mbGljdD1kZWxldGVfb3JpZ2luX2RpZmZlcnMvLAorCQkkbG9nX29mZnNl dCksICdjb3JyZWN0IGNvbmZsaWN0IGRldGVjdGVkJyk7CisKK2RvbmVfdGVzdGluZygpOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM3X3VwZGF0ZV9taXNzaW5nX3JhY2Uu cGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzdfdXBkYXRlX21pc3NpbmdfcmFjZS5wbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjcxZmRjMGMxMzYKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzdfdXBkYXRlX21pc3Npbmdf cmFjZS5wbApAQCAtMCwwICsxLDEzOSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVT UUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgVGVzdCB0aGUgY29uZmxpY3QgZGV0ZWN0 aW9uIGFuZCByZXNvbHV0aW9uIGluIGxvZ2ljYWwgcmVwbGljYXRpb24KK3VzZSBzdHJpY3Q7Cit1 c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rl cjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitpZiAo JEVOVntlbmFibGVfaW5qZWN0aW9uX3BvaW50c30gbmUgJ3llcycpCit7CisJcGxhbiBza2lwX2Fs bCA9PiAnSW5qZWN0aW9uIHBvaW50cyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnVpbGQnOworfQor CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgU2V0IGl0IHRvIDAgdG8gbWFrZSBzZXQg c3VjY2VzczsgVE9ETzogZGVsZXRlIHRoYXQgZm9yIGNvbW1pdAorbXkgJHNpbXVsYXRlX3JhY2Vf Y29uZGl0aW9uID0gMTsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNldHVwCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCisKKyMgSW5pdGlhbGl6ZSBwdWJsaXNoZXIgbm9kZQorbXkgJG5vZGVfcHVibGlz aGVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKKyRub2Rl X3B1Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9w dWJsaXNoZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCXFxKHRyYWNrX2NvbW1p dF90aW1lc3RhbXAgPSBvbikpOworJG5vZGVfcHVibGlzaGVyLT5zdGFydDsKKworCisjIENyZWF0 ZSBzdWJzY3JpYmVyIG5vZGUgd2l0aCB0cmFja19jb21taXRfdGltZXN0YW1wIGVuYWJsZWQKK215 ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1YnNj cmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQ7Ciskbm9kZV9zdWJzY3JpYmVyLT5hcHBl bmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwlxcSh0cmFja19jb21taXRfdGltZXN0YW1wID0g b24pKTsKKyRub2RlX3N1YnNjcmliZXItPnN0YXJ0OworCisKKyMgQ2hlY2sgaWYgdGhlIGV4dGVu c2lvbiBpbmplY3Rpb25fcG9pbnRzIGlzIGF2YWlsYWJsZSwgYXMgaXQgbWF5IGJlCisjIHBvc3Np YmxlIHRoYXQgdGhpcyBzY3JpcHQgaXMgcnVuIHdpdGggaW5zdGFsbGNoZWNrLCB3aGVyZSB0aGUg bW9kdWxlCisjIHdvdWxkIG5vdCBiZSBpbnN0YWxsZWQgYnkgZGVmYXVsdC4KK2lmICghJG5vZGVf c3Vic2NyaWJlci0+Y2hlY2tfZXh0ZW5zaW9uKCdpbmplY3Rpb25fcG9pbnRzJykpCit7CisJcGxh biBza2lwX2FsbCA9PiAnRXh0ZW5zaW9uIGluamVjdGlvbl9wb2ludHMgbm90IGluc3RhbGxlZCc7 Cit9CisKKyMgQ3JlYXRlIHRhYmxlIG9uIHB1Ymxpc2hlcgorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoCisJJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIGNvbmZfdGFiKGEgaW50IFBSSU1B Ulkga2V5LCBkYXRhIHRleHQpOyIpOworCisjIENyZWF0ZSBzaW1pbGFyIHRhYmxlIG9uIHN1YnNj cmliZXIgd2l0aCBhZGRpdGlvbmFsIGluZGV4IHRvIGRpc2FibGUgSE9UIHVwZGF0ZXMgYW5kIGFk ZGl0aW9uYWwgY29sdW1uCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVz JywKKwkiQ1JFQVRFIFRBQkxFIGNvbmZfdGFiKGEgaW50IFBSSU1BUlkga2V5LCBkYXRhIHRleHQs IGkgaW50IERFRkFVTFQgMCk7CisJIENSRUFURSBJTkRFWCBpX2luZGV4IE9OIGNvbmZfdGFiKGkp OyIpOworCisjIFNldCB1cCBleHRlbnNpb24gdG8gc2ltdWxhdGUgcmFjZSBjb25kaXRpb24KKyRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ1JFQVRFIEVYVEVOU0lPTiBp bmplY3Rpb25fcG9pbnRzOycpOworCisjIFNldHVwIGxvZ2ljYWwgcmVwbGljYXRpb24KK215ICRw dWJsaXNoZXJfY29ubnN0ciA9ICRub2RlX3B1Ymxpc2hlci0+Y29ubnN0ciAuICcgZGJuYW1lPXBv c3RncmVzJzsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFU RSBQVUJMSUNBVElPTiB0YXBfcHViIEZPUiBUQUJMRSBjb25mX3RhYiIpOworCisjIEluc2VydCBy b3cgdG8gYmUgdXBkYXRlZCBsYXRlcgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiSU5TRVJUIElOVE8gY29uZl90YWIoYSwgZGF0YSkgVkFMVUVTICgxLCdmcm9tcHVi JykiKTsKKworIyBDcmVhdGUgdGhlIHN1YnNjcmlwdGlvbgorbXkgJGFwcG5hbWUgPSAndGFwX3N1 Yic7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywKKwkiQ1JFQVRF IFNVQlNDUklQVElPTiB0YXBfc3ViCisJIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0ciBh cHBsaWNhdGlvbl9uYW1lPSRhcHBuYW1lJworCSBQVUJMSUNBVElPTiB0YXBfcHViIik7CisKKyMg V2FpdCBmb3IgaW5pdGlhbCB0YWJsZSBzeW5jIHRvIGZpbmlzaAorJG5vZGVfc3Vic2NyaWJlci0+ d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfcHVibGlzaGVyLCAkYXBwbmFtZSk7CisK KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFJhY2UgY29u ZGl0aW9uIGJlY2F1c2Ugb2YgRGlydHlTbmFwc2hvdAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbXkgJHBzcWxfc2Vzc2lvbl9zdWJzY3JpYmVyID0gJG5v ZGVfc3Vic2NyaWJlci0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycpOworaWYgKCRzaW11bGF0 ZV9yYWNlX2NvbmRpdGlvbikKK3sKKwkkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX2F0dGFjaCgnaW5kZXhfZ2V0bmV4dF9zbG90 X2JlZm9yZV9mZXRjaF9hcHBseV9kaXJ0eScsICd3YWl0JykiKTsKK30KKworbXkgJGxvZ19vZmZz ZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisjIFVwZGF0ZSB0dXBsZSBvbiBw dWJsaXNoZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlVQREFU RSBjb25mX3RhYiBTRVQgZGF0YSA9ICdmcm9tcHVibmV3JyBXSEVSRSAoYT0xKTsiKTsKKworCitp ZiAoJHNpbXVsYXRlX3JhY2VfY29uZGl0aW9uKQoreworCSMgV2FpdCBhcHBseSB3b3JrZXIgdG8g c3RhcnQgdGhlIHNlYXJjaCBmb3IgdGhlIHR1cGxlIHVzaW5nIGluZGV4CisJJG5vZGVfc3Vic2Ny aWJlci0+d2FpdF9mb3JfZXZlbnQoJ2xvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyJywg J2luZGV4X2dldG5leHRfc2xvdF9iZWZvcmVfZmV0Y2hfYXBwbHlfZGlydHknKTsKK30KKworIyBV cGRhdGUgYWRkaXRpb25hbCghKSBjb2x1bW4gb24gdGhlIHN1YnNjcmliZXIKKyRwc3FsX3Nlc3Np b25fc3Vic2NyaWJlci0+cXVlcnlfdW50aWwoCisJcXIvc3RhcnQvLCBxcVsKKwlcXGVjaG8gc3Rh cnQKKwlVUERBVEUgY29uZl90YWIgU0VUIGkgPSAxIFdIRVJFIChhPTEpOworXSk7CisKKworaWYg KCRzaW11bGF0ZV9yYWNlX2NvbmRpdGlvbikKK3sKKwkjIFdha2UgdXAgYXBwbHkgd29ya2VyCisJ JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIgorCQlTRUxFQ1QgaW5qZWN0 aW9uX3BvaW50c19kZXRhY2goJ2luZGV4X2dldG5leHRfc2xvdF9iZWZvcmVfZmV0Y2hfYXBwbHlf ZGlydHknKTsKKwkJU0VMRUNUIGluamVjdGlvbl9wb2ludHNfd2FrZXVwKCdpbmRleF9nZXRuZXh0 X3Nsb3RfYmVmb3JlX2ZldGNoX2FwcGx5X2RpcnR5Jyk7CisJCSIpOworfQorCisjIFR1cGxlIHdh cyB1cGRhdGVkIC0gc28sIHdlIGhhdmUgY29uZmxpY3QKKyRub2RlX3N1YnNjcmliZXItPndhaXRf Zm9yX2xvZygKKwlxci9jb25mbGljdCBkZXRlY3RlZCBvbiByZWxhdGlvbiBcInB1YmxpYy5jb25m X3RhYlwiLywKKwkkbG9nX29mZnNldCk7CisKKyMgV2UgbmVlZCBuZXcgY29sdW1uIHZhbHVlIGJl IHN5bmNlZCB3aXRoIHN1YnNjcmliZXIKK2lzKCRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAnU0VMRUNUIGRhdGEgZnJvbSBjb25mX3RhYiBXSEVSRSBhID0gMScpLCAnZnJv bXB1Ym5ldycsICdyZWNvcmQgdXBkYXRlZCBvbiBzdWJzY3JpYmVyJyk7CisjIEFuZCBhZGRpdGlv bmFsIGNvbHVtbiBtYWludGFpbiB1cGRhdGVkIHZhbHVlCitpcygkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1NFTEVDVCBpIGZyb20gY29uZl90YWIgV0hFUkUgYSA9IDEn KSwgMSwgJ2NvbHVtbiByZWNvcmQgdXBkYXRlZCBvbiBzdWJzY3JpYmVyJyk7CisKK29rKCEkbm9k ZV9zdWJzY3JpYmVyLT5sb2dfY29udGFpbnMoCisJCXFyL0xPRzogIGNvbmZsaWN0IGRldGVjdGVk IG9uIHJlbGF0aW9uIFwicHVibGljLmNvbmZfdGFiXCI6IGNvbmZsaWN0PXVwZGF0ZV9taXNzaW5n LywKKwkJJGxvZ19vZmZzZXQpLCAnaW52YWxpZCBjb25mbGljdCBkZXRlY3RlZCcpOworCitvaygk bm9kZV9zdWJzY3JpYmVyLT5sb2dfY29udGFpbnMoCisJCXFyL0xPRzogIGNvbmZsaWN0IGRldGVj dGVkIG9uIHJlbGF0aW9uIFwicHVibGljLmNvbmZfdGFiXCI6IGNvbmZsaWN0PXVwZGF0ZV9vcmln aW5fZGlmZmVycy8sCisJCSRsb2dfb2Zmc2V0KSwgJ2NvcnJlY3QgY29uZmxpY3QgZGV0ZWN0ZWQn KTsKKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMzhfdXBkYXRlX21pc3Npbmdfd2l0aF9yZXRhaW4ucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRp b24vdC8wMzhfdXBkYXRlX21pc3Npbmdfd2l0aF9yZXRhaW4ucGwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjZmN2RmZDI4ZDM3Ci0tLSAvZGV2L251bGwKKysrIGIvc3Jj L3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM4X3VwZGF0ZV9taXNzaW5nX3dpdGhfcmV0YWluLnBsCkBA IC0wLDAgKzEsMTQxIEBACisjIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKworIyBUZXN0IHRoZSBjb25mbGljdCBkZXRlY3Rpb24gYW5kIHJl c29sdXRpb24gaW4gbG9naWNhbCByZXBsaWNhdGlvbgordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5n cyBGQVRBTCA9PiAnYWxsJzsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBv c3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKK2lmICgkRU5We2VuYWJs ZV9pbmplY3Rpb25fcG9pbnRzfSBuZSAneWVzJykKK3sKKwlwbGFuIHNraXBfYWxsID0+ICdJbmpl Y3Rpb24gcG9pbnRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBidWlsZCc7Cit9CisKKyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBTZXQgaXQgdG8gMCB0byBtYWtlIHNldCBzdWNjZXNzOyBU T0RPOiBkZWxldGUgdGhhdCBmb3IgY29tbWl0CitteSAkc2ltdWxhdGVfcmFjZV9jb25kaXRpb24g PSAxOworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKKyMgU2V0dXAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK KworIyBJbml0aWFsaXplIHB1Ymxpc2hlciBub2RlCitteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOworJG5vZGVfcHVibGlzaGVy LT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3B1Ymxpc2hlci0+ YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJcXEodHJhY2tfY29tbWl0X3RpbWVzdGFt cCA9IG9uKSk7Ciskbm9kZV9wdWJsaXNoZXItPnN0YXJ0OworCisKKyMgQ3JlYXRlIHN1YnNjcmli ZXIgbm9kZSB3aXRoIHRyYWNrX2NvbW1pdF90aW1lc3RhbXAgZW5hYmxlZAorbXkgJG5vZGVfc3Vi c2NyaWJlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3Vic2NyaWJlcicpOwor JG5vZGVfc3Vic2NyaWJlci0+aW5pdDsKKyRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdw b3N0Z3Jlc3FsLmNvbmYnLAorCXFxKHRyYWNrX2NvbW1pdF90aW1lc3RhbXAgPSBvbikpOworJG5v ZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJcXEod2FsX2xl dmVsID0gJ3JlcGxpY2EnKSk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zdGFydDsKKworCisjIENoZWNr IGlmIHRoZSBleHRlbnNpb24gaW5qZWN0aW9uX3BvaW50cyBpcyBhdmFpbGFibGUsIGFzIGl0IG1h eSBiZQorIyBwb3NzaWJsZSB0aGF0IHRoaXMgc2NyaXB0IGlzIHJ1biB3aXRoIGluc3RhbGxjaGVj aywgd2hlcmUgdGhlIG1vZHVsZQorIyB3b3VsZCBub3QgYmUgaW5zdGFsbGVkIGJ5IGRlZmF1bHQu CitpZiAoISRub2RlX3N1YnNjcmliZXItPmNoZWNrX2V4dGVuc2lvbignaW5qZWN0aW9uX3BvaW50 cycpKQoreworCXBsYW4gc2tpcF9hbGwgPT4gJ0V4dGVuc2lvbiBpbmplY3Rpb25fcG9pbnRzIG5v dCBpbnN0YWxsZWQnOworfQorCisjIENyZWF0ZSB0YWJsZSBvbiBwdWJsaXNoZXIKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSBjb25mX3Rh YihhIGludCBQUklNQVJZIGtleSwgZGF0YSB0ZXh0KTsiKTsKKworIyBDcmVhdGUgc2ltaWxhciB0 YWJsZSBvbiBzdWJzY3JpYmVyIHdpdGggYWRkaXRpb25hbCBpbmRleCB0byBkaXNhYmxlIEhPVCB1 cGRhdGVzIGFuZCBhZGRpdGlvbmFsIGNvbHVtbgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KAorCSdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSBjb25mX3RhYihhIGludCBQUklNQVJZIGtl eSwgZGF0YSB0ZXh0LCBpIGludCBERUZBVUxUIDApOworCSBDUkVBVEUgSU5ERVggaV9pbmRleCBP TiBjb25mX3RhYihpKTsiKTsKKworIyBTZXQgdXAgZXh0ZW5zaW9uIHRvIHNpbXVsYXRlIHJhY2Ug Y29uZGl0aW9uCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFU RSBFWFRFTlNJT04gaW5qZWN0aW9uX3BvaW50czsnKTsKKworIyBTZXR1cCBsb2dpY2FsIHJlcGxp Y2F0aW9uCitteSAkcHVibGlzaGVyX2Nvbm5zdHIgPSAkbm9kZV9wdWJsaXNoZXItPmNvbm5zdHIg LiAnIGRibmFtZT1wb3N0Z3Jlcyc7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1YiBGT1IgVEFCTEUgY29uZl90YWIiKTsK KworIyBJbnNlcnQgcm93IHRvIGJlIHVwZGF0ZWQgbGF0ZXIKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIGNvbmZfdGFiKGEsIGRhdGEpIFZBTFVF UyAoMSwnZnJvbXB1YicpIik7CisKKyMgQ3JlYXRlIHRoZSBzdWJzY3JpcHRpb24KK215ICRhcHBu YW1lID0gJ3RhcF9zdWInOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3Jl cycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1YgorCSBDT05ORUNUSU9OICckcHVibGlz aGVyX2Nvbm5zdHIgYXBwbGljYXRpb25fbmFtZT0kYXBwbmFtZScKKwkgUFVCTElDQVRJT04gdGFw X3B1YiBXSVRIIChyZXRhaW5fZGVhZF90dXBsZXMgPSB0cnVlKSIpOworCisjIFdhaXQgZm9yIGlu aXRpYWwgdGFibGUgc3luYyB0byBmaW5pc2gKKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX3N1 YnNjcmlwdGlvbl9zeW5jKCRub2RlX3B1Ymxpc2hlciwgJGFwcG5hbWUpOworCisjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBSYWNlIGNvbmRpdGlvbiBiZWNh dXNlIG9mIERpcnR5U25hcHNob3QKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCisKK215ICRwc3FsX3Nlc3Npb25fc3Vic2NyaWJlciA9ICRub2RlX3N1YnNjcmli ZXItPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnKTsKK2lmICgkc2ltdWxhdGVfcmFjZV9jb25k aXRpb24pCit7CisJJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgaW5qZWN0aW9uX3BvaW50c19hdHRhY2goJ2luZGV4X2dldG5leHRfc2xvdF9iZWZvcmVfZmV0 Y2hfYXBwbHlfZGlydHknLCAnd2FpdCcpIik7Cit9CisKK215ICRsb2dfb2Zmc2V0ID0gLXMgJG5v ZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworIyBVcGRhdGUgdHVwbGUgb24gcHVibGlzaGVyCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJVUERBVEUgY29uZl90YWIg U0VUIGRhdGEgPSAnZnJvbXB1Ym5ldycgV0hFUkUgKGE9MSk7Iik7CisKKworaWYgKCRzaW11bGF0 ZV9yYWNlX2NvbmRpdGlvbikKK3sKKwkjIFdhaXQgYXBwbHkgd29ya2VyIHRvIHN0YXJ0IHRoZSBz ZWFyY2ggZm9yIHRoZSB0dXBsZSB1c2luZyBpbmRleAorCSRub2RlX3N1YnNjcmliZXItPndhaXRf Zm9yX2V2ZW50KCdsb2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlcicsICdpbmRleF9nZXRu ZXh0X3Nsb3RfYmVmb3JlX2ZldGNoX2FwcGx5X2RpcnR5Jyk7Cit9CisKKyMgVXBkYXRlIGFkZGl0 aW9uYWwoISkgY29sdW1uIG9uIHRoZSBzdWJzY3JpYmVyCiskcHNxbF9zZXNzaW9uX3N1YnNjcmli ZXItPnF1ZXJ5X3VudGlsKAorCXFyL3N0YXJ0LywgcXFbCisJXFxlY2hvIHN0YXJ0CisJVVBEQVRF IGNvbmZfdGFiIFNFVCBpID0gMSBXSEVSRSAoYT0xKTsKK10pOworCisKK2lmICgkc2ltdWxhdGVf cmFjZV9jb25kaXRpb24pCit7CisJIyBXYWtlIHVwIGFwcGx5IHdvcmtlcgorCSRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCIKKwkJU0VMRUNUIGluamVjdGlvbl9wb2ludHNf ZGV0YWNoKCdpbmRleF9nZXRuZXh0X3Nsb3RfYmVmb3JlX2ZldGNoX2FwcGx5X2RpcnR5Jyk7CisJ CVNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3dha2V1cCgnaW5kZXhfZ2V0bmV4dF9zbG90X2JlZm9y ZV9mZXRjaF9hcHBseV9kaXJ0eScpOworCQkiKTsKK30KKworIyBUdXBsZSB3YXMgdXBkYXRlZCAt IHNvLCB3ZSBoYXZlIGNvbmZsaWN0Ciskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2coCisJ cXIvY29uZmxpY3QgZGV0ZWN0ZWQgb24gcmVsYXRpb24gXCJwdWJsaWMuY29uZl90YWJcIi8sCisJ JGxvZ19vZmZzZXQpOworCisjIFdlIG5lZWQgbmV3IGNvbHVtbiB2YWx1ZSBiZSBzeW5jZWQgd2l0 aCBzdWJzY3JpYmVyCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg J1NFTEVDVCBkYXRhIGZyb20gY29uZl90YWIgV0hFUkUgYSA9IDEnKSwgJ2Zyb21wdWJuZXcnLCAn cmVjb3JkIHVwZGF0ZWQgb24gc3Vic2NyaWJlcicpOworIyBBbmQgYWRkaXRpb25hbCBjb2x1bW4g bWFpbnRhaW4gdXBkYXRlZCB2YWx1ZQoraXMoJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICdTRUxFQ1QgaSBmcm9tIGNvbmZfdGFiIFdIRVJFIGEgPSAxJyksIDEsICdjb2x1 bW4gcmVjb3JkIHVwZGF0ZWQgb24gc3Vic2NyaWJlcicpOworCitvayghJG5vZGVfc3Vic2NyaWJl ci0+bG9nX2NvbnRhaW5zKAorCQlxci9MT0c6ICBjb25mbGljdCBkZXRlY3RlZCBvbiByZWxhdGlv biBcInB1YmxpYy5jb25mX3RhYlwiOiBjb25mbGljdD11cGRhdGVfZGVsZXRlZC8sCisJCSRsb2df b2Zmc2V0KSwgJ2ludmFsaWQgY29uZmxpY3QgZGV0ZWN0ZWQnKTsKKworb2soJG5vZGVfc3Vic2Ny aWJlci0+bG9nX2NvbnRhaW5zKAorCQlxci9MT0c6ICBjb25mbGljdCBkZXRlY3RlZCBvbiByZWxh dGlvbiBcInB1YmxpYy5jb25mX3RhYlwiOiBjb25mbGljdD11cGRhdGVfb3JpZ2luX2RpZmZlcnMv LAorCQkkbG9nX29mZnNldCksICdjb3JyZWN0IGNvbmZsaWN0IGRldGVjdGVkJyk7CisKK2RvbmVf dGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM5X3VwZGF0 ZV9taXNzaW5nX3NpbXVsYXRpb24ucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzlfdXBk YXRlX21pc3Npbmdfc2ltdWxhdGlvbi5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uMzIyZTkzMWMxNzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zdWJzY3Jp cHRpb24vdC8wMzlfdXBkYXRlX21pc3Npbmdfc2ltdWxhdGlvbi5wbApAQCAtMCwwICsxLDEyMyBA QAorIyBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdy b3VwCisKKyMgVGVzdCB0aGUgY29uZmxpY3QgZGV0ZWN0aW9uIGFuZCByZXNvbHV0aW9uIGluIGxv Z2ljYWwgcmVwbGljYXRpb24KK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2Fs bCc7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0 OjpVdGlsczsKK3VzZSBJUEM6OlJ1biBxdyhzdGFydCBmaW5pc2gpOwordXNlIFRlc3Q6Ok1vcmU7 CisKK2lmICgkRU5We2VuYWJsZV9pbmplY3Rpb25fcG9pbnRzfSBuZSAneWVzJykKK3sKKwlwbGFu IHNraXBfYWxsID0+ICdJbmplY3Rpb24gcG9pbnRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBidWls ZCc7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU2V0dXAKKyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBJbml0aWFsaXplIHB1Ymxpc2hlciBub2Rl CitteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1 Ymxpc2hlcicpOworJG5vZGVfcHVibGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xv Z2ljYWwnKTsKKyRub2RlX3B1Ymxpc2hlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZics CisJcXEodHJhY2tfY29tbWl0X3RpbWVzdGFtcCA9IG9uKSk7Ciskbm9kZV9wdWJsaXNoZXItPnN0 YXJ0OworCisjIENyZWF0ZSBzdWJzY3JpYmVyIG5vZGUgd2l0aCB0cmFja19jb21taXRfdGltZXN0 YW1wIGVuYWJsZWQKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyLT5uZXcoJ3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQ7Ciskbm9kZV9z dWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwlxcSh0cmFja19jb21t aXRfdGltZXN0YW1wID0gb24pKTsKKyRub2RlX3N1YnNjcmliZXItPnN0YXJ0OworCisjIENoZWNr IGlmIHRoZSBleHRlbnNpb24gaW5qZWN0aW9uX3BvaW50cyBpcyBhdmFpbGFibGUsIGFzIGl0IG1h eSBiZQorIyBwb3NzaWJsZSB0aGF0IHRoaXMgc2NyaXB0IGlzIHJ1biB3aXRoIGluc3RhbGxjaGVj aywgd2hlcmUgdGhlIG1vZHVsZQorIyB3b3VsZCBub3QgYmUgaW5zdGFsbGVkIGJ5IGRlZmF1bHQu CitpZiAoISRub2RlX3N1YnNjcmliZXItPmNoZWNrX2V4dGVuc2lvbignaW5qZWN0aW9uX3BvaW50 cycpKQoreworCXBsYW4gc2tpcF9hbGwgPT4gJ0V4dGVuc2lvbiBpbmplY3Rpb25fcG9pbnRzIG5v dCBpbnN0YWxsZWQnOworfQorCisjIENyZWF0ZSB0YWJsZSBvbiBwdWJsaXNoZXIKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB0YmwoYSBp bnQgUFJJTUFSWSBrZXksIGRhdGFfcHViIGludCk7Iik7CisKKyMgQ3JlYXRlIHNpbWlsYXIgdGFi bGUgb24gc3Vic2NyaWJlciB3aXRoIGFkZGl0aW9uYWwgaW5kZXggdG8gZGlzYWJsZSBIT1QgdXBk YXRlcworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsCisJIkNSRUFU RSBUQUJMRSB0YmwoYSBpbnQgUFJJTUFSWSBrZXksIGRhdGFfcHViIGludCwgZGF0YV9zdWIgaW50 IGRlZmF1bHQgMCk7CisJIENSRUFURSBJTkRFWCBkYXRhX2luZGV4IE9OIHRibChkYXRhX3B1Yik7 Iik7CisKKyMgU2V0dXAgbG9naWNhbCByZXBsaWNhdGlvbgorbXkgJHB1Ymxpc2hlcl9jb25uc3Ry ID0gJG5vZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRh cF9wdWIgRk9SIFRBQkxFIHRibCIpOworCisjIENyZWF0ZSB0aGUgc3Vic2NyaXB0aW9uCitteSAk YXBwbmFtZSA9ICd0YXBfc3ViJzsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgKKwkncG9z dGdyZXMnLAorCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWIKKwkgQ09OTkVDVElPTiAnJHB1 Ymxpc2hlcl9jb25uc3RyIGFwcGxpY2F0aW9uX25hbWU9JGFwcG5hbWUnCisJIFBVQkxJQ0FUSU9O IHRhcF9wdWIiKTsKKworbXkgJG51bV9yb3dzID0gMTA7CitteSAkbnVtX3VwZGF0ZXMgPSAxMDAw MDsKK215ICRudW1fY2xpZW50cyA9IDEwOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIHRibCBTRUxFQ1QgaSwgaSAqIGkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwkbnVtX3Jvd3MpIGkiKTsKKworIyBXYWl0IGZvciBpbml0aWFsIHRhYmxlIHN5bmMg dG8gZmluaXNoCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygk bm9kZV9wdWJsaXNoZXIsICRhcHBuYW1lKTsKKworIyBQcmVwYXJlIHNtYWxsIHBnYmVuY2ggc2Ny aXB0cyBhcyBmaWxlcworbXkgJHN1Yl9zcWwgPSAkbm9kZV9zdWJzY3JpYmVyLT5iYXNlZGlyIC4g Jy9zdWJfdXBkYXRlLnNxbCc7CitteSAkcHViX3NxbCA9ICRub2RlX3B1Ymxpc2hlci0+YmFzZWRp ciAuICcvcHViX2RlbGV0ZS5zcWwnOworCitvcGVuIG15ICRmaDEsICc+JywgJHN1Yl9zcWwgb3Ig ZGllICQhOworcHJpbnQgJGZoMSAiXFxzZXQgbnVtIHJhbmRvbSgxLCRudW1fcm93cylcblVQREFU RSB0YmwgU0VUIGRhdGFfc3ViID0gZGF0YV9zdWIgKyAxIFdIRVJFIGEgPSA6bnVtO1xuIjsKK2Ns b3NlICRmaDE7CisKK29wZW4gbXkgJGZoMiwgJz4nLCAkcHViX3NxbCBvciBkaWUgJCE7Citwcmlu dCAkZmgyICJcXHNldCBudW0gcmFuZG9tKDEsJG51bV9yb3dzKVxuVVBEQVRFIHRibCBTRVQgZGF0 YV9wdWIgPSBkYXRhX3B1YiArIDEgV0hFUkUgYSA9IDpudW07XG4iOworY2xvc2UgJGZoMjsKKwor bXkgQHN1Yl9jbWQgPSAoCisJJ3BnYmVuY2gnLAorCSctLW5vLXZhY3V1bScsICItLWNsaWVudD0k bnVtX2NsaWVudHMiLCAnLS1qb2JzPTQnLCAnLS1leGl0LW9uLWFib3J0JywgIi0tdHJhbnNhY3Rp b25zPSRudW1fdXBkYXRlcyIsCisJJy1wJywgJG5vZGVfc3Vic2NyaWJlci0+cG9ydCwgJy1oJywg JG5vZGVfc3Vic2NyaWJlci0+aG9zdCwgJy1mJywgJHN1Yl9zcWwsICdwb3N0Z3JlcycKKyk7CisK K215IEBwdWJfY21kID0gKAorCSdwZ2JlbmNoJywKKwknLS1uby12YWN1dW0nLCAiLS1jbGllbnQ9 JG51bV9jbGllbnRzIiwgJy0tam9icz00JywgJy0tZXhpdC1vbi1hYm9ydCcsICItLXRyYW5zYWN0 aW9ucz0kbnVtX3VwZGF0ZXMiLAorCSctcCcsICRub2RlX3B1Ymxpc2hlci0+cG9ydCwgJy1oJywg JG5vZGVfcHVibGlzaGVyLT5ob3N0LCAnLWYnLCAkcHViX3NxbCwgJ3Bvc3RncmVzJworKTsKKwor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUgRVhURU5TSU9O IGluamVjdGlvbl9wb2ludHM7Jyk7CisjIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbgorJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgaW5qZWN0aW9uX3Bv aW50c19hdHRhY2goJ2FwcGx5X2hhbmRsZV91cGRhdGVfaW50ZXJuYWxfdXBkYXRlX21pc3Npbmcn LCAnZXJyb3InKSIpOworbXkgJGxvZ19vZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dm aWxlOworCisjIFN0YXJ0IGJvdGggY29uY3VycmVudGx5CitteSAoJHN1Yl9vdXQsICRzdWJfZXJy LCAkcHViX291dCwgJHB1Yl9lcnIpID0gKCcnLCAnJywgJycsICcnKTsKK215ICRzdWJfaCA9IHN0 YXJ0IFxAc3ViX2NtZCwgJz4nLCBcJHN1Yl9vdXQsICcyPicsIFwkc3ViX2VycjsKK215ICRwdWJf aCA9IHN0YXJ0IFxAcHViX2NtZCwgJz4nLCBcJHB1Yl9vdXQsICcyPicsIFwkcHViX2VycjsKKwor IyBXYWl0IGZvciBjb21wbGV0aW9uCitmaW5pc2ggJHN1Yl9oOworZmluaXNoICRwdWJfaDsKKwor bGlrZSgkc3ViX291dCwgcXIvYWN0dWFsbHkgcHJvY2Vzc2VkLywgJ3N1YnNjcmliZXIgcGdiZW5j aCBjb21wbGV0ZWQnKTsKK2xpa2UoJHB1Yl9vdXQsIHFyL2FjdHVhbGx5IHByb2Nlc3NlZC8sICdw dWJsaXNoZXIgcGdiZW5jaCBjb21wbGV0ZWQnKTsKKworIyBMZXQgc3Vic2NyaXB0aW9uIGNhdGNo IHVwLCB0aGVuIGNoZWNrIGV4cGVjdGF0aW9ucworJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3Jf c3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfcHVibGlzaGVyLCAndGFwX3N1YicpOworCitvayghJG5v ZGVfc3Vic2NyaWJlci0+bG9nX2NvbnRhaW5zKAorCQlxci9FUlJPUjogIGVycm9yIHRyaWdnZXJl ZCBmb3IgaW5qZWN0aW9uIHBvaW50IGFwcGx5X2hhbmRsZV91cGRhdGVfaW50ZXJuYWxfdXBkYXRl X21pc3NpbmcvLAorCQkkbG9nX29mZnNldCksICdpbnZhbGlkIGNvbmZsaWN0IGRldGVjdGVkJyk7 CisKK2RvbmVfdGVzdGluZygpOwotLSAKMi40OC4xCgo= --000000000000fcd971063de9a8b5--