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 1uwcjh-005T7N-GF for pgsql-hackers@arkaria.postgresql.org; Thu, 11 Sep 2025 08:32: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 1uwcjf-006YmD-GU for pgsql-hackers@arkaria.postgresql.org; Thu, 11 Sep 2025 08:32: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 1uwcje-006Ym3-Do for pgsql-hackers@lists.postgresql.org; Thu, 11 Sep 2025 08:32:55 +0000 Received: from relay9-d.mail.gandi.net ([217.70.183.199]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1uwcjV-001oGF-2K for pgsql-hackers@lists.postgresql.org; Thu, 11 Sep 2025 08:32:53 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id A2DAB431FB; Thu, 11 Sep 2025 08:32:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vondra.me; s=gm1; t=1757579562; 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=PO5W5nSsXLu0ufLAIQd2ahav6Nz1zF7DAK9VL3aEzuo=; b=WN1vtU52bV/d1+uAJ3zI3cd3F87ROdzzs+mJItdZ9We5IzuSp6nlc41/BRHpwbFYPDcN0k EuXe69gnMuzb016WL1o3yU73rTlh/2FwvPxZHPz2RyvyqYbhUVhEnuxwiwV8tmiabbOpYE tsGDiRs3/whz8oIftd5TYTbO+IS8UIQItdJJ/Gf76F6JmNmuPdPbC+5SKJzu7Gx40/fMb4 NNSaFq7AY87jAynqtAZA8fR9KFBumL04LZddEky74NOHxaSZIQL5HVVVM3PnJHWAxW5hSq y1KFmHs7mw+pYCzitt72TFdwB10IwSUgjzJ5fTUDPagcX97OfIzqKQZS8owTjg== Content-Type: multipart/mixed; boundary="------------i0MMC9nLNSRCyrH3GSEb0aRu" Message-ID: <6636d842-e8a5-44bc-a206-6df415380a7b@vondra.me> Date: Thu, 11 Sep 2025 10:32:40 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Adding basic NUMA awareness From: Tomas Vondra To: Andres Freund Cc: Jakub Wartak , PostgreSQL Hackers 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> Content-Language: en-US In-Reply-To: <874435bd-5e25-4a7c-a5d5-8ef0c262d788@vondra.me> X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddvheeilecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfitefpfffkpdcuggftfghnshhusghstghrihgsvgenuceurghilhhouhhtmecufedtudenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurheptgfkffggfgfuhffvvehfjgesmhdtreertddvjeenucfhrhhomhepvfhomhgrshcugghonhgurhgruceothhomhgrshesvhhonhgurhgrrdhmvgeqnecuggftrfgrthhtvghrnhepteehgedugeeigedviedtgeekteeitdehleevffeggffguedvudeuffeluedvveeunecukfhppeekgedrvddujedrkedurddukeelnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepkeegrddvudejrdekuddrudekledphhgvlhhopegluddtrddufeejrddtrddukegnpdhmrghilhhfrhhomhepthhomhgrshesvhhonhgurhgrrdhmvgdpnhgspghrtghpthhtohepfedprhgtphhtthhopegrnhgurhgvshesrghnrghrrgiivghlrdguvgdprhgtphhtthhopehjrghkuhgsrdifrghrthgrkhesvghnthgvrhhprhhishgvuggsrdgtohhmpdhrtghpthhtohepphhgshhqlhdqhhgrtghkvghrsheslhhishhtshdrphhoshhtghhrvghsqhhlrdhorhhg 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. --------------i0MMC9nLNSRCyrH3GSEb0aRu Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, Here's a fresh version of the NUMA patch series. There's a number of substantial improvements: 1) Rebase to current master, particularly on top of 2c7894052759 which removed the freelist. The patch that partitioned the freelist is gone. 2) A bunch of fixes, and it now passes CI workflows on github, and all other testing I did. Of course, more testing is needed. 3) It builds with/without libnuma support, and so on. 4) The separate GUCs were replaced by a single list GUC, similar to what we do for debug_io_direct. The GUC is called debug_numa, and accepts "buffets" and "procs", to partition the two areas. I'm considering adding a "clock-sweep" option in a future patch. I didn't do that here, because the buffer partitioning is already enabled by "buffers", and the clock-sweep just builds on that (partitioning the same way, pretty much). 5) It also works with EXEC_BACKEND, but this turned out to be a bit more challenging than expected. The trouble is some of the parameters (e.g. memory page size) are used both in the "size" and "init" phases, and we need to be extra careful to not make something "inconsistent". For example, we may get confused about the memory page size. The "size" happens before allocation, and at that point we don't know if we succeed in getting enough huge pages. When "init" happens, we already know that, so our "memory page size" could be different. We must be careful, e.g. to not need more memory than we requested. This is a general problem, but the EXEC_BACKEND makes it a bit trickier. In regular fork() case we can simply set some global variables in "size" and use them later in "init", but that doesn't work for EXEC_BACKEND. The current approach simply does the calculations twice, in a way that should end with the same results. But I'm not 100% happy with it, and I suspect it just confirms we should store the results in shmem memory (which is what I called "NUMA registry" before). That's still a TODO. 6) BufferDescPadded is 64B everywhere. Originally, the padding was applied only on 64-bit platforms, and on 32-bit systems the struct was left at 60B. But that is not compatible with buffer partitioning, which relies on the memory page being a multiple of BufferDescPadded. Perhaps it could be relaxed (so that a BufferDesc might span two memory pages), but this seems like the cleanes solution. I don't expect it to make any measurable difference. 7) I've moved some of the code to BgBufferSyncPartition, to make review easier (without all the indentation changes). 8) I've realized some of the TAP tests occasionally fail with ERROR: no unpinned buffers and I think I know why. Some of the tests set shared_buffers to a very low value - like 1MB or even 128kB, and StrategyGetBuffer() may search only a single partition (but not always). We may run out of unpinned buffers in that one partition. This apparently happens more easily on rpi5, due to the weird NUMA layout (there are 8 nodes with memory, but getcpu() reports node 0 for all cores). I suspect the correct fix is to ensure StrategyGetBuffer() scans all partitions, if there are no unpinned buffers in the current one. On realistic setups this shouldn't happen very often, I think. The other issue I just realized is that StrategyGetBuffer() recalculates the partition index over and over, which seems unnecessary (and possibly expensive, due to the modulo). And it also does too many loops, because it used NBuffers instead of the partition size. I'll fix those later. 9) I'm keeping the cloc-sweep balancing patches separate for now. In the end all the clock-sweep patches should be merged, but it keeps the changes easier to review this way, I think. 10) There's not many changes in the PGPROC partitioning patch. I merely fixed issues that broke it on EXEC_BACKEND, and did some smaller tweaks. 11) I'm not including the experimental patches to pin backends to CPUs (or nodes), and so on. It's clear those are unlikely to go in, so it'd be just a distraction. 12) What's the right / portable way to determine the current CPU for a process? The clock-sweep / PGPROC patches need this to pick the right partition, but it's not clear to me which API is the most portable. In the end I used sched_getcpu(), and then numa_node_of_cpu(), but maybe there's a better way. regards -- Tomas Vondra --------------i0MMC9nLNSRCyrH3GSEb0aRu Content-Type: text/x-patch; charset=UTF-8; name="v20250911-0001-NUMA-shared-buffers-partitioning.patch" Content-Disposition: attachment; filename="v20250911-0001-NUMA-shared-buffers-partitioning.patch" Content-Transfer-Encoding: base64 RnJvbSAzMThmMjQ0MWNjNjdkYWY3ZmIyYmE2NzI5MDBhMmJkNGRmZGVhMTcwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogTW9uLCAyOCBKdWwgMjAyNSAxNDowMTozNyArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUwOTExIDEvOF0gTlVNQTogc2hhcmVkIGJ1ZmZlcnMgcGFydGl0aW9uaW5nCgpFbnN1 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 IChhZ2FpbiwgMiBwZXIgbm9kZSkuCgpUaGlzIGFsbG93cyBwYXJ0aXRpb25pbmcgY2xvY2st c3dlZXAgaW4gYSBsYXRlciBwYXRjaCwgd2l0aCBvbmUgY2xvY2sKaGFuZCBwZXIgcGFydGl0 aW9uLgoKVGhlIHBhdGNoIGludHJvZHVjZXMgYSBzaW1wbGUgInJlZ2lzdHJ5IiBvZiBidWZm ZXIgcGFydGl0aW9ucywga2VlcGluZwp0cmFjayBvZiB0aGUgZmlyc3QvbGFzdCBidWZmZXIs IE5VTUEgbm9kZSwgZXRjLiBUaGlzIHNlcnZlcyBhcyBhIHNvdXJjZQpvZiB0cnV0aCwgYm90 aCBmb3IgdGhpcyBwYXRjaCBhbmQgZm9yIGxhdGVyIHBhdGNoZXMgYnVpbGRpbmcgb24gdGhp cwpzYW1lIGJ1ZmZlciBwYXJ0aXRpb24gc3RydWN0dXJlLgoKV2l0aCB0aGUgZmVhdHVyZSBk aXNhYmxlZCAoR1VDIHNldCB0byBlbXB0eSBsaXN0KSwgdGhlcmUnbGwgYmUgYSBzaW5nbGUK cGFydGl0aW9uIGZvciBhbGwgdGhlIGJ1ZmZlcnMgKGFuZCBpdCB3b24ndCBiZSBtYXBwZWQg dG8gYSBOVU1BIG5vZGUpLgoKTm90ZXM6CgoqIFRoZSBmZWF0dXJlIGlzIGVuYWJsZWQgYnkg ZGVidWdfbnVtYSA9IGJ1ZmZlcnMgR1VDIChkZWZhdWx0OiBlbXB0eSksCiAgd2hpY2ggd29y a3Mgc2ltaWxhcmx5IHRvIGRlYnVnX2lvX2RpcmVjdC4KCiogVGhpcyBwYXRjaCBwYXJ0aXRp b25zIGp1c3Qgc2hhcmVkIGJ1ZmZlcnMsIG5vdCB0aGUgd2hvbGUgc2hhcmVkCiAgbWVtb3J5 LiBBIGxhdGVyIHBhdGNoIHdpbGwgZG8gdGhhdCBmb3IgUEdQUk9DLCBidXQgaXQncyB0cmlj a3kgYW5kCiAgcmVxdWlyZXMgYSBkaWZmZXJlbnQgYXBwcm9hY2ggYmVjYXVzZSBvZiBodWdl IHBhZ2VzLgotLS0KIGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUvTWFrZWZpbGUgICAgICAgICAg ICAgICB8ICAgMiArLQogY29udHJpYi9wZ19idWZmZXJjYWNoZS9tZXNvbi5idWlsZCAgICAg ICAgICAgIHwgICAxICsKIC4uLi9wZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsICAgICAg ICAgICAgICB8ICAyNiArCiBjb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hl LmNvbnRyb2wgfCAgIDIgKy0KIGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2Fj aGVfcGFnZXMuYyB8ICA5MiArKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9p bml0LmMgICAgICAgICB8IDYyNyArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0ICAgICB8ICAxMCArCiBzcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Y190YWJsZXMuYyAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUv cG9ydC9wZ19udW1hLmggICAgICAgICAgICAgICAgICAgIHwgICA2ICsKIHNyYy9pbmNsdWRl L3N0b3JhZ2UvYnVmX2ludGVybmFscy5oICAgICAgICAgICB8ICAxNiArLQogc3JjL2luY2x1 ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAgICAgICAgICAgICAgIHwgIDIzICsKIHNyYy9pbmNs dWRlL3V0aWxzL2d1Y19ob29rcy5oICAgICAgICAgICAgICAgICB8ICAgMyArCiBzcmMvcG9y dC9wZ19udW1hLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNjQgKysKIHNyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMiArCiAxNCBm aWxlcyBjaGFuZ2VkLCA4NTkgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0t MS42LS0xLjcuc3FsCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9NYWtl ZmlsZSBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvTWFrZWZpbGUKaW5kZXggNWY3NDg1NDNl MmUuLjBlNjE4ZjY2YWVjIDEwMDY0NAotLS0gYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL01h a2VmaWxlCisrKyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvTWFrZWZpbGUKQEAgLTksNyAr OSw3IEBAIEVYVEVOU0lPTiA9IHBnX2J1ZmZlcmNhY2hlCiBEQVRBID0gcGdfYnVmZmVyY2Fj aGUtLTEuMi5zcWwgcGdfYnVmZmVyY2FjaGUtLTEuMi0tMS4zLnNxbCBcCiAJcGdfYnVmZmVy Y2FjaGUtLTEuMS0tMS4yLnNxbCBwZ19idWZmZXJjYWNoZS0tMS4wLS0xLjEuc3FsIFwKIAlw Z19idWZmZXJjYWNoZS0tMS4zLS0xLjQuc3FsIHBnX2J1ZmZlcmNhY2hlLS0xLjQtLTEuNS5z cWwgXAotCXBnX2J1ZmZlcmNhY2hlLS0xLjUtLTEuNi5zcWwKKwlwZ19idWZmZXJjYWNoZS0t MS41LS0xLjYuc3FsIHBnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwKIFBHRklMRURFU0Mg PSAicGdfYnVmZmVyY2FjaGUgLSBtb25pdG9yaW5nIG9mIHNoYXJlZCBidWZmZXIgY2FjaGUg aW4gcmVhbC10aW1lIgogCiBSRUdSRVNTID0gcGdfYnVmZmVyY2FjaGUgcGdfYnVmZmVyY2Fj aGVfbnVtYQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9tZXNvbi5idWls ZCBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvbWVzb24uYnVpbGQKaW5kZXggN2NkMDM5YTFk ZjkuLjdjMzExNDE4ODFmIDEwMDY0NAotLS0gYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL21l c29uLmJ1aWxkCisrKyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvbWVzb24uYnVpbGQKQEAg LTI0LDYgKzI0LDcgQEAgaW5zdGFsbF9kYXRhKAogICAncGdfYnVmZmVyY2FjaGUtLTEuMy0t MS40LnNxbCcsCiAgICdwZ19idWZmZXJjYWNoZS0tMS40LS0xLjUuc3FsJywKICAgJ3BnX2J1 ZmZlcmNhY2hlLS0xLjUtLTEuNi5zcWwnLAorICAncGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43 LnNxbCcsCiAgICdwZ19idWZmZXJjYWNoZS5jb250cm9sJywKICAga3dhcmdzOiBjb250cmli X2RhdGFfYXJncywKICkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdf YnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbCBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdf YnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uZmI5MDAzYzAxMWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3Bn X2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwKQEAgLTAsMCArMSwy NiBAQAorLyogY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS42LS0x Ljcuc3FsICovCisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWws IHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNobyBVc2UgIkFMVEVSIEVY VEVOU0lPTiBwZ19idWZmZXJjYWNoZSBVUERBVEUgVE8gJzEuNyciIHRvIGxvYWQgdGhpcyBm aWxlLiBccXVpdAorCistLSBSZWdpc3RlciB0aGUgbmV3IGZ1bmN0aW9ucy4KK0NSRUFURSBP UiBSRVBMQUNFIEZVTkNUSU9OIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoKQorUkVUVVJO UyBTRVRPRiBSRUNPUkQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfYnVmZmVyY2FjaGVf cGFydGl0aW9ucycKK0xBTkdVQUdFIEMgUEFSQUxMRUwgU0FGRTsKKworLS0gQ3JlYXRlIGEg dmlldyBmb3IgY29udmVuaWVudCBhY2Nlc3MuCitDUkVBVEUgVklFVyBwZ19idWZmZXJjYWNo ZV9wYXJ0aXRpb25zIEFTCisJU0VMRUNUIFAuKiBGUk9NIHBnX2J1ZmZlcmNhY2hlX3BhcnRp dGlvbnMoKSBBUyBQCisJKHBhcnRpdGlvbiBpbnRlZ2VyLAkJCS0tIHBhcnRpdGlvbiBpbmRl eAorCSBudW1hX25vZGUgaW50ZWdlciwJCQktLSBOVU1BIG5vZGUgb2YgdGhlIHBhcnRpdGlv b24KKwkgbnVtX2J1ZmZlcnMgaW50ZWdlciwJCS0tIG51bWJlciBvZiBidWZmZXJzIGluIHRo ZSBwYXJ0aXRpb24KKwkgZmlyc3RfYnVmZmVyIGludGVnZXIsCQktLSBmaXJzdCBidWZmZXIg b2YgcGFydGl0aW9uCisJIGxhc3RfYnVmZmVyIGludGVnZXIpOwkJLS0gbGFzdCBidWZmZXIg b2YgcGFydGl0aW9uCisKKy0tIERvbid0IHdhbnQgdGhlc2UgdG8gYmUgYXZhaWxhYmxlIHRv IHB1YmxpYy4KK1JFVk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfYnVmZmVyY2FjaGVfcGFydGl0 aW9ucygpIEZST00gUFVCTElDOworUkVWT0tFIEFMTCBPTiBwZ19idWZmZXJjYWNoZV9wYXJ0 aXRpb25zIEZST00gUFVCTElDOworCitHUkFOVCBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2J1 ZmZlcmNhY2hlX3BhcnRpdGlvbnMoKSBUTyBwZ19tb25pdG9yOworR1JBTlQgU0VMRUNUIE9O IHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMgVE8gcGdfbW9uaXRvcjsKZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUuY29udHJvbCBiL2NvbnRy aWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUuY29udHJvbAppbmRleCBiMDMwYmEz YTZmYS4uMTE0OTk1NTA5NDUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUv cGdfYnVmZmVyY2FjaGUuY29udHJvbAorKysgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3Bn X2J1ZmZlcmNhY2hlLmNvbnRyb2wKQEAgLTEsNSArMSw1IEBACiAjIHBnX2J1ZmZlcmNhY2hl IGV4dGVuc2lvbgogY29tbWVudCA9ICdleGFtaW5lIHRoZSBzaGFyZWQgYnVmZmVyIGNhY2hl JwotZGVmYXVsdF92ZXJzaW9uID0gJzEuNicKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjcnCiBt b2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci9wZ19idWZmZXJjYWNoZScKIHJlbG9jYXRhYmxl ID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJj YWNoZV9wYWdlcy5jIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9w YWdlcy5jCmluZGV4IDNkZjA0Yzk4OTU5Li44YTBhNGJkNWNkNiAxMDA2NDQKLS0tIGEvY29u dHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jCisrKyBiL2NvbnRy aWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYwpAQCAtMjcsNiArMjcs NyBAQAogI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfRVZJQ1RfQUxMX0VMRU0gMwogCiAjZGVm aW5lIE5VTV9CVUZGRVJDQUNIRV9OVU1BX0VMRU0JMworI2RlZmluZSBOVU1fQlVGRkVSQ0FD SEVfUEFSVElUSU9OU19FTEVNCTUKIAogUEdfTU9EVUxFX01BR0lDX0VYVCgKIAkJCQkJLm5h bWUgPSAicGdfYnVmZmVyY2FjaGUiLApAQCAtMTAwLDYgKzEwMSw3IEBAIFBHX0ZVTkNUSU9O X0lORk9fVjEocGdfYnVmZmVyY2FjaGVfdXNhZ2VfY291bnRzKTsKIFBHX0ZVTkNUSU9OX0lO Rk9fVjEocGdfYnVmZmVyY2FjaGVfZXZpY3QpOwogUEdfRlVOQ1RJT05fSU5GT19WMShwZ19i dWZmZXJjYWNoZV9ldmljdF9yZWxhdGlvbik7CiBQR19GVU5DVElPTl9JTkZPX1YxKHBnX2J1 ZmZlcmNhY2hlX2V2aWN0X2FsbCk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2J1ZmZlcmNh Y2hlX3BhcnRpdGlvbnMpOwogCiAKIC8qIE9ubHkgbmVlZCB0byB0b3VjaCBtZW1vcnkgb25j ZSBwZXIgYmFja2VuZCBwcm9jZXNzIGxpZmV0aW1lICovCkBAIC03NzcsMyArNzc5LDkzIEBA IHBnX2J1ZmZlcmNhY2hlX2V2aWN0X2FsbChQR19GVU5DVElPTl9BUkdTKQogCiAJUEdfUkVU VVJOX0RBVFVNKHJlc3VsdCk7CiB9CisKKy8qCisgKiBJbnF1aXJlIGFib3V0IHBhcnRpdGlv bmluZyBvZiBidWZmZXJzIGJldHdlZW4gTlVNQSBub2Rlcy4KKyAqLworRGF0dW0KK3BnX2J1 ZmZlcmNhY2hlX3BhcnRpdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlGdW5jQ2FsbENv bnRleHQgKmZ1bmNjdHg7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCVR1cGxlRGVz Ywl0dXBsZWRlc2M7CisJVHVwbGVEZXNjCWV4cGVjdGVkX3R1cGxlZGVzYzsKKwlIZWFwVHVw bGUJdHVwbGU7CisJRGF0dW0JCXJlc3VsdDsKKworCWlmIChTUkZfSVNfRklSU1RDQUxMKCkp CisJeworCQlmdW5jY3R4ID0gU1JGX0ZJUlNUQ0FMTF9JTklUKCk7CisKKwkJLyogU3dpdGNo IGNvbnRleHQgd2hlbiBhbGxvY2F0aW5nIHN0dWZmIHRvIGJlIHVzZWQgaW4gbGF0ZXIgY2Fs bHMgKi8KKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5t dWx0aV9jYWxsX21lbW9yeV9jdHgpOworCisJCWlmIChnZXRfY2FsbF9yZXN1bHRfdHlwZShm Y2luZm8sIE5VTEwsICZleHBlY3RlZF90dXBsZWRlc2MpICE9IFRZUEVGVU5DX0NPTVBPU0lU RSkKKwkJCWVsb2coRVJST1IsICJyZXR1cm4gdHlwZSBtdXN0IGJlIGEgcm93IHR5cGUiKTsK KworCQlpZiAoZXhwZWN0ZWRfdHVwbGVkZXNjLT5uYXR0cyAhPSBOVU1fQlVGRkVSQ0FDSEVf UEFSVElUSU9OU19FTEVNKQorCQkJZWxvZyhFUlJPUiwgImluY29ycmVjdCBudW1iZXIgb2Yg b3V0cHV0IGFyZ3VtZW50cyIpOworCisJCS8qIENvbnN0cnVjdCBhIHR1cGxlIGRlc2NyaXB0 b3IgZm9yIHRoZSByZXN1bHQgcm93cy4gKi8KKwkJdHVwbGVkZXNjID0gQ3JlYXRlVGVtcGxh dGVUdXBsZURlc2MoZXhwZWN0ZWRfdHVwbGVkZXNjLT5uYXR0cyk7CisJCVR1cGxlRGVzY0lu aXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSAxLCAicGFydGl0aW9uIiwKKwkJCQkJ CSAgIElOVDRPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywg KEF0dHJOdW1iZXIpIDIsICJudW1hX25vZGUiLAorCQkJCQkJICAgSU5UNE9JRCwgLTEsIDAp OworCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgMywgIm51 bV9idWZmZXJzIiwKKwkJCQkJCSAgIElOVDRPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5p dEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDQsICJmaXJzdF9idWZmZXIiLAorCQkJ CQkJICAgSU5UNE9JRCwgLTEsIDApOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNj LCAoQXR0ck51bWJlcikgNSwgImxhc3RfYnVmZmVyIiwKKwkJCQkJCSAgIElOVDRPSUQsIC0x LCAwKTsKKworCQlmdW5jY3R4LT51c2VyX2ZjdHggPSBCbGVzc1R1cGxlRGVzYyh0dXBsZWRl c2MpOworCisJCS8qIFJldHVybiB0byBvcmlnaW5hbCBjb250ZXh0IHdoZW4gYWxsb2NhdGlu ZyB0cmFuc2llbnQgbWVtb3J5ICovCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250 ZXh0KTsKKworCQkvKiBTZXQgbWF4IGNhbGxzIGFuZCByZW1lbWJlciB0aGUgdXNlciBmdW5j dGlvbiBjb250ZXh0LiAqLworCQlmdW5jY3R4LT5tYXhfY2FsbHMgPSBCdWZmZXJQYXJ0aXRp b25Db3VudCgpOworCX0KKworCWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRVUCgpOworCisJ aWYgKGZ1bmNjdHgtPmNhbGxfY250ciA8IGZ1bmNjdHgtPm1heF9jYWxscykKKwl7CisJCXVp bnQzMgkJaSA9IGZ1bmNjdHgtPmNhbGxfY250cjsKKworCQlpbnQJCQludW1hX25vZGUsCisJ CQkJCW51bV9idWZmZXJzLAorCQkJCQlmaXJzdF9idWZmZXIsCisJCQkJCWxhc3RfYnVmZmVy OworCisJCURhdHVtCQl2YWx1ZXNbTlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTV07 CisJCWJvb2wJCW51bGxzW05VTV9CVUZGRVJDQUNIRV9QQVJUSVRJT05TX0VMRU1dOworCisJ CUJ1ZmZlclBhcnRpdGlvbkdldChpLCAmbnVtYV9ub2RlLCAmbnVtX2J1ZmZlcnMsCisJCQkJ CQkgICAmZmlyc3RfYnVmZmVyLCAmbGFzdF9idWZmZXIpOworCisJCXZhbHVlc1swXSA9IElu dDMyR2V0RGF0dW0oaSk7CisJCW51bGxzWzBdID0gZmFsc2U7CisKKwkJdmFsdWVzWzFdID0g SW50MzJHZXREYXR1bShudW1hX25vZGUpOworCQludWxsc1sxXSA9IGZhbHNlOworCisJCXZh bHVlc1syXSA9IEludDMyR2V0RGF0dW0obnVtX2J1ZmZlcnMpOworCQludWxsc1syXSA9IGZh bHNlOworCisJCXZhbHVlc1szXSA9IEludDMyR2V0RGF0dW0oZmlyc3RfYnVmZmVyKTsKKwkJ bnVsbHNbM10gPSBmYWxzZTsKKworCQl2YWx1ZXNbNF0gPSBJbnQzMkdldERhdHVtKGxhc3Rf YnVmZmVyKTsKKwkJbnVsbHNbNF0gPSBmYWxzZTsKKworCQkvKiBCdWlsZCBhbmQgcmV0dXJu IHRoZSB0dXBsZS4gKi8KKwkJdHVwbGUgPSBoZWFwX2Zvcm1fdHVwbGUoKFR1cGxlRGVzYykg ZnVuY2N0eC0+dXNlcl9mY3R4LCB2YWx1ZXMsIG51bGxzKTsKKwkJcmVzdWx0ID0gSGVhcFR1 cGxlR2V0RGF0dW0odHVwbGUpOworCisJCVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4LCByZXN1 bHQpOworCX0KKwllbHNlCisJCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCmluZGV4IDZmZDNhNmJiYWM1Li5mNTFj N2RiNzg1NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2lu aXQuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCkBAIC0x NCw5ICsxNCwyMCBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2lmZGVmIFVT RV9MSUJOVU1BCisjaW5jbHVkZSA8bnVtYS5oPgorI2luY2x1ZGUgPG51bWFpZi5oPgorI2Vu ZGlmCisKKyNpbmNsdWRlICJwb3J0L3BnX251bWEuaCIKICNpbmNsdWRlICJzdG9yYWdlL2Fp by5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmX2ludGVybmFscy5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wZ19zaG1lbS5oIgorI2luY2x1 ZGUgInN0b3JhZ2UvcHJvYy5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1ZGUg InV0aWxzL2d1Y19ob29rcy5oIgorI2luY2x1ZGUgInV0aWxzL3ZhcmxlbmEuaCIKIAogQnVm ZmVyRGVzY1BhZGRlZCAqQnVmZmVyRGVzY3JpcHRvcnM7CiBjaGFyCSAgICpCdWZmZXJCbG9j a3M7CkBAIC0yNCw2ICszNSwyMyBAQCBDb25kaXRpb25WYXJpYWJsZU1pbmltYWxseVBhZGRl ZCAqQnVmZmVySU9DVkFycmF5OwogV3JpdGViYWNrQ29udGV4dCBCYWNrZW5kV3JpdGViYWNr Q29udGV4dDsKIENrcHRTb3J0SXRlbSAqQ2twdEJ1ZmZlcklkczsKIAorLyoKKyAqIE1pbmlt dW0gbnVtYmVyIG9mIGJ1ZmZlciBwYXJ0aXRpb25zLCBubyBtYXR0ZXIgdGhlIG51bWJlciBv ZiBOVU1BIG5vZGVzLgorICovCisjZGVmaW5lIE1JTl9CVUZGRVJfUEFSVElUSU9OUwk0CisK Ky8qIEFycmF5IG9mIHN0cnVjdHMgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBidWZmZXIgcmFu Z2VzICovCitCdWZmZXJQYXJ0aXRpb25zICpCdWZmZXJQYXJ0aXRpb25zQXJyYXkgPSBOVUxM OworCitzdGF0aWMgdm9pZCBidWZmZXJfcGFydGl0aW9uc19wcmVwYXJlKHZvaWQpOworc3Rh dGljIHZvaWQgYnVmZmVyX3BhcnRpdGlvbnNfaW5pdCh2b2lkKTsKKworLyogbnVtYmVyIG9m IE5VTUEgbm9kZXMgKGFzIHJldHVybmVkIGJ5IG51bWFfbnVtX2NvbmZpZ3VyZWRfbm9kZXMp ICovCitzdGF0aWMgaW50CW51bWFfbm9kZXMgPSAtMTsJLyogbnVtYmVyIG9mIG5vZGVzIHdo ZW4gc2l6aW5nICovCitzdGF0aWMgU2l6ZSBudW1hX3BhZ2Vfc2l6ZSA9IDA7IC8qIHBhZ2Ug dXNlZCB0byBzaXplIHBhcnRpdGlvbnMgKi8KK3N0YXRpYyBib29sIG51bWFfY2FuX3BhcnRp dGlvbiA9IGZhbHNlOyAvKiBjYW4gbWFwIHRvIE5VTUEgbm9kZXM/ICovCitzdGF0aWMgaW50 CW51bWFfYnVmZmVyc19wZXJfbm9kZSA9IC0xOyAvKiBidWZmZXJzIHBlciBub2RlICovCitz dGF0aWMgaW50CW51bWFfcGFydGl0aW9ucyA9IDA7CS8qIHRvdGFsIChtdWx0aXBsZSBvZiBu b2RlcykgKi8KIAogLyoKICAqIERhdGEgU3RydWN0dXJlczoKQEAgLTcwLDE5ICs5OCw4NyBA QCBCdWZmZXJNYW5hZ2VyU2htZW1Jbml0KHZvaWQpCiAJYm9vbAkJZm91bmRCdWZzLAogCQkJ CWZvdW5kRGVzY3MsCiAJCQkJZm91bmRJT0NWLAotCQkJCWZvdW5kQnVmQ2twdDsKKwkJCQlm b3VuZEJ1ZkNrcHQsCisJCQkJZm91bmRQYXJ0czsKKwlTaXplCQlidWZmZXJfYWxpZ247CisK KwkvKgorCSAqIERldGVybWluZSB0aGUgbWVtb3J5IHBhZ2Ugc2l6ZSB1c2VkIHRvIHBhcnRp dGlvbiBzaGFyZWQgYnVmZmVycyBvdmVyCisJICogdGhlIGF2YWlsYWJsZSBOVU1BIG5vZGVz LgorCSAqCisJICogWFhYIFdlIGhhdmUgdG8gY2FsbCBwcmVwYXJlIGFnYWluLCBiZWNhdXNl IHdpdGggRVhFQ19CQUNLRU5EIHdlIG1heSBub3QKKwkgKiBzZWUgdGhlIHZhbHVlcyBhbHJl YWR5IGNhbGN1bGF0ZWQgaW4gQnVmZmVyTWFuYWdlclNobWVtU2l6ZSgpLgorCSAqCisJICog WFhYIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBnZXQgdGhlIHNhbWUgdmFsdWUgd2hlbiBj YWxjdWxhdGluZyB0aGUKKwkgKiBhbmQgdGhlbiBsYXRlciB3aGVuIGluaXRpYWxpemluZyB0 aGUgc3RydWN0cyBhZnRlciBhbGxvY2F0aW9uLCBvciB0byBub3QKKwkgKiBkZXBlbmQgb24g dGhhdCB2YWx1ZSB0b28gbXVjaC4gQmVmb3JlIHRoZSBhbGxvY2F0aW9uIHdlIGRvbid0IGtu b3cgaWYgd2UKKwkgKiBnZXQgaHVnZSBwYWdlcywgc28gd2UganVzdCBoYXZlIHRvIGFzc3Vt ZSB3ZSBkby4KKwkgKi8KKwlidWZmZXJfcGFydGl0aW9uc19wcmVwYXJlKCk7CisKKwkvKgor CSAqIFdpdGggTlVNQSB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgYnVmZmVycyBhcmUgcHJvcGVy bHkgYWxpZ25lZCBub3QganVzdAorCSAqIHRvIFBHX0lPX0FMSUdOX1NJWkUsIGJ1dCBhbHNv IHRvIG1lbW9yeSBwYWdlIHNpemUuIE5VTUEgd29ya3Mgb24gcGFnZQorCSAqIGdyYW51bGFy aXR5LCBhbmQgd2UgZG9uJ3Qgd2FudCBhIGJ1ZmZlciB0byBnZXQgc3BsaXQgdG8gbXVsdGlw bGUgbm9kZXMKKwkgKiAod2hlbiBzcGFubmluZyBtdWx0aXBsZSBtZW1vcnkgcGFnZXMpLgor CSAqCisJICogV2UgYWxzbyBkb24ndCB3YW50IHRvIGludGVyZmVyZSB3aXRoIG90aGVyIHBh cnRzIG9mIHNoYXJlZCBtZW1vcnksCisJICogd2hpY2ggY291bGQgZWFzaWx5IGhhcHBlbiB3 aXRoIGh1Z2UgcGFnZXMgKGUuZy4gd2l0aCBkYXRhIHN0b3JlZCBiZWZvcmUKKwkgKiBidWZm ZXJzKS4KKwkgKgorCSAqIFdlIGRvIHRoaXMgYnkgYWxpZ25pbmcgdG8gdGhlIGxhcmdlciBv ZiB0aGUgdHdvIHZhbHVlcyAod2Uga25vdyBib3RoCisJICogYXJlIHBvd2VyLW9mLXR3byB2 YWx1ZXMsIHNvIHRoZSBsYXJnZXIgdmFsdWUgaXMgYXV0b21hdGljYWxseSBhCisJICogbXVs dGlwbGUgb2YgdGhlIGxlc3NlciBvbmUpLgorCSAqCisJICogWFhYIE1heWJlIHRoZXJlJ3Mg YSB3YXkgdG8gdXNlIGxlc3MgYWxpZ25tZW50PworCSAqCisJICogWFhYIE1heWJlIHdpdGgg KG51bWFfcGFnZV9zaXplID4gUEdfSU9fQUxJR05fU0laRSksIHdlIGRvbid0IG5lZWQgdG8K KwkgKiBhbGlnbiB0byBudW1hX3BhZ2Vfc2l6ZT8gRXNwZWNpYWxseSBmb3IgdmVyeSBsYXJn ZSBodWdlIHBhZ2VzIChlLmcuIDFHQikKKwkgKiB0aGF0IGRvZXNuJ3Qgc2VlbSBxdWl0ZSB3 b3J0aCBpdC4gTWF5YmUgd2Ugc2hvdWxkIHNpbXBseSBhbGlnbiB0bworCSAqIEJMQ0tTWiwg c28gdGhhdCBidWZmZXJzIGRvbid0IGdldCBzcGxpdD8gU3RpbGwsIHdlIG1pZ2h0IGludGVy ZmVyZSB3aXRoCisJICogb3RoZXIgc3R1ZmYgc3RvcmVkIGluIHNoYXJlZCBtZW1vcnkgdGhh dCB3ZSB3YW50IHRvIGFsbG9jYXRlIG9uIGEKKwkgKiBwYXJ0aWN1bGFyIE5VTUEgbm9kZSAo ZS5nLiBQcm9jQXJyYXkpLgorCSAqCisJICogWFhYIE1heWJlIHdpdGggInRvbyBsYXJnZSIg aHVnZSBwYWdlcyB3ZSBzaG91bGQganVzdCBub3QgZG8gdGhpcywgb3IKKwkgKiBtYXliZSBk byB0aGlzIG9ubHkgZm9yIHN1ZmZpY2llbnRseSBsYXJnZSBhcmVhcyAoZS5nLiBzaGFyZWQg YnVmZmVycywKKwkgKiBidXQgbm90IFByb2NBcnJheSkuCisJICovCisJYnVmZmVyX2FsaWdu ID0gTWF4KG51bWFfcGFnZV9zaXplLCBQR19JT19BTElHTl9TSVpFKTsKKworCS8qIG9uZSBw YWdlIGlzIGEgbXVsdGlwbGUgb2YgdGhlIG90aGVyICovCisJQXNzZXJ0KCgobnVtYV9wYWdl X3NpemUgJSBQR19JT19BTElHTl9TSVpFKSA9PSAwKSB8fAorCQkgICAoKFBHX0lPX0FMSUdO X1NJWkUgJSBudW1hX3BhZ2Vfc2l6ZSkgPT0gMCkpOwogCi0JLyogQWxpZ24gZGVzY3JpcHRv cnMgdG8gYSBjYWNoZWxpbmUgYm91bmRhcnkuICovCisJLyogYWxsb2NhdGUgdGhlIHBhcnRp dGlvbiByZWdpc3RyeSBmaXJzdCAqLworCUJ1ZmZlclBhcnRpdGlvbnNBcnJheSA9IChCdWZm ZXJQYXJ0aXRpb25zICopCisJCVNobWVtSW5pdFN0cnVjdCgiQnVmZmVyIFBhcnRpdGlvbnMi LAorCQkJCQkJb2Zmc2V0b2YoQnVmZmVyUGFydGl0aW9ucywgcGFydGl0aW9ucykgKworCQkJ CQkJbXVsX3NpemUoc2l6ZW9mKEJ1ZmZlclBhcnRpdGlvbiksIG51bWFfcGFydGl0aW9ucyks CisJCQkJCQkmZm91bmRQYXJ0cyk7CisKKwkvKgorCSAqIEFsaWduIGRlc2NyaXB0b3JzIHRv IGEgY2FjaGVsaW5lIGJvdW5kYXJ5LCBhbmQgbWVtb3J5IHBhZ2UuCisJICoKKwkgKiBXZSB3 YW50IHRvIGRpc3RyaWJ1dGUgYm90aCB0byBOVU1BIG5vZGVzLCBzbyB0aGF0IGVhY2ggYnVm ZmVyIGFuZCBpdCdzCisJICogZGVzY3JpcHRvciBhcmUgb24gdGhlIHNhbWUgTlVNQSBub2Rl LiBTbyB3ZSBhbGlnbiBib3RoIHRoZSBzYW1lIHdheS4KKwkgKgorCSAqIFhYWCBUaGUgbWVt b3J5IHBhZ2UgaXMgYWx3YXlzIGxhcmdlciB0aGFuIGNhY2hlbGluZSwgc28gdGhlIGNhY2hl bGluZQorCSAqIHJlZmVyZW5jZSBpcyBhIGJpdCB1bm5lY2Vzc2FyeS4KKwkgKgorCSAqIFhY WCBJbiBwcmluY2lwbGUgd2Ugb25seSBuZWVkIHRvIGRvIHRoaXMgd2l0aCBOVU1BLCBvdGhl cndpc2Ugd2UgY291bGQKKwkgKiBzdGlsbCBhbGlnbiBqdXN0IHRvIGNhY2hlbGluZSwgYXMg YmVmb3JlLgorCSAqLwogCUJ1ZmZlckRlc2NyaXB0b3JzID0gKEJ1ZmZlckRlc2NQYWRkZWQg KikKLQkJU2htZW1Jbml0U3RydWN0KCJCdWZmZXIgRGVzY3JpcHRvcnMiLAotCQkJCQkJTkJ1 ZmZlcnMgKiBzaXplb2YoQnVmZmVyRGVzY1BhZGRlZCksCi0JCQkJCQkmZm91bmREZXNjcyk7 CisJCVRZUEVBTElHTihidWZmZXJfYWxpZ24sCisJCQkJICBTaG1lbUluaXRTdHJ1Y3QoIkJ1 ZmZlciBEZXNjcmlwdG9ycyIsCisJCQkJCQkJCSAgTkJ1ZmZlcnMgKiBzaXplb2YoQnVmZmVy RGVzY1BhZGRlZCkgKyBidWZmZXJfYWxpZ24sCisJCQkJCQkJCSAgJmZvdW5kRGVzY3MpKTsK IAogCS8qIEFsaWduIGJ1ZmZlciBwb29sIG9uIElPIHBhZ2Ugc2l6ZSBib3VuZGFyeS4gKi8K IAlCdWZmZXJCbG9ja3MgPSAoY2hhciAqKQotCQlUWVBFQUxJR04oUEdfSU9fQUxJR05fU0la RSwKKwkJVFlQRUFMSUdOKGJ1ZmZlcl9hbGlnbiwKIAkJCQkgIFNobWVtSW5pdFN0cnVjdCgi QnVmZmVyIEJsb2NrcyIsCi0JCQkJCQkJCSAgTkJ1ZmZlcnMgKiAoU2l6ZSkgQkxDS1NaICsg UEdfSU9fQUxJR05fU0laRSwKKwkJCQkJCQkJICBOQnVmZmVycyAqIChTaXplKSBCTENLU1og KyBidWZmZXJfYWxpZ24sCiAJCQkJCQkJCSAgJmZvdW5kQnVmcykpOwogCiAJLyogQWxpZ24g Y29uZGl0aW9uIHZhcmlhYmxlcyB0byBjYWNoZWxpbmUgYm91bmRhcnkuICovCkBAIC0xMTIs NiArMjA4LDEyIEBAIEJ1ZmZlck1hbmFnZXJTaG1lbUluaXQodm9pZCkKIAl7CiAJCWludAkJ CWk7CiAKKwkJLyoKKwkJICogSW5pdGlhbGl6ZSBidWZmZXIgcGFydGl0aW9ucywgaW5jbHVk aW5nIG1vdmluZyBtZW1vcnkgdG8gZGlmZmVyZW50CisJCSAqIE5VTUEgbm9kZXMgKGlmIGVu YWJsZWQgYnkgR1VDKS4KKwkJICovCisJCWJ1ZmZlcl9wYXJ0aXRpb25zX2luaXQoKTsKKwog CQkvKgogCQkgKiBJbml0aWFsaXplIGFsbCB0aGUgYnVmZmVyIGhlYWRlcnMuCiAJCSAqLwpA QCAtMTQ4LDE5ICsyNTAsMjYgQEAgQnVmZmVyTWFuYWdlclNobWVtSW5pdCh2b2lkKQogICoK ICAqIGNvbXB1dGUgdGhlIHNpemUgb2Ygc2hhcmVkIG1lbW9yeSBmb3IgdGhlIGJ1ZmZlciBw b29sIGluY2x1ZGluZwogICogZGF0YSBwYWdlcywgYnVmZmVyIGRlc2NyaXB0b3JzLCBoYXNo IHRhYmxlcywgZXRjLgorICoKKyAqIFhYWCBDYWxsZWQgYmVmb3JlIGFsbG9jYXRpb24sIHNv IHdlIGRvbid0IGtub3cgaWYgaHVnZSBwYWdlcyBnZXQgdXNlZCB5ZXQuCisgKiBTbyB3ZSBu ZWVkIHRvIGFzc3VtZSBodWdlIHBhZ2VzIGdldCB1c2VkLCBhbmQgdXNlIGdldF9tZW1vcnlf cGFnZV9zaXplKCkKKyAqIHRvIGNhbGN1bGF0ZSB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBtZW1v cnkgcGFnZS4KICAqLwogU2l6ZQogQnVmZmVyTWFuYWdlclNobWVtU2l6ZSh2b2lkKQogewog CVNpemUJCXNpemUgPSAwOwogCisJLyogY2FsY3VsYXRlIHBhcnRpdGlvbiBpbmZvIGZvciBi dWZmZXJzICovCisJYnVmZmVyX3BhcnRpdGlvbnNfcHJlcGFyZSgpOworCiAJLyogc2l6ZSBv ZiBidWZmZXIgZGVzY3JpcHRvcnMgKi8KIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3Np emUoTkJ1ZmZlcnMsIHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSkpOwogCS8qIHRvIGFsbG93 IGFsaWduaW5nIGJ1ZmZlciBkZXNjcmlwdG9ycyAqLwotCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBQR19DQUNIRV9MSU5FX1NJWkUpOworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBNYXgobnVt YV9wYWdlX3NpemUsIFBHX0lPX0FMSUdOX1NJWkUpKTsKIAogCS8qIHNpemUgb2YgZGF0YSBw YWdlcywgcGx1cyBhbGlnbm1lbnQgcGFkZGluZyAqLwotCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBQR19JT19BTElHTl9TSVpFKTsKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgTWF4KG51bWFf cGFnZV9zaXplLCBQR19JT19BTElHTl9TSVpFKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUs IG11bF9zaXplKE5CdWZmZXJzLCBCTENLU1opKTsKIAogCS8qIHNpemUgb2Ygc3R1ZmYgY29u dHJvbGxlZCBieSBmcmVlbGlzdC5jICovCkBAIC0xNzUsNSArMjg0LDUwNSBAQCBCdWZmZXJN YW5hZ2VyU2htZW1TaXplKHZvaWQpCiAJLyogc2l6ZSBvZiBjaGVja3BvaW50IHNvcnQgYXJy YXkgaW4gYnVmbWdyLmMgKi8KIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoTkJ1 ZmZlcnMsIHNpemVvZihDa3B0U29ydEl0ZW0pKSk7CiAKKwkvKiBhY2NvdW50IGZvciByZWdp c3RyeSBvZiBOVU1BIHBhcnRpdGlvbnMgKi8KKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgTUFY QUxJR04ob2Zmc2V0b2YoQnVmZmVyUGFydGl0aW9ucywgcGFydGl0aW9ucykgKworCQkJCQkJ CQkgICBtdWxfc2l6ZShzaXplb2YoQnVmZmVyUGFydGl0aW9uKSwgbnVtYV9wYXJ0aXRpb25z KSkpOworCiAJcmV0dXJuIHNpemU7CiB9CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIE5VTUEg bm9kZSBmb3IgYSBnaXZlbiBidWZmZXIuCisgKi8KK2ludAorQnVmZmVyR2V0Tm9kZShCdWZm ZXIgYnVmZmVyKQoreworCS8qIG5vdCBOVU1BIHBhcnRpdGlvbmluZyAqLworCWlmIChudW1h X2J1ZmZlcnNfcGVyX25vZGUgPT0gLTEpCisJCXJldHVybiAwOworCisJcmV0dXJuIChidWZm ZXIgLyBudW1hX2J1ZmZlcnNfcGVyX25vZGUpOworfQorCisvKgorICogYnVmZmVyX3BhcnRp dGlvbnNfcHJlcGFyZQorICoJCUNhbGN1bGF0ZSBwYXJhbWV0ZXJzIGZvciBwYXJ0aXRpb25p bmcgYnVmZmVycy4KKyAqCisgKiBXZSB3YW50IHRvIHNwbGl0IHRoZSBzaGFyZWQgYnVmZmVy cyBpbnRvIG11bHRpcGxlIHBhcnRpdGlvbnMsIG9mIHJvdWdobHkKKyAqIHRoZSBzYW1lIHNp emUuIFRoaXMgaXMgbWVhbnQgdG8gc2VydmUgbXVsdGlwbGUgcHVycG9zZXMuIFdlIHdhbnQg dG8gbWFwCisgKiB0aGUgcGFydGl0aW9ucyB0byBkaWZmZXJlbnQgTlVNQSBub2RlcywgdG8g YmFsYW5jZSBtZW1vcnkgdXNhZ2UsIGFuZAorICogYWxsb3cgcGFydGl0aW9uaW5nIHNvbWUg ZGF0YSBzdHJ1Y3R1cmVzIGJ1aWx0IG9uIHRvcCBvZiBidWZmZXJzLCB0byBnaXZlCisgKiBw cmVmZXJlbmNlIHRvIGxvY2FsIGFjY2VzcyAoYnVmZmVycyBvbiB0aGUgc2FtZSBOVU1BIG5v ZGUpLiBUaGlzIGFwcGxpZXMKKyAqIG1vc3RseSB0byBmcmVlbGlzdHMgYW5kIGNsb2Nrc3dl ZXAuCisgKgorICogV2UgbWF5IHdhbnQgdG8gdXNlIHBhcnRpdGlvbmluZyBldmVuIG9uIG5v bi1OVU1BIHN5c3RlbXMsIG9yIHdoZW4gcnVubmluZworICogb24gYSBzaW5nbGUgTlVNQSBu b2RlLiBQYXJ0aXRpb25pbmcgdGhlIGZyZWVsaXN0L2Nsb2Nrc3dlZXAgaXMgYmVuZWZpY2lh bAorICogZXZlbiB3aXRob3V0IHRoZSBOVU1BIGVmZmVjdHMuCisgKgorICogU28gd2UgdHJ5 IHRvIGFsd2F5cyBidWlsZCBhdCBsZWFzdCA0IHBhcnRpdGlvbnMgKE1JTl9CVUZGRVJfUEFS VElUSU9OUykKKyAqIGluIHRvdGFsLCBvciBhdCBsZWFzdCBvbmUgcGFydGl0aW9uIHBlciBO VU1BIG5vZGUuIFdlIGFsd2F5cyBjcmVhdGUgdGhlCisgKiBzYW1lIG51bWJlciBvZiBwYXJ0 aXRpb25zIHBlciBOVU1BIG5vZGUuCisgKgorICogU29tZSBleGFtcGxlczoKKyAqCisgKiAt IG5vbi1OVU1BIHN5c3RlbSAob3IgMSBOVU1BIG5vZGUpOiA0IHBhcnRpdGlvbnMgZm9yIHRo ZSBzaW5nbGUgbm9kZQorICoKKyAqIC0gMiBOVU1BIG5vZGVzOiA0IHBhcnRpdGlvbnMsIDIg Zm9yIGVhY2ggbm9kZQorICoKKyAqIC0gMyBOVU1BIG5vZGVzOiA2IHBhcnRpdGlvbnMsIDIg Zm9yIGVhY2ggbm9kZQorICoKKyAqIC0gNCsgTlVNQSBub2Rlczogb25lIHBhcnRpdGlvbiBw ZXIgbm9kZQorICoKKyAqIE5VTUEgd29ya3Mgb24gdGhlIG1lbW9yeS1wYWdlIGdyYW51bGFy aXR5LCB3aGljaCBkZXRlcm1pbmVzIHRoZSBzbWFsbGVzdAorICogYW1vdW50IG9mIG1lbW9y eSB3ZSBjYW4gYWxsb2NhdGUgdG8gc2luZ2xlIG5vZGUuIFRoaXMgaXMgZGV0ZXJtaW5lZCBi eQorICogaG93IG1hbnkgQnVmZmVyRGVzY3JpcHRvcnMgZml0IG9udG8gYSBzaW5nbGUgbWVt b3J5IHBhZ2UsIHNvIHRoaXMgZGVwZW5kcworICogb24gaHVnZSBwYWdlIHN1cHBvcnQuIFdp dGggMk1CIGh1Z2UgcGFnZXMgKHR5cGljYWwgb24geDg2IExpbnV4KSwgdGhpcyBpcworICog MzI3NjggYnVmZmVycyAoMjU2TUIpLiBXaXRoIHJlZ3VsYXIgNGtCIHBhZ2VzLCBpdCdzIDY0 IGJ1ZmZlcnMgKDUxMktCKS4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGRldGVybWluZWQgYmVm b3JlIHRoZSBhbGxvY2F0aW9uLCBpLmUuIHdlIGRvbid0IGtub3cgaWYgdGhlCisgKiBhbGxv Y2F0aW9uIGdvdCB0byB1c2UgaHVnZSBwYWdlcy4gU28gdW5sZXNzIGh1Z2VfcGFnZXM9b2Zm IHdlIGFzc3VtZSB3ZSdyZQorICogdXNpbmcgaHVnZSBwYWdlcy4KKyAqCisgKiBUaGlzIG1p bmltYWwgc2l6ZSByZXF1aXJlbWVudCBvbmx5IG1hdHRlcnMgZm9yIHRoZSBwZXItbm9kZSBh bW91bnQgb2YKKyAqIG1lbW9yeSwgbm90IGZvciB0aGUgaW5kaXZpZHVhbCBwYXJ0aXRpb25z LiBUaGUgcGFydGl0aW9ucyBmb3IgdGhlIHNhbWUKKyAqIG5vZGUgYXJlIGEgY29udGlndW91 cyBjaHVuayBvZiBtZW1vcnksIHdoaWNoIGNhbiBiZSBzcGxpdCBhcmJpdHJhcmlseSwKKyAq IGl0J3MgaW5kZXBlbmRlbnQgb2YgdGhlIE5VTUEgZ3JhbnVsYXJpdHkuCisgKgorICogWFhY IFRoaXMgcGF0Y2ggb25seSBpbXBsZW1lbnRzIHBsYWNpbmcgdGhlIGJ1ZmZlcnMgb250byBk aWZmZXJlbnQgTlVNQQorICogbm9kZXMuIFRoZSBmcmVlbGlzdC9jbG9ja3N3ZWVwIHBhcnRp dGlvbmluZyBpcyBpbXBsZW1lbnRlZCBpbiBzZXBhcmF0ZQorICogcGF0Y2hlcyBsYXRlciBp biB0aGUgcGF0Y2ggc2VyaWVzLiBUaG9zZSBwYXRjaGVzIGhvd2V2ZXIgdXNlIHRoZSBzYW1l CisgKiBidWZmZXIgcGFydGl0aW9uIHJlZ2lzdHJ5LCB0byBhbGlnbiB0aGUgcGFydGl0aW9u cy4KKyAqCisgKgorICogWFhYIFRoaXMgbmVlZHMgdG8gY29uc2lkZXIgdGhlIG1pbmltdW0g Y2h1bmsgc2l6ZSwgaS5lLiB3ZSBjYW4ndCBzcGxpdAorICogYnVmZmVycyBiZXlvbmQgc29t ZSBwb2ludCwgYXQgc29tZSBwb2ludCBpdCBnZXRzIHdlIHJ1biBpbnRvIHRoZSBzaXplIG9m CisgKiBidWZmZXIgZGVzY3JpcHRvcnMuIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBnaXZlIHBy ZWZlcmVuY2UgdG8gb25lIG9mIHRoZXNlCisgKiAocHJvYmFibHkgYXQgbGVhc3QgcHJpbnQg YSB3YXJuaW5nKS4KKyAqCisgKiBYWFggV2Ugd2FudCB0byBkbyB0aGlzIGV2ZW4gd2l0aCBu dW1hX2J1ZmZlcnNfaW50ZXJsZWF2ZT1mYWxzZSwgc28gdGhhdCB0aGUKKyAqIG90aGVyIHBh dGNoZXMgY2FuIGRvIHRoZWlyIHBhcnRpdGlvbmluZy4gQnV0IGluIHRoYXQgY2FzZSB3ZSBk b24ndCBuZWVkIHRvCisgKiBlbmZvcmNlIHRoZSBtaW4gY2h1bmsgc2l6ZSAocHJvYmFibHkp PworICoKKyAqIFhYWCBXZSBuZWVkIHRvIG9ubHkgY2FsbCB0aGlzIG9uY2UsIHdoZW4gc2l6 aW5nIHRoZSBtZW1vcnkuIEJ1dCBhdCB0aGF0CisgKiBwb2ludCB3ZSBkb24ndCBrbm93IGlm IHdlIGdldCB0byB1c2UgaHVnZSBwYWdlcyBvciBub3QgKHVubGVzcyB3aGVuIGh1Z2UKKyAq IHBhZ2VzIGFyZSBkaXNhYmxlZCkuIFdlJ2xsIHByb2NlZWQgYXMgaWYgdGhlIGh1Z2UgcGFn ZXMgd2VyZSB1c2VkLCBhbmQgd2UKKyAqIG1heSBoYXZlIHRvIHVzZSBsYXJnZXIgcGFydGl0 aW9ucy4gTWF5YmUgdGhlcmUncyBzb21lIHNvcnQgb2YgZmFsbGJhY2ssCisgKiBidXQgZm9y IG5vdyB3ZSBzaW1wbHkgZGlzYWJsZSB0aGUgTlVNQSBwYXJ0aXRpb25pbmcgLSBpdCBzaW1w bHkgbWVhbnMgdGhlCisgKiBzaGFyZWQgYnVmZmVycyBhcmUgdG9vIHNtYWxsLgorICoKKyAq IFhYWCBXZSBkb24ndCBuZWVkIHRvIG1ha2UgZWFjaCBwYXJ0aXRpb24gYSBtdWx0aXBsZSBv ZiBtaW5fcGFydGl0aW9uX3NpemUuCisgKiBUaGF0J3Mgc29tZXRoaW5nIHdlIG5lZWQgdG8g ZG8gZm9yIGEgbm9kZSAoYmVjYXVzZSBOVU1BIHdvcmtzIGF0IGdyYW51bGFyaXR5CisgKiBv ZiBwYWdlcyksIGJ1dCBwYXJ0aXRpb25zIGZvciBhIHNpbmdsZSBub2RlIGNhbiBzcGxpdCB0 aGF0IGFyYml0cmFyaWx5LgorICogQWx0aG91Z2gga2VlcGluZyB0aGUgc2l6ZXMgcG93ZXIt b2YtdHdvIHdvdWxkIGFsbG93IGNhbGN1bGF0aW5nIGV2ZXJ5dGhpbmcKKyAqIGFzIHNoaWZ0 L21hc2ssIHdpdGhvdXQgZXhwZW5zaXZlIGRpdmlzaW9uL21vZHVsbyBvcGVyYXRpb25zLgor ICovCitzdGF0aWMgdm9pZAorYnVmZmVyX3BhcnRpdGlvbnNfcHJlcGFyZSh2b2lkKQorewor CS8qCisJICogTWluaW11bSBudW1iZXIgb2YgYnVmZmVycyB3ZSBjYW4gYWxsb2NhdGUgdG8g YSBOVU1BIG5vZGUgKGRldGVybWluZWQgYnkKKwkgKiBob3cgbWFueSBCdWZmZXJEZXNjcmlw dG9ycyBmaXQgb250byBhIG1lbW9yeSBwYWdlKS4KKwkgKi8KKwlpbnQJCQltaW5fbm9kZV9i dWZmZXJzOworCisJLyoKKwkgKiBNYXhpbXVtIG51bWJlciBvZiBub2RlcyB3ZSBjYW4gc3Bs aXQgc2hhcmVkIGJ1ZmZlcnMgdG8sIGFzc3VtaW5nIGVhY2gKKwkgKiBub2RlIGdldHMgdGhl IHNtYWxsZXN0IGFsbG9jYXRhYmxlIGNodW5rICh0aGUgbGFzdCBub2RlIGNhbiBnZXQgYQor CSAqIHNtYWxsZXIgYW1vdW50IG9mIG1lbW9yeSwgbm90IHRoZSBmdWxsIGNodW5rKS4KKwkg Ki8KKwlpbnQJCQltYXhfbm9kZXM7CisKKwkvKgorCSAqIEhvdyBtYW55IHBhcnRpdGlvbnMg dG8gY3JlYXRlIHBlciBub2RlLiBDb3VsZCBiZSBtb3JlIHRoYW4gMSBmb3Igc21hbGwKKwkg KiBudW1iZXIgb2Ygbm9kZXMgKG9mIG5vbi1OVU1BIHN5c3RlbXMpLgorCSAqLworCWludAkJ CW51bV9wYXJ0aXRpb25zX3Blcl9ub2RlOworCisJLyogYmFpbCBvdXQgaWYgYWxyZWFkeSBp bml0aWFsaXplZCAoY2FsY3VsYXRlIG9ubHkgb25jZSkgKi8KKwlpZiAobnVtYV9ub2RlcyAh PSAtMSkKKwkJcmV0dXJuOworCisJLyogWFhYIG9ubHkgZ2l2ZXMgdXMgdGhlIG51bWJlciwg dGhlIG5vZGVzIG1heSBub3QgYmUgMCwgMSwgMiwgLi4uICovCisjaWYgVVNFX0xJQk5VTUEK KwludW1hX25vZGVzID0gbnVtYV9udW1fY29uZmlndXJlZF9ub2RlcygpOworI2Vsc2UKKwkv KiB3aXRob3V0IE5VTUEsIGFzc3VtZSB0aGVyZSdzIGp1c3Qgb25lIG5vZGUgKi8KKwludW1h X25vZGVzID0gMTsKKyNlbmRpZgorCisJLyogd2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlIHdp dGhvdXQgYXQgbGVhc3Qgb25lIE5VTUEgbm9kZSAqLworCUFzc2VydChudW1hX25vZGVzID4g MCk7CisKKwkvKgorCSAqIFhYWCBBIGJpdCB3ZWlyZC4gRG8gd2UgbmVlZCB0byB3b3JyeSBh Ym91dCBwb3N0bWFzdGVyPyBDb3VsZCB0aGlzIGV2ZW4KKwkgKiBydW4gb3V0c2lkZSBwb3N0 bWFzdGVyPyBJIGRvbid0IHRoaW5rIHNvLgorCSAqCisJICogWFhYIEFub3RoZXIgaXNzdWUg aXMgd2UgbWF5IGdldCBkaWZmZXJlbnQgdmFsdWVzIHRoYW4gd2hlbiBzaXppbmcgdGhlCisJ ICogdGhlIG1lbW9yeSwgYmVjYXVzZSBhdCB0aGF0IHBvaW50IHdlIGRpZG4ndCBrbm93IGlm IHdlIGdldCBodWdlIHBhZ2VzLAorCSAqIHNvIHdlIGFzc3VtZWQgd2Ugd2lsbC4gU2hvdWxk bid0IGNhdXNlIGNyYXNoZXMsIGJ1dCB3ZSBtaWdodCBhbGxvY2F0ZQorCSAqIHNoYXJlZCBt ZW1vcnkgYW5kIHRoZW4gbm90IHVzZSBzb21lIG9mIGl0IChiZWNhdXNlIG9mIHRoZSBhbGln bm1lbnQKKwkgKiB0aGF0IHdlIGRvbid0IGFjdHVhbGx5IG5lZWQpLiBOb3Qgc3VyZSBhYm91 dCBiZXR0ZXIgd2F5LCBnb29kIGZvciBub3cuCisJICovCisJbnVtYV9wYWdlX3NpemUgPSBw Z19udW1hX3BhZ2Vfc2l6ZSgpOworCisJLyogbWFrZSBzdXJlIHRoZSBjaHVua3Mgd2lsbCBh bGlnbiBuaWNlbHkgKi8KKwlBc3NlcnQoQkxDS1NaICUgc2l6ZW9mKEJ1ZmZlckRlc2NQYWRk ZWQpID09IDApOworCUFzc2VydChudW1hX3BhZ2Vfc2l6ZSAlIHNpemVvZihCdWZmZXJEZXNj UGFkZGVkKSA9PSAwKTsKKwlBc3NlcnQoKChCTENLU1ogJSBudW1hX3BhZ2Vfc2l6ZSkgPT0g MCkgfHwgKChudW1hX3BhZ2Vfc2l6ZSAlIEJMQ0tTWikgPT0gMCkpOworCisJLyoKKwkgKiBU aGUgbWluaW11bSBudW1iZXIgb2YgYnVmZmVycyB3ZSBjYW4gYWxsb2NhdGUgZnJvbSBhIHNp bmdsZSBub2RlLCB1c2luZworCSAqIHRoZSBtZW1vcnkgcGFnZSBzaXplIChkZXRlcm1pbmVk IGJ5IGJ1ZmZlciBkZXNjcmlwdG9ycykuIE5VTUEgYWxsb2NhdGVzCisJICogbWVtb3J5IGlu IHBhZ2VzLCBhbmQgd2UgbmVlZCB0byBkbyB0aGF0IGZvciBib3RoIGJ1ZmZlcnMgYW5kCisJ ICogZGVzY3JpcHRvcnMgYXQgdGhlIHNhbWUgdGltZS4KKwkgKgorCSAqIEluIHByYWN0aWNl IHRoZSBCTENLU1ogZG9lc24ndCByZWFsbHkgbWF0dGVyLCBiZWNhdXNlIGl0J3MgbXVjaCBs YXJnZXIKKwkgKiB0aGFuIEJ1ZmZlckRlc2NQYWRkZWQsIHNvIHRoZSByZXN1bHQgaXMgZGV0 ZXJtaW5lZCBidWZmZXIgZGVzY3JpcHRvcnMuCisJICovCisJbWluX25vZGVfYnVmZmVycyA9 IChudW1hX3BhZ2Vfc2l6ZSAvIHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSk7CisKKwkvKgor CSAqIE1heGltdW0gbnVtYmVyIG9mIG5vZGVzIChlYWNoIGdldHRpbmcgbWluX25vZGVfYnVm ZmVycykgd2UgY2FuIGhhbmRsZQorCSAqIGdpdmVuIHRoZSBjdXJyZW50IHNoYXJlZCBidWZm ZXJzIHNpemUuIFRoZSBsYXN0IG5vZGUgaXMgYWxsb3dlZCB0byBiZQorCSAqIHNtYWxsZXIg KGhhbGYgb2YgdGhlIG90aGVyIG5vZGVzKS4KKwkgKi8KKwltYXhfbm9kZXMgPSAoTkJ1ZmZl cnMgKyAobWluX25vZGVfYnVmZmVycyAvIDIpKSAvIG1pbl9ub2RlX2J1ZmZlcnM7CisKKwkv KgorCSAqIENhbiB3ZSBhY3R1YWxseSBkbyBOVU1BIHBhcnRpdGlvbmluZyB3aXRoIHRoZXNl IHNldHRpbmdzPyBJZiB3ZSBjYW4ndAorCSAqIGhhbmRsZSB0aGUgY3VycmVudCBudW1iZXIg b2Ygbm9kZXMsIHRoZW4gbm8uCisJICoKKwkgKiBYWFggVGhpcyBzaG91bGRuJ3QgYmUgYSBi aWcgaXNzdWUgaW4gcHJhY3RpY2UuIE5VTUEgc3lzdGVtcyB0eXBpY2FsbHkKKwkgKiBydW4g d2l0aCBsYXJnZSBzaGFyZWQgYnVmZmVycywgd2hpY2ggYWxzbyBtYWtlcyB0aGUgaW1iYWxh bmNlIGlzc3VlcworCSAqIGZhaXJseSBzaWduaWZpY2FudCAoaXQncyBxdWljayB0byByZWJh bGFuY2UgMTI4TUIsIG11Y2ggc2xvd2VyIHRvIGRvCisJICogdGhhdCBmb3IgMjU2R0IpLgor CSAqLworCW51bWFfY2FuX3BhcnRpdGlvbiA9IHRydWU7CS8qIGFzc3VtZSB3ZSBjYW4gYWxs b2NhdGUgdG8gbm9kZXMgKi8KKwlpZiAobnVtYV9ub2RlcyA+IG1heF9ub2RlcykKKwl7CisJ CWVsb2coV0FSTklORywgInNoYXJlZCBidWZmZXJzIHRvbyBzbWFsbCBmb3IgJWQgbm9kZXMg KG1heCBub2RlcyAlZCkiLAorCQkJIG51bWFfbm9kZXMsIG1heF9ub2Rlcyk7CisJCW51bWFf Y2FuX3BhcnRpdGlvbiA9IGZhbHNlOworCX0KKworCS8qCisJICogV2Uga25vdyB3ZSBjYW4g cGFydGl0aW9uIHRvIHRoZSBkZXNpcmVkIG51bWJlciBvZiBub2Rlcywgbm93IGl0J3MgdGlt ZQorCSAqIHRvIGZpZ3VyZSBvdXQgaG93IG1hbnkgcGFydGl0aW9ucyB3ZSBuZWVkIHBlciBu b2RlLiBXZSBzaW1wbHkgYWRkCisJICogcGFydGl0aW9ucyBwZXIgbm9kZSB1bnRpbCB3ZSBy ZWFjaCBNSU5fQlVGRkVSX1BBUlRJVElPTlMuCisJICoKKwkgKiBYWFggTWF5YmUgd2Ugc2hv dWxkIG1ha2Ugc3VyZSB0byBrZWVwIHRoZSBhY3R1YWwgcGFydGl0aW9uIHNpemUgYSBwb3dl cgorCSAqIG9mIDIsIHRvIG1ha2UgdGhlIGNhbGN1bGF0aW9ucyBzaW1wbGVyIChzaGlmdCBp bnN0ZWFkIG9mIG1vZCkuCisJICovCisJbnVtX3BhcnRpdGlvbnNfcGVyX25vZGUgPSAxOwor CisJd2hpbGUgKG51bWFfbm9kZXMgKiBudW1fcGFydGl0aW9uc19wZXJfbm9kZSA8IE1JTl9C VUZGRVJfUEFSVElUSU9OUykKKwkJbnVtX3BhcnRpdGlvbnNfcGVyX25vZGUrKzsKKworCS8q IG5vdyB3ZSBrbm93IHRoZSB0b3RhbCBudW1iZXIgb2YgcGFydGl0aW9ucyAqLworCW51bWFf cGFydGl0aW9ucyA9IChudW1hX25vZGVzICogbnVtX3BhcnRpdGlvbnNfcGVyX25vZGUpOwor CisJLyoKKwkgKiBGaW5hbGx5LCBjYWxjdWxhdGUgaG93IG1hbnkgYnVmZmVycyB3ZSdsbCBh c3NpZ24gdG8gYSBzaW5nbGUgTlVNQSBub2RlLgorCSAqIElmIHdlIGhhdmUgb25seSBhIHNp bmdsZSBub2RlLCBvciBjYW4ndCBtYXAgdG8gdGhhdCBtYW55IG5vZGVzLCBqdXN0CisJICog dGFrZSBhICJmYWlyIHNoYXJlIiBvZiBidWZmZXJzLgorCSAqCisJICogWFhYIEluIGJvdGgg Y2FzZXMgdGhlIGxhc3Qgbm9kZSBjYW4gZ2V0IGZld2VyIGJ1ZmZlcnMuCisJICovCisJaWYg KCFudW1hX2Nhbl9wYXJ0aXRpb24pCisJeworCQludW1hX2J1ZmZlcnNfcGVyX25vZGUgPSAo TkJ1ZmZlcnMgKyAobnVtYV9ub2RlcyAtIDEpKSAvIG51bWFfbm9kZXM7CisJfQorCWVsc2UK Kwl7CisJCW51bWFfYnVmZmVyc19wZXJfbm9kZSA9IG1pbl9ub2RlX2J1ZmZlcnM7CisJCXdo aWxlIChudW1hX2J1ZmZlcnNfcGVyX25vZGUgKiBudW1hX25vZGVzIDwgTkJ1ZmZlcnMpCisJ CQludW1hX2J1ZmZlcnNfcGVyX25vZGUgKz0gbWluX25vZGVfYnVmZmVyczsKKworCQkvKiB0 aGUgbGFzdCBub2RlIHNob3VsZCBnZXQgYXQgbGVhc3Qgc29tZSBidWZmZXJzICovCisJCUFz c2VydChOQnVmZmVycyAtIChudW1hX25vZGVzIC0gMSkgKiBudW1hX2J1ZmZlcnNfcGVyX25v ZGUgPiAwKTsKKwl9CisKKwllbG9nKERFQlVHMSwgIk5VTUE6IGJ1ZmZlcnMgJWQgcGFydGl0 aW9ucyAlZCBudW1fbm9kZXMgJWQgcGVyX25vZGUgJWQgYnVmZmVyc19wZXJfbm9kZSAlZCAo bWluICVkKSIsCisJCSBOQnVmZmVycywgbnVtYV9wYXJ0aXRpb25zLCBudW1hX25vZGVzLCBu dW1fcGFydGl0aW9uc19wZXJfbm9kZSwKKwkJIG51bWFfYnVmZmVyc19wZXJfbm9kZSwgbWlu X25vZGVfYnVmZmVycyk7Cit9CisKKy8qCisgKiBTYW5pdHkgY2hlY2tzIG9mIGJ1ZmZlcnMg cGFydGl0aW9ucyAtIHRoZXJlIG11c3QgYmUgbm8gZ2FwcywgaXQgbXVzdCBjb3ZlcgorICog dGhlIHdob2xlIHJhbmdlIG9mIGJ1ZmZlcnMsIGV0Yy4KKyAqLworc3RhdGljIHZvaWQKK0Fz c2VydENoZWNrQnVmZmVyUGFydGl0aW9ucyh2b2lkKQoreworI2lmZGVmIFVTRV9BU1NFUlRf Q0hFQ0tJTkcKKwlpbnQJCQludW1fYnVmZmVycyA9IDA7CisKKwlBc3NlcnQoQnVmZmVyUGFy dGl0aW9uc0FycmF5LT5ucGFydGl0aW9ucyA+IDApOworCisJZm9yIChpbnQgaSA9IDA7IGkg PCBCdWZmZXJQYXJ0aXRpb25zQXJyYXktPm5wYXJ0aXRpb25zOyBpKyspCisJeworCQlCdWZm ZXJQYXJ0aXRpb24gKnBhcnQgPSAmQnVmZmVyUGFydGl0aW9uc0FycmF5LT5wYXJ0aXRpb25z W2ldOworCisJCS8qCisJCSAqIFdlIGNhbiBnZXQgYSBzaW5nbGUtYnVmZmVyIHBhcnRpdGlv biwgaWYgdGhlIHNpemluZyBmb3JjZXMgdGhlIGxhc3QKKwkJICogcGFydGl0aW9uIHRvIGJl IGp1c3Qgb25lIGJ1ZmZlci4gQnV0IGl0J3MgdW5saWtlbHkgKGFuZAorCQkgKiB1bmRlc2ly YWJsZSkuCisJCSAqLworCQlBc3NlcnQocGFydC0+Zmlyc3RfYnVmZmVyIDw9IHBhcnQtPmxh c3RfYnVmZmVyKTsKKwkJQXNzZXJ0KChwYXJ0LT5sYXN0X2J1ZmZlciAtIHBhcnQtPmZpcnN0 X2J1ZmZlciArIDEpID09IHBhcnQtPm51bV9idWZmZXJzKTsKKworCQludW1fYnVmZmVycyAr PSBwYXJ0LT5udW1fYnVmZmVyczsKKworCQkvKgorCQkgKiBUaGUgZmlyc3QgcGFydGl0aW9u IG5lZWRzIHRvIHN0YXJ0IG9uIGJ1ZmZlciAwLiBMYXRlciBwYXJ0aXRpb25zCisJCSAqIG5l ZWQgdG8gYmUgY29udGlndW91cywgd2l0aG91dCBza2lwcGluZyBhbnkgYnVmZmVycy4KKwkJ ICovCisJCWlmIChpID09IDApCisJCXsKKwkJCUFzc2VydChwYXJ0LT5maXJzdF9idWZmZXIg PT0gMCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlCdWZmZXJQYXJ0aXRpb24gKnByZXYgPSAm QnVmZmVyUGFydGl0aW9uc0FycmF5LT5wYXJ0aXRpb25zW2kgLSAxXTsKKworCQkJQXNzZXJ0 KChwYXJ0LT5maXJzdF9idWZmZXIgLSAxKSA9PSBwcmV2LT5sYXN0X2J1ZmZlcik7CisJCX0K KworCQkvKiB0aGUgbGFzdCBwYXJ0aXRpb24gbmVlZHMgdG8gZW5kIG9uIGJ1ZmZlciAoTkJ1 ZmZlcnMgLSAxKSAqLworCQlpZiAoaSA9PSAoQnVmZmVyUGFydGl0aW9uc0FycmF5LT5ucGFy dGl0aW9ucyAtIDEpKQorCQl7CisJCQlBc3NlcnQocGFydC0+bGFzdF9idWZmZXIgPT0gKE5C dWZmZXJzIC0gMSkpOworCQl9CisJfQorCisJQXNzZXJ0KG51bV9idWZmZXJzID09IE5CdWZm ZXJzKTsKKyNlbmRpZgorfQorCisvKgorICogYnVmZmVyX3BhcnRpdGlvbnNfaW5pdAorICoJ CUluaXRpYWxpemUgYXJyYXkgb2YgYnVmZmVyIHBhcnRpdGlvbnMuCisgKi8KK3N0YXRpYyB2 b2lkCitidWZmZXJfcGFydGl0aW9uc19pbml0KHZvaWQpCit7CisJaW50CQkJcmVtYWluaW5n X2J1ZmZlcnMgPSBOQnVmZmVyczsKKwlpbnQJCQlidWZmZXIgPSAwOworCWludAkJCXBhcnRz X3Blcl9ub2RlID0gKG51bWFfcGFydGl0aW9ucyAvIG51bWFfbm9kZXMpOworCWNoYXIJICAg KmJ1ZmZlcnNfcHRyLAorCQkJICAgKmRlc2NyaXB0b3JzX3B0cjsKKworCUJ1ZmZlclBhcnRp dGlvbnNBcnJheS0+bnBhcnRpdGlvbnMgPSBudW1hX3BhcnRpdGlvbnM7CisJQnVmZmVyUGFy dGl0aW9uc0FycmF5LT5ubm9kZXMgPSBudW1hX25vZGVzOworCisJZm9yIChpbnQgbiA9IDA7 IG4gPCBudW1hX25vZGVzOyBuKyspCisJeworCQkvKiBidWZmZXJzIHRoaXMgbm9kZSBzaG91 bGQgZ2V0IChsYXN0IG5vZGUgY2FuIGdldCBmZXdlcikgKi8KKwkJaW50CQkJbm9kZV9idWZm ZXJzID0gTWluKHJlbWFpbmluZ19idWZmZXJzLCBudW1hX2J1ZmZlcnNfcGVyX25vZGUpOwor CisJCS8qIHNwbGl0IG5vZGUgYnVmZmVycyBuZXR3ZWVuIHBhcnRpdGlvbnMgKGxhc3Qgb25l IGNhbiBnZXQgZmV3ZXIpICovCisJCWludAkJCXBhcnRfYnVmZmVycyA9IChub2RlX2J1ZmZl cnMgKyAocGFydHNfcGVyX25vZGUgLSAxKSkgLyBwYXJ0c19wZXJfbm9kZTsKKworCQlyZW1h aW5pbmdfYnVmZmVycyAtPSBub2RlX2J1ZmZlcnM7CisKKwkJQXNzZXJ0KChub2RlX2J1ZmZl cnMgPiAwKSAmJiAobm9kZV9idWZmZXJzIDw9IE5CdWZmZXJzKSk7CisJCUFzc2VydCgobiA+ PSAwKSAmJiAobiA8IG51bWFfbm9kZXMpKTsKKworCQlmb3IgKGludCBwID0gMDsgcCA8IHBh cnRzX3Blcl9ub2RlOyBwKyspCisJCXsKKwkJCWludAkJCWlkeCA9IChuICogcGFydHNfcGVy X25vZGUpICsgcDsKKwkJCUJ1ZmZlclBhcnRpdGlvbiAqcGFydCA9ICZCdWZmZXJQYXJ0aXRp b25zQXJyYXktPnBhcnRpdGlvbnNbaWR4XTsKKwkJCWludAkJCW51bV9idWZmZXJzID0gTWlu KG5vZGVfYnVmZmVycywgcGFydF9idWZmZXJzKTsKKworCQkJQXNzZXJ0KChpZHggPj0gMCkg JiYgKGlkeCA8IG51bWFfcGFydGl0aW9ucykpOworCQkJQXNzZXJ0KChidWZmZXIgPj0gMCkg JiYgKGJ1ZmZlciA8IE5CdWZmZXJzKSk7CisJCQlBc3NlcnQoKG51bV9idWZmZXJzID4gMCkg JiYgKG51bV9idWZmZXJzIDw9IHBhcnRfYnVmZmVycykpOworCisJCQkvKiBYWFggd2Ugc2hv dWxkIGdldCB0aGUgYWN0dWFsIG5vZGUgSUQgZnJvbSB0aGUgbWFzayAqLworCQkJaWYgKChu dW1hX2ZsYWdzICYgTlVNQV9CVUZGRVJTKSAhPSAwKQorCQkJCXBhcnQtPm51bWFfbm9kZSA9 IG47CisJCQllbHNlCisJCQkJcGFydC0+bnVtYV9ub2RlID0gLTE7CisKKwkJCXBhcnQtPm51 bV9idWZmZXJzID0gbnVtX2J1ZmZlcnM7CisJCQlwYXJ0LT5maXJzdF9idWZmZXIgPSBidWZm ZXI7CisJCQlwYXJ0LT5sYXN0X2J1ZmZlciA9IGJ1ZmZlciArIChudW1fYnVmZmVycyAtIDEp OworCisJCQllbG9nKERFQlVHMSwgIk5VTUE6IGJ1ZmZlciAlZCBub2RlICVkIHBhcnRpdGlv biAlZCBidWZmZXJzICVkIGZpcnN0ICVkIGxhc3QgJWQiLCBpZHgsIG4sIHAsIG51bV9idWZm ZXJzLCBidWZmZXIsIGJ1ZmZlciArIChudW1fYnVmZmVycyAtIDEpKTsKKworCQkJYnVmZmVy ICs9IG51bV9idWZmZXJzOworCQkJbm9kZV9idWZmZXJzIC09IHBhcnRfYnVmZmVyczsKKwkJ fQorCX0KKworCUFzc2VydENoZWNrQnVmZmVyUGFydGl0aW9ucygpOworCisJLyoKKwkgKiBX aXRoIGJ1ZmZlcnMgaW50ZXJsZWF2aW5nIGRpc2FibGVkIChvciBjYW4ndCBwYXJ0aXRpb24s IGJlY2F1c2Ugb2YKKwkgKiBzaGFyZWQgYnVmZmVycyBiZWluZyB0b28gc21hbGwpLCB3ZSdy ZSBkb25lLgorCSAqLworCWlmICgoKG51bWFfZmxhZ3MgJiBOVU1BX0JVRkZFUlMpID09IDAp IHx8ICFudW1hX2Nhbl9wYXJ0aXRpb24pCisJCXJldHVybjsKKworCS8qCisJICogQXNzaWdu IGNodW5rcyBvZiBidWZmZXJzIGFuZCBidWZmZXIgZGVzY3JpcHRvcnMgdG8gdGhlIGF2YWls YWJsZSBOVU1BCisJICogbm9kZXMuIFdlIGNhbid0IHVzZSB0aGUgcmVndWxhciBpbnRlcmxl YXZpbmcsIGJlY2F1c2Ugd2l0aCByZWd1bGFyCisJICogbWVtb3J5IHBhZ2VzIChzbWFsbGVy IHRoYW4gQkxDS1NaKSB3ZSdkIHNwbGl0IGFsbCBidWZmZXJzIHRvIG11bHRpcGxlCisJICog TlVNQSBub2Rlcy4gQW5kIHdlIGRvbid0IHdhbnQgdGhhdC4KKwkgKgorCSAqIEJ1dCBldmVu IHdpdGggaHVnZSBwYWdlcyBpdCBzZWVtcyBsaWtlIGEgZ29vZCBpZGVhIHRvIG5vdCBoYXZl IG1hcHBpbmcKKwkgKiBmb3IgZWFjaCBwYWdlLgorCSAqCisJICogU28gd2UgYWx3YXlzIGFz c2lnbiBhIGxhcmdlciBjb250aWd1b3VzIGNodW5rIG9mIGJ1ZmZlcnMgdG8gdGhlIHNhbWUK KwkgKiBOVU1BIG5vZGUsIGFzIGNhbGN1bGF0ZWQgYnkgY2hvb3NlX2NodW5rX2J1ZmZlcnMo KS4gV2UgdHJ5IHRvIGtlZXAgdGhlCisJICogY2h1bmtzIGxhcmdlIGVub3VnaCB0byB3b3Jr IGJvdGggZm9yIGJ1ZmZlcnMgYW5kIGJ1ZmZlciBkZXNjcmlwdG9ycywKKwkgKiBidXQgbm90 IHRvbyBsYXJnZS4gU2VlIHRoZSBjb21tZW50cyBhdCBjaG9vc2VfY2h1bmtfYnVmZmVycygp IGZvcgorCSAqIGRldGFpbHMuCisJICoKKwkgKiBUaGFua3MgdG8gdGhlIGVhcmxpZXIgYWxp Z25tZW50ICh0byBtZW1vcnkgcGFnZSBldGMuKSwgd2Uga25vdyB0aGUKKwkgKiBidWZmZXJz IHdvbid0IGdldCBzcGxpdCwgZXRjLgorCSAqCisJICogVGhpcyBhbHNvIG1ha2VzIGl0IGVh c2llciAvIHN0cmFpZ2h0Zm9yd2FyZCB0byBjYWxjdWxhdGUgd2hpY2ggTlVNQQorCSAqIG5v ZGUgYSBidWZmZXIgYmVsb25ncyB0byAoaXQncyBhIG1hdHRlciBvZiBkaXZpZGUgKyBtb2Qp LiBTZWUKKwkgKiBCdWZmZXJHZXROb2RlKCkuCisJICoKKwkgKiBXZSBuZWVkIHRvIGFjY291 bnQgZm9yIHBhcnRpdGlvbnMgYmVpbmcgb2YgZGlmZmVyZW50IGxlbmd0aCwgd2hlbiB0aGUK KwkgKiBOQnVmZmVycyBpcyBub3QgbmljZWx5IGRpdmlzaWJsZS4gVG8gZG8gdGhhdCB3ZSBr ZWVwIHRyYWNrIG9mIHRoZSBzdGFydAorCSAqIG9mIHRoZSBuZXh0IHBhcnRpdGlvbi4KKwkg Ki8KKwlidWZmZXJzX3B0ciA9IEJ1ZmZlckJsb2NrczsKKwlkZXNjcmlwdG9yc19wdHIgPSAo Y2hhciAqKSBCdWZmZXJEZXNjcmlwdG9yczsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVt YV9wYXJ0aXRpb25zOyBpKyspCisJeworCQlCdWZmZXJQYXJ0aXRpb24gKnBhcnQgPSAmQnVm ZmVyUGFydGl0aW9uc0FycmF5LT5wYXJ0aXRpb25zW2ldOworCQljaGFyCSAgICpzdGFydHB0 ciwKKwkJCQkgICAqZW5kcHRyOworCisJCS8qIGZpcnN0IG1hcCBidWZmZXJzICovCisJCXN0 YXJ0cHRyID0gYnVmZmVyc19wdHI7CisJCWVuZHB0ciA9IHN0YXJ0cHRyICsgKChTaXplKSBw YXJ0LT5udW1fYnVmZmVycyAqIEJMQ0tTWik7CisJCWJ1ZmZlcnNfcHRyID0gZW5kcHRyOwkv KiBzdGFydCBvZiB0aGUgbmV4dCBwYXJ0aXRpb24gKi8KKworCQllbG9nKERFQlVHMSwgIk5V TUE6IGJ1ZmZlcl9wYXJ0aXRpb25zX2luaXQ6ICVkID0+ICVkIGJ1ZmZlcnMgJWQgc3RhcnQg JXAgZW5kICVwIChzaXplICV6ZCkiLAorCQkJIGksIHBhcnQtPm51bWFfbm9kZSwgcGFydC0+ bnVtX2J1ZmZlcnMsIHN0YXJ0cHRyLCBlbmRwdHIsIChlbmRwdHIgLSBzdGFydHB0cikpOwor CisJCXBnX251bWFfbW92ZV90b19ub2RlKHN0YXJ0cHRyLCBlbmRwdHIsIHBhcnQtPm51bWFf bm9kZSk7CisKKwkJLyogbm93IGRvIHRoZSBzYW1lIGZvciBidWZmZXIgZGVzY3JpcHRvcnMg Ki8KKwkJc3RhcnRwdHIgPSBkZXNjcmlwdG9yc19wdHI7CisJCWVuZHB0ciA9IHN0YXJ0cHRy ICsgKChTaXplKSBwYXJ0LT5udW1fYnVmZmVycyAqIHNpemVvZihCdWZmZXJEZXNjUGFkZGVk KSk7CisJCWRlc2NyaXB0b3JzX3B0ciA9IGVuZHB0cjsKKworCQllbG9nKERFQlVHMSwgIk5V TUE6IGJ1ZmZlcl9wYXJ0aXRpb25zX2luaXQ6ICVkID0+ICVkIGRlc2NyaXB0b3JzICVkIHN0 YXJ0ICVwIGVuZCAlcCAoc2l6ZSAlemQpIiwKKwkJCSBpLCBwYXJ0LT5udW1hX25vZGUsIHBh cnQtPm51bV9idWZmZXJzLCBzdGFydHB0ciwgZW5kcHRyLCAoZW5kcHRyIC0gc3RhcnRwdHIp KTsKKworCQlwZ19udW1hX21vdmVfdG9fbm9kZShzdGFydHB0ciwgZW5kcHRyLCBwYXJ0LT5u dW1hX25vZGUpOworCX0KKworCS8qIHdlIHNob3VsZCBoYXZlIGNvbnN1bWVkIHRoZSBhcnJh eXMgZXhhY3RseSAqLworCUFzc2VydChidWZmZXJzX3B0ciA9PSBCdWZmZXJCbG9ja3MgKyAo U2l6ZSkgTkJ1ZmZlcnMgKiBCTENLU1opOworCUFzc2VydChkZXNjcmlwdG9yc19wdHIgPT0g KGNoYXIgKikgQnVmZmVyRGVzY3JpcHRvcnMgKyAoU2l6ZSkgTkJ1ZmZlcnMgKiBzaXplb2Yo QnVmZmVyRGVzY1BhZGRlZCkpOworfQorCitpbnQKK0J1ZmZlclBhcnRpdGlvbkNvdW50KHZv aWQpCit7CisJcmV0dXJuIEJ1ZmZlclBhcnRpdGlvbnNBcnJheS0+bnBhcnRpdGlvbnM7Cit9 CisKK2ludAorQnVmZmVyUGFydGl0aW9uTm9kZXModm9pZCkKK3sKKwlyZXR1cm4gQnVmZmVy UGFydGl0aW9uc0FycmF5LT5ubm9kZXM7Cit9CisKK3ZvaWQKK0J1ZmZlclBhcnRpdGlvbkdl dChpbnQgaWR4LCBpbnQgKm5vZGUsIGludCAqbnVtX2J1ZmZlcnMsCisJCQkJICAgaW50ICpm aXJzdF9idWZmZXIsIGludCAqbGFzdF9idWZmZXIpCit7CisJaWYgKChpZHggPj0gMCkgJiYg KGlkeCA8IEJ1ZmZlclBhcnRpdGlvbnNBcnJheS0+bnBhcnRpdGlvbnMpKQorCXsKKwkJQnVm ZmVyUGFydGl0aW9uICpwYXJ0ID0gJkJ1ZmZlclBhcnRpdGlvbnNBcnJheS0+cGFydGl0aW9u c1tpZHhdOworCisJCSpub2RlID0gcGFydC0+bnVtYV9ub2RlOworCQkqbnVtX2J1ZmZlcnMg PSBwYXJ0LT5udW1fYnVmZmVyczsKKwkJKmZpcnN0X2J1ZmZlciA9IHBhcnQtPmZpcnN0X2J1 ZmZlcjsKKwkJKmxhc3RfYnVmZmVyID0gcGFydC0+bGFzdF9idWZmZXI7CisKKwkJcmV0dXJu OworCX0KKworCWVsb2coRVJST1IsICJpbnZhbGlkIHBhcnRpdGlvbiBpbmRleCIpOworfQor CisvKiBYWFggdGhlIEdVQyBob29rcyBzaG91bGQgcHJvYmFibHkgYmUgc29tZXdoZXJlIGVs c2U/ICovCitib29sCitjaGVja19kZWJ1Z19udW1hKGNoYXIgKipuZXd2YWwsIHZvaWQgKipl eHRyYSwgR3VjU291cmNlIHNvdXJjZSkKK3sKKwlib29sCQlyZXN1bHQgPSB0cnVlOworCWlu dAkJCWZsYWdzOworCisjaWYgVVNFX0xJQk5VTUEgPT0gMAorCWlmIChzdHJjbXAoKm5ld3Zh bCwgIiIpICE9IDApCisJeworCQlHVUNfY2hlY2tfZXJyZGV0YWlsKCJcIiVzXCIgaXMgbm90 IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIsCisJCQkJCQkJImRlYnVnX251bWEiKTsK KwkJcmVzdWx0ID0gZmFsc2U7CisJfQorCWZsYWdzID0gMDsKKyNlbHNlCisJTGlzdAkgICAq ZWxlbWxpc3Q7CisJTGlzdENlbGwgICAqbDsKKwljaGFyCSAgICpyYXdzdHJpbmc7CisKKwkv KiBOZWVkIGEgbW9kaWZpYWJsZSBjb3B5IG9mIHN0cmluZyAqLworCXJhd3N0cmluZyA9IHBz dHJkdXAoKm5ld3ZhbCk7CisKKwlpZiAoIVNwbGl0R1VDTGlzdChyYXdzdHJpbmcsICcsJywg JmVsZW1saXN0KSkKKwl7CisJCUdVQ19jaGVja19lcnJkZXRhaWwoIkludmFsaWQgbGlzdCBz eW50YXggaW4gcGFyYW1ldGVyIFwiJXNcIi4iLAorCQkJCQkJCSJkZWJ1Z19udW1hIik7CisJ CXBmcmVlKHJhd3N0cmluZyk7CisJCWxpc3RfZnJlZShlbGVtbGlzdCk7CisJCXJldHVybiBm YWxzZTsKKwl9CisKKwlmbGFncyA9IDA7CisJZm9yZWFjaChsLCBlbGVtbGlzdCkKKwl7CisJ CWNoYXIJICAgKml0ZW0gPSAoY2hhciAqKSBsZmlyc3QobCk7CisKKwkJaWYgKHBnX3N0cmNh c2VjbXAoaXRlbSwgImJ1ZmZlcnMiKSA9PSAwKQorCQkJZmxhZ3MgfD0gTlVNQV9CVUZGRVJT OworCQllbHNlCisJCXsKKwkJCUdVQ19jaGVja19lcnJkZXRhaWwoIkludmFsaWQgb3B0aW9u IFwiJXNcIi4iLCBpdGVtKTsKKwkJCXJlc3VsdCA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0K Kwl9CisKKwlwZnJlZShyYXdzdHJpbmcpOworCWxpc3RfZnJlZShlbGVtbGlzdCk7CisjZW5k aWYKKworCWlmICghcmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJLyogU2F2ZSB0aGUg ZmxhZ3MgaW4gKmV4dHJhLCBmb3IgdXNlIGJ5IGFzc2lnbl9kZWJ1Z19pb19kaXJlY3QgKi8K KwkqZXh0cmEgPSBndWNfbWFsbG9jKExPRywgc2l6ZW9mKGludCkpOworCWlmICghKmV4dHJh KQorCQlyZXR1cm4gZmFsc2U7CisJKigoaW50ICopICpleHRyYSkgPSBmbGFnczsKKworCXJl dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQKK2Fzc2lnbl9kZWJ1Z19udW1hKGNvbnN0IGNoYXIg Km5ld3ZhbCwgdm9pZCAqZXh0cmEpCit7CisJaW50CQkgICAqZmxhZ3MgPSAoaW50ICopIGV4 dHJhOworCisJbnVtYV9mbGFncyA9ICpmbGFnczsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKaW5kZXggMGRhMDE2MjdjZmUuLmQxODY2NmE5NGNi IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRh dAorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAt ODk5LDYgKzg5OSwxNiBAQAogICBib290X3ZhbCA9PiAndHJ1ZScsCiB9LAogCit7IG5hbWUg PT4gJ2RlYnVnX251bWEnLCB0eXBlID0+ICdzdHJpbmcnLCBjb250ZXh0ID0+ICdQR0NfUE9T VE1BU1RFUicsIGdyb3VwID0+ICdERVZFTE9QRVJfT1BUSU9OUycsCisgIHNob3J0X2Rlc2Mg PT4gJ05VTUEtYXdhcmUgcGFydGl0aW9uaW5nIG9mIHNoYXJlZCBtZW1vcnkuJywKKyAgbG9u Z19kZXNjID0+ICdBbiBlbXB0eSBzdHJpbmcgZGlzYWJsZXMgTlVNQS1hd2FyZSBwYXJ0aXRp b25pbmcuJywKKyAgZmxhZ3MgPT4gJ0dVQ19MSVNUX0lOUFVUIHwgR1VDX05PVF9JTl9TQU1Q TEUnLAorICB2YXJpYWJsZSA9PiAnZGVidWdfbnVtYV9zdHJpbmcnLAorICBib290X3ZhbCA9 PiAnIiInLAorICBjaGVja19ob29rID0+ICdjaGVja19kZWJ1Z19udW1hJywKKyAgYXNzaWdu X2hvb2sgPT4gJ2Fzc2lnbl9kZWJ1Z19udW1hJywKK30sCisKIHsgbmFtZSA9PiAnc3luY19y ZXBsaWNhdGlvbl9zbG90cycsIHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQR0NfU0lH SFVQJywgZ3JvdXAgPT4gJ1JFUExJQ0FUSU9OX1NUQU5EQlknLAogICBzaG9ydF9kZXNjID0+ ICdFbmFibGVzIGEgcGh5c2ljYWwgc3RhbmRieSB0byBzeW5jaHJvbml6ZSBsb2dpY2FsIGZh aWxvdmVyIHJlcGxpY2F0aW9uIHNsb3RzIGZyb20gdGhlIHByaW1hcnkgc2VydmVyLicsCiAg IHZhcmlhYmxlID0+ICdzeW5jX3JlcGxpY2F0aW9uX3Nsb3RzJywKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9ndWNfdGFibGVzLmMKaW5kZXggMDBjODM3NmNmNGQuLmQxN2VlOWNhODYxIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAtNTk1LDYgKzU5NSw3IEBAIHN0 YXRpYyBjaGFyICpzZXJ2ZXJfdmVyc2lvbl9zdHJpbmc7CiBzdGF0aWMgaW50CXNlcnZlcl92 ZXJzaW9uX251bTsKIHN0YXRpYyBjaGFyICpkZWJ1Z19pb19kaXJlY3Rfc3RyaW5nOwogc3Rh dGljIGNoYXIgKnJlc3RyaWN0X25vbnN5c3RlbV9yZWxhdGlvbl9raW5kX3N0cmluZzsKK3N0 YXRpYyBjaGFyICpkZWJ1Z19udW1hX3N0cmluZzsKIAogI2lmZGVmIEhBVkVfU1lTTE9HCiAj ZGVmaW5lCURFRkFVTFRfU1lTTE9HX0ZBQ0lMSVRZIExPR19MT0NBTDAKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3BvcnQvcGdfbnVtYS5oIGIvc3JjL2luY2x1ZGUvcG9ydC9wZ19udW1h LmgKaW5kZXggOWQxZWE2ZDBkYjguLjk3MzRhYTMxNWZmIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9wb3J0L3BnX251bWEuaAorKysgYi9zcmMvaW5jbHVkZS9wb3J0L3BnX251bWEuaApA QCAtMTcsNiArMTcsMTIgQEAKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgcGdfbnVtYV9pbml0 KHZvaWQpOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBwZ19udW1hX3F1ZXJ5X3BhZ2VzKGlu dCBwaWQsIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKipwYWdlcywgaW50ICpzdGF0dXMp OwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBwZ19udW1hX2dldF9tYXhfbm9kZSh2b2lkKTsK K2V4dGVybiBQR0RMTElNUE9SVCBTaXplIHBnX251bWFfcGFnZV9zaXplKHZvaWQpOworZXh0 ZXJuIFBHRExMSU1QT1JUIHZvaWQgcGdfbnVtYV9tb3ZlX3RvX25vZGUoY2hhciAqc3RhcnRw dHIsIGNoYXIgKmVuZHB0ciwgaW50IG5vZGUpOworCitleHRlcm4gUEdETExJTVBPUlQgaW50 IG51bWFfZmxhZ3M7CisKKyNkZWZpbmUJCU5VTUFfQlVGRkVSUwkJMHgwMQogCiAjaWZkZWYg VVNFX0xJQk5VTUEKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50 ZXJuYWxzLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaAppbmRleCBk ZmQ2MTRmN2NhNC4uMjk0MTg4ZTIxYzUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvYnVmX2ludGVybmFscy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVy bmFscy5oCkBAIC0yNzUsMTAgKzI3NSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBCdWZmZXJEZXNj CiAgKiBsaW5lIHNpemVkLgogICoKICAqIFhYWDogQXMgdGhpcyBpcyBwcmltYXJpbHkgbWF0 dGVycyBpbiBoaWdobHkgY29uY3VycmVudCB3b3JrbG9hZHMgd2hpY2gKLSAqIHByb2JhYmx5 IGFsbCBhcmUgNjRiaXQgdGhlc2UgZGF5cywgYW5kIHRoZSBzcGFjZSB3YXN0YWdlIHdvdWxk IGJlIGEgYml0Ci0gKiBtb3JlIG5vdGljZWFibGUgb24gMzJiaXQgc3lzdGVtcywgd2UgZG9u J3QgZm9yY2UgdGhlIHN0cmlkZSB0byBiZSBjYWNoZQotICogbGluZSBzaXplZCBvbiB0aG9z ZS4gSWYgc29tZWJvZHkgZG9lcyBhY3R1YWwgcGVyZm9ybWFuY2UgdGVzdGluZywgd2UgY2Fu Ci0gKiByZWV2YWx1YXRlLgorICogcHJvYmFibHkgYWxsIGFyZSA2NGJpdCB0aGVzZSBkYXlz LiBXZSBmb3JjZSB0aGUgc3RyaWRlIHRvIGJlIGNhY2hlIGxpbmUKKyAqIHNpemVkIGV2ZW4g b24gMzJiaXQgc3lzdGVtcywgd2hlcmUgdGhlIHNwYWNlIHdhc3RhZ2UgaXMgYmUgYSBiaXQg bW9yZQorICogbm90aWNlYWJsZSwgdG8gYWxsb3cgcGFydGl0aW9uaW5nIG9mIHNoYXJlZCBi dWZmZXJzICh3aGljaCByZXF1aXJlcyB0aGUKKyAqIG1lbW9yeSBwYWdlIGJlIGEgbXVsdGlw bGUgb2YgYnVmZmVyIGRlc2NyaXB0b3IpLgogICoKICAqIE5vdGUgdGhhdCBsb2NhbCBidWZm ZXIgZGVzY3JpcHRvcnMgYXJlbid0IGZvcmNlZCB0byBiZSBhbGlnbmVkIC0gYXMgdGhlcmUn cwogICogbm8gY29uY3VycmVudCBhY2Nlc3MgdG8gdGhvc2UgaXQncyB1bmxpa2VseSB0byBi ZSBiZW5lZmljaWFsLgpAQCAtMjg4LDcgKzI4OCw3IEBAIHR5cGVkZWYgc3RydWN0IEJ1ZmZl ckRlc2MKICAqIHBsYXRmb3JtIHdpdGggZWl0aGVyIDMyIG9yIDEyOCBieXRlIGxpbmUgc2l6 ZXMsIGl0J3MgZ29vZCB0byBhbGlnbiB0bwogICogYm91bmRhcmllcyBhbmQgYXZvaWQgZmFs c2Ugc2hhcmluZy4KICAqLwotI2RlZmluZSBCVUZGRVJERVNDX1BBRF9UT19TSVpFCShTSVpF T0ZfVk9JRF9QID09IDggPyA2NCA6IDEpCisjZGVmaW5lIEJVRkZFUkRFU0NfUEFEX1RPX1NJ WkUJNjQKIAogdHlwZWRlZiB1bmlvbiBCdWZmZXJEZXNjUGFkZGVkCiB7CkBAIC0zMjEsNiAr MzIxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgV3JpdGViYWNrQ29udGV4dAogCiAvKiBpbiBidWZf aW5pdC5jICovCiBleHRlcm4gUEdETExJTVBPUlQgQnVmZmVyRGVzY1BhZGRlZCAqQnVmZmVy RGVzY3JpcHRvcnM7CitleHRlcm4gUEdETExJTVBPUlQgQnVmZmVyUGFydGl0aW9ucyAqQnVm ZmVyUGFydGl0aW9uc0FycmF5OwogZXh0ZXJuIFBHRExMSU1QT1JUIENvbmRpdGlvblZhcmlh YmxlTWluaW1hbGx5UGFkZGVkICpCdWZmZXJJT0NWQXJyYXk7CiBleHRlcm4gUEdETExJTVBP UlQgV3JpdGViYWNrQ29udGV4dCBCYWNrZW5kV3JpdGViYWNrQ29udGV4dDsKIApAQCAtNDgw LDQgKzQ4MSw5IEBAIGV4dGVybiB2b2lkIERyb3BSZWxhdGlvbkxvY2FsQnVmZmVycyhSZWxG aWxlTG9jYXRvciBybG9jYXRvciwKIGV4dGVybiB2b2lkIERyb3BSZWxhdGlvbkFsbExvY2Fs QnVmZmVycyhSZWxGaWxlTG9jYXRvciBybG9jYXRvcik7CiBleHRlcm4gdm9pZCBBdEVPWGFj dF9Mb2NhbEJ1ZmZlcnMoYm9vbCBpc0NvbW1pdCk7CiAKK2V4dGVybiBpbnQJQnVmZmVyUGFy dGl0aW9uQ291bnQodm9pZCk7CitleHRlcm4gaW50CUJ1ZmZlclBhcnRpdGlvbk5vZGVzKHZv aWQpOworZXh0ZXJuIHZvaWQgQnVmZmVyUGFydGl0aW9uR2V0KGludCBpZHgsIGludCAqbm9k ZSwgaW50ICpudW1fYnVmZmVycywKKwkJCQkJCQkgICBpbnQgKmZpcnN0X2J1ZmZlciwgaW50 ICpsYXN0X2J1ZmZlcik7CisKICNlbmRpZgkJCQkJCQkvKiBCVUZNR1JfSU5URVJOQUxTX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmggYi9zcmMvaW5j bHVkZS9zdG9yYWdlL2J1Zm1nci5oCmluZGV4IDQxZmRjMWU3NjkzLi5lNTJmY2E5ZTQ4MyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAorKysgYi9zcmMvaW5j bHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC0xNDMsNiArMTQzLDI4IEBAIHN0cnVjdCBSZWFk QnVmZmVyc09wZXJhdGlvbgogCiB0eXBlZGVmIHN0cnVjdCBSZWFkQnVmZmVyc09wZXJhdGlv biBSZWFkQnVmZmVyc09wZXJhdGlvbjsKIAorLyoKKyAqIGluZm9ybWF0aW9uIGFib3V0IG9u ZSBwYXJ0aXRpb24gb2Ygc2hhcmVkIGJ1ZmZlcnMKKyAqCisgKiBudW1hX25vZCBzcGVjaWZp ZXMgbm9kZSBmb3IgdGhpcyBwYXJ0aXRpb24gKC0xIG1lYW5zIGFsbG9jYXRlZCBvbiBhbnkg bm9kZSkKKyAqIGZpcnN0L2xhc3QgYnVmZmVyIC0gdGhlIHZhbHVlcyBhcmUgaW5jbHVzaXZl CisgKi8KK3R5cGVkZWYgc3RydWN0IEJ1ZmZlclBhcnRpdGlvbgoreworCWludAkJCW51bWFf bm9kZTsJCS8qIE5VTUEgbm9kZSAoLTEgbm8gbm9kZSkgKi8KKwlpbnQJCQludW1fYnVmZmVy czsJLyogbnVtYmVyIG9mIGJ1ZmZlcnMgKi8KKwlpbnQJCQlmaXJzdF9idWZmZXI7CS8qIGZp cnN0IGJ1ZmZlciBvZiBwYXJ0aXRpb24gKi8KKwlpbnQJCQlsYXN0X2J1ZmZlcjsJLyogbGFz dCBidWZmZXIgb2YgcGFydGl0aW9uICovCit9IEJ1ZmZlclBhcnRpdGlvbjsKKworLyogYW4g YXJyYXkgb2YgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHBhcnRpdGlvbnMgKi8KK3R5cGVkZWYg c3RydWN0IEJ1ZmZlclBhcnRpdGlvbnMKK3sKKwlpbnQJCQlucGFydGl0aW9uczsJLyogbnVt YmVyIG9mIHBhcnRpdGlvbnMgKi8KKwlpbnQJCQlubm9kZXM7CQkJLyogbnVtYmVyIG9mIE5V TUEgbm9kZXMgKi8KKwlCdWZmZXJQYXJ0aXRpb24gcGFydGl0aW9uc1tGTEVYSUJMRV9BUlJB WV9NRU1CRVJdOworfSBCdWZmZXJQYXJ0aXRpb25zOworCiAvKiBmb3J3YXJkIGRlY2xhcmVk LCB0byBhdm9pZCBoYXZpbmcgdG8gZXhwb3NlIGJ1Zl9pbnRlcm5hbHMuaCBoZXJlICovCiBz dHJ1Y3QgV3JpdGViYWNrQ29udGV4dDsKIApAQCAtMzE5LDYgKzM0MSw3IEBAIGV4dGVybiB2 b2lkIEV2aWN0UmVsVW5waW5uZWRCdWZmZXJzKFJlbGF0aW9uIHJlbCwKIC8qIGluIGJ1Zl9p bml0LmMgKi8KIGV4dGVybiB2b2lkIEJ1ZmZlck1hbmFnZXJTaG1lbUluaXQodm9pZCk7CiBl eHRlcm4gU2l6ZSBCdWZmZXJNYW5hZ2VyU2htZW1TaXplKHZvaWQpOworZXh0ZXJuIGludAlC dWZmZXJHZXROb2RlKEJ1ZmZlciBidWZmZXIpOwogCiAvKiBpbiBsb2NhbGJ1Zi5jICovCiBl eHRlcm4gdm9pZCBBdFByb2NFeGl0X0xvY2FsQnVmZmVycyh2b2lkKTsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3V0aWxzL2d1Y19ob29rcy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvZ3Vj X2hvb2tzLmgKaW5kZXggODJhYzg2NDZhOGQuLjE1MzA0ZGYwZGU1IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS91dGlscy9ndWNfaG9va3MuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9n dWNfaG9va3MuaApAQCAtMTc1LDQgKzE3NSw3IEBAIGV4dGVybiBib29sIGNoZWNrX3N5bmNo cm9uaXplZF9zdGFuZGJ5X3Nsb3RzKGNoYXIgKipuZXd2YWwsIHZvaWQgKipleHRyYSwKIAkJ CQkJCQkJCQkJIEd1Y1NvdXJjZSBzb3VyY2UpOwogZXh0ZXJuIHZvaWQgYXNzaWduX3N5bmNo cm9uaXplZF9zdGFuZGJ5X3Nsb3RzKGNvbnN0IGNoYXIgKm5ld3ZhbCwgdm9pZCAqZXh0cmEp OwogCitleHRlcm4gYm9vbCBjaGVja19kZWJ1Z19udW1hKGNoYXIgKipuZXd2YWwsIHZvaWQg KipleHRyYSwgR3VjU291cmNlIHNvdXJjZSk7CitleHRlcm4gdm9pZCBhc3NpZ25fZGVidWdf bnVtYShjb25zdCBjaGFyICpuZXd2YWwsIHZvaWQgKmV4dHJhKTsKKwogI2VuZGlmCQkJCQkJ CS8qIEdVQ19IT09LU19IICovCmRpZmYgLS1naXQgYS9zcmMvcG9ydC9wZ19udW1hLmMgYi9z cmMvcG9ydC9wZ19udW1hLmMKaW5kZXggMzM2OGE0M2EzMzguLjhlZTBlN2QyMTFjIDEwMDY0 NAotLS0gYS9zcmMvcG9ydC9wZ19udW1hLmMKKysrIGIvc3JjL3BvcnQvcGdfbnVtYS5jCkBA IC0xOCw2ICsxOCw5IEBACiAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJw b3J0L3BnX251bWEuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3BnX3NobWVtLmgiCisKK2ludAlu dW1hX2ZsYWdzOwogCiAvKgogICogQXQgdGhpcyBwb2ludCB3ZSBwcm92aWRlIHN1cHBvcnQg b25seSBmb3IgTGludXggdGhhbmtzIHRvIGxpYm51bWEsIGJ1dCBpbgpAQCAtMTA2LDYgKzEw OSwzNiBAQCBwZ19udW1hX2dldF9tYXhfbm9kZSh2b2lkKQogCXJldHVybiBudW1hX21heF9u b2RlKCk7CiB9CiAKKy8qCisgKiBwZ19udW1hX21vdmVfdG9fbm9kZQorICoJCW1vdmUgbWVt b3J5IHRvIGRpZmZlcmVudCBOVU1BIG5vZGVzIGluIGxhcmdlciBjaHVua3MKKyAqCisgKiBz dGFydHB0ciAtIHN0YXJ0IG9mIHRoZSByZWdpb24gKHNob3VsZCBiZSBhbGlnbmVkIHRvIHBh Z2Ugc2l6ZSkKKyAqIGVuZHB0ciAtIGVuZCBvZiB0aGUgcmVnaW9uIChkb2Vzbid0IG5lZWQg dG8gYmUgYWxpZ25lZCkKKyAqIG5vZGUgLSBub2RlIHRvIG1vdmUgdGhlIG1lbW9yeSB0bwor ICoKKyAqIFRoZSAic3RhcnRwdHIiIGlzIGV4cGVjdGVkIHRvIGJlIGEgbXVsdGlwbGUgb2Yg c3lzdGVtIG1lbW9yeSBwYWdlIHNpemUsIGFzCisgKiBkZXRlcm1pbmVkIGJ5IHBnX251bWFf cGFnZV9zaXplLgorICoKKyAqIFhYWCBXZSBvbmx5IGV4cGVjdCB0byBkbyB0aGlzIGR1cmlu ZyBzdGFydHVwLCB3aGVuIHRoZSBzaGFyZWQgbWVtb3J5IGlzCisgKiBzdGlsbCBiZWluZyBz ZXR1cC4KKyAqLwordm9pZAorcGdfbnVtYV9tb3ZlX3RvX25vZGUoY2hhciAqc3RhcnRwdHIs IGNoYXIgKmVuZHB0ciwgaW50IG5vZGUpCit7CisJU2l6ZQkJc3ogPSAoZW5kcHRyIC0gc3Rh cnRwdHIpOworCisJQXNzZXJ0KChpbnQ2NCkgc3RhcnRwdHIgJSBwZ19udW1hX3BhZ2Vfc2l6 ZSgpID09IDApOworCisJLyoKKwkgKiBudW1hX3Rvbm9kZV9tZW1vcnkgZG9lcyBub3QgYWN0 dWFsbHkgY2F1c2UgYSBwYWdlIGZhdWx0LCBhbmQgdGh1cyBkb2VzCisJICogbm90IGxvY2F0 ZSB0aGUgbWVtb3J5IG9uIHRoZSBub2RlLiBTbyBpdCdzIGZhc3QsIGF0IGxlYXN0IGNvbXBh cmVkIHRvCisJICogcGdfbnVtYV9xdWVyeV9wYWdlcywgYW5kIGRvZXMgbm90IG1ha2Ugc3Rh cnR1cCBsb25nZXIuIEJ1dCBpdCBhbHNvCisJICogbWVhbnMgdGhlIGV4cGVuc2l2ZSBwYXJ0 IGhhcHBlbiBsYXRlciwgb24gdGhlIGZpcnN0IGFjY2Vzcy4KKwkgKi8KKwludW1hX3Rvbm9k ZV9tZW1vcnkoc3RhcnRwdHIsIHN6LCBub2RlKTsKK30KKwogI2Vsc2UKIAogLyogRW1wdHkg d3JhcHBlcnMgKi8KQEAgLTEyOCw0ICsxNjEsMzUgQEAgcGdfbnVtYV9nZXRfbWF4X25vZGUo dm9pZCkKIAlyZXR1cm4gMDsKIH0KIAordm9pZAorcGdfbnVtYV9tb3ZlX3RvX25vZGUoY2hh ciAqc3RhcnRwdHIsIGNoYXIgKmVuZHB0ciwgaW50IG5vZGUpCit7CisJLyogd2UgZG9uJ3Qg ZXhwZWN0IHRvIGV2ZXIgZ2V0IGhlcmUgaW4gYnVpbGRzIHdpdGhvdXQgbGlibnVtYSAqLwor CUFzc2VydChmYWxzZSk7Cit9CisKKyNlbmRpZgorCitTaXplCitwZ19udW1hX3BhZ2Vfc2l6 ZSh2b2lkKQoreworCVNpemUJCW9zX3BhZ2Vfc2l6ZTsKKwlTaXplCQlodWdlX3BhZ2Vfc2l6 ZTsKKworI2lmZGVmIFdJTjMyCisJU1lTVEVNX0lORk8gc3lzaW5mbzsKKworCUdldFN5c3Rl bUluZm8oJnN5c2luZm8pOworCW9zX3BhZ2Vfc2l6ZSA9IHN5c2luZm8uZHdQYWdlU2l6ZTsK KyNlbHNlCisJb3NfcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOwogI2VuZGlm CisKKwkvKiBhc3N1bWUgaHVnZSBwYWdlcyBnZXQgdXNlZCwgdW5sZXNzIEhVR0VfUEFHRVNf T0ZGICovCisJaWYgKGh1Z2VfcGFnZXNfc3RhdHVzICE9IEhVR0VfUEFHRVNfT0ZGKQorCQlH ZXRIdWdlUGFnZVNpemUoJmh1Z2VfcGFnZV9zaXplLCBOVUxMKTsKKwllbHNlCisJCWh1Z2Vf cGFnZV9zaXplID0gMDsKKworCXJldHVybiBNYXgob3NfcGFnZV9zaXplLCBodWdlX3BhZ2Vf c2l6ZSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGExM2U4MTYyODkw Li41MDE5NTcxODI5NCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTM0Niw2 ICszNDYsOCBAQCBCdWZmZXJEZXNjUGFkZGVkCiBCdWZmZXJIZWFwVHVwbGVUYWJsZVNsb3QK IEJ1ZmZlckxvb2t1cEVudAogQnVmZmVyTWFuYWdlclJlbGF0aW9uCitCdWZmZXJQYXJ0aXRp b24KK0J1ZmZlclBhcnRpdGlvbnMKIEJ1ZmZlclN0cmF0ZWd5Q29udHJvbAogQnVmZmVyVGFn CiBCdWZmZXJVc2FnZQotLSAKMi41MS4wCgo= --------------i0MMC9nLNSRCyrH3GSEb0aRu Content-Type: text/x-patch; charset=UTF-8; name="v20250911-0002-NUMA-clockweep-partitioning.patch" Content-Disposition: attachment; filename="v20250911-0002-NUMA-clockweep-partitioning.patch" Content-Transfer-Encoding: base64 RnJvbSAzOGNjZDkzYjRhNzBkNjVlMTZkYTMzMDNlOWY5NDg1MWMzYTNmYjVhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogU3VuLCA4IEp1biAyMDI1IDE4OjUzOjEyICswMjAwClN1YmplY3Q6IFtQQVRDSCB2 MjAyNTA5MTEgMi84XSBOVU1BOiBjbG9ja3dlZXAgcGFydGl0aW9uaW5nCgpTaW1pbGFyIHRv IHRoZSBmcmVsaXN0IHBhdGNoIC0gcGFydGl0aW9uIHRoZSAiY2xvY2tzd2VlcCIgYWxnb3Jp dGhtIHRvCndvcmsgb24gdGhlIHNlcXVlbmNlIG9mIHNtYWxsZXIgcGFydGl0aW9ucywgb25l IGJ5IG9uZS4KCkl0IGV4dGVuZHMgdGhlICJwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zIiB2 aWV3IHRvIGluY2x1ZGUgaW5mb3JtYXRpb24KYWJvdXQgdGhlIGNsb2Nrc3dlZXAgYWN0aXZp dHkuCgpOb3RlOiBUaGlzIG5lZWRzIHNvbWUgc29ydCBvZiAiYmFsYW5jaW5nIiB3aGVuIG9u ZSBvZiB0aGUgcGFydGl0aW9ucyBpcwptdWNoIGJ1c2llciB0aGFuIHRoZSByZXN0IChlLmcu IGJlY2F1c2UgdGhlcmUncyBhIHNpbmdsZSBiYWNrZW5kIGNvbnN1bWluZwphIGxvdCBvZiBi dWZmZXJzIGZyb20gaXQpLgoKTm90ZTogVGhlcmUncyBhIHByb2JsZW0gd2l0aCBzb21lIHRl c3RzIHJ1bm5pbmcgb3V0IG9mIHVucGlubmVkIGJ1ZmZlcnMsCmR1ZSB0byAoaW50ZW50aW9u YWxseSkgc2V0dGluZyBzaGFyZWQgYnVmZmVycyB2ZXJ5IGxvdy4gVGhhdCBoYXBwZW5zCmJl Y2F1c2UgU3RyYXRlZ3lHZXRCdWZmZXIoKSBvbmx5IHNlYXJjaGVzIGEgc2luZ2xlIHBhcnRp dGlvbiwgYW5kIGl0CmhhcyBhIGNvdXBsZSBtb3JlIGlzc3Vlcy4KLS0tCiAuLi4vcGdfYnVm ZmVyY2FjaGUtLTEuNi0tMS43LnNxbCAgICAgICAgICAgICAgfCAgIDggKy0KIGNvbnRyaWIv cGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYyB8ICAzMiArLQogc3JjL2Jh Y2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYyAgICAgICAgIHwgIDExICsKIHNyYy9i YWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jICAgICAgICAgICB8IDE4NiArKysrKy0t LS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMgICAgICAgICB8IDM1 MyArKysrKysrKysrKysrKysrLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFs cy5oICAgICAgICAgICB8ICAgNSArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAg ICAgICAgICAgICAgICAgIHwgICA1ICsKIHNyYy90ZXN0L3JlY292ZXJ5L3QvMDI3X3N0cmVh bV9yZWdyZXNzLnBsICAgICB8ICAgNSArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCAgICAgICAgICAgICAgfCAgIDEgKwogOSBmaWxlcyBjaGFuZ2VkLCA1MDMgaW5zZXJ0 aW9ucygrKSwgMTAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYnVm ZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbCBiL2NvbnRyaWIvcGdfYnVm ZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbAppbmRleCBmYjkwMDNjMDEx ZS4uNjY3NmU4MDcwMzQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdf YnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbAorKysgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hl L3BnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwKQEAgLTE2LDcgKzE2LDEzIEBAIENSRUFU RSBWSUVXIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMgQVMKIAkgbnVtYV9ub2RlIGludGVn ZXIsCQkJLS0gTlVNQSBub2RlIG9mIHRoZSBwYXJ0aXRpb29uCiAJIG51bV9idWZmZXJzIGlu dGVnZXIsCQktLSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcGFydGl0aW9uCiAJIGZpcnN0 X2J1ZmZlciBpbnRlZ2VyLAkJLS0gZmlyc3QgYnVmZmVyIG9mIHBhcnRpdGlvbgotCSBsYXN0 X2J1ZmZlciBpbnRlZ2VyKTsJCS0tIGxhc3QgYnVmZmVyIG9mIHBhcnRpdGlvbgorCSBsYXN0 X2J1ZmZlciBpbnRlZ2VyLAkJLS0gbGFzdCBidWZmZXIgb2YgcGFydGl0aW9uCisKKwkgLS0g Y2xvY2tzd2VlcCBjb3VudGVycworCSBudW1fcGFzc2VzIGJpZ2ludCwJCQktLSBjbG9ja3N3 ZWVwIHBhc3NlcworCSBuZXh0X2J1ZmZlciBpbnRlZ2VyLAkJLS0gbmV4dCB2aWN0aW0gYnVm ZmVyIGZvciBjbG9ja3N3ZWVwCisJIHRvdGFsX2FsbG9jcyBiaWdpbnQsCQktLSBoYW5kbGVk IGFsbG9jcyAocnVubmluZyB0b3RhbCkKKwkgbnVtX2FsbG9jcyBiaWdpbnQpOwkJLS0gaGFu ZGxlZCBhbGxvY3MgKGN1cnJlbnQgY3ljbGUpCiAKIC0tIERvbid0IHdhbnQgdGhlc2UgdG8g YmUgYXZhaWxhYmxlIHRvIHB1YmxpYy4KIFJFVk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfYnVm ZmVyY2FjaGVfcGFydGl0aW9ucygpIEZST00gUFVCTElDOwpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jIGIvY29udHJpYi9wZ19i dWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jCmluZGV4IDhhMGE0YmQ1Y2Q2Li5j OWRmYzhhMWI4MiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZm ZXJjYWNoZV9wYWdlcy5jCisrKyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVy Y2FjaGVfcGFnZXMuYwpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBOVU1fQlVGRkVSQ0FD SEVfRVZJQ1RfQUxMX0VMRU0gMwogCiAjZGVmaW5lIE5VTV9CVUZGRVJDQUNIRV9OVU1BX0VM RU0JMwotI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19FTEVNCTUKKyNkZWZp bmUgTlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTQk5CiAKIFBHX01PRFVMRV9NQUdJ Q19FWFQoCiAJCQkJCS5uYW1lID0gInBnX2J1ZmZlcmNhY2hlIiwKQEAgLTgxOCw2ICs4MTgs MTQgQEAgcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQkJ CQkJICAgSU5UNE9JRCwgLTEsIDApOwogCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNj LCAoQXR0ck51bWJlcikgNSwgImxhc3RfYnVmZmVyIiwKIAkJCQkJCSAgIElOVDRPSUQsIC0x LCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDYs ICJudW1fcGFzc2VzIiwKKwkJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNj SW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDcsICJuZXh0X2J1ZmZlciIsCisJ CQkJCQkgICBJTlQ0T0lELCAtMSwgMCk7CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRl c2MsIChBdHRyTnVtYmVyKSA4LCAidG90YWxfYWxsb2NzIiwKKwkJCQkJCSAgIElOVDhPSUQs IC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIp IDksICJudW1fYWxsb2NzIiwKKwkJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKIAogCQlmdW5j Y3R4LT51c2VyX2ZjdHggPSBCbGVzc1R1cGxlRGVzYyh0dXBsZWRlc2MpOwogCkBAIC04Mzks MTIgKzg0NywyMiBAQCBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FS R1MpCiAJCQkJCWZpcnN0X2J1ZmZlciwKIAkJCQkJbGFzdF9idWZmZXI7CiAKKwkJdWludDY0 CQlidWZmZXJfdG90YWxfYWxsb2NzOworCisJCXVpbnQzMgkJY29tcGxldGVfcGFzc2VzLAor CQkJCQluZXh0X3ZpY3RpbV9idWZmZXIsCisJCQkJCWJ1ZmZlcl9hbGxvY3M7CisKIAkJRGF0 dW0JCXZhbHVlc1tOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19FTEVNXTsKIAkJYm9vbAkJ bnVsbHNbTlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTV07CiAKIAkJQnVmZmVyUGFy dGl0aW9uR2V0KGksICZudW1hX25vZGUsICZudW1fYnVmZmVycywKIAkJCQkJCSAgICZmaXJz dF9idWZmZXIsICZsYXN0X2J1ZmZlcik7CiAKKwkJQ2xvY2tTd2VlcFBhcnRpdGlvbkdldElu Zm8oaSwKKwkJCQkJCQkJICAgJmNvbXBsZXRlX3Bhc3NlcywgJm5leHRfdmljdGltX2J1ZmZl ciwKKwkJCQkJCQkJICAgJmJ1ZmZlcl90b3RhbF9hbGxvY3MsICZidWZmZXJfYWxsb2NzKTsK KwogCQl2YWx1ZXNbMF0gPSBJbnQzMkdldERhdHVtKGkpOwogCQludWxsc1swXSA9IGZhbHNl OwogCkBAIC04NjAsNiArODc4LDE4IEBAIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoUEdf RlVOQ1RJT05fQVJHUykKIAkJdmFsdWVzWzRdID0gSW50MzJHZXREYXR1bShsYXN0X2J1ZmZl cik7CiAJCW51bGxzWzRdID0gZmFsc2U7CiAKKwkJdmFsdWVzWzVdID0gSW50NjRHZXREYXR1 bShjb21wbGV0ZV9wYXNzZXMpOworCQludWxsc1s1XSA9IGZhbHNlOworCisJCXZhbHVlc1s2 XSA9IEludDMyR2V0RGF0dW0obmV4dF92aWN0aW1fYnVmZmVyKTsKKwkJbnVsbHNbNl0gPSBm YWxzZTsKKworCQl2YWx1ZXNbN10gPSBJbnQ2NEdldERhdHVtKGJ1ZmZlcl90b3RhbF9hbGxv Y3MpOworCQludWxsc1s3XSA9IGZhbHNlOworCisJCXZhbHVlc1s4XSA9IEludDY0R2V0RGF0 dW0oYnVmZmVyX2FsbG9jcyk7CisJCW51bGxzWzhdID0gZmFsc2U7CisKIAkJLyogQnVpbGQg YW5kIHJldHVybiB0aGUgdHVwbGUuICovCiAJCXR1cGxlID0gaGVhcF9mb3JtX3R1cGxlKChU dXBsZURlc2MpIGZ1bmNjdHgtPnVzZXJfZmN0eCwgdmFsdWVzLCBudWxscyk7CiAJCXJlc3Vs dCA9IEhlYXBUdXBsZUdldERhdHVtKHR1cGxlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZl ci9idWZfaW5pdC5jCmluZGV4IGY1MWM3ZGI3ODU1Li5kZDlmNTE1MjliNCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYworKysgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCkBAIC03MTYsNiArNzE2LDE3IEBAIEJ1 ZmZlclBhcnRpdGlvbkdldChpbnQgaWR4LCBpbnQgKm5vZGUsIGludCAqbnVtX2J1ZmZlcnMs CiAJZWxvZyhFUlJPUiwgImludmFsaWQgcGFydGl0aW9uIGluZGV4Iik7CiB9CiAKKy8qIHJl dHVybiBwYXJhbWV0ZXJzIGJlZm9yZSB0aGUgcGFydGl0aW9ucyBhcmUgaW5pdGlhbGl6ZWQg KGR1cmluZyBzaXppbmcpICovCit2b2lkCitCdWZmZXJQYXJ0aXRpb25QYXJhbXMoaW50ICpu dW1fcGFydGl0aW9ucywgaW50ICpudW1fbm9kZXMpCit7CisJaWYgKG51bV9wYXJ0aXRpb25z KQorCQkqbnVtX3BhcnRpdGlvbnMgPSBudW1hX3BhcnRpdGlvbnM7CisKKwlpZiAobnVtX25v ZGVzKQorCQkqbnVtX25vZGVzID0gbnVtYV9ub2RlczsKK30KKwogLyogWFhYIHRoZSBHVUMg aG9va3Mgc2hvdWxkIHByb2JhYmx5IGJlIHNvbWV3aGVyZSBlbHNlPyAqLwogYm9vbAogY2hl Y2tfZGVidWdfbnVtYShjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBz b3VyY2UpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3Iu YyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4IGZlNDcwZGU2 M2YyLi4xMjExMzRiYjk0YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMK QEAgLTM1ODAsMzMgKzM1ODAsMjkgQEAgQnVmZmVyU3luYyhpbnQgZmxhZ3MpCiB9CiAKIC8q Ci0gKiBCZ0J1ZmZlclN5bmMgLS0gV3JpdGUgb3V0IHNvbWUgZGlydHkgYnVmZmVycyBpbiB0 aGUgcG9vbC4KKyAqIEluZm9ybWF0aW9uIHNhdmVkIGJldHdlZW4gY2FsbHMgc28gd2UgY2Fu IGRldGVybWluZSB0aGUgc3RyYXRlZ3kKKyAqIHBvaW50J3MgYWR2YW5jZSByYXRlIGFuZCBh dm9pZCBzY2FubmluZyBhbHJlYWR5LWNsZWFuZWQgYnVmZmVycy4KICAqCi0gKiBUaGlzIGlz IGNhbGxlZCBwZXJpb2RpY2FsbHkgYnkgdGhlIGJhY2tncm91bmQgd3JpdGVyIHByb2Nlc3Mu CisgKiBYWFggT25lIHZhbHVlIHBlciBwYXJ0aXRpb24uIFdlIGRvbid0IGtub3cgaG93IG1h bnkgcGFydGl0aW9ucyBhcmUKKyAqIHRoZXJlLCBzbyBhbGxvY2F0ZSAzMiwgc2hvdWxkIGJl IGVub3VnaCBmb3IgdGhlIFBvQyBwYXRjaC4KICAqCi0gKiBSZXR1cm5zIHRydWUgaWYgaXQn cyBhcHByb3ByaWF0ZSBmb3IgdGhlIGJnd3JpdGVyIHByb2Nlc3MgdG8gZ28gaW50bwotICog bG93LXBvd2VyIGhpYmVybmF0aW9uIG1vZGUuICAoVGhpcyBoYXBwZW5zIGlmIHRoZSBzdHJh dGVneSBjbG9jay1zd2VlcAotICogaGFzIGJlZW4gImxhcHBlZCIgYW5kIG5vIGJ1ZmZlciBh bGxvY2F0aW9ucyBoYXZlIG9jY3VycmVkIHJlY2VudGx5LAotICogb3IgaWYgdGhlIGJnd3Jp dGVyIGhhcyBiZWVuIGVmZmVjdGl2ZWx5IGRpc2FibGVkIGJ5IHNldHRpbmcKLSAqIGJnd3Jp dGVyX2xydV9tYXhwYWdlcyB0byAwLikKKyAqIFhYWCBtaWdodCBiZSBiZXR0ZXIgdG8gaGF2 ZSBhIHBlci1wYXJ0aXRpb24gc3RydWN0IHdpdGggYWxsIHRoZSBpbmZvCiAgKi8KLWJvb2wK LUJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0KQorI2RlZmluZSBN QVhfQ0xPQ0tTV0VFUF9QQVJUSVRJT05TIDMyCitzdGF0aWMgYm9vbCBzYXZlZF9pbmZvX3Zh bGlkID0gZmFsc2U7CitzdGF0aWMgaW50CXByZXZfc3RyYXRlZ3lfYnVmX2lkW01BWF9DTE9D S1NXRUVQX1BBUlRJVElPTlNdOworc3RhdGljIHVpbnQzMiBwcmV2X3N0cmF0ZWd5X3Bhc3Nl c1tNQVhfQ0xPQ0tTV0VFUF9QQVJUSVRJT05TXTsKK3N0YXRpYyBpbnQJbmV4dF90b19jbGVh bltNQVhfQ0xPQ0tTV0VFUF9QQVJUSVRJT05TXTsKK3N0YXRpYyB1aW50MzIgbmV4dF9wYXNz ZXNbTUFYX0NMT0NLU1dFRVBfUEFSVElUSU9OU107CisKKworc3RhdGljIGJvb2wKK0JnQnVm ZmVyU3luY1BhcnRpdGlvbihXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0LCBpbnQgbnVt X3BhcnRpdGlvbnMsCisJCQkJCSAgaW50IHBhcnRpdGlvbiwgaW50IHJlY2VudF9hbGxvY19w YXJ0aXRpb24pCiB7CiAJLyogaW5mbyBvYnRhaW5lZCBmcm9tIGZyZWVsaXN0LmMgKi8KIAlp bnQJCQlzdHJhdGVneV9idWZfaWQ7CiAJdWludDMyCQlzdHJhdGVneV9wYXNzZXM7Ci0JdWlu dDMyCQlyZWNlbnRfYWxsb2M7Ci0KLQkvKgotCSAqIEluZm9ybWF0aW9uIHNhdmVkIGJldHdl ZW4gY2FsbHMgc28gd2UgY2FuIGRldGVybWluZSB0aGUgc3RyYXRlZ3kKLQkgKiBwb2ludCdz IGFkdmFuY2UgcmF0ZSBhbmQgYXZvaWQgc2Nhbm5pbmcgYWxyZWFkeS1jbGVhbmVkIGJ1ZmZl cnMuCi0JICovCi0Jc3RhdGljIGJvb2wgc2F2ZWRfaW5mb192YWxpZCA9IGZhbHNlOwotCXN0 YXRpYyBpbnQJcHJldl9zdHJhdGVneV9idWZfaWQ7Ci0Jc3RhdGljIHVpbnQzMiBwcmV2X3N0 cmF0ZWd5X3Bhc3NlczsKLQlzdGF0aWMgaW50CW5leHRfdG9fY2xlYW47Ci0Jc3RhdGljIHVp bnQzMiBuZXh0X3Bhc3NlczsKIAogCS8qIE1vdmluZyBhdmVyYWdlcyBvZiBhbGxvY2F0aW9u IHJhdGUgYW5kIGNsZWFuLWJ1ZmZlciBkZW5zaXR5ICovCiAJc3RhdGljIGZsb2F0IHNtb290 aGVkX2FsbG9jID0gMDsKQEAgLTM2MzQsMjUgKzM2MzAsMTYgQEAgQmdCdWZmZXJTeW5jKFdy aXRlYmFja0NvbnRleHQgKndiX2NvbnRleHQpCiAJbG9uZwkJbmV3X3N0cmF0ZWd5X2RlbHRh OwogCXVpbnQzMgkJbmV3X3JlY2VudF9hbGxvYzsKIAorCS8qIGJ1ZmZlciByYW5nZSBmb3Ig dGhlIGNsb2Nrc3dlZXAgcGFydGl0aW9uICovCisJaW50CQkJZmlyc3RfYnVmZmVyOworCWlu dAkJCW51bV9idWZmZXJzOworCiAJLyoKIAkgKiBGaW5kIG91dCB3aGVyZSB0aGUgY2xvY2st c3dlZXAgY3VycmVudGx5IGlzLCBhbmQgaG93IG1hbnkgYnVmZmVyCiAJICogYWxsb2NhdGlv bnMgaGF2ZSBoYXBwZW5lZCBzaW5jZSBvdXIgbGFzdCBjYWxsLgogCSAqLwotCXN0cmF0ZWd5 X2J1Zl9pZCA9IFN0cmF0ZWd5U3luY1N0YXJ0KCZzdHJhdGVneV9wYXNzZXMsICZyZWNlbnRf YWxsb2MpOwotCi0JLyogUmVwb3J0IGJ1ZmZlciBhbGxvYyBjb3VudHMgdG8gcGdzdGF0ICov Ci0JUGVuZGluZ0JnV3JpdGVyU3RhdHMuYnVmX2FsbG9jICs9IHJlY2VudF9hbGxvYzsKLQot CS8qCi0JICogSWYgd2UncmUgbm90IHJ1bm5pbmcgdGhlIExSVSBzY2FuLCBqdXN0IHN0b3Ag YWZ0ZXIgZG9pbmcgdGhlIHN0YXRzCi0JICogc3R1ZmYuICBXZSBtYXJrIHRoZSBzYXZlZCBz dGF0ZSBpbnZhbGlkIHNvIHRoYXQgd2UgY2FuIHJlY292ZXIgc2FuZWx5Ci0JICogaWYgTFJV IHNjYW4gaXMgdHVybmVkIGJhY2sgb24gbGF0ZXIuCi0JICovCi0JaWYgKGJnd3JpdGVyX2xy dV9tYXhwYWdlcyA8PSAwKQotCXsKLQkJc2F2ZWRfaW5mb192YWxpZCA9IGZhbHNlOwotCQly ZXR1cm4gdHJ1ZTsKLQl9CisJc3RyYXRlZ3lfYnVmX2lkID0gU3RyYXRlZ3lTeW5jU3RhcnQo cGFydGl0aW9uLCAmc3RyYXRlZ3lfcGFzc2VzLAorCQkJCQkJCQkJCSZmaXJzdF9idWZmZXIs ICZudW1fYnVmZmVycyk7CiAKIAkvKgogCSAqIENvbXB1dGUgc3RyYXRlZ3lfZGVsdGEgPSBo b3cgbWFueSBidWZmZXJzIGhhdmUgYmVlbiBzY2FubmVkIGJ5IHRoZQpAQCAtMzY2NCwxNyAr MzY1MSwxNyBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkK IAkgKi8KIAlpZiAoc2F2ZWRfaW5mb192YWxpZCkKIAl7Ci0JCWludDMyCQlwYXNzZXNfZGVs dGEgPSBzdHJhdGVneV9wYXNzZXMgLSBwcmV2X3N0cmF0ZWd5X3Bhc3NlczsKKwkJaW50MzIJ CXBhc3Nlc19kZWx0YSA9IHN0cmF0ZWd5X3Bhc3NlcyAtIHByZXZfc3RyYXRlZ3lfcGFzc2Vz W3BhcnRpdGlvbl07CiAKLQkJc3RyYXRlZ3lfZGVsdGEgPSBzdHJhdGVneV9idWZfaWQgLSBw cmV2X3N0cmF0ZWd5X2J1Zl9pZDsKLQkJc3RyYXRlZ3lfZGVsdGEgKz0gKGxvbmcpIHBhc3Nl c19kZWx0YSAqIE5CdWZmZXJzOworCQlzdHJhdGVneV9kZWx0YSA9IHN0cmF0ZWd5X2J1Zl9p ZCAtIHByZXZfc3RyYXRlZ3lfYnVmX2lkW3BhcnRpdGlvbl07CisJCXN0cmF0ZWd5X2RlbHRh ICs9IChsb25nKSBwYXNzZXNfZGVsdGEgKiBudW1fYnVmZmVyczsKIAogCQlBc3NlcnQoc3Ry YXRlZ3lfZGVsdGEgPj0gMCk7CiAKLQkJaWYgKChpbnQzMikgKG5leHRfcGFzc2VzIC0gc3Ry YXRlZ3lfcGFzc2VzKSA+IDApCisJCWlmICgoaW50MzIpIChuZXh0X3Bhc3Nlc1twYXJ0aXRp b25dIC0gc3RyYXRlZ3lfcGFzc2VzKSA+IDApCiAJCXsKIAkJCS8qIHdlJ3JlIG9uZSBwYXNz IGFoZWFkIG9mIHRoZSBzdHJhdGVneSBwb2ludCAqLwotCQkJYnVmc190b19sYXAgPSBzdHJh dGVneV9idWZfaWQgLSBuZXh0X3RvX2NsZWFuOworCQkJYnVmc190b19sYXAgPSBzdHJhdGVn eV9idWZfaWQgLSBuZXh0X3RvX2NsZWFuW3BhcnRpdGlvbl07CiAjaWZkZWYgQkdXX0RFQlVH CiAJCQllbG9nKERFQlVHMiwgImJnd3JpdGVyIGFoZWFkOiBiZ3cgJXUtJXUgc3RyYXRlZ3kg JXUtJXUgZGVsdGE9JWxkIGxhcD0lZCIsCiAJCQkJIG5leHRfcGFzc2VzLCBuZXh0X3RvX2Ns ZWFuLApAQCAtMzY4MiwxMSArMzY2OSwxMSBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29u dGV4dCAqd2JfY29udGV4dCkKIAkJCQkgc3RyYXRlZ3lfZGVsdGEsIGJ1ZnNfdG9fbGFwKTsK ICNlbmRpZgogCQl9Ci0JCWVsc2UgaWYgKG5leHRfcGFzc2VzID09IHN0cmF0ZWd5X3Bhc3Nl cyAmJgotCQkJCSBuZXh0X3RvX2NsZWFuID49IHN0cmF0ZWd5X2J1Zl9pZCkKKwkJZWxzZSBp ZiAobmV4dF9wYXNzZXNbcGFydGl0aW9uXSA9PSBzdHJhdGVneV9wYXNzZXMgJiYKKwkJCQkg bmV4dF90b19jbGVhbltwYXJ0aXRpb25dID49IHN0cmF0ZWd5X2J1Zl9pZCkKIAkJewogCQkJ Lyogb24gc2FtZSBwYXNzLCBidXQgYWhlYWQgb3IgYXQgbGVhc3Qgbm90IGJlaGluZCAqLwot CQkJYnVmc190b19sYXAgPSBOQnVmZmVycyAtIChuZXh0X3RvX2NsZWFuIC0gc3RyYXRlZ3lf YnVmX2lkKTsKKwkJCWJ1ZnNfdG9fbGFwID0gbnVtX2J1ZmZlcnMgLSAobmV4dF90b19jbGVh bltwYXJ0aXRpb25dIC0gc3RyYXRlZ3lfYnVmX2lkKTsKICNpZmRlZiBCR1dfREVCVUcKIAkJ CWVsb2coREVCVUcyLCAiYmd3cml0ZXIgYWhlYWQ6IGJndyAldS0ldSBzdHJhdGVneSAldS0l dSBkZWx0YT0lbGQgbGFwPSVkIiwKIAkJCQkgbmV4dF9wYXNzZXMsIG5leHRfdG9fY2xlYW4s CkBAIC0zNzA2LDkgKzM2OTMsOSBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAq d2JfY29udGV4dCkKIAkJCQkgc3RyYXRlZ3lfcGFzc2VzLCBzdHJhdGVneV9idWZfaWQsCiAJ CQkJIHN0cmF0ZWd5X2RlbHRhKTsKICNlbmRpZgotCQkJbmV4dF90b19jbGVhbiA9IHN0cmF0 ZWd5X2J1Zl9pZDsKLQkJCW5leHRfcGFzc2VzID0gc3RyYXRlZ3lfcGFzc2VzOwotCQkJYnVm c190b19sYXAgPSBOQnVmZmVyczsKKwkJCW5leHRfdG9fY2xlYW5bcGFydGl0aW9uXSA9IHN0 cmF0ZWd5X2J1Zl9pZDsKKwkJCW5leHRfcGFzc2VzW3BhcnRpdGlvbl0gPSBzdHJhdGVneV9w YXNzZXM7CisJCQlidWZzX3RvX2xhcCA9IG51bV9idWZmZXJzOwogCQl9CiAJfQogCWVsc2UK QEAgLTM3MjIsMTUgKzM3MDksMTYgQEAgQmdCdWZmZXJTeW5jKFdyaXRlYmFja0NvbnRleHQg KndiX2NvbnRleHQpCiAJCQkgc3RyYXRlZ3lfcGFzc2VzLCBzdHJhdGVneV9idWZfaWQpOwog I2VuZGlmCiAJCXN0cmF0ZWd5X2RlbHRhID0gMDsKLQkJbmV4dF90b19jbGVhbiA9IHN0cmF0 ZWd5X2J1Zl9pZDsKLQkJbmV4dF9wYXNzZXMgPSBzdHJhdGVneV9wYXNzZXM7Ci0JCWJ1ZnNf dG9fbGFwID0gTkJ1ZmZlcnM7CisJCW5leHRfdG9fY2xlYW5bcGFydGl0aW9uXSA9IHN0cmF0 ZWd5X2J1Zl9pZDsKKwkJbmV4dF9wYXNzZXNbcGFydGl0aW9uXSA9IHN0cmF0ZWd5X3Bhc3Nl czsKKwkJYnVmc190b19sYXAgPSBudW1fYnVmZmVyczsKIAl9CiAKIAkvKiBVcGRhdGUgc2F2 ZWQgaW5mbyBmb3IgbmV4dCB0aW1lICovCi0JcHJldl9zdHJhdGVneV9idWZfaWQgPSBzdHJh dGVneV9idWZfaWQ7Ci0JcHJldl9zdHJhdGVneV9wYXNzZXMgPSBzdHJhdGVneV9wYXNzZXM7 Ci0Jc2F2ZWRfaW5mb192YWxpZCA9IHRydWU7CisJcHJldl9zdHJhdGVneV9idWZfaWRbcGFy dGl0aW9uXSA9IHN0cmF0ZWd5X2J1Zl9pZDsKKwlwcmV2X3N0cmF0ZWd5X3Bhc3Nlc1twYXJ0 aXRpb25dID0gc3RyYXRlZ3lfcGFzc2VzOworCS8qIFhYWCB0aGlzIG5lZWRzIHRvIGhhcHBl biBvbmx5IGFmdGVyIGFsbCBwYXJ0aXRpb25zICovCisJLyogc2F2ZWRfaW5mb192YWxpZCA9 IHRydWU7ICovCiAKIAkvKgogCSAqIENvbXB1dGUgaG93IG1hbnkgYnVmZmVycyBoYWQgdG8g YmUgc2Nhbm5lZCBmb3IgZWFjaCBuZXcgYWxsb2NhdGlvbiwgaWUsCkBAIC0zNzM4LDkgKzM3 MjYsOSBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkKIAkg KgogCSAqIElmIHRoZSBzdHJhdGVneSBwb2ludCBkaWRuJ3QgbW92ZSwgd2UgZG9uJ3QgdXBk YXRlIHRoZSBkZW5zaXR5IGVzdGltYXRlCiAJICovCi0JaWYgKHN0cmF0ZWd5X2RlbHRhID4g MCAmJiByZWNlbnRfYWxsb2MgPiAwKQorCWlmIChzdHJhdGVneV9kZWx0YSA+IDAgJiYgcmVj ZW50X2FsbG9jX3BhcnRpdGlvbiA+IDApCiAJewotCQlzY2Fuc19wZXJfYWxsb2MgPSAoZmxv YXQpIHN0cmF0ZWd5X2RlbHRhIC8gKGZsb2F0KSByZWNlbnRfYWxsb2M7CisJCXNjYW5zX3Bl cl9hbGxvYyA9IChmbG9hdCkgc3RyYXRlZ3lfZGVsdGEgLyAoZmxvYXQpIHJlY2VudF9hbGxv Y19wYXJ0aXRpb247CiAJCXNtb290aGVkX2RlbnNpdHkgKz0gKHNjYW5zX3Blcl9hbGxvYyAt IHNtb290aGVkX2RlbnNpdHkpIC8KIAkJCXNtb290aGluZ19zYW1wbGVzOwogCX0KQEAgLTM3 NTAsNyArMzczOCw3IEBAIEJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250 ZXh0KQogCSAqIHN0cmF0ZWd5IHBvaW50IGFuZCB3aGVyZSB3ZSd2ZSBzY2FubmVkIGFoZWFk IHRvLCBiYXNlZCBvbiB0aGUgc21vb3RoZWQKIAkgKiBkZW5zaXR5IGVzdGltYXRlLgogCSAq LwotCWJ1ZnNfYWhlYWQgPSBOQnVmZmVycyAtIGJ1ZnNfdG9fbGFwOworCWJ1ZnNfYWhlYWQg PSBudW1fYnVmZmVycyAtIGJ1ZnNfdG9fbGFwOwogCXJldXNhYmxlX2J1ZmZlcnNfZXN0ID0g KGZsb2F0KSBidWZzX2FoZWFkIC8gc21vb3RoZWRfZGVuc2l0eTsKIAogCS8qCkBAIC0zNzU4 LDEwICszNzQ2LDEwIEBAIEJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250 ZXh0KQogCSAqIGEgdHJ1ZSBhdmVyYWdlIHdlIHdhbnQgYSBmYXN0LWF0dGFjaywgc2xvdy1k ZWNsaW5lIGJlaGF2aW9yOiB3ZQogCSAqIGltbWVkaWF0ZWx5IGZvbGxvdyBhbnkgaW5jcmVh c2UuCiAJICovCi0JaWYgKHNtb290aGVkX2FsbG9jIDw9IChmbG9hdCkgcmVjZW50X2FsbG9j KQotCQlzbW9vdGhlZF9hbGxvYyA9IHJlY2VudF9hbGxvYzsKKwlpZiAoc21vb3RoZWRfYWxs b2MgPD0gKGZsb2F0KSByZWNlbnRfYWxsb2NfcGFydGl0aW9uKQorCQlzbW9vdGhlZF9hbGxv YyA9IHJlY2VudF9hbGxvY19wYXJ0aXRpb247CiAJZWxzZQotCQlzbW9vdGhlZF9hbGxvYyAr PSAoKGZsb2F0KSByZWNlbnRfYWxsb2MgLSBzbW9vdGhlZF9hbGxvYykgLworCQlzbW9vdGhl ZF9hbGxvYyArPSAoKGZsb2F0KSByZWNlbnRfYWxsb2NfcGFydGl0aW9uIC0gc21vb3RoZWRf YWxsb2MpIC8KIAkJCXNtb290aGluZ19zYW1wbGVzOwogCiAJLyogU2NhbGUgdGhlIGVzdGlt YXRlIGJ5IGEgR1VDIHRvIGFsbG93IG1vcmUgYWdncmVzc2l2ZSB0dW5pbmcuICovCkBAIC0z Nzg4LDcgKzM3NzYsNyBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29u dGV4dCkKIAkgKiB0aGUgQkdXIHdpbGwgYmUgY2FsbGVkIGR1cmluZyB0aGUgc2Nhbl93aG9s ZV9wb29sIHRpbWU7IHNsaWNlIHRoZQogCSAqIGJ1ZmZlciBwb29sIGludG8gdGhhdCBtYW55 IHNlY3Rpb25zLgogCSAqLwotCW1pbl9zY2FuX2J1ZmZlcnMgPSAoaW50KSAoTkJ1ZmZlcnMg LyAoc2Nhbl93aG9sZV9wb29sX21pbGxpc2Vjb25kcyAvIEJnV3JpdGVyRGVsYXkpKTsKKwlt aW5fc2Nhbl9idWZmZXJzID0gKGludCkgKG51bV9idWZmZXJzIC8gKHNjYW5fd2hvbGVfcG9v bF9taWxsaXNlY29uZHMgLyBCZ1dyaXRlckRlbGF5KSk7CiAKIAlpZiAodXBjb21pbmdfYWxs b2NfZXN0IDwgKG1pbl9zY2FuX2J1ZmZlcnMgKyByZXVzYWJsZV9idWZmZXJzX2VzdCkpCiAJ ewpAQCAtMzgxMywyMCArMzgwMSwyMCBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4 dCAqd2JfY29udGV4dCkKIAkvKiBFeGVjdXRlIHRoZSBMUlUgc2NhbiAqLwogCXdoaWxlIChu dW1fdG9fc2NhbiA+IDAgJiYgcmV1c2FibGVfYnVmZmVycyA8IHVwY29taW5nX2FsbG9jX2Vz dCkKIAl7Ci0JCWludAkJCXN5bmNfc3RhdGUgPSBTeW5jT25lQnVmZmVyKG5leHRfdG9fY2xl YW4sIHRydWUsCisJCWludAkJCXN5bmNfc3RhdGUgPSBTeW5jT25lQnVmZmVyKG5leHRfdG9f Y2xlYW5bcGFydGl0aW9uXSwgdHJ1ZSwKIAkJCQkJCQkJCQkJICAgd2JfY29udGV4dCk7CiAK LQkJaWYgKCsrbmV4dF90b19jbGVhbiA+PSBOQnVmZmVycykKKwkJaWYgKCsrbmV4dF90b19j bGVhbltwYXJ0aXRpb25dID49IChmaXJzdF9idWZmZXIgKyBudW1fYnVmZmVycykpCiAJCXsK LQkJCW5leHRfdG9fY2xlYW4gPSAwOwotCQkJbmV4dF9wYXNzZXMrKzsKKwkJCW5leHRfdG9f Y2xlYW5bcGFydGl0aW9uXSA9IGZpcnN0X2J1ZmZlcjsKKwkJCW5leHRfcGFzc2VzW3BhcnRp dGlvbl0rKzsKIAkJfQogCQludW1fdG9fc2Nhbi0tOwogCiAJCWlmIChzeW5jX3N0YXRlICYg QlVGX1dSSVRURU4pCiAJCXsKIAkJCXJldXNhYmxlX2J1ZmZlcnMrKzsKLQkJCWlmICgrK251 bV93cml0dGVuID49IGJnd3JpdGVyX2xydV9tYXhwYWdlcykKKwkJCWlmICgrK251bV93cml0 dGVuID49IChiZ3dyaXRlcl9scnVfbWF4cGFnZXMgLyBudW1fcGFydGl0aW9ucykpCiAJCQl7 CiAJCQkJUGVuZGluZ0JnV3JpdGVyU3RhdHMubWF4d3JpdHRlbl9jbGVhbisrOwogCQkJCWJy ZWFrOwpAQCAtMzg0MCw3ICszODI4LDcgQEAgQmdCdWZmZXJTeW5jKFdyaXRlYmFja0NvbnRl eHQgKndiX2NvbnRleHQpCiAKICNpZmRlZiBCR1dfREVCVUcKIAllbG9nKERFQlVHMSwgImJn d3JpdGVyOiByZWNlbnRfYWxsb2M9JXUgc21vb3RoZWQ9JS4yZiBkZWx0YT0lbGQgYWhlYWQ9 JWQgZGVuc2l0eT0lLjJmIHJldXNhYmxlX2VzdD0lZCB1cGNvbWluZ19lc3Q9JWQgc2Nhbm5l ZD0lZCB3cm90ZT0lZCByZXVzYWJsZT0lZCIsCi0JCSByZWNlbnRfYWxsb2MsIHNtb290aGVk X2FsbG9jLCBzdHJhdGVneV9kZWx0YSwgYnVmc19haGVhZCwKKwkJIHJlY2VudF9hbGxvY19w YXJ0aXRpb24sIHNtb290aGVkX2FsbG9jLCBzdHJhdGVneV9kZWx0YSwgYnVmc19haGVhZCwK IAkJIHNtb290aGVkX2RlbnNpdHksIHJldXNhYmxlX2J1ZmZlcnNfZXN0LCB1cGNvbWluZ19h bGxvY19lc3QsCiAJCSBidWZzX3RvX2xhcCAtIG51bV90b19zY2FuLAogCQkgbnVtX3dyaXR0 ZW4sCkBAIC0zODcwLDggKzM4NTgsNzQgQEAgQmdCdWZmZXJTeW5jKFdyaXRlYmFja0NvbnRl eHQgKndiX2NvbnRleHQpCiAjZW5kaWYKIAl9CiAKKwkvKiBjYW4gdGhpcyBwYXJ0aXRpb24g aGliZXJuYXRlICovCisJcmV0dXJuIChidWZzX3RvX2xhcCA9PSAwICYmIHJlY2VudF9hbGxv Y19wYXJ0aXRpb24gPT0gMCk7Cit9CisKKy8qCisgKiBCZ0J1ZmZlclN5bmMgLS0gV3JpdGUg b3V0IHNvbWUgZGlydHkgYnVmZmVycyBpbiB0aGUgcG9vbC4KKyAqCisgKiBUaGlzIGlzIGNh bGxlZCBwZXJpb2RpY2FsbHkgYnkgdGhlIGJhY2tncm91bmQgd3JpdGVyIHByb2Nlc3MuCisg KgorICogUmV0dXJucyB0cnVlIGlmIGl0J3MgYXBwcm9wcmlhdGUgZm9yIHRoZSBiZ3dyaXRl ciBwcm9jZXNzIHRvIGdvIGludG8KKyAqIGxvdy1wb3dlciBoaWJlcm5hdGlvbiBtb2RlLiAg KFRoaXMgaGFwcGVucyBpZiB0aGUgc3RyYXRlZ3kgY2xvY2stc3dlZXAKKyAqIGhhcyBiZWVu ICJsYXBwZWQiIGFuZCBubyBidWZmZXIgYWxsb2NhdGlvbnMgaGF2ZSBvY2N1cnJlZCByZWNl bnRseSwKKyAqIG9yIGlmIHRoZSBiZ3dyaXRlciBoYXMgYmVlbiBlZmZlY3RpdmVseSBkaXNh YmxlZCBieSBzZXR0aW5nCisgKiBiZ3dyaXRlcl9scnVfbWF4cGFnZXMgdG8gMC4pCisgKi8K K2Jvb2wKK0JnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0KQorewor CS8qIGluZm8gb2J0YWluZWQgZnJvbSBmcmVlbGlzdC5jICovCisJdWludDMyCQlyZWNlbnRf YWxsb2M7CisJdWludDMyCQlyZWNlbnRfYWxsb2NfcGFydGl0aW9uOworCWludAkJCW51bV9w YXJ0aXRpb25zOworCisJLyogYXNzdW1lIHdlIGNhbiBoaWJlcm5hdGUsIGFueSBwYXJ0aXRp b24gY2FuIHNldCB0byBmYWxzZSAqLworCWJvb2wJCWhpYmVybmF0ZSA9IHRydWU7CisKKwkv KiBnZXQgdGhlIG51bWJlciBvZiBjbG9ja3N3ZWVwIHBhcnRpdGlvbnMsIGFuZCB0b3RhbCBh bGxvYyBjb3VudCAqLworCVN0cmF0ZWd5U3luY1ByZXBhcmUoJm51bV9wYXJ0aXRpb25zLCAm cmVjZW50X2FsbG9jKTsKKworCUFzc2VydChudW1fcGFydGl0aW9ucyA8PSBNQVhfQ0xPQ0tT V0VFUF9QQVJUSVRJT05TKTsKKworCS8qIFJlcG9ydCBidWZmZXIgYWxsb2MgY291bnRzIHRv IHBnc3RhdCAqLworCVBlbmRpbmdCZ1dyaXRlclN0YXRzLmJ1Zl9hbGxvYyArPSByZWNlbnRf YWxsb2M7CisKKwkvKiBhdmVyYWdlIGFsbG9jIGJ1ZmZlcnMgcGVyIHBhcnRpdGlvbiAqLwor CXJlY2VudF9hbGxvY19wYXJ0aXRpb24gPSAocmVjZW50X2FsbG9jIC8gbnVtX3BhcnRpdGlv bnMpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBub3QgcnVubmluZyB0aGUgTFJVIHNjYW4sIGp1 c3Qgc3RvcCBhZnRlciBkb2luZyB0aGUgc3RhdHMKKwkgKiBzdHVmZi4gIFdlIG1hcmsgdGhl IHNhdmVkIHN0YXRlIGludmFsaWQgc28gdGhhdCB3ZSBjYW4gcmVjb3ZlciBzYW5lbHkKKwkg KiBpZiBMUlUgc2NhbiBpcyB0dXJuZWQgYmFjayBvbiBsYXRlci4KKwkgKi8KKwlpZiAoYmd3 cml0ZXJfbHJ1X21heHBhZ2VzIDw9IDApCisJeworCQlzYXZlZF9pbmZvX3ZhbGlkID0gZmFs c2U7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qCisJICogbm93IHByb2Nlc3MgdGhlIGNs b2Nrc3dlZXAgcGFydGl0aW9ucywgb25lIGJ5IG9uZSwgdXNpbmcgdGhlIHNhbWUKKwkgKiBj bGVhbnVwIHRoYXQgd2UgdXNlZCBmb3IgYWxsIGJ1ZmZlcnMKKwkgKgorCSAqIFhYWCBNYXli ZSB3ZSBzaG91bGQgcmFuZG9taXplIHRoZSBvcmRlciBvZiBwYXJ0aXRpb25zIGEgYml0LCBz byB0aGF0IHdlCisJICogZG9uJ3Qgc3RhcnQgZnJvbSBwYXJ0aXRpb24gMCBhbGwgdGhlIHRp bWU/IFBlcmhhcHMgbm90IGVudGlyZWx5LCBidXQgYXQKKwkgKiBsZWFzdCBwaWNrIGEgcmFu ZG9tIHN0YXJ0aW5nIHBvaW50PworCSAqLworCWZvciAoaW50IHBhcnRpdGlvbiA9IDA7IHBh cnRpdGlvbiA8IG51bV9wYXJ0aXRpb25zOyBwYXJ0aXRpb24rKykKKwl7CisJCS8qIGhpYmVy bmF0ZSBpZiBhbGwgcGFydGl0aW9ucyBjYW4gaGliZXJuYXRlICovCisJCWhpYmVybmF0ZSAm PSBCZ0J1ZmZlclN5bmNQYXJ0aXRpb24od2JfY29udGV4dCwgbnVtX3BhcnRpdGlvbnMsCisJ CQkJCQkJCQkJICAgcGFydGl0aW9uLCByZWNlbnRfYWxsb2NfcGFydGl0aW9uKTsKKwl9CisK KwkvKiBub3cgdGhhdCB3ZSd2ZSBzY2FubmVkIGFsbCBwYXJ0aXRpb25zLCBtYXJrIHRoZSBj YWNoZWQgaW5mbyBhcyB2YWxpZCAqLworCXNhdmVkX2luZm9fdmFsaWQgPSB0cnVlOworCiAJ LyogUmV0dXJuIHRydWUgaWYgT0sgdG8gaGliZXJuYXRlICovCi0JcmV0dXJuIChidWZzX3Rv X2xhcCA9PSAwICYmIHJlY2VudF9hbGxvYyA9PSAwKTsKKwlyZXR1cm4gaGliZXJuYXRlOwog fQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxp c3QuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKaW5kZXggN2Q1 OWE5MmJkMWEuLmQ1ZjhmMjhmNTYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdl L2J1ZmZlci9mcmVlbGlzdC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2Zy ZWVsaXN0LmMKQEAgLTE1LDI3ICsxNSw0NyBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMu aCIKIAorI2lmZGVmIFVTRV9MSUJOVU1BCisjaW5jbHVkZSA8c2NoZWQuaD4KKyNlbmRpZgor CisjaWZkZWYgVVNFX0xJQk5VTUEKKyNpbmNsdWRlIDxudW1hLmg+CisjaW5jbHVkZSA8bnVt YWlmLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvcnQv YXRvbWljcy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmX2ludGVybmFscy5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNs dWRlICJzdG9yYWdlL3Byb2MuaCIKIAogI2RlZmluZSBJTlRfQUNDRVNTX09OQ0UodmFyKQko KGludCkoKigodm9sYXRpbGUgaW50ICopJih2YXIpKSkpCiAKIAogLyoKLSAqIFRoZSBzaGFy ZWQgZnJlZWxpc3QgY29udHJvbCBpbmZvcm1hdGlvbi4KKyAqIEluZm9ybWF0aW9uIGFib3V0 IG9uZSBwYXJ0aXRpb24gb2YgdGhlIENsb2NrU3dlZXAgKG9uIGEgc3Vic2V0IG9mIGJ1ZmZl cnMpLgorICoKKyAqIFhYWCBTaG91bGQgYmUgY2FyZWZ1bCB0byBhbGlnbiB0aGlzIHRvIGNh Y2hlbGluZXMsIGV0Yy4KICAqLwogdHlwZWRlZiBzdHJ1Y3QKIHsKIAkvKiBTcGlubG9jazog cHJvdGVjdHMgdGhlIHZhbHVlcyBiZWxvdyAqLwotCXNsb2NrX3QJCWJ1ZmZlcl9zdHJhdGVn eV9sb2NrOworCXNsb2NrX3QJCWNsb2NrX3N3ZWVwX2xvY2s7CisKKwkvKiByYW5nZSBmb3Ig dGhpcyBjbG9jayB3ZWVwIHBhcnRpdGlvbiAqLworCWludDMyCQlmaXJzdEJ1ZmZlcjsKKwlp bnQzMgkJbnVtQnVmZmVyczsKIAogCS8qCiAJICogY2xvY2stc3dlZXAgaGFuZDogaW5kZXgg b2YgbmV4dCBidWZmZXIgdG8gY29uc2lkZXIgZ3JhYmJpbmcuIE5vdGUgdGhhdAogCSAqIHRo aXMgaXNuJ3QgYSBjb25jcmV0ZSBidWZmZXIgLSB3ZSBvbmx5IGV2ZXIgaW5jcmVhc2UgdGhl IHZhbHVlLiBTbywgdG8KIAkgKiBnZXQgYW4gYWN0dWFsIGJ1ZmZlciwgaXQgbmVlZHMgdG8g YmUgdXNlZCBtb2R1bG8gTkJ1ZmZlcnMuCisJICoKKwkgKiBYWFggVGhpcyBpcyByZWxhdGl2 ZSB0byBmaXJzdEJ1ZmZlciwgc28gbmVlZHMgdG8gYmUgb2Zmc2V0IHByb3Blcmx5LgorCSAq CisJICogWFhYIGZpcnN0QnVmZmVyICsgKG5leHRWaWN0aW1CdWZmZXIgJSBudW1CdWZmZXJz KQogCSAqLwogCXBnX2F0b21pY191aW50MzIgbmV4dFZpY3RpbUJ1ZmZlcjsKIApAQCAtNDYs MTEgKzY2LDM0IEBAIHR5cGVkZWYgc3RydWN0CiAJdWludDMyCQljb21wbGV0ZVBhc3Nlczsg LyogQ29tcGxldGUgY3ljbGVzIG9mIHRoZSBjbG9jay1zd2VlcCAqLwogCXBnX2F0b21pY191 aW50MzIgbnVtQnVmZmVyQWxsb2NzOwkvKiBCdWZmZXJzIGFsbG9jYXRlZCBzaW5jZSBsYXN0 IHJlc2V0ICovCiAKKwkvKiBydW5uaW5nIHRvdGFsIG9mIGFsbG9jcyAqLworCXBnX2F0b21p Y191aW50NjQgbnVtVG90YWxBbGxvY3M7CisKK30gQ2xvY2tTd2VlcDsKKworLyoKKyAqIFRo ZSBzaGFyZWQgZnJlZWxpc3QgY29udHJvbCBpbmZvcm1hdGlvbi4KKyAqLwordHlwZWRlZiBz dHJ1Y3QKK3sKKwkvKiBTcGlubG9jazogcHJvdGVjdHMgdGhlIHZhbHVlcyBiZWxvdyAqLwor CXNsb2NrX3QJCWJ1ZmZlcl9zdHJhdGVneV9sb2NrOworCiAJLyoKIAkgKiBCZ3dvcmtlciBw cm9jZXNzIHRvIGJlIG5vdGlmaWVkIHVwb24gYWN0aXZpdHkgb3IgLTEgaWYgbm9uZS4gU2Vl CiAJICogU3RyYXRlZ3lOb3RpZnlCZ1dyaXRlci4KIAkgKi8KIAlpbnQJCQliZ3dwcm9jbm87 CisJLy8gdGhlIF9hdHRyaWJ1dGVfIGRvZXMgbm90IHdvcmsgb24gV2luZG93cywgaXQgc2Vl bXMKKwkvL2ludAkJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoNjQpKSkgYmd3cHJvY25vOwor CisJLyogaW5mbyBhYm91dCBmcmVlbGlzdCBwYXJ0aXRpb25pbmcgKi8KKwlpbnQJCQludW1f bm9kZXM7CQkvKiBlZmZlY3RpdmVseSBudW1iZXIgb2YgTlVNQSBub2RlcyAqLworCWludAkJ CW51bV9wYXJ0aXRpb25zOworCWludAkJCW51bV9wYXJ0aXRpb25zX3Blcl9ub2RlOworCisJ LyogY2xvY2tzd2VlcCBwYXJ0aXRpb25zICovCisJQ2xvY2tTd2VlcAlzd2VlcHNbRkxFWElC TEVfQVJSQVlfTUVNQkVSXTsKIH0gQnVmZmVyU3RyYXRlZ3lDb250cm9sOwogCiAvKiBQb2lu dGVycyB0byBzaGFyZWQgc3RhdGUgKi8KQEAgLTg5LDYgKzEzMiw3IEBAIHN0YXRpYyBCdWZm ZXJEZXNjICpHZXRCdWZmZXJGcm9tUmluZyhCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVn eSwKIAkJCQkJCQkJCSB1aW50MzIgKmJ1Zl9zdGF0ZSk7CiBzdGF0aWMgdm9pZCBBZGRCdWZm ZXJUb1JpbmcoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiAJCQkJCQkJQnVmZmVy RGVzYyAqYnVmKTsKK3N0YXRpYyBDbG9ja1N3ZWVwICpDaG9vc2VDbG9ja1N3ZWVwKHZvaWQp OwogCiAvKgogICogQ2xvY2tTd2VlcFRpY2sgLSBIZWxwZXIgcm91dGluZSBmb3IgU3RyYXRl Z3lHZXRCdWZmZXIoKQpAQCAtMTAwLDYgKzE0NCw3IEBAIHN0YXRpYyBpbmxpbmUgdWludDMy CiBDbG9ja1N3ZWVwVGljayh2b2lkKQogewogCXVpbnQzMgkJdmljdGltOworCUNsb2NrU3dl ZXAgKnN3ZWVwID0gQ2hvb3NlQ2xvY2tTd2VlcCgpOwogCiAJLyoKIAkgKiBBdG9taWNhbGx5 IG1vdmUgaGFuZCBhaGVhZCBvbmUgYnVmZmVyIC0gaWYgdGhlcmUncyBzZXZlcmFsIHByb2Nl c3NlcwpAQCAtMTA3LDE0ICsxNTIsMTQgQEAgQ2xvY2tTd2VlcFRpY2sodm9pZCkKIAkgKiBh cHBhcmVudCBvcmRlci4KIAkgKi8KIAl2aWN0aW0gPQotCQlwZ19hdG9taWNfZmV0Y2hfYWRk X3UzMigmU3RyYXRlZ3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVyLCAxKTsKKwkJcGdfYXRv bWljX2ZldGNoX2FkZF91MzIoJnN3ZWVwLT5uZXh0VmljdGltQnVmZmVyLCAxKTsKIAotCWlm ICh2aWN0aW0gPj0gTkJ1ZmZlcnMpCisJaWYgKHZpY3RpbSA+PSBzd2VlcC0+bnVtQnVmZmVy cykKIAl7CiAJCXVpbnQzMgkJb3JpZ2luYWxWaWN0aW0gPSB2aWN0aW07CiAKIAkJLyogYWx3 YXlzIHdyYXAgd2hhdCB3ZSBsb29rIHVwIGluIEJ1ZmZlckRlc2NyaXB0b3JzICovCi0JCXZp Y3RpbSA9IHZpY3RpbSAlIE5CdWZmZXJzOworCQl2aWN0aW0gPSB2aWN0aW0gJSBzd2VlcC0+ bnVtQnVmZmVyczsKIAogCQkvKgogCQkgKiBJZiB3ZSdyZSB0aGUgb25lIHRoYXQganVzdCBj YXVzZWQgYSB3cmFwYXJvdW5kLCBmb3JjZQpAQCAtMTQwLDE5ICsxODUsMTE3IEBAIENsb2Nr U3dlZXBUaWNrKHZvaWQpCiAJCQkJICogY291bGQgbGVhZCB0byBhbiBvdmVyZmxvdyBvZiBu ZXh0VmljdGltQnVmZmVycywgYnV0IHRoYXQncwogCQkJCSAqIGhpZ2hseSB1bmxpa2VseSBh bmQgd291bGRuJ3QgYmUgcGFydGljdWxhcmx5IGhhcm1mdWwuCiAJCQkJICovCi0JCQkJU3Bp bkxvY2tBY3F1aXJlKCZTdHJhdGVneUNvbnRyb2wtPmJ1ZmZlcl9zdHJhdGVneV9sb2NrKTsK KwkJCQlTcGluTG9ja0FjcXVpcmUoJnN3ZWVwLT5jbG9ja19zd2VlcF9sb2NrKTsKIAotCQkJ CXdyYXBwZWQgPSBleHBlY3RlZCAlIE5CdWZmZXJzOworCQkJCXdyYXBwZWQgPSBleHBlY3Rl ZCAlIHN3ZWVwLT5udW1CdWZmZXJzOwogCi0JCQkJc3VjY2VzcyA9IHBnX2F0b21pY19jb21w YXJlX2V4Y2hhbmdlX3UzMigmU3RyYXRlZ3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVyLAor CQkJCXN1Y2Nlc3MgPSBwZ19hdG9taWNfY29tcGFyZV9leGNoYW5nZV91MzIoJnN3ZWVwLT5u ZXh0VmljdGltQnVmZmVyLAogCQkJCQkJCQkJCQkJCQkgJmV4cGVjdGVkLCB3cmFwcGVkKTsK IAkJCQlpZiAoc3VjY2VzcykKLQkJCQkJU3RyYXRlZ3lDb250cm9sLT5jb21wbGV0ZVBhc3Nl cysrOwotCQkJCVNwaW5Mb2NrUmVsZWFzZSgmU3RyYXRlZ3lDb250cm9sLT5idWZmZXJfc3Ry YXRlZ3lfbG9jayk7CisJCQkJCXN3ZWVwLT5jb21wbGV0ZVBhc3NlcysrOworCQkJCVNwaW5M b2NrUmVsZWFzZSgmc3dlZXAtPmNsb2NrX3N3ZWVwX2xvY2spOwogCQkJfQogCQl9CiAJfQot CXJldHVybiB2aWN0aW07CisKKwkvKiBYWFggYnVmZmVyIElEcyBhcmUgMS1iYXNlZCwgd2Un cmUgY2FsY3VsYXRpbmcgMC1iYXNlZCBpbmRleGVzICovCisJQXNzZXJ0KEJ1ZmZlcklzVmFs aWQoMSArIHN3ZWVwLT5maXJzdEJ1ZmZlciArICh2aWN0aW0gJSBzd2VlcC0+bnVtQnVmZmVy cykpKTsKKworCXJldHVybiBzd2VlcC0+Zmlyc3RCdWZmZXIgKyB2aWN0aW07Cit9CisKKy8q CisgKiBjYWxjdWxhdGVfcGFydGl0aW9uX2luZGV4CisgKgkJY2FsY3VsYXRlIHRoZSBidWZm ZXIgLyBjbG9jay1zd2VlcCBwYXJ0aXRpb24gdG8gdXNlCisgKgorICogV2l0aCBsaWJudW1h LCB1c2UgdGhlIE5VTUEgbm9kZSBhbmQgQ1BVIHRvIHBpY2sgdGhlIHBhcnRpdGlvbi4gT3Ro ZXJ3aXNlCisgKiB1c2UganVzdCBQSUQgaW5zdGVhZCBvZiBDUFUgKHdlIGFzc3VtZSBldmVy eXRoaW5nIGlzIGEgc2luZ2xlIE5VTUEgbm9kZSkuCisgKi8KK3N0YXRpYyBpbnQKK2NhbGN1 bGF0ZV9wYXJ0aXRpb25faW5kZXgodm9pZCkKK3sKKwlpbnQJCWNwdSwKKwkJCW5vZGUsCisJ CQlpbmRleDsKKworCS8qCisJICogVGhlIGJ1ZmZlcnMgYXJlIHBhcnRpdGlvbmVkLCBzbyBk ZXRlcm1pbmUgdGhlIENQVS9OVU1BIG5vZGUsIGFuZCBwaWNrIGEKKwkgKiBwYXJ0aXRpb24g YmFzZWQgb24gdGhhdC4KKwkgKgorCSAqIFdpdGhvdXQgTlVNQSBhc3N1bWUgZXZlcnl0aGlu ZyBpcyBhIHNpbmdsZSBOVU1BIG5vZGUsIGFuZCB3ZSBwaWNrIHRoZQorCSAqIHBhcnRpdGlv biBiYXNlZCBvbiBQSUQgKHdlIG1heSBub3QgaGF2ZSBzY2hlZF9nZXRjcHUpLgorCSAqLwor I2lmZGVmIFVTRV9MSUJOVU1BCisJY3B1ID0gc2NoZWRfZ2V0Y3B1KCk7CisKKwlpZiAoY3B1 IDwgMCkKKwkJZWxvZyhFUlJPUiwgInNjaGVkX2dldGNwdSBmYWlsZWQ6ICVtIik7CisKKwlu b2RlID0gbnVtYV9ub2RlX29mX2NwdShjcHUpOworI2Vsc2UKKwljcHUgPSBNeVByb2NQaWQ7 CisJbm9kZSA9IDA7CisjZW5kaWYKKworCUFzc2VydChTdHJhdGVneUNvbnRyb2wtPm51bV9w YXJ0aXRpb25zID09CisJCSAgIChTdHJhdGVneUNvbnRyb2wtPm51bV9ub2RlcyAqIFN0cmF0 ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnNfcGVyX25vZGUpKTsKKworCS8qCisJICogWFhY IFdlIHNob3VsZCd0IGdldCBub2RlcyB0aGF0IHdlIGhhdmVuJ3QgY29uc2lkZXJlZCB3aGls ZSBidWlsZGluZyB0aGUKKwkgKiBwYXJ0aXRpb25zLiBNYXliZSBpZiB3ZSBhbGxvdyB0aGlz IChlLmcuIGR1ZSB0byBzdXBwb3J0IGFkanVzdGluZyB0aGUKKwkgKiBOVU1BIHN0dWZmIGF0 IHJ1bnRpbWUpLCB3ZSBzaG91bGQganVzdCBkbyBvdXIgYmVzdCB0byBtaW5pbWl6ZSB0aGUK KwkgKiBjb25mbGljdHMgc29tZWhvdy4gQnV0IGl0J2xsIG1ha2UgdGhlIG1hcHBpbmcgaGFy ZGVyLCBzbyBmb3Igbm93IHdlCisJICogaWdub3JlIGl0LgorCSAqLworCWlmIChub2RlID4g U3RyYXRlZ3lDb250cm9sLT5udW1fbm9kZXMpCisJCWVsb2coRVJST1IsICJub2RlIG91dCBv ZiByYW5nZTogJWQgPiAldSIsIGNwdSwgU3RyYXRlZ3lDb250cm9sLT5udW1fbm9kZXMpOwor CisJLyoKKwkgKiBGaW5kIHRoZSBwYXJ0aXRpb24uIElmIHdlIGhhdmUgYSBzaW5nbGUgcGFy dGl0aW9uIHBlciBub2RlLCB3ZSBjYW4KKwkgKiBjYWxjdWxhdGUgdGhlIGluZGV4IGRpcmVj dGx5IGZyb20gbm9kZS4gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gZG8gdHdvCisJICogc3RlcHMs IHVzaW5nIG5vZGUgYW5kIHRoZW4gY3B1LgorCSAqLworCWlmIChTdHJhdGVneUNvbnRyb2wt Pm51bV9wYXJ0aXRpb25zX3Blcl9ub2RlID09IDEpCisJeworCQkvKiBmYXN0LXBhdGggKi8K KwkJaW5kZXggPSAobm9kZSAlIFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnMpOwor CX0KKwllbHNlCisJeworCQlpbnQJCQlpbmRleF9ncm91cCwKKwkJCQkJaW5kZXhfcGFydDsK KworCQkvKiB0d28gc3RlcHMgLSBjYWxjdWxhdGUgZ3JvdXAgZnJvbSBub2RlLCBwYXJ0aXRp b24gZnJvbSBjcHUgKi8KKwkJaW5kZXhfZ3JvdXAgPSAobm9kZSAlIFN0cmF0ZWd5Q29udHJv bC0+bnVtX25vZGVzKTsKKwkJaW5kZXhfcGFydCA9IChjcHUgJSBTdHJhdGVneUNvbnRyb2wt Pm51bV9wYXJ0aXRpb25zX3Blcl9ub2RlKTsKKworCQlpbmRleCA9IChpbmRleF9ncm91cCAq IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnNfcGVyX25vZGUpCisJCQkrIGluZGV4 X3BhcnQ7CisJfQorCisJcmV0dXJuIGluZGV4OworfQorCisvKgorICogQ2hvb3NlQ2xvY2tT d2VlcAorICoJCXBpY2sgYSBjbG9ja3N3ZWVwIHBhcnRpdGlvbiBiYXNlZCBvbiBOVU1BIG5v ZGUgYW5kIENQVQorICoKKyAqIFRoZSBudW1iZXIgb2YgY2xvY2tzd2VlcCBwYXJ0aXRpb25z IG1heSBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiBOVU1BCisgKiBub2RlcywgYnV0IGl0IHNo b3VsZCBub3QgYmUgbG93ZXIuIEVhY2ggcGFydGl0aW9uIHNob3VsZCBiZSBtYXBwZWQgdG8K KyAqIGEgc2luZ2xlIE5VTUEgbm9kZSwgYnV0IGEgbm9kZSBtYXkgaGF2ZSBtdWx0aXBsZSBw YXJ0aXRpb25zLiBJZiB0aGVyZQorICogYXJlIG11bHRpcGxlIHBhcnRpdGlvbnMgcGVyIG5v ZGUgKGFsbCBub2RlcyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZgorICogcGFydGl0aW9ucyks IHdlIHBpY2sgdGhlIHBhcnRpdGlvbiB1c2luZyBDUFUuCisgKgorICogWFhYIE1heWJlIHdl IHNob3VsZCBkbyBib3RoIHRoZSB0b3RhbCBhbmQgInBlciBncm91cCIgY291bnRzIGEgcG93 ZXIgb2YKKyAqIHR3bz8gVGhhdCdkIGFsbG93IHVzaW5nIHNoaWZ0cyBpbnN0ZWFkIG9mIGRp dmlzaW9ucyBpbiB0aGUgY2FsY3VsYXRpb24sCisgKiBhbmQgdGhhdCdzIGNoZWFwZXIuIEJ1 dCBob3cgd291bGQgdGhhdCBkZWFsIHdpdGggb2RkIG51bWJlciBvZiBub2Rlcz8KKyAqLwor c3RhdGljIENsb2NrU3dlZXAgKgorQ2hvb3NlQ2xvY2tTd2VlcCh2b2lkKQoreworCWludAkJ CWluZGV4ID0gY2FsY3VsYXRlX3BhcnRpdGlvbl9pbmRleCgpOworCisJcmV0dXJuICZTdHJh dGVneUNvbnRyb2wtPnN3ZWVwc1tpbmRleF07CiB9CiAKIC8qCkBAIC0yMjIsOSArMzY1LDM1 IEBAIFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1 aW50MzIgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJvbV9yCiAJICogdGhlIHJhdGUgb2YgYnVmZmVy IGNvbnN1bXB0aW9uLiAgTm90ZSB0aGF0IGJ1ZmZlcnMgcmVjeWNsZWQgYnkgYQogCSAqIHN0 cmF0ZWd5IG9iamVjdCBhcmUgaW50ZW50aW9uYWxseSBub3QgY291bnRlZCBoZXJlLgogCSAq LwotCXBnX2F0b21pY19mZXRjaF9hZGRfdTMyKCZTdHJhdGVneUNvbnRyb2wtPm51bUJ1ZmZl ckFsbG9jcywgMSk7CisJcGdfYXRvbWljX2ZldGNoX2FkZF91MzIoJkNob29zZUNsb2NrU3dl ZXAoKS0+bnVtQnVmZmVyQWxsb2NzLCAxKTsKIAotCS8qIFVzZSB0aGUgImNsb2NrIHN3ZWVw IiBhbGdvcml0aG0gdG8gZmluZCBhIGZyZWUgYnVmZmVyICovCisJLyoKKwkgKiBVc2UgdGhl ICJjbG9jayBzd2VlcCIgYWxnb3JpdGhtIHRvIGZpbmQgYSBmcmVlIGJ1ZmZlcgorCSAqCisJ ICogWFhYIE5vdGUgdGhhdCBDbG9ja1N3ZWVwVGljaygpIGlzIE5VTUEtYXdhcmUsIGkuZS4g aXQgb25seSBsb29rcyBhdAorCSAqIGJ1ZmZlcnMgZnJvbSBhIHNpbmdsZSBwYXJ0aXRpb24s IGFsaWduZWQgd2l0aCB0aGUgTlVNQSBub2RlLiBUaGF0IG1lYW5zCisJICogaXQgb25seSBh Y2Nlc3NlcyBidWZmZXJzIGZyb20gdGhlIHNhbWUgTlVNQSBub2RlLgorCSAqCisJICogWFhY IFRoYXQgYWxzbyBtZWFucyBlYWNoIHByb2Nlc3MgInN3ZWVwcyIgb25seSBhIGZyYWN0aW9u IG9mIGJ1ZmZlcnMsCisJICogZXZlbiBpZiB0aGUgb3RoZXIgYnVmZmVycyBhcmUgYmV0dGVy IGNhbmRpZGF0ZXMgZm9yIGV2aWN0aW9uLiBNYXliZQorCSAqIHRoZXJlIHNob3VsZCBiZSBz b21lIGxvZ2ljIHRvICJzdGVhbCIgYnVmZmVycyBmcm9tIG90aGVyIGZyZWVsaXN0cyBvcgor CSAqIG90aGVyIG5vZGVzPworCSAqCisJICogWFhYIFdvdWxkIHRoYXQgYWxzbyBtZWFuIHdl J2QgaGF2ZSBtdWx0aXBsZSBiZ3dyaXRlcnMsIG9uZSBmb3IgZWFjaAorCSAqIG5vZGUsIG9y IHdvdWxkIG9uZSBiZ3dyaXRlciBoYW5kbGUgYWxsIG9mIHRoYXQ/CisJICoKKwkgKiBYWFgg VGhpcyBvbmx5IHNlYXJjaGVzIGEgc2luZ2xlIHBhcnRpdGlvbiwgd2hpY2ggY2FuIHJlc3Vs dCBpbiAibm8KKwkgKiB1bnBpbm5lZCBidWZmZXJzIGF2YWlsYWJsZSIgZXZlbiBpZiB0aGVy ZSBhcmUgYnVmZmVycyBpbiBvdGhlcgorCSAqIHBhcnRpdGlvbnMuIFNob3VsZCBiZSBmaXhl ZCBieSBmYWxsaW5nIGJhY2sgdG8gb3RoZXIgcGFydGl0aW9ucyBpZgorCSAqIG5lZWRlZC4K KwkgKgorCSAqIFhYWCBBbHNvLCB0aGUgdHJ5Y291bnRlciBzaG91bGQgbm90IGJlIHNldCB0 byBOQnVmZmVycywgYnV0IHRvIGJ1ZmZlcgorCSAqIGNvdW50IGZvciB0aGF0IG9uZSBwYXJ0 aXRpb24uIEluIGZhY3QsIHRoaXMgc2hvdWxkIG5vdCBjYWxsIENsb2NrU3dlZXBUaWNrCisJ ICogZm9yIGV2ZXJ5IGl0ZXJhdGlvbi4gVGhlIGNhbGwgaXMgbGlrZWx5IHF1aXRlIGV4cGVu c2l2ZSAoZG9lcyBhIGxvdAorCSAqIG9mIHN0dWZmKSwgYW5kIGFsc28gbWF5IHJldHVybiBh IGRpZmZlcmVudCBwYXJ0aXRpb24gb24gZWFjaCBjYWxsLgorCSAqIFdlIHNob3VsZCBqdXN0 IGRvIGl0IG9uY2UsIGFuZCB0aGVuIGRvIHRoZSBmb3IoOzspIGxvb3AuIEFuZCB0aGVuCisJ ICogbWF5YmUgYWR2YW5jZSB0byB0aGUgbmV4dCBwYXJ0aXRpb24sIHVudGlsIHdlIHNjYW4g dGhyb3VnaCBhbGwgb2YgdGhlbS4KKwkgKi8KIAl0cnljb3VudGVyID0gTkJ1ZmZlcnM7CiAJ Zm9yICg7OykKIAl7CkBAIC0yNjksNiArNDM4LDQ2IEBAIFN0cmF0ZWd5R2V0QnVmZmVyKEJ1 ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1aW50MzIgKmJ1Zl9zdGF0ZSwgYm9vbCAq ZnJvbV9yCiAJfQogfQogCisvKgorICogU3RyYXRlZ3lTeW5jUHJlcGFyZSAtLSBwcmVwYXJl IGZvciBzeW5jIG9mIGFsbCBwYXJ0aXRpb25zCisgKgorICogRGV0ZXJtaW5lIHRoZSBudW1i ZXIgb2YgY2xvY2tzd2VlcCBwYXJ0aXRpb25zLCBhbmQgY2FsY3VsYXRlIHRoZSByZWNlbnQK KyAqIGJ1ZmZlcnMgYWxsb2NzIChhcyBhIHN1bSBvZiBhbGwgdGhlIHBhcnRpdGlvbnMpLiBU aGlzIGFsbG93cyBCZ0J1ZmZlclN5bmMKKyAqIHRvIGNhbGN1bGF0ZSBhdmVyYWdlIG51bWJl ciBvZiBhbGxvY2F0aW9ucyBwZXIgcGFydGl0aW9uIGZvciB0aGUgbmV4dAorICogc3luYyBj eWNsZS4KKyAqCisgKiBJbiBhZGRpdGlvbiBpdCByZXR1cm5zIHRoZSBjb3VudCBvZiByZWNl bnQgYnVmZmVyIGFsbG9jcywgd2hpY2ggaXMgYSB0b3RhbAorICogc3VtbWVkIGZyb20gYWxs IHBhcnRpdGlvbnMuIFRoZSBhbGxvYyBjb3VudHMgYXJlIHJlc2V0IGFmdGVyIGJlaW5nIHJl YWQsCisgKiBhcyB0aGUgcGFydGl0aW9ucyBhcmUgd2Fsa2VkLgorICovCit2b2lkCitTdHJh dGVneVN5bmNQcmVwYXJlKGludCAqbnVtX3BhcnRzLCB1aW50MzIgKm51bV9idWZfYWxsb2Mp Cit7CisJKm51bV9idWZfYWxsb2MgPSAwOworCSpudW1fcGFydHMgPSBTdHJhdGVneUNvbnRy b2wtPm51bV9wYXJ0aXRpb25zOworCisJLyoKKwkgKiBXZSBsb2NrIHRoZSBwYXJ0aXRpb25z IG9uZSBieSBvbmUsIHNvIG5vdCBleGFjbHkgaW4gc3luYywgYnV0IHRoYXQKKwkgKiBzaG91 bGQgYmUgZmluZS4gV2UncmUgb25seSBsb29raW5nIGZvciBoZXVyaXN0aWNzIGFueXdheS4K KwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRp dGlvbnM7IGkrKykKKwl7CisJCUNsb2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29udHJv bC0+c3dlZXBzW2ldOworCisJCVNwaW5Mb2NrQWNxdWlyZSgmc3dlZXAtPmNsb2NrX3N3ZWVw X2xvY2spOworCQlpZiAobnVtX2J1Zl9hbGxvYykKKwkJeworCQkJdWludDMyCWFsbG9jcyA9 IHBnX2F0b21pY19leGNoYW5nZV91MzIoJnN3ZWVwLT5udW1CdWZmZXJBbGxvY3MsIDApOwor CisJCQkvKiBpbmNsdWRlIHRoZSBjb3VudCBpbiB0aGUgcnVubmluZyB0b3RhbCAqLworCQkJ cGdfYXRvbWljX2ZldGNoX2FkZF91NjQoJnN3ZWVwLT5udW1Ub3RhbEFsbG9jcywgYWxsb2Nz KTsKKworCQkJKm51bV9idWZfYWxsb2MgKz0gYWxsb2NzOworCQl9CisJCVNwaW5Mb2NrUmVs ZWFzZSgmc3dlZXAtPmNsb2NrX3N3ZWVwX2xvY2spOworCX0KK30KKwogLyoKICAqIFN0cmF0 ZWd5U3luY1N0YXJ0IC0tIHRlbGwgQmdCdWZmZXJTeW5jIHdoZXJlIHRvIHN0YXJ0IHN5bmNp bmcKICAqCkBAIC0yNzYsMzcgKzQ4NSw0NCBAQCBTdHJhdGVneUdldEJ1ZmZlcihCdWZmZXJB Y2Nlc3NTdHJhdGVneSBzdHJhdGVneSwgdWludDMyICpidWZfc3RhdGUsIGJvb2wgKmZyb21f cgogICogQmdCdWZmZXJTeW5jKCkgd2lsbCBwcm9jZWVkIGNpcmN1bGFybHkgYXJvdW5kIHRo ZSBidWZmZXIgYXJyYXkgZnJvbSB0aGVyZS4KICAqCiAgKiBJbiBhZGRpdGlvbiwgd2UgcmV0 dXJuIHRoZSBjb21wbGV0ZWQtcGFzcyBjb3VudCAod2hpY2ggaXMgZWZmZWN0aXZlbHkKLSAq IHRoZSBoaWdoZXItb3JkZXIgYml0cyBvZiBuZXh0VmljdGltQnVmZmVyKSBhbmQgdGhlIGNv dW50IG9mIHJlY2VudCBidWZmZXIKLSAqIGFsbG9jcyBpZiBub24tTlVMTCBwb2ludGVycyBh cmUgcGFzc2VkLiAgVGhlIGFsbG9jIGNvdW50IGlzIHJlc2V0IGFmdGVyCi0gKiBiZWluZyBy ZWFkLgorICogdGhlIGhpZ2hlci1vcmRlciBiaXRzIG9mIG5leHRWaWN0aW1CdWZmZXIpLgor ICoKKyAqIFRoaXMgb25seSBjb25zaWRlcnMgYSBzaW5nbGUgY2xvY2tzd2VlcCBwYXJ0aXRp b24sIGFzIEJnQnVmZmVyU3luYyBsb29rcworICogYXQgdGhlbSBvbmUgYnkgb25lLgogICov CiBpbnQKLVN0cmF0ZWd5U3luY1N0YXJ0KHVpbnQzMiAqY29tcGxldGVfcGFzc2VzLCB1aW50 MzIgKm51bV9idWZfYWxsb2MpCitTdHJhdGVneVN5bmNTdGFydChpbnQgcGFydGl0aW9uLCB1 aW50MzIgKmNvbXBsZXRlX3Bhc3NlcywKKwkJCQkgIGludCAqZmlyc3RfYnVmZmVyLCBpbnQg Km51bV9idWZmZXJzKQogewogCXVpbnQzMgkJbmV4dFZpY3RpbUJ1ZmZlcjsKIAlpbnQJCQly ZXN1bHQ7CisJQ2xvY2tTd2VlcCAqc3dlZXAgPSAmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNb cGFydGl0aW9uXTsKIAotCVNwaW5Mb2NrQWNxdWlyZSgmU3RyYXRlZ3lDb250cm9sLT5idWZm ZXJfc3RyYXRlZ3lfbG9jayk7Ci0JbmV4dFZpY3RpbUJ1ZmZlciA9IHBnX2F0b21pY19yZWFk X3UzMigmU3RyYXRlZ3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVyKTsKLQlyZXN1bHQgPSBu ZXh0VmljdGltQnVmZmVyICUgTkJ1ZmZlcnM7CisJQXNzZXJ0KChwYXJ0aXRpb24gPj0gMCkg JiYgKHBhcnRpdGlvbiA8IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnMpKTsKKwor CVNwaW5Mb2NrQWNxdWlyZSgmc3dlZXAtPmNsb2NrX3N3ZWVwX2xvY2spOworCW5leHRWaWN0 aW1CdWZmZXIgPSBwZ19hdG9taWNfcmVhZF91MzIoJnN3ZWVwLT5uZXh0VmljdGltQnVmZmVy KTsKKwlyZXN1bHQgPSBuZXh0VmljdGltQnVmZmVyICUgc3dlZXAtPm51bUJ1ZmZlcnM7CisK KwkqZmlyc3RfYnVmZmVyID0gc3dlZXAtPmZpcnN0QnVmZmVyOworCSpudW1fYnVmZmVycyA9 IHN3ZWVwLT5udW1CdWZmZXJzOwogCiAJaWYgKGNvbXBsZXRlX3Bhc3NlcykKIAl7Ci0JCSpj b21wbGV0ZV9wYXNzZXMgPSBTdHJhdGVneUNvbnRyb2wtPmNvbXBsZXRlUGFzc2VzOworCQkq Y29tcGxldGVfcGFzc2VzID0gc3dlZXAtPmNvbXBsZXRlUGFzc2VzOwogCiAJCS8qCiAJCSAq IEFkZGl0aW9uYWxseSBhZGQgdGhlIG51bWJlciBvZiB3cmFwYXJvdW5kcyB0aGF0IGhhcHBl bmVkIGJlZm9yZQogCQkgKiBjb21wbGV0ZVBhc3NlcyBjb3VsZCBiZSBpbmNyZW1lbnRlZC4g Qy5mLiBDbG9ja1N3ZWVwVGljaygpLgogCQkgKi8KLQkJKmNvbXBsZXRlX3Bhc3NlcyArPSBu ZXh0VmljdGltQnVmZmVyIC8gTkJ1ZmZlcnM7CisJCSpjb21wbGV0ZV9wYXNzZXMgKz0gbmV4 dFZpY3RpbUJ1ZmZlciAvIHN3ZWVwLT5udW1CdWZmZXJzOwogCX0KKwlTcGluTG9ja1JlbGVh c2UoJnN3ZWVwLT5jbG9ja19zd2VlcF9sb2NrKTsKIAotCWlmIChudW1fYnVmX2FsbG9jKQot CXsKLQkJKm51bV9idWZfYWxsb2MgPSBwZ19hdG9taWNfZXhjaGFuZ2VfdTMyKCZTdHJhdGVn eUNvbnRyb2wtPm51bUJ1ZmZlckFsbG9jcywgMCk7Ci0JfQotCVNwaW5Mb2NrUmVsZWFzZSgm U3RyYXRlZ3lDb250cm9sLT5idWZmZXJfc3RyYXRlZ3lfbG9jayk7Ci0JcmV0dXJuIHJlc3Vs dDsKKwkvKiBYWFggYnVmZmVyIElEcyBzdGFydCBhdCAxLCB3ZSdyZSBjYWxjdWxhdGluZyAw LWJhc2VkIGluZGV4ZXMgKi8KKwlBc3NlcnQoQnVmZmVySXNWYWxpZCgxICsgc3dlZXAtPmZp cnN0QnVmZmVyICsgcmVzdWx0KSk7CisKKwlyZXR1cm4gc3dlZXAtPmZpcnN0QnVmZmVyICsg cmVzdWx0OwogfQogCiAvKgpAQCAtMzQzLDYgKzU1OSw5IEBAIFNpemUKIFN0cmF0ZWd5U2ht ZW1TaXplKHZvaWQpCiB7CiAJU2l6ZQkJc2l6ZSA9IDA7CisJaW50CQkJbnVtX3BhcnRpdGlv bnM7CisKKwlCdWZmZXJQYXJ0aXRpb25QYXJhbXMoJm51bV9wYXJ0aXRpb25zLCBOVUxMKTsK IAogCS8qIHNpemUgb2YgbG9va3VwIGhhc2ggdGFibGUgLi4uIHNlZSBjb21tZW50IGluIFN0 cmF0ZWd5SW5pdGlhbGl6ZSAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBCdWZUYWJsZVNo bWVtU2l6ZShOQnVmZmVycyArIE5VTV9CVUZGRVJfUEFSVElUSU9OUykpOwpAQCAtMzUwLDYg KzU2OSwxMCBAQCBTdHJhdGVneVNobWVtU2l6ZSh2b2lkKQogCS8qIHNpemUgb2YgdGhlIHNo YXJlZCByZXBsYWNlbWVudCBzdHJhdGVneSBjb250cm9sIGJsb2NrICovCiAJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIE1BWEFMSUdOKHNpemVvZihCdWZmZXJTdHJhdGVneUNvbnRyb2wpKSk7 CiAKKwkvKiBzaXplIG9mIGNsb2Nrc3dlZXAgcGFydGl0aW9ucyAoYXQgbGVhc3Qgb25lIHBl ciBOVU1BIG5vZGUpICovCisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIE1BWEFMSUdOKG11bF9z aXplKHNpemVvZihDbG9ja1N3ZWVwKSwKKwkJCQkJCQkJCQkJbnVtX3BhcnRpdGlvbnMpKSk7 CisKIAlyZXR1cm4gc2l6ZTsKIH0KIApAQCAtMzY1LDYgKzU4OCwxOCBAQCBTdHJhdGVneUlu aXRpYWxpemUoYm9vbCBpbml0KQogewogCWJvb2wJCWZvdW5kOwogCisJaW50CQkJbnVtX25v ZGVzOworCWludAkJCW51bV9wYXJ0aXRpb25zOworCWludAkJCW51bV9wYXJ0aXRpb25zX3Bl cl9ub2RlOworCisJbnVtX3BhcnRpdGlvbnMgPSBCdWZmZXJQYXJ0aXRpb25Db3VudCgpOwor CW51bV9ub2RlcyA9IEJ1ZmZlclBhcnRpdGlvbk5vZGVzKCk7CisKKwkvKiBhbHdheXMgYSBt dWx0aXBsZSBvZiBOVU1BIG5vZGVzICovCisJQXNzZXJ0KG51bV9wYXJ0aXRpb25zICUgbnVt X25vZGVzID09IDApOworCisJbnVtX3BhcnRpdGlvbnNfcGVyX25vZGUgPSAobnVtX3BhcnRp dGlvbnMgLyBudW1fbm9kZXMpOworCiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSBzaGFyZWQg YnVmZmVyIGxvb2t1cCBoYXNodGFibGUuCiAJICoKQEAgLTM4Miw3ICs2MTcsOCBAQCBTdHJh dGVneUluaXRpYWxpemUoYm9vbCBpbml0KQogCSAqLwogCVN0cmF0ZWd5Q29udHJvbCA9IChC dWZmZXJTdHJhdGVneUNvbnRyb2wgKikKIAkJU2htZW1Jbml0U3RydWN0KCJCdWZmZXIgU3Ry YXRlZ3kgU3RhdHVzIiwKLQkJCQkJCXNpemVvZihCdWZmZXJTdHJhdGVneUNvbnRyb2wpLAor CQkJCQkJTUFYQUxJR04ob2Zmc2V0b2YoQnVmZmVyU3RyYXRlZ3lDb250cm9sLCBzd2VlcHMp KSArCisJCQkJCQlNQVhBTElHTihzaXplb2YoQ2xvY2tTd2VlcCkgKiBudW1fcGFydGl0aW9u cyksCiAJCQkJCQkmZm91bmQpOwogCiAJaWYgKCFmb3VuZCkKQEAgLTM5NCwxNSArNjMwLDQ0 IEBAIFN0cmF0ZWd5SW5pdGlhbGl6ZShib29sIGluaXQpCiAKIAkJU3BpbkxvY2tJbml0KCZT dHJhdGVneUNvbnRyb2wtPmJ1ZmZlcl9zdHJhdGVneV9sb2NrKTsKIAotCQkvKiBJbml0aWFs aXplIHRoZSBjbG9jay1zd2VlcCBwb2ludGVyICovCi0JCXBnX2F0b21pY19pbml0X3UzMigm U3RyYXRlZ3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVyLCAwKTsKKwkJLyogSW5pdGlhbGl6 ZSB0aGUgY2xvY2sgc3dlZXAgcG9pbnRlcnMgKGZvciBhbGwgcGFydGl0aW9ucykgKi8KKwkJ Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1fcGFydGl0aW9uczsgaSsrKQorCQl7CisJCQlpbnQJ CQlub2RlLAorCQkJCQkJbnVtX2J1ZmZlcnMsCisJCQkJCQlmaXJzdF9idWZmZXIsCisJCQkJ CQlsYXN0X2J1ZmZlcjsKKworCQkJU3BpbkxvY2tJbml0KCZTdHJhdGVneUNvbnRyb2wtPnN3 ZWVwc1tpXS5jbG9ja19zd2VlcF9sb2NrKTsKKworCQkJcGdfYXRvbWljX2luaXRfdTMyKCZT dHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5uZXh0VmljdGltQnVmZmVyLCAwKTsKIAotCQkv KiBDbGVhciBzdGF0aXN0aWNzICovCi0JCVN0cmF0ZWd5Q29udHJvbC0+Y29tcGxldGVQYXNz ZXMgPSAwOwotCQlwZ19hdG9taWNfaW5pdF91MzIoJlN0cmF0ZWd5Q29udHJvbC0+bnVtQnVm ZmVyQWxsb2NzLCAwKTsKKwkJCS8qIGdldCBpbmZvIGFib3V0IHRoZSBidWZmZXIgcGFydGl0 aW9uICovCisJCQlCdWZmZXJQYXJ0aXRpb25HZXQoaSwgJm5vZGUsICZudW1fYnVmZmVycywK KwkJCQkJCQkgICAmZmlyc3RfYnVmZmVyLCAmbGFzdF9idWZmZXIpOworCisJCQkvKgorCQkJ ICogRklYTUUgVGhpcyBtYXkgbm90IHF1aXRlIHJpZ2h0LCBiZWNhdXNlIGlmIE5CdWZmZXJz IGlzIG5vdCBhCisJCQkgKiBwZXJmZWN0IG11bHRpcGxlIG9mIG51bUJ1ZmZlcnMsIHRoZSBs YXN0IHBhcnRpdGlvbiB3aWxsIGhhdmUKKwkJCSAqIG51bUJ1ZmZlcnMgc2V0IHRvbyBoaWdo LiBidWZfaW5pdCBoYW5kbGVzIHRoaXMgYnkgdHJhY2tpbmcgdGhlCisJCQkgKiByZW1haW5p bmcgbnVtYmVyIG9mIGJ1ZmZlcnMsIGFuZCBub3Qgb3ZlcmZsb3dpbmcuCisJCQkgKi8KKwkJ CVN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ldLm51bUJ1ZmZlcnMgPSBudW1fYnVmZmVyczsK KwkJCVN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ldLmZpcnN0QnVmZmVyID0gZmlyc3RfYnVm ZmVyOworCisJCQkvKiBDbGVhciBzdGF0aXN0aWNzICovCisJCQlTdHJhdGVneUNvbnRyb2wt PnN3ZWVwc1tpXS5jb21wbGV0ZVBhc3NlcyA9IDA7CisJCQlwZ19hdG9taWNfaW5pdF91MzIo JlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ldLm51bUJ1ZmZlckFsbG9jcywgMCk7CisJCQlw Z19hdG9taWNfaW5pdF91NjQoJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ldLm51bVRvdGFs QWxsb2NzLCAwKTsKKwkJfQogCiAJCS8qIE5vIHBlbmRpbmcgbm90aWZpY2F0aW9uICovCiAJ CVN0cmF0ZWd5Q29udHJvbC0+Ymd3cHJvY25vID0gLTE7CisKKwkJLyogaW5pdGlhbGl6ZSB0 aGUgcGFydGl0aW9uZWQgY2xvY2tzd2VlcCAqLworCQlTdHJhdGVneUNvbnRyb2wtPm51bV9w YXJ0aXRpb25zID0gbnVtX3BhcnRpdGlvbnM7CisJCVN0cmF0ZWd5Q29udHJvbC0+bnVtX25v ZGVzID0gbnVtX25vZGVzOworCQlTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zX3Bl cl9ub2RlID0gbnVtX3BhcnRpdGlvbnNfcGVyX25vZGU7CiAJfQogCWVsc2UKIAkJQXNzZXJ0 KCFpbml0KTsKQEAgLTczOSwzICsxMDA0LDIzIEBAIFN0cmF0ZWd5UmVqZWN0QnVmZmVyKEJ1 ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCBCdWZmZXJEZXNjICpidWYsIGJvb2wgZnJv bV9yCiAKIAlyZXR1cm4gdHJ1ZTsKIH0KKwordm9pZAorQ2xvY2tTd2VlcFBhcnRpdGlvbkdl dEluZm8oaW50IGlkeCwKKwkJCQkJCSAgIHVpbnQzMiAqY29tcGxldGVfcGFzc2VzLCB1aW50 MzIgKm5leHRfdmljdGltX2J1ZmZlciwKKwkJCQkJCSAgIHVpbnQ2NCAqYnVmZmVyX3RvdGFs X2FsbG9jcywgdWludDMyICpidWZmZXJfYWxsb2NzKQoreworCUNsb2NrU3dlZXAgKnN3ZWVw ID0gJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2lkeF07CisKKwlBc3NlcnQoKGlkeCA+PSAw KSAmJiAoaWR4IDwgU3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9ucykpOworCisJLyog Z2V0IHRoZSBjbG9ja3N3ZWVwIHN0YXRzICovCisJKmNvbXBsZXRlX3Bhc3NlcyA9IHN3ZWVw LT5jb21wbGV0ZVBhc3NlczsKKwkqbmV4dF92aWN0aW1fYnVmZmVyID0gcGdfYXRvbWljX3Jl YWRfdTMyKCZzd2VlcC0+bmV4dFZpY3RpbUJ1ZmZlcik7CisKKwkqYnVmZmVyX2FsbG9jcyA9 IHBnX2F0b21pY19yZWFkX3UzMigmc3dlZXAtPm51bUJ1ZmZlckFsbG9jcyk7CisJKmJ1ZmZl cl90b3RhbF9hbGxvY3MgPSBwZ19hdG9taWNfcmVhZF91NjQoJnN3ZWVwLT5udW1Ub3RhbEFs bG9jcyk7CisKKwkvKiBjYWxjdWxhdGUgdGhlIGFjdHVhbCBidWZmZXIgSUQgKi8KKwkqbmV4 dF92aWN0aW1fYnVmZmVyID0gc3dlZXAtPmZpcnN0QnVmZmVyICsgKCpuZXh0X3ZpY3RpbV9i dWZmZXIgJSBzd2VlcC0+bnVtQnVmZmVycyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2lu dGVybmFscy5oCmluZGV4IDI5NDE4OGUyMWM1Li41Y2NlNjkwOTMzYiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgKKysrIGIvc3JjL2luY2x1ZGUv c3RvcmFnZS9idWZfaW50ZXJuYWxzLmgKQEAgLTQzOSw3ICs0MzksOSBAQCBleHRlcm4gQnVm ZmVyRGVzYyAqU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRl Z3ksCiBleHRlcm4gYm9vbCBTdHJhdGVneVJlamVjdEJ1ZmZlcihCdWZmZXJBY2Nlc3NTdHJh dGVneSBzdHJhdGVneSwKIAkJCQkJCQkJIEJ1ZmZlckRlc2MgKmJ1ZiwgYm9vbCBmcm9tX3Jp bmcpOwogCi1leHRlcm4gaW50CVN0cmF0ZWd5U3luY1N0YXJ0KHVpbnQzMiAqY29tcGxldGVf cGFzc2VzLCB1aW50MzIgKm51bV9idWZfYWxsb2MpOworZXh0ZXJuIHZvaWQgU3RyYXRlZ3lT eW5jUHJlcGFyZShpbnQgKm51bV9wYXJ0cywgdWludDMyICpudW1fYnVmX2FsbG9jKTsKK2V4 dGVybiBpbnQJU3RyYXRlZ3lTeW5jU3RhcnQoaW50IHBhcnRpdGlvbiwgdWludDMyICpjb21w bGV0ZV9wYXNzZXMsCisJCQkJCQkJICBpbnQgKmZpcnN0X2J1ZmZlciwgaW50ICpudW1fYnVm ZmVycyk7CiBleHRlcm4gdm9pZCBTdHJhdGVneU5vdGlmeUJnV3JpdGVyKGludCBiZ3dwcm9j bm8pOwogCiBleHRlcm4gU2l6ZSBTdHJhdGVneVNobWVtU2l6ZSh2b2lkKTsKQEAgLTQ4NSw1 ICs0ODcsNiBAQCBleHRlcm4gaW50CUJ1ZmZlclBhcnRpdGlvbkNvdW50KHZvaWQpOwogZXh0 ZXJuIGludAlCdWZmZXJQYXJ0aXRpb25Ob2Rlcyh2b2lkKTsKIGV4dGVybiB2b2lkIEJ1ZmZl clBhcnRpdGlvbkdldChpbnQgaWR4LCBpbnQgKm5vZGUsIGludCAqbnVtX2J1ZmZlcnMsCiAJ CQkJCQkJICAgaW50ICpmaXJzdF9idWZmZXIsIGludCAqbGFzdF9idWZmZXIpOworZXh0ZXJu IHZvaWQgQnVmZmVyUGFydGl0aW9uUGFyYW1zKGludCAqbnVtX3BhcnRpdGlvbnMsIGludCAq bnVtX25vZGVzKTsKIAogI2VuZGlmCQkJCQkJCS8qIEJVRk1HUl9JTlRFUk5BTFNfSCAqLwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCBiL3NyYy9pbmNsdWRl L3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggZTUyZmNhOWU0ODMuLjlhZGU2OWU1M2I1IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCisrKyBiL3NyYy9pbmNsdWRl L3N0b3JhZ2UvYnVmbWdyLmgKQEAgLTM1NSw2ICszNTUsMTEgQEAgZXh0ZXJuIGludAlHZXRB Y2Nlc3NTdHJhdGVneUJ1ZmZlckNvdW50KEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5 KTsKIGV4dGVybiBpbnQJR2V0QWNjZXNzU3RyYXRlZ3lQaW5MaW1pdChCdWZmZXJBY2Nlc3NT dHJhdGVneSBzdHJhdGVneSk7CiAKIGV4dGVybiB2b2lkIEZyZWVBY2Nlc3NTdHJhdGVneShC dWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSk7CitleHRlcm4gdm9pZCBDbG9ja1N3ZWVw UGFydGl0aW9uR2V0SW5mbyhpbnQgaWR4LAorCQkJCQkJCQkJICAgdWludDMyICpjb21wbGV0 ZV9wYXNzZXMsCisJCQkJCQkJCQkgICB1aW50MzIgKm5leHRfdmljdGltX2J1ZmZlciwKKwkJ CQkJCQkJCSAgIHVpbnQ2NCAqYnVmZmVyX3RvdGFsX2FsbG9jcywKKwkJCQkJCQkJCSAgIHVp bnQzMiAqYnVmZmVyX2FsbG9jcyk7CiAKIAogLyogaW5saW5lIGZ1bmN0aW9ucyAqLwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMjdfc3RyZWFtX3JlZ3Jlc3MucGwgYi9z cmMvdGVzdC9yZWNvdmVyeS90LzAyN19zdHJlYW1fcmVncmVzcy5wbAppbmRleCA1ODljNzlk OTdkMy4uOThiMTQ2ZWQ0YjcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDI3 X3N0cmVhbV9yZWdyZXNzLnBsCisrKyBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDI3X3N0cmVh bV9yZWdyZXNzLnBsCkBAIC0xOCw2ICsxOCwxMSBAQCAkbm9kZV9wcmltYXJ5LT5hZGp1c3Rf Y29uZigncG9zdGdyZXNxbC5jb25mJywgJ21heF9jb25uZWN0aW9ucycsICcyNScpOwogJG5v ZGVfcHJpbWFyeS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCiAJJ21heF9wcmVw YXJlZF90cmFuc2FjdGlvbnMgPSAxMCcpOwogCisjIFRoZSBkZWZhdWx0IGlzIDFNQiwgd2hp Y2ggaXMgbm90IGVub3VnaCB3aXRoIGNsb2NrLXN3ZWVwIHBhcnRpdGlvbmluZy4KKyMgSW5j cmVhc2UgdG8gMzJNQiwgc28gdGhhdCB3ZSBkb24ndCBnZXQgIm5vIHVucGlubmVkIGJ1ZmZl cnMiLgorJG5vZGVfcHJpbWFyeS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJ J3NoYXJlZF9idWZmZXJzID0gMzJNQicpOworCiAjIEVuYWJsZSBwZ19zdGF0X3N0YXRlbWVu dHMgdG8gZm9yY2UgdGVzdHMgdG8gZG8gcXVlcnkganVtYmxpbmcuCiAjIHBnX3N0YXRfc3Rh dGVtZW50cy5tYXggc2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgZW50 cmllcwogIyBvZiB0aGUgcmVncmVzc2lvbiBkYXRhYmFzZS4KZGlmZiAtLWdpdCBhL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKaW5kZXggNTAxOTU3MTgyOTQuLmI2OGY3NWI3ZjMxIDEwMDY0NAotLS0gYS9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdApAQCAtNDI3LDYgKzQyNyw3IEBAIENsaWVudENlcnROYW1lCiBD bGllbnRDb25uZWN0aW9uSW5mbwogQ2xpZW50RGF0YQogQ2xpZW50U29ja2V0CitDbG9ja1N3 ZWVwCiBDbG9uZVB0clR5cGUKIENsb3NlUG9ydGFsU3RtdAogQ2xvc2VQdHJUeXBlCi0tIAoy LjUxLjAKCg== --------------i0MMC9nLNSRCyrH3GSEb0aRu Content-Type: text/x-patch; charset=UTF-8; name="v20250911-0003-NUMA-clocksweep-allocation-balancing.patch" Content-Disposition: attachment; filename*0="v20250911-0003-NUMA-clocksweep-allocation-balancing.patch" Content-Transfer-Encoding: base64 RnJvbSA2YTQ0NDRmMzE5Mzk0YWM4OGFiZTI3ZmFmNGNjYmEyMmVhMWEwZGJlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCAxMCBTZXAgMjAyNSAxODo1NjoyOCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUwOTExIDMvOF0gTlVNQTogY2xvY2tzd2VlcCBhbGxvY2F0aW9uIGJhbGFuY2luZwoK SWYgYmFja2VuZHMgb25seSBhbGxvY2F0ZSBidWZmZXJzIGZyb20gdGhlICJsb2NhbCIgcGFy dGl0aW9uLCB0aGlzIGNvdWxkCmNhdXNlIHNpZ25pZmljYW50IG1pc2JhbGFuY2UgLSBzb21l IHBhcnRpdGlvbnMgbWlnaHQgYmUgb3ZlcnVzZWQsIHdoaWxlCm90aGVyIHBhcnRpdGlvbnMg d291bGQgYmUgbGVmdCB1bnVzZWQuIEluIG90aGVyIHdvcmRzLCBzaGFyZWQgYnVmZmVycwp3 b3VsZCBub3QgYmUgdXNlZCBlZmZpY2llbnRseS4KCldlIHdhbnQgYWxsIHBhcnRpdGlvbnMg dG8gYmUgdXNlZCBhYm91dCB0aGUgc2FtZSwgaS5lLiBzZXJ2ZSBhYm91dCB0aGUKc2FtZSBu dW1iZXIgb2YgYWxsb2NhdGlvbnMuIFRvIGFjaGlldmUgdGhhdCwgYWxsb2NhdGlvbnMgZnJv bSBwYXJ0aXRpb25zCnRoYXQgYXJlICJ0b28gYnVzeSIgbWF5IGdldCByZWRpcmVjdGVkIHRv IG90aGVyIHBhcnRpdGlvbnMuIFRoZSBzeXN0ZW0KY291bnRzIGFsbG9jYXRpb25zIHJlcXVl c3RlZCBmcm9tIGVhY2ggcGFydGl0aW9uLCBjYWxjdWxhdGVzIHRoZSAiZmFpcgpzaGFyZSIg KGF2ZXJhZ2UgcGVyIHBhcnRpdGlvbiksIGFuZCB0aGVuIHJlZGlyZWN0c2V4Y2VzcyBhbGxv Y2F0aW9ucyB0bwpvdGhlciBwYXJ0aXRpb25zLgoKRWFjaCBwYXJ0aXRpb24gZ2V0cyBhIHNl dCBvZiBjb2VmZmljaWVudHMgZGV0ZXJtaW5pbmcgdGhlIGZyYWN0aW9uIG9mCmFsbG9jYXRp b25zIHRvIHJlZGlyZWN0IHRvIG90aGVyIHBhcnRpdGlvbnMuIFRoZSBjb2VmZmljaWVudHMg bWF5IGJlCmludGVycHJldGVkIGFzIGEgImJ1ZGdldCIgZm9yIGVhY2ggb2YgdGhlIHBhcnRp dGlvbiwgaS5lLiB0aGUgbnVtYmVyIG9mCmFsbG9jYXRpb25zIHRvIHNlcnZlIGZyb20gdGhh dCBwYXJ0aXRpb24sIGJlZm9yZSBtb3ZpbmcgdG8gdGhlIG5leHQKcGFydGl0aW9uIChpbiBh IHJvdW5kLXJvYmluIG1hbm5lcikuCgpBbGwgb2YgdGhpcyBpcyB0aWVkIHRvIHRoZSBwYXJ0 aXRpb24gd2hlcmUgdGhlIGFsbG9jYXRpb24gd2FzIHJlcXVlc3RlZC4KRWFjaCBwYXJ0aXRp b24gaGFzIGEgc2VwYXJhdGUgc2V0IG9mIGNvZWZmaWNpZW50cy4KCldlIG1pZ2h0IGFsc28g dHJlYXQgdGhlIGNvZWZmaWNpZW50cyBhcyBwcm9iYWJpbGl0aWVzLCBhbmQgdXNlIFBSTkcg dG8KZGV0ZXJtaW5lIHdoZXJlIHRvIGRpcmVjdCBpbmRpdmlkdWFsIHJlcXVlc3RzLiBCdXQg YSBQUk5HIHNlZW1zIGZhaXJseQpleHBlbnNpdmUsIGFuZCB0aGUgYnVkZ2V0IGFwcHJvYWNo IHdvcmtzIHdlbGwuCgpXZSBpbnRlbnRpb25hbGx5IGtlZXAgdGhlICJidWRnZXQiIGZhaXJs eSBsb3csIHdpdGggdGhlIHN1bSBmb3IgYSBnaXZlbgpwYXJ0aXRpb24gMTAwLiBUaGF0IG1l YW5zIHdlIGdldCB0byB0aGUgc2FtZSBwYXJ0aXRpb24gYWZ0ZXIgb25seSAxMDAKYWxsb2Nh dGlvbnMsIGtlZXBpbmcgaXQgbW9yZSBiYWxhbmNlZC4gSXQgd291bGRuJ3QgYmUgaGFyZCB0 byBtYWtlIHRoZQpidWRnZXRzIGhpZ2hlciAoZS5nLiBtYXRjaGluZyB0aGUgbnVtYmVyIG9m IGFsbG9jYXRpb25zIHBlciByb3VuZCksIGJ1dAppdCBtaWdodCBhbHNvIG1ha2UgdGhlIGJl aGF2aW9yIGxlc3Mgc21vb3RoIChsb25nIHBlcmlvZCBvZiBhbGxvY2F0aW9ucwpmcm9tIGVh Y2ggcGFydGl0aW9uKS4KClRoaXMgaXMgdmVyeSBzaW1wbGUvY2hlYXAsIGFuZCBvdmVyIG1h bnkgYWxsb2NhdGlvbnMgaXQgaGFzIHRoZSBzYW1lCmVmZmVjdC4gRm9yIHBlcmlvZHMgb2Yg bG93IGFjdGl2aXR5IGl0IG1heSBkaXZlcmdlLCBidXQgdGhhdCBkb2VzIG5vdAptYXR0ZXIg bXVjaCAod2UgY2FyZSBhYm91dCBoaWdoLWFjdGl2aXR5IHBlcmlvZHMgbXVjaCBtb3JlKS4K LS0tCiAuLi4vcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbCAgICAgICAgICAgICAgfCAg IDUgKy0KIGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYyB8 ICA0MyArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgICAgICAgICAg IHwgICAzICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMgICAgICAg ICB8IDM3NyArKysrKysrKysrKysrKysrKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2lu dGVybmFscy5oICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1n ci5oICAgICAgICAgICAgICAgICAgfCAgMTIgKy0KIDYgZmlsZXMgY2hhbmdlZCwgNDE5IGlu c2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdf YnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbCBiL2NvbnRyaWIvcGdf YnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbAppbmRleCA2Njc2ZTgw NzAzNC4uZGMyY2UwMTkyODMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUv cGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbAorKysgYi9jb250cmliL3BnX2J1ZmZlcmNh Y2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwKQEAgLTIyLDcgKzIyLDEwIEBAIENS RUFURSBWSUVXIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMgQVMKIAkgbnVtX3Bhc3NlcyBi aWdpbnQsCQkJLS0gY2xvY2tzd2VlcCBwYXNzZXMKIAkgbmV4dF9idWZmZXIgaW50ZWdlciwJ CS0tIG5leHQgdmljdGltIGJ1ZmZlciBmb3IgY2xvY2tzd2VlcAogCSB0b3RhbF9hbGxvY3Mg YmlnaW50LAkJLS0gaGFuZGxlZCBhbGxvY3MgKHJ1bm5pbmcgdG90YWwpCi0JIG51bV9hbGxv Y3MgYmlnaW50KTsJCS0tIGhhbmRsZWQgYWxsb2NzIChjdXJyZW50IGN5Y2xlKQorCSBudW1f YWxsb2NzIGJpZ2ludCwJCQktLSBoYW5kbGVkIGFsbG9jcyAoY3VycmVudCBjeWNsZSkKKwkg dG90YWxfcmVxX2FsbG9jcyBiaWdpbnQsCS0tIHJlcXVlc3RlZCBhbGxvY3MgKHJ1bm5pbmcg dG90YWwpCisJIG51bV9yZXFfYWxsb2NzIGJpZ2ludCwJCS0tIGhhbmRsZWQgYWxsb2NzIChj dXJyZW50IGN5Y2xlKQorCSB3ZWlnaHRzIGludFtdKTsJCQktLSBiYWxhbmNpbmcgd2VpZ2h0 cwogCiAtLSBEb24ndCB3YW50IHRoZXNlIHRvIGJlIGF2YWlsYWJsZSB0byBwdWJsaWMuCiBS RVZPS0UgQUxMIE9OIEZVTkNUSU9OIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoKSBGUk9N IFBVQkxJQzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVy Y2FjaGVfcGFnZXMuYyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVf cGFnZXMuYwppbmRleCBjOWRmYzhhMWI4Mi4uZjY4MzFmNjBiOWUgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYworKysgYi9jb250 cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKQEAgLTE1LDYgKzE1 LDggQEAKICNpbmNsdWRlICJwb3J0L3BnX251bWEuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1 Zl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgorI2luY2x1ZGUg InV0aWxzL2FycmF5LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRl ICJ1dGlscy9yZWwuaCIKIAogCkBAIC0yNyw3ICsyOSw3IEBACiAjZGVmaW5lIE5VTV9CVUZG RVJDQUNIRV9FVklDVF9BTExfRUxFTSAzCiAKICNkZWZpbmUgTlVNX0JVRkZFUkNBQ0hFX05V TUFfRUxFTQkzCi0jZGVmaW5lIE5VTV9CVUZGRVJDQUNIRV9QQVJUSVRJT05TX0VMRU0JOQor I2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19FTEVNCTEyCiAKIFBHX01PRFVM RV9NQUdJQ19FWFQoCiAJCQkJCS5uYW1lID0gInBnX2J1ZmZlcmNhY2hlIiwKQEAgLTc5NSw2 ICs3OTcsOCBAQCBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FSR1Mp CiAKIAlpZiAoU1JGX0lTX0ZJUlNUQ0FMTCgpKQogCXsKKwkJVHlwZUNhY2hlRW50cnkgKnR5 cGVudHJ5ID0gbG9va3VwX3R5cGVfY2FjaGUoSU5UNE9JRCwgMCk7CisKIAkJZnVuY2N0eCA9 IFNSRl9GSVJTVENBTExfSU5JVCgpOwogCiAJCS8qIFN3aXRjaCBjb250ZXh0IHdoZW4gYWxs b2NhdGluZyBzdHVmZiB0byBiZSB1c2VkIGluIGxhdGVyIGNhbGxzICovCkBAIC04MjYsNiAr ODMwLDEyIEBAIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykK IAkJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKIAkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxl ZGVzYywgKEF0dHJOdW1iZXIpIDksICJudW1fYWxsb2NzIiwKIAkJCQkJCSAgIElOVDhPSUQs IC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIp IDEwLCAidG90YWxfcmVxX2FsbG9jcyIsCisJCQkJCQkgICBJTlQ4T0lELCAtMSwgMCk7CisJ CVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSAxMSwgIm51bV9y ZXFfYWxsb2NzIiwKKwkJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5p dEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDEyLCAid2VpZ3RocyIsCisJCQkJCQkg ICB0eXBlbnRyeS0+dHlwYXJyYXksIC0xLCAwKTsKIAogCQlmdW5jY3R4LT51c2VyX2ZjdHgg PSBCbGVzc1R1cGxlRGVzYyh0dXBsZWRlc2MpOwogCkBAIC04NDcsMTEgKzg1NywxNyBAQCBw Z19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCWZpcnN0 X2J1ZmZlciwKIAkJCQkJbGFzdF9idWZmZXI7CiAKLQkJdWludDY0CQlidWZmZXJfdG90YWxf YWxsb2NzOworCQl1aW50NjQJCWJ1ZmZlcl90b3RhbF9hbGxvY3MsCisJCQkJCWJ1ZmZlcl90 b3RhbF9yZXFfYWxsb2NzOwogCiAJCXVpbnQzMgkJY29tcGxldGVfcGFzc2VzLAogCQkJCQlu ZXh0X3ZpY3RpbV9idWZmZXIsCi0JCQkJCWJ1ZmZlcl9hbGxvY3M7CisJCQkJCWJ1ZmZlcl9h bGxvY3MsCisJCQkJCWJ1ZmZlcl9yZXFfYWxsb2NzOworCisJCWludAkJICAgKndlaWdodHM7 CisJCURhdHVtCSAgICpkd2VpZ2h0czsKKwkJQXJyYXlUeXBlICAqYXJyYXk7CiAKIAkJRGF0 dW0JCXZhbHVlc1tOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19FTEVNXTsKIAkJYm9vbAkJ bnVsbHNbTlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTV07CkBAIC04NjAsOCArODc2 LDE2IEBAIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAkJ CQkJCSAgICZmaXJzdF9idWZmZXIsICZsYXN0X2J1ZmZlcik7CiAKIAkJQ2xvY2tTd2VlcFBh cnRpdGlvbkdldEluZm8oaSwKLQkJCQkJCQkJICAgJmNvbXBsZXRlX3Bhc3NlcywgJm5leHRf dmljdGltX2J1ZmZlciwKLQkJCQkJCQkJICAgJmJ1ZmZlcl90b3RhbF9hbGxvY3MsICZidWZm ZXJfYWxsb2NzKTsKKwkJCQkJCQkJICZjb21wbGV0ZV9wYXNzZXMsICZuZXh0X3ZpY3RpbV9i dWZmZXIsCisJCQkJCQkJCSAmYnVmZmVyX3RvdGFsX2FsbG9jcywgJmJ1ZmZlcl9hbGxvY3Ms CisJCQkJCQkJCSAmYnVmZmVyX3RvdGFsX3JlcV9hbGxvY3MsICZidWZmZXJfcmVxX2FsbG9j cywKKwkJCQkJCQkJICZ3ZWlnaHRzKTsKKworCQlkd2VpZ2h0cyA9IHBhbGxvY19hcnJheShE YXR1bSwgZnVuY2N0eC0+bWF4X2NhbGxzKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBmdW5j Y3R4LT5tYXhfY2FsbHM7IGkrKykKKwkJCWR3ZWlnaHRzW2ldID0gSW50MzJHZXREYXR1bSh3 ZWlnaHRzW2ldKTsKKworCQlhcnJheSA9IGNvbnN0cnVjdF9hcnJheV9idWlsdGluKGR3ZWln aHRzLCBmdW5jY3R4LT5tYXhfY2FsbHMsIElOVDRPSUQpOwogCiAJCXZhbHVlc1swXSA9IElu dDMyR2V0RGF0dW0oaSk7CiAJCW51bGxzWzBdID0gZmFsc2U7CkBAIC04OTAsNiArOTE0LDE1 IEBAIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAkJdmFs dWVzWzhdID0gSW50NjRHZXREYXR1bShidWZmZXJfYWxsb2NzKTsKIAkJbnVsbHNbOF0gPSBm YWxzZTsKIAorCQl2YWx1ZXNbOV0gPSBJbnQ2NEdldERhdHVtKGJ1ZmZlcl90b3RhbF9yZXFf YWxsb2NzKTsKKwkJbnVsbHNbOV0gPSBmYWxzZTsKKworCQl2YWx1ZXNbMTBdID0gSW50NjRH ZXREYXR1bShidWZmZXJfcmVxX2FsbG9jcyk7CisJCW51bGxzWzEwXSA9IGZhbHNlOworCisJ CXZhbHVlc1sxMV0gPSBQb2ludGVyR2V0RGF0dW0oYXJyYXkpOworCQludWxsc1sxMV0gPSBm YWxzZTsKKwogCQkvKiBCdWlsZCBhbmQgcmV0dXJuIHRoZSB0dXBsZS4gKi8KIAkJdHVwbGUg PSBoZWFwX2Zvcm1fdHVwbGUoKFR1cGxlRGVzYykgZnVuY2N0eC0+dXNlcl9mY3R4LCB2YWx1 ZXMsIG51bGxzKTsKIAkJcmVzdWx0ID0gSGVhcFR1cGxlR2V0RGF0dW0odHVwbGUpOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCAxMjExMzRiYjk0Yy4uODMxNTEw NTM5NGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5j CisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCkBAIC0zODg0LDYg KzM4ODQsOSBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkK IAkvKiBhc3N1bWUgd2UgY2FuIGhpYmVybmF0ZSwgYW55IHBhcnRpdGlvbiBjYW4gc2V0IHRv IGZhbHNlICovCiAJYm9vbAkJaGliZXJuYXRlID0gdHJ1ZTsKIAorCS8qIHRyaWdnZXIgcGFy dGl0aW9uIHJlYmFsYW5jaW5nIGZpcnN0ICovCisJU3RyYXRlZ3lTeW5jQmFsYW5jZSgpOwor CiAJLyogZ2V0IHRoZSBudW1iZXIgb2YgY2xvY2tzd2VlcCBwYXJ0aXRpb25zLCBhbmQgdG90 YWwgYWxsb2MgY291bnQgKi8KIAlTdHJhdGVneVN5bmNQcmVwYXJlKCZudW1fcGFydGl0aW9u cywgJnJlY2VudF9hbGxvYyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2ZyZWVsaXN0LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlz dC5jCmluZGV4IGQ1ZjhmMjhmNTYyLi4zNDliNjI2ZGIzYiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9mcmVlbGlzdC5jCkBAIC0zNCw2ICszNCwyMyBAQAogI2RlZmluZSBJTlRf QUNDRVNTX09OQ0UodmFyKQkoKGludCkoKigodm9sYXRpbGUgaW50ICopJih2YXIpKSkpCiAK IAorLyoKKyAqIFhYWCBuZWVkZWQgZm9yIG1ha2UgQ2xvY2tTd2VlcCBmaXhlZC1zaXplLCBz aG91bGQgYmUgdGllZCB0byB0aGUgbnVtYmVyCisgKiBvZiBidWZmZXIgcGFydGl0aW9ucyAo YnVmbWdyLmMgYWxyZWFkeSBoYXMgTUFYX0NMT0NLU1dFRVBfUEFSVElUSU9OUywgc28KKyAq IGF0IGxlYXN0IHNldCBpdCB0byB0aGUgc2FtZSB2YWx1ZSkuCisgKi8KKyNkZWZpbmUgTUFY X0JVRkZFUl9QQVJUSVRJT05TCQkzMgorCisvKgorICogQ29lZmZpY2llbnQgdXNlZCB0byBj b21iaW5lIHRoZSBvbGQgYW5kIG5ldyBiYWxhbmNlIGNvZWZmaWNpZW50cywgdXNpbmcKKyAq IHdlaWdodGVkIGF2ZXJhZ2UuIFRoZSBoaWdoZXIgdGhlIHZhbHVlLCB0aGUgbW9yZSB0aGUg b2xkIHZhbHVlIGFmZmVjdHMgdGhlCisgKiByZXN1bHQuCisgKgorICogWFhYIERvZXNuJ3Qg dGhpcyBpbnZhbGlkYXRlIHRoZSBpbnRlcnByZXRhdGlvbiBhcyBhIHByb2JhYmlsaXR5IHRv IGFsbG9jYXRlCisgKiBmcm9tIGEgZ2l2ZW4gcGFydGl0aW9uPyBEb2VzIGl0IHN0aWxsIHN1 bSB0byAxMDAlPworICovCisjZGVmaW5lIENMT0NLU1dFRVBfSElTVE9SWV9DT0VGRgkwLjUK KwogLyoKICAqIEluZm9ybWF0aW9uIGFib3V0IG9uZSBwYXJ0aXRpb24gb2YgdGhlIENsb2Nr U3dlZXAgKG9uIGEgc3Vic2V0IG9mIGJ1ZmZlcnMpLgogICoKQEAgLTY2LDkgKzgzLDI4IEBA IHR5cGVkZWYgc3RydWN0CiAJdWludDMyCQljb21wbGV0ZVBhc3NlczsgLyogQ29tcGxldGUg Y3ljbGVzIG9mIHRoZSBjbG9jay1zd2VlcCAqLwogCXBnX2F0b21pY191aW50MzIgbnVtQnVm ZmVyQWxsb2NzOwkvKiBCdWZmZXJzIGFsbG9jYXRlZCBzaW5jZSBsYXN0IHJlc2V0ICovCiAK KwkvKgorCSAqIEJ1ZmZlcnMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBpbiB0 aGlzIHBhcnRpdGlvbiAoYnV0IG1pZ2h0CisJICogaGF2ZSBiZWVuIHJlZGlyZWN0ZWQgdG8g a2VlcCBhbGxvY2F0aW9ucyBiYWxhbmNlZCkuCisJICovCisJcGdfYXRvbWljX3VpbnQzMiBu dW1SZXF1ZXN0ZWRBbGxvY3M7CisKIAkvKiBydW5uaW5nIHRvdGFsIG9mIGFsbG9jcyAqLwog CXBnX2F0b21pY191aW50NjQgbnVtVG90YWxBbGxvY3M7CisJcGdfYXRvbWljX3VpbnQ2NCBu dW1Ub3RhbFJlcXVlc3RlZEFsbG9jczsKIAorCS8qCisJICogV2VpZ2h0cyB0byBiYWxhbmNl IGJ1ZmZlciBhbGxvY2F0aW9ucyBmb3IgYWxsIHRoZSBwYXJ0aXRpb25zLiBFYWNoCisJICog cGFydGl0aW9uIGdldHMgYSB2ZWN0b3Igb2Ygd2VpZ2h0cyAwLTEwMCwgZGV0ZXJtaW5pbmcg d2hhdCBmcmFjdGlvbgorCSAqIG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUgZnJvbSB0aGF0IHBh cnRpY3VsYXIuIFNvIFs3NSwgMTUsIDUsIDVdIHdvdWxkCisJICogbWVhbiA3NSUgYWxsb2Nh dGlvbnMgc2hvdWxkIGdvIGZyb20gcGFydGl0aW9uIDAsIDE1JSBmcm9tIHBhcnRpdGlvbgor CSAqIDEsIGFuZCA1JSBmcm9tIHBhcnRpdGlvbnMgMiYzLiBFYWNoIHBhcnRpdGlvbiBnZXRz IGEgZGlmZmVyZW50IHZlY3RvcgorCSAqIG9mIHdlaWdodHMuCisJICoKKwkgKiBYWFggQWxs b2NhdGUgYSBmaXhlZC1sZW5ndGggYXJyYXksIHRvIHNpbXBsaWZ5IHdvcmtpbmcgd2l0aCBh cnJheSBvZgorCSAqIHRoZSBzdHJ1Y3RzLCBldGMuCisJICovCisJdWludDgJCWJhbGFuY2Vb TUFYX0JVRkZFUl9QQVJUSVRJT05TXTsKIH0gQ2xvY2tTd2VlcDsKIAogLyoKQEAgLTEzMiw3 ICsxNjgsMzMgQEAgc3RhdGljIEJ1ZmZlckRlc2MgKkdldEJ1ZmZlckZyb21SaW5nKEJ1ZmZl ckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCQkJCQkJIHVpbnQzMiAqYnVmX3N0YXRl KTsKIHN0YXRpYyB2b2lkIEFkZEJ1ZmZlclRvUmluZyhCdWZmZXJBY2Nlc3NTdHJhdGVneSBz dHJhdGVneSwKIAkJCQkJCQlCdWZmZXJEZXNjICpidWYpOwotc3RhdGljIENsb2NrU3dlZXAg KkNob29zZUNsb2NrU3dlZXAodm9pZCk7CitzdGF0aWMgQ2xvY2tTd2VlcCAqQ2hvb3NlQ2xv Y2tTd2VlcChib29sIGJhbGFuY2UpOworCisvKgorICogY2xvY2tzd2VlcCBhbGxvY2F0aW9u IGJhbGFuY2luZworICoKKyAqIFRvIGJhbGFuY2UgYWxsb2NhdGlvbnMgZnJvbSBjbG9ja3N3 ZWVwIHBhcnRpdGlvbnMsIGVhY2ggcGFydGl0aW9uIGdldHMKKyAqIGEgc2V0IG9mICJ3ZWln aHRzIiBkZXRlcm1pbmluZyB0aGUgZnJhY3Rpb24gb2YgYWxsb2NhdGlvbnMgdG8gcmVkaXJl Y3QKKyAqIHRvIG90aGVyIHBhcnRpdGlvbnMuCisgKgorICogV2UgY291bGQgZG8gdGhhdCBi YXNlZCBvbiBhIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLCBidXQgdGhhdCBzZWVtcyB0b28K KyAqIGV4cGVuc2l2ZS4gU28gaW5zdGVhZCB3ZSBzaW1wbHkgdHJlYXQgdGhlIHByb2JhYmls aXRpZXMgYXMgYSBidWRnZXQsIGkuZS4KKyAqIGEgbnVtYmVyIG9mIGFsbG9jYXRpb25zIHRv IHNlcnZlIGZyb20gdGhhdCBwYXJ0aXRpb24sIGJlZm9yZSBtb3ZpbmcgdG8KKyAqIHRoZSBu ZXh0IHBhcnRpdGlvbiAoaW4gYSByb3VuZC1yb2JpbiBtYW5uZXIpLgorICoKKyAqIFRoaXMg aXMgdmVyeSBzaW1wbGUvY2hlYXAsIGFuZCBvdmVyIG1hbnkgYWxsb2NhdGlvbnMgaXQgaGFz IHRoZSBzYW1lCisgKiBlZmZlY3QuIEZvciBwZXJpb2RzIG9mIGxvdyBhY3Rpdml0eSBpdCBt YXkgZGl2ZXJnZSwgYnV0IHRoYXQgZG9lcyBub3QKKyAqIG1hdHRlciBtdWNoICh3ZSBjYXJl IGFib3V0IGhpZ2gtYWN0aXZpdHkgcGVyaW9kcyBtdWNoIG1vcmUpLgorICoKKyAqIFdlIGlu dGVudGlvbmFsbHkga2VlcCB0aGUgImJ1ZGdldCIgZmFpcmx5IGxvdywgd2l0aCB0aGUgc3Vt IGZvciBhIGdpdmVuCisgKiBwYXJ0aXRpb24gMTAwLiBUaGF0IG1lYW5zIHdlIGdldCB0byB0 aGUgc2FtZSBwYXJ0aXRpb24gYWZ0ZXIgb25seSAxMDAKKyAqIGFsbG9jYXRpb25zLCBrZWVw aW5nIGl0IG1vcmUgYmFsYW5jZXMuIEl0IHdvdWxkbid0IGJlIGhhcmQgdG8gbWFrZSB0aGUK KyAqIGJ1ZGdldHMgaGlnaGVyIChzYXksIHRvIG1hdGNoIHRoZSBleHBlY3RlZCBudW1iZXIg b2YgYWxsb2NhdGlvbnMsIGkuZS4KKyAqIGFib3V0IHRoZSBhdmVyYWdlIG51bWJlciBvZiBh bGxvY2F0aW9ucyBmcm9tIHRoZSBwYXN0IGludGVydmFsKS4KKyAqLworc3RhdGljIGludCBj bG9ja3N3ZWVwX3BhcnRpdGlvbl9vcHRpbWFsID0gLTE7CitzdGF0aWMgaW50IGNsb2Nrc3dl ZXBfcGFydGl0aW9uID0gLTE7CitzdGF0aWMgaW50IGNsb2Nrc3dlZXBfY291bnQgPSAwOwog CiAvKgogICogQ2xvY2tTd2VlcFRpY2sgLSBIZWxwZXIgcm91dGluZSBmb3IgU3RyYXRlZ3lH ZXRCdWZmZXIoKQpAQCAtMTQ0LDcgKzIwNiw3IEBAIHN0YXRpYyBpbmxpbmUgdWludDMyCiBD bG9ja1N3ZWVwVGljayh2b2lkKQogewogCXVpbnQzMgkJdmljdGltOwotCUNsb2NrU3dlZXAg KnN3ZWVwID0gQ2hvb3NlQ2xvY2tTd2VlcCgpOworCUNsb2NrU3dlZXAgKnN3ZWVwID0gQ2hv b3NlQ2xvY2tTd2VlcCh0cnVlKTsKIAogCS8qCiAJICogQXRvbWljYWxseSBtb3ZlIGhhbmQg YWhlYWQgb25lIGJ1ZmZlciAtIGlmIHRoZXJlJ3Mgc2V2ZXJhbCBwcm9jZXNzZXMKQEAgLTI5 MSwxMSArMzUzLDU5IEBAIGNhbGN1bGF0ZV9wYXJ0aXRpb25faW5kZXgodm9pZCkKICAqIGFu ZCB0aGF0J3MgY2hlYXBlci4gQnV0IGhvdyB3b3VsZCB0aGF0IGRlYWwgd2l0aCBvZGQgbnVt YmVyIG9mIG5vZGVzPwogICovCiBzdGF0aWMgQ2xvY2tTd2VlcCAqCi1DaG9vc2VDbG9ja1N3 ZWVwKHZvaWQpCitDaG9vc2VDbG9ja1N3ZWVwKGJvb2wgYmFsYW5jZSkKIHsKLQlpbnQJCQlp bmRleCA9IGNhbGN1bGF0ZV9wYXJ0aXRpb25faW5kZXgoKTsKKwkvKiBXaGF0J3MgdGhlICJv cHRpbWFsIiBwYXJ0aXRpb24/ICovCisJaW50CQlpbmRleCA9IGNhbGN1bGF0ZV9wYXJ0aXRp b25faW5kZXgoKTsKKwlDbG9ja1N3ZWVwICpzd2VlcCA9ICZTdHJhdGVneUNvbnRyb2wtPnN3 ZWVwc1tpbmRleF07CisKKwkvKgorCSAqIERpZCB3ZSBtaWdyYXRlIHRvIGEgZGlmZmVyZW50 IGNvcmUgLyBOVU1BIG5vZGUsIGFmZmVjdGluZyB0aGUKKwkgKiBjbG9ja3N3ZWVwIHBhcnRp dGlvbiB3ZSBzaG91bGQgdXNlPyBTd2l0Y2ggdG8gdGhhdCBwYXJ0aXRpb24uCisJICovCisJ aWYgKGNsb2Nrc3dlZXBfcGFydGl0aW9uX29wdGltYWwgIT0gaW5kZXgpCisJeworCQljbG9j a3N3ZWVwX3BhcnRpdGlvbl9vcHRpbWFsID0gaW5kZXg7CisJCWNsb2Nrc3dlZXBfcGFydGl0 aW9uID0gaW5kZXg7CisJCWNsb2Nrc3dlZXBfY291bnQgPSBzd2VlcC0+YmFsYW5jZVtpbmRl eF07CisJfQorCisJLyogd2Ugc2hvdWxkIGhhdmUgYSB2YWxpZCBwYXJ0aXRpb24gKi8KKwlB c3NlcnQoY2xvY2tzd2VlcF9wYXJ0aXRpb25fb3B0aW1hbCAhPSAtMSk7CisJQXNzZXJ0KGNs b2Nrc3dlZXBfcGFydGl0aW9uICE9IC0xKTsKKworCS8qCisJICogSWYgcmViYWxhbmNpbmcg aXMgZW5hYmxlZCwgdXNlIHRoZSB3ZWlnaHRzIHRvIHJlZGlyZWN0IHRoZSBhbGxvY2F0aW9u cworCSAqIHRvIG1hdGNoIHRoZSBkZXNpcmVkIGRpc3RyaWJ1dGlvbi4gV2UgZG8gdGhhdCBi eSB1c2luZyB0aGUgcGFydGl0aW9ucworCSAqIGluIGEgcm91bmQtcm9iaW4gd2F5LCBhZnRl ciBhbGxvY2F0aW5nIHRoZSAid2VpZ2h0IiBvZiBhbGxvY2F0aW9ucworCSAqIGZyb20gZWFj aCBwYXJ0aXRpb25zLgorCSAqLworCWlmIChiYWxhbmNlKQorCXsKKwkJLyoKKwkJICogUmFu IG91dCBvZiBhbGxvY2F0aW9ucyBmcm9tIHRoZSBjdXJyZW50IHBhcnRpdGlvbj8gTW92ZSB0 byB0aGUKKwkJICogbmV4dCBwYXJ0aXRpb24gd2l0aCBub24temVybyB3ZWlnaHQsIGFuZCB1 c2UgdGhlIHdlaWdodCBhcyBhCisJCSAqIGJ1ZGdldCBmb3IgYWxsb2NhdGlvbnMuCisJCSAq LworCQl3aGlsZSAoY2xvY2tzd2VlcF9jb3VudCA9PSAwKQorCQl7CisJCQljbG9ja3N3ZWVw X3BhcnRpdGlvbgorCQkJCT0gKGNsb2Nrc3dlZXBfcGFydGl0aW9uICsgMSkgJSBTdHJhdGVn eUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zOworCisJCQlBc3NlcnQoKGNsb2Nrc3dlZXBfcGFy dGl0aW9uID49IDApICYmCisJCQkJICAgKGNsb2Nrc3dlZXBfcGFydGl0aW9uIDwgU3RyYXRl Z3lDb250cm9sLT5udW1fcGFydGl0aW9ucykpOworCisJCQljbG9ja3N3ZWVwX2NvdW50ID0g c3dlZXAtPmJhbGFuY2VbY2xvY2tzd2VlcF9wYXJ0aXRpb25dOworCQl9CiAKLQlyZXR1cm4g JlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2luZGV4XTsKKwkJLyogYWNjb3VudCBmb3IgdGhl IGFsbG9jYXRpb24gLSB0YWtlIGl0IGZyb20gdGhlIGJ1ZGdldCAqLworCQktLWNsb2Nrc3dl ZXBfY291bnQ7CisKKwkJLyogYWNjb3VudCBmb3IgdGhlIGFsbG9jIGluIHRoZSAib3B0aW1h bCIgKG9yaWdpbmFsKSBwYXJ0aXRpb24gKi8KKwkJcGdfYXRvbWljX2ZldGNoX2FkZF91MzIo JnN3ZWVwLT5udW1SZXF1ZXN0ZWRBbGxvY3MsIDEpOworCX0KKworCXJldHVybiAmU3RyYXRl Z3lDb250cm9sLT5zd2VlcHNbY2xvY2tzd2VlcF9wYXJ0aXRpb25dOwogfQogCiAvKgpAQCAt MzY1LDcgKzQ3NSw3IEBAIFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5 IHN0cmF0ZWd5LCB1aW50MzIgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJvbV9yCiAJICogdGhlIHJh dGUgb2YgYnVmZmVyIGNvbnN1bXB0aW9uLiAgTm90ZSB0aGF0IGJ1ZmZlcnMgcmVjeWNsZWQg YnkgYQogCSAqIHN0cmF0ZWd5IG9iamVjdCBhcmUgaW50ZW50aW9uYWxseSBub3QgY291bnRl ZCBoZXJlLgogCSAqLwotCXBnX2F0b21pY19mZXRjaF9hZGRfdTMyKCZDaG9vc2VDbG9ja1N3 ZWVwKCktPm51bUJ1ZmZlckFsbG9jcywgMSk7CisJcGdfYXRvbWljX2ZldGNoX2FkZF91MzIo JkNob29zZUNsb2NrU3dlZXAoZmFsc2UpLT5udW1CdWZmZXJBbGxvY3MsIDEpOwogCiAJLyoK IAkgKiBVc2UgdGhlICJjbG9jayBzd2VlcCIgYWxnb3JpdGhtIHRvIGZpbmQgYSBmcmVlIGJ1 ZmZlcgpAQCAtNDM4LDYgKzU0OCwyMjQgQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNj ZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQzMiAqYnVmX3N0YXRlLCBib29sICpmcm9tX3IK IAl9CiB9CiAKKy8qCisgKiBTdHJhdGVneVN5bmNCYWxhbmNlCisgKgkJdXBkYXRlIHBhcnRp dGlvbiB3ZWlnaHRzLCB0byBiYWxhbmNlIHRoZSBidWZmZXIgYWxsb2NhdGlvbnMKKyAqCisg KiBXZSB3YW50IHRvIGdpdmUgcHJlZmVyZW5jZSB0byBhbGxvY2F0aW5nIGJ1ZmZlcnMgb24g dGhlIHNhbWUgTlVNQSBub2RlLAorICogYnV0IHRoYXQgbWlnaHQgbGVhZCB0byBpbWJhbGFu Y2UgLSBhIHNpbmdsZSBwcm9jZXNzIHdvdWxkIG9ubHkgdXNlIGEKKyAqIGZyYWN0aW9uIG9m IHNoYXJlZCBidWZmZXJzLiBXZSBkb24ndCB3YW50IHRoYXQsIHdlIHdhbnQgdG8gdXRpbGl6 ZSB0aGUKKyAqIHdob2xlIHNoYXJlZCBidWZmZXJzLiBUaGUgbnVtYmVyIG9mIGFsbG9jYXRp b25zIGluIGVhY2ggcGFydGl0aW9uIG1heQorICogYWxzbyBjaGFuZ2Ugb3ZlciB0aW1lLCBz byB3ZSBuZWVkIHRvIGFkYXB0IHRvIHRoYXQuCisgKgorICogVG8gYWxsb3cgdGhpcyAiYWRh cHRpdmUgYmFsYW5jaW5nIiwgZWFjaCBwYXJ0aXRpb24gaGFzIGEgc2V0IG9mIHdlaWdodHMs CisgKiBkZXRlcm1pbmluZyB3aGF0IGZyYWN0aW9uIG9mIGFsbG9jYXRpb25zIHRvIGRpcmVj dCB0byBvdGhlciBwYXJ0aXRpb25zLgorICogRm9yIHNpbXBsaWNpdHkgdGhlIGNvZWZmaWNp ZW50cyBhcmUgaW50ZWdlcnMgMC0xMDAsIGV4cHJlc3NpbmcgdGhlCisgKiBwZXJjZW50YWdl IG9mIGFsbG9jYXRpb25zIHJlZGlyZWN0ZWQgdG8gdGhhdCBwYXJ0aXRpb24uCisgKgorICog Q29uc2lkZXIgZm9yIGV4YW1wbGUgd2VpZ2h0cyBbNTAsIDI1LCAyNSwgMF0gZm9yIG9uZSBv ZiA0IHBhcnRpdGlvbnMuCisgKiBUaGlzIG1lYW5zIDUwJSBvZiBhbGxvY2F0aW9ucyB3aWxs IGJlIHJlZGlyZWN0ZWQgdG8gcGFydGl0aW9uIDAsIDI1JQorICogdG8gcGFydGl0aW9ucyAx IGFuZCAyLCBhbmQgbm8gYWxsb2NhdGlvbnMgd2lsbCBnbyB0byBwYXJ0aXRpb24gMy4KKyAq CisgKiBUbyBjYWxjdWxhdGUgdGhlc2Ugd2VpZ2h0cywgYXNzdW1lIHdlIGtub3cgdGhlIG51 bWJlciBvZiBhbGxvY2F0aW9ucworICogcmVxdWVzdGVkIGZvciBlYWNoIHBhcnRpdGlvbiBp biB0aGUgcGFzdCBpbnRlcnZhbC4gV2UgY2FuIHVzZSB0aGlzIHRvCisgKiBjYWxjdWxhdGUg d2VpZ2h0cyBmb3IgdGhlIGZvbGxvd2luZyBpbnRlcnZhbCwgYWltaW5nIHRvIGFsbG9jYXRl IHRoZQorICogc2FtZSAoZmFpciBzaGFyZSkgbnVtYmVyIG9mIGJ1ZmZlcnMgZnJvbSBlYWNo IHBhcnRpdGlvbi4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGJhc2VkIG9uIG51bWJlciBvZiBh bGxvY2F0aW9ucyAib3JpZ2luYXRpbmciIGluIGEgZ2l2ZW4KKyAqIHBhcnRpdGlvbi4gSWYg YW4gYWxsb2NhdGlvbiBpcyByZXF1ZXN0ZWQgaW4gYSBwYXJ0aXRpb24gQSwgaXQncyBjb3Vu dGVkCisgKiBhcyBhbGxvY2F0aW9uIGZvciBBLCBldmVuIGlmIGl0IGdldHMgcmVkaXJlY3Rl ZCB0byBzb21lIG90aGVyIHBhcnRpdGlvbi4KKyAqIFRoZSBwYXRjaCBhZGRlcyBhIG5ldyBj b3VudGVyIHRvIHRyYWNrIHRoaXMuCisgKgorICogVGhlIG1haW4gb2JzZXJ2YXRpb24gaXMg dGhhdCBwYXJ0aXRpb25zIGdldCBkaXZpZGVkIGludG8gdHdvIGdyb3VwcywKKyAqIGRlcGVu ZGluZyBvbiB3aGV0aGVyIHRoZSBudW1iZXIgYWxsb2NhdGlvbnMgaXMgaGlnaGVyIG9yIGxv d2VyIHRoYW4gdGhlCisgKiB0YXJnZXQgYXZlcmFnZS4gQnV0IHRoZSAidG90YWwgZGVsdGEi IGZvciB0aGVzZSB0d28gZ3JvdXBzIGlzIHRoZQorICogc2FtZSwgaS5lLiBzdW0oYWJzKGFs bG9jcyAtIGF2Z19hbGxvY3MpKSBpcyB0aGUgc2FtZS4gVGhlcmVmb3JlLCB0aGUKKyAqIHRh c2sgaXMgdG8gImRpc3RyaWJ1dGUiIHRoZSBleGNlc3MgYWxsb2NhdGlvbnMgYmV0d2VlbiB0 aGUgcGFydGl0aW9ucworICogd2l0aCBub3QgZW5vdWdoIGFsbG9jYXRpb25zLgorICoKKyAq IFBhcnRpdGlvbnMgd2l0aCAobmFsbG9jcyA8IGF2Z19uYWxsb2NzKSBkb24ndCByZWRpcmVj dCBhbnkgYWxsb2NhdGlvbnMuCisgKgorICogUGFydGl0aW9ucyB3aXRoIChuYWxsb2NzID4g YXZnX25hbGxvY3MpIHJlZGlyZWN0IHRoZSBleHRyYSBhbGxvY2F0aW9ucywKKyAqIHdpdGgg ZWFjaCB0YXJnZXQgYWxsb2NhdGlvbiBnZXR0aW5nIGEgcHJvcG9ydGlvbmFsIHBhcnQgKHdp dGggcmVzcGVjdAorICogdG8gdGhlIHRvdGFsIGRlbHRhKS4KKyAqCisgKiBYWFggSW4gcHJp bmNpcGxlIHdlIG1pZ2h0IGRvIHdpdGhvdXQgdGhlIG5ldyAicmVxdWVzdGVkQWxsb2NzIiBj b3VudGVyLAorICogYnV0IHdlJ2QgbmVlZCB0byBzb2x2ZSB0aGUgbWF0cml4IGVxdWF0aW9u IEF4PWIsIHdpdGggW0EsYl0ga25vd24KKyAqICh3ZWlnaHRzIGFuZCBhbGxvY3MpLCBhbmQg Y2FsY3VsYXRlIHggKHJlcXVlc3RlZCBhbGxvY3MpLiBCdXQgaXQncyBub3QKKyAqIHF1aXRl IGNsZWFyIHRoaXMnZCBhbHdheXMgaGF2ZSBhIHNvbHV0aW9uLgorICovCit2b2lkCitTdHJh dGVneVN5bmNCYWxhbmNlKHZvaWQpCit7CisJLyogc25hcHNob3Qgb2YgYWxsb2NzIGZvciBw YXJ0aXRpb25zICovCisJdWludDMyCWFsbG9jc1tNQVhfQlVGRkVSX1BBUlRJVElPTlNdOwor CisJdWludDMyCXRvdGFsX2FsbG9jcyA9IDAsCS8qIHRvdGFsIG51bWJlciBvZiBhbGxvY2F0 aW9ucyAqLworCQkJYXZnX2FsbG9jcywJCQkvKiBhdmVyYWdlIGFsbG9jYXRpb25zIChwZXIg cGFydGl0aW9uKSAqLworCQkJZGVsdGFfYWxsb2NzID0gMDsJLyogc3VtIG9mIGFsbG9jcyBh Ym92ZSBhdmVyYWdlICovCisKKwkvKgorCSAqIENvbGxlY3QgdGhlIG51bWJlciBvZiBhbGxv Y2F0aW9ucyByZXF1ZXN0ZWQgaW4gdGhlIHBhc3QgaW50ZXJ2YWwuCisJICogV2hpbGUgYXQg aXQsIHJlc2V0IHRoZSBjb3VudGVyIHRvIHN0YXJ0IHRoZSBuZXcgaW50ZXJ2YWwuCisJICoK KwkgKiBXZSBsb2NrIHRoZSBwYXJ0aXRpb25zIG9uZSBieSBvbmUsIHNvIHRoaXMgaXMgbm90 IGV4YWN0bHkgY29uc2lzdGVudAorCSAqIHNuYXBzaG90IG9mIHRoZSBjb3VudHMsIGFuZCB0 aGUgcmVzZXRzIGhhcHBlbiBiZWZvcmUgd2UgdXBkYXRlIHRoZQorCSAqIHdlaWdodHMgdG9v LiBCdXQgd2UncmUgb25seSBsb29raW5nIGZvciBoZXVyaXN0aWNzIGFueXdheSwgc28gdGhp cworCSAqIHNob3VsZCBiZSBnb29kIGVub3VnaC4KKwkgKgorCSAqIEEgc2ltaWxhciBpc3N1 ZSBhcHBsaWVzIHRvIHRoZSBjb3VudGVyIHJlc2V0IC0gd2UgaGF2ZW4ndCB1cGRhdGVkCisJ ICogdGhlIHdlaWdodHMgeWV0LiBTaG91bGQgYmUgZmluZSwgd2UnbGwgc2ltcGx5IGNvbnNp ZGVyIHRoaXMgaW4gdGhlCisJICogbmV4dCBiYWxhbmNpbmcgY3ljbGUuCisJICoKKwkgKiBY WFggRG9lcyB0aGlzIG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlIGNvbXBsZXRlUGFzc2VzIHRv bz8KKwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3Bh cnRpdGlvbnM7IGkrKykKKwl7CisJCUNsb2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29u dHJvbC0+c3dlZXBzW2ldOworCisJCS8qIG5vIG5lZWQgZm9yIGEgc3BpbmxvY2sgKi8KKwkJ YWxsb2NzW2ldID0gcGdfYXRvbWljX2V4Y2hhbmdlX3UzMigmc3dlZXAtPm51bVJlcXVlc3Rl ZEFsbG9jcywgMCk7CisKKwkJLyogYWRkIHRoZSBhbGxvY3MgdG8gcnVubmluZyB0b3RhbCAq LworCQlwZ19hdG9taWNfZmV0Y2hfYWRkX3U2NCgmc3dlZXAtPm51bVRvdGFsUmVxdWVzdGVk QWxsb2NzLCBhbGxvY3NbaV0pOworCisJCXRvdGFsX2FsbG9jcyArPSBhbGxvY3NbaV07CisJ fQorCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlICJmYWlyIHNoYXJlIiBvZiBhbGxvY2F0aW9u cyBwZXIgcGFydGl0aW9uLgorCSAqCisJICogWFhYIFRoZSBsYXN0IHBhcnRpdGlvbiBjb3Vs ZCBiZSBzbWFsbGVyLCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBiZQorCSAqIGV4cGVjdGVk IHRvIGhhbmRsZSBmZXdlciBhbGxvY2F0aW9ucy4gU28gdGhpcyBzaG91bGQgYmUgYSB3ZWln aHRlZAorCSAqIGF2ZXJhZ2UuIEJ1dCBmb3Igbm93IGEgc2ltcGxlIGF2ZXJhZ2UgaXMgZ29v ZCBlbm91Z2guCisJICovCisJYXZnX2FsbG9jcyA9ICh0b3RhbF9hbGxvY3MgLyBTdHJhdGVn eUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zKTsKKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSAi ZGVsdGEiIGZyb20gYmFsYW5jZWQgc3RhdGUsIGkuZS4gaG93IG1hbnkgYWxsb2NhdGlvbnMK KwkgKiB3ZSdkIG5lZWQgdG8gcmVkaXN0cmlidXRlLgorCSAqLworCWZvciAoaW50IGkgPSAw OyBpIDwgU3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9uczsgaSsrKQorCXsKKwkJaWYg KGFsbG9jc1tpXSA+IGF2Z19hbGxvY3MpCisJCQlkZWx0YV9hbGxvY3MgKz0gKGFsbG9jc1tp XSAtIGF2Z19hbGxvY3MpOworCX0KKworCS8qCisJICogU2tpcCB0aGUgcmViYWxhbmNpbmcg d2hlbiB0aGVyZSdzIG5vdCBlbm91Z2ggYWN0aXZpdHkuIEluIHRoaXMgY2FzZQorCSAqIHdl IGp1c3Qga2VlcCB0aGUgY3VycmVudCB3ZWlnaHRzLgorCSAqCisJICogWFhYIFRoZSB0aHJl c2hvbGQgb2YgMTAwIGFsbG9jYXRpb24gaXMgcHJldHR5IGFyYml0cmFyeS4KKwkgKgorCSAq IFhYWCBNYXliZSBhIGJldHRlciBzdHJhdGVneSB3b3VsZCBiZSB0byBzbG93bHkgcmV0dXJu IHRvIHRoZSBkZWZhdWx0CisJICogd2VpZ2h0cywgd2l0aCBlYWNoIHBhcnRpdGlvbiBhbGxv Y2F0aW9uIG9ubHkgZnJvbSBpdHNlbGY/CisJICoKKwkgKiBYWFggTWF5YmUgd2Ugc2hvdWxk bid0IGV2ZW4gcmVzZXQgdGhlIGNvdW50ZXJzIGluIHRoaXMgY2FzZT8gQnV0IGl0CisJICog c2hvdWxkIG5vdCBtYXR0ZXIsIGlmIHRoZSBhY3Rpdml0eSBpcyBsb3cuCisJICovCisJaWYg KGF2Z19hbGxvY3MgPCAxMDApCisJeworCQllbG9nKExPRywgInJlYmFsYW5jZSBza2lwcGVk OiBub3QgZW5vdWdoIGFsbG9jYXRpb25zIChhbGxvY3M6ICV1KSIsCisJCQkgYXZnX2FsbG9j cyk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIExpa2V3aXNlLCBza2lwIHJlYmFsYW5j aW5nIGlmIHRoZSBtaXNiYWxhbmNlIGlzIG5vdCBzaWduaWZpY2FudC4gV2UKKwkgKiBjb25z aWRlciBpdCBhY2NlcHRhYmxlIGlmIHRoZSBhbW91bnQgb2YgYWxsb2NhdGlvbnMgd2UnZCBu ZWVkIHRvCisJICogcmVkaXN0cmlidXRlIGlzIGxlc3MgdGhhbiAxMCUgb2YgdGhlIGF2ZXJh Z2UuCisJICoKKwkgKiBYWFggQWdhaW4sIHRoZXNlIHRocmVzaG9sZCBhcmUgcmF0aGVyIGFy Yml0cmFyeS4KKwkgKi8KKwlpZiAoZGVsdGFfYWxsb2NzIDwgKGF2Z19hbGxvY3MgKiAwLjEp KQorCXsKKwkJZWxvZyhMT0csICJyZWJhbGFuY2Ugc2tpcHBlZDogZGVsdGEgd2l0aGluIGxp bWl0IChkZWx0YTogJXUsIHRocmVzaG9sZDogJXUpIiwKKwkJCSBkZWx0YV9hbGxvY3MsICh1 aW50MzIpIChhdmdfYWxsb2NzICogMC4xKSk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAq IEdvdCB0byBkbyB0aGUgcmViYWxhbmNpbmcuIEdvIHRocm91Z2ggdGhlIHBhcnRpdGlvbnMs IGFuZCBmb3IgZWFjaAorCSAqIHBhcnRpdGlvbiBkZWNpZGUgaWYgaXQgZ2V0cyB0byByZWRp cmVjdCBvciByZWNlaXZlIGFsbG9jYXRpb25zLgorCSAqCisJICogSWYgYSBwYXJ0aXRpb24g aGFzIGZld2VyIHRoYW4gYXZlcmFnZSBhbGxvY2F0aW9ucywgaXQgd29uJ3QgcmVkaXJlY3QK KwkgKiBhbnkgYWxsb2NhdGlvbnMgdG8gb3RoZXIgcGFydGl0aW9ucy4gU28gaXQgb25seSBo YXMgYSBzaW5nbGUgbm9uLXplcm8KKwkgKiB3ZWlnaHQsIGFuZCB0aGF0J3MgZm9yIGl0c2Vs Zi4KKwkgKgorCSAqIElmIGEgcGFydHRpb24gaGFzIG1vcmUgdGhhbiBhdmVyYWdlIGFsbG9j YXRpb25zLCBpdCB3b24ndCByZWNlaXZlCisJICogYW55IHJlZGlyZWN0ZWQgYWxsb2NhdGlv bnMuIEluc3RlYWQsIHRoZSBleGNlc3MgYWxsb2NhdGlvbnMgYXJlCisJICogcmVkaXJlY3Rl ZCB0byB0aGUgb3RoZXIgcGFydGl0aW9ucy4KKwkgKgorCSAqIFRoZSByZWRpc3RyaWJ1dGlv biBpcyAicHJvcG9ydGlvbmFsIiAtIGlmIHRoZSBleGNlc3MgYWxsb2NhdGlvbnMgb2YKKwkg KiBhIHBhcnRpdGlvbiByZXByZXNlbnQgMTAlIG9mIHRoZSAiZGVsdGEiLCB0aGVuIGVhY2gg cGFydGl0aW9uIHRoYXQKKwkgKiBuZWVkcyBtb3JlIGFsbG9jYXRpb25zIHdpbGwgZ2V0IDEw JSBvZiB0aGUgZ2FwIGZyb20gdGhpcyBvbmUuCisJICoKKwkgKiBYWFggV2Ugc2hvdWxkIGFk ZCBoeXN0ZXJlc2lzLCB0byAiZGFtcGVuIiB0aGUgY2hhbmdlcywgYW5kIG1ha2UKKwkgKiBz dXJlIGl0IGRvZXMgbm90IG9zY2lsbGF0ZSB0b28gbXVjaC4KKwkgKgorCSAqIFhYWCBJZGVh bGx5LCB0aGUgYWx0ZXJuYXRpdmUgcGFydGl0aW9ucyB0byB1c2UgZmlyc3Qgd291bGQgYmUg dGhlCisJICogb3RoZXIgcGFydGl0aW9ucyBmb3IgdGhlIHNhbWUgbm9kZSAoaWYgYW55KS4K KwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRp dGlvbnM7IGkrKykKKwl7CisJCUNsb2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29udHJv bC0+c3dlZXBzW2ldOworCQl1aW50OAkJYmFsYW5jZVtNQVhfQlVGRkVSX1BBUlRJVElPTlNd OworCisJCS8qIGxvY2ssIHdlJ3JlIGdvaW5nIHRvIG1vZGlmeSB0aGUgYmFsYW5jZSB3ZWln aHRzICovCisJCVNwaW5Mb2NrQWNxdWlyZSgmc3dlZXAtPmNsb2NrX3N3ZWVwX2xvY2spOwor CisJCS8qIHJlc2V0IHRoZSB3ZWlnaHRzIHRvIHN0YXJ0IGZyb20gc2NyYXRjaCAqLworCQlt ZW1zZXQoYmFsYW5jZSwgMCwgc2l6ZW9mKHVpbnQ4KSAqIE1BWF9CVUZGRVJfUEFSVElUSU9O Uyk7CisKKwkJLyogZG9lcyB0aGlzIHBhcnRpdGlvbiBoYXMgZmV3ZXIgb3IgbW9yZSB0aGFu IGF2Z19hbGxvY3M/ICovCisJCWlmIChhbGxvY3NbaV0gPCBhdmdfYWxsb2NzKQorCQl7CisJ CQkvKiBmZXdlciAtIGRvbid0IHJlZGlyZWN0IGFueSBhbGxvY2F0aW9ucyBlbHNld2hlcmUg Ki8KKwkJCWJhbGFuY2VbaV0gPSAxMDA7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJ ICogbW9yZSAtIHJlZGlzdHJpYnV0ZSB0aGUgZXhjZXNzIGFsbG9jYXRpb25zCisJCQkgKgor CQkJICogRWFjaCAidGFyZ2V0IiBwYXJ0aXRpb24gKHdpdGggbGVzcyB0aGFuIGF2Z19hbGxv Y3MpIHNob3VsZCBnZXQKKwkJCSAqIGEgZnJhY3Rpb24gcHJvcG9ydGlvbmFsIHRvIChleGNl c3MvZGVsdGEpIGZyb20gdGhpcyBvbmUuCisJCQkgKi8KKworCQkJLyogZnJhY3Rpb24gb2Yg dGhlICJ0b3RhbCIgZGVsdGEgKi8KKwkJCWRvdWJsZQlkZWx0YV9mcmFjID0gKGFsbG9jc1tp XSAtIGF2Z19hbGxvY3MpICogMS4wIC8gZGVsdGFfYWxsb2NzOworCisJCQkvKiBrZWVwIGp1 c3QgZW5vdWdoIGFsbG9jYXRpb25zIHRvIG1lZXQgdGhlIHRhcmdldCAqLworCQkJYmFsYW5j ZVtpXSA9ICgxMDAuMCAqIGF2Z19hbGxvY3MgLyBhbGxvY3NbaV0pOworCisJCQkvKiByZWRp cmVjdCB0aGUgZXh0cmEgYWxsb2NhdGlvbnMgKi8KKwkJCWZvciAoaW50IGogPSAwOyBqIDwg U3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9uczsgaisrKQorCQkJeworCQkJCS8qIEhv dyBtYW55IGFsbG9jYXRpb25zIHRvIHJlY2VpdmUgZnJvbSBpLXRoIHBhcnRpdGlvbj8gKi8K KwkJCQl1aW50MzIJcmVjZWl2ZV9hbGxvY3MgPSBkZWx0YV9mcmFjICogKGF2Z19hbGxvY3Mg LSBhbGxvY3Nbal0pOworCisJCQkJLyogaWdub3JlIHBhcnRpdGlvbnMgdGhhdCBkb24ndCBu ZWVkIGFkZGl0aW9uYWwgYWxsb2NhdGlvbnMgKi8KKwkJCQlpZiAoYWxsb2NzW2pdID4gYXZn X2FsbG9jcykKKwkJCQkJY29udGludWU7CisKKwkJCQkvKiBmcmFjdGlvbiB0byByZWRpcmVj dCAqLworCQkJCWJhbGFuY2Vbal0gPSAoMTAwLjAgKiByZWNlaXZlX2FsbG9jcyAvIGFsbG9j c1tpXSkgKyAwLjU7CisJCQl9CisJCX0KKworCQkvKiBjb21iaW5lIHRoZSBvbGQgYW5kIG5l dyB3ZWlnaHRzIChoeXN0ZXJlc2lzKSAqLworCQlmb3IgKGludCBqID0gMDsgaiA8IE1BWF9C VUZGRVJfUEFSVElUSU9OUzsgaisrKQorCQl7CisJCQlzd2VlcC0+YmFsYW5jZVtqXQorCQkJ CT0gQ0xPQ0tTV0VFUF9ISVNUT1JZX0NPRUZGICogc3dlZXAtPmJhbGFuY2Vbal0gKworCQkJ CSAgKDEuMCAtIENMT0NLU1dFRVBfSElTVE9SWV9DT0VGRikgKiBiYWxhbmNlW2pdOworCQl9 CisKKwkJU3BpbkxvY2tSZWxlYXNlKCZzd2VlcC0+Y2xvY2tfc3dlZXBfbG9jayk7CisJfQor fQorCiAvKgogICogU3RyYXRlZ3lTeW5jUHJlcGFyZSAtLSBwcmVwYXJlIGZvciBzeW5jIG9m IGFsbCBwYXJ0aXRpb25zCiAgKgpAQCAtNDY0LDYgKzc5Miw3IEBAIFN0cmF0ZWd5U3luY1By ZXBhcmUoaW50ICpudW1fcGFydHMsIHVpbnQzMiAqbnVtX2J1Zl9hbGxvYykKIAl7CiAJCUNs b2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ldOwogCisJCS8q IFhYWCB3ZSBkb24ndCBuZWVkIHRoZSBzcGlubG9jayB0byByZWFkIGF0b21pY3MsIG5vPyAq LwogCQlTcGluTG9ja0FjcXVpcmUoJnN3ZWVwLT5jbG9ja19zd2VlcF9sb2NrKTsKIAkJaWYg KG51bV9idWZfYWxsb2MpCiAJCXsKQEAgLTY1OCw3ICs5ODcsMjEgQEAgU3RyYXRlZ3lJbml0 aWFsaXplKGJvb2wgaW5pdCkKIAkJCS8qIENsZWFyIHN0YXRpc3RpY3MgKi8KIAkJCVN0cmF0 ZWd5Q29udHJvbC0+c3dlZXBzW2ldLmNvbXBsZXRlUGFzc2VzID0gMDsKIAkJCXBnX2F0b21p Y19pbml0X3UzMigmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV0ubnVtQnVmZmVyQWxsb2Nz LCAwKTsKKwkJCXBnX2F0b21pY19pbml0X3UzMigmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNb aV0ubnVtUmVxdWVzdGVkQWxsb2NzLCAwKTsKIAkJCXBnX2F0b21pY19pbml0X3U2NCgmU3Ry YXRlZ3lDb250cm9sLT5zd2VlcHNbaV0ubnVtVG90YWxBbGxvY3MsIDApOworCQkJcGdfYXRv bWljX2luaXRfdTY0KCZTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5udW1Ub3RhbFJlcXVl c3RlZEFsbG9jcywgMCk7CisKKwkJCS8qCisJCQkgKiBJbml0aWFsaXplIHRoZSB3ZWlnaHRz IC0gc3RhcnQgYnkgYWxsb2NhdGluZyAxMDAlIGJ1ZmZlcnMgZnJvbQorCQkJICogdGhlIGN1 cnJlbnQgbm9kZSAvIHBhcnRpdGlvbi4KKwkJCSAqLworCQkJZm9yIChpbnQgaiA9IDA7IGog PCBNQVhfQlVGRkVSX1BBUlRJVElPTlM7IGorKykKKwkJCXsKKwkJCQlpZiAoaSA9PSBqKQor CQkJCQlTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5iYWxhbmNlW2ldID0gMTAwOworCQkJ CWVsc2UKKwkJCQkJU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV0uYmFsYW5jZVtqXSA9IDA7 CisJCQl9CiAJCX0KIAogCQkvKiBObyBwZW5kaW5nIG5vdGlmaWNhdGlvbiAqLwpAQCAtMTAw Nyw4ICsxMzUwLDEwIEBAIFN0cmF0ZWd5UmVqZWN0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0 ZWd5IHN0cmF0ZWd5LCBCdWZmZXJEZXNjICpidWYsIGJvb2wgZnJvbV9yCiAKIHZvaWQKIENs b2NrU3dlZXBQYXJ0aXRpb25HZXRJbmZvKGludCBpZHgsCi0JCQkJCQkgICB1aW50MzIgKmNv bXBsZXRlX3Bhc3NlcywgdWludDMyICpuZXh0X3ZpY3RpbV9idWZmZXIsCi0JCQkJCQkgICB1 aW50NjQgKmJ1ZmZlcl90b3RhbF9hbGxvY3MsIHVpbnQzMiAqYnVmZmVyX2FsbG9jcykKKwkJ CQkJCSB1aW50MzIgKmNvbXBsZXRlX3Bhc3NlcywgdWludDMyICpuZXh0X3ZpY3RpbV9idWZm ZXIsCisJCQkJCQkgdWludDY0ICpidWZmZXJfdG90YWxfYWxsb2NzLCB1aW50MzIgKmJ1ZmZl cl9hbGxvY3MsCisJCQkJCQkgdWludDY0ICpidWZmZXJfdG90YWxfcmVxX2FsbG9jcywgdWlu dDMyICpidWZmZXJfcmVxX2FsbG9jcywKKwkJCQkJCSBpbnQgKip3ZWlnaHRzKQogewogCUNs b2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2lkeF07CiAKQEAg LTEwMTYsMTEgKzEzNjEsMjEgQEAgQ2xvY2tTd2VlcFBhcnRpdGlvbkdldEluZm8oaW50IGlk eCwKIAogCS8qIGdldCB0aGUgY2xvY2tzd2VlcCBzdGF0cyAqLwogCSpjb21wbGV0ZV9wYXNz ZXMgPSBzd2VlcC0+Y29tcGxldGVQYXNzZXM7CisKKwkvKiBjYWxjdWxhdGUgdGhlIGFjdHVh bCBidWZmZXIgSUQgKi8KIAkqbmV4dF92aWN0aW1fYnVmZmVyID0gcGdfYXRvbWljX3JlYWRf dTMyKCZzd2VlcC0+bmV4dFZpY3RpbUJ1ZmZlcik7CisJKm5leHRfdmljdGltX2J1ZmZlciA9 IHN3ZWVwLT5maXJzdEJ1ZmZlciArICgqbmV4dF92aWN0aW1fYnVmZmVyICUgc3dlZXAtPm51 bUJ1ZmZlcnMpOwogCi0JKmJ1ZmZlcl9hbGxvY3MgPSBwZ19hdG9taWNfcmVhZF91MzIoJnN3 ZWVwLT5udW1CdWZmZXJBbGxvY3MpOwogCSpidWZmZXJfdG90YWxfYWxsb2NzID0gcGdfYXRv bWljX3JlYWRfdTY0KCZzd2VlcC0+bnVtVG90YWxBbGxvY3MpOworCSpidWZmZXJfYWxsb2Nz ID0gcGdfYXRvbWljX3JlYWRfdTMyKCZzd2VlcC0+bnVtQnVmZmVyQWxsb2NzKTsKIAotCS8q IGNhbGN1bGF0ZSB0aGUgYWN0dWFsIGJ1ZmZlciBJRCAqLwotCSpuZXh0X3ZpY3RpbV9idWZm ZXIgPSBzd2VlcC0+Zmlyc3RCdWZmZXIgKyAoKm5leHRfdmljdGltX2J1ZmZlciAlIHN3ZWVw LT5udW1CdWZmZXJzKTsKKwkqYnVmZmVyX3RvdGFsX3JlcV9hbGxvY3MgPSBwZ19hdG9taWNf cmVhZF91NjQoJnN3ZWVwLT5udW1Ub3RhbFJlcXVlc3RlZEFsbG9jcyk7CisJKmJ1ZmZlcl9y ZXFfYWxsb2NzID0gcGdfYXRvbWljX3JlYWRfdTMyKCZzd2VlcC0+bnVtUmVxdWVzdGVkQWxs b2NzKTsKKworCS8qIHJldHVybiB0aGUgd2VpZ2h0cyBpbiBhIG5ld2x5IGFsbG9jYXRlZCBh cnJheSAqLworCSp3ZWlnaHRzID0gcGFsbG9jX2FycmF5KGludCwgU3RyYXRlZ3lDb250cm9s LT5udW1fcGFydGl0aW9ucyk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBTdHJhdGVneUNvbnRy b2wtPm51bV9wYXJ0aXRpb25zOyBpKyspCisJeworCQkoKndlaWdodHMpW2ldID0gKGludCkg c3dlZXAtPmJhbGFuY2VbaV07CisJfQogfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9idWZfaW50ZXJuYWxzLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5h bHMuaAppbmRleCA1Y2NlNjkwOTMzYi4uMWI0ZGFlMTgwZTAgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvYnVmX2ludGVybmFscy5oCkBAIC00MzksNiArNDM5LDcgQEAgZXh0ZXJuIEJ1ZmZlckRl c2MgKlN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAog ZXh0ZXJuIGJvb2wgU3RyYXRlZ3lSZWplY3RCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kg c3RyYXRlZ3ksCiAJCQkJCQkJCSBCdWZmZXJEZXNjICpidWYsIGJvb2wgZnJvbV9yaW5nKTsK IAorZXh0ZXJuIHZvaWQgU3RyYXRlZ3lTeW5jQmFsYW5jZSh2b2lkKTsKIGV4dGVybiB2b2lk IFN0cmF0ZWd5U3luY1ByZXBhcmUoaW50ICpudW1fcGFydHMsIHVpbnQzMiAqbnVtX2J1Zl9h bGxvYyk7CiBleHRlcm4gaW50CVN0cmF0ZWd5U3luY1N0YXJ0KGludCBwYXJ0aXRpb24sIHVp bnQzMiAqY29tcGxldGVfcGFzc2VzLAogCQkJCQkJCSAgaW50ICpmaXJzdF9idWZmZXIsIGlu dCAqbnVtX2J1ZmZlcnMpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZt Z3IuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggOWFkZTY5ZTUzYjUu LmZiNDE2MmViNzY0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5o CisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKQEAgLTM1NiwxMSArMzU2LDEz IEBAIGV4dGVybiBpbnQJR2V0QWNjZXNzU3RyYXRlZ3lQaW5MaW1pdChCdWZmZXJBY2Nlc3NT dHJhdGVneSBzdHJhdGVneSk7CiAKIGV4dGVybiB2b2lkIEZyZWVBY2Nlc3NTdHJhdGVneShC dWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSk7CiBleHRlcm4gdm9pZCBDbG9ja1N3ZWVw UGFydGl0aW9uR2V0SW5mbyhpbnQgaWR4LAotCQkJCQkJCQkJICAgdWludDMyICpjb21wbGV0 ZV9wYXNzZXMsCi0JCQkJCQkJCQkgICB1aW50MzIgKm5leHRfdmljdGltX2J1ZmZlciwKLQkJ CQkJCQkJCSAgIHVpbnQ2NCAqYnVmZmVyX3RvdGFsX2FsbG9jcywKLQkJCQkJCQkJCSAgIHVp bnQzMiAqYnVmZmVyX2FsbG9jcyk7Ci0KKwkJCQkJCQkJCSB1aW50MzIgKmNvbXBsZXRlX3Bh c3NlcywKKwkJCQkJCQkJCSB1aW50MzIgKm5leHRfdmljdGltX2J1ZmZlciwKKwkJCQkJCQkJ CSB1aW50NjQgKmJ1ZmZlcl90b3RhbF9hbGxvY3MsCisJCQkJCQkJCQkgdWludDMyICpidWZm ZXJfYWxsb2NzLAorCQkJCQkJCQkJIHVpbnQ2NCAqYnVmZmVyX3RvdGFsX3JlcV9hbGxvY3Ms CisJCQkJCQkJCQkgdWludDMyICpidWZmZXJfcmVxX2FsbG9jcywKKwkJCQkJCQkJCSBpbnQg Kip3ZWlnaHRzKTsKIAogLyogaW5saW5lIGZ1bmN0aW9ucyAqLwogCi0tIAoyLjUxLjAKCg== --------------i0MMC9nLNSRCyrH3GSEb0aRu Content-Type: text/x-patch; charset=UTF-8; name="v20250911-0004-NUMA-weighted-clocksweep-balancing.patch" Content-Disposition: attachment; filename="v20250911-0004-NUMA-weighted-clocksweep-balancing.patch" Content-Transfer-Encoding: base64 RnJvbSAzOTFhMjVlOGNiZTg4ZTlhMDE4YTUxMjNiM2Q0MGZmZWM2MDc4OTFlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCA2IEF1ZyAyMDI1IDAxOjA5OjU3ICswMjAwClN1YmplY3Q6IFtQQVRDSCB2 MjAyNTA5MTEgNC84XSBOVU1BOiB3ZWlnaHRlZCBjbG9ja3N3ZWVwIGJhbGFuY2luZwoKVGhl IHBhcnRpdGlvbnMgbWF5IG5vdCBiZSBvZiBleGFjdGx5IHRoZSBzYW1lIHNpemUsIHNvIGNv bnNpZGVyIHRoYXQKd2hlbiBiYWxhbmNpbmcgY2xvY2tzd2VlcCBhbGxvY2F0aW9ucy4KLS0t CiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jIHwgNjMgKysrKysrKysr KysrKysrKysrKysrKy0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNTMgaW5zZXJ0aW9ucygrKSwg MTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvZnJlZWxpc3QuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMK aW5kZXggMzQ5YjYyNmRiM2IuLjVjZjlhNTY1OTE0IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2ZyZWVsaXN0LmMKQEAgLTYwNSw2ICs2MDUsMjAgQEAgU3RyYXRlZ3lTeW5jQmFs YW5jZSh2b2lkKQogCQkJYXZnX2FsbG9jcywJCQkvKiBhdmVyYWdlIGFsbG9jYXRpb25zIChw ZXIgcGFydGl0aW9uKSAqLwogCQkJZGVsdGFfYWxsb2NzID0gMDsJLyogc3VtIG9mIGFsbG9j cyBhYm92ZSBhdmVyYWdlICovCiAKKwkvKgorCSAqIFNpemUgb2YgYSBwYXJ0aXRpb24sIHVz ZWQgdG8gY2FsY3VsYXRlIHdlaWdodGVkIGF2ZXJhZ2UgKHRoZSBmaXJzdAorCSAqIHBhcnRp dGlvbiBpcyBleHBlY3RlZCB0byBiZSB0aGUgbGFyZ2VzdCBvbmUsIGFuZCBzbyB3aWxsIGJl IGNvdW50ZWQKKwkgKiBhcyBhICJ1bml0IiBwYXJ0aXRpb24gd2l0aCB3ZWlnaHQgMS4wKS4K KwkgKi8KKwlpbnQzMgludW1fYnVmZmVycyA9IFN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzWzBd Lm51bUJ1ZmZlcnM7CisKKwkvKgorCSAqIFRvdGFsIHdlaWdodCBvZiBwYXJ0aXRpb25zLiBJ ZiB0aGUgcGFydGl0aW9ucyBoYXZlIHRoZSBzYW1lIHNpemUsCisJICogdGhlIHdlaWdodCBz aG91bGQgYmUgZXF1YWwgdGhlIHBhcnRpdGlvbiBjb3VudCAobW9kdWxvIHJvdW5kaW5nCisJ ICogZXJyb3JzLCBldGMuKQorCSAqLworCWRvdWJsZQl3ZWlnaHQgPSAwLjA7CisKIAkvKgog CSAqIENvbGxlY3QgdGhlIG51bWJlciBvZiBhbGxvY2F0aW9ucyByZXF1ZXN0ZWQgaW4gdGhl IHBhc3QgaW50ZXJ2YWwuCiAJICogV2hpbGUgYXQgaXQsIHJlc2V0IHRoZSBjb3VudGVyIHRv IHN0YXJ0IHRoZSBuZXcgaW50ZXJ2YWwuCkBAIC02MzEsMTYgKzY0NSwyNyBAQCBTdHJhdGVn eVN5bmNCYWxhbmNlKHZvaWQpCiAJCXBnX2F0b21pY19mZXRjaF9hZGRfdTY0KCZzd2VlcC0+ bnVtVG90YWxSZXF1ZXN0ZWRBbGxvY3MsIGFsbG9jc1tpXSk7CiAKIAkJdG90YWxfYWxsb2Nz ICs9IGFsbG9jc1tpXTsKKworCQkvKiB3ZWlnaHQgb2YgdGhlIHBhcnRpdGlvbiwgcmVsYXRp dmUgdG8gdGhlICJ1bml0IiBwYXJ0aXRpb24gKi8KKwkJd2VpZ2h0ICs9IChzd2VlcC0+bnVt QnVmZmVycyAqIDEuMCAvIG51bV9idWZmZXJzKTsKIAl9CiAKIAkvKgotCSAqIENhbGN1bGF0 ZSB0aGUgImZhaXIgc2hhcmUiIG9mIGFsbG9jYXRpb25zIHBlciBwYXJ0aXRpb24uCisJICog WFhYIE5vdCBzdXJlIGlmIHRoZSB0b3RhbF93ZWlnaHQgbWlnaHQgZXhjZWVkIG51bV9wYXJ0 aXRpb25zIGR1ZSB0bworCSAqIHJvdW5kaW5nIGVycm9ycy4KKwkgKi8KKwlBc3NlcnQoKHdl aWdodCA+IDAuMCkgJiYgKHdlaWdodCA8PSBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRp b25zKSk7CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgImZhaXIgc2hhcmUiIG9mIGFsbG9j YXRpb25zIHBlciBwYXJ0aXRpb24uIFRoaXMgaXMgdGhlCisJICogbnVtYmVyIG9mIGFsbG9j YXRpb25zIGZvciB0aGUgInVuaXQiIHBhcnRpdGlvbiB3aXRoIG51bV9idWZmZXJzLCB3ZSds bAorCSAqIG5lZWQgdG8gYWRqdXN0IGl0IHVzaW5nIHRoZSBwZXItcGFydGl0aW9uIHdlaWdo dC4KIAkgKgogCSAqIFhYWCBUaGUgbGFzdCBwYXJ0aXRpb24gY291bGQgYmUgc21hbGxlciwg aW4gd2hpY2ggY2FzZSBpdCBzaG91bGQgYmUKIAkgKiBleHBlY3RlZCB0byBoYW5kbGUgZmV3 ZXIgYWxsb2NhdGlvbnMuIFNvIHRoaXMgc2hvdWxkIGJlIGEgd2VpZ2h0ZWQKIAkgKiBhdmVy YWdlLiBCdXQgZm9yIG5vdyBhIHNpbXBsZSBhdmVyYWdlIGlzIGdvb2QgZW5vdWdoLgogCSAq LwotCWF2Z19hbGxvY3MgPSAodG90YWxfYWxsb2NzIC8gU3RyYXRlZ3lDb250cm9sLT5udW1f cGFydGl0aW9ucyk7CisJYXZnX2FsbG9jcyA9ICh0b3RhbF9hbGxvY3MgLyB3ZWlnaHQpOwog CiAJLyoKIAkgKiBDYWxjdWxhdGUgdGhlICJkZWx0YSIgZnJvbSBiYWxhbmNlZCBzdGF0ZSwg aS5lLiBob3cgbWFueSBhbGxvY2F0aW9ucwpAQCAtNjQ4LDggKzY3MywxNCBAQCBTdHJhdGVn eVN5bmNCYWxhbmNlKHZvaWQpCiAJICovCiAJZm9yIChpbnQgaSA9IDA7IGkgPCBTdHJhdGVn eUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zOyBpKyspCiAJewotCQlpZiAoYWxsb2NzW2ldID4g YXZnX2FsbG9jcykKLQkJCWRlbHRhX2FsbG9jcyArPSAoYWxsb2NzW2ldIC0gYXZnX2FsbG9j cyk7CisJCUNsb2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ld OworCisJCS8qIG51bWJlciBvZiBhbGxvY2F0aW9ucyBleHBlY3RlZCBmb3IgdGhpcyBwYXJ0 aXRpb24gKi8KKwkJZG91YmxlCXBhcnRfd2VpZ2h0ID0gKHN3ZWVwLT5udW1CdWZmZXJzICog MS4wIC8gbnVtX2J1ZmZlcnMpOworCQl1aW50MzIJcGFydF9hbGxvY3MgPSBhdmdfYWxsb2Nz ICogcGFydF93ZWlnaHQ7CisKKwkJaWYgKGFsbG9jc1tpXSA+IHBhcnRfYWxsb2NzKQorCQkJ ZGVsdGFfYWxsb2NzICs9IChhbGxvY3NbaV0gLSBwYXJ0X2FsbG9jcyk7CiAJfQogCiAJLyoK QEAgLTcxMiw2ICs3NDMsMTAgQEAgU3RyYXRlZ3lTeW5jQmFsYW5jZSh2b2lkKQogCQlDbG9j a1N3ZWVwICpzd2VlcCA9ICZTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXTsKIAkJdWludDgJ CWJhbGFuY2VbTUFYX0JVRkZFUl9QQVJUSVRJT05TXTsKIAorCQkvKiBudW1iZXIgb2YgYWxs b2NhdGlvbnMgZXhwZWN0ZWQgZm9yIHRoaXMgcGFydGl0aW9uICovCisJCWRvdWJsZQlwYXJ0 X3dlaWdodCA9IChzd2VlcC0+bnVtQnVmZmVycyAqIDEuMCAvIG51bV9idWZmZXJzKTsKKwkJ dWludDMyCXBhcnRfYWxsb2NzID0gYXZnX2FsbG9jcyAqIHBhcnRfd2VpZ2h0OworCiAJCS8q IGxvY2ssIHdlJ3JlIGdvaW5nIHRvIG1vZGlmeSB0aGUgYmFsYW5jZSB3ZWlnaHRzICovCiAJ CVNwaW5Mb2NrQWNxdWlyZSgmc3dlZXAtPmNsb2NrX3N3ZWVwX2xvY2spOwogCkBAIC03MTks NyArNzU0LDcgQEAgU3RyYXRlZ3lTeW5jQmFsYW5jZSh2b2lkKQogCQltZW1zZXQoYmFsYW5j ZSwgMCwgc2l6ZW9mKHVpbnQ4KSAqIE1BWF9CVUZGRVJfUEFSVElUSU9OUyk7CiAKIAkJLyog ZG9lcyB0aGlzIHBhcnRpdGlvbiBoYXMgZmV3ZXIgb3IgbW9yZSB0aGFuIGF2Z19hbGxvY3M/ ICovCi0JCWlmIChhbGxvY3NbaV0gPCBhdmdfYWxsb2NzKQorCQlpZiAoYWxsb2NzW2ldIDwg cGFydF9hbGxvY3MpCiAJCXsKIAkJCS8qIGZld2VyIC0gZG9uJ3QgcmVkaXJlY3QgYW55IGFs bG9jYXRpb25zIGVsc2V3aGVyZSAqLwogCQkJYmFsYW5jZVtpXSA9IDEwMDsKQEAgLTczMywy MiArNzY4LDMwIEBAIFN0cmF0ZWd5U3luY0JhbGFuY2Uodm9pZCkKIAkJCSAqIGEgZnJhY3Rp b24gcHJvcG9ydGlvbmFsIHRvIChleGNlc3MvZGVsdGEpIGZyb20gdGhpcyBvbmUuCiAJCQkg Ki8KIAotCQkJLyogZnJhY3Rpb24gb2YgdGhlICJ0b3RhbCIgZGVsdGEgKi8KLQkJCWRvdWJs ZQlkZWx0YV9mcmFjID0gKGFsbG9jc1tpXSAtIGF2Z19hbGxvY3MpICogMS4wIC8gZGVsdGFf YWxsb2NzOworCQkJLyogZnJhY3Rpb24gb2YgdGhlICJ0b3RhbCIgZGVsdGEgcmVwcmVzZW50 ZWQgYnkgImV4Y2VzcyIgYWxsb2NhdGlvbnMgKi8KKwkJCWRvdWJsZQlkZWx0YV9mcmFjID0g KGFsbG9jc1tpXSAtIHBhcnRfYWxsb2NzKSAqIDEuMCAvIGRlbHRhX2FsbG9jczsKIAogCQkJ Lyoga2VlcCBqdXN0IGVub3VnaCBhbGxvY2F0aW9ucyB0byBtZWV0IHRoZSB0YXJnZXQgKi8K LQkJCWJhbGFuY2VbaV0gPSAoMTAwLjAgKiBhdmdfYWxsb2NzIC8gYWxsb2NzW2ldKTsKKwkJ CWJhbGFuY2VbaV0gPSAoMTAwLjAgKiBwYXJ0X2FsbG9jcyAvIGFsbG9jc1tpXSk7CiAKIAkJ CS8qIHJlZGlyZWN0IHRoZSBleHRyYSBhbGxvY2F0aW9ucyAqLwogCQkJZm9yIChpbnQgaiA9 IDA7IGogPCBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zOyBqKyspCiAJCQl7CisJ CQkJQ2xvY2tTd2VlcCAqc3dlZXAyID0gJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2pdOwor CisJCQkJLyogbnVtYmVyIG9mIGFsbG9jYXRpb25zIGV4cGVjdGVkIGZvciB0aGlzIHBhcnRp dGlvbiAqLworCQkJCWRvdWJsZQlwYXJ0X3dlaWdodF8yID0gKHN3ZWVwMi0+bnVtQnVmZmVy cyAqIDEuMCAvIG51bV9idWZmZXJzKTsKKwkJCQl1aW50MzIJcGFydF9hbGxvY3NfMiA9IGF2 Z19hbGxvY3MgKiBwYXJ0X3dlaWdodF8yOworCiAJCQkJLyogSG93IG1hbnkgYWxsb2NhdGlv bnMgdG8gcmVjZWl2ZSBmcm9tIGktdGggcGFydGl0aW9uPyAqLwotCQkJCXVpbnQzMglyZWNl aXZlX2FsbG9jcyA9IGRlbHRhX2ZyYWMgKiAoYXZnX2FsbG9jcyAtIGFsbG9jc1tqXSk7CisJ CQkJdWludDMyCXJlY2VpdmVfYWxsb2NzID0gZGVsdGFfZnJhYyAqIChwYXJ0X2FsbG9jc18y IC0gYWxsb2NzW2pdKTsKIAogCQkJCS8qIGlnbm9yZSBwYXJ0aXRpb25zIHRoYXQgZG9uJ3Qg bmVlZCBhZGRpdGlvbmFsIGFsbG9jYXRpb25zICovCi0JCQkJaWYgKGFsbG9jc1tqXSA+IGF2 Z19hbGxvY3MpCisJCQkJaWYgKGFsbG9jc1tqXSA+IHBhcnRfYWxsb2NzXzIpCiAJCQkJCWNv bnRpbnVlOwogCisJCQkJQXNzZXJ0KHJlY2VpdmVfYWxsb2NzID49IDApOworCiAJCQkJLyog ZnJhY3Rpb24gdG8gcmVkaXJlY3QgKi8KIAkJCQliYWxhbmNlW2pdID0gKDEwMC4wICogcmVj ZWl2ZV9hbGxvY3MgLyBhbGxvY3NbaV0pICsgMC41OwogCQkJfQotLSAKMi41MS4wCgo= --------------i0MMC9nLNSRCyrH3GSEb0aRu Content-Type: text/x-patch; charset=UTF-8; name="v20250911-0005-NUMA-partition-PGPROC.patch" Content-Disposition: attachment; filename="v20250911-0005-NUMA-partition-PGPROC.patch" Content-Transfer-Encoding: base64 RnJvbSA0Y2RmZmY2M2QxYTkwMzkwMmNlMTgyYjdlNzIzZmY2ZDJkMDlhODRlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogTW9uLCA4IFNlcCAyMDI1IDEzOjExOjAyICswMjAwClN1YmplY3Q6IFtQQVRDSCB2 MjAyNTA5MTEgNS84XSBOVU1BOiBwYXJ0aXRpb24gUEdQUk9DCgpUaGUgZ29hbCBpcyB0byBk 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 aWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYyB8ICA5NCArKysrCiBz cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMgICAgICAgICAgICAgfCAgIDQgKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMgICAgICAgICB8ICAgMyAr LQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jICAgICAgIHwgICA0 ICstCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jICAgICAgICAgICAgICAgfCAg IDIgKy0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jICAgICAgICB8 ICAgMiArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYyAgICAgICAg IHwgICAyICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMgICAgICAg ICB8ICAgMiArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgICAgICAg ICAgIHwgIDg1ICstLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYyAgICAgICAg ICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jICAgICAg ICAgICAgICAgfCA1MzIgKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9wb3J0L3Bn X251bWEuaCAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvc3RvcmFn ZS9wcm9jLmggICAgICAgICAgICAgICAgICAgIHwgIDE4ICstCiBzcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDEgKwogMTUgZmlsZXMgY2hhbmdl ZCwgNzA1IGluc2VydGlvbnMoKyksIDcwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbCBiL2Nv bnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbAppbmRl eCBkYzJjZTAxOTI4My4uMzA2MDYzZTE1OWUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfYnVm ZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbAorKysgYi9jb250cmliL3Bn X2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwKQEAgLTMzLDMgKzMz LDIyIEBAIFJFVk9LRSBBTEwgT04gcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyBGUk9NIFBV QkxJQzsKIAogR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19idWZmZXJjYWNoZV9wYXJ0 aXRpb25zKCkgVE8gcGdfbW9uaXRvcjsKIEdSQU5UIFNFTEVDVCBPTiBwZ19idWZmZXJjYWNo ZV9wYXJ0aXRpb25zIFRPIHBnX21vbml0b3I7CisKKy0tIFJlZ2lzdGVyIHRoZSBuZXcgZnVu Y3Rpb25zLgorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gcGdfYnVmZmVyY2FjaGVfcGdw cm9jKCkKK1JFVFVSTlMgU0VUT0YgUkVDT1JECitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3Bn X2J1ZmZlcmNhY2hlX3BncHJvYycKK0xBTkdVQUdFIEMgUEFSQUxMRUwgU0FGRTsKKworLS0g Q3JlYXRlIGEgdmlldyBmb3IgY29udmVuaWVudCBhY2Nlc3MuCitDUkVBVEUgVklFVyBwZ19i dWZmZXJjYWNoZV9wZ3Byb2MgQVMKKwlTRUxFQ1QgUC4qIEZST00gcGdfYnVmZmVyY2FjaGVf cGdwcm9jKCkgQVMgUAorCShwYXJ0aXRpb24gaW50ZWdlciwKKwkgbnVtYV9ub2RlIGludGVn ZXIsIG51bV9wcm9jcyBpbnRlZ2VyLCBwZ3Byb2NfcHRyIGJpZ2ludCwgZmFzdHBhdGhfcHRy IGJpZ2ludCk7CisKKy0tIERvbid0IHdhbnQgdGhlc2UgdG8gYmUgYXZhaWxhYmxlIHRvIHB1 YmxpYy4KK1JFVk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfYnVmZmVyY2FjaGVfcGdwcm9jKCkg RlJPTSBQVUJMSUM7CitSRVZPS0UgQUxMIE9OIHBnX2J1ZmZlcmNhY2hlX3BncHJvYyBGUk9N IFBVQkxJQzsKKworR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19idWZmZXJjYWNoZV9w Z3Byb2MoKSBUTyBwZ19tb25pdG9yOworR1JBTlQgU0VMRUNUIE9OIHBnX2J1ZmZlcmNhY2hl X3BncHJvYyBUTyBwZ19tb25pdG9yOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZmZXJj YWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9w Z19idWZmZXJjYWNoZV9wYWdlcy5jCmluZGV4IGY2ODMxZjYwYjllLi5hODU5OTYyZjVmOCAx MDA2NDQKLS0tIGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdl cy5jCisrKyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMu YwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgInBvcnQvcGdfbnVtYS5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvYnVmX2ludGVybmFscy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdy LmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAidXRpbHMvYXJyYXku aCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5o IgpAQCAtMzAsNiArMzEsNyBAQAogCiAjZGVmaW5lIE5VTV9CVUZGRVJDQUNIRV9OVU1BX0VM RU0JMwogI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19FTEVNCTEyCisjZGVm aW5lIE5VTV9CVUZGRVJDQUNIRV9QR1BST0NfRUxFTQk1CiAKIFBHX01PRFVMRV9NQUdJQ19F WFQoCiAJCQkJCS5uYW1lID0gInBnX2J1ZmZlcmNhY2hlIiwKQEAgLTEwNCw2ICsxMDYsNyBA QCBQR19GVU5DVElPTl9JTkZPX1YxKHBnX2J1ZmZlcmNhY2hlX2V2aWN0KTsKIFBHX0ZVTkNU SU9OX0lORk9fVjEocGdfYnVmZmVyY2FjaGVfZXZpY3RfcmVsYXRpb24pOwogUEdfRlVOQ1RJ T05fSU5GT19WMShwZ19idWZmZXJjYWNoZV9ldmljdF9hbGwpOwogUEdfRlVOQ1RJT05fSU5G T19WMShwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEo cGdfYnVmZmVyY2FjaGVfcGdwcm9jKTsKIAogCiAvKiBPbmx5IG5lZWQgdG8gdG91Y2ggbWVt b3J5IG9uY2UgcGVyIGJhY2tlbmQgcHJvY2VzcyBsaWZldGltZSAqLwpAQCAtOTMyLDMgKzkz NSw5NCBAQCBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ ZWxzZQogCQlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7CiB9CisKKy8qCisgKiBJbnF1aXJl IGFib3V0IHBhcnRpdGlvbmluZyBvZiBQR1BST0MgYXJyYXkuCisgKi8KK0RhdHVtCitwZ19i dWZmZXJjYWNoZV9wZ3Byb2MoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlGdW5jQ2FsbENvbnRl eHQgKmZ1bmNjdHg7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCVR1cGxlRGVzYwl0 dXBsZWRlc2M7CisJVHVwbGVEZXNjCWV4cGVjdGVkX3R1cGxlZGVzYzsKKwlIZWFwVHVwbGUJ dHVwbGU7CisJRGF0dW0JCXJlc3VsdDsKKworCWlmIChTUkZfSVNfRklSU1RDQUxMKCkpCisJ eworCQlmdW5jY3R4ID0gU1JGX0ZJUlNUQ0FMTF9JTklUKCk7CisKKwkJLyogU3dpdGNoIGNv bnRleHQgd2hlbiBhbGxvY2F0aW5nIHN0dWZmIHRvIGJlIHVzZWQgaW4gbGF0ZXIgY2FsbHMg Ki8KKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0 aV9jYWxsX21lbW9yeV9jdHgpOworCisJCWlmIChnZXRfY2FsbF9yZXN1bHRfdHlwZShmY2lu Zm8sIE5VTEwsICZleHBlY3RlZF90dXBsZWRlc2MpICE9IFRZUEVGVU5DX0NPTVBPU0lURSkK KwkJCWVsb2coRVJST1IsICJyZXR1cm4gdHlwZSBtdXN0IGJlIGEgcm93IHR5cGUiKTsKKwor CQlpZiAoZXhwZWN0ZWRfdHVwbGVkZXNjLT5uYXR0cyAhPSBOVU1fQlVGRkVSQ0FDSEVfUEdQ Uk9DX0VMRU0pCisJCQllbG9nKEVSUk9SLCAiaW5jb3JyZWN0IG51bWJlciBvZiBvdXRwdXQg YXJndW1lbnRzIik7CisKKwkJLyogQ29uc3RydWN0IGEgdHVwbGUgZGVzY3JpcHRvciBmb3Ig dGhlIHJlc3VsdCByb3dzLiAqLworCQl0dXBsZWRlc2MgPSBDcmVhdGVUZW1wbGF0ZVR1cGxl RGVzYyhleHBlY3RlZF90dXBsZWRlc2MtPm5hdHRzKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5 KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDEsICJwYXJ0aXRpb24iLAorCQkJCQkJICAgSU5U NE9JRCwgLTEsIDApOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51 bWJlcikgMiwgIm51bWFfbm9kZSIsCisJCQkJCQkgICBJTlQ0T0lELCAtMSwgMCk7CisJCVR1 cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSAzLCAibnVtX3Byb2Nz IiwKKwkJCQkJCSAgIElOVDRPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1 cGxlZGVzYywgKEF0dHJOdW1iZXIpIDQsICJwZ3Byb2NfcHRyIiwKKwkJCQkJCSAgIElOVDhP SUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1i ZXIpIDUsICJmYXN0cGF0aF9wdHIiLAorCQkJCQkJICAgSU5UOE9JRCwgLTEsIDApOworCisJ CWZ1bmNjdHgtPnVzZXJfZmN0eCA9IEJsZXNzVHVwbGVEZXNjKHR1cGxlZGVzYyk7CisKKwkJ LyogUmV0dXJuIHRvIG9yaWdpbmFsIGNvbnRleHQgd2hlbiBhbGxvY2F0aW5nIHRyYW5zaWVu dCBtZW1vcnkgKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJ CS8qIFNldCBtYXggY2FsbHMgYW5kIHJlbWVtYmVyIHRoZSB1c2VyIGZ1bmN0aW9uIGNvbnRl eHQuICovCisJCWZ1bmNjdHgtPm1heF9jYWxscyA9IFByb2NQYXJ0aXRpb25Db3VudCgpOwor CX0KKworCWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRVUCgpOworCisJaWYgKGZ1bmNjdHgt PmNhbGxfY250ciA8IGZ1bmNjdHgtPm1heF9jYWxscykKKwl7CisJCXVpbnQzMgkJaSA9IGZ1 bmNjdHgtPmNhbGxfY250cjsKKworCQlpbnQJCQludW1hX25vZGUsCisJCQkJCW51bV9wcm9j czsKKworCQl2b2lkCSAgICpwZ3Byb2NfcHRyLAorCQkJCSAgICpmYXN0cGF0aF9wdHI7CisK KwkJRGF0dW0JCXZhbHVlc1tOVU1fQlVGRkVSQ0FDSEVfUEdQUk9DX0VMRU1dOworCQlib29s CQludWxsc1tOVU1fQlVGRkVSQ0FDSEVfUEdQUk9DX0VMRU1dOworCisJCVByb2NQYXJ0aXRp b25HZXQoaSwgJm51bWFfbm9kZSwgJm51bV9wcm9jcywKKwkJCQkJCSAmcGdwcm9jX3B0ciwg JmZhc3RwYXRoX3B0cik7CisKKwkJdmFsdWVzWzBdID0gSW50MzJHZXREYXR1bShpKTsKKwkJ bnVsbHNbMF0gPSBmYWxzZTsKKworCQl2YWx1ZXNbMV0gPSBJbnQzMkdldERhdHVtKG51bWFf bm9kZSk7CisJCW51bGxzWzFdID0gZmFsc2U7CisKKwkJdmFsdWVzWzJdID0gSW50MzJHZXRE YXR1bShudW1fcHJvY3MpOworCQludWxsc1syXSA9IGZhbHNlOworCisJCXZhbHVlc1szXSA9 IFBvaW50ZXJHZXREYXR1bShwZ3Byb2NfcHRyKTsKKwkJbnVsbHNbM10gPSBmYWxzZTsKKwor CQl2YWx1ZXNbNF0gPSBQb2ludGVyR2V0RGF0dW0oZmFzdHBhdGhfcHRyKTsKKwkJbnVsbHNb NF0gPSBmYWxzZTsKKworCQkvKiBCdWlsZCBhbmQgcmV0dXJuIHRoZSB0dXBsZS4gKi8KKwkJ dHVwbGUgPSBoZWFwX2Zvcm1fdHVwbGUoKFR1cGxlRGVzYykgZnVuY2N0eC0+dXNlcl9mY3R4 LCB2YWx1ZXMsIG51bGxzKTsKKwkJcmVzdWx0ID0gSGVhcFR1cGxlR2V0RGF0dW0odHVwbGUp OworCisJCVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4LCByZXN1bHQpOworCX0KKwllbHNlCisJ CVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL2Nsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Ns b2cuYwppbmRleCBlODBmYmUxMDljZi4uOTI4ZDEyNmQwZWUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS9jbG9nLmMKQEAgLTU3NCw3ICs1NzQsNyBAQCBUcmFuc2FjdGlvbkdyb3VwVXBk YXRlWGlkU3RhdHVzKFRyYW5zYWN0aW9uSWQgeGlkLCBYaWRTdGF0dXMgc3RhdHVzLAogCS8q IFdhbGsgdGhlIGxpc3QgYW5kIHVwZGF0ZSB0aGUgc3RhdHVzIG9mIGFsbCBYSURzLiAqLwog CXdoaWxlIChuZXh0aWR4ICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCiAJewotCQlQR1BST0MJ ICAgKm5leHRwcm9jID0gJlByb2NHbG9iYWwtPmFsbFByb2NzW25leHRpZHhdOworCQlQR1BS T0MJICAgKm5leHRwcm9jID0gUHJvY0dsb2JhbC0+YWxsUHJvY3NbbmV4dGlkeF07CiAJCWlu dDY0CQl0aGlzcGFnZW5vID0gbmV4dHByb2MtPmNsb2dHcm91cE1lbWJlclBhZ2U7CiAKIAkJ LyoKQEAgLTYzMyw3ICs2MzMsNyBAQCBUcmFuc2FjdGlvbkdyb3VwVXBkYXRlWGlkU3RhdHVz KFRyYW5zYWN0aW9uSWQgeGlkLCBYaWRTdGF0dXMgc3RhdHVzLAogCSAqLwogCXdoaWxlICh3 YWtlaWR4ICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCiAJewotCQlQR1BST0MJICAgKndha2Vw cm9jID0gJlByb2NHbG9iYWwtPmFsbFByb2NzW3dha2VpZHhdOworCQlQR1BST0MJICAgKndh a2Vwcm9jID0gUHJvY0dsb2JhbC0+YWxsUHJvY3Nbd2FrZWlkeF07CiAKIAkJd2FrZWlkeCA9 IHBnX2F0b21pY19yZWFkX3UzMigmd2FrZXByb2MtPmNsb2dHcm91cE5leHQpOwogCQlwZ19h dG9taWNfd3JpdGVfdTMyKCZ3YWtlcHJvYy0+Y2xvZ0dyb3VwTmV4dCwgSU5WQUxJRF9QUk9D X05VTUJFUik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29w aGFzZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwppbmRleCBk OGUyZmNlMmM5OS4uNzc0NWExOTc0NzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3R3b3BoYXNlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v dHdvcGhhc2UuYwpAQCAtMjgyLDcgKzI4Miw3IEBAIFR3b1BoYXNlU2htZW1Jbml0KHZvaWQp CiAJCQlUd29QaGFzZVN0YXRlLT5mcmVlR1hhY3RzID0gJmd4YWN0c1tpXTsKIAogCQkJLyog YXNzb2NpYXRlIGl0IHdpdGggYSBQR1BST0MgYXNzaWduZWQgYnkgSW5pdFByb2NHbG9iYWwg Ki8KLQkJCWd4YWN0c1tpXS5wZ3Byb2NubyA9IEdldE51bWJlckZyb21QR1Byb2MoJlByZXBh cmVkWGFjdFByb2NzW2ldKTsKKwkJCWd4YWN0c1tpXS5wZ3Byb2NubyA9IEdldE51bWJlckZy b21QR1Byb2MoUHJlcGFyZWRYYWN0UHJvY3NbaV0pOwogCQl9CiAJfQogCWVsc2UKQEAgLTQ0 Nyw2ICs0NDcsNyBAQCBNYXJrQXNQcmVwYXJpbmdHdXRzKEdsb2JhbFRyYW5zYWN0aW9uIGd4 YWN0LCBGdWxsVHJhbnNhY3Rpb25JZCBmeGlkLAogCiAJLyogSW5pdGlhbGl6ZSB0aGUgUEdQ Uk9DIGVudHJ5ICovCiAJTWVtU2V0KHByb2MsIDAsIHNpemVvZihQR1BST0MpKTsKKwlwcm9j LT5wcm9jbnVtYmVyID0gZ3hhY3QtPnBncHJvY25vOwogCWRsaXN0X25vZGVfaW5pdCgmcHJv Yy0+bGlua3MpOwogCXByb2MtPndhaXRTdGF0dXMgPSBQUk9DX1dBSVRfU1RBVFVTX09LOwog CWlmIChMb2NhbFRyYW5zYWN0aW9uSWRJc1ZhbGlkKE15UHJvYy0+dnhpZC5seGlkKSkKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYyBiL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYwppbmRleCBhMzg5NzljNTBl NC4uMDEzNTYzNjVlYWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1 bmNoX2JhY2tlbmQuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2xhdW5jaF9iYWNr ZW5kLmMKQEAgLTEwNiw4ICsxMDYsOCBAQCB0eXBlZGVmIHN0cnVjdAogCUxXTG9ja1BhZGRl ZCAqTWFpbkxXTG9ja0FycmF5OwogCXNsb2NrX3QgICAgKlByb2NTdHJ1Y3RMb2NrOwogCVBS T0NfSERSICAgKlByb2NHbG9iYWw7Ci0JUEdQUk9DCSAgICpBdXhpbGlhcnlQcm9jczsKLQlQ R1BST0MJICAgKlByZXBhcmVkWGFjdFByb2NzOworCVBHUFJPQwkgICAqKkF1eGlsaWFyeVBy b2NzOworCVBHUFJPQwkgICAqKlByZXBhcmVkWGFjdFByb2NzOwogCXZvbGF0aWxlIFBNU2ln bmFsRGF0YSAqUE1TaWduYWxTdGF0ZTsKIAlQcm9jU2lnbmFsSGVhZGVyICpQcm9jU2lnbmFs OwogCXBpZF90CQlQb3N0bWFzdGVyUGlkOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9wZ2FyY2guYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMKaW5k ZXggNzhlMzllNWY4NjYuLmUyOGUwZjdkM2JkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL3BnYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNo LmMKQEAgLTI4OSw3ICsyODksNyBAQCBQZ0FyY2hXYWtldXAodm9pZCkKIAkgKiBiZSByZWxh dW5jaGVkIHNob3J0bHkgYW5kIHdpbGwgc3RhcnQgYXJjaGl2aW5nLgogCSAqLwogCWlmIChh cmNoX3BncHJvY25vICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCi0JCVNldExhdGNoKCZQcm9j R2xvYmFsLT5hbGxQcm9jc1thcmNoX3BncHJvY25vXS5wcm9jTGF0Y2gpOworCQlTZXRMYXRj aCgmUHJvY0dsb2JhbC0+YWxsUHJvY3NbYXJjaF9wZ3Byb2Nub10tPnByb2NMYXRjaCk7CiB9 CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVy LmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwppbmRleCBlMWYx NDJmMjBjNy4uMDExZmVjZmM1OGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvd2Fsc3VtbWFyaXplci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3Vt bWFyaXplci5jCkBAIC02NDksNyArNjQ5LDcgQEAgV2FrZXVwV2FsU3VtbWFyaXplcih2b2lk KQogCUxXTG9ja1JlbGVhc2UoV0FMU3VtbWFyaXplckxvY2spOwogCiAJaWYgKHBncHJvY25v ICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCi0JCVNldExhdGNoKCZQcm9jR2xvYmFsLT5hbGxQ cm9jc1twZ3Byb2Nub10ucHJvY0xhdGNoKTsKKwkJU2V0TGF0Y2goJlByb2NHbG9iYWwtPmFs bFByb2NzW3BncHJvY25vXS0+cHJvY0xhdGNoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZfaW5pdC5jCmluZGV4IGRkOWY1MTUyOWI0Li4yZmQ3ZjkzN2ZmYiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYworKysg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCkBAIC03NjYsNiArNzY2 LDggQEAgY2hlY2tfZGVidWdfbnVtYShjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1 Y1NvdXJjZSBzb3VyY2UpCiAKIAkJaWYgKHBnX3N0cmNhc2VjbXAoaXRlbSwgImJ1ZmZlcnMi KSA9PSAwKQogCQkJZmxhZ3MgfD0gTlVNQV9CVUZGRVJTOworCQllbHNlIGlmIChwZ19zdHJj YXNlY21wKGl0ZW0sICJwcm9jcyIpID09IDApCisJCQlmbGFncyB8PSBOVU1BX1BST0NTOwog CQllbHNlCiAJCXsKIAkJCUdVQ19jaGVja19lcnJkZXRhaWwoIkludmFsaWQgb3B0aW9uIFwi JXNcIi4iLCBpdGVtKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVy L2ZyZWVsaXN0LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jCmlu ZGV4IDVjZjlhNTY1OTE0Li5hNjY1N2MwZmMxMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9mcmVlbGlzdC5jCkBAIC00NjcsNyArNDY3LDcgQEAgU3RyYXRlZ3lHZXRCdWZmZXIo QnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQzMiAqYnVmX3N0YXRlLCBib29s ICpmcm9tX3IKIAkJICogYWN0dWFsbHkgZmluZSBiZWNhdXNlIHByb2NMYXRjaCBpc24ndCBl dmVyIGZyZWVkLCBzbyB3ZSBqdXN0IGNhbgogCQkgKiBwb3RlbnRpYWxseSBzZXQgdGhlIHdy b25nIHByb2Nlc3MnIChvciBubyBwcm9jZXNzJykgbGF0Y2guCiAJCSAqLwotCQlTZXRMYXRj aCgmUHJvY0dsb2JhbC0+YWxsUHJvY3NbYmd3cHJvY25vXS5wcm9jTGF0Y2gpOworCQlTZXRM YXRjaCgmUHJvY0dsb2JhbC0+YWxsUHJvY3NbYmd3cHJvY25vXS0+cHJvY0xhdGNoKTsKIAl9 CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5 LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwppbmRleCAyMDBmNzJj NmUyNS4uN2UyOGZiZGZlYTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3Byb2NhcnJheS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5j CkBAIC0yNjgsNyArMjY4LDcgQEAgdHlwZWRlZiBlbnVtIEtBWENvbXByZXNzUmVhc29uCiAK IHN0YXRpYyBQcm9jQXJyYXlTdHJ1Y3QgKnByb2NBcnJheTsKIAotc3RhdGljIFBHUFJPQyAq YWxsUHJvY3M7CitzdGF0aWMgUEdQUk9DICoqYWxsUHJvY3M7CiAKIC8qCiAgKiBDYWNoZSB0 byByZWR1Y2Ugb3ZlcmhlYWQgb2YgcmVwZWF0ZWQgY2FsbHMgdG8gVHJhbnNhY3Rpb25JZElz SW5Qcm9ncmVzcygpCkBAIC0zNjksNiArMzY5LDggQEAgc3RhdGljIGlubGluZSBGdWxsVHJh bnNhY3Rpb25JZCBGdWxsWGlkUmVsYXRpdmVUbyhGdWxsVHJhbnNhY3Rpb25JZCByZWwsCiAJ CQkJCQkJCQkJCQkgIFRyYW5zYWN0aW9uSWQgeGlkKTsKIHN0YXRpYyB2b2lkIEdsb2JhbFZp c1VwZGF0ZUFwcGx5KENvbXB1dGVYaWRIb3Jpem9uc1Jlc3VsdCAqaG9yaXpvbnMpOwogCitz dGF0aWMgdm9pZCBBc3NlcnRDaGVja0FsbFByb2NzKHZvaWQpOworCiAvKgogICogUmVwb3J0 IHNoYXJlZC1tZW1vcnkgc3BhY2UgbmVlZGVkIGJ5IFByb2NBcnJheVNobWVtSW5pdAogICov CkBAIC00NzYsNiArNDc4LDggQEAgUHJvY0FycmF5QWRkKFBHUFJPQyAqcHJvYykKIAlMV0xv Y2tBY3F1aXJlKFByb2NBcnJheUxvY2ssIExXX0VYQ0xVU0lWRSk7CiAJTFdMb2NrQWNxdWly ZShYaWRHZW5Mb2NrLCBMV19FWENMVVNJVkUpOwogCisJQXNzZXJ0Q2hlY2tBbGxQcm9jcygp OworCiAJaWYgKGFycmF5UC0+bnVtUHJvY3MgPj0gYXJyYXlQLT5tYXhQcm9jcykKIAl7CiAJ CS8qCkBAIC01MDIsNyArNTA2LDcgQEAgUHJvY0FycmF5QWRkKFBHUFJPQyAqcHJvYykKIAkJ aW50CQkJdGhpc19wcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07CiAKIAkJQXNz ZXJ0KHRoaXNfcHJvY25vID49IDAgJiYgdGhpc19wcm9jbm8gPCAoYXJyYXlQLT5tYXhQcm9j cyArIE5VTV9BVVhJTElBUllfUFJPQ1MpKTsKLQkJQXNzZXJ0KGFsbFByb2NzW3RoaXNfcHJv Y25vXS5wZ3hhY3RvZmYgPT0gaW5kZXgpOworCQlBc3NlcnQoYWxsUHJvY3NbdGhpc19wcm9j bm9dLT5wZ3hhY3RvZmYgPT0gaW5kZXgpOwogCiAJCS8qIElmIHdlIGhhdmUgZm91bmQgb3Vy IHJpZ2h0IHBvc2l0aW9uIGluIHRoZSBhcnJheSwgYnJlYWsgKi8KIAkJaWYgKHRoaXNfcHJv Y25vID4gcGdwcm9jbm8pCkBAIC01MzgsMTEgKzU0MiwxMyBAQCBQcm9jQXJyYXlBZGQoUEdQ Uk9DICpwcm9jKQogCQlpbnQJCQlwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07 CiAKIAkJQXNzZXJ0KHByb2NubyA+PSAwICYmIHByb2NubyA8IChhcnJheVAtPm1heFByb2Nz ICsgTlVNX0FVWElMSUFSWV9QUk9DUykpOwotCQlBc3NlcnQoYWxsUHJvY3NbcHJvY25vXS5w Z3hhY3RvZmYgPT0gaW5kZXggLSAxKTsKKwkJQXNzZXJ0KGFsbFByb2NzW3Byb2Nub10tPnBn eGFjdG9mZiA9PSBpbmRleCAtIDEpOwogCi0JCWFsbFByb2NzW3Byb2Nub10ucGd4YWN0b2Zm ID0gaW5kZXg7CisJCWFsbFByb2NzW3Byb2Nub10tPnBneGFjdG9mZiA9IGluZGV4OwogCX0K IAorCUFzc2VydENoZWNrQWxsUHJvY3MoKTsKKwogCS8qCiAJICogUmVsZWFzZSBpbiByZXZl cnNlZCBhY3F1aXNpdGlvbiBvcmRlciwgdG8gcmVkdWNlIGZyZXF1ZW5jeSBvZiBoYXZpbmcg dG8KIAkgKiB3YWl0IGZvciBYaWRHZW5Mb2NrIHdoaWxlIGhvbGRpbmcgUHJvY0FycmF5TG9j ay4KQEAgLTU3OCwxMCArNTg0LDEyIEBAIFByb2NBcnJheVJlbW92ZShQR1BST0MgKnByb2Ms IFRyYW5zYWN0aW9uSWQgbGF0ZXN0WGlkKQogCUxXTG9ja0FjcXVpcmUoUHJvY0FycmF5TG9j aywgTFdfRVhDTFVTSVZFKTsKIAlMV0xvY2tBY3F1aXJlKFhpZEdlbkxvY2ssIExXX0VYQ0xV U0lWRSk7CiAKKwlBc3NlcnRDaGVja0FsbFByb2NzKCk7CisKIAlteW9mZiA9IHByb2MtPnBn eGFjdG9mZjsKIAogCUFzc2VydChteW9mZiA+PSAwICYmIG15b2ZmIDwgYXJyYXlQLT5udW1Q cm9jcyk7Ci0JQXNzZXJ0KFByb2NHbG9iYWwtPmFsbFByb2NzW2FycmF5UC0+cGdwcm9jbm9z W215b2ZmXV0ucGd4YWN0b2ZmID09IG15b2ZmKTsKKwlBc3NlcnQoUHJvY0dsb2JhbC0+YWxs UHJvY3NbYXJyYXlQLT5wZ3Byb2Nub3NbbXlvZmZdXS0+cGd4YWN0b2ZmID09IG15b2ZmKTsK IAogCWlmIChUcmFuc2FjdGlvbklkSXNWYWxpZChsYXRlc3RYaWQpKQogCXsKQEAgLTYzNiwx MSArNjQ0LDEzIEBAIFByb2NBcnJheVJlbW92ZShQR1BST0MgKnByb2MsIFRyYW5zYWN0aW9u SWQgbGF0ZXN0WGlkKQogCQlpbnQJCQlwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRl eF07CiAKIAkJQXNzZXJ0KHByb2NubyA+PSAwICYmIHByb2NubyA8IChhcnJheVAtPm1heFBy b2NzICsgTlVNX0FVWElMSUFSWV9QUk9DUykpOwotCQlBc3NlcnQoYWxsUHJvY3NbcHJvY25v XS5wZ3hhY3RvZmYgLSAxID09IGluZGV4KTsKKwkJQXNzZXJ0KGFsbFByb2NzW3Byb2Nub10t PnBneGFjdG9mZiAtIDEgPT0gaW5kZXgpOwogCi0JCWFsbFByb2NzW3Byb2Nub10ucGd4YWN0 b2ZmID0gaW5kZXg7CisJCWFsbFByb2NzW3Byb2Nub10tPnBneGFjdG9mZiA9IGluZGV4Owog CX0KIAorCUFzc2VydENoZWNrQWxsUHJvY3MoKTsKKwogCS8qCiAJICogUmVsZWFzZSBpbiBy ZXZlcnNlZCBhY3F1aXNpdGlvbiBvcmRlciwgdG8gcmVkdWNlIGZyZXF1ZW5jeSBvZiBoYXZp bmcgdG8KIAkgKiB3YWl0IGZvciBYaWRHZW5Mb2NrIHdoaWxlIGhvbGRpbmcgUHJvY0FycmF5 TG9jay4KQEAgLTg2MCw3ICs4NzAsNyBAQCBQcm9jQXJyYXlHcm91cENsZWFyWGlkKFBHUFJP QyAqcHJvYywgVHJhbnNhY3Rpb25JZCBsYXRlc3RYaWQpCiAJLyogV2FsayB0aGUgbGlzdCBh bmQgY2xlYXIgYWxsIFhJRHMuICovCiAJd2hpbGUgKG5leHRpZHggIT0gSU5WQUxJRF9QUk9D X05VTUJFUikKIAl7Ci0JCVBHUFJPQwkgICAqbmV4dHByb2MgPSAmYWxsUHJvY3NbbmV4dGlk eF07CisJCVBHUFJPQwkgICAqbmV4dHByb2MgPSBhbGxQcm9jc1tuZXh0aWR4XTsKIAogCQlQ cm9jQXJyYXlFbmRUcmFuc2FjdGlvbkludGVybmFsKG5leHRwcm9jLCBuZXh0cHJvYy0+cHJv Y0FycmF5R3JvdXBNZW1iZXJYaWQpOwogCkBAIC04ODAsNyArODkwLDcgQEAgUHJvY0FycmF5 R3JvdXBDbGVhclhpZChQR1BST0MgKnByb2MsIFRyYW5zYWN0aW9uSWQgbGF0ZXN0WGlkKQog CSAqLwogCXdoaWxlICh3YWtlaWR4ICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCiAJewotCQlQ R1BST0MJICAgKm5leHRwcm9jID0gJmFsbFByb2NzW3dha2VpZHhdOworCQlQR1BST0MJICAg Km5leHRwcm9jID0gYWxsUHJvY3Nbd2FrZWlkeF07CiAKIAkJd2FrZWlkeCA9IHBnX2F0b21p Y19yZWFkX3UzMigmbmV4dHByb2MtPnByb2NBcnJheUdyb3VwTmV4dCk7CiAJCXBnX2F0b21p Y193cml0ZV91MzIoJm5leHRwcm9jLT5wcm9jQXJyYXlHcm91cE5leHQsIElOVkFMSURfUFJP Q19OVU1CRVIpOwpAQCAtMTUyNiw3ICsxNTM2LDcgQEAgVHJhbnNhY3Rpb25JZElzSW5Qcm9n cmVzcyhUcmFuc2FjdGlvbklkIHhpZCkKIAkJcHhpZHMgPSBvdGhlcl9zdWJ4aWRzdGF0ZXNb cGd4YWN0b2ZmXS5jb3VudDsKIAkJcGdfcmVhZF9iYXJyaWVyKCk7CQkvKiBwYWlycyB3aXRo IGJhcnJpZXIgaW4gR2V0TmV3VHJhbnNhY3Rpb25JZCgpICovCiAJCXBncHJvY25vID0gYXJy YXlQLT5wZ3Byb2Nub3NbcGd4YWN0b2ZmXTsKLQkJcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nu b107CisJCXByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAJCWZvciAoaiA9IHB4aWRzIC0g MTsgaiA+PSAwOyBqLS0pCiAJCXsKIAkJCS8qIEZldGNoIHhpZCBqdXN0IG9uY2UgLSBzZWUg R2V0TmV3VHJhbnNhY3Rpb25JZCAqLwpAQCAtMTYyMiw3ICsxNjMyLDYgQEAgVHJhbnNhY3Rp b25JZElzSW5Qcm9ncmVzcyhUcmFuc2FjdGlvbklkIHhpZCkKIAlyZXR1cm4gZmFsc2U7CiB9 CiAKLQogLyoKICAqIERldGVybWluZSBYSUQgaG9yaXpvbnMuCiAgKgpAQCAtMTc0MCw3ICsx NzQ5LDcgQEAgQ29tcHV0ZVhpZEhvcml6b25zKENvbXB1dGVYaWRIb3Jpem9uc1Jlc3VsdCAq aCkKIAlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5k ZXgrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhd OwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQlQR1BST0MJ ICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAJCWludDgJCXN0YXR1c0ZsYWdzID0g UHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3NbaW5kZXhdOwogCQlUcmFuc2FjdGlvbklkIHhpZDsK IAkJVHJhbnNhY3Rpb25JZCB4bWluOwpAQCAtMjIyNCw3ICsyMjMzLDcgQEAgR2V0U25hcHNo b3REYXRhKFNuYXBzaG90IHNuYXBzaG90KQogCQkJVHJhbnNhY3Rpb25JZCB4aWQgPSBVSU5U MzJfQUNDRVNTX09OQ0Uob3RoZXJfeGlkc1twZ3hhY3RvZmZdKTsKIAkJCXVpbnQ4CQlzdGF0 dXNGbGFnczsKIAotCQkJQXNzZXJ0KGFsbFByb2NzW2FycmF5UC0+cGdwcm9jbm9zW3BneGFj dG9mZl1dLnBneGFjdG9mZiA9PSBwZ3hhY3RvZmYpOworCQkJQXNzZXJ0KGFsbFByb2NzW2Fy cmF5UC0+cGdwcm9jbm9zW3BneGFjdG9mZl1dLT5wZ3hhY3RvZmYgPT0gcGd4YWN0b2ZmKTsK IAogCQkJLyoKIAkJCSAqIElmIHRoZSB0cmFuc2FjdGlvbiBoYXMgbm8gWElEIGFzc2lnbmVk LCB3ZSBjYW4gc2tpcCBpdDsgaXQKQEAgLTIyOTgsNyArMjMwNyw3IEBAIEdldFNuYXBzaG90 RGF0YShTbmFwc2hvdCBzbmFwc2hvdCkKIAkJCQkJaWYgKG5zdWJ4aWRzID4gMCkKIAkJCQkJ ewogCQkJCQkJaW50CQkJcGdwcm9jbm8gPSBwZ3Byb2Nub3NbcGd4YWN0b2ZmXTsKLQkJCQkJ CVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCQkJCQlQR1BST0MJ ICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAKIAkJCQkJCXBnX3JlYWRfYmFycmll cigpOwkvKiBwYWlycyB3aXRoIEdldE5ld1RyYW5zYWN0aW9uSWQgKi8KIApAQCAtMjQ5OSw3 ICsyNTA4LDcgQEAgUHJvY0FycmF5SW5zdGFsbEltcG9ydGVkWG1pbihUcmFuc2FjdGlvbklk IHhtaW4sCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5k ZXgrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhd OwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQlQR1BST0MJ ICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAJCWludAkJCXN0YXR1c0ZsYWdzID0g UHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3NbaW5kZXhdOwogCQlUcmFuc2FjdGlvbklkIHhpZDsK IApAQCAtMjcyNSw3ICsyNzM0LDcgQEAgR2V0UnVubmluZ1RyYW5zYWN0aW9uRGF0YSh2b2lk KQogCQlpZiAoVHJhbnNhY3Rpb25JZFByZWNlZGVzKHhpZCwgb2xkZXN0RGF0YWJhc2VSdW5u aW5nWGlkKSkKIAkJewogCQkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tp bmRleF07Ci0JCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQkJ UEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCiAJCQlpZiAocHJvYy0+ ZGF0YWJhc2VJZCA9PSBNeURhdGFiYXNlSWQpCiAJCQkJb2xkZXN0RGF0YWJhc2VSdW5uaW5n WGlkID0geGlkOwpAQCAtMjc1Niw3ICsyNzY1LDcgQEAgR2V0UnVubmluZ1RyYW5zYWN0aW9u RGF0YSh2b2lkKQogCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVByb2Nz OyBpbmRleCsrKQogCQl7CiAJCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9z W2luZGV4XTsKLQkJCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJ CQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAJCQlpbnQJCQluc3Vi eGlkczsKIAogCQkJLyoKQEAgLTI4NTgsNyArMjg2Nyw3IEBAIEdldE9sZGVzdEFjdGl2ZVRy YW5zYWN0aW9uSWQoYm9vbCBpbkNvbW1pdE9ubHksIGJvb2wgYWxsRGJzKQogCXsKIAkJVHJh bnNhY3Rpb25JZCB4aWQ7CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3Nb aW5kZXhdOwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQlQ R1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAKIAkJLyogRmV0Y2ggeGlk IGp1c3Qgb25jZSAtIHNlZSBHZXROZXdUcmFuc2FjdGlvbklkICovCiAJCXhpZCA9IFVJTlQz Ml9BQ0NFU1NfT05DRShvdGhlcl94aWRzW2luZGV4XSk7CkBAIC0zMDIwLDcgKzMwMjksNyBA QCBHZXRWaXJ0dWFsWElEc0RlbGF5aW5nQ2hrcHQoaW50ICpudnhpZHMsIGludCB0eXBlKQog CWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJvY3M7IGluZGV4KyspCiAJ ewogCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKLQkJUEdQ Uk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJUEdQUk9DCSAgICpwcm9j ID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCiAJCWlmICgocHJvYy0+ZGVsYXlDaGtwdEZsYWdz ICYgdHlwZSkgIT0gMCkKIAkJewpAQCAtMzA2MSw3ICszMDcwLDcgQEAgSGF2ZVZpcnR1YWxY SURzRGVsYXlpbmdDaGtwdChWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqdnhpZHMsIGludCBudnhp ZHMsIGludCB0eXBlKQogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJv Y3M7IGluZGV4KyspCiAJewogCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9z W2luZGV4XTsKLQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJ UEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCQlWaXJ0dWFsVHJhbnNh Y3Rpb25JZCB2eGlkOwogCiAJCUdFVF9WWElEX0ZST01fUEdQUk9DKHZ4aWQsICpwcm9jKTsK QEAgLTMxODksNyArMzE5OCw3IEBAIEJhY2tlbmRQaWRHZXRQcm9jV2l0aExvY2soaW50IHBp ZCkKIAogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJvY3M7IGluZGV4 KyspCiAJewotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbYXJyYXlQLT5wZ3Byb2Nu b3NbaW5kZXhdXTsKKwkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbYXJyYXlQLT5wZ3By b2Nub3NbaW5kZXhdXTsKIAogCQlpZiAocHJvYy0+cGlkID09IHBpZCkKIAkJewpAQCAtMzIz Miw3ICszMjQxLDcgQEAgQmFja2VuZFhpZEdldFBpZChUcmFuc2FjdGlvbklkIHhpZCkKIAkJ aWYgKG90aGVyX3hpZHNbaW5kZXhdID09IHhpZCkKIAkJewogCQkJaW50CQkJcGdwcm9jbm8g PSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0JCQlQR1BST0MJICAgKnByb2MgPSAmYWxs UHJvY3NbcGdwcm9jbm9dOworCQkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9j bm9dOwogCiAJCQlyZXN1bHQgPSBwcm9jLT5waWQ7CiAJCQlicmVhazsKQEAgLTMzMDEsNyAr MzMxMCw3IEBAIEdldEN1cnJlbnRWaXJ0dWFsWElEcyhUcmFuc2FjdGlvbklkIGxpbWl0WG1p biwgYm9vbCBleGNsdWRlWG1pbjAsCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlQ LT5udW1Qcm9jczsgaW5kZXgrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5w Z3Byb2Nub3NbaW5kZXhdOwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9j bm9dOworCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAJCXVpbnQ4 CQlzdGF0dXNGbGFncyA9IFByb2NHbG9iYWwtPnN0YXR1c0ZsYWdzW2luZGV4XTsKIAogCQlp ZiAocHJvYyA9PSBNeVByb2MpCkBAIC0zNDAzLDcgKzM0MTIsNyBAQCBHZXRDb25mbGljdGlu Z1ZpcnR1YWxYSURzKFRyYW5zYWN0aW9uSWQgbGltaXRYbWluLCBPaWQgZGJPaWQpCiAJZm9y IChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5kZXgrKykKIAl7CiAJ CWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwotCQlQR1BST0MJ ICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQlQR1BST0MJICAgKnByb2MgPSBh bGxQcm9jc1twZ3Byb2Nub107CiAKIAkJLyogRXhjbHVkZSBwcmVwYXJlZCB0cmFuc2FjdGlv bnMgKi8KIAkJaWYgKHByb2MtPnBpZCA9PSAwKQpAQCAtMzQ2OCw3ICszNDc3LDcgQEAgU2ln bmFsVmlydHVhbFRyYW5zYWN0aW9uKFZpcnR1YWxUcmFuc2FjdGlvbklkIHZ4aWQsIFByb2NT aWduYWxSZWFzb24gc2lnbW9kZSwKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAt Pm51bVByb2NzOyBpbmRleCsrKQogCXsKIAkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBn cHJvY25vc1tpbmRleF07Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nu b107CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAkJVmlydHVh bFRyYW5zYWN0aW9uSWQgcHJvY3Z4aWQ7CiAKIAkJR0VUX1ZYSURfRlJPTV9QR1BST0MocHJv Y3Z4aWQsICpwcm9jKTsKQEAgLTM1MjMsNyArMzUzMiw3IEBAIE1pbmltdW1BY3RpdmVCYWNr ZW5kcyhpbnQgbWluKQogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJv Y3M7IGluZGV4KyspCiAJewogCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9z W2luZGV4XTsKLQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJ UEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCiAJCS8qCiAJCSAqIFNp bmNlIHdlJ3JlIG5vdCBob2xkaW5nIGEgbG9jaywgbmVlZCB0byBiZSBwcmVwYXJlZCB0byBk ZWFsIHdpdGgKQEAgLTM1NjksNyArMzU3OCw3IEBAIENvdW50REJCYWNrZW5kcyhPaWQgZGF0 YWJhc2VpZCkKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBp bmRleCsrKQogCXsKIAkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRl eF07Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCVBHUFJP QwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAogCQlpZiAocHJvYy0+cGlkID09 IDApCiAJCQljb250aW51ZTsJCQkvKiBkbyBub3QgY291bnQgcHJlcGFyZWQgeGFjdHMgKi8K QEAgLTM1OTgsNyArMzYwNyw3IEBAIENvdW50REJDb25uZWN0aW9ucyhPaWQgZGF0YWJhc2Vp ZCkKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRleCsr KQogCXsKIAkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0J CVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCVBHUFJPQwkgICAq cHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAogCQlpZiAocHJvYy0+cGlkID09IDApCiAJ CQljb250aW51ZTsJCQkvKiBkbyBub3QgY291bnQgcHJlcGFyZWQgeGFjdHMgKi8KQEAgLTM2 MjksNyArMzYzOCw3IEBAIENhbmNlbERCQmFja2VuZHMoT2lkIGRhdGFiYXNlaWQsIFByb2NT aWduYWxSZWFzb24gc2lnbW9kZSwgYm9vbCBjb25mbGljdFBlbmRpbmcpCiAJZm9yIChpbmRl eCA9IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5kZXgrKykKIAl7CiAJCWludAkJ CXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwotCQlQR1BST0MJICAgKnBy b2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9j c1twZ3Byb2Nub107CiAKIAkJaWYgKGRhdGFiYXNlaWQgPT0gSW52YWxpZE9pZCB8fCBwcm9j LT5kYXRhYmFzZUlkID09IGRhdGFiYXNlaWQpCiAJCXsKQEAgLTM2NzAsNyArMzY3OSw3IEBA IENvdW50VXNlckJhY2tlbmRzKE9pZCByb2xlaWQpCiAJZm9yIChpbmRleCA9IDA7IGluZGV4 IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5kZXgrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0g YXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJv Y3NbcGdwcm9jbm9dOworCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107 CiAKIAkJaWYgKHByb2MtPnBpZCA9PSAwKQogCQkJY29udGludWU7CQkJLyogZG8gbm90IGNv dW50IHByZXBhcmVkIHhhY3RzICovCkBAIC0zNzMzLDcgKzM3NDIsNyBAQCBDb3VudE90aGVy REJCYWNrZW5kcyhPaWQgZGF0YWJhc2VJZCwgaW50ICpuYmFja2VuZHMsIGludCAqbnByZXBh cmVkKQogCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRl eCsrKQogCQl7CiAJCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4 XTsKLQkJCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCQlQR1BS T0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAJCQl1aW50OAkJc3RhdHVzRmxh Z3MgPSBQcm9jR2xvYmFsLT5zdGF0dXNGbGFnc1tpbmRleF07CiAKIAkJCWlmIChwcm9jLT5k YXRhYmFzZUlkICE9IGRhdGFiYXNlSWQpCkBAIC0zNzk5LDcgKzM4MDgsNyBAQCBUZXJtaW5h dGVPdGhlckRCQmFja2VuZHMoT2lkIGRhdGFiYXNlSWQpCiAJZm9yIChpID0gMDsgaSA8IHBy b2NBcnJheS0+bnVtUHJvY3M7IGkrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQ LT5wZ3Byb2Nub3NbaV07Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nu b107CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAogCQlpZiAo cHJvYy0+ZGF0YWJhc2VJZCAhPSBkYXRhYmFzZUlkKQogCQkJY29udGludWU7CkBAIC01MjI3 LDMgKzUyMzYsMTUgQEAgS25vd25Bc3NpZ25lZFhpZHNSZXNldCh2b2lkKQogCiAJTFdMb2Nr UmVsZWFzZShQcm9jQXJyYXlMb2NrKTsKIH0KKworc3RhdGljIHZvaWQKK0Fzc2VydENoZWNr QWxsUHJvY3Modm9pZCkKK3sKKwlQcm9jQXJyYXlTdHJ1Y3QgKmFycmF5UCA9IHByb2NBcnJh eTsKKwlpbnQJCW51bVByb2NzID0gYXJyYXlQLT5udW1Qcm9jczsKKworCWZvciAoaW50IHBn eGFjdG9mZiA9IDA7IHBneGFjdG9mZiA8IG51bVByb2NzOyBwZ3hhY3RvZmYrKykKKwl7CisJ CUFzc2VydChhbGxQcm9jc1thcnJheVAtPnBncHJvY25vc1twZ3hhY3RvZmZdXS0+cGd4YWN0 b2ZmID09IHBneGFjdG9mZik7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9sbWdyL2xvY2suYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMKaW5k ZXggNGNjN2Y2NDVjMzEuLmQwMWY0ODY4NzZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9z dG9yYWdlL2xtZ3IvbG9jay5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2Nr LmMKQEAgLTI4NzYsNyArMjg3Niw3IEBAIEZhc3RQYXRoVHJhbnNmZXJSZWxhdGlvbkxvY2tz KExvY2tNZXRob2QgbG9ja01ldGhvZFRhYmxlLCBjb25zdCBMT0NLVEFHICpsb2NrdGFnCiAJ ICovCiAJZm9yIChpID0gMDsgaSA8IFByb2NHbG9iYWwtPmFsbFByb2NDb3VudDsgaSsrKQog CXsKLQkJUEdQUk9DCSAgICpwcm9jID0gJlByb2NHbG9iYWwtPmFsbFByb2NzW2ldOworCQlQ R1BST0MJICAgKnByb2MgPSBQcm9jR2xvYmFsLT5hbGxQcm9jc1tpXTsKIAkJdWludDMyCQlq OwogCiAJCUxXTG9ja0FjcXVpcmUoJnByb2MtPmZwSW5mb0xvY2ssIExXX0VYQ0xVU0lWRSk7 CkBAIC0zMTM1LDcgKzMxMzUsNyBAQCBHZXRMb2NrQ29uZmxpY3RzKGNvbnN0IExPQ0tUQUcg KmxvY2t0YWcsIExPQ0tNT0RFIGxvY2ttb2RlLCBpbnQgKmNvdW50cCkKIAkJICovCiAJCWZv ciAoaSA9IDA7IGkgPCBQcm9jR2xvYmFsLT5hbGxQcm9jQ291bnQ7IGkrKykKIAkJewotCQkJ UEdQUk9DCSAgICpwcm9jID0gJlByb2NHbG9iYWwtPmFsbFByb2NzW2ldOworCQkJUEdQUk9D CSAgICpwcm9jID0gUHJvY0dsb2JhbC0+YWxsUHJvY3NbaV07CiAJCQl1aW50MzIJCWo7CiAK IAkJCS8qIEEgYmFja2VuZCBuZXZlciBibG9ja3MgaXRzZWxmICovCkBAIC0zODIyLDcgKzM4 MjIsNyBAQCBHZXRMb2NrU3RhdHVzRGF0YSh2b2lkKQogCSAqLwogCWZvciAoaSA9IDA7IGkg PCBQcm9jR2xvYmFsLT5hbGxQcm9jQ291bnQ7ICsraSkKIAl7Ci0JCVBHUFJPQwkgICAqcHJv YyA9ICZQcm9jR2xvYmFsLT5hbGxQcm9jc1tpXTsKKwkJUEdQUk9DCSAgICpwcm9jID0gUHJv Y0dsb2JhbC0+YWxsUHJvY3NbaV07CiAKIAkJLyogU2tpcCBiYWNrZW5kcyB3aXRoIHBpZD0w LCBhcyB0aGV5IGRvbid0IGhvbGQgZmFzdC1wYXRoIGxvY2tzICovCiAJCWlmIChwcm9jLT5w aWQgPT0gMCkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCmluZGV4IGU5ZWYwZmJmZTMyLi4w OGQxOTAwZmI1OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2Mu YworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCkBAIC0yOSwyMSArMjks MzIgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpZmRlZiBVU0VfTElCTlVN QQorI2luY2x1ZGUgPHNjaGVkLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPHNpZ25hbC5oPgog I2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAKKyNpZmRlZiBV U0VfTElCTlVNQQorI2luY2x1ZGUgPG51bWEuaD4KKyNpbmNsdWRlIDxudW1haWYuaD4KKyNl bmRpZgorCiAjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKICNpbmNsdWRlICJhY2Nlc3Mv dHdvcGhhc2UuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicG9ydC9wZ19u dW1hLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vc2xvdHN5bmMuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zeW5jcmVw LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9jb25kaXRpb25fdmFyaWFibGUuaCIKICNpbmNsdWRl ICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgorI2luY2x1ZGUg InN0b3JhZ2UvcGdfc2htZW0uaCIKICNpbmNsdWRlICJzdG9yYWdlL3Btc2lnbmFsLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXku aCIKQEAgLTc2LDggKzg3LDggQEAgTk9OX0VYRUNfU1RBVElDIHNsb2NrX3QgKlByb2NTdHJ1 Y3RMb2NrID0gTlVMTDsKIAogLyogUG9pbnRlcnMgdG8gc2hhcmVkLW1lbW9yeSBzdHJ1Y3R1 cmVzICovCiBQUk9DX0hEUiAgICpQcm9jR2xvYmFsID0gTlVMTDsKLU5PTl9FWEVDX1NUQVRJ QyBQR1BST0MgKkF1eGlsaWFyeVByb2NzID0gTlVMTDsKLVBHUFJPQwkgICAqUHJlcGFyZWRY YWN0UHJvY3MgPSBOVUxMOworTk9OX0VYRUNfU1RBVElDIFBHUFJPQyAqKkF1eGlsaWFyeVBy b2NzID0gTlVMTDsKK1BHUFJPQwkgICAqKlByZXBhcmVkWGFjdFByb2NzID0gTlVMTDsKIAog c3RhdGljIERlYWRMb2NrU3RhdGUgZGVhZGxvY2tfc3RhdGUgPSBEU19OT1RfWUVUX0NIRUNL RUQ7CiAKQEAgLTkwLDYgKzEwMSwyOSBAQCBzdGF0aWMgdm9pZCBBdXhpbGlhcnlQcm9jS2ls bChpbnQgY29kZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIENoZWNrRGVhZExvY2sodm9p ZCk7CiAKIAorLyogbnVtYmVyIG9mIE5VTUEgbm9kZXMgKGFzIHJldHVybmVkIGJ5IG51bWFf bnVtX2NvbmZpZ3VyZWRfbm9kZXMpICovCitzdGF0aWMgaW50CW51bWFfbm9kZXMgPSAtMTsJ LyogbnVtYmVyIG9mIG5vZGVzIHdoZW4gc2l6aW5nICovCitzdGF0aWMgU2l6ZSBudW1hX3Bh Z2Vfc2l6ZSA9IDA7IC8qIHBhZ2UgdXNlZCB0byBzaXplIHBhcnRpdGlvbnMgKi8KK3N0YXRp YyBib29sIG51bWFfY2FuX3BhcnRpdGlvbiA9IGZhbHNlOyAvKiBjYW4gbWFwIHRvIE5VTUEg bm9kZXM/ICovCitzdGF0aWMgaW50CW51bWFfcHJvY3NfcGVyX25vZGUgPSAtMTsJLyogcGdw cm9jcyBwZXIgbm9kZSAqLworCitzdGF0aWMgdm9pZCBwZ3Byb2NfcGFydGl0aW9uc19wcmVw YXJlKHZvaWQpOworc3RhdGljIGNoYXIgKnBncHJvY19wYXJ0aXRpb25faW5pdChjaGFyICpw dHIsIGludCBudW1fcHJvY3MsCisJCQkJCQkJCSAgIGludCBhbGxwcm9jc19pbmRleCwgaW50 IG5vZGUpOworc3RhdGljIGNoYXIgKmZhc3RwYXRoX3BhcnRpdGlvbl9pbml0KGNoYXIgKnB0 ciwgaW50IG51bV9wcm9jcywKKwkJCQkJCQkJCSBpbnQgYWxscHJvY3NfaW5kZXgsIGludCBu b2RlLAorCQkJCQkJCQkJIFNpemUgZnBMb2NrQml0c1NpemUsIFNpemUgZnBSZWxJZFNpemUp OworCit0eXBlZGVmIHN0cnVjdCBQR1Byb2NQYXJ0aXRpb24KK3sKKwlpbnQJCQludW1fcHJv Y3M7CisJaW50CQkJbnVtYV9ub2RlOworCXZvaWQJICAgKnBncHJvY19wdHI7CisJdm9pZAkg ICAqZmFzdHBhdGhfcHRyOworfSBQR1Byb2NQYXJ0aXRpb247CisKK3N0YXRpYyBQR1Byb2NQ YXJ0aXRpb24gKnBhcnRpdGlvbnMgPSBOVUxMOworCiAvKgogICogUmVwb3J0IHNoYXJlZC1t ZW1vcnkgc3BhY2UgbmVlZGVkIGJ5IFBHUFJPQy4KICAqLwpAQCAtMTAwLDExICsxMzQsMzYg QEAgUEdQcm9jU2htZW1TaXplKHZvaWQpCiAJU2l6ZQkJVG90YWxQcm9jcyA9CiAJCWFkZF9z aXplKE1heEJhY2tlbmRzLCBhZGRfc2l6ZShOVU1fQVVYSUxJQVJZX1BST0NTLCBtYXhfcHJl cGFyZWRfeGFjdHMpKTsKIAorCXNpemUgPSBhZGRfc2l6ZShzaXplLCBDQUNIRUxJTkVBTElH TihtdWxfc2l6ZShUb3RhbFByb2NzLCBzaXplb2YoUEdQUk9DICopKSkpOwogCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShUb3RhbFByb2NzLCBzaXplb2YoUEdQUk9DKSkpOwog CXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShUb3RhbFByb2NzLCBzaXplb2YoKlBy b2NHbG9iYWwtPnhpZHMpKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRv dGFsUHJvY3MsIHNpemVvZigqUHJvY0dsb2JhbC0+c3VieGlkU3RhdGVzKSkpOwogCXNpemUg PSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShUb3RhbFByb2NzLCBzaXplb2YoKlByb2NHbG9i YWwtPnN0YXR1c0ZsYWdzKSkpOwogCisJLyoKKwkgKiBUbyBzdXBwb3J0IE5VTUEgcGFydGl0 aW9uaW5nLCB0aGUgUEdQUk9DIGFycmF5IHdpbGwgYmUgZGl2aWRlZCBpbnRvCisJICogbXVs dGlwbGUgY2h1bmtzIC0gb25lIHBlciBOVU1BIG5vZGUsIGFuZCBvbmUgZXh0cmEgZm9yIGF1 eGlsaWFyeS8yUEMKKwkgKiBlbnRyaWVzICh3aGljaCBhcmUgbm90IGFzc2lnbmVkIHRvIGFu eSBOVU1BIG5vZGUpLgorCSAqCisJICogV2UgY2FuJ3Qgc2ltcGx5IG1hcCBwYWdlcyBvZiBh IHNpbmdsZSBjb250aW51b3VzIGFycmF5LCBiZWNhdXNlIHRoZQorCSAqIFBHUFJPQyBlbnRy aWVzIGFyZSB2ZXJ5IHNtYWxsIGFuZCB0b28gbWFueSBvZiB0aGVtIHdvdWxkIGZpdCBvbiBh CisJICogc2luZ2xlIHBhZ2UgKGF0IGxlYXN0IHdpdGggaHVnZSBwYWdlcykuIEZhciBtb3Jl IHRoYW4gcmVhc29uYWJsZSB2YWx1ZXMKKwkgKiBvZiBtYXhfY29ubmVjdGlvbnMuIFNvIGlu c3RlYWQgd2UgY3V0IHRoZSBhcnJheSBpbnRvIHNlcGFyYXRlIHBpZWNlcworCSAqIGZvciBl YWNoIG5vZGUuCisJICoKKwkgKiBFYWNoIHBpZWNlIG1heSBuZWVkIHVwIHRvIG9uZSBtZW1v cnkgcGFnZSBvZiBwYWRkaW5nLCB0byBtYWtlIGl0CisJICogYWxpZ25lZCB3aXRoIG1lbW9y eSBwYWdlIChmb3IgTlVNQSksIFNvIHdlIGp1c3QgYWRkIGEgcGFnZSAtIGl0J3MgYSBiaXQK KwkgKiB3YXN0ZWZ1bCwgYnV0IHNob3VsZCBub3QgbWF0dGVyIG11Y2ggLSBOVU1BIGlzIG1l YW50IGZvciBsYXJnZSBib3hlcywKKwkgKiBzbyBhIGNvdXBsZSBwYWdlcyBpcyBuZWdsaWdp YmxlLgorCSAqCisJICogV2Ugb25seSBkbyB0aGlzIHdpdGggTlVNQSBwYXJ0aXRpb25pbmcu IFdpdGggdGhlIEdVQyBkaXNhYmxlZCwgb3Igd2hlbgorCSAqIHdlIGZpbmQgd2UgY2FuJ3Qg ZG8gdGhhdCBmb3Igc29tZSByZWFzb24sIHdlIGp1c3QgYWxsb2NhdGUgdGhlIFBHUFJPQwor CSAqIGFycmF5IGFzIGEgc2luZ2xlIGNodW5rLiBUaGlzIGlzIGRldGVybWluZWQgYnkgdGhl IGVhcmxpZXIgY2FsbCB0bworCSAqIHBncHJvY19wYXJ0aXRpb25zX3ByZXBhcmUoKS4KKwkg KgorCSAqIFhYWCBJdCBtaWdodCBiZSBtb3JlIHBhaW5mdWwgd2l0aCB2ZXJ5IGxhcmdlIGh1 Z2UgcGFnZXMgKGUuZy4gMUdCKS4KKwkgKi8KKwogCXJldHVybiBzaXplOwogfQogCkBAIC0x MjksNiArMTg4LDYwIEBAIEZhc3RQYXRoTG9ja1NobWVtU2l6ZSh2b2lkKQogCiAJc2l6ZSA9 IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIChmcExvY2tCaXRzU2l6ZSAr IGZwUmVsSWRTaXplKSkpOwogCisJLyoKKwkgKiBXaGVuIGFwcGx5aW5nIE5VTUEgdG8gdGhl IGZhc3QtcGF0aCBsb2Nrcywgd2UgZm9sbG93IHRoZSBzYW1lIGxvZ2ljIGFzCisJICogZm9y IFBHUFJPQyBlbnRyaWVzLiBTZWUgdGhlIGNvbW1lbnRzIGluIFBHUHJvY1NobWVtU2l6ZSgp LgorCSAqCisJICogSWYgUEdQUk9DIHBhcnRpdGlvbmluZyBpcyBlbmFibGVkLCBhbmQgd2Ug ZGVjaWRlZCBpdCdzIHBvc3NpYmxlLCB3ZQorCSAqIG5lZWQgdG8gYWRkIG9uZSBtZW1vcnkg cGFnZSBwZXIgTlVNQSBub2RlIChhbmQgb25lIGZvciBhdXhpbGlhcnkvMlBDCisJICogcHJv Y2Vzc2VzKSB0byBhbGxvdyBwcm9wZXIgYWxpZ25tZW50LgorCSAqCisJICogWFhYIFRoaXMg aXMgYSBhIGJpdCB3YXN0ZWZ1bCwgYmVjYXVzZSBpdCBtaWdodCBhY3R1YWxseSBhZGQgcGFn ZXMgZXZlbgorCSAqIHdoZW4gbm90IHN0cmljdGx5IG5lZWRlZCAoaWYgaXQncyBhbHJlYWR5 IGFsaWduZWQpLiBBbmQgd2UgYWx3YXlzCisJICogYXNzdW1lIHdlJ2xsIGFkZCBhIHdob2xl IHBhZ2UsIGV2ZW4gaWYgdGhlIGFsaWdubWVudCBuZWVkcyBvbmx5IGxlc3MKKwkgKiBtZW1v cnkuCisJICovCisJaWYgKCgobnVtYV9mbGFncyAmIE5VTUFfUFJPQ1MpICE9IDApICYmIG51 bWFfY2FuX3BhcnRpdGlvbikKKwl7CisJCUFzc2VydChudW1hX25vZGVzID4gMCk7CisJCXNp emUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZSgobnVtYV9ub2RlcyArIDEpLCBudW1hX3Bh Z2Vfc2l6ZSkpOworCX0KKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgU2l6ZQorUEdQ cm9jUGFydGl0aW9uc1NobWVtU2l6ZSh2b2lkKQoreworCVNpemUJCXNpemUgPSAwOworCisJ LyoKKwkgKiBJZiBQR1BST0MgcGFydGl0aW9uaW5nIGlzIGVuYWJsZWQsIGFuZCB3ZSBkZWNp ZGVkIGl0J3MgcG9zc2libGUsIHdlCisJICogbmVlZCB0byBhZGQgb25lIG1lbW9yeSBwYWdl IHBlciBOVU1BIG5vZGUgKGFuZCBvbmUgZm9yIGF1eGlsaWFyeS8yUEMKKwkgKiBwcm9jZXNz ZXMpIHRvIGFsbG93IHByb3BlciBhbGlnbm1lbnQuCisJICoKKwkgKiBYWFggVGhpcyBpcyBh IGEgYml0IHdhc3RlZnVsLCBiZWNhdXNlIGl0IG1pZ2h0IGFjdHVhbGx5IGFkZCBwYWdlcyBl dmVuCisJICogd2hlbiBub3Qgc3RyaWN0bHkgbmVlZGVkIChpZiBpdCdzIGFscmVhZHkgYWxp Z25lZCkuIEFuZCB3ZSBhbHdheXMKKwkgKiBhc3N1bWUgd2UnbGwgYWRkIGEgd2hvbGUgcGFn ZSwgZXZlbiBpZiB0aGUgYWxpZ25tZW50IG5lZWRzIG9ubHkgbGVzcworCSAqIG1lbW9yeS4K KwkgKi8KKwlpZiAoKChudW1hX2ZsYWdzICYgTlVNQV9QUk9DUykgIT0gMCkgJiYgbnVtYV9j YW5fcGFydGl0aW9uKQorCXsKKwkJQXNzZXJ0KG51bWFfbm9kZXMgPiAwKTsKKwkJc2l6ZSA9 IGFkZF9zaXplKHNpemUsIG11bF9zaXplKChudW1hX25vZGVzICsgMSksIG51bWFfcGFnZV9z aXplKSk7CisKKwkJLyoKKwkJICogQWxzbyBhY2NvdW50IGZvciBhIHNtYWxsIHJlZ2lzdHJ5 IG9mIHBhcnRpdGlvbnMsIGEgc2ltcGxlIGFycmF5IG9mCisJCSAqIHBhcnRpdGlvbnMgYXQg dGhlIGJlZ2lubmluZy4KKwkJICovCisJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6 ZSgobnVtYV9ub2RlcyArIDEpLCBzaXplb2YoUEdQcm9jUGFydGl0aW9uKSkpOworCX0KKwll bHNlCisJeworCQkvKiBvdGhlcndpc2UgYWRkIG9ubHkgYSB0aW55IHJlZ2lzdHJ5LCB3aXRo IGEgc2luZ2xlIHBhcnRpdGlvbiAqLworCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgc2l6ZW9m KFBHUHJvY1BhcnRpdGlvbikpOworCX0KKwogCXJldHVybiBzaXplOwogfQogCkBAIC0xNDAs MTIgKzI1MywxNiBAQCBQcm9jR2xvYmFsU2htZW1TaXplKHZvaWQpCiB7CiAJU2l6ZQkJc2l6 ZSA9IDA7CiAKKwkvKiBjYWxjdWxhdGUgcGFydGl0aW9uIGluZm8gZm9yIHBncHJvYyBlbnRy aWVzIGV0YyAqLworCXBncHJvY19wYXJ0aXRpb25zX3ByZXBhcmUoKTsKKwogCS8qIFByb2NH bG9iYWwgKi8KIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgc2l6ZW9mKFBST0NfSERSKSk7CiAJ c2l6ZSA9IGFkZF9zaXplKHNpemUsIHNpemVvZihzbG9ja190KSk7CiAKIAlzaXplID0gYWRk X3NpemUoc2l6ZSwgUEdQcm9jU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBGYXN0UGF0aExvY2tTaG1lbVNpemUoKSk7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFBH UHJvY1BhcnRpdGlvbnNTaG1lbVNpemUoKSk7CiAKIAlyZXR1cm4gc2l6ZTsKIH0KQEAgLTE5 MSw3ICszMDgsNyBAQCBQcm9jR2xvYmFsU2VtYXModm9pZCkKIHZvaWQKIEluaXRQcm9jR2xv YmFsKHZvaWQpCiB7Ci0JUEdQUk9DCSAgICpwcm9jczsKKwlQR1BST0MJICAqKnByb2NzOwog CWludAkJCWksCiAJCQkJajsKIAlib29sCQlmb3VuZDsKQEAgLTIxMCw2ICszMjcsOSBAQCBJ bml0UHJvY0dsb2JhbCh2b2lkKQogCQlTaG1lbUluaXRTdHJ1Y3QoIlByb2MgSGVhZGVyIiwg c2l6ZW9mKFBST0NfSERSKSwgJmZvdW5kKTsKIAlBc3NlcnQoIWZvdW5kKTsKIAorCS8qIFhY WCBjYWxsIGFnYWluLCBFWEVDX0JBQ0tFTkQgbWF5IG5vdCBzZWUgdGhlIGFscmVhZHkgY29t cHV0ZWQgdmFsdWUgKi8KKwlwZ3Byb2NfcGFydGl0aW9uc19wcmVwYXJlKCk7CisKIAkvKgog CSAqIEluaXRpYWxpemUgdGhlIGRhdGEgc3RydWN0dXJlcy4KIAkgKi8KQEAgLTIyNCw2ICsz NDQsMTUgQEAgSW5pdFByb2NHbG9iYWwodm9pZCkKIAlwZ19hdG9taWNfaW5pdF91MzIoJlBy b2NHbG9iYWwtPnByb2NBcnJheUdyb3VwRmlyc3QsIElOVkFMSURfUFJPQ19OVU1CRVIpOwog CXBnX2F0b21pY19pbml0X3UzMigmUHJvY0dsb2JhbC0+Y2xvZ0dyb3VwRmlyc3QsIElOVkFM SURfUFJPQ19OVU1CRVIpOwogCisJLyogUEdQUk9DIHBhcnRpdGlvbiByZWdpc3RyeSAqLwor CXJlcXVlc3RTaXplID0gUEdQcm9jUGFydGl0aW9uc1NobWVtU2l6ZSgpOworCisJcHRyID0g U2htZW1Jbml0U3RydWN0KCJQR1BST0MgcGFydGl0aW9ucyIsCisJCQkJCQkgIHJlcXVlc3RT aXplLAorCQkJCQkJICAmZm91bmQpOworCisJcGFydGl0aW9ucyA9IChQR1Byb2NQYXJ0aXRp b24gKikgcHRyOworCiAJLyoKIAkgKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYWxsIHRoZSBQ R1BST0Mgc3RydWN0dXJlcyB3ZSdsbCBuZWVkLiAgVGhlcmUgYXJlCiAJICogc2l4IHNlcGFy YXRlIGNvbnN1bWVyczogKDEpIG5vcm1hbCBiYWNrZW5kcywgKDIpIGF1dG92YWN1dW0gd29y a2VycyBhbmQKQEAgLTI0MSwxOSArMzcwLDEwNCBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQog CiAJTWVtU2V0KHB0ciwgMCwgcmVxdWVzdFNpemUpOwogCi0JcHJvY3MgPSAoUEdQUk9DICop IHB0cjsKLQlwdHIgPSAoY2hhciAqKSBwdHIgKyBUb3RhbFByb2NzICogc2l6ZW9mKFBHUFJP Qyk7CisJLyogYWxscHJvY3MgKGFycmF5IG9mIHBvaW50ZXJzIHRvIFBHUFJPQyBlbnRyaWVz KSAqLworCXByb2NzID0gKFBHUFJPQyAqKikgcHRyOworCXB0ciA9IChjaGFyICopIHB0ciAr IENBQ0hFTElORUFMSUdOKFRvdGFsUHJvY3MgKiBzaXplb2YoUEdQUk9DICopKTsKIAogCVBy b2NHbG9iYWwtPmFsbFByb2NzID0gcHJvY3M7CiAJLyogWFhYIGFsbFByb2NDb3VudCBpc24n dCByZWFsbHkgYWxsIG9mIHRoZW07IGl0IGV4Y2x1ZGVzIHByZXBhcmVkIHhhY3RzICovCiAJ UHJvY0dsb2JhbC0+YWxsUHJvY0NvdW50ID0gTWF4QmFja2VuZHMgKyBOVU1fQVVYSUxJQVJZ X1BST0NTOwogCisJLyoKKwkgKiBJZiBOVU1BIHBhcnRpdGlvbmluZyBpcyBlbmFibGVkLCBh bmQgd2UgZGVjaWRlZCB3ZSBhY3R1YWxseSBjYW4gZG8gdGhlCisJICogcGFydGl0aW9uaW5n LCBhbGxvY2F0ZSB0aGUgY2h1bmtzLgorCSAqCisJICogT3RoZXJ3aXNlIHdlJ2xsIGFsbG9j YXRlIGEgc2luZ2xlIGFycmF5IGZvciBldmVyeXRoaW5nLiBJdCdzIG5vdCBxdWl0ZQorCSAq IHdoYXQgd2UgZGlkIHdpdGhvdXQgTlVNQSwgYmVjYXVzZSB0aGVyZSdzIGFuIGV4dHJhIGxl dmVsIG9mCisJICogaW5kaXJlY3Rpb24sIGJ1dCBpdCdzIHRoZSBiZXN0IHdlIGNhbiBkby4K KwkgKi8KKwlpZiAoKChudW1hX2ZsYWdzICYgTlVNQV9QUk9DUykgIT0gMCkgJiYgbnVtYV9j YW5fcGFydGl0aW9uKQorCXsKKwkJaW50CQkJbm9kZV9wcm9jczsKKwkJaW50CQkJdG90YWxf cHJvY3MgPSAwOworCisJCUFzc2VydChudW1hX3Byb2NzX3Blcl9ub2RlID4gMCk7CisJCUFz c2VydChudW1hX25vZGVzID4gMCk7CisKKwkJLyoKKwkJICogTm93IGluaXRpYWxpemUgdGhl IFBHUFJPQyBwYXJ0aXRpb24gcmVnaXN0cnkgd2l0aCBvbmUgcGFydGl0aW9uCisJCSAqIHBl ciBOVU1BIG5vZGUgKGFuZCB0aGVuIG9uZSBleHRyYSBwYXJ0aXRpb24gZm9yIGF1eGlsaWFy eSBwcm9jcykuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbnVtYV9ub2RlczsgaSsrKQor CQl7CisJCQkvKiB0aGUgbGFzdCBOVU1BIG5vZGUgbWF5IGdldCBmZXdlciBQR1BST0MgZW50 cmllcywgYnV0IG1laCAqLworCQkJbm9kZV9wcm9jcyA9IE1pbihudW1hX3Byb2NzX3Blcl9u b2RlLCBNYXhCYWNrZW5kcyAtIHRvdGFsX3Byb2NzKTsKKworCQkJLyogbWFrZSBzdXJlIHRv IGFsaWduIHRoZSBQR1BST0MgYXJyYXkgdG8gbWVtb3J5IHBhZ2UgKi8KKwkJCXB0ciA9IChj aGFyICopIFRZUEVBTElHTihudW1hX3BhZ2Vfc2l6ZSwgcHRyKTsKKworCQkJLyogZmlsbCBp biB0aGUgcGFydGl0aW9uIGluZm8gKi8KKwkJCXBhcnRpdGlvbnNbaV0ubnVtX3Byb2NzID0g bm9kZV9wcm9jczsKKwkJCXBhcnRpdGlvbnNbaV0ubnVtYV9ub2RlID0gaTsKKwkJCXBhcnRp dGlvbnNbaV0ucGdwcm9jX3B0ciA9IHB0cjsKKworCQkJcHRyID0gcGdwcm9jX3BhcnRpdGlv bl9pbml0KHB0ciwgbm9kZV9wcm9jcywgdG90YWxfcHJvY3MsIGkpOworCisJCQl0b3RhbF9w cm9jcyArPSBub2RlX3Byb2NzOworCisJCQkvKiBkb24ndCB1bmRlcmZsb3cvb3ZlcmZsb3cg dGhlIGFsbG9jYXRpb24gKi8KKwkJCUFzc2VydCgocHRyID4gKGNoYXIgKikgcHJvY3MpICYm IChwdHIgPD0gKGNoYXIgKikgcHJvY3MgKyByZXF1ZXN0U2l6ZSkpOworCQl9CisKKwkJQXNz ZXJ0KHRvdGFsX3Byb2NzID09IE1heEJhY2tlbmRzKTsKKworCQkvKgorCQkgKiBBbHNvIGJ1 aWxkIFBHUFJPQyBlbnRyaWVzIGZvciBhdXhpbGlhcnkgcHJvY3MgLyBwcmVwYXJlZCB4YWN0 cyAod2UKKwkJICogaG93ZXZlciBkb24ndCBhc3NpZ24gdGhvc2UgdG8gYW55IE5VTUEgbm9k ZSkuCisJCSAqLworCQlub2RlX3Byb2NzID0gKE5VTV9BVVhJTElBUllfUFJPQ1MgKyBtYXhf cHJlcGFyZWRfeGFjdHMpOworCisJCS8qIG1ha2Ugc3VyZSB0byBhbGlnbiB0aGUgUEdQUk9D IGFycmF5IHRvIG1lbW9yeSBwYWdlICovCisJCXB0ciA9IChjaGFyICopIFRZUEVBTElHTihu dW1hX3BhZ2Vfc2l6ZSwgcHRyKTsKKworCQkvKiBmaWxsIGluIHRoZSBwYXJ0aXRpb24gaW5m byAqLworCQlwYXJ0aXRpb25zW251bWFfbm9kZXNdLm51bV9wcm9jcyA9IG5vZGVfcHJvY3M7 CisJCXBhcnRpdGlvbnNbbnVtYV9ub2Rlc10ubnVtYV9ub2RlID0gLTE7CisJCXBhcnRpdGlv bnNbbnVtYV9ub2Rlc10ucGdwcm9jX3B0ciA9IHB0cjsKKworCQlwdHIgPSBwZ3Byb2NfcGFy dGl0aW9uX2luaXQocHRyLCBub2RlX3Byb2NzLCB0b3RhbF9wcm9jcywgLTEpOworCisJCXRv dGFsX3Byb2NzICs9IG5vZGVfcHJvY3M7CisKKwkJLyogZG9uJ3Qgb3ZlcmZsb3cgdGhlIGFs bG9jYXRpb24gKi8KKwkJQXNzZXJ0KChwdHIgPiAoY2hhciAqKSBwcm9jcykgJiYgKHB0ciA8 PSAoY2hhciAqKSBwcm9jcyArIHJlcXVlc3RTaXplKSk7CisKKwkJQXNzZXJ0KHRvdGFsX3By b2NzID0gVG90YWxQcm9jcyk7CisJfQorCWVsc2UKKwl7CisJCS8qIGp1c3QgdHJlYXQgZXZl cnl0aGluZyBhcyBhIHNpbmdsZSBhcnJheSwgd2l0aCBubyBhbGlnbm1lbnQgKi8KKwkJcHRy ID0gcGdwcm9jX3BhcnRpdGlvbl9pbml0KHB0ciwgVG90YWxQcm9jcywgMCwgLTEpOworCisJ CS8qIGZpbGwgaW4gdGhlIHBhcnRpdGlvbiBpbmZvICovCisJCXBhcnRpdGlvbnNbMF0ubnVt X3Byb2NzID0gVG90YWxQcm9jczsKKwkJcGFydGl0aW9uc1swXS5udW1hX25vZGUgPSAtMTsK KwkJcGFydGl0aW9uc1swXS5wZ3Byb2NfcHRyID0gcHRyOworCisJCS8qIGRvbid0IG92ZXJm bG93IHRoZSBhbGxvY2F0aW9uICovCisJCUFzc2VydCgocHRyID4gKGNoYXIgKikgcHJvY3Mp ICYmIChwdHIgPD0gKGNoYXIgKikgcHJvY3MgKyByZXF1ZXN0U2l6ZSkpOworCX0KKwogCS8q CiAJICogQWxsb2NhdGUgYXJyYXlzIG1pcnJvcmluZyBQR1BST0MgZmllbGRzIGluIGEgZGVu c2UgbWFubmVyLiBTZWUKIAkgKiBQUk9DX0hEUi4KIAkgKgogCSAqIFhYWDogSXQgbWlnaHQg bWFrZSBzZW5zZSB0byBpbmNyZWFzZSBwYWRkaW5nIGZvciB0aGVzZSBhcnJheXMsIGdpdmVu CiAJICogaG93IGhvdGx5IHRoZXkgYXJlIGFjY2Vzc2VkLgorCSAqCisJICogWFhYIFdvdWxk IGl0IG1ha2Ugc2Vuc2UgdG8gTlVNQS1wYXJ0aXRpb24gdGhlc2UgY2h1bmtzIHRvbywgc29t ZWhvdz8KKwkgKiBCdXQgdGhvc2UgYXJyYXlzIGFyZSB0aW55LCBmaXQgaW50byBhIHNpbmds ZSBtZW1vcnkgcGFnZSwgc28gd291bGQgbmVlZAorCSAqIHRvIGJlIG1hZGUgbW9yZSBjb21w bGV4LiBOb3Qgc3VyZS4KIAkgKi8KIAlQcm9jR2xvYmFsLT54aWRzID0gKFRyYW5zYWN0aW9u SWQgKikgcHRyOwogCXB0ciA9IChjaGFyICopIHB0ciArIChUb3RhbFByb2NzICogc2l6ZW9m KCpQcm9jR2xvYmFsLT54aWRzKSk7CkBAIC0yODYsMjQgKzUwMCw5MiBAQCBJbml0UHJvY0ds b2JhbCh2b2lkKQogCS8qIEZvciBhc3NlcnRzIGNoZWNraW5nIHdlIGRpZCBub3Qgb3ZlcmZs b3cuICovCiAJZnBFbmRQdHIgPSBmcFB0ciArIHJlcXVlc3RTaXplOwogCi0JZm9yIChpID0g MDsgaSA8IFRvdGFsUHJvY3M7IGkrKykKKwkvKgorCSAqIE1pbWljIHRoZSBsb2dpYyB3ZSB1 c2VkIHRvIHBhcnRpdGlvbiBQR1BST0MgZW50cmllcy4KKwkgKi8KKworCS8qCisJICogSWYg TlVNQSBwYXJ0aXRpb25pbmcgaXMgZW5hYmxlZCwgYW5kIHdlIGRlY2lkZWQgd2UgYWN0dWFs bHkgY2FuIGRvIHRoZQorCSAqIHBhcnRpdGlvbmluZywgYWxsb2NhdGUgdGhlIGNodW5rcy4K KwkgKgorCSAqIE90aGVyd2lzZSB3ZSdsbCBhbGxvY2F0ZSBhIHNpbmdsZSBhcnJheSBmb3Ig ZXZlcnl0aGluZy4gSXQncyBub3QgcXVpdGUKKwkgKiB3aGF0IHdlIGRpZCB3aXRob3V0IE5V TUEsIGJlY2F1c2UgdGhlcmUncyBhbiBleHRyYSBsZXZlbCBvZgorCSAqIGluZGlyZWN0aW9u LCBidXQgaXQncyB0aGUgYmVzdCB3ZSBjYW4gZG8uCisJICovCisJaWYgKCgobnVtYV9mbGFn cyAmIE5VTUFfUFJPQ1MpICE9IDApICYmIG51bWFfY2FuX3BhcnRpdGlvbikKIAl7Ci0JCVBH UFJPQwkgICAqcHJvYyA9ICZwcm9jc1tpXTsKKwkJaW50CQkJbm9kZV9wcm9jczsKKwkJaW50 CQkJdG90YWxfcHJvY3MgPSAwOworCisJCUFzc2VydChudW1hX3Byb2NzX3Blcl9ub2RlID4g MCk7CisKKwkJLyogYnVpbGQgUEdQUk9DIGVudHJpZXMgZm9yIE5VTUEgbm9kZXMgKi8KKwkJ Zm9yIChpID0gMDsgaSA8IG51bWFfbm9kZXM7IGkrKykKKwkJeworCQkJLyogdGhlIGxhc3Qg TlVNQSBub2RlIG1heSBnZXQgZmV3ZXIgUEdQUk9DIGVudHJpZXMsIGJ1dCBtZWggKi8KKwkJ CW5vZGVfcHJvY3MgPSBNaW4obnVtYV9wcm9jc19wZXJfbm9kZSwgTWF4QmFja2VuZHMgLSB0 b3RhbF9wcm9jcyk7CiAKLQkJLyogQ29tbW9uIGluaXRpYWxpemF0aW9uIGZvciBhbGwgUEdQ Uk9DcywgcmVnYXJkbGVzcyBvZiB0eXBlLiAqLworCQkJLyogbWFrZSBzdXJlIHRvIGFsaWdu IHRoZSBQR1BST0MgYXJyYXkgdG8gbWVtb3J5IHBhZ2UgKi8KKwkJCWZwUHRyID0gKGNoYXIg KikgVFlQRUFMSUdOKG51bWFfcGFnZV9zaXplLCBmcFB0cik7CisKKwkJCS8qIHJlbWVtYmVy IHRoaXMgcG9pbnRlciB0b28gKi8KKwkJCXBhcnRpdGlvbnNbaV0uZmFzdHBhdGhfcHRyID0g ZnBQdHI7CisJCQlBc3NlcnQobm9kZV9wcm9jcyA9PSBwYXJ0aXRpb25zW2ldLm51bV9wcm9j cyk7CisKKwkJCWZwUHRyID0gZmFzdHBhdGhfcGFydGl0aW9uX2luaXQoZnBQdHIsIG5vZGVf cHJvY3MsIHRvdGFsX3Byb2NzLCBpLAorCQkJCQkJCQkJCQlmcExvY2tCaXRzU2l6ZSwgZnBS ZWxJZFNpemUpOworCisJCQl0b3RhbF9wcm9jcyArPSBub2RlX3Byb2NzOworCisJCQkvKiBk b24ndCBvdmVyZmxvdyB0aGUgYWxsb2NhdGlvbiAqLworCQkJQXNzZXJ0KGZwUHRyIDw9IGZw RW5kUHRyKTsKKwkJfQorCisJCUFzc2VydCh0b3RhbF9wcm9jcyA9PSBNYXhCYWNrZW5kcyk7 CiAKIAkJLyoKLQkJICogU2V0IHRoZSBmYXN0LXBhdGggbG9jayBhcnJheXMsIGFuZCBtb3Zl IHRoZSBwb2ludGVyLiBXZSBpbnRlcmxlYXZlCi0JCSAqIHRoZSB0d28gYXJyYXlzLCB0byAo aG9wZWZ1bGx5KSBnZXQgc29tZSBsb2NhbGl0eSBmb3IgZWFjaCBiYWNrZW5kLgorCQkgKiBB bHNvIGJ1aWxkIFBHUFJPQyBlbnRyaWVzIGZvciBhdXhpbGlhcnkgcHJvY3MgLyBwcmVwYXJl ZCB4YWN0cyAod2UKKwkJICogaG93ZXZlciBkb24ndCBhc3NpZ24gdGhvc2UgdG8gYW55IE5V TUEgbm9kZSkuCiAJCSAqLwotCQlwcm9jLT5mcExvY2tCaXRzID0gKHVpbnQ2NCAqKSBmcFB0 cjsKLQkJZnBQdHIgKz0gZnBMb2NrQml0c1NpemU7CisJCW5vZGVfcHJvY3MgPSAoTlVNX0FV WElMSUFSWV9QUk9DUyArIG1heF9wcmVwYXJlZF94YWN0cyk7CisKKwkJLyogbWFrZSBzdXJl IHRvIGFsaWduIHRoZSBQR1BST0MgYXJyYXkgdG8gbWVtb3J5IHBhZ2UgKi8KKwkJZnBQdHIg PSAoY2hhciAqKSBUWVBFQUxJR04obnVtYV9wYWdlX3NpemUsIGZwUHRyKTsKKworCQkvKiBy ZW1lbWJlciB0aGlzIHBvaW50ZXIgdG9vICovCisJCXBhcnRpdGlvbnNbbnVtYV9ub2Rlc10u ZmFzdHBhdGhfcHRyID0gZnBQdHI7CisJCUFzc2VydChub2RlX3Byb2NzID09IHBhcnRpdGlv bnNbbnVtYV9ub2Rlc10ubnVtX3Byb2NzKTsKIAotCQlwcm9jLT5mcFJlbElkID0gKE9pZCAq KSBmcFB0cjsKLQkJZnBQdHIgKz0gZnBSZWxJZFNpemU7CisJCWZwUHRyID0gZmFzdHBhdGhf cGFydGl0aW9uX2luaXQoZnBQdHIsIG5vZGVfcHJvY3MsIHRvdGFsX3Byb2NzLCAtMSwKKwkJ CQkJCQkJCQlmcExvY2tCaXRzU2l6ZSwgZnBSZWxJZFNpemUpOwogCisJCXRvdGFsX3Byb2Nz ICs9IG5vZGVfcHJvY3M7CisKKwkJLyogZG9uJ3Qgb3ZlcmZsb3cgdGhlIGFsbG9jYXRpb24g Ki8KIAkJQXNzZXJ0KGZwUHRyIDw9IGZwRW5kUHRyKTsKIAorCQlBc3NlcnQodG90YWxfcHJv Y3MgPSBUb3RhbFByb2NzKTsKKwl9CisJZWxzZQorCXsKKwkJLyogcmVtZW1iZXIgdGhpcyBw b2ludGVyIHRvbyAqLworCQlwYXJ0aXRpb25zWzBdLmZhc3RwYXRoX3B0ciA9IGZwUHRyOwor CQlBc3NlcnQoVG90YWxQcm9jcyA9PSBwYXJ0aXRpb25zWzBdLm51bV9wcm9jcyk7CisKKwkJ LyoganVzdCB0cmVhdCBldmVyeXRoaW5nIGFzIGEgc2luZ2xlIGFycmF5LCB3aXRoIG5vIGFs aWdubWVudCAqLworCQlmcFB0ciA9IGZhc3RwYXRoX3BhcnRpdGlvbl9pbml0KGZwUHRyLCBU b3RhbFByb2NzLCAwLCAtMSwKKwkJCQkJCQkJCQlmcExvY2tCaXRzU2l6ZSwgZnBSZWxJZFNp emUpOworCisJCS8qIGRvbid0IG92ZXJmbG93IHRoZSBhbGxvY2F0aW9uICovCisJCUFzc2Vy dChmcFB0ciA8PSBmcEVuZFB0cik7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFRvdGFsUHJv Y3M7IGkrKykKKwl7CisJCVBHUFJPQwkgICAqcHJvYyA9IHByb2NzW2ldOworCisJCUFzc2Vy dChwcm9jLT5wcm9jbnVtYmVyID09IGkpOworCiAJCS8qCiAJCSAqIFNldCB1cCBwZXItUEdQ Uk9DIHNlbWFwaG9yZSwgbGF0Y2gsIGFuZCBmcEluZm9Mb2NrLiAgUHJlcGFyZWQgeGFjdAog CQkgKiBkdW1teSBQR1BST0NzIGRvbid0IG5lZWQgdGhlc2UgdGhvdWdoIC0gdGhleSdyZSBu ZXZlciBhc3NvY2lhdGVkCkBAIC0zNjYsOSArNjQ4LDYgQEAgSW5pdFByb2NHbG9iYWwodm9p ZCkKIAkJcGdfYXRvbWljX2luaXRfdTY0KCYocHJvYy0+d2FpdFN0YXJ0KSwgMCk7CiAJfQog Ci0JLyogU2hvdWxkIGhhdmUgY29uc3VtZWQgZXhhY3RseSB0aGUgZXhwZWN0ZWQgYW1vdW50 IG9mIGZhc3QtcGF0aCBtZW1vcnkuICovCi0JQXNzZXJ0KGZwUHRyID09IGZwRW5kUHRyKTsK LQogCS8qCiAJICogU2F2ZSBwb2ludGVycyB0byB0aGUgYmxvY2tzIG9mIFBHUFJPQyBzdHJ1 Y3R1cmVzIHJlc2VydmVkIGZvciBhdXhpbGlhcnkKIAkgKiBwcm9jZXNzZXMgYW5kIHByZXBh cmVkIHRyYW5zYWN0aW9ucy4KQEAgLTQzNSw3ICs3MTQsNTEgQEAgSW5pdFByb2Nlc3Modm9p ZCkKIAogCWlmICghZGxpc3RfaXNfZW1wdHkocHJvY2dsb2JhbGxpc3QpKQogCXsKLQkJTXlQ cm9jID0gZGxpc3RfY29udGFpbmVyKFBHUFJPQywgbGlua3MsIGRsaXN0X3BvcF9oZWFkX25v ZGUocHJvY2dsb2JhbGxpc3QpKTsKKwkJLyoKKwkJICogV2l0aCBudW1hIGludGVybGVhdmlu ZyBvZiBQR1BST0MsIHRyeSB0byBnZXQgYSBQUk9DIGVudHJ5IGZyb20gdGhlCisJCSAqIHJp Z2h0IE5VTUEgbm9kZSAod2hlbiB0aGUgcHJvY2VzcyBzdGFydHMpLgorCQkgKgorCQkgKiBY WFggVGhlIHByb2Nlc3MgbWF5IG1vdmUgdG8gYSBkaWZmZXJlbnQgTlVNQSBub2RlIGxhdGVy LCBidXQKKwkJICogdGhlcmUncyBub3QgbXVjaCB3ZSBjYW4gZG8gYWJvdXQgdGhhdC4KKwkJ ICovCisJCWlmICgobnVtYV9mbGFncyAmIE5VTUFfUFJPQ1MpICE9IDApCisJCXsKKwkJCWRs aXN0X211dGFibGVfaXRlciBpdGVyOworCQkJaW50CQlub2RlOworCisjaWZkZWYgVVNFX0xJ Qk5VTUEKKwkJCWludAljcHUgPSBzY2hlZF9nZXRjcHUoKTsKKworCQkJaWYgKGNwdSA8IDAp CisJCQkJZWxvZyhFUlJPUiwgImdldGNwdSBmYWlsZWQ6ICVtIik7CisKKwkJCW5vZGUgPSBu dW1hX25vZGVfb2ZfY3B1KGNwdSk7CisjZWxzZQorCQkJLyogRklYTUUgaXMgZGVmYXVsdGlu ZyB0byAwIGNvcnJlY3Q/ICovCisJCQlub2RlID0gMDsKKyNlbmRpZgorCisJCQlNeVByb2Mg PSBOVUxMOworCisJCQlkbGlzdF9mb3JlYWNoX21vZGlmeShpdGVyLCBwcm9jZ2xvYmFsbGlz dCkKKwkJCXsKKwkJCQlQR1BST0MJICAgKnByb2M7CisKKwkJCQlwcm9jID0gZGxpc3RfY29u dGFpbmVyKFBHUFJPQywgbGlua3MsIGl0ZXIuY3VyKTsKKworCQkJCWlmIChwcm9jLT5udW1h X25vZGUgPT0gbm9kZSkKKwkJCQl7CisJCQkJCU15UHJvYyA9IHByb2M7CisJCQkJCWRsaXN0 X2RlbGV0ZShpdGVyLmN1cik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJ CS8qIGRpZG4ndCBmaW5kIFBHUFJPQyBmcm9tIHRoZSBjb3JyZWN0IE5VTUEgbm9kZSwgcGlj ayBhbnkgZnJlZSBvbmUgKi8KKwkJaWYgKE15UHJvYyA9PSBOVUxMKQorCQkJTXlQcm9jID0g ZGxpc3RfY29udGFpbmVyKFBHUFJPQywgbGlua3MsIGRsaXN0X3BvcF9oZWFkX25vZGUocHJv Y2dsb2JhbGxpc3QpKTsKKwogCQlTcGluTG9ja1JlbGVhc2UoUHJvY1N0cnVjdExvY2spOwog CX0KIAllbHNlCkBAIC02NDYsNyArOTY5LDcgQEAgSW5pdEF1eGlsaWFyeVByb2Nlc3Modm9p ZCkKIAkgKi8KIAlmb3IgKHByb2N0eXBlID0gMDsgcHJvY3R5cGUgPCBOVU1fQVVYSUxJQVJZ X1BST0NTOyBwcm9jdHlwZSsrKQogCXsKLQkJYXV4cHJvYyA9ICZBdXhpbGlhcnlQcm9jc1tw cm9jdHlwZV07CisJCWF1eHByb2MgPSBBdXhpbGlhcnlQcm9jc1twcm9jdHlwZV07CiAJCWlm IChhdXhwcm9jLT5waWQgPT0gMCkKIAkJCWJyZWFrOwogCX0KQEAgLTEwNDksNyArMTM3Miw3 IEBAIEF1eGlsaWFyeVByb2NLaWxsKGludCBjb2RlLCBEYXR1bSBhcmcpCiAJaWYgKE15UHJv Yy0+cGlkICE9IChpbnQpIGdldHBpZCgpKQogCQllbG9nKFBBTklDLCAiQXV4aWxpYXJ5UHJv Y0tpbGwoKSBjYWxsZWQgaW4gY2hpbGQgcHJvY2VzcyIpOwogCi0JYXV4cHJvYyA9ICZBdXhp bGlhcnlQcm9jc1twcm9jdHlwZV07CisJYXV4cHJvYyA9IEF1eGlsaWFyeVByb2NzW3Byb2N0 eXBlXTsKIAogCUFzc2VydChNeVByb2MgPT0gYXV4cHJvYyk7CiAKQEAgLTEwOTgsNyArMTQy MSw3IEBAIEF1eGlsaWFyeVBpZEdldFByb2MoaW50IHBpZCkKIAogCWZvciAoaW5kZXggPSAw OyBpbmRleCA8IE5VTV9BVVhJTElBUllfUFJPQ1M7IGluZGV4KyspCiAJewotCQlQR1BST0MJ ICAgKnByb2MgPSAmQXV4aWxpYXJ5UHJvY3NbaW5kZXhdOworCQlQR1BST0MJICAgKnByb2Mg PSBBdXhpbGlhcnlQcm9jc1tpbmRleF07CiAKIAkJaWYgKHByb2MtPnBpZCA9PSBwaWQpCiAJ CXsKQEAgLTE5ODgsNyArMjMxMSw3IEBAIFByb2NTZW5kU2lnbmFsKFByb2NOdW1iZXIgcHJv Y051bWJlcikKIAlpZiAocHJvY051bWJlciA8IDAgfHwgcHJvY051bWJlciA+PSBQcm9jR2xv YmFsLT5hbGxQcm9jQ291bnQpCiAJCWVsb2coRVJST1IsICJwcm9jTnVtYmVyIG91dCBvZiBy YW5nZSIpOwogCi0JU2V0TGF0Y2goJlByb2NHbG9iYWwtPmFsbFByb2NzW3Byb2NOdW1iZXJd LnByb2NMYXRjaCk7CisJU2V0TGF0Y2goJlByb2NHbG9iYWwtPmFsbFByb2NzW3Byb2NOdW1i ZXJdLT5wcm9jTGF0Y2gpOwogfQogCiAvKgpAQCAtMjA2MywzICsyMzg2LDE2OCBAQCBCZWNv bWVMb2NrR3JvdXBNZW1iZXIoUEdQUk9DICpsZWFkZXIsIGludCBwaWQpCiAKIAlyZXR1cm4g b2s7CiB9CisKKy8qCisgKiBwZ3Byb2NfcGFydGl0aW9uc19wcmVwYXJlCisgKgkJQ2FsY3Vs YXRlIHBhcmFtZXRlcnMgZm9yIHBhcnRpdGlvbmluZyBidWZmZXJzLgorICoKKyAqIE5VTUEg cGFydGl0aW9uaW5nCisgKgorICogTm93IGJ1aWxkIHRoZSBhY3R1YWwgUEdQUk9DIGFycmF5 cywgb25lICJjaHVuayIgcGVyIE5VTUEgbm9kZSAoYW5kIG9uZQorICogZXh0cmEgZm9yIGF1 eGlsaWFyeSBwcm9jZXNzZXMgYW5kIDJQQyB0cmFuc2FjdGlvbnMsIG5vdCBhc3NvY2lhdGVk IHdpdGgKKyAqIGFueSBwYXJ0aWN1bGFyIG5vZGUpLgorICoKKyAqIEZpcnN0IGRldGVybWlu ZSBob3cgbWFueSAiYmFja2VuZCIgcHJvY3MgdG8gYWxsb2NhdGUgcGVyIE5VTUEgbm9kZS4g VGhlCisgKiBjb3VudCBtYXkgbm90IGJlIGV4YWN0bHkgZGl2aXNpYmxlLCBidXQgd2UgbW9z dGx5IGlnbm9yZSB0aGF0LiBUaGUgbGFzdAorICogbm9kZSBtYXkgZ2V0IHNvbWV3aGF0IGZl d2VyIFBHUFJPQyBlbnRyaWVzLCBidXQgdGhlIGltYmFsYW5jZSBvdWdodCB0bworICogYmUg cHJldHR5IHNtYWxsIChpZiBNYXhCYWNrZW5kcyA+PiBudW1hX25vZGVzKS4KKyAqCisgKiBY WFggQSBmYWlyZXIgZGlzdHJpYnV0aW9uIGlzIHBvc3NpYmxlLCBidXQgbm90IHdvcnRoIGl0 IGZvciBub3cuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3Byb2NfcGFydGl0aW9uc19wcmVwYXJl KHZvaWQpCit7CisJLyogYmFpbCBvdXQgaWYgYWxyZWFkeSBpbml0aWFsaXplZCAoY2FsY3Vs YXRlIG9ubHkgb25jZSkgKi8KKwlpZiAobnVtYV9ub2RlcyAhPSAtMSkKKwkJcmV0dXJuOwor CisJLyogWFhYIG9ubHkgZ2l2ZXMgdXMgdGhlIG51bWJlciwgdGhlIG5vZGVzIG1heSBub3Qg YmUgMCwgMSwgMiwgLi4uICovCisjaWZkZWYgVVNFX0xJQk5VTUEKKwludW1hX25vZGVzID0g bnVtYV9udW1fY29uZmlndXJlZF9ub2RlcygpOworI2Vsc2UKKwludW1hX25vZGVzID0gMTsK KyNlbmRpZgorCisJLyogWFhYIGNhbiB0aGlzIGhhcHBlbj8gKi8KKwlpZiAobnVtYV9ub2Rl cyA8IDEpCisJCW51bWFfbm9kZXMgPSAxOworCisJLyoKKwkgKiBYWFggQSBiaXQgd2VpcmQu IERvIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQgcG9zdG1hc3Rlcj8gQ291bGQgdGhpcyBldmVu CisJICogcnVuIG91dHNpZGUgcG9zdG1hc3Rlcj8gSSBkb24ndCB0aGluayBzby4KKwkgKgor CSAqIFhYWCBBbm90aGVyIGlzc3VlIGlzIHdlIG1heSBnZXQgZGlmZmVyZW50IHZhbHVlcyB0 aGFuIHdoZW4gc2l6aW5nIHRoZQorCSAqIHRoZSBtZW1vcnksIGJlY2F1c2UgYXQgdGhhdCBw b2ludCB3ZSBkaWRuJ3Qga25vdyBpZiB3ZSBnZXQgaHVnZSBwYWdlcywKKwkgKiBzbyB3ZSBh c3N1bWVkIHdlIHdpbGwuIFNob3VsZG4ndCBjYXVzZSBjcmFzaGVzLCBidXQgd2UgbWlnaHQg YWxsb2NhdGUKKwkgKiBzaGFyZWQgbWVtb3J5IGFuZCB0aGVuIG5vdCB1c2Ugc29tZSBvZiBp dCAoYmVjYXVzZSBvZiB0aGUgYWxpZ25tZW50CisJICogdGhhdCB3ZSBkb24ndCBhY3R1YWxs eSBuZWVkKS4gTm90IHN1cmUgYWJvdXQgYmV0dGVyIHdheSwgZ29vZCBmb3Igbm93LgorCSAq LworCS8vIEFzc2VydCghSXNVbmRlclBvc3RtYXN0ZXIpOworCisJbnVtYV9wYWdlX3NpemUg PSBwZ19udW1hX3BhZ2Vfc2l6ZSgpOworCisJbnVtYV9wcm9jc19wZXJfbm9kZSA9IChNYXhC YWNrZW5kcyArIChudW1hX25vZGVzIC0gMSkpIC8gbnVtYV9ub2RlczsKKworCWVsb2coREVC VUcxLCAiTlVNQTogcGdwcm9jIGJhY2tlbmRzICVkIG51bV9ub2RlcyAlZCBwZXJfbm9kZSAl ZCIsCisJCSBNYXhCYWNrZW5kcywgbnVtYV9ub2RlcywgbnVtYV9wcm9jc19wZXJfbm9kZSk7 CisKKwlBc3NlcnQobnVtYV9ub2RlcyAqIG51bWFfcHJvY3NfcGVyX25vZGUgPj0gTWF4QmFj a2VuZHMpOworCisJLyogc3VjY2VzcyAqLworCW51bWFfY2FuX3BhcnRpdGlvbiA9IHRydWU7 Cit9CisKKy8qCisgKiBkb2Vzbid0IGRvIGFsaWdubWVudAorICovCitzdGF0aWMgY2hhciAq CitwZ3Byb2NfcGFydGl0aW9uX2luaXQoY2hhciAqcHRyLCBpbnQgbnVtX3Byb2NzLCBpbnQg YWxscHJvY3NfaW5kZXgsIGludCBub2RlKQoreworCVBHUFJPQwkgICAqcHJvY3Nfbm9kZTsK KworCS8qIGFsbG9jYXRlIHRoZSBQR1BST0MgY2h1bmsgZm9yIHRoaXMgbm9kZSAqLworCXBy b2NzX25vZGUgPSAoUEdQUk9DICopIHB0cjsKKworCS8qIHBvaW50ZXIgcmlnaHQgYWZ0ZXIg dGhpcyBhcnJheSAqLworCXB0ciA9IChjaGFyICopIHB0ciArIG51bV9wcm9jcyAqIHNpemVv ZihQR1BST0MpOworCisJZWxvZyhERUJVRzEsICJOVU1BOiBwZ3Byb2NfaW5pdF9wYXJ0aXRp b24gcHJvY3MgJXAgZW5kcHRyICVwIG51bV9wcm9jcyAlZCBub2RlICVkIiwKKwkJIHByb2Nz X25vZGUsIHB0ciwgbnVtX3Byb2NzLCBub2RlKTsKKworCS8qCisJICogaWYgbm9kZSBzcGVj aWZpZWQsIG1vdmUgdG8gbm9kZSAtIGRvIHRoaXMgYmVmb3JlIHdlIHN0YXJ0IHRvdWNoaW5n IHRoZQorCSAqIG1lbW9yeSwgdG8gbWFrZSBzdXJlIGl0J3Mgbm90IG1hcHBlZCB0byBhbnkg bm9kZSB5ZXQKKwkgKi8KKwlpZiAobm9kZSAhPSAtMSkKKwkJcGdfbnVtYV9tb3ZlX3RvX25v ZGUoKGNoYXIgKikgcHJvY3Nfbm9kZSwgcHRyLCBub2RlKTsKKworCS8qIGFkZCBwb2ludGVy cyB0byB0aGUgUEdQUk9DIGVudHJpZXMgdG8gYWxsUHJvY3MgKi8KKwlmb3IgKGludCBpID0g MDsgaSA8IG51bV9wcm9jczsgaSsrKQorCXsKKwkJcHJvY3Nfbm9kZVtpXS5udW1hX25vZGUg PSBub2RlOworCQlwcm9jc19ub2RlW2ldLnByb2NudW1iZXIgPSBhbGxwcm9jc19pbmRleDsK KworCQlQcm9jR2xvYmFsLT5hbGxQcm9jc1thbGxwcm9jc19pbmRleF0gPSAmcHJvY3Nfbm9k ZVtpXTsKKworCQlhbGxwcm9jc19pbmRleCsrOworCX0KKworCXJldHVybiBwdHI7Cit9CisK K3N0YXRpYyBjaGFyICoKK2Zhc3RwYXRoX3BhcnRpdGlvbl9pbml0KGNoYXIgKnB0ciwgaW50 IG51bV9wcm9jcywgaW50IGFsbHByb2NzX2luZGV4LCBpbnQgbm9kZSwKKwkJCQkJCVNpemUg ZnBMb2NrQml0c1NpemUsIFNpemUgZnBSZWxJZFNpemUpCit7CisJY2hhcgkgICAqZW5kcHRy ID0gcHRyICsgbnVtX3Byb2NzICogKGZwTG9ja0JpdHNTaXplICsgZnBSZWxJZFNpemUpOwor CisJLyoKKwkgKiBpZiBub2RlIHNwZWNpZmllZCwgbW92ZSB0byBub2RlIC0gZG8gdGhpcyBi ZWZvcmUgd2Ugc3RhcnQgdG91Y2hpbmcgdGhlCisJICogbWVtb3J5LCB0byBtYWtlIHN1cmUg aXQncyBub3QgbWFwcGVkIHRvIGFueSBub2RlIHlldAorCSAqLworCWlmIChub2RlICE9IC0x KQorCQlwZ19udW1hX21vdmVfdG9fbm9kZShwdHIsIGVuZHB0ciwgbm9kZSk7CisKKwkvKgor CSAqIE5vdyBwb2ludCB0aGUgUEdQUk9DIGVudHJpZXMgdG8gdGhlIGZhc3QtcGF0aCBhcnJh eXMsIGFuZCBhbHNvIGFkdmFuY2UKKwkgKiB0aGUgZnBQdHIuCisJICovCisJZm9yIChpbnQg aSA9IDA7IGkgPCBudW1fcHJvY3M7IGkrKykKKwl7CisJCVBHUFJPQwkgICAqcHJvYyA9IFBy b2NHbG9iYWwtPmFsbFByb2NzW2FsbHByb2NzX2luZGV4XTsKKworCQkvKiBjcm9zcy1jaGVj ayB3ZSBnb3QgdGhlIGV4cGVjdGVkIE5VTUEgbm9kZSAqLworCQlBc3NlcnQocHJvYy0+bnVt YV9ub2RlID09IG5vZGUpOworCQlBc3NlcnQocHJvYy0+cHJvY251bWJlciA9PSBhbGxwcm9j c19pbmRleCk7CisKKwkJLyoKKwkJICogU2V0IHRoZSBmYXN0LXBhdGggbG9jayBhcnJheXMs IGFuZCBtb3ZlIHRoZSBwb2ludGVyLiBXZSBpbnRlcmxlYXZlCisJCSAqIHRoZSB0d28gYXJy YXlzLCB0byAoaG9wZWZ1bGx5KSBnZXQgc29tZSBsb2NhbGl0eSBmb3IgZWFjaCBiYWNrZW5k LgorCQkgKi8KKwkJcHJvYy0+ZnBMb2NrQml0cyA9ICh1aW50NjQgKikgcHRyOworCQlwdHIg Kz0gZnBMb2NrQml0c1NpemU7CisKKwkJcHJvYy0+ZnBSZWxJZCA9IChPaWQgKikgcHRyOwor CQlwdHIgKz0gZnBSZWxJZFNpemU7CisKKwkJQXNzZXJ0KHB0ciA8PSBlbmRwdHIpOworCisJ CWFsbHByb2NzX2luZGV4Kys7CisJfQorCisJQXNzZXJ0KHB0ciA9PSBlbmRwdHIpOworCisJ cmV0dXJuIGVuZHB0cjsKK30KKworaW50CitQcm9jUGFydGl0aW9uQ291bnQodm9pZCkKK3sK KwlpZiAoKChudW1hX2ZsYWdzICYgTlVNQV9QUk9DUykgIT0gMCkgJiYgbnVtYV9jYW5fcGFy dGl0aW9uKQorCQlyZXR1cm4gKG51bWFfbm9kZXMgKyAxKTsKKworCXJldHVybiAxOworfQor Cit2b2lkCitQcm9jUGFydGl0aW9uR2V0KGludCBpZHgsIGludCAqbm9kZSwgaW50ICpucHJv Y3MsIHZvaWQgKipwcm9jc3B0ciwgdm9pZCAqKmZwcHRyKQoreworCVBHUHJvY1BhcnRpdGlv biAqcGFydCA9ICZwYXJ0aXRpb25zW2lkeF07CisKKwlBc3NlcnQoKGlkeCA+PSAwKSAmJiAo aWR4IDwgUHJvY1BhcnRpdGlvbkNvdW50KCkpKTsKKworCSpucHJvY3MgPSBwYXJ0LT5udW1f cHJvY3M7CisJKnByb2NzcHRyID0gcGFydC0+cGdwcm9jX3B0cjsKKwkqZnBwdHIgPSBwYXJ0 LT5mYXN0cGF0aF9wdHI7CisJKm5vZGUgPSBwYXJ0LT5udW1hX25vZGU7Cit9CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9wb3J0L3BnX251bWEuaCBiL3NyYy9pbmNsdWRlL3BvcnQvcGdf bnVtYS5oCmluZGV4IDk3MzRhYTMxNWZmLi5hYTUyNGY2ZjdmMyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvcG9ydC9wZ19udW1hLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9ydC9wZ19udW1h LmgKQEAgLTIzLDYgKzIzLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIHZvaWQgcGdfbnVtYV9t b3ZlX3RvX25vZGUoY2hhciAqc3RhcnRwdHIsIGNoYXIgKmVuZHB0ciwgaW50IG4KIGV4dGVy biBQR0RMTElNUE9SVCBpbnQgbnVtYV9mbGFnczsKIAogI2RlZmluZQkJTlVNQV9CVUZGRVJT CQkweDAxCisjZGVmaW5lCQlOVU1BX1BST0NTCQkJMHgwMgogCiAjaWZkZWYgVVNFX0xJQk5V TUEKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmggYi9zcmMvaW5j bHVkZS9zdG9yYWdlL3Byb2MuaAppbmRleCBjNmY1ZWJjZWVmZC4uMjFmMjYxOWZkNDAgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCisrKyBiL3NyYy9pbmNsdWRl L3N0b3JhZ2UvcHJvYy5oCkBAIC0yMDIsNiArMjAyLDggQEAgc3RydWN0IFBHUFJPQwogCQkJ CQkJCQkgKiB2YWN1dW0gbXVzdCBub3QgcmVtb3ZlIHR1cGxlcyBkZWxldGVkIGJ5CiAJCQkJ CQkJCSAqIHhpZCA+PSB4bWluICEgKi8KIAorCWludAkJCXByb2NudW1iZXI7CQkvKiBpbmRl eCBpbiBQcm9jR2xvYmFsLT5hbGxQcm9jcyAqLworCiAJaW50CQkJcGlkOwkJCS8qIEJhY2tl bmQncyBwcm9jZXNzIElEOyAwIGlmIHByZXBhcmVkIHhhY3QgKi8KIAogCWludAkJCXBneGFj dG9mZjsJCS8qIG9mZnNldCBpbnRvIHZhcmlvdXMgUHJvY0dsb2JhbC0+YXJyYXlzIHdpdGgK QEAgLTMyNyw2ICszMjksOSBAQCBzdHJ1Y3QgUEdQUk9DCiAJUEdQUk9DCSAgICpsb2NrR3Jv dXBMZWFkZXI7CS8qIGxvY2sgZ3JvdXAgbGVhZGVyLCBpZiBJJ20gYSBtZW1iZXIgKi8KIAlk bGlzdF9oZWFkCWxvY2tHcm91cE1lbWJlcnM7CS8qIGxpc3Qgb2YgbWVtYmVycywgaWYgSSdt IGEgbGVhZGVyICovCiAJZGxpc3Rfbm9kZQlsb2NrR3JvdXBMaW5rOwkvKiBteSBtZW1iZXIg bGluaywgaWYgSSdtIGEgbWVtYmVyICovCisKKwkvKiBOVU1BIG5vZGUgKi8KKwlpbnQJCQlu dW1hX25vZGU7CiB9OwogCiAvKiBOT1RFOiAidHlwZWRlZiBzdHJ1Y3QgUEdQUk9DIFBHUFJP QyIgYXBwZWFycyBpbiBzdG9yYWdlL2xvY2suaC4gKi8KQEAgLTM5MSw3ICszOTYsNyBAQCBl eHRlcm4gUEdETExJTVBPUlQgUEdQUk9DICpNeVByb2M7CiB0eXBlZGVmIHN0cnVjdCBQUk9D X0hEUgogewogCS8qIEFycmF5IG9mIFBHUFJPQyBzdHJ1Y3R1cmVzIChub3QgaW5jbHVkaW5n IGR1bW1pZXMgZm9yIHByZXBhcmVkIHR4bnMpICovCi0JUEdQUk9DCSAgICphbGxQcm9jczsK KwlQR1BST0MJICAqKmFsbFByb2NzOwogCiAJLyogQXJyYXkgbWlycm9yaW5nIFBHUFJPQy54 aWQgZm9yIGVhY2ggUEdQUk9DIGN1cnJlbnRseSBpbiB0aGUgcHJvY2FycmF5ICovCiAJVHJh bnNhY3Rpb25JZCAqeGlkczsKQEAgLTQzOCwxMyArNDQzLDEzIEBAIHR5cGVkZWYgc3RydWN0 IFBST0NfSERSCiAKIGV4dGVybiBQR0RMTElNUE9SVCBQUk9DX0hEUiAqUHJvY0dsb2JhbDsK IAotZXh0ZXJuIFBHRExMSU1QT1JUIFBHUFJPQyAqUHJlcGFyZWRYYWN0UHJvY3M7CitleHRl cm4gUEdETExJTVBPUlQgUEdQUk9DICoqUHJlcGFyZWRYYWN0UHJvY3M7CiAKIC8qCiAgKiBB Y2Nlc3NvcnMgZm9yIGdldHRpbmcgUEdQUk9DIGdpdmVuIGEgUHJvY051bWJlciBhbmQgdmlj ZSB2ZXJzYS4KICAqLwotI2RlZmluZSBHZXRQR1Byb2NCeU51bWJlcihuKSAoJlByb2NHbG9i YWwtPmFsbFByb2NzWyhuKV0pCi0jZGVmaW5lIEdldE51bWJlckZyb21QR1Byb2MocHJvYykg KChwcm9jKSAtICZQcm9jR2xvYmFsLT5hbGxQcm9jc1swXSkKKyNkZWZpbmUgR2V0UEdQcm9j QnlOdW1iZXIobikgKFByb2NHbG9iYWwtPmFsbFByb2NzWyhuKV0pCisjZGVmaW5lIEdldE51 bWJlckZyb21QR1Byb2MocHJvYykgKChwcm9jKS0+cHJvY251bWJlcikKIAogLyoKICAqIFdl IHNldCBhc2lkZSBzb21lIGV4dHJhIFBHUFJPQyBzdHJ1Y3R1cmVzIGZvciAic3BlY2lhbCB3 b3JrZXIiIHByb2Nlc3NlcywKQEAgLTQ4MCw3ICs0ODUsNyBAQCBleHRlcm4gUEdETExJTVBP UlQgYm9vbCBsb2dfbG9ja193YWl0czsKIAogI2lmZGVmIEVYRUNfQkFDS0VORAogZXh0ZXJu IFBHRExMSU1QT1JUIHNsb2NrX3QgKlByb2NTdHJ1Y3RMb2NrOwotZXh0ZXJuIFBHRExMSU1Q T1JUIFBHUFJPQyAqQXV4aWxpYXJ5UHJvY3M7CitleHRlcm4gUEdETExJTVBPUlQgUEdQUk9D ICoqQXV4aWxpYXJ5UHJvY3M7CiAjZW5kaWYKIAogCkBAIC01MjAsNCArNTI1LDcgQEAgZXh0 ZXJuIFBHUFJPQyAqQXV4aWxpYXJ5UGlkR2V0UHJvYyhpbnQgcGlkKTsKIGV4dGVybiB2b2lk IEJlY29tZUxvY2tHcm91cExlYWRlcih2b2lkKTsKIGV4dGVybiBib29sIEJlY29tZUxvY2tH cm91cE1lbWJlcihQR1BST0MgKmxlYWRlciwgaW50IHBpZCk7CiAKK2V4dGVybiBpbnQJUHJv Y1BhcnRpdGlvbkNvdW50KHZvaWQpOworZXh0ZXJuIHZvaWQgUHJvY1BhcnRpdGlvbkdldChp bnQgaWR4LCBpbnQgKm5vZGUsIGludCAqbnByb2NzLCB2b2lkICoqcHJvY3NwdHIsIHZvaWQg KipmcHB0cik7CisKICNlbmRpZgkJCQkJCQkvKiBfUFJPQ19IXyAqLwpkaWZmIC0tZ2l0IGEv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCBiNjhmNzViN2YzMS4uNmE5NzA5OThlNWMgMTAwNjQ0Ci0t LSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xODc2LDYgKzE4NzYsNyBAQCBQR1BfTVBJCiBQ R1BfUHViS2V5CiBQR1BfUzJLCiBQR1BpbmcKK1BHUHJvY1BhcnRpdGlvbgogUEdRdWVyeUNs YXNzCiBQR1JVc2FnZQogUEdTZW1hcGhvcmUKLS0gCjIuNTEuMAoK --------------i0MMC9nLNSRCyrH3GSEb0aRu--