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 1wi7XF-0001Wq-1Q for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Jul 2026 09:28:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wi7XD-00H9Km-2v for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Jul 2026 09:28:40 +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 1wi7XD-00H9Ke-1w for pgsql-hackers@lists.postgresql.org; Fri, 10 Jul 2026 09:28:40 +0000 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wi7XB-00000000d5A-2D9f for pgsql-hackers@lists.postgresql.org; Fri, 10 Jul 2026 09:28:40 +0000 Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-2cc61541f8cso24143145ad.0 for ; Fri, 10 Jul 2026 02:28:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783675716; cv=none; d=google.com; s=arc-20260327; b=ehfx65smbTCa5N2N3rhfleyjyIK6HzdpazXKFneVGEy5HKFxQs1HAu+zVfbfg36W1s hopRhCD6Zy1Eg9uG/NkWWklArBgXRQpVz4gIOcJIUQQgmj1kA3OMQ5ueDq7PP1R5SbrK ePAyaOb2GWH/pNwVXlYuUg80cEc68CIGCsORImkT9YNa3uGRMn2xSkNiLj1ot+3K7zT/ IEVpjfVSUpeiSE7o/HfgKG46Q0ze0ZPK2wDe8vEsFDJs5bvQbbGjfPBsqsy3fCoha0Tc HUhirNtO98XpJRKdGX3+zrW2cWvPIFix1ec039wSSRvaUyq+4BeQcM1P9Bpu0RT0YVox J7kg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=/nZ9DIZEDBeb505P0ot8LFYycWteZfNyBkuqtZz/7uw=; fh=nwNxTtLLPTU0ewfLM7SSbrjMajMl+wwnFkCY/fi90vE=; b=lovP/OMk6pptDCRkvbxHCrLlbt98S4KG24ViWH1MBaySPgGd3jF6JaN9LmWohvi3zu mKFFkv4lV2f3Ahhe2l2TqK8SQ1M0wSkVZkl/RY8Qs4gQc6XeLlBLNglPAnoRrRuXLL8i 9c2TvHSZ/2K5ku63Lp82T+TLpdWmv3VOYzRlYKCU6q7jLkTLtvqJ4n2eroHUoK18EvmH Lsr81Zy84DLjgVttjtPjwKbCnwSHcJ8UUtMBu1ta9api9R0tYXKLTVMuXRyD0vSUe0d5 frPwokasp9zOx7+bGFJpLBF33+O6NZOZ3XGVU7h3QTd/tDE0gbFaF4Slmi/pdeFWah7f yShw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783675716; x=1784280516; darn=lists.postgresql.org; h=content-type:to:subject:message-id:date:from:mime-version:from:to :cc:subject:date:message-id:reply-to:content-type; bh=/nZ9DIZEDBeb505P0ot8LFYycWteZfNyBkuqtZz/7uw=; b=HmknYLqg+3B5vVifpZvPIfXLiVz4onU2c4V0KA2RXoIu97xrAZzKbpRO3NSBo7L8Xx igOfCg7OszoZxsD1xqQi5oDdQwYW/rifnyMfRZMWSDSv1QX1/AO9saiPl73MZxD6pjDL /0pG/YofL8eUoEkJ2Nywg44/iLLh8+zr1ipQgjN5eUAG43zezrjZwpVUSMiFxtje6bUW RYeLtU5y9AQ6Xrjt3W6UB8TT8kadPfY8zElPbglZVwy6PsXfk2jbBkH1r65DQHgyxp1S ZFaEbbDMBNMsBFWT3bnecP0WfyjKvCFXXDtCkGiWJmpUodeMhK6ygffDLak/sHn54+dT XL2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783675716; x=1784280516; h=content-type:to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=/nZ9DIZEDBeb505P0ot8LFYycWteZfNyBkuqtZz/7uw=; b=PqweZf3TT0HUaote0smA9WhuJBD0TwCZlEsSPdPdOjzgHf9mgVbmN/vaC/xVZfPmsD +Whj9OuO7xDLNYfimA9usedPVCvX7fQj9NKyoJPS7kZUhJC6kAZ8K8UEcZSAOsuk/kVH FNH5g9nDCOO8rVgJL5CH3fEj86XP6aZeQ373O8/XuW7X6akNvO2Bk0zJrO8qf3JtM0sI hHHd9Fxzkb7cWFsr/rUmLyTJFkqhdk2l+5unLDhXeKNst/Y7mR2Y/2xIsaNjkhIYql99 1ERT/S3Cwuow+bhU0xxuHwzWc4lqDvyC/BR4ZlE9s6LE/q3Kf2UQCPnCEgXC4DTDnbBD QtsQ== X-Gm-Message-State: AOJu0YzqPOMjG0XkoJeNhOLouFA9FYz+JcY1pLv1RWq+NrF/hU/xqpl5 DKqx5d3ktXHTTqzb+JriTqSAV08ARbcYhI21Zb0wy4iY7oXMMB3N2YpwkJOE1cUHLiBQdGwu6iv 0PkWWG0l2eIeX0aad7PK6TE1iYC1dsYSuLtjj X-Gm-Gg: AfdE7cm5uKre6tvfuhGXbOXtu/KUc3b3orwUF7VmtiFqPJAaOUqplIUiEo75C6m4CoY 6g5PAwJoxQo4HAEutZJqqyibsUoodg6qwdb21VyONhsvvZ6Jnu6ejePuwvzI0Ym0pE84f2aNddr 5N7CC4aGYDE9q9pr7zrWEsPQwx5eoDA/gK05d/R7890EHcB8I3AQ9TT6Y9QQUzc2q/b1JTFLYZV OB1zg8MFLCUMztVzaYRF8YdVK4oMbsgxXL+p1ubKewZFz02XsFmAOiNMEZjmhQPHEj9NSf+ X-Received: by 2002:a17:903:468b:b0:2b0:badc:c9cf with SMTP id d9443c01a7336-2ce828a8a20mr30395045ad.13.1783675715547; Fri, 10 Jul 2026 02:28:35 -0700 (PDT) MIME-Version: 1.0 From: Kwangwon Seo Date: Fri, 10 Jul 2026 18:28:23 +0900 X-Gm-Features: AVVi8Ce9-2uq6_rHun3L9OIE_8CoHJxFrazlLXnZEeEcHm7h5ktuO72nhpf5fSw Message-ID: Subject: [PATCH] Fix quotation logic for unreserved keywords in window specifications To: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000006b8c7a06563e5df9" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006b8c7a06563e5df9 Content-Type: multipart/alternative; boundary="0000000000006b8c7906563e5df7" --0000000000006b8c7906563e5df7 Content-Type: text/plain; charset="UTF-8" Hi hackers, I was testing views with pg_dump/pg_restore and found a case where an unreserved keyword is not quoted correctly. example: -- Just a base table CREATE TABLE t (v int); INSERT INTO t VALUES (1), (2); -- Create a view CREATE VIEW v AS SELECT count(*) OVER w2 FROM t WINDOW "rows" AS (PARTITION BY v), w2 AS ("rows" ORDER BY v); But the problem is, here, that quotation is gone. -- Problem: Quotation is disappared SELECT pg_get_viewdef('v'); pg_get_viewdef ------------------------------------------------------------- SELECT count(*) OVER w2 AS count + FROM t + WINDOW rows AS (PARTITION BY v), w2 AS (rows ORDER BY v); (1 row) -- If you use this for recovering the view above, You'll face this error. SELECT count(*) OVER w2 AS count FROM t WINDOW rows AS (PARTITION BY v), w2 AS (rows ORDER BY v); ERROR: syntax error at or near "ORDER" LINE 3: WINDOW rows AS (PARTITION BY v), w2 AS (rows ORDER BY v); This breaks pg_dump/restore: the view is lost. As a result, pg_dump/pg_restore cannot restore the view successfully. Fortunately, I found this comment in the gram.y: It says: * If we see PARTITION, RANGE, ROWS or GROUPS as the first token after the '(' * of a window_specification, we want the assumption to be that there is * no existing_window_name; but those keywords are unreserved and so could * be ColIds. I think that assumption can be broken when inheritance is used across multiple window definitions. I mean this: w2 AS ("rows" ORDER BY v) Some comments for patch file: The attached patch quotes the window name when it is a keyword in get_rule_windowspec(). Output for ordinary window names is unchanged. The window definition itself is a ColId so no change is needed there; only the refname is quoted. Maybe this is a known thing on the team's side, but I think, at least, should not break compatibility with current tools. That is the motivation of this patch... I'd appreciate any feedback or suggestions...!! Best regards... --0000000000006b8c7906563e5df7 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi hackers,

<= /div>
I was testing views with pg_dump/pg_restore and found a case wher= e an unreserved keyword is not quoted correctly.

example:
=
-- Just a base table
CREATE TABLE t (v int);
=
INSERT INTO t VALUES (1), (2);

-- Create a vi= ew
CREATE VIEW v AS
SELECT count(*) OVER w2 FROM t
WINDOW &= quot;rows" AS (PARTITION BY v), w2 AS ("rows" ORDER BY v);

But the problem is, here, that quotation= is gone.

-- Problem: Quotat= ion is disappared
SELECT pg_get_viewdef('v');
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0pg_get_viewdef =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0
-------------------------------------= ------------------------
=C2=A0 SELECT count(*) OVER w2 AS count =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0+
=C2=A0 =C2=A0 FROM t =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0+
=C2=A0 = =C2=A0WINDOW rows AS (PARTITION BY v), w2 AS (rows ORDER BY v);
(1 row)<= /div>

-- If you use this for recovering the view above, = You'll face this error.
=C2=A0SELECT count(*) OVER w2 AS coun= t
=C2=A0 =C2=A0 =C2=A0 =C2=A0 FROM t
=C2=A0 =C2=A0 =C2=A0 =C2=A0 WIND= OW rows AS (PARTITION BY v), w2 AS (rows ORDER BY v);
ERROR: =C2=A0synta= x error at or near "ORDER"
LINE 3: =C2=A0WINDOW rows AS (PARTI= TION BY v), w2 AS (rows ORDER BY v);

This breaks pg_dump/restore: the view is lost.
As a= result, pg_dump/pg_restore cannot restore the view successfully.
=


Fortunately,=C2=A0I= found this comment in the gram.y:

It s= ays:

=C2=A0* If we see PARTITION, RANGE= , ROWS or GROUPS as the first token after the '('
=C2=A0* of a w= indow_specification, we want the assumption to be that there is
=C2=A0* = no existing_window_name; but those keywords are unreserved and so could
= =C2=A0* be ColIds.

I think that assumpt= ion can be broken when inheritance is=C2=A0used across=C2=A0multiple window= definitions.
I mean this: w2 AS ("rows" ORDER BY v)


Some comments for patch file:

The attached = patch quotes the window name when it is a keyword in=C2=A0get_rule_windowsp= ec().
Output for ordinary window names is unchanged. The window d= efinition itself is a ColId=C2=A0so no change is needed there; only the=C2= =A0refname=C2=A0is quoted.

Maybe t= his is a known thing on the team's side, but I think, at least, should = not break=C2=A0
compatibility with current tools.=C2=A0That is th= e motivation of this patch...

I&#= 39;d appreciate any feedback or suggestions...!!

<= br>Best regards...
--0000000000006b8c7906563e5df7-- --0000000000006b8c7a06563e5df9 Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0001-Fix-quotation-logic-for-unreserved-keywords-in-wi.patch" Content-Disposition: attachment; filename="v1-0001-Fix-quotation-logic-for-unreserved-keywords-in-wi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mreq8c8b0 RnJvbSA3MmMwZGQwZWE3ODE1NWRhYTM0ODg0NWZjZDc0YjkxMDJhNDA0MDU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBLd2FuZ3dvbiBTZW8gPGFuY2hvdnlzZW9AZ21haWwuY29tPgpE YXRlOiBGcmksIDEwIEp1bCAyMDI2IDE2OjI2OjMzICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MV0g Rml4IHF1b3RhdGlvbiBsb2dpYyBmb3IgdW5yZXNlcnZlZCBrZXl3b3JkcyBpbiB3aW5kb3cKIHNw ZWNpZmljYXRpb25zCgotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAgICB8 IDMwICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvd2luZG93Lm91dCB8IDEyICsrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC93aW5k b3cuc3FsICAgICAgfCAgNyArKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDQ4IGluc2VydGlvbnMo KyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVs ZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKaW5kZXggODE5NjMx NzgxYzAuLjYwODRiNDhmNDM1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVs ZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCkBAIC00NTAs NiArNDUwLDcgQEAgc3RhdGljIHZvaWQgZ2V0X3J1bGVfb3JkZXJieShMaXN0ICpvcmRlckxpc3Qs IExpc3QgKnRhcmdldExpc3QsCiBzdGF0aWMgdm9pZCBnZXRfcnVsZV93aW5kb3djbGF1c2UoUXVl cnkgKnF1ZXJ5LCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIHZvaWQgZ2V0X3J1 bGVfd2luZG93c3BlYyhXaW5kb3dDbGF1c2UgKndjLCBMaXN0ICp0YXJnZXRMaXN0LAogCQkJCQkJ CQlkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOworc3RhdGljIHZvaWQgYXBwZW5kV2luZG93UmVm TmFtZShTdHJpbmdJbmZvIGJ1ZiwgY29uc3QgY2hhciAqcmVmbmFtZSk7CiBzdGF0aWMgdm9pZCBn ZXRfd2luZG93X2ZyYW1lX29wdGlvbnMoaW50IGZyYW1lT3B0aW9ucywKIAkJCQkJCQkJCSBOb2Rl ICpzdGFydE9mZnNldCwgTm9kZSAqZW5kT2Zmc2V0LAogCQkJCQkJCQkJIGRlcGFyc2VfY29udGV4 dCAqY29udGV4dCk7CkBAIC03MTU5LDcgKzcxNjAsNyBAQCBnZXRfcnVsZV93aW5kb3dzcGVjKFdp bmRvd0NsYXVzZSAqd2MsIExpc3QgKnRhcmdldExpc3QsCiAJYXBwZW5kU3RyaW5nSW5mb0NoYXIo YnVmLCAnKCcpOwogCWlmICh3Yy0+cmVmbmFtZSkKIAl7Ci0JCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoYnVmLCBxdW90ZV9pZGVudGlmaWVyKHdjLT5yZWZuYW1lKSk7CisJCWFwcGVuZFdpbmRvd1Jl Zk5hbWUoYnVmLCB3Yy0+cmVmbmFtZSk7CiAJCW5lZWRzcGFjZSA9IHRydWU7CiAJfQogCS8qIHBh cnRpdGlvbiBjbGF1c2VzIGFyZSBhbHdheXMgaW5oZXJpdGVkLCBzbyBvbmx5IHByaW50IGlmIG5v IHJlZm5hbWUgKi8KQEAgLTcyMDEsNiArNzIwMiwzMyBAQCBnZXRfcnVsZV93aW5kb3dzcGVjKFdp bmRvd0NsYXVzZSAqd2MsIExpc3QgKnRhcmdldExpc3QsCiAJYXBwZW5kU3RyaW5nSW5mb0NoYXIo YnVmLCAnKScpOwogfQogCisvKgorICogRW1pdCB0aGUgbmFtZSBvZiB0aGUgd2luZG93IGRlZmlu aXRpb24uCisgKgorICogUEFSVElUSU9OLCBSQU5HRSwgUk9XUywgYW5kIEdST1VQUyBoYXZlIHRo ZSBzYW1lIHByZWNlZGVuY2UgYXMgSURFTlQKKyAqIGF0IHRoZSBzdGFydCBvZiBhIHdpbmRvdyBz cGVjaWZpY2F0aW9uLCBwcmV2ZW50aW5nIHRoZW0gZnJvbSBiZWluZworICogcmVjb2duaXplZCBh cyBhbiBleGlzdGluZ193aW5kb3dfbmFtZSAoc2VlIG9wdF9leGlzdGluZ193aW5kb3dfbmFtZQor ICogaW4gZ3JhbS55KS4gU2luY2UgdGhlc2UgYXJlIHVucmVzZXJ2ZWQga2V5d29yZHMsIHF1b3Rl X2lkZW50aWZpZXIoKQorICogZG9lcyBub3QgcXVvdGUgdGhlbSwgY2F1c2luZyB0aGUgZ2VuZXJh dGVkIFNRTCB0byBmYWlsIHdoZW4gcmVwYXJzZWQuCisgKiBUaGVyZWZvcmUsIHF1b3RlIGFueSBr ZXl3b3JkIGhlcmUgcmF0aGVyIHRoYW4gbWFpbnRhaW5pbmcgYSBsaXN0LgorICovCitzdGF0aWMg dm9pZAorYXBwZW5kV2luZG93UmVmTmFtZShTdHJpbmdJbmZvIGJ1ZiwgY29uc3QgY2hhciAqcmVm bmFtZSkKK3sKKwljb25zdCBjaGFyICpxdW90ZWQgPSBxdW90ZV9pZGVudGlmaWVyKHJlZm5hbWUp OworCisJaWYgKHF1b3RlZCA9PSByZWZuYW1lICYmCisJCVNjYW5LZXl3b3JkTG9va3VwKHJlZm5h bWUsICZTY2FuS2V5d29yZHMpID49IDApCisJeworCQkvKiBxdW90ZV9pZGVudGlmaWVyKCkgbGVm dCBpdCBiYXJlLCBzbyBpdCBuZWVkcyBubyBlc2NhcGluZyAqLworCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcihidWYsICciJyk7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCByZWZuYW1lKTsK KwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnIicpOworCX0KKwllbHNlCisJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZWQpOworfQorCiAvKgogICogQXBwZW5kIHRoZSBkZXNj cmlwdGlvbiBvZiBhIHdpbmRvdydzIGZyYW1pbmcgb3B0aW9ucyB0byBjb250ZXh0LT5idWYKICAq LwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aW5kb3cub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aW5kb3cub3V0CmluZGV4IGMwYmRlMWM1ZWVjLi41MDgw YjQxNWUwYiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aW5kb3cub3V0 CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2luZG93Lm91dApAQCAtMTM2MSw2ICsx MzYxLDE4IEBAIFNFTEVDVCBwZ19nZXRfdmlld2RlZigndl93aW5kb3cnKTsKICAgICBGUk9NIGdl bmVyYXRlX3Nlcmllcyhub3coKSwgKG5vdygpICsgJ0AgMTAwIGRheXMnOjppbnRlcnZhbCksICdA IDEgaG91cic6OmludGVydmFsKSBpKGkpOwogKDEgcm93KQogCistLSBBIHdpbmRvdyBuYW1lIHRo YXQgaXMgYW4gdW5yZXNlcnZlZCBrZXl3b3JkIGNhbm5vdCBiZSBhbiBleGlzdGluZ193aW5kb3df bmFtZQorQ1JFQVRFIFRFTVAgVklFVyB2Ml93aW5kb3dfdW5yZXNlcnZlZF9rdyBBUworCVNFTEVD VCBjb3VudCgqKSBPVkVSIHcyIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEpIHModikKKyAgV0lO RE9XICJyb3dzIiBBUyAoUEFSVElUSU9OIEJZIHYpLCB3MiBBUyAoInJvd3MiIE9SREVSIEJZIHYp OworU0VMRUNUIHBnX2dldF92aWV3ZGVmKCd2Ml93aW5kb3dfdW5yZXNlcnZlZF9rdycpOworICAg ICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3ZpZXdkZWYgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgU0VMRUNUIGNvdW50KCopIE9WRVIgdzIgQVMgY291bnQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKworICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEpIHModikg ICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICBXSU5ET1cgcm93cyBBUyAoUEFSVElUSU9O IEJZIHYpLCB3MiBBUyAoInJvd3MiIE9SREVSIEJZIHYpOworKDEgcm93KQorCiAtLSB0ZXN0IG92 ZXJmbG93IGZyYW1lIHNwZWNpZmljYXRpb25zCiBTRUxFQ1Qgc3VtKHVuaXF1ZTEpIG92ZXIgKHJv d3MgYmV0d2VlbiBjdXJyZW50IHJvdyBhbmQgOTIyMzM3MjAzNjg1NDc3NTgwNyBmb2xsb3dpbmcg ZXhjbHVkZSBjdXJyZW50IHJvdyksCiAJdW5pcXVlMSwgZm91cgpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvd2luZG93LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3dpbmRvdy5z cWwKaW5kZXggOGU2ZjkyZDk0YzcuLjM5NmI5NWQwZDM5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC93aW5kb3cuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3dpbmRvdy5z cWwKQEAgLTMzMCw2ICszMzAsMTMgQEAgQ1JFQVRFIFRFTVAgVklFVyB2X3dpbmRvdyBBUwogCiBT RUxFQ1QgcGdfZ2V0X3ZpZXdkZWYoJ3Zfd2luZG93Jyk7CiAKKy0tIEEgd2luZG93IG5hbWUgdGhh dCBpcyBhbiB1bnJlc2VydmVkIGtleXdvcmQgY2Fubm90IGJlIGFuIGV4aXN0aW5nX3dpbmRvd19u YW1lCitDUkVBVEUgVEVNUCBWSUVXIHYyX3dpbmRvd191bnJlc2VydmVkX2t3IEFTCisJU0VMRUNU IGNvdW50KCopIE9WRVIgdzIgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMSkgcyh2KQorICBXSU5E T1cgInJvd3MiIEFTIChQQVJUSVRJT04gQlkgdiksIHcyIEFTICgicm93cyIgT1JERVIgQlkgdik7 CisKK1NFTEVDVCBwZ19nZXRfdmlld2RlZigndjJfd2luZG93X3VucmVzZXJ2ZWRfa3cnKTsKKwog LS0gdGVzdCBvdmVyZmxvdyBmcmFtZSBzcGVjaWZpY2F0aW9ucwogU0VMRUNUIHN1bSh1bmlxdWUx KSBvdmVyIChyb3dzIGJldHdlZW4gY3VycmVudCByb3cgYW5kIDkyMjMzNzIwMzY4NTQ3NzU4MDcg Zm9sbG93aW5nIGV4Y2x1ZGUgY3VycmVudCByb3cpLAogCXVuaXF1ZTEsIGZvdXIKLS0gCjIuNTIu MAoK --0000000000006b8c7a06563e5df9--