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 1wUvlB-001Y5A-09 for pgsql-hackers@arkaria.postgresql.org; Thu, 04 Jun 2026 00:16:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wUvl9-003yNK-07 for pgsql-hackers@arkaria.postgresql.org; Thu, 04 Jun 2026 00:16:31 +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 1wUvl8-003yNA-1a for pgsql-hackers@lists.postgresql.org; Thu, 04 Jun 2026 00:16:30 +0000 Received: from mail-dl1-x122a.google.com ([2607:f8b0:4864:20::122a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wUvl6-00000000zNI-1aZp for pgsql-hackers@lists.postgresql.org; Thu, 04 Jun 2026 00:16:29 +0000 Received: by mail-dl1-x122a.google.com with SMTP id a92af1059eb24-137bd9ed2b1so253738c88.1 for ; Wed, 03 Jun 2026 17:16:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1780532187; cv=none; d=google.com; s=arc-20240605; b=H9yZXTQNEsSIAOH+Scu1IYB8zepZWPtNGLCBEju+UPtE9M/QqFo9bCYYziUjx73HF+ u3FGkiXFuVRNtu1BHqOpTzbXEWH5k833+ZuCjfabkAxjgd/4HIXOXJQUuAwS6i6n5CUq QuDzAOaiovQBC23W4pQk2zdq8pRjlHtRgh2Q6tYaak5OONoUljmtZvby7S5G5hckYawI Z/O1TTJSDhfvv+z+fvX/Xr0yYPeCrovR3g5SwpHyq4c876yQ3O9tygFln3aG3uev07Fl cL1HFLQEfNo6NB5EEFTt4/HVKLCGMzpaJqVU/ra/Xgs1u8pC8V2+kpmtC18d3yc9X3dF NvGg== 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:mime-version:dkim-signature; bh=yaWNIW4OEbgubauoLw5DSzwETmUDVwDfIpz+LMQk19I=; fh=vioMPbJmUNLeN8F5Cl5yYvEMPKvKcq3jMq9PI362Ilc=; b=KAls5hVMvuZjlQ4dGy6CPoP9i74bLbilBDjwCJOIHw8XnAU4k/Y4ozReU++0ml+Kzz caM6VG8rlo4KZMgK3EmVjfSBVWfYSxJcJN8rdRNYjennSBB4IS+c9UHx4Lj4ZeIDYo7X VpDvNVXMNFzT4Gqku/mWOLRI0ZDqVaf1qFzZI4Dly5ho/kr4Ll0kZPL8vy6NP/elb1yO 2Tx/bpPfWcRKgodpv29fUS+3Q7qH0bGpwk7QTgdX1gpvOR5W7VpMs9+fNbZB0iT4+yDl nT48/GA7Rj3gYEfLt3Wkd4GmawCGcBJ6AdrSwWJFtireyrBOoO+jNZG5Si6vvVGZwui8 N0xg==; 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=1780532187; x=1781136987; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=yaWNIW4OEbgubauoLw5DSzwETmUDVwDfIpz+LMQk19I=; b=UNZDGChIgNcPOso0lkAmpGuLrvsrcsE4Yf0KMt0CRKW+QN563KflAFzAQ+9SAFbof9 rtg6vi5EskiM9YsDAFs8rsg2Fl9UlNiikVRjh8gq4PbLimD07MPMDb6DSLVH1JSewcuR nqlg1qsZnRheQBiI+Tc1mDe+CsW49O0OUnB4DpMiVmSNMnopEr/giD2fTW3S3qYRPiwJ /BW/kIa9/kPWKSQQcp9VlWmJDjIljCPYOfkF81poD8XATTm31Q2CIjp3m4jqJYFq30KP 8MRfKunxSp0yHfQQkF43lW8yGCIRGYgZ8nAoGA9i8dwiDQ0V6jjAGdLSzC9opgle3Xx2 rrgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780532187; x=1781136987; h=cc: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=yaWNIW4OEbgubauoLw5DSzwETmUDVwDfIpz+LMQk19I=; b=K9SXx0/5eKK5213yzitdgWxhbT3b4k0MLoDypGcx1sELuRLfYT6V2iDLXtloV0KXwk /lrCcAQ516YjCepTtTE8vHtSQ+nlUgihv7lMdSVLxe+F2H2AZ1La2I9PRLe928oazbJN kWGrCR6w6ibpHAauxIYbmJvMEEZ3YbKylJNSa6/xf3fa2QDjyBcEME3Ft93UH8Zuiutk m6qtD1UuWur0lZoL7E1FZbMKfiZuP6gdgguxl1yRMkW2/UWP1nzOd/y7U+YwCk6tuiMh 25Bz0YChm2vuj3LEYVkdEywgQ+HMLfUQ1RdW/SCylQ9A7VSxgbQDfTSrPVwVxLmUmoTC 4wAw== X-Gm-Message-State: AOJu0Yx/+ci3JP6VAGjr8oRowAuiidYO0urG46fq0uvmGFF4YKXX4hMZ +ywLqXaGoK3htAfVrIO89hbpMb3Zn1pJOba+QEbfcaqlQ/XxFks5joYzx/N3EhUtuz0EKfM5LFG AhERRNbXIPbVEbXbPL4KwWqo2vGr71xVqtuI6FaY= X-Gm-Gg: Acq92OErG+ZTzsqyrz9clVbiqLtKYRdC6MiADjc7thnRv63/oQP0HFFR+LEbmlfk/hw Q91ZyvDo3HlOG1SiPnwe98/AXgwz6cwoW39YylBl1GvcQoYVPLapvrtQfiS6KVdxbc7aFP7pyZl CinqcD0CYPF1nbGAGJSenLEXTcyDhMfKMVcLy+uNo+gacIxHIUbqKAEjK4yokwD6Dg2mCNrY50g 5SqZ4+bRQT9kehgNVtf85cCIcpBNzIUPAPD8MXci6N6WwGF8rRuJkfJ4/1hWCzEhVxof2mTxwPa KXwTixAlL5mk8j8Ax3tNbjT7b1AxDz/+LQr6TC5MMPamr5Kma0eG X-Received: by 2002:a05:7301:6783:b0:2ed:e15:c923 with SMTP id 5a478bee46e88-3074fc40138mr2760319eec.31.1780532187131; Wed, 03 Jun 2026 17:16:27 -0700 (PDT) MIME-Version: 1.0 From: Baji Shaik Date: Wed, 3 Jun 2026 19:16:15 -0500 X-Gm-Features: AVHnY4Kj2nRDDQxEVWLJgCPC7qrf9M3lX1DXQvOqnqNxMCsev-LExKLci9EQKfI Message-ID: Subject: [PATCH] Add regression tests for btree skip scan support functions To: pgsql-hackers@lists.postgresql.org Cc: pg@bowt.ie, michael@paquier.xyz Content-Type: multipart/mixed; boundary="00000000000086f187065362745b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000086f187065362745b Content-Type: multipart/alternative; boundary="00000000000086f1870653627459" --00000000000086f1870653627459 Content-Type: text/plain; charset="UTF-8" Hi, While looking at coverage for nbtcompare.c on coverage.postgresql.org, I noticed several btree skip-scan support routines (the per-type skipsupport / increment / decrement helpers) are not exercised by the existing regression tests. Specifically: oid8: btoid8skipsupport, oid8_decrement, oid8_increment int8: btint8skipsupport, int8_decrement, int8_increment bool: btboolskipsupport, bool_decrement, bool_increment char: btcharskipsupport, char_decrement, char_increment oid: oid_decrement int2: int2_decrement These functions feed into the skip-scan optimization added in commit 92fe23d93aa for PG18, but the existing regression coverage only exercises a few types (mostly int4 and varchar) on the leading column of multi-column indexes. The attached patch adds a small section to btree_index.sql that creates a two-column index (a, b) for each missing type, then runs forward and backward Index Only Scans with a predicate on the non-leading column (b). This forces the planner into a skip scan, which in turn calls the per-type skip-support function plus the increment/decrement helpers as it generates skip-array elements. No code change in this patch. It's regression coverage only. Tested with make check (245/245 pass). Thanks, Baji Shaik --00000000000086f1870653627459 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

While looking at coverage for nbtcompare.c on <= a href=3D"http://coverage.postgresql.org">coverage.postgresql.org,
I= noticed several btree skip-scan support routines (the per-type
skipsupp= ort / increment / decrement helpers) are not exercised by the
existing r= egression tests.=C2=A0 Specifically:

=C2=A0 oid8: =C2=A0btoid8skipsu= pport, oid8_decrement, oid8_increment
=C2=A0 int8: =C2=A0btint8skipsuppo= rt, int8_decrement, int8_increment
=C2=A0 bool: =C2=A0btboolskipsupport,= bool_decrement, bool_increment
=C2=A0 char: =C2=A0btcharskipsupport, ch= ar_decrement, char_increment
=C2=A0 oid: =C2=A0 oid_decrement
=C2=A0 = int2: =C2=A0int2_decrement

These functions feed into the skip-scan o= ptimization added in
commit 92fe23d93aa for PG18, but the existing regre= ssion coverage
only exercises a few types (mostly int4 and varchar) on t= he leading
column of multi-column indexes.

The attached patch add= s a small section to btree_index.sql that
creates a two-column index (a,= b) for each missing type, then runs
forward and backward Index Only Sca= ns with a predicate on the
non-leading column (b).=C2=A0 This forces the= planner into a skip scan,
which in turn calls the per-type skip-support= function plus the
increment/decrement helpers as it generates skip-arra= y elements.

No code change in this patch. It's regression covera= ge only.

Tested with make check (245/245 pass).

Thanks,
Ba= ji Shaik
--00000000000086f1870653627459-- --00000000000086f187065362745b Content-Type: application/octet-stream; name="0001-Add-regression-tests-for-btree-skip-scan-support-fun.patch" Content-Disposition: attachment; filename="0001-Add-regression-tests-for-btree-skip-scan-support-fun.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpyqs36p0 RnJvbSBlOGMxZjhkMmE0YjhlN2M1ZDZlM2Y0YTViNmM3ZDhlOWYwYTFiMmMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCYWppIFNoYWlrIDxiYWppLnBnZGV2QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyNyBNYXkgMjAyNiAwNzoxMToyNyAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIEFkZCBy ZWdyZXNzaW9uIHRlc3RzIGZvciBidHJlZSBza2lwIHNjYW4gc3VwcG9ydCBmdW5jdGlvbnMKClNl dmVyYWwgYnRyZWUgc2tpcCBzY2FuIHN1cHBvcnQgZnVuY3Rpb25zIGluIG5idGNvbXBhcmUuYyBo YXZlIHplcm8KdGVzdCBjb3ZlcmFnZSBhcyBzaG93biBieSBjb3ZlcmFnZS5wb3N0Z3Jlc3FsLm9y ZzoKCiAgb2lkODogIGJ0b2lkOHNraXBzdXBwb3J0LCBvaWQ4X2RlY3JlbWVudCwgb2lkOF9pbmNy ZW1lbnQKICBpbnQ4OiAgYnRpbnQ4c2tpcHN1cHBvcnQsIGludDhfZGVjcmVtZW50LCBpbnQ4X2lu Y3JlbWVudAogIGJvb2w6ICBidGJvb2xza2lwc3VwcG9ydCwgYm9vbF9kZWNyZW1lbnQsIGJvb2xf aW5jcmVtZW50CiAgY2hhcjogIGJ0Y2hhcnNraXBzdXBwb3J0LCBjaGFyX2RlY3JlbWVudCwgY2hh cl9pbmNyZW1lbnQKICBvaWQ6ICAgb2lkX2RlY3JlbWVudAogIGludDI6ICBpbnQyX2RlY3JlbWVu dAoKQWRkIHRlc3RzIHRoYXQgZXhlcmNpc2Ugc2tpcCBzY2FucyAoYm90aCBmb3J3YXJkIGFuZCBi YWNrd2FyZCkgb24KbXVsdGktY29sdW1uIGluZGV4ZXMgd2l0aCB0aGVzZSB0eXBlcyBhcyB0aGUg bGVhZGluZyBjb2x1bW4uICBUaGlzCnRyaWdnZXJzIHRoZSBwZXItdHlwZSBza2lwLXN1cHBvcnQg ZnVuY3Rpb24gYW5kIHRoZSBpbmNyZW1lbnQvCmRlY3JlbWVudCBoZWxwZXJzIHZpYSB0aGUgSW5k ZXggT25seSBTY2FuIHBhdGguCgpBdXRob3I6IEJhamkgU2hhaWsgPGJhamkucGdkZXZAZ21haWwu Y29tPgpSZXZpZXdlZC1ieToKRGlzY3Vzc2lvbjogCi0tLQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9idHJlZV9pbmRleC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2J0cmVlX2luZGV4Lm91dAppbmRleCAyMWRjOWI1NzgzYS4uMTExZjVkNGI2ODIgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYnRyZWVfaW5kZXgub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYnRyZWVfaW5kZXgub3V0CkBAIC03MzYsMyArNzM2LDIz NSBAQCBBTFRFUiBJTkRFWCBidHJlZV9wYXJ0X2lkeCBBTFRFUiBDT0xVTU4gaWQgU0VUIChuX2Rp c3RpbmN0PTEwMCk7CiBFUlJPUjogIEFMVEVSIGFjdGlvbiBBTFRFUiBDT0xVTU4gLi4uIFNFVCBj YW5ub3QgYmUgcGVyZm9ybWVkIG9uIHJlbGF0aW9uICJidHJlZV9wYXJ0X2lkeCIKIERFVEFJTDog IFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHBhcnRpdGlvbmVkIGluZGV4ZXMu CiBEUk9QIFRBQkxFIGJ0cmVlX3BhcnQ7CistLQorLS0gVGVzdCBidHJlZSBza2lwIHNjYW4gc3Vw cG9ydCBmb3IgdHlwZXMgdGhhdCBjdXJyZW50bHkgbGFjayB0ZXN0IGNvdmVyYWdlCistLSAoZXhl cmNpc2VzIGJ0WFhYc2tpcHN1cHBvcnQsIFhYWF9kZWNyZW1lbnQsIFhYWF9pbmNyZW1lbnQgZnVu Y3Rpb25zKQorLS0KK1NFVCBlbmFibGVfc2Vxc2NhbiA9IG9mZjsKK1NFVCBlbmFibGVfYml0bWFw c2NhbiA9IG9mZjsKKy0tIGludDg6IGJ0aW50OHNraXBzdXBwb3J0LCBpbnQ4X2RlY3JlbWVudCwg aW50OF9pbmNyZW1lbnQKK0NSRUFURSBUQUJMRSBza2lwX2ludDggKGEgaW50OCwgYiBpbnQ0KTsK K0lOU0VSVCBJTlRPIHNraXBfaW50OCBTRUxFQ1QgaSAvIDEwLCBpICUgMTAgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwgMTAwKSBpOworQ1JFQVRFIElOREVYIE9OIHNraXBfaW50OCAoYSwgYik7CitF WFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfaW50OCBXSEVSRSBiID0g NSBPUkRFUiBCWSBhOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2tpcF9pbnQ4X2FfYl9pZHggb24g c2tpcF9pbnQ4CisgICBJbmRleCBDb25kOiAoYiA9IDUpCisoMiByb3dzKQorCitTRUxFQ1QgYSwg YiBGUk9NIHNraXBfaW50OCBXSEVSRSBiID0gNSBPUkRFUiBCWSBhOworIGEgfCBiIAorLS0tKy0t LQorIDAgfCA1CisgMSB8IDUKKyAyIHwgNQorIDMgfCA1CisgNCB8IDUKKyA1IHwgNQorIDYgfCA1 CisgNyB8IDUKKyA4IHwgNQorIDkgfCA1CisoMTAgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZG KQorU0VMRUNUIGEsIGIgRlJPTSBza2lwX2ludDggV0hFUkUgYiA9IDUgT1JERVIgQlkgYSBERVND OworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gQmFja3dhcmQgdXNpbmcgc2tpcF9p bnQ4X2FfYl9pZHggb24gc2tpcF9pbnQ4CisgICBJbmRleCBDb25kOiAoYiA9IDUpCisoMiByb3dz KQorCitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfaW50OCBXSEVSRSBiID0gNSBPUkRFUiBCWSBhIERF U0M7CisgYSB8IGIgCistLS0rLS0tCisgOSB8IDUKKyA4IHwgNQorIDcgfCA1CisgNiB8IDUKKyA1 IHwgNQorIDQgfCA1CisgMyB8IDUKKyAyIHwgNQorIDEgfCA1CisgMCB8IDUKKygxMCByb3dzKQor CitEUk9QIFRBQkxFIHNraXBfaW50ODsKKy0tIG9pZDg6IGJ0b2lkOHNraXBzdXBwb3J0LCBvaWQ4 X2RlY3JlbWVudCwgb2lkOF9pbmNyZW1lbnQKK0NSRUFURSBUQUJMRSBza2lwX29pZDggKGEgb2lk OCwgYiBpbnQ0KTsKK0lOU0VSVCBJTlRPIHNraXBfb2lkOCBTRUxFQ1QgKGkgLyAxMCk6OmludDg6 Om9pZDgsIGkgJSAxMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDApIGk7CitDUkVBVEUgSU5E RVggT04gc2tpcF9vaWQ4IChhLCBiKTsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBhLCBi IEZST00gc2tpcF9vaWQ4IFdIRVJFIGIgPSA1IE9SREVSIEJZIGE7CisgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1 c2luZyBza2lwX29pZDhfYV9iX2lkeCBvbiBza2lwX29pZDgKKyAgIEluZGV4IENvbmQ6IChiID0g NSkKKygyIHJvd3MpCisKK1NFTEVDVCBhLCBiIEZST00gc2tpcF9vaWQ4IFdIRVJFIGIgPSA1IE9S REVSIEJZIGE7CisgYSB8IGIgCistLS0rLS0tCisgMCB8IDUKKyAxIHwgNQorIDIgfCA1CisgMyB8 IDUKKyA0IHwgNQorIDUgfCA1CisgNiB8IDUKKyA3IHwgNQorIDggfCA1CisgOSB8IDUKKygxMCBy b3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfb2lkOCBX SEVSRSBiID0gNSBPUkRFUiBCWSBhIERFU0M7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkg U2NhbiBCYWNrd2FyZCB1c2luZyBza2lwX29pZDhfYV9iX2lkeCBvbiBza2lwX29pZDgKKyAgIElu ZGV4IENvbmQ6IChiID0gNSkKKygyIHJvd3MpCisKK1NFTEVDVCBhLCBiIEZST00gc2tpcF9vaWQ4 IFdIRVJFIGIgPSA1IE9SREVSIEJZIGEgREVTQzsKKyBhIHwgYiAKKy0tLSstLS0KKyA5IHwgNQor IDggfCA1CisgNyB8IDUKKyA2IHwgNQorIDUgfCA1CisgNCB8IDUKKyAzIHwgNQorIDIgfCA1Cisg MSB8IDUKKyAwIHwgNQorKDEwIHJvd3MpCisKK0RST1AgVEFCTEUgc2tpcF9vaWQ4OworLS0gYm9v bDogYnRib29sc2tpcHN1cHBvcnQsIGJvb2xfZGVjcmVtZW50LCBib29sX2luY3JlbWVudAorQ1JF QVRFIFRBQkxFIHNraXBfYm9vbCAoYSBib29sLCBiIGludDQpOworSU5TRVJUIElOVE8gc2tpcF9i b29sIFNFTEVDVCAoaSAlIDIgPSAwKSwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDApIGk7 CitDUkVBVEUgSU5ERVggT04gc2tpcF9ib29sIChhLCBiKTsKK0VYUExBSU4gKENPU1RTIE9GRikK K1NFTEVDVCBhLCBiIEZST00gc2tpcF9ib29sIFdIRVJFIGIgPSA1MCBPUkRFUiBCWSBhOworICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRl eCBPbmx5IFNjYW4gdXNpbmcgc2tpcF9ib29sX2FfYl9pZHggb24gc2tpcF9ib29sCisgICBJbmRl eCBDb25kOiAoYiA9IDUwKQorKDIgcm93cykKKworU0VMRUNUIGEsIGIgRlJPTSBza2lwX2Jvb2wg V0hFUkUgYiA9IDUwIE9SREVSIEJZIGE7CisgYSB8IGIgIAorLS0tKy0tLS0KKyB0IHwgNTAKKygx IHJvdykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGEsIGIgRlJPTSBza2lwX2Jvb2wg V0hFUkUgYiA9IDUwIE9SREVSIEJZIGEgREVTQzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25s eSBTY2FuIEJhY2t3YXJkIHVzaW5nIHNraXBfYm9vbF9hX2JfaWR4IG9uIHNraXBfYm9vbAorICAg SW5kZXggQ29uZDogKGIgPSA1MCkKKygyIHJvd3MpCisKK1NFTEVDVCBhLCBiIEZST00gc2tpcF9i b29sIFdIRVJFIGIgPSA1MCBPUkRFUiBCWSBhIERFU0M7CisgYSB8IGIgIAorLS0tKy0tLS0KKyB0 IHwgNTAKKygxIHJvdykKKworRFJPUCBUQUJMRSBza2lwX2Jvb2w7CistLSAiY2hhciI6IGJ0Y2hh cnNraXBzdXBwb3J0LCBjaGFyX2RlY3JlbWVudCwgY2hhcl9pbmNyZW1lbnQKK0NSRUFURSBUQUJM RSBza2lwX2NoYXIgKGEgImNoYXIiLCBiIGludDQpOworSU5TRVJUIElOVE8gc2tpcF9jaGFyIFNF TEVDVCBjaHIoYXNjaWkoJ2EnKSArIChpICUgMjYpKTo6ImNoYXIiLCBpIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDEwMCkgaTsKK0NSRUFURSBJTkRFWCBPTiBza2lwX2NoYXIgKGEsIGIpOworRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGEsIGIgRlJPTSBza2lwX2NoYXIgV0hFUkUgYiA9IDUw IE9SREVSIEJZIGE7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBza2lwX2NoYXJfYV9iX2lkeCBvbiBz a2lwX2NoYXIKKyAgIEluZGV4IENvbmQ6IChiID0gNTApCisoMiByb3dzKQorCitTRUxFQ1QgYSwg YiBGUk9NIHNraXBfY2hhciBXSEVSRSBiID0gNTAgT1JERVIgQlkgYTsKKyBhIHwgYiAgCistLS0r LS0tLQorIHkgfCA1MAorKDEgcm93KQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgYSwg YiBGUk9NIHNraXBfY2hhciBXSEVSRSBiID0gNTAgT1JERVIgQlkgYSBERVNDOworICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gQmFja3dhcmQgdXNpbmcgc2tpcF9jaGFyX2FfYl9pZHgg b24gc2tpcF9jaGFyCisgICBJbmRleCBDb25kOiAoYiA9IDUwKQorKDIgcm93cykKKworU0VMRUNU IGEsIGIgRlJPTSBza2lwX2NoYXIgV0hFUkUgYiA9IDUwIE9SREVSIEJZIGEgREVTQzsKKyBhIHwg YiAgCistLS0rLS0tLQorIHkgfCA1MAorKDEgcm93KQorCitEUk9QIFRBQkxFIHNraXBfY2hhcjsK Ky0tIG9pZDogb2lkX2RlY3JlbWVudCAoYnRvaWRza2lwc3VwcG9ydCBhbmQgb2lkX2luY3JlbWVu dCBhbHJlYWR5IGNvdmVyZWQpCitDUkVBVEUgVEFCTEUgc2tpcF9vaWQgKGEgb2lkLCBiIGludDQp OworSU5TRVJUIElOVE8gc2tpcF9vaWQgU0VMRUNUIChpIC8gMTApOjpvaWQsIGkgJSAxMCBGUk9N IGdlbmVyYXRlX3NlcmllcygxLCAxMDApIGk7CitDUkVBVEUgSU5ERVggT04gc2tpcF9vaWQgKGEs IGIpOworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGEsIGIgRlJPTSBza2lwX29pZCBXSEVS RSBiID0gNSBPUkRFUiBCWSBhIERFU0M7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIEJh Y2t3YXJkIHVzaW5nIHNraXBfb2lkX2FfYl9pZHggb24gc2tpcF9vaWQKKyAgIEluZGV4IENvbmQ6 IChiID0gNSkKKygyIHJvd3MpCisKK1NFTEVDVCBhLCBiIEZST00gc2tpcF9vaWQgV0hFUkUgYiA9 IDUgT1JERVIgQlkgYSBERVNDOworIGEgfCBiIAorLS0tKy0tLQorIDkgfCA1CisgOCB8IDUKKyA3 IHwgNQorIDYgfCA1CisgNSB8IDUKKyA0IHwgNQorIDMgfCA1CisgMiB8IDUKKyAxIHwgNQorIDAg fCA1CisoMTAgcm93cykKKworRFJPUCBUQUJMRSBza2lwX29pZDsKKy0tIGludDI6IGludDJfZGVj cmVtZW50IChidGludDJza2lwc3VwcG9ydCBhbmQgaW50Ml9pbmNyZW1lbnQgYWxyZWFkeSBjb3Zl cmVkKQorQ1JFQVRFIFRBQkxFIHNraXBfaW50MiAoYSBpbnQyLCBiIGludDQpOworSU5TRVJUIElO VE8gc2tpcF9pbnQyIFNFTEVDVCAoaSAvIDEwKTo6aW50MiwgaSAlIDEwIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDEwMCkgaTsKK0NSRUFURSBJTkRFWCBPTiBza2lwX2ludDIgKGEsIGIpOworRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGEsIGIgRlJPTSBza2lwX2ludDIgV0hFUkUgYiA9IDUg T1JERVIgQlkgYSBERVNDOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gQmFja3dh cmQgdXNpbmcgc2tpcF9pbnQyX2FfYl9pZHggb24gc2tpcF9pbnQyCisgICBJbmRleCBDb25kOiAo YiA9IDUpCisoMiByb3dzKQorCitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfaW50MiBXSEVSRSBiID0g NSBPUkRFUiBCWSBhIERFU0M7CisgYSB8IGIgCistLS0rLS0tCisgOSB8IDUKKyA4IHwgNQorIDcg fCA1CisgNiB8IDUKKyA1IHwgNQorIDQgfCA1CisgMyB8IDUKKyAyIHwgNQorIDEgfCA1CisgMCB8 IDUKKygxMCByb3dzKQorCitEUk9QIFRBQkxFIHNraXBfaW50MjsKK1JFU0VUIGVuYWJsZV9zZXFz Y2FuOworUkVTRVQgZW5hYmxlX2JpdG1hcHNjYW47CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9idHJlZV9pbmRleC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9idHJlZV9pbmRl eC5zcWwKaW5kZXggNmFhYWEzODZhYmMuLjExMDlmMWUwNTA2IDEwMDY0NAotLS0gYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9idHJlZV9pbmRleC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv YnRyZWVfaW5kZXguc3FsCkBAIC00MzgsMyArNDM4LDc5IEBAIENSRUFURSBUQUJMRSBidHJlZV9w YXJ0IChpZCBpbnQ0KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKIENSRUFURSBJTkRFWCBidHJl ZV9wYXJ0X2lkeCBPTiBidHJlZV9wYXJ0KGlkKTsKIEFMVEVSIElOREVYIGJ0cmVlX3BhcnRfaWR4 IEFMVEVSIENPTFVNTiBpZCBTRVQgKG5fZGlzdGluY3Q9MTAwKTsKIERST1AgVEFCTEUgYnRyZWVf cGFydDsKKworLS0KKy0tIFRlc3QgYnRyZWUgc2tpcCBzY2FuIHN1cHBvcnQgZm9yIHR5cGVzIHRo YXQgY3VycmVudGx5IGxhY2sgdGVzdCBjb3ZlcmFnZQorLS0gKGV4ZXJjaXNlcyBidFhYWHNraXBz dXBwb3J0LCBYWFhfZGVjcmVtZW50LCBYWFhfaW5jcmVtZW50IGZ1bmN0aW9ucykKKy0tCitTRVQg ZW5hYmxlX3NlcXNjYW4gPSBvZmY7CitTRVQgZW5hYmxlX2JpdG1hcHNjYW4gPSBvZmY7CisKKy0t IGludDg6IGJ0aW50OHNraXBzdXBwb3J0LCBpbnQ4X2RlY3JlbWVudCwgaW50OF9pbmNyZW1lbnQK K0NSRUFURSBUQUJMRSBza2lwX2ludDggKGEgaW50OCwgYiBpbnQ0KTsKK0lOU0VSVCBJTlRPIHNr aXBfaW50OCBTRUxFQ1QgaSAvIDEwLCBpICUgMTAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAw KSBpOworQ1JFQVRFIElOREVYIE9OIHNraXBfaW50OCAoYSwgYik7CitFWFBMQUlOIChDT1NUUyBP RkYpCitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfaW50OCBXSEVSRSBiID0gNSBPUkRFUiBCWSBhOwor U0VMRUNUIGEsIGIgRlJPTSBza2lwX2ludDggV0hFUkUgYiA9IDUgT1JERVIgQlkgYTsKK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCBhLCBiIEZST00gc2tpcF9pbnQ4IFdIRVJFIGIgPSA1IE9S REVSIEJZIGEgREVTQzsKK1NFTEVDVCBhLCBiIEZST00gc2tpcF9pbnQ4IFdIRVJFIGIgPSA1IE9S REVSIEJZIGEgREVTQzsKK0RST1AgVEFCTEUgc2tpcF9pbnQ4OworCistLSBvaWQ4OiBidG9pZDhz a2lwc3VwcG9ydCwgb2lkOF9kZWNyZW1lbnQsIG9pZDhfaW5jcmVtZW50CitDUkVBVEUgVEFCTEUg c2tpcF9vaWQ4IChhIG9pZDgsIGIgaW50NCk7CitJTlNFUlQgSU5UTyBza2lwX29pZDggU0VMRUNU IChpIC8gMTApOjppbnQ4OjpvaWQ4LCBpICUgMTAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAw KSBpOworQ1JFQVRFIElOREVYIE9OIHNraXBfb2lkOCAoYSwgYik7CitFWFBMQUlOIChDT1NUUyBP RkYpCitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfb2lkOCBXSEVSRSBiID0gNSBPUkRFUiBCWSBhOwor U0VMRUNUIGEsIGIgRlJPTSBza2lwX29pZDggV0hFUkUgYiA9IDUgT1JERVIgQlkgYTsKK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCBhLCBiIEZST00gc2tpcF9vaWQ4IFdIRVJFIGIgPSA1IE9S REVSIEJZIGEgREVTQzsKK1NFTEVDVCBhLCBiIEZST00gc2tpcF9vaWQ4IFdIRVJFIGIgPSA1IE9S REVSIEJZIGEgREVTQzsKK0RST1AgVEFCTEUgc2tpcF9vaWQ4OworCistLSBib29sOiBidGJvb2xz a2lwc3VwcG9ydCwgYm9vbF9kZWNyZW1lbnQsIGJvb2xfaW5jcmVtZW50CitDUkVBVEUgVEFCTEUg c2tpcF9ib29sIChhIGJvb2wsIGIgaW50NCk7CitJTlNFUlQgSU5UTyBza2lwX2Jvb2wgU0VMRUNU IChpICUgMiA9IDApLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsKK0NSRUFURSBJ TkRFWCBPTiBza2lwX2Jvb2wgKGEsIGIpOworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGEs IGIgRlJPTSBza2lwX2Jvb2wgV0hFUkUgYiA9IDUwIE9SREVSIEJZIGE7CitTRUxFQ1QgYSwgYiBG Uk9NIHNraXBfYm9vbCBXSEVSRSBiID0gNTAgT1JERVIgQlkgYTsKK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCBhLCBiIEZST00gc2tpcF9ib29sIFdIRVJFIGIgPSA1MCBPUkRFUiBCWSBhIERF U0M7CitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfYm9vbCBXSEVSRSBiID0gNTAgT1JERVIgQlkgYSBE RVNDOworRFJPUCBUQUJMRSBza2lwX2Jvb2w7CisKKy0tICJjaGFyIjogYnRjaGFyc2tpcHN1cHBv cnQsIGNoYXJfZGVjcmVtZW50LCBjaGFyX2luY3JlbWVudAorQ1JFQVRFIFRBQkxFIHNraXBfY2hh ciAoYSAiY2hhciIsIGIgaW50NCk7CitJTlNFUlQgSU5UTyBza2lwX2NoYXIgU0VMRUNUIGNocihh c2NpaSgnYScpICsgKGkgJSAyNikpOjoiY2hhciIsIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwg MTAwKSBpOworQ1JFQVRFIElOREVYIE9OIHNraXBfY2hhciAoYSwgYik7CitFWFBMQUlOIChDT1NU UyBPRkYpCitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfY2hhciBXSEVSRSBiID0gNTAgT1JERVIgQlkg YTsKK1NFTEVDVCBhLCBiIEZST00gc2tpcF9jaGFyIFdIRVJFIGIgPSA1MCBPUkRFUiBCWSBhOwor RVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGEsIGIgRlJPTSBza2lwX2NoYXIgV0hFUkUgYiA9 IDUwIE9SREVSIEJZIGEgREVTQzsKK1NFTEVDVCBhLCBiIEZST00gc2tpcF9jaGFyIFdIRVJFIGIg PSA1MCBPUkRFUiBCWSBhIERFU0M7CitEUk9QIFRBQkxFIHNraXBfY2hhcjsKKworLS0gb2lkOiBv aWRfZGVjcmVtZW50IChidG9pZHNraXBzdXBwb3J0IGFuZCBvaWRfaW5jcmVtZW50IGFscmVhZHkg Y292ZXJlZCkKK0NSRUFURSBUQUJMRSBza2lwX29pZCAoYSBvaWQsIGIgaW50NCk7CitJTlNFUlQg SU5UTyBza2lwX29pZCBTRUxFQ1QgKGkgLyAxMCk6Om9pZCwgaSAlIDEwIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDEwMCkgaTsKK0NSRUFURSBJTkRFWCBPTiBza2lwX29pZCAoYSwgYik7CitFWFBM QUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfb2lkIFdIRVJFIGIgPSA1IE9S REVSIEJZIGEgREVTQzsKK1NFTEVDVCBhLCBiIEZST00gc2tpcF9vaWQgV0hFUkUgYiA9IDUgT1JE RVIgQlkgYSBERVNDOworRFJPUCBUQUJMRSBza2lwX29pZDsKKworLS0gaW50MjogaW50Ml9kZWNy ZW1lbnQgKGJ0aW50MnNraXBzdXBwb3J0IGFuZCBpbnQyX2luY3JlbWVudCBhbHJlYWR5IGNvdmVy ZWQpCitDUkVBVEUgVEFCTEUgc2tpcF9pbnQyIChhIGludDIsIGIgaW50NCk7CitJTlNFUlQgSU5U TyBza2lwX2ludDIgU0VMRUNUIChpIC8gMTApOjppbnQyLCBpICUgMTAgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwgMTAwKSBpOworQ1JFQVRFIElOREVYIE9OIHNraXBfaW50MiAoYSwgYik7CitFWFBM QUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfaW50MiBXSEVSRSBiID0gNSBP UkRFUiBCWSBhIERFU0M7CitTRUxFQ1QgYSwgYiBGUk9NIHNraXBfaW50MiBXSEVSRSBiID0gNSBP UkRFUiBCWSBhIERFU0M7CitEUk9QIFRBQkxFIHNraXBfaW50MjsKKworUkVTRVQgZW5hYmxlX3Nl cXNjYW47CitSRVNFVCBlbmFibGVfYml0bWFwc2NhbjsKCi0tIAoyLjUwLjEgKEFwcGxlIEdpdC0x NTUpCg== --00000000000086f187065362745b--