Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vuWhv-00BS0j-2W for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Feb 2026 14:14:44 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vuWhu-00DYgf-1g for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Feb 2026 14:14:42 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vuWht-00DYgW-36 for pgsql-hackers@lists.postgresql.org; Mon, 23 Feb 2026 14:14:42 +0000 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vuWho-00000000sO1-3OnA for pgsql-hackers@postgresql.org; Mon, 23 Feb 2026 14:14:41 +0000 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-4806ce0f97bso35148835e9.0 for ; Mon, 23 Feb 2026 06:14:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771856076; cv=none; d=google.com; s=arc-20240605; b=KG28Ejq+8hKD+WMV1gWrOw1GPLMrBXYylyljLRzhyKTz8JVn6AtWmhrQD17Ofn7pDZ pbz8f++BNtud0w83tr7mwwbAVECDltsENI/xppZku8k4v3vrddD3Zg8mMjafYfn5+D1D PRpA03cD/DZHCNC9TK4Ynu5jOyuhvVDHuS0hVq4KSazlih8tMHNCv+EWtVGLgS7MkdEK S6nnA69yhT8huLHxRbjwTPheySLhlVQ0uDQLcEg7zzjOGVBHYVVGUD6+EeBhaQvgTlRc +vI0yUEqFieLFDcnuHFi18ECKfsz2qe22lh3QgqsLysW/GUZMU2qLF+EbkvmOfQ9vYz6 A8gA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=Pkz0tR3pO6vyMEe2yeYk47KU1SbaMfMsIXofoMxf6PA=; fh=N9gJFGKoQ1twCkRipetoZYxj2v24yAHJGaw1ssiihHc=; b=Ob2hs1up5zsq51MqEL0fowjyZuCuFaft96LNGw0UUccqWx8lf6zD/stYF7FUpWGJH9 qLh+vQu4rJtcsmo4h4I9HE4BzSbXXZ87E9ze1ux+uS1AQH4sJnGPAn9QZQlfIJREOP+l RNXLttbkybFqqL+eIb97H7O2kTPAzY4MZR7Q/7XIcnggCQUgKq3LsDZQxo22fqb578ML fUyP6PR1I2y59ZXXg2YCin+qrP4lp5s+ekjyeK/vebFPac86JU3W4Zs1fqOQrnn0BBIW 0Ll3jxNSxLxa3ZqhCVk7ZWc2iuBPnOrq0XJmFPED5ZhoR4dc5czIi9R8M+7oKhAuuJQp xA1A==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771856076; x=1772460876; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=Pkz0tR3pO6vyMEe2yeYk47KU1SbaMfMsIXofoMxf6PA=; b=e/OZQ982o5lbypnX8RgubBhmE4eFZrvhHcFt/wIP8+MKIbkhQSYioNtLzQqRT9sLCg l63mZPZu/ZEuuedyhZqdjSaTVEuXPKoUkIGQmh7q4fW5x7XoLDSpd8o/KO7AYu/IM4it RMbYLKl4QY6F3/ccv8OQmchS+pfgGTDinf5QzatgXnUJltlq9uQEFy//7sR3PDgIlmNl PUc/iJ190sEwqcuXNZ1Mx6CWmdPk9LQLdWtWumlGd+XiQpNpYgWqYSfhN3CMFYah0U48 HYBvIEf+zB+SOjTGiHfHAi+1DC7wrCA+y7TBAUZova2uZFWs9c3ZUeTNlMypFhPErm9G +s6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771856076; x=1772460876; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Pkz0tR3pO6vyMEe2yeYk47KU1SbaMfMsIXofoMxf6PA=; b=ekX9fyBTU0h0YVrYGW2Y2f0yQ3YhaOBJlqlNCWXqJme1gdOI4HVXxyRYU7XMLudXCb qkvui2OsPns59RwtWmbr9shM0WsZXlxUC+YjJmdI3tn+aAd+1+G6W16zEk+FWqBaeYzp JS8xDO0MyLqmCqO5VZPVTdzePsGJJ+UwyYc9rf6UwnQaAXAvyJfrQmeJ0WgT1ZHOpBAJ ucW0gru9rHMOZPRCXhpO4AClNlSp3kUkaLuHmLhPixkrIrp+iLqOipcvrTFmtuVYhvND If4+/ybib53VDIU15ytNmv1/sPLS0IEXRaQs8Ies6TRHcZ2wTaH7EfhRAyiFjG68V/E2 /fKQ== X-Gm-Message-State: AOJu0YyFPqv+MkZ8aDjDEMIFuwtZ71A5kInSlqt3pzRtB+Kt/sYBPHSn Z3DiTgE9tcAOFhjfO/FmugN6n+te4s4oBnllTyHvWfCtRJMHHyriuqlVglaVW0qGCaj1PrCmfCL vu3DMszlNwCVnV51bT9Xxg3BvRo5TZ/s= X-Gm-Gg: AZuq6aLblOs4bngd193IS42SONsiSyt1rivZUYjRPOoZZntrVLgadRvNflKAALbQkfm SP8b/ZB0NIWHLXUi1OK7PP8DwirYh7Rb8R29gwsHkGpzE7KkMdBab2hEu7j/wRzXXL73R8wusz2 sOjqJyaNThBwdJSpGhGMnFKBvaWp4HjMEVBebGqUIbhYEmmwI5fg9gv1Q6e2f1xwF+UYyJbkg5H PmdjmW+GNQWvbJ6zk4eHTUxbvAr9Ap+42Ez4FFKQBYf4R/qfe9z3+0q/au1xNVMcFH3Jo4hIBrW DvI11yQe7wmCaWy5+46FAn80nMqlyLyyBXAkr9UBeHUQgyLEGkU= X-Received: by 2002:a05:600c:4589:b0:480:1e9e:f9b with SMTP id 5b1f17b1804b1-483a95dea3emr183138675e9.16.1771856075977; Mon, 23 Feb 2026 06:14:35 -0800 (PST) MIME-Version: 1.0 References: <5a37c2e3-619d-4816-84d7-0b27e3e6797f@iki.fi> In-Reply-To: From: Ashutosh Bapat Date: Mon, 23 Feb 2026 19:44:23 +0530 X-Gm-Features: AaiRm52-81l9RIxL7O1NIPUZSJgeOY1K4F-nO25WBeWn3UJj7fAN2chJO2Y3agc Message-ID: Subject: Re: Better shared data structure management and resizable shared data structures To: Andres Freund , Heikki Linnakangas Cc: pgsql-hackers , chaturvedipalak1911@gmail.com Content-Type: multipart/mixed; boundary="000000000000009b35064b7e64e5" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000009b35064b7e64e5 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Feb 18, 2026 at 9:17=E2=80=AFPM Ashutosh Bapat wrote: > > > 4. the address and length passed to madvise needs to be page aligned, > > > but that passed to fallocate() needn't be. `man fallocate` says > > > "Specifying the FALLOC_FL_PUNCH_HOLE flag (available since Linux > > > 2.6.38) in mode deallocates space (i.e., creates a hole) in the byte > > > range starting at offset and continuing for len bytes. Within the > > > specified range, partial filesystem blocks are zeroed, and whole > > > filesystem blocks are removed from the file.". It seems to be > > > automatically taking care of the page size. So using fallocate() > > > simplifies logic. Further `man madvise` says "but since Linux 3.5, an= y > > > filesystem which supports the fallocate(2) FALLOC_FL_PUNCH_HOLE mode > > > also supports MADV_REMOVE." fallocate with FALLOC_FL_PUNCH_HOLE is > > > guaranteed to be available on a system which supports MADV_REMOVE. > > > > I think it makes no sense to support resizing below page size > > granularity. What's the point of doing that? > > > > No point really. But we can not control the extensions which want to > specify a maximum size smaller than a page size. They wouldn't know > what page size the underlying machine will have, especially with huge > pages which have a wide range of sizes. Even in the case of shared > buffers, a value of max_shared_buffers may cause buffer blocks to span > pages but other structures may fit a page. > > In the attached patches, if a resizable structure is such that its > max_size is smaller than a page size, it is treated as a fixed > structure with size =3D max_size. Any request to resize such structures > will simply update the metadata without actual madvise operation. Only > the structures whose max_size > page_size would be treated as truly > resizable and will use madvise. You bring another interesting point. > If a resizable structure has a maximum size higher than the page size, > but it is allocated such that the initial part of it is on a partially > allocated page and the last part of it is on another partially > allocated page, those pages are never freed because of adjoining > structures. Per the logic in the attached patches, all the fixed (or > pseudo-resizable structures) are packed together. The resizable > structures start on a page boundary and their max_sizes are adjusted > to be page aligned. That way we can release pages when the structure > shrinks more than a page. It was a mistake on my part to assume that more memory will be freed if we page align the start and end of a resizable structure. I didn't account for the memory wasted in alignment itself. That amount comes out to be same as the amount of memory wasted if we don't page align the structure. But the code is simpler if we don't page align the structure as seen in the attached patches. > > > > > > > Using fallocate() (or madvise()) to free memory, we don't need > > > > multiple segments. So much less code churn compared to the multiple > > > > mappings approach. However, there is one drawback. In the multiple > > > > mapping approach access beyond the current size of the structure wo= uld > > > > result in segfault or bus error. But in the fallocate/madvise appro= ach > > > > such an access does not cause a crash. A write beyond the pages tha= t > > > > fit the current size of the structure causes more memory to be > > > > allocated silently. A read returns 0s. So, there's a possibility th= at > > > > bugs in size calculations might go unnoticed. I think that's how it > > > > works even today, access in the yet un-allocated part of the shared > > > > memory will simply go unnoticed. > > > > > > If that's something you care about, you can mprotect(PROT_NONE) the r= elevant > > > regions. > > > > I am fine, if we let go of this protection while getting rid of > > multiple segments, if we all agree to do so. > > > > I could be wrong, but mprotect needs to be executed in every backend > > where the memory is mapped and then a new backend needs to inherit it > > from the postmaster. Makes resizing complex since it has to touch > > every backend. So avoiding mprotect is better. I discussed this point with Andres offlist. Here's a summary of that discussion. Any serious users of resizable shared memory structures would need to send proc signal barriers to synchronize the resizing across the backends. This barrier can be used to perform mprotect() in the backends and a separate signal to Postmaster, if mprotect is needed in Postmaster. But whether mprotect is needed depends upon the usecase. It should be responsibility of the resizable structure user and not of the ShmemResizeRegistered() Following points need a bit of discussion. 1. calculation of allocated_size For fixed sized shared memory structures, allocated_size is the size of the structure after cache aligning it. Assuming that the shared memory is allcoated in pages, this also is the actually memory allocated to the structure when the whole structure is written to. For resizable structure, it's a bit more complicated. We allocate and reserve the maximum space required by the structure. At a given point in time, the memory page where the next structure begins and the page which contains the end of the structure at that point in time are allocated. The pages in-between are not allocated. Thus the allocated_size should be the length from the start the structure to the end of the page containing the current end of the structure + part of the page where the next structure starts upto the start of the next structure. That is what is implemented in the attached patches. 2. GUCs shared_memory_size, shared_memory_size_in_huge_pages These GUCs indicate the size of the shared memory in bytes and in huge pages. Without resizable shared memory structures calculating these is straight forward, we sum all the sizes of all the requested structures. With resizable shared memory structures, these GUCs do not make much sense. Since the memory allocated to the resizable structures can be anywhere between 0 to maximum, neither the sum of the their initial sizes nor the sum of their maximum sizes can be reported as shared_memory_size. Similarly for shared_memory_size_in_huge_pages. We need two GUCs to replace each of the existing GUCs - max_shared_memory_size, initial_shared_memory_size and their huge page peers. max_shared_memory_size is the sum of the maximum sizes of resizable structures + the requested sizes of the fixed structure. initial_shared_memory_size is the sum of the initial sizes requested for all the structures. 3. Testing the memory allocation I couldn't find a way to reliably know the shared memory allocated at a given address in the process. RSS Shmem given the amount of shared memory accessed by the process which includes memory allocated to the fixed structures accessed by the process. This value isn't stable across runs of the test in the patch. The test adds the RSS shmem reported against the variations in the resizable shared memory structure which can be visually inspected to be within limits. But those limits are hard to test in the test code. Looking for some suggestions here. Disabling resizable structures in the builds which do not support resizable structures is still a TODO. --=20 Best Wishes, Ashutosh Bapat --000000000000009b35064b7e64e5 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-wip-Introduce-a-new-way-of-registering-shar-20260223.patch" Content-Disposition: attachment; filename="0001-wip-Introduce-a-new-way-of-registering-shar-20260223.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlz9ckb10 RnJvbSA0OTY3NmM1YmEwODhkMTMyMzZmMmMxYzY2ODAwZDdlN2IxYWJiZTVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5uYWthbmdh c0Bpa2kuZmk+CkRhdGU6IE1vbiwgOSBGZWIgMjAyNiAyMjoyODoyMyArMDIwMApTdWJqZWN0OiBb UEFUQ0ggMS8zXSB3aXA6IEludHJvZHVjZSBhIG5ldyB3YXkgb2YgcmVnaXN0ZXJpbmcgc2hhcmVk IG1lbW9yeQogc3RydWN0cwoKLS0tCiAuLi4vcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3Rh dGVtZW50cy5jICAgfCAxMTIgKysrKy0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS92 YXJzdXAuYyAgICAgICAgICAgfCAgMzIgKy0tCiBzcmMvYmFja2VuZC9ib290c3RyYXAvYm9vdHN0 cmFwLmMgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hf YmFja2VuZC5jICAgICAgIHwgIDExICstCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0 ZXIuYyAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtLmMgICAg ICAgICAgICAgICAgIHwgIDQ2ICsrLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9yZWdp c3RyeS5jICAgICAgICB8ICAzNCArKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyAg ICAgICAgICAgICAgICB8ICA1MSArKy0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wbXNpZ25h bC5jICAgICAgICAgICAgfCAgNTMgKystLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2Fy cmF5LmMgICAgICAgICAgIHwgMTI3ICsrKysrLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3Byb2NzaWduYWwuYyAgICAgICAgICB8ICA2MyArKystLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvc2htZW0uYyAgICAgICAgICAgICAgIHwgMjMzICsrKysrKysrKysrKysrKysrLQogc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvc2ludmFsYWR0LmMgICAgICAgICAgIHwgIDM5ICstLQogc3JjL2Jh Y2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyAgICAgICAgICAgICAgIHwgMTU2ICsrKysrKy0tLS0t LQogc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgICAgICAgICAgIHwgICAyICsK IHNyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2FtLmggICAgICAgICAgICAgICAgICB8ICAxMiArLQog c3JjL2luY2x1ZGUvc3RvcmFnZS9kc21fcmVnaXN0cnkuaCAgICAgICAgICAgIHwgICAzICstCiBz cmMvaW5jbHVkZS9zdG9yYWdlL2lwYy5oICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3Jj L2luY2x1ZGUvc3RvcmFnZS9wbXNpZ25hbC5oICAgICAgICAgICAgICAgIHwgICAzICstCiBzcmMv aW5jbHVkZS9zdG9yYWdlL3Byb2MuaCAgICAgICAgICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9p bmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmggICAgICAgICAgICAgICB8ICAgMyArLQogc3JjL2lu Y2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggICAgICAgICAgICAgIHwgICAzICstCiBzcmMvaW5j bHVkZS9zdG9yYWdlL3NobWVtLmggICAgICAgICAgICAgICAgICAgfCAgNTcgKysrKysKIHNyYy9p bmNsdWRlL3N0b3JhZ2Uvc2ludmFsYWR0LmggICAgICAgICAgICAgICB8ICAgMyArLQogMjQgZmls ZXMgY2hhbmdlZCwgNjY1IGluc2VydGlvbnMoKyksIDM4OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYyBiL2Nv bnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCmluZGV4IDRhNDI3 NTMzYmQ4Li43MWRlYmM4YjQ3ZiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVu dHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKKysrIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMv cGdfc3RhdF9zdGF0ZW1lbnRzLmMKQEAgLTI1OCw2ICsyNTgsMjUgQEAgdHlwZWRlZiBzdHJ1Y3Qg cGdzc1NoYXJlZFN0YXRlCiAJcGdzc0dsb2JhbFN0YXRzIHN0YXRzOwkJLyogZ2xvYmFsIHN0YXRp c3RpY3MgZm9yIHBnc3MgKi8KIH0gcGdzc1NoYXJlZFN0YXRlOwogCitzdGF0aWMgdm9pZCBwZ3Nz X3NobWVtX2luaXQodm9pZCAqYXJnKTsKKworc3RhdGljIFNobWVtU3RydWN0RGVzYyBwZ3NzU2hh cmVkU3RhdGVTaG1lbURlc2MgPSB7CisJLm5hbWUgPSAicGdfc3RhdF9zdGF0ZW1lbnRzIiwKKwku c2l6ZSA9IHNpemVvZihwZ3NzU2hhcmVkU3RhdGUpLAorCS5pbml0X2ZuID0gcGdzc19zaG1lbV9p bml0LAorfTsKKworc3RhdGljIFNobWVtSGFzaERlc2MgcGdzc1NoYXJlZEhhc2hEZXNjID0gewor CS5uYW1lID0gInBnX3N0YXRfc3RhdGVtZW50cyBoYXNoIiwKKwkuaW5pdF9zaXplID0gMCwJCS8q IHNldCBmcm9tICdwZ3NzX21heCcgKi8KKwkubWF4X3NpemUgPSAwLAkJLyogc2V0IGZyb20gJ3Bn c3NfbWF4JyAqLworfTsKKworLyogTGlua3MgdG8gc2hhcmVkIG1lbW9yeSBzdGF0ZSAqLworI2Rl ZmluZSBwZ3NzICgocGdzc1NoYXJlZFN0YXRlICopIHBnc3NTaGFyZWRTdGF0ZVNobWVtRGVzYy5w dHIpCisjZGVmaW5lIHBnc3NfaGFzaCAocGdzc1NoYXJlZEhhc2hEZXNjLnB0cikKKworCiAvKi0t LS0gTG9jYWwgdmFyaWFibGVzIC0tLS0qLwogCiAvKiBDdXJyZW50IG5lc3RpbmcgZGVwdGggb2Yg cGxhbm5lci9FeGVjdXRvclJ1bi9Qcm9jZXNzVXRpbGl0eSBjYWxscyAqLwpAQCAtMjc0LDEwICsy OTMsNiBAQCBzdGF0aWMgRXhlY3V0b3JGaW5pc2hfaG9va190eXBlIHByZXZfRXhlY3V0b3JGaW5p c2ggPSBOVUxMOwogc3RhdGljIEV4ZWN1dG9yRW5kX2hvb2tfdHlwZSBwcmV2X0V4ZWN1dG9yRW5k ID0gTlVMTDsKIHN0YXRpYyBQcm9jZXNzVXRpbGl0eV9ob29rX3R5cGUgcHJldl9Qcm9jZXNzVXRp bGl0eSA9IE5VTEw7CiAKLS8qIExpbmtzIHRvIHNoYXJlZCBtZW1vcnkgc3RhdGUgKi8KLXN0YXRp YyBwZ3NzU2hhcmVkU3RhdGUgKnBnc3MgPSBOVUxMOwotc3RhdGljIEhUQUIgKnBnc3NfaGFzaCA9 IE5VTEw7Ci0KIC8qLS0tLSBHVUMgdmFyaWFibGVzIC0tLS0qLwogCiB0eXBlZGVmIGVudW0KQEAg LTM2NSw3ICszODAsNiBAQCBzdGF0aWMgdm9pZCBwZ3NzX3N0b3JlKGNvbnN0IGNoYXIgKnF1ZXJ5 LCBpbnQ2NCBxdWVyeUlkLAogc3RhdGljIHZvaWQgcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFs KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJCQkJCQkJCXBnc3NWZXJzaW9uIGFwaV92ZXJz aW9uLAogCQkJCQkJCQkJCWJvb2wgc2hvd3RleHQpOwotc3RhdGljIFNpemUgcGdzc19tZW1zaXpl KHZvaWQpOwogc3RhdGljIHBnc3NFbnRyeSAqZW50cnlfYWxsb2MocGdzc0hhc2hLZXkgKmtleSwg U2l6ZSBxdWVyeV9vZmZzZXQsIGludCBxdWVyeV9sZW4sCiAJCQkJCQkJICBpbnQgZW5jb2Rpbmcs IGJvb2wgc3RpY2t5KTsKIHN0YXRpYyB2b2lkIGVudHJ5X2RlYWxsb2Modm9pZCk7CkBAIC01MDAs MTEgKzUxNCwzOSBAQCBfUEdfaW5pdCh2b2lkKQogc3RhdGljIHZvaWQKIHBnc3Nfc2htZW1fcmVx dWVzdCh2b2lkKQogeworCUhBU0hDVEwJCWluZm87CisKIAlpZiAocHJldl9zaG1lbV9yZXF1ZXN0 X2hvb2spCiAJCXByZXZfc2htZW1fcmVxdWVzdF9ob29rKCk7CiAKLQlSZXF1ZXN0QWRkaW5TaG1l bVNwYWNlKHBnc3NfbWVtc2l6ZSgpKTsKIAlSZXF1ZXN0TmFtZWRMV0xvY2tUcmFuY2hlKCJwZ19z dGF0X3N0YXRlbWVudHMiLCAxKTsKKworCS8qCisJICogUmVnaXN0ZXIgb3VyIHNoYXJlZCBtZW1v cnkgc3RhdGUsIGluY2x1ZGluZyBoYXNoIHRhYmxlCisJICovCisJU2htZW1SZWdpc3RlclN0cnVj dCgmcGdzc1NoYXJlZFN0YXRlU2htZW1EZXNjKTsKKworCWluZm8ua2V5c2l6ZSA9IHNpemVvZihw Z3NzSGFzaEtleSk7CisJaW5mby5lbnRyeXNpemUgPSBzaXplb2YocGdzc0VudHJ5KTsKKwlwZ3Nz U2hhcmVkSGFzaERlc2MuaW5pdF9zaXplID0gcGdzc19tYXg7CisJcGdzc1NoYXJlZEhhc2hEZXNj Lm1heF9zaXplID0gcGdzc19tYXg7CisJU2htZW1SZWdpc3Rlckhhc2goJnBnc3NTaGFyZWRIYXNo RGVzYywKKwkJCQkJICAmaW5mbywKKwkJCQkJICBIQVNIX0VMRU0gfCBIQVNIX0JMT0JTKTsKK30K Kworc3RhdGljIHZvaWQKK3Bnc3Nfc2htZW1faW5pdCh2b2lkICphcmcpCit7CisJcGdzcy0+bG9j ayA9ICYoR2V0TmFtZWRMV0xvY2tUcmFuY2hlKCJwZ19zdGF0X3N0YXRlbWVudHMiKSktPmxvY2s7 CisJcGdzcy0+Y3VyX21lZGlhbl91c2FnZSA9IEFTU1VNRURfTUVESUFOX0lOSVQ7CisJcGdzcy0+ bWVhbl9xdWVyeV9sZW4gPSBBU1NVTUVEX0xFTkdUSF9JTklUOworCVNwaW5Mb2NrSW5pdCgmcGdz cy0+bXV0ZXgpOworCXBnc3MtPmV4dGVudCA9IDA7CisJcGdzcy0+bl93cml0ZXJzID0gMDsKKwlw Z3NzLT5nY19jb3VudCA9IDA7CisJcGdzcy0+c3RhdHMuZGVhbGxvYyA9IDA7CisJcGdzcy0+c3Rh dHMuc3RhdHNfcmVzZXQgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CiB9CiAKIC8qCkBAIC01MTYs OCArNTU4LDYgQEAgcGdzc19zaG1lbV9yZXF1ZXN0KHZvaWQpCiBzdGF0aWMgdm9pZAogcGdzc19z aG1lbV9zdGFydHVwKHZvaWQpCiB7Ci0JYm9vbAkJZm91bmQ7Ci0JSEFTSENUTAkJaW5mbzsKIAlG SUxFCSAgICpmaWxlID0gTlVMTDsKIAlGSUxFCSAgICpxZmlsZSA9IE5VTEw7CiAJdWludDMyCQlo ZWFkZXI7CkBAIC01MzAsNDIgKzU3MCw2IEBAIHBnc3Nfc2htZW1fc3RhcnR1cCh2b2lkKQogCWlm IChwcmV2X3NobWVtX3N0YXJ0dXBfaG9vaykKIAkJcHJldl9zaG1lbV9zdGFydHVwX2hvb2soKTsK IAotCS8qIHJlc2V0IGluIGNhc2UgdGhpcyBpcyBhIHJlc3RhcnQgd2l0aGluIHRoZSBwb3N0bWFz dGVyICovCi0JcGdzcyA9IE5VTEw7Ci0JcGdzc19oYXNoID0gTlVMTDsKLQotCS8qCi0JICogQ3Jl YXRlIG9yIGF0dGFjaCB0byB0aGUgc2hhcmVkIG1lbW9yeSBzdGF0ZSwgaW5jbHVkaW5nIGhhc2gg dGFibGUKLQkgKi8KLQlMV0xvY2tBY3F1aXJlKEFkZGluU2htZW1Jbml0TG9jaywgTFdfRVhDTFVT SVZFKTsKLQotCXBnc3MgPSBTaG1lbUluaXRTdHJ1Y3QoInBnX3N0YXRfc3RhdGVtZW50cyIsCi0J CQkJCQkgICBzaXplb2YocGdzc1NoYXJlZFN0YXRlKSwKLQkJCQkJCSAgICZmb3VuZCk7Ci0KLQlp ZiAoIWZvdW5kKQotCXsKLQkJLyogRmlyc3QgdGltZSB0aHJvdWdoIC4uLiAqLwotCQlwZ3NzLT5s b2NrID0gJihHZXROYW1lZExXTG9ja1RyYW5jaGUoInBnX3N0YXRfc3RhdGVtZW50cyIpKS0+bG9j azsKLQkJcGdzcy0+Y3VyX21lZGlhbl91c2FnZSA9IEFTU1VNRURfTUVESUFOX0lOSVQ7Ci0JCXBn c3MtPm1lYW5fcXVlcnlfbGVuID0gQVNTVU1FRF9MRU5HVEhfSU5JVDsKLQkJU3BpbkxvY2tJbml0 KCZwZ3NzLT5tdXRleCk7Ci0JCXBnc3MtPmV4dGVudCA9IDA7Ci0JCXBnc3MtPm5fd3JpdGVycyA9 IDA7Ci0JCXBnc3MtPmdjX2NvdW50ID0gMDsKLQkJcGdzcy0+c3RhdHMuZGVhbGxvYyA9IDA7Ci0J CXBnc3MtPnN0YXRzLnN0YXRzX3Jlc2V0ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwotCX0KLQot CWluZm8ua2V5c2l6ZSA9IHNpemVvZihwZ3NzSGFzaEtleSk7Ci0JaW5mby5lbnRyeXNpemUgPSBz aXplb2YocGdzc0VudHJ5KTsKLQlwZ3NzX2hhc2ggPSBTaG1lbUluaXRIYXNoKCJwZ19zdGF0X3N0 YXRlbWVudHMgaGFzaCIsCi0JCQkJCQkJICBwZ3NzX21heCwgcGdzc19tYXgsCi0JCQkJCQkJICAm aW5mbywKLQkJCQkJCQkgIEhBU0hfRUxFTSB8IEhBU0hfQkxPQlMpOwotCi0JTFdMb2NrUmVsZWFz ZShBZGRpblNobWVtSW5pdExvY2spOwotCiAJLyoKIAkgKiBJZiB3ZSdyZSBpbiB0aGUgcG9zdG1h c3RlciAob3IgYSBzdGFuZGFsb25lIGJhY2tlbmQuLi4pLCBzZXQgdXAgYSBzaG1lbQogCSAqIGV4 aXQgaG9vayB0byBkdW1wIHRoZSBzdGF0aXN0aWNzIHRvIGRpc2suCkBAIC01NzMsMTIgKzU3Nyw2 IEBAIHBnc3Nfc2htZW1fc3RhcnR1cCh2b2lkKQogCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCiAJ CW9uX3NobWVtX2V4aXQocGdzc19zaG1lbV9zaHV0ZG93biwgKERhdHVtKSAwKTsKIAotCS8qCi0J ICogRG9uZSBpZiBzb21lIG90aGVyIHByb2Nlc3MgYWxyZWFkeSBjb21wbGV0ZWQgb3VyIGluaXRp YWxpemF0aW9uLgotCSAqLwotCWlmIChmb3VuZCkKLQkJcmV0dXJuOwotCiAJLyoKIAkgKiBOb3Rl OiB3ZSBkb24ndCBib3RoZXIgd2l0aCBsb2NrcyBoZXJlLCBiZWNhdXNlIHRoZXJlIHNob3VsZCBi ZSBubyBvdGhlcgogCSAqIHByb2Nlc3NlcyBydW5uaW5nIHdoZW4gdGhpcyBjb2RlIGlzIHJlYWNo ZWQuCkBAIC0yMDgyLDIwICsyMDgwLDYgQEAgcGdfc3RhdF9zdGF0ZW1lbnRzX2luZm8oUEdfRlVO Q1RJT05fQVJHUykKIAlQR19SRVRVUk5fREFUVU0oSGVhcFR1cGxlR2V0RGF0dW0oaGVhcF9mb3Jt X3R1cGxlKHR1cGRlc2MsIHZhbHVlcywgbnVsbHMpKSk7CiB9CiAKLS8qCi0gKiBFc3RpbWF0ZSBz aGFyZWQgbWVtb3J5IHNwYWNlIG5lZWRlZC4KLSAqLwotc3RhdGljIFNpemUKLXBnc3NfbWVtc2l6 ZSh2b2lkKQotewotCVNpemUJCXNpemU7Ci0KLQlzaXplID0gTUFYQUxJR04oc2l6ZW9mKHBnc3NT aGFyZWRTdGF0ZSkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBoYXNoX2VzdGltYXRlX3NpemUo cGdzc19tYXgsIHNpemVvZihwZ3NzRW50cnkpKSk7Ci0KLQlyZXR1cm4gc2l6ZTsKLX0KLQogLyoK ICAqIEFsbG9jYXRlIGEgbmV3IGhhc2h0YWJsZSBlbnRyeS4KICAqIGNhbGxlciBtdXN0IGhvbGQg YW4gZXhjbHVzaXZlIGxvY2sgb24gcGdzcy0+bG9jawpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vdmFyc3VwLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS92YXJz dXAuYwppbmRleCAzZTk1ZDRjZmQxNi4uMTFhZDkwZTczNzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3ZhcnN1cC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3ZhcnN1cC5jCkBAIC0zMCwzNSArMzAsMjcgQEAKIC8qIE51bWJlciBvZiBPSURzIHRvIHBy ZWZldGNoIChwcmVhbGxvY2F0ZSkgcGVyIFhMT0cgd3JpdGUgKi8KICNkZWZpbmUgVkFSX09JRF9Q UkVGRVRDSAkJODE5MgogCi0vKiBwb2ludGVyIHRvIHZhcmlhYmxlcyBzdHJ1Y3QgaW4gc2hhcmVk IG1lbW9yeSAqLwotVHJhbnNhbVZhcmlhYmxlc0RhdGEgKlRyYW5zYW1WYXJpYWJsZXMgPSBOVUxM Oworc3RhdGljIHZvaWQgVmFyc3VwU2htZW1Jbml0KHZvaWQgKmFyZyk7CiAKK1NobWVtU3RydWN0 RGVzYyBUcmFuc2FtVmFyaWFibGVzU2htZW1EZXNjID0geworCS5uYW1lID0gIlRyYW5zYW1WYXJp YWJsZXMiLAorCS5zaXplID0gc2l6ZW9mKFRyYW5zYW1WYXJpYWJsZXNEYXRhKSwKKwkuaW5pdF9m biA9IFZhcnN1cFNobWVtSW5pdCwKK307CiAKIC8qCiAgKiBJbml0aWFsaXphdGlvbiBvZiBzaGFy ZWQgbWVtb3J5IGZvciBUcmFuc2FtVmFyaWFibGVzLgogICovCi1TaXplCi1WYXJzdXBTaG1lbVNp emUodm9pZCkKK3ZvaWQKK1ZhcnN1cFNobWVtUmVnaXN0ZXIodm9pZCkKIHsKLQlyZXR1cm4gc2l6 ZW9mKFRyYW5zYW1WYXJpYWJsZXNEYXRhKTsKKwlTaG1lbVJlZ2lzdGVyU3RydWN0KCZUcmFuc2Ft VmFyaWFibGVzU2htZW1EZXNjKTsKIH0KIAotdm9pZAotVmFyc3VwU2htZW1Jbml0KHZvaWQpCitz dGF0aWMgdm9pZAorVmFyc3VwU2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQlib29sCQlmb3VuZDsK LQotCS8qIEluaXRpYWxpemUgb3VyIHNoYXJlZCBzdGF0ZSBzdHJ1Y3QgKi8KLQlUcmFuc2FtVmFy aWFibGVzID0gU2htZW1Jbml0U3RydWN0KCJUcmFuc2FtVmFyaWFibGVzIiwKLQkJCQkJCQkJCSAg IHNpemVvZihUcmFuc2FtVmFyaWFibGVzRGF0YSksCi0JCQkJCQkJCQkgICAmZm91bmQpOwotCWlm ICghSXNVbmRlclBvc3RtYXN0ZXIpCi0JewotCQlBc3NlcnQoIWZvdW5kKTsKLQkJbWVtc2V0KFRy YW5zYW1WYXJpYWJsZXMsIDAsIHNpemVvZihUcmFuc2FtVmFyaWFibGVzRGF0YSkpOwotCX0KLQll bHNlCi0JCUFzc2VydChmb3VuZCk7CisJbWVtc2V0KFRyYW5zYW1WYXJpYWJsZXMsIDAsIHNpemVv ZihUcmFuc2FtVmFyaWFibGVzRGF0YSkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jIGIvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJh cC5jCmluZGV4IDdkMzJjZDBlMTU5Li4wZGVkNzAxOGU4NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jCisrKyBiL3NyYy9iYWNrZW5kL2Jvb3RzdHJhcC9ib290 c3RyYXAuYwpAQCAtMzM3LDYgKzMzNyw4IEBAIEJvb3RzdHJhcE1vZGVNYWluKGludCBhcmdjLCBj aGFyICphcmd2W10sIGJvb2wgY2hlY2tfb25seSkKIAogCUluaXRpYWxpemVGYXN0UGF0aExvY2tz KCk7CiAKKwlSZWdpc3RlclNobWVtU3RydWN0cygpOworCiAJQ3JlYXRlU2hhcmVkTWVtb3J5QW5k U2VtYXBob3JlcygpOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv bGF1bmNoX2JhY2tlbmQuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQu YwppbmRleCA5MjZmZDZmMjcwMC4uOGY2MzgxMThjZGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L2xhdW5jaF9iYWNrZW5kLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJyZXBsaWNhdGlv bi93YWxyZWNlaXZlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZHNtLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9pb193b3JrZXIuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvcGdfc2htZW0uaCIKICNpbmNsdWRlICJ0Y29wL2JhY2tlbmRfc3RhcnR1cC5oIgogI2lu Y2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCkBAIC0xMDQsMTIgKzEwNSwxMCBAQCB0eXBlZGVmIHN0 cnVjdAogCWNoYXIJICAqKkxXTG9ja1RyYW5jaGVOYW1lczsKIAlpbnQJCSAgICpMV0xvY2tDb3Vu dGVyOwogCUxXTG9ja1BhZGRlZCAqTWFpbkxXTG9ja0FycmF5OwotCXNsb2NrX3QgICAgKlByb2NT dHJ1Y3RMb2NrOwogCVBST0NfSERSICAgKlByb2NHbG9iYWw7CiAJUEdQUk9DCSAgICpBdXhpbGlh cnlQcm9jczsKIAlQR1BST0MJICAgKlByZXBhcmVkWGFjdFByb2NzOwogCXZvbGF0aWxlIFBNU2ln bmFsRGF0YSAqUE1TaWduYWxTdGF0ZTsKLQlQcm9jU2lnbmFsSGVhZGVyICpQcm9jU2lnbmFsOwog CXBpZF90CQlQb3N0bWFzdGVyUGlkOwogCVRpbWVzdGFtcFR6IFBnU3RhcnRUaW1lOwogCVRpbWVz dGFtcFR6IFBnUmVsb2FkVGltZTsKQEAgLTY3OCw4ICs2NzcsMTIgQEAgU3ViUG9zdG1hc3Rlck1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCS8qIFJlc3RvcmUgYmFzaWMgc2hhcmVkIG1l bW9yeSBwb2ludGVycyAqLwogCWlmIChVc2VkU2htZW1TZWdBZGRyICE9IE5VTEwpCisJewogCQlJ bml0U2htZW1BbGxvY2F0b3IoVXNlZFNobWVtU2VnQWRkcik7CiAKKwkJUmVnaXN0ZXJTaG1lbVN0 cnVjdHMoKTsKKwl9CisKIAkvKgogCSAqIFJ1biB0aGUgYXBwcm9wcmlhdGUgTWFpbiBmdW5jdGlv bgogCSAqLwpAQCAtNzM1LDEyICs3MzgsMTAgQEAgc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNr ZW5kUGFyYW1ldGVycyAqcGFyYW0sCiAJcGFyYW0tPkxXTG9ja1RyYW5jaGVOYW1lcyA9IExXTG9j a1RyYW5jaGVOYW1lczsKIAlwYXJhbS0+TFdMb2NrQ291bnRlciA9IExXTG9ja0NvdW50ZXI7CiAJ cGFyYW0tPk1haW5MV0xvY2tBcnJheSA9IE1haW5MV0xvY2tBcnJheTsKLQlwYXJhbS0+UHJvY1N0 cnVjdExvY2sgPSBQcm9jU3RydWN0TG9jazsKIAlwYXJhbS0+UHJvY0dsb2JhbCA9IFByb2NHbG9i YWw7CiAJcGFyYW0tPkF1eGlsaWFyeVByb2NzID0gQXV4aWxpYXJ5UHJvY3M7CiAJcGFyYW0tPlBy ZXBhcmVkWGFjdFByb2NzID0gUHJlcGFyZWRYYWN0UHJvY3M7CiAJcGFyYW0tPlBNU2lnbmFsU3Rh dGUgPSBQTVNpZ25hbFN0YXRlOwotCXBhcmFtLT5Qcm9jU2lnbmFsID0gUHJvY1NpZ25hbDsKIAog CXBhcmFtLT5Qb3N0bWFzdGVyUGlkID0gUG9zdG1hc3RlclBpZDsKIAlwYXJhbS0+UGdTdGFydFRp bWUgPSBQZ1N0YXJ0VGltZTsKQEAgLTk5NSwxMiArOTk2LDEwIEBAIHJlc3RvcmVfYmFja2VuZF92 YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtKQogCUxXTG9ja1RyYW5jaGVOYW1lcyA9 IHBhcmFtLT5MV0xvY2tUcmFuY2hlTmFtZXM7CiAJTFdMb2NrQ291bnRlciA9IHBhcmFtLT5MV0xv Y2tDb3VudGVyOwogCU1haW5MV0xvY2tBcnJheSA9IHBhcmFtLT5NYWluTFdMb2NrQXJyYXk7Ci0J UHJvY1N0cnVjdExvY2sgPSBwYXJhbS0+UHJvY1N0cnVjdExvY2s7CiAJUHJvY0dsb2JhbCA9IHBh cmFtLT5Qcm9jR2xvYmFsOwogCUF1eGlsaWFyeVByb2NzID0gcGFyYW0tPkF1eGlsaWFyeVByb2Nz OwogCVByZXBhcmVkWGFjdFByb2NzID0gcGFyYW0tPlByZXBhcmVkWGFjdFByb2NzOwogCVBNU2ln bmFsU3RhdGUgPSBwYXJhbS0+UE1TaWduYWxTdGF0ZTsKLQlQcm9jU2lnbmFsID0gcGFyYW0tPlBy b2NTaWduYWw7CiAKIAlQb3N0bWFzdGVyUGlkID0gcGFyYW0tPlBvc3RtYXN0ZXJQaWQ7CiAJUGdT dGFydFRpbWUgPSBwYXJhbS0+UGdTdGFydFRpbWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rl ci5jCmluZGV4IGQ2MTMzYmZlYmM2Li5mNmQzMzY5ZjkxNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9w b3N0bWFzdGVyLmMKQEAgLTk2OCw2ICs5NjgsOCBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQogCSAqIHNoYXJlZCBtZW1vcnksIGRldGVybWluZSB0aGUgdmFsdWUgb2Yg YW55IHJ1bnRpbWUtY29tcHV0ZWQgR1VDcyB0aGF0CiAJICogZGVwZW5kIG9uIHRoZSBhbW91bnQg b2Ygc2hhcmVkIG1lbW9yeSByZXF1aXJlZC4KIAkgKi8KKwlSZWdpc3RlclNobWVtU3RydWN0cygp OworCiAJSW5pdGlhbGl6ZVNobWVtR1VDcygpOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL2RzbS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtLmMKaW5k ZXggNmE1YjE2MzkyZjcuLjU1ZjQ2Yzc2ODdlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9kc20uYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc20uYwpAQCAtMTA4 LDcgKzEwOCwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfbWFpbl9yZWdpb25fZHNtX2hhbmRs ZShkc21faGFuZGxlIGhhbmRsZSk7CiBzdGF0aWMgYm9vbCBkc21faW5pdF9kb25lID0gZmFsc2U7 CiAKIC8qIFByZWFsbG9jYXRlZCBEU00gc3BhY2UgaW4gdGhlIG1haW4gc2hhcmVkIG1lbW9yeSBy ZWdpb24uICovCi1zdGF0aWMgdm9pZCAqZHNtX21haW5fc3BhY2VfYmVnaW4gPSBOVUxMOworc3Rh dGljIHZvaWQgZHNtX21haW5fc3BhY2VfaW5pdCh2b2lkICopOworCitzdGF0aWMgU2htZW1TdHJ1 Y3REZXNjIGRzbV9tYWluX3NwYWNlX3NobWVtX2Rlc2MgPSB7CisJLm5hbWUgPSAiUHJlYWxsb2Nh dGVkIERTTSIsCisJLnNpemUgPSAwLCAvKiBkeW5hbWljICovCisJLmluaXRfZm4gPSBkc21fbWFp bl9zcGFjZV9pbml0LAorfTsKKworI2RlZmluZSBkc21fbWFpbl9zcGFjZV9iZWdpbiAoZHNtX21h aW5fc3BhY2Vfc2htZW1fZGVzYy5wdHIpCiAKIC8qCiAgKiBMaXN0IG9mIGR5bmFtaWMgc2hhcmVk IG1lbW9yeSBzZWdtZW50cyB1c2VkIGJ5IHRoaXMgYmFja2VuZC4KQEAgLTQ3OSwyNyArNDg3LDI5 IEBAIHZvaWQKIGRzbV9zaG1lbV9pbml0KHZvaWQpCiB7CiAJc2l6ZV90CQlzaXplID0gZHNtX2Vz dGltYXRlX3NpemUoKTsKLQlib29sCQlmb3VuZDsKIAogCWlmIChzaXplID09IDApCiAJCXJldHVy bjsKIAotCWRzbV9tYWluX3NwYWNlX2JlZ2luID0gU2htZW1Jbml0U3RydWN0KCJQcmVhbGxvY2F0 ZWQgRFNNIiwgc2l6ZSwgJmZvdW5kKTsKLQlpZiAoIWZvdW5kKQotCXsKLQkJRnJlZVBhZ2VNYW5h Z2VyICpmcG0gPSAoRnJlZVBhZ2VNYW5hZ2VyICopIGRzbV9tYWluX3NwYWNlX2JlZ2luOwotCQlz aXplX3QJCWZpcnN0X3BhZ2UgPSAwOwotCQlzaXplX3QJCXBhZ2VzOwotCi0JCS8qIFJlc2VydmUg c3BhY2UgZm9yIHRoZSBGcmVlUGFnZU1hbmFnZXIuICovCi0JCXdoaWxlIChmaXJzdF9wYWdlICog RlBNX1BBR0VfU0laRSA8IHNpemVvZihGcmVlUGFnZU1hbmFnZXIpKQotCQkJKytmaXJzdF9wYWdl OwotCi0JCS8qIEluaXRpYWxpemUgaXQgYW5kIGdpdmUgaXQgYWxsIHRoZSByZXN0IG9mIHRoZSBz cGFjZS4gKi8KLQkJRnJlZVBhZ2VNYW5hZ2VySW5pdGlhbGl6ZShmcG0sIGRzbV9tYWluX3NwYWNl X2JlZ2luKTsKLQkJcGFnZXMgPSAoc2l6ZSAvIEZQTV9QQUdFX1NJWkUpIC0gZmlyc3RfcGFnZTsK LQkJRnJlZVBhZ2VNYW5hZ2VyUHV0KGZwbSwgZmlyc3RfcGFnZSwgcGFnZXMpOwotCX0KKwlTaG1l bVJlZ2lzdGVyU3RydWN0KCZkc21fbWFpbl9zcGFjZV9zaG1lbV9kZXNjKTsKK30KKworc3RhdGlj IHZvaWQKK2RzbV9tYWluX3NwYWNlX2luaXQodm9pZCAqYXJnKQoreworCXNpemVfdAkJc2l6ZSA9 IGRzbV9tYWluX3NwYWNlX3NobWVtX2Rlc2Muc2l6ZTsKKwlGcmVlUGFnZU1hbmFnZXIgKmZwbSA9 IChGcmVlUGFnZU1hbmFnZXIgKikgZHNtX21haW5fc3BhY2VfYmVnaW47CisJc2l6ZV90CQlmaXJz dF9wYWdlID0gMDsKKwlzaXplX3QJCXBhZ2VzOworCisJLyogUmVzZXJ2ZSBzcGFjZSBmb3IgdGhl IEZyZWVQYWdlTWFuYWdlci4gKi8KKwl3aGlsZSAoZmlyc3RfcGFnZSAqIEZQTV9QQUdFX1NJWkUg PCBzaXplb2YoRnJlZVBhZ2VNYW5hZ2VyKSkKKwkJKytmaXJzdF9wYWdlOworCisJLyogSW5pdGlh bGl6ZSBpdCBhbmQgZ2l2ZSBpdCBhbGwgdGhlIHJlc3Qgb2YgdGhlIHNwYWNlLiAqLworCUZyZWVQ YWdlTWFuYWdlckluaXRpYWxpemUoZnBtLCBkc21fbWFpbl9zcGFjZV9iZWdpbik7CisJcGFnZXMg PSAoc2l6ZSAvIEZQTV9QQUdFX1NJWkUpIC0gZmlyc3RfcGFnZTsKKwlGcmVlUGFnZU1hbmFnZXJQ dXQoZnBtLCBmaXJzdF9wYWdlLCBwYWdlcyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9kc21fcmVnaXN0cnkuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L2RzbV9yZWdpc3RyeS5jCmluZGV4IDA2OGMxNTc3YjEyLi44ODJhZjgzYjdiMiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX3JlZ2lzdHJ5LmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvZHNtX3JlZ2lzdHJ5LmMKQEAgLTU0LDcgKzU0LDE1IEBAIHR5cGVkZWYg c3RydWN0IERTTVJlZ2lzdHJ5Q3R4U3RydWN0CiAJZHNoYXNoX3RhYmxlX2hhbmRsZSBkc2hoOwog fSBEU01SZWdpc3RyeUN0eFN0cnVjdDsKIAotc3RhdGljIERTTVJlZ2lzdHJ5Q3R4U3RydWN0ICpE U01SZWdpc3RyeUN0eDsKK3N0YXRpYyB2b2lkIERTTVJlZ2lzdHJ5Q3R4U2htZW1Jbml0KHZvaWQg KmFyZyk7CisKK3N0YXRpYyBTaG1lbVN0cnVjdERlc2MgRFNNUmVnaXN0cnlDdHhTaG1lbURlc2Mg PSB7CisJLm5hbWUgPSAiRFNNIFJlZ2lzdHJ5IERhdGEiLAorCS5zaXplID0gc2l6ZW9mKERTTVJl Z2lzdHJ5Q3R4U3RydWN0KSwKKwkuaW5pdF9mbiA9IERTTVJlZ2lzdHJ5Q3R4U2htZW1Jbml0LAor fTsKKworI2RlZmluZSBEU01SZWdpc3RyeUN0eCAoKERTTVJlZ2lzdHJ5Q3R4U3RydWN0ICopIERT TVJlZ2lzdHJ5Q3R4U2htZW1EZXNjLnB0cikKIAogdHlwZWRlZiBzdHJ1Y3QgTmFtZWREU01TdGF0 ZQogewpAQCAtMTEzLDI3ICsxMjEsMTcgQEAgc3RhdGljIGNvbnN0IGRzaGFzaF9wYXJhbWV0ZXJz IGRzaF9wYXJhbXMgPSB7CiBzdGF0aWMgZHNhX2FyZWEgKmRzbV9yZWdpc3RyeV9kc2E7CiBzdGF0 aWMgZHNoYXNoX3RhYmxlICpkc21fcmVnaXN0cnlfdGFibGU7CiAKLVNpemUKLURTTVJlZ2lzdHJ5 U2htZW1TaXplKHZvaWQpCit2b2lkCitEU01SZWdpc3RyeVNobWVtUmVnaXN0ZXIodm9pZCkKIHsK LQlyZXR1cm4gTUFYQUxJR04oc2l6ZW9mKERTTVJlZ2lzdHJ5Q3R4U3RydWN0KSk7CisJU2htZW1S ZWdpc3RlclN0cnVjdCgmRFNNUmVnaXN0cnlDdHhTaG1lbURlc2MpOwogfQogCi12b2lkCi1EU01S ZWdpc3RyeVNobWVtSW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK0RTTVJlZ2lzdHJ5Q3R4U2htZW1J bml0KHZvaWQgKikKIHsKLQlib29sCQlmb3VuZDsKLQotCURTTVJlZ2lzdHJ5Q3R4ID0gKERTTVJl Z2lzdHJ5Q3R4U3RydWN0ICopCi0JCVNobWVtSW5pdFN0cnVjdCgiRFNNIFJlZ2lzdHJ5IERhdGEi LAotCQkJCQkJRFNNUmVnaXN0cnlTaG1lbVNpemUoKSwKLQkJCQkJCSZmb3VuZCk7Ci0KLQlpZiAo IWZvdW5kKQotCXsKLQkJRFNNUmVnaXN0cnlDdHgtPmRzYWggPSBEU0FfSEFORExFX0lOVkFMSUQ7 Ci0JCURTTVJlZ2lzdHJ5Q3R4LT5kc2hoID0gRFNIQVNIX0hBTkRMRV9JTlZBTElEOwotCX0KKwlE U01SZWdpc3RyeUN0eC0+ZHNhaCA9IERTQV9IQU5ETEVfSU5WQUxJRDsKKwlEU01SZWdpc3RyeUN0 eC0+ZHNoaCA9IERTSEFTSF9IQU5ETEVfSU5WQUxJRDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lw Y2kuYwppbmRleCAxZjdlOTMzZDUwMC4uOTUyOTg4NjQ1ZDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNp LmMKQEAgLTEwMSwxMyArMTAxLDE0IEBAIENhbGN1bGF0ZVNobWVtU2l6ZSh2b2lkKQogCXNpemUg PSBhZGRfc2l6ZShzaXplLCBoYXNoX2VzdGltYXRlX3NpemUoU0hNRU1fSU5ERVhfU0laRSwKIAkJ CQkJCQkJCQkJIHNpemVvZihTaG1lbUluZGV4RW50KSkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBkc21fZXN0aW1hdGVfc2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgRFNNUmVnaXN0 cnlTaG1lbVNpemUoKSk7CisKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2htZW1SZWdpc3RlcmVk U2l6ZSgpKTsKKworCS8qIGxlZ2FjeSBzdWJzeXN0bWVzICovCiAJc2l6ZSA9IGFkZF9zaXplKHNp emUsIEJ1ZmZlck1hbmFnZXJTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIExv Y2tNYW5hZ2VyU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBQcmVkaWNhdGVM b2NrU2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBQcm9jR2xvYmFsU2htZW1T aXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBYTG9nUHJlZmV0Y2hTaG1lbVNpemUoKSk7 Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFZhcnN1cFNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRk X3NpemUoc2l6ZSwgWExPR1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgWExv Z1JlY292ZXJ5U2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBDTE9HU2htZW1T aXplKCkpOwpAQCAtMTE3LDExICsxMTgsNyBAQCBDYWxjdWxhdGVTaG1lbVNpemUodm9pZCkKIAlz aXplID0gYWRkX3NpemUoc2l6ZSwgQmFja2dyb3VuZFdvcmtlclNobWVtU2l6ZSgpKTsKIAlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgTXVsdGlYYWN0U2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBMV0xvY2tTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFByb2NB cnJheVNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgQmFja2VuZFN0YXR1c1No bWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2hhcmVkSW52YWxTaG1lbVNpemUo KSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFBNU2lnbmFsU2htZW1TaXplKCkpOwotCXNpemUg PSBhZGRfc2l6ZShzaXplLCBQcm9jU2lnbmFsU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBDaGVja3BvaW50ZXJTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUs IEF1dG9WYWN1dW1TaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFJlcGxpY2F0 aW9uU2xvdHNTaG1lbVNpemUoKSk7CkBAIC0yMTcsNiArMjE0LDEwIEBAIENyZWF0ZVNoYXJlZE1l bW9yeUFuZFNlbWFwaG9yZXModm9pZCkKIAkgKi8KIAlJbml0U2htZW1BbGxvY2F0b3Ioc2VnaGRy KTsKIAorCS8qIFJlc2VydmUgc3BhY2UgZm9yIHNlbWFwaG9yZXMuICovCisJaWYgKCFJc1VuZGVy UG9zdG1hc3RlcikKKwkJUEdSZXNlcnZlU2VtYXBob3JlcyhQcm9jR2xvYmFsU2VtYXMoKSk7CisK IAkvKiBJbml0aWFsaXplIHN1YnN5c3RlbXMgKi8KIAlDcmVhdGVPckF0dGFjaFNobWVtU3RydWN0 cygpOwogCkBAIC0yMzAsNiArMjMxLDE5IEBAIENyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9y ZXModm9pZCkKIAkJc2htZW1fc3RhcnR1cF9ob29rKCk7CiB9CiAKK3ZvaWQKK1JlZ2lzdGVyU2ht ZW1TdHJ1Y3RzKHZvaWQpCit7CisJRFNNUmVnaXN0cnlTaG1lbVJlZ2lzdGVyKCk7CisKKwlQcm9j R2xvYmFsU2htZW1SZWdpc3RlcigpOworCVZhcnN1cFNobWVtUmVnaXN0ZXIoKTsKKwlQcm9jQXJy YXlTaG1lbVJlZ2lzdGVyKCk7CisJU2hhcmVkSW52YWxTaG1lbVJlZ2lzdGVyKCk7CisJUE1TaWdu YWxTaG1lbVJlZ2lzdGVyKCk7CisJUHJvY1NpZ25hbFNobWVtUmVnaXN0ZXIoKTsKK30KKwogLyoK ICAqIEluaXRpYWxpemUgdmFyaW91cyBzdWJzeXN0ZW1zLCBzZXR0aW5nIHVwIHRoZWlyIGRhdGEg c3RydWN0dXJlcyBpbgogICogc2hhcmVkIG1lbW9yeS4KQEAgLTI1OSwxNCArMjczLDIzIEBAIENy ZWF0ZU9yQXR0YWNoU2htZW1TdHJ1Y3RzKHZvaWQpCiAJICovCiAJSW5pdFNobWVtSW5kZXgoKTsK IAorI2lmZGVmIEVYRUNfQkFDS0VORAorCWlmIChJc1VuZGVyUG9zdG1hc3RlcikKKwkJU2htZW1B dHRhY2hSZWdpc3RlcmVkKCk7CisJZWxzZQorI2VuZGlmCisJeworCQlTaG1lbUluaXRSZWdpc3Rl cmVkKCk7CisJfQorCiAJZHNtX3NobWVtX2luaXQoKTsKLQlEU01SZWdpc3RyeVNobWVtSW5pdCgp OworCS8vRFNNUmVnaXN0cnlTaG1lbUluaXQoKTsKIAogCS8qCiAJICogU2V0IHVwIHhsb2csIGNs b2csIGFuZCBidWZmZXJzCiAJICovCi0JVmFyc3VwU2htZW1Jbml0KCk7CiAJWExPR1NobWVtSW5p dCgpOworCiAJWExvZ1ByZWZldGNoU2htZW1Jbml0KCk7CiAJWExvZ1JlY292ZXJ5U2htZW1Jbml0 KCk7CiAJQ0xPR1NobWVtSW5pdCgpOwpAQCAtMjg4LDIzICszMTEsMTMgQEAgQ3JlYXRlT3JBdHRh Y2hTaG1lbVN0cnVjdHModm9pZCkKIAkvKgogCSAqIFNldCB1cCBwcm9jZXNzIHRhYmxlCiAJICov Ci0JaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKLQkJSW5pdFByb2NHbG9iYWwoKTsKLQlQcm9jQXJy YXlTaG1lbUluaXQoKTsKIAlCYWNrZW5kU3RhdHVzU2htZW1Jbml0KCk7CiAJVHdvUGhhc2VTaG1l bUluaXQoKTsKIAlCYWNrZ3JvdW5kV29ya2VyU2htZW1Jbml0KCk7CiAKLQkvKgotCSAqIFNldCB1 cCBzaGFyZWQtaW52YWwgbWVzc2FnaW5nCi0JICovCi0JU2hhcmVkSW52YWxTaG1lbUluaXQoKTsK LQogCS8qCiAJICogU2V0IHVwIGludGVycHJvY2VzcyBzaWduYWxpbmcgbWVjaGFuaXNtcwogCSAq LwotCVBNU2lnbmFsU2htZW1Jbml0KCk7Ci0JUHJvY1NpZ25hbFNobWVtSW5pdCgpOwogCUNoZWNr cG9pbnRlclNobWVtSW5pdCgpOwogCUF1dG9WYWN1dW1TaG1lbUluaXQoKTsKIAlSZXBsaWNhdGlv blNsb3RzU2htZW1Jbml0KCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9w bXNpZ25hbC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcG1zaWduYWwuYwppbmRleCA0NjE4 ODIwYjMzNy4uMjM3NTI1MDBkMTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3Btc2lnbmFsLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcG1zaWduYWwuYwpAQCAt ODAsOSArODAsMjQgQEAgc3RydWN0IFBNU2lnbmFsRGF0YQogCXNpZ19hdG9taWNfdCBQTUNoaWxk RmxhZ3NbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKIH07CiAKLS8qIFBNU2lnbmFsU3RhdGUgcG9p bnRlciBpcyB2YWxpZCBpbiBib3RoIHBvc3RtYXN0ZXIgYW5kIGNoaWxkIHByb2Nlc3NlcyAqLwor c3RhdGljIHZvaWQgUE1TaWduYWxTaG1lbUluaXQodm9pZCAqKTsKKworc3RhdGljIFNobWVtU3Ry dWN0RGVzYyBQTVNpZ25hbFNobWVtRGVzYyA9IHsKKwkubmFtZSA9ICJQTVNpZ25hbFN0YXRlIiwK Kwkuc2l6ZSA9IDAsIC8qIGR5bmFtaWMgKi8KKwkuaW5pdF9mbiA9IFBNU2lnbmFsU2htZW1Jbml0 LAorfTsKKworLyoKKyAqIFBNU2lnbmFsU3RhdGUgcG9pbnRlciBpcyB2YWxpZCBpbiBib3RoIHBv c3RtYXN0ZXIgYW5kIGNoaWxkIHByb2Nlc3NlcworICoKKyAqIFRoaXMgaXMgYSBzdGFuZC1hbG9u ZSB2YXJpYWJsZSByYXRoZXIgdGhhbiBqdXN0IGEgI2RlZmluZSBvdmVyCisgKiBQTVNpZ25hbFNo bWVtRGVzYy5wdHIgYmVjYXVzZSBpdCBpcyBuZWVkZWQgZWFybHkgYXQgYmFja2VuZCBzdGFydHVw IGFuZAorICogcGFzc2VkIGFzIGEgYmFja2VuZCBwYXJhbWV0ZXIgaW4gRVhFQ19CQUNLRU5EIG1v ZGUKKyAqLwogTk9OX0VYRUNfU1RBVElDIHZvbGF0aWxlIFBNU2lnbmFsRGF0YSAqUE1TaWduYWxT dGF0ZSA9IE5VTEw7CiAKKwogLyoKICAqIExvY2FsIGNvcHkgb2YgUE1TaWduYWxTdGF0ZS0+bnVt X2NoaWxkX2ZsYWdzLCBvbmx5IHZhbGlkIGluIHRoZQogICogcG9zdG1hc3Rlci4gIFBvc3RtYXN0 ZXIga2VlcHMgYSBsb2NhbCBjb3B5IHNvIHRoYXQgaXQgZG9lc24ndCBuZWVkIHRvCkBAIC0xMjMs MzkgKzEzOCwyOCBAQCBwb3N0bWFzdGVyX2RlYXRoX2hhbmRsZXIoU0lHTkFMX0FSR1MpCiBzdGF0 aWMgdm9pZCBNYXJrUG9zdG1hc3RlckNoaWxkSW5hY3RpdmUoaW50IGNvZGUsIERhdHVtIGFyZyk7 CiAKIC8qCi0gKiBQTVNpZ25hbFNobWVtU2l6ZQotICoJCUNvbXB1dGUgc3BhY2UgbmVlZGVkIGZv ciBwbXNpZ25hbC5jJ3Mgc2hhcmVkIG1lbW9yeQorICogUE1TaWduYWxTaG1lbVJlZ2lzdGVyIC0g UmVnaXN0ZXIgb3VyIHNoYXJlZCBtZW1vcnkKICAqLwotU2l6ZQotUE1TaWduYWxTaG1lbVNpemUo dm9pZCkKK3ZvaWQKK1BNU2lnbmFsU2htZW1SZWdpc3Rlcih2b2lkKQogewogCVNpemUJCXNpemU7 CiAKIAlzaXplID0gb2Zmc2V0b2YoUE1TaWduYWxEYXRhLCBQTUNoaWxkRmxhZ3MpOwogCXNpemUg PSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShNYXhMaXZlUG9zdG1hc3RlckNoaWxkcmVuKCksCiAJ CQkJCQkJCSAgIHNpemVvZihzaWdfYXRvbWljX3QpKSk7Ci0KLQlyZXR1cm4gc2l6ZTsKKwlQTVNp Z25hbFNobWVtRGVzYy5zaXplID0gc2l6ZTsKKwlTaG1lbVJlZ2lzdGVyU3RydWN0KCZQTVNpZ25h bFNobWVtRGVzYyk7CiB9CiAKLS8qCi0gKiBQTVNpZ25hbFNobWVtSW5pdCAtIGluaXRpYWxpemUg ZHVyaW5nIHNoYXJlZC1tZW1vcnkgY3JlYXRpb24KLSAqLwotdm9pZAotUE1TaWduYWxTaG1lbUlu aXQodm9pZCkKK3N0YXRpYyB2b2lkCitQTVNpZ25hbFNobWVtSW5pdCh2b2lkICphcmcpCiB7Ci0J Ym9vbAkJZm91bmQ7Ci0KLQlQTVNpZ25hbFN0YXRlID0gKFBNU2lnbmFsRGF0YSAqKQotCQlTaG1l bUluaXRTdHJ1Y3QoIlBNU2lnbmFsU3RhdGUiLCBQTVNpZ25hbFNobWVtU2l6ZSgpLCAmZm91bmQp OwotCi0JaWYgKCFmb3VuZCkKLQl7Ci0JCS8qIGluaXRpYWxpemUgYWxsIGZsYWdzIHRvIHplcm9l cyAqLwotCQlNZW1TZXQodW52b2xhdGl6ZShQTVNpZ25hbERhdGEgKiwgUE1TaWduYWxTdGF0ZSks IDAsIFBNU2lnbmFsU2htZW1TaXplKCkpOwotCQludW1fY2hpbGRfZmxhZ3MgPSBNYXhMaXZlUG9z dG1hc3RlckNoaWxkcmVuKCk7Ci0JCVBNU2lnbmFsU3RhdGUtPm51bV9jaGlsZF9mbGFncyA9IG51 bV9jaGlsZF9mbGFnczsKLQl9CisJLyogaW5pdGlhbGl6ZSBhbGwgZmxhZ3MgdG8gemVyb2VzICov CisJUE1TaWduYWxTdGF0ZSA9IFBNU2lnbmFsU2htZW1EZXNjLnB0cjsKKwlNZW1TZXQodW52b2xh dGl6ZShQTVNpZ25hbERhdGEgKiwgUE1TaWduYWxTdGF0ZSksIDAsIFBNU2lnbmFsU2htZW1EZXNj LnNpemUpOworCW51bV9jaGlsZF9mbGFncyA9IE1heExpdmVQb3N0bWFzdGVyQ2hpbGRyZW4oKTsK KwlQTVNpZ25hbFN0YXRlLT5udW1fY2hpbGRfZmxhZ3MgPSBudW1fY2hpbGRfZmxhZ3M7CiB9CiAK IC8qCkBAIC0yOTEsNiArMjk1LDcgQEAgUmVnaXN0ZXJQb3N0bWFzdGVyQ2hpbGRBY3RpdmUodm9p ZCkKIHsKIAlpbnQJCQlzbG90ID0gTXlQTUNoaWxkU2xvdDsKIAorCUFzc2VydChQTVNpZ25hbFN0 YXRlKTsKIAlBc3NlcnQoc2xvdCA+IDAgJiYgc2xvdCA8PSBQTVNpZ25hbFN0YXRlLT5udW1fY2hp bGRfZmxhZ3MpOwogCXNsb3QtLTsKIAlBc3NlcnQoUE1TaWduYWxTdGF0ZS0+UE1DaGlsZEZsYWdz W3Nsb3RdID09IFBNX0NISUxEX0FTU0lHTkVEKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3Byb2NhcnJheS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5 LmMKaW5kZXggMzAxZjU0ZmI1YTguLjA4YzYzYmNiMmE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9w cm9jYXJyYXkuYwpAQCAtMTAxLDYgKzEwMSwxOCBAQCB0eXBlZGVmIHN0cnVjdCBQcm9jQXJyYXlT dHJ1Y3QKIAlpbnQJCQlwZ3Byb2Nub3NbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKIH0gUHJvY0Fy cmF5U3RydWN0OwogCitzdGF0aWMgdm9pZCBQcm9jQXJyYXlTaG1lbUluaXQodm9pZCAqYXJnKTsK K3N0YXRpYyB2b2lkIFByb2NBcnJheVNobWVtQXR0YWNoKHZvaWQgKmFyZyk7CisKK3N0YXRpYyBT aG1lbVN0cnVjdERlc2MgUHJvY0FycmF5U2htZW1EZXNjID0geworCS5uYW1lID0gIlByb2MgQXJy YXkiLAorCS5zaXplID0gMCwgLyogZHluYW1pYyAqLworCS5pbml0X2ZuID0gUHJvY0FycmF5U2ht ZW1Jbml0LAorCS5hdHRhY2hfZm4gPSBQcm9jQXJyYXlTaG1lbUF0dGFjaCwKK307CisKKyNkZWZp bmUgcHJvY0FycmF5ICgoUHJvY0FycmF5U3RydWN0ICopIFByb2NBcnJheVNobWVtRGVzYy5wdHIp CisKIC8qCiAgKiBTdGF0ZSBmb3IgdGhlIEdsb2JhbFZpc1Rlc3QqIGZhbWlseSBvZiBmdW5jdGlv bnMuIFRob3NlIGZ1bmN0aW9ucyBjYW4KICAqIGUuZy4gYmUgdXNlZCB0byBkZWNpZGUgaWYgYSBk ZWxldGVkIHJvdyBjYW4gYmUgcmVtb3ZlZCB3aXRob3V0IHZpb2xhdGluZwpAQCAtMjY3LDkgKzI3 OSw2IEBAIHR5cGVkZWYgZW51bSBLQVhDb21wcmVzc1JlYXNvbgogCUtBWF9TVEFSVFVQX1BST0NF U1NfSURMRSwJLyogc3RhcnR1cCBwcm9jZXNzIGlzIGFib3V0IHRvIHNsZWVwICovCiB9IEtBWENv bXByZXNzUmVhc29uOwogCi0KLXN0YXRpYyBQcm9jQXJyYXlTdHJ1Y3QgKnByb2NBcnJheTsKLQog c3RhdGljIFBHUFJPQyAqYWxsUHJvY3M7CiAKIC8qCkBAIC0yODAsOCArMjg5LDIzIEBAIHN0YXRp YyBUcmFuc2FjdGlvbklkIGNhY2hlZFhpZElzTm90SW5Qcm9ncmVzcyA9IEludmFsaWRUcmFuc2Fj dGlvbklkOwogLyoKICAqIEJvb2trZWVwaW5nIGZvciB0cmFja2luZyBlbXVsYXRlZCB0cmFuc2Fj dGlvbnMgaW4gcmVjb3ZlcnkKICAqLwotc3RhdGljIFRyYW5zYWN0aW9uSWQgKktub3duQXNzaWdu ZWRYaWRzOwotc3RhdGljIGJvb2wgKktub3duQXNzaWduZWRYaWRzVmFsaWQ7CisKK3N0YXRpYyBT aG1lbVN0cnVjdERlc2MgS25vd25Bc3NpZ25lZFhpZHNTaG1lbURlc2MgPSB7CisJLm5hbWUgPSAi S25vd25Bc3NpZ25lZFhpZHMiLAorCS5zaXplID0gMCwgLyogZHluYW1pYyAqLworCS5pbml0X2Zu ID0gTlVMTCwKK307CisKKyNkZWZpbmUgS25vd25Bc3NpZ25lZFhpZHMgKChUcmFuc2FjdGlvbklk ICopIEtub3duQXNzaWduZWRYaWRzU2htZW1EZXNjLnB0cikKKworc3RhdGljIFNobWVtU3RydWN0 RGVzYyBLbm93bkFzc2lnbmVkWGlkc1ZhbGlkU2htZW1EZXNjID0geworCS5uYW1lID0gIktub3du QXNzaWduZWRYaWRzVmFsaWQiLAorCS5zaXplID0gMCwgLyogZHluYW1pYyAqLworCS5pbml0X2Zu ID0gTlVMTCwKK307CisKKyNkZWZpbmUgS25vd25Bc3NpZ25lZFhpZHNWYWxpZCAoKGJvb2wgKikg S25vd25Bc3NpZ25lZFhpZHNWYWxpZFNobWVtRGVzYy5wdHIpCisKIHN0YXRpYyBUcmFuc2FjdGlv bklkIGxhdGVzdE9ic2VydmVkWGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAKIC8qCkBAIC0z NzIsMTggKzM5NiwxOSBAQCBzdGF0aWMgaW5saW5lIEZ1bGxUcmFuc2FjdGlvbklkIEZ1bGxYaWRS ZWxhdGl2ZVRvKEZ1bGxUcmFuc2FjdGlvbklkIHJlbCwKIHN0YXRpYyB2b2lkIEdsb2JhbFZpc1Vw ZGF0ZUFwcGx5KENvbXB1dGVYaWRIb3Jpem9uc1Jlc3VsdCAqaG9yaXpvbnMpOwogCiAvKgotICog UmVwb3J0IHNoYXJlZC1tZW1vcnkgc3BhY2UgbmVlZGVkIGJ5IFByb2NBcnJheVNobWVtSW5pdAor ICogUmVnaXN0ZXIgdGhlIHNoYXJlZCBQR1BST0MgYXJyYXkgZHVyaW5nIHBvc3RtYXN0ZXIgc3Rh cnR1cC4KICAqLwotU2l6ZQotUHJvY0FycmF5U2htZW1TaXplKHZvaWQpCit2b2lkCitQcm9jQXJy YXlTaG1lbVJlZ2lzdGVyKHZvaWQpCiB7Ci0JU2l6ZQkJc2l6ZTsKLQotCS8qIFNpemUgb2YgdGhl IFByb2NBcnJheSBzdHJ1Y3R1cmUgaXRzZWxmICovCiAjZGVmaW5lIFBST0NBUlJBWV9NQVhQUk9D UwkoTWF4QmFja2VuZHMgKyBtYXhfcHJlcGFyZWRfeGFjdHMpCiAKLQlzaXplID0gb2Zmc2V0b2Yo UHJvY0FycmF5U3RydWN0LCBwZ3Byb2Nub3MpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxf c2l6ZShzaXplb2YoaW50KSwgUFJPQ0FSUkFZX01BWFBST0NTKSk7CisJLyogQ3JlYXRlIG9yIGF0 dGFjaCB0byB0aGUgUHJvY0FycmF5IHNoYXJlZCBzdHJ1Y3R1cmUgKi8KKwlQcm9jQXJyYXlTaG1l bURlc2Muc2l6ZSA9CisJCWFkZF9zaXplKG9mZnNldG9mKFByb2NBcnJheVN0cnVjdCwgcGdwcm9j bm9zKSwKKwkJCQkgbXVsX3NpemUoc2l6ZW9mKGludCksCisJCQkJCQkgIFBST0NBUlJBWV9NQVhQ Uk9DUykpOworCVNobWVtUmVnaXN0ZXJTdHJ1Y3QoJlByb2NBcnJheVNobWVtRGVzYyk7CiAKIAkv KgogCSAqIER1cmluZyBIb3QgU3RhbmRieSBwcm9jZXNzaW5nIHdlIGhhdmUgYSBkYXRhIHN0cnVj dHVyZSBjYWxsZWQKQEAgLTQwMyw2NCArNDI4LDM4IEBAIFByb2NBcnJheVNobWVtU2l6ZSh2b2lk KQogCiAJaWYgKEVuYWJsZUhvdFN0YW5kYnkpCiAJewotCQlzaXplID0gYWRkX3NpemUoc2l6ZSwK LQkJCQkJCW11bF9zaXplKHNpemVvZihUcmFuc2FjdGlvbklkKSwKLQkJCQkJCQkJIFRPVEFMX01B WF9DQUNIRURfU1VCWElEUykpOwotCQlzaXplID0gYWRkX3NpemUoc2l6ZSwKLQkJCQkJCW11bF9z aXplKHNpemVvZihib29sKSwgVE9UQUxfTUFYX0NBQ0hFRF9TVUJYSURTKSk7CisJCUtub3duQXNz aWduZWRYaWRzU2htZW1EZXNjLnNpemUgPQorCQkJbXVsX3NpemUoc2l6ZW9mKFRyYW5zYWN0aW9u SWQpLAorCQkJCQkgVE9UQUxfTUFYX0NBQ0hFRF9TVUJYSURTKTsKKwkJU2htZW1SZWdpc3RlclN0 cnVjdCgmS25vd25Bc3NpZ25lZFhpZHNTaG1lbURlc2MpOworCisJCUtub3duQXNzaWduZWRYaWRz VmFsaWRTaG1lbURlc2Muc2l6ZSA9CisJCQltdWxfc2l6ZShzaXplb2YoYm9vbCksIFRPVEFMX01B WF9DQUNIRURfU1VCWElEUyk7CisJCVNobWVtUmVnaXN0ZXJTdHJ1Y3QoJktub3duQXNzaWduZWRY aWRzVmFsaWRTaG1lbURlc2MpOwogCX0KLQotCXJldHVybiBzaXplOwogfQogCi0vKgotICogSW5p dGlhbGl6ZSB0aGUgc2hhcmVkIFBHUFJPQyBhcnJheSBkdXJpbmcgcG9zdG1hc3RlciBzdGFydHVw LgotICovCi12b2lkCi1Qcm9jQXJyYXlTaG1lbUluaXQodm9pZCkKK3N0YXRpYyB2b2lkCitQcm9j QXJyYXlTaG1lbUluaXQodm9pZCAqYXJnKQogewotCWJvb2wJCWZvdW5kOwotCi0JLyogQ3JlYXRl IG9yIGF0dGFjaCB0byB0aGUgUHJvY0FycmF5IHNoYXJlZCBzdHJ1Y3R1cmUgKi8KLQlwcm9jQXJy YXkgPSAoUHJvY0FycmF5U3RydWN0ICopCi0JCVNobWVtSW5pdFN0cnVjdCgiUHJvYyBBcnJheSIs Ci0JCQkJCQlhZGRfc2l6ZShvZmZzZXRvZihQcm9jQXJyYXlTdHJ1Y3QsIHBncHJvY25vcyksCi0J CQkJCQkJCSBtdWxfc2l6ZShzaXplb2YoaW50KSwKLQkJCQkJCQkJCQkgIFBST0NBUlJBWV9NQVhQ Uk9DUykpLAotCQkJCQkJJmZvdW5kKTsKLQotCWlmICghZm91bmQpCi0JewotCQkvKgotCQkgKiBX ZSdyZSB0aGUgZmlyc3QgLSBpbml0aWFsaXplLgotCQkgKi8KLQkJcHJvY0FycmF5LT5udW1Qcm9j cyA9IDA7Ci0JCXByb2NBcnJheS0+bWF4UHJvY3MgPSBQUk9DQVJSQVlfTUFYUFJPQ1M7Ci0JCXBy b2NBcnJheS0+bWF4S25vd25Bc3NpZ25lZFhpZHMgPSBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFM7 Ci0JCXByb2NBcnJheS0+bnVtS25vd25Bc3NpZ25lZFhpZHMgPSAwOwotCQlwcm9jQXJyYXktPnRh aWxLbm93bkFzc2lnbmVkWGlkcyA9IDA7Ci0JCXByb2NBcnJheS0+aGVhZEtub3duQXNzaWduZWRY aWRzID0gMDsKLQkJcHJvY0FycmF5LT5sYXN0T3ZlcmZsb3dlZFhpZCA9IEludmFsaWRUcmFuc2Fj dGlvbklkOwotCQlwcm9jQXJyYXktPnJlcGxpY2F0aW9uX3Nsb3RfeG1pbiA9IEludmFsaWRUcmFu c2FjdGlvbklkOwotCQlwcm9jQXJyYXktPnJlcGxpY2F0aW9uX3Nsb3RfY2F0YWxvZ194bWluID0g SW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JCVRyYW5zYW1WYXJpYWJsZXMtPnhhY3RDb21wbGV0aW9u Q291bnQgPSAxOwotCX0KKwlwcm9jQXJyYXktPm51bVByb2NzID0gMDsKKwlwcm9jQXJyYXktPm1h eFByb2NzID0gUFJPQ0FSUkFZX01BWFBST0NTOworCXByb2NBcnJheS0+bWF4S25vd25Bc3NpZ25l ZFhpZHMgPSBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFM7CisJcHJvY0FycmF5LT5udW1Lbm93bkFz c2lnbmVkWGlkcyA9IDA7CisJcHJvY0FycmF5LT50YWlsS25vd25Bc3NpZ25lZFhpZHMgPSAwOwor CXByb2NBcnJheS0+aGVhZEtub3duQXNzaWduZWRYaWRzID0gMDsKKwlwcm9jQXJyYXktPmxhc3RP dmVyZmxvd2VkWGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJcHJvY0FycmF5LT5yZXBsaWNh dGlvbl9zbG90X3htaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwlwcm9jQXJyYXktPnJlcGxp Y2F0aW9uX3Nsb3RfY2F0YWxvZ194bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJVHJhbnNh bVZhcmlhYmxlcy0+eGFjdENvbXBsZXRpb25Db3VudCA9IDE7CiAKIAlhbGxQcm9jcyA9IFByb2NH bG9iYWwtPmFsbFByb2NzOworfQogCi0JLyogQ3JlYXRlIG9yIGF0dGFjaCB0byB0aGUgS25vd25B c3NpZ25lZFhpZHMgYXJyYXlzIHRvbywgaWYgbmVlZGVkICovCi0JaWYgKEVuYWJsZUhvdFN0YW5k YnkpCi0JewotCQlLbm93bkFzc2lnbmVkWGlkcyA9IChUcmFuc2FjdGlvbklkICopCi0JCQlTaG1l bUluaXRTdHJ1Y3QoIktub3duQXNzaWduZWRYaWRzIiwKLQkJCQkJCQltdWxfc2l6ZShzaXplb2Yo VHJhbnNhY3Rpb25JZCksCi0JCQkJCQkJCQkgVE9UQUxfTUFYX0NBQ0hFRF9TVUJYSURTKSwKLQkJ CQkJCQkmZm91bmQpOwotCQlLbm93bkFzc2lnbmVkWGlkc1ZhbGlkID0gKGJvb2wgKikKLQkJCVNo bWVtSW5pdFN0cnVjdCgiS25vd25Bc3NpZ25lZFhpZHNWYWxpZCIsCi0JCQkJCQkJbXVsX3NpemUo c2l6ZW9mKGJvb2wpLCBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFMpLAotCQkJCQkJCSZmb3VuZCk7 Ci0JfQorc3RhdGljIHZvaWQKK1Byb2NBcnJheVNobWVtQXR0YWNoKHZvaWQgKmFyZykKK3sKKwlh bGxQcm9jcyA9IFByb2NHbG9iYWwtPmFsbFByb2NzOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvcHJvY3NpZ25hbC5jCmluZGV4IDhlNTY5MjJkY2VhLi41NzQzZjA4ODMyNCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCisrKyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwpAQCAtMTAyLDcgKzEwMiwxNiBAQCBzdHJ1Y3QgUHJv Y1NpZ25hbEhlYWRlcgogI2RlZmluZSBCQVJSSUVSX0NMRUFSX0JJVChmbGFncywgdHlwZSkgXAog CSgoZmxhZ3MpICY9IH4oKCh1aW50MzIpIDEpIDw8ICh1aW50MzIpICh0eXBlKSkpCiAKLU5PTl9F WEVDX1NUQVRJQyBQcm9jU2lnbmFsSGVhZGVyICpQcm9jU2lnbmFsID0gTlVMTDsKK3N0YXRpYyB2 b2lkIFByb2NTaWduYWxTaG1lbUluaXQodm9pZCAqYXJnKTsKKworc3RhdGljIFNobWVtU3RydWN0 RGVzYyBQcm9jU2lnbmFsU2htZW1EZXNjID0geworCS5uYW1lID0gIlByb2NTaWduYWwiLAorCS5z aXplID0gMCwgLyogZHluYW1pYyAqLworCS5pbml0X2ZuID0gUHJvY1NpZ25hbFNobWVtSW5pdCwK K307CisKKyNkZWZpbmUgUHJvY1NpZ25hbCAoKFByb2NTaWduYWxIZWFkZXIgKikgUHJvY1NpZ25h bFNobWVtRGVzYy5wdHIpCisKIHN0YXRpYyBQcm9jU2lnbmFsU2xvdCAqTXlQcm9jU2lnbmFsU2xv dCA9IE5VTEw7CiAKIHN0YXRpYyBib29sIENoZWNrUHJvY1NpZ25hbChQcm9jU2lnbmFsUmVhc29u IHJlYXNvbik7CkBAIC0xMTAsNTEgKzExOSwzNyBAQCBzdGF0aWMgdm9pZCBDbGVhbnVwUHJvY1Np Z25hbFN0YXRlKGludCBzdGF0dXMsIERhdHVtIGFyZyk7CiBzdGF0aWMgdm9pZCBSZXNldFByb2NT aWduYWxCYXJyaWVyQml0cyh1aW50MzIgZmxhZ3MpOwogCiAvKgotICogUHJvY1NpZ25hbFNobWVt U2l6ZQotICoJCUNvbXB1dGUgc3BhY2UgbmVlZGVkIGZvciBQcm9jU2lnbmFsJ3Mgc2hhcmVkIG1l bW9yeQorICogUHJvY1NpZ25hbFNobWVtUmVnaXN0ZXIKKyAqCQlSZWdpc3RlciBQcm9jU2lnbmFs J3Mgc2hhcmVkIG1lbW9yeSBuZWVkcyBhdCBwb3N0bWFzdGVyIHN0YXJ0dXAKICAqLwotU2l6ZQot UHJvY1NpZ25hbFNobWVtU2l6ZSh2b2lkKQordm9pZAorUHJvY1NpZ25hbFNobWVtUmVnaXN0ZXIo dm9pZCkKIHsKIAlTaXplCQlzaXplOwogCiAJc2l6ZSA9IG11bF9zaXplKE51bVByb2NTaWduYWxT bG90cywgc2l6ZW9mKFByb2NTaWduYWxTbG90KSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG9m ZnNldG9mKFByb2NTaWduYWxIZWFkZXIsIHBzaF9zbG90KSk7Ci0JcmV0dXJuIHNpemU7CisKKwlQ cm9jU2lnbmFsU2htZW1EZXNjLnNpemUgPSBzaXplOworCVNobWVtUmVnaXN0ZXJTdHJ1Y3QoJlBy b2NTaWduYWxTaG1lbURlc2MpOwogfQogCi0vKgotICogUHJvY1NpZ25hbFNobWVtSW5pdAotICoJ CUFsbG9jYXRlIGFuZCBpbml0aWFsaXplIFByb2NTaWduYWwncyBzaGFyZWQgbWVtb3J5Ci0gKi8K LXZvaWQKLVByb2NTaWduYWxTaG1lbUluaXQodm9pZCkKK3N0YXRpYyB2b2lkCitQcm9jU2lnbmFs U2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQlTaXplCQlzaXplID0gUHJvY1NpZ25hbFNobWVtU2l6 ZSgpOwotCWJvb2wJCWZvdW5kOworCXBnX2F0b21pY19pbml0X3U2NCgmUHJvY1NpZ25hbC0+cHNo X2JhcnJpZXJHZW5lcmF0aW9uLCAwKTsKIAotCVByb2NTaWduYWwgPSAoUHJvY1NpZ25hbEhlYWRl ciAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIlByb2NTaWduYWwiLCBzaXplLCAmZm91bmQpOwotCi0J LyogSWYgd2UncmUgZmlyc3QsIGluaXRpYWxpemUuICovCi0JaWYgKCFmb3VuZCkKKwlmb3IgKGlu dCBpID0gMDsgaSA8IE51bVByb2NTaWduYWxTbG90czsgKytpKQogCXsKLQkJaW50CQkJaTsKLQot CQlwZ19hdG9taWNfaW5pdF91NjQoJlByb2NTaWduYWwtPnBzaF9iYXJyaWVyR2VuZXJhdGlvbiwg MCk7CisJCVByb2NTaWduYWxTbG90ICpzbG90ID0gJlByb2NTaWduYWwtPnBzaF9zbG90W2ldOwog Ci0JCWZvciAoaSA9IDA7IGkgPCBOdW1Qcm9jU2lnbmFsU2xvdHM7ICsraSkKLQkJewotCQkJUHJv Y1NpZ25hbFNsb3QgKnNsb3QgPSAmUHJvY1NpZ25hbC0+cHNoX3Nsb3RbaV07Ci0KLQkJCVNwaW5M b2NrSW5pdCgmc2xvdC0+cHNzX211dGV4KTsKLQkJCXBnX2F0b21pY19pbml0X3UzMigmc2xvdC0+ cHNzX3BpZCwgMCk7Ci0JCQlzbG90LT5wc3NfY2FuY2VsX2tleV9sZW4gPSAwOwotCQkJTWVtU2V0 KHNsb3QtPnBzc19zaWduYWxGbGFncywgMCwgc2l6ZW9mKHNsb3QtPnBzc19zaWduYWxGbGFncykp OwotCQkJcGdfYXRvbWljX2luaXRfdTY0KCZzbG90LT5wc3NfYmFycmllckdlbmVyYXRpb24sIFBH X1VJTlQ2NF9NQVgpOwotCQkJcGdfYXRvbWljX2luaXRfdTMyKCZzbG90LT5wc3NfYmFycmllckNo ZWNrTWFzaywgMCk7Ci0JCQlDb25kaXRpb25WYXJpYWJsZUluaXQoJnNsb3QtPnBzc19iYXJyaWVy Q1YpOwotCQl9CisJCVNwaW5Mb2NrSW5pdCgmc2xvdC0+cHNzX211dGV4KTsKKwkJcGdfYXRvbWlj X2luaXRfdTMyKCZzbG90LT5wc3NfcGlkLCAwKTsKKwkJc2xvdC0+cHNzX2NhbmNlbF9rZXlfbGVu ID0gMDsKKwkJTWVtU2V0KHNsb3QtPnBzc19zaWduYWxGbGFncywgMCwgc2l6ZW9mKHNsb3QtPnBz c19zaWduYWxGbGFncykpOworCQlwZ19hdG9taWNfaW5pdF91NjQoJnNsb3QtPnBzc19iYXJyaWVy R2VuZXJhdGlvbiwgUEdfVUlOVDY0X01BWCk7CisJCXBnX2F0b21pY19pbml0X3UzMigmc2xvdC0+ cHNzX2JhcnJpZXJDaGVja01hc2ssIDApOworCQlDb25kaXRpb25WYXJpYWJsZUluaXQoJnNsb3Qt PnBzc19iYXJyaWVyQ1YpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvc2htZW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKaW5kZXggOWYz NjJjZTg2NDEuLmZhYTBmY2JkMjFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9zaG1lbS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKQEAgLTE5LDYg KzE5LDggQEAKICAqIG1ldGhvZHMpLiAgVGhlIHJvdXRpbmVzIGluIHRoaXMgZmlsZSBhcmUgdXNl ZCBmb3IgYWxsb2NhdGluZyBhbmQKICAqIGJpbmRpbmcgdG8gc2hhcmVkIG1lbW9yeSBkYXRhIHN0 cnVjdHVyZXMuCiAgKgorICogRklYTUU6IE5PVEVTIGJlbG93IGFyZSBvdXRkYXRlZAorICoKICAq IE5PVEVTOgogICoJCShhKSBUaGVyZSBhcmUgdGhyZWUga2luZHMgb2Ygc2hhcmVkIG1lbW9yeSBk YXRhIHN0cnVjdHVyZXMKICAqCWF2YWlsYWJsZSB0byBQT1NUR1JFUzogZml4ZWQtc2l6ZSBzdHJ1 Y3R1cmVzLCBxdWV1ZXMgYW5kIGhhc2gKQEAgLTc2LDYgKzc4LDE2IEBACiAjaW5jbHVkZSAic3Rv cmFnZS9zcGluLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKIAorLyogc2l6ZSBjb25z dGFudHMgZm9yIHRoZSBzaG1lbSBpbmRleCB0YWJsZSAqLworIC8qIG1heCBzaXplIG9mIGRhdGEg c3RydWN0dXJlIHN0cmluZyBuYW1lICovCisjZGVmaW5lIFNITUVNX0lOREVYX0tFWVNJWkUJCSAo NDgpCisgLyogZXN0aW1hdGVkIHNpemUgb2YgdGhlIHNobWVtIGluZGV4IHRhYmxlIChub3QgYSBo YXJkIGxpbWl0KSAqLworI2RlZmluZSBTSE1FTV9JTkRFWF9TSVpFCQkgKDY0KQorCisvKiB0aGVz ZSBhcmUgaW4gcG9zdG1hc3RlciBwcml2YXRlIG1lbW9yeSAqLworc3RhdGljIFNobWVtU3RydWN0 RGVzYyAqcmVnaXN0cnlbU0hNRU1fSU5ERVhfU0laRV07CitzdGF0aWMgaW50IG51bV9yZWdpc3Ry YXRpb25zID0gMDsKKwogLyoKICAqIFRoaXMgaXMgdGhlIGZpcnN0IGRhdGEgc3RydWN0dXJlIHN0 b3JlZCBpbiB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50LCBhdAogICogdGhlIG9mZnNldCB0aGF0 IFBHU2htZW1IZWFkZXItPmNvbnRlbnRfb2Zmc2V0IHBvaW50cyB0by4gIEFsbG9jYXRpb25zIGJ5 CkBAIC05NSw2ICsxMDcsOSBAQCB0eXBlZGVmIHN0cnVjdCBTaG1lbUFsbG9jYXRvckRhdGEKIAog c3RhdGljIHZvaWQgKlNobWVtQWxsb2NSYXcoU2l6ZSBzaXplLCBTaXplICphbGxvY2F0ZWRfc2l6 ZSk7CiAKK3N0YXRpYyB2b2lkIHNobWVtX2hhc2hfaW5pdCh2b2lkICphcmcpOworc3RhdGljIHZv aWQgc2htZW1faGFzaF9hdHRhY2godm9pZCAqYXJnKTsKKwogLyogc2hhcmVkIG1lbW9yeSBnbG9i YWwgdmFyaWFibGVzICovCiAKIHN0YXRpYyBQR1NobWVtSGVhZGVyICpTaG1lbVNlZ0hkcjsJLyog c2hhcmVkIG1lbSBzZWdtZW50IGhlYWRlciAqLwpAQCAtMTAzLDEzICsxMTgsMTM3IEBAIHN0YXRp YyB2b2lkICpTaG1lbUVuZDsJCQkvKiBlbmQrMSBhZGRyZXNzIG9mIHNoYXJlZCBtZW1vcnkgKi8K IAogc3RhdGljIFNobWVtQWxsb2NhdG9yRGF0YSAqU2htZW1BbGxvY2F0b3I7CiBzbG9ja190ICAg ICpTaG1lbUxvY2s7CQkJLyogcG9pbnRzIHRvIFNobWVtQWxsb2NhdG9yLT5zaG1lbV9sb2NrICov Ci1zdGF0aWMgSFRBQiAqU2htZW1JbmRleCA9IE5VTEw7IC8qIHByaW1hcnkgaW5kZXggaGFzaHRh YmxlIGZvciBzaG1lbSAqLworCisKK3N0YXRpYyBTaG1lbUhhc2hEZXNjIFNobWVtSW5kZXhIYXNo RGVzYyA9IHsKKwkubmFtZSA9ICJTaG1lbUluZGV4IiwKKwkuaW5pdF9zaXplID0gU0hNRU1fSU5E RVhfU0laRSwKKwkubWF4X3NpemUgPSBTSE1FTV9JTkRFWF9TSVpFLAorfTsKKworIC8qIHByaW1h cnkgaW5kZXggaGFzaHRhYmxlIGZvciBzaG1lbSAqLworI2RlZmluZSBTaG1lbUluZGV4IChTaG1l bUluZGV4SGFzaERlc2MucHRyKQorCiAKIC8qIFRvIGdldCByZWxpYWJsZSByZXN1bHRzIGZvciBO VU1BIGlucXVpcnkgd2UgbmVlZCB0byAidG91Y2ggcGFnZXMiIG9uY2UgKi8KIHN0YXRpYyBib29s IGZpcnN0TnVtYVRvdWNoID0gdHJ1ZTsKIAogRGF0dW0JCXBnX251bWFfYXZhaWxhYmxlKFBHX0ZV TkNUSU9OX0FSR1MpOwogCisKK3ZvaWQKK1NobWVtUmVnaXN0ZXJTdHJ1Y3QoU2htZW1TdHJ1Y3RE ZXNjICpkZXNjKQoreworCWVsb2coREVCVUcyLCAiUkVHSVNURVI6ICVzIHdpdGggc2l6ZSAlemQi LCBkZXNjLT5uYW1lLCBkZXNjLT5zaXplKTsKKworCXJlZ2lzdHJ5W251bV9yZWdpc3RyYXRpb25z KytdID0gZGVzYzsKK30KKworc2l6ZV90CitTaG1lbVJlZ2lzdGVyZWRTaXplKHZvaWQpCit7CisJ c2l6ZV90CQlzaXplOworCisJc2l6ZSA9IDA7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fcmVn aXN0cmF0aW9uczsgaSsrKQorCXsKKwkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIHJlZ2lzdHJ5W2ld LT5zaXplKTsKKwkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIHJlZ2lzdHJ5W2ldLT5leHRyYV9zaXpl KTsKKwl9CisKKwllbG9nKERFQlVHMiwgIlNJWkU6IHRvdGFsICV6ZCIsIHNpemUpOworCisJcmV0 dXJuIHNpemU7Cit9CisKK3ZvaWQKK1NobWVtSW5pdFJlZ2lzdGVyZWQodm9pZCkKK3sKKwkvKiBT aG91bGQgYmUgY2FsbGVkIG9ubHkgYnkgdGhlIHBvc3RtYXN0ZXIgb3IgYSBzdGFuZGFsb25lIGJh Y2tlbmQuICovCisJQXNzZXJ0KCFJc1VuZGVyUG9zdG1hc3Rlcik7CisKKwlmb3IgKGludCBpID0g MDsgaSA8IG51bV9yZWdpc3RyYXRpb25zOyBpKyspCisJeworCQlzaXplX3QJCWFsbG9jYXRlZF9z aXplOworCQl2b2lkCSAgICpzdHJ1Y3RQdHI7CisJCWJvb2wJCWZvdW5kOworCQlTaG1lbUluZGV4 RW50ICpyZXN1bHQ7CisKKwkJZWxvZyhERUJVRzIsICJJTklUIFslZC8lZF06ICVzIiwgaSwgbnVt X3JlZ2lzdHJhdGlvbnMsIHJlZ2lzdHJ5W2ldLT5uYW1lKTsKKworCQkvKiBsb29rIGl0IHVwIGlu IHRoZSBzaG1lbSBpbmRleCAqLworCQlyZXN1bHQgPSAoU2htZW1JbmRleEVudCAqKQorCQkJaGFz aF9zZWFyY2goU2htZW1JbmRleCwgcmVnaXN0cnlbaV0tPm5hbWUsIEhBU0hfRU5URVJfTlVMTCwg JmZvdW5kKTsKKwkJaWYgKCFyZXN1bHQpCisJCXsKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShl cnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCisJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBj cmVhdGUgU2htZW1JbmRleCBlbnRyeSBmb3IgZGF0YSBzdHJ1Y3R1cmUgXCIlc1wiIiwKKwkJCQkJ CQlyZWdpc3RyeVtpXS0+bmFtZSkpKTsKKwkJfQorCQlpZiAoZm91bmQpCisJCQllbG9nKEVSUk9S LCAic2htZW0gc3RydWN0IFwiJXNcIiBpcyBhbHJlYWR5IGluaXRpYWxpemVkIiwgcmVnaXN0cnlb aV0tPm5hbWUpOworCisJCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGl0ICovCisJCXN0cnVj dFB0ciA9IFNobWVtQWxsb2NSYXcocmVnaXN0cnlbaV0tPnNpemUsICZhbGxvY2F0ZWRfc2l6ZSk7 CisJCWlmIChzdHJ1Y3RQdHIgPT0gTlVMTCkKKwkJeworCQkJLyogb3V0IG9mIG1lbW9yeTsgcmVt b3ZlIHRoZSBmYWlsZWQgU2htZW1JbmRleCBlbnRyeSAqLworCQkJaGFzaF9zZWFyY2goU2htZW1J bmRleCwgcmVnaXN0cnlbaV0tPm5hbWUsIEhBU0hfUkVNT1ZFLCBOVUxMKTsKKwkJCWVyZXBvcnQo RVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCisJCQkJCSBlcnJt c2coIm5vdCBlbm91Z2ggc2hhcmVkIG1lbW9yeSBmb3IgZGF0YSBzdHJ1Y3R1cmUiCisJCQkJCQkJ IiBcIiVzXCIgKCV6dSBieXRlcyByZXF1ZXN0ZWQpIiwKKwkJCQkJCQlyZWdpc3RyeVtpXS0+bmFt ZSwgcmVnaXN0cnlbaV0tPnNpemUpKSk7CisJCX0KKwkJcmVzdWx0LT5zaXplID0gcmVnaXN0cnlb aV0tPnNpemU7CisJCXJlc3VsdC0+YWxsb2NhdGVkX3NpemUgPSBhbGxvY2F0ZWRfc2l6ZTsKKwkJ cmVzdWx0LT5sb2NhdGlvbiA9IHN0cnVjdFB0cjsKKworCQlyZWdpc3RyeVtpXS0+cHRyID0gc3Ry dWN0UHRyOworCQlpZiAocmVnaXN0cnlbaV0tPmluaXRfZm4pCisJCQlyZWdpc3RyeVtpXS0+aW5p dF9mbihyZWdpc3RyeVtpXS0+aW5pdF9mbl9hcmcpOworCX0KK30KKworI2lmZGVmIEVYRUNfQkFD S0VORAordm9pZAorU2htZW1BdHRhY2hSZWdpc3RlcmVkKHZvaWQpCit7CisJLyogTXVzdCBiZSBp bml0aWFsaXppbmcgYSAobm9uLXN0YW5kYWxvbmUpIGJhY2tlbmQgKi8KKwlBc3NlcnQoSXNVbmRl clBvc3RtYXN0ZXIpOworCUFzc2VydChTaG1lbUFsbG9jYXRvci0+aW5kZXggIT0gTlVMTCk7CisK KwlMV0xvY2tBY3F1aXJlKFNobWVtSW5kZXhMb2NrLCBMV19FWENMVVNJVkUpOworCisJZm9yIChp bnQgaSA9IDA7IGkgPCBudW1fcmVnaXN0cmF0aW9uczsgaSsrKQorCXsKKwkJYm9vbAkJZm91bmQ7 CisJCVNobWVtSW5kZXhFbnQgKnJlc3VsdDsKKworCQllbG9nKExPRywgIkFUVEFDSCBbJWQvJWRd OiAlcyIsIGksIG51bV9yZWdpc3RyYXRpb25zLCByZWdpc3RyeVtpXS0+bmFtZSk7CisKKwkJLyog bG9vayBpdCB1cCBpbiB0aGUgc2htZW0gaW5kZXggKi8KKwkJcmVzdWx0ID0gKFNobWVtSW5kZXhF bnQgKikKKwkJCWhhc2hfc2VhcmNoKFNobWVtSW5kZXgsIHJlZ2lzdHJ5W2ldLT5uYW1lLCBIQVNI X0ZJTkQsICZmb3VuZCk7CisJCWlmICghZm91bmQpCisJCXsKKwkJCWVyZXBvcnQoRVJST1IsCisJ CQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCisJCQkJCSBlcnJtc2coImNvdWxk IG5vdCBmaW5kIFNobWVtSW5kZXggZW50cnkgZm9yIGRhdGEgc3RydWN0dXJlIFwiJXNcIiIsCisJ CQkJCQkJcmVnaXN0cnlbaV0tPm5hbWUpKSk7CisJCX0KKworCQlyZWdpc3RyeVtpXS0+cHRyID0g cmVzdWx0LT5sb2NhdGlvbjsKKworCQlpZiAocmVnaXN0cnlbaV0tPmF0dGFjaF9mbikKKwkJCXJl Z2lzdHJ5W2ldLT5hdHRhY2hfZm4ocmVnaXN0cnlbaV0tPmF0dGFjaF9mbl9hcmcpOworCX0KKwor CUxXTG9ja1JlbGVhc2UoU2htZW1JbmRleExvY2spOworfQorI2VuZGlmCisKIC8qCiAgKglJbml0 U2htZW1BbGxvY2F0b3IoKSAtLS0gc2V0IHVwIGJhc2ljIHBvaW50ZXJzIHRvIHNoYXJlZCBtZW1v cnkuCiAgKgpAQCAtMjkyLDYgKzQzMSw5OCBAQCBJbml0U2htZW1JbmRleCh2b2lkKQogCQkJCQkJ CSAgIEhBU0hfRUxFTSB8IEhBU0hfU1RSSU5HUyk7CiB9CiAKKy8qCisgKiBTaG1lbUluaXRIYXNo IC0tIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSwgb3IgYXR0YWNoIHRvLCBhCisgKgkJc2hhcmVkIG1l bW9yeSBoYXNoIHRhYmxlLgorICoKKyAqIFdlIGFzc3VtZSBjYWxsZXIgaXMgZG9pbmcgc29tZSBr aW5kIG9mIHN5bmNocm9uaXphdGlvbgorICogc28gdGhhdCB0d28gcHJvY2Vzc2VzIGRvbid0IHRy eSB0byBjcmVhdGUvaW5pdGlhbGl6ZSB0aGUgc2FtZQorICogdGFibGUgYXQgb25jZS4gIChJbiBw cmFjdGljZSwgYWxsIGNyZWF0aW9ucyBhcmUgZG9uZSBpbiB0aGUgcG9zdG1hc3RlcgorICogcHJv Y2VzczsgY2hpbGQgcHJvY2Vzc2VzIHNob3VsZCBhbHdheXMgYmUgYXR0YWNoaW5nIHRvIGV4aXN0 aW5nIHRhYmxlcy4pCisgKgorICogbWF4X3NpemUgaXMgdGhlIGVzdGltYXRlZCBtYXhpbXVtIG51 bWJlciBvZiBoYXNodGFibGUgZW50cmllcy4gIFRoaXMgaXMKKyAqIG5vdCBhIGhhcmQgbGltaXQs IGJ1dCB0aGUgYWNjZXNzIGVmZmljaWVuY3kgd2lsbCBkZWdyYWRlIGlmIGl0IGlzCisgKiBleGNl ZWRlZCBzdWJzdGFudGlhbGx5IChzaW5jZSBpdCdzIHVzZWQgdG8gY29tcHV0ZSBkaXJlY3Rvcnkg c2l6ZSBhbmQKKyAqIHRoZSBoYXNoIHRhYmxlIGJ1Y2tldHMgd2lsbCBnZXQgb3ZlcmZ1bGwpLgor ICoKKyAqIGluaXRfc2l6ZSBpcyB0aGUgbnVtYmVyIG9mIGhhc2h0YWJsZSBlbnRyaWVzIHRvIHBy ZWFsbG9jYXRlLiAgRm9yIGEgdGFibGUKKyAqIHdob3NlIG1heGltdW0gc2l6ZSBpcyBjZXJ0YWlu LCB0aGlzIHNob3VsZCBiZSBlcXVhbCB0byBtYXhfc2l6ZTsgdGhhdAorICogZW5zdXJlcyB0aGF0 IG5vIHJ1bi10aW1lIG91dC1vZi1zaGFyZWQtbWVtb3J5IGZhaWx1cmVzIGNhbiBvY2N1ci4KKyAq CisgKiAqaW5mb1AgYW5kIGhhc2hfZmxhZ3MgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IHRoZSBlbnRy eSBzaXplcyBhbmQga2V5CisgKiBjb21wYXJpc29uIHNlbWFudGljcyAoc2VlIGhhc2hfY3JlYXRl KCkpLiAgRmxhZyBiaXRzIGFuZCB2YWx1ZXMgc3BlY2lmaWMKKyAqIHRvIHNoYXJlZC1tZW1vcnkg aGFzaCB0YWJsZXMgYXJlIGFkZGVkIGhlcmUsIGV4Y2VwdCB0aGF0IGNhbGxlcnMgbWF5CisgKiBj aG9vc2UgdG8gc3BlY2lmeSBIQVNIX1BBUlRJVElPTiBhbmQvb3IgSEFTSF9GSVhFRF9TSVpFLgor ICoKKyAqIE5vdGU6IGJlZm9yZSBQb3N0Z3JlcyA5LjAsIHRoaXMgZnVuY3Rpb24gcmV0dXJuZWQg TlVMTCBmb3Igc29tZSBmYWlsdXJlCisgKiBjYXNlcy4gIE5vdywgaXQgYWx3YXlzIHRocm93cyBl cnJvciBpbnN0ZWFkLCBzbyBjYWxsZXJzIG5lZWQgbm90IGNoZWNrCisgKiBmb3IgTlVMTC4KKyAq Lwordm9pZAorU2htZW1SZWdpc3Rlckhhc2goU2htZW1IYXNoRGVzYyAqZGVzYywJCS8qIGNvbmZp Z3VyYXRpb24gKi8KKwkJCQkgIEhBU0hDVEwgKmluZm9QLAkvKiBpbmZvIGFib3V0IGtleSBhbmQg YnVja2V0IHNpemUgKi8KKwkJCQkgIGludCBoYXNoX2ZsYWdzKQkvKiBpbmZvIGFib3V0IGluZm9Q ICovCit7CisJLyoKKwkgKiBIYXNoIHRhYmxlcyBhbGxvY2F0ZWQgaW4gc2hhcmVkIG1lbW9yeSBo YXZlIGEgZml4ZWQgZGlyZWN0b3J5OyBpdCBjYW4ndAorCSAqIGdyb3cgb3Igb3RoZXIgYmFja2Vu ZHMgd291bGRuJ3QgYmUgYWJsZSB0byBmaW5kIGl0LiBTbywgbWFrZSBzdXJlIHdlCisJICogbWFr ZSBpdCBiaWcgZW5vdWdoIHRvIHN0YXJ0IHdpdGguCisJICoKKwkgKiBUaGUgc2hhcmVkIG1lbW9y eSBhbGxvY2F0b3IgbXVzdCBiZSBzcGVjaWZpZWQgdG9vLgorCSAqLworCWluZm9QLT5kc2l6ZSA9 IGluZm9QLT5tYXhfZHNpemUgPSBoYXNoX3NlbGVjdF9kaXJzaXplKGRlc2MtPm1heF9zaXplKTsK KwlpbmZvUC0+YWxsb2MgPSBTaG1lbUFsbG9jTm9FcnJvcjsKKwloYXNoX2ZsYWdzIHw9IEhBU0hf U0hBUkVEX01FTSB8IEhBU0hfQUxMT0MgfCBIQVNIX0RJUlNJWkU7CisKKwkvKiBsb29rIGl0IHVw IGluIHRoZSBzaG1lbSBpbmRleCAqLworCW1lbXNldCgmZGVzYy0+YmFzZV9kZXNjLCAwLCBzaXpl b2YoZGVzYy0+YmFzZV9kZXNjKSk7CisJZGVzYy0+YmFzZV9kZXNjLm5hbWUgPSBkZXNjLT5uYW1l OworCWRlc2MtPmJhc2VfZGVzYy5zaXplID0gaGFzaF9nZXRfc2hhcmVkX3NpemUoaW5mb1AsIGhh c2hfZmxhZ3MpOworCWRlc2MtPmJhc2VfZGVzYy5pbml0X2ZuID0gc2htZW1faGFzaF9pbml0Owor CWRlc2MtPmJhc2VfZGVzYy5pbml0X2ZuX2FyZyA9IGRlc2M7CisJZGVzYy0+YmFzZV9kZXNjLmF0 dGFjaF9mbiA9IHNobWVtX2hhc2hfYXR0YWNoOworCWRlc2MtPmJhc2VfZGVzYy5hdHRhY2hfZm5f YXJnID0gZGVzYzsKKworCWRlc2MtPmJhc2VfZGVzYy5leHRyYV9zaXplID0gaGFzaF9lc3RpbWF0 ZV9zaXplKGRlc2MtPm1heF9zaXplLCBpbmZvUC0+ZW50cnlzaXplKSAtIGRlc2MtPmJhc2VfZGVz Yy5zaXplOworCisJZGVzYy0+aGFzaF9mbGFncyA9IGhhc2hfZmxhZ3M7CisJZGVzYy0+aW5mb1Ag PSBNZW1vcnlDb250ZXh0QWxsb2MoVG9wTWVtb3J5Q29udGV4dCwgc2l6ZW9mKEhBU0hDVEwpKTsK KwltZW1jcHkoZGVzYy0+aW5mb1AsIGluZm9QLCBzaXplb2YoSEFTSENUTCkpOworCisJU2htZW1S ZWdpc3RlclN0cnVjdCgmZGVzYy0+YmFzZV9kZXNjKTsKK30KKworc3RhdGljIHZvaWQKK3NobWVt X2hhc2hfaW5pdCh2b2lkICphcmcpCit7CisJU2htZW1IYXNoRGVzYyAqZGVzYyA9IChTaG1lbUhh c2hEZXNjICopIGFyZzsKKwlpbnQJCQloYXNoX2ZsYWdzID0gZGVzYy0+aGFzaF9mbGFnczsKKwor CS8qIFBhc3MgbG9jYXRpb24gb2YgaGFzaHRhYmxlIGhlYWRlciB0byBoYXNoX2NyZWF0ZSAqLwor CWRlc2MtPnB0ciA9IGRlc2MtPmJhc2VfZGVzYy5wdHI7CisJZGVzYy0+aW5mb1AtPmhjdGwgPSAo SEFTSEhEUiAqKSBkZXNjLT5wdHI7CisKKwlkZXNjLT5wdHIgPSBoYXNoX2NyZWF0ZShkZXNjLT5u YW1lLCBkZXNjLT5pbml0X3NpemUsIGRlc2MtPmluZm9QLCBoYXNoX2ZsYWdzKTsKK30KKworc3Rh dGljIHZvaWQKK3NobWVtX2hhc2hfYXR0YWNoKHZvaWQgKmFyZykKK3sKKwlTaG1lbUhhc2hEZXNj ICpkZXNjID0gKFNobWVtSGFzaERlc2MgKikgYXJnOworCWludAkJCWhhc2hfZmxhZ3MgPSBkZXNj LT5oYXNoX2ZsYWdzOworCisJLyoKKwkgKiBpZiBpdCBhbHJlYWR5IGV4aXN0cywgYXR0YWNoIHRv IGl0IHJhdGhlciB0aGFuIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplCisJICogbmV3IHNwYWNlCisJ ICovCisJaGFzaF9mbGFncyB8PSBIQVNIX0FUVEFDSDsKKworCS8qIFBhc3MgbG9jYXRpb24gb2Yg aGFzaHRhYmxlIGhlYWRlciB0byBoYXNoX2NyZWF0ZSAqLworCWRlc2MtPmluZm9QLT5oY3RsID0g KEhBU0hIRFIgKikgZGVzYy0+cHRyOworCisJZGVzYy0+cHRyID0gaGFzaF9jcmVhdGUoZGVzYy0+ bmFtZSwgZGVzYy0+aW5pdF9zaXplLCBkZXNjLT5pbmZvUCwgaGFzaF9mbGFncyk7Cit9CisKIC8q CiAgKiBTaG1lbUluaXRIYXNoIC0tIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSwgb3IgYXR0YWNoIHRv LCBhCiAgKgkJc2hhcmVkIG1lbW9yeSBoYXNoIHRhYmxlLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvc2ludmFsYWR0LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaW52 YWxhZHQuYwppbmRleCBhN2E3Y2M0ZjBhOS4uMGZlMGYyNTY5NzEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3NpbnZhbGFkdC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL3NpbnZhbGFkdC5jCkBAIC0yMDMsNyArMjAzLDE2IEBAIHR5cGVkZWYgc3RydWN0IFNJU2Vn CiAgKi8KICNkZWZpbmUgTnVtUHJvY1N0YXRlU2xvdHMJKE1heEJhY2tlbmRzICsgTlVNX0FVWElM SUFSWV9QUk9DUykKIAotc3RhdGljIFNJU2VnICpzaG1JbnZhbEJ1ZmZlcjsJLyogcG9pbnRlciB0 byB0aGUgc2hhcmVkIGludmFsIGJ1ZmZlciAqLworc3RhdGljIHZvaWQgU2hhcmVkSW52YWxTaG1l bUluaXQodm9pZCAqYXJnKTsKKworc3RhdGljIFNobWVtU3RydWN0RGVzYyBTaGFyZWRJbnZhbFNo bWVtRGVzYyA9IHsKKwkubmFtZSA9ICJzaG1JbnZhbEJ1ZmZlciIsCisJLnNpemUgPSAwLAkvKiBk eW5hbWljICovCisJLmluaXRfZm4gPSBTaGFyZWRJbnZhbFNobWVtSW5pdCwKK307CisKKy8qIHBv aW50ZXIgdG8gdGhlIHNoYXJlZCBpbnZhbCBidWZmZXIgKi8KKyNkZWZpbmUgc2htSW52YWxCdWZm ZXIgKChTSVNlZyAqKSBTaGFyZWRJbnZhbFNobWVtRGVzYy5wdHIpCiAKIAogc3RhdGljIExvY2Fs VHJhbnNhY3Rpb25JZCBuZXh0TG9jYWxUcmFuc2FjdGlvbklkOwpAQCAtMjEyLDEwICsyMjEsMTEg QEAgc3RhdGljIHZvaWQgQ2xlYW51cEludmFsaWRhdGlvblN0YXRlKGludCBzdGF0dXMsIERhdHVt IGFyZyk7CiAKIAogLyoKLSAqIFNoYXJlZEludmFsU2htZW1TaXplIC0tLSByZXR1cm4gc2hhcmVk LW1lbW9yeSBzcGFjZSBuZWVkZWQKKyAqIFNoYXJlZEludmFsU2htZW1SZWdpc3RlcgorICoJCVJl Z2lzdGVyIHNoYXJlZCBtZW1vcnkgbmVlZHMgZm9yIHRoZSBTSSBtZXNzYWdlIGJ1ZmZlcgogICov Ci1TaXplCi1TaGFyZWRJbnZhbFNobWVtU2l6ZSh2b2lkKQordm9pZAorU2hhcmVkSW52YWxTaG1l bVJlZ2lzdGVyKHZvaWQpCiB7CiAJU2l6ZQkJc2l6ZTsKIApAQCAtMjIzLDI2ICsyMzMsMTcgQEAg U2hhcmVkSW52YWxTaG1lbVNpemUodm9pZCkKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3Np emUoc2l6ZW9mKFByb2NTdGF0ZSksIE51bVByb2NTdGF0ZVNsb3RzKSk7CS8qIHByb2NTdGF0ZSAq LwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShzaXplb2YoaW50KSwgTnVtUHJvY1N0 YXRlU2xvdHMpKTsJLyogcGdwcm9jbm9zICovCiAKLQlyZXR1cm4gc2l6ZTsKKwkvKiBBbGxvY2F0 ZSBzcGFjZSBpbiBzaGFyZWQgbWVtb3J5ICovCisJU2hhcmVkSW52YWxTaG1lbURlc2Muc2l6ZSA9 IHNpemU7CisJU2htZW1SZWdpc3RlclN0cnVjdCgmU2hhcmVkSW52YWxTaG1lbURlc2MpOwogfQog Ci0vKgotICogU2hhcmVkSW52YWxTaG1lbUluaXQKLSAqCQlDcmVhdGUgYW5kIGluaXRpYWxpemUg dGhlIFNJIG1lc3NhZ2UgYnVmZmVyCi0gKi8KLXZvaWQKLVNoYXJlZEludmFsU2htZW1Jbml0KHZv aWQpCitzdGF0aWMgdm9pZAorU2hhcmVkSW52YWxTaG1lbUluaXQodm9pZCAqYXJnKQogewogCWlu dAkJCWk7Ci0JYm9vbAkJZm91bmQ7Ci0KLQkvKiBBbGxvY2F0ZSBzcGFjZSBpbiBzaGFyZWQgbWVt b3J5ICovCi0Jc2htSW52YWxCdWZmZXIgPSAoU0lTZWcgKikKLQkJU2htZW1Jbml0U3RydWN0KCJz aG1JbnZhbEJ1ZmZlciIsIFNoYXJlZEludmFsU2htZW1TaXplKCksICZmb3VuZCk7Ci0JaWYgKGZv dW5kKQotCQlyZXR1cm47CiAKLQkvKiBDbGVhciBtZXNzYWdlIGNvdW50ZXJzLCBzYXZlIHNpemUg b2YgcHJvY1N0YXRlIGFycmF5LCBpbml0IHNwaW5sb2NrICovCisJLyogQ2xlYXIgbWVzc2FnZSBj b3VudGVycywgc2F2ZSBzaXplIG9mIHByb2NTdGF0ZSBhcnJheSBGSVhNRSwgaW5pdCBzcGlubG9j ayAqLwogCXNobUludmFsQnVmZmVyLT5taW5Nc2dOdW0gPSAwOwogCXNobUludmFsQnVmZmVyLT5t YXhNc2dOdW0gPSAwOwogCXNobUludmFsQnVmZmVyLT5uZXh0VGhyZXNob2xkID0gQ0xFQU5VUF9N SU47CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwppbmRleCBjN2EwMDFiM2I3OS4uODUzNzViNTE5NWUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKKysrIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwpAQCAtNzMsMTMgKzczLDMzIEBAIFBHUFJPQwkgICAq TXlQcm9jID0gTlVMTDsKICAqIHJlbGF0aXZlbHkgaW5mcmVxdWVudGx5IChvbmx5IGF0IGJhY2tl bmQgc3RhcnR1cCBvciBzaHV0ZG93bikgYW5kIG5vdCBmb3IKICAqIHZlcnkgbG9uZywgc28gYSBz cGlubG9jayBpcyBva2F5LgogICovCi1OT05fRVhFQ19TVEFUSUMgc2xvY2tfdCAqUHJvY1N0cnVj dExvY2sgPSBOVUxMOworI2RlZmluZSBQcm9jU3RydWN0TG9jayAoJlByb2NHbG9iYWwtPmZyZWVQ cm9jc0xvY2spCisKK3N0YXRpYyB2b2lkIFByb2NHbG9iYWxTaG1lbUluaXQodm9pZCAqYXJnKTsK Kworc3RhdGljIFNobWVtU3RydWN0RGVzYyBQcm9jR2xvYmFsU2htZW1EZXNjID0geworCS5uYW1l ID0gIlByb2MgSGVhZGVyIiwKKwkuc2l6ZSA9IHNpemVvZihQUk9DX0hEUiksCisJLmluaXRfZm4g PSBQcm9jR2xvYmFsU2htZW1Jbml0LAorfTsKKworc3RhdGljIFNobWVtU3RydWN0RGVzYyBQcm9j R2xvYmFsQWxsUHJvY3NTaG1lbURlc2MgPSB7CisJLm5hbWUgPSAiUEdQUk9DIHN0cnVjdHVyZXMi LAorCS5zaXplID0gMCwgLyogZHluYW1pYyAqLworfTsKKworc3RhdGljIFNobWVtU3RydWN0RGVz YyBGYXN0UGF0aExvY2tBcnJheVNobWVtRGVzYyA9IHsKKwkubmFtZSA9ICJGYXN0LVBhdGggTG9j ayBBcnJheSIsCisJLnNpemUgPSAwLCAvKiBkeW5hbWljICovCit9OwogCiAvKiBQb2ludGVycyB0 byBzaGFyZWQtbWVtb3J5IHN0cnVjdHVyZXMgKi8KIFBST0NfSERSICAgKlByb2NHbG9iYWwgPSBO VUxMOwogTk9OX0VYRUNfU1RBVElDIFBHUFJPQyAqQXV4aWxpYXJ5UHJvY3MgPSBOVUxMOwogUEdQ Uk9DCSAgICpQcmVwYXJlZFhhY3RQcm9jcyA9IE5VTEw7CiAKK3N0YXRpYyB1aW50MzIgVG90YWxQ cm9jczsKKwogc3RhdGljIERlYWRMb2NrU3RhdGUgZGVhZGxvY2tfc3RhdGUgPSBEU19OT1RfWUVU X0NIRUNLRUQ7CiAKIC8qIElzIGEgZGVhZGxvY2sgY2hlY2sgcGVuZGluZz8gKi8KQEAgLTkxLDI0 ICsxMTEsNiBAQCBzdGF0aWMgdm9pZCBBdXhpbGlhcnlQcm9jS2lsbChpbnQgY29kZSwgRGF0dW0g YXJnKTsKIHN0YXRpYyB2b2lkIENoZWNrRGVhZExvY2sodm9pZCk7CiAKIAotLyoKLSAqIFJlcG9y dCBzaGFyZWQtbWVtb3J5IHNwYWNlIG5lZWRlZCBieSBQR1BST0MuCi0gKi8KLXN0YXRpYyBTaXpl Ci1QR1Byb2NTaG1lbVNpemUodm9pZCkKLXsKLQlTaXplCQlzaXplID0gMDsKLQlTaXplCQlUb3Rh bFByb2NzID0KLQkJYWRkX3NpemUoTWF4QmFja2VuZHMsIGFkZF9zaXplKE5VTV9BVVhJTElBUllf UFJPQ1MsIG1heF9wcmVwYXJlZF94YWN0cykpOwotCi0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11 bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZihQR1BST0MpKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNp emUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZigqUHJvY0dsb2JhbC0+eGlkcykpKTsKLQlz aXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoVG90YWxQcm9jcywgc2l6ZW9mKCpQcm9jR2xv YmFsLT5zdWJ4aWRTdGF0ZXMpKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRv dGFsUHJvY3MsIHNpemVvZigqUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3MpKSk7Ci0KLQlyZXR1cm4g c2l6ZTsKLX0KLQogLyoKICAqIFJlcG9ydCBzaGFyZWQtbWVtb3J5IHNwYWNlIG5lZWRlZCBieSBG YXN0LVBhdGggbG9ja3MuCiAgKi8KQEAgLTExNiw4ICsxMTgsNiBAQCBzdGF0aWMgU2l6ZQogRmFz dFBhdGhMb2NrU2htZW1TaXplKHZvaWQpCiB7CiAJU2l6ZQkJc2l6ZSA9IDA7Ci0JU2l6ZQkJVG90 YWxQcm9jcyA9Ci0JCWFkZF9zaXplKE1heEJhY2tlbmRzLCBhZGRfc2l6ZShOVU1fQVVYSUxJQVJZ X1BST0NTLCBtYXhfcHJlcGFyZWRfeGFjdHMpKTsKIAlTaXplCQlmcExvY2tCaXRzU2l6ZSwKIAkJ CQlmcFJlbElkU2l6ZTsKIApAQCAtMTMzLDI1ICsxMzMsNiBAQCBGYXN0UGF0aExvY2tTaG1lbVNp emUodm9pZCkKIAlyZXR1cm4gc2l6ZTsKIH0KIAotLyoKLSAqIFJlcG9ydCBzaGFyZWQtbWVtb3J5 IHNwYWNlIG5lZWRlZCBieSBJbml0UHJvY0dsb2JhbC4KLSAqLwotU2l6ZQotUHJvY0dsb2JhbFNo bWVtU2l6ZSh2b2lkKQotewotCVNpemUJCXNpemUgPSAwOwotCi0JLyogUHJvY0dsb2JhbCAqLwot CXNpemUgPSBhZGRfc2l6ZShzaXplLCBzaXplb2YoUFJPQ19IRFIpKTsKLQlzaXplID0gYWRkX3Np emUoc2l6ZSwgc2l6ZW9mKHNsb2NrX3QpKTsKLQotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBQR1Nl bWFwaG9yZVNobWVtU2l6ZShQcm9jR2xvYmFsU2VtYXMoKSkpOwotCXNpemUgPSBhZGRfc2l6ZShz aXplLCBQR1Byb2NTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIEZhc3RQYXRo TG9ja1NobWVtU2l6ZSgpKTsKLQotCXJldHVybiBzaXplOwotfQotCiAvKgogICogUmVwb3J0IG51 bWJlciBvZiBzZW1hcGhvcmVzIG5lZWRlZCBieSBJbml0UHJvY0dsb2JhbC4KICAqLwpAQCAtMTg2 LDM1ICsxNjcsNjMgQEAgUHJvY0dsb2JhbFNlbWFzKHZvaWQpCiAgKgkgIGltcGxlbWVudGF0aW9u IHR5cGljYWxseSByZXF1aXJlcyB1cyB0byBjcmVhdGUgc2VtYXBob3JlcyBpbiB0aGUKICAqCSAg cG9zdG1hc3Rlciwgbm90IGluIGJhY2tlbmRzLgogICoKLSAqIE5vdGU6IHRoaXMgaXMgTk9UIGNh bGxlZCBieSBpbmRpdmlkdWFsIGJhY2tlbmRzIHVuZGVyIGEgcG9zdG1hc3RlciwKKyAqIE5vdGU6 IHRoaXMgaXMgTk9UIGNhbGxlZCBieSBpbmRpdmlkdWFsIGJhY2tlbmRzIHVuZGVyIGEgcG9zdG1h c3RlciwgWFhYCiAgKiBub3QgZXZlbiBpbiB0aGUgRVhFQ19CQUNLRU5EIGNhc2UuICBUaGUgUHJv Y0dsb2JhbCBhbmQgQXV4aWxpYXJ5UHJvY3MKICAqIHBvaW50ZXJzIG11c3QgYmUgcHJvcGFnYXRl ZCBzcGVjaWFsbHkgZm9yIEVYRUNfQkFDS0VORCBvcGVyYXRpb24uCiAgKi8KIHZvaWQKLUluaXRQ cm9jR2xvYmFsKHZvaWQpCitQcm9jR2xvYmFsU2htZW1SZWdpc3Rlcih2b2lkKQoreworCVNpemUJ CXNpemUgPSAwOworCisJLyoKKwkgKiBSZXNlcnZlIGFsbCB0aGUgUEdQUk9DIHN0cnVjdHVyZXMg d2UnbGwgbmVlZC4gIFRoZXJlIGFyZQorCSAqIHNpeCBzZXBhcmF0ZSBjb25zdW1lcnM6ICgxKSBu b3JtYWwgYmFja2VuZHMsICgyKSBhdXRvdmFjdXVtIHdvcmtlcnMgYW5kCisJICogc3BlY2lhbCB3 b3JrZXJzLCAoMykgYmFja2dyb3VuZCB3b3JrZXJzLCAoNCkgd2Fsc2VuZGVycywgKDUpIGF1eGls aWFyeQorCSAqIHByb2Nlc3NlcywgYW5kICg2KSBwcmVwYXJlZCB0cmFuc2FjdGlvbnMuICAoRm9y IGxhcmdlbHktaGlzdG9yaWNhbAorCSAqIHJlYXNvbnMsIHdlIGNvbWJpbmUgYXV0b3ZhY3V1bSBh bmQgc3BlY2lhbCB3b3JrZXJzIGludG8gb25lIGNhdGVnb3J5CisJICogd2l0aCBhIHNpbmdsZSBm cmVlbGlzdC4pICBFYWNoIFBHUFJPQyBzdHJ1Y3R1cmUgaXMgZGVkaWNhdGVkIHRvIGV4YWN0bHkK KwkgKiBvbmUgb2YgdGhlc2UgcHVycG9zZXMsIGFuZCB0aGV5IGRvIG5vdCBtb3ZlIGJldHdlZW4g Z3JvdXBzLgorCSAqLworCVRvdGFsUHJvY3MgPQorCQlhZGRfc2l6ZShNYXhCYWNrZW5kcywgYWRk X3NpemUoTlVNX0FVWElMSUFSWV9QUk9DUywgbWF4X3ByZXBhcmVkX3hhY3RzKSk7CisKKwlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoVG90YWxQcm9jcywgc2l6ZW9mKFBHUFJPQykpKTsK KworCS8qIEZJWE1FOiB0aGUgc2l6ZW9mcyBsb29rIGRhbmdlcm91cyBiZWNhdXNlIFByb2NHbG9i YWwgaXMgbm90IGluaXRpYWxpemVkIHlldCAqLworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxf c2l6ZShUb3RhbFByb2NzLCBzaXplb2YoKlByb2NHbG9iYWwtPnhpZHMpKSk7CisJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZigqUHJvY0dsb2JhbC0+c3Vi eGlkU3RhdGVzKSkpOworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShUb3RhbFByb2Nz LCBzaXplb2YoKlByb2NHbG9iYWwtPnN0YXR1c0ZsYWdzKSkpOworCisJUHJvY0dsb2JhbEFsbFBy b2NzU2htZW1EZXNjLnNpemUgPSBzaXplOworCVNobWVtUmVnaXN0ZXJTdHJ1Y3QoJlByb2NHbG9i YWxBbGxQcm9jc1NobWVtRGVzYyk7CisKKwlGYXN0UGF0aExvY2tBcnJheVNobWVtRGVzYy5zaXpl ID0gRmFzdFBhdGhMb2NrU2htZW1TaXplKCk7CisJU2htZW1SZWdpc3RlclN0cnVjdCgmRmFzdFBh dGhMb2NrQXJyYXlTaG1lbURlc2MpOworCisJLyoKKwkgKiBDcmVhdGUgdGhlIFByb2NHbG9iYWwg c2hhcmVkIHN0cnVjdHVyZSBsYXN0LiBJdHMgaW5pdCBjYWxsYmFjaworCSAqIGluaXRpYWxpemVz IHRoZSBvdGhlcnMgdG9vLgorCSAqLworCVNobWVtUmVnaXN0ZXJTdHJ1Y3QoJlByb2NHbG9iYWxT aG1lbURlc2MpOworfQorCitzdGF0aWMgdm9pZAorUHJvY0dsb2JhbFNobWVtSW5pdCh2b2lkICph cmcpCiB7CisJY2hhcgkgICAqcHRyOworCXNpemVfdAkJcmVxdWVzdFNpemU7CiAJUEdQUk9DCSAg ICpwcm9jczsKIAlpbnQJCQlpLAogCQkJCWo7Ci0JYm9vbAkJZm91bmQ7Ci0JdWludDMyCQlUb3Rh bFByb2NzID0gTWF4QmFja2VuZHMgKyBOVU1fQVVYSUxJQVJZX1BST0NTICsgbWF4X3ByZXBhcmVk X3hhY3RzOwotCiAJLyogVXNlZCBmb3Igc2V0dXAgb2YgcGVyLWJhY2tlbmQgZmFzdC1wYXRoIHNs b3RzLiAqLwogCWNoYXIJICAgKmZwUHRyLAogCQkJICAgKmZwRW5kUHRyIFBHX1VTRURfRk9SX0FT U0VSVFNfT05MWTsKIAlTaXplCQlmcExvY2tCaXRzU2l6ZSwKIAkJCQlmcFJlbElkU2l6ZTsKLQlT aXplCQlyZXF1ZXN0U2l6ZTsKLQljaGFyCSAgICpwdHI7CiAKLQkvKiBDcmVhdGUgdGhlIFByb2NH bG9iYWwgc2hhcmVkIHN0cnVjdHVyZSAqLwotCVByb2NHbG9iYWwgPSAoUFJPQ19IRFIgKikKLQkJ U2htZW1Jbml0U3RydWN0KCJQcm9jIEhlYWRlciIsIHNpemVvZihQUk9DX0hEUiksICZmb3VuZCk7 Ci0JQXNzZXJ0KCFmb3VuZCk7CisJUHJvY0dsb2JhbCA9IFByb2NHbG9iYWxTaG1lbURlc2MucHRy OwogCi0JLyoKLQkgKiBJbml0aWFsaXplIHRoZSBkYXRhIHN0cnVjdHVyZXMuCi0JICovCiAJUHJv Y0dsb2JhbC0+c3BpbnNfcGVyX2RlbGF5ID0gREVGQVVMVF9TUElOU19QRVJfREVMQVk7CiAJZGxp c3RfaW5pdCgmUHJvY0dsb2JhbC0+ZnJlZVByb2NzKTsKIAlkbGlzdF9pbml0KCZQcm9jR2xvYmFs LT5hdXRvdmFjRnJlZVByb2NzKTsKQEAgLTIyNSwyMyArMjM0LDExIEBAIEluaXRQcm9jR2xvYmFs KHZvaWQpCiAJUHJvY0dsb2JhbC0+Y2hlY2twb2ludGVyUHJvYyA9IElOVkFMSURfUFJPQ19OVU1C RVI7CiAJcGdfYXRvbWljX2luaXRfdTMyKCZQcm9jR2xvYmFsLT5wcm9jQXJyYXlHcm91cEZpcnN0 LCBJTlZBTElEX1BST0NfTlVNQkVSKTsKIAlwZ19hdG9taWNfaW5pdF91MzIoJlByb2NHbG9iYWwt PmNsb2dHcm91cEZpcnN0LCBJTlZBTElEX1BST0NfTlVNQkVSKTsKKwlTcGluTG9ja0luaXQoUHJv Y1N0cnVjdExvY2spOwogCi0JLyoKLQkgKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYWxsIHRoZSBQ R1BST0Mgc3RydWN0dXJlcyB3ZSdsbCBuZWVkLiAgVGhlcmUgYXJlCi0JICogc2l4IHNlcGFyYXRl IGNvbnN1bWVyczogKDEpIG5vcm1hbCBiYWNrZW5kcywgKDIpIGF1dG92YWN1dW0gd29ya2VycyBh bmQKLQkgKiBzcGVjaWFsIHdvcmtlcnMsICgzKSBiYWNrZ3JvdW5kIHdvcmtlcnMsICg0KSB3YWxz ZW5kZXJzLCAoNSkgYXV4aWxpYXJ5Ci0JICogcHJvY2Vzc2VzLCBhbmQgKDYpIHByZXBhcmVkIHRy YW5zYWN0aW9ucy4gIChGb3IgbGFyZ2VseS1oaXN0b3JpY2FsCi0JICogcmVhc29ucywgd2UgY29t YmluZSBhdXRvdmFjdXVtIGFuZCBzcGVjaWFsIHdvcmtlcnMgaW50byBvbmUgY2F0ZWdvcnkKLQkg KiB3aXRoIGEgc2luZ2xlIGZyZWVsaXN0LikgIEVhY2ggUEdQUk9DIHN0cnVjdHVyZSBpcyBkZWRp Y2F0ZWQgdG8gZXhhY3RseQotCSAqIG9uZSBvZiB0aGVzZSBwdXJwb3NlcywgYW5kIHRoZXkgZG8g bm90IG1vdmUgYmV0d2VlbiBncm91cHMuCi0JICovCi0JcmVxdWVzdFNpemUgPSBQR1Byb2NTaG1l bVNpemUoKTsKLQotCXB0ciA9IFNobWVtSW5pdFN0cnVjdCgiUEdQUk9DIHN0cnVjdHVyZXMiLAot CQkJCQkJICByZXF1ZXN0U2l6ZSwKLQkJCQkJCSAgJmZvdW5kKTsKLQotCU1lbVNldChwdHIsIDAs IHJlcXVlc3RTaXplKTsKKwlwdHIgPSBQcm9jR2xvYmFsQWxsUHJvY3NTaG1lbURlc2MucHRyOwor CXJlcXVlc3RTaXplID0gUHJvY0dsb2JhbEFsbFByb2NzU2htZW1EZXNjLnNpemU7CisJbWVtc2V0 KHB0ciwgMCwgcmVxdWVzdFNpemUpOwogCiAJcHJvY3MgPSAoUEdQUk9DICopIHB0cjsKIAlwdHIg PSBwdHIgKyBUb3RhbFByb2NzICogc2l6ZW9mKFBHUFJPQyk7CkBAIC0yNzcsMjAgKzI3NCwxMyBA QCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCWZwTG9ja0JpdHNTaXplID0gTUFYQUxJR04oRmFzdFBh dGhMb2NrR3JvdXBzUGVyQmFja2VuZCAqIHNpemVvZih1aW50NjQpKTsKIAlmcFJlbElkU2l6ZSA9 IE1BWEFMSUdOKEZhc3RQYXRoTG9ja1Nsb3RzUGVyQmFja2VuZCgpICogc2l6ZW9mKE9pZCkpOwog Ci0JcmVxdWVzdFNpemUgPSBGYXN0UGF0aExvY2tTaG1lbVNpemUoKTsKLQotCWZwUHRyID0gU2ht ZW1Jbml0U3RydWN0KCJGYXN0LVBhdGggTG9jayBBcnJheSIsCi0JCQkJCQkJcmVxdWVzdFNpemUs Ci0JCQkJCQkJJmZvdW5kKTsKLQotCU1lbVNldChmcFB0ciwgMCwgcmVxdWVzdFNpemUpOworCWZw UHRyID0gRmFzdFBhdGhMb2NrQXJyYXlTaG1lbURlc2MucHRyOworCXJlcXVlc3RTaXplID0gRmFz dFBhdGhMb2NrQXJyYXlTaG1lbURlc2Muc2l6ZTsKKwltZW1zZXQoZnBQdHIsIDAsIHJlcXVlc3RT aXplKTsKIAogCS8qIEZvciBhc3NlcnRzIGNoZWNraW5nIHdlIGRpZCBub3Qgb3ZlcmZsb3cuICov CiAJZnBFbmRQdHIgPSBmcFB0ciArIHJlcXVlc3RTaXplOwogCi0JLyogUmVzZXJ2ZSBzcGFjZSBm b3Igc2VtYXBob3Jlcy4gKi8KLQlQR1Jlc2VydmVTZW1hcGhvcmVzKFByb2NHbG9iYWxTZW1hcygp KTsKLQogCWZvciAoaSA9IDA7IGkgPCBUb3RhbFByb2NzOyBpKyspCiAJewogCQlQR1BST0MJICAg KnByb2MgPSAmcHJvY3NbaV07CkBAIC0zODAsMTIgKzM3MCw2IEBAIEluaXRQcm9jR2xvYmFsKHZv aWQpCiAJICovCiAJQXV4aWxpYXJ5UHJvY3MgPSAmcHJvY3NbTWF4QmFja2VuZHNdOwogCVByZXBh cmVkWGFjdFByb2NzID0gJnByb2NzW01heEJhY2tlbmRzICsgTlVNX0FVWElMSUFSWV9QUk9DU107 Ci0KLQkvKiBDcmVhdGUgUHJvY1N0cnVjdExvY2sgc3BpbmxvY2ssIHRvbyAqLwotCVByb2NTdHJ1 Y3RMb2NrID0gKHNsb2NrX3QgKikgU2htZW1Jbml0U3RydWN0KCJQcm9jU3RydWN0TG9jayBzcGlu bG9jayIsCi0JCQkJCQkJCQkJCQkgc2l6ZW9mKHNsb2NrX3QpLAotCQkJCQkJCQkJCQkJICZmb3Vu ZCk7Ci0JU3BpbkxvY2tJbml0KFByb2NTdHJ1Y3RMb2NrKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMu YwppbmRleCAwMmU5YWFhNmJjYS4uZWVkMTg4NDE2ZWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKQEAgLTQx MTcsNiArNDExNyw4IEBAIFBvc3RncmVzU2luZ2xlVXNlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSwKIAkgKiBzaGFyZWQgbWVtb3J5LCBkZXRlcm1pbmUgdGhlIHZhbHVlIG9mIGFueSBydW50 aW1lLWNvbXB1dGVkIEdVQ3MgdGhhdAogCSAqIGRlcGVuZCBvbiB0aGUgYW1vdW50IG9mIHNoYXJl ZCBtZW1vcnkgcmVxdWlyZWQuCiAJICovCisJUmVnaXN0ZXJTaG1lbVN0cnVjdHMoKTsKKwogCUlu aXRpYWxpemVTaG1lbUdVQ3MoKTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvdHJhbnNhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaAppbmRleCA2ZmE5MWJm Y2RjMC4uNDlkNDc2ZTlkNWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2Ft LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaApAQCAtMTUsNyArMTUsOSBAQAog I2RlZmluZSBUUkFOU0FNX0gKIAogI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgotCisjaWZu ZGVmIEZST05URU5ECisjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgorI2VuZGlmCiAKIC8qIC0t LS0tLS0tLS0tLS0tLS0KICAqCQlTcGVjaWFsIHRyYW5zYWN0aW9uIElEIHZhbHVlcwpAQCAtMzMw LDcgKzMzMiwxMCBAQCBUcmFuc2FjdGlvbklkRm9sbG93c09yRXF1YWxzKFRyYW5zYWN0aW9uSWQg aWQxLCBUcmFuc2FjdGlvbklkIGlkMikKIGV4dGVybiBib29sIFRyYW5zYWN0aW9uU3RhcnRlZER1 cmluZ1JlY292ZXJ5KHZvaWQpOwogCiAvKiBpbiB0cmFuc2FtL3ZhcnN1cC5jICovCi1leHRlcm4g UEdETExJTVBPUlQgVHJhbnNhbVZhcmlhYmxlc0RhdGEgKlRyYW5zYW1WYXJpYWJsZXM7CisjaWZu ZGVmIEZST05URU5ECitleHRlcm4gUEdETExJTVBPUlQgc3RydWN0IFNobWVtU3RydWN0RGVzYyBU cmFuc2FtVmFyaWFibGVzU2htZW1EZXNjOworI2RlZmluZSBUcmFuc2FtVmFyaWFibGVzICgoVHJh bnNhbVZhcmlhYmxlc0RhdGEgKikgVHJhbnNhbVZhcmlhYmxlc1NobWVtRGVzYy5wdHIpCisjZW5k aWYKIAogLyoKICAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiB0cmFuc2FtL3RyYW5zYW0u YwpAQCAtMzQ1LDggKzM1MCw3IEBAIGV4dGVybiBUcmFuc2FjdGlvbklkIFRyYW5zYWN0aW9uSWRM YXRlc3QoVHJhbnNhY3Rpb25JZCBtYWlueGlkLAogZXh0ZXJuIFhMb2dSZWNQdHIgVHJhbnNhY3Rp b25JZEdldENvbW1pdExTTihUcmFuc2FjdGlvbklkIHhpZCk7CiAKIC8qIGluIHRyYW5zYW0vdmFy c3VwLmMgKi8KLWV4dGVybiBTaXplIFZhcnN1cFNobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lk IFZhcnN1cFNobWVtSW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIFZhcnN1cFNobWVtUmVnaXN0ZXIo dm9pZCk7CiBleHRlcm4gRnVsbFRyYW5zYWN0aW9uSWQgR2V0TmV3VHJhbnNhY3Rpb25JZChib29s IGlzU3ViWGFjdCk7CiBleHRlcm4gdm9pZCBBZHZhbmNlTmV4dEZ1bGxUcmFuc2FjdGlvbklkUGFz dFhpZChUcmFuc2FjdGlvbklkIHhpZCk7CiBleHRlcm4gRnVsbFRyYW5zYWN0aW9uSWQgUmVhZE5l eHRGdWxsVHJhbnNhY3Rpb25JZCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvZHNtX3JlZ2lzdHJ5LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2RzbV9yZWdpc3RyeS5oCmlu ZGV4IDUwNmZhZTJjOWNhLi45YTFiNGQ5ODJhZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9kc21fcmVnaXN0cnkuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2RzbV9yZWdpc3Ry eS5oCkBAIC0yMiw3ICsyMiw2IEBAIGV4dGVybiBkc2FfYXJlYSAqR2V0TmFtZWREU0EoY29uc3Qg Y2hhciAqbmFtZSwgYm9vbCAqZm91bmQpOwogZXh0ZXJuIGRzaGFzaF90YWJsZSAqR2V0TmFtZWRE U0hhc2goY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJCQkJCWNvbnN0IGRzaGFzaF9wYXJhbWV0ZXJz ICpwYXJhbXMsCiAJCQkJCQkJCQlib29sICpmb3VuZCk7Ci1leHRlcm4gU2l6ZSBEU01SZWdpc3Ry eVNobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIERTTVJlZ2lzdHJ5U2htZW1Jbml0KHZvaWQp OworZXh0ZXJuIHZvaWQgRFNNUmVnaXN0cnlTaG1lbVJlZ2lzdGVyKHZvaWQpOwogCiAjZW5kaWYJ CQkJCQkJLyogRFNNX1JFR0lTVFJZX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvaXBjLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2lwYy5oCmluZGV4IGRhMzI3ODdhYjUxLi44 YTNiNzFhZDVkMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9pcGMuaAorKysgYi9z cmMvaW5jbHVkZS9zdG9yYWdlL2lwYy5oCkBAIC03Nyw2ICs3Nyw3IEBAIGV4dGVybiB2b2lkIGNo ZWNrX29uX3NobWVtX2V4aXRfbGlzdHNfYXJlX2VtcHR5KHZvaWQpOwogLyogaXBjaS5jICovCiBl eHRlcm4gUEdETExJTVBPUlQgc2htZW1fc3RhcnR1cF9ob29rX3R5cGUgc2htZW1fc3RhcnR1cF9o b29rOwogCitleHRlcm4gdm9pZCBSZWdpc3RlclNobWVtU3RydWN0cyh2b2lkKTsKIGV4dGVybiBT aXplIENhbGN1bGF0ZVNobWVtU2l6ZSh2b2lkKTsKIGV4dGVybiB2b2lkIENyZWF0ZVNoYXJlZE1l bW9yeUFuZFNlbWFwaG9yZXModm9pZCk7CiAjaWZkZWYgRVhFQ19CQUNLRU5ECmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Btc2lnbmFsLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Bt c2lnbmFsLmgKaW5kZXggMjA2ZmI3OGY4YTUuLjdjZGM0ODUyMzM0IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9zdG9yYWdlL3Btc2lnbmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wbXNp Z25hbC5oCkBAIC02Niw4ICs2Niw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBQTVNp Z25hbERhdGEgKlBNU2lnbmFsU3RhdGU7CiAvKgogICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25z IGluIHBtc2lnbmFsLmMKICAqLwotZXh0ZXJuIFNpemUgUE1TaWduYWxTaG1lbVNpemUodm9pZCk7 Ci1leHRlcm4gdm9pZCBQTVNpZ25hbFNobWVtSW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIFBNU2ln bmFsU2htZW1SZWdpc3Rlcih2b2lkKTsKIGV4dGVybiB2b2lkIFNlbmRQb3N0bWFzdGVyU2lnbmFs KFBNU2lnbmFsUmVhc29uIHJlYXNvbik7CiBleHRlcm4gYm9vbCBDaGVja1Bvc3RtYXN0ZXJTaWdu YWwoUE1TaWduYWxSZWFzb24gcmVhc29uKTsKIGV4dGVybiB2b2lkIFNldFF1aXRTaWduYWxSZWFz b24oUXVpdFNpZ25hbFJlYXNvbiByZWFzb24pOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9wcm9jLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaAppbmRleCA2NzlmMDYyNGY5 Mi4uMzcwMjNlMWE5M2YgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCisr KyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCkBAIC00MTgsNiArNDE4LDkgQEAgdHlwZWRl ZiBzdHJ1Y3QgUFJPQ19IRFIKIAlkbGlzdF9oZWFkCWJnd29ya2VyRnJlZVByb2NzOwogCS8qIEhl YWQgb2YgbGlzdCBvZiB3YWxzZW5kZXIgZnJlZSBQR1BST0Mgc3RydWN0dXJlcyAqLwogCWRsaXN0 X2hlYWQJd2Fsc2VuZGVyRnJlZVByb2NzOworCisJc2xvY2tfdAkJZnJlZVByb2NzTG9jazsKKwog CS8qIEZpcnN0IHBncHJvYyB3YWl0aW5nIGZvciBncm91cCBYSUQgY2xlYXIgKi8KIAlwZ19hdG9t aWNfdWludDMyIHByb2NBcnJheUdyb3VwRmlyc3Q7CiAJLyogRmlyc3QgcGdwcm9jIHdhaXRpbmcg Zm9yIGdyb3VwIHRyYW5zYWN0aW9uIHN0YXR1cyB1cGRhdGUgKi8KQEAgLTQ4OCw3ICs0OTEsNyBA QCBleHRlcm4gUEdETExJTVBPUlQgUEdQUk9DICpBdXhpbGlhcnlQcm9jczsKICAqIEZ1bmN0aW9u IFByb3RvdHlwZXMKICAqLwogZXh0ZXJuIGludAlQcm9jR2xvYmFsU2VtYXModm9pZCk7Ci1leHRl cm4gU2l6ZSBQcm9jR2xvYmFsU2htZW1TaXplKHZvaWQpOworZXh0ZXJuIHZvaWQgUHJvY0dsb2Jh bFNobWVtUmVnaXN0ZXIodm9pZCk7CiBleHRlcm4gdm9pZCBJbml0UHJvY0dsb2JhbCh2b2lkKTsK IGV4dGVybiB2b2lkIEluaXRQcm9jZXNzKHZvaWQpOwogZXh0ZXJuIHZvaWQgSW5pdFByb2Nlc3NQ aGFzZTIodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5o IGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaAppbmRleCAzYTg1OTNmODdiYS4uNDE3 NTNjM2E2MzAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmgKKysr IGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaApAQCAtMjAsOCArMjAsNyBAQAogI2lu Y2x1ZGUgInV0aWxzL3NuYXBzaG90LmgiCiAKIAotZXh0ZXJuIFNpemUgUHJvY0FycmF5U2htZW1T aXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgUHJvY0FycmF5U2htZW1Jbml0KHZvaWQpOworZXh0ZXJu IHZvaWQgUHJvY0FycmF5U2htZW1SZWdpc3Rlcih2b2lkKTsKIGV4dGVybiB2b2lkIFByb2NBcnJh eUFkZChQR1BST0MgKnByb2MpOwogZXh0ZXJuIHZvaWQgUHJvY0FycmF5UmVtb3ZlKFBHUFJPQyAq cHJvYywgVHJhbnNhY3Rpb25JZCBsYXRlc3RYaWQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL3Byb2NzaWduYWwuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5o CmluZGV4IGU1MmI4ZWI3Njk3Li5mMmRmMWYzMGM1ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9wcm9jc2lnbmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFs LmgKQEAgLTcxLDggKzcxLDcgQEAgdHlwZWRlZiBlbnVtCiAvKgogICogcHJvdG90eXBlcyBmb3Ig ZnVuY3Rpb25zIGluIHByb2NzaWduYWwuYwogICovCi1leHRlcm4gU2l6ZSBQcm9jU2lnbmFsU2ht ZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgUHJvY1NpZ25hbFNobWVtSW5pdCh2b2lkKTsKK2V4 dGVybiB2b2lkIFByb2NTaWduYWxTaG1lbVJlZ2lzdGVyKHZvaWQpOwogCiBleHRlcm4gdm9pZCBQ cm9jU2lnbmFsSW5pdChjb25zdCB1aW50OCAqY2FuY2VsX2tleSwgaW50IGNhbmNlbF9rZXlfbGVu KTsKIGV4dGVybiBpbnQJU2VuZFByb2NTaWduYWwocGlkX3QgcGlkLCBQcm9jU2lnbmFsUmVhc29u IHJlYXNvbiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaCBiL3NyYy9p bmNsdWRlL3N0b3JhZ2Uvc2htZW0uaAppbmRleCA4OWQ0NTI4N2MxNy4uNDBlMmZjMTcwNTYgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaAorKysgYi9zcmMvaW5jbHVkZS9z dG9yYWdlL3NobWVtLmgKQEAgLTI0LDYgKzI0LDUzIEBACiAjaW5jbHVkZSAic3RvcmFnZS9zcGlu LmgiCiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgogCit0eXBlZGVmIHZvaWQgKCpTaG1lbUlu aXRDYWxsYmFjaykgKHZvaWQgKmFyZyk7Cit0eXBlZGVmIHZvaWQgKCpTaG1lbUF0dGFjaENhbGxi YWNrKSAodm9pZCAqYXJnKTsKKworLyoKKyAqIERlc2NyaXB0b3IgZm9yIGEgbmFtZWQgYXJlYSBv ciBzdHJ1Y3QgaW4gc2hhcmVkIG1lbW9yeQorICovCit0eXBlZGVmIHN0cnVjdCBTaG1lbVN0cnVj dERlc2MKK3sKKwkvKiBOYW1lIG9mIHRoZSBzaGFyZWQgbWVtb3J5IGFyZWEuIE11c3QgYmUgdW5p cXVlIGFjcm9zcyB0aGUgc3lzdGVtICovCisJY29uc3QgY2hhciAqbmFtZTsKKworCXNpemVfdAkJ c2l6ZTsKKworCXNpemVfdAkJYWxpZ25tZW50OworCVNobWVtSW5pdENhbGxiYWNrIGluaXRfZm47 CisJU2htZW1Jbml0Q2FsbGJhY2sgYXR0YWNoX2ZuOworCXZvaWQJICAgKmluaXRfZm5fYXJnOwor CXZvaWQJICAgKmF0dGFjaF9mbl9hcmc7CisKKwkvKgorCSAqIEV4dHJhIHNwYWNlIHRvIGFsbG9j YXRlZCBpbiB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50LCBidXQgaXQncyBub3QKKwkgKiBwYXJ0 IG9mIHRoZSBzdHJ1Y3QgaXRzZWxmLiBUaGlzIGlzIHVzZWQgZm9yIHNoYXJlZCBtZW1vcnkgaGFz aCB0YWJsZXMKKwkgKiB0aGF0IGNhbiBncm93IGJleW9uZCB0aGUgaW5pdGlhbCBzaXplIHdoZW4g bW9yZSBidWNrZXRzIGFyZSBhbGxvY2F0ZWQuCisJICovCisJc2l6ZV90CQlleHRyYV9zaXplOwor CisJLyogUG9pbnRlciB0byB0aGUgc2hhcmVkIG1lbW9yeSBhcmVhLCB3aGVuIGl0J3MgYWxsb2Nh dGVkLiAqLworCXZvaWQJICAgKnB0cjsKK30gU2htZW1TdHJ1Y3REZXNjOworCisvKgorICogRGVz Y3JpcHRvciBmb3Igc2hhcmVkIG1lbW9yeSBoYXNoIHRhYmxlCisgKi8KK3R5cGVkZWYgc3RydWN0 IFNobWVtSGFzaERlc2MKK3sKKwljb25zdCBjaGFyICpuYW1lOworCisJaW50CQkJaGFzaF9mbGFn czsKKworCXNpemVfdAkJaW5pdF9zaXplOwkJLyogaW5pdGlhbCBudW1iZXIgb2YgZW50cmllcyAq LworCXNpemVfdAkJbWF4X3NpemU7CQkvKiBtYXggbnVtYmVyIG9mIGVudHJpZXMgKi8KKwlIQVNI Q1RMCSAgICppbmZvUDsKKworCUhUQUIJICAgKnB0cjsKKworCVNobWVtU3RydWN0RGVzYwliYXNl X2Rlc2M7Cit9IFNobWVtSGFzaERlc2M7CiAKIC8qIHNobWVtLmMgKi8KIGV4dGVybiBQR0RMTElN UE9SVCBzbG9ja190ICpTaG1lbUxvY2s7CkBAIC0zNCw5ICs4MSwxOSBAQCBleHRlcm4gdm9pZCAq U2htZW1BbGxvYyhTaXplIHNpemUpOwogZXh0ZXJuIHZvaWQgKlNobWVtQWxsb2NOb0Vycm9yKFNp emUgc2l6ZSk7CiBleHRlcm4gYm9vbCBTaG1lbUFkZHJJc1ZhbGlkKGNvbnN0IHZvaWQgKmFkZHIp OwogZXh0ZXJuIHZvaWQgSW5pdFNobWVtSW5kZXgodm9pZCk7CisKK2V4dGVybiB2b2lkIFNobWVt UmVnaXN0ZXJIYXNoKFNobWVtSGFzaERlc2MgKmRlc2MsIEhBU0hDVEwgKmluZm9QLCBpbnQgaGFz aF9mbGFncyk7CitleHRlcm4gdm9pZCBTaG1lbVJlZ2lzdGVyU3RydWN0KFNobWVtU3RydWN0RGVz YyAqZGVzYyk7CisKKy8qIExlZ2FjeSBmdW5jdGlvbnMgKi8KIGV4dGVybiBIVEFCICpTaG1lbUlu aXRIYXNoKGNvbnN0IGNoYXIgKm5hbWUsIGludDY0IGluaXRfc2l6ZSwgaW50NjQgbWF4X3NpemUs CiAJCQkJCQkgICBIQVNIQ1RMICppbmZvUCwgaW50IGhhc2hfZmxhZ3MpOwogZXh0ZXJuIHZvaWQg KlNobWVtSW5pdFN0cnVjdChjb25zdCBjaGFyICpuYW1lLCBTaXplIHNpemUsIGJvb2wgKmZvdW5k UHRyKTsKKworZXh0ZXJuIHNpemVfdCBTaG1lbVJlZ2lzdGVyZWRTaXplKHZvaWQpOworZXh0ZXJu IHZvaWQgU2htZW1Jbml0UmVnaXN0ZXJlZCh2b2lkKTsKK2V4dGVybiB2b2lkIFNobWVtQXR0YWNo UmVnaXN0ZXJlZCh2b2lkKTsKKwogZXh0ZXJuIFNpemUgYWRkX3NpemUoU2l6ZSBzMSwgU2l6ZSBz Mik7CiBleHRlcm4gU2l6ZSBtdWxfc2l6ZShTaXplIHMxLCBTaXplIHMyKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaW52YWxhZHQuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv c2ludmFsYWR0LmgKaW5kZXggYTE2OTQ1MDBhODUuLjRlZGJhMjkzNmU2IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9zdG9yYWdlL3NpbnZhbGFkdC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv c2ludmFsYWR0LmgKQEAgLTI4LDggKzI4LDcgQEAKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBmdW5j dGlvbnMgaW4gc2ludmFsYWR0LmMKICAqLwotZXh0ZXJuIFNpemUgU2hhcmVkSW52YWxTaG1lbVNp emUodm9pZCk7Ci1leHRlcm4gdm9pZCBTaGFyZWRJbnZhbFNobWVtSW5pdCh2b2lkKTsKK2V4dGVy biB2b2lkIFNoYXJlZEludmFsU2htZW1SZWdpc3Rlcih2b2lkKTsKIGV4dGVybiB2b2lkIFNoYXJl ZEludmFsQmFja2VuZEluaXQoYm9vbCBzZW5kT25seSk7CiAKIGV4dGVybiB2b2lkIFNJSW5zZXJ0 RGF0YUVudHJpZXMoY29uc3QgU2hhcmVkSW52YWxpZGF0aW9uTWVzc2FnZSAqZGF0YSwgaW50IG4p OwoKYmFzZS1jb21taXQ6IGM2N2JlZjNmMzI1MmEzYTM4YmYzNDdmOWYxMTk5NDQxNzZhNzk2Y2UK LS0gCjIuMzQuMQoK --000000000000009b35064b7e64e5 Content-Type: text/x-patch; charset="US-ASCII"; name="0002-Get-rid-of-global-shared-memory-pointer-mac-20260223.patch" Content-Disposition: attachment; filename="0002-Get-rid-of-global-shared-memory-pointer-mac-20260223.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlz9ckbc1 RnJvbSAzOTVhOTVlOTkzNDI4Njg2OWIxZmU4ZDQ1ZGM1YTE1NWVhOWJlMDMwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBc2h1dG9zaCBCYXBhdCA8YXNodXRvc2guYmFwYXQub3NzQGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAxMCBGZWIgMjAyNiAyMDoyNjozMSArMDUzMApTdWJqZWN0OiBb UEFUQ0ggMi8zXSBHZXQgcmlkIG9mIGdsb2JhbCBzaGFyZWQgbWVtb3J5IHBvaW50ZXIgbWFjcm8K IGRlY2xhcmF0aW9ucwoKLS0tCiAuLi4vcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVt ZW50cy5jICAgfCAxMCArKysrLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS92YXJzdXAu YyAgICAgICAgICAgfCAgNSArKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc20uYyAgICAg ICAgICAgICAgICAgfCAgNSArKy0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21fcmVnaXN0 cnkuYyAgICAgICAgfCAgNCArKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Btc2lnbmFsLmMg ICAgICAgICAgICB8IDE4ICsrKysrLS0tLS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJv Y2FycmF5LmMgICAgICAgICAgIHwgMTMgKysrKystLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9wcm9jc2lnbmFsLmMgICAgICAgICAgfCAgNCArKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3NobWVtLmMgICAgICAgICAgICAgICB8IDI5ICsrKysrKysrKysrKy0tLS0tLS0KIHNyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL3NpbnZhbGFkdC5jICAgICAgICAgICB8ICA3ICsrKy0tCiBzcmMvYmFj a2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jICAgICAgICAgICAgICAgfCAyNSArKysrKysrKysrLS0t LS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdHJhbnNhbS5oICAgICAgICAgICAgICAgICAgfCAgMiAr LQogc3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5oICAgICAgICAgICAgICAgICAgIHwgIDYgKyst LQogMTIgZmlsZXMgY2hhbmdlZCwgNzcgaW5zZXJ0aW9ucygrKSwgNTEgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRz LmMgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYwppbmRl eCA3MWRlYmM4YjQ3Zi4uNzNmZGY1NjE0MTkgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfc3RhdF9z dGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCisrKyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0 ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCkBAIC0yNTgsMjQgKzI1OCwyNiBAQCB0eXBlZGVm IHN0cnVjdCBwZ3NzU2hhcmVkU3RhdGUKIAlwZ3NzR2xvYmFsU3RhdHMgc3RhdHM7CQkvKiBnbG9i YWwgc3RhdGlzdGljcyBmb3IgcGdzcyAqLwogfSBwZ3NzU2hhcmVkU3RhdGU7CiAKKy8qIExpbmtz IHRvIHNoYXJlZCBtZW1vcnkgc3RhdGUgKi8KK3Bnc3NTaGFyZWRTdGF0ZSAqcGdzcyA9IE5VTEw7 CitIVEFCICpwZ3NzX2hhc2ggPSBOVUxMOworCiBzdGF0aWMgdm9pZCBwZ3NzX3NobWVtX2luaXQo dm9pZCAqYXJnKTsKIAogc3RhdGljIFNobWVtU3RydWN0RGVzYyBwZ3NzU2hhcmVkU3RhdGVTaG1l bURlc2MgPSB7CiAJLm5hbWUgPSAicGdfc3RhdF9zdGF0ZW1lbnRzIiwKIAkuc2l6ZSA9IHNpemVv ZihwZ3NzU2hhcmVkU3RhdGUpLAogCS5pbml0X2ZuID0gcGdzc19zaG1lbV9pbml0LAorCS5wdHIg PSAodm9pZCAqKSAmcGdzcywKIH07CiAKIHN0YXRpYyBTaG1lbUhhc2hEZXNjIHBnc3NTaGFyZWRI YXNoRGVzYyA9IHsKIAkubmFtZSA9ICJwZ19zdGF0X3N0YXRlbWVudHMgaGFzaCIsCiAJLmluaXRf c2l6ZSA9IDAsCQkvKiBzZXQgZnJvbSAncGdzc19tYXgnICovCiAJLm1heF9zaXplID0gMCwJCS8q IHNldCBmcm9tICdwZ3NzX21heCcgKi8KKwkucHRyID0gJnBnc3NfaGFzaCwKIH07CiAKLS8qIExp bmtzIHRvIHNoYXJlZCBtZW1vcnkgc3RhdGUgKi8KLSNkZWZpbmUgcGdzcyAoKHBnc3NTaGFyZWRT dGF0ZSAqKSBwZ3NzU2hhcmVkU3RhdGVTaG1lbURlc2MucHRyKQotI2RlZmluZSBwZ3NzX2hhc2gg KHBnc3NTaGFyZWRIYXNoRGVzYy5wdHIpCi0KIAogLyotLS0tIExvY2FsIHZhcmlhYmxlcyAtLS0t Ki8KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdmFyc3VwLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS92YXJzdXAuYwppbmRleCAxMWFkOTBlNzM3Mi4uM2Rm ZGE4NzVlODAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3ZhcnN1cC5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3ZhcnN1cC5jCkBAIC0zMiwxMCArMzIs MTQgQEAKIAogc3RhdGljIHZvaWQgVmFyc3VwU2htZW1Jbml0KHZvaWQgKmFyZyk7CiAKKy8qIHBv aW50ZXIgdG8gdmFyaWFibGVzIHN0cnVjdCBpbiBzaGFyZWQgbWVtb3J5ICovCitUcmFuc2FtVmFy aWFibGVzRGF0YSAqVHJhbnNhbVZhcmlhYmxlcyA9IE5VTEw7CisKIFNobWVtU3RydWN0RGVzYyBU cmFuc2FtVmFyaWFibGVzU2htZW1EZXNjID0gewogCS5uYW1lID0gIlRyYW5zYW1WYXJpYWJsZXMi LAogCS5zaXplID0gc2l6ZW9mKFRyYW5zYW1WYXJpYWJsZXNEYXRhKSwKIAkuaW5pdF9mbiA9IFZh cnN1cFNobWVtSW5pdCwKKwkucHRyID0gKHZvaWQgKiopICZUcmFuc2FtVmFyaWFibGVzLAogfTsK IAogLyoKQEAgLTQ5LDYgKzUzLDcgQEAgVmFyc3VwU2htZW1SZWdpc3Rlcih2b2lkKQogCiBzdGF0 aWMgdm9pZAogVmFyc3VwU2htZW1Jbml0KHZvaWQgKmFyZykKKwogewogCW1lbXNldChUcmFuc2Ft VmFyaWFibGVzLCAwLCBzaXplb2YoVHJhbnNhbVZhcmlhYmxlc0RhdGEpKTsKIH0KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvZHNtLmMKaW5kZXggNTVmNDZjNzY4N2UuLjczNjQ0ZWMzYmJiIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9kc20uYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9k c20uYwpAQCAtMTEwLDE0ICsxMTAsMTUgQEAgc3RhdGljIGJvb2wgZHNtX2luaXRfZG9uZSA9IGZh bHNlOwogLyogUHJlYWxsb2NhdGVkIERTTSBzcGFjZSBpbiB0aGUgbWFpbiBzaGFyZWQgbWVtb3J5 IHJlZ2lvbi4gKi8KIHN0YXRpYyB2b2lkIGRzbV9tYWluX3NwYWNlX2luaXQodm9pZCAqKTsKIAor c3RhdGljIHZvaWQgKmRzbV9tYWluX3NwYWNlX2JlZ2luID0gTlVMTDsKKwogc3RhdGljIFNobWVt U3RydWN0RGVzYyBkc21fbWFpbl9zcGFjZV9zaG1lbV9kZXNjID0gewogCS5uYW1lID0gIlByZWFs bG9jYXRlZCBEU00iLAogCS5zaXplID0gMCwgLyogZHluYW1pYyAqLwogCS5pbml0X2ZuID0gZHNt X21haW5fc3BhY2VfaW5pdCwKKwkucHRyID0gJmRzbV9tYWluX3NwYWNlX2JlZ2luLAogfTsKIAot I2RlZmluZSBkc21fbWFpbl9zcGFjZV9iZWdpbiAoZHNtX21haW5fc3BhY2Vfc2htZW1fZGVzYy5w dHIpCi0KIC8qCiAgKiBMaXN0IG9mIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50cyB1c2Vk IGJ5IHRoaXMgYmFja2VuZC4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9kc21fcmVnaXN0cnkuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9yZWdpc3RyeS5j CmluZGV4IDg4MmFmODNiN2IyLi4xNjU5ZTFkZDcxZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvZHNtX3JlZ2lzdHJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv ZHNtX3JlZ2lzdHJ5LmMKQEAgLTU2LDEzICs1NiwxNSBAQCB0eXBlZGVmIHN0cnVjdCBEU01SZWdp c3RyeUN0eFN0cnVjdAogCiBzdGF0aWMgdm9pZCBEU01SZWdpc3RyeUN0eFNobWVtSW5pdCh2b2lk ICphcmcpOwogCitEU01SZWdpc3RyeUN0eFN0cnVjdCAqRFNNUmVnaXN0cnlDdHggPSBOVUxMOwor CiBzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIERTTVJlZ2lzdHJ5Q3R4U2htZW1EZXNjID0gewogCS5u YW1lID0gIkRTTSBSZWdpc3RyeSBEYXRhIiwKIAkuc2l6ZSA9IHNpemVvZihEU01SZWdpc3RyeUN0 eFN0cnVjdCksCiAJLmluaXRfZm4gPSBEU01SZWdpc3RyeUN0eFNobWVtSW5pdCwKKwkucHRyID0g KHZvaWQgKiopICZEU01SZWdpc3RyeUN0eCwKIH07CiAKLSNkZWZpbmUgRFNNUmVnaXN0cnlDdHgg KChEU01SZWdpc3RyeUN0eFN0cnVjdCAqKSBEU01SZWdpc3RyeUN0eFNobWVtRGVzYy5wdHIpCiAK IHR5cGVkZWYgc3RydWN0IE5hbWVkRFNNU3RhdGUKIHsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3Btc2lnbmFsLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wbXNpZ25h bC5jCmluZGV4IDIzNzUyNTAwZDE2Li4zYWEwMzgwZWFkZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvcG1zaWduYWwuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9w bXNpZ25hbC5jCkBAIC04MiwyMSArODIsMTcgQEAgc3RydWN0IFBNU2lnbmFsRGF0YQogCiBzdGF0 aWMgdm9pZCBQTVNpZ25hbFNobWVtSW5pdCh2b2lkICopOwogCi1zdGF0aWMgU2htZW1TdHJ1Y3RE ZXNjIFBNU2lnbmFsU2htZW1EZXNjID0gewotCS5uYW1lID0gIlBNU2lnbmFsU3RhdGUiLAotCS5z aXplID0gMCwgLyogZHluYW1pYyAqLwotCS5pbml0X2ZuID0gUE1TaWduYWxTaG1lbUluaXQsCi19 OwotCiAvKgogICogUE1TaWduYWxTdGF0ZSBwb2ludGVyIGlzIHZhbGlkIGluIGJvdGggcG9zdG1h c3RlciBhbmQgY2hpbGQgcHJvY2Vzc2VzCi0gKgotICogVGhpcyBpcyBhIHN0YW5kLWFsb25lIHZh cmlhYmxlIHJhdGhlciB0aGFuIGp1c3QgYSAjZGVmaW5lIG92ZXIKLSAqIFBNU2lnbmFsU2htZW1E ZXNjLnB0ciBiZWNhdXNlIGl0IGlzIG5lZWRlZCBlYXJseSBhdCBiYWNrZW5kIHN0YXJ0dXAgYW5k Ci0gKiBwYXNzZWQgYXMgYSBiYWNrZW5kIHBhcmFtZXRlciBpbiBFWEVDX0JBQ0tFTkQgbW9kZQog ICovCiBOT05fRVhFQ19TVEFUSUMgdm9sYXRpbGUgUE1TaWduYWxEYXRhICpQTVNpZ25hbFN0YXRl ID0gTlVMTDsKIAorc3RhdGljIFNobWVtU3RydWN0RGVzYyBQTVNpZ25hbFNobWVtRGVzYyA9IHsK KwkubmFtZSA9ICJQTVNpZ25hbFN0YXRlIiwKKwkuc2l6ZSA9IDAsIC8qIGR5bmFtaWMgKi8KKwku aW5pdF9mbiA9IFBNU2lnbmFsU2htZW1Jbml0LAorCS5wdHIgPSAodm9pZCAqKikgJlBNU2lnbmFs U3RhdGUsCit9OwogCiAvKgogICogTG9jYWwgY29weSBvZiBQTVNpZ25hbFN0YXRlLT5udW1fY2hp bGRfZmxhZ3MsIG9ubHkgdmFsaWQgaW4gdGhlCkBAIC0xNTYsNyArMTUyLDcgQEAgc3RhdGljIHZv aWQKIFBNU2lnbmFsU2htZW1Jbml0KHZvaWQgKmFyZykKIHsKIAkvKiBpbml0aWFsaXplIGFsbCBm bGFncyB0byB6ZXJvZXMgKi8KLQlQTVNpZ25hbFN0YXRlID0gUE1TaWduYWxTaG1lbURlc2MucHRy OworCUFzc2VydChQTVNpZ25hbFN0YXRlKTsKIAlNZW1TZXQodW52b2xhdGl6ZShQTVNpZ25hbERh dGEgKiwgUE1TaWduYWxTdGF0ZSksIDAsIFBNU2lnbmFsU2htZW1EZXNjLnNpemUpOwogCW51bV9j aGlsZF9mbGFncyA9IE1heExpdmVQb3N0bWFzdGVyQ2hpbGRyZW4oKTsKIAlQTVNpZ25hbFN0YXRl LT5udW1fY2hpbGRfZmxhZ3MgPSBudW1fY2hpbGRfZmxhZ3M7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3By b2NhcnJheS5jCmluZGV4IDA4YzYzYmNiMmE3Li43MzY1MDRkM2EzZSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvcHJvY2FycmF5LmMKQEAgLTEwNCwxNSArMTA0LDE2IEBAIHR5cGVkZWYgc3RydWN0IFBy b2NBcnJheVN0cnVjdAogc3RhdGljIHZvaWQgUHJvY0FycmF5U2htZW1Jbml0KHZvaWQgKmFyZyk7 CiBzdGF0aWMgdm9pZCBQcm9jQXJyYXlTaG1lbUF0dGFjaCh2b2lkICphcmcpOwogCitQcm9jQXJy YXlTdHJ1Y3QgKnByb2NBcnJheSA9IE5VTEw7CisKIHN0YXRpYyBTaG1lbVN0cnVjdERlc2MgUHJv Y0FycmF5U2htZW1EZXNjID0gewogCS5uYW1lID0gIlByb2MgQXJyYXkiLAogCS5zaXplID0gMCwg LyogZHluYW1pYyAqLwogCS5pbml0X2ZuID0gUHJvY0FycmF5U2htZW1Jbml0LAogCS5hdHRhY2hf Zm4gPSBQcm9jQXJyYXlTaG1lbUF0dGFjaCwKKwkucHRyID0gKHZvaWQgKiopICZwcm9jQXJyYXks CiB9OwogCi0jZGVmaW5lIHByb2NBcnJheSAoKFByb2NBcnJheVN0cnVjdCAqKSBQcm9jQXJyYXlT aG1lbURlc2MucHRyKQotCiAvKgogICogU3RhdGUgZm9yIHRoZSBHbG9iYWxWaXNUZXN0KiBmYW1p bHkgb2YgZnVuY3Rpb25zLiBUaG9zZSBmdW5jdGlvbnMgY2FuCiAgKiBlLmcuIGJlIHVzZWQgdG8g ZGVjaWRlIGlmIGEgZGVsZXRlZCByb3cgY2FuIGJlIHJlbW92ZWQgd2l0aG91dCB2aW9sYXRpbmcK QEAgLTI5MCwyMiArMjkxLDI0IEBAIHN0YXRpYyBUcmFuc2FjdGlvbklkIGNhY2hlZFhpZElzTm90 SW5Qcm9ncmVzcyA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogICogQm9va2tlZXBpbmcgZm9yIHRy YWNraW5nIGVtdWxhdGVkIHRyYW5zYWN0aW9ucyBpbiByZWNvdmVyeQogICovCiAKK1RyYW5zYWN0 aW9uSWQgKktub3duQXNzaWduZWRYaWRzID0gTlVMTDsKKwogc3RhdGljIFNobWVtU3RydWN0RGVz YyBLbm93bkFzc2lnbmVkWGlkc1NobWVtRGVzYyA9IHsKIAkubmFtZSA9ICJLbm93bkFzc2lnbmVk WGlkcyIsCiAJLnNpemUgPSAwLCAvKiBkeW5hbWljICovCiAJLmluaXRfZm4gPSBOVUxMLAorCS5w dHIgPSAodm9pZCAqKikgJktub3duQXNzaWduZWRYaWRzLAogfTsKIAotI2RlZmluZSBLbm93bkFz c2lnbmVkWGlkcyAoKFRyYW5zYWN0aW9uSWQgKikgS25vd25Bc3NpZ25lZFhpZHNTaG1lbURlc2Mu cHRyKQorYm9vbCAqS25vd25Bc3NpZ25lZFhpZHNWYWxpZCA9IE5VTEw7CiAKIHN0YXRpYyBTaG1l bVN0cnVjdERlc2MgS25vd25Bc3NpZ25lZFhpZHNWYWxpZFNobWVtRGVzYyA9IHsKIAkubmFtZSA9 ICJLbm93bkFzc2lnbmVkWGlkc1ZhbGlkIiwKIAkuc2l6ZSA9IDAsIC8qIGR5bmFtaWMgKi8KIAku aW5pdF9mbiA9IE5VTEwsCisJLnB0ciA9ICh2b2lkICoqKSAmS25vd25Bc3NpZ25lZFhpZHNWYWxp ZCwKIH07CiAKLSNkZWZpbmUgS25vd25Bc3NpZ25lZFhpZHNWYWxpZCAoKGJvb2wgKikgS25vd25B c3NpZ25lZFhpZHNWYWxpZFNobWVtRGVzYy5wdHIpCi0KIHN0YXRpYyBUcmFuc2FjdGlvbklkIGxh dGVzdE9ic2VydmVkWGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAKIC8qCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9wcm9jc2lnbmFsLmMKaW5kZXggNTc0M2YwODgzMjQuLmVlYzA0ZWFlM2Y0IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKKysrIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCkBAIC0xMDQsMTMgKzEwNCwxNSBAQCBzdHJ1 Y3QgUHJvY1NpZ25hbEhlYWRlcgogCiBzdGF0aWMgdm9pZCBQcm9jU2lnbmFsU2htZW1Jbml0KHZv aWQgKmFyZyk7CiAKK1Byb2NTaWduYWxIZWFkZXIgKlByb2NTaWduYWwgPSBOVUxMOworCiBzdGF0 aWMgU2htZW1TdHJ1Y3REZXNjIFByb2NTaWduYWxTaG1lbURlc2MgPSB7CiAJLm5hbWUgPSAiUHJv Y1NpZ25hbCIsCiAJLnNpemUgPSAwLCAvKiBkeW5hbWljICovCiAJLmluaXRfZm4gPSBQcm9jU2ln bmFsU2htZW1Jbml0LAorCS5wdHIgPSAodm9pZCAqKikgJlByb2NTaWduYWwsCiB9OwogCi0jZGVm aW5lIFByb2NTaWduYWwgKChQcm9jU2lnbmFsSGVhZGVyICopIFByb2NTaWduYWxTaG1lbURlc2Mu cHRyKQogCiBzdGF0aWMgUHJvY1NpZ25hbFNsb3QgKk15UHJvY1NpZ25hbFNsb3QgPSBOVUxMOwog CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvc2htZW0uYwppbmRleCBmYWEwZmNiZDIxZS4uZTczYWM0ODliMmIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvc2htZW0uYwpAQCAtMTE4LDE3ICsxMTgsMTggQEAgc3RhdGljIHZvaWQg KlNobWVtRW5kOwkJCS8qIGVuZCsxIGFkZHJlc3Mgb2Ygc2hhcmVkIG1lbW9yeSAqLwogCiBzdGF0 aWMgU2htZW1BbGxvY2F0b3JEYXRhICpTaG1lbUFsbG9jYXRvcjsKIHNsb2NrX3QgICAgKlNobWVt TG9jazsJCQkvKiBwb2ludHMgdG8gU2htZW1BbGxvY2F0b3ItPnNobWVtX2xvY2sgKi8KKyAvKiBw cmltYXJ5IGluZGV4IGhhc2h0YWJsZSBmb3Igc2htZW0gKi8KK0hUQUIgKlNobWVtSW5kZXggPSBO VUxMOworCiAKIAogc3RhdGljIFNobWVtSGFzaERlc2MgU2htZW1JbmRleEhhc2hEZXNjID0gewog CS5uYW1lID0gIlNobWVtSW5kZXgiLAogCS5pbml0X3NpemUgPSBTSE1FTV9JTkRFWF9TSVpFLAog CS5tYXhfc2l6ZSA9IFNITUVNX0lOREVYX1NJWkUsCisJLnB0ciA9ICZTaG1lbUluZGV4CiB9Owog Ci0gLyogcHJpbWFyeSBpbmRleCBoYXNodGFibGUgZm9yIHNobWVtICovCi0jZGVmaW5lIFNobWVt SW5kZXggKFNobWVtSW5kZXhIYXNoRGVzYy5wdHIpCi0KIAogLyogVG8gZ2V0IHJlbGlhYmxlIHJl c3VsdHMgZm9yIE5VTUEgaW5xdWlyeSB3ZSBuZWVkIHRvICJ0b3VjaCBwYWdlcyIgb25jZSAqLwog c3RhdGljIGJvb2wgZmlyc3ROdW1hVG91Y2ggPSB0cnVlOwpAQCAtMjA1LDcgKzIwNiw3IEBAIFNo bWVtSW5pdFJlZ2lzdGVyZWQodm9pZCkKIAkJcmVzdWx0LT5hbGxvY2F0ZWRfc2l6ZSA9IGFsbG9j YXRlZF9zaXplOwogCQlyZXN1bHQtPmxvY2F0aW9uID0gc3RydWN0UHRyOwogCi0JCXJlZ2lzdHJ5 W2ldLT5wdHIgPSBzdHJ1Y3RQdHI7CisJCSoocmVnaXN0cnlbaV0tPnB0cikgPSBzdHJ1Y3RQdHI7 CiAJCWlmIChyZWdpc3RyeVtpXS0+aW5pdF9mbikKIAkJCXJlZ2lzdHJ5W2ldLT5pbml0X2ZuKHJl Z2lzdHJ5W2ldLT5pbml0X2ZuX2FyZyk7CiAJfQpAQCAtMjM5LDcgKzI0MCw3IEBAIFNobWVtQXR0 YWNoUmVnaXN0ZXJlZCh2b2lkKQogCQkJCQkJCXJlZ2lzdHJ5W2ldLT5uYW1lKSkpOwogCQl9CiAK LQkJcmVnaXN0cnlbaV0tPnB0ciA9IHJlc3VsdC0+bG9jYXRpb247CisJCSpyZWdpc3RyeVtpXS0+ cHRyID0gcmVzdWx0LT5sb2NhdGlvbjsKIAogCQlpZiAocmVnaXN0cnlbaV0tPmF0dGFjaF9mbikK IAkJCXJlZ2lzdHJ5W2ldLT5hdHRhY2hfZm4ocmVnaXN0cnlbaV0tPmF0dGFjaF9mbl9hcmcpOwpA QCAtNDI1LDEwICs0MjYsMTEgQEAgSW5pdFNobWVtSW5kZXgodm9pZCkKIAlpbmZvLmtleXNpemUg PSBTSE1FTV9JTkRFWF9LRVlTSVpFOwogCWluZm8uZW50cnlzaXplID0gc2l6ZW9mKFNobWVtSW5k ZXhFbnQpOwogCi0JU2htZW1JbmRleCA9IFNobWVtSW5pdEhhc2goIlNobWVtSW5kZXgiLAorCSpT aG1lbUluZGV4SGFzaERlc2MucHRyID0gU2htZW1Jbml0SGFzaCgiU2htZW1JbmRleCIsCiAJCQkJ CQkJICAgU0hNRU1fSU5ERVhfU0laRSwgU0hNRU1fSU5ERVhfU0laRSwKIAkJCQkJCQkgICAmaW5m bywKIAkJCQkJCQkgICBIQVNIX0VMRU0gfCBIQVNIX1NUUklOR1MpOworCUFzc2VydChTaG1lbUlu ZGV4ICE9IE5VTEwgJiYgKlNobWVtSW5kZXhIYXNoRGVzYy5wdHIgPT0gU2htZW1JbmRleCk7CiB9 CiAKIC8qCkBAIC00ODIsNiArNDg0LDEyIEBAIFNobWVtUmVnaXN0ZXJIYXNoKFNobWVtSGFzaERl c2MgKmRlc2MsCQkvKiBjb25maWd1cmF0aW9uICovCiAJZGVzYy0+YmFzZV9kZXNjLmluaXRfZm5f YXJnID0gZGVzYzsKIAlkZXNjLT5iYXNlX2Rlc2MuYXR0YWNoX2ZuID0gc2htZW1faGFzaF9hdHRh Y2g7CiAJZGVzYy0+YmFzZV9kZXNjLmF0dGFjaF9mbl9hcmcgPSBkZXNjOworCS8qCisJICogV2Ug bmVlZCBhIHN0YWJsZSBwb2ludGVyIHRvIGhvbGQgdGhlIHBvaW50ZXIgdG8gdGhlIHNoYXJlZCBt ZW1vcnkuIFVzZQorCSAqIHRoZSBvbmUgcGFzc2VkIGluIHRoZSBkZXNjcmlwdG9yIG5vdy4gSXQg d2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBoYXNoCisJICogdGFibGUgaGVhZGVyIGJ5IGluaXQg b3IgYXR0YWNoIGZ1bmN0aW9uLgorCSAqLworCWRlc2MtPmJhc2VfZGVzYy5wdHIgPSAodm9pZCAq KikgZGVzYy0+cHRyOwogCiAJZGVzYy0+YmFzZV9kZXNjLmV4dHJhX3NpemUgPSBoYXNoX2VzdGlt YXRlX3NpemUoZGVzYy0+bWF4X3NpemUsIGluZm9QLT5lbnRyeXNpemUpIC0gZGVzYy0+YmFzZV9k ZXNjLnNpemU7CiAKQEAgLTQ5OSwxMCArNTA3LDkgQEAgc2htZW1faGFzaF9pbml0KHZvaWQgKmFy ZykKIAlpbnQJCQloYXNoX2ZsYWdzID0gZGVzYy0+aGFzaF9mbGFnczsKIAogCS8qIFBhc3MgbG9j YXRpb24gb2YgaGFzaHRhYmxlIGhlYWRlciB0byBoYXNoX2NyZWF0ZSAqLwotCWRlc2MtPnB0ciA9 IGRlc2MtPmJhc2VfZGVzYy5wdHI7Ci0JZGVzYy0+aW5mb1AtPmhjdGwgPSAoSEFTSEhEUiAqKSBk ZXNjLT5wdHI7CisJZGVzYy0+aW5mb1AtPmhjdGwgPSAoSEFTSEhEUiAqKSAqZGVzYy0+YmFzZV9k ZXNjLnB0cjsKIAotCWRlc2MtPnB0ciA9IGhhc2hfY3JlYXRlKGRlc2MtPm5hbWUsIGRlc2MtPmlu aXRfc2l6ZSwgZGVzYy0+aW5mb1AsIGhhc2hfZmxhZ3MpOworCSpkZXNjLT5wdHIgPSBoYXNoX2Ny ZWF0ZShkZXNjLT5uYW1lLCBkZXNjLT5pbml0X3NpemUsIGRlc2MtPmluZm9QLCBoYXNoX2ZsYWdz KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTUxOCw5ICs1MjUsOSBAQCBzaG1lbV9oYXNoX2F0dGFj aCh2b2lkICphcmcpCiAJaGFzaF9mbGFncyB8PSBIQVNIX0FUVEFDSDsKIAogCS8qIFBhc3MgbG9j YXRpb24gb2YgaGFzaHRhYmxlIGhlYWRlciB0byBoYXNoX2NyZWF0ZSAqLwotCWRlc2MtPmluZm9Q LT5oY3RsID0gKEhBU0hIRFIgKikgZGVzYy0+cHRyOworCWRlc2MtPmluZm9QLT5oY3RsID0gKEhB U0hIRFIgKikgKmRlc2MtPmJhc2VfZGVzYy5wdHI7CiAKLQlkZXNjLT5wdHIgPSBoYXNoX2NyZWF0 ZShkZXNjLT5uYW1lLCBkZXNjLT5pbml0X3NpemUsIGRlc2MtPmluZm9QLCBoYXNoX2ZsYWdzKTsK KwkqZGVzYy0+cHRyID0gaGFzaF9jcmVhdGUoZGVzYy0+bmFtZSwgZGVzYy0+aW5pdF9zaXplLCBk ZXNjLT5pbmZvUCwgaGFzaF9mbGFncyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9zaW52YWxhZHQuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NpbnZh bGFkdC5jCmluZGV4IDBmZTBmMjU2OTcxLi44MzIxYmQ5YjUyZCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvc2ludmFsYWR0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvc2ludmFsYWR0LmMKQEAgLTIwNSwxNSArMjA1LDE2IEBAIHR5cGVkZWYgc3RydWN0IFNJU2Vn CiAKIHN0YXRpYyB2b2lkIFNoYXJlZEludmFsU2htZW1Jbml0KHZvaWQgKmFyZyk7CiAKKy8qIHBv aW50ZXIgdG8gdGhlIHNoYXJlZCBpbnZhbCBidWZmZXIgKi8KK1NJU2VnICpzaG1JbnZhbEJ1ZmZl ciA9IE5VTEw7CisKIHN0YXRpYyBTaG1lbVN0cnVjdERlc2MgU2hhcmVkSW52YWxTaG1lbURlc2Mg PSB7CiAJLm5hbWUgPSAic2htSW52YWxCdWZmZXIiLAogCS5zaXplID0gMCwJLyogZHluYW1pYyAq LwogCS5pbml0X2ZuID0gU2hhcmVkSW52YWxTaG1lbUluaXQsCisJLnB0ciA9ICh2b2lkICoqKSAm c2htSW52YWxCdWZmZXIsCiB9OwogCi0vKiBwb2ludGVyIHRvIHRoZSBzaGFyZWQgaW52YWwgYnVm ZmVyICovCi0jZGVmaW5lIHNobUludmFsQnVmZmVyICgoU0lTZWcgKikgU2hhcmVkSW52YWxTaG1l bURlc2MucHRyKQotCiAKIHN0YXRpYyBMb2NhbFRyYW5zYWN0aW9uSWQgbmV4dExvY2FsVHJhbnNh Y3Rpb25JZDsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKaW5kZXggODUzNzViNTE5NWUuLmEzZDY1 NTdhYTlkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCisrKyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTc3LDI3ICs3NywzMyBAQCBQR1BS T0MJICAgKk15UHJvYyA9IE5VTEw7CiAKIHN0YXRpYyB2b2lkIFByb2NHbG9iYWxTaG1lbUluaXQo dm9pZCAqYXJnKTsKIAorLyogUG9pbnRlcnMgdG8gc2hhcmVkLW1lbW9yeSBzdHJ1Y3R1cmVzICov CitQUk9DX0hEUiAgICpQcm9jR2xvYmFsID0gTlVMTDsKK3ZvaWQgKnRtcEFsbFByb2NzID0gTlVM TDsKK3ZvaWQgKnRtcEZhc3RQYXRoTG9ja0FycmF5ID0gTlVMTDsKK05PTl9FWEVDX1NUQVRJQyBQ R1BST0MgKkF1eGlsaWFyeVByb2NzID0gTlVMTDsKK1BHUFJPQwkgICAqUHJlcGFyZWRYYWN0UHJv Y3MgPSBOVUxMOworCisKIHN0YXRpYyBTaG1lbVN0cnVjdERlc2MgUHJvY0dsb2JhbFNobWVtRGVz YyA9IHsKIAkubmFtZSA9ICJQcm9jIEhlYWRlciIsCiAJLnNpemUgPSBzaXplb2YoUFJPQ19IRFIp LAogCS5pbml0X2ZuID0gUHJvY0dsb2JhbFNobWVtSW5pdCwKKwkucHRyID0gKHZvaWQgKiopICZQ cm9jR2xvYmFsLAogfTsKIAogc3RhdGljIFNobWVtU3RydWN0RGVzYyBQcm9jR2xvYmFsQWxsUHJv Y3NTaG1lbURlc2MgPSB7CiAJLm5hbWUgPSAiUEdQUk9DIHN0cnVjdHVyZXMiLAogCS5zaXplID0g MCwgLyogZHluYW1pYyAqLworCS5wdHIgPSAodm9pZCAqKikgJnRtcEFsbFByb2NzLAogfTsKIAog c3RhdGljIFNobWVtU3RydWN0RGVzYyBGYXN0UGF0aExvY2tBcnJheVNobWVtRGVzYyA9IHsKIAku bmFtZSA9ICJGYXN0LVBhdGggTG9jayBBcnJheSIsCiAJLnNpemUgPSAwLCAvKiBkeW5hbWljICov CisJLnB0ciA9ICh2b2lkICoqKSAmdG1wRmFzdFBhdGhMb2NrQXJyYXksCiB9OwogCi0vKiBQb2lu dGVycyB0byBzaGFyZWQtbWVtb3J5IHN0cnVjdHVyZXMgKi8KLVBST0NfSERSICAgKlByb2NHbG9i YWwgPSBOVUxMOwotTk9OX0VYRUNfU1RBVElDIFBHUFJPQyAqQXV4aWxpYXJ5UHJvY3MgPSBOVUxM OwotUEdQUk9DCSAgICpQcmVwYXJlZFhhY3RQcm9jcyA9IE5VTEw7Ci0KIHN0YXRpYyB1aW50MzIg VG90YWxQcm9jczsKIAogc3RhdGljIERlYWRMb2NrU3RhdGUgZGVhZGxvY2tfc3RhdGUgPSBEU19O T1RfWUVUX0NIRUNLRUQ7CkBAIC0yMjIsOCArMjI4LDcgQEAgUHJvY0dsb2JhbFNobWVtSW5pdCh2 b2lkICphcmcpCiAJU2l6ZQkJZnBMb2NrQml0c1NpemUsCiAJCQkJZnBSZWxJZFNpemU7CiAKLQlQ cm9jR2xvYmFsID0gUHJvY0dsb2JhbFNobWVtRGVzYy5wdHI7Ci0KKwlBc3NlcnQoUHJvY0dsb2Jh bCk7CiAJUHJvY0dsb2JhbC0+c3BpbnNfcGVyX2RlbGF5ID0gREVGQVVMVF9TUElOU19QRVJfREVM QVk7CiAJZGxpc3RfaW5pdCgmUHJvY0dsb2JhbC0+ZnJlZVByb2NzKTsKIAlkbGlzdF9pbml0KCZQ cm9jR2xvYmFsLT5hdXRvdmFjRnJlZVByb2NzKTsKQEAgLTIzNiw3ICsyNDEsOCBAQCBQcm9jR2xv YmFsU2htZW1Jbml0KHZvaWQgKmFyZykKIAlwZ19hdG9taWNfaW5pdF91MzIoJlByb2NHbG9iYWwt PmNsb2dHcm91cEZpcnN0LCBJTlZBTElEX1BST0NfTlVNQkVSKTsKIAlTcGluTG9ja0luaXQoUHJv Y1N0cnVjdExvY2spOwogCi0JcHRyID0gUHJvY0dsb2JhbEFsbFByb2NzU2htZW1EZXNjLnB0cjsK KwlBc3NlcnQodG1wQWxsUHJvY3MpOworCXB0ciA9IHRtcEFsbFByb2NzOwogCXJlcXVlc3RTaXpl ID0gUHJvY0dsb2JhbEFsbFByb2NzU2htZW1EZXNjLnNpemU7CiAJbWVtc2V0KHB0ciwgMCwgcmVx dWVzdFNpemUpOwogCkBAIC0yNzQsNyArMjgwLDggQEAgUHJvY0dsb2JhbFNobWVtSW5pdCh2b2lk ICphcmcpCiAJZnBMb2NrQml0c1NpemUgPSBNQVhBTElHTihGYXN0UGF0aExvY2tHcm91cHNQZXJC YWNrZW5kICogc2l6ZW9mKHVpbnQ2NCkpOwogCWZwUmVsSWRTaXplID0gTUFYQUxJR04oRmFzdFBh dGhMb2NrU2xvdHNQZXJCYWNrZW5kKCkgKiBzaXplb2YoT2lkKSk7CiAKLQlmcFB0ciA9IEZhc3RQ YXRoTG9ja0FycmF5U2htZW1EZXNjLnB0cjsKKwlBc3NlcnQodG1wRmFzdFBhdGhMb2NrQXJyYXkp OworCWZwUHRyID0gdG1wRmFzdFBhdGhMb2NrQXJyYXk7CiAJcmVxdWVzdFNpemUgPSBGYXN0UGF0 aExvY2tBcnJheVNobWVtRGVzYy5zaXplOwogCW1lbXNldChmcFB0ciwgMCwgcmVxdWVzdFNpemUp OwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHJhbnNhbS5oIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3RyYW5zYW0uaAppbmRleCA0OWQ0NzZlOWQ1Yy4uNmU1YTU0NmY0MTEgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2FtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3RyYW5zYW0uaApAQCAtMzM0LDcgKzMzNCw3IEBAIGV4dGVybiBib29sIFRyYW5zYWN0aW9u U3RhcnRlZER1cmluZ1JlY292ZXJ5KHZvaWQpOwogLyogaW4gdHJhbnNhbS92YXJzdXAuYyAqLwog I2lmbmRlZiBGUk9OVEVORAogZXh0ZXJuIFBHRExMSU1QT1JUIHN0cnVjdCBTaG1lbVN0cnVjdERl c2MgVHJhbnNhbVZhcmlhYmxlc1NobWVtRGVzYzsKLSNkZWZpbmUgVHJhbnNhbVZhcmlhYmxlcyAo KFRyYW5zYW1WYXJpYWJsZXNEYXRhICopIFRyYW5zYW1WYXJpYWJsZXNTaG1lbURlc2MucHRyKQor ZXh0ZXJuIFBHRExMSU1QT1JUIFRyYW5zYW1WYXJpYWJsZXNEYXRhICpUcmFuc2FtVmFyaWFibGVz OwogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmgg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmgKaW5kZXggNDBlMmZjMTcwNTYuLmNiZDRlZjhk MDNmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmgKKysrIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9zaG1lbS5oCkBAIC01MCw4ICs1MCw4IEBAIHR5cGVkZWYgc3RydWN0IFNo bWVtU3RydWN0RGVzYwogCSAqLwogCXNpemVfdAkJZXh0cmFfc2l6ZTsKIAotCS8qIFBvaW50ZXIg dG8gdGhlIHNoYXJlZCBtZW1vcnkgYXJlYSwgd2hlbiBpdCdzIGFsbG9jYXRlZC4gKi8KLQl2b2lk CSAgICpwdHI7CisJLyogUG9pbnRlciB0byB0aGUgdmFyaWFibGUgdG8gd2hpY2ggcG9pbnRlciB0 byB0aGlzIHNoYXJlZCBtZW1vcnkgYXJlYSBpcyBhc3NpZ25lZCBhZnRlciBhbGxvY2F0aW9uLiAq LworCXZvaWQJICAgKipwdHI7CiB9IFNobWVtU3RydWN0RGVzYzsKIAogLyoKQEAgLTY3LDcgKzY3 LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgU2htZW1IYXNoRGVzYwogCXNpemVfdAkJbWF4X3NpemU7CQkv KiBtYXggbnVtYmVyIG9mIGVudHJpZXMgKi8KIAlIQVNIQ1RMCSAgICppbmZvUDsKIAotCUhUQUIJ ICAgKnB0cjsKKwlIVEFCCSAgICoqcHRyOwogCiAJU2htZW1TdHJ1Y3REZXNjCWJhc2VfZGVzYzsK IH0gU2htZW1IYXNoRGVzYzsKLS0gCjIuMzQuMQoK --000000000000009b35064b7e64e5 Content-Type: text/x-patch; charset="US-ASCII"; name="0003-WIP-resizable-shared-memory-structures-20260223.patch" Content-Disposition: attachment; filename="0003-WIP-resizable-shared-memory-structures-20260223.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlz9ckbi2 RnJvbSAxZjg4ZDBiYWI3YmI2YjNhZTZkOWVjYzU3M2M3ZDZhNjIxZjAzZDJjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBc2h1dG9zaCBCYXBhdCA8YXNodXRvc2guYmFwYXQub3NzQGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAxNyBGZWIgMjAyNiAxNjo1MToyMCArMDUzMApTdWJqZWN0OiBb UEFUQ0ggMy8zXSBXSVA6IHJlc2l6YWJsZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZXMKCi0tLQog ZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sICAgICAgICAgICAgICAgIHwgIDIwICstCiBz cmMvYmFja2VuZC9wb3J0L3N5c3Zfc2htZW0uYyAgICAgICAgICAgICAgICAgfCAgNjkgKysrKysK IHNyYy9iYWNrZW5kL3BvcnQvd2luMzJfc2htZW0uYyAgICAgICAgICAgICAgICB8ICA0OSArKysK IHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMgICAgICAgICAgICAgICB8IDE1NiArKysr KysrKy0tCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgICAgfCAg IDQgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcGdfc2htZW0uaCAgICAgICAgICAgICAgICB8ICAg MyArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmggICAgICAgICAgICAgICAgICAgfCAgMTAg Kwogc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgICAxICsK IHNyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICB8ICAgMSArCiBz cmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9NYWtlZmlsZSAgICAgfCAgMjMgKysKIHNy Yy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL21lc29uLmJ1aWxkICB8ICAzNiArKysKIC4u Li9yZXNpemFibGVfc2htZW0vcmVzaXphYmxlX3NobWVtLS0xLjAuc3FsICB8ICAzNyArKysKIC4u Li9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9yZXNpemFibGVfc2htZW0uYyB8IDI4MSArKysrKysr KysrKysrKysrKysKIC4uLi9yZXNpemFibGVfc2htZW0vcmVzaXphYmxlX3NobWVtLmNvbnRyb2wg ICB8ICAgNSArCiAuLi4vcmVzaXphYmxlX3NobWVtL3QvMDAxX3Jlc2l6YWJsZV9zaG1lbS5wbCAg fCAxMTggKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0ICAgICAg ICAgICB8ICAgNSArLQogMTYgZmlsZXMgY2hhbmdlZCwgNzg5IGluc2VydGlvbnMoKyksIDI5IGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxl X3NobWVtL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy9yZXNp emFibGVfc2htZW0vbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1 bGVzL3Jlc2l6YWJsZV9zaG1lbS9yZXNpemFibGVfc2htZW0tLTEuMC5zcWwKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9yZXNpemFibGVfc2htZW0u YwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL3Jl c2l6YWJsZV9zaG1lbS5jb250cm9sCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxl cy9yZXNpemFibGVfc2htZW0vdC8wMDFfcmVzaXphYmxlX3NobWVtLnBsCgpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sIGIvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3 cy5zZ21sCmluZGV4IDhiNGFiZWY4YzY4Li41MzNlZmYzZDZjYiAxMDA2NDQKLS0tIGEvZG9jL3Ny Yy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Mu c2dtbApAQCAtNDI0Myw4ICs0MjQzLDI0IEBAIFNFTEVDVCAqIEZST00gcGdfbG9ja3MgcGwgTEVG VCBKT0lOIHBnX3ByZXBhcmVkX3hhY3RzIHBweAogICAgICAgIFNpemUgb2YgdGhlIGFsbG9jYXRp b24gaW4gYnl0ZXMgaW5jbHVkaW5nIHBhZGRpbmcuIEZvciBhbm9ueW1vdXMKICAgICAgICBhbGxv Y2F0aW9ucywgbm8gaW5mb3JtYXRpb24gYWJvdXQgcGFkZGluZyBpcyBhdmFpbGFibGUsIHNvIHRo ZQogICAgICAgIDxsaXRlcmFsPnNpemU8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD5hbGxvY2F0ZWRf c2l6ZTwvbGl0ZXJhbD4gY29sdW1ucwotICAgICAgIHdpbGwgYWx3YXlzIGJlIGVxdWFsLiBQYWRk aW5nIGlzIG5vdCBtZWFuaW5nZnVsIGZvciBmcmVlIG1lbW9yeSwgc28KLSAgICAgICB0aGUgY29s dW1ucyB3aWxsIGJlIGVxdWFsIGluIHRoYXQgY2FzZSBhbHNvLgorICAgICAgIHdpbGwgYWx3YXlz IGJlIGVxdWFsLiBQYWRkaW5nIGlzIG5vdCBtZWFuaW5nZnVsIGZvciBmcmVlIG1lbW9yeSwgc28g dGhlCisgICAgICAgY29sdW1ucyB3aWxsIGJlIGVxdWFsIGluIHRoYXQgY2FzZSBhbHNvLiBGb3Ig cmVzaXphYmxlIGFsbG9jYXRpb25zIHdoaWNoCisgICAgICAgbWF5IHNwYW4gbXVsdGlwbGUgbWVt b3J5IHBhZ2VzLCB0aGUgcGFkZGluZyBpbmNsdWRlcyB0aGUgcGFkZGluZyBkdWUgdG8KKyAgICAg ICBwYWdlIGFsaWdubWVudC4KKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKwor ICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJh IHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+bWF4aW11bV9z aXplPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+aW50ODwvdHlwZT4KKyAgICAgIDwvcGFyYT4KKyAgICAg IDxwYXJhPgorICAgICAgIE1heGltdW0gc2l6ZSBpbiBieXRlcyB0aGF0IHRoZSBhbGxvY2F0aW9u IGNhbiBncm93IHVwdG8gaW5jbHVkaW5nIHBhZGRpbmcKKyAgICAgICBpbiBjYXNlIG9mIHJlc2l6 YWJsZSBhbGxvY2F0aW9ucy4gRm9yIGFub255bW91cyBhbGxvY2F0aW9ucywgbm8KKyAgICAgICBp bmZvcm1hdGlvbiBhYm91dCBtYXhpbXVtIHNpemUgaXMgYXZhaWxhYmxlLCBzbyB0aGUKKyAgICAg ICA8bGl0ZXJhbD5zaXplPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+bWF4aW11bV9zaXplPC9saXRl cmFsPiBjb2x1bW5zIHdpbGwKKyAgICAgICBhbHdheXMgYmUgZXF1YWwuIE1heGltdW0gc2l6ZSBp cyBub3QgbWVhbmluZ2Z1bCBmb3IgZnJlZSBtZW1vcnksIHNvIHRoZQorICAgICAgIGNvbHVtbnMg d2lsbCBiZSBlcXVhbCBpbiB0aGF0IGNhc2UgYWxzby4KICAgICAgIDwvcGFyYT48L2VudHJ5Pgog ICAgICA8L3Jvdz4KICAgICA8L3Rib2R5PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9ydC9z eXN2X3NobWVtLmMgYi9zcmMvYmFja2VuZC9wb3J0L3N5c3Zfc2htZW0uYwppbmRleCAyZTM4ODZj ZjlmZS4uNjdhMzllOTcwMDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BvcnQvc3lzdl9zaG1l bS5jCisrKyBiL3NyYy9iYWNrZW5kL3BvcnQvc3lzdl9zaG1lbS5jCkBAIC01ODksNiArNTg5LDI3 IEBAIGNoZWNrX2h1Z2VfcGFnZV9zaXplKGludCAqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1Nv dXJjZSBzb3VyY2UpCiAJcmV0dXJuIHRydWU7CiB9CiAKKy8qCisgKiBHZXQgdGhlIHBhZ2Ugc2l6 ZSBvZiBiZWluZyB1c2VkIGJ5IHRoZSBzaGFyZWQgbWVtb3J5LgorICoKKyAqIFRoZSBmdW5jdGlv biBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgdGhlIHNoYXJlZCBtZW1vcnkgaGFzIGJlZW4g c2V0dXAuCisgKi8KK1NpemUKK0dldE9TUGFnZVNpemUodm9pZCkKK3sKKwlTaXplCQlvc19wYWdl X3NpemU7CisKKwlBc3NlcnQoaHVnZV9wYWdlc19zdGF0dXMgIT0gSFVHRV9QQUdFU19VTktOT1dO KTsKKworCW9zX3BhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKKworCS8qIElmIGh1 Z2UgcGFnZXMgYXJlIGFjdHVhbGx5IGluIHVzZSwgdXNlIGh1Z2UgcGFnZSBzaXplICovCisJaWYg KGh1Z2VfcGFnZXNfc3RhdHVzID09IEhVR0VfUEFHRVNfT04pCisJCUdldEh1Z2VQYWdlU2l6ZSgm b3NfcGFnZV9zaXplLCBOVUxMKTsKKworCXJldHVybiBvc19wYWdlX3NpemU7Cit9CisKIC8qCiAg KiBDcmVhdGVzIGFuIGFub255bW91cyBtbWFwKCllZCBzaGFyZWQgbWVtb3J5IHNlZ21lbnQuCiAg KgpAQCAtOTkxLDMgKzEwMTIsNTEgQEAgUEdTaGFyZWRNZW1vcnlEZXRhY2godm9pZCkKIAkJQW5v bnltb3VzU2htZW0gPSBOVUxMOwogCX0KIH0KKworLyoKKyAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBt ZW1vcnkgb2YgZ2l2ZW4gc2l6ZSBmcm9tIHRoZSBnaXZlbiBhZGRyZXNzIGlzIHJlbGVhc2VkLgor ICoKKyAqIFRoZSBhZGRyZXNzIGFuZCBzaXplIGFyZSBleHBlY3RlZCB0byBiZSBwYWdlIGFsaWdu ZWQuCisgKgorICogT25seSBzdXBwb3J0ZWQgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCBhbm9u eW1vdXMgc2hhcmVkIG1lbW9yeS4KKyAqLwordm9pZAorUEdTaGFyZWRNZW1vcnlFbnN1cmVGcmVl ZCh2b2lkICphZGRyLCBTaXplIHNpemUpCit7CisJaWYgKCFBbm9ueW1vdXNTaG1lbSkKKwkJZXJl cG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCks CisJCQkJIGVycm1zZygicmVsZWFzaW5nIHNoYXJlZCBtZW1vcnkgaXMgc3VwcG9ydGVkIG9ubHkg aW4gYW5vbnltb3VzIG1hcHBpbmdzIikpKTsKKworCUFzc2VydChhZGRyID09ICh2b2lkICopIFRZ UEVBTElHTihHZXRPU1BhZ2VTaXplKCksIGFkZHIpKTsKKwlBc3NlcnQoc2l6ZSA9PSBUWVBFQUxJ R04oR2V0T1NQYWdlU2l6ZSgpLCBzaXplKSk7CisJQXNzZXJ0KHNpemUgPiAwKTsKKworCWlmICht YWR2aXNlKGFkZHIsIHNpemUsIE1BRFZfUkVNT1ZFKSA9PSAtMSkKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkJKGVycm1zZygiY291bGQgbm90IHJlbGVhc2Ugc2hhcmVkIG1lbW9yeTogJW0iKSkpOwor fQorCisvKgorICogTWFrZSBzdXJlIHRoYXQgdGhlIG1lbW9yeSBvZiBnaXZlbiBzaXplIGZyb20g dGhlIGdpdmVuIGFkZHJlc3MgaXMgYWxsb2NhdGVkLgorICoKKyAqIFRoZSBhZGRyZXNzIGFuZCBz aXplIGFyZSBleHBlY3RlZCB0byBiZSBwYWdlIGFsaWduZWQuCisgKgorICogT25seSBzdXBwb3J0 ZWQgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCBhbm9ueW1vdXMgc2hhcmVkIG1lbW9yeS4KKyAq Lwordm9pZAorUEdTaGFyZWRNZW1vcnlFbnN1cmVBbGxvY2F0ZWQodm9pZCAqYWRkciwgU2l6ZSBz aXplKQoreworCWlmICghQW5vbnltb3VzU2htZW0pCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coImFsbG9j YXRpbmcgc2hhcmVkIG1lbW9yeSBpcyBzdXBwb3J0ZWQgb25seSBpbiBhbm9ueW1vdXMgbWFwcGlu Z3MiKSkpOworCisJQXNzZXJ0KGFkZHIgPT0gKHZvaWQgKikgVFlQRUFMSUdOKEdldE9TUGFnZVNp emUoKSwgYWRkcikpOworCUFzc2VydChzaXplID09IFRZUEVBTElHTihHZXRPU1BhZ2VTaXplKCks IHNpemUpKTsKKwlBc3NlcnQoc2l6ZSA+IDApOworCisJaWYgKG1hZHZpc2UoYWRkciwgc2l6ZSwg TUFEVl9QT1BVTEFURV9XUklURSkgPT0gLTEpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJt c2coImNvdWxkIG5vdCByZWxlYXNlIHNoYXJlZCBtZW1vcnk6ICVtIikpKTsKK30KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3BvcnQvd2luMzJfc2htZW0uYyBiL3NyYy9iYWNrZW5kL3BvcnQvd2lu MzJfc2htZW0uYwppbmRleCA3OTRlNGZjYjJhZC4uYWZiYmQwZGE4ZGEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3BvcnQvd2luMzJfc2htZW0uYworKysgYi9zcmMvYmFja2VuZC9wb3J0L3dpbjMy X3NobWVtLmMKQEAgLTYyMSw2ICs2MjEsMzIgQEAgcGd3aW4zMl9SZXNlcnZlU2hhcmVkTWVtb3J5 UmVnaW9uKEhBTkRMRSBoQ2hpbGQpCiAJcmV0dXJuIHRydWU7CiB9CiAKKy8qCisgKiBNYWtlIHN1 cmUgdGhhdCB0aGUgbWVtb3J5IG9mIGdpdmVuIHNpemUgZnJvbSB0aGUgZ2l2ZW4gYWRkcmVzcyBp cyByZWxlYXNlZC4KKyAqCisgKiBOb3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MgY3VycmVudGx5Lgor ICovCit2b2lkCitQR1NoYXJlZE1lbW9yeUVuc3VyZUZyZWVkKHZvaWQgKmFkZHIsIFNpemUgc2l6 ZSkKK3sKKwllcmVwb3J0KEVSUk9SLAorCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9T VVBQT1JURUQpLAorCQkJIGVycm1zZygicmVsZWFzaW5nIHBhcnQgb2Ygc2hhcmVkIG1lbW9yeSBp cyBub3Qgc3VwcG9ydGVkIG9uIHdpbmRvd3MiKSkpOworfQorCisvKgorICogTWFrZSBzdXJlIHRo YXQgdGhlIG1lbW9yeSBvZiBnaXZlbiBzaXplIGZyb20gdGhlIGdpdmVuIGFkZHJlc3MgaXMgYWxs b2NhdGVkLgorICoKKyAqIE5vdCBzdXBwb3J0ZWQgb24gV2luZG93cyBjdXJyZW50bHkuCisgKi8K K3ZvaWQKK1BHU2hhcmVkTWVtb3J5RW5zdXJlRnJlZWQodm9pZCAqYWRkciwgU2l6ZSBzaXplKQor eworCWVyZXBvcnQoRVJST1IsCisJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBP UlRFRCksCisJCQkgZXJybXNnKCJhbGxvY2F0aW5nIHNoYXJlZCBtZW1vcnkgaXMgbm90IHN1cHBv cnRlZCBvbiB3aW5kb3dzIikpKTsKK30KKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gaXMgcHJvdmlk ZWQgZm9yIGNvbnNpc3RlbmN5IHdpdGggc3lzdl9zaG1lbS5jIGFuZCBkb2VzIG5vdAogICogcHJv dmlkZSBhbnkgdXNlZnVsIGluZm9ybWF0aW9uIGZvciBXaW5kb3dzLiAgVG8gb2J0YWluIHRoZSBs YXJnZSBwYWdlIHNpemUsCkBAIC02NDgsMyArNjc0LDI2IEBAIGNoZWNrX2h1Z2VfcGFnZV9zaXpl KGludCAqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCiAJfQogCXJldHVy biB0cnVlOwogfQorCisvKgorICogR2V0IHRoZSBwYWdlIHNpemUgdXNlZCBieSB0aGUgc2hhcmVk IG1lbW9yeS4KKyAqCisgKiBUaGUgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVy IHRoZSBzaGFyZWQgbWVtb3J5IGhhcyBiZWVuIHNldHVwLgorICovCitTaXplCitHZXRPU1BhZ2VT aXplKHZvaWQpCit7CisJU1lTVEVNX0lORk8gc3lzaW5mbzsKKwlTaXplCQlvc19wYWdlX3NpemU7 CisKKwlBc3NlcnQoaHVnZV9wYWdlc19zdGF0dXMgIT0gSFVHRV9QQUdFU19VTktOT1dOKTsKKwor CUdldFN5c3RlbUluZm8oJnN5c2luZm8pOworCW9zX3BhZ2Vfc2l6ZSA9IHN5c2luZm8uZHdQYWdl U2l6ZTsKKworCS8qIElmIGh1Z2UgcGFnZXMgYXJlIGFjdHVhbGx5IGluIHVzZSwgdXNlIGh1Z2Ug cGFnZSBzaXplICovCisJaWYgKGh1Z2VfcGFnZXNfc3RhdHVzID09IEhVR0VfUEFHRVNfT04pCisJ CUdldEh1Z2VQYWdlU2l6ZSgmb3NfcGFnZV9zaXplLCBOVUxMKTsKKworCXJldHVybiBvc19wYWdl X3NpemU7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYwppbmRleCBlNzNhYzQ4OWIyYi4uNGVjYjM1 NGZkMDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYwpAQCAtMTA2LDYgKzEwNiw3IEBAIHR5cGVk ZWYgc3RydWN0IFNobWVtQWxsb2NhdG9yRGF0YQogfSBTaG1lbUFsbG9jYXRvckRhdGE7CiAKIHN0 YXRpYyB2b2lkICpTaG1lbUFsbG9jUmF3KFNpemUgc2l6ZSwgU2l6ZSAqYWxsb2NhdGVkX3NpemUp Oworc3RhdGljIHZvaWQgU2htZW1TZXRBbGxvY2F0ZWRTaXplKFNobWVtSW5kZXhFbnQgKmVudHJ5 KTsKIAogc3RhdGljIHZvaWQgc2htZW1faGFzaF9pbml0KHZvaWQgKmFyZyk7CiBzdGF0aWMgdm9p ZCBzaG1lbV9oYXNoX2F0dGFjaCh2b2lkICphcmcpOwpAQCAtMTQzLDggKzE0NCwyMCBAQCBTaG1l bVJlZ2lzdGVyU3RydWN0KFNobWVtU3RydWN0RGVzYyAqZGVzYykKIAllbG9nKERFQlVHMiwgIlJF R0lTVEVSOiAlcyB3aXRoIHNpemUgJXpkIiwgZGVzYy0+bmFtZSwgZGVzYy0+c2l6ZSk7CiAKIAly ZWdpc3RyeVtudW1fcmVnaXN0cmF0aW9ucysrXSA9IGRlc2M7CisKKwlpZiAoZGVzYy0+bWF4X3Np emUgPiAwKQorCQllbG9nKERFQlVHMiwgIlJFU0laQUJMRSBzdHJ1Y3R1cmU6ICVzIGhhcyBtYXhf c2l6ZSAlemQiLCBkZXNjLT5uYW1lLCBkZXNjLT5tYXhfc2l6ZSk7CiB9CiAKKy8qCisgKiBDYWxj dWxhdGUgdGhlIHRvdGFsIHNpemUgb2Ygc2hhcmVkIG1lbW9yeSByZXF1aXJlZCBmb3IgdGhlIHJl Z2lzdGVyZWQKKyAqIHN0cnVjdHVyZXMuCisgKgorICogUmVzaXphYmxlIHN0cnVjdHVyZXMgbmVl ZCBjb250aWd1b3VzIG1lbW9yeSB3b3J0aCB0aGUgc3BlY2lmaWVkIG1heGltdW0gc2l6ZQorICog d2hlbiB0aGV5IGdyb3cgdG8gdGhlIGZ1bGxlc3QuIEhlbmNlIHVzZSBtYXhfc2l6ZS4gSXQgaXMg ZXhwZWN0ZWQgdGhhdCB0aGF0CisgKiBtdWNoIGFkZHJlc3Mgc3BhY2UgaXMgcmVzZXJ2ZWQuIEFj dHVhbCBtZW1vcnkgYWxsb2NhdGVkIGF0IHRoZSBiZWdpbm5pbmcgd2lsbAorICogYmUgd29ydGgg dGhlIHRvdGFsIG9mIGluaXRpYWwgc2l6ZXMgb2YgYWxsIHRoZSBzdHJ1Y3R1cmVzLgorICovCiBz aXplX3QKIFNobWVtUmVnaXN0ZXJlZFNpemUodm9pZCkKIHsKQEAgLTE1Myw3ICsxNjYsNyBAQCBT aG1lbVJlZ2lzdGVyZWRTaXplKHZvaWQpCiAJc2l6ZSA9IDA7CiAJZm9yIChpbnQgaSA9IDA7IGkg PCBudW1fcmVnaXN0cmF0aW9uczsgaSsrKQogCXsKLQkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIHJl Z2lzdHJ5W2ldLT5zaXplKTsKKwkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIHJlZ2lzdHJ5W2ldLT5t YXhfc2l6ZSA+IDAgPyByZWdpc3RyeVtpXS0+bWF4X3NpemUgOiByZWdpc3RyeVtpXS0+c2l6ZSk7 CiAJCXNpemUgPSBhZGRfc2l6ZShzaXplLCByZWdpc3RyeVtpXS0+ZXh0cmFfc2l6ZSk7CiAJfQog CkBAIC0xNjIsNiArMTc1LDQzIEBAIFNobWVtUmVnaXN0ZXJlZFNpemUodm9pZCkKIAlyZXR1cm4g c2l6ZTsKIH0KIAorLyoKKyAqIFNldCB0aGUgYWxsb2NhdGVkX3NpemUgb2YgZ2l2ZW4gc3RydWN0 dXJlLgorICovCitzdGF0aWMgdm9pZAorU2htZW1TZXRBbGxvY2F0ZWRTaXplKFNobWVtSW5kZXhF bnQgKmVudHJ5KQoreworCVNpemUgcGFnZV9zaXplID0gR2V0T1NQYWdlU2l6ZSgpOworCisJY2hh ciAqYWxpZ25fZW5kID0gKGNoYXIgKikgVFlQRUFMSUdOKHBhZ2Vfc2l6ZSwgKGNoYXIgKikgZW50 cnktPmxvY2F0aW9uICsgZW50cnktPnNpemUpOworCWNoYXIgKmZsb29yX21heF9lbmQgPSAoY2hh ciAqKSBUWVBFQUxJR05fRE9XTihwYWdlX3NpemUsIChjaGFyICopIGVudHJ5LT5sb2NhdGlvbiAr IGVudHJ5LT5tYXhpbXVtX3NpemUpOworCisJaWYgKGFsaWduX2VuZCA+PSBmbG9vcl9tYXhfZW5k KQorCXsKKwkJLyoKKwkJICogQSBmaXhlZCBzaXplZCBzdHJ1Y3R1cmUgb3IgYSByZXNpemFibGUg c3RydWN0dXJlIHdob3NlIG1heGltYWwgc2l6ZQorCQkgKiBlbmRzIG9uIHRoZSBzYW1lIHBhZ2Ug YXMgaXRzIGluaXRpYWwgc2l6ZS4gIEluIGVpdGhlciBjYXNlLCB0aGUKKwkJICogc3RydWN0dXJl IHdpbGwgYmUgYWxsb2NhdGVkIGluIGl0cyBlbnRpcmV0eSBhdCB0aGUgYmVnaW5uaW5nIGFuZCB0 aGVyZQorCQkgKiBpcyBubyBuZWVkIHRvIGFsbG9jYXRlIGFkZGl0aW9uYWwgbWVtb3J5IGZvciBp dCB3aGVuIGl0IGdyb3dzLiBTbywgc2V0CisJCSAqIGFsbG9jYXRlZF9zaXplIHRvIG1heGltdW1f c2l6ZS4KKwkJICovCisJCWVudHJ5LT5hbGxvY2F0ZWRfc2l6ZSA9IGVudHJ5LT5tYXhpbXVtX3Np emU7CisJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIFRoZSBtYXhpbWFsIHN0cnVjdHVyZSBzcGFu cyBtdWx0aXBsZSBwYWdlcy4gSW5pdGlhbGx5IG9ubHkKKwkJICogdGhlIHBhZ2VzIHdoZXJlIHRo aXMgc3RydWN0dXJlIGVuZHMgYW5kIHdoZXJlIHRoZSBuZXh0IHN0cnVjdHVyZQorCQkgKiBzdGFy dHMgd2lsbCBiZSBhbGxvY2F0ZWQuCisJCSAqLworCQllbnRyeS0+YWxsb2NhdGVkX3NpemUgPSBl bnRyeS0+bWF4aW11bV9zaXplIC0gKGZsb29yX21heF9lbmQgLSBhbGlnbl9lbmQpOworCX0KK30K KworCisvKgorICogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgcmVnaXN0ZXJlZCBzaGFyZWQgc3Ry dWN0dXJlcyBhbmQgaW5pdGlhbGl6ZSB0aGVtLgorICovCiB2b2lkCiBTaG1lbUluaXRSZWdpc3Rl cmVkKHZvaWQpCiB7CkBAIC0xNzAsMTAgKzIyMCwxMSBAQCBTaG1lbUluaXRSZWdpc3RlcmVkKHZv aWQpCiAKIAlmb3IgKGludCBpID0gMDsgaSA8IG51bV9yZWdpc3RyYXRpb25zOyBpKyspCiAJewot CQlzaXplX3QJCWFsbG9jYXRlZF9zaXplOworCQlTaXplCQltYXhfYWxsb2Nfc2l6ZTsKIAkJdm9p ZAkgICAqc3RydWN0UHRyOwogCQlib29sCQlmb3VuZDsKIAkJU2htZW1JbmRleEVudCAqcmVzdWx0 OworCQlTaXplCQlzdHJ1Y3Rfc2l6ZTsKIAogCQllbG9nKERFQlVHMiwgIklOSVQgWyVkLyVkXTog JXMiLCBpLCBudW1fcmVnaXN0cmF0aW9ucywgcmVnaXN0cnlbaV0tPm5hbWUpOwogCkBAIC0xOTAs OCArMjQxLDE0IEBAIFNobWVtSW5pdFJlZ2lzdGVyZWQodm9pZCkKIAkJaWYgKGZvdW5kKQogCQkJ ZWxvZyhFUlJPUiwgInNobWVtIHN0cnVjdCBcIiVzXCIgaXMgYWxyZWFkeSBpbml0aWFsaXplZCIs IHJlZ2lzdHJ5W2ldLT5uYW1lKTsKIAotCQkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBpdCAq LwotCQlzdHJ1Y3RQdHIgPSBTaG1lbUFsbG9jUmF3KHJlZ2lzdHJ5W2ldLT5zaXplLCAmYWxsb2Nh dGVkX3NpemUpOworCQkvKgorCQkgKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHN0cnVjdHVyZSBp biB0aGUgc2hhcmVkIG1lbW9yeS4gVGhlIG1lbW9yeQorCQkgKiBhbGxvY2F0aW9uIGhhcHBlbnMg YXMgdGhlIGNvcnJlc3BvbmRpbmcgcGFnZXMgYXJlIHdyaXR0ZW4gdG8uIEZvciBhCisJCSAqIHJl c2l6YWJsZSBzdHJ1Y3R1cmUgYWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciBpdCB0byBncm93IHRv IGl0cworCQkgKiBtYXhpbXVtIHNpemUsIG5vdCBqdXN0IHdvcnRoIGl0cyBpbml0aWFsIHNpemUu CisJCSAqLworCQlzdHJ1Y3Rfc2l6ZSA9IHJlZ2lzdHJ5W2ldLT5tYXhfc2l6ZSA+IDAgPyByZWdp c3RyeVtpXS0+bWF4X3NpemUgOiByZWdpc3RyeVtpXS0+c2l6ZTsKKwkJc3RydWN0UHRyID0gU2ht ZW1BbGxvY1JhdyhzdHJ1Y3Rfc2l6ZSwgJm1heF9hbGxvY19zaXplKTsKIAkJaWYgKHN0cnVjdFB0 ciA9PSBOVUxMKQogCQl7CiAJCQkvKiBvdXQgb2YgbWVtb3J5OyByZW1vdmUgdGhlIGZhaWxlZCBT aG1lbUluZGV4IGVudHJ5ICovCkBAIC0yMDIsOSArMjU5LDEwIEBAIFNobWVtSW5pdFJlZ2lzdGVy ZWQodm9pZCkKIAkJCQkJCQkiIFwiJXNcIiAoJXp1IGJ5dGVzIHJlcXVlc3RlZCkiLAogCQkJCQkJ CXJlZ2lzdHJ5W2ldLT5uYW1lLCByZWdpc3RyeVtpXS0+c2l6ZSkpKTsKIAkJfQotCQlyZXN1bHQt PnNpemUgPSByZWdpc3RyeVtpXS0+c2l6ZTsKLQkJcmVzdWx0LT5hbGxvY2F0ZWRfc2l6ZSA9IGFs bG9jYXRlZF9zaXplOwogCQlyZXN1bHQtPmxvY2F0aW9uID0gc3RydWN0UHRyOworCQlyZXN1bHQt PnNpemUgPSByZWdpc3RyeVtpXS0+c2l6ZTsKKwkJcmVzdWx0LT5tYXhpbXVtX3NpemUgPSBtYXhf YWxsb2Nfc2l6ZTsKKwkJU2htZW1TZXRBbGxvY2F0ZWRTaXplKHJlc3VsdCk7CiAKIAkJKihyZWdp c3RyeVtpXS0+cHRyKSA9IHN0cnVjdFB0cjsKIAkJaWYgKHJlZ2lzdHJ5W2ldLT5pbml0X2ZuKQpA QCAtMjEyLDYgKzI3MCw2MiBAQCBTaG1lbUluaXRSZWdpc3RlcmVkKHZvaWQpCiAJfQogfQogCit2 b2lkCitTaG1lbVJlc2l6ZVJlZ2lzdGVyZWQoY29uc3QgY2hhciAqbmFtZSwgU2l6ZSBuZXdfc2l6 ZSkKK3sKKwlTaG1lbUluZGV4RW50ICpyZXN1bHQ7CisJYm9vbCBmb3VuZDsKKwlTaXplIHBhZ2Vf c2l6ZSA9IEdldE9TUGFnZVNpemUoKTsKKwljaGFyICpuZXdfZW5kOworCisJQXNzZXJ0KG5ld19z aXplID4gMCk7CisKKwkvKiBsb29rIGl0IHVwIGluIHRoZSBzaG1lbSBpbmRleCAqLworCUxXTG9j a0FjcXVpcmUoU2htZW1JbmRleExvY2ssIExXX0VYQ0xVU0lWRSk7CisJcmVzdWx0ID0gKFNobWVt SW5kZXhFbnQgKikKKwkJaGFzaF9zZWFyY2goU2htZW1JbmRleCwgbmFtZSwgSEFTSF9GSU5ELCAm Zm91bmQpOworCWlmICghZm91bmQpCisJCWVsb2coRVJST1IsICJzaG1lbSBzdHJ1Y3QgXCIlc1wi IGlzIG5vdCBpbml0aWFsaXplZCIsIG5hbWUpOworCisJQXNzZXJ0KHJlc3VsdCk7CisKKwlpZiAo cmVzdWx0LT5tYXhpbXVtX3NpemUgPCBuZXdfc2l6ZSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX0lOU1VGRklDSUVOVF9SRVNPVVJDRVMpLAorCQkJCSBlcnJtc2coIm5v dCBlbm91Z2ggYWRkcmVzcyBzcGFjZSBpcyByZXNlcnZlZCBmb3IgcmVzaXppbmcgc3RydWN0dXJl IFwiJXNcIiIsIG5hbWUpKSk7CisKKworCS8qCisJICogV2hlbiBzaHJpbmtpbmcgdGhlIG1lbW9y eSBmcm9tIHRoZSBwYWdlIGFsaWduZWQgbmV3IGVuZCB0byB0aGUgc3RhcnQgb2YKKwkgKiB0aGUg cGFnZSBjb250YWluaW5nIGVuZCBvZiB0aGUgcmVzZXJ2ZWQgc3BhY2UgaXMgbm90IHJlcXVpcmVk LiBXaGVyZWFzCisJICogd2hlbiBleHBhbmRpbmcgdGhlIG1lbW9yeSBmcm9tIHRoZSBzdGFydCBv ZiB0aGUgcGFnZSBjb250YWluaW5nIHRoZSBzdGFydAorCSAqIG9mIHRoZSBzdHJ1Y3R1cmUgdG8g dGhlIHBhZ2UgYWxpZ25lZCBuZXcgZW5kIGlzIHJlcXVpcmVkLgorCSAqLworCW5ld19lbmQgPSAo Y2hhciAqKSBUWVBFQUxJR04ocGFnZV9zaXplLCAoY2hhciAqKSByZXN1bHQtPmxvY2F0aW9uICsg bmV3X3NpemUpOworCWlmIChuZXdfc2l6ZSA8IHJlc3VsdC0+c2l6ZSkKKwl7CisJCWNoYXIgKm1h eF9lbmQgPSAoY2hhciAqKSBUWVBFQUxJR05fRE9XTihwYWdlX3NpemUsIChjaGFyICopIHJlc3Vs dC0+bG9jYXRpb24gKyByZXN1bHQtPm1heGltdW1fc2l6ZSk7CisJCVNpemUgZnJlZV9zaXplID0g bWF4X2VuZCAtIG5ld19lbmQ7CisKKwkJaWYgKGZyZWVfc2l6ZSA+IDApCisJCQlQR1NoYXJlZE1l bW9yeUVuc3VyZUZyZWVkKG5ld19lbmQsIGZyZWVfc2l6ZSk7CisJfQorCWVsc2UgaWYgKG5ld19z aXplID4gcmVzdWx0LT5zaXplKQorCXsKKwkJY2hhciAqc3RydWN0X3N0YXJ0ID0gKGNoYXIgKikg VFlQRUFMSUdOX0RPV04ocGFnZV9zaXplLCAoY2hhciAqKSByZXN1bHQtPmxvY2F0aW9uKTsKKwkJ U2l6ZSBhbGxvY19zaXplID0gbmV3X2VuZCAtIHN0cnVjdF9zdGFydDsKKworCQlpZiAoYWxsb2Nf c2l6ZSA+IDApCisJCQlQR1NoYXJlZE1lbW9yeUVuc3VyZUFsbG9jYXRlZChzdHJ1Y3Rfc3RhcnQs IGFsbG9jX3NpemUpOworCX0KKworCS8qIFVwZGF0ZSBzaG1lbSBpbmRleCBlbnRyeS4gKi8KKwly ZXN1bHQtPnNpemUgPSBuZXdfc2l6ZTsKKwlTaG1lbVNldEFsbG9jYXRlZFNpemUocmVzdWx0KTsK KworCUxXTG9ja1JlbGVhc2UoU2htZW1JbmRleExvY2spOworfQorCiAjaWZkZWYgRVhFQ19CQUNL RU5ECiB2b2lkCiBTaG1lbUF0dGFjaFJlZ2lzdGVyZWQodm9pZCkKQEAgLTcwMSw2ICs4MTUsNyBA QCBTaG1lbUluaXRTdHJ1Y3QoY29uc3QgY2hhciAqbmFtZSwgU2l6ZSBzaXplLCBib29sICpmb3Vu ZFB0cikKIAkJcmVzdWx0LT5zaXplID0gc2l6ZTsKIAkJcmVzdWx0LT5hbGxvY2F0ZWRfc2l6ZSA9 IGFsbG9jYXRlZF9zaXplOwogCQlyZXN1bHQtPmxvY2F0aW9uID0gc3RydWN0UHRyOworCQlyZXN1 bHQtPm1heGltdW1fc2l6ZSA9IGFsbG9jYXRlZF9zaXplOwogCX0KIAogCUxXTG9ja1JlbGVhc2Uo U2htZW1JbmRleExvY2spOwpAQCAtNzQ3LDcgKzg2Miw3IEBAIG11bF9zaXplKFNpemUgczEsIFNp emUgczIpCiBEYXR1bQogcGdfZ2V0X3NobWVtX2FsbG9jYXRpb25zKFBHX0ZVTkNUSU9OX0FSR1Mp CiB7Ci0jZGVmaW5lIFBHX0dFVF9TSE1FTV9TSVpFU19DT0xTIDQKKyNkZWZpbmUgUEdfR0VUX1NI TUVNX1NJWkVTX0NPTFMgNQogCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJbmZv ICopIGZjaW5mby0+cmVzdWx0aW5mbzsKIAlIQVNIX1NFUV9TVEFUVVMgaHN0YXQ7CiAJU2htZW1J bmRleEVudCAqZW50OwpAQCAtNzY5LDcgKzg4NCwxNCBAQCBwZ19nZXRfc2htZW1fYWxsb2NhdGlv bnMoUEdfRlVOQ1RJT05fQVJHUykKIAkJdmFsdWVzWzFdID0gSW50NjRHZXREYXR1bSgoY2hhciAq KSBlbnQtPmxvY2F0aW9uIC0gKGNoYXIgKikgU2htZW1TZWdIZHIpOwogCQl2YWx1ZXNbMl0gPSBJ bnQ2NEdldERhdHVtKGVudC0+c2l6ZSk7CiAJCXZhbHVlc1szXSA9IEludDY0R2V0RGF0dW0oZW50 LT5hbGxvY2F0ZWRfc2l6ZSk7Ci0JCW5hbWVkX2FsbG9jYXRlZCArPSBlbnQtPmFsbG9jYXRlZF9z aXplOworCQl2YWx1ZXNbNF0gPSBJbnQ2NEdldERhdHVtKGVudC0+bWF4aW11bV9zaXplKTsKKwor CQkvKgorCQkgKiBSZXNpemFibGUgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIGFkZHJlc3Mgc3Bh Y2UgdXB0byB0aGVpciBtYXhpbXVtCisJCSAqIHNpemUsIHRoYXQncyB3aGF0IHdlIGFyZSBjb3Vu dGluZyBoZXJlIC0gYWxsb2NhdGVkIHNwYWNlLiBGb3IgZml4ZWQKKwkJICogc2l6ZWQgc3RydWN0 dXJlcywgYWxsb2NhdGVkX3NpemUgaXMgc2FtZSBhcyB0aGUgbWF4aW11bV9zaXplLgorCQkgKi8K KwkJbmFtZWRfYWxsb2NhdGVkICs9IGVudC0+bWF4aW11bV9zaXplOwogCiAJCXR1cGxlc3RvcmVf cHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2MsCiAJCQkJCQkJIHZh bHVlcywgbnVsbHMpOwpAQCAtNzgwLDYgKzkwMiw3IEBAIHBnX2dldF9zaG1lbV9hbGxvY2F0aW9u cyhQR19GVU5DVElPTl9BUkdTKQogCW51bGxzWzFdID0gdHJ1ZTsKIAl2YWx1ZXNbMl0gPSBJbnQ2 NEdldERhdHVtKFNobWVtQWxsb2NhdG9yLT5mcmVlX29mZnNldCAtIG5hbWVkX2FsbG9jYXRlZCk7 CiAJdmFsdWVzWzNdID0gdmFsdWVzWzJdOworCXZhbHVlc1s0XSA9IHZhbHVlc1syXTsKIAl0dXBs ZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwgcnNpbmZvLT5zZXREZXNjLCB2YWx1 ZXMsIG51bGxzKTsKIAogCS8qIG91dHB1dCBhcy1vZi15ZXQgdW51c2VkIHNoYXJlZCBtZW1vcnkg Ki8KQEAgLTc4OCw2ICs5MTEsNyBAQCBwZ19nZXRfc2htZW1fYWxsb2NhdGlvbnMoUEdfRlVOQ1RJ T05fQVJHUykKIAludWxsc1sxXSA9IGZhbHNlOwogCXZhbHVlc1syXSA9IEludDY0R2V0RGF0dW0o U2htZW1TZWdIZHItPnRvdGFsc2l6ZSAtIFNobWVtQWxsb2NhdG9yLT5mcmVlX29mZnNldCk7CiAJ dmFsdWVzWzNdID0gdmFsdWVzWzJdOworCXZhbHVlc1s0XSA9IHZhbHVlc1syXTsKIAl0dXBsZXN0 b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwgcnNpbmZvLT5zZXREZXNjLCB2YWx1ZXMs IG51bGxzKTsKIAogCUxXTG9ja1JlbGVhc2UoU2htZW1JbmRleExvY2spOwpAQCAtOTc1LDIzICsx MDk5LDkgQEAgcGdfZ2V0X3NobWVtX2FsbG9jYXRpb25zX251bWEoUEdfRlVOQ1RJT05fQVJHUykK IFNpemUKIHBnX2dldF9zaG1lbV9wYWdlc2l6ZSh2b2lkKQogewotCVNpemUJCW9zX3BhZ2Vfc2l6 ZTsKLSNpZmRlZiBXSU4zMgotCVNZU1RFTV9JTkZPIHN5c2luZm87Ci0KLQlHZXRTeXN0ZW1JbmZv KCZzeXNpbmZvKTsKLQlvc19wYWdlX3NpemUgPSBzeXNpbmZvLmR3UGFnZVNpemU7Ci0jZWxzZQot CW9zX3BhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKLSNlbmRpZgotCiAJQXNzZXJ0 KElzVW5kZXJQb3N0bWFzdGVyKTsKLQlBc3NlcnQoaHVnZV9wYWdlc19zdGF0dXMgIT0gSFVHRV9Q QUdFU19VTktOT1dOKTsKLQotCWlmIChodWdlX3BhZ2VzX3N0YXR1cyA9PSBIVUdFX1BBR0VTX09O KQotCQlHZXRIdWdlUGFnZVNpemUoJm9zX3BhZ2Vfc2l6ZSwgTlVMTCk7CiAKLQlyZXR1cm4gb3Nf cGFnZV9zaXplOworCXJldHVybiBHZXRPU1BhZ2VTaXplKCk7CiB9CiAKIERhdHVtCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdAppbmRleCA4M2Y2NTAxZGYzOC4uZmJmNTc0OWJjYTcgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdApAQCAtODU5Miw4ICs4NTkyLDggQEAKIHsgb2lkID0+ICc1MDUyJywgZGVz Y3IgPT4gJ2FsbG9jYXRpb25zIGZyb20gdGhlIG1haW4gc2hhcmVkIG1lbW9yeSBzZWdtZW50JywK ICAgcHJvbmFtZSA9PiAncGdfZ2V0X3NobWVtX2FsbG9jYXRpb25zJywgcHJvcm93cyA9PiAnNTAn LCBwcm9yZXRzZXQgPT4gJ3QnLAogICBwcm92b2xhdGlsZSA9PiAndicsIHByb3JldHR5cGUgPT4g J3JlY29yZCcsIHByb2FyZ3R5cGVzID0+ICcnLAotICBwcm9hbGxhcmd0eXBlcyA9PiAne3RleHQs aW50OCxpbnQ4LGludDh9JywgcHJvYXJnbW9kZXMgPT4gJ3tvLG8sbyxvfScsCi0gIHByb2FyZ25h bWVzID0+ICd7bmFtZSxvZmYsc2l6ZSxhbGxvY2F0ZWRfc2l6ZX0nLAorICBwcm9hbGxhcmd0eXBl cyA9PiAne3RleHQsaW50OCxpbnQ4LGludDgsaW50OH0nLCBwcm9hcmdtb2RlcyA9PiAne28sbyxv LG8sb30nLAorICBwcm9hcmduYW1lcyA9PiAne25hbWUsb2ZmLHNpemUsYWxsb2NhdGVkX3NpemUs bWF4aW11bV9zaXplfScsCiAgIHByb3NyYyA9PiAncGdfZ2V0X3NobWVtX2FsbG9jYXRpb25zJyB9 LAogCiB7IG9pZCA9PiAnNDA5OScsIGRlc2NyID0+ICdJcyBOVU1BIHN1cHBvcnQgYXZhaWxhYmxl PycsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3BnX3NobWVtLmggYi9zcmMvaW5j bHVkZS9zdG9yYWdlL3BnX3NobWVtLmgKaW5kZXggMTBjN2IwNjU4NjEuLmYwZWZiZjJhZWMxIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3BnX3NobWVtLmgKKysrIGIvc3JjL2luY2x1 ZGUvc3RvcmFnZS9wZ19zaG1lbS5oCkBAIC04OSw2ICs4OSw5IEBAIGV4dGVybiBQR1NobWVtSGVh ZGVyICpQR1NoYXJlZE1lbW9yeUNyZWF0ZShTaXplIHNpemUsCiAJCQkJCQkJCQkJICAgUEdTaG1l bUhlYWRlciAqKnNoaW0pOwogZXh0ZXJuIGJvb2wgUEdTaGFyZWRNZW1vcnlJc0luVXNlKHVuc2ln bmVkIGxvbmcgaWQxLCB1bnNpZ25lZCBsb25nIGlkMik7CiBleHRlcm4gdm9pZCBQR1NoYXJlZE1l bW9yeURldGFjaCh2b2lkKTsKK2V4dGVybiB2b2lkIFBHU2hhcmVkTWVtb3J5RW5zdXJlRnJlZWQo dm9pZCAqYWRkciwgU2l6ZSBzaXplKTsKK2V4dGVybiB2b2lkIFBHU2hhcmVkTWVtb3J5RW5zdXJl QWxsb2NhdGVkKHZvaWQgKmFkZHIsIFNpemUgc2l6ZSk7CiBleHRlcm4gdm9pZCBHZXRIdWdlUGFn ZVNpemUoU2l6ZSAqaHVnZXBhZ2VzaXplLCBpbnQgKm1tYXBfZmxhZ3MpOworZXh0ZXJuIFNpemUg R2V0T1NQYWdlU2l6ZSh2b2lkKTsKIAogI2VuZGlmCQkJCQkJCS8qIFBHX1NITUVNX0ggKi8KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaCBiL3NyYy9pbmNsdWRlL3N0b3Jh Z2Uvc2htZW0uaAppbmRleCBjYmQ0ZWY4ZDAzZi4uZjI1YjYwYjVmNDIgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVt LmgKQEAgLTUwLDYgKzUwLDE0IEBAIHR5cGVkZWYgc3RydWN0IFNobWVtU3RydWN0RGVzYwogCSAq LwogCXNpemVfdAkJZXh0cmFfc2l6ZTsKIAorCS8qCisJICogTWF4aW11bSBzaXplIHRoaXMgc3Ry dWN0dXJlIGNhbiBncm93IHVwdG8gaW4gZnV0dXJlLiBUaGUgbWVtb3J5IGlzIG5vdAorCSAqIGFs bG9jYXRlZCByaWdodCBhd2F5IGJ1dCB0aGUgY29ycmVzcG9uZGluZyBhZGRyZXNzIHNwYWNlIGlz IHJlc2VydmVkIHNvCisJICogdGhhdCBtZW1vcnkgY2FuIGJlIG1hcHBlZCB0byBpdCB3aGVuIHRo ZSBzdHJ1Y3R1cmUgZ3Jvd3MuIFR5cGljYWxseQorCSAqIHNob3VsZCBiZSB1c2VkIGZvciByZXNp emFibGUgc3RydWN0dXJlcyB3aGljaCBuZWVkIGNvbnRpZ3VvdXMgbWVtb3J5LgorCSAqLworCXNp emVfdAkJbWF4X3NpemU7CisKIAkvKiBQb2ludGVyIHRvIHRoZSB2YXJpYWJsZSB0byB3aGljaCBw b2ludGVyIHRvIHRoaXMgc2hhcmVkIG1lbW9yeSBhcmVhIGlzIGFzc2lnbmVkIGFmdGVyIGFsbG9j YXRpb24uICovCiAJdm9pZAkgICAqKnB0cjsKIH0gU2htZW1TdHJ1Y3REZXNjOwpAQCAtODQsNiAr OTIsNyBAQCBleHRlcm4gdm9pZCBJbml0U2htZW1JbmRleCh2b2lkKTsKIAogZXh0ZXJuIHZvaWQg U2htZW1SZWdpc3Rlckhhc2goU2htZW1IYXNoRGVzYyAqZGVzYywgSEFTSENUTCAqaW5mb1AsIGlu dCBoYXNoX2ZsYWdzKTsKIGV4dGVybiB2b2lkIFNobWVtUmVnaXN0ZXJTdHJ1Y3QoU2htZW1TdHJ1 Y3REZXNjICpkZXNjKTsKK2V4dGVybiB2b2lkIFNobWVtUmVzaXplUmVnaXN0ZXJlZChjb25zdCBj aGFyICpuYW1lLCBTaXplIG5ld19zaXplKTsKIAogLyogTGVnYWN5IGZ1bmN0aW9ucyAqLwogZXh0 ZXJuIEhUQUIgKlNobWVtSW5pdEhhc2goY29uc3QgY2hhciAqbmFtZSwgaW50NjQgaW5pdF9zaXpl LCBpbnQ2NCBtYXhfc2l6ZSwKQEAgLTExNSw2ICsxMjQsNyBAQCB0eXBlZGVmIHN0cnVjdAogCXZv aWQJICAgKmxvY2F0aW9uOwkJLyogbG9jYXRpb24gaW4gc2hhcmVkIG1lbSAqLwogCVNpemUJCXNp emU7CQkJLyogIyBieXRlcyByZXF1ZXN0ZWQgZm9yIHRoZSBzdHJ1Y3R1cmUgKi8KIAlTaXplCQlh bGxvY2F0ZWRfc2l6ZTsgLyogIyBieXRlcyBhY3R1YWxseSBhbGxvY2F0ZWQgKi8KKwlTaXplIAkJ bWF4aW11bV9zaXplOwkvKiBtYXhpbXVtIHNpemUgdGhpcyBzdHJ1Y3R1cmUgY2FuIGdyb3cgdG8g Ki8KIH0gU2htZW1JbmRleEVudDsKIAogI2VuZGlmCQkJCQkJCS8qIFNITUVNX0ggKi8KZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2Vm aWxlCmluZGV4IDQ0YzcxNjNjMWNkLi5hNWRmNmVkYWUxOCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv bW9kdWxlcy9NYWtlZmlsZQorKysgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCkBAIC0xNCw2 ICsxNCw3IEBAIFNVQkRJUlMgPSBcCiAJCSAgbGlicHFfcGlwZWxpbmUgXAogCQkgIG9hdXRoX3Zh bGlkYXRvciBcCiAJCSAgcGxzYW1wbGUgXAorCQkgIHJlc2l6YWJsZV9zaG1lbSBcCiAJCSAgc3Bn aXN0X25hbWVfb3BzIFwKIAkJICB0ZXN0X2FpbyBcCiAJCSAgdGVzdF9iaW5hcnloZWFwIFwKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVz L21lc29uLmJ1aWxkCmluZGV4IDI2MzRhNTE5OTM1Li45NjFiYjYyNzU5ZCAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL21lc29u LmJ1aWxkCkBAIC0xMyw2ICsxMyw3IEBAIHN1YmRpcignbGlicHFfcGlwZWxpbmUnKQogc3ViZGly KCduYnRyZWUnKQogc3ViZGlyKCdvYXV0aF92YWxpZGF0b3InKQogc3ViZGlyKCdwbHNhbXBsZScp CitzdWJkaXIoJ3Jlc2l6YWJsZV9zaG1lbScpCiBzdWJkaXIoJ3NwZ2lzdF9uYW1lX29wcycpCiBz dWJkaXIoJ3NzbF9wYXNzcGhyYXNlX2NhbGxiYWNrJykKIHN1YmRpcigndGVzdF9haW8nKQpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0vTWFrZWZpbGUgYi9zcmMv dGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uZjNiZDhhYzBjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9NYWtlZmlsZQpAQCAtMCwwICsxLDIzIEBACisj IHNyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL01ha2VmaWxlCisKK01PRFVMRVMgPSBy ZXNpemFibGVfc2htZW0KK1RBUF9URVNUUyA9IDEKKworRVhURU5TSU9OID0gcmVzaXphYmxlX3No bWVtCitEQVRBID0gcmVzaXphYmxlX3NobWVtLS0xLjAuc3FsCitQR0ZJTEVERVNDID0gInJlc2l6 YWJsZV9zaG1lbSAtIHRlc3QgbW9kdWxlIGZvciByZXNpemFibGUgc2hhcmVkIG1lbW9yeSIKKwor IyBUaGlzIHRlc3QgcmVxdWlyZXMgbGlicmFyeSB0byBiZSBsb2FkZWQgYXQgdGhlIHNlcnZlciBz dGFydCwgc28gZGlzYWJsZQorIyBpbnN0YWxsY2hlY2sKK05PX0lOU1RBTExDSEVDSyA9IDEKKwor aWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQo UEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9IHNyYy90 ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgor aW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRv cF9zcmNkaXIpL3NyYy9tYWtlZmlsZXMvcGd4cy5taworZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxl cy9yZXNpemFibGVfc2htZW0vbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjQ5M2JiYmM5NWMzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9k dWxlcy9yZXNpemFibGVfc2htZW0vbWVzb24uYnVpbGQKQEAgLTAsMCArMSwzNiBAQAorIyBzcmMv dGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9tZXNvbi5idWlsZAorCityZXNpemFibGVfc2ht ZW1fc291cmNlcyA9IGZpbGVzKAorICAncmVzaXphYmxlX3NobWVtLmMnLAorKQorCitpZiBob3N0 X3N5c3RlbSA9PSAnd2luZG93cycKKyAgcmVzaXphYmxlX3NobWVtX3NvdXJjZXMgKz0gcmNfbGli X2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScsICdy ZXNpemFibGVfc2htZW0nLAorICAgICctLUZJTEVERVNDJywgJ3Jlc2l6YWJsZV9zaG1lbSAtIHRl c3QgbW9kdWxlIGZvciByZXNpemFibGUgc2hhcmVkIG1lbW9yeScsXSkKK2VuZGlmCisKK3Jlc2l6 YWJsZV9zaG1lbSA9IHNoYXJlZF9tb2R1bGUoJ3Jlc2l6YWJsZV9zaG1lbScsCisgIHJlc2l6YWJs ZV9zaG1lbV9zb3VyY2VzLAorICBrd2FyZ3M6IHBnX3Rlc3RfbW9kX2FyZ3MsCispCit0ZXN0X2lu c3RhbGxfbGlicyArPSByZXNpemFibGVfc2htZW0KKwordGVzdF9pbnN0YWxsX2RhdGEgKz0gZmls ZXMoCisgICdyZXNpemFibGVfc2htZW0uY29udHJvbCcsCisgICdyZXNpemFibGVfc2htZW0tLTEu MC5zcWwnLAorKQorCit0ZXN0cyArPSB7CisgICduYW1lJzogJ3Jlc2l6YWJsZV9zaG1lbScsCisg ICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAorICAnYmQnOiBtZXNvbi5jdXJyZW50 X2J1aWxkX2RpcigpLAorICAndGFwJzogeworICAgICd0ZXN0cyc6IFsKKyAgICAgICd0LzAwMV9y ZXNpemFibGVfc2htZW0ucGwnLAorICAgIF0sCisgICAgIyBUaGlzIHRlc3QgcmVxdWlyZXMgbGli cmFyeSB0byBiZSBsb2FkZWQgYXQgdGhlIHNlcnZlciBzdGFydCwgc28gZGlzYWJsZQorICAgICMg aW5zdGFsbGNoZWNrCisgICAgJ3J1bm5pbmdjaGVjayc6IGZhbHNlLAorICB9LAorfQpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0vcmVzaXphYmxlX3NobWVtLS0x LjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0vcmVzaXphYmxlX3NobWVt LS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMWJjYjYx MTdiNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVt L3Jlc2l6YWJsZV9zaG1lbS0tMS4wLnNxbApAQCAtMCwwICsxLDM3IEBACisvKiBzcmMvdGVzdC9t b2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9yZXNpemFibGVfc2htZW0tLTEuMC5zcWwgKi8KKworLS0g Y29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENS RUFURSBFWFRFTlNJT04KK1xlY2hvIFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiByZXNpemFibGVfc2ht ZW0iIHRvIGxvYWQgdGhpcyBmaWxlLiBccXVpdAorCistLSBGdW5jdGlvbiB0byByZXNpemUgdGhl IHRlc3Qgc3RydWN0dXJlIGluIHRoZSBzaGFyZWQgbWVtb3J5CitDUkVBVEUgRlVOQ1RJT04gcmVz aXphYmxlX3NobWVtX3Jlc2l6ZShuZXdfZW50cmllcyBpbnRlZ2VyKQorUkVUVVJOUyB2b2lkCitB UyAnTU9EVUxFX1BBVEhOQU1FJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKKy0tIEZ1bmN0aW9uIHRv IHdyaXRlIGRhdGEgdG8gYWxsIGVudHJpZXMgaW4gdGhlIHRlc3Qgc3RydWN0dXJlIGluIHNoYXJl ZCBtZW1vcnkKKy0tIFdyaXRpbmcgYWxsIHRoZSBlbnRyaWVzIG1ha2VzIHN1cmUgdGhhdCB0aGUg bWVtb3J5IGlzIGFjdHVhbGx5IGFsbG9jYXRlZCBhbmQKKy0tIG1hcHBlZCB0byB0aGUgcHJvY2Vz cywgc28gdGhhdCB3ZSBjYW4gbGF0ZXIgbWVhc3VyZSB0aGUgbWVtb3J5IHVzYWdlLgorQ1JFQVRF IEZVTkNUSU9OIHJlc2l6YWJsZV9zaG1lbV93cml0ZShlbnRyeV92YWx1ZSBpbnRlZ2VyKQorUkVU VVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKKy0t IEZ1bmN0aW9uIHRvIHZlcmlmeSB0aGF0IHNwZWNpZmllZCBudW1iZXIgb2YgaW5pdGlhbCBlbnRy aWVzIGhhdmUgZXhwZWN0ZWQgdmFsdWUuCistLSBSZWFkaW5nIGFsbCB0aGUgZW50cmllcyBtYWtl cyBzdXJlIHRoYXQgdGhlIG1lbW9yeSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlCistLSBwcm9j ZXNzLCBzbyB0aGF0IHdlIGNhbiBsYXRlciBtZWFzdXJlIHRoZSBtZW1vcnkgdXNhZ2UuCitDUkVB VEUgRlVOQ1RJT04gcmVzaXphYmxlX3NobWVtX3JlYWQoZW50cnlfY291bnQgaW50ZWdlciwgZW50 cnlfdmFsdWUgaW50ZWdlcikKK1JFVFVSTlMgYm9vbGVhbgorQVMgJ01PRFVMRV9QQVRITkFNRScK K0xBTkdVQUdFIEMgU1RSSUNUOworCistLSBGdW5jdGlvbiB0byByZXBvcnQgbWVtb3J5IHVzYWdl IHN0YXRpc3RpY3Mgb2YgdGhlIGNhbGxpbmcgYmFja2VuZAorQ1JFQVRFIEZVTkNUSU9OIHJlc2l6 YWJsZV9zaG1lbV91c2FnZShPVVQgcnNzX2Fub24gYmlnaW50LCBPVVQgcnNzX2ZpbGUgYmlnaW50 LCBPVVQgcnNzX3NobWVtIGJpZ2ludCwgT1VUIHZtX3NpemUgYmlnaW50KQorQVMgJ01PRFVMRV9Q QVRITkFNRScKK0xBTkdVQUdFIEMgU1RSSUNUOworCistLSBGdW5jdGlvbiB0byBnZXQgdGhlIHNo YXJlZCBtZW1vcnkgcGFnZSBzaXplCitDUkVBVEUgRlVOQ1RJT04gcmVzaXphYmxlX3NobWVtX3Bh Z2VzaXplKCkKK1JFVFVSTlMgaW50ZWdlcgorQVMgJ01PRFVMRV9QQVRITkFNRScKK0xBTkdVQUdF IEMgU1RSSUNUOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0v cmVzaXphYmxlX3NobWVtLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9yZXNp emFibGVfc2htZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTVm MDJlM2Y4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9z aG1lbS9yZXNpemFibGVfc2htZW0uYwpAQCAtMCwwICsxLDI4MSBAQAorLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICoKKyAqIHJlc2l6YWJsZV9zaG1lbS5jCisgKgkJVGVzdCBtb2R1bGUgZm9yIFBvc3Rn cmVTUUwncyByZXNpemFibGUgc2hhcmVkIG1lbW9yeSBmdW5jdGlvbmFsaXR5CisgKgorICogVGhp cyBtb2R1bGUgZGVtb25zdHJhdGVzIGFuZCB0ZXN0cyB0aGUgcmVzaXphYmxlIHNoYXJlZCBtZW1v cnkgQVBJCisgKiBwcm92aWRlZCBieSBzaG1lbS5jL3NobWVtLmguCisgKgorICogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImZtZ3IuaCIK KyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAi c3RvcmFnZS9zaG1lbS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgorI2luY2x1ZGUgInV0 aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisjaW5jbHVkZSAidXRpbHMv bWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKKyNpbmNsdWRlICJhY2Nl c3MvaHR1cF9kZXRhaWxzLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCitQR19NT0RVTEVfTUFH SUM7CisKKy8qCisgKiBEZWZhdWx0IGFtb3VudCBvZiBzaGFyZWQgYnVmZmVycyBhbmQgaGVuY2Ug dGhlIGFtb3VudCBvZiBzaGFyZWQgbWVtb3J5CisgKiBhbGxvY2F0ZWQgYnkgZGVmYXVsdCBpcyBp biBodW5kcmVkcyBvZiBNQnMuIFRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIHRoZSB0ZXN0CisgKiBz dHJ1Y3R1cmUgd2lsbCBiZSBub3RpY2VhYmxlIG9ubHkgd2hlbiBpdCdzIGluIHRoZSBzYW1lIG9y ZGVyLgorICovCisjZGVmaW5lIFRFU1RfSU5JVElBTF9FTlRSSUVTCSgyNSAqIDEwMjQgKiAxMDI0 KQkJLyogSW5pdGlhbCBudW1iZXIgb2YgZW50cmllcyAoMTAwTUIpICovCisjZGVmaW5lIFRFU1Rf TUFYX0VOVFJJRVMJCSgxMDAgKiAxMDI0ICogMTAyNCkJCS8qIE1heGltdW0gbnVtYmVyIG9mIGVu dHJpZXMgKDQwME1CLCA0eCBpbml0aWFsKSAqLworI2RlZmluZSBURVNUX0VOVFJZX1NJWkUJCQlz aXplb2YoaW50MzIpCQkvKiBTaXplIG9mIGVhY2ggZW50cnkgKi8KKworLyoKKyAqIFJlc2l6YWJs ZSB0ZXN0IGRhdGEgc3RydWN0dXJlIHN0b3JlZCBpbiBzaGFyZWQgbWVtb3J5LgorICoKKyAqIFdl IGRvIG5vdCB1c2UgYW55IGxvY2tzLiBUaGUgdGVzdCBwZXJmb3JtcyByZXNpemluZywgcmVhZHMg YW5kIHdyaXRlcyBub25lIG9mCisgKiB3aGljaCBhcmUgY29uY3VycmVudCB0byBrZWVwIHRoZSBj b2RlIGFuZCB0aGUgdGVzdCBzaW1wbGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IFRlc3RSZXNpemFi bGVTaG1lbVN0cnVjdAoreworCS8qIE1ldGFkYXRhICovCisJaW50MzIJCW51bV9lbnRyaWVzOwkJ LyogTnVtYmVyIG9mIGVudHJpZXMgdGhhdCBjYW4gZml0ICovCisKKwkvKiBEYXRhIGFyZWEgLSB2 YXJpYWJsZSBzaXplICovCisJaW50MzIJCWRhdGFbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKK30g VGVzdFJlc2l6YWJsZVNobWVtU3RydWN0OworCisvKiBHbG9iYWwgcG9pbnRlciB0byBvdXIgc2hh cmVkIG1lbW9yeSBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBUZXN0UmVzaXphYmxlU2htZW1TdHJ1Y3Qg KnJlc2l6YWJsZV9zaG1lbSA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIHJlc2l6YWJsZV9zaG1lbV9z aG1lbV9pbml0KHZvaWQgKmFyZyk7CisKK3N0YXRpYyBTaG1lbVN0cnVjdERlc2MgdGVzdFNobWVt RGVzYyA9IHsKKwkubmFtZSA9ICJyZXNpemFibGVfc2htZW0iLAorCS5zaXplID0gb2Zmc2V0b2Yo VGVzdFJlc2l6YWJsZVNobWVtU3RydWN0LCBkYXRhKSArIChURVNUX0lOSVRJQUxfRU5UUklFUyAq IFRFU1RfRU5UUllfU0laRSksCisJLm1heF9zaXplID0gb2Zmc2V0b2YoVGVzdFJlc2l6YWJsZVNo bWVtU3RydWN0LCBkYXRhKSArIChURVNUX01BWF9FTlRSSUVTICogVEVTVF9FTlRSWV9TSVpFKSwK KwkuYWxpZ25tZW50ID0gTUFYSU1VTV9BTElHTk9GLAorCS5pbml0X2ZuID0gcmVzaXphYmxlX3No bWVtX3NobWVtX2luaXQsCisJLnB0ciA9ICh2b2lkICoqKSAmcmVzaXphYmxlX3NobWVtLAorfTsK Kworc3RhdGljIHNobWVtX3JlcXVlc3RfaG9va190eXBlIHByZXZfc2htZW1fcmVxdWVzdF9ob29r ID0gTlVMTDsKKworc3RhdGljIHZvaWQgcmVzaXphYmxlX3NobWVtX3JlcXVlc3Qodm9pZCk7CisK Ky8qIFNRTC1jYWxsYWJsZSBmdW5jdGlvbnMgKi8KK1BHX0ZVTkNUSU9OX0lORk9fVjEocmVzaXph YmxlX3NobWVtX3Jlc2l6ZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHJlc2l6YWJsZV9zaG1lbV93 cml0ZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHJlc2l6YWJsZV9zaG1lbV9yZWFkKTsKK1BHX0ZV TkNUSU9OX0lORk9fVjEocmVzaXphYmxlX3NobWVtX3VzYWdlKTsKK1BHX0ZVTkNUSU9OX0lORk9f VjEocmVzaXphYmxlX3NobWVtX3BhZ2VzaXplKTsKKworLyoKKyAqIE1vZHVsZSBsb2FkIGNhbGxi YWNrCisgKi8KK3ZvaWQKK19QR19pbml0KHZvaWQpCit7CisJLyoKKwkgKiBUaGUgbW9kdWxlIG5l ZWRzIHRvIGJlIGxvYWRlZCB2aWEgc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzIHRvIHJlZ2lzdGVy CisJICogc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUuIEJ1dCBpZiB0aGF0J3Mgbm90IHRoZSBjYXNl LCBkb24ndCB0aHJvdyBhbiBlcnJvci4KKwkgKiBUaGUgU1FMIGZ1bmN0aW9ucyBjaGVjayBmb3Ig ZXhpc3RlbmNlIG9mIHRoZSBzaGFyZWQgbWVtb3J5IGRhdGEgc3RydWN0dXJlLgorCSAqLworCWlm ICghcHJvY2Vzc19zaGFyZWRfcHJlbG9hZF9saWJyYXJpZXNfaW5fcHJvZ3Jlc3MpCisJCXJldHVy bjsKKworI2lmZGVmIEVYRUNfQkFDS0VORAorCWVyZXBvcnQoRVJST1IsCisJCQkoZXJyY29kZShF UlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkgZXJybXNnKCJyZXNpemFibGVfc2ht ZW0gaXMgbm90IHN1cHBvcnRlZCBpbiBFWEVDX0JBQ0tFTkQgYnVpbGRzIikpKTsKKyNlbmRpZgor CisJLyogSW5zdGFsbCBob29rIHRvIHJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlLiAq LworCXByZXZfc2htZW1fcmVxdWVzdF9ob29rID0gc2htZW1fcmVxdWVzdF9ob29rOworCXNobWVt X3JlcXVlc3RfaG9vayA9IHJlc2l6YWJsZV9zaG1lbV9yZXF1ZXN0OworfQorCisvKgorICogUmVx dWVzdCBzaGFyZWQgbWVtb3J5IHJlc291cmNlcworICovCitzdGF0aWMgdm9pZAorcmVzaXphYmxl X3NobWVtX3JlcXVlc3Qodm9pZCkKK3sKKwlpZiAocHJldl9zaG1lbV9yZXF1ZXN0X2hvb2spCisJ CXByZXZfc2htZW1fcmVxdWVzdF9ob29rKCk7CisKKwkvKiBSZWdpc3RlciBvdXIgcmVzaXphYmxl IHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlICovCisJU2htZW1SZWdpc3RlclN0cnVjdCgmdGVzdFNo bWVtRGVzYyk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJl CisgKi8KK3N0YXRpYyB2b2lkCityZXNpemFibGVfc2htZW1fc2htZW1faW5pdCh2b2lkICphcmcp Cit7CisJLyoKKwkgKiBTaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSBzaG91bGQgaGF2ZSBiZWVuIGFs bG9jYXRlZCB3aXRoIHRoZSByZXF1ZXN0ZWQKKwkgKiBzaXplLiBJbml0aWFsaXplIHRoZSBtZXRh ZGF0YS4KKwkgKi8KKwlBc3NlcnQocmVzaXphYmxlX3NobWVtICE9IE5VTEwpOworCXJlc2l6YWJs ZV9zaG1lbS0+bnVtX2VudHJpZXMgPSBURVNUX0lOSVRJQUxfRU5UUklFUzsKKwltZW1zZXQocmVz aXphYmxlX3NobWVtLT5kYXRhLCAwLCBURVNUX0lOSVRJQUxfRU5UUklFUyAqIFRFU1RfRU5UUllf U0laRSk7Cit9CisKKy8qCisgKiBSZXNpemUgdGhlIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlIHRv IGFjY29tbW9kYXRlIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mCisgKiBlbnRyaWVzLgorICovCitE YXR1bQorcmVzaXphYmxlX3NobWVtX3Jlc2l6ZShQR19GVU5DVElPTl9BUkdTKQoreworI2lmbmRl ZiBFWEVDX0JBQ0tFTkQKKwlpbnQzMgkJbmV3X2VudHJpZXMgPSBQR19HRVRBUkdfSU5UMzIoMCk7 CisJU2l6ZQkJbmV3X3NpemU7CisKKwlpZiAoIXJlc2l6YWJsZV9zaG1lbSkKKwkJZXJlcG9ydChF UlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NU QVRFKSwKKwkJCQkgZXJybXNnKCJyZXNpemFibGVfc2htZW0gaXMgbm90IGluaXRpYWxpemVkIikp KTsKKworCW5ld19zaXplID0gb2Zmc2V0b2YoVGVzdFJlc2l6YWJsZVNobWVtU3RydWN0LCBkYXRh KSArIChuZXdfZW50cmllcyAqIFRFU1RfRU5UUllfU0laRSk7CisJU2htZW1SZXNpemVSZWdpc3Rl cmVkKHRlc3RTaG1lbURlc2MubmFtZSwgbmV3X3NpemUpOworCXJlc2l6YWJsZV9zaG1lbS0+bnVt X2VudHJpZXMgPSBuZXdfZW50cmllczsKKworCVBHX1JFVFVSTl9WT0lEKCk7CisjZWxzZQorCWVy ZXBvcnQoRVJST1IsCisJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCks CisJCQkgZXJybXNnKCJyZXNpemluZyBzaGFyZWQgbWVtb3J5IGlzIG5vdCBzdXBwb3J0ZWQgaW4g RVhFQ19CQUNLRU5EIGJ1aWxkcyIpKSk7CisjZW5kaWYKK30KKworLyoKKyAqIFdyaXRlIHRoZSBn aXZlbiBpbnRlZ2VyIHZhbHVlIHRvIGFsbCBlbnRyaWVzIGluIHRoZSBkYXRhIGFycmF5LgorICov CitEYXR1bQorcmVzaXphYmxlX3NobWVtX3dyaXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJaW50 MzIJCWVudHJ5X3ZhbHVlID0gUEdfR0VUQVJHX0lOVDMyKDApOworCWludDMyCQlpOworCisJaWYg KCFyZXNpemFibGVfc2htZW0pCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09E RV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygicmVzaXph YmxlX3NobWVtIGlzIG5vdCBpbml0aWFsaXplZCIpKSk7CisKKwkvKiBXcml0ZSB0aGUgdmFsdWUg dG8gYWxsIGN1cnJlbnQgZW50cmllcyAqLworCWZvciAoaSA9IDA7IGkgPCByZXNpemFibGVfc2ht ZW0tPm51bV9lbnRyaWVzOyBpKyspCisJCXJlc2l6YWJsZV9zaG1lbS0+ZGF0YVtpXSA9IGVudHJ5 X3ZhbHVlOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIENoZWNrIHdoZXRoZXIg dGhlIGZpcnN0ICdlbnRyeV9jb3VudCcgZW50cmllcyBhbGwgaGF2ZSB0aGUgZXhwZWN0ZWQgJ2Vu dHJ5X3ZhbHVlJy4KKyAqIFJldHVybnMgdHJ1ZSBpZiBhbGwgbWF0Y2gsIGZhbHNlIG90aGVyd2lz ZS4KKyAqLworRGF0dW0KK3Jlc2l6YWJsZV9zaG1lbV9yZWFkKFBHX0ZVTkNUSU9OX0FSR1MpCit7 CisJaW50MzIJCWVudHJ5X2NvdW50ID0gUEdfR0VUQVJHX0lOVDMyKDApOworCWludDMyCQllbnRy eV92YWx1ZSA9IFBHX0dFVEFSR19JTlQzMigxKTsKKwlpbnQzMgkJaTsKKworCWlmIChyZXNpemFi bGVfc2htZW0gPT0gTlVMTCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJyZXNpemFi bGVfc2htZW0gaXMgbm90IGluaXRpYWxpemVkIikpKTsKKworCS8qIFZhbGlkYXRlIGVudHJ5X2Nv dW50ICovCisJaWYgKGVudHJ5X2NvdW50IDwgMCB8fCBlbnRyeV9jb3VudCA+IHJlc2l6YWJsZV9z aG1lbS0+bnVtX2VudHJpZXMpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZW50cnlfY291bnQgJWQg aXMgb3V0IG9mIHJhbmdlICgwLi4lZCkiLCBlbnRyeV9jb3VudCwgcmVzaXphYmxlX3NobWVtLT5u dW1fZW50cmllcykpKTsKKworCS8qIENoZWNrIGlmIGZpcnN0IGVudHJ5X2NvdW50IGVudHJpZXMg aGF2ZSB0aGUgZXhwZWN0ZWQgdmFsdWUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZW50cnlfY291bnQ7 IGkrKykKKwl7CisJCWlmIChyZXNpemFibGVfc2htZW0tPmRhdGFbaV0gIT0gZW50cnlfdmFsdWUp CisJCQlQR19SRVRVUk5fQk9PTChmYWxzZSk7CisJfQorCisJUEdfUkVUVVJOX0JPT0wodHJ1ZSk7 Cit9CisKKy8qCisgKiBSZXBvcnQgbXVsdGlwbGUgbWVtb3J5IHVzYWdlIHN0YXRpc3RpY3Mgb2Yg dGhlIGNhbGxpbmcgYmFja2VuZCBwcm9jZXNzCisgKiBhcyByZXBvcnRlZCBieSB0aGUga2VybmVs LgorICogUmV0dXJucyBSc3NBbm9uLCBSc3NGaWxlLCBSc3NTaG1lbSwgVm1TaXplIGZyb20gL3By b2Mvc2VsZi9zdGF0dXMgYXMgYSByZWNvcmQuCisgKgorICogVE9ETzogU2VlIFRPRE8gbm90ZSBp biBTUUwgZGVmaW5pdGlvbiBvZiB0aGlzIGZ1bmN0aW9uLgorICovCitEYXR1bQorcmVzaXphYmxl X3NobWVtX3VzYWdlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJRklMRQkgICAqZjsKKwljaGFyCQls aW5lWzI1Nl07CisJaW50NjQJCXJzc19hbm9uX2tiID0gLTE7CisJaW50NjQJCXJzc19maWxlX2ti ID0gLTE7CisJaW50NjQJCXJzc19zaG1lbV9rYiA9IC0xOworCWludDY0CQl2bV9zaXplX2tiID0g LTE7CisJaW50CQkJZm91bmQgPSAwOworCVR1cGxlRGVzYwl0dXBkZXNjOworCURhdHVtCQl2YWx1 ZXNbNF07CisJYm9vbAkJbnVsbHNbNF07CisJSGVhcFR1cGxlCXR1cGxlOworCisJLyogT3BlbiAv cHJvYy9zZWxmL3N0YXR1cyB0byByZWFkIG1lbW9yeSBpbmZvcm1hdGlvbiAqLworCWYgPSBmb3Bl bigiL3Byb2Mvc2VsZi9zdGF0dXMiLCAiciIpOworCWlmIChmID09IE5VTEwpCisJCWVyZXBvcnQo RVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygiY291 bGQgbm90IG9wZW4gL3Byb2Mvc2VsZi9zdGF0dXM6ICVtIikpKTsKKworCS8qIExvb2sgZm9yIHRo ZSBtZW1vcnkgdXNhZ2UgbGluZXMgKi8KKwl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUp LCBmKSAhPSBOVUxMICYmIGZvdW5kIDwgNCkKKwl7CisJCWlmIChyc3NfYW5vbl9rYiA9PSAtMSAm JiBzc2NhbmYobGluZSwgIlJzc0Fub246ICVsZCBrQiIsICZyc3NfYW5vbl9rYikgPT0gMSkKKwkJ CWZvdW5kKys7CisJCWVsc2UgaWYgKHJzc19maWxlX2tiID09IC0xICYmIHNzY2FuZihsaW5lLCAi UnNzRmlsZTogJWxkIGtCIiwgJnJzc19maWxlX2tiKSA9PSAxKQorCQkJZm91bmQrKzsKKwkJZWxz ZSBpZiAocnNzX3NobWVtX2tiID09IC0xICYmIHNzY2FuZihsaW5lLCAiUnNzU2htZW06ICVsZCBr QiIsICZyc3Nfc2htZW1fa2IpID09IDEpCisJCQlmb3VuZCsrOworCQllbHNlIGlmICh2bV9zaXpl X2tiID09IC0xICYmIHNzY2FuZihsaW5lLCAiVm1TaXplOiAlbGQga0IiLCAmdm1fc2l6ZV9rYikg PT0gMSkKKwkJCWZvdW5kKys7CisJfQorCisJZmNsb3NlKGYpOworCisJLyogQnVpbGQgdHVwbGUg ZGVzY3JpcHRvciBmb3Igb3VyIHJlc3VsdCB0eXBlICovCisJaWYgKGdldF9jYWxsX3Jlc3VsdF90 eXBlKGZjaW5mbywgTlVMTCwgJnR1cGRlc2MpICE9IFRZUEVGVU5DX0NPTVBPU0lURSkKKwkJZXJl cG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCks CisJCQkJIGVycm1zZygiZnVuY3Rpb24gcmV0dXJuaW5nIHJlY29yZCBjYWxsZWQgaW4gY29udGV4 dCAiCisJCQkJCQkidGhhdCBjYW5ub3QgYWNjZXB0IGEgcmVjb3JkIikpKTsKKworCS8qIEJ1aWxk IHRoZSByZXN1bHQgdHVwbGUgKi8KKwl2YWx1ZXNbMF0gPSBJbnQ2NEdldERhdHVtKHJzc19hbm9u X2tiID49IDAgPyByc3NfYW5vbl9rYiAqIDEwMjQgOiAwKTsKKwl2YWx1ZXNbMV0gPSBJbnQ2NEdl dERhdHVtKHJzc19maWxlX2tiID49IDAgPyByc3NfZmlsZV9rYiAqIDEwMjQgOiAwKTsKKwl2YWx1 ZXNbMl0gPSBJbnQ2NEdldERhdHVtKHJzc19zaG1lbV9rYiA+PSAwID8gcnNzX3NobWVtX2tiICog MTAyNCA6IDApOworCXZhbHVlc1szXSA9IEludDY0R2V0RGF0dW0odm1fc2l6ZV9rYiA+PSAwID8g dm1fc2l6ZV9rYiAqIDEwMjQgOiAwKTsKKworCW51bGxzWzBdID0gbnVsbHNbMV0gPSBudWxsc1sy XSA9IG51bGxzWzNdID0gZmFsc2U7CisKKwl0dXBsZSA9IGhlYXBfZm9ybV90dXBsZSh0dXBkZXNj LCB2YWx1ZXMsIG51bGxzKTsKKwlQR19SRVRVUk5fREFUVU0oSGVhcFR1cGxlR2V0RGF0dW0odHVw bGUpKTsKK30KKworLyoKKyAqIHJlc2l6YWJsZV9zaG1lbV9wYWdlc2l6ZSgpIC0gR2V0IHRoZSBz aGFyZWQgbWVtb3J5IHBhZ2Ugc2l6ZQorICovCitEYXR1bQorcmVzaXphYmxlX3NobWVtX3BhZ2Vz aXplKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJUEdfUkVUVVJOX0lOVDMyKHBnX2dldF9zaG1lbV9w YWdlc2l6ZSgpKTsKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3No bWVtL3Jlc2l6YWJsZV9zaG1lbS5jb250cm9sIGIvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVf c2htZW0vcmVzaXphYmxlX3NobWVtLmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjFjZTJjNWVhMjFhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9k dWxlcy9yZXNpemFibGVfc2htZW0vcmVzaXphYmxlX3NobWVtLmNvbnRyb2wKQEAgLTAsMCArMSw1 IEBACisjIHJlc2l6YWJsZV9zaG1lbSBleHRlbnNpb24gdGVzdCBtb2R1bGUKK2NvbW1lbnQgPSAn dGVzdCBtb2R1bGUgZm9yIHRlc3RpbmcgcmVzaXphYmxlIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJl IGZ1bmN0aW9uYWxpdHknCitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1l ID0gJyRsaWJkaXIvcmVzaXphYmxlX3NobWVtJworcmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS90LzAwMV9yZXNpemFibGVfc2ht ZW0ucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS90LzAwMV9yZXNpemFibGVf c2htZW0ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQwYTRiNTA0 ZDhlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0v dC8wMDFfcmVzaXphYmxlX3NobWVtLnBsCkBAIC0wLDAgKzEsMTE4IEBACisjIS91c3IvYmluL3Bl cmwKKyMgQ29weXJpZ2h0IChjKSAyMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOwordXNlIFBv c3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1 c2UgVGVzdDo6TW9yZTsKKworIyBUZXN0IHJlc2l6YWJsZSBzaGFyZWQgbWVtb3J5IGZ1bmN0aW9u YWxpdHkKKyMgVGhpcyBjb252ZXJ0cyB0aGUgaXNvbGF0aW9uIHRlc3QgcmVzaXphYmxlX3NobWVt LnNwZWMgaW50byBhIFRBUCB0ZXN0CisKK215ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1 c3Rlci0+bmV3KCdyZXNpemFibGVfc2htZW0nKTsKKworIyBOZWVkIHRvIGNvbmZpZ3VyZSBmb3Ig cmVzaXphYmxlX3NobWVtCiskbm9kZS0+aW5pdDsKKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdy ZXNxbC5jb25mJywgJ3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllcyA9IHJlc2l6YWJsZV9zaG1lbScp OworJG5vZGUtPnN0YXJ0OworCisjIENyZWF0ZSBleHRlbnNpb24KKyRub2RlLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgJ0NSRUFURSBFWFRFTlNJT04gcmVzaXphYmxlX3NobWVtOycpOworCisjIFF1 ZXJ5IHN0cmluZyB2YXJpYWJsZXMgZm9yIHJldXNlCitteSAkcnNzX3VzYWdlX3F1ZXJ5ID0gJ1NF TEVDVCByc3Nfc2htZW0gRlJPTSByZXNpemFibGVfc2htZW1fdXNhZ2UoKTsnOworbXkgJGFsbG9j X3NpemVfcXVlcnkgPSAiU0VMRUNUIGFsbG9jYXRlZF9zaXplIEZST00gcGdfc2htZW1fYWxsb2Nh dGlvbnMgV0hFUkUgbmFtZSA9ICdyZXNpemFibGVfc2htZW0nOyI7CisjIEN1cnJlbnRseSBvbmx5 IG9uZSBzdHJ1Y3R1cmUgaXMgcmVzaXphYmxlCitteSAkZml4ZWRfc3RydWN0X3F1ZXJ5ID0gIlNF TEVDVCBjb3VudCgqKSBGUk9NIHBnX3NobWVtX2FsbG9jYXRpb25zIFdIRVJFIG5hbWUgPD4gJ3Jl c2l6YWJsZV9zaG1lbScgYW5kIGFsbG9jYXRlZF9zaXplIDw+IG1heGltdW1fc2l6ZTsiOworCitt eSAkcGFnZV9zaXplID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHJlc2l6 YWJsZV9zaG1lbV9wYWdlc2l6ZSgpOyIpOworCisjIENyZWF0ZSBiYWNrZ3JvdW5kIHNlc3Npb25z IGZvciB0ZXN0aW5nCitteSAkc2Vzc2lvbjEgPSAkbm9kZS0+YmFja2dyb3VuZF9wc3FsKCdwb3N0 Z3JlcycpOworbXkgJHNlc3Npb24yID0gJG5vZGUtPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMn KTsKKworbXkgJG51bV9lbnRyaWVzID0gMjUgKiAxMDI0ICogMTAyNDsgIyBJbml0aWFsIG51bWJl ciBvZiBlbnRyaWVzIGluIHJlc2l6YWJsZSBzaGFyZWQgbWVtb3J5CitteSAkbWF4X2VudHJpZXMg PSAxMDAgKiAxMDI0ICogMTAyNDsgIyBNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGFsbG93ZWQK K215ICRlbnRyeV9zaXplID0gNDsgIyBlYWNoIGVudHJ5IGlzIGludDMyCitteSAkcHJldl9zaG1l bV91c2FnZTEgPSAkc2Vzc2lvbjEtPnF1ZXJ5X3NhZmUoJHJzc191c2FnZV9xdWVyeSwgdmVyYm9z ZSA9PiAwKTsKK215ICRwcmV2X3NobWVtX3VzYWdlMiA9ICRzZXNzaW9uMi0+cXVlcnlfc2FmZSgk cnNzX3VzYWdlX3F1ZXJ5LCB2ZXJib3NlID0+IDApOworbXkgJHByZXZfYWxsb2Nfc2l6ZTsKKwor IyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjaGFuZ2VzIHRvIHNoYXJlZCBtZW1vcnkg YWxsb2NhdGVkIGFyZQorIyBwcm9wb3J0aW9uYXRlIHRvIHRoZSBjaGFuZ2VzIGluIHRoZSByZXNp emFibGUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUuIEJ1dAorIyB0aGVyZSBpcyBubyB3YXkgdG8g a25vdyB0aGUgc2hhcmVkIG1lbW9yeSBhbGxvY2F0ZWQgYXQgdGhlIGdpdmVuIGFkZHJlc3MgaW4g YQorIyBnaXZlbiBwcm9jZXNzLiBXZSBjYW4gb25seSBrbm93IHRoZSBzaXplIG9mIHNoYXJlZCBt ZW1vcnkgYWNjZXNzZWQgYnkgdGhlIGEKKyMgZ2l2ZW4gcHJvY2Vzcy4gSW4gY2FzZSBvZiBQb3N0 Z3JlU1FMLCB0aGF0IGluY2x1ZGVzIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvCisjIG90aGVyIHNo YXJlZCBtZW1vcnkgc3RydWN0dXJlcyBhcyB3ZWxsLiBJbnN0ZWFkLCB3ZSBqdXN0IG5vdGUgdGhl IGNoYW5nZXMgaW4KKyMgdGhlIGZ1bmN0aW9uIGJlbG93IHRvIGhlbHAgaW4gZGVidWdnaW5nIG92 ZXJhbGxvY2F0aW9uIGlzc3Vlcy4KK3N1YiBub3RlX3NobWVtX2NoYW5nZXMKK3sKKyAgICBteSAo JHByZXZfc2htZW1fdXNhZ2UxLCAkcHJldl9zaG1lbV91c2FnZTIsICRwcmV2X2FsbG9jX3NpemUp ID0gQF87CisKKyAgICBteSAkc2htZW1fdXNhZ2UxID0gJHNlc3Npb24xLT5xdWVyeV9zYWZlKCRy c3NfdXNhZ2VfcXVlcnksIHZlcmJvc2UgPT4gMCk7CisgICAgbXkgJHNobWVtX3VzYWdlMiA9ICRz ZXNzaW9uMi0+cXVlcnlfc2FmZSgkcnNzX3VzYWdlX3F1ZXJ5LCB2ZXJib3NlID0+IDApOworICAg IG15ICRhbGxvY19zaXplID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAkYWxsb2Nfc2l6 ZV9xdWVyeSwgdmVyYm9zZSA9PiAwKTsKKworICAgIG5vdGUgImNoYW5nZXMgaW4gYWxsb2NhdGVk IHNpemU6ICIgLiAoJGFsbG9jX3NpemUgLSAkcHJldl9hbGxvY19zaXplKTsKKyAgICBub3RlICJT ZXNzaW9uIDE6IGNoYW5nZXMgaW4gcnNzX3NobWVtIHVzYWdlOiAiIC4gKCRzaG1lbV91c2FnZTEg LSAkcHJldl9zaG1lbV91c2FnZTEpOworICAgIG5vdGUgIlNlc3Npb24gMTogZGlmZmVyZW5jZSBp biByc3Nfc2htZW0gY2hhbmdlIGFuZCBhbGxvY2F0ZWQgc2l6ZSBjaGFuZ2U6ICIgLiAoKCRzaG1l bV91c2FnZTEgLSAkcHJldl9zaG1lbV91c2FnZTEpIC0gKCRhbGxvY19zaXplIC0gJHByZXZfYWxs b2Nfc2l6ZSkpOworICAgIG5vdGUgIlNlc3Npb24gMjogY2hhbmdlcyBpbiByc3Nfc2htZW0gdXNh Z2U6ICIgLiAoJHNobWVtX3VzYWdlMiAtICRwcmV2X3NobWVtX3VzYWdlMik7CisgICAgbm90ZSAi U2Vzc2lvbiAyOiBkaWZmZXJlbmNlIGluIHJzc19zaG1lbSBjaGFuZ2UgYW5kIGFsbG9jYXRlZCBz aXplIGNoYW5nZTogIiAuICgoJHNobWVtX3VzYWdlMiAtICRwcmV2X3NobWVtX3VzYWdlMikgLSAo JGFsbG9jX3NpemUgLSAkcHJldl9hbGxvY19zaXplKSk7CisKKyAgICByZXR1cm4gKCRzaG1lbV91 c2FnZTEsICRzaG1lbV91c2FnZTIsICRhbGxvY19zaXplKTsKK30KKworbXkgJHZhbHVlID0gMTAw OworIyBXcml0ZSBhbmQgcmVhZCB0aGUgaW5pdGlhbCBzZXQgb2YgZW50cmllcy4KKyRzZXNzaW9u MS0+cXVlcnlfc2FmZSgiU0VMRUNUIHJlc2l6YWJsZV9zaG1lbV93cml0ZSgkdmFsdWUpOyIsIHZl cmJvc2UgPT4gMCk7Citpcygkc2Vzc2lvbjItPnF1ZXJ5X3NhZmUoIlNFTEVDVCByZXNpemFibGVf c2htZW1fcmVhZCgkbnVtX2VudHJpZXMsICR2YWx1ZSk7IiwgdmVyYm9zZSA9PiAwKSwgJ3QnLCAn ZGF0YSByZWFkIGFmdGVyIHdyaXRlIHN1Y2Nlc3NmdWwnKTsKKygkcHJldl9zaG1lbV91c2FnZTEs ICRwcmV2X3NobWVtX3VzYWdlMiwgJHByZXZfYWxsb2Nfc2l6ZSkgPSBub3RlX3NobWVtX2NoYW5n ZXMoJHByZXZfc2htZW1fdXNhZ2UxLCAkcHJldl9zaG1lbV91c2FnZTIsIDApOworaXMoJG5vZGUt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAkZml4ZWRfc3RydWN0X3F1ZXJ5KSwgJzAnLCAnaW5pdGlh bCBmaXhlZCBzaXplZCBzdHJ1Y3R1cmVzJyk7CisKKyMgUmVzaXplIHRvIG1heGltdW0KK215ICRv bGRfbnVtX2VudHJpZXMgPSAkbnVtX2VudHJpZXM7CiskbnVtX2VudHJpZXMgPSAkbWF4X2VudHJp ZXM7Ciskc2Vzc2lvbjEtPnF1ZXJ5X3NhZmUoIlNFTEVDVCByZXNpemFibGVfc2htZW1fcmVzaXpl KCRudW1fZW50cmllcyk7IiwgdmVyYm9zZSA9PiAwKTsKKyMgT2xkIGRhdGEgYWZ0ZXIgcmVzaXpl IHNob3VsZCBzdGlsbCBiZSBpbnRhY3QKK2lzKCRzZXNzaW9uMS0+cXVlcnlfc2FmZSgiU0VMRUNU IHJlc2l6YWJsZV9zaG1lbV9yZWFkKCRvbGRfbnVtX2VudHJpZXMsICR2YWx1ZSk7IiwgdmVyYm9z ZSA9PiAwKSwgJ3QnLCAnaW5pdGlhbCBkYXRhIHJlYWRhYmxlIGFmdGVyIHJlc2l6ZScpOworJHZh bHVlID0gNTAwOworJHNlc3Npb24yLT5xdWVyeV9zYWZlKCJTRUxFQ1QgcmVzaXphYmxlX3NobWVt X3dyaXRlKCR2YWx1ZSk7IiwgdmVyYm9zZSA9PiAwKTsKK2lzKCRzZXNzaW9uMS0+cXVlcnlfc2Fm ZSgiU0VMRUNUIHJlc2l6YWJsZV9zaG1lbV9yZWFkKCRudW1fZW50cmllcywgJHZhbHVlKTsiLCB2 ZXJib3NlID0+IDApLCAndCcsICdlbmxhcmdlZCBhcmVhIGRhdGEgcmVhZCBzdWNjZXNzZnVsJyk7 CisoJHByZXZfc2htZW1fdXNhZ2UxLCAkcHJldl9zaG1lbV91c2FnZTIsICRwcmV2X2FsbG9jX3Np emUpID0gbm90ZV9zaG1lbV9jaGFuZ2VzKCRwcmV2X3NobWVtX3VzYWdlMSwgJHByZXZfc2htZW1f dXNhZ2UyLCAkcHJldl9hbGxvY19zaXplKTsKK2lzKCRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgJGZpeGVkX3N0cnVjdF9xdWVyeSksICcwJywgJ2ZpeGVkIHNpemVkIHN0cnVjdHVyZXMgYWZ0 ZXIgcmVzaXplIHRvIG1heGltdW0nKTsKKworIyBTaHJpbmsgc21hbGxlciBzaXplCiskb2xkX251 bV9lbnRyaWVzID0gJG51bV9lbnRyaWVzOworJG51bV9lbnRyaWVzID0gNzUgKiAxMDI0ICogMTAy NDsKKyRzZXNzaW9uMi0+cXVlcnlfc2FmZSgiU0VMRUNUIHJlc2l6YWJsZV9zaG1lbV9yZXNpemUo JG51bV9lbnRyaWVzKTsiLCB2ZXJib3NlID0+IDApOworIyBPbGQgdmFsdWVzIHNob3VsZCByZW1h aW4gaW50YWN0IGluIHRoZSBzaHJ1bmsgYXJlYQoraXMoJHNlc3Npb24xLT5xdWVyeV9zYWZlKCJT RUxFQ1QgcmVzaXphYmxlX3NobWVtX3JlYWQoJG51bV9lbnRyaWVzLCAkdmFsdWUpOyIsIHZlcmJv c2UgPT4gMCksICd0JywgJ2RhdGEgcmVhZGFibGUgYWZ0ZXIgc2hyaW5raW5nJyk7CiskdmFsdWUg PSA5OTk7Ciskc2Vzc2lvbjEtPnF1ZXJ5X3NhZmUoIlNFTEVDVCByZXNpemFibGVfc2htZW1fd3Jp dGUoJHZhbHVlKTsiLCB2ZXJib3NlID0+IDApOworaXMoJHNlc3Npb24yLT5xdWVyeV9zYWZlKCJT RUxFQ1QgcmVzaXphYmxlX3NobWVtX3JlYWQoJG51bV9lbnRyaWVzLCAkdmFsdWUpOyIsIHZlcmJv c2UgPT4gMCksICd0JywgJ25ldyBkYXRhIHJlYWRhYmxlIGluIHNocnVua2VuIGFyZWEnKTsKKygk cHJldl9zaG1lbV91c2FnZTEsICRwcmV2X3NobWVtX3VzYWdlMiwgJHByZXZfYWxsb2Nfc2l6ZSkg PSBub3RlX3NobWVtX2NoYW5nZXMoJHByZXZfc2htZW1fdXNhZ2UxLCAkcHJldl9zaG1lbV91c2Fn ZTIsICRwcmV2X2FsbG9jX3NpemUpOworaXMoJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAk Zml4ZWRfc3RydWN0X3F1ZXJ5KSwgJzAnLCAnZml4ZWQgc2l6ZWQgc3RydWN0dXJlcyBhZnRlciBz aHJpbmtpbmcnKTsKKworIyBSZXNpemUgdG8gdGhlIHNhbWUgc2l6ZQorJHNlc3Npb24yLT5xdWVy eV9zYWZlKCJTRUxFQ1QgcmVzaXphYmxlX3NobWVtX3Jlc2l6ZSgkbnVtX2VudHJpZXMpOyIsIHZl cmJvc2UgPT4gMCk7CisjIE9sZCB2YWx1ZXMgc2hvdWxkIHJlbWFpbiBpbnRhY3QgaW4gdGhlIHNo cnVuayBhcmVhCitpcygkc2Vzc2lvbjEtPnF1ZXJ5X3NhZmUoIlNFTEVDVCByZXNpemFibGVfc2ht ZW1fcmVhZCgkbnVtX2VudHJpZXMsICR2YWx1ZSk7IiwgdmVyYm9zZSA9PiAwKSwgJ3QnLCAnZGF0 YSByZWFkYWJsZSBhZnRlciBzaHJpbmtpbmcnKTsKKyR2YWx1ZSA9IDE5OTk7Ciskc2Vzc2lvbjEt PnF1ZXJ5X3NhZmUoIlNFTEVDVCByZXNpemFibGVfc2htZW1fd3JpdGUoJHZhbHVlKTsiLCB2ZXJi b3NlID0+IDApOworaXMoJHNlc3Npb24yLT5xdWVyeV9zYWZlKCJTRUxFQ1QgcmVzaXphYmxlX3No bWVtX3JlYWQoJG51bV9lbnRyaWVzLCAkdmFsdWUpOyIsIHZlcmJvc2UgPT4gMCksICd0JywgJ25l dyBkYXRhIHJlYWRhYmxlIGluIHNocnVua2VuIGFyZWEnKTsKKygkcHJldl9zaG1lbV91c2FnZTEs ICRwcmV2X3NobWVtX3VzYWdlMiwgJHByZXZfYWxsb2Nfc2l6ZSkgPSBub3RlX3NobWVtX2NoYW5n ZXMoJHByZXZfc2htZW1fdXNhZ2UxLCAkcHJldl9zaG1lbV91c2FnZTIsICRwcmV2X2FsbG9jX3Np emUpOworaXMoJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAkZml4ZWRfc3RydWN0X3F1ZXJ5 KSwgJzAnLCAnZml4ZWQgc2l6ZWQgc3RydWN0dXJlcyBhdCB0aGUgZW5kJyk7CisKKyMgVGVzdCBy ZXNpemUgZmFpbHVyZSAoYXR0ZW1wdCB0byByZXNpemUgYmV5b25kIG1heCAtIHNob3VsZCBmYWls KQorbXkgKCRyZXQsICRzdGRvdXQsICRzdGRlcnIpID0gJG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCByZXNpemFibGVfc2htZW1fcmVzaXplKCIgLiAoJG1heF9lbnRyaWVzICogMikgLiAi KTsiKTsKK29rKCRyZXQgIT0gMCB8fCAkc3RkZXJyID1+IC9FUlJPUi8sICdSZXNpemUgYmV5b25k IG1heGltdW0gZmFpbHMnKTsKKworIyBDbGVhbnVwIHNlc3Npb25zCiskc2Vzc2lvbjEtPnF1aXQ7 Ciskc2Vzc2lvbjItPnF1aXQ7CisKKyMgQ2xlYW51cAorJG5vZGUtPnN0b3A7CisKK2RvbmVfdGVz dGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dAppbmRleCBmNGVlMmJkNzQ1OS4u MDk0MmNjMmY3NzEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMu b3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CkBAIC0xNzcwLDgg KzE3NzAsOSBAQCBwZ19zaGFkb3d8IFNFTEVDVCBwZ19hdXRoaWQucm9sbmFtZSBBUyB1c2VuYW1l LAogcGdfc2htZW1fYWxsb2NhdGlvbnN8IFNFTEVDVCBuYW1lLAogICAgIG9mZiwKICAgICBzaXpl LAotICAgIGFsbG9jYXRlZF9zaXplCi0gICBGUk9NIHBnX2dldF9zaG1lbV9hbGxvY2F0aW9ucygp IHBnX2dldF9zaG1lbV9hbGxvY2F0aW9ucyhuYW1lLCBvZmYsIHNpemUsIGFsbG9jYXRlZF9zaXpl KTsKKyAgICBhbGxvY2F0ZWRfc2l6ZSwKKyAgICByZXNlcnZlZF9zaXplCisgICBGUk9NIHBnX2dl dF9zaG1lbV9hbGxvY2F0aW9ucygpIHBnX2dldF9zaG1lbV9hbGxvY2F0aW9ucyhuYW1lLCBvZmYs IHNpemUsIGFsbG9jYXRlZF9zaXplLCBtYXhpbXVtX3NpemUpOwogcGdfc2htZW1fYWxsb2NhdGlv bnNfbnVtYXwgU0VMRUNUIG5hbWUsCiAgICAgbnVtYV9ub2RlLAogICAgIHNpemUKLS0gCjIuMzQu MQoK --000000000000009b35064b7e64e5--