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 1tqBit-000rlq-7m for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Mar 2025 13:57:16 +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 1tqBir-00CYrO-4O for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Mar 2025 13:57:13 +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.94.2) (envelope-from ) id 1tqBiq-00CYdd-DL for pgsql-hackers@lists.postgresql.org; Thu, 06 Mar 2025 13:57:12 +0000 Received: from smtp.outgoing.loopia.se ([93.188.3.37]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1tqBim-001JMh-0E for pgsql-hackers@postgresql.org; Thu, 06 Mar 2025 13:57:11 +0000 Received: from s807.loopia.se (localhost [127.0.0.1]) by s807.loopia.se (Postfix) with ESMTP id B378429A640 for ; Thu, 06 Mar 2025 14:57:03 +0100 (CET) Received: from s934.loopia.se (unknown [172.22.191.6]) by s807.loopia.se (Postfix) with ESMTP id A4CBE29BB91; Thu, 06 Mar 2025 14:57:03 +0100 (CET) Received: from s898.loopia.se (unknown [172.22.191.5]) by s934.loopia.se (Postfix) with ESMTP id A32FD7CEA65; Thu, 06 Mar 2025 14:57:03 +0100 (CET) X-Virus-Scanned: amavisd-new at amavis.loopia.se X-Spam-Flag: NO X-Spam-Score: -1.2 X-Spam-Level: X-Spam-Status: No, score=-1.2 tagged_above=-999 required=6.2 tests=[ALL_TRUSTED=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1] autolearn=disabled Authentication-Results: s898.loopia.se (amavisd-new); dkim=pass (2048-bit key) header.d=proxel.se Received: from s979.loopia.se ([172.22.191.6]) by s898.loopia.se (s898.loopia.se [172.22.190.17]) (amavisd-new, port 10024) with LMTP id TJWdJDmutH6O; Thu, 6 Mar 2025 14:57:02 +0100 (CET) X-Loopia-Auth: user X-Loopia-User: andreas@proxel.se X-Loopia-Originating-IP: 158.174.129.34 Received: from [192.168.0.189] (h-158-174-129-34.NA.cust.bahnhof.se [158.174.129.34]) (Authenticated sender: andreas@proxel.se) by s979.loopia.se (Postfix) with ESMTPSA id 22D1E10BC499; Thu, 06 Mar 2025 14:57:02 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proxel.se; s=loopiadkim1707418970; t=1741269422; bh=48xZLR13dk1yLPT3pJ5wLr2UAT+9AB/OVnyG1hWQW6I=; h=Date:Subject:To:References:From:In-Reply-To; b=jvtnVqMW13PlN5DxCYIbFCLyJCbSyB7JHvn/1yHVllkqTX8bG+72PcVYA8+EdgqVJ pjPJ6pUg7k1SPcCX/5PVmr60KKu59hRLPemPkxNcHiOIAEslQLFvSbCufCfXYfO8hq +Ey+UhsEzudV5bb4XKXlbr8z5omENBOwav7uE7v/gjzm3NBLFVAzJ86D9PEA5Db7vQ 2qfavCjYnbOjFhqSKFH49eEq59fH4Hp0oindp9acfvqsAEZBrPYk/5GDS0tWPPIqx6 5bwfIdCLoIzAwQ1GahRlhrMy5ETCH03pIp1hODT/CdFsMo614dXag7gQ+7C6eyi0Gu Z+SE/PXh1z9fg== Content-Type: multipart/mixed; boundary="------------ecZ0HxMMhBmJHWlb7Ry2Ibkl" Message-ID: Date: Thu, 6 Mar 2025 14:57:01 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: dblink query interruptibility To: Noah Misch , pgsql-hackers@postgresql.org References: <20231122012945.74@rfd.leadboat.com> Content-Language: en-US From: Andreas Karlsson In-Reply-To: <20231122012945.74@rfd.leadboat.com> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------ecZ0HxMMhBmJHWlb7Ry2Ibkl Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 11/22/23 2:29 AM, Noah Misch wrote: > Something as simple as the following doesn't respond to cancellation. In > v15+, any DROP DATABASE will hang as long as it's running: Hi, One of our customers ran into this bug when upgrading from PostgreSQL 14 to PostgreSQL 16. Your commit[1] fixed this issue in PostgreSQL 17 but the bugfix was not backported with the explanation below. > Code inspection identified the bug at least thirteen years ago, but user complaints have not appeared. Hence, no back-patch for now. But that is as far as I can tell not the case because at least for CREATE DATABASE the bug was introduced in a commit[2] in PostgeSQL 15. And now that we actually have a user complaint what do you think about backporting the fix? The patch seems small and relatively safe to backport and the functions have had no bugfixes as far as I could see. And I did a quick git cherry-pick myself on top of PG 16 (see attached patch) and the only conflict was related to the introduction of custom wait events which was easy to fix. Here is a small snippet which reproduces the bug. It hangs reliably on PostgreSQL 15 and 16, but not 14, 17 or HEAD. CREATE EXTENSION dblink; CREATE FUNCTION f(text, int, text) RETURNS VOID LANGUAGE plpgsql AS $$ BEGIN PERFORM dblink_connect(format('host=%s port=%s user=%s dbname=postgres', $1, $2, $3)); RAISE NOTICE 'dblink connected!'; PERFORM dblink_exec('DROP DATABASE test'); RAISE NOTICE 'Database dropped!'; PERFORM dblink_disconnect(); RAISE NOTICE 'dblink disconnected!'; END $$; CREATE DATABASE test; SELECT f(:'HOST', :PORT, :'USER'); Andreas 1. https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=d3c5f37dd543498cc7c678815d3921823beec9e9 2. https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=e2f65f42555ff531c6d7c8f151526b4ef7c016f8 --------------ecZ0HxMMhBmJHWlb7Ry2Ibkl Content-Type: text/x-patch; charset=UTF-8; name="0001-Make-dblink-interruptible-via-new-libpqsrv-APIs.patch" Content-Disposition: attachment; filename*0="0001-Make-dblink-interruptible-via-new-libpqsrv-APIs.patch" Content-Transfer-Encoding: base64 RnJvbSA5ZmEzYWY0NWRjZmM2YTI3ZDNkMmFhNWFlMjk4MTJiYmQ0NzQwNzUxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FoIE1pc2NoIDxub2FoQGxlYWRib2F0LmNvbT4K RGF0ZTogTW9uLCA4IEphbiAyMDI0IDExOjM5OjU2IC0wODAwClN1YmplY3Q6IFtQQVRDSF0g TWFrZSBkYmxpbmsgaW50ZXJydXB0aWJsZSwgdmlhIG5ldyBsaWJwcXNydiBBUElzLgoKVGhp cyByZXBsYWNlcyBkYmxpbmsncyBibG9ja2luZyBsaWJwcSBjYWxscywgYWxsb3dpbmcgY2Fu Y2VsbGF0aW9uIGFuZAphbGxvd2luZyBEUk9QIERBVEFCQVNFIChvZiBhIGRhdGFiYXNlIG5v dCBpbnZvbHZlZCBpbiB0aGUgcXVlcnkpLiAgQXBhcnQKZnJvbSBleHBsaWNpdCBkYmxpbmtf Y2FuY2VsX3F1ZXJ5KCkgY2FsbHMsIGRibGluayBzdGlsbCBkb2Vzbid0IGNhbmNlbAp0aGUg cmVtb3RlIHNpZGUuICBUaGUgcmVwbGFjZW1lbnQgZm9yIHRoZSBibG9ja2luZyBjYWxscyBj b25zaXN0cyBvZgpuZXcsIGdlbmVyYWwtcHVycG9zZSBxdWVyeSBleGVjdXRpb24gd3JhcHBl cnMgaW4gdGhlIGxpYnBxc3J2IGZhY2lsaXR5LgpPdXQtb2YtdHJlZSBleHRlbnNpb25zIHNo b3VsZCBhZG9wdCB0aGVzZS4gIFVzZSB0aGVtIGluIHBvc3RncmVzX2ZkdywKcmVwbGFjaW5n IGEgbG9jYWwgaW1wbGVtZW50YXRpb24gZnJvbSB3aGljaCB0aGUgbGlicHFzcnYgaW1wbGVt ZW50YXRpb24KZGVyaXZlcy4gIFRoaXMgaXMgYSBidWcgZml4IGZvciBkYmxpbmsuICBDb2Rl IGluc3BlY3Rpb24gaWRlbnRpZmllZCB0aGUKYnVnIGF0IGxlYXN0IHRoaXJ0ZWVuIHllYXJz IGFnbywgYnV0IHVzZXIgY29tcGxhaW50cyBoYXZlIG5vdCBhcHBlYXJlZC4KSGVuY2UsIG5v IGJhY2stcGF0Y2ggZm9yIG5vdy4KCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20v MjAyMzExMjIwMTI5NDUuNzRAcmZkLmxlYWRib2F0LmNvbQotLS0KIGNvbnRyaWIvZGJsaW5r L2RibGluay5jICAgICAgICAgICAgICAgICAgICAgICB8ICAyNCArKy0tCiBjb250cmliL3Bv c3RncmVzX2Zkdy9jb25uZWN0aW9uLmMgICAgICAgICAgICAgfCAgODAgKystLS0tLS0tLS0K IGNvbnRyaWIvcG9zdGdyZXNfZmR3L2RlcGFyc2UuYyAgICAgICAgICAgICAgICB8ICAgMiAr LQogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgICAgICAgICAgIHwgIDEw ICstCiBjb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuaCAgICAgICAgICAgfCAg IDIgKy0KIC4uLi9saWJwcXdhbHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYyAgICAgICB8 ICAgOSArLQogc3JjL2luY2x1ZGUvbGlicHEvbGlicHEtYmUtZmUtaGVscGVycy5oICAgICAg IHwgMTI3ICsrKysrKysrKysrKysrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCAxNjMgaW5zZXJ0 aW9ucygrKSwgOTEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9kYmxpbmsv ZGJsaW5rLmMgYi9jb250cmliL2RibGluay9kYmxpbmsuYwppbmRleCAxZmY2NWQxZTUyMS4u YmQ0MDlkN2JmMWIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvZGJsaW5rL2RibGluay5jCisrKyBi L2NvbnRyaWIvZGJsaW5rL2RibGluay5jCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAi dXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1 dGlscy92YXJsZW5hLmgiCisjaW5jbHVkZSAidXRpbHMvd2FpdF9ldmVudC5oIgogCiBQR19N T0RVTEVfTUFHSUM7CiAKQEAgLTQzMCw3ICs0MzEsNyBAQCBkYmxpbmtfb3BlbihQR19GVU5D VElPTl9BUkdTKQogCS8qIElmIHdlIGFyZSBub3QgaW4gYSB0cmFuc2FjdGlvbiwgc3RhcnQg b25lICovCiAJaWYgKFBRdHJhbnNhY3Rpb25TdGF0dXMoY29ubikgPT0gUFFUUkFOU19JRExF KQogCXsKLQkJcmVzID0gUFFleGVjKGNvbm4sICJCRUdJTiIpOworCQlyZXMgPSBsaWJwcXNy dl9leGVjKGNvbm4sICJCRUdJTiIsIFBHX1dBSVRfRVhURU5TSU9OKTsKIAkJaWYgKFBRcmVz dWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKIAkJCWRibGlua19yZXNfaW50 ZXJuYWxlcnJvcihjb25uLCByZXMsICJiZWdpbiBlcnJvciIpOwogCQlQUWNsZWFyKHJlcyk7 CkBAIC00NDksNyArNDUwLDcgQEAgZGJsaW5rX29wZW4oUEdfRlVOQ1RJT05fQVJHUykKIAkJ KHJjb25uLT5vcGVuQ3Vyc29yQ291bnQpKys7CiAKIAlhcHBlbmRTdHJpbmdJbmZvKCZidWYs ICJERUNMQVJFICVzIENVUlNPUiBGT1IgJXMiLCBjdXJuYW1lLCBzcWwpOwotCXJlcyA9IFBR ZXhlYyhjb25uLCBidWYuZGF0YSk7CisJcmVzID0gbGlicHFzcnZfZXhlYyhjb25uLCBidWYu ZGF0YSwgUEdfV0FJVF9FWFRFTlNJT04pOwogCWlmICghcmVzIHx8IFBRcmVzdWx0U3RhdHVz KHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKIAl7CiAJCWRibGlua19yZXNfZXJyb3IoY29u biwgY29ubmFtZSwgcmVzLCBmYWlsLApAQCAtNTE4LDcgKzUxOSw3IEBAIGRibGlua19jbG9z ZShQR19GVU5DVElPTl9BUkdTKQogCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIkNMT1NFICVz IiwgY3VybmFtZSk7CiAKIAkvKiBjbG9zZSB0aGUgY3Vyc29yICovCi0JcmVzID0gUFFleGVj KGNvbm4sIGJ1Zi5kYXRhKTsKKwlyZXMgPSBsaWJwcXNydl9leGVjKGNvbm4sIGJ1Zi5kYXRh LCBQR19XQUlUX0VYVEVOU0lPTik7CiAJaWYgKCFyZXMgfHwgUFFyZXN1bHRTdGF0dXMocmVz KSAhPSBQR1JFU19DT01NQU5EX09LKQogCXsKIAkJZGJsaW5rX3Jlc19lcnJvcihjb25uLCBj b25uYW1lLCByZXMsIGZhaWwsCkBAIC01MzgsNyArNTM5LDcgQEAgZGJsaW5rX2Nsb3NlKFBH X0ZVTkNUSU9OX0FSR1MpCiAJCXsKIAkJCXJjb25uLT5uZXdYYWN0Rm9yQ3Vyc29yID0gZmFs c2U7CiAKLQkJCXJlcyA9IFBRZXhlYyhjb25uLCAiQ09NTUlUIik7CisJCQlyZXMgPSBsaWJw cXNydl9leGVjKGNvbm4sICJDT01NSVQiLCBQR19XQUlUX0VYVEVOU0lPTik7CiAJCQlpZiAo UFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19DT01NQU5EX09LKQogCQkJCWRibGlua19y ZXNfaW50ZXJuYWxlcnJvcihjb25uLCByZXMsICJjb21taXQgZXJyb3IiKTsKIAkJCVBRY2xl YXIocmVzKTsKQEAgLTYyMCw3ICs2MjEsNyBAQCBkYmxpbmtfZmV0Y2goUEdfRlVOQ1RJT05f QVJHUykKIAkgKiBQR3Jlc3VsdCB3aWxsIGJlIGxvbmctbGl2ZWQgZXZlbiB0aG91Z2ggd2Ug YXJlIHN0aWxsIGluIGEgc2hvcnQtbGl2ZWQKIAkgKiBtZW1vcnkgY29udGV4dC4KIAkgKi8K LQlyZXMgPSBQUWV4ZWMoY29ubiwgYnVmLmRhdGEpOworCXJlcyA9IGxpYnBxc3J2X2V4ZWMo Y29ubiwgYnVmLmRhdGEsIFBHX1dBSVRfRVhURU5TSU9OKTsKIAlpZiAoIXJlcyB8fAogCQko UFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19DT01NQU5EX09LICYmCiAJCSBQUXJlc3Vs dFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykpCkBAIC03NjgsNyArNzY5LDcgQEAg ZGJsaW5rX3JlY29yZF9pbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgYm9vbCBp c19hc3luYykKIAkJZWxzZQogCQl7CiAJCQkvKiBhc3luYyByZXN1bHQgcmV0cmlldmFsLCBk byBpdCB0aGUgb2xkIHdheSAqLwotCQkJUEdyZXN1bHQgICAqcmVzID0gUFFnZXRSZXN1bHQo Y29ubik7CisJCQlQR3Jlc3VsdCAgICpyZXMgPSBsaWJwcXNydl9nZXRfcmVzdWx0KGNvbm4s IFBHX1dBSVRfRVhURU5TSU9OKTsKIAogCQkJLyogTlVMTCBtZWFucyB3ZSdyZSBhbGwgZG9u ZSB3aXRoIHRoZSBhc3luYyByZXN1bHRzICovCiAJCQlpZiAocmVzKQpAQCAtMTA3Niw3ICsx MDc3LDggQEAgbWF0ZXJpYWxpemVRdWVyeVJlc3VsdChGdW5jdGlvbkNhbGxJbmZvIGZjaW5m bywKIAkJUFFjbGVhcihzaW5mby5sYXN0X3Jlcyk7CiAJCVBRY2xlYXIoc2luZm8uY3VyX3Jl cyk7CiAJCS8qIGFuZCBjbGVhciBvdXQgYW55IHBlbmRpbmcgZGF0YSBpbiBsaWJwcSAqLwot CQl3aGlsZSAoKHJlcyA9IFBRZ2V0UmVzdWx0KGNvbm4pKSAhPSBOVUxMKQorCQl3aGlsZSAo KHJlcyA9IGxpYnBxc3J2X2dldF9yZXN1bHQoY29ubiwgUEdfV0FJVF9FWFRFTlNJT04pKSAh PQorCQkJICAgTlVMTCkKIAkJCVBRY2xlYXIocmVzKTsKIAkJUEdfUkVfVEhST1coKTsKIAl9 CkBAIC0xMTAzLDcgKzExMDUsNyBAQCBzdG9yZVF1ZXJ5UmVzdWx0KHZvbGF0aWxlIHN0b3Jl SW5mbyAqc2luZm8sIFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqc3FsKQogCXsKIAkJQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKTsKIAotCQlzaW5mby0+Y3VyX3JlcyA9IFBRZ2V0UmVzdWx0 KGNvbm4pOworCQlzaW5mby0+Y3VyX3JlcyA9IGxpYnBxc3J2X2dldF9yZXN1bHQoY29ubiwg UEdfV0FJVF9FWFRFTlNJT04pOwogCQlpZiAoIXNpbmZvLT5jdXJfcmVzKQogCQkJYnJlYWs7 CiAKQEAgLTE0MzEsNyArMTQzMyw3IEBAIGRibGlua19leGVjKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJCWlmICghY29ubikKIAkJCWRibGlua19jb25uX25vdF9hdmFpbChjb25uYW1lKTsKIAot CQlyZXMgPSBQUWV4ZWMoY29ubiwgc3FsKTsKKwkJcmVzID0gbGlicHFzcnZfZXhlYyhjb25u LCBzcWwsIFBHX1dBSVRfRVhURU5TSU9OKTsKIAkJaWYgKCFyZXMgfHwKIAkJCShQUXJlc3Vs dFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0sgJiYKIAkJCSBQUXJlc3VsdFN0YXR1 cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykpCkBAIC0yNzI4LDggKzI3MzAsOCBAQCBkYmxp bmtfcmVzX2Vycm9yKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqY29ubmFtZSwgUEdyZXN1 bHQgKnJlcywKIAogCS8qCiAJICogSWYgd2UgZG9uJ3QgZ2V0IGEgbWVzc2FnZSBmcm9tIHRo ZSBQR3Jlc3VsdCwgdHJ5IHRoZSBQR2Nvbm4uICBUaGlzIGlzCi0JICogbmVlZGVkIGJlY2F1 c2UgZm9yIGNvbm5lY3Rpb24tbGV2ZWwgZmFpbHVyZXMsIFBRZXhlYyBtYXkganVzdCByZXR1 cm4KLQkgKiBOVUxMLCBub3QgYSBQR3Jlc3VsdCBhdCBhbGwuCisJICogbmVlZGVkIGJlY2F1 c2UgZm9yIGNvbm5lY3Rpb24tbGV2ZWwgZmFpbHVyZXMsIFBRZ2V0UmVzdWx0IG1heSBqdXN0 CisJICogcmV0dXJuIE5VTEwsIG5vdCBhIFBHcmVzdWx0IGF0IGFsbC4KIAkgKi8KIAlpZiAo bWVzc2FnZV9wcmltYXJ5ID09IE5VTEwpCiAJCW1lc3NhZ2VfcHJpbWFyeSA9IHBjaG9tcChQ UWVycm9yTWVzc2FnZShjb25uKSk7CmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zk dy9jb25uZWN0aW9uLmMgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9jb25uZWN0aW9uLmMKaW5k ZXggMzI0NmUxOGFiOTMuLjNjZjBmNGIxNDhlIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3Rn cmVzX2Zkdy9jb25uZWN0aW9uLmMKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvY29ubmVj dGlvbi5jCkBAIC03MDksNyArNzA5LDcgQEAgZG9fc3FsX2NvbW1hbmRfZW5kKFBHY29ubiAq Y29ubiwgY29uc3QgY2hhciAqc3FsLCBib29sIGNvbnN1bWVfaW5wdXQpCiAJICovCiAJaWYg KGNvbnN1bWVfaW5wdXQgJiYgIVBRY29uc3VtZUlucHV0KGNvbm4pKQogCQlwZ2Zkd19yZXBv cnRfZXJyb3IoRVJST1IsIE5VTEwsIGNvbm4sIGZhbHNlLCBzcWwpOwotCXJlcyA9IHBnZmR3 X2dldF9yZXN1bHQoY29ubiwgc3FsKTsKKwlyZXMgPSBwZ2Zkd19nZXRfcmVzdWx0KGNvbm4p OwogCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spCiAJCXBn ZmR3X3JlcG9ydF9lcnJvcihFUlJPUiwgcmVzLCBjb25uLCB0cnVlLCBzcWwpOwogCVBRY2xl YXIocmVzKTsKQEAgLTgxMiw3ICs4MTIsOSBAQCBHZXRQcmVwU3RtdE51bWJlcihQR2Nvbm4g KmNvbm4pCiAvKgogICogU3VibWl0IGEgcXVlcnkgYW5kIHdhaXQgZm9yIHRoZSByZXN1bHQu CiAgKgotICogVGhpcyBmdW5jdGlvbiBpcyBpbnRlcnJ1cHRpYmxlIGJ5IHNpZ25hbHMuCisg KiBTaW5jZSB3ZSBkb24ndCB1c2Ugbm9uLWJsb2NraW5nIG1vZGUsIHRoaXMgY2FuJ3QgcHJv Y2VzcyBpbnRlcnJ1cHRzIHdoaWxlCisgKiBwdXNoaW5nIHRoZSBxdWVyeSB0ZXh0IHRvIHRo ZSBzZXJ2ZXIuICBUaGF0IHJpc2sgaXMgcmVsYXRpdmVseSBzbWFsbCwgc28gd2UKKyAqIGln bm9yZSB0aGF0IGZvciBub3cuCiAgKgogICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB0 aGUgZXJyb3IgaGFuZGxpbmcgb24gdGhlIHJlc3VsdC4KICAqLwpAQCAtODIzLDc3ICs4MjUs MjAgQEAgcGdmZHdfZXhlY19xdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5 LCBQZ0Zkd0Nvbm5TdGF0ZSAqc3RhdGUpCiAJaWYgKHN0YXRlICYmIHN0YXRlLT5wZW5kaW5n QXJlcSkKIAkJcHJvY2Vzc19wZW5kaW5nX3JlcXVlc3Qoc3RhdGUtPnBlbmRpbmdBcmVxKTsK IAotCS8qCi0JICogU3VibWl0IGEgcXVlcnkuICBTaW5jZSB3ZSBkb24ndCB1c2Ugbm9uLWJs b2NraW5nIG1vZGUsIHRoaXMgYWxzbyBjYW4KLQkgKiBibG9jay4gIEJ1dCBpdHMgcmlzayBp cyByZWxhdGl2ZWx5IHNtYWxsLCBzbyB3ZSBpZ25vcmUgdGhhdCBmb3Igbm93LgotCSAqLwog CWlmICghUFFzZW5kUXVlcnkoY29ubiwgcXVlcnkpKQotCQlwZ2Zkd19yZXBvcnRfZXJyb3Io RVJST1IsIE5VTEwsIGNvbm4sIGZhbHNlLCBxdWVyeSk7Ci0KLQkvKiBXYWl0IGZvciB0aGUg cmVzdWx0LiAqLwotCXJldHVybiBwZ2Zkd19nZXRfcmVzdWx0KGNvbm4sIHF1ZXJ5KTsKKwkJ cmV0dXJuIE5VTEw7CisJcmV0dXJuIHBnZmR3X2dldF9yZXN1bHQoY29ubik7CiB9CiAKIC8q Ci0gKiBXYWl0IGZvciB0aGUgcmVzdWx0IGZyb20gYSBwcmlvciBhc3luY2hyb25vdXMgZXhl Y3V0aW9uIGZ1bmN0aW9uIGNhbGwuCi0gKgotICogVGhpcyBmdW5jdGlvbiBvZmZlcnMgcXVp Y2sgcmVzcG9uc2l2ZW5lc3MgYnkgY2hlY2tpbmcgZm9yIGFueSBpbnRlcnJ1cHRpb25zLgot ICoKLSAqIFRoaXMgZnVuY3Rpb24gZW11bGF0ZXMgUFFleGVjKCkncyBiZWhhdmlvciBvZiBy ZXR1cm5pbmcgdGhlIGxhc3QgcmVzdWx0Ci0gKiB3aGVuIHRoZXJlIGFyZSBtYW55LgorICog V3JhcCBsaWJwcXNydl9nZXRfcmVzdWx0X2xhc3QoKSwgYWRkaW5nIHdhaXQgZXZlbnQuCiAg KgogICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgZXJyb3IgaGFuZGxpbmcgb24g dGhlIHJlc3VsdC4KICAqLwogUEdyZXN1bHQgKgotcGdmZHdfZ2V0X3Jlc3VsdChQR2Nvbm4g KmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KQorcGdmZHdfZ2V0X3Jlc3VsdChQR2Nvbm4gKmNv bm4pCiB7Ci0JUEdyZXN1bHQgICAqdm9sYXRpbGUgbGFzdF9yZXMgPSBOVUxMOwotCi0JLyog SW4gd2hhdCBmb2xsb3dzLCBkbyBub3QgbGVhayBhbnkgUEdyZXN1bHRzIG9uIGFuIGVycm9y LiAqLwotCVBHX1RSWSgpOwotCXsKLQkJZm9yICg7OykKLQkJewotCQkJUEdyZXN1bHQgICAq cmVzOwotCi0JCQl3aGlsZSAoUFFpc0J1c3koY29ubikpCi0JCQl7Ci0JCQkJaW50CQkJd2M7 Ci0KLQkJCQkvKiBTbGVlcCB1bnRpbCB0aGVyZSdzIHNvbWV0aGluZyB0byBkbyAqLwotCQkJ CXdjID0gV2FpdExhdGNoT3JTb2NrZXQoTXlMYXRjaCwKLQkJCQkJCQkJCSAgIFdMX0xBVENI X1NFVCB8IFdMX1NPQ0tFVF9SRUFEQUJMRSB8Ci0JCQkJCQkJCQkgICBXTF9FWElUX09OX1BN X0RFQVRILAotCQkJCQkJCQkJICAgUFFzb2NrZXQoY29ubiksCi0JCQkJCQkJCQkgICAtMUws IFBHX1dBSVRfRVhURU5TSU9OKTsKLQkJCQlSZXNldExhdGNoKE15TGF0Y2gpOwotCi0JCQkJ Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKLQotCQkJCS8qIERhdGEgYXZhaWxhYmxlIGluIHNv Y2tldD8gKi8KLQkJCQlpZiAod2MgJiBXTF9TT0NLRVRfUkVBREFCTEUpCi0JCQkJewotCQkJ CQlpZiAoIVBRY29uc3VtZUlucHV0KGNvbm4pKQotCQkJCQkJcGdmZHdfcmVwb3J0X2Vycm9y KEVSUk9SLCBOVUxMLCBjb25uLCBmYWxzZSwgcXVlcnkpOwotCQkJCX0KLQkJCX0KLQotCQkJ cmVzID0gUFFnZXRSZXN1bHQoY29ubik7Ci0JCQlpZiAocmVzID09IE5VTEwpCi0JCQkJYnJl YWs7CQkJLyogcXVlcnkgaXMgY29tcGxldGUgKi8KLQotCQkJUFFjbGVhcihsYXN0X3Jlcyk7 Ci0JCQlsYXN0X3JlcyA9IHJlczsKLQkJfQotCX0KLQlQR19DQVRDSCgpOwotCXsKLQkJUFFj bGVhcihsYXN0X3Jlcyk7Ci0JCVBHX1JFX1RIUk9XKCk7Ci0JfQotCVBHX0VORF9UUlkoKTsK LQotCXJldHVybiBsYXN0X3JlczsKKwlyZXR1cm4gbGlicHFzcnZfZ2V0X3Jlc3VsdF9sYXN0 KGNvbm4sIFBHX1dBSVRfRVhURU5TSU9OKTsKIH0KIAogLyoKQEAgLTkzNCw4ICs4NzksOCBA QCBwZ2Zkd19yZXBvcnRfZXJyb3IoaW50IGVsZXZlbCwgUEdyZXN1bHQgKnJlcywgUEdjb25u ICpjb25uLAogCiAJCS8qCiAJCSAqIElmIHdlIGRvbid0IGdldCBhIG1lc3NhZ2UgZnJvbSB0 aGUgUEdyZXN1bHQsIHRyeSB0aGUgUEdjb25uLiAgVGhpcwotCQkgKiBpcyBuZWVkZWQgYmVj YXVzZSBmb3IgY29ubmVjdGlvbi1sZXZlbCBmYWlsdXJlcywgUFFleGVjIG1heSBqdXN0Ci0J CSAqIHJldHVybiBOVUxMLCBub3QgYSBQR3Jlc3VsdCBhdCBhbGwuCisJCSAqIGlzIG5lZWRl ZCBiZWNhdXNlIGZvciBjb25uZWN0aW9uLWxldmVsIGZhaWx1cmVzLCBQUWdldFJlc3VsdCBt YXkKKwkJICoganVzdCByZXR1cm4gTlVMTCwgbm90IGEgUEdyZXN1bHQgYXQgYWxsLgogCQkg Ki8KIAkJaWYgKG1lc3NhZ2VfcHJpbWFyeSA9PSBOVUxMKQogCQkJbWVzc2FnZV9wcmltYXJ5 ID0gcGNob21wKFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKQEAgLTEwMzUsNyArOTgwLDggQEAg cGdmZHdfeGFjdF9jYWxsYmFjayhYYWN0RXZlbnQgZXZlbnQsIHZvaWQgKmFyZykKIAkJCQkJ ICovCiAJCQkJCWlmIChlbnRyeS0+aGF2ZV9wcmVwX3N0bXQgJiYgZW50cnktPmhhdmVfZXJy b3IpCiAJCQkJCXsKLQkJCQkJCXJlcyA9IFBRZXhlYyhlbnRyeS0+Y29ubiwgIkRFQUxMT0NB VEUgQUxMIik7CisJCQkJCQlyZXMgPSBwZ2Zkd19leGVjX3F1ZXJ5KGVudHJ5LT5jb25uLCAi REVBTExPQ0FURSBBTEwiLAorCQkJCQkJCQkJCQkgICBOVUxMKTsKIAkJCQkJCVBRY2xlYXIo cmVzKTsKIAkJCQkJfQogCQkJCQllbnRyeS0+aGF2ZV9wcmVwX3N0bXQgPSBmYWxzZTsKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2RlcGFyc2UuYyBiL2NvbnRyaWIvcG9z dGdyZXNfZmR3L2RlcGFyc2UuYwppbmRleCA2Y2JhMzQzNTBhZi4uZGJhNGRlZGQ5MzIgMTAw NjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2RlcGFyc2UuYworKysgYi9jb250cmli L3Bvc3RncmVzX2Zkdy9kZXBhcnNlLmMKQEAgLTM2NzMsNyArMzY3Myw3IEBAIGFwcGVuZE9y ZGVyQnlTdWZmaXgoT2lkIHNvcnRvcCwgT2lkIHNvcnRjb2x0eXBlLCBib29sIG51bGxzX2Zp cnN0LAogICogUHJpbnQgdGhlIHJlcHJlc2VudGF0aW9uIG9mIGEgcGFyYW1ldGVyIHRvIGJl IHNlbnQgdG8gdGhlIHJlbW90ZSBzaWRlLgogICoKICAqIE5vdGU6IHdlIGFsd2F5cyBsYWJl bCB0aGUgUGFyYW0ncyB0eXBlIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4gcmVseWluZyBvbgot ICogdHJhbnNtaXR0aW5nIGEgbnVtZXJpYyB0eXBlIE9JRCBpbiBQUWV4ZWNQYXJhbXMoKS4g IFRoaXMgYWxsb3dzIHVzIHRvCisgKiB0cmFuc21pdHRpbmcgYSBudW1lcmljIHR5cGUgT0lE IGluIFBRc2VuZFF1ZXJ5UGFyYW1zKCkuICBUaGlzIGFsbG93cyB1cyB0bwogICogYXZvaWQg YXNzdW1pbmcgdGhhdCB0eXBlcyBoYXZlIHRoZSBzYW1lIE9JRHMgb24gdGhlIHJlbW90ZSBz aWRlIGFzIHRoZXkKICAqIGRvIGxvY2FsbHkgLS0tIHRoZXkgbmVlZCBvbmx5IGhhdmUgdGhl IHNhbWUgbmFtZXMuCiAgKi8KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bv c3RncmVzX2Zkdy5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKaW5k ZXggODY1N2EzYjBlMjMuLmIxODU2N2NmOGY0IDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3Rn cmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYworKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0 Z3Jlc19mZHcuYwpAQCAtMzc2Nyw3ICszNzY3LDcgQEAgY3JlYXRlX2N1cnNvcihGb3JlaWdu U2NhblN0YXRlICpub2RlKQogCSAqIFdlIGRvbid0IHVzZSBhIFBHX1RSWSBibG9jayBoZXJl LCBzbyBiZSBjYXJlZnVsIG5vdCB0byB0aHJvdyBlcnJvcgogCSAqIHdpdGhvdXQgcmVsZWFz aW5nIHRoZSBQR3Jlc3VsdC4KIAkgKi8KLQlyZXMgPSBwZ2Zkd19nZXRfcmVzdWx0KGNvbm4s IGJ1Zi5kYXRhKTsKKwlyZXMgPSBwZ2Zkd19nZXRfcmVzdWx0KGNvbm4pOwogCWlmIChQUXJl c3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spCiAJCXBnZmR3X3JlcG9ydF9l cnJvcihFUlJPUiwgcmVzLCBjb25uLCB0cnVlLCBmc3N0YXRlLT5xdWVyeSk7CiAJUFFjbGVh cihyZXMpOwpAQCAtMzgxNyw3ICszODE3LDcgQEAgZmV0Y2hfbW9yZV9kYXRhKEZvcmVpZ25T Y2FuU3RhdGUgKm5vZGUpCiAJCQkgKiBUaGUgcXVlcnkgd2FzIGFscmVhZHkgc2VudCBieSBh biBlYXJsaWVyIGNhbGwgdG8KIAkJCSAqIGZldGNoX21vcmVfZGF0YV9iZWdpbi4gIFNvIG5v dyB3ZSBqdXN0IGZldGNoIHRoZSByZXN1bHQuCiAJCQkgKi8KLQkJCXJlcyA9IHBnZmR3X2dl dF9yZXN1bHQoY29ubiwgZnNzdGF0ZS0+cXVlcnkpOworCQkJcmVzID0gcGdmZHdfZ2V0X3Jl c3VsdChjb25uKTsKIAkJCS8qIE9uIGVycm9yLCByZXBvcnQgdGhlIG9yaWdpbmFsIHF1ZXJ5 LCBub3QgdGhlIEZFVENILiAqLwogCQkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdS RVNfVFVQTEVTX09LKQogCQkJCXBnZmR3X3JlcG9ydF9lcnJvcihFUlJPUiwgcmVzLCBjb25u LCBmYWxzZSwgZnNzdGF0ZS0+cXVlcnkpOwpAQCAtNDE2Niw3ICs0MTY2LDcgQEAgZXhlY3V0 ZV9mb3JlaWduX21vZGlmeShFU3RhdGUgKmVzdGF0ZSwKIAkgKiBXZSBkb24ndCB1c2UgYSBQ R19UUlkgYmxvY2sgaGVyZSwgc28gYmUgY2FyZWZ1bCBub3QgdG8gdGhyb3cgZXJyb3IKIAkg KiB3aXRob3V0IHJlbGVhc2luZyB0aGUgUEdyZXN1bHQuCiAJICovCi0JcmVzID0gcGdmZHdf Z2V0X3Jlc3VsdChmbXN0YXRlLT5jb25uLCBmbXN0YXRlLT5xdWVyeSk7CisJcmVzID0gcGdm ZHdfZ2V0X3Jlc3VsdChmbXN0YXRlLT5jb25uKTsKIAlpZiAoUFFyZXN1bHRTdGF0dXMocmVz KSAhPQogCQkoZm1zdGF0ZS0+aGFzX3JldHVybmluZyA/IFBHUkVTX1RVUExFU19PSyA6IFBH UkVTX0NPTU1BTkRfT0spKQogCQlwZ2Zkd19yZXBvcnRfZXJyb3IoRVJST1IsIHJlcywgZm1z dGF0ZS0+Y29ubiwgdHJ1ZSwgZm1zdGF0ZS0+cXVlcnkpOwpAQCAtNDIzNiw3ICs0MjM2LDcg QEAgcHJlcGFyZV9mb3JlaWduX21vZGlmeShQZ0Zkd01vZGlmeVN0YXRlICpmbXN0YXRlKQog CSAqIFdlIGRvbid0IHVzZSBhIFBHX1RSWSBibG9jayBoZXJlLCBzbyBiZSBjYXJlZnVsIG5v dCB0byB0aHJvdyBlcnJvcgogCSAqIHdpdGhvdXQgcmVsZWFzaW5nIHRoZSBQR3Jlc3VsdC4K IAkgKi8KLQlyZXMgPSBwZ2Zkd19nZXRfcmVzdWx0KGZtc3RhdGUtPmNvbm4sIGZtc3RhdGUt PnF1ZXJ5KTsKKwlyZXMgPSBwZ2Zkd19nZXRfcmVzdWx0KGZtc3RhdGUtPmNvbm4pOwogCWlm IChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spCiAJCXBnZmR3X3Jl cG9ydF9lcnJvcihFUlJPUiwgcmVzLCBmbXN0YXRlLT5jb25uLCB0cnVlLCBmbXN0YXRlLT5x dWVyeSk7CiAJUFFjbGVhcihyZXMpOwpAQCAtNDU3OCw3ICs0NTc4LDcgQEAgZXhlY3V0ZV9k bWxfc3RtdChGb3JlaWduU2NhblN0YXRlICpub2RlKQogCSAqIFdlIGRvbid0IHVzZSBhIFBH X1RSWSBibG9jayBoZXJlLCBzbyBiZSBjYXJlZnVsIG5vdCB0byB0aHJvdyBlcnJvcgogCSAq IHdpdGhvdXQgcmVsZWFzaW5nIHRoZSBQR3Jlc3VsdC4KIAkgKi8KLQlkbXN0YXRlLT5yZXN1 bHQgPSBwZ2Zkd19nZXRfcmVzdWx0KGRtc3RhdGUtPmNvbm4sIGRtc3RhdGUtPnF1ZXJ5KTsK KwlkbXN0YXRlLT5yZXN1bHQgPSBwZ2Zkd19nZXRfcmVzdWx0KGRtc3RhdGUtPmNvbm4pOwog CWlmIChQUXJlc3VsdFN0YXR1cyhkbXN0YXRlLT5yZXN1bHQpICE9CiAJCShkbXN0YXRlLT5o YXNfcmV0dXJuaW5nID8gUEdSRVNfVFVQTEVTX09LIDogUEdSRVNfQ09NTUFORF9PSykpCiAJ CXBnZmR3X3JlcG9ydF9lcnJvcihFUlJPUiwgZG1zdGF0ZS0+cmVzdWx0LCBkbXN0YXRlLT5j b25uLCB0cnVlLApkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNf ZmR3LmggYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuaAppbmRleCAwMmMx MTUyMzE5OS4uOGU4YTM2YWQxNGMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3 L3Bvc3RncmVzX2Zkdy5oCisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zk dy5oCkBAIC0xNTgsNyArMTU4LDcgQEAgZXh0ZXJuIHZvaWQgUmVsZWFzZUNvbm5lY3Rpb24o UEdjb25uICpjb25uKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgR2V0Q3Vyc29yTnVtYmVyKFBH Y29ubiAqY29ubik7CiBleHRlcm4gdW5zaWduZWQgaW50IEdldFByZXBTdG10TnVtYmVyKFBH Y29ubiAqY29ubik7CiBleHRlcm4gdm9pZCBkb19zcWxfY29tbWFuZChQR2Nvbm4gKmNvbm4s IGNvbnN0IGNoYXIgKnNxbCk7Ci1leHRlcm4gUEdyZXN1bHQgKnBnZmR3X2dldF9yZXN1bHQo UEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSk7CitleHRlcm4gUEdyZXN1bHQgKnBn ZmR3X2dldF9yZXN1bHQoUEdjb25uICpjb25uKTsKIGV4dGVybiBQR3Jlc3VsdCAqcGdmZHdf ZXhlY19xdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5LAogCQkJCQkJCQkg IFBnRmR3Q29ublN0YXRlICpzdGF0ZSk7CiBleHRlcm4gdm9pZCBwZ2Zkd19yZXBvcnRfZXJy b3IoaW50IGVsZXZlbCwgUEdyZXN1bHQgKnJlcywgUEdjb25uICpjb25uLApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3YWxyZWNlaXZlci9saWJwcXdhbHJl Y2VpdmVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdhbHJlY2VpdmVyL2xp YnBxd2FscmVjZWl2ZXIuYwppbmRleCBiNDAzOGUxMTRkOC4uNTY4MDI0ZWM5NzQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3 YWxyZWNlaXZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVj ZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jCkBAIC03MDUsMTIgKzcwNSw5IEBAIGxpYnBxcmN2 X3JlYWR0aW1lbGluZWhpc3RvcnlmaWxlKFdhbFJlY2VpdmVyQ29ubiAqY29ubiwKICAqIFNl bmQgYSBxdWVyeSBhbmQgd2FpdCBmb3IgdGhlIHJlc3VsdHMgYnkgdXNpbmcgdGhlIGFzeW5j aHJvbm91cyBsaWJwcQogICogZnVuY3Rpb25zIGFuZCBzb2NrZXQgcmVhZGluZXNzIGV2ZW50 cy4KICAqCi0gKiBXZSBtdXN0IG5vdCB1c2UgdGhlIHJlZ3VsYXIgYmxvY2tpbmcgbGlicHEg ZnVuY3Rpb25zIGxpa2UgUFFleGVjKCkKLSAqIHNpbmNlIHRoZXkgYXJlIHVuaW50ZXJydXB0 aWJsZSBieSBzaWduYWxzIG9uIHNvbWUgcGxhdGZvcm1zLCBzdWNoIGFzCi0gKiBXaW5kb3dz LgotICoKLSAqIFRoZSBmdW5jdGlvbiBpcyBtb2RlbGVkIG9uIFBRZXhlYygpIGluIGxpYnBx LCBidXQgb25seSBpbXBsZW1lbnRzCi0gKiB0aG9zZSBwYXJ0cyB0aGF0IGFyZSBpbiB1c2Ug aW4gdGhlIHdhbHJlY2VpdmVyIGFwaS4KKyAqIFRoZSBmdW5jdGlvbiBpcyBtb2RlbGVkIG9u IGxpYnBxc3J2X2V4ZWMoKSwgd2l0aCB0aGUgYmVoYXZpb3IgZGlmZmVyZW5jZQorICogYmVp bmcgdGhhdCBpdCBjYWxscyBQcm9jZXNzV2FsUmN2SW50ZXJydXB0cygpLiAgQXMgYW4gb3B0 aW1pemF0aW9uLCBpdAorICogc2tpcHMgdHJ5L2NhdGNoLCBzaW5jZSBhbGwgZXJyb3JzIHRl cm1pbmF0ZSB0aGUgcHJvY2Vzcy4KICAqCiAgKiBNYXkgcmV0dXJuIE5VTEwsIHJhdGhlciB0 aGFuIGFuIGVycm9yIHJlc3VsdCwgb24gZmFpbHVyZS4KICAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbGlicHEvbGlicHEtYmUtZmUtaGVscGVycy5oIGIvc3JjL2luY2x1ZGUvbGli cHEvbGlicHEtYmUtZmUtaGVscGVycy5oCmluZGV4IDQxZTNiYjQzNzZhLi5hNGIzZTgwNWI5 ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbGlicHEvbGlicHEtYmUtZmUtaGVscGVycy5o CisrKyBiL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLWZlLWhlbHBlcnMuaApAQCAtNDks NiArNDksOCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbGlicHFzcnZfY29ubmVjdF9wcmVw YXJlKHZvaWQpOwogc3RhdGljIGlubGluZSB2b2lkIGxpYnBxc3J2X2Nvbm5lY3RfaW50ZXJu YWwoUEdjb25uICpjb25uLCB1aW50MzIgd2FpdF9ldmVudF9pbmZvKTsKK3N0YXRpYyBpbmxp bmUgUEdyZXN1bHQgKmxpYnBxc3J2X2dldF9yZXN1bHRfbGFzdChQR2Nvbm4gKmNvbm4sIHVp bnQzMiB3YWl0X2V2ZW50X2luZm8pOworc3RhdGljIGlubGluZSBQR3Jlc3VsdCAqbGlicHFz cnZfZ2V0X3Jlc3VsdChQR2Nvbm4gKmNvbm4sIHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pOwog CiAKIC8qCkBAIC0yMzksNCArMjQxLDEyOSBAQCBsaWJwcXNydl9jb25uZWN0X2ludGVybmFs KFBHY29ubiAqY29ubiwgdWludDMyIHdhaXRfZXZlbnRfaW5mbykKIAlQR19FTkRfVFJZKCk7 CiB9CiAKKy8qCisgKiBQUWV4ZWMoKSB3cmFwcGVyIHRoYXQgcHJvY2Vzc2VzIGludGVycnVw dHMuCisgKgorICogVW5sZXNzIFBRc2V0bm9uYmxvY2tpbmcoY29ubiwgMSkgaXMgaW4gZWZm ZWN0LCB0aGlzIGNhbid0IHByb2Nlc3MKKyAqIGludGVycnVwdHMgd2hpbGUgcHVzaGluZyB0 aGUgcXVlcnkgdGV4dCB0byB0aGUgc2VydmVyLiAgQ29uc2lkZXIgdGhhdAorICogc2V0dGlu ZyBpZiBxdWVyeSBzdHJpbmdzIGNhbiBiZSBsb25nIHJlbGF0aXZlIHRvIFRDUCBidWZmZXIg c2l6ZS4KKyAqCisgKiBUaGlzIGhhcyB0aGUgcHJlY29uZGl0aW9ucyBvZiBQUXNlbmRRdWVy eSgpLCBub3QgdGhvc2Ugb2YgUFFleGVjKCkuICBNb3N0CisgKiBub3RhYmx5LCBQUWV4ZWMo KSB3b3VsZCBzaWxlbnRseSBkaXNjYXJkIGFueSBwcmlvciBxdWVyeSByZXN1bHRzLgorICov CitzdGF0aWMgaW5saW5lIFBHcmVzdWx0ICoKK2xpYnBxc3J2X2V4ZWMoUEdjb25uICpjb25u LCBjb25zdCBjaGFyICpxdWVyeSwgdWludDMyIHdhaXRfZXZlbnRfaW5mbykKK3sKKwlpZiAo IVBRc2VuZFF1ZXJ5KGNvbm4sIHF1ZXJ5KSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGxp YnBxc3J2X2dldF9yZXN1bHRfbGFzdChjb25uLCB3YWl0X2V2ZW50X2luZm8pOworfQorCisv KgorICogUFFleGVjUGFyYW1zKCkgd3JhcHBlciB0aGF0IHByb2Nlc3NlcyBpbnRlcnJ1cHRz LgorICoKKyAqIFNlZSBub3RlcyBhdCBsaWJwcXNydl9leGVjKCkuCisgKi8KK3N0YXRpYyBp bmxpbmUgUEdyZXN1bHQgKgorbGlicHFzcnZfZXhlY19wYXJhbXMoUEdjb25uICpjb25uLAor CQkJCQkgY29uc3QgY2hhciAqY29tbWFuZCwKKwkJCQkJIGludCBuUGFyYW1zLAorCQkJCQkg Y29uc3QgT2lkICpwYXJhbVR5cGVzLAorCQkJCQkgY29uc3QgY2hhciAqY29uc3QgKnBhcmFt VmFsdWVzLAorCQkJCQkgY29uc3QgaW50ICpwYXJhbUxlbmd0aHMsCisJCQkJCSBjb25zdCBp bnQgKnBhcmFtRm9ybWF0cywKKwkJCQkJIGludCByZXN1bHRGb3JtYXQsCisJCQkJCSB1aW50 MzIgd2FpdF9ldmVudF9pbmZvKQoreworCWlmICghUFFzZW5kUXVlcnlQYXJhbXMoY29ubiwg Y29tbWFuZCwgblBhcmFtcywgcGFyYW1UeXBlcywgcGFyYW1WYWx1ZXMsCisJCQkJCQkgICBw YXJhbUxlbmd0aHMsIHBhcmFtRm9ybWF0cywgcmVzdWx0Rm9ybWF0KSkKKwkJcmV0dXJuIE5V TEw7CisJcmV0dXJuIGxpYnBxc3J2X2dldF9yZXN1bHRfbGFzdChjb25uLCB3YWl0X2V2ZW50 X2luZm8pOworfQorCisvKgorICogTGlrZSBQUWV4ZWMoKSwgbG9vcCBvdmVyIFBRZ2V0UmVz dWx0KCkgdW50aWwgaXQgcmV0dXJucyBOVUxMIG9yIGFub3RoZXIKKyAqIHRlcm1pbmFsIHN0 YXRlLiAgUmV0dXJuIHRoZSBsYXN0IG5vbi1OVUxMIHJlc3VsdCBvciB0aGUgdGVybWluYWwg c3RhdGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgUEdyZXN1bHQgKgorbGlicHFzcnZfZ2V0X3Jl c3VsdF9sYXN0KFBHY29ubiAqY29ubiwgdWludDMyIHdhaXRfZXZlbnRfaW5mbykKK3sKKwlQ R3Jlc3VsdCAgICp2b2xhdGlsZSBsYXN0UmVzdWx0ID0gTlVMTDsKKworCS8qIEluIHdoYXQg Zm9sbG93cywgZG8gbm90IGxlYWsgYW55IFBHcmVzdWx0cyBvbiBhbiBlcnJvci4gKi8KKwlQ R19UUlkoKTsKKwl7CisJCWZvciAoOzspCisJCXsKKwkJCS8qIFdhaXQgZm9yLCBhbmQgY29s bGVjdCwgdGhlIG5leHQgUEdyZXN1bHQuICovCisJCQlQR3Jlc3VsdCAgICpyZXN1bHQ7CisK KwkJCXJlc3VsdCA9IGxpYnBxc3J2X2dldF9yZXN1bHQoY29ubiwgd2FpdF9ldmVudF9pbmZv KTsKKwkJCWlmIChyZXN1bHQgPT0gTlVMTCkKKwkJCQlicmVhazsJCQkvKiBxdWVyeSBpcyBj b21wbGV0ZSwgb3IgZmFpbHVyZSAqLworCisJCQkvKgorCQkJICogRW11bGF0ZSBQUWV4ZWMo KSdzIGJlaGF2aW9yIG9mIHJldHVybmluZyB0aGUgbGFzdCByZXN1bHQgd2hlbgorCQkJICog dGhlcmUgYXJlIG1hbnkuCisJCQkgKi8KKwkJCVBRY2xlYXIobGFzdFJlc3VsdCk7CisJCQls YXN0UmVzdWx0ID0gcmVzdWx0OworCisJCQlpZiAoUFFyZXN1bHRTdGF0dXMobGFzdFJlc3Vs dCkgPT0gUEdSRVNfQ09QWV9JTiB8fAorCQkJCVBRcmVzdWx0U3RhdHVzKGxhc3RSZXN1bHQp ID09IFBHUkVTX0NPUFlfT1VUIHx8CisJCQkJUFFyZXN1bHRTdGF0dXMobGFzdFJlc3VsdCkg PT0gUEdSRVNfQ09QWV9CT1RIIHx8CisJCQkJUFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElP Tl9CQUQpCisJCQkJYnJlYWs7CisJCX0KKwl9CisJUEdfQ0FUQ0goKTsKKwl7CisJCVBRY2xl YXIobGFzdFJlc3VsdCk7CisJCVBHX1JFX1RIUk9XKCk7CisJfQorCVBHX0VORF9UUlkoKTsK KworCXJldHVybiBsYXN0UmVzdWx0OworfQorCisvKgorICogUGVyZm9ybSB0aGUgZXF1aXZh bGVudCBvZiBQUWdldFJlc3VsdCgpLCBidXQgd2F0Y2ggZm9yIGludGVycnVwdHMuCisgKi8K K3N0YXRpYyBpbmxpbmUgUEdyZXN1bHQgKgorbGlicHFzcnZfZ2V0X3Jlc3VsdChQR2Nvbm4g KmNvbm4sIHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pCit7CisJLyoKKwkgKiBDb2xsZWN0IGRh dGEgdW50aWwgUFFnZXRSZXN1bHQgaXMgcmVhZHkgdG8gZ2V0IHRoZSByZXN1bHQgd2l0aG91 dAorCSAqIGJsb2NraW5nLgorCSAqLworCXdoaWxlIChQUWlzQnVzeShjb25uKSkKKwl7CisJ CWludAkJCXJjOworCisJCXJjID0gV2FpdExhdGNoT3JTb2NrZXQoTXlMYXRjaCwKKwkJCQkJ CQkgICBXTF9FWElUX09OX1BNX0RFQVRIIHwgV0xfTEFUQ0hfU0VUIHwKKwkJCQkJCQkgICBX TF9TT0NLRVRfUkVBREFCTEUsCisJCQkJCQkJICAgUFFzb2NrZXQoY29ubiksCisJCQkJCQkJ ICAgMCwKKwkJCQkJCQkgICB3YWl0X2V2ZW50X2luZm8pOworCisJCS8qIEludGVycnVwdGVk PyAqLworCQlpZiAocmMgJiBXTF9MQVRDSF9TRVQpCisJCXsKKwkJCVJlc2V0TGF0Y2goTXlM YXRjaCk7CisJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCQl9CisKKwkJLyogQ29uc3Vt ZSB3aGF0ZXZlciBkYXRhIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBzb2NrZXQgKi8KKwkJaWYg KFBRY29uc3VtZUlucHV0KGNvbm4pID09IDApCisJCXsKKwkJCS8qIHRyb3VibGU7IGV4cGVj dCBQUWdldFJlc3VsdCgpIHRvIHJldHVybiBOVUxMICovCisJCQlicmVhazsKKwkJfQorCX0K KworCS8qIE5vdyB3ZSBjYW4gY29sbGVjdCBhbmQgcmV0dXJuIHRoZSBuZXh0IFBHcmVzdWx0 ICovCisJcmV0dXJuIFBRZ2V0UmVzdWx0KGNvbm4pOworfQorCiAjZW5kaWYJCQkJCQkJLyog TElCUFFfQkVfRkVfSEVMUEVSU19IICovCi0tIAoyLjQ3LjIKCg== --------------ecZ0HxMMhBmJHWlb7Ry2Ibkl--