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 1sdxx2-002hJR-6f for pgsql-hackers@arkaria.postgresql.org; Tue, 13 Aug 2024 20:17:05 +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 1sdxx0-006Py1-UA for pgsql-hackers@arkaria.postgresql.org; Tue, 13 Aug 2024 20:17:02 +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 1sdxts-006NAd-96 for pgsql-hackers@lists.postgresql.org; Tue, 13 Aug 2024 20:13:48 +0000 Received: from lahtoruutu.iki.fi ([2a0b:5c81:1c1::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 1sdxtn-004hlQ-6s for pgsql-hackers@postgresql.org; Tue, 13 Aug 2024 20:13:47 +0000 Received: from [192.168.1.110] (dsl-hkibng22-54f8db-125.dhcp.inet.fi [84.248.219.125]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4Wk2dc0KFrz49Pv3; Tue, 13 Aug 2024 23:13:39 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1723580020; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=nlLRO3hlZSoo4S9VyH1OCkuFyfi0CA7/ooTkUcXG2Yw=; b=Pf+WfdxSo+HKP4JliO4pAs2QxGZH0Hdm7aoj69Jzsh/GNKvg+lIB28X0aZJLFzCyPa+XNP ITHcPPGMra2EDV3fYETOYzK1HoNtVjcgHT1iD9jEjM7+S4Z5G7YQsFHMqni9TaxywKxTYY oUbPa3cMIwep3yoTEueMwLrahEOLibXIVfWIlV/6QlTbSVAaegZC5OxqxvoCA4Si9cgL0N o7xRBxoG3IN2IZkisj42i+D4+4URQoSBawkqFZ6P6Qj44Le3GiIbDkYaqSZlQFL7sDX6r6 SMZKHKOQGMQOx/Wqif2Ft2gbDSayYsOyP6cAXhyeDx5AHLXluEtIxIk+FBlsqQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1723580020; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=nlLRO3hlZSoo4S9VyH1OCkuFyfi0CA7/ooTkUcXG2Yw=; b=ogJNvrmgsPLfv0dRZdc1RcNRy90ZeTI0EGTz2uLPVSYHHLckDjMj50ho28+gfII89SprFx MpX5XyH+z26gDe0q7pwryvXFWcbn2FJKnNpU9EoXWfN2HF3WVIjaRDeWsaEOAZLklgrSKi piYMYyne5ChCh8Tq8q02j34fA5lgTBVFNK5qQjBb1HOdXRxN9dVkCvgSGQDfNG/KqFVlp5 LwU8fdwDxWK90B+01Ev2g9Nc09YUXYnxmwwxQWyKe6dd2Jxb2NHUAEo9H7e28VmtapjxIi xWESvNMy3eXVMDmu75S+pQGSYrMLiAzHAY7CpiGo1MwRIcM2uyxR8RQJC9xdAg== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1723580020; a=rsa-sha256; cv=none; b=RZBo+EpIjEW5RyPbtPGXZ7cySv2VnL1dUPH2S3H3ppMeUpSZBbkKmoLrd5g0L0OWt0nr0d HUjue6hyg0ypFWZn78gy4fQWMLH9eK1/ihqVjms0u2Wym4jE+51HuhG4lsA7qvcS0/V5PS gb4YWIpuweV30HxqkwSzWVcORgW03W0LlTQGtCwXPv2qDSrfrqadCQh8ErGFQe+v2t0vkC 8jwyJgDgqsG3QBEIz+f9r5X+4X22snHnWEeKMGHSQUM39w4yH3BDqdLEZ+JRb0sNnH/dVT 6gAvZz6AncnrLREKCz25DMtU2MJ21/WArB3ncnzUz7TImA43oQi0bDnAFYDvyQ== Content-Type: multipart/mixed; boundary="------------Hl0qoWw0UQ5NKOkmbgJFwkxU" Message-ID: Date: Tue, 13 Aug 2024 23:13:39 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: CSN snapshots in hot standby To: "Andrey M. Borodin" , Kirill Reshke Cc: pgsql-hackers References: <08da26cc-95ef-4c0e-9573-8b930f80ce27@iki.fi> <53C9CD5A-4403-4FF0-9F00-8B8A00F922A7@yandex-team.ru> Content-Language: en-US From: Heikki Linnakangas In-Reply-To: <53C9CD5A-4403-4FF0-9F00-8B8A00F922A7@yandex-team.ru> 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. --------------Hl0qoWw0UQ5NKOkmbgJFwkxU Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 05/04/2024 13:49, Andrey M. Borodin wrote: >> On 5 Apr 2024, at 02:08, Kirill Reshke wrote: Thanks for taking a look, Kirill! >> maybe we need some hooks here? Or maybe, we can take CSN here from extension somehow. > > I really like the idea of CSN-provider-as-extension. > But it's very important to move on with CSN, at least on standby, to make CSN actually happen some day. > So, from my perspective, having LSN-as-CSN is already huge step forward. Yeah, I really don't want to expand the scope of this. Here's a new version. Rebased, and lots of comments updated. I added a tiny cache of the CSN lookups into SnapshotData, which can hold the values of 4 XIDs that are known to be visible to the snapshot, and 4 invisible XIDs. This is pretty arbitrary, but the idea is to have something very small to speed up the common cases that 1-2 XIDs are repeatedly looked up, without adding too much overhead. I did some performance testing of the visibility checks using these CSN snapshots. The tests run SELECTs with a SeqScan in a standby, over a table where all the rows have xmin/xmax values that are still in-progress in the primary. Three test scenarios: 1. large-xact: one large transaction inserted all the rows. All rows have the same XMIN, which is still in progress 2. many-subxacts: one large transaction inserted each row in a separate subtransaction. All rows have a different XMIN, but they're all subtransactions of the same top-level transaction. (This causes the subxids cache in the proc array to overflow) 3. few-subxacts: All rows are inserted, committed, and vacuum frozen. Then, using 10 in separate subtransactions, DELETE the rows, in an interleaved fashion. The XMAX values cycle like this "1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, ...". The point of this is that these sub-XIDs fit in the subxids cache in the procarray, but the pattern defeats the simple 4-element cache that I added. The test script I used is attached. I repeated it a few times with master and the patches here, and picked the fastest runs for each. Just eyeballing the results, there's about ~10% variance in these numbers. Smaller is better. Master: large-xact: 4.57732510566711 many-subxacts: 18.6958119869232 few-subxacts: 16.467698097229 Patched: large-xact: 10.2999930381775 many-subxacts: 11.6501438617706 few-subxacts: 19.8457028865814 With cache: large-xact: 3.68792295455933 many-subxacts: 13.3662350177765 few-subxacts: 21.4426419734955 The 'large-xacts' results show that the CSN lookups are slower than the binary search on the 'xids' array. Not a surprise. The 4-element cache fixes the regression, which is also not a surprise. The 'many-subxacts' results show that the CSN lookups are faster than the current method in master, when the subxids cache has overflowed. That makes sense: on master, we always perform a lookup in pg_subtrans, if the suxids cache has overflowed, which is more or less the same overhead as the CSN lookup. But we avoid the binary search on the xids array after that. The 'few-subxacts' shows a regression, when the 4-element cache is not effective. I think that's acceptable, the CSN approach has many benefits, and I don't think this is a very common scenario. But if necessary, it could perhaps be alleviated with more caching, or by trying to compensate by optimizing elsewhere. -- Heikki Linnakangas Neon (https://neon.tech) --------------Hl0qoWw0UQ5NKOkmbgJFwkxU Content-Type: text/x-patch; charset=UTF-8; name="v2-0001-Update-outdated-comment-on-WAL-logged-locks-with-.patch" Content-Disposition: attachment; filename*0="v2-0001-Update-outdated-comment-on-WAL-logged-locks-with-.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA0YmM3YTJiM2M5Yjc0Mzc4NzFhMjJjYWE4ZjVlZTg1NDhmYWNlNGRkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFR1ZSwgMTMgQXVnIDIwMjQgMjA6NDc6NDIgKzAzMDAK U3ViamVjdDogW1BBVENIIHYyIDEvNl0gVXBkYXRlIG91dGRhdGVkIGNvbW1lbnQgb24gV0FM LWxvZ2dlZCBsb2NrcyB3aXRoCiBpbnZhbGlkIFhJRAoKV2UgaGF2ZW4ndCBnZW5lcmF0ZWQg dGhvc2UgZm9yIGEgbG9uZyB0aW1lLgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0 YW5kYnkuYyB8IDEwICsrKy0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMo KyksIDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvc3RhbmRieS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc3RhbmRieS5jCmluZGV4 IDg3MjY3OWNhNDQuLjI1MjY3ZjBmODUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL3N0YW5kYnkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5 LmMKQEAgLTExMjEsNiArMTEyMSw5IEBAIFN0YW5kYnlSZWxlYXNlQWxsTG9ja3Modm9pZCkK ICAqIFN0YW5kYnlSZWxlYXNlT2xkTG9ja3MKICAqCQlSZWxlYXNlIHN0YW5kYnkgbG9ja3Mg aGVsZCBieSB0b3AtbGV2ZWwgWElEcyB0aGF0IGFyZW4ndCBydW5uaW5nLAogICoJCWFzIGxv bmcgYXMgdGhleSdyZSBub3QgcHJlcGFyZWQgdHJhbnNhY3Rpb25zLgorICoKKyAqIFRoaXMg aXMgbmVlZGVkIHRvIHBydW5lIHRoZSBsb2NrcyBvZiBjcmFzaGVkIHRyYW5zYWN0aW9ucywg d2hpY2ggZGlkbid0CisgKiB3cml0ZSBhbiBBQk9SVC9DT01NSVQgcmVjb3JkLgogICovCiB2 b2lkCiBTdGFuZGJ5UmVsZWFzZU9sZExvY2tzKFRyYW5zYWN0aW9uSWQgb2xkeGlkKQpAQCAt MTI2NiwxMyArMTI2OSw2IEBAIHN0YW5kYnlfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29y ZCkKICAqIHRyYW5zYWN0aW9ucyBhbHJlYWR5IGNvbW1pdHRlZCwgc2luY2UgdGhvc2UgY29t bWl0cyByYWNlZCBhaGVhZCB3aGVuCiAgKiBtYWtpbmcgV0FMIGVudHJpZXMuCiAgKgotICog VGhlIGxvb3NlIHRpbWluZyBhbHNvIG1lYW5zIHRoYXQgbG9ja3MgbWF5IGJlIHJlY29yZGVk IHRoYXQgaGF2ZSBhCi0gKiB6ZXJvIHhpZCwgc2luY2UgeGlkcyBhcmUgcmVtb3ZlZCBmcm9t IHByb2NzIGJlZm9yZSBsb2NrcyBhcmUgcmVtb3ZlZC4KLSAqIFNvIHdlIG11c3QgcHJ1bmUg dGhlIGxvY2sgbGlzdCBkb3duIHRvIGVuc3VyZSB3ZSBob2xkIGxvY2tzIG9ubHkgZm9yCi0g KiBjdXJyZW50bHkgcnVubmluZyB4aWRzLCBwZXJmb3JtZWQgYnkgU3RhbmRieVJlbGVhc2VP bGRMb2NrcygpLgotICogWmVybyB4aWRzIHNob3VsZCBubyBsb25nZXIgYmUgcG9zc2libGUs IGJ1dCB3ZSBtYXkgYmUgcmVwbGF5aW5nIFdBTAotICogZnJvbSBhIHRpbWUgd2hlbiB0aGV5 IHdlcmUgcG9zc2libGUuCi0gKgogICogRm9yIGxvZ2ljYWwgZGVjb2Rpbmcgb25seSB0aGUg cnVubmluZyB4YWN0cyBpbmZvcm1hdGlvbiBpcyBuZWVkZWQ7CiAgKiB0aGVyZSdzIG5vIG5l ZWQgdG8gbG9vayBhdCB0aGUgbG9ja2luZyBpbmZvcm1hdGlvbiwgYnV0IGl0J3MgbG9nZ2Vk IGFueXdheSwKICAqIGFzIHRoZXJlJ3Mgbm8gaW5kZXBlbmRlbnQga25vYiB0byBqdXN0IGVu YWJsZSBsb2dpY2FsIGRlY29kaW5nLiBGb3IKLS0gCjIuMzkuMgoK --------------Hl0qoWw0UQ5NKOkmbgJFwkxU Content-Type: text/x-patch; charset=UTF-8; name="v2-0002-XXX-add-perf-test.patch" Content-Disposition: attachment; filename="v2-0002-XXX-add-perf-test.patch" Content-Transfer-Encoding: base64 RnJvbSBmMjQ3OGFiMmRmZTdmZjQ1YjhmYjAxYmEwMTZkNGQwY2ZhOGE5MDllIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFR1ZSwgMTMgQXVnIDIwMjQgMTM6Mjc6MDMgKzAzMDAK U3ViamVjdDogW1BBVENIIHYyIDIvNl0gWFhYOiBhZGQgcGVyZiB0ZXN0CgpUaGlzIGlzIG5v dCBpbnRlbmRlZCB0byBiZSBtZXJnZWQuIEJ1dCBpdCdzIGJlZW4gdXNlZnVsIHRvIGhhdmUg dGhpcwppbiB0aGUgdHJlZSBmb3Igc29tZSBxdWljayBwZXJmIHRlc3RpbmcgZHVyaW5nIGRl dmVsb3BtZW50LgoKVG8gcnVuIGl0LCBJJ3ZlIHVzZWQ6CgooY2QgYnVpbGQtcmVsZWFzZSAm JiBuaW5qYSAmJiAgcm0gLXJmIHRtcF9pbnN0YWxsICYmIG1lc29uIHRlc3QgLS1zdWl0ZSBz ZXR1cCAtLXN1aXRlIHRlc3RfbWlzYzsgZ3JlcCBURVNUIHRlc3RydW4vdGVzdF9taXNjLzAw MF9jc25fcGVyZi9sb2cvcmVncmVzc19sb2dfMDAwX2Nzbl9wZXJmICkKCkl0IHJ1bnMgdGhl IG90aGVyIHRlc3RfbWlzYyB0ZXN0cyBjb25jdXJyZW50bHksIGJ1dCB0aGV5IGZpbmlzaCBh IGxvdApmYXN0ZXIgc28gdGhleSBkb24ndCBhZmZlY3QgdGhlIHJlc3VsdHMgbXVjaC4KLS0t CiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy9tZXNvbi5idWlsZCAgICAgICB8ICAgMSAr CiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAwMF9jc25fcGVyZi5wbCB8IDEzOSAr KysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDE0MCBpbnNlcnRpb25zKCsp CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wMDBf Y3NuX3BlcmYucGwKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy9t ZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21lc29uLmJ1aWxkCmlu ZGV4IDI4M2ZmYTc1MWEuLmU1NWU4MGFmNTQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9taXNjL21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9t aXNjL21lc29uLmJ1aWxkCkBAIC05LDYgKzksNyBAQCB0ZXN0cyArPSB7CiAgICAgICAgJ2Vu YWJsZV9pbmplY3Rpb25fcG9pbnRzJzogZ2V0X29wdGlvbignaW5qZWN0aW9uX3BvaW50cycp ID8gJ3llcycgOiAnbm8nLAogICAgIH0sCiAgICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAw X2Nzbl9wZXJmLnBsJywKICAgICAgICd0LzAwMV9jb25zdHJhaW50X3ZhbGlkYXRpb24ucGwn LAogICAgICAgJ3QvMDAyX3RhYmxlc3BhY2UucGwnLAogICAgICAgJ3QvMDAzX2NoZWNrX2d1 Yy5wbCcsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAwMF9j c25fcGVyZi5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDAwX2Nzbl9wZXJm LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjRhZDdkN2U1ZWIK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAwMF9j c25fcGVyZi5wbApAQCAtMCwwICsxLDEzOSBAQAorCisjIENvcHlyaWdodCAoYykgMjAyMS0y MDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFZlcmlmeSB0 aGF0IEFMVEVSIFRBQkxFIG9wdGltaXplcyBjZXJ0YWluIG9wZXJhdGlvbnMgYXMgZXhwZWN0 ZWQKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKK3VzZSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxz OwordXNlIFRlc3Q6Ok1vcmU7Cit1c2UgVGltZTo6SGlSZXMgcXcodGltZSk7CisKKyMgSW5p dGlhbGl6ZSBhIHRlc3QgY2x1c3RlcgorbXkgJHByaW1hcnkgPSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyLT5uZXcoJ3ByaW1hcnknKTsKKyRwcmltYXJ5LT5pbml0KCk7CisjIFR1cm4g bWVzc2FnZSBsZXZlbCB1cCB0byBERUJVRzEgc28gdGhhdCB3ZSBnZXQgdGhlIG1lc3NhZ2Vz IHdlIHdhbnQgdG8gc2VlCiskcHJpbWFyeS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29u ZicsICdtYXhfd2FsX3NlbmRlcnMgPSA1Jyk7CiskcHJpbWFyeS0+YXBwZW5kX2NvbmYoJ3Bv c3RncmVzcWwuY29uZicsICd3YWxfbGV2ZWw9cmVwbGljYScpOworJHByaW1hcnktPnN0YXJ0 OworJHByaW1hcnktPmJhY2t1cCgnYmtwJyk7CisKK215ICRyZXBsaWNhID0gUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdyZXBsaWNhJyk7CiskcmVwbGljYS0+aW5pdF9mcm9t X2JhY2t1cCgkcHJpbWFyeSwgJ2JrcCcsIGhhc19zdHJlYW1pbmcgPT4gMSk7CiskcmVwbGlj YS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICJzaGFyZWRfYnVmZmVycz0nMSBH QiciKTsKKyRyZXBsaWNhLT5zdGFydDsKKworc3ViIHdhaXRfY2F0Y2h1cAoreworCW15ICgk cHJpbWFyeSwgJHJlcGxpY2EpID0gQF87CisJCisJbXkgJHByaW1hcnlfbHNuID0KKwkgICRw cmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBwZ19jdXJyZW50X3dhbF9s c24oKSIpOworCW15ICRjYXVnaHR1cF9xdWVyeSA9CisJICAiU0VMRUNUICckcHJpbWFyeV9s c24nOjpwZ19sc24gPD0gcGdfbGFzdF93YWxfcmVwbGF5X2xzbigpIjsKKwkkcmVwbGljYS0+ cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLCAkY2F1Z2h0dXBfcXVlcnkpCisJICBvciBk aWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBzdGFuZGJ5IHRvIGNhdGNoIHVwIjsK K30KKworc3ViIHJlcGVhdF9hbmRfdGltZV9zcWwKK3sKKyAgCW15ICgkbmFtZSwgJG5vZGUs ICRyZXBlYXRzLCAkc3FsKSA9IEBfOworCisgICAgbXkgJGJlZ2luX3RpbWUgPSB0aW1lKCk7 CisKKwlsb2NhbCAkRU5We1BHT1BUSU9OU30gPSAiLWMgbWF4X3BhcmFsbGVsX3dvcmtlcnNf cGVyX2dhdGhlcj0wIjsKKwkkbm9kZS0+cGdiZW5jaCgKKwkJIi0tbm8tdmFjdXVtIC0tY2xp ZW50PTEgLS1wcm90b2NvbD1wcmVwYXJlZCAtLXRyYW5zYWN0aW9ucz0kcmVwZWF0cyIsCisJ MCwKKwlbcXJ7cHJvY2Vzc2VkOiAkcmVwZWF0cy8kcmVwZWF0c31dLAorCVtxcnteJH1dLAor CSRuYW1lLAorCXsKKwkJIjAwMF9jc25fcGVyZl8kbmFtZSIgPT4gJHNxbAorCX0pOworCisJ bXkgJGVuZF90aW1lID0gdGltZSgpOworCW15ICRlbGFwc2VkID0gJGVuZF90aW1lIC0gJGJl Z2luX3RpbWU7CisKKwlwYXNzICgiVEVTVCAkbmFtZTogJGVsYXBzZWQiKTsKK30KKworIyBU RVNUIDE6IEEgdHJhbnNhY3Rpb24gaXMgb3BlbiBpbiBwcmltYXJ5IHRoYXQgaW5zZXJ0ZWQg YSBsb3Qgb2YKKyMgcm93cy4gU2VxU2NhbiB0aGUgdGFibGUgb24gdGhlIHJlcGxpY2EuIEl0 IHNlZXMgYWxsIHRoZSBYSURzIGFzIG5vdAorIyBpbi1wcm9ncmVzcworCiskcHJpbWFyeS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUgVEFCTEUgdGJsKGkgaW50KScpOworCitt eSAkcHJpbWFyeV9zZXNzaW9uID0gICRwcmltYXJ5LT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3Rn cmVzJywgb25fZXJyb3JfZGllID0+IDEpOworJHByaW1hcnlfc2Vzc2lvbi0+cXVlcnlfc2Fm ZSgiQkVHSU47Iik7CiskcHJpbWFyeV9zZXNzaW9uLT5xdWVyeV9zYWZlKCJJTlNFUlQgSU5U TyB0YmwgU0VMRUNUIGcgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDAwKSBnOyIpOwor CisjIENvbnN1bWUgb25lIG1vcmUgWElELCB0byBidW1wIHVwICJsYXN0IGNvbW1pdHRlZCBY SUQiCiskcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJzZWxlY3QgdHhpZF9jdXJy ZW50KCkiKTsKKword2FpdF9jYXRjaHVwKCRwcmltYXJ5LCAkcmVwbGljYSk7CisKK3JlcGVh dF9hbmRfdGltZV9zcWwoImxhcmdlLXhhY3QiLCAkcmVwbGljYSwgNTAwMCwgInNlbGVjdCBj b3VudCgqKSBmcm9tIHRibCIpOworCiskcHJpbWFyeV9zZXNzaW9uLT5xdWl0OworJHByaW1h cnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0YmwiKTsKKworIyBURVNU IDI6IExpa2UgJ2xhcmdlLXhhY3QnLCBidXQgd2l0aCBsb3RzIG9mIHN1YnhhY3RzCisKKyRw cmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBUQUJMRSB0YmwoaSBpbnQp Jyk7CisKKyRwcmltYXJ5X3Nlc3Npb24gPSAgJHByaW1hcnktPmJhY2tncm91bmRfcHNxbCgn cG9zdGdyZXMnLCBvbl9lcnJvcl9kaWUgPT4gMSk7CiskcHJpbWFyeV9zZXNzaW9uLT5xdWVy eV9zYWZlKCJCRUdJTjsiKTsKKyRwcmltYXJ5X3Nlc3Npb24tPnF1ZXJ5X3NhZmUocXsKK2Rv ICQkCisgIGJlZ2luCisgICAgZm9yIGkgaW4gMS4uMTAwMDAwIGxvb3AKKyAgICAgIGJlZ2lu CisgICAgICAgIGluc2VydCBpbnRvIHRibCB2YWx1ZXMgKGkpOworICAgICAgZXhjZXB0aW9u CisgICAgICAgIHdoZW4gb3RoZXJzIHRoZW4gcmFpc2UgJ2ZhaWw6ICUnLCBzcWxlcnJtOwor ICAgICAgZW5kOworICAgIGVuZCBsb29wOworICBlbmQKKyQkOworfSk7CisKKyMgQ29uc3Vt ZSBvbmUgbW9yZSBYSUQsIHRvIGJ1bXAgdXAgImxhc3QgY29tbWl0dGVkIFhJRCIKKyRwcmlt YXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgInNlbGVjdCB0eGlkX2N1cnJlbnQoKSIpOwor Cit3YWl0X2NhdGNodXAoJHByaW1hcnksICRyZXBsaWNhKTsKKworcmVwZWF0X2FuZF90aW1l X3NxbCgibWFueS1zdWJ4YWN0cyIsICRyZXBsaWNhLCA1MDAwLCAic2VsZWN0IGNvdW50KCop IGZyb20gdGJsIik7CisKKyRwcmltYXJ5X3Nlc3Npb24tPnF1aXQ7CiskcHJpbWFyeS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRibCIpOworCisKKyMgVEVTVCAzOiBB IG1peCBvZiBhIGhhbmRmdWwgb2YgZGlmZmVyZW50IHN1YnhpZHMKKworJHByaW1hcnktPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAnQ1JFQVRFIFRBQkxFIHRibChpIGludCknKTsKKworJHBy aW1hcnlfc2Vzc2lvbiA9ICAkcHJpbWFyeS0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3Jlcycs IG9uX2Vycm9yX2RpZSA9PiAxKTsKKyRwcmltYXJ5X3Nlc3Npb24tPnF1ZXJ5X3NhZmUoIklO U0VSVCBJTlRPIHRibCBTRUxFQ1QgZyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMDAp IGc7Iik7CiskcHJpbWFyeV9zZXNzaW9uLT5xdWVyeV9zYWZlKCJWQUNVVU0gRlJFRVpFIHRi bDsiKTsKKyRwcmltYXJ5X3Nlc3Npb24tPnF1ZXJ5X3NhZmUoIkJFR0lOOyIpOworCitteSAk YmF0Y2hlcyA9IDEwOworZm9yKG15ICRpID0gMDsgJGkgPCAkYmF0Y2hlczsgJGkrKykgewor CSRwcmltYXJ5X3Nlc3Npb24tPnF1ZXJ5X3NhZmUoIlNBVkVQT0lOVCBzcCRpIik7CisJJHBy aW1hcnlfc2Vzc2lvbi0+cXVlcnlfc2FmZSgiREVMRVRFIEZST00gdGJsIFdIRVJFIGkgJSAk YmF0Y2hlcyA9ICRpIik7Cit9CisKKyMgQ29uc3VtZSBvbmUgbW9yZSBYSUQsIHRvIGJ1bXAg dXAgImxhc3QgY29tbWl0dGVkIFhJRCIKKyRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgInNlbGVjdCB0eGlkX2N1cnJlbnQoKSIpOworCit3YWl0X2NhdGNodXAoJHByaW1hcnks ICRyZXBsaWNhKTsKKworcmVwZWF0X2FuZF90aW1lX3NxbCgiZmV3LXN1YnhhY3RzIiwgJHJl cGxpY2EsIDUwMDAsICJzZWxlY3QgY291bnQoKikgZnJvbSB0YmwiKTsKKworJHByaW1hcnlf c2Vzc2lvbi0+cXVpdDsKKyRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1Ag VEFCTEUgdGJsIik7CisKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjM5LjIKCg== --------------Hl0qoWw0UQ5NKOkmbgJFwkxU Content-Type: text/x-patch; charset=UTF-8; name="v2-0003-Use-CSN-snapshots-during-Hot-Standby.patch" Content-Disposition: attachment; filename="v2-0003-Use-CSN-snapshots-during-Hot-Standby.patch" Content-Transfer-Encoding: base64 RnJvbSAyMTZjMzJiYzkwNDFkZjc0ZDQzZTE3MDY1NGQyZTRhMWViODE5NWVkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFR1ZSwgMTMgQXVnIDIwMjQgMjA6MjY6NDAgKzAzMDAK U3ViamVjdDogW1BBVENIIHYyIDMvNl0gVXNlIENTTiBzbmFwc2hvdHMgZHVyaW5nIEhvdCBT dGFuZGJ5CgpSZXBsYWNlIHRoZSBrbm93bi1hc3NpZ25lZC1YSURzIG1lY2hhbmlzbSB3aXRo IGEgQ1NOIGxvZy4gVGhlIENTTiBsb2cKKHBnX2NzbikgdHJhY2tzIHRoZSBjb21taXQgTFNO IG9mIGVhY2ggdHJhbnNhY3Rpb24sIHdoZW4gcmVwbGF5aW5nIHRoZQpXQUwgb24gYSBzdGFu ZGJ5LiBJdCdzIG9ubHkgdXNlZCBvbiB0aGUgc3RhbmRieSwgYW5kIGlzIGluaXRpYWxpemVk CmZyb20gc2NyYXRjaCBhdCBzZXJ2ZXIgc3RhcnR1cCBsaWtlIHBnX3N1YnRyYW5zLgoKQmFz ZWQgb24gMDAwMS1DU04tYmFzZS1zbmFwc2hvdC5wYXRjaCBmcm9tCmh0dHBzOi8vd3d3LnBv c3RncmVzcWwub3JnL21lc3NhZ2UtaWQvMjAyMDA4MTAwOTUyNTIxMzI3NzI2MSU0MGhpZ2hn by5jYS4KVGhpcyBwYXRjaCBoYXMgYSBsb25nIGxpbmVhZ2UsIHZhcmlvdXMgQ1NOIHBhdGNo ZXMgaGF2ZSBiZWVuIHBvc3RlZAp3aXRoIHBhcnRzIGZyb20gU3RhcyBLZWx2aWNoLCBNb3Zl YWQgTGksIEFudHMgQWFzbWEsIEhlaWtraQpMaW5uYWthbmdhcywgQWxleGFuZGVyIEt1em1l bmtvdgotLS0KIGNvbnRyaWIvcGdfdmlzaWJpbGl0eS9wZ192aXNpYmlsaXR5LmMgICAgICAg ICB8ICAgIDIgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hhY3RkZXNjLmMgICAg ICAgIHwgICAyNiAtCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9NYWtlZmlsZSAgICAg ICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nzbl9sb2cuYyAg ICAgICAgICB8ICA0NzMgKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tZXNv bi5idWlsZCAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3Ry YW5zYW0uYyAgICAgICAgICB8ICAgIDMgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v dHdvcGhhc2UuYyAgICAgICAgIHwgICAzNCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0vdmFyc3VwLmMgICAgICAgICAgIHwgICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94YWN0LmMgICAgICAgICAgICAgfCAgMTM4ICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94bG9nLmMgICAgICAgICAgICAgfCAgMTE4ICstCiBzcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyAgICAgfCAgIDEzICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94bG9ndXRpbHMuYyAgICAgICAgfCAgICAyICstCiBzcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL3N0YXJ0dXAuYyAgICAgICAgICAgICAgfCAgICAyICstCiBzcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jICAgICAgfCAgICA4IC0KIHNyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMgICB8ICAgIDIgKy0KIHNy Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyAgICAgICAgICAgICAgICB8ICAgIDMgKwog c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgICAgICAgICAgIHwgMTUxMiAr Ky0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc3RhbmRieS5jICAg ICAgICAgICAgIHwgIDEwMiArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2x3bG9jay5j ICAgICAgICAgICAgIHwgICAgMiArCiAuLi4vdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9u YW1lcy50eHQgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL3Byb2Jlcy5kICAg ICAgICAgICAgICAgICAgICB8ICAgIDIgKwogc3JjL2JhY2tlbmQvdXRpbHMvdGltZS9zbmFw bWdyLmMgICAgICAgICAgICAgIHwgICAzNyArLQogc3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2Nz bl9sb2cuaCAgICAgICAgICAgICAgICAgIHwgICAzMCArCiBzcmMvaW5jbHVkZS9hY2Nlc3Mv dHJhbnNhbS5oICAgICAgICAgICAgICAgICAgfCAgICAzICsKIHNyYy9pbmNsdWRlL2FjY2Vz cy90d29waGFzZS5oICAgICAgICAgICAgICAgICB8ICAgIDMgKy0KIHNyYy9pbmNsdWRlL2Fj Y2Vzcy94YWN0LmggICAgICAgICAgICAgICAgICAgICB8ICAgMTIgKy0KIHNyYy9pbmNsdWRl L2FjY2Vzcy94bG9ndXRpbHMuaCAgICAgICAgICAgICAgICB8ICAgMzMgKy0KIHNyYy9pbmNs dWRlL3N0b3JhZ2UvbHdsb2NrLmggICAgICAgICAgICAgICAgICB8ICAgIDIgKwogc3JjL2lu Y2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaCAgICAgICAgICAgICAgIHwgICAxMyArLQogc3Jj L2luY2x1ZGUvdXRpbHMvc25hcHNob3QuaCAgICAgICAgICAgICAgICAgIHwgICAgNyArCiAz MSBmaWxlcyBjaGFuZ2VkLCA4MjEgaW5zZXJ0aW9ucygrKSwgMTc2OCBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jc25fbG9n LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9hY2Nlc3MvY3NuX2xvZy5oCgpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ192aXNpYmlsaXR5L3BnX3Zpc2liaWxpdHkuYyBiL2Nv bnRyaWIvcGdfdmlzaWJpbGl0eS9wZ192aXNpYmlsaXR5LmMKaW5kZXggMWExYTRmZjdiZS4u M2UwOTZiOTllMyAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ192aXNpYmlsaXR5L3BnX3Zpc2li aWxpdHkuYworKysgYi9jb250cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jCkBA IC01NDgsNiArNTQ4LDggQEAgY29sbGVjdF92aXNpYmlsaXR5X2RhdGEoT2lkIHJlbGlkLCBi b29sIGluY2x1ZGVfcGQpCiAgKiAgICBkYXRhYmFzZXMgdGhhdCB3ZXJlIGlnbm9yZWQgYmVm b3JlLgogICogMi4gSWdub3JlIEtub3duQXNzaWduZWRYaWRzLCBiZWNhdXNlIHRoZXkgYXJl IG5vdCBkYXRhYmFzZS1hd2FyZS4gQXQgdGhlCiAgKiAgICBzYW1lIHRpbWUsIHRoZSBwcmlt YXJ5IGNvdWxkIGNvbXB1dGUgaXRzIGhvcml6b25zIGRhdGFiYXNlLWF3YXJlLgorICogICAg WFhYIEtub3duQXNzaWduZWRYaWRzIGlzIGdvbmUuIEJ1dCBzZWUgaG93IHRoaXMgcGxheXMg b3V0OgorICogICAgaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC80MjIx OGM0Zi0yYzhkLTQwYTMtODc0My00ZDM0ZGQwZTRjY2UlNDBpa2kuZmkKICAqIDMuIElnbm9y ZSB3YWxzZW5kZXIgeG1pbiwgYmVjYXVzZSBpdCBjb3VsZCBnbyBiYWNrd2FyZCBpZiBzb21l IHJlcGxpY2F0aW9uCiAgKiAgICBjb25uZWN0aW9ucyBkb24ndCB1c2UgcmVwbGljYXRpb24g c2xvdHMuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hh Y3RkZXNjLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGFjdGRlc2MuYwppbmRl eCBkY2NjYTIwMWUwLi5jYmNkZTczYTlmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3Mvcm1ncmRlc2MveGFjdGRlc2MuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRl c2MveGFjdGRlc2MuYwpAQCAtNDIxLDE3ICs0MjEsNiBAQCB4YWN0X2Rlc2NfcHJlcGFyZShT dHJpbmdJbmZvIGJ1ZiwgdWludDggaW5mbywgeGxfeGFjdF9wcmVwYXJlICp4bHJlYywgUmVw T3JpZ2luSQogCQkJCQkJIHRpbWVzdGFtcHR6X3RvX3N0cihwYXJzZWQub3JpZ2luX3RpbWVz dGFtcCkpOwogfQogCi1zdGF0aWMgdm9pZAoteGFjdF9kZXNjX2Fzc2lnbm1lbnQoU3RyaW5n SW5mbyBidWYsIHhsX3hhY3RfYXNzaWdubWVudCAqeGxyZWMpCi17Ci0JaW50CQkJaTsKLQot CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAic3VieGFjdHM6Iik7Ci0KLQlmb3IgKGkg PSAwOyBpIDwgeGxyZWMtPm5zdWJ4YWN0czsgaSsrKQotCQlhcHBlbmRTdHJpbmdJbmZvKGJ1 ZiwgIiAldSIsIHhscmVjLT54c3ViW2ldKTsKLX0KLQogdm9pZAogeGFjdF9kZXNjKFN0cmlu Z0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIHsKQEAgLTQ1OSwxOCArNDQ4 LDYgQEAgeGFjdF9kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29y ZCkKIAkJeGFjdF9kZXNjX3ByZXBhcmUoYnVmLCBYTG9nUmVjR2V0SW5mbyhyZWNvcmQpLCB4 bHJlYywKIAkJCQkJCSAgWExvZ1JlY0dldE9yaWdpbihyZWNvcmQpKTsKIAl9Ci0JZWxzZSBp ZiAoaW5mbyA9PSBYTE9HX1hBQ1RfQVNTSUdOTUVOVCkKLQl7Ci0JCXhsX3hhY3RfYXNzaWdu bWVudCAqeGxyZWMgPSAoeGxfeGFjdF9hc3NpZ25tZW50ICopIHJlYzsKLQotCQkvKgotCQkg KiBOb3RlIHRoYXQgd2UgaWdub3JlIHRoZSBXQUwgcmVjb3JkJ3MgeGlkLCBzaW5jZSB3ZSdy ZSBtb3JlCi0JCSAqIGludGVyZXN0ZWQgaW4gdGhlIHRvcC1sZXZlbCB4aWQgdGhhdCBpc3N1 ZWQgdGhlIHJlY29yZCBhbmQgd2hpY2gKLQkJICogeGlkcyBhcmUgYmVpbmcgcmVwb3J0ZWQg aGVyZS4KLQkJICovCi0JCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAieHRvcCAldTogIiwgeGxy ZWMtPnh0b3ApOwotCQl4YWN0X2Rlc2NfYXNzaWdubWVudChidWYsIHhscmVjKTsKLQl9CiAJ ZWxzZSBpZiAoaW5mbyA9PSBYTE9HX1hBQ1RfSU5WQUxJREFUSU9OUykKIAl7CiAJCXhsX3hh Y3RfaW52YWxzICp4bHJlYyA9ICh4bF94YWN0X2ludmFscyAqKSByZWM7CkBAIC01MDIsOSAr NDc5LDYgQEAgeGFjdF9pZGVudGlmeSh1aW50OCBpbmZvKQogCQljYXNlIFhMT0dfWEFDVF9B Qk9SVF9QUkVQQVJFRDoKIAkJCWlkID0gIkFCT1JUX1BSRVBBUkVEIjsKIAkJCWJyZWFrOwot CQljYXNlIFhMT0dfWEFDVF9BU1NJR05NRU5UOgotCQkJaWQgPSAiQVNTSUdOTUVOVCI7Ci0J CQlicmVhazsKIAkJY2FzZSBYTE9HX1hBQ1RfSU5WQUxJREFUSU9OUzoKIAkJCWlkID0gIklO VkFMSURBVElPTiI7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vTWFrZWZp bGUKaW5kZXggNjYxYzU1YTlkYi4uMjUyMGQ3N2M3YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0vTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vTWFrZWZpbGUKQEAgLTE1LDYgKzE1LDcgQEAgaW5jbHVkZSAkKHRvcF9idWlsZGRp cikvc3JjL01ha2VmaWxlLmdsb2JhbAogT0JKUyA9IFwKIAljbG9nLm8gXAogCWNvbW1pdF90 cy5vIFwKKwljc25fbG9nLm8gXAogCWdlbmVyaWNfeGxvZy5vIFwKIAltdWx0aXhhY3QubyBc CiAJcGFyYWxsZWwubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS9jc25fbG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jc25fbG9nLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNzIzZDNiNjMzZgotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nzbl9sb2cuYwpAQCAt MCwwICsxLDQ3MyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGNzbl9s b2cuYworICoJCVRyYWNrIGNvbW1pdCByZWNvcmQgTFNOcyBvZiBmaW5pc2hlZCB0cmFuc2Fj dGlvbnMKKyAqCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhbiBTTFJVIHRvIHN0b3JlIHRo ZSBMU04gb2YgdGhlIGNvbW1pdCByZWNvcmQgb2YgZWFjaAorICogdHJhbnNhY3Rpb24uIENT TiBzdGFuZHMgZm9yIENvbW1pdCBTZXF1ZW5jZSBOdW1iZXIsIGFuZCBpbiBwcmluY2lwbGUg d2UKKyAqIGNvdWxkIHVzZSBhIHNlcGFyYXRlIGNvdW50ZXIgdGhhdCBpcyBpbmNyZW1lbnRl ZCBhdCBldmVyeSBjb21taXQuIEZvcgorICogc2ltcGxpY2l0eSwgdGhvdWdoLCB3ZSB1c2Ug dGhlIGNvbW1pdCByZWNvcmRzIExTTiBhcyB0aGUgc2VxdWVuY2UgbnVtYmVyLgorICoKKyAq IExpa2UgcGdfc3VidHJhbnMsIHRoaXMgbWFwcGluZyBuZWVkIHRvIGJlIGtlcHQgb25seSBm b3IgeGlkJ3MgZ3JlYXRlciB0aGVuCisgKiBvbGRlc3RYbWluLCBhbmQgZG9lc24ndCBuZWVk IHRvIGJlIHByZXNlcnZlZCBvdmVyIGNyYXNoZXMuICBBbHNvLCB0aGlzIGlzCisgKiBvbmx5 IG5lZWRlZCBpbiBob3Qgc3RhbmRieSBtb2RlLCBhbmQgaW1tZWRpYXRlbHkgYWZ0ZXIgZXhp dGluZyBob3Qgc3RhbmRieQorICogbW9kZSwgdW50aWwgYWxsIG9sZCBzbmFwc2hvdHMgdGFr ZW4gZHVyaW5nIHN0YW5kYnkgbW9kZSBhcmUgZ29uZS4KKyAqCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAxOCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5p dmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0vY3NuX2xvZy5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5j bHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9jbG9nLmgiCisjaW5jbHVk ZSAiYWNjZXNzL2Nzbl9sb2cuaCIKKyNpbmNsdWRlICJhY2Nlc3Mvc2xydS5oIgorI2luY2x1 ZGUgImFjY2Vzcy9zdWJ0cmFucy5oIgorI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCisj aW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAicGdfdHJhY2UuaCIKKyNpbmNsdWRl ICJ1dGlscy9zbmFwbWdyLmgiCisKKy8qCisgKiBEZWZpbmVzIGZvciBDU05Mb2cgcGFnZSBz aXplcy4gIEEgcGFnZSBpcyB0aGUgc2FtZSBCTENLU1ogYXMgaXMgdXNlZAorICogZXZlcnl3 aGVyZSBlbHNlIGluIFBvc3RncmVzLgorICoKKyAqIE5vdGU6IGJlY2F1c2UgVHJhbnNhY3Rp b25JZHMgYXJlIDMyIGJpdHMgYW5kIHdyYXAgYXJvdW5kIGF0IDB4RkZGRkZGRkYsCisgKiBD U05Mb2cgcGFnZSBudW1iZXJpbmcgYWxzbyB3cmFwcyBhcm91bmQgYXQKKyAqIDB4RkZGRkZG RkYvQ1NOX0xPR19YQUNUU19QRVJfUEFHRSwgYW5kIENTTkxvZyBzZWdtZW50IG51bWJlcmlu ZyBhdAorICogMHhGRkZGRkZGRi9DTE9HX1hBQ1RTX1BFUl9QQUdFL1NMUlVfUEFHRVNfUEVS X1NFR01FTlQuICBXZSBuZWVkIHRha2Ugbm8KKyAqIGV4cGxpY2l0IG5vdGljZSBvZiB0aGF0 IGZhY3QgaW4gdGhpcyBtb2R1bGUsIGV4Y2VwdCB3aGVuIGNvbXBhcmluZyBzZWdtZW50Cisg KiBhbmQgcGFnZSBudW1iZXJzIGluIFRydW5jYXRlQ1NOTG9nIChzZWUgQ1NOTG9nUGFnZVBy ZWNlZGVzKS4KKyAqLworCisvKiBXZSBzdG9yZSB0aGUgY29tbWl0IENTTiBmb3IgZWFjaCB4 aWQgKi8KKyNkZWZpbmUgQ1NOX0xPR19YQUNUU19QRVJfUEFHRSAoQkxDS1NaIC8gc2l6ZW9m KFhMb2dSZWNQdHIpKQorCisjZGVmaW5lIFRyYW5zYWN0aW9uSWRUb1BhZ2UoeGlkKQkoKHhp ZCkgLyAoVHJhbnNhY3Rpb25JZCkgQ1NOX0xPR19YQUNUU19QRVJfUEFHRSkKKyNkZWZpbmUg VHJhbnNhY3Rpb25JZFRvUGdJbmRleCh4aWQpICgoeGlkKSAlIChUcmFuc2FjdGlvbklkKSBD U05fTE9HX1hBQ1RTX1BFUl9QQUdFKQorCisjZGVmaW5lIFBnSW5kZXhUb1RyYW5zYWN0aW9u SWQocGFnZW5vLCBpZHgpIChDU05fTE9HX1hBQ1RTX1BFUl9QQUdFICogKHBhZ2VubykgKyBp ZHgpCisKKworCisvKgorICogTGluayB0byBzaGFyZWQtbWVtb3J5IGRhdGEgc3RydWN0dXJl cyBmb3IgQ1NOTG9nIGNvbnRyb2wKKyAqLworc3RhdGljIFNscnVDdGxEYXRhIENTTkxvZ0N0 bERhdGE7CisjZGVmaW5lIENzbmxvZ0N0bCAoJkNTTkxvZ0N0bERhdGEpCisKK3N0YXRpYyBp bnQJWmVyb0NTTkxvZ1BhZ2UoaW50IHBhZ2Vubyk7CitzdGF0aWMgYm9vbCBDU05Mb2dQYWdl UHJlY2VkZXMoaW50NjQgcGFnZTEsIGludDY0IHBhZ2UyKTsKK3N0YXRpYyB2b2lkIENTTkxv Z1NldFBhZ2VTdGF0dXMoVHJhbnNhY3Rpb25JZCB4aWQsIGludCBuc3VieGlkcywKKwkJCQkJ CQkJVHJhbnNhY3Rpb25JZCAqc3VieGlkcywKKwkJCQkJCQkJWExvZ1JlY1B0ciBjc24sIGlu dCBwYWdlbm8pOworc3RhdGljIHZvaWQgQ1NOTG9nU2V0Q1NOSW5TbG90KFRyYW5zYWN0aW9u SWQgeGlkLCBYTG9nUmVjUHRyIGNzbiwKKwkJCQkJCQkgICBpbnQgc2xvdG5vKTsKKworCisv KgorICogUmVjb3JkIGNvbW1pdCBMU04gb2YgYSB0cmFuc2FjdGlvbiBhbmQgaXRzIHN1YnRy YW5zYWN0aW9uIHRyZWUuCisgKgorICogeGlkIGlzIGEgc2luZ2xlIHhpZCB0byBzZXQgc3Rh dHVzIGZvci4gVGhpcyB3aWxsIHR5cGljYWxseSBiZSB0aGUgdG9wIGxldmVsCisgKiB0cmFu c2FjdGlvbiBJRCBmb3IgYSB0b3AgbGV2ZWwgY29tbWl0LgorICoKKyAqIHN1YnhpZHMgaXMg YW4gYXJyYXkgb2YgeGlkcyBvZiBsZW5ndGggbnN1YnhpZHMsIHJlcHJlc2VudGluZyBzdWJ0 cmFuc2FjdGlvbnMKKyAqIGluIHRoZSB0cmVlIG9mIHhpZC4gSW4gdmFyaW91cyBjYXNlcyBu c3VieGlkcyBtYXkgYmUgemVyby4KKyAqCisgKiBjb21taXRMc24gaXMgdGhlIExTTiBvZiB0 aGUgY29tbWl0IHJlY29yZC4gIFRoaXMgaXMgY3VycmVudGx5IG5ldmVyIGNhbGxlZAorICog Zm9yIGFib3J0ZWQgdHJhbnNhY3Rpb25zLgorICovCit2b2lkCitDU05Mb2dTZXRDU04oVHJh bnNhY3Rpb25JZCB4aWQsIGludCBuc3VieGlkcywgVHJhbnNhY3Rpb25JZCAqc3VieGlkcywK KwkJCSBYTG9nUmVjUHRyIGNvbW1pdExzbikKK3sKKwlpbnQJCQlwYWdlbm87CisJaW50CQkJ aSA9IDA7CisJaW50CQkJb2Zmc2V0ID0gMDsKKworCUFzc2VydChUcmFuc2FjdGlvbklkSXNW YWxpZCh4aWQpKTsKKworCXBhZ2VubyA9IFRyYW5zYWN0aW9uSWRUb1BhZ2UoeGlkKTsJLyog Z2V0IHBhZ2Ugb2YgcGFyZW50ICovCisJZm9yICg7OykKKwl7CisJCWludAkJCW51bV9vbl9w YWdlID0gMDsKKworCQl3aGlsZSAoaSA8IG5zdWJ4aWRzICYmIFRyYW5zYWN0aW9uSWRUb1Bh Z2Uoc3VieGlkc1tpXSkgPT0gcGFnZW5vKQorCQl7CisJCQludW1fb25fcGFnZSsrOworCQkJ aSsrOworCQl9CisKKwkJQ1NOTG9nU2V0UGFnZVN0YXR1cyh4aWQsCisJCQkJCQkJbnVtX29u X3BhZ2UsIHN1YnhpZHMgKyBvZmZzZXQsCisJCQkJCQkJY29tbWl0THNuLCBwYWdlbm8pOwor CQlpZiAoaSA+PSBuc3VieGlkcykKKwkJCWJyZWFrOworCisJCW9mZnNldCA9IGk7CisJCXBh Z2VubyA9IFRyYW5zYWN0aW9uSWRUb1BhZ2Uoc3VieGlkc1tvZmZzZXRdKTsKKwkJeGlkID0g SW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJfQorfQorCisvKgorICogUmVjb3JkIHRoZSBmaW5h bCBzdGF0ZSBvZiB0cmFuc2FjdGlvbiBlbnRyaWVzIGluIHRoZSBDU04gbG9nIGZvciBhbGwK KyAqIGVudHJpZXMgb24gYSBzaW5nbGUgcGFnZS4gIEF0b21pYyBvbmx5IG9uIHRoaXMgcGFn ZS4KKyAqCisgKiBPdGhlcndpc2UgQVBJIGlzIHNhbWUgYXMgQ1NOTG9nU2V0Q1NOKCkKKyAq Lworc3RhdGljIHZvaWQKK0NTTkxvZ1NldFBhZ2VTdGF0dXMoVHJhbnNhY3Rpb25JZCB4aWQs IGludCBuc3VieGlkcywgVHJhbnNhY3Rpb25JZCAqc3VieGlkcywKKwkJCQkJWExvZ1JlY1B0 ciBjb21taXRMc24sIGludCBwYWdlbm8pCit7CisJaW50CQkJc2xvdG5vOworCWludAkJCWk7 CisJTFdMb2NrCSAgICpsb2NrOworCisJbG9jayA9IFNpbXBsZUxydUdldEJhbmtMb2NrKENz bmxvZ0N0bCwgcGFnZW5vKTsKKwlMV0xvY2tBY3F1aXJlKGxvY2ssIExXX0VYQ0xVU0lWRSk7 CisKKwlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShDc25sb2dDdGwsIHBhZ2VubywgdHJ1 ZSwgeGlkKTsKKworCS8qIFN1YnRyYW5zYWN0aW9ucyBmaXJzdCwgaWYgbmVlZGVkIC4uLiAq LworCWZvciAoaSA9IDA7IGkgPCBuc3VieGlkczsgaSsrKQorCXsKKwkJQXNzZXJ0KENzbmxv Z0N0bC0+c2hhcmVkLT5wYWdlX251bWJlcltzbG90bm9dID09IFRyYW5zYWN0aW9uSWRUb1Bh Z2Uoc3VieGlkc1tpXSkpOworCQlDU05Mb2dTZXRDU05JblNsb3Qoc3VieGlkc1tpXSwgY29t bWl0THNuLCBzbG90bm8pOworCX0KKworCS8qIC4uLiB0aGVuIHRoZSBtYWluIHRyYW5zYWN0 aW9uICovCisJaWYgKFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpCisJCUNTTkxvZ1NldENT TkluU2xvdCh4aWQsIGNvbW1pdExzbiwgc2xvdG5vKTsKKworCUNzbmxvZ0N0bC0+c2hhcmVk LT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOworCisJTFdMb2NrUmVsZWFzZShsb2NrKTsK K30KKworLyoKKyAqIFNldHMgdGhlIGNvbW1pdCBzdGF0dXMgb2YgYSBzaW5nbGUgdHJhbnNh Y3Rpb24uCisgKi8KK3N0YXRpYyB2b2lkCitDU05Mb2dTZXRDU05JblNsb3QoVHJhbnNhY3Rp b25JZCB4aWQsIFhMb2dSZWNQdHIgY3NuLCBpbnQgc2xvdG5vKQoreworCWludAkJCWVudHJ5 bm8gPSBUcmFuc2FjdGlvbklkVG9QZ0luZGV4KHhpZCk7CisJWExvZ1JlY1B0ciAqcHRyOwor CisJcHRyID0gKFhMb2dSZWNQdHIgKikgKENzbmxvZ0N0bC0+c2hhcmVkLT5wYWdlX2J1ZmZl cltzbG90bm9dICsgZW50cnlubyAqIHNpemVvZihYTG9nUmVjUHRyKSk7CisKKwkqcHRyID0g Y3NuOworfQorCisvKgorICogSW50ZXJyb2dhdGUgdGhlIHN0YXRlIG9mIGEgdHJhbnNhY3Rp b24gaW4gdGhlIGxvZy4KKyAqCisgKiBOQjogdGhpcyBpcyBhIGxvdy1sZXZlbCByb3V0aW5l IGFuZCBpcyBOT1QgdGhlIHByZWZlcnJlZCBlbnRyeSBwb2ludAorICogZm9yIG1vc3QgdXNl czsgVHJhbnNhY3Rpb25JZEdldFhpZENTTigpIGluIGNzbl9zbmFwc2hvdC5jIGlzIHRoZQor ICogaW50ZW5kZWQgY2FsbGVyLgorICovCitYTG9nUmVjUHRyCitDU05Mb2dHZXRDU05CeVhp ZChUcmFuc2FjdGlvbklkIHhpZCkKK3sKKwlpbnQJCQlwYWdlbm8gPSBUcmFuc2FjdGlvbklk VG9QYWdlKHhpZCk7CisJaW50CQkJZW50cnlubyA9IFRyYW5zYWN0aW9uSWRUb1BnSW5kZXgo eGlkKTsKKwlpbnQJCQlzbG90bm87CisJWExvZ1JlY1B0ciAqcHRyOworCVhMb2dSZWNQdHIJ eGlkX2NzbjsKKworCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKTsKKworCS8q IENhbid0IGFzayBhYm91dCBzdHVmZiB0aGF0IG1pZ2h0IG5vdCBiZSBhcm91bmQgYW55bW9y ZSAqLworCUFzc2VydChUcmFuc2FjdGlvbklkRm9sbG93c09yRXF1YWxzKHhpZCwgVHJhbnNh Y3Rpb25YbWluKSk7CisKKwkvKiBsb2NrIGlzIGFjcXVpcmVkIGJ5IFNpbXBsZUxydVJlYWRQ YWdlX1JlYWRPbmx5ICovCisKKwlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25s eShDc25sb2dDdGwsIHBhZ2VubywgeGlkKTsKKwlwdHIgPSAoWExvZ1JlY1B0ciAqKSAoQ3Nu bG9nQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBlbnRyeW5vICogc2l6ZW9m KFhMb2dSZWNQdHIpKTsKKwl4aWRfY3NuID0gKnB0cjsKKworCUxXTG9ja1JlbGVhc2UoU2lt cGxlTHJ1R2V0QmFua0xvY2soQ3NubG9nQ3RsLCBwYWdlbm8pKTsKKworCXJldHVybiB4aWRf Y3NuOworfQorCisvKgorICogTnVtYmVyIG9mIHNoYXJlZCBDU05Mb2cgYnVmZmVycy4KKyAq Lworc3RhdGljIFNpemUKK0NTTkxvZ1NobWVtQnVmZmVycyh2b2lkKQoreworCXJldHVybiBN aW4oMzIsIE1heCgxNiwgTkJ1ZmZlcnMgLyA1MTIpKTsKK30KKworLyoKKyAqIFJlc2VydmUg c2hhcmVkIG1lbW9yeSBmb3IgQ3NubG9nQ3RsLgorICovCitTaXplCitDU05Mb2dTaG1lbVNp emUodm9pZCkKK3sKKwkvLyBGSVhNRTogc2tpcCBpZiBub3QgSW5Ib3RTdGFuZGJ5PworCXJl dHVybiBTaW1wbGVMcnVTaG1lbVNpemUoQ1NOTG9nU2htZW1CdWZmZXJzKCksIDApOworfQor CisvKgorICogSW5pdGlhbGl6YXRpb24gb2Ygc2hhcmVkIG1lbW9yeSBmb3IgQ1NOTG9nLgor ICovCit2b2lkCitDU05Mb2dTaG1lbUluaXQodm9pZCkKK3sKKwlDc25sb2dDdGwtPlBhZ2VQ cmVjZWRlcyA9IENTTkxvZ1BhZ2VQcmVjZWRlczsKKwlTaW1wbGVMcnVJbml0KENzbmxvZ0N0 bCwgIkNTTkxvZyBDdGwiLCBDU05Mb2dTaG1lbUJ1ZmZlcnMoKSwgMCwKKwkJCQkgICJwZ19j c24iLCBMV1RSQU5DSEVfQ1NOX0xPR19CVUZGRVIsCisJCQkJICBMV1RSQU5DSEVfQ1NOX0xP R19TTFJVLCBTWU5DX0hBTkRMRVJfTk9ORSwgZmFsc2UpOworCS8vU2xydVBhZ2VQcmVjZWRl c1VuaXRUZXN0cyhDc25sb2dDdGwsIFNVQlRSQU5TX1hBQ1RTX1BFUl9QQUdFKTsKK30KKwor LyoKKyAqIFRoaXMgZnVuYyBtdXN0IGJlIGNhbGxlZCBPTkNFIG9uIHN5c3RlbSBpbnN0YWxs LiAgSXQgY3JlYXRlcyB0aGUgaW5pdGlhbAorICogQ1NOTG9nIHNlZ21lbnQuICBUaGUgcGdf Y3NuIGRpcmVjdG9yeSBpcyBhc3N1bWVkIHRvIGhhdmUgYmVlbgorICogY3JlYXRlZCBieSBp bml0ZGIsIGFuZCBDU05Mb2dTaG1lbUluaXQgbXVzdCBoYXZlIGJlZW4gY2FsbGVkIGFscmVh ZHkuCisgKgorICogTm90ZTogaXQncyBub3QgcmVhbGx5IG5lY2Vzc2FyeSB0byBjcmVhdGUg dGhlIGluaXRpYWwgc2VnbWVudCBub3csCisgKiBzaW5jZSBzbHJ1LmMgd291bGQgY3JlYXRl IGl0IG9uIGZpcnN0IHdyaXRlIGFueXdheS4gIEJ1dCB3ZSBtYXkgYXMgd2VsbAorICogZG8g aXQgdG8gYmUgc3VyZSB0aGUgZGlyZWN0b3J5IGlzIHNldCB1cCBjb3JyZWN0bHkuCisgKi8K K3ZvaWQKK0Jvb3RTdHJhcENTTkxvZyh2b2lkKQoreworCWludAkJCXNsb3RubzsKKwlMV0xv Y2sJICAgKmxvY2s7CisKKwlsb2NrID0gU2ltcGxlTHJ1R2V0QmFua0xvY2soQ3NubG9nQ3Rs LCAwKTsKKwlMV0xvY2tBY3F1aXJlKGxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwkvKiBDcmVh dGUgYW5kIHplcm8gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIGNvbW1pdCBsb2cgKi8KKwlzbG90 bm8gPSBaZXJvQ1NOTG9nUGFnZSgwKTsKKworCS8qIE1ha2Ugc3VyZSBpdCdzIHdyaXR0ZW4g b3V0ICovCisJU2ltcGxlTHJ1V3JpdGVQYWdlKENzbmxvZ0N0bCwgc2xvdG5vKTsKKwlBc3Nl cnQoIUNzbmxvZ0N0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pOworCisJTFdMb2Nr UmVsZWFzZShsb2NrKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgKG9yIHJlaW5pdGlhbGl6 ZSkgYSBwYWdlIG9mIENTTkxvZyB0byB6ZXJvZXMuCisgKgorICogVGhlIHBhZ2UgaXMgbm90 IGFjdHVhbGx5IHdyaXR0ZW4sIGp1c3Qgc2V0IHVwIGluIHNoYXJlZCBtZW1vcnkuCisgKiBU aGUgc2xvdCBudW1iZXIgb2YgdGhlIG5ldyBwYWdlIGlzIHJldHVybmVkLgorICoKKyAqIENv bnRyb2wgbG9jayBtdXN0IGJlIGhlbGQgYXQgZW50cnksIGFuZCB3aWxsIGJlIGhlbGQgYXQg ZXhpdC4KKyAqLworc3RhdGljIGludAorWmVyb0NTTkxvZ1BhZ2UoaW50IHBhZ2VubykKK3sK KwlyZXR1cm4gU2ltcGxlTHJ1WmVyb1BhZ2UoQ3NubG9nQ3RsLCBwYWdlbm8pOworfQorCisv KgorICogSW5pdGlhbGl6ZSBhIHBhZ2Ugb2YgQ1NOTG9nIGJhc2VkIG9uIHBnX3hhY3QuCisg KgorICogQWxsIGNvbW1pdHRlZCB0cmFuc2FjdGlvbnMgYXJlIHN0YW1wZWQgd2l0aCAnY3Nu JworICovCitzdGF0aWMgdm9pZAorSW5pdENTTkxvZ1BhZ2UoaW50IHBhZ2VubywgVHJhbnNh Y3Rpb25JZCAqeGlkLCBUcmFuc2FjdGlvbklkIG5leHRYaWQsIFhMb2dSZWNQdHIgY3NuKQor eworCVhMb2dSZWNQdHIJZHVtbXk7CisJaW50CQkJc2xvdG5vOworCisJc2xvdG5vID0gWmVy b0NTTkxvZ1BhZ2UocGFnZW5vKTsKKworCXdoaWxlICgqeGlkIDwgbmV4dFhpZCAmJiBUcmFu c2FjdGlvbklkVG9QYWdlKCp4aWQpID09IHBhZ2VubykKKwl7CisJCVhpZFN0YXR1cwlzdGF0 dXMgPSBUcmFuc2FjdGlvbklkR2V0U3RhdHVzKCp4aWQsICZkdW1teSk7CisKKwkJaWYgKHN0 YXR1cyA9PSBUUkFOU0FDVElPTl9TVEFUVVNfQ09NTUlUVEVEIHx8CisJCQlzdGF0dXMgPT0g VFJBTlNBQ1RJT05fU1RBVFVTX0FCT1JURUQpCisJCQlDU05Mb2dTZXRDU05JblNsb3QoKnhp ZCwgY3NuLCBzbG90bm8pOworCisJCVRyYW5zYWN0aW9uSWRBZHZhbmNlKCp4aWQpOworCX0K KwlTaW1wbGVMcnVaZXJvUGFnZShDc25sb2dDdGwsIHBhZ2Vubyk7Cit9CisKKy8qCisgKiBU aGlzIG11c3QgYmUgY2FsbGVkIE9OQ0UgZHVyaW5nIHBvc3RtYXN0ZXIgb3Igc3RhbmRhbG9u ZS1iYWNrZW5kIHN0YXJ0dXAsCisgKiBhZnRlciBTdGFydHVwWExPRyBoYXMgaW5pdGlhbGl6 ZWQgU2htZW1WYXJpYWJsZUNhY2hlLT5uZXh0WGlkLCBhbmQgYWZ0ZXIKKyAqIGluaXRpYWxp emluZyB0aGUgQ0xPRy4KKyAqCisgKiBvbGRlc3RBY3RpdmVYSUQgaXMgdGhlIG9sZGVzdCBY SUQgb2YgYW55IHByZXBhcmVkIHRyYW5zYWN0aW9uLCBvciBuZXh0WGlkCisgKiBpZiB0aGVy ZSBhcmUgbm9uZS4KKyAqCisgKiBBbGwgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSBhbHJlYWR5 IGNvbXBsZXRlZCBhcmUgbWFya2VkIHdpdGggJ2NzbicuICgnY3NuJworICogaXMgc3VwcG9z ZWQgdG8gYmUgYW4gIm9sZGVyIHRoYW4gYW55dGhpbmcgd2UnbGwgZXZlciBuZWVkIHRvIGNv bXBhcmUgd2l0aCIpCisgKi8KK3ZvaWQKK1N0YXJ0dXBDU05Mb2coVHJhbnNhY3Rpb25JZCBv bGRlc3RBY3RpdmVYSUQsIFhMb2dSZWNQdHIgY3NuKQoreworCVRyYW5zYWN0aW9uSWQgeGlk OworCUZ1bGxUcmFuc2FjdGlvbklkIG5leHRYaWQ7CisJaW50CQkJc3RhcnRQYWdlOworCWlu dAkJCWVuZFBhZ2U7CisJTFdMb2NrCSAgICpwcmV2bG9jayA9IE5VTEw7CisJTFdMb2NrCSAg ICpsb2NrOworCisJLyoKKwkgKiBTaW5jZSB3ZSBkb24ndCBleHBlY3QgcGdfY3NuIHRvIGJl IHZhbGlkIGFjcm9zcyBjcmFzaGVzLCB3ZSBpbml0aWFsaXplCisJICogdGhlIGN1cnJlbnRs eS1hY3RpdmUgcGFnZShzKSB0byB6ZXJvZXMgZHVyaW5nIHN0YXJ0dXAuIFdoZW5ldmVyIHdl CisJICogYWR2YW5jZSBpbnRvIGEgbmV3IHBhZ2UsIEV4dGVuZENTTkxvZyB3aWxsIGxpa2V3 aXNlIHplcm8gdGhlIG5ldyBwYWdlCisJICogd2l0aG91dCByZWdhcmQgdG8gd2hhdGV2ZXIg d2FzIHByZXZpb3VzbHkgb24gZGlzay4KKwkgKi8KKwlzdGFydFBhZ2UgPSBUcmFuc2FjdGlv bklkVG9QYWdlKG9sZGVzdEFjdGl2ZVhJRCk7CisJbmV4dFhpZCA9IFRyYW5zYW1WYXJpYWJs ZXMtPm5leHRYaWQ7CisJZW5kUGFnZSA9IFRyYW5zYWN0aW9uSWRUb1BhZ2UoWGlkRnJvbUZ1 bGxUcmFuc2FjdGlvbklkKG5leHRYaWQpKTsKKworCUFzc2VydChUcmFuc2FjdGlvbklkSXNW YWxpZChvbGRlc3RBY3RpdmVYSUQpKTsKKwlBc3NlcnQoRnVsbFRyYW5zYWN0aW9uSWRJc1Zh bGlkKG5leHRYaWQpKTsKKworCXhpZCA9IG9sZGVzdEFjdGl2ZVhJRDsKKwlmb3IgKDs7KQor CXsKKwkJbG9jayA9IFNpbXBsZUxydUdldEJhbmtMb2NrKENzbmxvZ0N0bCwgc3RhcnRQYWdl KTsKKwkJaWYgKHByZXZsb2NrICE9IGxvY2spCisJCXsKKwkJCWlmIChwcmV2bG9jaykKKwkJ CQlMV0xvY2tSZWxlYXNlKHByZXZsb2NrKTsKKwkJCUxXTG9ja0FjcXVpcmUobG9jaywgTFdf RVhDTFVTSVZFKTsKKwkJCXByZXZsb2NrID0gbG9jazsKKwkJfQorCisJCUluaXRDU05Mb2dQ YWdlKHN0YXJ0UGFnZSwgJnhpZCwgWGlkRnJvbUZ1bGxUcmFuc2FjdGlvbklkKG5leHRYaWQp LCBjc24pOworCQlpZiAoc3RhcnRQYWdlID09IGVuZFBhZ2UpCisJCQlicmVhazsKKworCQlz dGFydFBhZ2UrKzsKKwkJLyogbXVzdCBhY2NvdW50IGZvciB3cmFwYXJvdW5kICovCisJCWlm IChzdGFydFBhZ2UgPiBUcmFuc2FjdGlvbklkVG9QYWdlKE1heFRyYW5zYWN0aW9uSWQpKQor CQkJc3RhcnRQYWdlID0gMDsKKwl9CisKKwlMV0xvY2tSZWxlYXNlKGxvY2spOworfQorCisv KgorICogVGhpcyBtdXN0IGJlIGNhbGxlZCBPTkNFIGR1cmluZyBwb3N0bWFzdGVyIG9yIHN0 YW5kYWxvbmUtYmFja2VuZCBzaHV0ZG93bgorICovCit2b2lkCitTaHV0ZG93bkNTTkxvZyh2 b2lkKQoreworCS8qCisJICogRmx1c2ggZGlydHkgQ1NOTG9nIHBhZ2VzIHRvIGRpc2suCisJ ICoKKwkgKiBUaGlzIGlzIG5vdCBhY3R1YWxseSBuZWNlc3NhcnkgZnJvbSBhIGNvcnJlY3Ru ZXNzIHBvaW50IG9mIHZpZXcuIFdlIGRvCisJICogaXQgbWVyZWx5IGFzIGEgZGVidWdnaW5n IGFpZC4KKwkgKi8KKwlUUkFDRV9QT1NUR1JFU1FMX0NTTkxPR19DSEVDS1BPSU5UX1NUQVJU KGZhbHNlKTsKKwlTaW1wbGVMcnVXcml0ZUFsbChDc25sb2dDdGwsIGZhbHNlKTsKKwlUUkFD RV9QT1NUR1JFU1FMX0NTTkxPR19DSEVDS1BPSU5UX0RPTkUoZmFsc2UpOworfQorCisvKgor ICogUGVyZm9ybSBhIGNoZWNrcG9pbnQgLS0tIGVpdGhlciBkdXJpbmcgc2h1dGRvd24sIG9y IG9uLXRoZS1mbHkKKyAqLwordm9pZAorQ2hlY2tQb2ludENTTkxvZyh2b2lkKQoreworCS8q CisJICogRmx1c2ggZGlydHkgQ1NOTG9nIHBhZ2VzIHRvIGRpc2suCisJICoKKwkgKiBUaGlz IGlzIG5vdCBhY3R1YWxseSBuZWNlc3NhcnkgZnJvbSBhIGNvcnJlY3RuZXNzIHBvaW50IG9m IHZpZXcuIFdlIGRvCisJICogaXQgbWVyZWx5IHRvIGltcHJvdmUgdGhlIG9kZHMgdGhhdCB3 cml0aW5nIG9mIGRpcnR5IHBhZ2VzIGlzIGRvbmUgYnkKKwkgKiB0aGUgY2hlY2twb2ludCBw cm9jZXNzIGFuZCBub3QgYnkgYmFja2VuZHMuCisJICovCisJVFJBQ0VfUE9TVEdSRVNRTF9D U05MT0dfQ0hFQ0tQT0lOVF9TVEFSVCh0cnVlKTsKKwlTaW1wbGVMcnVXcml0ZUFsbChDc25s b2dDdGwsIHRydWUpOworCVRSQUNFX1BPU1RHUkVTUUxfQ1NOTE9HX0NIRUNLUE9JTlRfRE9O RSh0cnVlKTsKK30KKworLyoKKyAqIE1ha2Ugc3VyZSB0aGF0IENTTkxvZyBoYXMgcm9vbSBm b3IgYSBuZXdseS1hbGxvY2F0ZWQgWElELgorICoKKyAqIE5COiB0aGlzIGlzIGNhbGxlZCB3 aGlsZSBob2xkaW5nIFhpZEdlbkxvY2suICBXZSB3YW50IGl0IHRvIGJlIHZlcnkgZmFzdAor ICogbW9zdCBvZiB0aGUgdGltZTsgZXZlbiB3aGVuIGl0J3Mgbm90IHNvIGZhc3QsIG5vIGFj dHVhbCBJL08gbmVlZCBoYXBwZW4KKyAqIHVubGVzcyB3ZSdyZSBmb3JjZWQgdG8gd3JpdGUg b3V0IGEgZGlydHkgY2xvZyBvciB4bG9nIHBhZ2UgdG8gbWFrZSByb29tCisgKiBpbiBzaGFy ZWQgbWVtb3J5LgorICovCit2b2lkCitFeHRlbmRDU05Mb2coVHJhbnNhY3Rpb25JZCBuZXdl c3RYYWN0KQoreworCWludDY0CQlwYWdlbm87CisJTFdMb2NrCSAgICpsb2NrOworCisJLyoK KwkgKiBObyB3b3JrIGV4Y2VwdCBhdCBmaXJzdCBYSUQgb2YgYSBwYWdlLiAgQnV0IGJld2Fy ZToganVzdCBhZnRlcgorCSAqIHdyYXBhcm91bmQsIHRoZSBmaXJzdCBYSUQgb2YgcGFnZSB6 ZXJvIGlzIEZpcnN0Tm9ybWFsVHJhbnNhY3Rpb25JZC4KKwkgKi8KKwlpZiAoVHJhbnNhY3Rp b25JZFRvUGdJbmRleChuZXdlc3RYYWN0KSAhPSAwICYmCisJCSFUcmFuc2FjdGlvbklkRXF1 YWxzKG5ld2VzdFhhY3QsIEZpcnN0Tm9ybWFsVHJhbnNhY3Rpb25JZCkpCisJCXJldHVybjsK KworCXBhZ2VubyA9IFRyYW5zYWN0aW9uSWRUb1BhZ2UobmV3ZXN0WGFjdCk7CisKKwlsb2Nr ID0gU2ltcGxlTHJ1R2V0QmFua0xvY2soQ3NubG9nQ3RsLCBwYWdlbm8pOworCisJTFdMb2Nr QWNxdWlyZShsb2NrLCBMV19FWENMVVNJVkUpOworCisJLyogWmVybyB0aGUgcGFnZSBhbmQg bWFrZSBhbiBYTE9HIGVudHJ5IGFib3V0IGl0ICovCisJWmVyb0NTTkxvZ1BhZ2UocGFnZW5v KTsKKworCUxXTG9ja1JlbGVhc2UobG9jayk7Cit9CisKKy8qCisgKiBSZW1vdmUgYWxsIENT TkxvZyBzZWdtZW50cyBiZWZvcmUgdGhlIG9uZSBob2xkaW5nIHRoZSBwYXNzZWQKKyAqIHRy YW5zYWN0aW9uIElELgorICoKKyAqIFRoaXMgaXMgbm9ybWFsbHkgY2FsbGVkIGR1cmluZyBj aGVja3BvaW50LCB3aXRoIG9sZGVzdFhhY3QgYmVpbmcgdGhlCisgKiBvbGRlc3QgVHJhbnNh Y3Rpb25YbWluIG9mIGFueSBydW5uaW5nIHRyYW5zYWN0aW9uLgorICovCit2b2lkCitUcnVu Y2F0ZUNTTkxvZyhUcmFuc2FjdGlvbklkIG9sZGVzdFhhY3QpCit7CisJaW50CQkJY3V0b2Zm UGFnZTsKKworCS8qCisJICogVGhlIGN1dG9mZiBwb2ludCBpcyB0aGUgc3RhcnQgb2YgdGhl IHNlZ21lbnQgY29udGFpbmluZyBvbGRlc3RYYWN0LiBXZQorCSAqIHBhc3MgdGhlICpwYWdl KiBjb250YWluaW5nIG9sZGVzdFhhY3QgdG8gU2ltcGxlTHJ1VHJ1bmNhdGUuIFdlIHN0ZXAK KwkgKiBiYWNrIG9uZSB0cmFuc2FjdGlvbiB0byBhdm9pZCBwYXNzaW5nIGEgY3V0b2ZmIHBh Z2UgdGhhdCBoYXNuJ3QgYmVlbgorCSAqIGNyZWF0ZWQgeWV0IGluIHRoZSByYXJlIGNhc2Ug dGhhdCBvbGRlc3RYYWN0IHdvdWxkIGJlIHRoZSBmaXJzdCBpdGVtIG9uCisJICogYSBwYWdl IGFuZCBvbGRlc3RYYWN0ID09IG5leHQgWElELiAgSW4gdGhhdCBjYXNlLCBpZiB3ZSBkaWRu J3Qgc3VidHJhY3QKKwkgKiBvbmUsIHdlJ2QgdHJpZ2dlciBTaW1wbGVMcnVUcnVuY2F0ZSdz IHdyYXBhcm91bmQgZGV0ZWN0aW9uLgorCSAqLworCVRyYW5zYWN0aW9uSWRSZXRyZWF0KG9s ZGVzdFhhY3QpOworCWN1dG9mZlBhZ2UgPSBUcmFuc2FjdGlvbklkVG9QYWdlKG9sZGVzdFhh Y3QpOworCisJU2ltcGxlTHJ1VHJ1bmNhdGUoQ3NubG9nQ3RsLCBjdXRvZmZQYWdlKTsKK30K KworLyoKKyAqIERlY2lkZSB3aGljaCBvZiB0d28gQ1NOTG9nIHBhZ2UgbnVtYmVycyBpcyAi b2xkZXIiIGZvciB0cnVuY2F0aW9uCisgKiBwdXJwb3Nlcy4KKyAqCisgKiBXZSBuZWVkIHRv IHVzZSBjb21wYXJpc29uIG9mIFRyYW5zYWN0aW9uSWRzIGhlcmUgaW4gb3JkZXIgdG8gZG8g dGhlIHJpZ2h0CisgKiB0aGluZyB3aXRoIHdyYXBhcm91bmQgWElEIGFyaXRobWV0aWMuICBI b3dldmVyLCBpZiB3ZSBhcmUgYXNrZWQgYWJvdXQKKyAqIHBhZ2UgbnVtYmVyIHplcm8sIHdl IGRvbid0IHdhbnQgdG8gaGFuZCBJbnZhbGlkVHJhbnNhY3Rpb25JZCB0bworICogVHJhbnNh Y3Rpb25JZFByZWNlZGVzOiBpdCdsbCBnZXQgd2VpcmQgYWJvdXQgcGVybWFuZW50IHhhY3Qg SURzLiAgU28sCisgKiBvZmZzZXQgYm90aCB4aWRzIGJ5IEZpcnN0Tm9ybWFsVHJhbnNhY3Rp b25JZCB0byBhdm9pZCB0aGF0LgorICovCitzdGF0aWMgYm9vbAorQ1NOTG9nUGFnZVByZWNl ZGVzKGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMikKK3sKKwlUcmFuc2FjdGlvbklkIHhpZDE7 CisJVHJhbnNhY3Rpb25JZCB4aWQyOworCisJeGlkMSA9ICgoVHJhbnNhY3Rpb25JZCkgcGFn ZTEpICogQ1NOX0xPR19YQUNUU19QRVJfUEFHRTsKKwl4aWQxICs9IEZpcnN0Tm9ybWFsVHJh bnNhY3Rpb25JZDsKKwl4aWQyID0gKChUcmFuc2FjdGlvbklkKSBwYWdlMikgKiBDU05fTE9H X1hBQ1RTX1BFUl9QQUdFOworCXhpZDIgKz0gRmlyc3ROb3JtYWxUcmFuc2FjdGlvbklkOwor CisJcmV0dXJuIFRyYW5zYWN0aW9uSWRQcmVjZWRlcyh4aWQxLCB4aWQyKTsKK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL21lc29uLmJ1aWxkIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vbWVzb24uYnVpbGQKaW5kZXggOGEzNTIyNTU3Yy4uY2Y0 MWRmMjk3MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbWVzb24u YnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbWVzb24uYnVpbGQKQEAg LTIsNiArMiw3IEBACiAKIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ2Nsb2cuYycs CisgICdjc25fbG9nLmMnLAogICAnY29tbWl0X3RzLmMnLAogICAnZ2VuZXJpY194bG9nLmMn LAogICAnbXVsdGl4YWN0LmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vdHJhbnNhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHJhbnNhbS5j CmluZGV4IDc1YjUzMjVkZjguLjkzYzRkNDk1ZTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3RyYW5zYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS90cmFuc2FtLmMKQEAgLTM3Nyw2ICszNzcsOSBAQCBUcmFuc2FjdGlvbklkTGF0ZXN0 KFRyYW5zYWN0aW9uSWQgbWFpbnhpZCwKICAqIEFsc28sIGJlY2F1c2Ugd2UgZ3JvdXAgdHJh bnNhY3Rpb25zIG9uIHRoZSBzYW1lIGNsb2cgcGFnZSB0byBjb25zZXJ2ZQogICogc3RvcmFn ZSwgd2UgbWlnaHQgcmV0dXJuIHRoZSBMU04gb2YgYSBsYXRlciB0cmFuc2FjdGlvbiB0aGF0 IGZhbGxzIGludG8KICAqIHRoZSBzYW1lIGdyb3VwLgorICoKKyAqIFhYWDogTm93IHRoYXQg d2UgaGF2ZSB0aGUgQ1NOLWxvZywgc2hvdWxkIHdlIHVzZSB0aGF0IGR1cmluZyByZWNvdmVy eT8gT3IKKyAqIHJlbmFtZSB0aGlzIGZ1bmN0aW9uIHRvIHJlZHVjZSBjb25mdXNpb24uCiAg Ki8KIFhMb2dSZWNQdHIKIFRyYW5zYWN0aW9uSWRHZXRDb21taXRMU04oVHJhbnNhY3Rpb25J ZCB4aWQpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFz ZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwppbmRleCBlOTgy ODZkNzY4Li45Y2VhNWFkMmU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS90d29waGFzZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3Bo YXNlLmMKQEAgLTc3LDYgKzc3LDcgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KIAogI2luY2x1 ZGUgImFjY2Vzcy9jb21taXRfdHMuaCIKKyNpbmNsdWRlICJhY2Nlc3MvY3NuX2xvZy5oIgog I2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc3Vi dHJhbnMuaCIKICNpbmNsdWRlICJhY2Nlc3MvdHJhbnNhbS5oIgpAQCAtMTk1MywyMCArMTk1 NCwxMyBAQCByZXN0b3JlVHdvUGhhc2VEYXRhKHZvaWQpCiAgKiBPdXIgb3RoZXIgcmVzcG9u c2liaWxpdHkgaXMgdG8gZGV0ZXJtaW5lIGFuZCByZXR1cm4gdGhlIG9sZGVzdCB2YWxpZCBY SUQKICAqIGFtb25nIHRoZSBwcmVwYXJlZCB4YWN0cyAoaWYgbm9uZSwgcmV0dXJuIFRyYW5z YW1WYXJpYWJsZXMtPm5leHRYaWQpLgogICogVGhpcyBpcyBuZWVkZWQgdG8gc3luY2hyb25p emUgcGdfc3VidHJhbnMgc3RhcnR1cCBwcm9wZXJseS4KLSAqCi0gKiBJZiB4aWRzX3AgYW5k IG54aWRzX3AgYXJlIG5vdCBOVUxMLCBwb2ludGVyIHRvIGEgcGFsbG9jJ2QgYXJyYXkgb2Yg YWxsCi0gKiB0b3AtbGV2ZWwgeGlkcyBpcyBzdG9yZWQgaW4gKnhpZHNfcC4gVGhlIG51bWJl ciBvZiBlbnRyaWVzIGluIHRoZSBhcnJheQotICogaXMgcmV0dXJuZWQgaW4gKm54aWRzX3Au CiAgKi8KIFRyYW5zYWN0aW9uSWQKLVByZXNjYW5QcmVwYXJlZFRyYW5zYWN0aW9ucyhUcmFu c2FjdGlvbklkICoqeGlkc19wLCBpbnQgKm54aWRzX3ApCitQcmVzY2FuUHJlcGFyZWRUcmFu c2FjdGlvbnModm9pZCkKIHsKIAlGdWxsVHJhbnNhY3Rpb25JZCBuZXh0WGlkID0gVHJhbnNh bVZhcmlhYmxlcy0+bmV4dFhpZDsKIAlUcmFuc2FjdGlvbklkIG9yaWdOZXh0WGlkID0gWGlk RnJvbUZ1bGxUcmFuc2FjdGlvbklkKG5leHRYaWQpOwogCVRyYW5zYWN0aW9uSWQgcmVzdWx0 ID0gb3JpZ05leHRYaWQ7Ci0JVHJhbnNhY3Rpb25JZCAqeGlkcyA9IE5VTEw7Ci0JaW50CQkJ bnhpZHMgPSAwOwotCWludAkJCWFsbG9jc2l6ZSA9IDA7CiAJaW50CQkJaTsKIAogCUxXTG9j a0FjcXVpcmUoVHdvUGhhc2VTdGF0ZUxvY2ssIExXX0VYQ0xVU0lWRSk7CkBAIC0xOTk0LDM0 ICsxOTg4LDEwIEBAIFByZXNjYW5QcmVwYXJlZFRyYW5zYWN0aW9ucyhUcmFuc2FjdGlvbklk ICoqeGlkc19wLCBpbnQgKm54aWRzX3ApCiAJCWlmIChUcmFuc2FjdGlvbklkUHJlY2VkZXMo eGlkLCByZXN1bHQpKQogCQkJcmVzdWx0ID0geGlkOwogCi0JCWlmICh4aWRzX3ApCi0JCXsK LQkJCWlmIChueGlkcyA9PSBhbGxvY3NpemUpCi0JCQl7Ci0JCQkJaWYgKG54aWRzID09IDAp Ci0JCQkJewotCQkJCQlhbGxvY3NpemUgPSAxMDsKLQkJCQkJeGlkcyA9IHBhbGxvYyhhbGxv Y3NpemUgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCkpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJ ewotCQkJCQlhbGxvY3NpemUgPSBhbGxvY3NpemUgKiAyOwotCQkJCQl4aWRzID0gcmVwYWxs b2MoeGlkcywgYWxsb2NzaXplICogc2l6ZW9mKFRyYW5zYWN0aW9uSWQpKTsKLQkJCQl9Ci0J CQl9Ci0JCQl4aWRzW254aWRzKytdID0geGlkOwotCQl9Ci0KIAkJcGZyZWUoYnVmKTsKIAl9 CiAJTFdMb2NrUmVsZWFzZShUd29QaGFzZVN0YXRlTG9jayk7CiAKLQlpZiAoeGlkc19wKQot CXsKLQkJKnhpZHNfcCA9IHhpZHM7Ci0JCSpueGlkc19wID0gbnhpZHM7Ci0JfQotCiAJcmV0 dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0vdmFyc3VwLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS92YXJzdXAuYwppbmRl eCBmYjZhODZhZmNiLi5hMzdkMTc4ODZjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS92YXJzdXAuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS92 YXJzdXAuYwpAQCAtMTUsNiArMTUsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2Nsb2cuaCIK ICNpbmNsdWRlICJhY2Nlc3MvY29tbWl0X3RzLmgiCisjaW5jbHVkZSAiYWNjZXNzL2Nzbl9s b2cuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc3VidHJhbnMuaCIKICNpbmNsdWRlICJhY2Nlc3Mv dHJhbnNhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94YWN0LmMKaW5kZXggZGZjOGNmMmRjZi4uMDllZDUxMDk4OSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hhY3QuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPHVuaXN0 ZC5oPgogCiAjaW5jbHVkZSAiYWNjZXNzL2NvbW1pdF90cy5oIgorI2luY2x1ZGUgImFjY2Vz cy9jc25fbG9nLmgiCiAjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdC5oIgogI2luY2x1ZGUg ImFjY2Vzcy9wYXJhbGxlbC5oIgogI2luY2x1ZGUgImFjY2Vzcy9zdWJ0cmFucy5oIgpAQCAt MjA5LDcgKzIxMCw2IEBAIHR5cGVkZWYgc3RydWN0IFRyYW5zYWN0aW9uU3RhdGVEYXRhCiAJ aW50CQkJcHJldlNlY0NvbnRleHQ7IC8qIHByZXZpb3VzIFNlY3VyaXR5UmVzdHJpY3Rpb25D b250ZXh0ICovCiAJYm9vbAkJcHJldlhhY3RSZWFkT25seTsJLyogZW50cnktdGltZSB4YWN0 IHIvbyBzdGF0ZSAqLwogCWJvb2wJCXN0YXJ0ZWRJblJlY292ZXJ5OwkvKiBkaWQgd2Ugc3Rh cnQgaW4gcmVjb3Zlcnk/ICovCi0JYm9vbAkJZGlkTG9nWGlkOwkJLyogaGFzIHhpZCBiZWVu IGluY2x1ZGVkIGluIFdBTCByZWNvcmQ/ICovCiAJaW50CQkJcGFyYWxsZWxNb2RlTGV2ZWw7 CS8qIEVudGVyL0V4aXRQYXJhbGxlbE1vZGUgY291bnRlciAqLwogCWJvb2wJCXBhcmFsbGVs Q2hpbGRYYWN0OwkvKiBpcyBhbnkgcGFyZW50IHRyYW5zYWN0aW9uIHBhcmFsbGVsPyAqLwog CWJvb2wJCWNoYWluOwkJCS8qIHN0YXJ0IGEgbmV3IGJsb2NrIGFmdGVyIHRoaXMgb25lICov CkBAIC0yNDksMTMgKzI0OSw2IEBAIHN0YXRpYyBUcmFuc2FjdGlvblN0YXRlRGF0YSBUb3BU cmFuc2FjdGlvblN0YXRlRGF0YSA9IHsKIAkudG9wWGlkTG9nZ2VkID0gZmFsc2UsCiB9Owog Ci0vKgotICogdW5yZXBvcnRlZFhpZHMgaG9sZHMgWElEcyBvZiBhbGwgc3VidHJhbnNhY3Rp b25zIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4KLSAqIHJlcG9ydGVkIGluIGFuIFhMT0dfWEFD VF9BU1NJR05NRU5UIHJlY29yZC4KLSAqLwotc3RhdGljIGludAluVW5yZXBvcnRlZFhpZHM7 Ci1zdGF0aWMgVHJhbnNhY3Rpb25JZCB1bnJlcG9ydGVkWGlkc1tQR1BST0NfTUFYX0NBQ0hF RF9TVUJYSURTXTsKLQogc3RhdGljIFRyYW5zYWN0aW9uU3RhdGUgQ3VycmVudFRyYW5zYWN0 aW9uU3RhdGUgPSAmVG9wVHJhbnNhY3Rpb25TdGF0ZURhdGE7CiAKIC8qCkBAIC01MzEsMTgg KzUyNCw2IEBAIEdldEN1cnJlbnRGdWxsVHJhbnNhY3Rpb25JZElmQW55KHZvaWQpCiAJcmV0 dXJuIEN1cnJlbnRUcmFuc2FjdGlvblN0YXRlLT5mdWxsVHJhbnNhY3Rpb25JZDsKIH0KIAot LyoKLSAqCU1hcmtDdXJyZW50VHJhbnNhY3Rpb25JZExvZ2dlZElmQW55Ci0gKgotICogUmVt ZW1iZXIgdGhhdCB0aGUgY3VycmVudCB4aWQgLSBpZiBpdCBpcyBhc3NpZ25lZCAtIG5vdyBo YXMgYmVlbiB3YWwgbG9nZ2VkLgotICovCi12b2lkCi1NYXJrQ3VycmVudFRyYW5zYWN0aW9u SWRMb2dnZWRJZkFueSh2b2lkKQotewotCWlmIChGdWxsVHJhbnNhY3Rpb25JZElzVmFsaWQo Q3VycmVudFRyYW5zYWN0aW9uU3RhdGUtPmZ1bGxUcmFuc2FjdGlvbklkKSkKLQkJQ3VycmVu dFRyYW5zYWN0aW9uU3RhdGUtPmRpZExvZ1hpZCA9IHRydWU7Ci19Ci0KIC8qCiAgKiBJc1N1 YnhhY3RUb3BYaWRMb2dQZW5kaW5nCiAgKgpAQCAtNjM1LDcgKzYxNiw2IEBAIEFzc2lnblRy YW5zYWN0aW9uSWQoVHJhbnNhY3Rpb25TdGF0ZSBzKQogewogCWJvb2wJCWlzU3ViWGFjdCA9 IChzLT5wYXJlbnQgIT0gTlVMTCk7CiAJUmVzb3VyY2VPd25lciBjdXJyZW50T3duZXI7Ci0J Ym9vbAkJbG9nX3Vua25vd25fdG9wID0gZmFsc2U7CiAKIAkvKiBBc3NlcnQgdGhhdCBjYWxs ZXIgZGlkbid0IHNjcmV3IHVwICovCiAJQXNzZXJ0KCFGdWxsVHJhbnNhY3Rpb25JZElzVmFs aWQocy0+ZnVsbFRyYW5zYWN0aW9uSWQpKTsKQEAgLTY3OSwyMCArNjU5LDYgQEAgQXNzaWdu VHJhbnNhY3Rpb25JZChUcmFuc2FjdGlvblN0YXRlIHMpCiAJCXBmcmVlKHBhcmVudHMpOwog CX0KIAotCS8qCi0JICogV2hlbiB3YWxfbGV2ZWw9bG9naWNhbCwgZ3VhcmFudGVlIHRoYXQg YSBzdWJ0cmFuc2FjdGlvbidzIHhpZCBjYW4gb25seQotCSAqIGJlIHNlZW4gaW4gdGhlIFdB TCBzdHJlYW0gaWYgaXRzIHRvcGxldmVsIHhpZCBoYXMgYmVlbiBsb2dnZWQgYmVmb3JlLgot CSAqIElmIG5lY2Vzc2FyeSB3ZSBsb2cgYW4geGFjdF9hc3NpZ25tZW50IHJlY29yZCB3aXRo IGZld2VyIHRoYW4KLQkgKiBQR1BST0NfTUFYX0NBQ0hFRF9TVUJYSURTLiBOb3RlIHRoYXQg aXQgaXMgZmluZSBpZiBkaWRMb2dYaWQgaXNuJ3Qgc2V0Ci0JICogZm9yIGEgdHJhbnNhY3Rp b24gZXZlbiB0aG91Z2ggaXQgYXBwZWFycyBpbiBhIFdBTCByZWNvcmQsIHdlIGp1c3QgbWln aHQKLQkgKiBzdXBlcmZsdW91c2x5IGxvZyBzb21ldGhpbmcuIFRoYXQgY2FuIGhhcHBlbiB3 aGVuIGFuIHhpZCBpcyBpbmNsdWRlZAotCSAqIHNvbWV3aGVyZSBpbnNpZGUgYSB3YWwgcmVj b3JkLCBidXQgbm90IGluIFhMb2dSZWNvcmQtPnhsX3hpZCwgbGlrZSBpbgotCSAqIHhsX3N0 YW5kYnlfbG9ja3MuCi0JICovCi0JaWYgKGlzU3ViWGFjdCAmJiBYTG9nTG9naWNhbEluZm9B Y3RpdmUoKSAmJgotCQkhVG9wVHJhbnNhY3Rpb25TdGF0ZURhdGEuZGlkTG9nWGlkKQotCQls b2dfdW5rbm93bl90b3AgPSB0cnVlOwotCiAJLyoKIAkgKiBHZW5lcmF0ZSBhIG5ldyBGdWxs VHJhbnNhY3Rpb25JZCBhbmQgcmVjb3JkIGl0cyB4aWQgaW4gUEdQUk9DIGFuZAogCSAqIHBn X3N1YnRyYW5zLgpAQCAtNzI4LDU5ICs2OTQsNiBAQCBBc3NpZ25UcmFuc2FjdGlvbklkKFRy YW5zYWN0aW9uU3RhdGUgcykKIAlYYWN0TG9ja1RhYmxlSW5zZXJ0KFhpZEZyb21GdWxsVHJh bnNhY3Rpb25JZChzLT5mdWxsVHJhbnNhY3Rpb25JZCkpOwogCiAJQ3VycmVudFJlc291cmNl T3duZXIgPSBjdXJyZW50T3duZXI7Ci0KLQkvKgotCSAqIEV2ZXJ5IFBHUFJPQ19NQVhfQ0FD SEVEX1NVQlhJRFMgYXNzaWduZWQgdHJhbnNhY3Rpb24gaWRzIHdpdGhpbiBlYWNoCi0JICog dG9wLWxldmVsIHRyYW5zYWN0aW9uIHdlIGlzc3VlIGEgV0FMIHJlY29yZCBmb3IgdGhlIGFz c2lnbm1lbnQuIFdlCi0JICogaW5jbHVkZSB0aGUgdG9wLWxldmVsIHhpZCBhbmQgYWxsIHRo ZSBzdWJ4aWRzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4KLQkgKiByZXBvcnRlZCB1c2luZyBY TE9HX1hBQ1RfQVNTSUdOTUVOVCByZWNvcmRzLgotCSAqCi0JICogVGhpcyBpcyByZXF1aXJl ZCB0byBsaW1pdCB0aGUgYW1vdW50IG9mIHNoYXJlZCBtZW1vcnkgcmVxdWlyZWQgaW4gYSBo b3QKLQkgKiBzdGFuZGJ5IHNlcnZlciB0byBrZWVwIHRyYWNrIG9mIGluLXByb2dyZXNzIFhJ RHMuIFNlZSBub3RlcyBmb3IKLQkgKiBSZWNvcmRLbm93bkFzc2lnbmVkVHJhbnNhY3Rpb25J ZHMoKS4KLQkgKgotCSAqIFdlIGRvbid0IGtlZXAgdHJhY2sgb2YgdGhlIGltbWVkaWF0ZSBw YXJlbnQgb2YgZWFjaCBzdWJ4aWQsIG9ubHkgdGhlCi0JICogdG9wLWxldmVsIHRyYW5zYWN0 aW9uIHRoYXQgZWFjaCBzdWJ4YWN0IGJlbG9uZ3MgdG8uIFRoaXMgaXMgY29ycmVjdCBpbgot CSAqIHJlY292ZXJ5IG9ubHkgYmVjYXVzZSBhYm9ydGVkIHN1YnRyYW5zYWN0aW9ucyBhcmUg c2VwYXJhdGVseSBXQUwKLQkgKiBsb2dnZWQuCi0JICoKLQkgKiBUaGlzIGlzIGNvcnJlY3Qg ZXZlbiBmb3IgdGhlIGNhc2Ugd2hlcmUgc2V2ZXJhbCBsZXZlbHMgYWJvdmUgdXMgZGlkbid0 Ci0JICogaGF2ZSBhbiB4aWQgYXNzaWduZWQgYXMgd2UgcmVjdXJzZWQgdXAgdG8gdGhlbSBi ZWZvcmVoYW5kLgotCSAqLwotCWlmIChpc1N1YlhhY3QgJiYgWExvZ1N0YW5kYnlJbmZvQWN0 aXZlKCkpCi0JewotCQl1bnJlcG9ydGVkWGlkc1tuVW5yZXBvcnRlZFhpZHNdID0gWGlkRnJv bUZ1bGxUcmFuc2FjdGlvbklkKHMtPmZ1bGxUcmFuc2FjdGlvbklkKTsKLQkJblVucmVwb3J0 ZWRYaWRzKys7Ci0KLQkJLyoKLQkJICogZW5zdXJlIHRoaXMgdGVzdCBtYXRjaGVzIHNpbWls YXIgb25lIGluCi0JCSAqIFJlY292ZXJQcmVwYXJlZFRyYW5zYWN0aW9ucygpCi0JCSAqLwot CQlpZiAoblVucmVwb3J0ZWRYaWRzID49IFBHUFJPQ19NQVhfQ0FDSEVEX1NVQlhJRFMgfHwK LQkJCWxvZ191bmtub3duX3RvcCkKLQkJewotCQkJeGxfeGFjdF9hc3NpZ25tZW50IHhscmVj OwotCi0JCQkvKgotCQkJICogeHRvcCBpcyBhbHdheXMgc2V0IGJ5IG5vdyBiZWNhdXNlIHdl IHJlY3Vyc2UgdXAgdHJhbnNhY3Rpb24KLQkJCSAqIHN0YWNrIHRvIHRoZSBoaWdoZXN0IHVu YXNzaWduZWQgeGlkIGFuZCB0aGVuIGNvbWUgYmFjayBkb3duCi0JCQkgKi8KLQkJCXhscmVj Lnh0b3AgPSBHZXRUb3BUcmFuc2FjdGlvbklkKCk7Ci0JCQlBc3NlcnQoVHJhbnNhY3Rpb25J ZElzVmFsaWQoeGxyZWMueHRvcCkpOwotCQkJeGxyZWMubnN1YnhhY3RzID0gblVucmVwb3J0 ZWRYaWRzOwotCi0JCQlYTG9nQmVnaW5JbnNlcnQoKTsKLQkJCVhMb2dSZWdpc3RlckRhdGEo KGNoYXIgKikgJnhscmVjLCBNaW5TaXplT2ZYYWN0QXNzaWdubWVudCk7Ci0JCQlYTG9nUmVn aXN0ZXJEYXRhKChjaGFyICopIHVucmVwb3J0ZWRYaWRzLAotCQkJCQkJCSBuVW5yZXBvcnRl ZFhpZHMgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCkpOwotCi0JCQkodm9pZCkgWExvZ0luc2Vy dChSTV9YQUNUX0lELCBYTE9HX1hBQ1RfQVNTSUdOTUVOVCk7Ci0KLQkJCW5VbnJlcG9ydGVk WGlkcyA9IDA7Ci0JCQkvKiBtYXJrIHRvcCwgbm90IGN1cnJlbnQgeGFjdCBhcyBoYXZpbmcg YmVlbiBsb2dnZWQgKi8KLQkJCVRvcFRyYW5zYWN0aW9uU3RhdGVEYXRhLmRpZExvZ1hpZCA9 IHRydWU7Ci0JCX0KLQl9CiB9CiAKIC8qCkBAIC0xNDcwLDExICsxMzgzLDExIEBAIFJlY29y ZFRyYW5zYWN0aW9uQ29tbWl0KHZvaWQpCiAJICogdGVtcCB0YWJsZXMgd2lsbCBiZSBsb3N0 IGFueXdheSwgdW5sb2dnZWQgdGFibGVzIHdpbGwgYmUgdHJ1bmNhdGVkIGFuZAogCSAqIEhP VCBwcnVuaW5nIHdpbGwgYmUgZG9uZSBhZ2FpbiBsYXRlci4gKEdpdmVuIHRoZSBmb3JlZ29p bmcsIHlvdSBtaWdodAogCSAqIHRoaW5rIHRoYXQgaXQgd291bGQgYmUgdW5uZWNlc3Nhcnkg dG8gZW1pdCB0aGUgWExPRyByZWNvcmQgYXQgYWxsIGluCi0JICogdGhpcyBjYXNlLCBidXQg d2UgZG9uJ3QgY3VycmVudGx5IHRyeSB0byBkbyB0aGF0LiAgSXQgd291bGQgY2VydGFpbmx5 Ci0JICogY2F1c2UgcHJvYmxlbXMgYXQgbGVhc3QgaW4gSG90IFN0YW5kYnkgbW9kZSwgd2hl cmUgdGhlCi0JICogS25vd25Bc3NpZ25lZFhpZHMgbWFjaGluZXJ5IHJlcXVpcmVzIHRyYWNr aW5nIGV2ZXJ5IFhJRCBhc3NpZ25tZW50LiAgSXQKLQkgKiBtaWdodCBiZSBPSyB0byBza2lw IGl0IG9ubHkgd2hlbiB3YWxfbGV2ZWwgPCByZXBsaWNhLCBidXQgZm9yIG5vdyB3ZQotCSAq IGRvbid0LikKKwkgKiB0aGlzIGNhc2UsIGJ1dCB3ZSBkb24ndCBjdXJyZW50bHkgdHJ5IHRv IGRvIHRoYXQuICBJdCBtaWdodCBjYXVzZQorCSAqIGluZWZmaWNpZW5jaWVzIGluIEhvdCBT dGFuZGJ5IG1vZGUsIGlmIG5vdGhpbmcgZWxzZSwgd2hlcmUgdGhlCisJICogY29tbWl0L2Fi b3J0IHJlY29yZHMgYWxsb3cgYWR2YW5jaW5nIHRoZSB4bWluIGhvcml6b24gZm9yIG5ldwor CSAqIHNuYXBzaG90cy4gSXQgbWlnaHQgYmUgT0sgdG8gc2tpcCBpdCBvbmx5IHdoZW4gd2Fs X2xldmVsIDwgcmVwbGljYSwgYnV0CisJICogZm9yIG5vdyB3ZSBkb24ndC4pCiAJICoKIAkg KiBIb3dldmVyLCBpZiB3ZSdyZSBkb2luZyBjbGVhbnVwIG9mIGFueSBub24tdGVtcCByZWxz IG9yIGNvbW1pdHRpbmcgYW55CiAJICogY29tbWFuZCB0aGF0IHdhbnRlZCB0byBmb3JjZSBz eW5jIGNvbW1pdCwgdGhlbiB3ZSBtdXN0IGZsdXNoIFhMT0cKQEAgLTE5NDIsMTMgKzE4NTUs NiBAQCBBdFN1YkFib3J0X2NoaWxkWGlkcyh2b2lkKQogCXMtPmNoaWxkWGlkcyA9IE5VTEw7 CiAJcy0+bkNoaWxkWGlkcyA9IDA7CiAJcy0+bWF4Q2hpbGRYaWRzID0gMDsKLQotCS8qCi0J ICogV2UgY291bGQgcHJ1bmUgdGhlIHVucmVwb3J0ZWRYaWRzIGFycmF5IGhlcmUuIEJ1dCB3 ZSBkb24ndCBib3RoZXIuIFRoYXQKLQkgKiB3b3VsZCBwb3RlbnRpYWxseSByZWR1Y2UgbnVt YmVyIG9mIFhMT0dfWEFDVF9BU1NJR05NRU5UIHJlY29yZHMgYnV0IGl0Ci0JICogd291bGQg bGlrZWx5IGludHJvZHVjZSBtb3JlIENQVSB0aW1lIGludG8gdGhlIG1vcmUgY29tbW9uIHBh dGhzLCBzbyB3ZQotCSAqIGNob29zZSBub3QgdG8gZG8gdGhhdC4KLQkgKi8KIH0KIAogLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpAQCAtMjEzMSwxMiArMjAzNyw2IEBAIFN0YXJ0VHJhbnNhY3Rpb24odm9p ZCkKIAljdXJyZW50Q29tbWFuZElkID0gRmlyc3RDb21tYW5kSWQ7CiAJY3VycmVudENvbW1h bmRJZFVzZWQgPSBmYWxzZTsKIAotCS8qCi0JICogaW5pdGlhbGl6ZSByZXBvcnRlZCB4aWQg YWNjb3VudGluZwotCSAqLwotCW5VbnJlcG9ydGVkWGlkcyA9IDA7Ci0Jcy0+ZGlkTG9nWGlk ID0gZmFsc2U7Ci0KIAkvKgogCSAqIG11c3QgaW5pdGlhbGl6ZSByZXNvdXJjZS1tYW5hZ2Vt ZW50IHN0dWZmIGZpcnN0CiAJICovCkBAIC02MTQxLDcgKzYwNDEsNyBAQCB4YWN0X3JlZG9f Y29tbWl0KHhsX3hhY3RfcGFyc2VkX2NvbW1pdCAqcGFyc2VkLAogCVRyYW5zYWN0aW9uVHJl ZVNldENvbW1pdFRzRGF0YSh4aWQsIHBhcnNlZC0+bnN1YnhhY3RzLCBwYXJzZWQtPnN1Ynhh Y3RzLAogCQkJCQkJCQkgICBjb21taXRfdGltZSwgb3JpZ2luX2lkKTsKIAotCWlmIChzdGFu ZGJ5U3RhdGUgPT0gU1RBTkRCWV9ESVNBQkxFRCkKKwlpZiAoIUluSG90U3RhbmRieSkKIAl7 CiAJCS8qCiAJCSAqIE1hcmsgdGhlIHRyYW5zYWN0aW9uIGNvbW1pdHRlZCBpbiBwZ194YWN0 LgpAQCAtNjE2MSw2ICs2MDYxLDEyIEBAIHhhY3RfcmVkb19jb21taXQoeGxfeGFjdF9wYXJz ZWRfY29tbWl0ICpwYXJzZWQsCiAJCSAqLwogCQlSZWNvcmRLbm93bkFzc2lnbmVkVHJhbnNh Y3Rpb25JZHMobWF4X3hpZCk7CiAKKwkJLyoKKwkJICogTWFyayB0aGUgQ1NOTE9HIGZpcnN0 LiAgVGhlIHRyYW5zYWN0aW9uIHdvbid0IGJlY29tZSB2aXNpYmxlIHRvIG5ldworCQkgKiBz bmFwc2hvdHMgdW50aWwgdGhlIGNhbGwgdG8gUHJvY0FycmF5UmVjb3ZlcnlFbmRUcmFuc2Fj dGlvbigpLgorCQkgKi8KKwkJQ1NOTG9nU2V0Q1NOKHhpZCwgcGFyc2VkLT5uc3VieGFjdHMs IHBhcnNlZC0+c3VieGFjdHMsIGxzbik7CisKIAkJLyoKIAkJICogTWFyayB0aGUgdHJhbnNh Y3Rpb24gY29tbWl0dGVkIGluIHBnX3hhY3QuIFdlIHVzZSBhc3luYyBjb21taXQKIAkJICog cHJvdG9jb2wgZHVyaW5nIHJlY292ZXJ5IHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gb24gZGF0 YWJhc2UKQEAgLTYxNzMsOSArNjA3OSw5IEBAIHhhY3RfcmVkb19jb21taXQoeGxfeGFjdF9w YXJzZWRfY29tbWl0ICpwYXJzZWQsCiAJCVRyYW5zYWN0aW9uSWRBc3luY0NvbW1pdFRyZWUo eGlkLCBwYXJzZWQtPm5zdWJ4YWN0cywgcGFyc2VkLT5zdWJ4YWN0cywgbHNuKTsKIAogCQkv KgotCQkgKiBXZSBtdXN0IG1hcmsgY2xvZyBiZWZvcmUgd2UgdXBkYXRlIHRoZSBQcm9jQXJy YXkuCisJCSAqIE1ha2UgdGhlIGNvbW1pdCB2aXNpYmxlIHRvIG5ldyBzbmFwc2hvdHMgaW4g dGhlIFByb2NBcnJheS4KIAkJICovCi0JCUV4cGlyZVRyZWVLbm93bkFzc2lnbmVkVHJhbnNh Y3Rpb25JZHMoeGlkLCBwYXJzZWQtPm5zdWJ4YWN0cywgcGFyc2VkLT5zdWJ4YWN0cywgbWF4 X3hpZCk7CisJCVByb2NBcnJheVJlY292ZXJ5RW5kVHJhbnNhY3Rpb24obWF4X3hpZCwgbHNu KTsKIAogCQkvKgogCQkgKiBTZW5kIGFueSBjYWNoZSBpbnZhbGlkYXRpb25zIGF0dGFjaGVk IHRvIHRoZSBjb21taXQuIFdlIG11c3QKQEAgLTYyODEsNyArNjE4Nyw3IEBAIHhhY3RfcmVk b19hYm9ydCh4bF94YWN0X3BhcnNlZF9hYm9ydCAqcGFyc2VkLCBUcmFuc2FjdGlvbklkIHhp ZCwKIAkJCQkJCQkJICBwYXJzZWQtPnN1YnhhY3RzKTsKIAlBZHZhbmNlTmV4dEZ1bGxUcmFu c2FjdGlvbklkUGFzdFhpZChtYXhfeGlkKTsKIAotCWlmIChzdGFuZGJ5U3RhdGUgPT0gU1RB TkRCWV9ESVNBQkxFRCkKKwlpZiAoIUluSG90U3RhbmRieSkKIAl7CiAJCS8qIE1hcmsgdGhl IHRyYW5zYWN0aW9uIGFib3J0ZWQgaW4gcGdfeGFjdCwgbm8gbmVlZCBmb3IgYXN5bmMgc3R1 ZmYgKi8KIAkJVHJhbnNhY3Rpb25JZEFib3J0VHJlZSh4aWQsIHBhcnNlZC0+bnN1YnhhY3Rz LCBwYXJzZWQtPnN1YnhhY3RzKTsKQEAgLTYyOTksMTMgKzYyMDUsMTUgQEAgeGFjdF9yZWRv X2Fib3J0KHhsX3hhY3RfcGFyc2VkX2Fib3J0ICpwYXJzZWQsIFRyYW5zYWN0aW9uSWQgeGlk LAogCQkgKi8KIAkJUmVjb3JkS25vd25Bc3NpZ25lZFRyYW5zYWN0aW9uSWRzKG1heF94aWQp OwogCisJCS8qIE5vdGU6IHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBDU04gbG9nIG9u IGFib3J0LiAqLworCiAJCS8qIE1hcmsgdGhlIHRyYW5zYWN0aW9uIGFib3J0ZWQgaW4gcGdf eGFjdCwgbm8gbmVlZCBmb3IgYXN5bmMgc3R1ZmYgKi8KIAkJVHJhbnNhY3Rpb25JZEFib3J0 VHJlZSh4aWQsIHBhcnNlZC0+bnN1YnhhY3RzLCBwYXJzZWQtPnN1YnhhY3RzKTsKIAogCQkv KgogCQkgKiBXZSBtdXN0IHVwZGF0ZSB0aGUgUHJvY0FycmF5IGFmdGVyIHdlIGhhdmUgbWFy a2VkIGNsb2cuCiAJCSAqLwotCQlFeHBpcmVUcmVlS25vd25Bc3NpZ25lZFRyYW5zYWN0aW9u SWRzKHhpZCwgcGFyc2VkLT5uc3VieGFjdHMsIHBhcnNlZC0+c3VieGFjdHMsIG1heF94aWQp OworCQlQcm9jQXJyYXlSZWNvdmVyeUVuZFRyYW5zYWN0aW9uKG1heF94aWQsIGxzbik7CiAK IAkJLyoKIAkJICogVGhlcmUgYXJlIG5vIGludmFsaWRhdGlvbiBtZXNzYWdlcyB0byBzZW5k IG9yIHVuZG8uCkBAIC02NDEzLDE0ICs2MzIxLDYgQEAgeGFjdF9yZWRvKFhMb2dSZWFkZXJT dGF0ZSAqcmVjb3JkKQogCQkJCQkgICBYTG9nUmVjR2V0T3JpZ2luKHJlY29yZCkpOwogCQlM V0xvY2tSZWxlYXNlKFR3b1BoYXNlU3RhdGVMb2NrKTsKIAl9Ci0JZWxzZSBpZiAoaW5mbyA9 PSBYTE9HX1hBQ1RfQVNTSUdOTUVOVCkKLQl7Ci0JCXhsX3hhY3RfYXNzaWdubWVudCAqeGxy ZWMgPSAoeGxfeGFjdF9hc3NpZ25tZW50ICopIFhMb2dSZWNHZXREYXRhKHJlY29yZCk7Ci0K LQkJaWYgKHN0YW5kYnlTdGF0ZSA+PSBTVEFOREJZX0lOSVRJQUxJWkVEKQotCQkJUHJvY0Fy cmF5QXBwbHlYaWRBc3NpZ25tZW50KHhscmVjLT54dG9wLAotCQkJCQkJCQkJCXhscmVjLT5u c3VieGFjdHMsIHhscmVjLT54c3ViKTsKLQl9CiAJZWxzZSBpZiAoaW5mbyA9PSBYTE9HX1hB Q1RfSU5WQUxJREFUSU9OUykKIAl7CiAJCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n LmMKaW5kZXggZWUwZmIwZTI4Zi4uYjFhZjkzMzJhMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2cuYwpAQCAtNDgsNiArNDgsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2Nsb2cu aCIKICNpbmNsdWRlICJhY2Nlc3MvY29tbWl0X3RzLmgiCisjaW5jbHVkZSAiYWNjZXNzL2Nz bl9sb2cuaCIKICNpbmNsdWRlICJhY2Nlc3MvaGVhcHRvYXN0LmgiCiAjaW5jbHVkZSAiYWNj ZXNzL211bHRpeGFjdC5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZXdyaXRlaGVhcC5oIgpAQCAt OTUwLDggKzk1MSw2IEBAIFhMb2dJbnNlcnRSZWNvcmQoWExvZ1JlY0RhdGEgKnJkYXRhLAog CiAJRU5EX0NSSVRfU0VDVElPTigpOwogCi0JTWFya0N1cnJlbnRUcmFuc2FjdGlvbklkTG9n Z2VkSWZBbnkoKTsKLQogCS8qCiAJICogTWFyayB0b3AgdHJhbnNhY3Rpb24gaWQgaXMgbG9n Z2VkIChpZiBuZWVkZWQpIHNvIHRoYXQgd2Ugc2hvdWxkIG5vdCB0cnkKIAkgKiB0byBsb2cg aXQgYWdhaW4gd2l0aCB0aGUgbmV4dCBXQUwgcmVjb3JkIGluIHRoZSBjdXJyZW50IHN1YnRy YW5zYWN0aW9uLgpAQCAtNTE1Myw2ICs1MTUyLDcgQEAgQm9vdFN0cmFwWExPRyh1aW50MzIg ZGF0YV9jaGVja3N1bV92ZXJzaW9uKQogCiAJLyogQm9vdHN0cmFwIHRoZSBjb21taXQgbG9n LCB0b28gKi8KIAlCb290U3RyYXBDTE9HKCk7CisJQm9vdFN0cmFwQ1NOTG9nKCk7CiAJQm9v dFN0cmFwQ29tbWl0VHMoKTsKIAlCb290U3RyYXBTVUJUUkFOUygpOwogCUJvb3RTdHJhcE11 bHRpWGFjdCgpOwpAQCAtNTc1NCwxNiArNTc1NCwxNiBAQCBTdGFydHVwWExPRyh2b2lkKQog CQkgKi8KIAkJaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCAmJiBFbmFibGVIb3RTdGFu ZGJ5KQogCQl7Ci0JCQlUcmFuc2FjdGlvbklkICp4aWRzOwotCQkJaW50CQkJbnhpZHM7CisJ CQlGdWxsVHJhbnNhY3Rpb25JZCBsYXRlc3RDb21wbGV0ZWRYaWQ7CiAKIAkJCWVyZXBvcnQo REVCVUcxLAogCQkJCQkoZXJybXNnX2ludGVybmFsKCJpbml0aWFsaXppbmcgZm9yIGhvdCBz dGFuZGJ5IikpKTsKKwkJCUluSG90U3RhbmRieSA9IHRydWU7CiAKIAkJCUluaXRSZWNvdmVy eVRyYW5zYWN0aW9uRW52aXJvbm1lbnQoKTsKIAogCQkJaWYgKHdhc1NodXRkb3duKQotCQkJ CW9sZGVzdEFjdGl2ZVhJRCA9IFByZXNjYW5QcmVwYXJlZFRyYW5zYWN0aW9ucygmeGlkcywg Jm54aWRzKTsKKwkJCQlvbGRlc3RBY3RpdmVYSUQgPSBQcmVzY2FuUHJlcGFyZWRUcmFuc2Fj dGlvbnMoKTsKIAkJCWVsc2UKIAkJCQlvbGRlc3RBY3RpdmVYSUQgPSBjaGVja1BvaW50Lm9s ZGVzdEFjdGl2ZVhpZDsKIAkJCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChvbGRlc3RB Y3RpdmVYSUQpKTsKQEAgLTU3NzgsMzkgKzU3NzgsMTcgQEAgU3RhcnR1cFhMT0codm9pZCkK IAkJCSAqLwogCQkJU3RhcnR1cFNVQlRSQU5TKG9sZGVzdEFjdGl2ZVhJRCk7CiAKLQkJCS8q Ci0JCQkgKiBJZiB3ZSdyZSBiZWdpbm5pbmcgYXQgYSBzaHV0ZG93biBjaGVja3BvaW50LCB3 ZSBrbm93IHRoYXQKLQkJCSAqIG5vdGhpbmcgd2FzIHJ1bm5pbmcgb24gdGhlIHByaW1hcnkg YXQgdGhpcyBwb2ludC4gU28gZmFrZS11cCBhbgotCQkJICogZW1wdHkgcnVubmluZy14YWN0 cyByZWNvcmQgYW5kIHVzZSB0aGF0IGhlcmUgYW5kIG5vdy4gUmVjb3ZlcgotCQkJICogYWRk aXRpb25hbCBzdGFuZGJ5IHN0YXRlIGZvciBwcmVwYXJlZCB0cmFuc2FjdGlvbnMuCi0JCQkg Ki8KLQkJCWlmICh3YXNTaHV0ZG93bikKLQkJCXsKLQkJCQlSdW5uaW5nVHJhbnNhY3Rpb25z RGF0YSBydW5uaW5nOwotCQkJCVRyYW5zYWN0aW9uSWQgbGF0ZXN0Q29tcGxldGVkWGlkOwor CQkJbGF0ZXN0Q29tcGxldGVkWGlkID0gY2hlY2tQb2ludC5uZXh0WGlkOworCQkJRnVsbFRy YW5zYWN0aW9uSWRSZXRyZWF0KCZsYXRlc3RDb21wbGV0ZWRYaWQpOworCQkJVHJhbnNhbVZh cmlhYmxlcy0+bGF0ZXN0Q29tcGxldGVkWGlkID0gbGF0ZXN0Q29tcGxldGVkWGlkOwogCi0J CQkJLyogVXBkYXRlIHBnX3N1YnRyYW5zIGVudHJpZXMgZm9yIGFueSBwcmVwYXJlZCB0cmFu c2FjdGlvbnMgKi8KLQkJCQlTdGFuZGJ5UmVjb3ZlclByZXBhcmVkVHJhbnNhY3Rpb25zKCk7 CisJCQlTdGFydHVwQ1NOTG9nKG9sZGVzdEFjdGl2ZVhJRCwgUmVkb1JlY1B0cik7CiAKLQkJ CQkvKgotCQkJCSAqIENvbnN0cnVjdCBhIFJ1bm5pbmdUcmFuc2FjdGlvbnMgc25hcHNob3Qg cmVwcmVzZW50aW5nIGEKLQkJCQkgKiBzaHV0IGRvd24gc2VydmVyLCB3aXRoIG9ubHkgcHJl cGFyZWQgdHJhbnNhY3Rpb25zIHN0aWxsCi0JCQkJICogYWxpdmUuIFdlJ3JlIG5ldmVyIG92 ZXJmbG93ZWQgYXQgdGhpcyBwb2ludCBiZWNhdXNlIGFsbAotCQkJCSAqIHN1YnhpZHMgYXJl IGxpc3RlZCB3aXRoIHRoZWlyIHBhcmVudCBwcmVwYXJlZCB0cmFuc2FjdGlvbnMuCi0JCQkJ ICovCi0JCQkJcnVubmluZy54Y250ID0gbnhpZHM7Ci0JCQkJcnVubmluZy5zdWJ4Y250ID0g MDsKLQkJCQlydW5uaW5nLnN1YnhpZF9zdGF0dXMgPSBTVUJYSURTX0lOX1NVQlRSQU5TOwot CQkJCXJ1bm5pbmcubmV4dFhpZCA9IFhpZEZyb21GdWxsVHJhbnNhY3Rpb25JZChjaGVja1Bv aW50Lm5leHRYaWQpOwotCQkJCXJ1bm5pbmcub2xkZXN0UnVubmluZ1hpZCA9IG9sZGVzdEFj dGl2ZVhJRDsKLQkJCQlsYXRlc3RDb21wbGV0ZWRYaWQgPSBYaWRGcm9tRnVsbFRyYW5zYWN0 aW9uSWQoY2hlY2tQb2ludC5uZXh0WGlkKTsKLQkJCQlUcmFuc2FjdGlvbklkUmV0cmVhdChs YXRlc3RDb21wbGV0ZWRYaWQpOwotCQkJCUFzc2VydChUcmFuc2FjdGlvbklkSXNOb3JtYWwo bGF0ZXN0Q29tcGxldGVkWGlkKSk7Ci0JCQkJcnVubmluZy5sYXRlc3RDb21wbGV0ZWRYaWQg PSBsYXRlc3RDb21wbGV0ZWRYaWQ7Ci0JCQkJcnVubmluZy54aWRzID0geGlkczsKLQotCQkJ CVByb2NBcnJheUFwcGx5UmVjb3ZlcnlJbmZvKCZydW5uaW5nKTsKLQkJCX0KKwkJCVByb2NB cnJheVVwZGF0ZU9sZGVzdFJ1bm5pbmdYaWQob2xkZXN0QWN0aXZlWElEKTsKKworCQkJLyog VXBkYXRlIHBnX3N1YnRyYW5zIGVudHJpZXMgZm9yIGFueSBwcmVwYXJlZCB0cmFuc2FjdGlv bnMgKi8KKwkJCWlmICh3YXNTaHV0ZG93bikKKwkJCQlTdGFuZGJ5UmVjb3ZlclByZXBhcmVk VHJhbnNhY3Rpb25zKCk7CiAJCX0KIAogCQkvKgpAQCAtNTg5NCw3ICs1ODcyLDcgQEAgU3Rh cnR1cFhMT0codm9pZCkKIAkgKiBUaGlzIGluZm9ybWF0aW9uIGlzIG5vdCBxdWl0ZSBuZWVk ZWQgeWV0LCBidXQgaXQgaXMgcG9zaXRpb25lZCBoZXJlIHNvCiAJICogYXMgcG90ZW50aWFs IHByb2JsZW1zIGFyZSBkZXRlY3RlZCBiZWZvcmUgYW55IG9uLWRpc2sgY2hhbmdlIGlzIGRv bmUuCiAJICovCi0Jb2xkZXN0QWN0aXZlWElEID0gUHJlc2NhblByZXBhcmVkVHJhbnNhY3Rp b25zKE5VTEwsIE5VTEwpOworCW9sZGVzdEFjdGl2ZVhJRCA9IFByZXNjYW5QcmVwYXJlZFRy YW5zYWN0aW9ucygpOwogCiAJLyoKIAkgKiBBbGxvdyBvcmRpbmFyeSBXQUwgc2VnbWVudCBj cmVhdGlvbiBiZWZvcmUgcG9zc2libHkgc3dpdGNoaW5nIHRvIGEgbmV3CkBAIC02MDYwLDkg KzYwMzgsMTggQEAgU3RhcnR1cFhMT0codm9pZCkKIAkgKiBTdGFydCB1cCBzdWJ0cmFucywg aWYgbm90IGFscmVhZHkgZG9uZSBmb3IgaG90IHN0YW5kYnkuICAoY29tbWl0CiAJICogdGlt ZXN0YW1wcyBhcmUgc3RhcnRlZCBiZWxvdywgaWYgbmVjZXNzYXJ5LikKIAkgKi8KLQlpZiAo c3RhbmRieVN0YXRlID09IFNUQU5EQllfRElTQUJMRUQpCisJaWYgKCFJbkhvdFN0YW5kYnkp CisJewogCQlTdGFydHVwU1VCVFJBTlMob2xkZXN0QWN0aXZlWElEKTsKIAorCQkvKgorCQkg KiBUT0RPOiB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSBDU04gbG9nIGZyb20gbm93IG9uLCBi dXQgaXQncyBzdGlsbAorCQkgKiByZXF1aXJlZCBieSBzbmFwc2hvdHMgdGhhdCB3ZXJlIHRh a2VuIGJlZm9yZSByZWNvdmVyeSBlbmRlZC4gIFdlCisJCSAqIGp1c3QgbGV0IGl0IGJlLCBi dXQgaXQgd291bGQgYmUgbmljZSB0byB0cnVuY2F0ZSBpdCB0byAwIGFmdGVyIGFsbAorCQkg KiB0aGUgc25hcHNob3RzIGFyZSBnb25lLgorCQkgKi8KKwl9CisKIAkvKgogCSAqIFBlcmZv cm0gZW5kIG9mIHJlY292ZXJ5IGFjdGlvbnMgZm9yIGFueSBTTFJVcyB0aGF0IG5lZWQgaXQu CiAJICovCkBAIC02MTU0LDEyICs2MTQxLDEyIEBAIFN0YXJ0dXBYTE9HKHZvaWQpCiAJICog U2h1dGRvd24gdGhlIHJlY292ZXJ5IGVudmlyb25tZW50LiAgVGhpcyBtdXN0IG9jY3VyIGFm dGVyCiAJICogUmVjb3ZlclByZXBhcmVkVHJhbnNhY3Rpb25zKCkgKHNlZSBub3RlcyBpbiBs b2NrX3R3b3BoYXNlX3JlY292ZXIoKSkKIAkgKiBhbmQgYWZ0ZXIgc3dpdGNoaW5nIFNoYXJl ZFJlY292ZXJ5U3RhdGUgdG8gUkVDT1ZFUllfU1RBVEVfRE9ORSBzbyBhcwotCSAqIGFueSBz ZXNzaW9uIGJ1aWxkaW5nIGEgc25hcHNob3Qgd2lsbCBub3QgcmVseSBvbiBLbm93bkFzc2ln bmVkWGlkcyBhcworCSAqIGFueSBzZXNzaW9uIGJ1aWxkaW5nIGEgc25hcHNob3Qgd2lsbCBu b3QgcmVseSBvbiB0aGUgQ1NOIGxvZyBhcwogCSAqIFJlY292ZXJ5SW5Qcm9ncmVzcygpIHdv dWxkIHJldHVybiBmYWxzZSBhdCB0aGlzIHN0YWdlLiAgVGhpcyBpcwogCSAqIHBhcnRpY3Vs YXJseSBjcml0aWNhbCBmb3IgcHJlcGFyZWQgMlBDIHRyYW5zYWN0aW9ucywgdGhhdCB3b3Vs ZCBzdGlsbAogCSAqIG5lZWQgdG8gYmUgaW5jbHVkZWQgaW4gc25hcHNob3RzIG9uY2UgcmVj b3ZlcnkgaGFzIGVuZGVkLgogCSAqLwotCWlmIChzdGFuZGJ5U3RhdGUgIT0gU1RBTkRCWV9E SVNBQkxFRCkKKwlpZiAoSW5Ib3RTdGFuZGJ5KQogCQlTaHV0ZG93blJlY292ZXJ5VHJhbnNh Y3Rpb25FbnZpcm9ubWVudCgpOwogCiAJLyoKQEAgLTY5MjYsNyArNjkxMyw3IEBAIENyZWF0 ZUNoZWNrUG9pbnQoaW50IGZsYWdzKQogCSAqIHN0YXJ0aW5nIHNuYXBzaG90IG9mIGxvY2tz IGFuZCB0cmFuc2FjdGlvbnMuCiAJICovCiAJaWYgKCFzaHV0ZG93biAmJiBYTG9nU3RhbmRi eUluZm9BY3RpdmUoKSkKLQkJY2hlY2tQb2ludC5vbGRlc3RBY3RpdmVYaWQgPSBHZXRPbGRl c3RBY3RpdmVUcmFuc2FjdGlvbklkKCk7CisJCWNoZWNrUG9pbnQub2xkZXN0QWN0aXZlWGlk ID0gR2V0T2xkZXN0QWN0aXZlVHJhbnNhY3Rpb25JZCh0cnVlKTsKIAllbHNlCiAJCWNoZWNr UG9pbnQub2xkZXN0QWN0aXZlWGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAKQEAgLTcz MTgsNyArNzMwNSwxMCBAQCBDcmVhdGVDaGVja1BvaW50KGludCBmbGFncykKIAkgKiBTdGFy dHVwU1VCVFJBTlMgaGFzbid0IGJlZW4gY2FsbGVkIHlldC4KIAkgKi8KIAlpZiAoIVJlY292 ZXJ5SW5Qcm9ncmVzcygpKQorCXsKIAkJVHJ1bmNhdGVTVUJUUkFOUyhHZXRPbGRlc3RUcmFu c2FjdGlvbklkQ29uc2lkZXJlZFJ1bm5pbmcoKSk7CisJCVRydW5jYXRlQ1NOTG9nKEdldE9s ZGVzdFRyYW5zYWN0aW9uSWRDb25zaWRlcmVkUnVubmluZygpKTsKKwl9CiAKIAkvKiBSZWFs IHdvcmsgaXMgZG9uZTsgbG9nIGFuZCB1cGRhdGUgc3RhdHMuICovCiAJTG9nQ2hlY2twb2lu dEVuZChmYWxzZSk7CkBAIC03NDg5LDYgKzc0NzksNyBAQCBDaGVja1BvaW50R3V0cyhYTG9n UmVjUHRyIGNoZWNrUG9pbnRSZWRvLCBpbnQgZmxhZ3MpCiAJVFJBQ0VfUE9TVEdSRVNRTF9C VUZGRVJfQ0hFQ0tQT0lOVF9TVEFSVChmbGFncyk7CiAJQ2hlY2twb2ludFN0YXRzLmNrcHRf d3JpdGVfdCA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKIAlDaGVja1BvaW50Q0xPRygpOwor CUNoZWNrUG9pbnRDU05Mb2coKTsKIAlDaGVja1BvaW50Q29tbWl0VHMoKTsKIAlDaGVja1Bv aW50U1VCVFJBTlMoKTsKIAlDaGVja1BvaW50TXVsdGlYYWN0KCk7CkBAIC03Nzg1LDcgKzc3 NzYsMTAgQEAgQ3JlYXRlUmVzdGFydFBvaW50KGludCBmbGFncykKIAkgKiB0aGlzIGJlY2F1 c2UgU3RhcnR1cFNVQlRSQU5TIGhhc24ndCBiZWVuIGNhbGxlZCB5ZXQuCiAJICovCiAJaWYg KEVuYWJsZUhvdFN0YW5kYnkpCisJewogCQlUcnVuY2F0ZVNVQlRSQU5TKEdldE9sZGVzdFRy YW5zYWN0aW9uSWRDb25zaWRlcmVkUnVubmluZygpKTsKKwkJVHJ1bmNhdGVDU05Mb2coR2V0 T2xkZXN0VHJhbnNhY3Rpb25JZENvbnNpZGVyZWRSdW5uaW5nKCkpOworCX0KIAogCS8qIFJl YWwgd29yayBpcyBkb25lOyBsb2cgYW5kIHVwZGF0ZSBzdGF0cy4gKi8KIAlMb2dDaGVja3Bv aW50RW5kKHRydWUpOwpAQCAtODI3MCw0MSArODI2NCwxNyBAQCB4bG9nX3JlZG8oWExvZ1Jl YWRlclN0YXRlICpyZWNvcmQpCiAKIAkJLyoKIAkJICogSWYgd2Ugc2VlIGEgc2h1dGRvd24g Y2hlY2twb2ludCwgd2Uga25vdyB0aGF0IG5vdGhpbmcgd2FzIHJ1bm5pbmcKLQkJICogb24g dGhlIHByaW1hcnkgYXQgdGhpcyBwb2ludC4gU28gZmFrZS11cCBhbiBlbXB0eSBydW5uaW5n LXhhY3RzCi0JCSAqIHJlY29yZCBhbmQgdXNlIHRoYXQgaGVyZSBhbmQgbm93LiBSZWNvdmVy IGFkZGl0aW9uYWwgc3RhbmRieSBzdGF0ZQotCQkgKiBmb3IgcHJlcGFyZWQgdHJhbnNhY3Rp b25zLgorCQkgKiBvbiB0aGUgcHJpbWFyeSBhdCB0aGlzIHBvaW50LCBleGNlcHQgZm9yIHBy ZXBhcmVkIHRyYW5zYWN0aW9ucy4KIAkJICovCi0JCWlmIChzdGFuZGJ5U3RhdGUgPj0gU1RB TkRCWV9JTklUSUFMSVpFRCkKKwkJaWYgKEluSG90U3RhbmRieSkKIAkJewotCQkJVHJhbnNh Y3Rpb25JZCAqeGlkczsKLQkJCWludAkJCW54aWRzOwogCQkJVHJhbnNhY3Rpb25JZCBvbGRl c3RBY3RpdmVYSUQ7Ci0JCQlUcmFuc2FjdGlvbklkIGxhdGVzdENvbXBsZXRlZFhpZDsKLQkJ CVJ1bm5pbmdUcmFuc2FjdGlvbnNEYXRhIHJ1bm5pbmc7CiAKLQkJCW9sZGVzdEFjdGl2ZVhJ RCA9IFByZXNjYW5QcmVwYXJlZFRyYW5zYWN0aW9ucygmeGlkcywgJm54aWRzKTsKKwkJCW9s ZGVzdEFjdGl2ZVhJRCA9IFByZXNjYW5QcmVwYXJlZFRyYW5zYWN0aW9ucygpOworCQkJUHJv Y0FycmF5VXBkYXRlT2xkZXN0UnVubmluZ1hpZChvbGRlc3RBY3RpdmVYSUQpOwogCiAJCQkv KiBVcGRhdGUgcGdfc3VidHJhbnMgZW50cmllcyBmb3IgYW55IHByZXBhcmVkIHRyYW5zYWN0 aW9ucyAqLwogCQkJU3RhbmRieVJlY292ZXJQcmVwYXJlZFRyYW5zYWN0aW9ucygpOwotCi0J CQkvKgotCQkJICogQ29uc3RydWN0IGEgUnVubmluZ1RyYW5zYWN0aW9ucyBzbmFwc2hvdCBy ZXByZXNlbnRpbmcgYSBzaHV0Ci0JCQkgKiBkb3duIHNlcnZlciwgd2l0aCBvbmx5IHByZXBh cmVkIHRyYW5zYWN0aW9ucyBzdGlsbCBhbGl2ZS4gV2UncmUKLQkJCSAqIG5ldmVyIG92ZXJm bG93ZWQgYXQgdGhpcyBwb2ludCBiZWNhdXNlIGFsbCBzdWJ4aWRzIGFyZSBsaXN0ZWQKLQkJ CSAqIHdpdGggdGhlaXIgcGFyZW50IHByZXBhcmVkIHRyYW5zYWN0aW9ucy4KLQkJCSAqLwot CQkJcnVubmluZy54Y250ID0gbnhpZHM7Ci0JCQlydW5uaW5nLnN1YnhjbnQgPSAwOwotCQkJ cnVubmluZy5zdWJ4aWRfc3RhdHVzID0gU1VCWElEU19JTl9TVUJUUkFOUzsKLQkJCXJ1bm5p bmcubmV4dFhpZCA9IFhpZEZyb21GdWxsVHJhbnNhY3Rpb25JZChjaGVja1BvaW50Lm5leHRY aWQpOwotCQkJcnVubmluZy5vbGRlc3RSdW5uaW5nWGlkID0gb2xkZXN0QWN0aXZlWElEOwot CQkJbGF0ZXN0Q29tcGxldGVkWGlkID0gWGlkRnJvbUZ1bGxUcmFuc2FjdGlvbklkKGNoZWNr UG9pbnQubmV4dFhpZCk7Ci0JCQlUcmFuc2FjdGlvbklkUmV0cmVhdChsYXRlc3RDb21wbGV0 ZWRYaWQpOwotCQkJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc05vcm1hbChsYXRlc3RDb21wbGV0 ZWRYaWQpKTsKLQkJCXJ1bm5pbmcubGF0ZXN0Q29tcGxldGVkWGlkID0gbGF0ZXN0Q29tcGxl dGVkWGlkOwotCQkJcnVubmluZy54aWRzID0geGlkczsKLQotCQkJUHJvY0FycmF5QXBwbHlS ZWNvdmVyeUluZm8oJnJ1bm5pbmcpOwogCQl9CiAKIAkJLyogQ29udHJvbEZpbGUtPmNoZWNr UG9pbnRDb3B5IGFsd2F5cyB0cmFja3MgdGhlIGxhdGVzdCBja3B0IFhJRCAqLwpAQCAtODM2 OCw2ICs4MzM4LDE2IEBAIHhsb2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJ CQkJCQkJICBjaGVja1BvaW50Lm9sZGVzdFhpZCkpCiAJCQlTZXRUcmFuc2FjdGlvbklkTGlt aXQoY2hlY2tQb2ludC5vbGRlc3RYaWQsCiAJCQkJCQkJCSAgY2hlY2tQb2ludC5vbGRlc3RY aWREQik7CisKKwkJLyoKKwkJICogUmVtZW1iZXIgdGhlIG9sZGVzdCBYSUQgdGhhdCB3YXMg cnVubmluZyBhdCB0aGUgdGltZS4gIE5vcm1hbGx5LAorCQkgKiBhbGwgdHJhbnNhY3Rpb24g YWJvcnRzIGFuZCBjb21taXRzIGFyZSBXQUwtbG9nZ2VkLCBzbyBvdXIKKwkJICogb2xkZXN0 UnVubmluZ1hpZCB2YWx1ZSBzaG91bGQgYmUgdXAtdG8tZGF0ZSwgYnV0IGlmIG5vdCwgdGhp cworCQkgKiBhbGxvd3MgdXMgdG8gcmVzeW5jaHJvbml6ZS4KKwkJICovCisJCWlmIChJbkhv dFN0YW5kYnkpCisJCQlQcm9jQXJyYXlVcGRhdGVPbGRlc3RSdW5uaW5nWGlkKGNoZWNrUG9p bnQub2xkZXN0QWN0aXZlWGlkKTsKKwogCQkvKiBDb250cm9sRmlsZS0+Y2hlY2tQb2ludENv cHkgYWx3YXlzIHRyYWNrcyB0aGUgbGF0ZXN0IGNrcHQgWElEICovCiAJCUxXTG9ja0FjcXVp cmUoQ29udHJvbEZpbGVMb2NrLCBMV19FWENMVVNJVkUpOwogCQlDb250cm9sRmlsZS0+Y2hl Y2tQb2ludENvcHkubmV4dFhpZCA9IGNoZWNrUG9pbnQubmV4dFhpZDsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKaW5kZXggYWQ4MTdmYmNhNi4uMzI0 YTkzNWQ3NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3Jl Y292ZXJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5 LmMKQEAgLTE5ODYsMTAgKzE5ODYsOSBAQCBBcHBseVdhbFJlY29yZChYTG9nUmVhZGVyU3Rh dGUgKnhsb2dyZWFkZXIsIFhMb2dSZWNvcmQgKnJlY29yZCwgVGltZUxpbmVJRCAqcmVwbAog CVNwaW5Mb2NrUmVsZWFzZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CiAKIAkvKgot CSAqIElmIHdlIGFyZSBhdHRlbXB0aW5nIHRvIGVudGVyIEhvdCBTdGFuZGJ5IG1vZGUsIHBy b2Nlc3MgWElEcyB3ZSBzZWUKKwkgKiBJbiBIb3QgU3RhbmRieSBtb2RlLCBwcm9jZXNzIFhJ RHMgd2Ugc2VlCiAJICovCi0JaWYgKHN0YW5kYnlTdGF0ZSA+PSBTVEFOREJZX0lOSVRJQUxJ WkVEICYmCi0JCVRyYW5zYWN0aW9uSWRJc1ZhbGlkKHJlY29yZC0+eGxfeGlkKSkKKwlpZiAo SW5Ib3RTdGFuZGJ5ICYmIFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHJlY29yZC0+eGxfeGlkKSkK IAkJUmVjb3JkS25vd25Bc3NpZ25lZFRyYW5zYWN0aW9uSWRzKHJlY29yZC0+eGxfeGlkKTsK IAogCS8qCkBAIC0yMjY1LDcgKzIyNjQsNyBAQCBDaGVja1JlY292ZXJ5Q29uc2lzdGVuY3ko dm9pZCkKIAkgKiBydW4/IElmIHNvLCB3ZSBjYW4gdGVsbCBwb3N0bWFzdGVyIHRoYXQgdGhl IGRhdGFiYXNlIGlzIGNvbnNpc3RlbnQgbm93LAogCSAqIGVuYWJsaW5nIGNvbm5lY3Rpb25z LgogCSAqLwotCWlmIChzdGFuZGJ5U3RhdGUgPT0gU1RBTkRCWV9TTkFQU0hPVF9SRUFEWSAm JgorCWlmIChJbkhvdFN0YW5kYnkgJiYKIAkJIUxvY2FsSG90U3RhbmRieUFjdGl2ZSAmJgog CQlyZWFjaGVkQ29uc2lzdGVuY3kgJiYKIAkJSXNVbmRlclBvc3RtYXN0ZXIpCkBAIC0zNzEw LDkgKzM3MDksNiBAQCBXYWl0Rm9yV0FMVG9CZWNvbWVBdmFpbGFibGUoWExvZ1JlY1B0ciBS ZWNQdHIsIGJvb2wgcmFuZEFjY2VzcywKIAkJCQkJCWVsb2coTE9HLCAid2FpdGluZyBmb3Ig V0FMIHRvIGJlY29tZSBhdmFpbGFibGUgYXQgJVgvJVgiLAogCQkJCQkJCSBMU05fRk9STUFU X0FSR1MoUmVjUHRyKSk7CiAKLQkJCQkJCS8qIERvIGJhY2tncm91bmQgdGFza3MgdGhhdCBt aWdodCBiZW5lZml0IHVzIGxhdGVyLiAqLwotCQkJCQkJS25vd25Bc3NpZ25lZFRyYW5zYWN0 aW9uSWRzSWRsZU1haW50ZW5hbmNlKCk7Ci0KIAkJCQkJCSh2b2lkKSBXYWl0TGF0Y2goJlhM b2dSZWNvdmVyeUN0bC0+cmVjb3ZlcnlXYWtldXBMYXRjaCwKIAkJCQkJCQkJCQkgV0xfTEFU Q0hfU0VUIHwgV0xfVElNRU9VVCB8CiAJCQkJCQkJCQkJIFdMX0VYSVRfT05fUE1fREVBVEgs CkBAIC0zOTc5LDkgKzM5NzUsNiBAQCBXYWl0Rm9yV0FMVG9CZWNvbWVBdmFpbGFibGUoWExv Z1JlY1B0ciBSZWNQdHIsIGJvb2wgcmFuZEFjY2VzcywKIAkJCQkJCXN0cmVhbWluZ19yZXBs eV9zZW50ID0gdHJ1ZTsKIAkJCQkJfQogCi0JCQkJCS8qIERvIGFueSBiYWNrZ3JvdW5kIHRh c2tzIHRoYXQgbWlnaHQgYmVuZWZpdCB1cyBsYXRlci4gKi8KLQkJCQkJS25vd25Bc3NpZ25l ZFRyYW5zYWN0aW9uSWRzSWRsZU1haW50ZW5hbmNlKCk7Ci0KIAkJCQkJLyogVXBkYXRlIHBn X3N0YXRfcmVjb3ZlcnlfcHJlZmV0Y2ggYmVmb3JlIHNsZWVwaW5nLiAqLwogCQkJCQlYTG9n UHJlZmV0Y2hlckNvbXB1dGVTdGF0cyh4bG9ncHJlZmV0Y2hlcik7CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d1dGlscy5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGxvZ3V0aWxzLmMKaW5kZXggNTI5NWI4NWZlMC4uYmYwOGM2MGU5 MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3V0aWxzLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3V0aWxzLmMKQEAgLTUwLDcg KzUwLDcgQEAgYm9vbAkJaWdub3JlX2ludmFsaWRfcGFnZXMgPSBmYWxzZTsKIGJvb2wJCUlu UmVjb3ZlcnkgPSBmYWxzZTsKIAogLyogQXJlIHdlIGluIEhvdCBTdGFuZGJ5IG1vZGU/IE9u bHkgdmFsaWQgaW4gc3RhcnR1cCBwcm9jZXNzLCBzZWUgeGxvZ3V0aWxzLmggKi8KLUhvdFN0 YW5kYnlTdGF0ZSBzdGFuZGJ5U3RhdGUgPSBTVEFOREJZX0RJU0FCTEVEOworYm9vbAkJSW5I b3RTdGFuZGJ5ID0gZmFsc2U7CiAKIC8qCiAgKiBEdXJpbmcgWExPRyByZXBsYXksIHdlIG1h eSBzZWUgWExPRyByZWNvcmRzIGZvciBpbmNyZW1lbnRhbCB1cGRhdGVzIG9mCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N0YXJ0dXAuYyBiL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvc3RhcnR1cC5jCmluZGV4IGVmNmY5OGViY2QuLmE5NzU4NjVmZGQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1cC5jCisrKyBiL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1cC5jCkBAIC0yMDMsNyArMjAzLDcgQEAgc3RhdGljIHZv aWQKIFN0YXJ0dXBQcm9jRXhpdChpbnQgY29kZSwgRGF0dW0gYXJnKQogewogCS8qIFNodXRk b3duIHRoZSByZWNvdmVyeSBlbnZpcm9ubWVudCAqLwotCWlmIChzdGFuZGJ5U3RhdGUgIT0g U1RBTkRCWV9ESVNBQkxFRCkKKwlpZiAoSW5Ib3RTdGFuZGJ5KQogCQlTaHV0ZG93blJlY292 ZXJ5VHJhbnNhY3Rpb25FbnZpcm9ubWVudCgpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9kZWNvZGUuYwppbmRleCBkNjg3Y2VlZTMzLi5jYWFlOGY3NWMyIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCisr KyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKQEAgLTI3MCwx NCArMjcwLDYgQEAgeGFjdF9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBY TG9nUmVjb3JkQnVmZmVyICpidWYpCiAJCQkJRGVjb2RlQWJvcnQoY3R4LCBidWYsICZwYXJz ZWQsIHhpZCwgdHdvX3BoYXNlKTsKIAkJCQlicmVhazsKIAkJCX0KLQkJY2FzZSBYTE9HX1hB Q1RfQVNTSUdOTUVOVDoKLQotCQkJLyoKLQkJCSAqIFdlIGFzc2lnbiBzdWJ4YWN0IHRvIHRo ZSB0b3BsZXZlbCB4YWN0IHdoaWxlIHByb2Nlc3NpbmcgZWFjaAotCQkJICogcmVjb3JkIGlm IHJlcXVpcmVkLiAgU28sIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZS4gU2Vl Ci0JCQkgKiBMb2dpY2FsRGVjb2RpbmdQcm9jZXNzUmVjb3JkLgotCQkJICovCi0JCQlicmVh azsKIAkJY2FzZSBYTE9HX1hBQ1RfSU5WQUxJREFUSU9OUzoKIAkJCXsKIAkJCQlUcmFuc2Fj dGlvbklkIHhpZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvc25hcGJ1aWxkLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3NuYXBi dWlsZC5jCmluZGV4IGFlNjc2MTQ1ZTYuLmVhMmY4ZTI1Y2QgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYwpAQCAtMjcsNyArMjcsNyBAQAog ICogcmVtb3ZlZC4gVGhpcyBpcyBhY2hpZXZlZCBieSB1c2luZyB0aGUgcmVwbGljYXRpb24g c2xvdCBtZWNoYW5pc20uCiAgKgogICogQXMgdGhlIHBlcmNlbnRhZ2Ugb2YgdHJhbnNhY3Rp b25zIG1vZGlmeWluZyB0aGUgY2F0YWxvZyBub3JtYWxseSBpcyBmYWlybHkKLSAqIHNtYWxs IGluIGNvbXBhcmlzb25zIHRvIG9uZXMgb25seSBtYW5pcHVsYXRpbmcgdXNlciBkYXRhLCB3 ZSBrZWVwIHRyYWNrIG9mCisgKiBzbWFsbCBpbiBjb21wYXJpc29uIHRvIG9uZXMgb25seSBt YW5pcHVsYXRpbmcgdXNlciBkYXRhLCB3ZSBrZWVwIHRyYWNrIG9mCiAgKiB0aGUgY29tbWl0 dGVkIGNhdGFsb2cgbW9kaWZ5aW5nIG9uZXMgaW5zaWRlIFt4bWluLCB4bWF4KSBpbnN0ZWFk IG9mIGtlZXBpbmcKICAqIHRyYWNrIG9mIGFsbCBydW5uaW5nIHRyYW5zYWN0aW9ucyBsaWtl IGl0J3MgZG9uZSBpbiBhIG5vcm1hbCBzbmFwc2hvdC4gTm90ZQogICogdGhhdCB3ZSdyZSBn ZW5lcmFsbHkgb25seSBsb29raW5nIGF0IHRyYW5zYWN0aW9ucyB0aGF0IGhhdmUgYWNxdWly ZWQgYW4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwppbmRleCAzNWZhMmUxZGRhLi5lY2I1ZDgx NTQzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCkBAIC0xNiw2ICsxNiw3IEBACiAKICNp bmNsdWRlICJhY2Nlc3MvY2xvZy5oIgogI2luY2x1ZGUgImFjY2Vzcy9jb21taXRfdHMuaCIK KyNpbmNsdWRlICJhY2Nlc3MvY3NuX2xvZy5oIgogI2luY2x1ZGUgImFjY2Vzcy9tdWx0aXhh Y3QuaCIKICNpbmNsdWRlICJhY2Nlc3MvbmJ0cmVlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3N1 YnRyYW5zLmgiCkBAIC0xMjQsNiArMTI1LDcgQEAgQ2FsY3VsYXRlU2htZW1TaXplKGludCAq bnVtX3NlbWFwaG9yZXMpCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFhMT0dTaG1lbVNpemUo KSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFhMb2dSZWNvdmVyeVNobWVtU2l6ZSgpKTsK IAlzaXplID0gYWRkX3NpemUoc2l6ZSwgQ0xPR1NobWVtU2l6ZSgpKTsKKwlzaXplID0gYWRk X3NpemUoc2l6ZSwgQ1NOTG9nU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBDb21taXRUc1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgU1VCVFJB TlNTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFR3b1BoYXNlU2htZW1T aXplKCkpOwpAQCAtMjgzLDYgKzI4NSw3IEBAIENyZWF0ZU9yQXR0YWNoU2htZW1TdHJ1Y3Rz KHZvaWQpCiAJWExvZ1ByZWZldGNoU2htZW1Jbml0KCk7CiAJWExvZ1JlY292ZXJ5U2htZW1J bml0KCk7CiAJQ0xPR1NobWVtSW5pdCgpOworCUNTTkxvZ1NobWVtSW5pdCgpOwogCUNvbW1p dFRzU2htZW1Jbml0KCk7CiAJU1VCVFJBTlNTaG1lbUluaXQoKTsKIAlNdWx0aVhhY3RTaG1l bUluaXQoKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJh eS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKaW5kZXggYWYzYjE1 ZTkzZC4uYTZlMTFkZWNlMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv cHJvY2FycmF5LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMK QEAgLTE5LDIwICsxOSwxMCBAQAogICogbXlQcm9jTG9ja3MgbGlzdHMuICBUaGV5IGNhbiBi ZSBkaXN0aW5ndWlzaGVkIGZyb20gcmVndWxhciBiYWNrZW5kIFBHUFJPQ3MKICAqIGF0IG5l ZWQgYnkgY2hlY2tpbmcgZm9yIHBpZCA9PSAwLgogICoKLSAqIER1cmluZyBob3Qgc3RhbmRi eSwgd2UgYWxzbyBrZWVwIGEgbGlzdCBvZiBYSURzIHJlcHJlc2VudGluZyB0cmFuc2FjdGlv bnMKLSAqIHRoYXQgYXJlIGtub3duIHRvIGJlIHJ1bm5pbmcgb24gdGhlIHByaW1hcnkgKG9y IG1vcmUgcHJlY2lzZWx5LCB3ZXJlIHJ1bm5pbmcKLSAqIGFzIG9mIHRoZSBjdXJyZW50IHBv aW50IGluIHRoZSBXQUwgc3RyZWFtKS4gIFRoaXMgbGlzdCBpcyBrZXB0IGluIHRoZQotICog S25vd25Bc3NpZ25lZFhpZHMgYXJyYXksIGFuZCBpcyB1cGRhdGVkIGJ5IHdhdGNoaW5nIHRo ZSBzZXF1ZW5jZSBvZgotICogYXJyaXZpbmcgWElEcy4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJl Y2F1c2UgaWYgd2UgbGVhdmUgdGhvc2UgWElEcyBvdXQgb2YKLSAqIHNuYXBzaG90cyB0YWtl biBmb3Igc3RhbmRieSBxdWVyaWVzLCB0aGVuIHRoZXkgd2lsbCBhcHBlYXIgdG8gYmUgYWxy ZWFkeQotICogY29tcGxldGUsIGxlYWRpbmcgdG8gTVZDQyBmYWlsdXJlcy4gIE5vdGUgdGhh dCBpbiBob3Qgc3RhbmRieSwgdGhlIFBHUFJPQwotICogYXJyYXkgcmVwcmVzZW50cyBzdGFu ZGJ5IHByb2Nlc3Nlcywgd2hpY2ggYnkgZGVmaW5pdGlvbiBhcmUgbm90IHJ1bm5pbmcKLSAq IHRyYW5zYWN0aW9ucyB0aGF0IGhhdmUgWElEcy4KLSAqCi0gKiBJdCBpcyBwZXJoYXBzIHBv c3NpYmxlIGZvciBhIGJhY2tlbmQgb24gdGhlIHByaW1hcnkgdG8gdGVybWluYXRlIHdpdGhv dXQKLSAqIHdyaXRpbmcgYW4gYWJvcnQgcmVjb3JkIGZvciBpdHMgdHJhbnNhY3Rpb24uICBX aGlsZSB0aGF0IHNob3VsZG4ndCByZWFsbHkKLSAqIGhhcHBlbiwgaXQgd291bGQgdGllIHVw IEtub3duQXNzaWduZWRYaWRzIGluZGVmaW5pdGVseSwgc28gd2UgcHJvdGVjdAotICogb3Vy c2VsdmVzIGJ5IHBydW5pbmcgdGhlIGFycmF5IHdoZW4gYSB2YWxpZCBsaXN0IG9mIHJ1bm5p bmcgWElEcyBhcnJpdmVzLgorICogRHVyaW5nIGhvdCBzdGFuZGJ5LCB3ZSBkb24ndCBoYXZl IFBHUFJPQyBlbnRyaWVzIHJlcHJlc2VudGluZyB0cmFuc2FjdGlvbnMKKyAqIHJ1bm5pbmcg aW4gdGhlIHByaW1hcnkuICBJbiBzbmFwc2hvdHMgdGFrZW4gZHVyaW5nIHJlY292ZXJ5LCB0 aGUgc25hcHNob3QKKyAqIGNvbnRhaW5zIGEgQ29tbWl0LVNlcXVlbmNlIE51bWJlciAoQ1NO KSB3aGljaCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGljaAorICogWElEcyBhcmUgc3RpbGwg Y29uc2lkZXJlZCBhcyBydW5uaW5nIGJ5IHRoZSBzbmFwc2hvdC4KICAqCiAgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0 aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCkBAIC00Nyw2ICszNyw3IEBACiAKICNpbmNs dWRlIDxzaWduYWwuaD4KIAorI2luY2x1ZGUgImFjY2Vzcy9jc25fbG9nLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL3N1YnRyYW5zLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKICNp bmNsdWRlICJhY2Nlc3MvdHdvcGhhc2UuaCIKQEAgLTczLDIyICs2NCw4IEBAIHR5cGVkZWYg c3RydWN0IFByb2NBcnJheVN0cnVjdAogCWludAkJCW51bVByb2NzOwkJLyogbnVtYmVyIG9m IHZhbGlkIHByb2NzIGVudHJpZXMgKi8KIAlpbnQJCQltYXhQcm9jczsJCS8qIGFsbG9jYXRl ZCBzaXplIG9mIHByb2NzIGFycmF5ICovCiAKLQkvKgotCSAqIEtub3duIGFzc2lnbmVkIFhJ RHMgaGFuZGxpbmcKLQkgKi8KLQlpbnQJCQltYXhLbm93bkFzc2lnbmVkWGlkczsJLyogYWxs b2NhdGVkIHNpemUgb2YgYXJyYXkgKi8KLQlpbnQJCQludW1Lbm93bkFzc2lnbmVkWGlkczsJ LyogY3VycmVudCAjIG9mIHZhbGlkIGVudHJpZXMgKi8KLQlpbnQJCQl0YWlsS25vd25Bc3Np Z25lZFhpZHM7CS8qIGluZGV4IG9mIG9sZGVzdCB2YWxpZCBlbGVtZW50ICovCi0JaW50CQkJ aGVhZEtub3duQXNzaWduZWRYaWRzOwkvKiBpbmRleCBvZiBuZXdlc3QgZWxlbWVudCwgKyAx ICovCi0KLQkvKgotCSAqIEhpZ2hlc3Qgc3VieGlkIHRoYXQgaGFzIGJlZW4gcmVtb3ZlZCBm cm9tIEtub3duQXNzaWduZWRYaWRzIGFycmF5IHRvCi0JICogcHJldmVudCBvdmVyZmxvdzsg b3IgSW52YWxpZFRyYW5zYWN0aW9uSWQgaWYgbm9uZS4gIFdlIHRyYWNrIHRoaXMgZm9yCi0J ICogc2ltaWxhciByZWFzb25zIHRvIHRyYWNraW5nIG92ZXJmbG93aW5nIGNhY2hlZCBzdWJ4 aWRzIGluIFBHUFJPQwotCSAqIGVudHJpZXMuICBNdXN0IGhvbGQgZXhjbHVzaXZlIFByb2NB cnJheUxvY2sgdG8gY2hhbmdlIHRoaXMsIGFuZCBzaGFyZWQKLQkgKiBsb2NrIHRvIHJlYWQg aXQuCi0JICovCi0JVHJhbnNhY3Rpb25JZCBsYXN0T3ZlcmZsb3dlZFhpZDsKKwkvKiBJbiBy ZWNvdmVyeSwgb2xkZXN0IFhJRCB0aGF0IGNvdWxkIGJlIHN0aWxsIHJ1bm5pbmcgaW4gcHJp bWFyeSAqLworCVRyYW5zYWN0aW9uSWQgb2xkZXN0X3J1bm5pbmdfcHJpbWFyeV94aWQ7CiAK IAkvKiBvbGRlc3QgeG1pbiBvZiBhbnkgcmVwbGljYXRpb24gc2xvdCAqLwogCVRyYW5zYWN0 aW9uSWQgcmVwbGljYXRpb25fc2xvdF94bWluOwpAQCAtOTksNiArNzYsMjEgQEAgdHlwZWRl ZiBzdHJ1Y3QgUHJvY0FycmF5U3RydWN0CiAJaW50CQkJcGdwcm9jbm9zW0ZMRVhJQkxFX0FS UkFZX01FTUJFUl07CiB9IFByb2NBcnJheVN0cnVjdDsKIAorI2RlZmluZSBQUk9DQVJSQVlf TUFYUFJPQ1MJKE1heEJhY2tlbmRzICsgbWF4X3ByZXBhcmVkX3hhY3RzKQorCisvKgorICog VE9UQUxfTUFYX0NBQ0hFRF9TVUJYSURTIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgWElEcyB0 aGF0IGZpdHMgaW4gdGhlIHByb2MKKyAqIGFycmF5LCBhcyB0b3AgWElEcyBhbmQgaW4gdGhl IHN1YnhpZHMgY2FjaGVzLgorICoKKyAqIExvY2FsIGRhdGEgc3RydWN0dXJlcyBhcmUgYWxz byBjcmVhdGVkIGluIHZhcmlvdXMgYmFja2VuZHMgZHVyaW5nCisgKiBHZXRTbmFwc2hvdERh dGEoKSwgVHJhbnNhY3Rpb25JZElzSW5Qcm9ncmVzcygpIGFuZAorICogR2V0UnVubmluZ1Ry YW5zYWN0aW9uRGF0YSgpLiBBbGwgb2YgdGhlIG1haW4gc3RydWN0dXJlcyBjcmVhdGVkIGlu IHRob3NlCisgKiBmdW5jdGlvbnMgbXVzdCBiZSBpZGVudGljYWxseSBzaXplZCwgc2luY2Ug d2UgbWF5IGF0IHRpbWVzIGNvcHkgdGhlIHdob2xlCisgKiBvZiB0aGUgZGF0YSBzdHJ1Y3R1 cmVzIGFyb3VuZC4KKyAqLworI2RlZmluZSBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFMgXAor CSgoUEdQUk9DX01BWF9DQUNIRURfU1VCWElEUyArIDEpICogUFJPQ0FSUkFZX01BWFBST0NT KQorCiAvKgogICogU3RhdGUgZm9yIHRoZSBHbG9iYWxWaXNUZXN0KiBmYW1pbHkgb2YgZnVu Y3Rpb25zLiBUaG9zZSBmdW5jdGlvbnMgY2FuCiAgKiBlLmcuIGJlIHVzZWQgdG8gZGVjaWRl IGlmIGEgZGVsZXRlZCByb3cgY2FuIGJlIHJlbW92ZWQgd2l0aG91dCB2aW9sYXRpbmcKQEAg LTI1NCwxNyArMjQ2LDYgQEAgdHlwZWRlZiBlbnVtIEdsb2JhbFZpc0hvcml6b25LaW5kCiAJ VklTSE9SSVpPTl9URU1QLAogfSBHbG9iYWxWaXNIb3Jpem9uS2luZDsKIAotLyoKLSAqIFJl YXNvbiBjb2RlcyBmb3IgS25vd25Bc3NpZ25lZFhpZHNDb21wcmVzcygpLgotICovCi10eXBl ZGVmIGVudW0gS0FYQ29tcHJlc3NSZWFzb24KLXsKLQlLQVhfTk9fU1BBQ0UsCQkJCS8qIG5l ZWQgdG8gZnJlZSB1cCBzcGFjZSBhdCBhcnJheSBlbmQgKi8KLQlLQVhfUFJVTkUsCQkJCQkv KiB3ZSBqdXN0IHBydW5lZCBvbGQgZW50cmllcyAqLwotCUtBWF9UUkFOU0FDVElPTl9FTkQs CQkvKiB3ZSBqdXN0IGNvbW1pdHRlZC9yZW1vdmVkIHNvbWUgWElEcyAqLwotCUtBWF9TVEFS VFVQX1BST0NFU1NfSURMRSwJLyogc3RhcnR1cCBwcm9jZXNzIGlzIGFib3V0IHRvIHNsZWVw ICovCi19IEtBWENvbXByZXNzUmVhc29uOwotCiAKIHN0YXRpYyBQcm9jQXJyYXlTdHJ1Y3Qg KnByb2NBcnJheTsKIApAQCAtMjc4LDE3ICsyNTksOCBAQCBzdGF0aWMgVHJhbnNhY3Rpb25J ZCBjYWNoZWRYaWRJc05vdEluUHJvZ3Jlc3MgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIC8q CiAgKiBCb29ra2VlcGluZyBmb3IgdHJhY2tpbmcgZW11bGF0ZWQgdHJhbnNhY3Rpb25zIGlu IHJlY292ZXJ5CiAgKi8KLXN0YXRpYyBUcmFuc2FjdGlvbklkICpLbm93bkFzc2lnbmVkWGlk czsKLXN0YXRpYyBib29sICpLbm93bkFzc2lnbmVkWGlkc1ZhbGlkOwogc3RhdGljIFRyYW5z YWN0aW9uSWQgbGF0ZXN0T2JzZXJ2ZWRYaWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAot LyoKLSAqIElmIHdlJ3JlIGluIFNUQU5EQllfU05BUFNIT1RfUEVORElORyBzdGF0ZSwgc3Rh bmRieVNuYXBzaG90UGVuZGluZ1htaW4gaXMKLSAqIHRoZSBoaWdoZXN0IHhpZCB0aGF0IG1p Z2h0IHN0aWxsIGJlIHJ1bm5pbmcgdGhhdCB3ZSBkb24ndCBoYXZlIGluCi0gKiBLbm93bkFz c2lnbmVkWGlkcy4KLSAqLwotc3RhdGljIFRyYW5zYWN0aW9uSWQgc3RhbmRieVNuYXBzaG90 UGVuZGluZ1htaW47Ci0KIC8qCiAgKiBTdGF0ZSBmb3IgdmlzaWJpbGl0eSBjaGVja3Mgb24g ZGlmZmVyZW50IHR5cGVzIG9mIHJlbGF0aW9ucy4gU2VlIHN0cnVjdAogICogR2xvYmFsVmlz U3RhdGUgZm9yIGRldGFpbHMuIEFzIHNoYXJlZCwgY2F0YWxvZywgbm9ybWFsIGFuZCB0ZW1w b3JhcnkKQEAgLTMxNSw3ICsyODcsNyBAQCBzdGF0aWMgbG9uZyB4Y19ieV9teV94YWN0ID0g MDsKIHN0YXRpYyBsb25nIHhjX2J5X2xhdGVzdF94aWQgPSAwOwogc3RhdGljIGxvbmcgeGNf YnlfbWFpbl94aWQgPSAwOwogc3RhdGljIGxvbmcgeGNfYnlfY2hpbGRfeGlkID0gMDsKLXN0 YXRpYyBsb25nIHhjX2J5X2tub3duX2Fzc2lnbmVkID0gMDsKK3N0YXRpYyBsb25nIHhjX2R1 cmluZ19yZWNvdmVyeSA9IDA7CiBzdGF0aWMgbG9uZyB4Y19ub19vdmVyZmxvdyA9IDA7CiBz dGF0aWMgbG9uZyB4Y19zbG93X2Fuc3dlciA9IDA7CiAKQEAgLTMyNSw3ICsyOTcsNyBAQCBz dGF0aWMgbG9uZyB4Y19zbG93X2Fuc3dlciA9IDA7CiAjZGVmaW5lIHhjX2J5X2xhdGVzdF94 aWRfaW5jKCkJCSh4Y19ieV9sYXRlc3RfeGlkKyspCiAjZGVmaW5lIHhjX2J5X21haW5feGlk X2luYygpCQkoeGNfYnlfbWFpbl94aWQrKykKICNkZWZpbmUgeGNfYnlfY2hpbGRfeGlkX2lu YygpCQkoeGNfYnlfY2hpbGRfeGlkKyspCi0jZGVmaW5lIHhjX2J5X2tub3duX2Fzc2lnbmVk X2luYygpCSh4Y19ieV9rbm93bl9hc3NpZ25lZCsrKQorI2RlZmluZSB4Y19kdXJpbmdfcmVj b3ZlcnlfaW5jKCkJKHhjX2R1cmluZ19yZWNvdmVyeSsrKQogI2RlZmluZSB4Y19ub19vdmVy Zmxvd19pbmMoKQkJKHhjX25vX292ZXJmbG93KyspCiAjZGVmaW5lIHhjX3Nsb3dfYW5zd2Vy X2luYygpCQkoeGNfc2xvd19hbnN3ZXIrKykKIApAQCAtMzM4LDI4ICszMTAsMTIgQEAgc3Rh dGljIHZvaWQgRGlzcGxheVhpZENhY2hlKHZvaWQpOwogI2RlZmluZSB4Y19ieV9sYXRlc3Rf eGlkX2luYygpCQkoKHZvaWQpIDApCiAjZGVmaW5lIHhjX2J5X21haW5feGlkX2luYygpCQko KHZvaWQpIDApCiAjZGVmaW5lIHhjX2J5X2NoaWxkX3hpZF9pbmMoKQkJKCh2b2lkKSAwKQot I2RlZmluZSB4Y19ieV9rbm93bl9hc3NpZ25lZF9pbmMoKQkoKHZvaWQpIDApCisjZGVmaW5l IHhjX2R1cmluZ19yZWNvdmVyeV9pbmMoKQkoKHZvaWQpIDApCiAjZGVmaW5lIHhjX25vX292 ZXJmbG93X2luYygpCQkoKHZvaWQpIDApCiAjZGVmaW5lIHhjX3Nsb3dfYW5zd2VyX2luYygp CQkoKHZvaWQpIDApCiAjZW5kaWYJCQkJCQkJLyogWElEQ0FDSEVfREVCVUcgKi8KIAotLyog UHJpbWl0aXZlcyBmb3IgS25vd25Bc3NpZ25lZFhpZHMgYXJyYXkgaGFuZGxpbmcgZm9yIHN0 YW5kYnkgKi8KLXN0YXRpYyB2b2lkIEtub3duQXNzaWduZWRYaWRzQ29tcHJlc3MoS0FYQ29t cHJlc3NSZWFzb24gcmVhc29uLCBib29sIGhhdmVMb2NrKTsKLXN0YXRpYyB2b2lkIEtub3du QXNzaWduZWRYaWRzQWRkKFRyYW5zYWN0aW9uSWQgZnJvbV94aWQsIFRyYW5zYWN0aW9uSWQg dG9feGlkLAotCQkJCQkJCQkgYm9vbCBleGNsdXNpdmVfbG9jayk7Ci1zdGF0aWMgYm9vbCBL bm93bkFzc2lnbmVkWGlkc1NlYXJjaChUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCByZW1vdmUp Owotc3RhdGljIGJvb2wgS25vd25Bc3NpZ25lZFhpZEV4aXN0cyhUcmFuc2FjdGlvbklkIHhp ZCk7Ci1zdGF0aWMgdm9pZCBLbm93bkFzc2lnbmVkWGlkc1JlbW92ZShUcmFuc2FjdGlvbklk IHhpZCk7Ci1zdGF0aWMgdm9pZCBLbm93bkFzc2lnbmVkWGlkc1JlbW92ZVRyZWUoVHJhbnNh Y3Rpb25JZCB4aWQsIGludCBuc3VieGlkcywKLQkJCQkJCQkJCQlUcmFuc2FjdGlvbklkICpz dWJ4aWRzKTsKLXN0YXRpYyB2b2lkIEtub3duQXNzaWduZWRYaWRzUmVtb3ZlUHJlY2VkaW5n KFRyYW5zYWN0aW9uSWQgcmVtb3ZlWGlkKTsKLXN0YXRpYyBpbnQJS25vd25Bc3NpZ25lZFhp ZHNHZXQoVHJhbnNhY3Rpb25JZCAqeGFycmF5LCBUcmFuc2FjdGlvbklkIHhtYXgpOwotc3Rh dGljIGludAlLbm93bkFzc2lnbmVkWGlkc0dldEFuZFNldFhtaW4oVHJhbnNhY3Rpb25JZCAq eGFycmF5LAotCQkJCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgKnhtaW4sCi0JCQkJCQkJCQkJ ICAgVHJhbnNhY3Rpb25JZCB4bWF4KTsKLXN0YXRpYyBUcmFuc2FjdGlvbklkIEtub3duQXNz aWduZWRYaWRzR2V0T2xkZXN0WG1pbih2b2lkKTsKLXN0YXRpYyB2b2lkIEtub3duQXNzaWdu ZWRYaWRzRGlzcGxheShpbnQgdHJhY2VfbGV2ZWwpOwotc3RhdGljIHZvaWQgS25vd25Bc3Np Z25lZFhpZHNSZXNldCh2b2lkKTsKKwogc3RhdGljIGlubGluZSB2b2lkIFByb2NBcnJheUVu ZFRyYW5zYWN0aW9uSW50ZXJuYWwoUEdQUk9DICpwcm9jLCBUcmFuc2FjdGlvbklkIGxhdGVz dFhpZCk7CiBzdGF0aWMgdm9pZCBQcm9jQXJyYXlHcm91cENsZWFyWGlkKFBHUFJPQyAqcHJv YywgVHJhbnNhY3Rpb25JZCBsYXRlc3RYaWQpOwogc3RhdGljIHZvaWQgTWFpbnRhaW5MYXRl c3RDb21wbGV0ZWRYaWQoVHJhbnNhY3Rpb25JZCBsYXRlc3RYaWQpOwpAQCAtMzgzLDMxICsz MzksNiBAQCBQcm9jQXJyYXlTaG1lbVNpemUodm9pZCkKIAlzaXplID0gb2Zmc2V0b2YoUHJv Y0FycmF5U3RydWN0LCBwZ3Byb2Nub3MpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxf c2l6ZShzaXplb2YoaW50KSwgUFJPQ0FSUkFZX01BWFBST0NTKSk7CiAKLQkvKgotCSAqIER1 cmluZyBIb3QgU3RhbmRieSBwcm9jZXNzaW5nIHdlIGhhdmUgYSBkYXRhIHN0cnVjdHVyZSBj YWxsZWQKLQkgKiBLbm93bkFzc2lnbmVkWGlkcywgY3JlYXRlZCBpbiBzaGFyZWQgbWVtb3J5 LiBMb2NhbCBkYXRhIHN0cnVjdHVyZXMgYXJlCi0JICogYWxzbyBjcmVhdGVkIGluIHZhcmlv dXMgYmFja2VuZHMgZHVyaW5nIEdldFNuYXBzaG90RGF0YSgpLAotCSAqIFRyYW5zYWN0aW9u SWRJc0luUHJvZ3Jlc3MoKSBhbmQgR2V0UnVubmluZ1RyYW5zYWN0aW9uRGF0YSgpLiBBbGwg b2YgdGhlCi0JICogbWFpbiBzdHJ1Y3R1cmVzIGNyZWF0ZWQgaW4gdGhvc2UgZnVuY3Rpb25z IG11c3QgYmUgaWRlbnRpY2FsbHkgc2l6ZWQsCi0JICogc2luY2Ugd2UgbWF5IGF0IHRpbWVz IGNvcHkgdGhlIHdob2xlIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJvdW5kLiBXZQotCSAq IHJlZmVyIHRvIHRoaXMgc2l6ZSBhcyBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFMuCi0JICoK LQkgKiBJZGVhbGx5IHdlJ2Qgb25seSBjcmVhdGUgdGhpcyBzdHJ1Y3R1cmUgaWYgd2Ugd2Vy ZSBhY3R1YWxseSBkb2luZyBob3QKLQkgKiBzdGFuZGJ5IGluIHRoZSBjdXJyZW50IHJ1biwg YnV0IHdlIGRvbid0IGtub3cgdGhhdCB5ZXQgYXQgdGhlIHRpbWUKLQkgKiBzaGFyZWQgbWVt b3J5IGlzIGJlaW5nIHNldCB1cC4KLQkgKi8KLSNkZWZpbmUgVE9UQUxfTUFYX0NBQ0hFRF9T VUJYSURTIFwKLQkoKFBHUFJPQ19NQVhfQ0FDSEVEX1NVQlhJRFMgKyAxKSAqIFBST0NBUlJB WV9NQVhQUk9DUykKLQotCWlmIChFbmFibGVIb3RTdGFuZGJ5KQotCXsKLQkJc2l6ZSA9IGFk ZF9zaXplKHNpemUsCi0JCQkJCQltdWxfc2l6ZShzaXplb2YoVHJhbnNhY3Rpb25JZCksCi0J CQkJCQkJCSBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFMpKTsKLQkJc2l6ZSA9IGFkZF9zaXpl KHNpemUsCi0JCQkJCQltdWxfc2l6ZShzaXplb2YoYm9vbCksIFRPVEFMX01BWF9DQUNIRURf U1VCWElEUykpOwotCX0KLQogCXJldHVybiBzaXplOwogfQogCkBAIC00MzQsMzEgKzM2NSwx MiBAQCBDcmVhdGVTaGFyZWRQcm9jQXJyYXkodm9pZCkKIAkJICovCiAJCXByb2NBcnJheS0+ bnVtUHJvY3MgPSAwOwogCQlwcm9jQXJyYXktPm1heFByb2NzID0gUFJPQ0FSUkFZX01BWFBS T0NTOwotCQlwcm9jQXJyYXktPm1heEtub3duQXNzaWduZWRYaWRzID0gVE9UQUxfTUFYX0NB Q0hFRF9TVUJYSURTOwotCQlwcm9jQXJyYXktPm51bUtub3duQXNzaWduZWRYaWRzID0gMDsK LQkJcHJvY0FycmF5LT50YWlsS25vd25Bc3NpZ25lZFhpZHMgPSAwOwotCQlwcm9jQXJyYXkt PmhlYWRLbm93bkFzc2lnbmVkWGlkcyA9IDA7Ci0JCXByb2NBcnJheS0+bGFzdE92ZXJmbG93 ZWRYaWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAkJcHJvY0FycmF5LT5yZXBsaWNhdGlv bl9zbG90X3htaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAkJcHJvY0FycmF5LT5yZXBs aWNhdGlvbl9zbG90X2NhdGFsb2dfeG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogCQlU cmFuc2FtVmFyaWFibGVzLT54YWN0Q29tcGxldGlvbkNvdW50ID0gMTsKIAl9CiAKIAlhbGxQ cm9jcyA9IFByb2NHbG9iYWwtPmFsbFByb2NzOwotCi0JLyogQ3JlYXRlIG9yIGF0dGFjaCB0 byB0aGUgS25vd25Bc3NpZ25lZFhpZHMgYXJyYXlzIHRvbywgaWYgbmVlZGVkICovCi0JaWYg KEVuYWJsZUhvdFN0YW5kYnkpCi0JewotCQlLbm93bkFzc2lnbmVkWGlkcyA9IChUcmFuc2Fj dGlvbklkICopCi0JCQlTaG1lbUluaXRTdHJ1Y3QoIktub3duQXNzaWduZWRYaWRzIiwKLQkJ CQkJCQltdWxfc2l6ZShzaXplb2YoVHJhbnNhY3Rpb25JZCksCi0JCQkJCQkJCQkgVE9UQUxf TUFYX0NBQ0hFRF9TVUJYSURTKSwKLQkJCQkJCQkmZm91bmQpOwotCQlLbm93bkFzc2lnbmVk WGlkc1ZhbGlkID0gKGJvb2wgKikKLQkJCVNobWVtSW5pdFN0cnVjdCgiS25vd25Bc3NpZ25l ZFhpZHNWYWxpZCIsCi0JCQkJCQkJbXVsX3NpemUoc2l6ZW9mKGJvb2wpLCBUT1RBTF9NQVhf Q0FDSEVEX1NVQlhJRFMpLAotCQkJCQkJCSZmb3VuZCk7Ci0JfQogfQogCiAvKgpAQCAtMTAy MiwzNTUgKzkzNCwzNSBAQCBNYWludGFpbkxhdGVzdENvbXBsZXRlZFhpZFJlY292ZXJ5KFRy YW5zYWN0aW9uSWQgbGF0ZXN0WGlkKQogdm9pZAogUHJvY0FycmF5SW5pdFJlY292ZXJ5KFRy YW5zYWN0aW9uSWQgaW5pdGlhbGl6ZWRVcHRvWElEKQogewotCUFzc2VydChzdGFuZGJ5U3Rh dGUgPT0gU1RBTkRCWV9JTklUSUFMSVpFRCk7CisJQXNzZXJ0KEluSG90U3RhbmRieSk7CiAJ QXNzZXJ0KFRyYW5zYWN0aW9uSWRJc05vcm1hbChpbml0aWFsaXplZFVwdG9YSUQpKTsKIAog CS8qCi0JICogd2Ugc2V0IGxhdGVzdE9ic2VydmVkWGlkIHRvIHRoZSB4aWQgU1VCVFJBTlMg aGFzIGJlZW4gaW5pdGlhbGl6ZWQgdXAKLQkgKiB0bywgc28gd2UgY2FuIGV4dGVuZCBpdCBm cm9tIHRoYXQgcG9pbnQgb253YXJkcyBpbgotCSAqIFJlY29yZEtub3duQXNzaWduZWRUcmFu c2FjdGlvbklkcywgYW5kIHdoZW4gd2UgZ2V0IGNvbnNpc3RlbnQgaW4KLQkgKiBQcm9jQXJy YXlBcHBseVJlY292ZXJ5SW5mbygpLgorCSAqIHdlIHNldCBsYXRlc3RPYnNlcnZlZFhpZCB0 byB0aGUgeGlkIFNVQlRSQU5TIGFuZCBDU04gbG9nIGhhdmUgYmVlbgorCSAqIGluaXRpYWxp emVkIHVwIHRvLCBzbyB3ZSBjYW4gZXh0ZW5kIGl0IGZyb20gdGhhdCBwb2ludCBvbndhcmRz IHdoZW5ldmVyCisJICogd2Ugb2JzZXJ2ZSBuZXcgWElEcy4KIAkgKi8KIAlsYXRlc3RPYnNl cnZlZFhpZCA9IGluaXRpYWxpemVkVXB0b1hJRDsKIAlUcmFuc2FjdGlvbklkUmV0cmVhdChs YXRlc3RPYnNlcnZlZFhpZCk7CiB9CiAKIC8qCi0gKiBQcm9jQXJyYXlBcHBseVJlY292ZXJ5 SW5mbyAtLSBhcHBseSByZWNvdmVyeSBpbmZvIGFib3V0IHhpZHMKLSAqCi0gKiBUYWtlcyB1 cyB0aHJvdWdoIDMgc3RhdGVzOiBJbml0aWFsaXplZCwgUGVuZGluZyBhbmQgUmVhZHkuCi0g KiBOb3JtYWwgY2FzZSBpcyB0byBnbyBhbGwgdGhlIHdheSB0byBSZWFkeSBzdHJhaWdodCBh d2F5LCB0aG91Z2ggdGhlcmUKLSAqIGFyZSBhdHlwaWNhbCBjYXNlcyB3aGVyZSB3ZSBuZWVk IHRvIHRha2UgaXQgaW4gc3RlcHMuCi0gKgotICogVXNlIHRoZSBkYXRhIGFib3V0IHJ1bm5p bmcgdHJhbnNhY3Rpb25zIG9uIHRoZSBwcmltYXJ5IHRvIGNyZWF0ZSB0aGUgaW5pdGlhbAot ICogc3RhdGUgb2YgS25vd25Bc3NpZ25lZFhpZHMuIFdlIGFsc28gdXNlIHRoZXNlIHJlY29y ZHMgdG8gcmVndWxhcmx5IHBydW5lCi0gKiBLbm93bkFzc2lnbmVkWGlkcyBiZWNhdXNlIHdl IGtub3cgaXQgaXMgcG9zc2libGUgdGhhdCBzb21lIHRyYW5zYWN0aW9ucwotICogd2l0aCBG QVRBTCBlcnJvcnMgZmFpbCB0byB3cml0ZSBhYm9ydCByZWNvcmRzLCB3aGljaCBjb3VsZCBj YXVzZSBldmVudHVhbAotICogb3ZlcmZsb3cuCi0gKgotICogU2VlIGNvbW1lbnRzIGZvciBM b2dTdGFuZGJ5U25hcHNob3QoKS4KKyAqIFVwZGF0ZSBvbGRlc3QgcnVubmluZyBYSUQuIGZy b20gYSBjaGVja3BvaW50IHJlY29yZC4gVGhpcyBhbGxvd3MgdHJ1bmNhdGluZworICogU1VC VFJBTlMgYW5kIHRoZSBDU04gbG9nLgogICovCiB2b2lkCi1Qcm9jQXJyYXlBcHBseVJlY292 ZXJ5SW5mbyhSdW5uaW5nVHJhbnNhY3Rpb25zIHJ1bm5pbmcpCitQcm9jQXJyYXlVcGRhdGVP bGRlc3RSdW5uaW5nWGlkKFRyYW5zYWN0aW9uSWQgb2xkZXN0UnVubmluZ1hJRCkKIHsKLQlU cmFuc2FjdGlvbklkICp4aWRzOwotCVRyYW5zYWN0aW9uSWQgYWR2YW5jZU5leHRYaWQ7Ci0J aW50CQkJbnhpZHM7Ci0JaW50CQkJaTsKLQotCUFzc2VydChzdGFuZGJ5U3RhdGUgPj0gU1RB TkRCWV9JTklUSUFMSVpFRCk7Ci0JQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHJ1bm5p bmctPm5leHRYaWQpKTsKLQlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQocnVubmluZy0+ b2xkZXN0UnVubmluZ1hpZCkpOwotCUFzc2VydChUcmFuc2FjdGlvbklkSXNOb3JtYWwocnVu bmluZy0+bGF0ZXN0Q29tcGxldGVkWGlkKSk7Ci0KLQkvKgotCSAqIFJlbW92ZSBzdGFsZSB0 cmFuc2FjdGlvbnMsIGlmIGFueS4KLQkgKi8KLQlFeHBpcmVPbGRLbm93bkFzc2lnbmVkVHJh bnNhY3Rpb25JZHMocnVubmluZy0+b2xkZXN0UnVubmluZ1hpZCk7Ci0KLQkvKgotCSAqIEFk anVzdCBUcmFuc2FtVmFyaWFibGVzLT5uZXh0WGlkIGJlZm9yZSBTdGFuZGJ5UmVsZWFzZU9s ZExvY2tzKCksCi0JICogYmVjYXVzZSB3ZSB3aWxsIG5lZWQgaXQgdXAgdG8gZGF0ZSBmb3Ig YWNjZXNzaW5nIHR3by1waGFzZSB0cmFuc2FjdGlvbnMKLQkgKiBpbiBTdGFuZGJ5UmVsZWFz ZU9sZExvY2tzKCkuCi0JICovCi0JYWR2YW5jZU5leHRYaWQgPSBydW5uaW5nLT5uZXh0WGlk OwotCVRyYW5zYWN0aW9uSWRSZXRyZWF0KGFkdmFuY2VOZXh0WGlkKTsKLQlBZHZhbmNlTmV4 dEZ1bGxUcmFuc2FjdGlvbklkUGFzdFhpZChhZHZhbmNlTmV4dFhpZCk7Ci0JQXNzZXJ0KEZ1 bGxUcmFuc2FjdGlvbklkSXNWYWxpZChUcmFuc2FtVmFyaWFibGVzLT5uZXh0WGlkKSk7Ci0K IAkvKgogCSAqIFJlbW92ZSBzdGFsZSBsb2NrcywgaWYgYW55LgogCSAqLwotCVN0YW5kYnlS ZWxlYXNlT2xkTG9ja3MocnVubmluZy0+b2xkZXN0UnVubmluZ1hpZCk7Ci0KLQkvKgotCSAq IElmIG91ciBzbmFwc2hvdCBpcyBhbHJlYWR5IHZhbGlkLCBub3RoaW5nIGVsc2UgdG8gZG8u Li4KLQkgKi8KLQlpZiAoc3RhbmRieVN0YXRlID09IFNUQU5EQllfU05BUFNIT1RfUkVBRFkp Ci0JCXJldHVybjsKLQotCS8qCi0JICogSWYgb3VyIGluaXRpYWwgUnVubmluZ1RyYW5zYWN0 aW9uc0RhdGEgaGFkIGFuIG92ZXJmbG93ZWQgc25hcHNob3QgdGhlbgotCSAqIHdlIGtuZXcg d2Ugd2VyZSBtaXNzaW5nIHNvbWUgc3VieGlkcyBmcm9tIG91ciBzbmFwc2hvdC4gSWYgd2Ug Y29udGludWUKLQkgKiB0byBzZWUgb3ZlcmZsb3dlZCBzbmFwc2hvdHMgdGhlbiB3ZSBtaWdo dCBuZXZlciBiZSBhYmxlIHRvIHN0YXJ0IHVwLCBzbwotCSAqIHdlIG1ha2UgYW5vdGhlciB0 ZXN0IHRvIHNlZSBpZiBvdXIgc25hcHNob3QgaXMgbm93IHZhbGlkLiBXZSBrbm93IHRoYXQK LQkgKiB0aGUgbWlzc2luZyBzdWJ4aWRzIGFyZSBlcXVhbCB0byBvciBlYXJsaWVyIHRoYW4g bmV4dFhpZC4gQWZ0ZXIgd2UKLQkgKiBpbml0aWFsaXNlIHdlIGNvbnRpbnVlIHRvIGFwcGx5 IGNoYW5nZXMgZHVyaW5nIHJlY292ZXJ5LCBzbyBvbmNlIHRoZQotCSAqIG9sZGVzdFJ1bm5p bmdYaWQgaXMgbGF0ZXIgdGhhbiB0aGUgbmV4dFhpZCBmcm9tIHRoZSBpbml0aWFsIHNuYXBz aG90IHdlCi0JICoga25vdyB0aGF0IHdlIG5vIGxvbmdlciBoYXZlIG1pc3NpbmcgaW5mb3Jt YXRpb24gYW5kIGNhbiBtYXJrIHRoZQotCSAqIHNuYXBzaG90IGFzIHZhbGlkLgotCSAqLwot CWlmIChzdGFuZGJ5U3RhdGUgPT0gU1RBTkRCWV9TTkFQU0hPVF9QRU5ESU5HKQotCXsKLQkJ LyoKLQkJICogSWYgdGhlIHNuYXBzaG90IGlzbid0IG92ZXJmbG93ZWQgb3IgaWYgaXRzIGVt cHR5IHdlIGNhbiByZXNldCBvdXIKLQkJICogcGVuZGluZyBzdGF0ZSBhbmQgdXNlIHRoaXMg c25hcHNob3QgaW5zdGVhZC4KLQkJICovCi0JCWlmIChydW5uaW5nLT5zdWJ4aWRfc3RhdHVz ICE9IFNVQlhJRFNfTUlTU0lORyB8fCBydW5uaW5nLT54Y250ID09IDApCi0JCXsKLQkJCS8q Ci0JCQkgKiBJZiB3ZSBoYXZlIGFscmVhZHkgY29sbGVjdGVkIGtub3duIGFzc2lnbmVkIHhp ZHMsIHdlIG5lZWQgdG8KLQkJCSAqIHRocm93IHRoZW0gYXdheSBiZWZvcmUgd2UgYXBwbHkg dGhlIHJlY292ZXJ5IHNuYXBzaG90LgotCQkJICovCi0JCQlLbm93bkFzc2lnbmVkWGlkc1Jl c2V0KCk7Ci0JCQlzdGFuZGJ5U3RhdGUgPSBTVEFOREJZX0lOSVRJQUxJWkVEOwotCQl9Ci0J CWVsc2UKLQkJewotCQkJaWYgKFRyYW5zYWN0aW9uSWRQcmVjZWRlcyhzdGFuZGJ5U25hcHNo b3RQZW5kaW5nWG1pbiwKLQkJCQkJCQkJCSAgcnVubmluZy0+b2xkZXN0UnVubmluZ1hpZCkp Ci0JCQl7Ci0JCQkJc3RhbmRieVN0YXRlID0gU1RBTkRCWV9TTkFQU0hPVF9SRUFEWTsKLQkJ CQllbG9nKERFQlVHMSwKLQkJCQkJICJyZWNvdmVyeSBzbmFwc2hvdHMgYXJlIG5vdyBlbmFi bGVkIik7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJZWxvZyhERUJVRzEsCi0JCQkJCSAicmVjb3Zl cnkgc25hcHNob3Qgd2FpdGluZyBmb3Igbm9uLW92ZXJmbG93ZWQgc25hcHNob3Qgb3IgIgot CQkJCQkgInVudGlsIG9sZGVzdCBhY3RpdmUgeGlkIG9uIHN0YW5kYnkgaXMgYXQgbGVhc3Qg JXUgKG5vdyAldSkiLAotCQkJCQkgc3RhbmRieVNuYXBzaG90UGVuZGluZ1htaW4sCi0JCQkJ CSBydW5uaW5nLT5vbGRlc3RSdW5uaW5nWGlkKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQot CUFzc2VydChzdGFuZGJ5U3RhdGUgPT0gU1RBTkRCWV9JTklUSUFMSVpFRCk7Ci0KLQkvKgot CSAqIE5COiB0aGlzIGNhbiBiZSByZWFjaGVkIGF0IGxlYXN0IHR3aWNlLCBzbyBtYWtlIHN1 cmUgbmV3IGNvZGUgY2FuIGRlYWwKLQkgKiB3aXRoIHRoYXQuCi0JICovCisJU3RhbmRieVJl bGVhc2VPbGRMb2NrcyhvbGRlc3RSdW5uaW5nWElEKTsKIAotCS8qCi0JICogTm9ib2R5IGVs c2UgaXMgcnVubmluZyB5ZXQsIGJ1dCB0YWtlIGxvY2tzIGFueWhvdwotCSAqLwogCUxXTG9j a0FjcXVpcmUoUHJvY0FycmF5TG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCS8qCi0JICogS25v d25Bc3NpZ25lZFhpZHMgaXMgc29ydGVkIHNvIHdlIGNhbm5vdCBqdXN0IGFkZCB0aGUgeGlk cywgd2UgaGF2ZSB0bwotCSAqIHNvcnQgdGhlbSBmaXJzdC4KLQkgKgotCSAqIFNvbWUgb2Yg dGhlIG5ldyB4aWRzIGFyZSB0b3AtbGV2ZWwgeGlkcyBhbmQgc29tZSBhcmUgc3VidHJhbnNh Y3Rpb25zLgotCSAqIFdlIGRvbid0IGNhbGwgU3ViVHJhbnNTZXRQYXJlbnQgYmVjYXVzZSBp dCBkb2Vzbid0IG1hdHRlciB5ZXQuIElmIHdlCi0JICogYXJlbid0IG92ZXJmbG93ZWQgdGhl biBhbGwgeGlkcyB3aWxsIGZpdCBpbiBzbmFwc2hvdCBhbmQgc28gd2UgZG9uJ3QKLQkgKiBu ZWVkIHN1YnRyYW5zLiBJZiB3ZSBsYXRlciBvdmVyZmxvdywgYW4geGlkIGFzc2lnbm1lbnQg cmVjb3JkIHdpbGwgYWRkCi0JICogeGlkcyB0byBzdWJ0cmFucy4gSWYgUnVubmluZ1RyYW5z YWN0aW9uc0RhdGEgaXMgb3ZlcmZsb3dlZCB0aGVuIHdlCi0JICogZG9uJ3QgaGF2ZSBlbm91 Z2ggaW5mb3JtYXRpb24gdG8gY29ycmVjdGx5IHVwZGF0ZSBzdWJ0cmFucyBhbnl3YXkuCi0J ICovCi0KLQkvKgotCSAqIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGFycmF5IHRvIGF2b2lkIG1v ZGlmeWluZyB0aGUgYXJyYXkgcGFzc2VkIGFzCi0JICogYXJndW1lbnQuCi0JICovCi0JeGlk cyA9IHBhbGxvYyhzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiAocnVubmluZy0+eGNudCArIHJ1 bm5pbmctPnN1YnhjbnQpKTsKLQotCS8qCi0JICogQWRkIHRvIHRoZSB0ZW1wIGFycmF5IGFu eSB4aWRzIHdoaWNoIGhhdmUgbm90IGFscmVhZHkgY29tcGxldGVkLgotCSAqLwotCW54aWRz ID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgcnVubmluZy0+eGNudCArIHJ1bm5pbmctPnN1Ynhj bnQ7IGkrKykKLQl7Ci0JCVRyYW5zYWN0aW9uSWQgeGlkID0gcnVubmluZy0+eGlkc1tpXTsK LQotCQkvKgotCQkgKiBUaGUgcnVubmluZy14YWN0cyBzbmFwc2hvdCBjYW4gY29udGFpbiB4 aWRzIHRoYXQgd2VyZSBzdGlsbCB2aXNpYmxlCi0JCSAqIGluIHRoZSBwcm9jYXJyYXkgd2hl biB0aGUgc25hcHNob3Qgd2FzIHRha2VuLCBidXQgd2VyZSBhbHJlYWR5Ci0JCSAqIFdBTC1s b2dnZWQgYXMgY29tcGxldGVkLiBUaGV5J3JlIG5vdCBydW5uaW5nIGFueW1vcmUsIHNvIGln bm9yZQotCQkgKiB0aGVtLgotCQkgKi8KLQkJaWYgKFRyYW5zYWN0aW9uSWREaWRDb21taXQo eGlkKSB8fCBUcmFuc2FjdGlvbklkRGlkQWJvcnQoeGlkKSkKLQkJCWNvbnRpbnVlOwotCi0J CXhpZHNbbnhpZHMrK10gPSB4aWQ7Ci0JfQotCi0JaWYgKG54aWRzID4gMCkKLQl7Ci0JCWlm IChwcm9jQXJyYXktPm51bUtub3duQXNzaWduZWRYaWRzICE9IDApCi0JCXsKLQkJCUxXTG9j a1JlbGVhc2UoUHJvY0FycmF5TG9jayk7Ci0JCQllbG9nKEVSUk9SLCAiS25vd25Bc3NpZ25l ZFhpZHMgaXMgbm90IGVtcHR5Iik7Ci0JCX0KLQotCQkvKgotCQkgKiBTb3J0IHRoZSBhcnJh eSBzbyB0aGF0IHdlIGNhbiBhZGQgdGhlbSBzYWZlbHkgaW50bwotCQkgKiBLbm93bkFzc2ln bmVkWGlkcy4KLQkJICoKLQkJICogV2UgaGF2ZSB0byBzb3J0IHRoZW0gbG9naWNhbGx5LCBi ZWNhdXNlIGluIEtub3duQXNzaWduZWRYaWRzQWRkIHdlCi0JCSAqIGNhbGwgVHJhbnNhY3Rp b25JZEZvbGxvd3NPckVxdWFscyBhbmQgc28gb24uIEJ1dCB3ZSBrbm93IHRoZXNlIFhJRHMK LQkJICogY29tZSBmcm9tIFJVTk5JTkdfWEFDVFMsIHdoaWNoIG1lYW5zIHRoZXJlIGFyZSBv bmx5IG5vcm1hbCBYSURzCi0JCSAqIGZyb20gdGhlIHNhbWUgZXBvY2gsIHNvIHRoaXMgaXMg c2FmZS4KLQkJICovCi0JCXFzb3J0KHhpZHMsIG54aWRzLCBzaXplb2YoVHJhbnNhY3Rpb25J ZCksIHhpZExvZ2ljYWxDb21wYXJhdG9yKTsKLQotCQkvKgotCQkgKiBBZGQgdGhlIHNvcnRl ZCBzbmFwc2hvdCBpbnRvIEtub3duQXNzaWduZWRYaWRzLiAgVGhlIHJ1bm5pbmcteGFjdHMK LQkJICogc25hcHNob3QgbWF5IGluY2x1ZGUgZHVwbGljYXRlZCB4aWRzIGJlY2F1c2Ugb2Yg cHJlcGFyZWQKLQkJICogdHJhbnNhY3Rpb25zLCBzbyBpZ25vcmUgdGhlbS4KLQkJICovCi0J CWZvciAoaSA9IDA7IGkgPCBueGlkczsgaSsrKQotCQl7Ci0JCQlpZiAoaSA+IDAgJiYgVHJh bnNhY3Rpb25JZEVxdWFscyh4aWRzW2kgLSAxXSwgeGlkc1tpXSkpCi0JCQl7Ci0JCQkJZWxv ZyhERUJVRzEsCi0JCQkJCSAiZm91bmQgZHVwbGljYXRlZCB0cmFuc2FjdGlvbiAldSBmb3Ig S25vd25Bc3NpZ25lZFhpZHMgaW5zZXJ0aW9uIiwKLQkJCQkJIHhpZHNbaV0pOwotCQkJCWNv bnRpbnVlOwotCQkJfQotCQkJS25vd25Bc3NpZ25lZFhpZHNBZGQoeGlkc1tpXSwgeGlkc1tp XSwgdHJ1ZSk7Ci0JCX0KLQotCQlLbm93bkFzc2lnbmVkWGlkc0Rpc3BsYXkoREVCVUczKTsK LQl9Ci0KLQlwZnJlZSh4aWRzKTsKLQotCS8qCi0JICogbGF0ZXN0T2JzZXJ2ZWRYaWQgaXMg YXQgbGVhc3Qgc2V0IHRvIHRoZSBwb2ludCB3aGVyZSBTVUJUUkFOUyB3YXMKLQkgKiBzdGFy dGVkIHVwIHRvIChjZi4gUHJvY0FycmF5SW5pdFJlY292ZXJ5KCkpIG9yIHRvIHRoZSBiaWdn ZXN0IHhpZAotCSAqIFJlY29yZEtub3duQXNzaWduZWRUcmFuc2FjdGlvbklkcygpIHdhcyBj YWxsZWQgZm9yLiAgSW5pdGlhbGl6ZQotCSAqIHN1YnRyYW5zIGZyb20gdGhlcmVvbiwgdXAg dG8gbmV4dFhpZCAtIDEuCi0JICoKLQkgKiBXZSBuZWVkIHRvIGR1cGxpY2F0ZSBwYXJ0cyBv ZiBSZWNvcmRLbm93bkFzc2lnbmVkVHJhbnNhY3Rpb25JZCgpIGhlcmUsCi0JICogYmVjYXVz ZSB3ZSd2ZSBqdXN0IGFkZGVkIHhpZHMgdG8gdGhlIGtub3duIGFzc2lnbmVkIHhpZHMgbWFj aGluZXJ5IHRoYXQKLQkgKiBoYXZlbid0IGdvbmUgdGhyb3VnaCBSZWNvcmRLbm93bkFzc2ln bmVkVHJhbnNhY3Rpb25JZCgpLgotCSAqLwotCUFzc2VydChUcmFuc2FjdGlvbklkSXNOb3Jt YWwobGF0ZXN0T2JzZXJ2ZWRYaWQpKTsKLQlUcmFuc2FjdGlvbklkQWR2YW5jZShsYXRlc3RP YnNlcnZlZFhpZCk7Ci0Jd2hpbGUgKFRyYW5zYWN0aW9uSWRQcmVjZWRlcyhsYXRlc3RPYnNl cnZlZFhpZCwgcnVubmluZy0+bmV4dFhpZCkpCi0JewotCQlFeHRlbmRTVUJUUkFOUyhsYXRl c3RPYnNlcnZlZFhpZCk7Ci0JCVRyYW5zYWN0aW9uSWRBZHZhbmNlKGxhdGVzdE9ic2VydmVk WGlkKTsKLQl9Ci0JVHJhbnNhY3Rpb25JZFJldHJlYXQobGF0ZXN0T2JzZXJ2ZWRYaWQpOwkv KiA9IHJ1bm5pbmctPm5leHRYaWQgLSAxICovCi0KLQkvKiAtLS0tLS0tLS0tCi0JICogTm93 IHdlJ3ZlIGdvdCB0aGUgcnVubmluZyB4aWRzIHdlIG5lZWQgdG8gc2V0IHRoZSBnbG9iYWwg dmFsdWVzIHRoYXQKLQkgKiBhcmUgdXNlZCB0byB0cmFjayBzbmFwc2hvdHMgYXMgdGhleSBl dm9sdmUgZnVydGhlci4KLQkgKgotCSAqIC0gbGF0ZXN0Q29tcGxldGVkWGlkIHdoaWNoIHdp bGwgYmUgdGhlIHhtYXggZm9yIHNuYXBzaG90cwotCSAqIC0gbGFzdE92ZXJmbG93ZWRYaWQg d2hpY2ggc2hvd3Mgd2hldGhlciBzbmFwc2hvdHMgb3ZlcmZsb3cKLQkgKiAtIG5leHRYaWQK LQkgKgotCSAqIElmIHRoZSBzbmFwc2hvdCBvdmVyZmxvd2VkLCB0aGVuIHdlIHN0aWxsIGlu aXRpYWxpc2Ugd2l0aCB3aGF0IHdlIGtub3csCi0JICogYnV0IHRoZSByZWNvdmVyeSBzbmFw c2hvdCBpc24ndCBmdWxseSB2YWxpZCB5ZXQgYmVjYXVzZSB3ZSBrbm93IHRoZXJlCi0JICog YXJlIHNvbWUgc3VieGlkcyBtaXNzaW5nLiBXZSBkb24ndCBrbm93IHRoZSBzcGVjaWZpYyBz dWJ4aWRzIHRoYXQgYXJlCi0JICogbWlzc2luZywgc28gY29uc2VydmF0aXZlbHkgYXNzdW1l IHRoZSBsYXN0IG9uZSBpcyBsYXRlc3RPYnNlcnZlZFhpZC4KLQkgKiAtLS0tLS0tLS0tCi0J ICovCi0JaWYgKHJ1bm5pbmctPnN1YnhpZF9zdGF0dXMgPT0gU1VCWElEU19NSVNTSU5HKQot CXsKLQkJc3RhbmRieVN0YXRlID0gU1RBTkRCWV9TTkFQU0hPVF9QRU5ESU5HOwotCi0JCXN0 YW5kYnlTbmFwc2hvdFBlbmRpbmdYbWluID0gbGF0ZXN0T2JzZXJ2ZWRYaWQ7Ci0JCXByb2NB cnJheS0+bGFzdE92ZXJmbG93ZWRYaWQgPSBsYXRlc3RPYnNlcnZlZFhpZDsKLQl9Ci0JZWxz ZQotCXsKLQkJc3RhbmRieVN0YXRlID0gU1RBTkRCWV9TTkFQU0hPVF9SRUFEWTsKLQotCQlz dGFuZGJ5U25hcHNob3RQZW5kaW5nWG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOwotCi0J CS8qCi0JCSAqIElmIHRoZSAneGlkcycgYXJyYXkgZGlkbid0IGluY2x1ZGUgYWxsIHN1YnRy YW5zYWN0aW9ucywgd2UgaGF2ZSB0bwotCQkgKiBtYXJrIGFueSBzbmFwc2hvdHMgdGFrZW4g YXMgb3ZlcmZsb3dlZC4KLQkJICovCi0JCWlmIChydW5uaW5nLT5zdWJ4aWRfc3RhdHVzID09 IFNVQlhJRFNfSU5fU1VCVFJBTlMpCi0JCQlwcm9jQXJyYXktPmxhc3RPdmVyZmxvd2VkWGlk ID0gbGF0ZXN0T2JzZXJ2ZWRYaWQ7Ci0JCWVsc2UKLQkJewotCQkJQXNzZXJ0KHJ1bm5pbmct PnN1YnhpZF9zdGF0dXMgPT0gU1VCWElEU19JTl9BUlJBWSk7Ci0JCQlwcm9jQXJyYXktPmxh c3RPdmVyZmxvd2VkWGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JCX0KLQl9Ci0KLQkv KgotCSAqIElmIGEgdHJhbnNhY3Rpb24gd3JvdGUgYSBjb21taXQgcmVjb3JkIGluIHRoZSBn YXAgYmV0d2VlbiB0YWtpbmcgYW5kCi0JICogbG9nZ2luZyB0aGUgc25hcHNob3QgdGhlbiBs YXRlc3RDb21wbGV0ZWRYaWQgbWF5IGFscmVhZHkgYmUgaGlnaGVyIHRoYW4KLQkgKiB0aGUg dmFsdWUgZnJvbSB0aGUgc25hcHNob3QsIHNvIGNoZWNrIGJlZm9yZSB3ZSB1c2UgdGhlIGlu Y29taW5nIHZhbHVlLgotCSAqIEl0IGFsc28gbWlnaHQgbm90IHlldCBiZSBzZXQgYXQgYWxs LgotCSAqLwotCU1haW50YWluTGF0ZXN0Q29tcGxldGVkWGlkUmVjb3ZlcnkocnVubmluZy0+ bGF0ZXN0Q29tcGxldGVkWGlkKTsKLQotCS8qCi0JICogTkI6IE5vIG5lZWQgdG8gaW5jcmVt ZW50IFRyYW5zYW1WYXJpYWJsZXMtPnhhY3RDb21wbGV0aW9uQ291bnQgaGVyZSwKLQkgKiBu b2JvZHkgY2FuIHNlZSBpdCB5ZXQuCi0JICovCi0KKwlwcm9jQXJyYXktPm9sZGVzdF9ydW5u aW5nX3ByaW1hcnlfeGlkID0gb2xkZXN0UnVubmluZ1hJRDsKIAlMV0xvY2tSZWxlYXNlKFBy b2NBcnJheUxvY2spOwotCi0JS25vd25Bc3NpZ25lZFhpZHNEaXNwbGF5KERFQlVHMyk7Ci0J aWYgKHN0YW5kYnlTdGF0ZSA9PSBTVEFOREJZX1NOQVBTSE9UX1JFQURZKQotCQllbG9nKERF QlVHMSwgInJlY292ZXJ5IHNuYXBzaG90cyBhcmUgbm93IGVuYWJsZWQiKTsKLQllbHNlCi0J CWVsb2coREVCVUcxLAotCQkJICJyZWNvdmVyeSBzbmFwc2hvdCB3YWl0aW5nIGZvciBub24t b3ZlcmZsb3dlZCBzbmFwc2hvdCBvciAiCi0JCQkgInVudGlsIG9sZGVzdCBhY3RpdmUgeGlk IG9uIHN0YW5kYnkgaXMgYXQgbGVhc3QgJXUgKG5vdyAldSkiLAotCQkJIHN0YW5kYnlTbmFw c2hvdFBlbmRpbmdYbWluLAotCQkJIHJ1bm5pbmctPm9sZGVzdFJ1bm5pbmdYaWQpOwogfQog Ci0vKgotICogUHJvY0FycmF5QXBwbHlYaWRBc3NpZ25tZW50Ci0gKgkJUHJvY2VzcyBhbiBY TE9HX1hBQ1RfQVNTSUdOTUVOVCBXQUwgcmVjb3JkCi0gKi8KLXZvaWQKLVByb2NBcnJheUFw cGx5WGlkQXNzaWdubWVudChUcmFuc2FjdGlvbklkIHRvcHhpZCwKLQkJCQkJCQlpbnQgbnN1 YnhpZHMsIFRyYW5zYWN0aW9uSWQgKnN1YnhpZHMpCi17Ci0JVHJhbnNhY3Rpb25JZCBtYXhf eGlkOwotCWludAkJCWk7Ci0KLQlBc3NlcnQoc3RhbmRieVN0YXRlID49IFNUQU5EQllfSU5J VElBTElaRUQpOwotCi0JbWF4X3hpZCA9IFRyYW5zYWN0aW9uSWRMYXRlc3QodG9weGlkLCBu c3VieGlkcywgc3VieGlkcyk7Ci0KLQkvKgotCSAqIE1hcmsgYWxsIHRoZSBzdWJ0cmFuc2Fj dGlvbnMgYXMgb2JzZXJ2ZWQuCi0JICoKLQkgKiBOT1RFOiBUaGlzIHdpbGwgZmFpbCBpZiB0 aGUgc3VieGlkIGNvbnRhaW5zIHRvbyBtYW55IHByZXZpb3VzbHkKLQkgKiB1bm9ic2VydmVk IHhpZHMgdG8gZml0IGludG8ga25vd24tYXNzaWduZWQteGlkcy4gVGhhdCBzaG91bGRuJ3Qg aGFwcGVuCi0JICogYXMgdGhlIGNvZGUgc3RhbmRzLCBiZWNhdXNlIHhpZC1hc3NpZ25tZW50 IHJlY29yZHMgc2hvdWxkIG5ldmVyIGNvbnRhaW4KLQkgKiBtb3JlIHRoYW4gUEdQUk9DX01B WF9DQUNIRURfU1VCWElEUyBlbnRyaWVzLgotCSAqLwotCVJlY29yZEtub3duQXNzaWduZWRU cmFuc2FjdGlvbklkcyhtYXhfeGlkKTsKLQotCS8qCi0JICogTm90aWNlIHRoYXQgd2UgdXBk YXRlIHBnX3N1YnRyYW5zIHdpdGggdGhlIHRvcC1sZXZlbCB4aWQsIHJhdGhlciB0aGFuCi0J ICogdGhlIHBhcmVudCB4aWQuIFRoaXMgaXMgYSBkaWZmZXJlbmNlIGJldHdlZW4gbm9ybWFs IHByb2Nlc3NpbmcgYW5kCi0JICogcmVjb3ZlcnksIHlldCBpcyBzdGlsbCBjb3JyZWN0IGlu IGFsbCBjYXNlcy4gVGhlIHJlYXNvbiBpcyB0aGF0Ci0JICogc3VidHJhbnNhY3Rpb24gY29t bWl0IGlzIG5vdCBtYXJrZWQgaW4gY2xvZyB1bnRpbCBjb21taXQgcHJvY2Vzc2luZywgc28K LQkgKiBhbGwgYWJvcnRlZCBzdWJ0cmFuc2FjdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gY2xl YXJseSBtYXJrZWQgaW4gY2xvZy4KLQkgKiBBcyBhIHJlc3VsdCB3ZSBhcmUgYWJsZSB0byBy ZWZlciBkaXJlY3RseSB0byB0aGUgdG9wLWxldmVsCi0JICogdHJhbnNhY3Rpb24ncyBzdGF0 ZSByYXRoZXIgdGhhbiBza2lwcGluZyB0aHJvdWdoIGFsbCB0aGUgaW50ZXJtZWRpYXRlCi0J ICogc3RhdGVzIGluIHRoZSBzdWJ0cmFuc2FjdGlvbiB0cmVlLiBUaGlzIHNob3VsZCBiZSB0 aGUgZmlyc3QgdGltZSB3ZQotCSAqIGhhdmUgYXR0ZW1wdGVkIHRvIFN1YlRyYW5zU2V0UGFy ZW50KCkuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IG5zdWJ4aWRzOyBpKyspCi0JCVN1YlRy YW5zU2V0UGFyZW50KHN1YnhpZHNbaV0sIHRvcHhpZCk7Ci0KLQkvKiBLbm93bkFzc2lnbmVk WGlkcyBpc24ndCBtYWludGFpbmVkIHlldCwgc28gd2UncmUgZG9uZSBmb3Igbm93ICovCi0J aWYgKHN0YW5kYnlTdGF0ZSA9PSBTVEFOREJZX0lOSVRJQUxJWkVEKQotCQlyZXR1cm47Ci0K LQkvKgotCSAqIFVzZXMgc2FtZSBsb2NraW5nIGFzIHRyYW5zYWN0aW9uIGNvbW1pdAotCSAq LwotCUxXTG9ja0FjcXVpcmUoUHJvY0FycmF5TG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCS8q Ci0JICogUmVtb3ZlIHN1YnhpZHMgZnJvbSBrbm93bi1hc3NpZ25lZC14YWN0cy4KLQkgKi8K LQlLbm93bkFzc2lnbmVkWGlkc1JlbW92ZVRyZWUoSW52YWxpZFRyYW5zYWN0aW9uSWQsIG5z dWJ4aWRzLCBzdWJ4aWRzKTsKLQotCS8qCi0JICogQWR2YW5jZSBsYXN0T3ZlcmZsb3dlZFhp ZCB0byBiZSBhdCBsZWFzdCB0aGUgbGFzdCBvZiB0aGVzZSBzdWJ4aWRzLgotCSAqLwotCWlm IChUcmFuc2FjdGlvbklkUHJlY2VkZXMocHJvY0FycmF5LT5sYXN0T3ZlcmZsb3dlZFhpZCwg bWF4X3hpZCkpCi0JCXByb2NBcnJheS0+bGFzdE92ZXJmbG93ZWRYaWQgPSBtYXhfeGlkOwot Ci0JTFdMb2NrUmVsZWFzZShQcm9jQXJyYXlMb2NrKTsKLX0KIAogLyoKICAqIFRyYW5zYWN0 aW9uSWRJc0luUHJvZ3Jlc3MgLS0gaXMgZ2l2ZW4gdHJhbnNhY3Rpb24gcnVubmluZyBpbiBz b21lIGJhY2tlbmQKQEAgLTEzNzgsMjMgKzk3MCwyNCBAQCBQcm9jQXJyYXlBcHBseVhpZEFz c2lnbm1lbnQoVHJhbnNhY3Rpb25JZCB0b3B4aWQsCiAgKiBBc2lkZSBmcm9tIHNvbWUgc2hv cnRjdXRzIHN1Y2ggYXMgY2hlY2tpbmcgUmVjZW50WG1pbiBhbmQgb3VyIG93biBYaWQsCiAg KiB0aGVyZSBhcmUgZm91ciBwb3NzaWJpbGl0aWVzIGZvciBmaW5kaW5nIGEgcnVubmluZyB0 cmFuc2FjdGlvbjoKICAqCi0gKiAxLiBUaGUgZ2l2ZW4gWGlkIGlzIGEgbWFpbiB0cmFuc2Fj dGlvbiBJZC4gIFdlIHdpbGwgZmluZCB0aGlzIG91dCBjaGVhcGx5CisgKiAxLiBJbiBIb3Qg U3RhbmRieSBtb2RlLCB0aGVyZSBhcmUgbm8gdHJhbnNhY3Rpb25zIHdpdGggWElEcyBhY3Rp dmUgaW4gdGhlCisgKiBzdGFuZGJ5LiBDaGVjayBwZ194YWN0IHRvIHNlZSBpZiB0aGUgdHJh bnNhY3Rpb24gaXMga25vd24gdG8gaGF2ZSBjb21taXR0ZWQKKyAqIG9yIGFib3J0ZWQsIG90 aGVyd2lzZSBpdCdzIGNvbnNpZGVyZWQgYXMgcnVubmluZy4KKyAqCisgKiAyLiBUaGUgZ2l2 ZW4gWGlkIGlzIGEgbWFpbiB0cmFuc2FjdGlvbiBJZC4gIFdlIHdpbGwgZmluZCB0aGlzIG91 dCBjaGVhcGx5CiAgKiBieSBsb29raW5nIGF0IFByb2NHbG9iYWwtPnhpZHMuCiAgKgotICog Mi4gVGhlIGdpdmVuIFhpZCBpcyBvbmUgb2YgdGhlIGNhY2hlZCBzdWJ4YWN0IFhpZHMgaW4g dGhlIFBHUFJPQyBhcnJheS4KKyAqIDMuIFRoZSBnaXZlbiBYaWQgaXMgb25lIG9mIHRoZSBj YWNoZWQgc3VieGFjdCBYaWRzIGluIHRoZSBQR1BST0MgYXJyYXkuCiAgKiBXZSBjYW4gZmlu ZCB0aGlzIG91dCBjaGVhcGx5IHRvby4KICAqCi0gKiAzLiBJbiBIb3QgU3RhbmRieSBtb2Rl LCB3ZSBtdXN0IHNlYXJjaCB0aGUgS25vd25Bc3NpZ25lZFhpZHMgbGlzdCB0byBzZWUKLSAq IGlmIHRoZSBYaWQgaXMgcnVubmluZyBvbiB0aGUgcHJpbWFyeS4KLSAqCiAgKiA0LiBTZWFy Y2ggdGhlIFN1YlRyYW5zIHRyZWUgdG8gZmluZCB0aGUgWGlkJ3MgdG9wbW9zdCBwYXJlbnQs IGFuZCB0aGVuIHNlZQotICogaWYgdGhhdCBpcyBydW5uaW5nIGFjY29yZGluZyB0byBQcm9j R2xvYmFsLT54aWRzW10gb3IgS25vd25Bc3NpZ25lZFhpZHMuCisgKiBpZiB0aGF0IGlzIHJ1 bm5pbmcgYWNjb3JkaW5nIHRvIFByb2NHbG9iYWwtPnhpZHNbXS4KICAqIFRoaXMgaXMgdGhl IHNsb3dlc3Qgd2F5LCBidXQgc2FkbHkgaXQgaGFzIHRvIGJlIGRvbmUgYWx3YXlzIGlmIHRo ZSBvdGhlcnMKICAqIGZhaWxlZCwgdW5sZXNzIHdlIHNlZSB0aGF0IHRoZSBjYWNoZWQgc3Vi eGFjdCBzZXRzIGFyZSBjb21wbGV0ZSAobm9uZSBoYXZlCiAgKiBvdmVyZmxvd2VkKS4KICAq Ci0gKiBQcm9jQXJyYXlMb2NrIGhhcyB0byBiZSBoZWxkIHdoaWxlIHdlIGRvIDEsIDIsIDMu ICBJZiB3ZSBzYXZlIHRoZSB0b3AgWGlkcwotICogd2hpbGUgZG9pbmcgMSBhbmQgMywgd2Ug Y2FuIHJlbGVhc2UgdGhlIFByb2NBcnJheUxvY2sgd2hpbGUgd2UgZG8gNC4KKyAqIFByb2NB cnJheUxvY2sgaGFzIHRvIGJlIGhlbGQgd2hpbGUgd2UgZG8gMiBhbmQgMy4gIElmIHdlIHNh dmUgdGhlIHRvcCBYaWRzCisgKiB3aGlsZSBkb2luZyAyIGFuZCAzLCB3ZSBjYW4gcmVsZWFz ZSB0aGUgUHJvY0FycmF5TG9jayB3aGlsZSB3ZSBkbyA0LgogICogVGhpcyBidXlzIGJhY2sg c29tZSBjb25jdXJyZW5jeSAoYW5kIHdlIGNhbid0IHJldHJpZXZlIHRoZSBtYWluIFhpZHMg ZnJvbQogICogUHJvY0dsb2JhbC0+eGlkc1tdIGFnYWluIGFueXdheTsgc2VlIEdldE5ld1Ry YW5zYWN0aW9uSWQpLgogICovCkBAIC0xNDM1LDYgKzEwMjgsMjggQEAgVHJhbnNhY3Rpb25J ZElzSW5Qcm9ncmVzcyhUcmFuc2FjdGlvbklkIHhpZCkKIAkJcmV0dXJuIGZhbHNlOwogCX0K IAorCS8qCisJICogSW4gaG90IHN0YW5kYnkgbW9kZSwgY2hlY2sgcGdfeGFjdC4KKwkgKgor CSAqIFdpdGggbm9ybWFsIG5vbi1DU04gc25hcHNob3RzLCB5b3UgbXVzdCBiZSBjYXJlZnVs IHRvIGNoZWNrCisJICogVHJhbnNhY3Rpb25JZElzSW5Qcm9ncmVzcygpIGJlZm9yZSBjaGVj a2luZyBwZ194YWN0LCBiZWNhdXNlIGEKKwkgKiB0cmFuc2FjdGlvbiBpcyBtYXJrZWQgYXMg Y29tbWl0dGVkIGJlZm9yZSBpdCdzIHJlbW92ZWQgZnJvbSBQR1BST0MuIEJ1dAorCSAqIGR1 cmluZyByZWNvdmVyeSwgd2Ugbm93IHVzZSBDU04gc25hcHNob3RzIHNvIEkgdGhpbmsgdGhh dCdzIE9LLiBTZWUgdGhlCisJICogIk5PVEUiIGF0IHRoZSB0b3Agb2YgaGVhcGFtX3Zpc2li aWxpdHkuYy4KKwkgKgorCSAqIER1cmluZyByZWNvdmVyeSwgdGhlIFhJRCBjYW5ub3QgYmUg b3VyIG93biB0cmFuc2FjdGlvbiwgYW5kIHRoZSBDU04KKwkgKiBjaGVjayBoYW5kbGVzIHN1 YnRyYW5zYWN0aW9ucyB0b28sIHNvIHdlIGNhbiBza2lwIHRoZSByZXN0IG9mIHRoZQorCSAq IGZ1bmN0aW9uLgorCSAqLworCWlmIChSZWNvdmVyeUluUHJvZ3Jlc3MoKSkKKwl7CisJCXhj X2R1cmluZ19yZWNvdmVyeV9pbmMoKTsKKwkJaWYgKFRyYW5zYWN0aW9uSWREaWRDb21taXQo eGlkKSB8fCBUcmFuc2FjdGlvbklkRGlkQWJvcnQoeGlkKSkKKwkJCXJldHVybiBmYWxzZTsK KwkJZWxzZQorCQkJcmV0dXJuIHRydWU7CisJfQorCiAJLyoKIAkgKiBBbHNvLCB3ZSBjYW4g aGFuZGxlIG91ciBvd24gdHJhbnNhY3Rpb24gKGFuZCBzdWJ0cmFuc2FjdGlvbnMpIHdpdGhv dXQKIAkgKiBhbnkgYWNjZXNzIHRvIHNoYXJlZCBtZW1vcnkuCkBAIC0xNDUxLDEyICsxMDY2 LDcgQEAgVHJhbnNhY3Rpb25JZElzSW5Qcm9ncmVzcyhUcmFuc2FjdGlvbklkIHhpZCkKIAkg Ki8KIAlpZiAoeGlkcyA9PSBOVUxMKQogCXsKLQkJLyoKLQkJICogSW4gaG90IHN0YW5kYnkg bW9kZSwgcmVzZXJ2ZSBlbm91Z2ggc3BhY2UgdG8gaG9sZCBhbGwgeGlkcyBpbiB0aGUKLQkJ ICoga25vd24tYXNzaWduZWQgbGlzdC4gSWYgd2UgbGF0ZXIgZmluaXNoIHJlY292ZXJ5LCB3 ZSBubyBsb25nZXIgbmVlZAotCQkgKiB0aGUgYmlnZ2VyIGFycmF5LCBidXQgd2UgZG9uJ3Qg Ym90aGVyIHRvIHNocmluayBpdC4KLQkJICovCi0JCWludAkJCW1heHhpZHMgPSBSZWNvdmVy eUluUHJvZ3Jlc3MoKSA/IFRPVEFMX01BWF9DQUNIRURfU1VCWElEUyA6IGFycmF5UC0+bWF4 UHJvY3M7CisJCWludAkJCW1heHhpZHMgPSBhcnJheVAtPm1heFByb2NzOwogCiAJCXhpZHMg PSAoVHJhbnNhY3Rpb25JZCAqKSBtYWxsb2MobWF4eGlkcyAqIHNpemVvZihUcmFuc2FjdGlv bklkKSk7CiAJCWlmICh4aWRzID09IE5VTEwpCkBAIC0xNTUxLDMzICsxMTYxLDYgQEAgVHJh bnNhY3Rpb25JZElzSW5Qcm9ncmVzcyhUcmFuc2FjdGlvbklkIHhpZCkKIAkJCXhpZHNbbnhp ZHMrK10gPSBweGlkOwogCX0KIAotCS8qCi0JICogU3RlcCAzOiBpbiBob3Qgc3RhbmRieSBt b2RlLCBjaGVjayB0aGUga25vd24tYXNzaWduZWQteGlkcyBsaXN0LiAgWElEcwotCSAqIGlu IHRoZSBsaXN0IG11c3QgYmUgdHJlYXRlZCBhcyBydW5uaW5nLgotCSAqLwotCWlmIChSZWNv dmVyeUluUHJvZ3Jlc3MoKSkKLQl7Ci0JCS8qIG5vbmUgb2YgdGhlIFBHUFJPQyBlbnRyaWVz IHNob3VsZCBoYXZlIFhJRHMgaW4gaG90IHN0YW5kYnkgbW9kZSAqLwotCQlBc3NlcnQobnhp ZHMgPT0gMCk7Ci0KLQkJaWYgKEtub3duQXNzaWduZWRYaWRFeGlzdHMoeGlkKSkKLQkJewot CQkJTFdMb2NrUmVsZWFzZShQcm9jQXJyYXlMb2NrKTsKLQkJCXhjX2J5X2tub3duX2Fzc2ln bmVkX2luYygpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQkvKgotCQkgKiBJZiB0aGUg S25vd25Bc3NpZ25lZFhpZHMgb3ZlcmZsb3dlZCwgd2UgaGF2ZSB0byBjaGVjayBwZ19zdWJ0 cmFucwotCQkgKiB0b28uICBGZXRjaCBhbGwgeGlkcyBmcm9tIEtub3duQXNzaWduZWRYaWRz IHRoYXQgYXJlIGxvd2VyIHRoYW4KLQkJICogeGlkLCBzaW5jZSBpZiB4aWQgaXMgYSBzdWJ0 cmFuc2FjdGlvbiBpdHMgcGFyZW50IHdpbGwgYWx3YXlzIGhhdmUgYQotCQkgKiBsb3dlciB2 YWx1ZS4gIE5vdGUgd2Ugd2lsbCBjb2xsZWN0IGJvdGggbWFpbiBhbmQgc3ViWElEcyBoZXJl LCBidXQKLQkJICogdGhlcmUncyBubyBoZWxwIGZvciBpdC4KLQkJICovCi0JCWlmIChUcmFu c2FjdGlvbklkUHJlY2VkZXNPckVxdWFscyh4aWQsIHByb2NBcnJheS0+bGFzdE92ZXJmbG93 ZWRYaWQpKQotCQkJbnhpZHMgPSBLbm93bkFzc2lnbmVkWGlkc0dldCh4aWRzLCB4aWQpOwot CX0KLQogCUxXTG9ja1JlbGVhc2UoUHJvY0FycmF5TG9jayk7CiAKIAkvKgpAQCAtMTg1MSw4 ICsxNDM0LDcgQEAgQ29tcHV0ZVhpZEhvcml6b25zKENvbXB1dGVYaWRIb3Jpem9uc1Jlc3Vs dCAqaCkKIAkJICogY2FuJ3QgYmUgdGllZCB0byBhIHNwZWNpZmljIGRhdGFiYXNlLikKIAkJ ICoKIAkJICogQWxzbywgd2hpbGUgaW4gcmVjb3Zlcnkgd2UgY2Fubm90IGNvbXB1dGUgYW4g YWNjdXJhdGUgcGVyLWRhdGFiYXNlCi0JCSAqIGhvcml6b24sIGFzIGFsbCB4aWRzIGFyZSBt YW5hZ2VkIHZpYSB0aGUgS25vd25Bc3NpZ25lZFhpZHMKLQkJICogbWFjaGluZXJ5LgorCQkg KiBob3Jpem9uLCBhcyBhbGwgeGlkcyBhcmUgbWFuYWdlZCB2aWEgdGhlIENTTiBsb2cgbWFj aGluZXJ5LgogCQkgKi8KIAkJaWYgKHByb2MtPmRhdGFiYXNlSWQgPT0gTXlEYXRhYmFzZUlk IHx8CiAJCQlNeURhdGFiYXNlSWQgPT0gSW52YWxpZE9pZCB8fApAQCAtMTg2NSwxMSArMTQ0 NywxNCBAQCBDb21wdXRlWGlkSG9yaXpvbnMoQ29tcHV0ZVhpZEhvcml6b25zUmVzdWx0ICpo KQogCX0KIAogCS8qCi0JICogSWYgaW4gcmVjb3ZlcnkgZmV0Y2ggb2xkZXN0IHhpZCBpbiBL bm93bkFzc2lnbmVkWGlkcywgd2lsbCBiZSBhcHBsaWVkCi0JICogYWZ0ZXIgbG9jayBpcyBy ZWxlYXNlZC4KKwkgKiBJZiBpbiByZWNvdmVyeSBmZXRjaCBvbGRlc3QgeGlkIGZyb20gbGFz dCBjaGVja3BvaW50LgorCSAqCisJICogWFhYOiB0aGF0IGNhbiBiZSBtdWNoIG9sZGVyIHRo YW4gd2hhdCB3ZSBoYWQgcHJldmlvdXNseSB3aXRoIHRoZQorCSAqIGtub3duLWFzc2lnbmVk LXhpZHMgbWFjaGluZXJ5LiBJIHRoaW5rIHRoYXQncyBPSywgZ2l2ZW4gd2hhdCB0aGlzCisJ ICogZnVuY3Rpb24gaXMgdXNlZCBmb3IgZHVyaW5nIHJlY292ZXJ5PwogCSAqLwogCWlmIChp bl9yZWNvdmVyeSkKLQkJa2F4bWluID0gS25vd25Bc3NpZ25lZFhpZHNHZXRPbGRlc3RYbWlu KCk7CisJCWtheG1pbiA9IHByb2NBcnJheS0+b2xkZXN0X3J1bm5pbmdfcHJpbWFyeV94aWQ7 CiAKIAkvKgogCSAqIE5vIG90aGVyIGluZm9ybWF0aW9uIGZyb20gc2hhcmVkIHN0YXRlIGlz IG5lZWRlZCwgcmVsZWFzZSB0aGUgbG9jawpAQCAtMjE4OCw3ICsxNzczLDcgQEAgR2V0U25h cHNob3REYXRhKFNuYXBzaG90IHNuYXBzaG90KQogCWludAkJCW15cGd4YWN0b2ZmOwogCVRy YW5zYWN0aW9uSWQgbXl4aWQ7CiAJdWludDY0CQljdXJYYWN0Q29tcGxldGlvbkNvdW50Owot CisJWExvZ1JlY1B0cgljc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKIAlUcmFuc2FjdGlvbklk IHJlcGxpY2F0aW9uX3Nsb3RfeG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogCVRyYW5z YWN0aW9uSWQgcmVwbGljYXRpb25fc2xvdF9jYXRhbG9nX3htaW4gPSBJbnZhbGlkVHJhbnNh Y3Rpb25JZDsKIApAQCAtMjM2OCwyNyArMTk1Myw4IEBAIEdldFNuYXBzaG90RGF0YShTbmFw c2hvdCBzbmFwc2hvdCkKIAllbHNlCiAJewogCQkvKgotCQkgKiBXZSdyZSBpbiBob3Qgc3Rh bmRieSwgc28gZ2V0IFhJRHMgZnJvbSBLbm93bkFzc2lnbmVkWGlkcy4KLQkJICoKLQkJICog V2Ugc3RvcmUgYWxsIHhpZHMgZGlyZWN0bHkgaW50byBzdWJ4aXBbXS4gSGVyZSdzIHdoeToK LQkJICoKLQkJICogSW4gcmVjb3Zlcnkgd2UgZG9uJ3Qga25vdyB3aGljaCB4aWRzIGFyZSB0 b3AtbGV2ZWwgYW5kIHdoaWNoIGFyZQotCQkgKiBzdWJ4YWN0cywgYSBkZXNpZ24gY2hvaWNl IHRoYXQgZ3JlYXRseSBzaW1wbGlmaWVzIHhpZCBwcm9jZXNzaW5nLgotCQkgKgotCQkgKiBJ dCBzZWVtcyBsaWtlIHdlIHdvdWxkIHdhbnQgdG8gdHJ5IHRvIHB1dCB4aWRzIGludG8geGlw W10gb25seSwgYnV0Ci0JCSAqIHRoYXQgaXMgZmFpcmx5IHNtYWxsLiBXZSB3b3VsZCBlaXRo ZXIgbmVlZCB0byBtYWtlIHRoYXQgYmlnZ2VyIG9yCi0JCSAqIHRvIGluY3JlYXNlIHRoZSBy YXRlIGF0IHdoaWNoIHdlIFdBTC1sb2cgeGlkIGFzc2lnbm1lbnQ7IG5laXRoZXIgaXMKLQkJ ICogYW4gYXBwZWFsaW5nIGNob2ljZS4KLQkJICoKLQkJICogV2UgY291bGQgdHJ5IHRvIHN0 b3JlIHhpZHMgaW50byB4aXBbXSBmaXJzdCBhbmQgdGhlbiBpbnRvIHN1YnhpcFtdCi0JCSAq IGlmIHRoZXJlIGFyZSB0b28gbWFueSB4aWRzLiBUaGF0IG9ubHkgd29ya3MgaWYgdGhlIHNu YXBzaG90IGRvZXNuJ3QKLQkJICogb3ZlcmZsb3cgYmVjYXVzZSB3ZSBkbyBub3Qgc2VhcmNo IHN1YnhpcFtdIGluIHRoYXQgY2FzZS4gQSBzaW1wbGVyCi0JCSAqIHdheSBpcyB0byBqdXN0 IHN0b3JlIGFsbCB4aWRzIGluIHRoZSBzdWJ4aXAgYXJyYXkgYmVjYXVzZSB0aGlzIGlzCi0J CSAqIGJ5IGZhciB0aGUgYmlnZ2VyIGFycmF5LiBXZSBqdXN0IGxlYXZlIHRoZSB4aXAgYXJy YXkgZW1wdHkuCi0JCSAqCi0JCSAqIEVpdGhlciB3YXkgd2UgbmVlZCB0byBjaGFuZ2UgdGhl IHdheSBYaWRJbk1WQ0NTbmFwc2hvdCgpIHdvcmtzCi0JCSAqIGRlcGVuZGluZyB1cG9uIHdo ZW4gdGhlIHNuYXBzaG90IHdhcyB0YWtlbiwgb3IgY2hhbmdlIG5vcm1hbAotCQkgKiBzbmFw c2hvdCBwcm9jZXNzaW5nIHNvIGl0IG1hdGNoZXMuCisJCSAqIFdlJ3JlIGluIGhvdCBzdGFu ZGJ5LCBzbyBnZXQgdGhlIGN1cnJlbnQgQ1NOLiBUaGF0J3MgdXNlZCB0bworCQkgKiBkZXRl cm1pbmUgd2hpY2ggdHJhbnNhY3Rpb25zIGNvbW1pdHRlZCBiZWZvcmUgdGhpcyBzbmFwc2hv dC4KIAkJICoKIAkJICogTm90ZTogSXQgaXMgcG9zc2libGUgZm9yIHJlY292ZXJ5IHRvIGVu ZCBiZWZvcmUgd2UgZmluaXNoIHRha2luZwogCQkgKiB0aGUgc25hcHNob3QsIGFuZCBmb3Ig bmV3bHkgYXNzaWduZWQgdHJhbnNhY3Rpb24gaWRzIHRvIGJlIGFkZGVkIHRvCkBAIC0yMzk2 LDE0ICsxOTYyLDE3IEBAIEdldFNuYXBzaG90RGF0YShTbmFwc2hvdCBzbmFwc2hvdCkKIAkJ ICogdGhvc2UgbmV3bHkgYWRkZWQgdHJhbnNhY3Rpb24gaWRzIHdvdWxkIGJlIGZpbHRlcmVk IGF3YXksIHNvIHdlCiAJCSAqIG5lZWQgbm90IGJlIGNvbmNlcm5lZCBhYm91dCB0aGVtLgog CQkgKi8KLQkJc3ViY291bnQgPSBLbm93bkFzc2lnbmVkWGlkc0dldEFuZFNldFhtaW4oc25h cHNob3QtPnN1YnhpcCwgJnhtaW4sCi0JCQkJCQkJCQkJCQkgIHhtYXgpOworCQl4bWluID0g cHJvY0FycmF5LT5vbGRlc3RfcnVubmluZ19wcmltYXJ5X3hpZDsKIAotCQlpZiAoVHJhbnNh Y3Rpb25JZFByZWNlZGVzT3JFcXVhbHMoeG1pbiwgcHJvY0FycmF5LT5sYXN0T3ZlcmZsb3dl ZFhpZCkpCi0JCQlzdWJvdmVyZmxvd2VkID0gdHJ1ZTsKKwkJLyoKKwkJICogVGFrZSBDU04g dW5kZXIgUHJvY0FycmF5TG9jayBzbyB0aGUgc25hcHNob3Qgc3RheXMgc3luY2hyb25pemVk LgorCQkgKiAoWFhYOiBub3Qgc3VyZSB0aGF0J3Mgc3RyaWN0bHkgcmVxdWlyZWQuKQorCQkg KiBUaGlzIGlzIHdoYXQgZGV0ZXJtaW5lcyB3aGljaCB0cmFuc2FjdGlvbnMgd2UgY29uc2lk ZXIgZmluaXNoZWQgYW5kCisJCSAqIHdoaWNoIGFyZSBzdGlsbCBpbiBwcm9ncmVzcy4KKwkJ ICovCisJCWNzbiA9IFRyYW5zYW1WYXJpYWJsZXMtPmxhdGVzdENvbW1pdExTTjsKIAl9CiAK LQogCS8qCiAJICogRmV0Y2ggaW50byBsb2NhbCB2YXJpYWJsZSB3aGlsZSBQcm9jQXJyYXlM b2NrIGlzIGhlbGQgLSB0aGUKIAkgKiBMV0xvY2tSZWxlYXNlIGJlbG93IGlzIGEgYmFycmll ciwgZW5zdXJpbmcgdGhpcyBoYXBwZW5zIGluc2lkZSB0aGUKQEAgLTI1MTksNiArMjA4OCw4 IEBAIEdldFNuYXBzaG90RGF0YShTbmFwc2hvdCBzbmFwc2hvdCkKIAlzbmFwc2hvdC0+bHNu ID0gSW52YWxpZFhMb2dSZWNQdHI7CiAJc25hcHNob3QtPndoZW5UYWtlbiA9IDA7CiAKKwlz bmFwc2hvdC0+c25hcHNob3RDc24gPSBjc247CisKIAlyZXR1cm4gc25hcHNob3Q7CiB9CiAK QEAgLTI2NzQsOSArMjI0NSw2IEBAIFByb2NBcnJheUluc3RhbGxSZXN0b3JlZFhtaW4oVHJh bnNhY3Rpb25JZCB4bWluLCBQR1BST0MgKnByb2MpCiAgKiBUaGUgcmV0dXJuZWQgZGF0YSBz dHJ1Y3R1cmUgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQ7IGNhbGxlciBzaG91bGQgbm90CiAg KiBtb2RpZnkgaXQsIGFuZCBtdXN0IG5vdCBhc3N1bWUgaXQgaXMgdmFsaWQgcGFzdCB0aGUg bmV4dCBjYWxsLgogICoKLSAqIFRoaXMgaXMgbmV2ZXIgZXhlY3V0ZWQgZHVyaW5nIHJlY292 ZXJ5IHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gbG9vayBhdAotICogS25vd25Bc3NpZ25lZFhp ZHMuCi0gKgogICogRHVtbXkgUEdQUk9DcyBmcm9tIHByZXBhcmVkIHRyYW5zYWN0aW9uIGFy ZSBpbmNsdWRlZCwgbWVhbmluZyB0aGF0IHRoaXMKICAqIG1heSByZXR1cm4gZW50cmllcyB3 aXRoIGR1cGxpY2F0ZWQgVHJhbnNhY3Rpb25JZCB2YWx1ZXMgY29taW5nIGZyb20KICAqIHRy YW5zYWN0aW9uIGZpbmlzaGluZyB0byBwcmVwYXJlLiAgTm90aGluZyBpcyBkb25lIGFib3V0 IGR1cGxpY2F0ZWQKQEAgLTI3MDcsNiArMjI3NSw3IEBAIEdldFJ1bm5pbmdUcmFuc2FjdGlv bkRhdGEodm9pZCkKIAlpbnQJCQlzdWJjb3VudDsKIAlib29sCQlzdWJvdmVyZmxvd2VkOwog CisJLyogVGhpcyBpcyBuZXZlciBleGVjdXRlZCBkdXJpbmcgcmVjb3ZlcnkgKi8KIAlBc3Nl cnQoIVJlY292ZXJ5SW5Qcm9ncmVzcygpKTsKIAogCS8qCkBAIC0yODczLDE1ICsyNDQyLDE2 IEBAIEdldFJ1bm5pbmdUcmFuc2FjdGlvbkRhdGEodm9pZCkKICAqIFdlIGxvb2sgYXQgYWxs IGRhdGFiYXNlcywgdGhvdWdoIHRoZXJlIGlzIG5vIG5lZWQgdG8gaW5jbHVkZSBXQUxTZW5k ZXIKICAqIHNpbmNlIHRoaXMgaGFzIG5vIGVmZmVjdCBvbiBob3Qgc3RhbmRieSBjb25mbGlj dHMuCiAgKgotICogVGhpcyBpcyBuZXZlciBleGVjdXRlZCBkdXJpbmcgcmVjb3Zlcnkgc28g dGhlcmUgaXMgbm8gbmVlZCB0byBsb29rIGF0Ci0gKiBLbm93bkFzc2lnbmVkWGlkcy4KKyAq IElmIGFsbERicyBpcyBmYWxzZSwgc2tpcCBwcm9jZXNzZXMgYXR0YWNoZWQgdG8gb3RoZXIg ZGF0YWJhc2VzLgorICoKKyAqIFRoaXMgaXMgbmV2ZXIgZXhlY3V0ZWQgZHVyaW5nIHJlY292 ZXJ5LgogICoKICAqIFdlIGRvbid0IHdvcnJ5IGFib3V0IHVwZGF0aW5nIG90aGVyIGNvdW50 ZXJzLCB3ZSB3YW50IHRvIGtlZXAgdGhpcyBhcwogICogc2ltcGxlIGFzIHBvc3NpYmxlIGFu ZCBsZWF2ZSBHZXRTbmFwc2hvdERhdGEoKSBhcyB0aGUgcHJpbWFyeSBjb2RlIGZvcgogICog dGhhdCBib29ra2VlcGluZy4KICAqLwogVHJhbnNhY3Rpb25JZAotR2V0T2xkZXN0QWN0aXZl VHJhbnNhY3Rpb25JZCh2b2lkKQorR2V0T2xkZXN0QWN0aXZlVHJhbnNhY3Rpb25JZChib29s IGFsbERicykKIHsKIAlQcm9jQXJyYXlTdHJ1Y3QgKmFycmF5UCA9IHByb2NBcnJheTsKIAlU cmFuc2FjdGlvbklkICpvdGhlcl94aWRzID0gUHJvY0dsb2JhbC0+eGlkczsKQEAgLTI5MDIs MTEgKzI0NzIsMTMgQEAgR2V0T2xkZXN0QWN0aXZlVHJhbnNhY3Rpb25JZCh2b2lkKQogCUxX TG9ja1JlbGVhc2UoWGlkR2VuTG9jayk7CiAKIAkvKgotCSAqIFNwaW4gb3ZlciBwcm9jQXJy YXkgY29sbGVjdGluZyBhbGwgeGlkcyBhbmQgc3VieGlkcy4KKwkgKiBTcGluIG92ZXIgcHJv Y0FycmF5IGNoZWNraW5nIGVhY2ggeGlkLgogCSAqLwogCUxXTG9ja0FjcXVpcmUoUHJvY0Fy cmF5TG9jaywgTFdfU0hBUkVEKTsKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAt Pm51bVByb2NzOyBpbmRleCsrKQogCXsKKwkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBn cHJvY25vc1tpbmRleF07CisJCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nu b107CiAJCVRyYW5zYWN0aW9uSWQgeGlkOwogCiAJCS8qIEZldGNoIHhpZCBqdXN0IG9uY2Ug LSBzZWUgR2V0TmV3VHJhbnNhY3Rpb25JZCAqLwpAQCAtMjkxNSw2ICsyNDg3LDkgQEAgR2V0 T2xkZXN0QWN0aXZlVHJhbnNhY3Rpb25JZCh2b2lkKQogCQlpZiAoIVRyYW5zYWN0aW9uSWRJ c05vcm1hbCh4aWQpKQogCQkJY29udGludWU7CiAKKwkJaWYgKCFhbGxEYnMgJiYgcHJvYy0+ ZGF0YWJhc2VJZCAhPSBNeURhdGFiYXNlSWQpCisJCQljb250aW51ZTsKKwogCQlpZiAoVHJh bnNhY3Rpb25JZFByZWNlZGVzKHhpZCwgb2xkZXN0UnVubmluZ1hpZCkpCiAJCQlvbGRlc3RS dW5uaW5nWGlkID0geGlkOwogCkBAIC0yOTkzLDggKzI1NjgsOCBAQCBHZXRPbGRlc3RTYWZl RGVjb2RpbmdUcmFuc2FjdGlvbklkKGJvb2wgY2F0YWxvZ09ubHkpCiAJICoKIAkgKiBJbiBy ZWNvdmVyeSB3ZSBjYW4ndCBsb3dlciB0aGUgc2FmZSB2YWx1ZSBiZXNpZGVzIHdoYXQgd2Un dmUgY29tcHV0ZWQKIAkgKiBhYm92ZSwgc28gd2UnbGwgaGF2ZSB0byB3YWl0IGEgYml0IGxv bmdlciB0aGVyZS4gV2UgdW5mb3J0dW5hdGVseSBjYW4KLQkgKiAqbm90KiB1c2UgS25vd25B c3NpZ25lZFhpZHNHZXRPbGRlc3RYbWluKCkgc2luY2UgdGhlIEtub3duQXNzaWduZWRYaWRz Ci0JICogbWFjaGluZXJ5IGNhbiBtaXNzIHZhbHVlcyBhbmQgcmV0dXJuIGFuIG9sZGVyIHZh bHVlIHRoYW4gaXMgc2FmZS4KKwkgKiAqbm90KiB1c2Ugb2xkZXN0X3J1bm5pbmdfcHJpbWFy eV94aWQgc2luY2UgdGhlIFhJRCB0cmFja2luZyBtYWNoaW5lcnkKKwkgKiBjYW4gbWlzcyB2 YWx1ZXMgYW5kIHJldHVybiBhbiBvbGRlciB2YWx1ZSB0aGFuIGlzIHNhZmUuCiAJICovCiAJ aWYgKCFyZWNvdmVyeV9pbl9wcm9ncmVzcykKIAl7CkBAIC0zNDEyLDYgKzI5ODcsOSBAQCBH ZXRDdXJyZW50VmlydHVhbFhJRHMoVHJhbnNhY3Rpb25JZCBsaW1pdFhtaW4sIGJvb2wgZXhj bHVkZVhtaW4wLAogICogYnV0IHRoYXQgd291bGQgbm90IGJlIHRydWUgaW4gdGhlIGNhc2Ug b2YgRkFUQUwgZXJyb3JzIGxhZ2dpbmcgaW4gYXJyYXksCiAgKiBidXQgd2UgYWxyZWFkeSBr bm93IHRob3NlIGFyZSBib2d1cyBhbnl3YXksIHNvIHdlIHNraXAgdGhhdCB0ZXN0LgogICoK KyAqIFhYWDogS25vd25Bc3NpZ25lZFhpZHMgaXMgZ29uZSBzbyB0aGUgYWJvdmUgY29tbWVu dCBuZWVkcyB1cGRhdGluZy4gSXMKKyAqIHRoZSBjb2RlIHN0aWxsIGNvcnJlY3Q/IEkgdGhp bmsgc28gYnV0IG5lZWQgdG8gZG91YmxlLWNoZWNrLgorICoKICAqIElmIGRiT2lkIGlzIHZh bGlkIHdlIHNraXAgYmFja2VuZHMgYXR0YWNoZWQgdG8gb3RoZXIgZGF0YWJhc2VzLgogICoK ICAqIEJlIGNhcmVmdWwgdG8gKm5vdCogcGZyZWUgdGhlIHJlc3VsdCBmcm9tIHRoaXMgZnVu Y3Rpb24uIFdlIHJldXNlCkBAIC00MDgzLDE0ICszNjYxLDE0IEBAIHN0YXRpYyB2b2lkCiBE aXNwbGF5WGlkQ2FjaGUodm9pZCkKIHsKIAlmcHJpbnRmKHN0ZGVyciwKLQkJCSJYaWRDYWNo ZTogeG1pbjogJWxkLCBrbm93bjogJWxkLCBteXhhY3Q6ICVsZCwgbGF0ZXN0OiAlbGQsIG1h aW54aWQ6ICVsZCwgY2hpbGR4aWQ6ICVsZCwga25vd25hc3NpZ25lZDogJWxkLCBub29mbG86 ICVsZCwgc2xvdzogJWxkXG4iLAorCQkJIlhpZENhY2hlOiB4bWluOiAlbGQsIGtub3duOiAl bGQsIG15eGFjdDogJWxkLCBsYXRlc3Q6ICVsZCwgbWFpbnhpZDogJWxkLCBjaGlsZHhpZDog JWxkLCBkdXJpbmdfcmVjb3Zlcnk6ICVsZCwgbm9vZmxvOiAlbGQsIHNsb3c6ICVsZFxuIiwK IAkJCXhjX2J5X3JlY2VudF94bWluLAogCQkJeGNfYnlfa25vd25feGFjdCwKIAkJCXhjX2J5 X215X3hhY3QsCiAJCQl4Y19ieV9sYXRlc3RfeGlkLAogCQkJeGNfYnlfbWFpbl94aWQsCiAJ CQl4Y19ieV9jaGlsZF94aWQsCi0JCQl4Y19ieV9rbm93bl9hc3NpZ25lZCwKKwkJCXhjX2R1 cmluZ19yZWNvdmVyeSwKIAkJCXhjX25vX292ZXJmbG93LAogCQkJeGNfc2xvd19hbnN3ZXIp OwogfQpAQCAtNDMzNyw2MSArMzkxNSw2IEBAIEZ1bGxYaWRSZWxhdGl2ZVRvKEZ1bGxUcmFu c2FjdGlvbklkIHJlbCwgVHJhbnNhY3Rpb25JZCB4aWQpCiB9CiAKIAotLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoJCUtub3duQXNzaWdu ZWRUcmFuc2FjdGlvbklkcyBzdWItbW9kdWxlCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotLyoKLSAqIEluIEhvdCBTdGFuZGJ5 IG1vZGUsIHdlIG1haW50YWluIGEgbGlzdCBvZiB0cmFuc2FjdGlvbnMgdGhhdCBhcmUgKG9y IHdlcmUpCi0gKiBydW5uaW5nIG9uIHRoZSBwcmltYXJ5IGF0IHRoZSBjdXJyZW50IHBvaW50 IGluIFdBTC4gIFRoZXNlIFhJRHMgbXVzdCBiZQotICogdHJlYXRlZCBhcyBydW5uaW5nIGJ5 IHN0YW5kYnkgdHJhbnNhY3Rpb25zLCBldmVuIHRob3VnaCB0aGV5IGFyZSBub3QgaW4KLSAq IHRoZSBzdGFuZGJ5IHNlcnZlcidzIFBHUFJPQyBhcnJheS4KLSAqCi0gKiBXZSByZWNvcmQg YWxsIFhJRHMgdGhhdCB3ZSBrbm93IGhhdmUgYmVlbiBhc3NpZ25lZC4gIFRoYXQgaW5jbHVk ZXMgYWxsIHRoZQotICogWElEcyBzZWVuIGluIFdBTCByZWNvcmRzLCBwbHVzIGFsbCB1bm9i c2VydmVkIFhJRHMgdGhhdCB3ZSBjYW4gZGVkdWNlIGhhdmUKLSAqIGJlZW4gYXNzaWduZWQu ICBXZSBjYW4gZGVkdWNlIHRoZSBleGlzdGVuY2Ugb2YgdW5vYnNlcnZlZCBYSURzIGJlY2F1 c2Ugd2UKLSAqIGtub3cgWElEcyBhcmUgYXNzaWduZWQgaW4gc2VxdWVuY2UsIHdpdGggbm8g Z2Fwcy4gIFRoZSBLbm93bkFzc2lnbmVkWGlkcwotICogbGlzdCBleHBhbmRzIGFzIG5ldyBY SURzIGFyZSBvYnNlcnZlZCBvciBpbmZlcnJlZCwgYW5kIGNvbnRyYWN0cyB3aGVuCi0gKiB0 cmFuc2FjdGlvbiBjb21wbGV0aW9uIHJlY29yZHMgYXJyaXZlLgotICoKLSAqIER1cmluZyBo b3Qgc3RhbmRieSB3ZSBkbyBub3QgZnJldCB0b28gbXVjaCBhYm91dCB0aGUgZGlzdGluY3Rp b24gYmV0d2VlbgotICogdG9wLWxldmVsIFhJRHMgYW5kIHN1YnRyYW5zYWN0aW9uIFhJRHMu IFdlIHN0b3JlIGJvdGggdG9nZXRoZXIgaW4gdGhlCi0gKiBLbm93bkFzc2lnbmVkWGlkcyBs aXN0LiAgSW4gYmFja2VuZHMsIHRoaXMgaXMgY29waWVkIGludG8gc25hcHNob3RzIGluCi0g KiBHZXRTbmFwc2hvdERhdGEoKSwgdGFraW5nIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0 IFhpZEluTVZDQ1NuYXBzaG90KCkKLSAqIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgZGlzdGlu Y3Rpb24gZWl0aGVyLiAgU3VidHJhbnNhY3Rpb24gWElEcyBhcmUKLSAqIGVmZmVjdGl2ZWx5 IHRyZWF0ZWQgYXMgdG9wLWxldmVsIFhJRHMgYW5kIGluIHRoZSB0eXBpY2FsIGNhc2UgcGdf c3VidHJhbnMKLSAqIGxpbmtzIGFyZSAqbm90KiBtYWludGFpbmVkICh3aGljaCBkb2VzIG5v dCBhZmZlY3QgdmlzaWJpbGl0eSkuCi0gKgotICogV2UgaGF2ZSByb29tIGluIEtub3duQXNz aWduZWRYaWRzIGFuZCBpbiBzbmFwc2hvdHMgdG8gaG9sZCBtYXhQcm9jcyAqCi0gKiAoMSAr IFBHUFJPQ19NQVhfQ0FDSEVEX1NVQlhJRFMpIFhJRHMsIHNvIGV2ZXJ5IHByaW1hcnkgdHJh bnNhY3Rpb24gbXVzdAotICogcmVwb3J0IGl0cyBzdWJ0cmFuc2FjdGlvbiBYSURzIGluIGEg V0FMIFhMT0dfWEFDVF9BU1NJR05NRU5UIHJlY29yZCBhdAotICogbGVhc3QgZXZlcnkgUEdQ Uk9DX01BWF9DQUNIRURfU1VCWElEUy4gIFdoZW4gd2UgcmVjZWl2ZSBvbmUgb2YgdGhlc2UK LSAqIHJlY29yZHMsIHdlIG1hcmsgdGhlIHN1YlhJRHMgYXMgY2hpbGRyZW4gb2YgdGhlIHRv cCBYSUQgaW4gcGdfc3VidHJhbnMsCi0gKiBhbmQgdGhlbiByZW1vdmUgdGhlbSBmcm9tIEtu b3duQXNzaWduZWRYaWRzLiAgVGhpcyBwcmV2ZW50cyBvdmVyZmxvdyBvZgotICogS25vd25B c3NpZ25lZFhpZHMgYW5kIHNuYXBzaG90cywgYXQgdGhlIGNvc3QgdGhhdCBzdGF0dXMgY2hl Y2tzIGZvciB0aGVzZQotICogc3ViWElEcyB3aWxsIHRha2UgYSBzbG93ZXIgcGF0aCB0aHJv dWdoIFRyYW5zYWN0aW9uSWRJc0luUHJvZ3Jlc3MoKS4KLSAqIFRoaXMgbWVhbnMgdGhhdCBL bm93bkFzc2lnbmVkWGlkcyBpcyBub3QgbmVjZXNzYXJpbHkgY29tcGxldGUgZm9yIHN1YlhJ RHMsCi0gKiB0aG91Z2ggaXQgc2hvdWxkIGJlIGNvbXBsZXRlIGZvciB0b3AtbGV2ZWwgWElE czsgdGhpcyBpcyB0aGUgc2FtZSBzaXR1YXRpb24KLSAqIHRoYXQgaG9sZHMgd2l0aCByZXNw ZWN0IHRvIHRoZSBQR1BST0MgZW50cmllcyBpbiBub3JtYWwgcnVubmluZy4KLSAqCi0gKiBX aGVuIHdlIHRocm93IGF3YXkgc3ViWElEcyBmcm9tIEtub3duQXNzaWduZWRYaWRzLCB3ZSBu ZWVkIHRvIGtlZXAgdHJhY2sgb2YKLSAqIHRoYXQsIHNpbWlsYXJseSB0byB0cmFja2luZyBv dmVyZmxvdyBvZiBhIFBHUFJPQydzIHN1YnhpZHMgYXJyYXkuICBXZSBkbwotICogdGhhdCBi eSByZW1lbWJlcmluZyB0aGUgbGFzdE92ZXJmbG93ZWRYaWQsIGllIHRoZSBsYXN0IHRocm93 bi1hd2F5IHN1YlhJRC4KLSAqIEFzIGxvbmcgYXMgdGhhdCBpcyB3aXRoaW4gdGhlIHJhbmdl IG9mIGludGVyZXN0aW5nIFhJRHMsIHdlIGhhdmUgdG8gYXNzdW1lCi0gKiB0aGF0IHN1YlhJ RHMgYXJlIG1pc3NpbmcgZnJvbSBzbmFwc2hvdHMuICAoTm90ZSB0aGF0IHN1YlhJRCBvdmVy ZmxvdyBvY2N1cnMKLSAqIG9uIHByaW1hcnkgd2hlbiA2NXRoIHN1YlhJRCBhcnJpdmVzLCB3 aGVyZWFzIG9uIHN0YW5kYnkgaXQgb2NjdXJzIHdoZW4gNjR0aAotICogc3ViWElEIGFycml2 ZXMgLSB0aGF0IGlzIG5vdCBhbiBlcnJvci4pCi0gKgotICogU2hvdWxkIGEgYmFja2VuZCBv biBwcmltYXJ5IHNvbWVob3cgZGlzYXBwZWFyIGJlZm9yZSBpdCBjYW4gd3JpdGUgYW4gYWJv cnQKLSAqIHJlY29yZCwgdGhlbiB3ZSBqdXN0IGxlYXZlIHRob3NlIFhJRHMgaW4gS25vd25B c3NpZ25lZFhpZHMuIFRoZXkgYWN0dWFsbHkKLSAqIGFib3J0ZWQgYnV0IHdlIHRoaW5rIHRo ZXkgd2VyZSBydW5uaW5nOyB0aGUgZGlzdGluY3Rpb24gaXMgaXJyZWxldmFudAotICogYmVj YXVzZSBlaXRoZXIgd2F5IGFueSBjaGFuZ2VzIGRvbmUgYnkgdGhlIHRyYW5zYWN0aW9uIGFy ZSBub3QgdmlzaWJsZSB0bwotICogYmFja2VuZHMgaW4gdGhlIHN0YW5kYnkuICBXZSBwcnVu ZSBLbm93bkFzc2lnbmVkWGlkcyB3aGVuCi0gKiBYTE9HX1JVTk5JTkdfWEFDVFMgYXJyaXZl cywgdG8gZm9yZXN0YWxsIHBvc3NpYmxlIG92ZXJmbG93IG9mIHRoZQotICogYXJyYXkgZHVl IHRvIHN1Y2ggZGVhZCBYSURzLgotICovCi0KIC8qCiAgKiBSZWNvcmRLbm93bkFzc2lnbmVk VHJhbnNhY3Rpb25JZHMKICAqCQlSZWNvcmQgdGhlIGdpdmVuIFhJRCBpbiBLbm93bkFzc2ln bmVkWGlkcywgYXMgd2VsbCBhcyBhbnkgcHJlY2VkaW5nCkBAIC00NDA2LDcgKzM5MjksNyBA QCBGdWxsWGlkUmVsYXRpdmVUbyhGdWxsVHJhbnNhY3Rpb25JZCByZWwsIFRyYW5zYWN0aW9u SWQgeGlkKQogdm9pZAogUmVjb3JkS25vd25Bc3NpZ25lZFRyYW5zYWN0aW9uSWRzKFRyYW5z YWN0aW9uSWQgeGlkKQogewotCUFzc2VydChzdGFuZGJ5U3RhdGUgPj0gU1RBTkRCWV9JTklU SUFMSVpFRCk7CisJQXNzZXJ0KEluSG90U3RhbmRieSk7CiAJQXNzZXJ0KFRyYW5zYWN0aW9u SWRJc1ZhbGlkKHhpZCkpOwogCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChsYXRlc3RP YnNlcnZlZFhpZCkpOwogCkBAIC00NDI0LDM4ICszOTQ3LDE5IEBAIFJlY29yZEtub3duQXNz aWduZWRUcmFuc2FjdGlvbklkcyhUcmFuc2FjdGlvbklkIHhpZCkKIAogCQkvKgogCQkgKiBF eHRlbmQgc3VidHJhbnMgbGlrZSB3ZSBkbyBpbiBHZXROZXdUcmFuc2FjdGlvbklkKCkgZHVy aW5nIG5vcm1hbAotCQkgKiBvcGVyYXRpb24gdXNpbmcgaW5kaXZpZHVhbCBleHRlbmQgc3Rl cHMuIE5vdGUgdGhhdCB3ZSBkbyBub3QgbmVlZAotCQkgKiB0byBleHRlbmQgY2xvZyBzaW5j ZSBpdHMgZXh0ZW5zaW9ucyBhcmUgV0FMIGxvZ2dlZC4KLQkJICoKLQkJICogVGhpcyBwYXJ0 IGhhcyB0byBiZSBkb25lIHJlZ2FyZGxlc3Mgb2Ygc3RhbmRieVN0YXRlIHNpbmNlIHdlCi0J CSAqIGltbWVkaWF0ZWx5IHN0YXJ0IGFzc2lnbmluZyBzdWJ0cmFuc2FjdGlvbnMgdG8gdGhl aXIgdG9wbGV2ZWwKLQkJICogdHJhbnNhY3Rpb25zLgorCQkgKiBvcGVyYXRpb24gdXNpbmcg aW5kaXZpZHVhbCBleHRlbmQgc3RlcHMuIEFuZCBDU04gbG9nLCB0b28uIE5vdGUKKwkJICog dGhhdCB3ZSBkbyBub3QgbmVlZCB0byBleHRlbmQgY2xvZyBzaW5jZSBpdHMgZXh0ZW5zaW9u cyBhcmUgV0FMCisJCSAqIGxvZ2dlZC4KIAkJICovCiAJCW5leHRfZXhwZWN0ZWRfeGlkID0g bGF0ZXN0T2JzZXJ2ZWRYaWQ7CiAJCXdoaWxlIChUcmFuc2FjdGlvbklkUHJlY2VkZXMobmV4 dF9leHBlY3RlZF94aWQsIHhpZCkpCiAJCXsKIAkJCVRyYW5zYWN0aW9uSWRBZHZhbmNlKG5l eHRfZXhwZWN0ZWRfeGlkKTsKIAkJCUV4dGVuZFNVQlRSQU5TKG5leHRfZXhwZWN0ZWRfeGlk KTsKKwkJCUV4dGVuZENTTkxvZyhuZXh0X2V4cGVjdGVkX3hpZCk7CiAJCX0KIAkJQXNzZXJ0 KG5leHRfZXhwZWN0ZWRfeGlkID09IHhpZCk7CiAKLQkJLyoKLQkJICogSWYgdGhlIEtub3du QXNzaWduZWRYaWRzIG1hY2hpbmVyeSBpc24ndCB1cCB5ZXQsIHRoZXJlJ3Mgbm90aGluZwot CQkgKiBtb3JlIHRvIGRvIHNpbmNlIHdlIGRvbid0IHRyYWNrIGFzc2lnbmVkIHhpZHMgeWV0 LgotCQkgKi8KLQkJaWYgKHN0YW5kYnlTdGF0ZSA8PSBTVEFOREJZX0lOSVRJQUxJWkVEKQot CQl7Ci0JCQlsYXRlc3RPYnNlcnZlZFhpZCA9IHhpZDsKLQkJCXJldHVybjsKLQkJfQotCi0J CS8qCi0JCSAqIEFkZCAobGF0ZXN0T2JzZXJ2ZWRYaWQsIHhpZF0gb250byB0aGUgS25vd25B c3NpZ25lZFhpZHMgYXJyYXkuCi0JCSAqLwotCQluZXh0X2V4cGVjdGVkX3hpZCA9IGxhdGVz dE9ic2VydmVkWGlkOwotCQlUcmFuc2FjdGlvbklkQWR2YW5jZShuZXh0X2V4cGVjdGVkX3hp ZCk7Ci0JCUtub3duQXNzaWduZWRYaWRzQWRkKG5leHRfZXhwZWN0ZWRfeGlkLCB4aWQsIGZh bHNlKTsKLQogCQkvKgogCQkgKiBOb3cgd2UgY2FuIGFkdmFuY2UgbGF0ZXN0T2JzZXJ2ZWRY aWQKIAkJICovCkBAIC00NDY3LDc4MSArMzk3MSw2MSBAQCBSZWNvcmRLbm93bkFzc2lnbmVk VHJhbnNhY3Rpb25JZHMoVHJhbnNhY3Rpb25JZCB4aWQpCiB9CiAKIC8qCi0gKiBFeHBpcmVU cmVlS25vd25Bc3NpZ25lZFRyYW5zYWN0aW9uSWRzCi0gKgkJUmVtb3ZlIHRoZSBnaXZlbiBY SURzIGZyb20gS25vd25Bc3NpZ25lZFhpZHMuCisgKiBQcm9jQXJyYXlSZWNvdmVyeUVuZFRy YW5zYWN0aW9uCisgKgorICogQ2FsbGVkIGR1cmluZyByZWNvdmVyeSBpbiBhbmFsb2d5IHdp dGggYW5kIGluIHBsYWNlIG9mCisgKiBQcm9jQXJyYXlFbmRUcmFuc2FjdGlvbigpLiBUaGUg dHJhbnNhY3Rpb24gYmVjb21lcyB2aXNpYmxlIHRvIGFueSBuZXcKKyAqIHNuYXBzaG90cyB0 YWtlbiBhZnRlciB0aGlzLiAnbWF4X3hpZCcgaXMgdGhlIGhpZ2hlc3QgKHN1YilYSUQgb2Yg dGhlCisgKiBjb21taXR0ZWQgdHJhbnNhY3Rpb24sIGFuZCAnbHNuJyBpcyBMU04gb2YgdGhl IGNvbW1pdCByZWNvcmQuCiAgKgotICogQ2FsbGVkIGR1cmluZyByZWNvdmVyeSBpbiBhbmFs b2d5IHdpdGggYW5kIGluIHBsYWNlIG9mIFByb2NBcnJheUVuZFRyYW5zYWN0aW9uKCkKKyAq IFRoZSB0cmFuc2FjdGlvbiBhbmQgYWxsIGl0cyBzdWJ0cmFuc2FjdGlvbnMgaGF2ZSBiZWVu IGFscmVhZHkgbWFya2VkIGFzCisgKiBjb21taXR0ZWQgaW4gdGhlIENMT0cgYW5kIGluIHRo ZSBDU05MT0cuCiAgKi8KIHZvaWQKLUV4cGlyZVRyZWVLbm93bkFzc2lnbmVkVHJhbnNhY3Rp b25JZHMoVHJhbnNhY3Rpb25JZCB4aWQsIGludCBuc3VieGlkcywKLQkJCQkJCQkJCSAgVHJh bnNhY3Rpb25JZCAqc3VieGlkcywgVHJhbnNhY3Rpb25JZCBtYXhfeGlkKQorUHJvY0FycmF5 UmVjb3ZlcnlFbmRUcmFuc2FjdGlvbihUcmFuc2FjdGlvbklkIG1heF94aWQsIFhMb2dSZWNQ dHIgbHNuKQogewotCUFzc2VydChzdGFuZGJ5U3RhdGUgPj0gU1RBTkRCWV9JTklUSUFMSVpF RCk7CisJVHJhbnNhY3Rpb25JZCBvbGRlc3RfcnVubmluZ19wcmltYXJ5X3hpZDsKKworCUFz c2VydChJbkhvdFN0YW5kYnkpOworCisJLyoKKwkgKiBJZiB0aGlzIHdhcyB0aGUgdGhlIG9s ZGVzdCBYSUQgdGhhdCB3YXMgc3RpbGwgcnVubmluZywgYWR2YW5jZSBpdC4KKwkgKiBUaGlz IGlzIGltcG9ydGFudCBmb3IgYWR2YW5jaW5nIHRoZSBnbG9iYWwgeG1pbiwgd2hpY2ggYXZv aWRzCisJICogdW5uZWNlc3NhcnkgcmVjb3ZlcnkgY29uZmxpY3RzCisJICoKKwkgKiBObyBs b2NraW5nIHJlcXVpcmVkIGJlY2F1c2UgdGhpcyBydW5zIGluIHRoZSBzdGFydHVwIHByb2Nl c3MuCisJICoKKwkgKiBYWFg6IHRoZSBjYWxsZXIgYWN0dWFsbHkgaGFzIGEgbGlzdCBvZiBY SURzIHRoYXQganVzdCBjb21taXR0ZWQuIFdlCisJICogY291bGQgc2F2ZSBzb21lIGNsb2cg bG9va3VwcyBieSB0YWtpbmcgYWR2YW50YWdlIG9mIHRoYXQgbGlzdC4KKwkgKi8KKwlvbGRl c3RfcnVubmluZ19wcmltYXJ5X3hpZCA9IHByb2NBcnJheS0+b2xkZXN0X3J1bm5pbmdfcHJp bWFyeV94aWQ7CisJd2hpbGUgKG9sZGVzdF9ydW5uaW5nX3ByaW1hcnlfeGlkIDwgbWF4X3hp ZCkKKwl7CisJCWlmICghVHJhbnNhY3Rpb25JZERpZENvbW1pdChvbGRlc3RfcnVubmluZ19w cmltYXJ5X3hpZCkgJiYKKwkJCSFUcmFuc2FjdGlvbklkRGlkQWJvcnQob2xkZXN0X3J1bm5p bmdfcHJpbWFyeV94aWQpKQorCQl7CisJCQlicmVhazsKKwkJfQorCQlUcmFuc2FjdGlvbklk QWR2YW5jZShvbGRlc3RfcnVubmluZ19wcmltYXJ5X3hpZCk7CisJfQorCWlmIChtYXhfeGlk ID09IG9sZGVzdF9ydW5uaW5nX3ByaW1hcnlfeGlkKQorCQlUcmFuc2FjdGlvbklkQWR2YW5j ZShvbGRlc3RfcnVubmluZ19wcmltYXJ5X3hpZCk7CiAKIAkvKgogCSAqIFVzZXMgc2FtZSBs b2NraW5nIGFzIHRyYW5zYWN0aW9uIGNvbW1pdAogCSAqLwogCUxXTG9ja0FjcXVpcmUoUHJv Y0FycmF5TG9jaywgTFdfRVhDTFVTSVZFKTsKIAotCUtub3duQXNzaWduZWRYaWRzUmVtb3Zl VHJlZSh4aWQsIG5zdWJ4aWRzLCBzdWJ4aWRzKTsKLQogCS8qIEFzIGluIFByb2NBcnJheUVu ZFRyYW5zYWN0aW9uLCBhZHZhbmNlIGxhdGVzdENvbXBsZXRlZFhpZCAqLwogCU1haW50YWlu TGF0ZXN0Q29tcGxldGVkWGlkUmVjb3ZlcnkobWF4X3hpZCk7CiAKIAkvKiAuLi4gYW5kIHhh Y3RDb21wbGV0aW9uQ291bnQgKi8KIAlUcmFuc2FtVmFyaWFibGVzLT54YWN0Q29tcGxldGlv bkNvdW50Kys7CiAKLQlMV0xvY2tSZWxlYXNlKFByb2NBcnJheUxvY2spOwotfQotCi0vKgot ICogRXhwaXJlQWxsS25vd25Bc3NpZ25lZFRyYW5zYWN0aW9uSWRzCi0gKgkJUmVtb3ZlIGFs bCBlbnRyaWVzIGluIEtub3duQXNzaWduZWRYaWRzIGFuZCByZXNldCBsYXN0T3ZlcmZsb3dl ZFhpZC4KLSAqLwotdm9pZAotRXhwaXJlQWxsS25vd25Bc3NpZ25lZFRyYW5zYWN0aW9uSWRz KHZvaWQpCi17Ci0JTFdMb2NrQWNxdWlyZShQcm9jQXJyYXlMb2NrLCBMV19FWENMVVNJVkUp OwotCUtub3duQXNzaWduZWRYaWRzUmVtb3ZlUHJlY2VkaW5nKEludmFsaWRUcmFuc2FjdGlv bklkKTsKLQotCS8qCi0JICogUmVzZXQgbGFzdE92ZXJmbG93ZWRYaWQuICBDdXJyZW50bHks IGxhc3RPdmVyZmxvd2VkWGlkIGhhcyBubyB1c2UgYWZ0ZXIKLQkgKiB0aGUgY2FsbCBvZiB0 aGlzIGZ1bmN0aW9uLiAgQnV0IGRvIHRoaXMgZm9yIHVuaWZpY2F0aW9uIHdpdGggd2hhdAot CSAqIEV4cGlyZU9sZEtub3duQXNzaWduZWRUcmFuc2FjdGlvbklkcygpIGRvLgotCSAqLwot CXByb2NBcnJheS0+bGFzdE92ZXJmbG93ZWRYaWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsK LQlMV0xvY2tSZWxlYXNlKFByb2NBcnJheUxvY2spOwotfQotCi0vKgotICogRXhwaXJlT2xk S25vd25Bc3NpZ25lZFRyYW5zYWN0aW9uSWRzCi0gKgkJUmVtb3ZlIEtub3duQXNzaWduZWRY aWRzIGVudHJpZXMgcHJlY2VkaW5nIHRoZSBnaXZlbiBYSUQgYW5kCi0gKgkJcG90ZW50aWFs bHkgcmVzZXQgbGFzdE92ZXJmbG93ZWRYaWQuCi0gKi8KLXZvaWQKLUV4cGlyZU9sZEtub3du QXNzaWduZWRUcmFuc2FjdGlvbklkcyhUcmFuc2FjdGlvbklkIHhpZCkKLXsKLQlMV0xvY2tB Y3F1aXJlKFByb2NBcnJheUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkvKgotCSAqIFJlc2V0 IGxhc3RPdmVyZmxvd2VkWGlkIGlmIHdlIGtub3cgYWxsIHRyYW5zYWN0aW9ucyB0aGF0IGhh dmUgYmVlbgotCSAqIHBvc3NpYmx5IHJ1bm5pbmcgYXJlIGJlaW5nIGdvbmUuICBOb3QgZG9p bmcgc28gY291bGQgY2F1c2UgYW4gaW5jb3JyZWN0Ci0JICogbGFzdE92ZXJmbG93ZWRYaWQg dmFsdWUsIHdoaWNoIG1ha2VzIGV4dHJhIHNuYXBzaG90cyBiZSBtYXJrZWQgYXMKLQkgKiBz dWJvdmVyZmxvd2VkLgotCSAqLwotCWlmIChUcmFuc2FjdGlvbklkUHJlY2VkZXMocHJvY0Fy cmF5LT5sYXN0T3ZlcmZsb3dlZFhpZCwgeGlkKSkKLQkJcHJvY0FycmF5LT5sYXN0T3ZlcmZs b3dlZFhpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwotCUtub3duQXNzaWduZWRYaWRzUmVt b3ZlUHJlY2VkaW5nKHhpZCk7Ci0JTFdMb2NrUmVsZWFzZShQcm9jQXJyYXlMb2NrKTsKLX0K LQotLyoKLSAqIEtub3duQXNzaWduZWRUcmFuc2FjdGlvbklkc0lkbGVNYWludGVuYW5jZQot ICoJCU9wcG9ydHVuaXN0aWNhbGx5IGRvIG1haW50ZW5hbmNlIHdvcmsgd2hlbiB0aGUgc3Rh cnR1cCBwcm9jZXNzCi0gKgkJaXMgYWJvdXQgdG8gZ28gaWRsZS4KLSAqLwotdm9pZAotS25v d25Bc3NpZ25lZFRyYW5zYWN0aW9uSWRzSWRsZU1haW50ZW5hbmNlKHZvaWQpCi17Ci0JS25v d25Bc3NpZ25lZFhpZHNDb21wcmVzcyhLQVhfU1RBUlRVUF9QUk9DRVNTX0lETEUsIGZhbHNl KTsKLX0KLQotCi0vKgotICogUHJpdmF0ZSBtb2R1bGUgZnVuY3Rpb25zIHRvIG1hbmlwdWxh dGUgS25vd25Bc3NpZ25lZFhpZHMKLSAqCi0gKiBUaGVyZSBhcmUgNSBtYWluIHVzZXMgb2Yg dGhlIEtub3duQXNzaWduZWRYaWRzIGRhdGEgc3RydWN0dXJlOgotICoKLSAqCSogYmFja2Vu ZHMgdGFraW5nIHNuYXBzaG90cyAtIGFsbCB2YWxpZCBYSURzIG5lZWQgdG8gYmUgY29waWVk IG91dAotICoJKiBiYWNrZW5kcyBzZWVraW5nIHRvIGRldGVybWluZSBwcmVzZW5jZSBvZiBh IHNwZWNpZmljIFhJRAotICoJKiBzdGFydHVwIHByb2Nlc3MgYWRkaW5nIG5ldyBrbm93bi1h c3NpZ25lZCBYSURzCi0gKgkqIHN0YXJ0dXAgcHJvY2VzcyByZW1vdmluZyBzcGVjaWZpYyBY SURzIGFzIHRyYW5zYWN0aW9ucyBlbmQKLSAqCSogc3RhcnR1cCBwcm9jZXNzIHBydW5pbmcg YXJyYXkgd2hlbiBzcGVjaWFsIFdBTCByZWNvcmRzIGFycml2ZQotICoKLSAqIFRoaXMgZGF0 YSBzdHJ1Y3R1cmUgaXMga25vd24gdG8gYmUgYSBob3Qgc3BvdCBkdXJpbmcgSG90IFN0YW5k YnksIHNvIHdlCi0gKiBnbyB0byBzb21lIGxlbmd0aHMgdG8gbWFrZSB0aGVzZSBvcGVyYXRp b25zIGFzIGVmZmljaWVudCBhbmQgYXMgY29uY3VycmVudAotICogYXMgcG9zc2libGUuCi0g KgotICogVGhlIFhJRHMgYXJlIHN0b3JlZCBpbiBhbiBhcnJheSBpbiBzb3J0ZWQgb3JkZXIg LS0tIFRyYW5zYWN0aW9uSWRQcmVjZWRlcwotICogb3JkZXIsIHRvIGJlIGV4YWN0IC0tLSB0 byBhbGxvdyBiaW5hcnkgc2VhcmNoIGZvciBzcGVjaWZpYyBYSURzLiAgTm90ZToKLSAqIGlu IGdlbmVyYWwgVHJhbnNhY3Rpb25JZFByZWNlZGVzIHdvdWxkIG5vdCBwcm92aWRlIGEgdG90 YWwgb3JkZXIsIGJ1dAotICogd2Uga25vdyB0aGF0IHRoZSBlbnRyaWVzIHByZXNlbnQgYXQg YW55IGluc3RhbnQgc2hvdWxkIG5vdCBleHRlbmQgYWNyb3NzCi0gKiBhIGxhcmdlIGVub3Vn aCBmcmFjdGlvbiBvZiBYSUQgc3BhY2UgdG8gd3JhcCBhcm91bmQgKHRoZSBwcmltYXJ5IHdv dWxkCi0gKiBzaHV0IGRvd24gZm9yIGZlYXIgb2YgWElEIHdyYXAgbG9uZyBiZWZvcmUgdGhh dCBoYXBwZW5zKS4gIFNvIGl0J3MgT0sgdG8KLSAqIHVzZSBUcmFuc2FjdGlvbklkUHJlY2Vk ZXMgYXMgYSBiaW5hcnktc2VhcmNoIGNvbXBhcmF0b3IuCi0gKgotICogSXQncyBjaGVhcCB0 byBtYWludGFpbiB0aGUgc29ydGVkbmVzcyBkdXJpbmcgaW5zZXJ0aW9ucywgc2luY2UgbmV3 IGtub3duCi0gKiBYSURzIGFyZSBhbHdheXMgcmVwb3J0ZWQgaW4gWElEIG9yZGVyOyB3ZSBq dXN0IGFwcGVuZCB0aGVtIGF0IHRoZSByaWdodC4KLSAqCi0gKiBUbyBrZWVwIGluZGl2aWR1 YWwgZGVsZXRpb25zIGNoZWFwLCB3ZSBuZWVkIHRvIGFsbG93IGdhcHMgaW4gdGhlIGFycmF5 LgotICogVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBtYXJraW5nIGFycmF5IGVsZW1lbnRzIGFz IHZhbGlkIG9yIGludmFsaWQgdXNpbmcKLSAqIHRoZSBwYXJhbGxlbCBib29sZWFuIGFycmF5 IEtub3duQXNzaWduZWRYaWRzVmFsaWRbXS4gIEEgZGVsZXRpb24gaXMgZG9uZQotICogYnkg c2V0dGluZyBLbm93bkFzc2lnbmVkWGlkc1ZhbGlkW2ldIHRvIGZhbHNlLCAqd2l0aG91dCog Y2xlYXJpbmcgdGhlCi0gKiBYSUQgZW50cnkgaXRzZWxmLiAgVGhpcyBwcmVzZXJ2ZXMgdGhl IHByb3BlcnR5IHRoYXQgdGhlIFhJRCBlbnRyaWVzIGFyZQotICogc29ydGVkLCBzbyB3ZSBj YW4gZG8gYmluYXJ5IHNlYXJjaGVzIGVhc2lseS4gIFBlcmlvZGljYWxseSB3ZSBjb21wcmVz cwotICogb3V0IHRoZSB1bnVzZWQgZW50cmllczsgdGhhdCdzIG11Y2ggY2hlYXBlciB0aGFu IGhhdmluZyB0byBjb21wcmVzcyB0aGUKLSAqIGFycmF5IGltbWVkaWF0ZWx5IG9uIGV2ZXJ5 IGRlbGV0aW9uLgotICoKLSAqIFRoZSBhY3R1YWxseSB2YWxpZCBpdGVtcyBpbiBLbm93bkFz c2lnbmVkWGlkc1tdIGFuZCBLbm93bkFzc2lnbmVkWGlkc1ZhbGlkW10KLSAqIGFyZSB0aG9z ZSB3aXRoIGluZGV4ZXMgdGFpbCA8PSBpIDwgaGVhZDsgaXRlbXMgb3V0c2lkZSB0aGlzIHN1 YnNjcmlwdCByYW5nZQotICogaGF2ZSB1bnNwZWNpZmllZCBjb250ZW50cy4gIFdoZW4gaGVh ZCByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGFycmF5LCB3ZQotICogZm9yY2UgY29tcHJlc3Np b24gb2YgdW51c2VkIGVudHJpZXMgcmF0aGVyIHRoYW4gd3JhcHBpbmcgYXJvdW5kLCBzaW5j ZQotICogYWxsb3dpbmcgd3JhcGFyb3VuZCB3b3VsZCBncmVhdGx5IGNvbXBsaWNhdGUgdGhl IHNlYXJjaCBsb2dpYy4gIFdlIG1haW50YWluCi0gKiBhbiBleHBsaWNpdCB0YWlsIHBvaW50 ZXIgc28gdGhhdCBwcnVuaW5nIG9mIG9sZCBYSURzIGNhbiBiZSBkb25lIHdpdGhvdXQKLSAq IGltbWVkaWF0ZWx5IG1vdmluZyB0aGUgYXJyYXkgY29udGVudHMuICBJbiBtb3N0IGNhc2Vz IG9ubHkgYSBzbWFsbCBmcmFjdGlvbgotICogb2YgdGhlIGFycmF5IGNvbnRhaW5zIHZhbGlk IGVudHJpZXMgYXQgYW55IGluc3RhbnQuCi0gKgotICogQWx0aG91Z2ggb25seSB0aGUgc3Rh cnR1cCBwcm9jZXNzIGNhbiBldmVyIGNoYW5nZSB0aGUgS25vd25Bc3NpZ25lZFhpZHMKLSAq IGRhdGEgc3RydWN0dXJlLCB3ZSBzdGlsbCBuZWVkIGludGVybG9ja2luZyBzbyB0aGF0IHN0 YW5kYnkgYmFja2VuZHMgd2lsbAotICogbm90IG9ic2VydmUgaW52YWxpZCBpbnRlcm1lZGlh dGUgc3RhdGVzLiAgVGhlIGNvbnZlbnRpb24gaXMgdGhhdCBiYWNrZW5kcwotICogbXVzdCBo b2xkIHNoYXJlZCBQcm9jQXJyYXlMb2NrIHRvIGV4YW1pbmUgdGhlIGFycmF5LiAgVG8gcmVt b3ZlIFhJRHMgZnJvbQotICogdGhlIGFycmF5LCB0aGUgc3RhcnR1cCBwcm9jZXNzIG11c3Qg aG9sZCBQcm9jQXJyYXlMb2NrIGV4Y2x1c2l2ZWx5LCBmb3IKLSAqIHRoZSB1c3VhbCB0cmFu c2FjdGlvbmFsIHJlYXNvbnMgKGNvbXBhcmUgY29tbWl0L2Fib3J0IG9mIGEgdHJhbnNhY3Rp b24KLSAqIGR1cmluZyBub3JtYWwgcnVubmluZykuICBDb21wcmVzc2luZyB1bnVzZWQgZW50 cmllcyBvdXQgb2YgdGhlIGFycmF5Ci0gKiBsaWtld2lzZSByZXF1aXJlcyBleGNsdXNpdmUg bG9jay4gIFRvIGFkZCBYSURzIHRvIHRoZSBhcnJheSwgd2UganVzdCBpbnNlcnQKLSAqIHRo ZW0gaW50byBzbG90cyB0byB0aGUgcmlnaHQgb2YgdGhlIGhlYWQgcG9pbnRlciBhbmQgdGhl biBhZHZhbmNlIHRoZSBoZWFkCi0gKiBwb2ludGVyLiAgVGhpcyBkb2Vzbid0IHJlcXVpcmUg YW55IGxvY2sgYXQgYWxsLCBidXQgb24gbWFjaGluZXMgd2l0aCB3ZWFrCi0gKiBtZW1vcnkg b3JkZXJpbmcsIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB0aGF0IG90aGVyIHByb2Nlc3NvcnMg c2VlIHRoZSBhcnJheQotICogZWxlbWVudCBjaGFuZ2VzIGJlZm9yZSB0aGV5IHNlZSB0aGUg aGVhZCBwb2ludGVyIGNoYW5nZS4gIFdlIGhhbmRsZSB0aGlzIGJ5Ci0gKiB1c2luZyBtZW1v cnkgYmFycmllcnMgd2hlbiByZWFkaW5nIG9yIHdyaXRpbmcgdGhlIGhlYWQvdGFpbCBwb2lu dGVycyAodW5sZXNzCi0gKiB0aGUgY2FsbGVyIGhvbGRzIFByb2NBcnJheUxvY2sgZXhjbHVz aXZlbHkpLgotICoKLSAqIEFsZ29yaXRobWljIGFuYWx5c2lzOgotICoKLSAqIElmIHdlIGhh dmUgYSBtYXhpbXVtIG9mIE0gc2xvdHMsIHdpdGggTiBYSURzIGN1cnJlbnRseSBzcHJlYWQg YWNyb3NzCi0gKiBTIGVsZW1lbnRzIHRoZW4gd2UgaGF2ZSBOIDw9IFMgPD0gTSBhbHdheXMu Ci0gKgotICoJKiBBZGRpbmcgYSBuZXcgWElEIGlzIE8oMSkgYW5kIG5lZWRzIG5vIGxvY2sg KHVubGVzcyBjb21wcmVzc2lvbiBtdXN0Ci0gKgkJaGFwcGVuKQotICoJKiBDb21wcmVzc2lu ZyB0aGUgYXJyYXkgaXMgTyhTKSBhbmQgcmVxdWlyZXMgZXhjbHVzaXZlIGxvY2sKLSAqCSog UmVtb3ZpbmcgYW4gWElEIGlzIE8obG9nUykgYW5kIHJlcXVpcmVzIGV4Y2x1c2l2ZSBsb2Nr Ci0gKgkqIFRha2luZyBhIHNuYXBzaG90IGlzIE8oUykgYW5kIHJlcXVpcmVzIHNoYXJlZCBs b2NrCi0gKgkqIENoZWNraW5nIGZvciBhbiBYSUQgaXMgTyhsb2dTKSBhbmQgcmVxdWlyZXMg c2hhcmVkIGxvY2sKLSAqCi0gKiBJbiBjb21wYXJpc29uLCB1c2luZyBhIGhhc2ggdGFibGUg Zm9yIEtub3duQXNzaWduZWRYaWRzIHdvdWxkIG1lYW4gdGhhdAotICogdGFraW5nIHNuYXBz aG90cyB3b3VsZCBiZSBPKE0pLiBJZiB3ZSBjYW4gbWFpbnRhaW4gUyA8PCBNIHRoZW4gdGhl Ci0gKiBzb3J0ZWQgYXJyYXkgdGVjaG5pcXVlIHdpbGwgZGVsaXZlciBzaWduaWZpY2FudGx5 IGZhc3RlciBzbmFwc2hvdHMuCi0gKiBJZiB3ZSB0cnkgdG8ga2VlcCBTIHRvbyBzbWFsbCB0 aGVuIHdlIHdpbGwgc3BlbmQgdG9vIG11Y2ggdGltZSBjb21wcmVzc2luZywKLSAqIHNvIHRo ZXJlIGlzIGFuIG9wdGltYWwgcG9pbnQgZm9yIGFueSB3b3JrbG9hZCBtaXguIFdlIHVzZSBh IGhldXJpc3RpYyB0bwotICogZGVjaWRlIHdoZW4gdG8gY29tcHJlc3MgdGhlIGFycmF5LCB0 aG91Z2ggdHJpbW1pbmcgYWxzbyBoZWxwcyByZWR1Y2UKLSAqIGZyZXF1ZW5jeSBvZiBjb21w cmVzc2luZy4gVGhlIGhldXJpc3RpYyByZXF1aXJlcyB1cyB0byB0cmFjayB0aGUgbnVtYmVy IG9mCi0gKiBjdXJyZW50bHkgdmFsaWQgWElEcyBpbiB0aGUgYXJyYXkgKE4pLiAgRXhjZXB0 IGluIHNwZWNpYWwgY2FzZXMsIHdlJ2xsCi0gKiBjb21wcmVzcyB3aGVuIFMgPj0gMk4uICBC b3VuZGluZyBTIGF0IDJOIGluIHR1cm4gYm91bmRzIHRoZSB0aW1lIGZvcgotICogdGFraW5n IGEgc25hcHNob3QgdG8gYmUgTyhOKSwgd2hpY2ggaXQgd291bGQgaGF2ZSB0byBiZSBhbnl3 YXkuCi0gKi8KLQotCi0vKgotICogQ29tcHJlc3MgS25vd25Bc3NpZ25lZFhpZHMgYnkgc2hp ZnRpbmcgdmFsaWQgZGF0YSBkb3duIHRvIHRoZSBzdGFydCBvZiB0aGUKLSAqIGFycmF5LCBy ZW1vdmluZyBhbnkgZ2Fwcy4KLSAqCi0gKiBBIGNvbXByZXNzaW9uIHN0ZXAgaXMgZm9yY2Vk IGlmICJyZWFzb24iIGlzIEtBWF9OT19TUEFDRSwgb3RoZXJ3aXNlCi0gKiB3ZSBkbyBpdCBv bmx5IGlmIGEgaGV1cmlzdGljIGluZGljYXRlcyBpdCdzIGEgZ29vZCB0aW1lIHRvIGRvIGl0 LgotICoKLSAqIENvbXByZXNzaW9uIHJlcXVpcmVzIGhvbGRpbmcgUHJvY0FycmF5TG9jayBp biBleGNsdXNpdmUgbW9kZS4KLSAqIENhbGxlciBtdXN0IHBhc3MgaGF2ZUxvY2sgPSB0cnVl IGlmIGl0IGFscmVhZHkgaG9sZHMgdGhlIGxvY2suCi0gKi8KLXN0YXRpYyB2b2lkCi1Lbm93 bkFzc2lnbmVkWGlkc0NvbXByZXNzKEtBWENvbXByZXNzUmVhc29uIHJlYXNvbiwgYm9vbCBo YXZlTG9jaykKLXsKLQlQcm9jQXJyYXlTdHJ1Y3QgKnBBcnJheSA9IHByb2NBcnJheTsKLQlp bnQJCQloZWFkLAotCQkJCXRhaWwsCi0JCQkJbmVsZW1lbnRzOwotCWludAkJCWNvbXByZXNz X2luZGV4OwotCWludAkJCWk7Ci0KLQkvKiBDb3VudGVycyBmb3IgY29tcHJlc3Npb24gaGV1 cmlzdGljcyAqLwotCXN0YXRpYyB1bnNpZ25lZCBpbnQgdHJhbnNhY3Rpb25FbmRzQ291bnRl cjsKLQlzdGF0aWMgVGltZXN0YW1wVHogbGFzdENvbXByZXNzVHM7Ci0KLQkvKiBUdW5pbmcg Y29uc3RhbnRzICovCi0jZGVmaW5lIEtBWF9DT01QUkVTU19GUkVRVUVOQ1kgMTI4CS8qIGlu IHRyYW5zYWN0aW9ucyAqLwotI2RlZmluZSBLQVhfQ09NUFJFU1NfSURMRV9JTlRFUlZBTCAx MDAwIC8qIGluIG1zICovCi0KLQkvKgotCSAqIFNpbmNlIG9ubHkgdGhlIHN0YXJ0dXAgcHJv Y2VzcyBtb2RpZmllcyB0aGUgaGVhZC90YWlsIHBvaW50ZXJzLCB3ZQotCSAqIGRvbid0IG5l ZWQgYSBsb2NrIHRvIHJlYWQgdGhlbSBoZXJlLgotCSAqLwotCWhlYWQgPSBwQXJyYXktPmhl YWRLbm93bkFzc2lnbmVkWGlkczsKLQl0YWlsID0gcEFycmF5LT50YWlsS25vd25Bc3NpZ25l ZFhpZHM7Ci0JbmVsZW1lbnRzID0gaGVhZCAtIHRhaWw7Ci0KLQkvKgotCSAqIElmIHdlIGNh biBjaG9vc2Ugd2hldGhlciB0byBjb21wcmVzcywgdXNlIGEgaGV1cmlzdGljIHRvIGF2b2lk Ci0JICogY29tcHJlc3NpbmcgdG9vIG9mdGVuIG9yIG5vdCBvZnRlbiBlbm91Z2guICAiQ29t cHJlc3MiIGhlcmUgc2ltcGx5Ci0JICogbWVhbnMgbW92aW5nIHRoZSB2YWx1ZXMgdG8gdGhl IGJlZ2lubmluZyBvZiB0aGUgYXJyYXksIHNvIGl0IGlzIG5vdCBhcwotCSAqIGNvbXBsZXgg b3IgY29zdGx5IGFzIHR5cGljYWwgZGF0YSBjb21wcmVzc2lvbiBhbGdvcml0aG1zLgotCSAq LwotCWlmIChuZWxlbWVudHMgPT0gcEFycmF5LT5udW1Lbm93bkFzc2lnbmVkWGlkcykKLQl7 Ci0JCS8qCi0JCSAqIFdoZW4gdGhlcmUgYXJlIG5vIGdhcHMgYmV0d2VlbiBoZWFkIGFuZCB0 YWlsLCBkb24ndCBib3RoZXIgdG8KLQkJICogY29tcHJlc3MsIGV4Y2VwdCBpbiB0aGUgS0FY X05PX1NQQUNFIGNhc2Ugd2hlcmUgd2UgbXVzdCBjb21wcmVzcyB0bwotCQkgKiBjcmVhdGUg c29tZSBzcGFjZSBhZnRlciB0aGUgaGVhZC4KLQkJICovCi0JCWlmIChyZWFzb24gIT0gS0FY X05PX1NQQUNFKQotCQkJcmV0dXJuOwotCX0KLQllbHNlIGlmIChyZWFzb24gPT0gS0FYX1RS QU5TQUNUSU9OX0VORCkKLQl7Ci0JCS8qCi0JCSAqIENvbnNpZGVyIGNvbXByZXNzaW5nIG9u bHkgb25jZSBldmVyeSBzbyBtYW55IGNvbW1pdHMuICBGcmVxdWVuY3kKLQkJICogZGV0ZXJt aW5lZCBieSBiZW5jaG1hcmtzLgotCQkgKi8KLQkJaWYgKCh0cmFuc2FjdGlvbkVuZHNDb3Vu dGVyKyspICUgS0FYX0NPTVBSRVNTX0ZSRVFVRU5DWSAhPSAwKQotCQkJcmV0dXJuOwotCi0J CS8qCi0JCSAqIEZ1cnRoZXJtb3JlLCBjb21wcmVzcyBvbmx5IGlmIHRoZSB1c2VkIHBhcnQg b2YgdGhlIGFycmF5IGlzIGxlc3MKLQkJICogdGhhbiA1MCUgZnVsbCAoc2VlIGNvbW1lbnRz IGFib3ZlKS4KLQkJICovCi0JCWlmIChuZWxlbWVudHMgPCAyICogcEFycmF5LT5udW1Lbm93 bkFzc2lnbmVkWGlkcykKLQkJCXJldHVybjsKLQl9Ci0JZWxzZSBpZiAocmVhc29uID09IEtB WF9TVEFSVFVQX1BST0NFU1NfSURMRSkKLQl7Ci0JCS8qCi0JCSAqIFdlJ3JlIGFib3V0IHRv IGdvIGlkbGUgZm9yIGxhY2sgb2YgbmV3IFdBTCwgc28gd2UgbWlnaHQgYXMgd2VsbAotCQkg KiBjb21wcmVzcy4gIEJ1dCBub3QgdG9vIG9mdGVuLCB0byBhdm9pZCBQcm9jQXJyYXkgbG9j ayBjb250ZW50aW9uCi0JCSAqIHdpdGggcmVhZGVycy4KLQkJICovCi0JCWlmIChsYXN0Q29t cHJlc3NUcyAhPSAwKQotCQl7Ci0JCQlUaW1lc3RhbXBUeiBjb21wcmVzc19hZnRlcjsKLQot CQkJY29tcHJlc3NfYWZ0ZXIgPSBUaW1lc3RhbXBUelBsdXNNaWxsaXNlY29uZHMobGFzdENv bXByZXNzVHMsCi0JCQkJCQkJCQkJCQkJCSBLQVhfQ09NUFJFU1NfSURMRV9JTlRFUlZBTCk7 Ci0JCQlpZiAoR2V0Q3VycmVudFRpbWVzdGFtcCgpIDwgY29tcHJlc3NfYWZ0ZXIpCi0JCQkJ cmV0dXJuOwotCQl9Ci0JfQotCi0JLyogTmVlZCB0byBjb21wcmVzcywgc28gZ2V0IHRoZSBs b2NrIGlmIHdlIGRvbid0IGhhdmUgaXQuICovCi0JaWYgKCFoYXZlTG9jaykKLQkJTFdMb2Nr QWNxdWlyZShQcm9jQXJyYXlMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JLyoKLQkgKiBXZSBj b21wcmVzcyB0aGUgYXJyYXkgYnkgcmVhZGluZyB0aGUgdmFsaWQgdmFsdWVzIGZyb20gdGFp bCB0byBoZWFkLAotCSAqIHJlLWFsaWduaW5nIGRhdGEgdG8gMHRoIGVsZW1lbnQuCi0JICov Ci0JY29tcHJlc3NfaW5kZXggPSAwOwotCWZvciAoaSA9IHRhaWw7IGkgPCBoZWFkOyBpKysp Ci0JewotCQlpZiAoS25vd25Bc3NpZ25lZFhpZHNWYWxpZFtpXSkKLQkJewotCQkJS25vd25B c3NpZ25lZFhpZHNbY29tcHJlc3NfaW5kZXhdID0gS25vd25Bc3NpZ25lZFhpZHNbaV07Ci0J CQlLbm93bkFzc2lnbmVkWGlkc1ZhbGlkW2NvbXByZXNzX2luZGV4XSA9IHRydWU7Ci0JCQlj b21wcmVzc19pbmRleCsrOwotCQl9Ci0JfQotCUFzc2VydChjb21wcmVzc19pbmRleCA9PSBw QXJyYXktPm51bUtub3duQXNzaWduZWRYaWRzKTsKLQotCXBBcnJheS0+dGFpbEtub3duQXNz aWduZWRYaWRzID0gMDsKLQlwQXJyYXktPmhlYWRLbm93bkFzc2lnbmVkWGlkcyA9IGNvbXBy ZXNzX2luZGV4OwotCi0JaWYgKCFoYXZlTG9jaykKLQkJTFdMb2NrUmVsZWFzZShQcm9jQXJy YXlMb2NrKTsKLQotCS8qIFVwZGF0ZSB0aW1lc3RhbXAgZm9yIG1haW50ZW5hbmNlLiAgTm8g bmVlZCB0byBob2xkIGxvY2sgZm9yIHRoaXMuICovCi0JbGFzdENvbXByZXNzVHMgPSBHZXRD dXJyZW50VGltZXN0YW1wKCk7Ci19Ci0KLS8qCi0gKiBBZGQgeGlkcyBpbnRvIEtub3duQXNz aWduZWRYaWRzIGF0IHRoZSBoZWFkIG9mIHRoZSBhcnJheS4KLSAqCi0gKiB4aWRzIGZyb20g ZnJvbV94aWQgdG8gdG9feGlkLCBpbmNsdXNpdmUsIGFyZSBhZGRlZCB0byB0aGUgYXJyYXku Ci0gKgotICogSWYgZXhjbHVzaXZlX2xvY2sgaXMgdHJ1ZSB0aGVuIGNhbGxlciBhbHJlYWR5 IGhvbGRzIFByb2NBcnJheUxvY2sgaW4KLSAqIGV4Y2x1c2l2ZSBtb2RlLCBzbyB3ZSBuZWVk IG5vIGV4dHJhIGxvY2tpbmcgaGVyZS4gIEVsc2UgY2FsbGVyIGhvbGRzIG5vCi0gKiBsb2Nr LCBzbyB3ZSBuZWVkIHRvIGJlIHN1cmUgd2UgbWFpbnRhaW4gc3VmZmljaWVudCBpbnRlcmxv Y2tzIGFnYWluc3QKLSAqIGNvbmN1cnJlbnQgcmVhZGVycy4gIChPbmx5IHRoZSBzdGFydHVw IHByb2Nlc3MgZXZlciBjYWxscyB0aGlzLCBzbyBubyBuZWVkCi0gKiB0byB3b3JyeSBhYm91 dCBjb25jdXJyZW50IHdyaXRlcnMuKQotICovCi1zdGF0aWMgdm9pZAotS25vd25Bc3NpZ25l ZFhpZHNBZGQoVHJhbnNhY3Rpb25JZCBmcm9tX3hpZCwgVHJhbnNhY3Rpb25JZCB0b194aWQs Ci0JCQkJCSBib29sIGV4Y2x1c2l2ZV9sb2NrKQotewotCVByb2NBcnJheVN0cnVjdCAqcEFy cmF5ID0gcHJvY0FycmF5OwotCVRyYW5zYWN0aW9uSWQgbmV4dF94aWQ7Ci0JaW50CQkJaGVh ZCwKLQkJCQl0YWlsOwotCWludAkJCW54aWRzOwotCWludAkJCWk7Ci0KLQlBc3NlcnQoVHJh bnNhY3Rpb25JZFByZWNlZGVzT3JFcXVhbHMoZnJvbV94aWQsIHRvX3hpZCkpOwotCi0JLyoK LQkgKiBDYWxjdWxhdGUgaG93IG1hbnkgYXJyYXkgc2xvdHMgd2UnbGwgbmVlZC4gIE5vcm1h bGx5IHRoaXMgaXMgY2hlYXA7IGluCi0JICogdGhlIHVudXN1YWwgY2FzZSB3aGVyZSB0aGUg WElEcyBjcm9zcyB0aGUgd3JhcCBwb2ludCwgd2UgZG8gaXQgdGhlIGhhcmQKLQkgKiB3YXku Ci0JICovCi0JaWYgKHRvX3hpZCA+PSBmcm9tX3hpZCkKLQkJbnhpZHMgPSB0b194aWQgLSBm cm9tX3hpZCArIDE7Ci0JZWxzZQotCXsKLQkJbnhpZHMgPSAxOwotCQluZXh0X3hpZCA9IGZy b21feGlkOwotCQl3aGlsZSAoVHJhbnNhY3Rpb25JZFByZWNlZGVzKG5leHRfeGlkLCB0b194 aWQpKQotCQl7Ci0JCQlueGlkcysrOwotCQkJVHJhbnNhY3Rpb25JZEFkdmFuY2UobmV4dF94 aWQpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBTaW5jZSBvbmx5IHRoZSBzdGFydHVwIHByb2Nl c3MgbW9kaWZpZXMgdGhlIGhlYWQvdGFpbCBwb2ludGVycywgd2UKLQkgKiBkb24ndCBuZWVk IGEgbG9jayB0byByZWFkIHRoZW0gaGVyZS4KLQkgKi8KLQloZWFkID0gcEFycmF5LT5oZWFk S25vd25Bc3NpZ25lZFhpZHM7Ci0JdGFpbCA9IHBBcnJheS0+dGFpbEtub3duQXNzaWduZWRY aWRzOwotCi0JQXNzZXJ0KGhlYWQgPj0gMCAmJiBoZWFkIDw9IHBBcnJheS0+bWF4S25vd25B c3NpZ25lZFhpZHMpOwotCUFzc2VydCh0YWlsID49IDAgJiYgdGFpbCA8IHBBcnJheS0+bWF4 S25vd25Bc3NpZ25lZFhpZHMpOwotCi0JLyoKLQkgKiBWZXJpZnkgdGhhdCBpbnNlcnRpb25z IG9jY3VyIGluIFRyYW5zYWN0aW9uSWQgc2VxdWVuY2UuICBOb3RlIHRoYXQgZXZlbgotCSAq IGlmIHRoZSBsYXN0IGV4aXN0aW5nIGVsZW1lbnQgaXMgbWFya2VkIGludmFsaWQsIGl0IG11 c3Qgc3RpbGwgaGF2ZSBhCi0JICogY29ycmVjdGx5IHNlcXVlbmNlZCBYSUQgdmFsdWUuCi0J ICovCi0JaWYgKGhlYWQgPiB0YWlsICYmCi0JCVRyYW5zYWN0aW9uSWRGb2xsb3dzT3JFcXVh bHMoS25vd25Bc3NpZ25lZFhpZHNbaGVhZCAtIDFdLCBmcm9tX3hpZCkpCi0JewotCQlLbm93 bkFzc2lnbmVkWGlkc0Rpc3BsYXkoTE9HKTsKLQkJZWxvZyhFUlJPUiwgIm91dC1vZi1vcmRl ciBYSUQgaW5zZXJ0aW9uIGluIEtub3duQXNzaWduZWRYaWRzIik7Ci0JfQotCi0JLyoKLQkg KiBJZiBvdXIgeGlkcyB3b24ndCBmaXQgaW4gdGhlIHJlbWFpbmluZyBzcGFjZSwgY29tcHJl c3Mgb3V0IGZyZWUgc3BhY2UKLQkgKi8KLQlpZiAoaGVhZCArIG54aWRzID4gcEFycmF5LT5t YXhLbm93bkFzc2lnbmVkWGlkcykKLQl7Ci0JCUtub3duQXNzaWduZWRYaWRzQ29tcHJlc3Mo S0FYX05PX1NQQUNFLCBleGNsdXNpdmVfbG9jayk7Ci0KLQkJaGVhZCA9IHBBcnJheS0+aGVh ZEtub3duQXNzaWduZWRYaWRzOwotCQkvKiBub3RlOiB3ZSBubyBsb25nZXIgY2FyZSBhYm91 dCB0aGUgdGFpbCBwb2ludGVyICovCi0KLQkJLyoKLQkJICogSWYgaXQgc3RpbGwgd29uJ3Qg Zml0IHRoZW4gd2UncmUgb3V0IG9mIG1lbW9yeQotCQkgKi8KLQkJaWYgKGhlYWQgKyBueGlk cyA+IHBBcnJheS0+bWF4S25vd25Bc3NpZ25lZFhpZHMpCi0JCQllbG9nKEVSUk9SLCAidG9v IG1hbnkgS25vd25Bc3NpZ25lZFhpZHMiKTsKLQl9Ci0KLQkvKiBOb3cgd2UgY2FuIGluc2Vy dCB0aGUgeGlkcyBpbnRvIHRoZSBzcGFjZSBzdGFydGluZyBhdCBoZWFkICovCi0JbmV4dF94 aWQgPSBmcm9tX3hpZDsKLQlmb3IgKGkgPSAwOyBpIDwgbnhpZHM7IGkrKykKLQl7Ci0JCUtu b3duQXNzaWduZWRYaWRzW2hlYWRdID0gbmV4dF94aWQ7Ci0JCUtub3duQXNzaWduZWRYaWRz VmFsaWRbaGVhZF0gPSB0cnVlOwotCQlUcmFuc2FjdGlvbklkQWR2YW5jZShuZXh0X3hpZCk7 Ci0JCWhlYWQrKzsKLQl9Ci0KLQkvKiBBZGp1c3QgY291bnQgb2YgbnVtYmVyIG9mIHZhbGlk IGVudHJpZXMgKi8KLQlwQXJyYXktPm51bUtub3duQXNzaWduZWRYaWRzICs9IG54aWRzOwot Ci0JLyoKLQkgKiBOb3cgdXBkYXRlIHRoZSBoZWFkIHBvaW50ZXIuICBXZSB1c2UgYSB3cml0 ZSBiYXJyaWVyIHRvIGVuc3VyZSB0aGF0Ci0JICogb3RoZXIgcHJvY2Vzc29ycyBzZWUgdGhl IGFib3ZlIGFycmF5IHVwZGF0ZXMgYmVmb3JlIHRoZXkgc2VlIHRoZSBoZWFkCi0JICogcG9p bnRlciBjaGFuZ2UuICBUaGUgYmFycmllciBpc24ndCByZXF1aXJlZCBpZiB3ZSdyZSBob2xk aW5nCi0JICogUHJvY0FycmF5TG9jayBleGNsdXNpdmVseS4KLQkgKi8KLQlpZiAoIWV4Y2x1 c2l2ZV9sb2NrKQotCQlwZ193cml0ZV9iYXJyaWVyKCk7Ci0KLQlwQXJyYXktPmhlYWRLbm93 bkFzc2lnbmVkWGlkcyA9IGhlYWQ7Ci19Ci0KLS8qCi0gKiBLbm93bkFzc2lnbmVkWGlkc1Nl YXJjaAotICoKLSAqIFNlYXJjaGVzIEtub3duQXNzaWduZWRYaWRzIGZvciBhIHNwZWNpZmlj IHhpZCBhbmQgb3B0aW9uYWxseSByZW1vdmVzIGl0LgotICogUmV0dXJucyB0cnVlIGlmIGl0 IHdhcyBmb3VuZCwgZmFsc2UgaWYgbm90LgotICoKLSAqIENhbGxlciBtdXN0IGhvbGQgUHJv Y0FycmF5TG9jayBpbiBzaGFyZWQgb3IgZXhjbHVzaXZlIG1vZGUuCi0gKiBFeGNsdXNpdmUg bG9jayBtdXN0IGJlIGhlbGQgZm9yIHJlbW92ZSA9IHRydWUuCi0gKi8KLXN0YXRpYyBib29s Ci1Lbm93bkFzc2lnbmVkWGlkc1NlYXJjaChUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCByZW1v dmUpCi17Ci0JUHJvY0FycmF5U3RydWN0ICpwQXJyYXkgPSBwcm9jQXJyYXk7Ci0JaW50CQkJ Zmlyc3QsCi0JCQkJbGFzdDsKLQlpbnQJCQloZWFkOwotCWludAkJCXRhaWw7Ci0JaW50CQkJ cmVzdWx0X2luZGV4ID0gLTE7Ci0KLQl0YWlsID0gcEFycmF5LT50YWlsS25vd25Bc3NpZ25l ZFhpZHM7Ci0JaGVhZCA9IHBBcnJheS0+aGVhZEtub3duQXNzaWduZWRYaWRzOwotCi0JLyoK LQkgKiBPbmx5IHRoZSBzdGFydHVwIHByb2Nlc3MgcmVtb3ZlcyBlbnRyaWVzLCBzbyB3ZSBk b24ndCBuZWVkIHRoZSByZWFkCi0JICogYmFycmllciBpbiB0aGF0IGNhc2UuCi0JICovCi0J aWYgKCFyZW1vdmUpCi0JCXBnX3JlYWRfYmFycmllcigpOwkJLyogcGFpcnMgd2l0aCBLbm93 bkFzc2lnbmVkWGlkc0FkZCAqLwotCi0JLyoKLQkgKiBTdGFuZGFyZCBiaW5hcnkgc2VhcmNo LiAgTm90ZSB3ZSBjYW4gaWdub3JlIHRoZSBLbm93bkFzc2lnbmVkWGlkc1ZhbGlkCi0JICog YXJyYXkgaGVyZSwgc2luY2UgZXZlbiBpbnZhbGlkIGVudHJpZXMgd2lsbCBjb250YWluIHNv cnRlZCBYSURzLgotCSAqLwotCWZpcnN0ID0gdGFpbDsKLQlsYXN0ID0gaGVhZCAtIDE7Ci0J d2hpbGUgKGZpcnN0IDw9IGxhc3QpCi0JewotCQlpbnQJCQltaWRfaW5kZXg7Ci0JCVRyYW5z YWN0aW9uSWQgbWlkX3hpZDsKLQotCQltaWRfaW5kZXggPSAoZmlyc3QgKyBsYXN0KSAvIDI7 Ci0JCW1pZF94aWQgPSBLbm93bkFzc2lnbmVkWGlkc1ttaWRfaW5kZXhdOwotCi0JCWlmICh4 aWQgPT0gbWlkX3hpZCkKLQkJewotCQkJcmVzdWx0X2luZGV4ID0gbWlkX2luZGV4OwotCQkJ YnJlYWs7Ci0JCX0KLQkJZWxzZSBpZiAoVHJhbnNhY3Rpb25JZFByZWNlZGVzKHhpZCwgbWlk X3hpZCkpCi0JCQlsYXN0ID0gbWlkX2luZGV4IC0gMTsKLQkJZWxzZQotCQkJZmlyc3QgPSBt aWRfaW5kZXggKyAxOwotCX0KLQotCWlmIChyZXN1bHRfaW5kZXggPCAwKQotCQlyZXR1cm4g ZmFsc2U7CQkJLyogbm90IGluIGFycmF5ICovCi0KLQlpZiAoIUtub3duQXNzaWduZWRYaWRz VmFsaWRbcmVzdWx0X2luZGV4XSkKLQkJcmV0dXJuIGZhbHNlOwkJCS8qIGluIGFycmF5LCBi dXQgaW52YWxpZCAqLwotCi0JaWYgKHJlbW92ZSkKLQl7Ci0JCUtub3duQXNzaWduZWRYaWRz VmFsaWRbcmVzdWx0X2luZGV4XSA9IGZhbHNlOwotCi0JCXBBcnJheS0+bnVtS25vd25Bc3Np Z25lZFhpZHMtLTsKLQkJQXNzZXJ0KHBBcnJheS0+bnVtS25vd25Bc3NpZ25lZFhpZHMgPj0g MCk7Ci0KLQkJLyoKLQkJICogSWYgd2UncmUgcmVtb3ZpbmcgdGhlIHRhaWwgZWxlbWVudCB0 aGVuIGFkdmFuY2UgdGFpbCBwb2ludGVyIG92ZXIKLQkJICogYW55IGludmFsaWQgZWxlbWVu dHMuICBUaGlzIHdpbGwgc3BlZWQgZnV0dXJlIHNlYXJjaGVzLgotCQkgKi8KLQkJaWYgKHJl c3VsdF9pbmRleCA9PSB0YWlsKQotCQl7Ci0JCQl0YWlsKys7Ci0JCQl3aGlsZSAodGFpbCA8 IGhlYWQgJiYgIUtub3duQXNzaWduZWRYaWRzVmFsaWRbdGFpbF0pCi0JCQkJdGFpbCsrOwot CQkJaWYgKHRhaWwgPj0gaGVhZCkKLQkJCXsKLQkJCQkvKiBBcnJheSBpcyBlbXB0eSwgc28g d2UgY2FuIHJlc2V0IGJvdGggcG9pbnRlcnMgKi8KLQkJCQlwQXJyYXktPmhlYWRLbm93bkFz c2lnbmVkWGlkcyA9IDA7Ci0JCQkJcEFycmF5LT50YWlsS25vd25Bc3NpZ25lZFhpZHMgPSAw OwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCXBBcnJheS0+dGFpbEtub3duQXNzaWduZWRY aWRzID0gdGFpbDsKLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiB0cnVlOwotfQotCi0vKgot ICogSXMgdGhlIHNwZWNpZmllZCBYSUQgcHJlc2VudCBpbiBLbm93bkFzc2lnbmVkWGlkc1td PwotICoKLSAqIENhbGxlciBtdXN0IGhvbGQgUHJvY0FycmF5TG9jayBpbiBzaGFyZWQgb3Ig ZXhjbHVzaXZlIG1vZGUuCi0gKi8KLXN0YXRpYyBib29sCi1Lbm93bkFzc2lnbmVkWGlkRXhp c3RzKFRyYW5zYWN0aW9uSWQgeGlkKQotewotCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxp ZCh4aWQpKTsKLQotCXJldHVybiBLbm93bkFzc2lnbmVkWGlkc1NlYXJjaCh4aWQsIGZhbHNl KTsKLX0KLQotLyoKLSAqIFJlbW92ZSB0aGUgc3BlY2lmaWVkIFhJRCBmcm9tIEtub3duQXNz aWduZWRYaWRzW10uCi0gKgotICogQ2FsbGVyIG11c3QgaG9sZCBQcm9jQXJyYXlMb2NrIGlu IGV4Y2x1c2l2ZSBtb2RlLgotICovCi1zdGF0aWMgdm9pZAotS25vd25Bc3NpZ25lZFhpZHNS ZW1vdmUoVHJhbnNhY3Rpb25JZCB4aWQpCi17Ci0JQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1Zh bGlkKHhpZCkpOwotCi0JZWxvZyhERUJVRzQsICJyZW1vdmUgS25vd25Bc3NpZ25lZFhpZCAl dSIsIHhpZCk7Ci0KLQkvKgotCSAqIE5vdGU6IHdlIGNhbm5vdCBjb25zaWRlciBpdCBhbiBl cnJvciB0byByZW1vdmUgYW4gWElEIHRoYXQncyBub3QKLQkgKiBwcmVzZW50LiAgV2UgaW50 ZW50aW9uYWxseSByZW1vdmUgc3VieGFjdCBJRHMgd2hpbGUgcHJvY2Vzc2luZwotCSAqIFhM T0dfWEFDVF9BU1NJR05NRU5ULCB0byBhdm9pZCBhcnJheSBvdmVyZmxvdy4gIFRoZW4gdGhv c2UgWElEcyB3aWxsIGJlCi0JICogcmVtb3ZlZCBhZ2FpbiB3aGVuIHRoZSB0b3AtbGV2ZWwg eGFjdCBjb21taXRzIG9yIGFib3J0cy4KLQkgKgotCSAqIEl0IG1pZ2h0IGJlIHBvc3NpYmxl IHRvIHRyYWNrIHN1Y2ggWElEcyB0byBkaXN0aW5ndWlzaCB0aGlzIGNhc2UgZnJvbQotCSAq IGFjdHVhbCBlcnJvcnMsIGJ1dCBpdCB3b3VsZCBiZSBjb21wbGljYXRlZCBhbmQgcHJvYmFi bHkgbm90IHdvcnRoIGl0LgotCSAqIFNvLCBqdXN0IGlnbm9yZSB0aGUgc2VhcmNoIHJlc3Vs dC4KLQkgKi8KLQkodm9pZCkgS25vd25Bc3NpZ25lZFhpZHNTZWFyY2goeGlkLCB0cnVlKTsK LX0KLQotLyoKLSAqIEtub3duQXNzaWduZWRYaWRzUmVtb3ZlVHJlZQotICoJCVJlbW92ZSB4 aWQgKGlmIGl0J3Mgbm90IEludmFsaWRUcmFuc2FjdGlvbklkKSBhbmQgYWxsIHRoZSBzdWJ4 aWRzLgotICoKLSAqIENhbGxlciBtdXN0IGhvbGQgUHJvY0FycmF5TG9jayBpbiBleGNsdXNp dmUgbW9kZS4KLSAqLwotc3RhdGljIHZvaWQKLUtub3duQXNzaWduZWRYaWRzUmVtb3ZlVHJl ZShUcmFuc2FjdGlvbklkIHhpZCwgaW50IG5zdWJ4aWRzLAotCQkJCQkJCVRyYW5zYWN0aW9u SWQgKnN1YnhpZHMpCi17Ci0JaW50CQkJaTsKLQotCWlmIChUcmFuc2FjdGlvbklkSXNWYWxp ZCh4aWQpKQotCQlLbm93bkFzc2lnbmVkWGlkc1JlbW92ZSh4aWQpOwotCi0JZm9yIChpID0g MDsgaSA8IG5zdWJ4aWRzOyBpKyspCi0JCUtub3duQXNzaWduZWRYaWRzUmVtb3ZlKHN1Ynhp ZHNbaV0pOwotCi0JLyogT3Bwb3J0dW5pc3RpY2FsbHkgY29tcHJlc3MgdGhlIGFycmF5ICov Ci0JS25vd25Bc3NpZ25lZFhpZHNDb21wcmVzcyhLQVhfVFJBTlNBQ1RJT05fRU5ELCB0cnVl KTsKLX0KLQotLyoKLSAqIFBydW5lIEtub3duQXNzaWduZWRYaWRzIHVwIHRvLCBidXQgKm5v dCogaW5jbHVkaW5nIHhpZC4gSWYgeGlkIGlzIGludmFsaWQKLSAqIHRoZW4gY2xlYXIgdGhl IHdob2xlIHRhYmxlLgotICoKLSAqIENhbGxlciBtdXN0IGhvbGQgUHJvY0FycmF5TG9jayBp biBleGNsdXNpdmUgbW9kZS4KLSAqLwotc3RhdGljIHZvaWQKLUtub3duQXNzaWduZWRYaWRz UmVtb3ZlUHJlY2VkaW5nKFRyYW5zYWN0aW9uSWQgcmVtb3ZlWGlkKQotewotCVByb2NBcnJh eVN0cnVjdCAqcEFycmF5ID0gcHJvY0FycmF5OwotCWludAkJCWNvdW50ID0gMDsKLQlpbnQJ CQloZWFkLAotCQkJCXRhaWwsCi0JCQkJaTsKLQotCWlmICghVHJhbnNhY3Rpb25JZElzVmFs aWQocmVtb3ZlWGlkKSkKLQl7Ci0JCWVsb2coREVCVUc0LCAicmVtb3ZpbmcgYWxsIEtub3du QXNzaWduZWRYaWRzIik7Ci0JCXBBcnJheS0+bnVtS25vd25Bc3NpZ25lZFhpZHMgPSAwOwot CQlwQXJyYXktPmhlYWRLbm93bkFzc2lnbmVkWGlkcyA9IHBBcnJheS0+dGFpbEtub3duQXNz aWduZWRYaWRzID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCWVsb2coREVCVUc0LCAicHJ1bmUg S25vd25Bc3NpZ25lZFhpZHMgdG8gJXUiLCByZW1vdmVYaWQpOwotCi0JLyoKLQkgKiBNYXJr IGVudHJpZXMgaW52YWxpZCBzdGFydGluZyBhdCB0aGUgdGFpbC4gIFNpbmNlIGFycmF5IGlz IHNvcnRlZCwgd2UKLQkgKiBjYW4gc3RvcCBhcyBzb29uIGFzIHdlIHJlYWNoIGFuIGVudHJ5 ID49IHJlbW92ZVhpZC4KLQkgKi8KLQl0YWlsID0gcEFycmF5LT50YWlsS25vd25Bc3NpZ25l ZFhpZHM7Ci0JaGVhZCA9IHBBcnJheS0+aGVhZEtub3duQXNzaWduZWRYaWRzOwotCi0JZm9y IChpID0gdGFpbDsgaSA8IGhlYWQ7IGkrKykKLQl7Ci0JCWlmIChLbm93bkFzc2lnbmVkWGlk c1ZhbGlkW2ldKQotCQl7Ci0JCQlUcmFuc2FjdGlvbklkIGtub3duWGlkID0gS25vd25Bc3Np Z25lZFhpZHNbaV07Ci0KLQkJCWlmIChUcmFuc2FjdGlvbklkRm9sbG93c09yRXF1YWxzKGtu b3duWGlkLCByZW1vdmVYaWQpKQotCQkJCWJyZWFrOwotCi0JCQlpZiAoIVN0YW5kYnlUcmFu c2FjdGlvbklkSXNQcmVwYXJlZChrbm93blhpZCkpCi0JCQl7Ci0JCQkJS25vd25Bc3NpZ25l ZFhpZHNWYWxpZFtpXSA9IGZhbHNlOwotCQkJCWNvdW50Kys7Ci0JCQl9Ci0JCX0KLQl9Ci0K LQlwQXJyYXktPm51bUtub3duQXNzaWduZWRYaWRzIC09IGNvdW50OwotCUFzc2VydChwQXJy YXktPm51bUtub3duQXNzaWduZWRYaWRzID49IDApOwotCi0JLyoKLQkgKiBBZHZhbmNlIHRo ZSB0YWlsIHBvaW50ZXIgaWYgd2UndmUgbWFya2VkIHRoZSB0YWlsIGl0ZW0gaW52YWxpZC4K LQkgKi8KLQlmb3IgKGkgPSB0YWlsOyBpIDwgaGVhZDsgaSsrKQotCXsKLQkJaWYgKEtub3du QXNzaWduZWRYaWRzVmFsaWRbaV0pCi0JCQlicmVhazsKLQl9Ci0JaWYgKGkgPj0gaGVhZCkK LQl7Ci0JCS8qIEFycmF5IGlzIGVtcHR5LCBzbyB3ZSBjYW4gcmVzZXQgYm90aCBwb2ludGVy cyAqLwotCQlwQXJyYXktPmhlYWRLbm93bkFzc2lnbmVkWGlkcyA9IDA7Ci0JCXBBcnJheS0+ dGFpbEtub3duQXNzaWduZWRYaWRzID0gMDsKLQl9Ci0JZWxzZQotCXsKLQkJcEFycmF5LT50 YWlsS25vd25Bc3NpZ25lZFhpZHMgPSBpOwotCX0KLQotCS8qIE9wcG9ydHVuaXN0aWNhbGx5 IGNvbXByZXNzIHRoZSBhcnJheSAqLwotCUtub3duQXNzaWduZWRYaWRzQ29tcHJlc3MoS0FY X1BSVU5FLCB0cnVlKTsKLX0KLQotLyoKLSAqIEtub3duQXNzaWduZWRYaWRzR2V0IC0gR2V0 IGFuIGFycmF5IG9mIHhpZHMgYnkgc2Nhbm5pbmcgS25vd25Bc3NpZ25lZFhpZHMuCi0gKiBX ZSBmaWx0ZXIgb3V0IGFueXRoaW5nID49IHhtYXguCi0gKgotICogUmV0dXJucyB0aGUgbnVt YmVyIG9mIFhJRHMgc3RvcmVkIGludG8geGFycmF5W10uICBDYWxsZXIgaXMgcmVzcG9uc2li bGUKLSAqIHRoYXQgYXJyYXkgaXMgbGFyZ2UgZW5vdWdoLgotICoKLSAqIENhbGxlciBtdXN0 IGhvbGQgUHJvY0FycmF5TG9jayBpbiAoYXQgbGVhc3QpIHNoYXJlZCBtb2RlLgotICovCi1z dGF0aWMgaW50Ci1Lbm93bkFzc2lnbmVkWGlkc0dldChUcmFuc2FjdGlvbklkICp4YXJyYXks IFRyYW5zYWN0aW9uSWQgeG1heCkKLXsKLQlUcmFuc2FjdGlvbklkIHh0bXAgPSBJbnZhbGlk VHJhbnNhY3Rpb25JZDsKLQotCXJldHVybiBLbm93bkFzc2lnbmVkWGlkc0dldEFuZFNldFht aW4oeGFycmF5LCAmeHRtcCwgeG1heCk7Ci19Ci0KLS8qCi0gKiBLbm93bkFzc2lnbmVkWGlk c0dldEFuZFNldFhtaW4gLSBhcyBLbm93bkFzc2lnbmVkWGlkc0dldCwgcGx1cwotICogd2Ug cmVkdWNlICp4bWluIHRvIHRoZSBsb3dlc3QgeGlkIHZhbHVlIHNlZW4gaWYgbm90IGFscmVh ZHkgbG93ZXIuCi0gKgotICogQ2FsbGVyIG11c3QgaG9sZCBQcm9jQXJyYXlMb2NrIGluIChh dCBsZWFzdCkgc2hhcmVkIG1vZGUuCi0gKi8KLXN0YXRpYyBpbnQKLUtub3duQXNzaWduZWRY aWRzR2V0QW5kU2V0WG1pbihUcmFuc2FjdGlvbklkICp4YXJyYXksIFRyYW5zYWN0aW9uSWQg KnhtaW4sCi0JCQkJCQkJICAgVHJhbnNhY3Rpb25JZCB4bWF4KQotewotCWludAkJCWNvdW50 ID0gMDsKLQlpbnQJCQloZWFkLAotCQkJCXRhaWw7Ci0JaW50CQkJaTsKLQotCS8qCi0JICog RmV0Y2ggaGVhZCBqdXN0IG9uY2UsIHNpbmNlIGl0IG1heSBjaGFuZ2Ugd2hpbGUgd2UgbG9v cC4gV2UgY2FuIHN0b3AKLQkgKiBvbmNlIHdlIHJlYWNoIHRoZSBpbml0aWFsbHkgc2VlbiBo ZWFkLCBzaW5jZSB3ZSBhcmUgY2VydGFpbiB0aGF0IGFuIHhpZAotCSAqIGNhbm5vdCBlbnRl ciBhbmQgdGhlbiBsZWF2ZSB0aGUgYXJyYXkgd2hpbGUgd2UgaG9sZCBQcm9jQXJyYXlMb2Nr LiAgV2UKLQkgKiBtaWdodCBtaXNzIG5ld2x5LWFkZGVkIHhpZHMsIGJ1dCB0aGV5IHNob3Vs ZCBiZSA+PSB4bWF4IHNvIGlycmVsZXZhbnQKLQkgKiBhbnl3YXkuCi0JICovCi0JdGFpbCA9 IHByb2NBcnJheS0+dGFpbEtub3duQXNzaWduZWRYaWRzOwotCWhlYWQgPSBwcm9jQXJyYXkt PmhlYWRLbm93bkFzc2lnbmVkWGlkczsKLQotCXBnX3JlYWRfYmFycmllcigpOwkJCS8qIHBh aXJzIHdpdGggS25vd25Bc3NpZ25lZFhpZHNBZGQgKi8KLQotCWZvciAoaSA9IHRhaWw7IGkg PCBoZWFkOyBpKyspCi0JewotCQkvKiBTa2lwIGFueSBnYXBzIGluIHRoZSBhcnJheSAqLwot CQlpZiAoS25vd25Bc3NpZ25lZFhpZHNWYWxpZFtpXSkKLQkJewotCQkJVHJhbnNhY3Rpb25J ZCBrbm93blhpZCA9IEtub3duQXNzaWduZWRYaWRzW2ldOwotCi0JCQkvKgotCQkJICogVXBk YXRlIHhtaW4gaWYgcmVxdWlyZWQuICBPbmx5IHRoZSBmaXJzdCBYSUQgbmVlZCBiZSBjaGVj a2VkLAotCQkJICogc2luY2UgdGhlIGFycmF5IGlzIHNvcnRlZC4KLQkJCSAqLwotCQkJaWYg KGNvdW50ID09IDAgJiYKLQkJCQlUcmFuc2FjdGlvbklkUHJlY2VkZXMoa25vd25YaWQsICp4 bWluKSkKLQkJCQkqeG1pbiA9IGtub3duWGlkOwotCi0JCQkvKgotCQkJICogRmlsdGVyIG91 dCBhbnl0aGluZyA+PSB4bWF4LCBhZ2FpbiByZWx5aW5nIG9uIHNvcnRlZCBwcm9wZXJ0eQot CQkJICogb2YgYXJyYXkuCi0JCQkgKi8KLQkJCWlmIChUcmFuc2FjdGlvbklkSXNWYWxpZCh4 bWF4KSAmJgotCQkJCVRyYW5zYWN0aW9uSWRGb2xsb3dzT3JFcXVhbHMoa25vd25YaWQsIHht YXgpKQotCQkJCWJyZWFrOwotCi0JCQkvKiBBZGQga25vd25YaWQgaW50byBvdXRwdXQgYXJy YXkgKi8KLQkJCXhhcnJheVtjb3VudCsrXSA9IGtub3duWGlkOwotCQl9Ci0JfQotCi0JcmV0 dXJuIGNvdW50OwotfQotCi0vKgotICogR2V0IG9sZGVzdCBYSUQgaW4gdGhlIEtub3duQXNz aWduZWRYaWRzIGFycmF5LCBvciBJbnZhbGlkVHJhbnNhY3Rpb25JZAotICogaWYgbm90aGlu ZyB0aGVyZS4KLSAqLwotc3RhdGljIFRyYW5zYWN0aW9uSWQKLUtub3duQXNzaWduZWRYaWRz R2V0T2xkZXN0WG1pbih2b2lkKQotewotCWludAkJCWhlYWQsCi0JCQkJdGFpbDsKLQlpbnQJ CQlpOwotCi0JLyoKLQkgKiBGZXRjaCBoZWFkIGp1c3Qgb25jZSwgc2luY2UgaXQgbWF5IGNo YW5nZSB3aGlsZSB3ZSBsb29wLgotCSAqLwotCXRhaWwgPSBwcm9jQXJyYXktPnRhaWxLbm93 bkFzc2lnbmVkWGlkczsKLQloZWFkID0gcHJvY0FycmF5LT5oZWFkS25vd25Bc3NpZ25lZFhp ZHM7Ci0KLQlwZ19yZWFkX2JhcnJpZXIoKTsJCQkvKiBwYWlycyB3aXRoIEtub3duQXNzaWdu ZWRYaWRzQWRkICovCi0KLQlmb3IgKGkgPSB0YWlsOyBpIDwgaGVhZDsgaSsrKQotCXsKLQkJ LyogU2tpcCBhbnkgZ2FwcyBpbiB0aGUgYXJyYXkgKi8KLQkJaWYgKEtub3duQXNzaWduZWRY aWRzVmFsaWRbaV0pCi0JCQlyZXR1cm4gS25vd25Bc3NpZ25lZFhpZHNbaV07Ci0JfQotCi0J cmV0dXJuIEludmFsaWRUcmFuc2FjdGlvbklkOwotfQotCi0vKgotICogRGlzcGxheSBLbm93 bkFzc2lnbmVkWGlkcyB0byBwcm92aWRlIGRlYnVnIHRyYWlsCi0gKgotICogQ3VycmVudGx5 IHRoaXMgaXMgb25seSBjYWxsZWQgd2l0aGluIHN0YXJ0dXAgcHJvY2Vzcywgc28gd2UgbmVl ZCBubwotICogc3BlY2lhbCBsb2NraW5nLgotICoKLSAqIE5vdGUgdGhpcyBpcyBwcmV0dHkg ZXhwZW5zaXZlLCBhbmQgbXVjaCBvZiB0aGUgZXhwZW5zZSB3aWxsIGJlIGluY3VycmVkCi0g KiBldmVuIGlmIHRoZSBlbG9nIG1lc3NhZ2Ugd2lsbCBnZXQgZGlzY2FyZGVkLiAgSXQncyBu b3QgY3VycmVudGx5IGNhbGxlZAotICogaW4gYW55IHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBs YWNlcywgaG93ZXZlciwgc28gbm8gbmVlZCB0byBiZSB0ZW5zZXIuCi0gKi8KLXN0YXRpYyB2 b2lkCi1Lbm93bkFzc2lnbmVkWGlkc0Rpc3BsYXkoaW50IHRyYWNlX2xldmVsKQotewotCVBy b2NBcnJheVN0cnVjdCAqcEFycmF5ID0gcHJvY0FycmF5OwotCVN0cmluZ0luZm9EYXRhIGJ1 ZjsKLQlpbnQJCQloZWFkLAotCQkJCXRhaWwsCi0JCQkJaTsKLQlpbnQJCQlueGlkcyA9IDA7 Ci0KLQl0YWlsID0gcEFycmF5LT50YWlsS25vd25Bc3NpZ25lZFhpZHM7Ci0JaGVhZCA9IHBB cnJheS0+aGVhZEtub3duQXNzaWduZWRYaWRzOwotCi0JaW5pdFN0cmluZ0luZm8oJmJ1Zik7 Ci0KLQlmb3IgKGkgPSB0YWlsOyBpIDwgaGVhZDsgaSsrKQotCXsKLQkJaWYgKEtub3duQXNz aWduZWRYaWRzVmFsaWRbaV0pCi0JCXsKLQkJCW54aWRzKys7Ci0JCQlhcHBlbmRTdHJpbmdJ bmZvKCZidWYsICJbJWRdPSV1ICIsIGksIEtub3duQXNzaWduZWRYaWRzW2ldKTsKLQkJfQot CX0KLQotCWVsb2codHJhY2VfbGV2ZWwsICIlZCBLbm93bkFzc2lnbmVkWGlkcyAobnVtPSVk IHRhaWw9JWQgaGVhZD0lZCkgJXMiLAotCQkgbnhpZHMsCi0JCSBwQXJyYXktPm51bUtub3du QXNzaWduZWRYaWRzLAotCQkgcEFycmF5LT50YWlsS25vd25Bc3NpZ25lZFhpZHMsCi0JCSBw QXJyYXktPmhlYWRLbm93bkFzc2lnbmVkWGlkcywKLQkJIGJ1Zi5kYXRhKTsKLQotCXBmcmVl KGJ1Zi5kYXRhKTsKLX0KLQotLyoKLSAqIEtub3duQXNzaWduZWRYaWRzUmVzZXQKLSAqCQlS ZXNldHMgS25vd25Bc3NpZ25lZFhpZHMgdG8gYmUgZW1wdHkKLSAqLwotc3RhdGljIHZvaWQK LUtub3duQXNzaWduZWRYaWRzUmVzZXQodm9pZCkKLXsKLQlQcm9jQXJyYXlTdHJ1Y3QgKnBB cnJheSA9IHByb2NBcnJheTsKLQotCUxXTG9ja0FjcXVpcmUoUHJvY0FycmF5TG9jaywgTFdf RVhDTFVTSVZFKTsKKwlBc3NlcnQobHNuID4gVHJhbnNhbVZhcmlhYmxlcy0+bGF0ZXN0Q29t bWl0TFNOKTsKKwlUcmFuc2FtVmFyaWFibGVzLT5sYXRlc3RDb21taXRMU04gPSBsc247CiAK LQlwQXJyYXktPm51bUtub3duQXNzaWduZWRYaWRzID0gMDsKLQlwQXJyYXktPnRhaWxLbm93 bkFzc2lnbmVkWGlkcyA9IDA7Ci0JcEFycmF5LT5oZWFkS25vd25Bc3NpZ25lZFhpZHMgPSAw OworCXByb2NBcnJheS0+b2xkZXN0X3J1bm5pbmdfcHJpbWFyeV94aWQgPSBvbGRlc3RfcnVu bmluZ19wcmltYXJ5X3hpZDsKIAogCUxXTG9ja1JlbGVhc2UoUHJvY0FycmF5TG9jayk7CiB9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMKaW5kZXggMjUyNjdmMGY4NS4uZTAyYzlh Yjg0MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc3RhbmRieS5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYwpAQCAtMTM5LDggKzEzOSw2 IEBAIEluaXRSZWNvdmVyeVRyYW5zYWN0aW9uRW52aXJvbm1lbnQodm9pZCkKIAl2eGlkLnBy b2NOdW1iZXIgPSBNeVByb2NOdW1iZXI7CiAJdnhpZC5sb2NhbFRyYW5zYWN0aW9uSWQgPSBH ZXROZXh0TG9jYWxUcmFuc2FjdGlvbklkKCk7CiAJVmlydHVhbFhhY3RMb2NrVGFibGVJbnNl cnQodnhpZCk7Ci0KLQlzdGFuZGJ5U3RhdGUgPSBTVEFOREJZX0lOSVRJQUxJWkVEOwogfQog CiAvKgpAQCAtMTY4LDkgKzE2Niw2IEBAIFNodXRkb3duUmVjb3ZlcnlUcmFuc2FjdGlvbkVu dmlyb25tZW50KHZvaWQpCiAJaWYgKFJlY292ZXJ5TG9ja0hhc2ggPT0gTlVMTCkKIAkJcmV0 dXJuOwogCi0JLyogTWFyayBhbGwgdHJhY2tlZCBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMg YXMgZmluaXNoZWQuICovCi0JRXhwaXJlQWxsS25vd25Bc3NpZ25lZFRyYW5zYWN0aW9uSWRz KCk7Ci0KIAkvKiBSZWxlYXNlIGFsbCBsb2NrcyB0aGUgdHJhY2tlZCB0cmFuc2FjdGlvbnMg d2VyZSBob2xkaW5nICovCiAJU3RhbmRieVJlbGVhc2VBbGxMb2NrcygpOwogCkBAIC0xMTY3 LDcgKzExNjIsNyBAQCBzdGFuZGJ5X3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJ QXNzZXJ0KCFYTG9nUmVjSGFzQW55QmxvY2tSZWZzKHJlY29yZCkpOwogCiAJLyogRG8gbm90 aGluZyBpZiB3ZSdyZSBub3QgaW4gaG90IHN0YW5kYnkgbW9kZSAqLwotCWlmIChzdGFuZGJ5 U3RhdGUgPT0gU1RBTkRCWV9ESVNBQkxFRCkKKwlpZiAoIUluSG90U3RhbmRieSkKIAkJcmV0 dXJuOwogCiAJaWYgKGluZm8gPT0gWExPR19TVEFOREJZX0xPQ0spCkBAIC0xMTgyLDE4ICsx MTc3LDIxIEBAIHN0YW5kYnlfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAl9CiAJ ZWxzZSBpZiAoaW5mbyA9PSBYTE9HX1JVTk5JTkdfWEFDVFMpCiAJeworCQkvKgorCQkgKiBY WFg6IHJ1bm5pbmcgeGFjdHMgcmVjb3JkcyB3ZXJlIHByZXZpb3VzbHkgdXNlZCB0byB1cGRh dGUKKwkJICoga25vd24tYXNzaWduZWQgeGlkcywgYnV0IG5vdyB3ZSBvbmx5IG5lZWQgaXQg Zm9yIHRoZSBsb2dpY2FsCisJCSAqIHJlcGxpY2F0aW9uIHNuYXBidWlsZGVyIHN0dWZmLiBB bmQgZm9yIHRoZQorCQkgKiBwZ19zdGF0X3JlcG9ydF9zdGF0KHRydWUpIGNhbGwgYmVsb3cu CisJCSAqLwogCQl4bF9ydW5uaW5nX3hhY3RzICp4bHJlYyA9ICh4bF9ydW5uaW5nX3hhY3Rz ICopIFhMb2dSZWNHZXREYXRhKHJlY29yZCk7Ci0JCVJ1bm5pbmdUcmFuc2FjdGlvbnNEYXRh IHJ1bm5pbmc7CiAKLQkJcnVubmluZy54Y250ID0geGxyZWMtPnhjbnQ7Ci0JCXJ1bm5pbmcu c3VieGNudCA9IHhscmVjLT5zdWJ4Y250OwotCQlydW5uaW5nLnN1YnhpZF9zdGF0dXMgPSB4 bHJlYy0+c3VieGlkX292ZXJmbG93ID8gU1VCWElEU19NSVNTSU5HIDogU1VCWElEU19JTl9B UlJBWTsKLQkJcnVubmluZy5uZXh0WGlkID0geGxyZWMtPm5leHRYaWQ7Ci0JCXJ1bm5pbmcu bGF0ZXN0Q29tcGxldGVkWGlkID0geGxyZWMtPmxhdGVzdENvbXBsZXRlZFhpZDsKLQkJcnVu bmluZy5vbGRlc3RSdW5uaW5nWGlkID0geGxyZWMtPm9sZGVzdFJ1bm5pbmdYaWQ7Ci0JCXJ1 bm5pbmcueGlkcyA9IHhscmVjLT54aWRzOwotCi0JCVByb2NBcnJheUFwcGx5UmVjb3ZlcnlJ bmZvKCZydW5uaW5nKTsKKwkJLyoKKwkJICogUmVtZW1iZXIgdGhlIG9sZGVzdCBYSUQgdGhh dCB3YXMgcnVubmluZyBhdCB0aGUgdGltZS4gTm9ybWFsbHksIGFsbAorCQkgKiB0cmFuc2Fj dGlvbiBhYm9ydHMgYW5kIGNvbW1pdHMgYXJlIFdBTC1sb2dnZWQsIHNvIG91cgorCQkgKiBv bGRlc3RSdW5uaW5nWGlkIHZhbHVlIHNob3VsZCBiZSB1cC10by1kYXRlLCBidXQgaWYgbm90 LCB0aGlzCisJCSAqIGFsbG93cyB1cyB0byByZXN5bmNocm9uaXplLgorCQkgKi8KKwkJUHJv Y0FycmF5VXBkYXRlT2xkZXN0UnVubmluZ1hpZCh4bHJlYy0+b2xkZXN0UnVubmluZ1hpZCk7 CiAKIAkJLyoKIAkJICogVGhlIHN0YXJ0dXAgcHJvY2VzcyBjdXJyZW50bHkgaGFzIG5vIGNv bnZlbmllbnQgd2F5IHRvIHNjaGVkdWxlCkBAIC0xMjI0LDUwICsxMjIyLDQ2IEBAIHN0YW5k YnlfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKICAqCiAgKiBUaGlzIGlzIHVzZWQg Zm9yIEhvdCBTdGFuZGJ5IGFzIGZvbGxvd3M6CiAgKgotICogV2UgY2FuIG1vdmUgZGlyZWN0 bHkgdG8gU1RBTkRCWV9TTkFQU0hPVF9SRUFEWSBhdCBzdGFydHVwIGlmIHdlCi0gKiBzdGFy dCBmcm9tIGEgc2h1dGRvd24gY2hlY2twb2ludCBiZWNhdXNlIHdlIGtub3cgbm90aGluZyB3 YXMgcnVubmluZwotICogYXQgdGhhdCB0aW1lIGFuZCBvdXIgcmVjb3Zlcnkgc25hcHNob3Qg aXMga25vd24gZW1wdHkuIEluIHRoZSBtb3JlCi0gKiB0eXBpY2FsIGNhc2Ugb2YgYW4gb25s aW5lIGNoZWNrcG9pbnQgd2UgbmVlZCB0byBqdW1wIHRocm91Z2ggYSBmZXcKLSAqIGhvb3Bz IHRvIGdldCBhIGNvcnJlY3QgcmVjb3Zlcnkgc25hcHNob3QgYW5kIHRoaXMgcmVxdWlyZXMg YSB0d28gb3IKLSAqIHNvbWV0aW1lcyBhIHRocmVlIHN0YWdlIHByb2Nlc3MuCisgKiBXZSBj YW4gZW50ZXIgaG90IHN0YW5kYnkgbW9kZSBhbmQgc3RhcnQgYWNjZXB0aW5nIHJlYWQtb25s eSBxdWVyaWVzCisgKiBpbW1lZGlhdGVseSBhdCBzdGFydHVwIGlmIHdlIHN0YXJ0IGZyb20g YSBzaHV0ZG93biBjaGVja3BvaW50LCBiZWNhdXNlIHdlCisgKiBrbm93IG5vdGhpbmcgd2Fz IHJ1bm5pbmcgYXQgdGhhdCB0aW1lIGFuZCBvdXIgcmVjb3Zlcnkgc25hcHNob3QgaXMga25v d24KKyAqIGVtcHR5LiBJbiB0aGUgbW9yZSB0eXBpY2FsIGNhc2Ugb2YgYW4gb25saW5lIGNo ZWNrcG9pbnQsIHRoZSBjaGVja3BvaW50CisgKiByZWNvcmQgZG9lc24ndCBjb250YWluIGFs bCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGFib3V0IHJ1bm5pbmcKKyAqIHRyYW5zYWN0 aW9uIHN0YXRlLCBhbmQgd2UgbmVlZCB0byBqdW1wIHRocm91Z2ggYSBmZXcgaG9vcHMgdG8g Z2V0IGEgY29ycmVjdAorICogcmVjb3Zlcnkgc25hcHNob3QuCiAgKgotICogVGhlIGluaXRp YWwgc25hcHNob3QgbXVzdCBjb250YWluIGFsbCBydW5uaW5nIHhpZHMgYW5kIGFsbCBjdXJy ZW50Ci0gKiBBY2Nlc3NFeGNsdXNpdmVMb2NrcyBhdCBhIHBvaW50IGluIHRpbWUgb24gdGhl IHN0YW5kYnkuIEFzc2VtYmxpbmcKLSAqIHRoYXQgaW5mb3JtYXRpb24gd2hpbGUgdGhlIHNl cnZlciBpcyBydW5uaW5nIHJlcXVpcmVzIG1hbnkgYW5kCi0gKiB2YXJpb3VzIExXTG9ja3Ms IHNvIHdlIGNob29zZSB0byBkZXJpdmUgdGhhdCBpbmZvcm1hdGlvbiBwaWVjZSBieQotICog cGllY2UgYW5kIHRoZW4gcmUtYXNzZW1ibGUgdGhhdCBpbmZvIG9uIHRoZSBzdGFuZGJ5LiBX aGVuIHRoYXQKLSAqIGluZm9ybWF0aW9uIGlzIGZ1bGx5IGFzc2VtYmxlZCB3ZSBtb3ZlIHRv IFNUQU5EQllfU05BUFNIT1RfUkVBRFkuCisgKiBUaGUgaW5pdGlhbCBzbmFwc2hvdCBtdXN0 IGNvbnRhaW4gYWxsIGN1cnJlbnQgQWNjZXNzRXhjbHVzaXZlTG9ja3MgYXQgYQorICogcG9p bnQgaW4gdGltZSBvbiB0aGUgc3RhbmRieS4gQXNzZW1ibGluZyB0aGF0IGluZm9ybWF0aW9u IHdoaWxlIHRoZSBzZXJ2ZXIKKyAqIGlzIHJ1bm5pbmcgcmVxdWlyZXMgbWFueSBhbmQgdmFy aW91cyBMV0xvY2tzLCBzbyB3ZSBjaG9vc2UgdG8gZGVyaXZlIHRoYXQKKyAqIGluZm9ybWF0 aW9uIHBpZWNlIGJ5IHBpZWNlIGFuZCB0aGVuIHJlLWFzc2VtYmxlIHRoYXQgaW5mbyBvbiB0 aGUgc3RhbmRieS4KICAqCi0gKiBTaW5jZSBsb2NraW5nIG9uIHRoZSBwcmltYXJ5IHdoZW4g d2UgZGVyaXZlIHRoZSBpbmZvcm1hdGlvbiBpcyBub3QKLSAqIHN0cmljdCwgd2Ugbm90ZSB0 aGF0IHRoZXJlIGlzIGEgdGltZSB3aW5kb3cgYmV0d2VlbiB0aGUgZGVyaXZhdGlvbiBhbmQK LSAqIHdyaXRpbmcgdG8gV0FMIG9mIHRoZSBkZXJpdmVkIGluZm9ybWF0aW9uLiBUaGF0IGFs bG93cyByYWNlIGNvbmRpdGlvbnMKLSAqIHRoYXQgd2UgbXVzdCByZXNvbHZlLCBzaW5jZSB4 aWRzIGFuZCBsb2NrcyBtYXkgZW50ZXIgb3IgbGVhdmUgdGhlCi0gKiBzbmFwc2hvdCBkdXJp bmcgdGhhdCB3aW5kb3cuIFRoaXMgY3JlYXRlcyB0aGUgaXNzdWUgdGhhdCBhbiB4aWQgb3IK LSAqIGxvY2sgbWF5IHN0YXJ0ICphZnRlciogdGhlIHNuYXBzaG90IGhhcyBiZWVuIGRlcml2 ZWQgeWV0ICpiZWZvcmUqIHRoZQotICogc25hcHNob3QgaXMgbG9nZ2VkIGluIHRoZSBydW5u aW5nIHhhY3RzIFdBTCByZWNvcmQuIFdlIHJlc29sdmUgdGhpcyBieQotICogc3RhcnRpbmcg dG8gYWNjdW11bGF0ZSBjaGFuZ2VzIGF0IGEgcG9pbnQganVzdCBwcmlvciB0byB3aGVuIHdl IGRlcml2ZQotICogdGhlIHNuYXBzaG90IG9uIHRoZSBwcmltYXJ5LCB0aGVuIGlnbm9yZSBk dXBsaWNhdGVzIHdoZW4gd2UgbGF0ZXIgYXBwbHkKLSAqIHRoZSBzbmFwc2hvdCBmcm9tIHRo ZSBydW5uaW5nIHhhY3RzIHJlY29yZC4gVGhpcyBpcyBpbXBsZW1lbnRlZCBkdXJpbmcKLSAq IENyZWF0ZUNoZWNrUG9pbnQoKSB3aGVyZSB3ZSB1c2UgdGhlIGxvZ2ljYWwgY2hlY2twb2lu dCBsb2NhdGlvbiBhcwotICogb3VyIHN0YXJ0aW5nIHBvaW50IGFuZCB0aGVuIHdyaXRlIHRo ZSBydW5uaW5nIHhhY3RzIHJlY29yZCBpbW1lZGlhdGVseQotICogYmVmb3JlIHdyaXRpbmcg dGhlIG1haW4gY2hlY2twb2ludCBXQUwgcmVjb3JkLiBTaW5jZSB3ZSBhbHdheXMgc3RhcnQK LSAqIHVwIGZyb20gYSBjaGVja3BvaW50IGFuZCBhcmUgaW1tZWRpYXRlbHkgYXQgb3VyIHN0 YXJ0aW5nIHBvaW50LCB3ZQotICogdW5jb25kaXRpb25hbGx5IG1vdmUgdG8gU1RBTkRCWV9J TklUSUFMSVpFRC4gQWZ0ZXIgdGhpcyBwb2ludCB3ZQotICogbXVzdCBkbyA0IHRoaW5nczoK KyAqIFNpbmNlIGxvY2tpbmcgb24gdGhlIHByaW1hcnkgd2hlbiB3ZSBkZXJpdmUgdGhlIGlu Zm9ybWF0aW9uIGlzIG5vdCBzdHJpY3QsCisgKiB0aGVyZSBpcyBhIHRpbWUgd2luZG93IGJl dHdlZW4gdGhlIGRlcml2YXRpb24gYW5kIHdyaXRpbmcgdG8gV0FMIG9mIHRoZQorICogZGVy aXZlZCBpbmZvcm1hdGlvbi4gVGhhdCBhbGxvd3MgcmFjZSBjb25kaXRpb25zIHRoYXQgd2Ug bXVzdCByZXNvbHZlLAorICogc2luY2UgeGlkcyBhbmQgbG9ja3MgbWF5IGVudGVyIG9yIGxl YXZlIHRoZSBzbmFwc2hvdCBkdXJpbmcgdGhhdAorICogd2luZG93LiBUaGlzIGNyZWF0ZXMg dGhlIGlzc3VlIHRoYXQgYW4geGlkIG9yIGxvY2sgbWF5IHN0YXJ0ICphZnRlciogdGhlCisg KiBzbmFwc2hvdCBoYXMgYmVlbiBkZXJpdmVkIHlldCAqYmVmb3JlKiB0aGUgc25hcHNob3Qg aXMgbG9nZ2VkIGluIHRoZQorICogcnVubmluZyB4YWN0cyBXQUwgcmVjb3JkLiBXZSByZXNv bHZlIHRoaXMgYnkgc3RhcnRpbmcgdG8gYWNjdW11bGF0ZSBjaGFuZ2VzCisgKiBhdCBhIHBv aW50IGp1c3QgcHJpb3IgdG8gd2hlbiB3ZSBjb2xsZWN0IHRoZSBsb2NrIGluZm9ybWF0aW9u IG9uIHRoZQorICogcHJpbWFyeSwgdGhlbiBpZ25vcmUgZHVwbGljYXRlcyB3aGVuIHdlIGxh dGVyIGFwcGx5IHRoZSBzbmFwc2hvdCBmcm9tIHRoZQorICogcnVubmluZyB4YWN0cyByZWNv cmQuIFRoaXMgaXMgaW1wbGVtZW50ZWQgZHVyaW5nIENyZWF0ZUNoZWNrUG9pbnQoKSB3aGVy ZQorICogd2UgdXNlIHRoZSBsb2dpY2FsIGNoZWNrcG9pbnQgbG9jYXRpb24gYXMgb3VyIHN0 YXJ0aW5nIHBvaW50IGFuZCB0aGVuIHdyaXRlCisgKiB0aGUgcnVubmluZyB4YWN0cyByZWNv cmQgaW1tZWRpYXRlbHkgYmVmb3JlIHdyaXRpbmcgdGhlIG1haW4gY2hlY2twb2ludCBXQUwK KyAqIHJlY29yZC4gU2luY2Ugd2UgYWx3YXlzIHN0YXJ0IHVwIGZyb20gYSBjaGVja3BvaW50 J3MgcmVkbyBwb2ludGVyLCB3ZSB3aWxsCisgKiBhbHdheXMgc2VlIGEgcnVubmluZy14YWN0 cyByZWNvcmQgYmV0d2VlbiBiZWZvcmUgcmVhY2hpbmcgdGhlIGNoZWNrcG9pbnQKKyAqIHJl Y29yZCwgYW5kIGNhbiBpbW1lZGlhdGVseSBlbnRlciBob3Qgc3RhbmRieSBtb2RlLiBBZnRl ciB0aGlzIHBvaW50IHdlCisgKiBtdXN0IGRvIDMgdGhpbmdzOgogICoJKiBtb3ZlIHNoYXJl ZCBuZXh0WGlkIGZvcndhcmRzIGFzIHdlIHNlZSBuZXcgeGlkcwogICoJKiBleHRlbmQgdGhl IGNsb2cgYW5kIHN1YnRyYW5zIHdpdGggZWFjaCBuZXcgeGlkCi0gKgkqIGtlZXAgdHJhY2sg b2YgdW5jb21taXR0ZWQga25vd24gYXNzaWduZWQgeGlkcwogICoJKiBrZWVwIHRyYWNrIG9m IHVuY29tbWl0dGVkIEFjY2Vzc0V4Y2x1c2l2ZUxvY2tzCiAgKgotICogV2hlbiB3ZSBzZWUg YSBjb21taXQvYWJvcnQgd2UgbXVzdCByZW1vdmUga25vd24gYXNzaWduZWQgeGlkcyBhbmQg bG9ja3MKLSAqIGZyb20gdGhlIGNvbXBsZXRpbmcgdHJhbnNhY3Rpb24uIEF0dGVtcHRlZCBy ZW1vdmFscyB0aGF0IGNhbm5vdCBsb2NhdGUKLSAqIGFuIGVudHJ5IGFyZSBleHBlY3RlZCBh bmQgbXVzdCBub3QgY2F1c2UgYW4gZXJyb3Igd2hlbiB3ZSBhcmUgaW4gc3RhdGUKLSAqIFNU QU5EQllfSU5JVElBTElaRUQuIFRoaXMgaXMgaW1wbGVtZW50ZWQgaW4gU3RhbmRieVJlbGVh c2VMb2NrcygpIGFuZAotICogS25vd25Bc3NpZ25lZFhpZHNSZW1vdmUoKS4KLSAqCi0gKiBM YXRlciwgd2hlbiB3ZSBhcHBseSB0aGUgcnVubmluZyB4YWN0IGRhdGEgd2UgbXVzdCBiZSBj YXJlZnVsIHRvIGlnbm9yZQotICogdHJhbnNhY3Rpb25zIGFscmVhZHkgY29tbWl0dGVkLCBz aW5jZSB0aG9zZSBjb21taXRzIHJhY2VkIGFoZWFkIHdoZW4KLSAqIG1ha2luZyBXQUwgZW50 cmllcy4KKyAqIFdoZW4gd2Ugc2VlIGEgY29tbWl0L2Fib3J0IHdlIG11c3QgYWR2YW5jZSBv bGRlc3RfcnVubmluZ19wcmltYXJ5X3hpZCBhbmQKKyAqIHJlbW92ZSBsb2NrcyBmcm9tIHRo ZSBjb21wbGV0aW5nIHRyYW5zYWN0aW9uLiBBdHRlbXB0ZWQgcmVtb3ZhbHMgdGhhdAorICog Y2Fubm90IGxvY2F0ZSBhbiBlbnRyeSBhcmUgZXhwZWN0ZWQgYW5kIG11c3Qgbm90IGNhdXNl IGFuIGVycm9yIHVudGlsIHdlCisgKiBoYXZlIHNlZW4gdGhlIHJ1bm5pbmcteGFjdHMgcmVj b3JkLiAoV2UgZG9uJ3QgdGhyb3cgYW4gZXJyb3IgZXZlbiBhZnRlcgorICogdGhhdCwgYmVj YXVzZSB3aGF0ZXZlciB0aGUgcmVhc29uIHdhcywgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIGhh cyBjb21wbGV0ZWQKKyAqIHRoZSBpc3N1ZSBoYXMgYWxyZWFkeSBiZWVuIHJlc29sdmVkIGFu eXdheS4pIFRoaXMgaXMgaW1wbGVtZW50ZWQgaW4KKyAqIFN0YW5kYnlSZWxlYXNlTG9ja3Mo KS4KICAqCiAgKiBGb3IgbG9naWNhbCBkZWNvZGluZyBvbmx5IHRoZSBydW5uaW5nIHhhY3Rz IGluZm9ybWF0aW9uIGlzIG5lZWRlZDsKICAqIHRoZXJlJ3Mgbm8gbmVlZCB0byBsb29rIGF0 IHRoZSBsb2NraW5nIGluZm9ybWF0aW9uLCBidXQgaXQncyBsb2dnZWQgYW55d2F5LApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2x3bG9jay5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9sbWdyL2x3bG9jay5jCmluZGV4IGU3NjU3NTRkODAuLmFlMjkwNTU5MzUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sd2xvY2suYworKysgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbHdsb2NrLmMKQEAgLTEzMCw2ICsxMzAsNyBAQCBz dGF0aWMgY29uc3QgY2hhciAqY29uc3QgQnVpbHRpblRyYW5jaGVOYW1lc1tdID0gewogCVtM V1RSQU5DSEVfWEFDVF9CVUZGRVJdID0gIlhhY3RCdWZmZXIiLAogCVtMV1RSQU5DSEVfQ09N TUlUVFNfQlVGRkVSXSA9ICJDb21taXRUc0J1ZmZlciIsCiAJW0xXVFJBTkNIRV9TVUJUUkFO U19CVUZGRVJdID0gIlN1YnRyYW5zQnVmZmVyIiwKKwlbTFdUUkFOQ0hFX0NTTl9MT0dfQlVG RkVSXSA9ICJDc25Mb2dCdWZmZXIiLAogCVtMV1RSQU5DSEVfTVVMVElYQUNUT0ZGU0VUX0JV RkZFUl0gPSAiTXVsdGlYYWN0T2Zmc2V0QnVmZmVyIiwKIAlbTFdUUkFOQ0hFX01VTFRJWEFD VE1FTUJFUl9CVUZGRVJdID0gIk11bHRpWGFjdE1lbWJlckJ1ZmZlciIsCiAJW0xXVFJBTkNI RV9OT1RJRllfQlVGRkVSXSA9ICJOb3RpZnlCdWZmZXIiLApAQCAtMTY2LDYgKzE2Nyw3IEBA IHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBCdWlsdGluVHJhbmNoZU5hbWVzW10gPSB7CiAJ W0xXVFJBTkNIRV9TVUJUUkFOU19TTFJVXSA9ICJTdWJ0cmFuc1NMUlUiLAogCVtMV1RSQU5D SEVfWEFDVF9TTFJVXSA9ICJYYWN0U0xSVSIsCiAJW0xXVFJBTkNIRV9QQVJBTExFTF9WQUNV VU1fRFNBXSA9ICJQYXJhbGxlbFZhY3V1bURTQSIsCisJW0xXVFJBTkNIRV9DU05fTE9HX1NM UlVdID0gIkNzbkxvZ1NMUlUiLAogfTsKIAogU3RhdGljQXNzZXJ0RGVjbChsZW5ndGhvZihC dWlsdGluVHJhbmNoZU5hbWVzKSA9PQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv YWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rp dml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAppbmRleCBkMTBjYTcyM2RjLi4zYWVhNjJhNDll IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25h bWVzLnR4dAorKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25h bWVzLnR4dApAQCAtMzU5LDYgKzM1OSw3IEBAIFdhaXRMU04JIldhaXRpbmcgdG8gcmVhZCBv ciB1cGRhdGUgc2hhcmVkIFdhaXQtZm9yLUxTTiBzdGF0ZS4iCiBYYWN0QnVmZmVyCSJXYWl0 aW5nIGZvciBJL08gb24gYSB0cmFuc2FjdGlvbiBzdGF0dXMgU0xSVSBidWZmZXIuIgogQ29t bWl0VHNCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBhIGNvbW1pdCB0aW1lc3RhbXAgU0xS VSBidWZmZXIuIgogU3VidHJhbnNCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBhIHN1Yi10 cmFuc2FjdGlvbiBTTFJVIGJ1ZmZlci4iCitDc25sb2dCdWZmZXIJIldhaXRpbmcgZm9yIEkv TyBvbiBhIHN1Yi10cmFuc2FjdGlvbiBTTFJVIGJ1ZmZlci4iCiBNdWx0aVhhY3RPZmZzZXRC dWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBhIG11bHRpeGFjdCBvZmZzZXQgU0xSVSBidWZm ZXIuIgogTXVsdGlYYWN0TWVtYmVyQnVmZmVyCSJXYWl0aW5nIGZvciBJL08gb24gYSBtdWx0 aXhhY3QgbWVtYmVyIFNMUlUgYnVmZmVyLiIKIE5vdGlmeUJ1ZmZlcgkiV2FpdGluZyBmb3Ig SS9PIG9uIGEgPGNvbW1hbmQ+Tk9USUZZPC9jb21tYW5kPiBtZXNzYWdlIFNMUlUgYnVmZmVy LiIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL3Byb2Jlcy5kIGIvc3JjL2JhY2tl bmQvdXRpbHMvcHJvYmVzLmQKaW5kZXggZDc3MjU0NDM3Ny4uZmZiZmFlODRiOCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvcHJvYmVzLmQKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvcHJvYmVzLmQKQEAgLTc3LDYgKzc3LDggQEAgcHJvdmlkZXIgcG9zdGdyZXNxbCB7CiAJ cHJvYmUgY2xvZ19fY2hlY2twb2ludF9fZG9uZShib29sKTsKIAlwcm9iZSBzdWJ0cmFuc19f Y2hlY2twb2ludF9fc3RhcnQoYm9vbCk7CiAJcHJvYmUgc3VidHJhbnNfX2NoZWNrcG9pbnRf X2RvbmUoYm9vbCk7CisJcHJvYmUgY3NubG9nX19jaGVja3BvaW50X19zdGFydChib29sKTsK Kwlwcm9iZSBjc25sb2dfX2NoZWNrcG9pbnRfX2RvbmUoYm9vbCk7CiAJcHJvYmUgbXVsdGl4 YWN0X19jaGVja3BvaW50X19zdGFydChib29sKTsKIAlwcm9iZSBtdWx0aXhhY3RfX2NoZWNr cG9pbnRfX2RvbmUoYm9vbCk7CiAJcHJvYmUgdHdvcGhhc2VfX2NoZWNrcG9pbnRfX3N0YXJ0 KCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy90aW1lL3NuYXBtZ3IuYyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jCmluZGV4IDdkMmIzNGQ0ZjIuLmRhODJk ZWY4NDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jCkBAIC00OCw2ICs0OCw3IEBA CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAorI2luY2x1 ZGUgImFjY2Vzcy9jc25fbG9nLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3N1YnRyYW5zLmgiCiAj aW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgpA QCAtMjAxLDYgKzIwMiw3IEBAIHR5cGVkZWYgc3RydWN0IFNlcmlhbGl6ZWRTbmFwc2hvdERh dGEKIAlDb21tYW5kSWQJY3VyY2lkOwogCVRpbWVzdGFtcFR6IHdoZW5UYWtlbjsKIAlYTG9n UmVjUHRyCWxzbjsKKwlYTG9nUmVjUHRyCXNuYXBzaG90Q3NuOwogfSBTZXJpYWxpemVkU25h cHNob3REYXRhOwogCiAvKgpAQCAtMTcyOSw2ICsxNzMxLDcgQEAgU2VyaWFsaXplU25hcHNo b3QoU25hcHNob3Qgc25hcHNob3QsIGNoYXIgKnN0YXJ0X2FkZHJlc3MpCiAJc2VyaWFsaXpl ZF9zbmFwc2hvdC5jdXJjaWQgPSBzbmFwc2hvdC0+Y3VyY2lkOwogCXNlcmlhbGl6ZWRfc25h cHNob3Qud2hlblRha2VuID0gc25hcHNob3QtPndoZW5UYWtlbjsKIAlzZXJpYWxpemVkX3Nu YXBzaG90LmxzbiA9IHNuYXBzaG90LT5sc247CisJc2VyaWFsaXplZF9zbmFwc2hvdC5zbmFw c2hvdENzbiA9IHNuYXBzaG90LT5zbmFwc2hvdENzbjsKIAogCS8qCiAJICogSWdub3JlIHRo ZSBTdWJYSUQgYXJyYXkgaWYgaXQgaGFzIG92ZXJmbG93ZWQsIHVubGVzcyB0aGUgc25hcHNo b3Qgd2FzCkBAIC0xODAzLDYgKzE4MDYsNyBAQCBSZXN0b3JlU25hcHNob3QoY2hhciAqc3Rh cnRfYWRkcmVzcykKIAlzbmFwc2hvdC0+Y3VyY2lkID0gc2VyaWFsaXplZF9zbmFwc2hvdC5j dXJjaWQ7CiAJc25hcHNob3QtPndoZW5UYWtlbiA9IHNlcmlhbGl6ZWRfc25hcHNob3Qud2hl blRha2VuOwogCXNuYXBzaG90LT5sc24gPSBzZXJpYWxpemVkX3NuYXBzaG90LmxzbjsKKwlz bmFwc2hvdC0+c25hcHNob3RDc24gPSBzZXJpYWxpemVkX3NuYXBzaG90LnNuYXBzaG90Q3Nu OwogCXNuYXBzaG90LT5zbmFwWGFjdENvbXBsZXRpb25Db3VudCA9IDA7CiAKIAkvKiBDb3B5 IFhJRHMsIGlmIHByZXNlbnQuICovCkBAIC0xOTEzLDM2ICsxOTE3LDExIEBAIFhpZEluTVZD Q1NuYXBzaG90KFRyYW5zYWN0aW9uSWQgeGlkLCBTbmFwc2hvdCBzbmFwc2hvdCkKIAl9CiAJ ZWxzZQogCXsKLQkJLyoKLQkJICogSW4gcmVjb3Zlcnkgd2Ugc3RvcmUgYWxsIHhpZHMgaW4g dGhlIHN1YnhpcCBhcnJheSBiZWNhdXNlIGl0IGlzIGJ5Ci0JCSAqIGZhciB0aGUgYmlnZ2Vy IGFycmF5LCBhbmQgd2UgbW9zdGx5IGRvbid0IGtub3cgd2hpY2ggeGlkcyBhcmUKLQkJICog dG9wLWxldmVsIGFuZCB3aGljaCBhcmUgc3VieGFjdHMuIFRoZSB4aXAgYXJyYXkgaXMgZW1w dHkuCi0JCSAqCi0JCSAqIFdlIHN0YXJ0IGJ5IHNlYXJjaGluZyBzdWJ0cmFucywgaWYgd2Ug b3ZlcmZsb3dlZC4KLQkJICovCi0JCWlmIChzbmFwc2hvdC0+c3Vib3ZlcmZsb3dlZCkKLQkJ ewotCQkJLyoKLQkJCSAqIFNuYXBzaG90IG92ZXJmbG93ZWQsIHNvIGNvbnZlcnQgeGlkIHRv IHRvcC1sZXZlbC4gIFRoaXMgaXMgc2FmZQotCQkJICogYmVjYXVzZSB3ZSBlbGltaW5hdGVk IHRvby1vbGQgWElEcyBhYm92ZS4KLQkJCSAqLwotCQkJeGlkID0gU3ViVHJhbnNHZXRUb3Bt b3N0VHJhbnNhY3Rpb24oeGlkKTsKKwkJWExvZ1JlY1B0cgljc24gPSBDU05Mb2dHZXRDU05C eVhpZCh4aWQpOwogCi0JCQkvKgotCQkJICogSWYgeGlkIHdhcyBpbmRlZWQgYSBzdWJ4YWN0 LCB3ZSBtaWdodCBub3cgaGF2ZSBhbiB4aWQgPCB4bWluLAotCQkJICogc28gcmVjaGVjayB0 byBhdm9pZCBhbiBhcnJheSBzY2FuLiAgTm8gcG9pbnQgaW4gcmVjaGVja2luZwotCQkJICog eG1heC4KLQkJCSAqLwotCQkJaWYgKFRyYW5zYWN0aW9uSWRQcmVjZWRlcyh4aWQsIHNuYXBz aG90LT54bWluKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQkvKgotCQkgKiBXZSBu b3cgaGF2ZSBlaXRoZXIgYSB0b3AtbGV2ZWwgeGlkIGhpZ2hlciB0aGFuIHhtaW4gb3IgYW4K LQkJICogaW5kZXRlcm1pbmF0ZSB4aWQuIFdlIGRvbid0IGtub3cgd2hldGhlciBpdCdzIHRv cCBsZXZlbCBvciBzdWJ4YWN0Ci0JCSAqIGJ1dCBpdCBkb2Vzbid0IG1hdHRlci4gSWYgaXQn cyBwcmVzZW50LCB0aGUgeGlkIGlzIHZpc2libGUuCi0JCSAqLwotCQlpZiAocGdfbGZpbmQz Mih4aWQsIHNuYXBzaG90LT5zdWJ4aXAsIHNuYXBzaG90LT5zdWJ4Y250KSkKKwkJaWYgKGNz biAhPSBJbnZhbGlkWExvZ1JlY1B0ciAmJiBjc24gPD0gc25hcHNob3QtPnNuYXBzaG90Q3Nu KQorCQkJcmV0dXJuIGZhbHNlOworCQllbHNlCiAJCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vaW5pdGRiL2luaXRkYi5jIGIvc3JjL2Jpbi9pbml0ZGIvaW5p dGRiLmMKaW5kZXggZjAwNzE4YTAxNS4uNzlhZDdkNjk5NiAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9pbml0ZGIvaW5pdGRiLmMKKysrIGIvc3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMKQEAgLTI0 OSw3ICsyNDksOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3ViZGlyc1tdID0gewog CSJwZ194YWN0IiwKIAkicGdfbG9naWNhbCIsCiAJInBnX2xvZ2ljYWwvc25hcHNob3RzIiwK LQkicGdfbG9naWNhbC9tYXBwaW5ncyIKKwkicGdfbG9naWNhbC9tYXBwaW5ncyIsCisJInBn X2NzbiIKIH07CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2Nzbl9sb2cu aCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9jc25fbG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uZjhjZGY1NzNhZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9jc25fbG9nLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIGNzbl9s b2cuaAorICoKKyAqIE1hcHBpbmcgZnJvbSBYSUQgdG8gY29tbWl0IHJlY29yZCdzIExTTiAo Q29tbWl0IFNlcXVlbmNlIE51bWJlcikuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk2LTIwMTQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg b2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL2FjY2Vzcy9jc25fbG9nLmgKKyAq LworI2lmbmRlZiBDU05MT0dfSAorI2RlZmluZSBDU05MT0dfSAorCisjaW5jbHVkZSAiYWNj ZXNzL3hsb2cuaCIKKyNpbmNsdWRlICJ1dGlscy9zbmFwc2hvdC5oIgorCitleHRlcm4gdm9p ZCBDU05Mb2dTZXRDU04oVHJhbnNhY3Rpb25JZCB4aWQsIGludCBuc3VieGlkcywKKwkJCQkJ CSBUcmFuc2FjdGlvbklkICpzdWJ4aWRzLCBYTG9nUmVjUHRyIGNzbik7CitleHRlcm4gWExv Z1JlY1B0ciBDU05Mb2dHZXRDU05CeVhpZChUcmFuc2FjdGlvbklkIHhpZCk7CisKK2V4dGVy biBTaXplIENTTkxvZ1NobWVtU2l6ZSh2b2lkKTsKK2V4dGVybiB2b2lkIENTTkxvZ1NobWVt SW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIEJvb3RTdHJhcENTTkxvZyh2b2lkKTsKK2V4dGVy biB2b2lkIFN0YXJ0dXBDU05Mb2coVHJhbnNhY3Rpb25JZCBvbGRlc3RBY3RpdmVYSUQsIFhM b2dSZWNQdHIgY3NuKTsKK2V4dGVybiB2b2lkIFNodXRkb3duQ1NOTG9nKHZvaWQpOworZXh0 ZXJuIHZvaWQgQ2hlY2tQb2ludENTTkxvZyh2b2lkKTsKK2V4dGVybiB2b2lkIEV4dGVuZENT TkxvZyhUcmFuc2FjdGlvbklkIG5ld2VzdFhhY3QpOworZXh0ZXJuIHZvaWQgVHJ1bmNhdGVD U05Mb2coVHJhbnNhY3Rpb25JZCBvbGRlc3RYYWN0KTsKKworI2VuZGlmCQkJCQkJCS8qIENT TkxPR19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHJhbnNhbS5oIGIv c3JjL2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaAppbmRleCAyOGEyZDI4N2ZkLi5hNzA1NGZl MTFjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHJhbnNhbS5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy90cmFuc2FtLmgKQEAgLTIzOCw2ICsyMzgsOSBAQCB0eXBlZGVm IHN0cnVjdCBUcmFuc2FtVmFyaWFibGVzRGF0YQogCUZ1bGxUcmFuc2FjdGlvbklkIGxhdGVz dENvbXBsZXRlZFhpZDsJLyogbmV3ZXN0IGZ1bGwgWElEIHRoYXQgaGFzCiAJCQkJCQkJCQkJ CSAqIGNvbW1pdHRlZCBvciBhYm9ydGVkICovCiAKKwkvKiBEdXJpbmcgcmVjb3ZlcnksIExT TiBvZiBsYXRlc3QgcmVwbGF5ZWQgY29tbWl0IHJlY29yZCAqLworCVhMb2dSZWNQdHIJbGF0 ZXN0Q29tbWl0TFNOOworCiAJLyoKIAkgKiBOdW1iZXIgb2YgdG9wLWxldmVsIHRyYW5zYWN0 aW9ucyB3aXRoIHhpZHMgKGkuZS4gd2hpY2ggbWF5IGhhdmUKIAkgKiBtb2RpZmllZCB0aGUg ZGF0YWJhc2UpIHRoYXQgY29tcGxldGVkIGluIHNvbWUgZm9ybSBzaW5jZSB0aGUgc3RhcnQg b2YKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90d29waGFzZS5oIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3R3b3BoYXNlLmgKaW5kZXggYjg1YjY1YzYwNC4uNThlZDBmYzAzOCAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3R3b3BoYXNlLmgKKysrIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3R3b3BoYXNlLmgKQEAgLTQ3LDggKzQ3LDcgQEAgZXh0ZXJuIHZvaWQg U3RhcnRQcmVwYXJlKEdsb2JhbFRyYW5zYWN0aW9uIGd4YWN0KTsKIGV4dGVybiB2b2lkIEVu ZFByZXBhcmUoR2xvYmFsVHJhbnNhY3Rpb24gZ3hhY3QpOwogZXh0ZXJuIGJvb2wgU3RhbmRi eVRyYW5zYWN0aW9uSWRJc1ByZXBhcmVkKFRyYW5zYWN0aW9uSWQgeGlkKTsKIAotZXh0ZXJu IFRyYW5zYWN0aW9uSWQgUHJlc2NhblByZXBhcmVkVHJhbnNhY3Rpb25zKFRyYW5zYWN0aW9u SWQgKip4aWRzX3AsCi0JCQkJCQkJCQkJCQkgaW50ICpueGlkc19wKTsKK2V4dGVybiBUcmFu c2FjdGlvbklkIFByZXNjYW5QcmVwYXJlZFRyYW5zYWN0aW9ucyh2b2lkKTsKIGV4dGVybiB2 b2lkIFN0YW5kYnlSZWNvdmVyUHJlcGFyZWRUcmFuc2FjdGlvbnModm9pZCk7CiBleHRlcm4g dm9pZCBSZWNvdmVyUHJlcGFyZWRUcmFuc2FjdGlvbnModm9pZCk7CiAKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2FjY2Vzcy94YWN0LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGFjdC5o CmluZGV4IDZkNDQzOWYwNTIuLmRmMGFmNWVhMjAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy94YWN0LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hhY3QuaApAQCAtMTcx LDcgKzE3MSw3IEBAIHR5cGVkZWYgc3RydWN0IFNhdmVkVHJhbnNhY3Rpb25DaGFyYWN0ZXJp c3RpY3MKICNkZWZpbmUgWExPR19YQUNUX0FCT1JUCQkJCTB4MjAKICNkZWZpbmUgWExPR19Y QUNUX0NPTU1JVF9QUkVQQVJFRAkweDMwCiAjZGVmaW5lIFhMT0dfWEFDVF9BQk9SVF9QUkVQ QVJFRAkweDQwCi0jZGVmaW5lIFhMT0dfWEFDVF9BU1NJR05NRU5UCQkweDUwCisvKiAweDUw IGlzIHVudXNlZCwgd2FzIFhMT0dfWEFDVF9BU1NJR05NRU5UICovCiAjZGVmaW5lIFhMT0df WEFDVF9JTlZBTElEQVRJT05TCQkweDYwCiAvKiBmcmVlIG9wY29kZSAweDcwICovCiAKQEAg LTIxNSwxNSArMjE1LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgU2F2ZWRUcmFuc2FjdGlvbkNoYXJh Y3RlcmlzdGljcwogI2RlZmluZSBYYWN0Q29tcGxldGlvbkZvcmNlU3luY0NvbW1pdCh4aW5m bykgXAogCSgoeGluZm8gJiBYQUNUX0NPTVBMRVRJT05fRk9SQ0VfU1lOQ19DT01NSVQpICE9 IDApCiAKLXR5cGVkZWYgc3RydWN0IHhsX3hhY3RfYXNzaWdubWVudAotewotCVRyYW5zYWN0 aW9uSWQgeHRvcDsJCQkvKiBhc3NpZ25lZCBYSUQncyB0b3AtbGV2ZWwgWElEICovCi0JaW50 CQkJbnN1YnhhY3RzOwkJLyogbnVtYmVyIG9mIHN1YnRyYW5zYWN0aW9uIFhJRHMgKi8KLQlU cmFuc2FjdGlvbklkIHhzdWJbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsJLyogYXNzaWduZWQg c3VieGlkcyAqLwotfSB4bF94YWN0X2Fzc2lnbm1lbnQ7Ci0KLSNkZWZpbmUgTWluU2l6ZU9m WGFjdEFzc2lnbm1lbnQgb2Zmc2V0b2YoeGxfeGFjdF9hc3NpZ25tZW50LCB4c3ViKQotCiAv KgogICogQ29tbWl0IGFuZCBhYm9ydCByZWNvcmRzIGNhbiBjb250YWluIGEgbG90IG9mIGlu Zm9ybWF0aW9uLiBCdXQgYSBsYXJnZQogICogcG9ydGlvbiBvZiB0aGUgcmVjb3JkcyB3b24n dCBuZWVkIGFsbCBwb3NzaWJsZSBwaWVjZXMgb2YgaW5mb3JtYXRpb24uIFNvIHdlCkBAIC00 NDIsNyArNDMzLDYgQEAgZXh0ZXJuIEZ1bGxUcmFuc2FjdGlvbklkIEdldFRvcEZ1bGxUcmFu c2FjdGlvbklkKHZvaWQpOwogZXh0ZXJuIEZ1bGxUcmFuc2FjdGlvbklkIEdldFRvcEZ1bGxU cmFuc2FjdGlvbklkSWZBbnkodm9pZCk7CiBleHRlcm4gRnVsbFRyYW5zYWN0aW9uSWQgR2V0 Q3VycmVudEZ1bGxUcmFuc2FjdGlvbklkKHZvaWQpOwogZXh0ZXJuIEZ1bGxUcmFuc2FjdGlv bklkIEdldEN1cnJlbnRGdWxsVHJhbnNhY3Rpb25JZElmQW55KHZvaWQpOwotZXh0ZXJuIHZv aWQgTWFya0N1cnJlbnRUcmFuc2FjdGlvbklkTG9nZ2VkSWZBbnkodm9pZCk7CiBleHRlcm4g Ym9vbCBTdWJUcmFuc2FjdGlvbklzQWN0aXZlKFN1YlRyYW5zYWN0aW9uSWQgc3VieGlkKTsK IGV4dGVybiBDb21tYW5kSWQgR2V0Q3VycmVudENvbW1hbmRJZChib29sIHVzZWQpOwogZXh0 ZXJuIHZvaWQgU2V0UGFyYWxsZWxTdGFydFRpbWVzdGFtcHMoVGltZXN0YW1wVHogeGFjdF90 cywgVGltZXN0YW1wVHogc3RtdF90cyk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MveGxvZ3V0aWxzLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3V0aWxzLmgKaW5kZXgg MjA5NTBjZTAzMy4uMTljYjVmMzNiZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L3hsb2d1dGlscy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ndXRpbHMuaApAQCAt MjcsMzcgKzI3LDEwIEBAIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGlnbm9yZV9pbnZhbGlk X3BhZ2VzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgSW5SZWNvdmVyeTsKIAogLyoKLSAq IExpa2UgSW5SZWNvdmVyeSwgc3RhbmRieVN0YXRlIGlzIG9ubHkgdmFsaWQgaW4gdGhlIHN0 YXJ0dXAgcHJvY2Vzcy4KLSAqIEluIGFsbCBvdGhlciBwcm9jZXNzZXMgaXQgd2lsbCBoYXZl IHRoZSB2YWx1ZSBTVEFOREJZX0RJU0FCTEVEIChzbwotICogSW5Ib3RTdGFuZGJ5IHdpbGwg cmVhZCBhcyBmYWxzZSkuCi0gKgotICogSW4gRElTQUJMRUQgc3RhdGUsIHdlJ3JlIHBlcmZv cm1pbmcgY3Jhc2ggcmVjb3Zlcnkgb3IgaG90IHN0YW5kYnkgd2FzCi0gKiBkaXNhYmxlZCBp biBwb3N0Z3Jlc3FsLmNvbmYuCi0gKgotICogSW4gSU5JVElBTElaRUQgc3RhdGUsIHdlJ3Zl IHJ1biBJbml0UmVjb3ZlcnlUcmFuc2FjdGlvbkVudmlyb25tZW50LCBidXQKLSAqIHdlIGhh dmVuJ3QgeWV0IHByb2Nlc3NlZCBhIFJVTk5JTkdfWEFDVFMgb3Igc2h1dGRvd24tY2hlY2tw b2ludCBXQUwgcmVjb3JkCi0gKiB0byBpbml0aWFsaXplIG91ciBwcmltYXJ5LXRyYW5zYWN0 aW9uIHRyYWNraW5nIHN5c3RlbS4KLSAqCi0gKiBXaGVuIHRoZSB0cmFuc2FjdGlvbiB0cmFj a2luZyBpcyBpbml0aWFsaXplZCwgd2UgZW50ZXIgdGhlIFNOQVBTSE9UX1BFTkRJTkcKLSAq IHN0YXRlLiBUaGUgdHJhY2tlZCBpbmZvcm1hdGlvbiBtaWdodCBzdGlsbCBiZSBpbmNvbXBs ZXRlLCBzbyB3ZSBjYW4ndCBhbGxvdwotICogY29ubmVjdGlvbnMgeWV0LCBidXQgcmVkbyBm dW5jdGlvbnMgbXVzdCB1cGRhdGUgdGhlIGluLW1lbW9yeSBzdGF0ZSB3aGVuCi0gKiBhcHBy b3ByaWF0ZS4KLSAqCi0gKiBJbiBTTkFQU0hPVF9SRUFEWSBtb2RlLCB3ZSBoYXZlIGZ1bGwg a25vd2xlZGdlIG9mIHRyYW5zYWN0aW9ucyB0aGF0IGFyZQotICogKG9yIHdlcmUpIHJ1bm5p bmcgb24gdGhlIHByaW1hcnkgYXQgdGhlIGN1cnJlbnQgV0FMIGxvY2F0aW9uLiBTbmFwc2hv dHMKLSAqIGNhbiBiZSB0YWtlbiwgYW5kIHJlYWQtb25seSBxdWVyaWVzIGNhbiBiZSBydW4u CisgKiBMaWtlIEluUmVjb3ZlcnksIEluSG90U3RhbmRieSBpcyBvbmx5IHZhbGlkIGluIHRo ZSBzdGFydHVwIHByb2Nlc3MuCisgKiBJbiBhbGwgb3RoZXIgcHJvY2Vzc2VzIGl0IHdpbGwg YmUgZmFsc2UuCiAgKi8KLXR5cGVkZWYgZW51bQotewotCVNUQU5EQllfRElTQUJMRUQsCi0J U1RBTkRCWV9JTklUSUFMSVpFRCwKLQlTVEFOREJZX1NOQVBTSE9UX1BFTkRJTkcsCi0JU1RB TkRCWV9TTkFQU0hPVF9SRUFEWSwKLX0gSG90U3RhbmRieVN0YXRlOwotCi1leHRlcm4gUEdE TExJTVBPUlQgSG90U3RhbmRieVN0YXRlIHN0YW5kYnlTdGF0ZTsKLQotI2RlZmluZSBJbkhv dFN0YW5kYnkgKHN0YW5kYnlTdGF0ZSA+PSBTVEFOREJZX1NOQVBTSE9UX1BFTkRJTkcpCitl eHRlcm4gUEdETExJTVBPUlQgYm9vbCBJbkhvdFN0YW5kYnk7CiAKIAogZXh0ZXJuIGJvb2wg WExvZ0hhdmVJbnZhbGlkUGFnZXModm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9z dG9yYWdlL2x3bG9jay5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2suaAppbmRleCBk NzBlNmQzN2UwLi5jMjE1NmFjYTEyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdl L2x3bG9jay5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrLmgKQEAgLTE3OSw2 ICsxNzksNyBAQCB0eXBlZGVmIGVudW0gQnVpbHRpblRyYW5jaGVJZHMKIAlMV1RSQU5DSEVf WEFDVF9CVUZGRVIgPSBOVU1fSU5ESVZJRFVBTF9MV0xPQ0tTLAogCUxXVFJBTkNIRV9DT01N SVRUU19CVUZGRVIsCiAJTFdUUkFOQ0hFX1NVQlRSQU5TX0JVRkZFUiwKKwlMV1RSQU5DSEVf Q1NOX0xPR19CVUZGRVIsCiAJTFdUUkFOQ0hFX01VTFRJWEFDVE9GRlNFVF9CVUZGRVIsCiAJ TFdUUkFOQ0hFX01VTFRJWEFDVE1FTUJFUl9CVUZGRVIsCiAJTFdUUkFOQ0hFX05PVElGWV9C VUZGRVIsCkBAIC0yMTUsNiArMjE2LDcgQEAgdHlwZWRlZiBlbnVtIEJ1aWx0aW5UcmFuY2hl SWRzCiAJTFdUUkFOQ0hFX1NVQlRSQU5TX1NMUlUsCiAJTFdUUkFOQ0hFX1hBQ1RfU0xSVSwK IAlMV1RSQU5DSEVfUEFSQUxMRUxfVkFDVVVNX0RTQSwKKwlMV1RSQU5DSEVfQ1NOX0xPR19T TFJVLAogCUxXVFJBTkNIRV9GSVJTVF9VU0VSX0RFRklORUQsCiB9CQkJQnVpbHRpblRyYW5j aGVJZHM7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5Lmgg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oCmluZGV4IDhjYTYwNTA0NjIuLjdi N2NiZjQ3YWEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmgK KysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaApAQCAtMjgsMTggKzI4LDEx IEBAIGV4dGVybiB2b2lkIFByb2NBcnJheVJlbW92ZShQR1BST0MgKnByb2MsIFRyYW5zYWN0 aW9uSWQgbGF0ZXN0WGlkKTsKIGV4dGVybiB2b2lkIFByb2NBcnJheUVuZFRyYW5zYWN0aW9u KFBHUFJPQyAqcHJvYywgVHJhbnNhY3Rpb25JZCBsYXRlc3RYaWQpOwogZXh0ZXJuIHZvaWQg UHJvY0FycmF5Q2xlYXJUcmFuc2FjdGlvbihQR1BST0MgKnByb2MpOwogCitleHRlcm4gdm9p ZCBQcm9jQXJyYXlVcGRhdGVPbGRlc3RSdW5uaW5nWGlkKFRyYW5zYWN0aW9uSWQgb2xkZXN0 UnVubmluZ1hJRCk7CiBleHRlcm4gdm9pZCBQcm9jQXJyYXlJbml0UmVjb3ZlcnkoVHJhbnNh Y3Rpb25JZCBpbml0aWFsaXplZFVwdG9YSUQpOwotZXh0ZXJuIHZvaWQgUHJvY0FycmF5QXBw bHlSZWNvdmVyeUluZm8oUnVubmluZ1RyYW5zYWN0aW9ucyBydW5uaW5nKTsKLWV4dGVybiB2 b2lkIFByb2NBcnJheUFwcGx5WGlkQXNzaWdubWVudChUcmFuc2FjdGlvbklkIHRvcHhpZCwK LQkJCQkJCQkJCQlpbnQgbnN1YnhpZHMsIFRyYW5zYWN0aW9uSWQgKnN1YnhpZHMpOwogCiBl eHRlcm4gdm9pZCBSZWNvcmRLbm93bkFzc2lnbmVkVHJhbnNhY3Rpb25JZHMoVHJhbnNhY3Rp b25JZCB4aWQpOwotZXh0ZXJuIHZvaWQgRXhwaXJlVHJlZUtub3duQXNzaWduZWRUcmFuc2Fj dGlvbklkcyhUcmFuc2FjdGlvbklkIHhpZCwKLQkJCQkJCQkJCQkJCSAgaW50IG5zdWJ4aWRz LCBUcmFuc2FjdGlvbklkICpzdWJ4aWRzLAotCQkJCQkJCQkJCQkJICBUcmFuc2FjdGlvbklk IG1heF94aWQpOwotZXh0ZXJuIHZvaWQgRXhwaXJlQWxsS25vd25Bc3NpZ25lZFRyYW5zYWN0 aW9uSWRzKHZvaWQpOwotZXh0ZXJuIHZvaWQgRXhwaXJlT2xkS25vd25Bc3NpZ25lZFRyYW5z YWN0aW9uSWRzKFRyYW5zYWN0aW9uSWQgeGlkKTsKLWV4dGVybiB2b2lkIEtub3duQXNzaWdu ZWRUcmFuc2FjdGlvbklkc0lkbGVNYWludGVuYW5jZSh2b2lkKTsKK2V4dGVybiB2b2lkIFBy b2NBcnJheVJlY292ZXJ5RW5kVHJhbnNhY3Rpb24oVHJhbnNhY3Rpb25JZCBtYXhfeGlkLCBY TG9nUmVjUHRyIGxzbik7CiAKIGV4dGVybiBpbnQJR2V0TWF4U25hcHNob3RYaWRDb3VudCh2 b2lkKTsKIGV4dGVybiBpbnQJR2V0TWF4U25hcHNob3RTdWJ4aWRDb3VudCh2b2lkKTsKQEAg LTU2LDcgKzQ5LDcgQEAgZXh0ZXJuIGJvb2wgVHJhbnNhY3Rpb25JZElzSW5Qcm9ncmVzcyhU cmFuc2FjdGlvbklkIHhpZCk7CiBleHRlcm4gYm9vbCBUcmFuc2FjdGlvbklkSXNBY3RpdmUo VHJhbnNhY3Rpb25JZCB4aWQpOwogZXh0ZXJuIFRyYW5zYWN0aW9uSWQgR2V0T2xkZXN0Tm9u UmVtb3ZhYmxlVHJhbnNhY3Rpb25JZChSZWxhdGlvbiByZWwpOwogZXh0ZXJuIFRyYW5zYWN0 aW9uSWQgR2V0T2xkZXN0VHJhbnNhY3Rpb25JZENvbnNpZGVyZWRSdW5uaW5nKHZvaWQpOwot ZXh0ZXJuIFRyYW5zYWN0aW9uSWQgR2V0T2xkZXN0QWN0aXZlVHJhbnNhY3Rpb25JZCh2b2lk KTsKK2V4dGVybiBUcmFuc2FjdGlvbklkIEdldE9sZGVzdEFjdGl2ZVRyYW5zYWN0aW9uSWQo Ym9vbCBhbGxEYnMpOwogZXh0ZXJuIFRyYW5zYWN0aW9uSWQgR2V0T2xkZXN0U2FmZURlY29k aW5nVHJhbnNhY3Rpb25JZChib29sIGNhdGFsb2dPbmx5KTsKIGV4dGVybiB2b2lkIEdldFJl cGxpY2F0aW9uSG9yaXpvbnMoVHJhbnNhY3Rpb25JZCAqeG1pbiwgVHJhbnNhY3Rpb25JZCAq Y2F0YWxvZ194bWluKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvc25hcHNo b3QuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3NuYXBzaG90LmgKaW5kZXggOGQxZTMxZTg4OC4u MWZkYTViMDZmNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvc25hcHNob3QuaAor KysgYi9zcmMvaW5jbHVkZS91dGlscy9zbmFwc2hvdC5oCkBAIC0xODEsNiArMTgxLDEzIEBA IHR5cGVkZWYgc3RydWN0IFNuYXBzaG90RGF0YQogCWludDMyCQlzdWJ4Y250OwkJLyogIyBv ZiB4YWN0IGlkcyBpbiBzdWJ4aXBbXSAqLwogCWJvb2wJCXN1Ym92ZXJmbG93ZWQ7CS8qIGhh cyB0aGUgc3VieGlwIGFycmF5IG92ZXJmbG93ZWQ/ICovCiAKKwkvKgorCSAqIE1WQ0Mgc25h cHNob3RzIHRha2VuIGR1cmluZyByZWNvdmVyeSB1c2UgdGhpcyBDU04gaW5zdGVhZCBvZiB0 aGUgeGlwCisJICogYW5kIHN1YnhpcCBhcnJheXMuIEFueSB0cmFuc2FjdGlvbnMgdGhhdCBj b21taXR0ZWQgYXQgb3IgYmVmb3JlIHRoaXMKKwkgKiBMU04gYXJlIGNvbnNpZGVyZWQgYXMg dmlzaWJsZS4KKwkgKi8KKwlYTG9nUmVjUHRyCXNuYXBzaG90Q3NuOworCiAJYm9vbAkJdGFr ZW5EdXJpbmdSZWNvdmVyeTsJLyogcmVjb3Zlcnktc2hhcGVkIHNuYXBzaG90PyAqLwogCWJv b2wJCWNvcGllZDsJCQkvKiBmYWxzZSBpZiBpdCdzIGEgc3RhdGljIHNuYXBzaG90ICovCiAK LS0gCjIuMzkuMgoK --------------Hl0qoWw0UQ5NKOkmbgJFwkxU Content-Type: text/x-patch; charset=UTF-8; name="v2-0004-Make-SnapBuildWaitSnapshot-work-without-xl_runnin.patch" Content-Disposition: attachment; filename*0="v2-0004-Make-SnapBuildWaitSnapshot-work-without-xl_runnin.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA3Mzc5OTZkMTM5YTE5MmFkM2RlMjA3MzgwZGFkOTFjYzRiNGRmOGU4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFR1ZSwgMTMgQXVnIDIwMjQgMjA6MDE6MDcgKzAzMDAK U3ViamVjdDogW1BBVENIIHYyIDQvNl0gTWFrZSBTbmFwQnVpbGRXYWl0U25hcHNob3Qgd29y ayB3aXRob3V0CiB4bF9ydW5uaW5nX3hhY3RzLnhpZHMgYXJyYXkKClNuYXBCdWlsZFdhaXRT bmFwc2hvdCBsb29wZWQgdGhyb3VnaCBhbGwgdGhlIFhJRHMgaW4gdGhlCnhsX3J1bm5pbmdf eGFjdHMsIHdhaXRpbmcgZm9yIHRoZW0gdG8gZmluaXNoLiBDaGFuZ2UgaXQgdG8gZ3JhYiB0 aGUKbGlzdCBvZiBydW5uaW5nIFhJRHMgZnJvbSB0aGUgcHJvYyBhcnJheSBpbnN0ZWFkLiBU aGlzIHJlbW92ZXMgdGhlCmxhc3QgdXNhZ2Ugb2YgaGUgWElEcyBhcnJheSBpbiB0aGUgeGxf cnVubmluZ194YWN0cyByZWNvcmQsIGFsbG93aW5nCml0IHRvIGJlIHJlbW92ZWQgaW4gdGhl IG5leHQgY29tbWl0LgoKV2hlbiBTbmFwQnVpbGRXYWl0U25hcHNob3QoKSBpcyBjYWxsZWQg d2l0aCBydW5uaW5nLT5uZXh0WGlkIGFzIHRoZQonY3V0b2ZmJyBwb2ludCwgdGhlIG5ldyBj b2RlIHNob3VsZCB3YWl0IGZvciBleGFjdGx5IHRoZSBzYW1lIHNldCBvZgp0cmFuc2FjdGlv bnMgYXMgYmVmb3JlLiBCdXQgd2hlbiBjYWxsZWQgd2l0aCBpbml0aWFsX3htaW5faG9yaXpv biBhcwp0aGUgJ2N1dG9mZicsIHRoaXMgbWlnaHQgd2FpdCBmb3IgbW9yZSB0cmFuc2FjdGlv bnMgdGhhbiBiZWZvcmU6IHRob3NlCmJldHdlZW4gcnVubmluZy0+bmV4dFhpZCBhbmQgaW5p dGlhbF94bWluX2hvcml6b24uIEZvciBleGFtcGxlLAppbWFnaW5lIHRoYXQgd2Ugc2VlIGEg cnVubmluZy14YWN0cyByZWNvcmQgd2l0aCBuZXh0WGlkIDEwMCwgYW5kCmluaXRpYWxfeG1p bl9ob3Jpem9uIGlzIDIwMC4gQmVmb3JlLCB3ZSB3b3VsZCB3YWl0IGZvciBhbGwgWElEcyA8 IDEwMAp0byBjb21wbGV0ZSwgYW5kIHRoZW4gbG9nIHRoZSBzdGFuZGJ5IHNuYXBzaG90IGFu ZCBwcm9jZWVkLCBidXQgbm93IHdlCndpbGwgd2FpdCBmb3IgYWxsIFhJRHMgPCAyMDAuIEkg YmVsaWV2ZSB0aGF0J3MgYSBnb29kIHRoaW5nLCBiZWNhdXNlCndlIHdvbid0IGFjdHVhbGx5 IGJlIGFibGUgdG8gbW92ZSB0byB0aGUgbmV4dCBzdGF0ZSBpbiB0aGUgc25hcHNob3QKYnVp bGRpbmcgdW50aWwgYWxsIHRyYW5zYWN0aW9ucyA8IDIwMCBoYXZlIGNvbXBsZXRlZC4gVGhl CnJ1bm5pbmcteGFjdHMgc25hcHNob3QgdGhhdCB3ZSBsb2dnZWQgYWZ0ZXIgd2FpdGluZyB1 cCB0byBYSUQgMTAwCndvdWxkIG5vdCBiZSB1c2VmdWwgdG8gdXMgZWl0aGVyLCBpZiB0aGVy ZSBhcmUgc3RpbGwgWElEcyBiZXR3ZWVuIDEwMAphbmQgMjAwIHJ1bm5pbmcuCgpTbmFwQnVp bGRXYWl0U25hcHNob3QoKSB1c2VkIHRvIGRvIHVzZWxlc3Mgd29yayB3aGVuIGNhbGxlZCBp biBhCnN0YW5kYnksIGJlY2F1c2UgaW4gYSBzdGFuZGJ5LCB0aGVyZSBhcmUgbm8gWElEIGxv Y2tzIGFuZCB0aGUKWGFjdExvY2tUYWJsZVdhaXQoKSBjYWxscyByZXR1cm5lZCBpbW1lZGlh dGVseSwgZXZlbiBpZiB0aGUgWElEcyB3ZXJlCmluIGZhY3Qgc3RpbGwgcnVubmluZyBpbiB0 aGUgcHJpbWFyeS4gQnV0IGFzIHRoZSBjb21tZW50IHNheXMsIHRoZQp3YWl0aW5nIGlzbid0 IG5lY2Vzc2FyeSBmb3IgY29ycmVjdG5lc3MsIHNvIHRoYXQgd2FzIGhhcm1sZXNzLiBJbiBh bnkKY2FzZSwgc3RvcCBkb2luZyB0aGUgZnV0aWxlIHdvcmsgb24gYSBzdGFuZGJ5LgotLS0K IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMgfCA1MCArKysr KysrKysrKysrKy0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAzNCBpbnNlcnRpb25zKCspLCAx NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3NuYXBidWlsZC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9z bmFwYnVpbGQuYwppbmRleCBlYTJmOGUyNWNkLi5kNTMxNWVmZTJiIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3NuYXBidWlsZC5jCisrKyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMKQEAgLTMwNyw3ICszMDcs NyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgU25hcEJ1aWxkWGlkSGFzQ2F0YWxvZ0NoYW5nZXMo U25hcEJ1aWxkICpidWlsZGVyLCBUcmFuc2FjdGlvbgogCiAvKiB4bG9nIHJlYWRpbmcgaGVs cGVyIGZ1bmN0aW9ucyBmb3IgU25hcEJ1aWxkUHJvY2Vzc1J1bm5pbmdYYWN0cyAqLwogc3Rh dGljIGJvb2wgU25hcEJ1aWxkRmluZFNuYXBzaG90KFNuYXBCdWlsZCAqYnVpbGRlciwgWExv Z1JlY1B0ciBsc24sIHhsX3J1bm5pbmdfeGFjdHMgKnJ1bm5pbmcpOwotc3RhdGljIHZvaWQg U25hcEJ1aWxkV2FpdFNuYXBzaG90KHhsX3J1bm5pbmdfeGFjdHMgKnJ1bm5pbmcsIFRyYW5z YWN0aW9uSWQgY3V0b2ZmKTsKK3N0YXRpYyB2b2lkIFNuYXBCdWlsZFdhaXRTbmFwc2hvdChU cmFuc2FjdGlvbklkIGN1dG9mZik7CiAKIC8qIHNlcmlhbGl6YXRpb24gZnVuY3Rpb25zICov CiBzdGF0aWMgdm9pZCBTbmFwQnVpbGRTZXJpYWxpemUoU25hcEJ1aWxkICpidWlsZGVyLCBY TG9nUmVjUHRyIGxzbik7CkBAIC0xMzYxLDE0ICsxMzYxLDE3IEBAIFNuYXBCdWlsZEZpbmRT bmFwc2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNuLCB4bF9ydW5uaW5n X3hhY3RzICpydW5uCiAJCU5vcm1hbFRyYW5zYWN0aW9uSWRQcmVjZWRlcyhydW5uaW5nLT5v bGRlc3RSdW5uaW5nWGlkLAogCQkJCQkJCQkJYnVpbGRlci0+aW5pdGlhbF94bWluX2hvcml6 b24pKQogCXsKKwkJVHJhbnNhY3Rpb25JZCBjdXRvZmY7CisKIAkJZXJlcG9ydChERUJVRzEs CiAJCQkJKGVycm1zZ19pbnRlcm5hbCgic2tpcHBpbmcgc25hcHNob3QgYXQgJVgvJVggd2hp bGUgYnVpbGRpbmcgbG9naWNhbCBkZWNvZGluZyBzbmFwc2hvdCwgeG1pbiBob3Jpem9uIHRv byBsb3ciLAogCQkJCQkJCQkgTFNOX0ZPUk1BVF9BUkdTKGxzbikpLAogCQkJCSBlcnJkZXRh aWxfaW50ZXJuYWwoImluaXRpYWwgeG1pbiBob3Jpem9uIG9mICV1IHZzIHRoZSBzbmFwc2hv dCdzICV1IiwKIAkJCQkJCQkJCWJ1aWxkZXItPmluaXRpYWxfeG1pbl9ob3Jpem9uLCBydW5u aW5nLT5vbGRlc3RSdW5uaW5nWGlkKSkpOwogCi0KLQkJU25hcEJ1aWxkV2FpdFNuYXBzaG90 KHJ1bm5pbmcsIGJ1aWxkZXItPmluaXRpYWxfeG1pbl9ob3Jpem9uKTsKKwkJY3V0b2ZmID0g YnVpbGRlci0+aW5pdGlhbF94bWluX2hvcml6b247CisJCVRyYW5zYWN0aW9uSWRSZXRyZWF0 KGN1dG9mZik7CisJCVNuYXBCdWlsZFdhaXRTbmFwc2hvdChjdXRvZmYpOwogCiAJCXJldHVy biB0cnVlOwogCX0KQEAgLTE0NTUsNyArMTQ1OCw3IEBAIFNuYXBCdWlsZEZpbmRTbmFwc2hv dChTbmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNuLCB4bF9ydW5uaW5nX3hhY3Rz ICpydW5uCiAJCQkJIGVycmRldGFpbCgiV2FpdGluZyBmb3IgdHJhbnNhY3Rpb25zIChhcHBy b3hpbWF0ZWx5ICVkKSBvbGRlciB0aGFuICV1IHRvIGVuZC4iLAogCQkJCQkJICAgcnVubmlu Zy0+eGNudCwgcnVubmluZy0+bmV4dFhpZCkpKTsKIAotCQlTbmFwQnVpbGRXYWl0U25hcHNo b3QocnVubmluZywgcnVubmluZy0+bmV4dFhpZCk7CisJCVNuYXBCdWlsZFdhaXRTbmFwc2hv dChydW5uaW5nLT5uZXh0WGlkKTsKIAl9CiAKIAkvKgpAQCAtMTQ3OSw3ICsxNDgyLDcgQEAg U25hcEJ1aWxkRmluZFNuYXBzaG90KFNuYXBCdWlsZCAqYnVpbGRlciwgWExvZ1JlY1B0ciBs c24sIHhsX3J1bm5pbmdfeGFjdHMgKnJ1bm4KIAkJCQkgZXJyZGV0YWlsKCJXYWl0aW5nIGZv ciB0cmFuc2FjdGlvbnMgKGFwcHJveGltYXRlbHkgJWQpIG9sZGVyIHRoYW4gJXUgdG8gZW5k LiIsCiAJCQkJCQkgICBydW5uaW5nLT54Y250LCBydW5uaW5nLT5uZXh0WGlkKSkpOwogCi0J CVNuYXBCdWlsZFdhaXRTbmFwc2hvdChydW5uaW5nLCBydW5uaW5nLT5uZXh0WGlkKTsKKwkJ U25hcEJ1aWxkV2FpdFNuYXBzaG90KHJ1bm5pbmctPm5leHRYaWQpOwogCX0KIAogCS8qCkBA IC0xNTEyLDggKzE1MTUsOCBAQCBTbmFwQnVpbGRGaW5kU25hcHNob3QoU25hcEJ1aWxkICpi dWlsZGVyLCBYTG9nUmVjUHRyIGxzbiwgeGxfcnVubmluZ194YWN0cyAqcnVubgogfQogCiAv KiAtLS0KLSAqIEl0ZXJhdGUgdGhyb3VnaCB4aWRzIGluIHJlY29yZCwgd2FpdCBmb3IgYWxs IG9sZGVyIHRoYW4gdGhlIGN1dG9mZiB0bwotICogZmluaXNoLiAgVGhlbiwgaWYgcG9zc2li bGUsIGxvZyBhIG5ldyB4bF9ydW5uaW5nX3hhY3RzIHJlY29yZC4KKyAqIFdhaXQgZm9yIGFs bCB0cmFuc2FjdGlvbnMgb2xkZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgY3V0b2ZmIHRvIGZp bmlzaC4KKyAqIFRoZW4sIGlmIHBvc3NpYmxlLCBsb2cgYSBuZXcgeGxfcnVubmluZ194YWN0 cyByZWNvcmQuCiAgKgogICogVGhpcyBpc24ndCByZXF1aXJlZCBmb3IgdGhlIGNvcnJlY3Ru ZXNzIG9mIGRlY29kaW5nLCBidXQgdG86CiAgKiBhKSBhbGxvdyBpc29sYXRpb250ZXN0ZXIg dG8gbm90aWNlIHRoYXQgd2UncmUgY3VycmVudGx5IHdhaXRpbmcgZm9yCkBAIC0xNTIzLDEz ICsxNTI2LDMxIEBAIFNuYXBCdWlsZEZpbmRTbmFwc2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIs IFhMb2dSZWNQdHIgbHNuLCB4bF9ydW5uaW5nX3hhY3RzICpydW5uCiAgKiAtLS0KICAqLwog c3RhdGljIHZvaWQKLVNuYXBCdWlsZFdhaXRTbmFwc2hvdCh4bF9ydW5uaW5nX3hhY3RzICpy dW5uaW5nLCBUcmFuc2FjdGlvbklkIGN1dG9mZikKK1NuYXBCdWlsZFdhaXRTbmFwc2hvdChU cmFuc2FjdGlvbklkIGN1dG9mZikKIHsKLQlpbnQJCQlvZmY7CisJUnVubmluZ1RyYW5zYWN0 aW9ucyBydW5uaW5nOworCisJaWYgKFJlY292ZXJ5SW5Qcm9ncmVzcygpKQorCXsKKwkJLyoK KwkJICogRHVyaW5nIHJlY292ZXJ5LCB3ZSBoYXZlIG5vIG1lY2hhbmlzbSBmb3Igd2FpdGlu ZyBmb3IgYW4gWElEIHRvCisJCSAqIGZpbmlzaCwgYW5kIHdlIGNhbm5vdCBjcmVhdGUgbmV3 IHJ1bm5pbmcteGFjdHMgcmVjb3JkcyBlaXRoZXIuCisJCSAqLworCQlyZXR1cm47CisJfQor CisJcnVubmluZyA9IEdldFJ1bm5pbmdUcmFuc2FjdGlvbkRhdGEoKTsKKworCS8qCisJICog R2V0UnVubmluZ1RyYW5zYWN0aW9uRGF0YSByZXR1cm5zIHdpdGggWGlkR2VuTG9jayBhbmQg UHJvY0FycmF5TG9jaworCSAqIGhlbGQsIGJ1dCB3ZSBkb24ndCBuZWVkIHRoZW0uCisJICov CisJTFdMb2NrUmVsZWFzZShYaWRHZW5Mb2NrKTsKKwlMV0xvY2tSZWxlYXNlKFByb2NBcnJh eUxvY2spOwogCi0JZm9yIChvZmYgPSAwOyBvZmYgPCBydW5uaW5nLT54Y250OyBvZmYrKykK Kwlmb3IgKGludCBpID0gMDsgaSA8IHJ1bm5pbmctPnhjbnQ7IGkrKykKIAl7Ci0JCVRyYW5z YWN0aW9uSWQgeGlkID0gcnVubmluZy0+eGlkc1tvZmZdOworCQlUcmFuc2FjdGlvbklkIHhp ZCA9IHJ1bm5pbmctPnhpZHNbaV07CiAKIAkJLyoKIAkJICogVXBwZXIgbGF5ZXJzIHNob3Vs ZCBwcmV2ZW50IHRoYXQgd2UgZXZlciBuZWVkIHRvIHdhaXQgb24gb3Vyc2VsdmVzLgpAQCAt MTUzOSw3ICsxNTYwLDcgQEAgU25hcEJ1aWxkV2FpdFNuYXBzaG90KHhsX3J1bm5pbmdfeGFj dHMgKnJ1bm5pbmcsIFRyYW5zYWN0aW9uSWQgY3V0b2ZmKQogCQlpZiAoVHJhbnNhY3Rpb25J ZElzQ3VycmVudFRyYW5zYWN0aW9uSWQoeGlkKSkKIAkJCWVsb2coRVJST1IsICJ3YWl0aW5n IGZvciBvdXJzZWx2ZXMiKTsKIAotCQlpZiAoVHJhbnNhY3Rpb25JZEZvbGxvd3MoeGlkLCBj dXRvZmYpKQorCQlpZiAoVHJhbnNhY3Rpb25JZEZvbGxvd3NPckVxdWFscyh4aWQsIGN1dG9m ZikpCiAJCQljb250aW51ZTsKIAogCQlYYWN0TG9ja1RhYmxlV2FpdCh4aWQsIE5VTEwsIE5V TEwsIFhMVFdfTm9uZSk7CkBAIC0xNTUxLDEwICsxNTcyLDcgQEAgU25hcEJ1aWxkV2FpdFNu YXBzaG90KHhsX3J1bm5pbmdfeGFjdHMgKnJ1bm5pbmcsIFRyYW5zYWN0aW9uSWQgY3V0b2Zm KQogCSAqIHdhaXQgZm9yIGJnd3JpdGVyIG9yIGNoZWNrcG9pbnRlciB0byBsb2cgb25lLiAg RHVyaW5nIHJlY292ZXJ5IHdlIGNhbid0CiAJICogZW5mb3JjZSB0aGF0LCBzbyB3ZSdsbCBo YXZlIHRvIHdhaXQuCiAJICovCi0JaWYgKCFSZWNvdmVyeUluUHJvZ3Jlc3MoKSkKLQl7Ci0J CUxvZ1N0YW5kYnlTbmFwc2hvdCgpOwotCX0KKwlMb2dTdGFuZGJ5U25hcHNob3QoKTsKIH0K IAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0gCjIuMzkuMgoK --------------Hl0qoWw0UQ5NKOkmbgJFwkxU Content-Type: text/x-patch; charset=UTF-8; name="v2-0005-Remove-the-now-unused-xids-array-from-xl_running_.patch" Content-Disposition: attachment; filename*0="v2-0005-Remove-the-now-unused-xids-array-from-xl_running_.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAzZjA1ZjIyODcxYTY2MmQ3NTI1MTJmZDNkNWExNjM3ZWIwNjg1N2E0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFR1ZSwgMTMgQXVnIDIwMjQgMTY6NDA6NTcgKzAzMDAK U3ViamVjdDogW1BBVENIIHYyIDUvNl0gUmVtb3ZlIHRoZSBub3ctdW51c2VkIHhpZHMgYXJy YXkgZnJvbSB4bF9ydW5uaW5nX3hhY3RzCgpXZSBzdGlsbCBnZW5lcmF0ZSBydW5uaW5nLXhh Y3RzIHJlY29yZHMsIGJlY2F1c2UgdGhleSBhcmUgc3RpbGwgbmVlZGVkCnRvIGluaXRpYWxp emUgdGhlIHNuYXBzaG90IGluIGxvZ2ljYWwgZGVjb2RpbmcuCi0tLQogc3JjL2JhY2tlbmQv YWNjZXNzL3JtZ3JkZXNjL3N0YW5kYnlkZXNjLmMgICB8IDE4IC0tLS0tLS0tLS0tLQogc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYyB8ICA4ICsrKy0tLQog c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc3RhbmRieS5jICAgICAgICAgICB8IDMyICsrKysr LS0tLS0tLS0tLS0tLS0tLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9zdGFuZGJ5LmggICAgICAg ICAgICAgICB8ICAyIC0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3N0YW5kYnlkZWZzLmggICAg ICAgICAgIHwgMTYgKysrKysrKy0tLS0KIDUgZmlsZXMgY2hhbmdlZCwgMjEgaW5zZXJ0aW9u cygrKSwgNTUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L3JtZ3JkZXNjL3N0YW5kYnlkZXNjLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2Mv c3RhbmRieWRlc2MuYwppbmRleCAyNWY4NzBiMTg3Li5iZGU5MzUwYjkyIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2Mvc3RhbmRieWRlc2MuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2Mvc3RhbmRieWRlc2MuYwpAQCAtMTksMjggKzE5LDEw IEBACiBzdGF0aWMgdm9pZAogc3RhbmRieV9kZXNjX3J1bm5pbmdfeGFjdHMoU3RyaW5nSW5m byBidWYsIHhsX3J1bm5pbmdfeGFjdHMgKnhscmVjKQogewotCWludAkJCWk7Ci0KIAlhcHBl bmRTdHJpbmdJbmZvKGJ1ZiwgIm5leHRYaWQgJXUgbGF0ZXN0Q29tcGxldGVkWGlkICV1IG9s ZGVzdFJ1bm5pbmdYaWQgJXUiLAogCQkJCQkgeGxyZWMtPm5leHRYaWQsCiAJCQkJCSB4bHJl Yy0+bGF0ZXN0Q29tcGxldGVkWGlkLAogCQkJCQkgeGxyZWMtPm9sZGVzdFJ1bm5pbmdYaWQp OwotCWlmICh4bHJlYy0+eGNudCA+IDApCi0JewotCQlhcHBlbmRTdHJpbmdJbmZvKGJ1Ziwg IjsgJWQgeGFjdHM6IiwgeGxyZWMtPnhjbnQpOwotCQlmb3IgKGkgPSAwOyBpIDwgeGxyZWMt PnhjbnQ7IGkrKykKLQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiICV1IiwgeGxyZWMtPnhp ZHNbaV0pOwotCX0KLQotCWlmICh4bHJlYy0+c3VieGlkX292ZXJmbG93KQotCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIjsgc3VieGlkIG92ZXJmbG93ZWQiKTsKLQotCWlmICh4 bHJlYy0+c3VieGNudCA+IDApCi0JewotCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIjsgJWQg c3VieGFjdHM6IiwgeGxyZWMtPnN1YnhjbnQpOwotCQlmb3IgKGkgPSAwOyBpIDwgeGxyZWMt PnN1YnhjbnQ7IGkrKykKLQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiICV1IiwgeGxyZWMt PnhpZHNbeGxyZWMtPnhjbnQgKyBpXSk7Ci0JfQogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3NuYXBidWlsZC5jIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYwppbmRleCBkNTMxNWVmZTJiLi4y ZWM5N2U0NjBiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3NuYXBidWlsZC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc25h cGJ1aWxkLmMKQEAgLTE0NTUsOCArMTQ1NSw4IEBAIFNuYXBCdWlsZEZpbmRTbmFwc2hvdChT bmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNuLCB4bF9ydW5uaW5nX3hhY3RzICpy dW5uCiAJCWVyZXBvcnQoTE9HLAogCQkJCShlcnJtc2coImxvZ2ljYWwgZGVjb2RpbmcgZm91 bmQgaW5pdGlhbCBzdGFydGluZyBwb2ludCBhdCAlWC8lWCIsCiAJCQkJCQlMU05fRk9STUFU X0FSR1MobHNuKSksCi0JCQkJIGVycmRldGFpbCgiV2FpdGluZyBmb3IgdHJhbnNhY3Rpb25z IChhcHByb3hpbWF0ZWx5ICVkKSBvbGRlciB0aGFuICV1IHRvIGVuZC4iLAotCQkJCQkJICAg cnVubmluZy0+eGNudCwgcnVubmluZy0+bmV4dFhpZCkpKTsKKwkJCQkgZXJyZGV0YWlsKCJX YWl0aW5nIGZvciB0cmFuc2FjdGlvbnMgb2xkZXIgdGhhbiAldSB0byBlbmQuIiwKKwkJCQkJ CSAgIHJ1bm5pbmctPm5leHRYaWQpKSk7CiAKIAkJU25hcEJ1aWxkV2FpdFNuYXBzaG90KHJ1 bm5pbmctPm5leHRYaWQpOwogCX0KQEAgLTE0NzksOCArMTQ3OSw4IEBAIFNuYXBCdWlsZEZp bmRTbmFwc2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNuLCB4bF9ydW5u aW5nX3hhY3RzICpydW5uCiAJCWVyZXBvcnQoTE9HLAogCQkJCShlcnJtc2coImxvZ2ljYWwg ZGVjb2RpbmcgZm91bmQgaW5pdGlhbCBjb25zaXN0ZW50IHBvaW50IGF0ICVYLyVYIiwKIAkJ CQkJCUxTTl9GT1JNQVRfQVJHUyhsc24pKSwKLQkJCQkgZXJyZGV0YWlsKCJXYWl0aW5nIGZv ciB0cmFuc2FjdGlvbnMgKGFwcHJveGltYXRlbHkgJWQpIG9sZGVyIHRoYW4gJXUgdG8gZW5k LiIsCi0JCQkJCQkgICBydW5uaW5nLT54Y250LCBydW5uaW5nLT5uZXh0WGlkKSkpOworCQkJ CSBlcnJkZXRhaWwoIldhaXRpbmcgZm9yIHRyYW5zYWN0aW9ucyBvbGRlciB0aGFuICV1IHRv IGVuZC4iLAorCQkJCQkJICAgcnVubmluZy0+bmV4dFhpZCkpKTsKIAogCQlTbmFwQnVpbGRX YWl0U25hcHNob3QocnVubmluZy0+bmV4dFhpZCk7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvc3RhbmRieS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv c3RhbmRieS5jCmluZGV4IGUwMmM5YWI4NDIuLjZlZDQ2YmVkMDMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9zdGFuZGJ5LmMKQEAgLTEzMzcsOSArMTMzNyw2IEBAIExvZ0N1cnJlbnRSdW5u aW5nWGFjdHMoUnVubmluZ1RyYW5zYWN0aW9ucyBDdXJyUnVubmluZ1hhY3RzKQogCXhsX3J1 bm5pbmdfeGFjdHMgeGxyZWM7CiAJWExvZ1JlY1B0cglyZWNwdHI7CiAKLQl4bHJlYy54Y250 ID0gQ3VyclJ1bm5pbmdYYWN0cy0+eGNudDsKLQl4bHJlYy5zdWJ4Y250ID0gQ3VyclJ1bm5p bmdYYWN0cy0+c3VieGNudDsKLQl4bHJlYy5zdWJ4aWRfb3ZlcmZsb3cgPSAoQ3VyclJ1bm5p bmdYYWN0cy0+c3VieGlkX3N0YXR1cyAhPSBTVUJYSURTX0lOX0FSUkFZKTsKIAl4bHJlYy5u ZXh0WGlkID0gQ3VyclJ1bm5pbmdYYWN0cy0+bmV4dFhpZDsKIAl4bHJlYy5vbGRlc3RSdW5u aW5nWGlkID0gQ3VyclJ1bm5pbmdYYWN0cy0+b2xkZXN0UnVubmluZ1hpZDsKIAl4bHJlYy5s YXRlc3RDb21wbGV0ZWRYaWQgPSBDdXJyUnVubmluZ1hhY3RzLT5sYXRlc3RDb21wbGV0ZWRY aWQ7CkBAIC0xMzQ3LDMxICsxMzQ0LDE2IEBAIExvZ0N1cnJlbnRSdW5uaW5nWGFjdHMoUnVu bmluZ1RyYW5zYWN0aW9ucyBDdXJyUnVubmluZ1hhY3RzKQogCS8qIEhlYWRlciAqLwogCVhM b2dCZWdpbkluc2VydCgpOwogCVhMb2dTZXRSZWNvcmRGbGFncyhYTE9HX01BUktfVU5JTVBP UlRBTlQpOwotCVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikgKCZ4bHJlYyksIE1pblNpemVP ZlhhY3RSdW5uaW5nWGFjdHMpOwotCi0JLyogYXJyYXkgb2YgVHJhbnNhY3Rpb25JZHMgKi8K LQlpZiAoeGxyZWMueGNudCA+IDApCi0JCVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikgQ3Vy clJ1bm5pbmdYYWN0cy0+eGlkcywKLQkJCQkJCSAoeGxyZWMueGNudCArIHhscmVjLnN1Ynhj bnQpICogc2l6ZW9mKFRyYW5zYWN0aW9uSWQpKTsKKwlYTG9nUmVnaXN0ZXJEYXRhKChjaGFy ICopICgmeGxyZWMpLCBTaXplT2ZYYWN0UnVubmluZ1hhY3RzKTsKIAogCXJlY3B0ciA9IFhM b2dJbnNlcnQoUk1fU1RBTkRCWV9JRCwgWExPR19SVU5OSU5HX1hBQ1RTKTsKIAotCWlmICh4 bHJlYy5zdWJ4aWRfb3ZlcmZsb3cpCi0JCWVsb2coREVCVUcyLAotCQkJICJzbmFwc2hvdCBv ZiAlZCBydW5uaW5nIHRyYW5zYWN0aW9ucyBvdmVyZmxvd2VkIChsc24gJVgvJVggb2xkZXN0 IHhpZCAldSBsYXRlc3QgY29tcGxldGUgJXUgbmV4dCB4aWQgJXUpIiwKLQkJCSBDdXJyUnVu bmluZ1hhY3RzLT54Y250LAotCQkJIExTTl9GT1JNQVRfQVJHUyhyZWNwdHIpLAotCQkJIEN1 cnJSdW5uaW5nWGFjdHMtPm9sZGVzdFJ1bm5pbmdYaWQsCi0JCQkgQ3VyclJ1bm5pbmdYYWN0 cy0+bGF0ZXN0Q29tcGxldGVkWGlkLAotCQkJIEN1cnJSdW5uaW5nWGFjdHMtPm5leHRYaWQp OwotCWVsc2UKLQkJZWxvZyhERUJVRzIsCi0JCQkgInNuYXBzaG90IG9mICVkKyVkIHJ1bm5p bmcgdHJhbnNhY3Rpb24gaWRzIChsc24gJVgvJVggb2xkZXN0IHhpZCAldSBsYXRlc3QgY29t cGxldGUgJXUgbmV4dCB4aWQgJXUpIiwKLQkJCSBDdXJyUnVubmluZ1hhY3RzLT54Y250LCBD dXJyUnVubmluZ1hhY3RzLT5zdWJ4Y250LAotCQkJIExTTl9GT1JNQVRfQVJHUyhyZWNwdHIp LAotCQkJIEN1cnJSdW5uaW5nWGFjdHMtPm9sZGVzdFJ1bm5pbmdYaWQsCi0JCQkgQ3VyclJ1 bm5pbmdYYWN0cy0+bGF0ZXN0Q29tcGxldGVkWGlkLAotCQkJIEN1cnJSdW5uaW5nWGFjdHMt Pm5leHRYaWQpOworCWVsb2coREVCVUcyLAorCQkgImxvZ2dpbmcgcnVubmluZyB0cmFuc2Fj dGlvbiBib3VuZHMgKGxzbiAlWC8lWCBvbGRlc3QgeGlkICV1IGxhdGVzdCBjb21wbGV0ZSAl dSBuZXh0IHhpZCAldSkiLAorCQkgTFNOX0ZPUk1BVF9BUkdTKHJlY3B0ciksCisJCSBDdXJy UnVubmluZ1hhY3RzLT5vbGRlc3RSdW5uaW5nWGlkLAorCQkgQ3VyclJ1bm5pbmdYYWN0cy0+ bGF0ZXN0Q29tcGxldGVkWGlkLAorCQkgQ3VyclJ1bm5pbmdYYWN0cy0+bmV4dFhpZCk7CiAK IAkvKgogCSAqIEVuc3VyZSBydW5uaW5nX3hhY3RzIGluZm9ybWF0aW9uIGlzIHN5bmNlZCB0 byBkaXNrIG5vdCB0b28gZmFyIGluIHRoZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9zdGFuZGJ5LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N0YW5kYnkuaAppbmRleCBj Y2UwYmM1MjFlLi45ZDVhMjk4YTM5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdl L3N0YW5kYnkuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N0YW5kYnkuaApAQCAtNjAs OCArNjAsNiBAQCBleHRlcm4gdm9pZCBTdGFuZGJ5UmVsZWFzZUxvY2tUcmVlKFRyYW5zYWN0 aW9uSWQgeGlkLAogZXh0ZXJuIHZvaWQgU3RhbmRieVJlbGVhc2VBbGxMb2Nrcyh2b2lkKTsK IGV4dGVybiB2b2lkIFN0YW5kYnlSZWxlYXNlT2xkTG9ja3MoVHJhbnNhY3Rpb25JZCBvbGR4 aWQpOwogCi0jZGVmaW5lIE1pblNpemVPZlhhY3RSdW5uaW5nWGFjdHMgb2Zmc2V0b2YoeGxf cnVubmluZ194YWN0cywgeGlkcykKLQogCiAvKgogICogRGVjbGFyYXRpb25zIGZvciBHZXRS dW5uaW5nVHJhbnNhY3Rpb25EYXRhKCkuIFNpbWlsYXIgdG8gU25hcHNob3RzLCBidXQKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3RhbmRieWRlZnMuaCBiL3NyYy9pbmNs dWRlL3N0b3JhZ2Uvc3RhbmRieWRlZnMuaAppbmRleCBmZTEyZjQ2M2E4Li5kODU4MjA5NDQ3 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3N0YW5kYnlkZWZzLmgKKysrIGIv c3JjL2luY2x1ZGUvc3RvcmFnZS9zdGFuZGJ5ZGVmcy5oCkBAIC00MiwyMCArNDIsMjQgQEAg dHlwZWRlZiBzdHJ1Y3QgeGxfc3RhbmRieV9sb2NrcwogfSB4bF9zdGFuZGJ5X2xvY2tzOwog CiAvKgotICogV2hlbiB3ZSB3cml0ZSBydW5uaW5nIHhhY3QgZGF0YSB0byBXQUwsIHdlIHVz ZSB0aGlzIHN0cnVjdHVyZS4KKyAqIERhdGEgaW5jbHVkZWQgaW4gYW4gWExPR19SVU5OSU5H X1hBQ1RTIHJlY29yZC4KKyAqCisgKiBUaGlzIHVzZWQgdG8gaW5jbHVkZSBhIGxpc3Qgb2Yg cnVubmluZyBYSURzLCBoZW5jZSB0aGUgbmFtZSwgYnV0IG5vd2FkYXlzCisgKiB0aGlzIG9u bHkgY29udGFpbnMgdGhlIG1pbiBhbmQgbWF4IGJvdW5kcyBvZiB0aGUgdHJhbnNhY3Rpb25z IHRoYXQgd2VyZQorICogcnVubmluZyB3aGVuIHRoZSByZWNvcmQgd2FzIHdyaXR0ZW4uICBU aGV5IGFyZSBuZWVkZWQgdG8gaW5pdGlhbGl6ZSBsb2dpY2FsCisgKiBkZWNvZGluZy4gIFRo ZXkgYXJlIGFsc28gdXNlZCBpbiBob3Qgc3RhbmRieSB0byBwcnVuZSBpbmZvcm1hdGlvbiBh Ym91dCBvbGQKKyAqIHJ1bm5pbmcgdHJhbnNhY3Rpb25zLCBpbiBjYXNlIHRoZSB0aGUgcHJp bWFyeSBkaWRuJ3Qgd3JpdGUgYSBDT01NSVQvQUJPUlQKKyAqIHJlY29yZCBmb3Igc29tZSBy ZWFzb24uCiAgKi8KIHR5cGVkZWYgc3RydWN0IHhsX3J1bm5pbmdfeGFjdHMKIHsKLQlpbnQJ CQl4Y250OwkJCS8qICMgb2YgeGFjdCBpZHMgaW4geGlkc1tdICovCi0JaW50CQkJc3VieGNu dDsJCS8qICMgb2Ygc3VieGFjdCBpZHMgaW4geGlkc1tdICovCi0JYm9vbAkJc3VieGlkX292 ZXJmbG93OwkvKiBzbmFwc2hvdCBvdmVyZmxvd2VkLCBzdWJ4aWRzIG1pc3NpbmcgKi8KIAlU cmFuc2FjdGlvbklkIG5leHRYaWQ7CQkvKiB4aWQgZnJvbSBUcmFuc2FtVmFyaWFibGVzLT5u ZXh0WGlkICovCiAJVHJhbnNhY3Rpb25JZCBvbGRlc3RSdW5uaW5nWGlkOyAvKiAqbm90KiBv bGRlc3RYbWluICovCiAJVHJhbnNhY3Rpb25JZCBsYXRlc3RDb21wbGV0ZWRYaWQ7CS8qIHNv IHdlIGNhbiBzZXQgeG1heCAqLwotCi0JVHJhbnNhY3Rpb25JZCB4aWRzW0ZMRVhJQkxFX0FS UkFZX01FTUJFUl07CiB9IHhsX3J1bm5pbmdfeGFjdHM7CiAKKyNkZWZpbmUgU2l6ZU9mWGFj dFJ1bm5pbmdYYWN0cyBzaXplb2YoeGxfcnVubmluZ194YWN0cykKKwogLyoKICAqIEludmFs aWRhdGlvbnMgZm9yIHN0YW5kYnksIGN1cnJlbnRseSBvbmx5IHdoZW4gdHJhbnNhY3Rpb25z IHdpdGhvdXQgYW4KICAqIGFzc2lnbmVkIHhpZCBjb21taXQuCi0tIAoyLjM5LjIKCg== --------------Hl0qoWw0UQ5NKOkmbgJFwkxU Content-Type: text/x-patch; charset=UTF-8; name="v2-0006-Add-a-small-cache-to-Snapshot-to-avoid-CSN-lookup.patch" Content-Disposition: attachment; filename*0="v2-0006-Add-a-small-cache-to-Snapshot-to-avoid-CSN-lookup.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA0MDhjOTc3ODJhOWRkMjExNzA2MjI2MzBmNGMwMjc5NDdhMDkxNTVhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFR1ZSwgMTMgQXVnIDIwMjQgMTg6MTU6NDkgKzAzMDAK U3ViamVjdDogW1BBVENIIHYyIDYvNl0gQWRkIGEgc21hbGwgY2FjaGUgdG8gU25hcHNob3Qg dG8gYXZvaWQgQ1NOIGxvb2t1cHMKCktlZXAgdGhlIHN0YXR1cyBvZiBhIGZldyByZWNlbnRs eS1sb29rZWQgdXAgWElEcyBjYWNoZWQgaW4gdGhlClNuYXBzaG90RGF0YS4gVGhpcyBhdm9p ZHMgaGF2aW5nIHRvIGdvIHRoZSBDU04gbG9nIGluIHRoZSBjb21tb24gY2FzZQp0aGF0IHRo ZSBzYW1lIFhJRHMgYXJlIGxvb2tlZCB1cCBvdmVyIGFuZCBvdmVyIGFnYWluLgotLS0KIHNy Yy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jIHwgMjggKysrKysrKysrKysrKysrKysr KysrKysrKysrLQogc3JjL2luY2x1ZGUvdXRpbHMvc25hcHNob3QuaCAgICAgfCAgNCArKysr CiAyIGZpbGVzIGNoYW5nZWQsIDMxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy90aW1lL3NuYXBtZ3IuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jCmluZGV4IGRhODJkZWY4NDYuLmUyYjY1ZTBkZDUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jCkBAIC0xODA3LDYgKzE4MDcsNyBAQCBS ZXN0b3JlU25hcHNob3QoY2hhciAqc3RhcnRfYWRkcmVzcykKIAlzbmFwc2hvdC0+d2hlblRh a2VuID0gc2VyaWFsaXplZF9zbmFwc2hvdC53aGVuVGFrZW47CiAJc25hcHNob3QtPmxzbiA9 IHNlcmlhbGl6ZWRfc25hcHNob3QubHNuOwogCXNuYXBzaG90LT5zbmFwc2hvdENzbiA9IHNl cmlhbGl6ZWRfc25hcHNob3Quc25hcHNob3RDc247CisJbWVtc2V0KHNuYXBzaG90LT52aXNp YmxlX2NhY2hlLCAwLCBzaXplb2Yoc25hcHNob3QtPnZpc2libGVfY2FjaGUpKTsKIAlzbmFw c2hvdC0+c25hcFhhY3RDb21wbGV0aW9uQ291bnQgPSAwOwogCiAJLyogQ29weSBYSURzLCBp ZiBwcmVzZW50LiAqLwpAQCAtMTkxNywxMiArMTkxOCwzNyBAQCBYaWRJbk1WQ0NTbmFwc2hv dChUcmFuc2FjdGlvbklkIHhpZCwgU25hcHNob3Qgc25hcHNob3QpCiAJfQogCWVsc2UKIAl7 Ci0JCVhMb2dSZWNQdHIJY3NuID0gQ1NOTG9nR2V0Q1NOQnlYaWQoeGlkKTsKKwkJWExvZ1Jl Y1B0cgljc247CiAKKwkJLyogc2VlIGlmIHdlIGhhdmUgdGhpcyBjYWNoZWQgKi8KKwkJZm9y IChpbnQgaSA9IDA7IGkgPCBWSVNJQkxFX0NBQ0hFX1hBQ1RTOyBpKyspCisJCXsKKwkJCWlm IChzbmFwc2hvdC0+dmlzaWJsZV9jYWNoZVtpXSA9PSB4aWQpCisJCQkJcmV0dXJuIHRydWU7 CisJCX0KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBWSVNJQkxFX0NBQ0hFX1hBQ1RTOyBpKysp CisJCXsKKwkJCWlmIChzbmFwc2hvdC0+aW52aXNpYmxlX2NhY2hlW2ldID09IHhpZCkKKwkJ CQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQljc24gPSBDU05Mb2dHZXRDU05CeVhpZCh4aWQp OwogCQlpZiAoY3NuICE9IEludmFsaWRYTG9nUmVjUHRyICYmIGNzbiA8PSBzbmFwc2hvdC0+ c25hcHNob3RDc24pCisJCXsKKwkJCXN0YXRpYyB1aW50OCBsYXN0ID0gMDsKKworCQkJc25h cHNob3QtPmludmlzaWJsZV9jYWNoZVtsYXN0ICUgVklTSUJMRV9DQUNIRV9YQUNUU10gPSB4 aWQ7CisJCQlsYXN0Kys7CiAJCQlyZXR1cm4gZmFsc2U7CisJCX0KIAkJZWxzZQorCQl7CisJ CQlzdGF0aWMgdWludDggbGFzdCA9IDA7CisKKwkJCXNuYXBzaG90LT52aXNpYmxlX2NhY2hl W2xhc3QgJSBWSVNJQkxFX0NBQ0hFX1hBQ1RTXSA9IHhpZDsKKwkJCWxhc3QrKzsKIAkJCXJl dHVybiB0cnVlOworCQl9CiAJfQogCiAJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvdXRpbHMvc25hcHNob3QuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3NuYXBzaG90 LmgKaW5kZXggMWZkYTViMDZmNi4uODhjZmNlMmZmZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdXRpbHMvc25hcHNob3QuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9zbmFwc2hvdC5o CkBAIC0xODgsNiArMTg4LDEwIEBAIHR5cGVkZWYgc3RydWN0IFNuYXBzaG90RGF0YQogCSAq LwogCVhMb2dSZWNQdHIJc25hcHNob3RDc247CiAKKyNkZWZpbmUgVklTSUJMRV9DQUNIRV9Y QUNUUyA0CisJVHJhbnNhY3Rpb25JZCB2aXNpYmxlX2NhY2hlW1ZJU0lCTEVfQ0FDSEVfWEFD VFNdOworCVRyYW5zYWN0aW9uSWQgaW52aXNpYmxlX2NhY2hlW1ZJU0lCTEVfQ0FDSEVfWEFD VFNdOworCiAJYm9vbAkJdGFrZW5EdXJpbmdSZWNvdmVyeTsJLyogcmVjb3Zlcnktc2hhcGVk IHNuYXBzaG90PyAqLwogCWJvb2wJCWNvcGllZDsJCQkvKiBmYWxzZSBpZiBpdCdzIGEgc3Rh dGljIHNuYXBzaG90ICovCiAKLS0gCjIuMzkuMgoK --------------Hl0qoWw0UQ5NKOkmbgJFwkxU--