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 1tHo2c-009xU1-3L for pgsql-hackers@arkaria.postgresql.org; Sun, 01 Dec 2024 17:47:31 +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 1tHo2Z-00970A-JE for pgsql-hackers@arkaria.postgresql.org; Sun, 01 Dec 2024 17:47:28 +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 1tHo2Z-0096zv-23 for pgsql-hackers@lists.postgresql.org; Sun, 01 Dec 2024 17:47:28 +0000 Received: from smtp.outgoing.loopia.se ([93.188.3.37]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tHo2U-000Vy0-TI for pgsql-hackers@postgresql.org; Sun, 01 Dec 2024 17:47:27 +0000 Received: from s807.loopia.se (localhost [127.0.0.1]) by s807.loopia.se (Postfix) with ESMTP id 528AB14F666 for ; Sun, 01 Dec 2024 18:47:22 +0100 (CET) Received: from s980.loopia.se (unknown [172.22.191.5]) by s807.loopia.se (Postfix) with ESMTP id 3E5C6158282; Sun, 01 Dec 2024 18:47:22 +0100 (CET) Received: from s470.loopia.se (unknown [172.22.191.5]) by s980.loopia.se (Postfix) with ESMTP id 3ADDB2201818; Sun, 01 Dec 2024 18:47:22 +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: s470.loopia.se (amavisd-new); dkim=pass (2048-bit key) header.d=proxel.se Received: from s979.loopia.se ([172.22.191.6]) by s470.loopia.se (s470.loopia.se [172.22.190.34]) (amavisd-new, port 10024) with LMTP id o7YVkcSohDk6; Sun, 1 Dec 2024 18:47:21 +0100 (CET) X-Loopia-Auth: user X-Loopia-User: andreas@proxel.se X-Loopia-Originating-IP: 147.28.75.140 Received: from [192.168.0.121] (customer-147-28-75-140.stosn.net [147.28.75.140]) (Authenticated sender: andreas@proxel.se) by s979.loopia.se (Postfix) with ESMTPSA id D539A10BC62A; Sun, 01 Dec 2024 18:47:20 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proxel.se; s=loopiadkim1707418970; t=1733075240; bh=dnBy9842B2Izdw6cdM8p9D1ppOFnKfo5oIlbRbMuHDA=; h=Date:To:From:Subject; b=BQThGY2bn9yXRwyOvU8prAQ1j/zMbff9Z4nQA1RovoIWdUWufaLgDjXq+zPi+MAeM qPMGgrbBohkrEVZvj0sRPuth+B2gRsejnWc9ZDMAT78gLkHWO/XZLGoboh98s/Khp3 3HS1i+vL7WtELMyTkDlWSdI16DIm5zw/N0tpo5Ixq/H1/Y51cdpHlRv3aGCPpnMDQ1 AIlH217LjAbP1VFt9AXhqZYShJvQ1sJF8OvPdDCy2T+vcQXLj/KJ4YANT2IIjqYezi C6t44qbCj+BMXiWhDDCX8HXqObjxQzzHAvFFN+ZODt60N8uqqHGgb645XiCsqutKcE e9EhOcEirRyOw== Content-Type: multipart/mixed; boundary="------------cH8bE6JTUrKcFCGbsA7PpQh8" Message-ID: <2b5db2e6-8ece-44d0-9890-f256fdca9f7e@proxel.se> Date: Sun, 1 Dec 2024 18:47:20 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: pgsql-hackers , Marko Tiikkaja From: Andreas Karlsson Subject: INSERT ... ON CONFLICT DO SELECT [FOR ...] take 2 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. --------------cH8bE6JTUrKcFCGbsA7PpQh8 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi! This, ON CONFLICT DO SELECT, is a feature I have wished for ever since ON CONFLICT was added to PostgreSQL and I have worked with several code bases where it would have been useful. So now I finally got round to revive and rebase Marko's old patch. Marko originally posted the patch back in 2017[1], but discussion sadly died and the patch bitrotted heavily (especially due to pluggable table AMs). The patch is very similar to Marko's original but with some fixes like support for EXPLAIN, clean up, a bug-fix and heavy changes to move it from PG 11 to master. This patch adds support both for SELECT with locking of the tuples (at a lock level the user can specify) and SELECT without any locking. I personally find both useful. There is no need to take any locks if you are just fetching the tuples and sending them back to the client and directly committing the transaction. Without lock: INSERT INTO testtab (key, fruit) VALUES (1, 'Apple') ON CONFLICT (key) DO SELECT FOR UPDATE RETURNING *; With lock: INSERT INTO testtab (key, fruit) VALUES (1, 'Apple') ON CONFLICT (key) DO SELECT RETURNING *; What do you think? Is the current propose syntax good? Any other thoughts? If there is interest I will keep working on this patch. Remaining work: - Make sure it works with row level security correctly - Verify that partitions are supported correctly - Clean up code - Clean up tests - Write more comments - Improve documentation (e.g. we may need to update documentation for CREATE POLICY) References 1. https://www.postgresql.org/message-id/CAL9smLCdV-v3KgOJX3mU19FYK82N7yzqJj2HAwWX70E%3DP98kgQ%40mail.gmail.com Andreas --------------cH8bE6JTUrKcFCGbsA7PpQh8 Content-Type: text/x-patch; charset=UTF-8; name="v2-0001-Add-support-for-ON-CONFLICT-DO-SELECT-FOR.patch" Content-Disposition: attachment; filename="v2-0001-Add-support-for-ON-CONFLICT-DO-SELECT-FOR.patch" Content-Transfer-Encoding: base64 RnJvbSBlMTcxMjE1MDg3MTFkOWJlZGNjOWZmNGM4YTNjNGM4NDI4ZjI4NjA3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZWFzIEthcmxzc29uIDxhbmRyZWFzQHByb3hl bC5zZT4KRGF0ZTogTW9uLCAxOCBOb3YgMjAyNCAwMDoyOToxNSArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjIgMS8yXSBBZGQgc3VwcG9ydCBmb3IgT04gQ09ORkxJQ1QgRE8gU0VMRUNUIFsg Rk9SIC4uLiBdCgpBZGRzIHN1cHBvcnQgZm9yIERPIFNFTEVDVCBhY3Rpb24gZm9yIE9OIENP TkZMSUNUIGNsYXVzZSB3aGVyZSB3ZQpzZWxlY3QgdGhlIHR1cGxlcyBhbmQgb3B0aW9uYWxs eSBsb2NrIHRoZW0uIElmIHRoZSB0dXBsZXMgYXJlIGxvY2tlZAp3aXRoIGNoZWNrIGZvciBj b25mbGljdHMsIG90aGVyd2lzZSBub3QuCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9pbnNlcnQu c2dtbCAgICAgICAgICAgICAgICAgIHwgIDE3ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9l eHBsYWluLmMgICAgICAgICAgICAgICAgfCAgMzMgKystCiBzcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlTW9kaWZ5VGFibGUuYyAgICAgICAgfCAyNDYgKysrKysrKysrKysrKysrLS0tCiBz cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgICAgICAgfCAgIDIgKwog c3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYyAgICAgICAgICAgICAgICAgIHwgIDE2ICst CiBzcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgICAgICAgICAgICAgfCAgMjAg Ky0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jbGF1c2UuYyAgICAgICAgICAgICB8ICAg NyArCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgICAgICAgfCAg IDMgKwogc3JjL2luY2x1ZGUvbm9kZXMvbG9ja29wdGlvbnMuaCAgICAgICAgICAgICAgIHwg ICAzICstCiBzcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oICAgICAgICAgICAgICAgICAgICAg fCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAgICAgICAgICAg IHwgICA0ICstCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICAgICAg ICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmggICAgICAgICAgICAg ICAgIHwgICA5ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luc2VydF9jb25mbGlj dC5vdXQgfCAgOTcgKysrKysrLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvaW5zZXJ0X2NvbmZs aWN0LnNxbCAgICAgIHwgIDM3ICsrKwogMTUgZmlsZXMgY2hhbmdlZCwgNDQ1IGluc2VydGlv bnMoKyksIDUyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYv aW5zZXJ0LnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2luc2VydC5zZ21sCmluZGV4IDZmMGFk ZWUxYTEyLi42M2ZmYjBkMTQxYyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9pbnNl cnQuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2luc2VydC5zZ21sCkBAIC0zNiw2ICsz Niw3IEBAIElOU0VSVCBJTlRPIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJs ZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyBBUyA8cmVwbGFjCiA8cGhyYXNlPmFuZCA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29uZmxpY3RfYWN0aW9uPC9yZXBsYWNlYWJsZT4g aXMgb25lIG9mOjwvcGhyYXNlPgogCiAgICAgRE8gTk9USElORworICAgIERPIFNFTEVDVCBb IEZPUiB7IFVQREFURSB8IE5PIEtFWSBVUERBVEUgfCBTSEFSRSB8IEtFWSBTSEFSRSB9IF0K ICAgICBETyBVUERBVEUgU0VUIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNv bHVtbl9uYW1lPC9yZXBsYWNlYWJsZT4gPSB7IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gfCBERUZBVUxUIH0gfAogICAgICAgICAg ICAgICAgICAgICAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb2x1bW5fbmFt ZTwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSA9IFsgUk9XIF0gKCB7IDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gfCBERUZBVUxUIH0g WywgLi4uXSApIHwKICAgICAgICAgICAgICAgICAgICAgKCA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgPSAoIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5zdWItU0VMRUNUPC9yZXBsYWNlYWJsZT4g KQpAQCAtODcsMTggKzg4LDI0IEBAIElOU0VSVCBJTlRPIDxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyBBUyA8cmVwbGFjCiAKICAg PHBhcmE+CiAgICBUaGUgb3B0aW9uYWwgPGxpdGVyYWw+UkVUVVJOSU5HPC9saXRlcmFsPiBj bGF1c2UgY2F1c2VzIDxjb21tYW5kPklOU0VSVDwvY29tbWFuZD4KLSAgIHRvIGNvbXB1dGUg YW5kIHJldHVybiB2YWx1ZShzKSBiYXNlZCBvbiBlYWNoIHJvdyBhY3R1YWxseSBpbnNlcnRl ZAotICAgKG9yIHVwZGF0ZWQsIGlmIGFuIDxsaXRlcmFsPk9OIENPTkZMSUNUIERPIFVQREFU RTwvbGl0ZXJhbD4gY2xhdXNlIHdhcwotICAgdXNlZCkuICBUaGlzIGlzIHByaW1hcmlseSB1 c2VmdWwgZm9yIG9idGFpbmluZyB2YWx1ZXMgdGhhdCB3ZXJlCisgICB0byBjb21wdXRlIGFu ZCByZXR1cm4gdmFsdWUocykgYmFzZWQgb24gZWFjaCByb3cgYWN0dWFsbHkgaW5zZXJ0ZWQu CisgICBJZiBhbiA8bGl0ZXJhbD5PTiBDT05GTElDVCBETyBVUERBVEU8L2xpdGVyYWw+IGNs YXVzZSB3YXMgdXNlZCwKKyAgIDxsaXRlcmFsPlJFVFVSTklORzwvbGl0ZXJhbD4gYWxzbyBy ZXR1cm5zIHR1cGxlcyB3aGljaCB3ZXJlIHVwZGF0ZWQsIGFuZAorICAgaW4gdGhlIHByZXNl bmNlIG9mIGFuIDxsaXRlcmFsPk9OIENPTkZMSUNUIERPIFNFTEVDVDwvbGl0ZXJhbD4gY2xh dXNlIGFsbAorICAgaW5wdXQgcm93cyBhcmUgcmV0dXJuZWQuICBXaXRoIGEgdHJhZGl0aW9u YWwgPGNvbW1hbmQ+SU5TRVJUPC9jb21tYW5kPiwKKyAgIHRoZSA8bGl0ZXJhbD5SRVRVUk5J Tkc8L2xpdGVyYWw+IGNsYXVzZSBpcyBwcmltYXJpbHkgdXNlZnVsIGZvciBvYnRhaW5pbmcK KyAgIHZhbHVlcyB0aGF0IHdlcmUKICAgIHN1cHBsaWVkIGJ5IGRlZmF1bHRzLCBzdWNoIGFz IGEgc2VyaWFsIHNlcXVlbmNlIG51bWJlci4gIEhvd2V2ZXIsCiAgICBhbnkgZXhwcmVzc2lv biB1c2luZyB0aGUgdGFibGUncyBjb2x1bW5zIGlzIGFsbG93ZWQuICBUaGUgc3ludGF4IG9m CiAgICB0aGUgPGxpdGVyYWw+UkVUVVJOSU5HPC9saXRlcmFsPiBsaXN0IGlzIGlkZW50aWNh bCB0byB0aGF0IG9mIHRoZSBvdXRwdXQKLSAgIGxpc3Qgb2YgPGNvbW1hbmQ+U0VMRUNUPC9j b21tYW5kPi4gIE9ubHkgcm93cyB0aGF0IHdlcmUgc3VjY2Vzc2Z1bGx5CisgICBsaXN0IG9m IDxjb21tYW5kPlNFTEVDVDwvY29tbWFuZD4uICBJZiBhbiA8bGl0ZXJhbD5PTiBDT05GTElD VCBETyBTRUxFQ1Q8L2xpdGVyYWw+CisgICBjbGF1c2UgaXMgbm90IHByZXNlbnQsIG9ubHkg cm93cyB0aGF0IHdlcmUgc3VjY2Vzc2Z1bGx5CiAgICBpbnNlcnRlZCBvciB1cGRhdGVkIHdp bGwgYmUgcmV0dXJuZWQuICBGb3IgZXhhbXBsZSwgaWYgYSByb3cgd2FzCiAgICBsb2NrZWQg YnV0IG5vdCB1cGRhdGVkIGJlY2F1c2UgYW4gPGxpdGVyYWw+T04gQ09ORkxJQ1QgRE8gVVBE QVRFCiAgICAuLi4gV0hFUkU8L2xpdGVyYWw+IGNsYXVzZSA8cmVwbGFjZWFibGUKICAgIGNs YXNzPSJwYXJhbWV0ZXIiPmNvbmRpdGlvbjwvcmVwbGFjZWFibGU+IHdhcyBub3Qgc2F0aXNm aWVkLCB0aGUKLSAgIHJvdyB3aWxsIG5vdCBiZSByZXR1cm5lZC4KKyAgIHJvdyB3aWxsIG5v dCBiZSByZXR1cm5lZC4gIDxsaXRlcmFsPk9OIENPTkZMSUNUIERPIFNFTEVDVDwvbGl0ZXJh bD4KKyAgIHdvcmtzIHNpbWlsYXJseSwgZXhjZXB0IG5vIHVwZGF0ZSB0YWtlcyBwbGFjZS4K ICAgPC9wYXJhPgogCiAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IGEz ZjFkNTNkN2E1Li4wMTJmNTFkMTQ5MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAt NDYwMSwxMCArNDYwMSwzNSBAQCBzaG93X21vZGlmeXRhYmxlX2luZm8oTW9kaWZ5VGFibGVT dGF0ZSAqbXRzdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCiAJaWYgKG5vZGUtPm9uQ29uZmxp Y3RBY3Rpb24gIT0gT05DT05GTElDVF9OT05FKQogCXsKLQkJRXhwbGFpblByb3BlcnR5VGV4 dCgiQ29uZmxpY3QgUmVzb2x1dGlvbiIsCi0JCQkJCQkJbm9kZS0+b25Db25mbGljdEFjdGlv biA9PSBPTkNPTkZMSUNUX05PVEhJTkcgPwotCQkJCQkJCSJOT1RISU5HIiA6ICJVUERBVEUi LAotCQkJCQkJCWVzKTsKKwkJY29uc3QgY2hhciAqcmVzb2x1dGlvbjsKKworCQlpZiAobm9k ZS0+b25Db25mbGljdEFjdGlvbiA9PSBPTkNPTkZMSUNUX05PVEhJTkcpCisJCQlyZXNvbHV0 aW9uID0gIk5PVEhJTkciOworCQllbHNlIGlmIChub2RlLT5vbkNvbmZsaWN0QWN0aW9uID09 IE9OQ09ORkxJQ1RfVVBEQVRFKQorCQkJcmVzb2x1dGlvbiA9ICJVUERBVEUiOworCQllbHNl IGlmIChub2RlLT5vbkNvbmZsaWN0QWN0aW9uID09IE9OQ09ORkxJQ1RfU0VMRUNUKQorCQl7 CisJCQlzd2l0Y2ggKG5vZGUtPm9uQ29uZmxpY3RMb2NraW5nU3RyZW5ndGgpCisJCQl7CisJ CQkJY2FzZSBMQ1NfTk9ORToKKwkJCQkJcmVzb2x1dGlvbiA9ICJTRUxFQ1QiOworCQkJCQli cmVhazsKKwkJCQljYXNlIExDU19GT1JLRVlTSEFSRToKKwkJCQkJcmVzb2x1dGlvbiA9ICJT RUxFQ1QgRk9SIEtFWSBTSEFSRSI7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgTENTX0ZPUlNI QVJFOgorCQkJCQlyZXNvbHV0aW9uID0gIlNFTEVDVCBGT1IgU0hBUkUiOworCQkJCQlicmVh azsKKwkJCQljYXNlIExDU19GT1JOT0tFWVVQREFURToKKwkJCQkJcmVzb2x1dGlvbiA9ICJT RUxFQ1QgRk9SIE5PIEtFWSBVUERBVEUiOworCQkJCQlicmVhazsKKwkJCQljYXNlIExDU19G T1JVUERBVEU6CisJCQkJCXJlc29sdXRpb24gPSAiU0VMRUNUIEZPUiBVUERBVEUiOworCQkJ CQlicmVhazsKKwkJCX0KKwkJfQorCisJCUV4cGxhaW5Qcm9wZXJ0eVRleHQoIkNvbmZsaWN0 IFJlc29sdXRpb24iLCByZXNvbHV0aW9uLCBlcyk7CiAKIAkJLyoKIAkJICogRG9uJ3QgZGlz cGxheSBhcmJpdGVyIGluZGV4ZXMgYXQgYWxsIHdoZW4gRE8gTk9USElORyB2YXJpYW50CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCmluZGV4IDExNjE1MjBmNzZi Li44MGIyZDhmNGZjZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1v ZGlmeVRhYmxlLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxl LmMKQEAgLTEzOCwxMiArMTM4LDIzIEBAIHN0YXRpYyB2b2lkIEV4ZWNDcm9zc1BhcnRpdGlv blVwZGF0ZUZvcmVpZ25LZXkoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAogCQkJCQkJ CQkJCQkgICBJdGVtUG9pbnRlciB0dXBsZWlkLAogCQkJCQkJCQkJCQkgICBUdXBsZVRhYmxl U2xvdCAqb2xkc2xvdCwKIAkJCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKm5ld3Nsb3Qp Oworc3RhdGljIGJvb2wgRXhlY09uQ29uZmxpY3RMb2NrUm93KE1vZGlmeVRhYmxlQ29udGV4 dCAqY29udGV4dCwKKwkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqZXhpc3RpbmcsCisJCQkJ CQkJCSAgSXRlbVBvaW50ZXIgY29uZmxpY3RUaWQsCisJCQkJCQkJCSAgUmVsYXRpb24gcmVs YXRpb24sCisJCQkJCQkJCSAgTG9ja1R1cGxlTW9kZSBsb2NrbW9kZSwKKwkJCQkJCQkJICBi b29sIGlzVXBkYXRlKTsKIHN0YXRpYyBib29sIEV4ZWNPbkNvbmZsaWN0VXBkYXRlKE1vZGlm eVRhYmxlQ29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJIFJlc3VsdFJlbEluZm8gKnJlc3Vs dFJlbEluZm8sCiAJCQkJCQkJCSBJdGVtUG9pbnRlciBjb25mbGljdFRpZCwKIAkJCQkJCQkJ IFR1cGxlVGFibGVTbG90ICpleGNsdWRlZFNsb3QsCiAJCQkJCQkJCSBib29sIGNhblNldFRh ZywKIAkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICoqcmV0dXJuaW5nKTsKK3N0YXRpYyBib29s IEV4ZWNPbkNvbmZsaWN0U2VsZWN0KE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwKKwkJ CQkJCQkJIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCisJCQkJCQkJCSBJdGVtUG9p bnRlciBjb25mbGljdFRpZCwKKwkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpwbGFuU2xvdCwK KwkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICoqcmV0dXJuaW5nKTsKIHN0YXRpYyBUdXBsZVRh YmxlU2xvdCAqRXhlY1ByZXBhcmVUdXBsZVJvdXRpbmcoTW9kaWZ5VGFibGVTdGF0ZSAqbXRz dGF0ZSwKIAkJCQkJCQkJCQkJICAgRVN0YXRlICplc3RhdGUsCiAJCQkJCQkJCQkJCSAgIFBh cnRpdGlvblR1cGxlUm91dGluZyAqcHJvdXRlLApAQCAtMTA2Nyw2ICsxMDc4LDI2IEBAIEV4 ZWNJbnNlcnQoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAogCQkJCQllbHNlCiAJCQkJ CQlnb3RvIHZsb2NrOwogCQkJCX0KKwkJCQllbHNlIGlmIChvbmNvbmZsaWN0ID09IE9OQ09O RkxJQ1RfU0VMRUNUKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogSW4gY2FzZSBvZiBPTiBD T05GTElDVCBETyBTRUxFQ1QsIG9wdGlvbmFsbHkgbG9jayB0aGUKKwkJCQkJICogY29uZmxp Y3RpbmcgdHVwbGUsIGZldGNoIGl0IGFuZCBwcm9qZWN0IFJFVFVSTklORyBvbgorCQkJCQkg KiBpdC4gQmUgcHJlcGFyZWQgdG8gcmV0cnkgaWYgZmV0Y2hpbmcgZmFpbHMgYmVjYXVzZSBv ZiBhCisJCQkJCSAqIGNvbmN1cnJlbnQgVVBEQVRFL0RFTEVURSB0byB0aGUgY29uZmxpY3Qg dHVwbGUuCisJCQkJCSAqLworCQkJCQlUdXBsZVRhYmxlU2xvdCAqcmV0dXJuaW5nID0gTlVM TDsKKworCQkJCQlpZiAoRXhlY09uQ29uZmxpY3RTZWxlY3QoY29udGV4dCwgcmVzdWx0UmVs SW5mbywKKwkJCQkJCQkJCQkJICZjb25mbGljdFRpZCwgcGxhblNsb3QsCisJCQkJCQkJCQkJ CSAmcmV0dXJuaW5nKSkKKwkJCQkJeworCQkJCQkJSW5zdHJDb3VudEZpbHRlcmVkMigmbXRz dGF0ZS0+cHMsIDEpOworCQkJCQkJcmV0dXJuIHJldHVybmluZzsKKwkJCQkJfQorCQkJCQll bHNlCisJCQkJCQlnb3RvIHZsb2NrOworCQkJCX0KIAkJCQllbHNlCiAJCQkJewogCQkJCQkv KgpAQCAtMjUxMCw1MiArMjU0MSwyNiBAQCByZWRvX2FjdDoKIH0KIAogLyoKLSAqIEV4ZWNP bkNvbmZsaWN0VXBkYXRlIC0tLSBleGVjdXRlIFVQREFURSBvZiBJTlNFUlQgT04gQ09ORkxJ Q1QgRE8gVVBEQVRFCi0gKgotICogVHJ5IHRvIGxvY2sgdHVwbGUgZm9yIHVwZGF0ZSBhcyBw YXJ0IG9mIHNwZWN1bGF0aXZlIGluc2VydGlvbi4gIElmCi0gKiBhIHF1YWwgb3JpZ2luYXRp bmcgZnJvbSBPTiBDT05GTElDVCBETyBVUERBVEUgaXMgc2F0aXNmaWVkLCB1cGRhdGUKLSAq IChidXQgc3RpbGwgbG9jayByb3csIGV2ZW4gdGhvdWdoIGl0IG1heSBub3Qgc2F0aXNmeSBl c3RhdGUncwotICogc25hcHNob3QpLgotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB3ZSdyZSBk b25lICh3aXRoIG9yIHdpdGhvdXQgYW4gdXBkYXRlKSwgb3IgZmFsc2UgaWYKLSAqIHRoZSBj YWxsZXIgbXVzdCByZXRyeSB0aGUgSU5TRVJUIGZyb20gc2NyYXRjaC4KKyAqIEV4ZWNPbkNv bmZsaWN0TG9ja1JvdyAtLS0gbG9jayB0aGUgcm93IGZvciBPTiBDT05GTElDVCBETyBVUERB VEUvU0VMRUNUCiAgKi8KIHN0YXRpYyBib29sCi1FeGVjT25Db25mbGljdFVwZGF0ZShNb2Rp ZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCi0JCQkJCSBSZXN1bHRSZWxJbmZvICpyZXN1bHRS ZWxJbmZvLAotCQkJCQkgSXRlbVBvaW50ZXIgY29uZmxpY3RUaWQsCi0JCQkJCSBUdXBsZVRh YmxlU2xvdCAqZXhjbHVkZWRTbG90LAotCQkJCQkgYm9vbCBjYW5TZXRUYWcsCi0JCQkJCSBU dXBsZVRhYmxlU2xvdCAqKnJldHVybmluZykKK0V4ZWNPbkNvbmZsaWN0TG9ja1JvdyhNb2Rp ZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCisJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKmV4aXN0 aW5nLAorCQkJCQkgIEl0ZW1Qb2ludGVyIGNvbmZsaWN0VGlkLAorCQkJCQkgIFJlbGF0aW9u IHJlbGF0aW9uLAorCQkJCQkgIExvY2tUdXBsZU1vZGUgbG9ja21vZGUsCisJCQkJCSAgYm9v bCBpc1VwZGF0ZSkKIHsKLQlNb2RpZnlUYWJsZVN0YXRlICptdHN0YXRlID0gY29udGV4dC0+ bXRzdGF0ZTsKLQlFeHByQ29udGV4dCAqZWNvbnRleHQgPSBtdHN0YXRlLT5wcy5wc19FeHBy Q29udGV4dDsKLQlSZWxhdGlvbglyZWxhdGlvbiA9IHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0 aW9uRGVzYzsKLQlFeHByU3RhdGUgICpvbkNvbmZsaWN0U2V0V2hlcmUgPSByZXN1bHRSZWxJ bmZvLT5yaV9vbkNvbmZsaWN0LT5vY19XaGVyZUNsYXVzZTsKLQlUdXBsZVRhYmxlU2xvdCAq ZXhpc3RpbmcgPSByZXN1bHRSZWxJbmZvLT5yaV9vbkNvbmZsaWN0LT5vY19FeGlzdGluZzsK IAlUTV9GYWlsdXJlRGF0YSB0bWZkOwotCUxvY2tUdXBsZU1vZGUgbG9ja21vZGU7CiAJVE1f UmVzdWx0CXRlc3Q7CiAJRGF0dW0JCXhtaW5EYXR1bTsKIAlUcmFuc2FjdGlvbklkIHhtaW47 CiAJYm9vbAkJaXNudWxsOwogCiAJLyoKLQkgKiBQYXJzZSBhbmFseXNpcyBzaG91bGQgaGF2 ZSBibG9ja2VkIE9OIENPTkZMSUNUIGZvciBhbGwgc3lzdGVtCi0JICogcmVsYXRpb25zLCB3 aGljaCBpbmNsdWRlcyB0aGVzZS4gIFRoZXJlJ3Mgbm8gZnVuZGFtZW50YWwgb2JzdGFjbGUg dG8KLQkgKiBzdXBwb3J0aW5nIHRoaXM7IHdlJ2QganVzdCBuZWVkIHRvIGhhbmRsZSBMT0NL VEFHX1RVUExFIGxpa2UgdGhlIG90aGVyCi0JICogRXhlY1VwZGF0ZSgpIGNhbGxlci4KLQkg Ki8KLQlBc3NlcnQoIXJlc3VsdFJlbEluZm8tPnJpX25lZWRMb2NrVGFnVHVwbGUpOwotCi0J LyogRGV0ZXJtaW5lIGxvY2sgbW9kZSB0byB1c2UgKi8KLQlsb2NrbW9kZSA9IEV4ZWNVcGRh dGVMb2NrTW9kZShjb250ZXh0LT5lc3RhdGUsIHJlc3VsdFJlbEluZm8pOwotCi0JLyoKLQkg KiBMb2NrIHR1cGxlIGZvciB1cGRhdGUuICBEb24ndCBmb2xsb3cgdXBkYXRlcyB3aGVuIHR1 cGxlIGNhbm5vdCBiZQotCSAqIGxvY2tlZCB3aXRob3V0IGRvaW5nIHNvLiAgQSByb3cgbG9j a2luZyBjb25mbGljdCBoZXJlIG1lYW5zIG91cgotCSAqIHByZXZpb3VzIGNvbmNsdXNpb24g dGhhdCB0aGUgdHVwbGUgaXMgY29uY2x1c2l2ZWx5IGNvbW1pdHRlZCBpcyBub3QKLQkgKiB0 cnVlIGFueW1vcmUuCisJICogRG9uJ3QgZm9sbG93IHVwZGF0ZXMgd2hlbiB0dXBsZSBjYW5u b3QgYmUgbG9ja2VkIHdpdGhvdXQgZG9pbmcgc28uICBBCisJICogcm93IGxvY2tpbmcgY29u ZmxpY3QgaGVyZSBtZWFucyBvdXIgcHJldmlvdXMgY29uY2x1c2lvbiB0aGF0IHRoZSB0dXBs ZQorCSAqIGlzIGNvbmNsdXNpdmVseSBjb21taXR0ZWQgaXMgbm90IHRydWUgYW55bW9yZS4K IAkgKi8KIAl0ZXN0ID0gdGFibGVfdHVwbGVfbG9jayhyZWxhdGlvbiwgY29uZmxpY3RUaWQs CiAJCQkJCQkJY29udGV4dC0+ZXN0YXRlLT5lc19zbmFwc2hvdCwKQEAgLTI1OTcsNyArMjYw Miw3IEBAIEV4ZWNPbkNvbmZsaWN0VXBkYXRlKE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4 dCwKIAkJCQkJCShlcnJjb2RlKEVSUkNPREVfQ0FSRElOQUxJVFlfVklPTEFUSU9OKSwKIAkJ CQkvKiB0cmFuc2xhdG9yOiAlcyBpcyBhIFNRTCBjb21tYW5kIG5hbWUgKi8KIAkJCQkJCSBl cnJtc2coIiVzIGNvbW1hbmQgY2Fubm90IGFmZmVjdCByb3cgYSBzZWNvbmQgdGltZSIsCi0J CQkJCQkJCSJPTiBDT05GTElDVCBETyBVUERBVEUiKSwKKwkJCQkJCQkJaXNVcGRhdGUgPyAi T04gQ09ORkxJQ1QgRE8gVVBEQVRFIiA6ICJPTiBDT05GTElDVCBETyBTRUxFQ1QiKSwKIAkJ CQkJCSBlcnJoaW50KCJFbnN1cmUgdGhhdCBubyByb3dzIHByb3Bvc2VkIGZvciBpbnNlcnRp b24gd2l0aGluIHRoZSBzYW1lIGNvbW1hbmQgaGF2ZSBkdXBsaWNhdGUgY29uc3RyYWluZWQg dmFsdWVzLiIpKSk7CiAKIAkJCS8qIFRoaXMgc2hvdWxkbid0IGhhcHBlbiAqLwpAQCAtMjY1 NCw2ICsyNjU5LDUwIEBAIEV4ZWNPbkNvbmZsaWN0VXBkYXRlKE1vZGlmeVRhYmxlQ29udGV4 dCAqY29udGV4dCwKIAl9CiAKIAkvKiBTdWNjZXNzLCB0aGUgdHVwbGUgaXMgbG9ja2VkLiAq LworCXJldHVybiB0cnVlOworfQorCisvKgorICogRXhlY09uQ29uZmxpY3RVcGRhdGUgLS0t IGV4ZWN1dGUgVVBEQVRFIG9mIElOU0VSVCBPTiBDT05GTElDVCBETyBVUERBVEUKKyAqCisg KiBUcnkgdG8gbG9jayB0dXBsZSBmb3IgdXBkYXRlIGFzIHBhcnQgb2Ygc3BlY3VsYXRpdmUg aW5zZXJ0aW9uLiAgSWYKKyAqIGEgcXVhbCBvcmlnaW5hdGluZyBmcm9tIE9OIENPTkZMSUNU IERPIFVQREFURSBpcyBzYXRpc2ZpZWQsIHVwZGF0ZQorICogKGJ1dCBzdGlsbCBsb2NrIHJv dywgZXZlbiB0aG91Z2ggaXQgbWF5IG5vdCBzYXRpc2Z5IGVzdGF0ZSdzCisgKiBzbmFwc2hv dCkuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHdlJ3JlIGRvbmUgKHdpdGggb3Igd2l0aG91 dCBhbiB1cGRhdGUpLCBvciBmYWxzZSBpZgorICogdGhlIGNhbGxlciBtdXN0IHJldHJ5IHRo ZSBJTlNFUlQgZnJvbSBzY3JhdGNoLgorICovCitzdGF0aWMgYm9vbAorRXhlY09uQ29uZmxp Y3RVcGRhdGUoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAorCQkJCQkgUmVzdWx0UmVs SW5mbyAqcmVzdWx0UmVsSW5mbywKKwkJCQkJIEl0ZW1Qb2ludGVyIGNvbmZsaWN0VGlkLAor CQkJCQkgVHVwbGVUYWJsZVNsb3QgKmV4Y2x1ZGVkU2xvdCwKKwkJCQkJIGJvb2wgY2FuU2V0 VGFnLAorCQkJCQkgVHVwbGVUYWJsZVNsb3QgKipyZXR1cm5pbmcpCit7CisJTW9kaWZ5VGFi bGVTdGF0ZSAqbXRzdGF0ZSA9IGNvbnRleHQtPm10c3RhdGU7CisJRXhwckNvbnRleHQgKmVj b250ZXh0ID0gbXRzdGF0ZS0+cHMucHNfRXhwckNvbnRleHQ7CisJUmVsYXRpb24JcmVsYXRp b24gPSByZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2M7CisJRXhwclN0YXRlICAqb25D b25mbGljdFNldFdoZXJlID0gcmVzdWx0UmVsSW5mby0+cmlfb25Db25mbGljdC0+b2NfV2hl cmVDbGF1c2U7CisJVHVwbGVUYWJsZVNsb3QgKmV4aXN0aW5nID0gcmVzdWx0UmVsSW5mby0+ cmlfb25Db25mbGljdC0+b2NfRXhpc3Rpbmc7CisJTG9ja1R1cGxlTW9kZSBsb2NrbW9kZTsK KworCS8qCisJICogUGFyc2UgYW5hbHlzaXMgc2hvdWxkIGhhdmUgYmxvY2tlZCBPTiBDT05G TElDVCBmb3IgYWxsIHN5c3RlbQorCSAqIHJlbGF0aW9ucywgd2hpY2ggaW5jbHVkZXMgdGhl c2UuICBUaGVyZSdzIG5vIGZ1bmRhbWVudGFsIG9ic3RhY2xlIHRvCisJICogc3VwcG9ydGlu ZyB0aGlzOyB3ZSdkIGp1c3QgbmVlZCB0byBoYW5kbGUgTE9DS1RBR19UVVBMRSBsaWtlIHRo ZSBvdGhlcgorCSAqIEV4ZWNVcGRhdGUoKSBjYWxsZXIuCisJICovCisJQXNzZXJ0KCFyZXN1 bHRSZWxJbmZvLT5yaV9uZWVkTG9ja1RhZ1R1cGxlKTsKKworCS8qIERldGVybWluZSBsb2Nr IG1vZGUgdG8gdXNlICovCisJbG9ja21vZGUgPSBFeGVjVXBkYXRlTG9ja01vZGUoY29udGV4 dC0+ZXN0YXRlLCByZXN1bHRSZWxJbmZvKTsKKworCS8qIExvY2sgdHVwbGUgZm9yIHVwZGF0 ZS4gKi8KKwlpZiAoIUV4ZWNPbkNvbmZsaWN0TG9ja1Jvdyhjb250ZXh0LCBleGlzdGluZywg Y29uZmxpY3RUaWQsCisJCQkJCQkJICAgcmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNj LCBsb2NrbW9kZSwgdHJ1ZSkpCisJCXJldHVybiBmYWxzZTsKIAogCS8qCiAJICogVmVyaWZ5 IHRoYXQgdGhlIHR1cGxlIGlzIHZpc2libGUgdG8gb3VyIE1WQ0Mgc25hcHNob3QgaWYgdGhl IGN1cnJlbnQKQEAgLTI3MzcsNiArMjc4NiwxMDEgQEAgRXhlY09uQ29uZmxpY3RVcGRhdGUo TW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAogCXJldHVybiB0cnVlOwogfQogCisvKgor ICogRXhlY09uQ29uZmxpY3RTZWxlY3QgLS0tIGV4ZWN1dGUgU0VMRUNUIG9mIElOU0VSVCBP TiBDT05GTElDVCBETyBTRUxFQ1QKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgaWYgd2UncmUg ZG9uZSAod2l0aCBvciB3aXRob3V0IGFuIHVwZGF0ZSksIG9yIGZhbHNlIGlmIHRoZQorICog Y2FsbGVyIG11c3QgcmV0cnkgdGhlIElOU0VSVCBmcm9tIHNjcmF0Y2guCisgKi8KK3N0YXRp YyBib29sCitFeGVjT25Db25mbGljdFNlbGVjdChNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRl eHQsCisJCQkJCSBSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAorCQkJCQkgSXRlbVBv aW50ZXIgY29uZmxpY3RUaWQsCisJCQkJCSBUdXBsZVRhYmxlU2xvdCAqcGxhblNsb3QsCisJ CQkJCSBUdXBsZVRhYmxlU2xvdCAqKnJldHVybmluZykKK3sKKwlNb2RpZnlUYWJsZVN0YXRl ICptdHN0YXRlID0gY29udGV4dC0+bXRzdGF0ZTsKKwlFeHByQ29udGV4dCAqZWNvbnRleHQg PSBtdHN0YXRlLT5wcy5wc19FeHByQ29udGV4dDsKKwlSZWxhdGlvbglyZWxhdGlvbiA9IHJl c3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYzsKKwlFeHByU3RhdGUgICpvbkNvbmZsaWN0 U2VsZWN0V2hlcmUgPSByZXN1bHRSZWxJbmZvLT5yaV9vbkNvbmZsaWN0LT5vY19XaGVyZUNs YXVzZTsKKwlUdXBsZVRhYmxlU2xvdCAqZXhpc3RpbmcgPSByZXN1bHRSZWxJbmZvLT5yaV9v bkNvbmZsaWN0LT5vY19FeGlzdGluZzsKKwlMb2NrQ2xhdXNlU3RyZW5ndGggbG9ja3N0cmVu Z3RoID0gcmVzdWx0UmVsSW5mby0+cmlfb25Db25mbGljdExvY2tpbmdTdHJlbmd0aDsKKwor CS8qCisJICogUGFyc2UgYW5hbHlzaXMgc2hvdWxkIGhhdmUgYmxvY2tlZCBPTiBDT05GTElD VCBmb3IgYWxsIHN5c3RlbQorCSAqIHJlbGF0aW9ucywgd2hpY2ggaW5jbHVkZXMgdGhlc2Uu ICBUaGVyZSdzIG5vIGZ1bmRhbWVudGFsIG9ic3RhY2xlIHRvCisJICogc3VwcG9ydGluZyB0 aGlzOyB3ZSdkIGp1c3QgbmVlZCB0byBoYW5kbGUgTE9DS1RBR19UVVBMRSBsaWtlIHRoZSBv dGhlcgorCSAqIEV4ZWNVcGRhdGUoKSBjYWxsZXIuCisJICovCisJQXNzZXJ0KCFyZXN1bHRS ZWxJbmZvLT5yaV9uZWVkTG9ja1RhZ1R1cGxlKTsKKworCWlmIChsb2Nrc3RyZW5ndGggIT0g TENTX05PTkUpCisJeworCQlMb2NrVHVwbGVNb2RlIGxvY2ttb2RlOworCisJCXN3aXRjaCAo bG9ja3N0cmVuZ3RoKQorCQl7CisJCQljYXNlIExDU19GT1JLRVlTSEFSRToKKwkJCQlsb2Nr bW9kZSA9IExvY2tUdXBsZUtleVNoYXJlOworCQkJCWJyZWFrOworCQkJY2FzZSBMQ1NfRk9S U0hBUkU6CisJCQkJbG9ja21vZGUgPSBMb2NrVHVwbGVTaGFyZTsKKwkJCQlicmVhazsKKwkJ CWNhc2UgTENTX0ZPUk5PS0VZVVBEQVRFOgorCQkJCWxvY2ttb2RlID0gTG9ja1R1cGxlTm9L ZXlFeGNsdXNpdmU7CisJCQkJYnJlYWs7CisJCQljYXNlIExDU19GT1JVUERBVEU6CisJCQkJ bG9ja21vZGUgPSBMb2NrVHVwbGVFeGNsdXNpdmU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0 OgorCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGxvY2sgc3RyZW5ndGggJWQiLCBsb2Nr c3RyZW5ndGgpOworCQl9CisKKwkJaWYgKCFFeGVjT25Db25mbGljdExvY2tSb3coY29udGV4 dCwgZXhpc3RpbmcsIGNvbmZsaWN0VGlkLAorCQkJCQkJCQkgICByZXN1bHRSZWxJbmZvLT5y aV9SZWxhdGlvbkRlc2MsIGxvY2ttb2RlLCBmYWxzZSkpCisJCQlyZXR1cm4gZmFsc2U7CisJ fQorCWVsc2UKKwl7CisJCWlmICghdGFibGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24ocmVs YXRpb24sIGNvbmZsaWN0VGlkLCBTbmFwc2hvdEFueSwgZXhpc3RpbmcpKQorCQkJcmV0dXJu IGZhbHNlOworCX0KKworCS8qCisJICogRm9yIHRoZSBzYW1lIHJlYXNvbnMgYXMgRXhlY09u Q29uZmxpY3RVcGRhdGUsIHdlIG11c3QgdmVyaWZ5IHRoYXQgdGhlCisJICogdHVwbGUgaXMg dmlzaWJsZSB0byBvdXIgc25hcHNob3QuCisJICovCisJRXhlY0NoZWNrVHVwbGVWaXNpYmxl KGNvbnRleHQtPmVzdGF0ZSwgcmVsYXRpb24sIGV4aXN0aW5nKTsKKworCS8qCisJICogTWFr ZSB0aGUgdHVwbGUgYXZhaWxhYmxlIHRvIEV4ZWNRdWFsIGFuZCBFeGVjUHJvamVjdC4gIEVY Q0xVREVEIGlzIG5vdAorCSAqIHVzZWQgYXQgYWxsLgorCSAqLworCWVjb250ZXh0LT5lY3h0 X3NjYW50dXBsZSA9IGV4aXN0aW5nOworCWVjb250ZXh0LT5lY3h0X2lubmVydHVwbGUgPSBO VUxMOworCWVjb250ZXh0LT5lY3h0X291dGVydHVwbGUgPSBOVUxMOworCisJaWYgKCFFeGVj UXVhbChvbkNvbmZsaWN0U2VsZWN0V2hlcmUsIGVjb250ZXh0KSkKKwl7CisJCUV4ZWNDbGVh clR1cGxlKGV4aXN0aW5nKTsJLyogc2VlIHJldHVybiBiZWxvdyAqLworCQlJbnN0ckNvdW50 RmlsdGVyZWQxKCZtdHN0YXRlLT5wcywgMSk7CisJCXJldHVybiB0cnVlOwkJCS8qIGRvbmUg d2l0aCB0aGUgdHVwbGUgKi8KKwl9CisKKwkvKiBQYXJzZSBhbmFseXNpcyBzaG91bGQgYWxy ZWFkeSBoYXZlIGRpc2FsbG93ZWQgdGhpcyAqLworCUFzc2VydChyZXN1bHRSZWxJbmZvLT5y aV9wcm9qZWN0UmV0dXJuaW5nKTsKKworCSpyZXR1cm5pbmcgPSBFeGVjUHJvY2Vzc1JldHVy bmluZyhyZXN1bHRSZWxJbmZvLCBleGlzdGluZywgcGxhblNsb3QpOworCisJLyoKKwkgKiBD bGVhciBvdXQgZXhpc3RpbmcgdHVwbGUsIGFzIHRoZXJlIG1pZ2h0IG5vdCBiZSBhbm90aGVy IGNvbmZsaWN0IGFtb25nCisJICogdGhlIG5leHQgaW5wdXQgcm93cy4gRG9uJ3Qgd2FudCB0 byBob2xkIHJlc291cmNlcyB0aWxsIHRoZSBlbmQgb2YgdGhlCisJICogcXVlcnkuCisJICov CisJRXhlY0NsZWFyVHVwbGUoZXhpc3RpbmcpOworCXJldHVybiB0cnVlOworfQorCiAvKgog ICogUGVyZm9ybSBNRVJHRS4KICAqLwpAQCAtNDYzOSw2ICs0NzgzLDM0IEBAIEV4ZWNJbml0 TW9kaWZ5VGFibGUoTW9kaWZ5VGFibGUgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZs YWdzKQogCQkJb25jb25mbC0+b2NfV2hlcmVDbGF1c2UgPSBxdWFsZXhwcjsKIAkJfQogCX0K KwllbHNlIGlmIChub2RlLT5vbkNvbmZsaWN0QWN0aW9uID09IE9OQ09ORkxJQ1RfU0VMRUNU KQorCXsKKwkJT25Db25mbGljdFNldFN0YXRlICpvbmNvbmZsID0gbWFrZU5vZGUoT25Db25m bGljdFNldFN0YXRlKTsKKworCQkvKiBhbHJlYWR5IGV4aXN0cyBpZiBjcmVhdGVkIGJ5IFJF VFVSTklORyBwcm9jZXNzaW5nIGFib3ZlICovCisJCWlmIChtdHN0YXRlLT5wcy5wc19FeHBy Q29udGV4dCA9PSBOVUxMKQorCQkJRXhlY0Fzc2lnbkV4cHJDb250ZXh0KGVzdGF0ZSwgJm10 c3RhdGUtPnBzKTsKKworCQkvKiBjcmVhdGUgc3RhdGUgZm9yIERPIFNFTEVDVCBvcGVyYXRp b24gKi8KKwkJcmVzdWx0UmVsSW5mby0+cmlfb25Db25mbGljdCA9IG9uY29uZmw7CisKKwkJ LyogaW5pdGlhbGl6ZSBzbG90IGZvciB0aGUgZXhpc3RpbmcgdHVwbGUgKi8KKwkJb25jb25m bC0+b2NfRXhpc3RpbmcgPQorCQkJdGFibGVfc2xvdF9jcmVhdGUocmVzdWx0UmVsSW5mby0+ cmlfUmVsYXRpb25EZXNjLAorCQkJCQkJCSAgJm10c3RhdGUtPnBzLnN0YXRlLT5lc190dXBs ZVRhYmxlKTsKKworCQkvKiBpbml0aWFsaXplIHN0YXRlIHRvIGV2YWx1YXRlIHRoZSBXSEVS RSBjbGF1c2UsIGlmIGFueSAqLworCQlpZiAobm9kZS0+b25Db25mbGljdFdoZXJlKQorCQl7 CisJCQlFeHByU3RhdGUgICpxdWFsZXhwcjsKKworCQkJcXVhbGV4cHIgPSBFeGVjSW5pdFF1 YWwoKExpc3QgKikgbm9kZS0+b25Db25mbGljdFdoZXJlLAorCQkJCQkJCQkJJm10c3RhdGUt PnBzKTsKKwkJCW9uY29uZmwtPm9jX1doZXJlQ2xhdXNlID0gcXVhbGV4cHI7CisJCX0KKwor CQlyZXN1bHRSZWxJbmZvLT5yaV9vbkNvbmZsaWN0TG9ja2luZ1N0cmVuZ3RoID0gbm9kZS0+ b25Db25mbGljdExvY2tpbmdTdHJlbmd0aDsKKwl9CiAKIAkvKgogCSAqIElmIHdlIGhhdmUg YW55IHNlY29uZGFyeSByZWxhdGlvbnMgaW4gYW4gVVBEQVRFIG9yIERFTEVURSwgdGhleSBu ZWVkIHRvCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVw bGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXgg MTc4YzU3MmIwMjEuLmQ5MzRjOTExZmNhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vY3JlYXRlcGxhbi5jCkBAIC03MTQ0LDYgKzcxNDQsNyBAQCBtYWtlX21vZGlmeXRhYmxl KFBsYW5uZXJJbmZvICpyb290LCBQbGFuICpzdWJwbGFuLAogCQlub2RlLT5vbkNvbmZsaWN0 U2V0ID0gTklMOwogCQlub2RlLT5vbkNvbmZsaWN0Q29scyA9IE5JTDsKIAkJbm9kZS0+b25D b25mbGljdFdoZXJlID0gTlVMTDsKKwkJbm9kZS0+b25Db25mbGljdExvY2tpbmdTdHJlbmd0 aCA9IExDU19OT05FOwogCQlub2RlLT5hcmJpdGVySW5kZXhlcyA9IE5JTDsKIAkJbm9kZS0+ ZXhjbFJlbFJUSSA9IDA7CiAJCW5vZGUtPmV4Y2xSZWxUbGlzdCA9IE5JTDsKQEAgLTcxNjIs NiArNzE2Myw3IEBAIG1ha2VfbW9kaWZ5dGFibGUoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4g KnN1YnBsYW4sCiAJCW5vZGUtPm9uQ29uZmxpY3RDb2xzID0KIAkJCWV4dHJhY3RfdXBkYXRl X3RhcmdldGxpc3RfY29sbm9zKG5vZGUtPm9uQ29uZmxpY3RTZXQpOwogCQlub2RlLT5vbkNv bmZsaWN0V2hlcmUgPSBvbmNvbmZsaWN0LT5vbkNvbmZsaWN0V2hlcmU7CisJCW5vZGUtPm9u Q29uZmxpY3RMb2NraW5nU3RyZW5ndGggPSBvbmNvbmZsaWN0LT5sb2NraW5nU3RyZW5ndGg7 CiAKIAkJLyoKIAkJICogSWYgYSBzZXQgb2YgdW5pcXVlIGluZGV4IGluZmVyZW5jZSBlbGVt ZW50cyB3YXMgcHJvdmlkZWQgKGFuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIv YW5hbHl6ZS5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYwppbmRleCAzODY0YTY3 NWQyYS4uN2VlZDM5NWM4ODcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFs eXplLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYwpAQCAtMTA2MSw2ICsx MDYxLDEyIEBAIHRyYW5zZm9ybUluc2VydFN0bXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBJbnNl cnRTdG10ICpzdG10KQogCQkJCQkJIGZhbHNlLCB0cnVlLCB0cnVlKTsKIAl9CiAKKwlpZiAo c3RtdC0+b25Db25mbGljdENsYXVzZSAmJiBzdG10LT5vbkNvbmZsaWN0Q2xhdXNlLT5hY3Rp b24gPT0gT05DT05GTElDVF9TRUxFQ1QgJiYgIXN0bXQtPnJldHVybmluZ0xpc3QpCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJ CSBlcnJtc2coIk9OIENPTkZMSUNUIERPIFNFTEVDVCByZXF1aXJlcyBhIFJFVFVSTklORyBj bGF1c2UiKSwKKwkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgc3RtdC0+b25Db25m bGljdENsYXVzZS0+bG9jYXRpb24pKSk7CisKIAkvKiBQcm9jZXNzIE9OIENPTkZMSUNULCBp ZiBhbnkuICovCiAJaWYgKHN0bXQtPm9uQ29uZmxpY3RDbGF1c2UpCiAJCXFyeS0+b25Db25m bGljdCA9IHRyYW5zZm9ybU9uQ29uZmxpY3RDbGF1c2UocHN0YXRlLApAQCAtMTI4OCw4ICsx Mjk0LDE1IEBAIHRyYW5zZm9ybU9uQ29uZmxpY3RDbGF1c2UoUGFyc2VTdGF0ZSAqcHN0YXRl LAogCQlBc3NlcnQoKFBhcnNlTmFtZXNwYWNlSXRlbSAqKSBsbGFzdChwc3RhdGUtPnBfbmFt ZXNwYWNlKSA9PSBleGNsTlNJdGVtKTsKIAkJcHN0YXRlLT5wX25hbWVzcGFjZSA9IGxpc3Rf ZGVsZXRlX2xhc3QocHN0YXRlLT5wX25hbWVzcGFjZSk7CiAJfQorCWVsc2UgaWYgKG9uQ29u ZmxpY3RDbGF1c2UtPmFjdGlvbiA9PSBPTkNPTkZMSUNUX1NFTEVDVCkKKwl7CisJCW9uQ29u ZmxpY3RXaGVyZSA9IHRyYW5zZm9ybVdoZXJlQ2xhdXNlKHBzdGF0ZSwKKwkJCQkJCQkJCQkJ ICAgb25Db25mbGljdENsYXVzZS0+d2hlcmVDbGF1c2UsCisJCQkJCQkJCQkJCSAgIEVYUFJf S0lORF9XSEVSRSwgIldIRVJFIik7CisKKwl9CiAKLQkvKiBGaW5hbGx5LCBidWlsZCBPTiBD T05GTElDVCBETyBbTk9USElORyB8IFVQREFURV0gZXhwcmVzc2lvbiAqLworCS8qIEZpbmFs bHksIGJ1aWxkIE9OIENPTkZMSUNUIERPIFtOT1RISU5HIHwgU0VMRUNUIHwgVVBEQVRFXSBl eHByZXNzaW9uICovCiAJcmVzdWx0ID0gbWFrZU5vZGUoT25Db25mbGljdEV4cHIpOwogCiAJ cmVzdWx0LT5hY3Rpb24gPSBvbkNvbmZsaWN0Q2xhdXNlLT5hY3Rpb247CkBAIC0xMjk3LDYg KzEzMTAsNyBAQCB0cmFuc2Zvcm1PbkNvbmZsaWN0Q2xhdXNlKFBhcnNlU3RhdGUgKnBzdGF0 ZSwKIAlyZXN1bHQtPmFyYml0ZXJXaGVyZSA9IGFyYml0ZXJXaGVyZTsKIAlyZXN1bHQtPmNv bnN0cmFpbnQgPSBhcmJpdGVyQ29uc3RyYWludDsKIAlyZXN1bHQtPm9uQ29uZmxpY3RTZXQg PSBvbkNvbmZsaWN0U2V0OworCXJlc3VsdC0+bG9ja2luZ1N0cmVuZ3RoID0gb25Db25mbGlj dENsYXVzZS0+bG9ja2luZ1N0cmVuZ3RoOwogCXJlc3VsdC0+b25Db25mbGljdFdoZXJlID0g b25Db25mbGljdFdoZXJlOwogCXJlc3VsdC0+ZXhjbFJlbEluZGV4ID0gZXhjbFJlbEluZGV4 OwogCXJlc3VsdC0+ZXhjbFJlbFRsaXN0ID0gZXhjbFJlbFRsaXN0OwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkK aW5kZXggNjdlYjk2Mzk2YWYuLjZkNjRkNDI3MzE2IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9wYXJzZXIvZ3JhbS55CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTQ2 NSw3ICs0NjUsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hh ciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogJXR5cGUgPGl2YWw+ CSBPcHROb0xvZwogJXR5cGUgPG9uY29tbWl0PiBPbkNvbW1pdE9wdGlvbgogCi0ldHlwZSA8 aXZhbD4JZm9yX2xvY2tpbmdfc3RyZW5ndGgKKyV0eXBlIDxpdmFsPglmb3JfbG9ja2luZ19z dHJlbmd0aCBvcHRfZm9yX2xvY2tpbmdfc3RyZW5ndGgKICV0eXBlIDxub2RlPglmb3JfbG9j a2luZ19pdGVtCiAldHlwZSA8bGlzdD4JZm9yX2xvY2tpbmdfY2xhdXNlIG9wdF9mb3JfbG9j a2luZ19jbGF1c2UgZm9yX2xvY2tpbmdfaXRlbXMKICV0eXBlIDxsaXN0Pglsb2NrZWRfcmVs c19saXN0CkBAIC0xMjI2MSwxMiArMTIyNjEsMjQgQEAgaW5zZXJ0X2NvbHVtbl9pdGVtOgog CQk7CiAKIG9wdF9vbl9jb25mbGljdDoKKwkJCU9OIENPTkZMSUNUIG9wdF9jb25mX2V4cHIg RE8gU0VMRUNUIG9wdF9mb3JfbG9ja2luZ19zdHJlbmd0aCB3aGVyZV9jbGF1c2UKKwkJCQl7 CisJCQkJCSQkID0gbWFrZU5vZGUoT25Db25mbGljdENsYXVzZSk7CisJCQkJCSQkLT5hY3Rp b24gPSBPTkNPTkZMSUNUX1NFTEVDVDsKKwkJCQkJJCQtPmluZmVyID0gJDM7CisJCQkJCSQk LT50YXJnZXRMaXN0ID0gTklMOworCQkJCQkkJC0+bG9ja2luZ1N0cmVuZ3RoID0gJDY7CisJ CQkJCSQkLT53aGVyZUNsYXVzZSA9ICQ3OworCQkJCQkkJC0+bG9jYXRpb24gPSBAMTsKKwkJ CQl9CisJCQl8CiAJCQlPTiBDT05GTElDVCBvcHRfY29uZl9leHByIERPIFVQREFURSBTRVQg c2V0X2NsYXVzZV9saXN0CXdoZXJlX2NsYXVzZQogCQkJCXsKIAkJCQkJJCQgPSBtYWtlTm9k ZShPbkNvbmZsaWN0Q2xhdXNlKTsKIAkJCQkJJCQtPmFjdGlvbiA9IE9OQ09ORkxJQ1RfVVBE QVRFOwogCQkJCQkkJC0+aW5mZXIgPSAkMzsKIAkJCQkJJCQtPnRhcmdldExpc3QgPSAkNzsK KwkJCQkJJCQtPmxvY2tpbmdTdHJlbmd0aCA9IExDU19OT05FOwogCQkJCQkkJC0+d2hlcmVD bGF1c2UgPSAkODsKIAkJCQkJJCQtPmxvY2F0aW9uID0gQDE7CiAJCQkJfQpAQCAtMTIyNzcs NiArMTIyODksNyBAQCBvcHRfb25fY29uZmxpY3Q6CiAJCQkJCSQkLT5hY3Rpb24gPSBPTkNP TkZMSUNUX05PVEhJTkc7CiAJCQkJCSQkLT5pbmZlciA9ICQzOwogCQkJCQkkJC0+dGFyZ2V0 TGlzdCA9IE5JTDsKKwkJCQkJJCQtPmxvY2tpbmdTdHJlbmd0aCA9IExDU19OT05FOwogCQkJ CQkkJC0+d2hlcmVDbGF1c2UgPSBOVUxMOwogCQkJCQkkJC0+bG9jYXRpb24gPSBAMTsKIAkJ CQl9CkBAIC0xMzQ3Niw2ICsxMzQ4OSwxMSBAQCBmb3JfbG9ja2luZ19zdHJlbmd0aDoKIAkJ CXwgRk9SIEtFWSBTSEFSRQkJCQkJCXsgJCQgPSBMQ1NfRk9SS0VZU0hBUkU7IH0KIAkJOwog CitvcHRfZm9yX2xvY2tpbmdfc3RyZW5ndGg6CisJCQlmb3JfbG9ja2luZ19zdHJlbmd0aAkJ CQl7ICQkID0gJDE7IH0KKwkJCXwgLyogRU1QVFkgKi8JCQkJCQl7ICQkID0gTENTX05PTkU7 IH0KKwkJOworCiBsb2NrZWRfcmVsc19saXN0OgogCQkJT0YgcXVhbGlmaWVkX25hbWVfbGlz dAkJCQkJeyAkJCA9ICQyOyB9CiAJCQl8IC8qIEVNUFRZICovCQkJCQkJCXsgJCQgPSBOSUw7 IH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jbGF1c2UuYyBiL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jbGF1c2UuYwppbmRleCA5Nzk5MjZiNjA1Mi4uMjE1 ZDRjZDQ2ZDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jbGF1c2Uu YworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfY2xhdXNlLmMKQEAgLTMzMTAsNiAr MzMxMCwxMyBAQCB0cmFuc2Zvcm1PbkNvbmZsaWN0QXJiaXRlcihQYXJzZVN0YXRlICpwc3Rh dGUsCiAJCQkJIGVycmhpbnQoIkZvciBleGFtcGxlLCBPTiBDT05GTElDVCAoY29sdW1uX25h bWUpLiIpLAogCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLAogCQkJCQkJCQkJZXhw ckxvY2F0aW9uKChOb2RlICopIG9uQ29uZmxpY3RDbGF1c2UpKSkpOworCWVsc2UgaWYgKG9u Q29uZmxpY3RDbGF1c2UtPmFjdGlvbiA9PSBPTkNPTkZMSUNUX1NFTEVDVCAmJiAhaW5mZXIp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1Ip LAorCQkJCSBlcnJtc2coIk9OIENPTkZMSUNUIERPIFNFTEVDVCByZXF1aXJlcyBpbmZlcmVu Y2Ugc3BlY2lmaWNhdGlvbiBvciBjb25zdHJhaW50IG5hbWUiKSwKKwkJCQkgZXJyaGludCgi Rm9yIGV4YW1wbGUsIE9OIENPTkZMSUNUIChjb2x1bW5fbmFtZSkuIiksCisJCQkJIHBhcnNl cl9lcnJwb3NpdGlvbihwc3RhdGUsCisJCQkJCQkJCQlleHByTG9jYXRpb24oKE5vZGUgKikg b25Db25mbGljdENsYXVzZSkpKSk7CiAKIAkvKgogCSAqIFRvIHNpbXBsaWZ5IGNlcnRhaW4g YXNwZWN0cyBvZiBpdHMgZGVzaWduLCBzcGVjdWxhdGl2ZSBpbnNlcnRpb24gaW50bwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaAppbmRleCAxODJhNjk1NmJiMC4uMzg2Mzk5ZWU4MzAgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRl L25vZGVzL2V4ZWNub2Rlcy5oCkBAIC01NTIsNiArNTUyLDkgQEAgdHlwZWRlZiBzdHJ1Y3Qg UmVzdWx0UmVsSW5mbwogCS8qIE9OIENPTkZMSUNUIGV2YWx1YXRpb24gc3RhdGUgKi8KIAlP bkNvbmZsaWN0U2V0U3RhdGUgKnJpX29uQ29uZmxpY3Q7CiAKKwkvKiBzdHJlbmdoIG9mIGxv Y2sgZm9yIE9OIENPTkZMSUNUIERPIFNFTEVDVCwgb3IgTENTX05PTkUgKi8KKwlMb2NrQ2xh dXNlU3RyZW5ndGggcmlfb25Db25mbGljdExvY2tpbmdTdHJlbmd0aDsKKwogCS8qIGZvciBN RVJHRSwgbGlzdHMgb2YgTWVyZ2VBY3Rpb25TdGF0ZSAob25lIHBlciBNZXJnZU1hdGNoS2lu ZCkgKi8KIAlMaXN0CSAgICpyaV9NZXJnZUFjdGlvbnNbTlVNX01FUkdFX01BVENIX0tJTkRT XTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvbG9ja29wdGlvbnMuaCBiL3Ny Yy9pbmNsdWRlL25vZGVzL2xvY2tvcHRpb25zLmgKaW5kZXggMDQ0ZWY0MmVlMTAuLmZmYTkw ZjlhNzFmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9sb2Nrb3B0aW9ucy5oCisr KyBiL3NyYy9pbmNsdWRlL25vZGVzL2xvY2tvcHRpb25zLmgKQEAgLTIwLDcgKzIwLDggQEAK ICAqLwogdHlwZWRlZiBlbnVtIExvY2tDbGF1c2VTdHJlbmd0aAogewotCUxDU19OT05FLAkJ CQkJLyogbm8gc3VjaCBjbGF1c2UgLSBvbmx5IHVzZWQgaW4gUGxhblJvd01hcmsgKi8KKwlM Q1NfTk9ORSwJCQkJCS8qIG5vIHN1Y2ggY2xhdXNlIC0gb25seSB1c2VkIGluIFBsYW5Sb3dN YXJrCisJCQkJCQkJCSAqIGFuZCBPTiBDT05GTElDVCBTRUxFQ1QgKi8KIAlMQ1NfRk9SS0VZ U0hBUkUsCQkJLyogRk9SIEtFWSBTSEFSRSAqLwogCUxDU19GT1JTSEFSRSwJCQkJLyogRk9S IFNIQVJFICovCiAJTENTX0ZPUk5PS0VZVVBEQVRFLAkJCS8qIEZPUiBOTyBLRVkgVVBEQVRF ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvbm9kZXMuaAppbmRleCBjMWFiM2QxMzU4ZC4uY2VjODc1NGJkYzUgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9k ZXMvbm9kZXMuaApAQCAtNDE4LDYgKzQxOCw3IEBAIHR5cGVkZWYgZW51bSBPbkNvbmZsaWN0 QWN0aW9uCiAJT05DT05GTElDVF9OT05FLAkJCS8qIE5vICJPTiBDT05GTElDVCIgY2xhdXNl ICovCiAJT05DT05GTElDVF9OT1RISU5HLAkJCS8qIE9OIENPTkZMSUNUIC4uLiBETyBOT1RI SU5HICovCiAJT05DT05GTElDVF9VUERBVEUsCQkJLyogT04gQ09ORkxJQ1QgLi4uIERPIFVQ REFURSAqLworCU9OQ09ORkxJQ1RfU0VMRUNULAkJCS8qIE9OIENPTkZMSUNUIC4uLiBETyBT RUxFQ1QgKi8KIH0gT25Db25mbGljdEFjdGlvbjsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9k ZXMuaAppbmRleCAwZjk0NjI0OTNlMy4uZWYyMDJlMDE3ZjUgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJz ZW5vZGVzLmgKQEAgLTE2MjEsOSArMTYyMSwxMSBAQCB0eXBlZGVmIHN0cnVjdCBJbmZlckNs YXVzZQogdHlwZWRlZiBzdHJ1Y3QgT25Db25mbGljdENsYXVzZQogewogCU5vZGVUYWcJCXR5 cGU7Ci0JT25Db25mbGljdEFjdGlvbiBhY3Rpb247CS8qIERPIE5PVEhJTkcgb3IgVVBEQVRF PyAqLworCU9uQ29uZmxpY3RBY3Rpb24gYWN0aW9uOwkvKiBETyBOT1RISU5HLCBTRUxFQ1Qg b3IgVVBEQVRFPyAqLwogCUluZmVyQ2xhdXNlICppbmZlcjsJCQkvKiBPcHRpb25hbCBpbmRl eCBpbmZlcmVuY2UgY2xhdXNlICovCiAJTGlzdAkgICAqdGFyZ2V0TGlzdDsJCS8qIHRoZSB0 YXJnZXQgbGlzdCAob2YgUmVzVGFyZ2V0KSAqLworCUxvY2tDbGF1c2VTdHJlbmd0aCBsb2Nr aW5nU3RyZW5ndGg7IC8qIHN0cmVuZ2ggb2YgbG9jayBmb3IgRE8gU0VMRUNULCBvcgorCQkJ CQkJCQkJCSAqIExDU19OT05FICovCiAJTm9kZQkgICAqd2hlcmVDbGF1c2U7CS8qIHF1YWxp ZmljYXRpb25zICovCiAJUGFyc2VMb2MJbG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwg b3IgLTEgaWYgdW5rbm93biAqLwogfSBPbkNvbmZsaWN0Q2xhdXNlOwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFu bm9kZXMuaAppbmRleCA1MmYyOWJjZGI2OS4uNGZlMjJkMTFkZGIgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3Bs YW5ub2Rlcy5oCkBAIC0yNDcsNiArMjQ3LDggQEAgdHlwZWRlZiBzdHJ1Y3QgTW9kaWZ5VGFi bGUKIAlMaXN0CSAgICphcmJpdGVySW5kZXhlczsgLyogTGlzdCBvZiBPTiBDT05GTElDVCBh cmJpdGVyIGluZGV4IE9JRHMgICovCiAJTGlzdAkgICAqb25Db25mbGljdFNldDsJLyogSU5T RVJUIE9OIENPTkZMSUNUIERPIFVQREFURSB0YXJnZXRsaXN0ICovCiAJTGlzdAkgICAqb25D b25mbGljdENvbHM7IC8qIHRhcmdldCBjb2x1bW4gbnVtYmVycyBmb3Igb25Db25mbGljdFNl dCAqLworCUxvY2tDbGF1c2VTdHJlbmd0aCBvbkNvbmZsaWN0TG9ja2luZ1N0cmVuZ3RoOwkv KiBsb2NrIHN0cmVuZ3RoIGZvciBPTgorCQkJCQkJCQkJCQkJCSAqIENPTkZMSUNUIFNFTEVD VCAqLwogCU5vZGUJICAgKm9uQ29uZmxpY3RXaGVyZTsJLyogV0hFUkUgZm9yIE9OIENPTkZM SUNUIFVQREFURSAqLwogCUluZGV4CQlleGNsUmVsUlRJOwkJLyogUlRJIG9mIHRoZSBFWENM VURFRCBwc2V1ZG8gcmVsYXRpb24gKi8KIAlMaXN0CSAgICpleGNsUmVsVGxpc3Q7CS8qIHRs aXN0IG9mIHRoZSBFWENMVURFRCBwc2V1ZG8gcmVsYXRpb24gKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5v ZGVzLmgKaW5kZXggYjBlZjE5NTJlOGYuLjViMWYzZDc2YTk4IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmlt bm9kZXMuaApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9hdHRudW0uaCIK ICNpbmNsdWRlICJub2Rlcy9iaXRtYXBzZXQuaCIKICNpbmNsdWRlICJub2Rlcy9wZ19saXN0 LmgiCisjaW5jbHVkZSAibm9kZXMvbG9ja29wdGlvbnMuaCIKIAogCiB0eXBlZGVmIGVudW0g T3ZlcnJpZGluZ0tpbmQKQEAgLTIzMjksOSArMjMzMCwxNSBAQCB0eXBlZGVmIHN0cnVjdCBP bkNvbmZsaWN0RXhwcgogCU5vZGUJICAgKmFyYml0ZXJXaGVyZTsJLyogdW5pcXVlIGluZGV4 IGFyYml0ZXIgV0hFUkUgY2xhdXNlICovCiAJT2lkCQkJY29uc3RyYWludDsJCS8qIHBnX2Nv bnN0cmFpbnQgT0lEIGZvciBhcmJpdGVyICovCiAKKwkvKiBib3RoIE9OIENPTkZMSUNUIFNF TEVDVCBhbmQgVVBEQVRFICovCisJTm9kZQkgICAqb25Db25mbGljdFdoZXJlOwkvKiBxdWFs aWZpZXJzIHRvIHJlc3RyaWN0IFNFTEVDVC9VUERBVEUgdG8gKi8KKworCS8qIE9OIENPTkZM SUNUIFNFTEVDVCAqLworCUxvY2tDbGF1c2VTdHJlbmd0aCBsb2NraW5nU3RyZW5ndGg7IC8q IHN0cmVuZ2ggb2YgbG9jayBmb3IgRE8gU0VMRUNULCBvcgorCQkJCQkJCQkJCSAqIExDU19O T05FICovCisKIAkvKiBPTiBDT05GTElDVCBVUERBVEUgKi8KIAlMaXN0CSAgICpvbkNvbmZs aWN0U2V0OwkvKiBMaXN0IG9mIE9OIENPTkZMSUNUIFNFVCBUYXJnZXRFbnRyeXMgKi8KLQlO b2RlCSAgICpvbkNvbmZsaWN0V2hlcmU7CS8qIHF1YWxpZmllcnMgdG8gcmVzdHJpY3QgVVBE QVRFIHRvICovCiAJaW50CQkJZXhjbFJlbEluZGV4OwkvKiBSVCBpbmRleCBvZiAnZXhjbHVk ZWQnIHJlbGF0aW9uICovCiAJTGlzdAkgICAqZXhjbFJlbFRsaXN0OwkvKiB0bGlzdCBvZiB0 aGUgRVhDTFVERUQgcHNldWRvIHJlbGF0aW9uICovCiB9IE9uQ29uZmxpY3RFeHByOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbnNlcnRfY29uZmxpY3Qub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbnNlcnRfY29uZmxpY3Qub3V0CmluZGV4 IGZkZDBmNmM4ZjI1Li5mOGYxNTBkODllNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9pbnNlcnRfY29uZmxpY3Qub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvaW5zZXJ0X2NvbmZsaWN0Lm91dApAQCAtMjQ5LDYgKzI0OSw1NiBAQCBpbnNl cnQgaW50byBpbnNlcnRjb25mbGljdHRlc3QgdmFsdWVzICgyLCAnT3JhbmdlJykgb24gY29u ZmxpY3QgKGtleSwga2V5LCBrZXkpCiBpbnNlcnQgaW50byBpbnNlcnRjb25mbGljdHRlc3QK IHZhbHVlcyAoMSwgJ0FwcGxlJyksICgyLCAnT3JhbmdlJykKIG9uIGNvbmZsaWN0IChrZXkp IGRvIHVwZGF0ZSBzZXQgKGZydWl0LCBrZXkpID0gKGV4Y2x1ZGVkLmZydWl0LCBleGNsdWRl ZC5rZXkpOworLS0gRE8gU0VMRUNUCitkZWxldGUgZnJvbSBpbnNlcnRjb25mbGljdHRlc3Qg d2hlcmUgZnJ1aXQgPSAnQXBwbGUnOworaW5zZXJ0IGludG8gaW5zZXJ0Y29uZmxpY3R0ZXN0 IHZhbHVlcyAoMSwgJ0FwcGxlJykgb24gY29uZmxpY3QgKGtleSkgZG8gc2VsZWN0OyAtLSBm YWlscworRVJST1I6ICBPTiBDT05GTElDVCBETyBTRUxFQ1QgcmVxdWlyZXMgYSBSRVRVUk5J TkcgY2xhdXNlCitMSU5FIDE6IC4uLm5zZXJ0IGludG8gaW5zZXJ0Y29uZmxpY3R0ZXN0IHZh bHVlcyAoMSwgJ0FwcGxlJykgb24gY29uZmxpYy4uLgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK2luc2VydCBpbnRv IGluc2VydGNvbmZsaWN0dGVzdCB2YWx1ZXMgKDEsICdBcHBsZScpIG9uIGNvbmZsaWN0IChr ZXkpIGRvIHNlbGVjdCByZXR1cm5pbmcgKjsKKyBrZXkgfCBmcnVpdCAKKy0tLS0tKy0tLS0t LS0KKyAgIDEgfCBBcHBsZQorKDEgcm93KQorCitpbnNlcnQgaW50byBpbnNlcnRjb25mbGlj dHRlc3QgdmFsdWVzICgxLCAnQXBwbGUnKSBvbiBjb25mbGljdCAoa2V5KSBkbyBzZWxlY3Qg cmV0dXJuaW5nICo7Cisga2V5IHwgZnJ1aXQgCistLS0tLSstLS0tLS0tCisgICAxIHwgQXBw bGUKKygxIHJvdykKKworaW5zZXJ0IGludG8gaW5zZXJ0Y29uZmxpY3R0ZXN0IHZhbHVlcyAo MSwgJ0FwcGxlJykgb24gY29uZmxpY3QgKGtleSkgZG8gc2VsZWN0IHdoZXJlIGZydWl0IDw+ ICdBcHBsZScgcmV0dXJuaW5nICo7Cisga2V5IHwgZnJ1aXQgCistLS0tLSstLS0tLS0tCiso MCByb3dzKQorCitkZWxldGUgZnJvbSBpbnNlcnRjb25mbGljdHRlc3Qgd2hlcmUgZnJ1aXQg PSAnQXBwbGUnOworaW5zZXJ0IGludG8gaW5zZXJ0Y29uZmxpY3R0ZXN0IHZhbHVlcyAoMSwg J0FwcGxlJykgb24gY29uZmxpY3QgKGtleSkgZG8gc2VsZWN0IGZvciB1cGRhdGUgcmV0dXJu aW5nICo7Cisga2V5IHwgZnJ1aXQgCistLS0tLSstLS0tLS0tCisgICAxIHwgQXBwbGUKKygx IHJvdykKKworaW5zZXJ0IGludG8gaW5zZXJ0Y29uZmxpY3R0ZXN0IHZhbHVlcyAoMSwgJ0Fw cGxlJykgb24gY29uZmxpY3QgKGtleSkgZG8gc2VsZWN0IGZvciB1cGRhdGUgcmV0dXJuaW5n ICo7Cisga2V5IHwgZnJ1aXQgCistLS0tLSstLS0tLS0tCisgICAxIHwgQXBwbGUKKygxIHJv dykKKworaW5zZXJ0IGludG8gaW5zZXJ0Y29uZmxpY3R0ZXN0IHZhbHVlcyAoMSwgJ0FwcGxl Jykgb24gY29uZmxpY3QgKGtleSkgZG8gc2VsZWN0IGZvciB1cGRhdGUgd2hlcmUgZnJ1aXQg PD4gJ0FwcGxlJyByZXR1cm5pbmcgKjsKKyBrZXkgfCBmcnVpdCAKKy0tLS0tKy0tLS0tLS0K KygwIHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikgaW5zZXJ0IGludG8gaW5zZXJ0Y29u ZmxpY3R0ZXN0IHZhbHVlcyAoMSwgJ0FwcGxlJykgb24gY29uZmxpY3QgKGtleSkgZG8gc2Vs ZWN0IGZvciBrZXkgc2hhcmUgcmV0dXJuaW5nICo7CisgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEluc2VydCBvbiBpbnNlcnRjb25mbGljdHRlc3QKKyAgIENv bmZsaWN0IFJlc29sdXRpb246IFNFTEVDVCBGT1IgS0VZIFNIQVJFCisgICBDb25mbGljdCBB cmJpdGVyIEluZGV4ZXM6IGtleV9pbmRleAorICAgLT4gIFJlc3VsdAorKDQgcm93cykKKwog LS0gR2l2ZSBnb29kIGRpYWdub3N0aWMgbWVzc2FnZSB3aGVuIEVYQ0xVREVELiogc3B1cmlv dXNseSByZWZlcmVuY2VkIGZyb20KIC0tIFJFVFVSTklORzoKIGluc2VydCBpbnRvIGluc2Vy dGNvbmZsaWN0dGVzdCB2YWx1ZXMgKDEsICdBcHBsZScpIG9uIGNvbmZsaWN0IChrZXkpIGRv IHVwZGF0ZSBzZXQgZnJ1aXQgPSBleGNsdWRlZC5mcnVpdCBSRVRVUk5JTkcgZXhjbHVkZWQu ZnJ1aXQ7CkBAIC03MzUsMTMgKzc4NSw1OCBAQCBpbnNlcnQgaW50byBzZWxmY29uZmxpY3Qg dmFsdWVzICg2LDEpLCAoNiwyKSBvbiBjb25mbGljdChmMSkgZG8gdXBkYXRlIHNldCBmMiA9 CiBFUlJPUjogIE9OIENPTkZMSUNUIERPIFVQREFURSBjb21tYW5kIGNhbm5vdCBhZmZlY3Qg cm93IGEgc2Vjb25kIHRpbWUKIEhJTlQ6ICBFbnN1cmUgdGhhdCBubyByb3dzIHByb3Bvc2Vk IGZvciBpbnNlcnRpb24gd2l0aGluIHRoZSBzYW1lIGNvbW1hbmQgaGF2ZSBkdXBsaWNhdGUg Y29uc3RyYWluZWQgdmFsdWVzLgogY29tbWl0OworYmVnaW4gdHJhbnNhY3Rpb24gaXNvbGF0 aW9uIGxldmVsIHJlYWQgY29tbWl0dGVkOworaW5zZXJ0IGludG8gc2VsZmNvbmZsaWN0IHZh bHVlcyAoNywxKSwgKDcsMikgb24gY29uZmxpY3QoZjEpIGRvIHNlbGVjdCByZXR1cm5pbmcg KjsKKyBmMSB8IGYyIAorLS0tLSstLS0tCisgIDcgfCAgMQorICA3IHwgIDEKKygyIHJvd3Mp CisKK2NvbW1pdDsKK2JlZ2luIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCByZXBlYXRh YmxlIHJlYWQ7CitpbnNlcnQgaW50byBzZWxmY29uZmxpY3QgdmFsdWVzICg4LDEpLCAoOCwy KSBvbiBjb25mbGljdChmMSkgZG8gc2VsZWN0IHJldHVybmluZyAqOworIGYxIHwgZjIgCist LS0tKy0tLS0KKyAgOCB8ICAxCisgIDggfCAgMQorKDIgcm93cykKKworY29tbWl0OworYmVn aW4gdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIHNlcmlhbGl6YWJsZTsKK2luc2VydCBp bnRvIHNlbGZjb25mbGljdCB2YWx1ZXMgKDksMSksICg5LDIpIG9uIGNvbmZsaWN0KGYxKSBk byBzZWxlY3QgcmV0dXJuaW5nICo7CisgZjEgfCBmMiAKKy0tLS0rLS0tLQorICA5IHwgIDEK KyAgOSB8ICAxCisoMiByb3dzKQorCitjb21taXQ7CitiZWdpbiB0cmFuc2FjdGlvbiBpc29s YXRpb24gbGV2ZWwgcmVhZCBjb21taXR0ZWQ7CitpbnNlcnQgaW50byBzZWxmY29uZmxpY3Qg dmFsdWVzICgxMCwxKSwgKDEwLDIpIG9uIGNvbmZsaWN0KGYxKSBkbyBzZWxlY3QgZm9yIHVw ZGF0ZSByZXR1cm5pbmcgKjsKK0VSUk9SOiAgT04gQ09ORkxJQ1QgRE8gU0VMRUNUIGNvbW1h bmQgY2Fubm90IGFmZmVjdCByb3cgYSBzZWNvbmQgdGltZQorSElOVDogIEVuc3VyZSB0aGF0 IG5vIHJvd3MgcHJvcG9zZWQgZm9yIGluc2VydGlvbiB3aXRoaW4gdGhlIHNhbWUgY29tbWFu ZCBoYXZlIGR1cGxpY2F0ZSBjb25zdHJhaW5lZCB2YWx1ZXMuCitjb21taXQ7CitiZWdpbiB0 cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgcmVwZWF0YWJsZSByZWFkOworaW5zZXJ0IGlu dG8gc2VsZmNvbmZsaWN0IHZhbHVlcyAoMTEsMSksICgxMSwyKSBvbiBjb25mbGljdChmMSkg ZG8gc2VsZWN0IGZvciB1cGRhdGUgcmV0dXJuaW5nICo7CitFUlJPUjogIE9OIENPTkZMSUNU IERPIFNFTEVDVCBjb21tYW5kIGNhbm5vdCBhZmZlY3Qgcm93IGEgc2Vjb25kIHRpbWUKK0hJ TlQ6ICBFbnN1cmUgdGhhdCBubyByb3dzIHByb3Bvc2VkIGZvciBpbnNlcnRpb24gd2l0aGlu IHRoZSBzYW1lIGNvbW1hbmQgaGF2ZSBkdXBsaWNhdGUgY29uc3RyYWluZWQgdmFsdWVzLgor Y29tbWl0OworYmVnaW4gdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIHNlcmlhbGl6YWJs ZTsKK2luc2VydCBpbnRvIHNlbGZjb25mbGljdCB2YWx1ZXMgKDEyLDEpLCAoMTIsMikgb24g Y29uZmxpY3QoZjEpIGRvIHNlbGVjdCBmb3IgdXBkYXRlIHJldHVybmluZyAqOworRVJST1I6 ICBPTiBDT05GTElDVCBETyBTRUxFQ1QgY29tbWFuZCBjYW5ub3QgYWZmZWN0IHJvdyBhIHNl Y29uZCB0aW1lCitISU5UOiAgRW5zdXJlIHRoYXQgbm8gcm93cyBwcm9wb3NlZCBmb3IgaW5z ZXJ0aW9uIHdpdGhpbiB0aGUgc2FtZSBjb21tYW5kIGhhdmUgZHVwbGljYXRlIGNvbnN0cmFp bmVkIHZhbHVlcy4KK2NvbW1pdDsKIHNlbGVjdCAqIGZyb20gc2VsZmNvbmZsaWN0OwogIGYx IHwgZjIgCiAtLS0tKy0tLS0KICAgMSB8ICAxCiAgIDIgfCAgMQogICAzIHwgIDEKLSgzIHJv d3MpCisgIDcgfCAgMQorICA4IHwgIDEKKyAgOSB8ICAxCisoNiByb3dzKQogCiBkcm9wIHRh YmxlIHNlbGZjb25mbGljdDsKIC0tIGNoZWNrIE9OIENPTkZMSUNUIGhhbmRsaW5nIHdpdGgg cGFydGl0aW9uZWQgdGFibGVzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9p bnNlcnRfY29uZmxpY3Quc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaW5zZXJ0X2NvbmZs aWN0LnNxbAppbmRleCA1NDljNDY0NTJlYy4uNmEzMjI4YTU4MzYgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2luc2VydF9jb25mbGljdC5zcWwKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvaW5zZXJ0X2NvbmZsaWN0LnNxbApAQCAtMTAxLDYgKzEwMSwxOSBAQCBp bnNlcnQgaW50byBpbnNlcnRjb25mbGljdHRlc3QKIHZhbHVlcyAoMSwgJ0FwcGxlJyksICgy LCAnT3JhbmdlJykKIG9uIGNvbmZsaWN0IChrZXkpIGRvIHVwZGF0ZSBzZXQgKGZydWl0LCBr ZXkpID0gKGV4Y2x1ZGVkLmZydWl0LCBleGNsdWRlZC5rZXkpOwogCistLSBETyBTRUxFQ1QK K2RlbGV0ZSBmcm9tIGluc2VydGNvbmZsaWN0dGVzdCB3aGVyZSBmcnVpdCA9ICdBcHBsZSc7 CitpbnNlcnQgaW50byBpbnNlcnRjb25mbGljdHRlc3QgdmFsdWVzICgxLCAnQXBwbGUnKSBv biBjb25mbGljdCAoa2V5KSBkbyBzZWxlY3Q7IC0tIGZhaWxzCitpbnNlcnQgaW50byBpbnNl cnRjb25mbGljdHRlc3QgdmFsdWVzICgxLCAnQXBwbGUnKSBvbiBjb25mbGljdCAoa2V5KSBk byBzZWxlY3QgcmV0dXJuaW5nICo7CitpbnNlcnQgaW50byBpbnNlcnRjb25mbGljdHRlc3Qg dmFsdWVzICgxLCAnQXBwbGUnKSBvbiBjb25mbGljdCAoa2V5KSBkbyBzZWxlY3QgcmV0dXJu aW5nICo7CitpbnNlcnQgaW50byBpbnNlcnRjb25mbGljdHRlc3QgdmFsdWVzICgxLCAnQXBw bGUnKSBvbiBjb25mbGljdCAoa2V5KSBkbyBzZWxlY3Qgd2hlcmUgZnJ1aXQgPD4gJ0FwcGxl JyByZXR1cm5pbmcgKjsKK2RlbGV0ZSBmcm9tIGluc2VydGNvbmZsaWN0dGVzdCB3aGVyZSBm cnVpdCA9ICdBcHBsZSc7CitpbnNlcnQgaW50byBpbnNlcnRjb25mbGljdHRlc3QgdmFsdWVz ICgxLCAnQXBwbGUnKSBvbiBjb25mbGljdCAoa2V5KSBkbyBzZWxlY3QgZm9yIHVwZGF0ZSBy ZXR1cm5pbmcgKjsKK2luc2VydCBpbnRvIGluc2VydGNvbmZsaWN0dGVzdCB2YWx1ZXMgKDEs ICdBcHBsZScpIG9uIGNvbmZsaWN0IChrZXkpIGRvIHNlbGVjdCBmb3IgdXBkYXRlIHJldHVy bmluZyAqOworaW5zZXJ0IGludG8gaW5zZXJ0Y29uZmxpY3R0ZXN0IHZhbHVlcyAoMSwgJ0Fw cGxlJykgb24gY29uZmxpY3QgKGtleSkgZG8gc2VsZWN0IGZvciB1cGRhdGUgd2hlcmUgZnJ1 aXQgPD4gJ0FwcGxlJyByZXR1cm5pbmcgKjsKKworZXhwbGFpbiAoY29zdHMgb2ZmKSBpbnNl cnQgaW50byBpbnNlcnRjb25mbGljdHRlc3QgdmFsdWVzICgxLCAnQXBwbGUnKSBvbiBjb25m bGljdCAoa2V5KSBkbyBzZWxlY3QgZm9yIGtleSBzaGFyZSByZXR1cm5pbmcgKjsKKwogLS0g R2l2ZSBnb29kIGRpYWdub3N0aWMgbWVzc2FnZSB3aGVuIEVYQ0xVREVELiogc3B1cmlvdXNs eSByZWZlcmVuY2VkIGZyb20KIC0tIFJFVFVSTklORzoKIGluc2VydCBpbnRvIGluc2VydGNv bmZsaWN0dGVzdCB2YWx1ZXMgKDEsICdBcHBsZScpIG9uIGNvbmZsaWN0IChrZXkpIGRvIHVw ZGF0ZSBzZXQgZnJ1aXQgPSBleGNsdWRlZC5mcnVpdCBSRVRVUk5JTkcgZXhjbHVkZWQuZnJ1 aXQ7CkBAIC00NTQsNiArNDY3LDMwIEBAIGJlZ2luIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBs ZXZlbCBzZXJpYWxpemFibGU7CiBpbnNlcnQgaW50byBzZWxmY29uZmxpY3QgdmFsdWVzICg2 LDEpLCAoNiwyKSBvbiBjb25mbGljdChmMSkgZG8gdXBkYXRlIHNldCBmMiA9IDA7CiBjb21t aXQ7CiAKK2JlZ2luIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCByZWFkIGNvbW1pdHRl ZDsKK2luc2VydCBpbnRvIHNlbGZjb25mbGljdCB2YWx1ZXMgKDcsMSksICg3LDIpIG9uIGNv bmZsaWN0KGYxKSBkbyBzZWxlY3QgcmV0dXJuaW5nICo7Citjb21taXQ7CisKK2JlZ2luIHRy YW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCByZXBlYXRhYmxlIHJlYWQ7CitpbnNlcnQgaW50 byBzZWxmY29uZmxpY3QgdmFsdWVzICg4LDEpLCAoOCwyKSBvbiBjb25mbGljdChmMSkgZG8g c2VsZWN0IHJldHVybmluZyAqOworY29tbWl0OworCitiZWdpbiB0cmFuc2FjdGlvbiBpc29s YXRpb24gbGV2ZWwgc2VyaWFsaXphYmxlOworaW5zZXJ0IGludG8gc2VsZmNvbmZsaWN0IHZh bHVlcyAoOSwxKSwgKDksMikgb24gY29uZmxpY3QoZjEpIGRvIHNlbGVjdCByZXR1cm5pbmcg KjsKK2NvbW1pdDsKKworYmVnaW4gdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIHJlYWQg Y29tbWl0dGVkOworaW5zZXJ0IGludG8gc2VsZmNvbmZsaWN0IHZhbHVlcyAoMTAsMSksICgx MCwyKSBvbiBjb25mbGljdChmMSkgZG8gc2VsZWN0IGZvciB1cGRhdGUgcmV0dXJuaW5nICo7 Citjb21taXQ7CisKK2JlZ2luIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCByZXBlYXRh YmxlIHJlYWQ7CitpbnNlcnQgaW50byBzZWxmY29uZmxpY3QgdmFsdWVzICgxMSwxKSwgKDEx LDIpIG9uIGNvbmZsaWN0KGYxKSBkbyBzZWxlY3QgZm9yIHVwZGF0ZSByZXR1cm5pbmcgKjsK K2NvbW1pdDsKKworYmVnaW4gdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIHNlcmlhbGl6 YWJsZTsKK2luc2VydCBpbnRvIHNlbGZjb25mbGljdCB2YWx1ZXMgKDEyLDEpLCAoMTIsMikg b24gY29uZmxpY3QoZjEpIGRvIHNlbGVjdCBmb3IgdXBkYXRlIHJldHVybmluZyAqOworY29t bWl0OworCiBzZWxlY3QgKiBmcm9tIHNlbGZjb25mbGljdDsKIAogZHJvcCB0YWJsZSBzZWxm Y29uZmxpY3Q7Ci0tIAoyLjQ1LjIKCg== --------------cH8bE6JTUrKcFCGbsA7PpQh8--