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 1vQhSc-00F7vK-3A for pgsql-hackers@arkaria.postgresql.org; Wed, 03 Dec 2025 07:39:39 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vQhSa-00ByIW-0l for pgsql-hackers@arkaria.postgresql.org; Wed, 03 Dec 2025 07:39:36 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vQhSZ-00ByIO-28 for pgsql-hackers@lists.postgresql.org; Wed, 03 Dec 2025 07:39:36 +0000 Received: from mail-ua1-x92d.google.com ([2607:f8b0:4864:20::92d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vQhSW-002t9l-2f for pgsql-hackers@postgresql.org; Wed, 03 Dec 2025 07:39:34 +0000 Received: by mail-ua1-x92d.google.com with SMTP id a1e0cc1a2514c-9371f6f2813so1837282241.0 for ; Tue, 02 Dec 2025 23:39:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764747572; x=1765352372; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=QasuJZHVIPR0qd5mkoxuHJsZCheNoBy7hxgABEtBynY=; b=hVQSvhrHiSLDAcQhIQdvQVboMh6GyyjCcYNPbQL5h7VVi/x75OTyVHTl1bUMMqlttv ht/OHyBmsDK73efRwaZ34OpzZp0iPEE1sz1OXVCQhC5rZhgK6qTB9qXo+EPtWwTuusWP Z3d4oL66Vu6M/qh5JJOwoQl6MlBbZWM7oz8vohKpSYp+m3KhauamHaEd7ZsQBcHVYN0m +ziHwQW5631siz3EiJXSRikSxM6Cy1DuTZD0No+ZwRFCICvfAYTZ66j4NkZw5sRvFXlQ /Q+rnDVtLlNyyjWtYTIdDHU7p5xMyuvGoINTaIwfr3IksesfdKR6MdWzHwKWJSezh1mm m3KA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764747572; x=1765352372; 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=QasuJZHVIPR0qd5mkoxuHJsZCheNoBy7hxgABEtBynY=; b=dgHYIOOhxF7hLC1Z09JcHeeHyoDqlGYWBgwnjz9CBP6fvIph2m9A90LAamw0sz65d6 qqREoomnrC4ODi8bPPyGwSv2uT7Qqad8FUItCqMF2O5z7nZ3EKatkf3Hcnel4eF78aCz RQkx9K1iB7NYuOl4nxCSI3JeJDZb+bpsUfibyUAl1dw8HHXvLKW4n8PgkyfYj/AWMZHC rp2xL+qQFvRofAxM9yOZipa6IigFHQLMrvwSjB+fYhBgvjA/meV06BHACDgwJGdlzvIv 7Rd9aHti8KqCdxvEJiRNWn8JdHuV2adIILb1it3gygSQHD5vWCsywFjseh+gqjEwhtmB p/bg== X-Gm-Message-State: AOJu0YyDOAvbC8frou8+19xgPlMLvr+lq2M/sF43RBs67LcwoQCLeW6Q tjcSPiPjzsO6DzdX0Q4qGsVmhFUinQyVSp27TIYXwgS7C45KPlUbCtFmW9DD66fmONTh3z8tcEZ yXybgVdSrEJXT6VDbi1pGYpx9omU3UGUKU03kRSzmvQ== X-Gm-Gg: ASbGncsXQ8YtWwbZYGAcec6VWFtSXvC1QYS9RRDpmSjrOOCoZKiF9TMS9z2OS2r53aa oZElNYa7r+ElgulBG9dIPtTXqnPwmhiQn3/k8FTjVRWIZlnjUtyEDk84X7AthfcwNOG0M/9nCRW HDu9ppalmTi6+MPK4OSnj5WUmXdVnqJ5MRXpUU0P5MXHZLy2Wd6prjly+ddcW5VDrToitV+redL e5+AaZ64+yvWS579Q9ZWzsa7KLUIZ/4tpwm8oj0/n6Vz12vdniu14hIMFy9URIkXSZCvneuKUaB W1jCgPSW3LQgRPSUwB2r3YV9AFOarFoAQk6nkSzuJN5fqR/yzQWX5JLAFKx01rvFn4LACk1aDPs mlzEjmIzfZ7yLoGhIntB9aTjvOqUcT/HbWEeTrR3hHuU1Z0fttyFIkc3oE9El8znMaImZoymvnf Cj7Unrse0= X-Google-Smtp-Source: AGHT+IEVLAWuTlXdyFGb+SdFjVR+mOkraW9kJoOrwNf/girIrpSF5gkZKLUq4OR4HE1B5UyEfSSDLGj26yHexdMFnPE= X-Received: by 2002:a05:6102:26d3:b0:5d7:dec5:b6a7 with SMTP id ada2fe7eead31-5e48e23b324mr266761137.7.1764747572316; Tue, 02 Dec 2025 23:39:32 -0800 (PST) MIME-Version: 1.0 From: jian he Date: Wed, 3 Dec 2025 15:38:56 +0800 X-Gm-Features: AWmQ_bnrWloIcH0je5ecwWSFqKl-Mv-fgxQwyotC8iwPlWFz_50D7ICmWM-4v9U Message-ID: Subject: domain for WITHOUT OVERLAPS To: PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000002aa22606450750c5" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002aa22606450750c5 Content-Type: text/plain; charset="UTF-8" hi. While working on domain IS JSON, I found out that WITHOUT OVERLAPS does not support for domain too. but it does support user-defined range types (via CREATE TYPE). after looking around: check_exclusion_or_unique_constraint->ExecWithoutOverlapsNotEmpty ExecWithoutOverlapsNotEmpty typtype should be domain's basetype's typtype otherwise it will fallback to: elog(ERROR, "WITHOUT OVERLAPS column \"%s\" is not a range or multirange", NameStr(attname)); That means we need to cheaply get the domain basetype's pg_type.typtype in lookup_type_cache. so I added a new char field: TypeCacheEntry.domainBaseTyptype. it should be working: For primary key, unique constraint: pg_index.indclass is the same for domain and basetype. no need to worry too much about pg_index.indcollation because range type is not collateable. For foreign key: pg_constraint (conpfeqop, conppeqop, conffeqop) are the same for domain and basetype. -- jian https://www.enterprisedb.com/ --0000000000002aa22606450750c5 Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0001-domain-for-WITHOUT-OVERLAPS.patch" Content-Disposition: attachment; filename="v1-0001-domain-for-WITHOUT-OVERLAPS.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mipp2uh50 RnJvbSAzNzg1MmI0YTE0YWUyOWU4NDVlNzQ4YmU5YTBlMDQ5OTk5MGU0ZDAzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMyBEZWMgMjAyNSAxNTozMTowMyArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEg MS8xXSBkb21haW4gZm9yIFdJVEhPVVQgT1ZFUkxBUFMKCkRvbWFpbnMgYXJlIG5vdyBzdXBwb3J0 ZWQgZm9yIFdJVEhPVVQgT1ZFUkxBUFMgcHJpbWFyeSBrZXksIHVuaXF1ZSwgYW5kIGZvcmVpZ24K a2V5IGNvbnN0cmFpbnRzLgoKZGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8KLS0tCiBz cmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyAgICAgICAgICAgfCAxMSArKystCiBz cmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jICAgICAgICAgICAgfCAgMiArCiBzcmMv YmFja2VuZC91dGlscy9jYWNoZS90eXBjYWNoZS5jICAgICAgICAgICAgfCAgMiArCiBzcmMvaW5j bHVkZS91dGlscy90eXBjYWNoZS5oICAgICAgICAgICAgICAgICAgfCAgNSArLQogLi4uL3JlZ3Jl c3MvZXhwZWN0ZWQvd2l0aG91dF9vdmVybGFwcy5vdXQgICAgIHwgNjMgKysrKysrKysrKysrKysr KysrLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvd2l0aG91dF9vdmVybGFwcy5zcWwgICAgIHwgNDcg KysrKysrKysrKysrKy0KIDYgZmlsZXMgY2hhbmdlZCwgMTIyIGluc2VydGlvbnMoKyksIDggZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5n LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwppbmRleCBkZDMyM2M5Yjlm ZC4uZmNmMzBjNmNkMmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRl eGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBAIC03NTIs MTMgKzc1MiwyMCBAQCBjaGVja19leGNsdXNpb25fb3JfdW5pcXVlX2NvbnN0cmFpbnQoUmVsYXRp b24gaGVhcCwgUmVsYXRpb24gaW5kZXgsCiAKIAkJaWYgKCFpc251bGxbaW5kbmtleWF0dHMgLSAx XSkKIAkJeworCQkJY2hhciAJCXR5cHR5cGU7CiAJCQlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0 aW9uR2V0RGVzY3IoaGVhcCk7CiAJCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NB dHRyKHR1cGRlc2MsIGF0dG5vIC0gMSk7Ci0JCQlUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUgPSBs b29rdXBfdHlwZV9jYWNoZShhdHQtPmF0dHR5cGlkLCAwKTsKKwkJCVR5cGVDYWNoZUVudHJ5ICp0 eXBjYWNoZSA9IGxvb2t1cF90eXBlX2NhY2hlKGF0dC0+YXR0dHlwaWQsIFRZUEVDQUNIRV9ET01B SU5fQkFTRV9JTkZPKTsKKworCQkJaWYgKE9pZElzVmFsaWQodHlwY2FjaGUtPmRvbWFpbkJhc2VU eXBlKSkKKwkJCQl0eXB0eXBlID0gdHlwY2FjaGUtPmRvbWFpbkJhc2VUeXB0eXBlOworCQkJZWxz ZQorCQkJCXR5cHR5cGUgPSB0eXBjYWNoZS0+dHlwdHlwZTsKKwogCiAJCQlFeGVjV2l0aG91dE92 ZXJsYXBzTm90RW1wdHkoaGVhcCwgYXR0LT5hdHRuYW1lLAogCQkJCQkJCQkJCXZhbHVlc1tpbmRu a2V5YXR0cyAtIDFdLAotCQkJCQkJCQkJCXR5cGNhY2hlLT50eXB0eXBlLCBhdHQtPmF0dHR5cGlk KTsKKwkJCQkJCQkJCQl0eXB0eXBlLCBhdHQtPmF0dHR5cGlkKTsKIAkJfQogCX0KIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYyBiL3NyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZV91dGlsY21kLmMKaW5kZXggZTk2YjM4YTU5ZDUuLjY3ZWMxYWFhZDAzIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jCisrKyBiL3NyYy9iYWNr ZW5kL3BhcnNlci9wYXJzZV91dGlsY21kLmMKQEAgLTI3OTIsNiArMjc5Miw4IEBAIHRyYW5zZm9y bUluZGV4Q29uc3RyYWludChDb25zdHJhaW50ICpjb25zdHJhaW50LCBDcmVhdGVTdG10Q29udGV4 dCAqY3h0KQogCQkJCQlpZiAoIU9pZElzVmFsaWQodHlwaWQpICYmIGNvbHVtbikKIAkJCQkJCXR5 cGlkID0gdHlwZW5hbWVUeXBlSWQoTlVMTCwgY29sdW1uLT50eXBlTmFtZSk7CiAKKwkJCQkJdHlw aWQgPSBnZXRCYXNlVHlwZSh0eXBpZCk7CisKIAkJCQkJaWYgKCFPaWRJc1ZhbGlkKHR5cGlkKSB8 fCAhKHR5cGVfaXNfcmFuZ2UodHlwaWQpIHx8IHR5cGVfaXNfbXVsdGlyYW5nZSh0eXBpZCkpKQog CQkJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9N SVNNQVRDSCksCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS90eXBjYWNoZS5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvdHlwY2FjaGUuYwppbmRleCA2YTM0NzY5OGVkZi4u ZTI3Y2ExNDY2ZjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3R5cGNhY2hl LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvdHlwY2FjaGUuYwpAQCAtOTQ0LDYgKzk0 NCw4IEBAIGxvb2t1cF90eXBlX2NhY2hlKE9pZCB0eXBlX2lkLCBpbnQgZmxhZ3MpCiAJCXR5cGVu dHJ5LT5kb21haW5CYXNlVHlwbW9kID0gLTE7CiAJCXR5cGVudHJ5LT5kb21haW5CYXNlVHlwZSA9 CiAJCQlnZXRCYXNlVHlwZUFuZFR5cG1vZCh0eXBlX2lkLCAmdHlwZW50cnktPmRvbWFpbkJhc2VU eXBtb2QpOworCQl0eXBlbnRyeS0+ZG9tYWluQmFzZVR5cHR5cGUgPQorCQkJZ2V0X3R5cHR5cGUo dHlwZW50cnktPmRvbWFpbkJhc2VUeXBlKTsKIAl9CiAJaWYgKChmbGFncyAmIFRZUEVDQUNIRV9E T01BSU5fQ09OU1RSX0lORk8pICYmCiAJCSh0eXBlbnRyeS0+ZmxhZ3MgJiBUQ0ZMQUdTX0NIRUNL RURfRE9NQUlOX0NPTlNUUkFJTlRTKSA9PSAwICYmCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91 dGlscy90eXBjYWNoZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvdHlwY2FjaGUuaAppbmRleCAxY2Iz MGYxODE4Yy4uMmFkNzUyOGMxOTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3R5cGNh Y2hlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvdHlwY2FjaGUuaApAQCAtMTA5LDExICsxMDks MTIgQEAgdHlwZWRlZiBzdHJ1Y3QgVHlwZUNhY2hlRW50cnkKIAlzdHJ1Y3QgVHlwZUNhY2hlRW50 cnkgKnJuZ3R5cGU7IC8qIG11bHRpcmFuZ2UncyByYW5nZSB1bmRlcmx5aW5nIHR5cGUgKi8KIAog CS8qCi0JICogRG9tYWluJ3MgYmFzZSB0eXBlIGFuZCB0eXBtb2QgaWYgaXQncyBhIGRvbWFpbiB0 eXBlLiAgWmVyb2VzIGlmIG5vdAotCSAqIGRvbWFpbiwgb3IgaWYgaW5mb3JtYXRpb24gaGFzbid0 IGJlZW4gcmVxdWVzdGVkLgorCSAqIERvbWFpbidzIGJhc2UgdHlwZSwgdHlwbW9kLCBhbmQgdHlw dHlwZSBpZiBpdCdzIGEgZG9tYWluIHR5cGUuCisJICogWmVyb2VzIGlmIG5vdCBkb21haW4sIG9y IGlmIGluZm9ybWF0aW9uIGhhc24ndCBiZWVuIHJlcXVlc3RlZC4KIAkgKi8KIAlPaWQJCQlkb21h aW5CYXNlVHlwZTsKIAlpbnQzMgkJZG9tYWluQmFzZVR5cG1vZDsKKwljaGFyCQlkb21haW5CYXNl VHlwdHlwZTsKIAogCS8qCiAJICogRG9tYWluIGNvbnN0cmFpbnQgZGF0YSBpZiBpdCdzIGEgZG9t YWluIHR5cGUuICBOVUxMIGlmIG5vdCBkb21haW4sIG9yCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3dpdGhvdXRfb3ZlcmxhcHMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC93aXRob3V0X292ZXJsYXBzLm91dAppbmRleCBmMzE0NGJkYzM5Yy4uZTNlNWI4YTRl OGQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2l0aG91dF9vdmVybGFw cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aXRob3V0X292ZXJsYXBzLm91 dApAQCAtMTYyLDcgKzE2Miw0OCBAQCBDUkVBVEUgVEFCTEUgdGVtcG9yYWxfcm5nMyAoCiApOwog QUxURVIgVEFCTEUgdGVtcG9yYWxfcm5nMyBEUk9QIENPTlNUUkFJTlQgdGVtcG9yYWxfcm5nM19w azsKIERST1AgVEFCTEUgdGVtcG9yYWxfcm5nMzsKLURST1AgVFlQRSB0ZXh0cmFuZ2UyOworQ1JF QVRFIERPTUFJTiBkX3RleHRyYW5nZTEgQVMgaW50NHJhbmdlIENIRUNLIChWQUxVRSA8PiAnWzEw LDEwXScpOworQ1JFQVRFIERPTUFJTiBkX3RleHRyYW5nZTIgQVMgdGV4dHJhbmdlMiBDSEVDSyAo VkFMVUUgPD4gJ1tjLGNdJyk7CitDUkVBVEUgRE9NQUlOIGRfdGV4dHJhbmdlMmMgQVMgZF90ZXh0 cmFuZ2UyOworQ1JFQVRFIFRBQkxFIHRlbXBvcmFsX3JuZzQgKAorICBpZCBkX3RleHRyYW5nZTEs CisgIHZhbGlkX2F0IGRfdGV4dHJhbmdlMmMsCisgIENPTlNUUkFJTlQgdGVtcG9yYWxfcm5nNF9w ayBQUklNQVJZIEtFWSAoaWQsIHZhbGlkX2F0IFdJVEhPVVQgT1ZFUkxBUFMpCispOworSU5TRVJU IElOVE8gdGVtcG9yYWxfcm5nNCBWQUxVRVMgKCdbMSwxXScsICdbYyxjXScpOyAtLWRvbWFpbiBj b25zdHJhaW50IHZpb2xhdGlvbgorRVJST1I6ICB2YWx1ZSBmb3IgZG9tYWluIGRfdGV4dHJhbmdl MmMgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAiZF90ZXh0cmFuZ2UyX2NoZWNrIgorSU5TRVJU IElOVE8gdGVtcG9yYWxfcm5nNCBWQUxVRVMgKCdbMSwxXScsICdbYSxmXScpOworSU5TRVJUIElO VE8gdGVtcG9yYWxfcm5nNCBWQUxVRVMgKCdbMSwxXScsICdbYixiXScpOyAtLWVycm9yCitFUlJP UjogIGNvbmZsaWN0aW5nIGtleSB2YWx1ZSB2aW9sYXRlcyBleGNsdXNpb24gY29uc3RyYWludCAi dGVtcG9yYWxfcm5nNF9wayIKK0RFVEFJTDogIEtleSAoaWQsIHZhbGlkX2F0KT0oWzEsMiksIFti LGJdKSBjb25mbGljdHMgd2l0aCBleGlzdGluZyBrZXkgKGlkLCB2YWxpZF9hdCk9KFsxLDIpLCBb YSxmXSkuCitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmc0IFZBTFVFUyAoJ1syLDJdJywgJ1tCLEMp JyksICgnWzIsMl0nLCAnW0EsQyknKTsgLS1lcnJvcgorRVJST1I6ICBjb25mbGljdGluZyBrZXkg dmFsdWUgdmlvbGF0ZXMgZXhjbHVzaW9uIGNvbnN0cmFpbnQgInRlbXBvcmFsX3JuZzRfcGsiCitE RVRBSUw6ICBLZXkgKGlkLCB2YWxpZF9hdCk9KFsyLDMpLCBbQSxDKSkgY29uZmxpY3RzIHdpdGgg ZXhpc3Rpbmcga2V5IChpZCwgdmFsaWRfYXQpPShbMiwzKSwgW0IsQykpLgorQ1JFQVRFIFRBQkxF IHRlbXBvcmFsX3JuZ2ZrIChwYXJlbnRfaWQgZF90ZXh0cmFuZ2UxLCBpZCBpbnQ0cmFuZ2UsIHZh bGlkX2F0IGRfdGV4dHJhbmdlMik7CitBTFRFUiBUQUJMRSB0ZW1wb3JhbF9ybmdmaworICBBREQg Q09OU1RSQUlOVCB0ZW1wb3JhbF9ybmdma19maworICAgIEZPUkVJR04gS0VZIChwYXJlbnRfaWQs IFBFUklPRCB2YWxpZF9hdCkKKyAgICBSRUZFUkVOQ0VTIHRlbXBvcmFsX3JuZzQ7CitJTlNFUlQg SU5UTyB0ZW1wb3JhbF9ybmdmayBWQUxVRVMgKCdbMSwxXScsICdbMiwyXScsICdbZCxkXScpOwor VEFCTEUgdGVtcG9yYWxfcm5nNDsKKyAgaWQgICB8IHZhbGlkX2F0IAorLS0tLS0tLSstLS0tLS0t LS0tCisgWzEsMikgfCBbYSxmXQorKDEgcm93KQorCitUQUJMRSB0ZW1wb3JhbF9ybmdmazsKKyBw YXJlbnRfaWQgfCAgaWQgICB8IHZhbGlkX2F0IAorLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0t LS0tCisgWzEsMikgICAgIHwgWzIsMykgfCBbZCxkXQorKDEgcm93KQorCitVUERBVEUgdGVtcG9y YWxfcm5nNCBTRVQgdmFsaWRfYXQgPSAnW2MsY10nOyAtLWVycm9yCitFUlJPUjogIHZhbHVlIGZv ciBkb21haW4gZF90ZXh0cmFuZ2UyYyB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJkX3RleHRy YW5nZTJfY2hlY2siCitVUERBVEUgdGVtcG9yYWxfcm5nNCBTRVQgdmFsaWRfYXQgPSAnW2EsZ10n OworVVBEQVRFIHRlbXBvcmFsX3JuZzQgU0VUIHZhbGlkX2F0ID0gJ1tmLGZdJzsgLS1lcnJvcgor RVJST1I6ICB1cGRhdGUgb3IgZGVsZXRlIG9uIHRhYmxlICJ0ZW1wb3JhbF9ybmc0IiB2aW9sYXRl cyBmb3JlaWduIGtleSBjb25zdHJhaW50ICJ0ZW1wb3JhbF9ybmdma19mayIgb24gdGFibGUgInRl bXBvcmFsX3JuZ2ZrIgorREVUQUlMOiAgS2V5IChpZCwgdmFsaWRfYXQpPShbMSwyKSwgW2EsZ10p IGlzIHN0aWxsIHJlZmVyZW5jZWQgZnJvbSB0YWJsZSAidGVtcG9yYWxfcm5nZmsiLgorRFJPUCBU QUJMRSB0ZW1wb3JhbF9ybmc0LCB0ZW1wb3JhbF9ybmdmazsKIC0tIFBLIHdpdGggb25lIGNvbHVt biBwbHVzIGEgbXVsdGlyYW5nZToKIENSRUFURSBUQUJMRSB0ZW1wb3JhbF9tbHRybmcgKAogICBp ZCBpbnQ0cmFuZ2UsCkBAIC0zMDEsNyArMzQyLDYgQEAgU0VMRUNUIHBnX2dldF9pbmRleGRlZihj b25pbmRpZCwgMCwgdHJ1ZSkgRlJPTSBwZ19jb25zdHJhaW50IFdIRVJFIGNvbm5hbWUgPSAndGUK IAogRFJPUCBUQUJMRSB0ZW1wb3JhbF9ybmczOwogLS0gVU5JUVVFIHdpdGggYSBjdXN0b20gcmFu Z2UgdHlwZToKLUNSRUFURSBUWVBFIHRleHRyYW5nZTIgQVMgcmFuZ2UgKHN1YnR5cGU9dGV4dCwg Y29sbGF0aW9uPSJDIik7CiBDUkVBVEUgVEFCTEUgdGVtcG9yYWxfcm5nMyAoCiAgIGlkIGludDRy YW5nZSwKICAgdmFsaWRfYXQgdGV4dHJhbmdlMiwKQEAgLTMwOSw2ICszNDksMjUgQEAgQ1JFQVRF IFRBQkxFIHRlbXBvcmFsX3JuZzMgKAogKTsKIEFMVEVSIFRBQkxFIHRlbXBvcmFsX3JuZzMgRFJP UCBDT05TVFJBSU5UIHRlbXBvcmFsX3JuZzNfdXE7CiBEUk9QIFRBQkxFIHRlbXBvcmFsX3JuZzM7 CitDUkVBVEUgVEFCTEUgdGVtcG9yYWxfcm5nNCAoCisgIGlkIGRfdGV4dHJhbmdlMSwKKyAgdmFs aWRfYXQgZF90ZXh0cmFuZ2UyYywKKyAgQ09OU1RSQUlOVCB0ZW1wb3JhbF9ybmc0X3BrIFVOSVFV RSAoaWQsIHZhbGlkX2F0IFdJVEhPVVQgT1ZFUkxBUFMpCispOworSU5TRVJUIElOVE8gdGVtcG9y YWxfcm5nNCBWQUxVRVMgKCdbMSwxXScsIE5VTEwpLCAoTlVMTCwgJ1sxLDFdJyk7CitJTlNFUlQg SU5UTyB0ZW1wb3JhbF9ybmc0IFZBTFVFUyAoJ1sxLDFdJywgJ1tjLGNdJyk7IC0tZG9tYWluIGNv bnN0cmFpbnQgdmlvbGF0aW9uCitFUlJPUjogIHZhbHVlIGZvciBkb21haW4gZF90ZXh0cmFuZ2Uy YyB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJkX3RleHRyYW5nZTJfY2hlY2siCitJTlNFUlQg SU5UTyB0ZW1wb3JhbF9ybmc0IFZBTFVFUyAoJ1sxLDFdJywgJ1thLGNdJyk7CitJTlNFUlQgSU5U TyB0ZW1wb3JhbF9ybmc0IFZBTFVFUyAoJ1sxLDFdJywgJ1tiLGJdJyk7IC0tZXJyb3IKK0VSUk9S OiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVzIGV4Y2x1c2lvbiBjb25zdHJhaW50ICJ0 ZW1wb3JhbF9ybmc0X3BrIgorREVUQUlMOiAgS2V5IChpZCwgdmFsaWRfYXQpPShbMSwyKSwgW2Is Yl0pIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIGtleSAoaWQsIHZhbGlkX2F0KT0oWzEsMiksIFth LGNdKS4KK0lOU0VSVCBJTlRPIHRlbXBvcmFsX3JuZzQgVkFMVUVTICgnWzEwLDEwXScsIE5VTEwp OyAtLWVycm9yCitFUlJPUjogIHZhbHVlIGZvciBkb21haW4gZF90ZXh0cmFuZ2UxIHZpb2xhdGVz IGNoZWNrIGNvbnN0cmFpbnQgImRfdGV4dHJhbmdlMV9jaGVjayIKK0lOU0VSVCBJTlRPIHRlbXBv cmFsX3JuZzQgVkFMVUVTICgnWzIsMl0nLCAnW0IsQyknKSwgKCdbMiwyXScsICdbQSxDKScpOyAt LWVycm9yCitFUlJPUjogIGNvbmZsaWN0aW5nIGtleSB2YWx1ZSB2aW9sYXRlcyBleGNsdXNpb24g Y29uc3RyYWludCAidGVtcG9yYWxfcm5nNF9wayIKK0RFVEFJTDogIEtleSAoaWQsIHZhbGlkX2F0 KT0oWzIsMyksIFtBLEMpKSBjb25mbGljdHMgd2l0aCBleGlzdGluZyBrZXkgKGlkLCB2YWxpZF9h dCk9KFsyLDMpLCBbQixDKSkuCitEUk9QIFRBQkxFIHRlbXBvcmFsX3JuZzQ7CitEUk9QIERPTUFJ TiBkX3RleHRyYW5nZTEsIGRfdGV4dHJhbmdlMmMsIGRfdGV4dHJhbmdlMjsKIERST1AgVFlQRSB0 ZXh0cmFuZ2UyOwogLS0KIC0tIHRlc3QgQUxURVIgVEFCTEUgQUREIENPTlNUUkFJTlQKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3dpdGhvdXRfb3ZlcmxhcHMuc3FsIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvd2l0aG91dF9vdmVybGFwcy5zcWwKaW5kZXggNGFhY2EyNDJiYmUuLmE5 ODRkZDBmMzcyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC93aXRob3V0X292ZXJs YXBzLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC93aXRob3V0X292ZXJsYXBzLnNxbApA QCAtMTAwLDcgKzEwMCwzNiBAQCBDUkVBVEUgVEFCTEUgdGVtcG9yYWxfcm5nMyAoCiApOwogQUxU RVIgVEFCTEUgdGVtcG9yYWxfcm5nMyBEUk9QIENPTlNUUkFJTlQgdGVtcG9yYWxfcm5nM19wazsK IERST1AgVEFCTEUgdGVtcG9yYWxfcm5nMzsKLURST1AgVFlQRSB0ZXh0cmFuZ2UyOworCitDUkVB VEUgRE9NQUlOIGRfdGV4dHJhbmdlMSBBUyBpbnQ0cmFuZ2UgQ0hFQ0sgKFZBTFVFIDw+ICdbMTAs MTBdJyk7CitDUkVBVEUgRE9NQUlOIGRfdGV4dHJhbmdlMiBBUyB0ZXh0cmFuZ2UyIENIRUNLIChW QUxVRSA8PiAnW2MsY10nKTsKK0NSRUFURSBET01BSU4gZF90ZXh0cmFuZ2UyYyBBUyBkX3RleHRy YW5nZTI7CitDUkVBVEUgVEFCTEUgdGVtcG9yYWxfcm5nNCAoCisgIGlkIGRfdGV4dHJhbmdlMSwK KyAgdmFsaWRfYXQgZF90ZXh0cmFuZ2UyYywKKyAgQ09OU1RSQUlOVCB0ZW1wb3JhbF9ybmc0X3Br IFBSSU1BUlkgS0VZIChpZCwgdmFsaWRfYXQgV0lUSE9VVCBPVkVSTEFQUykKKyk7CisKK0lOU0VS VCBJTlRPIHRlbXBvcmFsX3JuZzQgVkFMVUVTICgnWzEsMV0nLCAnW2MsY10nKTsgLS1kb21haW4g Y29uc3RyYWludCB2aW9sYXRpb24KK0lOU0VSVCBJTlRPIHRlbXBvcmFsX3JuZzQgVkFMVUVTICgn WzEsMV0nLCAnW2EsZl0nKTsKK0lOU0VSVCBJTlRPIHRlbXBvcmFsX3JuZzQgVkFMVUVTICgnWzEs MV0nLCAnW2IsYl0nKTsgLS1lcnJvcgorSU5TRVJUIElOVE8gdGVtcG9yYWxfcm5nNCBWQUxVRVMg KCdbMiwyXScsICdbQixDKScpLCAoJ1syLDJdJywgJ1tBLEMpJyk7IC0tZXJyb3IKKworQ1JFQVRF IFRBQkxFIHRlbXBvcmFsX3JuZ2ZrIChwYXJlbnRfaWQgZF90ZXh0cmFuZ2UxLCBpZCBpbnQ0cmFu Z2UsIHZhbGlkX2F0IGRfdGV4dHJhbmdlMik7CitBTFRFUiBUQUJMRSB0ZW1wb3JhbF9ybmdmawor ICBBREQgQ09OU1RSQUlOVCB0ZW1wb3JhbF9ybmdma19maworICAgIEZPUkVJR04gS0VZIChwYXJl bnRfaWQsIFBFUklPRCB2YWxpZF9hdCkKKyAgICBSRUZFUkVOQ0VTIHRlbXBvcmFsX3JuZzQ7CisK K0lOU0VSVCBJTlRPIHRlbXBvcmFsX3JuZ2ZrIFZBTFVFUyAoJ1sxLDFdJywgJ1syLDJdJywgJ1tk LGRdJyk7CitUQUJMRSB0ZW1wb3JhbF9ybmc0OworVEFCTEUgdGVtcG9yYWxfcm5nZms7CisKK1VQ REFURSB0ZW1wb3JhbF9ybmc0IFNFVCB2YWxpZF9hdCA9ICdbYyxjXSc7IC0tZXJyb3IKK1VQREFU RSB0ZW1wb3JhbF9ybmc0IFNFVCB2YWxpZF9hdCA9ICdbYSxnXSc7CitVUERBVEUgdGVtcG9yYWxf cm5nNCBTRVQgdmFsaWRfYXQgPSAnW2YsZl0nOyAtLWVycm9yCisKK0RST1AgVEFCTEUgdGVtcG9y YWxfcm5nNCwgdGVtcG9yYWxfcm5nZms7CiAKIC0tIFBLIHdpdGggb25lIGNvbHVtbiBwbHVzIGEg bXVsdGlyYW5nZToKIENSRUFURSBUQUJMRSB0ZW1wb3JhbF9tbHRybmcgKApAQCAtMTcwLDcgKzE5 OSw2IEBAIFNFTEVDVCBwZ19nZXRfaW5kZXhkZWYoY29uaW5kaWQsIDAsIHRydWUpIEZST00gcGdf Y29uc3RyYWludCBXSEVSRSBjb25uYW1lID0gJ3RlCiBEUk9QIFRBQkxFIHRlbXBvcmFsX3JuZzM7 CiAKIC0tIFVOSVFVRSB3aXRoIGEgY3VzdG9tIHJhbmdlIHR5cGU6Ci1DUkVBVEUgVFlQRSB0ZXh0 cmFuZ2UyIEFTIHJhbmdlIChzdWJ0eXBlPXRleHQsIGNvbGxhdGlvbj0iQyIpOwogQ1JFQVRFIFRB QkxFIHRlbXBvcmFsX3JuZzMgKAogICBpZCBpbnQ0cmFuZ2UsCiAgIHZhbGlkX2F0IHRleHRyYW5n ZTIsCkBAIC0xNzgsNiArMjA2LDIxIEBAIENSRUFURSBUQUJMRSB0ZW1wb3JhbF9ybmczICgKICk7 CiBBTFRFUiBUQUJMRSB0ZW1wb3JhbF9ybmczIERST1AgQ09OU1RSQUlOVCB0ZW1wb3JhbF9ybmcz X3VxOwogRFJPUCBUQUJMRSB0ZW1wb3JhbF9ybmczOworCitDUkVBVEUgVEFCTEUgdGVtcG9yYWxf cm5nNCAoCisgIGlkIGRfdGV4dHJhbmdlMSwKKyAgdmFsaWRfYXQgZF90ZXh0cmFuZ2UyYywKKyAg Q09OU1RSQUlOVCB0ZW1wb3JhbF9ybmc0X3BrIFVOSVFVRSAoaWQsIHZhbGlkX2F0IFdJVEhPVVQg T1ZFUkxBUFMpCispOworSU5TRVJUIElOVE8gdGVtcG9yYWxfcm5nNCBWQUxVRVMgKCdbMSwxXScs IE5VTEwpLCAoTlVMTCwgJ1sxLDFdJyk7CitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmc0IFZBTFVF UyAoJ1sxLDFdJywgJ1tjLGNdJyk7IC0tZG9tYWluIGNvbnN0cmFpbnQgdmlvbGF0aW9uCitJTlNF UlQgSU5UTyB0ZW1wb3JhbF9ybmc0IFZBTFVFUyAoJ1sxLDFdJywgJ1thLGNdJyk7CitJTlNFUlQg SU5UTyB0ZW1wb3JhbF9ybmc0IFZBTFVFUyAoJ1sxLDFdJywgJ1tiLGJdJyk7IC0tZXJyb3IKK0lO U0VSVCBJTlRPIHRlbXBvcmFsX3JuZzQgVkFMVUVTICgnWzEwLDEwXScsIE5VTEwpOyAtLWVycm9y CitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmc0IFZBTFVFUyAoJ1syLDJdJywgJ1tCLEMpJyksICgn WzIsMl0nLCAnW0EsQyknKTsgLS1lcnJvcgorCitEUk9QIFRBQkxFIHRlbXBvcmFsX3JuZzQ7CitE Uk9QIERPTUFJTiBkX3RleHRyYW5nZTEsIGRfdGV4dHJhbmdlMmMsIGRfdGV4dHJhbmdlMjsKIERS T1AgVFlQRSB0ZXh0cmFuZ2UyOwogCiAtLQotLSAKMi4zNC4xCgo= --0000000000002aa22606450750c5--