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 1w10Hc-002PEL-16 for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Mar 2026 11:02:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w10Ha-003Q3I-2G for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Mar 2026 11:02:19 +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 1w10Ha-003Q38-12 for pgsql-hackers@lists.postgresql.org; Fri, 13 Mar 2026 11:02:18 +0000 Received: from mail-yx1-xb132.google.com ([2607:f8b0:4864:20::b132]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w10HX-00000002RuG-2FHL for pgsql-hackers@lists.postgresql.org; Fri, 13 Mar 2026 11:02:18 +0000 Received: by mail-yx1-xb132.google.com with SMTP id 956f58d0204a3-64ad79dfb6eso2528164d50.0 for ; Fri, 13 Mar 2026 04:02:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773399733; cv=none; d=google.com; s=arc-20240605; b=BGvjaIhmQCrizeppw77FmdyCEzl/SG6vV/hMIaZ7R+xAI2NMagUPAAZo9mH3Od2evB GAuLILZ6WsoSt0uQjpoqT2vcaf09s3ZzaorLyNZ5zkBAX7rl5qAjXCpZOqev3SZwjn62 6NkZDX7ohEQFm9OWaL1d/sqOEDpsl+xkG6oIFuVupmnquhBWPRh7unST3Bazi0us0wTe EE5lXNtk0PPw4mBbvWuXgxkUmJPJwvfJrVwX6Etg2ANseODhFZ9Wl8PBqaUTQ6fNfIFt dqkmf6/N6MVDo21qSJd5OZ8jjeXnjEL0p4n4Bgobjv0AGGQmJCVYbI11+hTmQ9DPEPkT ujlA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=kpz5JPLxqz1nopzmcuHFo46eK89sgAEEFhNJIIStB+8=; fh=nwNxTtLLPTU0ewfLM7SSbrjMajMl+wwnFkCY/fi90vE=; b=hMUcuBCKLdeTRmtISEEAEIvWLUeldhyEADsDezlSSh5jbtdCw/lUq63XIVPkLtz0WH HUVmUIL+cooog8j3CJq6eFMFI2bnZnJg5XOWTiYRVUL6/rgY2ktmh6H8CR/9Uf/A49Bw m0WblsdCtD+HhPvt92b/psDzKdxvvjkG9vKEwfRo+G9lLdDWUyYrSOL+quLkR6WFRH/V tdRzE9d0EVtUoasP7FM7O7ab6gzyCHwhp/eARuwDZTFAHmT0rP4THHWf34o+duxqlgll NSuRseGE1HFp7nbqjxs+k0YgZ6nSXfamCOahd1kfdppYPIXj/D4bbnalOkiUHk+kvimp +xqg==; 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=planetscale.com; s=google; t=1773399733; x=1774004533; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=kpz5JPLxqz1nopzmcuHFo46eK89sgAEEFhNJIIStB+8=; b=IfkvQ+NLAsDPLX2Jz31qxtgZMXbTt47FgK0njQhOKhj9iqwNAM6O3EuO9HFwI6jFEb 0xr91EKhbN9SOY6Cc1OKo/VgoBGcE37wMVtpz6z/I0LZQwQ59M0v7WNXw1ZWStpCY1gD 9tTm3zxUwfKlNzebvVj3KR82oRpLT6XlUecmc/mBkCh5WRk1VkxRMvOmBHDkH+tDHzLx C/yV+9s0N4HKkXZpdq9ezJSRcFFIWJzGT7z6Fmhg1YWPXjSfBV8g4x80MUGL959uXalk aBWjRm8leBm3uK/IsHFXNA3hKv3dAHc8UyQ7nDlvYGsBCUMS9j1hFbr+6tBMMCOQ95uD S8kA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773399733; x=1774004533; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=kpz5JPLxqz1nopzmcuHFo46eK89sgAEEFhNJIIStB+8=; b=XK74VoGJiC7XJZGghgMsvTAeXwUy4Euq4lNkJ0WU5216T/kHQpeb73/WRw93qgBYMO 1bWGZQDgmgmli0Qmcv5G/6RkfgLNtCiR6Tp5iXMVuh6cmKx7DfamkYAxng2285IjbUED fJ0yDx/c1eGBh6EepwzkShxQ5yJ+AfX+JSix7DkAbqi0TEds4f8voXNro0pNUVUazOsY eiEVoO21Y/5mxXbLpsYYUOY8Dwopen/SJzVqN+Q5ShCJdKOICCKLqN+aCAZBeAIGtyCd BlZvcVLuh4JMYlVn0Ek2VLWWHjPar+lDzGu3bt3Iqgw1DMHxps3ydITVkuwAA9pb/ftD Fiwg== X-Gm-Message-State: AOJu0YyzGQBVvxkOzkLh7kQH65+V7xR8k7SpIu9bGOxbBeS/49VbTkoq qnGP5yeaHbBoutKA96nWoQERnQYw1+l9NUZDVSE8ewkGo/EsBn7R0XUGHkx+uCfOxk1emGdRkCV 6oFL8MEcT1EIA1lBXAQGMdWmcFekLKgCj2xIBbuXq1WKJqTteKPV4EZ4= X-Gm-Gg: ATEYQzxYleBtYgvXSY2QsQLKB/mWpw+nFB+6Hq0HS2b/sjaQQlr/nE7iOIP22IE9zQm M+7w6RIBBPCgNDDFCW3BO931sLon3+FKOgILZWtEckixwCXPeKywIE4xki9jZt8usmNQJ7FW5ZP dHaaJ/95DkMio3I3/2C9K6x8xMVXfn7VjjhqkLZu18XdvjCKRLGEqxsJxXt2DsdmGwgQ0fW4egu +bVa3BMyw0/SU2wK3VchHcEEHLjGkm7pg+j1AxI6DmCc71ebHCGWrYYeP6gxQuBmLc64uGJdh6T P+1yvvE= X-Received: by 2002:a53:ecc3:0:b0:64a:df3a:1533 with SMTP id 956f58d0204a3-64e62f720ebmr2277423d50.19.1773399733285; Fri, 13 Mar 2026 04:02:13 -0700 (PDT) MIME-Version: 1.0 From: Matt Blewitt Date: Fri, 13 Mar 2026 11:02:01 +0000 X-Gm-Features: AaiRm52iRaCIsepfE1hU_0N3s9rSjj_Hl26yDsr3uEoesWXFG_7it_O5qKxWx7o Message-ID: Subject: [PATCH] Fix JSON_SERIALIZE() coercion placeholder type for jsonb input To: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000269bfa064ce5cdf6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000269bfa064ce5cdf6 Content-Type: multipart/alternative; boundary="000000000000269bf8064ce5cdf4" --000000000000269bf8064ce5cdf4 Content-Type: text/plain; charset="UTF-8" Hi folks, Related to: https://www.postgresql.org/message-id/03583FE7-A5EE-407C-907D-67865F3F8BFC%40gmail.com When JSON_SERIALIZE() receives a jsonb-typed argument, the CaseTestExpr placeholder used to set up coercion was unconditionally assigned JSONOID (derived from the RETURNING format, which defaults to JS_FORMAT_JSON). However, the executor passes the input argument value through directly for JSON_SERIALIZE (see ExecInitExprRec in execExpr.c), so the actual datum at runtime is jsonb, not json. This type mismatch between the placeholder and the runtime value caused the wrong coercion path to be selected. As Dirkjan mentioned, this results in confusing output. Attached is a patch to address this, by deriving the placeholder type from the actual argument type via exprType(linitial(args)) when the constructor type is JSCTOR_JSON_SERIALIZE, rather than from returning->format->format_type. Added a regression test to ensure JSONB is serialized correctly. Cheers, Matt --000000000000269bf8064ce5cdf4 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi folks,


When JSON_SERIALIZE() = receives a jsonb-typed argument, the CaseTestExpr
placeholder used to se= t up coercion was unconditionally assigned JSONOID
(derived from the RET= URNING format, which defaults to JS_FORMAT_JSON).
However, the executor = passes the input argument value through directly
for JSON_SERIALIZE (see= ExecInitExprRec in execExpr.c), so the actual
datum at runtime is jsonb= , not json.=C2=A0 This type mismatch between the
placeholder and the run= time value caused the wrong coercion path to be
selected.

=
As Dirkjan mentioned, this results in confusing output.

Attached is a patch to address this, by deriving the place= holder type from the
actual argument type via exprType(linitial(args)) w= hen the constructor type is
JSCTOR_JSON_SERIALIZE, rather than from retu= rning->format->format_type.

Added a regressi= on test to ensure JSONB is serialized correctly.

C= heers,

Matt
--000000000000269bf8064ce5cdf4-- --000000000000269bfa064ce5cdf6 Content-Type: application/octet-stream; name="0001-Fix-JSON_SERIALIZE-coercion-placeholder-type-for-jso.patch" Content-Disposition: attachment; filename="0001-Fix-JSON_SERIALIZE-coercion-placeholder-type-for-jso.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmoseb970 RnJvbSA0MTMwNDJiODA2ODk2NmExNjNjMDg1ZTlmN2Y1ZWViZDUxNjg5MjQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXR0IEJsZXdpdHQgPG1ibGVAcGxhbmV0c2NhbGUuY29tPgpE YXRlOiBUdWUsIDEwIE1hciAyMDI2IDIxOjM5OjM2ICswMDAwClN1YmplY3Q6IFtQQVRDSF0gRml4 IEpTT05fU0VSSUFMSVpFKCkgY29lcmNpb24gcGxhY2Vob2xkZXIgdHlwZSBmb3IganNvbmIKIGlu cHV0CgpXaGVuIEpTT05fU0VSSUFMSVpFKCkgcmVjZWl2ZXMgYSBqc29uYi10eXBlZCBhcmd1bWVu dCwgdGhlIENhc2VUZXN0RXhwcgpwbGFjZWhvbGRlciB1c2VkIHRvIHNldCB1cCBjb2VyY2lvbiB3 YXMgdW5jb25kaXRpb25hbGx5IGFzc2lnbmVkIEpTT05PSUQKKGRlcml2ZWQgZnJvbSB0aGUgUkVU VVJOSU5HIGZvcm1hdCwgd2hpY2ggZGVmYXVsdHMgdG8gSlNfRk9STUFUX0pTT04pLgpIb3dldmVy LCB0aGUgZXhlY3V0b3IgcGFzc2VzIHRoZSBpbnB1dCBhcmd1bWVudCB2YWx1ZSB0aHJvdWdoIGRp cmVjdGx5CmZvciBKU09OX1NFUklBTElaRSAoc2VlIEV4ZWNJbml0RXhwclJlYyBpbiBleGVjRXhw ci5jKSwgc28gdGhlIGFjdHVhbApkYXR1bSBhdCBydW50aW1lIGlzIGpzb25iLCBub3QganNvbi4g IFRoaXMgdHlwZSBtaXNtYXRjaCBiZXR3ZWVuIHRoZQpwbGFjZWhvbGRlciBhbmQgdGhlIHJ1bnRp bWUgdmFsdWUgY2F1c2VkIHRoZSB3cm9uZyBjb2VyY2lvbiBwYXRoIHRvIGJlCnNlbGVjdGVkLgoK Rml4IGJ5IGRlcml2aW5nIHRoZSBwbGFjZWhvbGRlciB0eXBlIGZyb20gdGhlIGFjdHVhbCBhcmd1 bWVudCB0eXBlIHZpYQpleHByVHlwZShsaW5pdGlhbChhcmdzKSkgd2hlbiB0aGUgY29uc3RydWN0 b3IgdHlwZSBpcyBKU0NUT1JfSlNPTl9TRVJJQUxJWkUsCnJhdGhlciB0aGFuIGZyb20gcmV0dXJu aW5nLT5mb3JtYXQtPmZvcm1hdF90eXBlLgoKQWRkIGFuIEFzc2VydCB0byBndWFyZCB0aGUgYXNz dW1wdGlvbiB0aGF0IGFyZ3MgaXMgbm9uLWVtcHR5IGZvciB0aGlzCnBhdGgsIGFuZCB1cGRhdGUg dGhlIGJsb2NrIGNvbW1lbnQgdG8gZXhwbGFpbiB3aHkgSlNPTl9TRVJJQUxJWkUgZGlmZmVycwpm cm9tIHRoZSBvdGhlciBjb25zdHJ1Y3RvciB0eXBlcyAoaXQgY29uc3VtZXMganNvbi9qc29uYiBy YXRoZXIgdGhhbgpwcm9kdWNpbmcgaXQpLgoKRXh0ZW5kIHRoZSBzcWxqc29uIHJlZ3Jlc3Npb24g dGVzdHMgd2l0aCBFWFBMQUlOIG91dHB1dCwgYWRkaXRpb25hbApSRVRVUk5JTkcgdmFyaWFudHMg KHZhcmNoYXIsIGJ5dGVhKSwgYW5kIGVycm9yIGNhc2VzIChSRVRVUk5JTkcgaW50LApSRVRVUk5J TkcganNvbmIpIGZvciBqc29uYi10eXBlZCBpbnB1dCB0byBKU09OX1NFUklBTElaRSgpLgotLS0K IHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMgICAgICAgfCAxOCArKysrKysrKy0tCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb24ub3V0IHwgNTIgKysrKysrKysrKysrKysr KysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9zcWxqc29uLnNxbCAgICAgIHwgMTMg KysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA4MCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMgYi9zcmMvYmFj a2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCmluZGV4IGRjZmUxYWNjLi5iYTAyYjExNyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYworKysgYi9zcmMvYmFja2VuZC9w YXJzZXIvcGFyc2VfZXhwci5jCkBAIC0zNjk0LDcgKzM2OTQsMTMgQEAgbWFrZUpzb25Db25zdHJ1 Y3RvckV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uQ29uc3RydWN0b3JUeXBlIHR5cGUsCiAJ ICogQ29lcmNlIHRvIHRoZSBSRVRVUk5JTkcgdHlwZSBhbmQgZm9ybWF0LCBpZiBuZWVkZWQuICBX ZSBhYnVzZQogCSAqIENhc2VUZXN0RXhwciBoZXJlIGFzIHBsYWNlaG9sZGVyIHRvIHBhc3MgdGhl IHJlc3VsdCBvZiBlaXRoZXIKIAkgKiBldmFsdWF0aW5nICdmZXhwcicgb3Igd2hhdGV2ZXIgaXMg cHJvZHVjZWQgYnkgRXhlY0V2YWxKc29uQ29uc3RydWN0b3IoKQotCSAqIHRoYXQgaXMgb2YgdHlw ZSBKU09OIG9yIEpTT05CIHRvIHRoZSBjb2VyY2lvbiBmdW5jdGlvbi4KKwkgKiB0byB0aGUgY29l cmNpb24gZnVuY3Rpb24uCisJICoKKwkgKiBGb3IgbW9zdCBjb25zdHJ1Y3RvciB0eXBlcyB0aGUg cGxhY2Vob2xkZXIgdHlwZSBpcyBKU09OIG9yIEpTT05CLAorCSAqIGRldGVybWluZWQgYnkgdGhl IFJFVFVSTklORyBmb3JtYXQuICBKU09OX1NFUklBTElaRSBpcyBkaWZmZXJlbnQ6IGl0CisJICog ZG9lc24ndCBwcm9kdWNlIGpzb24vanNvbmIgYnV0IHJhdGhlciBjb25zdW1lcyBpdCwgYW5kIHRo ZSBleGVjdXRvcgorCSAqIHBhc3NlcyB0aGUgaW5wdXQgYXJndW1lbnQgdGhyb3VnaCBkaXJlY3Rs eSAoc2VlIGV4ZWNFeHByLmMpLCBzbyB0aGUKKwkgKiBwbGFjZWhvbGRlciBtdXN0IHJlZmxlY3Qg dGhlIGFjdHVhbCBhcmd1bWVudCB0eXBlLgogCSAqLwogCWlmIChmZXhwcikKIAl7CkBAIC0zNzEw LDggKzM3MTYsMTQgQEAgbWFrZUpzb25Db25zdHJ1Y3RvckV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRl LCBKc29uQ29uc3RydWN0b3JUeXBlIHR5cGUsCiAJewogCQlDYXNlVGVzdEV4cHIgKmN0ZSA9IG1h a2VOb2RlKENhc2VUZXN0RXhwcik7CiAKLQkJY3RlLT50eXBlSWQgPSByZXR1cm5pbmctPmZvcm1h dC0+Zm9ybWF0X3R5cGUgPT0gSlNfRk9STUFUX0pTT05CID8KLQkJCUpTT05CT0lEIDogSlNPTk9J RDsKKwkJaWYgKHR5cGUgPT0gSlNDVE9SX0pTT05fU0VSSUFMSVpFKQorCQl7CisJCQlBc3NlcnQo YXJncyAhPSBOSUwpOworCQkJY3RlLT50eXBlSWQgPSBleHByVHlwZShsaW5pdGlhbChhcmdzKSk7 CisJCX0KKwkJZWxzZQorCQkJY3RlLT50eXBlSWQgPSByZXR1cm5pbmctPmZvcm1hdC0+Zm9ybWF0 X3R5cGUgPT0gSlNfRk9STUFUX0pTT05CID8KKwkJCQlKU09OQk9JRCA6IEpTT05PSUQ7CiAJCWN0 ZS0+dHlwZU1vZCA9IC0xOwogCQljdGUtPmNvbGxhdGlvbiA9IEludmFsaWRPaWQ7CiAKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbi5vdXQgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3NxbGpzb24ub3V0CmluZGV4IGM3YjllNTc1Li5lOGU2YmNmNyAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zcWxqc29uLm91dAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb24ub3V0CkBAIC0yODgsNiArMjg4LDU4IEBAIEVY UExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUIEpTT05fU0VSSUFMSVpFKCd7fScgUkVU VVJOSU5HIGJ5dGVhKTsKICAgIE91dHB1dDogSlNPTl9TRVJJQUxJWkUoJ3t9Jzo6anNvbiBSRVRV Uk5JTkcgYnl0ZWEpCiAoMiByb3dzKQogCistLSBKU09OX1NFUklBTElaRSgpIHdpdGgganNvbmIg aW5wdXQKK1NFTEVDVCBKU09OX1NFUklBTElaRSgnWzEsMiw0LDVdJzo6anNvbmIpOworIGpzb25f c2VyaWFsaXplIAorLS0tLS0tLS0tLS0tLS0tLQorIFsxLCAyLCA0LCA1XQorKDEgcm93KQorCitT RUxFQ1QgSlNPTl9TRVJJQUxJWkUoJ3siYSI6IDF9Jzo6anNvbmIpOworIGpzb25fc2VyaWFsaXpl IAorLS0tLS0tLS0tLS0tLS0tLQorIHsiYSI6IDF9CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1NF UklBTElaRSgneyJhIjogMX0nOjpqc29uYiBSRVRVUk5JTkcgdGV4dCk7CisganNvbl9zZXJpYWxp emUgCistLS0tLS0tLS0tLS0tLS0tCisgeyJhIjogMX0KKygxIHJvdykKKworU0VMRUNUIEpTT05f U0VSSUFMSVpFKCd7ImEiOiAxfSc6Ompzb25iIFJFVFVSTklORyBieXRlYSk7CisgICBqc29uX3Nl cmlhbGl6ZSAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBceDdiMjI2MTIyM2EyMDMxN2QKKygx IHJvdykKKworU0VMRUNUIEpTT05fU0VSSUFMSVpFKCd7ImEiOiAxfSc6Ompzb25iIFJFVFVSTklO RyB2YXJjaGFyKTsKKyBqc29uX3NlcmlhbGl6ZSAKKy0tLS0tLS0tLS0tLS0tLS0KKyB7ImEiOiAx fQorKDEgcm93KQorCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCBKU09OX1NF UklBTElaRSgneyJhIjogMX0nOjpqc29uYik7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorICAgT3V0cHV0 OiBKU09OX1NFUklBTElaRSgneyJhIjogMX0nOjpqc29uYiBSRVRVUk5JTkcgdGV4dCkKKygyIHJv d3MpCisKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUIEpTT05fU0VSSUFMSVpF KCd7ImEiOiAxfSc6Ompzb25iIFJFVFVSTklORyBieXRlYSk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0 CisgICBPdXRwdXQ6IEpTT05fU0VSSUFMSVpFKCd7ImEiOiAxfSc6Ompzb25iIFJFVFVSTklORyBi eXRlYSkKKygyIHJvd3MpCisKKy0tIGpzb25iIGlucHV0OiBlcnJvciBjYXNlcworU0VMRUNUIEpT T05fU0VSSUFMSVpFKCd7ImEiOiAxfSc6Ompzb25iIFJFVFVSTklORyBpbnQpOworRVJST1I6ICBj YW5ub3QgdXNlIHR5cGUgaW50ZWdlciBpbiBSRVRVUk5JTkcgY2xhdXNlIG9mIEpTT05fU0VSSUFM SVpFKCkKK0hJTlQ6ICBUcnkgcmV0dXJuaW5nIGEgc3RyaW5nIHR5cGUgb3IgYnl0ZWEuCitTRUxF Q1QgSlNPTl9TRVJJQUxJWkUoJ3siYSI6IDF9Jzo6anNvbmIgUkVUVVJOSU5HIGpzb25iKTsKK0VS Uk9SOiAgY2Fubm90IHVzZSB0eXBlIGpzb25iIGluIFJFVFVSTklORyBjbGF1c2Ugb2YgSlNPTl9T RVJJQUxJWkUoKQorSElOVDogIFRyeSByZXR1cm5pbmcgYSBzdHJpbmcgdHlwZSBvciBieXRlYS4K IC0tIEpTT05fT0JKRUNUKCkKIFNFTEVDVCBKU09OX09CSkVDVCgpOwogIGpzb25fb2JqZWN0IApk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3FsanNvbi5zcWwgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9zcWxqc29uLnNxbAppbmRleCAzNDNkMzQ0ZC4uNGE0NWZjZGMgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb24uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3NxbGpzb24uc3FsCkBAIC02Miw2ICs2MiwxOSBAQCBTRUxFQ1QgSlNPTl9TRVJJQUxJ WkUoJ3sgImEiIDogMSB9ICcgUkVUVVJOSU5HIGpzb25iKTsKIEVYUExBSU4gKFZFUkJPU0UsIENP U1RTIE9GRikgU0VMRUNUIEpTT05fU0VSSUFMSVpFKCd7fScpOwogRVhQTEFJTiAoVkVSQk9TRSwg Q09TVFMgT0ZGKSBTRUxFQ1QgSlNPTl9TRVJJQUxJWkUoJ3t9JyBSRVRVUk5JTkcgYnl0ZWEpOwog CistLSBKU09OX1NFUklBTElaRSgpIHdpdGgganNvbmIgaW5wdXQKK1NFTEVDVCBKU09OX1NFUklB TElaRSgnWzEsMiw0LDVdJzo6anNvbmIpOworU0VMRUNUIEpTT05fU0VSSUFMSVpFKCd7ImEiOiAx fSc6Ompzb25iKTsKK1NFTEVDVCBKU09OX1NFUklBTElaRSgneyJhIjogMX0nOjpqc29uYiBSRVRV Uk5JTkcgdGV4dCk7CitTRUxFQ1QgSlNPTl9TRVJJQUxJWkUoJ3siYSI6IDF9Jzo6anNvbmIgUkVU VVJOSU5HIGJ5dGVhKTsKK1NFTEVDVCBKU09OX1NFUklBTElaRSgneyJhIjogMX0nOjpqc29uYiBS RVRVUk5JTkcgdmFyY2hhcik7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCBK U09OX1NFUklBTElaRSgneyJhIjogMX0nOjpqc29uYik7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NU UyBPRkYpIFNFTEVDVCBKU09OX1NFUklBTElaRSgneyJhIjogMX0nOjpqc29uYiBSRVRVUk5JTkcg Ynl0ZWEpOworCistLSBqc29uYiBpbnB1dDogZXJyb3IgY2FzZXMKK1NFTEVDVCBKU09OX1NFUklB TElaRSgneyJhIjogMX0nOjpqc29uYiBSRVRVUk5JTkcgaW50KTsKK1NFTEVDVCBKU09OX1NFUklB TElaRSgneyJhIjogMX0nOjpqc29uYiBSRVRVUk5JTkcganNvbmIpOworCiAtLSBKU09OX09CSkVD VCgpCiBTRUxFQ1QgSlNPTl9PQkpFQ1QoKTsKIFNFTEVDVCBKU09OX09CSkVDVChSRVRVUk5JTkcg anNvbik7Ci0tIAoyLjUyLjAKCg== --000000000000269bfa064ce5cdf6--