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 1wa59c-001WBK-2s for pgsql-hackers@arkaria.postgresql.org; Thu, 18 Jun 2026 05:19:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wa59b-009Z37-2k for pgsql-hackers@arkaria.postgresql.org; Thu, 18 Jun 2026 05:19:03 +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 1wa59b-009Z2z-1S for pgsql-hackers@lists.postgresql.org; Thu, 18 Jun 2026 05:19:03 +0000 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wa59Y-000000012PH-3kwY for pgsql-hackers@lists.postgresql.org; Thu, 18 Jun 2026 05:19:02 +0000 Received: by mail-wr1-x42e.google.com with SMTP id ffacd0b85a97d-45ef29c5561so283214f8f.0 for ; Wed, 17 Jun 2026 22:19:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1781759940; cv=none; d=google.com; s=arc-20240605; b=RxhD8m0G85QYs8vOV6AV1oJCzf7AvwTKY92iikq8xJUvZOExLOzDEYKmW0ZLcjA2IY rXNbmJvBpxSMcNLIXSrlwe6eeWbR5Zbg5w29YyFbX77fUtEuW9lzTNPX3VvljWcDkHhF REAaoX9sfc2j+4I8l/8vxnt8DW+eWJmSvXfz/uYvpJelOYKYKTo7+o6o6TsYlZYP2t/a gy0sMO0CZ+8gc+j9kWz7sd6mIA8V2s27fcdUaUyfEmrYzb7BHhwYYfp8ABwrqefaq5Zb cNRN+g1Z/Di27sLtvXv4p/xxbqnBpnyzP3lJzEjEjhNmd15wQ8YFujWrycOgwAzTJeK2 z5aA== 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=MIvnjAyVX2RkWIb8HTuxcg0Hu1tNoC2gVnoQmuQhTUk=; fh=fFL0075BCelEFSjRIcf9BxNpVoRAnkQ/JJTf+QHwZUw=; b=jKDlIdkkOTCeRRLFaxA0SCRmVjuBVsNtqFQUPzJZqkH8rEXWAb3mKhHIQ/n7B6rpS1 tKR4XyWQJakhDkvfyVr51onK/2PvhFmJMWDFQEJqXTpQ9x1zSCXeysTJVInwcv8soZuH wUAPCxq2H/klZ3C+zBAZGxZKDzKa8aPQHHX4+RqEcKBrHzXM4VL9Qlv6WdTQzL6+LPmo 4d7Jz9yoTSIyFauyJVUXsb5UN4Fg2nYISTdrrzpVVWiK4hr+SrasTYE7hvQh2sFHnnET URKy+5h2fngSoQwbp9VrSEv5ftAo+e2nrIARXan2RF1tN3vZPKqurubCnt87Rph4jLKI 3WbA==; 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=20251104; t=1781759940; x=1782364740; 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=MIvnjAyVX2RkWIb8HTuxcg0Hu1tNoC2gVnoQmuQhTUk=; b=oVCDOOGBD0QvOqtnUXZr8twfM82en3+JSb24+NllBnYQv1ZlRWYqiU9s5mC4XcN771 HPMySowWdRwY+0OSPnxFR609Ft97rRMTe0bPlgF63KSbbDXyepUl4ZEbPZ1dCSNu2ig5 PjUefrcVbt1NiCDA5VeOGEUAIgBxt/sgjMx9te2n8uBq1QdnycwbCKBQ9sEaha3js/gg gM9jE92xu4VnFFq7R7ajzg2JNtt3IeqIjPS+BQQX6nllmEX/Rqs3cZV5BYI68G+ga2px 0HcdLRccjTtJh2gQZKqFQVW5PvbEubo5ip1qML64qA0J/xJLXpZ3pNIP+sHjlwCf4o01 UJwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781759940; x=1782364740; 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=MIvnjAyVX2RkWIb8HTuxcg0Hu1tNoC2gVnoQmuQhTUk=; b=De/1iG0enUWsh08yFd9TAwxb5USKWMjx7gnmdaI23CjLaOIOlGWY+6wVG6cj0sOZgd VboXEHyIAf84ornYFuWNqjrE0GEV/2UEIOf5Mqc00m8M5IYFRlVjuNLojuSrchr9FxRu QBIYEu7DA1BosXogIcK6p3pRcY+4TZel2rYtSGanpM8TJkvqz2YfMzt7aftNls7nu8Xb cj0kNs+Oixy1fkVHRQ3ECYcYrLS4jEyOSEIvzBpxoQMFrS6gvalhw8Z09Fk1R0oG2hNb M3mQ5cUWAICWm40WbTNYsbDu1lgRowORdYS+Uvn7I7NsPts24UilTEQtKZAuJOo9/9If Kz1A== X-Forwarded-Encrypted: i=1; AFNElJ/qQvRDmE2Q6ByK+DJya3PNbwblA4xUKAe6uV3oiNz6+fMER1lK84ORe98eB+hFxUgUJwAQVe3iMa2ZkWsP@lists.postgresql.org X-Gm-Message-State: AOJu0YwqHabLN/G8oUOvTl679dbo8NAqrpyJ6vN+GuHlqJQqycRHMwGz FwNm2LzRZ0bjUywaSIQq4QGDqZaw7bxnfbXSunqH3M5XQ/EgN49cbR9s8900iYELSOyuBopAOcB lNLUCXRPxyUupDa0NubQ/Q1gWwCKlVE4= X-Gm-Gg: AfdE7cm2UCWLusw5i6zcl+ErPYATVRfxlbxKKHuLuCJBSurTvv8jLgq7dChlRRH9jO2 iVKEEIS8WOnOx0vXV4gZ1yX+tlrbOmASeAVV54UT7tHBI00j80qaftCoPMuhH+Bq25nSGrywtfg kme6QvyIRk75AOyFHVQXR7AeeglWqsOkfVZc3OnIBy3LNSJkiV47RgS5JW956iuv3vVFDyvGBGa 0zl3BvJkBPpICCJFm87AMrGCDTZo+YRnsEzGTjL6VJgJ0LHuS3bcIa7z6R8rPocbtQyTW1whLtE khlITnjAImbGargfKyJGrU93sc4mpfNM54CVj5Iq9z8itcxfwBNwvlHFeiDiL20jBDD66ZI= X-Received: by 2002:a05:6000:2f88:b0:45e:fa38:c899 with SMTP id ffacd0b85a97d-463ab328c7bmr2862283f8f.4.1781759939899; Wed, 17 Jun 2026 22:18:59 -0700 (PDT) MIME-Version: 1.0 References: <1151393.1781734980@sss.pgh.pa.us> <1174236.1781736349@sss.pgh.pa.us> <2A622929-A45C-4370-943A-BC76FF4CC433@gmail.com> In-Reply-To: <2A622929-A45C-4370-943A-BC76FF4CC433@gmail.com> From: David Rowley Date: Thu, 18 Jun 2026 17:18:47 +1200 X-Gm-Features: AVVi8CfNFstl3a3vGpAuLAc1A0pbS-xFDq479qnRIUxk31-uub9xCN8BV-fHmy8 Message-ID: Subject: Re: Fix tuple deformation with virtual generated NOT NULL columns To: Chao Li Cc: Tom Lane , Peter Eisentraut , Andres Freund , Postgres hackers Content-Type: multipart/mixed; boundary="0000000000004b11e50654805071" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004b11e50654805071 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, 18 Jun 2026 at 14:36, Chao Li wrote: > I tested the fix, and it seems to work. While tracing the code, I wondere= d about this part: > ``` > - if (att->attnullability =3D=3D ATTNULLABLE_VALID && > - !att->atthasmissing && > - !att->attisdropped) > + if (attr->attgenerated =3D=3D ATTRIBUTE_GENERATED_VIRTUAL= ) > + break; > + > + if (catt->attnullability =3D=3D ATTNULLABLE_VALID && > + !catt->atthasmissing && > + !catt->attisdropped) > guaranteed_column_number =3D attnum; > ``` > > When computing guaranteed_column_number, I think we can just skip the vir= tual generated column rather than break. Using the test from Tom=E2=80=99s = email: Yeah, I was confused at first as I'd done a similar optimisation in the non-JIT deform code, but there "guaranteed" means guaranteed to be present in the tuple data, whereas with the JIT code it means guaranteed in the tuple data or its NULL bitmap. I've attached v2 which includes a test that exercises deforming with tuples which have various natts counts. I propose to backpatch 1f7dfe8c8 to v18 before applying the attached to master and v18. David --0000000000004b11e50654805071 Content-Type: text/plain; charset="US-ASCII"; name="fix_jit_deform_for_virtual_generated_cols_v2.patch" Content-Disposition: attachment; filename="fix_jit_deform_for_virtual_generated_cols_v2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqj1seef0 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZGVmb3JtLmMgYi9zcmMv YmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2RlZm9ybS5jCmluZGV4IDEyNTIxZTNlNDZhLi4zZTRl Y2RhN2IwMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9kZWZvcm0u YworKysgYi9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2RlZm9ybS5jCkBAIC0xMDQsMjcg KzEwNCwzMiBAQCBzbG90X2NvbXBpbGVfZGVmb3JtKExMVk1KaXRDb250ZXh0ICpjb250ZXh0LCBU dXBsZURlc2MgZGVzYywKIAlmdW5jbmFtZSA9IGxsdm1fZXhwYW5kX2Z1bmNuYW1lKGNvbnRleHQs ICJkZWZvcm0iKTsKIAogCS8qCi0JICogQ2hlY2sgd2hpY2ggY29sdW1ucyBoYXZlIHRvIGV4aXN0 LCBzbyB3ZSBkb24ndCBoYXZlIHRvIGNoZWNrIHRoZSByb3cncwotCSAqIG5hdHRzIHVubmVjZXNz YXJpbHkuCisJICogQ2hlY2sgd2hpY2ggY29sdW1ucyBoYXZlIHRvIGV4aXN0IGluIGFsbCB0dXBs ZXMsIHNvIHdlIGRvbid0IGhhdmUgdG8KKwkgKiBjaGVjayB0aGUgcm93J3MgbmF0dHMgdW5uZWNl c3NhcmlseS4KIAkgKi8KIAlmb3IgKGF0dG51bSA9IDA7IGF0dG51bSA8IGRlc2MtPm5hdHRzOyBh dHRudW0rKykKIAl7Ci0JCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dCA9IFR1cGxlRGVzY0NvbXBhY3RB dHRyKGRlc2MsIGF0dG51bSk7CisJCUNvbXBhY3RBdHRyaWJ1dGUgKmNhdHQgPSBUdXBsZURlc2ND b21wYWN0QXR0cihkZXNjLCBhdHRudW0pOworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyID0gVHVw bGVEZXNjQXR0cihkZXNjLCBhdHRudW0pOwogCiAJCS8qCiAJCSAqIElmIHRoZSBjb2x1bW4gaXMg ZGVjbGFyZWQgTk9UIE5VTEwgdGhlbiBpdCBtdXN0IGJlIHByZXNlbnQgaW4gZXZlcnkKIAkJICog dHVwbGUsIHVubGVzcyB0aGVyZSdzIGEgIm1pc3NpbmciIGVudHJ5IHRoYXQgY291bGQgcHJvdmlk ZSBhCiAJCSAqIG5vbi1OVUxMIHZhbHVlIGZvciBpdC4gVGhhdCBpbiB0dXJuIGd1YXJhbnRlZXMg dGhhdCB0aGUgTlVMTCBiaXRtYXAKIAkJICogLSBpZiB0aGVyZSBhcmUgYW55IE5VTExhYmxlIGNv bHVtbnMgLSBpcyBhdCBsZWFzdCBsb25nIGVub3VnaCB0bwotCQkgKiBjb3ZlciBjb2x1bW5zIHVw IHRvIGF0dG51bS4KKwkJICogY292ZXIgY29sdW1ucyB1cCB0byBhdHRudW0uICBXZSB0cmVhdCB2 aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zCisJCSAqIHNpbWlsYXIgdG8gYXR0aGFzbWlzc2luZyBj b2x1bW5zLCBhcyB0aGVzZSBjb2x1bW5zIGNvdWxkIGVpdGhlciBub3QKKwkJICogYmUgcmVwcmVz ZW50ZWQgaW4gdGhlIHR1cGxlIG9yIGNvdWxkIGhhdmUgdGhlIGNvbHVtbiByZXByZXNlbnRlZCBh cworCQkgKiBhIE5VTEwgaW4gdGhlIG51bGwgYml0bWFwLgogCQkgKgogCQkgKiBCZSBwYXJhbm9p ZCBhbmQgYWxzbyBjaGVjayAhYXR0aXNkcm9wcGVkLCBldmVuIHRob3VnaCB0aGUKIAkJICogY29t YmluYXRpb24gb2YgYXR0aXNkcm9wcGVkICYmIGF0dG5vdG51bGwgY29tYmluYXRpb24gc2hvdWxk bid0CiAJCSAqIGV4aXN0LgogCQkgKi8KLQkJaWYgKGF0dC0+YXR0bnVsbGFiaWxpdHkgPT0gQVRU TlVMTEFCTEVfVkFMSUQgJiYKLQkJCSFhdHQtPmF0dGhhc21pc3NpbmcgJiYKLQkJCSFhdHQtPmF0 dGlzZHJvcHBlZCkKKwkJaWYgKGNhdHQtPmF0dG51bGxhYmlsaXR5ID09IEFUVE5VTExBQkxFX1ZB TElEICYmCisJCQkhY2F0dC0+YXR0aGFzbWlzc2luZyAmJgorCQkJIWNhdHQtPmF0dGlzZHJvcHBl ZCAmJgorCQkJYXR0ci0+YXR0Z2VuZXJhdGVkICE9IEFUVFJJQlVURV9HRU5FUkFURURfVklSVFVB TCkKIAkJCWd1YXJhbnRlZWRfY29sdW1uX251bWJlciA9IGF0dG51bTsKIAl9CiAKQEAgLTM5Miw2 ICszOTcsOCBAQCBzbG90X2NvbXBpbGVfZGVmb3JtKExMVk1KaXRDb250ZXh0ICpjb250ZXh0LCBU dXBsZURlc2MgZGVzYywKIAlmb3IgKGF0dG51bSA9IDA7IGF0dG51bSA8IG5hdHRzOyBhdHRudW0r KykKIAl7CiAJCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dCA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKGRl c2MsIGF0dG51bSk7CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dHIgPSBUdXBsZURlc2NBdHRyKGRl c2MsIGF0dG51bSk7CisKIAkJTExWTVZhbHVlUmVmIHZfaW5jYnk7CiAJCWludAkJCWFsaWdudG8g PSBhdHQtPmF0dGFsaWduYnk7CiAJCUxMVk1WYWx1ZVJlZiBsX2F0dG5vID0gbF9pbnQxNl9jb25z dChsYywgYXR0bnVtKTsKQEAgLTQzNSw4ICs0NDIsMTEgQEAgc2xvdF9jb21waWxlX2RlZm9ybShM TFZNSml0Q29udGV4dCAqY29udGV4dCwgVHVwbGVEZXNjIGRlc2MsCiAJCSAqIENoZWNrIGZvciBu dWxscyBpZiBuZWNlc3NhcnkuIE5vIG5lZWQgdG8gdGFrZSBtaXNzaW5nIGF0dHJpYnV0ZXMKIAkJ ICogaW50byBhY2NvdW50LCBiZWNhdXNlIGlmIHRoZXkncmUgcHJlc2VudCB0aGUgaGVhcHR1cGxl J3MgbmF0dHMKIAkJICogd291bGQgaGF2ZSBpbmRpY2F0ZWQgdGhhdCBhIHNsb3RfZ2V0bWlzc2lu Z2F0dHJzKCkgaXMgbmVlZGVkLgorCQkgKiBXaGVuIHByZXNlbnQgaW4gdGhlIHR1cGxlLCB2aXJ0 dWFsIGdlbmVyYXRlZCBjb2x1bW5zIGFyZSBhbHdheXMKKwkJICogc3RvcmVkIGFzIE5VTEwsIHNv IHdlIG11c3QgYWx3YXlzIHBlcmZvcm0gTlVMTCBjaGVja3MgZm9yIHRoZXNlLgogCQkgKi8KLQkJ aWYgKGF0dC0+YXR0bnVsbGFiaWxpdHkgIT0gQVRUTlVMTEFCTEVfVkFMSUQpCisJCWlmIChhdHQt PmF0dG51bGxhYmlsaXR5ICE9IEFUVE5VTExBQkxFX1ZBTElEIHx8CisJCQlhdHRyLT5hdHRnZW5l cmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9WSVJUVUFMKQogCQl7CiAJCQlMTFZNQmFzaWNC bG9ja1JlZiBiX2lmbm90bnVsbDsKIAkJCUxMVk1CYXNpY0Jsb2NrUmVmIGJfaWZudWxsOwpAQCAt NjE0LDEyICs2MjQsMTQgQEAgc2xvdF9jb21waWxlX2RlZm9ybShMTFZNSml0Q29udGV4dCAqY29u dGV4dCwgVHVwbGVEZXNjIGRlc2MsCiAJCQlrbm93bl9hbGlnbm1lbnQgKz0gYXR0LT5hdHRsZW47 CiAJCX0KIAkJZWxzZSBpZiAoYXR0LT5hdHRudWxsYWJpbGl0eSA9PSBBVFROVUxMQUJMRV9WQUxJ RCAmJgorCQkJCSBhdHRyLT5hdHRnZW5lcmF0ZWQgIT0gQVRUUklCVVRFX0dFTkVSQVRFRF9WSVJU VUFMICYmCiAJCQkJIChhdHQtPmF0dGxlbiAlIGFsaWdudG8pID09IDApCiAJCXsKIAkJCS8qCi0J CQkgKiBBZnRlciBhIE5PVCBOVUxMIGZpeGVkLXdpZHRoIGNvbHVtbiB3aXRoIGEgbGVuZ3RoIHRo YXQgaXMgYQotCQkJICogbXVsdGlwbGUgb2YgaXRzIGFsaWdubWVudCByZXF1aXJlbWVudCwgd2Ug a25vdyB0aGUgZm9sbG93aW5nCi0JCQkgKiBjb2x1bW4gaXMgYWxpZ25lZCB0byBhdCBsZWFzdCB0 aGUgY3VycmVudCBjb2x1bW4ncyBhbGlnbm1lbnQuCisJCQkgKiBBZnRlciBhIE5PVCBOVUxMIChh bmQgbm90IHZpcnR1YWwgZ2VuZXJhdGVkKSBmaXhlZC13aWR0aCBjb2x1bW4KKwkJCSAqIHdpdGgg YSBsZW5ndGggdGhhdCBpcyBhIG11bHRpcGxlIG9mIGl0cyBhbGlnbm1lbnQgcmVxdWlyZW1lbnQs CisJCQkgKiB3ZSBrbm93IHRoZSBmb2xsb3dpbmcgY29sdW1uIGlzIGFsaWduZWQgdG8gYXQgbGVh c3QgdGhlIGN1cnJlbnQKKwkJCSAqIGNvbHVtbidzIGFsaWdubWVudC4KIAkJCSAqLwogCQkJQXNz ZXJ0KGF0dC0+YXR0bGVuID4gMCk7CiAJCQlrbm93bl9hbGlnbm1lbnQgPSBhbGlnbnRvOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9nZW5lcmF0ZWRfc3RvcmVkLm91dCBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2VuZXJhdGVkX3N0b3JlZC5vdXQKaW5kZXggZjg3 YTc1NmIyMzEuLmE3ZmU4MDMzZmEzIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2dlbmVyYXRlZF9zdG9yZWQub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv Z2VuZXJhdGVkX3N0b3JlZC5vdXQKQEAgLTcyNiw2ICs3MjYsMjAgQEAgSU5TRVJUIElOVE8gZ3Rl c3QyMWIgKGEpIFZBTFVFUyAoMCk7ICAtLSBvayBub3cKIC0tSU5TRVJUIElOVE8gZ3Rlc3QyMWMg KGEsIGMpIFZBTFVFUyAoMTAsIDQyKTsKIC0tU0VMRUNUIGEsIGIsIGMgRlJPTSBndGVzdDIxYzsK IC0tRFJPUCBUQUJMRSBndGVzdDIxYzsKKy0tIHRyeSBhZGRpbmcgYSB2aXJ0dWFsIGdlbmVyYXRl ZCBjb2x1bW4gdG8gYW4gZXhpc3RpbmcgdGFibGUgd2l0aCB0dXBsZXMsCistLSB0aGVuIHRyeSBh ZGRpbmcgYW4gYXR0aGFzbWlzc2luZyBjb2x1bW4gYmVmb3JlIGFkZGluZyBhIG5vcm1hbCBudWxs YWJsZQorLS0gY29sdW1uLgorLS1DUkVBVEUgVEFCTEUgZ3Rlc3QyMWQgKGEgaW50IE5PVCBOVUxM KTsKKy0tSU5TRVJUIElOVE8gZ3Rlc3QyMWQgKGEpIFZBTFVFUygxMCk7CistLUFMVEVSIFRBQkxF IGd0ZXN0MjFkIEFERCBDT0xVTU4gYiBJTlQgR0VORVJBVEVEIEFMV0FZUyBBUyAoYSAqIDEwKSBW SVJUVUFMIE5PVCBOVUxMOworLS1TRUxFQ1QgKiBGUk9NIGd0ZXN0MjFjIE9SREVSIEJZIGE7Cist LUlOU0VSVCBJTlRPIGd0ZXN0MjFkIChhKSBWQUxVRVMoMjApOworLS1BTFRFUiBUQUJMRSBndGVz dDIxZCBBREQgQ09MVU1OIGMgSU5UIE5PVCBOVUxMIERFRkFVTFQgMTIzNDsKKy0tU0VMRUNUICog RlJPTSBndGVzdDIxYyBPUkRFUiBCWSBhOworLS1BTFRFUiBUQUJMRSBndGVzdDIxZCBBREQgQ09M VU1OIGQgSU5UOworLS1JTlNFUlQgSU5UTyBndGVzdDIxZCAoYSwgYywgZCkgVkFMVUVTKDMwLCAx MjM0NSwgMTAwKTsKKy0tU0VMRUNUICogRlJPTSBndGVzdDIxYyBPUkRFUiBCWSBhOworLS1EUk9Q IFRBQkxFIGd0ZXN0MjFkOwogLS0gbm90LW51bGwgY29uc3RyYWludCB3aXRoIHBhcnRpdGlvbmVk IHRhYmxlCiBDUkVBVEUgVEFCTEUgZ3Rlc3Rubl9wYXJlbnQgKAogICAgIGYxIGludCwKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwub3V0IGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9nZW5lcmF0ZWRfdmlydHVhbC5vdXQKaW5kZXggYjhk NWRlZjQ0ZGIuLjAxZWUyOWZlZTEwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2dlbmVyYXRlZF92aXJ0dWFsLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2dlbmVyYXRlZF92aXJ0dWFsLm91dApAQCAtNzM3LDYgKzczNywzOCBAQCBTRUxFQ1QgYSwgYiwg YyBGUk9NIGd0ZXN0MjFjOwogKDEgcm93KQogCiBEUk9QIFRBQkxFIGd0ZXN0MjFjOworLS0gdHJ5 IGFkZGluZyBhIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbiB0byBhbiBleGlzdGluZyB0YWJsZSB3 aXRoIHR1cGxlcywKKy0tIHRoZW4gdHJ5IGFkZGluZyBhbiBhdHRoYXNtaXNzaW5nIGNvbHVtbiBi ZWZvcmUgYWRkaW5nIGEgbm9ybWFsIG51bGxhYmxlCistLSBjb2x1bW4uCitDUkVBVEUgVEFCTEUg Z3Rlc3QyMWQgKGEgaW50IE5PVCBOVUxMKTsKK0lOU0VSVCBJTlRPIGd0ZXN0MjFkIChhKSBWQUxV RVMoMTApOworQUxURVIgVEFCTEUgZ3Rlc3QyMWQgQUREIENPTFVNTiBiIElOVCBHRU5FUkFURUQg QUxXQVlTIEFTIChhICogMTApIFZJUlRVQUwgTk9UIE5VTEw7CitTRUxFQ1QgKiBGUk9NIGd0ZXN0 MjFkIE9SREVSIEJZIGE7CisgYSAgfCAgYiAgCistLS0tKy0tLS0tCisgMTAgfCAxMDAKKygxIHJv dykKKworSU5TRVJUIElOVE8gZ3Rlc3QyMWQgKGEpIFZBTFVFUygyMCk7CitBTFRFUiBUQUJMRSBn dGVzdDIxZCBBREQgQ09MVU1OIGMgSU5UIE5PVCBOVUxMIERFRkFVTFQgMTIzNDsKK1NFTEVDVCAq IEZST00gZ3Rlc3QyMWQgT1JERVIgQlkgYTsKKyBhICB8ICBiICB8ICBjICAgCistLS0tKy0tLS0t Ky0tLS0tLQorIDEwIHwgMTAwIHwgMTIzNAorIDIwIHwgMjAwIHwgMTIzNAorKDIgcm93cykKKwor QUxURVIgVEFCTEUgZ3Rlc3QyMWQgQUREIENPTFVNTiBkIElOVDsKK0lOU0VSVCBJTlRPIGd0ZXN0 MjFkIChhLCBjLCBkKSBWQUxVRVMoMzAsIDEyMzQ1LCAxMDApOworU0VMRUNUICogRlJPTSBndGVz dDIxZCBPUkRFUiBCWSBhOworIGEgIHwgIGIgIHwgICBjICAgfCAgZCAgCistLS0tKy0tLS0tKy0t LS0tLS0rLS0tLS0KKyAxMCB8IDEwMCB8ICAxMjM0IHwgICAgCisgMjAgfCAyMDAgfCAgMTIzNCB8 ICAgIAorIDMwIHwgMzAwIHwgMTIzNDUgfCAxMDAKKygzIHJvd3MpCisKK0RST1AgVEFCTEUgZ3Rl c3QyMWQ7CiAtLSBub3QtbnVsbCBjb25zdHJhaW50IHdpdGggcGFydGl0aW9uZWQgdGFibGUKIENS RUFURSBUQUJMRSBndGVzdG5uX3BhcmVudCAoCiAgICAgZjEgaW50LApkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkX3N0b3JlZC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9nZW5lcmF0ZWRfc3RvcmVkLnNxbAppbmRleCA3MWIwYmE2ZDhkNy4uNmE0ZmRkYmZkZjEg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dlbmVyYXRlZF9zdG9yZWQuc3FsCisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dlbmVyYXRlZF9zdG9yZWQuc3FsCkBAIC0zNzMsNiAr MzczLDIwIEBAIElOU0VSVCBJTlRPIGd0ZXN0MjFiIChhKSBWQUxVRVMgKDApOyAgLS0gb2sgbm93 CiAtLUlOU0VSVCBJTlRPIGd0ZXN0MjFjIChhLCBjKSBWQUxVRVMgKDEwLCA0Mik7CiAtLVNFTEVD VCBhLCBiLCBjIEZST00gZ3Rlc3QyMWM7CiAtLURST1AgVEFCTEUgZ3Rlc3QyMWM7CistLSB0cnkg YWRkaW5nIGEgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uIHRvIGFuIGV4aXN0aW5nIHRhYmxlIHdp dGggdHVwbGVzLAorLS0gdGhlbiB0cnkgYWRkaW5nIGFuIGF0dGhhc21pc3NpbmcgY29sdW1uIGJl Zm9yZSBhZGRpbmcgYSBub3JtYWwgbnVsbGFibGUKKy0tIGNvbHVtbi4KKy0tQ1JFQVRFIFRBQkxF IGd0ZXN0MjFkIChhIGludCBOT1QgTlVMTCk7CistLUlOU0VSVCBJTlRPIGd0ZXN0MjFkIChhKSBW QUxVRVMoMTApOworLS1BTFRFUiBUQUJMRSBndGVzdDIxZCBBREQgQ09MVU1OIGIgSU5UIEdFTkVS QVRFRCBBTFdBWVMgQVMgKGEgKiAxMCkgVklSVFVBTCBOT1QgTlVMTDsKKy0tU0VMRUNUICogRlJP TSBndGVzdDIxYyBPUkRFUiBCWSBhOworLS1JTlNFUlQgSU5UTyBndGVzdDIxZCAoYSkgVkFMVUVT KDIwKTsKKy0tQUxURVIgVEFCTEUgZ3Rlc3QyMWQgQUREIENPTFVNTiBjIElOVCBOT1QgTlVMTCBE RUZBVUxUIDEyMzQ7CistLVNFTEVDVCAqIEZST00gZ3Rlc3QyMWMgT1JERVIgQlkgYTsKKy0tQUxU RVIgVEFCTEUgZ3Rlc3QyMWQgQUREIENPTFVNTiBkIElOVDsKKy0tSU5TRVJUIElOVE8gZ3Rlc3Qy MWQgKGEsIGMsIGQpIFZBTFVFUygzMCwgMTIzNDUsIDEwMCk7CistLVNFTEVDVCAqIEZST00gZ3Rl c3QyMWMgT1JERVIgQlkgYTsKKy0tRFJPUCBUQUJMRSBndGVzdDIxZDsKIC0tIG5vdC1udWxsIGNv bnN0cmFpbnQgd2l0aCBwYXJ0aXRpb25lZCB0YWJsZQogQ1JFQVRFIFRBQkxFIGd0ZXN0bm5fcGFy ZW50ICgKICAgICBmMSBpbnQsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9nZW5l cmF0ZWRfdmlydHVhbC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9nZW5lcmF0ZWRfdmlydHVh bC5zcWwKaW5kZXggOWUzZGM5OWM3MWQuLjBjYjE0ZWIwZTM2IDEwMDY0NAotLS0gYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9nZW5lcmF0ZWRfdmlydHVhbC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwuc3FsCkBAIC0zODAsNiArMzgwLDIxIEBAIElOU0VSVCBJ TlRPIGd0ZXN0MjFjIChhLCBjKSBWQUxVRVMgKDEwLCA0Mik7CiBTRUxFQ1QgYSwgYiwgYyBGUk9N IGd0ZXN0MjFjOwogRFJPUCBUQUJMRSBndGVzdDIxYzsKIAorLS0gdHJ5IGFkZGluZyBhIHZpcnR1 YWwgZ2VuZXJhdGVkIGNvbHVtbiB0byBhbiBleGlzdGluZyB0YWJsZSB3aXRoIHR1cGxlcywKKy0t IHRoZW4gdHJ5IGFkZGluZyBhbiBhdHRoYXNtaXNzaW5nIGNvbHVtbiBiZWZvcmUgYWRkaW5nIGEg bm9ybWFsIG51bGxhYmxlCistLSBjb2x1bW4uCitDUkVBVEUgVEFCTEUgZ3Rlc3QyMWQgKGEgaW50 IE5PVCBOVUxMKTsKK0lOU0VSVCBJTlRPIGd0ZXN0MjFkIChhKSBWQUxVRVMoMTApOworQUxURVIg VEFCTEUgZ3Rlc3QyMWQgQUREIENPTFVNTiBiIElOVCBHRU5FUkFURUQgQUxXQVlTIEFTIChhICog MTApIFZJUlRVQUwgTk9UIE5VTEw7CitTRUxFQ1QgKiBGUk9NIGd0ZXN0MjFkIE9SREVSIEJZIGE7 CitJTlNFUlQgSU5UTyBndGVzdDIxZCAoYSkgVkFMVUVTKDIwKTsKK0FMVEVSIFRBQkxFIGd0ZXN0 MjFkIEFERCBDT0xVTU4gYyBJTlQgTk9UIE5VTEwgREVGQVVMVCAxMjM0OworU0VMRUNUICogRlJP TSBndGVzdDIxZCBPUkRFUiBCWSBhOworQUxURVIgVEFCTEUgZ3Rlc3QyMWQgQUREIENPTFVNTiBk IElOVDsKK0lOU0VSVCBJTlRPIGd0ZXN0MjFkIChhLCBjLCBkKSBWQUxVRVMoMzAsIDEyMzQ1LCAx MDApOworU0VMRUNUICogRlJPTSBndGVzdDIxZCBPUkRFUiBCWSBhOworRFJPUCBUQUJMRSBndGVz dDIxZDsKKwogLS0gbm90LW51bGwgY29uc3RyYWludCB3aXRoIHBhcnRpdGlvbmVkIHRhYmxlCiBD UkVBVEUgVEFCTEUgZ3Rlc3Rubl9wYXJlbnQgKAogICAgIGYxIGludCwK --0000000000004b11e50654805071--