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 1uWgK3-00HOkf-4g for pgsql-hackers@arkaria.postgresql.org; Tue, 01 Jul 2025 19:07:15 +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 1uWgK1-007zWu-2Y for pgsql-hackers@arkaria.postgresql.org; Tue, 01 Jul 2025 19:07:13 +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 1uWgK0-007zWN-5Q for pgsql-hackers@lists.postgresql.org; Tue, 01 Jul 2025 19:07:13 +0000 Received: from relay6-d.mail.gandi.net ([217.70.183.198]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1uWgJu-00508b-1N for pgsql-hackers@lists.postgresql.org; Tue, 01 Jul 2025 19:07:11 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id D9F84442C0 for ; Tue, 1 Jul 2025 19:07:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vondra.me; s=gm1; t=1751396823; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=MokhI0wM5wnsNcHFaejn+JRFlwgrJT8/VH/h4FALuiI=; b=nN4S9RJ8Pbo+ni2dVFtjknJCdAt6BrwmdbJ1SbAPyt5vNXhaPy6igZ/m10NWpTRSQnyjpz ang1qK0erWGzFj95XNTBq8BLR3SCpVaNRFwzV1KTdZFHJxxwKzssIdLGbxYVnNIS5mMR1m eLyTdtR8CH8mh51nnUcMr9uoaVMtYZ7ivx0bSGwbUZbweEfdFORRI4iFmMa4Shce7Ar/r2 qeYBuysGVnPgR+HQAa+v0PVvXkBZwKWX6p9+McBlj8K1i6ioobss9Kps0U8FBJVulcBVfn HLSUgCmRzwYw4nzQpfSyIRSQ7DOi1d5lRK58sMkT7WRZeK5FPZKkkJo/ZiCVWA== Content-Type: multipart/mixed; boundary="------------LG5I5UHq4oggMq78gAQBocuX" Message-ID: <099b9433-2855-4f1b-b421-d078a5d82017@vondra.me> Date: Tue, 1 Jul 2025 21:07:00 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: PostgreSQL Hackers From: Tomas Vondra Subject: Adding basic NUMA awareness X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdefgdduheefudcutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfitefpfffkpdcuggftfghnshhusghstghrihgsvgenuceurghilhhouhhtmecufedtudenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurheptgfkffggfgfvhffusehmtderredtvdejnecuhfhrohhmpefvohhmrghsucggohhnughrrgcuoehtohhmrghssehvohhnughrrgdrmhgvqeenucggtffrrghtthgvrhhnpeejkefgudeggfdtgeeiieelfedujeeivdekteeugeelgedvjeffgfeihfevvddujeenucffohhmrghinhephihouhhtuhgsvgdrtghomhdpphhoshhtghhrvghsqhhlrdhorhhgnecukfhppeekiedrgeelrddvfedtrddvtdeinecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepkeeirdegledrvdeftddrvddtiedphhgvlhhopegluddtrddufeejrddtrddvngdpmhgrihhlfhhrohhmpehtohhmrghssehvohhnughrrgdrmhgvpdhnsggprhgtphhtthhopedupdhrtghpthhtohepphhgshhqlhdqhhgrtghkvghrsheslhhishhtshdrphhoshhtghhrvghsqhhlrdhorhhg 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. --------------LG5I5UHq4oggMq78gAQBocuX Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, This is a WIP version of a patch series I'm working on, adding some basic NUMA awareness for a couple parts of our shared memory (shared buffers, etc.). It's based on Andres' experimental patches he spoke about at pgconf.eu 2024 [1], and while it's improved and polished in various ways, it's still experimental. But there's a recent thread aiming to do something similar [2], so better to share it now so that we can discuss both approaches. This patch set is a bit more ambitious, handling NUMA in a way to allow smarter optimizations later, so I'm posting it in a separate thread. The series is split into patches addressing different parts of the shared memory, starting (unsurprisingly) from shared buffers, then buffer freelists and ProcArray. There's a couple additional parts, but those are smaller / addressing miscellaneous stuff. Each patch has a numa_ GUC, intended to enable/disable that part. This is meant to make development easier, not as a final interface. I'm not sure how exactly that should look. It's possible some combinations of GUCs won't work, etc. Each patch should have a commit message explaining the intent and implementation, and then also detailed comments explaining various challenges and open questions. But let me go over the basics, and discuss some of the design choices and open questions that need solving. 1) v1-0001-NUMA-interleaving-buffers.patch This is the main thing when people think about NUMA - making sure the shared buffers are allocated evenly on all the nodes, not just on a single node (which can happen easily with warmup). The regular memory interleaving would address this, but it also has some disadvantages. Firstly, it's oblivious to the contents of the shared memory segment, and we may not want to interleave everything. It's also oblivious to alignment of the items (a buffer can easily end up "split" on multiple NUMA nodes), or relationship between different parts (e.g. there's a BufferBlock and a related BufferDescriptor, and those might again end up on different nodes). So the patch handles this by explicitly mapping chunks of shared buffers to different nodes - a bit like interleaving, but in larger chunks. Ideally each node gets (1/N) of shared buffers, as a contiguous chunk. It's a bit more complicated, because the patch distributes both the blocks and descriptors, in the same way. So a buffer and it's descriptor always end on the same NUMA node. This is one of the reasons why we need to map larger chunks, because NUMA works on page granularity, and the descriptors are tiny - many fit on a memory page. There's a secondary benefit of explicitly assigning buffers to nodes, using this simple scheme - it allows quickly determining the node ID given a buffer ID. This is helpful later, when building freelist. The patch is fairly simple. Most of the complexity is about picking the chunk size, and aligning the arrays (so that it nicely aligns with memory pages). The patch has a GUC "numa_buffers_interleave", with "off" by default. 2) v1-0002-NUMA-localalloc.patch This simply sets "localalloc" when initializing a backend, so that all memory allocated later is local, not interleaved. Initially this was necessary because the patch set the allocation policy to interleaving before initializing shared memory, and we didn't want to interleave the private memory. But that's no longer the case - the explicit mapping to nodes does not have this issue. I'm keeping the patch for convenience, it allows experimenting with numactl etc. The patch has a GUC "numa_localalloc", with "off" by default. 3) v1-0003-freelist-Don-t-track-tail-of-a-freelist.patch Minor optimization. Andres noticed we're tracking the tail of buffer freelist, without using it. So the patch removes that. 4) v1-0004-NUMA-partition-buffer-freelist.patch Right now we have a single freelist, and in busy instances that can be quite contended. What's worse, the freelist may trash between different CPUs, NUMA nodes, etc. So the idea is to have multiple freelists on subsets of buffers. The patch implements multiple strategies how the list can be split (configured using "numa_partition_freelist" GUC), for experimenting: * node - One list per NUMA node. This is the most natural option, because we now know which buffer is on which node, so we can ensure a list for a node only has buffers from that list. * cpu - One list per CPU. Pretty simple, each CPU gets it's own list. * pid - Similar to "cpu", but the processes are mapped to lists based on PID, not CPU ID. * none - nothing, sigle freelist Ultimately, I think we'll want to go with "node", simply because it aligns with the buffer interleaving. But there are improvements needed. The main challenge is that with multiple smaller lists, a process can't really use the whole shared buffers. So a single backed will only use part of the memory. The more lists there are, the worse this effect is. This is also why I think we won't use the other partitioning options, because there's going to be more CPUs than NUMA nodes. Obviously, this needs solving even with NUMA nodes - we need to allow a single backend to utilize the whole shared buffers if needed. There should be a way to "steal" buffers from other freelists (if the "regular" freelist is empty), but the patch does not implement this. Shouldn't be hard, I think. The other missing part is clocksweep - there's still just a single instance of clocksweep, feeding buffers to all the freelists. But that's clearly a problem, because the clocksweep returns buffers from all NUMA nodes. The clocksweep really needs to be partitioned the same way as a freelists, and each partition will operate on a subset of buffers (from the right NUMA node). I do have a separate experimental patch doing something like that, I need to make it part of this branch. 5) v1-0005-NUMA-interleave-PGPROC-entries.patch Another area that seems like it might benefit from NUMA is PGPROC, so I gave it a try. It turned out somewhat challenging. Similarly to buffers we have two pieces that need to be located in a coordinated way - PGPROC entries and fast-path arrays. But we can't use the same approach as for buffers/descriptors, because (a) Neither of those pieces aligns with memory page size (PGPROC is ~900B, fast-path arrays are variable length). (b) We could pad PGPROC entries e.g. to 1KB, but that'd still require rather high max_connections before we use multiple huge pages. The fast-path arrays are less of a problem, because those tend to be larger, and are accessed through pointers, so we can just adjust that. So what I did instead is splitting the whole PGPROC array into one array per NUMA node, and one array for auxiliary processes and 2PC xacts. So with 4 NUMA nodes there are 5 separate arrays, for example. Each array is a multiple of memory pages, so we may waste some of the memory. But that's simply how NUMA works - page granularity. This however makes one particular thing harder - in a couple places we accessed PGPROC entries through PROC_HDR->allProcs, which was pretty much just one large array. And GetNumberFromPGProc() relied on array arithmetics to determine procnumber. With the array partitioned, this can't work the same way. But there's a simple solution - if we turn allProcs into an array of *pointers* to PGPROC arrays, there's no issue. All the places need a pointer anyway. And then we need an explicit procnumber field in PGPROC, instead of calculating it. There's a chance this have negative impact on code that accessed PGPROC very often, but so far I haven't seen such cases. But if you can come up with such examples, I'd like to see those. There's another detail - when obtaining a PGPROC entry in InitProcess(), we try to get an entry from the same NUMA node. And only if that doesn't work, we grab the first one from the list (there's still just one PGPROC freelist, I haven't split that - maybe we should?). This has a GUC "numa_procs_interleave", again "off" by default. It's not quite correct, though, because the partitioning happens always. It only affects the PGPROC lookup. (In a way, this may be a bit broken.) 6) v1-0006-NUMA-pin-backends-to-NUMA-nodes.patch This is an experimental patch, that simply pins the new process to the NUMA node obtained from the freelist. Driven by GUC "numa_procs_pin" (default: off). Summary ------- So this is what I have at the moment. I've tried to organize the patches in the order of importance, but that's just my guess. It's entirely possible there's something I missed, some other order might make more sense, etc. There's also the question how this is related to other patches affecting shared memory - I think the most relevant one is the "shared buffers online resize" by Ashutosh, simply because it touches the shared memory. I don't think the splitting would actually make some things simpler, or maybe more flexible - in particular, it'd allow us to enable huge pages only for some regions (like shared buffers), and keep the small pages e.g. for PGPROC. So that'd be good. But there'd also need to be some logic to "rework" how shared buffers get mapped to NUMA nodes after resizing. It'd be silly to start with memory on 4 nodes (25% each), resize shared buffers to 50% and end up with memory only on 2 of the nodes (because the other 2 nodes were originally assigned the upper half of shared buffers). I don't have a clear idea how this would be done, but I guess it'd require a bit of code invoked sometime after the resize. It'd already need to rebuild the freelists in some way, I guess. The other thing I haven't thought about very much is determining on which CPUs/nodes the instance is allowed to run. I assume we'd start by simply inherit/determine that at the start through libnuma, not through some custom PG configuration (which the patch [2] proposed to do). regards [1] https://www.youtube.com/watch?v=V75KpACdl6E [2] https://www.postgresql.org/message-id/CAKZiRmw6i1W1AwXxa-Asrn8wrVcVH3TO715g_MCoowTS9rkGyw%40mail.gmail.com -- Tomas Vondra --------------LG5I5UHq4oggMq78gAQBocuX Content-Type: text/x-patch; charset=UTF-8; name="v1-0001-NUMA-interleaving-buffers.patch" Content-Disposition: attachment; filename="v1-0001-NUMA-interleaving-buffers.patch" Content-Transfer-Encoding: base64 RnJvbSA5NzEyZTUwZDZkMTVjMThlYTJjNWZjZjQ1Nzk3MjQ4NmIwZDRlZjUzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVHVlLCA2IE1heSAyMDI1IDIxOjEyOjIxICswMjAwClN1YmplY3Q6IFtQQVRDSCB2 MSAxLzZdIE5VTUE6IGludGVybGVhdmluZyBidWZmZXJzCgpFbnN1cmUgc2hhcmVkIGJ1ZmZl cnMgYXJlIGFsbG9jYXRlZCBmcm9tIGFsbCBOVU1BIG5vZGVzLCBpbiBhIGJhbGFuY2VkCndh eSwgaW5zdGVhZCBvZiBqdXN0IHVzaW5nIHRoZSBub2RlIHdoZXJlIFBvc3RncmVzIGluaXRp YWxseSBzdGFydHMsIG9yCndoZXJlIHRoZSBrZXJuZWwgZGVjaWRlcyB0byBtaWdyYXRlIHRo ZSBwYWdlLCBldGMuIFdpdGggcHJlLXdhcm1pbmcKcGVyZm9ybWVkIGJ5IGEgc2luZ2xlIGJh Y2tlbmQsIHRoaXMgY2FuIGVhc2lseSByZXN1bHQgaW4gc2V2ZXJlbHkKdW5iYWxhbmNlZCBt ZW1vcnkgZGlzdHJpYnV0aW9uICh3aXRoIG1vc3QgZnJvbSBhIHNpbmdsZSBOVU1BIG5vZGUp LgoKVGhlIGtlcm5lbCB3b3VsZCBldmVudHVhbGx5IG1vdmUgc29tZSBvZiB0aGUgbWVtb3J5 IHRvIG90aGVyIG5vZGVzCih0aGFua3MgdG8gem9uZV9yZWNsYWltKSwgYnV0IHRoYXQgdGVu ZHMgdG8gdGFrZSBhIGxvbmcgdGltZS4gU28gdGhpcwpwYXRjaCBpbXByb3ZlcyBwcmVkaWN0 YWJpbGl0eSwgcmVkdWNlcyB0aGUgdGltZSBuZWVkZWQgZm9yIHdhcm11cApkdXJpbmcgYmVu Y2htYXJraW5nLCBldGMuICBJdCdzIGxlc3MgZGVwZW5kZW50IG9uIHdoYXQgdGhlIENQVQpz Y2hlZHVsZXIgZG9lcywgZXRjLgoKRnVydGhlcm1vcmUsIHRoZSBidWZmZXJzIGFyZSBtYXBw ZWQgdG8gTlVNQSBub2RlcyBpbiBhIGRldGVybWluaXN0aWMKd2F5LCBzbyB0aGlzIGFsc28g YWxsb3dzIGZ1cnRoZXIgaW1wcm92ZW1lbnRzIGxpa2UgYmFja2VuZHMgdXNpbmcKYnVmZmVy cyBmcm9tIHRoZSBzYW1lIE5VTUEgbm9kZS4KClRoZSBlZmZlY3QgaXMgc2ltaWxhciB0bwoK ICAgICBudW1hY3RsIC0taW50ZXJsZWF2ZT1hbGwKCmJ1dCB0aGVyZSdzIGEgbnVtYmVyIG9m IGltcG9ydGFudCBkaWZmZXJlbmNlcy4KCkZpcnN0bHksIGl0J3MgYXBwbGllZCBvbmx5IHRv IHNoYXJlZCBidWZmZXJzIChhbmQgYWxzbyB0byBkZXNjcmlwdG9ycyksCm5vdCB0byB0aGUg d2hvbGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50LiBJdCdzIG5vdCBjbGVhciB3ZSdkIHdhbnQg dG8gdXNlCmludGVybGVhdmluZyBmb3IgYWxsIHBhcnRzLCBzdG9yaW5nIGVudHJpZXMgd2l0 aCBkaWZmZXJlbnQgc2l6ZXMgYW5kCmxpZmUgY3ljbGVzIChlLmcuIFByb2NBcnJheSBtYXkg bmVlZCBkaWZmZXJlbnQgYXBwcm9hY2gpLgoKU2Vjb25kbHksIGl0IGNvbnNpZGVycyB0aGUg cGFnZSBhbmQgYmxvY2sgc2l6ZSwgYW5kIG1ha2VzIHN1cmUgbm90IHRvCnNwbGl0IGEgYnVm ZmVyIG9uIGRpZmZlcmVudCBOVU1BIG5vZGVzICh3aGljaCB3aXRoIHRoZSByZWd1bGFyCmlu dGVybGVhdmluZyBpcyBndWFyYW50ZWVkIHRvIGhhcHBlbiwgdW5sZXNzIHdoZW4gdXNpbmcg aHVnZSBwYWdlcykuIFRoZQpwYXRjaCBwZXJmb3JtcyAiZXhwbGljaXQiIGludGVybGVhdmlu Zywgc28gdGhhdCBidWZmZXJzIGFyZSBub3Qgc3BsaXQKbGlrZSB0aGlzLgoKVGhlIHBhdGNo IG1hcHMgYm90aCBidWZmZXJzIGFuZCBidWZmZXIgZGVzY3JpcHRvcnMsIHNvIHRoYXQgdGhl IGJ1ZmZlcgphbmQgaXQncyBidWZmZXIgZGVzY3JpcHRvciBlbmQgdXAgb24gdGhlIHNhbWUg TlVNQSBub2RlLgoKVGhlIG1hcHBpbmcgaGFwcGVucyBpbiBsYXJnZXIgY2h1bmtzIChzZWUg Y2hvb3NlX2NodW5rX2l0ZW1zKS4gVGhpcyBpcwpyZXF1aXJlZCB0byBoYW5kbGUgYnVmZmVy IGRlc2NyaXB0b3JzICh3aGljaCBhcmUgc21hbGxlciB0aGFuIGJ1ZmZlcnMpLAphbmQgaXQg c2hvdWxkIGFsc28gaGVscCB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBtYXBwaW5ncy4gTW9z dCBOVU1BCnN5c3RlbXMgd2lsbCB1c2UgMUdCIGNodW5rcywgdW5sZXNzIHVzaW5nIHZlcnkg c21hbGwgc2hhcmVkIGJ1ZmZlcnMuCgpOb3RlczoKCiogVGhlIGZlYXR1cmUgaXMgZW5hYmxl ZCBieSBudW1hX2J1ZmZlcnNfaW50ZXJsZWF2ZSBHVUMgKGZhbHNlIGJ5IGRlZmF1bHQpCgoq IEl0J3Mgbm90IGNsZWFyIHdlIHdhbnQgdG8gZW5hYmxlIGludGVybGVhdmluZyBmb3IgYWxs IHNoYXJlZCBtZW1vcnkuCiAgV2UgcHJvYmFibHkgd2FudCB0aGF0IGZvciBzaGFyZWQgYnVm ZmVycywgYnV0IG1heWJlIG5vdCBmb3IgUHJvY0FycmF5CiAgb3IgZnJlZWxpc3RzLgoKKiBT aW1pbGFyIHF1ZXN0aW9ucyBhcmUgYWJvdXQgaHVnZSBwYWdlcyAtIGluIGdlbmVyYWwgaXQn cyBhIGdvb2QgaWRlYSwKICBidXQgbWF5YmUgaXQncyBub3QgcXVpdGUgZ29vZCBmb3IgUHJv Y0FycmF5LiBJdCdzIHNvbWV3aGF0ZSBzZXBhcmF0ZQogIGZyb20gTlVNQSwgYnV0IG5vdCBl bnRpcmVseSBiZWNhdXNlIE5VTUEgd29ya3Mgb24gcGFnZSBncmFudWxhcml0eS4KICBQR1BS T0MgZW50cmllcyBhcmUgfjhLQiwgc28gdG9vIGxhcmdlIGZvciBpbnRlcmxlYXZpbmcgd2l0 aCA0SyBwYWdlcywKICBhcyB3ZSBkb24ndCB3YW50IHRvIHNwbGl0IHRoZSBlbnRyeSB0byBt dWx0aXBsZSBub2Rlcy4gQnV0IGNvdWxkIGJlCiAgZG9uZSBleHBsaWNpdGx5LCBieSBzcGVj aWZ5aW5nIHdoaWNoIG5vZGUgdG8gdXNlIGZvciB0aGUgcGFnZXMuCgoqIFdlIGNvdWxkIHBh cnRpdGlvbiBQcm9jQXJyYXksIHdpdGggb25lIHBhcnRpdGlvbiBwZXIgTlVNQSBub2RlLCBh bmQKICB0aGVuIGF0IGNvbm5lY3Rpb24gdGltZSBwaWNrIGEgbm9kZSBmcm9tIHRoZSBzYW1l IG5vZGUuIFRoZSBwcm9jZXNzCiAgY291bGQgbWlncmF0ZSB0byBzb21lIG90aGVyIG5vZGUg bGF0ZXIsIGVzcGVjaWFsbHkgZm9yIGxvbmctbGl2ZWQKICBjb25uZWN0aW9ucywgYnV0IHRo ZXJlJ3Mgbm8gcGVyZmVjdCBzb2x1dGlvbiwgTWF5YmUgd2UgY291bGQgc2V0CiAgYWZmaW5p dHkgdG8gY29yZXMgZnJvbSB0aGUgc2FtZSBub2RlLCBvciBzb21ldGhpbmcgbGlrZSB0aGF0 PwotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMgfCAzODQgKysr KysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1 Zm1nci5jICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgICAg ICB8ICAgMyArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyAgIHwgIDEw ICsKIHNyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgICAgICAgICAgICAgfCAgNjcgKystLS0K IHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAgICAgICB8ICAgMSArCiA3IGZpbGVzIGNoYW5n ZWQsIDQyNyBpbnNlcnRpb25zKCspLCA0MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmX2luaXQuYwppbmRleCBlZDFkYzQ4OGE0Mi4uMmFkMzQ2MjRjNDkg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMKKysr IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYwpAQCAtMTQsOSArMTQs MTcgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpZmRlZiBVU0VfTElCTlVN QQorI2luY2x1ZGUgPG51bWEuaD4KKyNpbmNsdWRlIDxudW1haWYuaD4KKyNlbmRpZgorCisj aW5jbHVkZSAicG9ydC9wZ19udW1hLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9haW8uaCIKICNp bmNsdWRlICJzdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1 Zm1nci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcGdfc2htZW0uaCIKKyNpbmNsdWRlICJzdG9y YWdlL3Byb2MuaCIKIAogQnVmZmVyRGVzY1BhZGRlZCAqQnVmZmVyRGVzY3JpcHRvcnM7CiBj aGFyCSAgICpCdWZmZXJCbG9ja3M7CkBAIC0yNSw2ICszMywxOSBAQCBXcml0ZWJhY2tDb250 ZXh0IEJhY2tlbmRXcml0ZWJhY2tDb250ZXh0OwogQ2twdFNvcnRJdGVtICpDa3B0QnVmZmVy SWRzOwogCiAKK3N0YXRpYyBTaXplIGdldF9tZW1vcnlfcGFnZV9zaXplKHZvaWQpOworc3Rh dGljIGludDY0IGNob29zZV9jaHVua19idWZmZXJzKGludCBOQnVmZmVycywgU2l6ZSBtZW1f cGFnZV9zaXplLCBpbnQgbnVtX25vZGVzKTsKK3N0YXRpYyB2b2lkIHBnX251bWFfaW50ZXJs ZWF2ZV9tZW1vcnkoY2hhciAqc3RhcnRwdHIsIGNoYXIgKmVuZHB0ciwKKwkJCQkJCQkJCSAg U2l6ZSBtZW1fcGFnZV9zaXplLCBTaXplIGNodW5rX3NpemUsCisJCQkJCQkJCQkgIGludCBu dW1fbm9kZXMpOworCisvKiBudW1iZXIgb2YgYnVmZmVycyBhbGxvY2F0ZWQgb24gdGhlIHNh bWUgTlVNQSBub2RlICovCitzdGF0aWMgaW50NjQgbnVtYV9jaHVua19idWZmZXJzID0gLTE7 CisKKy8qIG51bWJlciBvZiBOVU1BIG5vZGVzIChhcyByZXR1cm5lZCBieSBudW1hX251bV9j b25maWd1cmVkX25vZGVzKSAqLworc3RhdGljIGludAludW1hX25vZGVzID0gLTE7CisKKwog LyoKICAqIERhdGEgU3RydWN0dXJlczoKICAqCQlidWZmZXJzIGxpdmUgaW4gYSBmcmVlbGlz dCBhbmQgYSBsb29rdXAgZGF0YSBzdHJ1Y3R1cmUuCkBAIC03MSwxOCArOTIsODAgQEAgQnVm ZmVyTWFuYWdlclNobWVtSW5pdCh2b2lkKQogCQkJCWZvdW5kRGVzY3MsCiAJCQkJZm91bmRJ T0NWLAogCQkJCWZvdW5kQnVmQ2twdDsKKwlTaXplCQltZW1fcGFnZV9zaXplOworCVNpemUJ CWJ1ZmZlcl9hbGlnbjsKKworCS8qCisJICogWFhYIEEgYml0IHdlaXJkLiBEbyB3ZSBuZWVk IHRvIHdvcnJ5IGFib3V0IHBvc3RtYXN0ZXI/IENvdWxkIHRoaXMgZXZlbgorCSAqIHJ1biBv dXRzaWRlIHBvc3RtYXN0ZXI/IEkgZG9uJ3QgdGhpbmsgc28uCisJICoKKwkgKiBYWFggQW5v dGhlciBpc3N1ZSBpcyB3ZSBtYXkgZ2V0IGRpZmZlcmVudCB2YWx1ZXMgdGhhbiB3aGVuIHNp emluZyB0aGUKKwkgKiB0aGUgbWVtb3J5LCBiZWNhdXNlIGF0IHRoYXQgcG9pbnQgd2UgZGlk bid0IGtub3cgaWYgd2UgZ2V0IGh1Z2UgcGFnZXMsCisJICogc28gd2UgYXNzdW1lZCB3ZSB3 aWxsLiBTaG91bGRuJ3QgY2F1c2UgY3Jhc2hlcywgYnV0IHdlIG1pZ2h0IGFsbG9jYXRlCisJ ICogc2hhcmVkIG1lbW9yeSBhbmQgdGhlbiBub3QgdXNlIHNvbWUgb2YgaXQgKGJlY2F1c2Ug b2YgdGhlIGFsaWdubWVudAorCSAqIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCkuIE5v dCBzdXJlIGFib3V0IGJldHRlciB3YXksIGdvb2QgZm9yIG5vdy4KKwkgKi8KKwlpZiAoSXNV bmRlclBvc3RtYXN0ZXIpCisJCW1lbV9wYWdlX3NpemUgPSBwZ19nZXRfc2htZW1fcGFnZXNp emUoKTsKKwllbHNlCisJCW1lbV9wYWdlX3NpemUgPSBnZXRfbWVtb3J5X3BhZ2Vfc2l6ZSgp OworCisJLyoKKwkgKiBXaXRoIE5VTUEgd2UgbmVlZCB0byBlbnN1cmUgdGhlIGJ1ZmZlcnMg YXJlIHByb3Blcmx5IGFsaWduZWQgbm90IGp1c3QKKwkgKiB0byBQR19JT19BTElHTl9TSVpF LCBidXQgYWxzbyB0byBtZW1vcnkgcGFnZSBzaXplLCBiZWNhdXNlIE5VTUEgd29ya3MKKwkg KiBvbiBwYWdlIGdyYW51bGFyaXR5LCBhbmQgd2UgZG9uJ3Qgd2FudCBhIGJ1ZmZlciB0byBn ZXQgc3BsaXQgdG8KKwkgKiBtdWx0aXBsZSBub2RlcyAod2hlbiB1c2luZyBtdWx0aXBsZSBt ZW1vcnkgcGFnZXMpLgorCSAqCisJICogV2UgYWxzbyBkb24ndCB3YW50IHRvIGludGVyZmVy ZSB3aXRoIG90aGVyIHBhcnRzIG9mIHNoYXJlZCBtZW1vcnksCisJICogd2hpY2ggY291bGQg ZWFzaWx5IGhhcHBlbiB3aXRoIGh1Z2UgcGFnZXMgKGUuZy4gd2l0aCBkYXRhIHN0b3JlZCBi ZWZvcmUKKwkgKiBidWZmZXJzKS4KKwkgKgorCSAqIFdlIGRvIHRoaXMgYnkgYWxpZ25pbmcg dG8gdGhlIGxhcmdlciBvZiB0aGUgdHdvIHZhbHVlcyAod2Uga25vdyBib3RoCisJICogYXJl IHBvd2VyLW9mLXR3byB2YWx1ZXMsIHNvIHRoZSBsYXJnZXIgdmFsdWUgaXMgYXV0b21hdGlj YWxseSBhCisJICogbXVsdGlwbGUgb2YgdGhlIGxlc3NlciBvbmUpLgorCSAqCisJICogWFhY IE1heWJlIHRoZXJlJ3MgYSB3YXkgdG8gdXNlIGxlc3MgYWxpZ25tZW50PworCSAqCisJICog WFhYIE1heWJlIHdpdGggKG1lbV9wYWdlX3NpemUgPiBQR19JT19BTElHTl9TSVpFKSwgd2Ug ZG9uJ3QgbmVlZCB0bworCSAqIGFsaWduIHRvIG1lbV9wYWdlX3NpemU/IEVzcGVjaWFsbHkg Zm9yIHZlcnkgbGFyZ2UgaHVnZSBwYWdlcyAoZS5nLiAxR0IpCisJICogdGhhdCBkb2Vzbid0 IHNlZW0gcXVpdGUgd29ydGggaXQuIE1heWJlIHdlIHNob3VsZCBzaW1wbHkgYWxpZ24gdG8K KwkgKiBCTENLU1osIHNvIHRoYXQgYnVmZmVycyBkb24ndCBnZXQgc3BsaXQ/IFN0aWxsLCB3 ZSBtaWdodCBpbnRlcmZlcmUgd2l0aAorCSAqIG90aGVyIHN0dWZmIHN0b3JlZCBpbiBzaGFy ZWQgbWVtb3J5IHRoYXQgd2Ugd2FudCB0byBhbGxvY2F0ZSBvbiBhCisJICogcGFydGljdWxh ciBOVU1BIG5vZGUgKGUuZy4gUHJvY0FycmF5KS4KKwkgKgorCSAqIFhYWCBNYXliZSB3aXRo ICJ0b28gbGFyZ2UiIGh1Z2UgcGFnZXMgd2Ugc2hvdWxkIGp1c3Qgbm90IGRvIHRoaXMsIG9y CisJICogbWF5YmUgZG8gdGhpcyBvbmx5IGZvciBzdWZmaWNpZW50bHkgbGFyZ2UgYXJlYXMg KGUuZy4gc2hhcmVkIGJ1ZmZlcnMsCisJICogYnV0IG5vdCBQcm9jQXJyYXkpLgorCSAqLwor CWJ1ZmZlcl9hbGlnbiA9IE1heChtZW1fcGFnZV9zaXplLCBQR19JT19BTElHTl9TSVpFKTsK KworCS8qIG9uZSBwYWdlIGlzIGEgbXVsdGlwbGUgb2YgdGhlIG90aGVyICovCisJQXNzZXJ0 KCgobWVtX3BhZ2Vfc2l6ZSAlIFBHX0lPX0FMSUdOX1NJWkUpID09IDApIHx8CisJCSAgICgo UEdfSU9fQUxJR05fU0laRSAlIG1lbV9wYWdlX3NpemUpID09IDApKTsKIAotCS8qIEFsaWdu IGRlc2NyaXB0b3JzIHRvIGEgY2FjaGVsaW5lIGJvdW5kYXJ5LiAqLworCS8qCisJICogQWxp Z24gZGVzY3JpcHRvcnMgdG8gYSBjYWNoZWxpbmUgYm91bmRhcnksIGFuZCBtZW1vcnkgcGFn ZS4KKwkgKgorCSAqIFdlIHdhbnQgdG8gZGlzdHJpYnV0ZSBib3RoIHRvIE5VTUEgbm9kZXMs IHNvIHRoYXQgZWFjaCBidWZmZXIgYW5kIGl0J3MKKwkgKiBkZXNjcmlwdG9yIGFyZSBvbiB0 aGUgc2FtZSBOVU1BIG5vZGUuIFNvIHdlIGFsaWduIGJvdGggdGhlIHNhbWUgd2F5LgorCSAq CisJICogWFhYIFRoZSBtZW1vcnkgcGFnZSBpcyBhbHdheXMgbGFyZ2VyIHRoYW4gY2FjaGVs aW5lLCBzbyB0aGUgY2FjaGVsaW5lCisJICogcmVmZXJlbmNlIGlzIGEgYml0IHVubmVjZXNz YXJ5LgorCSAqCisJICogWFhYIEluIHByaW5jaXBsZSB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhp cyB3aXRoIE5VTUEsIG90aGVyd2lzZSB3ZSBjb3VsZAorCSAqIHN0aWxsIGFsaWduIGp1c3Qg dG8gY2FjaGVsaW5lLCBhcyBiZWZvcmUuCisJICovCiAJQnVmZmVyRGVzY3JpcHRvcnMgPSAo QnVmZmVyRGVzY1BhZGRlZCAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIkJ1ZmZlciBEZXNjcmlw dG9ycyIsCi0JCQkJCQlOQnVmZmVycyAqIHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSwKLQkJ CQkJCSZmb3VuZERlc2NzKTsKKwkJVFlQRUFMSUdOKGJ1ZmZlcl9hbGlnbiwKKwkJCQkgIFNo bWVtSW5pdFN0cnVjdCgiQnVmZmVyIERlc2NyaXB0b3JzIiwKKwkJCQkJCQkJICBOQnVmZmVy cyAqIHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSArIGJ1ZmZlcl9hbGlnbiwKKwkJCQkJCQkJ ICAmZm91bmREZXNjcykpOwogCiAJLyogQWxpZ24gYnVmZmVyIHBvb2wgb24gSU8gcGFnZSBz aXplIGJvdW5kYXJ5LiAqLwogCUJ1ZmZlckJsb2NrcyA9IChjaGFyICopCi0JCVRZUEVBTElH TihQR19JT19BTElHTl9TSVpFLAorCQlUWVBFQUxJR04oYnVmZmVyX2FsaWduLAogCQkJCSAg U2htZW1Jbml0U3RydWN0KCJCdWZmZXIgQmxvY2tzIiwKLQkJCQkJCQkJICBOQnVmZmVycyAq IChTaXplKSBCTENLU1ogKyBQR19JT19BTElHTl9TSVpFLAorCQkJCQkJCQkgIE5CdWZmZXJz ICogKFNpemUpIEJMQ0tTWiArIGJ1ZmZlcl9hbGlnbiwKIAkJCQkJCQkJICAmZm91bmRCdWZz KSk7CiAKIAkvKiBBbGlnbiBjb25kaXRpb24gdmFyaWFibGVzIHRvIGNhY2hlbGluZSBib3Vu ZGFyeS4gKi8KQEAgLTExMiw2ICsxOTUsNjMgQEAgQnVmZmVyTWFuYWdlclNobWVtSW5pdCh2 b2lkKQogCXsKIAkJaW50CQkJaTsKIAorCQkvKgorCQkgKiBBc3NpZ24gY2h1bmtzIG9mIGJ1 ZmZlcnMgYW5kIGJ1ZmZlciBkZXNjcmlwdG9ycyB0byB0aGUgYXZhaWxhYmxlCisJCSAqIE5V TUEgbm9kZXMuIFdlIGNhbid0IHVzZSB0aGUgcmVndWxhciBpbnRlcmxlYXZpbmcsIGJlY2F1 c2Ugd2l0aAorCQkgKiByZWd1bGFyIG1lbW9yeSBwYWdlcyAoc21hbGxlciB0aGFuIEJMQ0tT Wikgd2UnZCBzcGxpdCBhbGwgYnVmZmVycworCQkgKiB0byBtdWx0aXBsZSBOVU1BIG5vZGVz LiBBbmQgd2UgZG9uJ3Qgd2FudCB0aGF0LgorCQkgKgorCQkgKiBCdXQgZXZlbiB3aXRoIGh1 Z2UgcGFnZXMgaXQgc2VlbXMgbGlrZSBhIGdvb2QgaWRlYSB0byBub3QgaGF2ZQorCQkgKiBt YXBwaW5nIGZvciBlYWNoIHBhZ2UuCisJCSAqCisJCSAqIFNvIHdlIGFsd2F5cyBhc3NpZ24g YSBsYXJnZXIgY29udGlndW91cyBjaHVuayBvZiBidWZmZXJzIHRvIHRoZQorCQkgKiBzYW1l IE5VTUEgbm9kZSwgYXMgY2FsY3VsYXRlZCBieSBjaG9vc2VfY2h1bmtfYnVmZmVycygpLiBX ZSB0cnkgdG8KKwkJICoga2VlcCB0aGUgY2h1bmtzIGxhcmdlIGVub3VnaCB0byB3b3JrIGJv dGggZm9yIGJ1ZmZlcnMgYW5kIGJ1ZmZlcgorCQkgKiBkZXNjcmlwdG9ycywgYnV0IG5vdCB0 b28gbGFyZ2UuIFNlZSB0aGUgY29tbWVudHMgYXQKKwkJICogY2hvb3NlX2NodW5rX2J1ZmZl cnMoKSBmb3IgZGV0YWlscy4KKwkJICoKKwkJICogVGhhbmtzIHRvIHRoZSBlYXJsaWVyIGFs aWdubWVudCAodG8gbWVtb3J5IHBhZ2UgZXRjLiksIHdlIGtub3cgdGhlCisJCSAqIGJ1ZmZl cnMgd29uJ3QgZ2V0IHNwbGl0LCBldGMuCisJCSAqCisJCSAqIFRoaXMgYWxzbyBtYWtlcyBp dCBlYXNpZXIgLyBzdHJhaWdodGZvcndhcmQgdG8gY2FsY3VsYXRlIHdoaWNoIE5VTUEKKwkJ ICogbm9kZSBhIGJ1ZmZlciBiZWxvbmdzIHRvIChpdCdzIGEgbWF0dGVyIG9mIGRpdmlkZSAr IG1vZCkuIFNlZQorCQkgKiBCdWZmZXJHZXROb2RlKCkuCisJCSAqLworCQlpZiAobnVtYV9i dWZmZXJzX2ludGVybGVhdmUpCisJCXsKKwkJCWNoYXIJICAgKnN0YXJ0cHRyLAorCQkJCQkg ICAqZW5kcHRyOworCQkJU2l6ZQkJY2h1bmtfc2l6ZTsKKworCQkJbnVtYV9ub2RlcyA9IG51 bWFfbnVtX2NvbmZpZ3VyZWRfbm9kZXMoKTsKKworCQkJbnVtYV9jaHVua19idWZmZXJzCisJ CQkJPSBjaG9vc2VfY2h1bmtfYnVmZmVycyhOQnVmZmVycywgbWVtX3BhZ2Vfc2l6ZSwgbnVt YV9ub2Rlcyk7CisKKwkJCWVsb2coTE9HLCAiQnVmZmVyTWFuYWdlclNobWVtSW5pdCBudW1f bm9kZXMgJWQgY2h1bmtfYnVmZmVycyAlbGQiLAorCQkJCSBudW1hX25vZGVzLCBudW1hX2No dW5rX2J1ZmZlcnMpOworCisJCQkvKiBmaXJzdCBtYXAgYnVmZmVycyAqLworCQkJc3RhcnRw dHIgPSBCdWZmZXJCbG9ja3M7CisJCQllbmRwdHIgPSBzdGFydHB0ciArICgoU2l6ZSkgTkJ1 ZmZlcnMpICogQkxDS1NaOworCQkJY2h1bmtfc2l6ZSA9IChudW1hX2NodW5rX2J1ZmZlcnMg KiBCTENLU1opOworCisJCQlwZ19udW1hX2ludGVybGVhdmVfbWVtb3J5KHN0YXJ0cHRyLCBl bmRwdHIsCisJCQkJCQkJCQkgIG1lbV9wYWdlX3NpemUsCisJCQkJCQkJCQkgIGNodW5rX3Np emUsCisJCQkJCQkJCQkgIG51bWFfbm9kZXMpOworCisJCQkvKiBub3cgZG8gdGhlIHNhbWUg Zm9yIGJ1ZmZlciBkZXNjcmlwdG9ycyAqLworCQkJc3RhcnRwdHIgPSAoY2hhciAqKSBCdWZm ZXJEZXNjcmlwdG9yczsKKwkJCWVuZHB0ciA9IHN0YXJ0cHRyICsgKChTaXplKSBOQnVmZmVy cykgKiBzaXplb2YoQnVmZmVyRGVzY1BhZGRlZCk7CisJCQljaHVua19zaXplID0gKG51bWFf Y2h1bmtfYnVmZmVycyAqIHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSk7CisKKwkJCXBnX251 bWFfaW50ZXJsZWF2ZV9tZW1vcnkoc3RhcnRwdHIsIGVuZHB0ciwKKwkJCQkJCQkJCSAgbWVt X3BhZ2Vfc2l6ZSwKKwkJCQkJCQkJCSAgY2h1bmtfc2l6ZSwKKwkJCQkJCQkJCSAgbnVtYV9u b2Rlcyk7CisJCX0KKwogCQkvKgogCQkgKiBJbml0aWFsaXplIGFsbCB0aGUgYnVmZmVyIGhl YWRlcnMuCiAJCSAqLwpAQCAtMTQ0LDYgKzI4NCwxMSBAQCBCdWZmZXJNYW5hZ2VyU2htZW1J bml0KHZvaWQpCiAJCUdldEJ1ZmZlckRlc2NyaXB0b3IoTkJ1ZmZlcnMgLSAxKS0+ZnJlZU5l eHQgPSBGUkVFTkVYVF9FTkRfT0ZfTElTVDsKIAl9CiAKKwkvKgorCSAqIEFzIHRoaXMgcG9p bnQgd2UgaGF2ZSBhbGwgdGhlIGJ1ZmZlcnMgaW4gYSBzaW5nbGUgbG9uZyBmcmVlbGlzdC4g V2l0aAorCSAqIGZyZWVsaXN0IHBhcnRpdGlvbmluZyB3ZSByZWJ1aWxkIHRoZW0gaW4gU3Ry YXRlZ3lJbml0aWFsaXplLgorCSAqLworCiAJLyogSW5pdCBvdGhlciBzaGFyZWQgYnVmZmVy LW1hbmFnZW1lbnQgc3R1ZmYgKi8KIAlTdHJhdGVneUluaXRpYWxpemUoIWZvdW5kRGVzY3Mp OwogCkBAIC0xNTIsMjQgKzI5Nyw3MiBAQCBCdWZmZXJNYW5hZ2VyU2htZW1Jbml0KHZvaWQp CiAJCQkJCQkgJmJhY2tlbmRfZmx1c2hfYWZ0ZXIpOwogfQogCisvKgorICogRGV0ZXJtaW5l IHRoZSBzaXplIG9mIG1lbW9yeSBwYWdlLgorICoKKyAqIFhYWCBUaGlzIGlzIGEgYml0IHRy aWNreSwgYmVjYXVzZSB0aGUgcmVzdWx0IGRlcGVuZHMgYXQgd2hpY2ggcG9pbnQgd2UgY2Fs bAorICogdGhpcy4gQmVmb3JlIHRoZSBhbGxvY2F0aW9uIHdlIGRvbid0IGtub3cgaWYgd2Ug c3VjY2VlZCBpbiBhbGxvY2F0aW5nIGh1Z2UKKyAqIHBhZ2VzIC0gYnV0IHdlIGhhdmUgdG8g c2l6ZSBldmVyeXRoaW5nIGZvciB0aGUgY2hhbmNlIHRoYXQgd2Ugd2lsbC4gQW5kIHRoZW4K KyAqIGlmIHRoZSBodWdlIHBhZ2VzIGZhaWwgKHdpdGggJ2h1Z2VfcGFnZXM9dHJ5JyksIHdl J2xsIHVzZSB0aGUgcmVndWxhciBtZW1vcnkKKyAqIHBhZ2VzLiBCdXQgYXQgdGhhdCBwb2lu dCB3ZSBjYW4ndCBhZGp1c3QgdGhlIHNpemluZy4KKyAqCisgKiBYWFggTWF5YmUgd2l0aCBo dWdlX3BhZ2VzPXRyeSB3ZSBzaG91bGQgZG8gdGhlIHNpemluZyB0d2ljZSAtIGZpcnN0IHdp dGgKKyAqIGh1Z2UgcGFnZXMsIGFuZCBpZiB0aGF0IGZhaWxzLCB0aGVuIHdpdGhvdXQgdGhl bS4gQnV0IG5vdCBmb3IgdGhpcyBwYXRjaC4KKyAqIFVwIHRvIHRoaXMgcG9pbnQgdGhlcmUg d2FzIG5vIHN1Y2ggZGVwZW5kZW5jeSBvbiBodWdlIHBhZ2VzLgorICovCitzdGF0aWMgU2l6 ZQorZ2V0X21lbW9yeV9wYWdlX3NpemUodm9pZCkKK3sKKwlTaXplCQlvc19wYWdlX3NpemU7 CisJU2l6ZQkJaHVnZV9wYWdlX3NpemU7CisKKyNpZmRlZiBXSU4zMgorCVNZU1RFTV9JTkZP IHN5c2luZm87CisKKwlHZXRTeXN0ZW1JbmZvKCZzeXNpbmZvKTsKKwlvc19wYWdlX3NpemUg PSBzeXNpbmZvLmR3UGFnZVNpemU7CisjZWxzZQorCW9zX3BhZ2Vfc2l6ZSA9IHN5c2NvbmYo X1NDX1BBR0VTSVpFKTsKKyNlbmRpZgorCisJLyogYXNzdW1lIGh1Z2UgcGFnZXMgZ2V0IHVz ZWQsIHVubGVzcyBIVUdFX1BBR0VTX09GRiAqLworCWlmIChodWdlX3BhZ2VzX3N0YXR1cyAh PSBIVUdFX1BBR0VTX09GRikKKwkJR2V0SHVnZVBhZ2VTaXplKCZodWdlX3BhZ2Vfc2l6ZSwg TlVMTCk7CisJZWxzZQorCQlodWdlX3BhZ2Vfc2l6ZSA9IDA7CisKKwlyZXR1cm4gTWF4KG9z X3BhZ2Vfc2l6ZSwgaHVnZV9wYWdlX3NpemUpOworfQorCiAvKgogICogQnVmZmVyTWFuYWdl clNobWVtU2l6ZQogICoKICAqIGNvbXB1dGUgdGhlIHNpemUgb2Ygc2hhcmVkIG1lbW9yeSBm b3IgdGhlIGJ1ZmZlciBwb29sIGluY2x1ZGluZwogICogZGF0YSBwYWdlcywgYnVmZmVyIGRl c2NyaXB0b3JzLCBoYXNoIHRhYmxlcywgZXRjLgorICoKKyAqIFhYWCBDYWxsZWQgYmVmb3Jl IGFsbG9jYXRpb24sIHNvIHdlIGRvbid0IGtub3cgaWYgaHVnZSBwYWdlcyBnZXQgdXNlZCB5 ZXQuCisgKiBTbyB3ZSBuZWVkIHRvIGFzc3VtZSBodWdlIHBhZ2VzIGdldCB1c2VkLCBhbmQg dXNlIGdldF9tZW1vcnlfcGFnZV9zaXplKCkKKyAqIHRvIGNhbGN1bGF0ZSB0aGUgbGFyZ2Vz dCBwb3NzaWJsZSBtZW1vcnkgcGFnZS4KICAqLwogU2l6ZQogQnVmZmVyTWFuYWdlclNobWVt U2l6ZSh2b2lkKQogewogCVNpemUJCXNpemUgPSAwOworCVNpemUJCW1lbV9wYWdlX3NpemU7 CisKKwkvKiBYWFggd2h5IGRvZXMgSXNVbmRlclBvc3RtYXN0ZXIgbWF0dGVyPyAqLworCWlm IChJc1VuZGVyUG9zdG1hc3RlcikKKwkJbWVtX3BhZ2Vfc2l6ZSA9IHBnX2dldF9zaG1lbV9w YWdlc2l6ZSgpOworCWVsc2UKKwkJbWVtX3BhZ2Vfc2l6ZSA9IGdldF9tZW1vcnlfcGFnZV9z aXplKCk7CiAKIAkvKiBzaXplIG9mIGJ1ZmZlciBkZXNjcmlwdG9ycyAqLwogCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShOQnVmZmVycywgc2l6ZW9mKEJ1ZmZlckRlc2NQYWRk ZWQpKSk7CiAJLyogdG8gYWxsb3cgYWxpZ25pbmcgYnVmZmVyIGRlc2NyaXB0b3JzICovCi0J c2l6ZSA9IGFkZF9zaXplKHNpemUsIFBHX0NBQ0hFX0xJTkVfU0laRSk7CisJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIE1heChtZW1fcGFnZV9zaXplLCBQR19JT19BTElHTl9TSVpFKSk7CiAK IAkvKiBzaXplIG9mIGRhdGEgcGFnZXMsIHBsdXMgYWxpZ25tZW50IHBhZGRpbmcgKi8KLQlz aXplID0gYWRkX3NpemUoc2l6ZSwgUEdfSU9fQUxJR05fU0laRSk7CisJc2l6ZSA9IGFkZF9z aXplKHNpemUsIE1heChtZW1fcGFnZV9zaXplLCBQR19JT19BTElHTl9TSVpFKSk7CiAJc2l6 ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKE5CdWZmZXJzLCBCTENLU1opKTsKIAogCS8q IHNpemUgb2Ygc3R1ZmYgY29udHJvbGxlZCBieSBmcmVlbGlzdC5jICovCkBAIC0xODYsMyAr Mzc5LDE3OCBAQCBCdWZmZXJNYW5hZ2VyU2htZW1TaXplKHZvaWQpCiAKIAlyZXR1cm4gc2l6 ZTsKIH0KKworLyoKKyAqIGNob29zZV9jaHVua19idWZmZXJzCisgKgkJY2hvb3NlIHRoZSBu dW1iZXIgb2YgYnVmZmVycyBhbGxvY2F0ZWQgdG8gYSBOVU1BIG5vZGUgYXQgb25jZQorICoK KyAqIFdlIGRvbid0IG1hcCBzaGFyZWQgYnVmZmVycyB0byBOVU1BIG5vZGVzIG9uZSBieSBv bmUsIGJ1dCBpbiBsYXJnZXIgY2h1bmtzLgorICogVGhpcyBpcyBib3RoIGZvciBlZmZpY2ll bmN5IHJlYXNvbnMgKGZld2VyIG1hcHBpbmdzKSwgYW5kIGFsc28gYmVjYXVzZSB3ZQorICog d2FudCB0byBtYXAgYnVmZmVyIGRlc2NyaXB0b3JzIHRvbyAtIGFuZCBkZXNjcmlwdG9ycyBh cmUgbXVjaCBzbWFsbGVyLiBTbworICogd2UgcGljayBhIG51bWJlciB0aGF0J3MgaGlnaCBl bm91Z2ggZm9yIGRlc2NyaXB0b3JzIHRvIHVzZSB3aG9sZSBwYWdlcy4KKyAqCisgKiBXZSBh bHNvIHdhbnQgdG8ga2VlcCBidWZmZXJzIHNvbWVob3cgZXZlbmx5IGRpc3RyaWJ1dGVkIG9u IG5vZGVzLCB3aXRoCisgKiBhYm91dCBOQnVmZmVycy9ub2RlcyBwZXIgbm9kZS4gU28gd2Ug ZG9uJ3QgdXNlIGNodW5rcyBsYXJnZXIgdGhhbiB0aGlzLAorICogdG8ga2VlcCBpdCBhcyBm YWlyIGFzIHBvc3NpYmxlICh0aGUgY2h1bmsgc2l6ZSBpcyBhIHBvc3NpYmxlIGRpZmZlcmVu Y2UKKyAqIGJldHdlZW4gbWVtb3J5IGFsbG9jYXRlZCB0byBkaWZmZXJlbnQgTlVNQSBub2Rl cykuCisgKgorICogSXQncyBwb3NzaWJsZSBzaGFyZWQgYnVmZmVycyBhcmUgc28gc21hbGwg dGhpcyBpcyBub3QgcG9zc2libGUgKGkuZS4KKyAqIGl0J3MgbGVzcyB0aGFuIGNodW5rX3Np emUpLiBCdXQgc2Vuc2libGUgTlVNQSBzeXN0ZW1zIHdpbGwgdXNlIGEgbG90CisgKiBvZiBt ZW1vcnksIHNvIHRoaXMgaXMgdW5saWtlbHkuCisgKgorICogV2Ugc2ltcGx5IHByaW50IGEg d2FybmluZyBhYm91dCB0aGUgbWlzYmFsYW5jZSwgYW5kIHRoYXQncyBpdC4KKyAqCisgKiBY WFggSXQnZCBiZSBnb29kIHRvIGVuc3VyZSB0aGUgY2h1bmsgc2l6ZSBpcyBhIHBvd2VyLW9m LTIsIGJlY2F1c2UgdGhlbgorICogd2UgY291bGQgY2FsY3VsYXRlIHRoZSBOVU1BIG5vZGUg c2ltcGx5IGJ5IHNoaWZ0L21vZHVsbywgd2hpbGUgbm93IHdlCisgKiBoYXZlIHRvIGRvIGEg ZGl2aXNpb24uIEJ1dCB3ZSBkb24ndCBrbm93IGhvdyBtYW55IGJ1ZmZlcnMgYW5kIGJ1ZmZl cgorICogZGVzY3JpcHRvcnMgZml0cyBpbnRvIGEgbWVtb3J5IHBhZ2UuIEl0IG1heSBub3Qg YmUgYSBwb3dlci1vZi0yLgorICovCitzdGF0aWMgaW50NjQKK2Nob29zZV9jaHVua19idWZm ZXJzKGludCBOQnVmZmVycywgU2l6ZSBtZW1fcGFnZV9zaXplLCBpbnQgbnVtX25vZGVzKQor eworCWludDY0CQludW1faXRlbXM7CisJaW50NjQJCW1heF9pdGVtczsKKworCS8qIG1ha2Ug c3VyZSB0aGUgY2h1bmtzIHdpbGwgYWxpZ24gbmljZWx5ICovCisJQXNzZXJ0KEJMQ0tTWiAl IHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSA9PSAwKTsKKwlBc3NlcnQobWVtX3BhZ2Vfc2l6 ZSAlIHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSA9PSAwKTsKKwlBc3NlcnQoKChCTENLU1og JSBtZW1fcGFnZV9zaXplKSA9PSAwKSB8fCAoKG1lbV9wYWdlX3NpemUgJSBCTENLU1opID09 IDApKTsKKworCS8qCisJICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIGZpbGwg YSBtZW1vcnkgcGFnZSB3aXRoIGRlc2NyaXB0b3JzIGFuZAorCSAqIGJsb2Nrcy4gVGhlIE5V TUEgYWxsb2NhdGVzIG1lbW9yeSBpbiBwYWdlcywgYW5kIHdlIG5lZWQgdG8gZG8gdGhhdCBm b3IKKwkgKiBib3RoIGJ1ZmZlcnMgYW5kIGRlc2NyaXB0b3JzLgorCSAqCisJICogSW4gcHJh Y3RpY2UgdGhlIEJMQ0tTWiBkb2Vzbid0IHJlYWxseSBtYXR0ZXIsIGJlY2F1c2UgaXQncyBt dWNoIGxhcmdlcgorCSAqIHRoYW4gQnVmZmVyRGVzY1BhZGRlZCwgc28gdGhlIHJlc3VsdCBp cyBkZXRlcm1pbmVkIGJ1ZmZlciBkZXNjcmlwdG9ycy4KKwkgKiBCdXQgaXQncyBjbGVhcmVy IHRoaXMgd2F5LgorCSAqLworCW51bV9pdGVtcyA9IE1heChtZW1fcGFnZV9zaXplIC8gc2l6 ZW9mKEJ1ZmZlckRlc2NQYWRkZWQpLAorCQkJCQltZW1fcGFnZV9zaXplIC8gQkxDS1NaKTsK KworCS8qCisJICogV2Ugc2hvdWxkbid0IHVzZSBjaHVua3MgbGFyZ2VyIHRoYW4gTkJ1ZmZl cnMvbnVtX25vZGVzLCBiZWNhdXNlIHdpdGgKKwkgKiBsYXJnZXIgY2h1bmtzIHRoZSBsYXN0 IE5VTUEgbm9kZSB3b3VsZCBlbmQgdXAgd2l0aCBtdWNoIGxlc3MgbWVtb3J5IChvcgorCSAq IG5vIG1lbW9yeSBhdCBhbGwpLgorCSAqLworCW1heF9pdGVtcyA9IChOQnVmZmVycyAvIG51 bV9ub2Rlcyk7CisKKwkvKgorCSAqIERpZCB3ZSBhbHJlYWR5IGV4Y2VlZCB0aGUgbWF4aW11 bSBkZXNpcmFibGUgY2h1bmsgc2l6ZT8gVGhhdCBpcywgd2lsbAorCSAqIHRoZSBsYXN0IG5v ZGUgZ2V0IGxlc3MgdGhhbiBvbmUgd2hvbGUgY2h1bmsgKG9yIG5vIG1lbW9yeSBhdCBhbGwp PworCSAqLworCWlmIChudW1faXRlbXMgPiBtYXhfaXRlbXMpCisJCWVsb2coV0FSTklORywg ImNob29zZV9jaHVua19idWZmZXJzOiBjaHVuayBpdGVtcyBleGNlZWRzIG1heCAoJWxkID4g JWxkKSIsCisJCQkgbnVtX2l0ZW1zLCBtYXhfaXRlbXMpOworCisJLyogZ3JvdyB0aGUgY2h1 bmsgc2l6ZSB1bnRpbCB3ZSBoaXQgdGhlIG1heCBsaW1pdC4gKi8KKwl3aGlsZSAoMiAqIG51 bV9pdGVtcyA8PSBtYXhfaXRlbXMpCisJCW51bV9pdGVtcyAqPSAyOworCisJLyoKKwkgKiBY WFggSXQncyBub3QgZGlmZmljdWx0IHRvIGNvbnN0cnVjdCBjYXNlcyB3aGVyZSB3ZSBlbmQg dXAgd2l0aCBub3QKKwkgKiBxdWl0ZSBiYWxhbmNlZCBkaXN0cmlidXRpb24uIEZvciBleGFt cGxlLCB3aXRoIHNoYXJlZF9idWZmZXJzPTEwR0IgYW5kCisJICogNCBOVU1BIG5vZGVzLCB3 ZSBlbmQgdXAgd2l0aCAyR0IgY2h1bmtzLCB3aGljaCBtZWFucyB0aGUgZmlyc3Qgbm9kZQor CSAqIGdldHMgNEdCLCBhbmQgdGhlIHRocmVlIG90aGVyIG5vZGVzIGdldCAyR0IgZWFjaC4K KwkgKgorCSAqIFdlIGNvdWxkIGJlIHNtYXJ0ZXIsIGFuZCB0cnkgdG8gZ2V0IG1vcmUgYmFs YW5jZWQgZGlzdHJpYnV0aW9uLiBXZQorCSAqIGNvdWxkIHNpbXBseSByZWR1Y2UgbWF4X2l0 ZW1zIGUuZy4gdG8KKwkgKgorCSAqIG1heF9pdGVtcyA9IChOQnVmZmVycyAvIG51bV9ub2Rl cykgLyA0OworCSAqCisJICogaW4gd2hpY2ggY2FzZXMgd2UnZCBlbmQgdXAgd2l0aCA1MTJN QiBjaHVua3MsIGFuZCBlYWNoIG5vZGVzIHdvdWxkIGdldAorCSAqIHRoZSBzYW1lIDIuNUdC IGNodW5rLiBJdCBtYXkgbm90IGFsd2F5cyB3b3JrIG91dCB0aGlzIG5pY2VseSwgYnV0IGl0 J3MKKwkgKiBiZXR0ZXIgdGhhbiB3aXRoIChOQnVmZmVycyAvIG51bV9ub2RlcykuCisJICoK KwkgKiBBbHRlcm5hdGl2ZWx5LCB3ZSBjb3VsZCAiYmFja3RyYWNrIiAtIHRyeSB3aXRoIHRo ZSBsYXJnZSBtYXhfaXRlbXMsCisJICogY2hlY2sgaG93IGJhbGFuY2VkIGl0IGlzLCBhbmQg aWYgaXQncyB0b28gaW1iYWxhbmNlZCwgdHJ5IHdpdGggYQorCSAqIHNtYWxsZXIgb25lLgor CSAqCisJICogV2UgaG93ZXZlciB3YW50IGEgc2ltcGxlIHNjaGVtZS4KKwkgKi8KKworCXJl dHVybiBudW1faXRlbXM7Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIE5VTUEgbm9kZSBm b3IgYSBnaXZlbiBidWZmZXIuCisgKi8KK2ludAorQnVmZmVyR2V0Tm9kZShCdWZmZXIgYnVm ZmVyKQoreworCS8qIG5vdCBOVU1BIGludGVybGVhdmluZyAqLworCWlmIChudW1hX2NodW5r X2J1ZmZlcnMgPT0gLTEpCisJCXJldHVybiAtMTsKKworCXJldHVybiAoYnVmZmVyIC8gbnVt YV9jaHVua19idWZmZXJzKSAlIG51bWFfbm9kZXM7Cit9CisKKy8qCisgKiBwZ19udW1hX2lu dGVybGVhdmVfbWVtb3J5CisgKgkJbW92ZSBtZW1vcnkgdG8gZGlmZmVyZW50IE5VTUEgbm9k ZXMgaW4gbGFyZ2VyIGNodW5rcworICoKKyAqIHN0YXJ0cHRyIC0gc3RhcnQgb2YgdGhlIHJl Z2lvbiAoc2hvdWxkIGJlIGFsaWduZWQgdG8gcGFnZSBzaXplKQorICogZW5kcHRyIC0gZW5k IG9mIHRoZSByZWdpb24gKGRvZXNuJ3QgbmVlZCB0byBiZSBhbGlnbmVkKQorICogbWVtX3Bh Z2Vfc2l6ZSAtIHNpemUgb2YgdGhlIG1lbW9yeSBwYWdlIHNpemUKKyAqIGNodW5rX3NpemUg LSBzaXplIG9mIHRoZSBjaHVuayB0byBtb3ZlIHRvIGEgc2luZ2xlIG5vZGUgKHNob3VsZCBi ZSBtdWx0aXBsZQorICogICAgICAgICAgICAgIG9mIHBhZ2Ugc2l6ZQorICogbnVtX25vZGVz IC0gbnVtYmVyIG9mIG5vZGVzIHRvIGFsbG9jYXRlIG1lbW9yeSB0bworICoKKyAqIFhYWCBN YXliZSB0aGlzIHNob3VsZCB1c2UgbnVtYV90b25vZGVfbWVtb3J5IGFuZCBudW1hX3BvbGlj ZV9tZW1vcnkgaW5zdGVhZD8KKyAqIFRoYXQgbWlnaHQgYmUgbW9yZSBlZmZpY2llbnQgdGhh biBudW1hX21vdmVfcGFnZXMsIGFzIGl0IHdvcmtzIG9uIGxhcmdlcgorICogY2h1bmtzIG9m IG1lbW9yeSwgbm90IGluZGl2aWR1YWwgc3lzdGVtIHBhZ2VzLCBJIHRoaW5rLgorICoKKyAq IFhYWCBUaGUgImludGVybGVhdmUiIG5hbWUgaXMgbm90IHF1aXRlIGFjY3VyYXRlLCBJIGd1 ZXNzLgorICovCitzdGF0aWMgdm9pZAorcGdfbnVtYV9pbnRlcmxlYXZlX21lbW9yeShjaGFy ICpzdGFydHB0ciwgY2hhciAqZW5kcHRyLAorCQkJCQkJICBTaXplIG1lbV9wYWdlX3NpemUs IFNpemUgY2h1bmtfc2l6ZSwKKwkJCQkJCSAgaW50IG51bV9ub2RlcykKK3sKKwl2b2xhdGls ZSB1aW50NjQgdG91Y2ggcGdfYXR0cmlidXRlX3VudXNlZCgpOworCWNoYXIJICAgKnB0ciA9 IHN0YXJ0cHRyOworCisJLyogY2h1bmsgc2l6ZSBoYXMgdG8gYmUgYSBtdWx0aXBsZSBvZiBt ZW1vcnkgcGFnZSAqLworCUFzc2VydCgoY2h1bmtfc2l6ZSAlIG1lbV9wYWdlX3NpemUpID09 IDApOworCisJLyoKKwkgKiBXYWxrIHRoZSBtZW1vcnkgcGFnZXMgaW4gdGhlIHJhbmdlLCBh bmQgZGV0ZXJtaW5lIHRoZSBub2RlIGZvciBlYWNoCisJICogb25lLiBXZSB1c2UgbnVtYV90 b25vZGVfbWVtb3J5KCksIGJlY2F1c2UgdGhlbiB3ZSBjYW4gbW92ZSBhIHdob2xlCisJICog bWVtb3J5IHJhbmdlIHRvIHRoZSBub2RlLCB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0 IGluZGl2aWR1YWwgcGFnZXMKKwkgKiBsaWtlIHdpdGggbnVtYV9tb3ZlX3BhZ2VzKCkuCisJ ICovCisJd2hpbGUgKHB0ciA8IGVuZHB0cikKKwl7CisJCS8qIFdlIG1heSBoYXZlIGFuIGlu Y29tcGxldGUgY2h1bmsgYXQgdGhlIGVuZC4gKi8KKwkJU2l6ZQkJc3ogPSBNaW4oY2h1bmtf c2l6ZSwgKGVuZHB0ciAtIHB0cikpOworCisJCS8qCisJCSAqIFdoYXQgTlVNQSBub2RlIGRv ZXMgdGhpcyByYW5nZSBiZWxvbmcgdG8/IEVhY2ggY2h1bmsgc2hvdWxkIGdvIHRvCisJCSAq IHRoZSBzYW1lIE5VTUEgbm9kZSwgaW4gYSByb3VuZC1yb2JpbiBtYW5uZXIuCisJCSAqLwor CQlpbnQJCQlub2RlID0gKChwdHIgLSBzdGFydHB0cikgLyBjaHVua19zaXplKSAlIG51bV9u b2RlczsKKworCQkvKgorCQkgKiBOb3BlLCB3ZSBoYXZlIHRoZSBmaXJzdCBidWZmZXIgZnJv bSB0aGUgbmV4dCBtZW1vcnkgcGFnZSwgYW5kIHdlJ2xsCisJCSAqIHNldCBOVU1BIG5vZGUg Zm9yIGl0IChhbmQgYWxsIHBhZ2VzIHVwIHRvIHRoZSBuZXh0IGJ1ZmZlcikuIFRoZQorCQkg KiBidWZmZXIgc2hvdWxkIGFsaWduIHdpdGggdGhlIG1lbW9yeSBwYWdlLCB0aGFua3MgdG8g dGhlCisJCSAqIGJ1ZmZlcl9hbGlnbiBlYXJsaWVyLgorCQkgKi8KKwkJQXNzZXJ0KChpbnQ2 NCkgcHRyICUgbWVtX3BhZ2Vfc2l6ZSA9PSAwKTsKKwkJQXNzZXJ0KChzeiAlIG1lbV9wYWdl X3NpemUpID09IDApOworCisJCS8qCisJCSAqIFhYWCBubyByZXR1cm4gdmFsdWUsIHRvIG1h a2UgdGhpcyBmYWlsIG9uIGVycm9yLCBoYXMgdG8gdXNlCisJCSAqIG51bWFfc2V0X3N0cmlj dAorCQkgKgorCQkgKiBYWFggU2hvdWxkIHdlIHN0aWxsIHRvdWNoIHRoZSBtZW1vcnkgZmly c3QsIGxpa2Ugd2l0aCBudW1hX21vdmVfcGFnZXMsCisJCSAqIG9yIGlzIHRoYXQgbm90IG5l Y2Vzc2FyeT8KKwkJICovCisJCW51bWFfdG9ub2RlX21lbW9yeShwdHIsIHN6LCBub2RlKTsK KworCQlwdHIgKz0gc3o7CisJfQorCisJLyogc2hvdWxkIGhhdmUgcHJvY2Vzc2VkIGFsbCBj aHVua3MgKi8KKwlBc3NlcnQocHRyID09IGVuZHB0cik7Cit9CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jCmluZGV4IDQwNmNlNzc2OTNjLi5lMWUxY2ZkMzc5ZCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTY4NSw2ICs2ODUsNyBAQCBSZWFk UmVjZW50QnVmZmVyKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtO dW0sIEJsb2NrTnVtYmVyIGJsb2NrTgogCUJ1ZmZlckRlc2MgKmJ1ZkhkcjsKIAlCdWZmZXJU YWcJdGFnOwogCXVpbnQzMgkJYnVmX3N0YXRlOworCiAJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQo cmVjZW50X2J1ZmZlcikpOwogCiAJUmVzb3VyY2VPd25lckVubGFyZ2UoQ3VycmVudFJlc291 cmNlT3duZXIpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxz LmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwppbmRleCBkMzFjYjQ1YTA1 OC4uODc2Y2I2NGNmNjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xv YmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCkBAIC0xNDUs NiArMTQ1LDkgQEAgaW50CQkJbWF4X3dvcmtlcl9wcm9jZXNzZXMgPSA4OwogaW50CQkJbWF4 X3BhcmFsbGVsX3dvcmtlcnMgPSA4OwogaW50CQkJTWF4QmFja2VuZHMgPSAwOwogCisvKiBO VU1BIHN0dWZmICovCitib29sCQludW1hX2J1ZmZlcnNfaW50ZXJsZWF2ZSA9IGZhbHNlOwor CiAvKiBHVUMgcGFyYW1ldGVycyBmb3IgdmFjdXVtICovCiBpbnQJCQlWYWN1dW1CdWZmZXJV c2FnZUxpbWl0ID0gMjA0ODsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpp bmRleCA1MTFkYzMyZDUxOS4uMTk4YTU3ZTcwYTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3RhYmxlcy5jCkBAIC0yMTE2LDYgKzIxMTYsMTYgQEAgc3RydWN0IGNvbmZpZ19ib29s IENvbmZpZ3VyZU5hbWVzQm9vbFtdID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCiAKKwl7 CisJCXsibnVtYV9idWZmZXJzX2ludGVybGVhdmUiLCBQR0NfUE9TVE1BU1RFUiwgREVWRUxP UEVSX09QVElPTlMsCisJCQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMgTlVNQSBpbnRlcmxlYXZp bmcgb2Ygc2hhcmVkIGJ1ZmZlcnMuIiksCisJCQlnZXR0ZXh0X25vb3AoIldoZW4gZW5hYmxl ZCwgdGhlIGJ1ZmZlcnMgaW4gc2hhcmVkIG1lbW9yeSBhcmUgaW50ZXJsZWF2ZWQgdG8gYWxs IE5VTUEgbm9kZXMuIiksCisJCX0sCisJCSZudW1hX2J1ZmZlcnNfaW50ZXJsZWF2ZSwKKwkJ ZmFsc2UsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCiAJewogCQl7InN5bmNfcmVwbGlj YXRpb25fc2xvdHMiLCBQR0NfU0lHSFVQLCBSRVBMSUNBVElPTl9TVEFOREJZLAogCQkJZ2V0 dGV4dF9ub29wKCJFbmFibGVzIGEgcGh5c2ljYWwgc3RhbmRieSB0byBzeW5jaHJvbml6ZSBs b2dpY2FsIGZhaWxvdmVyIHJlcGxpY2F0aW9uIHNsb3RzIGZyb20gdGhlIHByaW1hcnkgc2Vy dmVyLiIpLApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyBiL3NyYy9i aW4vcGdiZW5jaC9wZ2JlbmNoLmMKaW5kZXggNjliNmE4NzdkYzkuLmMwN2RlOTAzZjc2IDEw MDY0NAotLS0gYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCisrKyBiL3NyYy9iaW4vcGdi ZW5jaC9wZ2JlbmNoLmMKQEAgLTMwNSw3ICszMDUsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAq cHJvZ25hbWU7CiAjZGVmaW5lCUNQVV9QSU5OSU5HX1JBTkRPTQkJMQogI2RlZmluZQlDUFVf UElOTklOR19DT0xPQ0FURUQJMgogCi1zdGF0aWMgaW50IHBpbm5pbmdfbW9kZSA9IENQVV9Q SU5OSU5HX05PTkU7CitzdGF0aWMgaW50CXBpbm5pbmdfbW9kZSA9IENQVV9QSU5OSU5HX05P TkU7CiAKICNkZWZpbmUgV1NFUCAnQCcJCQkJLyogd2VpZ2h0IHNlcGFyYXRvciAqLwogCkBA IC04NzQsMjAgKzg3NCwyMCBAQCBzdGF0aWMgYm9vbCBzb2NrZXRfaGFzX2lucHV0KHNvY2tl dF9zZXQgKnNhLCBpbnQgZmQsIGludCBpZHgpOwogICovCiB0eXBlZGVmIHN0cnVjdCBjcHVf Z2VuZXJhdG9yX3N0YXRlCiB7Ci0JaW50CQluY3B1czsJCS8qIG51bWJlciBvZiBDUFVzIGF2 YWlsYWJsZSAqLwotCWludAkJbml0ZW1zOwkJLyogbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBx dWV1ZSAqLwotCWludAkgICAqbnRocmVhZHM7CS8qIG51bWJlciBvZiB0aHJlYWRzIGZvciBl YWNoIENQVSAqLwotCWludAkgICAqbmNsaWVudHM7CS8qIG51bWJlciBvZiBwcm9jZXNzZXMg Zm9yIGVhY2ggQ1BVICovCi0JaW50CSAgICppdGVtczsJCS8qIHF1ZXVlIG9mIENQVXMgdG8g cGljayBmcm9tICovCi19IGNwdV9nZW5lcmF0b3Jfc3RhdGU7CisJaW50CQkJbmNwdXM7CQkJ LyogbnVtYmVyIG9mIENQVXMgYXZhaWxhYmxlICovCisJaW50CQkJbml0ZW1zOwkJCS8qIG51 bWJlciBvZiBpdGVtcyBpbiB0aGUgcXVldWUgKi8KKwlpbnQJCSAgICpudGhyZWFkczsJCS8q IG51bWJlciBvZiB0aHJlYWRzIGZvciBlYWNoIENQVSAqLworCWludAkJICAgKm5jbGllbnRz OwkJLyogbnVtYmVyIG9mIHByb2Nlc3NlcyBmb3IgZWFjaCBDUFUgKi8KKwlpbnQJCSAgICpp dGVtczsJCQkvKiBxdWV1ZSBvZiBDUFVzIHRvIHBpY2sgZnJvbSAqLworfQkJCWNwdV9nZW5l cmF0b3Jfc3RhdGU7CiAKIHN0YXRpYyBjcHVfZ2VuZXJhdG9yX3N0YXRlIGNwdV9nZW5lcmF0 b3JfaW5pdChpbnQgbmNwdXMpOwotc3RhdGljIHZvaWQgY3B1X2dlbmVyYXRvcl9yZWZpbGwo Y3B1X2dlbmVyYXRvcl9zdGF0ZSAqc3RhdGUpOwotc3RhdGljIHZvaWQgY3B1X2dlbmVyYXRv cl9yZXNldChjcHVfZ2VuZXJhdG9yX3N0YXRlICpzdGF0ZSk7Ci1zdGF0aWMgaW50IGNwdV9n ZW5lcmF0b3JfdGhyZWFkKGNwdV9nZW5lcmF0b3Jfc3RhdGUgKnN0YXRlKTsKLXN0YXRpYyBp bnQgY3B1X2dlbmVyYXRvcl9jbGllbnQoY3B1X2dlbmVyYXRvcl9zdGF0ZSAqc3RhdGUsIGlu dCB0aHJlYWRfY3B1KTsKLXN0YXRpYyB2b2lkIGNwdV9nZW5lcmF0b3JfcHJpbnQoY3B1X2dl bmVyYXRvcl9zdGF0ZSAqc3RhdGUpOwotc3RhdGljIGJvb2wgY3B1X2dlbmVyYXRvcl9jaGVj ayhjcHVfZ2VuZXJhdG9yX3N0YXRlICpzdGF0ZSk7CitzdGF0aWMgdm9pZCBjcHVfZ2VuZXJh dG9yX3JlZmlsbChjcHVfZ2VuZXJhdG9yX3N0YXRlICogc3RhdGUpOworc3RhdGljIHZvaWQg Y3B1X2dlbmVyYXRvcl9yZXNldChjcHVfZ2VuZXJhdG9yX3N0YXRlICogc3RhdGUpOworc3Rh dGljIGludAljcHVfZ2VuZXJhdG9yX3RocmVhZChjcHVfZ2VuZXJhdG9yX3N0YXRlICogc3Rh dGUpOworc3RhdGljIGludAljcHVfZ2VuZXJhdG9yX2NsaWVudChjcHVfZ2VuZXJhdG9yX3N0 YXRlICogc3RhdGUsIGludCB0aHJlYWRfY3B1KTsKK3N0YXRpYyB2b2lkIGNwdV9nZW5lcmF0 b3JfcHJpbnQoY3B1X2dlbmVyYXRvcl9zdGF0ZSAqIHN0YXRlKTsKK3N0YXRpYyBib29sIGNw dV9nZW5lcmF0b3JfY2hlY2soY3B1X2dlbmVyYXRvcl9zdGF0ZSAqIHN0YXRlKTsKIAogc3Rh dGljIHZvaWQgcmVzZXRfcGlubmluZyhUU3RhdGUgKnRocmVhZHMsIGludCBudGhyZWFkcyk7 CiAKQEAgLTc0MjIsNyArNzQyMiw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog CS8qIHRyeSB0byBhc3NpZ24gdGhyZWFkcy9jbGllbnRzIHRvIENQVXMgKi8KIAlpZiAocGlu bmluZ19tb2RlICE9IENQVV9QSU5OSU5HX05PTkUpCiAJewotCQlpbnQgbnByb2NzID0gZ2V0 X25wcm9jcygpOworCQlpbnQJCQlucHJvY3MgPSBnZXRfbnByb2NzKCk7CiAJCWNwdV9nZW5l cmF0b3Jfc3RhdGUgc3RhdGUgPSBjcHVfZ2VuZXJhdG9yX2luaXQobnByb2NzKTsKIAogcmV0 cnk6CkBAIC03NDMzLDYgKzc0MzMsNyBAQCByZXRyeToKIAkJZm9yIChpID0gMDsgaSA8IG50 aHJlYWRzOyBpKyspCiAJCXsKIAkJCVRTdGF0ZQkgICAqdGhyZWFkID0gJnRocmVhZHNbaV07 CisKIAkJCXRocmVhZC0+Y3B1ID0gY3B1X2dlbmVyYXRvcl90aHJlYWQoJnN0YXRlKTsKIAkJ fQogCkBAIC03NDQ0LDcgKzc0NDUsNyBAQCByZXRyeToKIAkJd2hpbGUgKHRydWUpCiAJCXsK IAkJCS8qIGRpZCB3ZSBmaW5kIGFueSB1bmFzc2lnbmVkIGJhY2tlbmQ/ICovCi0JCQlib29s IGZvdW5kID0gZmFsc2U7CisJCQlib29sCQlmb3VuZCA9IGZhbHNlOwogCiAJCQlmb3IgKGkg PSAwOyBpIDwgbnRocmVhZHM7IGkrKykKIAkJCXsKQEAgLTc2NzgsMTAgKzc2NzksMTAgQEAg dGhyZWFkUnVuKHZvaWQgKmFyZykKIAkJLyogZGV0ZXJtaW5lIFBJRCBvZiB0aGUgYmFja2Vu ZCwgcGluIGl0IHRvIHRoZSBzYW1lIENQVSAqLwogCQlmb3IgKGludCBpID0gMDsgaSA8IG5z dGF0ZTsgaSsrKQogCQl7Ci0JCQljaGFyICAgKnBpZF9zdHI7Ci0JCQlwaWRfdAlwaWQ7CisJ CQljaGFyCSAgICpwaWRfc3RyOworCQkJcGlkX3QJCXBpZDsKIAotCQkJUEdyZXN1bHQgKnJl cyA9IFBRZXhlYyhzdGF0ZVtpXS5jb24sICJzZWxlY3QgcGdfYmFja2VuZF9waWQoKSIpOwor CQkJUEdyZXN1bHQgICAqcmVzID0gUFFleGVjKHN0YXRlW2ldLmNvbiwgInNlbGVjdCBwZ19i YWNrZW5kX3BpZCgpIik7CiAKIAkJCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVT X1RVUExFU19PSykKIAkJCQlwZ19mYXRhbCgiY291bGQgbm90IGRldGVybWluZSBQSUQgb2Yg dGhlIGJhY2tlbmQgZm9yIGNsaWVudCAlZCIsCkBAIC04MTg0LDcgKzgxODUsNyBAQCBjcHVf Z2VuZXJhdG9yX2luaXQoaW50IG5jcHVzKQogewogCXN0cnVjdCB0aW1ldmFsIHR2OwogCi0J Y3B1X2dlbmVyYXRvcl9zdGF0ZQlzdGF0ZTsKKwljcHVfZ2VuZXJhdG9yX3N0YXRlIHN0YXRl OwogCiAJc3RhdGUubmNwdXMgPSBuY3B1czsKIApAQCAtODIwNyw3ICs4MjA4LDcgQEAgY3B1 X2dlbmVyYXRvcl9pbml0KGludCBuY3B1cykKIH0KIAogc3RhdGljIHZvaWQKLWNwdV9nZW5l cmF0b3JfcmVmaWxsKGNwdV9nZW5lcmF0b3Jfc3RhdGUgKnN0YXRlKQorY3B1X2dlbmVyYXRv cl9yZWZpbGwoY3B1X2dlbmVyYXRvcl9zdGF0ZSAqIHN0YXRlKQogewogCXN0cnVjdCB0aW1l dmFsIHR2OwogCkBAIC04MjIzLDcgKzgyMjQsNyBAQCBjcHVfZ2VuZXJhdG9yX3JlZmlsbChj cHVfZ2VuZXJhdG9yX3N0YXRlICpzdGF0ZSkKIH0KIAogc3RhdGljIHZvaWQKLWNwdV9nZW5l cmF0b3JfcmVzZXQoY3B1X2dlbmVyYXRvcl9zdGF0ZSAqc3RhdGUpCitjcHVfZ2VuZXJhdG9y X3Jlc2V0KGNwdV9nZW5lcmF0b3Jfc3RhdGUgKiBzdGF0ZSkKIHsKIAlzdGF0ZS0+bml0ZW1z ID0gMDsKIAljcHVfZ2VuZXJhdG9yX3JlZmlsbChzdGF0ZSk7CkBAIC04MjM2LDE1ICs4MjM3 LDE1IEBAIGNwdV9nZW5lcmF0b3JfcmVzZXQoY3B1X2dlbmVyYXRvcl9zdGF0ZSAqc3RhdGUp CiB9CiAKIHN0YXRpYyBpbnQKLWNwdV9nZW5lcmF0b3JfdGhyZWFkKGNwdV9nZW5lcmF0b3Jf c3RhdGUgKnN0YXRlKQorY3B1X2dlbmVyYXRvcl90aHJlYWQoY3B1X2dlbmVyYXRvcl9zdGF0 ZSAqIHN0YXRlKQogewogCWlmIChzdGF0ZS0+bml0ZW1zID09IDApCiAJCWNwdV9nZW5lcmF0 b3JfcmVmaWxsKHN0YXRlKTsKIAogCXdoaWxlICh0cnVlKQogCXsKLQkJaW50IGlkeCA9IGxy YW5kNDgoKSAlIHN0YXRlLT5uaXRlbXM7Ci0JCWludCBjcHUgPSBzdGF0ZS0+aXRlbXNbaWR4 XTsKKwkJaW50CQkJaWR4ID0gbHJhbmQ0OCgpICUgc3RhdGUtPm5pdGVtczsKKwkJaW50CQkJ Y3B1ID0gc3RhdGUtPml0ZW1zW2lkeF07CiAKIAkJc3RhdGUtPml0ZW1zW2lkeF0gPSBzdGF0 ZS0+aXRlbXNbc3RhdGUtPm5pdGVtcyAtIDFdOwogCQlzdGF0ZS0+bml0ZW1zLS07CkBAIC04 MjU2LDEwICs4MjU3LDEwIEBAIGNwdV9nZW5lcmF0b3JfdGhyZWFkKGNwdV9nZW5lcmF0b3Jf c3RhdGUgKnN0YXRlKQogfQogCiBzdGF0aWMgaW50Ci1jcHVfZ2VuZXJhdG9yX2NsaWVudChj cHVfZ2VuZXJhdG9yX3N0YXRlICpzdGF0ZSwgaW50IHRocmVhZF9jcHUpCitjcHVfZ2VuZXJh dG9yX2NsaWVudChjcHVfZ2VuZXJhdG9yX3N0YXRlICogc3RhdGUsIGludCB0aHJlYWRfY3B1 KQogewotCWludAkJbWluX2NsaWVudHM7Ci0JYm9vbAloYXNfdmFsaWRfY3B1cyA9IGZhbHNl OworCWludAkJCW1pbl9jbGllbnRzOworCWJvb2wJCWhhc192YWxpZF9jcHVzID0gZmFsc2U7 CiAKIAlmb3IgKGludCBpID0gMDsgaSA8IHN0YXRlLT5uaXRlbXM7IGkrKykKIAl7CkBAIC04 Mjg0LDggKzgyODUsOCBAQCBjcHVfZ2VuZXJhdG9yX2NsaWVudChjcHVfZ2VuZXJhdG9yX3N0 YXRlICpzdGF0ZSwgaW50IHRocmVhZF9jcHUpCiAKIAl3aGlsZSAodHJ1ZSkKIAl7Ci0JCWlu dCBpZHggPSBscmFuZDQ4KCkgJSBzdGF0ZS0+bml0ZW1zOwotCQlpbnQgY3B1ID0gc3RhdGUt Pml0ZW1zW2lkeF07CisJCWludAkJCWlkeCA9IGxyYW5kNDgoKSAlIHN0YXRlLT5uaXRlbXM7 CisJCWludAkJCWNwdSA9IHN0YXRlLT5pdGVtc1tpZHhdOwogCiAJCWlmIChjcHUgPT0gdGhy ZWFkX2NwdSkKIAkJCWNvbnRpbnVlOwpAQCAtODMwMyw3ICs4MzA0LDcgQEAgY3B1X2dlbmVy YXRvcl9jbGllbnQoY3B1X2dlbmVyYXRvcl9zdGF0ZSAqc3RhdGUsIGludCB0aHJlYWRfY3B1 KQogfQogCiBzdGF0aWMgdm9pZAotY3B1X2dlbmVyYXRvcl9wcmludChjcHVfZ2VuZXJhdG9y X3N0YXRlICpzdGF0ZSkKK2NwdV9nZW5lcmF0b3JfcHJpbnQoY3B1X2dlbmVyYXRvcl9zdGF0 ZSAqIHN0YXRlKQogewogCWZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGUtPm5jcHVzOyBpKysp CiAJewpAQCAtODMxMiwxMCArODMxMywxMCBAQCBjcHVfZ2VuZXJhdG9yX3ByaW50KGNwdV9n ZW5lcmF0b3Jfc3RhdGUgKnN0YXRlKQogfQogCiBzdGF0aWMgYm9vbAotY3B1X2dlbmVyYXRv cl9jaGVjayhjcHVfZ2VuZXJhdG9yX3N0YXRlICpzdGF0ZSkKK2NwdV9nZW5lcmF0b3JfY2hl Y2soY3B1X2dlbmVyYXRvcl9zdGF0ZSAqIHN0YXRlKQogewotCWludAltaW5fY291bnQgPSBJ TlRfTUFYLAotCQltYXhfY291bnQgPSAwOworCWludAkJCW1pbl9jb3VudCA9IElOVF9NQVgs CisJCQkJbWF4X2NvdW50ID0gMDsKIAogCWZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGUtPm5j cHVzOyBpKyspCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9z cmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCAxYmVmOTg0NzFjMy4uMDE0YTYwNzlhZjIg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRl L21pc2NhZG1pbi5oCkBAIC0xNzgsNiArMTc4LDggQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGlu dCBNYXhDb25uZWN0aW9uczsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3dvcmtlcl9w cm9jZXNzZXM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9wYXJhbGxlbF93b3JrZXJz OwogCitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBudW1hX2J1ZmZlcnNfaW50ZXJsZWF2ZTsK KwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBjb21taXRfdGltZXN0YW1wX2J1ZmZlcnM7CiBl eHRlcm4gUEdETExJTVBPUlQgaW50IG11bHRpeGFjdF9tZW1iZXJfYnVmZmVyczsKIGV4dGVy biBQR0RMTElNUE9SVCBpbnQgbXVsdGl4YWN0X29mZnNldF9idWZmZXJzOwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv YnVmbWdyLmgKaW5kZXggNDFmZGMxZTc2OTMuLmMyNTdjOGExYzIwIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv YnVmbWdyLmgKQEAgLTMxOSw2ICszMTksNyBAQCBleHRlcm4gdm9pZCBFdmljdFJlbFVucGlu bmVkQnVmZmVycyhSZWxhdGlvbiByZWwsCiAvKiBpbiBidWZfaW5pdC5jICovCiBleHRlcm4g dm9pZCBCdWZmZXJNYW5hZ2VyU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIFNpemUgQnVmZmVy TWFuYWdlclNobWVtU2l6ZSh2b2lkKTsKK2V4dGVybiBpbnQJQnVmZmVyR2V0Tm9kZShCdWZm ZXIgYnVmZmVyKTsKIAogLyogaW4gbG9jYWxidWYuYyAqLwogZXh0ZXJuIHZvaWQgQXRQcm9j RXhpdF9Mb2NhbEJ1ZmZlcnModm9pZCk7Ci0tIAoyLjQ5LjAKCg== --------------LG5I5UHq4oggMq78gAQBocuX Content-Type: text/x-patch; charset=UTF-8; name="v1-0002-NUMA-localalloc.patch" Content-Disposition: attachment; filename="v1-0002-NUMA-localalloc.patch" Content-Transfer-Encoding: base64 RnJvbSA2OTE5YjFjMWM1OWE2MDg0MDE3ZWJhZTVhODg0YmI2YzYwNjM5MzY0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVGh1LCAyMiBNYXkgMjAyNSAxODoyNzowNiArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djEgMi82XSBOVU1BOiBsb2NhbGFsbG9jCgpTZXQgdGhlIGRlZmF1bHQgYWxsb2NhdGlvbiBw b2xpY3kgdG8gImxvY2FsYWxsb2MiLCB3aGljaCBtZWFucyBmcm9tIHRoZQpsb2NhbCBOVU1B IG5vZGUuIFRoaXMgaXMgdXNlZnVsIGZvciBwcm9jZXNzLXByaXZhdGUgbWVtb3J5LCB3aGlj aCBpcyBub3QKZ29pbmcgdG8gYmUgc2hhcmVkIHdpdGggb3RoZXIgbm9kZXMsIGFuZCBpcyBy ZWxhdGl2ZWx5IHNob3J0LWxpdmVkIChzbwp3ZSdyZSB1bmxpa2VseSB0byBoYXZlIGlzc3Vl cyBpZiB0aGUgcHJvY2VzcyBnZXRzIG1vdmVkIGJ5IHNjaGVkdWxlcikuCgpUaGlzIHNldHMg ZGVmYXVsdCBmb3IgdGhlIHdob2xlIHByb2Nlc3MsIGZvciBhbGwgZnV0dXJlIGFsbG9jYXRp b25zLiBCdXQKdGhhdCdzIGZpbmUsIHdlJ3ZlIGFscmVhZHkgcG9wdWxhdGVkIHRoZSBzaGFy ZWQgbWVtb3J5IGVhcmxpZXIgKGJ5CmludGVybGVhdmluZyBpdCBleHBsaWNpdGx5KS4gT3Ro ZXJ3aXNlIHdlJ2QgdHJpZ2dlciBwYWdlIGZhdWx0IGFuZCBpdCdkCmJlIGFsbG9jYXRlZCBv biBsb2NhbCBub2RlLgoKWFhYIFRoaXMgcGF0Y2ggbWF5IG5vdCBiZSBuZWNlc3NhcnksIGFz IHdlIG5vdyBsb2NhdGUgbWVtb3J5IHRvIG5vZGVzCnVzaW5nIGV4cGxpY2l0IG51bWFfdG9u b2RlX21lbW9yeSgpIGNhbGxzLCBhbmQgbm90IGJ5IGludGVybGVhdmluZy4gQnV0Cml0J3Mg dXNlZnVsIGZvciBleHBlcmltZW50cyBkdXJpbmcgZGV2ZWxvcG1lbnQsIHNvIEknbSBrZWVw aW5nIGl0LgotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jICAgIHwgIDEg Kwogc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jICAgfCAxNiArKysrKysrKysr KysrKysrCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyB8IDEwICsrKysr KysrKysKIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgIHwgIDEgKwogNCBm aWxlcyBjaGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2Jh bHMuYwppbmRleCA4NzZjYjY0Y2Y2Ni4uZjUzNTlkYjM2NTYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2lu aXQvZ2xvYmFscy5jCkBAIC0xNDcsNiArMTQ3LDcgQEAgaW50CQkJTWF4QmFja2VuZHMgPSAw OwogCiAvKiBOVU1BIHN0dWZmICovCiBib29sCQludW1hX2J1ZmZlcnNfaW50ZXJsZWF2ZSA9 IGZhbHNlOworYm9vbAkJbnVtYV9sb2NhbGFsbG9jID0gZmFsc2U7CiAKIC8qIEdVQyBwYXJh bWV0ZXJzIGZvciB2YWN1dW0gKi8KIGludAkJCVZhY3V1bUJ1ZmZlclVzYWdlTGltaXQgPSAy MDQ4OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jCmluZGV4IDQzYjRkYmNjYzNkLi5k MTE5MzY2OTFiMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5p dC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYwpAQCAtMjgsNiAr MjgsMTAgQEAKICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KICNpbmNsdWRlIDx1dGltZS5oPgog CisjaWZkZWYgVVNFX0xJQk5VTUEKKyNpbmNsdWRlIDxudW1hLmg+CisjZW5kaWYKKwogI2lu Y2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MvcGFyYWxs ZWwuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2F1dGhpZC5oIgpAQCAtMTY0LDYgKzE2OCwx OCBAQCBJbml0UG9zdG1hc3RlckNoaWxkKHZvaWQpCiAJCQkJKGVycmNvZGVfZm9yX3NvY2tl dF9hY2Nlc3MoKSwKIAkJCQkgZXJybXNnX2ludGVybmFsKCJjb3VsZCBub3Qgc2V0IHBvc3Rt YXN0ZXIgZGVhdGggbW9uaXRvcmluZyBwaXBlIHRvIEZEX0NMT0VYRUMgbW9kZTogJW0iKSkp OwogI2VuZGlmCisKKyNpZmRlZiBVU0VfTElCTlVNQQorCS8qCisJICogU2V0IHRoZSBkZWZh dWx0IGFsbG9jYXRpb24gcG9saWN5IHRvIGxvY2FsIG5vZGUsIHdoZXJlIHRoZSB0YXNrIGlz CisJICogZXhlY3V0aW5nIGF0IHRoZSB0aW1lIG9mIGEgcGFnZSBmYXVsdC4KKwkgKgorCSAq IFhYWCBJIGJlbGlldmUgdGhpcyBpcyBub3QgbmVjZXNzYXJ5LCBub3cgdGhhdCB3ZSBkb24n dCB1c2UgYXV0b21hdGljCisJICogaW50ZXJsZWF2aW5nIChudW1hX3NldF9pbnRlcmxlYXZl X21hc2spLgorCSAqLworCWlmIChudW1hX2xvY2FsYWxsb2MpCisJCW51bWFfc2V0X2xvY2Fs YWxsb2MoKTsKKyNlbmRpZgogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJs ZXMuYwppbmRleCAxOThhNTdlNzBhNS4uNTdmMmRmN2FiNzQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvZ3VjX3RhYmxlcy5jCkBAIC0yMTI2LDYgKzIxMjYsMTYgQEAgc3RydWN0IGNvbmZp Z19ib29sIENvbmZpZ3VyZU5hbWVzQm9vbFtdID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0s CiAKKwl7CisJCXsibnVtYV9sb2NhbGFsbG9jIiwgUEdDX1BPU1RNQVNURVIsIERFVkVMT1BF Ul9PUFRJT05TLAorCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIHNldHRpbmcgdGhlIGRlZmF1 bHQgYWxsb2NhdGlvbiBwb2xpY3kgdG8gbG9jYWwgbm9kZS4iKSwKKwkJCWdldHRleHRfbm9v cCgiV2hlbiBlbmFibGVkLCBhbGxvY2F0ZSBmcm9tIHRoZSBub2RlIHdoZXJlIHRoZSB0YXNr IGlzIGV4ZWN1dGluZy4iKSwKKwkJfSwKKwkJJm51bWFfbG9jYWxhbGxvYywKKwkJZmFsc2Us CisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCiAJewogCQl7InN5bmNfcmVwbGljYXRpb25f c2xvdHMiLCBQR0NfU0lHSFVQLCBSRVBMSUNBVElPTl9TVEFOREJZLAogCQkJZ2V0dGV4dF9u b29wKCJFbmFibGVzIGEgcGh5c2ljYWwgc3RhbmRieSB0byBzeW5jaHJvbml6ZSBsb2dpY2Fs IGZhaWxvdmVyIHJlcGxpY2F0aW9uIHNsb3RzIGZyb20gdGhlIHByaW1hcnkgc2VydmVyLiIp LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9zcmMvaW5jbHVkZS9t aXNjYWRtaW4uaAppbmRleCAwMTRhNjA3OWFmMi4uNjkyODcxYTQwMWYgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5o CkBAIC0xNzksNiArMTc5LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfd29ya2Vy X3Byb2Nlc3NlczsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3BhcmFsbGVsX3dvcmtl cnM7CiAKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIG51bWFfYnVmZmVyc19pbnRlcmxlYXZl OworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgbnVtYV9sb2NhbGFsbG9jOwogCiBleHRlcm4g UEdETExJTVBPUlQgaW50IGNvbW1pdF90aW1lc3RhbXBfYnVmZmVyczsKIGV4dGVybiBQR0RM TElNUE9SVCBpbnQgbXVsdGl4YWN0X21lbWJlcl9idWZmZXJzOwotLSAKMi40OS4wCgo= --------------LG5I5UHq4oggMq78gAQBocuX Content-Type: text/x-patch; charset=UTF-8; name="v1-0003-freelist-Don-t-track-tail-of-a-freelist.patch" Content-Disposition: attachment; filename="v1-0003-freelist-Don-t-track-tail-of-a-freelist.patch" Content-Transfer-Encoding: base64 RnJvbSBjMmIyZWRiNzFkNjI5ZWJlNDI4M2I2MzZmMDU4YjhlNDJkMWYxYTM1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwu ZGU+CkRhdGU6IE1vbiwgMTQgT2N0IDIwMjQgMTQ6MTA6MTMgLTA0MDAKU3ViamVjdDogW1BB VENIIHYxIDMvNl0gZnJlZWxpc3Q6IERvbid0IHRyYWNrIHRhaWwgb2YgYSBmcmVlbGlzdAoK VGhlIGZyZWVsaXN0IHRhaWwgaXNuJ3QgY3VycmVudGx5IHVzZWQsIG1ha2luZyBpdCB1bm5l Y2Vzc2FyeSBvdmVyaGVhZC4KU28ganVzdCBkb24ndCBkbyB0aGF0LgotLS0KIHNyYy9iYWNr ZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMgfCA5IC0tLS0tLS0tLQogMSBmaWxlIGNo YW5nZWQsIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9idWZmZXIvZnJlZWxpc3QuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVs aXN0LmMKaW5kZXggMDE5MDliZTAyNzIuLmUwNDY1MjZjMTQ5IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKQEAgLTQwLDEyICs0MCw2IEBAIHR5cGVkZWYgc3Ry dWN0CiAJcGdfYXRvbWljX3VpbnQzMiBuZXh0VmljdGltQnVmZmVyOwogCiAJaW50CQkJZmly c3RGcmVlQnVmZmVyOwkvKiBIZWFkIG9mIGxpc3Qgb2YgdW51c2VkIGJ1ZmZlcnMgKi8KLQlp bnQJCQlsYXN0RnJlZUJ1ZmZlcjsgLyogVGFpbCBvZiBsaXN0IG9mIHVudXNlZCBidWZmZXJz ICovCi0KLQkvKgotCSAqIE5PVEU6IGxhc3RGcmVlQnVmZmVyIGlzIHVuZGVmaW5lZCB3aGVu IGZpcnN0RnJlZUJ1ZmZlciBpcyAtMSAodGhhdCBpcywKLQkgKiB3aGVuIHRoZSBsaXN0IGlz IGVtcHR5KQotCSAqLwogCiAJLyoKIAkgKiBTdGF0aXN0aWNzLiAgVGhlc2UgY291bnRlcnMg c2hvdWxkIGJlIHdpZGUgZW5vdWdoIHRoYXQgdGhleSBjYW4ndApAQCAtMzcxLDggKzM2NSw2 IEBAIFN0cmF0ZWd5RnJlZUJ1ZmZlcihCdWZmZXJEZXNjICpidWYpCiAJaWYgKGJ1Zi0+ZnJl ZU5leHQgPT0gRlJFRU5FWFRfTk9UX0lOX0xJU1QpCiAJewogCQlidWYtPmZyZWVOZXh0ID0g U3RyYXRlZ3lDb250cm9sLT5maXJzdEZyZWVCdWZmZXI7Ci0JCWlmIChidWYtPmZyZWVOZXh0 IDwgMCkKLQkJCVN0cmF0ZWd5Q29udHJvbC0+bGFzdEZyZWVCdWZmZXIgPSBidWYtPmJ1Zl9p ZDsKIAkJU3RyYXRlZ3lDb250cm9sLT5maXJzdEZyZWVCdWZmZXIgPSBidWYtPmJ1Zl9pZDsK IAl9CiAKQEAgLTUwOSw3ICs1MDEsNiBAQCBTdHJhdGVneUluaXRpYWxpemUoYm9vbCBpbml0 KQogCQkgKiBhc3N1bWUgaXQgd2FzIHByZXZpb3VzbHkgc2V0IHVwIGJ5IEJ1ZmZlck1hbmFn ZXJTaG1lbUluaXQoKS4KIAkJICovCiAJCVN0cmF0ZWd5Q29udHJvbC0+Zmlyc3RGcmVlQnVm ZmVyID0gMDsKLQkJU3RyYXRlZ3lDb250cm9sLT5sYXN0RnJlZUJ1ZmZlciA9IE5CdWZmZXJz IC0gMTsKIAogCQkvKiBJbml0aWFsaXplIHRoZSBjbG9jayBzd2VlcCBwb2ludGVyICovCiAJ CXBnX2F0b21pY19pbml0X3UzMigmU3RyYXRlZ3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVy LCAwKTsKLS0gCjIuNDkuMAoK --------------LG5I5UHq4oggMq78gAQBocuX Content-Type: text/x-patch; charset=UTF-8; name="v1-0004-NUMA-partition-buffer-freelist.patch" Content-Disposition: attachment; filename="v1-0004-NUMA-partition-buffer-freelist.patch" Content-Transfer-Encoding: base64 RnJvbSA2NTA1ODQ4YWM4MzU5YzhjNzZkZmJmZmM3MTUwYjY2MDFhYjA3NjAxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVGh1LCAyMiBNYXkgMjAyNSAxODozODo0MSArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djEgNC82XSBOVU1BOiBwYXJ0aXRpb24gYnVmZmVyIGZyZWVsaXN0CgpJbnN0ZWFkIG9mIGEg c2luZ2xlIGJ1ZmZlciBmcmVlbGlzdCwgcGFydGl0aW9uIGludG8gbXVsdGlwbGUgc21hbGxl cgpsaXN0cywgdG8gcmVkdWNlIGxvY2sgY29udGVudGlvbiwgYW5kIHRvIHNwcmVhZCB0aGUg YnVmZmVycyBvdmVyIGFsbApOVU1BIG5vZGVzIG1vcmUgZXZlbmx5LgoKVGhlcmUgYXJlIGZv dXIgc3RyYXRlZ2llcywgc3BlY2lmaWVkIGJ5IEdVQyBudW1hX3BhcnRpdGlvbl9mcmVlbGlz dAoKKiBub25lIC0gc2luZ2xlIGxvbmcgZnJlZWxpc3QsIHNob3VsZCB3b3JrIGp1c3QgbGlr ZSBub3cKCiogbm9kZSAtIG9uZSBmcmVlbGlzdCBwZXIgTlVNQSBub2RlLCB3aXRoIG9ubHkg YnVmZmVycyBmcm9tIHRoYXQgbm9kZQoKKiBjcHUgLSBvbmUgZnJlZWxpc3QgcGVyIENQVQoK KiBwaWQgLSBmcmVlbGlzdCBkZXRlcm1pbmVkIGJ5IFBJRCAoc2FtZSBudW1iZXIgb2YgZnJl ZWxpc3RzIGFzICdjcHUnKQoKV2hlbiBhbGxvY2F0aW5nIGEgYnVmZmVyLCBpdCdzIHRha2Vu IGZyb20gdGhlIGNvcnJlY3QgZnJlZWxpc3QgKGUuZy4Kc2FtZSBOVU1BIG5vZGUpLgoKTm90 ZTogVGhpcyBpcyAocHJvYmFibHkpIG1vcmUgaW1wb3J0YW50IHRoYW4gcGFydGl0aW9uaW5n IFByb2NBcnJheS4KLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5j IHwgICA0ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jIHwgMzI0 ICsrKysrKysrKysrKysrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC91dGlscy9pbml0L2ds b2JhbHMuYyAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxl cy5jICAgfCAgMTggKysKIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAg fCAgIDEgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAgICAgICB8ICAgOCAr CiA2IGZpbGVzIGNoYW5nZWQsIDMyNyBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYwppbmRleCAyYWQzNDYyNGM0 OS4uOTIwZjFhMzJhOGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVy L2J1Zl9pbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQu YwpAQCAtNTQzLDggKzU0Myw4IEBAIHBnX251bWFfaW50ZXJsZWF2ZV9tZW1vcnkoY2hhciAq c3RhcnRwdHIsIGNoYXIgKmVuZHB0ciwKIAkJICogWFhYIG5vIHJldHVybiB2YWx1ZSwgdG8g bWFrZSB0aGlzIGZhaWwgb24gZXJyb3IsIGhhcyB0byB1c2UKIAkJICogbnVtYV9zZXRfc3Ry aWN0CiAJCSAqCi0JCSAqIFhYWCBTaG91bGQgd2Ugc3RpbGwgdG91Y2ggdGhlIG1lbW9yeSBm aXJzdCwgbGlrZSB3aXRoIG51bWFfbW92ZV9wYWdlcywKLQkJICogb3IgaXMgdGhhdCBub3Qg bmVjZXNzYXJ5PworCQkgKiBYWFggU2hvdWxkIHdlIHN0aWxsIHRvdWNoIHRoZSBtZW1vcnkg Zmlyc3QsIGxpa2Ugd2l0aAorCQkgKiBudW1hX21vdmVfcGFnZXMsIG9yIGlzIHRoYXQgbm90 IG5lY2Vzc2FyeT8KIAkJICovCiAJCW51bWFfdG9ub2RlX21lbW9yeShwdHIsIHN6LCBub2Rl KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3Qu YyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKaW5kZXggZTA0NjUy NmMxNDkuLmM5M2VjMjg0MWM1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9mcmVlbGlzdC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVs aXN0LmMKQEAgLTE1LDE0ICsxNSw0MSBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIK IAorI2luY2x1ZGUgPHNjaGVkLmg+CisjaW5jbHVkZSA8c3lzL3N5c2luZm8uaD4KKworI2lm ZGVmIFVTRV9MSUJOVU1BCisjaW5jbHVkZSA8bnVtYS5oPgorI2luY2x1ZGUgPG51bWFpZi5o PgorI2VuZGlmCisKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3J0L2F0b21p Y3MuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJz dG9yYWdlL2J1Zm1nci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9wcm9jLmgiCiAKICNkZWZpbmUgSU5UX0FDQ0VTU19PTkNFKHZhcikJKChpbnQp KCooKHZvbGF0aWxlIGludCAqKSYodmFyKSkpKQogCisvKgorICogUmVwcmVzZW50cyBvbmUg ZnJlZWxpc3QgcGFydGl0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBCdWZmZXJTdHJhdGVn eUZyZWVsaXN0Cit7CisJLyogU3BpbmxvY2s6IHByb3RlY3RzIHRoZSB2YWx1ZXMgYmVsb3cg Ki8KKwlzbG9ja190CQlmcmVlbGlzdF9sb2NrOworCisJLyoKKwkgKiBYWFggTm90IHN1cmUg d2h5IHRoaXMgbmVlZHMgdG8gYmUgYWxpZ25lZCBsaWtlIHRoaXMuIE5lZWQgdG8gYXNrCisJ ICogQW5kcmVzLgorCSAqLworCWludAkJCWZpcnN0RnJlZUJ1ZmZlciBfX2F0dHJpYnV0ZV9f KChhbGlnbmVkKDY0KSkpOwkvKiBIZWFkIG9mIGxpc3Qgb2YKKwkJCQkJCQkJCQkJCQkJCQkg KiB1bnVzZWQgYnVmZmVycyAqLworCisJLyogTnVtYmVyIG9mIGJ1ZmZlcnMgY29uc3VtZWQg ZnJvbSB0aGlzIGxpc3QuICovCisJdWludDY0CQljb25zdW1lZDsKK30JCQlCdWZmZXJTdHJh dGVneUZyZWVsaXN0OwogCiAvKgogICogVGhlIHNoYXJlZCBmcmVlbGlzdCBjb250cm9sIGlu Zm9ybWF0aW9uLgpAQCAtMzksOCArNjYsNiBAQCB0eXBlZGVmIHN0cnVjdAogCSAqLwogCXBn X2F0b21pY191aW50MzIgbmV4dFZpY3RpbUJ1ZmZlcjsKIAotCWludAkJCWZpcnN0RnJlZUJ1 ZmZlcjsJLyogSGVhZCBvZiBsaXN0IG9mIHVudXNlZCBidWZmZXJzICovCi0KIAkvKgogCSAq IFN0YXRpc3RpY3MuICBUaGVzZSBjb3VudGVycyBzaG91bGQgYmUgd2lkZSBlbm91Z2ggdGhh dCB0aGV5IGNhbid0CiAJICogb3ZlcmZsb3cgZHVyaW5nIGEgc2luZ2xlIGJnd3JpdGVyIGN5 Y2xlLgpAQCAtNTEsMTMgKzc2LDI3IEBAIHR5cGVkZWYgc3RydWN0CiAJLyoKIAkgKiBCZ3dv cmtlciBwcm9jZXNzIHRvIGJlIG5vdGlmaWVkIHVwb24gYWN0aXZpdHkgb3IgLTEgaWYgbm9u ZS4gU2VlCiAJICogU3RyYXRlZ3lOb3RpZnlCZ1dyaXRlci4KKwkgKgorCSAqIFhYWCBOb3Qg c3VyZSB3aHkgdGhpcyBuZWVkcyB0byBiZSBhbGlnbmVkIGxpa2UgdGhpcy4gTmVlZCB0byBh c2sKKwkgKiBBbmRyZXMuIEFsc28sIHNob3VsZG4ndCB0aGUgYWxpZ25tZW50IGJlIHNwZWNp ZmllZCBhZnRlciwgbGlrZSBmb3IKKwkgKiAiY29uc3VtZWQiPwogCSAqLwotCWludAkJCWJn d3Byb2NubzsKKwlpbnQJCQlfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDY0KSkpIGJnd3Byb2Nu bzsKKworCUJ1ZmZlclN0cmF0ZWd5RnJlZWxpc3QgZnJlZWxpc3RzW0ZMRVhJQkxFX0FSUkFZ X01FTUJFUl07CiB9IEJ1ZmZlclN0cmF0ZWd5Q29udHJvbDsKIAogLyogUG9pbnRlcnMgdG8g c2hhcmVkIHN0YXRlICovCiBzdGF0aWMgQnVmZmVyU3RyYXRlZ3lDb250cm9sICpTdHJhdGVn eUNvbnRyb2wgPSBOVUxMOwogCisvKgorICogWFhYIHNob3VsZG4ndCB0aGlzIGJlIGluIEJ1 ZmZlclN0cmF0ZWd5Q29udHJvbD8gUHJvYmFibHkgbm90LCB3ZSBuZWVkIHRvCisgKiBjYWxj dWxhdGUgaXQgZHVyaW5nIHNpemluZywgYW5kIHBlcmhhcHMgaXQgY291bGQgY2hhbmdlIGJl Zm9yZSB0aGUgbWVtb3J5CisgKiBnZXRzIGFsbG9jYXRlZCAoc28gd2UgbmVlZCB0byByZW1l bWJlciB0aGUgdmFsdWVzKS4KKyAqLworc3RhdGljIGludAlzdHJhdGVneV9ubm9kZXM7Citz dGF0aWMgaW50CXN0cmF0ZWd5X25jcHVzOworCiAvKgogICogUHJpdmF0ZSAobm9uLXNoYXJl ZCkgc3RhdGUgZm9yIG1hbmFnaW5nIGEgcmluZyBvZiBzaGFyZWQgYnVmZmVycyB0byByZS11 c2UuCiAgKiBUaGlzIGlzIGN1cnJlbnRseSB0aGUgb25seSBraW5kIG9mIEJ1ZmZlckFjY2Vz c1N0cmF0ZWd5IG9iamVjdCwgYnV0IHNvbWVkYXkKQEAgLTE1Nyw2ICsxOTYsOTAgQEAgQ2xv Y2tTd2VlcFRpY2sodm9pZCkKIAlyZXR1cm4gdmljdGltOwogfQogCisvKgorICogQ2hvb3Nl RnJlZUxpc3QKKyAqCQlQaWNrIHRoZSBidWZmZXIgZnJlZWxpc3QgdG8gdXNlLCBkZXBlbmRp bmcgb24gdGhlIENQVSBhbmQgTlVNQSBub2RlLgorICoKKyAqIFdpdGhvdXQgcGFydGl0aW9u ZWQgZnJlZWxpc3RzIChudW1hX3BhcnRpdGlvbl9mcmVlbGlzdD1mYWxzZSksIHRoZXJlJ3Mg b25seQorICogYSBzaW5nbGUgZnJlZWxpc3QsIHNvIHVzZSB0aGF0LgorICoKKyAqIFdpdGgg cGFydGl0aW9uZWQgZnJlZWxpc3RzLCB3ZSBoYXZlIG11bHRpcGxlIHdheXMgaG93IHRvIHBp Y2sgdGhlIGZyZWVsaXN0CisgKiBmb3IgdGhlIGJhY2tlbmQ6CisgKgorICogLSBvbmUgZnJl ZWxpc3QgcGVyIENQVSwgdXNlIHRoZSBmcmVlbGlzdCBmb3IgQ1BVIHRoZSB0YXNrIGV4ZWN1 dGVzIG9uCisgKgorICogLSBvbmUgZnJlZWxpc3QgcGVyIE5VTUEgbm9kZSwgdXNlIHRoZSBm cmVlbGlzdCBmb3Igbm9kZSB0YXNrIGV4ZWN1dGVzIG9uCisgKgorICogLSB1c2UgZml4ZWQg bnVtYmVyIG9mIGZyZWVsaXN0cywgbWFwIHByb2Nlc3NlcyB0byBsaXN0cyBiYXNlZCBvbiBQ SUQKKyAqCisgKiBUaGVyZSBtYXkgYmUgc29tZSBvdGhlciBzdHJhdGVnaWVzLCBub3Qgc3Vy ZS4gVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGlzCisgKiBuZWVkcyB0byBiZSByZWZyZWNs ZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLCBpLmUuIHdlIG5lZWQgdG8gY3JlYXRlIHRoZQor ICogcmlnaHQgbnVtYmVyIG9mIGxpc3RzLgorICovCitzdGF0aWMgQnVmZmVyU3RyYXRlZ3lG cmVlbGlzdCAqCitDaG9vc2VGcmVlTGlzdCh2b2lkKQoreworCXVuc2lnbmVkCWNwdTsKKwl1 bnNpZ25lZAlub2RlOworCWludAkJCXJjOworCisJaW50CQkJZnJlZWxpc3RfaWR4OworCisJ LyogZnJlZWxpc3Qgbm90IHBhcnRpdGlvbmVkLCByZXR1cm4gdGhlIGZpcnN0IChhbmQgb25s eSkgZnJlZWxpc3QgKi8KKwlpZiAobnVtYV9wYXJ0aXRpb25fZnJlZWxpc3QgPT0gRlJFRUxJ U1RfUEFSVElUSU9OX05PTkUpCisJCXJldHVybiAmU3RyYXRlZ3lDb250cm9sLT5mcmVlbGlz dHNbMF07CisKKwkvKgorCSAqIGZyZWVsaXN0IGlzIHBhcnRpdGlvbmVkLCBzbyBkZXRlcm1p bmUgdGhlIENQVS9OVU1BIG5vZGUsIGFuZCBwaWNrIGEKKwkgKiBsaXN0IGJhc2VkIG9uIHRo YXQuCisJICovCisJcmMgPSBnZXRjcHUoJmNwdSwgJm5vZGUpOworCWlmIChyYyAhPSAwKQor CQllbG9nKEVSUk9SLCAiZ2V0Y3B1IGZhaWxlZDogJW0iKTsKKworCS8qCisJICogRklYTUUg VGhpcyBkb2Vzbid0IHdvcmsgd2VsbCBpZiBDUFVzIGFyZSBleGNsdWRlZCBmcm9tIGJlaW5n IHJ1biBvcgorCSAqIG9mZmxpbmUuIEluIHRoYXQgY2FzZSB3ZSBlbmQgdXAgbm90IHVzaW5n IHNvbWUgZnJlZWxpc3RzIGF0IGFsbCwgYnV0CisJICogbm90IHN1cmUgaWYgd2UgbmVlZCB0 byB3b3JyeSBhYm91dCB0aGF0LiBQcm9iYWJseSBub3QgZm9yIG5vdy4gQnV0CisJICogY291 bGQgdGhhdCBjaGFuZ2Ugd2hpbGUgdGhlIHN5c3RlbSBpcyBydW5uaW5nPworCSAqCisJICog WFhYIE1heWJlIHdlIHNob3VsZCBzb21laG93IGRldGVjdCBjaGFuZ2VzIHRvIHRoZSBsaXN0 IG9mIENQVXMsIGFuZAorCSAqIHJlYnVpbGQgdGhlIGxpc3RzIGlmIHRoYXQgY2hhbmdlcz8g QnV0IHRoYXQgc2VlbXMgZXhwZW5zaXZlLgorCSAqLworCWlmIChjcHUgPiBzdHJhdGVneV9u Y3B1cykKKwkJZWxvZyhFUlJPUiwgImNwdSBvdXQgb2YgcmFuZ2U6ICVkID4gJXUiLCBjcHUs IHN0cmF0ZWd5X25jcHVzKTsKKwllbHNlIGlmIChub2RlID4gc3RyYXRlZ3lfbm5vZGVzKQor CQllbG9nKEVSUk9SLCAibm9kZSBvdXQgb2YgcmFuZ2U6ICVkID4gJXUiLCBjcHUsIHN0cmF0 ZWd5X25ub2Rlcyk7CisKKwkvKgorCSAqIFBpY2sgdGhlIGZyZWVsaXN0LCBiYXNlZCBvbiBD UFUsIE5VTUEgbm9kZSBvciBwcm9jZXNzIFBJRC4gVGhpcyBtYXRjaGVzCisJICogaG93IHdl IGJ1aWx0IHRoZSBmcmVlbGlzdHMgYWJvdmUuCisJICoKKwkgKiBYWFggQ2FuIHdlIHJlbHkg b24gc29tZSBvZiB0aGUgdmFsdWVzIChlc3BlY2lhbGx5IHN0cmF0ZWd5X25ub2RlcykgdG8K KwkgKiBiZSBhIHBvd2VyLW9mLTI/IFRoZW4gd2UgY291bGQgcmVwbGFjZSB0aGUgbW9kdWxv IHdpdGggYSBtYXNrLCB3aGljaCBpcworCSAqIGxpa2VseSBtb3JlIGVmZmljaWVudC4KKwkg Ki8KKwlzd2l0Y2ggKG51bWFfcGFydGl0aW9uX2ZyZWVsaXN0KQorCXsKKwkJY2FzZSBGUkVF TElTVF9QQVJUSVRJT05fQ1BVOgorCQkJZnJlZWxpc3RfaWR4ID0gY3B1ICUgc3RyYXRlZ3lf bmNwdXM7CisJCQlicmVhazsKKworCQljYXNlIEZSRUVMSVNUX1BBUlRJVElPTl9OT0RFOgor CQkJZnJlZWxpc3RfaWR4ID0gbm9kZSAlIHN0cmF0ZWd5X25ub2RlczsKKwkJCWJyZWFrOwor CisJCWNhc2UgRlJFRUxJU1RfUEFSVElUSU9OX1BJRDoKKwkJCWZyZWVsaXN0X2lkeCA9IE15 UHJvY1BpZCAlIHN0cmF0ZWd5X25jcHVzOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJ CWVsb2coRVJST1IsICJ1bmtub3duIGZyZWVsaXN0IHBhcnRpdGlvbmluZyB2YWx1ZSIpOwor CX0KKworCXJldHVybiAmU3RyYXRlZ3lDb250cm9sLT5mcmVlbGlzdHNbZnJlZWxpc3RfaWR4 XTsKK30KKwogLyoKICAqIGhhdmVfZnJlZV9idWZmZXIgLS0gYSBsb2NrbGVzcyBjaGVjayB0 byBzZWUgaWYgdGhlcmUgaXMgYSBmcmVlIGJ1ZmZlciBpbgogICoJCQkJCSAgIGJ1ZmZlciBw b29sLgpAQCAtMTY4LDEwICsyOTEsMTMgQEAgQ2xvY2tTd2VlcFRpY2sodm9pZCkKIGJvb2wK IGhhdmVfZnJlZV9idWZmZXIodm9pZCkKIHsKLQlpZiAoU3RyYXRlZ3lDb250cm9sLT5maXJz dEZyZWVCdWZmZXIgPj0gMCkKLQkJcmV0dXJuIHRydWU7Ci0JZWxzZQotCQlyZXR1cm4gZmFs c2U7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBzdHJhdGVneV9uY3B1czsgaSsrKQorCXsKKwkJ aWYgKFN0cmF0ZWd5Q29udHJvbC0+ZnJlZWxpc3RzW2ldLmZpcnN0RnJlZUJ1ZmZlciA+PSAw KQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOwogfQogCiAvKgpAQCAt MTkzLDYgKzMxOSw3IEBAIFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5 IHN0cmF0ZWd5LCB1aW50MzIgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJvbV9yCiAJaW50CQkJYmd3 cHJvY25vOwogCWludAkJCXRyeWNvdW50ZXI7CiAJdWludDMyCQlsb2NhbF9idWZfc3RhdGU7 CS8qIHRvIGF2b2lkIHJlcGVhdGVkIChkZS0pcmVmZXJlbmNpbmcgKi8KKwlCdWZmZXJTdHJh dGVneUZyZWVsaXN0ICpmcmVlbGlzdDsKIAogCSpmcm9tX3JpbmcgPSBmYWxzZTsKIApAQCAt MjU5LDMxICszODYsMzUgQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRl Z3kgc3RyYXRlZ3ksIHVpbnQzMiAqYnVmX3N0YXRlLCBib29sICpmcm9tX3IKIAkgKiBidWZm ZXJfc3RyYXRlZ3lfbG9jayBub3QgdGhlIGluZGl2aWR1YWwgYnVmZmVyIHNwaW5sb2Nrcywg c28gaXQncyBPSyB0bwogCSAqIG1hbmlwdWxhdGUgdGhlbSB3aXRob3V0IGhvbGRpbmcgdGhl IHNwaW5sb2NrLgogCSAqLwotCWlmIChTdHJhdGVneUNvbnRyb2wtPmZpcnN0RnJlZUJ1ZmZl ciA+PSAwKQorCWZyZWVsaXN0ID0gQ2hvb3NlRnJlZUxpc3QoKTsKKwlpZiAoZnJlZWxpc3Qt PmZpcnN0RnJlZUJ1ZmZlciA+PSAwKQogCXsKIAkJd2hpbGUgKHRydWUpCiAJCXsKIAkJCS8q IEFjcXVpcmUgdGhlIHNwaW5sb2NrIHRvIHJlbW92ZSBlbGVtZW50IGZyb20gdGhlIGZyZWVs aXN0ICovCi0JCQlTcGluTG9ja0FjcXVpcmUoJlN0cmF0ZWd5Q29udHJvbC0+YnVmZmVyX3N0 cmF0ZWd5X2xvY2spOworCQkJU3BpbkxvY2tBY3F1aXJlKCZmcmVlbGlzdC0+ZnJlZWxpc3Rf bG9jayk7CiAKLQkJCWlmIChTdHJhdGVneUNvbnRyb2wtPmZpcnN0RnJlZUJ1ZmZlciA8IDAp CisJCQlpZiAoZnJlZWxpc3QtPmZpcnN0RnJlZUJ1ZmZlciA8IDApCiAJCQl7Ci0JCQkJU3Bp bkxvY2tSZWxlYXNlKCZTdHJhdGVneUNvbnRyb2wtPmJ1ZmZlcl9zdHJhdGVneV9sb2NrKTsK KwkJCQlTcGluTG9ja1JlbGVhc2UoJmZyZWVsaXN0LT5mcmVlbGlzdF9sb2NrKTsKIAkJCQli cmVhazsKIAkJCX0KIAotCQkJYnVmID0gR2V0QnVmZmVyRGVzY3JpcHRvcihTdHJhdGVneUNv bnRyb2wtPmZpcnN0RnJlZUJ1ZmZlcik7CisJCQlidWYgPSBHZXRCdWZmZXJEZXNjcmlwdG9y KGZyZWVsaXN0LT5maXJzdEZyZWVCdWZmZXIpOwogCQkJQXNzZXJ0KGJ1Zi0+ZnJlZU5leHQg IT0gRlJFRU5FWFRfTk9UX0lOX0xJU1QpOwogCiAJCQkvKiBVbmNvbmRpdGlvbmFsbHkgcmVt b3ZlIGJ1ZmZlciBmcm9tIGZyZWVsaXN0ICovCi0JCQlTdHJhdGVneUNvbnRyb2wtPmZpcnN0 RnJlZUJ1ZmZlciA9IGJ1Zi0+ZnJlZU5leHQ7CisJCQlmcmVlbGlzdC0+Zmlyc3RGcmVlQnVm ZmVyID0gYnVmLT5mcmVlTmV4dDsKIAkJCWJ1Zi0+ZnJlZU5leHQgPSBGUkVFTkVYVF9OT1Rf SU5fTElTVDsKIAorCQkJLyogaW5jcmVtZW50IG51bWJlciBvZiBidWZmZXJzIHdlIGNvbnN1 bWVkIGZyb20gdGhpcyBsaXN0ICovCisJCQlmcmVlbGlzdC0+Y29uc3VtZWQrKzsKKwogCQkJ LyoKIAkJCSAqIFJlbGVhc2UgdGhlIGxvY2sgc28gc29tZW9uZSBlbHNlIGNhbiBhY2Nlc3Mg dGhlIGZyZWVsaXN0IHdoaWxlCiAJCQkgKiB3ZSBjaGVjayBvdXQgdGhpcyBidWZmZXIuCiAJ CQkgKi8KLQkJCVNwaW5Mb2NrUmVsZWFzZSgmU3RyYXRlZ3lDb250cm9sLT5idWZmZXJfc3Ry YXRlZ3lfbG9jayk7CisJCQlTcGluTG9ja1JlbGVhc2UoJmZyZWVsaXN0LT5mcmVlbGlzdF9s b2NrKTsKIAogCQkJLyoKIAkJCSAqIElmIHRoZSBidWZmZXIgaXMgcGlubmVkIG9yIGhhcyBh IG5vbnplcm8gdXNhZ2VfY291bnQsIHdlIGNhbm5vdApAQCAtMzA1LDcgKzQzNiwxNyBAQCBT dHJhdGVneUdldEJ1ZmZlcihCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwgdWludDMy ICpidWZfc3RhdGUsIGJvb2wgKmZyb21fcgogCQl9CiAJfQogCi0JLyogTm90aGluZyBvbiB0 aGUgZnJlZWxpc3QsIHNvIHJ1biB0aGUgImNsb2NrIHN3ZWVwIiBhbGdvcml0aG0gKi8KKwkv KgorCSAqIE5vdGhpbmcgb24gdGhlIGZyZWVsaXN0LCBzbyBydW4gdGhlICJjbG9jayBzd2Vl cCIgYWxnb3JpdGhtCisJICoKKwkgKiBYWFggU2hvdWxkIHdlIGFsc28gbWFrZSB0aGlzIE5V TUEtYXdhcmUsIHRvIG9ubHkgYWNjZXNzIGJ1ZmZlcnMgZnJvbQorCSAqIHRoZSBzYW1lIE5V TUEgbm9kZT8gVGhhdCdkIHByb2JhYmx5IG1lYW4gd2UgbmVlZCB0byBtYWtlIHRoZSBjbG9j aworCSAqIHN3ZWVwIE5VTUEtYXdhcmUsIHBlcmhhcHMgYnkgaGF2aW5nIG11bHRpcGxlIGNs b2NrIHN3ZWVwcywgZWFjaCBmb3IgYQorCSAqIHN1YnNldCBvZiBidWZmZXJzLiBCdXQgdGhh dCBhbHNvIG1lYW5zIGVhY2ggcHJvY2VzcyBjb3VsZCAic3dlZXAiIG9ubHkKKwkgKiBhIGZy YWN0aW9uIG9mIGJ1ZmZlcnMsIGV2ZW4gaWYgdGhlIG90aGVyIGJ1ZmZlcnMgYXJlIGJldHRl ciBjYW5kaWRhdGVzCisJICogZm9yIGV2aWN0aW9uLiBXb3VsZCB0aGF0IGFsc28gbWVhbiB3 ZSdkIGhhdmUgbXVsdGlwbGUgYmd3cml0ZXJzLCBvbmUKKwkgKiBmb3IgZWFjaCBub2RlLCBv ciB3b3VsZCBvbmUgYmd3cml0ZXIgaGFuZGxlIGFsbCBvZiB0aGF0PworCSAqLwogCXRyeWNv dW50ZXIgPSBOQnVmZmVyczsKIAlmb3IgKDs7KQogCXsKQEAgLTM1MiwxMSArNDkzLDIyIEBA IFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1aW50 MzIgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJvbV9yCiAKIC8qCiAgKiBTdHJhdGVneUZyZWVCdWZm ZXI6IHB1dCBhIGJ1ZmZlciBvbiB0aGUgZnJlZWxpc3QKKyAqCisgKiBYWFggVGhpcyBjYWxs cyBDaG9vc2VGcmVlTGlzdCgpIGFnYWluLCBhbmQgaXQgbWlnaHQgcmV0dXJuIHRoZSBmcmVl bGlzdCB0bworICogYSBkaWZmZXJlbnQgZnJlZWxpc3QgdGhhbiBpdCB3YXMgdGFrZW4gZnJv bSAoZWl0aGVyIGJ5IGEgZGlmZmVyZW50IGJhY2tlbmQsCisgKiBvciBwZXJoYXBzIGV2ZW4g dGhlIHNhbWUgYmFja2VuZCBydW5uaW5nIG9uIGEgZGlmZmVyZW50IENQVSkuIElzIHRoYXQg Z29vZD8KKyAqIE1heWJlIHdlIHNob3VsZCB0cnkgdG8gYmFsYW5jZSB0aGlzIHNvbWVob3cs IGUuZy4gYnkgY2hvb3NpbmcgYSByYW5kb20gbGlzdCwKKyAqIHRoZSBzaG9ydGVzdCBvbmUs IG9yIHNvbWV0aGluZyBsaWtlIHRoYXQ/IEJ1dCB0aGF0IGJyZWFrcyB0aGUgd2hvbGUgaWRl YSBvZgorICogaGF2aW5nIGZyZWVsaXN0cyB3aXRoIGJ1ZmZlcnMgZnJvbSBhIHBhcnRpY3Vs YXIgTlVNQSBub2RlLgogICovCiB2b2lkCiBTdHJhdGVneUZyZWVCdWZmZXIoQnVmZmVyRGVz YyAqYnVmKQogewotCVNwaW5Mb2NrQWNxdWlyZSgmU3RyYXRlZ3lDb250cm9sLT5idWZmZXJf c3RyYXRlZ3lfbG9jayk7CisJQnVmZmVyU3RyYXRlZ3lGcmVlbGlzdCAqZnJlZWxpc3Q7CisK KwlmcmVlbGlzdCA9IENob29zZUZyZWVMaXN0KCk7CisKKwlTcGluTG9ja0FjcXVpcmUoJmZy ZWVsaXN0LT5mcmVlbGlzdF9sb2NrKTsKIAogCS8qCiAJICogSXQgaXMgcG9zc2libGUgdGhh dCB3ZSBhcmUgdG9sZCB0byBwdXQgc29tZXRoaW5nIGluIHRoZSBmcmVlbGlzdCB0aGF0CkBA IC0zNjQsMTEgKzUxNiwxMSBAQCBTdHJhdGVneUZyZWVCdWZmZXIoQnVmZmVyRGVzYyAqYnVm KQogCSAqLwogCWlmIChidWYtPmZyZWVOZXh0ID09IEZSRUVORVhUX05PVF9JTl9MSVNUKQog CXsKLQkJYnVmLT5mcmVlTmV4dCA9IFN0cmF0ZWd5Q29udHJvbC0+Zmlyc3RGcmVlQnVmZmVy OwotCQlTdHJhdGVneUNvbnRyb2wtPmZpcnN0RnJlZUJ1ZmZlciA9IGJ1Zi0+YnVmX2lkOwor CQlidWYtPmZyZWVOZXh0ID0gZnJlZWxpc3QtPmZpcnN0RnJlZUJ1ZmZlcjsKKwkJZnJlZWxp c3QtPmZpcnN0RnJlZUJ1ZmZlciA9IGJ1Zi0+YnVmX2lkOwogCX0KIAotCVNwaW5Mb2NrUmVs ZWFzZSgmU3RyYXRlZ3lDb250cm9sLT5idWZmZXJfc3RyYXRlZ3lfbG9jayk7CisJU3Bpbkxv Y2tSZWxlYXNlKCZmcmVlbGlzdC0+ZnJlZWxpc3RfbG9jayk7CiB9CiAKIC8qCkBAIC00MzIs NiArNTg0LDQyIEBAIFN0cmF0ZWd5Tm90aWZ5QmdXcml0ZXIoaW50IGJnd3Byb2NubykKIAlT cGluTG9ja1JlbGVhc2UoJlN0cmF0ZWd5Q29udHJvbC0+YnVmZmVyX3N0cmF0ZWd5X2xvY2sp OwogfQogCisvKiBwcmludHMgc29tZSBkZWJ1ZyBpbmZvIC8gc3RhdHMgYWJvdXQgZnJlZWxp c3RzIGF0IHNodXRkb3duICovCitzdGF0aWMgdm9pZAorZnJlZWxpc3RfYmVmb3JlX3NobWVt X2V4aXQoaW50IGNvZGUsIERhdHVtIGFyZykKK3sKKwlmb3IgKGludCBub2RlID0gMDsgbm9k ZSA8IHN0cmF0ZWd5X25jcHVzOyBub2RlKyspCisJeworCQlCdWZmZXJTdHJhdGVneUZyZWVs aXN0ICpmcmVlbGlzdCA9ICZTdHJhdGVneUNvbnRyb2wtPmZyZWVsaXN0c1tub2RlXTsKKwkJ dWludDY0CQlyZW1haW4gPSAwOworCQl1aW50NjQJCWFjdHVhbGx5X2ZyZWUgPSAwOworCQlp bnQJCQljdXIgPSBmcmVlbGlzdC0+Zmlyc3RGcmVlQnVmZmVyOworCisJCXdoaWxlIChjdXIg Pj0gMCkKKwkJeworCQkJdWludDMyCQlsb2NhbF9idWZfc3RhdGU7CisJCQlCdWZmZXJEZXNj ICpidWY7CisKKwkJCWJ1ZiA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoY3VyKTsKKworCQkJcmVt YWluKys7CisKKwkJCWxvY2FsX2J1Zl9zdGF0ZSA9IExvY2tCdWZIZHIoYnVmKTsKKworCQkJ aWYgKCEobG9jYWxfYnVmX3N0YXRlICYgQk1fVEFHX1ZBTElEKSkKKwkJCQlhY3R1YWxseV9m cmVlKys7CisKKwkJCVVubG9ja0J1ZkhkcihidWYsIGxvY2FsX2J1Zl9zdGF0ZSk7CisKKwkJ CWN1ciA9IGJ1Zi0+ZnJlZU5leHQ7CisJCX0KKwkJZWxvZyhMT0csICJmcmVlbGlzdCAlZCwg Zmlyc3RGOiAlZDogY29uc3VtZWQ6ICVsdSwgcmVtYWluOiAlbHUsIGFjdHVhbGx5IGZyZWU6 ICVsdSIsCisJCQkgbm9kZSwKKwkJCSBmcmVlbGlzdC0+Zmlyc3RGcmVlQnVmZmVyLAorCQkJ IGZyZWVsaXN0LT5jb25zdW1lZCwKKwkJCSByZW1haW4sIGFjdHVhbGx5X2ZyZWUpOworCX0K K30KIAogLyoKICAqIFN0cmF0ZWd5U2htZW1TaXplCkBAIC00NDYsMTEgKzYzNCwzMyBAQCBT dHJhdGVneVNobWVtU2l6ZSh2b2lkKQogewogCVNpemUJCXNpemUgPSAwOwogCisJLyogRklY TUUgKi8KKyNpZmRlZiBVU0VfTElCTlVNQQorCXN0cmF0ZWd5X25jcHVzID0gbnVtYV9udW1f dGFza19jcHVzKCk7CisJc3RyYXRlZ3lfbm5vZGVzID0gbnVtYV9udW1fdGFza19ub2Rlcygp OworI2Vsc2UKKwlzdHJhdGVneV9uY3B1cyA9IDE7CisJc3RyYXRlZ3lfbm5vZGVzID0gMTsK KyNlbmRpZgorCisJQXNzZXJ0KHN0cmF0ZWd5X25ub2RlcyA8PSBzdHJhdGVneV9uY3B1cyk7 CisKIAkvKiBzaXplIG9mIGxvb2t1cCBoYXNoIHRhYmxlIC4uLiBzZWUgY29tbWVudCBpbiBT dHJhdGVneUluaXRpYWxpemUgKi8KIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgQnVmVGFibGVT aG1lbVNpemUoTkJ1ZmZlcnMgKyBOVU1fQlVGRkVSX1BBUlRJVElPTlMpKTsKIAogCS8qIHNp emUgb2YgdGhlIHNoYXJlZCByZXBsYWNlbWVudCBzdHJhdGVneSBjb250cm9sIGJsb2NrICov Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIE1BWEFMSUdOKHNpemVvZihCdWZmZXJTdHJhdGVn eUNvbnRyb2wpKSk7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIE1BWEFMSUdOKG9mZnNldG9m KEJ1ZmZlclN0cmF0ZWd5Q29udHJvbCwgZnJlZWxpc3RzKSkpOworCisJLyoKKwkgKiBBbGxv Y2F0ZSBvbmUgZnJlbGlzdCBwZXIgQ1BVLiBXZSBtaWdodCB1c2UgcGVyLW5vZGUgZnJlZWxp c3RzLCBidXQgdGhlCisJICogYXNzdW1wdGlvbiBpcyB0aGUgbnVtYmVyIG9mIENQVXMgaXMg bGVzcyB0aGFuIG51bWJlciBvZiBOVU1BIG5vZGVzLgorCSAqCisJICogRklYTUUgVGhpcyBh c3N1bWVzIHRoZSB3ZSBoYXZlIG1vcmUgQ1BVcyB0aGFuIE5VTUEgbm9kZXMsIHdoaWNoIHNl ZW1zCisJICogbGlrZSBhIHNhZmUgYXNzdW1wdGlvbi4gQnV0IG1heWJlIHdlIHNob3VsZCBj YWxjdWxhdGUgaG93IG1hbnkgZWxlbWVudHMKKwkgKiB3ZSBhY3R1YWxseSBuZWVkLCBkZXBl bmRpbmcgb24gdGhlIEdVQz8gTm90IGEgaHVnZSBhbW91bnQgb2YgbWVtb3J5LgorCSAqLwor CXNpemUgPSBhZGRfc2l6ZShzaXplLCBNQVhBTElHTihtdWxfc2l6ZShzaXplb2YoQnVmZmVy U3RyYXRlZ3lGcmVlbGlzdCksCisJCQkJCQkJCQkJCXN0cmF0ZWd5X25jcHVzKSkpOwogCiAJ cmV0dXJuIHNpemU7CiB9CkBAIC00NjYsNiArNjc2LDcgQEAgdm9pZAogU3RyYXRlZ3lJbml0 aWFsaXplKGJvb2wgaW5pdCkKIHsKIAlib29sCQlmb3VuZDsKKwlpbnQJCQlidWZmZXJzX3Bl cl9jcHU7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIHNoYXJlZCBidWZmZXIgbG9va3Vw IGhhc2h0YWJsZS4KQEAgLTQ4NCwyMyArNjk1LDI3IEBAIFN0cmF0ZWd5SW5pdGlhbGl6ZShi b29sIGluaXQpCiAJICovCiAJU3RyYXRlZ3lDb250cm9sID0gKEJ1ZmZlclN0cmF0ZWd5Q29u dHJvbCAqKQogCQlTaG1lbUluaXRTdHJ1Y3QoIkJ1ZmZlciBTdHJhdGVneSBTdGF0dXMiLAot CQkJCQkJc2l6ZW9mKEJ1ZmZlclN0cmF0ZWd5Q29udHJvbCksCisJCQkJCQlvZmZzZXRvZihC dWZmZXJTdHJhdGVneUNvbnRyb2wsIGZyZWVsaXN0cykgKworCQkJCQkJKHNpemVvZihCdWZm ZXJTdHJhdGVneUZyZWVsaXN0KSAqIHN0cmF0ZWd5X25jcHVzKSwKIAkJCQkJCSZmb3VuZCk7 CiAKIAlpZiAoIWZvdW5kKQogCXsKKwkJLyoKKwkJICogWFhYIENhbGxpbmcgZ2V0X25wcm9j cygpIG1heSBub3QgYmUgcXVpdGUgY29ycmVjdCwgYmVjYXVzZSBzb21lIG9mCisJCSAqIHRo ZSBwcm9jZXNzb3JzIG1heSBnZXQgZGlzYWJsZWQsIGV0Yy4KKwkJICovCisJCWludAkJCW51 bV9jcHVzID0gZ2V0X25wcm9jcygpOworCiAJCS8qCiAJCSAqIE9ubHkgZG9uZSBvbmNlLCB1 c3VhbGx5IGluIHBvc3RtYXN0ZXIKIAkJICovCiAJCUFzc2VydChpbml0KTsKIAotCQlTcGlu TG9ja0luaXQoJlN0cmF0ZWd5Q29udHJvbC0+YnVmZmVyX3N0cmF0ZWd5X2xvY2spOworCQkv KiByZWdpc3RlciBjYWxsYmFjayB0byBkdW1wIHNvbWUgc3RhdHMgb24gZXhpdCAqLworCQli ZWZvcmVfc2htZW1fZXhpdChmcmVlbGlzdF9iZWZvcmVfc2htZW1fZXhpdCwgMCk7CiAKLQkJ LyoKLQkJICogR3JhYiB0aGUgd2hvbGUgbGlua2VkIGxpc3Qgb2YgZnJlZSBidWZmZXJzIGZv ciBvdXIgc3RyYXRlZ3kuIFdlCi0JCSAqIGFzc3VtZSBpdCB3YXMgcHJldmlvdXNseSBzZXQg dXAgYnkgQnVmZmVyTWFuYWdlclNobWVtSW5pdCgpLgotCQkgKi8KLQkJU3RyYXRlZ3lDb250 cm9sLT5maXJzdEZyZWVCdWZmZXIgPSAwOworCQlTcGluTG9ja0luaXQoJlN0cmF0ZWd5Q29u dHJvbC0+YnVmZmVyX3N0cmF0ZWd5X2xvY2spOwogCiAJCS8qIEluaXRpYWxpemUgdGhlIGNs b2NrIHN3ZWVwIHBvaW50ZXIgKi8KIAkJcGdfYXRvbWljX2luaXRfdTMyKCZTdHJhdGVneUNv bnRyb2wtPm5leHRWaWN0aW1CdWZmZXIsIDApOwpAQCAtNTExLDYgKzcyNiw2MSBAQCBTdHJh dGVneUluaXRpYWxpemUoYm9vbCBpbml0KQogCiAJCS8qIE5vIHBlbmRpbmcgbm90aWZpY2F0 aW9uICovCiAJCVN0cmF0ZWd5Q29udHJvbC0+Ymd3cHJvY25vID0gLTE7CisKKwkJLyoKKwkJ ICogUmVidWlsZCB0aGUgZnJlZWxpc3QgLSByaWdodCBub3cgYWxsIGJ1ZmZlcnMgYXJlIGlu IG9uZSBodWdlIGxpc3QsCisJCSAqIHdlIHdhbnQgdG8gcmV3b3JrIHRoYXQgaW50byBtdWx0 aXBsZSBsaXN0cy4gU3RhcnQgYnkgaW5pdGlhbGl6aW5nCisJCSAqIHRoZSBzdHJhdGVneSB0 byBoYXZlIGVtcHR5IGxpc3RzLgorCQkgKi8KKwkJZm9yIChpbnQgbmZyZWVsaXN0ID0gMDsg bmZyZWVsaXN0IDwgc3RyYXRlZ3lfbmNwdXM7IG5mcmVlbGlzdCsrKQorCQl7CisJCQlCdWZm ZXJTdHJhdGVneUZyZWVsaXN0ICpmcmVlbGlzdDsKKworCQkJZnJlZWxpc3QgPSAmU3RyYXRl Z3lDb250cm9sLT5mcmVlbGlzdHNbbmZyZWVsaXN0XTsKKworCQkJZnJlZWxpc3QtPmZpcnN0 RnJlZUJ1ZmZlciA9IEZSRUVORVhUX0VORF9PRl9MSVNUOworCisJCQlTcGluTG9ja0luaXQo JmZyZWVsaXN0LT5mcmVlbGlzdF9sb2NrKTsKKwkJfQorCisJCS8qIGJ1ZmZlcnMgcGVyIENQ VSAoYWxzbyB1c2VkIGZvciBQSUQgcGFydGl0aW9uaW5nKSAqLworCQlidWZmZXJzX3Blcl9j cHUgPSAoTkJ1ZmZlcnMgLyBzdHJhdGVneV9uY3B1cyk7CisKKwkJZWxvZyhMT0csICJOQnVm ZmVyczogJWQsIG5vZGVzICVkLCBuY3B1czogJWQsIGRpdmlkZTogJWQsIHJlbWFpbjogJWQi LAorCQkJIE5CdWZmZXJzLCBzdHJhdGVneV9ubm9kZXMsIHN0cmF0ZWd5X25jcHVzLAorCQkJ IGJ1ZmZlcnNfcGVyX2NwdSwgTkJ1ZmZlcnMgLSAoc3RyYXRlZ3lfbmNwdXMgKiBidWZmZXJz X3Blcl9jcHUpKTsKKworCQkvKgorCQkgKiBXYWxrIHRocm91Z2ggdGhlIGJ1ZmZlcnMsIGFk ZCB0aGVtIHRvIHRoZSBjb3JyZWN0IGxpc3QuIFdhbGsgZnJvbQorCQkgKiB0aGUgZW5kLCBi ZWNhdXNlIHdlJ3JlIGFkZGluZyB0aGUgYnVmZmVycyB0byB0aGUgYmVnaW5uaW5nLgorCQkg Ki8KKwkJZm9yIChpbnQgaSA9IE5CdWZmZXJzIC0gMTsgaSA+PSAwOyBpLS0pCisJCXsKKwkJ CUJ1ZmZlckRlc2MgKmJ1ZiA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoaSk7CisJCQlCdWZmZXJT dHJhdGVneUZyZWVsaXN0ICpmcmVlbGlzdDsKKwkJCWludAkJCWJlbG9uZ3NfdG8gPSAwOyAv KiBmaXJzdCBmcmVlbGlzdCBieSBkZWZhdWx0ICovCisKKwkJCS8qCisJCQkgKiBTcGxpdCB0 aGUgZnJlZWxpc3QgaW50byBwYXJ0aXRpb25zLCBpZiBuZWVkZWQgKG9yIGp1c3Qga2VlcCB0 aGUKKwkJCSAqIGZyZWVsaXN0IHdlIGFscmVhZHkgYnVpbHQgaW4gQnVmZmVyTWFuYWdlclNo bWVtSW5pdCgpLgorCQkJICovCisJCQlpZiAoKG51bWFfcGFydGl0aW9uX2ZyZWVsaXN0ID09 IEZSRUVMSVNUX1BBUlRJVElPTl9DUFUpIHx8CisJCQkJKG51bWFfcGFydGl0aW9uX2ZyZWVs aXN0ID09IEZSRUVMSVNUX1BBUlRJVElPTl9QSUQpKQorCQkJeworCQkJCWJlbG9uZ3NfdG8g PSAoaSAlIG51bV9jcHVzKTsKKwkJCX0KKwkJCWVsc2UgaWYgKG51bWFfcGFydGl0aW9uX2Zy ZWVsaXN0ID09IEZSRUVMSVNUX1BBUlRJVElPTl9OT0RFKQorCQkJeworCQkJCS8qIGRldGVy bWluZSBOVU1BIG5vZGUgZm9yIGJ1ZmZlciAqLworCQkJCWJlbG9uZ3NfdG8gPSBCdWZmZXJH ZXROb2RlKGkpOworCQkJfQorCisJCQkvKiBhZGQgdG8gdGhlIHJpZ2h0IGZyZWVsaXN0ICov CisJCQlmcmVlbGlzdCA9ICZTdHJhdGVneUNvbnRyb2wtPmZyZWVsaXN0c1tiZWxvbmdzX3Rv XTsKKworCQkJYnVmLT5mcmVlTmV4dCA9IGZyZWVsaXN0LT5maXJzdEZyZWVCdWZmZXI7CisJ CQlmcmVlbGlzdC0+Zmlyc3RGcmVlQnVmZmVyID0gaTsKKwkJfQogCX0KIAllbHNlCiAJCUFz c2VydCghaW5pdCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2Jh bHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCmluZGV4IGY1MzU5ZGIz NjU2Li43ZmViZjMwMDFhMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9n bG9iYWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKQEAgLTE0 OCw2ICsxNDgsNyBAQCBpbnQJCQlNYXhCYWNrZW5kcyA9IDA7CiAvKiBOVU1BIHN0dWZmICov CiBib29sCQludW1hX2J1ZmZlcnNfaW50ZXJsZWF2ZSA9IGZhbHNlOwogYm9vbAkJbnVtYV9s b2NhbGFsbG9jID0gZmFsc2U7CitpbnQJCQludW1hX3BhcnRpdGlvbl9mcmVlbGlzdCA9IDA7 CiAKIC8qIEdVQyBwYXJhbWV0ZXJzIGZvciB2YWN1dW0gKi8KIGludAkJCVZhY3V1bUJ1ZmZl clVzYWdlTGltaXQgPSAyMDQ4OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpp bmRleCA1N2YyZGY3YWI3NC4uZTIzNjFjMTYxZTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3RhYmxlcy5jCkBAIC00OTEsNiArNDkxLDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg Y29uZmlnX2VudW1fZW50cnkgZmlsZV9jb3B5X21ldGhvZF9vcHRpb25zW10gPSB7CiAJe05V TEwsIDAsIGZhbHNlfQogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfZW51bV9l bnRyeSBmcmVlbGlzdF9wYXJ0aXRpb25fb3B0aW9uc1tdID0geworCXsibm9uZSIsIEZSRUVM SVNUX1BBUlRJVElPTl9OT05FLCBmYWxzZX0sCisJeyJub2RlIiwgRlJFRUxJU1RfUEFSVElU SU9OX05PREUsIGZhbHNlfSwKKwl7ImNwdSIsIEZSRUVMSVNUX1BBUlRJVElPTl9DUFUsIGZh bHNlfSwKKwl7InBpZCIsIEZSRUVMSVNUX1BBUlRJVElPTl9QSUQsIGZhbHNlfSwKKwl7TlVM TCwgMCwgZmFsc2V9Cit9OworCiAvKgogICogT3B0aW9ucyBmb3IgZW51bSB2YWx1ZXMgc3Rv cmVkIGluIG90aGVyIG1vZHVsZXMKICAqLwpAQCAtNTI4NCw2ICs1MjkyLDE2IEBAIHN0cnVj dCBjb25maWdfZW51bSBDb25maWd1cmVOYW1lc0VudW1bXSA9CiAJCU5VTEwsIE5VTEwsIE5V TEwKIAl9LAogCisJeworCQl7Im51bWFfcGFydGl0aW9uX2ZyZWVsaXN0IiwgUEdDX1VTRVJT RVQsIERFVkVMT1BFUl9PUFRJT05TLAorCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIGJ1ZmZl ciBmcmVlbGlzdHMgdG8gYmUgcGFydGl0aW9uZWQgcGVyIE5VTUEgbm9kZS4iKSwKKwkJCWdl dHRleHRfbm9vcCgiV2hlbiBlbmFibGVkLCB3ZSBjcmVhdGUgYSBzZXBhcmF0ZSBmcmVlbGlz dCBwZXIgTlVNQSBub2RlLiIpLAorCQl9LAorCQkmbnVtYV9wYXJ0aXRpb25fZnJlZWxpc3Qs CisJCUZSRUVMSVNUX1BBUlRJVElPTl9OT05FLCBmcmVlbGlzdF9wYXJ0aXRpb25fb3B0aW9u cywKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKIAl7CiAJCXsid2FsX3N5bmNfbWV0aG9k IiwgUEdDX1NJR0hVUCwgV0FMX1NFVFRJTkdTLAogCQkJZ2V0dGV4dF9ub29wKCJTZWxlY3Rz IHRoZSBtZXRob2QgdXNlZCBmb3IgZm9yY2luZyBXQUwgdXBkYXRlcyB0byBkaXNrLiIpLApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9zcmMvaW5jbHVkZS9taXNj YWRtaW4uaAppbmRleCA2OTI4NzFhNDAxZi4uMTc1Mjg0MzlmMDcgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCkBA IC0xODAsNiArMTgwLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfcGFyYWxsZWxf d29ya2VyczsKIAogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgbnVtYV9idWZmZXJzX2ludGVy bGVhdmU7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBudW1hX2xvY2FsYWxsb2M7CitleHRl cm4gUEdETExJTVBPUlQgaW50IG51bWFfcGFydGl0aW9uX2ZyZWVsaXN0OwogCiBleHRlcm4g UEdETExJTVBPUlQgaW50IGNvbW1pdF90aW1lc3RhbXBfYnVmZmVyczsKIGV4dGVybiBQR0RM TElNUE9SVCBpbnQgbXVsdGl4YWN0X21lbWJlcl9idWZmZXJzOwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdy LmgKaW5kZXggYzI1N2M4YTFjMjAuLmVmYjdlMjhjMTBmIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9zdG9yYWdlL2J1Zm1nci5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdy LmgKQEAgLTkzLDYgKzkzLDE0IEBAIHR5cGVkZWYgZW51bSBFeHRlbmRCdWZmZXJlZEZsYWdz CiAJRUJfTE9DS19UQVJHRVQgPSAoMSA8PCA1KSwKIH0JCQlFeHRlbmRCdWZmZXJlZEZsYWdz OwogCit0eXBlZGVmIGVudW0gRnJlZWxpc3RQYXJ0aXRpb25Nb2RlCit7CisJRlJFRUxJU1Rf UEFSVElUSU9OX05PTkUsCisJRlJFRUxJU1RfUEFSVElUSU9OX05PREUsCisJRlJFRUxJU1Rf UEFSVElUSU9OX0NQVSwKKwlGUkVFTElTVF9QQVJUSVRJT05fUElELAorfQkJCUZyZWVsaXN0 UGFydGl0aW9uTW9kZTsKKwogLyoKICAqIFNvbWUgZnVuY3Rpb25zIGlkZW50aWZ5IHJlbGF0 aW9ucyBlaXRoZXIgYnkgcmVsYXRpb24gb3Igc21nciArCiAgKiByZWxwZXJzaXN0ZW5jZS4g IFVzZWQgdmlhIHRoZSBCTVJfUkVMKCkvQk1SX1NNR1IoKSBtYWNyb3MgYmVsb3cuICBUaGlz Ci0tIAoyLjQ5LjAKCg== --------------LG5I5UHq4oggMq78gAQBocuX Content-Type: text/x-patch; charset=UTF-8; name="v1-0005-NUMA-interleave-PGPROC-entries.patch" Content-Disposition: attachment; filename="v1-0005-NUMA-interleave-PGPROC-entries.patch" Content-Transfer-Encoding: base64 RnJvbSAwNWM1OTRlZDhlYjhhMjY2YTc0MDM4YzMxMzFkMTJiYjAzZDg5N2UzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVGh1LCAyMiBNYXkgMjAyNSAxODozOTowOCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djEgNS82XSBOVU1BOiBpbnRlcmxlYXZlIFBHUFJPQyBlbnRyaWVzCgpUaGUgZ29hbCBpcyB0 byBkaXN0cmlidXRlIFByb2NBcnJheSAob3IgcmF0aGVyIFBHUFJPQyBlbnRyaWVzIGFuZAph c3NvY2lhdGVkIGZhc3QtcGF0aCBhcnJheXMpIHRvIE5VTUEgbm9kZXMuCgpXZSBjYW4ndCBk byB0aGlzIGJ5IHNpbXBseSBpbnRlcmxlYXZpbmcgcGFnZXMsIGJlY2F1c2UgdGhhdCB3b3Vs ZG4ndAp3b3JrIGZvciBib3RoIHBhcnRzIGF0IHRoZSBzYW1lIHRpbWUuIFdlIHdhbnQgdG8g cGxhY2UgdGhlIFBHUFJPQyBhbmQKaXQncyBmYXN0LXBhdGggbG9ja2luZyBzdHJ1Y3RzIG9u IHRoZSBzYW1lIG5vZGUsIGJ1dCB0aGUgc3RydWN0cyBhcmUKb2YgZGlmZmVyZW50IHNpemVz LCBldGMuCgpBbm90aGVyIHByb2JsZW0gaXMgdGhhdCBQR1BST0MgZW50cmllcyBhcmUgZmFp cmx5IHNtYWxsLCBzbyB3aXRoIGh1Z2UKcGFnZXMgYW5kIHJlYXNvbmFibGUgdmFsdWVzIG9m IG1heF9jb25uZWN0aW9ucyBldmVyeXRoaW5nIGZpdHMgb250byBhCnNpbmdsZSBwYWdlLiBX ZSBkb24ndCB3YW50IHRvIG1ha2UgdGhpcyBpbmNvbXBhdGlibGUgd2l0aCBodWdlIHBhZ2Vz LgoKTm90ZTogSWYgd2UgZXZlbnR1YWxseSBzd2l0Y2ggdG8gYWxsb2NhdGluZyBzZXBhcmF0 ZSBzaGFyZWQgc2VnbWVudHMgZm9yCmRpZmZlcmVudCBwYXJ0cyAodG8gYWxsb3cgb24tbGlu ZSByZXNpemluZyksIHdlIGNvdWxkIGtlZXAgdXNpbmcgcmVndWxhcgpwYWdlcyBmb3IgcHJv Y2FycmF5LCBhbmQgdGhpcyB3b3VsZCBub3QgYmUgc3VjaCBhbiBpc3N1ZS4KClRvIG1ha2Ug dGhpcyB3b3JrLCB3ZSBzcGxpdCB0aGUgUEdQUk9DIGFycmF5IGludG8gcGVyLW5vZGUgc2Vn bWVudHMsCmVhY2ggd2l0aCBhYm91dCAoTWF4QmFja2VuZHMgLyBudW1hX25vZGVzKSBlbnRy aWVzLCBhbmQgb25lIHNlZ21lbnQgZm9yCmF1eGlsaWFyeSBwcm9jZXNzZXMgYW5kIHByZXBh cmVkIHRyYW5zYXRpb25zLiBBbmQgd2UgZG8gdGhlIHNhbWUgdGhpbmcKZm9yIGZhc3QtcGF0 aCBhcnJheXMuCgpUaGUgUEdQUk9DIHNlZ21lbnRzIGFyZSBsYWlkIG91dCBsaWtlIHRoaXMg KGUuZy4gZm9yIDIgTlVNQSBub2Rlcyk6CgogLSBQR1BST0MgYXJyYXkgLyBub2RlICMwCiAt IFBHUFJPQyBhcnJheSAvIG5vZGUgIzEKIC0gUEdQUk9DIGFycmF5IC8gYXV4IHByb2Nlc3Nl cyArIDJQQyB0cmFuc2FjdGlvbnMKIC0gZmFzdC1wYXRoIGFycmF5cyAvIG5vZGUgIzAKIC0g ZmFzdC1wYXRoIGFycmF5cyAvIG5vZGUgIzEKIC0gZmFzdC1wYXRoIGFycmF5cyAvIGF1eCBw cm9jZXNzZXMgKyAyUEMgdHJhbnNhY3Rpb24KCkVhY2ggc2VnbWVudCBpcyBhbGlnbmVkIHRv IChzdGFydHMgYXQpIG1lbW9yeSBwYWdlLCBhbmQgaXMgZWZmZWN0aXZlbHkgYQptdWx0aXBs ZSBvZiBtdWx0aXBsZSBtZW1vcnkgcGFnZXMuCgpIYXZpbmcgYSBzaW5nbGUgUEdQUk9DIGFy cmF5IG1hZGUgY2VydGFpbiBvcGVyYXRpb25zIGVhc2llcnMgLSBlLmcuIGl0CndhcyBwb3Nz aWJsZSB0byBpdGVyYXRlIHRoZSBhcnJheSwgYW5kIEdldE51bWJlckZyb21QR1Byb2MoKSBj b3VsZApjYWxjdWxhdGUgb2Zmc2V0IGJ5IHNpbXBseSBzdWJ0cmFjdGluZyBQR1BST0MgcG9p bnRlcnMuIFdpdGggbXVsdGlwbGUKc2VnbWVudHMgdGhhdCdzIG5vdCBwb3NzaWJsZSwgYnV0 IHRoZSBmYWxsb3V0IGlzIG1pbmltYWwuCgpNb3N0IHBsYWNlcyBhY2Nlc3NlZCBQR1BST0Mg dGhyb3VnaCBQUk9DX0hEUi0+YWxsUHJvY3MsIGFuZCBjYW4gY29udGludWUKdG8gZG8gc28s IGV4Y2VwdCB0aGF0IG5vdyB0aGV5IGdldCBhIHBvaW50ZXIgdG8gdGhlIFBHUFJPQyAod2hp Y2ggbW9zdApwbGFjZXMgd2FudGVkIGFueXdheSkuCgpOb3RlOiBUaGVyZSdzIGFuIGluZGly ZWN0aW9uLCB0aG91Z2guIEJ1dCB0aGUgcG9pbnRlciBkb2VzIG5vdCBjaGFuZ2UsCnNvIGhv cGVmdWxseSB0aGF0J3Mgbm90IGFuIGlzc3VlLiBBbmQgZWFjaCBQR1BST0MgZW50cnkgZ2V0 cyBhbiBleHBsaWNpdApwcm9jbnVtYmVyIGZpZWxkLCB3aGljaCBpcyB0aGUgaW5kZXggaW4g YWxsUHJvY3MsIEdldE51bWJlckZyb21QR1Byb2MKY2FuIHNpbXBseSByZXR1cm4gdGhhdC4K CkVhY2ggUEdQUk9DIGFsc28gZ2V0cyBudW1hX25vZGUsIHRyYWNraW5nIHRoZSBOVU1BIG5v ZGUsIHNvIHRoYXQgd2UKZG9uJ3QgaGF2ZSB0byByZWNhbGN1bGF0ZSB0aGF0LiBUaGlzIGlz IHVzZWQgYnkgSW5pdFByb2Nlc3MoKSB0byBwaWNrCmEgUEdQUk9DIGVudHJ5IGZyb20gdGhl IGxvY2FsIE5VTUEgbm9kZS4KCk5vdGU6IFRoZSBzY2hlZHVsZXIgbWF5IG1pZ3JhdGUgdGhl IHByb2Nlc3MgdG8gYSBkaWZmZXJlbnQgQ1BVL25vZGUKbGF0ZXIuIE1heWJlIHdlIHNob3Vs ZCBjb25zaWRlciBwaW5uaW5nIHRoZSBwcm9jZXNzIHRvIHRoZSBub2RlPwotLS0KIHNyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYyAgICAgIHwgICA0ICstCiBzcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL3BnYXJjaC5jICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci93YWxzdW1tYXJpemVyLmMgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2ZyZWVsaXN0LmMgIHwgICAyICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9w cm9jYXJyYXkuYyAgICB8ICA2MiArKy0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xv Y2suYyAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMg ICAgICAgIHwgMzY4ICsrKysrKysrKysrKysrKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL3V0 aWxzL2luaXQvZ2xvYmFscy5jICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjX3RhYmxlcy5jICAgIHwgIDEwICsKIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAg ICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oICAgICAg ICAgICAgIHwgIDExICstCiAxMSBmaWxlcyBjaGFuZ2VkLCA0MDcgaW5zZXJ0aW9ucygrKSwg NjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0vY2xvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jCmluZGV4IDQ4 ZjEwYmVjOTFlLi45MGRkZmYzN2JjNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vY2xvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cu YwpAQCAtNTc2LDcgKzU3Niw3IEBAIFRyYW5zYWN0aW9uR3JvdXBVcGRhdGVYaWRTdGF0dXMo VHJhbnNhY3Rpb25JZCB4aWQsIFhpZFN0YXR1cyBzdGF0dXMsCiAJLyogV2FsayB0aGUgbGlz dCBhbmQgdXBkYXRlIHRoZSBzdGF0dXMgb2YgYWxsIFhJRHMuICovCiAJd2hpbGUgKG5leHRp ZHggIT0gSU5WQUxJRF9QUk9DX05VTUJFUikKIAl7Ci0JCVBHUFJPQwkgICAqbmV4dHByb2Mg PSAmUHJvY0dsb2JhbC0+YWxsUHJvY3NbbmV4dGlkeF07CisJCVBHUFJPQwkgICAqbmV4dHBy b2MgPSBQcm9jR2xvYmFsLT5hbGxQcm9jc1tuZXh0aWR4XTsKIAkJaW50NjQJCXRoaXNwYWdl bm8gPSBuZXh0cHJvYy0+Y2xvZ0dyb3VwTWVtYmVyUGFnZTsKIAogCQkvKgpAQCAtNjM1LDcg KzYzNSw3IEBAIFRyYW5zYWN0aW9uR3JvdXBVcGRhdGVYaWRTdGF0dXMoVHJhbnNhY3Rpb25J ZCB4aWQsIFhpZFN0YXR1cyBzdGF0dXMsCiAJICovCiAJd2hpbGUgKHdha2VpZHggIT0gSU5W QUxJRF9QUk9DX05VTUJFUikKIAl7Ci0JCVBHUFJPQwkgICAqd2FrZXByb2MgPSAmUHJvY0ds b2JhbC0+YWxsUHJvY3Nbd2FrZWlkeF07CisJCVBHUFJPQwkgICAqd2FrZXByb2MgPSBQcm9j R2xvYmFsLT5hbGxQcm9jc1t3YWtlaWR4XTsKIAogCQl3YWtlaWR4ID0gcGdfYXRvbWljX3Jl YWRfdTMyKCZ3YWtlcHJvYy0+Y2xvZ0dyb3VwTmV4dCk7CiAJCXBnX2F0b21pY193cml0ZV91 MzIoJndha2Vwcm9jLT5jbG9nR3JvdXBOZXh0LCBJTlZBTElEX1BST0NfTlVNQkVSKTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMgYi9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL3BnYXJjaC5jCmluZGV4IDdlNjIyYWU0YmQyLi43NWMwZTRiZjUzYyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2FyY2guYworKysgYi9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jCkBAIC0yODksNyArMjg5LDcgQEAgUGdBcmNo V2FrZXVwKHZvaWQpCiAJICogYmUgcmVsYXVuY2hlZCBzaG9ydGx5IGFuZCB3aWxsIHN0YXJ0 IGFyY2hpdmluZy4KIAkgKi8KIAlpZiAoYXJjaF9wZ3Byb2NubyAhPSBJTlZBTElEX1BST0Nf TlVNQkVSKQotCQlTZXRMYXRjaCgmUHJvY0dsb2JhbC0+YWxsUHJvY3NbYXJjaF9wZ3Byb2Nu b10ucHJvY0xhdGNoKTsKKwkJU2V0TGF0Y2goJlByb2NHbG9iYWwtPmFsbFByb2NzW2FyY2hf cGdwcm9jbm9dLT5wcm9jTGF0Y2gpOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93 YWxzdW1tYXJpemVyLmMKaW5kZXggMGZlYzRmMWY4NzEuLjAwNDRlZjU0MzYzIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYworKysgYi9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwpAQCAtNjQ5LDcgKzY0OSw3IEBA IFdha2V1cFdhbFN1bW1hcml6ZXIodm9pZCkKIAlMV0xvY2tSZWxlYXNlKFdBTFN1bW1hcml6 ZXJMb2NrKTsKIAogCWlmIChwZ3Byb2NubyAhPSBJTlZBTElEX1BST0NfTlVNQkVSKQotCQlT ZXRMYXRjaCgmUHJvY0dsb2JhbC0+YWxsUHJvY3NbcGdwcm9jbm9dLnByb2NMYXRjaCk7CisJ CVNldExhdGNoKCZQcm9jR2xvYmFsLT5hbGxQcm9jc1twZ3Byb2Nub10tPnByb2NMYXRjaCk7 CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVl bGlzdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwppbmRleCBj OTNlYzI4NDFjNS4uNGUzOTBhNzdhNzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvYnVmZmVyL2ZyZWVsaXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIv ZnJlZWxpc3QuYwpAQCAtMzYwLDcgKzM2MCw3IEBAIFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZl ckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1aW50MzIgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJv bV9yCiAJCSAqIGFjdHVhbGx5IGZpbmUgYmVjYXVzZSBwcm9jTGF0Y2ggaXNuJ3QgZXZlciBm cmVlZCwgc28gd2UganVzdCBjYW4KIAkJICogcG90ZW50aWFsbHkgc2V0IHRoZSB3cm9uZyBw cm9jZXNzJyAob3Igbm8gcHJvY2VzcycpIGxhdGNoLgogCQkgKi8KLQkJU2V0TGF0Y2goJlBy b2NHbG9iYWwtPmFsbFByb2NzW2Jnd3Byb2Nub10ucHJvY0xhdGNoKTsKKwkJU2V0TGF0Y2go JlByb2NHbG9iYWwtPmFsbFByb2NzW2Jnd3Byb2Nub10tPnByb2NMYXRjaCk7CiAJfQogCiAJ LyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKaW5kZXggZTViOTQ1YTllZTMu LjMyNzc0ODBmYmNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9j YXJyYXkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwpAQCAt MjY4LDcgKzI2OCw3IEBAIHR5cGVkZWYgZW51bSBLQVhDb21wcmVzc1JlYXNvbgogCiBzdGF0 aWMgUHJvY0FycmF5U3RydWN0ICpwcm9jQXJyYXk7CiAKLXN0YXRpYyBQR1BST0MgKmFsbFBy b2NzOworc3RhdGljIFBHUFJPQyAqKmFsbFByb2NzOwogCiAvKgogICogQ2FjaGUgdG8gcmVk dWNlIG92ZXJoZWFkIG9mIHJlcGVhdGVkIGNhbGxzIHRvIFRyYW5zYWN0aW9uSWRJc0luUHJv Z3Jlc3MoKQpAQCAtNTAyLDcgKzUwMiw3IEBAIFByb2NBcnJheUFkZChQR1BST0MgKnByb2Mp CiAJCWludAkJCXRoaXNfcHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwogCiAJ CUFzc2VydCh0aGlzX3Byb2NubyA+PSAwICYmIHRoaXNfcHJvY25vIDwgKGFycmF5UC0+bWF4 UHJvY3MgKyBOVU1fQVVYSUxJQVJZX1BST0NTKSk7Ci0JCUFzc2VydChhbGxQcm9jc1t0aGlz X3Byb2Nub10ucGd4YWN0b2ZmID09IGluZGV4KTsKKwkJQXNzZXJ0KGFsbFByb2NzW3RoaXNf cHJvY25vXS0+cGd4YWN0b2ZmID09IGluZGV4KTsKIAogCQkvKiBJZiB3ZSBoYXZlIGZvdW5k IG91ciByaWdodCBwb3NpdGlvbiBpbiB0aGUgYXJyYXksIGJyZWFrICovCiAJCWlmICh0aGlz X3Byb2NubyA+IHBncHJvY25vKQpAQCAtNTM4LDkgKzUzOCw5IEBAIFByb2NBcnJheUFkZChQ R1BST0MgKnByb2MpCiAJCWludAkJCXByb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4 XTsKIAogCQlBc3NlcnQocHJvY25vID49IDAgJiYgcHJvY25vIDwgKGFycmF5UC0+bWF4UHJv Y3MgKyBOVU1fQVVYSUxJQVJZX1BST0NTKSk7Ci0JCUFzc2VydChhbGxQcm9jc1twcm9jbm9d LnBneGFjdG9mZiA9PSBpbmRleCAtIDEpOworCQlBc3NlcnQoYWxsUHJvY3NbcHJvY25vXS0+ cGd4YWN0b2ZmID09IGluZGV4IC0gMSk7CiAKLQkJYWxsUHJvY3NbcHJvY25vXS5wZ3hhY3Rv ZmYgPSBpbmRleDsKKwkJYWxsUHJvY3NbcHJvY25vXS0+cGd4YWN0b2ZmID0gaW5kZXg7CiAJ fQogCiAJLyoKQEAgLTU4MSw3ICs1ODEsNyBAQCBQcm9jQXJyYXlSZW1vdmUoUEdQUk9DICpw cm9jLCBUcmFuc2FjdGlvbklkIGxhdGVzdFhpZCkKIAlteW9mZiA9IHByb2MtPnBneGFjdG9m ZjsKIAogCUFzc2VydChteW9mZiA+PSAwICYmIG15b2ZmIDwgYXJyYXlQLT5udW1Qcm9jcyk7 Ci0JQXNzZXJ0KFByb2NHbG9iYWwtPmFsbFByb2NzW2FycmF5UC0+cGdwcm9jbm9zW215b2Zm XV0ucGd4YWN0b2ZmID09IG15b2ZmKTsKKwlBc3NlcnQoUHJvY0dsb2JhbC0+YWxsUHJvY3Nb YXJyYXlQLT5wZ3Byb2Nub3NbbXlvZmZdXS0+cGd4YWN0b2ZmID09IG15b2ZmKTsKIAogCWlm IChUcmFuc2FjdGlvbklkSXNWYWxpZChsYXRlc3RYaWQpKQogCXsKQEAgLTYzNiw5ICs2MzYs OSBAQCBQcm9jQXJyYXlSZW1vdmUoUEdQUk9DICpwcm9jLCBUcmFuc2FjdGlvbklkIGxhdGVz dFhpZCkKIAkJaW50CQkJcHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwogCiAJ CUFzc2VydChwcm9jbm8gPj0gMCAmJiBwcm9jbm8gPCAoYXJyYXlQLT5tYXhQcm9jcyArIE5V TV9BVVhJTElBUllfUFJPQ1MpKTsKLQkJQXNzZXJ0KGFsbFByb2NzW3Byb2Nub10ucGd4YWN0 b2ZmIC0gMSA9PSBpbmRleCk7CisJCUFzc2VydChhbGxQcm9jc1twcm9jbm9dLT5wZ3hhY3Rv ZmYgLSAxID09IGluZGV4KTsKIAotCQlhbGxQcm9jc1twcm9jbm9dLnBneGFjdG9mZiA9IGlu ZGV4OworCQlhbGxQcm9jc1twcm9jbm9dLT5wZ3hhY3RvZmYgPSBpbmRleDsKIAl9CiAKIAkv KgpAQCAtODYwLDcgKzg2MCw3IEBAIFByb2NBcnJheUdyb3VwQ2xlYXJYaWQoUEdQUk9DICpw cm9jLCBUcmFuc2FjdGlvbklkIGxhdGVzdFhpZCkKIAkvKiBXYWxrIHRoZSBsaXN0IGFuZCBj bGVhciBhbGwgWElEcy4gKi8KIAl3aGlsZSAobmV4dGlkeCAhPSBJTlZBTElEX1BST0NfTlVN QkVSKQogCXsKLQkJUEdQUk9DCSAgICpuZXh0cHJvYyA9ICZhbGxQcm9jc1tuZXh0aWR4XTsK KwkJUEdQUk9DCSAgICpuZXh0cHJvYyA9IGFsbFByb2NzW25leHRpZHhdOwogCiAJCVByb2NB cnJheUVuZFRyYW5zYWN0aW9uSW50ZXJuYWwobmV4dHByb2MsIG5leHRwcm9jLT5wcm9jQXJy YXlHcm91cE1lbWJlclhpZCk7CiAKQEAgLTg4MCw3ICs4ODAsNyBAQCBQcm9jQXJyYXlHcm91 cENsZWFyWGlkKFBHUFJPQyAqcHJvYywgVHJhbnNhY3Rpb25JZCBsYXRlc3RYaWQpCiAJICov CiAJd2hpbGUgKHdha2VpZHggIT0gSU5WQUxJRF9QUk9DX05VTUJFUikKIAl7Ci0JCVBHUFJP QwkgICAqbmV4dHByb2MgPSAmYWxsUHJvY3Nbd2FrZWlkeF07CisJCVBHUFJPQwkgICAqbmV4 dHByb2MgPSBhbGxQcm9jc1t3YWtlaWR4XTsKIAogCQl3YWtlaWR4ID0gcGdfYXRvbWljX3Jl YWRfdTMyKCZuZXh0cHJvYy0+cHJvY0FycmF5R3JvdXBOZXh0KTsKIAkJcGdfYXRvbWljX3dy aXRlX3UzMigmbmV4dHByb2MtPnByb2NBcnJheUdyb3VwTmV4dCwgSU5WQUxJRF9QUk9DX05V TUJFUik7CkBAIC0xNTI2LDcgKzE1MjYsNyBAQCBUcmFuc2FjdGlvbklkSXNJblByb2dyZXNz KFRyYW5zYWN0aW9uSWQgeGlkKQogCQlweGlkcyA9IG90aGVyX3N1YnhpZHN0YXRlc1twZ3hh Y3RvZmZdLmNvdW50OwogCQlwZ19yZWFkX2JhcnJpZXIoKTsJCS8qIHBhaXJzIHdpdGggYmFy cmllciBpbiBHZXROZXdUcmFuc2FjdGlvbklkKCkgKi8KIAkJcGdwcm9jbm8gPSBhcnJheVAt PnBncHJvY25vc1twZ3hhY3RvZmZdOwotCQlwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsK KwkJcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAkJZm9yIChqID0gcHhpZHMgLSAxOyBq ID49IDA7IGotLSkKIAkJewogCQkJLyogRmV0Y2ggeGlkIGp1c3Qgb25jZSAtIHNlZSBHZXRO ZXdUcmFuc2FjdGlvbklkICovCkBAIC0xNjUwLDcgKzE2NTAsNyBAQCBUcmFuc2FjdGlvbklk SXNBY3RpdmUoVHJhbnNhY3Rpb25JZCB4aWQpCiAJZm9yIChpID0gMDsgaSA8IGFycmF5UC0+ bnVtUHJvY3M7IGkrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nu b3NbaV07Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCVBH UFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAkJVHJhbnNhY3Rpb25JZCBw eGlkOwogCiAJCS8qIEZldGNoIHhpZCBqdXN0IG9uY2UgLSBzZWUgR2V0TmV3VHJhbnNhY3Rp b25JZCAqLwpAQCAtMTc5Miw3ICsxNzkyLDcgQEAgQ29tcHV0ZVhpZEhvcml6b25zKENvbXB1 dGVYaWRIb3Jpem9uc1Jlc3VsdCAqaCkKIAlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwg YXJyYXlQLT5udW1Qcm9jczsgaW5kZXgrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0gYXJy YXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3Nb cGdwcm9jbm9dOworCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAJ CWludDgJCXN0YXR1c0ZsYWdzID0gUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3NbaW5kZXhdOwog CQlUcmFuc2FjdGlvbklkIHhpZDsKIAkJVHJhbnNhY3Rpb25JZCB4bWluOwpAQCAtMjI3Niw3 ICsyMjc2LDcgQEAgR2V0U25hcHNob3REYXRhKFNuYXBzaG90IHNuYXBzaG90KQogCQkJVHJh bnNhY3Rpb25JZCB4aWQgPSBVSU5UMzJfQUNDRVNTX09OQ0Uob3RoZXJfeGlkc1twZ3hhY3Rv ZmZdKTsKIAkJCXVpbnQ4CQlzdGF0dXNGbGFnczsKIAotCQkJQXNzZXJ0KGFsbFByb2NzW2Fy cmF5UC0+cGdwcm9jbm9zW3BneGFjdG9mZl1dLnBneGFjdG9mZiA9PSBwZ3hhY3RvZmYpOwor CQkJQXNzZXJ0KGFsbFByb2NzW2FycmF5UC0+cGdwcm9jbm9zW3BneGFjdG9mZl1dLT5wZ3hh Y3RvZmYgPT0gcGd4YWN0b2ZmKTsKIAogCQkJLyoKIAkJCSAqIElmIHRoZSB0cmFuc2FjdGlv biBoYXMgbm8gWElEIGFzc2lnbmVkLCB3ZSBjYW4gc2tpcCBpdDsgaXQKQEAgLTIzNTAsNyAr MjM1MCw3IEBAIEdldFNuYXBzaG90RGF0YShTbmFwc2hvdCBzbmFwc2hvdCkKIAkJCQkJaWYg KG5zdWJ4aWRzID4gMCkKIAkJCQkJewogCQkJCQkJaW50CQkJcGdwcm9jbm8gPSBwZ3Byb2Nu b3NbcGd4YWN0b2ZmXTsKLQkJCQkJCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3By b2Nub107CisJCQkJCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAK IAkJCQkJCXBnX3JlYWRfYmFycmllcigpOwkvKiBwYWlycyB3aXRoIEdldE5ld1RyYW5zYWN0 aW9uSWQgKi8KIApAQCAtMjU1MSw3ICsyNTUxLDcgQEAgUHJvY0FycmF5SW5zdGFsbEltcG9y dGVkWG1pbihUcmFuc2FjdGlvbklkIHhtaW4sCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwg YXJyYXlQLT5udW1Qcm9jczsgaW5kZXgrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0gYXJy YXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3Nb cGdwcm9jbm9dOworCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAJ CWludAkJCXN0YXR1c0ZsYWdzID0gUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3NbaW5kZXhdOwog CQlUcmFuc2FjdGlvbklkIHhpZDsKIApAQCAtMjc3Nyw3ICsyNzc3LDcgQEAgR2V0UnVubmlu Z1RyYW5zYWN0aW9uRGF0YSh2b2lkKQogCQlpZiAoVHJhbnNhY3Rpb25JZFByZWNlZGVzKHhp ZCwgb2xkZXN0RGF0YWJhc2VSdW5uaW5nWGlkKSkKIAkJewogCQkJaW50CQkJcGdwcm9jbm8g PSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0JCQlQR1BST0MJICAgKnByb2MgPSAmYWxs UHJvY3NbcGdwcm9jbm9dOworCQkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9j bm9dOwogCiAJCQlpZiAocHJvYy0+ZGF0YWJhc2VJZCA9PSBNeURhdGFiYXNlSWQpCiAJCQkJ b2xkZXN0RGF0YWJhc2VSdW5uaW5nWGlkID0geGlkOwpAQCAtMjgwOCw3ICsyODA4LDcgQEAg R2V0UnVubmluZ1RyYW5zYWN0aW9uRGF0YSh2b2lkKQogCQlmb3IgKGluZGV4ID0gMDsgaW5k ZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRleCsrKQogCQl7CiAJCQlpbnQJCQlwZ3Byb2Nu byA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKLQkJCVBHUFJPQwkgICAqcHJvYyA9ICZh bGxQcm9jc1twZ3Byb2Nub107CisJCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3By b2Nub107CiAJCQlpbnQJCQluc3VieGlkczsKIAogCQkJLyoKQEAgLTMwNTgsNyArMzA1OCw3 IEBAIEdldFZpcnR1YWxYSURzRGVsYXlpbmdDaGtwdChpbnQgKm52eGlkcywgaW50IHR5cGUp CiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5kZXgrKykK IAl7CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwotCQlQ R1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQlQR1BST0MJICAgKnBy b2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAKIAkJaWYgKChwcm9jLT5kZWxheUNoa3B0Rmxh Z3MgJiB0eXBlKSAhPSAwKQogCQl7CkBAIC0zMDk5LDcgKzMwOTksNyBAQCBIYXZlVmlydHVh bFhJRHNEZWxheWluZ0Noa3B0KFZpcnR1YWxUcmFuc2FjdGlvbklkICp2eGlkcywgaW50IG52 eGlkcywgaW50IHR5cGUpCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Q cm9jczsgaW5kZXgrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nu b3NbaW5kZXhdOwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOwor CQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAJCVZpcnR1YWxUcmFu c2FjdGlvbklkIHZ4aWQ7CiAKIAkJR0VUX1ZYSURfRlJPTV9QR1BST0ModnhpZCwgKnByb2Mp OwpAQCAtMzIyNyw3ICszMjI3LDcgQEAgQmFja2VuZFBpZEdldFByb2NXaXRoTG9jayhpbnQg cGlkKQogCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5k ZXgrKykKIAl7Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1thcnJheVAtPnBncHJv Y25vc1tpbmRleF1dOworCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1thcnJheVAtPnBn cHJvY25vc1tpbmRleF1dOwogCiAJCWlmIChwcm9jLT5waWQgPT0gcGlkKQogCQl7CkBAIC0z MjcwLDcgKzMyNzAsNyBAQCBCYWNrZW5kWGlkR2V0UGlkKFRyYW5zYWN0aW9uSWQgeGlkKQog CQlpZiAob3RoZXJfeGlkc1tpbmRleF0gPT0geGlkKQogCQl7CiAJCQlpbnQJCQlwZ3Byb2Nu byA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKLQkJCVBHUFJPQwkgICAqcHJvYyA9ICZh bGxQcm9jc1twZ3Byb2Nub107CisJCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3By b2Nub107CiAKIAkJCXJlc3VsdCA9IHByb2MtPnBpZDsKIAkJCWJyZWFrOwpAQCAtMzMzOSw3 ICszMzM5LDcgQEAgR2V0Q3VycmVudFZpcnR1YWxYSURzKFRyYW5zYWN0aW9uSWQgbGltaXRY bWluLCBib29sIGV4Y2x1ZGVYbWluMCwKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJh eVAtPm51bVByb2NzOyBpbmRleCsrKQogCXsKIAkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAt PnBncHJvY25vc1tpbmRleF07Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3By b2Nub107CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAkJdWlu dDgJCXN0YXR1c0ZsYWdzID0gUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3NbaW5kZXhdOwogCiAJ CWlmIChwcm9jID09IE15UHJvYykKQEAgLTM0NDEsNyArMzQ0MSw3IEBAIEdldENvbmZsaWN0 aW5nVmlydHVhbFhJRHMoVHJhbnNhY3Rpb25JZCBsaW1pdFhtaW4sIE9pZCBkYk9pZCkKIAlm b3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRleCsrKQogCXsK IAkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0JCVBHUFJP QwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCVBHUFJPQwkgICAqcHJvYyA9 IGFsbFByb2NzW3BncHJvY25vXTsKIAogCQkvKiBFeGNsdWRlIHByZXBhcmVkIHRyYW5zYWN0 aW9ucyAqLwogCQlpZiAocHJvYy0+cGlkID09IDApCkBAIC0zNTA2LDcgKzM1MDYsNyBAQCBT aWduYWxWaXJ0dWFsVHJhbnNhY3Rpb24oVmlydHVhbFRyYW5zYWN0aW9uSWQgdnhpZCwgUHJv Y1NpZ25hbFJlYXNvbiBzaWdtb2RlLAogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5 UC0+bnVtUHJvY3M7IGluZGV4KyspCiAJewogCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+ cGdwcm9jbm9zW2luZGV4XTsKLQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJv Y25vXTsKKwkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCQlWaXJ0 dWFsVHJhbnNhY3Rpb25JZCBwcm9jdnhpZDsKIAogCQlHRVRfVlhJRF9GUk9NX1BHUFJPQyhw cm9jdnhpZCwgKnByb2MpOwpAQCAtMzU2MSw3ICszNTYxLDcgQEAgTWluaW11bUFjdGl2ZUJh Y2tlbmRzKGludCBtaW4pCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Q cm9jczsgaW5kZXgrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nu b3NbaW5kZXhdOwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOwor CQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAKIAkJLyoKIAkJICog U2luY2Ugd2UncmUgbm90IGhvbGRpbmcgYSBsb2NrLCBuZWVkIHRvIGJlIHByZXBhcmVkIHRv IGRlYWwgd2l0aApAQCAtMzYwNyw3ICszNjA3LDcgQEAgQ291bnREQkJhY2tlbmRzKE9pZCBk YXRhYmFzZWlkKQogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJvY3M7 IGluZGV4KyspCiAJewogCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2lu ZGV4XTsKLQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJUEdQ Uk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCiAJCWlmIChwcm9jLT5waWQg PT0gMCkKIAkJCWNvbnRpbnVlOwkJCS8qIGRvIG5vdCBjb3VudCBwcmVwYXJlZCB4YWN0cyAq LwpAQCAtMzYzNiw3ICszNjM2LDcgQEAgQ291bnREQkNvbm5lY3Rpb25zKE9pZCBkYXRhYmFz ZWlkKQogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJvY3M7IGluZGV4 KyspCiAJewogCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsK LQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJUEdQUk9DCSAg ICpwcm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCiAJCWlmIChwcm9jLT5waWQgPT0gMCkK IAkJCWNvbnRpbnVlOwkJCS8qIGRvIG5vdCBjb3VudCBwcmVwYXJlZCB4YWN0cyAqLwpAQCAt MzY2Nyw3ICszNjY3LDcgQEAgQ2FuY2VsREJCYWNrZW5kcyhPaWQgZGF0YWJhc2VpZCwgUHJv Y1NpZ25hbFJlYXNvbiBzaWdtb2RlLCBib29sIGNvbmZsaWN0UGVuZGluZykKIAlmb3IgKGlu ZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRleCsrKQogCXsKIAkJaW50 CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0JCVBHUFJPQwkgICAq cHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFBy b2NzW3BncHJvY25vXTsKIAogCQlpZiAoZGF0YWJhc2VpZCA9PSBJbnZhbGlkT2lkIHx8IHBy b2MtPmRhdGFiYXNlSWQgPT0gZGF0YWJhc2VpZCkKIAkJewpAQCAtMzcwOCw3ICszNzA4LDcg QEAgQ291bnRVc2VyQmFja2VuZHMoT2lkIHJvbGVpZCkKIAlmb3IgKGluZGV4ID0gMDsgaW5k ZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRleCsrKQogCXsKIAkJaW50CQkJcGdwcm9jbm8g PSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQ cm9jc1twZ3Byb2Nub107CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25v XTsKIAogCQlpZiAocHJvYy0+cGlkID09IDApCiAJCQljb250aW51ZTsJCQkvKiBkbyBub3Qg Y291bnQgcHJlcGFyZWQgeGFjdHMgKi8KQEAgLTM3NzEsNyArMzc3MSw3IEBAIENvdW50T3Ro ZXJEQkJhY2tlbmRzKE9pZCBkYXRhYmFzZUlkLCBpbnQgKm5iYWNrZW5kcywgaW50ICpucHJl cGFyZWQpCiAJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJvY3M7IGlu ZGV4KyspCiAJCXsKIAkJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5k ZXhdOwotCQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJCVBH UFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAkJCXVpbnQ4CQlzdGF0dXNG bGFncyA9IFByb2NHbG9iYWwtPnN0YXR1c0ZsYWdzW2luZGV4XTsKIAogCQkJaWYgKHByb2Mt PmRhdGFiYXNlSWQgIT0gZGF0YWJhc2VJZCkKQEAgLTM4MzcsNyArMzgzNyw3IEBAIFRlcm1p bmF0ZU90aGVyREJCYWNrZW5kcyhPaWQgZGF0YWJhc2VJZCkKIAlmb3IgKGkgPSAwOyBpIDwg cHJvY0FycmF5LT5udW1Qcm9jczsgaSsrKQogCXsKIAkJaW50CQkJcGdwcm9jbm8gPSBhcnJh eVAtPnBncHJvY25vc1tpXTsKLQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJv Y25vXTsKKwkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCiAJCWlm IChwcm9jLT5kYXRhYmFzZUlkICE9IGRhdGFiYXNlSWQpCiAJCQljb250aW51ZTsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2xtZ3IvbG9jay5jCmluZGV4IDI3NzZjZWIyOTViLi45NWIxZGE0MjQwOCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYworKysgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jCkBAIC0yODQ0LDcgKzI4NDQsNyBAQCBGYXN0UGF0 aFRyYW5zZmVyUmVsYXRpb25Mb2NrcyhMb2NrTWV0aG9kIGxvY2tNZXRob2RUYWJsZSwgY29u c3QgTE9DS1RBRyAqbG9ja3RhZwogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBQcm9jR2xvYmFs LT5hbGxQcm9jQ291bnQ7IGkrKykKIAl7Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZQcm9jR2xv YmFsLT5hbGxQcm9jc1tpXTsKKwkJUEdQUk9DCSAgICpwcm9jID0gUHJvY0dsb2JhbC0+YWxs UHJvY3NbaV07CiAJCXVpbnQzMgkJajsKIAogCQlMV0xvY2tBY3F1aXJlKCZwcm9jLT5mcElu Zm9Mb2NrLCBMV19FWENMVVNJVkUpOwpAQCAtMzEwMyw3ICszMTAzLDcgQEAgR2V0TG9ja0Nv bmZsaWN0cyhjb25zdCBMT0NLVEFHICpsb2NrdGFnLCBMT0NLTU9ERSBsb2NrbW9kZSwgaW50 ICpjb3VudHApCiAJCSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgUHJvY0dsb2JhbC0+YWxsUHJv Y0NvdW50OyBpKyspCiAJCXsKLQkJCVBHUFJPQwkgICAqcHJvYyA9ICZQcm9jR2xvYmFsLT5h bGxQcm9jc1tpXTsKKwkJCVBHUFJPQwkgICAqcHJvYyA9IFByb2NHbG9iYWwtPmFsbFByb2Nz W2ldOwogCQkJdWludDMyCQlqOwogCiAJCQkvKiBBIGJhY2tlbmQgbmV2ZXIgYmxvY2tzIGl0 c2VsZiAqLwpAQCAtMzc5MCw3ICszNzkwLDcgQEAgR2V0TG9ja1N0YXR1c0RhdGEodm9pZCkK IAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgUHJvY0dsb2JhbC0+YWxsUHJvY0NvdW50OyArK2kp CiAJewotCQlQR1BST0MJICAgKnByb2MgPSAmUHJvY0dsb2JhbC0+YWxsUHJvY3NbaV07CisJ CVBHUFJPQwkgICAqcHJvYyA9IFByb2NHbG9iYWwtPmFsbFByb2NzW2ldOwogCiAJCS8qIFNr aXAgYmFja2VuZHMgd2l0aCBwaWQ9MCwgYXMgdGhleSBkb24ndCBob2xkIGZhc3QtcGF0aCBs b2NrcyAqLwogCQlpZiAocHJvYy0+cGlkID09IDApCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2xtZ3IvcHJvYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2Mu YwppbmRleCBlOWVmMGZiZmUzMi4uOWQzZTk0YTdiM2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdy L3Byb2MuYwpAQCAtMjksMjEgKzI5LDI5IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5o IgogCisjaW5jbHVkZSA8c2NoZWQuaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRl IDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgogCisjaWZkZWYgVVNFX0xJQk5V TUEKKyNpbmNsdWRlIDxudW1hLmg+CisjaW5jbHVkZSA8bnVtYWlmLmg+CisjZW5kaWYKKwog I2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R3b3BoYXNl LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d1dGlscy5oIgogI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInBvcnQvcGdfbnVtYS5oIgog I2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgogI2luY2x1ZGUgInJlcGxpY2F0 aW9uL3Nsb3RzeW5jLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vc3luY3JlcC5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvY29uZGl0aW9uX3ZhcmlhYmxlLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdl L3BnX3NobWVtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wbXNpZ25hbC5oIgogI2luY2x1ZGUg InN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCkBAIC04 OSw2ICs5NywxMiBAQCBzdGF0aWMgdm9pZCBQcm9jS2lsbChpbnQgY29kZSwgRGF0dW0gYXJn KTsKIHN0YXRpYyB2b2lkIEF1eGlsaWFyeVByb2NLaWxsKGludCBjb2RlLCBEYXR1bSBhcmcp Owogc3RhdGljIHZvaWQgQ2hlY2tEZWFkTG9jayh2b2lkKTsKIAorLyogTlVNQSAqLworc3Rh dGljIFNpemUgZ2V0X21lbW9yeV9wYWdlX3NpemUodm9pZCk7IC8qIFhYWCBkdXBsaWNhdGUg Ki8KK3N0YXRpYyB2b2lkIG1vdmVfdG9fbm9kZShjaGFyICpzdGFydHB0ciwgY2hhciAqZW5k cHRyLAorCQkJCQkJIFNpemUgbWVtX3BhZ2Vfc2l6ZSwgaW50IG5vZGUpOworc3RhdGljIGlu dAludW1hX25vZGVzID0gLTE7CisKIAogLyoKICAqIFJlcG9ydCBzaGFyZWQtbWVtb3J5IHNw YWNlIG5lZWRlZCBieSBQR1BST0MuCkBAIC0xMDAsMTEgKzExNCw0MCBAQCBQR1Byb2NTaG1l bVNpemUodm9pZCkKIAlTaXplCQlUb3RhbFByb2NzID0KIAkJYWRkX3NpemUoTWF4QmFja2Vu ZHMsIGFkZF9zaXplKE5VTV9BVVhJTElBUllfUFJPQ1MsIG1heF9wcmVwYXJlZF94YWN0cykp OwogCisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVv ZihQR1BST0MgKikpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoVG90YWxQ cm9jcywgc2l6ZW9mKFBHUFJPQykpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3Np emUoVG90YWxQcm9jcywgc2l6ZW9mKCpQcm9jR2xvYmFsLT54aWRzKSkpOwogCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShUb3RhbFByb2NzLCBzaXplb2YoKlByb2NHbG9iYWwt PnN1YnhpZFN0YXRlcykpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoVG90 YWxQcm9jcywgc2l6ZW9mKCpQcm9jR2xvYmFsLT5zdGF0dXNGbGFncykpKTsKIAorCS8qCisJ ICogV2l0aCBOVU1BLCB3ZSBhbGxvY2F0ZSB0aGUgUEdQUk9DIGFycmF5IGluIHNldmVyYWwg Y2h1bmtzLiBXaXRoIHNoYXJlZAorCSAqIGJ1ZmZlcnMgd2Ugc2ltcGx5IG1hbnVhbGx5IGFz c2lnbiBwYXJ0cyBvZiB0aGUgYnVmZmVyIGFycmF5IHRvCisJICogZGlmZmVyZW50IE5VTUEg bm9kZXMsIGFuZCB0aGF0IGRvZXMgdGhlIHRyaWNrLiBCdXQgd2UgY2FuJ3QgZG8gdGhhdCBm b3IKKwkgKiBQR1BST0MsIGFzIHRoZSBudW1iZXIgb2YgUEdQUk9DIGVudHJpZXMgaXMgbXVj aCBsb3dlciwgZXNwZWNpYWxseSB3aXRoCisJICogaHVnZSBwYWdlcy4gV2UgY2FuIGZpdCB+ MmsgZW50cmllcyBvbiBhIDJNQiBwYWdlLCBhbmQgTlVNQSBkb2VzIHN0dWZmCisJICogd2l0 aCBwYWdlIGdyYW51bGFyaXR5LCBhbmQgdGhlIGxhcmdlIE5VTUEgc3lzdGVtcyBhcmUgbGlr ZWx5IHRvIHVzZQorCSAqIGh1Z2UgcGFnZXMuIFNvIHdpdGggc2Vuc2libGUgbWF4X2Nvbm5l Y3Rpb25zIHdlIHdvdWxkIG5vdCB1c2UgbW9yZSB0aGFuCisJICogYSBzaW5nbGUgcGFnZSwg d2hpY2ggbWVhbnMgaXQgZ2V0cyB0byBhIHNpbmdsZSBOVU1BIG5vZGUuCisJICoKKwkgKiBT byB3ZSBhbGxvY2F0ZSBQR1BST0Mgbm90IGFzIGEgc2luZ2xlIGFycmF5LCBidXQgb25lIGFy cmF5IHBlciBOVU1BCisJICogbm9kZSwgYW5kIHRoZW4gb25lIGFycmF5IGZvciBhdXggcHJv Y2Vzc2VzICh3aXRob3V0IE5VTUEgbm9kZQorCSAqIGFzc2lnbmVkKS4gRWFjaCBhcnJheSBt YXkgbmVlZCB1cCB0byBtZW1vcnktcGFnZS13b3J0aCBvZiBwYWRkaW5nLAorCSAqIHdvcnN0 IGNhc2UuIFNvIHdlIGp1c3QgYWRkIHRoYXQgLSBpdCdzIGEgYml0IHdhc3RlZnVsLCBidXQg Z29vZCBlbm91Z2gKKwkgKiBmb3IgUG9DLgorCSAqCisJICogRklYTUUgU2hvdWxkIGJlIGNv bmRpdGlvbmFsLCBidXQgdGhhdCB3YXMgY2F1c2luZyBwcm9ibGVtcyBpbiBib290c3RyYXAK KwkgKiBtb2RlLiBPciBtYXliZSBpdCB3YXMgYmVjYXVzZSB0aGUgY29kZSB0aGF0IGFsbG9j YXRlcyBzdHVmZiBsYXRlciBkb2VzCisJICogbm90IGRvIHRoYXQgY29uZGl0aW9uYWxseS4g QW55d2F5LCBuZWVkcyB0byBiZSBmaXhlZC4KKwkgKi8KKwkvKiBpZiAobnVtYV9wcm9jc19p bnRlcmxlYXZlKSAqLworCXsKKwkJaW50CQkJbnVtX25vZGVzID0gbnVtYV9udW1fY29uZmln dXJlZF9ub2RlcygpOworCQlTaXplCQltZW1fcGFnZV9zaXplID0gZ2V0X21lbW9yeV9wYWdl X3NpemUoKTsKKworCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoKG51bV9ub2Rl cyArIDEpLCBtZW1fcGFnZV9zaXplKSk7CisJfQorCiAJcmV0dXJuIHNpemU7CiB9CiAKQEAg LTEyOSw2ICsxNzIsMjYgQEAgRmFzdFBhdGhMb2NrU2htZW1TaXplKHZvaWQpCiAKIAlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoVG90YWxQcm9jcywgKGZwTG9ja0JpdHNTaXpl ICsgZnBSZWxJZFNpemUpKSk7CiAKKwkvKgorCSAqIFNhbWUgTlVNQS1wYWRkaW5nIGxvZ2lj IGFzIGluIFBHUHJvY1NobWVtU2l6ZSwgYWRkaW5nIGEgbWVtb3J5IHBhZ2UgcGVyCisJICog TlVNQSBub2RlIC0gYnV0IHRoaXMgd2F5IHdlIGFkZCB0d28gcGFnZXMgcGVyIG5vZGUgLSBv bmUgZm9yIFBHUFJPQywKKwkgKiBvbmUgZm9yIGZhc3QtcGF0aCBhcnJheXMuIEluIHRoZW9y eSB3ZSBjb3VsZCBtYWtlIHRoaXMgd29yayBqdXN0IG9uZQorCSAqIHBhZ2UgcGVyIG5vZGUs IGJ5IGFkZGluZyBmYXN0LXBhdGggYXJyYXlzIHJpZ2h0IGFmdGVyIFBHUFJPQyBlbnRyaWVz IG9uCisJICogZWFjaCBub2RlLiBCdXQgbm93IHdlIGFsbG9jYXRlIGZhc3QtcGF0aCBsb2Nr cyBzZXBhcmF0ZWx5IC0gZ29vZCBlbm91Z2gKKwkgKiBmb3IgUG9DLgorCSAqCisJICogRklY TUUgU2hvdWxkIGJlIGNvbmRpdGlvbmFsLCBidXQgdGhhdCB3YXMgY2F1c2luZyBwcm9ibGVt cyBpbiBib290c3RyYXAKKwkgKiBtb2RlLiBPciBtYXliZSBpdCB3YXMgYmVjYXVzZSB0aGUg Y29kZSB0aGF0IGFsbG9jYXRlcyBzdHVmZiBsYXRlciBkb2VzCisJICogbm90IGRvIHRoYXQg Y29uZGl0aW9uYWxseS4gQW55d2F5LCBuZWVkcyB0byBiZSBmaXhlZC4KKwkgKi8KKwkvKiBp ZiAobnVtYV9wcm9jc19pbnRlcmxlYXZlKSAqLworCXsKKwkJaW50CQkJbnVtX25vZGVzID0g bnVtYV9udW1fY29uZmlndXJlZF9ub2RlcygpOworCQlTaXplCQltZW1fcGFnZV9zaXplID0g Z2V0X21lbW9yeV9wYWdlX3NpemUoKTsKKworCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVs X3NpemUoKG51bV9ub2RlcyArIDEpLCBtZW1fcGFnZV9zaXplKSk7CisJfQorCiAJcmV0dXJu IHNpemU7CiB9CiAKQEAgLTE5MSwxMSArMjU0LDEzIEBAIFByb2NHbG9iYWxTZW1hcyh2b2lk KQogdm9pZAogSW5pdFByb2NHbG9iYWwodm9pZCkKIHsKLQlQR1BST0MJICAgKnByb2NzOwor CVBHUFJPQwkgICoqcHJvY3M7CiAJaW50CQkJaSwKIAkJCQlqOwogCWJvb2wJCWZvdW5kOwog CXVpbnQzMgkJVG90YWxQcm9jcyA9IE1heEJhY2tlbmRzICsgTlVNX0FVWElMSUFSWV9QUk9D UyArIG1heF9wcmVwYXJlZF94YWN0czsKKwlpbnQJCQlwcm9jc190b3RhbDsKKwlpbnQJCQlw cm9jc19wZXJfbm9kZTsKIAogCS8qIFVzZWQgZm9yIHNldHVwIG9mIHBlci1iYWNrZW5kIGZh c3QtcGF0aCBzbG90cy4gKi8KIAljaGFyCSAgICpmcFB0ciwKQEAgLTIwNSw2ICsyNzAsOCBA QCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCVNpemUJCXJlcXVlc3RTaXplOwogCWNoYXIJICAg KnB0cjsKIAorCVNpemUJCW1lbV9wYWdlX3NpemUgPSBnZXRfbWVtb3J5X3BhZ2Vfc2l6ZSgp OworCiAJLyogQ3JlYXRlIHRoZSBQcm9jR2xvYmFsIHNoYXJlZCBzdHJ1Y3R1cmUgKi8KIAlQ cm9jR2xvYmFsID0gKFBST0NfSERSICopCiAJCVNobWVtSW5pdFN0cnVjdCgiUHJvYyBIZWFk ZXIiLCBzaXplb2YoUFJPQ19IRFIpLCAmZm91bmQpOwpAQCAtMjI0LDYgKzI5MSw5IEBAIElu aXRQcm9jR2xvYmFsKHZvaWQpCiAJcGdfYXRvbWljX2luaXRfdTMyKCZQcm9jR2xvYmFsLT5w cm9jQXJyYXlHcm91cEZpcnN0LCBJTlZBTElEX1BST0NfTlVNQkVSKTsKIAlwZ19hdG9taWNf aW5pdF91MzIoJlByb2NHbG9iYWwtPmNsb2dHcm91cEZpcnN0LCBJTlZBTElEX1BST0NfTlVN QkVSKTsKIAorCS8qIG9uZSBjaHVuayBwZXIgTlVNQSBub2RlICh3aXRob3V0IE5VTUEgYXNz dW1lIDEgbm9kZSkgKi8KKwludW1hX25vZGVzID0gbnVtYV9udW1fY29uZmlndXJlZF9ub2Rl cygpOworCiAJLyoKIAkgKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYWxsIHRoZSBQR1BST0Mg c3RydWN0dXJlcyB3ZSdsbCBuZWVkLiAgVGhlcmUgYXJlCiAJICogc2l4IHNlcGFyYXRlIGNv bnN1bWVyczogKDEpIG5vcm1hbCBiYWNrZW5kcywgKDIpIGF1dG92YWN1dW0gd29ya2VycyBh bmQKQEAgLTI0MSwxOSArMzExLDEwOCBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCiAJTWVt U2V0KHB0ciwgMCwgcmVxdWVzdFNpemUpOwogCi0JcHJvY3MgPSAoUEdQUk9DICopIHB0cjsK LQlwdHIgPSAoY2hhciAqKSBwdHIgKyBUb3RhbFByb2NzICogc2l6ZW9mKFBHUFJPQyk7CisJ LyogYWxscHJvY3MgKGFycmF5IG9mIHBvaW50ZXJzIHRvIFBHUFJPQyBlbnRyaWVzKSAqLwor CXByb2NzID0gKFBHUFJPQyAqKikgcHRyOworCXB0ciA9IChjaGFyICopIHB0ciArIFRvdGFs UHJvY3MgKiBzaXplb2YoUEdQUk9DICopOwogCiAJUHJvY0dsb2JhbC0+YWxsUHJvY3MgPSBw cm9jczsKIAkvKiBYWFggYWxsUHJvY0NvdW50IGlzbid0IHJlYWxseSBhbGwgb2YgdGhlbTsg aXQgZXhjbHVkZXMgcHJlcGFyZWQgeGFjdHMgKi8KIAlQcm9jR2xvYmFsLT5hbGxQcm9jQ291 bnQgPSBNYXhCYWNrZW5kcyArIE5VTV9BVVhJTElBUllfUFJPQ1M7CiAKKwkvKgorCSAqIE5V TUEgcGFydGl0aW9uaW5nCisJICoKKwkgKiBOb3cgYnVpbGQgdGhlIGFjdHVhbCBQR1BST0Mg YXJyYXlzLCBvbmUgImNodW5rIiBwZXIgTlVNQSBub2RlIChhbmQgb25lCisJICogZXh0cmEg Zm9yIGF1eGlsaWFyeSBwcm9jZXNzZXMgYW5kIDJQQyB0cmFuc2FjdGlvbnMsIG5vdCBhc3Nv Y2lhdGVkIHdpdGgKKwkgKiBhbnkgcGFydGljdWxhciBub2RlKS4KKwkgKgorCSAqIEZpcnN0 IGRldGVybWluZSBob3cgbWFueSAiYmFja2VuZCIgcHJvY3MgdG8gYWxsb2NhdGUgcGVyIE5V TUEgbm9kZS4gVGhlCisJICogY291bnQgbWF5IG5vdCBiZSBleGFjdGx5IGRpdmlzaWJsZSwg YnV0IHdlIG1vc3RseSBpZ25vcmUgdGhhdC4gVGhlIGxhc3QKKwkgKiBub2RlIG1heSBnZXQg c29tZXdoYXQgZmV3ZXIgUEdQUk9DIGVudHJpZXMsIGJ1dCB0aGUgaW1iYWxhbmNlIG91Z2h0 IHRvCisJICogYmUgcHJldHR5IHNtYWxsIChpZiBNYXhCYWNrZW5kcyA+PiBudW1hX25vZGVz KS4KKwkgKgorCSAqIFhYWCBBIGZhaXJlciBkaXN0cmlidXRpb24gaXMgcG9zc2libGUsIGJ1 dCBub3Qgd29ydGggaXQgbm93LgorCSAqLworCXByb2NzX3Blcl9ub2RlID0gKE1heEJhY2tl bmRzICsgKG51bWFfbm9kZXMgLSAxKSkgLyBudW1hX25vZGVzOworCXByb2NzX3RvdGFsID0g MDsKKworCS8qIGJ1aWxkIFBHUFJPQyBlbnRyaWVzIGZvciBOVU1BIG5vZGVzICovCisJZm9y IChpID0gMDsgaSA8IG51bWFfbm9kZXM7IGkrKykKKwl7CisJCVBHUFJPQwkgICAqcHJvY3Nf bm9kZTsKKworCQkvKiB0aGUgbGFzdCBOVU1BIG5vZGUgbWF5IGdldCBmZXdlciBQR1BST0Mg ZW50cmllcywgYnV0IG1laCAqLworCQlpbnQJCQljb3VudF9ub2RlID0gTWluKHByb2NzX3Bl cl9ub2RlLCBNYXhCYWNrZW5kcyAtIHByb2NzX3RvdGFsKTsKKworCQkvKiBtYWtlIHN1cmUg dG8gYWxpZ24gdGhlIFBHUFJPQyBhcnJheSB0byBtZW1vcnkgcGFnZSAqLworCQlwdHIgPSAo Y2hhciAqKSBUWVBFQUxJR04obWVtX3BhZ2Vfc2l6ZSwgcHRyKTsKKworCQkvKiBhbGxvY2F0 ZSB0aGUgUEdQUk9DIGNodW5rIGZvciB0aGlzIG5vZGUgKi8KKwkJcHJvY3Nfbm9kZSA9IChQ R1BST0MgKikgcHRyOworCQlwdHIgPSAoY2hhciAqKSBwdHIgKyBjb3VudF9ub2RlICogc2l6 ZW9mKFBHUFJPQyk7CisKKwkJLyogZG9uJ3Qgb3ZlcmZsb3cgdGhlIGFsbG9jYXRpb24gKi8K KwkJQXNzZXJ0KChwdHIgPiAoY2hhciAqKSBwcm9jcykgJiYgKHB0ciA8PSAoY2hhciAqKSBw cm9jcyArIHJlcXVlc3RTaXplKSk7CisKKwkJLyogYWRkIHBvaW50ZXJzIHRvIHRoZSBQR1BS T0MgZW50cmllcyB0byBhbGxQcm9jcyAqLworCQlmb3IgKGogPSAwOyBqIDwgY291bnRfbm9k ZTsgaisrKQorCQl7CisJCQlwcm9jc19ub2RlW2pdLm51bWFfbm9kZSA9IGk7CisJCQlwcm9j c19ub2RlW2pdLnByb2NudW1iZXIgPSBwcm9jc190b3RhbDsKKworCQkJUHJvY0dsb2JhbC0+ YWxsUHJvY3NbcHJvY3NfdG90YWwrK10gPSAmcHJvY3Nfbm9kZVtqXTsKKwkJfQorCisJCW1v dmVfdG9fbm9kZSgoY2hhciAqKSBwcm9jc19ub2RlLCBwdHIsIG1lbV9wYWdlX3NpemUsIGkp OworCX0KKworCS8qCisJICogYWxzbyBidWlsZCBQR1BST0MgZW50cmllcyBmb3IgYXV4aWxp YXJ5IHByb2NzIC8gcHJlcGFyZWQgeGFjdHMgKHdlCisJICogZG9uJ3QgYXNzaWduIHRob3Nl IHRvIGFueSBOVU1BIG5vZGUpCisJICoKKwkgKiBYWFggTW9zdGx5IGR1cGxpY2F0ZSBvZiBw cmVjZWRpbmcgYmxvY2ssIGNvdWxkIGJlIHJldXNlZC4KKwkgKi8KKwl7CisJCVBHUFJPQwkg ICAqcHJvY3Nfbm9kZTsKKwkJaW50CQkJY291bnRfbm9kZSA9IChOVU1fQVVYSUxJQVJZX1BS T0NTICsgbWF4X3ByZXBhcmVkX3hhY3RzKTsKKworCQkvKgorCQkgKiBNYWtlIHN1cmUgdG8g YWxpZ24gUEdQUk9DIGFycmF5IHRvIG1lbW9yeSBwYWdlIChpdCBtYXkgbm90IGJlCisJCSAq IGFsaWduZWQpLiBXZSB3b24ndCBhc3NpZ24gdGhpcyB0byBhbnkgTlVNQSBub2RlLCBidXQg d2Ugc3RpbGwgZG9uJ3QKKwkJICogd2FudCBpdCB0byBpbnRlcmZlcmUgd2l0aCB0aGUgcHJl Y2VkaW5nIGNodW5rIChmb3IgdGhlIGxhc3QgTlVNQQorCQkgKiBub2RlKS4KKwkJICovCisJ CXB0ciA9IChjaGFyICopIFRZUEVBTElHTihtZW1fcGFnZV9zaXplLCBwdHIpOworCisJCXBy b2NzX25vZGUgPSAoUEdQUk9DICopIHB0cjsKKwkJcHRyID0gKGNoYXIgKikgcHRyICsgY291 bnRfbm9kZSAqIHNpemVvZihQR1BST0MpOworCisJCS8qIGRvbid0IG92ZXJmbG93IHRoZSBh bGxvY2F0aW9uICovCisJCUFzc2VydCgocHRyID4gKGNoYXIgKikgcHJvY3MpICYmIChwdHIg PD0gKGNoYXIgKikgcHJvY3MgKyByZXF1ZXN0U2l6ZSkpOworCisJCS8qIG5vdyBhZGQgdGhl IFBHUFJPQyBwb2ludGVycyB0byBhbGxQcm9jcyAqLworCQlmb3IgKGogPSAwOyBqIDwgY291 bnRfbm9kZTsgaisrKQorCQl7CisJCQlwcm9jc19ub2RlW2pdLm51bWFfbm9kZSA9IC0xOwor CQkJcHJvY3Nfbm9kZVtqXS5wcm9jbnVtYmVyID0gcHJvY3NfdG90YWw7CisKKwkJCVByb2NH bG9iYWwtPmFsbFByb2NzW3Byb2NzX3RvdGFsKytdID0gJnByb2NzX25vZGVbal07CisJCX0K Kwl9CisKKwkvKiB3ZSBzaG91bGQgaGF2ZSBhbGxvY2F0ZWQgdGhlIGV4cGVjdGVkIG51bWJl ciBvZiBQR1BST0MgZW50cmllcyAqLworCUFzc2VydChwcm9jc190b3RhbCA9PSBUb3RhbFBy b2NzKTsKKwogCS8qCiAJICogQWxsb2NhdGUgYXJyYXlzIG1pcnJvcmluZyBQR1BST0MgZmll bGRzIGluIGEgZGVuc2UgbWFubmVyLiBTZWUKIAkgKiBQUk9DX0hEUi4KIAkgKgogCSAqIFhY WDogSXQgbWlnaHQgbWFrZSBzZW5zZSB0byBpbmNyZWFzZSBwYWRkaW5nIGZvciB0aGVzZSBh cnJheXMsIGdpdmVuCiAJICogaG93IGhvdGx5IHRoZXkgYXJlIGFjY2Vzc2VkLgorCSAqCisJ ICogWFhYIFdvdWxkIGl0IG1ha2Ugc2Vuc2UgdG8gTlVNQS1wYXJ0aXRpb24gdGhlc2UgY2h1 bmtzIHRvbywgc29tZWhvdz8KKwkgKiBCdXQgdGhvc2UgYXJyYXlzIGFyZSB0aW55LCBmaXQg aW50byBhIHNpbmdsZSBtZW1vcnkgcGFnZSwgc28gd291bGQgbmVlZAorCSAqIHRvIGJlIG1h ZGUgbW9yZSBjb21wbGV4LiBOb3Qgc3VyZS4KIAkgKi8KIAlQcm9jR2xvYmFsLT54aWRzID0g KFRyYW5zYWN0aW9uSWQgKikgcHRyOwogCXB0ciA9IChjaGFyICopIHB0ciArIChUb3RhbFBy b2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT54aWRzKSk7CkBAIC0yODYsMjMgKzQ0NSwxMDAg QEAgSW5pdFByb2NHbG9iYWwodm9pZCkKIAkvKiBGb3IgYXNzZXJ0cyBjaGVja2luZyB3ZSBk aWQgbm90IG92ZXJmbG93LiAqLwogCWZwRW5kUHRyID0gZnBQdHIgKyByZXF1ZXN0U2l6ZTsK IAotCWZvciAoaSA9IDA7IGkgPCBUb3RhbFByb2NzOyBpKyspCisJLyogcmVzZXQgdGhlIGNv dW50ICovCisJcHJvY3NfdG90YWwgPSAwOworCisJLyoKKwkgKiBNaW1pYyB0aGUgc2FtZSBs b2dpYyBhcyBhYm92ZSwgYnV0IGZvciBmYXN0LXBhdGggbG9ja2luZy4KKwkgKi8KKwlmb3Ig KGkgPSAwOyBpIDwgbnVtYV9ub2RlczsgaSsrKQogCXsKLQkJUEdQUk9DCSAgICpwcm9jID0g JnByb2NzW2ldOworCQljaGFyCSAgICpzdGFydHB0cjsKKwkJY2hhcgkgICAqZW5kcHRyOwog Ci0JCS8qIENvbW1vbiBpbml0aWFsaXphdGlvbiBmb3IgYWxsIFBHUFJPQ3MsIHJlZ2FyZGxl c3Mgb2YgdHlwZS4gKi8KKwkJLyogdGhlIGxhc3QgTlVNQSBub2RlIG1heSBnZXQgZmV3ZXIg UEdQUk9DIGVudHJpZXMsIGJ1dCBtZWggKi8KKwkJaW50CQkJcHJvY3Nfbm9kZSA9IE1pbihw cm9jc19wZXJfbm9kZSwgTWF4QmFja2VuZHMgLSBwcm9jc190b3RhbCk7CisKKwkJLyogYWxp Z24gdG8gbWVtb3J5IHBhZ2UsIHRvIG1ha2UgbW92ZV9wYWdlcyBwb3NzaWJsZSAqLworCQlm cFB0ciA9IChjaGFyICopIFRZUEVBTElHTihtZW1fcGFnZV9zaXplLCBmcFB0cik7CisKKwkJ c3RhcnRwdHIgPSBmcFB0cjsKKwkJZW5kcHRyID0gZnBQdHIgKyBwcm9jc19ub2RlICogKGZw TG9ja0JpdHNTaXplICsgZnBSZWxJZFNpemUpOworCisJCW1vdmVfdG9fbm9kZShzdGFydHB0 ciwgZW5kcHRyLCBtZW1fcGFnZV9zaXplLCBpKTsKIAogCQkvKgotCQkgKiBTZXQgdGhlIGZh c3QtcGF0aCBsb2NrIGFycmF5cywgYW5kIG1vdmUgdGhlIHBvaW50ZXIuIFdlIGludGVybGVh dmUKLQkJICogdGhlIHR3byBhcnJheXMsIHRvIChob3BlZnVsbHkpIGdldCBzb21lIGxvY2Fs aXR5IGZvciBlYWNoIGJhY2tlbmQuCisJCSAqIE5vdyBwb2ludCB0aGUgUEdQUk9DIGVudHJp ZXMgdG8gdGhlIGZhc3QtcGF0aCBhcnJheXMsIGFuZCBhbHNvCisJCSAqIGFkdmFuY2UgdGhl IGZwUHRyLgogCQkgKi8KLQkJcHJvYy0+ZnBMb2NrQml0cyA9ICh1aW50NjQgKikgZnBQdHI7 Ci0JCWZwUHRyICs9IGZwTG9ja0JpdHNTaXplOworCQlmb3IgKGogPSAwOyBqIDwgcHJvY3Nf bm9kZTsgaisrKQorCQl7CisJCQlQR1BST0MJICAgKnByb2MgPSBQcm9jR2xvYmFsLT5hbGxQ cm9jc1twcm9jc190b3RhbCsrXTsKKworCQkJLyogY3Jvc3MtY2hlY2sgd2UgZ290IHRoZSBl eHBlY3RlZCBOVU1BIG5vZGUgKi8KKwkJCUFzc2VydChwcm9jLT5udW1hX25vZGUgPT0gaSk7 CisJCQlBc3NlcnQocHJvYy0+cHJvY251bWJlciA9PSAocHJvY3NfdG90YWwgLSAxKSk7CisK KwkJCS8qCisJCQkgKiBTZXQgdGhlIGZhc3QtcGF0aCBsb2NrIGFycmF5cywgYW5kIG1vdmUg dGhlIHBvaW50ZXIuIFdlCisJCQkgKiBpbnRlcmxlYXZlIHRoZSB0d28gYXJyYXlzLCB0byAo aG9wZWZ1bGx5KSBnZXQgc29tZSBsb2NhbGl0eSBmb3IKKwkJCSAqIGVhY2ggYmFja2VuZC4K KwkJCSAqLworCQkJcHJvYy0+ZnBMb2NrQml0cyA9ICh1aW50NjQgKikgZnBQdHI7CisJCQlm cFB0ciArPSBmcExvY2tCaXRzU2l6ZTsKIAotCQlwcm9jLT5mcFJlbElkID0gKE9pZCAqKSBm cFB0cjsKLQkJZnBQdHIgKz0gZnBSZWxJZFNpemU7CisJCQlwcm9jLT5mcFJlbElkID0gKE9p ZCAqKSBmcFB0cjsKKwkJCWZwUHRyICs9IGZwUmVsSWRTaXplOwogCi0JCUFzc2VydChmcFB0 ciA8PSBmcEVuZFB0cik7CisJCQlBc3NlcnQoZnBQdHIgPD0gZnBFbmRQdHIpOworCQl9CisK KwkJQXNzZXJ0KGZwUHRyID09IGVuZHB0cik7CisJfQorCisJLyogYXV4aWxpYXJ5IHByb2Nl c3NlcyAvIHByZXBhcmVkIHhhY3RzICovCisJeworCQkvKiB0aGUgbGFzdCBOVU1BIG5vZGUg bWF5IGdldCBmZXdlciBQR1BST0MgZW50cmllcywgYnV0IG1laCAqLworCQlpbnQJCQlwcm9j c19ub2RlID0gKE5VTV9BVVhJTElBUllfUFJPQ1MgKyBtYXhfcHJlcGFyZWRfeGFjdHMpOwor CisJCS8qIGFsaWduIHRvIG1lbW9yeSBwYWdlLCB0byBtYWtlIG1vdmVfcGFnZXMgcG9zc2li bGUgKi8KKwkJZnBQdHIgPSAoY2hhciAqKSBUWVBFQUxJR04obWVtX3BhZ2Vfc2l6ZSwgZnBQ dHIpOworCisJCS8qIG5vdyBwb2ludCB0aGUgUEdQUk9DIGVudHJpZXMgdG8gdGhlIGZhc3Qt cGF0aCBhcnJheXMgKi8KKwkJZm9yIChqID0gMDsgaiA8IHByb2NzX25vZGU7IGorKykKKwkJ eworCQkJUEdQUk9DCSAgICpwcm9jID0gUHJvY0dsb2JhbC0+YWxsUHJvY3NbcHJvY3NfdG90 YWwrK107CisKKwkJCS8qIGNyb3NzLWNoZWNrIHdlIGdvdCBQR1BST0Mgd2l0aCBubyBOVU1B IG5vZGUgYXNzaWduZWQgKi8KKwkJCUFzc2VydChwcm9jLT5udW1hX25vZGUgPT0gLTEpOwor CQkJQXNzZXJ0KHByb2MtPnByb2NudW1iZXIgPT0gKHByb2NzX3RvdGFsIC0gMSkpOworCisJ CQkvKgorCQkJICogU2V0IHRoZSBmYXN0LXBhdGggbG9jayBhcnJheXMsIGFuZCBtb3ZlIHRo ZSBwb2ludGVyLiBXZQorCQkJICogaW50ZXJsZWF2ZSB0aGUgdHdvIGFycmF5cywgdG8gKGhv cGVmdWxseSkgZ2V0IHNvbWUgbG9jYWxpdHkgZm9yCisJCQkgKiBlYWNoIGJhY2tlbmQuCisJ CQkgKi8KKwkJCXByb2MtPmZwTG9ja0JpdHMgPSAodWludDY0ICopIGZwUHRyOworCQkJZnBQ dHIgKz0gZnBMb2NrQml0c1NpemU7CisKKwkJCXByb2MtPmZwUmVsSWQgPSAoT2lkICopIGZw UHRyOworCQkJZnBQdHIgKz0gZnBSZWxJZFNpemU7CisKKwkJCUFzc2VydChmcFB0ciA8PSBm cEVuZFB0cik7CisJCX0KKwl9CisKKwkvKiBTaG91bGQgaGF2ZSBjb25zdW1lZCBleGFjdGx5 IHRoZSBleHBlY3RlZCBhbW91bnQgb2YgZmFzdC1wYXRoIG1lbW9yeS4gKi8KKwlBc3NlcnQo ZnBQdHIgPD0gZnBFbmRQdHIpOworCisJLyogbWFrZSBzdXJlIHdlIGFsbG9jYXRlZCB0aGUg ZXhwZWN0ZWQgbnVtYmVyIG9mIFBHUFJPQyBlbnRyaWVzICovCisJQXNzZXJ0KHByb2NzX3Rv dGFsID09IFRvdGFsUHJvY3MpOworCisJZm9yIChpID0gMDsgaSA8IFRvdGFsUHJvY3M7IGkr KykKKwl7CisJCVBHUFJPQwkgICAqcHJvYyA9IHByb2NzW2ldOworCisJCUFzc2VydChwcm9j LT5wcm9jbnVtYmVyID09IGkpOwogCiAJCS8qCiAJCSAqIFNldCB1cCBwZXItUEdQUk9DIHNl bWFwaG9yZSwgbGF0Y2gsIGFuZCBmcEluZm9Mb2NrLiAgUHJlcGFyZWQgeGFjdApAQCAtMzY2 LDE1ICs2MDIsMTIgQEAgSW5pdFByb2NHbG9iYWwodm9pZCkKIAkJcGdfYXRvbWljX2luaXRf dTY0KCYocHJvYy0+d2FpdFN0YXJ0KSwgMCk7CiAJfQogCi0JLyogU2hvdWxkIGhhdmUgY29u c3VtZWQgZXhhY3RseSB0aGUgZXhwZWN0ZWQgYW1vdW50IG9mIGZhc3QtcGF0aCBtZW1vcnku ICovCi0JQXNzZXJ0KGZwUHRyID09IGZwRW5kUHRyKTsKLQogCS8qCiAJICogU2F2ZSBwb2lu dGVycyB0byB0aGUgYmxvY2tzIG9mIFBHUFJPQyBzdHJ1Y3R1cmVzIHJlc2VydmVkIGZvciBh dXhpbGlhcnkKIAkgKiBwcm9jZXNzZXMgYW5kIHByZXBhcmVkIHRyYW5zYWN0aW9ucy4KIAkg Ki8KLQlBdXhpbGlhcnlQcm9jcyA9ICZwcm9jc1tNYXhCYWNrZW5kc107Ci0JUHJlcGFyZWRY YWN0UHJvY3MgPSAmcHJvY3NbTWF4QmFja2VuZHMgKyBOVU1fQVVYSUxJQVJZX1BST0NTXTsK KwlBdXhpbGlhcnlQcm9jcyA9IHByb2NzW01heEJhY2tlbmRzXTsKKwlQcmVwYXJlZFhhY3RQ cm9jcyA9IHByb2NzW01heEJhY2tlbmRzICsgTlVNX0FVWElMSUFSWV9QUk9DU107CiAKIAkv KiBDcmVhdGUgUHJvY1N0cnVjdExvY2sgc3BpbmxvY2ssIHRvbyAqLwogCVByb2NTdHJ1Y3RM b2NrID0gKHNsb2NrX3QgKikgU2htZW1Jbml0U3RydWN0KCJQcm9jU3RydWN0TG9jayBzcGlu bG9jayIsCkBAIC00MzUsNyArNjY4LDQ1IEBAIEluaXRQcm9jZXNzKHZvaWQpCiAKIAlpZiAo IWRsaXN0X2lzX2VtcHR5KHByb2NnbG9iYWxsaXN0KSkKIAl7Ci0JCU15UHJvYyA9IGRsaXN0 X2NvbnRhaW5lcihQR1BST0MsIGxpbmtzLCBkbGlzdF9wb3BfaGVhZF9ub2RlKHByb2NnbG9i YWxsaXN0KSk7CisJCS8qCisJCSAqIFdpdGggbnVtYSBpbnRlcmxlYXZpbmcgb2YgUEdQUk9D LCB0cnkgdG8gZ2V0IGEgUFJPQyBlbnRyeSBmcm9tIHRoZQorCQkgKiByaWdodCBOVU1BIG5v ZGUgKHdoZW4gdGhlIHByb2Nlc3Mgc3RhcnRzKS4KKwkJICoKKwkJICogWFhYIFRoZSBwcm9j ZXNzIG1heSBtb3ZlIHRvIGEgZGlmZmVyZW50IE5VTUEgbm9kZSBsYXRlciwgYnV0CisJCSAq IHRoZXJlJ3Mgbm90IG11Y2ggd2UgY2FuIGRvIGFib3V0IHRoYXQuCisJCSAqLworCQlpZiAo bnVtYV9wcm9jc19pbnRlcmxlYXZlKQorCQl7CisJCQlkbGlzdF9tdXRhYmxlX2l0ZXIgaXRl cjsKKwkJCXVuc2lnbmVkCWNwdTsKKwkJCXVuc2lnbmVkCW5vZGU7CisJCQlpbnQJCQlyYzsK KworCQkJcmMgPSBnZXRjcHUoJmNwdSwgJm5vZGUpOworCQkJaWYgKHJjICE9IDApCisJCQkJ ZWxvZyhFUlJPUiwgImdldGNwdSBmYWlsZWQ6ICVtIik7CisKKwkJCU15UHJvYyA9IE5VTEw7 CisKKwkJCWRsaXN0X2ZvcmVhY2hfbW9kaWZ5KGl0ZXIsIHByb2NnbG9iYWxsaXN0KQorCQkJ eworCQkJCVBHUFJPQwkgICAqcHJvYzsKKworCQkJCXByb2MgPSBkbGlzdF9jb250YWluZXIo UEdQUk9DLCBsaW5rcywgaXRlci5jdXIpOworCisJCQkJaWYgKHByb2MtPm51bWFfbm9kZSA9 PSBub2RlKQorCQkJCXsKKwkJCQkJTXlQcm9jID0gcHJvYzsKKwkJCQkJZGxpc3RfZGVsZXRl KGl0ZXIuY3VyKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogZGlk bid0IGZpbmQgUEdQUk9DIGZyb20gdGhlIGNvcnJlY3QgTlVNQSBub2RlLCBwaWNrIGFueSBm cmVlIG9uZSAqLworCQlpZiAoTXlQcm9jID09IE5VTEwpCisJCQlNeVByb2MgPSBkbGlzdF9j b250YWluZXIoUEdQUk9DLCBsaW5rcywgZGxpc3RfcG9wX2hlYWRfbm9kZShwcm9jZ2xvYmFs bGlzdCkpOworCiAJCVNwaW5Mb2NrUmVsZWFzZShQcm9jU3RydWN0TG9jayk7CiAJfQogCWVs c2UKQEAgLTE5ODgsNyArMjI1OSw3IEBAIFByb2NTZW5kU2lnbmFsKFByb2NOdW1iZXIgcHJv Y051bWJlcikKIAlpZiAocHJvY051bWJlciA8IDAgfHwgcHJvY051bWJlciA+PSBQcm9jR2xv YmFsLT5hbGxQcm9jQ291bnQpCiAJCWVsb2coRVJST1IsICJwcm9jTnVtYmVyIG91dCBvZiBy YW5nZSIpOwogCi0JU2V0TGF0Y2goJlByb2NHbG9iYWwtPmFsbFByb2NzW3Byb2NOdW1iZXJd LnByb2NMYXRjaCk7CisJU2V0TGF0Y2goJlByb2NHbG9iYWwtPmFsbFByb2NzW3Byb2NOdW1i ZXJdLT5wcm9jTGF0Y2gpOwogfQogCiAvKgpAQCAtMjA2MywzICsyMzM0LDYwIEBAIEJlY29t ZUxvY2tHcm91cE1lbWJlcihQR1BST0MgKmxlYWRlciwgaW50IHBpZCkKIAogCXJldHVybiBv azsKIH0KKworLyogY29weSBmcm9tIGJ1Zl9pbml0LmMgKi8KK3N0YXRpYyBTaXplCitnZXRf bWVtb3J5X3BhZ2Vfc2l6ZSh2b2lkKQoreworCVNpemUJCW9zX3BhZ2Vfc2l6ZTsKKwlTaXpl CQlodWdlX3BhZ2Vfc2l6ZTsKKworI2lmZGVmIFdJTjMyCisJU1lTVEVNX0lORk8gc3lzaW5m bzsKKworCUdldFN5c3RlbUluZm8oJnN5c2luZm8pOworCW9zX3BhZ2Vfc2l6ZSA9IHN5c2lu Zm8uZHdQYWdlU2l6ZTsKKyNlbHNlCisJb3NfcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFH RVNJWkUpOworI2VuZGlmCisKKwkvKgorCSAqIFhYWCBUaGlzIGlzIGEgYml0IGFubm95aW5n L2NvbmZ1c2luZywgYmVjYXVzZSB3ZSBtYXkgZ2V0IGEgZGlmZmVyZW50CisJICogcmVzdWx0 IGRlcGVuZGluZyBvbiB3aGVuIHdlIGNhbGwgaXQuIEJlZm9yZSBtbWFwKCkgd2UgZG9uJ3Qg a25vdyBpZiB0aGUKKwkgKiBodWdlIHBhZ2VzIGdldCB1c2VkLCBzbyB3ZSBhc3N1bWUgdGhl eSB3aWxsLiBBbmQgdGhlbiBpZiB3ZSBkb24ndCBnZXQKKwkgKiBodWdlIHBhZ2VzLCB3ZSds bCB3YXN0ZSBtZW1vcnkgZXRjLgorCSAqLworCisJLyogYXNzdW1lIGh1Z2UgcGFnZXMgZ2V0 IHVzZWQsIHVubGVzcyBIVUdFX1BBR0VTX09GRiAqLworCWlmIChodWdlX3BhZ2VzX3N0YXR1 cyA9PSBIVUdFX1BBR0VTX09GRikKKwkJaHVnZV9wYWdlX3NpemUgPSAwOworCWVsc2UKKwkJ R2V0SHVnZVBhZ2VTaXplKCZodWdlX3BhZ2Vfc2l6ZSwgTlVMTCk7CisKKwlyZXR1cm4gTWF4 KG9zX3BhZ2Vfc2l6ZSwgaHVnZV9wYWdlX3NpemUpOworfQorCisvKgorICogbW92ZV90b19u b2RlCisgKgkJbW92ZSBhbGwgcGFnZXMgaW4gdGhlIGdpdmVuIHJhbmdlIHRvIHRoZSByZXF1 ZXN0ZWQgTlVNQSBub2RlCisgKgorICogWFhYIFRoaXMgaXMgZXhwZWN0ZWQgdG8gb25seSBw cm9jZXNzIGZhaXJseSBzbWFsbCBudW1iZXIgb2YgcGFnZXMsIHNvIG5vCisgKiBuZWVkIHRv IGRvIGJhdGNoaW5nIGV0Yy4gSnVzdCBtb3ZlIHBhZ2VzIG9uZSBieSBvbmUuCisgKi8KK3N0 YXRpYyB2b2lkCittb3ZlX3RvX25vZGUoY2hhciAqc3RhcnRwdHIsIGNoYXIgKmVuZHB0ciwg U2l6ZSBtZW1fcGFnZV9zaXplLCBpbnQgbm9kZSkKK3sKKwl3aGlsZSAoc3RhcnRwdHIgPCBl bmRwdHIpCisJeworCQlpbnQJCQlyLAorCQkJCQlzdGF0dXM7CisKKwkJciA9IG51bWFfbW92 ZV9wYWdlcygwLCAxLCAodm9pZCAqKikgJnN0YXJ0cHRyLCAmbm9kZSwgJnN0YXR1cywgMCk7 CisKKwkJaWYgKHIgIT0gMCkKKwkJCWVsb2coV0FSTklORywgImZhaWxlZCB0byBtb3ZlIHBh Z2UgdG8gTlVNQSBub2RlICVkIChyID0gJWQsIHN0YXR1cyA9ICVkKSIsCisJCQkJIG5vZGUs IHIsIHN0YXR1cyk7CisKKwkJc3RhcnRwdHIgKz0gbWVtX3BhZ2Vfc2l6ZTsKKwl9Cit9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCmluZGV4IDdmZWJmMzAwMWEzLi5iZjc3NWM3NjU0 NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKQEAgLTE0OSw2ICsxNDksNyBAQCBp bnQJCQlNYXhCYWNrZW5kcyA9IDA7CiBib29sCQludW1hX2J1ZmZlcnNfaW50ZXJsZWF2ZSA9 IGZhbHNlOwogYm9vbAkJbnVtYV9sb2NhbGFsbG9jID0gZmFsc2U7CiBpbnQJCQludW1hX3Bh cnRpdGlvbl9mcmVlbGlzdCA9IDA7Citib29sCQludW1hX3Byb2NzX2ludGVybGVhdmUgPSBm YWxzZTsKIAogLyogR1VDIHBhcmFtZXRlcnMgZm9yIHZhY3V1bSAqLwogaW50CQkJVmFjdXVt QnVmZmVyVXNhZ2VMaW1pdCA9IDIwNDg7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxl cy5jCmluZGV4IGUyMzYxYzE2MWU2Li45MzAwODI1ODhmMiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9ndWNfdGFibGVzLmMKQEAgLTIxNDQsNiArMjE0NCwxNiBAQCBzdHJ1Y3QgY29uZmln X2Jvb2wgQ29uZmlndXJlTmFtZXNCb29sW10gPQogCQlOVUxMLCBOVUxMLCBOVUxMCiAJfSwK IAorCXsKKwkJeyJudW1hX3Byb2NzX2ludGVybGVhdmUiLCBQR0NfUE9TVE1BU1RFUiwgREVW RUxPUEVSX09QVElPTlMsCisJCQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMgTlVNQSBpbnRlcmxl YXZpbmcgb2YgUEdQUk9DIGVudHJpZXMuIiksCisJCQlnZXR0ZXh0X25vb3AoIldoZW4gZW5h YmxlZCwgdGhlIFBHUFJPQyBlbnRyaWVzIGFyZSBpbnRlcmxlYXZlZCB0byBhbGwgTlVNQSBu b2Rlcy4iKSwKKwkJfSwKKwkJJm51bWFfcHJvY3NfaW50ZXJsZWF2ZSwKKwkJZmFsc2UsCisJ CU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCiAJewogCQl7InN5bmNfcmVwbGljYXRpb25fc2xv dHMiLCBQR0NfU0lHSFVQLCBSRVBMSUNBVElPTl9TVEFOREJZLAogCQkJZ2V0dGV4dF9ub29w KCJFbmFibGVzIGEgcGh5c2ljYWwgc3RhbmRieSB0byBzeW5jaHJvbml6ZSBsb2dpY2FsIGZh aWxvdmVyIHJlcGxpY2F0aW9uIHNsb3RzIGZyb20gdGhlIHByaW1hcnkgc2VydmVyLiIpLApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9zcmMvaW5jbHVkZS9taXNj YWRtaW4uaAppbmRleCAxNzUyODQzOWYwNy4uZjQ1NGI0ZTlkNzUgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCkBA IC0xODEsNiArMTgxLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfcGFyYWxsZWxf d29ya2VyczsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIG51bWFfYnVmZmVyc19pbnRlcmxl YXZlOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgbnVtYV9sb2NhbGFsbG9jOwogZXh0ZXJu IFBHRExMSU1QT1JUIGludCBudW1hX3BhcnRpdGlvbl9mcmVlbGlzdDsKK2V4dGVybiBQR0RM TElNUE9SVCBib29sIG51bWFfcHJvY3NfaW50ZXJsZWF2ZTsKIAogZXh0ZXJuIFBHRExMSU1Q T1JUIGludCBjb21taXRfdGltZXN0YW1wX2J1ZmZlcnM7CiBleHRlcm4gUEdETExJTVBPUlQg aW50IG11bHRpeGFjdF9tZW1iZXJfYnVmZmVyczsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3N0b3JhZ2UvcHJvYy5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKaW5kZXggOWY5 YjNmY2ZiZjEuLjVjYjE2MzI3MThlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdl L3Byb2MuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaApAQCAtMTk0LDYgKzE5 NCw4IEBAIHN0cnVjdCBQR1BST0MKIAkJCQkJCQkJICogdmFjdXVtIG11c3Qgbm90IHJlbW92 ZSB0dXBsZXMgZGVsZXRlZCBieQogCQkJCQkJCQkgKiB4aWQgPj0geG1pbiAhICovCiAKKwlp bnQJCQlwcm9jbnVtYmVyOwkJLyogaW5kZXggaW4gUHJvY0dsb2JhbC0+YWxsUHJvY3MgKi8K KwogCWludAkJCXBpZDsJCQkvKiBCYWNrZW5kJ3MgcHJvY2VzcyBJRDsgMCBpZiBwcmVwYXJl ZCB4YWN0ICovCiAKIAlpbnQJCQlwZ3hhY3RvZmY7CQkvKiBvZmZzZXQgaW50byB2YXJpb3Vz IFByb2NHbG9iYWwtPmFycmF5cyB3aXRoCkBAIC0zMTksNiArMzIxLDkgQEAgc3RydWN0IFBH UFJPQwogCVBHUFJPQwkgICAqbG9ja0dyb3VwTGVhZGVyOwkvKiBsb2NrIGdyb3VwIGxlYWRl ciwgaWYgSSdtIGEgbWVtYmVyICovCiAJZGxpc3RfaGVhZAlsb2NrR3JvdXBNZW1iZXJzOwkv KiBsaXN0IG9mIG1lbWJlcnMsIGlmIEknbSBhIGxlYWRlciAqLwogCWRsaXN0X25vZGUJbG9j a0dyb3VwTGluazsJLyogbXkgbWVtYmVyIGxpbmssIGlmIEknbSBhIG1lbWJlciAqLworCisJ LyogTlVNQSBub2RlICovCisJaW50CQkJbnVtYV9ub2RlOwogfTsKIAogLyogTk9URTogInR5 cGVkZWYgc3RydWN0IFBHUFJPQyBQR1BST0MiIGFwcGVhcnMgaW4gc3RvcmFnZS9sb2NrLmgu ICovCkBAIC0zODMsNyArMzg4LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIFBHUFJPQyAqTXlQ cm9jOwogdHlwZWRlZiBzdHJ1Y3QgUFJPQ19IRFIKIHsKIAkvKiBBcnJheSBvZiBQR1BST0Mg c3RydWN0dXJlcyAobm90IGluY2x1ZGluZyBkdW1taWVzIGZvciBwcmVwYXJlZCB0eG5zKSAq LwotCVBHUFJPQwkgICAqYWxsUHJvY3M7CisJUEdQUk9DCSAgKiphbGxQcm9jczsKIAogCS8q IEFycmF5IG1pcnJvcmluZyBQR1BST0MueGlkIGZvciBlYWNoIFBHUFJPQyBjdXJyZW50bHkg aW4gdGhlIHByb2NhcnJheSAqLwogCVRyYW5zYWN0aW9uSWQgKnhpZHM7CkBAIC00MzUsOCAr NDQwLDggQEAgZXh0ZXJuIFBHRExMSU1QT1JUIFBHUFJPQyAqUHJlcGFyZWRYYWN0UHJvY3M7 CiAvKgogICogQWNjZXNzb3JzIGZvciBnZXR0aW5nIFBHUFJPQyBnaXZlbiBhIFByb2NOdW1i ZXIgYW5kIHZpY2UgdmVyc2EuCiAgKi8KLSNkZWZpbmUgR2V0UEdQcm9jQnlOdW1iZXIobikg KCZQcm9jR2xvYmFsLT5hbGxQcm9jc1sobildKQotI2RlZmluZSBHZXROdW1iZXJGcm9tUEdQ cm9jKHByb2MpICgocHJvYykgLSAmUHJvY0dsb2JhbC0+YWxsUHJvY3NbMF0pCisjZGVmaW5l IEdldFBHUHJvY0J5TnVtYmVyKG4pIChQcm9jR2xvYmFsLT5hbGxQcm9jc1sobildKQorI2Rl ZmluZSBHZXROdW1iZXJGcm9tUEdQcm9jKHByb2MpICgocHJvYyktPnByb2NudW1iZXIpCiAK IC8qCiAgKiBXZSBzZXQgYXNpZGUgc29tZSBleHRyYSBQR1BST0Mgc3RydWN0dXJlcyBmb3Ig InNwZWNpYWwgd29ya2VyIiBwcm9jZXNzZXMsCi0tIAoyLjQ5LjAKCg== --------------LG5I5UHq4oggMq78gAQBocuX Content-Type: text/x-patch; charset=UTF-8; name="v1-0006-NUMA-pin-backends-to-NUMA-nodes.patch" Content-Disposition: attachment; filename="v1-0006-NUMA-pin-backends-to-NUMA-nodes.patch" Content-Transfer-Encoding: base64 RnJvbSBmNzYzNzdhNTZmMzc0MjFjNjFjNGRkODc2ODEzYjU3MDg0YjAxOWRmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVHVlLCAyNyBNYXkgMjAyNSAyMzowODo0OCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djEgNi82XSBOVU1BOiBwaW4gYmFja2VuZHMgdG8gTlVNQSBub2RlcwoKV2hlbiBpbml0aWFs aXppbmcgdGhlIGJhY2tlbmQsIHdlIHBpY2sgYSBQR1BST0MgZW50cnkgZnJvbSB0aGUgcmln aHQKTlVNQSBub2RlIHdoZXJlIHRoZSBiYWNrZW5kIGlzIHJ1bm5pbmcuIEJ1dCB0aGUgcHJv Y2VzcyBjYW4gbW92ZSB0byBhCmRpZmZlcmVudCBjb3JlIC8gbm9kZSwgc28gdG8gcHJldmVu dCB0aGF0IHdlIHBpbiBpdC4KLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5j ICAgICB8IDIxICsrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvaW5p dC9nbG9iYWxzLmMgICAgfCAgMSArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJs ZXMuYyB8IDEwICsrKysrKysrKysKIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAg ICAgIHwgIDEgKwogNCBmaWxlcyBjaGFuZ2VkLCAzMyBpbnNlcnRpb25zKCspCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvbG1nci9wcm9jLmMKaW5kZXggOWQzZTk0YTdiM2EuLjRjOWU1NTYwOGIyIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCisrKyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTcyOSw2ICs3MjksMjcgQEAgSW5pdFByb2Nl c3Modm9pZCkKIAl9CiAJTXlQcm9jTnVtYmVyID0gR2V0TnVtYmVyRnJvbVBHUHJvYyhNeVBy b2MpOwogCisJLyoKKwkgKiBPcHRpb25hbGx5LCByZXN0cmljdCB0aGUgcHJvY2VzcyB0byBv bmx5IHJ1biBvbiBDUFVzIGZyb20gdGhlIHNhbWUgTlVNQQorCSAqIGFzIHRoZSBQR1BST0Mu IFdlIGRvIHRoaXMgZXZlbiBpZiB0aGUgUEdQUk9DIGhhcyBhIGRpZmZlcmVudCBOVU1BIG5v ZGUsCisJICogYnV0IG5vdCBmb3IgUEdQUk9DIGVudHJpZXMgd2l0aG91dCBhIG5vZGUgKGku ZS4gYXV4LzJQQyBlbnRyaWVzKS4KKwkgKgorCSAqIFRoaXMgYWxzbyBtZWFucyB3ZSBvbmx5 IGRvIHRoaXMgd2l0aCBudW1hX3Byb2NzX2ludGVybGVhdmUsIGJlY2F1c2UKKwkgKiB3aXRo b3V0IHRoYXQgd2UnbGwgaGF2ZSBudW1hX25vZGU9LTEgZm9yIGFsbCBQR1BST0MgZW50cmll cy4KKwkgKgorCSAqIEZJWE1FIGFkZCBwcm9wZXIgZXJyb3ItY2hlY2tpbmcgZm9yIGxpYm51 bWEgZnVuY3Rpb25zCisJICovCisJaWYgKG51bWFfcHJvY3NfcGluICYmIE15UHJvYy0+bnVt YV9ub2RlICE9IC0xKQorCXsKKwkJc3RydWN0IGJpdG1hc2sgKmNwdW1hc2sgPSBudW1hX2Fs bG9jYXRlX2NwdW1hc2soKTsKKworCQludW1hX25vZGVfdG9fY3B1cyhNeVByb2MtPm51bWFf bm9kZSwgY3B1bWFzayk7CisKKwkJbnVtYV9zY2hlZF9zZXRhZmZpbml0eShNeVByb2NQaWQs IGNwdW1hc2spOworCisJCW51bWFfZnJlZV9jcHVtYXNrKGNwdW1hc2spOworCX0KKwogCS8q CiAJICogQ3Jvc3MtY2hlY2sgdGhhdCB0aGUgUEdQUk9DIGlzIG9mIHRoZSB0eXBlIHdlIGV4 cGVjdDsgaWYgdGhpcyB3ZXJlIG5vdAogCSAqIHRoZSBjYXNlLCBpdCB3b3VsZCBnZXQgcmV0 dXJuZWQgdG8gdGhlIHdyb25nIGxpc3QuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9pbml0L2dsb2JhbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCmlu ZGV4IGJmNzc1Yzc2NTQ1Li5lNTg0YmE4NDBlZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvaW5pdC9nbG9iYWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9i YWxzLmMKQEAgLTE1MCw2ICsxNTAsNyBAQCBib29sCQludW1hX2J1ZmZlcnNfaW50ZXJsZWF2 ZSA9IGZhbHNlOwogYm9vbAkJbnVtYV9sb2NhbGFsbG9jID0gZmFsc2U7CiBpbnQJCQludW1h X3BhcnRpdGlvbl9mcmVlbGlzdCA9IDA7CiBib29sCQludW1hX3Byb2NzX2ludGVybGVhdmUg PSBmYWxzZTsKK2Jvb2wJCW51bWFfcHJvY3NfcGluID0gZmFsc2U7CiAKIC8qIEdVQyBwYXJh bWV0ZXJzIGZvciB2YWN1dW0gKi8KIGludAkJCVZhY3V1bUJ1ZmZlclVzYWdlTGltaXQgPSAy MDQ4OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMg Yi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCA5MzAwODI1ODhm Mi4uM2ZjODg5N2FlMzYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBA IC0yMTU0LDYgKzIxNTQsMTYgQEAgc3RydWN0IGNvbmZpZ19ib29sIENvbmZpZ3VyZU5hbWVz Qm9vbFtdID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCiAKKwl7CisJCXsibnVtYV9wcm9j c19waW4iLCBQR0NfUE9TVE1BU1RFUiwgREVWRUxPUEVSX09QVElPTlMsCisJCQlnZXR0ZXh0 X25vb3AoIkVuYWJsZXMgcGlubmluZyBiYWNrZW5kcyB0byBOVU1BIG5vZGVzIChtYXRjaGlu ZyB0aGUgUEdQUk9DIG5vZGUpLiIpLAorCQkJZ2V0dGV4dF9ub29wKCJXaGVuIGVuYWJsZWQs IHNldHMgYWZmaW5pdHkgdG8gQ1BVcyBmcm9tIHRoZSBzYW1lIE5VTUEgbm9kZS4iKSwKKwkJ fSwKKwkJJm51bWFfcHJvY3NfcGluLAorCQlmYWxzZSwKKwkJTlVMTCwgTlVMTCwgTlVMTAor CX0sCisKIAl7CiAJCXsic3luY19yZXBsaWNhdGlvbl9zbG90cyIsIFBHQ19TSUdIVVAsIFJF UExJQ0FUSU9OX1NUQU5EQlksCiAJCQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMgYSBwaHlzaWNh bCBzdGFuZGJ5IHRvIHN5bmNocm9uaXplIGxvZ2ljYWwgZmFpbG92ZXIgcmVwbGljYXRpb24g c2xvdHMgZnJvbSB0aGUgcHJpbWFyeSBzZXJ2ZXIuIiksCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9taXNjYWRtaW4uaCBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCmluZGV4IGY0NTRi NGU5ZDc1Li5kMGQ5NjBjYWE5ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbWlzY2FkbWlu LmgKKysrIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKQEAgLTE4Miw2ICsxODIsNyBAQCBl eHRlcm4gUEdETExJTVBPUlQgYm9vbCBudW1hX2J1ZmZlcnNfaW50ZXJsZWF2ZTsKIGV4dGVy biBQR0RMTElNUE9SVCBib29sIG51bWFfbG9jYWxhbGxvYzsKIGV4dGVybiBQR0RMTElNUE9S VCBpbnQgbnVtYV9wYXJ0aXRpb25fZnJlZWxpc3Q7CiBleHRlcm4gUEdETExJTVBPUlQgYm9v bCBudW1hX3Byb2NzX2ludGVybGVhdmU7CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBudW1h X3Byb2NzX3BpbjsKIAogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBjb21taXRfdGltZXN0YW1w X2J1ZmZlcnM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG11bHRpeGFjdF9tZW1iZXJfYnVm ZmVyczsKLS0gCjIuNDkuMAoK --------------LG5I5UHq4oggMq78gAQBocuX--