Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dqLTk-0004vp-EZ for pgsql-hackers@arkaria.postgresql.org; Fri, 08 Sep 2017 15:46:00 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1dqLTj-0006fG-Sn for pgsql-hackers@arkaria.postgresql.org; Fri, 08 Sep 2017 15:45:59 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1dqLRz-0003fp-Lm for pgsql-hackers@postgresql.org; Fri, 08 Sep 2017 15:44:12 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by makus.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dqLRq-0001GI-C5 for pgsql-hackers@postgresql.org; Fri, 08 Sep 2017 15:44:10 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id E00DC21C1CE7; Fri, 8 Sep 2017 18:44:00 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru Received: from mail.postgrespro.ru (unknown [192.168.27.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id A555F21C0552; Fri, 8 Sep 2017 18:44:00 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1504885440; bh=bCwAs4vC61Z25C1Sth26izqlJGJ2xu9svUDQFOpTHsQ=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=gnuFYeiMIPSkOY2aD91jkozXg7NjIeIN6GuQWlDW0WUPgZhYW/0ntIfcj3q4apamd s8QXbXTe6OgQ/8N/e5tS+nzXC6nDWrDGhAR3dGZtNIph2Ggb705XVhQaTKASDzXw8u k6yI2FN0xeNAXSY4SxxyjAjk6LiAj21QgcMMXNM4= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_76897c37dcdfbb7bbc2158c8c9d19c7e" Date: Fri, 08 Sep 2017 18:44:00 +0300 From: Victor Drobny To: Thomas Munro Cc: Tom Lane , Aleksander Alekseev , Pgsql Hackers Subject: Re: Red-Black tree traversal tests Organization: Postgres Professional In-Reply-To: References: <20170801095446.GA22764@e733.localdomain> <20170801095835.GB22764@e733.localdomain> <2e864bd9888f41f7f6c9808ee2b8a5a0@postgrespro.ru> <419a79bae64398144716c38b85359539@postgrespro.ru> <20170803084222.GA14690@e733.localdomain> <2479.1504737491@sss.pgh.pa.us> Message-ID: X-Sender: v.drobny@postgrespro.ru User-Agent: Roundcube Webmail/1.2.4 List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org --=_76897c37dcdfbb7bbc2158c8c9d19c7e Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed On 2017-09-08 15:23, Thomas Munro wrote: > On Fri, Sep 8, 2017 at 9:03 PM, Victor Drobny > wrote: >> Thank you very much for your review. In the attachment you can find v2 >> of >> the patch. > > FYI this version crashes for me: > > test test_rbtree ... FAILED (test process exited with exit > code 2) > > It's trying to call rb->combiner which is null. > Thank you for pointing on it. Here is a fixed version. -- Victor Drobny Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_76897c37dcdfbb7bbc2158c8c9d19c7e Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=rbtree_test_3.patch Content-Disposition: attachment; filename=rbtree_test_3.patch; size=20561 ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgYi9zcmMv dGVzdC9tb2R1bGVzL01ha2VmaWxlCmluZGV4IDNjZTk5MDQuLmI3ZWQwYWYg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQpAQCAtMTMsNiArMTMsNyBAQCBT VUJESVJTID0gXAogCQkgIHRlc3RfZXh0ZW5zaW9ucyBcCiAJCSAgdGVzdF9w YXJzZXIgXAogCQkgIHRlc3RfcGdfZHVtcCBcCisJCSAgdGVzdF9yYnRyZWUg XAogCQkgIHRlc3RfcmxzX2hvb2tzIFwKIAkJICB0ZXN0X3NobV9tcSBcCiAJ CSAgd29ya2VyX3NwaQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X3JidHJlZS9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9y YnRyZWUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNGU1M2U4NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9yYnRyZWUvTWFrZWZpbGUKQEAgLTAsMCArMSwyMSBAQAor IyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcmJ0cmVlL01ha2VmaWxlCisKK01P RFVMRV9iaWcgPSB0ZXN0X3JidHJlZQorT0JKUyA9IHRlc3QubyAkKFdJTjMy UkVTKQorUEdGSUxFREVTQyA9ICJ0ZXN0X3JidHJlZSAtIHJidHJlZSB0cmF2 ZXJzYWwgdGVzdGluZyIKKworRVhURU5TSU9OID0gdGVzdF9yYnRyZWUKK0RB VEEgPSB0ZXN0X3JidHJlZS0tMS4wLnNxbAorCitSRUdSRVNTID0gdGVzdF9y YnRyZWUKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBnX2NvbmZp ZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNs dWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9IHNyYy90ZXN0L21vZHVsZXMv dGVzdF9yYnRyZWUKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNs dWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNs dWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5tawor ZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9yYnRy ZWUvUkVBRE1FIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3JidHJlZS9SRUFE TUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBmNTg2 ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9y YnRyZWUvUkVBRE1FCkBAIC0wLDAgKzEsMjAgQEAKK3Rlc3RfcmJ0cmVlIGlz IGEgbW9kdWxlIHRlc3RzIGZvciBjaGVja2luZyB0aGUgY29ycmVjdG5lc3Mg b2YgYWxsIGtpbmRzIG9mCit0cmF2ZXJzYWwgb2YgcmVkLWJsYWNrIHRyZWUu IFJpZ2h0IG5vdyByYnRyZWUgaW4gcG9zdGdyZXMgaGFzIDQga2luZHMgb2YK K3RyYXZlcnNhbHM6IExlZnQtQ3VycmVudC1SaWdodCwgUmlnaHQtQ3VycmVu dC1MZWZ0LCBDdXJyZW50LUxlZnQtUmlnaHQgYW5kCitMZWZ0LVJpZ2h0LUN1 cnJlbnQuCisKK1RoaXMgZXh0ZW5zaW9uIGhhcyA0IGZ1bmN0aW9ucy4gRWFj aCBmdW5jdGlvbiBjaGVja3Mgb25lIHRyYXZlcnNhbC4KK1RoZSBjaGVja2lu ZyB0aGUgY29ycmVjdG5lc3Mgb2YgZmlyc3QgdHdvIHR5cGVzIGFyZSBiYXNl ZCBvbiB0aGUgZmFjdCB0aGF0CityZWQtYmxhY2sgdHJlZSBpcyBhIGJpbmFy eSBzZWFyY2ggdHJlZSwgc28gdGhlIGVsZW1lbnRzIHNob3VsZCBiZSBpdGVy YXRlZCBpbgoraW5jcmVhc2luZyhmb3IgTGVmdC1DdXJyZW50LVJpZ2h0KSBv ciBkZWNyZWFzaW5nKGZvciBSaWdodC1DdXJyZW50LUxlZnQpCitvcmRlci4K K0luIG9yZGVyIHRvIHZlcmlmeSBsYXN0IHR3byBzdHJhdGVnaWVzLCB3ZSB3 aWxsIGNoZWNrIHRoZSBzZXF1ZW5jZSBpZiBpdCBpcworY29ycmVjdCBvciBu b3QuIEZvciBnaXZlbiBwcmUtIG9yIHBvc3QtIG9yZGVyIHRyYXZlcnNpbmcg b2YgYmluYXJ5IHNlYXJjaCB0cmVlCitpdCBpcyBhbHdheXMgcG9zc2libGUg dG8gc2F5IGlzIGl0IGNvcnJlY3Qgb3Igbm90IGFuZCB0byByZWJ1aWxkIG9y aWdpbmFsIHRyZWUuCitUaGUgaWRlYSBpcyBiYXNlZCBvbiB0aGUgZmFjdCB0 aGF0IGluIHN1Y2ggdHJhdmVyc2FsIHNlcXVlbmNlIGlzIGFsd2F5cworcG9z c2libGUgdG8gZGV0ZXJtaW5lIGN1cnJlbnQgbm9kZSwgbGVmdCBzdWJ0cmVl IGFuZCByaWdodCBzdWJ0cmVlLgorCitBbHNvLCB0aGlzIG1vZHVsZSBpcyBj aGVja2luZyB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGZpbmQsIGRlbGV0ZSBh bmQgbGVmdG1vc3QKK29wZXJhdGlvbi4KKworVGhlc2UgdGVzdHMgYXJlIHBl cmZvcm1lZCBvbiByZWQtYmxhY2sgdHJlZXMgdGhhdCBzdG9yZSBpbnRlZ2Vy cy4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9yYnRyZWUv ZXhwZWN0ZWQvdGVzdF9yYnRyZWUub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X3JidHJlZS9leHBlY3RlZC90ZXN0X3JidHJlZS5vdXQKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIyM2U4MQotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9yYnRyZWUvZXhwZWN0 ZWQvdGVzdF9yYnRyZWUub3V0CkBAIC0wLDAgKzEsNyBAQAorQ1JFQVRFIEVY VEVOU0lPTiB0ZXN0X3JidHJlZTsKK1NFTEVDVCB0ZXN0cmJ0cmVlKDEwMDAw MCk7CisgdGVzdHJidHJlZSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93KQor CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcmJ0cmVlL2lu dF9yYnRyZWUuaCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9yYnRyZWUvaW50 X3JidHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjU3NzU0YmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfcmJ0cmVlL2ludF9yYnRyZWUuaApAQCAtMCwwICsxLDQ5IEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogaW50X3Ji dHJlZS5oCisgKgkJRGVmaW5pdGlvbnMgZm9yIGludGVnZXIgcmVkLWJsYWNr IHRyZWUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNywgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElG SUNBVElPTgorICoJCXNyYy90ZXN0L21vZHVsZXMvdGVzdF9yYnRyZWUvaW50 X3JidHJlZS5oCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisKKyNpZm5kZWYgSU5UX1JCVFJFRV9ICisjZGVmaW5lIElOVF9S QlRSRUVfSAorCisjaW5jbHVkZSAibGliL3JidHJlZS5oIgorCit0eXBlZGVm IHN0cnVjdCBJbnRSQlRyZWVOb2RlCit7CisJUkJOb2RlCQlyYm5vZGU7CisJ aW50CQkJa2V5OworCit9IEludFJCVHJlZU5vZGU7CisKK3N0YXRpYyBpbnQK K2NtcChjb25zdCBSQk5vZGUgKmEsIGNvbnN0IFJCTm9kZSAqYiwgdm9pZCAq YXJnKQoreworCWNvbnN0IEludFJCVHJlZU5vZGUgKmVhID0gKGNvbnN0IElu dFJCVHJlZU5vZGUgKikgYTsKKwljb25zdCBJbnRSQlRyZWVOb2RlICplYiA9 IChjb25zdCBJbnRSQlRyZWVOb2RlICopIGI7CisKKwlyZXR1cm4gZWEtPmtl eSAtIGViLT5rZXk7Cit9CisKK3N0YXRpYyBSQk5vZGUgKgorYWxsb2Modm9p ZCAqYXJnKQoreworCUludFJCVHJlZU5vZGUgKmVhOworCWVhID0gbWFsbG9j KHNpemVvZihJbnRSQlRyZWVOb2RlKSk7CisJcmV0dXJuIChSQk5vZGUgKikg ZWE7Cit9CisKK3N0YXRpYyB2b2lkCitmcihSQk5vZGUgKiBub2RlLCB2b2lk ICphcmcpCit7CisJZnJlZShub2RlKTsKK30KKworI2VuZGlmIC8qIElOVF9S QlRSRUVfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X3JidHJlZS9zcWwvdGVzdF9yYnRyZWUuc3FsIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X3JidHJlZS9zcWwvdGVzdF9yYnRyZWUuc3FsCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNjNkZjMKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcmJ0cmVlL3NxbC90ZXN0 X3JidHJlZS5zcWwKQEAgLTAsMCArMSwzIEBACitDUkVBVEUgRVhURU5TSU9O IHRlc3RfcmJ0cmVlOworCitTRUxFQ1QgdGVzdHJidHJlZSgxMDAwMDApOwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3JidHJlZS90ZXN0 LmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcmJ0cmVlL3Rlc3QuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDdlNjM3Ci0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3JidHJlZS90 ZXN0LmMKQEAgLTAsMCArMSw2MjUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiB0ZXN0LmMKKyAqCQlUZXN0IGNvcnJlY3Ru ZXNzIG9mIHJlZC1ibGFjayB0cmVlIHRyYXZlcnNhbHMuCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDEzLTIwMTcsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCQlzcmMv dGVzdC9tb2R1bGVzL3Rlc3RfcmJ0cmVlL3Rlc3QuYworICoKKyAqIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9z dGdyZXMuaCIKKworI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJtaXNj YWRtaW4uaCIKKyNpbmNsdWRlICJwZ3N0YXQuaCIKKworI2luY2x1ZGUgImlu dF9yYnRyZWUuaCIKKworUEdfTU9EVUxFX01BR0lDOworCitQR19GVU5DVElP Tl9JTkZPX1YxKHRlc3RyYnRyZWUpOworCisvKgorICogR2VuZXJhdGUgcGVy bXV0YXRpb24gZm9yIFswLi5zaXplLTFdIGludGVydmFsCisgKi8KK3N0YXRp YyBpbnQqCitHZXRQZXJtdXRhdGlvbihpbnQgc2l6ZSkKK3sKKwlpbnQJICAg KnBlcm11dGF0aW9uOworCWludAkJaTsKKworCXBlcm11dGF0aW9uID0gKGlu dCAqKXBhbGxvYyhzaXplICogc2l6ZW9mKGludCkpOworCisJcGVybXV0YXRp b25bMF0gPSAwOworCisJLyogR2VuZXJhdGluZyByYW5kb20gcGVybXV0YXRp b24gKi8KKwlmb3IgKGkgPSAxOyBpIDwgc2l6ZTsgaSsrKQorCXsKKwkJaW50 CQlqID0gcmFuZCgpICUgaTsKKworCQlwZXJtdXRhdGlvbltpXSA9IHBlcm11 dGF0aW9uW2pdOworCQlwZXJtdXRhdGlvbltqXSA9IGk7CisJfQorCisJcmV0 dXJuIHBlcm11dGF0aW9uOworfQorCisvKgorICogQ2hlY2tpbmcgdGhlIGNv cnJlY3RuZXNzIG9mIGxlZnQtcmlnaHQgdHJhdmVyc2FsLgorICogTGVmdC1y aWdodCB0cmF2ZXJzYWwgaXMgY29ycmVjdCBpZiBlbGVtZW50cyBhcmUKKyAq IGdpdmVuIGluIHRoZSBpbmNyZWFzaW5nIG9yZGVyLgorICovCitzdGF0aWMg dm9pZAordGVzdGxlZnRyaWdodChpbnQgc2l6ZSkKK3sKKwlJbnRSQlRyZWVO b2RlCSAgICpub2RlOworCVJCVHJlZQkJCSAgICp0cmVlID0gcmJfY3JlYXRl KHNpemVvZihJbnRSQlRyZWVOb2RlKSwgY21wLCBOVUxMLCBhbGxvYywgZnIs IE5VTEwpOworCVJCVHJlZUl0ZXJhdG9yCQlpdGVyOworCWludAkJCQkJaTsK KwlpbnQJCQkJCWxhc3RLZXkgPSAtMTsKKwlpbnQJCQkJICAgKnBlcm11dGF0 aW9uID0gR2V0UGVybXV0YXRpb24oc2l6ZSk7CisKKwkvKiBmaWxsaW5nIHRy ZWUgYnkgY29uc2VjdXRpdmUgbmF0dXJhbCBudW1iZXJzICovCisJZm9yIChp ID0gMDsgaSA8IHNpemU7IGkrKykKKwl7CisJCUludFJCVHJlZU5vZGUgbm9k ZTsKKwkJYm9vbCBpc05ldzsKKwkJbm9kZS5rZXkgPSBwZXJtdXRhdGlvbltp XTsKKwkJcmJfaW5zZXJ0KHRyZWUsIChSQk5vZGUgKikgJm5vZGUsICZpc05l dyk7CisJfQorCisJcmJfYmVnaW5faXRlcmF0ZSh0cmVlLCBMZWZ0UmlnaHRX YWxrLCAmaXRlcik7CisKKwkvKiBpdGVyYXRlIG92ZXIgdGhlIHRyZWUgKi8K Kwl3aGlsZSAoKG5vZGUgPSAoSW50UkJUcmVlTm9kZSAqKXJiX2l0ZXJhdGUo Jml0ZXIpKSAhPSBOVUxMKQorCXsKKwkJLyogY2hlY2tpbmcgdGhhdCBvcmRl ciBpcyBpbmNyZWFzaW5nICovCisJCWlmIChub2RlLT5rZXkgPD0gbGFzdEtl eSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVf V0FSTklORyksCisJCQkJCSBlcnJtc2coImxlZnQtcmlnaHQgd2FsayBnaXZl IGVsZW1lbnRzIG5vdCBpbiBzb3J0ZWQgb3JkZXIiKSkpOworCQlsYXN0S2V5 ID0gbm9kZS0+a2V5OworCX0KK30KKworLyoKKyAqIENoZWNraW5nIHRoZSBj b3JyZWN0bmVzcyBvZiByaWdodC1sZWZ0IHRyYXZlcnNhbC4KKyAqIFJpZ2h0 LWxlZnQgdHJhdmVyc2FsIGlzIGNvcnJlY3QgaWYgZWxlbWVudHMgYXJlCisg KiBnaXZlbiBpbiB0aGUgZGVjcmVhc2luZyBvcmRlci4KKyAqLworc3RhdGlj IHZvaWQKK3Rlc3RyaWdodGxlZnQoaW50IHNpemUpCit7CisJSW50UkJUcmVl Tm9kZQkgICAqbm9kZTsKKwlSQlRyZWUJCQkgICAqdHJlZSA9IHJiX2NyZWF0 ZShzaXplb2YoSW50UkJUcmVlTm9kZSksIGNtcCwgTlVMTCwgYWxsb2MsIGZy LCBOVUxMKTsKKwlSQlRyZWVJdGVyYXRvcgkJaXRlcjsKKwlpbnQJCQkJCWk7 CisJaW50CQkJCQlsYXN0S2V5ID0gc2l6ZSArIDE7CisJaW50CQkJCSAgICpw ZXJtdXRhdGlvbiA9IEdldFBlcm11dGF0aW9uKHNpemUpOworCisJLyogZmls bGluZyB0cmVlIGJ5IGNvbnNlY3V0aXZlIG5hdHVyYWwgbnVtYmVycyAqLwor CWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJeworCQlJbnRSQlRyZWVO b2RlIG5vZGU7CisJCWJvb2wgaXNOZXc7CisJCW5vZGUua2V5ID0gcGVybXV0 YXRpb25baV07CisJCXJiX2luc2VydCh0cmVlLCAoUkJOb2RlICopICZub2Rl LCAmaXNOZXcpOworCX0KKworCXJiX2JlZ2luX2l0ZXJhdGUodHJlZSwgUmln aHRMZWZ0V2FsaywgJml0ZXIpOworCisJLyogaXRlcmF0ZSBvdmVyIHRoZSB0 cmVlICovCisJd2hpbGUgKChub2RlID0gKEludFJCVHJlZU5vZGUgKilyYl9p dGVyYXRlKCZpdGVyKSkgIT0gTlVMTCkKKwl7CisJCS8qIGNoZWNraW5nIHRo YXQgb3JkZXIgaXMgZGVjcmVhc2luZyAqLworCQlpZiAobm9kZS0+a2V5ID49 IGxhc3RLZXkpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShF UlJDT0RFX1dBUk5JTkcpLAorCQkJCQkgZXJybXNnKCJyaWdodC1sZWZ0IHdh bGsgZ2l2ZSBlbGVtZW50cyBub3QgaW4gc29ydGVkIG9yZGVyIikpKTsKKwkJ bGFzdEtleSA9IG5vZGUtPmtleTsKKwl9Cit9CisKKy8qCisgKiBHZXR0aW5n IE5JTCBlbGVtZW50IG9mIHRoZSB0cmVlCisgKi8KK3N0YXRpYyBSQk5vZGUg KgorR2V0TmlsKFJCTm9kZSAqbm9kZSkKK3sKKwlpZiAoKHZvaWQgKilub2Rl ID09ICh2b2lkICopbm9kZS0+bGVmdCkKKwkJcmV0dXJuIG5vZGU7CisJcmV0 dXJuIEdldE5pbChub2RlLT5sZWZ0KTsKK30KKworLyoKKyAqIENoZWNraW5n IHRoZSBjb3JyZWN0bmVzcyBvZiBnaXZlbiBwcmVvcmRlciB0cmF2ZXJzYWwu CisgKiBGb3IgdGhlIHByZW9yZGVyIHRyYXZlcnNhbCB0aGUgcm9vdCBrZXkg aXMgYWx3YXlzIG9uIHRoZSBmaXJzdCBwb3NpdGlvbi4KKyAqIE5PVEU6IEJT VCBoYXMgb25seSBvbmUgcHJlb3JkZXIgdHJhdmVyc2FsIGFuZCB2aWNlIHZl cnNhLgorICogQW55IHByZW9yZGVyIHRyYXZlcnNhbCBjb3JyZXNwb25kcyB0 byBvbmx5IG9uZSBCU1QuCisgKiAgICAgZTEgZTIgZTMgLi4uIGVrIC4uLiBl bGVuCisgKiAgICAgXiAgXiAgICAgICAgIF4KKyAqICBoZWFkICBsZWZ0ICAg ICByaWdodAorICogZTEgPiBlaSBmb3IgYWxsIGkgaW4gWzI7IGsgLSAxXQor ICogZTEgPCBlaSBmb3IgYWxsIGkgaW4gW2s7IGxlbl0KKyAqLworc3RhdGlj IGJvb2wKK1ZhbGlkYXRlUHJlb3JkZXJJbnQoaW50ICogYXJyYXksIGludCBs ZW4pCit7CisJaW50CSAgICpsZWZ0ID0gYXJyYXkgKyAxOworCWludAkgICAq cmlnaHQgPSBsZWZ0OworCWludAkgICAqdG1wOworCisJaWYgKGxlbiA8PSAx KQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIHNlYXJjaGluZyBmb3IgdGhlIHJp Z2h0IHN1YnRyZWUgKi8KKwl3aGlsZSAocmlnaHQgPCBhcnJheSArIGxlbiAm JiAqcmlnaHQgPD0gKmFycmF5KQorCQlyaWdodCsrOworCisJLyogY2hlY2tp bmcgdGhhdCByaWdodCBzdWJ0cmVlIGhhcyBvbmx5IGVsZW1lbnRzCisJICog dGhhdCBhcmUgYmlnZ2VyIHRoYW4gY3VycmVudCAqLworCXRtcCA9IHJpZ2h0 OworCXdoaWxlICh0bXAgPCBhcnJheSArIGxlbikKKwl7CisJCWlmICgqdG1w IDw9ICphcnJheSkKKwkJCXJldHVybiBmYWxzZTsKKwkJdG1wKys7CisJfQor CisJLyogY2hlY2tpbmcgbGVmdCBzdWJ0cmVlIGFuZCByaWdodCBzdWJ0cmVl IHJlY3Vyc2l2ZWx5ICovCisJcmV0dXJuIFZhbGlkYXRlUHJlb3JkZXJJbnQo bGVmdCwgcmlnaHQgLSBsZWZ0KSAmJgorCQkgICBWYWxpZGF0ZVByZW9yZGVy SW50KHJpZ2h0LCBhcnJheSArIGxlbiAtIHJpZ2h0KTsKK30KKworLyogQ2hl Y2tpbmcgdHJhdmVyc2FsIGJ5IHRyYXZlcnNpbmcgdGhlIHRyZWUgKi8KK3N0 YXRpYyBib29sCitWYWxpZGF0ZVByZW9yZGVySW50VHJlZShJbnRSQlRyZWVO b2RlICpub2RlLCBpbnQgKmFycmF5LCBpbnQgbGVuLCB2b2lkICpudWxsKQor eworCWludAkgICAqcmlnaHQgPSBhcnJheTsKKwlpbnQJCXJpZ2h0VmFsdWU7 CisJaW50CQlsZWZ0VmFsdWU7CisJaW50CQlpOworCWlmIChub2RlID09IG51 bGwpCisJCXJldHVybiBsZW4gPT0gMDsKKwlpZiAobm9kZS0+a2V5ICE9ICph cnJheSkKKwkJcmV0dXJuIGZhbHNlOworCS8qIElmIG5vZGUgaGFzIGxlZnQg Y2hpbGQgLT4gY2hlY2sgaXQgKi8KKwlpZiAoKHZvaWQgKilub2RlLT5yYm5v ZGUubGVmdCAhPSBudWxsKQorCXsKKwkJbGVmdFZhbHVlID0gKChJbnRSQlRy ZWVOb2RlICopbm9kZS0+cmJub2RlLmxlZnQpLT5rZXk7CisJCWlmIChsZWZ0 VmFsdWUgIT0gYXJyYXlbMV0pCisJCQlyZXR1cm4gZmFsc2U7CisJCS8qIHNl YXJjaGluZyBmb3IgcmlnaHQgcGFydCAqLworCQlpZiAoKHZvaWQgKilub2Rl LT5yYm5vZGUucmlnaHQgIT0gbnVsbCkKKwkJeworCQkJcmlnaHRWYWx1ZSA9 ICgoSW50UkJUcmVlTm9kZSAqKW5vZGUtPnJibm9kZS5yaWdodCktPmtleTsK KwkJCWkgPSAwOworCQkJd2hpbGUgKGFycmF5W2ldICE9IHJpZ2h0VmFsdWUp CisJCQl7CisJCQkJaSsrOworCQkJCWlmIChpID4gbGVuKQorCQkJCQlyZXR1 cm4gZmFsc2U7CisJCQl9CisJCQlyaWdodCA9IGFycmF5ICsgaTsKKwkJfQor CQllbHNlCisJCXsKKwkJCXJpZ2h0ID0gYXJyYXkgKyBsZW47CisJCX0KKwkJ aWYgKCFWYWxpZGF0ZVByZW9yZGVySW50VHJlZSgoSW50UkJUcmVlTm9kZSAq KW5vZGUtPnJibm9kZS5sZWZ0LCBhcnJheSArIDEsIHJpZ2h0IC0gYXJyYXkg LSAxLCBudWxsKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBJZiBu b2RlIGhhcyByaWdodCBjaGlsZCAtPiBjaGVjayBpdCAqLworCWlmICgodm9p ZCAqKW5vZGUtPnJibm9kZS5yaWdodCAhPSBudWxsKQorCXsKKwkJcmlnaHRW YWx1ZSA9ICgoSW50UkJUcmVlTm9kZSAqKW5vZGUtPnJibm9kZS5yaWdodCkt PmtleTsKKwkJLyogaWYgbGVmdCBjaGlsZCBpcyBub3QgbnVsbCAtPiByaWdo dCBpcyBwcm9wZXJseSBzZXQsIG90aGVyd2lzZSBzZXQgaXQgbm93ICovCisJ CWlmIChyaWdodCA9PSBhcnJheSkKKwkJCXJpZ2h0Kys7CisJCWlmIChyaWdo dFZhbHVlICE9ICpyaWdodCkKKwkJCXJldHVybiBmYWxzZTsKKwkJcmV0dXJu IFZhbGlkYXRlUHJlb3JkZXJJbnRUcmVlKChJbnRSQlRyZWVOb2RlICopbm9k ZS0+cmJub2RlLnJpZ2h0LCByaWdodCwgYXJyYXkgKyBsZW4gLSByaWdodCwg bnVsbCk7CisJfQorCXJldHVybiB0cnVlOworfQorCisvKgorICogQ2hlY2tp bmcgdGhlIGNvcnJlY3RuZXNzIG9mIHByZW9yZGVyKGRpcmVjdCkgdHJhdmVy c2FsLgorICogRmlyc3RseSwgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBzZXF1 ZW5jZSBieSBpdHNlbGYgaXMgY2hlY2tlZC4KKyAqIFNlY29uZGx5LCBhIGNv cnJlc3BvbmRlbmNlIHRvIHRoZSB0cmVlIGlzIGNoZWNrZWQuCisgKi8KK3N0 YXRpYyB2b2lkCit0ZXN0ZGlyZWN0KGludCBzaXplKQoreworCUludFJCVHJl ZU5vZGUJICAgKm5vZGU7CisJUkJUcmVlCQkJICAgKnRyZWUgPSByYl9jcmVh dGUoc2l6ZW9mKEludFJCVHJlZU5vZGUpLCBjbXAsIE5VTEwsIGFsbG9jLCBm ciwgTlVMTCk7CisJUkJUcmVlSXRlcmF0b3IJCWl0ZXI7CisJdm9pZAkJCSAg ICpudWxsOworCWludAkJCQkgICAqZWxlbWVudHM7CisJaW50CQkJCQlpOwor CWludAkJCQkgICAqcGVybXV0YXRpb24gPSBHZXRQZXJtdXRhdGlvbihzaXpl KTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJeworCQlJbnRS QlRyZWVOb2RlCW5vZGU7CisJCWJvb2wJCQlpc05ldzsKKwkJbm9kZS5rZXkg PSBwZXJtdXRhdGlvbltpXTsKKwkJcmJfaW5zZXJ0KHRyZWUsIChSQk5vZGUg KikgJm5vZGUsICZpc05ldyk7CisJfQorCisJZWxlbWVudHMgPSAoaW50ICop IHBhbGxvYyhzaXplb2YoaW50KSAqIHNpemUpOworCXJiX2JlZ2luX2l0ZXJh dGUodHJlZSwgRGlyZWN0V2FsaywgJml0ZXIpOworCWkgPSAwOworCisJd2hp bGUgKChub2RlID0gKEludFJCVHJlZU5vZGUgKilyYl9pdGVyYXRlKCZpdGVy KSkgIT0gTlVMTCkKKwl7CisJCWVsZW1lbnRzW2krK10gPSBub2RlLT5rZXk7 CisJfQorCisJaWYgKGkgIT0gc2l6ZSB8fCAhVmFsaWRhdGVQcmVvcmRlcklu dChlbGVtZW50cywgc2l6ZSkpCisJeworCQlwZnJlZShlbGVtZW50cyk7CisJ CWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9XQVJOSU5H KSwKKwkJCQkgZXJybXNnKCJwcmVvcmRlciB3YWxrIGdpdmUgZWxlbWVudHMg bm90IGluIHRoZSBjb3JyZWN0IG9yZGVyIikpKTsKKworCX0KKworCW51bGwg PSAodm9pZCAqKUdldE5pbCgqKFJCTm9kZSAqKil0cmVlKTsKKwlpZiAoIVZh bGlkYXRlUHJlb3JkZXJJbnRUcmVlKCooSW50UkJUcmVlTm9kZSAqKil0cmVl LCBlbGVtZW50cywgc2l6ZSwgbnVsbCkpCisJeworCQlwZnJlZShlbGVtZW50 cyk7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9X QVJOSU5HKSwKKwkJCQkgZXJybXNnKCJwcmVvcmRlciB3YWxrIGdpdmUgZWxl bWVudHMgbm90IGluIHRoZSBjb3JyZWN0IG9yZGVyIGluIHRyZWUgY2hlY2si KSkpOworCisJfQorCisJcGZyZWUoZWxlbWVudHMpOworfQorCisvKgorICog Q2hlY2tpbmcgdGhlIGNvcnJlY3RuZXNzIG9mIGdpdmVuIHBvc3RvcmRlciB0 cmF2ZXJzYWwKKyAqIEZvciB0aGUgcG9zdG9yZGVyIHRyYXZlcnNhbCB0aGUg cm9vdCBrZXkgaXMgYWx3YXlzIHRoZSBsYXN0LgorICogTk9URTogQlNUIGhh cyBvbmx5IG9uZSBwb3N0b3JkZXIgdHJhdmVyc2FsIGFuZCB2aWNlIHZlcnNh CisgKiBBbnkgcG9zdG9yZGVyIHRyYXZlcnNhbCBjb3JyZXNwb25kcyB0byBv bmx5IG9uZSBCU1QKKyAqLworc3RhdGljIGJvb2wKK1ZhbGlkYXRlUG9zdG9y ZGVySW50KGludCAqIGFycmF5LCBpbnQgbGVuKQoreworCWludAkJICAgKmxl ZnQgPSBhcnJheTsKKwlpbnQJCSAgICpyaWdodCA9IGxlZnQ7CisJaW50CQkg ICAqdG1wOworCisJaWYgKGxlbiA8PSAxKQorCQlyZXR1cm4gdHJ1ZTsKKwor CS8qIHNlYXJjaGluZyBmb3IgdGhlIHJpZ2h0IHN1YnRyZWUgKi8KKwl3aGls ZSAocmlnaHQgPCBhcnJheSArIGxlbiAtIDEgJiYgKnJpZ2h0IDw9IGFycmF5 W2xlbiAtIDFdKQorCQlyaWdodCsrOworCisJLyogY2hlY2tpbmcgdGhhdCBy aWdodCBzdWJ0cmVlIGhhcyBvbmx5IGVsZW1lbnRzCisJICogdGhhdCBhcmUg YmlnZ2VyIHRoYW4gY3VycmVudCAqLworCXRtcCA9IHJpZ2h0OworCXdoaWxl ICh0bXAgPCBhcnJheSArIGxlbiAtIDEpCisJeworCQlpZiAoKnRtcCA8PSBh cnJheVtsZW4gLSAxXSkKKwkJCXJldHVybiBmYWxzZTsKKwkJdG1wKys7CisJ fQorCisJLyogQ2hlY2tpbmcgbGVmdCBzdWJ0cmVlIGFuZCByaWdodCBzdWJ0 cmVlIHJlY3Vyc2l2ZWx5ICovCisJcmV0dXJuIFZhbGlkYXRlUG9zdG9yZGVy SW50KGxlZnQsIHJpZ2h0IC0gbGVmdCkgJiYKKwkJICAgVmFsaWRhdGVQb3N0 b3JkZXJJbnQocmlnaHQsIGFycmF5ICsgbGVuIC0gcmlnaHQgLSAxKTsKK30K KworLyogQ2hlY2tpbmcgdHJhdmVyc2FsIGJ5IHRyYXZlcnNpbmcgdGhlIHRy ZWUgKi8KK3N0YXRpYyBib29sCitWYWxpZGF0ZVBvc3RvcmRlckludFRyZWUo SW50UkJUcmVlTm9kZSAqbm9kZSwgaW50ICphcnJheSwgaW50IGxlbiwgdm9p ZCAqbnVsbCwgaW50IGRlcHRoKQoreworCWludAkJICAgKnJpZ2h0ID0gYXJy YXk7CisJaW50CQkJbGVmdFZhbHVlOworCWludAkJCWk7CisJaWYgKG5vZGUg PT0gbnVsbCkKKwkJcmV0dXJuIGxlbiA9PSAwOworCWlmIChub2RlLT5rZXkg IT0gYXJyYXlbbGVuIC0gMV0pCisJCXJldHVybiBmYWxzZTsKKworCS8qIElm IG5vZGUgaGFzIGxlZnQgY2hpbGQgLT4gY2hlY2sgaXQgKi8KKwlpZiAoKHZv aWQgKilub2RlLT5yYm5vZGUubGVmdCAhPSBudWxsKQorCXsKKwkJbGVmdFZh bHVlID0gKChJbnRSQlRyZWVOb2RlICopbm9kZS0+cmJub2RlLmxlZnQpLT5r ZXk7CisJCS8qIHNlYXJjaGluZyBmb3IgcmlnaHQgcGFydCAqLworCQlpZiAo KHZvaWQgKilub2RlLT5yYm5vZGUucmlnaHQgIT0gbnVsbCkKKwkJeworCQkJ aSA9IDA7CisJCQl3aGlsZSAoYXJyYXlbaV0gIT0gbGVmdFZhbHVlKQorCQkJ eworCQkJCWkrKzsKKwkJCQlpZiAoaSA+PSBsZW4pCisJCQkJCXJldHVybiBm YWxzZTsKKwkJCX0KKwkJCXJpZ2h0ID0gYXJyYXkgKyBpICsgMTsKKwkJfQor CQllbHNlCisJCXsKKwkJCXJpZ2h0ID0gYXJyYXkgKyBsZW4gLSAxOworCQl9 CisJCWlmICghVmFsaWRhdGVQb3N0b3JkZXJJbnRUcmVlKChJbnRSQlRyZWVO b2RlICopbm9kZS0+cmJub2RlLmxlZnQsIGFycmF5LCByaWdodCAtIGFycmF5 LCBudWxsLCBkZXB0aCArIDEpKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwor CS8qIElmIG5vZGUgaGFzIHJpZ2h0IGNoaWxkIC0+IGNoZWNrIGl0ICovCisJ aWYgKCh2b2lkICopbm9kZS0+cmJub2RlLnJpZ2h0ICE9IG51bGwpCisJewor CQlyZXR1cm4gVmFsaWRhdGVQb3N0b3JkZXJJbnRUcmVlKChJbnRSQlRyZWVO b2RlICopbm9kZS0+cmJub2RlLnJpZ2h0LCByaWdodCwgYXJyYXkgKyBsZW4g LSByaWdodCAtIDEsIG51bGwsIGRlcHRoICsgMSk7CisJfQorCXJldHVybiB0 cnVlOworfQorCisvKgorICogQ2hlY2tpbmcgdGhlIGNvcnJlY3RuZXNzIG9m IHBvc29yZGVyKGludmVydGVkKSB0cmF2ZXJzYWwuCisgKiBGaXJzdGx5LCB0 aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHNlcXVlbmNlIGJ5IGl0c2VsZiBpcyBj aGVja2VkLgorICogU2Vjb25kbHksIGEgY29ycmVzcG9uZGVuY2UgdG8gdGhl IHRyZWUgaXMgY2hlY2tlZC4KKyAqLworc3RhdGljIHZvaWQKK3Rlc3RpbnZl cnRlZChpbnQgc2l6ZSkKK3sKKwlJbnRSQlRyZWVOb2RlCSAgICpub2RlOwor CVJCVHJlZQkJCSAgICp0cmVlID0gcmJfY3JlYXRlKHNpemVvZihJbnRSQlRy ZWVOb2RlKSwgY21wLCBOVUxMLCBhbGxvYywgZnIsIE5VTEwpOworCVJCVHJl ZUl0ZXJhdG9yCQlpdGVyOworCXZvaWQJCQkgICAqbnVsbDsKKwlpbnQJCQkJ ICAgKmVsZW1lbnRzOworCWludAkJCQkJaTsKKwlpbnQJCQkJICAgKnBlcm11 dGF0aW9uID0gR2V0UGVybXV0YXRpb24oc2l6ZSk7CisKKwlmb3IgKGkgPSAw OyBpIDwgc2l6ZTsgaSsrKQorCXsKKwkJSW50UkJUcmVlTm9kZSBub2RlOwor CQlib29sIGlzTmV3OworCQlub2RlLmtleSA9IHBlcm11dGF0aW9uW2ldOwor CQlyYl9pbnNlcnQodHJlZSwgKFJCTm9kZSAqKSAmbm9kZSwgJmlzTmV3KTsK Kwl9CisKKwllbGVtZW50cyA9IChpbnQgKikgcGFsbG9jKHNpemVvZihpbnQp ICogc2l6ZSk7CisJcmJfYmVnaW5faXRlcmF0ZSh0cmVlLCBJbnZlcnRlZFdh bGssICZpdGVyKTsKKwlpID0gMDsKKworCXdoaWxlICgobm9kZSA9IChJbnRS QlRyZWVOb2RlICopcmJfaXRlcmF0ZSgmaXRlcikpICE9IE5VTEwpCisJewor CQllbGVtZW50c1tpKytdID0gbm9kZS0+a2V5OworCX0KKworCisJaWYgKGkg IT0gc2l6ZSB8fCAhVmFsaWRhdGVQb3N0b3JkZXJJbnQoZWxlbWVudHMsIHNp emUpKQorCXsKKwkJcGZyZWUoZWxlbWVudHMpOworCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJjb2RlKEVSUkNPREVfV0FSTklORyksCisJCQkJIGVycm1z ZygicG9zdG9yZGVyIHdhbGsgZ2l2ZSBlbGVtZW50cyBub3QgaW4gdGhlIGNv cnJlY3Qgb3JkZXIiKSkpOworCisJfQorCisJbnVsbCA9ICh2b2lkICopR2V0 TmlsKCooUkJOb2RlICoqKXRyZWUpOworCWlmICghVmFsaWRhdGVQb3N0b3Jk ZXJJbnRUcmVlKCooSW50UkJUcmVlTm9kZSAqKil0cmVlLCBlbGVtZW50cywg c2l6ZSwgbnVsbCwgMCkpCisJeworCQlwZnJlZShlbGVtZW50cyk7CisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9XQVJOSU5HKSwK KwkJCQkgZXJybXNnKCJwb3N0b3JkZXIgd2FsayBnaXZlIGVsZW1lbnRzIG5v dCBpbiB0aGUgY29ycmVjdCBvcmRlciBpbiB0cmVlIGNoZWNrIikpKTsKKwor CX0KKworCXBmcmVlKGVsZW1lbnRzKTsKK30KKworLyoKKyAqIENoZWNraW5n IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgcGdfZmluZCBvcGVyYXRpb24gYnkg aW5zZXJ0aW5nIGFuZCBkZWxldGluZworICogaW50ZWdlcnMuCisgKi8KK3N0 YXRpYyB2b2lkCit0ZXN0ZmluZChpbnQgc2l6ZSkKK3sKKwlSQlRyZWUJCQkg ICAqdHJlZSA9IHJiX2NyZWF0ZShzaXplb2YoSW50UkJUcmVlTm9kZSksIGNt cCwgTlVMTCwgYWxsb2MsIGZyLCBOVUxMKTsKKwlpbnQJCQkJCWk7CisJaW50 CQkJCSAgICpwZXJtdXRhdGlvbiA9IEdldFBlcm11dGF0aW9uKHNpemUpOwor CisJLyogSW5zZXJ0IGV2ZW4gaW50ZWdlcnMgZnJvbSAwIHRvIDIgKiBzaXpl ICovCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwl7CisJCUludFJC VHJlZU5vZGUgbm9kZTsKKwkJYm9vbCBpc05ldzsKKwkJbm9kZS5rZXkgPSAy ICogcGVybXV0YXRpb25baV07CisJCXJiX2luc2VydCh0cmVlLCAoUkJOb2Rl ICopICZub2RlLCAmaXNOZXcpOworCX0KKworCS8qIENoZWNraW5nIHRoYXQg YWxsIGluc2VydGVkIGVsZW1lbnRzIGNhbiBiZSBmb3VuZCAqLworCWZvciAo aSA9IDA7IGkgPCBzaXplOyBpKyspCisJeworCQlJbnRSQlRyZWVOb2RlCW5v ZGU7CisJCUludFJCVHJlZU5vZGUgICAqcmVzdWx0Tm9kZTsKKwkJbm9kZS5r ZXkgPSAyICogaTsKKwkJcmVzdWx0Tm9kZSA9IChJbnRSQlRyZWVOb2RlICop cmJfZmluZCh0cmVlLCAoUkJOb2RlICopJm5vZGUpOworCQlpZiAocmVzdWx0 Tm9kZSA9PSBOVUxMKQorCQl7CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfV0FSTklORyksCisJCQkJIGVycm1zZygiaW5zZXJ0 ZWQgZWxlbWVudCB3YXMgbm90IGZvdW5kIikpKTsKKwkJfQorCQlpZiAobm9k ZS5rZXkgIT0gcmVzdWx0Tm9kZS0+a2V5KQorCQl7CisJCQllcmVwb3J0KEVS Uk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfV0FSTklORyksCisJCQkJIGVy cm1zZygiZmluZCBvcGVyYXRpb24gaW4gcmJ0cmVlIGdhdmUgd3JvbmcgcmVz dWx0IikpKTsKKwkJfQorCX0KKwkvKiBDaGVja2luZyB0aGF0IG5vdCBpbnNl cnRlZCBlbGVtZW50cyBjYW4gbm90IGJlIGZvdW5kICovCisJZm9yIChpID0g LTE7IGkgPCBzaXplICsgMTA7IGkgKz0gMikKKwl7CisJCUludFJCVHJlZU5v ZGUJbm9kZTsKKwkJSW50UkJUcmVlTm9kZSAgICpyZXN1bHROb2RlOworCQlu b2RlLmtleSA9IGk7CisJCXJlc3VsdE5vZGUgPSAoSW50UkJUcmVlTm9kZSAq KXJiX2ZpbmQodHJlZSwgKFJCTm9kZSAqKSZub2RlKTsKKwkJaWYgKHJlc3Vs dE5vZGUgIT0gTlVMTCkKKwkJeworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX1dBUk5JTkcpLAorCQkJCSBlcnJtc2coIm5vdCBp bnNlcnRlZCBlbGVtZW50IHdhcyBmb3VuZCIpKSk7CisJCX0KKwl9Cit9CisK Ky8qCisgKiBDaGVja2luZyB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHBnX2xl ZnRtb3N0IG9wZXJhdGlvbi4gVGhpcyBvcGVyYXRpb24gc2hvdWxkCisgKiBh bHdheXMgcmV0dXJuIHRoZSBzbWFsbGVzdCBlbGVtZW50IG9mIHRoZSB0cmVl LgorICovCitzdGF0aWMgdm9pZAordGVzdGxlZnRtb3N0KGludCBzaXplKQor eworCUludFJCVHJlZU5vZGUJICAgKnJlc3VsdDsKKwlSQlRyZWUJCQkgICAq dHJlZSA9IHJiX2NyZWF0ZShzaXplb2YoSW50UkJUcmVlTm9kZSksIGNtcCwg TlVMTCwgYWxsb2MsIGZyLCBOVUxMKTsKKwlpbnQJCQkJCWk7CisJaW50CQkJ CSAgICpwZXJtdXRhdGlvbiA9IEdldFBlcm11dGF0aW9uKHNpemUpOworCisJ LyogQ2hlY2tpbmcgdGhhdCBlbXB0eSB0cmVlIGhhcyBubyBsZWZ0bW9zdCBl bGVtZW50ICovCisJaWYgKHJiX2xlZnRtb3N0KHRyZWUpICE9IE5VTEwpCisJ eworCQllcmVwb3J0KEVSUk9SLAorCQkJKGVycmNvZGUoRVJSQ09ERV9XQVJO SU5HKSwKKwkJCSBlcnJtc2coImxlZnRtb3N0IG5vZGUgb2YgZW1wdHkgdHJl ZSBpcyBub3QgTlVMTCIpKSk7CisJfQorCisJLyogUG9wdWxhdGluZyB0aGUg dHJlZSBieSBpbnRlZ2VycyAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBp KyspCisJeworCQlJbnRSQlRyZWVOb2RlIG5vZGU7CisJCWJvb2wgaXNOZXc7 CisJCW5vZGUua2V5ID0gcGVybXV0YXRpb25baV07CisJCXJiX2luc2VydCh0 cmVlLCAoUkJOb2RlICopICZub2RlLCAmaXNOZXcpOworCX0KKworCS8qIENo ZWNraW5nIHRoYXQgbGVmdG1vc3QgZWxlbWVudCBpcyB0aGUgc21hbGxlc3Qg b25lICovCisJcmVzdWx0ID0gKEludFJCVHJlZU5vZGUgKilyYl9sZWZ0bW9z dCh0cmVlKTsKKwlpZiAoMCAhPSByZXN1bHQtPmtleSkKKwl7CisJCWVyZXBv cnQoRVJST1IsCisJCQkoZXJyY29kZShFUlJDT0RFX1dBUk5JTkcpLAorCQkJ IGVycm1zZygibGVmdG1vc3Qgb3BlcmF0aW9uIGluIHJidHJlZSBnYXZlIHdy b25nIHJlc3VsdCIpKSk7CisJfQorfQorCisvKgorICogQ2hlY2tpbmcgdGhl IGNvcnJlY3RuZXNzIG9mIHRoZSBwZ19kZWxldGUgb3BlcmF0aW9uLgorICov CitzdGF0aWMgdm9pZAordGVzdGRlbGV0ZShpbnQgc2l6ZSwgaW50IGRlbHNp emUpCit7CisJUkJUcmVlCQkJICAgKnRyZWUgPSByYl9jcmVhdGUoc2l6ZW9m KEludFJCVHJlZU5vZGUpLCBjbXAsIE5VTEwsIGFsbG9jLCBmciwgTlVMTCk7 CisJaW50CQkJCQlpLCBqOworCWludAkJCQkgICAqZGVsZXRlSWRzOworCWJv b2wJCQkgICAqY2hvc2VuOworCWludAkJCQkgICAqcGVybXV0YXRpb24gPSBH ZXRQZXJtdXRhdGlvbihzaXplKTsKKworCWRlbGV0ZUlkcyA9IChpbnQgKilw YWxsb2MoZGVsc2l6ZSAqIHNpemVvZihpbnQpKTsKKwljaG9zZW4gPSAoYm9v bCAqKXBhbGxvYyhzaXplICogc2l6ZW9mKGJvb2wpKTsKKworCWZvciAoaSA9 IDA7IGkgPCBzaXplOyBpKyspCisJCWNob3NlbltpXSA9IGZhbHNlOworCisJ LyogQ2hvb3NpbmcgdW5pcXVlIGlkcyB0byBkZWxldGUgKi8KKwlmb3IgKGkg PSAwOyBpIDwgZGVsc2l6ZTsgaSsrKQorCXsKKwkJaW50CQlrID0gcmFuZCgp ICUgc2l6ZTsKKwkJd2hpbGUgKGNob3NlbltrXSkKKwkJCWsgPSAoayArIDEp ICUgc2l6ZTsKKwkJZGVsZXRlSWRzW2ldID0gazsKKwkJY2hvc2VuW2tdID0g dHJ1ZTsKKwl9CisKKwkvKiBQb3B1bGF0aW5nIHRoZSB0cmVlIGJ5IGludGVn ZXJzICovCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwl7CisJCUlu dFJCVHJlZU5vZGUgbm9kZTsKKwkJYm9vbCBpc05ldzsKKwkJbm9kZS5rZXkg PSBwZXJtdXRhdGlvbltpXTsKKwkJcmJfaW5zZXJ0KHRyZWUsIChSQk5vZGUg KikgJm5vZGUsICZpc05ldyk7CisJfQorCisJLyogRGVsZXRpbmcgZWxlbWVu dHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGVsc2l6ZTsgaSsrKQorCXsKKwkJ SW50UkJUcmVlTm9kZQkJZmluZDsKKwkJSW50UkJUcmVlTm9kZQkgICAqbm9k ZTsKKworCQlmaW5kLmtleSA9IGRlbGV0ZUlkc1tpXTsKKwkJLyogSW4gb3Jk ZXIgbm9kZSB0byBiZSBkZWxldGVkIGlzIHNob3VsZCBiZSB0YWtlbiBieSBw Z19maW5kICovCisJCW5vZGUgPSAoSW50UkJUcmVlTm9kZSAqKXJiX2ZpbmQo dHJlZSwgKFJCTm9kZSAqKSZmaW5kKTsKKwkJaWYgKG5vZGUgPT0gTlVMTCkK KwkJeworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X1dBUk5JTkcpLAorCQkJCSBlcnJtc2coImluc2VydGVkIGVsZW1lbnQgd2Fz IG5vdCBmb3VuZCBkdXJpbmcgZGVsZXRpbmciKSkpOworCQl9CisJCXJiX2Rl bGV0ZSh0cmVlLCAoUkJOb2RlICopbm9kZSk7CisJfQorCisJLyogQ2hlY2tp bmcgdGhhdCBkZWxldGVkIGVsZW1lbnRzIGFyZSBkZWxldGVkICovCisJZm9y IChpID0gMDsgaSA8IHNpemU7IGkrKykKKwl7CisJCWJvb2wJCQkJaXNEZWxl dGVkID0gZmFsc2U7CisJCUludFJCVHJlZU5vZGUJICAgKnJlc3VsdDsKKwkJ SW50UkJUcmVlTm9kZQkJbm9kZTsKKworCQlmb3IgKGogPSAwOyBqIDwgZGVs c2l6ZSAmJiAhaXNEZWxldGVkOyBqKyspCisJCQlpZiAoaSA9PSBkZWxldGVJ ZHNbal0pCisJCQkJaXNEZWxldGVkID0gdHJ1ZTsKKworCQlub2RlLmtleSA9 IGk7CisJCXJlc3VsdCA9IChJbnRSQlRyZWVOb2RlICopcmJfZmluZCh0cmVl LCAoUkJOb2RlICopJm5vZGUpOworCQkvKiBEZWxldGUgZWxlbWVudCBzaG91 bGQgYmUgYWJzZW50ICovCisJCWlmIChpc0RlbGV0ZWQgJiYgcmVzdWx0ICE9 IE5VTEwpCisJCXsKKwkJCXBmcmVlKGRlbGV0ZUlkcyk7CisJCQllcmVwb3J0 KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfV0FSTklORyksCisJCQkJ IGVycm1zZygiZGVsZXRlZCBlbGVtZW50IHByZXNlbnRzIGluIHRoZSByYnRy ZWUiKSkpOworCQl9CisJCWlmICghaXNEZWxldGVkICYmIHJlc3VsdCA9PSAw KQorCQl7CisJCQlwZnJlZShkZWxldGVJZHMpOworCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1dBUk5JTkcpLAorCQkJCSBlcnJt c2coImVsZW1lbnQgc2hvdWxkIHByZXNlbnRzIGluIHRoZSByYnRyZWUiKSkp OworCQl9CisJCS8qIEFsaXZlIGVsZW1lbnQgc2hvdWxkIGJlIHByZXNlbnRl ZCAqLworCQlpZiAoIWlzRGVsZXRlZCAmJiByZXN1bHQtPmtleSAhPSBpKQor CQl7CisJCQlwZnJlZShkZWxldGVJZHMpOworCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX1dBUk5JTkcpLAorCQkJCSBlcnJtc2co ImRlbGV0ZSBvcGVyYXRpb24gY29ycnVwdGVkIHJidHJlZSIpKSk7CisJCX0K Kwl9CisKKwlwZnJlZShkZWxldGVJZHMpOworfQorCitEYXR1bQordGVzdHJi dHJlZShQR19GVU5DVElPTl9BUkdTKQoreworCWludAkJc2l6ZSA9IFBHX0dF VEFSR19JTlQzMigwKTsKKwl0ZXN0bGVmdHJpZ2h0KHNpemUpOworCXRlc3Ry aWdodGxlZnQoc2l6ZSk7CisJdGVzdGRpcmVjdChzaXplKTsKKwl0ZXN0aW52 ZXJ0ZWQoc2l6ZSk7CisJdGVzdGZpbmQoc2l6ZSk7CisJdGVzdGxlZnRtb3N0 KHNpemUpOworCXRlc3RkZWxldGUoc2l6ZSwgc2l6ZSAvIDEwKTsKKwlQR19S RVRVUk5fVk9JRCgpOworfQorCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfcmJ0cmVlL3Rlc3RfcmJ0cmVlLS0xLjAuc3FsIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X3JidHJlZS90ZXN0X3JidHJlZS0tMS4wLnNxbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTQ5ODY3Ci0t LSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3JidHJl ZS90ZXN0X3JidHJlZS0tMS4wLnNxbApAQCAtMCwwICsxLDggQEAKKy8qIHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9yYnRyZWUvdGVzdF9yYnRyZWUtLTEuMC5z cWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4g cHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xlY2hv IFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X3JidHJlZSIgdG8gbG9hZCB0 aGlzIGZpbGUuIFxxdWl0CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0cmJ0cmVl KHNpemUgSU5URUdFUikKKwlSRVRVUk5TIHBnX2NhdGFsb2cudm9pZCBTVFJJ Q1QKKwlBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3JidHJlZS90ZXN0X3JidHJl ZS5jb250cm9sIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3JidHJlZS90ZXN0 X3JidHJlZS5jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjg5MGY4YTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfcmJ0cmVlL3Rlc3RfcmJ0cmVlLmNvbnRyb2wKQEAgLTAs MCArMSw0IEBACitjb21tZW50ID0gJ1Rlc3QgcmJ0cmVlIHRyYXZlcnNhbCcK K2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAn JGxpYmRpci90ZXN0X3JidHJlZScKK3JlbG9jYXRhYmxlID0gdHJ1ZQo= --=_76897c37dcdfbb7bbc2158c8c9d19c7e Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --=_76897c37dcdfbb7bbc2158c8c9d19c7e--