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.98.2) (envelope-from ) id 1x9SpG-000000020yX-094J for pgsql-bugs@arkaria.postgresql.org; Wed, 23 Sep 2026 19:40:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.98.2) (envelope-from ) id 1x9SpF-00000007bXD-1Gwe for pgsql-bugs@arkaria.postgresql.org; Wed, 23 Sep 2026 19:40:17 +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.98.2) (envelope-from ) id 1x9SpF-00000007bX5-08Up for pgsql-bugs@lists.postgresql.org; Wed, 23 Sep 2026 19:40:17 +0000 Received: from mail-dy2-x0f.google.com ([2607:f8b0:4864:36::f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1x9SpC-00000000w7M-1ns9 for pgsql-bugs@lists.postgresql.org; Wed, 23 Sep 2026 19:40:16 +0000 Received: by mail-dy2-x0f.google.com with SMTP id 5a478bee46e88-33e79c06622so150437eec.3 for ; Wed, 23 Sep 2026 12:40:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790192412; x=1790797212; darn=lists.postgresql.org; h=content-type:mime-version:references:in-reply-to:message-id:date :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to :content-type; bh=bJSYymVJqrYJIRjZQ0/jSMXuX1iTRiHZ9YG9UDeW3Tw=; b=c46TpQVbcd3DUW/KE48Ne2c2OKyfxOwZl+lteq0mF3ldSD+Z1/FerWqUmeLFixpugo hyQJtpmRQkERkMX6W9xvVbg+8Qh6LP+ylgKYaSbjMRDUkBmonqQsaVkY2ztC888OmIfz VZcvkxAkAVe8zTqNIkcdiGnjE8pgsqqpYOGNYhH60WKxfx5Hr/0SezHqbh3bAiwt4sZC eHigsWbaE9bb2SSp5uGyjk42MEoXFdHX8kRWMn1d9yMVu1vANEtjZjC2KYKCF9Mcw0i6 qquboXend2uPfXpIpwWlPo0pBUCays/WYamewjcUyT1XRpVqKyGVygjWc07PX02tqRFm h/rA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790192412; x=1790797212; h=content-type:mime-version:references:in-reply-to:message-id:date :subject:cc:to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=bJSYymVJqrYJIRjZQ0/jSMXuX1iTRiHZ9YG9UDeW3Tw=; b=ubgQz4cPKYDLizJ2oaTLtXVM6+j7BbrsXNEdmJurYrr6Il0yk/o2XW1QJ7sT9mmuj9 A0z7blWT0EtZUIspr+uzPo1HaV5WX3C+FRQ+26GLA25vPUjn73wSxNpGXoBoNvsltzxa UHB/6whtqCPY1n9M0aqTsRdpEjoCy80BUkTyFE/3HpgfuweF0QiTmgrlC57YZs05vaSz lqcX1OXEupjg7vKK0G1ux5FcJ4hiwFxmxAGmt5IbiOIXXuBkOCo0GYwLnsQlnjjL4QJr /lDgy1TPJFGPcA+IWH/WGhnSgdZB9wJOlDIS8c7AxXsKZumIuKGpXxyTf2edLFv+4zEE 4WvA== X-Gm-Message-State: AFuF++k77vo5JUYKKHH+W2tgPjex9HgHx8o9zqiB6QnOKDjDOgdRXDTC leR3noYCuHhbidBT+QsrxGqssJJAuCvtSd3AexZY+UYQf1jwYaWcthuCa61qVsrXpVQ= X-Gm-Gg: AYBFou2vL4s+saCAVGeo9tNbfHdnTQylKR47iIrJn/rCIvaQc7BSyhlh/hIj2kBOY21 9h/d/qSNDhMpBhdsLHVXhAHra31/YXL1d8SrOT5lMfJXycSrf0+syLkyroLfkXHI/PG7bw1cHil aqosXsCzMEvihzkdz+OVaCe/Z5fN9z07ED+cR6RkMLaqxIpgTyfZGcG6x7UhIZYciXZtSt9QEMw qmt8Ow5aRIvzJVp2q576A7N9lYeEn1TnsEIjB5aZjw4Hi+Yad1tB+6ilZcEqxmaUIHfwCq6rt3V jU7yS+U+wzjwi4KyhTDLc5A0FSP1n2gwYA5Pt+3Di8bTryCz2EpiegV9CmCQkaaTRCQVqxwI53f oP9VO65Cgy8MhXFxoqeMrf5C1JrYpYsF3agIOATpJmgMbdjH6KpbT2Lq+BctKwy2vZTu82HiRYF UMxAcNoIiQdK77smLlhIMBhS6yVe6bJf3ncGSjpZ167OjXiOHfHSHAXio8J+Epy0WKeeEbJGkBY XFGw0npg5c8WV3+edUj1ncBTw89MfX2IPeXO1DLPaPcTuOKMUjdsekxghJl0tbGUl+4m2q9m56R 8ICrj0T1aLP8fPEa+/rTE6TtMQ== X-Received: by 2002:a05:701b:4254:10b0:143:8212:a43 with SMTP id a92af1059eb24-14503fdf94bmr217059c88.1.1790192411938; Wed, 23 Sep 2026 12:40:11 -0700 (PDT) Received: from 192.168.1.109 ([2803:3c90:cee:ea00:5c3c:7e70:29e3:7a55]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-144f986e465sm7856930c88.9.2026.09.23.12.40.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Sep 2026 12:40:11 -0700 (PDT) From: Manu To: pgsql-bugs@lists.postgresql.org Cc: 1217816127@qq.com Subject: Re: BUG #19602: Vuln46: citext split_part silently returns NULL for a zero field position instead of raising core sp Date: Wed, 23 Sep 2026 16:40:09 -0300 Message-ID: <179019240902.108284.2431649561108446384@gmail.com> In-Reply-To: <19602-5ec4b4e30fa6f5f2@postgresql.org> References: <19602-5ec4b4e30fa6f5f2@postgresql.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3153658178377874084==" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --===============3153658178377874084== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Hi, This reproduces on master, and zero is only one of the positions that differ. citext's split_part() splits with a case-insensitive regular expression and subscripts the resulting array, so it was left behind when ec0294fb2c8 (v14) taught the core split_part() negative positions. On master: - split_part('a,b,c'::citext, ',', -1): NULL, core returns 'c' - split_part('a,b,c'::citext, ',', 4): NULL, core returns '' - split_part('a,b,c'::citext, ',', 0): NULL, core raises an error - split_part('abc'::citext, '', 1): 'a', core returns 'abc' The last one is the empty delimiter: the regular expression splits between every character, while the core function treats the whole string as the only field. The attached patch keeps the case-insensitive split and applies the core rules to the result: a negative position counts from the end, a position past the last field gives an empty string. A zero position and an empty delimiter, which have no case to ignore, are passed to the core function, so the error message is the same. Since the function is part of the extension script, this needs citext 1.9. Tested on master: - the citext regression tests pass, with new cases for all of the above; - ALTER EXTENSION citext UPDATE TO '1.9' changes the -1 case from NULL to 'c' in an existing database; - on 20000 random lower-case strings, delimiters of up to three characters (some of them regex metacharacters) and positions from -6 to 6, the result matches the core split_part() in every case. Regards, Manu --===============3153658178377874084== Content-Type: text/x-patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-Make-citext-s-split_part-handle-field-positions-like.patch" MIME-Version: 1.0 RnJvbSAzYWY5YzBkZGFhOGM4Mjg3OTUyOGU0NjhmYWMxMWUwYjhlYWY4YjRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYW51IDxtYW51ZWxyZXllc2JyYXZvQGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyMyBTZXAgMjAyNiAxNjozMDoxMSAtMDMwMApTdWJqZWN0OiBbUEFUQ0hdIE1ha2Ug Y2l0ZXh0J3Mgc3BsaXRfcGFydCgpIGhhbmRsZSBmaWVsZCBwb3NpdGlvbnMgbGlrZSB0aGUKIGNv cmUgb25lCgplYzAyOTRmYjJjOCB0YXVnaHQgc3BsaXRfcGFydCgpIHRvIGNvdW50IG5lZ2F0aXZl IHBvc2l0aW9ucyBmcm9tIHRoZQplbmQgYW5kIHRvIHJlamVjdCBhIHBvc2l0aW9uIG9mIHplcm8u ICBjaXRleHQncyB2ZXJzaW9uLCB3aGljaCBzcGxpdHMKd2l0aCBhIGNhc2UtaW5zZW5zaXRpdmUg cmVndWxhciBleHByZXNzaW9uIGFuZCBzdWJzY3JpcHRzIHRoZSByZXN1bHQsCndhcyBub3QgdXBk YXRlZCwgc28gaXQgcmV0dXJuZWQgTlVMTCBmb3IgbmVnYXRpdmUgcG9zaXRpb25zLCBmb3IgYQpw b3NpdGlvbiBvZiB6ZXJvIGFuZCBmb3IgYSBwb3NpdGlvbiBwYXN0IHRoZSBsYXN0IGZpZWxkLCB3 aGVyZSB0aGUgY29yZQpmdW5jdGlvbiByZXR1cm5zIHRoZSBmaWVsZCwgYW4gZXJyb3IgYW5kIGFu IGVtcHR5IHN0cmluZy4gIFdpdGggYW4gZW1wdHkKZGVsaW1pdGVyIGl0IGFsc28gc3BsaXQgdGhl IHN0cmluZyBpbnRvIHNpbmdsZSBjaGFyYWN0ZXJzLCB3aGVyZSB0aGUKY29yZSBmdW5jdGlvbiB0 cmVhdHMgdGhlIHdob2xlIHN0cmluZyBhcyB0aGUgb25seSBmaWVsZC4KCkhhbmRsZSB0aGUgcG9z aXRpb25zIHRoZSBzYW1lIHdheSwgYW5kIGxlYXZlIGEgemVybyBwb3NpdGlvbiBhbmQgYW4KZW1w dHkgZGVsaW1pdGVyLCB3aGljaCBoYXZlIG5vIGNhc2UgdG8gaWdub3JlLCB0byB0aGUgY29yZSBm dW5jdGlvbi4KVGhpcyBuZWVkcyBhIG5ldyBleHRlbnNpb24gdmVyc2lvbiwgMS45LgoKUmVwb3J0 ZWQtYnk6IFl1ZWxpbiBXYW5nIDwxMjE3ODE2MTI3QHFxLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6 Ly9wb3N0Z3IuZXMvbS8xOTYwMi01ZWM0YjRlMzBmYTZmNWYyQHBvc3RncmVzcWwub3JnCi0tLQog Y29udHJpYi9jaXRleHQvTWFrZWZpbGUgICAgICAgICAgICAgIHwgIDEgKwogY29udHJpYi9jaXRl eHQvY2l0ZXh0LS0xLjgtLTEuOS5zcWwgIHwgMjAgKysrKysrKysrKysrKysKIGNvbnRyaWIvY2l0 ZXh0L2NpdGV4dC5jb250cm9sICAgICAgICB8ICAyICstCiBjb250cmliL2NpdGV4dC9leHBlY3Rl ZC9jaXRleHQub3V0ICAgfCA0MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBjb250cmli L2NpdGV4dC9leHBlY3RlZC9jaXRleHRfMS5vdXQgfCA0MCArKysrKysrKysrKysrKysrKysrKysr KysrKysrCiBjb250cmliL2NpdGV4dC9tZXNvbi5idWlsZCAgICAgICAgICAgfCAgMSArCiBjb250 cmliL2NpdGV4dC9zcWwvY2l0ZXh0LnNxbCAgICAgICAgfCAgOCArKysrKysKIDcgZmlsZXMgY2hh bmdlZCwgMTExIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBjb250cmliL2NpdGV4dC9jaXRleHQtLTEuOC0tMS45LnNxbAoKZGlmZiAtLWdpdCBhL2NvbnRy aWIvY2l0ZXh0L01ha2VmaWxlIGIvY29udHJpYi9jaXRleHQvTWFrZWZpbGUKaW5kZXggZmM5OTA2 MDdiZjIuLmY0ZGI4NjVjZWQ1IDEwMDY0NAotLS0gYS9jb250cmliL2NpdGV4dC9NYWtlZmlsZQor KysgYi9jb250cmliL2NpdGV4dC9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAgTU9EVUxFUyA9IGNp dGV4dAogCiBFWFRFTlNJT04gPSBjaXRleHQKIERBVEEgPSBjaXRleHQtLTEuNC5zcWwgXAorCWNp dGV4dC0tMS44LS0xLjkuc3FsIFwKIAljaXRleHQtLTEuNy0tMS44LnNxbCBcCiAJY2l0ZXh0LS0x LjYtLTEuNy5zcWwgXAogCWNpdGV4dC0tMS41LS0xLjYuc3FsIFwKZGlmZiAtLWdpdCBhL2NvbnRy aWIvY2l0ZXh0L2NpdGV4dC0tMS44LS0xLjkuc3FsIGIvY29udHJpYi9jaXRleHQvY2l0ZXh0LS0x LjgtLTEuOS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY1NzNm NTViNWY5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jaXRleHQvY2l0ZXh0LS0xLjgtLTEu OS5zcWwKQEAgLTAsMCArMSwyMCBAQAorLyogY29udHJpYi9jaXRleHQvY2l0ZXh0LS0xLjgtLTEu OS5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0 aGVyIHRoYW4gdmlhIEFMVEVSIEVYVEVOU0lPTgorXGVjaG8gVXNlICJBTFRFUiBFWFRFTlNJT04g Y2l0ZXh0IFVQREFURSBUTyAnMS45JyIgdG8gbG9hZCB0aGlzIGZpbGUuIFxxdWl0CisKKy0tIEZv bGxvdyB0aGUgY29yZSBzcGxpdF9wYXJ0KCk6IGEgbmVnYXRpdmUgcG9zaXRpb24gY291bnRzIGZy b20gdGhlIGVuZCwgYQorLS0gcG9zaXRpb24gcGFzdCB0aGUgbGFzdCBmaWVsZCByZXR1cm5zIGFu IGVtcHR5IHN0cmluZywgYW5kIGEgcG9zaXRpb24gb2YKKy0tIHplcm8gaXMgYW4gZXJyb3IuICBB IHplcm8gcG9zaXRpb24gYW5kIGFuIGVtcHR5IGRlbGltaXRlciwgd2hlcmUgdGhlcmUgaXMgbm8K Ky0tIGNhc2UgdG8gaWdub3JlLCBhcmUgbGVmdCB0byB0aGUgY29yZSBmdW5jdGlvbi4KK0NSRUFU RSBPUiBSRVBMQUNFIEZVTkNUSU9OIHNwbGl0X3BhcnQoIGNpdGV4dCwgY2l0ZXh0LCBpbnQgKSBS RVRVUk5TIFRFWFQKK0xBTkdVQUdFIFNRTCBJTU1VVEFCTEUgU1RSSUNUIFBBUkFMTEVMIFNBRkUK K1JFVFVSTiBDQVNFCisgIFdIRU4gJDMgPSAwIE9SIHBnX2NhdGFsb2cubGVuZ3RoKCQyOjpwZ19j YXRhbG9nLnRleHQpID0gMCBUSEVOCisgICAgcGdfY2F0YWxvZy5zcGxpdF9wYXJ0KCQxOjpwZ19j YXRhbG9nLnRleHQsICQyOjpwZ19jYXRhbG9nLnRleHQsICQzKQorICBFTFNFCisgICAgKFNFTEVD VCBDT0FMRVNDRShmaWVsZHNbQ0FTRSBXSEVOICQzID4gMCBUSEVOICQzCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBFTFNFIHBnX2NhdGFsb2cuYXJyYXlfbGVuZ3RoKGZpZWxkcywg MSkgKyAkMyArIDEgRU5EXSwKKyAgICAgICAgICAgICAgICAgICAgICcnKQorICAgICBGUk9NIChT RUxFQ1QgcGdfY2F0YWxvZy5yZWdleHBfc3BsaXRfdG9fYXJyYXkoICQxOjpwZ19jYXRhbG9nLnRl eHQsIHBnX2NhdGFsb2cucmVnZXhwX3JlcGxhY2UoJDI6OnBnX2NhdGFsb2cudGV4dCwgJyhbXmEt ekEtWl8wLTldKScsIEUnXFxcXFxcMScsICdnJyksICdpJykgQVMgZmllbGRzKSBBUyBzKQorRU5E OwpkaWZmIC0tZ2l0IGEvY29udHJpYi9jaXRleHQvY2l0ZXh0LmNvbnRyb2wgYi9jb250cmliL2Np dGV4dC9jaXRleHQuY29udHJvbAppbmRleCAyYjBmM2ZhODQwNy4uYTc2ZjZiYjIyOTIgMTAwNjQ0 Ci0tLSBhL2NvbnRyaWIvY2l0ZXh0L2NpdGV4dC5jb250cm9sCisrKyBiL2NvbnRyaWIvY2l0ZXh0 L2NpdGV4dC5jb250cm9sCkBAIC0xLDYgKzEsNiBAQAogIyBjaXRleHQgZXh0ZW5zaW9uCiBjb21t ZW50ID0gJ2RhdGEgdHlwZSBmb3IgY2FzZS1pbnNlbnNpdGl2ZSBjaGFyYWN0ZXIgc3RyaW5ncycK LWRlZmF1bHRfdmVyc2lvbiA9ICcxLjgnCitkZWZhdWx0X3ZlcnNpb24gPSAnMS45JwogbW9kdWxl X3BhdGhuYW1lID0gJyRsaWJkaXIvY2l0ZXh0JwogcmVsb2NhdGFibGUgPSB0cnVlCiB0cnVzdGVk ID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jaXRleHQvZXhwZWN0ZWQvY2l0ZXh0Lm91dCBi L2NvbnRyaWIvY2l0ZXh0L2V4cGVjdGVkL2NpdGV4dC5vdXQKaW5kZXggOGMwYmY1NGYwZjMuLjFl OGU3YzJhNWIxIDEwMDY0NAotLS0gYS9jb250cmliL2NpdGV4dC9leHBlY3RlZC9jaXRleHQub3V0 CisrKyBiL2NvbnRyaWIvY2l0ZXh0L2V4cGVjdGVkL2NpdGV4dC5vdXQKQEAgLTIxMjAsNiArMjEy MCw0NiBAQCBTRUxFQ1Qgc3BsaXRfcGFydCgnYWJjVGRlZlRnaGknLCAndCc6OmNpdGV4dCwgMikg PSAnZGVmJyBBUyB0OwogIHQKICgxIHJvdykKIAorLS0gcG9zaXRpb25zIGFyZSBoYW5kbGVkIGFz IGluIHRoZSBjb3JlIHNwbGl0X3BhcnQoKQorU0VMRUNUIHNwbGl0X3BhcnQoJ2FiY1RkZWZUZ2hp Jzo6Y2l0ZXh0LCAndCc6OmNpdGV4dCwgLTEpID0gJ2doaScgQVMgdDsKKyB0IAorLS0tCisgdAor KDEgcm93KQorCitTRUxFQ1Qgc3BsaXRfcGFydCgnYWJjVGRlZlRnaGknOjpjaXRleHQsICd0Jzo6 Y2l0ZXh0LCAtMykgPSAnYWJjJyBBUyB0OworIHQgCistLS0KKyB0CisoMSByb3cpCisKK1NFTEVD VCBzcGxpdF9wYXJ0KCdhYmNUZGVmVGdoaSc6OmNpdGV4dCwgJ3QnOjpjaXRleHQsIDQpID0gJycg QVMgdDsKKyB0IAorLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1Qgc3BsaXRfcGFydCgnYWJjVGRl ZlRnaGknOjpjaXRleHQsICd0Jzo6Y2l0ZXh0LCAtNCkgPSAnJyBBUyB0OworIHQgCistLS0KKyB0 CisoMSByb3cpCisKK1NFTEVDVCBzcGxpdF9wYXJ0KCdhYmNUZGVmVGdoaSc6OmNpdGV4dCwgJyc6 OmNpdGV4dCwgMSkgPSAnYWJjVGRlZlRnaGknIEFTIHQ7CisgdCAKKy0tLQorIHQKKygxIHJvdykK KworU0VMRUNUIHNwbGl0X3BhcnQoJ2FiY1RkZWZUZ2hpJzo6Y2l0ZXh0LCAnJzo6Y2l0ZXh0LCAy KSA9ICcnIEFTIHQ7CisgdCAKKy0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIHNwbGl0X3BhcnQo J2FiY1RkZWZUZ2hpJzo6Y2l0ZXh0LCAndCc6OmNpdGV4dCwgMCk7CitFUlJPUjogIGZpZWxkIHBv c2l0aW9uIG11c3Qgbm90IGJlIHplcm8KK0NPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gInNwbGl0X3Bh cnQiIHN0YXRlbWVudCAxCiBTRUxFQ1Qgc3RycG9zKCdoaWdoJzo6Y2l0ZXh0LCAnZ2gnICAgICAg ICApID0gMyBBUyB0OwogIHQgCiAtLS0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvY2l0ZXh0L2V4cGVj dGVkL2NpdGV4dF8xLm91dCBiL2NvbnRyaWIvY2l0ZXh0L2V4cGVjdGVkL2NpdGV4dF8xLm91dApp bmRleCBjNWU1ZjE4MGYyYi4uZTZjNjRkNjBhNjcgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvY2l0ZXh0 L2V4cGVjdGVkL2NpdGV4dF8xLm91dAorKysgYi9jb250cmliL2NpdGV4dC9leHBlY3RlZC9jaXRl eHRfMS5vdXQKQEAgLTIxMjAsNiArMjEyMCw0NiBAQCBTRUxFQ1Qgc3BsaXRfcGFydCgnYWJjVGRl ZlRnaGknLCAndCc6OmNpdGV4dCwgMikgPSAnZGVmJyBBUyB0OwogIHQKICgxIHJvdykKIAorLS0g cG9zaXRpb25zIGFyZSBoYW5kbGVkIGFzIGluIHRoZSBjb3JlIHNwbGl0X3BhcnQoKQorU0VMRUNU IHNwbGl0X3BhcnQoJ2FiY1RkZWZUZ2hpJzo6Y2l0ZXh0LCAndCc6OmNpdGV4dCwgLTEpID0gJ2do aScgQVMgdDsKKyB0IAorLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1Qgc3BsaXRfcGFydCgnYWJj VGRlZlRnaGknOjpjaXRleHQsICd0Jzo6Y2l0ZXh0LCAtMykgPSAnYWJjJyBBUyB0OworIHQgCist LS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBzcGxpdF9wYXJ0KCdhYmNUZGVmVGdoaSc6OmNpdGV4 dCwgJ3QnOjpjaXRleHQsIDQpID0gJycgQVMgdDsKKyB0IAorLS0tCisgdAorKDEgcm93KQorCitT RUxFQ1Qgc3BsaXRfcGFydCgnYWJjVGRlZlRnaGknOjpjaXRleHQsICd0Jzo6Y2l0ZXh0LCAtNCkg PSAnJyBBUyB0OworIHQgCistLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBzcGxpdF9wYXJ0KCdh YmNUZGVmVGdoaSc6OmNpdGV4dCwgJyc6OmNpdGV4dCwgMSkgPSAnYWJjVGRlZlRnaGknIEFTIHQ7 CisgdCAKKy0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIHNwbGl0X3BhcnQoJ2FiY1RkZWZUZ2hp Jzo6Y2l0ZXh0LCAnJzo6Y2l0ZXh0LCAyKSA9ICcnIEFTIHQ7CisgdCAKKy0tLQorIHQKKygxIHJv dykKKworU0VMRUNUIHNwbGl0X3BhcnQoJ2FiY1RkZWZUZ2hpJzo6Y2l0ZXh0LCAndCc6OmNpdGV4 dCwgMCk7CitFUlJPUjogIGZpZWxkIHBvc2l0aW9uIG11c3Qgbm90IGJlIHplcm8KK0NPTlRFWFQ6 ICBTUUwgZnVuY3Rpb24gInNwbGl0X3BhcnQiIHN0YXRlbWVudCAxCiBTRUxFQ1Qgc3RycG9zKCdo aWdoJzo6Y2l0ZXh0LCAnZ2gnICAgICAgICApID0gMyBBUyB0OwogIHQgCiAtLS0KZGlmZiAtLWdp dCBhL2NvbnRyaWIvY2l0ZXh0L21lc29uLmJ1aWxkIGIvY29udHJpYi9jaXRleHQvbWVzb24uYnVp bGQKaW5kZXggMWNjNDlmYzk5OWYuLmQ4YWJhODZjYTQ0IDEwMDY0NAotLS0gYS9jb250cmliL2Np dGV4dC9tZXNvbi5idWlsZAorKysgYi9jb250cmliL2NpdGV4dC9tZXNvbi5idWlsZApAQCAtMjcs NiArMjcsNyBAQCBpbnN0YWxsX2RhdGEoCiAgICdjaXRleHQtLTEuNS0tMS42LnNxbCcsCiAgICdj aXRleHQtLTEuNi0tMS43LnNxbCcsCiAgICdjaXRleHQtLTEuNy0tMS44LnNxbCcsCisgICdjaXRl eHQtLTEuOC0tMS45LnNxbCcsCiAgIGt3YXJnczogY29udHJpYl9kYXRhX2FyZ3MsCiApCiAKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvY2l0ZXh0L3NxbC9jaXRleHQuc3FsIGIvY29udHJpYi9jaXRleHQv c3FsL2NpdGV4dC5zcWwKaW5kZXggYWExY2Y5YWJkNWMuLmNjYmNhZThkNmJkIDEwMDY0NAotLS0g YS9jb250cmliL2NpdGV4dC9zcWwvY2l0ZXh0LnNxbAorKysgYi9jb250cmliL2NpdGV4dC9zcWwv Y2l0ZXh0LnNxbApAQCAtNjUzLDYgKzY1MywxNCBAQCBTRUxFQ1Qgc3BsaXRfcGFydCgnYWJjfkB+ ZGVmfkB+Z2hpJzo6Y2l0ZXh0LCAnfkB+JywgMikgPSAnZGVmJyBBUyB0OwogU0VMRUNUIHNwbGl0 X3BhcnQoJ2FiY1RkZWZUZ2hpJzo6Y2l0ZXh0LCAndCcsIDIpID0gJ2RlZicgQVMgdDsKIFNFTEVD VCBzcGxpdF9wYXJ0KCdhYmNUZGVmVGdoaSc6OmNpdGV4dCwgJ3QnOjpjaXRleHQsIDIpID0gJ2Rl ZicgQVMgdDsKIFNFTEVDVCBzcGxpdF9wYXJ0KCdhYmNUZGVmVGdoaScsICd0Jzo6Y2l0ZXh0LCAy KSA9ICdkZWYnIEFTIHQ7CistLSBwb3NpdGlvbnMgYXJlIGhhbmRsZWQgYXMgaW4gdGhlIGNvcmUg c3BsaXRfcGFydCgpCitTRUxFQ1Qgc3BsaXRfcGFydCgnYWJjVGRlZlRnaGknOjpjaXRleHQsICd0 Jzo6Y2l0ZXh0LCAtMSkgPSAnZ2hpJyBBUyB0OworU0VMRUNUIHNwbGl0X3BhcnQoJ2FiY1RkZWZU Z2hpJzo6Y2l0ZXh0LCAndCc6OmNpdGV4dCwgLTMpID0gJ2FiYycgQVMgdDsKK1NFTEVDVCBzcGxp dF9wYXJ0KCdhYmNUZGVmVGdoaSc6OmNpdGV4dCwgJ3QnOjpjaXRleHQsIDQpID0gJycgQVMgdDsK K1NFTEVDVCBzcGxpdF9wYXJ0KCdhYmNUZGVmVGdoaSc6OmNpdGV4dCwgJ3QnOjpjaXRleHQsIC00 KSA9ICcnIEFTIHQ7CitTRUxFQ1Qgc3BsaXRfcGFydCgnYWJjVGRlZlRnaGknOjpjaXRleHQsICcn OjpjaXRleHQsIDEpID0gJ2FiY1RkZWZUZ2hpJyBBUyB0OworU0VMRUNUIHNwbGl0X3BhcnQoJ2Fi Y1RkZWZUZ2hpJzo6Y2l0ZXh0LCAnJzo6Y2l0ZXh0LCAyKSA9ICcnIEFTIHQ7CitTRUxFQ1Qgc3Bs aXRfcGFydCgnYWJjVGRlZlRnaGknOjpjaXRleHQsICd0Jzo6Y2l0ZXh0LCAwKTsKIAogU0VMRUNU IHN0cnBvcygnaGlnaCc6OmNpdGV4dCwgJ2doJyAgICAgICAgKSA9IDMgQVMgdDsKIFNFTEVDVCBz dHJwb3MoJ2hpZ2gnLCAgICAgICAgICdnaCc6OmNpdGV4dCkgPSAzIEFTIHQ7Ci0tIAoyLjU1LjAK Cg== --===============3153658178377874084==--