Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p33HP-0003YI-Qs for pgsql-bugs@arkaria.postgresql.org; Wed, 07 Dec 2022 22:52:44 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1p33HO-0003VI-M8 for pgsql-bugs@arkaria.postgresql.org; Wed, 07 Dec 2022 22:52:42 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p33HO-0003V9-8o for pgsql-bugs@lists.postgresql.org; Wed, 07 Dec 2022 22:52:42 +0000 Received: from mail-ej1-x629.google.com ([2a00:1450:4864:20::629]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1p33HM-00022l-0g for pgsql-bugs@lists.postgresql.org; Wed, 07 Dec 2022 22:52:41 +0000 Received: by mail-ej1-x629.google.com with SMTP id n20so17579551ejh.0 for ; Wed, 07 Dec 2022 14:52:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=6Sq5YdE602bX37KIoZN4Q2jiDyCHPGZPHDcbtSNbz0E=; b=gElPsmFs8riYo/XVT8EDa56XLoNjXo3mJkhI6pBz3NwrTlrJPblYRYBEWqNeqv8q8z xTTYYwA/xXYMhHjs5Y9b3GVvY9ye1gXkA7cMOFJAioALTAR7A0D8J405ch7jDh84Da6q IppFKFLjZLeC4yhUdqjzOexiJgDa/632CSieAmYZ7JxJq9LhcRyJ7MYXrYZ/8HnHhBnr 5Hm9J+DQfUtOJogD0+yroJfXkllL1H3betCXG1BPwqny+OeN8esQ1tRqzQzU/CFk+X+0 suwn+RHd2T8719Tk5ubt4qCFqKoLUzVn+l+Pk8ruQ5+WxMRQMjiFkJlfdf0DIQcQD7dg 03Sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=6Sq5YdE602bX37KIoZN4Q2jiDyCHPGZPHDcbtSNbz0E=; b=nZqjEUd0YkA6HyX9ihhAr/os618c5t7IiH9OiPPESSG85auy52SOCeBKEvXPeT3zdz lUKhMkxdcQJwE/EDO3e3rprGG+EAZtXFgcfUu+z0kc6xSSzKutE9GSSSCUF97rn0Z2oZ UAEV4OuPUSeoaXeFCrqqjmeXWS+PR2foTcSnrsPPxNY9yWOPPmkbpjrk2D/0HKTZ7/C2 XuJduO3piikkjKqtJ+G27DzI7g+cXwLqPIdzTGmaIt8DkCKtbSE+NaC9VbZvhgh5nsUZ kJRLRP6exiLh+uajYKlfOsgYUauNd+sqcSD65Q7e3l3sqx5QHb72E44WI6hDTE55N8ZN rf4Q== X-Gm-Message-State: ANoB5pkW4OxaYkH2C343xU/TeD+byNt/TprWy1jnHG3q6wkh1xawWDsx 76QTguZK36lAxPpzUssmNZiyS1xryy3yy5pT51c= X-Google-Smtp-Source: AA0mqf4g2p73hMGgA3FD82+BdUE72FRaO2yFO7p00PjRNo3itHFkAZg50pjz/Xdwff/DBIG/4r7OokRO75lr2yDHLZI= X-Received: by 2002:a17:906:6149:b0:78d:a154:ae with SMTP id p9-20020a170906614900b0078da15400aemr61946176ejl.259.1670453557529; Wed, 07 Dec 2022 14:52:37 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: "David G. Johnston" Date: Wed, 7 Dec 2022 15:52:20 -0700 Message-ID: Subject: Re: Bug in jsonb_path_exists (maybe _match) one-element scalar/variable jsonpath handling To: Alexander Korotkov Cc: Tom Lane , PostgreSQL Bug List Content-Type: multipart/mixed; boundary="000000000000e9837205ef44c66c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e9837205ef44c66c Content-Type: multipart/alternative; boundary="000000000000e9836e05ef44c66a" --000000000000e9836e05ef44c66a Content-Type: text/plain; charset="UTF-8" On Mon, Dec 5, 2022 at 4:58 PM Alexander Korotkov wrote: > On Fri, Dec 2, 2022 at 3:18 PM Alexander Korotkov > wrote: > > Draft patch fixing the issue is attached. Let me know what you think > > about this. > > Revised patch is attached, wrong pfree() is fixed. I was intended to > backpatch it. But the behavior change makes me uneasy. > > select * from jsonb_path_query('{"a": 10}', '$ ? (@.a < $value)'); > > Currently, this query generates an error because of missing "value" > variable. The patch suppress this error. I'm not sure this error > should be suppressed. Especially, I'm sure this should be > backpatched. > > Should we fix only existence checking behaviour and let other cases > throw an error? Thoughts? > > I've attached some additional regression test changes to formally document what it is we are affecting here. The "false" ones seems like it can stand-in for all of the types left behind when the variable one got moved to its own case. The regressions.diffs file is the changes made by the 0001 patch. Instead of making everything that today correctly produces a "could not find jsonpath variable" error behave in a non-error way we need to make _exists produce the exact same error. Aside from seemingly being correct on its own merits, it is superior to turning what was a true outcome to a false outcome, which is much more likely to go unnoticed and cause people grief. I feel like we are not adequately testing the "jspGetNext" true outcome of the variable path but I still haven't fully gotten my head around the code. The behavior of the introduced constant false jsonpath expression seems internally consistent. Fixing the documentation to make it clear how such an unusual but acceptable jsonpath expression behaves is material for a separate patch. David J. --000000000000e9836e05ef44c66a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Mon, Dec 5, 2022 at 4:58 PM Alexander Korotkov <aekorotkov@gmail.com> wrote:
On Fri, Dec 2, 2022 at 3:18 PM Alexander Korotkov <= aekorotkov@gmail.= com> wrote:
> Draft patch fixing the issue is attached.=C2=A0 Let me know what you t= hink
> about this.

Revised patch is attached, wrong pfree() is fixed.=C2=A0 I was intended to<= br> backpatch it.=C2=A0 But the behavior change makes me uneasy.

select * from jsonb_path_query('{"a": 10}', '$ ? (@.a= < $value)');

Currently, this query generates an error because of missing "value&quo= t;
variable.=C2=A0 The patch suppress this error.=C2=A0 I'm not sure this = error
should be suppressed.=C2=A0 Especially, I'm sure this should be
backpatched.

Should we fix only existence checking behaviour and let other cases
throw an error?=C2=A0 Thoughts?


= I've attached some additional regression test changes to formally docum= ent what it is we are affecting here.=C2=A0 The "false" ones seem= s like it can stand-in for all of the types left behind when the variable o= ne got moved to its own case.

The regressions.diffs fi= le is the changes made by the 0001 patch.

Instea= d of making everything that today correctly produces a "could not find= jsonpath variable" error behave in a non-error way we need to make _e= xists produce the exact same error.=C2=A0 Aside from seemingly being correc= t on its own merits, it is superior to turning what was a true outcome to a= false outcome, which is much more likely to go unnoticed and cause people = grief.

I feel like we are no= t adequately testing the "jspGetNext" true outcome of the variabl= e path but I still haven't fully gotten my head around the code.=

The behavior of the introduced con= stant false jsonpath expression seems internally consistent.=C2=A0 Fixing t= he documentation to make it clear how such an unusual but acceptable jsonpa= th expression behaves is material for a separate patch.
David J.

--000000000000e9836e05ef44c66a-- --000000000000e9837205ef44c66c Content-Type: application/octet-stream; name="regression.diffs" Content-Disposition: attachment; filename="regression.diffs" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbe8cbo01 ZGlmZiAtVTMgL2hvbWUvdmFncmFudC9wb3N0Z3Jlcy9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2pzb25iX2pzb25wYXRoLm91dCAvaG9tZS92YWdyYW50L3Bvc3RncmVzL3NyYy90ZXN0L3JlZ3Jl c3MvcmVzdWx0cy9qc29uYl9qc29ucGF0aC5vdXQKLS0tIC9ob21lL3ZhZ3JhbnQvcG9zdGdyZXMv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9qc29ucGF0aC5vdXQJMjAyMi0xMi0wNyAy MjozMjoyMi4yMzkwODc4OTEgKzAwMDAKKysrIC9ob21lL3ZhZ3JhbnQvcG9zdGdyZXMvc3JjL3Rl c3QvcmVncmVzcy9yZXN1bHRzL2pzb25iX2pzb25wYXRoLm91dAkyMDIyLTEyLTA3IDIyOjMzOjI3 LjUzOTk2OTI3NCArMDAwMApAQCAtNDg2LDcgKzQ4NiwxMCBAQAogKDEgcm93KQogCiBzZWxlY3Qg KiBmcm9tIGpzb25iX3BhdGhfcXVlcnkoJ3siYSI6IDEwfScsICckID8gKEAuYSA8ICR2YWx1ZSkn KTsKLUVSUk9SOiAgY291bGQgbm90IGZpbmQganNvbnBhdGggdmFyaWFibGUgInZhbHVlIgorIGpz b25iX3BhdGhfcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0KKygwIHJvd3MpCisKIHNlbGVjdCAq IGZyb20ganNvbmJfcGF0aF9xdWVyeSgneyJhIjogMTB9JywgJyQgPyAoQC5hIDwgJHZhbHVlKScs ICcxJyk7CiBFUlJPUjogICJ2YXJzIiBhcmd1bWVudCBpcyBub3QgYW4gb2JqZWN0CiBERVRBSUw6 ICBKc29ucGF0aCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBlbmNvZGVkIGFzIGtleS12YWx1ZSBwYWly cyBvZiAidmFycyIgb2JqZWN0LgpAQCAtMjIxMyw3ICsyMjE2LDEwIEBACiAoMCByb3dzKQogCiBT RUxFQ1QganNvbmJfcGF0aF9xdWVyeSgnW3siYSI6IDF9XScsICckdW5kZWZpbmVkX3ZhcicpOwot RVJST1I6ICBjb3VsZCBub3QgZmluZCBqc29ucGF0aCB2YXJpYWJsZSAidW5kZWZpbmVkX3ZhciIK KyBqc29uYl9wYXRoX3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tCisoMCByb3dzKQorCiBTRUxF Q1QganNvbmJfcGF0aF9xdWVyeSgnW3siYSI6IDF9XScsICdmYWxzZScpOwogIGpzb25iX3BhdGhf cXVlcnkgCiAtLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIyOTEsNyArMjI5NywxMSBAQAogKDEgcm93 KQogCiBTRUxFQ1QganNvbmJfcGF0aF9xdWVyeV9maXJzdCgnW3siYSI6IDF9XScsICckdW5kZWZp bmVkX3ZhcicpOwotRVJST1I6ICBjb3VsZCBub3QgZmluZCBqc29ucGF0aCB2YXJpYWJsZSAidW5k ZWZpbmVkX3ZhciIKKyBqc29uYl9wYXRoX3F1ZXJ5X2ZpcnN0IAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgCisoMSByb3cpCisKIFNFTEVDVCBqc29uYl9wYXRoX3F1ZXJ5X2ZpcnN0KCdbeyJh IjogMX1dJywgJ2ZhbHNlJyk7CiAganNvbmJfcGF0aF9xdWVyeV9maXJzdCAKIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQpAQCAtMjMzMSw3ICsyMzQxLDcgQEAKIFNFTEVDVCBqc29uYl9wYXRoX2V4 aXN0cygnW3siYSI6IDF9XScsICckdW5kZWZpbmVkX3ZhcicpOwogIGpzb25iX3BhdGhfZXhpc3Rz IAogLS0tLS0tLS0tLS0tLS0tLS0tLQotIHQKKyBmCiAoMSByb3cpCiAKIFNFTEVDVCBqc29uYl9w YXRoX2V4aXN0cygnW3siYSI6IDF9XScsICdmYWxzZScpOwpAQCAtMjQwMyw3ICsyNDEzLDcgQEAK ICgxIHJvdykKIAogU0VMRUNUIGpzb25iX3BhdGhfbWF0Y2goJ1t7ImEiOiAxfV0nLCAnJHVuZGVm aW5lZF92YXInKTsKLUVSUk9SOiAgY291bGQgbm90IGZpbmQganNvbnBhdGggdmFyaWFibGUgInVu ZGVmaW5lZF92YXIiCitFUlJPUjogIHNpbmdsZSBib29sZWFuIHJlc3VsdCBpcyBleHBlY3RlZAog U0VMRUNUIGpzb25iX3BhdGhfbWF0Y2goJ1t7ImEiOiAxfV0nLCAnZmFsc2UnKTsKICBqc29uYl9w YXRoX21hdGNoIAogLS0tLS0tLS0tLS0tLS0tLS0tCg== --000000000000e9837205ef44c66c Content-Type: application/octet-stream; name="0000-v1-Add-regression-tests-demonstrating-scalar-jsonpath-b.patch" Content-Disposition: attachment; filename="0000-v1-Add-regression-tests-demonstrating-scalar-jsonpath-b.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbe8d5pp1 RnJvbSA0OGJmYTBmZDFjNGM0NWQ3MjdiMjllMWRmZDBmMmE5Y2UzZDM5YWZhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiRGF2aWQgRy4gSm9obnN0b24iIDxEYXZpZC5HLkpvaG5zdG9u QEdtYWlsLmNvbT4KRGF0ZTogV2VkLCA3IERlYyAyMDIyIDIyOjI4OjQ2ICswMDAwClN1YmplY3Q6 IFtQQVRDSF0gQWRkIHJlZ3Jlc3Npb24gdGVzdHMgZGVtb25zdHJhdGluZyBzY2FsYXIganNvbnBh dGggYmVoYXZpb3IKCi0tLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9qc29ucGF0 aC5vdXQgfCAzNiArKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNv bmJfanNvbnBhdGguc3FsICAgICAgfCAgOCArKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA0NCBpbnNl cnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9q c29ucGF0aC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX2pzb25wYXRoLm91 dAppbmRleCA1MDhkZGQ3OTdlLi41ZmJiYzg1MTlkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2pzb25iX2pzb25wYXRoLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2pzb25iX2pzb25wYXRoLm91dApAQCAtMjIxMiw2ICsyMjEyLDE0IEBAIFNFTEVDVCBq c29uYl9wYXRoX3F1ZXJ5KCdbeyJhIjogMX0sIHsiYSI6IDJ9XScsICckWypdID8gKEAuYSA+IDEw KScpOwogLS0tLS0tLS0tLS0tLS0tLS0tCiAoMCByb3dzKQogCitTRUxFQ1QganNvbmJfcGF0aF9x dWVyeSgnW3siYSI6IDF9XScsICckdW5kZWZpbmVkX3ZhcicpOworRVJST1I6ICBjb3VsZCBub3Qg ZmluZCBqc29ucGF0aCB2YXJpYWJsZSAidW5kZWZpbmVkX3ZhciIKK1NFTEVDVCBqc29uYl9wYXRo X3F1ZXJ5KCdbeyJhIjogMX1dJywgJ2ZhbHNlJyk7CisganNvbmJfcGF0aF9xdWVyeSAKKy0tLS0t LS0tLS0tLS0tLS0tLQorIGZhbHNlCisoMSByb3cpCisKIFNFTEVDVCBqc29uYl9wYXRoX3F1ZXJ5 X2FycmF5KCdbeyJhIjogMX0sIHsiYSI6IDJ9LCB7fV0nLCAnc3RyaWN0ICRbKl0uYScpOwogRVJS T1I6ICBKU09OIG9iamVjdCBkb2VzIG5vdCBjb250YWluIGtleSAiYSIKIFNFTEVDVCBqc29uYl9w YXRoX3F1ZXJ5X2FycmF5KCdbeyJhIjogMX0sIHsiYSI6IDJ9XScsICckWypdLmEnKTsKQEAgLTIy ODIsNiArMjI5MCwxNCBAQCBTRUxFQ1QganNvbmJfcGF0aF9xdWVyeV9maXJzdCgnW3siYSI6IDF9 LCB7ImEiOiAyfSwgeyJhIjogM30sIHsiYSI6IDV9XScsICckWypdLgogIAogKDEgcm93KQogCitT RUxFQ1QganNvbmJfcGF0aF9xdWVyeV9maXJzdCgnW3siYSI6IDF9XScsICckdW5kZWZpbmVkX3Zh cicpOworRVJST1I6ICBjb3VsZCBub3QgZmluZCBqc29ucGF0aCB2YXJpYWJsZSAidW5kZWZpbmVk X3ZhciIKK1NFTEVDVCBqc29uYl9wYXRoX3F1ZXJ5X2ZpcnN0KCdbeyJhIjogMX1dJywgJ2ZhbHNl Jyk7CisganNvbmJfcGF0aF9xdWVyeV9maXJzdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IGZhbHNlCisoMSByb3cpCisKIFNFTEVDVCBqc29uYiAnW3siYSI6IDF9LCB7ImEiOiAyfV0nIEA/ ICckWypdLmEgPyAoQCA+IDEpJzsKICA/Y29sdW1uPyAKIC0tLS0tLS0tLS0KQEAgLTIzMTIsNiAr MjMyOCwxOCBAQCBTRUxFQ1QganNvbmJfcGF0aF9leGlzdHMoJ1t7ImEiOiAxfSwgeyJhIjogMn0s IHsiYSI6IDN9LCB7ImEiOiA1fV0nLCAnJFsqXSA/IChALgogIGYKICgxIHJvdykKIAorU0VMRUNU IGpzb25iX3BhdGhfZXhpc3RzKCdbeyJhIjogMX1dJywgJyR1bmRlZmluZWRfdmFyJyk7CisganNv bmJfcGF0aF9leGlzdHMgCistLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxF Q1QganNvbmJfcGF0aF9leGlzdHMoJ1t7ImEiOiAxfV0nLCAnZmFsc2UnKTsKKyBqc29uYl9wYXRo X2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKIFNFTEVDVCBqc29u Yl9wYXRoX21hdGNoKCd0cnVlJywgJyQnLCBzaWxlbnQgPT4gZmFsc2UpOwogIGpzb25iX3BhdGhf bWF0Y2ggCiAtLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIzNzQsNiArMjQwMiwxNCBAQCBTRUxFQ1Qg anNvbmJfcGF0aF9tYXRjaCgnW3siYSI6IDF9LCB7ImEiOiAyfV0nLCAnJFsqXS5hID4gMScpOwog IHQKICgxIHJvdykKIAorU0VMRUNUIGpzb25iX3BhdGhfbWF0Y2goJ1t7ImEiOiAxfV0nLCAnJHVu ZGVmaW5lZF92YXInKTsKK0VSUk9SOiAgY291bGQgbm90IGZpbmQganNvbnBhdGggdmFyaWFibGUg InVuZGVmaW5lZF92YXIiCitTRUxFQ1QganNvbmJfcGF0aF9tYXRjaCgnW3siYSI6IDF9XScsICdm YWxzZScpOworIGpzb25iX3BhdGhfbWF0Y2ggCistLS0tLS0tLS0tLS0tLS0tLS0KKyBmCisoMSBy b3cpCisKIC0tIHRlc3Qgc3RyaW5nIGNvbXBhcmlzb24gKFVuaWNvZGUgY29kZXBvaW50IGNvbGxh dGlvbikKIFdJVEggc3RyKGosIG51bSkgQVMKICgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2pzb25iX2pzb25wYXRoLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iX2pz b25wYXRoLnNxbAppbmRleCA2MGY3M2NiMDU5Li5iZDAyNTA3N2Q1IDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9qc29uYl9qc29ucGF0aC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvanNvbmJfanNvbnBhdGguc3FsCkBAIC01MzIsNiArNTMyLDggQEAgc2V0IHRpbWUgem9u ZSBkZWZhdWx0OwogCiBTRUxFQ1QganNvbmJfcGF0aF9xdWVyeSgnW3siYSI6IDF9LCB7ImEiOiAy fV0nLCAnJFsqXScpOwogU0VMRUNUIGpzb25iX3BhdGhfcXVlcnkoJ1t7ImEiOiAxfSwgeyJhIjog Mn1dJywgJyRbKl0gPyAoQC5hID4gMTApJyk7CitTRUxFQ1QganNvbmJfcGF0aF9xdWVyeSgnW3si YSI6IDF9XScsICckdW5kZWZpbmVkX3ZhcicpOworU0VMRUNUIGpzb25iX3BhdGhfcXVlcnkoJ1t7 ImEiOiAxfV0nLCAnZmFsc2UnKTsKIAogU0VMRUNUIGpzb25iX3BhdGhfcXVlcnlfYXJyYXkoJ1t7 ImEiOiAxfSwgeyJhIjogMn0sIHt9XScsICdzdHJpY3QgJFsqXS5hJyk7CiBTRUxFQ1QganNvbmJf cGF0aF9xdWVyeV9hcnJheSgnW3siYSI6IDF9LCB7ImEiOiAyfV0nLCAnJFsqXS5hJyk7CkBAIC01 NDcsMTIgKzU0OSwxNiBAQCBTRUxFQ1QganNvbmJfcGF0aF9xdWVyeV9maXJzdCgnW3siYSI6IDF9 LCB7ImEiOiAyfV0nLCAnJFsqXS5hID8gKEAgPT0gMSknKTsKIFNFTEVDVCBqc29uYl9wYXRoX3F1 ZXJ5X2ZpcnN0KCdbeyJhIjogMX0sIHsiYSI6IDJ9XScsICckWypdLmEgPyAoQCA+IDEwKScpOwog U0VMRUNUIGpzb25iX3BhdGhfcXVlcnlfZmlyc3QoJ1t7ImEiOiAxfSwgeyJhIjogMn0sIHsiYSI6 IDN9LCB7ImEiOiA1fV0nLCAnJFsqXS5hID8gKEAgPiAkbWluICYmIEAgPCAkbWF4KScsIHZhcnMg PT4gJ3sibWluIjogMSwgIm1heCI6IDR9Jyk7CiBTRUxFQ1QganNvbmJfcGF0aF9xdWVyeV9maXJz dCgnW3siYSI6IDF9LCB7ImEiOiAyfSwgeyJhIjogM30sIHsiYSI6IDV9XScsICckWypdLmEgPyAo QCA+ICRtaW4gJiYgQCA8ICRtYXgpJywgdmFycyA9PiAneyJtaW4iOiAzLCAibWF4IjogNH0nKTsK K1NFTEVDVCBqc29uYl9wYXRoX3F1ZXJ5X2ZpcnN0KCdbeyJhIjogMX1dJywgJyR1bmRlZmluZWRf dmFyJyk7CitTRUxFQ1QganNvbmJfcGF0aF9xdWVyeV9maXJzdCgnW3siYSI6IDF9XScsICdmYWxz ZScpOwogCiBTRUxFQ1QganNvbmIgJ1t7ImEiOiAxfSwgeyJhIjogMn1dJyBAPyAnJFsqXS5hID8g KEAgPiAxKSc7CiBTRUxFQ1QganNvbmIgJ1t7ImEiOiAxfSwgeyJhIjogMn1dJyBAPyAnJFsqXSA/ IChALmEgPiAyKSc7CiBTRUxFQ1QganNvbmJfcGF0aF9leGlzdHMoJ1t7ImEiOiAxfSwgeyJhIjog Mn1dJywgJyRbKl0uYSA/IChAID4gMSknKTsKIFNFTEVDVCBqc29uYl9wYXRoX2V4aXN0cygnW3si YSI6IDF9LCB7ImEiOiAyfSwgeyJhIjogM30sIHsiYSI6IDV9XScsICckWypdID8gKEAuYSA+ICRt aW4gJiYgQC5hIDwgJG1heCknLCB2YXJzID0+ICd7Im1pbiI6IDEsICJtYXgiOiA0fScpOwogU0VM RUNUIGpzb25iX3BhdGhfZXhpc3RzKCdbeyJhIjogMX0sIHsiYSI6IDJ9LCB7ImEiOiAzfSwgeyJh IjogNX1dJywgJyRbKl0gPyAoQC5hID4gJG1pbiAmJiBALmEgPCAkbWF4KScsIHZhcnMgPT4gJ3si bWluIjogMywgIm1heCI6IDR9Jyk7CitTRUxFQ1QganNvbmJfcGF0aF9leGlzdHMoJ1t7ImEiOiAx fV0nLCAnJHVuZGVmaW5lZF92YXInKTsKK1NFTEVDVCBqc29uYl9wYXRoX2V4aXN0cygnW3siYSI6 IDF9XScsICdmYWxzZScpOwogCiBTRUxFQ1QganNvbmJfcGF0aF9tYXRjaCgndHJ1ZScsICckJywg c2lsZW50ID0+IGZhbHNlKTsKIFNFTEVDVCBqc29uYl9wYXRoX21hdGNoKCdmYWxzZScsICckJywg c2lsZW50ID0+IGZhbHNlKTsKQEAgLTU2OSw2ICs1NzUsOCBAQCBTRUxFQ1QganNvbmJfcGF0aF9t YXRjaCgnW3RydWUsIHRydWVdJywgJyRbKl0nLCBzaWxlbnQgPT4gZmFsc2UpOwogU0VMRUNUIGpz b25iICdbeyJhIjogMX0sIHsiYSI6IDJ9XScgQEAgJyRbKl0uYSA+IDEnOwogU0VMRUNUIGpzb25i ICdbeyJhIjogMX0sIHsiYSI6IDJ9XScgQEAgJyRbKl0uYSA+IDInOwogU0VMRUNUIGpzb25iX3Bh dGhfbWF0Y2goJ1t7ImEiOiAxfSwgeyJhIjogMn1dJywgJyRbKl0uYSA+IDEnKTsKK1NFTEVDVCBq c29uYl9wYXRoX21hdGNoKCdbeyJhIjogMX1dJywgJyR1bmRlZmluZWRfdmFyJyk7CitTRUxFQ1Qg anNvbmJfcGF0aF9tYXRjaCgnW3siYSI6IDF9XScsICdmYWxzZScpOwogCiAtLSB0ZXN0IHN0cmlu ZyBjb21wYXJpc29uIChVbmljb2RlIGNvZGVwb2ludCBjb2xsYXRpb24pCiBXSVRIIHN0cihqLCBu dW0pIEFTCi0tIAoyLjI1LjEKCg== --000000000000e9837205ef44c66c--