Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wdpoK-004Nap-1D for pgsql-bugs@arkaria.postgresql.org; Sun, 28 Jun 2026 13:44:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wdpnI-00GWuN-1h for pgsql-bugs@arkaria.postgresql.org; Sun, 28 Jun 2026 13:43:32 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wdpnI-00GWuE-0N for pgsql-bugs@lists.postgresql.org; Sun, 28 Jun 2026 13:43:32 +0000 Received: from mail-japaneastazolkn19011028.outbound.protection.outlook.com ([52.103.43.28] helo=TYVP286CU001.outbound.protection.outlook.com) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wdpnF-00000000dC1-2Qw7 for pgsql-bugs@lists.postgresql.org; Sun, 28 Jun 2026 13:43:31 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YrRKoaldCFkBhXFYYm8snTAvQMdb38Llhi5A3Rir+Feg+c2FZ4LeRROb+7oLn0LCF/WSZ2Gjzl8WwNTPddya2cbp5bLafncJmwil9UleTpaIA6DoyGdrUN86u9y09ZDvjWKPLuSBFNFRUO6TM1FlZwfD6ezyyjtjYiHOfSE5EIjA+re1PkgdYA+NdRYV8Y8Ge6NkW/qEHzXouDi4/okQ29nSw4VlNwyvulqV4KRWL5s6DQxVWUJvk4wNL3KRFORaZowDqJOQNAXi+PvkuXvFzKBffkkpXTJAy6EUVgQ5Y/9pIZgJ+SMxoSkS+PEJzrVwSu7rHlxWNSoQ+XV96VjDRA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=5/d7IufaLdk82m1LyIOKtDBgAX4Gn5W17lyxA+d7MtU=; b=hb3yqzvf8DIkCJk720d1m4GZTmkWvw071yFTSuiPM4UWLTVYggtD39riWmOoe5C53X7Aynp7oBGnJ+xRjdmRQQLICoOkuO8MEw3hJKmZDPc9LucTwrsy68riORkDX6cSNudWvZieVHHXKQoig6h1Bqp8Z1brHS7aiiDYv9nZakLdZJyopMlsga3EkFqUQMI3leU8phe4yWBTH4Af/2fGBvJCc2NFtcN5fCHlr5mZlktAXPn6upmzNsho4fSC2xWS4S85PRCVp2GEJ2UZbjuDsTlpIwaYR1m6iI4+G0mzK3JzqU4IGlr3AyUQlE9zHjUDltRg1xHsIagLnT0hzBLLvA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5/d7IufaLdk82m1LyIOKtDBgAX4Gn5W17lyxA+d7MtU=; b=mHEPrnTxKklyqjIMuwHH5OHipXEQzyrGDaMAYrVFnvDTqEnt2qXCo72CwpsNlYb0RCzR5l0DbOE35oqfXmbkaxXUHfWpEN7mKkRYYZwWqTwRk3tPEkdzu5zd8ABOKdwOlYdvwgEdijeBQmQ+N7RMvtgT5eMPlmtTFV5NVI59WU/g/2Ah5UOOFcICG//TgMhPfOCV8CRGufgYFZJ+uNVIrQzEmf6aDNhTdEpSX65if3Ny2jkPOITjHQeRS2D0P3G/Libf2cI6KWlKEw0W1+nBjMyOne4IxlVTHUhtOB1H/8SrJ7E3uFtWvuEiDzhlL3O5x9M1t30WxzaP1Alb9AtvVA== Received: from OS9PR01MB14121.jpnprd01.prod.outlook.com (2603:1096:604:367::5) by TYVPR01MB11116.jpnprd01.prod.outlook.com (2603:1096:400:368::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.18; Sun, 28 Jun 2026 13:43:22 +0000 Received: from OS9PR01MB14121.jpnprd01.prod.outlook.com ([fe80::e5f:713b:1ac1:961c]) by OS9PR01MB14121.jpnprd01.prod.outlook.com ([fe80::e5f:713b:1ac1:961c%4]) with mapi id 15.21.0159.018; Sun, 28 Jun 2026 13:43:22 +0000 From: Chengpeng Yan To: Tender Wang CC: "imchifan@163.com" , "pgsql-bugs@lists.postgresql.org" Subject: Re: BUG #19534: Qual pushdown across a window subquery is unsafe with nondeterministic partition collations Thread-Topic: BUG #19534: Qual pushdown across a window subquery is unsafe with nondeterministic partition collations Thread-Index: AQHdBjQ5HQDmd4fzCU6cyOnxB0dphbZT146AgAAkJAA= Date: Sun, 28 Jun 2026 13:43:22 +0000 Message-ID: <544F3673-0EC9-4440-9FC5-4BB4F0AA3037@outlook.com> References: <19534-9cdf4693c42033da@postgresql.org> In-Reply-To: Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-traffictypediagnostic: OS9PR01MB14121:EE_|TYVPR01MB11116:EE_ x-ms-office365-filtering-correlation-id: 7fdc4e05-228b-4544-661c-08ded51b38e1 x-microsoft-antispam: BCL:0;ARA:14566002|15080799012|24021099003|6092099016|31061999003|22091999003|24121999003|12121999013|19110799012|8062599012|8060799015|8022599003|41001999006|25010399006|102099032|3412199025|440099028; x-microsoft-antispam-message-info: =?us-ascii?Q?W+RoDuT2DoWeXkVQHRjvpFL42mBarMLaoYGP9B4FtAFklW/5RT8vUTMLOpwS?= =?us-ascii?Q?GnHnk0zGfi3C+eZINfEVsaEMgVzpjJBFFXrNaSXzHs2o3IFxUE491ZeQXaYJ?= =?us-ascii?Q?y7F05/HMz4I4mpOF1cngik38y2nZ/wtoSA/jiYCD8h63xgsNLPcCZUr6GhRB?= =?us-ascii?Q?jB00dL4hRkeG3FXkmqC9Q1/TbpkCzZ15NXnKwRB32Q+CzAH88ugHwSWNm4c2?= =?us-ascii?Q?7EPo+qFU9HnnIburkAxqsEcVl0a42MhHiwS1x8Let+yq4LTMDz2LAq1Ehf4T?= =?us-ascii?Q?TqNeRY7ekhlVvpNs0xWxW3B6PazIdA/DKHaZVodSrBYHLXmBUVSIlOXyvNO3?= =?us-ascii?Q?MPz/BM9PSc6X1Xvr7tYBZmWVmeovN3BUb2QIsndrBtl8DwrpuWX+M8WqVGP1?= =?us-ascii?Q?f7htsE+/n7+KMEWZ6aAGpsZyGM8rygNbc6djIw8ENGp2KjBBQOmLNt4yDLMJ?= =?us-ascii?Q?D8WKOGPWqbAyUWfLtKEeraZzY4pZlc1plsammbW0uWKIg1h4mQ0fE6tQDOta?= =?us-ascii?Q?JSmDdR0R0e7H11eiLtWVMM0w8XfCf7wiVgJBtlZQlyIKwtCxmIhqXTzM6upL?= =?us-ascii?Q?D63FL4dLg+r5TkABC092FHaZ/wL5NYjcYZPGgf3ycY/+YST9euvfoiVEmX4j?= =?us-ascii?Q?QqHVodVnAVUf9oldSHKPEwUL5UdLsa+9T48al0qdXUqFIscTQVxvDvg4/I/a?= =?us-ascii?Q?HcL02y2lz6y/YQ6L9pMhQwv6Hn5Ob8q1xycCGhUhwLSLxr0EgeBuZJVuEhb7?= =?us-ascii?Q?6BYnvBnKgJ9KWN1/HpCAnVM550oFQvP0XDbOM+DaNScKxtry4b6ezJBtsTce?= =?us-ascii?Q?zxoMw0rsYTzVxeMbq4a3m6y4+p4qqOGG8ZaoY92HOU3YttBPguqKdQ0PYVf9?= =?us-ascii?Q?cU+0Fqn8dpmsb8yU0zx+0cVjp0cdOi7irRDtHAY1g/NB2wHEWV6vKcC81GFG?= =?us-ascii?Q?XcdzAj7FR1nkhEiTC7M5mHLjVNA+cdHXxjBrJlTFxHDumcaqkK8YhwsbG0zc?= =?us-ascii?Q?J1UiCKDgzg943scb8VzIGE5lQBYe0SUks6cMjm2kBcaf9KIPT1ew+rO1LQf6?= =?us-ascii?Q?dcZkfMhH?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?TZLFxH+sMIZZsaR8GT/0mAvgR7BFrQoA/MO3cI4Fq+cLZ7K1U3l2xSe4SS7s?= =?us-ascii?Q?0qMhOJSXhdGuX02n0mOjX2gpvD+4CZthj2yxWFQ12/RXwxhehuPN7JrAaQm7?= =?us-ascii?Q?+o2vqnm6Iu/KVzA3/yUf2rEkOn4R8IS5QxXffHZdUcX0apkYRa/fzFG8f1Ta?= =?us-ascii?Q?qsd/Kv+CWYnL0seoUJEHsgs7mcYO/eRsvZTlsNrxPaw9iHTvyRABmLBZggrs?= =?us-ascii?Q?c7yUvyxllmXy2Plv01RC53HvitqsLWGKb+ItYcH9l4bOwIkPVb+W+hahZj8P?= =?us-ascii?Q?+wpt9GedTrifi+Hvadr2Fu4WYmSM5Qv5Pcq8ZzCeJK6+AIAPoVKNUpEGtIZR?= =?us-ascii?Q?9krw8wamU9+aSFguv0PXeYHnEqLxKuLWW+p8pNuaGyu+q+8ahQ7aRnvHbPYy?= =?us-ascii?Q?toC4x/fpeYpNmVZySssxAFG2x7l/nFk9mGJsXj6lF9swILAqu89HHXYzoTGK?= =?us-ascii?Q?hgSaeumDWJCwoZO5xK5t+MBQjQpkOUaevs5JAylipq97wN7KjlYIG5TcmLc7?= =?us-ascii?Q?2aU0jb9lRhhAm6ZM0Ry6YySKJSQzooyh1HE3aZvwTqZRFsG4BGbf7YjQWij1?= =?us-ascii?Q?4MpL8mzoS3aAQkXCG9+45sppWkjTcb1fwKsrdSlsqQ0qr1V2BBuQMDyUszcU?= =?us-ascii?Q?StK5j6ekA4+jRKWllQOn2NpvuaoCzNQRVpgm1ZJmy6j1RfICA8OUrOjCRX9a?= =?us-ascii?Q?65Wasn/G6Ht+fF2ccy5vYkyKEsTLnP7NdLSWrGqhxcXmsMjdavSvR8JY0EVW?= =?us-ascii?Q?rXx4LuN2VFok6sVR4fV+PSr1RmFPiG6nAym2KoALoQadmyrhkBebEASyFzLo?= =?us-ascii?Q?ti6jzgAOUzrxoA22klRYW8y+fjrELRHNiGu0PO1FFhKlsoFGPPOojSgbMBjn?= =?us-ascii?Q?iTp5qMnR0uEMAfaOLA+5cifAtSbHuKtoWJsJ0bvsq6B99uLqI+YecvAxFekt?= =?us-ascii?Q?78sfX7PFd2MMt5Fg8A1IYLGVmcTdNUOJyL3S436VL6f4CW0Md6sXfb2S1R3g?= =?us-ascii?Q?VtYxcf+BKvEMoPClLrpkN/ukLRYZVDsigxKlvE9SjJDaus7jGw1KEN+FRc68?= =?us-ascii?Q?OcQmtMs7jhvfJo/uI1wB1pdvzTNgo9Yjqtl8e3e1JtmxnyrAZKN9qbHNvLG9?= =?us-ascii?Q?pfwJ0WJtt5W+vBvwIlTASTddsCdi0hCE36zh3xEqsGMJ+Ot5c5JkrJCVZgZD?= =?us-ascii?Q?fMQwJbnsmPqIGggRtO+TcyoQwcwgpfQ/dpI1aV2wenmqYwXZh35zCkf9yNHA?= =?us-ascii?Q?IqiDpVFhZTiZkSFlG3bZSWxXAVh603TV5okeCNbEaOV21DitGeHnqY2OgMIH?= =?us-ascii?Q?dk8nfR04xbMVKV/mPeLPMvBVzEW+vuKyGkNAtA8IWyI9TuMWE7oXyfVXoL+2?= =?us-ascii?Q?A0mPbxDK5i8sylnkDJ++nL42oaA2DvpbhFRptQF2QjqpS2qVOg=3D=3D?= Content-Type: multipart/mixed; boundary="_004_544F36730EC944409FC54BB4F0AA3037outlookcom_" MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: OS9PR01MB14121.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 7fdc4e05-228b-4544-661c-08ded51b38e1 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Jun 2026 13:43:22.7880 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYVPR01MB11116 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_004_544F36730EC944409FC54BB4F0AA3037outlookcom_ Content-Type: multipart/alternative; boundary="_000_544F36730EC944409FC54BB4F0AA3037outlookcom_" --_000_544F36730EC944409FC54BB4F0AA3037outlookcom_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi > On Jun 28, 2026, at 19:33, Tender Wang wrote: > > Yes, I can reproduce this on HEAD. > The whereClause was pushed down to the scan level of table t_window_ci. > So the row with 'ABC' was ignored by the filter. > > In current logic, we have no logic to process a nondeterministic > partition clause when considering whether the > qual can be pushed down to the subquery. > > I try to fix this with the attached patch. > I add a new flag UNSAFE_HAS_NONDETERMINITIC for > pushdown_safety_info.unsafeFlags. > If the var is in the partition clause and it is nondeterministic, we > set this flag. > In qual_is_pushdown_safe(), we check the qual's inputcollid; if it is > deterministic, but the var in > the partition clause is nondeterministic, it is PUSHDOWN_UNSAFE. > > Any thoughts? > -- > Thanks, > Tender Wang > <0001-Fix-qual-pushdown-with-nondeterministic-partition-co.patch> Thanks for working on this. I was looking into this issue too, and I agree that this is a wrong-result bug in the window-function subquery qual pushdown. Your approach looks reasonable for the most direct collation-conflict case: a qual can use equality semantics that distinguish values that the window partition treats as equal. I think the underlying safety condition is a bit broader, though. The pushed-down qual must return the same result for all values in a window partition equality class. The same risk is not limited to explicit collation conflicts. Using the same kind of nondeterministic case-insensitive partition key as the report, a non-collation-aware qual can still split a partition: ``` CREATE COLLATION case_insensitive (provider =3D icu, locale =3D '@colStrength=3Dsecondary', deterministic =3D false); CREATE TABLE t (x text COLLATE case_insensitive); INSERT INTO t VALUES ('abc'), ('ABC'); SELECT x, c FROM ( SELECT x, count(*) OVER (PARTITION BY x) AS c FROM t ) s WHERE ascii(x) =3D 97; ``` Without the patch, the planner can push the `ascii(x) =3D 97` filter below `WindowAgg`, so the result is: ``` x | c -----+--- abc | 1 ``` The correct result is: ``` x | c -----+--- abc | 2 ``` Postgres only knows at this point that the column appears in every window `PARTITION BY` list; it does not know that an arbitrary qual on that column is constant over the partition equality class. The attached v2 patch therefore takes a conservative approach: if the matching partition key uses a nondeterministic collation, ordinary qual pushdown is disabled for that column. The tradeoff is that we may miss some pushdown opportunities for quals that really are constant over the partition. But for a wrong-result case, that is safer than pushing a qual whose behavior over the partition is not proven. Deterministic partition keys keep the existing behavior. I ran `make check`; all tests passed. Any thoughts? -- Best regards, Chengpeng Yan --_000_544F36730EC944409FC54BB4F0AA3037outlookcom_ Content-Type: text/html; charset="us-ascii" Content-ID: Content-Transfer-Encoding: quoted-printable
Hi

> On Jun 28, 2026, at 19:33, Tender Wang <tndrwang@gmail.com> wrot= e:
>
> Yes, I can reproduce this on HEAD.
> The whereClause was pushed down to the scan level of table t_window_ci= .
> So the row with 'ABC' was ignored by the filter.
>
> In current logic, we have no logic to process a nondeterministic
> partition clause when considering whether the
> qual can be pushed down to the subquery.
>
> I try to fix this with the attached patch.
> I add a new flag UNSAFE_HAS_NONDETERMINITIC for
> pushdown_safety_info.unsafeFlags.
> If the var is in the partition clause and it is nondeterministic, we > set this flag.
> In qual_is_pushdown_safe(), we check the qual's inputcollid; if it is<= br> > deterministic, but the var in
> the partition clause is nondeterministic, it is PUSHDOWN_UNSAFE.
>
> Any thoughts?
> --
> Thanks,
> Tender Wang
> <0001-Fix-qual-pushdown-with-nondeterministic-partition-co.patch>= ;

Thanks for working on this. I was looking into this issue too, and I
agree that this is a wrong-result bug in the window-function subquery
qual pushdown.

Your approach looks reasonable for the most direct collation-conflict
case: a qual can use equality semantics that distinguish values that the window partition treats as equal. I think the underlying safety
condition is a bit broader, though. The pushed-down qual must return
the same result for all values in a window partition equality class.

The same risk is not limited to explicit collation conflicts. Using the
same kind of nondeterministic case-insensitive partition key as the
report, a non-collation-aware qual can still split a partition:

```
CREATE COLLATION case_insensitive
(provider =3D icu, locale =3D '@colStrength=3Dsecondary',
deterministic =3D false);

CREATE TABLE t (x text COLLATE case_insensitive);
INSERT INTO t VALUES ('abc'), ('ABC');

SELECT x, c
FROM (
SELECT x, count(*) OVER (PARTITION BY x) AS c
FROM t
) s
WHERE ascii(x) =3D 97;
```

Without the patch, the planner can push the `ascii(x) =3D 97` filter below<= br> `WindowAgg`, so the result is:

```
x | c
-----+---
abc | 1
```

The correct result is:

```
x | c
-----+---
abc | 2
```

Postgres only knows at this point that the column appears in every
window `PARTITION BY` list; it does not know that an arbitrary qual on
that column is constant over the partition equality class. The attached
v2 patch therefore takes a conservative approach: if the matching
partition key uses a nondeterministic collation, ordinary qual pushdown
is disabled for that column.

The tradeoff is that we may miss some pushdown opportunities for quals
that really are constant over the partition. But for a wrong-result
case, that is safer than pushing a qual whose behavior over the
partition is not proven. Deterministic partition keys keep the existing
behavior.

I ran `make check`; all tests passed.

Any thoughts?

--
Best regards,
Chengpeng Yan
--_000_544F36730EC944409FC54BB4F0AA3037outlookcom_-- --_004_544F36730EC944409FC54BB4F0AA3037outlookcom_ Content-Type: application/octet-stream; name="v2-0001-Fix-window-qual-pushdown-with-nondeterministic-co.patch" Content-Description: v2-0001-Fix-window-qual-pushdown-with-nondeterministic-co.patch Content-Disposition: attachment; filename="v2-0001-Fix-window-qual-pushdown-with-nondeterministic-co.patch"; size=11432; creation-date="Sun, 28 Jun 2026 13:43:19 GMT"; modification-date="Sun, 28 Jun 2026 13:43:19 GMT" Content-ID: <31F8401AB68CA742AFB9FAB506CD61C0@jpnprd01.prod.outlook.com> Content-Transfer-Encoding: base64 RnJvbSA4YWQxZWJjMDBkMTNjNzcxNmE1NzhhMDZlYzU2YTQ1YzBiYzI0NmE2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDaGVuZ3BlbmcgWWFuIDxjaGVuZ3BlbmdfeWFuQG91dGxvb2su Y29tPgpEYXRlOiBTdW4sIDI4IEp1biAyMDI2IDE4OjExOjE1ICswODAwClN1YmplY3Q6IFtQQVRD SCB2Ml0gRml4IHdpbmRvdyBxdWFsIHB1c2hkb3duIHdpdGggbm9uZGV0ZXJtaW5pc3RpYyBjb2xs YXRpb25zCgpRdWFsIHB1c2hkb3duIGludG8gYSB3aW5kb3ctZnVuY3Rpb24gc3VicXVlcnkgaXMg c2FmZSBvbmx5IHdoZW4gaXQKa2VlcHMgb3IgcmVqZWN0cyB3aG9sZSB3aW5kb3cgcGFydGl0aW9u cy4gIFRoYXQgcHJvb2YgZmFpbHMgZm9yIGEKbm9uZGV0ZXJtaW5pc3RpYyBwYXJ0aXRpb24gY29s bGF0aW9uLCBiZWNhdXNlIGFuIHVwcGVyIHF1YWwgY2FuCmRpc3Rpbmd1aXNoIHZhbHVlcyB0aGF0 IHRoZSBwYXJ0aXRpb24gZXF1YWxpdHkgdHJlYXRzIGFzIGVxdWFsLgoKTWFyayBzdWNoIHBhcnRp dGlvbi1rZXkgb3V0cHV0IGNvbHVtbnMgdW5zYWZlIGZvciBvcmRpbmFyeSBxdWFsCnB1c2hkb3du IHdoaWxlIGxlYXZpbmcgZGV0ZXJtaW5pc3RpYyBwYXJ0aXRpb24ga2V5cyB1bmNoYW5nZWQuCgpB ZGQgSUNVIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIGEgc3RyaWN0ZXItY29sbGF0aW9uIHF1YWwgYW5k IGZvciBhCm5vbi1jb2xsYXRpb24gZXhwcmVzc2lvbiB0aGF0IGRpc3Rpbmd1aXNoZXMgdmFsdWVz IGluIG9uZSBwYXJ0aXRpb24uCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0 aHMuYyAgICAgICAgIHwgNjggKysrKysrKysrKystLQogLi4uL3JlZ3Jlc3MvZXhwZWN0ZWQvY29s bGF0ZS5pY3UudXRmOC5vdXQgICAgIHwgOTggKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3Qv cmVncmVzcy9zcWwvY29sbGF0ZS5pY3UudXRmOC5zcWwgICAgIHwgNTcgKysrKysrKysrKysKIDMg ZmlsZXMgY2hhbmdlZCwgMjE0IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKaW5kZXggYzEzNDU5NGEyMWEuLmE2ZmQzYzZjNDg0 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKQEAgLTU3LDYgKzU3LDcgQEAK ICNkZWZpbmUgVU5TQUZFX05PVElOX0RJU1RJTkNUT05fQ0xBVVNFCSgxIDw8IDIpCiAjZGVmaW5l IFVOU0FGRV9OT1RJTl9QQVJUSVRJT05CWV9DTEFVU0UJKDEgPDwgMykKICNkZWZpbmUgVU5TQUZF X1RZUEVfTUlTTUFUQ0gJCQkoMSA8PCA0KQorI2RlZmluZSBVTlNBRkVfTk9OREVURVJNSU5JU1RJ Q19QQVJUSVRJT04JKDEgPDwgNSkKIAogLyogcmVzdWx0cyBvZiBzdWJxdWVyeV9pc19wdXNoZG93 bl9zYWZlICovCiB0eXBlZGVmIHN0cnVjdCBwdXNoZG93bl9zYWZldHlfaW5mbwpAQCAtMTU4LDcg KzE1OSw4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX291dHB1dF9leHByZXNzaW9ucyhRdWVyeSAqc3Vi cXVlcnksCiAJCQkJCQkJCQkgcHVzaGRvd25fc2FmZXR5X2luZm8gKnNhZmV0eUluZm8pOwogc3Rh dGljIHZvaWQgY29tcGFyZV90bGlzdF9kYXRhdHlwZXMoTGlzdCAqdGxpc3QsIExpc3QgKmNvbFR5 cGVzLAogCQkJCQkJCQkJcHVzaGRvd25fc2FmZXR5X2luZm8gKnNhZmV0eUluZm8pOwotc3RhdGlj IGJvb2wgdGFyZ2V0SXNJbkFsbFBhcnRpdGlvbkxpc3RzKFRhcmdldEVudHJ5ICp0bGUsIFF1ZXJ5 ICpxdWVyeSk7CitzdGF0aWMgYm9vbCB0YXJnZXRJc0luQWxsUGFydGl0aW9uTGlzdHMoVGFyZ2V0 RW50cnkgKnRsZSwgUXVlcnkgKnF1ZXJ5LAorCQkJCQkJCQkJCWJvb2wgKm5vbmRldGVybWluaXN0 aWNfcGFydGl0aW9uKTsKIHN0YXRpYyBwdXNoZG93bl9zYWZlX3R5cGUgcXVhbF9pc19wdXNoZG93 bl9zYWZlKFF1ZXJ5ICpzdWJxdWVyeSwgSW5kZXggcnRpLAogCQkJCQkJCQkJCQkJUmVzdHJpY3RJ bmZvICpyaW5mbywKIAkJCQkJCQkJCQkJCXB1c2hkb3duX3NhZmV0eV9pbmZvICpzYWZldHlJbmZv KTsKQEAgLTQyNjMsNiArNDI2NSwxMSBAQCByZWN1cnNlX3B1c2hkb3duX3NhZmUoTm9kZSAqc2V0 T3AsIFF1ZXJ5ICp0b3BxdWVyeSwKICAqIHN1YnF1ZXJ5X2lzX3B1c2hkb3duX3NhZmUgaGFuZGxl cyB0aGF0LikuICBTdWJxdWVyeSBjb2x1bW5zIG1hcmtlZCBhcwogICogdW5zYWZlIGZvciB0aGlz IHJlYXNvbiBjYW4gc3RpbGwgaGF2ZSBXaW5kb3dDbGF1c2UgcnVuIGNvbmRpdGlvbnMgcHVzaGVk CiAgKiBkb3duLgorICoKKyAqIFRoZSBzYW1lIHJlYXNvbmluZyBkb2VzIG5vdCBob2xkIGlmIHRo ZSBwYXJ0aXRpb24ga2V5J3MgY29sbGF0aW9uIGlzCisgKiBub25kZXRlcm1pbmlzdGljLCBzaW5j ZSBhIHF1YWwgbWlnaHQgZGlzdGluZ3Vpc2ggdmFsdWVzIHRoYXQgdGhlCisgKiBwYXJ0aXRpb25p bmcgZXF1YWxpdHkgb3BlcmF0b3Igc2VlcyBhcyBlcXVhbC4gIEluIHRoYXQgY2FzZSwgbWFyayB0 aGUKKyAqIGNvbHVtbiB1bnNhZmUgZm9yIG9yZGluYXJ5IHF1YWwgcHVzaGRvd24uCiAgKi8KIHN0 YXRpYyB2b2lkCiBjaGVja19vdXRwdXRfZXhwcmVzc2lvbnMoUXVlcnkgKnN1YnF1ZXJ5LCBwdXNo ZG93bl9zYWZldHlfaW5mbyAqc2FmZXR5SW5mbykKQEAgLTQzMzgsMTIgKzQzNDUsMjMgQEAgY2hl Y2tfb3V0cHV0X2V4cHJlc3Npb25zKFF1ZXJ5ICpzdWJxdWVyeSwgcHVzaGRvd25fc2FmZXR5X2lu Zm8gKnNhZmV0eUluZm8pCiAJCS8qIElmIHN1YnF1ZXJ5IHVzZXMgd2luZG93IGZ1bmN0aW9ucywg Y2hlY2sgcG9pbnQgNCAqLwogCQlpZiAoc3VicXVlcnktPmhhc1dpbmRvd0Z1bmNzICYmCiAJCQko c2FmZXR5SW5mby0+dW5zYWZlRmxhZ3NbdGxlLT5yZXNub10gJgotCQkJIFVOU0FGRV9OT1RJTl9Q QVJUSVRJT05CWV9DTEFVU0UpID09IDAgJiYKLQkJCSF0YXJnZXRJc0luQWxsUGFydGl0aW9uTGlz dHModGxlLCBzdWJxdWVyeSkpCisJCQkgKFVOU0FGRV9OT1RJTl9QQVJUSVRJT05CWV9DTEFVU0Ug fAorCQkJICBVTlNBRkVfTk9OREVURVJNSU5JU1RJQ19QQVJUSVRJT04pKSA9PSAwKQogCQl7Ci0J CQkvKiBub3QgcHJlc2VudCBpbiBhbGwgUEFSVElUSU9OIEJZIGNsYXVzZXMsIHNvIG1hcmsgaXQg dW5zYWZlICovCi0JCQlzYWZldHlJbmZvLT51bnNhZmVGbGFnc1t0bGUtPnJlc25vXSB8PSBVTlNB RkVfTk9USU5fUEFSVElUSU9OQllfQ0xBVVNFOwotCQkJY29udGludWU7CisJCQlib29sCQlub25k ZXRlcm1pbmlzdGljX3BhcnRpdGlvbjsKKworCQkJaWYgKCF0YXJnZXRJc0luQWxsUGFydGl0aW9u TGlzdHModGxlLCBzdWJxdWVyeSwKKwkJCQkJCQkJCQkJICZub25kZXRlcm1pbmlzdGljX3BhcnRp dGlvbikpCisJCQl7CisJCQkJLyogbm90IHByZXNlbnQgaW4gYWxsIFBBUlRJVElPTiBCWSBjbGF1 c2VzLCBzbyBtYXJrIGl0IHVuc2FmZSAqLworCQkJCXNhZmV0eUluZm8tPnVuc2FmZUZsYWdzW3Rs ZS0+cmVzbm9dIHw9IFVOU0FGRV9OT1RJTl9QQVJUSVRJT05CWV9DTEFVU0U7CisJCQkJY29udGlu dWU7CisJCQl9CisJCQlpZiAobm9uZGV0ZXJtaW5pc3RpY19wYXJ0aXRpb24pCisJCQl7CisJCQkJ c2FmZXR5SW5mby0+dW5zYWZlRmxhZ3NbdGxlLT5yZXNub10gfD0gVU5TQUZFX05PTkRFVEVSTUlO SVNUSUNfUEFSVElUSU9OOworCQkJCWNvbnRpbnVlOworCQkJfQogCQl9CiAJfQogfQpAQCAtNDM5 MywyMSArNDQxMSw1MiBAQCBjb21wYXJlX3RsaXN0X2RhdGF0eXBlcyhMaXN0ICp0bGlzdCwgTGlz dCAqY29sVHlwZXMsCiAgKgkJVHJ1ZSBpZiB0aGUgVGFyZ2V0RW50cnkgaXMgbGlzdGVkIGluIHRo ZSBQQVJUSVRJT04gQlkgY2xhdXNlCiAgKgkJb2YgZXZlcnkgd2luZG93IGRlZmluZWQgaW4gdGhl IHF1ZXJ5LgogICoKKyAqIElmIHNvLCBzZXQgKm5vbmRldGVybWluaXN0aWNfcGFydGl0aW9uIHdo ZW4gYW55IG1hdGNoaW5nIFBBUlRJVElPTiBCWQorICogZXhwcmVzc2lvbiBoYXMgYSBub25kZXRl cm1pbmlzdGljIGNvbGxhdGlvbi4KKyAqCiAgKiBJdCB3b3VsZCBiZSBzYWZlIHRvIGlnbm9yZSB3 aW5kb3dzIG5vdCBhY3R1YWxseSB1c2VkIGJ5IGFueSB3aW5kb3cKICAqIGZ1bmN0aW9uLCBidXQg aXQncyBub3QgZWFzeSB0byBnZXQgdGhhdCBpbmZvIGF0IHRoaXMgc3RhZ2U7IGFuZCBpdCdzCiAg KiB1bmxpa2VseSB0byBiZSB1c2VmdWwgdG8gc3BlbmQgYW55IGV4dHJhIGN5Y2xlcyBnZXR0aW5n IGl0LCBzaW5jZQogICogdW5yZWZlcmVuY2VkIHdpbmRvdyBkZWZpbml0aW9ucyBhcmUgcHJvYmFi bHkgaW5mcmVxdWVudCBpbiBwcmFjdGljZS4KICAqLwogc3RhdGljIGJvb2wKLXRhcmdldElzSW5B bGxQYXJ0aXRpb25MaXN0cyhUYXJnZXRFbnRyeSAqdGxlLCBRdWVyeSAqcXVlcnkpCit0YXJnZXRJ c0luQWxsUGFydGl0aW9uTGlzdHMoVGFyZ2V0RW50cnkgKnRsZSwgUXVlcnkgKnF1ZXJ5LAorCQkJ CQkJCWJvb2wgKm5vbmRldGVybWluaXN0aWNfcGFydGl0aW9uKQogeworCUluZGV4CQlyZWYgPSB0 bGUtPnJlc3NvcnRncm91cHJlZjsKIAlMaXN0Q2VsbCAgICpsYzsKIAorCSpub25kZXRlcm1pbmlz dGljX3BhcnRpdGlvbiA9IGZhbHNlOworCisJLyogbm8gbmVlZCB0byBzY2FuIGxpc3RzIGlmIHRs ZSBoYXMgbm8gbWFya2VyICovCisJaWYgKHJlZiA9PSAwKQorCQlyZXR1cm4gZmFsc2U7CisKIAlm b3JlYWNoKGxjLCBxdWVyeS0+d2luZG93Q2xhdXNlKQogCXsKIAkJV2luZG93Q2xhdXNlICp3YyA9 IChXaW5kb3dDbGF1c2UgKikgbGZpcnN0KGxjKTsKKwkJTGlzdENlbGwgICAqbGMyOworCQlib29s CQlmb3VuZCA9IGZhbHNlOworCisJCWZvcmVhY2gobGMyLCB3Yy0+cGFydGl0aW9uQ2xhdXNlKQor CQl7CisJCQlTb3J0R3JvdXBDbGF1c2UgKnNjbCA9IChTb3J0R3JvdXBDbGF1c2UgKikgbGZpcnN0 KGxjMik7CisKKwkJCWlmIChzY2wtPnRsZVNvcnRHcm91cFJlZiA9PSByZWYpCisJCQl7CisJCQkJ VGFyZ2V0RW50cnkgKnB0bGUgPSBnZXRfc29ydGdyb3VwY2xhdXNlX3RsZShzY2wsCisJCQkJCQkJ CQkJCQkJCQlxdWVyeS0+dGFyZ2V0TGlzdCk7CisJCQkJT2lkCQkJY29sbGlkID0gZXhwckNvbGxh dGlvbigoTm9kZSAqKSBwdGxlLT5leHByKTsKKworCQkJCWlmIChPaWRJc1ZhbGlkKGNvbGxpZCkg JiYKKwkJCQkJIWdldF9jb2xsYXRpb25faXNkZXRlcm1pbmlzdGljKGNvbGxpZCkpCisJCQkJCSpu b25kZXRlcm1pbmlzdGljX3BhcnRpdGlvbiA9IHRydWU7CisJCQkJZm91bmQgPSB0cnVlOworCQkJ CWJyZWFrOworCQkJfQorCQl9CiAKLQkJaWYgKCF0YXJnZXRJc0luU29ydExpc3QodGxlLCBJbnZh bGlkT2lkLCB3Yy0+cGFydGl0aW9uQ2xhdXNlKSkKKwkJaWYgKCFmb3VuZCkKIAkJCXJldHVybiBm YWxzZTsKIAl9CiAJcmV0dXJuIHRydWU7CkBAIC00NTIwLDcgKzQ1NjksOCBAQCBxdWFsX2lzX3B1 c2hkb3duX3NhZmUoUXVlcnkgKnN1YnF1ZXJ5LCBJbmRleCBydGksIFJlc3RyaWN0SW5mbyAqcmlu Zm8sCiAJCXsKIAkJCWlmIChzYWZldHlJbmZvLT51bnNhZmVGbGFnc1t2YXItPnZhcmF0dG5vXSAm CiAJCQkJKFVOU0FGRV9IQVNfVk9MQVRJTEVfRlVOQyB8IFVOU0FGRV9IQVNfU0VUX0ZVTkMgfAot CQkJCSBVTlNBRkVfTk9USU5fRElTVElOQ1RPTl9DTEFVU0UgfCBVTlNBRkVfVFlQRV9NSVNNQVRD SCkpCisJCQkJIFVOU0FGRV9OT1RJTl9ESVNUSU5DVE9OX0NMQVVTRSB8IFVOU0FGRV9UWVBFX01J U01BVENIIHwKKwkJCQkgVU5TQUZFX05PTkRFVEVSTUlOSVNUSUNfUEFSVElUSU9OKSkKIAkJCXsK IAkJCQlzYWZlID0gUFVTSERPV05fVU5TQUZFOwogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb2xsYXRlLmljdS51dGY4Lm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvY29sbGF0ZS5pY3UudXRmOC5vdXQKaW5kZXggMDRlMmY2ZGYwMzcuLmY0 NjIxN2JmYjEyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbGxhdGUu aWN1LnV0Zjgub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29sbGF0ZS5pY3Uu dXRmOC5vdXQKQEAgLTIzNDgsNiArMjM0OCwxMDQgQEAgU0VMRUNUIHgsIGNvdW50KCopIEZST00g dGVzdDNjcyBHUk9VUCBCWSB4IEhBVklORyB4ID0gJ2FiYycgQ09MTEFURSBjYXNlX2luc2Vuc2kK ICBBQkMgfCAgICAgMQogKDIgcm93cykKIAorLS0gVGVzdCBxdWFsIHB1c2hkb3duIHdpdGggd2lu ZG93IGZ1bmN0aW9ucyBhbmQgbm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25zLgorLS0gV2hlbiB0 aGUgd2luZG93IHBhcnRpdGlvbiBrZXkgdXNlcyBhIG5vbmRldGVybWluaXN0aWMgY29sbGF0aW9u LCBhbiB1cHBlcgorLS0gcXVhbCB0aGF0IHJlZmVyZW5jZXMgdGhlIHBhcnRpdGlvbiBrZXkgbXVz dCBub3QgYmUgcHVzaGVkIGJlbG93IFdpbmRvd0FnZywKKy0tIG90aGVyd2lzZSBpdCBjYW4gcmVt b3ZlIHNvbWUgYnV0IG5vdCBhbGwgcm93cyBmcm9tIGEgd2luZG93IHBhcnRpdGlvbi4KKy0tIE5l Z2F0aXZlOiBjb25mbGljdGluZyBjb2xsYXRpb24sIHF1YWwgbXVzdCBzdGF5IGFib3ZlIFdpbmRv d0FnZworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIHgsIHBhcnRfY291bnQKK0ZST00gKAor ICBTRUxFQ1QgeCwgY291bnQoKikgT1ZFUiAoUEFSVElUSU9OIEJZIHgpIEFTIHBhcnRfY291bnQK KyAgRlJPTSB0ZXN0M2NpCispIHMKK1dIRVJFIHggPSAnYWJjJyBDT0xMQVRFIGNhc2Vfc2Vuc2l0 aXZlCitPUkRFUiBCWSB4OworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTdWJxdWVyeSBTY2FuIG9uIHMKKyAgIEZpbHRl cjogKHMueCA9ICdhYmMnOjp0ZXh0IENPTExBVEUgY2FzZV9zZW5zaXRpdmUpCisgICAtPiAgV2lu ZG93QWdnCisgICAgICAgICBXaW5kb3c6IHcxIEFTIChQQVJUSVRJT04gQlkgdGVzdDNjaS54KQor ICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0ZXN0M2NpLnggQ09M TEFURSBjYXNlX2luc2Vuc2l0aXZlCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGVz dDNjaQorKDcgcm93cykKKworU0VMRUNUIHgsIHBhcnRfY291bnQKK0ZST00gKAorICBTRUxFQ1Qg eCwgY291bnQoKikgT1ZFUiAoUEFSVElUSU9OIEJZIHgpIEFTIHBhcnRfY291bnQKKyAgRlJPTSB0 ZXN0M2NpCispIHMKK1dIRVJFIHggPSAnYWJjJyBDT0xMQVRFIGNhc2Vfc2Vuc2l0aXZlCitPUkRF UiBCWSB4OworICB4ICB8IHBhcnRfY291bnQgCistLS0tLSstLS0tLS0tLS0tLS0KKyBhYmMgfCAg ICAgICAgICAyCisoMSByb3cpCisKKy0tIE5lZ2F0aXZlOiBub24tY29sbGF0aW9uLWF3YXJlIGV4 cHJlc3Npb24gY2FuIHN0aWxsIGRpc3Rpbmd1aXNoIHJvd3MgdGhhdAorLS0gdGhlIG5vbmRldGVy bWluaXN0aWMgcGFydGl0aW9uIGVxdWFsaXR5IGNvbnNpZGVycyBlcXVhbC4KK0VYUExBSU4gKENP U1RTIE9GRikKK1NFTEVDVCB4LCBwYXJ0X2NvdW50CitGUk9NICgKKyAgU0VMRUNUIHgsIGNvdW50 KCopIE9WRVIgKFBBUlRJVElPTiBCWSB4KSBBUyBwYXJ0X2NvdW50CisgIEZST00gdGVzdDNjaQor KSBzCitXSEVSRSBhc2NpaSh4KSA9IDk3CitPUkRFUiBCWSB4OworICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTdWJxdWVy eSBTY2FuIG9uIHMKKyAgIEZpbHRlcjogKGFzY2lpKHMueCkgPSA5NykKKyAgIC0+ICBXaW5kb3dB Z2cKKyAgICAgICAgIFdpbmRvdzogdzEgQVMgKFBBUlRJVElPTiBCWSB0ZXN0M2NpLngpCisgICAg ICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IHRlc3QzY2kueCBDT0xMQVRF IGNhc2VfaW5zZW5zaXRpdmUKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0ZXN0M2Np CisoNyByb3dzKQorCitTRUxFQ1QgeCwgcGFydF9jb3VudAorRlJPTSAoCisgIFNFTEVDVCB4LCBj b3VudCgqKSBPVkVSIChQQVJUSVRJT04gQlkgeCkgQVMgcGFydF9jb3VudAorICBGUk9NIHRlc3Qz Y2kKKykgcworV0hFUkUgYXNjaWkoeCkgPSA5NworT1JERVIgQlkgeDsKKyAgeCAgfCBwYXJ0X2Nv dW50IAorLS0tLS0rLS0tLS0tLS0tLS0tCisgYWJjIHwgICAgICAgICAgMgorKDEgcm93KQorCist LSBQb3NpdGl2ZTogZGV0ZXJtaW5pc3RpYyBwYXJ0aXRpb24ga2V5IHJldGFpbnMgdGhlIGV4aXN0 aW5nIHB1c2hkb3duIHBhdGgKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCB4LCBwYXJ0X2Nv dW50CitGUk9NICgKKyAgU0VMRUNUIHgsIGNvdW50KCopIE9WRVIgKFBBUlRJVElPTiBCWSB4KSBB UyBwYXJ0X2NvdW50CisgIEZST00gdGVzdDNjcworKSBzCitXSEVSRSB4ID0gJ2FiYycgQ09MTEFU RSBjYXNlX3NlbnNpdGl2ZQorT1JERVIgQlkgeDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBXaW5kb3dBZ2cKKyAgIFdpbmRv dzogdzEgQVMgKCkKKyAgIC0+ICBTZXEgU2NhbiBvbiB0ZXN0M2NzCisgICAgICAgICBGaWx0ZXI6 ICh4ID0gJ2FiYyc6OnRleHQgQ09MTEFURSBjYXNlX3NlbnNpdGl2ZSkKKyg0IHJvd3MpCisKK1NF TEVDVCB4LCBwYXJ0X2NvdW50CitGUk9NICgKKyAgU0VMRUNUIHgsIGNvdW50KCopIE9WRVIgKFBB UlRJVElPTiBCWSB4KSBBUyBwYXJ0X2NvdW50CisgIEZST00gdGVzdDNjcworKSBzCitXSEVSRSB4 ID0gJ2FiYycgQ09MTEFURSBjYXNlX3NlbnNpdGl2ZQorT1JERVIgQlkgeDsKKyAgeCAgfCBwYXJ0 X2NvdW50IAorLS0tLS0rLS0tLS0tLS0tLS0tCisgYWJjIHwgICAgICAgICAgMQorKDEgcm93KQor CiAtLSBicGNoYXIKIENSRUFURSBUQUJMRSB0ZXN0MWJwY2kgKHggY2hhcigzKSBDT0xMQVRFIGNh c2VfaW5zZW5zaXRpdmUpOwogQ1JFQVRFIFRBQkxFIHRlc3QyYnBjaSAoeCBjaGFyKDMpIENPTExB VEUgY2FzZV9pbnNlbnNpdGl2ZSk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9j b2xsYXRlLmljdS51dGY4LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbGxhdGUuaWN1LnV0 Zjguc3FsCmluZGV4IDE4YzQ3ZTZlMDVhLi5hYmNiMzAxNDk2NyAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvY29sbGF0ZS5pY3UudXRmOC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvY29sbGF0ZS5pY3UudXRmOC5zcWwKQEAgLTgyNiw2ICs4MjYsNjMgQEAgRVhQTEFJTiAo Q09TVFMgT0ZGKQogU0VMRUNUIHgsIGNvdW50KCopIEZST00gdGVzdDNjcyBHUk9VUCBCWSB4IEhB VklORyB4ID0gJ2FiYycgQ09MTEFURSBjYXNlX2luc2Vuc2l0aXZlIE9SREVSIEJZIDE7CiBTRUxF Q1QgeCwgY291bnQoKikgRlJPTSB0ZXN0M2NzIEdST1VQIEJZIHggSEFWSU5HIHggPSAnYWJjJyBD T0xMQVRFIGNhc2VfaW5zZW5zaXRpdmUgT1JERVIgQlkgMTsKIAorLS0gVGVzdCBxdWFsIHB1c2hk b3duIHdpdGggd2luZG93IGZ1bmN0aW9ucyBhbmQgbm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25z LgorLS0gV2hlbiB0aGUgd2luZG93IHBhcnRpdGlvbiBrZXkgdXNlcyBhIG5vbmRldGVybWluaXN0 aWMgY29sbGF0aW9uLCBhbiB1cHBlcgorLS0gcXVhbCB0aGF0IHJlZmVyZW5jZXMgdGhlIHBhcnRp dGlvbiBrZXkgbXVzdCBub3QgYmUgcHVzaGVkIGJlbG93IFdpbmRvd0FnZywKKy0tIG90aGVyd2lz ZSBpdCBjYW4gcmVtb3ZlIHNvbWUgYnV0IG5vdCBhbGwgcm93cyBmcm9tIGEgd2luZG93IHBhcnRp dGlvbi4KKworLS0gTmVnYXRpdmU6IGNvbmZsaWN0aW5nIGNvbGxhdGlvbiwgcXVhbCBtdXN0IHN0 YXkgYWJvdmUgV2luZG93QWdnCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgeCwgcGFydF9j b3VudAorRlJPTSAoCisgIFNFTEVDVCB4LCBjb3VudCgqKSBPVkVSIChQQVJUSVRJT04gQlkgeCkg QVMgcGFydF9jb3VudAorICBGUk9NIHRlc3QzY2kKKykgcworV0hFUkUgeCA9ICdhYmMnIENPTExB VEUgY2FzZV9zZW5zaXRpdmUKK09SREVSIEJZIHg7CitTRUxFQ1QgeCwgcGFydF9jb3VudAorRlJP TSAoCisgIFNFTEVDVCB4LCBjb3VudCgqKSBPVkVSIChQQVJUSVRJT04gQlkgeCkgQVMgcGFydF9j b3VudAorICBGUk9NIHRlc3QzY2kKKykgcworV0hFUkUgeCA9ICdhYmMnIENPTExBVEUgY2FzZV9z ZW5zaXRpdmUKK09SREVSIEJZIHg7CisKKy0tIE5lZ2F0aXZlOiBub24tY29sbGF0aW9uLWF3YXJl IGV4cHJlc3Npb24gY2FuIHN0aWxsIGRpc3Rpbmd1aXNoIHJvd3MgdGhhdAorLS0gdGhlIG5vbmRl dGVybWluaXN0aWMgcGFydGl0aW9uIGVxdWFsaXR5IGNvbnNpZGVycyBlcXVhbC4KK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCB4LCBwYXJ0X2NvdW50CitGUk9NICgKKyAgU0VMRUNUIHgsIGNv dW50KCopIE9WRVIgKFBBUlRJVElPTiBCWSB4KSBBUyBwYXJ0X2NvdW50CisgIEZST00gdGVzdDNj aQorKSBzCitXSEVSRSBhc2NpaSh4KSA9IDk3CitPUkRFUiBCWSB4OworU0VMRUNUIHgsIHBhcnRf Y291bnQKK0ZST00gKAorICBTRUxFQ1QgeCwgY291bnQoKikgT1ZFUiAoUEFSVElUSU9OIEJZIHgp IEFTIHBhcnRfY291bnQKKyAgRlJPTSB0ZXN0M2NpCispIHMKK1dIRVJFIGFzY2lpKHgpID0gOTcK K09SREVSIEJZIHg7CisKKy0tIFBvc2l0aXZlOiBkZXRlcm1pbmlzdGljIHBhcnRpdGlvbiBrZXkg cmV0YWlucyB0aGUgZXhpc3RpbmcgcHVzaGRvd24gcGF0aAorRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUIHgsIHBhcnRfY291bnQKK0ZST00gKAorICBTRUxFQ1QgeCwgY291bnQoKikgT1ZFUiAo UEFSVElUSU9OIEJZIHgpIEFTIHBhcnRfY291bnQKKyAgRlJPTSB0ZXN0M2NzCispIHMKK1dIRVJF IHggPSAnYWJjJyBDT0xMQVRFIGNhc2Vfc2Vuc2l0aXZlCitPUkRFUiBCWSB4OworU0VMRUNUIHgs IHBhcnRfY291bnQKK0ZST00gKAorICBTRUxFQ1QgeCwgY291bnQoKikgT1ZFUiAoUEFSVElUSU9O IEJZIHgpIEFTIHBhcnRfY291bnQKKyAgRlJPTSB0ZXN0M2NzCispIHMKK1dIRVJFIHggPSAnYWJj JyBDT0xMQVRFIGNhc2Vfc2Vuc2l0aXZlCitPUkRFUiBCWSB4OworCiAtLSBicGNoYXIKIENSRUFU RSBUQUJMRSB0ZXN0MWJwY2kgKHggY2hhcigzKSBDT0xMQVRFIGNhc2VfaW5zZW5zaXRpdmUpOwog Q1JFQVRFIFRBQkxFIHRlc3QyYnBjaSAoeCBjaGFyKDMpIENPTExBVEUgY2FzZV9pbnNlbnNpdGl2 ZSk7Ci0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= --_004_544F36730EC944409FC54BB4F0AA3037outlookcom_--