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.96) (envelope-from ) id 1wp8ZB-001SkJ-30 for pgsql-hackers@arkaria.postgresql.org; Wed, 29 Jul 2026 17:59:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wp8ZA-007VHF-1x for pgsql-hackers@arkaria.postgresql.org; Wed, 29 Jul 2026 17:59:40 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wp8Z9-007VH7-31 for pgsql-hackers@lists.postgresql.org; Wed, 29 Jul 2026 17:59:40 +0000 Received: from fhigh-a3-smtp.messagingengine.com ([103.168.172.154]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wp8Z6-00000000y5Q-3BTB for pgsql-hackers@lists.postgresql.org; Wed, 29 Jul 2026 17:59:39 +0000 Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfhigh.phl.internal (Postfix) with ESMTP id 2216C14004BB; Wed, 29 Jul 2026 13:59:33 -0400 (EDT) Received: from phl-imap-02 ([10.202.2.81]) by phl-compute-02.internal (MEProxy); Wed, 29 Jul 2026 13:59:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1785347973; x=1785434373; bh=Oiwirm6AZE GDU1P7O2K1nfUKf8qd9JKWzjCWne2AZqA=; b=Be9xQZRRRrZa+eOqrL1LE/dKOf WRZPxgAYhYZHP3kryoCnr1XXNp9A4n9vzjwK+gHKVoniCOxpYAJr/NVJGme1L/XY eskh/y1z0lro06sZ9OYOM4oJ2xffG6Ui8m9GTKgCnoiBMOyv3axlUGFhD75Z5QTe wpCwW6Qq4lngsl16D56yV6vmjkOcNXRXGKoCUw2ziiBd/MQwFAAO6UQKg8MdQjkH bgwMc0x9DM+FkenYTYfwA/mdQ+Ox1FrHnJgMEXKWBhtyQJcAj1H/uqqSlG42Bd6B MEsJ4L9BSCm+tXm70t60jDu5knbxN/kD5NkGt2nd0h0+dsQssTMmGLp2M5sA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t= 1785347973; x=1785434373; bh=Oiwirm6AZEGDU1P7O2K1nfUKf8qd9JKWzjC Wne2AZqA=; b=h7B1fNYHXyhFdEnnIpoq++OV88oLWTmkxuw9R6x8/Z9GDHkpl8h HPy5w7aHflU4XxK1Wm/SMK87fTYEzpE9aj15XOiYKZZLCYhZLZnS0LMeOEGTHakG ofnCEIYsapmLLpS+Jpd0dQiAxQp3sBVijL5mX5rinqGG2MYVqtek6jQ7KLvy/5J3 pUhIuZkpuQ7WqVuFPDzsj39STQvy/sG8En4fUVLFoOYS4y9SJR41mSeOJQcKIbJU 1QxeEGDvr7dJS72OwnBOYowAsLbgNuP5e3ORztbf+tNvtwMnzxoSwJIS4ykKoSct cWB3Pq8lx9sYOheDU5g+IPHAD41QdLVH6Jw== X-ME-Sender: X-ME-Proxy-Cause: dmFkZTGr7qNrGoZmwCIZck7uflQdiQd+DnTE1R7tENTysVAhVlTroXVckuFc3VkbMuSKv/ t/BuhrutoPEqtHMnn+nqQUnYhziL18bwqU+bOs8YFxvzZWNZjqtM33md5HZX5jgL4Jqm2Q puKiTtwKceGXP0KJA/TEe87wRrHkLekDqg2zWp8MwgD5grNEsSjXzH9iOAxmNYZJsWU4O5 BhUi2xhX52MCmYE0y89NV92NFR6lje8m9vah8Wfrrj+52AYZojRclj13kZhhv6jUCEQlHg mNr7CpnGqMcQZubaKKvZiLNPe/qdiEepK4fWm69oNNemZ8+gn9pAAhZm+CKNMTqqjC3jcm LtHYXk+PugocdV6xx2nJ/+BQGLvFj2Ce5UovHWYeYG9Id+riOHnb86ACqo2JnrI9o3SbND l5SUgIUVXocPShMCyrDOtNSvdN6PfSFakMfBHb0hjxH7MiqoWsg4pVwdhiAe9QzmO/0YeE rc3H+xpOl8YSsY+G7b2jhMLNATDOpwSqZ6Pc8B87JQgMP23M99J364q+TIUkmIiaQwOsk4 aBQubK2eZk/zKoAhXMBzRvImfYcPSVfbHAoKv3I+l3ytnyOLo7jvHumM3eT9Sadkh8brZ6 hpjCAn0ZaMdH3FLia2hohYMM1bDNvzVcHDKhAYwQejd6+XPaFMNJJ1gVixRQ X-ME-Proxy: Feedback-ID: i675e48f3:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 55E70700069; Wed, 29 Jul 2026 13:59:32 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: A5esK-b6BnZB Date: Wed, 29 Jul 2026 13:56:41 -0400 From: "Greg Burd" To: "PostgreSQL Hackers" , "Tomas Vondra" , "Andres Freund" , "Ants Aasma" Cc: "Nathan Bossart" Message-Id: <8bd912c8-22bb-4667-a656-3be843709be2@app.fastmail.com> In-Reply-To: <4552df91-98bc-40e8-9189-a167daab6f0d@app.fastmail.com> References: <79629577-3ad8-4b1c-a469-ebc2cb4c5104@app.fastmail.com> <618241c3-a1e5-4a16-be12-17a361822ee0@app.fastmail.com> <5bcaa70b-89c7-44b6-b197-638d10997cae@app.fastmail.com> <76c33898-3baa-4f7b-8b72-57dd390fcffe@app.fastmail.com> <9cfdf3f2-b799-485a-8b5a-5159c00ff2df@app.fastmail.com> <96dc1db7-58a2-41ba-ae2e-bea86fa2fb3a@app.fastmail.com> <4552df91-98bc-40e8-9189-a167daab6f0d@app.fastmail.com> Subject: Re: [PATCH] Batched clock sweep to reduce cross-socket atomic contention Content-Type: multipart/mixed; boundary=b0368e5f6d7bb60c8e141b9111b3c49c0f1bd768 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --b0368e5f6d7bb60c8e141b9111b3c49c0f1bd768 Content-Type: text/plain Content-Transfer-Encoding: 7bit Hello again. Well, I've been using the past few days to dig into the HOT/COOL+batching model and I think I've found the corners and have data to support it. Attached find v8 (on 9fa2c1e) and a tar.gz with my benchmark. TL;DR: Empirically-grounded data shows that HOT/COOL+batching: - (a) provides scan resistance which is net new outside of the ring buffer - (b) is simpler (1-bit vs 0..5) <- that's a lot fewer bits, lol! - (c) I've found no evidence of any signal provided by the 0..5 clock-sweep counter and direct evidence that it can, in limited but not-unimaginable cases, become the root of pathologically bad performance - (d) batching de-contends nextVictimBuffer on NUMA +68-75% when the sweep is hot, no regression otherwise. Not "always faster," but "targeted de-contention that pays off exactly when the sweep saturates, and never hurts when pooled. I've tested with pgbench, HammerDB (TPROC-C/H), and custom code to model and elicit the worst/best cases and the pay-off cases I could imagine. I've not done this on local (non-cloud) hardware (I'm building that out now!) but on EC2 metal instances which I'll argue are close enough and all I had available (for now). I may still be benchmarking in ways that you feel don't elicit the best, most accurate results. Feel free to point that out and I'll adapt and re-run the tests. AI NOTICE: Yes, this patch was co-developed/refined/tested/benchmarked using AI/LLMs and even this email started off as LLM content. All the work is steered by me and reviewed before submission by me, I stand behind it warts and all. (gulp) ;-P DETAILS: I've done quite a bit of measurement. This reply is long because it needs to be, legitimate requests for real data required thought and time to execute, analyze, etc. Short version of what changed and what I found: - Two patches now, not three. I dropped the BufferAccessStrategy removal; it removed real bulk-writer backpressure with no replacement (Ants and Andres were both right), so it's out until that's solved separately. - I withdrew the v6/7 dirty-bulk "regression" and VACUUM "win" as both were mismeasurements, detailed in my earlier replies. - The batched sweep (0001) and the cooling evictor (0002) are independent and I'm treating them as such; 0001 stands alone if 0002 is contentious, but used together is the real win. - I built a sweep-bound microbenchmark that isolates the nextVictimBuffer atomic, and it settles the batching question with perf c2c evidence (below). It also shows honestly where batching does *not* move the needle. The series: 0001 Batch the clock sweep to reduce nextVictimBuffer atomic contention (Jim Mlodgenski's idea; co-authored) 0002 Replace the 0..5 usage_count clock sweep with a 1-bit HOT/COOL cooling-stage evictor (LeanStore/2Q-A1), rings kept All numbers below are on AWS bare metal, working set sized to fit RAM so misses are OS-page-cache-cheap (this is a CPU/TLB study, not a storage one -- I'll say explicitly where that matters). Instrumentation (a throwaway ticks-per-victim counter and a block-thrash function) is not part of the patches; the repro kit is attached as repro.tgz_ (underscore to avoid being picked up by CI I hope). 0001 -- batched sweep: does it help NUMA, and does it regress? ======================================================================== Andres, in the first reply on this thread you doubted that batching independent of contention/usage-rate would help, and suspected it might hurt. I set out to prove or disprove that, and the answer is: it depends entirely on whether the clock sweep is the bottleneck, and I can now show exactly when that is the case. First, the fair-throughput question. Earlier I got confusing results because I was running 2000-8000 backends against a 384-vCPU box -- 5-20x oversubscribed -- which is a scheduler-storm test, not a batching test, and there batching *did* look like it hurt (~-35%). With a connection count at or below core count (the pooled configuration anyone runs in production), on a 6-NUMA r8i.metal (384 vCPU), uniform pgbench-style point lookups, stock vs batch{1,16,64} are all within ~1-2% at every level -- batching neither helps nor hurts. So: no regression when you're not oversubscribed; the -35% was an artifact of oversubscription, which a connection pooler removes. Why neutral there? Because in a normal point-lookup the executor + protocol + tuple deform dwarf the one atomic; even stock only did ~2.9 clock ticks per victim, so nextVictimBuffer just wasn't hot enough to matter. To find out whether the *mechanism* is real at all, I built a sweep-bound microbenchmark: a function that pins+releases random blocks of a table 1.7x shared_buffers with the normal (non-ring) strategy, so StrategyGetBuffer is essentially the only work. 360 concurrent loops (= cores on the instance), 64GB shared_buffers, 6 NUMA nodes: build block-evictions/sec vs stock stock 2,096,314 -- bcs batch=1 2,138,485 +2% (single fetch-add: parity) bcs batch=16 3,531,021 +68% bcs batch=64 3,664,458 +75% and the mechanism, straight from perf c2c (cross-node HITM on the hottest line): stock: StrategyGetBuffer's fetch-add on nextVictimBuffer is the #1 cross-node HITM line at 38.5%, spread across all 6 nodes. batch=16/64: that same line drops to ~1-2% HITM. So the batched claim does exactly what it claims: nextVictimBuffer is touched ~1/N as often, its cross-socket bounce collapses, and when the sweep is the bottleneck throughput rises 68-75%. batch=1 == stock confirms the win is purely the batched atomic, not the evictor. The honest framing, which I'd rather state than have pulled out of me: this is a microbenchmark that isolates the atomic. It proves the mechanism is real and bounds the ceiling; it does not claim a 68% win on your OLTP box. On real mixed workloads at backends<=cores the sweep is a small share of each query, so end-to-end it's neutral -- no regression, no headline speedup -- until the sweep actually saturates (large hot pool, heavy eviction, many NUMA nodes, which is the reported field pathology). 0001 is a targeted de-contention that pays off exactly when the hand is hot and costs nothing when it isn't; on a single socket it compiles to the stock path (batch size 1). I did also run HammerDB TPROC-C at backends<=cores; it's write/lock/WAL-bound, the sweep is not the bottleneck, and batch=64 was ~5% *below* stock (the cooling bookkeeping isn't free when the sweep isn't the cost). Reporting that too -- it's not a batching workload, and I'm not going to pretend it is. 0002 -- cooling evictor: why the 0..5 counter, and the failure mode ======================================================================== Ants, you said the initial results were a promising indication that G-CLOCK's 0..5 counter isn't carrying much value, and asked for a wider access-pattern gamut. Here's the strongest thing I found. The 0..5 counter has a pathological failure mode that the 1-bit HOT/COOL clock does not. Stock must decrement a buffer from 5 to 0 before it can evict it -- up to five visits per victim -- and it resets its bounded-scan counter on every decrement, so under a hot, continuously-evicting pool it never gives up early. With a large shared_buffers and huge_pages off (a multi-GB BufferDescriptors array on 4KB pages), those repeated visits are dTLB misses. I measured ticks-per-victim climbing to ~9 on stock under load where the 1-bit clock stays flat (it demotes HOT->COOL in one pass; a victim is produced in at most ~3 ticks, and typically 1-2). In the extreme this turns into a throughput cliff / multi-second p99 for stock -- the field reports of "raise shared_buffers and TPS falls off" on large no-huge-pages machines. The 1-bit clock has no such cliff because it does bounded work per victim by construction. On scan resistance, which is the reason the 0..5 counter's replacement has to be careful: a demand-loaded page is admitted COOL (probationary) and only promoted to HOT on a genuine second touch, so a one-touch sequential scan fills and drains the COOL stage without displacing the HOT working set. I tested this adversarially -- an OLTP hot set that fits in shared_buffers, hit by point lookups, while a concurrent seqscan streams a table 4x shared_buffers, on local NVMe (no EBS/IOPS cap masking the eviction rate): OLTP hit ratio under the scan: stock 99.999% bcs 99.998% OLTP resident set: flat in both i.e. the cooling evictor's scan resistance is at parity with what the BAS_BULKREAD ring gives today. (An earlier version of this patch also removed that read ring on the theory that COOL admission made it redundant; local-NVMe testing showed it wasn't quite -- the ring is measurably tighter under concurrent scan -- so I kept the ring. That's the dropped 0003.) On the literature: you pointed at CLOCK-Pro, thanks -- the admission model here (probationary COOL, promote on reuse) is the 2Q-A1 / test-period idea and I'd rather adopt a better-justified promotion rule from that line than defend "second touch" if the list prefers one. I tried a stricter "promote only on a repeat reference" variant; it was neutral on OLTP and didn't improve scan resistance, so I reverted it to keep 0002 minimal, but it's an easy knob. On backpressure: I'm not removing the rings, precisely because BAS_BULKWRITE is backpressure, not just a pollution guard. If we ever do want the rings gone, that backpressure needs a real replacement first; I don't have one worth proposing, so it's out of scope here. Relationship to the NUMA partitioned sweep ======================================================================== Tomas, this overlaps your NUMA series and I want to be clear it's not a competitor. 0001 attacks the same nextVictimBuffer cross-node contention your partitioned sweep does, but as a minimal, placement-agnostic change: one fetch-add per batch instead of per tick, no per-node partitioning, no buffer-placement changes, batch-size-1 fallback so it's a no-op off NUMA. The c2c data above is the same contention your partitioning targets, measured in isolation. I think these compose rather than conflict: a partitioned sweep still advances a hand within each partition, and batching that per-partition hand should give the same cross-node relief inside a partition that it gives the global hand here. If your series lands, 0001 is a small change on top (or moot, if the partition hands are already node-local and uncontended). If it's useful I'm happy to test batching layered on your patches -- I just didn't want to fold placement/partitioning into this, since the evictor and the atomic de-contention stand on their own and are far smaller. What I'm claiming, and what I'm not ======================================================================== - 0002 is simpler (1 bit vs a 0..5 counter), has intrinsic scan resistance at parity with the BAS_BULKREAD ring, and removes a real large-pool/no-huge-pages cliff that the 0..5 counter can hit. It is throughput-neutral on ordinary OLTP (within noise), which is the bar for a replacement-policy change. - 0001 de-contends nextVictimBuffer on NUMA: +68-75% when the sweep is the bottleneck (c2c-proven mechanism), neutral otherwise, no-op off NUMA, no regression when connections are kept at/under core count. One idea would be to lower batch size to 1 when the number of backends > cores available on the host to avoid the regression, but that isn't in v8 nor have I tested it in practice. - I am NOT claiming a general TPS win; on write/lock-bound or non-sweep-bound workloads there isn't one, and I've shown that. Repro kit attached (methodology, the microbenchmark, the ticks/victim and block-thrash instruments, the residency-fraction model that predicts when the 0..5 cliff appears, and the huge_pages on/off and confound-discrimination notes). It's built to be re-run and attacked; if any of this doesn't reproduce for you, that's the feedback I want. Thanks for the reviews, they made the patch set smaller and the claims honest. best. -greg --b0368e5f6d7bb60c8e141b9111b3c49c0f1bd768 Content-Disposition: attachment; filename*0="v8-0001-Batch-the-clock-sweep-to-reduce-nextVictimBuffer-.pat"; filename*1="ch" Content-Type: text/x-patch; name="=?UTF-8?Q?v8-0001-Batch-the-clock-sweep-to-reduce-nextVictimBuffer-.patc?= =?UTF-8?Q?h?=" Content-Transfer-Encoding: base64 RnJvbSA0MDY3OWJkNjA0YTRmNTVlYmM0NjBjZGQ0MzM3ZmMzZDM3MGVjOGVjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTog TW9uLCA2IEp1bCAyMDI2IDE3OjI1OjAwIC0wNDAwClN1YmplY3Q6IFtQQVRDSCB2OCAxLzJd IEJhdGNoIHRoZSBjbG9jayBzd2VlcCB0byByZWR1Y2UgbmV4dFZpY3RpbUJ1ZmZlcgogYXRv bWljIGNvbnRlbnRpb24KClN0cmF0ZWd5R2V0QnVmZmVyKCkgYWR2YW5jZXMgdGhlIHNoYXJl ZCBjbG9jayBoYW5kLCBuZXh0VmljdGltQnVmZmVyLCB3aXRoIGEKcGdfYXRvbWljX2ZldGNo X2FkZF91MzIoLi4uLCAxKSBvbiBldmVyeSB0aWNrLiAgT24gYSBtdWx0aS1zb2NrZXQgc3lz dGVtIHRoZQpjYWNoZSBsaW5lIGhvbGRpbmcgdGhhdCBjb3VudGVyIGhhcyB0byB0cmF2ZWwg b3ZlciB0aGUgaW50ZXJjb25uZWN0IG9uIGVhY2gKb3BlcmF0aW9uLCBwdXNoaW5nIGEgc3dl ZXAgdGljayBmcm9tIH4yMG5zIChzYW1lLXNvY2tldCwgbGluZSB3YXJtIGluIEwxL0wyKQpp bnRvIHRoZSB+MTAwLTIwMG5zIHJhbmdlLiAgVW5kZXIgZXZpY3Rpb24gcHJlc3N1cmUgd2l0 aCBodW5kcmVkcyBvZiBiYWNrZW5kcwppbiBTdHJhdGVneUdldEJ1ZmZlcigpIGNvbmN1cnJl bnRseSwgdGhhdCBzaW5nbGUgY2FjaGUgbGluZSBiZWNvbWVzIHRoZQpkb21pbmFudCBjb3N0 IG9mIHRoZSBzd2VlcCwgdmlzaWJsZSBhcyBlbGV2YXRlZCBidXMtY3ljbGVzIGFuZCBjYWNo ZS1taXNzZXMgaW4KYSBwZXJmIHByb2ZpbGUuCgpIYXZlIGVhY2ggYmFja2VuZCBjbGFpbSBh IHJ1biBvZiBjb25zZWN1dGl2ZSBidWZmZXIgSURzIGZyb20gdGhlIHNoYXJlZCBoYW5kCndp dGggYSBzaW5nbGUgZmV0Y2gtYWRkIGFuZCB0aGVuIGl0ZXJhdGUgdGhyb3VnaCB0aGVtIHBy aXZhdGVseS4gIFRoZSBzd2VlcApzdGlsbCBhZHZhbmNlcyB0aHJvdWdoIHRoZSBwb29sIGlu IG9yZGVyLCBlYWNoIGJ1ZmZlciBpcyBzdGlsbCB2aXNpdGVkIGV4YWN0bHkKb25jZSBwZXIg Y29tcGxldGUgcGFzcywgYW5kIHRoZSBtZWFuaW5nIG9mIHRoZSBjbG9jayBzdGF0ZSBpcyB1 bmNoYW5nZWQ7IG9ubHkKdGhlIHRlbXBvcmFsIG9yZGVyaW5nIG9mIHZpc2l0cyB3aXRoaW4g YSBwYXNzIGNoYW5nZXMsIHdoaWNoIHRoZSBhbGdvcml0aG0KZG9lcyBub3QgZGVwZW5kIG9u LiAgVGhlIGNvbnRlbmRlZCBhdG9taWMgbm93IGZpcmVzIHJvdWdobHkgb25jZSBwZXIgYmF0 Y2gKcmF0aGVyIHRoYW4gb25jZSBwZXIgYnVmZmVyLgoKVGhlIGJhdGNoIGlzIG9uZSBjYWNo ZSBsaW5lJ3Mgd29ydGggb2YgY2xvY2staGFuZCB2YWx1ZXMgLS0KUEdfQ0FDSEVfTElORV9T SVpFIC8gc2l6ZW9mKHVpbnQzMikgLS0gY2FwcGVkIGF0IE5CdWZmZXJzIHNvIGEgY2xhaW0g Y2FuIG5ldmVyCndyYXAgdGhlIHBvb2wgbW9yZSB0aGFuIG9uY2UuICBCYXRjaGluZyBvbmx5 IGhlbHBzIHdoZW4gdGhlIGNvdW50ZXIncyBjYWNoZQpsaW5lIGFjdHVhbGx5IGJvdW5jZXMg YmV0d2VlbiBzb2NrZXRzLCBzbyBpdCBpcyBlbmFibGVkIG9ubHkgb24gbXVsdGktbm9kZQpO VU1BIGhhcmR3YXJlIChwZ19udW1hX2dldF9tYXhfbm9kZSgpID49IDEpOyBvbiBhIHNpbmds ZSBzb2NrZXQsIG9yIHdoZXJlCmxpYm51bWEgaXMgdW5hdmFpbGFibGUsIHRoZSBiYXRjaCBz aXplIHN0YXlzIDEgYW5kIHRoZSBjb2RlIHBhdGggaXMKYnl0ZS1pZGVudGljYWwgdG8gdGhl IHN0b2NrIGNsb2NrIHN3ZWVwLgoKV3JhcGFyb3VuZCBoYW5kbGluZyBpcyBhZGp1c3RlZDog d2l0aCBiYXRjaGluZywgc2V2ZXJhbCBiYWNrZW5kcyBjYW4gZWFjaCBzZWUKYSBmZXRjaC1h ZGQgcmV0dXJuIGEgdmFsdWUgcGFzdCBOQnVmZmVycyB3aXRoaW4gdGhlIHNhbWUgcGFzcy4g IEFueSBzdWNoCmJhY2tlbmQgdGFrZXMgYnVmZmVyX3N0cmF0ZWd5X2xvY2ssIHJlLXJlYWRz IHRoZSBjb3VudGVyLCBhbmQgaWYgaXQgaXMgc3RpbGwKb3V0IG9mIHJhbmdlIHdyYXBzIGl0 IHdpdGggYSBzaW5nbGUgQ0FTIGFuZCBpbmNyZW1lbnRzIGNvbXBsZXRlUGFzc2VzLgpTdHJh dGVneVN5bmNTdGFydCgpIGNvbnRpbnVlcyB0byBzZWUgYSBjb25zaXN0ZW50IChuZXh0Vmlj dGltQnVmZmVyLApjb21wbGV0ZVBhc3NlcykgcGFpci4KClRoaXMgaXMgdGhlIGJhdGNoZWQt Y2xvY2stc3dlZXAgaWRlYSBmcm9tIEppbSBNbG9kZ2Vuc2tpJ3MgcGdzcWwtaGFja2Vycwp0 aHJlYWQsIGFkYXB0ZWQgdG8gZGVyaXZlIHRoZSBiYXRjaCBzaXplIGZyb20gdGhlIHBsYXRm b3JtIGNhY2hlLWxpbmUgc2l6ZS4KCkNvLWF1dGhvcmVkLWJ5OiBKaW0gTWxvZGdlbnNraSA8 bWxvZGpAYW1hem9uLmNvbT4KLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVl bGlzdC5jIHwgMTUyICsrKysrKysrKysrKysrKysrKy0tLS0tLS0tCiAxIGZpbGUgY2hhbmdl ZCwgMTA5IGluc2VydGlvbnMoKyksIDQzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9mcmVlbGlzdC5jCmluZGV4IGZkYjViYWQuLjQ2MTA0YjMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKKysrIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwpAQCAtMjIsNiArMjIsNyBAQAogI2lu Y2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKICNp bmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKKyNpbmNsdWRlICJwb3J0L3BnX251bWEu aCIKIAogI2RlZmluZSBJTlRfQUNDRVNTX09OQ0UodmFyKQkoKGludCkoKigodm9sYXRpbGUg aW50ICopJih2YXIpKSkpCiAKQEAgLTEwMCw2OCArMTAxLDExMCBAQCBzdGF0aWMgQnVmZmVy RGVzYyAqR2V0QnVmZmVyRnJvbVJpbmcoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ks CiBzdGF0aWMgdm9pZCBBZGRCdWZmZXJUb1JpbmcoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3Ry YXRlZ3ksCiAJCQkJCQkJQnVmZmVyRGVzYyAqYnVmKTsKIAorLyoKKyAqIFBlci1iYWNrZW5k IHN0YXRlIGZvciB0aGUgYmF0Y2hlZCBjbG9jayBzd2VlcC4gIEVhY2ggYmFja2VuZCBjbGFp bXMgYSBydW4KKyAqIG9mIGNvbnNlY3V0aXZlIGNsb2NrLWhhbmQgdmFsdWVzIHdpdGggYSBz aW5nbGUgYXRvbWljIGZldGNoLWFkZCBhbmQgdGhlbgorICogaXRlcmF0ZXMgdGhyb3VnaCB0 aGVtIHByaXZhdGVseSwgc28gdGhlIGNvbnRlbmRlZCBuZXh0VmljdGltQnVmZmVyIGNhY2hl CisgKiBsaW5lIGlzIHRvdWNoZWQgcm91Z2hseSAxL2JhdGNoIGFzIG9mdGVuLiAgTXlCYXRj aFBvcyBpcyB0aGUgbmV4dCBoYW5kCisgKiB2YWx1ZSB0byBoYW5kIG91dDsgTXlCYXRjaEVu ZCBpcyBvbmUgcGFzdCB0aGUgZW5kIG9mIHRoZSBjbGFpbWVkIHJ1bi4gIEJvdGgKKyAqIGFy ZSBhYnNvbHV0ZSAobW9ub3RvbmljYWxseSBpbmNyZWFzaW5nKSBoYW5kIHZhbHVlczsgdGhl IGJ1ZmZlciBpZCBpcyB0aGUKKyAqIHZhbHVlIG1vZHVsbyBOQnVmZmVycy4KKyAqLworc3Rh dGljIHVpbnQzMiBNeUJhdGNoUG9zID0gMDsKK3N0YXRpYyB1aW50MzIgTXlCYXRjaEVuZCA9 IDA7CisKKy8qCisgKiBOdW1iZXIgb2YgY2xvY2staGFuZCB2YWx1ZXMgYSBiYWNrZW5kIGNs YWltcyBwZXIgYXRvbWljIGZldGNoLWFkZCwKKyAqIGNvbXB1dGVkIG9uY2UgYXQgc3RhcnR1 cCAoc2VlIFN0cmF0ZWd5Q3RsU2htZW1Jbml0KS4gIFdoZW4gYmF0Y2hpbmcgaXMKKyAqIGVu YWJsZWQgaXQgaXMgb25lIGNhY2hlIGxpbmUncyB3b3J0aCBvZiBoYW5kIGFkdmFuY2UsIHNv IGNvbmN1cnJlbnQKKyAqIGJhY2tlbmRzIHN3ZWVwIG5vbi1vdmVybGFwcGluZywgY2FjaGUt bGluZS1zaXplZCBydW5zIG9mIHRoZSBwb29sOyB0aGUKKyAqIGdsb2JhbCBzd2VlcCBvcmRl ciBpcyBwcmVzZXJ2ZWQgKGVhY2ggYnVmZmVyIGlzIHN0aWxsIHZpc2l0ZWQgZXhhY3RseSBv bmNlCisgKiBwZXIgcGFzcykuICBCYXRjaGluZyBpcyBlbmFibGVkIG9ubHkgb24gbXVsdGkt bm9kZSBOVU1BIGhhcmR3YXJlOyBvdGhlcndpc2UKKyAqIHRoaXMgc3RheXMgMSBhbmQgdGhl IHN3ZWVwIGlzIGJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBzdG9jayBjbG9jay4KKyAqLworc3Rh dGljIHVpbnQzMiBDbG9ja1N3ZWVwQmF0Y2hTaXplID0gMTsKKwogLyoKICAqIENsb2NrU3dl ZXBUaWNrIC0gSGVscGVyIHJvdXRpbmUgZm9yIFN0cmF0ZWd5R2V0QnVmZmVyKCkKICAqCi0g KiBNb3ZlIHRoZSBjbG9jayBoYW5kIG9uZSBidWZmZXIgYWhlYWQgb2YgaXRzIGN1cnJlbnQg cG9zaXRpb24gYW5kIHJldHVybiB0aGUKLSAqIGlkIG9mIHRoZSBidWZmZXIgbm93IHVuZGVy IHRoZSBoYW5kLgorICogUmV0dXJuIHRoZSBuZXh0IGJ1ZmZlciB0byBjb25zaWRlciBmb3Ig ZXZpY3Rpb24uICBCYWNrZW5kcyBjbGFpbSBiYXRjaGVzIG9mCisgKiBjb25zZWN1dGl2ZSBi dWZmZXIgSURzIGZyb20gdGhlIHNoYXJlZCBjbG9jayBoYW5kLCB0aGVuIGl0ZXJhdGUgdGhy b3VnaAorICogdGhlbSBsb2NhbGx5IHdpdGhvdXQgZnVydGhlciBhdG9taWMgb3BlcmF0aW9u cy4gIFRoaXMgcHJlc2VydmVzIHRoZSBnbG9iYWwKKyAqIHN3ZWVwIG9yZGVyIHdoaWxlIHJl ZHVjaW5nIGNvbnRlbnRpb24gb24gdGhlIHNoYXJlZCBjb3VudGVyLgogICovCiBzdGF0aWMg aW5saW5lIHVpbnQzMgogQ2xvY2tTd2VlcFRpY2sodm9pZCkKIHsKIAl1aW50MzIJCXZpY3Rp bTsKIAotCS8qCi0JICogQXRvbWljYWxseSBtb3ZlIGhhbmQgYWhlYWQgb25lIGJ1ZmZlciAt IGlmIHRoZXJlJ3Mgc2V2ZXJhbCBwcm9jZXNzZXMKLQkgKiBkb2luZyB0aGlzLCB0aGlzIGNh biBsZWFkIHRvIGJ1ZmZlcnMgYmVpbmcgcmV0dXJuZWQgc2xpZ2h0bHkgb3V0IG9mCi0JICog YXBwYXJlbnQgb3JkZXIuCi0JICovCi0JdmljdGltID0KLQkJcGdfYXRvbWljX2ZldGNoX2Fk ZF91MzIoJlN0cmF0ZWd5Q29udHJvbC0+bmV4dFZpY3RpbUJ1ZmZlciwgMSk7Ci0KLQlpZiAo dmljdGltID49IE5CdWZmZXJzKQorCWlmIChNeUJhdGNoUG9zID49IE15QmF0Y2hFbmQpCiAJ ewotCQl1aW50MzIJCW9yaWdpbmFsVmljdGltID0gdmljdGltOwotCi0JCS8qIGFsd2F5cyB3 cmFwIHdoYXQgd2UgbG9vayB1cCBpbiBCdWZmZXJEZXNjcmlwdG9ycyAqLwotCQl2aWN0aW0g PSB2aWN0aW0gJSBOQnVmZmVyczsKLQogCQkvKgotCQkgKiBJZiB3ZSdyZSB0aGUgb25lIHRo YXQganVzdCBjYXVzZWQgYSB3cmFwYXJvdW5kLCBmb3JjZQotCQkgKiBjb21wbGV0ZVBhc3Nl cyB0byBiZSBpbmNyZW1lbnRlZCB3aGlsZSBob2xkaW5nIHRoZSBzcGlubG9jay4gV2UKLQkJ ICogbmVlZCB0aGUgc3BpbmxvY2sgc28gU3RyYXRlZ3lTeW5jU3RhcnQoKSBjYW4gcmV0dXJu IGEgY29uc2lzdGVudAotCQkgKiB2YWx1ZSBjb25zaXN0aW5nIG9mIG5leHRWaWN0aW1CdWZm ZXIgYW5kIGNvbXBsZXRlUGFzc2VzLgorCQkgKiBDbGFpbSBhIGZyZXNoIGJhdGNoIGZyb20g dGhlIHNoYXJlZCBjbG9jayBoYW5kLiAgVGhpcyBpcyB0aGUgb25seQorCQkgKiBhdG9taWMg b3BlcmF0aW9uIHBlciBiYXRjaCwgcmVkdWNpbmcgY29udGVudGlvbiBieSB0aGUgYmF0Y2gg c2l6ZS4KIAkJICovCi0JCWlmICh2aWN0aW0gPT0gMCkKLQkJewotCQkJdWludDMyCQlleHBl Y3RlZDsKLQkJCXVpbnQzMgkJd3JhcHBlZDsKLQkJCWJvb2wJCXN1Y2Nlc3MgPSBmYWxzZTsK KwkJdWludDMyCQlzdGFydDsKKwkJdWludDMyCQliYXRjaF9zaXplID0gQ2xvY2tTd2VlcEJh dGNoU2l6ZTsKIAotCQkJZXhwZWN0ZWQgPSBvcmlnaW5hbFZpY3RpbSArIDE7CisJCXN0YXJ0 ID0gcGdfYXRvbWljX2ZldGNoX2FkZF91MzIoJlN0cmF0ZWd5Q29udHJvbC0+bmV4dFZpY3Rp bUJ1ZmZlciwKKwkJCQkJCQkJCQliYXRjaF9zaXplKTsKIAotCQkJd2hpbGUgKCFzdWNjZXNz KQotCQkJewotCQkJCS8qCi0JCQkJICogQWNxdWlyZSB0aGUgc3BpbmxvY2sgd2hpbGUgaW5j cmVhc2luZyBjb21wbGV0ZVBhc3Nlcy4gVGhhdAotCQkJCSAqIGFsbG93cyBvdGhlciByZWFk ZXJzIHRvIHJlYWQgbmV4dFZpY3RpbUJ1ZmZlciBhbmQKLQkJCQkgKiBjb21wbGV0ZVBhc3Nl cyBpbiBhIGNvbnNpc3RlbnQgbWFubmVyIHdoaWNoIGlzIHJlcXVpcmVkIGZvcgotCQkJCSAq IFN0cmF0ZWd5U3luY1N0YXJ0KCkuICBJbiB0aGVvcnkgZGVsYXlpbmcgdGhlIGluY3JlbWVu dAotCQkJCSAqIGNvdWxkIGxlYWQgdG8gYW4gb3ZlcmZsb3cgb2YgbmV4dFZpY3RpbUJ1ZmZl cnMsIGJ1dCB0aGF0J3MKLQkJCQkgKiBoaWdobHkgdW5saWtlbHkgYW5kIHdvdWxkbid0IGJl IHBhcnRpY3VsYXJseSBoYXJtZnVsLgotCQkJCSAqLwotCQkJCVNwaW5Mb2NrQWNxdWlyZSgm U3RyYXRlZ3lDb250cm9sLT5idWZmZXJfc3RyYXRlZ3lfbG9jayk7CisJCWlmIChzdGFydCA+ PSAodWludDMyKSBOQnVmZmVycykKKwkJeworCQkJc3RhcnQgPSBzdGFydCAlIE5CdWZmZXJz OwogCi0JCQkJd3JhcHBlZCA9IGV4cGVjdGVkICUgTkJ1ZmZlcnM7CisJCQkvKgorCQkJICog VGhlIGNvdW50ZXIgaGFzIGdyb3duIHBhc3QgTkJ1ZmZlcnM7IHRyeSB0byB3cmFwIGl0IGJh Y2suICBXZQorCQkJICogbXVzdCBob2xkIHRoZSBzcGlubG9jayBzbyBTdHJhdGVneVN5bmNT dGFydCgpIGNhbiByZWFkCisJCQkgKiBuZXh0VmljdGltQnVmZmVyIGFuZCBjb21wbGV0ZVBh c3NlcyBjb25zaXN0ZW50bHkuCisJCQkgKgorCQkJICogV2l0aCBiYXRjaGluZywgbXVsdGlw bGUgYmFja2VuZHMgbWF5IGVhY2ggbGFuZCBhIGZldGNoLWFkZAorCQkJICogdGhhdCByZXR1 cm5zIGEgdmFsdWUgcGFzdCBOQnVmZmVycyBpbiB0aGUgc2FtZSBwYXNzLiAgQWZ0ZXIKKwkJ CSAqIGFjcXVpcmluZyB0aGUgc3BpbmxvY2sgd2UgcmUtcmVhZCB0aGUgY291bnRlcjogaWYg YW5vdGhlcgorCQkJICogYmFja2VuZCBhbHJlYWR5IHdyYXBwZWQgaXQgYmVsb3cgTkJ1ZmZl cnMgd2UgYXJlIGRvbmUuCisJCQkgKi8KKwkJCVNwaW5Mb2NrQWNxdWlyZSgmU3RyYXRlZ3lD b250cm9sLT5idWZmZXJfc3RyYXRlZ3lfbG9jayk7CisJCQl7CisJCQkJdWludDMyCQljdXJy ZW50OworCQkJCXVpbnQzMgkJd3JhcHBlZDsKIAotCQkJCXN1Y2Nlc3MgPSBwZ19hdG9taWNf Y29tcGFyZV9leGNoYW5nZV91MzIoJlN0cmF0ZWd5Q29udHJvbC0+bmV4dFZpY3RpbUJ1ZmZl ciwKLQkJCQkJCQkJCQkJCQkJICZleHBlY3RlZCwgd3JhcHBlZCk7Ci0JCQkJaWYgKHN1Y2Nl c3MpCi0JCQkJCVN0cmF0ZWd5Q29udHJvbC0+Y29tcGxldGVQYXNzZXMrKzsKLQkJCQlTcGlu TG9ja1JlbGVhc2UoJlN0cmF0ZWd5Q29udHJvbC0+YnVmZmVyX3N0cmF0ZWd5X2xvY2spOwor CQkJCWN1cnJlbnQgPSBwZ19hdG9taWNfcmVhZF91MzIoJlN0cmF0ZWd5Q29udHJvbC0+bmV4 dFZpY3RpbUJ1ZmZlcik7CisJCQkJaWYgKGN1cnJlbnQgPj0gKHVpbnQzMikgTkJ1ZmZlcnMp CisJCQkJeworCQkJCQl3cmFwcGVkID0gY3VycmVudCAlIE5CdWZmZXJzOworCQkJCQlpZiAo cGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTMyKCZTdHJhdGVneUNvbnRyb2wtPm5leHRW aWN0aW1CdWZmZXIsCisJCQkJCQkJCQkJCQkJICAgJmN1cnJlbnQsIHdyYXBwZWQpKQorCQkJ CQkJU3RyYXRlZ3lDb250cm9sLT5jb21wbGV0ZVBhc3NlcysrOworCQkJCX0KIAkJCX0KKwkJ CVNwaW5Mb2NrUmVsZWFzZSgmU3RyYXRlZ3lDb250cm9sLT5idWZmZXJfc3RyYXRlZ3lfbG9j ayk7CisJCX0KKwkJZWxzZSBpZiAoc3RhcnQgKyBiYXRjaF9zaXplID4gKHVpbnQzMikgTkJ1 ZmZlcnMpCisJCXsKKwkJCS8qCisJCQkgKiBUaGUgZmV0Y2gtYWRkIHJldHVybmVkIGEgdmFs dWUgYmVsb3cgTkJ1ZmZlcnMsIGJ1dCB0aGlzIGJhdGNoCisJCQkgKiBzcGFucyB0aGUgd3Jh cCBwb2ludCAoc3RhcnQgLi4gTkJ1ZmZlcnMtMSB0aGVuIDAgLi4gayBhcmUKKwkJCSAqIGl0 ZXJhdGVkIGxvY2FsbHkgdmlhICIlIE5CdWZmZXJzIikuICBUaGF0IGNyb3NzaW5nIGlzIGEK KwkJCSAqIGNvbXBsZXRlIHBhc3MgdG9vLCBidXQgdGhlIHdyYXAtYW5kLWluY3JlbWVudCBw YXRoIGFib3ZlIG9ubHkKKwkJCSAqIGZpcmVzIHdoZW4gdGhlIGZldGNoLWFkZCByZXR1cm4g aXMgaXRzZWxmID49IE5CdWZmZXJzLCBzbworCQkJICogd2l0aG91dCB0aGlzIGl0IHdvdWxk IGdvIHVuY291bnRlZCBhbmQgY29tcGxldGVQYXNzZXMgd291bGQKKwkJCSAqIGRyaWZ0IGxv dyAoaXQgZmVlZHMgYmd3cml0ZXIgcGFjaW5nIC8gU3RyYXRlZ3lTeW5jU3RhcnQsIG5vdAor CQkJICogY29ycmVjdG5lc3MpLiAgVGhlIGJhdGNoIGlzIGNhcHBlZCBhdCBOQnVmZmVycywg c28gYSBiYXRjaAorCQkJICogc3BhbnMgdGhlIHdyYXAgYXQgbW9zdCBvbmNlOyBjb3VudCBp dCB1bmRlciB0aGUgc3BpbmxvY2sgZm9yIGEKKwkJCSAqIGNvbnNpc3RlbnQgKG5leHRWaWN0 aW1CdWZmZXIsIGNvbXBsZXRlUGFzc2VzKSBwYWlyLgorCQkJICovCisJCQlTcGluTG9ja0Fj cXVpcmUoJlN0cmF0ZWd5Q29udHJvbC0+YnVmZmVyX3N0cmF0ZWd5X2xvY2spOworCQkJU3Ry YXRlZ3lDb250cm9sLT5jb21wbGV0ZVBhc3NlcysrOworCQkJU3BpbkxvY2tSZWxlYXNlKCZT dHJhdGVneUNvbnRyb2wtPmJ1ZmZlcl9zdHJhdGVneV9sb2NrKTsKIAkJfQorCisJCU15QmF0 Y2hQb3MgPSBzdGFydDsKKwkJTXlCYXRjaEVuZCA9IHN0YXJ0ICsgYmF0Y2hfc2l6ZTsKIAl9 CisKKwl2aWN0aW0gPSBNeUJhdGNoUG9zICUgTkJ1ZmZlcnM7CisJTXlCYXRjaFBvcysrOwor CiAJcmV0dXJuIHZpY3RpbTsKIH0KIApAQCAtNDA4LDYgKzQ1MSwyOSBAQCBTdHJhdGVneUN0 bFNobWVtSW5pdCh2b2lkICphcmcpCiAKIAkvKiBObyBwZW5kaW5nIG5vdGlmaWNhdGlvbiAq LwogCVN0cmF0ZWd5Q29udHJvbC0+Ymd3cHJvY25vID0gLTE7CisKKwkvKgorCSAqIERlY2lk ZSB3aGV0aGVyIHRvIGJhdGNoIHRoZSBjbG9jayBzd2VlcC4KKwkgKgorCSAqIEJhdGNoaW5n IGNsYWltcyBhIHJ1biBvZiBjb25zZWN1dGl2ZSBidWZmZXIgSURzIHBlciBhdG9taWMgZmV0 Y2gtYWRkIHNvCisJICogY29uY3VycmVudCBiYWNrZW5kcyB0b3VjaCB0aGUgc2hhcmVkIG5l eHRWaWN0aW1CdWZmZXIgY2FjaGUgbGluZSB+MS9iYXRjaAorCSAqIGFzIG9mdGVuIC0tIGEg d2luIG9ubHkgd2hlbiB0aGF0IGxpbmUgYWN0dWFsbHkgYm91bmNlcyBhY3Jvc3Mgc29ja2V0 cywKKwkgKiBpLmUuIG9uIG11bHRpLW5vZGUgTlVNQSBoYXJkd2FyZS4gIE9uIGEgc2luZ2xl IHNvY2tldCB0aGUgYXRvbWljIGlzCisJICogYWxyZWFkeSBub2RlLWxvY2FsIGFuZCBiYXRj aGluZyB3b3VsZCBvbmx5IG1ha2UgYmFja2VuZHMgc2tpcCBhaGVhZCBmb3IKKwkgKiBubyBi ZW5lZml0LCBzbyB3ZSBmYWxsIGJhY2sgdG8gYmF0Y2ggc2l6ZSAxIHRoZXJlIChieXRlLWlk ZW50aWNhbCB0byB0aGUKKwkgKiBzdG9jayBvbmUtYnVmZmVyLWF0LWEtdGltZSBjbG9jayBz d2VlcCkuCisJICoKKwkgKiBCYXRjaCAoPiAxKSBvbmx5IHdoZW4gbGlibnVtYSByZXBvcnRz IG1vcmUgdGhhbiBvbmUgbm9kZQorCSAqIChwZ19udW1hX2dldF9tYXhfbm9kZSgpID49IDEp OyBwZ19udW1hX2luaXQoKSByZXR1cm5zIC0xIHdoZW4gTlVNQSBpcworCSAqIHVuYXZhaWxh YmxlLiAgKEJlbmNobWFya2luZyBzaG93ZWQgdGhlIHdpbiBob2xkcyB3aXRoIG9yIHdpdGhv dXQgaHVnZQorCSAqIHBhZ2VzLCBzbyBodWdlLXBhZ2UgYXZhaWxhYmlsaXR5IGlzIGludGVu dGlvbmFsbHkgbm90IHBhcnQgb2YgdGhlIGdhdGUuKQorCSAqLworCWlmIChwZ19udW1hX2lu aXQoKSAhPSAtMSAmJgorCQlwZ19udW1hX2dldF9tYXhfbm9kZSgpID49IDEpCisJCUNsb2Nr U3dlZXBCYXRjaFNpemUgPSBNaW4oUEdfQ0FDSEVfTElORV9TSVpFIC8gKHVpbnQzMikgc2l6 ZW9mKHVpbnQzMiksCisJCQkJCQkJCSAgKHVpbnQzMikgTkJ1ZmZlcnMpOworCWVsc2UKKwkJ Q2xvY2tTd2VlcEJhdGNoU2l6ZSA9IDE7CiB9CiAKIAotLSAKMi41MC4xCgo= --b0368e5f6d7bb60c8e141b9111b3c49c0f1bd768 Content-Disposition: attachment; filename*0="v8-0002-Replace-the-usage_count-clock-sweep-with-a-coolin.pat"; filename*1="ch" Content-Type: text/x-patch; name="=?UTF-8?Q?v8-0002-Replace-the-usage=5Fcount-clock-sweep-with-a-coolin.pa?= =?UTF-8?Q?tch?=" Content-Transfer-Encoding: base64 RnJvbSA4OThlMTAwZjVlMmM0MmQwODA0YjA1MTUzMTBmNTFjMzU3MTY2ZmVjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTog TW9uLCA2IEp1bCAyMDI2IDE5OjIyOjQ1IC0wNDAwClN1YmplY3Q6IFtQQVRDSCB2OCAyLzJd IFJlcGxhY2UgdGhlIHVzYWdlX2NvdW50IGNsb2NrIHN3ZWVwIHdpdGggYQogY29vbGluZy1z dGFnZSBldmljdG9yCgpSZXBsYWNlIHRoZSAwLi41IHVzYWdlX2NvdW50IGJ1ZmZlci1yZXBs YWNlbWVudCBwb2xpY3kgd2l0aCBhIGNvb2xpbmctc3RhZ2UKY2xvY2sgKHRoZSBMZWFuU3Rv cmUgLyAyUS1BMSBtb2RlbCk6IGEgYnVmZmVyIGlzIHNpbXBseSBIT1QgKHJlY2VudGx5IHVz ZWQpCm9yIENPT0wgKGFuIGV2aWN0aW9uIGNhbmRpZGF0ZSksIHdpdGggInBpbm5lZCIgYmVp bmcgdGhlIGV4aXN0aW5nIHJlZmNvdW50LgpUaGVyZSBpcyBubyBwZXItYnVmZmVyIGFjY2Vz cyBjb3VudGVyLgoKICAtIEEgZGVtYW5kLWxvYWRlZCBwYWdlIGlzIGFkbWl0dGVkIENPT0wg KHByb2JhdGlvbmFyeSksIG5vdCBIT1QuICBBIHNlY29uZAogICAgYWNjZXNzIHZpYSBQaW5C dWZmZXIgcHJvbW90ZXMgaXQgQ09PTCAtPiBIT1QgKHRoZSByZXNjdWUpLiAgU28gYSBwYWdl CiAgICB0b3VjaGVkIG9uY2UgLS0gYSBzZXF1ZW50aWFsIHNjYW4gLS0gZmlsbHMgYW5kIGRy YWlucyB0aGUgQ09PTCBzdGFnZSBhbmQKICAgIGlzIGV2aWN0ZWQgZnJvbSBpdCB3aXRob3V0 IGV2ZXIgZGlzcGxhY2luZyB0aGUgSE9UIHdvcmtpbmcgc2V0LiAgU2NhbgogICAgcmVzaXN0 YW5jZSBpcyBpbnRyaW5zaWMgdG8gdGhlIHJlcGxhY2VtZW50IGFsZ29yaXRobSwgd2hpY2gg aXMgd2hhdCBsZXRzIGEKICAgIGxhdGVyIGNvbW1pdCByZW1vdmUgdGhlIEJ1ZmZlckFjY2Vz c1N0cmF0ZWd5IHJpbmcgYnVmZmVycyBlbnRpcmVseS4KCiAgLSBUaGUgZm9yZWdyb3VuZCBz d2VlcCBpbiBTdHJhdGVneUdldEJ1ZmZlcigpIHJlY2xhaW1zIGFuIGFscmVhZHktQ09PTCwK ICAgIHVucGlubmVkIGJ1ZmZlciwgcGlubmluZyBpdCB3aXRoIGEgQ0FTIHNvIGEgcmFjaW5n IFBpbkJ1ZmZlciBhbHdheXMgd2lucy4KICAgIFByb21vdGlvbiAoQ09PTCAtPiBIT1QpIGFu ZCBkZW1vdGlvbiAoSE9UIC0+IENPT0wpIGFyZSBzaW5nbGUtYml0CiAgICB0cmFuc2l0aW9u czsgb25seSB0aGUgZXZpY3Rpb24gY2xhaW0gaXMgYSBDQVMuCgogIC0gVGhlIGJhY2tncm91 bmQgd3JpdGVyIG1haW50YWlucyB0aGUgc3VwcGx5IG9mIENPT0wgdmljdGltcy4gIEFzIGl0 cyBMUlUKICAgIHNjYW4gcnVucyBhaGVhZCBvZiB0aGUgY2xvY2sgaGFuZCBpdCBkZW1vdGVz IEhPVCBidWZmZXJzIHRvIENPT0wsIHNvIHRoZQogICAgZm9yZWdyb3VuZCBmaW5kcyBhIHZp Y3RpbSBpbiBhIHNpbmdsZSBwYXNzIHJhdGhlciB0aGFuIGhhdmluZyB0byBjb29sCiAgICBi dWZmZXJzIGl0c2VsZi4gIFRoZSBkZW1vdGlvbiBpcyBkZW1hbmQtZHJpdmVuIC0tIGJvdW5k ZWQgYnkgdGhlIHByZWRpY3RlZAogICAgYWxsb2NhdGlvbiBmb3IgdGhlIG5leHQgY3ljbGUg LS0gc28gaXQgc3RhZ2VzIGp1c3QgZW5vdWdoIENPT0wgYnVmZmVycwogICAgd2l0aG91dCBj b29saW5nIHRoZSB3aG9sZSBwb29sLCBhbmQgaXQgaXMgZG9uZSB1bmRlciB0aGUgYnVmZmVy IGhlYWRlcgogICAgbG9jayB0aGUgc2NhbiBhbHJlYWR5IGhvbGRzLiAgQSBzaW5nbGUgc2Vj b25kLWNoYW5jZSByZWZlcmVuY2UgYml0CiAgICAoc2V0IGJ5IFBpbkJ1ZmZlciwgY2xlYXJl ZCBvbiB0aGUgYmd3cml0ZXIncyBmaXJzdCBwYXNzIG92ZXIgYSBIT1QgYnVmZmVyKQogICAg c3BhcmVzIGEgcmVjZW50bHktYWNjZXNzZWQgYnVmZmVyIG9uZSBjb29saW5nIHBhc3MsIGtl ZXBpbmcgdGhlIGdlbnVpbmVseQogICAgaG90IHNldCBvdXQgb2YgdGhlIENPT0wgc3RhZ2Ug dW5kZXIgc2NhbiBwcmVzc3VyZS4gIEJnQnVmZmVyU3luYyBhbHNvCiAgICB0cmFja3MgdGhl IHJldXNhYmxlLWJ1ZmZlciBkZW5zaXR5IGl0IGRpcmVjdGx5IG9ic2VydmVzIG9uIGEgc2hv cnRlcgogICAgc21vb3RoaW5nIHdpbmRvdywgc28gYSBidXJzdCBvZiBwcm9iYXRpb25hcnkv c2NhbiBDT09MIHBhZ2VzIGlzIGZvbGxvd2VkCiAgICBwcm9tcHRseSByYXRoZXIgdGhhbiBh dmVyYWdlZCBhd2F5LiAgVW5kZXIgYSBidWxrLWRpcnR5aW5nIHdvcmtsb2FkIHRoZQogICAg cGVyLWN5Y2xlIGNsZWFuLXdyaXRlIGNhcCBpcyByYWlzZWQgZnJvbSBiZ3dyaXRlcl9scnVf bWF4cGFnZXMgdG8gcHJlZGljdGVkCiAgICBkZW1hbmQgc28gdGhlIGJnd3JpdGVyIGtlZXBz IHN1cHBseWluZyBjbGVhbiB2aWN0aW1zLCByYXRoZXIgdGhhbiB0aGUKICAgIGZvcmVncm91 bmQgc3dlZXAgaGF2aW5nIHRvIGZsdXNoIGRpcnR5IHZpY3RpbXMgaW5saW5lOyBub3JtYWwg d29ya2xvYWRzLAogICAgd2hlcmUgZGVtYW5kIGlzIGJlbG93IHRoZSBjYXAsIGFyZSB1bmFm ZmVjdGVkLgoKVGhlIDQtYml0IHVzYWdlX2NvdW50IGZpZWxkIGlzIHJlaW50ZXJwcmV0ZWQg aW4gcGxhY2U6IGJpdCAwIGlzIHRoZSBIT1QvQ09PTApzdGF0ZSAoQlVGX0NPT0xTVEFURV9P TkUpLCBiaXQgMSB0aGUgcmVmZXJlbmNlIGJpdCAoQlVGX1JFRkJJVCkuICBUaGUgNjQtYml0 CmJ1ZmZlci1zdGF0ZSBsYXlvdXQgLS0gcmVmY291bnQsIGZsYWcgYW5kIGxvY2sgb2Zmc2V0 cyBhbmQgdGhlaXIgU3RhdGljQXNzZXJ0cwotLSBpcyB1bmNoYW5nZWQ7IG9ubHkgdGhlIG1l YW5pbmcgb2YgdGhlIGZpZWxkIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHRoYXQgdG91Y2gKaXQg Y2hhbmdlLiAgQSBTdGF0aWNBc3NlcnQgcmVxdWlyZXMgdGhlIGZpZWxkIHRvIGJlIGF0IGxl YXN0IDIgYml0cyB3aWRlIHNvIGEKZnV0dXJlIHdpZHRoIGNoYW5nZSBjYW5ub3QgcHVzaCB0 aGUgcmVmZXJlbmNlIGJpdCBpbnRvIHRoZSBmbGFnIGJpdHMuCkJNX01BWF9VU0FHRV9DT1VO VCBiZWNvbWVzIEJVRl9DT09MU1RBVEVfSE9UICgxKSwgc28gdGhlIHBpbiBmYXN0IHBhdGgK c2F0dXJhdGVzIGF0IEhPVC4gIExvY2FsICh0ZW1wLXRhYmxlKSBidWZmZXJzIGdldCB0aGUg c2FtZSB0d28tc3RhdGUKdHJlYXRtZW50OyBiZWluZyBzaW5nbGUtYmFja2VuZCB0aGV5IG5l ZWQgbm8gYmFja2dyb3VuZCBjb29sZXIuCgpCZWNhdXNlIHRoZSByZWZlcmVuY2UgYml0IHNo YXJlcyB0aGUgZmllbGQsIHRoZSBmdWxsIDQtYml0IHZhbHVlIGNhbiBiZSAwLi4zOwpyZWFk ZXJzIHRoYXQgbWVhbiAidGhlIGNvb2xpbmcgc3RhdGUiIG11c3QgdXNlIEJVRl9TVEFURV9H RVRfQ09PTFNUQVRFKCksIHdoaWNoCm1hc2tzIHRvIGJpdCAwIGFuZCByZXR1cm5zIG9ubHkg MCAoQ09PTCkgb3IgMSAoSE9UKSwgbmV2ZXIgdGhlIHJhdyBmaWVsZC4KY29udHJpYi9wZ19i dWZmZXJjYWNoZSBpcyB1cGRhdGVkIGFjY29yZGluZ2x5OiBpdHMgdXNhZ2Vjb3VudCBjb2x1 bW4gYW5kIHRoZQpwZ19idWZmZXJjYWNoZV9zdW1tYXJ5IGF2ZXJhZ2UgcmVwb3J0IHRoZSBj b29saW5nIHN0YXRlICgwID0gQ09PTCwgMSA9IEhPVCksCmFuZCBwZ19idWZmZXJjYWNoZV91 c2FnZV9jb3VudHMoKSBidWNrZXRzIG9uIGl0LiAgVXNpbmcgdGhlIHJhdyA0LWJpdCBnZXR0 ZXIKdGhlcmUgd291bGQgaW5kZXggaXRzIEJNX01BWF9VU0FHRV9DT1VOVCsxID0gMi1lbGVt ZW50IGFycmF5cyB3aXRoIHZhbHVlcyB1cAp0byAzIGFuZCBvdmVycnVuIHRoZSBzdGFjazsg bWFza2luZyB0byB0aGUgY29vbGluZyBiaXQga2VlcHMgdGhlIGluZGV4IGluCnJhbmdlLiAg VGhlIHJlZmVyZW5jZSBiaXQgaXMgZGVsaWJlcmF0ZWx5IG5vdCBleHBvc2VkIGFzIHVzYWdl Y291bnQuCgpEZXBlbmRzIG9uIHRoZSBiYXRjaGVkIGNsb2NrIHN3ZWVwIGZyb20gdGhlIHBy ZXZpb3VzIGNvbW1pdC4KLS0tCiBjb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNh Y2hlX3BhZ2VzLmMgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1n ci5jICAgICAgICAgICB8IDEzMCArKysrKysrKysrKysrKy0tLS0KIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMgICAgICAgICB8IDExNCArKysrKysrKystLS0tLS0K IHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2xvY2FsYnVmLmMgICAgICAgICB8ICAxMyAr LQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmggICAgICAgICAgIHwgIDYz ICsrKysrKystLQogNSBmaWxlcyBjaGFuZ2VkLCAyMzkgaW5zZXJ0aW9ucygrKSwgODcgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZm ZXJjYWNoZV9wYWdlcy5jIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNo ZV9wYWdlcy5jCmluZGV4IDUxMDQ1NTkuLmI5NGU2ZjYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIv cGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYworKysgYi9jb250cmliL3Bn X2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKQEAgLTE2MSw3ICsxNjEsNyBA QCBwZ19idWZmZXJjYWNoZV9wYWdlcyhQR19GVU5DVElPTl9BUkdTKQogCQlyZWxkYXRhYmFz ZSA9IGJ1Zkhkci0+dGFnLmRiT2lkOwogCQlmb3JrbnVtID0gQnVmVGFnR2V0Rm9ya051bSgm YnVmSGRyLT50YWcpOwogCQlibG9ja251bSA9IGJ1Zkhkci0+dGFnLmJsb2NrTnVtOwotCQl1 c2FnZWNvdW50ID0gQlVGX1NUQVRFX0dFVF9VU0FHRUNPVU5UKGJ1Zl9zdGF0ZSk7CisJCXVz YWdlY291bnQgPSBCVUZfU1RBVEVfR0VUX0NPT0xTVEFURShidWZfc3RhdGUpOwogCQlwaW5u aW5nX2JhY2tlbmRzID0gQlVGX1NUQVRFX0dFVF9SRUZDT1VOVChidWZfc3RhdGUpOwogCiAJ CWlmIChidWZfc3RhdGUgJiBCTV9ESVJUWSkKQEAgLTYwNSw3ICs2MDUsNyBAQCBwZ19idWZm ZXJjYWNoZV9zdW1tYXJ5KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCWlmIChidWZfc3RhdGUgJiBC TV9WQUxJRCkKIAkJewogCQkJYnVmZmVyc191c2VkKys7Ci0JCQl1c2FnZWNvdW50X3RvdGFs ICs9IEJVRl9TVEFURV9HRVRfVVNBR0VDT1VOVChidWZfc3RhdGUpOworCQkJdXNhZ2Vjb3Vu dF90b3RhbCArPSBCVUZfU1RBVEVfR0VUX0NPT0xTVEFURShidWZfc3RhdGUpOwogCiAJCQlp ZiAoYnVmX3N0YXRlICYgQk1fRElSVFkpCiAJCQkJYnVmZmVyc19kaXJ0eSsrOwpAQCAtNjU1 LDcgKzY1NSw3IEBAIHBnX2J1ZmZlcmNhY2hlX3VzYWdlX2NvdW50cyhQR19GVU5DVElPTl9B UkdTKQogCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKLQkJdXNhZ2VfY291bnQgPSBC VUZfU1RBVEVfR0VUX1VTQUdFQ09VTlQoYnVmX3N0YXRlKTsKKwkJdXNhZ2VfY291bnQgPSBC VUZfU1RBVEVfR0VUX0NPT0xTVEFURShidWZfc3RhdGUpOwogCQl1c2FnZV9jb3VudHNbdXNh Z2VfY291bnRdKys7CiAKIAkJaWYgKGJ1Zl9zdGF0ZSAmIEJNX0RJUlRZKQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCAzOTA4NTI5Li44Njg5MjY2IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtODMsNiArODMsNyBAQAogLyogQml0 cyBpbiBTeW5jT25lQnVmZmVyJ3MgcmV0dXJuIHZhbHVlICovCiAjZGVmaW5lIEJVRl9XUklU VEVOCQkJCTB4MDEKICNkZWZpbmUgQlVGX1JFVVNBQkxFCQkJMHgwMgorI2RlZmluZSBCVUZf Q09PTEVECQkJCTB4MDQKIAogI2RlZmluZSBSRUxTX0JTRUFSQ0hfVEhSRVNIT0xECQkyMAog CkBAIC02MzQsNyArNjM1LDcgQEAgc3RhdGljIHZvaWQgUGluQnVmZmVyX0xvY2tlZChCdWZm ZXJEZXNjICpidWYpOwogc3RhdGljIHZvaWQgVW5waW5CdWZmZXIoQnVmZmVyRGVzYyAqYnVm KTsKIHN0YXRpYyB2b2lkIFVucGluQnVmZmVyTm9Pd25lcihCdWZmZXJEZXNjICpidWYpOwog c3RhdGljIHZvaWQgQnVmZmVyU3luYyhpbnQgZmxhZ3MpOwotc3RhdGljIGludAlTeW5jT25l QnVmZmVyKGludCBidWZfaWQsIGJvb2wgc2tpcF9yZWNlbnRseV91c2VkLAorc3RhdGljIGlu dAlTeW5jT25lQnVmZmVyKGludCBidWZfaWQsIGJvb2wgc2tpcF9yZWNlbnRseV91c2VkLCBi b29sIGNvb2xfaWZfaG90LAogCQkJCQkJICBXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0 KTsKIHN0YXRpYyB2b2lkIFdhaXRJTyhCdWZmZXJEZXNjICpidWYpOwogc3RhdGljIHZvaWQg QWJvcnRCdWZmZXJJTyhCdWZmZXIgYnVmZmVyKTsKQEAgLTIzMzMsNyArMjMzNCwxMCBAQCBC dWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9y a051bWJlciBmb3JrTnVtLAogCSAqIGNoZWNrcG9pbnRzLCBleGNlcHQgZm9yIHRoZWlyICJp bml0IiBmb3Jrcywgd2hpY2ggbmVlZCB0byBiZSB0cmVhdGVkCiAJICoganVzdCBsaWtlIHBl cm1hbmVudCByZWxhdGlvbnMuCiAJICovCi0Jc2V0X2JpdHMgfD0gQk1fVEFHX1ZBTElEIHwg QlVGX1VTQUdFQ09VTlRfT05FOworCXNldF9iaXRzIHw9IEJNX1RBR19WQUxJRDsKKwkvKiBB ZG1pdCB0aGUgbmV3bHkgbG9hZGVkIHBhZ2UgQ09PTCAocHJvYmF0aW9uKTsgYSBzZWNvbmQg YWNjZXNzIHZpYQorCSAqIFBpbkJ1ZmZlciBwcm9tb3RlcyBpdCB0byBIT1QuICBUaGlzIGlz IHdoYXQgbWFrZXMgYSBvbmUtdG91Y2ggc2NhbgorCSAqIHNlbGYtZXZpY3RpbmcgLS0gc2Vl IHRoZSBjb29saW5nLXN0YXRlIG5vdGVzIGluIGJ1Zl9pbnRlcm5hbHMuaC4gKi8KIAlpZiAo cmVscGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UIHx8IGZvcmtOdW0g PT0gSU5JVF9GT1JLTlVNKQogCQlzZXRfYml0cyB8PSBCTV9QRVJNQU5FTlQ7CiAKQEAgLTMw MDIsNyArMzAwNiw5IEBAIEV4dGVuZEJ1ZmZlcmVkUmVsU2hhcmVkKEJ1ZmZlck1hbmFnZXJS ZWxhdGlvbiBibXIsCiAKIAkJCXZpY3RpbV9idWZfaGRyLT50YWcgPSB0YWc7CiAKLQkJCXNl dF9iaXRzIHw9IEJNX1RBR19WQUxJRCB8IEJVRl9VU0FHRUNPVU5UX09ORTsKKwkJCXNldF9i aXRzIHw9IEJNX1RBR19WQUxJRDsKKwkJCS8qIEFkbWl0IENPT0wgKHByb2JhdGlvbik7IHNl ZSB0aGUgY29tbWVudCBhdCB0aGUgb3RoZXIgYWRtaXNzaW9uCisJCQkgKiBzaXRlIGFuZCB0 aGUgY29vbGluZy1zdGF0ZSBub3RlcyBpbiBidWZfaW50ZXJuYWxzLmguICovCiAJCQlpZiAo Ym1yLnJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVCB8fCBmb3Jr ID09IElOSVRfRk9SS05VTSkKIAkJCQlzZXRfYml0cyB8PSBCTV9QRVJNQU5FTlQ7CiAKQEAg LTMzMzIsMjEgKzMzMzgsMTcgQEAgUGluQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgQnVmZmVy QWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiAJCQkvKiBpbmNyZWFzZSByZWZjb3VudCAqLwog CQkJYnVmX3N0YXRlICs9IEJVRl9SRUZDT1VOVF9PTkU7CiAKLQkJCWlmIChzdHJhdGVneSA9 PSBOVUxMKQotCQkJewotCQkJCS8qIERlZmF1bHQgY2FzZTogaW5jcmVhc2UgdXNhZ2Vjb3Vu dCB1bmxlc3MgYWxyZWFkeSBtYXguICovCi0JCQkJaWYgKEJVRl9TVEFURV9HRVRfVVNBR0VD T1VOVChidWZfc3RhdGUpIDwgQk1fTUFYX1VTQUdFX0NPVU5UKQotCQkJCQlidWZfc3RhdGUg Kz0gQlVGX1VTQUdFQ09VTlRfT05FOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qCi0J CQkJICogUmluZyBidWZmZXJzIHNob3VsZG4ndCBldmljdCBvdGhlcnMgZnJvbSBwb29sLiAg VGh1cyB3ZQotCQkJCSAqIGRvbid0IG1ha2UgdXNhZ2Vjb3VudCBtb3JlIHRoYW4gMS4KLQkJ CQkgKi8KLQkJCQlpZiAoQlVGX1NUQVRFX0dFVF9VU0FHRUNPVU5UKGJ1Zl9zdGF0ZSkgPT0g MCkKLQkJCQkJYnVmX3N0YXRlICs9IEJVRl9VU0FHRUNPVU5UX09ORTsKLQkJCX0KKwkJCS8q CisJCQkgKiBBY2Nlc3NpbmcgYSByZXNpZGVudCBidWZmZXIgcHJvbW90ZXMgaXQgdG8gSE9U ICh0aGUgMlEgcmVzY3VlKToKKwkJCSAqIGEgcGFnZSBsb2FkZWQgQ09PTCBvbiBwcm9iYXRp b24gYmVjb21lcyBwYXJ0IG9mIHRoZSBob3Qgd29ya2luZworCQkJICogc2V0IG9uIGl0cyBz ZWNvbmQgdG91Y2guICBCTV9NQVhfVVNBR0VfQ09VTlQgaXMKKwkJCSAqIEJVRl9DT09MU1RB VEVfSE9UICgxKSwgc28gdGhpcyBzYXR1cmF0ZXMgYXQgSE9UIGFuZCBuZXZlcgorCQkJICog b3ZlcmZsb3dzIHRoZSBmaWVsZC4gIFdlIGFsc28gc2V0IHRoZSBzZWNvbmQtY2hhbmNlIHJl ZiBiaXQgc28KKwkJCSAqIHRoZSBiZ3dyaXRlcidzIG5leHQgY29vbGluZyBwYXNzIHNwYXJl cyB0aGlzIHJlY2VudGx5LXVzZWQgYnVmZmVyLgorCQkJICovCisJCQlpZiAoQlVGX1NUQVRF X0dFVF9DT09MU1RBVEUoYnVmX3N0YXRlKSA8IEJVRl9DT09MU1RBVEVfSE9UKQorCQkJCWJ1 Zl9zdGF0ZSArPSBCVUZfQ09PTFNUQVRFX09ORTsKKwkJCWJ1Zl9zdGF0ZSB8PSBCVUZfUkVG QklUOwogCiAJCQlpZiAocGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTY0KCZidWYtPnN0 YXRlLCAmb2xkX2J1Zl9zdGF0ZSwKIAkJCQkJCQkJCQkJICAgYnVmX3N0YXRlKSkKQEAgLTM3 ODUsNyArMzc4Nyw3IEBAIEJ1ZmZlclN5bmMoaW50IGZsYWdzKQogCQkgKi8KIAkJaWYgKHBn X2F0b21pY19yZWFkX3U2NCgmYnVmSGRyLT5zdGF0ZSkgJiBCTV9DSEVDS1BPSU5UX05FRURF RCkKIAkJewotCQkJaWYgKFN5bmNPbmVCdWZmZXIoYnVmX2lkLCBmYWxzZSwgJndiX2NvbnRl eHQpICYgQlVGX1dSSVRURU4pCisJCQlpZiAoU3luY09uZUJ1ZmZlcihidWZfaWQsIGZhbHNl LCBmYWxzZSwgJndiX2NvbnRleHQpICYgQlVGX1dSSVRURU4pCiAJCQl7CiAJCQkJVFJBQ0Vf UE9TVEdSRVNRTF9CVUZGRVJfU1lOQ19XUklUVEVOKGJ1Zl9pZCk7CiAJCQkJUGVuZGluZ0No ZWNrcG9pbnRlclN0YXRzLmJ1ZmZlcnNfd3JpdHRlbisrOwpAQCAtMzg3Niw2ICszODc4LDE5 IEBAIEJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0KQogCWZsb2F0 CQlzbW9vdGhpbmdfc2FtcGxlcyA9IDE2OwogCWZsb2F0CQlzY2FuX3dob2xlX3Bvb2xfbWls bGlzZWNvbmRzID0gMTIwMDAwLjA7CiAKKwkvKgorCSAqIFRoZSBjbGVhbmVyIHNjYW4gZGly ZWN0bHkgb2JzZXJ2ZXMgdGhlIHJldXNhYmxlIChDT09MLCB1bnBpbm5lZCkgYnVmZmVyCisJ ICogZGVuc2l0eSBvdmVyIHRoZSByZWdpb24gaXQgd2Fsa3MsIHdoaWNoIC0tIHdpdGggdGhl IGNvb2xpbmctc3RhZ2UKKwkgKiBldmljdG9yIC0tIGlzIGV4YWN0bHkgdGhlIHN3ZWVwJ3Mg dmljdGltIHByZWRpY2F0ZS4gIFRoYXQgb2JzZXJ2YXRpb24gaXMKKwkgKiBncm91bmQgdHJ1 dGggZm9yIHRoZSBidWZmZXJzIGFib3V0IHRvIGJlIHJldXNlZCwgd2hlcmVhcyB0aGUgc3Ry YXRlZ3kKKwkgKiBzY2FuJ3MgcG9zaXRpb25hbCBwcm94eSAoc3RyYXRlZ3lfZGVsdGEvcmVj ZW50X2FsbG9jKSBibHVycyBhIHBvb2wgd2hvc2UKKwkgKiBDT09MIHBvcHVsYXRpb24gaXMg c3BhdGlhbGx5IGNsdXN0ZXJlZCAoYSBzY2FuIGJ1cnN0IGxlYXZlcyB3aG9sZSByZWdpb25z CisJICogQ09PTCwgaG90IE9MVFAgcmVnaW9ucyBub3QpLiAgU28gd2UgbGV0IHRoZSBjbGVh bmVyJ3Mgb3duIHNhbXBsZSBhZGFwdCBvbgorCSAqIGEgc2hvcnRlciB3aW5kb3cgdGhhbiB0 aGUgc3RyYXRlZ3kgcHJveHksIHRyYWNraW5nIGEgYnVyc3Qgb2YKKwkgKiBwcm9iYXRpb25h cnkvc2NhbiBDT09MIHBhZ2VzIHdpdGhpbiBhIGN5Y2xlIG9yIHR3byBpbnN0ZWFkIG9mIGxh Z2dpbmcgaXQuCisJICovCisJZmxvYXQJCWNsZWFuZXJfc21vb3RoaW5nX3NhbXBsZXMgPSA0 OworCiAJLyogVXNlZCB0byBjb21wdXRlIGhvdyBmYXIgd2Ugc2NhbiBhaGVhZCAqLwogCWxv bmcJCXN0cmF0ZWd5X2RlbHRhOwogCWludAkJCWJ1ZnNfdG9fbGFwOwpAQCAtMzg4OSw2ICsz OTA0LDcgQEAgQmdCdWZmZXJTeW5jKFdyaXRlYmFja0NvbnRleHQgKndiX2NvbnRleHQpCiAJ aW50CQkJbnVtX3RvX3NjYW47CiAJaW50CQkJbnVtX3dyaXR0ZW47CiAJaW50CQkJcmV1c2Fi bGVfYnVmZmVyczsKKwlpbnQJCQl3cml0ZV9saW1pdDsKIAogCS8qIFZhcmlhYmxlcyBmb3Ig ZmluYWwgc21vb3RoZWRfZGVuc2l0eSB1cGRhdGUgKi8KIAlsb25nCQluZXdfc3RyYXRlZ3lf ZGVsdGE7CkBAIC00MDYzLDggKzQwNzksMjIgQEAgQmdCdWZmZXJTeW5jKFdyaXRlYmFja0Nv bnRleHQgKndiX2NvbnRleHQpCiAJICogTm93IHdyaXRlIG91dCBkaXJ0eSByZXVzYWJsZSBi dWZmZXJzLCB3b3JraW5nIGZvcndhcmQgZnJvbSB0aGUKIAkgKiBuZXh0X3RvX2NsZWFuIHBv aW50LCB1bnRpbCB3ZSBoYXZlIGxhcHBlZCB0aGUgc3RyYXRlZ3kgc2Nhbiwgb3IgY2xlYW5l ZAogCSAqIGVub3VnaCBidWZmZXJzIHRvIG1hdGNoIG91ciBlc3RpbWF0ZSBvZiB0aGUgbmV4 dCBjeWNsZSdzIGFsbG9jYXRpb24KLQkgKiByZXF1aXJlbWVudHMsIG9yIGhpdCB0aGUgYmd3 cml0ZXJfbHJ1X21heHBhZ2VzIGxpbWl0LgotCSAqLworCSAqIHJlcXVpcmVtZW50cywgb3Ig aGl0IHRoZSB3cml0ZSBsaW1pdC4KKwkgKgorCSAqIFRoZSBwZXItY3ljbGUgd3JpdGUgY2Fw IGlzIG5vcm1hbGx5IGJnd3JpdGVyX2xydV9tYXhwYWdlcy4gIEJ1dCB1bmRlciBhCisJICog YnVsay1kaXJ0eWluZyB3b3JrbG9hZCAoQ09QWSwgYnVsayBVUERBVEUsIFZBQ1VVTSkgdGhl IHBvb2wgZmlsbHMgd2l0aAorCSAqIGRpcnR5IENPT0wgYnVmZmVycyBmYXN0ZXIgdGhhbiB0 aGF0IGZpeGVkIGNhcCBjYW4gY2xlYW4sIHNvIHRoZQorCSAqIGZvcmVncm91bmQgY2xvY2sg c3dlZXAgaXMgZm9yY2VkIHRvIGZsdXNoIGRpcnR5IHZpY3RpbXMgaW5saW5lIC0tIHRoZQor CSAqIHZlcnkgY29zdCB0aGUgY29vbGluZy1zdGFnZSBldmljdG9yIGlzIG1lYW50IHRvIGtl ZXAgb2ZmIHRoZSBjcml0aWNhbAorCSAqIHBhdGguICBXaGVuIHByZWRpY3RlZCBkZW1hbmQg KHVwY29taW5nX2FsbG9jX2VzdCkgZXhjZWVkcyB0aGUgZml4ZWQgY2FwLAorCSAqIHJhaXNl IHRoZSBsaW1pdCB0byBtZWV0IGRlbWFuZCBzbyB0aGUgYmd3cml0ZXIgc3RheXMgYWhlYWQg YW5kIHN1cHBsaWVzCisJICogY2xlYW4gdmljdGltcy4gIFRoaXMgc3RheXMgYm91bmRlZCAo YnkgZGVtYW5kIGFuZCBieSBsYXBwaW5nIHRoZQorCSAqIHN0cmF0ZWd5IHBvaW50KSwgc28g aXQgY2Fubm90IHJ1biBhd2F5LCBhbmQgbm9ybWFsIHdvcmtsb2FkcyBhcmUKKwkgKiB1bmFm ZmVjdGVkIGJlY2F1c2UgdGhlcmUgdXBjb21pbmdfYWxsb2NfZXN0IDw9IGJnd3JpdGVyX2xy dV9tYXhwYWdlcy4KKwkgKi8KKwl3cml0ZV9saW1pdCA9IGJnd3JpdGVyX2xydV9tYXhwYWdl czsKKwlpZiAodXBjb21pbmdfYWxsb2NfZXN0ID4gd3JpdGVfbGltaXQpCisJCXdyaXRlX2xp bWl0ID0gdXBjb21pbmdfYWxsb2NfZXN0OwogCiAJbnVtX3RvX3NjYW4gPSBidWZzX3RvX2xh cDsKIAludW1fd3JpdHRlbiA9IDA7CkBAIC00MDczLDcgKzQxMDMsMTMgQEAgQmdCdWZmZXJT eW5jKFdyaXRlYmFja0NvbnRleHQgKndiX2NvbnRleHQpCiAJLyogRXhlY3V0ZSB0aGUgTFJV IHNjYW4gKi8KIAl3aGlsZSAobnVtX3RvX3NjYW4gPiAwICYmIHJldXNhYmxlX2J1ZmZlcnMg PCB1cGNvbWluZ19hbGxvY19lc3QpCiAJewotCQlpbnQJCQlzeW5jX3N0YXRlID0gU3luY09u ZUJ1ZmZlcihuZXh0X3RvX2NsZWFuLCB0cnVlLAorCQkvKgorCQkgKiBjb29sX2lmX2hvdCA9 IGZhbHNlOiB3aXRoIHRoZSBjb29sLWluLXBsYWNlIGZvcmVncm91bmQgc3dlZXAsIHRoZQor CQkgKiBjbG9jayBoYW5kIGRlbW90ZXMgSE9UIGJ1ZmZlcnMgb24gZXZlcnkgdGljaywgc28g dGhlIGJnd3JpdGVyIGRvZXMKKwkJICogd3JpdGViYWNrIG9ubHkgYW5kIGxlYXZlcyBhbGwg Y29vbGluZyB0byB0aGUgc3dlZXAgKG5vIGJhY2tncm91bmQKKwkJICogcHJlLWNvb2xpbmcs IG5vIGRvdWJsZS1jb29saW5nKS4KKwkJICovCisJCWludAkJCXN5bmNfc3RhdGUgPSBTeW5j T25lQnVmZmVyKG5leHRfdG9fY2xlYW4sIHRydWUsIGZhbHNlLAogCQkJCQkJCQkJCQkgICB3 Yl9jb250ZXh0KTsKIAogCQlpZiAoKytuZXh0X3RvX2NsZWFuID49IE5CdWZmZXJzKQpAQCAt NDA4Niw3ICs0MTIyLDcgQEAgQmdCdWZmZXJTeW5jKFdyaXRlYmFja0NvbnRleHQgKndiX2Nv bnRleHQpCiAJCWlmIChzeW5jX3N0YXRlICYgQlVGX1dSSVRURU4pCiAJCXsKIAkJCXJldXNh YmxlX2J1ZmZlcnMrKzsKLQkJCWlmICgrK251bV93cml0dGVuID49IGJnd3JpdGVyX2xydV9t YXhwYWdlcykKKwkJCWlmICgrK251bV93cml0dGVuID49IHdyaXRlX2xpbWl0KQogCQkJewog CQkJCVBlbmRpbmdCZ1dyaXRlclN0YXRzLm1heHdyaXR0ZW5fY2xlYW4rKzsKIAkJCQlicmVh azsKQEAgLTQxMjEsNyArNDE1Nyw3IEBAIEJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0 ICp3Yl9jb250ZXh0KQogCXsKIAkJc2NhbnNfcGVyX2FsbG9jID0gKGZsb2F0KSBuZXdfc3Ry YXRlZ3lfZGVsdGEgLyAoZmxvYXQpIG5ld19yZWNlbnRfYWxsb2M7CiAJCXNtb290aGVkX2Rl bnNpdHkgKz0gKHNjYW5zX3Blcl9hbGxvYyAtIHNtb290aGVkX2RlbnNpdHkpIC8KLQkJCXNt b290aGluZ19zYW1wbGVzOworCQkJY2xlYW5lcl9zbW9vdGhpbmdfc2FtcGxlczsKIAogI2lm ZGVmIEJHV19ERUJVRwogCQllbG9nKERFQlVHMiwgImJnd3JpdGVyOiBjbGVhbmVyIGRlbnNp dHkgYWxsb2M9JXUgc2Nhbj0lbGQgZGVuc2l0eT0lLjJmIG5ldyBzbW9vdGhlZD0lLjJmIiwK QEAgLTQxNDAsMTYgKzQxNzYsMjYgQEAgQmdCdWZmZXJTeW5jKFdyaXRlYmFja0NvbnRleHQg KndiX2NvbnRleHQpCiAgKiBJZiBza2lwX3JlY2VudGx5X3VzZWQgaXMgdHJ1ZSwgd2UgZG9u J3Qgd3JpdGUgY3VycmVudGx5LXBpbm5lZCBidWZmZXJzLCBub3IKICAqIGJ1ZmZlcnMgbWFy a2VkIHJlY2VudGx5IHVzZWQsIGFzIHRoZXNlIGFyZSBub3QgcmVwbGFjZW1lbnQgY2FuZGlk YXRlcy4KICAqCisgKiBJZiBjb29sX2lmX2hvdCBpcyB0cnVlICh0aGUgYmd3cml0ZXIncyBM UlUgc2NhbiksIGFuIHVucGlubmVkIEhPVCBidWZmZXIgaXMKKyAqIGRlbW90ZWQgSE9UIC0+ IENPT0wgYXMgd2UgcGFzcyBpdCwgcHJlLXN0YWdpbmcgZXZpY3Rpb24gY2FuZGlkYXRlcyBz byB0aGUKKyAqIGZvcmVncm91bmQgY2xvY2sgc3dlZXAgZmluZHMgYSBDT09MIHZpY3RpbSBp biBhIHNpbmdsZSBwYXNzIGluc3RlYWQgb2YKKyAqIGhhdmluZyB0byBjb29sIGJ1ZmZlcnMg aXRzZWxmIChmb3JjZV9jb29sKS4gIFRoZSBkZW1vdGlvbiBpcyBkb25lIHVuZGVyIHRoZQor ICogYnVmZmVyIGhlYWRlciBsb2NrIHdlIGFscmVhZHkgaG9sZCwgc28gaXQgbmVlZHMgbm8g Q0FTIGFuZCBjYW5ub3QgcmFjZSBhCisgKiBjb25jdXJyZW50IGRlbW90aW9uLiAgQSBjb25j dXJyZW50IFBpbkJ1ZmZlciBwcm9tb3RlcyBpdCBiYWNrIHRvIEhPVCwgd2hpY2gKKyAqIGlz IHRoZSBpbnRlbmRlZCAyUSBiZWhhdmlvciAoYSByZS1hY2Nlc3NlZCBidWZmZXIgaXMgcmVz Y3VlZCkuCisgKgogICogUmV0dXJucyBhIGJpdG1hc2sgY29udGFpbmluZyB0aGUgZm9sbG93 aW5nIGZsYWcgYml0czoKICAqCUJVRl9XUklUVEVOOiB3ZSB3cm90ZSB0aGUgYnVmZmVyLgog ICoJQlVGX1JFVVNBQkxFOiBidWZmZXIgaXMgYXZhaWxhYmxlIGZvciByZXBsYWNlbWVudCwg aWUsIGl0IGhhcwotICoJCXBpbiBjb3VudCAwIGFuZCB1c2FnZSBjb3VudCAwLgorICoJCXBp biBjb3VudCAwIGFuZCBpcyBDT09MIChhbiBldmljdGlvbiBjYW5kaWRhdGUpLgorICoJQlVG X0NPT0xFRDogd2UgZGVtb3RlZCB0aGlzIGJ1ZmZlciBIT1QgLT4gQ09PTCB0aGlzIGNhbGwu CiAgKgogICogKEJVRl9XUklUVEVOIGNvdWxkIGJlIHNldCBpbiBlcnJvciBpZiBGbHVzaEJ1 ZmZlciBmaW5kcyB0aGUgYnVmZmVyIGNsZWFuCiAgKiBhZnRlciBsb2NraW5nIGl0LCBidXQg d2UgZG9uJ3QgY2FyZSBhbGwgdGhhdCBtdWNoLikKICAqLwogc3RhdGljIGludAotU3luY09u ZUJ1ZmZlcihpbnQgYnVmX2lkLCBib29sIHNraXBfcmVjZW50bHlfdXNlZCwgV3JpdGViYWNr Q29udGV4dCAqd2JfY29udGV4dCkKK1N5bmNPbmVCdWZmZXIoaW50IGJ1Zl9pZCwgYm9vbCBz a2lwX3JlY2VudGx5X3VzZWQsIGJvb2wgY29vbF9pZl9ob3QsCisJCQkgIFdyaXRlYmFja0Nv bnRleHQgKndiX2NvbnRleHQpCiB7CiAJQnVmZmVyRGVzYyAqYnVmSGRyID0gR2V0QnVmZmVy RGVzY3JpcHRvcihidWZfaWQpOwogCWludAkJCXJlc3VsdCA9IDA7CkBAIC00MTcxLDggKzQy MTcsMzggQEAgU3luY09uZUJ1ZmZlcihpbnQgYnVmX2lkLCBib29sIHNraXBfcmVjZW50bHlf dXNlZCwgV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkKIAkgKi8KIAlidWZfc3RhdGUg PSBMb2NrQnVmSGRyKGJ1Zkhkcik7CiAKKwkvKgorCSAqIFByZS1jb29sIHdpdGggYSBzZWNv bmQgY2hhbmNlOiBpZiBhc2tlZCwgYWN0IG9uIGFuIHVucGlubmVkIEhPVCBidWZmZXIuCisJ ICogSWYgaXRzIHJlZiBiaXQgaXMgc2V0IChhY2Nlc3NlZCBzaW5jZSBvdXIgbGFzdCBwYXNz KSwgY2xlYXIgdGhlIHJlZiBiaXQKKwkgKiBhbmQgbGVhdmUgaXQgSE9UIC0tIGEgcmVjZW50 bHktdXNlZCBidWZmZXIgZWFybnMgb25lIHJlcHJpZXZlLCBrZWVwaW5nCisJICogdGhlIGhv dCB3b3JraW5nIHNldCBvdXQgb2YgdGhlIENPT0wgc3RhZ2UgdW5kZXIgc2NhbiBwcmVzc3Vy ZS4gIE9ubHkgYQorCSAqIEhPVCBidWZmZXIgd2hvc2UgcmVmIGJpdCBpcyBhbHJlYWR5IGNs ZWFyIGlzIGRlbW90ZWQgSE9UIC0+IENPT0wsCisJICogcHJlLXN0YWdpbmcgaXQgYXMgYW4g ZXZpY3Rpb24gY2FuZGlkYXRlIGZvciB0aGUgZm9yZWdyb3VuZCBzd2VlcC4gIFdlCisJICog aG9sZCB0aGUgaGVhZGVyIGxvY2ssIHNvIGVhY2ggdHJhbnNpdGlvbiBpcyBhIHBsYWluIG1h c2tlZCBzdG9yZSBhcHBsaWVkCisJICogYXRvbWljYWxseSBieSBVbmxvY2tCdWZIZHJFeHQ7 IHdlIHJlLWxvY2sgdG8gY29udGludWUgdGhlIGRpcnR5LXdyaXRlCisJICogaW5zcGVjdGlv biBiZWxvdy4KKwkgKi8KKwlpZiAoY29vbF9pZl9ob3QgJiYKKwkJQlVGX1NUQVRFX0dFVF9S RUZDT1VOVChidWZfc3RhdGUpID09IDAgJiYKKwkJQlVGX1NUQVRFX0dFVF9DT09MU1RBVEUo YnVmX3N0YXRlKSAhPSBCVUZfQ09PTFNUQVRFX0NPT0wpCisJeworCQlpZiAoQlVGX1NUQVRF X0dFVF9SRUZCSVQoYnVmX3N0YXRlKSkKKwkJeworCQkJLyogc2Vjb25kIGNoYW5jZTogY29u c3VtZSB0aGUgcmVmIGJpdCwgc3RheSBIT1QgKi8KKwkJCVVubG9ja0J1ZkhkckV4dChidWZI ZHIsIGJ1Zl9zdGF0ZSwgMCwgQlVGX1JFRkJJVCwgMCk7CisJCQlidWZfc3RhdGUgPSBMb2Nr QnVmSGRyKGJ1Zkhkcik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBub3QgcmUtYWNjZXNz ZWQgc2luY2UgbGFzdCBwYXNzOiBkZW1vdGUgdG8gQ09PTCAqLworCQkJVW5sb2NrQnVmSGRy RXh0KGJ1ZkhkciwgYnVmX3N0YXRlLCAwLCBCVUZfVVNBR0VDT1VOVF9NQVNLLCAwKTsKKwkJ CWJ1Zl9zdGF0ZSA9IExvY2tCdWZIZHIoYnVmSGRyKTsKKwkJCXJlc3VsdCB8PSBCVUZfQ09P TEVEOworCQl9CisJfQorCiAJaWYgKEJVRl9TVEFURV9HRVRfUkVGQ09VTlQoYnVmX3N0YXRl KSA9PSAwICYmCi0JCUJVRl9TVEFURV9HRVRfVVNBR0VDT1VOVChidWZfc3RhdGUpID09IDAp CisJCUJVRl9TVEFURV9HRVRfQ09PTFNUQVRFKGJ1Zl9zdGF0ZSkgPT0gQlVGX0NPT0xTVEFU RV9DT09MKQogCXsKIAkJcmVzdWx0IHw9IEJVRl9SRVVTQUJMRTsKIAl9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwppbmRleCA0NjEwNGIzLi44MDhmMTMzIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jCisrKyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKQEAgLTQ5LDYgKzQ5LDE2IEBA IHR5cGVkZWYgc3RydWN0CiAJdWludDMyCQljb21wbGV0ZVBhc3NlczsgLyogQ29tcGxldGUg Y3ljbGVzIG9mIHRoZSBjbG9jay1zd2VlcCAqLwogCXBnX2F0b21pY191aW50MzIgbnVtQnVm ZmVyQWxsb2NzOwkvKiBCdWZmZXJzIGFsbG9jYXRlZCBzaW5jZSBsYXN0IHJlc2V0ICovCiAK KwkvKgorCSAqIE51bWJlciBvZiBjbG9jay1oYW5kIHZhbHVlcyBhIGJhY2tlbmQgY2xhaW1z IHBlciBhdG9taWMgZmV0Y2gtYWRkLgorCSAqIENvbXB1dGVkIG9uY2UgYXQgc3RhcnR1cCAo c2VlIFN0cmF0ZWd5Q3RsU2htZW1Jbml0KS4gIEtlcHQgaW4gc2hhcmVkCisJICogbWVtb3J5 IHJhdGhlciB0aGFuIGEgYmFja2VuZC1sb2NhbCBzdGF0aWMgc28gdGhhdCBFWEVDX0JBQ0tF TkQgY2hpbGRyZW4KKwkgKiAod2hpY2ggZG8gbm90IGluaGVyaXQgdGhlIHBvc3RtYXN0ZXIn cyBzdGF0aWNzKSBzZWUgdGhlIHNhbWUgdmFsdWU7IGEKKwkgKiBiYWNrZW5kLWxvY2FsIGNv cHkgd291bGQgc2lsZW50bHkgcmVzZXQgdG8gMSB0aGVyZSwgZGlzYWJsaW5nIGJhdGNoaW5n CisJICogb24gV2luZG93cy4KKwkgKi8KKwl1aW50MzIJCWJhdGNoU2l6ZTsKKwogCS8qCiAJ ICogQmd3b3JrZXIgcHJvY2VzcyB0byBiZSBub3RpZmllZCB1cG9uIGFjdGl2aXR5IG9yIC0x IGlmIG5vbmUuIFNlZQogCSAqIFN0cmF0ZWd5Tm90aWZ5QmdXcml0ZXIuCkBAIC0xMTMsMTcg KzEyMyw2IEBAIHN0YXRpYyB2b2lkIEFkZEJ1ZmZlclRvUmluZyhCdWZmZXJBY2Nlc3NTdHJh dGVneSBzdHJhdGVneSwKIHN0YXRpYyB1aW50MzIgTXlCYXRjaFBvcyA9IDA7CiBzdGF0aWMg dWludDMyIE15QmF0Y2hFbmQgPSAwOwogCi0vKgotICogTnVtYmVyIG9mIGNsb2NrLWhhbmQg dmFsdWVzIGEgYmFja2VuZCBjbGFpbXMgcGVyIGF0b21pYyBmZXRjaC1hZGQsCi0gKiBjb21w dXRlZCBvbmNlIGF0IHN0YXJ0dXAgKHNlZSBTdHJhdGVneUN0bFNobWVtSW5pdCkuICBXaGVu IGJhdGNoaW5nIGlzCi0gKiBlbmFibGVkIGl0IGlzIG9uZSBjYWNoZSBsaW5lJ3Mgd29ydGgg b2YgaGFuZCBhZHZhbmNlLCBzbyBjb25jdXJyZW50Ci0gKiBiYWNrZW5kcyBzd2VlcCBub24t b3ZlcmxhcHBpbmcsIGNhY2hlLWxpbmUtc2l6ZWQgcnVucyBvZiB0aGUgcG9vbDsgdGhlCi0g KiBnbG9iYWwgc3dlZXAgb3JkZXIgaXMgcHJlc2VydmVkIChlYWNoIGJ1ZmZlciBpcyBzdGls bCB2aXNpdGVkIGV4YWN0bHkgb25jZQotICogcGVyIHBhc3MpLiAgQmF0Y2hpbmcgaXMgZW5h YmxlZCBvbmx5IG9uIG11bHRpLW5vZGUgTlVNQSBoYXJkd2FyZTsgb3RoZXJ3aXNlCi0gKiB0 aGlzIHN0YXlzIDEgYW5kIHRoZSBzd2VlcCBpcyBieXRlLWlkZW50aWNhbCB0byB0aGUgc3Rv Y2sgY2xvY2suCi0gKi8KLXN0YXRpYyB1aW50MzIgQ2xvY2tTd2VlcEJhdGNoU2l6ZSA9IDE7 Ci0KIC8qCiAgKiBDbG9ja1N3ZWVwVGljayAtIEhlbHBlciByb3V0aW5lIGZvciBTdHJhdGVn eUdldEJ1ZmZlcigpCiAgKgpAQCAtMTQ0LDcgKzE0Myw3IEBAIENsb2NrU3dlZXBUaWNrKHZv aWQpCiAJCSAqIGF0b21pYyBvcGVyYXRpb24gcGVyIGJhdGNoLCByZWR1Y2luZyBjb250ZW50 aW9uIGJ5IHRoZSBiYXRjaCBzaXplLgogCQkgKi8KIAkJdWludDMyCQlzdGFydDsKLQkJdWlu dDMyCQliYXRjaF9zaXplID0gQ2xvY2tTd2VlcEJhdGNoU2l6ZTsKKwkJdWludDMyCQliYXRj aF9zaXplID0gU3RyYXRlZ3lDb250cm9sLT5iYXRjaFNpemU7CiAKIAkJc3RhcnQgPSBwZ19h dG9taWNfZmV0Y2hfYWRkX3UzMigmU3RyYXRlZ3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVy LAogCQkJCQkJCQkJCWJhdGNoX3NpemUpOwpAQCAtMjc5LDEyICsyNzgsMzAgQEAgU3RyYXRl Z3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQ2NCAqYnVm X3N0YXRlLCBib29sICpmcm9tX3IKIAkgKi8KIAlwZ19hdG9taWNfZmV0Y2hfYWRkX3UzMigm U3RyYXRlZ3lDb250cm9sLT5udW1CdWZmZXJBbGxvY3MsIDEpOwogCi0JLyogVXNlIHRoZSAi Y2xvY2sgc3dlZXAiIGFsZ29yaXRobSB0byBmaW5kIGEgZnJlZSBidWZmZXIgKi8KKwkvKgor CSAqIFVzZSB0aGUgY29vbGluZy1zdGFnZSBjbG9jayBzd2VlcCB0byBmaW5kIGEgdmljdGlt LgorCSAqCisJICogQSBidWZmZXIgaXMgSE9UIChyZWNlbnRseSB1c2VkKSBvciBDT09MIChh biBldmljdGlvbiBjYW5kaWRhdGUpLiAgVGhpcworCSAqIGlzIGEgQ09PTC1JTi1QTEFDRSBz d2VlcDogZXZlcnkgdGljayBwYXN0IGEgSE9UIGJ1ZmZlciBkZW1vdGVzIGl0IG9uZQorCSAq IHN0ZXAgdG93YXJkIENPT0wgKHJlc3BlY3RpbmcgYSBzaW5nbGUgc2Vjb25kLWNoYW5jZSBy ZWZlcmVuY2UgYml0KSwgYW5kCisJICogYSBDT09MLCB1bnBpbm5lZCBidWZmZXIgaXMgY2xh aW1lZCBhcyB0aGUgdmljdGltLiAgQmVjYXVzZSBldmVyeSB0aWNrCisJICogbWFrZXMgY29v bGluZyBwcm9ncmVzcywgdGhlIHN3ZWVwIGlzIHNlbGYtc3RhZ2luZzogaXQgbmV2ZXIgbmVl ZHMgYQorCSAqIGJhY2tncm91bmQgcHJlLWNvb2xlciB0byBrZWVwIENPT0wgdmljdGltcyBh dmFpbGFibGUsIGFuZCBpdCBjYW5ub3QgZ2V0CisJICogc3R1Y2sgaW4gYSAibm8gQ09PTCB2 aWN0aW0gYW55d2hlcmUiIHN0YXRlIHRoYXQgZm9yY2VzIGEgZm9yZWdyb3VuZAorCSAqIGVz Y2FsYXRpb24gcGFzcy4gIE5ld2x5IGxvYWRlZCBwYWdlcyBhcmUgYWRtaXR0ZWQgQ09PTCAo c2VlCisJICogQnVmZmVyQWxsb2MpLCBzbyBzY2FuIHJlc2lzdGFuY2UgZmFsbHMgb3V0IG9m IHRoZSBhbGdvcml0aG0uCisJICoKKwkgKiB0cnljb3VudGVyIGJvdW5kcyB0aGUgc2VhcmNo OiBvbmx5IGEgcGlubmVkIGJ1ZmZlciBpcyAibm8gcHJvZ3Jlc3MiLgorCSAqIERlbW90aW5n IG9yIHJlY2xhaW1pbmcgaXMgcHJvZ3Jlc3MgYW5kIHJlc2V0cyBpdC4gIEEgZnVsbCBOQnVm ZmVycyBwYXNzCisJICogdGhhdCBmaW5kcyBldmVyeSBidWZmZXIgcGlubmVkIGZhaWxzLCBt YXRjaGluZyB0aGUgc3RvY2sgIm5vIHVucGlubmVkCisJICogYnVmZmVycyBhdmFpbGFibGUi IGNvbnRyYWN0LgorCSAqLwogCXRyeWNvdW50ZXIgPSBOQnVmZmVyczsKIAlmb3IgKDs7KQog CXsKIAkJdWludDY0CQlvbGRfYnVmX3N0YXRlOwogCQl1aW50NjQJCWxvY2FsX2J1Zl9zdGF0 ZTsKKwkJYm9vbAkJbm9fcHJvZ3Jlc3MgPSBmYWxzZTsKIAogCQlidWYgPSBHZXRCdWZmZXJE ZXNjcmlwdG9yKENsb2NrU3dlZXBUaWNrKCkpOwogCkBAIC0yOTcsMjUgKzMxNCwxMCBAQCBT dHJhdGVneUdldEJ1ZmZlcihCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwgdWludDY0 ICpidWZfc3RhdGUsIGJvb2wgKmZyb21fcgogCQl7CiAJCQlsb2NhbF9idWZfc3RhdGUgPSBv bGRfYnVmX3N0YXRlOwogCi0JCQkvKgotCQkJICogSWYgdGhlIGJ1ZmZlciBpcyBwaW5uZWQg b3IgaGFzIGEgbm9uemVybyB1c2FnZV9jb3VudCwgd2UgY2Fubm90Ci0JCQkgKiB1c2UgaXQ7 IGRlY3JlbWVudCB0aGUgdXNhZ2VfY291bnQgKHVubGVzcyBwaW5uZWQpIGFuZCBrZWVwCi0J CQkgKiBzY2FubmluZy4KLQkJCSAqLwotCisJCQkvKiBJZiB0aGUgYnVmZmVyIGlzIHBpbm5l ZCB3ZSBjYW5ub3QgdXNlIGl0OyBrZWVwIHNjYW5uaW5nLiAqLwogCQkJaWYgKEJVRl9TVEFU RV9HRVRfUkVGQ09VTlQobG9jYWxfYnVmX3N0YXRlKSAhPSAwKQogCQkJewotCQkJCWlmICgt LXRyeWNvdW50ZXIgPT0gMCkKLQkJCQl7Ci0JCQkJCS8qCi0JCQkJCSAqIFdlJ3ZlIHNjYW5u ZWQgYWxsIHRoZSBidWZmZXJzIHdpdGhvdXQgbWFraW5nIGFueSBzdGF0ZQotCQkJCQkgKiBj aGFuZ2VzLCBzbyBhbGwgdGhlIGJ1ZmZlcnMgYXJlIHBpbm5lZCAob3Igd2VyZSB3aGVuIHdl Ci0JCQkJCSAqIGxvb2tlZCBhdCB0aGVtKS4gV2UgY291bGQgaG9wZSB0aGF0IHNvbWVvbmUg d2lsbCBmcmVlCi0JCQkJCSAqIG9uZSBldmVudHVhbGx5LCBidXQgaXQncyBwcm9iYWJseSBi ZXR0ZXIgdG8gZmFpbCB0aGFuCi0JCQkJCSAqIHRvIHJpc2sgZ2V0dGluZyBzdHVjayBpbiBh biBpbmZpbml0ZSBsb29wLgotCQkJCQkgKi8KLQkJCQkJZWxvZyhFUlJPUiwgIm5vIHVucGlu bmVkIGJ1ZmZlcnMgYXZhaWxhYmxlIik7Ci0JCQkJfQorCQkJCW5vX3Byb2dyZXNzID0gdHJ1 ZTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtMzI2LDkgKzMyOCwyMyBAQCBTdHJhdGVneUdl dEJ1ZmZlcihCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwgdWludDY0ICpidWZfc3Rh dGUsIGJvb2wgKmZyb21fcgogCQkJCWNvbnRpbnVlOwogCQkJfQogCi0JCQlpZiAoQlVGX1NU QVRFX0dFVF9VU0FHRUNPVU5UKGxvY2FsX2J1Zl9zdGF0ZSkgIT0gMCkKKwkJCWlmIChCVUZf U1RBVEVfR0VUX0NPT0xTVEFURShsb2NhbF9idWZfc3RhdGUpICE9IEJVRl9DT09MU1RBVEVf Q09PTCkKIAkJCXsKLQkJCQlsb2NhbF9idWZfc3RhdGUgLT0gQlVGX1VTQUdFQ09VTlRfT05F OworCQkJCS8qCisJCQkJICogSE9UIGJ1ZmZlcjogY29vbCBpdCBpbiBwbGFjZSB0aGlzIHRp Y2suICBBcHBseSBhIHNpbmdsZQorCQkJCSAqIHNlY29uZC1jaGFuY2UgcmVmZXJlbmNlIGJp dDogYSBIT1QgYnVmZmVyIHdob3NlIHJlZiBiaXQgaXMKKwkJCQkgKiBzZXQgKHRvdWNoZWQg c2luY2UgaXQgd2FzIGxhc3QgcGFzc2VkKSBoYXMgdGhlIHJlZiBiaXQKKwkJCQkgKiBjbGVh cmVkIGFuZCBzdGF5cyBIT1Q7IG9ubHkgYSBIT1QgYnVmZmVyIHdob3NlIHJlZiBiaXQgaXMK KwkJCQkgKiBhbHJlYWR5IGNsZWFyIGlzIGRlbW90ZWQgSE9UIC0+IENPT0wuICBFaXRoZXIg dHJhbnNpdGlvbiBpcworCQkJCSAqIHByb2dyZXNzIHRvd2FyZCBhIHZpY3RpbSwgc28gcmVz ZXQgdHJ5Y291bnRlci4gIFdlIGRvIE5PVAorCQkJCSAqIGNsYWltIHRoZSBidWZmZXIgdGhp cyB0aWNrIC0tIGEgZGVtb3RlZCBidWZmZXIgYmVjb21lcyBhCisJCQkJICogY2FuZGlkYXRl IGZvciBhIGxhdGVyIHRpY2ssIGdpdmluZyBpdCBvbmUgbW9yZSBmdWxsIHN3ZWVwIG9mCisJ CQkJICogZ3JhY2UgYmVmb3JlIGV2aWN0aW9uLgorCQkJCSAqLworCQkJCWlmIChCVUZfU1RB VEVfR0VUX1JFRkJJVChsb2NhbF9idWZfc3RhdGUpKQorCQkJCQlsb2NhbF9idWZfc3RhdGUg Jj0gfkJVRl9SRUZCSVQ7CQkJLyogc2Vjb25kIGNoYW5jZTogY2xlYXIgcmVmLCBzdGF5IEhP VCAqLworCQkJCWVsc2UKKwkJCQkJbG9jYWxfYnVmX3N0YXRlICY9IH5CVUZfVVNBR0VDT1VO VF9NQVNLOwkvKiBIT1QgLT4gQ09PTCwgY2xlYXIgcmVmIGJpdCAqLwogCiAJCQkJaWYgKHBn X2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3U2NCgmYnVmLT5zdGF0ZSwgJm9sZF9idWZfc3Rh dGUsCiAJCQkJCQkJCQkJCQkgICBsb2NhbF9idWZfc3RhdGUpKQpAQCAtMzM5LDcgKzM1NSw3 IEBAIFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1 aW50NjQgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJvbV9yCiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0J CQkJLyogcGluIHRoZSBidWZmZXIgaWYgdGhlIENBUyBzdWNjZWVkcyAqLworCQkJCS8qIENP T0wgYW5kIHVucGlubmVkOiBjbGFpbSBpdC4gIFBpbiBpZiB0aGUgQ0FTIHN1Y2NlZWRzLiAq LwogCQkJCWxvY2FsX2J1Zl9zdGF0ZSArPSBCVUZfUkVGQ09VTlRfT05FOwogCiAJCQkJaWYg KHBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3U2NCgmYnVmLT5zdGF0ZSwgJm9sZF9idWZf c3RhdGUsCkBAIC0zNTYsNiArMzcyLDE1IEBAIFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFj Y2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1aW50NjQgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJvbV9y CiAJCQkJfQogCQkJfQogCQl9CisKKwkJLyoKKwkJICogT25seSBhIHBpbm5lZCBidWZmZXIg aXMgbm8gcHJvZ3Jlc3MuICBBIGZ1bGwgTkJ1ZmZlcnMgcGFzcyB0aGF0CisJCSAqIG1ha2Vz IG5vIHByb2dyZXNzIG1lYW5zIGV2ZXJ5IGJ1ZmZlciBpcyBwaW5uZWQsIHNvIGZhaWwgcmF0 aGVyIHRoYW4KKwkJICogc3BpbiBmb3JldmVyLiAgKEEgZmFpbGVkIENBUyBhYm92ZSBpcyBu ZWl0aGVyIHByb2dyZXNzIG5vciBhIGZ1bGwKKwkJICogbWlzczogd2Ugc2ltcGx5IHJldHJ5 IHRoZSBzYW1lIGJ1ZmZlci4pCisJCSAqLworCQlpZiAobm9fcHJvZ3Jlc3MgJiYgLS10cnlj b3VudGVyID09IDApCisJCQllbG9nKEVSUk9SLCAibm8gdW5waW5uZWQgYnVmZmVycyBhdmFp bGFibGUiKTsKIAl9CiB9CiAKQEAgLTQ3MCwxMCArNDk1LDEwIEBAIFN0cmF0ZWd5Q3RsU2ht ZW1Jbml0KHZvaWQgKmFyZykKIAkgKi8KIAlpZiAocGdfbnVtYV9pbml0KCkgIT0gLTEgJiYK IAkJcGdfbnVtYV9nZXRfbWF4X25vZGUoKSA+PSAxKQotCQlDbG9ja1N3ZWVwQmF0Y2hTaXpl ID0gTWluKFBHX0NBQ0hFX0xJTkVfU0laRSAvICh1aW50MzIpIHNpemVvZih1aW50MzIpLAot CQkJCQkJCQkgICh1aW50MzIpIE5CdWZmZXJzKTsKKwkJU3RyYXRlZ3lDb250cm9sLT5iYXRj aFNpemUgPSBNaW4oUEdfQ0FDSEVfTElORV9TSVpFIC8gKHVpbnQzMikgc2l6ZW9mKHVpbnQz MiksCisJCQkJCQkJCQkJICh1aW50MzIpIE5CdWZmZXJzKTsKIAllbHNlCi0JCUNsb2NrU3dl ZXBCYXRjaFNpemUgPSAxOworCQlTdHJhdGVneUNvbnRyb2wtPmJhdGNoU2l6ZSA9IDE7CiB9 CiAKIApAQCAtNzIxLDE0ICs3NDYsMTcgQEAgR2V0QnVmZmVyRnJvbVJpbmcoQnVmZmVyQWNj ZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQ2NCAqYnVmX3N0YXRlKQogCQkvKgogCQkgKiBJ ZiB0aGUgYnVmZmVyIGlzIHBpbm5lZCB3ZSBjYW5ub3QgdXNlIGl0IHVuZGVyIGFueSBjaXJj dW1zdGFuY2VzLgogCQkgKgotCQkgKiBJZiB1c2FnZV9jb3VudCBpcyAwIG9yIDEgdGhlbiB0 aGUgYnVmZmVyIGlzIGZhaXIgZ2FtZSAod2UgZXhwZWN0IDEsCi0JCSAqIHNpbmNlIG91ciBv d24gcHJldmlvdXMgdXNhZ2Ugb2YgdGhlIHJpbmcgZWxlbWVudCB3b3VsZCBoYXZlIGxlZnQg aXQKLQkJICogdGhlcmUsIGJ1dCBpdCBtaWdodCd2ZSBiZWVuIGRlY3JlbWVudGVkIGJ5IGNs b2NrLXN3ZWVwIHNpbmNlIHRoZW4pLgotCQkgKiBBIGhpZ2hlciB1c2FnZV9jb3VudCBpbmRp Y2F0ZXMgc29tZW9uZSBlbHNlIGhhcyB0b3VjaGVkIHRoZSBidWZmZXIsCi0JCSAqIHNvIHdl IHNob3VsZG4ndCByZS11c2UgaXQuCisJCSAqIElmIGl0IGlzIHVucGlubmVkIGJ1dCBoYXMg YmVlbiBwcm9tb3RlZCB0byBIT1QsIGFub3RoZXIgYmFja2VuZAorCQkgKiB0b3VjaGVkIGl0 IHNpbmNlIHdlIGxhc3QgY3ljbGVkIHBhc3QgdGhpcyByaW5nIHNsb3QsIHNvIGl0IGhhcwor CQkgKiBqb2luZWQgdGhlIHdvcmtpbmcgc2V0IGFuZCB3ZSBtdXN0IG5vdCByZWN5Y2xlIGl0 IC0tIHRlbGwgdGhlIGNhbGxlcgorCQkgKiB0byBnZXQgYSBmcmVzaCB2aWN0aW0gZnJvbSB0 aGUgc3dlZXAgaW5zdGVhZC4gIFRoaXMgaXMgdGhlIDEtYml0CisJCSAqIGNvb2xpbmctc3Rh dGUgYW5hbG9nIG9mIHRoZSBzdG9jayByaW5nJ3MgInVzYWdlX2NvdW50ID4gMSBtZWFucwor CQkgKiBzb21lb25lIGVsc2UgdG91Y2hlZCBpdCIgdGVzdDogYSBzbG90IHRoZSByaW5nIGtl ZXBzIHJldXNpbmcgYW5kCisJCSAqIG5vYm9keSBlbHNlIHBpbnMgc3RheXMgQ09PTCwgYW5k IGFuIG91dC1vZi1yaW5nIFBpbkJ1ZmZlcigpIGlzCisJCSAqIGV4YWN0bHkgd2hhdCBwcm9t b3RlcyBpdCB0byBIT1QuCiAJCSAqLwotCQlpZiAoQlVGX1NUQVRFX0dFVF9SRUZDT1VOVChs b2NhbF9idWZfc3RhdGUpICE9IDAKLQkJCXx8IEJVRl9TVEFURV9HRVRfVVNBR0VDT1VOVChs b2NhbF9idWZfc3RhdGUpID4gMSkKKwkJaWYgKEJVRl9TVEFURV9HRVRfUkVGQ09VTlQobG9j YWxfYnVmX3N0YXRlKSAhPSAwIHx8CisJCQlCVUZfU1RBVEVfR0VUX0NPT0xTVEFURShsb2Nh bF9idWZfc3RhdGUpICE9IEJVRl9DT09MU1RBVEVfQ09PTCkKIAkJCWJyZWFrOwogCiAJCS8q IFNlZSBlcXVpdmFsZW50IGNvZGUgaW4gUGluQnVmZmVyKCkgKi8KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2xvY2FsYnVmLmMgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9sb2NhbGJ1Zi5jCmluZGV4IDQ4NzBjOGUuLjIxYzA4MDkgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2xvY2FsYnVmLmMKKysrIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9idWZmZXIvbG9jYWxidWYuYwpAQCAtMTY3LDcgKzE2Nyw3IEBAIExv Y2FsQnVmZmVyQWxsb2MoU01nclJlbGF0aW9uIHNtZ3IsIEZvcmtOdW1iZXIgZm9ya051bSwg QmxvY2tOdW1iZXIgYmxvY2tOdW0sCiAKIAkJYnVmX3N0YXRlID0gcGdfYXRvbWljX3JlYWRf dTY0KCZidWZIZHItPnN0YXRlKTsKIAkJYnVmX3N0YXRlICY9IH4oQlVGX0ZMQUdfTUFTSyB8 IEJVRl9VU0FHRUNPVU5UX01BU0spOwotCQlidWZfc3RhdGUgfD0gQk1fVEFHX1ZBTElEIHwg QlVGX1VTQUdFQ09VTlRfT05FOworCQlidWZfc3RhdGUgfD0gQk1fVEFHX1ZBTElEOwkvKiBh ZG1pdCBDT09MIChwcm9iYXRpb24pICovCiAJCXBnX2F0b21pY191bmxvY2tlZF93cml0ZV91 NjQoJmJ1Zkhkci0+c3RhdGUsIGJ1Zl9zdGF0ZSk7CiAKIAkJKmZvdW5kUHRyID0gZmFsc2U7 CkBAIC0yNDgsOSArMjQ4LDEwIEBAIEdldExvY2FsVmljdGltQnVmZmVyKHZvaWQpCiAJCXsK IAkJCXVpbnQ2NAkJYnVmX3N0YXRlID0gcGdfYXRvbWljX3JlYWRfdTY0KCZidWZIZHItPnN0 YXRlKTsKIAotCQkJaWYgKEJVRl9TVEFURV9HRVRfVVNBR0VDT1VOVChidWZfc3RhdGUpID4g MCkKKwkJCWlmIChCVUZfU1RBVEVfR0VUX0NPT0xTVEFURShidWZfc3RhdGUpICE9IEJVRl9D T09MU1RBVEVfQ09PTCkKIAkJCXsKLQkJCQlidWZfc3RhdGUgLT0gQlVGX1VTQUdFQ09VTlRf T05FOworCQkJCS8qIEhPVDogZ2l2ZSBpdCBhIHNlY29uZCBjaGFuY2UsIGNvb2wgaXQgYW5k IGtlZXAgc2Nhbm5pbmcuICovCisJCQkJYnVmX3N0YXRlIC09IEJVRl9DT09MU1RBVEVfT05F OwogCQkJCXBnX2F0b21pY191bmxvY2tlZF93cml0ZV91NjQoJmJ1Zkhkci0+c3RhdGUsIGJ1 Zl9zdGF0ZSk7CiAJCQkJdHJ5Y291bnRlciA9IE5Mb2NCdWZmZXI7CiAJCQl9CkBAIC00NTQs NyArNDU1LDcgQEAgRXh0ZW5kQnVmZmVyZWRSZWxMb2NhbChCdWZmZXJNYW5hZ2VyUmVsYXRp b24gYm1yLAogCiAJCQl2aWN0aW1fYnVmX2hkci0+dGFnID0gdGFnOwogCi0JCQlidWZfc3Rh dGUgfD0gQk1fVEFHX1ZBTElEIHwgQlVGX1VTQUdFQ09VTlRfT05FOworCQkJYnVmX3N0YXRl IHw9IEJNX1RBR19WQUxJRDsJLyogYWRtaXQgQ09PTCAocHJvYmF0aW9uKSAqLwogCiAJCQlw Z19hdG9taWNfdW5sb2NrZWRfd3JpdGVfdTY0KCZ2aWN0aW1fYnVmX2hkci0+c3RhdGUsIGJ1 Zl9zdGF0ZSk7CiAKQEAgLTgzOSw5ICs4NDAsOSBAQCBQaW5Mb2NhbEJ1ZmZlcihCdWZmZXJE ZXNjICpidWZfaGRyLCBib29sIGFkanVzdF91c2FnZWNvdW50KQogCQlOTG9jYWxQaW5uZWRC dWZmZXJzKys7CiAJCWJ1Zl9zdGF0ZSArPSBCVUZfUkVGQ09VTlRfT05FOwogCQlpZiAoYWRq dXN0X3VzYWdlY291bnQgJiYKLQkJCUJVRl9TVEFURV9HRVRfVVNBR0VDT1VOVChidWZfc3Rh dGUpIDwgQk1fTUFYX1VTQUdFX0NPVU5UKQorCQkJQlVGX1NUQVRFX0dFVF9DT09MU1RBVEUo YnVmX3N0YXRlKSA8IEJVRl9DT09MU1RBVEVfSE9UKQogCQl7Ci0JCQlidWZfc3RhdGUgKz0g QlVGX1VTQUdFQ09VTlRfT05FOworCQkJYnVmX3N0YXRlICs9IEJVRl9DT09MU1RBVEVfT05F OwogCQl9CiAJCXBnX2F0b21pY191bmxvY2tlZF93cml0ZV91NjQoJmJ1Zl9oZHItPnN0YXRl LCBidWZfc3RhdGUpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9p bnRlcm5hbHMuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oCmluZGV4 IGU0ZmY1NjEuLjEzMWRmMTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVm X2ludGVybmFscy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5o CkBAIC02Nyw2ICs2Nyw1MCBAQCBTdGF0aWNBc3NlcnREZWNsKEJVRl9SRUZDT1VOVF9CSVRT ICsgQlVGX1VTQUdFQ09VTlRfQklUUyArIEJVRl9GTEFHX0JJVFMgKyBCVUZfTAogI2RlZmlu ZSBCVUZfVVNBR0VDT1VOVF9PTkUgXAogCShVSU5UNjRDT05TVCgxKSA8PCBCVUZfUkVGQ09V TlRfQklUUykKIAorLyoKKyAqIENvb2xpbmcgc3RhdGUgKExlYW5TdG9yZSAvIDJRLUExIGNv b2xpbmctc3RhZ2UgY2xvY2sgc3dlZXApLgorICoKKyAqIFRoZSBmaWVsZCBoaXN0b3JpY2Fs bHkgdXNlZCBmb3IgdGhlIDAuLjUgdXNhZ2VfY291bnQgbm93IGhvbGRzIGEgc2luZ2xlCisg KiBjb29saW5nLXN0YXRlIGJpdDogSE9UIChyZWNlbnRseSBhY2Nlc3NlZCwgbm90IGFuIGV2 aWN0aW9uIGNhbmRpZGF0ZSkgb3IKKyAqIENPT0wgKGFuIGV2aWN0aW9uIGNhbmRpZGF0ZSku ICBXZSByZXVzZSBCVUZfVVNBR0VDT1VOVF9PTkUgYXMgdGhlIHVuaXQgc28KKyAqIHRoZSBi dWZmZXItc3RhdGUgYml0IGdlb2dyYXBoeSAtLSByZWZjb3VudCwgZmxhZywgYW5kIGxvY2sg b2Zmc2V0cywgYW5kIHRoZQorICogNjQtYml0IFN0YXRpY0Fzc2VydHMgLS0gaXMgdW5jaGFu Z2VkOyBvbmx5IHRoZSBtZWFuaW5nIG9mIHRoZSBmaWVsZCBhbmQgdGhlCisgKiBpbnN0cnVj dGlvbnMgdGhhdCB0b3VjaCBpdCBjaGFuZ2UuCisgKgorICogQSBkZW1hbmQtbG9hZGVkIHBh Z2UgaXMgYWRtaXR0ZWQgQ09PTCAocHJvYmF0aW9uKTsgYSBzZWNvbmQgYWNjZXNzIHByb21v dGVzCisgKiBpdCB0byBIT1QgKHRoZSByZXNjdWUpLiAgVGhlIHN3ZWVwIHByZWZlcnMgQ09P TCB2aWN0aW1zIGFuZCBkZW1vdGVzIEhPVCB0bworICogQ09PTCBvbmx5IHdoZW4gYSBmdWxs IHBhc3MgZmluZHMgbm8gQ09PTCB2aWN0aW0uICBTbyBhIG9uZS10b3VjaCBzY2FuIGZpbGxz CisgKiBhbmQgZHJhaW5zIHRoZSBDT09MIHN0YWdlIHdpdGhvdXQgZGlzcGxhY2luZyB0aGUg SE9UIHdvcmtpbmcgc2V0IC0tIHNjYW4KKyAqIHJlc2lzdGFuY2UgaW50cmluc2ljIHRvIHRo ZSByZXBsYWNlbWVudCBhbGdvcml0aG0uCisgKi8KKyNkZWZpbmUgQlVGX0NPT0xTVEFURV9D T09MCTAKKyNkZWZpbmUgQlVGX0NPT0xTVEFURV9IT1QJMQorI2RlZmluZSBCVUZfQ09PTFNU QVRFX09ORQlCVUZfVVNBR0VDT1VOVF9PTkUKKworLyoKKyAqIFNlY29uZC1jaGFuY2UgcmVm ZXJlbmNlIGJpdCwgYml0IDEgb2YgdGhlIChmb3JtZXIgdXNhZ2Vjb3VudCkgZmllbGQsIG9u ZQorICogcG9zaXRpb24gYWJvdmUgdGhlIGNvb2xpbmctc3RhdGUgYml0LiAgUGluQnVmZmVy IHNldHMgaXQgb24gZXZlcnkgYWNjZXNzLgorICogVGhlIGJnd3JpdGVyJ3MgcHJlLWNvb2xp bmcgZ2l2ZXMgYSBIT1QgYnVmZmVyIGEgc2Vjb25kIGNoYW5jZTogdGhlIGZpcnN0CisgKiB0 aW1lIGl0IHBhc3NlcyBhIEhPVCBidWZmZXIgd2hvc2UgcmVmIGJpdCBpcyBzZXQsIGl0IGNs ZWFycyB0aGUgcmVmIGJpdCBhbmQKKyAqIGxlYXZlcyB0aGUgYnVmZmVyIEhPVDsgb25seSBh IEhPVCBidWZmZXIgd2hvc2UgcmVmIGJpdCBpcyBhbHJlYWR5IGNsZWFyIChub3QKKyAqIHJl LWFjY2Vzc2VkIHNpbmNlIHRoZSBwcmV2aW91cyBiZ3dyaXRlciBwYXNzKSBpcyBkZW1vdGVk IHRvIENPT0wuICBUaGlzCisgKiBrZWVwcyBnZW51aW5lbHktaG90IHBhZ2VzIG91dCBvZiB0 aGUgQ09PTCBzdGFnZSAocHJvdGVjdGluZyB0aGUgd29ya2luZyBzZXQKKyAqIGZyb20gYmVp bmcgY29vbGVkIHVuZGVyIHNjYW4gcHJlc3N1cmUpIHdoaWxlIGxlYXZpbmcgdGhlIGZvcmVn cm91bmQgc3dlZXAgYQorICogc2luZ2xlLXBhc3Mgc2VhcmNoIG92ZXIgdGhlIHByZS1zdGFn ZWQgQ09PTCBidWZmZXJzLiAgQSBzZXBhcmF0ZSBiaXQgKG5vdCBhCisgKiBjb3VudCkgc28g aXQgc3RheXMgYSBwbGFpbiBtYXNrZWQgc3RvcmUgdW5kZXIgdGhlIGhlYWRlciBsb2NrLgor ICovCisjZGVmaW5lIEJVRl9SRUZCSVQJCQkoVUlOVDY0Q09OU1QoMikgPDwgQlVGX1JFRkNP VU5UX0JJVFMpCisjZGVmaW5lIEJVRl9TVEFURV9HRVRfUkVGQklUKHN0YXRlKQkoKChzdGF0 ZSkgJiBCVUZfUkVGQklUKSAhPSAwKQorCisvKgorICogVGhlIGNvb2xpbmcgc3RhdGUgb2Nj dXBpZXMgYml0IDAgYW5kIHRoZSByZWZlcmVuY2UgYml0IG9jY3VwaWVzIGJpdCAxIG9mCisg KiB0aGUgKGZvcm1lciB1c2FnZWNvdW50KSBmaWVsZCwgc28gdGhlIGZpZWxkIG11c3QgYmUg YXQgbGVhc3QgMiBiaXRzIHdpZGUuCisgKiBBc3NlcnQgaXQgaGVyZSBzbyBhIGZ1dHVyZSBj aGFuZ2UgdG8gQlVGX1VTQUdFQ09VTlRfQklUUyBjYW5ub3Qgc2lsZW50bHkKKyAqIHB1c2gg QlVGX1JFRkJJVCB1cCBpbnRvIHRoZSBmbGFnIGJpdHMuCisgKi8KK1N0YXRpY0Fzc2VydERl Y2woQlVGX1VTQUdFQ09VTlRfQklUUyA+PSAyLAorCQkJCSAiY29vbGluZyBzdGF0ZSArIHJl ZmVyZW5jZSBiaXQgbmVlZCBhdCBsZWFzdCAyIGJpdHMgaW4gdGhlIHVzYWdlY291bnQgZmll bGQiKTsKKwogLyogZmxhZ3MgcmVsYXRlZCBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBCVUZf RkxBR19TSElGVCBcCiAJKEJVRl9SRUZDT1VOVF9CSVRTICsgQlVGX1VTQUdFQ09VTlRfQklU UykKQEAgLTkyLDYgKzEzNiwxMSBAQCBTdGF0aWNBc3NlcnREZWNsKEJVRl9SRUZDT1VOVF9C SVRTICsgQlVGX1VTQUdFQ09VTlRfQklUUyArIEJVRl9GTEFHX0JJVFMgKyBCVUZfTAogI2Rl ZmluZSBCVUZfU1RBVEVfR0VUX1VTQUdFQ09VTlQoc3RhdGUpIFwKIAkoKHVpbnQzMikoKChz dGF0ZSkgJiBCVUZfVVNBR0VDT1VOVF9NQVNLKSA+PiBCVUZfVVNBR0VDT1VOVF9TSElGVCkp CiAKKy8qIENvb2xpbmcgc3RhdGUgKEhPVC9DT09MKSBmcm9tIGJ1ZmZlciBzdGF0ZSAtLSBi aXQgMCBvZiB0aGUgZmllbGQgb25seSwgc28KKyAqIHRoZSBzZWNvbmQtY2hhbmNlIHJlZiBi aXQgKGJpdCAxKSBkb2VzIG5vdCBwZXJ0dXJiIHRoZSBIT1QvQ09PTCB0ZXN0LiAqLworI2Rl ZmluZSBCVUZfU1RBVEVfR0VUX0NPT0xTVEFURShzdGF0ZSkgXAorCSgodWludDMyKSAoKChz dGF0ZSkgPj4gQlVGX1VTQUdFQ09VTlRfU0hJRlQpICYgMSkpCisKIC8qCiAgKiBGbGFncyBm b3IgYnVmZmVyIGRlc2NyaXB0b3JzCiAgKgpAQCAtMTM0LDE3ICsxODMsMTUgQEAgU3RhdGlj QXNzZXJ0RGVjbChNQVhfQkFDS0VORFNfQklUUyA8PSAoQlVGX0xPQ0tfQklUUyAtIDIpLAog CiAKIC8qCi0gKiBUaGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlIG9mIHVzYWdlX2NvdW50IHJl cHJlc2VudHMgYSB0cmFkZW9mZiBiZXR3ZWVuCi0gKiBhY2N1cmFjeSBhbmQgc3BlZWQgb2Yg dGhlIGNsb2NrLXN3ZWVwIGJ1ZmZlciBtYW5hZ2VtZW50IGFsZ29yaXRobS4gIEEKLSAqIGxh cmdlIHZhbHVlIChjb21wYXJhYmxlIHRvIE5CdWZmZXJzKSB3b3VsZCBhcHByb3hpbWF0ZSBM UlUgc2VtYW50aWNzLgotICogQnV0IGl0IGNhbiB0YWtlIGFzIG1hbnkgYXMgQk1fTUFYX1VT QUdFX0NPVU5UKzEgY29tcGxldGUgY3ljbGVzIG9mIHRoZQotICogY2xvY2stc3dlZXAgaGFu ZCB0byBmaW5kIGEgZnJlZSBidWZmZXIsIHNvIGluIHByYWN0aWNlIHdlIGRvbid0IHdhbnQg dGhlCi0gKiB2YWx1ZSB0byBiZSB2ZXJ5IGxhcmdlLgorICogVGhlIGNvb2xpbmcgc3RhdGUg aXMgYSBzaW5nbGUgYml0IChIT1QvQ09PTCk7IHRoZSBtYXhpbXVtIHZhbHVlIHN0b3JlZCBp bgorICogdGhlIGZpZWxkIGlzIHRoZXJlZm9yZSBCVUZfQ09PTFNUQVRFX0hPVC4gIFJldGFp bmVkIHVuZGVyIHRoZSBoaXN0b3JpY2FsCisgKiBuYW1lIEJNX01BWF9VU0FHRV9DT1VOVCBz byB0aGUgcGluIGZhc3QgcGF0aCAoInByb21vdGUgdW5sZXNzIGFscmVhZHkgYXQKKyAqIG1h eCIpIHJlYWRzIG5hdHVyYWxseS4KICAqLwotI2RlZmluZSBCTV9NQVhfVVNBR0VfQ09VTlQJ NQorI2RlZmluZSBCTV9NQVhfVVNBR0VfQ09VTlQJQlVGX0NPT0xTVEFURV9IT1QKIAogU3Rh dGljQXNzZXJ0RGVjbChCTV9NQVhfVVNBR0VfQ09VTlQgPCAoVUlOVDY0Q09OU1QoMSkgPDwg QlVGX1VTQUdFQ09VTlRfQklUUyksCi0JCQkJICJCTV9NQVhfVVNBR0VfQ09VTlQgZG9lc24n dCBmaXQgaW4gQlVGX1VTQUdFQ09VTlRfQklUUyBiaXRzIik7CisJCQkJICJjb29saW5nIHN0 YXRlIGRvZXNuJ3QgZml0IGluIEJVRl9VU0FHRUNPVU5UX0JJVFMgYml0cyIpOwogCiAvKgog ICogQnVmZmVyIHRhZyBpZGVudGlmaWVzIHdoaWNoIGRpc2sgYmxvY2sgdGhlIGJ1ZmZlciBj b250YWlucy4KLS0gCjIuNTAuMQoK --b0368e5f6d7bb60c8e141b9111b3c49c0f1bd768 Content-Disposition: attachment; filename="repro.tgz_" Content-Type: application/octet-stream; name="repro.tgz_" Content-Transfer-Encoding: base64 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 pV3apV3apV3apV3apV36W6f/AkvmNhAAyAAA --b0368e5f6d7bb60c8e141b9111b3c49c0f1bd768--