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 1vseE4-00BkUm-2a for pgsql-bugs@arkaria.postgresql.org; Wed, 18 Feb 2026 09:52:09 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vseE4-00FG6f-0S for pgsql-bugs@arkaria.postgresql.org; Wed, 18 Feb 2026 09:52:08 +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 1vseCn-00FDqa-1X for pgsql-bugs@lists.postgresql.org; Wed, 18 Feb 2026 09:50:49 +0000 Received: from mail-oi1-x229.google.com ([2607:f8b0:4864:20::229]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vseCl-00000001LAC-2MpA for pgsql-bugs@lists.postgresql.org; Wed, 18 Feb 2026 09:50:49 +0000 Received: by mail-oi1-x229.google.com with SMTP id 5614622812f47-45ee8823e2aso2775941b6e.0 for ; Wed, 18 Feb 2026 01:50:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771408246; cv=none; d=google.com; s=arc-20240605; b=joleirbLtZ8UwT/51b7V3Qzi5ywZSPu7X8Q2Iza8wqWJOvUoVmLfzNFk34Ia8KeVvm aqnXIVtpKCfT6Jw+wy0FJ+r3gEUO3B9YP/5qPbjzOf9czO9SouBbUtse3fi3HzNOc2FU Kb0o2zLX04FjLQ4UJNg5otQPeLu8PJF6r9+S3ebDB2aVdxhsnPNREj9cnhxG5a9FwHfE boaHCCvCaETkOSL3P8iXZUhqzUWdW8wBGzDafXTW0dRHlbW9d68XvN3VCyTXWkW5J7IA FzHWIK/K65l8Gac6u3K+prdMJw1gOn9xGWk2MXSWM9WfxwpeNR0/EWRdzAQc/nY0/Rn8 64HA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=zM/EQEdt2EPyB2WOQFLq9/UX+a+cHX7DorcMchKaBMU=; fh=mLAQmUGl/7eyLQ2F9VbMDoJKyUXC7N1f11lOCkU/e5w=; b=LBFH6uEduS9fGHu11ImmerMhgSNUdiXuSzLUmkbHnS57qwGqYj03GL2pfmjO7Aedqo psGzy2DAdhtHdeEIog31c+1kqIxesm3DCTedInyaFCEVC2HD1G3YIMJUTx0W0aquVyjN bttt+UffCfoTp5Af5+QgsL5/4U608bOCtGMJsQ/RrTvGDKTw/s1qZSmmrO0Mpa4o+YH3 xbSb7yI7BXcmU02thQuc1c1r6RdZbrUqphNF7IZKHjdAeE/+9AYT7oUCDryE4VV474/i 5ZpkpcgV1fU3pcJ62htYp64/pUkq5YurcWwVCHa5bqAznV3tjJruNDevVAjtCwOA83Uz juwg==; 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=20230601; t=1771408246; x=1772013046; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=zM/EQEdt2EPyB2WOQFLq9/UX+a+cHX7DorcMchKaBMU=; b=YETIinGgvVEcJhpPaqZg7arIeZ5VQlqm/AJxcPAKJnvbaQCfCMKFLY74+JoYK7sFF+ gLbXfvqpZ2qio5by9W+fatd22OkF4/18b4cZdndx7ufq5i0QrxCu9dvZlEW9cZJTX9Fh Tbq/TLOmQEswotPgcZS41MNnTPWgNQr24ZijUjVm16y9gka8AfDtMB9WD5rzA4QsbJ+V 5BcxIhgH1CQyaXuc2hY3K9rXaUABPQIhuF3VoHQq7xotizbI61T5Vf+6w+q078JYFPbe ATRXyf2Al6gCUkefzogFnPB6L4+Fhb3LbciTdUrW7N2hsygEOOA4rzx8Ozx6SnHGed7k OpgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771408246; x=1772013046; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=zM/EQEdt2EPyB2WOQFLq9/UX+a+cHX7DorcMchKaBMU=; b=kYAUQGjVX4IAE926uOdZkEWjMyoOWgVpmJoqVacP6bec52JO6vM36yDr2HM5m5SLcW sBiYqFOzt8BeJ2R5hBGi7zOu0TxnTBdmKYiUGBIUSYJzqhbOCpSjBB7QHMdi42cBH0yA ApxmaYQspMwQ9scR1jF8eJpHIKmTVUyy1diI9fjfuBCHSyCzA46cZXKJt93VHsUSCjOk jjouaEQllrvLGXJsLTrb+47ehSNSU2WfEi7TwKy5vEzmT0bsp0na3YjSAsBobvNwuUfn UilhMtvmiHIucWUEoiSEdSaR7xyBPXn/hiLR94YGOVqBgUT7SOW+EGly5MZoV5s2G0MF AuPg== X-Forwarded-Encrypted: i=1; AJvYcCXOqQWQH8+joyC4Tyfd/lu5kaWMwoqbchB4i3e+F1N0aD/6Ck7h7zTg/+b4XFc2eoTYqeOYGATMb5PO@lists.postgresql.org X-Gm-Message-State: AOJu0YzMM4KUUsWh00DcRdvTu7BgsrpsZsd3QLOqGYBIQBoxgviaqV8H amZcQTaGE8ZEs3+BzGiWWH5uE7sigskeq+wUCYXVbdOWWEkFJzFGmSqVLTl/OTRbMkeQq3EJmtb ppsdK60obqgaLM3TyLer1defbBGDs3ThVP8JW X-Gm-Gg: AZuq6aLZ0YkIubEmmKaECdl/T9T3Erbb+0SxzD+Wp8VOCfyhHoyuUnzjsKgHzxejPsD 7zGxAGJrtSwc2we9uYPXraCX49Dp5idHcICPKL85yJWKC6lH0DqI8YZVLWWuPFDutshj8qpwTMR qXsLVLdW8zSvn3uiGDlVL7XJ3yUX67kqdPzCT3AIV+vb9KZeKh6OcxhTzk/zo+E4ZRtqThZHUDL NA8/FG23TsoOACVmWGXD/Ri5Cuyv3Z7AxF+We+Qq9zHNkXBQSidshPRt9okM08XtDPQX71B9YIX u+gcpV+1PL25WSFPQxCB X-Received: by 2002:a05:6808:14d0:b0:45f:59e:1e06 with SMTP id 5614622812f47-4639ab5f4ccmr9023299b6e.4.1771408245798; Wed, 18 Feb 2026 01:50:45 -0800 (PST) MIME-Version: 1.0 References: <19412-1d0318089b86859e@postgresql.org> In-Reply-To: From: Richard Guo Date: Wed, 18 Feb 2026 18:50:34 +0900 X-Gm-Features: AaiRm50Ej7L-JBQpaPG4CcxTnYFg_9mGf6WTVazaXQKBqapn6m2UD92mtFIxcoo Message-ID: Subject: Re: BUG #19412: Wrong query result with not null constraint To: David Rowley Cc: s.shinderuk@postgrespro.ru, pgsql-bugs@lists.postgresql.org, Tom Lane Content-Type: multipart/mixed; boundary="0000000000003e50d9064b161f28" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003e50d9064b161f28 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Feb 18, 2026 at 10:51=E2=80=AFAM Richard Guo wrote: > Exactly. I think this is because when adjust_appendrel_attrs_mutator > propagates the nullingrel bits from the parent rel's Var into the > translated Var, it loses the translated Var's original bits. Instead > of overwriting the translated Var's nullingrels, I think we should > merge them. > > --- a/src/backend/optimizer/util/appendinfo.c > +++ b/src/backend/optimizer/util/appendinfo.c > @@ -291,8 +291,11 @@ adjust_appendrel_attrs_mutator(Node *node, > var->varattno, get_rel_name(appinfo->parent_reloid)); > if (IsA(newnode, Var)) > { > - ((Var *) newnode)->varreturningtype =3D var->varreturningtype= ; > - ((Var *) newnode)->varnullingrels =3D var->varnullingrels; > + Var *newvar =3D (Var *) newnode; > + > + newvar->varreturningtype =3D var->varreturningtype; > + newvar->varnullingrels =3D bms_add_members(newvar->varnulling= rels, > + var->varnullingrels)= ; > } Here is a more readable version of the patch. - Richard --0000000000003e50d9064b161f28 Content-Type: application/octet-stream; name="v1-0001-Fix-computation-of-varnullingrels-when-translatin.patch" Content-Disposition: attachment; filename="v1-0001-Fix-computation-of-varnullingrels-when-translatin.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlruq1nh0 RnJvbSA1ZjQ3MzU2NmIxMzRjYTBmZjQ2MTY1ZDJjN2NkZDllMDI1OWJhNTZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogV2VkLCAxOCBGZWIgMjAyNiAxNzoyNTowNiArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjFd IEZpeCBjb21wdXRhdGlvbiBvZiB2YXJudWxsaW5ncmVscyB3aGVuIHRyYW5zbGF0aW5nCiBhcHBl bmRyZWwgVmFyCgpXaGVuIGFkanVzdF9hcHBlbmRyZWxfYXR0cnMgdHJhbnNsYXRlcyBhIFZhciBy ZWZlcmVuY2luZyBhIHBhcmVudApyZWxhdGlvbiBpbnRvIGEgVmFyIHJlZmVyZW5jaW5nIGEgY2hp bGQgcmVsYXRpb24sIGl0IHByb3BhZ2F0ZXMKdmFybnVsbGluZ3JlbHMgZnJvbSB0aGUgcGFyZW50 IFZhciB0byB0aGUgdHJhbnNsYXRlZCBWYXIuICBQcmV2aW91c2x5LAp0aGUgY29kZSBzaW1wbHkg b3Zlcndyb3RlIHRoZSB0cmFuc2xhdGVkIFZhcidzIHZhcm51bGxpbmdyZWxzIHdpdGgKdGhvc2Ug b2YgdGhlIHBhcmVudC4KClRoaXMgd2FzIGluY29ycmVjdCBiZWNhdXNlIHRoZSB0cmFuc2xhdGVk IFZhciBtaWdodCBhbHJlYWR5IHBvc3Nlc3MKbm9uZW1wdHkgdmFybnVsbGluZ3JlbHMuICBUaGlz IGhhcHBlbnMsIGZvciBleGFtcGxlLCB3aGVuIGEgTEFURVJBTApzdWJxdWVyeSB3aXRoaW4gYSBV TklPTiBBTEwgcmVmZXJlbmNlcyBhIFZhciBmcm9tIHRoZSBudWxsYWJsZSBzaWRlIG9mCmFuIG91 dGVyIGpvaW4uICBJbiBzdWNoIGNhc2VzLCB0aGUgdHJhbnNsYXRlZCBWYXIgY29ycmVjdGx5IGNh cnJpZXMKdGhlIG91dGVyIGpvaW4ncyByZWxpZCBpbiBpdHMgdmFybnVsbGluZ3JlbHMuICBPdmVy d3JpdGluZyB0aGVzZSBiaXRzCndpdGggdGhlIHBhcmVudCBWYXIncyBzZXQgY2F1c2VkIHRoZSBw bGFubmVyIHRvIGxvc2UgdHJhY2sgb2YgdGhlIGZhY3QKdGhhdCB0aGUgVmFyIGNvdWxkIGJlIG51 bGxlZCBieSB0aGF0IG91dGVyIGpvaW4uCgpJbiB0aGUgcmVwb3J0ZWQgY2FzZSwgYmVjYXVzZSB0 aGUgdW5kZXJseWluZyBjb2x1bW4gaGFkIGEgTk9UIE5VTEwKY29uc3RyYWludCwgdGhlIHBsYW5u ZXIgaW5jb3JyZWN0bHkgZGVkdWNlZCB0aGF0IHRoZSBWYXIgY291bGQgbmV2ZXIKYmUgTlVMTCBh bmQgZGlzY2FyZGVkIGVzc2VudGlhbCBJUyBOT1QgTlVMTCBmaWx0ZXJzLiAgVGhpcyBsZWQgdG8K aW5jb3JyZWN0IHF1ZXJ5IHJlc3VsdHMgd2hlcmUgTlVMTCByb3dzIHdlcmUgcmV0dXJuZWQgaW5z dGVhZCBvZiBiZWluZwpmaWx0ZXJlZCBvdXQuCgpUbyBmaXgsIHVzZSBibXNfYWRkX21lbWJlcnMg dG8gbWVyZ2UgdGhlIHBhcmVudCBWYXIncyB2YXJudWxsaW5ncmVscwppbnRvIHRoZSB0cmFuc2xh dGVkIFZhcidzIGV4aXN0aW5nIHNldCwgcHJlc2VydmluZyBib3RoIHNvdXJjZXMgb2YKbnVsbGFi aWxpdHkuCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvYXBwZW5kaW5mby5jIHwgMTMg KysrKysrLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dCAgICAgIHwgNTEgKysr KysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbi5zcWwgICAg ICAgICAgIHwgMjQgKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDg2IGluc2VydGlvbnMo KyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvYXBwZW5kaW5mby5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvYXBwZW5kaW5mby5j CmluZGV4IDY4OTg0MGQ2NTY0Li4yZTdiMWIyMDJhMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvYXBwZW5kaW5mby5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL2FwcGVuZGluZm8uYwpAQCAtMjkxLDggKzI5MSwxNyBAQCBhZGp1c3RfYXBwZW5kcmVsX2F0 dHJzX211dGF0b3IoTm9kZSAqbm9kZSwKIAkJCQkJCSB2YXItPnZhcmF0dG5vLCBnZXRfcmVsX25h bWUoYXBwaW5mby0+cGFyZW50X3JlbG9pZCkpOwogCQkJCWlmIChJc0EobmV3bm9kZSwgVmFyKSkK IAkJCQl7Ci0JCQkJCSgoVmFyICopIG5ld25vZGUpLT52YXJyZXR1cm5pbmd0eXBlID0gdmFyLT52 YXJyZXR1cm5pbmd0eXBlOwotCQkJCQkoKFZhciAqKSBuZXdub2RlKS0+dmFybnVsbGluZ3JlbHMg PSB2YXItPnZhcm51bGxpbmdyZWxzOworCQkJCQlWYXIJCSAgICpuZXd2YXIgPSAoVmFyICopIG5l d25vZGU7CisKKwkJCQkJbmV3dmFyLT52YXJyZXR1cm5pbmd0eXBlID0gdmFyLT52YXJyZXR1cm5p bmd0eXBlOworCisJCQkJCS8qCisJCQkJCSAqIFByb3BhZ2F0ZSB2YXItPnZhcm51bGxpbmdyZWxz IGludG8gdGhlIHRyYW5zbGF0ZWQgVmFyLAorCQkJCQkgKiBtZXJnaW5nIHRoZW0gd2l0aCBhbnkg bnVsbGluZ3JlbHMgYWxyZWFkeSBwcmVzZW50IGluCisJCQkJCSAqIHRoZSB0cmFuc2xhdGVkIFZh ciByYXRoZXIgdGhhbiBvdmVyd3JpdGluZyB0aGVtLgorCQkJCQkgKi8KKwkJCQkJbmV3dmFyLT52 YXJudWxsaW5ncmVscyA9IGJtc19hZGRfbWVtYmVycyhuZXd2YXItPnZhcm51bGxpbmdyZWxzLAor CQkJCQkJCQkJCQkJCQkJIHZhci0+dmFybnVsbGluZ3JlbHMpOwogCQkJCX0KIAkJCQllbHNlCiAJ CQkJewpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dCBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKaW5kZXggNjNkM2M1ZDNhYzguLjA3MmE3 MzQ3YjgxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0Cisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKQEAgLTQ0ODYsNiArNDQ4Niw1 NyBAQCB3aGVyZSBzcy54IGlzIG51bGw7CiAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6ICdi YXInOjp0ZXh0CiAoMTIgcm93cykKIAorLS0gVGVzdCBjb21wdXRhdGlvbiBvZiB2YXJudWxsaW5n cmVscyB3aGVuIHRyYW5zbGF0aW5nIGFwcGVuZHJlbCBWYXIKK2JlZ2luOworY3JlYXRlIHRlbXAg dGFibGUgdF9hcHBlbmQgKGEgaW50IG5vdCBudWxsLCBiIGludCk7CitpbnNlcnQgaW50byB0X2Fw cGVuZCB2YWx1ZXMgKDEsIDEpOworaW5zZXJ0IGludG8gdF9hcHBlbmQgdmFsdWVzICgyLCAzKTsK K2V4cGxhaW4gKHZlcmJvc2UsIGNvc3RzIG9mZikKK3NlbGVjdCB0MS5hLCBzLmEgZnJvbSB0X2Fw cGVuZCB0MQorICBsZWZ0IGpvaW4gdF9hcHBlbmQgdDIgb24gdDEuYSA9IHQyLmIKKyAgam9pbiBs YXRlcmFsICgKKyAgICBzZWxlY3QgdDEuYSBhcyBhIHVuaW9uIGFsbCBzZWxlY3QgdDIuYSBhcyBh CisgICkgcyBvbiB0cnVlCit3aGVyZSBzLmEgaXMgbm90IG51bGw7CisgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBPdXRwdXQ6 IHQxLmEsICh0MS5hKQorICAgLT4gIE1lcmdlIExlZnQgSm9pbgorICAgICAgICAgT3V0cHV0OiB0 MS5hLCB0Mi5hCisgICAgICAgICBNZXJnZSBDb25kOiAodDEuYSA9IHQyLmIpCisgICAgICAgICAt PiAgU29ydAorICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hCisgICAgICAgICAgICAgICBTb3J0 IEtleTogdDEuYQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBnX3RlbXAudF9hcHBl bmQgdDEKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEuYQorICAgICAgICAgLT4gIFNv cnQKKyAgICAgICAgICAgICAgIE91dHB1dDogdDIuYSwgdDIuYgorICAgICAgICAgICAgICAgU29y dCBLZXk6IHQyLmIKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwZ190ZW1wLnRfYXBw ZW5kIHQyCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmEsIHQyLmIKKyAgIC0+ICBB cHBlbmQKKyAgICAgICAgIC0+ICBSZXN1bHQKKyAgICAgICAgICAgICAgIE91dHB1dDogdDEuYQor ICAgICAgICAgLT4gIFJlc3VsdAorICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5hCisgICAgICAg ICAgICAgICBPbmUtVGltZSBGaWx0ZXI6ICh0Mi5hIElTIE5PVCBOVUxMKQorKDIxIHJvd3MpCisK K3NlbGVjdCB0MS5hLCBzLmEgZnJvbSB0X2FwcGVuZCB0MQorICBsZWZ0IGpvaW4gdF9hcHBlbmQg dDIgb24gdDEuYSA9IHQyLmIKKyAgam9pbiBsYXRlcmFsICgKKyAgICBzZWxlY3QgdDEuYSBhcyBh IHVuaW9uIGFsbCBzZWxlY3QgdDIuYSBhcyBhCisgICkgcyBvbiB0cnVlCit3aGVyZSBzLmEgaXMg bm90IG51bGw7CisgYSB8IGEgCistLS0rLS0tCisgMSB8IDEKKyAxIHwgMQorIDIgfCAyCisoMyBy b3dzKQorCityb2xsYmFjazsKIC0tCiAtLSB0ZXN0IGlubGluaW5nIG9mIGltbXV0YWJsZSBmdW5j dGlvbnMKIC0tCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbCBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsCmluZGV4IDE0Y2JlYzI4NzY2Li40YWNkMjUxMjAw NCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbi5zcWwKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvam9pbi5zcWwKQEAgLTE1MDgsNiArMTUwOCwzMCBAQCBzZWxlY3QgKiBm cm9tIGludDRfdGJsIGxlZnQgam9pbiAoCiApIHNzKHgpIG9uIHRydWUKIHdoZXJlIHNzLnggaXMg bnVsbDsKIAorLS0gVGVzdCBjb21wdXRhdGlvbiBvZiB2YXJudWxsaW5ncmVscyB3aGVuIHRyYW5z bGF0aW5nIGFwcGVuZHJlbCBWYXIKK2JlZ2luOworCitjcmVhdGUgdGVtcCB0YWJsZSB0X2FwcGVu ZCAoYSBpbnQgbm90IG51bGwsIGIgaW50KTsKK2luc2VydCBpbnRvIHRfYXBwZW5kIHZhbHVlcyAo MSwgMSk7CitpbnNlcnQgaW50byB0X2FwcGVuZCB2YWx1ZXMgKDIsIDMpOworCitleHBsYWluICh2 ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxlY3QgdDEuYSwgcy5hIGZyb20gdF9hcHBlbmQgdDEKKyAg bGVmdCBqb2luIHRfYXBwZW5kIHQyIG9uIHQxLmEgPSB0Mi5iCisgIGpvaW4gbGF0ZXJhbCAoCisg ICAgc2VsZWN0IHQxLmEgYXMgYSB1bmlvbiBhbGwgc2VsZWN0IHQyLmEgYXMgYQorICApIHMgb24g dHJ1ZQord2hlcmUgcy5hIGlzIG5vdCBudWxsOworCitzZWxlY3QgdDEuYSwgcy5hIGZyb20gdF9h cHBlbmQgdDEKKyAgbGVmdCBqb2luIHRfYXBwZW5kIHQyIG9uIHQxLmEgPSB0Mi5iCisgIGpvaW4g bGF0ZXJhbCAoCisgICAgc2VsZWN0IHQxLmEgYXMgYSB1bmlvbiBhbGwgc2VsZWN0IHQyLmEgYXMg YQorICApIHMgb24gdHJ1ZQord2hlcmUgcy5hIGlzIG5vdCBudWxsOworCityb2xsYmFjazsKKwog LS0KIC0tIHRlc3QgaW5saW5pbmcgb2YgaW1tdXRhYmxlIGZ1bmN0aW9ucwogLS0KLS0gCjIuMzku NSAoQXBwbGUgR2l0LTE1NCkKCg== --0000000000003e50d9064b161f28--