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 1vEnlV-000uMs-Ng for pgsql-hackers@arkaria.postgresql.org; Fri, 31 Oct 2025 11:57:58 +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 1vEnlU-00EM3z-Mc for pgsql-hackers@arkaria.postgresql.org; Fri, 31 Oct 2025 11:57:55 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vEnlT-00EM1w-Hz for pgsql-hackers@lists.postgresql.org; Fri, 31 Oct 2025 11:57:55 +0000 Received: from relay3-d.mail.gandi.net ([2001:4b98:dc4:8::223]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1vEnlH-004jKY-1V for pgsql-hackers@lists.postgresql.org; Fri, 31 Oct 2025 11:57:53 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id DBC5B1FD0B; Fri, 31 Oct 2025 11:57:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vondra.me; s=gm1; t=1761911855; 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=CTPy3W6nWi2LXdwE56bl7JbdlVZjs+OE4iHboX/o9bA=; b=LKtT/N6pvSDxfsXUawygNzpRK3P/tt3V1w4y4QT6uveazlESK8VmJ+tImgozM7N0o4RVoM ePVu/FuLNYEud8rh2EBuFYeRf3h4CA0toOkDDoyZxe2J8WTQ4qwadvJJwUHCuJIfLe2HkP yBqewv8csbyK5K2tORnNd5MOLzgKR1hmzhWRLE9uBFEHbs6hOtlmmz6gQ/JOYwZFtcm+bH xpxHKjZrMRDTK6pvMeFggdIuJ2n9Fwa373WBKW/CQya4V8yyd0x+OZ5uXUvtJIPtjryS2j AVRHrAVe8P3ZT0O3u1NxuI3qsVkrj5P5NrYbRywmfzNJ8OLXXwoOhO/6RghiLQ== Content-Type: multipart/mixed; boundary="------------apuxkCRUZ0GRSLZG7S4PIVYY" Message-ID: Date: Fri, 31 Oct 2025 12:57:33 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Adding basic NUMA awareness From: Tomas Vondra To: Alexey Makhmutov , PostgreSQL Hackers Cc: Jakub Wartak , Andres Freund References: <5a2410f8-62a9-4483-bf0a-3a8331fb0808@vondra.me> <71a46484-053c-4b81-ba32-ddac050a8b5d@vondra.me> <1b5bf372-6d40-4022-bf4f-367ffb61ee51@vondra.me> <51e51832-7f47-412a-a1a6-b972101cc8cb@vondra.me> <874435bd-5e25-4a7c-a5d5-8ef0c262d788@vondra.me> <6636d842-e8a5-44bc-a206-6df415380a7b@vondra.me> <659c44a5-f616-492c-ab81-60273d2fe7f6@vondra.me> <9c31717c-fe38-4824-9bb7-e4f0ac4f1991@vondra.me> <92e23c85-f646-4bab-b5e0-df30d8ddf4bd@postgrespro.ru> <72506e5a-92ac-47fb-9d3a-3b7b420af985@vondra.me> Content-Language: en-US In-Reply-To: <72506e5a-92ac-47fb-9d3a-3b7b420af985@vondra.me> X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdduieelgeefucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpegtkfffgggfuffhvfevfhgjsehmtderredtvdejnecuhfhrohhmpefvohhmrghsucggohhnughrrgcuoehtohhmrghssehvohhnughrrgdrmhgvqeenucggtffrrghtthgvrhhnpeehueeukeefudfftdetveegkeehtedtfedvheehgfeigfeikeetfeekkefhjeekheenucffohhmrghinhepphhoshhtghhrvghsqhhlrdhorhhgnecukfhppeekiedrgeelrddvfedtrddvtdeinecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepkeeirdegledrvdeftddrvddtiedphhgvlhhopegluddtrddufeejrddtrddvngdpmhgrihhlfhhrohhmpehtohhmrghssehvohhnughrrgdrmhgvpdhnsggprhgtphhtthhopeegpdhrtghpthhtoheprgdrmhgrkhhhmhhuthhovhesphhoshhtghhrvghsphhrohdrrhhupdhrtghpthhtohepphhgshhqlhdqhhgrtghkvghrsheslhhishhtshdrphhoshhtghhrvghsqhhlrdhorhhgpdhrtghpthhtohepjhgrkhhusgdrfigrrhhtrghksegvnhhtvghrphhrihhsvggusgdrtghomhdprhgtphhtthhopegrnhgurhgvshesrghnrghrrgiivghlrdguvg X-GND-Sasl: tomas@vondra.me 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. --------------apuxkCRUZ0GRSLZG7S4PIVYY Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, here's a significantly reworked version of this patch series. I had a couple discussions about these patches at pgconf.eu last week, and one interesting suggestion was that maybe it'd be easier to the clock-sweep partitioning first, in a NUMA-oblivious way. And then add the NUMA stuff later. The logic is that this way we could ignore some of the hard stuff (e.g. handling huge page reservation), while still reducing clocksweep contention. Which we speculated might be the main benefit anyway. The attached patches do this. 0001 - Introduces a simplified version of the "buffer partition registry" (think array in shmem, storing info about ranges of shared buffer). The partitions are calculated as simple fraction of shared buffers. There's no need to align the partitions to memory pages etc. 0002-0005 - Does the clock-sweep partitioning. I chose to keep this split into smaller increments, to keep the patches easier to review. 0006 - Make the partitioning NUMA-aware. This used to be part of 0001, but now it's moved on top of the clock-sweep stuff. It ensures the partitions are properly aligned to memory pages, and all that. 0007 - PGPROC partitioning. This made the 0001 patch much simpler/smaller - it used to be ~50kB, now it's 15kB (and most of the complexity is in 0006). The question however is how this performs, or how much of the benefit was due to NUMA-awareness and how much was due to just partitioning clock-sweep. I repeated the benchmark from [1], doing concurrent sequential scans to put significant pressure on buffer replacements, and I got this: hp clients | master | sweep sweep-16 | numa numa-16 =============|==========|===================|=============== off 16 | 24 | 46 46 | 33 40 32 | 33 | 53 51 | 45 51 48 | 38 | 51 61 | 46 56 64 | 41 | 56 75 | 47 65 80 | 47 | 53 77 | 48 71 96 | 45 | 54 80 | 47 66 112 | 45 | 52 83 | 44 65 128 | 43 | 55 81 | 39 48 -------------|----------|-------------------|--------------- on 16 | 26 | 47 47 | 35 42 32 | 33 | 49 52 | 40 49 48 | 39 | 52 63 | 43 57 64 | 42 | 53 72 | 43 66 80 | 43 | 54 81 | 46 71 96 | 48 | 58 80 | 49 73 112 | 51 | 58 78 | 51 76 128 | 55 | 60 83 | 52 76 "hp" means huge pages, the compared branches are: - master - current master - sweep - patches up to 0005, default number of partitions (4) - sweep-16 - patches up to 0005, 16 partitions - numa - patches up to 0006, default number of partitions (4) - numa-16 - patches up to 0006, 16 partitions Compared to master, the results look like this: hp clients | sweep sweep-16 | numa numa-16 ==============|====================|================ off 16 | 192% 192% | 138% 167% 32 | 161% 155% | 136% 155% 48 | 132% 160% | 121% 145% 64 | 137% 183% | 115% 159% 80 | 113% 164% | 102% 151% 96 | 120% 177% | 104% 146% 112 | 116% 184% | 98% 144% 128 | 128% 186% | 90% 110% --------------|--------------------|---------------- on 16 | 181% 181% | 135% 162% 32 | 148% 158% | 121% 148% 48 | 133% 161% | 110% 144% 64 | 126% 171% | 102% 157% 80 | 126% 188% | 107% 165% 96 | 121% 167% | 102% 152% 112 | 114% 153% | 100% 149% 128 | 109% 151% | 95% 138% The attached PDF has more results for runs with somewhat modified parameters, but the overall it's very similar to these numbers. I think this confirms most of the benefit really comes from just partitioning clock-sweep, and it's mostly independent of the NUMA stuff. In fact, the NUMA partitioning is often slower. Some of this may be due to inefficiencies in the patch (e.g. division in formula calculating the partition index, etc.). So I think this looks quite promising ... There are a couple unsolved issues, though. While running the tests, I ran into a bunch of weird issues. I saw two types of failures: 1) Bad address ----------------------------------------------------------------------- 2025-10-30 15:24:21.195 UTC [2038558] LOG: could not read blocks 114543..114558 in file "base/16384/16588": Bad address 2025-10-30 15:24:21.195 UTC [2038558] STATEMENT: SELECT * FROM t_41 OFFSET 1000000000 2025-10-30 15:24:21.195 UTC [2038523] LOG: could not read blocks 119981..119996 in file "base/16384/16869": Bad address 2025-10-30 15:24:21.195 UTC [2038523] CONTEXT: completing I/O on behalf of process 2038464 2025-10-30 15:24:21.195 UTC [2038523] STATEMENT: SELECT * FROM t_96 OFFSET 1000000000 2025-10-30 15:24:21.195 UTC [2038492] LOG: could not read blocks 118226..118232 in file "base/16384/16478": Bad address 2025-10-30 15:24:21.195 UTC [2038492] STATEMENT: SELECT * FROM t_19 OFFSET 1000000000 2025-10-30 15:24:21.196 UTC [2038477] LOG: could not read blocks 120515..120517 in file "base/16384/16945": Bad address 2025-10-30 15:24:21.196 UTC [2038477] CONTEXT: completing I/O on behalf of process 2038545 2025-10-30 15:24:21.196 UTC [2038477] STATEMENT: SELECT * FROM t_111 OFFSET 1000000000 ----------------------------------------------------------------------- 2) Operation canceled ----------------------------------------------------------------------- 2025-10-31 10:57:21.742 UTC [2685933] LOG: could not read blocks 159..174 in file "base/16384/16398": Operation canceled 2025-10-31 10:57:21.742 UTC [2685933] STATEMENT: SELECT * FROM t_3 OFFSET 1000000000 2025-10-31 10:57:21.742 UTC [2685933] LOG: could not read blocks 143..158 in file "base/16384/16398": Operation canceled 2025-10-31 10:57:21.742 UTC [2685933] STATEMENT: SELECT * FROM t_3 OFFSET 1000000000 2025-10-31 10:57:21.781 UTC [2685933] ERROR: could not read blocks 143..158 in file "base/16384/16398": Operation canceled 2025-10-31 10:57:21.781 UTC [2685933] STATEMENT: SELECT * FROM t_3 OFFSET 1000000000 ----------------------------------------------------------------------- I'm still not sure what's causing these, and it's happening rarely and randomly, so it's hard to catch and reproduce. I'd welcome suggestions what to look for / what might be the issue. I did run the whole test under valgrind to make sure there's nothing obviously broken, but that found no issues. Of course, it's much slower under valgrind, so maybe it just didn't hit the issue. I suspect the "bad address" might be just a different symptom of the issues with reserving huge pages I already mentioned [2]. I assume io_uring might try using huge pages internally, and then it fails because postgres also reserves huge pages. I have no idea what "operation canceled" might be about. I'm not entirely sure if this affect all patches, or just the patches with NUMA partitioning. Or if this happens with huge pages. I'll do more runs to test specifically this. But it does seem to be specific to io_uring - or at least the canceled issue. I haven't seen it after switching to "worker". [1] https://www.postgresql.org/message-id/51e51832-7f47-412a-a1a6-b972101cc8cb%40vondra.me [2] https://www.postgresql.org/message-id/1d57d68d-b178-415a-ba11-be0c3714638e%40vondra.me regards -- Tomas Vondra --------------apuxkCRUZ0GRSLZG7S4PIVYY Content-Type: application/pdf; name="clocksweep-results.pdf" Content-Disposition: attachment; filename="clocksweep-results.pdf" Content-Transfer-Encoding: base64 JVBERi0xLjQKJSDi48/TCjMKMApvYmoKPDwKL1R5cGUKL0NhdGFsb2cKL05hbWVzCjw8Cj4+ Ci9QYWdlTGFiZWxzCjw8Ci9OdW1zClsKMAo8PAovUwovRAovU3QKMQo+PgpdCj4+Ci9PdXRs aW5lcwoyCjAKUgovUGFnZXMKMQowClIKPj4KZW5kb2JqCjQKMApvYmoKPDwKL0NyZWF0b3IK KP7/AEcAbwBvAGcAbABlACAAUwBoAGUAZQB0AHMpCi9UaXRsZQoo/v8AYwBsAG8AYwBrAHMA dwBlAGUAcCkKPj4KZW5kb2JqCjUKMApvYmoKPDwKL1R5cGUKL1BhZ2UKL1BhcmVudAoxCjAK UgovTWVkaWFCb3gKWwowCjAKNjEyCjc5MgpdCi9Db250ZW50cwo2CjAKUgovUmVzb3VyY2Vz CjcKMApSCi9Bbm5vdHMKOQowClIKL0dyb3VwCjw8Ci9TCi9UcmFuc3BhcmVuY3kKL0NTCi9E ZXZpY2VSR0IKPj4KPj4KZW5kb2JqCjYKMApvYmoKPDwKL0ZpbHRlcgovRmxhdGVEZWNvZGUK L0xlbmd0aAo4CjAKUgo+PgpzdHJlYW0KeJy1vd2v5bqW3VdAXoJ6SuPUOVWnqh790G3glilR EqVHB3HHH/m63TfuII4fghjdDaPKSbcN+N/PXiLHnGPMRe21j7ROX/S967eLHFxLnFMiBynp H94P39L723/+UD+UbXz53//nx/t/eJ++lXn/J/vw8uf0bZ7GpczD1P5J8KUA9G7/O4z525rT ti7vhzx+W8qSllimVfvDrdn9v17+eZxX0HfQkNey8/5npVby79//zfv/VBtu//+Pf7fr75Jl b+w7Pk61Dn2oEn97LzDVr7Xm7PUqvHyNpdWmjxO+zt/eDt1QlqkML5/WdRnLNN8+pbyNw3JT X/Ot8DTUH56mGfQdtOTW4BihlavtuPo2L7fP+8dxuEG+tfQiN1FTwzxQU5WaeiupJI2VbUll naZbE/vve+nXl68wr+uY52lvbZgTtdaO+fCNegD6taSS/rT2I26/Z562NN7+VtKttcmP4VJ7 acsb4HuDdaKDJrBwT615Hrfp1lNb3v9vosP60syWV28GnTNyVzXtWlBAG9rSsC1D7Kr607yn 0FLrm5F7qom3kkq/6Ufh6FvmFWqrEtRrSSVpa/9Zab192sMjc6vWT2umfloz9dOQZuobpVbw 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 gv3bbrq8TClmWu2+0ffbSfdb3RJD/1axVbttY6B/q4iKt7Vn+seKreJtvZD+rSIq3hZ56B8r toq7HU//2BhVd3eU/7ny9/d/3Q7UP/7d+//+Ty//+6d/fP/P/vL//U//ZXi/nxz/9Lfvq/fU bKm9D+Zv4zS/nFDe/+nH/i9/+g/v/937P3/3T/7ifbmFwp+/2979X3/+bn73T97909uH/+bd X737Vy///Tfv/vrdv3336d1Pf/H+37//079+/y/+dND2eNz2y1T4ru0/f9H9y3d/8xfv//Qf f7NmNZf6qv/m3V+f0hx3T6qv+Zfv/td3/9O7f/nujy9H49+eUs9pOVT/3979Dy9H+G9e9P/3 U9rTfr08/uZ/9fLf/8u7/+6ljf/zpY1/efL4zPsg+Te08vL5w7tfT7W1jMf9+8d3/8ftiJ3S Lfvc8FXdC996zcd9/Lx+2Kbf2NsXftFLnh13+pWOaKOo360nXi4JU0rT+5ezZqeBX28ns9On nb7m7WT5r86deNbp1W/78CAcnfS39Kruz+8+ntKdXoaYr+l+PPl9l/R6r53VLS9zrdd0f3n3 yynddXi93z4+irID3e1lGFrm4TAavr703H97Snmflf5O0rdZ2WvSv7z7clZ6HLZXpX999/mR 9MPUK+uuPYbI+Pli5h3Ings4T7yu7KeTsp53B7IfLqZdV/bju08Xs+6p3xZJ1xW9hdiHqzl3 oPzp5T8XU+5A+ZeXb30x485/54cJt23doPhyLuHK9m3Z1vFA9nbu+bOT8eZJ15U+G2/zNrz2 jW/xdvYbL1t5TfrlMnpa2pPv4GCcu0Ij+bqit0C+fME7UH4ZCF5NvgPln8+fMJB8B8ofn5B8 w5i6QXduQOiXu77ux5M54qnX1z0bbn7B6+t+PpkdfsU7Og6fL2bdUb+d+75Iu77qLe8ejqse 5d2R9JcX8dOJN30rw7x2tW+G1gcztD7UVHndtnqUhkc/4dPLaPlyHk5DR/vLyYkD5WFX92z8 UR52da8PPPu6n09+X8rDg+NwbpRBeXjwfc+OPccW0R3ZGNG/nI9oS8rut79dDT9evRoeSf90 /hJueXgg/enxlfZxHi5jR/vrWePFRqN93dsV/M+uXxO72p9OXsMpF7u6Z89JlIsHx+LyNbGr ++vFoWhf9TauOz1itPQ7kP58/nJr6Xcg/dP5zLb0O5D++HiWeZR+txt7x5JfunDNXe0Pl/2X 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 cpb3lG/bxK/ulz/6ztfvt372cbYZ6YHuhY0NntR96QsPJLAZ6eG3vm4LHUqfHvdSEs7dXSSX R70Huk/wZg+UP17fhNBV/nh6Ix4n4dHRuOzNHiifnYp7EvZ0L607eBL2pa+8XsSurD3pr0/Y vnt4OJ7gzI6ls4nh9EomjXj7up+fNOI9+NanX3Q+v6r86XRIcxoefefLe4EOvvPVpyr3dS9d VXwFs6P9xHfx+IXx6T/Bs/JI+gm3tYxb92k9Zxctp7YL4ED27C4ATsi+8hP283aVP19468jw 4Dtfv5X6SPmsN+YJ2dO9tHWGEvJe+5lbCuwi2fsJVy6StqHgDT/gDa/Xe5ybeXjiw3Fo0NrV /fwMq/ZA+eyLhig5D47F2eeKUXJ2lX89/7Qge0reYf/tJvC193/0tfcbxK8naEc7xvfXJyRo 9ydceCyYJ+gbfsAbvLM3JGjubGR4wpJmV/fL6dumOUH7ymcfWMAJ2j8Wpx82SQl6dDRO3utG Cdr/zj/v1vBFe6er/awEvdf+PTblHf6E84/jst0Hj3/CM3Yf+MJnnrs7KZ6w8NlV/nr6Jk9O 1r7y2RtT5xflNN1G54cH46cnZOvR4TjrAaVvaU3D4Zf+6bS0p+qR8gUTyFL1Xvv3mH0e/oRn pOrDn/CUVLU5TV4PXt101ipabhGU1kPl22LXybewl/xtWMpWutrHR+lLvb6c6vT55UiNL+ef Vw7Ux/1BzOd+0rJNSLijo3XW/HpRxQmoL/3h9HDBc/noS1/Y52e5/LCLn5PLRz/hCbetvOEn yG0rf3z5z/8Pm6Ag6AplbmRzdHJlYW0KZW5kb2JqCjgKMApvYmoKMjIxODMKZW5kb2JqCjkK MApvYmoKWwpdCmVuZG9iagoxMAowCm9iago8PAovQ0EKMC4xNDkwMTk2MQovY2EKMC4xNDkw MTk2MQo+PgplbmRvYmoKNwowCm9iago8PAovRm9udAo8PAovRm9udDEKMTEKMApSCi9Gb250 MgoxMgowClIKPj4KL1BhdHRlcm4KPDwKPj4KL1hPYmplY3QKPDwKPj4KL0V4dEdTdGF0ZQo8 PAovQWxwaGEwCjEwCjAKUgo+PgovUHJvY1NldApbCi9QREYKL1RleHQKL0ltYWdlQgovSW1h Z2VDCi9JbWFnZUkKXQo+PgplbmRvYmoKMTEKMApvYmoKPDwKL1R5cGUKL0ZvbnQKL1N1YnR5 cGUKL1R5cGUwCi9CYXNlRm9udAovTVVGVVpZK0FyaWFsTVQKL0VuY29kaW5nCi9JZGVudGl0 eS1ICi9EZXNjZW5kYW50Rm9udHMKWwoxMwowClIKXQovVG9Vbmljb2RlCjE0CjAKUgo+Pgpl bmRvYmoKMTIKMApvYmoKPDwKL1R5cGUKL0ZvbnQKL1N1YnR5cGUKL1R5cGUwCi9CYXNlRm9u dAovTVVGVVpZK0FyaWFsLUJvbGRNVAovRW5jb2RpbmcKL0lkZW50aXR5LUgKL0Rlc2NlbmRh bnRGb250cwpbCjE3CjAKUgpdCi9Ub1VuaWNvZGUKMTgKMApSCj4+CmVuZG9iagoxNAowCm9i ago8PAovRmlsdGVyCi9GbGF0ZURlY29kZQovTGVuZ3RoCjIxCjAKUgo+PgpzdHJlYW0KeJxl kk1uwyAQhfecgmW7iAzYcVrJQqpSVfKiP6rbAxAYp0g1RpgsfPvioUmTFMmGzzPvzchDsW0f W2cjLd7CqDuItLfOBJjGQ9BAd7C3jnBBjdXxl/CtB+VJkcTdPEUYWtePpGlo8Z6CUwwzvXkw 4w5uSfEaDATr9vTmc9sl7g7ef8MALlJGpKQG+mT0rPyLGoAWKFu1JsVtnFdJ85fxMXugApnn ZvRoYPJKQ1BuD6RhaUnaPKUlCThzFWdZteszpoTjsTxG9JcK6FMmH8YEk0h3mdZInGcCmS1Q wy+9l7RswTVuJZPnBevrgqLCtIpjCZELVrmgUJk2SOUaaS0y3WeqkapMdX3emvjXWtKiKHdY 96hNFvhxg9umvOh3+ZnLzE+T0ocQ0pDwYuB0lrlYB6e740e/qPD5AZMatdoKZW5kc3RyZWFt CmVuZG9iagoxNgowCm9iago8PAovRmlsdGVyCi9GbGF0ZURlY29kZQovTGVuZ3RoCjIyCjAK Ugo+PgpzdHJlYW0KeJztvQd4lFX2P37ufcv0zDuTNpMyM8mkAAMEElogkgECKEU6JkgkSJEi UoIdJSjSREVdUVFpa0VZhxAxoLuwiriiiGvbtaOLfVHWRdYCeX/n3Pd9Q4iF3f1+/8//9/ye JH7uub2ee865974RYADggDqQQJty2cLIpqy/fIkx9wKoY6fPu2jOS1dWrUP/UcQlF1185fRt ye+uB/DUAHT604xpk6ceStn3d4A+7bBMjxkY4S9Jy8UwpkPejDkLr5jU/cR4DC8F6D714rlT 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 T9f/UpMOoF1Qx5/azuIhthBqq6REaOhYjqJg7AQc68QJlbvQliL1UFuFA6xlMVZr1WF2OxYz /6FioDFbWHip6TPnYqFJjZJYpNaakuYfmqxY84wtxArh/wCeBp5gCmVuZHN0cmVhbQplbmRv YmoKMTMKMApvYmoKPDwKL1R5cGUKL0ZvbnQKL1N1YnR5cGUKL0NJREZvbnRUeXBlMgovQmFz ZUZvbnQKL01VRlVaWStBcmlhbE1UCi9DSURTeXN0ZW1JbmZvCjw8Ci9SZWdpc3RyeQooQWRv YmUpCi9PcmRlcmluZwooVUNTKQovU3VwcGxlbWVudAowCj4+Ci9Gb250RGVzY3JpcHRvcgox NQowClIKL0NJRFRvR0lETWFwCi9JZGVudGl0eQovRFcKNTU2Ci9XClsKMApbCjc1MAowCjAK Mjc3Cl0KNAo3CjAKOApbCjg4OQpdCjkKMTYKMAoxNwpbCjI3NwowCl0KMTkKMjgKNTU2CjI5 CjM1CjAKMzYKWwo2NjYKXQozNwozOQowCjQwClsKNjY2CjAKNzc3Cl0KNDMKNTIKMAo1Mwpb CjcyMgpdCjU0CjU2CjAKNTcKWwo2NjYKXQo1OAo3MgowCjczClsKMjc3Cl0KNzQKODEKMAo4 Mgo4Mwo1NTYKODQKODUKMAo4NgpbCjUwMAoyNzcKXQpdCj4+CmVuZG9iagoxNQowCm9iago8 PAovVHlwZQovRm9udERlc2NyaXB0b3IKL0ZvbnROYW1lCi9NVUZVWlkrQXJpYWxNVAovRmxh Z3MKNAovRm9udEJCb3gKWwotNjY0Ci0zMjQKMjAwMAoxMDA1Cl0KL0FzY2VudAo3MjgKL0Rl c2NlbnQKLTIxMAovSXRhbGljQW5nbGUKMAovQ2FwSGVpZ2h0CjcxNgovU3RlbVYKODAKL0Zv bnRGaWxlMgoxNgowClIKPj4KZW5kb2JqCjE4CjAKb2JqCjw8Ci9GaWx0ZXIKL0ZsYXRlRGVj b2RlCi9MZW5ndGgKMjMKMApSCj4+CnN0cmVhbQp4nH1Sy26DMBC8+yt8TA8RmABJJWSpSlWJ Qx8q7QcYe0ktFWMZ58Df1/Y2aZpKtWRgdmdm16yzfXvfGu1p9uIm2YGngzbKwTwdnQTaw0Eb wgqqtPTfKD3lKCzJgrhbZg9ja4aJNA3NXkNy9m6hqzs19XBDsmenwGlzoKv3fRdwd7T2E0Yw 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 28xWs9msmRWzZCazm/999CD/m7huTfxpXE3h34oIOyT+LX6jD7YqZpbobAolyrVS7fihrDbU fhHVXhgIfT0+u5VZx04OqdlDWchVS7UThoYGBWtbTZFxobJgbchUd179LsZuaUBqSFrRymhC fSuL8KRlqSHXMGTSsjWpbcRYyrI1DQ3k9Sys9Fa6hjjLa6p/4qvJ+A6e+ni7BtND62vH14e2 pzeESnggkt5QG/rN+MD59W1SgmQfXt0mxXPSUN+mzJESho/j6cqc6gYUOyqKQZvjUYzyOUEx 81AK8GKwJ0N5McxRtFwe2FEukxOUs9opT5TLs9pFOYXxcrsOB4ZX7woERJlcosOizOFc6lIG GgPe6l15eaJUdoDV81KsPjsgOlYoKvL7UaSPXxRh8OtERX4mGgsVnSqSaxQZ0FlkgGhLZqfK +KNl3AWxMu4ClAn+Dz/ThwZZS78Fi58ZPj17eFP28OlAU2j1wpne0NILA4FdixfwjEBIzmu6 8KKZnE6dHlqQPb06tDi7OrCr3zM/kf0Mz+6XXb2Lnhk+oX7XM/r06uZ+er/h2VOrG1oqK+qr TmtrZWdb9RU/UVkFr6yet1VZ9RPZVTy7krdVxduq4m1V6pWireGzuN7X1e8y09CGYedHaYsU Z4UON6VmNgz1OOYM4QrdNjjTuzh1r0JsG8UFG0K27KEhO8Cz+lT1qeJZWGc8Kx7JCUaWd/Hg zNS9bJuR5UCyM3to55/OJl6oNjRgbG0oc/zkeq4qIX3qT8/ZPP4R2V4aPqsa/xCfL4CfriVp 3k9+5v/UZ8GCBfP414LgPKLaUK/xtaGBY9ETkwlNNVU3IK1vLE2WRdoui2V4a6QdmUF0gs3n zfFQkAUhQd2KU5dJ2qxtNkn8qDC/xZdeMvsJ7OBLAJzjpEXNReL4LC1qycrl55f5LUUDohTH VU6bfZkl/E+ul4GV09wo1Z19EFibu7bP2rLNuZv7bC7jf5h9zxYk+rfwrbS5aItM84PzYoJA cH4DhI1u8fYeaE5LFw1v5oFgsCE4jwl5/VjYLCb0TsHOM2qdJ6qfH5uQaPo8oxLMRLT1BTG2 BQaTyFwgmKKVRGOdX6c+iBH9HwBSKcIKZW5kc3RyZWFtCmVuZG9iagoxNwowCm9iago8PAov VHlwZQovRm9udAovU3VidHlwZQovQ0lERm9udFR5cGUyCi9CYXNlRm9udAovTVVGVVpZK0Fy aWFsLUJvbGRNVAovQ0lEU3lzdGVtSW5mbwo8PAovUmVnaXN0cnkKKEFkb2JlKQovT3JkZXJp bmcKKFVDUykKL1N1cHBsZW1lbnQKMAo+PgovRm9udERlc2NyaXB0b3IKMTkKMApSCi9DSURU b0dJRE1hcAovSWRlbnRpdHkKL0RXCjU1NgovVwpbCjAKWwo3NTAKXQoxCjE1CjAKMTYKWwoz MzMKMAowCl0KMTkKMjgKNTU2CjI5CjY3CjAKNjgKWwo1NTYKMAo1NTYKMAo1NTYKMzMzCjAK NjEwCjI3NwowCjU1NgoyNzcKODg5Cl0KODEKODMKNjEwCjg0ClsKMAozODkKNTU2CjMzMwo2 MTAKMAo3NzcKXQpdCj4+CmVuZG9iagoxOQowCm9iago8PAovVHlwZQovRm9udERlc2NyaXB0 b3IKL0ZvbnROYW1lCi9NVUZVWlkrQXJpYWwtQm9sZE1UCi9GbGFncwo0Ci9Gb250QkJveApb Ci02MjcKLTM3NgoyMDAwCjEwMTcKXQovQXNjZW50CjcyOAovRGVzY2VudAotMjEwCi9JdGFs aWNBbmdsZQowCi9DYXBIZWlnaHQKNzE1Ci9TdGVtVgo4MAovRm9udEZpbGUyCjIwCjAKUgo+ PgplbmRvYmoKMjEKMApvYmoKMzE3CmVuZG9iagoyMgowCm9iagoxNzczOQplbmRvYmoKMjMK MApvYmoKMzEyCmVuZG9iagoyNAowCm9iagoxODAyMAplbmRvYmoKMQowCm9iago8PAovVHlw ZQovUGFnZXMKL0tpZHMKWwo1CjAKUgpdCi9Db3VudAoxCj4+CmVuZG9iagp4cmVmCjAgMjUK MDAwMDAwMDAwMiA2NTUzNSBmIAowMDAwMDYxMTY3IDAwMDAwIG4gCjAwMDAwMDAwMDAgMDAw MDAgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDAwMTQyIDAwMDAwIG4gCjAwMDAwMDAy MzUgMDAwMDAgbiAKMDAwMDAwMDQwMCAwMDAwMCBuIAowMDAwMDIyNzQ5IDAwMDAwIG4gCjAw MDAwMjI2NTcgMDAwMDAgbiAKMDAwMDAyMjY3OCAwMDAwMCBuIAowMDAwMDIyNjk3IDAwMDAw IG4gCjAwMDAwMjI5MjAgMDAwMDAgbiAKMDAwMDAyMzA2NCAwMDAwMCBuIAowMDAwMDQxNDIx IDAwMDAwIG4gCjAwMDAwMjMyMTMgMDAwMDAgbiAKMDAwMDA0MTg0MCAwMDAwMCBuIAowMDAw MDIzNjA2IDAwMDAwIG4gCjAwMDAwNjA1MjEgMDAwMDAgbiAKMDAwMDA0MjAzNyAwMDAwMCBu IAowMDAwMDYwODgxIDAwMDAwIG4gCjAwMDAwNDI0MjUgMDAwMDAgbiAKMDAwMDA2MTA4MyAw MDAwMCBuIAowMDAwMDYxMTAzIDAwMDAwIG4gCjAwMDAwNjExMjUgMDAwMDAgbiAKMDAwMDA2 MTE0NSAwMDAwMCBuIAp0cmFpbGVyCjw8Ci9TaXplCjI1Ci9Sb290CjMKMApSCi9JbmZvCjQK MApSCj4+CnN0YXJ0eHJlZgo2MTIyNgolJUVPRgo= --------------apuxkCRUZ0GRSLZG7S4PIVYY Content-Type: text/x-patch; charset=UTF-8; name="v20251101-0007-NUMA-partition-PGPROC.patch" Content-Disposition: attachment; filename="v20251101-0007-NUMA-partition-PGPROC.patch" Content-Transfer-Encoding: base64 RnJvbSA1ZWNmYzhjNGYwNDIyMTliNDY5MWU1ZjA3NzBjNzJmNTVjNDgzMGFjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogTW9uLCA4IFNlcCAyMDI1IDEzOjExOjAyICswMjAwClN1YmplY3Q6IFtQQVRDSCB2 MjAyNTExMDEgNy83XSBOVU1BOiBwYXJ0aXRpb24gUEdQUk9DCgpUaGUgZ29hbCBpcyB0byBk aXN0cmlidXRlIFByb2NBcnJheSAob3IgcmF0aGVyIFBHUFJPQyBlbnRyaWVzIGFuZAphc3Nv Y2lhdGVkIGZhc3QtcGF0aCBhcnJheXMpIHRvIE5VTUEgbm9kZXMuCgpXZSBjYW4ndCBkbyB0 aGlzIGJ5IHNpbXBseSBpbnRlcmxlYXZpbmcgcGFnZXMsIGJlY2F1c2UgdGhhdCB3b3VsZG4n dAp3b3JrIGZvciBib3RoIHBhcnRzIGF0IHRoZSBzYW1lIHRpbWUuIFdlIHdhbnQgdG8gcGxh Y2UgdGhlIFBHUFJPQyBhbmQKaXQncyBmYXN0LXBhdGggbG9ja2luZyBzdHJ1Y3RzIG9uIHRo ZSBzYW1lIG5vZGUsIGJ1dCB0aGUgc3RydWN0cyBhcmUKb2YgZGlmZmVyZW50IHNpemVzLCBl dGMuCgpBbm90aGVyIHByb2JsZW0gaXMgdGhhdCBQR1BST0MgZW50cmllcyBhcmUgZmFpcmx5 IHNtYWxsLCBzbyB3aXRoIGh1Z2UKcGFnZXMgYW5kIHJlYXNvbmFibGUgdmFsdWVzIG9mIG1h eF9jb25uZWN0aW9ucyBldmVyeXRoaW5nIGZpdHMgb250byBhCnNpbmdsZSBwYWdlLiBXZSBk b24ndCB3YW50IHRvIG1ha2UgdGhpcyBpbmNvbXBhdGlibGUgd2l0aCBodWdlIHBhZ2VzLgoK Tm90ZTogSWYgd2UgZXZlbnR1YWxseSBzd2l0Y2ggdG8gYWxsb2NhdGluZyBzZXBhcmF0ZSBz aGFyZWQgc2VnbWVudHMgZm9yCmRpZmZlcmVudCBwYXJ0cyAodG8gYWxsb3cgb24tbGluZSBy ZXNpemluZyksIHdlIGNvdWxkIGtlZXAgdXNpbmcgcmVndWxhcgpwYWdlcyBmb3IgcHJvY2Fy cmF5LCBhbmQgdGhpcyB3b3VsZCBub3QgYmUgc3VjaCBhbiBpc3N1ZS4KClRvIG1ha2UgdGhp cyB3b3JrLCB3ZSBzcGxpdCB0aGUgUEdQUk9DIGFycmF5IGludG8gcGVyLW5vZGUgc2VnbWVu dHMsCmVhY2ggd2l0aCBhYm91dCAoTWF4QmFja2VuZHMgLyBudW1hX25vZGVzKSBlbnRyaWVz LCBhbmQgb25lIHNlZ21lbnQgZm9yCmF1eGlsaWFyeSBwcm9jZXNzZXMgYW5kIHByZXBhcmVk IHRyYW5zYXRpb25zLiBBbmQgd2UgZG8gdGhlIHNhbWUgdGhpbmcKZm9yIGZhc3QtcGF0aCBh cnJheXMuCgpUaGUgUEdQUk9DIHNlZ21lbnRzIGFyZSBsYWlkIG91dCBsaWtlIHRoaXMgKGUu Zy4gZm9yIDIgTlVNQSBub2Rlcyk6CgogLSBQR1BST0MgYXJyYXkgLyBub2RlICMwCiAtIFBH UFJPQyBhcnJheSAvIG5vZGUgIzEKIC0gUEdQUk9DIGFycmF5IC8gYXV4IHByb2Nlc3NlcyAr IDJQQyB0cmFuc2FjdGlvbnMKIC0gZmFzdC1wYXRoIGFycmF5cyAvIG5vZGUgIzAKIC0gZmFz dC1wYXRoIGFycmF5cyAvIG5vZGUgIzEKIC0gZmFzdC1wYXRoIGFycmF5cyAvIGF1eCBwcm9j ZXNzZXMgKyAyUEMgdHJhbnNhY3Rpb24KCkVhY2ggc2VnbWVudCBpcyBhbGlnbmVkIHRvIChz dGFydHMgYXQpIG1lbW9yeSBwYWdlLCBhbmQgaXMgZWZmZWN0aXZlbHkgYQptdWx0aXBsZSBv ZiBtdWx0aXBsZSBtZW1vcnkgcGFnZXMuCgpIYXZpbmcgYSBzaW5nbGUgUEdQUk9DIGFycmF5 IG1hZGUgY2VydGFpbiBvcGVyYXRpb25zIGVhc2llcnMgLSBlLmcuIGl0CndhcyBwb3NzaWJs ZSB0byBpdGVyYXRlIHRoZSBhcnJheSwgYW5kIEdldE51bWJlckZyb21QR1Byb2MoKSBjb3Vs ZApjYWxjdWxhdGUgb2Zmc2V0IGJ5IHNpbXBseSBzdWJ0cmFjdGluZyBQR1BST0MgcG9pbnRl cnMuIFdpdGggbXVsdGlwbGUKc2VnbWVudHMgdGhhdCdzIG5vdCBwb3NzaWJsZSwgYnV0IHRo ZSBmYWxsb3V0IGlzIG1pbmltYWwuCgpNb3N0IHBsYWNlcyBhY2Nlc3NlZCBQR1BST0MgdGhy b3VnaCBQUk9DX0hEUi0+YWxsUHJvY3MsIGFuZCBjYW4gY29udGludWUKdG8gZG8gc28sIGV4 Y2VwdCB0aGF0IG5vdyB0aGV5IGdldCBhIHBvaW50ZXIgdG8gdGhlIFBHUFJPQyAod2hpY2gg bW9zdApwbGFjZXMgd2FudGVkIGFueXdheSkuCgpXaXRoIHRoZSBmZWF0dXJlIGRpc2FibGVk LCB0aGVyZSdzIG9ubHkgYSBzaW5nbGUgInBhcnRpdGlvbiIgZm9yIGFsbApQR1BST0MgZW50 cmllcy4KClNpbWlsYXJseSB0byB0aGUgYnVmZmVyIHBhcnRpdGlvbmluZywgdGhpcyBpbnRy b2R1Y2VzIGEgc21hbGwgInJlZ2lzdHJ5IgpvZiBwYXJ0aXRpb25zLCBhcyBhIHNvdXJjZSBv ZiB0cnV0aC4gQW5kIHRoZW4gYWxzbyBhIG5ldyAic3lzdGVtIiB2aWV3CiJwZ19idWZmZXJj YWNoZV9wZ3Byb2MiIHNob3dpbmcgYmFzaWMgaW5mcm9tYXRpb24gYWJvdXV0IHRoZSBwYXJ0 aXRpb25zLgoKTm90ZTogVGhlcmUncyBhbiBpbmRpcmVjdGlvbiwgdGhvdWdoLiBCdXQgdGhl IHBvaW50ZXIgZG9lcyBub3QgY2hhbmdlLApzbyBob3BlZnVsbHkgdGhhdCdzIG5vdCBhbiBp c3N1ZS4gQW5kIGVhY2ggUEdQUk9DIGVudHJ5IGdldHMgYW4gZXhwbGljaXQKcHJvY251bWJl ciBmaWVsZCwgd2hpY2ggaXMgdGhlIGluZGV4IGluIGFsbFByb2NzLCBHZXROdW1iZXJGcm9t UEdQcm9jCmNhbiBzaW1wbHkgcmV0dXJuIHRoYXQuCgpFYWNoIFBHUFJPQyBhbHNvIGdldHMg bnVtYV9ub2RlLCB0cmFja2luZyB0aGUgTlVNQSBub2RlLCBzbyB0aGF0IHdlCmRvbid0IGhh dmUgdG8gcmVjYWxjdWxhdGUgdGhhdC4gVGhpcyBpcyB1c2VkIGJ5IEluaXRQcm9jZXNzKCkg dG8gcGljawphIFBHUFJPQyBlbnRyeSBmcm9tIHRoZSBsb2NhbCBOVU1BIG5vZGUuCgpOb3Rl OiBUaGUgc2NoZWR1bGVyIG1heSBtaWdyYXRlIHRoZSBwcm9jZXNzIHRvIGEgZGlmZmVyZW50 IENQVS9ub2RlCmxhdGVyLiBNYXliZSB3ZSBzaG91bGQgY29uc2lkZXIgcGlubmluZyB0aGUg cHJvY2VzcyB0byB0aGUgbm9kZT8KCk5vdGU6IFRoZXJlJ3Mgc29tZSBjaGFsbGVuZ2VzIGlu IG1ha2luZyB0aGlzIHdvcmsgb24gRVhFQ19CQUNLRU5ELCBldmVuCmlmIHdlIGRvbid0IHN1 cHBvcnQgTlVNQSBvbiBwbGF0Zm9ybXMgdGhhdCByZXF1aXJlIHRoaXMuCi0tLQogLi4uL3Bn X2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwgICAgICAgICAgICAgIHwgIDE5ICsKIGNvbnRy aWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYyB8ICA5NiArKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYyAgICAgICAgICAgICB8ICAgNCArLQog c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYyAgICAgICAgIHwgICAzICst CiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMgICAgICAgfCAgIDQg Ky0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMgICAgICAgICAgICAgICB8ICAg MiArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmMgICAgICAgIHwg ICAyICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jICAgICAgICAg fCAgIDIgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYyAgICAgICAg IHwgICAyICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYyAgICAgICAg ICAgfCAgODUgKystCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jICAgICAgICAg ICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMgICAgICAg ICAgICAgICB8IDU1MCArKysrKysrKysrKysrKysrKy0KIHNyYy9pbmNsdWRlL3BvcnQvcGdf bnVtYS5oICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9zdG9yYWdl L3Byb2MuaCAgICAgICAgICAgICAgICAgICAgfCAgMTggKy0KIHNyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMSArCiAxNSBmaWxlcyBjaGFuZ2Vk LCA3MjIgaW5zZXJ0aW9ucygrKSwgNzMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29u dHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsIGIvY29u dHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsCmluZGV4 IGRjMmNlMDE5MjgzLi4zMDYwNjNlMTU5ZSAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19idWZm ZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsCisrKyBiL2NvbnRyaWIvcGdf YnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbApAQCAtMzMsMyArMzMs MjIgQEAgUkVWT0tFIEFMTCBPTiBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zIEZST00gUFVC TElDOwogCiBHUkFOVCBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2J1ZmZlcmNhY2hlX3BhcnRp dGlvbnMoKSBUTyBwZ19tb25pdG9yOwogR1JBTlQgU0VMRUNUIE9OIHBnX2J1ZmZlcmNhY2hl X3BhcnRpdGlvbnMgVE8gcGdfbW9uaXRvcjsKKworLS0gUmVnaXN0ZXIgdGhlIG5ldyBmdW5j dGlvbnMuCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBwZ19idWZmZXJjYWNoZV9wZ3By b2MoKQorUkVUVVJOUyBTRVRPRiBSRUNPUkQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdf YnVmZmVyY2FjaGVfcGdwcm9jJworTEFOR1VBR0UgQyBQQVJBTExFTCBTQUZFOworCistLSBD cmVhdGUgYSB2aWV3IGZvciBjb252ZW5pZW50IGFjY2Vzcy4KK0NSRUFURSBWSUVXIHBnX2J1 ZmZlcmNhY2hlX3BncHJvYyBBUworCVNFTEVDVCBQLiogRlJPTSBwZ19idWZmZXJjYWNoZV9w Z3Byb2MoKSBBUyBQCisJKHBhcnRpdGlvbiBpbnRlZ2VyLAorCSBudW1hX25vZGUgaW50ZWdl ciwgbnVtX3Byb2NzIGludGVnZXIsIHBncHJvY19wdHIgYmlnaW50LCBmYXN0cGF0aF9wdHIg YmlnaW50KTsKKworLS0gRG9uJ3Qgd2FudCB0aGVzZSB0byBiZSBhdmFpbGFibGUgdG8gcHVi bGljLgorUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBwZ19idWZmZXJjYWNoZV9wZ3Byb2MoKSBG Uk9NIFBVQkxJQzsKK1JFVk9LRSBBTEwgT04gcGdfYnVmZmVyY2FjaGVfcGdwcm9jIEZST00g UFVCTElDOworCitHUkFOVCBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2J1ZmZlcmNhY2hlX3Bn cHJvYygpIFRPIHBnX21vbml0b3I7CitHUkFOVCBTRUxFQ1QgT04gcGdfYnVmZmVyY2FjaGVf cGdwcm9jIFRPIHBnX21vbml0b3I7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX2J1ZmZlcmNh Y2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3Bn X2J1ZmZlcmNhY2hlX3BhZ2VzLmMKaW5kZXggNjEyMDczNTdlNTMuLmE4NTk5NjJmNWY4IDEw MDY0NAotLS0gYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2Vz LmMKKysrIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5j CkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAicG9ydC9wZ19udW1hLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9idWZfaW50ZXJuYWxzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3Iu aCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJ1dGlscy9hcnJheS5o IgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgi CkBAIC0yOSw3ICszMCw4IEBACiAjZGVmaW5lIE5VTV9CVUZGRVJDQUNIRV9FVklDVF9BTExf RUxFTSAzCiAKICNkZWZpbmUgTlVNX0JVRkZFUkNBQ0hFX05VTUFfRUxFTQkzCi0jZGVmaW5l IE5VTV9CVUZGRVJDQUNIRV9QQVJUSVRJT05TX0VMRU0JMTEKKyNkZWZpbmUgTlVNX0JVRkZF UkNBQ0hFX1BBUlRJVElPTlNfRUxFTQkxMgorI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfUEdQ Uk9DX0VMRU0JNQogCiBQR19NT0RVTEVfTUFHSUNfRVhUKAogCQkJCQkubmFtZSA9ICJwZ19i dWZmZXJjYWNoZSIsCkBAIC0xMDQsNiArMTA2LDcgQEAgUEdfRlVOQ1RJT05fSU5GT19WMShw Z19idWZmZXJjYWNoZV9ldmljdCk7CiBQR19GVU5DVElPTl9JTkZPX1YxKHBnX2J1ZmZlcmNh Y2hlX2V2aWN0X3JlbGF0aW9uKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdfYnVmZmVyY2Fj aGVfZXZpY3RfYWxsKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdfYnVmZmVyY2FjaGVfcGFy dGl0aW9ucyk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2J1ZmZlcmNhY2hlX3BncHJvYyk7 CiAKIAogLyogT25seSBuZWVkIHRvIHRvdWNoIG1lbW9yeSBvbmNlIHBlciBiYWNrZW5kIHBy b2Nlc3MgbGlmZXRpbWUgKi8KQEAgLTkzMiwzICs5MzUsOTQgQEAgcGdfYnVmZmVyY2FjaGVf cGFydGl0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCWVsc2UKIAkJU1JGX1JFVFVSTl9ET05F KGZ1bmNjdHgpOwogfQorCisvKgorICogSW5xdWlyZSBhYm91dCBwYXJ0aXRpb25pbmcgb2Yg UEdQUk9DIGFycmF5LgorICovCitEYXR1bQorcGdfYnVmZmVyY2FjaGVfcGdwcm9jKFBHX0ZV TkNUSU9OX0FSR1MpCit7CisJRnVuY0NhbGxDb250ZXh0ICpmdW5jY3R4OworCU1lbW9yeUNv bnRleHQgb2xkY29udGV4dDsKKwlUdXBsZURlc2MJdHVwbGVkZXNjOworCVR1cGxlRGVzYwll eHBlY3RlZF90dXBsZWRlc2M7CisJSGVhcFR1cGxlCXR1cGxlOworCURhdHVtCQlyZXN1bHQ7 CisKKwlpZiAoU1JGX0lTX0ZJUlNUQ0FMTCgpKQorCXsKKwkJZnVuY2N0eCA9IFNSRl9GSVJT VENBTExfSU5JVCgpOworCisJCS8qIFN3aXRjaCBjb250ZXh0IHdoZW4gYWxsb2NhdGluZyBz dHVmZiB0byBiZSB1c2VkIGluIGxhdGVyIGNhbGxzICovCisJCW9sZGNvbnRleHQgPSBNZW1v cnlDb250ZXh0U3dpdGNoVG8oZnVuY2N0eC0+bXVsdGlfY2FsbF9tZW1vcnlfY3R4KTsKKwor CQlpZiAoZ2V0X2NhbGxfcmVzdWx0X3R5cGUoZmNpbmZvLCBOVUxMLCAmZXhwZWN0ZWRfdHVw bGVkZXNjKSAhPSBUWVBFRlVOQ19DT01QT1NJVEUpCisJCQllbG9nKEVSUk9SLCAicmV0dXJu IHR5cGUgbXVzdCBiZSBhIHJvdyB0eXBlIik7CisKKwkJaWYgKGV4cGVjdGVkX3R1cGxlZGVz Yy0+bmF0dHMgIT0gTlVNX0JVRkZFUkNBQ0hFX1BHUFJPQ19FTEVNKQorCQkJZWxvZyhFUlJP UiwgImluY29ycmVjdCBudW1iZXIgb2Ygb3V0cHV0IGFyZ3VtZW50cyIpOworCisJCS8qIENv bnN0cnVjdCBhIHR1cGxlIGRlc2NyaXB0b3IgZm9yIHRoZSByZXN1bHQgcm93cy4gKi8KKwkJ dHVwbGVkZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoZXhwZWN0ZWRfdHVwbGVkZXNj LT5uYXR0cyk7CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVy KSAxLCAicGFydGl0aW9uIiwKKwkJCQkJCSAgIElOVDRPSUQsIC0xLCAwKTsKKwkJVHVwbGVE ZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDIsICJudW1hX25vZGUiLAor CQkJCQkJICAgSU5UNE9JRCwgLTEsIDApOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVk ZXNjLCAoQXR0ck51bWJlcikgMywgIm51bV9wcm9jcyIsCisJCQkJCQkgICBJTlQ0T0lELCAt MSwgMCk7CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSA0 LCAicGdwcm9jX3B0ciIsCisJCQkJCQkgICBJTlQ4T0lELCAtMSwgMCk7CisJCVR1cGxlRGVz Y0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSA1LCAiZmFzdHBhdGhfcHRyIiwK KwkJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKKworCQlmdW5jY3R4LT51c2VyX2ZjdHggPSBC bGVzc1R1cGxlRGVzYyh0dXBsZWRlc2MpOworCisJCS8qIFJldHVybiB0byBvcmlnaW5hbCBj b250ZXh0IHdoZW4gYWxsb2NhdGluZyB0cmFuc2llbnQgbWVtb3J5ICovCisJCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCQkvKiBTZXQgbWF4IGNhbGxzIGFuZCBy ZW1lbWJlciB0aGUgdXNlciBmdW5jdGlvbiBjb250ZXh0LiAqLworCQlmdW5jY3R4LT5tYXhf Y2FsbHMgPSBQcm9jUGFydGl0aW9uQ291bnQoKTsKKwl9CisKKwlmdW5jY3R4ID0gU1JGX1BF UkNBTExfU0VUVVAoKTsKKworCWlmIChmdW5jY3R4LT5jYWxsX2NudHIgPCBmdW5jY3R4LT5t YXhfY2FsbHMpCisJeworCQl1aW50MzIJCWkgPSBmdW5jY3R4LT5jYWxsX2NudHI7CisKKwkJ aW50CQkJbnVtYV9ub2RlLAorCQkJCQludW1fcHJvY3M7CisKKwkJdm9pZAkgICAqcGdwcm9j X3B0ciwKKwkJCQkgICAqZmFzdHBhdGhfcHRyOworCisJCURhdHVtCQl2YWx1ZXNbTlVNX0JV RkZFUkNBQ0hFX1BHUFJPQ19FTEVNXTsKKwkJYm9vbAkJbnVsbHNbTlVNX0JVRkZFUkNBQ0hF X1BHUFJPQ19FTEVNXTsKKworCQlQcm9jUGFydGl0aW9uR2V0KGksICZudW1hX25vZGUsICZu dW1fcHJvY3MsCisJCQkJCQkgJnBncHJvY19wdHIsICZmYXN0cGF0aF9wdHIpOworCisJCXZh bHVlc1swXSA9IEludDMyR2V0RGF0dW0oaSk7CisJCW51bGxzWzBdID0gZmFsc2U7CisKKwkJ dmFsdWVzWzFdID0gSW50MzJHZXREYXR1bShudW1hX25vZGUpOworCQludWxsc1sxXSA9IGZh bHNlOworCisJCXZhbHVlc1syXSA9IEludDMyR2V0RGF0dW0obnVtX3Byb2NzKTsKKwkJbnVs bHNbMl0gPSBmYWxzZTsKKworCQl2YWx1ZXNbM10gPSBQb2ludGVyR2V0RGF0dW0ocGdwcm9j X3B0cik7CisJCW51bGxzWzNdID0gZmFsc2U7CisKKwkJdmFsdWVzWzRdID0gUG9pbnRlckdl dERhdHVtKGZhc3RwYXRoX3B0cik7CisJCW51bGxzWzRdID0gZmFsc2U7CisKKwkJLyogQnVp bGQgYW5kIHJldHVybiB0aGUgdHVwbGUuICovCisJCXR1cGxlID0gaGVhcF9mb3JtX3R1cGxl KChUdXBsZURlc2MpIGZ1bmNjdHgtPnVzZXJfZmN0eCwgdmFsdWVzLCBudWxscyk7CisJCXJl c3VsdCA9IEhlYXBUdXBsZUdldERhdHVtKHR1cGxlKTsKKworCQlTUkZfUkVUVVJOX05FWFQo ZnVuY2N0eCwgcmVzdWx0KTsKKwl9CisJZWxzZQorCQlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0 eCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMKaW5kZXggZTgwZmJlMTA5Y2Yu LjkyOGQxMjZkMGVlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9j bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jCkBAIC01NzQs NyArNTc0LDcgQEAgVHJhbnNhY3Rpb25Hcm91cFVwZGF0ZVhpZFN0YXR1cyhUcmFuc2FjdGlv bklkIHhpZCwgWGlkU3RhdHVzIHN0YXR1cywKIAkvKiBXYWxrIHRoZSBsaXN0IGFuZCB1cGRh dGUgdGhlIHN0YXR1cyBvZiBhbGwgWElEcy4gKi8KIAl3aGlsZSAobmV4dGlkeCAhPSBJTlZB TElEX1BST0NfTlVNQkVSKQogCXsKLQkJUEdQUk9DCSAgICpuZXh0cHJvYyA9ICZQcm9jR2xv YmFsLT5hbGxQcm9jc1tuZXh0aWR4XTsKKwkJUEdQUk9DCSAgICpuZXh0cHJvYyA9IFByb2NH bG9iYWwtPmFsbFByb2NzW25leHRpZHhdOwogCQlpbnQ2NAkJdGhpc3BhZ2VubyA9IG5leHRw cm9jLT5jbG9nR3JvdXBNZW1iZXJQYWdlOwogCiAJCS8qCkBAIC02MzMsNyArNjMzLDcgQEAg VHJhbnNhY3Rpb25Hcm91cFVwZGF0ZVhpZFN0YXR1cyhUcmFuc2FjdGlvbklkIHhpZCwgWGlk U3RhdHVzIHN0YXR1cywKIAkgKi8KIAl3aGlsZSAod2FrZWlkeCAhPSBJTlZBTElEX1BST0Nf TlVNQkVSKQogCXsKLQkJUEdQUk9DCSAgICp3YWtlcHJvYyA9ICZQcm9jR2xvYmFsLT5hbGxQ cm9jc1t3YWtlaWR4XTsKKwkJUEdQUk9DCSAgICp3YWtlcHJvYyA9IFByb2NHbG9iYWwtPmFs bFByb2NzW3dha2VpZHhdOwogCiAJCXdha2VpZHggPSBwZ19hdG9taWNfcmVhZF91MzIoJndh a2Vwcm9jLT5jbG9nR3JvdXBOZXh0KTsKIAkJcGdfYXRvbWljX3dyaXRlX3UzMigmd2FrZXBy b2MtPmNsb2dHcm91cE5leHQsIElOVkFMSURfUFJPQ19OVU1CRVIpOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMKaW5kZXggMzMzNjlmYmUyM2EuLmFmYTc0NDY2MDA2 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMKQEAgLTI4Miw3ICsy ODIsNyBAQCBUd29QaGFzZVNobWVtSW5pdCh2b2lkKQogCQkJVHdvUGhhc2VTdGF0ZS0+ZnJl ZUdYYWN0cyA9ICZneGFjdHNbaV07CiAKIAkJCS8qIGFzc29jaWF0ZSBpdCB3aXRoIGEgUEdQ Uk9DIGFzc2lnbmVkIGJ5IEluaXRQcm9jR2xvYmFsICovCi0JCQlneGFjdHNbaV0ucGdwcm9j bm8gPSBHZXROdW1iZXJGcm9tUEdQcm9jKCZQcmVwYXJlZFhhY3RQcm9jc1tpXSk7CisJCQln eGFjdHNbaV0ucGdwcm9jbm8gPSBHZXROdW1iZXJGcm9tUEdQcm9jKFByZXBhcmVkWGFjdFBy b2NzW2ldKTsKIAkJfQogCX0KIAllbHNlCkBAIC00NDcsNiArNDQ3LDcgQEAgTWFya0FzUHJl cGFyaW5nR3V0cyhHbG9iYWxUcmFuc2FjdGlvbiBneGFjdCwgRnVsbFRyYW5zYWN0aW9uSWQg ZnhpZCwKIAogCS8qIEluaXRpYWxpemUgdGhlIFBHUFJPQyBlbnRyeSAqLwogCU1lbVNldChw cm9jLCAwLCBzaXplb2YoUEdQUk9DKSk7CisJcHJvYy0+cHJvY251bWJlciA9IGd4YWN0LT5w Z3Byb2NubzsKIAlkbGlzdF9ub2RlX2luaXQoJnByb2MtPmxpbmtzKTsKIAlwcm9jLT53YWl0 U3RhdHVzID0gUFJPQ19XQUlUX1NUQVRVU19PSzsKIAlpZiAoTG9jYWxUcmFuc2FjdGlvbklk SXNWYWxpZChNeVByb2MtPnZ4aWQubHhpZCkpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2xh dW5jaF9iYWNrZW5kLmMKaW5kZXggOTc2NjM4YTU4YWMuLjVlN2IwYWM4ODUwIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMKKysrIGIvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jCkBAIC0xMDcsOCArMTA3LDgg QEAgdHlwZWRlZiBzdHJ1Y3QKIAlMV0xvY2tQYWRkZWQgKk1haW5MV0xvY2tBcnJheTsKIAlz bG9ja190ICAgICpQcm9jU3RydWN0TG9jazsKIAlQUk9DX0hEUiAgICpQcm9jR2xvYmFsOwot CVBHUFJPQwkgICAqQXV4aWxpYXJ5UHJvY3M7Ci0JUEdQUk9DCSAgICpQcmVwYXJlZFhhY3RQ cm9jczsKKwlQR1BST0MJICAgKipBdXhpbGlhcnlQcm9jczsKKwlQR1BST0MJICAgKipQcmVw YXJlZFhhY3RQcm9jczsKIAl2b2xhdGlsZSBQTVNpZ25hbERhdGEgKlBNU2lnbmFsU3RhdGU7 CiAJUHJvY1NpZ25hbEhlYWRlciAqUHJvY1NpZ25hbDsKIAlwaWRfdAkJUG9zdG1hc3RlclBp ZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMgYi9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jCmluZGV4IGNlNmI1Mjk5MzI0Li4zMjg4OTAw YmI2ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2FyY2guYworKysg Yi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jCkBAIC0yOTIsNyArMjkyLDcgQEAg UGdBcmNoV2FrZXVwKHZvaWQpCiAJICogYmUgcmVsYXVuY2hlZCBzaG9ydGx5IGFuZCB3aWxs IHN0YXJ0IGFyY2hpdmluZy4KIAkgKi8KIAlpZiAoYXJjaF9wZ3Byb2NubyAhPSBJTlZBTElE X1BST0NfTlVNQkVSKQotCQlTZXRMYXRjaCgmUHJvY0dsb2JhbC0+YWxsUHJvY3NbYXJjaF9w Z3Byb2Nub10ucHJvY0xhdGNoKTsKKwkJU2V0TGF0Y2goJlByb2NHbG9iYWwtPmFsbFByb2Nz W2FyY2hfcGdwcm9jbm9dLT5wcm9jTGF0Y2gpOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci93YWxzdW1tYXJpemVyLmMKaW5kZXggZTFmMTQyZjIwYzcuLjAxMWZlY2ZjNThiIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYworKysg Yi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwpAQCAtNjQ5LDcgKzY0 OSw3IEBAIFdha2V1cFdhbFN1bW1hcml6ZXIodm9pZCkKIAlMV0xvY2tSZWxlYXNlKFdBTFN1 bW1hcml6ZXJMb2NrKTsKIAogCWlmIChwZ3Byb2NubyAhPSBJTlZBTElEX1BST0NfTlVNQkVS KQotCQlTZXRMYXRjaCgmUHJvY0dsb2JhbC0+YWxsUHJvY3NbcGdwcm9jbm9dLnByb2NMYXRj aCk7CisJCVNldExhdGNoKCZQcm9jR2xvYmFsLT5hbGxQcm9jc1twZ3Byb2Nub10tPnByb2NM YXRjaCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZl ci9idWZfaW5pdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYwpp bmRleCBmODMxNGEwZTI5OS4uZDBlZmExMDJkODIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9i dWZmZXIvYnVmX2luaXQuYwpAQCAtNzk5LDYgKzc5OSw4IEBAIGNoZWNrX2RlYnVnX251bWEo Y2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQogCiAJCWlm IChwZ19zdHJjYXNlY21wKGl0ZW0sICJidWZmZXJzIikgPT0gMCkKIAkJCWZsYWdzIHw9IE5V TUFfQlVGRkVSUzsKKwkJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChpdGVtLCAicHJvY3MiKSA9 PSAwKQorCQkJZmxhZ3MgfD0gTlVNQV9QUk9DUzsKIAkJZWxzZQogCQl7CiAJCQlHVUNfY2hl Y2tfZXJyZGV0YWlsKCJJbnZhbGlkIG9wdGlvbiBcIiVzXCIuIiwgaXRlbSk7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwppbmRleCAzNDFlYWY1NTU3Ny4uMmRlNWNk NDQzOWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0 LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwpAQCAtNDcy LDcgKzQ3Miw3IEBAIFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0 cmF0ZWd5LCB1aW50MzIgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJvbV9yCiAJCSAqIGFjdHVhbGx5 IGZpbmUgYmVjYXVzZSBwcm9jTGF0Y2ggaXNuJ3QgZXZlciBmcmVlZCwgc28gd2UganVzdCBj YW4KIAkJICogcG90ZW50aWFsbHkgc2V0IHRoZSB3cm9uZyBwcm9jZXNzJyAob3Igbm8gcHJv Y2VzcycpIGxhdGNoLgogCQkgKi8KLQkJU2V0TGF0Y2goJlByb2NHbG9iYWwtPmFsbFByb2Nz W2Jnd3Byb2Nub10ucHJvY0xhdGNoKTsKKwkJU2V0TGF0Y2goJlByb2NHbG9iYWwtPmFsbFBy b2NzW2Jnd3Byb2Nub10tPnByb2NMYXRjaCk7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvcHJvY2FycmF5LmMKaW5kZXggMjAwZjcyYzZlMjUuLjdlMjhmYmRmZWEzIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYworKysgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwpAQCAtMjY4LDcgKzI2OCw3IEBAIHR5 cGVkZWYgZW51bSBLQVhDb21wcmVzc1JlYXNvbgogCiBzdGF0aWMgUHJvY0FycmF5U3RydWN0 ICpwcm9jQXJyYXk7CiAKLXN0YXRpYyBQR1BST0MgKmFsbFByb2NzOworc3RhdGljIFBHUFJP QyAqKmFsbFByb2NzOwogCiAvKgogICogQ2FjaGUgdG8gcmVkdWNlIG92ZXJoZWFkIG9mIHJl cGVhdGVkIGNhbGxzIHRvIFRyYW5zYWN0aW9uSWRJc0luUHJvZ3Jlc3MoKQpAQCAtMzY5LDYg KzM2OSw4IEBAIHN0YXRpYyBpbmxpbmUgRnVsbFRyYW5zYWN0aW9uSWQgRnVsbFhpZFJlbGF0 aXZlVG8oRnVsbFRyYW5zYWN0aW9uSWQgcmVsLAogCQkJCQkJCQkJCQkJICBUcmFuc2FjdGlv bklkIHhpZCk7CiBzdGF0aWMgdm9pZCBHbG9iYWxWaXNVcGRhdGVBcHBseShDb21wdXRlWGlk SG9yaXpvbnNSZXN1bHQgKmhvcml6b25zKTsKIAorc3RhdGljIHZvaWQgQXNzZXJ0Q2hlY2tB bGxQcm9jcyh2b2lkKTsKKwogLyoKICAqIFJlcG9ydCBzaGFyZWQtbWVtb3J5IHNwYWNlIG5l ZWRlZCBieSBQcm9jQXJyYXlTaG1lbUluaXQKICAqLwpAQCAtNDc2LDYgKzQ3OCw4IEBAIFBy b2NBcnJheUFkZChQR1BST0MgKnByb2MpCiAJTFdMb2NrQWNxdWlyZShQcm9jQXJyYXlMb2Nr LCBMV19FWENMVVNJVkUpOwogCUxXTG9ja0FjcXVpcmUoWGlkR2VuTG9jaywgTFdfRVhDTFVT SVZFKTsKIAorCUFzc2VydENoZWNrQWxsUHJvY3MoKTsKKwogCWlmIChhcnJheVAtPm51bVBy b2NzID49IGFycmF5UC0+bWF4UHJvY3MpCiAJewogCQkvKgpAQCAtNTAyLDcgKzUwNiw3IEBA IFByb2NBcnJheUFkZChQR1BST0MgKnByb2MpCiAJCWludAkJCXRoaXNfcHJvY25vID0gYXJy YXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwogCiAJCUFzc2VydCh0aGlzX3Byb2NubyA+PSAwICYm IHRoaXNfcHJvY25vIDwgKGFycmF5UC0+bWF4UHJvY3MgKyBOVU1fQVVYSUxJQVJZX1BST0NT KSk7Ci0JCUFzc2VydChhbGxQcm9jc1t0aGlzX3Byb2Nub10ucGd4YWN0b2ZmID09IGluZGV4 KTsKKwkJQXNzZXJ0KGFsbFByb2NzW3RoaXNfcHJvY25vXS0+cGd4YWN0b2ZmID09IGluZGV4 KTsKIAogCQkvKiBJZiB3ZSBoYXZlIGZvdW5kIG91ciByaWdodCBwb3NpdGlvbiBpbiB0aGUg YXJyYXksIGJyZWFrICovCiAJCWlmICh0aGlzX3Byb2NubyA+IHBncHJvY25vKQpAQCAtNTM4 LDExICs1NDIsMTMgQEAgUHJvY0FycmF5QWRkKFBHUFJPQyAqcHJvYykKIAkJaW50CQkJcHJv Y25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwogCiAJCUFzc2VydChwcm9jbm8gPj0g MCAmJiBwcm9jbm8gPCAoYXJyYXlQLT5tYXhQcm9jcyArIE5VTV9BVVhJTElBUllfUFJPQ1Mp KTsKLQkJQXNzZXJ0KGFsbFByb2NzW3Byb2Nub10ucGd4YWN0b2ZmID09IGluZGV4IC0gMSk7 CisJCUFzc2VydChhbGxQcm9jc1twcm9jbm9dLT5wZ3hhY3RvZmYgPT0gaW5kZXggLSAxKTsK IAotCQlhbGxQcm9jc1twcm9jbm9dLnBneGFjdG9mZiA9IGluZGV4OworCQlhbGxQcm9jc1tw cm9jbm9dLT5wZ3hhY3RvZmYgPSBpbmRleDsKIAl9CiAKKwlBc3NlcnRDaGVja0FsbFByb2Nz KCk7CisKIAkvKgogCSAqIFJlbGVhc2UgaW4gcmV2ZXJzZWQgYWNxdWlzaXRpb24gb3JkZXIs IHRvIHJlZHVjZSBmcmVxdWVuY3kgb2YgaGF2aW5nIHRvCiAJICogd2FpdCBmb3IgWGlkR2Vu TG9jayB3aGlsZSBob2xkaW5nIFByb2NBcnJheUxvY2suCkBAIC01NzgsMTAgKzU4NCwxMiBA QCBQcm9jQXJyYXlSZW1vdmUoUEdQUk9DICpwcm9jLCBUcmFuc2FjdGlvbklkIGxhdGVzdFhp ZCkKIAlMV0xvY2tBY3F1aXJlKFByb2NBcnJheUxvY2ssIExXX0VYQ0xVU0lWRSk7CiAJTFdM b2NrQWNxdWlyZShYaWRHZW5Mb2NrLCBMV19FWENMVVNJVkUpOwogCisJQXNzZXJ0Q2hlY2tB bGxQcm9jcygpOworCiAJbXlvZmYgPSBwcm9jLT5wZ3hhY3RvZmY7CiAKIAlBc3NlcnQobXlv ZmYgPj0gMCAmJiBteW9mZiA8IGFycmF5UC0+bnVtUHJvY3MpOwotCUFzc2VydChQcm9jR2xv YmFsLT5hbGxQcm9jc1thcnJheVAtPnBncHJvY25vc1tteW9mZl1dLnBneGFjdG9mZiA9PSBt eW9mZik7CisJQXNzZXJ0KFByb2NHbG9iYWwtPmFsbFByb2NzW2FycmF5UC0+cGdwcm9jbm9z W215b2ZmXV0tPnBneGFjdG9mZiA9PSBteW9mZik7CiAKIAlpZiAoVHJhbnNhY3Rpb25JZElz VmFsaWQobGF0ZXN0WGlkKSkKIAl7CkBAIC02MzYsMTEgKzY0NCwxMyBAQCBQcm9jQXJyYXlS ZW1vdmUoUEdQUk9DICpwcm9jLCBUcmFuc2FjdGlvbklkIGxhdGVzdFhpZCkKIAkJaW50CQkJ cHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwogCiAJCUFzc2VydChwcm9jbm8g Pj0gMCAmJiBwcm9jbm8gPCAoYXJyYXlQLT5tYXhQcm9jcyArIE5VTV9BVVhJTElBUllfUFJP Q1MpKTsKLQkJQXNzZXJ0KGFsbFByb2NzW3Byb2Nub10ucGd4YWN0b2ZmIC0gMSA9PSBpbmRl eCk7CisJCUFzc2VydChhbGxQcm9jc1twcm9jbm9dLT5wZ3hhY3RvZmYgLSAxID09IGluZGV4 KTsKIAotCQlhbGxQcm9jc1twcm9jbm9dLnBneGFjdG9mZiA9IGluZGV4OworCQlhbGxQcm9j c1twcm9jbm9dLT5wZ3hhY3RvZmYgPSBpbmRleDsKIAl9CiAKKwlBc3NlcnRDaGVja0FsbFBy b2NzKCk7CisKIAkvKgogCSAqIFJlbGVhc2UgaW4gcmV2ZXJzZWQgYWNxdWlzaXRpb24gb3Jk ZXIsIHRvIHJlZHVjZSBmcmVxdWVuY3kgb2YgaGF2aW5nIHRvCiAJICogd2FpdCBmb3IgWGlk R2VuTG9jayB3aGlsZSBob2xkaW5nIFByb2NBcnJheUxvY2suCkBAIC04NjAsNyArODcwLDcg QEAgUHJvY0FycmF5R3JvdXBDbGVhclhpZChQR1BST0MgKnByb2MsIFRyYW5zYWN0aW9uSWQg bGF0ZXN0WGlkKQogCS8qIFdhbGsgdGhlIGxpc3QgYW5kIGNsZWFyIGFsbCBYSURzLiAqLwog CXdoaWxlIChuZXh0aWR4ICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCiAJewotCQlQR1BST0MJ ICAgKm5leHRwcm9jID0gJmFsbFByb2NzW25leHRpZHhdOworCQlQR1BST0MJICAgKm5leHRw cm9jID0gYWxsUHJvY3NbbmV4dGlkeF07CiAKIAkJUHJvY0FycmF5RW5kVHJhbnNhY3Rpb25J bnRlcm5hbChuZXh0cHJvYywgbmV4dHByb2MtPnByb2NBcnJheUdyb3VwTWVtYmVyWGlkKTsK IApAQCAtODgwLDcgKzg5MCw3IEBAIFByb2NBcnJheUdyb3VwQ2xlYXJYaWQoUEdQUk9DICpw cm9jLCBUcmFuc2FjdGlvbklkIGxhdGVzdFhpZCkKIAkgKi8KIAl3aGlsZSAod2FrZWlkeCAh PSBJTlZBTElEX1BST0NfTlVNQkVSKQogCXsKLQkJUEdQUk9DCSAgICpuZXh0cHJvYyA9ICZh bGxQcm9jc1t3YWtlaWR4XTsKKwkJUEdQUk9DCSAgICpuZXh0cHJvYyA9IGFsbFByb2NzW3dh a2VpZHhdOwogCiAJCXdha2VpZHggPSBwZ19hdG9taWNfcmVhZF91MzIoJm5leHRwcm9jLT5w cm9jQXJyYXlHcm91cE5leHQpOwogCQlwZ19hdG9taWNfd3JpdGVfdTMyKCZuZXh0cHJvYy0+ cHJvY0FycmF5R3JvdXBOZXh0LCBJTlZBTElEX1BST0NfTlVNQkVSKTsKQEAgLTE1MjYsNyAr MTUzNiw3IEBAIFRyYW5zYWN0aW9uSWRJc0luUHJvZ3Jlc3MoVHJhbnNhY3Rpb25JZCB4aWQp CiAJCXB4aWRzID0gb3RoZXJfc3VieGlkc3RhdGVzW3BneGFjdG9mZl0uY291bnQ7CiAJCXBn X3JlYWRfYmFycmllcigpOwkJLyogcGFpcnMgd2l0aCBiYXJyaWVyIGluIEdldE5ld1RyYW5z YWN0aW9uSWQoKSAqLwogCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW3BneGFjdG9m Zl07Ci0JCXByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQlwcm9jID0gYWxsUHJvY3Nb cGdwcm9jbm9dOwogCQlmb3IgKGogPSBweGlkcyAtIDE7IGogPj0gMDsgai0tKQogCQl7CiAJ CQkvKiBGZXRjaCB4aWQganVzdCBvbmNlIC0gc2VlIEdldE5ld1RyYW5zYWN0aW9uSWQgKi8K QEAgLTE2MjIsNyArMTYzMiw2IEBAIFRyYW5zYWN0aW9uSWRJc0luUHJvZ3Jlc3MoVHJhbnNh Y3Rpb25JZCB4aWQpCiAJcmV0dXJuIGZhbHNlOwogfQogCi0KIC8qCiAgKiBEZXRlcm1pbmUg WElEIGhvcml6b25zLgogICoKQEAgLTE3NDAsNyArMTc0OSw3IEBAIENvbXB1dGVYaWRIb3Jp em9ucyhDb21wdXRlWGlkSG9yaXpvbnNSZXN1bHQgKmgpCiAJZm9yIChpbnQgaW5kZXggPSAw OyBpbmRleCA8IGFycmF5UC0+bnVtUHJvY3M7IGluZGV4KyspCiAJewogCQlpbnQJCQlwZ3By b2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKLQkJUEdQUk9DCSAgICpwcm9jID0g JmFsbFByb2NzW3BncHJvY25vXTsKKwkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdw cm9jbm9dOwogCQlpbnQ4CQlzdGF0dXNGbGFncyA9IFByb2NHbG9iYWwtPnN0YXR1c0ZsYWdz W2luZGV4XTsKIAkJVHJhbnNhY3Rpb25JZCB4aWQ7CiAJCVRyYW5zYWN0aW9uSWQgeG1pbjsK QEAgLTIyMjQsNyArMjIzMyw3IEBAIEdldFNuYXBzaG90RGF0YShTbmFwc2hvdCBzbmFwc2hv dCkKIAkJCVRyYW5zYWN0aW9uSWQgeGlkID0gVUlOVDMyX0FDQ0VTU19PTkNFKG90aGVyX3hp ZHNbcGd4YWN0b2ZmXSk7CiAJCQl1aW50OAkJc3RhdHVzRmxhZ3M7CiAKLQkJCUFzc2VydChh bGxQcm9jc1thcnJheVAtPnBncHJvY25vc1twZ3hhY3RvZmZdXS5wZ3hhY3RvZmYgPT0gcGd4 YWN0b2ZmKTsKKwkJCUFzc2VydChhbGxQcm9jc1thcnJheVAtPnBncHJvY25vc1twZ3hhY3Rv ZmZdXS0+cGd4YWN0b2ZmID09IHBneGFjdG9mZik7CiAKIAkJCS8qCiAJCQkgKiBJZiB0aGUg dHJhbnNhY3Rpb24gaGFzIG5vIFhJRCBhc3NpZ25lZCwgd2UgY2FuIHNraXAgaXQ7IGl0CkBA IC0yMjk4LDcgKzIzMDcsNyBAQCBHZXRTbmFwc2hvdERhdGEoU25hcHNob3Qgc25hcHNob3Qp CiAJCQkJCWlmIChuc3VieGlkcyA+IDApCiAJCQkJCXsKIAkJCQkJCWludAkJCXBncHJvY25v ID0gcGdwcm9jbm9zW3BneGFjdG9mZl07Ci0JCQkJCQlQR1BST0MJICAgKnByb2MgPSAmYWxs UHJvY3NbcGdwcm9jbm9dOworCQkJCQkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdw cm9jbm9dOwogCiAJCQkJCQlwZ19yZWFkX2JhcnJpZXIoKTsJLyogcGFpcnMgd2l0aCBHZXRO ZXdUcmFuc2FjdGlvbklkICovCiAKQEAgLTI0OTksNyArMjUwOCw3IEBAIFByb2NBcnJheUlu c3RhbGxJbXBvcnRlZFhtaW4oVHJhbnNhY3Rpb25JZCB4bWluLAogCWZvciAoaW5kZXggPSAw OyBpbmRleCA8IGFycmF5UC0+bnVtUHJvY3M7IGluZGV4KyspCiAJewogCQlpbnQJCQlwZ3By b2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKLQkJUEdQUk9DCSAgICpwcm9jID0g JmFsbFByb2NzW3BncHJvY25vXTsKKwkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdw cm9jbm9dOwogCQlpbnQJCQlzdGF0dXNGbGFncyA9IFByb2NHbG9iYWwtPnN0YXR1c0ZsYWdz W2luZGV4XTsKIAkJVHJhbnNhY3Rpb25JZCB4aWQ7CiAKQEAgLTI3MjUsNyArMjczNCw3IEBA IEdldFJ1bm5pbmdUcmFuc2FjdGlvbkRhdGEodm9pZCkKIAkJaWYgKFRyYW5zYWN0aW9uSWRQ cmVjZWRlcyh4aWQsIG9sZGVzdERhdGFiYXNlUnVubmluZ1hpZCkpCiAJCXsKIAkJCWludAkJ CXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwotCQkJUEdQUk9DCSAgICpw cm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFBy b2NzW3BncHJvY25vXTsKIAogCQkJaWYgKHByb2MtPmRhdGFiYXNlSWQgPT0gTXlEYXRhYmFz ZUlkKQogCQkJCW9sZGVzdERhdGFiYXNlUnVubmluZ1hpZCA9IHhpZDsKQEAgLTI3NTYsNyAr Mjc2NSw3IEBAIEdldFJ1bm5pbmdUcmFuc2FjdGlvbkRhdGEodm9pZCkKIAkJZm9yIChpbmRl eCA9IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5kZXgrKykKIAkJewogCQkJaW50 CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0JCQlQR1BST0MJICAg KnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQkJUEdQUk9DCSAgICpwcm9jID0gYWxs UHJvY3NbcGdwcm9jbm9dOwogCQkJaW50CQkJbnN1YnhpZHM7CiAKIAkJCS8qCkBAIC0yODU4 LDcgKzI4NjcsNyBAQCBHZXRPbGRlc3RBY3RpdmVUcmFuc2FjdGlvbklkKGJvb2wgaW5Db21t aXRPbmx5LCBib29sIGFsbERicykKIAl7CiAJCVRyYW5zYWN0aW9uSWQgeGlkOwogCQlpbnQJ CQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKLQkJUEdQUk9DCSAgICpw cm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJv Y3NbcGdwcm9jbm9dOwogCiAJCS8qIEZldGNoIHhpZCBqdXN0IG9uY2UgLSBzZWUgR2V0TmV3 VHJhbnNhY3Rpb25JZCAqLwogCQl4aWQgPSBVSU5UMzJfQUNDRVNTX09OQ0Uob3RoZXJfeGlk c1tpbmRleF0pOwpAQCAtMzAyMCw3ICszMDI5LDcgQEAgR2V0VmlydHVhbFhJRHNEZWxheWlu Z0Noa3B0KGludCAqbnZ4aWRzLCBpbnQgdHlwZSkKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXgg PCBhcnJheVAtPm51bVByb2NzOyBpbmRleCsrKQogCXsKIAkJaW50CQkJcGdwcm9jbm8gPSBh cnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9j c1twZ3Byb2Nub107CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsK IAogCQlpZiAoKHByb2MtPmRlbGF5Q2hrcHRGbGFncyAmIHR5cGUpICE9IDApCiAJCXsKQEAg LTMwNjEsNyArMzA3MCw3IEBAIEhhdmVWaXJ0dWFsWElEc0RlbGF5aW5nQ2hrcHQoVmlydHVh bFRyYW5zYWN0aW9uSWQgKnZ4aWRzLCBpbnQgbnZ4aWRzLCBpbnQgdHlwZSkKIAlmb3IgKGlu ZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRleCsrKQogCXsKIAkJaW50 CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0JCVBHUFJPQwkgICAq cHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFBy b2NzW3BncHJvY25vXTsKIAkJVmlydHVhbFRyYW5zYWN0aW9uSWQgdnhpZDsKIAogCQlHRVRf VlhJRF9GUk9NX1BHUFJPQyh2eGlkLCAqcHJvYyk7CkBAIC0zMTg5LDcgKzMxOTgsNyBAQCBC YWNrZW5kUGlkR2V0UHJvY1dpdGhMb2NrKGludCBwaWQpCiAKIAlmb3IgKGluZGV4ID0gMDsg aW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRleCsrKQogCXsKLQkJUEdQUk9DCSAgICpw cm9jID0gJmFsbFByb2NzW2FycmF5UC0+cGdwcm9jbm9zW2luZGV4XV07CisJCVBHUFJPQwkg ICAqcHJvYyA9IGFsbFByb2NzW2FycmF5UC0+cGdwcm9jbm9zW2luZGV4XV07CiAKIAkJaWYg KHByb2MtPnBpZCA9PSBwaWQpCiAJCXsKQEAgLTMyMzIsNyArMzI0MSw3IEBAIEJhY2tlbmRY aWRHZXRQaWQoVHJhbnNhY3Rpb25JZCB4aWQpCiAJCWlmIChvdGhlcl94aWRzW2luZGV4XSA9 PSB4aWQpCiAJCXsKIAkJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5k ZXhdOwotCQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJCVBH UFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAogCQkJcmVzdWx0ID0gcHJv Yy0+cGlkOwogCQkJYnJlYWs7CkBAIC0zMzAxLDcgKzMzMTAsNyBAQCBHZXRDdXJyZW50Vmly dHVhbFhJRHMoVHJhbnNhY3Rpb25JZCBsaW1pdFhtaW4sIGJvb2wgZXhjbHVkZVhtaW4wLAog CWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJvY3M7IGluZGV4KyspCiAJ ewogCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKLQkJUEdQ Uk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJUEdQUk9DCSAgICpwcm9j ID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCQl1aW50OAkJc3RhdHVzRmxhZ3MgPSBQcm9jR2xv YmFsLT5zdGF0dXNGbGFnc1tpbmRleF07CiAKIAkJaWYgKHByb2MgPT0gTXlQcm9jKQpAQCAt MzQwMyw3ICszNDEyLDcgQEAgR2V0Q29uZmxpY3RpbmdWaXJ0dWFsWElEcyhUcmFuc2FjdGlv bklkIGxpbWl0WG1pbiwgT2lkIGRiT2lkKQogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFy cmF5UC0+bnVtUHJvY3M7IGluZGV4KyspCiAJewogCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5 UC0+cGdwcm9jbm9zW2luZGV4XTsKLQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3Bn cHJvY25vXTsKKwkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCiAJ CS8qIEV4Y2x1ZGUgcHJlcGFyZWQgdHJhbnNhY3Rpb25zICovCiAJCWlmIChwcm9jLT5waWQg PT0gMCkKQEAgLTM0NjgsNyArMzQ3Nyw3IEBAIFNpZ25hbFZpcnR1YWxUcmFuc2FjdGlvbihW aXJ0dWFsVHJhbnNhY3Rpb25JZCB2eGlkLCBQcm9jU2lnbmFsUmVhc29uIHNpZ21vZGUsCiAJ Zm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5kZXgrKykKIAl7 CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwotCQlQR1BS T0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQlQR1BST0MJICAgKnByb2Mg PSBhbGxQcm9jc1twZ3Byb2Nub107CiAJCVZpcnR1YWxUcmFuc2FjdGlvbklkIHByb2N2eGlk OwogCiAJCUdFVF9WWElEX0ZST01fUEdQUk9DKHByb2N2eGlkLCAqcHJvYyk7CkBAIC0zNTIz LDcgKzM1MzIsNyBAQCBNaW5pbXVtQWN0aXZlQmFja2VuZHMoaW50IG1pbikKIAlmb3IgKGlu ZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRleCsrKQogCXsKIAkJaW50 CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0JCVBHUFJPQwkgICAq cHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFBy b2NzW3BncHJvY25vXTsKIAogCQkvKgogCQkgKiBTaW5jZSB3ZSdyZSBub3QgaG9sZGluZyBh IGxvY2ssIG5lZWQgdG8gYmUgcHJlcGFyZWQgdG8gZGVhbCB3aXRoCkBAIC0zNTY5LDcgKzM1 NzgsNyBAQCBDb3VudERCQmFja2VuZHMoT2lkIGRhdGFiYXNlaWQpCiAJZm9yIChpbmRleCA9 IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5kZXgrKykKIAl7CiAJCWludAkJCXBn cHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwotCQlQR1BST0MJICAgKnByb2Mg PSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1tw Z3Byb2Nub107CiAKIAkJaWYgKHByb2MtPnBpZCA9PSAwKQogCQkJY29udGludWU7CQkJLyog ZG8gbm90IGNvdW50IHByZXBhcmVkIHhhY3RzICovCkBAIC0zNTk4LDcgKzM2MDcsNyBAQCBD b3VudERCQ29ubmVjdGlvbnMoT2lkIGRhdGFiYXNlaWQpCiAJZm9yIChpbmRleCA9IDA7IGlu ZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5kZXgrKykKIAl7CiAJCWludAkJCXBncHJvY25v ID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxs UHJvY3NbcGdwcm9jbm9dOworCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nu b107CiAKIAkJaWYgKHByb2MtPnBpZCA9PSAwKQogCQkJY29udGludWU7CQkJLyogZG8gbm90 IGNvdW50IHByZXBhcmVkIHhhY3RzICovCkBAIC0zNjI5LDcgKzM2MzgsNyBAQCBDYW5jZWxE QkJhY2tlbmRzKE9pZCBkYXRhYmFzZWlkLCBQcm9jU2lnbmFsUmVhc29uIHNpZ21vZGUsIGJv b2wgY29uZmxpY3RQZW5kaW5nKQogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+ bnVtUHJvY3M7IGluZGV4KyspCiAJewogCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdw cm9jbm9zW2luZGV4XTsKLQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25v XTsKKwkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCiAJCWlmIChk YXRhYmFzZWlkID09IEludmFsaWRPaWQgfHwgcHJvYy0+ZGF0YWJhc2VJZCA9PSBkYXRhYmFz ZWlkKQogCQl7CkBAIC0zNjcwLDcgKzM2NzksNyBAQCBDb3VudFVzZXJCYWNrZW5kcyhPaWQg cm9sZWlkKQogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJvY3M7IGlu ZGV4KyspCiAJewogCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4 XTsKLQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJUEdQUk9D CSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCiAJCWlmIChwcm9jLT5waWQgPT0g MCkKIAkJCWNvbnRpbnVlOwkJCS8qIGRvIG5vdCBjb3VudCBwcmVwYXJlZCB4YWN0cyAqLwpA QCAtMzczMyw3ICszNzQyLDcgQEAgQ291bnRPdGhlckRCQmFja2VuZHMoT2lkIGRhdGFiYXNl SWQsIGludCAqbmJhY2tlbmRzLCBpbnQgKm5wcmVwYXJlZCkKIAkJZm9yIChpbmRleCA9IDA7 IGluZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5kZXgrKykKIAkJewogCQkJaW50CQkJcGdw cm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0JCQlQR1BST0MJICAgKnByb2Mg PSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3Nb cGdwcm9jbm9dOwogCQkJdWludDgJCXN0YXR1c0ZsYWdzID0gUHJvY0dsb2JhbC0+c3RhdHVz RmxhZ3NbaW5kZXhdOwogCiAJCQlpZiAocHJvYy0+ZGF0YWJhc2VJZCAhPSBkYXRhYmFzZUlk KQpAQCAtMzc5OSw3ICszODA4LDcgQEAgVGVybWluYXRlT3RoZXJEQkJhY2tlbmRzKE9pZCBk YXRhYmFzZUlkKQogCWZvciAoaSA9IDA7IGkgPCBwcm9jQXJyYXktPm51bVByb2NzOyBpKysp CiAJewogCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2ldOwotCQlQR1BS T0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQlQR1BST0MJICAgKnByb2Mg PSBhbGxQcm9jc1twZ3Byb2Nub107CiAKIAkJaWYgKHByb2MtPmRhdGFiYXNlSWQgIT0gZGF0 YWJhc2VJZCkKIAkJCWNvbnRpbnVlOwpAQCAtNTIyNywzICs1MjM2LDE1IEBAIEtub3duQXNz aWduZWRYaWRzUmVzZXQodm9pZCkKIAogCUxXTG9ja1JlbGVhc2UoUHJvY0FycmF5TG9jayk7 CiB9CisKK3N0YXRpYyB2b2lkCitBc3NlcnRDaGVja0FsbFByb2NzKHZvaWQpCit7CisJUHJv Y0FycmF5U3RydWN0ICphcnJheVAgPSBwcm9jQXJyYXk7CisJaW50CQludW1Qcm9jcyA9IGFy cmF5UC0+bnVtUHJvY3M7CisKKwlmb3IgKGludCBwZ3hhY3RvZmYgPSAwOyBwZ3hhY3RvZmYg PCBudW1Qcm9jczsgcGd4YWN0b2ZmKyspCisJeworCQlBc3NlcnQoYWxsUHJvY3NbYXJyYXlQ LT5wZ3Byb2Nub3NbcGd4YWN0b2ZmXV0tPnBneGFjdG9mZiA9PSBwZ3hhY3RvZmYpOworCX0K K30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jCmluZGV4IDRjYzdmNjQ1YzMxLi5kMDFmNDg2 ODc2ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYworKysg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jCkBAIC0yODc2LDcgKzI4NzYsNyBA QCBGYXN0UGF0aFRyYW5zZmVyUmVsYXRpb25Mb2NrcyhMb2NrTWV0aG9kIGxvY2tNZXRob2RU YWJsZSwgY29uc3QgTE9DS1RBRyAqbG9ja3RhZwogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBQ cm9jR2xvYmFsLT5hbGxQcm9jQ291bnQ7IGkrKykKIAl7Ci0JCVBHUFJPQwkgICAqcHJvYyA9 ICZQcm9jR2xvYmFsLT5hbGxQcm9jc1tpXTsKKwkJUEdQUk9DCSAgICpwcm9jID0gUHJvY0ds b2JhbC0+YWxsUHJvY3NbaV07CiAJCXVpbnQzMgkJajsKIAogCQlMV0xvY2tBY3F1aXJlKCZw cm9jLT5mcEluZm9Mb2NrLCBMV19FWENMVVNJVkUpOwpAQCAtMzEzNSw3ICszMTM1LDcgQEAg R2V0TG9ja0NvbmZsaWN0cyhjb25zdCBMT0NLVEFHICpsb2NrdGFnLCBMT0NLTU9ERSBsb2Nr bW9kZSwgaW50ICpjb3VudHApCiAJCSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgUHJvY0dsb2Jh bC0+YWxsUHJvY0NvdW50OyBpKyspCiAJCXsKLQkJCVBHUFJPQwkgICAqcHJvYyA9ICZQcm9j R2xvYmFsLT5hbGxQcm9jc1tpXTsKKwkJCVBHUFJPQwkgICAqcHJvYyA9IFByb2NHbG9iYWwt PmFsbFByb2NzW2ldOwogCQkJdWludDMyCQlqOwogCiAJCQkvKiBBIGJhY2tlbmQgbmV2ZXIg YmxvY2tzIGl0c2VsZiAqLwpAQCAtMzgyMiw3ICszODIyLDcgQEAgR2V0TG9ja1N0YXR1c0Rh dGEodm9pZCkKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgUHJvY0dsb2JhbC0+YWxsUHJvY0Nv dW50OyArK2kpCiAJewotCQlQR1BST0MJICAgKnByb2MgPSAmUHJvY0dsb2JhbC0+YWxsUHJv Y3NbaV07CisJCVBHUFJPQwkgICAqcHJvYyA9IFByb2NHbG9iYWwtPmFsbFByb2NzW2ldOwog CiAJCS8qIFNraXAgYmFja2VuZHMgd2l0aCBwaWQ9MCwgYXMgdGhleSBkb24ndCBob2xkIGZh c3QtcGF0aCBsb2NrcyAqLwogCQlpZiAocHJvYy0+cGlkID09IDApCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9s bWdyL3Byb2MuYwppbmRleCA5NmYyOWFhZmMzOS4uY2Q5MzhhZGJjMzMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9sbWdyL3Byb2MuYwpAQCAtMjksMjEgKzI5LDMyIEBACiAgKi8KICNpbmNsdWRlICJw b3N0Z3Jlcy5oIgogCisjaWZkZWYgVVNFX0xJQk5VTUEKKyNpbmNsdWRlIDxzY2hlZC5oPgor I2VuZGlmCisKICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNp bmNsdWRlIDxzeXMvdGltZS5oPgogCisjaWZkZWYgVVNFX0xJQk5VTUEKKyNpbmNsdWRlIDxu dW1hLmg+CisjaW5jbHVkZSA8bnVtYWlmLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgImFjY2Vz cy90cmFuc2FtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R3b3BoYXNlLmgiCiAjaW5jbHVkZSAi YWNjZXNzL3hsb2d1dGlscy5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUg InBnc3RhdC5oIgorI2luY2x1ZGUgInBvcnQvcGdfbnVtYS5oIgogI2luY2x1ZGUgInBvc3Rt YXN0ZXIvYXV0b3ZhY3V1bS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Nsb3RzeW5jLmgi CiAjaW5jbHVkZSAicmVwbGljYXRpb24vc3luY3JlcC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv Y29uZGl0aW9uX3ZhcmlhYmxlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNs dWRlICJzdG9yYWdlL2xtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3BnX3NobWVtLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9wbXNpZ25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5o IgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCkBAIC03Niw4ICs4Nyw4IEBAIE5P Tl9FWEVDX1NUQVRJQyBzbG9ja190ICpQcm9jU3RydWN0TG9jayA9IE5VTEw7CiAKIC8qIFBv aW50ZXJzIHRvIHNoYXJlZC1tZW1vcnkgc3RydWN0dXJlcyAqLwogUFJPQ19IRFIgICAqUHJv Y0dsb2JhbCA9IE5VTEw7Ci1OT05fRVhFQ19TVEFUSUMgUEdQUk9DICpBdXhpbGlhcnlQcm9j cyA9IE5VTEw7Ci1QR1BST0MJICAgKlByZXBhcmVkWGFjdFByb2NzID0gTlVMTDsKK05PTl9F WEVDX1NUQVRJQyBQR1BST0MgKipBdXhpbGlhcnlQcm9jcyA9IE5VTEw7CitQR1BST0MJICAg KipQcmVwYXJlZFhhY3RQcm9jcyA9IE5VTEw7CiAKIHN0YXRpYyBEZWFkTG9ja1N0YXRlIGRl YWRsb2NrX3N0YXRlID0gRFNfTk9UX1lFVF9DSEVDS0VEOwogCkBAIC05MCw2ICsxMDEsMjkg QEAgc3RhdGljIHZvaWQgQXV4aWxpYXJ5UHJvY0tpbGwoaW50IGNvZGUsIERhdHVtIGFyZyk7 CiBzdGF0aWMgdm9pZCBDaGVja0RlYWRMb2NrKHZvaWQpOwogCiAKKy8qIG51bWJlciBvZiBO VU1BIG5vZGVzIChhcyByZXR1cm5lZCBieSBudW1hX251bV9jb25maWd1cmVkX25vZGVzKSAq Lworc3RhdGljIGludAludW1hX25vZGVzID0gLTE7CS8qIG51bWJlciBvZiBub2RlcyB3aGVu IHNpemluZyAqLworc3RhdGljIFNpemUgbnVtYV9wYWdlX3NpemUgPSAwOyAvKiBwYWdlIHVz ZWQgdG8gc2l6ZSBwYXJ0aXRpb25zICovCitzdGF0aWMgYm9vbCBudW1hX2Nhbl9wYXJ0aXRp b24gPSBmYWxzZTsgLyogY2FuIG1hcCB0byBOVU1BIG5vZGVzPyAqLworc3RhdGljIGludAlu dW1hX3Byb2NzX3Blcl9ub2RlID0gLTE7CS8qIHBncHJvY3MgcGVyIG5vZGUgKi8KKworc3Rh dGljIHZvaWQgcGdwcm9jX3BhcnRpdGlvbnNfcHJlcGFyZSh2b2lkKTsKK3N0YXRpYyBjaGFy ICpwZ3Byb2NfcGFydGl0aW9uX2luaXQoY2hhciAqcHRyLCBpbnQgbnVtX3Byb2NzLAorCQkJ CQkJCQkgICBpbnQgYWxscHJvY3NfaW5kZXgsIGludCBub2RlKTsKK3N0YXRpYyBjaGFyICpm YXN0cGF0aF9wYXJ0aXRpb25faW5pdChjaGFyICpwdHIsIGludCBudW1fcHJvY3MsCisJCQkJ CQkJCQkgaW50IGFsbHByb2NzX2luZGV4LCBpbnQgbm9kZSwKKwkJCQkJCQkJCSBTaXplIGZw TG9ja0JpdHNTaXplLCBTaXplIGZwUmVsSWRTaXplKTsKKwordHlwZWRlZiBzdHJ1Y3QgUEdQ cm9jUGFydGl0aW9uCit7CisJaW50CQkJbnVtX3Byb2NzOworCWludAkJCW51bWFfbm9kZTsK Kwl2b2lkCSAgICpwZ3Byb2NfcHRyOworCXZvaWQJICAgKmZhc3RwYXRoX3B0cjsKK30gUEdQ cm9jUGFydGl0aW9uOworCitzdGF0aWMgUEdQcm9jUGFydGl0aW9uICpwYXJ0aXRpb25zID0g TlVMTDsKKwogLyoKICAqIFJlcG9ydCBzaGFyZWQtbWVtb3J5IHNwYWNlIG5lZWRlZCBieSBQ R1BST0MuCiAgKi8KQEAgLTEwMCwxMSArMTM0LDQxIEBAIFBHUHJvY1NobWVtU2l6ZSh2b2lk KQogCVNpemUJCVRvdGFsUHJvY3MgPQogCQlhZGRfc2l6ZShNYXhCYWNrZW5kcywgYWRkX3Np emUoTlVNX0FVWElMSUFSWV9QUk9DUywgbWF4X3ByZXBhcmVkX3hhY3RzKSk7CiAKKwlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgQ0FDSEVMSU5FQUxJR04obXVsX3NpemUoVG90YWxQcm9jcywg c2l6ZW9mKFBHUFJPQyAqKSkpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUo VG90YWxQcm9jcywgc2l6ZW9mKFBHUFJPQykpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwg bXVsX3NpemUoVG90YWxQcm9jcywgc2l6ZW9mKCpQcm9jR2xvYmFsLT54aWRzKSkpOwogCXNp emUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShUb3RhbFByb2NzLCBzaXplb2YoKlByb2NH bG9iYWwtPnN1YnhpZFN0YXRlcykpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3Np emUoVG90YWxQcm9jcywgc2l6ZW9mKCpQcm9jR2xvYmFsLT5zdGF0dXNGbGFncykpKTsKIAor CS8qCisJICogVG8gc3VwcG9ydCBOVU1BIHBhcnRpdGlvbmluZywgdGhlIFBHUFJPQyBhcnJh eSB3aWxsIGJlIGRpdmlkZWQgaW50bworCSAqIG11bHRpcGxlIGNodW5rcyAtIG9uZSBwZXIg TlVNQSBub2RlLCBhbmQgb25lIGV4dHJhIGZvciBhdXhpbGlhcnkvMlBDCisJICogZW50cmll cyAod2hpY2ggYXJlIG5vdCBhc3NpZ25lZCB0byBhbnkgTlVNQSBub2RlKS4KKwkgKgorCSAq IFdlIGNhbid0IHNpbXBseSBtYXAgcGFnZXMgb2YgYSBzaW5nbGUgY29udGludW91cyBhcnJh eSwgYmVjYXVzZSB0aGUKKwkgKiBQR1BST0MgZW50cmllcyBhcmUgdmVyeSBzbWFsbCBhbmQg dG9vIG1hbnkgb2YgdGhlbSB3b3VsZCBmaXQgb24gYQorCSAqIHNpbmdsZSBwYWdlIChhdCBs ZWFzdCB3aXRoIGh1Z2UgcGFnZXMpLiBGYXIgbW9yZSB0aGFuIHJlYXNvbmFibGUgdmFsdWVz CisJICogb2YgbWF4X2Nvbm5lY3Rpb25zLiBTbyBpbnN0ZWFkIHdlIGN1dCB0aGUgYXJyYXkg aW50byBzZXBhcmF0ZSBwaWVjZXMKKwkgKiBmb3IgZWFjaCBub2RlLgorCSAqCisJICogRWFj aCBwaWVjZSBtYXkgbmVlZCB1cCB0byBvbmUgbWVtb3J5IHBhZ2Ugb2YgcGFkZGluZywgdG8g bWFrZSBpdAorCSAqIGFsaWduZWQgd2l0aCBtZW1vcnkgcGFnZSAoZm9yIE5VTUEpLCBTbyB3 ZSBqdXN0IGFkZCBhIHBhZ2UgLSBpdCdzIGEgYml0CisJICogd2FzdGVmdWwsIGJ1dCBzaG91 bGQgbm90IG1hdHRlciBtdWNoIC0gTlVNQSBpcyBtZWFudCBmb3IgbGFyZ2UgYm94ZXMsCisJ ICogc28gYSBjb3VwbGUgcGFnZXMgaXMgbmVnbGlnaWJsZS4KKwkgKgorCSAqIFdlIG9ubHkg ZG8gdGhpcyB3aXRoIE5VTUEgcGFydGl0aW9uaW5nLiBXaXRoIHRoZSBHVUMgZGlzYWJsZWQs IG9yIHdoZW4KKwkgKiB3ZSBmaW5kIHdlIGNhbid0IGRvIHRoYXQgZm9yIHNvbWUgcmVhc29u LCB3ZSBqdXN0IGFsbG9jYXRlIHRoZSBQR1BST0MKKwkgKiBhcnJheSBhcyBhIHNpbmdsZSBj aHVuay4gVGhpcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBlYXJsaWVyIGNhbGwgdG8KKwkgKiBw Z3Byb2NfcGFydGl0aW9uc19wcmVwYXJlKCkuCisJICoKKwkgKiBYWFggSXQgbWlnaHQgYmUg bW9yZSBwYWluZnVsIHdpdGggdmVyeSBsYXJnZSBodWdlIHBhZ2VzIChlLmcuIDFHQikuCisJ ICovCisJaWYgKCgobnVtYV9mbGFncyAmIE5VTUFfUFJPQ1MpICE9IDApICYmIG51bWFfY2Fu X3BhcnRpdGlvbikKKwl7CisJCUFzc2VydChudW1hX25vZGVzID4gMCk7CisJCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBtdWxfc2l6ZSgobnVtYV9ub2RlcyArIDEpLCBudW1hX3BhZ2Vfc2l6 ZSkpOworCX0KKwogCXJldHVybiBzaXplOwogfQogCkBAIC0xMjksNiArMTkzLDYwIEBAIEZh c3RQYXRoTG9ja1NobWVtU2l6ZSh2b2lkKQogCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11 bF9zaXplKFRvdGFsUHJvY3MsIChmcExvY2tCaXRzU2l6ZSArIGZwUmVsSWRTaXplKSkpOwog CisJLyoKKwkgKiBXaGVuIGFwcGx5aW5nIE5VTUEgdG8gdGhlIGZhc3QtcGF0aCBsb2Nrcywg d2UgZm9sbG93IHRoZSBzYW1lIGxvZ2ljIGFzCisJICogZm9yIFBHUFJPQyBlbnRyaWVzLiBT ZWUgdGhlIGNvbW1lbnRzIGluIFBHUHJvY1NobWVtU2l6ZSgpLgorCSAqCisJICogSWYgUEdQ Uk9DIHBhcnRpdGlvbmluZyBpcyBlbmFibGVkLCBhbmQgd2UgZGVjaWRlZCBpdCdzIHBvc3Np YmxlLCB3ZQorCSAqIG5lZWQgdG8gYWRkIG9uZSBtZW1vcnkgcGFnZSBwZXIgTlVNQSBub2Rl IChhbmQgb25lIGZvciBhdXhpbGlhcnkvMlBDCisJICogcHJvY2Vzc2VzKSB0byBhbGxvdyBw cm9wZXIgYWxpZ25tZW50LgorCSAqCisJICogWFhYIFRoaXMgaXMgYSBhIGJpdCB3YXN0ZWZ1 bCwgYmVjYXVzZSBpdCBtaWdodCBhY3R1YWxseSBhZGQgcGFnZXMgZXZlbgorCSAqIHdoZW4g bm90IHN0cmljdGx5IG5lZWRlZCAoaWYgaXQncyBhbHJlYWR5IGFsaWduZWQpLiBBbmQgd2Ug YWx3YXlzCisJICogYXNzdW1lIHdlJ2xsIGFkZCBhIHdob2xlIHBhZ2UsIGV2ZW4gaWYgdGhl IGFsaWdubWVudCBuZWVkcyBvbmx5IGxlc3MKKwkgKiBtZW1vcnkuCisJICovCisJaWYgKCgo bnVtYV9mbGFncyAmIE5VTUFfUFJPQ1MpICE9IDApICYmIG51bWFfY2FuX3BhcnRpdGlvbikK Kwl7CisJCUFzc2VydChudW1hX25vZGVzID4gMCk7CisJCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBtdWxfc2l6ZSgobnVtYV9ub2RlcyArIDEpLCBudW1hX3BhZ2Vfc2l6ZSkpOworCX0KKwor CXJldHVybiBzaXplOworfQorCitzdGF0aWMgU2l6ZQorUEdQcm9jUGFydGl0aW9uc1NobWVt U2l6ZSh2b2lkKQoreworCVNpemUJCXNpemUgPSAwOworCisJLyoKKwkgKiBJZiBQR1BST0Mg cGFydGl0aW9uaW5nIGlzIGVuYWJsZWQsIGFuZCB3ZSBkZWNpZGVkIGl0J3MgcG9zc2libGUs IHdlCisJICogbmVlZCB0byBhZGQgb25lIG1lbW9yeSBwYWdlIHBlciBOVU1BIG5vZGUgKGFu ZCBvbmUgZm9yIGF1eGlsaWFyeS8yUEMKKwkgKiBwcm9jZXNzZXMpIHRvIGFsbG93IHByb3Bl ciBhbGlnbm1lbnQuCisJICoKKwkgKiBYWFggVGhpcyBpcyBhIGEgYml0IHdhc3RlZnVsLCBi ZWNhdXNlIGl0IG1pZ2h0IGFjdHVhbGx5IGFkZCBwYWdlcyBldmVuCisJICogd2hlbiBub3Qg c3RyaWN0bHkgbmVlZGVkIChpZiBpdCdzIGFscmVhZHkgYWxpZ25lZCkuIEFuZCB3ZSBhbHdh eXMKKwkgKiBhc3N1bWUgd2UnbGwgYWRkIGEgd2hvbGUgcGFnZSwgZXZlbiBpZiB0aGUgYWxp Z25tZW50IG5lZWRzIG9ubHkgbGVzcworCSAqIG1lbW9yeS4KKwkgKi8KKwlpZiAoKChudW1h X2ZsYWdzICYgTlVNQV9QUk9DUykgIT0gMCkgJiYgbnVtYV9jYW5fcGFydGl0aW9uKQorCXsK KwkJQXNzZXJ0KG51bWFfbm9kZXMgPiAwKTsKKwkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11 bF9zaXplKChudW1hX25vZGVzICsgMSksIG51bWFfcGFnZV9zaXplKSk7CisKKwkJLyoKKwkJ ICogQWxzbyBhY2NvdW50IGZvciBhIHNtYWxsIHJlZ2lzdHJ5IG9mIHBhcnRpdGlvbnMsIGEg c2ltcGxlIGFycmF5IG9mCisJCSAqIHBhcnRpdGlvbnMgYXQgdGhlIGJlZ2lubmluZy4KKwkJ ICovCisJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZSgobnVtYV9ub2RlcyArIDEp LCBzaXplb2YoUEdQcm9jUGFydGl0aW9uKSkpOworCX0KKwllbHNlCisJeworCQkvKiBvdGhl cndpc2UgYWRkIG9ubHkgYSB0aW55IHJlZ2lzdHJ5LCB3aXRoIGEgc2luZ2xlIHBhcnRpdGlv biAqLworCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgc2l6ZW9mKFBHUHJvY1BhcnRpdGlvbikp OworCX0KKwogCXJldHVybiBzaXplOwogfQogCkBAIC0xNDAsMTIgKzI1OCwxNiBAQCBQcm9j R2xvYmFsU2htZW1TaXplKHZvaWQpCiB7CiAJU2l6ZQkJc2l6ZSA9IDA7CiAKKwkvKiBjYWxj dWxhdGUgcGFydGl0aW9uIGluZm8gZm9yIHBncHJvYyBlbnRyaWVzIGV0YyAqLworCXBncHJv Y19wYXJ0aXRpb25zX3ByZXBhcmUoKTsKKwogCS8qIFByb2NHbG9iYWwgKi8KIAlzaXplID0g YWRkX3NpemUoc2l6ZSwgc2l6ZW9mKFBST0NfSERSKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNp emUsIHNpemVvZihzbG9ja190KSk7CiAKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgUEdQcm9j U2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBGYXN0UGF0aExvY2tTaG1l bVNpemUoKSk7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFBHUHJvY1BhcnRpdGlvbnNTaG1l bVNpemUoKSk7CiAKIAlyZXR1cm4gc2l6ZTsKIH0KQEAgLTE5MSw3ICszMTMsNyBAQCBQcm9j R2xvYmFsU2VtYXModm9pZCkKIHZvaWQKIEluaXRQcm9jR2xvYmFsKHZvaWQpCiB7Ci0JUEdQ Uk9DCSAgICpwcm9jczsKKwlQR1BST0MJICAqKnByb2NzOwogCWludAkJCWksCiAJCQkJajsK IAlib29sCQlmb3VuZDsKQEAgLTIxMCw2ICszMzIsOSBAQCBJbml0UHJvY0dsb2JhbCh2b2lk KQogCQlTaG1lbUluaXRTdHJ1Y3QoIlByb2MgSGVhZGVyIiwgc2l6ZW9mKFBST0NfSERSKSwg JmZvdW5kKTsKIAlBc3NlcnQoIWZvdW5kKTsKIAorCS8qIFhYWCBjYWxsIGFnYWluLCBFWEVD X0JBQ0tFTkQgbWF5IG5vdCBzZWUgdGhlIGFscmVhZHkgY29tcHV0ZWQgdmFsdWUgKi8KKwlw Z3Byb2NfcGFydGl0aW9uc19wcmVwYXJlKCk7CisKIAkvKgogCSAqIEluaXRpYWxpemUgdGhl IGRhdGEgc3RydWN0dXJlcy4KIAkgKi8KQEAgLTIyNCw2ICszNDksMTUgQEAgSW5pdFByb2NH bG9iYWwodm9pZCkKIAlwZ19hdG9taWNfaW5pdF91MzIoJlByb2NHbG9iYWwtPnByb2NBcnJh eUdyb3VwRmlyc3QsIElOVkFMSURfUFJPQ19OVU1CRVIpOwogCXBnX2F0b21pY19pbml0X3Uz MigmUHJvY0dsb2JhbC0+Y2xvZ0dyb3VwRmlyc3QsIElOVkFMSURfUFJPQ19OVU1CRVIpOwog CisJLyogUEdQUk9DIHBhcnRpdGlvbiByZWdpc3RyeSAqLworCXJlcXVlc3RTaXplID0gUEdQ cm9jUGFydGl0aW9uc1NobWVtU2l6ZSgpOworCisJcHRyID0gU2htZW1Jbml0U3RydWN0KCJQ R1BST0MgcGFydGl0aW9ucyIsCisJCQkJCQkgIHJlcXVlc3RTaXplLAorCQkJCQkJICAmZm91 bmQpOworCisJcGFydGl0aW9ucyA9IChQR1Byb2NQYXJ0aXRpb24gKikgcHRyOworCiAJLyoK IAkgKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYWxsIHRoZSBQR1BST0Mgc3RydWN0dXJlcyB3 ZSdsbCBuZWVkLiAgVGhlcmUgYXJlCiAJICogc2l4IHNlcGFyYXRlIGNvbnN1bWVyczogKDEp IG5vcm1hbCBiYWNrZW5kcywgKDIpIGF1dG92YWN1dW0gd29ya2VycyBhbmQKQEAgLTIzOSwy MSArMzczLDExMCBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCQkJCQkJICByZXF1ZXN0U2l6 ZSwKIAkJCQkJCSAgJmZvdW5kKTsKIAotCU1lbVNldChwdHIsIDAsIHJlcXVlc3RTaXplKTsK LQotCXByb2NzID0gKFBHUFJPQyAqKSBwdHI7Ci0JcHRyID0gKGNoYXIgKikgcHRyICsgVG90 YWxQcm9jcyAqIHNpemVvZihQR1BST0MpOworCS8qIGFsbHByb2NzIChhcnJheSBvZiBwb2lu dGVycyB0byBQR1BST0MgZW50cmllcykgKi8KKwlwcm9jcyA9IChQR1BST0MgKiopIHB0cjsK KwlwdHIgPSAoY2hhciAqKSBwdHIgKyBDQUNIRUxJTkVBTElHTihUb3RhbFByb2NzICogc2l6 ZW9mKFBHUFJPQyAqKSk7CiAKIAlQcm9jR2xvYmFsLT5hbGxQcm9jcyA9IHByb2NzOwogCS8q IFhYWCBhbGxQcm9jQ291bnQgaXNuJ3QgcmVhbGx5IGFsbCBvZiB0aGVtOyBpdCBleGNsdWRl cyBwcmVwYXJlZCB4YWN0cyAqLwogCVByb2NHbG9iYWwtPmFsbFByb2NDb3VudCA9IE1heEJh Y2tlbmRzICsgTlVNX0FVWElMSUFSWV9QUk9DUzsKIAorCS8qCisJICogSWYgTlVNQSBwYXJ0 aXRpb25pbmcgaXMgZW5hYmxlZCwgYW5kIHdlIGRlY2lkZWQgd2UgYWN0dWFsbHkgY2FuIGRv IHRoZQorCSAqIHBhcnRpdGlvbmluZywgYWxsb2NhdGUgdGhlIGNodW5rcy4KKwkgKgorCSAq IE90aGVyd2lzZSB3ZSdsbCBhbGxvY2F0ZSBhIHNpbmdsZSBhcnJheSBmb3IgZXZlcnl0aGlu Zy4gSXQncyBub3QgcXVpdGUKKwkgKiB3aGF0IHdlIGRpZCB3aXRob3V0IE5VTUEsIGJlY2F1 c2UgdGhlcmUncyBhbiBleHRyYSBsZXZlbCBvZgorCSAqIGluZGlyZWN0aW9uLCBidXQgaXQn cyB0aGUgYmVzdCB3ZSBjYW4gZG8uCisJICovCisJaWYgKCgobnVtYV9mbGFncyAmIE5VTUFf UFJPQ1MpICE9IDApICYmIG51bWFfY2FuX3BhcnRpdGlvbikKKwl7CisJCWludAkJCW5vZGVf cHJvY3M7CisJCWludAkJCXRvdGFsX3Byb2NzID0gMDsKKworCQlBc3NlcnQobnVtYV9wcm9j c19wZXJfbm9kZSA+IDApOworCQlBc3NlcnQobnVtYV9ub2RlcyA+IDApOworCisJCS8qIG1h a2Ugc3VyZSB0byBhbGlnbiB0aGUgUEdQUk9DIGFycmF5IHRvIG1lbW9yeSBwYWdlICovCisJ CXB0ciA9IChjaGFyICopIFRZUEVBTElHTihudW1hX3BhZ2Vfc2l6ZSwgcHRyKTsKKworCQkv KgorCQkgKiBOb3cgaW5pdGlhbGl6ZSB0aGUgUEdQUk9DIHBhcnRpdGlvbiByZWdpc3RyeSB3 aXRoIG9uZSBwYXJ0aXRpb24KKwkJICogcGVyIE5VTUEgbm9kZSAoYW5kIHRoZW4gb25lIGV4 dHJhIHBhcnRpdGlvbiBmb3IgYXV4aWxpYXJ5IHByb2NzKS4KKwkJICovCisJCWZvciAoaSA9 IDA7IGkgPCBudW1hX25vZGVzOyBpKyspCisJCXsKKwkJCS8qIHRoZSBsYXN0IE5VTUEgbm9k ZSBtYXkgZ2V0IGZld2VyIFBHUFJPQyBlbnRyaWVzLCBidXQgbWVoICovCisJCQlub2RlX3By b2NzID0gTWluKG51bWFfcHJvY3NfcGVyX25vZGUsIE1heEJhY2tlbmRzIC0gdG90YWxfcHJv Y3MpOworCisJCQkvKiBmaWxsIGluIHRoZSBwYXJ0aXRpb24gaW5mbyAqLworCQkJcGFydGl0 aW9uc1tpXS5udW1fcHJvY3MgPSBub2RlX3Byb2NzOworCQkJcGFydGl0aW9uc1tpXS5udW1h X25vZGUgPSBpOworCQkJcGFydGl0aW9uc1tpXS5wZ3Byb2NfcHRyID0gcHRyOworCisJCQlw dHIgPSBwZ3Byb2NfcGFydGl0aW9uX2luaXQocHRyLCBub2RlX3Byb2NzLCB0b3RhbF9wcm9j cywgaSk7CisKKwkJCS8qIHNob3VsZCBoYXZlIGJlZW4gYWxpZ25lZCAqLworCQkJQXNzZXJ0 KHB0ciA9PSAoY2hhciAqKSBUWVBFQUxJR04obnVtYV9wYWdlX3NpemUsIHB0cikpOworCisJ CQl0b3RhbF9wcm9jcyArPSBub2RlX3Byb2NzOworCisJCQkvKiBkb24ndCB1bmRlcmZsb3cv b3ZlcmZsb3cgdGhlIGFsbG9jYXRpb24gKi8KKwkJCUFzc2VydCgocHRyID4gKGNoYXIgKikg cHJvY3MpICYmIChwdHIgPD0gKGNoYXIgKikgcHJvY3MgKyByZXF1ZXN0U2l6ZSkpOworCQl9 CisKKwkJQXNzZXJ0KHRvdGFsX3Byb2NzID09IE1heEJhY2tlbmRzKTsKKworCQkvKgorCQkg KiBBbHNvIGJ1aWxkIFBHUFJPQyBlbnRyaWVzIGZvciBhdXhpbGlhcnkgcHJvY3MgLyBwcmVw YXJlZCB4YWN0cyAod2UKKwkJICogaG93ZXZlciBkb24ndCBhc3NpZ24gdGhvc2UgdG8gYW55 IE5VTUEgbm9kZSkuCisJCSAqLworCQlub2RlX3Byb2NzID0gKE5VTV9BVVhJTElBUllfUFJP Q1MgKyBtYXhfcHJlcGFyZWRfeGFjdHMpOworCisJCS8qIGZpbGwgaW4gdGhlIHBhcnRpdGlv biBpbmZvICovCisJCXBhcnRpdGlvbnNbbnVtYV9ub2Rlc10ubnVtX3Byb2NzID0gbm9kZV9w cm9jczsKKwkJcGFydGl0aW9uc1tudW1hX25vZGVzXS5udW1hX25vZGUgPSAtMTsKKwkJcGFy dGl0aW9uc1tudW1hX25vZGVzXS5wZ3Byb2NfcHRyID0gcHRyOworCisJCXB0ciA9IHBncHJv Y19wYXJ0aXRpb25faW5pdChwdHIsIG5vZGVfcHJvY3MsIHRvdGFsX3Byb2NzLCAtMSk7CisK KwkJdG90YWxfcHJvY3MgKz0gbm9kZV9wcm9jczsKKworCQkvKiBkb24ndCBvdmVyZmxvdyB0 aGUgYWxsb2NhdGlvbiAqLworCQlBc3NlcnQoKHB0ciA+IChjaGFyICopIHByb2NzKSAmJiAo cHRyIDw9IChjaGFyICopIHByb2NzICsgcmVxdWVzdFNpemUpKTsKKworCQlBc3NlcnQodG90 YWxfcHJvY3MgPSBUb3RhbFByb2NzKTsKKwl9CisJZWxzZQorCXsKKwkJLyoganVzdCB0cmVh dCBldmVyeXRoaW5nIGFzIGEgc2luZ2xlIGFycmF5LCB3aXRoIG5vIGFsaWdubWVudCAqLwor CQlwdHIgPSBwZ3Byb2NfcGFydGl0aW9uX2luaXQocHRyLCBUb3RhbFByb2NzLCAwLCAtMSk7 CisKKwkJLyogZmlsbCBpbiB0aGUgcGFydGl0aW9uIGluZm8gKi8KKwkJcGFydGl0aW9uc1sw XS5udW1fcHJvY3MgPSBUb3RhbFByb2NzOworCQlwYXJ0aXRpb25zWzBdLm51bWFfbm9kZSA9 IC0xOworCQlwYXJ0aXRpb25zWzBdLnBncHJvY19wdHIgPSBwdHI7CisKKwkJLyogZG9uJ3Qg b3ZlcmZsb3cgdGhlIGFsbG9jYXRpb24gKi8KKwkJQXNzZXJ0KChwdHIgPiAoY2hhciAqKSBw cm9jcykgJiYgKHB0ciA8PSAoY2hhciAqKSBwcm9jcyArIHJlcXVlc3RTaXplKSk7CisJfQor CisJLyoKKwkgKiBEb24ndCBtZW1zZXQgdGhlIG1lbW9yeSBiZWZvcmUgbG9jYXRpbmcgaXQg dG8gTlVNQSBub2RlcyAod2hpY2ggcmVxdWlyZXMKKwkgKiB0aGUgcGFnZXMgdG8gYmUgYWxs b2NhdGVkIGJ1dCBub3QgeWV0IGZhdWx0ZWQgaW4gbWVtb3J5KS4KKwkgKi8KKwlNZW1TZXQo cHRyLCAwLCByZXF1ZXN0U2l6ZSk7CisKIAkvKgogCSAqIEFsbG9jYXRlIGFycmF5cyBtaXJy b3JpbmcgUEdQUk9DIGZpZWxkcyBpbiBhIGRlbnNlIG1hbm5lci4gU2VlCiAJICogUFJPQ19I RFIuCiAJICoKIAkgKiBYWFg6IEl0IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8gaW5jcmVhc2UgcGFk ZGluZyBmb3IgdGhlc2UgYXJyYXlzLCBnaXZlbgogCSAqIGhvdyBob3RseSB0aGV5IGFyZSBh Y2Nlc3NlZC4KKwkgKgorCSAqIFhYWCBXb3VsZCBpdCBtYWtlIHNlbnNlIHRvIE5VTUEtcGFy dGl0aW9uIHRoZXNlIGNodW5rcyB0b28sIHNvbWVob3c/CisJICogQnV0IHRob3NlIGFycmF5 cyBhcmUgdGlueSwgZml0IGludG8gYSBzaW5nbGUgbWVtb3J5IHBhZ2UsIHNvIHdvdWxkIG5l ZWQKKwkgKiB0byBiZSBtYWRlIG1vcmUgY29tcGxleC4gTm90IHN1cmUuCiAJICovCiAJUHJv Y0dsb2JhbC0+eGlkcyA9IChUcmFuc2FjdGlvbklkICopIHB0cjsKIAlwdHIgPSAoY2hhciAq KSBwdHIgKyAoVG90YWxQcm9jcyAqIHNpemVvZigqUHJvY0dsb2JhbC0+eGlkcykpOwpAQCAt Mjg2LDI0ICs1MDksOTIgQEAgSW5pdFByb2NHbG9iYWwodm9pZCkKIAkvKiBGb3IgYXNzZXJ0 cyBjaGVja2luZyB3ZSBkaWQgbm90IG92ZXJmbG93LiAqLwogCWZwRW5kUHRyID0gZnBQdHIg KyByZXF1ZXN0U2l6ZTsKIAotCWZvciAoaSA9IDA7IGkgPCBUb3RhbFByb2NzOyBpKyspCisJ LyoKKwkgKiBNaW1pYyB0aGUgbG9naWMgd2UgdXNlZCB0byBwYXJ0aXRpb24gUEdQUk9DIGVu dHJpZXMuCisJICovCisKKwkvKgorCSAqIElmIE5VTUEgcGFydGl0aW9uaW5nIGlzIGVuYWJs ZWQsIGFuZCB3ZSBkZWNpZGVkIHdlIGFjdHVhbGx5IGNhbiBkbyB0aGUKKwkgKiBwYXJ0aXRp b25pbmcsIGFsbG9jYXRlIHRoZSBjaHVua3MuCisJICoKKwkgKiBPdGhlcndpc2Ugd2UnbGwg YWxsb2NhdGUgYSBzaW5nbGUgYXJyYXkgZm9yIGV2ZXJ5dGhpbmcuIEl0J3Mgbm90IHF1aXRl CisJICogd2hhdCB3ZSBkaWQgd2l0aG91dCBOVU1BLCBiZWNhdXNlIHRoZXJlJ3MgYW4gZXh0 cmEgbGV2ZWwgb2YKKwkgKiBpbmRpcmVjdGlvbiwgYnV0IGl0J3MgdGhlIGJlc3Qgd2UgY2Fu IGRvLgorCSAqLworCWlmICgoKG51bWFfZmxhZ3MgJiBOVU1BX1BST0NTKSAhPSAwKSAmJiBu dW1hX2Nhbl9wYXJ0aXRpb24pCiAJewotCQlQR1BST0MJICAgKnByb2MgPSAmcHJvY3NbaV07 CisJCWludAkJCW5vZGVfcHJvY3M7CisJCWludAkJCXRvdGFsX3Byb2NzID0gMDsKIAotCQkv KiBDb21tb24gaW5pdGlhbGl6YXRpb24gZm9yIGFsbCBQR1BST0NzLCByZWdhcmRsZXNzIG9m IHR5cGUuICovCisJCUFzc2VydChudW1hX3Byb2NzX3Blcl9ub2RlID4gMCk7CisKKwkJLyog YnVpbGQgUEdQUk9DIGVudHJpZXMgZm9yIE5VTUEgbm9kZXMgKi8KKwkJZm9yIChpID0gMDsg aSA8IG51bWFfbm9kZXM7IGkrKykKKwkJeworCQkJLyogdGhlIGxhc3QgTlVNQSBub2RlIG1h eSBnZXQgZmV3ZXIgUEdQUk9DIGVudHJpZXMsIGJ1dCBtZWggKi8KKwkJCW5vZGVfcHJvY3Mg PSBNaW4obnVtYV9wcm9jc19wZXJfbm9kZSwgTWF4QmFja2VuZHMgLSB0b3RhbF9wcm9jcyk7 CisKKwkJCS8qIG1ha2Ugc3VyZSB0byBhbGlnbiB0aGUgUEdQUk9DIGFycmF5IHRvIG1lbW9y eSBwYWdlICovCisJCQlmcFB0ciA9IChjaGFyICopIFRZUEVBTElHTihudW1hX3BhZ2Vfc2l6 ZSwgZnBQdHIpOworCisJCQkvKiByZW1lbWJlciB0aGlzIHBvaW50ZXIgdG9vICovCisJCQlw YXJ0aXRpb25zW2ldLmZhc3RwYXRoX3B0ciA9IGZwUHRyOworCQkJQXNzZXJ0KG5vZGVfcHJv Y3MgPT0gcGFydGl0aW9uc1tpXS5udW1fcHJvY3MpOworCisJCQlmcFB0ciA9IGZhc3RwYXRo X3BhcnRpdGlvbl9pbml0KGZwUHRyLCBub2RlX3Byb2NzLCB0b3RhbF9wcm9jcywgaSwKKwkJ CQkJCQkJCQkJZnBMb2NrQml0c1NpemUsIGZwUmVsSWRTaXplKTsKKworCQkJdG90YWxfcHJv Y3MgKz0gbm9kZV9wcm9jczsKKworCQkJLyogZG9uJ3Qgb3ZlcmZsb3cgdGhlIGFsbG9jYXRp b24gKi8KKwkJCUFzc2VydChmcFB0ciA8PSBmcEVuZFB0cik7CisJCX0KKworCQlBc3NlcnQo dG90YWxfcHJvY3MgPT0gTWF4QmFja2VuZHMpOwogCiAJCS8qCi0JCSAqIFNldCB0aGUgZmFz dC1wYXRoIGxvY2sgYXJyYXlzLCBhbmQgbW92ZSB0aGUgcG9pbnRlci4gV2UgaW50ZXJsZWF2 ZQotCQkgKiB0aGUgdHdvIGFycmF5cywgdG8gKGhvcGVmdWxseSkgZ2V0IHNvbWUgbG9jYWxp dHkgZm9yIGVhY2ggYmFja2VuZC4KKwkJICogQWxzbyBidWlsZCBQR1BST0MgZW50cmllcyBm b3IgYXV4aWxpYXJ5IHByb2NzIC8gcHJlcGFyZWQgeGFjdHMgKHdlCisJCSAqIGhvd2V2ZXIg ZG9uJ3QgYXNzaWduIHRob3NlIHRvIGFueSBOVU1BIG5vZGUpLgogCQkgKi8KLQkJcHJvYy0+ ZnBMb2NrQml0cyA9ICh1aW50NjQgKikgZnBQdHI7Ci0JCWZwUHRyICs9IGZwTG9ja0JpdHNT aXplOworCQlub2RlX3Byb2NzID0gKE5VTV9BVVhJTElBUllfUFJPQ1MgKyBtYXhfcHJlcGFy ZWRfeGFjdHMpOworCisJCS8qIG1ha2Ugc3VyZSB0byBhbGlnbiB0aGUgUEdQUk9DIGFycmF5 IHRvIG1lbW9yeSBwYWdlICovCisJCWZwUHRyID0gKGNoYXIgKikgVFlQRUFMSUdOKG51bWFf cGFnZV9zaXplLCBmcFB0cik7CisKKwkJLyogcmVtZW1iZXIgdGhpcyBwb2ludGVyIHRvbyAq LworCQlwYXJ0aXRpb25zW251bWFfbm9kZXNdLmZhc3RwYXRoX3B0ciA9IGZwUHRyOworCQlB c3NlcnQobm9kZV9wcm9jcyA9PSBwYXJ0aXRpb25zW251bWFfbm9kZXNdLm51bV9wcm9jcyk7 CisKKwkJZnBQdHIgPSBmYXN0cGF0aF9wYXJ0aXRpb25faW5pdChmcFB0ciwgbm9kZV9wcm9j cywgdG90YWxfcHJvY3MsIC0xLAorCQkJCQkJCQkJCWZwTG9ja0JpdHNTaXplLCBmcFJlbElk U2l6ZSk7CiAKLQkJcHJvYy0+ZnBSZWxJZCA9IChPaWQgKikgZnBQdHI7Ci0JCWZwUHRyICs9 IGZwUmVsSWRTaXplOworCQl0b3RhbF9wcm9jcyArPSBub2RlX3Byb2NzOwogCisJCS8qIGRv bid0IG92ZXJmbG93IHRoZSBhbGxvY2F0aW9uICovCiAJCUFzc2VydChmcFB0ciA8PSBmcEVu ZFB0cik7CiAKKwkJQXNzZXJ0KHRvdGFsX3Byb2NzID0gVG90YWxQcm9jcyk7CisJfQorCWVs c2UKKwl7CisJCS8qIHJlbWVtYmVyIHRoaXMgcG9pbnRlciB0b28gKi8KKwkJcGFydGl0aW9u c1swXS5mYXN0cGF0aF9wdHIgPSBmcFB0cjsKKwkJQXNzZXJ0KFRvdGFsUHJvY3MgPT0gcGFy dGl0aW9uc1swXS5udW1fcHJvY3MpOworCisJCS8qIGp1c3QgdHJlYXQgZXZlcnl0aGluZyBh cyBhIHNpbmdsZSBhcnJheSwgd2l0aCBubyBhbGlnbm1lbnQgKi8KKwkJZnBQdHIgPSBmYXN0 cGF0aF9wYXJ0aXRpb25faW5pdChmcFB0ciwgVG90YWxQcm9jcywgMCwgLTEsCisJCQkJCQkJ CQkJZnBMb2NrQml0c1NpemUsIGZwUmVsSWRTaXplKTsKKworCQkvKiBkb24ndCBvdmVyZmxv dyB0aGUgYWxsb2NhdGlvbiAqLworCQlBc3NlcnQoZnBQdHIgPD0gZnBFbmRQdHIpOworCX0K KworCWZvciAoaSA9IDA7IGkgPCBUb3RhbFByb2NzOyBpKyspCisJeworCQlQR1BST0MJICAg KnByb2MgPSBwcm9jc1tpXTsKKworCQlBc3NlcnQocHJvYy0+cHJvY251bWJlciA9PSBpKTsK KwogCQkvKgogCQkgKiBTZXQgdXAgcGVyLVBHUFJPQyBzZW1hcGhvcmUsIGxhdGNoLCBhbmQg ZnBJbmZvTG9jay4gIFByZXBhcmVkIHhhY3QKIAkJICogZHVtbXkgUEdQUk9DcyBkb24ndCBu ZWVkIHRoZXNlIHRob3VnaCAtIHRoZXkncmUgbmV2ZXIgYXNzb2NpYXRlZApAQCAtMzY2LDkg KzY1Nyw2IEBAIEluaXRQcm9jR2xvYmFsKHZvaWQpCiAJCXBnX2F0b21pY19pbml0X3U2NCgm KHByb2MtPndhaXRTdGFydCksIDApOwogCX0KIAotCS8qIFNob3VsZCBoYXZlIGNvbnN1bWVk IGV4YWN0bHkgdGhlIGV4cGVjdGVkIGFtb3VudCBvZiBmYXN0LXBhdGggbWVtb3J5LiAqLwot CUFzc2VydChmcFB0ciA9PSBmcEVuZFB0cik7Ci0KIAkvKgogCSAqIFNhdmUgcG9pbnRlcnMg dG8gdGhlIGJsb2NrcyBvZiBQR1BST0Mgc3RydWN0dXJlcyByZXNlcnZlZCBmb3IgYXV4aWxp YXJ5CiAJICogcHJvY2Vzc2VzIGFuZCBwcmVwYXJlZCB0cmFuc2FjdGlvbnMuCkBAIC00MzUs NyArNzIzLDUxIEBAIEluaXRQcm9jZXNzKHZvaWQpCiAKIAlpZiAoIWRsaXN0X2lzX2VtcHR5 KHByb2NnbG9iYWxsaXN0KSkKIAl7Ci0JCU15UHJvYyA9IGRsaXN0X2NvbnRhaW5lcihQR1BS T0MsIGxpbmtzLCBkbGlzdF9wb3BfaGVhZF9ub2RlKHByb2NnbG9iYWxsaXN0KSk7CisJCS8q CisJCSAqIFdpdGggbnVtYSBpbnRlcmxlYXZpbmcgb2YgUEdQUk9DLCB0cnkgdG8gZ2V0IGEg UFJPQyBlbnRyeSBmcm9tIHRoZQorCQkgKiByaWdodCBOVU1BIG5vZGUgKHdoZW4gdGhlIHBy b2Nlc3Mgc3RhcnRzKS4KKwkJICoKKwkJICogWFhYIFRoZSBwcm9jZXNzIG1heSBtb3ZlIHRv IGEgZGlmZmVyZW50IE5VTUEgbm9kZSBsYXRlciwgYnV0CisJCSAqIHRoZXJlJ3Mgbm90IG11 Y2ggd2UgY2FuIGRvIGFib3V0IHRoYXQuCisJCSAqLworCQlpZiAoKG51bWFfZmxhZ3MgJiBO VU1BX1BST0NTKSAhPSAwKQorCQl7CisJCQlkbGlzdF9tdXRhYmxlX2l0ZXIgaXRlcjsKKwkJ CWludAkJbm9kZTsKKworI2lmZGVmIFVTRV9MSUJOVU1BCisJCQlpbnQJY3B1ID0gc2NoZWRf Z2V0Y3B1KCk7CisKKwkJCWlmIChjcHUgPCAwKQorCQkJCWVsb2coRVJST1IsICJnZXRjcHUg ZmFpbGVkOiAlbSIpOworCisJCQlub2RlID0gbnVtYV9ub2RlX29mX2NwdShjcHUpOworI2Vs c2UKKwkJCS8qIEZJWE1FIGlzIGRlZmF1bHRpbmcgdG8gMCBjb3JyZWN0PyAqLworCQkJbm9k ZSA9IDA7CisjZW5kaWYKKworCQkJTXlQcm9jID0gTlVMTDsKKworCQkJZGxpc3RfZm9yZWFj aF9tb2RpZnkoaXRlciwgcHJvY2dsb2JhbGxpc3QpCisJCQl7CisJCQkJUEdQUk9DCSAgICpw cm9jOworCisJCQkJcHJvYyA9IGRsaXN0X2NvbnRhaW5lcihQR1BST0MsIGxpbmtzLCBpdGVy LmN1cik7CisKKwkJCQlpZiAocHJvYy0+bnVtYV9ub2RlID09IG5vZGUpCisJCQkJeworCQkJ CQlNeVByb2MgPSBwcm9jOworCQkJCQlkbGlzdF9kZWxldGUoaXRlci5jdXIpOworCQkJCQli cmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBkaWRuJ3QgZmluZCBQR1BST0MgZnJv bSB0aGUgY29ycmVjdCBOVU1BIG5vZGUsIHBpY2sgYW55IGZyZWUgb25lICovCisJCWlmIChN eVByb2MgPT0gTlVMTCkKKwkJCU15UHJvYyA9IGRsaXN0X2NvbnRhaW5lcihQR1BST0MsIGxp bmtzLCBkbGlzdF9wb3BfaGVhZF9ub2RlKHByb2NnbG9iYWxsaXN0KSk7CisKIAkJU3Bpbkxv Y2tSZWxlYXNlKFByb2NTdHJ1Y3RMb2NrKTsKIAl9CiAJZWxzZQpAQCAtNjQ2LDcgKzk3OCw3 IEBAIEluaXRBdXhpbGlhcnlQcm9jZXNzKHZvaWQpCiAJICovCiAJZm9yIChwcm9jdHlwZSA9 IDA7IHByb2N0eXBlIDwgTlVNX0FVWElMSUFSWV9QUk9DUzsgcHJvY3R5cGUrKykKIAl7Ci0J CWF1eHByb2MgPSAmQXV4aWxpYXJ5UHJvY3NbcHJvY3R5cGVdOworCQlhdXhwcm9jID0gQXV4 aWxpYXJ5UHJvY3NbcHJvY3R5cGVdOwogCQlpZiAoYXV4cHJvYy0+cGlkID09IDApCiAJCQli cmVhazsKIAl9CkBAIC0xMDQ5LDcgKzEzODEsNyBAQCBBdXhpbGlhcnlQcm9jS2lsbChpbnQg Y29kZSwgRGF0dW0gYXJnKQogCWlmIChNeVByb2MtPnBpZCAhPSAoaW50KSBnZXRwaWQoKSkK IAkJZWxvZyhQQU5JQywgIkF1eGlsaWFyeVByb2NLaWxsKCkgY2FsbGVkIGluIGNoaWxkIHBy b2Nlc3MiKTsKIAotCWF1eHByb2MgPSAmQXV4aWxpYXJ5UHJvY3NbcHJvY3R5cGVdOworCWF1 eHByb2MgPSBBdXhpbGlhcnlQcm9jc1twcm9jdHlwZV07CiAKIAlBc3NlcnQoTXlQcm9jID09 IGF1eHByb2MpOwogCkBAIC0xMDk4LDcgKzE0MzAsNyBAQCBBdXhpbGlhcnlQaWRHZXRQcm9j KGludCBwaWQpCiAKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOVU1fQVVYSUxJQVJZX1BS T0NTOyBpbmRleCsrKQogCXsKLQkJUEdQUk9DCSAgICpwcm9jID0gJkF1eGlsaWFyeVByb2Nz W2luZGV4XTsKKwkJUEdQUk9DCSAgICpwcm9jID0gQXV4aWxpYXJ5UHJvY3NbaW5kZXhdOwog CiAJCWlmIChwcm9jLT5waWQgPT0gcGlkKQogCQl7CkBAIC0xOTg4LDcgKzIzMjAsNyBAQCBQ cm9jU2VuZFNpZ25hbChQcm9jTnVtYmVyIHByb2NOdW1iZXIpCiAJaWYgKHByb2NOdW1iZXIg PCAwIHx8IHByb2NOdW1iZXIgPj0gUHJvY0dsb2JhbC0+YWxsUHJvY0NvdW50KQogCQllbG9n KEVSUk9SLCAicHJvY051bWJlciBvdXQgb2YgcmFuZ2UiKTsKIAotCVNldExhdGNoKCZQcm9j R2xvYmFsLT5hbGxQcm9jc1twcm9jTnVtYmVyXS5wcm9jTGF0Y2gpOworCVNldExhdGNoKCZQ cm9jR2xvYmFsLT5hbGxQcm9jc1twcm9jTnVtYmVyXS0+cHJvY0xhdGNoKTsKIH0KIAogLyoK QEAgLTIwNjMsMyArMjM5NSwxNzMgQEAgQmVjb21lTG9ja0dyb3VwTWVtYmVyKFBHUFJPQyAq bGVhZGVyLCBpbnQgcGlkKQogCiAJcmV0dXJuIG9rOwogfQorCisvKgorICogcGdwcm9jX3Bh cnRpdGlvbnNfcHJlcGFyZQorICoJCUNhbGN1bGF0ZSBwYXJhbWV0ZXJzIGZvciBwYXJ0aXRp b25pbmcgYnVmZmVycy4KKyAqCisgKiBOVU1BIHBhcnRpdGlvbmluZworICoKKyAqIE5vdyBi dWlsZCB0aGUgYWN0dWFsIFBHUFJPQyBhcnJheXMsIG9uZSAiY2h1bmsiIHBlciBOVU1BIG5v ZGUgKGFuZCBvbmUKKyAqIGV4dHJhIGZvciBhdXhpbGlhcnkgcHJvY2Vzc2VzIGFuZCAyUEMg dHJhbnNhY3Rpb25zLCBub3QgYXNzb2NpYXRlZCB3aXRoCisgKiBhbnkgcGFydGljdWxhciBu b2RlKS4KKyAqCisgKiBGaXJzdCBkZXRlcm1pbmUgaG93IG1hbnkgImJhY2tlbmQiIHByb2Nz IHRvIGFsbG9jYXRlIHBlciBOVU1BIG5vZGUuIFRoZQorICogY291bnQgbWF5IG5vdCBiZSBl eGFjdGx5IGRpdmlzaWJsZSwgYnV0IHdlIG1vc3RseSBpZ25vcmUgdGhhdC4gVGhlIGxhc3QK KyAqIG5vZGUgbWF5IGdldCBzb21ld2hhdCBmZXdlciBQR1BST0MgZW50cmllcywgYnV0IHRo ZSBpbWJhbGFuY2Ugb3VnaHQgdG8KKyAqIGJlIHByZXR0eSBzbWFsbCAoaWYgTWF4QmFja2Vu ZHMgPj4gbnVtYV9ub2RlcykuCisgKgorICogWFhYIEEgZmFpcmVyIGRpc3RyaWJ1dGlvbiBp cyBwb3NzaWJsZSwgYnV0IG5vdCB3b3J0aCBpdCBmb3Igbm93LgorICovCitzdGF0aWMgdm9p ZAorcGdwcm9jX3BhcnRpdGlvbnNfcHJlcGFyZSh2b2lkKQoreworCS8qIGJhaWwgb3V0IGlm IGFscmVhZHkgaW5pdGlhbGl6ZWQgKGNhbGN1bGF0ZSBvbmx5IG9uY2UpICovCisJaWYgKG51 bWFfbm9kZXMgIT0gLTEpCisJCXJldHVybjsKKworCS8qIFhYWCBvbmx5IGdpdmVzIHVzIHRo ZSBudW1iZXIsIHRoZSBub2RlcyBtYXkgbm90IGJlIDAsIDEsIDIsIC4uLiAqLworI2lmZGVm IFVTRV9MSUJOVU1BCisJbnVtYV9ub2RlcyA9IG51bWFfbnVtX2NvbmZpZ3VyZWRfbm9kZXMo KTsKKyNlbHNlCisJbnVtYV9ub2RlcyA9IDE7CisjZW5kaWYKKworCS8qIFhYWCBjYW4gdGhp cyBoYXBwZW4/ICovCisJaWYgKG51bWFfbm9kZXMgPCAxKQorCQludW1hX25vZGVzID0gMTsK KworCS8qCisJICogWFhYIEEgYml0IHdlaXJkLiBEbyB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0 IHBvc3RtYXN0ZXI/IENvdWxkIHRoaXMgZXZlbgorCSAqIHJ1biBvdXRzaWRlIHBvc3RtYXN0 ZXI/IEkgZG9uJ3QgdGhpbmsgc28uCisJICoKKwkgKiBYWFggQW5vdGhlciBpc3N1ZSBpcyB3 ZSBtYXkgZ2V0IGRpZmZlcmVudCB2YWx1ZXMgdGhhbiB3aGVuIHNpemluZyB0aGUKKwkgKiB0 aGUgbWVtb3J5LCBiZWNhdXNlIGF0IHRoYXQgcG9pbnQgd2UgZGlkbid0IGtub3cgaWYgd2Ug Z2V0IGh1Z2UgcGFnZXMsCisJICogc28gd2UgYXNzdW1lZCB3ZSB3aWxsLiBTaG91bGRuJ3Qg Y2F1c2UgY3Jhc2hlcywgYnV0IHdlIG1pZ2h0IGFsbG9jYXRlCisJICogc2hhcmVkIG1lbW9y eSBhbmQgdGhlbiBub3QgdXNlIHNvbWUgb2YgaXQgKGJlY2F1c2Ugb2YgdGhlIGFsaWdubWVu dAorCSAqIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCkuIE5vdCBzdXJlIGFib3V0IGJl dHRlciB3YXksIGdvb2QgZm9yIG5vdy4KKwkgKi8KKwkvLyBBc3NlcnQoIUlzVW5kZXJQb3N0 bWFzdGVyKTsKKworCW51bWFfcGFnZV9zaXplID0gcGdfbnVtYV9wYWdlX3NpemUoKTsKKwor CW51bWFfcHJvY3NfcGVyX25vZGUgPSAoTWF4QmFja2VuZHMgKyAobnVtYV9ub2RlcyAtIDEp KSAvIG51bWFfbm9kZXM7CisKKwllbG9nKERFQlVHMSwgIk5VTUE6IHBncHJvYyBiYWNrZW5k cyAlZCBudW1fbm9kZXMgJWQgcGVyX25vZGUgJWQiLAorCQkgTWF4QmFja2VuZHMsIG51bWFf bm9kZXMsIG51bWFfcHJvY3NfcGVyX25vZGUpOworCisJQXNzZXJ0KG51bWFfbm9kZXMgKiBu dW1hX3Byb2NzX3Blcl9ub2RlID49IE1heEJhY2tlbmRzKTsKKworCS8qIHN1Y2Nlc3MgKi8K KwludW1hX2Nhbl9wYXJ0aXRpb24gPSB0cnVlOworfQorCisvKgorICoKKyAqLworc3RhdGlj IGNoYXIgKgorcGdwcm9jX3BhcnRpdGlvbl9pbml0KGNoYXIgKnB0ciwgaW50IG51bV9wcm9j cywgaW50IGFsbHByb2NzX2luZGV4LCBpbnQgbm9kZSkKK3sKKwlQR1BST0MJICAgKnByb2Nz X25vZGU7CisKKwkvKiBhbGxvY2F0ZSB0aGUgUEdQUk9DIGNodW5rIGZvciB0aGlzIG5vZGUg Ki8KKwlwcm9jc19ub2RlID0gKFBHUFJPQyAqKSBwdHI7CisKKwkvKiBwb2ludGVyIHJpZ2h0 IGFmdGVyIHRoaXMgYXJyYXkgKi8KKwlwdHIgPSAoY2hhciAqKSBwdHIgKyBudW1fcHJvY3Mg KiBzaXplb2YoUEdQUk9DKTsKKworCS8qCisJICogaWYgbm9kZSBzcGVjaWZpZWQsIG1vdmUg dG8gbm9kZSAtIGRvIHRoaXMgYmVmb3JlIHdlIHN0YXJ0IHRvdWNoaW5nIHRoZQorCSAqIG1l bW9yeSwgdG8gbWFrZSBzdXJlIGl0J3Mgbm90IG1hcHBlZCB0byBhbnkgbm9kZSB5ZXQKKwkg Ki8KKwlpZiAobm9kZSAhPSAtMSkKKwl7CisJCS8qIGFsaWduIHRoZSBwb2ludGVyIHRvIHRo ZSBuZXh0IHBhZ2UgKi8KKwkJcHRyID0gKGNoYXIgKikgVFlQRUFMSUdOKG51bWFfcGFnZV9z aXplLCBwdHIpOworCisJCXBnX251bWFfbW92ZV90b19ub2RlKChjaGFyICopIHByb2NzX25v ZGUsIHB0ciwgbm9kZSk7CisJfQorCisJZWxvZyhERUJVRzEsICJOVU1BOiBwZ3Byb2NfaW5p dF9wYXJ0aXRpb24gcHJvY3MgJXAgZW5kcHRyICVwIG51bV9wcm9jcyAlZCBub2RlICVkIiwK KwkJIHByb2NzX25vZGUsIHB0ciwgbnVtX3Byb2NzLCBub2RlKTsKKworCS8qIGFkZCBwb2lu dGVycyB0byB0aGUgUEdQUk9DIGVudHJpZXMgdG8gYWxsUHJvY3MgKi8KKwlmb3IgKGludCBp ID0gMDsgaSA8IG51bV9wcm9jczsgaSsrKQorCXsKKwkJcHJvY3Nfbm9kZVtpXS5udW1hX25v ZGUgPSBub2RlOworCQlwcm9jc19ub2RlW2ldLnByb2NudW1iZXIgPSBhbGxwcm9jc19pbmRl eDsKKworCQlQcm9jR2xvYmFsLT5hbGxQcm9jc1thbGxwcm9jc19pbmRleF0gPSAmcHJvY3Nf bm9kZVtpXTsKKworCQlhbGxwcm9jc19pbmRleCsrOworCX0KKworCXJldHVybiBwdHI7Cit9 CisKK3N0YXRpYyBjaGFyICoKK2Zhc3RwYXRoX3BhcnRpdGlvbl9pbml0KGNoYXIgKnB0ciwg aW50IG51bV9wcm9jcywgaW50IGFsbHByb2NzX2luZGV4LCBpbnQgbm9kZSwKKwkJCQkJCVNp emUgZnBMb2NrQml0c1NpemUsIFNpemUgZnBSZWxJZFNpemUpCit7CisJY2hhcgkgICAqZW5k cHRyID0gcHRyICsgbnVtX3Byb2NzICogKGZwTG9ja0JpdHNTaXplICsgZnBSZWxJZFNpemUp OworCisJLyoKKwkgKiBpZiBub2RlIHNwZWNpZmllZCwgbW92ZSB0byBub2RlIC0gZG8gdGhp cyBiZWZvcmUgd2Ugc3RhcnQgdG91Y2hpbmcgdGhlCisJICogbWVtb3J5LCB0byBtYWtlIHN1 cmUgaXQncyBub3QgbWFwcGVkIHRvIGFueSBub2RlIHlldAorCSAqLworCWlmIChub2RlICE9 IC0xKQorCQlwZ19udW1hX21vdmVfdG9fbm9kZShwdHIsIGVuZHB0ciwgbm9kZSk7CisKKwkv KgorCSAqIE5vdyBwb2ludCB0aGUgUEdQUk9DIGVudHJpZXMgdG8gdGhlIGZhc3QtcGF0aCBh cnJheXMsIGFuZCBhbHNvIGFkdmFuY2UKKwkgKiB0aGUgZnBQdHIuCisJICovCisJZm9yIChp bnQgaSA9IDA7IGkgPCBudW1fcHJvY3M7IGkrKykKKwl7CisJCVBHUFJPQwkgICAqcHJvYyA9 IFByb2NHbG9iYWwtPmFsbFByb2NzW2FsbHByb2NzX2luZGV4XTsKKworCQkvKiBjcm9zcy1j aGVjayB3ZSBnb3QgdGhlIGV4cGVjdGVkIE5VTUEgbm9kZSAqLworCQlBc3NlcnQocHJvYy0+ bnVtYV9ub2RlID09IG5vZGUpOworCQlBc3NlcnQocHJvYy0+cHJvY251bWJlciA9PSBhbGxw cm9jc19pbmRleCk7CisKKwkJLyoKKwkJICogU2V0IHRoZSBmYXN0LXBhdGggbG9jayBhcnJh eXMsIGFuZCBtb3ZlIHRoZSBwb2ludGVyLiBXZSBpbnRlcmxlYXZlCisJCSAqIHRoZSB0d28g YXJyYXlzLCB0byAoaG9wZWZ1bGx5KSBnZXQgc29tZSBsb2NhbGl0eSBmb3IgZWFjaCBiYWNr ZW5kLgorCQkgKi8KKwkJcHJvYy0+ZnBMb2NrQml0cyA9ICh1aW50NjQgKikgcHRyOworCQlw dHIgKz0gZnBMb2NrQml0c1NpemU7CisKKwkJcHJvYy0+ZnBSZWxJZCA9IChPaWQgKikgcHRy OworCQlwdHIgKz0gZnBSZWxJZFNpemU7CisKKwkJQXNzZXJ0KHB0ciA8PSBlbmRwdHIpOwor CisJCWFsbHByb2NzX2luZGV4Kys7CisJfQorCisJQXNzZXJ0KHB0ciA9PSBlbmRwdHIpOwor CisJcmV0dXJuIGVuZHB0cjsKK30KKworaW50CitQcm9jUGFydGl0aW9uQ291bnQodm9pZCkK K3sKKwlpZiAoKChudW1hX2ZsYWdzICYgTlVNQV9QUk9DUykgIT0gMCkgJiYgbnVtYV9jYW5f cGFydGl0aW9uKQorCQlyZXR1cm4gKG51bWFfbm9kZXMgKyAxKTsKKworCXJldHVybiAxOwor fQorCit2b2lkCitQcm9jUGFydGl0aW9uR2V0KGludCBpZHgsIGludCAqbm9kZSwgaW50ICpu cHJvY3MsIHZvaWQgKipwcm9jc3B0ciwgdm9pZCAqKmZwcHRyKQoreworCVBHUHJvY1BhcnRp dGlvbiAqcGFydCA9ICZwYXJ0aXRpb25zW2lkeF07CisKKwlBc3NlcnQoKGlkeCA+PSAwKSAm JiAoaWR4IDwgUHJvY1BhcnRpdGlvbkNvdW50KCkpKTsKKworCSpucHJvY3MgPSBwYXJ0LT5u dW1fcHJvY3M7CisJKnByb2NzcHRyID0gcGFydC0+cGdwcm9jX3B0cjsKKwkqZnBwdHIgPSBw YXJ0LT5mYXN0cGF0aF9wdHI7CisJKm5vZGUgPSBwYXJ0LT5udW1hX25vZGU7Cit9CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9wb3J0L3BnX251bWEuaCBiL3NyYy9pbmNsdWRlL3BvcnQv cGdfbnVtYS5oCmluZGV4IDk3MzRhYTMxNWZmLi5hYTUyNGY2ZjdmMyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvcG9ydC9wZ19udW1hLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9ydC9wZ19u dW1hLmgKQEAgLTIzLDYgKzIzLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIHZvaWQgcGdfbnVt YV9tb3ZlX3RvX25vZGUoY2hhciAqc3RhcnRwdHIsIGNoYXIgKmVuZHB0ciwgaW50IG4KIGV4 dGVybiBQR0RMTElNUE9SVCBpbnQgbnVtYV9mbGFnczsKIAogI2RlZmluZQkJTlVNQV9CVUZG RVJTCQkweDAxCisjZGVmaW5lCQlOVU1BX1BST0NTCQkJMHgwMgogCiAjaWZkZWYgVVNFX0xJ Qk5VTUEKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmggYi9zcmMv aW5jbHVkZS9zdG9yYWdlL3Byb2MuaAppbmRleCBjNmY1ZWJjZWVmZC4uMjFmMjYxOWZkNDAg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCisrKyBiL3NyYy9pbmNs dWRlL3N0b3JhZ2UvcHJvYy5oCkBAIC0yMDIsNiArMjAyLDggQEAgc3RydWN0IFBHUFJPQwog CQkJCQkJCQkgKiB2YWN1dW0gbXVzdCBub3QgcmVtb3ZlIHR1cGxlcyBkZWxldGVkIGJ5CiAJ CQkJCQkJCSAqIHhpZCA+PSB4bWluICEgKi8KIAorCWludAkJCXByb2NudW1iZXI7CQkvKiBp bmRleCBpbiBQcm9jR2xvYmFsLT5hbGxQcm9jcyAqLworCiAJaW50CQkJcGlkOwkJCS8qIEJh Y2tlbmQncyBwcm9jZXNzIElEOyAwIGlmIHByZXBhcmVkIHhhY3QgKi8KIAogCWludAkJCXBn eGFjdG9mZjsJCS8qIG9mZnNldCBpbnRvIHZhcmlvdXMgUHJvY0dsb2JhbC0+YXJyYXlzIHdp dGgKQEAgLTMyNyw2ICszMjksOSBAQCBzdHJ1Y3QgUEdQUk9DCiAJUEdQUk9DCSAgICpsb2Nr R3JvdXBMZWFkZXI7CS8qIGxvY2sgZ3JvdXAgbGVhZGVyLCBpZiBJJ20gYSBtZW1iZXIgKi8K IAlkbGlzdF9oZWFkCWxvY2tHcm91cE1lbWJlcnM7CS8qIGxpc3Qgb2YgbWVtYmVycywgaWYg SSdtIGEgbGVhZGVyICovCiAJZGxpc3Rfbm9kZQlsb2NrR3JvdXBMaW5rOwkvKiBteSBtZW1i ZXIgbGluaywgaWYgSSdtIGEgbWVtYmVyICovCisKKwkvKiBOVU1BIG5vZGUgKi8KKwlpbnQJ CQludW1hX25vZGU7CiB9OwogCiAvKiBOT1RFOiAidHlwZWRlZiBzdHJ1Y3QgUEdQUk9DIFBH UFJPQyIgYXBwZWFycyBpbiBzdG9yYWdlL2xvY2suaC4gKi8KQEAgLTM5MSw3ICszOTYsNyBA QCBleHRlcm4gUEdETExJTVBPUlQgUEdQUk9DICpNeVByb2M7CiB0eXBlZGVmIHN0cnVjdCBQ Uk9DX0hEUgogewogCS8qIEFycmF5IG9mIFBHUFJPQyBzdHJ1Y3R1cmVzIChub3QgaW5jbHVk aW5nIGR1bW1pZXMgZm9yIHByZXBhcmVkIHR4bnMpICovCi0JUEdQUk9DCSAgICphbGxQcm9j czsKKwlQR1BST0MJICAqKmFsbFByb2NzOwogCiAJLyogQXJyYXkgbWlycm9yaW5nIFBHUFJP Qy54aWQgZm9yIGVhY2ggUEdQUk9DIGN1cnJlbnRseSBpbiB0aGUgcHJvY2FycmF5ICovCiAJ VHJhbnNhY3Rpb25JZCAqeGlkczsKQEAgLTQzOCwxMyArNDQzLDEzIEBAIHR5cGVkZWYgc3Ry dWN0IFBST0NfSERSCiAKIGV4dGVybiBQR0RMTElNUE9SVCBQUk9DX0hEUiAqUHJvY0dsb2Jh bDsKIAotZXh0ZXJuIFBHRExMSU1QT1JUIFBHUFJPQyAqUHJlcGFyZWRYYWN0UHJvY3M7Citl eHRlcm4gUEdETExJTVBPUlQgUEdQUk9DICoqUHJlcGFyZWRYYWN0UHJvY3M7CiAKIC8qCiAg KiBBY2Nlc3NvcnMgZm9yIGdldHRpbmcgUEdQUk9DIGdpdmVuIGEgUHJvY051bWJlciBhbmQg dmljZSB2ZXJzYS4KICAqLwotI2RlZmluZSBHZXRQR1Byb2NCeU51bWJlcihuKSAoJlByb2NH bG9iYWwtPmFsbFByb2NzWyhuKV0pCi0jZGVmaW5lIEdldE51bWJlckZyb21QR1Byb2MocHJv YykgKChwcm9jKSAtICZQcm9jR2xvYmFsLT5hbGxQcm9jc1swXSkKKyNkZWZpbmUgR2V0UEdQ cm9jQnlOdW1iZXIobikgKFByb2NHbG9iYWwtPmFsbFByb2NzWyhuKV0pCisjZGVmaW5lIEdl dE51bWJlckZyb21QR1Byb2MocHJvYykgKChwcm9jKS0+cHJvY251bWJlcikKIAogLyoKICAq IFdlIHNldCBhc2lkZSBzb21lIGV4dHJhIFBHUFJPQyBzdHJ1Y3R1cmVzIGZvciAic3BlY2lh bCB3b3JrZXIiIHByb2Nlc3NlcywKQEAgLTQ4MCw3ICs0ODUsNyBAQCBleHRlcm4gUEdETExJ TVBPUlQgYm9vbCBsb2dfbG9ja193YWl0czsKIAogI2lmZGVmIEVYRUNfQkFDS0VORAogZXh0 ZXJuIFBHRExMSU1QT1JUIHNsb2NrX3QgKlByb2NTdHJ1Y3RMb2NrOwotZXh0ZXJuIFBHRExM SU1QT1JUIFBHUFJPQyAqQXV4aWxpYXJ5UHJvY3M7CitleHRlcm4gUEdETExJTVBPUlQgUEdQ Uk9DICoqQXV4aWxpYXJ5UHJvY3M7CiAjZW5kaWYKIAogCkBAIC01MjAsNCArNTI1LDcgQEAg ZXh0ZXJuIFBHUFJPQyAqQXV4aWxpYXJ5UGlkR2V0UHJvYyhpbnQgcGlkKTsKIGV4dGVybiB2 b2lkIEJlY29tZUxvY2tHcm91cExlYWRlcih2b2lkKTsKIGV4dGVybiBib29sIEJlY29tZUxv Y2tHcm91cE1lbWJlcihQR1BST0MgKmxlYWRlciwgaW50IHBpZCk7CiAKK2V4dGVybiBpbnQJ UHJvY1BhcnRpdGlvbkNvdW50KHZvaWQpOworZXh0ZXJuIHZvaWQgUHJvY1BhcnRpdGlvbkdl dChpbnQgaWR4LCBpbnQgKm5vZGUsIGludCAqbnByb2NzLCB2b2lkICoqcHJvY3NwdHIsIHZv aWQgKipmcHB0cik7CisKICNlbmRpZgkJCQkJCQkvKiBfUFJPQ19IXyAqLwpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdAppbmRleCBmNzczMGVjZTk3Ni4uYmU0YTYzMzRmYjcgMTAwNjQ0 Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xODc4LDYgKzE4NzgsNyBAQCBQR1BfTVBJ CiBQR1BfUHViS2V5CiBQR1BfUzJLCiBQR1BpbmcKK1BHUHJvY1BhcnRpdGlvbgogUEdRdWVy eUNsYXNzCiBQR1JVc2FnZQogUEdTZW1hcGhvcmUKLS0gCjIuNTEuMAoK --------------apuxkCRUZ0GRSLZG7S4PIVYY Content-Type: text/x-patch; charset=UTF-8; name="v20251101-0006-NUMA-shared-buffers-partitioning.patch" Content-Disposition: attachment; filename="v20251101-0006-NUMA-shared-buffers-partitioning.patch" Content-Transfer-Encoding: base64 RnJvbSBjZmY3ZWMzMmNhMTI1NjIyN2Q0YzJlYTUxYzYxOTg2YjEwYzBmMjhkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCAyOSBPY3QgMjAyNSAyMTo0MToyNiArMDEwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUxMTAxIDYvN10gTlVNQTogc2hhcmVkIGJ1ZmZlcnMgcGFydGl0aW9uaW5nCgpFbnN1 cmUgc2hhcmVkIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBmcm9tIGFsbCBOVU1BIG5vZGVzLCBp biBhIGJhbGFuY2VkCndheSwgaW5zdGVhZCBvZiBqdXN0IHVzaW5nIHRoZSBub2RlIHdoZXJl IFBvc3RncmVzIGluaXRpYWxseSBzdGFydHMsIG9yCndoZXJlIHRoZSBrZXJuZWwgZGVjaWRl cyB0byBtaWdyYXRlIHRoZSBwYWdlLCBldGMuIFdpdGggcHJlLXdhcm1pbmcKcGVyZm9ybWVk IGJ5IGEgc2luZ2xlIGJhY2tlbmQsIHRoaXMgY2FuIGVhc2lseSByZXN1bHQgaW4gc2V2ZXJl bHkKdW5iYWxhbmNlZCBtZW1vcnkgZGlzdHJpYnV0aW9uICh3aXRoIG1vc3QgZnJvbSBhIHNp bmdsZSBOVU1BIG5vZGUpLgoKVGhlIGtlcm5lbCB3b3VsZCBldmVudHVhbGx5IG1vdmUgc29t ZSBvZiB0aGUgbWVtb3J5IHRvIG90aGVyIG5vZGVzCih0aGFua3MgdG8gem9uZV9yZWNsYWlt KSwgYnV0IHRoYXQgdGVuZHMgdG8gdGFrZSBhIGxvbmcgdGltZS4gU28gdGhpcwpwYXRjaCBp bXByb3ZlcyBwcmVkaWN0YWJpbGl0eSwgcmVkdWNlcyB0aGUgdGltZSBuZWVkZWQgZm9yIHdh cm11cApkdXJpbmcgYmVuY2htYXJraW5nLCBldGMuICBJdCdzIGxlc3MgZGVwZW5kZW50IG9u IHdoYXQgdGhlIENQVQpzY2hlZHVsZXIgZG9lcywgZXRjLgoKRnVydGhlcm1vcmUsIHRoZSBi dWZmZXJzIGFyZSBtYXBwZWQgdG8gTlVNQSBub2RlcyBpbiBhIGRldGVybWluaXN0aWMKd2F5 LCBzbyB0aGlzIGFsc28gYWxsb3dzIGZ1cnRoZXIgaW1wcm92ZW1lbnRzIGxpa2UgYmFja2Vu ZHMgdXNpbmcKYnVmZmVycyBmcm9tIHRoZSBzYW1lIE5VTUEgbm9kZS4KClRoZSBlZmZlY3Qg aXMgc2ltaWxhciB0bwoKICAgICBudW1hY3RsIC0taW50ZXJsZWF2ZT1hbGwKCmJ1dCB0aGVy ZSdzIGEgbnVtYmVyIG9mIGltcG9ydGFudCBkaWZmZXJlbmNlcy4KCkZpcnN0bHksIGl0J3Mg YXBwbGllZCBvbmx5IHRvIHNoYXJlZCBidWZmZXJzIChhbmQgYWxzbyB0byBkZXNjcmlwdG9y cyksCm5vdCB0byB0aGUgd2hvbGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50LiBJdCdzIG5vdCBj bGVhciB3ZSdkIHdhbnQgdG8gdXNlCmludGVybGVhdmluZyBmb3IgYWxsIHBhcnRzLCBzdG9y aW5nIGVudHJpZXMgd2l0aCBkaWZmZXJlbnQgc2l6ZXMgYW5kCmxpZmUgY3ljbGVzIChlLmcu IFByb2NBcnJheSBtYXkgbmVlZCBkaWZmZXJlbnQgYXBwcm9hY2gpLgoKU2Vjb25kbHksIGl0 IGNvbnNpZGVycyB0aGUgcGFnZSBhbmQgYmxvY2sgc2l6ZSwgYW5kIG1ha2VzIHN1cmUgdG8g YWx3YXlzCnB1dCB0aGUgd2hvbGUgYnVmZmVyIG9uIGEgc2luZ2xlIE5VTUEgbm9kZSAoZXZl biBpZiBpdCBoYXBwZW5zIHRvIHVzZQptdWx0aXBsZSBtZW1vcnkgcGFnZXMpLCBhbmQgdG8g a2VlcCB0aGUgYnVmZmVyIGFuZCBpdCdzIGRlc2NyaXB0b3Igb24KdGhlIHNhbWUgTlVNQSBu b2RlLiBUaGUgc2VyaW91c25lc3MvbGlrZWxpaG9vZCBvZiB0aGVzZSBpc3N1ZXMgZGVwZW5k cwpvbiB0aGUgbWVtb3J5IHBhZ2Ugc2l6ZSAocmVndWxhciB2cy4gaHVnZSBwYWdlcykuCgpU aGUgbWFwcGluZyBvZiBtZW1vcnkgdG8gTlVNQSBub2RlcyBoYXBwZW5zIGluIGxhcmdlciBj aHVua3MuIFRoaXMgaXMKcmVxdWlyZWQgdG8gaGFuZGxlIGJ1ZmZlciBkZXNjcmlwdG9ycyAo d2hpY2ggYXJlIHNtYWxsZXIgdGhhbiBidWZmZXJzKSwKYW5kIHNvIG1hbnkgbW9yZSBmaXQg b250byBhIHNpbmdsZSBtZW1vcnkgcGFnZS4KClRoZSBudW1iZXIgb2YgYnVmZmVyIGRlc2Ny aXB0b3JzIHBlciBtZW1vcnkgcGFnZSBkZXRlcm1pbmVzIHRoZSBzbWFsbGVzdApudW1iZXIg b2YgYnVmZmVycyB0aGF0IGNhbiBiZSBwbGFjZWQgb24gYSBOVU1BIG5vZGUuIFdpdGggMk1C IGh1Z2UgcGFnZXMKdGhpcyBpcyAyNTZNQiwgd2l0aCA0S0IgcGFnZXMgdGhpcyBpcyA1MTJL QikuIE5vZGVzIGdldCBhIG11bHRpcGxlIG9mCnRoaXMsIGFuZCB3ZSB0cnkgdG8ga2VlcCB0 aGUgbm9kZXMgYmFsYW5jZWQgLSB0aGUgbGFzdCBub2RlIGNhbiBnZXQgbGVzcwptZW1vcnks IHRob3VnaC4KClRoZSAiYnVmZmVyIHBhcnRpdGlvbnMiIG1heSBub3QgYmUgMToxIHdpdGgg TlVNQSBub2Rlcy4gVGhlcmUncyBhCm1pbmltYWwgbnVtYmVyIG9mIHBhcnRpdGlvbnMgKGRl ZmF1bHQ6IDQpIHRoYXQgd2lsbCBiZSBjcmVhdGVkIGV2ZW4gd2l0aApmZXdlciBOVU1BIG5v ZGVzLCBvciBubyBOVU1BIGF0IGFsbC4gRWFjaCBub2RlIGdldHMgdGhlIHNhbWUgbnVtYmVy IG9mCnBhcnRpdGlvbnMsIHRvIGtlZXAgdGhpbmdzIHNpbXBsZS4gRm9yIGV4YW1wbGUsIHdp dGggMiBub2RlcyB0aGVyZSdsbCBiZQo0IHBhcnRpdGlvbnMsIHdpdGggZWFjaCBub2RlIGdl dHRpbmcgMiBvZiB0aGVtLiBXaXRoIDMgbm9kZXMgdGhlcmUnbGwgYmUKNiBwYXJ0aXRpb25z IChhZ2FpbiwgMiBwZXIgbm9kZSkuCi0tLQogLi4uL3BnX2J1ZmZlcmNhY2hlLS0xLjYtLTEu Ny5zcWwgICAgICAgICAgICAgIHwgICAxICsKIGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdf YnVmZmVyY2FjaGVfcGFnZXMuYyB8ICA0NCArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvYnVmX2luaXQuYyAgICAgICAgIHwgNTY5ICsrKysrKysrKysrKysrKysrLQogc3JjL2Jh Y2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYyAgICAgICAgIHwgIDg4ICsrLQogc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgICAgIHwgIDEwICsKIHNy Yy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jICAgICAgICAgICB8ICAgMSArCiBz cmMvaW5jbHVkZS9wb3J0L3BnX251bWEuaCAgICAgICAgICAgICAgICAgICAgfCAgIDYgKwog c3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmggICAgICAgICAgIHwgIDE0ICst CiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oICAgICAgICAgICAgICAgICAgfCAgIDQg Kwogc3JjL2luY2x1ZGUvdXRpbHMvZ3VjX2hvb2tzLmggICAgICAgICAgICAgICAgIHwgICAz ICsKIHNyYy9wb3J0L3BnX251bWEuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2 NCArKwogMTEgZmlsZXMgY2hhbmdlZCwgNzM2IGluc2VydGlvbnMoKyksIDY4IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2Fj aGUtLTEuNi0tMS43LnNxbCBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2Fj aGUtLTEuNi0tMS43LnNxbAppbmRleCAyYzRkNTYwNTE0ZC4uZGMyY2UwMTkyODMgMTAwNjQ0 Ci0tLSBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43 LnNxbAorKysgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjYt LTEuNy5zcWwKQEAgLTEzLDYgKzEzLDcgQEAgTEFOR1VBR0UgQyBQQVJBTExFTCBTQUZFOwog Q1JFQVRFIFZJRVcgcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyBBUwogCVNFTEVDVCBQLiog RlJPTSBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKCkgQVMgUAogCShwYXJ0aXRpb24gaW50 ZWdlciwJCQktLSBwYXJ0aXRpb24gaW5kZXgKKwkgbnVtYV9ub2RlIGludGVnZXIsCQkJLS0g TlVNQSBub2RlIG9mIHRoZSBwYXJ0aXRpb29uCiAJIG51bV9idWZmZXJzIGludGVnZXIsCQkt LSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcGFydGl0aW9uCiAJIGZpcnN0X2J1ZmZlciBp bnRlZ2VyLAkJLS0gZmlyc3QgYnVmZmVyIG9mIHBhcnRpdGlvbgogCSBsYXN0X2J1ZmZlciBp bnRlZ2VyLAkJLS0gbGFzdCBidWZmZXIgb2YgcGFydGl0aW9uCmRpZmYgLS1naXQgYS9jb250 cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMgYi9jb250cmliL3Bn X2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKaW5kZXggYjBiOTExMmZkYmEu LjYxMjA3MzU3ZTUzIDEwMDY0NAotLS0gYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1 ZmZlcmNhY2hlX3BhZ2VzLmMKKysrIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZm ZXJjYWNoZV9wYWdlcy5jCkBAIC04MTQsMTkgKzgxNCwyMSBAQCBwZ19idWZmZXJjYWNoZV9w YXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCXR1cGxlZGVzYyA9IENyZWF0ZVRlbXBs YXRlVHVwbGVEZXNjKGV4cGVjdGVkX3R1cGxlZGVzYy0+bmF0dHMpOwogCQlUdXBsZURlc2NJ bml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgMSwgInBhcnRpdGlvbiIsCiAJCQkJ CQkgICBJTlQ0T0lELCAtMSwgMCk7Ci0JCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2Ms IChBdHRyTnVtYmVyKSAyLCAibnVtX2J1ZmZlcnMiLAorCQlUdXBsZURlc2NJbml0RW50cnko dHVwbGVkZXNjLCAoQXR0ck51bWJlcikgMiwgIm51bWFfbm9kZSIsCiAJCQkJCQkgICBJTlQ0 T0lELCAtMSwgMCk7Ci0JCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVt YmVyKSAzLCAiZmlyc3RfYnVmZmVyIiwKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVz YywgKEF0dHJOdW1iZXIpIDMsICJudW1fYnVmZmVycyIsCiAJCQkJCQkgICBJTlQ0T0lELCAt MSwgMCk7Ci0JCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSA0 LCAibGFzdF9idWZmZXIiLAorCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0 ck51bWJlcikgNCwgImZpcnN0X2J1ZmZlciIsCiAJCQkJCQkgICBJTlQ0T0lELCAtMSwgMCk7 Ci0JCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSA1LCAibnVt X3Bhc3NlcyIsCisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVy KSA1LCAibGFzdF9idWZmZXIiLAorCQkJCQkJICAgSU5UNE9JRCwgLTEsIDApOworCQlUdXBs ZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgNiwgIm51bV9wYXNzZXMi LAogCQkJCQkJICAgSU5UOE9JRCwgLTEsIDApOwotCQlUdXBsZURlc2NJbml0RW50cnkodHVw bGVkZXNjLCAoQXR0ck51bWJlcikgNiwgIm5leHRfYnVmZmVyIiwKKwkJVHVwbGVEZXNjSW5p dEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDcsICJuZXh0X2J1ZmZlciIsCiAJCQkJ CQkgICBJTlQ0T0lELCAtMSwgMCk7Ci0JCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2Ms IChBdHRyTnVtYmVyKSA3LCAidG90YWxfYWxsb2NzIiwKKwkJVHVwbGVEZXNjSW5pdEVudHJ5 KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDgsICJ0b3RhbF9hbGxvY3MiLAogCQkJCQkJICAg SU5UOE9JRCwgLTEsIDApOwotCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0 ck51bWJlcikgOCwgIm51bV9hbGxvY3MiLAorCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVk ZXNjLCAoQXR0ck51bWJlcikgOSwgIm51bV9hbGxvY3MiLAogCQkJCQkJICAgSU5UOE9JRCwg LTEsIDApOwogCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikg MTAsICJ0b3RhbF9yZXFfYWxsb2NzIiwKIAkJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKQEAg LTg1MCw3ICs4NTIsOCBAQCBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9O X0FSR1MpCiAJewogCQl1aW50MzIJCWkgPSBmdW5jY3R4LT5jYWxsX2NudHI7CiAKLQkJaW50 CQkJbnVtX2J1ZmZlcnMsCisJCWludAkJCW51bWFfbm9kZSwKKwkJCQkJbnVtX2J1ZmZlcnMs CiAJCQkJCWZpcnN0X2J1ZmZlciwKIAkJCQkJbGFzdF9idWZmZXI7CiAKQEAgLTg2OSw3ICs4 NzIsNyBAQCBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ CURhdHVtCQl2YWx1ZXNbTlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTV07CiAJCWJv b2wJCW51bGxzW05VTV9CVUZGRVJDQUNIRV9QQVJUSVRJT05TX0VMRU1dOwogCi0JCUJ1ZmZl clBhcnRpdGlvbkdldChpLCAmbnVtX2J1ZmZlcnMsCisJCUJ1ZmZlclBhcnRpdGlvbkdldChp LCAmbnVtYV9ub2RlLCAmbnVtX2J1ZmZlcnMsCiAJCQkJCQkgICAmZmlyc3RfYnVmZmVyLCAm bGFzdF9idWZmZXIpOwogCiAJCUNsb2NrU3dlZXBQYXJ0aXRpb25HZXRJbmZvKGksCkBAIC04 ODcsMzYgKzg5MCwzOSBAQCBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9O X0FSR1MpCiAJCXZhbHVlc1swXSA9IEludDMyR2V0RGF0dW0oaSk7CiAJCW51bGxzWzBdID0g ZmFsc2U7CiAKLQkJdmFsdWVzWzFdID0gSW50MzJHZXREYXR1bShudW1fYnVmZmVycyk7CisJ CXZhbHVlc1sxXSA9IEludDMyR2V0RGF0dW0obnVtYV9ub2RlKTsKIAkJbnVsbHNbMV0gPSBm YWxzZTsKIAotCQl2YWx1ZXNbMl0gPSBJbnQzMkdldERhdHVtKGZpcnN0X2J1ZmZlcik7CisJ CXZhbHVlc1syXSA9IEludDMyR2V0RGF0dW0obnVtX2J1ZmZlcnMpOwogCQludWxsc1syXSA9 IGZhbHNlOwogCi0JCXZhbHVlc1szXSA9IEludDMyR2V0RGF0dW0obGFzdF9idWZmZXIpOwor CQl2YWx1ZXNbM10gPSBJbnQzMkdldERhdHVtKGZpcnN0X2J1ZmZlcik7CiAJCW51bGxzWzNd ID0gZmFsc2U7CiAKLQkJdmFsdWVzWzRdID0gSW50NjRHZXREYXR1bShjb21wbGV0ZV9wYXNz ZXMpOworCQl2YWx1ZXNbNF0gPSBJbnQzMkdldERhdHVtKGxhc3RfYnVmZmVyKTsKIAkJbnVs bHNbNF0gPSBmYWxzZTsKIAotCQl2YWx1ZXNbNV0gPSBJbnQzMkdldERhdHVtKG5leHRfdmlj dGltX2J1ZmZlcik7CisJCXZhbHVlc1s1XSA9IEludDY0R2V0RGF0dW0oY29tcGxldGVfcGFz c2VzKTsKIAkJbnVsbHNbNV0gPSBmYWxzZTsKIAotCQl2YWx1ZXNbNl0gPSBJbnQ2NEdldERh dHVtKGJ1ZmZlcl90b3RhbF9hbGxvY3MpOworCQl2YWx1ZXNbNl0gPSBJbnQzMkdldERhdHVt KG5leHRfdmljdGltX2J1ZmZlcik7CiAJCW51bGxzWzZdID0gZmFsc2U7CiAKLQkJdmFsdWVz WzddID0gSW50NjRHZXREYXR1bShidWZmZXJfYWxsb2NzKTsKKwkJdmFsdWVzWzddID0gSW50 NjRHZXREYXR1bShidWZmZXJfdG90YWxfYWxsb2NzKTsKIAkJbnVsbHNbN10gPSBmYWxzZTsK IAotCQl2YWx1ZXNbOF0gPSBJbnQ2NEdldERhdHVtKGJ1ZmZlcl90b3RhbF9yZXFfYWxsb2Nz KTsKKwkJdmFsdWVzWzhdID0gSW50NjRHZXREYXR1bShidWZmZXJfYWxsb2NzKTsKIAkJbnVs bHNbOF0gPSBmYWxzZTsKIAotCQl2YWx1ZXNbOV0gPSBJbnQ2NEdldERhdHVtKGJ1ZmZlcl9y ZXFfYWxsb2NzKTsKKwkJdmFsdWVzWzldID0gSW50NjRHZXREYXR1bShidWZmZXJfdG90YWxf cmVxX2FsbG9jcyk7CiAJCW51bGxzWzldID0gZmFsc2U7CiAKLQkJdmFsdWVzWzEwXSA9IFBv aW50ZXJHZXREYXR1bShhcnJheSk7CisJCXZhbHVlc1sxMF0gPSBJbnQ2NEdldERhdHVtKGJ1 ZmZlcl9yZXFfYWxsb2NzKTsKIAkJbnVsbHNbMTBdID0gZmFsc2U7CiAKKwkJdmFsdWVzWzEx XSA9IFBvaW50ZXJHZXREYXR1bShhcnJheSk7CisJCW51bGxzWzExXSA9IGZhbHNlOworCiAJ CS8qIEJ1aWxkIGFuZCByZXR1cm4gdGhlIHR1cGxlLiAqLwogCQl0dXBsZSA9IGhlYXBfZm9y bV90dXBsZSgoVHVwbGVEZXNjKSBmdW5jY3R4LT51c2VyX2ZjdHgsIHZhbHVlcywgbnVsbHMp OwogCQlyZXN1bHQgPSBIZWFwVHVwbGVHZXREYXR1bSh0dXBsZSk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmX2luaXQuYwppbmRleCAwMzYyZmRhMjRhYS4uZjgzMTRhMGUyOTkg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMKKysr IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYwpAQCAtMTQsNiArMTQs MTIgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpZmRlZiBVU0VfTElCTlVN QQorI2luY2x1ZGUgPG51bWEuaD4KKyNpbmNsdWRlIDxudW1haWYuaD4KKyNlbmRpZgorCisj aW5jbHVkZSAicG9ydC9wZ19udW1hLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9haW8uaCIKICNp bmNsdWRlICJzdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1 Zm1nci5oIgpAQCAtMjksMTUgKzM1LDI0IEBAIENvbmRpdGlvblZhcmlhYmxlTWluaW1hbGx5 UGFkZGVkICpCdWZmZXJJT0NWQXJyYXk7CiBXcml0ZWJhY2tDb250ZXh0IEJhY2tlbmRXcml0 ZWJhY2tDb250ZXh0OwogQ2twdFNvcnRJdGVtICpDa3B0QnVmZmVySWRzOwogCi0vKiAqCi0g KiBudW1iZXIgb2YgYnVmZmVyIHBhcnRpdGlvbnMgKi8KLSNkZWZpbmUgTlVNX0NMT0NLX1NX RUVQX1BBUlRJVElPTlMJNAorLyoKKyAqIE1pbmltdW0gbnVtYmVyIG9mIGJ1ZmZlciBwYXJ0 aXRpb25zLCBubyBtYXR0ZXIgdGhlIG51bWJlciBvZiBOVU1BIG5vZGVzLgorICovCisjZGVm aW5lIE1JTl9CVUZGRVJfUEFSVElUSU9OUwk0CiAKIC8qIEFycmF5IG9mIHN0cnVjdHMgd2l0 aCBpbmZvcm1hdGlvbiBhYm91dCBidWZmZXIgcmFuZ2VzICovCiBCdWZmZXJQYXJ0aXRpb25z ICpCdWZmZXJQYXJ0aXRpb25zQXJyYXkgPSBOVUxMOwogCitzdGF0aWMgdm9pZCBidWZmZXJf cGFydGl0aW9uc19wcmVwYXJlKHZvaWQpOwogc3RhdGljIHZvaWQgYnVmZmVyX3BhcnRpdGlv bnNfaW5pdCh2b2lkKTsKIAorLyogbnVtYmVyIG9mIE5VTUEgbm9kZXMgKGFzIHJldHVybmVk IGJ5IG51bWFfbnVtX2NvbmZpZ3VyZWRfbm9kZXMpICovCitzdGF0aWMgaW50CW51bWFfbm9k ZXMgPSAtMTsJLyogbnVtYmVyIG9mIG5vZGVzIHdoZW4gc2l6aW5nICovCitzdGF0aWMgU2l6 ZSBudW1hX3BhZ2Vfc2l6ZSA9IDA7IC8qIHBhZ2UgdXNlZCB0byBzaXplIHBhcnRpdGlvbnMg Ki8KK3N0YXRpYyBib29sIG51bWFfY2FuX3BhcnRpdGlvbiA9IGZhbHNlOyAvKiBjYW4gbWFw IHRvIE5VTUEgbm9kZXM/ICovCitzdGF0aWMgaW50CW51bWFfYnVmZmVyc19wZXJfbm9kZSA9 IC0xOyAvKiBidWZmZXJzIHBlciBub2RlICovCitzdGF0aWMgaW50CW51bWFfcGFydGl0aW9u cyA9IDA7CS8qIHRvdGFsIChtdWx0aXBsZSBvZiBub2RlcykgKi8KKwogLyoKICAqIERhdGEg U3RydWN0dXJlczoKICAqCQlidWZmZXJzIGxpdmUgaW4gYSBmcmVlbGlzdCBhbmQgYSBsb29r dXAgZGF0YSBzdHJ1Y3R1cmUuCkBAIC04NSwyNSArMTAwLDg1IEBAIEJ1ZmZlck1hbmFnZXJT aG1lbUluaXQodm9pZCkKIAkJCQlmb3VuZElPQ1YsCiAJCQkJZm91bmRCdWZDa3B0LAogCQkJ CWZvdW5kUGFydHM7CisJU2l6ZQkJYnVmZmVyX2FsaWduOworCisJLyoKKwkgKiBEZXRlcm1p bmUgdGhlIG1lbW9yeSBwYWdlIHNpemUgdXNlZCB0byBwYXJ0aXRpb24gc2hhcmVkIGJ1ZmZl cnMgb3ZlcgorCSAqIHRoZSBhdmFpbGFibGUgTlVNQSBub2Rlcy4KKwkgKgorCSAqIFhYWCBX ZSBoYXZlIHRvIGNhbGwgcHJlcGFyZSBhZ2FpbiwgYmVjYXVzZSB3aXRoIEVYRUNfQkFDS0VO RCB3ZSBtYXkgbm90CisJICogc2VlIHRoZSB2YWx1ZXMgYWxyZWFkeSBjYWxjdWxhdGVkIGlu IEJ1ZmZlck1hbmFnZXJTaG1lbVNpemUoKS4KKwkgKgorCSAqIFhYWCBXZSBuZWVkIHRvIGJl IGNhcmVmdWwgdG8gZ2V0IHRoZSBzYW1lIHZhbHVlIHdoZW4gY2FsY3VsYXRpbmcgdGhlCisJ ICogYW5kIHRoZW4gbGF0ZXIgd2hlbiBpbml0aWFsaXppbmcgdGhlIHN0cnVjdHMgYWZ0ZXIg YWxsb2NhdGlvbiwgb3IgdG8gbm90CisJICogZGVwZW5kIG9uIHRoYXQgdmFsdWUgdG9vIG11 Y2guIEJlZm9yZSB0aGUgYWxsb2NhdGlvbiB3ZSBkb24ndCBrbm93IGlmIHdlCisJICogZ2V0 IGh1Z2UgcGFnZXMsIHNvIHdlIGp1c3QgaGF2ZSB0byBhc3N1bWUgd2UgZG8uCisJICovCisJ YnVmZmVyX3BhcnRpdGlvbnNfcHJlcGFyZSgpOworCisJLyoKKwkgKiBXaXRoIE5VTUEgd2Ug bmVlZCB0byBlbnN1cmUgdGhlIGJ1ZmZlcnMgYXJlIHByb3Blcmx5IGFsaWduZWQgbm90IGp1 c3QKKwkgKiB0byBQR19JT19BTElHTl9TSVpFLCBidXQgYWxzbyB0byBtZW1vcnkgcGFnZSBz aXplLiBOVU1BIHdvcmtzIG9uIHBhZ2UKKwkgKiBncmFudWxhcml0eSwgYW5kIHdlIGRvbid0 IHdhbnQgYSBidWZmZXIgdG8gZ2V0IHNwbGl0IHRvIG11bHRpcGxlIG5vZGVzCisJICogKHdo ZW4gc3Bhbm5pbmcgbXVsdGlwbGUgbWVtb3J5IHBhZ2VzKS4KKwkgKgorCSAqIFdlIGFsc28g ZG9uJ3Qgd2FudCB0byBpbnRlcmZlcmUgd2l0aCBvdGhlciBwYXJ0cyBvZiBzaGFyZWQgbWVt b3J5LAorCSAqIHdoaWNoIGNvdWxkIGVhc2lseSBoYXBwZW4gd2l0aCBodWdlIHBhZ2VzIChl LmcuIHdpdGggZGF0YSBzdG9yZWQgYmVmb3JlCisJICogYnVmZmVycykuCisJICoKKwkgKiBX ZSBkbyB0aGlzIGJ5IGFsaWduaW5nIHRvIHRoZSBsYXJnZXIgb2YgdGhlIHR3byB2YWx1ZXMg KHdlIGtub3cgYm90aAorCSAqIGFyZSBwb3dlci1vZi10d28gdmFsdWVzLCBzbyB0aGUgbGFy Z2VyIHZhbHVlIGlzIGF1dG9tYXRpY2FsbHkgYQorCSAqIG11bHRpcGxlIG9mIHRoZSBsZXNz ZXIgb25lKS4KKwkgKgorCSAqIFhYWCBNYXliZSB0aGVyZSdzIGEgd2F5IHRvIHVzZSBsZXNz IGFsaWdubWVudD8KKwkgKgorCSAqIFhYWCBNYXliZSB3aXRoIChudW1hX3BhZ2Vfc2l6ZSA+ IFBHX0lPX0FMSUdOX1NJWkUpLCB3ZSBkb24ndCBuZWVkIHRvCisJICogYWxpZ24gdG8gbnVt YV9wYWdlX3NpemU/IEVzcGVjaWFsbHkgZm9yIHZlcnkgbGFyZ2UgaHVnZSBwYWdlcyAoZS5n LiAxR0IpCisJICogdGhhdCBkb2Vzbid0IHNlZW0gcXVpdGUgd29ydGggaXQuIE1heWJlIHdl IHNob3VsZCBzaW1wbHkgYWxpZ24gdG8KKwkgKiBCTENLU1osIHNvIHRoYXQgYnVmZmVycyBk b24ndCBnZXQgc3BsaXQ/IFN0aWxsLCB3ZSBtaWdodCBpbnRlcmZlcmUgd2l0aAorCSAqIG90 aGVyIHN0dWZmIHN0b3JlZCBpbiBzaGFyZWQgbWVtb3J5IHRoYXQgd2Ugd2FudCB0byBhbGxv Y2F0ZSBvbiBhCisJICogcGFydGljdWxhciBOVU1BIG5vZGUgKGUuZy4gUHJvY0FycmF5KS4K KwkgKgorCSAqIFhYWCBNYXliZSB3aXRoICJ0b28gbGFyZ2UiIGh1Z2UgcGFnZXMgd2Ugc2hv dWxkIGp1c3Qgbm90IGRvIHRoaXMsIG9yCisJICogbWF5YmUgZG8gdGhpcyBvbmx5IGZvciBz dWZmaWNpZW50bHkgbGFyZ2UgYXJlYXMgKGUuZy4gc2hhcmVkIGJ1ZmZlcnMsCisJICogYnV0 IG5vdCBQcm9jQXJyYXkpLgorCSAqLworCWJ1ZmZlcl9hbGlnbiA9IE1heChudW1hX3BhZ2Vf c2l6ZSwgUEdfSU9fQUxJR05fU0laRSk7CisKKwkvKiBvbmUgcGFnZSBpcyBhIG11bHRpcGxl IG9mIHRoZSBvdGhlciAqLworCUFzc2VydCgoKG51bWFfcGFnZV9zaXplICUgUEdfSU9fQUxJ R05fU0laRSkgPT0gMCkgfHwKKwkJICAgKChQR19JT19BTElHTl9TSVpFICUgbnVtYV9wYWdl X3NpemUpID09IDApKTsKIAogCS8qIGFsbG9jYXRlIHRoZSBwYXJ0aXRpb24gcmVnaXN0cnkg Zmlyc3QgKi8KIAlCdWZmZXJQYXJ0aXRpb25zQXJyYXkgPSAoQnVmZmVyUGFydGl0aW9ucyAq KQogCQlTaG1lbUluaXRTdHJ1Y3QoIkJ1ZmZlciBQYXJ0aXRpb25zIiwKIAkJCQkJCW9mZnNl dG9mKEJ1ZmZlclBhcnRpdGlvbnMsIHBhcnRpdGlvbnMpICsKLQkJCQkJCW11bF9zaXplKHNp emVvZihCdWZmZXJQYXJ0aXRpb24pLCBOVU1fQ0xPQ0tfU1dFRVBfUEFSVElUSU9OUyksCisJ CQkJCQltdWxfc2l6ZShzaXplb2YoQnVmZmVyUGFydGl0aW9uKSwgbnVtYV9wYXJ0aXRpb25z KSwKIAkJCQkJCSZmb3VuZFBhcnRzKTsKIAotCS8qIEFsaWduIGRlc2NyaXB0b3JzIHRvIGEg Y2FjaGVsaW5lIGJvdW5kYXJ5LiAqLworCS8qCisJICogQWxpZ24gZGVzY3JpcHRvcnMgdG8g YSBjYWNoZWxpbmUgYm91bmRhcnksIGFuZCBtZW1vcnkgcGFnZS4KKwkgKgorCSAqIFdlIHdh bnQgdG8gZGlzdHJpYnV0ZSBib3RoIHRvIE5VTUEgbm9kZXMsIHNvIHRoYXQgZWFjaCBidWZm ZXIgYW5kIGl0J3MKKwkgKiBkZXNjcmlwdG9yIGFyZSBvbiB0aGUgc2FtZSBOVU1BIG5vZGUu IFNvIHdlIGFsaWduIGJvdGggdGhlIHNhbWUgd2F5LgorCSAqCisJICogWFhYIFRoZSBtZW1v cnkgcGFnZSBpcyBhbHdheXMgbGFyZ2VyIHRoYW4gY2FjaGVsaW5lLCBzbyB0aGUgY2FjaGVs aW5lCisJICogcmVmZXJlbmNlIGlzIGEgYml0IHVubmVjZXNzYXJ5LgorCSAqCisJICogWFhY IEluIHByaW5jaXBsZSB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyB3aXRoIE5VTUEsIG90aGVy d2lzZSB3ZSBjb3VsZAorCSAqIHN0aWxsIGFsaWduIGp1c3QgdG8gY2FjaGVsaW5lLCBhcyBi ZWZvcmUuCisJICovCiAJQnVmZmVyRGVzY3JpcHRvcnMgPSAoQnVmZmVyRGVzY1BhZGRlZCAq KQotCQlTaG1lbUluaXRTdHJ1Y3QoIkJ1ZmZlciBEZXNjcmlwdG9ycyIsCi0JCQkJCQlOQnVm ZmVycyAqIHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSwKLQkJCQkJCSZmb3VuZERlc2NzKTsK KwkJVFlQRUFMSUdOKGJ1ZmZlcl9hbGlnbiwKKwkJCQkgIFNobWVtSW5pdFN0cnVjdCgiQnVm ZmVyIERlc2NyaXB0b3JzIiwKKwkJCQkJCQkJICBOQnVmZmVycyAqIHNpemVvZihCdWZmZXJE ZXNjUGFkZGVkKSArIGJ1ZmZlcl9hbGlnbiwKKwkJCQkJCQkJICAmZm91bmREZXNjcykpOwog CiAJLyogQWxpZ24gYnVmZmVyIHBvb2wgb24gSU8gcGFnZSBzaXplIGJvdW5kYXJ5LiAqLwog CUJ1ZmZlckJsb2NrcyA9IChjaGFyICopCi0JCVRZUEVBTElHTihQR19JT19BTElHTl9TSVpF LAorCQlUWVBFQUxJR04oYnVmZmVyX2FsaWduLAogCQkJCSAgU2htZW1Jbml0U3RydWN0KCJC dWZmZXIgQmxvY2tzIiwKLQkJCQkJCQkJICBOQnVmZmVycyAqIChTaXplKSBCTENLU1ogKyBQ R19JT19BTElHTl9TSVpFLAorCQkJCQkJCQkgIE5CdWZmZXJzICogKFNpemUpIEJMQ0tTWiAr IGJ1ZmZlcl9hbGlnbiwKIAkJCQkJCQkJICAmZm91bmRCdWZzKSk7CiAKIAkvKiBBbGlnbiBj b25kaXRpb24gdmFyaWFibGVzIHRvIGNhY2hlbGluZSBib3VuZGFyeS4gKi8KQEAgLTEzMyw3 ICsyMDgsMTAgQEAgQnVmZmVyTWFuYWdlclNobWVtSW5pdCh2b2lkKQogCXsKIAkJaW50CQkJ aTsKIAotCQkvKiBJbml0aWFsaXplIGJ1ZmZlciBwYXJ0aXRpb25zIChjYWxjdWxhdGUgYnVm ZmVyIHJhbmdlcykuICovCisJCS8qCisJCSAqIEluaXRpYWxpemUgYnVmZmVyIHBhcnRpdGlv bnMsIGluY2x1ZGluZyBtb3ZpbmcgbWVtb3J5IHRvIGRpZmZlcmVudAorCQkgKiBOVU1BIG5v ZGVzIChpZiBlbmFibGVkIGJ5IEdVQykuCisJCSAqLwogCQlidWZmZXJfcGFydGl0aW9uc19p bml0KCk7CiAKIAkJLyoKQEAgLTE3MiwxOSArMjUwLDI2IEBAIEJ1ZmZlck1hbmFnZXJTaG1l bUluaXQodm9pZCkKICAqCiAgKiBjb21wdXRlIHRoZSBzaXplIG9mIHNoYXJlZCBtZW1vcnkg Zm9yIHRoZSBidWZmZXIgcG9vbCBpbmNsdWRpbmcKICAqIGRhdGEgcGFnZXMsIGJ1ZmZlciBk ZXNjcmlwdG9ycywgaGFzaCB0YWJsZXMsIGV0Yy4KKyAqCisgKiBYWFggQ2FsbGVkIGJlZm9y ZSBhbGxvY2F0aW9uLCBzbyB3ZSBkb24ndCBrbm93IGlmIGh1Z2UgcGFnZXMgZ2V0IHVzZWQg eWV0LgorICogU28gd2UgbmVlZCB0byBhc3N1bWUgaHVnZSBwYWdlcyBnZXQgdXNlZCwgYW5k IHVzZSBnZXRfbWVtb3J5X3BhZ2Vfc2l6ZSgpCisgKiB0byBjYWxjdWxhdGUgdGhlIGxhcmdl c3QgcG9zc2libGUgbWVtb3J5IHBhZ2UuCiAgKi8KIFNpemUKIEJ1ZmZlck1hbmFnZXJTaG1l bVNpemUodm9pZCkKIHsKIAlTaXplCQlzaXplID0gMDsKIAorCS8qIGNhbGN1bGF0ZSBwYXJ0 aXRpb24gaW5mbyBmb3IgYnVmZmVycyAqLworCWJ1ZmZlcl9wYXJ0aXRpb25zX3ByZXBhcmUo KTsKKwogCS8qIHNpemUgb2YgYnVmZmVyIGRlc2NyaXB0b3JzICovCiAJc2l6ZSA9IGFkZF9z aXplKHNpemUsIG11bF9zaXplKE5CdWZmZXJzLCBzaXplb2YoQnVmZmVyRGVzY1BhZGRlZCkp KTsKIAkvKiB0byBhbGxvdyBhbGlnbmluZyBidWZmZXIgZGVzY3JpcHRvcnMgKi8KLQlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgUEdfQ0FDSEVfTElORV9TSVpFKTsKKwlzaXplID0gYWRkX3Np emUoc2l6ZSwgTWF4KG51bWFfcGFnZV9zaXplLCBQR19JT19BTElHTl9TSVpFKSk7CiAKIAkv KiBzaXplIG9mIGRhdGEgcGFnZXMsIHBsdXMgYWxpZ25tZW50IHBhZGRpbmcgKi8KLQlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgUEdfSU9fQUxJR05fU0laRSk7CisJc2l6ZSA9IGFkZF9zaXpl KHNpemUsIE1heChudW1hX3BhZ2Vfc2l6ZSwgUEdfSU9fQUxJR05fU0laRSkpOwogCXNpemUg PSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShOQnVmZmVycywgQkxDS1NaKSk7CiAKIAkvKiBz aXplIG9mIHN0dWZmIGNvbnRyb2xsZWQgYnkgZnJlZWxpc3QuYyAqLwpAQCAtMjAxLDExICsy ODYsMjQ0IEBAIEJ1ZmZlck1hbmFnZXJTaG1lbVNpemUodm9pZCkKIAogCS8qIGFjY291bnQg Zm9yIHJlZ2lzdHJ5IG9mIE5VTUEgcGFydGl0aW9ucyAqLwogCXNpemUgPSBhZGRfc2l6ZShz aXplLCBNQVhBTElHTihvZmZzZXRvZihCdWZmZXJQYXJ0aXRpb25zLCBwYXJ0aXRpb25zKSAr Ci0JCQkJCQkJCSAgIG11bF9zaXplKHNpemVvZihCdWZmZXJQYXJ0aXRpb24pLCBOVU1fQ0xP Q0tfU1dFRVBfUEFSVElUSU9OUykpKTsKKwkJCQkJCQkJICAgbXVsX3NpemUoc2l6ZW9mKEJ1 ZmZlclBhcnRpdGlvbiksIG51bWFfcGFydGl0aW9ucykpKTsKIAogCXJldHVybiBzaXplOwog fQogCisvKgorICogQ2FsY3VsYXRlIHRoZSBOVU1BIG5vZGUgZm9yIGEgZ2l2ZW4gYnVmZmVy LgorICovCitpbnQKK0J1ZmZlckdldE5vZGUoQnVmZmVyIGJ1ZmZlcikKK3sKKwkvKiBub3Qg TlVNQSBwYXJ0aXRpb25pbmcgKi8KKwlpZiAobnVtYV9idWZmZXJzX3Blcl9ub2RlID09IC0x KQorCQlyZXR1cm4gMDsKKworCS8qIG5vIE5VTUEtYXdhcmUgcGFydGl0aW9uaW5nICovCisJ aWYgKChudW1hX2ZsYWdzICYgTlVNQV9CVUZGRVJTKSA9PSAwKQorCQlyZXR1cm4gMDsKKwor CXJldHVybiAoYnVmZmVyIC8gbnVtYV9idWZmZXJzX3Blcl9ub2RlKTsKK30KKworLyoKKyAq IGJ1ZmZlcl9wYXJ0aXRpb25zX3ByZXBhcmUKKyAqCQlDYWxjdWxhdGUgcGFyYW1ldGVycyBm b3IgcGFydGl0aW9uaW5nIGJ1ZmZlcnMuCisgKgorICogV2Ugd2FudCB0byBzcGxpdCB0aGUg c2hhcmVkIGJ1ZmZlcnMgaW50byBtdWx0aXBsZSBwYXJ0aXRpb25zLCBvZiByb3VnaGx5Cisg KiB0aGUgc2FtZSBzaXplLiBUaGlzIGlzIG1lYW50IHRvIHNlcnZlIG11bHRpcGxlIHB1cnBv c2VzLiBXZSB3YW50IHRvIG1hcAorICogdGhlIHBhcnRpdGlvbnMgdG8gZGlmZmVyZW50IE5V TUEgbm9kZXMsIHRvIGJhbGFuY2UgbWVtb3J5IHVzYWdlLCBhbmQKKyAqIGFsbG93IHBhcnRp dGlvbmluZyBzb21lIGRhdGEgc3RydWN0dXJlcyBidWlsdCBvbiB0b3Agb2YgYnVmZmVycywg dG8gZ2l2ZQorICogcHJlZmVyZW5jZSB0byBsb2NhbCBhY2Nlc3MgKGJ1ZmZlcnMgb24gdGhl IHNhbWUgTlVNQSBub2RlKS4gVGhpcyBhcHBsaWVzCisgKiBtb3N0bHkgdG8gZnJlZWxpc3Rz IGFuZCBjbG9ja3N3ZWVwLgorICoKKyAqIFdlIG1heSB3YW50IHRvIHVzZSBwYXJ0aXRpb25p bmcgZXZlbiBvbiBub24tTlVNQSBzeXN0ZW1zLCBvciB3aGVuIHJ1bm5pbmcKKyAqIG9uIGEg c2luZ2xlIE5VTUEgbm9kZS4gUGFydGl0aW9uaW5nIHRoZSBmcmVlbGlzdC9jbG9ja3N3ZWVw IGlzIGJlbmVmaWNpYWwKKyAqIGV2ZW4gd2l0aG91dCB0aGUgTlVNQSBlZmZlY3RzLgorICoK KyAqIFNvIHdlIHRyeSB0byBhbHdheXMgYnVpbGQgYXQgbGVhc3QgNCBwYXJ0aXRpb25zIChN SU5fQlVGRkVSX1BBUlRJVElPTlMpCisgKiBpbiB0b3RhbCwgb3IgYXQgbGVhc3Qgb25lIHBh cnRpdGlvbiBwZXIgTlVNQSBub2RlLiBXZSBhbHdheXMgY3JlYXRlIHRoZQorICogc2FtZSBu dW1iZXIgb2YgcGFydGl0aW9ucyBwZXIgTlVNQSBub2RlLgorICoKKyAqIFNvbWUgZXhhbXBs ZXM6CisgKgorICogLSBub24tTlVNQSBzeXN0ZW0gKG9yIDEgTlVNQSBub2RlKTogNCBwYXJ0 aXRpb25zIGZvciB0aGUgc2luZ2xlIG5vZGUKKyAqCisgKiAtIDIgTlVNQSBub2RlczogNCBw YXJ0aXRpb25zLCAyIGZvciBlYWNoIG5vZGUKKyAqCisgKiAtIDMgTlVNQSBub2RlczogNiBw YXJ0aXRpb25zLCAyIGZvciBlYWNoIG5vZGUKKyAqCisgKiAtIDQrIE5VTUEgbm9kZXM6IG9u ZSBwYXJ0aXRpb24gcGVyIG5vZGUKKyAqCisgKiBOVU1BIHdvcmtzIG9uIHRoZSBtZW1vcnkt cGFnZSBncmFudWxhcml0eSwgd2hpY2ggZGV0ZXJtaW5lcyB0aGUgc21hbGxlc3QKKyAqIGFt b3VudCBvZiBtZW1vcnkgd2UgY2FuIGFsbG9jYXRlIHRvIHNpbmdsZSBub2RlLiBUaGlzIGlz IGRldGVybWluZWQgYnkKKyAqIGhvdyBtYW55IEJ1ZmZlckRlc2NyaXB0b3JzIGZpdCBvbnRv IGEgc2luZ2xlIG1lbW9yeSBwYWdlLCBzbyB0aGlzIGRlcGVuZHMKKyAqIG9uIGh1Z2UgcGFn ZSBzdXBwb3J0LiBXaXRoIDJNQiBodWdlIHBhZ2VzICh0eXBpY2FsIG9uIHg4NiBMaW51eCks IHRoaXMgaXMKKyAqIDMyNzY4IGJ1ZmZlcnMgKDI1Nk1CKS4gV2l0aCByZWd1bGFyIDRrQiBw YWdlcywgaXQncyA2NCBidWZmZXJzICg1MTJLQikuCisgKgorICogTm90ZTogVGhpcyBpcyBk ZXRlcm1pbmVkIGJlZm9yZSB0aGUgYWxsb2NhdGlvbiwgaS5lLiB3ZSBkb24ndCBrbm93IGlm IHRoZQorICogYWxsb2NhdGlvbiBnb3QgdG8gdXNlIGh1Z2UgcGFnZXMuIFNvIHVubGVzcyBo dWdlX3BhZ2VzPW9mZiB3ZSBhc3N1bWUgd2UncmUKKyAqIHVzaW5nIGh1Z2UgcGFnZXMuCisg KgorICogVGhpcyBtaW5pbWFsIHNpemUgcmVxdWlyZW1lbnQgb25seSBtYXR0ZXJzIGZvciB0 aGUgcGVyLW5vZGUgYW1vdW50IG9mCisgKiBtZW1vcnksIG5vdCBmb3IgdGhlIGluZGl2aWR1 YWwgcGFydGl0aW9ucy4gVGhlIHBhcnRpdGlvbnMgZm9yIHRoZSBzYW1lCisgKiBub2RlIGFy ZSBhIGNvbnRpZ3VvdXMgY2h1bmsgb2YgbWVtb3J5LCB3aGljaCBjYW4gYmUgc3BsaXQgYXJi aXRyYXJpbHksCisgKiBpdCdzIGluZGVwZW5kZW50IG9mIHRoZSBOVU1BIGdyYW51bGFyaXR5 LgorICoKKyAqIFhYWCBUaGlzIHBhdGNoIG9ubHkgaW1wbGVtZW50cyBwbGFjaW5nIHRoZSBi dWZmZXJzIG9udG8gZGlmZmVyZW50IE5VTUEKKyAqIG5vZGVzLiBUaGUgZnJlZWxpc3QvY2xv Y2tzd2VlcCBwYXJ0aXRpb25pbmcgaXMgaW1wbGVtZW50ZWQgaW4gc2VwYXJhdGUKKyAqIHBh dGNoZXMgbGF0ZXIgaW4gdGhlIHBhdGNoIHNlcmllcy4gVGhvc2UgcGF0Y2hlcyBob3dldmVy IHVzZSB0aGUgc2FtZQorICogYnVmZmVyIHBhcnRpdGlvbiByZWdpc3RyeSwgdG8gYWxpZ24g dGhlIHBhcnRpdGlvbnMuCisgKgorICoKKyAqIFhYWCBUaGlzIG5lZWRzIHRvIGNvbnNpZGVy IHRoZSBtaW5pbXVtIGNodW5rIHNpemUsIGkuZS4gd2UgY2FuJ3Qgc3BsaXQKKyAqIGJ1ZmZl cnMgYmV5b25kIHNvbWUgcG9pbnQsIGF0IHNvbWUgcG9pbnQgaXQgZ2V0cyB3ZSBydW4gaW50 byB0aGUgc2l6ZSBvZgorICogYnVmZmVyIGRlc2NyaXB0b3JzLiBOb3Qgc3VyZSBpZiB3ZSBz aG91bGQgZ2l2ZSBwcmVmZXJlbmNlIHRvIG9uZSBvZiB0aGVzZQorICogKHByb2JhYmx5IGF0 IGxlYXN0IHByaW50IGEgd2FybmluZykuCisgKgorICogWFhYIFdlIHdhbnQgdG8gZG8gdGhp cyBldmVuIHdpdGggbnVtYV9idWZmZXJzX2ludGVybGVhdmU9ZmFsc2UsIHNvIHRoYXQgdGhl CisgKiBvdGhlciBwYXRjaGVzIGNhbiBkbyB0aGVpciBwYXJ0aXRpb25pbmcuIEJ1dCBpbiB0 aGF0IGNhc2Ugd2UgZG9uJ3QgbmVlZCB0bworICogZW5mb3JjZSB0aGUgbWluIGNodW5rIHNp emUgKHByb2JhYmx5KT8KKyAqCisgKiBYWFggV2UgbmVlZCB0byBvbmx5IGNhbGwgdGhpcyBv bmNlLCB3aGVuIHNpemluZyB0aGUgbWVtb3J5LiBCdXQgYXQgdGhhdAorICogcG9pbnQgd2Ug ZG9uJ3Qga25vdyBpZiB3ZSBnZXQgdG8gdXNlIGh1Z2UgcGFnZXMgb3Igbm90ICh1bmxlc3Mg d2hlbiBodWdlCisgKiBwYWdlcyBhcmUgZGlzYWJsZWQpLiBXZSdsbCBwcm9jZWVkIGFzIGlm IHRoZSBodWdlIHBhZ2VzIHdlcmUgdXNlZCwgYW5kIHdlCisgKiBtYXkgaGF2ZSB0byB1c2Ug bGFyZ2VyIHBhcnRpdGlvbnMuIE1heWJlIHRoZXJlJ3Mgc29tZSBzb3J0IG9mIGZhbGxiYWNr LAorICogYnV0IGZvciBub3cgd2Ugc2ltcGx5IGRpc2FibGUgdGhlIE5VTUEgcGFydGl0aW9u aW5nIC0gaXQgc2ltcGx5IG1lYW5zIHRoZQorICogc2hhcmVkIGJ1ZmZlcnMgYXJlIHRvbyBz bWFsbC4KKyAqCisgKiBYWFggV2UgZG9uJ3QgbmVlZCB0byBtYWtlIGVhY2ggcGFydGl0aW9u IGEgbXVsdGlwbGUgb2YgbWluX3BhcnRpdGlvbl9zaXplLgorICogVGhhdCdzIHNvbWV0aGlu ZyB3ZSBuZWVkIHRvIGRvIGZvciBhIG5vZGUgKGJlY2F1c2UgTlVNQSB3b3JrcyBhdCBncmFu dWxhcml0eQorICogb2YgcGFnZXMpLCBidXQgcGFydGl0aW9ucyBmb3IgYSBzaW5nbGUgbm9k ZSBjYW4gc3BsaXQgdGhhdCBhcmJpdHJhcmlseS4KKyAqIEFsdGhvdWdoIGtlZXBpbmcgdGhl IHNpemVzIHBvd2VyLW9mLXR3byB3b3VsZCBhbGxvdyBjYWxjdWxhdGluZyBldmVyeXRoaW5n CisgKiBhcyBzaGlmdC9tYXNrLCB3aXRob3V0IGV4cGVuc2l2ZSBkaXZpc2lvbi9tb2R1bG8g b3BlcmF0aW9ucy4KKyAqLworc3RhdGljIHZvaWQKK2J1ZmZlcl9wYXJ0aXRpb25zX3ByZXBh cmUodm9pZCkKK3sKKwkvKgorCSAqIE1pbmltdW0gbnVtYmVyIG9mIGJ1ZmZlcnMgd2UgY2Fu IGFsbG9jYXRlIHRvIGEgTlVNQSBub2RlIChkZXRlcm1pbmVkIGJ5CisJICogaG93IG1hbnkg QnVmZmVyRGVzY3JpcHRvcnMgZml0IG9udG8gYSBtZW1vcnkgcGFnZSkuCisJICovCisJaW50 CQkJbWluX25vZGVfYnVmZmVyczsKKworCS8qCisJICogTWF4aW11bSBudW1iZXIgb2Ygbm9k ZXMgd2UgY2FuIHNwbGl0IHNoYXJlZCBidWZmZXJzIHRvLCBhc3N1bWluZyBlYWNoCisJICog bm9kZSBnZXRzIHRoZSBzbWFsbGVzdCBhbGxvY2F0YWJsZSBjaHVuayAodGhlIGxhc3Qgbm9k ZSBjYW4gZ2V0IGEKKwkgKiBzbWFsbGVyIGFtb3VudCBvZiBtZW1vcnksIG5vdCB0aGUgZnVs bCBjaHVuaykuCisJICovCisJaW50CQkJbWF4X25vZGVzOworCisJLyoKKwkgKiBIb3cgbWFu eSBwYXJ0aXRpb25zIHRvIGNyZWF0ZSBwZXIgbm9kZS4gQ291bGQgYmUgbW9yZSB0aGFuIDEg Zm9yIHNtYWxsCisJICogbnVtYmVyIG9mIG5vZGVzIChvZiBub24tTlVNQSBzeXN0ZW1zKS4K KwkgKi8KKwlpbnQJCQludW1fcGFydGl0aW9uc19wZXJfbm9kZTsKKworCS8qIGJhaWwgb3V0 IGlmIGFscmVhZHkgaW5pdGlhbGl6ZWQgKGNhbGN1bGF0ZSBvbmx5IG9uY2UpICovCisJaWYg KG51bWFfbm9kZXMgIT0gLTEpCisJCXJldHVybjsKKworCS8qIFhYWCBvbmx5IGdpdmVzIHVz IHRoZSBudW1iZXIsIHRoZSBub2RlcyBtYXkgbm90IGJlIDAsIDEsIDIsIC4uLiAqLworI2lm IFVTRV9MSUJOVU1BCisJbnVtYV9ub2RlcyA9IG51bWFfbnVtX2NvbmZpZ3VyZWRfbm9kZXMo KTsKKyNlbHNlCisJLyogd2l0aG91dCBOVU1BLCBhc3N1bWUgdGhlcmUncyBqdXN0IG9uZSBu b2RlICovCisJbnVtYV9ub2RlcyA9IDE7CisjZW5kaWYKKworCS8qIHdlIHNob3VsZCBuZXZl ciBnZXQgaGVyZSB3aXRob3V0IGF0IGxlYXN0IG9uZSBOVU1BIG5vZGUgKi8KKwlBc3NlcnQo bnVtYV9ub2RlcyA+IDApOworCisJLyoKKwkgKiBYWFggQSBiaXQgd2VpcmQuIERvIHdlIG5l ZWQgdG8gd29ycnkgYWJvdXQgcG9zdG1hc3Rlcj8gQ291bGQgdGhpcyBldmVuCisJICogcnVu IG91dHNpZGUgcG9zdG1hc3Rlcj8gSSBkb24ndCB0aGluayBzby4KKwkgKgorCSAqIFhYWCBB bm90aGVyIGlzc3VlIGlzIHdlIG1heSBnZXQgZGlmZmVyZW50IHZhbHVlcyB0aGFuIHdoZW4g c2l6aW5nIHRoZQorCSAqIHRoZSBtZW1vcnksIGJlY2F1c2UgYXQgdGhhdCBwb2ludCB3ZSBk aWRuJ3Qga25vdyBpZiB3ZSBnZXQgaHVnZSBwYWdlcywKKwkgKiBzbyB3ZSBhc3N1bWVkIHdl IHdpbGwuIFNob3VsZG4ndCBjYXVzZSBjcmFzaGVzLCBidXQgd2UgbWlnaHQgYWxsb2NhdGUK KwkgKiBzaGFyZWQgbWVtb3J5IGFuZCB0aGVuIG5vdCB1c2Ugc29tZSBvZiBpdCAoYmVjYXVz ZSBvZiB0aGUgYWxpZ25tZW50CisJICogdGhhdCB3ZSBkb24ndCBhY3R1YWxseSBuZWVkKS4g Tm90IHN1cmUgYWJvdXQgYmV0dGVyIHdheSwgZ29vZCBmb3Igbm93LgorCSAqLworCW51bWFf cGFnZV9zaXplID0gcGdfbnVtYV9wYWdlX3NpemUoKTsKKworCS8qIG1ha2Ugc3VyZSB0aGUg Y2h1bmtzIHdpbGwgYWxpZ24gbmljZWx5ICovCisJQXNzZXJ0KEJMQ0tTWiAlIHNpemVvZihC dWZmZXJEZXNjUGFkZGVkKSA9PSAwKTsKKwlBc3NlcnQobnVtYV9wYWdlX3NpemUgJSBzaXpl b2YoQnVmZmVyRGVzY1BhZGRlZCkgPT0gMCk7CisJQXNzZXJ0KCgoQkxDS1NaICUgbnVtYV9w YWdlX3NpemUpID09IDApIHx8ICgobnVtYV9wYWdlX3NpemUgJSBCTENLU1opID09IDApKTsK KworCS8qCisJICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIGJ1ZmZlcnMgd2UgY2FuIGFsbG9j YXRlIGZyb20gYSBzaW5nbGUgbm9kZSwgdXNpbmcKKwkgKiB0aGUgbWVtb3J5IHBhZ2Ugc2l6 ZSAoZGV0ZXJtaW5lZCBieSBidWZmZXIgZGVzY3JpcHRvcnMpLiBOVU1BIGFsbG9jYXRlcwor CSAqIG1lbW9yeSBpbiBwYWdlcywgYW5kIHdlIG5lZWQgdG8gZG8gdGhhdCBmb3IgYm90aCBi dWZmZXJzIGFuZAorCSAqIGRlc2NyaXB0b3JzIGF0IHRoZSBzYW1lIHRpbWUuCisJICoKKwkg KiBJbiBwcmFjdGljZSB0aGUgQkxDS1NaIGRvZXNuJ3QgcmVhbGx5IG1hdHRlciwgYmVjYXVz ZSBpdCdzIG11Y2ggbGFyZ2VyCisJICogdGhhbiBCdWZmZXJEZXNjUGFkZGVkLCBzbyB0aGUg cmVzdWx0IGlzIGRldGVybWluZWQgYnVmZmVyIGRlc2NyaXB0b3JzLgorCSAqLworCW1pbl9u b2RlX2J1ZmZlcnMgPSAobnVtYV9wYWdlX3NpemUgLyBzaXplb2YoQnVmZmVyRGVzY1BhZGRl ZCkpOworCisJLyoKKwkgKiBNYXhpbXVtIG51bWJlciBvZiBub2RlcyAoZWFjaCBnZXR0aW5n IG1pbl9ub2RlX2J1ZmZlcnMpIHdlIGNhbiBoYW5kbGUKKwkgKiBnaXZlbiB0aGUgY3VycmVu dCBzaGFyZWQgYnVmZmVycyBzaXplLiBUaGUgbGFzdCBub2RlIGlzIGFsbG93ZWQgdG8gYmUK KwkgKiBzbWFsbGVyIChoYWxmIG9mIHRoZSBvdGhlciBub2RlcykuCisJICovCisJbWF4X25v ZGVzID0gKE5CdWZmZXJzICsgKG1pbl9ub2RlX2J1ZmZlcnMgLyAyKSkgLyBtaW5fbm9kZV9i dWZmZXJzOworCisJLyoKKwkgKiBDYW4gd2UgYWN0dWFsbHkgZG8gTlVNQSBwYXJ0aXRpb25p bmcgd2l0aCB0aGVzZSBzZXR0aW5ncz8gSWYgd2UgY2FuJ3QKKwkgKiBoYW5kbGUgdGhlIGN1 cnJlbnQgbnVtYmVyIG9mIG5vZGVzLCB0aGVuIG5vLgorCSAqCisJICogWFhYIFRoaXMgc2hv dWxkbid0IGJlIGEgYmlnIGlzc3VlIGluIHByYWN0aWNlLiBOVU1BIHN5c3RlbXMgdHlwaWNh bGx5CisJICogcnVuIHdpdGggbGFyZ2Ugc2hhcmVkIGJ1ZmZlcnMsIHdoaWNoIGFsc28gbWFr ZXMgdGhlIGltYmFsYW5jZSBpc3N1ZXMKKwkgKiBmYWlybHkgc2lnbmlmaWNhbnQgKGl0J3Mg cXVpY2sgdG8gcmViYWxhbmNlIDEyOE1CLCBtdWNoIHNsb3dlciB0byBkbworCSAqIHRoYXQg Zm9yIDI1NkdCKS4KKwkgKi8KKwludW1hX2Nhbl9wYXJ0aXRpb24gPSB0cnVlOwkvKiBhc3N1 bWUgd2UgY2FuIGFsbG9jYXRlIHRvIG5vZGVzICovCisJaWYgKG51bWFfbm9kZXMgPiBtYXhf bm9kZXMpCisJeworCQllbG9nKE5PVElDRSwgInNoYXJlZCBidWZmZXJzIHRvbyBzbWFsbCBm b3IgJWQgbm9kZXMgKG1heCBub2RlcyAlZCkiLAorCQkJIG51bWFfbm9kZXMsIG1heF9ub2Rl cyk7CisJCW51bWFfY2FuX3BhcnRpdGlvbiA9IGZhbHNlOworCX0KKwllbHNlIGlmICgobnVt YV9mbGFncyAmIE5VTUFfQlVGRkVSUykgPT0gMCkKKwl7CisJCWVsb2coTk9USUNFLCAiTlVN QS1wYXJ0aXRpb25pbmcgb2YgYnVmZmVycyBkaXNhYmxlZCIpOworCQludW1hX2Nhbl9wYXJ0 aXRpb24gPSBmYWxzZTsKKwl9CisKKwkvKgorCSAqIFdlIGtub3cgd2UgY2FuIHBhcnRpdGlv biB0byB0aGUgZGVzaXJlZCBudW1iZXIgb2Ygbm9kZXMsIG5vdyBpdCdzIHRpbWUKKwkgKiB0 byBmaWd1cmUgb3V0IGhvdyBtYW55IHBhcnRpdGlvbnMgd2UgbmVlZCBwZXIgbm9kZS4gV2Ug c2ltcGx5IGFkZAorCSAqIHBhcnRpdGlvbnMgcGVyIG5vZGUgdW50aWwgd2UgcmVhY2ggTUlO X0JVRkZFUl9QQVJUSVRJT05TLgorCSAqCisJICogWFhYIE1heWJlIHdlIHNob3VsZCBtYWtl IHN1cmUgdG8ga2VlcCB0aGUgYWN0dWFsIHBhcnRpdGlvbiBzaXplIGEgcG93ZXIKKwkgKiBv ZiAyLCB0byBtYWtlIHRoZSBjYWxjdWxhdGlvbnMgc2ltcGxlciAoc2hpZnQgaW5zdGVhZCBv ZiBtb2QpLgorCSAqLworCW51bV9wYXJ0aXRpb25zX3Blcl9ub2RlID0gMTsKKworCXdoaWxl IChudW1hX25vZGVzICogbnVtX3BhcnRpdGlvbnNfcGVyX25vZGUgPCBNSU5fQlVGRkVSX1BB UlRJVElPTlMpCisJCW51bV9wYXJ0aXRpb25zX3Blcl9ub2RlKys7CisKKwkvKiBub3cgd2Ug a25vdyB0aGUgdG90YWwgbnVtYmVyIG9mIHBhcnRpdGlvbnMgKi8KKwludW1hX3BhcnRpdGlv bnMgPSAobnVtYV9ub2RlcyAqIG51bV9wYXJ0aXRpb25zX3Blcl9ub2RlKTsKKworCS8qCisJ ICogRmluYWxseSwgY2FsY3VsYXRlIGhvdyBtYW55IGJ1ZmZlcnMgd2UnbGwgYXNzaWduIHRv IGEgc2luZ2xlIE5VTUEgbm9kZS4KKwkgKiBJZiB3ZSBoYXZlIG9ubHkgYSBzaW5nbGUgbm9k ZSwgb3Igd2hlbiB3ZSBjYW4ndCBwYXJ0aXRpb24gZm9yIHNvbWUKKwkgKiByZWFzb24sIGp1 c3QgdGFrZSBhICJmYWlyIHNoYXJlIiBvZiBidWZmZXJzLiBUaGlzIGNhbiBoYXBwZW4gZm9y IGEKKwkgKiBudW1iZXIgb2YgcmVhc29ucyAtIG1pc3NpbmcgTlVNQSBzdXBwb3J0LCBwYXJ0 aXRpb25pbmcgb2YgYnVmZmVycyBub3QKKwkgKiBlbmFibGVkLCBvciBub3QgZW5vdWdoIGJ1 ZmZlcnMgZm9yIHRoaXMgbWFueSBub2Rlcy4KKwkgKgorCSAqIFdlIHN0aWxsIGJ1aWxkIHBh cnRpdGlvbnMsIGJlY2F1c2Ugd2Ugd2FudCB0byBhbGxvdyBwYXJ0aXRpb25pbmcgb2YKKwkg KiB0aGUgY2xvY2stc3dlZXAgbGF0ZXIuCisJICoKKwkgKiBUaGUgbnVtYmVyIG9mIGJ1ZmZl cnMgZm9yIGVhY2ggcGFydGl0aW9uIGlzIGNhbGN1bGF0ZWQgbGF0ZXIsIG9uY2Ugd2UKKwkg KiBoYXZlIGFsbG9jYXRlZCB0aGUgc2hhcmVkIG1lbW9yeSAoYmVjYXVzZSB0aGF0J3Mgd2hl cmUgd2Ugc3RvcmUgaXQpLgorCSAqCisJICogWFhYIEluIGJvdGggY2FzZXMgdGhlIGxhc3Qg bm9kZSBjYW4gZ2V0IGZld2VyIGJ1ZmZlcnMuCisJICovCisJaWYgKCFudW1hX2Nhbl9wYXJ0 aXRpb24pCisJeworCQludW1hX2J1ZmZlcnNfcGVyX25vZGUgPSAoTkJ1ZmZlcnMgKyAobnVt YV9ub2RlcyAtIDEpKSAvIG51bWFfbm9kZXM7CisJfQorCWVsc2UKKwl7CisJCW51bWFfYnVm ZmVyc19wZXJfbm9kZSA9IG1pbl9ub2RlX2J1ZmZlcnM7CisJCXdoaWxlIChudW1hX2J1ZmZl cnNfcGVyX25vZGUgKiBudW1hX25vZGVzIDwgTkJ1ZmZlcnMpCisJCQludW1hX2J1ZmZlcnNf cGVyX25vZGUgKz0gbWluX25vZGVfYnVmZmVyczsKKworCQkvKiB0aGUgbGFzdCBub2RlIHNo b3VsZCBnZXQgYXQgbGVhc3Qgc29tZSBidWZmZXJzICovCisJCUFzc2VydChOQnVmZmVycyAt IChudW1hX25vZGVzIC0gMSkgKiBudW1hX2J1ZmZlcnNfcGVyX25vZGUgPiAwKTsKKwl9CisK KwllbG9nKERFQlVHMSwgIk5VTUE6IGJ1ZmZlcnMgJWQgcGFydGl0aW9ucyAlZCBudW1fbm9k ZXMgJWQgcGVyX25vZGUgJWQgYnVmZmVyc19wZXJfbm9kZSAlZCAobWluICVkKSIsCisJCSBO QnVmZmVycywgbnVtYV9wYXJ0aXRpb25zLCBudW1hX25vZGVzLCBudW1fcGFydGl0aW9uc19w ZXJfbm9kZSwKKwkJIG51bWFfYnVmZmVyc19wZXJfbm9kZSwgbWluX25vZGVfYnVmZmVycyk7 Cit9CisKIC8qCiAgKiBTYW5pdHkgY2hlY2tzIG9mIGJ1ZmZlcnMgcGFydGl0aW9ucyAtIHRo ZXJlIG11c3QgYmUgbm8gZ2FwcywgaXQgbXVzdCBjb3ZlcgogICogdGhlIHdob2xlIHJhbmdl IG9mIGJ1ZmZlcnMsIGV0Yy4KQEAgLTI2NywzMyArNTg1LDEzNyBAQCBidWZmZXJfcGFydGl0 aW9uc19pbml0KHZvaWQpCiB7CiAJaW50CQkJcmVtYWluaW5nX2J1ZmZlcnMgPSBOQnVmZmVy czsKIAlpbnQJCQlidWZmZXIgPSAwOworCWludAkJCXBhcnRzX3Blcl9ub2RlID0gKG51bWFf cGFydGl0aW9ucyAvIG51bWFfbm9kZXMpOworCWNoYXIJICAgKmJ1ZmZlcnNfcHRyLAorCQkJ ICAgKmRlc2NyaXB0b3JzX3B0cjsKIAotCS8qIG51bWJlciBvZiBidWZmZXJzIHBlciBwYXJ0 aXRpb24gKG1ha2Ugc3VyZSB0byBub3Qgb3ZlcmZsb3cpICovCi0JaW50CQkJcGFydF9idWZm ZXJzCi0JCT0gKChpbnQ2NCkgTkJ1ZmZlcnMgKyAoTlVNX0NMT0NLX1NXRUVQX1BBUlRJVElP TlMgLSAxKSkgLyBOVU1fQ0xPQ0tfU1dFRVBfUEFSVElUSU9OUzsKLQotCUJ1ZmZlclBhcnRp dGlvbnNBcnJheS0+bnBhcnRpdGlvbnMgPSBOVU1fQ0xPQ0tfU1dFRVBfUEFSVElUSU9OUzsK KwlCdWZmZXJQYXJ0aXRpb25zQXJyYXktPm5wYXJ0aXRpb25zID0gbnVtYV9wYXJ0aXRpb25z OworCUJ1ZmZlclBhcnRpdGlvbnNBcnJheS0+bm5vZGVzID0gbnVtYV9ub2RlczsKIAotCWZv ciAoaW50IG4gPSAwOyBuIDwgQnVmZmVyUGFydGl0aW9uc0FycmF5LT5ucGFydGl0aW9uczsg bisrKQorCWZvciAoaW50IG4gPSAwOyBuIDwgbnVtYV9ub2RlczsgbisrKQogCXsKLQkJQnVm ZmVyUGFydGl0aW9uICpwYXJ0ID0gJkJ1ZmZlclBhcnRpdGlvbnNBcnJheS0+cGFydGl0aW9u c1tuXTsKKwkJLyogYnVmZmVycyB0aGlzIG5vZGUgc2hvdWxkIGdldCAobGFzdCBub2RlIGNh biBnZXQgZmV3ZXIpICovCisJCWludAkJCW5vZGVfYnVmZmVycyA9IE1pbihyZW1haW5pbmdf YnVmZmVycywgbnVtYV9idWZmZXJzX3Blcl9ub2RlKTsKIAotCQkvKiBidWZmZXJzIHRoaXMg cGFydGl0aW9uIHNob3VsZCBnZXQgKGxhc3QgcGFydGl0aW9uIGNhbiBnZXQgZmV3ZXIpICov Ci0JCWludAkJCW51bV9idWZmZXJzID0gTWluKHJlbWFpbmluZ19idWZmZXJzLCBwYXJ0X2J1 ZmZlcnMpOworCQkvKiBzcGxpdCBub2RlIGJ1ZmZlcnMgbmV0d2VlbiBwYXJ0aXRpb25zIChs YXN0IG9uZSBjYW4gZ2V0IGZld2VyKSAqLworCQlpbnQJCQlwYXJ0X2J1ZmZlcnMgPSAobm9k ZV9idWZmZXJzICsgKHBhcnRzX3Blcl9ub2RlIC0gMSkpIC8gcGFydHNfcGVyX25vZGU7CiAK LQkJcmVtYWluaW5nX2J1ZmZlcnMgLT0gbnVtX2J1ZmZlcnM7CisJCXJlbWFpbmluZ19idWZm ZXJzIC09IG5vZGVfYnVmZmVyczsKIAotCQlBc3NlcnQoKG51bV9idWZmZXJzID4gMCkgJiYg KG51bV9idWZmZXJzIDw9IHBhcnRfYnVmZmVycykpOwotCQlBc3NlcnQoKGJ1ZmZlciA+PSAw KSAmJiAoYnVmZmVyIDwgTkJ1ZmZlcnMpKTsKKwkJQXNzZXJ0KChub2RlX2J1ZmZlcnMgPiAw KSAmJiAobm9kZV9idWZmZXJzIDw9IE5CdWZmZXJzKSk7CisJCUFzc2VydCgobiA+PSAwKSAm JiAobiA8IG51bWFfbm9kZXMpKTsKKworCQlmb3IgKGludCBwID0gMDsgcCA8IHBhcnRzX3Bl cl9ub2RlOyBwKyspCisJCXsKKwkJCWludAkJCWlkeCA9IChuICogcGFydHNfcGVyX25vZGUp ICsgcDsKKwkJCUJ1ZmZlclBhcnRpdGlvbiAqcGFydCA9ICZCdWZmZXJQYXJ0aXRpb25zQXJy YXktPnBhcnRpdGlvbnNbaWR4XTsKKwkJCWludAkJCW51bV9idWZmZXJzID0gTWluKG5vZGVf YnVmZmVycywgcGFydF9idWZmZXJzKTsKIAotCQlwYXJ0LT5udW1fYnVmZmVycyA9IG51bV9i dWZmZXJzOwotCQlwYXJ0LT5maXJzdF9idWZmZXIgPSBidWZmZXI7Ci0JCXBhcnQtPmxhc3Rf YnVmZmVyID0gYnVmZmVyICsgKG51bV9idWZmZXJzIC0gMSk7CisJCQlBc3NlcnQoKGlkeCA+ PSAwKSAmJiAoaWR4IDwgbnVtYV9wYXJ0aXRpb25zKSk7CisJCQlBc3NlcnQoKGJ1ZmZlciA+ PSAwKSAmJiAoYnVmZmVyIDwgTkJ1ZmZlcnMpKTsKKwkJCUFzc2VydCgobnVtX2J1ZmZlcnMg PiAwKSAmJiAobnVtX2J1ZmZlcnMgPD0gcGFydF9idWZmZXJzKSk7CiAKLQkJYnVmZmVyICs9 IG51bV9idWZmZXJzOworCQkJLyogWFhYIHdlIHNob3VsZCBnZXQgdGhlIGFjdHVhbCBub2Rl IElEIGZyb20gdGhlIG1hc2sgKi8KKwkJCWlmIChudW1hX2Nhbl9wYXJ0aXRpb24pCisJCQkJ cGFydC0+bnVtYV9ub2RlID0gbjsKKwkJCWVsc2UKKwkJCQlwYXJ0LT5udW1hX25vZGUgPSAt MTsKKworCQkJcGFydC0+bnVtX2J1ZmZlcnMgPSBudW1fYnVmZmVyczsKKwkJCXBhcnQtPmZp cnN0X2J1ZmZlciA9IGJ1ZmZlcjsKKwkJCXBhcnQtPmxhc3RfYnVmZmVyID0gYnVmZmVyICsg KG51bV9idWZmZXJzIC0gMSk7CisKKwkJCWVsb2coREVCVUcxLCAiTlVNQTogYnVmZmVyICVk IG5vZGUgJWQgcGFydGl0aW9uICVkIGJ1ZmZlcnMgJWQgZmlyc3QgJWQgbGFzdCAlZCIsIGlk eCwgbiwgcCwgbnVtX2J1ZmZlcnMsIGJ1ZmZlciwgYnVmZmVyICsgKG51bV9idWZmZXJzIC0g MSkpOworCisJCQlidWZmZXIgKz0gbnVtX2J1ZmZlcnM7CisJCQlub2RlX2J1ZmZlcnMgLT0g cGFydF9idWZmZXJzOworCQl9CiAJfQogCiAJQXNzZXJ0Q2hlY2tCdWZmZXJQYXJ0aXRpb25z KCk7CisKKwkvKgorCSAqIFdpdGggYnVmZmVycyBpbnRlcmxlYXZpbmcgZGlzYWJsZWQgKG9y IGNhbid0IHBhcnRpdGlvbiwgYmVjYXVzZSBvZgorCSAqIHNoYXJlZCBidWZmZXJzIGJlaW5n IHRvbyBzbWFsbCksIHdlJ3JlIGRvbmUuCisJICovCisJaWYgKCgobnVtYV9mbGFncyAmIE5V TUFfQlVGRkVSUykgPT0gMCkgfHwgIW51bWFfY2FuX3BhcnRpdGlvbikKKwkJcmV0dXJuOwor CisJLyoKKwkgKiBBc3NpZ24gY2h1bmtzIG9mIGJ1ZmZlcnMgYW5kIGJ1ZmZlciBkZXNjcmlw dG9ycyB0byB0aGUgYXZhaWxhYmxlIE5VTUEKKwkgKiBub2Rlcy4gV2UgY2FuJ3QgdXNlIHRo ZSByZWd1bGFyIGludGVybGVhdmluZywgYmVjYXVzZSB3aXRoIHJlZ3VsYXIKKwkgKiBtZW1v cnkgcGFnZXMgKHNtYWxsZXIgdGhhbiBCTENLU1opIHdlJ2Qgc3BsaXQgYWxsIGJ1ZmZlcnMg dG8gbXVsdGlwbGUKKwkgKiBOVU1BIG5vZGVzLiBBbmQgd2UgZG9uJ3Qgd2FudCB0aGF0Lgor CSAqCisJICogQnV0IGV2ZW4gd2l0aCBodWdlIHBhZ2VzIGl0IHNlZW1zIGxpa2UgYSBnb29k IGlkZWEgdG8gbm90IG1hcCBwYWdlcworCSAqIG9uZSBieSBvbmUuCisJICoKKwkgKiBTbyB3 ZSBhbHdheXMgYXNzaWduIGEgbGFyZ2VyIGNvbnRpZ3VvdXMgY2h1bmsgb2YgYnVmZmVycyB0 byB0aGUgc2FtZQorCSAqIE5VTUEgbm9kZSwgYXMgY2FsY3VsYXRlZCBieSBjaG9vc2VfY2h1 bmtfYnVmZmVycygpLiBXZSB0cnkgdG8ga2VlcCB0aGUKKwkgKiBjaHVua3MgbGFyZ2UgZW5v dWdoIHRvIHdvcmsgYm90aCBmb3IgYnVmZmVycyBhbmQgYnVmZmVyIGRlc2NyaXB0b3JzLAor CSAqIGJ1dCBub3QgdG9vIGxhcmdlLiBTZWUgdGhlIGNvbW1lbnRzIGF0IGNob29zZV9jaHVu a19idWZmZXJzKCkgZm9yCisJICogZGV0YWlscy4KKwkgKgorCSAqIFRoYW5rcyB0byB0aGUg ZWFybGllciBhbGlnbm1lbnQgKHRvIG1lbW9yeSBwYWdlIGV0Yy4pLCB3ZSBrbm93IHRoZQor CSAqIGJ1ZmZlcnMgd29uJ3QgZ2V0IHNwbGl0LCBldGMuCisJICoKKwkgKiBUaGlzIGFsc28g bWFrZXMgaXQgZWFzaWVyIC8gc3RyYWlnaHRmb3J3YXJkIHRvIGNhbGN1bGF0ZSB3aGljaCBO VU1BCisJICogbm9kZSBhIGJ1ZmZlciBiZWxvbmdzIHRvIChpdCdzIGEgbWF0dGVyIG9mIGRp dmlkZSArIG1vZCkuIFNlZQorCSAqIEJ1ZmZlckdldE5vZGUoKS4KKwkgKgorCSAqIFdlIG5l ZWQgdG8gYWNjb3VudCBmb3IgcGFydGl0aW9ucyBiZWluZyBvZiBkaWZmZXJlbnQgbGVuZ3Ro LCB3aGVuIHRoZQorCSAqIE5CdWZmZXJzIGlzIG5vdCBuaWNlbHkgZGl2aXNpYmxlLiBUbyBk byB0aGF0IHdlIGtlZXAgdHJhY2sgb2YgdGhlIHN0YXJ0CisJICogb2YgdGhlIG5leHQgcGFy dGl0aW9uLgorCSAqCisJICogV2UgYWx3YXlzIG1hcCBhbGwgcGFydGl0aW9ucyBmb3IgdGhl IHNhbWUgbm9kZSBhdCBvbmNlLCBzbyB0aGF0IHdlCisJICogZG9uJ3QgbmVlZCB0byB3b3Jy eSBhYm91dCBhbGlnbm1lbnQgb2YgbWVtb3J5IHBhZ2VzIHRoYXQgZ2V0IHNwbGl0CisJICog YmV0d2VlbiBwYXJ0aXRpb25zICh3ZSBvbmx5IHdvcnJ5IGFib3V0IG1pbl9ub2RlX2J1ZmZl cnMgZm9yIHdob2xlCisJICogTlVNQSBub2Rlcywgbm90IGZvciBpbmRpdmlkdWFsIHBhcnRp dGlvbnMpLgorCSAqLworCWJ1ZmZlcnNfcHRyID0gQnVmZmVyQmxvY2tzOworCWRlc2NyaXB0 b3JzX3B0ciA9IChjaGFyICopIEJ1ZmZlckRlc2NyaXB0b3JzOworCisJZm9yIChpbnQgbiA9 IDA7IG4gPCBudW1hX25vZGVzOyBuKyspCisJeworCQljaGFyCSAgICpzdGFydHB0ciwKKwkJ CQkgICAqZW5kcHRyOworCQlpbnQJCQludW1fYnVmZmVycyA9IDA7CisKKwkJLyogc3VtIGJ1 ZmZlcnMgaW4gYWxsIHBhcnRpdGlvbnMgZm9yIHRoaXMgbm9kZSAqLworCQlmb3IgKGludCBw ID0gMDsgcCA8IHBhcnRzX3Blcl9ub2RlOyBwKyspCisJCXsKKwkJCWludAkJcGlkeCA9IChu ICogcGFydHNfcGVyX25vZGUgKyBwKTsKKwkJCUJ1ZmZlclBhcnRpdGlvbiAqcGFydCA9ICZC dWZmZXJQYXJ0aXRpb25zQXJyYXktPnBhcnRpdGlvbnNbcGlkeF07CisKKwkJCUFzc2VydChw YXJ0LT5udW1hX25vZGUgPT0gbik7CisKKwkJCW51bV9idWZmZXJzICs9IHBhcnQtPm51bV9i dWZmZXJzOworCQl9CisKKwkJLyogZmlyc3QgbWFwIGJ1ZmZlcnMgKi8KKwkJc3RhcnRwdHIg PSBidWZmZXJzX3B0cjsKKwkJZW5kcHRyID0gc3RhcnRwdHIgKyAoKFNpemUpIG51bV9idWZm ZXJzICogQkxDS1NaKTsKKwkJYnVmZmVyc19wdHIgPSBlbmRwdHI7CS8qIHN0YXJ0IG9mIHRo ZSBuZXh0IHBhcnRpdGlvbiAqLworCisJCWVsb2coREVCVUcxLCAiTlVNQTogYnVmZmVyX3Bh cnRpdGlvbnNfaW5pdDogJWQgPT4gYnVmZmVycyAlZCBzdGFydCAlcCBlbmQgJXAgKHNpemUg JXpkKSIsCisJCQkgbiwgbnVtX2J1ZmZlcnMsIHN0YXJ0cHRyLCBlbmRwdHIsIChlbmRwdHIg LSBzdGFydHB0cikpOworCisJCXBnX251bWFfbW92ZV90b19ub2RlKHN0YXJ0cHRyLCBlbmRw dHIsIG4pOworCisJCS8qIG5vdyBkbyB0aGUgc2FtZSBmb3IgYnVmZmVyIGRlc2NyaXB0b3Jz ICovCisJCXN0YXJ0cHRyID0gZGVzY3JpcHRvcnNfcHRyOworCQllbmRwdHIgPSBzdGFydHB0 ciArICgoU2l6ZSkgbnVtX2J1ZmZlcnMgKiBzaXplb2YoQnVmZmVyRGVzY1BhZGRlZCkpOwor CQlkZXNjcmlwdG9yc19wdHIgPSBlbmRwdHI7CisKKwkJZWxvZyhERUJVRzEsICJOVU1BOiBi dWZmZXJfcGFydGl0aW9uc19pbml0OiAlZCA9PiBkZXNjcmlwdG9ycyAlZCBzdGFydCAlcCBl bmQgJXAgKHNpemUgJXpkKSIsCisJCQkgbiwgbnVtX2J1ZmZlcnMsIHN0YXJ0cHRyLCBlbmRw dHIsIChlbmRwdHIgLSBzdGFydHB0cikpOworCisJCXBnX251bWFfbW92ZV90b19ub2RlKHN0 YXJ0cHRyLCBlbmRwdHIsIG4pOworCX0KKworCS8qIHdlIHNob3VsZCBoYXZlIGNvbnN1bWVk IHRoZSBhcnJheXMgZXhhY3RseSAqLworCUFzc2VydChidWZmZXJzX3B0ciA9PSBCdWZmZXJC bG9ja3MgKyAoU2l6ZSkgTkJ1ZmZlcnMgKiBCTENLU1opOworCUFzc2VydChkZXNjcmlwdG9y c19wdHIgPT0gKGNoYXIgKikgQnVmZmVyRGVzY3JpcHRvcnMgKyAoU2l6ZSkgTkJ1ZmZlcnMg KiBzaXplb2YoQnVmZmVyRGVzY1BhZGRlZCkpOwogfQogCiBpbnQKQEAgLTMwMiwxNCArNzI0 LDIxIEBAIEJ1ZmZlclBhcnRpdGlvbkNvdW50KHZvaWQpCiAJcmV0dXJuIEJ1ZmZlclBhcnRp dGlvbnNBcnJheS0+bnBhcnRpdGlvbnM7CiB9CiAKK2ludAorQnVmZmVyUGFydGl0aW9uTm9k ZXModm9pZCkKK3sKKwlyZXR1cm4gQnVmZmVyUGFydGl0aW9uc0FycmF5LT5ubm9kZXM7Cit9 CisKIHZvaWQKLUJ1ZmZlclBhcnRpdGlvbkdldChpbnQgaWR4LCBpbnQgKm51bV9idWZmZXJz LAorQnVmZmVyUGFydGl0aW9uR2V0KGludCBpZHgsIGludCAqbm9kZSwgaW50ICpudW1fYnVm ZmVycywKIAkJCQkgICBpbnQgKmZpcnN0X2J1ZmZlciwgaW50ICpsYXN0X2J1ZmZlcikKIHsK IAlpZiAoKGlkeCA+PSAwKSAmJiAoaWR4IDwgQnVmZmVyUGFydGl0aW9uc0FycmF5LT5ucGFy dGl0aW9ucykpCiAJewogCQlCdWZmZXJQYXJ0aXRpb24gKnBhcnQgPSAmQnVmZmVyUGFydGl0 aW9uc0FycmF5LT5wYXJ0aXRpb25zW2lkeF07CiAKKwkJKm5vZGUgPSBwYXJ0LT5udW1hX25v ZGU7CiAJCSpudW1fYnVmZmVycyA9IHBhcnQtPm51bV9idWZmZXJzOwogCQkqZmlyc3RfYnVm ZmVyID0gcGFydC0+Zmlyc3RfYnVmZmVyOwogCQkqbGFzdF9idWZmZXIgPSBwYXJ0LT5sYXN0 X2J1ZmZlcjsKQEAgLTMyMiw4ICs3NTEsODIgQEAgQnVmZmVyUGFydGl0aW9uR2V0KGludCBp ZHgsIGludCAqbnVtX2J1ZmZlcnMsCiAKIC8qIHJldHVybiBwYXJhbWV0ZXJzIGJlZm9yZSB0 aGUgcGFydGl0aW9ucyBhcmUgaW5pdGlhbGl6ZWQgKGR1cmluZyBzaXppbmcpICovCiB2b2lk Ci1CdWZmZXJQYXJ0aXRpb25QYXJhbXMoaW50ICpudW1fcGFydGl0aW9ucykKK0J1ZmZlclBh cnRpdGlvblBhcmFtcyhpbnQgKm51bV9wYXJ0aXRpb25zLCBpbnQgKm51bV9ub2RlcykKIHsK IAlpZiAobnVtX3BhcnRpdGlvbnMpCi0JCSpudW1fcGFydGl0aW9ucyA9IE5VTV9DTE9DS19T V0VFUF9QQVJUSVRJT05TOworCQkqbnVtX3BhcnRpdGlvbnMgPSBudW1hX3BhcnRpdGlvbnM7 CisKKwlpZiAobnVtX25vZGVzKQorCQkqbnVtX25vZGVzID0gbnVtYV9ub2RlczsKK30KKwor LyogWFhYIHRoZSBHVUMgaG9va3Mgc2hvdWxkIHByb2JhYmx5IGJlIHNvbWV3aGVyZSBlbHNl PyAqLworYm9vbAorY2hlY2tfZGVidWdfbnVtYShjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0 cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCit7CisJYm9vbAkJcmVzdWx0ID0gdHJ1ZTsKKwlpbnQJ CQlmbGFnczsKKworI2lmIFVTRV9MSUJOVU1BID09IDAKKwlpZiAoc3RyY21wKCpuZXd2YWws ICIiKSAhPSAwKQorCXsKKwkJR1VDX2NoZWNrX2VycmRldGFpbCgiXCIlc1wiIGlzIG5vdCBz dXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iLAorCQkJCQkJCSJkZWJ1Z19udW1hIik7CisJ CXJlc3VsdCA9IGZhbHNlOworCX0KKwlmbGFncyA9IDA7CisjZWxzZQorCUxpc3QJICAgKmVs ZW1saXN0OworCUxpc3RDZWxsICAgKmw7CisJY2hhcgkgICAqcmF3c3RyaW5nOworCisJLyog TmVlZCBhIG1vZGlmaWFibGUgY29weSBvZiBzdHJpbmcgKi8KKwlyYXdzdHJpbmcgPSBwc3Ry ZHVwKCpuZXd2YWwpOworCisJaWYgKCFTcGxpdEdVQ0xpc3QocmF3c3RyaW5nLCAnLCcsICZl bGVtbGlzdCkpCisJeworCQlHVUNfY2hlY2tfZXJyZGV0YWlsKCJJbnZhbGlkIGxpc3Qgc3lu dGF4IGluIHBhcmFtZXRlciBcIiVzXCIuIiwKKwkJCQkJCQkiZGVidWdfbnVtYSIpOworCQlw ZnJlZShyYXdzdHJpbmcpOworCQlsaXN0X2ZyZWUoZWxlbWxpc3QpOworCQlyZXR1cm4gZmFs c2U7CisJfQorCisJZmxhZ3MgPSAwOworCWZvcmVhY2gobCwgZWxlbWxpc3QpCisJeworCQlj aGFyCSAgICppdGVtID0gKGNoYXIgKikgbGZpcnN0KGwpOworCisJCWlmIChwZ19zdHJjYXNl Y21wKGl0ZW0sICJidWZmZXJzIikgPT0gMCkKKwkJCWZsYWdzIHw9IE5VTUFfQlVGRkVSUzsK KwkJZWxzZQorCQl7CisJCQlHVUNfY2hlY2tfZXJyZGV0YWlsKCJJbnZhbGlkIG9wdGlvbiBc IiVzXCIuIiwgaXRlbSk7CisJCQlyZXN1bHQgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJ fQorCisJcGZyZWUocmF3c3RyaW5nKTsKKwlsaXN0X2ZyZWUoZWxlbWxpc3QpOworI2VuZGlm CisKKwlpZiAoIXJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCS8qIFNhdmUgdGhlIGZs YWdzIGluICpleHRyYSwgZm9yIHVzZSBieSBhc3NpZ25fZGVidWdfaW9fZGlyZWN0ICovCisJ KmV4dHJhID0gZ3VjX21hbGxvYyhMT0csIHNpemVvZihpbnQpKTsKKwlpZiAoISpleHRyYSkK KwkJcmV0dXJuIGZhbHNlOworCSooKGludCAqKSAqZXh0cmEpID0gZmxhZ3M7CisKKwlyZXR1 cm4gcmVzdWx0OworfQorCit2b2lkCithc3NpZ25fZGVidWdfbnVtYShjb25zdCBjaGFyICpu ZXd2YWwsIHZvaWQgKmV4dHJhKQoreworCWludAkJICAgKmZsYWdzID0gKGludCAqKSBleHRy YTsKKworCW51bWFfZmxhZ3MgPSAqZmxhZ3M7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvZnJlZWxpc3QuYwppbmRleCBjNzNhNDE4ZGVmYS4uMzQxZWFmNTU1NzcgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKKysrIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwpAQCAtMTI0LDcgKzEyNCw5IEBAIHR5 cGVkZWYgc3RydWN0CiAJLy9pbnQJCQlfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDY0KSkpIGJn d3Byb2NubzsKIAogCS8qIGluZm8gYWJvdXQgZnJlZWxpc3QgcGFydGl0aW9uaW5nICovCisJ aW50CQkJbnVtX25vZGVzOwkJLyogZWZmZWN0aXZlbHkgbnVtYmVyIG9mIE5VTUEgbm9kZXMg Ki8KIAlpbnQJCQludW1fcGFydGl0aW9uczsKKwlpbnQJCQludW1fcGFydGl0aW9uc19wZXJf bm9kZTsKIAogCS8qIGNsb2Nrc3dlZXAgcGFydGl0aW9ucyAqLwogCUNsb2NrU3dlZXAJc3dl ZXBzW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07CkBAIC0yNzAsMTYgKzI3Miw3MiBAQCBDbG9j a1N3ZWVwVGljayhDbG9ja1N3ZWVwICpzd2VlcCkKICAqIGNhbGN1bGF0ZV9wYXJ0aXRpb25f aW5kZXgKICAqCQljYWxjdWxhdGUgdGhlIGJ1ZmZlciAvIGNsb2NrLXN3ZWVwIHBhcnRpdGlv biB0byB1c2UKICAqCi0gKiB1c2UgUElEIHRvIGRldGVybWluZSB0aGUgYnVmZmVyIHBhcnRp dGlvbgotICoKLSAqIFhYWCBXZSBjb3VsZCB1c2UgTlVNQSBub2RlIC8gY29yZSBJRCB0byBw aWNrIHBhcnRpdGlvbiwgYnV0IHdlJ2QgbmVlZAotICogdG8gaGFuZGxlIGNhc2VzIHdpdGgg ZmV3ZXIgbm9kZXMvY29yZXMgdGhhbiBwYXJ0aXRpb25zIHNvbWVob3cuIEFsdGhvdWdoLAot ICogbWF5YmUgdGhlIGJhbGFuY2luZyB3b3VsZCBoYW5kbGUgdGhhdCB0b28uCisgKiBXaXRo IGxpYm51bWEsIHVzZSB0aGUgTlVNQSBub2RlIGFuZCBDUFUgdG8gcGljayB0aGUgcGFydGl0 aW9uLiBPdGhlcndpc2UKKyAqIHVzZSBqdXN0IFBJRCBpbnN0ZWFkIG9mIENQVSAod2UgYXNz dW1lIGV2ZXJ5dGhpbmcgaXMgYSBzaW5nbGUgTlVNQSBub2RlKS4KICAqLwogc3RhdGljIGlu dAogY2FsY3VsYXRlX3BhcnRpdGlvbl9pbmRleCh2b2lkKQogewotCXJldHVybiAoTXlQcm9j UGlkICUgU3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9ucyk7CisJaW50CQljcHUsCisJ CQlub2RlLAorCQkJaW5kZXg7CisKKwkvKgorCSAqIFRoZSBidWZmZXJzIGFyZSBwYXJ0aXRp b25lZCwgc28gZGV0ZXJtaW5lIHRoZSBDUFUvTlVNQSBub2RlLCBhbmQgcGljayBhCisJICog cGFydGl0aW9uIGJhc2VkIG9uIHRoYXQuCisJICoKKwkgKiBXaXRob3V0IE5VTUEgYXNzdW1l IGV2ZXJ5dGhpbmcgaXMgYSBzaW5nbGUgTlVNQSBub2RlLCBhbmQgd2UgcGljayB0aGUKKwkg KiBwYXJ0aXRpb24gYmFzZWQgb24gUElEICh3ZSBtYXkgbm90IGhhdmUgc2NoZWRfZ2V0Y3B1 KS4KKwkgKi8KKyNpZmRlZiBVU0VfTElCTlVNQQorCWNwdSA9IHNjaGVkX2dldGNwdSgpOwor CisJaWYgKGNwdSA8IDApCisJCWVsb2coRVJST1IsICJzY2hlZF9nZXRjcHUgZmFpbGVkOiAl bSIpOworCisJbm9kZSA9IG51bWFfbm9kZV9vZl9jcHUoY3B1KTsKKyNlbHNlCisJY3B1ID0g TXlQcm9jUGlkOworCW5vZGUgPSAwOworI2VuZGlmCisKKwlBc3NlcnQoU3RyYXRlZ3lDb250 cm9sLT5udW1fcGFydGl0aW9ucyA9PQorCQkgICAoU3RyYXRlZ3lDb250cm9sLT5udW1fbm9k ZXMgKiBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zX3Blcl9ub2RlKSk7CisKKwkv KgorCSAqIFhYWCBXZSBzaG91bGQndCBnZXQgbm9kZXMgdGhhdCB3ZSBoYXZlbid0IGNvbnNp ZGVyZWQgd2hpbGUgYnVpbGRpbmcgdGhlCisJICogcGFydGl0aW9ucy4gTWF5YmUgaWYgd2Ug YWxsb3cgdGhpcyAoZS5nLiBkdWUgdG8gc3VwcG9ydCBhZGp1c3RpbmcgdGhlCisJICogTlVN QSBzdHVmZiBhdCBydW50aW1lKSwgd2Ugc2hvdWxkIGp1c3QgZG8gb3VyIGJlc3QgdG8gbWlu aW1pemUgdGhlCisJICogY29uZmxpY3RzIHNvbWVob3cuIEJ1dCBpdCdsbCBtYWtlIHRoZSBt YXBwaW5nIGhhcmRlciwgc28gZm9yIG5vdyB3ZQorCSAqIGlnbm9yZSBpdC4KKwkgKi8KKwlp ZiAobm9kZSA+IFN0cmF0ZWd5Q29udHJvbC0+bnVtX25vZGVzKQorCQllbG9nKEVSUk9SLCAi bm9kZSBvdXQgb2YgcmFuZ2U6ICVkID4gJXUiLCBjcHUsIFN0cmF0ZWd5Q29udHJvbC0+bnVt X25vZGVzKTsKKworCS8qCisJICogRmluZCB0aGUgcGFydGl0aW9uLiBJZiB3ZSBoYXZlIGEg c2luZ2xlIHBhcnRpdGlvbiBwZXIgbm9kZSwgd2UgY2FuCisJICogY2FsY3VsYXRlIHRoZSBp bmRleCBkaXJlY3RseSBmcm9tIG5vZGUuIE90aGVyd2lzZSB3ZSBuZWVkIHRvIGRvIHR3bwor CSAqIHN0ZXBzLCB1c2luZyBub2RlIGFuZCB0aGVuIGNwdS4KKwkgKi8KKwlpZiAoU3RyYXRl Z3lDb250cm9sLT5udW1fcGFydGl0aW9uc19wZXJfbm9kZSA9PSAxKQorCXsKKwkJLyogZmFz dC1wYXRoICovCisJCWluZGV4ID0gKG5vZGUgJSBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0 aXRpb25zKTsKKwl9CisJZWxzZQorCXsKKwkJaW50CQkJaW5kZXhfZ3JvdXAsCisJCQkJCWlu ZGV4X3BhcnQ7CisKKwkJLyogdHdvIHN0ZXBzIC0gY2FsY3VsYXRlIGdyb3VwIGZyb20gbm9k ZSwgcGFydGl0aW9uIGZyb20gY3B1ICovCisJCWluZGV4X2dyb3VwID0gKG5vZGUgJSBTdHJh dGVneUNvbnRyb2wtPm51bV9ub2Rlcyk7CisJCWluZGV4X3BhcnQgPSAoY3B1ICUgU3RyYXRl Z3lDb250cm9sLT5udW1fcGFydGl0aW9uc19wZXJfbm9kZSk7CisKKwkJaW5kZXggPSAoaW5k ZXhfZ3JvdXAgKiBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zX3Blcl9ub2RlKQor CQkJKyBpbmRleF9wYXJ0OworCX0KKworCXJldHVybiBpbmRleDsKIH0KIAogLyoKQEAgLTk0 Nyw3ICsxMDA1LDcgQEAgU3RyYXRlZ3lTaG1lbVNpemUodm9pZCkKIAlTaXplCQlzaXplID0g MDsKIAlpbnQJCQludW1fcGFydGl0aW9uczsKIAotCUJ1ZmZlclBhcnRpdGlvblBhcmFtcygm bnVtX3BhcnRpdGlvbnMpOworCUJ1ZmZlclBhcnRpdGlvblBhcmFtcygmbnVtX3BhcnRpdGlv bnMsIE5VTEwpOwogCiAJLyogc2l6ZSBvZiBsb29rdXAgaGFzaCB0YWJsZSAuLi4gc2VlIGNv bW1lbnQgaW4gU3RyYXRlZ3lJbml0aWFsaXplICovCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUs IEJ1ZlRhYmxlU2htZW1TaXplKE5CdWZmZXJzICsgTlVNX0JVRkZFUl9QQVJUSVRJT05TKSk7 CkBAIC05NzQsOSArMTAzMiwxNyBAQCBTdHJhdGVneUluaXRpYWxpemUoYm9vbCBpbml0KQog ewogCWJvb2wJCWZvdW5kOwogCisJaW50CQkJbnVtX25vZGVzOwogCWludAkJCW51bV9wYXJ0 aXRpb25zOworCWludAkJCW51bV9wYXJ0aXRpb25zX3Blcl9ub2RlOwogCiAJbnVtX3BhcnRp dGlvbnMgPSBCdWZmZXJQYXJ0aXRpb25Db3VudCgpOworCW51bV9ub2RlcyA9IEJ1ZmZlclBh cnRpdGlvbk5vZGVzKCk7CisKKwkvKiBhbHdheXMgYSBtdWx0aXBsZSBvZiBOVU1BIG5vZGVz ICovCisJQXNzZXJ0KG51bV9wYXJ0aXRpb25zICUgbnVtX25vZGVzID09IDApOworCisJbnVt X3BhcnRpdGlvbnNfcGVyX25vZGUgPSAobnVtX3BhcnRpdGlvbnMgLyBudW1fbm9kZXMpOwog CiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSBzaGFyZWQgYnVmZmVyIGxvb2t1cCBoYXNodGFi bGUuCkBAIC0xMDExLDcgKzEwNzcsOCBAQCBTdHJhdGVneUluaXRpYWxpemUoYm9vbCBpbml0 KQogCQkvKiBJbml0aWFsaXplIHRoZSBjbG9jayBzd2VlcCBwb2ludGVycyAoZm9yIGFsbCBw YXJ0aXRpb25zKSAqLwogCQlmb3IgKGludCBpID0gMDsgaSA8IG51bV9wYXJ0aXRpb25zOyBp KyspCiAJCXsKLQkJCWludAkJCW51bV9idWZmZXJzLAorCQkJaW50CQkJbm9kZSwKKwkJCQkJ CW51bV9idWZmZXJzLAogCQkJCQkJZmlyc3RfYnVmZmVyLAogCQkJCQkJbGFzdF9idWZmZXI7 CiAKQEAgLTEwMjAsNyArMTA4Nyw4IEBAIFN0cmF0ZWd5SW5pdGlhbGl6ZShib29sIGluaXQp CiAJCQlwZ19hdG9taWNfaW5pdF91MzIoJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ldLm5l eHRWaWN0aW1CdWZmZXIsIDApOwogCiAJCQkvKiBnZXQgaW5mbyBhYm91dCB0aGUgYnVmZmVy IHBhcnRpdGlvbiAqLwotCQkJQnVmZmVyUGFydGl0aW9uR2V0KGksICZudW1fYnVmZmVycywg JmZpcnN0X2J1ZmZlciwgJmxhc3RfYnVmZmVyKTsKKwkJCUJ1ZmZlclBhcnRpdGlvbkdldChp LCAmbm9kZSwgJm51bV9idWZmZXJzLAorCQkJCQkJCSAgICZmaXJzdF9idWZmZXIsICZsYXN0 X2J1ZmZlcik7CiAKIAkJCS8qCiAJCQkgKiBGSVhNRSBUaGlzIG1heSBub3QgcXVpdGUgcmln aHQsIGJlY2F1c2UgaWYgTkJ1ZmZlcnMgaXMgbm90IGEKQEAgLTEwNTYsNiArMTEyNCw4IEBA IFN0cmF0ZWd5SW5pdGlhbGl6ZShib29sIGluaXQpCiAKIAkJLyogaW5pdGlhbGl6ZSB0aGUg cGFydGl0aW9uZWQgY2xvY2tzd2VlcCAqLwogCQlTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0 aXRpb25zID0gbnVtX3BhcnRpdGlvbnM7CisJCVN0cmF0ZWd5Q29udHJvbC0+bnVtX25vZGVz ID0gbnVtX25vZGVzOworCQlTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zX3Blcl9u b2RlID0gbnVtX3BhcnRpdGlvbnNfcGVyX25vZGU7CiAJfQogCWVsc2UKIAkJQXNzZXJ0KCFp bml0KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRl cnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKaW5k ZXggZDZmYzgzMzM4NTAuLjFkYTJhNDMyMjBhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtOTA2LDYgKzkwNiwxNiBAQAogICBib290X3Zh bCA9PiAndHJ1ZScsCiB9LAogCit7IG5hbWUgPT4gJ2RlYnVnX251bWEnLCB0eXBlID0+ICdz dHJpbmcnLCBjb250ZXh0ID0+ICdQR0NfUE9TVE1BU1RFUicsIGdyb3VwID0+ICdERVZFTE9Q RVJfT1BUSU9OUycsCisgIHNob3J0X2Rlc2MgPT4gJ05VTUEtYXdhcmUgcGFydGl0aW9uaW5n IG9mIHNoYXJlZCBtZW1vcnkuJywKKyAgbG9uZ19kZXNjID0+ICdBbiBlbXB0eSBzdHJpbmcg ZGlzYWJsZXMgTlVNQS1hd2FyZSBwYXJ0aXRpb25pbmcuJywKKyAgZmxhZ3MgPT4gJ0dVQ19M SVNUX0lOUFVUIHwgR1VDX05PVF9JTl9TQU1QTEUnLAorICB2YXJpYWJsZSA9PiAnZGVidWdf bnVtYV9zdHJpbmcnLAorICBib290X3ZhbCA9PiAnIiInLAorICBjaGVja19ob29rID0+ICdj aGVja19kZWJ1Z19udW1hJywKKyAgYXNzaWduX2hvb2sgPT4gJ2Fzc2lnbl9kZWJ1Z19udW1h JywKK30sCisKIHsgbmFtZSA9PiAnc3luY19yZXBsaWNhdGlvbl9zbG90cycsIHR5cGUgPT4g J2Jvb2wnLCBjb250ZXh0ID0+ICdQR0NfU0lHSFVQJywgZ3JvdXAgPT4gJ1JFUExJQ0FUSU9O X1NUQU5EQlknLAogICBzaG9ydF9kZXNjID0+ICdFbmFibGVzIGEgcGh5c2ljYWwgc3RhbmRi eSB0byBzeW5jaHJvbml6ZSBsb2dpY2FsIGZhaWxvdmVyIHJlcGxpY2F0aW9uIHNsb3RzIGZy b20gdGhlIHByaW1hcnkgc2VydmVyLicsCiAgIHZhcmlhYmxlID0+ICdzeW5jX3JlcGxpY2F0 aW9uX3Nsb3RzJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Rh Ymxlcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKaW5kZXggMDBj ODM3NmNmNGQuLmQxN2VlOWNhODYxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Y190YWJsZXMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJs ZXMuYwpAQCAtNTk1LDYgKzU5NSw3IEBAIHN0YXRpYyBjaGFyICpzZXJ2ZXJfdmVyc2lvbl9z dHJpbmc7CiBzdGF0aWMgaW50CXNlcnZlcl92ZXJzaW9uX251bTsKIHN0YXRpYyBjaGFyICpk ZWJ1Z19pb19kaXJlY3Rfc3RyaW5nOwogc3RhdGljIGNoYXIgKnJlc3RyaWN0X25vbnN5c3Rl bV9yZWxhdGlvbl9raW5kX3N0cmluZzsKK3N0YXRpYyBjaGFyICpkZWJ1Z19udW1hX3N0cmlu ZzsKIAogI2lmZGVmIEhBVkVfU1lTTE9HCiAjZGVmaW5lCURFRkFVTFRfU1lTTE9HX0ZBQ0lM SVRZIExPR19MT0NBTDAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BvcnQvcGdfbnVtYS5o IGIvc3JjL2luY2x1ZGUvcG9ydC9wZ19udW1hLmgKaW5kZXggOWQxZWE2ZDBkYjguLjk3MzRh YTMxNWZmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3J0L3BnX251bWEuaAorKysgYi9z cmMvaW5jbHVkZS9wb3J0L3BnX251bWEuaApAQCAtMTcsNiArMTcsMTIgQEAKIGV4dGVybiBQ R0RMTElNUE9SVCBpbnQgcGdfbnVtYV9pbml0KHZvaWQpOwogZXh0ZXJuIFBHRExMSU1QT1JU IGludCBwZ19udW1hX3F1ZXJ5X3BhZ2VzKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgY291bnQs IHZvaWQgKipwYWdlcywgaW50ICpzdGF0dXMpOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBw Z19udW1hX2dldF9tYXhfbm9kZSh2b2lkKTsKK2V4dGVybiBQR0RMTElNUE9SVCBTaXplIHBn X251bWFfcGFnZV9zaXplKHZvaWQpOworZXh0ZXJuIFBHRExMSU1QT1JUIHZvaWQgcGdfbnVt YV9tb3ZlX3RvX25vZGUoY2hhciAqc3RhcnRwdHIsIGNoYXIgKmVuZHB0ciwgaW50IG5vZGUp OworCitleHRlcm4gUEdETExJTVBPUlQgaW50IG51bWFfZmxhZ3M7CisKKyNkZWZpbmUJCU5V TUFfQlVGRkVSUwkJMHgwMQogCiAjaWZkZWYgVVNFX0xJQk5VTUEKIApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmggYi9zcmMvaW5jbHVkZS9zdG9y YWdlL2J1Zl9pbnRlcm5hbHMuaAppbmRleCA3NzZiZTExZGVjMS4uNGFlMGMzMmRmZTUgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oCisrKyBiL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oCkBAIC0yNzUsMTAgKzI3NSwxMCBA QCB0eXBlZGVmIHN0cnVjdCBCdWZmZXJEZXNjCiAgKiBsaW5lIHNpemVkLgogICoKICAqIFhY WDogQXMgdGhpcyBpcyBwcmltYXJpbHkgbWF0dGVycyBpbiBoaWdobHkgY29uY3VycmVudCB3 b3JrbG9hZHMgd2hpY2gKLSAqIHByb2JhYmx5IGFsbCBhcmUgNjRiaXQgdGhlc2UgZGF5cywg YW5kIHRoZSBzcGFjZSB3YXN0YWdlIHdvdWxkIGJlIGEgYml0Ci0gKiBtb3JlIG5vdGljZWFi bGUgb24gMzJiaXQgc3lzdGVtcywgd2UgZG9uJ3QgZm9yY2UgdGhlIHN0cmlkZSB0byBiZSBj YWNoZQotICogbGluZSBzaXplZCBvbiB0aG9zZS4gSWYgc29tZWJvZHkgZG9lcyBhY3R1YWwg cGVyZm9ybWFuY2UgdGVzdGluZywgd2UgY2FuCi0gKiByZWV2YWx1YXRlLgorICogcHJvYmFi bHkgYWxsIGFyZSA2NGJpdCB0aGVzZSBkYXlzLiBXZSBmb3JjZSB0aGUgc3RyaWRlIHRvIGJl IGNhY2hlIGxpbmUKKyAqIHNpemVkIGV2ZW4gb24gMzJiaXQgc3lzdGVtcywgd2hlcmUgdGhl IHNwYWNlIHdhc3RhZ2UgaXMgYmUgYSBiaXQgbW9yZQorICogbm90aWNlYWJsZSwgdG8gYWxs b3cgcGFydGl0aW9uaW5nIG9mIHNoYXJlZCBidWZmZXJzICh3aGljaCByZXF1aXJlcyB0aGUK KyAqIG1lbW9yeSBwYWdlIGJlIGEgbXVsdGlwbGUgb2YgYnVmZmVyIGRlc2NyaXB0b3IpLgog ICoKICAqIE5vdGUgdGhhdCBsb2NhbCBidWZmZXIgZGVzY3JpcHRvcnMgYXJlbid0IGZvcmNl ZCB0byBiZSBhbGlnbmVkIC0gYXMgdGhlcmUncwogICogbm8gY29uY3VycmVudCBhY2Nlc3Mg dG8gdGhvc2UgaXQncyB1bmxpa2VseSB0byBiZSBiZW5lZmljaWFsLgpAQCAtMjg4LDcgKzI4 OCw3IEBAIHR5cGVkZWYgc3RydWN0IEJ1ZmZlckRlc2MKICAqIHBsYXRmb3JtIHdpdGggZWl0 aGVyIDMyIG9yIDEyOCBieXRlIGxpbmUgc2l6ZXMsIGl0J3MgZ29vZCB0byBhbGlnbiB0bwog ICogYm91bmRhcmllcyBhbmQgYXZvaWQgZmFsc2Ugc2hhcmluZy4KICAqLwotI2RlZmluZSBC VUZGRVJERVNDX1BBRF9UT19TSVpFCShTSVpFT0ZfVk9JRF9QID09IDggPyA2NCA6IDEpCisj ZGVmaW5lIEJVRkZFUkRFU0NfUEFEX1RPX1NJWkUJNjQKIAogdHlwZWRlZiB1bmlvbiBCdWZm ZXJEZXNjUGFkZGVkCiB7CkBAIC00OTAsOCArNDkwLDggQEAgZXh0ZXJuIHZvaWQgQXRFT1hh Y3RfTG9jYWxCdWZmZXJzKGJvb2wgaXNDb21taXQpOwogCiBleHRlcm4gaW50CUJ1ZmZlclBh cnRpdGlvbkNvdW50KHZvaWQpOwogZXh0ZXJuIGludAlCdWZmZXJQYXJ0aXRpb25Ob2Rlcyh2 b2lkKTsKLWV4dGVybiB2b2lkIEJ1ZmZlclBhcnRpdGlvbkdldChpbnQgaWR4LCBpbnQgKm51 bV9idWZmZXJzLAorZXh0ZXJuIHZvaWQgQnVmZmVyUGFydGl0aW9uR2V0KGludCBpZHgsIGlu dCAqbm9kZSwgaW50ICpudW1fYnVmZmVycywKIAkJCQkJCQkgICBpbnQgKmZpcnN0X2J1ZmZl ciwgaW50ICpsYXN0X2J1ZmZlcik7Ci1leHRlcm4gdm9pZCBCdWZmZXJQYXJ0aXRpb25QYXJh bXMoaW50ICpudW1fcGFydGl0aW9ucyk7CitleHRlcm4gdm9pZCBCdWZmZXJQYXJ0aXRpb25Q YXJhbXMoaW50ICpudW1fcGFydGl0aW9ucywgaW50ICpudW1fbm9kZXMpOwogCiAjZW5kaWYJ CQkJCQkJLyogQlVGTUdSX0lOVEVSTkFMU19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAppbmRl eCA0ZTdiMWZjZDRhYi4uNTEwMDE4ZGIxMTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAt MTU2LDEwICsxNTYsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVhZEJ1ZmZlcnNPcGVyYXRpb24g UmVhZEJ1ZmZlcnNPcGVyYXRpb247CiAvKgogICogaW5mb3JtYXRpb24gYWJvdXQgb25lIHBh cnRpdGlvbiBvZiBzaGFyZWQgYnVmZmVycwogICoKKyAqIG51bWFfbm9kIHNwZWNpZmllcyBu b2RlIGZvciB0aGlzIHBhcnRpdGlvbiAoLTEgbWVhbnMgYWxsb2NhdGVkIG9uIGFueSBub2Rl KQogICogZmlyc3QvbGFzdCBidWZmZXIgLSB0aGUgdmFsdWVzIGFyZSBpbmNsdXNpdmUKICAq LwogdHlwZWRlZiBzdHJ1Y3QgQnVmZmVyUGFydGl0aW9uCiB7CisJaW50CQkJbnVtYV9ub2Rl OwkJLyogTlVNQSBub2RlICgtMSBubyBub2RlKSAqLwogCWludAkJCW51bV9idWZmZXJzOwkv KiBudW1iZXIgb2YgYnVmZmVycyAqLwogCWludAkJCWZpcnN0X2J1ZmZlcjsJLyogZmlyc3Qg YnVmZmVyIG9mIHBhcnRpdGlvbiAqLwogCWludAkJCWxhc3RfYnVmZmVyOwkvKiBsYXN0IGJ1 ZmZlciBvZiBwYXJ0aXRpb24gKi8KQEAgLTE2OSw2ICsxNzEsNyBAQCB0eXBlZGVmIHN0cnVj dCBCdWZmZXJQYXJ0aXRpb24KIHR5cGVkZWYgc3RydWN0IEJ1ZmZlclBhcnRpdGlvbnMKIHsK IAlpbnQJCQlucGFydGl0aW9uczsJLyogbnVtYmVyIG9mIHBhcnRpdGlvbnMgKi8KKwlpbnQJ CQlubm9kZXM7CQkJLyogbnVtYmVyIG9mIE5VTUEgbm9kZXMgKi8KIAlCdWZmZXJQYXJ0aXRp b24gcGFydGl0aW9uc1tGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwogfSBCdWZmZXJQYXJ0aXRp b25zOwogCkBAIC0zNDYsNiArMzQ5LDcgQEAgZXh0ZXJuIHZvaWQgRXZpY3RSZWxVbnBpbm5l ZEJ1ZmZlcnMoUmVsYXRpb24gcmVsLAogLyogaW4gYnVmX2luaXQuYyAqLwogZXh0ZXJuIHZv aWQgQnVmZmVyTWFuYWdlclNobWVtSW5pdCh2b2lkKTsKIGV4dGVybiBTaXplIEJ1ZmZlck1h bmFnZXJTaG1lbVNpemUodm9pZCk7CitleHRlcm4gaW50CUJ1ZmZlckdldE5vZGUoQnVmZmVy IGJ1ZmZlcik7CiAKIC8qIGluIGxvY2FsYnVmLmMgKi8KIGV4dGVybiB2b2lkIEF0UHJvY0V4 aXRfTG9jYWxCdWZmZXJzKHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMv Z3VjX2hvb2tzLmggYi9zcmMvaW5jbHVkZS91dGlscy9ndWNfaG9va3MuaAppbmRleCA4MmFj ODY0NmE4ZC4uMTUzMDRkZjBkZTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2d1 Y19ob29rcy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2d1Y19ob29rcy5oCkBAIC0xNzUs NCArMTc1LDcgQEAgZXh0ZXJuIGJvb2wgY2hlY2tfc3luY2hyb25pemVkX3N0YW5kYnlfc2xv dHMoY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLAogCQkJCQkJCQkJCQkgR3VjU291cmNl IHNvdXJjZSk7CiBleHRlcm4gdm9pZCBhc3NpZ25fc3luY2hyb25pemVkX3N0YW5kYnlfc2xv dHMoY29uc3QgY2hhciAqbmV3dmFsLCB2b2lkICpleHRyYSk7CiAKK2V4dGVybiBib29sIGNo ZWNrX2RlYnVnX251bWEoY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ug c291cmNlKTsKK2V4dGVybiB2b2lkIGFzc2lnbl9kZWJ1Z19udW1hKGNvbnN0IGNoYXIgKm5l d3ZhbCwgdm9pZCAqZXh0cmEpOworCiAjZW5kaWYJCQkJCQkJLyogR1VDX0hPT0tTX0ggKi8K ZGlmZiAtLWdpdCBhL3NyYy9wb3J0L3BnX251bWEuYyBiL3NyYy9wb3J0L3BnX251bWEuYwpp bmRleCAzMzY4YTQzYTMzOC4uOGVlMGU3ZDIxMWMgMTAwNjQ0Ci0tLSBhL3NyYy9wb3J0L3Bn X251bWEuYworKysgYi9zcmMvcG9ydC9wZ19udW1hLmMKQEAgLTE4LDYgKzE4LDkgQEAKIAog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBvcnQvcGdfbnVtYS5oIgorI2lu Y2x1ZGUgInN0b3JhZ2UvcGdfc2htZW0uaCIKKworaW50CW51bWFfZmxhZ3M7CiAKIC8qCiAg KiBBdCB0aGlzIHBvaW50IHdlIHByb3ZpZGUgc3VwcG9ydCBvbmx5IGZvciBMaW51eCB0aGFu a3MgdG8gbGlibnVtYSwgYnV0IGluCkBAIC0xMDYsNiArMTA5LDM2IEBAIHBnX251bWFfZ2V0 X21heF9ub2RlKHZvaWQpCiAJcmV0dXJuIG51bWFfbWF4X25vZGUoKTsKIH0KIAorLyoKKyAq IHBnX251bWFfbW92ZV90b19ub2RlCisgKgkJbW92ZSBtZW1vcnkgdG8gZGlmZmVyZW50IE5V TUEgbm9kZXMgaW4gbGFyZ2VyIGNodW5rcworICoKKyAqIHN0YXJ0cHRyIC0gc3RhcnQgb2Yg dGhlIHJlZ2lvbiAoc2hvdWxkIGJlIGFsaWduZWQgdG8gcGFnZSBzaXplKQorICogZW5kcHRy IC0gZW5kIG9mIHRoZSByZWdpb24gKGRvZXNuJ3QgbmVlZCB0byBiZSBhbGlnbmVkKQorICog bm9kZSAtIG5vZGUgdG8gbW92ZSB0aGUgbWVtb3J5IHRvCisgKgorICogVGhlICJzdGFydHB0 ciIgaXMgZXhwZWN0ZWQgdG8gYmUgYSBtdWx0aXBsZSBvZiBzeXN0ZW0gbWVtb3J5IHBhZ2Ug c2l6ZSwgYXMKKyAqIGRldGVybWluZWQgYnkgcGdfbnVtYV9wYWdlX3NpemUuCisgKgorICog WFhYIFdlIG9ubHkgZXhwZWN0IHRvIGRvIHRoaXMgZHVyaW5nIHN0YXJ0dXAsIHdoZW4gdGhl IHNoYXJlZCBtZW1vcnkgaXMKKyAqIHN0aWxsIGJlaW5nIHNldHVwLgorICovCit2b2lkCitw Z19udW1hX21vdmVfdG9fbm9kZShjaGFyICpzdGFydHB0ciwgY2hhciAqZW5kcHRyLCBpbnQg bm9kZSkKK3sKKwlTaXplCQlzeiA9IChlbmRwdHIgLSBzdGFydHB0cik7CisKKwlBc3NlcnQo KGludDY0KSBzdGFydHB0ciAlIHBnX251bWFfcGFnZV9zaXplKCkgPT0gMCk7CisKKwkvKgor CSAqIG51bWFfdG9ub2RlX21lbW9yeSBkb2VzIG5vdCBhY3R1YWxseSBjYXVzZSBhIHBhZ2Ug ZmF1bHQsIGFuZCB0aHVzIGRvZXMKKwkgKiBub3QgbG9jYXRlIHRoZSBtZW1vcnkgb24gdGhl IG5vZGUuIFNvIGl0J3MgZmFzdCwgYXQgbGVhc3QgY29tcGFyZWQgdG8KKwkgKiBwZ19udW1h X3F1ZXJ5X3BhZ2VzLCBhbmQgZG9lcyBub3QgbWFrZSBzdGFydHVwIGxvbmdlci4gQnV0IGl0 IGFsc28KKwkgKiBtZWFucyB0aGUgZXhwZW5zaXZlIHBhcnQgaGFwcGVuIGxhdGVyLCBvbiB0 aGUgZmlyc3QgYWNjZXNzLgorCSAqLworCW51bWFfdG9ub2RlX21lbW9yeShzdGFydHB0ciwg c3osIG5vZGUpOworfQorCiAjZWxzZQogCiAvKiBFbXB0eSB3cmFwcGVycyAqLwpAQCAtMTI4 LDQgKzE2MSwzNSBAQCBwZ19udW1hX2dldF9tYXhfbm9kZSh2b2lkKQogCXJldHVybiAwOwog fQogCit2b2lkCitwZ19udW1hX21vdmVfdG9fbm9kZShjaGFyICpzdGFydHB0ciwgY2hhciAq ZW5kcHRyLCBpbnQgbm9kZSkKK3sKKwkvKiB3ZSBkb24ndCBleHBlY3QgdG8gZXZlciBnZXQg aGVyZSBpbiBidWlsZHMgd2l0aG91dCBsaWJudW1hICovCisJQXNzZXJ0KGZhbHNlKTsKK30K KworI2VuZGlmCisKK1NpemUKK3BnX251bWFfcGFnZV9zaXplKHZvaWQpCit7CisJU2l6ZQkJ b3NfcGFnZV9zaXplOworCVNpemUJCWh1Z2VfcGFnZV9zaXplOworCisjaWZkZWYgV0lOMzIK KwlTWVNURU1fSU5GTyBzeXNpbmZvOworCisJR2V0U3lzdGVtSW5mbygmc3lzaW5mbyk7CisJ b3NfcGFnZV9zaXplID0gc3lzaW5mby5kd1BhZ2VTaXplOworI2Vsc2UKKwlvc19wYWdlX3Np emUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7CiAjZW5kaWYKKworCS8qIGFzc3VtZSBodWdl IHBhZ2VzIGdldCB1c2VkLCB1bmxlc3MgSFVHRV9QQUdFU19PRkYgKi8KKwlpZiAoaHVnZV9w YWdlc19zdGF0dXMgIT0gSFVHRV9QQUdFU19PRkYpCisJCUdldEh1Z2VQYWdlU2l6ZSgmaHVn ZV9wYWdlX3NpemUsIE5VTEwpOworCWVsc2UKKwkJaHVnZV9wYWdlX3NpemUgPSAwOworCisJ cmV0dXJuIE1heChvc19wYWdlX3NpemUsIGh1Z2VfcGFnZV9zaXplKTsKK30KLS0gCjIuNTEu MAoK --------------apuxkCRUZ0GRSLZG7S4PIVYY Content-Type: text/x-patch; charset=UTF-8; name="v20251101-0005-clock-sweep-weighted-balancing.patch" Content-Disposition: attachment; filename="v20251101-0005-clock-sweep-weighted-balancing.patch" Content-Transfer-Encoding: base64 RnJvbSA1OWFlZWVjOTI1NDllOTVjNTI0NDZjNTlhMWMxMzA4ZDU0OGQyNzdiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCA2IEF1ZyAyMDI1IDAxOjA5OjU3ICswMjAwClN1YmplY3Q6IFtQQVRDSCB2 MjAyNTExMDEgNS83XSBjbG9jay1zd2VlcDogd2VpZ2h0ZWQgYmFsYW5jaW5nCgpUaGUgcGFy dGl0aW9ucyBtYXkgbm90IGJlIG9mIGV4YWN0bHkgdGhlIHNhbWUgc2l6ZSwgc28gY29uc2lk ZXIgdGhhdAp3aGVuIGJhbGFuY2luZyBjbG9ja3N3ZWVwIGFsbG9jYXRpb25zLgoKTm90ZTog VGhpcyBtYXkgYmUgbW9yZSBpbXBvcnRhbnQgd2l0aCBOVU1BLWF3YXJlIHBhcnRpdGlvbmlu Zywgd2hpY2gKcmVzdHJpY3RzIHRoZSBhbGxvd2VkIHNpemVzIG9mIHBhcnRpaW9ucyAoZXNw ZWNpYWxseSB3aXRoIGh1Z2UgcGFnZXMpLgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVm ZmVyL2ZyZWVsaXN0LmMgfCA2MyArKysrKysrKysrKysrKysrKysrKysrLS0tLS0KIDEgZmls ZSBjaGFuZ2VkLCA1MyBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwppbmRleCAzOGYzMzliMDJjNC4uYzczYTQx OGRlZmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0 LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwpAQCAtNjE5 LDYgKzYxOSwyMCBAQCBTdHJhdGVneVN5bmNCYWxhbmNlKHZvaWQpCiAJCQlhdmdfYWxsb2Nz LAkJCS8qIGF2ZXJhZ2UgYWxsb2NhdGlvbnMgKHBlciBwYXJ0aXRpb24pICovCiAJCQlkZWx0 YV9hbGxvY3MgPSAwOwkvKiBzdW0gb2YgYWxsb2NzIGFib3ZlIGF2ZXJhZ2UgKi8KIAorCS8q CisJICogU2l6ZSBvZiBhIHBhcnRpdGlvbiwgdXNlZCB0byBjYWxjdWxhdGUgd2VpZ2h0ZWQg YXZlcmFnZSAodGhlIGZpcnN0CisJICogcGFydGl0aW9uIGlzIGV4cGVjdGVkIHRvIGJlIHRo ZSBsYXJnZXN0IG9uZSwgYW5kIHNvIHdpbGwgYmUgY291bnRlZAorCSAqIGFzIGEgInVuaXQi IHBhcnRpdGlvbiB3aXRoIHdlaWdodCAxLjApLgorCSAqLworCWludDMyCW51bV9idWZmZXJz ID0gU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbMF0ubnVtQnVmZmVyczsKKworCS8qCisJICog VG90YWwgd2VpZ2h0IG9mIHBhcnRpdGlvbnMuIElmIHRoZSBwYXJ0aXRpb25zIGhhdmUgdGhl IHNhbWUgc2l6ZSwKKwkgKiB0aGUgd2VpZ2h0IHNob3VsZCBiZSBlcXVhbCB0aGUgcGFydGl0 aW9uIGNvdW50IChtb2R1bG8gcm91bmRpbmcKKwkgKiBlcnJvcnMsIGV0Yy4pCisJICovCisJ ZG91YmxlCXdlaWdodCA9IDAuMDsKKwogCS8qCiAJICogQ29sbGVjdCB0aGUgbnVtYmVyIG9m IGFsbG9jYXRpb25zIHJlcXVlc3RlZCBpbiB0aGUgcGFzdCBpbnRlcnZhbC4KIAkgKiBXaGls ZSBhdCBpdCwgcmVzZXQgdGhlIGNvdW50ZXIgdG8gc3RhcnQgdGhlIG5ldyBpbnRlcnZhbC4K QEAgLTY0NSwxNiArNjU5LDI3IEBAIFN0cmF0ZWd5U3luY0JhbGFuY2Uodm9pZCkKIAkJcGdf YXRvbWljX2ZldGNoX2FkZF91NjQoJnN3ZWVwLT5udW1Ub3RhbFJlcXVlc3RlZEFsbG9jcywg YWxsb2NzW2ldKTsKIAogCQl0b3RhbF9hbGxvY3MgKz0gYWxsb2NzW2ldOworCisJCS8qIHdl aWdodCBvZiB0aGUgcGFydGl0aW9uLCByZWxhdGl2ZSB0byB0aGUgInVuaXQiIHBhcnRpdGlv biAqLworCQl3ZWlnaHQgKz0gKHN3ZWVwLT5udW1CdWZmZXJzICogMS4wIC8gbnVtX2J1ZmZl cnMpOwogCX0KIAogCS8qCi0JICogQ2FsY3VsYXRlIHRoZSAiZmFpciBzaGFyZSIgb2YgYWxs b2NhdGlvbnMgcGVyIHBhcnRpdGlvbi4KKwkgKiBYWFggTm90IHN1cmUgaWYgdGhlIHRvdGFs X3dlaWdodCBtaWdodCBleGNlZWQgbnVtX3BhcnRpdGlvbnMgZHVlIHRvCisJICogcm91bmRp bmcgZXJyb3JzLgorCSAqLworCUFzc2VydCgod2VpZ2h0ID4gMC4wKSAmJiAod2VpZ2h0IDw9 IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnMpKTsKKworCS8qCisJICogQ2FsY3Vs YXRlIHRoZSAiZmFpciBzaGFyZSIgb2YgYWxsb2NhdGlvbnMgcGVyIHBhcnRpdGlvbi4gVGhp cyBpcyB0aGUKKwkgKiBudW1iZXIgb2YgYWxsb2NhdGlvbnMgZm9yIHRoZSAidW5pdCIgcGFy dGl0aW9uIHdpdGggbnVtX2J1ZmZlcnMsIHdlJ2xsCisJICogbmVlZCB0byBhZGp1c3QgaXQg dXNpbmcgdGhlIHBlci1wYXJ0aXRpb24gd2VpZ2h0LgogCSAqCiAJICogWFhYIFRoZSBsYXN0 IHBhcnRpdGlvbiBjb3VsZCBiZSBzbWFsbGVyLCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBi ZQogCSAqIGV4cGVjdGVkIHRvIGhhbmRsZSBmZXdlciBhbGxvY2F0aW9ucy4gU28gdGhpcyBz aG91bGQgYmUgYSB3ZWlnaHRlZAogCSAqIGF2ZXJhZ2UuIEJ1dCBmb3Igbm93IGEgc2ltcGxl IGF2ZXJhZ2UgaXMgZ29vZCBlbm91Z2guCiAJICovCi0JYXZnX2FsbG9jcyA9ICh0b3RhbF9h bGxvY3MgLyBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zKTsKKwlhdmdfYWxsb2Nz ID0gKHRvdGFsX2FsbG9jcyAvIHdlaWdodCk7CiAKIAkvKgogCSAqIENhbGN1bGF0ZSB0aGUg ImRlbHRhIiBmcm9tIGJhbGFuY2VkIHN0YXRlLCBpLmUuIGhvdyBtYW55IGFsbG9jYXRpb25z CkBAIC02NjIsOCArNjg3LDE0IEBAIFN0cmF0ZWd5U3luY0JhbGFuY2Uodm9pZCkKIAkgKi8K IAlmb3IgKGludCBpID0gMDsgaSA8IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnM7 IGkrKykKIAl7Ci0JCWlmIChhbGxvY3NbaV0gPiBhdmdfYWxsb2NzKQotCQkJZGVsdGFfYWxs b2NzICs9IChhbGxvY3NbaV0gLSBhdmdfYWxsb2NzKTsKKwkJQ2xvY2tTd2VlcCAqc3dlZXAg PSAmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV07CisKKwkJLyogbnVtYmVyIG9mIGFsbG9j YXRpb25zIGV4cGVjdGVkIGZvciB0aGlzIHBhcnRpdGlvbiAqLworCQlkb3VibGUJcGFydF93 ZWlnaHQgPSAoc3dlZXAtPm51bUJ1ZmZlcnMgKiAxLjAgLyBudW1fYnVmZmVycyk7CisJCXVp bnQzMglwYXJ0X2FsbG9jcyA9IGF2Z19hbGxvY3MgKiBwYXJ0X3dlaWdodDsKKworCQlpZiAo YWxsb2NzW2ldID4gcGFydF9hbGxvY3MpCisJCQlkZWx0YV9hbGxvY3MgKz0gKGFsbG9jc1tp XSAtIHBhcnRfYWxsb2NzKTsKIAl9CiAKIAkvKgpAQCAtNzI2LDYgKzc1NywxMCBAQCBTdHJh dGVneVN5bmNCYWxhbmNlKHZvaWQpCiAJCUNsb2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5 Q29udHJvbC0+c3dlZXBzW2ldOwogCQl1aW50OAkJYmFsYW5jZVtNQVhfQlVGRkVSX1BBUlRJ VElPTlNdOwogCisJCS8qIG51bWJlciBvZiBhbGxvY2F0aW9ucyBleHBlY3RlZCBmb3IgdGhp cyBwYXJ0aXRpb24gKi8KKwkJZG91YmxlCXBhcnRfd2VpZ2h0ID0gKHN3ZWVwLT5udW1CdWZm ZXJzICogMS4wIC8gbnVtX2J1ZmZlcnMpOworCQl1aW50MzIJcGFydF9hbGxvY3MgPSBhdmdf YWxsb2NzICogcGFydF93ZWlnaHQ7CisKIAkJLyogbG9jaywgd2UncmUgZ29pbmcgdG8gbW9k aWZ5IHRoZSBiYWxhbmNlIHdlaWdodHMgKi8KIAkJU3BpbkxvY2tBY3F1aXJlKCZzd2VlcC0+ Y2xvY2tfc3dlZXBfbG9jayk7CiAKQEAgLTczMyw3ICs3NjgsNyBAQCBTdHJhdGVneVN5bmNC YWxhbmNlKHZvaWQpCiAJCW1lbXNldChiYWxhbmNlLCAwLCBzaXplb2YodWludDgpICogTUFY X0JVRkZFUl9QQVJUSVRJT05TKTsKIAogCQkvKiBkb2VzIHRoaXMgcGFydGl0aW9uIGhhcyBm ZXdlciBvciBtb3JlIHRoYW4gYXZnX2FsbG9jcz8gKi8KLQkJaWYgKGFsbG9jc1tpXSA8IGF2 Z19hbGxvY3MpCisJCWlmIChhbGxvY3NbaV0gPCBwYXJ0X2FsbG9jcykKIAkJewogCQkJLyog ZmV3ZXIgLSBkb24ndCByZWRpcmVjdCBhbnkgYWxsb2NhdGlvbnMgZWxzZXdoZXJlICovCiAJ CQliYWxhbmNlW2ldID0gMTAwOwpAQCAtNzQ3LDIyICs3ODIsMzAgQEAgU3RyYXRlZ3lTeW5j QmFsYW5jZSh2b2lkKQogCQkJICogYSBmcmFjdGlvbiBwcm9wb3J0aW9uYWwgdG8gKGV4Y2Vz cy9kZWx0YSkgZnJvbSB0aGlzIG9uZS4KIAkJCSAqLwogCi0JCQkvKiBmcmFjdGlvbiBvZiB0 aGUgInRvdGFsIiBkZWx0YSAqLwotCQkJZG91YmxlCWRlbHRhX2ZyYWMgPSAoYWxsb2NzW2ld IC0gYXZnX2FsbG9jcykgKiAxLjAgLyBkZWx0YV9hbGxvY3M7CisJCQkvKiBmcmFjdGlvbiBv ZiB0aGUgInRvdGFsIiBkZWx0YSByZXByZXNlbnRlZCBieSAiZXhjZXNzIiBhbGxvY2F0aW9u cyAqLworCQkJZG91YmxlCWRlbHRhX2ZyYWMgPSAoYWxsb2NzW2ldIC0gcGFydF9hbGxvY3Mp ICogMS4wIC8gZGVsdGFfYWxsb2NzOwogCiAJCQkvKiBrZWVwIGp1c3QgZW5vdWdoIGFsbG9j YXRpb25zIHRvIG1lZXQgdGhlIHRhcmdldCAqLwotCQkJYmFsYW5jZVtpXSA9ICgxMDAuMCAq IGF2Z19hbGxvY3MgLyBhbGxvY3NbaV0pOworCQkJYmFsYW5jZVtpXSA9ICgxMDAuMCAqIHBh cnRfYWxsb2NzIC8gYWxsb2NzW2ldKTsKIAogCQkJLyogcmVkaXJlY3QgdGhlIGV4dHJhIGFs bG9jYXRpb25zICovCiAJCQlmb3IgKGludCBqID0gMDsgaiA8IFN0cmF0ZWd5Q29udHJvbC0+ bnVtX3BhcnRpdGlvbnM7IGorKykKIAkJCXsKKwkJCQlDbG9ja1N3ZWVwICpzd2VlcDIgPSAm U3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbal07CisKKwkJCQkvKiBudW1iZXIgb2YgYWxsb2Nh dGlvbnMgZXhwZWN0ZWQgZm9yIHRoaXMgcGFydGl0aW9uICovCisJCQkJZG91YmxlCXBhcnRf d2VpZ2h0XzIgPSAoc3dlZXAyLT5udW1CdWZmZXJzICogMS4wIC8gbnVtX2J1ZmZlcnMpOwor CQkJCXVpbnQzMglwYXJ0X2FsbG9jc18yID0gYXZnX2FsbG9jcyAqIHBhcnRfd2VpZ2h0XzI7 CisKIAkJCQkvKiBIb3cgbWFueSBhbGxvY2F0aW9ucyB0byByZWNlaXZlIGZyb20gaS10aCBw YXJ0aXRpb24/ICovCi0JCQkJdWludDMyCXJlY2VpdmVfYWxsb2NzID0gZGVsdGFfZnJhYyAq IChhdmdfYWxsb2NzIC0gYWxsb2NzW2pdKTsKKwkJCQl1aW50MzIJcmVjZWl2ZV9hbGxvY3Mg PSBkZWx0YV9mcmFjICogKHBhcnRfYWxsb2NzXzIgLSBhbGxvY3Nbal0pOwogCiAJCQkJLyog aWdub3JlIHBhcnRpdGlvbnMgdGhhdCBkb24ndCBuZWVkIGFkZGl0aW9uYWwgYWxsb2NhdGlv bnMgKi8KLQkJCQlpZiAoYWxsb2NzW2pdID4gYXZnX2FsbG9jcykKKwkJCQlpZiAoYWxsb2Nz W2pdID4gcGFydF9hbGxvY3NfMikKIAkJCQkJY29udGludWU7CiAKKwkJCQlBc3NlcnQocmVj ZWl2ZV9hbGxvY3MgPj0gMCk7CisKIAkJCQkvKiBmcmFjdGlvbiB0byByZWRpcmVjdCAqLwog CQkJCWJhbGFuY2Vbal0gPSAoMTAwLjAgKiByZWNlaXZlX2FsbG9jcyAvIGFsbG9jc1tpXSkg KyAwLjU7CiAJCQl9Ci0tIAoyLjUxLjAKCg== --------------apuxkCRUZ0GRSLZG7S4PIVYY Content-Type: text/x-patch; charset=UTF-8; name="v20251101-0004-clock-sweep-scan-all-partitions.patch" Content-Disposition: attachment; filename="v20251101-0004-clock-sweep-scan-all-partitions.patch" Content-Transfer-Encoding: base64 RnJvbSBlNDI1MmEyNTU5NDk2OTQ3ZjY4NjJlZTA4NTFhODhkZDJmNTllYTExIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCAxNSBPY3QgMjAyNSAxMzo1OToyOSArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUxMTAxIDQvN10gY2xvY2stc3dlZXA6IHNjYW4gYWxsIHBhcnRpdGlvbnMKCldoZW4g bG9va2luZyBmb3IgYSBmcmVlIGJ1ZmZlciwgc2NhbiBhbGwgY2xvY2stc3dlZXAgcGFydGl0 aW9ucywgbm90Cmp1c3QgdGhlICJob21lIiBvbmUuIEFsbCBidWZmZXJzIGluIHRoZSBob21l IHBhcnRpdGlvbiBtYXkgYmUgcGlubmVkLCBpbgp3aGljaCBjYXNlIHdlIHNob3VsZCBub3Qg ZmFpbC4gSW5zdGVhZCwgYWR2YW5jZSB0byB0aGUgbmV4dCBwYXJ0aXRpb24sCmluIGEgcm91 bmQtcm9iaW4gd2F5LCBhbmQgb25seSBmYWlsIGFmdGVyIHNjYW5uaW5nIHRocm91Z2ggYWxs IG9mIHRoZW0uCi0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYyAg ICAgfCA5MSArKysrKysrKysrKysrKysrLS0tLS0tLQogc3JjL3Rlc3QvcmVjb3ZlcnkvdC8w Mjdfc3RyZWFtX3JlZ3Jlc3MucGwgfCAgNSAtLQogMiBmaWxlcyBjaGFuZ2VkLCA2MyBpbnNl cnRpb25zKCspLCAzMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9z dG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIv ZnJlZWxpc3QuYwppbmRleCA4ODk3ZjJlOWIwZS4uMzhmMzM5YjAyYzQgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwpAQCAtMTY3LDYgKzE2Nyw5IEBAIHN0YXRp YyBCdWZmZXJEZXNjICpHZXRCdWZmZXJGcm9tUmluZyhCdWZmZXJBY2Nlc3NTdHJhdGVneSBz dHJhdGVneSwKIHN0YXRpYyB2b2lkIEFkZEJ1ZmZlclRvUmluZyhCdWZmZXJBY2Nlc3NTdHJh dGVneSBzdHJhdGVneSwKIAkJCQkJCQlCdWZmZXJEZXNjICpidWYpOwogc3RhdGljIENsb2Nr U3dlZXAgKkNob29zZUNsb2NrU3dlZXAoYm9vbCBiYWxhbmNlKTsKK3N0YXRpYyBCdWZmZXJE ZXNjICpTdHJhdGVneUdldEJ1ZmZlclBhcnRpdGlvbihDbG9ja1N3ZWVwICpzd2VlcCwKKwkJ CQkJCQkJCQkJICBCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJCQkJ ICB1aW50MzIgKmJ1Zl9zdGF0ZSk7CiAKIC8qCiAgKiBjbG9ja3N3ZWVwIGFsbG9jYXRpb24g YmFsYW5jaW5nCkBAIC0yMDEsMTAgKzIwNCw5IEBAIHN0YXRpYyBpbnQgY2xvY2tzd2VlcF9j b3VudCA9IDA7CiAgKiBpZCBvZiB0aGUgYnVmZmVyIG5vdyB1bmRlciB0aGUgaGFuZC4KICAq Lwogc3RhdGljIGlubGluZSB1aW50MzIKLUNsb2NrU3dlZXBUaWNrKHZvaWQpCitDbG9ja1N3 ZWVwVGljayhDbG9ja1N3ZWVwICpzd2VlcCkKIHsKIAl1aW50MzIJCXZpY3RpbTsKLQlDbG9j a1N3ZWVwICpzd2VlcCA9IENob29zZUNsb2NrU3dlZXAodHJ1ZSk7CiAKIAkvKgogCSAqIEF0 b21pY2FsbHkgbW92ZSBoYW5kIGFoZWFkIG9uZSBidWZmZXIgLSBpZiB0aGVyZSdzIHNldmVy YWwgcHJvY2Vzc2VzCkBAIC0zNzAsNyArMzcyLDggQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVm ZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQzMiAqYnVmX3N0YXRlLCBib29sICpm cm9tX3IKIHsKIAlCdWZmZXJEZXNjICpidWY7CiAJaW50CQkJYmd3cHJvY25vOwotCWludAkJ CXRyeWNvdW50ZXI7CisJQ2xvY2tTd2VlcCAqc3dlZXAsCisJCQkgICAqc3dlZXBfc3RhcnQ7 CQkvKiBzdGFydGluZyBjbG9jay1zd2VlcCBwYXJ0aXRpb24gKi8KIAogCSpmcm9tX3Jpbmcg PSBmYWxzZTsKIApAQCAtNDI0LDM3ICs0MjcsNjkgQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVm ZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQzMiAqYnVmX3N0YXRlLCBib29sICpm cm9tX3IKIAkvKgogCSAqIFVzZSB0aGUgImNsb2NrIHN3ZWVwIiBhbGdvcml0aG0gdG8gZmlu ZCBhIGZyZWUgYnVmZmVyCiAJICoKLQkgKiBYWFggTm90ZSB0aGF0IENsb2NrU3dlZXBUaWNr KCkgaXMgTlVNQS1hd2FyZSwgaS5lLiBpdCBvbmx5IGxvb2tzIGF0Ci0JICogYnVmZmVycyBm cm9tIGEgc2luZ2xlIHBhcnRpdGlvbiwgYWxpZ25lZCB3aXRoIHRoZSBOVU1BIG5vZGUuIFRo YXQgbWVhbnMKLQkgKiBpdCBvbmx5IGFjY2Vzc2VzIGJ1ZmZlcnMgZnJvbSB0aGUgc2FtZSBO VU1BIG5vZGUuCi0JICoKLQkgKiBYWFggVGhhdCBhbHNvIG1lYW5zIGVhY2ggcHJvY2VzcyAi c3dlZXBzIiBvbmx5IGEgZnJhY3Rpb24gb2YgYnVmZmVycywKLQkgKiBldmVuIGlmIHRoZSBv dGhlciBidWZmZXJzIGFyZSBiZXR0ZXIgY2FuZGlkYXRlcyBmb3IgZXZpY3Rpb24uIE1heWJl Ci0JICogdGhlcmUgc2hvdWxkIGJlIHNvbWUgbG9naWMgdG8gInN0ZWFsIiBidWZmZXJzIGZy b20gb3RoZXIgZnJlZWxpc3RzIG9yCi0JICogb3RoZXIgbm9kZXM/CisJICogU3RhcnQgd2l0 aCB0aGUgInByZWZlcnJlZCIgcGFydGl0aW9uLCBhbmQgdGhlbiBwcm9jZWVkIGluIGEgcm91 bmQtcm9iaW4KKwkgKiBtYW5uZXIuIElmIHdlIGN5Y2xlIGJhY2sgdG8gdGhlIHN0YXJ0aW5n IHBhcnRpdGlvbiwgaXQgbWVhbnMgbm9uZSBvZiB0aGUKKwkgKiBwYXJ0aXRpb25zIGhhcyB1 bnBpbm5lZCBidWZmZXJzLgogCSAqCi0JICogWFhYIFdvdWxkIHRoYXQgYWxzbyBtZWFuIHdl J2QgaGF2ZSBtdWx0aXBsZSBiZ3dyaXRlcnMsIG9uZSBmb3IgZWFjaAotCSAqIG5vZGUsIG9y IHdvdWxkIG9uZSBiZ3dyaXRlciBoYW5kbGUgYWxsIG9mIHRoYXQ/CisJICogWFhYIERvZXMg dGhpcyBuZWVkIHRvIGRvIHNpbWlsYXIgYmFsYW5jaW5nICJiYWxhbmNpbmciIGFzIGZvciBi Z3dyaXRlcgorCSAqIGluIFN0cmF0ZWd5U3luY0JhbGFuY2U/IE1heWJlIGl0J3MgYmUgZW5v dWdoIHRvIHNpbXBseSBwaWNrIHRoZSBpbml0aWFsCisJICogcGFydGl0aW9uIHRoYXQgd2F5 PyBXZSdkIG9ubHkgZ2V0dGluZyBhIHNpbmdsZSBidWZmZXIsIHNvIG5vdCBtdWNoIGNoYW5j ZQorCSAqIHRvIGJhbGFuY2Ugb3ZlciBtYW55IGFsbG9jYXRpb25zLgogCSAqCi0JICogWFhY IFRoaXMgb25seSBzZWFyY2hlcyBhIHNpbmdsZSBwYXJ0aXRpb24sIHdoaWNoIGNhbiByZXN1 bHQgaW4gIm5vCi0JICogdW5waW5uZWQgYnVmZmVycyBhdmFpbGFibGUiIGV2ZW4gaWYgdGhl cmUgYXJlIGJ1ZmZlcnMgaW4gb3RoZXIKLQkgKiBwYXJ0aXRpb25zLiBTaG91bGQgYmUgZml4 ZWQgYnkgZmFsbGluZyBiYWNrIHRvIG90aGVyIHBhcnRpdGlvbnMgaWYKLQkgKiBuZWVkZWQu Ci0JICoKLQkgKiBYWFggQWxzbywgdGhlIHRyeWNvdW50ZXIgc2hvdWxkIG5vdCBiZSBzZXQg dG8gTkJ1ZmZlcnMsIGJ1dCB0byBidWZmZXIKLQkgKiBjb3VudCBmb3IgdGhhdCBvbmUgcGFy dGl0aW9uLiBJbiBmYWN0LCB0aGlzIHNob3VsZCBub3QgY2FsbCBDbG9ja1N3ZWVwVGljawot CSAqIGZvciBldmVyeSBpdGVyYXRpb24uIFRoZSBjYWxsIGlzIGxpa2VseSBxdWl0ZSBleHBl bnNpdmUgKGRvZXMgYSBsb3QKLQkgKiBvZiBzdHVmZiksIGFuZCBhbHNvIG1heSByZXR1cm4g YSBkaWZmZXJlbnQgcGFydGl0aW9uIG9uIGVhY2ggY2FsbC4KLQkgKiBXZSBzaG91bGQganVz dCBkbyBpdCBvbmNlLCBhbmQgdGhlbiBkbyB0aGUgZm9yKDs7KSBsb29wLiBBbmQgdGhlbgot CSAqIG1heWJlIGFkdmFuY2UgdG8gdGhlIG5leHQgcGFydGl0aW9uLCB1bnRpbCB3ZSBzY2Fu IHRocm91Z2ggYWxsIG9mIHRoZW0uCisJICogWFhYIEJ1dCBhY3R1YWxseSwgd2UncmUgY2Fs bGluZyBDaG9vc2VDbG9ja1N3ZWVwKCkgd2l0aCBiYWxhbmNlPXRydWUsIHNvCisJICogbWF5 YmUgaXQgYWxyZWFkeSBkb2VzIGJhbGFuY2luZz8KIAkgKi8KLQl0cnljb3VudGVyID0gTkJ1 ZmZlcnM7CisJc3dlZXAgPSBDaG9vc2VDbG9ja1N3ZWVwKHRydWUpOworCXN3ZWVwX3N0YXJ0 ID0gc3dlZXA7CisJZm9yICg7OykKKwl7CisJCWJ1ZiA9IFN0cmF0ZWd5R2V0QnVmZmVyUGFy dGl0aW9uKHN3ZWVwLCBzdHJhdGVneSwgYnVmX3N0YXRlKTsKKworCQkvKiBmb3VuZCBhIGJ1 ZmZlciBpbiB0aGUgInN3ZWVwIiBwYXJ0aXRpb24sIHdlJ3JlIGRvbmUgKi8KKwkJaWYgKGJ1 ZiAhPSBOVUxMKQorCQkJcmV0dXJuIGJ1ZjsKKworCQkvKgorCQkgKiBUcnkgYWR2YW5jaW5n IHRvIHRoZSBuZXh0IHBhcnRpdGlvbiwgcm91bmQtcm9iaW4gKGlmIGxhc3QgcGFydGl0aW9u LAorCQkgKiB3cmFwIGFyb3VuZCB0byB0aGUgYmVnaW5uaW5nKS4KKwkJICoKKwkJICogWFhY IFRoaXMgaXMgYSBiaXQgdWdseSwgdGhlcmUgbXVzdCBiZSBhIGJldHRlciB3YXkgdG8gYWR2 YW5jZSB0byB0aGUKKwkJICogbmV4dCBwYXJ0aXRpb24uCisJCSAqLworCQlpZiAoc3dlZXAg PT0gJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW1N0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRp dGlvbnMgLSAxXSkKKwkJCXN3ZWVwID0gU3RyYXRlZ3lDb250cm9sLT5zd2VlcHM7CisJCWVs c2UKKwkJCXN3ZWVwKys7CisKKwkJLyogd2UndmUgc2Nhbm5lZCBhbGwgcGFydGl0aW9ucyAq LworCQlpZiAoc3dlZXAgPT0gc3dlZXBfc3RhcnQpCisJCQlicmVhazsKKwl9CisKKwkvKiB3 ZSBzaG91bGRuJ3QgZ2V0IGhlcmUgaWYgdGhlcmUgYXJlIHVucGlubmVkIGJ1ZmZlcnMgKi8K KwllbG9nKEVSUk9SLCAibm8gdW5waW5uZWQgYnVmZmVycyBhdmFpbGFibGUiKTsKK30KKwor LyoKKyAqIFN0cmF0ZWd5R2V0QnVmZmVyUGFydGl0aW9uCisgKgkJZ2V0IGEgZnJlZSBidWZm ZXIgZnJvbSBhIHNpbmdsZSBjbG9jay1zd2VlcCBwYXJ0aXRpb24KKyAqCisgKiBSZXR1cm5z IE5VTEwgaWYgdGhlcmUgYXJlIG5vIGZyZWUgKHVucGlubmVkKSBidWZmZXJzIGluIHRoZSBw YXJ0aXRpb24uCisqLworc3RhdGljIEJ1ZmZlckRlc2MgKgorU3RyYXRlZ3lHZXRCdWZmZXJQ YXJ0aXRpb24oQ2xvY2tTd2VlcCAqc3dlZXAsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0 ZWd5LAorCQkJCQkJICAgdWludDMyICpidWZfc3RhdGUpCit7CisJQnVmZmVyRGVzYyAqYnVm OworCWludAkJCXRyeWNvdW50ZXI7CisKKwl0cnljb3VudGVyID0gc3dlZXAtPm51bUJ1ZmZl cnM7CiAJZm9yICg7OykKIAl7CiAJCXVpbnQzMgkJb2xkX2J1Zl9zdGF0ZTsKIAkJdWludDMy CQlsb2NhbF9idWZfc3RhdGU7CiAKLQkJYnVmID0gR2V0QnVmZmVyRGVzY3JpcHRvcihDbG9j a1N3ZWVwVGljaygpKTsKKwkJYnVmID0gR2V0QnVmZmVyRGVzY3JpcHRvcihDbG9ja1N3ZWVw VGljayhzd2VlcCkpOwogCiAJCS8qCiAJCSAqIENoZWNrIHdoZXRoZXIgdGhlIGJ1ZmZlciBj YW4gYmUgdXNlZCBhbmQgcGluIGl0IGlmIHNvLiBEbyB0aGlzCkBAIC00ODIsNyArNTE3LDcg QEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVp bnQzMiAqYnVmX3N0YXRlLCBib29sICpmcm9tX3IKIAkJCQkJICogb25lIGV2ZW50dWFsbHks IGJ1dCBpdCdzIHByb2JhYmx5IGJldHRlciB0byBmYWlsIHRoYW4KIAkJCQkJICogdG8gcmlz ayBnZXR0aW5nIHN0dWNrIGluIGFuIGluZmluaXRlIGxvb3AuCiAJCQkJCSAqLwotCQkJCQll bG9nKEVSUk9SLCAibm8gdW5waW5uZWQgYnVmZmVycyBhdmFpbGFibGUiKTsKKwkJCQkJcmV0 dXJuIE5VTEw7CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJfQpAQCAtNTAwLDcgKzUzNSw3IEBA IFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1aW50 MzIgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJvbV9yCiAJCQkJaWYgKHBnX2F0b21pY19jb21wYXJl X2V4Y2hhbmdlX3UzMigmYnVmLT5zdGF0ZSwgJm9sZF9idWZfc3RhdGUsCiAJCQkJCQkJCQkJ CQkgICBsb2NhbF9idWZfc3RhdGUpKQogCQkJCXsKLQkJCQkJdHJ5Y291bnRlciA9IE5CdWZm ZXJzOworCQkJCQl0cnljb3VudGVyID0gc3dlZXAtPm51bUJ1ZmZlcnM7CiAJCQkJCWJyZWFr OwogCQkJCX0KIAkJCX0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDI3X3N0 cmVhbV9yZWdyZXNzLnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMjdfc3RyZWFtX3JlZ3Jl c3MucGwKaW5kZXggOThiMTQ2ZWQ0YjcuLjU4OWM3OWQ5N2QzIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWNvdmVyeS90LzAyN19zdHJlYW1fcmVncmVzcy5wbAorKysgYi9zcmMvdGVzdC9y ZWNvdmVyeS90LzAyN19zdHJlYW1fcmVncmVzcy5wbApAQCAtMTgsMTEgKzE4LDYgQEAgJG5v ZGVfcHJpbWFyeS0+YWRqdXN0X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdtYXhfY29ubmVj dGlvbnMnLCAnMjUnKTsKICRub2RlX3ByaW1hcnktPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3Fs LmNvbmYnLAogCSdtYXhfcHJlcGFyZWRfdHJhbnNhY3Rpb25zID0gMTAnKTsKIAotIyBUaGUg ZGVmYXVsdCBpcyAxTUIsIHdoaWNoIGlzIG5vdCBlbm91Z2ggd2l0aCBjbG9jay1zd2VlcCBw YXJ0aXRpb25pbmcuCi0jIEluY3JlYXNlIHRvIDMyTUIsIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0 ICJubyB1bnBpbm5lZCBidWZmZXJzIi4KLSRub2RlX3ByaW1hcnktPmFwcGVuZF9jb25mKCdw b3N0Z3Jlc3FsLmNvbmYnLAotCSdzaGFyZWRfYnVmZmVycyA9IDMyTUInKTsKLQogIyBFbmFi bGUgcGdfc3RhdF9zdGF0ZW1lbnRzIHRvIGZvcmNlIHRlc3RzIHRvIGRvIHF1ZXJ5IGp1bWJs aW5nLgogIyBwZ19zdGF0X3N0YXRlbWVudHMubWF4IHNob3VsZCBiZSBsYXJnZSBlbm91Z2gg dG8gaG9sZCBhbGwgdGhlIGVudHJpZXMKICMgb2YgdGhlIHJlZ3Jlc3Npb24gZGF0YWJhc2Uu Ci0tIAoyLjUxLjAKCg== --------------apuxkCRUZ0GRSLZG7S4PIVYY Content-Type: text/x-patch; charset=UTF-8; name="v20251101-0003-clock-sweep-balancing-of-allocations.patch" Content-Disposition: attachment; filename*0="v20251101-0003-clock-sweep-balancing-of-allocations.patch" Content-Transfer-Encoding: base64 RnJvbSBhMmNiNjRiOTdkMTdiZjI3MWVjMGFhOTQ5NjYwMWIxZDY0NGE5NGUyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCAyOSBPY3QgMjAyNSAyMTo0NTozNCArMDEwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUxMTAxIDMvN10gY2xvY2stc3dlZXA6IGJhbGFuY2luZyBvZiBhbGxvY2F0aW9ucwoK SWYgYmFja2VuZHMgb25seSBhbGxvY2F0ZSBidWZmZXJzIGZyb20gdGhlICJob21lIiBwYXJ0 aXRpb24sIHRoYXQgbWF5CmNhdXNlIHNpZ25pZmljYW50IG1pc2JhbGFuY2UuIFNvbWUgcGFy dGl0aW9ucyBtaWdodCBiZSBvdmVydXNlZCwgd2hpbGUKb3RoZXIgcGFydGl0aW9ucyB3b3Vs ZCBiZSBsZWZ0IHVudXNlZC4gSW4gb3RoZXIgd29yZHMsIHNoYXJlZCBidWZmZXJzCndvdWxk IG5vdCBiZSB1c2VkIGVmZmljaWVudGx5LgoKV2Ugd2FudCBhbGwgcGFydGl0aW9ucyB0byBi ZSB1c2VkIGFib3V0IHRoZSBzYW1lLCBpLmUuIHNlcnZlIGFib3V0IHRoZQpzYW1lIG51bWJl ciBvZiBhbGxvY2F0aW9ucy4gVG8gYWNoaWV2ZSB0aGF0LCBhbGxvY2F0aW9ucyBmcm9tIHBh cnRpdGlvbnMKdGhhdCBhcmUgInRvbyBidXN5IiBtYXkgZ2V0IHJlZGlyZWN0ZWQgdG8gb3Ro ZXIgcGFydGl0aW9ucy4gVGhlIHN5c3RlbQpjb3VudHMgYWxsb2NhdGlvbnMgcmVxdWVzdGVk IGZyb20gZWFjaCBwYXJ0aXRpb24sIGNhbGN1bGF0ZXMgdGhlICJmYWlyCnNoYXJlIiAoYXZl cmFnZSBwZXIgcGFydGl0aW9uKSwgYW5kIHRoZW4gcmVkaXJlY3RzZXhjZXNzIGFsbG9jYXRp b25zIHRvCm90aGVyIHBhcnRpdGlvbnMuCgpFYWNoIHBhcnRpdGlvbiBnZXRzIGEgc2V0IG9m IGNvZWZmaWNpZW50cyBkZXRlcm1pbmluZyB0aGUgZnJhY3Rpb24gb2YKYWxsb2NhdGlvbnMg dG8gcmVkaXJlY3QgdG8gb3RoZXIgcGFydGl0aW9ucy4gVGhlIGNvZWZmaWNpZW50cyBtYXkg YmUKaW50ZXJwcmV0ZWQgYXMgYSAiYnVkZ2V0IiBmb3IgZWFjaCBvZiB0aGUgcGFydGl0aW9u LCBpLmUuIHRoZSBudW1iZXIgb2YKYWxsb2NhdGlvbnMgdG8gc2VydmUgZnJvbSB0aGF0IHBh cnRpdGlvbiwgYmVmb3JlIG1vdmluZyB0byB0aGUgbmV4dApwYXJ0aXRpb24gKGluIGEgcm91 bmQtcm9iaW4gbWFubmVyKS4KCkFsbCBvZiB0aGlzIGlzIHRpZWQgdG8gdGhlIHBhcnRpdGlv biB3aGVyZSB0aGUgYWxsb2NhdGlvbiB3YXMgcmVxdWVzdGVkLgpFYWNoIHBhcnRpdGlvbiBo YXMgYSBzZXBhcmF0ZSBzZXQgb2YgY29lZmZpY2llbnRzLgoKV2UgbWlnaHQgYWxzbyB0cmVh dCB0aGUgY29lZmZpY2llbnRzIGFzIHByb2JhYmlsaXRpZXMsIGFuZCB1c2UgUFJORyB0bwpk ZXRlcm1pbmUgd2hlcmUgdG8gZGlyZWN0IGluZGl2aWR1YWwgcmVxdWVzdHMuIEJ1dCBhIFBS Tkcgc2VlbXMgZmFpcmx5CmV4cGVuc2l2ZSwgYW5kIHRoZSBidWRnZXQgYXBwcm9hY2ggd29y a3Mgd2VsbC4KCldlIGludGVudGlvbmFsbHkga2VlcCB0aGUgImJ1ZGdldCIgZmFpcmx5IGxv dywgd2l0aCB0aGUgc3VtIGZvciBhIGdpdmVuCnBhcnRpdGlvbiAxMDAuIFRoYXQgbWVhbnMg d2UgZ2V0IHRvIHRoZSBzYW1lIHBhcnRpdGlvbiBhZnRlciBvbmx5IDEwMAphbGxvY2F0aW9u cywga2VlcGluZyBpdCBtb3JlIGJhbGFuY2VkLiBJdCB3b3VsZG4ndCBiZSBoYXJkIHRvIG1h a2UgdGhlCmJ1ZGdldHMgaGlnaGVyIChlLmcuIG1hdGNoaW5nIHRoZSBudW1iZXIgb2YgYWxs b2NhdGlvbnMgcGVyIHJvdW5kKSwgYnV0Cml0IG1pZ2h0IGFsc28gbWFrZSB0aGUgYmVoYXZp b3IgbGVzcyBzbW9vdGggKGxvbmcgcGVyaW9kIG9mIGFsbG9jYXRpb25zCmZyb20gZWFjaCBw YXJ0aXRpb24pLgoKVGhpcyBpcyB2ZXJ5IHNpbXBsZS9jaGVhcCwgYW5kIG92ZXIgbWFueSBh bGxvY2F0aW9ucyBpdCBoYXMgdGhlIHNhbWUKZWZmZWN0LiBGb3IgcGVyaW9kcyBvZiBsb3cg YWN0aXZpdHkgaXQgbWF5IGRpdmVyZ2UsIGJ1dCB0aGF0IGRvZXMgbm90Cm1hdHRlciBtdWNo ICh3ZSBjYXJlIGFib3V0IGhpZ2gtYWN0aXZpdHkgcGVyaW9kcyBtdWNoIG1vcmUpLgotLS0K IC4uLi9wZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsICAgICAgICAgICAgICB8ICAgNSAr LQogY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jIHwgIDQz ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyAgICAgICAgICAgfCAg IDMgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYyAgICAgICAgIHwg Mzc3ICsrKysrKysrKysrKysrKysrLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJu YWxzLmggICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgg ICAgICAgICAgICAgICAgICB8ICAxMiArLQogNiBmaWxlcyBjaGFuZ2VkLCA0MTkgaW5zZXJ0 aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZm ZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsIGIvY29udHJpYi9wZ19idWZm ZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsCmluZGV4IDE0ZTc1MGJlZWZm Li4yYzRkNTYwNTE0ZCAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19i dWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsCisrKyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUv cGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbApAQCAtMjEsNyArMjEsMTAgQEAgQ1JFQVRF IFZJRVcgcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyBBUwogCSBudW1fcGFzc2VzIGJpZ2lu dCwJCQktLSBjbG9ja3N3ZWVwIHBhc3NlcwogCSBuZXh0X2J1ZmZlciBpbnRlZ2VyLAkJLS0g bmV4dCB2aWN0aW0gYnVmZmVyIGZvciBjbG9ja3N3ZWVwCiAJIHRvdGFsX2FsbG9jcyBiaWdp bnQsCQktLSBoYW5kbGVkIGFsbG9jcyAocnVubmluZyB0b3RhbCkKLQkgbnVtX2FsbG9jcyBi aWdpbnQpOwkJLS0gaGFuZGxlZCBhbGxvY3MgKGN1cnJlbnQgY3ljbGUpCisJIG51bV9hbGxv Y3MgYmlnaW50LAkJCS0tIGhhbmRsZWQgYWxsb2NzIChjdXJyZW50IGN5Y2xlKQorCSB0b3Rh bF9yZXFfYWxsb2NzIGJpZ2ludCwJLS0gcmVxdWVzdGVkIGFsbG9jcyAocnVubmluZyB0b3Rh bCkKKwkgbnVtX3JlcV9hbGxvY3MgYmlnaW50LAkJLS0gaGFuZGxlZCBhbGxvY3MgKGN1cnJl bnQgY3ljbGUpCisJIHdlaWdodHMgaW50W10pOwkJCS0tIGJhbGFuY2luZyB3ZWlnaHRzCiAK IC0tIERvbid0IHdhbnQgdGhlc2UgdG8gYmUgYXZhaWxhYmxlIHRvIHB1YmxpYy4KIFJFVk9L RSBBTEwgT04gRlVOQ1RJT04gcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucygpIEZST00gUFVC TElDOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNo ZV9wYWdlcy5jIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdl cy5jCmluZGV4IDk2ZWVlMjE5MzJmLi5iMGI5MTEyZmRiYSAxMDA2NDQKLS0tIGEvY29udHJp Yi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jCisrKyBiL2NvbnRyaWIv cGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYwpAQCAtMTUsNiArMTUsOCBA QAogI2luY2x1ZGUgInBvcnQvcGdfbnVtYS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmX2lu dGVybmFscy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAidXRp bHMvYXJyYXkuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0 aWxzL3JlbC5oIgogCiAKQEAgLTI3LDcgKzI5LDcgQEAKICNkZWZpbmUgTlVNX0JVRkZFUkNB Q0hFX0VWSUNUX0FMTF9FTEVNIDMKIAogI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfTlVNQV9F TEVNCTMKLSNkZWZpbmUgTlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTQk4CisjZGVm aW5lIE5VTV9CVUZGRVJDQUNIRV9QQVJUSVRJT05TX0VMRU0JMTEKIAogUEdfTU9EVUxFX01B R0lDX0VYVCgKIAkJCQkJLm5hbWUgPSAicGdfYnVmZmVyY2FjaGUiLApAQCAtNzk1LDYgKzc5 Nyw4IEBAIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAog CWlmIChTUkZfSVNfRklSU1RDQUxMKCkpCiAJeworCQlUeXBlQ2FjaGVFbnRyeSAqdHlwZW50 cnkgPSBsb29rdXBfdHlwZV9jYWNoZShJTlQ0T0lELCAwKTsKKwogCQlmdW5jY3R4ID0gU1JG X0ZJUlNUQ0FMTF9JTklUKCk7CiAKIAkJLyogU3dpdGNoIGNvbnRleHQgd2hlbiBhbGxvY2F0 aW5nIHN0dWZmIHRvIGJlIHVzZWQgaW4gbGF0ZXIgY2FsbHMgKi8KQEAgLTgyNCw2ICs4Mjgs MTIgQEAgcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQkJ CQkJICAgSU5UOE9JRCwgLTEsIDApOwogCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNj LCAoQXR0ck51bWJlcikgOCwgIm51bV9hbGxvY3MiLAogCQkJCQkJICAgSU5UOE9JRCwgLTEs IDApOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgMTAs ICJ0b3RhbF9yZXFfYWxsb2NzIiwKKwkJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKKwkJVHVw bGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDExLCAibnVtX3JlcV9h bGxvY3MiLAorCQkJCQkJICAgSU5UOE9JRCwgLTEsIDApOworCQlUdXBsZURlc2NJbml0RW50 cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgMTIsICJ3ZWlndGhzIiwKKwkJCQkJCSAgIHR5 cGVudHJ5LT50eXBhcnJheSwgLTEsIDApOwogCiAJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IEJs ZXNzVHVwbGVEZXNjKHR1cGxlZGVzYyk7CiAKQEAgLTg0NCwxMSArODU0LDE3IEBAIHBnX2J1 ZmZlcmNhY2hlX3BhcnRpdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJZmlyc3RfYnVm ZmVyLAogCQkJCQlsYXN0X2J1ZmZlcjsKIAotCQl1aW50NjQJCWJ1ZmZlcl90b3RhbF9hbGxv Y3M7CisJCXVpbnQ2NAkJYnVmZmVyX3RvdGFsX2FsbG9jcywKKwkJCQkJYnVmZmVyX3RvdGFs X3JlcV9hbGxvY3M7CiAKIAkJdWludDMyCQljb21wbGV0ZV9wYXNzZXMsCiAJCQkJCW5leHRf dmljdGltX2J1ZmZlciwKLQkJCQkJYnVmZmVyX2FsbG9jczsKKwkJCQkJYnVmZmVyX2FsbG9j cywKKwkJCQkJYnVmZmVyX3JlcV9hbGxvY3M7CisKKwkJaW50CQkgICAqd2VpZ2h0czsKKwkJ RGF0dW0JICAgKmR3ZWlnaHRzOworCQlBcnJheVR5cGUgICphcnJheTsKIAogCQlEYXR1bQkJ dmFsdWVzW05VTV9CVUZGRVJDQUNIRV9QQVJUSVRJT05TX0VMRU1dOwogCQlib29sCQludWxs c1tOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19FTEVNXTsKQEAgLTg1Nyw4ICs4NzMsMTYg QEAgcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQkJCQkJ ICAgJmZpcnN0X2J1ZmZlciwgJmxhc3RfYnVmZmVyKTsKIAogCQlDbG9ja1N3ZWVwUGFydGl0 aW9uR2V0SW5mbyhpLAotCQkJCQkJCQkgICAmY29tcGxldGVfcGFzc2VzLCAmbmV4dF92aWN0 aW1fYnVmZmVyLAotCQkJCQkJCQkgICAmYnVmZmVyX3RvdGFsX2FsbG9jcywgJmJ1ZmZlcl9h bGxvY3MpOworCQkJCQkJCQkgJmNvbXBsZXRlX3Bhc3NlcywgJm5leHRfdmljdGltX2J1ZmZl ciwKKwkJCQkJCQkJICZidWZmZXJfdG90YWxfYWxsb2NzLCAmYnVmZmVyX2FsbG9jcywKKwkJ CQkJCQkJICZidWZmZXJfdG90YWxfcmVxX2FsbG9jcywgJmJ1ZmZlcl9yZXFfYWxsb2NzLAor CQkJCQkJCQkgJndlaWdodHMpOworCisJCWR3ZWlnaHRzID0gcGFsbG9jX2FycmF5KERhdHVt LCBmdW5jY3R4LT5tYXhfY2FsbHMpOworCQlmb3IgKGludCBpID0gMDsgaSA8IGZ1bmNjdHgt Pm1heF9jYWxsczsgaSsrKQorCQkJZHdlaWdodHNbaV0gPSBJbnQzMkdldERhdHVtKHdlaWdo dHNbaV0pOworCisJCWFycmF5ID0gY29uc3RydWN0X2FycmF5X2J1aWx0aW4oZHdlaWdodHMs IGZ1bmNjdHgtPm1heF9jYWxscywgSU5UNE9JRCk7CiAKIAkJdmFsdWVzWzBdID0gSW50MzJH ZXREYXR1bShpKTsKIAkJbnVsbHNbMF0gPSBmYWxzZTsKQEAgLTg4NCw2ICs5MDgsMTUgQEAg cGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQl2YWx1ZXNb N10gPSBJbnQ2NEdldERhdHVtKGJ1ZmZlcl9hbGxvY3MpOwogCQludWxsc1s3XSA9IGZhbHNl OwogCisJCXZhbHVlc1s4XSA9IEludDY0R2V0RGF0dW0oYnVmZmVyX3RvdGFsX3JlcV9hbGxv Y3MpOworCQludWxsc1s4XSA9IGZhbHNlOworCisJCXZhbHVlc1s5XSA9IEludDY0R2V0RGF0 dW0oYnVmZmVyX3JlcV9hbGxvY3MpOworCQludWxsc1s5XSA9IGZhbHNlOworCisJCXZhbHVl c1sxMF0gPSBQb2ludGVyR2V0RGF0dW0oYXJyYXkpOworCQludWxsc1sxMF0gPSBmYWxzZTsK KwogCQkvKiBCdWlsZCBhbmQgcmV0dXJuIHRoZSB0dXBsZS4gKi8KIAkJdHVwbGUgPSBoZWFw X2Zvcm1fdHVwbGUoKFR1cGxlRGVzYykgZnVuY2N0eC0+dXNlcl9mY3R4LCB2YWx1ZXMsIG51 bGxzKTsKIAkJcmVzdWx0ID0gSGVhcFR1cGxlR2V0RGF0dW0odHVwbGUpOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCAxNWNhNmY2MGQ1Ny4uMTc2YTZlNjM1OGMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCisrKyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCkBAIC0zOTEzLDYgKzM5MTMs OSBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkKIAkvKiBh c3N1bWUgd2UgY2FuIGhpYmVybmF0ZSwgYW55IHBhcnRpdGlvbiBjYW4gc2V0IHRvIGZhbHNl ICovCiAJYm9vbAkJaGliZXJuYXRlID0gdHJ1ZTsKIAorCS8qIHRyaWdnZXIgcGFydGl0aW9u IHJlYmFsYW5jaW5nIGZpcnN0ICovCisJU3RyYXRlZ3lTeW5jQmFsYW5jZSgpOworCiAJLyog Z2V0IHRoZSBudW1iZXIgb2YgY2xvY2tzd2VlcCBwYXJ0aXRpb25zLCBhbmQgdG90YWwgYWxs b2MgY291bnQgKi8KIAlTdHJhdGVneVN5bmNQcmVwYXJlKCZudW1fcGFydGl0aW9ucywgJnJl Y2VudF9hbGxvYyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVy L2ZyZWVsaXN0LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jCmlu ZGV4IDFkMmY5N2I0ZDFhLi44ODk3ZjJlOWIwZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9mcmVlbGlzdC5jCkBAIC0zNCw2ICszNCwyMyBAQAogI2RlZmluZSBJTlRfQUNDRVNT X09OQ0UodmFyKQkoKGludCkoKigodm9sYXRpbGUgaW50ICopJih2YXIpKSkpCiAKIAorLyoK KyAqIFhYWCBuZWVkZWQgZm9yIG1ha2UgQ2xvY2tTd2VlcCBmaXhlZC1zaXplLCBzaG91bGQg YmUgdGllZCB0byB0aGUgbnVtYmVyCisgKiBvZiBidWZmZXIgcGFydGl0aW9ucyAoYnVmbWdy LmMgYWxyZWFkeSBoYXMgTUFYX0NMT0NLU1dFRVBfUEFSVElUSU9OUywgc28KKyAqIGF0IGxl YXN0IHNldCBpdCB0byB0aGUgc2FtZSB2YWx1ZSkuCisgKi8KKyNkZWZpbmUgTUFYX0JVRkZF Ul9QQVJUSVRJT05TCQkzMgorCisvKgorICogQ29lZmZpY2llbnQgdXNlZCB0byBjb21iaW5l IHRoZSBvbGQgYW5kIG5ldyBiYWxhbmNlIGNvZWZmaWNpZW50cywgdXNpbmcKKyAqIHdlaWdo dGVkIGF2ZXJhZ2UuIFRoZSBoaWdoZXIgdGhlIHZhbHVlLCB0aGUgbW9yZSB0aGUgb2xkIHZh bHVlIGFmZmVjdHMgdGhlCisgKiByZXN1bHQuCisgKgorICogWFhYIERvZXNuJ3QgdGhpcyBp bnZhbGlkYXRlIHRoZSBpbnRlcnByZXRhdGlvbiBhcyBhIHByb2JhYmlsaXR5IHRvIGFsbG9j YXRlCisgKiBmcm9tIGEgZ2l2ZW4gcGFydGl0aW9uPyBEb2VzIGl0IHN0aWxsIHN1bSB0byAx MDAlPworICovCisjZGVmaW5lIENMT0NLU1dFRVBfSElTVE9SWV9DT0VGRgkwLjUKKwogLyoK ICAqIEluZm9ybWF0aW9uIGFib3V0IG9uZSBwYXJ0aXRpb24gb2YgdGhlIENsb2NrU3dlZXAg KG9uIGEgc3Vic2V0IG9mIGJ1ZmZlcnMpLgogICoKQEAgLTY2LDkgKzgzLDI4IEBAIHR5cGVk ZWYgc3RydWN0CiAJdWludDMyCQljb21wbGV0ZVBhc3NlczsgLyogQ29tcGxldGUgY3ljbGVz IG9mIHRoZSBjbG9jay1zd2VlcCAqLwogCXBnX2F0b21pY191aW50MzIgbnVtQnVmZmVyQWxs b2NzOwkvKiBCdWZmZXJzIGFsbG9jYXRlZCBzaW5jZSBsYXN0IHJlc2V0ICovCiAKKwkvKgor CSAqIEJ1ZmZlcnMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBpbiB0aGlzIHBh cnRpdGlvbiAoYnV0IG1pZ2h0CisJICogaGF2ZSBiZWVuIHJlZGlyZWN0ZWQgdG8ga2VlcCBh bGxvY2F0aW9ucyBiYWxhbmNlZCkuCisJICovCisJcGdfYXRvbWljX3VpbnQzMiBudW1SZXF1 ZXN0ZWRBbGxvY3M7CisKIAkvKiBydW5uaW5nIHRvdGFsIG9mIGFsbG9jcyAqLwogCXBnX2F0 b21pY191aW50NjQgbnVtVG90YWxBbGxvY3M7CisJcGdfYXRvbWljX3VpbnQ2NCBudW1Ub3Rh bFJlcXVlc3RlZEFsbG9jczsKIAorCS8qCisJICogV2VpZ2h0cyB0byBiYWxhbmNlIGJ1ZmZl ciBhbGxvY2F0aW9ucyBmb3IgYWxsIHRoZSBwYXJ0aXRpb25zLiBFYWNoCisJICogcGFydGl0 aW9uIGdldHMgYSB2ZWN0b3Igb2Ygd2VpZ2h0cyAwLTEwMCwgZGV0ZXJtaW5pbmcgd2hhdCBm cmFjdGlvbgorCSAqIG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUgZnJvbSB0aGF0IHBhcnRpY3Vs YXIuIFNvIFs3NSwgMTUsIDUsIDVdIHdvdWxkCisJICogbWVhbiA3NSUgYWxsb2NhdGlvbnMg c2hvdWxkIGdvIGZyb20gcGFydGl0aW9uIDAsIDE1JSBmcm9tIHBhcnRpdGlvbgorCSAqIDEs IGFuZCA1JSBmcm9tIHBhcnRpdGlvbnMgMiYzLiBFYWNoIHBhcnRpdGlvbiBnZXRzIGEgZGlm ZmVyZW50IHZlY3RvcgorCSAqIG9mIHdlaWdodHMuCisJICoKKwkgKiBYWFggQWxsb2NhdGUg YSBmaXhlZC1sZW5ndGggYXJyYXksIHRvIHNpbXBsaWZ5IHdvcmtpbmcgd2l0aCBhcnJheSBv ZgorCSAqIHRoZSBzdHJ1Y3RzLCBldGMuCisJICovCisJdWludDgJCWJhbGFuY2VbTUFYX0JV RkZFUl9QQVJUSVRJT05TXTsKIH0gQ2xvY2tTd2VlcDsKIAogLyoKQEAgLTEzMCw3ICsxNjYs MzMgQEAgc3RhdGljIEJ1ZmZlckRlc2MgKkdldEJ1ZmZlckZyb21SaW5nKEJ1ZmZlckFjY2Vz c1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCQkJCQkJIHVpbnQzMiAqYnVmX3N0YXRlKTsKIHN0 YXRpYyB2b2lkIEFkZEJ1ZmZlclRvUmluZyhCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVn eSwKIAkJCQkJCQlCdWZmZXJEZXNjICpidWYpOwotc3RhdGljIENsb2NrU3dlZXAgKkNob29z ZUNsb2NrU3dlZXAodm9pZCk7CitzdGF0aWMgQ2xvY2tTd2VlcCAqQ2hvb3NlQ2xvY2tTd2Vl cChib29sIGJhbGFuY2UpOworCisvKgorICogY2xvY2tzd2VlcCBhbGxvY2F0aW9uIGJhbGFu Y2luZworICoKKyAqIFRvIGJhbGFuY2UgYWxsb2NhdGlvbnMgZnJvbSBjbG9ja3N3ZWVwIHBh cnRpdGlvbnMsIGVhY2ggcGFydGl0aW9uIGdldHMKKyAqIGEgc2V0IG9mICJ3ZWlnaHRzIiBk ZXRlcm1pbmluZyB0aGUgZnJhY3Rpb24gb2YgYWxsb2NhdGlvbnMgdG8gcmVkaXJlY3QKKyAq IHRvIG90aGVyIHBhcnRpdGlvbnMuCisgKgorICogV2UgY291bGQgZG8gdGhhdCBiYXNlZCBv biBhIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLCBidXQgdGhhdCBzZWVtcyB0b28KKyAqIGV4 cGVuc2l2ZS4gU28gaW5zdGVhZCB3ZSBzaW1wbHkgdHJlYXQgdGhlIHByb2JhYmlsaXRpZXMg YXMgYSBidWRnZXQsIGkuZS4KKyAqIGEgbnVtYmVyIG9mIGFsbG9jYXRpb25zIHRvIHNlcnZl IGZyb20gdGhhdCBwYXJ0aXRpb24sIGJlZm9yZSBtb3ZpbmcgdG8KKyAqIHRoZSBuZXh0IHBh cnRpdGlvbiAoaW4gYSByb3VuZC1yb2JpbiBtYW5uZXIpLgorICoKKyAqIFRoaXMgaXMgdmVy eSBzaW1wbGUvY2hlYXAsIGFuZCBvdmVyIG1hbnkgYWxsb2NhdGlvbnMgaXQgaGFzIHRoZSBz YW1lCisgKiBlZmZlY3QuIEZvciBwZXJpb2RzIG9mIGxvdyBhY3Rpdml0eSBpdCBtYXkgZGl2 ZXJnZSwgYnV0IHRoYXQgZG9lcyBub3QKKyAqIG1hdHRlciBtdWNoICh3ZSBjYXJlIGFib3V0 IGhpZ2gtYWN0aXZpdHkgcGVyaW9kcyBtdWNoIG1vcmUpLgorICoKKyAqIFdlIGludGVudGlv bmFsbHkga2VlcCB0aGUgImJ1ZGdldCIgZmFpcmx5IGxvdywgd2l0aCB0aGUgc3VtIGZvciBh IGdpdmVuCisgKiBwYXJ0aXRpb24gMTAwLiBUaGF0IG1lYW5zIHdlIGdldCB0byB0aGUgc2Ft ZSBwYXJ0aXRpb24gYWZ0ZXIgb25seSAxMDAKKyAqIGFsbG9jYXRpb25zLCBrZWVwaW5nIGl0 IG1vcmUgYmFsYW5jZXMuIEl0IHdvdWxkbid0IGJlIGhhcmQgdG8gbWFrZSB0aGUKKyAqIGJ1 ZGdldHMgaGlnaGVyIChzYXksIHRvIG1hdGNoIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgYWxs b2NhdGlvbnMsIGkuZS4KKyAqIGFib3V0IHRoZSBhdmVyYWdlIG51bWJlciBvZiBhbGxvY2F0 aW9ucyBmcm9tIHRoZSBwYXN0IGludGVydmFsKS4KKyAqLworc3RhdGljIGludCBjbG9ja3N3 ZWVwX3BhcnRpdGlvbl9vcHRpbWFsID0gLTE7CitzdGF0aWMgaW50IGNsb2Nrc3dlZXBfcGFy dGl0aW9uID0gLTE7CitzdGF0aWMgaW50IGNsb2Nrc3dlZXBfY291bnQgPSAwOwogCiAvKgog ICogQ2xvY2tTd2VlcFRpY2sgLSBIZWxwZXIgcm91dGluZSBmb3IgU3RyYXRlZ3lHZXRCdWZm ZXIoKQpAQCAtMTQyLDcgKzIwNCw3IEBAIHN0YXRpYyBpbmxpbmUgdWludDMyCiBDbG9ja1N3 ZWVwVGljayh2b2lkKQogewogCXVpbnQzMgkJdmljdGltOwotCUNsb2NrU3dlZXAgKnN3ZWVw ID0gQ2hvb3NlQ2xvY2tTd2VlcCgpOworCUNsb2NrU3dlZXAgKnN3ZWVwID0gQ2hvb3NlQ2xv Y2tTd2VlcCh0cnVlKTsKIAogCS8qCiAJICogQXRvbWljYWxseSBtb3ZlIGhhbmQgYWhlYWQg b25lIGJ1ZmZlciAtIGlmIHRoZXJlJ3Mgc2V2ZXJhbCBwcm9jZXNzZXMKQEAgLTIzMywxMSAr Mjk1LDU5IEBAIGNhbGN1bGF0ZV9wYXJ0aXRpb25faW5kZXgodm9pZCkKICAqIGFuZCB0aGF0 J3MgY2hlYXBlci4gQnV0IGhvdyB3b3VsZCB0aGF0IGRlYWwgd2l0aCBvZGQgbnVtYmVyIG9m IG5vZGVzPwogICovCiBzdGF0aWMgQ2xvY2tTd2VlcCAqCi1DaG9vc2VDbG9ja1N3ZWVwKHZv aWQpCitDaG9vc2VDbG9ja1N3ZWVwKGJvb2wgYmFsYW5jZSkKIHsKLQlpbnQJCQlpbmRleCA9 IGNhbGN1bGF0ZV9wYXJ0aXRpb25faW5kZXgoKTsKKwkvKiBXaGF0J3MgdGhlICJvcHRpbWFs IiBwYXJ0aXRpb24/ICovCisJaW50CQlpbmRleCA9IGNhbGN1bGF0ZV9wYXJ0aXRpb25faW5k ZXgoKTsKKwlDbG9ja1N3ZWVwICpzd2VlcCA9ICZTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tp bmRleF07CisKKwkvKgorCSAqIERpZCB3ZSBtaWdyYXRlIHRvIGEgZGlmZmVyZW50IGNvcmUg LyBOVU1BIG5vZGUsIGFmZmVjdGluZyB0aGUKKwkgKiBjbG9ja3N3ZWVwIHBhcnRpdGlvbiB3 ZSBzaG91bGQgdXNlPyBTd2l0Y2ggdG8gdGhhdCBwYXJ0aXRpb24uCisJICovCisJaWYgKGNs b2Nrc3dlZXBfcGFydGl0aW9uX29wdGltYWwgIT0gaW5kZXgpCisJeworCQljbG9ja3N3ZWVw X3BhcnRpdGlvbl9vcHRpbWFsID0gaW5kZXg7CisJCWNsb2Nrc3dlZXBfcGFydGl0aW9uID0g aW5kZXg7CisJCWNsb2Nrc3dlZXBfY291bnQgPSBzd2VlcC0+YmFsYW5jZVtpbmRleF07CisJ fQorCisJLyogd2Ugc2hvdWxkIGhhdmUgYSB2YWxpZCBwYXJ0aXRpb24gKi8KKwlBc3NlcnQo Y2xvY2tzd2VlcF9wYXJ0aXRpb25fb3B0aW1hbCAhPSAtMSk7CisJQXNzZXJ0KGNsb2Nrc3dl ZXBfcGFydGl0aW9uICE9IC0xKTsKKworCS8qCisJICogSWYgcmViYWxhbmNpbmcgaXMgZW5h YmxlZCwgdXNlIHRoZSB3ZWlnaHRzIHRvIHJlZGlyZWN0IHRoZSBhbGxvY2F0aW9ucworCSAq IHRvIG1hdGNoIHRoZSBkZXNpcmVkIGRpc3RyaWJ1dGlvbi4gV2UgZG8gdGhhdCBieSB1c2lu ZyB0aGUgcGFydGl0aW9ucworCSAqIGluIGEgcm91bmQtcm9iaW4gd2F5LCBhZnRlciBhbGxv Y2F0aW5nIHRoZSAid2VpZ2h0IiBvZiBhbGxvY2F0aW9ucworCSAqIGZyb20gZWFjaCBwYXJ0 aXRpb25zLgorCSAqLworCWlmIChiYWxhbmNlKQorCXsKKwkJLyoKKwkJICogUmFuIG91dCBv ZiBhbGxvY2F0aW9ucyBmcm9tIHRoZSBjdXJyZW50IHBhcnRpdGlvbj8gTW92ZSB0byB0aGUK KwkJICogbmV4dCBwYXJ0aXRpb24gd2l0aCBub24temVybyB3ZWlnaHQsIGFuZCB1c2UgdGhl IHdlaWdodCBhcyBhCisJCSAqIGJ1ZGdldCBmb3IgYWxsb2NhdGlvbnMuCisJCSAqLworCQl3 aGlsZSAoY2xvY2tzd2VlcF9jb3VudCA9PSAwKQorCQl7CisJCQljbG9ja3N3ZWVwX3BhcnRp dGlvbgorCQkJCT0gKGNsb2Nrc3dlZXBfcGFydGl0aW9uICsgMSkgJSBTdHJhdGVneUNvbnRy b2wtPm51bV9wYXJ0aXRpb25zOworCisJCQlBc3NlcnQoKGNsb2Nrc3dlZXBfcGFydGl0aW9u ID49IDApICYmCisJCQkJICAgKGNsb2Nrc3dlZXBfcGFydGl0aW9uIDwgU3RyYXRlZ3lDb250 cm9sLT5udW1fcGFydGl0aW9ucykpOworCisJCQljbG9ja3N3ZWVwX2NvdW50ID0gc3dlZXAt PmJhbGFuY2VbY2xvY2tzd2VlcF9wYXJ0aXRpb25dOworCQl9CiAKLQlyZXR1cm4gJlN0cmF0 ZWd5Q29udHJvbC0+c3dlZXBzW2luZGV4XTsKKwkJLyogYWNjb3VudCBmb3IgdGhlIGFsbG9j YXRpb24gLSB0YWtlIGl0IGZyb20gdGhlIGJ1ZGdldCAqLworCQktLWNsb2Nrc3dlZXBfY291 bnQ7CisKKwkJLyogYWNjb3VudCBmb3IgdGhlIGFsbG9jIGluIHRoZSAib3B0aW1hbCIgKG9y aWdpbmFsKSBwYXJ0aXRpb24gKi8KKwkJcGdfYXRvbWljX2ZldGNoX2FkZF91MzIoJnN3ZWVw LT5udW1SZXF1ZXN0ZWRBbGxvY3MsIDEpOworCX0KKworCXJldHVybiAmU3RyYXRlZ3lDb250 cm9sLT5zd2VlcHNbY2xvY2tzd2VlcF9wYXJ0aXRpb25dOwogfQogCiAvKgpAQCAtMzA5LDcg KzQxOSw3IEBAIFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0 ZWd5LCB1aW50MzIgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJvbV9yCiAJICogdGhlIHJhdGUgb2Yg YnVmZmVyIGNvbnN1bXB0aW9uLiAgTm90ZSB0aGF0IGJ1ZmZlcnMgcmVjeWNsZWQgYnkgYQog CSAqIHN0cmF0ZWd5IG9iamVjdCBhcmUgaW50ZW50aW9uYWxseSBub3QgY291bnRlZCBoZXJl LgogCSAqLwotCXBnX2F0b21pY19mZXRjaF9hZGRfdTMyKCZDaG9vc2VDbG9ja1N3ZWVwKCkt Pm51bUJ1ZmZlckFsbG9jcywgMSk7CisJcGdfYXRvbWljX2ZldGNoX2FkZF91MzIoJkNob29z ZUNsb2NrU3dlZXAoZmFsc2UpLT5udW1CdWZmZXJBbGxvY3MsIDEpOwogCiAJLyoKIAkgKiBV c2UgdGhlICJjbG9jayBzd2VlcCIgYWxnb3JpdGhtIHRvIGZpbmQgYSBmcmVlIGJ1ZmZlcgpA QCAtNDE3LDYgKzUyNywyMjQgQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3Ry YXRlZ3kgc3RyYXRlZ3ksIHVpbnQzMiAqYnVmX3N0YXRlLCBib29sICpmcm9tX3IKIAl9CiB9 CiAKKy8qCisgKiBTdHJhdGVneVN5bmNCYWxhbmNlCisgKgkJdXBkYXRlIHBhcnRpdGlvbiB3 ZWlnaHRzLCB0byBiYWxhbmNlIHRoZSBidWZmZXIgYWxsb2NhdGlvbnMKKyAqCisgKiBXZSB3 YW50IHRvIGdpdmUgcHJlZmVyZW5jZSB0byBhbGxvY2F0aW5nIGJ1ZmZlcnMgb24gdGhlIHNh bWUgTlVNQSBub2RlLAorICogYnV0IHRoYXQgbWlnaHQgbGVhZCB0byBpbWJhbGFuY2UgLSBh IHNpbmdsZSBwcm9jZXNzIHdvdWxkIG9ubHkgdXNlIGEKKyAqIGZyYWN0aW9uIG9mIHNoYXJl ZCBidWZmZXJzLiBXZSBkb24ndCB3YW50IHRoYXQsIHdlIHdhbnQgdG8gdXRpbGl6ZSB0aGUK KyAqIHdob2xlIHNoYXJlZCBidWZmZXJzLiBUaGUgbnVtYmVyIG9mIGFsbG9jYXRpb25zIGlu IGVhY2ggcGFydGl0aW9uIG1heQorICogYWxzbyBjaGFuZ2Ugb3ZlciB0aW1lLCBzbyB3ZSBu ZWVkIHRvIGFkYXB0IHRvIHRoYXQuCisgKgorICogVG8gYWxsb3cgdGhpcyAiYWRhcHRpdmUg YmFsYW5jaW5nIiwgZWFjaCBwYXJ0aXRpb24gaGFzIGEgc2V0IG9mIHdlaWdodHMsCisgKiBk ZXRlcm1pbmluZyB3aGF0IGZyYWN0aW9uIG9mIGFsbG9jYXRpb25zIHRvIGRpcmVjdCB0byBv dGhlciBwYXJ0aXRpb25zLgorICogRm9yIHNpbXBsaWNpdHkgdGhlIGNvZWZmaWNpZW50cyBh cmUgaW50ZWdlcnMgMC0xMDAsIGV4cHJlc3NpbmcgdGhlCisgKiBwZXJjZW50YWdlIG9mIGFs bG9jYXRpb25zIHJlZGlyZWN0ZWQgdG8gdGhhdCBwYXJ0aXRpb24uCisgKgorICogQ29uc2lk ZXIgZm9yIGV4YW1wbGUgd2VpZ2h0cyBbNTAsIDI1LCAyNSwgMF0gZm9yIG9uZSBvZiA0IHBh cnRpdGlvbnMuCisgKiBUaGlzIG1lYW5zIDUwJSBvZiBhbGxvY2F0aW9ucyB3aWxsIGJlIHJl ZGlyZWN0ZWQgdG8gcGFydGl0aW9uIDAsIDI1JQorICogdG8gcGFydGl0aW9ucyAxIGFuZCAy LCBhbmQgbm8gYWxsb2NhdGlvbnMgd2lsbCBnbyB0byBwYXJ0aXRpb24gMy4KKyAqCisgKiBU byBjYWxjdWxhdGUgdGhlc2Ugd2VpZ2h0cywgYXNzdW1lIHdlIGtub3cgdGhlIG51bWJlciBv ZiBhbGxvY2F0aW9ucworICogcmVxdWVzdGVkIGZvciBlYWNoIHBhcnRpdGlvbiBpbiB0aGUg cGFzdCBpbnRlcnZhbC4gV2UgY2FuIHVzZSB0aGlzIHRvCisgKiBjYWxjdWxhdGUgd2VpZ2h0 cyBmb3IgdGhlIGZvbGxvd2luZyBpbnRlcnZhbCwgYWltaW5nIHRvIGFsbG9jYXRlIHRoZQor ICogc2FtZSAoZmFpciBzaGFyZSkgbnVtYmVyIG9mIGJ1ZmZlcnMgZnJvbSBlYWNoIHBhcnRp dGlvbi4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGJhc2VkIG9uIG51bWJlciBvZiBhbGxvY2F0 aW9ucyAib3JpZ2luYXRpbmciIGluIGEgZ2l2ZW4KKyAqIHBhcnRpdGlvbi4gSWYgYW4gYWxs b2NhdGlvbiBpcyByZXF1ZXN0ZWQgaW4gYSBwYXJ0aXRpb24gQSwgaXQncyBjb3VudGVkCisg KiBhcyBhbGxvY2F0aW9uIGZvciBBLCBldmVuIGlmIGl0IGdldHMgcmVkaXJlY3RlZCB0byBz b21lIG90aGVyIHBhcnRpdGlvbi4KKyAqIFRoZSBwYXRjaCBhZGRlcyBhIG5ldyBjb3VudGVy IHRvIHRyYWNrIHRoaXMuCisgKgorICogVGhlIG1haW4gb2JzZXJ2YXRpb24gaXMgdGhhdCBw YXJ0aXRpb25zIGdldCBkaXZpZGVkIGludG8gdHdvIGdyb3VwcywKKyAqIGRlcGVuZGluZyBv biB3aGV0aGVyIHRoZSBudW1iZXIgYWxsb2NhdGlvbnMgaXMgaGlnaGVyIG9yIGxvd2VyIHRo YW4gdGhlCisgKiB0YXJnZXQgYXZlcmFnZS4gQnV0IHRoZSAidG90YWwgZGVsdGEiIGZvciB0 aGVzZSB0d28gZ3JvdXBzIGlzIHRoZQorICogc2FtZSwgaS5lLiBzdW0oYWJzKGFsbG9jcyAt IGF2Z19hbGxvY3MpKSBpcyB0aGUgc2FtZS4gVGhlcmVmb3JlLCB0aGUKKyAqIHRhc2sgaXMg dG8gImRpc3RyaWJ1dGUiIHRoZSBleGNlc3MgYWxsb2NhdGlvbnMgYmV0d2VlbiB0aGUgcGFy dGl0aW9ucworICogd2l0aCBub3QgZW5vdWdoIGFsbG9jYXRpb25zLgorICoKKyAqIFBhcnRp dGlvbnMgd2l0aCAobmFsbG9jcyA8IGF2Z19uYWxsb2NzKSBkb24ndCByZWRpcmVjdCBhbnkg YWxsb2NhdGlvbnMuCisgKgorICogUGFydGl0aW9ucyB3aXRoIChuYWxsb2NzID4gYXZnX25h bGxvY3MpIHJlZGlyZWN0IHRoZSBleHRyYSBhbGxvY2F0aW9ucywKKyAqIHdpdGggZWFjaCB0 YXJnZXQgYWxsb2NhdGlvbiBnZXR0aW5nIGEgcHJvcG9ydGlvbmFsIHBhcnQgKHdpdGggcmVz cGVjdAorICogdG8gdGhlIHRvdGFsIGRlbHRhKS4KKyAqCisgKiBYWFggSW4gcHJpbmNpcGxl IHdlIG1pZ2h0IGRvIHdpdGhvdXQgdGhlIG5ldyAicmVxdWVzdGVkQWxsb2NzIiBjb3VudGVy LAorICogYnV0IHdlJ2QgbmVlZCB0byBzb2x2ZSB0aGUgbWF0cml4IGVxdWF0aW9uIEF4PWIs IHdpdGggW0EsYl0ga25vd24KKyAqICh3ZWlnaHRzIGFuZCBhbGxvY3MpLCBhbmQgY2FsY3Vs YXRlIHggKHJlcXVlc3RlZCBhbGxvY3MpLiBCdXQgaXQncyBub3QKKyAqIHF1aXRlIGNsZWFy IHRoaXMnZCBhbHdheXMgaGF2ZSBhIHNvbHV0aW9uLgorICovCit2b2lkCitTdHJhdGVneVN5 bmNCYWxhbmNlKHZvaWQpCit7CisJLyogc25hcHNob3Qgb2YgYWxsb2NzIGZvciBwYXJ0aXRp b25zICovCisJdWludDMyCWFsbG9jc1tNQVhfQlVGRkVSX1BBUlRJVElPTlNdOworCisJdWlu dDMyCXRvdGFsX2FsbG9jcyA9IDAsCS8qIHRvdGFsIG51bWJlciBvZiBhbGxvY2F0aW9ucyAq LworCQkJYXZnX2FsbG9jcywJCQkvKiBhdmVyYWdlIGFsbG9jYXRpb25zIChwZXIgcGFydGl0 aW9uKSAqLworCQkJZGVsdGFfYWxsb2NzID0gMDsJLyogc3VtIG9mIGFsbG9jcyBhYm92ZSBh dmVyYWdlICovCisKKwkvKgorCSAqIENvbGxlY3QgdGhlIG51bWJlciBvZiBhbGxvY2F0aW9u cyByZXF1ZXN0ZWQgaW4gdGhlIHBhc3QgaW50ZXJ2YWwuCisJICogV2hpbGUgYXQgaXQsIHJl c2V0IHRoZSBjb3VudGVyIHRvIHN0YXJ0IHRoZSBuZXcgaW50ZXJ2YWwuCisJICoKKwkgKiBX ZSBsb2NrIHRoZSBwYXJ0aXRpb25zIG9uZSBieSBvbmUsIHNvIHRoaXMgaXMgbm90IGV4YWN0 bHkgY29uc2lzdGVudAorCSAqIHNuYXBzaG90IG9mIHRoZSBjb3VudHMsIGFuZCB0aGUgcmVz ZXRzIGhhcHBlbiBiZWZvcmUgd2UgdXBkYXRlIHRoZQorCSAqIHdlaWdodHMgdG9vLiBCdXQg d2UncmUgb25seSBsb29raW5nIGZvciBoZXVyaXN0aWNzIGFueXdheSwgc28gdGhpcworCSAq IHNob3VsZCBiZSBnb29kIGVub3VnaC4KKwkgKgorCSAqIEEgc2ltaWxhciBpc3N1ZSBhcHBs aWVzIHRvIHRoZSBjb3VudGVyIHJlc2V0IC0gd2UgaGF2ZW4ndCB1cGRhdGVkCisJICogdGhl IHdlaWdodHMgeWV0LiBTaG91bGQgYmUgZmluZSwgd2UnbGwgc2ltcGx5IGNvbnNpZGVyIHRo aXMgaW4gdGhlCisJICogbmV4dCBiYWxhbmNpbmcgY3ljbGUuCisJICoKKwkgKiBYWFggRG9l cyB0aGlzIG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlIGNvbXBsZXRlUGFzc2VzIHRvbz8KKwkg Ki8KKwlmb3IgKGludCBpID0gMDsgaSA8IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlv bnM7IGkrKykKKwl7CisJCUNsb2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29udHJvbC0+ c3dlZXBzW2ldOworCisJCS8qIG5vIG5lZWQgZm9yIGEgc3BpbmxvY2sgKi8KKwkJYWxsb2Nz W2ldID0gcGdfYXRvbWljX2V4Y2hhbmdlX3UzMigmc3dlZXAtPm51bVJlcXVlc3RlZEFsbG9j cywgMCk7CisKKwkJLyogYWRkIHRoZSBhbGxvY3MgdG8gcnVubmluZyB0b3RhbCAqLworCQlw Z19hdG9taWNfZmV0Y2hfYWRkX3U2NCgmc3dlZXAtPm51bVRvdGFsUmVxdWVzdGVkQWxsb2Nz LCBhbGxvY3NbaV0pOworCisJCXRvdGFsX2FsbG9jcyArPSBhbGxvY3NbaV07CisJfQorCisJ LyoKKwkgKiBDYWxjdWxhdGUgdGhlICJmYWlyIHNoYXJlIiBvZiBhbGxvY2F0aW9ucyBwZXIg cGFydGl0aW9uLgorCSAqCisJICogWFhYIFRoZSBsYXN0IHBhcnRpdGlvbiBjb3VsZCBiZSBz bWFsbGVyLCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBiZQorCSAqIGV4cGVjdGVkIHRvIGhh bmRsZSBmZXdlciBhbGxvY2F0aW9ucy4gU28gdGhpcyBzaG91bGQgYmUgYSB3ZWlnaHRlZAor CSAqIGF2ZXJhZ2UuIEJ1dCBmb3Igbm93IGEgc2ltcGxlIGF2ZXJhZ2UgaXMgZ29vZCBlbm91 Z2guCisJICovCisJYXZnX2FsbG9jcyA9ICh0b3RhbF9hbGxvY3MgLyBTdHJhdGVneUNvbnRy b2wtPm51bV9wYXJ0aXRpb25zKTsKKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSAiZGVsdGEi IGZyb20gYmFsYW5jZWQgc3RhdGUsIGkuZS4gaG93IG1hbnkgYWxsb2NhdGlvbnMKKwkgKiB3 ZSdkIG5lZWQgdG8gcmVkaXN0cmlidXRlLgorCSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwg U3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9uczsgaSsrKQorCXsKKwkJaWYgKGFsbG9j c1tpXSA+IGF2Z19hbGxvY3MpCisJCQlkZWx0YV9hbGxvY3MgKz0gKGFsbG9jc1tpXSAtIGF2 Z19hbGxvY3MpOworCX0KKworCS8qCisJICogU2tpcCB0aGUgcmViYWxhbmNpbmcgd2hlbiB0 aGVyZSdzIG5vdCBlbm91Z2ggYWN0aXZpdHkuIEluIHRoaXMgY2FzZQorCSAqIHdlIGp1c3Qg a2VlcCB0aGUgY3VycmVudCB3ZWlnaHRzLgorCSAqCisJICogWFhYIFRoZSB0aHJlc2hvbGQg b2YgMTAwIGFsbG9jYXRpb24gaXMgcHJldHR5IGFyYml0cmFyeS4KKwkgKgorCSAqIFhYWCBN YXliZSBhIGJldHRlciBzdHJhdGVneSB3b3VsZCBiZSB0byBzbG93bHkgcmV0dXJuIHRvIHRo ZSBkZWZhdWx0CisJICogd2VpZ2h0cywgd2l0aCBlYWNoIHBhcnRpdGlvbiBhbGxvY2F0aW9u IG9ubHkgZnJvbSBpdHNlbGY/CisJICoKKwkgKiBYWFggTWF5YmUgd2Ugc2hvdWxkbid0IGV2 ZW4gcmVzZXQgdGhlIGNvdW50ZXJzIGluIHRoaXMgY2FzZT8gQnV0IGl0CisJICogc2hvdWxk IG5vdCBtYXR0ZXIsIGlmIHRoZSBhY3Rpdml0eSBpcyBsb3cuCisJICovCisJaWYgKGF2Z19h bGxvY3MgPCAxMDApCisJeworCQllbG9nKElORk8sICJyZWJhbGFuY2Ugc2tpcHBlZDogbm90 IGVub3VnaCBhbGxvY2F0aW9ucyAoYWxsb2NzOiAldSkiLAorCQkJIGF2Z19hbGxvY3MpOwor CQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBMaWtld2lzZSwgc2tpcCByZWJhbGFuY2luZyBp ZiB0aGUgbWlzYmFsYW5jZSBpcyBub3Qgc2lnbmlmaWNhbnQuIFdlCisJICogY29uc2lkZXIg aXQgYWNjZXB0YWJsZSBpZiB0aGUgYW1vdW50IG9mIGFsbG9jYXRpb25zIHdlJ2QgbmVlZCB0 bworCSAqIHJlZGlzdHJpYnV0ZSBpcyBsZXNzIHRoYW4gMTAlIG9mIHRoZSBhdmVyYWdlLgor CSAqCisJICogWFhYIEFnYWluLCB0aGVzZSB0aHJlc2hvbGQgYXJlIHJhdGhlciBhcmJpdHJh cnkuCisJICovCisJaWYgKGRlbHRhX2FsbG9jcyA8IChhdmdfYWxsb2NzICogMC4xKSkKKwl7 CisJCWVsb2coSU5GTywgInJlYmFsYW5jZSBza2lwcGVkOiBkZWx0YSB3aXRoaW4gbGltaXQg KGRlbHRhOiAldSwgdGhyZXNob2xkOiAldSkiLAorCQkJIGRlbHRhX2FsbG9jcywgKHVpbnQz MikgKGF2Z19hbGxvY3MgKiAwLjEpKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogR290 IHRvIGRvIHRoZSByZWJhbGFuY2luZy4gR28gdGhyb3VnaCB0aGUgcGFydGl0aW9ucywgYW5k IGZvciBlYWNoCisJICogcGFydGl0aW9uIGRlY2lkZSBpZiBpdCBnZXRzIHRvIHJlZGlyZWN0 IG9yIHJlY2VpdmUgYWxsb2NhdGlvbnMuCisJICoKKwkgKiBJZiBhIHBhcnRpdGlvbiBoYXMg ZmV3ZXIgdGhhbiBhdmVyYWdlIGFsbG9jYXRpb25zLCBpdCB3b24ndCByZWRpcmVjdAorCSAq IGFueSBhbGxvY2F0aW9ucyB0byBvdGhlciBwYXJ0aXRpb25zLiBTbyBpdCBvbmx5IGhhcyBh IHNpbmdsZSBub24temVybworCSAqIHdlaWdodCwgYW5kIHRoYXQncyBmb3IgaXRzZWxmLgor CSAqCisJICogSWYgYSBwYXJ0dGlvbiBoYXMgbW9yZSB0aGFuIGF2ZXJhZ2UgYWxsb2NhdGlv bnMsIGl0IHdvbid0IHJlY2VpdmUKKwkgKiBhbnkgcmVkaXJlY3RlZCBhbGxvY2F0aW9ucy4g SW5zdGVhZCwgdGhlIGV4Y2VzcyBhbGxvY2F0aW9ucyBhcmUKKwkgKiByZWRpcmVjdGVkIHRv IHRoZSBvdGhlciBwYXJ0aXRpb25zLgorCSAqCisJICogVGhlIHJlZGlzdHJpYnV0aW9uIGlz ICJwcm9wb3J0aW9uYWwiIC0gaWYgdGhlIGV4Y2VzcyBhbGxvY2F0aW9ucyBvZgorCSAqIGEg cGFydGl0aW9uIHJlcHJlc2VudCAxMCUgb2YgdGhlICJkZWx0YSIsIHRoZW4gZWFjaCBwYXJ0 aXRpb24gdGhhdAorCSAqIG5lZWRzIG1vcmUgYWxsb2NhdGlvbnMgd2lsbCBnZXQgMTAlIG9m IHRoZSBnYXAgZnJvbSB0aGlzIG9uZS4KKwkgKgorCSAqIFhYWCBXZSBzaG91bGQgYWRkIGh5 c3RlcmVzaXMsIHRvICJkYW1wZW4iIHRoZSBjaGFuZ2VzLCBhbmQgbWFrZQorCSAqIHN1cmUg aXQgZG9lcyBub3Qgb3NjaWxsYXRlIHRvbyBtdWNoLgorCSAqCisJICogWFhYIElkZWFsbHks IHRoZSBhbHRlcm5hdGl2ZSBwYXJ0aXRpb25zIHRvIHVzZSBmaXJzdCB3b3VsZCBiZSB0aGUK KwkgKiBvdGhlciBwYXJ0aXRpb25zIGZvciB0aGUgc2FtZSBub2RlIChpZiBhbnkpLgorCSAq LworCWZvciAoaW50IGkgPSAwOyBpIDwgU3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9u czsgaSsrKQorCXsKKwkJQ2xvY2tTd2VlcCAqc3dlZXAgPSAmU3RyYXRlZ3lDb250cm9sLT5z d2VlcHNbaV07CisJCXVpbnQ4CQliYWxhbmNlW01BWF9CVUZGRVJfUEFSVElUSU9OU107CisK KwkJLyogbG9jaywgd2UncmUgZ29pbmcgdG8gbW9kaWZ5IHRoZSBiYWxhbmNlIHdlaWdodHMg Ki8KKwkJU3BpbkxvY2tBY3F1aXJlKCZzd2VlcC0+Y2xvY2tfc3dlZXBfbG9jayk7CisKKwkJ LyogcmVzZXQgdGhlIHdlaWdodHMgdG8gc3RhcnQgZnJvbSBzY3JhdGNoICovCisJCW1lbXNl dChiYWxhbmNlLCAwLCBzaXplb2YodWludDgpICogTUFYX0JVRkZFUl9QQVJUSVRJT05TKTsK KworCQkvKiBkb2VzIHRoaXMgcGFydGl0aW9uIGhhcyBmZXdlciBvciBtb3JlIHRoYW4gYXZn X2FsbG9jcz8gKi8KKwkJaWYgKGFsbG9jc1tpXSA8IGF2Z19hbGxvY3MpCisJCXsKKwkJCS8q IGZld2VyIC0gZG9uJ3QgcmVkaXJlY3QgYW55IGFsbG9jYXRpb25zIGVsc2V3aGVyZSAqLwor CQkJYmFsYW5jZVtpXSA9IDEwMDsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBt b3JlIC0gcmVkaXN0cmlidXRlIHRoZSBleGNlc3MgYWxsb2NhdGlvbnMKKwkJCSAqCisJCQkg KiBFYWNoICJ0YXJnZXQiIHBhcnRpdGlvbiAod2l0aCBsZXNzIHRoYW4gYXZnX2FsbG9jcykg c2hvdWxkIGdldAorCQkJICogYSBmcmFjdGlvbiBwcm9wb3J0aW9uYWwgdG8gKGV4Y2Vzcy9k ZWx0YSkgZnJvbSB0aGlzIG9uZS4KKwkJCSAqLworCisJCQkvKiBmcmFjdGlvbiBvZiB0aGUg InRvdGFsIiBkZWx0YSAqLworCQkJZG91YmxlCWRlbHRhX2ZyYWMgPSAoYWxsb2NzW2ldIC0g YXZnX2FsbG9jcykgKiAxLjAgLyBkZWx0YV9hbGxvY3M7CisKKwkJCS8qIGtlZXAganVzdCBl bm91Z2ggYWxsb2NhdGlvbnMgdG8gbWVldCB0aGUgdGFyZ2V0ICovCisJCQliYWxhbmNlW2ld ID0gKDEwMC4wICogYXZnX2FsbG9jcyAvIGFsbG9jc1tpXSk7CisKKwkJCS8qIHJlZGlyZWN0 IHRoZSBleHRyYSBhbGxvY2F0aW9ucyAqLworCQkJZm9yIChpbnQgaiA9IDA7IGogPCBTdHJh dGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zOyBqKyspCisJCQl7CisJCQkJLyogSG93IG1h bnkgYWxsb2NhdGlvbnMgdG8gcmVjZWl2ZSBmcm9tIGktdGggcGFydGl0aW9uPyAqLworCQkJ CXVpbnQzMglyZWNlaXZlX2FsbG9jcyA9IGRlbHRhX2ZyYWMgKiAoYXZnX2FsbG9jcyAtIGFs bG9jc1tqXSk7CisKKwkJCQkvKiBpZ25vcmUgcGFydGl0aW9ucyB0aGF0IGRvbid0IG5lZWQg YWRkaXRpb25hbCBhbGxvY2F0aW9ucyAqLworCQkJCWlmIChhbGxvY3Nbal0gPiBhdmdfYWxs b2NzKQorCQkJCQljb250aW51ZTsKKworCQkJCS8qIGZyYWN0aW9uIHRvIHJlZGlyZWN0ICov CisJCQkJYmFsYW5jZVtqXSA9ICgxMDAuMCAqIHJlY2VpdmVfYWxsb2NzIC8gYWxsb2NzW2ld KSArIDAuNTsKKwkJCX0KKwkJfQorCisJCS8qIGNvbWJpbmUgdGhlIG9sZCBhbmQgbmV3IHdl aWdodHMgKGh5c3RlcmVzaXMpICovCisJCWZvciAoaW50IGogPSAwOyBqIDwgTUFYX0JVRkZF Ul9QQVJUSVRJT05TOyBqKyspCisJCXsKKwkJCXN3ZWVwLT5iYWxhbmNlW2pdCisJCQkJPSBD TE9DS1NXRUVQX0hJU1RPUllfQ09FRkYgKiBzd2VlcC0+YmFsYW5jZVtqXSArCisJCQkJICAo MS4wIC0gQ0xPQ0tTV0VFUF9ISVNUT1JZX0NPRUZGKSAqIGJhbGFuY2Vbal07CisJCX0KKwor CQlTcGluTG9ja1JlbGVhc2UoJnN3ZWVwLT5jbG9ja19zd2VlcF9sb2NrKTsKKwl9Cit9CisK IC8qCiAgKiBTdHJhdGVneVN5bmNQcmVwYXJlIC0tIHByZXBhcmUgZm9yIHN5bmMgb2YgYWxs IHBhcnRpdGlvbnMKICAqCkBAIC00NDMsNiArNzcxLDcgQEAgU3RyYXRlZ3lTeW5jUHJlcGFy ZShpbnQgKm51bV9wYXJ0cywgdWludDMyICpudW1fYnVmX2FsbG9jKQogCXsKIAkJQ2xvY2tT d2VlcCAqc3dlZXAgPSAmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV07CiAKKwkJLyogWFhY IHdlIGRvbid0IG5lZWQgdGhlIHNwaW5sb2NrIHRvIHJlYWQgYXRvbWljcywgbm8/ICovCiAJ CVNwaW5Mb2NrQWNxdWlyZSgmc3dlZXAtPmNsb2NrX3N3ZWVwX2xvY2spOwogCQlpZiAobnVt X2J1Zl9hbGxvYykKIAkJewpAQCAtNjI3LDcgKzk1NiwyMSBAQCBTdHJhdGVneUluaXRpYWxp emUoYm9vbCBpbml0KQogCQkJLyogQ2xlYXIgc3RhdGlzdGljcyAqLwogCQkJU3RyYXRlZ3lD b250cm9sLT5zd2VlcHNbaV0uY29tcGxldGVQYXNzZXMgPSAwOwogCQkJcGdfYXRvbWljX2lu aXRfdTMyKCZTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5udW1CdWZmZXJBbGxvY3MsIDAp OworCQkJcGdfYXRvbWljX2luaXRfdTMyKCZTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5u dW1SZXF1ZXN0ZWRBbGxvY3MsIDApOwogCQkJcGdfYXRvbWljX2luaXRfdTY0KCZTdHJhdGVn eUNvbnRyb2wtPnN3ZWVwc1tpXS5udW1Ub3RhbEFsbG9jcywgMCk7CisJCQlwZ19hdG9taWNf aW5pdF91NjQoJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ldLm51bVRvdGFsUmVxdWVzdGVk QWxsb2NzLCAwKTsKKworCQkJLyoKKwkJCSAqIEluaXRpYWxpemUgdGhlIHdlaWdodHMgLSBz dGFydCBieSBhbGxvY2F0aW5nIDEwMCUgYnVmZmVycyBmcm9tCisJCQkgKiB0aGUgY3VycmVu dCBub2RlIC8gcGFydGl0aW9uLgorCQkJICovCisJCQlmb3IgKGludCBqID0gMDsgaiA8IE1B WF9CVUZGRVJfUEFSVElUSU9OUzsgaisrKQorCQkJeworCQkJCWlmIChpID09IGopCisJCQkJ CVN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ldLmJhbGFuY2VbaV0gPSAxMDA7CisJCQkJZWxz ZQorCQkJCQlTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5iYWxhbmNlW2pdID0gMDsKKwkJ CX0KIAkJfQogCiAJCS8qIE5vIHBlbmRpbmcgbm90aWZpY2F0aW9uICovCkBAIC0xMDAwLDgg KzEzNDMsMTAgQEAgU3RyYXRlZ3lSZWplY3RCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kg c3RyYXRlZ3ksIEJ1ZmZlckRlc2MgKmJ1ZiwgYm9vbCBmcm9tX3IKIAogdm9pZAogQ2xvY2tT d2VlcFBhcnRpdGlvbkdldEluZm8oaW50IGlkeCwKLQkJCQkJCSAgIHVpbnQzMiAqY29tcGxl dGVfcGFzc2VzLCB1aW50MzIgKm5leHRfdmljdGltX2J1ZmZlciwKLQkJCQkJCSAgIHVpbnQ2 NCAqYnVmZmVyX3RvdGFsX2FsbG9jcywgdWludDMyICpidWZmZXJfYWxsb2NzKQorCQkJCQkJ IHVpbnQzMiAqY29tcGxldGVfcGFzc2VzLCB1aW50MzIgKm5leHRfdmljdGltX2J1ZmZlciwK KwkJCQkJCSB1aW50NjQgKmJ1ZmZlcl90b3RhbF9hbGxvY3MsIHVpbnQzMiAqYnVmZmVyX2Fs bG9jcywKKwkJCQkJCSB1aW50NjQgKmJ1ZmZlcl90b3RhbF9yZXFfYWxsb2NzLCB1aW50MzIg KmJ1ZmZlcl9yZXFfYWxsb2NzLAorCQkJCQkJIGludCAqKndlaWdodHMpCiB7CiAJQ2xvY2tT d2VlcCAqc3dlZXAgPSAmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaWR4XTsKIApAQCAtMTAw OSwxMSArMTM1NCwyMSBAQCBDbG9ja1N3ZWVwUGFydGl0aW9uR2V0SW5mbyhpbnQgaWR4LAog CiAJLyogZ2V0IHRoZSBjbG9ja3N3ZWVwIHN0YXRzICovCiAJKmNvbXBsZXRlX3Bhc3NlcyA9 IHN3ZWVwLT5jb21wbGV0ZVBhc3NlczsKKworCS8qIGNhbGN1bGF0ZSB0aGUgYWN0dWFsIGJ1 ZmZlciBJRCAqLwogCSpuZXh0X3ZpY3RpbV9idWZmZXIgPSBwZ19hdG9taWNfcmVhZF91MzIo JnN3ZWVwLT5uZXh0VmljdGltQnVmZmVyKTsKKwkqbmV4dF92aWN0aW1fYnVmZmVyID0gc3dl ZXAtPmZpcnN0QnVmZmVyICsgKCpuZXh0X3ZpY3RpbV9idWZmZXIgJSBzd2VlcC0+bnVtQnVm ZmVycyk7CiAKLQkqYnVmZmVyX2FsbG9jcyA9IHBnX2F0b21pY19yZWFkX3UzMigmc3dlZXAt Pm51bUJ1ZmZlckFsbG9jcyk7CiAJKmJ1ZmZlcl90b3RhbF9hbGxvY3MgPSBwZ19hdG9taWNf cmVhZF91NjQoJnN3ZWVwLT5udW1Ub3RhbEFsbG9jcyk7CisJKmJ1ZmZlcl9hbGxvY3MgPSBw Z19hdG9taWNfcmVhZF91MzIoJnN3ZWVwLT5udW1CdWZmZXJBbGxvY3MpOwogCi0JLyogY2Fs Y3VsYXRlIHRoZSBhY3R1YWwgYnVmZmVyIElEICovCi0JKm5leHRfdmljdGltX2J1ZmZlciA9 IHN3ZWVwLT5maXJzdEJ1ZmZlciArICgqbmV4dF92aWN0aW1fYnVmZmVyICUgc3dlZXAtPm51 bUJ1ZmZlcnMpOworCSpidWZmZXJfdG90YWxfcmVxX2FsbG9jcyA9IHBnX2F0b21pY19yZWFk X3U2NCgmc3dlZXAtPm51bVRvdGFsUmVxdWVzdGVkQWxsb2NzKTsKKwkqYnVmZmVyX3JlcV9h bGxvY3MgPSBwZ19hdG9taWNfcmVhZF91MzIoJnN3ZWVwLT5udW1SZXF1ZXN0ZWRBbGxvY3Mp OworCisJLyogcmV0dXJuIHRoZSB3ZWlnaHRzIGluIGEgbmV3bHkgYWxsb2NhdGVkIGFycmF5 ICovCisJKndlaWdodHMgPSBwYWxsb2NfYXJyYXkoaW50LCBTdHJhdGVneUNvbnRyb2wtPm51 bV9wYXJ0aXRpb25zKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IFN0cmF0ZWd5Q29udHJvbC0+ bnVtX3BhcnRpdGlvbnM7IGkrKykKKwl7CisJCSgqd2VpZ2h0cylbaV0gPSAoaW50KSBzd2Vl cC0+YmFsYW5jZVtpXTsKKwl9CiB9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdl L2J1Zl9pbnRlcm5hbHMuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5o CmluZGV4IDEzODY4NTYwNDZjLi43NzZiZTExZGVjMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9i dWZfaW50ZXJuYWxzLmgKQEAgLTQ0Myw2ICs0NDMsNyBAQCBleHRlcm4gQnVmZmVyRGVzYyAq U3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiBleHRl cm4gYm9vbCBTdHJhdGVneVJlamVjdEJ1ZmZlcihCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJh dGVneSwKIAkJCQkJCQkJIEJ1ZmZlckRlc2MgKmJ1ZiwgYm9vbCBmcm9tX3JpbmcpOwogCitl eHRlcm4gdm9pZCBTdHJhdGVneVN5bmNCYWxhbmNlKHZvaWQpOwogZXh0ZXJuIHZvaWQgU3Ry YXRlZ3lTeW5jUHJlcGFyZShpbnQgKm51bV9wYXJ0cywgdWludDMyICpudW1fYnVmX2FsbG9j KTsKIGV4dGVybiBpbnQJU3RyYXRlZ3lTeW5jU3RhcnQoaW50IHBhcnRpdGlvbiwgdWludDMy ICpjb21wbGV0ZV9wYXNzZXMsCiAJCQkJCQkJICBpbnQgKmZpcnN0X2J1ZmZlciwgaW50ICpu dW1fYnVmZmVycyk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5o IGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAppbmRleCA3MDUyZjlkZTU3Yy4uNGU3 YjFmY2Q0YWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysr IGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMzYwLDExICszNjAsMTMgQEAg ZXh0ZXJuIGludAlHZXRBY2Nlc3NTdHJhdGVneVBpbkxpbWl0KEJ1ZmZlckFjY2Vzc1N0cmF0 ZWd5IHN0cmF0ZWd5KTsKIAogZXh0ZXJuIHZvaWQgRnJlZUFjY2Vzc1N0cmF0ZWd5KEJ1ZmZl ckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5KTsKIGV4dGVybiB2b2lkIENsb2NrU3dlZXBQYXJ0 aXRpb25HZXRJbmZvKGludCBpZHgsCi0JCQkJCQkJCQkgICB1aW50MzIgKmNvbXBsZXRlX3Bh c3NlcywKLQkJCQkJCQkJCSAgIHVpbnQzMiAqbmV4dF92aWN0aW1fYnVmZmVyLAotCQkJCQkJ CQkJICAgdWludDY0ICpidWZmZXJfdG90YWxfYWxsb2NzLAotCQkJCQkJCQkJICAgdWludDMy ICpidWZmZXJfYWxsb2NzKTsKLQorCQkJCQkJCQkJIHVpbnQzMiAqY29tcGxldGVfcGFzc2Vz LAorCQkJCQkJCQkJIHVpbnQzMiAqbmV4dF92aWN0aW1fYnVmZmVyLAorCQkJCQkJCQkJIHVp bnQ2NCAqYnVmZmVyX3RvdGFsX2FsbG9jcywKKwkJCQkJCQkJCSB1aW50MzIgKmJ1ZmZlcl9h bGxvY3MsCisJCQkJCQkJCQkgdWludDY0ICpidWZmZXJfdG90YWxfcmVxX2FsbG9jcywKKwkJ CQkJCQkJCSB1aW50MzIgKmJ1ZmZlcl9yZXFfYWxsb2NzLAorCQkJCQkJCQkJIGludCAqKndl aWdodHMpOwogCiAvKiBpbmxpbmUgZnVuY3Rpb25zICovCiAKLS0gCjIuNTEuMAoK --------------apuxkCRUZ0GRSLZG7S4PIVYY Content-Type: text/x-patch; charset=UTF-8; name="v20251101-0002-clock-sweep-basic-partitioning.patch" Content-Disposition: attachment; filename="v20251101-0002-clock-sweep-basic-partitioning.patch" Content-Transfer-Encoding: base64 RnJvbSAxZWIxN2MyODE2NGIzMGY3NTkyMDhiNTZlYWE2OTkyMzY1ODJjMDA4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCAyOSBPY3QgMjAyNSAyMTozOTo0NyArMDEwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUxMTAxIDIvN10gY2xvY2stc3dlZXA6IGJhc2ljIHBhcnRpdGlvbmluZwoKUGFydGl0 aW9ucyB0aGUgImNsb2NrLXN3ZWVwIiBhbGdvcml0aG0gdG8gd29yayBvbiBpbmRpdmlkdWFs IHBhcnRpdGlvbnMsCm9uZSBieSBvbmUuIEVhY2ggYmFja2VuZCBwcm9jZXNzIGlzIG1hcHBl ZCB0byBvbmUgImhvbWUiIHBhcnRpdGlvbiwgd2l0aAphbiBpbmRlcGVuZGVudCBjbG9jayBo YW5kLiBUaGlzIHJlZHVjZXMgY29udGVudGlvbiBmb3Igd29ya2xvYWRzIHdpdGgKc2lnbmlm aWNhbnQgYnVmZmVyIHByZXNzdXJlLgoKVGhlIHBhdGNoIGV4dGVuZHMgdGhlICJwZ19idWZm ZXJjYWNoZV9wYXJ0aXRpb25zIiB2aWV3IHRvIGluY2x1ZGUKaW5mb3JtYXRpb24gYWJvdXQg dGhlIGNsb2NrLXN3ZWVwIGFjdGl2aXR5LgoKTm90ZTogVGhpcyBuZWVkcyBzb21lIHNvcnQg b2YgImJhbGFuY2luZyIgd2hlbiBvbmUgb2YgdGhlIHBhcnRpdGlvbnMgaXMKbXVjaCBidXNp ZXIgdGhhbiB0aGUgcmVzdCAoZS5nLiBiZWNhdXNlIHRoZXJlJ3MgYSBzaW5nbGUgYmFja2Vu ZCBjb25zdW1pbmcKYSBsb3Qgb2YgYnVmZmVycyBmcm9tIGl0KS4KCk5vdGU6IFRoZXJlJ3Mg YSBwcm9ibGVtIHdpdGggc29tZSB0ZXN0cyBydW5uaW5nIG91dCBvZiB1bnBpbm5lZCBidWZm ZXJzLApkdWUgdG8gKGludGVudGlvbmFsbHkpIHNldHRpbmcgc2hhcmVkIGJ1ZmZlcnMgdmVy eSBsb3cuIFRoYXQgaGFwcGVucwpiZWNhdXNlIFN0cmF0ZWd5R2V0QnVmZmVyKCkgb25seSBz ZWFyY2hlcyBhIHNpbmdsZSBwYXJ0aXRpb24sIGFuZCBpdApoYXMgYSBjb3VwbGUgbW9yZSBp c3N1ZXMuCi0tLQogLi4uL3BnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwgICAgICAgICAg ICAgIHwgICA4ICstCiBjb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3Bh Z2VzLmMgfCAgMzggKystCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5j ICAgICAgICAgfCAgIDcgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMg ICAgICAgICAgIHwgMTg2ICsrKysrKysrLS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvZnJlZWxpc3QuYyAgICAgICAgIHwgMjgzICsrKysrKysrKysrKysrKy0tLQogc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmggICAgICAgICAgIHwgICA1ICstCiBzcmMv aW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oICAgICAgICAgICAgICAgICAgfCAgIDUgKwogc3Jj L3Rlc3QvcmVjb3ZlcnkvdC8wMjdfc3RyZWFtX3JlZ3Jlc3MucGwgICAgIHwgICA1ICsKIHNy Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMSArCiA5 IGZpbGVzIGNoYW5nZWQsIDQzMiBpbnNlcnRpb25zKCspLCAxMDYgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS42 LS0xLjcuc3FsIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS42 LS0xLjcuc3FsCmluZGV4IGYxYzIwOTYwYjdlLi4xNGU3NTBiZWVmZiAxMDA2NDQKLS0tIGEv Y29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsCisr KyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNx bApAQCAtMTUsNyArMTUsMTMgQEAgQ1JFQVRFIFZJRVcgcGdfYnVmZmVyY2FjaGVfcGFydGl0 aW9ucyBBUwogCShwYXJ0aXRpb24gaW50ZWdlciwJCQktLSBwYXJ0aXRpb24gaW5kZXgKIAkg bnVtX2J1ZmZlcnMgaW50ZWdlciwJCS0tIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBwYXJ0 aXRpb24KIAkgZmlyc3RfYnVmZmVyIGludGVnZXIsCQktLSBmaXJzdCBidWZmZXIgb2YgcGFy dGl0aW9uCi0JIGxhc3RfYnVmZmVyIGludGVnZXIpOwkJLS0gbGFzdCBidWZmZXIgb2YgcGFy dGl0aW9uCisJIGxhc3RfYnVmZmVyIGludGVnZXIsCQktLSBsYXN0IGJ1ZmZlciBvZiBwYXJ0 aXRpb24KKworCSAtLSBjbG9ja3N3ZWVwIGNvdW50ZXJzCisJIG51bV9wYXNzZXMgYmlnaW50 LAkJCS0tIGNsb2Nrc3dlZXAgcGFzc2VzCisJIG5leHRfYnVmZmVyIGludGVnZXIsCQktLSBu ZXh0IHZpY3RpbSBidWZmZXIgZm9yIGNsb2Nrc3dlZXAKKwkgdG90YWxfYWxsb2NzIGJpZ2lu dCwJCS0tIGhhbmRsZWQgYWxsb2NzIChydW5uaW5nIHRvdGFsKQorCSBudW1fYWxsb2NzIGJp Z2ludCk7CQktLSBoYW5kbGVkIGFsbG9jcyAoY3VycmVudCBjeWNsZSkKIAogLS0gRG9uJ3Qg d2FudCB0aGVzZSB0byBiZSBhdmFpbGFibGUgdG8gcHVibGljLgogUkVWT0tFIEFMTCBPTiBG VU5DVElPTiBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKCkgRlJPTSBQVUJMSUM7CmRpZmYg LS1naXQgYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMg Yi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKaW5kZXgg ZGZlYzEzODA3MzYuLjk2ZWVlMjE5MzJmIDEwMDY0NAotLS0gYS9jb250cmliL3BnX2J1ZmZl cmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKKysrIGIvY29udHJpYi9wZ19idWZmZXJj YWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5l IE5VTV9CVUZGRVJDQUNIRV9FVklDVF9BTExfRUxFTSAzCiAKICNkZWZpbmUgTlVNX0JVRkZF UkNBQ0hFX05VTUFfRUxFTQkzCi0jZGVmaW5lIE5VTV9CVUZGRVJDQUNIRV9QQVJUSVRJT05T X0VMRU0JNAorI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19FTEVNCTgKIAog UEdfTU9EVUxFX01BR0lDX0VYVCgKIAkJCQkJLm5hbWUgPSAicGdfYnVmZmVyY2FjaGUiLApA QCAtODEwLDEyICs4MTAsMjAgQEAgcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyhQR19GVU5D VElPTl9BUkdTKQogCQl0dXBsZWRlc2MgPSBDcmVhdGVUZW1wbGF0ZVR1cGxlRGVzYyhleHBl Y3RlZF90dXBsZWRlc2MtPm5hdHRzKTsKIAkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVz YywgKEF0dHJOdW1iZXIpIDEsICJwYXJ0aXRpb24iLAogCQkJCQkJICAgSU5UNE9JRCwgLTEs IDApOwotCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgMSwg Im51bV9idWZmZXJzIiwKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJO dW1iZXIpIDIsICJudW1fYnVmZmVycyIsCiAJCQkJCQkgICBJTlQ0T0lELCAtMSwgMCk7Ci0J CVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSAyLCAiZmlyc3Rf YnVmZmVyIiwKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIp IDMsICJmaXJzdF9idWZmZXIiLAogCQkJCQkJICAgSU5UNE9JRCwgLTEsIDApOwotCQlUdXBs ZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgMywgImxhc3RfYnVmZmVy IiwKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDQsICJs YXN0X2J1ZmZlciIsCiAJCQkJCQkgICBJTlQ0T0lELCAtMSwgMCk7CisJCVR1cGxlRGVzY0lu aXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSA1LCAibnVtX3Bhc3NlcyIsCisJCQkJ CQkgICBJTlQ4T0lELCAtMSwgMCk7CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2Ms IChBdHRyTnVtYmVyKSA2LCAibmV4dF9idWZmZXIiLAorCQkJCQkJICAgSU5UNE9JRCwgLTEs IDApOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgNywg InRvdGFsX2FsbG9jcyIsCisJCQkJCQkgICBJTlQ4T0lELCAtMSwgMCk7CisJCVR1cGxlRGVz Y0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSA4LCAibnVtX2FsbG9jcyIsCisJ CQkJCQkgICBJTlQ4T0lELCAtMSwgMCk7CiAKIAkJZnVuY2N0eC0+dXNlcl9mY3R4ID0gQmxl c3NUdXBsZURlc2ModHVwbGVkZXNjKTsKIApAQCAtODM2LDEyICs4NDQsMjIgQEAgcGdfYnVm ZmVyY2FjaGVfcGFydGl0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQkJCQlmaXJzdF9idWZm ZXIsCiAJCQkJCWxhc3RfYnVmZmVyOwogCisJCXVpbnQ2NAkJYnVmZmVyX3RvdGFsX2FsbG9j czsKKworCQl1aW50MzIJCWNvbXBsZXRlX3Bhc3NlcywKKwkJCQkJbmV4dF92aWN0aW1fYnVm ZmVyLAorCQkJCQlidWZmZXJfYWxsb2NzOworCiAJCURhdHVtCQl2YWx1ZXNbTlVNX0JVRkZF UkNBQ0hFX1BBUlRJVElPTlNfRUxFTV07CiAJCWJvb2wJCW51bGxzW05VTV9CVUZGRVJDQUNI RV9QQVJUSVRJT05TX0VMRU1dOwogCiAJCUJ1ZmZlclBhcnRpdGlvbkdldChpLCAmbnVtX2J1 ZmZlcnMsCiAJCQkJCQkgICAmZmlyc3RfYnVmZmVyLCAmbGFzdF9idWZmZXIpOwogCisJCUNs b2NrU3dlZXBQYXJ0aXRpb25HZXRJbmZvKGksCisJCQkJCQkJCSAgICZjb21wbGV0ZV9wYXNz ZXMsICZuZXh0X3ZpY3RpbV9idWZmZXIsCisJCQkJCQkJCSAgICZidWZmZXJfdG90YWxfYWxs b2NzLCAmYnVmZmVyX2FsbG9jcyk7CisKIAkJdmFsdWVzWzBdID0gSW50MzJHZXREYXR1bShp KTsKIAkJbnVsbHNbMF0gPSBmYWxzZTsKIApAQCAtODU0LDYgKzg3MiwxOCBAQCBwZ19idWZm ZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCXZhbHVlc1szXSA9IElu dDMyR2V0RGF0dW0obGFzdF9idWZmZXIpOwogCQludWxsc1szXSA9IGZhbHNlOwogCisJCXZh bHVlc1s0XSA9IEludDY0R2V0RGF0dW0oY29tcGxldGVfcGFzc2VzKTsKKwkJbnVsbHNbNF0g PSBmYWxzZTsKKworCQl2YWx1ZXNbNV0gPSBJbnQzMkdldERhdHVtKG5leHRfdmljdGltX2J1 ZmZlcik7CisJCW51bGxzWzVdID0gZmFsc2U7CisKKwkJdmFsdWVzWzZdID0gSW50NjRHZXRE YXR1bShidWZmZXJfdG90YWxfYWxsb2NzKTsKKwkJbnVsbHNbNl0gPSBmYWxzZTsKKworCQl2 YWx1ZXNbN10gPSBJbnQ2NEdldERhdHVtKGJ1ZmZlcl9hbGxvY3MpOworCQludWxsc1s3XSA9 IGZhbHNlOworCiAJCS8qIEJ1aWxkIGFuZCByZXR1cm4gdGhlIHR1cGxlLiAqLwogCQl0dXBs ZSA9IGhlYXBfZm9ybV90dXBsZSgoVHVwbGVEZXNjKSBmdW5jY3R4LT51c2VyX2ZjdHgsIHZh bHVlcywgbnVsbHMpOwogCQlyZXN1bHQgPSBIZWFwVHVwbGVHZXREYXR1bSh0dXBsZSk7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYwppbmRleCAwMDdmNzgwNmRjNC4u MDM2MmZkYTI0YWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1 Zl9pbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYwpA QCAtMzIwLDMgKzMyMCwxMCBAQCBCdWZmZXJQYXJ0aXRpb25HZXQoaW50IGlkeCwgaW50ICpu dW1fYnVmZmVycywKIAllbG9nKEVSUk9SLCAiaW52YWxpZCBwYXJ0aXRpb24gaW5kZXgiKTsK IH0KIAorLyogcmV0dXJuIHBhcmFtZXRlcnMgYmVmb3JlIHRoZSBwYXJ0aXRpb25zIGFyZSBp bml0aWFsaXplZCAoZHVyaW5nIHNpemluZykgKi8KK3ZvaWQKK0J1ZmZlclBhcnRpdGlvblBh cmFtcyhpbnQgKm51bV9wYXJ0aXRpb25zKQoreworCWlmIChudW1fcGFydGl0aW9ucykKKwkJ Km51bV9wYXJ0aXRpb25zID0gTlVNX0NMT0NLX1NXRUVQX1BBUlRJVElPTlM7Cit9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4IGU4NTQ0YWNiNzg0Li4xNWNhNmY2 MGQ1NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMK KysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTM2MDksMzMg KzM2MDksMjkgQEAgQnVmZmVyU3luYyhpbnQgZmxhZ3MpCiB9CiAKIC8qCi0gKiBCZ0J1ZmZl clN5bmMgLS0gV3JpdGUgb3V0IHNvbWUgZGlydHkgYnVmZmVycyBpbiB0aGUgcG9vbC4KKyAq IEluZm9ybWF0aW9uIHNhdmVkIGJldHdlZW4gY2FsbHMgc28gd2UgY2FuIGRldGVybWluZSB0 aGUgc3RyYXRlZ3kKKyAqIHBvaW50J3MgYWR2YW5jZSByYXRlIGFuZCBhdm9pZCBzY2Fubmlu ZyBhbHJlYWR5LWNsZWFuZWQgYnVmZmVycy4KICAqCi0gKiBUaGlzIGlzIGNhbGxlZCBwZXJp b2RpY2FsbHkgYnkgdGhlIGJhY2tncm91bmQgd3JpdGVyIHByb2Nlc3MuCisgKiBYWFggT25l IHZhbHVlIHBlciBwYXJ0aXRpb24uIFdlIGRvbid0IGtub3cgaG93IG1hbnkgcGFydGl0aW9u cyBhcmUKKyAqIHRoZXJlLCBzbyBhbGxvY2F0ZSAzMiwgc2hvdWxkIGJlIGVub3VnaCBmb3Ig dGhlIFBvQyBwYXRjaC4KICAqCi0gKiBSZXR1cm5zIHRydWUgaWYgaXQncyBhcHByb3ByaWF0 ZSBmb3IgdGhlIGJnd3JpdGVyIHByb2Nlc3MgdG8gZ28gaW50bwotICogbG93LXBvd2VyIGhp YmVybmF0aW9uIG1vZGUuICAoVGhpcyBoYXBwZW5zIGlmIHRoZSBzdHJhdGVneSBjbG9jay1z d2VlcAotICogaGFzIGJlZW4gImxhcHBlZCIgYW5kIG5vIGJ1ZmZlciBhbGxvY2F0aW9ucyBo YXZlIG9jY3VycmVkIHJlY2VudGx5LAotICogb3IgaWYgdGhlIGJnd3JpdGVyIGhhcyBiZWVu IGVmZmVjdGl2ZWx5IGRpc2FibGVkIGJ5IHNldHRpbmcKLSAqIGJnd3JpdGVyX2xydV9tYXhw YWdlcyB0byAwLikKKyAqIFhYWCBtaWdodCBiZSBiZXR0ZXIgdG8gaGF2ZSBhIHBlci1wYXJ0 aXRpb24gc3RydWN0IHdpdGggYWxsIHRoZSBpbmZvCiAgKi8KLWJvb2wKLUJnQnVmZmVyU3lu YyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0KQorI2RlZmluZSBNQVhfQ0xPQ0tTV0VF UF9QQVJUSVRJT05TIDMyCitzdGF0aWMgYm9vbCBzYXZlZF9pbmZvX3ZhbGlkID0gZmFsc2U7 CitzdGF0aWMgaW50CXByZXZfc3RyYXRlZ3lfYnVmX2lkW01BWF9DTE9DS1NXRUVQX1BBUlRJ VElPTlNdOworc3RhdGljIHVpbnQzMiBwcmV2X3N0cmF0ZWd5X3Bhc3Nlc1tNQVhfQ0xPQ0tT V0VFUF9QQVJUSVRJT05TXTsKK3N0YXRpYyBpbnQJbmV4dF90b19jbGVhbltNQVhfQ0xPQ0tT V0VFUF9QQVJUSVRJT05TXTsKK3N0YXRpYyB1aW50MzIgbmV4dF9wYXNzZXNbTUFYX0NMT0NL U1dFRVBfUEFSVElUSU9OU107CisKKworc3RhdGljIGJvb2wKK0JnQnVmZmVyU3luY1BhcnRp dGlvbihXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0LCBpbnQgbnVtX3BhcnRpdGlvbnMs CisJCQkJCSAgaW50IHBhcnRpdGlvbiwgaW50IHJlY2VudF9hbGxvY19wYXJ0aXRpb24pCiB7 CiAJLyogaW5mbyBvYnRhaW5lZCBmcm9tIGZyZWVsaXN0LmMgKi8KIAlpbnQJCQlzdHJhdGVn eV9idWZfaWQ7CiAJdWludDMyCQlzdHJhdGVneV9wYXNzZXM7Ci0JdWludDMyCQlyZWNlbnRf YWxsb2M7Ci0KLQkvKgotCSAqIEluZm9ybWF0aW9uIHNhdmVkIGJldHdlZW4gY2FsbHMgc28g d2UgY2FuIGRldGVybWluZSB0aGUgc3RyYXRlZ3kKLQkgKiBwb2ludCdzIGFkdmFuY2UgcmF0 ZSBhbmQgYXZvaWQgc2Nhbm5pbmcgYWxyZWFkeS1jbGVhbmVkIGJ1ZmZlcnMuCi0JICovCi0J c3RhdGljIGJvb2wgc2F2ZWRfaW5mb192YWxpZCA9IGZhbHNlOwotCXN0YXRpYyBpbnQJcHJl dl9zdHJhdGVneV9idWZfaWQ7Ci0Jc3RhdGljIHVpbnQzMiBwcmV2X3N0cmF0ZWd5X3Bhc3Nl czsKLQlzdGF0aWMgaW50CW5leHRfdG9fY2xlYW47Ci0Jc3RhdGljIHVpbnQzMiBuZXh0X3Bh c3NlczsKIAogCS8qIE1vdmluZyBhdmVyYWdlcyBvZiBhbGxvY2F0aW9uIHJhdGUgYW5kIGNs ZWFuLWJ1ZmZlciBkZW5zaXR5ICovCiAJc3RhdGljIGZsb2F0IHNtb290aGVkX2FsbG9jID0g MDsKQEAgLTM2NjMsMjUgKzM2NTksMTYgQEAgQmdCdWZmZXJTeW5jKFdyaXRlYmFja0NvbnRl eHQgKndiX2NvbnRleHQpCiAJbG9uZwkJbmV3X3N0cmF0ZWd5X2RlbHRhOwogCXVpbnQzMgkJ bmV3X3JlY2VudF9hbGxvYzsKIAorCS8qIGJ1ZmZlciByYW5nZSBmb3IgdGhlIGNsb2Nrc3dl ZXAgcGFydGl0aW9uICovCisJaW50CQkJZmlyc3RfYnVmZmVyOworCWludAkJCW51bV9idWZm ZXJzOworCiAJLyoKIAkgKiBGaW5kIG91dCB3aGVyZSB0aGUgY2xvY2stc3dlZXAgY3VycmVu dGx5IGlzLCBhbmQgaG93IG1hbnkgYnVmZmVyCiAJICogYWxsb2NhdGlvbnMgaGF2ZSBoYXBw ZW5lZCBzaW5jZSBvdXIgbGFzdCBjYWxsLgogCSAqLwotCXN0cmF0ZWd5X2J1Zl9pZCA9IFN0 cmF0ZWd5U3luY1N0YXJ0KCZzdHJhdGVneV9wYXNzZXMsICZyZWNlbnRfYWxsb2MpOwotCi0J LyogUmVwb3J0IGJ1ZmZlciBhbGxvYyBjb3VudHMgdG8gcGdzdGF0ICovCi0JUGVuZGluZ0Jn V3JpdGVyU3RhdHMuYnVmX2FsbG9jICs9IHJlY2VudF9hbGxvYzsKLQotCS8qCi0JICogSWYg d2UncmUgbm90IHJ1bm5pbmcgdGhlIExSVSBzY2FuLCBqdXN0IHN0b3AgYWZ0ZXIgZG9pbmcg dGhlIHN0YXRzCi0JICogc3R1ZmYuICBXZSBtYXJrIHRoZSBzYXZlZCBzdGF0ZSBpbnZhbGlk IHNvIHRoYXQgd2UgY2FuIHJlY292ZXIgc2FuZWx5Ci0JICogaWYgTFJVIHNjYW4gaXMgdHVy bmVkIGJhY2sgb24gbGF0ZXIuCi0JICovCi0JaWYgKGJnd3JpdGVyX2xydV9tYXhwYWdlcyA8 PSAwKQotCXsKLQkJc2F2ZWRfaW5mb192YWxpZCA9IGZhbHNlOwotCQlyZXR1cm4gdHJ1ZTsK LQl9CisJc3RyYXRlZ3lfYnVmX2lkID0gU3RyYXRlZ3lTeW5jU3RhcnQocGFydGl0aW9uLCAm c3RyYXRlZ3lfcGFzc2VzLAorCQkJCQkJCQkJCSZmaXJzdF9idWZmZXIsICZudW1fYnVmZmVy cyk7CiAKIAkvKgogCSAqIENvbXB1dGUgc3RyYXRlZ3lfZGVsdGEgPSBob3cgbWFueSBidWZm ZXJzIGhhdmUgYmVlbiBzY2FubmVkIGJ5IHRoZQpAQCAtMzY5MywxNyArMzY4MCwxNyBAQCBC Z0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkKIAkgKi8KIAlpZiAo c2F2ZWRfaW5mb192YWxpZCkKIAl7Ci0JCWludDMyCQlwYXNzZXNfZGVsdGEgPSBzdHJhdGVn eV9wYXNzZXMgLSBwcmV2X3N0cmF0ZWd5X3Bhc3NlczsKKwkJaW50MzIJCXBhc3Nlc19kZWx0 YSA9IHN0cmF0ZWd5X3Bhc3NlcyAtIHByZXZfc3RyYXRlZ3lfcGFzc2VzW3BhcnRpdGlvbl07 CiAKLQkJc3RyYXRlZ3lfZGVsdGEgPSBzdHJhdGVneV9idWZfaWQgLSBwcmV2X3N0cmF0ZWd5 X2J1Zl9pZDsKLQkJc3RyYXRlZ3lfZGVsdGEgKz0gKGxvbmcpIHBhc3Nlc19kZWx0YSAqIE5C dWZmZXJzOworCQlzdHJhdGVneV9kZWx0YSA9IHN0cmF0ZWd5X2J1Zl9pZCAtIHByZXZfc3Ry YXRlZ3lfYnVmX2lkW3BhcnRpdGlvbl07CisJCXN0cmF0ZWd5X2RlbHRhICs9IChsb25nKSBw YXNzZXNfZGVsdGEgKiBudW1fYnVmZmVyczsKIAogCQlBc3NlcnQoc3RyYXRlZ3lfZGVsdGEg Pj0gMCk7CiAKLQkJaWYgKChpbnQzMikgKG5leHRfcGFzc2VzIC0gc3RyYXRlZ3lfcGFzc2Vz KSA+IDApCisJCWlmICgoaW50MzIpIChuZXh0X3Bhc3Nlc1twYXJ0aXRpb25dIC0gc3RyYXRl Z3lfcGFzc2VzKSA+IDApCiAJCXsKIAkJCS8qIHdlJ3JlIG9uZSBwYXNzIGFoZWFkIG9mIHRo ZSBzdHJhdGVneSBwb2ludCAqLwotCQkJYnVmc190b19sYXAgPSBzdHJhdGVneV9idWZfaWQg LSBuZXh0X3RvX2NsZWFuOworCQkJYnVmc190b19sYXAgPSBzdHJhdGVneV9idWZfaWQgLSBu ZXh0X3RvX2NsZWFuW3BhcnRpdGlvbl07CiAjaWZkZWYgQkdXX0RFQlVHCiAJCQllbG9nKERF QlVHMiwgImJnd3JpdGVyIGFoZWFkOiBiZ3cgJXUtJXUgc3RyYXRlZ3kgJXUtJXUgZGVsdGE9 JWxkIGxhcD0lZCIsCiAJCQkJIG5leHRfcGFzc2VzLCBuZXh0X3RvX2NsZWFuLApAQCAtMzcx MSwxMSArMzY5OCwxMSBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29u dGV4dCkKIAkJCQkgc3RyYXRlZ3lfZGVsdGEsIGJ1ZnNfdG9fbGFwKTsKICNlbmRpZgogCQl9 Ci0JCWVsc2UgaWYgKG5leHRfcGFzc2VzID09IHN0cmF0ZWd5X3Bhc3NlcyAmJgotCQkJCSBu ZXh0X3RvX2NsZWFuID49IHN0cmF0ZWd5X2J1Zl9pZCkKKwkJZWxzZSBpZiAobmV4dF9wYXNz ZXNbcGFydGl0aW9uXSA9PSBzdHJhdGVneV9wYXNzZXMgJiYKKwkJCQkgbmV4dF90b19jbGVh bltwYXJ0aXRpb25dID49IHN0cmF0ZWd5X2J1Zl9pZCkKIAkJewogCQkJLyogb24gc2FtZSBw YXNzLCBidXQgYWhlYWQgb3IgYXQgbGVhc3Qgbm90IGJlaGluZCAqLwotCQkJYnVmc190b19s YXAgPSBOQnVmZmVycyAtIChuZXh0X3RvX2NsZWFuIC0gc3RyYXRlZ3lfYnVmX2lkKTsKKwkJ CWJ1ZnNfdG9fbGFwID0gbnVtX2J1ZmZlcnMgLSAobmV4dF90b19jbGVhbltwYXJ0aXRpb25d IC0gc3RyYXRlZ3lfYnVmX2lkKTsKICNpZmRlZiBCR1dfREVCVUcKIAkJCWVsb2coREVCVUcy LCAiYmd3cml0ZXIgYWhlYWQ6IGJndyAldS0ldSBzdHJhdGVneSAldS0ldSBkZWx0YT0lbGQg bGFwPSVkIiwKIAkJCQkgbmV4dF9wYXNzZXMsIG5leHRfdG9fY2xlYW4sCkBAIC0zNzM1LDkg KzM3MjIsOSBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkK IAkJCQkgc3RyYXRlZ3lfcGFzc2VzLCBzdHJhdGVneV9idWZfaWQsCiAJCQkJIHN0cmF0ZWd5 X2RlbHRhKTsKICNlbmRpZgotCQkJbmV4dF90b19jbGVhbiA9IHN0cmF0ZWd5X2J1Zl9pZDsK LQkJCW5leHRfcGFzc2VzID0gc3RyYXRlZ3lfcGFzc2VzOwotCQkJYnVmc190b19sYXAgPSBO QnVmZmVyczsKKwkJCW5leHRfdG9fY2xlYW5bcGFydGl0aW9uXSA9IHN0cmF0ZWd5X2J1Zl9p ZDsKKwkJCW5leHRfcGFzc2VzW3BhcnRpdGlvbl0gPSBzdHJhdGVneV9wYXNzZXM7CisJCQli dWZzX3RvX2xhcCA9IG51bV9idWZmZXJzOwogCQl9CiAJfQogCWVsc2UKQEAgLTM3NTEsMTUg KzM3MzgsMTYgQEAgQmdCdWZmZXJTeW5jKFdyaXRlYmFja0NvbnRleHQgKndiX2NvbnRleHQp CiAJCQkgc3RyYXRlZ3lfcGFzc2VzLCBzdHJhdGVneV9idWZfaWQpOwogI2VuZGlmCiAJCXN0 cmF0ZWd5X2RlbHRhID0gMDsKLQkJbmV4dF90b19jbGVhbiA9IHN0cmF0ZWd5X2J1Zl9pZDsK LQkJbmV4dF9wYXNzZXMgPSBzdHJhdGVneV9wYXNzZXM7Ci0JCWJ1ZnNfdG9fbGFwID0gTkJ1 ZmZlcnM7CisJCW5leHRfdG9fY2xlYW5bcGFydGl0aW9uXSA9IHN0cmF0ZWd5X2J1Zl9pZDsK KwkJbmV4dF9wYXNzZXNbcGFydGl0aW9uXSA9IHN0cmF0ZWd5X3Bhc3NlczsKKwkJYnVmc190 b19sYXAgPSBudW1fYnVmZmVyczsKIAl9CiAKIAkvKiBVcGRhdGUgc2F2ZWQgaW5mbyBmb3Ig bmV4dCB0aW1lICovCi0JcHJldl9zdHJhdGVneV9idWZfaWQgPSBzdHJhdGVneV9idWZfaWQ7 Ci0JcHJldl9zdHJhdGVneV9wYXNzZXMgPSBzdHJhdGVneV9wYXNzZXM7Ci0Jc2F2ZWRfaW5m b192YWxpZCA9IHRydWU7CisJcHJldl9zdHJhdGVneV9idWZfaWRbcGFydGl0aW9uXSA9IHN0 cmF0ZWd5X2J1Zl9pZDsKKwlwcmV2X3N0cmF0ZWd5X3Bhc3Nlc1twYXJ0aXRpb25dID0gc3Ry YXRlZ3lfcGFzc2VzOworCS8qIFhYWCB0aGlzIG5lZWRzIHRvIGhhcHBlbiBvbmx5IGFmdGVy IGFsbCBwYXJ0aXRpb25zICovCisJLyogc2F2ZWRfaW5mb192YWxpZCA9IHRydWU7ICovCiAK IAkvKgogCSAqIENvbXB1dGUgaG93IG1hbnkgYnVmZmVycyBoYWQgdG8gYmUgc2Nhbm5lZCBm b3IgZWFjaCBuZXcgYWxsb2NhdGlvbiwgaWUsCkBAIC0zNzY3LDkgKzM3NTUsOSBAQCBCZ0J1 ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkKIAkgKgogCSAqIElmIHRo ZSBzdHJhdGVneSBwb2ludCBkaWRuJ3QgbW92ZSwgd2UgZG9uJ3QgdXBkYXRlIHRoZSBkZW5z aXR5IGVzdGltYXRlCiAJICovCi0JaWYgKHN0cmF0ZWd5X2RlbHRhID4gMCAmJiByZWNlbnRf YWxsb2MgPiAwKQorCWlmIChzdHJhdGVneV9kZWx0YSA+IDAgJiYgcmVjZW50X2FsbG9jX3Bh cnRpdGlvbiA+IDApCiAJewotCQlzY2Fuc19wZXJfYWxsb2MgPSAoZmxvYXQpIHN0cmF0ZWd5 X2RlbHRhIC8gKGZsb2F0KSByZWNlbnRfYWxsb2M7CisJCXNjYW5zX3Blcl9hbGxvYyA9IChm bG9hdCkgc3RyYXRlZ3lfZGVsdGEgLyAoZmxvYXQpIHJlY2VudF9hbGxvY19wYXJ0aXRpb247 CiAJCXNtb290aGVkX2RlbnNpdHkgKz0gKHNjYW5zX3Blcl9hbGxvYyAtIHNtb290aGVkX2Rl bnNpdHkpIC8KIAkJCXNtb290aGluZ19zYW1wbGVzOwogCX0KQEAgLTM3NzksNyArMzc2Nyw3 IEBAIEJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0KQogCSAqIHN0 cmF0ZWd5IHBvaW50IGFuZCB3aGVyZSB3ZSd2ZSBzY2FubmVkIGFoZWFkIHRvLCBiYXNlZCBv biB0aGUgc21vb3RoZWQKIAkgKiBkZW5zaXR5IGVzdGltYXRlLgogCSAqLwotCWJ1ZnNfYWhl YWQgPSBOQnVmZmVycyAtIGJ1ZnNfdG9fbGFwOworCWJ1ZnNfYWhlYWQgPSBudW1fYnVmZmVy cyAtIGJ1ZnNfdG9fbGFwOwogCXJldXNhYmxlX2J1ZmZlcnNfZXN0ID0gKGZsb2F0KSBidWZz X2FoZWFkIC8gc21vb3RoZWRfZGVuc2l0eTsKIAogCS8qCkBAIC0zNzg3LDEwICszNzc1LDEw IEBAIEJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0KQogCSAqIGEg dHJ1ZSBhdmVyYWdlIHdlIHdhbnQgYSBmYXN0LWF0dGFjaywgc2xvdy1kZWNsaW5lIGJlaGF2 aW9yOiB3ZQogCSAqIGltbWVkaWF0ZWx5IGZvbGxvdyBhbnkgaW5jcmVhc2UuCiAJICovCi0J aWYgKHNtb290aGVkX2FsbG9jIDw9IChmbG9hdCkgcmVjZW50X2FsbG9jKQotCQlzbW9vdGhl ZF9hbGxvYyA9IHJlY2VudF9hbGxvYzsKKwlpZiAoc21vb3RoZWRfYWxsb2MgPD0gKGZsb2F0 KSByZWNlbnRfYWxsb2NfcGFydGl0aW9uKQorCQlzbW9vdGhlZF9hbGxvYyA9IHJlY2VudF9h bGxvY19wYXJ0aXRpb247CiAJZWxzZQotCQlzbW9vdGhlZF9hbGxvYyArPSAoKGZsb2F0KSBy ZWNlbnRfYWxsb2MgLSBzbW9vdGhlZF9hbGxvYykgLworCQlzbW9vdGhlZF9hbGxvYyArPSAo KGZsb2F0KSByZWNlbnRfYWxsb2NfcGFydGl0aW9uIC0gc21vb3RoZWRfYWxsb2MpIC8KIAkJ CXNtb290aGluZ19zYW1wbGVzOwogCiAJLyogU2NhbGUgdGhlIGVzdGltYXRlIGJ5IGEgR1VD IHRvIGFsbG93IG1vcmUgYWdncmVzc2l2ZSB0dW5pbmcuICovCkBAIC0zODE3LDcgKzM4MDUs NyBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkKIAkgKiB0 aGUgQkdXIHdpbGwgYmUgY2FsbGVkIGR1cmluZyB0aGUgc2Nhbl93aG9sZV9wb29sIHRpbWU7 IHNsaWNlIHRoZQogCSAqIGJ1ZmZlciBwb29sIGludG8gdGhhdCBtYW55IHNlY3Rpb25zLgog CSAqLwotCW1pbl9zY2FuX2J1ZmZlcnMgPSAoaW50KSAoTkJ1ZmZlcnMgLyAoc2Nhbl93aG9s ZV9wb29sX21pbGxpc2Vjb25kcyAvIEJnV3JpdGVyRGVsYXkpKTsKKwltaW5fc2Nhbl9idWZm ZXJzID0gKGludCkgKG51bV9idWZmZXJzIC8gKHNjYW5fd2hvbGVfcG9vbF9taWxsaXNlY29u ZHMgLyBCZ1dyaXRlckRlbGF5KSk7CiAKIAlpZiAodXBjb21pbmdfYWxsb2NfZXN0IDwgKG1p bl9zY2FuX2J1ZmZlcnMgKyByZXVzYWJsZV9idWZmZXJzX2VzdCkpCiAJewpAQCAtMzg0Miwy MCArMzgzMCwyMCBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4 dCkKIAkvKiBFeGVjdXRlIHRoZSBMUlUgc2NhbiAqLwogCXdoaWxlIChudW1fdG9fc2NhbiA+ IDAgJiYgcmV1c2FibGVfYnVmZmVycyA8IHVwY29taW5nX2FsbG9jX2VzdCkKIAl7Ci0JCWlu dAkJCXN5bmNfc3RhdGUgPSBTeW5jT25lQnVmZmVyKG5leHRfdG9fY2xlYW4sIHRydWUsCisJ CWludAkJCXN5bmNfc3RhdGUgPSBTeW5jT25lQnVmZmVyKG5leHRfdG9fY2xlYW5bcGFydGl0 aW9uXSwgdHJ1ZSwKIAkJCQkJCQkJCQkJICAgd2JfY29udGV4dCk7CiAKLQkJaWYgKCsrbmV4 dF90b19jbGVhbiA+PSBOQnVmZmVycykKKwkJaWYgKCsrbmV4dF90b19jbGVhbltwYXJ0aXRp b25dID49IChmaXJzdF9idWZmZXIgKyBudW1fYnVmZmVycykpCiAJCXsKLQkJCW5leHRfdG9f Y2xlYW4gPSAwOwotCQkJbmV4dF9wYXNzZXMrKzsKKwkJCW5leHRfdG9fY2xlYW5bcGFydGl0 aW9uXSA9IGZpcnN0X2J1ZmZlcjsKKwkJCW5leHRfcGFzc2VzW3BhcnRpdGlvbl0rKzsKIAkJ fQogCQludW1fdG9fc2Nhbi0tOwogCiAJCWlmIChzeW5jX3N0YXRlICYgQlVGX1dSSVRURU4p CiAJCXsKIAkJCXJldXNhYmxlX2J1ZmZlcnMrKzsKLQkJCWlmICgrK251bV93cml0dGVuID49 IGJnd3JpdGVyX2xydV9tYXhwYWdlcykKKwkJCWlmICgrK251bV93cml0dGVuID49IChiZ3dy aXRlcl9scnVfbWF4cGFnZXMgLyBudW1fcGFydGl0aW9ucykpCiAJCQl7CiAJCQkJUGVuZGlu Z0JnV3JpdGVyU3RhdHMubWF4d3JpdHRlbl9jbGVhbisrOwogCQkJCWJyZWFrOwpAQCAtMzg2 OSw3ICszODU3LDcgQEAgQmdCdWZmZXJTeW5jKFdyaXRlYmFja0NvbnRleHQgKndiX2NvbnRl eHQpCiAKICNpZmRlZiBCR1dfREVCVUcKIAllbG9nKERFQlVHMSwgImJnd3JpdGVyOiByZWNl bnRfYWxsb2M9JXUgc21vb3RoZWQ9JS4yZiBkZWx0YT0lbGQgYWhlYWQ9JWQgZGVuc2l0eT0l LjJmIHJldXNhYmxlX2VzdD0lZCB1cGNvbWluZ19lc3Q9JWQgc2Nhbm5lZD0lZCB3cm90ZT0l ZCByZXVzYWJsZT0lZCIsCi0JCSByZWNlbnRfYWxsb2MsIHNtb290aGVkX2FsbG9jLCBzdHJh dGVneV9kZWx0YSwgYnVmc19haGVhZCwKKwkJIHJlY2VudF9hbGxvY19wYXJ0aXRpb24sIHNt b290aGVkX2FsbG9jLCBzdHJhdGVneV9kZWx0YSwgYnVmc19haGVhZCwKIAkJIHNtb290aGVk X2RlbnNpdHksIHJldXNhYmxlX2J1ZmZlcnNfZXN0LCB1cGNvbWluZ19hbGxvY19lc3QsCiAJ CSBidWZzX3RvX2xhcCAtIG51bV90b19zY2FuLAogCQkgbnVtX3dyaXR0ZW4sCkBAIC0zODk5 LDggKzM4ODcsNzQgQEAgQmdCdWZmZXJTeW5jKFdyaXRlYmFja0NvbnRleHQgKndiX2NvbnRl eHQpCiAjZW5kaWYKIAl9CiAKKwkvKiBjYW4gdGhpcyBwYXJ0aXRpb24gaGliZXJuYXRlICov CisJcmV0dXJuIChidWZzX3RvX2xhcCA9PSAwICYmIHJlY2VudF9hbGxvY19wYXJ0aXRpb24g PT0gMCk7Cit9CisKKy8qCisgKiBCZ0J1ZmZlclN5bmMgLS0gV3JpdGUgb3V0IHNvbWUgZGly dHkgYnVmZmVycyBpbiB0aGUgcG9vbC4KKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBwZXJpb2Rp Y2FsbHkgYnkgdGhlIGJhY2tncm91bmQgd3JpdGVyIHByb2Nlc3MuCisgKgorICogUmV0dXJu cyB0cnVlIGlmIGl0J3MgYXBwcm9wcmlhdGUgZm9yIHRoZSBiZ3dyaXRlciBwcm9jZXNzIHRv IGdvIGludG8KKyAqIGxvdy1wb3dlciBoaWJlcm5hdGlvbiBtb2RlLiAgKFRoaXMgaGFwcGVu cyBpZiB0aGUgc3RyYXRlZ3kgY2xvY2stc3dlZXAKKyAqIGhhcyBiZWVuICJsYXBwZWQiIGFu ZCBubyBidWZmZXIgYWxsb2NhdGlvbnMgaGF2ZSBvY2N1cnJlZCByZWNlbnRseSwKKyAqIG9y IGlmIHRoZSBiZ3dyaXRlciBoYXMgYmVlbiBlZmZlY3RpdmVseSBkaXNhYmxlZCBieSBzZXR0 aW5nCisgKiBiZ3dyaXRlcl9scnVfbWF4cGFnZXMgdG8gMC4pCisgKi8KK2Jvb2wKK0JnQnVm ZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0KQoreworCS8qIGluZm8gb2J0 YWluZWQgZnJvbSBmcmVlbGlzdC5jICovCisJdWludDMyCQlyZWNlbnRfYWxsb2M7CisJdWlu dDMyCQlyZWNlbnRfYWxsb2NfcGFydGl0aW9uOworCWludAkJCW51bV9wYXJ0aXRpb25zOwor CisJLyogYXNzdW1lIHdlIGNhbiBoaWJlcm5hdGUsIGFueSBwYXJ0aXRpb24gY2FuIHNldCB0 byBmYWxzZSAqLworCWJvb2wJCWhpYmVybmF0ZSA9IHRydWU7CisKKwkvKiBnZXQgdGhlIG51 bWJlciBvZiBjbG9ja3N3ZWVwIHBhcnRpdGlvbnMsIGFuZCB0b3RhbCBhbGxvYyBjb3VudCAq LworCVN0cmF0ZWd5U3luY1ByZXBhcmUoJm51bV9wYXJ0aXRpb25zLCAmcmVjZW50X2FsbG9j KTsKKworCUFzc2VydChudW1fcGFydGl0aW9ucyA8PSBNQVhfQ0xPQ0tTV0VFUF9QQVJUSVRJ T05TKTsKKworCS8qIFJlcG9ydCBidWZmZXIgYWxsb2MgY291bnRzIHRvIHBnc3RhdCAqLwor CVBlbmRpbmdCZ1dyaXRlclN0YXRzLmJ1Zl9hbGxvYyArPSByZWNlbnRfYWxsb2M7CisKKwkv KiBhdmVyYWdlIGFsbG9jIGJ1ZmZlcnMgcGVyIHBhcnRpdGlvbiAqLworCXJlY2VudF9hbGxv Y19wYXJ0aXRpb24gPSAocmVjZW50X2FsbG9jIC8gbnVtX3BhcnRpdGlvbnMpOworCisJLyoK KwkgKiBJZiB3ZSdyZSBub3QgcnVubmluZyB0aGUgTFJVIHNjYW4sIGp1c3Qgc3RvcCBhZnRl ciBkb2luZyB0aGUgc3RhdHMKKwkgKiBzdHVmZi4gIFdlIG1hcmsgdGhlIHNhdmVkIHN0YXRl IGludmFsaWQgc28gdGhhdCB3ZSBjYW4gcmVjb3ZlciBzYW5lbHkKKwkgKiBpZiBMUlUgc2Nh biBpcyB0dXJuZWQgYmFjayBvbiBsYXRlci4KKwkgKi8KKwlpZiAoYmd3cml0ZXJfbHJ1X21h eHBhZ2VzIDw9IDApCisJeworCQlzYXZlZF9pbmZvX3ZhbGlkID0gZmFsc2U7CisJCXJldHVy biB0cnVlOworCX0KKworCS8qCisJICogbm93IHByb2Nlc3MgdGhlIGNsb2Nrc3dlZXAgcGFy dGl0aW9ucywgb25lIGJ5IG9uZSwgdXNpbmcgdGhlIHNhbWUKKwkgKiBjbGVhbnVwIHRoYXQg d2UgdXNlZCBmb3IgYWxsIGJ1ZmZlcnMKKwkgKgorCSAqIFhYWCBNYXliZSB3ZSBzaG91bGQg cmFuZG9taXplIHRoZSBvcmRlciBvZiBwYXJ0aXRpb25zIGEgYml0LCBzbyB0aGF0IHdlCisJ ICogZG9uJ3Qgc3RhcnQgZnJvbSBwYXJ0aXRpb24gMCBhbGwgdGhlIHRpbWU/IFBlcmhhcHMg bm90IGVudGlyZWx5LCBidXQgYXQKKwkgKiBsZWFzdCBwaWNrIGEgcmFuZG9tIHN0YXJ0aW5n IHBvaW50PworCSAqLworCWZvciAoaW50IHBhcnRpdGlvbiA9IDA7IHBhcnRpdGlvbiA8IG51 bV9wYXJ0aXRpb25zOyBwYXJ0aXRpb24rKykKKwl7CisJCS8qIGhpYmVybmF0ZSBpZiBhbGwg cGFydGl0aW9ucyBjYW4gaGliZXJuYXRlICovCisJCWhpYmVybmF0ZSAmPSBCZ0J1ZmZlclN5 bmNQYXJ0aXRpb24od2JfY29udGV4dCwgbnVtX3BhcnRpdGlvbnMsCisJCQkJCQkJCQkJICAg cGFydGl0aW9uLCByZWNlbnRfYWxsb2NfcGFydGl0aW9uKTsKKwl9CisKKwkvKiBub3cgdGhh dCB3ZSd2ZSBzY2FubmVkIGFsbCBwYXJ0aXRpb25zLCBtYXJrIHRoZSBjYWNoZWQgaW5mbyBh cyB2YWxpZCAqLworCXNhdmVkX2luZm9fdmFsaWQgPSB0cnVlOworCiAJLyogUmV0dXJuIHRy dWUgaWYgT0sgdG8gaGliZXJuYXRlICovCi0JcmV0dXJuIChidWZzX3RvX2xhcCA9PSAwICYm IHJlY2VudF9hbGxvYyA9PSAwKTsKKwlyZXR1cm4gaGliZXJuYXRlOwogfQogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKaW5kZXggN2ZlMzRkM2VmNGMuLjFk MmY5N2I0ZDFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVl bGlzdC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKQEAg LTE1LDI3ICsxNSw0NyBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2lmZGVm IFVTRV9MSUJOVU1BCisjaW5jbHVkZSA8c2NoZWQuaD4KKyNlbmRpZgorCisjaWZkZWYgVVNF X0xJQk5VTUEKKyNpbmNsdWRlIDxudW1hLmg+CisjaW5jbHVkZSA8bnVtYWlmLmg+CisjZW5k aWYKKwogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvcnQvYXRvbWljcy5oIgog I2luY2x1ZGUgInN0b3JhZ2UvYnVmX2ludGVybmFscy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv YnVmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdl L3Byb2MuaCIKIAogI2RlZmluZSBJTlRfQUNDRVNTX09OQ0UodmFyKQkoKGludCkoKigodm9s YXRpbGUgaW50ICopJih2YXIpKSkpCiAKIAogLyoKLSAqIFRoZSBzaGFyZWQgZnJlZWxpc3Qg Y29udHJvbCBpbmZvcm1hdGlvbi4KKyAqIEluZm9ybWF0aW9uIGFib3V0IG9uZSBwYXJ0aXRp b24gb2YgdGhlIENsb2NrU3dlZXAgKG9uIGEgc3Vic2V0IG9mIGJ1ZmZlcnMpLgorICoKKyAq IFhYWCBTaG91bGQgYmUgY2FyZWZ1bCB0byBhbGlnbiB0aGlzIHRvIGNhY2hlbGluZXMsIGV0 Yy4KICAqLwogdHlwZWRlZiBzdHJ1Y3QKIHsKIAkvKiBTcGlubG9jazogcHJvdGVjdHMgdGhl IHZhbHVlcyBiZWxvdyAqLwotCXNsb2NrX3QJCWJ1ZmZlcl9zdHJhdGVneV9sb2NrOworCXNs b2NrX3QJCWNsb2NrX3N3ZWVwX2xvY2s7CisKKwkvKiByYW5nZSBmb3IgdGhpcyBjbG9jayB3 ZWVwIHBhcnRpdGlvbiAqLworCWludDMyCQlmaXJzdEJ1ZmZlcjsKKwlpbnQzMgkJbnVtQnVm ZmVyczsKIAogCS8qCiAJICogY2xvY2stc3dlZXAgaGFuZDogaW5kZXggb2YgbmV4dCBidWZm ZXIgdG8gY29uc2lkZXIgZ3JhYmJpbmcuIE5vdGUgdGhhdAogCSAqIHRoaXMgaXNuJ3QgYSBj b25jcmV0ZSBidWZmZXIgLSB3ZSBvbmx5IGV2ZXIgaW5jcmVhc2UgdGhlIHZhbHVlLiBTbywg dG8KIAkgKiBnZXQgYW4gYWN0dWFsIGJ1ZmZlciwgaXQgbmVlZHMgdG8gYmUgdXNlZCBtb2R1 bG8gTkJ1ZmZlcnMuCisJICoKKwkgKiBYWFggVGhpcyBpcyByZWxhdGl2ZSB0byBmaXJzdEJ1 ZmZlciwgc28gbmVlZHMgdG8gYmUgb2Zmc2V0IHByb3Blcmx5LgorCSAqCisJICogWFhYIGZp cnN0QnVmZmVyICsgKG5leHRWaWN0aW1CdWZmZXIgJSBudW1CdWZmZXJzKQogCSAqLwogCXBn X2F0b21pY191aW50MzIgbmV4dFZpY3RpbUJ1ZmZlcjsKIApAQCAtNDYsMTEgKzY2LDMyIEBA IHR5cGVkZWYgc3RydWN0CiAJdWludDMyCQljb21wbGV0ZVBhc3NlczsgLyogQ29tcGxldGUg Y3ljbGVzIG9mIHRoZSBjbG9jay1zd2VlcCAqLwogCXBnX2F0b21pY191aW50MzIgbnVtQnVm ZmVyQWxsb2NzOwkvKiBCdWZmZXJzIGFsbG9jYXRlZCBzaW5jZSBsYXN0IHJlc2V0ICovCiAK KwkvKiBydW5uaW5nIHRvdGFsIG9mIGFsbG9jcyAqLworCXBnX2F0b21pY191aW50NjQgbnVt VG90YWxBbGxvY3M7CisKK30gQ2xvY2tTd2VlcDsKKworLyoKKyAqIFRoZSBzaGFyZWQgZnJl ZWxpc3QgY29udHJvbCBpbmZvcm1hdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwkv KiBTcGlubG9jazogcHJvdGVjdHMgdGhlIHZhbHVlcyBiZWxvdyAqLworCXNsb2NrX3QJCWJ1 ZmZlcl9zdHJhdGVneV9sb2NrOworCiAJLyoKIAkgKiBCZ3dvcmtlciBwcm9jZXNzIHRvIGJl IG5vdGlmaWVkIHVwb24gYWN0aXZpdHkgb3IgLTEgaWYgbm9uZS4gU2VlCiAJICogU3RyYXRl Z3lOb3RpZnlCZ1dyaXRlci4KIAkgKi8KIAlpbnQJCQliZ3dwcm9jbm87CisJLy8gdGhlIF9h dHRyaWJ1dGVfIGRvZXMgbm90IHdvcmsgb24gV2luZG93cywgaXQgc2VlbXMKKwkvL2ludAkJ CV9fYXR0cmlidXRlX18oKGFsaWduZWQoNjQpKSkgYmd3cHJvY25vOworCisJLyogaW5mbyBh Ym91dCBmcmVlbGlzdCBwYXJ0aXRpb25pbmcgKi8KKwlpbnQJCQludW1fcGFydGl0aW9uczsK KworCS8qIGNsb2Nrc3dlZXAgcGFydGl0aW9ucyAqLworCUNsb2NrU3dlZXAJc3dlZXBzW0ZM RVhJQkxFX0FSUkFZX01FTUJFUl07CiB9IEJ1ZmZlclN0cmF0ZWd5Q29udHJvbDsKIAogLyog UG9pbnRlcnMgdG8gc2hhcmVkIHN0YXRlICovCkBAIC04OSw2ICsxMzAsNyBAQCBzdGF0aWMg QnVmZmVyRGVzYyAqR2V0QnVmZmVyRnJvbVJpbmcoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3Ry YXRlZ3ksCiAJCQkJCQkJCQkgdWludDMyICpidWZfc3RhdGUpOwogc3RhdGljIHZvaWQgQWRk QnVmZmVyVG9SaW5nKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCQkJCUJ1 ZmZlckRlc2MgKmJ1Zik7CitzdGF0aWMgQ2xvY2tTd2VlcCAqQ2hvb3NlQ2xvY2tTd2VlcCh2 b2lkKTsKIAogLyoKICAqIENsb2NrU3dlZXBUaWNrIC0gSGVscGVyIHJvdXRpbmUgZm9yIFN0 cmF0ZWd5R2V0QnVmZmVyKCkKQEAgLTEwMCw2ICsxNDIsNyBAQCBzdGF0aWMgaW5saW5lIHVp bnQzMgogQ2xvY2tTd2VlcFRpY2sodm9pZCkKIHsKIAl1aW50MzIJCXZpY3RpbTsKKwlDbG9j a1N3ZWVwICpzd2VlcCA9IENob29zZUNsb2NrU3dlZXAoKTsKIAogCS8qCiAJICogQXRvbWlj YWxseSBtb3ZlIGhhbmQgYWhlYWQgb25lIGJ1ZmZlciAtIGlmIHRoZXJlJ3Mgc2V2ZXJhbCBw cm9jZXNzZXMKQEAgLTEwNywxNCArMTUwLDE0IEBAIENsb2NrU3dlZXBUaWNrKHZvaWQpCiAJ ICogYXBwYXJlbnQgb3JkZXIuCiAJICovCiAJdmljdGltID0KLQkJcGdfYXRvbWljX2ZldGNo X2FkZF91MzIoJlN0cmF0ZWd5Q29udHJvbC0+bmV4dFZpY3RpbUJ1ZmZlciwgMSk7CisJCXBn X2F0b21pY19mZXRjaF9hZGRfdTMyKCZzd2VlcC0+bmV4dFZpY3RpbUJ1ZmZlciwgMSk7CiAK LQlpZiAodmljdGltID49IE5CdWZmZXJzKQorCWlmICh2aWN0aW0gPj0gc3dlZXAtPm51bUJ1 ZmZlcnMpCiAJewogCQl1aW50MzIJCW9yaWdpbmFsVmljdGltID0gdmljdGltOwogCiAJCS8q IGFsd2F5cyB3cmFwIHdoYXQgd2UgbG9vayB1cCBpbiBCdWZmZXJEZXNjcmlwdG9ycyAqLwot CQl2aWN0aW0gPSB2aWN0aW0gJSBOQnVmZmVyczsKKwkJdmljdGltID0gdmljdGltICUgc3dl ZXAtPm51bUJ1ZmZlcnM7CiAKIAkJLyoKIAkJICogSWYgd2UncmUgdGhlIG9uZSB0aGF0IGp1 c3QgY2F1c2VkIGEgd3JhcGFyb3VuZCwgZm9yY2UKQEAgLTE0MCwxOSArMTgzLDYxIEBAIENs b2NrU3dlZXBUaWNrKHZvaWQpCiAJCQkJICogY291bGQgbGVhZCB0byBhbiBvdmVyZmxvdyBv ZiBuZXh0VmljdGltQnVmZmVycywgYnV0IHRoYXQncwogCQkJCSAqIGhpZ2hseSB1bmxpa2Vs eSBhbmQgd291bGRuJ3QgYmUgcGFydGljdWxhcmx5IGhhcm1mdWwuCiAJCQkJICovCi0JCQkJ U3BpbkxvY2tBY3F1aXJlKCZTdHJhdGVneUNvbnRyb2wtPmJ1ZmZlcl9zdHJhdGVneV9sb2Nr KTsKKwkJCQlTcGluTG9ja0FjcXVpcmUoJnN3ZWVwLT5jbG9ja19zd2VlcF9sb2NrKTsKIAot CQkJCXdyYXBwZWQgPSBleHBlY3RlZCAlIE5CdWZmZXJzOworCQkJCXdyYXBwZWQgPSBleHBl Y3RlZCAlIHN3ZWVwLT5udW1CdWZmZXJzOwogCi0JCQkJc3VjY2VzcyA9IHBnX2F0b21pY19j b21wYXJlX2V4Y2hhbmdlX3UzMigmU3RyYXRlZ3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVy LAorCQkJCXN1Y2Nlc3MgPSBwZ19hdG9taWNfY29tcGFyZV9leGNoYW5nZV91MzIoJnN3ZWVw LT5uZXh0VmljdGltQnVmZmVyLAogCQkJCQkJCQkJCQkJCQkgJmV4cGVjdGVkLCB3cmFwcGVk KTsKIAkJCQlpZiAoc3VjY2VzcykKLQkJCQkJU3RyYXRlZ3lDb250cm9sLT5jb21wbGV0ZVBh c3NlcysrOwotCQkJCVNwaW5Mb2NrUmVsZWFzZSgmU3RyYXRlZ3lDb250cm9sLT5idWZmZXJf c3RyYXRlZ3lfbG9jayk7CisJCQkJCXN3ZWVwLT5jb21wbGV0ZVBhc3NlcysrOworCQkJCVNw aW5Mb2NrUmVsZWFzZSgmc3dlZXAtPmNsb2NrX3N3ZWVwX2xvY2spOwogCQkJfQogCQl9CiAJ fQotCXJldHVybiB2aWN0aW07CisKKwkvKiBYWFggYnVmZmVyIElEcyBhcmUgMS1iYXNlZCwg d2UncmUgY2FsY3VsYXRpbmcgMC1iYXNlZCBpbmRleGVzICovCisJQXNzZXJ0KEJ1ZmZlcklz VmFsaWQoMSArIHN3ZWVwLT5maXJzdEJ1ZmZlciArICh2aWN0aW0gJSBzd2VlcC0+bnVtQnVm ZmVycykpKTsKKworCXJldHVybiBzd2VlcC0+Zmlyc3RCdWZmZXIgKyB2aWN0aW07Cit9CisK Ky8qCisgKiBjYWxjdWxhdGVfcGFydGl0aW9uX2luZGV4CisgKgkJY2FsY3VsYXRlIHRoZSBi dWZmZXIgLyBjbG9jay1zd2VlcCBwYXJ0aXRpb24gdG8gdXNlCisgKgorICogdXNlIFBJRCB0 byBkZXRlcm1pbmUgdGhlIGJ1ZmZlciBwYXJ0aXRpb24KKyAqCisgKiBYWFggV2UgY291bGQg dXNlIE5VTUEgbm9kZSAvIGNvcmUgSUQgdG8gcGljayBwYXJ0aXRpb24sIGJ1dCB3ZSdkIG5l ZWQKKyAqIHRvIGhhbmRsZSBjYXNlcyB3aXRoIGZld2VyIG5vZGVzL2NvcmVzIHRoYW4gcGFy dGl0aW9ucyBzb21laG93LiBBbHRob3VnaCwKKyAqIG1heWJlIHRoZSBiYWxhbmNpbmcgd291 bGQgaGFuZGxlIHRoYXQgdG9vLgorICovCitzdGF0aWMgaW50CitjYWxjdWxhdGVfcGFydGl0 aW9uX2luZGV4KHZvaWQpCit7CisJcmV0dXJuIChNeVByb2NQaWQgJSBTdHJhdGVneUNvbnRy b2wtPm51bV9wYXJ0aXRpb25zKTsKK30KKworLyoKKyAqIENob29zZUNsb2NrU3dlZXAKKyAq CQlwaWNrIGEgY2xvY2tzd2VlcCBwYXJ0aXRpb24gYmFzZWQgb24gTlVNQSBub2RlIGFuZCBD UFUKKyAqCisgKiBUaGUgbnVtYmVyIG9mIGNsb2Nrc3dlZXAgcGFydGl0aW9ucyBtYXkgbm90 IG1hdGNoIHRoZSBudW1iZXIgb2YgTlVNQQorICogbm9kZXMsIGJ1dCBpdCBzaG91bGQgbm90 IGJlIGxvd2VyLiBFYWNoIHBhcnRpdGlvbiBzaG91bGQgYmUgbWFwcGVkIHRvCisgKiBhIHNp bmdsZSBOVU1BIG5vZGUsIGJ1dCBhIG5vZGUgbWF5IGhhdmUgbXVsdGlwbGUgcGFydGl0aW9u cy4gSWYgdGhlcmUKKyAqIGFyZSBtdWx0aXBsZSBwYXJ0aXRpb25zIHBlciBub2RlIChhbGwg bm9kZXMgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YKKyAqIHBhcnRpdGlvbnMpLCB3ZSBwaWNr IHRoZSBwYXJ0aXRpb24gdXNpbmcgQ1BVLgorICoKKyAqIFhYWCBNYXliZSB3ZSBzaG91bGQg ZG8gYm90aCB0aGUgdG90YWwgYW5kICJwZXIgZ3JvdXAiIGNvdW50cyBhIHBvd2VyIG9mCisg KiB0d28/IFRoYXQnZCBhbGxvdyB1c2luZyBzaGlmdHMgaW5zdGVhZCBvZiBkaXZpc2lvbnMg aW4gdGhlIGNhbGN1bGF0aW9uLAorICogYW5kIHRoYXQncyBjaGVhcGVyLiBCdXQgaG93IHdv dWxkIHRoYXQgZGVhbCB3aXRoIG9kZCBudW1iZXIgb2Ygbm9kZXM/CisgKi8KK3N0YXRpYyBD bG9ja1N3ZWVwICoKK0Nob29zZUNsb2NrU3dlZXAodm9pZCkKK3sKKwlpbnQJCQlpbmRleCA9 IGNhbGN1bGF0ZV9wYXJ0aXRpb25faW5kZXgoKTsKKworCXJldHVybiAmU3RyYXRlZ3lDb250 cm9sLT5zd2VlcHNbaW5kZXhdOwogfQogCiAvKgpAQCAtMjI0LDkgKzMwOSwzNSBAQCBTdHJh dGVneUdldEJ1ZmZlcihCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwgdWludDMyICpi dWZfc3RhdGUsIGJvb2wgKmZyb21fcgogCSAqIHRoZSByYXRlIG9mIGJ1ZmZlciBjb25zdW1w dGlvbi4gIE5vdGUgdGhhdCBidWZmZXJzIHJlY3ljbGVkIGJ5IGEKIAkgKiBzdHJhdGVneSBv YmplY3QgYXJlIGludGVudGlvbmFsbHkgbm90IGNvdW50ZWQgaGVyZS4KIAkgKi8KLQlwZ19h dG9taWNfZmV0Y2hfYWRkX3UzMigmU3RyYXRlZ3lDb250cm9sLT5udW1CdWZmZXJBbGxvY3Ms IDEpOworCXBnX2F0b21pY19mZXRjaF9hZGRfdTMyKCZDaG9vc2VDbG9ja1N3ZWVwKCktPm51 bUJ1ZmZlckFsbG9jcywgMSk7CiAKLQkvKiBVc2UgdGhlICJjbG9jayBzd2VlcCIgYWxnb3Jp dGhtIHRvIGZpbmQgYSBmcmVlIGJ1ZmZlciAqLworCS8qCisJICogVXNlIHRoZSAiY2xvY2sg c3dlZXAiIGFsZ29yaXRobSB0byBmaW5kIGEgZnJlZSBidWZmZXIKKwkgKgorCSAqIFhYWCBO b3RlIHRoYXQgQ2xvY2tTd2VlcFRpY2soKSBpcyBOVU1BLWF3YXJlLCBpLmUuIGl0IG9ubHkg bG9va3MgYXQKKwkgKiBidWZmZXJzIGZyb20gYSBzaW5nbGUgcGFydGl0aW9uLCBhbGlnbmVk IHdpdGggdGhlIE5VTUEgbm9kZS4gVGhhdCBtZWFucworCSAqIGl0IG9ubHkgYWNjZXNzZXMg YnVmZmVycyBmcm9tIHRoZSBzYW1lIE5VTUEgbm9kZS4KKwkgKgorCSAqIFhYWCBUaGF0IGFs c28gbWVhbnMgZWFjaCBwcm9jZXNzICJzd2VlcHMiIG9ubHkgYSBmcmFjdGlvbiBvZiBidWZm ZXJzLAorCSAqIGV2ZW4gaWYgdGhlIG90aGVyIGJ1ZmZlcnMgYXJlIGJldHRlciBjYW5kaWRh dGVzIGZvciBldmljdGlvbi4gTWF5YmUKKwkgKiB0aGVyZSBzaG91bGQgYmUgc29tZSBsb2dp YyB0byAic3RlYWwiIGJ1ZmZlcnMgZnJvbSBvdGhlciBmcmVlbGlzdHMgb3IKKwkgKiBvdGhl ciBub2Rlcz8KKwkgKgorCSAqIFhYWCBXb3VsZCB0aGF0IGFsc28gbWVhbiB3ZSdkIGhhdmUg bXVsdGlwbGUgYmd3cml0ZXJzLCBvbmUgZm9yIGVhY2gKKwkgKiBub2RlLCBvciB3b3VsZCBv bmUgYmd3cml0ZXIgaGFuZGxlIGFsbCBvZiB0aGF0PworCSAqCisJICogWFhYIFRoaXMgb25s eSBzZWFyY2hlcyBhIHNpbmdsZSBwYXJ0aXRpb24sIHdoaWNoIGNhbiByZXN1bHQgaW4gIm5v CisJICogdW5waW5uZWQgYnVmZmVycyBhdmFpbGFibGUiIGV2ZW4gaWYgdGhlcmUgYXJlIGJ1 ZmZlcnMgaW4gb3RoZXIKKwkgKiBwYXJ0aXRpb25zLiBTaG91bGQgYmUgZml4ZWQgYnkgZmFs bGluZyBiYWNrIHRvIG90aGVyIHBhcnRpdGlvbnMgaWYKKwkgKiBuZWVkZWQuCisJICoKKwkg KiBYWFggQWxzbywgdGhlIHRyeWNvdW50ZXIgc2hvdWxkIG5vdCBiZSBzZXQgdG8gTkJ1ZmZl cnMsIGJ1dCB0byBidWZmZXIKKwkgKiBjb3VudCBmb3IgdGhhdCBvbmUgcGFydGl0aW9uLiBJ biBmYWN0LCB0aGlzIHNob3VsZCBub3QgY2FsbCBDbG9ja1N3ZWVwVGljaworCSAqIGZvciBl dmVyeSBpdGVyYXRpb24uIFRoZSBjYWxsIGlzIGxpa2VseSBxdWl0ZSBleHBlbnNpdmUgKGRv ZXMgYSBsb3QKKwkgKiBvZiBzdHVmZiksIGFuZCBhbHNvIG1heSByZXR1cm4gYSBkaWZmZXJl bnQgcGFydGl0aW9uIG9uIGVhY2ggY2FsbC4KKwkgKiBXZSBzaG91bGQganVzdCBkbyBpdCBv bmNlLCBhbmQgdGhlbiBkbyB0aGUgZm9yKDs7KSBsb29wLiBBbmQgdGhlbgorCSAqIG1heWJl IGFkdmFuY2UgdG8gdGhlIG5leHQgcGFydGl0aW9uLCB1bnRpbCB3ZSBzY2FuIHRocm91Z2gg YWxsIG9mIHRoZW0uCisJICovCiAJdHJ5Y291bnRlciA9IE5CdWZmZXJzOwogCWZvciAoOzsp CiAJewpAQCAtMzA2LDYgKzQxNyw0NiBAQCBTdHJhdGVneUdldEJ1ZmZlcihCdWZmZXJBY2Nl c3NTdHJhdGVneSBzdHJhdGVneSwgdWludDMyICpidWZfc3RhdGUsIGJvb2wgKmZyb21fcgog CX0KIH0KIAorLyoKKyAqIFN0cmF0ZWd5U3luY1ByZXBhcmUgLS0gcHJlcGFyZSBmb3Igc3lu YyBvZiBhbGwgcGFydGl0aW9ucworICoKKyAqIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGNs b2Nrc3dlZXAgcGFydGl0aW9ucywgYW5kIGNhbGN1bGF0ZSB0aGUgcmVjZW50CisgKiBidWZm ZXJzIGFsbG9jcyAoYXMgYSBzdW0gb2YgYWxsIHRoZSBwYXJ0aXRpb25zKS4gVGhpcyBhbGxv d3MgQmdCdWZmZXJTeW5jCisgKiB0byBjYWxjdWxhdGUgYXZlcmFnZSBudW1iZXIgb2YgYWxs b2NhdGlvbnMgcGVyIHBhcnRpdGlvbiBmb3IgdGhlIG5leHQKKyAqIHN5bmMgY3ljbGUuCisg KgorICogSW4gYWRkaXRpb24gaXQgcmV0dXJucyB0aGUgY291bnQgb2YgcmVjZW50IGJ1ZmZl ciBhbGxvY3MsIHdoaWNoIGlzIGEgdG90YWwKKyAqIHN1bW1lZCBmcm9tIGFsbCBwYXJ0aXRp b25zLiBUaGUgYWxsb2MgY291bnRzIGFyZSByZXNldCBhZnRlciBiZWluZyByZWFkLAorICog YXMgdGhlIHBhcnRpdGlvbnMgYXJlIHdhbGtlZC4KKyAqLwordm9pZAorU3RyYXRlZ3lTeW5j UHJlcGFyZShpbnQgKm51bV9wYXJ0cywgdWludDMyICpudW1fYnVmX2FsbG9jKQoreworCSpu dW1fYnVmX2FsbG9jID0gMDsKKwkqbnVtX3BhcnRzID0gU3RyYXRlZ3lDb250cm9sLT5udW1f cGFydGl0aW9uczsKKworCS8qCisJICogV2UgbG9jayB0aGUgcGFydGl0aW9ucyBvbmUgYnkg b25lLCBzbyBub3QgZXhhY2x5IGluIHN5bmMsIGJ1dCB0aGF0CisJICogc2hvdWxkIGJlIGZp bmUuIFdlJ3JlIG9ubHkgbG9va2luZyBmb3IgaGV1cmlzdGljcyBhbnl3YXkuCisJICovCisJ Zm9yIChpbnQgaSA9IDA7IGkgPCBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zOyBp KyspCisJeworCQlDbG9ja1N3ZWVwICpzd2VlcCA9ICZTdHJhdGVneUNvbnRyb2wtPnN3ZWVw c1tpXTsKKworCQlTcGluTG9ja0FjcXVpcmUoJnN3ZWVwLT5jbG9ja19zd2VlcF9sb2NrKTsK KwkJaWYgKG51bV9idWZfYWxsb2MpCisJCXsKKwkJCXVpbnQzMglhbGxvY3MgPSBwZ19hdG9t aWNfZXhjaGFuZ2VfdTMyKCZzd2VlcC0+bnVtQnVmZmVyQWxsb2NzLCAwKTsKKworCQkJLyog aW5jbHVkZSB0aGUgY291bnQgaW4gdGhlIHJ1bm5pbmcgdG90YWwgKi8KKwkJCXBnX2F0b21p Y19mZXRjaF9hZGRfdTY0KCZzd2VlcC0+bnVtVG90YWxBbGxvY3MsIGFsbG9jcyk7CisKKwkJ CSpudW1fYnVmX2FsbG9jICs9IGFsbG9jczsKKwkJfQorCQlTcGluTG9ja1JlbGVhc2UoJnN3 ZWVwLT5jbG9ja19zd2VlcF9sb2NrKTsKKwl9Cit9CisKIC8qCiAgKiBTdHJhdGVneVN5bmNT dGFydCAtLSB0ZWxsIEJnQnVmZmVyU3luYyB3aGVyZSB0byBzdGFydCBzeW5jaW5nCiAgKgpA QCAtMzEzLDM3ICs0NjQsNDQgQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3Ry YXRlZ3kgc3RyYXRlZ3ksIHVpbnQzMiAqYnVmX3N0YXRlLCBib29sICpmcm9tX3IKICAqIEJn QnVmZmVyU3luYygpIHdpbGwgcHJvY2VlZCBjaXJjdWxhcmx5IGFyb3VuZCB0aGUgYnVmZmVy IGFycmF5IGZyb20gdGhlcmUuCiAgKgogICogSW4gYWRkaXRpb24sIHdlIHJldHVybiB0aGUg Y29tcGxldGVkLXBhc3MgY291bnQgKHdoaWNoIGlzIGVmZmVjdGl2ZWx5Ci0gKiB0aGUgaGln aGVyLW9yZGVyIGJpdHMgb2YgbmV4dFZpY3RpbUJ1ZmZlcikgYW5kIHRoZSBjb3VudCBvZiBy ZWNlbnQgYnVmZmVyCi0gKiBhbGxvY3MgaWYgbm9uLU5VTEwgcG9pbnRlcnMgYXJlIHBhc3Nl ZC4gIFRoZSBhbGxvYyBjb3VudCBpcyByZXNldCBhZnRlcgotICogYmVpbmcgcmVhZC4KKyAq IHRoZSBoaWdoZXItb3JkZXIgYml0cyBvZiBuZXh0VmljdGltQnVmZmVyKS4KKyAqCisgKiBU aGlzIG9ubHkgY29uc2lkZXJzIGEgc2luZ2xlIGNsb2Nrc3dlZXAgcGFydGl0aW9uLCBhcyBC Z0J1ZmZlclN5bmMgbG9va3MKKyAqIGF0IHRoZW0gb25lIGJ5IG9uZS4KICAqLwogaW50Ci1T dHJhdGVneVN5bmNTdGFydCh1aW50MzIgKmNvbXBsZXRlX3Bhc3NlcywgdWludDMyICpudW1f YnVmX2FsbG9jKQorU3RyYXRlZ3lTeW5jU3RhcnQoaW50IHBhcnRpdGlvbiwgdWludDMyICpj b21wbGV0ZV9wYXNzZXMsCisJCQkJICBpbnQgKmZpcnN0X2J1ZmZlciwgaW50ICpudW1fYnVm ZmVycykKIHsKIAl1aW50MzIJCW5leHRWaWN0aW1CdWZmZXI7CiAJaW50CQkJcmVzdWx0Owor CUNsb2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW3BhcnRpdGlv bl07CiAKLQlTcGluTG9ja0FjcXVpcmUoJlN0cmF0ZWd5Q29udHJvbC0+YnVmZmVyX3N0cmF0 ZWd5X2xvY2spOwotCW5leHRWaWN0aW1CdWZmZXIgPSBwZ19hdG9taWNfcmVhZF91MzIoJlN0 cmF0ZWd5Q29udHJvbC0+bmV4dFZpY3RpbUJ1ZmZlcik7Ci0JcmVzdWx0ID0gbmV4dFZpY3Rp bUJ1ZmZlciAlIE5CdWZmZXJzOworCUFzc2VydCgocGFydGl0aW9uID49IDApICYmIChwYXJ0 aXRpb24gPCBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zKSk7CisKKwlTcGluTG9j a0FjcXVpcmUoJnN3ZWVwLT5jbG9ja19zd2VlcF9sb2NrKTsKKwluZXh0VmljdGltQnVmZmVy ID0gcGdfYXRvbWljX3JlYWRfdTMyKCZzd2VlcC0+bmV4dFZpY3RpbUJ1ZmZlcik7CisJcmVz dWx0ID0gbmV4dFZpY3RpbUJ1ZmZlciAlIHN3ZWVwLT5udW1CdWZmZXJzOworCisJKmZpcnN0 X2J1ZmZlciA9IHN3ZWVwLT5maXJzdEJ1ZmZlcjsKKwkqbnVtX2J1ZmZlcnMgPSBzd2VlcC0+ bnVtQnVmZmVyczsKIAogCWlmIChjb21wbGV0ZV9wYXNzZXMpCiAJewotCQkqY29tcGxldGVf cGFzc2VzID0gU3RyYXRlZ3lDb250cm9sLT5jb21wbGV0ZVBhc3NlczsKKwkJKmNvbXBsZXRl X3Bhc3NlcyA9IHN3ZWVwLT5jb21wbGV0ZVBhc3NlczsKIAogCQkvKgogCQkgKiBBZGRpdGlv bmFsbHkgYWRkIHRoZSBudW1iZXIgb2Ygd3JhcGFyb3VuZHMgdGhhdCBoYXBwZW5lZCBiZWZv cmUKIAkJICogY29tcGxldGVQYXNzZXMgY291bGQgYmUgaW5jcmVtZW50ZWQuIEMuZi4gQ2xv Y2tTd2VlcFRpY2soKS4KIAkJICovCi0JCSpjb21wbGV0ZV9wYXNzZXMgKz0gbmV4dFZpY3Rp bUJ1ZmZlciAvIE5CdWZmZXJzOworCQkqY29tcGxldGVfcGFzc2VzICs9IG5leHRWaWN0aW1C dWZmZXIgLyBzd2VlcC0+bnVtQnVmZmVyczsKIAl9CisJU3BpbkxvY2tSZWxlYXNlKCZzd2Vl cC0+Y2xvY2tfc3dlZXBfbG9jayk7CiAKLQlpZiAobnVtX2J1Zl9hbGxvYykKLQl7Ci0JCSpu dW1fYnVmX2FsbG9jID0gcGdfYXRvbWljX2V4Y2hhbmdlX3UzMigmU3RyYXRlZ3lDb250cm9s LT5udW1CdWZmZXJBbGxvY3MsIDApOwotCX0KLQlTcGluTG9ja1JlbGVhc2UoJlN0cmF0ZWd5 Q29udHJvbC0+YnVmZmVyX3N0cmF0ZWd5X2xvY2spOwotCXJldHVybiByZXN1bHQ7CisJLyog WFhYIGJ1ZmZlciBJRHMgc3RhcnQgYXQgMSwgd2UncmUgY2FsY3VsYXRpbmcgMC1iYXNlZCBp bmRleGVzICovCisJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQoMSArIHN3ZWVwLT5maXJzdEJ1ZmZl ciArIHJlc3VsdCkpOworCisJcmV0dXJuIHN3ZWVwLT5maXJzdEJ1ZmZlciArIHJlc3VsdDsK IH0KIAogLyoKQEAgLTM4MCw2ICs1MzgsOSBAQCBTaXplCiBTdHJhdGVneVNobWVtU2l6ZSh2 b2lkKQogewogCVNpemUJCXNpemUgPSAwOworCWludAkJCW51bV9wYXJ0aXRpb25zOworCisJ QnVmZmVyUGFydGl0aW9uUGFyYW1zKCZudW1fcGFydGl0aW9ucyk7CiAKIAkvKiBzaXplIG9m IGxvb2t1cCBoYXNoIHRhYmxlIC4uLiBzZWUgY29tbWVudCBpbiBTdHJhdGVneUluaXRpYWxp emUgKi8KIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgQnVmVGFibGVTaG1lbVNpemUoTkJ1ZmZl cnMgKyBOVU1fQlVGRkVSX1BBUlRJVElPTlMpKTsKQEAgLTM4Nyw2ICs1NDgsMTAgQEAgU3Ry YXRlZ3lTaG1lbVNpemUodm9pZCkKIAkvKiBzaXplIG9mIHRoZSBzaGFyZWQgcmVwbGFjZW1l bnQgc3RyYXRlZ3kgY29udHJvbCBibG9jayAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBN QVhBTElHTihzaXplb2YoQnVmZmVyU3RyYXRlZ3lDb250cm9sKSkpOwogCisJLyogc2l6ZSBv ZiBjbG9ja3N3ZWVwIHBhcnRpdGlvbnMgKGF0IGxlYXN0IG9uZSBwZXIgTlVNQSBub2RlKSAq LworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBNQVhBTElHTihtdWxfc2l6ZShzaXplb2YoQ2xv Y2tTd2VlcCksCisJCQkJCQkJCQkJCW51bV9wYXJ0aXRpb25zKSkpOworCiAJcmV0dXJuIHNp emU7CiB9CiAKQEAgLTQwMiw2ICs1NjcsMTAgQEAgU3RyYXRlZ3lJbml0aWFsaXplKGJvb2wg aW5pdCkKIHsKIAlib29sCQlmb3VuZDsKIAorCWludAkJCW51bV9wYXJ0aXRpb25zOworCisJ bnVtX3BhcnRpdGlvbnMgPSBCdWZmZXJQYXJ0aXRpb25Db3VudCgpOworCiAJLyoKIAkgKiBJ bml0aWFsaXplIHRoZSBzaGFyZWQgYnVmZmVyIGxvb2t1cCBoYXNodGFibGUuCiAJICoKQEAg LTQxOSw3ICs1ODgsOCBAQCBTdHJhdGVneUluaXRpYWxpemUoYm9vbCBpbml0KQogCSAqLwog CVN0cmF0ZWd5Q29udHJvbCA9IChCdWZmZXJTdHJhdGVneUNvbnRyb2wgKikKIAkJU2htZW1J bml0U3RydWN0KCJCdWZmZXIgU3RyYXRlZ3kgU3RhdHVzIiwKLQkJCQkJCXNpemVvZihCdWZm ZXJTdHJhdGVneUNvbnRyb2wpLAorCQkJCQkJTUFYQUxJR04ob2Zmc2V0b2YoQnVmZmVyU3Ry YXRlZ3lDb250cm9sLCBzd2VlcHMpKSArCisJCQkJCQlNQVhBTElHTihzaXplb2YoQ2xvY2tT d2VlcCkgKiBudW1fcGFydGl0aW9ucyksCiAJCQkJCQkmZm91bmQpOwogCiAJaWYgKCFmb3Vu ZCkKQEAgLTQzMSwxNSArNjAxLDQwIEBAIFN0cmF0ZWd5SW5pdGlhbGl6ZShib29sIGluaXQp CiAKIAkJU3BpbkxvY2tJbml0KCZTdHJhdGVneUNvbnRyb2wtPmJ1ZmZlcl9zdHJhdGVneV9s b2NrKTsKIAotCQkvKiBJbml0aWFsaXplIHRoZSBjbG9jay1zd2VlcCBwb2ludGVyICovCi0J CXBnX2F0b21pY19pbml0X3UzMigmU3RyYXRlZ3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVy LCAwKTsKKwkJLyogSW5pdGlhbGl6ZSB0aGUgY2xvY2sgc3dlZXAgcG9pbnRlcnMgKGZvciBh bGwgcGFydGl0aW9ucykgKi8KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fcGFydGl0aW9u czsgaSsrKQorCQl7CisJCQlpbnQJCQludW1fYnVmZmVycywKKwkJCQkJCWZpcnN0X2J1ZmZl ciwKKwkJCQkJCWxhc3RfYnVmZmVyOworCisJCQlTcGluTG9ja0luaXQoJlN0cmF0ZWd5Q29u dHJvbC0+c3dlZXBzW2ldLmNsb2NrX3N3ZWVwX2xvY2spOworCisJCQlwZ19hdG9taWNfaW5p dF91MzIoJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ldLm5leHRWaWN0aW1CdWZmZXIsIDAp OworCisJCQkvKiBnZXQgaW5mbyBhYm91dCB0aGUgYnVmZmVyIHBhcnRpdGlvbiAqLworCQkJ QnVmZmVyUGFydGl0aW9uR2V0KGksICZudW1fYnVmZmVycywgJmZpcnN0X2J1ZmZlciwgJmxh c3RfYnVmZmVyKTsKKworCQkJLyoKKwkJCSAqIEZJWE1FIFRoaXMgbWF5IG5vdCBxdWl0ZSBy aWdodCwgYmVjYXVzZSBpZiBOQnVmZmVycyBpcyBub3QgYQorCQkJICogcGVyZmVjdCBtdWx0 aXBsZSBvZiBudW1CdWZmZXJzLCB0aGUgbGFzdCBwYXJ0aXRpb24gd2lsbCBoYXZlCisJCQkg KiBudW1CdWZmZXJzIHNldCB0b28gaGlnaC4gYnVmX2luaXQgaGFuZGxlcyB0aGlzIGJ5IHRy YWNraW5nIHRoZQorCQkJICogcmVtYWluaW5nIG51bWJlciBvZiBidWZmZXJzLCBhbmQgbm90 IG92ZXJmbG93aW5nLgorCQkJICovCisJCQlTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5u dW1CdWZmZXJzID0gbnVtX2J1ZmZlcnM7CisJCQlTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tp XS5maXJzdEJ1ZmZlciA9IGZpcnN0X2J1ZmZlcjsKIAotCQkvKiBDbGVhciBzdGF0aXN0aWNz ICovCi0JCVN0cmF0ZWd5Q29udHJvbC0+Y29tcGxldGVQYXNzZXMgPSAwOwotCQlwZ19hdG9t aWNfaW5pdF91MzIoJlN0cmF0ZWd5Q29udHJvbC0+bnVtQnVmZmVyQWxsb2NzLCAwKTsKKwkJ CS8qIENsZWFyIHN0YXRpc3RpY3MgKi8KKwkJCVN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ld LmNvbXBsZXRlUGFzc2VzID0gMDsKKwkJCXBnX2F0b21pY19pbml0X3UzMigmU3RyYXRlZ3lD b250cm9sLT5zd2VlcHNbaV0ubnVtQnVmZmVyQWxsb2NzLCAwKTsKKwkJCXBnX2F0b21pY19p bml0X3U2NCgmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV0ubnVtVG90YWxBbGxvY3MsIDAp OworCQl9CiAKIAkJLyogTm8gcGVuZGluZyBub3RpZmljYXRpb24gKi8KIAkJU3RyYXRlZ3lD b250cm9sLT5iZ3dwcm9jbm8gPSAtMTsKKworCQkvKiBpbml0aWFsaXplIHRoZSBwYXJ0aXRp b25lZCBjbG9ja3N3ZWVwICovCisJCVN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnMg PSBudW1fcGFydGl0aW9uczsKIAl9CiAJZWxzZQogCQlBc3NlcnQoIWluaXQpOwpAQCAtODAy LDMgKzk5NywyMyBAQCBTdHJhdGVneVJlamVjdEJ1ZmZlcihCdWZmZXJBY2Nlc3NTdHJhdGVn eSBzdHJhdGVneSwgQnVmZmVyRGVzYyAqYnVmLCBib29sIGZyb21fcgogCiAJcmV0dXJuIHRy dWU7CiB9CisKK3ZvaWQKK0Nsb2NrU3dlZXBQYXJ0aXRpb25HZXRJbmZvKGludCBpZHgsCisJ CQkJCQkgICB1aW50MzIgKmNvbXBsZXRlX3Bhc3NlcywgdWludDMyICpuZXh0X3ZpY3RpbV9i dWZmZXIsCisJCQkJCQkgICB1aW50NjQgKmJ1ZmZlcl90b3RhbF9hbGxvY3MsIHVpbnQzMiAq YnVmZmVyX2FsbG9jcykKK3sKKwlDbG9ja1N3ZWVwICpzd2VlcCA9ICZTdHJhdGVneUNvbnRy b2wtPnN3ZWVwc1tpZHhdOworCisJQXNzZXJ0KChpZHggPj0gMCkgJiYgKGlkeCA8IFN0cmF0 ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnMpKTsKKworCS8qIGdldCB0aGUgY2xvY2tzd2Vl cCBzdGF0cyAqLworCSpjb21wbGV0ZV9wYXNzZXMgPSBzd2VlcC0+Y29tcGxldGVQYXNzZXM7 CisJKm5leHRfdmljdGltX2J1ZmZlciA9IHBnX2F0b21pY19yZWFkX3UzMigmc3dlZXAtPm5l eHRWaWN0aW1CdWZmZXIpOworCisJKmJ1ZmZlcl9hbGxvY3MgPSBwZ19hdG9taWNfcmVhZF91 MzIoJnN3ZWVwLT5udW1CdWZmZXJBbGxvY3MpOworCSpidWZmZXJfdG90YWxfYWxsb2NzID0g cGdfYXRvbWljX3JlYWRfdTY0KCZzd2VlcC0+bnVtVG90YWxBbGxvY3MpOworCisJLyogY2Fs Y3VsYXRlIHRoZSBhY3R1YWwgYnVmZmVyIElEICovCisJKm5leHRfdmljdGltX2J1ZmZlciA9 IHN3ZWVwLT5maXJzdEJ1ZmZlciArICgqbmV4dF92aWN0aW1fYnVmZmVyICUgc3dlZXAtPm51 bUJ1ZmZlcnMpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50 ZXJuYWxzLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaAppbmRleCA4 MGIwYzE0ODMxYy4uMTM4Njg1NjA0NmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvYnVmX2ludGVybmFscy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVy bmFscy5oCkBAIC00NDMsNyArNDQzLDkgQEAgZXh0ZXJuIEJ1ZmZlckRlc2MgKlN0cmF0ZWd5 R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogZXh0ZXJuIGJvb2wg U3RyYXRlZ3lSZWplY3RCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiAJ CQkJCQkJCSBCdWZmZXJEZXNjICpidWYsIGJvb2wgZnJvbV9yaW5nKTsKIAotZXh0ZXJuIGlu dAlTdHJhdGVneVN5bmNTdGFydCh1aW50MzIgKmNvbXBsZXRlX3Bhc3NlcywgdWludDMyICpu dW1fYnVmX2FsbG9jKTsKK2V4dGVybiB2b2lkIFN0cmF0ZWd5U3luY1ByZXBhcmUoaW50ICpu dW1fcGFydHMsIHVpbnQzMiAqbnVtX2J1Zl9hbGxvYyk7CitleHRlcm4gaW50CVN0cmF0ZWd5 U3luY1N0YXJ0KGludCBwYXJ0aXRpb24sIHVpbnQzMiAqY29tcGxldGVfcGFzc2VzLAorCQkJ CQkJCSAgaW50ICpmaXJzdF9idWZmZXIsIGludCAqbnVtX2J1ZmZlcnMpOwogZXh0ZXJuIHZv aWQgU3RyYXRlZ3lOb3RpZnlCZ1dyaXRlcihpbnQgYmd3cHJvY25vKTsKIAogZXh0ZXJuIFNp emUgU3RyYXRlZ3lTaG1lbVNpemUodm9pZCk7CkBAIC00ODksNSArNDkxLDYgQEAgZXh0ZXJu IGludAlCdWZmZXJQYXJ0aXRpb25Db3VudCh2b2lkKTsKIGV4dGVybiBpbnQJQnVmZmVyUGFy dGl0aW9uTm9kZXModm9pZCk7CiBleHRlcm4gdm9pZCBCdWZmZXJQYXJ0aXRpb25HZXQoaW50 IGlkeCwgaW50ICpudW1fYnVmZmVycywKIAkJCQkJCQkgICBpbnQgKmZpcnN0X2J1ZmZlciwg aW50ICpsYXN0X2J1ZmZlcik7CitleHRlcm4gdm9pZCBCdWZmZXJQYXJ0aXRpb25QYXJhbXMo aW50ICpudW1fcGFydGl0aW9ucyk7CiAKICNlbmRpZgkJCQkJCQkvKiBCVUZNR1JfSU5URVJO QUxTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmggYi9z cmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCmluZGV4IDI0ODYwYzZjMmM0Li43MDUyZjlk ZTU3YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAorKysgYi9z cmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC0zNTksNiArMzU5LDExIEBAIGV4dGVy biBpbnQJR2V0QWNjZXNzU3RyYXRlZ3lCdWZmZXJDb3VudChCdWZmZXJBY2Nlc3NTdHJhdGVn eSBzdHJhdGVneSk7CiBleHRlcm4gaW50CUdldEFjY2Vzc1N0cmF0ZWd5UGluTGltaXQoQnVm ZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kpOwogCiBleHRlcm4gdm9pZCBGcmVlQWNjZXNz U3RyYXRlZ3koQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kpOworZXh0ZXJuIHZvaWQg Q2xvY2tTd2VlcFBhcnRpdGlvbkdldEluZm8oaW50IGlkeCwKKwkJCQkJCQkJCSAgIHVpbnQz MiAqY29tcGxldGVfcGFzc2VzLAorCQkJCQkJCQkJICAgdWludDMyICpuZXh0X3ZpY3RpbV9i dWZmZXIsCisJCQkJCQkJCQkgICB1aW50NjQgKmJ1ZmZlcl90b3RhbF9hbGxvY3MsCisJCQkJ CQkJCQkgICB1aW50MzIgKmJ1ZmZlcl9hbGxvY3MpOwogCiAKIC8qIGlubGluZSBmdW5jdGlv bnMgKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDI3X3N0cmVhbV9yZWdy ZXNzLnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMjdfc3RyZWFtX3JlZ3Jlc3MucGwKaW5k ZXggNTg5Yzc5ZDk3ZDMuLjk4YjE0NmVkNGI3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWNv dmVyeS90LzAyN19zdHJlYW1fcmVncmVzcy5wbAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90 LzAyN19zdHJlYW1fcmVncmVzcy5wbApAQCAtMTgsNiArMTgsMTEgQEAgJG5vZGVfcHJpbWFy eS0+YWRqdXN0X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdtYXhfY29ubmVjdGlvbnMnLCAn MjUnKTsKICRub2RlX3ByaW1hcnktPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAog CSdtYXhfcHJlcGFyZWRfdHJhbnNhY3Rpb25zID0gMTAnKTsKIAorIyBUaGUgZGVmYXVsdCBp cyAxTUIsIHdoaWNoIGlzIG5vdCBlbm91Z2ggd2l0aCBjbG9jay1zd2VlcCBwYXJ0aXRpb25p bmcuCisjIEluY3JlYXNlIHRvIDMyTUIsIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0ICJubyB1bnBp bm5lZCBidWZmZXJzIi4KKyRub2RlX3ByaW1hcnktPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3Fs LmNvbmYnLAorCSdzaGFyZWRfYnVmZmVycyA9IDMyTUInKTsKKwogIyBFbmFibGUgcGdfc3Rh dF9zdGF0ZW1lbnRzIHRvIGZvcmNlIHRlc3RzIHRvIGRvIHF1ZXJ5IGp1bWJsaW5nLgogIyBw Z19zdGF0X3N0YXRlbWVudHMubWF4IHNob3VsZCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBh bGwgdGhlIGVudHJpZXMKICMgb2YgdGhlIHJlZ3Jlc3Npb24gZGF0YWJhc2UuCmRpZmYgLS1n aXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGUyNDcwM2Q2Njg4Li5mNzczMGVjZTk3NiAxMDA2 NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTQyOCw2ICs0MjgsNyBAQCBDbGllbnRD ZXJ0TmFtZQogQ2xpZW50Q29ubmVjdGlvbkluZm8KIENsaWVudERhdGEKIENsaWVudFNvY2tl dAorQ2xvY2tTd2VlcAogQ2xvbmVQdHJUeXBlCiBDbG9zZVBvcnRhbFN0bXQKIENsb3NlUHRy VHlwZQotLSAKMi41MS4wCgo= --------------apuxkCRUZ0GRSLZG7S4PIVYY Content-Type: text/x-patch; charset=UTF-8; name="v20251101-0001-Infrastructure-for-partitioning-shared-buf.patch" Content-Disposition: attachment; filename*0="v20251101-0001-Infrastructure-for-partitioning-shared-buf.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAwM2VkNmU1MTE2YmQ1NzY5MDMyODIzYzU5ZTUxNjliODIxOWFkMjZiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCAxNyBTZXAgMjAyNSAyMzowNDoyOSArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUxMTAxIDEvN10gSW5mcmFzdHJ1Y3R1cmUgZm9yIHBhcnRpdGlvbmluZyBzaGFyZWQg YnVmZmVycwoKVGhlIHBhdGNoIGludHJvZHVjZXMgYSBzaW1wbGUgInJlZ2lzdHJ5IiBvZiBi dWZmZXIgcGFydGl0aW9ucywga2VlcGluZwp0cmFjayBvZiB0aGUgZmlyc3QvbGFzdCBidWZm ZXIsIGV0Yy4gVGhpcyBzZXJ2ZXMgYXMgYSBzb3VyY2Ugb2YgdHJ1dGgKZm9yIGxhdGVyIHBh dGNoZXMgKGUuZy4gdG8gcGFydGl0aW9uIGNsb2NrLXN3ZWVwKS4KClRoZSByZWdpc3RyeSBp cyBhIHNtYWxsIEJ1ZmZlclBhcnRpdGlvbnMgYXJyYXkgaW4gc2hhcmVkIG1lbW9yeSwgd2l0 aApwYXJ0aXRpb25zIHNpemVkIHRvIGJlIGEgZmFpciBzaGFyZSBvZiBzaGFyZWQgYnVmZmVy cy4gTGF0ZXIgcGF0Y2hlcyBtYXkKaW1wcm92ZSB0aGlzIHRvIGNvbnNpZGVyIE5VTUEsIGFu ZCBzaW1pbGFyIGRldGFpbHMuCgpXaXRoIHRoZSBmZWF0dXJlIGRpc2FibGVkIChHVUMgc2V0 IHRvIGVtcHR5IGxpc3QpLCB0aGVyZSdsbCBiZSBhIHNpbmdsZQpwYXJ0aXRpb24gZm9yIGFs bCB0aGUgYnVmZmVycyAoYW5kIGl0IHdvbid0IGJlIG1hcHBlZCB0byBhIE5VTUEgbm9kZSku CgpOb3RlczoKCiogVGhlIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBkZWJ1Z19udW1hID0gYnVm ZmVycyBHVUMgKGRlZmF1bHQ6IGVtcHR5KSwKICB3aGljaCB3b3JrcyBzaW1pbGFybHkgdG8g ZGVidWdfaW9fZGlyZWN0LgoKKiBUaGlzIHBhdGNoIHBhcnRpdGlvbnMganVzdCBzaGFyZWQg YnVmZmVycywgbm90IHRoZSB3aG9sZSBzaGFyZWQKICBtZW1vcnkuIEEgbGF0ZXIgcGF0Y2gg d2lsbCBkbyB0aGF0IGZvciBQR1BST0MsIGJ1dCBpdCdzIHRyaWNreSBhbmQKICByZXF1aXJl cyBhIGRpZmZlcmVudCBhcHByb2FjaCBiZWNhdXNlIG9mIGh1Z2UgcGFnZXMuCgpOb3RlOiBU aGlzIHBhcnRpdGlvbmluZyBpcyBpbmRlcGVuZGVudCBvZiB0aGUgcGFydGl0aW9ucyBkZWZp bmVkIGluCmx3bG9jay5oLCB3aGljaCBkZWZpbmVzIDEyOCBwYXJ0aXRpb25zIHRvIHJlZHVj ZSBsb2NrIGNvbmZsaWN0IG9uIHRoZQpidWZmZXIgbWFwcGluZyBoYXNodGFibGUuIFRoZSBu dW1iZXIgb2YgcGFydGl0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoaXMKcGF0Y2ggaXMgZXhwZWN0 ZWQgdG8gYmUgbXVjaCBsb3dlciAoYSBkb3plbiBvciBzbykuCi0tLQogY29udHJpYi9wZ19i dWZmZXJjYWNoZS9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAyICstCiBjb250cmliL3Bn X2J1ZmZlcmNhY2hlL21lc29uLmJ1aWxkICAgICAgICAgICAgfCAgIDEgKwogLi4uL3BnX2J1 ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwgICAgICAgICAgICAgIHwgIDI1ICsrKwogY29udHJp Yi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS5jb250cm9sIHwgICAyICstCiBjb250 cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMgfCAgODYgKysrKysr KysrKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMgICAgICAgICB8 IDE0NSArKysrKysrKysrKysrKysrKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVy bmFscy5oICAgICAgICAgICB8ICAgNiArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5o ICAgICAgICAgICAgICAgICAgfCAgMTkgKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICAgICAgICAgICAgfCAgIDIgKwogOSBmaWxlcyBjaGFuZ2VkLCAyODUgaW5z ZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmli L3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwKCmRpZmYgLS1n aXQgYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL01ha2VmaWxlIGIvY29udHJpYi9wZ19idWZm ZXJjYWNoZS9NYWtlZmlsZQppbmRleCA1Zjc0ODU0M2UyZS4uMGU2MThmNjZhZWMgMTAwNjQ0 Ci0tLSBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvTWFrZWZpbGUKKysrIGIvY29udHJpYi9w Z19idWZmZXJjYWNoZS9NYWtlZmlsZQpAQCAtOSw3ICs5LDcgQEAgRVhURU5TSU9OID0gcGdf YnVmZmVyY2FjaGUKIERBVEEgPSBwZ19idWZmZXJjYWNoZS0tMS4yLnNxbCBwZ19idWZmZXJj YWNoZS0tMS4yLS0xLjMuc3FsIFwKIAlwZ19idWZmZXJjYWNoZS0tMS4xLS0xLjIuc3FsIHBn X2J1ZmZlcmNhY2hlLS0xLjAtLTEuMS5zcWwgXAogCXBnX2J1ZmZlcmNhY2hlLS0xLjMtLTEu NC5zcWwgcGdfYnVmZmVyY2FjaGUtLTEuNC0tMS41LnNxbCBcCi0JcGdfYnVmZmVyY2FjaGUt LTEuNS0tMS42LnNxbAorCXBnX2J1ZmZlcmNhY2hlLS0xLjUtLTEuNi5zcWwgcGdfYnVmZmVy Y2FjaGUtLTEuNi0tMS43LnNxbAogUEdGSUxFREVTQyA9ICJwZ19idWZmZXJjYWNoZSAtIG1v bml0b3Jpbmcgb2Ygc2hhcmVkIGJ1ZmZlciBjYWNoZSBpbiByZWFsLXRpbWUiCiAKIFJFR1JF U1MgPSBwZ19idWZmZXJjYWNoZSBwZ19idWZmZXJjYWNoZV9udW1hCmRpZmYgLS1naXQgYS9j b250cmliL3BnX2J1ZmZlcmNhY2hlL21lc29uLmJ1aWxkIGIvY29udHJpYi9wZ19idWZmZXJj YWNoZS9tZXNvbi5idWlsZAppbmRleCA3Y2QwMzlhMWRmOS4uN2MzMTE0MTg4MWYgMTAwNjQ0 Ci0tLSBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvbWVzb24uYnVpbGQKKysrIGIvY29udHJp Yi9wZ19idWZmZXJjYWNoZS9tZXNvbi5idWlsZApAQCAtMjQsNiArMjQsNyBAQCBpbnN0YWxs X2RhdGEoCiAgICdwZ19idWZmZXJjYWNoZS0tMS4zLS0xLjQuc3FsJywKICAgJ3BnX2J1ZmZl cmNhY2hlLS0xLjQtLTEuNS5zcWwnLAogICAncGdfYnVmZmVyY2FjaGUtLTEuNS0tMS42LnNx bCcsCisgICdwZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsJywKICAgJ3BnX2J1ZmZlcmNh Y2hlLmNvbnRyb2wnLAogICBrd2FyZ3M6IGNvbnRyaWJfZGF0YV9hcmdzLAogKQpkaWZmIC0t Z2l0IGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS42LS0xLjcu c3FsIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS42LS0xLjcu c3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mMWMyMDk2MGI3 ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVy Y2FjaGUtLTEuNi0tMS43LnNxbApAQCAtMCwwICsxLDI1IEBACisvKiBjb250cmliL3BnX2J1 ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwgKi8KKworLS0gY29tcGxh aW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFU RSBFWFRFTlNJT04KK1xlY2hvIFVzZSAiQUxURVIgRVhURU5TSU9OIHBnX2J1ZmZlcmNhY2hl IFVQREFURSBUTyAnMS43JyIgdG8gbG9hZCB0aGlzIGZpbGUuIFxxdWl0CisKKy0tIFJlZ2lz dGVyIHRoZSBuZXcgZnVuY3Rpb25zLgorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gcGdf YnVmZmVyY2FjaGVfcGFydGl0aW9ucygpCitSRVRVUk5TIFNFVE9GIFJFQ09SRAorQVMgJ01P RFVMRV9QQVRITkFNRScsICdwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zJworTEFOR1VBR0Ug QyBQQVJBTExFTCBTQUZFOworCistLSBDcmVhdGUgYSB2aWV3IGZvciBjb252ZW5pZW50IGFj Y2Vzcy4KK0NSRUFURSBWSUVXIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMgQVMKKwlTRUxF Q1QgUC4qIEZST00gcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucygpIEFTIFAKKwkocGFydGl0 aW9uIGludGVnZXIsCQkJLS0gcGFydGl0aW9uIGluZGV4CisJIG51bV9idWZmZXJzIGludGVn ZXIsCQktLSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcGFydGl0aW9uCisJIGZpcnN0X2J1 ZmZlciBpbnRlZ2VyLAkJLS0gZmlyc3QgYnVmZmVyIG9mIHBhcnRpdGlvbgorCSBsYXN0X2J1 ZmZlciBpbnRlZ2VyKTsJCS0tIGxhc3QgYnVmZmVyIG9mIHBhcnRpdGlvbgorCistLSBEb24n dCB3YW50IHRoZXNlIHRvIGJlIGF2YWlsYWJsZSB0byBwdWJsaWMuCitSRVZPS0UgQUxMIE9O IEZVTkNUSU9OIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoKSBGUk9NIFBVQkxJQzsKK1JF Vk9LRSBBTEwgT04gcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyBGUk9NIFBVQkxJQzsKKwor R1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKCkg VE8gcGdfbW9uaXRvcjsKK0dSQU5UIFNFTEVDVCBPTiBwZ19idWZmZXJjYWNoZV9wYXJ0aXRp b25zIFRPIHBnX21vbml0b3I7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX2J1ZmZlcmNhY2hl L3BnX2J1ZmZlcmNhY2hlLmNvbnRyb2wgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1 ZmZlcmNhY2hlLmNvbnRyb2wKaW5kZXggYjAzMGJhM2E2ZmEuLjExNDk5NTUwOTQ1IDEwMDY0 NAotLS0gYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLmNvbnRyb2wK KysrIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS5jb250cm9sCkBA IC0xLDUgKzEsNSBAQAogIyBwZ19idWZmZXJjYWNoZSBleHRlbnNpb24KIGNvbW1lbnQgPSAn ZXhhbWluZSB0aGUgc2hhcmVkIGJ1ZmZlciBjYWNoZScKLWRlZmF1bHRfdmVyc2lvbiA9ICcx LjYnCitkZWZhdWx0X3ZlcnNpb24gPSAnMS43JwogbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJk aXIvcGdfYnVmZmVyY2FjaGUnCiByZWxvY2F0YWJsZSA9IHRydWUKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYyBiL2NvbnRyaWIv cGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYwppbmRleCAzZGYwNGM5ODk1 OS4uZGZlYzEzODA3MzYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdf YnVmZmVyY2FjaGVfcGFnZXMuYworKysgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1 ZmZlcmNhY2hlX3BhZ2VzLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgTlVNX0JVRkZF UkNBQ0hFX0VWSUNUX0FMTF9FTEVNIDMKIAogI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfTlVN QV9FTEVNCTMKKyNkZWZpbmUgTlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTQk0CiAK IFBHX01PRFVMRV9NQUdJQ19FWFQoCiAJCQkJCS5uYW1lID0gInBnX2J1ZmZlcmNhY2hlIiwK QEAgLTEwMCw2ICsxMDEsNyBAQCBQR19GVU5DVElPTl9JTkZPX1YxKHBnX2J1ZmZlcmNhY2hl X3VzYWdlX2NvdW50cyk7CiBQR19GVU5DVElPTl9JTkZPX1YxKHBnX2J1ZmZlcmNhY2hlX2V2 aWN0KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdfYnVmZmVyY2FjaGVfZXZpY3RfcmVsYXRp b24pOwogUEdfRlVOQ1RJT05fSU5GT19WMShwZ19idWZmZXJjYWNoZV9ldmljdF9hbGwpOwor UEdfRlVOQ1RJT05fSU5GT19WMShwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKTsKIAogCiAv KiBPbmx5IG5lZWQgdG8gdG91Y2ggbWVtb3J5IG9uY2UgcGVyIGJhY2tlbmQgcHJvY2VzcyBs aWZldGltZSAqLwpAQCAtNzc3LDMgKzc3OSw4NyBAQCBwZ19idWZmZXJjYWNoZV9ldmljdF9h bGwoUEdfRlVOQ1RJT05fQVJHUykKIAogCVBHX1JFVFVSTl9EQVRVTShyZXN1bHQpOwogfQor CisvKgorICogSW5xdWlyZSBhYm91dCBwYXJ0aXRpb25pbmcgb2YgYnVmZmVycyBiZXR3ZWVu IE5VTUEgbm9kZXMuCisgKi8KK0RhdHVtCitwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKFBH X0ZVTkNUSU9OX0FSR1MpCit7CisJRnVuY0NhbGxDb250ZXh0ICpmdW5jY3R4OworCU1lbW9y eUNvbnRleHQgb2xkY29udGV4dDsKKwlUdXBsZURlc2MJdHVwbGVkZXNjOworCVR1cGxlRGVz YwlleHBlY3RlZF90dXBsZWRlc2M7CisJSGVhcFR1cGxlCXR1cGxlOworCURhdHVtCQlyZXN1 bHQ7CisKKwlpZiAoU1JGX0lTX0ZJUlNUQ0FMTCgpKQorCXsKKwkJZnVuY2N0eCA9IFNSRl9G SVJTVENBTExfSU5JVCgpOworCisJCS8qIFN3aXRjaCBjb250ZXh0IHdoZW4gYWxsb2NhdGlu ZyBzdHVmZiB0byBiZSB1c2VkIGluIGxhdGVyIGNhbGxzICovCisJCW9sZGNvbnRleHQgPSBN ZW1vcnlDb250ZXh0U3dpdGNoVG8oZnVuY2N0eC0+bXVsdGlfY2FsbF9tZW1vcnlfY3R4KTsK KworCQlpZiAoZ2V0X2NhbGxfcmVzdWx0X3R5cGUoZmNpbmZvLCBOVUxMLCAmZXhwZWN0ZWRf dHVwbGVkZXNjKSAhPSBUWVBFRlVOQ19DT01QT1NJVEUpCisJCQllbG9nKEVSUk9SLCAicmV0 dXJuIHR5cGUgbXVzdCBiZSBhIHJvdyB0eXBlIik7CisKKwkJaWYgKGV4cGVjdGVkX3R1cGxl ZGVzYy0+bmF0dHMgIT0gTlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTSkKKwkJCWVs b2coRVJST1IsICJpbmNvcnJlY3QgbnVtYmVyIG9mIG91dHB1dCBhcmd1bWVudHMiKTsKKwor CQkvKiBDb25zdHJ1Y3QgYSB0dXBsZSBkZXNjcmlwdG9yIGZvciB0aGUgcmVzdWx0IHJvd3Mu ICovCisJCXR1cGxlZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNjKGV4cGVjdGVkX3R1 cGxlZGVzYy0+bmF0dHMpOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0 ck51bWJlcikgMSwgInBhcnRpdGlvbiIsCisJCQkJCQkgICBJTlQ0T0lELCAtMSwgMCk7CisJ CVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSAxLCAibnVtX2J1 ZmZlcnMiLAorCQkJCQkJICAgSU5UNE9JRCwgLTEsIDApOworCQlUdXBsZURlc2NJbml0RW50 cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgMiwgImZpcnN0X2J1ZmZlciIsCisJCQkJCQkg ICBJTlQ0T0lELCAtMSwgMCk7CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChB dHRyTnVtYmVyKSAzLCAibGFzdF9idWZmZXIiLAorCQkJCQkJICAgSU5UNE9JRCwgLTEsIDAp OworCisJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IEJsZXNzVHVwbGVEZXNjKHR1cGxlZGVzYyk7 CisKKwkJLyogUmV0dXJuIHRvIG9yaWdpbmFsIGNvbnRleHQgd2hlbiBhbGxvY2F0aW5nIHRy YW5zaWVudCBtZW1vcnkgKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQp OworCisJCS8qIFNldCBtYXggY2FsbHMgYW5kIHJlbWVtYmVyIHRoZSB1c2VyIGZ1bmN0aW9u IGNvbnRleHQuICovCisJCWZ1bmNjdHgtPm1heF9jYWxscyA9IEJ1ZmZlclBhcnRpdGlvbkNv dW50KCk7CisJfQorCisJZnVuY2N0eCA9IFNSRl9QRVJDQUxMX1NFVFVQKCk7CisKKwlpZiAo ZnVuY2N0eC0+Y2FsbF9jbnRyIDwgZnVuY2N0eC0+bWF4X2NhbGxzKQorCXsKKwkJdWludDMy CQlpID0gZnVuY2N0eC0+Y2FsbF9jbnRyOworCisJCWludAkJCW51bV9idWZmZXJzLAorCQkJ CQlmaXJzdF9idWZmZXIsCisJCQkJCWxhc3RfYnVmZmVyOworCisJCURhdHVtCQl2YWx1ZXNb TlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTV07CisJCWJvb2wJCW51bGxzW05VTV9C VUZGRVJDQUNIRV9QQVJUSVRJT05TX0VMRU1dOworCisJCUJ1ZmZlclBhcnRpdGlvbkdldChp LCAmbnVtX2J1ZmZlcnMsCisJCQkJCQkgICAmZmlyc3RfYnVmZmVyLCAmbGFzdF9idWZmZXIp OworCisJCXZhbHVlc1swXSA9IEludDMyR2V0RGF0dW0oaSk7CisJCW51bGxzWzBdID0gZmFs c2U7CisKKwkJdmFsdWVzWzFdID0gSW50MzJHZXREYXR1bShudW1fYnVmZmVycyk7CisJCW51 bGxzWzFdID0gZmFsc2U7CisKKwkJdmFsdWVzWzJdID0gSW50MzJHZXREYXR1bShmaXJzdF9i dWZmZXIpOworCQludWxsc1syXSA9IGZhbHNlOworCisJCXZhbHVlc1szXSA9IEludDMyR2V0 RGF0dW0obGFzdF9idWZmZXIpOworCQludWxsc1szXSA9IGZhbHNlOworCisJCS8qIEJ1aWxk IGFuZCByZXR1cm4gdGhlIHR1cGxlLiAqLworCQl0dXBsZSA9IGhlYXBfZm9ybV90dXBsZSgo VHVwbGVEZXNjKSBmdW5jY3R4LT51c2VyX2ZjdHgsIHZhbHVlcywgbnVsbHMpOworCQlyZXN1 bHQgPSBIZWFwVHVwbGVHZXREYXR1bSh0dXBsZSk7CisKKwkJU1JGX1JFVFVSTl9ORVhUKGZ1 bmNjdHgsIHJlc3VsdCk7CisJfQorCWVsc2UKKwkJU1JGX1JFVFVSTl9ET05FKGZ1bmNjdHgp OworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQu YyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMKaW5kZXggNmZkM2E2 YmJhYzUuLjAwN2Y3ODA2ZGM0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZfaW5pdC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9p bml0LmMKQEAgLTE3LDYgKzE3LDExIEBACiAjaW5jbHVkZSAic3RvcmFnZS9haW8uaCIKICNp bmNsdWRlICJzdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1 Zm1nci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcGdfc2htZW0uaCIKKyNpbmNsdWRlICJzdG9y YWdlL3Byb2MuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9n dWNfaG9va3MuaCIKKyNpbmNsdWRlICJ1dGlscy92YXJsZW5hLmgiCiAKIEJ1ZmZlckRlc2NQ YWRkZWQgKkJ1ZmZlckRlc2NyaXB0b3JzOwogY2hhcgkgICAqQnVmZmVyQmxvY2tzOwpAQCAt MjQsNiArMjksMTQgQEAgQ29uZGl0aW9uVmFyaWFibGVNaW5pbWFsbHlQYWRkZWQgKkJ1ZmZl cklPQ1ZBcnJheTsKIFdyaXRlYmFja0NvbnRleHQgQmFja2VuZFdyaXRlYmFja0NvbnRleHQ7 CiBDa3B0U29ydEl0ZW0gKkNrcHRCdWZmZXJJZHM7CiAKKy8qICoKKyAqIG51bWJlciBvZiBi dWZmZXIgcGFydGl0aW9ucyAqLworI2RlZmluZSBOVU1fQ0xPQ0tfU1dFRVBfUEFSVElUSU9O Uwk0CisKKy8qIEFycmF5IG9mIHN0cnVjdHMgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBidWZm ZXIgcmFuZ2VzICovCitCdWZmZXJQYXJ0aXRpb25zICpCdWZmZXJQYXJ0aXRpb25zQXJyYXkg PSBOVUxMOworCitzdGF0aWMgdm9pZCBidWZmZXJfcGFydGl0aW9uc19pbml0KHZvaWQpOwog CiAvKgogICogRGF0YSBTdHJ1Y3R1cmVzOgpAQCAtNzAsNyArODMsMTUgQEAgQnVmZmVyTWFu YWdlclNobWVtSW5pdCh2b2lkKQogCWJvb2wJCWZvdW5kQnVmcywKIAkJCQlmb3VuZERlc2Nz LAogCQkJCWZvdW5kSU9DViwKLQkJCQlmb3VuZEJ1ZkNrcHQ7CisJCQkJZm91bmRCdWZDa3B0 LAorCQkJCWZvdW5kUGFydHM7CisKKwkvKiBhbGxvY2F0ZSB0aGUgcGFydGl0aW9uIHJlZ2lz dHJ5IGZpcnN0ICovCisJQnVmZmVyUGFydGl0aW9uc0FycmF5ID0gKEJ1ZmZlclBhcnRpdGlv bnMgKikKKwkJU2htZW1Jbml0U3RydWN0KCJCdWZmZXIgUGFydGl0aW9ucyIsCisJCQkJCQlv ZmZzZXRvZihCdWZmZXJQYXJ0aXRpb25zLCBwYXJ0aXRpb25zKSArCisJCQkJCQltdWxfc2l6 ZShzaXplb2YoQnVmZmVyUGFydGl0aW9uKSwgTlVNX0NMT0NLX1NXRUVQX1BBUlRJVElPTlMp LAorCQkJCQkJJmZvdW5kUGFydHMpOwogCiAJLyogQWxpZ24gZGVzY3JpcHRvcnMgdG8gYSBj YWNoZWxpbmUgYm91bmRhcnkuICovCiAJQnVmZmVyRGVzY3JpcHRvcnMgPSAoQnVmZmVyRGVz Y1BhZGRlZCAqKQpAQCAtMTEyLDYgKzEzMyw5IEBAIEJ1ZmZlck1hbmFnZXJTaG1lbUluaXQo dm9pZCkKIAl7CiAJCWludAkJCWk7CiAKKwkJLyogSW5pdGlhbGl6ZSBidWZmZXIgcGFydGl0 aW9ucyAoY2FsY3VsYXRlIGJ1ZmZlciByYW5nZXMpLiAqLworCQlidWZmZXJfcGFydGl0aW9u c19pbml0KCk7CisKIAkJLyoKIAkJICogSW5pdGlhbGl6ZSBhbGwgdGhlIGJ1ZmZlciBoZWFk ZXJzLgogCQkgKi8KQEAgLTE3NSw1ICsxOTksMTI0IEBAIEJ1ZmZlck1hbmFnZXJTaG1lbVNp emUodm9pZCkKIAkvKiBzaXplIG9mIGNoZWNrcG9pbnQgc29ydCBhcnJheSBpbiBidWZtZ3Iu YyAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShOQnVmZmVycywgc2l6ZW9m KENrcHRTb3J0SXRlbSkpKTsKIAorCS8qIGFjY291bnQgZm9yIHJlZ2lzdHJ5IG9mIE5VTUEg cGFydGl0aW9ucyAqLworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBNQVhBTElHTihvZmZzZXRv ZihCdWZmZXJQYXJ0aXRpb25zLCBwYXJ0aXRpb25zKSArCisJCQkJCQkJCSAgIG11bF9zaXpl KHNpemVvZihCdWZmZXJQYXJ0aXRpb24pLCBOVU1fQ0xPQ0tfU1dFRVBfUEFSVElUSU9OUykp KTsKKwogCXJldHVybiBzaXplOwogfQorCisvKgorICogU2FuaXR5IGNoZWNrcyBvZiBidWZm ZXJzIHBhcnRpdGlvbnMgLSB0aGVyZSBtdXN0IGJlIG5vIGdhcHMsIGl0IG11c3QgY292ZXIK KyAqIHRoZSB3aG9sZSByYW5nZSBvZiBidWZmZXJzLCBldGMuCisgKi8KK3N0YXRpYyB2b2lk CitBc3NlcnRDaGVja0J1ZmZlclBhcnRpdGlvbnModm9pZCkKK3sKKyNpZmRlZiBVU0VfQVNT RVJUX0NIRUNLSU5HCisJaW50CQkJbnVtX2J1ZmZlcnMgPSAwOworCisJQXNzZXJ0KEJ1ZmZl clBhcnRpdGlvbnNBcnJheS0+bnBhcnRpdGlvbnMgPiAwKTsKKworCWZvciAoaW50IGkgPSAw OyBpIDwgQnVmZmVyUGFydGl0aW9uc0FycmF5LT5ucGFydGl0aW9uczsgaSsrKQorCXsKKwkJ QnVmZmVyUGFydGl0aW9uICpwYXJ0ID0gJkJ1ZmZlclBhcnRpdGlvbnNBcnJheS0+cGFydGl0 aW9uc1tpXTsKKworCQkvKgorCQkgKiBXZSBjYW4gZ2V0IGEgc2luZ2xlLWJ1ZmZlciBwYXJ0 aXRpb24sIGlmIHRoZSBzaXppbmcgZm9yY2VzIHRoZSBsYXN0CisJCSAqIHBhcnRpdGlvbiB0 byBiZSBqdXN0IG9uZSBidWZmZXIuIEJ1dCBpdCdzIHVubGlrZWx5IChhbmQKKwkJICogdW5k ZXNpcmFibGUpLgorCQkgKi8KKwkJQXNzZXJ0KHBhcnQtPmZpcnN0X2J1ZmZlciA8PSBwYXJ0 LT5sYXN0X2J1ZmZlcik7CisJCUFzc2VydCgocGFydC0+bGFzdF9idWZmZXIgLSBwYXJ0LT5m aXJzdF9idWZmZXIgKyAxKSA9PSBwYXJ0LT5udW1fYnVmZmVycyk7CisKKwkJbnVtX2J1ZmZl cnMgKz0gcGFydC0+bnVtX2J1ZmZlcnM7CisKKwkJLyoKKwkJICogVGhlIGZpcnN0IHBhcnRp dGlvbiBuZWVkcyB0byBzdGFydCBvbiBidWZmZXIgMC4gTGF0ZXIgcGFydGl0aW9ucworCQkg KiBuZWVkIHRvIGJlIGNvbnRpZ3VvdXMsIHdpdGhvdXQgc2tpcHBpbmcgYW55IGJ1ZmZlcnMu CisJCSAqLworCQlpZiAoaSA9PSAwKQorCQl7CisJCQlBc3NlcnQocGFydC0+Zmlyc3RfYnVm ZmVyID09IDApOworCQl9CisJCWVsc2UKKwkJeworCQkJQnVmZmVyUGFydGl0aW9uICpwcmV2 ID0gJkJ1ZmZlclBhcnRpdGlvbnNBcnJheS0+cGFydGl0aW9uc1tpIC0gMV07CisKKwkJCUFz c2VydCgocGFydC0+Zmlyc3RfYnVmZmVyIC0gMSkgPT0gcHJldi0+bGFzdF9idWZmZXIpOwor CQl9CisKKwkJLyogdGhlIGxhc3QgcGFydGl0aW9uIG5lZWRzIHRvIGVuZCBvbiBidWZmZXIg KE5CdWZmZXJzIC0gMSkgKi8KKwkJaWYgKGkgPT0gKEJ1ZmZlclBhcnRpdGlvbnNBcnJheS0+ bnBhcnRpdGlvbnMgLSAxKSkKKwkJeworCQkJQXNzZXJ0KHBhcnQtPmxhc3RfYnVmZmVyID09 IChOQnVmZmVycyAtIDEpKTsKKwkJfQorCX0KKworCUFzc2VydChudW1fYnVmZmVycyA9PSBO QnVmZmVycyk7CisjZW5kaWYKK30KKworLyoKKyAqIGJ1ZmZlcl9wYXJ0aXRpb25zX2luaXQK KyAqCQlJbml0aWFsaXplIGFycmF5IG9mIGJ1ZmZlciBwYXJ0aXRpb25zLgorICovCitzdGF0 aWMgdm9pZAorYnVmZmVyX3BhcnRpdGlvbnNfaW5pdCh2b2lkKQoreworCWludAkJCXJlbWFp bmluZ19idWZmZXJzID0gTkJ1ZmZlcnM7CisJaW50CQkJYnVmZmVyID0gMDsKKworCS8qIG51 bWJlciBvZiBidWZmZXJzIHBlciBwYXJ0aXRpb24gKG1ha2Ugc3VyZSB0byBub3Qgb3ZlcmZs b3cpICovCisJaW50CQkJcGFydF9idWZmZXJzCisJCT0gKChpbnQ2NCkgTkJ1ZmZlcnMgKyAo TlVNX0NMT0NLX1NXRUVQX1BBUlRJVElPTlMgLSAxKSkgLyBOVU1fQ0xPQ0tfU1dFRVBfUEFS VElUSU9OUzsKKworCUJ1ZmZlclBhcnRpdGlvbnNBcnJheS0+bnBhcnRpdGlvbnMgPSBOVU1f Q0xPQ0tfU1dFRVBfUEFSVElUSU9OUzsKKworCWZvciAoaW50IG4gPSAwOyBuIDwgQnVmZmVy UGFydGl0aW9uc0FycmF5LT5ucGFydGl0aW9uczsgbisrKQorCXsKKwkJQnVmZmVyUGFydGl0 aW9uICpwYXJ0ID0gJkJ1ZmZlclBhcnRpdGlvbnNBcnJheS0+cGFydGl0aW9uc1tuXTsKKwor CQkvKiBidWZmZXJzIHRoaXMgcGFydGl0aW9uIHNob3VsZCBnZXQgKGxhc3QgcGFydGl0aW9u IGNhbiBnZXQgZmV3ZXIpICovCisJCWludAkJCW51bV9idWZmZXJzID0gTWluKHJlbWFpbmlu Z19idWZmZXJzLCBwYXJ0X2J1ZmZlcnMpOworCisJCXJlbWFpbmluZ19idWZmZXJzIC09IG51 bV9idWZmZXJzOworCisJCUFzc2VydCgobnVtX2J1ZmZlcnMgPiAwKSAmJiAobnVtX2J1ZmZl cnMgPD0gcGFydF9idWZmZXJzKSk7CisJCUFzc2VydCgoYnVmZmVyID49IDApICYmIChidWZm ZXIgPCBOQnVmZmVycykpOworCisJCXBhcnQtPm51bV9idWZmZXJzID0gbnVtX2J1ZmZlcnM7 CisJCXBhcnQtPmZpcnN0X2J1ZmZlciA9IGJ1ZmZlcjsKKwkJcGFydC0+bGFzdF9idWZmZXIg PSBidWZmZXIgKyAobnVtX2J1ZmZlcnMgLSAxKTsKKworCQlidWZmZXIgKz0gbnVtX2J1ZmZl cnM7CisJfQorCisJQXNzZXJ0Q2hlY2tCdWZmZXJQYXJ0aXRpb25zKCk7Cit9CisKK2ludAor QnVmZmVyUGFydGl0aW9uQ291bnQodm9pZCkKK3sKKwlyZXR1cm4gQnVmZmVyUGFydGl0aW9u c0FycmF5LT5ucGFydGl0aW9uczsKK30KKwordm9pZAorQnVmZmVyUGFydGl0aW9uR2V0KGlu dCBpZHgsIGludCAqbnVtX2J1ZmZlcnMsCisJCQkJICAgaW50ICpmaXJzdF9idWZmZXIsIGlu dCAqbGFzdF9idWZmZXIpCit7CisJaWYgKChpZHggPj0gMCkgJiYgKGlkeCA8IEJ1ZmZlclBh cnRpdGlvbnNBcnJheS0+bnBhcnRpdGlvbnMpKQorCXsKKwkJQnVmZmVyUGFydGl0aW9uICpw YXJ0ID0gJkJ1ZmZlclBhcnRpdGlvbnNBcnJheS0+cGFydGl0aW9uc1tpZHhdOworCisJCSpu dW1fYnVmZmVycyA9IHBhcnQtPm51bV9idWZmZXJzOworCQkqZmlyc3RfYnVmZmVyID0gcGFy dC0+Zmlyc3RfYnVmZmVyOworCQkqbGFzdF9idWZmZXIgPSBwYXJ0LT5sYXN0X2J1ZmZlcjsK KworCQlyZXR1cm47CisJfQorCisJZWxvZyhFUlJPUiwgImludmFsaWQgcGFydGl0aW9uIGlu ZGV4Iik7Cit9CisKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVy bmFscy5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgKaW5kZXggYzEy MDZhNDZhYmEuLjgwYjBjMTQ4MzFjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdl L2J1Zl9pbnRlcm5hbHMuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5h bHMuaApAQCAtMzIxLDYgKzMyMSw3IEBAIHR5cGVkZWYgc3RydWN0IFdyaXRlYmFja0NvbnRl eHQKIAogLyogaW4gYnVmX2luaXQuYyAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIEJ1ZmZlckRl c2NQYWRkZWQgKkJ1ZmZlckRlc2NyaXB0b3JzOworZXh0ZXJuIFBHRExMSU1QT1JUIEJ1ZmZl clBhcnRpdGlvbnMgKkJ1ZmZlclBhcnRpdGlvbnNBcnJheTsKIGV4dGVybiBQR0RMTElNUE9S VCBDb25kaXRpb25WYXJpYWJsZU1pbmltYWxseVBhZGRlZCAqQnVmZmVySU9DVkFycmF5Owog ZXh0ZXJuIFBHRExMSU1QT1JUIFdyaXRlYmFja0NvbnRleHQgQmFja2VuZFdyaXRlYmFja0Nv bnRleHQ7CiAKQEAgLTQ4NCw0ICs0ODUsOSBAQCBleHRlcm4gdm9pZCBEcm9wUmVsYXRpb25M b2NhbEJ1ZmZlcnMoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsCiBleHRlcm4gdm9pZCBEcm9w UmVsYXRpb25BbGxMb2NhbEJ1ZmZlcnMoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IpOwogZXh0 ZXJuIHZvaWQgQXRFT1hhY3RfTG9jYWxCdWZmZXJzKGJvb2wgaXNDb21taXQpOwogCitleHRl cm4gaW50CUJ1ZmZlclBhcnRpdGlvbkNvdW50KHZvaWQpOworZXh0ZXJuIGludAlCdWZmZXJQ YXJ0aXRpb25Ob2Rlcyh2b2lkKTsKK2V4dGVybiB2b2lkIEJ1ZmZlclBhcnRpdGlvbkdldChp bnQgaWR4LCBpbnQgKm51bV9idWZmZXJzLAorCQkJCQkJCSAgIGludCAqZmlyc3RfYnVmZmVy LCBpbnQgKmxhc3RfYnVmZmVyKTsKKwogI2VuZGlmCQkJCQkJCS8qIEJVRk1HUl9JTlRFUk5B TFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCBiL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggYjVmOGYzYzVkNDIuLjI0ODYwYzZj MmM0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCisrKyBiL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKQEAgLTE1Myw2ICsxNTMsMjUgQEAgc3RydWN0 IFJlYWRCdWZmZXJzT3BlcmF0aW9uCiAKIHR5cGVkZWYgc3RydWN0IFJlYWRCdWZmZXJzT3Bl cmF0aW9uIFJlYWRCdWZmZXJzT3BlcmF0aW9uOwogCisvKgorICogaW5mb3JtYXRpb24gYWJv dXQgb25lIHBhcnRpdGlvbiBvZiBzaGFyZWQgYnVmZmVycworICoKKyAqIGZpcnN0L2xhc3Qg YnVmZmVyIC0gdGhlIHZhbHVlcyBhcmUgaW5jbHVzaXZlCisgKi8KK3R5cGVkZWYgc3RydWN0 IEJ1ZmZlclBhcnRpdGlvbgoreworCWludAkJCW51bV9idWZmZXJzOwkvKiBudW1iZXIgb2Yg YnVmZmVycyAqLworCWludAkJCWZpcnN0X2J1ZmZlcjsJLyogZmlyc3QgYnVmZmVyIG9mIHBh cnRpdGlvbiAqLworCWludAkJCWxhc3RfYnVmZmVyOwkvKiBsYXN0IGJ1ZmZlciBvZiBwYXJ0 aXRpb24gKi8KK30gQnVmZmVyUGFydGl0aW9uOworCisvKiBhbiBhcnJheSBvZiBpbmZvcm1h dGlvbiBhYm91dCBhbGwgcGFydGl0aW9ucyAqLwordHlwZWRlZiBzdHJ1Y3QgQnVmZmVyUGFy dGl0aW9ucworeworCWludAkJCW5wYXJ0aXRpb25zOwkvKiBudW1iZXIgb2YgcGFydGl0aW9u cyAqLworCUJ1ZmZlclBhcnRpdGlvbiBwYXJ0aXRpb25zW0ZMRVhJQkxFX0FSUkFZX01FTUJF Ul07Cit9IEJ1ZmZlclBhcnRpdGlvbnM7CisKIC8qIHRvIGF2b2lkIGhhdmluZyB0byBleHBv c2UgYnVmX2ludGVybmFscy5oIGhlcmUgKi8KIHR5cGVkZWYgc3RydWN0IFdyaXRlYmFja0Nv bnRleHQgV3JpdGViYWNrQ29udGV4dDsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApp bmRleCBhYzJkYTRjOThjZi4uZTI0NzAzZDY2ODggMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CkBAIC0zNDcsNiArMzQ3LDggQEAgQnVmZmVyRGVzY1BhZGRlZAogQnVmZmVySGVh cFR1cGxlVGFibGVTbG90CiBCdWZmZXJMb29rdXBFbnQKIEJ1ZmZlck1hbmFnZXJSZWxhdGlv bgorQnVmZmVyUGFydGl0aW9uCitCdWZmZXJQYXJ0aXRpb25zCiBCdWZmZXJTdHJhdGVneUNv bnRyb2wKIEJ1ZmZlclRhZwogQnVmZmVyVXNhZ2UKLS0gCjIuNTEuMAoK --------------apuxkCRUZ0GRSLZG7S4PIVYY--