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.94.2) (envelope-from ) id 1tnsq1-003CJd-Lo for pgsql-hackers@arkaria.postgresql.org; Fri, 28 Feb 2025 05:23:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tnsq2-00EG75-Mf for pgsql-hackers@arkaria.postgresql.org; Fri, 28 Feb 2025 05:23:05 +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.94.2) (envelope-from ) id 1tnsq2-00EG6v-AN for pgsql-hackers@lists.postgresql.org; Fri, 28 Feb 2025 05:23:04 +0000 Received: from mail-pj1-x1042.google.com ([2607:f8b0:4864:20::1042]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tnspw-00075F-2x for pgsql-hackers@postgresql.org; Fri, 28 Feb 2025 05:23:04 +0000 Received: by mail-pj1-x1042.google.com with SMTP id 98e67ed59e1d1-2f44353649aso2825196a91.0 for ; Thu, 27 Feb 2025 21:23:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740720179; x=1741324979; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=4lbsw7CqsljEAqut3J7RY2VbkxtqeGLdLguk1kw5dgk=; b=J/bgIvnmT5C8JgJX5FrAY5Xv9YJGeZjXKsMy8eZviTCMdSbim8dbsQAwtRuPVl+sys UOlpZAVdT7nPEmV33PiTR/vhUgSfgEcOebYyxq+eK2F3GPWRXtnbzEFRF0zrzWJiCaPS 3s+b8EAbaRaK3zLp2cX9bQQrmalOSHnps7mH1Cqc9PiaHwkCGOM8Vu8o+ugkndqxwUhI NmxukpXOxbz053IW7rzydH4EIzfXs62th1EvLvpabts1YB9lRbkXP6XAOANu5c+poXVO EGU4cCKafTcdLpMcwZr3lXu28tgKOiplvC3bWnhfiegyxxLwLzsJ4I3NXmp4tfb6VJEr u9Yg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740720179; x=1741324979; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=4lbsw7CqsljEAqut3J7RY2VbkxtqeGLdLguk1kw5dgk=; b=CTXTWMt+wLqtBKDfaiiMqcngDNPm57R1/YWibOGqybaoYkzQhhKDdFXVOYgCgrBT+1 RfePCq5pvp86CD/oMlLpxOyIcSKIOZQ9N3EQCQ3ag1ccv1rc3VZjdowiaPjgSXe6PqpC +R5ugGNo3mfO/uSU2crV/LIsDRjQWLhEPe3YoG8XoQb44gIMrTfAIsajWF7SKASwExsc 4tojpJfZ4KvMWfBMHl401Du4wublxrxvJX2WhLcPc1G5T5mQv6t59JASqxPVl5ueGqqh nJqYfWwhR6gx6VR+f4wC/M/o0ag/s8U7PogZ0XT+RdSduj6an3zFIFqGwNFABAd/qqQZ a5Uw== X-Gm-Message-State: AOJu0YzK/pdos0lOiJbeKyEg20SW1mofc29Bd795+rY2B9NcvckyKzUb +/DHYVz3KGkbDGO+53SvfHjGOGJC2r+joYNmGItOjzifp7tqQ662B8dN37SxvsysW17TXS+4fYo xAbO1NTP5QU87Oxqtywb0Jwppn8ECIumsnT8= X-Gm-Gg: ASbGnctzkPrVjQ8dgUb6eBkSv6db36H1GsQTrGUdrJpePvKEsjByP0MWqFN4zdgRsB9 V6ctbbu7n6gFM8+WzI2Yt/+U6FcCHcYkSmI6/6MH+jf4vSfwGaw/gF5lW8v75aGYghRrfbuMz/e wvntNfqyqFwE3Y6EgNUTfftwY5EVzW+YhaOzQh3/w= X-Google-Smtp-Source: AGHT+IFYE7FG6AwefZFwaczurgx4JO3zmRDPZ7rmv/3Ga44VEezmTd6JDGJr8dP0ESVr8rSt4F2+6di2rycrTRNRl98= X-Received: by 2002:a17:90a:d605:b0:2fe:afa7:eaf8 with SMTP id 98e67ed59e1d1-2febab3a26cmr3174501a91.13.1740720178953; Thu, 27 Feb 2025 21:22:58 -0800 (PST) MIME-Version: 1.0 From: Alexandra Wang Date: Thu, 27 Feb 2025 23:22:21 -0600 X-Gm-Features: AQ5f1Jpyj7FGIQ3RAbyaI7hEzgkSz_1hETsxk_Ly5rsDnURx48LL2h0WeyHbqlI Message-ID: Subject: Remove extra Sort node above a btree-compatible Index Scan To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000ebd0a1062f2cffe6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ebd0a1062f2cffe6 Content-Type: multipart/alternative; boundary="000000000000ebd0a0062f2cffe4" --000000000000ebd0a0062f2cffe4 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hello hackers, While reviewing Mark Dilger=E2=80=99s patch series "Index AM API cleanup" [= 1], I noticed some unexpected plan diffs when running the xtree and treeb test modules. Specifically, an additional Sort node appears on top of an Index Only Scan, even when the index key and sort key are the same. For example: --- src/test/modules/xtree/expected/interval.out +++ src/test/modules/xtree/results/interval.out @@ -375,10 +375,12 @@ SET enable_seqscan TO false; EXPLAIN (COSTS OFF) SELECT f1 FROM INTERVAL_TBL_OF r1 ORDER BY f1; - QUERY PLAN --------------------------------------------------------------------- - Index Only Scan using interval_tbl_of_f1_idx on interval_tbl_of r1 -(1 row) + QUERY PLAN +-------------------------------------------------------------------------- + Sort + Sort Key: f1 + -> Index Only Scan using interval_tbl_of_f1_idx on interval_tbl_of r1 +(3 rows) I=E2=80=99ve attached a patch that removes this unnecessary Sort node for B-tree-compatible indexes. This change should: - Reduce the number of test failures in the xtree module from 43 to 30 - Reduce the size of regression.diffs from 234K to 123K Since pathkey comparison is a hot path in query planning and exercised by many test queries, I plan to gather more performance metrics. However, in a simple test running make installcheck with and without the patch, I observed no negative impact on the runtime of the regression test suite (which doesn=E2=80=99t include other btree-like index= es) and a positive impact on the same regression tests for xtree. Regression tests (same plans): w/o patch: make installcheck 1.36s user 2.21s system 12% cpu 28.018 total w/ patch: make installcheck 1.32s user 2.12s system 12% cpu 28.089 total xtree tests: w/o patch (inferior plan w/ extra sort node): make installcheck 1.52s user 2.42s system 10% cpu 36.817 total w/ patch (good plan): make installcheck 1.52s user 2.48s system 12% cpu 32.201 total I=E2=80=99ve marked the patch as no-cfbot, as it applies only on top of the aforementioned patch series [1]. Thoughts? [1] https://www.postgresql.org/message-id/a5dfb7cd-7a89-48ab-a913-e5304eee0854%= 40eisentraut.org Best, Alex --000000000000ebd0a0062f2cffe4 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello hackers,

While reviewing Mark Dilger=E2=80=99= s patch series "Index AM API cleanup" [1],
I noticed some unex= pected plan diffs when running the xtree and treeb
test modules. Specifi= cally, an additional Sort node appears on top of
an Index Only Scan, eve= n when the index key and sort key are the same.
For example:

--- = src/test/modules/xtree/expected/interval.out
+++ src/test/modules/xtree/= results/interval.out
@@ -375,10 +375,12 @@
=C2=A0SET enable_seqscan T= O false;
=C2=A0EXPLAIN (COSTS OFF)
=C2=A0SELECT f1 FROM INTERVAL_TBL_= OF r1 ORDER BY f1;
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 QUERY PLAN =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0
------------------------------------------------------------= ---------
- Index Only Scan using interval_tbl_of_f1_idx on interval_tbl= _of r1
-(1 row)
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0QUERY PLAN = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0
+--------------------------------= ------------------------------------------
+ Sort
+ =C2=A0 Sort Key: = f1
+ =C2=A0 -> =C2=A0Index Only Scan using interval_tbl_of_f1_idx on = interval_tbl_of r1
+(3 rows)


I=E2=80=99ve attached a patch th= at removes this unnecessary Sort node for
B-tree-compatible indexes. Thi= s change should:
- Reduce the number of test failures in the xtree modul= e from 43 to 30
- Reduce the size of regression.diffs from 234K to 123K<= br>
Since pathkey comparison is a hot path in query planning and exercis= ed
by many test queries, I plan to gather more performance metrics.
H= owever, in a simple test running make installcheck with and without
the = patch, I observed no negative impact on the runtime of the
regression te= st suite (which doesn=E2=80=99t include other btree-like indexes)
and a = positive impact on the same regression tests for xtree.

Regression t= ests (same plans):
w/o patch:
make installcheck =C2=A01.36s user 2.21= s system 12% cpu 28.018 total
w/ patch:
make installcheck =C2=A01.32s= user 2.12s system 12% cpu 28.089 total

xtree tests:
w/o patch (i= nferior plan w/ extra sort node):
make installcheck =C2=A01.52s user 2.4= 2s system 10% cpu 36.817 total
w/ patch (good plan):
make installchec= k =C2=A01.52s user 2.48s system 12% cpu 32.201 total

I=E2=80=99ve ma= rked the patch as no-cfbot, as it applies only on top of the
aforementio= ned patch series [1].

Thoughts?

[1] https://www.postgresql.org/message-id/a5dfb7cd-7a89-48ab-a913-e5304eee0= 854%40eisentraut.org

Best,
Alex

--000000000000ebd0a0062f2cffe4-- --000000000000ebd0a1062f2cffe6 Content-Type: application/octet-stream; name="v1-0001-Remove-unnecessary-Sort-node-above-Index-Scan-of-.patch.no-cfbot" Content-Disposition: attachment; filename="v1-0001-Remove-unnecessary-Sort-node-above-Index-Scan-of-.patch.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7obq9jx0 RnJvbSA0YmE4YzFkNjdiMzIzYzljMmQ5ZTQxYTJhYWQwNmQ5NWRmNjExYmNiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kcmEgV2FuZyA8YWxleGFuZHJhLndhbmcub3NzQGdt YWlsLmNvbT4KRGF0ZTogV2VkLCAyMyBPY3QgMjAyNCAxNDoyNjo0MCAtMDUwMApTdWJqZWN0OiBb UEFUQ0ggdjFdIFJlbW92ZSB1bm5lY2Vzc2FyeSBTb3J0IG5vZGUgYWJvdmUgSW5kZXggU2NhbiBv ZgogYnRyZWUtY29tcGF0aWJsZSBBTQoKV2hlbiBkZXRlcm1pbmluZyB3aGV0aGVyIHR3byBzb3J0 IGtleXMgYXJlIGVxdWl2YWxlbnQsIHRoZXkgbWF5IG5vdApiZWxvbmcgdG8gdGhlIHNhbWUgb3Bl cmF0b3IgZmFtaWx5IGJ1dCBjb3VsZCBzdGlsbCB1c2UgdGhlIHNhbWUKdW5kZXJseWluZyBzb3J0 IG9wZXJhdG9yLiAgSW4gc3VjaCBjYXNlcywgYSBzaW1wbGUgcG9pbnRlciBjb21wYXJpc29uCm9m IHR3byBwYXRoa2V5cyBtYXJrcyB0aGVtIGFzIGRpZmZlcmVudCwgbGVhZGluZyB0byB0aGUgYWRk aXRpb24gb2YgYW4KdW5uZWNlc3NhcnkgU29ydCBub2RlLCBldmVuIHRob3VnaCB0aGUgcGF0aCBp cyBhbHJlYWR5IHNvcnRlZCBhcwpkZXNpcmVkLgoKVGhpcyBwYXRjaCBpbXByb3ZlcyBwYXRoa2V5 c19jb250YWluZWRfaW4oKSBhbmQKcGF0aGtleXNfY291bnRfY29udGFpbmVkX2luKCkgYnkgY29t cGFyaW5nIHRoZSBzb3J0IG9wZXJhdG9ycwpkaXJlY3RseSwgcHJldmVudGluZyByZWR1bmRhbnQg c29ydGluZy4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jICAgfCAg NCArLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3BhdGhrZXlzLmMgICB8IDQzICsrKysr KysrKysrKysrKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBs YW4uYyB8ICA2ICsrLS0KIDMgZmlsZXMgY2hhbmdlZCwgNDMgaW5zZXJ0aW9ucygrKSwgMTAgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNp emUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKaW5kZXggYjdmNmFi NDBkZWMuLmU5NTc2MmFjOWE0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMK QEAgLTM2MDcsOSArMzYwNyw3IEBAIGluaXRpYWxfY29zdF9tZXJnZWpvaW4oUGxhbm5lckluZm8g KnJvb3QsIEpvaW5Db3N0V29ya3NwYWNlICp3b3Jrc3BhY2UsCiAJCW9wYXRoa2V5ID0gKFBhdGhL ZXkgKikgbGluaXRpYWwob3BhdGhrZXlzKTsKIAkJaXBhdGhrZXkgPSAoUGF0aEtleSAqKSBsaW5p dGlhbChpcGF0aGtleXMpOwogCQkvKiBkZWJ1Z2dpbmcgY2hlY2sgKi8KLQkJaWYgKG9wYXRoa2V5 LT5wa19vcGZhbWlseSAhPSBpcGF0aGtleS0+cGtfb3BmYW1pbHkgfHwKLQkJCW9wYXRoa2V5LT5w a19lY2xhc3MtPmVjX2NvbGxhdGlvbiAhPSBpcGF0aGtleS0+cGtfZWNsYXNzLT5lY19jb2xsYXRp b24gfHwKLQkJCW9wYXRoa2V5LT5wa19zdHJhdGVneSAhPSBpcGF0aGtleS0+cGtfc3RyYXRlZ3kg fHwKKwkJaWYgKG9wYXRoa2V5LT5wa19lY2xhc3MtPmVjX2NvbGxhdGlvbiAhPSBpcGF0aGtleS0+ cGtfZWNsYXNzLT5lY19jb2xsYXRpb24gfHwKIAkJCW9wYXRoa2V5LT5wa19jbXB0eXBlICE9IGlw YXRoa2V5LT5wa19jbXB0eXBlIHx8CiAJCQlvcGF0aGtleS0+cGtfbnVsbHNfZmlyc3QgIT0gaXBh dGhrZXktPnBrX251bGxzX2ZpcnN0KQogCQkJZWxvZyhFUlJPUiwgImxlZnQgYW5kIHJpZ2h0IHBh dGhrZXlzIGRvIG5vdCBtYXRjaCBpbiBtZXJnZWpvaW4iKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL3BhdGhrZXlzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9wYXRoa2V5cy5jCmluZGV4IGEwODI2ZWQ1MDA4Li5hNzA5MTQ4ZWE5ZiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvcGF0aGtleXMuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9wYXRoa2V5cy5jCkBAIC0zOSw3ICszOSw3IEBAIHN0YXRpYyBib29sIG1h dGNoZXNfYm9vbGVhbl9wYXJ0aXRpb25fY2xhdXNlKFJlc3RyaWN0SW5mbyAqcmluZm8sCiAJCQkJ CQkJCQkJCSBpbnQgcGFydGtleWNvbCk7CiBzdGF0aWMgVmFyICpmaW5kX3Zhcl9mb3Jfc3VicXVl cnlfdGxlKFJlbE9wdEluZm8gKnJlbCwgVGFyZ2V0RW50cnkgKnRsZSk7CiBzdGF0aWMgYm9vbCBy aWdodF9tZXJnZV9kaXJlY3Rpb24oUGxhbm5lckluZm8gKnJvb3QsIFBhdGhLZXkgKnBhdGhrZXkp OwotCitzdGF0aWMgYm9vbCBwYXRoa2V5c19oYXZlX3NhbWVfc29ydG9wKFBhdGhLZXkgKnBrMSwg UGF0aEtleSAqcGsyKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQlQQVRIS0VZIENPTlNU UlVDVElPTiBBTkQgUkVEVU5EQU5DWSBURVNUSU5HCkBAIC0zNTUsNyArMzU1LDcgQEAgY29tcGFy ZV9wYXRoa2V5cyhMaXN0ICprZXlzMSwgTGlzdCAqa2V5czIpCiAJCVBhdGhLZXkgICAgKnBhdGhr ZXkxID0gKFBhdGhLZXkgKikgbGZpcnN0KGtleTEpOwogCQlQYXRoS2V5ICAgICpwYXRoa2V5MiA9 IChQYXRoS2V5ICopIGxmaXJzdChrZXkyKTsKIAotCQlpZiAocGF0aGtleTEgIT0gcGF0aGtleTIp CisJCWlmICghcGF0aGtleXNfaGF2ZV9zYW1lX3NvcnRvcChwYXRoa2V5MSwgcGF0aGtleTIpKQog CQkJcmV0dXJuIFBBVEhLRVlTX0RJRkZFUkVOVDsJLyogbm8gbmVlZCB0byBrZWVwIGxvb2tpbmcg Ki8KIAl9CiAKQEAgLTU4NSw2ICs1ODUsNDMgQEAgZ2V0X3VzZWZ1bF9ncm91cF9rZXlzX29yZGVy aW5ncyhQbGFubmVySW5mbyAqcm9vdCwgUGF0aCAqcGF0aCkKIAlyZXR1cm4gaW5mb3M7CiB9CiAK Ky8qCisgKiBwYXRoa2V5c19oYXZlX3NhbWVfc29ydG9wCisgKgorICogRGV0ZXJtaW5lcyB3aGV0 aGVyIHR3byBQYXRoS2V5IG9iamVjdHMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudAor ICogZm9yIHNvcnRpbmcgcHVycG9zZXMuIFR3byBQYXRoS2V5cyBhcmUgdHJlYXRlZCBhcyB0aGUg c2FtZSBpZjoKKyAqICAtIFRoZXkgYXJlIGlkZW50aWNhbCBwb2ludGVycyBPUgorICogIC0gVGhl eSBiZWxvbmcgdG8gdGhlIHNhbWUgZXF1aXZhbGVuY2UgY2xhc3MuIEFORAorICogIC0gVGhleSBo YXZlIHRoZSBzYW1lIGNvbXBhcmlzb24gdHlwZSBhbmQgbnVsbCBvcmRlcmluZy4gQU5ECisgKiAg LSBUaGV5IGhhdmUgdGhlIHNhbWUgc29ydGluZyBvcGVyYXRvciwgZXZlbiBpZiB0aGV5IGJlbG9u ZyB0byBkaWZmZXJlbnQKKyAqICAgIG9wZXJhdG9yIGZhbWlsaWVzLgorICoKKyAqIFRoZSBmdW5j dGlvbiByZXRyaWV2ZXMgdGhlIHNvcnQgb3BlcmF0b3IgKHNvcnRvcCkgZm9yIGJvdGggUGF0aEtl eXMgdXNpbmcKKyAqIHRoZWlyIG9wZXJhdG9yIGZhbWlseSwgZGF0YXR5cGUsIGFuZCBzdHJhdGVn eS4gSWYgYm90aCBQYXRoS2V5cyByZXNvbHZlIHRvCisgKiB0aGUgc2FtZSBzb3J0IG9wZXJhdG9y LCB0aGV5IGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQuCisgKi8KK3N0YXRpYyBib29sCitwYXRo a2V5c19oYXZlX3NhbWVfc29ydG9wKFBhdGhLZXkgKnBrMSwgUGF0aEtleSAqcGsyKQoreworCU9p ZAkJCXBrX29wMTsKKwlPaWQJCQlwa19vcDI7CisJT2lkCQkJcGtfZGF0YXR5cGU7CisKKwlpZiAo cGsxID09IHBrMikKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAocGsxLT5wa19lY2xhc3MgIT0gcGsy LT5wa19lY2xhc3MgfHwKKwkJcGsxLT5wa19jbXB0eXBlICE9IHBrMi0+cGtfY21wdHlwZSB8fAor CQlwazEtPnBrX251bGxzX2ZpcnN0ICE9IHBrMi0+cGtfbnVsbHNfZmlyc3QpCisJCXJldHVybiBm YWxzZTsKKworCXBrX2RhdGF0eXBlID0gKChFcXVpdmFsZW5jZU1lbWJlciAqKSBsaW5pdGlhbChw azEtPnBrX2VjbGFzcy0+ZWNfbWVtYmVycykpLT5lbV9kYXRhdHlwZTsKKwlwa19vcDEgPSBnZXRf b3BmYW1pbHlfbWVtYmVyKHBrMS0+cGtfb3BmYW1pbHksIHBrX2RhdGF0eXBlLCBwa19kYXRhdHlw ZSwgcGsxLT5wa19zdHJhdGVneSk7CisJcGtfb3AyID0gZ2V0X29wZmFtaWx5X21lbWJlcihwazIt PnBrX29wZmFtaWx5LCBwa19kYXRhdHlwZSwgcGtfZGF0YXR5cGUsIHBrMi0+cGtfc3RyYXRlZ3kp OworCisJcmV0dXJuIHBrX29wMSA9PSBwa19vcDI7Cit9CisKIC8qCiAgKiBwYXRoa2V5c19jb3Vu dF9jb250YWluZWRfaW4KICAqICAgIFNhbWUgYXMgcGF0aGtleXNfY29udGFpbmVkX2luLCBidXQg YWxzbyBzZXRzIGxlbmd0aCBvZiBsb25nZXN0CkBAIC02MjYsNyArNjYzLDcgQEAgcGF0aGtleXNf Y291bnRfY29udGFpbmVkX2luKExpc3QgKmtleXMxLCBMaXN0ICprZXlzMiwgaW50ICpuX2NvbW1v bikKIAkJUGF0aEtleSAgICAqcGF0aGtleTEgPSAoUGF0aEtleSAqKSBsZmlyc3Qoa2V5MSk7CiAJ CVBhdGhLZXkgICAgKnBhdGhrZXkyID0gKFBhdGhLZXkgKikgbGZpcnN0KGtleTIpOwogCi0JCWlm IChwYXRoa2V5MSAhPSBwYXRoa2V5MikKKwkJaWYgKCFwYXRoa2V5c19oYXZlX3NhbWVfc29ydG9w KHBhdGhrZXkxLCBwYXRoa2V5MikpCiAJCXsKIAkJCSpuX2NvbW1vbiA9IG47CiAJCQlyZXR1cm4g ZmFsc2U7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFu LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggNmE3YThk NjhkYjUuLjAxNWY3ZjA1ODAxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9jcmVhdGVwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxh bi5jCkBAIC00NzQ3LDEyICs0NzQ3LDEwIEBAIGNyZWF0ZV9tZXJnZWpvaW5fcGxhbihQbGFubmVy SW5mbyAqcm9vdCwKIAkJICogbWF0dGVyIHdoaWNoIHdheSB3ZSBpbWFnaW5lIHRoaXMgY29sdW1u IHRvIGJlIG9yZGVyZWQuKSAgQnV0IGEKIAkJICogbm9uLXJlZHVuZGFudCBpbm5lciBwYXRoa2V5 IGhhZCBiZXR0ZXIgbWF0Y2ggb3V0ZXIncyBvcmRlcmluZyB0b28uCiAJCSAqLwotCQlpZiAob3Bh dGhrZXktPnBrX29wZmFtaWx5ICE9IGlwYXRoa2V5LT5wa19vcGZhbWlseSB8fAotCQkJb3BhdGhr ZXktPnBrX2VjbGFzcy0+ZWNfY29sbGF0aW9uICE9IGlwYXRoa2V5LT5wa19lY2xhc3MtPmVjX2Nv bGxhdGlvbikKKwkJaWYgKG9wYXRoa2V5LT5wa19lY2xhc3MtPmVjX2NvbGxhdGlvbiAhPSBpcGF0 aGtleS0+cGtfZWNsYXNzLT5lY19jb2xsYXRpb24pCiAJCQllbG9nKEVSUk9SLCAibGVmdCBhbmQg cmlnaHQgcGF0aGtleXMgZG8gbm90IG1hdGNoIGluIG1lcmdlam9pbiIpOwogCQlpZiAoZmlyc3Rf aW5uZXJfbWF0Y2ggJiYKLQkJCShvcGF0aGtleS0+cGtfc3RyYXRlZ3kgIT0gaXBhdGhrZXktPnBr X3N0cmF0ZWd5IHx8Ci0JCQkgb3BhdGhrZXktPnBrX2NtcHR5cGUgIT0gaXBhdGhrZXktPnBrX2Nt cHR5cGUgfHwKKwkJCShvcGF0aGtleS0+cGtfY21wdHlwZSAhPSBpcGF0aGtleS0+cGtfY21wdHlw ZSB8fAogCQkJIG9wYXRoa2V5LT5wa19udWxsc19maXJzdCAhPSBpcGF0aGtleS0+cGtfbnVsbHNf Zmlyc3QpKQogCQkJZWxvZyhFUlJPUiwgImxlZnQgYW5kIHJpZ2h0IHBhdGhrZXlzIGRvIG5vdCBt YXRjaCBpbiBtZXJnZWpvaW4iKTsKIAotLSAKMi4zOS41IChBcHBsZSBHaXQtMTU0KQoK --000000000000ebd0a1062f2cffe6--