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 1wblZa-002pBx-0L for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Jun 2026 20:48:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wblZX-0083DQ-2A for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Jun 2026 20:48:47 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wblZW-0083DF-0F for pgsql-hackers@lists.postgresql.org; Mon, 22 Jun 2026 20:48:47 +0000 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wblZQ-00000001dpd-3vRM for pgsql-hackers@lists.postgresql.org; Mon, 22 Jun 2026 20:48:44 +0000 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-45ef41adbc1so3811762f8f.0 for ; Mon, 22 Jun 2026 13:48:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782161318; cv=none; d=google.com; s=arc-20240605; b=JCi9vr6SSEWUtsiOBt3gJ7RuwcpVXmS4sfyOqqyphsQMzSm4xvO3iUNhRdgo/kEE16 Zikt6kszSPm97dVSQtl4SFYRE7K4/0FM7rdvRQltqi+as/mvdKV/+xCLB4sKIMU+706K faUz+lm3Bt5B6MrX44I5wBE+E25S1Xle6t0ThDpzbBne0+KojXnUCMnIFZLLQUIO9d63 GKVovYRw3GFYVYy6yUqnItrPJVL7VoF7IK7GvvPQWXaTjnUdlMTw0Td/4lrttKwlnXMt Qe+p9i2ZN6vFYhQe/gzEMmIWFvRMsgb004GKJSrHYBqa3FVO+ST6I3FWu5k7+ECrwvP0 ta6g== 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=gQDN5Rq3YBfDWyeVuOIQPTbLQySEeZH3k4xW8FiqAWg=; fh=v9WJy4Dm5WTBLVJAXaJigeB8VoJa/Q9zWAtq6fUj1nA=; b=fgnNdtTWdkrAZKOpDQgpp7lZYf7C94T0MT5fZ0TCaTTZlhRHlDLibkKCoT86/A5wlu yN510FLKU40y3eEWT/wp2CXiP7bU+9N994q00JHjwYmkDHgIAaJwvWtR0XDCTpOkWtQt bkm4rOdnuxAcu6syeu1M5pp8QDhgbE4Vp06CSqurzockjzXByTlk7iaIjdjhmu4fYsM2 k/cQy2qiL8xZBNJHjW+SGyoCuc3NV5fT/krDjfSkKYQrjVyUbV4z2kOtDjJlzPsU7o4I QNM1YUbfwdONzAcwc43xgmzUZ9XTXZVfJSvS6xjHGWiGwCS4TPe/Cim9TaUTFIsIto6d 8o0A==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20251104.gappssmtp.com; s=20251104; t=1782161318; x=1782766118; darn=lists.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=gQDN5Rq3YBfDWyeVuOIQPTbLQySEeZH3k4xW8FiqAWg=; b=OPOgmpMFMtmFwpwTwWmJuWEN9u/2L4lLKihUG3hPsjkBKvwFuGCATBXr2mLJP+3gmX 7vfneOQajrPO8Zw04Gs2FiW+gG1p6LGQaSSZtjCHOAUqU28tqiYMHwKSihO08kcIGQx2 GsdkievjM5i9pBKXnw/59t3XK1U6wrqLbHGg2M0djbUnFilKs872K4KoaCSzBDp1mO9S P7oXsE9bJ9dgaMiEwyNe/R9ZjCorrO66cZiJ3pDlQnaPfzGlP1j4O+ek18UvuEYcRWtS MIq68XYSnvJErIeGt1NFvDAeDskZeyozDqDeiH3MBTY+CO0UHgxfKJ5JyCDrsmbzPRyz qdPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782161318; x=1782766118; 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=gQDN5Rq3YBfDWyeVuOIQPTbLQySEeZH3k4xW8FiqAWg=; b=Edpd4dE1BXunGA1SDAuDEXurWT75tExw0fDlL//hpapLyAEK1yK/+afrJ0LL+DWj+p Ah8cxSYgJOfX52nmXkdOWmDWyU5pEeJrwpJXXLlmRBHvKTwA7OQNHw8P5xq3JqA5LtWa EecHPyH0+X6C/8hJF/IfTlVx92DKg4BYlqCQi5uBspNODM65CKIOQp8GnOsDTd26Gqi/ 6GQ6SqXFr6P1kdoXyncJJPJhOmrjNihas2XpRVtBb2dlDSGbx49J9SB5/fxAOPQ44AhG /S4BuOkAobrmYfel98DgYFJvYEyiRGvFRKCCM9zXBSrgoT+eQDgeQnCbKxsqUDOcuaA5 +q3g== X-Forwarded-Encrypted: i=1; AHgh+RpSwUy8Cw6UoOTuHLAayjvNepk2RZ0Dyd7GevKUc4UqVXQCjNXpuXqXsTbLz9RqZQ3UvEhN02TkyUcVoK97@lists.postgresql.org X-Gm-Message-State: AOJu0YwZzybusmnKyf/2QYjiTmSW/NtK+KsdZ+WmlWz0JPm6MUXi054G nR/rXe+yDJAfZ/xqhhqxLaIiyIDOc9USXv2eLBnPxX2s2CH1cm2fwi4/0Rdep+33X1fcSqq+C2M EI6sfT40g1eax4JSE0X62RyNvViBTx3gvbtGKEAH0aw== X-Gm-Gg: AfdE7cnyfwLuWIqsoCdxLGnm7qSNYbUYmovOd5LuTcImJMse1H77S/AbP50p8Z/jv2d mvfrhxllsaPTaFdzmx54TVhwN/9lE9ipUSXY04zdLXJ+MnS7kwdjPZYLMLyIt6hoyp+yN80v8sD hvG1QV5CS+O1SMFkSu4iQo6GyQllSmuoyey7CJxrLAQuLoz6RWzficc0DdmC/paKOzNvwObc7yA r65wopo9YpJS3DpzRB3WX7Mc8LnC04O+0z9slQUbeq7oxP/piaybHrJFHFWEWQGpE+bG81yAGto OFjX39G3nohNOg4bAAWaA9YAYozJiUtwpmrM7n3Fb54= X-Received: by 2002:a05:6000:608:b0:463:1885:6b78 with SMTP id ffacd0b85a97d-464fff62e3fmr28519706f8f.5.1782161318315; Mon, 22 Jun 2026 13:48:38 -0700 (PDT) MIME-Version: 1.0 References: <6sphk3ycctmbihlrykts7uj6mjakop6wrq2dhe3vnlmrnldz2f@uuwmkd6jjrxa> In-Reply-To: From: Peter Geoghegan Date: Mon, 22 Jun 2026 16:48:10 -0400 X-Gm-Features: AVVi8CewcvPChxaRb--VGhsLJCFFnNQ0uDIzVxtss51fgIWW2JkYcORGTkSHw2Q Message-ID: Subject: Re: index prefetching To: Andres Freund Cc: Tomas Vondra , Alexandre Felipe , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="0000000000004ffa5f0654ddc4ef" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004ffa5f0654ddc4ef Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Jun 14, 2026 at 2:54=E2=80=AFPM Peter Geoghegan wrote: > Attached is v27, which cleans up some remaining loose ends. V28 is attached. Executive summary: v28 includes better "start read stream" heuristics, adds SP-GiST support for amgetbatch, improves the heuristics that bound the work that get_actual_variable_range performs with a severely bloated index during planning, and adds more extensive testing of tricky nbtree edge-cases. Full details: * v28 replaces the "only start prefetching on second batch" heuristic with a more principled approach based on the number of heap blocks read so far. We now create a read stream the fourth time the scan switches to another heap block. This cutoff was derived empirically, by following a process driven by my microbenchmark suite. This is the standout item in v28. Obviously, the old heuristic left money on the table regarding prefetching benefits [1] -- that is the main reason to replace it with something better. Certain somewhat-selective queries are now benefit much more from prefetching, without it regressing anything else. But the new heuristic has 2 additional nonobvious advantages: 1. Typically, the new heuristic will start prefetching much earlier than the old one. But sometimes the opposite occurs: prefetching takes *longer* to begin. That also helps performance (because we weigh the actual cost we care about, not a noisy proxy for it). This helps with some of my adversarial test queries, which still had regressions before v28. I'm referring to adversarial queries that perform lateral joins with a LIMIT on the inner side of a nestloop join (e.g., the A8 query that some of us discussed over IM). Now there are no regressions at all in my main microbenchmark test suite, which was an unexpected bonus. We now seem to avoid all regressions related to LIMITs, lateral joins, nestloop antijoins, and nestloop semijoins -- without needing to pass information from the planner down to the scan to do so. 2. The rules determining when to create a read stream are now exactly the same for index-only scans -- no special case logic is required anymore. This is simpler and more elegant. The old heuristic was actually: "Start prefetching on the second batch, except when there have been exactly zero heap fetches so far (possible only during an inde-only scan)". The new heuristic only considers heap fetches. * A new v28 patch adds amgetbatch support to SP-GiST, the last in-core index AM that still used the amgettuple interface. Performance improves to a degree very similar to other index AMs: range scan queries can be 20x to 25x faster. An additional restriction applies to index-only scans, which is a separate issue peculiar to SP-GiST: index-only scans are now disabled for "long values" opclasses such as the text radix opclass. Unlike the similar IoS issue in GiST + SP-GiST (the ordered scans issue), this is a legitimate limitation in the amgetbatch design itself (there is no existing bug involved here). Don't confuse these two separate IoS-related issues. Here's why I just desupported index-only scans for this particular subset of SP-GiST opclasses: using "long values" doesn't fit well with our resource management strategy during amgetbatch scans. Our usual approach of reconstructing a value runs into the problem that the required metadata size is essentially unbounded. The prefix cannot reliably fit into a fixed per-batch reconstruction workspace; we can't use a generic conservative estimate known at the start of the scan. Note that some prefix style opclasses are not affected at all -- those that already promise to keep their prefix size under BLCKSZ (our usual amgettransform approach can work there). I think we should just accept this limitation to gain the benefit of prefetching during SP-GiST scans. I'm loathe to invent complicated new heapam infrastructure just to deal with this problem. I'd rather just not support SP-GiST at all. The SP-GiST patch is still very much WIP. I changed how SP-GiST VACUUM uses its own read stream (for prefetching on index pages) to avoid obtaining self-conflicting cleanup locks, which is another aspect of SP-GiST that presented a unique challenge. See the SPGIST_VACUUM_DRAIN_INTERVAL mechanism. * v28 includes a new patch that augments the existing VISITED_PAGES_LIMIT mechanism (which get_actual_variable_range uses to limit the amount of work its scan performs in pathological cases) with a new INDEX_PAGES_LIMIT limit. This fixes a complaint from Mark Callaghan [2] about planning time for range queries becoming excessive with queue-like tables (because VISITED_PAGES_LIMIT alone was ineffective). Note that this is now independent work; it really has nothing to do with amgetbatch support per se. I'm including it now, because the work in this area is an offshoot of the new slot-based index scan design, and was previously discussed on this thread. Background: Earlier versions of this patch set included a roughly comparable patch, which I abandoned towards the end of the PG 19 cycle. My earlier proposal wholly replaced VISITED_PAGES_LIMIT; this new patch complements VISITED_PAGES_LIMIT, by specifically targeting its one major weakness. That is, this new INDEX_PAGES_LIMIT mechanism will only tally index leaf page reads that return zero matching items to the table AM (i.e., those that don't return any batch). And so INDEX_PAGES_LIMIT is complementary to VISITED_PAGES_LIMIT; it doesn't replace it. The results from one microbenchmark indicate that the pathological case is fully fixed (times given are for planning time, in milliseconds): 1. Baseline (no dead tuples): Metric Master Patch Ratio ---------- ------------ ------------ ---------- Avg 0.140 0.129 0.916x p95 0.213 0.188 0.882x p99 0.259 0.224 0.867x 3. Main (with bulk-deleted tuples, concurrent inserts/deletes): Metric Master Patch Ratio ---------- ------------ ------------ ---------- Avg 3.017 0.259 0.086x p95 10.055 0.230 0.023x p99 28.034 2.121 0.076x It makes sense that planning time can double in extreme cases due to concentrated index bloat (relative to the case with no bloat). It does not make sense for it to increase by 20x or more. The important thing is that the worst case is some fixed small-ish multiple of the best/average case -- there's absolutely no sensible reason to expect get_actual_variable_range to not at least achieve that. * v28 also adds a new "read stream throttling" mechanism to prevent calls to the read stream callback during index-only scans that return many batches with no prefetchable heap blocks (because every batch consists of matching items that are all-visible). This is also used during plain index scans, though that is much less critical. Throttling works by pausing the read stream when we detect that amgetbatch calls aren't producing any useful heap block numbers for the read stream to consume. It makes no sense for a single call to the read stream callback to invoke amgetbatch *several* times without returning even one usable heap block number to the read stream. As a bonus, this adds test coverage for the pausing mechanism. I developed an adversarial microbenchmark for this. v27 of the patch performed pretty poorly here: =3D=3D=3D ios / cached =3D=3D=3D build / setting buffers (h+r) bufs vs master heap_fetch io_read(ms) exec(ms) exec x -------------------------------------------------------------------------= --------------------- master (no prefetch) 9 identical 5 - 0.017 1.00x rc prefetch=3Doff 9 identical 5 - 0.013 0.76x rc prefetch=3Don 72 +63 5 - 0.276 16.24x v28 leaves the rc prefetch=3Don case ~1.5x slower than master/prefetch=3Doff (not shown in the table). This seems quite acceptable for an unrealistic LIMIT N microbenchmark such as this (prefetching begins exactly where there'll be no more heap fetches, which is inherently impossible to handle without any new overhead). * v28 adds tests that cover nbtree edge cases involving array keys: one test relies critically on a call to nbtree's btposreset for mark/restore, another covers the case where btposreset is critical to correctly backing up a cursor across a batch boundary for a scan with array keys. At one point Andres asked about adding such test coverage. It was tricky to do it in a way that didn't require lots of data, but I found a way to do it that keeps the added test cycles at an acceptable level. > There's also a new isolation test (dirty_snapshot.spec) which > illustrates the role of dirty snapshots in constraint enforcement. * I removed this in v28 because it didn't seem to be pulling its weight: too many added test cycles for no actual new test coverage. > > * There have been recent CI failures on "linux-autoconf", that I > > haven't debugged. > > > > 001_aio.pl seems to reliably report "Dubious, test returned 4 (wstat > > 1024, 0x400)" on this CI target. I fully expect this v26 to fail when > > CFTester runs it through CI. I suspect that this is just a bug in one of the tests added to 001_aio.pl. I can recreate the failure locally with a -DRELCACHE_FORCE_RELEASE build. For now I have disabled that one test case, without removing it, just so CI passes. [1] https://postgr.es/m/383515d3-1122-47fd-b6ea-09152500496a@garret.ru [2] https://postgr.es/m/CAH2-Wzkt1WkKp4VRJu3qHfmKXc8W+XYv1RXg5d2d3fSvAeO=3D= rg@mail.gmail.com -- Peter Geoghegan --0000000000004ffa5f0654ddc4ef Content-Type: application/octet-stream; name="v28-0011-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Disposition: attachment; filename="v28-0011-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqpot0et1 RnJvbSAxZTFmMzdhNzNjODI4OTNkYTczNTc0ZTE0ZWM0NmQwMTY0MTRhNDAyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTk6MDggLTA0MDAKU3ViamVjdDogW1BBVENIIHYyOCAx MS8xMV0gV0lQOiBhaW86IGJ1Zm1ncjogRml4IHJhY2UgY29uZGl0aW9uIGxlYWRpbmcgdG8KIGRl YWRsb2NrcyB3aXRoIGlvX3VyaW5nCgpJZiBiYWNrZW5kIEEgaXMgaW4gdGhlIHByb2Nlc3Mgb2Yg c3RhcnRpbmcgSU8gZm9yIGEgYnVmZmVyLCB0aGVyZSBpcyBhIHNob3J0CnBlcmlvZCBpbiB3aGlj aCB0aGUgYnVmZmVyIGlzIG1hcmtlZCBhcyBJT19JTl9QUk9HUkVTUyB3aXRob3V0IGhhdmluZyBh bgphc3NvY2lhdGVkIEFJTyB3YWl0IHJlZmVyZW5jZS4gSWYgYSBiYWNrZW5kIEIgZG9lcyBXYWl0 SU8oKSBvbiB0aGF0IGJ1ZmZlciwKaXQnbGwgd2FpdCBmb3IgdGhlIGJ1ZmZlcidzIElPIGNvbmRp dGlvbiB2YXJpYWJsZSB0byBiZSBzZXQuIE1vc3Qgb2YgdGhlIHRpbWUKdGhhdCBpcyBPSywgd2hl biB0aGUgSU8gb24gdGhlIGJ1ZmZlciBmaW5pc2hlcywgdGhlIENWIHdpbGwgYmUgc2lnbmFsbGVk LgpIb3dldmVyLCB3aXRoIGlvX3VyaW5nLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBpc3N1ZXIg KEEpIG9mIHRoZSBJTyBuZXZlcgpnZXRzIGFyb3VuZCB0byBkb2luZyBzbywgZS5nLiBiZWNhdXNl IGl0IGlzIHdhaXRpbmcgZm9yIHNvbWV0aGluZyBkb25lIGJ5IEIuCgpUbyBmaXggdGhhdCwgd2Ug bmVlZCB0byBzaWduYWwgdGhlIENWIHdoZW4gc3RhZ2luZyBJTy4gVGhhdCdzIGFubm95aW5nIGFz IENWCmJyb2FkY2FzdHMgYXJlIG5vdCBjaGVhcC4gU28gd2UgYXQgbGVhc3QgYXZvaWQgaXQgZm9y IHRoZSBjb21tb24gY2FzZSBvZiBJTwpiZWluZyBleGVjdXRlZCBzeW5jaHJvbm91c2x5LgoKSSBo b3BlIHRoYXQgZXZlbnR1YWxseSB3ZSBjYW4gZ2V0IGF3YXkgZnJvbSBuZWVkaW5nIG11bHRpcGxl IHN5c3RlbXMgZm9yCnNpZ25hbGxpbmcgSU8gY29tcGxldGlvbiwgYnV0IHdlIGFyZSBjbGVhcmx5 IG5vdCB0aGVyZSB5ZXQuCi0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMg fCAyMiArKysrKysrKysrKysrKysrKysrLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9u cygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4 IDRiOTYxNTMxMy4uZThlOGEyMTIyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpA QCAtODMyMSw3ICs4MzIxLDcgQEAgTWFya0RpcnR5QWxsVW5waW5uZWRCdWZmZXJzKGludDMyICpi dWZmZXJzX2RpcnRpZWQsCiAgKiByZXBsYWNlZCB3aGlsZSBJTyBpcyBvbmdvaW5nLgogICovCiBz dGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgdm9pZAotYnVmZmVyX3N0YWdlX2NvbW1v bihQZ0Fpb0hhbmRsZSAqaW9oLCBib29sIGlzX3dyaXRlLCBib29sIGlzX3RlbXApCitidWZmZXJf c3RhZ2VfY29tbW9uKFBnQWlvSGFuZGxlICppb2gsIHVpbnQ4IGNiX2RhdGEsIGJvb2wgaXNfd3Jp dGUsIGJvb2wgaXNfdGVtcCkKIHsKIAl1aW50NjQJICAgKmlvX2RhdGE7CiAJdWludDgJCWhhbmRs ZV9kYXRhX2xlbjsKQEAgLTg0MjAsNyArODQyMCwyMyBAQCBidWZmZXJfc3RhZ2VfY29tbW9uKFBn QWlvSGFuZGxlICppb2gsIGJvb2wgaXNfd3JpdGUsIGJvb2wgaXNfdGVtcCkKIAkJICoga2VlcHMg dHJhY2suCiAJCSAqLwogCQlpZiAoIWlzX3RlbXApCisJCXsKIAkJCVJlc291cmNlT3duZXJGb3Jn ZXRCdWZmZXJJTyhDdXJyZW50UmVzb3VyY2VPd25lciwgYnVmZmVyKTsKKworCQkJLyoKKwkJCSAq IEEgYmFja2VuZCBtaWdodCBoYXZlIHN0YXJ0ZWQgd2FpdGluZyBmb3IgdGhlIElPIHVzaW5nIHRo ZQorCQkJICogYnVmZmVyJ3MgY29uZGl0aW9uIHZhcmlhYmxlLCBidXQgb25jZSB0aGUgSU8gaXMg c3VibWl0dGVkLCBpdAorCQkJICogc2hvdWxkIHdhaXQgdmlhIHRoZSBBSU8gc3Vic3lzdGVtLCBh cyBhIHdhaXRlciBtaWdodCBuZWVkIHRvCisJCQkgKiBjb21wbGV0ZSB0aGUgSU8uCisJCQkgKgor CQkJICogSG93ZXZlciwgZG9pbmcgYnJvYWRjYXN0cyBpcyBub3QgZnJlZSwgc28gd2UgbGlrZSB0 byBhdm9pZCBpdAorCQkJICogd2hlbiBub3QgbmVjZXNzYXJ5LiBJZiB0aGUgSU8gaXMgYmVpbmcg ZXhlY3V0ZWQgc3luY2hyb25vdXNseSwKKwkJCSAqIHRoaXMgYmFja2VuZCB3aWxsIGFsd2F5cyBl bmQgdXAgc2lnbmFsbGluZyB0aGUgSU9DViB3aXRob3V0CisJCQkgKiBmdXJ0aGVyIHdhaXRpbmcs IHRoZXJlZm9yZSBhdm9pZCBkb2luZyBzbyBoZXJlLgorCQkJICovCisJCQlpZiAoIShjYl9kYXRh ICYgUkVBRF9CVUZGRVJTX1NZTkNIUk9OT1VTTFkpKQorCQkJCUNvbmRpdGlvblZhcmlhYmxlQnJv YWRjYXN0KEJ1ZmZlckRlc2NyaXB0b3JHZXRJT0NWKGJ1Zl9oZHIpKTsKKwkJfQogCX0KIH0KIApA QCAtODkxNiw3ICs4OTMyLDcgQEAgYnVmZmVyX3JlYWR2X3JlcG9ydChQZ0Fpb1Jlc3VsdCByZXN1 bHQsIGNvbnN0IFBnQWlvVGFyZ2V0RGF0YSAqdGQsCiBzdGF0aWMgdm9pZAogc2hhcmVkX2J1ZmZl cl9yZWFkdl9zdGFnZShQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50OCBjYl9kYXRhKQogewotCWJ1ZmZl cl9zdGFnZV9jb21tb24oaW9oLCBmYWxzZSwgZmFsc2UpOworCWJ1ZmZlcl9zdGFnZV9jb21tb24o aW9oLCBjYl9kYXRhLCBmYWxzZSwgZmFsc2UpOwogfQogCiBzdGF0aWMgUGdBaW9SZXN1bHQKQEAg LTg5NjcsNyArODk4Myw3IEBAIHNoYXJlZF9idWZmZXJfcmVhZHZfY29tcGxldGVfbG9jYWwoUGdB aW9IYW5kbGUgKmlvaCwgUGdBaW9SZXN1bHQgcHJpb3JfcmVzdWx0LAogc3RhdGljIHZvaWQKIGxv Y2FsX2J1ZmZlcl9yZWFkdl9zdGFnZShQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50OCBjYl9kYXRhKQog ewotCWJ1ZmZlcl9zdGFnZV9jb21tb24oaW9oLCBmYWxzZSwgdHJ1ZSk7CisJYnVmZmVyX3N0YWdl X2NvbW1vbihpb2gsIGNiX2RhdGEsIGZhbHNlLCB0cnVlKTsKIH0KIAogc3RhdGljIFBnQWlvUmVz dWx0Ci0tIAoyLjUzLjAKCg== --0000000000004ffa5f0654ddc4ef Content-Type: application/octet-stream; name="v28-0009-Allow-read_stream_reset-to-not-wait-for-IO-compl.patch" Content-Disposition: attachment; filename="v28-0009-Allow-read_stream_reset-to-not-wait-for-IO-compl.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqpot0f63 RnJvbSBjNDVlM2E2YmQ4OWY0MjA3NGI1NDBjNGQxNWQ3YzRjMzA2ZmRiOTczIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgNSBBcHIgMjAyNiAwMDo0Mzo1NCAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjI4IDA5 LzExXSBBbGxvdyByZWFkX3N0cmVhbV9yZXNldCgpIHRvIG5vdCB3YWl0IGZvciBJTwogY29tcGxl dGlvbgoKTm90IHdhaXRpbmcgZm9yIElPIGR1cmluZyByZWFkX3N0cmVhbV9yZXNldCgpIGNhbiBi ZSBpbXBvcnRhbnQgZm9yIHBlcmZvcm1hbmNlCmluIGNhc2VzIHdoZXJlIHJlYWQgc3RyZWFtcyBh cmUgZnJlcXVlbnRseSByZXNldCBiZWZvcmUgdGhlIGVuZCBpcwpyZWFjaGVkLiBDdXJyZW50IHVz ZXJzIGRvIG5vdCBjb21tb25seSBkbyB0aGF0LCBidXQgdGhlIHVwY29taW5nIHdvcmsgdG8gdXNl IGEKcmVhZCBzdHJlYW0gdG8gcHJlZmV0Y2ggdGFibGUgYmxvY2tzIGFzIHBhcnQgb2YgaW5kZXgg c2NhbnMgY2FuIGRvIHNvCmZyZXF1ZW50bHkgaW4gc29tZSBxdWVyeSBwYXR0ZXJucy4gRS5nLiBp ZiB0aGVyZSBpcyBhbiBpbmRleCBzY2FuIG9uIHRoZSBpbm5lcgpzaWRlIG9mIGEgbmVzdGVkIGxv b3AgYW50aWpvaW4uCgpUaGlzIHRha2VzIGEgYml0IG9mIGNhcmUgdG8gZG8gcmlnaHQuIEp1c3Qg aW50cm9kdWNpbmcgc3VwcG9ydCBmb3IgYWJhbmRvbmluZwphIEFJTyBoYW5kbGUgY291bGQgbGVh ZCB0byB0aGUgSU8ncyBjb21wbGV0aW9uIG5vdCBiZWluZyBwcm9jZXNzZWQgdW50aWwgdGhlCmJh Y2tlbmQgZXhpdHMuIFRoYXQncyBiYWQgYmVjYXVzZSBpdCB3b3VsZCBsZWFkIHRvIHJlc291cmNl cyBoZWxkIG9udG8gZm9yIHRoZQpJTyAoZS5nLiBidWZmZXIgcGlucykgbm90IGJlaW5nIHJlbGVh c2VkIGFuZCB0aGUgaGFuZGxlIHNob3dpbmcgdXAgaW4gcGdfYWlvcy4KClRvIGF2b2lkIHRoYXQs IHRoZSBleGlzdGluZyByZXNvd25lciBjbGVhbnVwIGlzIGNoYW5nZWQgdG8gd2FpdCBmb3IgdGhl IElPJ3MKY29tcGxldGlvbiwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IGJ5IHRoZSBlbmQgb2YgdGhl IHN0YXRlbWVudCB0aGUgSU8gaGFzCmNvbXBsZXRlZC4gV2UgbWlnaHQgZXZlbnR1YWxseSB3YW50 IHRvIHJlbGF4IHRoYXQgZm9yIHNvbWUgb3BlcmF0aW9ucyAoZS5nLiwKZm9yIGJhY2tncm91bmQg V0FMIHdyaXRlcyBvciBvcHBvcnR1bmlzdGljIHByZWZldGNoaW5nKS4KCkRpc2N1c3Npb246IGh0 dHBzOi8vcG9zdGdyLmVzL20vZjN4eGZya2FmanhweXF4eXdjeHJpY3hneWl6amlyZmNleWNoeXhz Z243YndqcDVlZGFAa3diZHVoeTd0Zm11Ci0tLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9haW8uaCAg ICAgICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oICAg ICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jICAgICAg ICAgICAgICAgfCAxMDIgKysrKysrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fp by9yZWFkX3N0cmVhbS5jICAgICAgIHwgIDMxICsrKystLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9i dWZmZXIvYnVmbWdyLmMgICAgICAgICB8ICAzNCArKysrKysKIHNyYy90ZXN0L21vZHVsZXMvdGVz dF9haW8vdC8wMDFfYWlvLnBsICAgICAgfCAxMTMgKysrKysrKysrKysrKysrKysrKysKIHNyYy90 ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8tLTEuMC5zcWwgfCAgIDIgKy0KIHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYyAgICAgICAgfCAgMzggKysrKystLQogOCBmaWxl cyBjaGFuZ2VkLCAyOTEgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW8uaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmgK aW5kZXggZWM1NDNiNzg0Li5hYjdmYWQxMzAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvYWlvLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW8uaApAQCAtMzI4LDYgKzMyOCw4 IEBAIGV4dGVybiBpbnQJcGdhaW9fd3JlZl9nZXRfaWQoUGdBaW9XYWl0UmVmICppb3cpOwogZXh0 ZXJuIHZvaWQgcGdhaW9fd3JlZl93YWl0KFBnQWlvV2FpdFJlZiAqaW93KTsKIGV4dGVybiBib29s IHBnYWlvX3dyZWZfY2hlY2tfZG9uZShQZ0Fpb1dhaXRSZWYgKmlvdyk7CiAKK2V4dGVybiB2b2lk IHBnYWlvX3dyZWZfYWJhbmRvbihQZ0Fpb1dhaXRSZWYgKmlvdyk7CisKIAogCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggNjgzN2IzNWZjLi5jMDJiZmQ2 ODUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMjUyLDYgKzI1Miw3IEBAIGV4dGVybiBib29sIFN0 YXJ0UmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwKIAkJCQkJCQkg aW50ICpuYmxvY2tzLAogCQkJCQkJCSBpbnQgZmxhZ3MpOwogZXh0ZXJuIGJvb2wgV2FpdFJlYWRC dWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOworZXh0ZXJuIHZvaWQgQWJh bmRvblJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOwogCiBleHRl cm4gdm9pZCBSZWxlYXNlQnVmZmVyKEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIHZvaWQgVW5sb2Nr UmVsZWFzZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvYWlvL2Fpby5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMKaW5kZXggOGY3 ZTI2NjA3Li43MDA5ZmI3ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fp by5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jCkBAIC0xNTIsMTEgKzE1Miwx NSBAQCBjb25zdCBJb01ldGhvZE9wcyAqcGdhaW9fbWV0aG9kX29wczsKICAqIG9wZXJhdGlvbiBz dWNjZWVkZWQgYW5kIGRldGFpbHMgYWJvdXQgdGhlIGZpcnN0IGZhaWx1cmUsIGlmIGFueS4gVGhl IGVycm9yCiAgKiBjYW4gYmUgcmFpc2VkIC8gbG9nZ2VkIHdpdGggcGdhaW9fcmVzdWx0X3JlcG9y dCgpLgogICoKLSAqIFRoZSBsaWZldGltZSBvZiB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYmUgKnJl dCBuZWVkcyB0byBiZSBhdCBsZWFzdCBhcyBsb25nCi0gKiBhcyB0aGUgcGFzc2VkIGluIHJlc293 bmVyLiBJZiB0aGUgcmVzb3duZXIgcmVsZWFzZXMgcmVzb3VyY2VzIGJlZm9yZSB0aGUgSU8KLSAq IGNvbXBsZXRlcyAodHlwaWNhbGx5IGR1ZSB0byBhbiBlcnJvciksIHRoZSByZWZlcmVuY2UgdG8g KnJldCB3aWxsIGJlCi0gKiBjbGVhcmVkLiBJbiBjYXNlIG9mIHJlc293bmVyIGNsZWFudXAgKnJl dCB3aWxsIG5vdCBiZSB1cGRhdGVkIHdpdGggdGhlCi0gKiByZXN1bHRzIG9mIHRoZSBJTyBvcGVy YXRpb24uCisgKiBUaGUgbGlmZXRpbWUgb2YgdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5ICpyZXQg bmVlZHMgdG8gYmUgYXQgbGVhc3QgYXMgbG9uZworICogYXMgdGhlIHBhc3NlZCBpbiByZXNvd25l ci4KKyAqCisgKiBJZiB0aGUgcmVzb3duZXIgcmVsZWFzZXMgcmVzb3VyY2VzIGJlZm9yZSB0aGUg SU8gY29tcGxldGVzICh0eXBpY2FsbHkgZHVlCisgKiB0byBhbiBlcnJvciksIHRoZSByZWZlcmVu Y2UgdG8gKnJldCB3aWxsIGJlIGNsZWFyZWQuIEluIGNhc2Ugb2YgcmVzb3duZXIKKyAqIGNsZWFu dXAgKnJldCB3aWxsIG5vdCBiZSB1cGRhdGVkIHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIElPIG9w ZXJhdGlvbi4KKyAqCisgKiBJZiB0aGUgY2FsbGVyIGxvc2VzIGludGVyZXN0IGluIHRoZSBJTyBi ZWZvcmUgY29tcGxldGlvbgorICogcGdhaW9fd3JlZl9hYmFuZG9uKCkgY2FuIGJlIHVzZWQuCiAg Ki8KIFBnQWlvSGFuZGxlICoKIHBnYWlvX2lvX2FjcXVpcmUoc3RydWN0IFJlc291cmNlT3duZXJE YXRhICpyZXNvd25lciwgUGdBaW9SZXR1cm4gKnJldCkKQEAgLTI3OCw2ICsyODIsMTQgQEAgcGdh aW9faW9fcmVsZWFzZV9yZXNvd25lcihkbGlzdF9ub2RlICppb2hfbm9kZSwgYm9vbCBvbl9lcnJv cikKIAlSZXNvdXJjZU93bmVyRm9yZ2V0QWlvSGFuZGxlKGlvaC0+cmVzb3duZXIsICZpb2gtPnJl c293bmVyX25vZGUpOwogCWlvaC0+cmVzb3duZXIgPSBOVUxMOwogCisJLyoKKwkgKiBOZWVkIHRv IHVucmVnaXN0ZXIgdGhlIHJlcG9ydGluZyBvZiB0aGUgSU8ncyByZXN1bHQsIHRoZSBtZW1vcnkg aXQncworCSAqIHJlZmVyZW5jaW5nIGxpa2VseSBoYXMgZ29uZSBhd2F5LiBEbyBzbyBiZWZvcmUg cG90ZW50aWFsbHkgd2FpdGluZworCSAqIGJlbG93LCBhcyB0aGF0IGNvdWxkIGNhdXNlIHRoZSB1 bmRlc2lyZWQgd3JpdGVzLgorCSAqLworCWlmIChpb2gtPnJlcG9ydF9yZXR1cm4pCisJCWlvaC0+ cmVwb3J0X3JldHVybiA9IE5VTEw7CisKIAlzd2l0Y2ggKChQZ0Fpb0hhbmRsZVN0YXRlKSBpb2gt PnN0YXRlKQogCXsKIAkJY2FzZSBQR0FJT19IU19JRExFOgpAQCAtMzAwLDIyICszMTIsMzIgQEAg cGdhaW9faW9fcmVsZWFzZV9yZXNvd25lcihkbGlzdF9ub2RlICppb2hfbm9kZSwgYm9vbCBvbl9l cnJvcikKIAkJCWlmICghb25fZXJyb3IpCiAJCQkJZWxvZyhXQVJOSU5HLCAiQUlPIGhhbmRsZSB3 YXMgbm90IHN1Ym1pdHRlZCIpOwogCQkJcGdhaW9fc3VibWl0X3N0YWdlZCgpOwotCQkJYnJlYWs7 CisKKwkJCS8qIG5vdyB0aGF0IHRoZSBJTyBpcyBzdWJtaXR0ZWQsIG5lZWQgdG8gd2FpdCAqLwor CQkJcGdfZmFsbHRocm91Z2g7CiAJCWNhc2UgUEdBSU9fSFNfU1VCTUlUVEVEOgogCQljYXNlIFBH QUlPX0hTX0NPTVBMRVRFRF9JTzoKIAkJY2FzZSBQR0FJT19IU19DT01QTEVURURfU0hBUkVEOgog CQljYXNlIFBHQUlPX0hTX0NPTVBMRVRFRF9MT0NBTDoKLQkJCS8qIHRoaXMgaXMgZXhwZWN0ZWQg dG8gaGFwcGVuICovCisKKwkJCS8qCisJCQkgKiBUaGlzIGlzIGV4cGVjdGVkIHRvIGhhcHBlbiwg ZS5nLiBhZnRlciBhbiBlcnJvciBvciBhZnRlcgorCQkJICogcGdhaW9fd3JlZl9hYmFuZG9uKCkg d2FzIGNhbGxlZC4KKwkJCSAqCisJCQkgKiBGb3Igbm93IGFsd2F5cyB3YWl0IGZvciB0aGUgSU8n cyBjb21wbGV0aW9uIGR1cmluZyByZXNvd25lcgorCQkJICogY2xlYW51cC4gVGhpcyBwcm92aWRl cyBhIGJvdW5kIG9uIGhvdyBsb25nIGFmdGVyIGFuIGVycm9yIG9yCisJCQkgKiBwZ2Fpb193cmVm X2FiYW5kb24oKSBhbiBJTyBoYW5kbGUgd2lsbCBzaG93IHVwIGFzIHVzZWQgYW5kIGhvdworCQkJ ICogbG9uZyBhbiB1bmNvbXBsZXRlZCBJTyBjYW4gY2F1c2UgcmVzb3VyY2VzIHRvIGJlIHJldGFp bmVkLgorCQkJICoKKwkJCSAqIEl0IGlzIHF1aXRlIHBvc3NpYmxlIHRoYXQgd2UgZXZlbnR1YWxs eSB3YW50IHRvIHN1cHBvcnQgSU8KKwkJCSAqIG9wZXJhdGlvbnMgdGhhdCBsYXN0IGxvbmdlciwg ZS5nLiBmb3IgV0FMIHdyaXRlcyBpbiB0aGUKKwkJCSAqIGJhY2tncm91bmQuIElmIHNvIHdlIHdp bGwgZWl0aGVyIG5lZWQgdG8gdXNlIGEgbG9uZ2VyIGxpdmVkCisJCQkgKiByZXNvd25lciBvciBh ZGQgYSBmbGFnIGNvbnRyb2xsaW5nIHdoZW4gdGhpcyBjbGVhbnVwIGhhcHBlbnMuCisJCQkgKi8K KwkJCXBnYWlvX2lvX3dhaXQoaW9oLCBpb2gtPmdlbmVyYXRpb24pOwogCQkJYnJlYWs7CiAJfQog Ci0JLyoKLQkgKiBOZWVkIHRvIHVucmVnaXN0ZXIgdGhlIHJlcG9ydGluZyBvZiB0aGUgSU8ncyBy ZXN1bHQsIHRoZSBtZW1vcnkgaXQncwotCSAqIHJlZmVyZW5jaW5nIGxpa2VseSBoYXMgZ29uZSBh d2F5LgotCSAqLwotCWlmIChpb2gtPnJlcG9ydF9yZXR1cm4pCi0JCWlvaC0+cmVwb3J0X3JldHVy biA9IE5VTEw7Ci0KIAlSRVNVTUVfSU5URVJSVVBUUygpOwogfQogCkBAIC0xMDUwLDYgKzEwNzIs NTggQEAgcGdhaW9fd3JlZl9jaGVja19kb25lKFBnQWlvV2FpdFJlZiAqaW93KQogCXJldHVybiBm YWxzZTsKIH0KIAorLyoKKyAqIERlY2xhcmUgdGhhdCBhIHdhaXQgcmVmZXJlbmNlIHRvIGFuIElP LCBzdGFydGVkIGJ5IHRoaXMgYmFja2VuZCwgaXMgbm90IG9mCisgKiBpbnRlcmVzdCB0byB0aGlz IGJhY2tlbmQgYW55bW9yZS4gT25jZSBjYWxsZWQsIHRoZSBQZ0Fpb1JldHVybiAqcmV0IHBhc3Nl ZAorICogdG8gcGdhaW9faW9fYWNxdWlyZVtfbmJdKCkgd2lsbCBub3QgYmUgdXBkYXRlZCBhbnlt b3JlIGFuZCB0aHVzIGNhbiBiZQorICogZnJlZWQuCisgKi8KK3ZvaWQKK3BnYWlvX3dyZWZfYWJh bmRvbihQZ0Fpb1dhaXRSZWYgKmlvdykKK3sKKwl1aW50NjQJCXJlZl9nZW5lcmF0aW9uOworCWJv b2wJCWFtX293bmVyOworCVBnQWlvSGFuZGxlICppb2g7CisJUGdBaW9IYW5kbGVTdGF0ZSBzdGF0 ZTsKKworCWlvaCA9IHBnYWlvX2lvX2Zyb21fd3JlZihpb3csICZyZWZfZ2VuZXJhdGlvbik7CisK KwlhbV9vd25lciA9IGlvaC0+b3duZXJfcHJvY25vID09IE15UHJvY051bWJlcjsKKworCS8qCisJ ICogSXQgaXMgc2FmZSB0byBwZXJmb3JtIHRoaXMgY2hlY2sgYmVmb3JlIGNoZWNraW5nIGlmIHRo ZSBJTyB3YXMgcmVjeWNsZWQKKwkgKiAoYW5kIGJlZm9yZSB3ZSBob2xkIGludGVycnVwdHMpIGFz IHRoZSBvd25lciBvZiBhbiBJTyBjYW5ub3QgY2hhbmdlLgorCSAqLworCWlmICghYW1fb3duZXIp CisJCWVsb2coRVJST1IsICJvbmx5IElPcyBvd25lZCBieSBjdXJyZW50IGJhY2tlbmQgY2FuIGJl IGFiYW5kb25lZCIpOworCisJLyoKKwkgKiBUbyBlbnN1cmUgdGhhdCB0aGUgSU8gd29uJ3QgYmUg cmVjeWNsZWQgd2hpbGUgd2UgY2hlY2sgKGUuZy4gZHVyaW5nIHRoZQorCSAqIGVtaXNzaW9uIG9m IGEgZGVidWcgbWVzc2FnZSkuCisJICovCisJSE9MRF9JTlRFUlJVUFRTKCk7CisKKwlpZiAoIXBn YWlvX2lvX3dhc19yZWN5Y2xlZChpb2gsIHJlZl9nZW5lcmF0aW9uLCAmc3RhdGUpKQorCXsKKwkJ cGdhaW9fZGVidWdfaW8oREVCVUczLCBpb2gsCisJCQkJCSAgICJkaXNjYXJkaW5nIHJlc3VsdCAl cCwgcmVzb3duZXI6ICVwIiwKKwkJCQkJICAgaW9oLT5yZXBvcnRfcmV0dXJuLCBpb2gtPnJlc293 bmVyKTsKKworCQlpZiAoc3RhdGUgPCBQR0FJT19IU19TVUJNSVRURUQpCisJCQllbG9nKEVSUk9S LCAiYWJhbmRvbmluZyBJTyBpbiB3cm9uZyBzdGF0ZTogJWQiLCBzdGF0ZSk7CisKKwkJLyoKKwkJ ICogQWxsIHdlIG5lZWQgdG8gZG8gdG8gYWJhbmRvbiB0aGUgSU8gaXMgdG8gY2xlYXIgaXRzIHJl cG9ydF9yZXR1cm4KKwkJICogZmllbGQuIFdpdGhvdXQgdGhhdCB3ZSBjb3VsZCBlbmQgdXAgd3Jp dGluZyB0byBmcmVlZC9yZXVzZWQgbWVtb3J5CisJCSAqIHdoZW4gdGhlIElPIGNvbXBsZXRlcy4K KwkJICovCisJCWlmIChpb2gtPnJlcG9ydF9yZXR1cm4pCisJCQlpb2gtPnJlcG9ydF9yZXR1cm4g PSBOVUxMOworCX0KKworCVJFU1VNRV9JTlRFUlJVUFRTKCk7Cit9CisKIAogCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVh ZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5kZXgg YTMxODUzOWU1Li4xMjVkOGJhYmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlv L3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0u YwpAQCAtMTEwLDcgKzExMCw4IEBAIHN0cnVjdCBSZWFkU3RyZWFtCiAJICogZm9yIElPIGNvbWJp bmluZyBldmVuIGluIGNhc2VzIHdoZXJlIHRoZSBJL08gc3Vic3lzdGVtIGNhbiBrZWVwIHVwIGF0 IGEKIAkgKiBsb3cgcmVhZC1haGVhZCBkaXN0YW5jZSwgYXMgZG9pbmcgbGFyZ2VyIElPcyBpcyBt b3JlIGVmZmljaWVudC4KIAkgKgotCSAqIFNldCB0byAwIHdoZW4gdGhlIGVuZCBvZiB0aGUgc3Ry ZWFtIGlzIHJlYWNoZWQuCisJICogU2V0IHRvIDAgd2hlbiB0aGUgZW5kIG9mIHRoZSBzdHJlYW0g aXMgcmVhY2hlZCBhbmQgdG8gLTEgd2hlbiB0aGUKKwkgKiBzdHJlYW0gaXMgcmVzZXQuCiAJICov CiAJaW50MTYJCWNvbWJpbmVfZGlzdGFuY2U7CiAJaW50MTYJCXJlYWRhaGVhZF9kaXN0YW5jZTsK QEAgLTU1Myw4ICs1NTQsOCBAQCByZWFkX3N0cmVhbV9zdGFydF9wZW5kaW5nX3JlYWQoUmVhZFN0 cmVhbSAqc3RyZWFtKQogc3RhdGljIGlubGluZSBib29sCiByZWFkX3N0cmVhbV9zaG91bGRfbG9v a19haGVhZChSZWFkU3RyZWFtICpzdHJlYW0pCiB7Ci0JLyogSWYgdGhlIGNhbGxiYWNrIGhhcyBz aWduYWxlZCBlbmQtb2Ytc3RyZWFtLCB3ZSdyZSBkb25lICovCi0JaWYgKHN0cmVhbS0+cmVhZGFo ZWFkX2Rpc3RhbmNlID09IDApCisJLyogSWYgd2UgcmVhY2hlZCBlbmQtb2Ytc3RyZWFtIG9yIGEg cmVzZXQsIHdlJ3JlIGRvbmUgKi8KKwlpZiAoc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPD0g MCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogbmV2ZXIgc3RhcnQgbW9yZSBJT3MgdGhhbiBvdXIg Y2FwICovCkBAIC02MzIsNyArNjMzLDcgQEAgcmVhZF9zdHJlYW1fc2hvdWxkX2lzc3VlX25vdyhS ZWFkU3RyZWFtICpzdHJlYW0pCiAJICogSWYgdGhlIGNhbGxiYWNrIGhhcyBzaWduYWxlZCBlbmQt b2Ytc3RyZWFtLCBzdGFydCB0aGUgcGVuZGluZyByZWFkCiAJICogaW1tZWRpYXRlbHkuIFRoZXJl IGlzIG5vIGZ1cnRoZXIgcG90ZW50aWFsIGZvciBJTyBjb21iaW5pbmcuCiAJICovCi0JaWYgKHN0 cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlID09IDApCisJaWYgKHN0cmVhbS0+cmVhZGFoZWFkX2Rp c3RhbmNlIDw9IDApCiAJCXJldHVybiB0cnVlOwogCiAJLyoKQEAgLTc0MCw3ICs3NDEsNyBAQCBy ZWFkX3N0cmVhbV9sb29rX2FoZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkgKiBzdHJlYW0uICBJ biB0aGUgd29yc3QgY2FzZSB3ZSBjYW4gYWx3YXlzIG1ha2UgcHJvZ3Jlc3Mgb25lIGJ1ZmZlciBh dCBhCiAJICogdGltZS4KIAkgKi8KLQlBc3NlcnQoc3RyZWFtLT5waW5uZWRfYnVmZmVycyA+IDAg fHwgc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPT0gMCk7CisJQXNzZXJ0KHN0cmVhbS0+cGlu bmVkX2J1ZmZlcnMgPiAwIHx8IHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlIDw9IDApOwogCiAJ aWYgKHN0cmVhbS0+YmF0Y2hfbW9kZSkKIAkJcGdhaW9fZXhpdF9iYXRjaG1vZGUoKTsKQEAgLTEx NDYsOCArMTE0Nyw4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0gKnN0cmVh bSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAl7CiAJCUFzc2VydChzdHJlYW0tPm9sZGVzdF9i dWZmZXJfaW5kZXggPT0gc3RyZWFtLT5uZXh0X2J1ZmZlcl9pbmRleCk7CiAKLQkJLyogRW5kIG9m IHN0cmVhbSByZWFjaGVkPyAgKi8KLQkJaWYgKHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlID09 IDApCisJCS8qIEVuZCBvZiBzdHJlYW0gLyByZXNldCByZWFjaGVkPyAgKi8KKwkJaWYgKHN0cmVh bS0+cmVhZGFoZWFkX2Rpc3RhbmNlIDw9IDApCiAJCQlyZXR1cm4gSW52YWxpZEJ1ZmZlcjsKIAog CQkvKgpAQCAtMTE4OCw3ICsxMTg5LDE3IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRT dHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAkJQXNzZXJ0KHN0cmVhbS0+ aW9zW2lvX2luZGV4XS5vcC5idWZmZXJzID09CiAJCQkgICAmc3RyZWFtLT5idWZmZXJzW29sZGVz dF9idWZmZXJfaW5kZXhdKTsKIAotCQluZWVkZWRfd2FpdCA9IFdhaXRSZWFkQnVmZmVycygmc3Ry ZWFtLT5pb3NbaW9faW5kZXhdLm9wKTsKKwkJLyoKKwkJICogSWYgdGhlIHN0cmVhbSBoYXMgYmVl biByZXNldCwgZG9uJ3QgZXZlbiB3YWl0IGZvciB0aGUgSU8sIGp1c3QKKwkJICogYWJhbmRvbiBp dC4KKwkJICovCisJCWlmIChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA8IDApCisJCXsKKwkJ CUFiYW5kb25SZWFkQnVmZmVycygmc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wKTsKKwkJCW5lZWRl ZF93YWl0ID0gZmFsc2U7CisJCX0KKwkJZWxzZQorCQkJbmVlZGVkX3dhaXQgPSBXYWl0UmVhZEJ1 ZmZlcnMoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcCk7CiAKIAkJQXNzZXJ0KHN0cmVhbS0+aW9z X2luX3Byb2dyZXNzID4gMCk7CiAJCXN0cmVhbS0+aW9zX2luX3Byb2dyZXNzLS07CkBAIC0xNDIw LDggKzE0MzEsOCBAQCByZWFkX3N0cmVhbV9yZXNldChSZWFkU3RyZWFtICpzdHJlYW0pCiAJQnVm ZmVyCQlidWZmZXI7CiAKIAkvKiBTdG9wIGxvb2tpbmcgYWhlYWQuICovCi0Jc3RyZWFtLT5yZWFk YWhlYWRfZGlzdGFuY2UgPSAwOwotCXN0cmVhbS0+Y29tYmluZV9kaXN0YW5jZSA9IDA7CisJc3Ry ZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPSAtMTsKKwlzdHJlYW0tPmNvbWJpbmVfZGlzdGFuY2Ug PSAtMTsKIAogCS8qIEZvcmdldCBidWZmZXJlZCBibG9jayBudW1iZXIgYW5kIGZhc3QgcGF0aCBz dGF0ZS4gKi8KIAlzdHJlYW0tPmJ1ZmZlcmVkX2Jsb2NrbnVtID0gSW52YWxpZEJsb2NrTnVtYmVy OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCBkNmMwY2MxZjYuLjRiOTYxNTMx MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTE2MTMsNiArMTYxMywxMCBA QCBTdGFydFJlYWRCdWZmZXJzSW1wbChSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLAog ICogYnVmZmVycyBtdXN0IHJlbWFpbiB2YWxpZCB1bnRpbCBXYWl0UmVhZEJ1ZmZlcnMoKSBpcyBj YWxsZWQsIGFuZCBhbnkKICAqIGZvcndhcmRlZCBidWZmZXJzIG11c3QgYWxzbyBiZSBwcmVzZXJ2 ZWQgZm9yIGEgY29udGludWluZyBjYWxsIHVubGVzcwogICogdGhleSBhcmUgZXhwbGljaXRseSBy ZWxlYXNlZC4KKyAqCisgKiBJZiB0cnVlIHdhcyByZXR1cm5lZCwgdGhlIG1lbW9yeSB1bmRlcmx5 aW5nIHRoZSBSZWFkQnVmZmVyc09wZXJhdGlvbiBuZWVkcworICogdG8gc3RheSBhcm91bmQgdW50 aWwgZWl0aGVyIFdhaXRSZWFkQnVmZmVycygpIG9yIEFiYW5kb25SZWFkQnVmZmVycygpIGlzCisg KiBjYWxsZWQgKG9yIGFuIGVycm9yIGlzIHRocm93bikuCiAgKi8KIGJvb2wKIFN0YXJ0UmVhZEJ1 ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwKQEAgLTIxNzQsNiArMjE3OCwz NiBAQCBBc3luY1JlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIGlu dCAqbmJsb2Nrc19wcm9ncmVzcykKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIERlY2xhcmUg dGhhdCB0aGlzIGJhY2tlbmQgaXMgbm90IGludGVyZXN0ZWQgaW4gdGhlIG9wZXJhdGlvbiBhbnlt b3JlLiBUaGlzCisgKiBuZWVkcyB0byBiZSBjYWxsZWQgaWYgU3RhcnRSZWFkQnVmZmVycygpIHJl dHVybmVkIHRydWUgYW5kIHRoZQorICogUmVhZEJ1ZmZlcnNPcGVyYXRpb24gaXMgdG8gYmUgZnJl ZWQgd2l0aG91dCBjYWxsaW5nIFdhaXRSZWFkQnVmZmVycygpCisgKiAobGVhdmluZyBlcnJvcnMg YXNpZGUpLgorICoKKyAqIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byByZWxl YXNlIGJ1ZmZlciBwaW5zIChzZWVtcyBzaW1wbGVyCisgKiB0aGF0IHdheSwgYXMgdGhhdCBhbHJl YWR5IGlzIHJlcXVpcmVkIGlmIG5vIElPIGhhZCBiZWVuIG5lY2Vzc2FyeSkuCisgKi8KK3ZvaWQK K0FiYW5kb25SZWFkQnVmZmVycyhSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uKQorewor CVBnQWlvV2FpdFJlZiBpb193cmVmID0gb3BlcmF0aW9uLT5pb193cmVmOworCisJLyogc2VlIGVx dWl2YWxlbnQgV2FpdFJlYWRCdWZmZXJzKCkgY2hlY2sgKi8KKwlpZiAoIXBnYWlvX3dyZWZfdmFs aWQoJmlvX3dyZWYpICYmIGlvX21ldGhvZCAhPSBJT01FVEhPRF9TWU5DKQorCQllbG9nKEVSUk9S LCAiYWJhbmRvbmluZyByZWFkIG9wZXJhdGlvbiB0aGF0IGRpZG4ndCByZWFkIik7CisKKwlpZiAo IXBnYWlvX3dyZWZfdmFsaWQoJmlvX3dyZWYpKQorCQlyZXR1cm47CisKKwlwZ2Fpb193cmVmX2Ns ZWFyKCZvcGVyYXRpb24tPmlvX3dyZWYpOworCisJLyogY2FuJ3QgYWJhbmRvbiBmb3JlaWduIElP cyAobm9yIGRvIHdlIG5lZWQgdG8pICovCisJaWYgKG9wZXJhdGlvbi0+Zm9yZWlnbl9pbykKKwkJ b3BlcmF0aW9uLT5mb3JlaWduX2lvID0gZmFsc2U7CisJZWxzZQorCQlwZ2Fpb193cmVmX2FiYW5k b24oJmlvX3dyZWYpOworfQorCiAvKgogICogQnVmZmVyQWxsb2MgLS0gc3Vicm91dGluZSBmb3Ig UGluQnVmZmVyRm9yQmxvY2suICBIYW5kbGVzIGxvb2t1cCBvZiBhIHNoYXJlZAogICoJCWJ1ZmZl ci4gIElmIG5vIGJ1ZmZlciBleGlzdHMgYWxyZWFkeSwgc2VsZWN0cyBhIHJlcGxhY2VtZW50IHZp Y3RpbSBhbmQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDFfYWlv LnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMV9haW8ucGwKaW5kZXggNjNjYWRk NjRjLi45YjM2NGJiYzMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8w MDFfYWlvLnBsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDFfYWlvLnBsCkBA IC0xNSw2ICsxNSwxMCBAQCB1c2UgVGVzdEFpbzsKIG15IEBtZXRob2RzID0gVGVzdEFpbzo6c3Vw cG9ydGVkX2lvX21ldGhvZHMoKTsKIG15ICVub2RlczsKIAorIyBQdXR0aW5nIGl0IGlubGluZSBt YWtlcyBwZXJsdGlkeSBkbyB1Z2x5IHRoaW5ncworbXkgJGNvdW50X215X2Fpb3NfcXVlcnkgPQor ICAnU0VMRUNUIGNvdW50KCopIEZST00gcGdfYWlvcyBXSEVSRSBwaWQgPSBwZ19iYWNrZW5kX3Bp ZCgpJzsKKwogCiAjIyMKICMgQ3JlYXRlIGFuZCBjb25maWd1cmUgb25lIGluc3RhbmNlIGZvciBl YWNoIGlvX21ldGhvZApAQCAtMTYxNiw2ICsxNjIwLDYxIEBAIElOU0VSVCBJTlRPIHRtcF9vayBT RUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApOwogCQkJcXF8U0VMRUNUIGJsb2Nrb2ZmLCBi bG9ja251bSwgaW9fcmVxZCBhbmQgbm90IGZvcmVpZ25faW8sIG5ibG9ja3MgRlJPTSByZWFkX2J1 ZmZlcnMoJyR0YWJsZScsIDEsIDMpfCwKIAkJCXFyL14wXHwxXHx0XHwyXG4yXHwzXHxmXHwxJC8s CiAJCQlxci9eJC8pOworCisKKwkJIyMjCisJCSMgVGVzdCB0aGF0IGFiYW5kb25pbmcgSU8gd29y a3MgYW5kIHRoYXQgaXQgZG9lcyBub3QgY2F1c2UgaXNzdWVzLgorCQkjIyMKKworCQkjIFRlc3Qg dGhhdCBldmVuIGFmdGVyIGFiYW5kb25pbmcgSU8gd2UgZG8gd2FpdCBmb3IgdGhlIElPcyBhdCB0 aGUgZW5kCisJCSMgb2YgdGhlIHN0YXRlbWVudC4KKwkJJHBzcWxfYS0+cXVlcnlfc2FmZShxcXxT RVQgaW9fY29tYmluZV9saW1pdD0yfCk7CisJCSRwc3FsX2EtPnF1ZXJ5X3NhZmUocXF8U0VMRUNU IGV2aWN0X3JlbCgnJHRhYmxlJyl8KTsKKwkJcHNxbF9saWtlKAorCQkJJGlvX21ldGhvZCwKKwkJ CSRwc3FsX2EsCisJCQkiJHBlcnNpc3RlbmN5OiByZWFkIGJ1ZmZlcnMgJiBhYmFuZG9uIGl0IiwK KwkJCXFxfFNFTEVDVCBhYmFuZG9uZWQsIGNvdW50KCopIEZST00gcmVhZF9idWZmZXJzKCckdGFi bGUnLCAwLCA2LCBhYmFuZG9uX2FmdGVyID0+IDIpIEdST1VQIEJZIDEgT1JERVIgQlkgMXwsCisJ CQlxci9eZlx8MVxudFx8MiQvLAorCQkJcXIvXiQvKTsKKwkJIyBEdWUgdG8gdGhlIGVuZC1vZi1z dGF0ZW1lbnQgd2FpdCB0aGVyZSBzaG91bGQgYmUgbm8gSU9zIGFueW1vcmUKKwkJaXMoJHBzcWxf YS0+cXVlcnlfc2FmZSgkY291bnRfbXlfYWlvc19xdWVyeSksIDAsCisJCQkiJGlvX21ldGhvZDog JHBlcnNpc3RlbmN5OiBhYmFuZG9uZWQgSU8gY29tcGxldGVkIGJ5IGVuZCBvZiBzdGF0ZW1lbnQi CisJCSk7CisKKwkJIyBUZXN0IHRoYXQgYWZ0ZXIgYWJhbmRvbmluZyBJTyBidWZmZXIgYWNjZXNz IHN0aWxsIHdvcmtzLgorCQkjCisJCSMgRmlyc3QgdGVzdCB0aGF0IGJ5IGp1c3QgaXNzdWluZyBh bm90aGVyIHJlYWRfYnVmZmVycygpIGluIHRoZSBzYW1lCisJCSMgc3RhdGVtZW50IChzbyB0aGF0 IHRoZSBhYmFuZG9uZWQgSU9zIGFyZW4ndCB3YWl0ZWQtZm9yIGR1cmluZworCQkjIGVuZC1vZi1z dGF0ZW1lbnQgcmVzb3duZXIgaGFuZGxpbmcpLgorCQkkcHNxbF9hLT5xdWVyeV9zYWZlKHFxfFNF TEVDVCBldmljdF9yZWwoJyR0YWJsZScpfCk7CisJCXBzcWxfbGlrZSgKKwkJCSRpb19tZXRob2Qs CisJCQkkcHNxbF9hLAorCQkJIiRwZXJzaXN0ZW5jeTogcmVhZCBidWZmZXJzICYgYWJhbmRvbiBp dCAmIHJlYWQgYWdhaW4iLAorCQkJcXF8CisJCQkgICBTRUxFQ1QgU1VNKG5ibG9ja3MpIEZST00g cmVhZF9idWZmZXJzKCckdGFibGUnLCAwLCA0LCBhYmFuZG9uX2FmdGVyID0+IDIpCisJCQkgICBV TklPTiBBTEwKKwkJCSAgIFNFTEVDVCBTVU0obmJsb2NrcykgRlJPTSByZWFkX2J1ZmZlcnMoJyR0 YWJsZScsIDAsIDQpCisJCQkgICB8LAorCQkJcXIvXjRcbjQkLywKKwkJCXFyL14kLyk7CisKKwkJ IyBOb3cgdGVzdCB0aGF0IGEgcGxhaW4gU0VMRUNUIG5lZWRpbmcgYnVmZmVycyBhZmZlY3RlZCBi eSBhYmFuZG9uZWQKKwkJIyBJTyB3b3JrCisJCSRwc3FsX2EtPnF1ZXJ5X3NhZmUocXF8U0VMRUNU IGV2aWN0X3JlbCgnJHRhYmxlJyl8KTsKKwkJcHNxbF9saWtlKAorCQkJJGlvX21ldGhvZCwKKwkJ CSRwc3FsX2EsCisJCQkiJHBlcnNpc3RlbmN5OiByZWFkIGJ1ZmZlcnMgJiBhYmFuZG9uIGl0ICYg cmVhZCBhZ2FpbiB2aWEgU0VMRUNUIiwKKwkJCXFxfAorCQkJICAgU0VMRUNUIFNVTShuYmxvY2tz KSBGUk9NIHJlYWRfYnVmZmVycygnJHRhYmxlJywgMCwgNCwgYWJhbmRvbl9hZnRlciA9PiAyKQor CQkJICAgVU5JT04gQUxMCisJCQkgICBTRUxFQ1QgU1VNKGRhdGEpIEZST00gJHRhYmxlIFdIRVJF IGRhdGEgPCAxMDAwCisJCQkgICB8LAorCQkJcXIvXjRcbjQ5OTUwMCQvLAorCQkJcXIvXiQvKTsK KwkJJHBzcWxfYS0+cXVlcnlfc2FmZShxcXxSRVNFVCBpb19jb21iaW5lX2xpbWl0fCk7CiAJfQog CiAJIyBUaGUgcmVtYWluaW5nIHRlc3RzIGRvbid0IG1ha2Ugc2Vuc2UgZm9yIHRlbXAgdGFibGVz LCBhcyB0aGV5IGFyZQpAQCAtMTgzNyw2ICsxODk2LDYwIEBAIHJlYWRfYnVmZmVycygnJHRhYmxl JywgMCwgNCl8LAogCSRwc3FsX2EtPntzdGRvdXR9ID0gJyc7CiAKIAorCSMjIworCSMgVGVzdCB0 aGF0IGFiYW5kb25pbmcgSU8gYWN0dWFsbHkgYXZvaWRzIHdhaXRpbmcgZm9yIElPLgorCSMjIwor CisJIyBUZXN0aW5nIG5vdCB3YWl0aW5nIG9ubHkgd29ya3MgaWYgdGhlIElPIG1ldGhvZCBkb2Vz bid0IGV4ZWN1dGUgSU8KKwkjIHN5bmNocm9ub3VzbHksIHdoaWNoIGlzIHdoeSB3ZSBmdW5kYW1l bnRhbGx5IGNhbid0IHRlc3Qgd2l0aAorCSMgaW9fbWV0aG9kPXN5bmMuIEZ1cnRoZXJtb3JlIHdl IG5lZWQgdG8gd29yayBhcm91bmQgaW9fbWV0aG9kPWlvX3VyaW5nCisJIyBwb3RlbnRpYWxseSBl eGVjdXRpbmcgdGhlIElPIHN5bmNocm9ub3VzbHkgLSB3ZSBjYW4gZG8gc28gYnkgbWFraW5nIHRo ZQorCSMgSU9zIGJpZyBlbm91Z2ggKGMuZi4gcGdhaW9fdXJpbmdfc2hvdWxkX3VzZV9hc3luYygp KS4KKwkjCisJIyBUbyBtYWtlIHRoZSB0ZXN0IHJlbGlhYmxlIHdlIGhhdmUgdG8gYWJhbmRvbiBh bGwgSU9zLCBhcyB3YWl0aW5nIGZvcgorCSMgc29tZSBJT3MgY291bGQgbGVhZCB0byBhbHNvIGNv bnN1bWluZyB0aGUgY29tcGxldGlvbiBvZiB0aGUgSU8gdGhhdCB3aWxsCisJIyB0cmlnZ2VyIGEg d2FpdCBpbiB0aGUgY29tcGxldGlvbi4KKwkjCisJIyBYWFggVGVtcG9yYXJpbHkgZGlzYWJsZWQg YnkgcGdlb2doZWdhbiAocmVtb3ZlIHRoZSAiMCAmJiIgYmVsb3cgd2hlbgorCSMgdGhpcyBpcyBw cm9wZXJseSBkZWJ1Z2dlZCkuCisJIworCSMgT24gLURSRUxDQUNIRV9GT1JDRV9SRUxFQVNFIGJ1 aWxkcywgdGhpcyBzdWJ0ZXN0IHNob3dzCisJIyAiV0FSTklORzogIGxlYWtlZCBBSU8gaGFuZGxl Ii4gIE5lZWRzIHRvIGJlIGRlYnVnZ2VkLgorCWlmICgwICYmICRpb19tZXRob2QgbmUgJ3N5bmMn KQorCXsKKwkJJHBzcWxfYS0+cXVlcnlfc2FmZShxcXxTRUxFQ1QgZXZpY3RfcmVsKCckdGFibGUn KXwpOworCQkkcHNxbF9hLT5xdWVyeV9zYWZlKHFxfFNFVCBpb19jb21iaW5lX2xpbWl0PTV8KTsK KwkJJHBzcWxfYi0+cXVlcnlfc2FmZSgKKwkJCXFxL1NFTEVDVCBpbmpfaW9fY29tcGxldGlvbl93 YWl0KAorCQkgICByZWxmaWxlbm9kZT0+cGdfcmVsYXRpb25fZmlsZW5vZGUoJyR0YWJsZScpLAor CQkgICBibG9ja25vPT40KTsvKTsKKwkJb2soMSwKKwkJCSIkaW9fbWV0aG9kOiAkcGVyc2lzdGVu Y3k6IGNvbmZpZ3VyZSB3YWl0IGluIGNvbXBsZXRpb24gb2YgYmxvY2sgNCIKKwkJKTsKKworCQkj IE5lZWQgdG8gZW5kIHRoZSB3YWl0IGluIHRoZSBjb21wbGV0aW9uIGJlZm9yZSB0aGUgc3RhdGVt ZW50IGlzIG92ZXIsCisJCSMgb3RoZXJ3aXNlIHdlJ2xsIHdhaXQgZHVyaW5nIHJlc293bmVyIGNs ZWFudXAgYXQgdGhlIGVuZCBvZiB0aGUKKwkJIyBzdGF0ZW1lbnQuCisJCXBzcWxfbGlrZSgKKwkJ CSRpb19tZXRob2QsCisJCQkkcHNxbF9hLAorCQkJIiRwZXJzaXN0ZW5jeTogcmVhZCBidWZmZXJz IGFiYW5kb25pbmcgYmxvY2tlZCBJTyBhdm9pZHMgd2FpdCIsCisJCQlxcXwKKwkJCSAgIFNFTEVD VCBjb3VudCgqKSA+IDAgRlJPTSByZWFkX2J1ZmZlcnMoJyR0YWJsZScsIDAsIDEwLCBhYmFuZG9u X2FmdGVyID0+IDApIFdIRVJFIGFiYW5kb25lZAorCQkJICAgVU5JT04gQUxMCisJCQkgICBTRUxF Q1QgY291bnQoKikgPiAwIEZST00gcGdfYWlvcyBXSEVSRSBwaWQgPSBwZ19iYWNrZW5kX3BpZCgp CisJCQkgICBVTklPTiBBTEwKKwkJCSAgIFNFTEVDVCBpbmpfaW9fY29tcGxldGlvbl9jb250aW51 ZSgpIElTIE5PVCBOVUxMCisJCQl8LAorCQkJcXIvXnRcbnRcbnQkLywKKwkJCXFyL14kLyk7CisJ CWlzKCRwc3FsX2EtPnF1ZXJ5X3NhZmUoJGNvdW50X215X2Fpb3NfcXVlcnkpLCAwLAorCQkJIiRp b19tZXRob2Q6ICRwZXJzaXN0ZW5jeTogYWJhbmRvbmVkIElPIGlzIGNvbXBsZXRlZCBhdCBlbmQg b2Ygc3RhdGVtZW50IgorCQkpOworCisJCSRwc3FsX2EtPnF1ZXJ5X3NhZmUocXF8UkVTRVQgaW9f Y29tYmluZV9saW1pdHwpOworCX0KKwogCSRwc3FsX2EtPnF1aXQoKTsKIAkkcHNxbF9iLT5xdWl0 KCk7CiAJJHBzcWxfYy0+cXVpdCgpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2Fpby90ZXN0X2Fpby0tMS4wLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9h aW8tLTEuMC5zcWwKaW5kZXggNzYyYWMyOTUxLi5mZjNiMjAwY2YgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8tLTEuMC5zcWwKKysrIGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4wLnNxbApAQCAtNTMsNyArNTMsNyBAQCBDUkVBVEUg RlVOQ1RJT04gYnVmZmVyX2NhbGxfdGVybWluYXRlX2lvKGJ1ZmZlciBpbnQsIGZvcl9pbnB1dCBi b29sLCBzdWNjZWVkIGJvbwogUkVUVVJOUyBwZ19jYXRhbG9nLnZvaWQgU1RSSUNUCiBBUyAnTU9E VUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOwogCi1DUkVBVEUgRlVOQ1RJT04gcmVhZF9idWZmZXJz KHJlbCByZWdjbGFzcywgc3RhcnRibG9jayBpbnQ0LCBuYmxvY2tzIGludDQsIE9VVCBibG9ja29m ZiBpbnQ0LCBPVVQgYmxvY2tudW0gaW50NCwgT1VUIGlvX3JlcWQgYm9vbCwgT1VUIGZvcmVpZ25f aW8gYm9vbCwgT1VUIG5ibG9ja3MgaW50NCwgT1VUIGJ1ZiBpbnQ0W10pCitDUkVBVEUgRlVOQ1RJ T04gcmVhZF9idWZmZXJzKHJlbCByZWdjbGFzcywgc3RhcnRibG9jayBpbnQ0LCBuYmxvY2tzIGlu dDQsIGFiYW5kb25fYWZ0ZXIgaW50NCBERUZBVUxUIC0xLCBPVVQgYmxvY2tvZmYgaW50NCwgT1VU IGJsb2NrbnVtIGludDQsIE9VVCBpb19yZXFkIGJvb2wsIE9VVCBmb3JlaWduX2lvIGJvb2wsIE9V VCBhYmFuZG9uZWQgYm9vbCwgT1VUIG5ibG9ja3MgaW50NCwgT1VUIGJ1ZiBpbnQ0W10pCiBSRVRV Uk5TIFNFVE9GIHJlY29yZCBTVFJJQ1QKIEFTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7 CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYwppbmRleCAzNWVmYmExYTUuLjY0ODUy YzRlNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCisr KyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYwpAQCAtNjk4LDExICs2OTgs MTMgQEAgcmVhZF9idWZmZXJzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJT2lkCQkJcmVsaWQgPSBQR19H RVRBUkdfT0lEKDApOwogCUJsb2NrTnVtYmVyIHN0YXJ0YmxvY2sgPSBQR19HRVRBUkdfVUlOVDMy KDEpOwogCWludDMyCQluYmxvY2tzID0gUEdfR0VUQVJHX0lOVDMyKDIpOworCWludDMyCQlhYmFu ZG9uX2FmdGVyID0gUEdfR0VUQVJHX0lOVDMyKDMpOwogCVJldHVyblNldEluZm8gKnJzaW5mbyA9 IChSZXR1cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKIAlSZWxhdGlvbglyZWw7CiAJ U01nclJlbGF0aW9uIHNtZ3I7CiAJaW50CQkJbmJsb2Nrc19kb25lID0gMDsKIAlpbnQJCQluYmxv Y2tzX2Rpc3AgPSAwOworCWludAkJCW5ibG9ja3Nfd2FpdCA9IDA7CiAJaW50CQkJbmlvcyA9IDA7 CiAJUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbnM7CiAJQnVmZmVyCSAgICpidWZmZXJz OwpAQCAtNzI0LDYgKzcyNiw5IEBAIHJlYWRfYnVmZmVycyhQR19GVU5DVElPTl9BUkdTKQogCXJl bCA9IHJlbGF0aW9uX29wZW4ocmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CiAJc21nciA9IFJlbGF0 aW9uR2V0U21ncihyZWwpOwogCisJaWYgKGFiYW5kb25fYWZ0ZXIgPCAwKQorCQlhYmFuZG9uX2Fm dGVyID0gbmJsb2NrczsKKwogCS8qCiAJICogRG8gU3RhcnRSZWFkQnVmZmVycygpIHVudGlsIElP IGZvciBhbGwgdGhlIHJlcXVpcmVkIGJsb2NrcyBoYXMgYmVlbgogCSAqIHN0YXJ0ZWQgKGlmIHJl cXVpcmVkKS4KQEAgLTc1OCw5ICs3NjMsMTcgQEAgcmVhZF9idWZmZXJzKFBHX0ZVTkNUSU9OX0FS R1MpCiAJZm9yIChpbnQgbmlvID0gMDsgbmlvIDwgbmlvczsgbmlvKyspCiAJewogCQlSZWFkQnVm ZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uID0gJm9wZXJhdGlvbnNbbmlvXTsKKwkJaW50CQkJbmJs b2Nrc190aGlzX2lvID0gbmJsb2Nrc19wZXJfaW9bbmlvXTsKIAogCQlpZiAoaW9fcmVxZHNbbmlv XSkKLQkJCVdhaXRSZWFkQnVmZmVycyhvcGVyYXRpb24pOworCQl7CisJCQlpZiAobmJsb2Nrc193 YWl0IDwgYWJhbmRvbl9hZnRlcikKKwkJCQlXYWl0UmVhZEJ1ZmZlcnMob3BlcmF0aW9uKTsKKwkJ CWVsc2UKKwkJCQlBYmFuZG9uUmVhZEJ1ZmZlcnMob3BlcmF0aW9uKTsKKwkJfQorCisJCW5ibG9j a3Nfd2FpdCArPSBuYmxvY2tzX3RoaXNfaW87CiAJfQogCiAJLyoKQEAgLTc3MCw4ICs3ODMsOCBA QCByZWFkX2J1ZmZlcnMoUEdfRlVOQ1RJT05fQVJHUykKIAl7CiAJCVJlYWRCdWZmZXJzT3BlcmF0 aW9uICpvcGVyYXRpb24gPSAmb3BlcmF0aW9uc1tuaW9dOwogCQlpbnQJCQluYmxvY2tzX3RoaXNf aW8gPSBuYmxvY2tzX3Blcl9pb1tuaW9dOwotCQlEYXR1bQkJdmFsdWVzWzZdID0gezB9OwotCQli b29sCQludWxsc1s2XSA9IHswfTsKKwkJRGF0dW0JCXZhbHVlc1s3XSA9IHswfTsKKwkJYm9vbAkJ bnVsbHNbN10gPSB7MH07CiAJCUFycmF5VHlwZSAgKmJ1ZmZlcnNfYXJyOwogCiAJCS8qIGNvbnZl cnQgYnVmZmVyIGFycmF5IHRvIGRhdHVtIGFycmF5ICovCkBAIC04MDQsMTQgKzgxNywxOCBAQCBy ZWFkX2J1ZmZlcnMoUEdfRlVOQ1RJT05fQVJHUykKIAkJdmFsdWVzWzNdID0gQm9vbEdldERhdHVt KGlvX3JlcWRzW25pb10gPyBvcGVyYXRpb24tPmZvcmVpZ25faW8gOiBmYWxzZSk7CiAJCW51bGxz WzNdID0gZmFsc2U7CiAKLQkJLyogbmJsb2NrcyAqLwotCQl2YWx1ZXNbNF0gPSBJbnQzMkdldERh dHVtKG5ibG9ja3NfdGhpc19pbyk7CisJCS8qIGFiYW5kb25lZCAqLworCQl2YWx1ZXNbNF0gPSBC b29sR2V0RGF0dW0obmJsb2Nrc19kaXNwID49IGFiYW5kb25fYWZ0ZXIpOwogCQludWxsc1s0XSA9 IGZhbHNlOwogCi0JCS8qIGFycmF5IG9mIGJ1ZmZlcnMgKi8KLQkJdmFsdWVzWzVdID0gUG9pbnRl ckdldERhdHVtKGJ1ZmZlcnNfYXJyKTsKKwkJLyogbmJsb2NrcyAqLworCQl2YWx1ZXNbNV0gPSBJ bnQzMkdldERhdHVtKG5ibG9ja3NfdGhpc19pbyk7CiAJCW51bGxzWzVdID0gZmFsc2U7CiAKKwkJ LyogYXJyYXkgb2YgYnVmZmVycyAqLworCQl2YWx1ZXNbNl0gPSBQb2ludGVyR2V0RGF0dW0oYnVm ZmVyc19hcnIpOworCQludWxsc1s2XSA9IGZhbHNlOworCiAJCXR1cGxlc3RvcmVfcHV0dmFsdWVz KHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2MsIHZhbHVlcywgbnVsbHMpOwogCiAJ CW5ibG9ja3NfZGlzcCArPSBuYmxvY2tzX3RoaXNfaW87CkBAIC0xMDY0LDYgKzEwODEsMTMgQEAg aW5qX2lvX2NvbXBsZXRpb25fd2FpdF9tYXRjaGVzKFBnQWlvSGFuZGxlICppb2gpCiAJCSEoaW5q X2Jsb2Nrbm8gPj0gaW9fYmxvY2tubyAmJiBpbmpfYmxvY2tubyA8IChpb19ibG9ja25vICsgdGQt PnNtZ3IubmJsb2NrcykpKQogCQlyZXR1cm4gZmFsc2U7CiAKKwllcmVwb3J0KExPRywKKwkJCWVy cm1zZygid2FpdCBpbmplY3Rpb24gcG9pbnQgbWF0Y2hlcyBmb3IgSU8gJWQsIGluaiBibG9ja25v ICVkLCBpbyBibG9ja25vICVkLCBpbyBuYmxvY2tzICVkIiwKKwkJCQkgICBwZ2Fpb19pb19nZXRf aWQoaW9oKSwKKwkJCQkgICBpbmpfYmxvY2tubywgaW9fYmxvY2tubywgdGQtPnNtZ3IubmJsb2Nr cworCQkJCSAgICksCisJCQllcnJoaWRlc3RtdCh0cnVlKSwgZXJyaGlkZWNvbnRleHQodHJ1ZSkp OworCiAJcmV0dXJuIHRydWU7CiB9CiAKLS0gCjIuNTMuMAoK --0000000000004ffa5f0654ddc4ef Content-Type: application/octet-stream; name="v28-0010-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Disposition: attachment; filename="v28-0010-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqpot0f02 RnJvbSAzZjkzMTIzZjZjNDNjOWMxZDViMmY3NDg1ODI3ZTliNWFiNjFkMzlkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTI6NDEgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyOCAx MC8xMV0gYWlvOiBGaXggcGdhaW9faW9fd2FpdCgpIGZvciBzdGFnZWQgSU9zIChCKS4KClByZXZp b3VzbHksIHBnYWlvX2lvX3dhaXQoKSdzIGNhc2VzIGZvciBQR0FJT19IU19ERUZJTkVEIGFuZApQ R0FJT19IU19TVEFHRUQgZmVsbCB0aHJvdWdoIHRvIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24uICBU aGUgb3duZXIgb25seQpwcm9taXNlcyB0byBhZHZhbmNlIGl0IHRvIFBHQUlPX0hTX1NVQk1JVFRF RC4gIFRoZSB3YWl0ZXIgbmVlZHMgdG8gYmUKcHJlcGFyZWQgdG8gY2FsbCAtPndhaXRfb25lKCkg aXRzZWxmIG9uY2UgdGhlIElPIGlzIHN1Ym1pdHRlZCBpbiBvcmRlcgp0byBndWFyYW50ZWUgcHJv Z3Jlc3MgYW5kIGF2b2lkIGRlYWRsb2NrcyBvbiBJTyBtZXRob2RzIHRoYXQgcHJvdmlkZQotPndh aXRfb25lKCkuCgpJbnRyb2R1Y2UgYSBuZXcgcGVyLWJhY2tlbmQgY29uZGl0aW9uIHZhcmlhYmxl IHN1Ym1pdF9jdiwgd29rZW4gYnkgYnkKcGdhaW9fc3VibWl0X3N0YWdlKCksIGFuZCB1c2UgaXQg dG8gd2FpdCBmb3IgdGhlIHN0YXRlIHRvIGFkdmFuY2UuICBUaGUKbmV3IGJyb2FkY2FzdCBkb2Vz bid0IHNlZW0gdG8gY2F1c2UgYW55IG1lYXN1cmFibGUgc2xvd2Rvd24sIHNvIGlkZWFzCmZvciBv cHRpbWl6aW5nIHRoZSBjb21tb24gbm8td2FpdGVycyBjYXNlIHdlcmUgYWJhbmRvbmVkIGZvciBu b3cuCgpJdCBtYXkgbm90IGJlIHBvc3NpYmxlIHRvIHJlYWNoIGFueSByZWFsIGRlYWRsb2NrIHdp dGggZXhpc3RpbmcgQUlPCnVzZXJzLCBidXQgdGhhdCBzaXR1YXRpb24gY291bGQgY2hhbmdlLiAg VGhlcmUncyBhbHNvIG5vIHJlYXNvbiB0aGUKd2FpdGVyIHNob3VsZG4ndCBiZWdpbiB0byB3YWl0 IHZpYSB0aGUgSU8gbWV0aG9kIGFzIHNvb24gYXMgcG9zc2libGUKZXZlbiB3aXRob3V0IGEgZGVh ZGxvY2suCgpQaWNrZWQgdXAgYnkgdGVzdGluZyBhIHByb3Bvc2VkIElPIG1ldGhvZCB0aGF0IGhh cyAtPndhaXRfb25lKCksIGxpa2UKaW9fbWV0aG9kPWlvX3VyaW5nLCBhbmQgY29kZSByZXZpZXcu CgpCYWNrcGF0Y2gtdGhyb3VnaDogMTgKUmV2aWV3ZWQtYnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJl c0BhbmFyYXplbC5kZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQSUyQmhVS0cl MkJtWllyU2RuaGstWHJCWU8xOEg4MjlLNzdTOWdNS1VzeWtPaVRKdHFCNDNnJTQwbWFpbC5nbWFp bC5jb20KLS0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oICAgICAgICAgICAg fCAgNyArKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jICAgICAgICAgICAgICAgICB8 IDUwICsrKysrKysrKysrKysrKystLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19pbml0 LmMgICAgICAgICAgICB8ICAxICsKIC4uLi91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVz LnR4dCAgICAgICB8ICAxICsKIDQgZmlsZXMgY2hhbmdlZCwgNTEgaW5zZXJ0aW9ucygrKSwgOCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5h bC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwuaAppbmRleCA5Y2E0MDg3YWEu LmMzYWZkZTRkNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oCkBAIC0yMTYsNiArMjE2 LDEzIEBAIHR5cGVkZWYgc3RydWN0IFBnQWlvQmFja2VuZAogCXVpbnQxNgkJbnVtX3N0YWdlZF9p b3M7CiAJUGdBaW9IYW5kbGUgKnN0YWdlZF9pb3NbUEdBSU9fU1VCTUlUX0JBVENIX1NJWkVdOwog CisJLyoKKwkgKiBPdGhlciBiYWNrZW5kcyBzb21ldGltZXMgbmVlZCB0byB3YWl0IGZvciB0aGUg b3duaW5nIGJhY2tlbmQgdG8gc3VibWl0LgorCSAqIFRoZSBwZXItSU8gQ1Ygd291bGQgd29yayBm b3IgdGhhdCBwdXJwb3NlLCBidXQgYSBwZXItYmFja2VuZCBDViBhbGxvd3MKKwkgKiBmb3IganVz dCBvbmUgYnJvYWRjYXN0IHBlciBzdWJtaXR0ZWQgYmF0Y2guCisJICovCisJQ29uZGl0aW9uVmFy aWFibGUgc3VibWl0X2N2OworCiAJLyoKIAkgKiBMaXN0IG9mIGluLWZsaWdodCBJT3MuIEFsc28g Y29udGFpbnMgSU9zIHRoYXQgYXJlbid0IHN0cmljdGx5IHNwZWFraW5nCiAJICogaW4tZmxpZ2h0 IGFueW1vcmUsIGJ1dCBoYXZlIGJlZW4gd2FpdGVkLWZvciBhbmQgY29tcGxldGVkIGJ5IGFub3Ro ZXIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9haW8vYWlvLmMKaW5kZXggNzAwOWZiN2Y2Li5jZTJmNzNiZmYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvYWlvL2Fpby5jCkBAIC01OTMsNiArNTkzLDE2IEBAIHBnYWlvX2lvX3dhc19yZWN5Y2xlZChQ Z0Fpb0hhbmRsZSAqaW9oLCB1aW50NjQgcmVmX2dlbmVyYXRpb24sIFBnQWlvSGFuZGxlU3RhdGUK IAlyZXR1cm4gaW9oLT5nZW5lcmF0aW9uICE9IHJlZl9nZW5lcmF0aW9uOwogfQogCisvKgorICog V2hldGhlciB3ZSBuZWVkIHRvIHdhaXQgdmlhIHRoZSBJTyBtZXRob2QuIERvbid0IGNoZWNrIHZp YSB0aGUgSU8gbWV0aG9kIGlmCisgKiB0aGUgaXNzdWluZyBiYWNrZW5kIGlzIGV4ZWN1dGluZyB0 aGUgSU8gc3luY2hyb25vdXNseS4KKyAqLworc3RhdGljIGJvb2wKK3BnYWlvX2lvX25lZWRzX3dh aXRfb25lKFBnQWlvSGFuZGxlICppb2gpCit7CisJcmV0dXJuIHBnYWlvX21ldGhvZF9vcHMtPndh aXRfb25lICYmICEoaW9oLT5mbGFncyAmIFBHQUlPX0hGX1NZTkNIUk9OT1VTKTsKK30KKwogLyoK ICAqIFdhaXQgZm9yIElPIHRvIGNvbXBsZXRlLiBFeHRlcm5hbCBjb2RlIHNob3VsZCBuZXZlciB1 c2UgdGhpcywgb3V0c2lkZSBvZgogICogdGhlIEFJTyBzdWJzeXN0ZW0gd2FpdHMgYXJlIG9ubHkg YWxsb3dlZCB2aWEgcGdhaW9fd3JlZl93YWl0KCkuCkBAIC02MzIsMjMgKzY0MiwzOCBAQCBwZ2Fp b19pb193YWl0KFBnQWlvSGFuZGxlICppb2gsIHVpbnQ2NCByZWZfZ2VuZXJhdGlvbikKIAkJCQll bG9nKEVSUk9SLCAiSU8gaW4gd3Jvbmcgc3RhdGU6ICVkIiwgc3RhdGUpOwogCQkJCWJyZWFrOwog Ci0JCQljYXNlIFBHQUlPX0hTX1NVQk1JVFRFRDoKKwkJCWNhc2UgUEdBSU9fSFNfREVGSU5FRDoK KwkJCWNhc2UgUEdBSU9fSFNfU1RBR0VEOgogCiAJCQkJLyoKLQkJCQkgKiBJZiB3ZSBuZWVkIHRv IHdhaXQgdmlhIHRoZSBJTyBtZXRob2QsIGRvIHNvIG5vdy4gRG9uJ3QKLQkJCQkgKiBjaGVjayB2 aWEgdGhlIElPIG1ldGhvZCBpZiB0aGUgaXNzdWluZyBiYWNrZW5kIGlzIGV4ZWN1dGluZwotCQkJ CSAqIHRoZSBJTyBzeW5jaHJvbm91c2x5LgorCQkJCSAqIFRoZSBvd25lciBoYXNuJ3Qgc3VibWl0 dGVkIHRoZSBJTyB5ZXQuIElmIHdlIG5lZWQgdG8gd2FpdAorCQkJCSAqIHZpYSB0aGUgSU8gbWV0 aG9kLCB3YWl0IGZvciBzdWJtaXNzaW9uLCBnaXZpbmcgdGhpcyBiYWNrZW5kCisJCQkJICogdGhl IGNoYW5jZSB0byBjYWxsIC0+d2FpdF9vbmUoKS4KIAkJCQkgKi8KLQkJCQlpZiAocGdhaW9fbWV0 aG9kX29wcy0+d2FpdF9vbmUgJiYgIShpb2gtPmZsYWdzICYgUEdBSU9fSEZfU1lOQ0hST05PVVMp KQorCQkJCWlmIChwZ2Fpb19pb19uZWVkc193YWl0X29uZShpb2gpKQorCQkJCXsKKwkJCQkJUGdB aW9CYWNrZW5kICpiYWNrZW5kID0gJnBnYWlvX2N0bC0+YmFja2VuZF9zdGF0ZVtpb2gtPm93bmVy X3Byb2Nub107CisKKwkJCQkJQ29uZGl0aW9uVmFyaWFibGVQcmVwYXJlVG9TbGVlcCgmYmFja2Vu ZC0+c3VibWl0X2N2KTsKKwkJCQkJd2hpbGUgKCFwZ2Fpb19pb193YXNfcmVjeWNsZWQoaW9oLCBy ZWZfZ2VuZXJhdGlvbiwgJnN0YXRlKSAmJgorCQkJCQkJICAgKHN0YXRlID09IFBHQUlPX0hTX0RF RklORUQgfHwKKwkJCQkJCQlzdGF0ZSA9PSBQR0FJT19IU19TVEFHRUQpKQorCQkJCQkJQ29uZGl0 aW9uVmFyaWFibGVTbGVlcCgmYmFja2VuZC0+c3VibWl0X2N2LCBXQUlUX0VWRU5UX0FJT19JT19T VUJNSVQpOworCQkJCQlDb25kaXRpb25WYXJpYWJsZUNhbmNlbFNsZWVwKCk7CisJCQkJCWNvbnRp bnVlOworCQkJCX0KKwkJCQlwZ19mYWxsdGhyb3VnaDsKKworCQkJY2FzZSBQR0FJT19IU19TVUJN SVRURUQ6CisKKwkJCQkvKiBJZiB3ZSBuZWVkIHRvIHdhaXQgdmlhIHRoZSBJTyBtZXRob2QsIGRv IHNvIG5vdy4gKi8KKwkJCQlpZiAocGdhaW9faW9fbmVlZHNfd2FpdF9vbmUoaW9oKSkKIAkJCQl7 CiAJCQkJCXBnYWlvX21ldGhvZF9vcHMtPndhaXRfb25lKGlvaCwgcmVmX2dlbmVyYXRpb24pOwog CQkJCQljb250aW51ZTsKIAkJCQl9CiAJCQkJcGdfZmFsbHRocm91Z2g7CiAKLQkJCQkvKiB3YWl0 aW5nIGZvciBvd25lciB0byBzdWJtaXQgKi8KLQkJCWNhc2UgUEdBSU9fSFNfREVGSU5FRDoKLQkJ CWNhc2UgUEdBSU9fSFNfU1RBR0VEOgogCQkJCS8qIHdhaXRpbmcgZm9yIHJlYXBlciB0byBjb21w bGV0ZSAqLwogCQkJCS8qIGZhbGx0aHJvdWdoICovCiAJCQljYXNlIFBHQUlPX0hTX0NPTVBMRVRF RF9JTzoKQEAgLTEyMjYsNiArMTI1MSwxNSBAQCBwZ2Fpb19zdWJtaXRfc3RhZ2VkKHZvaWQpCiAK IAlwZ2Fpb19teV9iYWNrZW5kLT5udW1fc3RhZ2VkX2lvcyA9IDA7CiAKKwkvKgorCSAqIFdha2Ug YW55IGJhY2tlbmQgdGhhdCBzdGFydGVkIHdhaXRpbmcgZm9yIGFueSBvZiB0aGVzZSBJT3MgYmVm b3JlCisJICogc3VibWlzc2lvbiwgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIGNhbGwgLT53YWl0X29u ZSgpIHRvIGd1YXJhbnRlZQorCSAqIHByb2dyZXNzIHdpdGggdGhlIGNvbmZpZ3VyZWQgSU8gbWV0 aG9kLiAgT24gaXRzIHNpZGUsIHBnYWlvX2lvX3dhaXQoKQorCSAqIG9ubHkgd2FpdHMgZm9yIHN1 Ym1pdF9jdiBvbiBJTyBtZXRob2RzIG5lZWRpbmcgdGhhdC4KKwkgKi8KKwlpZiAocGdhaW9fbWV0 aG9kX29wcy0+d2FpdF9vbmUpCisJCUNvbmRpdGlvblZhcmlhYmxlQnJvYWRjYXN0KCZwZ2Fpb19t eV9iYWNrZW5kLT5zdWJtaXRfY3YpOworCiAJcGdhaW9fZGVidWcoREVCVUc0LAogCQkJCSJhaW86 IHN1Ym1pdHRlZCAlZCBJT3MiLAogCQkJCXRvdGFsX3N1Ym1pdHRlZCk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW9faW5pdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vYWlvX2luaXQuYwppbmRleCBkYTMwZDc5MmEuLjZmYzAwYTkxNyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvX2luaXQuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2Fpby9haW9faW5pdC5jCkBAIC0xOTksNiArMTk5LDcgQEAgQWlvU2htZW1Jbml0KHZvaWQgKmFy ZykKIAogCQlkY2xpc3RfaW5pdCgmYnMtPmlkbGVfaW9zKTsKIAkJbWVtc2V0KGJzLT5zdGFnZWRf aW9zLCAwLCBzaXplb2YoUGdBaW9IYW5kbGUgKikgKiBQR0FJT19TVUJNSVRfQkFUQ0hfU0laRSk7 CisJCUNvbmRpdGlvblZhcmlhYmxlSW5pdCgmYnMtPnN1Ym1pdF9jdik7CiAJCWRjbGlzdF9pbml0 KCZicy0+aW5fZmxpZ2h0X2lvcyk7CiAKIAkJLyogaW5pdGlhbGl6ZSBwZXItYmFja2VuZCBJT3Mg Ki8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFt ZXMudHh0IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQK aW5kZXggNTYwNjU5Zjk1Li43YzMzMjYzNDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fj dGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CkBAIC0yMDAsNiArMjAwLDcgQEAgQUJJX2NvbXBh dGliaWxpdHk6CiBTZWN0aW9uOiBDbGFzc05hbWUgLSBXYWl0RXZlbnRJTwogCiBBSU9fSU9fQ09N UExFVElPTgkiV2FpdGluZyBmb3IgYW5vdGhlciBwcm9jZXNzIHRvIGNvbXBsZXRlIElPLiIKK0FJ T19JT19TVUJNSVQJIldhaXRpbmcgZm9yIGFub3RoZXIgcHJvY2VzcyB0byBzdWJtaXQgSU8uIgog QUlPX0lPX1VSSU5HX1NVQk1JVAkiV2FpdGluZyBmb3IgSU8gc3VibWlzc2lvbiB2aWEgaW9fdXJp bmcuIgogQUlPX0lPX1VSSU5HX0VYRUNVVElPTgkiV2FpdGluZyBmb3IgSU8gZXhlY3V0aW9uIHZp YSBpb191cmluZy4iCiBCQVNFQkFDS1VQX1JFQUQJIldhaXRpbmcgZm9yIGJhc2UgYmFja3VwIHRv IHJlYWQgZnJvbSBhIGZpbGUuIgotLSAKMi41My4wCgo= --0000000000004ffa5f0654ddc4ef Content-Type: application/octet-stream; name="v28-0001-Add-slot-based-table-AM-index-scan-interface.patch" Content-Disposition: attachment; filename="v28-0001-Add-slot-based-table-AM-index-scan-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqpot0ea0 RnJvbSA4YzFlYTY0OTU2NjEzN2VjODA1YmY3OWYxYmYyNTFjMWIzZjIxMGU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MzY6NTcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyOCAwMS8xMV0g QWRkIHNsb3QtYmFzZWQgdGFibGUgQU0gaW5kZXggc2NhbiBpbnRlcmZhY2UuCgpBZGQgdGFibGVf aW5kZXhfZ2V0bmV4dF9zbG90LCBhIG5ldyB0YWJsZSBBTSBjYWxsYmFjayB0aGF0IHdyYXBzIGJv dGgKcGxhaW4gYW5kIGluZGV4LW9ubHkgaW5kZXggc2NhbnMgdGhhdCB1c2UgYW1nZXR0dXBsZS4g IFR3byBuZXcgaGVhcGFtCmNhbGxiYWNrcyBhcmUgaW50cm9kdWNlZCAtLSBvbmUgZm9yIHBsYWlu IHNjYW5zIGFuZCBvbmUgZm9yIGluZGV4LW9ubHkKc2NhbnMgLS0gd2hpY2ggYW4gdXBjb21pbmcg Y29tbWl0IHRoYXQgYWRkcyB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UKd2lsbCBleHBhbmQgdG8g Zm91ci4gIFRoZSBhcHByb3ByaWF0ZSBjYWxsYmFjayBpcyByZXNvbHZlZCBvbmNlIGluCmluZGV4 X3NjYW5fYmVnaW4sIGFuZCBjYWxsZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIgb24gdGhl CkluZGV4U2NhbkRlc2MgKHhzX2dldG5leHRfc2xvdCkgd2hlbiB0aGUgdGFibGVfaW5kZXhfZ2V0 bmV4dF9zbG90IHNoaW0KZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gZXhlY3V0b3Igbm9kZXMuICBU aGF0IHdheSB0YWJsZSBBTXMgY2FuIGNyZWF0ZQpzcGVjaWFsaXplZCB2YXJpYW50cyB0byBoZWxw IHRoZSBjb21waWxlciBwcm9kdWNlIG1vcmUgZWZmaWNpZW50IGNvZGUKKGJ1dCB0aGV5IHNob3Vs ZCBhbHdheXMgYmUgYWJsZSB0byBwcm92aWRlIGV4YWN0bHkgb25lIGdlbmVyaWMgY2FsbGJhY2ss CmlmIHRoYXQgbWFrZXMgc2Vuc2UpLgoKVGhpcyBtb3ZlcyBWTSBjaGVja3MgZm9yIGluZGV4LW9u bHkgc2NhbnMgb3V0IG9mIHRoZSBleGVjdXRvciBhbmQgaW50bwpoZWFwYW0sIGVuYWJsaW5nIGJh dGNoaW5nIG9mIHZpc2liaWxpdHkgbWFwIGxvb2t1cHMgKHRob3VnaCBmb3Igbm93IHdlCmNvbnRp bnVlIHRvIGp1c3QgcGVyZm9ybSByZXRhaWwgbG9va3VwcykuICBVc2luZyB0aGUgbmV3IGhpZ2hl ciBsZXZlbApzbG90LWJhc2VkIGludGVyZmFjZSBncmVhdGx5IHNpbXBsaWZpZXMgbm9kZUluZGV4 b25seXNjYW4uYywgd2hpY2ggbm8KbG9uZ2VyIGhhcyB0byBkZWFsIHdpdGggdGhlIHZpc2liaWxp dHkgbWFwIGRpcmVjdGx5LiAgTW9yZSBpbXBvcnRhbnRseSwKdGhpcyBpcyBhIHNpZ25pZmljYW50 IGFyY2hpdGVjdHVyYWwgaW1wcm92ZW1lbnQ6IHRhYmxlIEFNcyBjYW4gbm93CmltcGxlbWVudCBp bmRleC1vbmx5IHNjYW5zIHRoYXQgYXJlIG5vdCB0aWVkIHRvIGhlYXBhbSdzIHZpc2liaWxpdHkg bWFwLgoKQSBzbWFsbCBtaW5vcml0eSBvZiBjYWxsZXJzICgyIGNhbGxlcnMgaW4gdG90YWwpIGZ1 bmRhbWVudGFsbHkgbmVlZCB0bwpwYXNzIGEgVElEIHRvIHRoZSB0YWJsZSBBTSAoYm90aCBwZXJm b3JtIGNvbnN0cmFpbnQgZW5mb3JjZW1lbnQpLiAgVGhlc2UKY2FsbGVycyBkb24ndCBhY3R1YWxs eSBwZXJmb3JtIGluZGV4IHNjYW5zIChldmVuIGlmIHRoZWlyIFRJRHMgYXJlIHRha2VuCmZyb20g YW4gaW5kZXgpLCBhbmQgaGF2ZSBubyBuZWVkIGZvciBtb3N0IG9mIHRoZSBpbmRleCBzY2FuIG1h Y2hpbmVyeS4KU3dpdGNoIHRoZXNlIGNhbGxlcnMgb3ZlciB0byB0aGUgbmV3IGZldGNoX3RpZCBp bnRlcmZhY2UgKHdoaWNoIHJlcGxhY2VzCnRoZSBwcmV2aW91cyBUSUQtYmFzZWQgaW5kZXhfZmV0 Y2hfdHVwbGUgaW50ZXJmYWNlKS4gIEFsbCBpbmRleCBzY2FuCmNhbGxlcnMgbm93IHVzZSB0aGUg bmV3IHNsb3QtYmFzZWQgaW50ZXJmYWNlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QpLgoKVGhl IFZJU0lURURfUEFHRVNfTElNSVQgbWVjaGFuaXNtIHVzZWQgYnkgZ2V0X2FjdHVhbF92YXJpYWJs ZV9yYW5nZSB0bwpjYXAgc2NhbiBvdmVyaGVhZCBkdXJpbmcgcGxhbm5pbmcgaXMgcmV3b3JrZWQg dG8gZ28gdGhyb3VnaCBhIG5ldyBzY2FuCmRlc2NyaXB0b3IgaW50ZXJmYWNlICh4c192aXNpdGVk X3BhZ2VzX2xpbWl0KSwgcmF0aGVyIHRoYW4gdHJhY2tpbmcgdGhlCmNvc3RzIGRpcmVjdGx5IGFu ZCB0ZXJtaW5hdGluZyB0aGUgc2NhbiBpdHNlbGYsIGluIGFuIGFkLWhvYyB3YXkuICBUaGlzCmlz IG5lY2Vzc2FyeSBiZWNhdXNlIGNhbGxlcnMgdGhhdCB1c2UgdGhlIG5ldyBzbG90LWJhc2VkIGlu dGVyZmFjZSBubwpsb25nZXIgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHdoaWNoIGhlYXAgYmxvY2tz IHdlcmUgZmV0Y2hlZC4gIFNpbWlsYXJseSwKbm9kZUluZGV4b25seXNjYW4uYyBjYW4gbm8gbG9u Z2VyIHVzZSBJbnN0ckNvdW50VHVwbGVzMiB0byBjb3VudCBoZWFwCmZldGNoZXMgZHVyaW5nIGFu IEVYUExBSU4gQU5BTFlaRS4gIEVYUExBSU4gQU5BTFlaRSBub3cgb2J0YWlucyB0aGlzCmluZm9y bWF0aW9uIGZyb20gYSBuZXcgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uIGZpZWxkLCB3aGljaCB0 YWJsZSBBTXMKYXJlIHJlcXVpcmVkIHRvIG1haW50YWluLgoKVGhvdWdoIGluZGVwZW5kZW50bHkg dXNlZnVsLCB0aGlzIGNvbW1pdCBpcyBwcmVwYXJhdG9yeSB3b3JrIGZvciBhbgp1cGNvbWluZyBj b21taXQgdGhhdCB3aWxsIGFkZCBhbiBhbWdldGJhdGNoIGluZGV4IEFNIGludGVyZmFjZSwgd2hl cmUKdGhlIHRhYmxlIEFNIHRha2VzIGZ1bGwgcmVzcG9uc2liaWxpdHkgZm9yIG1hbmFnaW5nIHRo ZSBwcm9ncmVzcyBvZgppbmRleCBzY2Fucy4gIFRoYXQgd2lsbCBtb3ZlIG1vc3Qgb2YgdGhlIGlt cGxlbWVudGF0aW9uIG9mIHNjcm9sbGFibGUKY3Vyc29ycyBvdXQgb2YgaW5kZXggQU1zIGFuZCBp bnRvIHRhYmxlIEFNcywgbWFraW5nIGl0IGVzc2VudGlhbCB0aGF0CmV4ZWN1dG9yIG5vZGVzIHBh c3MgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24gZG93biB0byB0aGUgdGFibGUgQU0uCgpUaGUg aGVhcGFtIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBjYWxsYmFja3MgbWFrZSBhZ2dyZXNzaXZl IHVzZSBvZgpmb3JjZWQgaW5saW5pbmcgdG8gZW5zdXJlIHRoYXQgcGxhaW4gYW5kIGluZGV4LW9u bHkgY29kZSBwYXRocyBhcmUgZnVsbHkKc3BlY2lhbGl6ZWQgYXQgY29tcGlsZSB0aW1lIGRlc3Bp dGUgc2hhcmluZyBhIGNvbW1vbiBpbXBsZW1lbnRhdGlvbi4KVGVzdGluZyBoYXMgc2hvd24gdGhp cyBpcyBuZWNlc3NhcnkgdG8ga2VlcCBpY2FjaGUgbWlzc2VzIHRvIGEgbWluaW11bSwKYXQgbGVh c3Qgd2l0aCB0aGUgdHdvIHVwY29taW5nIGFtZ2V0YmF0Y2ggdmFyaWFudHMuCgpBdXRob3I6IFBl dGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQtYnk6IEFuZHJlcyBGcmV1bmQgPGFu ZHJlc0BhbmFyYXplbC5kZT4KUmV2aWV3ZWQtYnk6IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJh Lm1lPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3ptWXFoYWNCSDE2MXBl QVdiNWVGPUphN0NGQVErMGpTRU1xPXFuZkxWVE9PZ0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9p bmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAgICAgICAgICAgICAgICAgICB8ICAgNSArLQogc3JjL2lu Y2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgICAgIHwgIDMyICstCiBzcmMvaW5j bHVkZS9hY2Nlc3MvcmVsc2Nhbi5oICAgICAgICAgICAgICAgICAgfCAgNjcgKystCiBzcmMvaW5j bHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAgICAgICAgfCAyMjAgKysrKystLS0tCiBz cmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaCAgICAgICAgfCAgIDUgKy0KIHNy Yy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgOCAtCiBzcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAgICAgfCAgMTcgKy0KIHNyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyAgICB8IDQ2MyArKysrKysrKysr KysrKysrLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYyAgICAgICB8 ICAyNyArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgICAgICAgICAgICAgIHwg IDMwICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jICAgICAgICAgICAgfCAy NTYgKysrKy0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYyAgICAg ICAgIHwgIDEwICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jICAgICAgICAg ICAgfCAgMjYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMgICAgICAg ICB8ICAgOCArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29uc3RyYWludC5jICAgICAgICAgICAg IHwgIDI4ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgICAgICAgICAgICAgICAg fCAgMjMgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3JlcGFjay5jICAgICAgICAgICAgICAgICB8 ICAgNyArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgICAgICAgICAgIHwg ICA4ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYyAgICAgICAgfCAg MTQgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYyAgICB8ICAg MSArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jICAgICAgfCAyNDEg Ky0tLS0tLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMgICAgICAgICAg fCAgMTYgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jICAgICAgICAgICB8 ICAxNiArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgICAgICAgICAgICAgIHwg IDk3ICstLS0KIHNyYy90ZXN0L21vZHVsZXMvaW5kZXgvTWFrZWZpbGUgICAgICAgICAgICAgICB8 ICAxMCArCiBzcmMvdGVzdC9tb2R1bGVzL2luZGV4L2V4cGVjdGVkL2hvdF9jaGFpbi5vdXQgfCAg NTYgKysrCiBzcmMvdGVzdC9tb2R1bGVzL2luZGV4L21lc29uLmJ1aWxkICAgICAgICAgICAgfCAg MjYgKwogc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9zcWwvaG90X2NoYWluLnNxbCAgICAgIHwgIDM3 ICsrCiAuLi4vbW9kdWxlcy9pbmRleC90ZXN0X2luZGV4c2Nhbi0tMS4wLnNxbCAgICAgfCAgMTMg Kwogc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC90ZXN0X2luZGV4c2Nhbi5jICAgICAgIHwgMTQ2ICsr KysrKwogc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC90ZXN0X2luZGV4c2Nhbi5jb250cm9sIHwgICA0 ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHMub3V0ICAgICAgICAgICB8ICA2MiAr KysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzLnNxbCAgICAgICAgICAgICAgICB8ICAyOSAr Kwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAzICst CiAzNCBmaWxlcyBjaGFuZ2VkLCAxMjg3IGluc2VydGlvbnMoKyksIDcyNCBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL2luZGV4L2V4cGVjdGVkL2hvdF9j aGFpbi5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL2luZGV4L3NxbC9o b3RfY2hhaW4uc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC90 ZXN0X2luZGV4c2Nhbi0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVs ZXMvaW5kZXgvdGVzdF9pbmRleHNjYW4uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21v ZHVsZXMvaW5kZXgvdGVzdF9pbmRleHNjYW4uY29udHJvbAoKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9nZW5hbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKaW5kZXggNjhi ZmU0MDVkLi4wNWVlYzkyMDQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5o CisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCkBAIC0xNTYsNiArMTU2LDcgQEAgZXh0 ZXJuIHZvaWQgaW5kZXhfaW5zZXJ0X2NsZWFudXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAog ZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlv biwKIAkJCQkJCQkJCSBSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAorCQkJCQkJCQkJIGJvb2wgaW5k ZXhfb25seV9zY2FuLAogCQkJCQkJCQkJIFNuYXBzaG90IHNuYXBzaG90LAogCQkJCQkJCQkJIElu ZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJCQkJCSBpbnQgbmtleXMs IGludCBub3JkZXJieXMsCkBAIC0xNzgsMTUgKzE3OSwxMyBAQCBleHRlcm4gdm9pZCBpbmRleF9w YXJhbGxlbHNjYW5faW5pdGlhbGl6ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiBleHRlcm4gdm9p ZCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEluZGV4 U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsCiAJCQkJ CQkJCQkJCSAgUmVsYXRpb24gaW5kZXhyZWwsCisJCQkJCQkJCQkJCSAgYm9vbCBpbmRleF9vbmx5 X3NjYW4sCiAJCQkJCQkJCQkJCSAgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50 LAogCQkJCQkJCQkJCQkgIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywKIAkJCQkJCQkJCQkJICBQ YXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4sCiAJCQkJCQkJCQkJCSAgdWludDMyIGZsYWdzKTsK IGV4dGVybiBJdGVtUG9pbnRlciBpbmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4s CiAJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOwotZXh0ZXJuIGJvb2wgaW5kZXhf ZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90KTsKLWV4 dGVybiBib29sIGluZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAotCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKIGV4dGVy biBpbnQ2NCBpbmRleF9nZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKmJp dG1hcCk7CiAKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmluZGV4X2J1bGtfZGVsZXRl KEluZGV4VmFjdXVtSW5mbyAqaW5mbywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9o ZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCA1MTc2NDc4YzIuLjRm ZWE1MTc2MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTE1LDEyICsxMTUsMTAgQEAgdHlwZWRlZiBz dHJ1Y3QgQml0bWFwSGVhcFNjYW5EZXNjRGF0YQogdHlwZWRlZiBzdHJ1Y3QgQml0bWFwSGVhcFNj YW5EZXNjRGF0YSAqQml0bWFwSGVhcFNjYW5EZXNjOwogCiAvKgotICogRGVzY3JpcHRvciBmb3Ig ZmV0Y2hlcyBmcm9tIGhlYXAgdmlhIGFuIGluZGV4LgorICogaGVhcGFtLXNwZWNpZmljIEluZGV4 U2NhbkRlc2NEYXRhIG9wYXF1ZSBzdGF0ZQogICovCi10eXBlZGVmIHN0cnVjdCBJbmRleEZldGNo SGVhcERhdGEKK3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkhlYXBEYXRhCiB7Ci0JSW5kZXhGZXRj aFRhYmxlRGF0YSB4c19iYXNlOwkvKiBBTSBpbmRlcGVuZGVudCBwYXJ0IG9mIHRoZSBkZXNjcmlw dG9yICovCi0KIAkvKgogCSAqIEN1cnJlbnQgaGVhcCBidWZmZXIgaW4gc2NhbiAoYW5kIGl0cyBi bG9jayBudW1iZXIpLCBpZiBhbnkuICBOQjogaWYKIAkgKiB4c19ibGsgaXMgbm90IEludmFsaWRC bG9ja051bWJlciwgd2UgaG9sZCBhIHBpbiBpbiB4c19jYnVmLgpAQCAtMTI4LDkgKzEyNiwxNiBA QCB0eXBlZGVmIHN0cnVjdCBJbmRleEZldGNoSGVhcERhdGEKIAlCdWZmZXIJCXhzX2NidWY7CiAJ QmxvY2tOdW1iZXIgeHNfYmxrOwogCi0JLyogQ3VycmVudCBoZWFwIGJsb2NrJ3MgY29ycmVzcG9u ZGluZyBwYWdlIGluIHRoZSB2aXNpYmlsaXR5IG1hcCAqLwotCUJ1ZmZlcgkJeHNfdm1idWZmZXI7 Ci19IEluZGV4RmV0Y2hIZWFwRGF0YTsKKwkvKiBGb3IgdmlzaWJpbGl0eSBtYXAgY2hlY2tzIChp bmRleC1vbmx5IHNjYW5zIGFuZCBvbi1hY2Nlc3MgcHJ1bmluZykgKi8KKwlCdWZmZXIJCXhzX3Zt YnVmZmVyOwkvKiB2aXNpYmlsaXR5IG1hcCBidWZmZXIgKi8KKworCWJvb2wJCXhzX3JlYWRvbmx5 OwkvKiBzY2FuIGlzIHJlYWQtb25seT8gKi8KKworCXVpbnQxNgkJeHNfYmxrc3dpdGNoX2NvdW50 OyAvKiBudW1iZXIgb2YgaGVhcCBibG9ja3MgZmV0Y2hlZCAqLworCisJLyogUGVyLXR1cGxlIGNv bnRleHQgZm9yIHBhZGRpbmcgIm5hbWUiIGNvbHVtbnMgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMg Ki8KKwlNZW1vcnlDb250ZXh0IHhzX2l0dXBfY3h0OworfSBJbmRleFNjYW5IZWFwRGF0YTsKIAog LyogUmVzdWx0IGNvZGVzIGZvciBIZWFwVHVwbGVTYXRpc2ZpZXNWYWN1dW0gKi8KIHR5cGVkZWYg ZW51bQpAQCAtNDMwLDE2ICs0MzUsMTUgQEAgZXh0ZXJuIFRyYW5zYWN0aW9uSWQgaGVhcF9pbmRl eF9kZWxldGVfdHVwbGVzKFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJCQkJICBUTV9JbmRleERlbGV0 ZU9wICpkZWxzdGF0ZSk7CiAKIC8qIGluIGhlYXAvaGVhcGFtX2luZGV4c2Nhbi5jICovCi1leHRl cm4gSW5kZXhGZXRjaFRhYmxlRGF0YSAqaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9u IHJlbCwgdWludDMyIGZsYWdzKTsKLWV4dGVybiB2b2lkIGhlYXBhbV9pbmRleF9mZXRjaF9yZXNl dChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKTsKLWV4dGVybiB2b2lkIGhlYXBhbV9pbmRleF9m ZXRjaF9lbmQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2Nhbik7CitleHRlcm4gYm9vbCBoZWFwYW1f ZmV0Y2hfdGlkKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgdGlkLCBTbmFwc2hvdCBzbmFwc2hv dCwKKwkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGJvb2wgKmFsbF9kZWFkKTsKK2V4dGVy biB2b2lkIGhlYXBhbV9pbmRleF9zY2FuX2JlZ2luKEluZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMy IGZsYWdzKTsKK2V4dGVybiB2b2lkIGhlYXBhbV9pbmRleF9zY2FuX3Jlc2V0KEluZGV4U2NhbkRl c2Mgc2Nhbik7CitleHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfc2Nhbl9lbmQoSW5kZXhTY2FuRGVz YyBzY2FuKTsKIGV4dGVybiBib29sIGhlYXBfaG90X3NlYXJjaF9idWZmZXIoSXRlbVBvaW50ZXIg dGlkLCBSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJCQkJICAgQnVmZmVyIGJ1ZmZlciwgU25hcHNo b3Qgc25hcHNob3QsIEhlYXBUdXBsZSBoZWFwVHVwbGUsCiAJCQkJCQkJCSAgIGJvb2wgKmFsbF9k ZWFkLCBib29sIGZpcnN0X2NhbGwpOwotZXh0ZXJuIGJvb2wgaGVhcGFtX2luZGV4X2ZldGNoX3R1 cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAotCQkJCQkJCQkJIEl0ZW1Qb2lu dGVyIHRpZCwgU25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNs b3QsIGJvb2wgKmhlYXBfY29udGludWUsCi0JCQkJCQkJCQkgYm9vbCAqYWxsX2RlYWQpOworZXh0 ZXJuIHZvaWQgaGVhcF9maWxsX2lvc19zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgVHVwbGVUYWJs ZVNsb3QgKnNsb3QpOwogCiAvKiBpbiBoZWFwL3BydW5laGVhcC5jICovCiBleHRlcm4gdm9pZCBo ZWFwX3BhZ2VfcHJ1bmVfb3B0KFJlbGF0aW9uIHJlbGF0aW9uLCBCdWZmZXIgYnVmZmVyLApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9yZWxzY2FuLmgKaW5kZXggMmVhMDZhNjdhLi5lMmUyMTUwZGEgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4u aApAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgog I2luY2x1ZGUgImFjY2Vzcy9pdHVwLmgiCisjaW5jbHVkZSAiYWNjZXNzL3NkaXIuaCIKICNpbmNs dWRlICJub2Rlcy90aWRiaXRtYXAuaCIKICNpbmNsdWRlICJwb3J0L2F0b21pY3MuaCIKICNpbmNs dWRlICJzdG9yYWdlL3JlbGZpbGVsb2NhdG9yLmgiCkBAIC0yNSw2ICsyNiw3IEBACiAKIHN0cnVj dCBQYXJhbGxlbFRhYmxlU2NhbkRlc2NEYXRhOwogc3RydWN0IFRhYmxlU2Nhbkluc3RydW1lbnRh dGlvbjsKK3N0cnVjdCBUdXBsZVRhYmxlU2xvdDsKIAogLyoKICAqIEdlbmVyaWMgZGVzY3JpcHRv ciBmb3IgdGFibGUgc2NhbnMuIFRoaXMgaXMgdGhlIGJhc2UtY2xhc3MgZm9yIHRhYmxlIHNjYW5z LApAQCAtMTIwLDIyICsxMjIsNiBAQCB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEJsb2NrVGFibGVT Y2FuV29ya2VyRGF0YQogfSBQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29ya2VyRGF0YTsKIHR5cGVk ZWYgc3RydWN0IFBhcmFsbGVsQmxvY2tUYWJsZVNjYW5Xb3JrZXJEYXRhICpQYXJhbGxlbEJsb2Nr VGFibGVTY2FuV29ya2VyOwogCi0vKgotICogQmFzZSBjbGFzcyBmb3IgZmV0Y2hlcyBmcm9tIGEg dGFibGUgdmlhIGFuIGluZGV4LiBUaGlzIGlzIHRoZSBiYXNlLWNsYXNzCi0gKiBmb3Igc3VjaCBz Y2Fucywgd2hpY2ggbmVlZHMgdG8gYmUgZW1iZWRkZWQgaW4gdGhlIHJlc3BlY3RpdmUgc3RydWN0 IGZvcgotICogaW5kaXZpZHVhbCBBTXMuCi0gKi8KLXR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hU YWJsZURhdGEKLXsKLQlSZWxhdGlvbglyZWw7Ci0KLQkvKgotCSAqIEJpdG1hc2sgb2YgU2Nhbk9w dGlvbnMgYWZmZWN0aW5nIHRoZSByZWxhdGlvbi4gTm8gU09fSU5URVJOQUxfRkxBR1MgYXJlCi0J ICogcGVybWl0dGVkLgotCSAqLwotCXVpbnQzMgkJZmxhZ3M7Ci19IEluZGV4RmV0Y2hUYWJsZURh dGE7Ci0KIHN0cnVjdCBJbmRleFNjYW5JbnN0cnVtZW50YXRpb247CiAKIC8qCkBAIC0xNzIsMTAg KzE1OCwxMCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCXN0cnVjdCBJbmRl eFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQ7CiAKIAkvKgotCSAqIEluIGFuIGluZGV4 LW9ubHkgc2NhbiwgYSBzdWNjZXNzZnVsIGFtZ2V0dHVwbGUgY2FsbCBtdXN0IGZpbGwgZWl0aGVy Ci0JICogeHNfaXR1cCAoYW5kIHhzX2l0dXBkZXNjKSBvciB4c19oaXR1cCAoYW5kIHhzX2hpdHVw ZGVzYykgdG8gcHJvdmlkZSB0aGUKLQkgKiBkYXRhIHJldHVybmVkIGJ5IHRoZSBzY2FuLiAgSXQg Y2FuIGZpbGwgYm90aCwgaW4gd2hpY2ggY2FzZSB0aGUgaGVhcAotCSAqIGZvcm1hdCB3aWxsIGJl IHVzZWQuCisJICogSW4gYW4gaW5kZXgtb25seSBzY2FuLCB0aGUgaW5kZXggQU0gZmlsbHMgZWl0 aGVyIHhzX2l0dXAgb3IgeHNfaGl0dXAKKwkgKiB3aXRoIHRoZSBkYXRhIHRvIGJlIHJldHVybmVk IGJ5IHRoZSBzY2FuIChpdCBjYW4gZmlsbCBib3RoLCBpbiB3aGljaAorCSAqIGNhc2UgdGhlIGhl YXAgZm9ybWF0IGlzIHVzZWQpLiAgVGhlIHRhYmxlIEFNIGNvbnN1bWVzIHRoZXNlIHRvIGZpbGwg dGhlCisJICogY2FsbGVyJ3Mgc2xvdCBkdXJpbmcgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90Lgog CSAqLwogCUluZGV4VHVwbGUJeHNfaXR1cDsJCS8qIGluZGV4IHR1cGxlIHJldHVybmVkIGJ5IEFN ICovCiAJc3RydWN0IFR1cGxlRGVzY0RhdGEgKnhzX2l0dXBkZXNjOwkvKiByb3d0eXBlIGRlc2Ny aXB0b3Igb2YgeHNfaXR1cCAqLwpAQCAtMTg1LDkgKzE3MSwyNyBAQCB0eXBlZGVmIHN0cnVjdCBJ bmRleFNjYW5EZXNjRGF0YQogCUl0ZW1Qb2ludGVyRGF0YSB4c19oZWFwdGlkOyAvKiByZXN1bHQg Ki8KIAlib29sCQl4c19oZWFwX2NvbnRpbnVlOwkvKiBUIGlmIG11c3Qga2VlcCB3YWxraW5nLCBw b3RlbnRpYWwKIAkJCQkJCQkJCSAqIGZ1cnRoZXIgcmVzdWx0cyAqLwotCUluZGV4RmV0Y2hUYWJs ZURhdGEgKnhzX2hlYXBmZXRjaDsKIAotCWJvb2wJCXhzX3JlY2hlY2s7CQkvKiBUIG1lYW5zIHNj YW4ga2V5cyBtdXN0IGJlIHJlY2hlY2tlZCAqLworCS8qCisJICogeHNfcmVjaGVjayBpcyBzZXQg YnkgaW5kZXggQU1zLCBhbmQgcmVhZCBieSB0YWJsZSBBTXMuCisJICoKKwkgKiBTaG91bGQgbm90 IGJlIGNoZWNrZWQgYnkgY29yZSBleGVjdXRvciBub2RlcyAodGhleSBzaG91bGQgdXNlIHRoZQor CSAqIHhzX2dldG5leHRfc2xvdCBjYWxsYmFjaydzIHJlY2hlY2sgYXJndW1lbnQgaW5zdGVhZCku CisJICovCisJYm9vbAkJeHNfcmVjaGVjazsKKworCS8qIFRhYmxlIGFjY2VzcyBtZXRob2QncyBw cml2YXRlIHN0YXRlIChub3QgdXNlZCBkdXJpbmcgYml0bWFwIHNjYW5zKSAqLworCXZvaWQJICAg KnhzX3RhYmxlX29wYXF1ZTsKKworCS8qCisJICogUmVzb2x2ZWQgdGFibGVfaW5kZXhfZ2V0bmV4 dF9zbG90IGNhbGxiYWNrLCB3aGljaCBpcyBzZXQgYnkKKwkgKiB0YWJsZV9pbmRleF9zY2FuX2Jl Z2luIGF0IHRoZSBzdGFydCBvZiBhbWdldHR1cGxlIHNjYW5zLiAgUmVwb3J0cyB2aWEKKwkgKiAq cmVjaGVjayB3aGV0aGVyIHRoZSBzY2FuIGtleXMgbXVzdCBiZSByZWNoZWNrZWQuCisJICovCisJ Ym9vbAkJKCp4c19nZXRuZXh0X3Nsb3QpIChzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4s CisJCQkJCQkJCQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCXN0cnVjdCBUdXBs ZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCQkJCWJvb2wgKnJlY2hlY2spOwogCiAJLyoKIAkgKiBX aGVuIGZldGNoaW5nIHdpdGggYW4gb3JkZXJpbmcgb3BlcmF0b3IsIHRoZSB2YWx1ZXMgb2YgdGhl IE9SREVSIEJZCkBAIC0xOTUsMTEgKzE5OSwyOCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5E ZXNjRGF0YQogCSAqIHhzX3JlY2hlY2tvcmRlcmJ5IGlzIHRydWUsIHRoZXNlIG5lZWQgdG8gYmUg cmVjaGVja2VkIGp1c3QgbGlrZSB0aGUKIAkgKiBzY2FuIGtleXMsIGFuZCB0aGUgdmFsdWVzIHJl dHVybmVkIGhlcmUgYXJlIGEgbG93ZXItYm91bmQgb24gdGhlIGFjdHVhbAogCSAqIHZhbHVlcy4K KwkgKgorCSAqIE5vdGU6IHVubGlrZSB4c19yZWNoZWNrLCB0aGVzZSBmaWVsZHMgYXJlIHJlYWQg YnkgY29yZSBleGVjdXRvciBub2Rlcy4KIAkgKi8KIAlEYXR1bQkgICAqeHNfb3JkZXJieXZhbHM7 CiAJYm9vbAkgICAqeHNfb3JkZXJieW51bGxzOwogCWJvb2wJCXhzX3JlY2hlY2tvcmRlcmJ5Owog CisJLyoKKwkgKiBJbmRleCBhdHRyaWJ1dGVzIGhvbGRpbmcgIm5hbWUiIGNvbHVtbnMgc3RvcmVk IGFzIGNzdHJpbmdzLCB3aGljaCB0aGUKKwkgKiB0YWJsZSBBTSByZS1wYWRzIHRvIE5BTUVEQVRB TEVOIHdoZW4gZmlsbGluZyBhIHNsb3QgZnJvbSB4c19pdHVwCisJICovCisJQXR0ck51bWJlciAq eHNfbmFtZV9jc3RyaW5nX2F0dG51bXM7CisJaW50CQkJeHNfbmFtZV9jc3RyaW5nX2NvdW50Owor CisJLyoKKwkgKiBBbiBhcHByb3hpbWF0ZSBsaW1pdCBvbiB0aGUgYW1vdW50IG9mIHdvcmssIG1l YXN1cmVkIGluIHBhZ2VzIHRvdWNoZWQsCisJICogaW1wb3NlZCBvbiB0aGUgaW5kZXggc2Nhbi4g IFRoZSBkZWZhdWx0LCAwLCBtZWFucyBubyBsaW1pdC4gIE9ubHkKKwkgKiBob25vcmVkIGR1cmlu ZyBpbmRleC1vbmx5IHNjYW5zLiAgVXNlZCBieSBzZWxmdW5jcy5jIHRvIGJvdW5kIHRoZSBjb3N0 CisJICogb2YgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludCgpLgorCSAqLworCXVpbnQ4CQl4 c192aXNpdGVkX3BhZ2VzX2xpbWl0OworCiAJLyogcGFyYWxsZWwgaW5kZXggc2NhbiBpbmZvcm1h dGlvbiwgaW4gc2hhcmVkIG1lbW9yeSAqLwogCXN0cnVjdCBQYXJhbGxlbEluZGV4U2NhbkRlc2NE YXRhICpwYXJhbGxlbF9zY2FuOwogfSBJbmRleFNjYW5EZXNjRGF0YTsKQEAgLTIxMyw4ICsyMzQs NiBAQCB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEluZGV4U2NhbkRlc2NEYXRhCiAJY2hhcgkJcHNf c25hcHNob3RfZGF0YVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwogfQkJCVBhcmFsbGVsSW5kZXhT Y2FuRGVzY0RhdGE7CiAKLXN0cnVjdCBUdXBsZVRhYmxlU2xvdDsKLQogLyogU3RydWN0IGZvciBz dG9yYWdlLW9yLWluZGV4IHNjYW5zIG9mIHN5c3RlbSB0YWJsZXMgKi8KIHR5cGVkZWYgc3RydWN0 IFN5c1NjYW5EZXNjRGF0YQogewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxl YW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKaW5kZXggZjJjMzY2OTZiLi44ZjI2 OGU0ZDggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtMzgsNiArMzgsNyBAQCB0eXBlZGVmIHN0cnVj dCBCdWxrSW5zZXJ0U3RhdGVEYXRhIEJ1bGtJbnNlcnRTdGF0ZURhdGE7CiB0eXBlZGVmIHN0cnVj dCBJbmRleEluZm8gSW5kZXhJbmZvOwogdHlwZWRlZiBzdHJ1Y3QgU2FtcGxlU2NhblN0YXRlIFNh bXBsZVNjYW5TdGF0ZTsKIHR5cGVkZWYgc3RydWN0IFNjYW5LZXlEYXRhIFNjYW5LZXlEYXRhOwor dHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKkluZGV4U2NhbkRlc2M7CiB0eXBlZGVm IHN0cnVjdCBWYWxpZGF0ZUluZGV4U3RhdGUgVmFsaWRhdGVJbmRleFN0YXRlOwogdHlwZWRlZiBz dHJ1Y3QgVmFjdXVtUGFyYW1zIFZhY3V1bVBhcmFtczsKIApAQCAtNDQ2LDYwICs0NDcsNzAgQEAg dHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkgKi8KIAogCS8qCi0JICogUHJlcGFyZSB0 byBmZXRjaCB0dXBsZXMgZnJvbSB0aGUgcmVsYXRpb24sIGFzIG5lZWRlZCB3aGVuIGZldGNoaW5n Ci0JICogdHVwbGVzIGZvciBhbiBpbmRleCBzY2FuLiAgVGhlIGNhbGxiYWNrIGhhcyB0byByZXR1 cm4gYW4KLQkgKiBJbmRleEZldGNoVGFibGVEYXRhLCB3aGljaCB0aGUgQU0gd2lsbCB0eXBpY2Fs bHkgZW1iZWQgaW4gYSBsYXJnZXIKLQkgKiBzdHJ1Y3R1cmUgd2l0aCBhZGRpdGlvbmFsIGluZm9y bWF0aW9uLgorCSAqIFByZXBhcmUgZm9yIGFuIGluZGV4IHNjYW4gb2YgdGhlIHRhYmxlLiAgVGhl IGNhbGxiYWNrIHN0b3JlcyBpdHMgb3duCisJICogcHJpdmF0ZSBzY2FuIHN0YXRlIGluIHRoZSBp bmRleCBzY2FuIGRlc2NyaXB0b3IncyB4c190YWJsZV9vcGFxdWUgZmllbGQKKwkgKiAoYW4gb3Bh cXVlIHBvaW50ZXIpLgogCSAqCiAJICogZmxhZ3MgaXMgYSBiaXRtYXNrIG9mIFNjYW5PcHRpb25z IGFmZmVjdGluZyB1bmRlcmx5aW5nIHRhYmxlIHNjYW4KIAkgKiBiZWhhdmlvci4gU2VlIHNjYW5f YmVnaW4oKSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYXNzaW5nIHRoZXNlLgogCSAqCi0JICog VHVwbGVzIGZvciBhbiBpbmRleCBzY2FuIGNhbiB0aGVuIGJlIGZldGNoZWQgdmlhIGluZGV4X2Zl dGNoX3R1cGxlLgorCSAqIENhbGxiYWNrIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIEluZGV4 U2NhbkRlc2MueHNfZ2V0bmV4dF9zbG90IHRvCisJICogdGhlIGFwcHJvcHJpYXRlIHNsb3QtYmFz ZWQgY2FsbGJhY2suICBUdXBsZXMgYXJlIHRoZW4gcmV0dXJuZWQgdGhyb3VnaAorCSAqIHRoZSBj YWxsZXIncyBzbG90LCB2aWEgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KCkuICBObyBzZXBhcmF0 ZQorCSAqIHNsb3QtYmFzZWQgY2FsbGJhY2sgZXhpc3RzIGluIHRoaXMgc3RydWN0IQorCSAqCisJ ICogSW4gcHJpbmNpcGxlIGEgc2luZ2xlIGdlbmVyYWwtcHVycG9zZSBjYWxsYmFjayAoc3RvcmVk IGhlcmUpIHdvdWxkCisJICogc3VmZmljZSwgYnV0IHVzaW5nIHNwZWNpYWxpemVkIHZhcmlhbnRz IGFsbG93cyB0aGUgdGFibGUgQU0gdG8gcHJvdmlkZQorCSAqIG1pbmltYWwgY29kZSBiYXNlZCBv biBjb25kaXRpb25zIHRoYXQgYXJlIGZpeGVkIGZvciB0aGUgd2hvbGUgc2NhbiBhcworCSAqIGFu IG9wdGltaXphdGlvbiAoZS5nLiwgdmFyaWFudHMgZm9yIHBsYWluIGluZGV4IHNjYW5zIGFuZCBp bmRleC1vbmx5CisJICogc2NhbnMsIGVhY2ggd2l0aCBmZXdlciBicmFuY2hlcykuCisJICoKKwkg KiBUaGUgeHNfZ2V0bmV4dF9zbG90IGNhbGxiYWNrIG1heSByZWx5IG9uIHRoZSBzbG90IHR5cGUg dGhhdCBjYWxsZXJzIGFyZQorCSAqIHJlcXVpcmVkIHRvIHBhc3M6IHBsYWluIGluZGV4IHNjYW5z IHVzZSBhIHNsb3Qgb2YgdGhlIHRhYmxlIEFNJ3Mgb3duCisJICogcHJlZmVycmVkIHR5cGUgKHNl ZSB0YWJsZV9zbG90X2NhbGxiYWNrcyksIHdoaWxlIGluZGV4LW9ubHkgc2NhbnMKKwkgKiBhbHdh eXMgdXNlIGEgdmlydHVhbCBzbG90LCBzaW5jZSB0aGUgc2xvdCBpcyBmaWxsZWQgZnJvbSBpbmRl eCBkYXRhCisJICogcmF0aGVyIHRoYW4gZnJvbSB0aGUgdGFibGUuCisJICoKKwkgKiBOb3RlIHRo YXQgQU1zIHRoYXQgZG8gbm90IG5lY2Vzc2FyaWx5IHVwZGF0ZSBpbmRleGVzIHdoZW4gaW5kZXhl ZAorCSAqIGNvbHVtbnMgZG8gbm90IGNoYW5nZSwgbmVlZCB0byByZXR1cm4gdGhlIGN1cnJlbnQv Y29ycmVjdCB2ZXJzaW9uIG9mCisJICogdGhlIHR1cGxlIHRoYXQgaXMgdmlzaWJsZSB0byB0aGUg c25hcHNob3QsIGV2ZW4gaWYgdGhlIHRpZCBwb2ludHMgdG8gYW4KKwkgKiBvbGRlciB2ZXJzaW9u IG9mIHRoZSB0dXBsZS4KIAkgKi8KLQlzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqKCppbmRl eF9mZXRjaF9iZWdpbikgKFJlbGF0aW9uIHJlbCwgdWludDMyIGZsYWdzKTsKKwl2b2lkCQkoKmlu ZGV4X3NjYW5fYmVnaW4pIChJbmRleFNjYW5EZXNjIHNjYW4sIHVpbnQzMiBmbGFncyk7CiAKIAkv KgotCSAqIFJlc2V0IGluZGV4IGZldGNoLiBUeXBpY2FsbHkgdGhpcyB3aWxsIHJlbGVhc2UgY3Jv c3MgaW5kZXggZmV0Y2gKLQkgKiByZXNvdXJjZXMgaGVsZCBpbiBJbmRleEZldGNoVGFibGVEYXRh LgorCSAqIEluZm9ybSB0aGUgdGFibGUgQU0gdGhhdCB0aGVyZSdzIHRvIGJlIGVpdGhlciBhIHJl c2NhbiBvciBhIHJlc3RvcmUgb2YKKwkgKiBhIG1hcmtlZCBwb3NpdGlvbiwgb3IgdGhhdCB0aGUg c2NhbiBoYXMgcnVuIG91dCBvZiBpbmRleCBlbnRyaWVzLgogCSAqLwotCXZvaWQJCSgqaW5kZXhf ZmV0Y2hfcmVzZXQpIChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqZGF0YSk7CisJdm9pZAkJ KCppbmRleF9zY2FuX3Jlc2V0KSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIAogCS8qCi0JICogUmVs ZWFzZSByZXNvdXJjZXMgYW5kIGRlYWxsb2NhdGUgaW5kZXggZmV0Y2guCisJICogUmVsZWFzZSBy ZXNvdXJjZXMgYW5kIGRlYWxsb2NhdGUgaW5kZXggc2NhbiBzdGF0ZS4KKwkgKi8KKwl2b2lkCQko KmluZGV4X3NjYW5fZW5kKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKKworCS8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorCSAqIENhbGxiYWNrcyBmb3Igbm9uLW1vZGlmeWluZyBvcGVyYXRpb25zIG9uIGluZGl2 aWR1YWwgdHVwbGVzCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICovCi0Jdm9pZAkJKCppbmRleF9m ZXRjaF9lbmQpIChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqZGF0YSk7CiAKIAkvKgogCSAq IEZldGNoIHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZyBhIHZpc2liaWxp dHkgdGVzdAogCSAqIGFjY29yZGluZyB0byBgc25hcHNob3RgLiBJZiBhIHR1cGxlIHdhcyBmb3Vu ZCBhbmQgcGFzc2VkIHRoZSB2aXNpYmlsaXR5CiAJICogdGVzdCwgcmV0dXJuIHRydWUsIGZhbHNl IG90aGVyd2lzZS4KIAkgKgotCSAqIE5vdGUgdGhhdCBBTXMgdGhhdCBkbyBub3QgbmVjZXNzYXJp bHkgdXBkYXRlIGluZGV4ZXMgd2hlbiBpbmRleGVkCi0JICogY29sdW1ucyBkbyBub3QgY2hhbmdl LCBuZWVkIHRvIHJldHVybiB0aGUgY3VycmVudC9jb3JyZWN0IHZlcnNpb24gb2YKLQkgKiB0aGUg dHVwbGUgdGhhdCBpcyB2aXNpYmxlIHRvIHRoZSBzbmFwc2hvdCwgZXZlbiBpZiB0aGUgdGlkIHBv aW50cyB0byBhbgotCSAqIG9sZGVyIHZlcnNpb24gb2YgdGhlIHR1cGxlLgorCSAqIFRoaXMgaXMg YSBsb3dlci1sZXZlbCBjYWxsYmFjayBmb3Igc2luZ2xlLXNob3QgVElEIGxvb2t1cHMgdXNlZCBi eQorCSAqIGNvbnN0cmFpbnQgZW5mb3JjZW1lbnQgY29kZSAodW5pcXVlIGNoZWNrcyBhbmQgc2lt aWxhcikuCiAJICoKLQkgKiAqY2FsbF9hZ2FpbiBpcyBmYWxzZSBvbiB0aGUgZmlyc3QgY2FsbCB0 byBpbmRleF9mZXRjaF90dXBsZSBmb3IgYSB0aWQuCi0JICogSWYgdGhlcmUgcG90ZW50aWFsbHkg aXMgYW5vdGhlciB0dXBsZSBtYXRjaGluZyB0aGUgdGlkLCAqY2FsbF9hZ2FpbgotCSAqIG5lZWRz IHRvIGJlIHNldCB0byB0cnVlIGJ5IGluZGV4X2ZldGNoX3R1cGxlLCBzaWduYWxpbmcgdG8gdGhl IGNhbGxlcgotCSAqIHRoYXQgaW5kZXhfZmV0Y2hfdHVwbGUgc2hvdWxkIGJlIGNhbGxlZCBhZ2Fp biBmb3IgdGhlIHNhbWUgdGlkLgotCSAqCi0JICogKmFsbF9kZWFkLCBpZiBhbGxfZGVhZCBpcyBu b3QgTlVMTCwgc2hvdWxkIGJlIHNldCB0byB0cnVlIGJ5Ci0JICogaW5kZXhfZmV0Y2hfdHVwbGUg aWZmIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCBubyBiYWNrZW5kIG5lZWRzIHRvIHNlZQotCSAqIHRo YXQgdHVwbGUuIEluZGV4IEFNcyBjYW4gdXNlIHRoYXQgdG8gYXZvaWQgcmV0dXJuaW5nIHRoYXQg dGlkIGluCi0JICogZnV0dXJlIHNlYXJjaGVzLgotCSAqLwotCWJvb2wJCSgqaW5kZXhfZmV0Y2hf dHVwbGUpIChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKLQkJCQkJCQkJCSAgSXRl bVBvaW50ZXIgdGlkLAotCQkJCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCQkJCSAg VHVwbGVUYWJsZVNsb3QgKnNsb3QsCi0JCQkJCQkJCQkgIGJvb2wgKmNhbGxfYWdhaW4sIGJvb2wg KmFsbF9kZWFkKTsKLQotCi0JLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICogQ2FsbGJhY2tzIGZvciBu b24tbW9kaWZ5aW5nIG9wZXJhdGlvbnMgb24gaW5kaXZpZHVhbCB0dXBsZXMKLQkgKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKwkgKiAqYWxsX2RlYWQsIGlmIGFsbF9kZWFkIGlzIG5vdCBOVUxMLCBzaG91bGQg YmUgc2V0IHRvIHRydWUgYnkgZmV0Y2hfdGlkCisJICogaWZmIGl0IGlzIGd1YXJhbnRlZWQgdGhh dCBubyBiYWNrZW5kIG5lZWRzIHRvIHNlZSB0aGF0IHR1cGxlLiBJbmRleCBBTXMKKwkgKiBjYW4g dXNlIHRoYXQgdG8gYXZvaWQgcmV0dXJuaW5nIHRoYXQgdGlkIGluIGZ1dHVyZSBzZWFyY2hlcy4K IAkgKi8KKwlib29sCQkoKmZldGNoX3RpZCkgKFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkgIEl0ZW1Q b2ludGVyIHRpZCwKKwkJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAorCQkJCQkJCSAgVHVwbGVU YWJsZVNsb3QgKnNsb3QsCisJCQkJCQkJICBib29sICphbGxfZGVhZCk7CiAKIAkvKgogCSAqIEZl dGNoIHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZyBhIHZpc2liaWxpdHkg dGVzdApAQCAtMTIzNSwxNSArMTI0NiwxNiBAQCB0YWJsZV9wYXJhbGxlbHNjYW5fcmVpbml0aWFs aXplKFJlbGF0aW9uIHJlbCwgUGFyYWxsZWxUYWJsZVNjYW5EZXNjIHBzY2FuKQogICovCiAKIC8q Ci0gKiBQcmVwYXJlIHRvIGZldGNoIHR1cGxlcyBmcm9tIHRoZSByZWxhdGlvbiwgYXMgbmVlZGVk IHdoZW4gZmV0Y2hpbmcgdHVwbGVzCi0gKiBmb3IgYW4gaW5kZXggc2Nhbi4KKyAqIFByZXBhcmUg Zm9yIGFuIGluZGV4IHNjYW4gb2YgdGhlIHJlbGF0aW9uLiAgVGhlIGNhbGxiYWNrIHN0b3JlcyBp dHMKKyAqIHByaXZhdGUgc2NhbiBzdGF0ZSBpbiB0aGUgc2NhbidzIHhzX3RhYmxlX29wYXF1ZSBm aWVsZC4KKyAqCisgKiBUdXBsZXMgZm9yIGFuIGluZGV4IHNjYW4gYXJlIHRoZW4gcmV0dXJuZWQg dGhyb3VnaCB0aGUgY2FsbGVyJ3Mgc2xvdCwgdmlhCisgKiB0YWJsZV9pbmRleF9nZXRuZXh0X3Ns b3QoKS4KICAqCiAgKiBmbGFncyBpcyBhIGJpdG1hc2sgb2YgU2Nhbk9wdGlvbnMuIE5vIFNPX0lO VEVSTkFMX0ZMQUdTIGFyZSBwZXJtaXR0ZWQuCi0gKgotICogVHVwbGVzIGZvciBhbiBpbmRleCBz Y2FuIGNhbiB0aGVuIGJlIGZldGNoZWQgdmlhIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKCkuCiAg Ki8KLXN0YXRpYyBpbmxpbmUgSW5kZXhGZXRjaFRhYmxlRGF0YSAqCi10YWJsZV9pbmRleF9mZXRj aF9iZWdpbihSZWxhdGlvbiByZWwsIHVpbnQzMiBmbGFncykKK3N0YXRpYyBpbmxpbmUgdm9pZAor dGFibGVfaW5kZXhfc2Nhbl9iZWdpbihJbmRleFNjYW5EZXNjIHNjYW4sIHVpbnQzMiBmbGFncykK IHsKIAlBc3NlcnQoKGZsYWdzICYgU09fSU5URVJOQUxfRkxBR1MpID09IDApOwogCkBAIC0xMjU1 LDc0ICsxMjY3LDEwOSBAQCB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwsIHVp bnQzMiBmbGFncykKIAlpZiAodW5saWtlbHkoVHJhbnNhY3Rpb25JZElzVmFsaWQoQ2hlY2tYaWRB bGl2ZSkgJiYgIWJzeXNzY2FuKSkKIAkJZWxvZyhFUlJPUiwgInNjYW4gc3RhcnRlZCBkdXJpbmcg bG9naWNhbCBkZWNvZGluZyIpOwogCi0JcmV0dXJuIHJlbC0+cmRfdGFibGVhbS0+aW5kZXhfZmV0 Y2hfYmVnaW4ocmVsLCBmbGFncyk7CisJc2Nhbi0+aGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5p bmRleF9zY2FuX2JlZ2luKHNjYW4sIGZsYWdzKTsKIH0KIAogLyoKLSAqIFJlc2V0IGluZGV4IGZl dGNoLiBUeXBpY2FsbHkgdGhpcyB3aWxsIHJlbGVhc2UgY3Jvc3MgaW5kZXggZmV0Y2ggcmVzb3Vy Y2VzCi0gKiBoZWxkIGluIEluZGV4RmV0Y2hUYWJsZURhdGEuCisgKiBJbmZvcm0gdGhlIHRhYmxl IEFNIHRoYXQgdGhlcmUncyB0byBiZSBlaXRoZXIgYSByZXNjYW4gb3IgYSByZXN0b3JlIG9mIGEK KyAqIG1hcmtlZCBwb3NpdGlvbiwgb3IgdGhhdCB0aGUgc2NhbiBoYXMgcnVuIG91dCBvZiBpbmRl eCBlbnRyaWVzLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLXRhYmxlX2luZGV4X2ZldGNoX3Jl c2V0KHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQordGFibGVfaW5kZXhfc2Nhbl9y ZXNldChJbmRleFNjYW5EZXNjIHNjYW4pCiB7Ci0Jc2Nhbi0+cmVsLT5yZF90YWJsZWFtLT5pbmRl eF9mZXRjaF9yZXNldChzY2FuKTsKKwlBc3NlcnQoc2Nhbi0+eHNfdGFibGVfb3BhcXVlKTsKKwor CXNjYW4tPmhlYXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfc2Nhbl9yZXNldChzY2FuKTsK IH0KIAogLyoKLSAqIFJlbGVhc2UgcmVzb3VyY2VzIGFuZCBkZWFsbG9jYXRlIGluZGV4IGZldGNo LgorICogUmVsZWFzZSByZXNvdXJjZXMgYW5kIGRlYWxsb2NhdGUgdGhlIHRhYmxlIEFNJ3MgcHJp dmF0ZSBpbmRleCBzY2FuIHN0YXRlCisgKiAodGhlIHNjYW4ncyB4c190YWJsZV9vcGFxdWUpCiAg Ki8KIHN0YXRpYyBpbmxpbmUgdm9pZAotdGFibGVfaW5kZXhfZmV0Y2hfZW5kKHN0cnVjdCBJbmRl eEZldGNoVGFibGVEYXRhICpzY2FuKQordGFibGVfaW5kZXhfc2Nhbl9lbmQoSW5kZXhTY2FuRGVz YyBzY2FuKQogewotCXNjYW4tPnJlbC0+cmRfdGFibGVhbS0+aW5kZXhfZmV0Y2hfZW5kKHNjYW4p OworCUFzc2VydChzY2FuLT54c190YWJsZV9vcGFxdWUpOworCisJc2Nhbi0+aGVhcFJlbGF0aW9u LT5yZF90YWJsZWFtLT5pbmRleF9zY2FuX2VuZChzY2FuKTsKIH0KIAogLyoKLSAqIEZldGNoZXMs IGFzIHBhcnQgb2YgYW4gaW5kZXggc2NhbiwgdHVwbGUgYXQgYHRpZGAgaW50byBgc2xvdGAsIGFm dGVyIGRvaW5nCi0gKiBhIHZpc2liaWxpdHkgdGVzdCBhY2NvcmRpbmcgdG8gYHNuYXBzaG90YC4g SWYgYSB0dXBsZSB3YXMgZm91bmQgYW5kIHBhc3NlZAotICogdGhlIHZpc2liaWxpdHkgdGVzdCwg cmV0dXJucyB0cnVlLCBmYWxzZSBvdGhlcndpc2UuIE5vdGUgdGhhdCAqdGlkIG1heSBiZQotICog bW9kaWZpZWQgd2hlbiB3ZSByZXR1cm4gdHJ1ZSAoc2VlIGxhdGVyIHJlbWFya3Mgb24gbXVsdGlw bGUgcm93IHZlcnNpb25zCi0gKiByZWFjaGFibGUgdmlhIGEgc2luZ2xlIGluZGV4IGVudHJ5KS4K KyAqIFJldHVybiB0aGUgbmV4dCB0dXBsZSBmcm9tIGFuIGluZGV4IHNjYW4gdGhyb3VnaCBgc2xv dGAsIHNjYW5uaW5nIGluIHRoZQorICogc3BlY2lmaWVkIGRpcmVjdGlvbi4gIFJldHVybnMgdHJ1 ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcgdGhlIHNjYW4ga2V5cyBhbmQKKyAqIHRoZSBzbmFwc2hv dCB3YXMgZm91bmQsIGZhbHNlIG90aGVyd2lzZS4KICAqCi0gKiAqY2FsbF9hZ2FpbiBuZWVkcyB0 byBiZSBmYWxzZSBvbiB0aGUgZmlyc3QgY2FsbCB0byB0YWJsZV9pbmRleF9mZXRjaF90dXBsZSgp IGZvcgotICogYSB0aWQuIElmIHRoZXJlIHBvdGVudGlhbGx5IGlzIGFub3RoZXIgdHVwbGUgbWF0 Y2hpbmcgdGhlIHRpZCwgKmNhbGxfYWdhaW4KLSAqIHdpbGwgYmUgc2V0IHRvIHRydWUsIHNpZ25h bGluZyB0aGF0IHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKCkgc2hvdWxkIGJlIGNhbGxlZAotICog YWdhaW4gZm9yIHRoZSBzYW1lIHRpZC4KKyAqIEZvciBhIHBsYWluIGluZGV4IHNjYW4gdGhlIHNs b3QgaG9sZHMgdGhlIHRhYmxlIHR1cGxlLCBhbmQgc28gbXVzdCBiZSBvZgorICogdGhlIHRhYmxl IEFNJ3MgcHJlZmVycmVkIHNsb3QgdHlwZSAoc2VlIHRhYmxlX3Nsb3RfY2FsbGJhY2tzKS4gIEZv ciBhbgorICogaW5kZXgtb25seSBzY2FuIHRoZSB0YWJsZSBBTSBpbnN0ZWFkIGZpbGxzIHRoZSBz bG90IGZyb20gdGhlIGluZGV4IGRhdGEgdGhlCisgKiBpbmRleCBBTSBwbGFjZWQgaW4gc2Nhbi0+ eHNfaXR1cC94c19oaXR1cDsgdGhlIHNsb3QgbXVzdCBiZSB2aXJ0dWFsLCBzaW5jZQorICogaXRz IGNvbnRlbnRzIGRvbid0IGNvbWUgZnJvbSB0aGUgdGFibGUgYXQgYWxsLiAgQ2FsbGVyIG11c3Qg bm90IHJlYWQKKyAqIHhzX2l0dXAveHNfaGl0dXAgSW5kZXhTY2FuRGVzYyBmaWVsZHMgZGlyZWN0 bHkuCiAgKgotICogKmFsbF9kZWFkLCBpZiBhbGxfZGVhZCBpcyBub3QgTlVMTCwgd2lsbCBiZSBz ZXQgdG8gdHJ1ZSBieQotICogdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoKSBpZmYgaXQgaXMgZ3Vh cmFudGVlZCB0aGF0IG5vIGJhY2tlbmQgbmVlZHMgdG8gc2VlCi0gKiB0aGF0IHR1cGxlLiBJbmRl eCBBTXMgY2FuIHVzZSB0aGF0IHRvIGF2b2lkIHJldHVybmluZyB0aGF0IHRpZCBpbiBmdXR1cmUK LSAqIHNlYXJjaGVzLgorICogRGlzcGF0Y2hlcyB0aHJvdWdoIHNjYW4tPnhzX2dldG5leHRfc2xv dCwgd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSBieQorICogdGhlIHRhYmxlIEFNJ3MgaW5kZXhfc2Nh bl9iZWdpbiBjYWxsYmFjay4KICAqCi0gKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgZnVu Y3Rpb24gYW5kIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkKLSAqIGlzIHRoYXQgdGhp cyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjdXJyZW50bHkgdmlzaWJsZSB2ZXJzaW9uIG9mIGEgcm93 IGlmCi0gKiB0aGUgQU0gc3VwcG9ydHMgc3RvcmluZyBtdWx0aXBsZSByb3cgdmVyc2lvbnMgcmVh Y2hhYmxlIHZpYSBhIHNpbmdsZSBpbmRleAotICogZW50cnkgKGxpa2UgaGVhcCdzIEhPVCkuIFdo ZXJlYXMgdGFibGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24oKSBvbmx5Ci0gKiBldmFsdWF0ZXMg dGhlIHR1cGxlIGV4YWN0bHkgYXQgYHRpZGAuIE91dHNpZGUgb2YgaW5kZXggZW50cnkgLT50YWJs ZSB0dXBsZQotICogbG9va3VwcywgdGFibGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24oKSBpcyB3 aGF0J3MgdXN1YWxseSBuZWVkZWQuCisgKiAqcmVjaGVjayBpcyBzZXQgKG9uIGEgdHJ1ZSByZXR1 cm4pIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIHNjYW4ga2V5cyBtdXN0CisgKiBiZSByZWNoZWNr ZWQgYWdhaW5zdCB0aGUgcmV0dXJuZWQgdHVwbGUuCisgKgorICogT24gc3VjY2VzcywgcmVzb3Vy Y2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBhcmUgbGlrZWx5IHRvIGJlIGhlbGQsIGFuZCB3aWxsIGJl CisgKiByZWxlYXNlZCBieSBhIGZ1dHVyZSB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qgb3IgdGFi bGVfaW5kZXhfc2Nhbl9lbmQgY2FsbC4KKyAqCisgKiBOb3RlOiBmb3Igb3JkZXJlZCBzY2Fucywg dGhlIGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2tvcmRlcmJ5IGFuZAorICogcmVj aGVjayB0aGUgT1JERVIgQlkgZXhwcmVzc2lvbnMgZm9yIGl0c2VsZi4KICAqLwogc3RhdGljIGlu bGluZSBib29sCi10YWJsZV9pbmRleF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxl RGF0YSAqc2NhbiwKLQkJCQkJCUl0ZW1Qb2ludGVyIHRpZCwKLQkJCQkJCVNuYXBzaG90IHNuYXBz aG90LAotCQkJCQkJVHVwbGVUYWJsZVNsb3QgKnNsb3QsCi0JCQkJCQlib29sICpjYWxsX2FnYWlu LCBib29sICphbGxfZGVhZCkKK3RhYmxlX2luZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJIFR1cGxlVGFibGVTbG90ICpz bG90LCBib29sICpyZWNoZWNrKQogewotCXJldHVybiBzY2FuLT5yZWwtPnJkX3RhYmxlYW0tPmlu ZGV4X2ZldGNoX3R1cGxlKHNjYW4sIHRpZCwgc25hcHNob3QsCi0JCQkJCQkJCQkJCQkJc2xvdCwg Y2FsbF9hZ2FpbiwKLQkJCQkJCQkJCQkJCQlhbGxfZGVhZCk7CisJQXNzZXJ0KFRUU19JU19WSVJU VUFMKHNsb3QpIHx8ICFzY2FuLT54c193YW50X2l0dXApOworCUFzc2VydChzY2FuLT54c190YWJs ZV9vcGFxdWUpOworCisJcmV0dXJuIHNjYW4tPnhzX2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rp b24sIHNsb3QsIHJlY2hlY2spOwogfQogCiAvKgotICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIHdy YXBwZXIgYXJvdW5kIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKCkgd2hpY2gKLSAqIHJldHVybnMg d2hldGhlciB0aGVyZSBhcmUgdGFibGUgdHVwbGUgaXRlbXMgY29ycmVzcG9uZGluZyB0byBhbiBp bmRleAotICogZW50cnkuICBUaGlzIGxpa2VseSBpcyBvbmx5IHVzZWZ1bCB0byB2ZXJpZnkgaWYg dGhlcmUncyBhIGNvbmZsaWN0IGluIGEKLSAqIHVuaXF1ZSBpbmRleC4KKyAqIEZldGNoIHR1cGxl IGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZyBhIHZpc2liaWxpdHkgdGVzdCBhY2Nv cmRpbmcKKyAqIHRvIGBzbmFwc2hvdGAuIElmIGEgdHVwbGUgd2FzIGZvdW5kIGFuZCBwYXNzZWQg dGhlIHZpc2liaWxpdHkgdGVzdCwgcmV0dXJucworICogdHJ1ZSwgZmFsc2Ugb3RoZXJ3aXNlLiAg VGhpcyBpcyBhIGxvdy1sZXZlbCBpbnRlcmZhY2UgZGVzaWduZWQgZm9yIHVzZSBieQorICogY29u c3RyYWludCBlbmZvcmNlbWVudCBjb2RlLCB3aGVyZSBwYXNzaW5nIGEgVElEIGNhbid0IGJlIGF2 b2lkZWQuCisgKgorICogTm90ZSB0aGF0ICp0aWQgbWF5IGJlIG1vZGlmaWVkIHdoZW4gd2UgcmV0 dXJuIHRydWUgKGUuZy4gZHVlIHRvIGZvbGxvd2luZyBhCisgKiBIT1QgY2hhaW4gaW4gYSBoZWFw YW0gdGFibGUpLiAgQ2FsbGVyIHNob3VsZCBjb25zaWRlciBwYXNzaW5nIGEgcG9pbnRlciB0bwor ICogYSBtdXRhYmxlIGNvcHkgb2YgdGhlaXIgb3JpZ2luYWwgVElEIHRvIGF2b2lkIHVud2FudGVk IHNpZGUtZWZmZWN0cy4KKyAqCisgKiBJZiBhbGxfZGVhZCBpcyBub3QgTlVMTCwgKmFsbF9kZWFk IHdpbGwgYmUgc2V0IHRvIHRydWUgaGVyZSBpZmYgaXQgaXMKKyAqIGd1YXJhbnRlZWQgdGhhdCBu byBiYWNrZW5kIG5lZWRzIHRvIHNlZSBhbnkgdHVwbGUgcmVhY2hhYmxlIHRocm91Z2gKKyAqIGNh bGxlcidzIFRJRC4gIFRoaXMgbWVhbnMgdGhhdCBpdCBpcyBzYWZlIHRvIG1hcmsgYW4gaW5kZXgg dHVwbGUgY29udGFpbmluZworICogdGhpcyBUSUQgYXMgTFBfREVBRC4KKyAqCisgKiBUaGUgbWFp biBkaWZmZXJlbmNlIGJldHdlZW4gdGFibGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24oKSBhbmQg dGhpcworICogZnVuY3Rpb24gaXMgdGhhdCB3ZSByZXR1cm4gdGhlIGN1cnJlbnRseSB2aXNpYmxl IHZlcnNpb24gb2YgYSByb3csIHdoaWNoCisgKiBtYXR0ZXJzIHdpdGggQU1zIHRoYXQgc3VwcG9y dCBzdG9yaW5nIG11bHRpcGxlIHJvdyB2ZXJzaW9ucyByZWFjaGFibGUgdmlhIGEKKyAqIHNpbmds ZSBUSUQgKGUuZy4sIGR1ZSB0byBoZWFwYW0ncyBIT1QgY2hhaW5zKS4gIFRvIHJlbGlhYmx5IGV2 YWx1YXRlCisgKiBleGFjdGx5IHRoZSB0dXBsZSBhdCBgdGlkYCwgY2FsbCB0YWJsZV90dXBsZV9m ZXRjaF9yb3dfdmVyc2lvbigpIGluc3RlYWQuCiAgKi8KLWV4dGVybiBib29sIHRhYmxlX2luZGV4 X2ZldGNoX3R1cGxlX2NoZWNrKFJlbGF0aW9uIHJlbCwKLQkJCQkJCQkJCQkgIEl0ZW1Qb2ludGVy IHRpZCwKLQkJCQkJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJCQkJCSAgYm9vbCAq YWxsX2RlYWQpOworc3RhdGljIGlubGluZSBib29sCit0YWJsZV9mZXRjaF90aWQoUmVsYXRpb24g cmVsLAorCQkJCUl0ZW1Qb2ludGVyIHRpZCwKKwkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQlU dXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQlib29sICphbGxfZGVhZCkKK3sKKwlyZXR1cm4gcmVs LT5yZF90YWJsZWFtLT5mZXRjaF90aWQocmVsLCB0aWQsIHNuYXBzaG90LCBzbG90LCBhbGxfZGVh ZCk7Cit9CisKKy8qCisgKiBDb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCB0YWJsZV9mZXRjaF90 aWQoKSBmb3IgY2FsbGVycyB0aGF0IGp1c3QgbmVlZCB0bworICogY2hlY2sgaWYgYSB0dXBsZSBp cyB2aXNpYmxlLgorICoKKyAqIENhbGxlciBzaG91bGQgbm90ZSB0aGUgdGFibGVfZmV0Y2hfdGlk IHdhcm5pbmcgYWJvdXQgKnRpZCBiZWluZyBtb2RpZmllZAorICogd2hlbiB3ZSByZXR1cm4gdHJ1 ZSBpbiBzb21lIGNhc2VzLgorICovCitleHRlcm4gYm9vbCB0YWJsZV9mZXRjaF90aWRfY2hlY2so UmVsYXRpb24gcmVsLAorCQkJCQkJCQkgIEl0ZW1Qb2ludGVyIHRpZCwKKwkJCQkJCQkJICBTbmFw c2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJICBib29sICphbGxfZGVhZCk7CiAKIAogLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCkBAIC0xMzM2LDkgKzEzODMsOCBAQCBleHRlcm4gYm9vbCB0YWJsZV9pbmRleF9m ZXRjaF90dXBsZV9jaGVjayhSZWxhdGlvbiByZWwsCiAgKiBgc25hcHNob3RgLiBJZiBhIHR1cGxl IHdhcyBmb3VuZCBhbmQgcGFzc2VkIHRoZSB2aXNpYmlsaXR5IHRlc3QsIHJldHVybnMKICAqIHRy dWUsIGZhbHNlIG90aGVyd2lzZS4KICAqCi0gKiBTZWUgdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUn cyBjb21tZW50IGFib3V0IHdoYXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbgotICogdGhlc2UgZnVu Y3Rpb25zIGlzLiBJdCBpcyBjb3JyZWN0IHRvIHVzZSB0aGlzIGZ1bmN0aW9uIG91dHNpZGUgb2Yg aW5kZXgKLSAqIGVudHJ5LT50YWJsZSB0dXBsZSBsb29rdXBzLgorICogU2VlIHRhYmxlX2ZldGNo X3RpZCdzIGNvbW1lbnQgYWJvdXQgd2hhdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZXNlCisg KiBmdW5jdGlvbnMgaXMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbAogdGFibGVfdHVwbGVfZmV0 Y2hfcm93X3ZlcnNpb24oUmVsYXRpb24gcmVsLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhl Y3V0b3IvaW5zdHJ1bWVudF9ub2RlLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50 X25vZGUuaAppbmRleCA0MDc2OTkwNDAuLjQxYTdkMzNmMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv aW5zdHJ1bWVudF9ub2RlLmgKQEAgLTk4LDEzICs5OCwxNiBAQCBBY2N1bXVsYXRlSU9TdGF0cyhJ T1N0YXRzICpkc3QsIElPU3RhdHMgKnNyYykKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0K LSAqCUluc3RydW1lbnRhdGlvbiBpbmZvcm1hdGlvbiBmb3IgaW5kZXhzY2FucyAoYW1nZXR0dXBs ZSBhbmQgYW1nZXRiaXRtYXApCisgKglJbnN0cnVtZW50YXRpb24gaW5mb3JtYXRpb24gZm9yIGlu ZGV4IHNjYW5zICh1c2VkIGJ5IGFsbCBBTSBpbnRlcmZhY2VzKQogICogLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAgKi8KIHR5cGVkZWYgc3RydWN0IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbgogewog CS8qIEluZGV4IHNlYXJjaCBjb3VudCAoaW5jcmVtZW50ZWQgd2l0aCBwZ3N0YXRfY291bnRfaW5k ZXhfc2NhbiBjYWxsKSAqLwogCXVpbnQ2NAkJbnNlYXJjaGVzOworCisJLyogVGFibGUgdHVwbGVz IGZldGNoZWQgY291bnQgKGluY3JlbWVudGVkIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zKSAqLwor CXVpbnQ2NAkJbnRhYmxldHVwbGVmZXRjaGVzOwogfSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb247 CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9p bmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDUzYzEzODMxMC4uOWVjY2FmMjUwIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaApAQCAtMTc5MCwxMSArMTc5MCw3IEBAIHR5cGVkZWYgc3RydWN0IElu ZGV4U2NhblN0YXRlCiAgKgkJU2NhbkRlc2MJCSAgIGluZGV4IHNjYW4gZGVzY3JpcHRvcgogICoJ CUluc3RydW1lbnQJCSAgIGxvY2FsIGluZGV4IHNjYW4gaW5zdHJ1bWVudGF0aW9uCiAgKgkJU2hh cmVkSW5mbwkJICAgcGFyYWxsZWwgd29ya2VyIGluc3RydW1lbnRhdGlvbiAobm8gbGVhZGVyIGVu dHJ5KQotICoJCVRhYmxlU2xvdAkJICAgc2xvdCBmb3IgaG9sZGluZyB0dXBsZXMgZmV0Y2hlZCBm cm9tIHRoZSB0YWJsZQotICoJCVZNQnVmZmVyCQkgICBidWZmZXIgaW4gdXNlIGZvciB2aXNpYmls aXR5IG1hcCB0ZXN0aW5nLCBpZiBhbnkKICAqCQlQc2NhbkxlbgkJICAgc2l6ZSBvZiBwYXJhbGxl bCBpbmRleC1vbmx5IHNjYW4gZGVzY3JpcHRvcgotICoJCU5hbWVDU3RyaW5nQXR0TnVtcyBhdHRu dW1zIG9mIG5hbWUgdHlwZWQgY29sdW1ucyB0byBwYWQgdG8gTkFNRURBVEFMRU4KLSAqCQlOYW1l Q1N0cmluZ0NvdW50ICAgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBOYW1lQ1N0cmluZ0F0dE51 bXMgYXJyYXkKICAqIC0tLS0tLS0tLS0tLS0tLS0KICAqLwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhP bmx5U2NhblN0YXRlCkBAIC0xODEzLDExICsxODA5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhP bmx5U2NhblN0YXRlCiAJc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhICppb3NzX1NjYW5EZXNjOwog CUluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW9zc19JbnN0cnVtZW50OwogCVNoYXJlZEluZGV4 U2Nhbkluc3RydW1lbnRhdGlvbiAqaW9zc19TaGFyZWRJbmZvOwotCVR1cGxlVGFibGVTbG90ICpp b3NzX1RhYmxlU2xvdDsKLQlCdWZmZXIJCWlvc3NfVk1CdWZmZXI7CiAJU2l6ZQkJaW9zc19Qc2Nh bkxlbjsKLQlBdHRyTnVtYmVyICppb3NzX05hbWVDU3RyaW5nQXR0TnVtczsKLQlpbnQJCQlpb3Nz X05hbWVDU3RyaW5nQ291bnQ7CiB9IEluZGV4T25seVNjYW5TdGF0ZTsKIAogLyogLS0tLS0tLS0t LS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggMjI2 OGNjMjc3Li5mMGU4ZDA5MWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYwpAQCAtNjc5LDcgKzY3OSw3IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVy KFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAsCiAKIAkJdGFibGVTY2FuID0gTlVM TDsKIAkJaGVhcFNjYW4gPSBOVUxMOwotCQlpbmRleFNjYW4gPSBpbmRleF9iZWdpbnNjYW4oT2xk SGVhcCwgT2xkSW5kZXgsCisJCWluZGV4U2NhbiA9IGluZGV4X2JlZ2luc2NhbihPbGRIZWFwLCBP bGRJbmRleCwgZmFsc2UsCiAJCQkJCQkJCQlzbmFwc2hvdCA/IHNuYXBzaG90IDogU25hcHNob3RB bnksCiAJCQkJCQkJCQlOVUxMLCAwLCAwLAogCQkJCQkJCQkJU09fTk9ORSk7CkBAIC03MjIsMTEg KzcyMiwxNCBAQCBoZWFwYW1fcmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihSZWxhdGlvbiBPbGRI ZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogCiAJCWlmIChpbmRleFNjYW4gIT0gTlVMTCkKIAkJewot CQkJaWYgKCFpbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhTY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlv biwgc2xvdCkpCisJCQlib29sCQlyZWNoZWNrOworCisJCQlpZiAoIXRhYmxlX2luZGV4X2dldG5l eHRfc2xvdChpbmRleFNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJCSAgc2xv dCwgJnJlY2hlY2spKQogCQkJCWJyZWFrOwogCiAJCQkvKiBTaW5jZSB3ZSB1c2VkIG5vIHNjYW4g a2V5cywgc2hvdWxkIG5ldmVyIG5lZWQgdG8gcmVjaGVjayAqLwotCQkJaWYgKGluZGV4U2Nhbi0+ eHNfcmVjaGVjaykKKwkJCWlmIChyZWNoZWNrKQogCQkJCWVsb2coRVJST1IsICJDTFVTVEVSIGRv ZXMgbm90IHN1cHBvcnQgbG9zc3kgaW5kZXggY29uZGl0aW9ucyIpOwogCQl9CiAJCWVsc2UKQEAg LTI2NzksMTAgKzI2ODIsOSBAQCBzdGF0aWMgY29uc3QgVGFibGVBbVJvdXRpbmUgaGVhcGFtX21l dGhvZHMgPSB7CiAJLnBhcmFsbGVsc2Nhbl9pbml0aWFsaXplID0gdGFibGVfYmxvY2tfcGFyYWxs ZWxzY2FuX2luaXRpYWxpemUsCiAJLnBhcmFsbGVsc2Nhbl9yZWluaXRpYWxpemUgPSB0YWJsZV9i bG9ja19wYXJhbGxlbHNjYW5fcmVpbml0aWFsaXplLAogCi0JLmluZGV4X2ZldGNoX2JlZ2luID0g aGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luLAotCS5pbmRleF9mZXRjaF9yZXNldCA9IGhlYXBhbV9p bmRleF9mZXRjaF9yZXNldCwKLQkuaW5kZXhfZmV0Y2hfZW5kID0gaGVhcGFtX2luZGV4X2ZldGNo X2VuZCwKLQkuaW5kZXhfZmV0Y2hfdHVwbGUgPSBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUsCisJ LmluZGV4X3NjYW5fYmVnaW4gPSBoZWFwYW1faW5kZXhfc2Nhbl9iZWdpbiwKKwkuaW5kZXhfc2Nh bl9yZXNldCA9IGhlYXBhbV9pbmRleF9zY2FuX3Jlc2V0LAorCS5pbmRleF9zY2FuX2VuZCA9IGhl YXBhbV9pbmRleF9zY2FuX2VuZCwKIAogCS50dXBsZV9pbnNlcnQgPSBoZWFwYW1fdHVwbGVfaW5z ZXJ0LAogCS50dXBsZV9pbnNlcnRfc3BlY3VsYXRpdmUgPSBoZWFwYW1fdHVwbGVfaW5zZXJ0X3Nw ZWN1bGF0aXZlLApAQCAtMjY5Miw2ICsyNjk0LDcgQEAgc3RhdGljIGNvbnN0IFRhYmxlQW1Sb3V0 aW5lIGhlYXBhbV9tZXRob2RzID0gewogCS50dXBsZV91cGRhdGUgPSBoZWFwYW1fdHVwbGVfdXBk YXRlLAogCS50dXBsZV9sb2NrID0gaGVhcGFtX3R1cGxlX2xvY2ssCiAKKwkuZmV0Y2hfdGlkID0g aGVhcGFtX2ZldGNoX3RpZCwKIAkudHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24gPSBoZWFwYW1fZmV0 Y2hfcm93X3ZlcnNpb24sCiAJLnR1cGxlX2dldF9sYXRlc3RfdGlkID0gaGVhcF9nZXRfbGF0ZXN0 X3RpZCwKIAkudHVwbGVfdGlkX3ZhbGlkID0gaGVhcGFtX3R1cGxlX3RpZF92YWxpZCwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYwppbmRleCAzM2QxNGYxZGUuLjMy ZDZhZmYxZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4 c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYwpA QCAtMTQsMzYgKzE0LDExOSBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1 ZGUgImFjY2Vzcy9hbWFwaS5oIgogI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW0uaCIKICNpbmNsdWRl ICJhY2Nlc3MvcmVsc2Nhbi5oIgorI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5o IgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvcGdzdGF0X2lu dGVybmFsLmgiCiAKIAorc3RhdGljIGJvb2wgaGVhcGFtX2luZGV4X3BsYWluX3R1cGxlX2dldG5l eHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24g ZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCQkJ CQkJCSAgYm9vbCAqcmVjaGVjayk7CitzdGF0aWMgYm9vbCBoZWFwYW1faW5kZXhfb25seV90dXBs ZV9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJ CQkJCQkJCQkJIGJvb2wgKnJlY2hlY2spOworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5s aW5lIGJvb2wgaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCisJ CQkJCQkJCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCQkJ CSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCQkJCQkJCQkJCQkgYm9vbCBpbmRleF9vbmx5 LAorCQkJCQkJCQkJCQkJCQkJCSBib29sICpyZWNoZWNrKTsKK3N0YXRpYyBwZ19hdHRyaWJ1dGVf YWx3YXlzX2lubGluZSBib29sIGhlYXBhbV9pbmRleF9oZWFwX2ZldGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhTY2FuSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCQkJCQkJCQkJICAgVHVwbGVU YWJsZVNsb3QgKnNsb3QsIGJvb2wgaW5kZXhfb25seSwKKwkJCQkJCQkJCQkJCQkJCSAgIGJvb2wg KmhlYXBfY29udGludWUsIGJvb2wgKmFsbF9kZWFkKTsKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3 YXlzX2lubGluZSB2b2lkIGhlYXBhbV9pbmRleF9raWxsX2l0ZW0oSW5kZXhTY2FuRGVzYyBzY2Fu KTsKKworLyoKKyAqIFNpbXBsZSwgc2luZ2xlLXNob3QgVElEIGxvb2t1cCBmb3IgY29uc3RyYWlu dCBlbmZvcmNlbWVudCBjb2RlICh1bmlxdWUKKyAqIGNoZWNrcyBhbmQgc2ltaWxhcikuICBUaGlz IGlzIGVzc2VudGlhbGx5IGp1c3QgYSBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyCisgKiB3cmFwcGVy LgorICoKKyAqIFRoaXMgaXNuJ3QgYWN0dWFsbHkgcmVsYXRlZCB0byBpbmRleCBzY2FucywgYnV0 IGtlZXBpbmcgaXQgbmVhcgorICogaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlciBjYW4gaGVscCB0aGUg Y29tcGlsZXIgZ2VuZXJhdGUgYmV0dGVyIGNvZGUuCisgKi8KK2Jvb2wKK2hlYXBhbV9mZXRjaF90 aWQoUmVsYXRpb24gcmVsLCBJdGVtUG9pbnRlciB0aWQsIFNuYXBzaG90IHNuYXBzaG90LAorCQkJ CSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCAqYWxsX2RlYWQpCit7CisJQnVmZmVySGVhcFR1 cGxlVGFibGVTbG90ICpic2xvdCA9IChCdWZmZXJIZWFwVHVwbGVUYWJsZVNsb3QgKikgc2xvdDsK KwlCdWZmZXIJCWJ1ZjsKKwlib29sCQlmb3VuZDsKKworCUFzc2VydChUVFNfSVNfQlVGRkVSVFVQ TEUoc2xvdCkpOworCisJYnVmID0gUmVhZEJ1ZmZlcihyZWwsIEl0ZW1Qb2ludGVyR2V0QmxvY2tO dW1iZXIodGlkKSk7CisKKwlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOworCWZv dW5kID0gaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcih0aWQsIHJlbCwgYnVmLCBzbmFwc2hvdCwKKwkJ CQkJCQkJICAgJmJzbG90LT5iYXNlLnR1cGRhdGEsIGFsbF9kZWFkLCB0cnVlKTsKKwlic2xvdC0+ YmFzZS50dXBkYXRhLnRfc2VsZiA9ICp0aWQ7CisJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NL X1VOTE9DSyk7CisKKwlpZiAoZm91bmQpCisJeworCQlzbG90LT50dHNfdGFibGVPaWQgPSBSZWxh dGlvbkdldFJlbGlkKHJlbCk7CisJCUV4ZWNTdG9yZVBpbm5lZEJ1ZmZlckhlYXBUdXBsZSgmYnNs b3QtPmJhc2UudHVwZGF0YSwgc2xvdCwKKwkJCQkJCQkJCSAgIGJ1Zik7CisJfQorCWVsc2UKKwkJ UmVsZWFzZUJ1ZmZlcihidWYpOworCisJcmV0dXJuIGZvdW5kOworfQorCiAvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KICAqIEluZGV4IFNjYW4gQ2FsbGJhY2tzIGZvciBoZWFwIEFNCiAgKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KICAqLwogCi1JbmRleEZldGNoVGFibGVEYXRhICoKLWhlYXBhbV9pbmRleF9mZXRjaF9i ZWdpbihSZWxhdGlvbiByZWwsIHVpbnQzMiBmbGFncykKK3ZvaWQKK2hlYXBhbV9pbmRleF9zY2Fu X2JlZ2luKEluZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMyIGZsYWdzKQogewotCUluZGV4RmV0Y2hI ZWFwRGF0YSAqaHNjYW4gPSBwYWxsb2MwX29iamVjdChJbmRleEZldGNoSGVhcERhdGEpOworCUlu ZGV4U2NhbkhlYXBEYXRhICpoc2NhbiA9IHBhbGxvYzBfb2JqZWN0KEluZGV4U2NhbkhlYXBEYXRh KTsKIAotCWhzY2FuLT54c19iYXNlLnJlbCA9IHJlbDsKLQloc2Nhbi0+eHNfYmFzZS5mbGFncyA9 IGZsYWdzOwogCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKIAloc2Nhbi0+eHNfYmxr ID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCWhzY2FuLT54c192bWJ1ZmZlciA9IEludmFsaWRCdWZm ZXI7CiAKLQlyZXR1cm4gJmhzY2FuLT54c19iYXNlOworCS8qIFJlbWVtYmVyIGlmIHNjYW4gaXMg cmVhZC1vbmx5ICovCisJaHNjYW4tPnhzX3JlYWRvbmx5ID0gKGZsYWdzICYgU09fSElOVF9SRUxf UkVBRF9PTkxZKSAhPSAwOworCisJLyogUmVzb2x2ZSB3aGljaCB4c19nZXRuZXh0X3Nsb3QgaW1w bGVtZW50YXRpb24gdG8gdXNlIGZvciB0aGlzIHNjYW4gKi8KKwlpZiAoc2Nhbi0+eHNfd2FudF9p dHVwKQorCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfb25seV90dXBsZV9n ZXRuZXh0X3Nsb3Q7CisJZWxzZQorCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5k ZXhfcGxhaW5fdHVwbGVfZ2V0bmV4dF9zbG90OworCisJLyoKKwkgKiBJbmRleC1vbmx5IHNjYW5z IHRoYXQgcmV0dXJuICJuYW1lIiBjb2x1bW5zIHN0b3JlZCBhcyBjc3RyaW5ncyBuZWVkIGEKKwkg KiBwZXItdHVwbGUgY29udGV4dCB0byByZS1wYWQgdGhlbSB0byBOQU1FREFUQUxFTiB3aGlsZSBm aWxsaW5nIHRoZSBzbG90CisJICogKHNlZSBoZWFwX2ZpbGxfaW9zX3Nsb3QpLiAgeHNfbmFtZV9j c3RyaW5nX2NvdW50IGlzIHNldCBieQorCSAqIGluZGV4X2JlZ2luc2NhbiBiZWZvcmUgd2UgZ2V0 IGhlcmUuCisJICovCisJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBzY2FuLT54c19uYW1lX2Nz dHJpbmdfY291bnQgPiAwKQorCQloc2Nhbi0+eHNfaXR1cF9jeHQgPSBBbGxvY1NldENvbnRleHRD cmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkJCQkgICAiaW5kZXgtb25seSBz Y2FuIG5hbWUgY29sdW1ucyIsCisJCQkJCQkJCQkJCQkgICBBTExPQ1NFVF9TTUFMTF9TSVpFUyk7 CisKKwkvKiBFeHBvc2UgaGVhcGFtJ3MgcHJpdmF0ZSBzY2FuIHN0YXRlIHRocm91Z2ggdGhlIHNj YW4ncyBvcGFxdWUgcG9pbnRlciAqLworCXNjYW4tPnhzX3RhYmxlX29wYXF1ZSA9IGhzY2FuOwog fQogCiB2b2lkCi1oZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0YSAq c2NhbikKK2hlYXBhbV9pbmRleF9zY2FuX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKKwlJ bmRleFNjYW5IZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhTY2FuSGVhcERhdGEgKikgc2Nhbi0+eHNf dGFibGVfb3BhcXVlOworCisJLyogSGVhcCBmZXRjaGVzIGZyb20gdGhlIGxhc3QgcmVzY2FuIGRv bid0IGNvdW50IHRvd2FyZHMgdGhpcyBsaW1pdCAgKi8KKwloc2Nhbi0+eHNfYmxrc3dpdGNoX2Nv dW50ID0gMDsKKwogCS8qCi0JICogUmVzZXRzIGFyZSBhIG5vLW9wLgotCSAqCiAJICogRGVsaWJl cmF0ZWx5IGF2b2lkIGRyb3BwaW5nIHBpbnMgbm93IGhlbGQgaW4geHNfY2J1ZiBhbmQgeHNfdm1i dWZmZXIuCiAJICogVGhpcyBzYXZlcyBjeWNsZXMgZHVyaW5nIGNlcnRhaW4gdGlnaHQgbmVzdGVk IGxvb3Agam9pbnMgKGl0IGNhbiBhdm9pZAogCSAqIHJlcGVhdGVkIHBpbm5pbmcgYW5kIHVucGlu bmluZyBvZiB0aGUgc2FtZSBidWZmZXIgYWNyb3NzIHJlc2NhbnMpLgpAQCAtNTEsOSArMTM0LDkg QEAgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiB9 CiAKIHZvaWQKLWhlYXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2Nh bikKK2hlYXBhbV9pbmRleF9zY2FuX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCiB7Ci0JSW5kZXhG ZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2NhbjsKKwlJbmRl eFNjYW5IZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhTY2FuSGVhcERhdGEgKikgc2Nhbi0+eHNfdGFi bGVfb3BhcXVlOwogCiAJLyogZHJvcCBwaW4gaWYgdGhlcmUncyBhIHBpbm5lZCBoZWFwIHBhZ2Ug Ki8KIAlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCkBAIC02Myw2ICsxNDYsMTAg QEAgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogCWlm IChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c192bWJ1ZmZlcikpCiAJCVJlbGVhc2VCdWZmZXIoaHNj YW4tPnhzX3ZtYnVmZmVyKTsKIAorCS8qIEZyZWUgdGhlIGluZGV4LW9ubHkgc2NhbiBuYW1lLWNv bHVtbiBjb250ZXh0LCBpZiBhbnkgKi8KKwlpZiAoaHNjYW4tPnhzX2l0dXBfY3h0KQorCQlNZW1v cnlDb250ZXh0RGVsZXRlKGhzY2FuLT54c19pdHVwX2N4dCk7CisKIAlwZnJlZShoc2Nhbik7CiB9 CiAKQEAgLTIyOCwxOCArMzE1LDI4NiBAQCBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKEl0ZW1Qb2lu dGVyIHRpZCwgUmVsYXRpb24gcmVsYXRpb24sIEJ1ZmZlciBidWZmZXIsCiAJcmV0dXJuIGZhbHNl OwogfQogCi1ib29sCi1oZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hU YWJsZURhdGEgKnNjYW4sCi0JCQkJCQkgSXRlbVBvaW50ZXIgdGlkLAotCQkJCQkJIFNuYXBzaG90 IHNuYXBzaG90LAotCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJIGJvb2wgKmhl YXBfY29udGludWUsIGJvb2wgKmFsbF9kZWFkKQorLyoKKyAqIEZpbGwgYW4gaW5kZXgtb25seSBz Y2FuJ3MgcmVzdWx0IHNsb3QgZnJvbSB0aGUgZGF0YSB0aGUgaW5kZXggQU0gcmV0dXJuZWQuCisg KgorICogVGhlIGRhdGEgaXMgcHJvdmlkZWQgaW4gZWl0aGVyIEhlYXBUdXBsZSAoeHNfaGl0dXAp IG9yIEluZGV4VHVwbGUgKHhzX2l0dXApCisgKiBmb3JtYXQuICBBbiBpbmRleCBBTSBtYXkgZmls bCBib3RoLCBpbiB3aGljaCBjYXNlIHRoZSBoZWFwIGZvcm1hdCBpcyB1c2VkLAorICogc2luY2Ug aXQncyBhIGJpdCBjaGVhcGVyIHRvIGZpbGwgYSBzbG90IGZyb20uICAibmFtZSIgY29sdW1ucyBz dG9yZWQgYXMKKyAqIGNzdHJpbmdzIChlLmcuIGJ0cmVlIG5hbWVfb3BzKSBhcmUgcmUtcGFkZGVk IHRvIE5BTUVEQVRBTEVOIGFsbG9jYXRpb25zLAorICogd2hpY2ggbGl2ZSBpbiB0aGUgaGVhcCBB TSdzIHBlci10dXBsZSB4c19pdHVwX2N4dCAocmVzZXQgaGVyZSBvbiBlYWNoIGNhbGwpLgorICoK KyAqIFRoaXMgcmVhZHMgdGhlIHRhYmxlIEFNJ3MgcHJpdmF0ZSBzY2FuLXJlc3VsdCBmaWVsZHMg KHhzX2l0dXAsIHhzX2hpdHVwLAorICogZXRjLik7IGRvaW5nIHNvIGlzIHRoZSB0YWJsZSBBTSdz IGpvYiwgd2hpY2ggaXMgd2h5IHRoZSBleGVjdXRvciBhbmQgcGxhbm5lcgorICogcmVjZWl2ZSBh IGZpbGxlZCBzbG90IGZyb20gdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGluc3RlYWQuCisgKgor ICogVGhpcyBpcyBleHBvcnRlZCBmb3IgdXNlIGJ5IG90aGVyIHRhYmxlIEFNcy4KKyAqLwordm9p ZAoraGVhcF9maWxsX2lvc19zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgVHVwbGVUYWJsZVNsb3Qg KnNsb3QpCiB7Ci0JSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERh dGEgKikgc2NhbjsKLQlCdWZmZXJIZWFwVHVwbGVUYWJsZVNsb3QgKmJzbG90ID0gKEJ1ZmZlckhl YXBUdXBsZVRhYmxlU2xvdCAqKSBzbG90OworCWlmIChzY2FuLT54c19oaXR1cCkKKwl7CisJCS8q CisJCSAqIFdlIGRvbid0IHRha2UgdGhlIHRyb3VibGUgdG8gdmVyaWZ5IHRoYXQgdGhlIHByb3Zp ZGVkIHR1cGxlIGhhcworCQkgKiBleGFjdGx5IHRoZSBzbG90J3MgZm9ybWF0LCBidXQgaXQgc2Vl bXMgd29ydGggZG9pbmcgYSBxdWljayBjaGVjaworCQkgKiBvbiB0aGUgbnVtYmVyIG9mIGZpZWxk cy4KKwkJICovCisJCUFzc2VydChzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yLT5uYXR0cyA9PQor CQkJICAgc2Nhbi0+eHNfaGl0dXBkZXNjLT5uYXR0cyk7CisJCUV4ZWNGb3JjZVN0b3JlSGVhcFR1 cGxlKHNjYW4tPnhzX2hpdHVwLCBzbG90LCBmYWxzZSk7CisJfQorCWVsc2UgaWYgKHNjYW4tPnhz X2l0dXApCisJeworCQlUdXBsZURlc2MJaXR1cGRlc2MgPSBzY2FuLT54c19pdHVwZGVzYzsKKwor CQkvKgorCQkgKiBOb3RlOiB3ZSBtdXN0IHVzZSB0aGUgdHVwZGVzYyBzdXBwbGllZCBieSB0aGUg QU0gaW4KKwkJICogaW5kZXhfZGVmb3JtX3R1cGxlLCBub3QgdGhlIHNsb3QncyB0dXBkZXNjLCBp biBjYXNlIHRoZSBsYXR0ZXIgaGFzCisJCSAqIGRpZmZlcmVudCBkYXRhdHlwZXMgKHRoaXMgaGFw cGVucyBmb3IgYnRyZWUgbmFtZV9vcHMgaW4KKwkJICogcGFydGljdWxhcikuIFRoZXknZCBiZXR0 ZXIgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgY29sdW1ucyB0aG91Z2gsCisJCSAqIGFzIHdlbGwg YXMgYmVpbmcgZGF0YXR5cGUtY29tcGF0aWJsZSB3aGljaCBpcyBzb21ldGhpbmcgd2UgY2FuJ3Qg c28KKwkJICogZWFzaWx5IGNoZWNrLgorCQkgKi8KKwkJQXNzZXJ0KHNsb3QtPnR0c190dXBsZURl c2NyaXB0b3ItPm5hdHRzID09IGl0dXBkZXNjLT5uYXR0cyk7CisKKwkJRXhlY0NsZWFyVHVwbGUo c2xvdCk7CisJCWluZGV4X2RlZm9ybV90dXBsZShzY2FuLT54c19pdHVwLCBpdHVwZGVzYywKKwkJ CQkJCSAgIHNsb3QtPnR0c192YWx1ZXMsIHNsb3QtPnR0c19pc251bGwpOworCisJCS8qCisJCSAq IENvcHkgYWxsIG5hbWUgY29sdW1ucyBzdG9yZWQgYXMgY3N0cmluZ3MgYmFjayBpbnRvIGEgTkFN RURBVEFMRU4KKwkJICogYnl0ZSBzaXplZCBhbGxvY2F0aW9uLiAgV2UgbWFyayB0aGlzIGJyYW5j aCBhcyB1bmxpa2VseSBhcworCQkgKiBnZW5lcmFsbHkgIm5hbWUiIGlzIHVzZWQgb25seSBmb3Ig dGhlIHN5c3RlbSBjYXRhbG9ncyBhbmQgdGhpcworCQkgKiB3b3VsZCBoYXZlIHRvIGJlIGEgdXNl ciBxdWVyeSBydW5uaW5nIG9uIHRob3NlIG9yIHNvbWUgb3RoZXIgdXNlcgorCQkgKiB0YWJsZSB3 aXRoIGFuIGluZGV4IG9uIGEgbmFtZSBjb2x1bW4uCisJCSAqLworCQlpZiAodW5saWtlbHkoc2Nh bi0+eHNfbmFtZV9jc3RyaW5nX2F0dG51bXMgIT0gTlVMTCkpCisJCXsKKwkJCUluZGV4U2Nhbkhl YXBEYXRhICpoc2NhbiA9IChJbmRleFNjYW5IZWFwRGF0YSAqKSBzY2FuLT54c190YWJsZV9vcGFx dWU7CisKKwkJCS8qIGZyZWUgdGhlIHByZXZpb3VzIHR1cGxlJ3MgbmFtZSBhbGxvY2F0aW9ucyAq LworCQkJTWVtb3J5Q29udGV4dFJlc2V0KGhzY2FuLT54c19pdHVwX2N4dCk7CisKKwkJCWZvciAo aW50IGlkeCA9IDA7IGlkeCA8IHNjYW4tPnhzX25hbWVfY3N0cmluZ19jb3VudDsgaWR4KyspCisJ CQl7CisJCQkJaW50CQkJYXR0bnVtID0gc2Nhbi0+eHNfbmFtZV9jc3RyaW5nX2F0dG51bXNbaWR4 XTsKKwkJCQlOYW1lCQluYW1lOworCisJCQkJLyogc2tpcCBudWxsIERhdHVtcyAqLworCQkJCWlm IChzbG90LT50dHNfaXNudWxsW2F0dG51bV0pCisJCQkJCWNvbnRpbnVlOworCisJCQkJbmFtZSA9 IChOYW1lKSBNZW1vcnlDb250ZXh0QWxsb2MoaHNjYW4tPnhzX2l0dXBfY3h0LAorCQkJCQkJCQkJ CQkJIE5BTUVEQVRBTEVOKTsKKworCQkJCS8qIHVzZSBuYW1lc3RyY3B5IHRvIHplcm8tcGFkIGFs bCB0cmFpbGluZyBieXRlcyAqLworCQkJCW5hbWVzdHJjcHkobmFtZSwgRGF0dW1HZXRDU3RyaW5n KHNsb3QtPnR0c192YWx1ZXNbYXR0bnVtXSkpOworCQkJCXNsb3QtPnR0c192YWx1ZXNbYXR0bnVt XSA9IE5hbWVHZXREYXR1bShuYW1lKTsKKwkJCX0KKwkJfQorCisJCUV4ZWNTdG9yZVZpcnR1YWxU dXBsZShzbG90KTsKKwl9CisJZWxzZQorCQllbG9nKEVSUk9SLCAibm8gZGF0YSByZXR1cm5lZCBm b3IgaW5kZXgtb25seSBzY2FuIik7Cit9CisKKy8qIHhzX2dldG5leHRfc2xvdCBjYWxsYmFjazog YW1nZXR0dXBsZSwgcGxhaW4gaW5kZXggc2NhbiAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9ob3Qg Ym9vbAoraGVhcGFtX2luZGV4X3BsYWluX3R1cGxlX2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNj IHNjYW4sCisJCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJICBU dXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCQkJCSAgYm9vbCAqcmVjaGVjaykKK3sKKwlBc3Nl cnQoIXNjYW4tPnhzX3dhbnRfaXR1cCk7CisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJk X2luZGFtLT5hbWdldHR1cGxlICE9IE5VTEwpOworCisJcmV0dXJuIGhlYXBhbV9pbmRleF9nZXRu ZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBzbG90LCBmYWxzZSwgcmVjaGVjayk7Cit9CisKKy8q IHhzX2dldG5leHRfc2xvdCBjYWxsYmFjazogYW1nZXR0dXBsZSwgaW5kZXgtb25seSBzY2FuICov CitzdGF0aWMgcGdfYXR0cmlidXRlX2hvdCBib29sCitoZWFwYW1faW5kZXhfb25seV90dXBsZV9n ZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24g ZGlyZWN0aW9uLAorCQkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCQkJIGJv b2wgKnJlY2hlY2spCit7CisJQXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1cCk7CisJQXNzZXJ0KHNj YW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldHR1cGxlICE9IE5VTEwpOworCisJcmV0 dXJuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBzbG90LCB0cnVl LCByZWNoZWNrKTsKK30KKworLyoKKyAqIENvbW1vbiBpbXBsZW1lbnRhdGlvbiBmb3IgYm90aCBo ZWFwYW1faW5kZXhfKl9nZXRuZXh0X3Nsb3QgdmFyaWFudHMuCisgKgorICogVGhlIHJlc3VsdCBp cyB0cnVlIGlmIGEgdHVwbGUgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFuZCB0aGUgc25hcHNo b3Qgd2FzCisgKiBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLiAgT24gc3VjY2VzcyB0aGUgc2xvdCBp cyBmaWxsZWQ6IGZvciBwbGFpbiBpbmRleAorICogc2NhbnMgd2l0aCB0aGUgaGVhcCB0dXBsZTsg Zm9yIGluZGV4LW9ubHkgc2NhbnMgd2l0aCB0aGUgaW5kZXggZGF0YSAoZnJvbQorICogeHNfaXR1 cC94c19oaXR1cCwgdmlhIGhlYXBfZmlsbF9pb3Nfc2xvdCkuICAqcmVjaGVjayByZXBvcnRzIHdo ZXRoZXIgdGhlCisgKiBzY2FuIGtleXMgbXVzdCBiZSByZWNoZWNrZWQgKG9ubHkgbWVhbmluZ2Z1 bCBvbiBhIHRydWUgcmV0dXJuKS4KKyAqCisgKiBPbiBzdWNjZXNzLCByZXNvdXJjZXMgKGxpa2Ug YnVmZmVyIHBpbnMpIGFyZSBsaWtlbHkgdG8gYmUgaGVsZCwgYW5kIHdpbGwgYmUKKyAqIGRyb3Bw ZWQgYnkgYSBmdXR1cmUgY2FsbCBoZXJlIChvciBieSBhIGxhdGVyIGNhbGwgdG8gaGVhcGFtX2lu ZGV4X3NjYW5fZW5kCisgKiB0aHJvdWdoIGluZGV4X2VuZHNjYW4pLgorICoKKyAqIFRoZSBpbmRl eF9vbmx5IHBhcmFtZXRlciBpcyBhIGNvbXBpbGUtdGltZSBjb25zdGFudCBhdCBlYWNoIGNhbGwg c2l0ZSwKKyAqIGFsbG93aW5nIHRoZSBjb21waWxlciB0byBzcGVjaWFsaXplIHRoZSBjb2RlIGZv ciBlYWNoIHZhcmlhbnQuCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBi b29sCitoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LCBib29sIGlu ZGV4X29ubHksCisJCQkJCQkgIGJvb2wgKnJlY2hlY2spCit7CisJSW5kZXhTY2FuSGVhcERhdGEg KmhzY2FuID0gKEluZGV4U2NhbkhlYXBEYXRhICopIHNjYW4tPnhzX3RhYmxlX29wYXF1ZTsKKwli b29sCSAgICpoZWFwX2NvbnRpbnVlID0gJnNjYW4tPnhzX2hlYXBfY29udGludWU7CisJYm9vbAkJ YWxsX3Zpc2libGUgPSBmYWxzZTsKKwlJdGVtUG9pbnRlciB0aWQgPSBOVUxMOworCisJQXNzZXJ0 KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKFJlY2VudFhtaW4pKTsKKwlBc3NlcnQoaW5kZXhfb25seSB8 fCBzY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0ID09IDApOworCisJZm9yICg7OykKKwl7CisJ CWlmICghKmhlYXBfY29udGludWUpCisJCXsKKwkJCS8qIEdldCB0aGUgbmV4dCBUSUQgZnJvbSB0 aGUgaW5kZXggKi8KKwkJCXRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW4sIGRpcmVjdGlvbik7 CisKKwkJCS8qIElmIHdlJ3JlIG91dCBvZiBpbmRleCBlbnRyaWVzLCB3ZSdyZSBkb25lICovCisJ CQlpZiAodGlkID09IE5VTEwpCisJCQkJYnJlYWs7CisKKwkJCS8qIEZvciBpbmRleC1vbmx5IHNj YW5zLCBjaGVjayB0aGUgdmlzaWJpbGl0eSBtYXAgKi8KKwkJCWlmIChpbmRleF9vbmx5KQorCQkJ CWFsbF92aXNpYmxlID0gVk1fQUxMX1ZJU0lCTEUoc2Nhbi0+aGVhcFJlbGF0aW9uLAorCQkJCQkJ CQkJCQkgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAorCQkJCQkJCQkJCQkgJmhzY2Fu LT54c192bWJ1ZmZlcik7CisJCX0KKworCQlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2Fu LT54c19oZWFwdGlkKSk7CisKKwkJaWYgKCFpbmRleF9vbmx5IHx8ICFhbGxfdmlzaWJsZSkKKwkJ eworCQkJYm9vbAkJYWxsX2RlYWQ7CisKKwkJCS8qCisJCQkgKiBQbGFpbiBpbmRleCBzY2FuLCBv ciBpbmRleC1vbmx5IHNjYW4gdGhhdCByZXF1aXJlcyBhIGhlYXAgZmV0Y2gKKwkJCSAqIHRvIHZl cmlmeSBpdGVtJ3MgdmlzaWJpbGl0eQorCQkJICovCisJCQlpZiAoaW5kZXhfb25seSAmJiBzY2Fu LT5pbnN0cnVtZW50KQorCQkJCXNjYW4tPmluc3RydW1lbnQtPm50YWJsZXR1cGxlZmV0Y2hlcysr OworCisJCQlpZiAoIWhlYXBhbV9pbmRleF9oZWFwX2ZldGNoKHNjYW4sIGhzY2FuLAorCQkJCQkJ CQkJCSBpbmRleF9vbmx5ID8gTlVMTCA6IHNsb3QsCisJCQkJCQkJCQkJIGluZGV4X29ubHksIGhl YXBfY29udGludWUsCisJCQkJCQkJCQkJICZhbGxfZGVhZCkpCisJCQl7CisJCQkJLyogTm8gdmlz aWJsZSB0dXBsZSAqLworCQkJCWlmIChhbGxfZGVhZCkKKwkJCQkJaGVhcGFtX2luZGV4X2tpbGxf aXRlbShzY2FuKTsKKworCQkJCS8qCisJCQkJICogSWYgY2FsbGVyIHNldCBhIHZpc2l0ZWQtcGFn ZXMgbGltaXQgKG9ubHkgc2VsZnVuY3MuYydzCisJCQkJICogaW5kZXgtb25seSBzY2FucyBkbyB0 aGlzKSwgZ2l2ZSB1cCBvbmNlIHdlJ3ZlIHZpc2l0ZWQgdG9vCisJCQkJICogbWFueSBkaXN0aW5j dCBoZWFwIHBhZ2VzCisJCQkJICovCisJCQkJaWYgKGluZGV4X29ubHkgJiYgdW5saWtlbHkoc2Nh bi0+eHNfdmlzaXRlZF9wYWdlc19saW1pdCA+IDApICYmCisJCQkJCWhzY2FuLT54c19ibGtzd2l0 Y2hfY291bnQgPiBzY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0KQorCQkJCQlyZXR1cm4gZmFs c2U7CS8qIGdpdmUgdXAgKi8KKworCQkJCWNvbnRpbnVlOwkJLyogdHJ5IG5leHQgaW5kZXggZW50 cnkgKi8KKwkJCX0KKworCQkJLyogRm91bmQgYSB2aXNpYmxlIHR1cGxlLCBzbyBpdHMgSE9UIGNo YWluIGNhbid0IGJlIGFsbC1kZWFkICovCisJCQlBc3NlcnQoIWFsbF9kZWFkKTsKKworCQkJLyoK KwkJCSAqIE9ubHkgTVZDQyBzbmFwc2hvdHMgYXJlIHN1cHBvcnRlZCB3aXRoIHN0YW5kYXJkIGlu ZGV4LW9ubHkKKwkJCSAqIHNjYW5zLCBzbyB0aGVyZSBzaG91bGQgYmUgbm8gbmVlZCB0byBrZWVw IGZvbGxvd2luZyB0aGUgSE9UCisJCQkgKiBjaGFpbiBvbmNlIGEgdmlzaWJsZSBlbnRyeSBoYXMg YmVlbiBmb3VuZC4gIE90aGVyIGNhbGxlcnMKKwkJCSAqIChjdXJyZW50bHkgb25seSBzZWxmdW5j cy5jKSB1c2UgU25hcHNob3ROb25WYWN1dW1hYmxlLCBhbmQgd2FudAorCQkJICogdXMgdG8gYXNz dW1lIHRoYXQganVzdCBoYXZpbmcgb25lIHZpc2libGUgdHVwbGUgaW4gdGhlIGhvdAorCQkJICog Y2hhaW4gaXMgYWx3YXlzIGdvb2QgZW5vdWdoLgorCQkJICovCisJCQlBc3NlcnQoIWluZGV4X29u bHkgfHwKKwkJCQkgICAhKCpoZWFwX2NvbnRpbnVlICYmIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhz X3NuYXBzaG90KSkpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIEluZGV4LW9ubHkg c2NhbiB3aXRoIGFsbC12aXNpYmxlIGl0ZW0uCisJCQkgKgorCQkJICogV2Ugd29uJ3QgYWNjZXNz IHRoZSBoZWFwLCBzbyB3ZSdsbCBuZWVkIHRvIHRha2UgYSBwcmVkaWNhdGUKKwkJCSAqIGxvY2sg ZXhwbGljaXRseSwgYXMgaWYgd2UgaGFkLiAgRm9yIG5vdyB3ZSBkbyB0aGF0IGF0IHBhZ2UKKwkJ CSAqIGxldmVsLgorCQkJICovCisJCQlQcmVkaWNhdGVMb2NrUGFnZShzY2FuLT5oZWFwUmVsYXRp b24sCisJCQkJCQkJICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCQkJICBz Y2FuLT54c19zbmFwc2hvdCk7CisJCX0KKworCQkvKgorCQkgKiBGb3VuZCBhIHR1cGxlIHRvIHJl dHVybi4KKwkJICoKKwkJICogSW5kZXgtb25seSBzY2FucyBmaWxsIGNhbGxlcidzIHNsb3QgZnJv bSB0aGUgaW5kZXggZGF0YSB0aGUgQU0KKwkJICogcmV0dXJuZWQgKGluIHNjYW4tPnhzX2l0dXAg b3IgeHNfaGl0dXApOyBwbGFpbiBpbmRleCBzY2FucyBhbHJlYWR5CisJCSAqIGhhZCBoZWFwYW1f aW5kZXhfaGVhcF9mZXRjaCBzdG9yZSB0aGUgaGVhcCB0dXBsZSB0aGVyZS4KKwkJICovCisJCWlm IChpbmRleF9vbmx5KQorCQkJaGVhcF9maWxsX2lvc19zbG90KHNjYW4sIHNsb3QpOworCisJCSpy ZWNoZWNrID0gc2Nhbi0+eHNfcmVjaGVjazsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJu IGZhbHNlOworfQorCisvKgorICogR2V0IHRoZSBzY2FuJ3MgbmV4dCBoZWFwIHR1cGxlLgorICoK KyAqIFRoZSByZXN1bHQgaXMgYSB2aXNpYmxlIGhlYXAgdHVwbGUgYXNzb2NpYXRlZCB3aXRoIHRo ZSBpbmRleCBUSUQgbW9zdAorICogcmVjZW50bHkgZmV0Y2hlZCBieSBvdXIgY2FsbGVyIGluIHNj YW4tPnhzX2hlYXB0aWQsIG9yIE5VTEwgaWYgbm8gbW9yZQorICogbWF0Y2hpbmcgdHVwbGVzIGV4 aXN0LiAgKFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIG1hdGNoaW5nIHR1cGxlIGJlY2F1c2UK KyAqIG9mIEhPVCBjaGFpbnMsIGFsdGhvdWdoIHdoZW4gdXNpbmcgYW4gTVZDQyBzbmFwc2hvdCBp dCBzaG91bGQgYmUgaW1wb3NzaWJsZQorICogZm9yIG1vcmUgdGhhbiBvbmUgc3VjaCB0dXBsZSB0 byBleGlzdC4pCisgKgorICogT24gc3VjY2VzcywgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBo ZWFwIHR1cCBpcyBwaW5uZWQuICBUaGUgcGluIG11c3QgYmUKKyAqIGRyb3BwZWQgZWxzZXdoZXJl LgorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbAoraGVhcGFtX2lu ZGV4X2hlYXBfZmV0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5IZWFwRGF0YSAqaHNj YW4sCisJCQkJCQlUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCBpbmRleF9vbmx5LAorCQkJCQkJ Ym9vbCAqaGVhcF9jb250aW51ZSwgYm9vbCAqYWxsX2RlYWQpCit7CisJUmVsYXRpb24JcmVsID0g c2Nhbi0+aGVhcFJlbGF0aW9uOworCUl0ZW1Qb2ludGVyIHRpZCA9ICZzY2FuLT54c19oZWFwdGlk OworCVNuYXBzaG90CXNuYXBzaG90ID0gc2Nhbi0+eHNfc25hcHNob3Q7CisJSGVhcFR1cGxlRGF0 YSBpZHh0dXBkYXRhOworCUhlYXBUdXBsZQloZWFwVHVwbGU7CiAJYm9vbAkJZ290X2hlYXBfdHVw bGU7CiAKLQlBc3NlcnQoVFRTX0lTX0JVRkZFUlRVUExFKHNsb3QpKTsKKwkqYWxsX2RlYWQgPSBm YWxzZTsKKworCWlmICghaW5kZXhfb25seSkKKwl7CisJCS8qIFBsYWluIGluZGV4IHNjYW5zIGhh dmUgdXMgc3RvcmUgZmV0Y2hlZCB0dXBsZSBpbiB0aGVpciBzbG90ICovCisJCUJ1ZmZlckhlYXBU dXBsZVRhYmxlU2xvdCAqYnNsb3QgPSAoQnVmZmVySGVhcFR1cGxlVGFibGVTbG90ICopIHNsb3Q7 CisKKwkJQXNzZXJ0KFRUU19JU19CVUZGRVJUVVBMRShzbG90KSk7CisJCWhlYXBUdXBsZSA9ICZi c2xvdC0+YmFzZS50dXBkYXRhOworCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBJbmRleC1vbmx5 IHNjYW5zIGp1c3QgbmVlZCB1cyB0byB2ZXJpZnkgdHVwbGUgdmlzaWJpbGl0eSwgc28gZG9uJ3QK KwkJICogcGFzcyB1cyBhIHNsb3QKKwkJICovCisJCXBnX2Fzc3VtZShzbG90ID09IE5VTEwpOwor CQloZWFwVHVwbGUgPSAmaWR4dHVwZGF0YTsKKwl9CiAKIAkvKiBXZSBjYW4gc2tpcCB0aGUgYnVm ZmVyLXN3aXRjaGluZyBsb2dpYyBpZiB3ZSdyZSBvbiB0aGUgc2FtZSBwYWdlLiAqLwogCWlmICho c2Nhbi0+eHNfYmxrICE9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSkKQEAgLTI0OSwx NyArNjA0LDIxIEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRh YmxlRGF0YSAqc2NhbiwKIAkJLyogUmVtZW1iZXIgdGhpcyBidWZmZXIncyBibG9jayBudW1iZXIg Zm9yIG5leHQgdGltZSAqLwogCQloc2Nhbi0+eHNfYmxrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051 bWJlcih0aWQpOwogCisJCS8qCisJCSAqIFdlJ3JlIHN3aXRjaGluZyB0byBhIG5ldyBoZWFwIGJs b2NrLCBzbyBjb3VudCBpdAorCQkgKi8KKwkJaHNjYW4tPnhzX2Jsa3N3aXRjaF9jb3VudCsrOwor CiAJCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKIAkJCVJlbGVhc2VCdWZmZXIo aHNjYW4tPnhzX2NidWYpOwogCi0JCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihoc2Nhbi0+ eHNfYmFzZS5yZWwsIGhzY2FuLT54c19ibGspOworCQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZm ZXIocmVsLCBoc2Nhbi0+eHNfYmxrKTsKIAogCQkvKgogCQkgKiBQcnVuZSBwYWdlIHdoZW4gaXQg aXMgcGlubmVkIGZvciB0aGUgZmlyc3QgdGltZQogCQkgKi8KLQkJaGVhcF9wYWdlX3BydW5lX29w dChoc2Nhbi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54c19jYnVmLAotCQkJCQkJCSZoc2Nhbi0+eHNf dm1idWZmZXIsCi0JCQkJCQkJaHNjYW4tPnhzX2Jhc2UuZmxhZ3MgJiBTT19ISU5UX1JFTF9SRUFE X09OTFkpOworCQloZWFwX3BhZ2VfcHJ1bmVfb3B0KHJlbCwgaHNjYW4tPnhzX2NidWYsICZoc2Nh bi0+eHNfdm1idWZmZXIsCisJCQkJCQkJaHNjYW4tPnhzX3JlYWRvbmx5KTsKIAl9CiAKIAlBc3Nl cnQoQnVmZmVyR2V0QmxvY2tOdW1iZXIoaHNjYW4tPnhzX2NidWYpID09IGhzY2FuLT54c19ibGsp OwpAQCAtMjY4LDI1ICs2MjcsNDEgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJ bmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCS8qIE9idGFpbiBzaGFyZS1sb2NrIG9uIHRoZSBi dWZmZXIgc28gd2UgY2FuIGV4YW1pbmUgdmlzaWJpbGl0eSAqLwogCUxvY2tCdWZmZXIoaHNjYW4t PnhzX2NidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKIAlnb3RfaGVhcF90dXBsZSA9IGhlYXBfaG90 X3NlYXJjaF9idWZmZXIodGlkLAotCQkJCQkJCQkJCQloc2Nhbi0+eHNfYmFzZS5yZWwsCisJCQkJ CQkJCQkJCXJlbCwKIAkJCQkJCQkJCQkJaHNjYW4tPnhzX2NidWYsCiAJCQkJCQkJCQkJCXNuYXBz aG90LAotCQkJCQkJCQkJCQkmYnNsb3QtPmJhc2UudHVwZGF0YSwKKwkJCQkJCQkJCQkJaGVhcFR1 cGxlLAogCQkJCQkJCQkJCQlhbGxfZGVhZCwKIAkJCQkJCQkJCQkJISpoZWFwX2NvbnRpbnVlKTsK LQlic2xvdC0+YmFzZS50dXBkYXRhLnRfc2VsZiA9ICp0aWQ7CisJaGVhcFR1cGxlLT50X3NlbGYg PSAqdGlkOwogCUxvY2tCdWZmZXIoaHNjYW4tPnhzX2NidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7 CiAKIAlpZiAoZ290X2hlYXBfdHVwbGUpCiAJewotCQkvKgotCQkgKiBPbmx5IGluIGEgbm9uLU1W Q0Mgc25hcHNob3QgY2FuIG1vcmUgdGhhbiBvbmUgbWVtYmVyIG9mIHRoZSBIT1QKLQkJICogY2hh aW4gYmUgdmlzaWJsZS4KLQkJICovCi0JCSpoZWFwX2NvbnRpbnVlID0gIUlzTVZDQ0xpa2VTbmFw c2hvdChzbmFwc2hvdCk7CisJCWlmICghaW5kZXhfb25seSkKKwkJeworCQkJLyoKKwkJCSAqIE9u bHkgaW4gYSBub24tTVZDQyBzbmFwc2hvdCBwbGFpbiBzY2FuIGNhbiBtb3JlIHRoYW4gb25lIG1l bWJlcgorCQkJICogb2YgdGhlIEhPVCBjaGFpbiBiZSB2aXNpYmxlCisJCQkgKi8KKwkJCSpoZWFw X2NvbnRpbnVlID0gIUlzTVZDQ0xpa2VTbmFwc2hvdChzbmFwc2hvdCk7CiAKLQkJc2xvdC0+dHRz X3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChzY2FuLT5yZWwpOwotCQlFeGVjU3RvcmVCdWZm ZXJIZWFwVHVwbGUoJmJzbG90LT5iYXNlLnR1cGRhdGEsIHNsb3QsIGhzY2FuLT54c19jYnVmKTsK KwkJCXNsb3QtPnR0c190YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKKwkJCUV4ZWNT dG9yZUJ1ZmZlckhlYXBUdXBsZShoZWFwVHVwbGUsIHNsb3QsIGhzY2FuLT54c19jYnVmKTsKKwkJ fQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBJbmRleC1vbmx5IHNjYW5zIHVuY29uZGl0aW9u YWxseSBhc3N1bWUgdGhhdCB0aGUgZmlyc3QgbWVtYmVyCisJCQkgKiBvZiBhIEhPVCBjaGFpbiBz aG91bGQgYmUgY29uc2lkZXJlZCB2aXNpYmxlLiAgVGhpcyBpcyB0aGUKKwkJCSAqIG5vcm1hbCBN VkNDIHNuYXBzaG90IGJlaGF2aW9yLCBhbmQgd29ya3Mgd2VsbCBlbm91Z2ggZm9yCisJCQkgKiBu b24tTVZDQyBpbmRleC1vbmx5IHNjYW5zIChjdXJyZW50bHkgdGhlIG9ubHkgY29yZSBjb2RlIHRo YXQKKwkJCSAqIHVzZXMgYSBub24tTVZDQyBpbmRleC1vbmx5IHNjYW4gaXMgc2VsZnVuY3MuYyku CisJCQkgKi8KKwkJCSpoZWFwX2NvbnRpbnVlID0gZmFsc2U7CisJCX0KKworCQlwZ3N0YXRfY291 bnRfaGVhcF9mZXRjaChzY2FuLT5pbmRleFJlbGF0aW9uKTsKIAl9CiAJZWxzZQogCXsKQEAgLTI5 NiwzICs2NzEsMjMgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNo VGFibGVEYXRhICpzY2FuLAogCiAJcmV0dXJuIGdvdF9oZWFwX3R1cGxlOwogfQorCisvKgorICog Q2FsbGVkIHdoZW4gd2Ugc2Nhbm5lZCBhIHdob2xlIEhPVCBjaGFpbiBhbmQgZm91bmQgb25seSBk ZWFkIHR1cGxlczoKKyAqIGFycmFuZ2UgZm9yIHRoZSBpbmRleCBBTSB0byBraWxsIGl0cyBlbnRy eSBmb3IgdGhhdCBUSUQuICBXZSBkbyBub3QgZG8gdGhpcworICogd2hlbiBpbiByZWNvdmVyeSBi ZWNhdXNlIGl0IG1heSB2aW9sYXRlIE1WQ0MgdG8gZG8gc28uICBTZWUgY29tbWVudHMgaW4KKyAq IFJlbGF0aW9uR2V0SW5kZXhTY2FuKCkuCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlz X2lubGluZSB2b2lkCitoZWFwYW1faW5kZXhfa2lsbF9pdGVtKEluZGV4U2NhbkRlc2Mgc2NhbikK K3sKKwlpZiAoc2Nhbi0+eGFjdFN0YXJ0ZWRJblJlY292ZXJ5KQorCQlyZXR1cm47CisKKwkvKgor CSAqIFRlbGwgYW1nZXR0dXBsZS1iYXNlZCBpbmRleCBBTSB0byBraWxsIGl0cyBlbnRyeSBmb3Ig dGhhdCBUSUQuICBUaGUKKwkgKiBuZXh0IGluZGV4X2dldG5leHRfdGlkIGNhbGwgd2lsbCBwYXNz IHRoYXQgYWxvbmcgdG8gdGhlIGluZGV4IEFNLAorCSAqIGJlZm9yZSB1bnNldHRpbmcgdGhlIGZs YWcgYWdhaW4uCisJICovCisJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IHRydWU7Cit9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMKaW5kZXggNGZkNDcwNzAyLi40YmE5ZjQ4 ZTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMKQEAgLTMxMyw3ICsz MTMsMzIgQEAgdmlzaWJpbGl0eW1hcF9zZXQoQmxvY2tOdW1iZXIgaGVhcEJsaywKICAqIHNpbmNl IHdlIGRvbid0IGxvY2sgdGhlIHZpc2liaWxpdHkgbWFwIHBhZ2UgZWl0aGVyLCBpdCdzIGV2ZW4g cG9zc2libGUgdGhhdAogICogc29tZW9uZSBlbHNlIGNvdWxkIGhhdmUgY2hhbmdlZCB0aGUgYml0 IGp1c3QgYmVmb3JlIHdlIGxvb2sgYXQgaXQsIGJ1dCB5ZXQKICAqIHdlIG1pZ2h0IHNlZSB0aGUg b2xkIHZhbHVlLiAgSXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGRlYWwgd2l0 aAotICogYWxsIGNvbmN1cnJlbmN5IGlzc3VlcyEKKyAqIGFsbCBjb25jdXJyZW5jeSBpc3N1ZXMh ICBJbiBwcmFjdGljZSBpdCBjYW4ndCBiZSBzdGFsZSBlbm91Z2ggdG8gbWF0dGVyIGZvcgorICog dGhlIHByaW1hcnkgdXNlIGNhc2U6IGluZGV4LW9ubHkgc2NhbnMgdGhhdCBjaGVjayB3aGV0aGVy IGEgaGVhcCBmZXRjaCBjYW4KKyAqIGJlIHNraXBwZWQuCisgKgorICogVGhlIGFyZ3VtZW50IGZv ciB3aHkgaXQgY2FuJ3QgYmUgc3RhbGUgZW5vdWdoIHRvIG1hdHRlciBmb3IgdGhlIHByaW1hcnkg dXNlCisgKiBjYXNlIGlzIGFzIGZvbGxvd3M6CisgKgorICogSW5zZXJ0czogd2UgbmVlZCB0byBk ZXRlY3QgdGhhdCBhIFZNIGJpdCB3YXMgY2xlYXJlZCBieSBhbiBpbnNlcnQgcmlnaHQKKyAqIGF3 YXksIGJlY2F1c2UgdGhlIG5ldyB0dXBsZSBpcyBwcmVzZW50IGluIHRoZSBpbmRleCBidXQgbm90 IHlldCB2aXNpYmxlLgorICogUmVhZGluZyB0aGUgVElEIGZyb20gdGhlIGluZGV4IHBhZ2UgKHVu ZGVyIGEgc2hhcmVkIGxvY2sgb24gdGhlIGluZGV4CisgKiBidWZmZXIpIGlzIHNlcmlhbGl6ZWQg d2l0aCB0aGUgaW5zZXJ0aW9uIG9mIHRoZSBUSUQgaW50byB0aGUgaW5kZXggKHVuZGVyCisgKiBh biBleGNsdXNpdmUgbG9jayBvbiB0aGUgc2FtZSBpbmRleCBidWZmZXIpLiAgQmVjYXVzZSB0aGUg Vk0gYml0IGlzIGNsZWFyZWQKKyAqIGJlZm9yZSB0aGUgaW5kZXggaXMgdXBkYXRlZCwgYW5kIGxv Y2tpbmcvdW5sb2NraW5nIG9mIHRoZSBpbmRleCBwYWdlIGFjdHMKKyAqIGFzIGEgZnVsbCBtZW1v cnkgYmFycmllciwgd2UgYXJlIHN1cmUgdG8gc2VlIHRoZSBjbGVhcmVkIGJpdCB3aGVuZXZlciB3 ZQorICogc2VlIGEgcmVjZW50bHktaW5zZXJ0ZWQgVElELgorICoKKyAqIERlbGV0ZXM6IHRoZSBj bGVhcmluZyBvZiB0aGUgVk0gYml0IGJ5IGEgZGVsZXRlIGlzIE5PVCBzZXJpYWxpemVkIHdpdGgg dGhlCisgKiBpbmRleCBwYWdlIGFjY2VzcywgYmVjYXVzZSBkZWxldGVzIGRvIG5vdCB1cGRhdGUg dGhlIGluZGV4IHBhZ2UgKG9ubHkKKyAqIFZBQ1VVTSByZW1vdmVzIHRoZSBpbmRleCBUSUQpLiAg U28gd2UgbWF5IHNlZSBhIHNpZ25pZmljYW50bHkgc3RhbGUgdmFsdWUuCisgKiBIb3dldmVyLCB3 ZSBkb24ndCBuZWVkIHRvIGRldGVjdCB0aGUgZGVsZXRlIHJpZ2h0IGF3YXksIGJlY2F1c2UgdGhl IHR1cGxlCisgKiByZW1haW5zIHZpc2libGUgdW50aWwgdGhlIGRlbGV0aW5nIHRyYW5zYWN0aW9u IGNvbW1pdHMgb3IgdGhlIHN0YXRlbWVudAorICogZW5kcyAoaWYgaXQncyBvdXIgb3duIHRyYW5z YWN0aW9uKS4gIEluIGVpdGhlciBjYXNlLCB0aGUgbG9jayBvbiB0aGUgVk0KKyAqIGJ1ZmZlciB3 aWxsIGhhdmUgYmVlbiByZWxlYXNlZCAoYWN0aW5nIGFzIGEgd3JpdGUgYmFycmllcikgYWZ0ZXIg Y2xlYXJpbmcKKyAqIHRoZSBiaXQuICBBbmQgZm9yIHVzIHRvIGhhdmUgYSBzbmFwc2hvdCB0aGF0 IGluY2x1ZGVzIHRoZSBkZWxldGluZworICogdHJhbnNhY3Rpb24gKG1ha2luZyB0aGUgdHVwbGUg aW52aXNpYmxlKSwgd2UgbXVzdCBoYXZlIGFjcXVpcmVkCisgKiBQcm9jQXJyYXlMb2NrIGFmdGVy IHRoYXQgdGltZSwgYWN0aW5nIGFzIGEgcmVhZCBiYXJyaWVyLgogICovCiB1aW50OAogdmlzaWJp bGl0eW1hcF9nZXRfc3RhdHVzKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgaGVhcEJsaywgQnVm ZmVyICp2bWJ1ZikKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKaW5kZXggMTQwODk4OWM1Li4xNTEy NDM4ZDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCkBAIC04NCw3ICs4NCw3IEBAIFJlbGF0 aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sIGludCBua2V5cywgaW50IG5v cmRlcmJ5cykKIAlzY2FuID0gcGFsbG9jX29iamVjdChJbmRleFNjYW5EZXNjRGF0YSk7CiAKIAlz Y2FuLT5oZWFwUmVsYXRpb24gPSBOVUxMOwkvKiBtYXkgYmUgc2V0IGxhdGVyICovCi0Jc2Nhbi0+ eHNfaGVhcGZldGNoID0gTlVMTDsKKwlzY2FuLT54c190YWJsZV9vcGFxdWUgPSBOVUxMOwogCXNj YW4tPmluZGV4UmVsYXRpb24gPSBpbmRleFJlbGF0aW9uOwogCXNjYW4tPnhzX3NuYXBzaG90ID0g SW52YWxpZFNuYXBzaG90OwkvKiBjYWxsZXIgbXVzdCBpbml0aWFsaXplIHRoaXMgKi8KIAlzY2Fu LT5udW1iZXJPZktleXMgPSBua2V5czsKQEAgLTEyNiw2ICsxMjYsMTMgQEAgUmVsYXRpb25HZXRJ bmRleFNjYW4oUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlz KQogCXNjYW4tPnhzX2hpdHVwID0gTlVMTDsKIAlzY2FuLT54c19oaXR1cGRlc2MgPSBOVUxMOwog CisJc2Nhbi0+eHNfZ2V0bmV4dF9zbG90ID0gTlVMTDsKKworCXNjYW4tPnhzX25hbWVfY3N0cmlu Z19hdHRudW1zID0gTlVMTDsKKwlzY2FuLT54c19uYW1lX2NzdHJpbmdfY291bnQgPSAwOworCisJ c2Nhbi0+eHNfdmlzaXRlZF9wYWdlc19saW1pdCA9IDA7CisKIAlyZXR1cm4gc2NhbjsKIH0KIApA QCAtMTQ4LDYgKzE1NSw4IEBAIEluZGV4U2NhbkVuZChJbmRleFNjYW5EZXNjIHNjYW4pCiAJCXBm cmVlKHNjYW4tPmtleURhdGEpOwogCWlmIChzY2FuLT5vcmRlckJ5RGF0YSAhPSBOVUxMKQogCQlw ZnJlZShzY2FuLT5vcmRlckJ5RGF0YSk7CisJaWYgKHNjYW4tPnhzX25hbWVfY3N0cmluZ19hdHRu dW1zICE9IE5VTEwpCisJCXBmcmVlKHNjYW4tPnhzX25hbWVfY3N0cmluZ19hdHRudW1zKTsKIAog CXBmcmVlKHNjYW4pOwogfQpAQCAtNDU0LDcgKzQ2Myw3IEBAIHN5c3RhYmxlX2JlZ2luc2NhbihS ZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJZWxvZyhFUlJPUiwgImNvbHVtbiBpcyBub3QgaW4g aW5kZXgiKTsKIAkJfQogCi0JCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBS ZWxhdGlvbiwgaXJlbCwKKwkJc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJl bGF0aW9uLCBpcmVsLCBmYWxzZSwKIAkJCQkJCQkJCQkgc25hcHNob3QsIE5VTEwsIG5rZXlzLCAw LAogCQkJCQkJCQkJCSBTT19OT05FKTsKIAkJaW5kZXhfcmVzY2FuKHN5c3NjYW4tPmlzY2FuLCBp ZHhrZXksIG5rZXlzLCBOVUxMLCAwKTsKQEAgLTUxOCw3ICs1MjcsMTAgQEAgc3lzdGFibGVfZ2V0 bmV4dChTeXNTY2FuRGVzYyBzeXNzY2FuKQogCiAJaWYgKHN5c3NjYW4tPmlyZWwpCiAJewotCQlp ZiAoaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlv biwgc3lzc2Nhbi0+c2xvdCkpCisJCWJvb2wJCXJlY2hlY2s7CisKKwkJaWYgKHRhYmxlX2luZGV4 X2dldG5leHRfc2xvdChzeXNzY2FuLT5pc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sCisJCQkJ CQkJCQkgc3lzc2Nhbi0+c2xvdCwgJnJlY2hlY2spKQogCQl7CiAJCQlib29sCQlzaG91bGRGcmVl OwogCkBAIC01MzMsNyArNTQ1LDcgQEAgc3lzdGFibGVfZ2V0bmV4dChTeXNTY2FuRGVzYyBzeXNz Y2FuKQogCQkJICogYmVjYXVzZSB3ZSBzdGlsbCB3b3VsZG4ndCBuZWVkIHRvIHN1cHBvcnQgaW5k ZXhlcyBvbgogCQkJICogZXhwcmVzc2lvbnMuCiAJCQkgKi8KLQkJCWlmIChzeXNzY2FuLT5pc2Nh bi0+eHNfcmVjaGVjaykKKwkJCWlmIChyZWNoZWNrKQogCQkJCWVsb2coRVJST1IsICJzeXN0ZW0g Y2F0YWxvZyBzY2FucyB3aXRoIGxvc3N5IGluZGV4IGNvbmRpdGlvbnMgYXJlIG5vdCBpbXBsZW1l bnRlZCIpOwogCQl9CiAJfQpAQCAtNjQzLDcgKzY1NSw3IEBAIHN5c3RhYmxlX2VuZHNjYW4oU3lz U2NhbkRlc2Mgc3lzc2NhbikKICAqIHdlIGNvdWxkIGRvIGEgaGVhcHNjYW4gYW5kIHNvcnQsIGJ1 dCB0aGUgdXNlcyBhcmUgaW4gcGxhY2VzIHRoYXQKICAqIHByb2JhYmx5IGRvbid0IG5lZWQgdG8g c3RpbGwgd29yayB3aXRoIGNvcnJ1cHRlZCBjYXRhbG9nIGluZGV4ZXMuKQogICogRm9yIHRoZSBt b21lbnQsIHRoZXJlZm9yZSwgdGhlc2UgZnVuY3Rpb25zIGFyZSBtZXJlbHkgdGhlIHRoaW5lc3Qg b2YKLSAqIHdyYXBwZXJzIGFyb3VuZCBpbmRleF9iZWdpbnNjYW4vaW5kZXhfZ2V0bmV4dF9zbG90 LiAgVGhlIG1haW4gcmVhc29uIGZvcgorICogd3JhcHBlcnMgYXJvdW5kIGluZGV4X2JlZ2luc2Nh bi90YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QuICBUaGUgbWFpbiByZWFzb24gZm9yCiAgKiB0aGVp ciBleGlzdGVuY2UgaXMgdG8gY2VudHJhbGl6ZSBwb3NzaWJsZSBmdXR1cmUgc3VwcG9ydCBvZiBs b3NzeSBvcGVyYXRvcnMKICAqIGluIGNhdGFsb2cgc2NhbnMuCiAgKi8KQEAgLTcxNiw3ICs3Mjgs NyBAQCBzeXN0YWJsZV9iZWdpbnNjYW5fb3JkZXJlZChSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJ aWYgKFRyYW5zYWN0aW9uSWRJc1ZhbGlkKENoZWNrWGlkQWxpdmUpKQogCQlic3lzc2NhbiA9IHRy dWU7CiAKLQlzeXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGlu ZGV4UmVsYXRpb24sCisJc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0 aW9uLCBpbmRleFJlbGF0aW9uLCBmYWxzZSwKIAkJCQkJCQkJCSBzbmFwc2hvdCwgTlVMTCwgbmtl eXMsIDAsCiAJCQkJCQkJCQkgU09fTk9ORSk7CiAJaW5kZXhfcmVzY2FuKHN5c3NjYW4tPmlzY2Fu LCBpZHhrZXksIG5rZXlzLCBOVUxMLCAwKTsKQEAgLTczNCwxMyArNzQ2LDE1IEBAIEhlYXBUdXBs ZQogc3lzdGFibGVfZ2V0bmV4dF9vcmRlcmVkKFN5c1NjYW5EZXNjIHN5c3NjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uKQogewogCUhlYXBUdXBsZQlodHVwID0gTlVMTDsKKwlib29sCQlyZWNo ZWNrOwogCiAJQXNzZXJ0KHN5c3NjYW4tPmlyZWwpOwotCWlmIChpbmRleF9nZXRuZXh0X3Nsb3Qo c3lzc2Nhbi0+aXNjYW4sIGRpcmVjdGlvbiwgc3lzc2Nhbi0+c2xvdCkpCisJaWYgKHRhYmxlX2lu ZGV4X2dldG5leHRfc2xvdChzeXNzY2FuLT5pc2NhbiwgZGlyZWN0aW9uLCBzeXNzY2FuLT5zbG90 LAorCQkJCQkJCQkgJnJlY2hlY2spKQogCQlodHVwID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZShz eXNzY2FuLT5zbG90LCBmYWxzZSwgTlVMTCk7CiAKIAkvKiBTZWUgbm90ZXMgaW4gc3lzdGFibGVf Z2V0bmV4dCAqLwotCWlmIChodHVwICYmIHN5c3NjYW4tPmlzY2FuLT54c19yZWNoZWNrKQorCWlm IChodHVwICYmIHJlY2hlY2spCiAJCWVsb2coRVJST1IsICJzeXN0ZW0gY2F0YWxvZyBzY2FucyB3 aXRoIGxvc3N5IGluZGV4IGNvbmRpdGlvbnMgYXJlIG5vdCBpbXBsZW1lbnRlZCIpOwogCiAJLyoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCmluZGV4IDc5NjdlOTM5OC4uYWEwZDRiMTQzIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKQEAgLTI0LDkgKzI0LDcgQEAKICAqCQlpbmRl eF9wYXJhbGxlbHNjYW5faW5pdGlhbGl6ZSAtIGluaXRpYWxpemUgcGFyYWxsZWwgc2NhbgogICoJ CWluZGV4X3BhcmFsbGVscmVzY2FuICAtIChyZSlzdGFydCBhIHBhcmFsbGVsIHNjYW4gb2YgYW4g aW5kZXgKICAqCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwgLSBqb2luIHBhcmFsbGVsIGluZGV4 IHNjYW4KLSAqCQlpbmRleF9nZXRuZXh0X3RpZAktIGdldCB0aGUgbmV4dCBUSUQgZnJvbSBhIHNj YW4KLSAqCQlpbmRleF9mZXRjaF9oZWFwCQktIGdldCB0aGUgc2NhbidzIG5leHQgaGVhcCB0dXBs ZQotICoJCWluZGV4X2dldG5leHRfc2xvdAktIGdldCB0aGUgbmV4dCB0dXBsZSBmcm9tIGEgc2Nh bgorICoJCWluZGV4X2dldG5leHRfdGlkCS0gYW1nZXR0dXBsZSB0YWJsZSBBTSBoZWxwZXIgcm91 dGluZQogICoJCWluZGV4X2dldGJpdG1hcCAtIGdldCBhbGwgdHVwbGVzIGZyb20gYSBzY2FuCiAg KgkJaW5kZXhfYnVsa19kZWxldGUJLSBidWxrIGRlbGV0aW9uIG9mIGluZGV4IHR1cGxlcwogICoJ CWluZGV4X3ZhY3V1bV9jbGVhbnVwCS0gcG9zdC1kZWxldGlvbiBjbGVhbnVwIG9mIGFuIGluZGV4 CkBAIC0xMDUsOSArMTAzLDE2IEBAIGRvIHsgXAogCQkJIENwcEFzU3RyaW5nKHBuYW1lKSwgUmVs YXRpb25HZXRSZWxhdGlvbk5hbWUoc2Nhbi0+aW5kZXhSZWxhdGlvbikpOyBcCiB9IHdoaWxlKDAp CiAKLXN0YXRpYyBJbmRleFNjYW5EZXNjIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlv biBpbmRleFJlbGF0aW9uLAotCQkJCQkJCQkJCQkgIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywg U25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkJCQkJCSAgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBz Y2FuLCBib29sIHRlbXBfc25hcCk7CitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUg SW5kZXhTY2FuRGVzYyBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoUmVsYXRpb24gaW5kZXhSZWxh dGlvbiwKKwkJCQkJCQkJCQkJCQkJCQkJCSBSZWxhdGlvbiBoZWFwUmVsYXRpb24sCisJCQkJCQkJ CQkJCQkJCQkJCQkgaW50IG5rZXlzLAorCQkJCQkJCQkJCQkJCQkJCQkJIGludCBub3JkZXJieXMs CisJCQkJCQkJCQkJCQkJCQkJCQkgU25hcHNob3Qgc25hcHNob3QsCisJCQkJCQkJCQkJCQkJCQkJ CQkgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuLAorCQkJCQkJCQkJCQkJCQkJCQkJIEluZGV4 U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKKwkJCQkJCQkJCQkJCQkJCQkJCSBib29s IGluZGV4X29ubHlfc2NhbiwKKwkJCQkJCQkJCQkJCQkJCQkJCSBib29sIHRlbXBfc25hcCwKKwkJ CQkJCQkJCQkJCQkJCQkJCSB1aW50MzIgZmxhZ3MpOwogc3RhdGljIGlubGluZSB2b2lkIHZhbGlk YXRlX3JlbGF0aW9uX2FzX2luZGV4KFJlbGF0aW9uIHIpOwogCiAKQEAgLTI1NiwxMyArMjYxLDEy IEBAIGluZGV4X2luc2VydF9jbGVhbnVwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiBJbmRleFNj YW5EZXNjCiBpbmRleF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCVJlbGF0 aW9uIGluZGV4UmVsYXRpb24sCisJCQkJYm9vbCBpbmRleF9vbmx5X3NjYW4sCiAJCQkJU25hcHNo b3Qgc25hcHNob3QsCiAJCQkJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAog CQkJCWludCBua2V5cywgaW50IG5vcmRlcmJ5cywKIAkJCQl1aW50MzIgZmxhZ3MpCiB7Ci0JSW5k ZXhTY2FuRGVzYyBzY2FuOwotCiAJQXNzZXJ0KHNuYXBzaG90ICE9IEludmFsaWRTbmFwc2hvdCk7 CiAKIAkvKiBDaGVjayB0aGF0IGEgaGlzdG9yaWMgc25hcHNob3QgaXMgbm90IHVzZWQgZm9yIG5v bi1jYXRhbG9nIHRhYmxlcyAqLwpAQCAtMjc1LDIwICsyNzksMTAgQEAgaW5kZXhfYmVnaW5zY2Fu KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGhl YXBSZWxhdGlvbikpKSk7CiAJfQogCi0Jc2NhbiA9IGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChp bmRleFJlbGF0aW9uLCBua2V5cywgbm9yZGVyYnlzLCBzbmFwc2hvdCwgTlVMTCwgZmFsc2UpOwot Ci0JLyoKLQkgKiBTYXZlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBpbnRvIHRoZSBzY2FuZGVzYy4g IEV2ZXJ5dGhpbmcgZWxzZSB3YXMgc2V0Ci0JICogdXAgYnkgUmVsYXRpb25HZXRJbmRleFNjYW4u Ci0JICovCi0Jc2Nhbi0+aGVhcFJlbGF0aW9uID0gaGVhcFJlbGF0aW9uOwotCXNjYW4tPnhzX3Nu YXBzaG90ID0gc25hcHNob3Q7Ci0Jc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7Ci0KLQkv KiBwcmVwYXJlIHRvIGZldGNoIGluZGV4IG1hdGNoZXMgZnJvbSB0YWJsZSAqLwotCXNjYW4tPnhz X2hlYXBmZXRjaCA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKGhlYXBSZWxhdGlvbiwgZmxhZ3Mp OwotCi0JcmV0dXJuIHNjYW47CisJcmV0dXJuIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChpbmRl eFJlbGF0aW9uLCBoZWFwUmVsYXRpb24sCisJCQkJCQkJCQlua2V5cywgbm9yZGVyYnlzLAorCQkJ CQkJCQkJc25hcHNob3QsIE5VTEwsIGluc3RydW1lbnQsCisJCQkJCQkJCQlpbmRleF9vbmx5X3Nj YW4sIGZhbHNlLCBmbGFncyk7CiB9CiAKIC8qCkBAIC0zMDMsMjkgKzI5NywyNCBAQCBpbmRleF9i ZWdpbnNjYW5fYml0bWFwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAJCQkJCSAgIEluZGV4U2Nh bkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJICAgaW50IG5rZXlzKQogewotCUlu ZGV4U2NhbkRlc2Mgc2NhbjsKLQogCUFzc2VydChzbmFwc2hvdCAhPSBJbnZhbGlkU25hcHNob3Qp OworCUFzc2VydChJc01WQ0NMaWtlU25hcHNob3Qoc25hcHNob3QpKTsKIAotCXNjYW4gPSBpbmRl eF9iZWdpbnNjYW5faW50ZXJuYWwoaW5kZXhSZWxhdGlvbiwgbmtleXMsIDAsIHNuYXBzaG90LCBO VUxMLCBmYWxzZSk7Ci0KLQkvKgotCSAqIFNhdmUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGludG8g dGhlIHNjYW5kZXNjLiAgRXZlcnl0aGluZyBlbHNlIHdhcyBzZXQKLQkgKiB1cCBieSBSZWxhdGlv bkdldEluZGV4U2Nhbi4KLQkgKi8KLQlzY2FuLT54c19zbmFwc2hvdCA9IHNuYXBzaG90OwotCXNj YW4tPmluc3RydW1lbnQgPSBpbnN0cnVtZW50OwotCi0JcmV0dXJuIHNjYW47CisJcmV0dXJuIGlu ZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChpbmRleFJlbGF0aW9uLCBOVUxMLCBua2V5cywgMCwgc25h cHNob3QsCisJCQkJCQkJCQlOVUxMLCBpbnN0cnVtZW50LCBmYWxzZSwgZmFsc2UsIFNPX05PTkUp OwogfQogCiAvKgogICogaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsIC0tLSBjb21tb24gY29kZSBm b3IgaW5kZXhfYmVnaW5zY2FuIHZhcmlhbnRzCisgKgorICogV2hlbiBoZWFwUmVsYXRpb24gaXMg bm90IE5VTEwsIGFsc28gaW5pdGlhbGl6ZXMgdGFibGUgQU0gaW5kZXggc2NhbiBzdGF0ZS4KICAq Lwotc3RhdGljIEluZGV4U2NhbkRlc2MKLWluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlv biBpbmRleFJlbGF0aW9uLAorc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIEluZGV4 U2NhbkRlc2MKK2luZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9u LCBSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJCQkgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlz LCBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCSBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4s IGJvb2wgdGVtcF9zbmFwKQorCQkJCQkJIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwKKwkJ CQkJCSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCisJCQkJCQkgYm9vbCBp bmRleF9vbmx5X3NjYW4sIGJvb2wgdGVtcF9zbmFwLCB1aW50MzIgZmxhZ3MpCiB7CiAJSW5kZXhT Y2FuRGVzYyBzY2FuOwogCkBAIC0zNDksNiArMzM4LDYyIEBAIGluZGV4X2JlZ2luc2Nhbl9pbnRl cm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCXNjYW4tPnBhcmFsbGVsX3NjYW4gPSBwc2Nh bjsKIAlzY2FuLT54c190ZW1wX3NuYXAgPSB0ZW1wX3NuYXA7CiAKKwlzY2FuLT54c19zbmFwc2hv dCA9IHNuYXBzaG90OworCXNjYW4tPmluc3RydW1lbnQgPSBpbnN0cnVtZW50OworCisJLyoKKwkg KiBJbml0aWFsaXplIGhlYXAtc2lkZSBzY2FuIHN0YXRlIHdoZW4gYSBoZWFwIHJlbGF0aW9uIGlz IHByb3ZpZGVkLgorCSAqIEJpdG1hcCBpbmRleCBzY2FucyBkb24ndCBwcm92aWRlIG9uZS4KKwkg Ki8KKwlpZiAoaGVhcFJlbGF0aW9uICE9IE5VTEwpCisJeworCQlzY2FuLT5oZWFwUmVsYXRpb24g PSBoZWFwUmVsYXRpb247CisJCXNjYW4tPnhzX3dhbnRfaXR1cCA9IGluZGV4X29ubHlfc2NhbjsK KwkJc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOworCisJCS8qCisJCSAqIEZvciBpbmRl eC1vbmx5IHNjYW5zLCBmaW5kIGFueSAibmFtZSIgY29sdW1ucyBzdG9yZWQgYXMgY3N0cmluZ3MK KwkJICogKGUuZy4gYnRyZWUgbmFtZV9vcHMpLCB3aGljaCB0aGUgdGFibGUgQU0gbXVzdCByZS1w YWQgdG8KKwkJICogTkFNRURBVEFMRU4gd2hlbiBmaWxsaW5nIGEgc2xvdCBmcm9tIHRoZSBpbmRl eCB0dXBsZS4gIFdlIGRldGVjdAorCQkgKiB0aGlzIGdlbmVyaWNhbGx5IGJ5IGxvb2tpbmcgZm9y IGluZGV4IGF0dHJpYnV0ZXMgd2hvc2Ugc3RvcmVkIHR5cGUKKwkJICogaXMgQ1NUUklOR09JRCB3 aGlsZSB0aGVpciBvcGNsYXNzIGlucHV0IHR5cGUgaXMgTkFNRU9JRC4gIFRoaXMgaXMKKwkJICog ZG9uZSBiZWZvcmUgdGFibGVfaW5kZXhfc2Nhbl9iZWdpbiBzbyB0aGUgdGFibGUgQU0gY2FuIHNp emUKKwkJICogcGVyLXR1cGxlIHdvcmtzcGFjZSBhY2NvcmRpbmdseS4KKwkJICovCisJCWlmIChp bmRleF9vbmx5X3NjYW4pCisJCXsKKwkJCWludAkJCWluZG5rZXlhdHRzID0gaW5kZXhSZWxhdGlv bi0+cmRfaW5kZXgtPmluZG5rZXlhdHRzOworCQkJaW50CQkJbmFtZWNvdW50ID0gMDsKKworCQkJ Zm9yIChpbnQgYXR0bnVtID0gMDsgYXR0bnVtIDwgaW5kbmtleWF0dHM7IGF0dG51bSsrKQorCQkJ eworCQkJCWlmIChUdXBsZURlc2NBdHRyKGluZGV4UmVsYXRpb24tPnJkX2F0dCwgYXR0bnVtKS0+ YXR0dHlwaWQgPT0gQ1NUUklOR09JRCAmJgorCQkJCQlpbmRleFJlbGF0aW9uLT5yZF9vcGNpbnR5 cGVbYXR0bnVtXSA9PSBOQU1FT0lEKQorCQkJCQluYW1lY291bnQrKzsKKwkJCX0KKworCQkJaWYg KG5hbWVjb3VudCA+IDApCisJCQl7CisJCQkJaW50CQkJaWR4ID0gMDsKKworCQkJCXNjYW4tPnhz X25hbWVfY3N0cmluZ19hdHRudW1zID0gcGFsbG9jX2FycmF5KEF0dHJOdW1iZXIsIG5hbWVjb3Vu dCk7CisJCQkJZm9yIChpbnQgYXR0bnVtID0gMDsgYXR0bnVtIDwgaW5kbmtleWF0dHM7IGF0dG51 bSsrKQorCQkJCXsKKwkJCQkJaWYgKFR1cGxlRGVzY0F0dHIoaW5kZXhSZWxhdGlvbi0+cmRfYXR0 LCBhdHRudW0pLT5hdHR0eXBpZCA9PSBDU1RSSU5HT0lEICYmCisJCQkJCQlpbmRleFJlbGF0aW9u LT5yZF9vcGNpbnR5cGVbYXR0bnVtXSA9PSBOQU1FT0lEKQorCQkJCQkJc2Nhbi0+eHNfbmFtZV9j c3RyaW5nX2F0dG51bXNbaWR4KytdID0gKEF0dHJOdW1iZXIpIGF0dG51bTsKKwkJCQl9CisJCQkJ c2Nhbi0+eHNfbmFtZV9jc3RyaW5nX2NvdW50ID0gbmFtZWNvdW50OworCQkJfQorCQl9CisKKwkJ Lyogc2V0IHVwIHRhYmxlIEFNIHN0YXRlIGZvciB0aGUgaW5kZXggc2NhbiAoc2V0cyB4c190YWJs ZV9vcGFxdWUpICovCisJCXRhYmxlX2luZGV4X3NjYW5fYmVnaW4oc2NhbiwgZmxhZ3MpOworCisJ CS8qIHRhYmxlIEFNIG11c3Qgc2V0IHRoZXNlIGZvciB1cyAqLworCQlBc3NlcnQoc2Nhbi0+eHNf Z2V0bmV4dF9zbG90ICE9IE5VTEwgJiYgc2Nhbi0+eHNfdGFibGVfb3BhcXVlICE9IE5VTEwpOwor CX0KKwogCXJldHVybiBzY2FuOwogfQogCkBAIC0zNzYsOCArNDIxLDggQEAgaW5kZXhfcmVzY2Fu KEluZGV4U2NhbkRlc2Mgc2NhbiwKIAlBc3NlcnQobm9yZGVyYnlzID09IHNjYW4tPm51bWJlck9m T3JkZXJCeXMpOwogCiAJLyogcmVzZXQgdGFibGUgQU0gc3RhdGUgZm9yIHJlc2NhbiAqLwotCWlm IChzY2FuLT54c19oZWFwZmV0Y2gpCi0JCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhz X2hlYXBmZXRjaCk7CisJaWYgKHNjYW4tPnhzX3RhYmxlX29wYXF1ZSkKKwkJdGFibGVfaW5kZXhf c2Nhbl9yZXNldChzY2FuKTsKIAogCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsgLyog Zm9yIHNhZmV0eSAqLwogCXNjYW4tPnhzX2hlYXBfY29udGludWUgPSBmYWxzZTsKQEAgLTM5Nywx MCArNDQyLDEwIEBAIGluZGV4X2VuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogCUNIRUNLX1ND QU5fUFJPQ0VEVVJFKGFtZW5kc2Nhbik7CiAKIAkvKiBSZWxlYXNlIHJlc291cmNlcyAobGlrZSBi dWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLwotCWlmIChzY2FuLT54c19oZWFwZmV0 Y2gpCisJaWYgKHNjYW4tPnhzX3RhYmxlX29wYXF1ZSkKIAl7Ci0JCXRhYmxlX2luZGV4X2ZldGNo X2VuZChzY2FuLT54c19oZWFwZmV0Y2gpOwotCQlzY2FuLT54c19oZWFwZmV0Y2ggPSBOVUxMOwor CQl0YWJsZV9pbmRleF9zY2FuX2VuZChzY2FuKTsKKwkJc2Nhbi0+eHNfdGFibGVfb3BhcXVlID0g TlVMTDsKIAl9CiAKIAkvKiBFbmQgdGhlIEFNJ3Mgc2NhbiAqLwpAQCAtNDUzLDggKzQ5OCw4IEBA IGluZGV4X3Jlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlDSEVDS19TQ0FOX1BST0NFRFVS RShhbXJlc3RycG9zKTsKIAogCS8qIHJlc2V0IHRhYmxlIEFNIHN0YXRlIGZvciByZXN0b3Jpbmcg dGhlIG1hcmtlZCBwb3NpdGlvbiAqLwotCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCi0JCXRhYmxl X2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisJaWYgKHNjYW4tPnhzX3Rh YmxlX29wYXF1ZSkKKwkJdGFibGVfaW5kZXhfc2Nhbl9yZXNldChzY2FuKTsKIAogCXNjYW4tPmtp bGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAqLwogCXNjYW4tPnhzX2hlYXBf Y29udGludWUgPSBmYWxzZTsKQEAgLTU0MCw4ICs1ODUsOCBAQCBpbmRleF9wYXJhbGxlbHJlc2Nh bihJbmRleFNjYW5EZXNjIHNjYW4pCiAJU0NBTl9DSEVDS1M7CiAKIAkvKiByZXNldCB0YWJsZSBB TSBzdGF0ZSBmb3IgcmVzY2FuICovCi0JaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKLQkJdGFibGVf aW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKwlpZiAoc2Nhbi0+eHNfdGFi bGVfb3BhcXVlKQorCQl0YWJsZV9pbmRleF9zY2FuX3Jlc2V0KHNjYW4pOwogCiAJLyogYW1wYXJh bGxlbHJlc2NhbiBpcyBvcHRpb25hbDsgYXNzdW1lIG5vLW9wIGlmIG5vdCBwcm92aWRlZCBieSBB TSAqLwogCWlmIChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wYXJhbGxlbHJlc2Nh biAhPSBOVUxMKQpAQCAtNTU4LDQxICs2MDMsMzMgQEAgaW5kZXhfcGFyYWxsZWxyZXNjYW4oSW5k ZXhTY2FuRGVzYyBzY2FuKQogICovCiBJbmRleFNjYW5EZXNjCiBpbmRleF9iZWdpbnNjYW5fcGFy YWxsZWwoUmVsYXRpb24gaGVhcHJlbCwgUmVsYXRpb24gaW5kZXhyZWwsCisJCQkJCQkgYm9vbCBp bmRleF9vbmx5X3NjYW4sCiAJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVt ZW50LAogCQkJCQkJIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywKIAkJCQkJCSBQYXJhbGxlbElu ZGV4U2NhbkRlc2MgcHNjYW4sCiAJCQkJCQkgdWludDMyIGZsYWdzKQogewogCVNuYXBzaG90CXNu YXBzaG90OwotCUluZGV4U2NhbkRlc2Mgc2NhbjsKIAogCUFzc2VydChSZWxGaWxlTG9jYXRvckVx dWFscyhoZWFwcmVsLT5yZF9sb2NhdG9yLCBwc2Nhbi0+cHNfbG9jYXRvcikpOwogCUFzc2VydChS ZWxGaWxlTG9jYXRvckVxdWFscyhpbmRleHJlbC0+cmRfbG9jYXRvciwgcHNjYW4tPnBzX2luZGV4 bG9jYXRvcikpOwogCiAJc25hcHNob3QgPSBSZXN0b3JlU25hcHNob3QocHNjYW4tPnBzX3NuYXBz aG90X2RhdGEpOwogCVJlZ2lzdGVyU25hcHNob3Qoc25hcHNob3QpOwotCXNjYW4gPSBpbmRleF9i ZWdpbnNjYW5faW50ZXJuYWwoaW5kZXhyZWwsIG5rZXlzLCBub3JkZXJieXMsIHNuYXBzaG90LAot CQkJCQkJCQkJcHNjYW4sIHRydWUpOwogCi0JLyoKLQkgKiBTYXZlIGFkZGl0aW9uYWwgcGFyYW1l dGVycyBpbnRvIHRoZSBzY2FuZGVzYy4gIEV2ZXJ5dGhpbmcgZWxzZSB3YXMgc2V0Ci0JICogdXAg YnkgaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsLgotCSAqLwotCXNjYW4tPmhlYXBSZWxhdGlvbiA9 IGhlYXByZWw7Ci0Jc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKLQlzY2FuLT5pbnN0cnVt ZW50ID0gaW5zdHJ1bWVudDsKLQotCS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBm cm9tIHRhYmxlICovCi0Jc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVn aW4oaGVhcHJlbCwgZmxhZ3MpOwotCi0JcmV0dXJuIHNjYW47CisJcmV0dXJuIGluZGV4X2JlZ2lu c2Nhbl9pbnRlcm5hbChpbmRleHJlbCwgaGVhcHJlbCwgbmtleXMsIG5vcmRlcmJ5cywKKwkJCQkJ CQkJCXNuYXBzaG90LCBwc2NhbiwgaW5zdHJ1bWVudCwKKwkJCQkJCQkJCWluZGV4X29ubHlfc2Nh biwgdHJ1ZSwgZmxhZ3MpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCi0gKiBpbmRleF9nZXRu ZXh0X3RpZCAtIGdldCB0aGUgbmV4dCBUSUQgZnJvbSBhIHNjYW4KKyAqIGluZGV4X2dldG5leHRf dGlkIC0gYW1nZXR0dXBsZSBpbnRlcmZhY2UKICAqCiAgKiBUaGUgcmVzdWx0IGlzIHRoZSBuZXh0 IFRJRCBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMsCiAgKiBvciBOVUxMIGlmIG5vIG1vcmUgbWF0 Y2hpbmcgdHVwbGVzIGV4aXN0LgorICoKKyAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5 IHRhYmxlIEFNIGFtZ2V0dHVwbGUtYmFzZWQgaW5kZXggc2NhbgorICogY2FsbGJhY2tzLgogICog LS0tLS0tLS0tLS0tLS0tLQogICovCiBJdGVtUG9pbnRlcgpAQCAtNjIyLDggKzY1OSw4IEBAIGlu ZGV4X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rp b24pCiAJaWYgKCFmb3VuZCkKIAl7CiAJCS8qIHJlc2V0IHRhYmxlIEFNIHN0YXRlICovCi0JCWlm IChzY2FuLT54c19oZWFwZmV0Y2gpCi0JCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuLT54 c19oZWFwZmV0Y2gpOworCQlpZiAoc2Nhbi0+eHNfdGFibGVfb3BhcXVlKQorCQkJdGFibGVfaW5k ZXhfc2Nhbl9yZXNldChzY2FuKTsKIAogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC02MzUsOTcgKzY3 Miw2IEBAIGluZGV4X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXJlY3Rpb24pCiAJcmV0dXJuICZzY2FuLT54c19oZWFwdGlkOwogfQogCi0vKiAtLS0tLS0t LS0tLS0tLS0tCi0gKgkJaW5kZXhfZmV0Y2hfaGVhcCAtIGdldCB0aGUgc2NhbidzIG5leHQgaGVh cCB0dXBsZQotICoKLSAqIFRoZSByZXN1bHQgaXMgYSB2aXNpYmxlIGhlYXAgdHVwbGUgYXNzb2Np YXRlZCB3aXRoIHRoZSBpbmRleCBUSUQgbW9zdAotICogcmVjZW50bHkgZmV0Y2hlZCBieSBpbmRl eF9nZXRuZXh0X3RpZCwgb3IgTlVMTCBpZiBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcwotICogZXhp c3QuICAoVGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgbWF0Y2hpbmcgdHVwbGUgYmVjYXVzZSBv ZiBIT1QgY2hhaW5zLAotICogYWx0aG91Z2ggd2hlbiB1c2luZyBhbiBNVkNDIHNuYXBzaG90IGl0 IHNob3VsZCBiZSBpbXBvc3NpYmxlIGZvciBtb3JlIHRoYW4KLSAqIG9uZSBzdWNoIHR1cGxlIHRv IGV4aXN0LikKLSAqCi0gKiBPbiBzdWNjZXNzLCB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGhl YXAgdHVwIGlzIHBpbm5lZCAodGhlIHBpbiB3aWxsIGJlCi0gKiBkcm9wcGVkIGluIGEgZnV0dXJl IGluZGV4X2dldG5leHRfdGlkLCBpbmRleF9mZXRjaF9oZWFwIG9yIGluZGV4X2VuZHNjYW4KLSAq IGNhbGwpLgotICoKLSAqIE5vdGU6IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ss IGFuZCBwZXJmb3JtIHJlY2hlY2tpbmcgb2YgdGhlCi0gKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQu ICBXZSBkbyBub3QgZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQotICogZW5vdWdo IGluZm9ybWF0aW9uIHRvIGRvIGl0IGVmZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCi0g KiAtLS0tLS0tLS0tLS0tLS0tCi0gKi8KLWJvb2wKLWluZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2Fu RGVzYyBzY2FuLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKLXsKLQlib29sCQlhbGxfZGVhZCA9IGZh bHNlOwotCWJvb2wJCWZvdW5kOwotCi0JZm91bmQgPSB0YWJsZV9pbmRleF9mZXRjaF90dXBsZShz Y2FuLT54c19oZWFwZmV0Y2gsICZzY2FuLT54c19oZWFwdGlkLAotCQkJCQkJCQkJc2Nhbi0+eHNf c25hcHNob3QsIHNsb3QsCi0JCQkJCQkJCQkmc2Nhbi0+eHNfaGVhcF9jb250aW51ZSwgJmFsbF9k ZWFkKTsKLQotCWlmIChmb3VuZCkKLQkJcGdzdGF0X2NvdW50X2hlYXBfZmV0Y2goc2Nhbi0+aW5k ZXhSZWxhdGlvbik7Ci0KLQkvKgotCSAqIElmIHdlIHNjYW5uZWQgYSB3aG9sZSBIT1QgY2hhaW4g YW5kIGZvdW5kIG9ubHkgZGVhZCB0dXBsZXMsIHRlbGwgaW5kZXgKLQkgKiBBTSB0byBraWxsIGl0 cyBlbnRyeSBmb3IgdGhhdCBUSUQgKHRoaXMgd2lsbCB0YWtlIGVmZmVjdCBpbiB0aGUgbmV4dAot CSAqIGFtZ2V0dHVwbGUgY2FsbCwgaW4gaW5kZXhfZ2V0bmV4dF90aWQpLiAgV2UgZG8gbm90IGRv IHRoaXMgd2hlbiBpbgotCSAqIHJlY292ZXJ5IGJlY2F1c2UgaXQgbWF5IHZpb2xhdGUgTVZDQyB0 byBkbyBzby4gIFNlZSBjb21tZW50cyBpbgotCSAqIFJlbGF0aW9uR2V0SW5kZXhTY2FuKCkuCi0J ICovCi0JaWYgKCFzY2FuLT54YWN0U3RhcnRlZEluUmVjb3ZlcnkpCi0JCXNjYW4tPmtpbGxfcHJp b3JfdHVwbGUgPSBhbGxfZGVhZDsKLQotCXJldHVybiBmb3VuZDsKLX0KLQotLyogLS0tLS0tLS0t LS0tLS0tLQotICoJCWluZGV4X2dldG5leHRfc2xvdCAtIGdldCB0aGUgbmV4dCB0dXBsZSBmcm9t IGEgc2NhbgotICoKLSAqIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcg dGhlIHNjYW4ga2V5cyBhbmQgdGhlIHNuYXBzaG90IHdhcwotICogZm91bmQsIGZhbHNlIG90aGVy d2lzZS4gIFRoZSB0dXBsZSBpcyBzdG9yZWQgaW4gdGhlIHNwZWNpZmllZCBzbG90LgotICoKLSAq IE9uIHN1Y2Nlc3MsIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgYXJlIGxpa2VseSB0byBi ZSBoZWxkLCBhbmQgd2lsbCBiZQotICogZHJvcHBlZCBieSBhIGZ1dHVyZSBpbmRleF9nZXRuZXh0 X3RpZCwgaW5kZXhfZmV0Y2hfaGVhcCBvciBpbmRleF9lbmRzY2FuCi0gKiBjYWxsKS4KLSAqCi0g KiBOb3RlOiBjYWxsZXIgbXVzdCBjaGVjayBzY2FuLT54c19yZWNoZWNrLCBhbmQgcGVyZm9ybSBy ZWNoZWNraW5nIG9mIHRoZQotICogc2NhbiBrZXlzIGlmIHJlcXVpcmVkLiAgV2UgZG8gbm90IGRv IHRoYXQgaGVyZSBiZWNhdXNlIHdlIGRvbid0IGhhdmUKLSAqIGVub3VnaCBpbmZvcm1hdGlvbiB0 byBkbyBpdCBlZmZpY2llbnRseSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgotICogLS0tLS0tLS0tLS0t LS0tLQotICovCi1ib29sCi1pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCi17Ci0JZm9yICg7 OykKLQl7Ci0JCWlmICghc2Nhbi0+eHNfaGVhcF9jb250aW51ZSkKLQkJewotCQkJSXRlbVBvaW50 ZXIgdGlkOwotCi0JCQkvKiBUaW1lIHRvIGZldGNoIHRoZSBuZXh0IFRJRCBmcm9tIHRoZSBpbmRl eCAqLwotCQkJdGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbiwgZGlyZWN0aW9uKTsKLQotCQkJ LyogSWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KLQkJCWlmICh0 aWQgPT0gTlVMTCkKLQkJCQlicmVhazsKLQotCQkJQXNzZXJ0KEl0ZW1Qb2ludGVyRXF1YWxzKHRp ZCwgJnNjYW4tPnhzX2hlYXB0aWQpKTsKLQkJfQotCi0JCS8qCi0JCSAqIEZldGNoIHRoZSBuZXh0 IChvciBvbmx5KSB2aXNpYmxlIGhlYXAgdHVwbGUgZm9yIHRoaXMgaW5kZXggZW50cnkuCi0JCSAq IElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIGxvb3AgYXJvdW5kIGFuZCBncmFiIHRoZSBuZXh0 IFRJRCBmcm9tCi0JCSAqIHRoZSBpbmRleC4KLQkJICovCi0JCUFzc2VydChJdGVtUG9pbnRlcklz VmFsaWQoJnNjYW4tPnhzX2hlYXB0aWQpKTsKLQkJaWYgKGluZGV4X2ZldGNoX2hlYXAoc2Nhbiwg c2xvdCkpCi0JCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIC8qIC0t LS0tLS0tLS0tLS0tLS0KICAqCQlpbmRleF9nZXRiaXRtYXAgLSBnZXQgYWxsIHR1cGxlcyBhdCBv bmNlIGZyb20gYW4gaW5kZXggc2NhbgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0aW5zZXJ0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGluc2Vy dC5jCmluZGV4IGM4YWY5N2RkMi4uZjFiNTVmYjIwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idGluc2VydC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0aW5zZXJ0LmMKQEAgLTU2MCw5ICs1NjAsOSBAQCBfYnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9u IHJlbCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSwgUmVsYXRpb24gaGVhcFJlbCwKIAkJCQkg KiB3aXRoIG9wdGltaXphdGlvbnMgbGlrZSBoZWFwJ3MgSE9ULCB3ZSBoYXZlIGp1c3QgYSBzaW5n bGUKIAkJCQkgKiBpbmRleCBlbnRyeSBmb3IgdGhlIGVudGlyZSBjaGFpbi4KIAkJCQkgKi8KLQkJ CQllbHNlIGlmICh0YWJsZV9pbmRleF9mZXRjaF90dXBsZV9jaGVjayhoZWFwUmVsLCAmaHRpZCwK LQkJCQkJCQkJCQkJCQkgICAmU25hcHNob3REaXJ0eSwKLQkJCQkJCQkJCQkJCQkgICAmYWxsX2Rl YWQpKQorCQkJCWVsc2UgaWYgKHRhYmxlX2ZldGNoX3RpZF9jaGVjayhoZWFwUmVsLCAmaHRpZCwK KwkJCQkJCQkJCQkJICAgJlNuYXBzaG90RGlydHksCisJCQkJCQkJCQkJCSAgICZhbGxfZGVhZCkp CiAJCQkJewogCQkJCQlUcmFuc2FjdGlvbklkIHh3YWl0OwogCkBAIC02MTgsOCArNjE4LDggQEAg X2J0X2NoZWNrX3VuaXF1ZShSZWxhdGlvbiByZWwsIEJUSW5zZXJ0U3RhdGUgaW5zZXJ0c3RhdGUs IFJlbGF0aW9uIGhlYXBSZWwsCiAJCQkJCSAqIGVudHJ5LgogCQkJCQkgKi8KIAkJCQkJaHRpZCA9 IGl0dXAtPnRfdGlkOwotCQkJCQlpZiAodGFibGVfaW5kZXhfZmV0Y2hfdHVwbGVfY2hlY2soaGVh cFJlbCwgJmh0aWQsCi0JCQkJCQkJCQkJCQkJICBTbmFwc2hvdFNlbGYsIE5VTEwpKQorCQkJCQlp ZiAodGFibGVfZmV0Y2hfdGlkX2NoZWNrKGhlYXBSZWwsICZodGlkLAorCQkJCQkJCQkJCQkgIFNu YXBzaG90U2VsZiwgTlVMTCkpCiAJCQkJCXsKIAkJCQkJCS8qIE5vcm1hbCBjYXNlIC0tLSBpdCdz IHN0aWxsIGxpdmUgKi8KIAkJCQkJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Rh YmxlL3RhYmxlYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKaW5kZXgg NjhmZjA5NjZmLi4wYWM5ZjAxNDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJs ZS90YWJsZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYwpAQCAt MjI4LDMyICsyMjgsMjAgQEAgdGFibGVfYmVnaW5zY2FuX3BhcmFsbGVsX3RpZHJhbmdlKFJlbGF0 aW9uIHJlbGF0aW9uLAogICovCiAKIC8qCi0gKiBUbyBwZXJmb3JtIHRoYXQgY2hlY2sgc2ltcGx5 IHN0YXJ0IGFuIGluZGV4IHNjYW4sIGNyZWF0ZSB0aGUgbmVjZXNzYXJ5Ci0gKiBzbG90LCBkbyB0 aGUgaGVhcCBsb29rdXAsIGFuZCBzaHV0IGV2ZXJ5dGhpbmcgZG93biBhZ2Fpbi4gVGhpcyBjb3Vs ZCBiZQotICogb3B0aW1pemVkLCBidXQgaXMgdW5saWtlbHkgdG8gbWF0dGVyIGZyb20gYSBwZXJm b3JtYW5jZSBQT1YuIElmIHRoZXJlCi0gKiBmcmVxdWVudGx5IGFyZSBsaXZlIGluZGV4IHBvaW50 ZXJzIGFsc28gbWF0Y2hpbmcgYSB1bmlxdWUgaW5kZXgga2V5LCB0aGUKLSAqIENQVSBvdmVyaGVh ZCBvZiB0aGlzIHJvdXRpbmUgaXMgdW5saWtlbHkgdG8gbWF0dGVyLgotICoKLSAqIE5vdGUgdGhh dCAqdGlkIG1heSBiZSBtb2RpZmllZCB3aGVuIHdlIHJldHVybiB0cnVlIGlmIHRoZSBBTSBzdXBw b3J0cwotICogc3RvcmluZyBtdWx0aXBsZSByb3cgdmVyc2lvbnMgcmVhY2hhYmxlIHZpYSBhIHNp bmdsZSBpbmRleCBlbnRyeSAobGlrZQotICogaGVhcCdzIEhPVCkuCisgKiBDYWxsZXIgc2hvdWxk IG5vdGUgdGhlIHRhYmxlX2ZldGNoX3RpZCB3YXJuaW5nIGFib3V0ICp0aWQgYmVpbmcgbW9kaWZp ZWQKKyAqIHdoZW4gd2UgcmV0dXJuIHRydWUgaW4gc29tZSBjYXNlcwogICovCiBib29sCi10YWJs ZV9pbmRleF9mZXRjaF90dXBsZV9jaGVjayhSZWxhdGlvbiByZWwsCi0JCQkJCQkJICBJdGVtUG9p bnRlciB0aWQsCi0JCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCQkgIGJvb2wgKmFs bF9kZWFkKQordGFibGVfZmV0Y2hfdGlkX2NoZWNrKFJlbGF0aW9uIHJlbCwKKwkJCQkJICBJdGVt UG9pbnRlciB0aWQsCisJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsCisJCQkJCSAgYm9vbCAqYWxs X2RlYWQpCiB7Ci0JSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbjsKIAlUdXBsZVRhYmxlU2xvdCAq c2xvdDsKLQlib29sCQljYWxsX2FnYWluID0gZmFsc2U7CiAJYm9vbAkJZm91bmQ7CiAKIAlzbG90 ID0gdGFibGVfc2xvdF9jcmVhdGUocmVsLCBOVUxMKTsKLQlzY2FuID0gdGFibGVfaW5kZXhfZmV0 Y2hfYmVnaW4ocmVsLCBTT19OT05FKTsKLQlmb3VuZCA9IHRhYmxlX2luZGV4X2ZldGNoX3R1cGxl KHNjYW4sIHRpZCwgc25hcHNob3QsIHNsb3QsICZjYWxsX2FnYWluLAotCQkJCQkJCQkJYWxsX2Rl YWQpOwotCXRhYmxlX2luZGV4X2ZldGNoX2VuZChzY2FuKTsKKwlmb3VuZCA9IHRhYmxlX2ZldGNo X3RpZChyZWwsIHRpZCwgc25hcHNob3QsIHNsb3QsIGFsbF9kZWFkKTsKIAlFeGVjRHJvcFNpbmds ZVR1cGxlVGFibGVTbG90KHNsb3QpOwogCiAJcmV0dXJuIGZvdW5kOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90 YWJsZS90YWJsZWFtYXBpLmMKaW5kZXggNTQ1MGEyN2ZhLi43MmQyYzY2MmIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwpAQCAtNTAsMTEgKzUwLDExIEBAIEdldFRhYmxlQW1S b3V0aW5lKE9pZCBhbWhhbmRsZXIpCiAJQXNzZXJ0KHJvdXRpbmUtPnBhcmFsbGVsc2Nhbl9pbml0 aWFsaXplICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT5wYXJhbGxlbHNjYW5fcmVpbml0aWFs aXplICE9IE5VTEwpOwogCi0JQXNzZXJ0KHJvdXRpbmUtPmluZGV4X2ZldGNoX2JlZ2luICE9IE5V TEwpOwotCUFzc2VydChyb3V0aW5lLT5pbmRleF9mZXRjaF9yZXNldCAhPSBOVUxMKTsKLQlBc3Nl cnQocm91dGluZS0+aW5kZXhfZmV0Y2hfZW5kICE9IE5VTEwpOwotCUFzc2VydChyb3V0aW5lLT5p bmRleF9mZXRjaF90dXBsZSAhPSBOVUxMKTsKKwlBc3NlcnQocm91dGluZS0+aW5kZXhfc2Nhbl9i ZWdpbiAhPSBOVUxMKTsKKwlBc3NlcnQocm91dGluZS0+aW5kZXhfc2Nhbl9yZXNldCAhPSBOVUxM KTsKKwlBc3NlcnQocm91dGluZS0+aW5kZXhfc2Nhbl9lbmQgIT0gTlVMTCk7CiAKKwlBc3NlcnQo cm91dGluZS0+ZmV0Y2hfdGlkICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT50dXBsZV9mZXRj aF9yb3dfdmVyc2lvbiAhPSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+dHVwbGVfdGlkX3ZhbGlk ICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT50dXBsZV9nZXRfbGF0ZXN0X3RpZCAhPSBOVUxM KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbnN0cmFpbnQuYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2NvbnN0cmFpbnQuYwppbmRleCA0MjFkOGMzNTkuLjdhZmY0ODEyNCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29uc3RyYWludC5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2NvbnN0cmFpbnQuYwpAQCAtMTA1LDIzICsxMDUsMTQgQEAgdW5pcXVl X2tleV9yZWNoZWNrKFBHX0ZVTkNUSU9OX0FSR1MpCiAJICogcmVtb3ZlZC4KIAkgKi8KIAl0bXB0 aWQgPSBjaGVja3RpZDsKKwlpZiAoIXRhYmxlX2ZldGNoX3RpZCh0cmlnZGF0YS0+dGdfcmVsYXRp b24sICZ0bXB0aWQsIFNuYXBzaG90U2VsZiwKKwkJCQkJCSBzbG90LCBOVUxMKSkKIAl7Ci0JCUlu ZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4gPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbih0cmlnZGF0 YS0+dGdfcmVsYXRpb24sCi0JCQkJCQkJCQkJCQkJCQlTT19OT05FKTsKLQkJYm9vbAkJY2FsbF9h Z2FpbiA9IGZhbHNlOwotCi0JCWlmICghdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoc2NhbiwgJnRt cHRpZCwgU25hcHNob3RTZWxmLCBzbG90LAotCQkJCQkJCQkJICZjYWxsX2FnYWluLCBOVUxMKSkK LQkJewotCQkJLyoKLQkJCSAqIEFsbCByb3dzIHJlZmVyZW5jZWQgYnkgdGhlIGluZGV4IGVudHJ5 IGFyZSBkZWFkLCBzbyBza2lwIHRoZQotCQkJICogY2hlY2suCi0JCQkgKi8KLQkJCUV4ZWNEcm9w U2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7Ci0JCQl0YWJsZV9pbmRleF9mZXRjaF9lbmQoc2Nh bik7Ci0JCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOwotCQl9Ci0JCXRhYmxlX2luZGV4 X2ZldGNoX2VuZChzY2FuKTsKKwkJLyoKKwkJICogQWxsIHJvd3MgcmVmZXJlbmNlZCBieSB0aGUg aW5kZXggZW50cnkgYXJlIGRlYWQsIHNvIHNraXAgdGhlIGNoZWNrCisJCSAqLworCQlFeGVjRHJv cFNpbmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOworCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5V TEwpOwogCX0KIAogCS8qCkBAIC0xNjgsOSArMTU5LDggQEAgdW5pcXVlX2tleV9yZWNoZWNrKFBH X0ZVTkNUSU9OX0FSR1MpCiAJCS8qCiAJCSAqIE5vdGU6IHRoaXMgaXMgbm90IGEgcmVhbCBpbnNl cnQ7IGl0IGlzIGEgY2hlY2sgdGhhdCB0aGUgaW5kZXggZW50cnkKIAkJICogdGhhdCBoYXMgYWxy ZWFkeSBiZWVuIGluc2VydGVkIGlzIHVuaXF1ZS4gIFBhc3NpbmcgdGhlIHR1cGxlJ3MgdGlkCi0J CSAqIChpLmUuIHVubW9kaWZpZWQgYnkgdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoKSkgaXMgY29y cmVjdCBldmVuIGlmCi0JCSAqIHRoZSByb3cgaXMgbm93IGRlYWQsIGJlY2F1c2UgdGhhdCBpcyB0 aGUgVElEIHRoZSBpbmRleCB3aWxsIGtub3cKLQkJICogYWJvdXQuCisJCSAqIChpLmUuIHVubW9k aWZpZWQgYnkgdGFibGVfZmV0Y2hfdGlkKCkpIGlzIGNvcnJlY3QgZXZlbiBpZiB0aGUgcm93CisJ CSAqIGlzIG5vdyBkZWFkLCBiZWNhdXNlIHRoYXQgaXMgdGhlIFRJRCB0aGUgaW5kZXggd2lsbCBr bm93IGFib3V0LgogCQkgKi8KIAkJaW5kZXhfaW5zZXJ0KGluZGV4UmVsLCB2YWx1ZXMsIGlzbnVs bCwgJmNoZWNrdGlkLAogCQkJCQkgdHJpZ2RhdGEtPnRnX3JlbGF0aW9uLCBVTklRVUVfQ0hFQ0tf RVhJU1RJTkcsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggMTEyYzE3YjBkLi5lYmU4NTI1MDAg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgdm9pZCBz aG93X3JlY3Vyc2l2ZV91bmlvbl9pbmZvKFJlY3Vyc2l2ZVVuaW9uU3RhdGUgKnJzdGF0ZSwKIHN0 YXRpYyB2b2lkIHNob3dfbWVtb2l6ZV9pbmZvKE1lbW9pemVTdGF0ZSAqbXN0YXRlLCBMaXN0ICph bmNlc3RvcnMsCiAJCQkJCQkJICBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIHNob3df aGFzaGFnZ19pbmZvKEFnZ1N0YXRlICphZ2dzdGF0ZSwgRXhwbGFpblN0YXRlICplcyk7Ci1zdGF0 aWMgdm9pZCBzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhw bGFpblN0YXRlICplcyk7CitzdGF0aWMgdm9pZCBzaG93X2luZGV4c2Nhbl9pbmZvKFBsYW5TdGF0 ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIHNob3dfdGlkYml0 bWFwX2luZm8oQml0bWFwSGVhcFNjYW5TdGF0ZSAqcGxhbnN0YXRlLAogCQkJCQkJCQlFeHBsYWlu U3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIHNob3dfc2Nhbl9pb191c2FnZShTY2FuU3RhdGUgKnBs YW5zdGF0ZSwKQEAgLTE5NzgsNyArMTk3OCw3IEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxh bnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQlpZiAocGxhbi0+cXVhbCkKIAkJCQlzaG93X2lu c3RydW1lbnRhdGlvbl9jb3VudCgiUm93cyBSZW1vdmVkIGJ5IEZpbHRlciIsIDEsCiAJCQkJCQkJ CQkJICAgcGxhbnN0YXRlLCBlcyk7Ci0JCQlzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhwbGFuc3Rh dGUsIGVzKTsKKwkJCXNob3dfaW5kZXhzY2FuX2luZm8ocGxhbnN0YXRlLCBlcyk7CiAJCQlicmVh azsKIAkJY2FzZSBUX0luZGV4T25seVNjYW46CiAJCQlzaG93X3NjYW5fcXVhbCgoKEluZGV4T25s eVNjYW4gKikgcGxhbiktPmluZGV4cXVhbCwKQEAgLTE5OTIsMTUgKzE5OTIsMTIgQEAgRXhwbGFp bk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCWlmIChwbGFu LT5xdWFsKQogCQkJCXNob3dfaW5zdHJ1bWVudGF0aW9uX2NvdW50KCJSb3dzIFJlbW92ZWQgYnkg RmlsdGVyIiwgMSwKIAkJCQkJCQkJCQkgICBwbGFuc3RhdGUsIGVzKTsKLQkJCWlmIChlcy0+YW5h bHl6ZSkKLQkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiSGVhcCBGZXRjaGVzIiwgTlVMTCwKLQkJ CQkJCQkJCSBwbGFuc3RhdGUtPmluc3RydW1lbnQtPm50dXBsZXMyLCAwLCBlcyk7Ci0JCQlzaG93 X2luZGV4c2VhcmNoZXNfaW5mbyhwbGFuc3RhdGUsIGVzKTsKKwkJCXNob3dfaW5kZXhzY2FuX2lu Zm8ocGxhbnN0YXRlLCBlcyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX0JpdG1hcEluZGV4U2NhbjoK IAkJCXNob3dfc2Nhbl9xdWFsKCgoQml0bWFwSW5kZXhTY2FuICopIHBsYW4pLT5pbmRleHF1YWxv cmlnLAogCQkJCQkJICAgIkluZGV4IENvbmQiLCBwbGFuc3RhdGUsIGFuY2VzdG9ycywgZXMpOwot CQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8ocGxhbnN0YXRlLCBlcyk7CisJCQlzaG93X2luZGV4 c2Nhbl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9CaXRtYXBIZWFw U2NhbjoKIAkJCXNob3dfc2Nhbl9xdWFsKCgoQml0bWFwSGVhcFNjYW4gKikgcGxhbiktPmJpdG1h cHF1YWxvcmlnLApAQCAtMzg2NywxNSArMzg2NCwxNiBAQCBzaG93X2hhc2hhZ2dfaW5mbyhBZ2dT dGF0ZSAqYWdnc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiB9CiAKIC8qCi0gKiBTaG93IHRoZSB0 b3RhbCBudW1iZXIgb2YgaW5kZXggc2VhcmNoZXMgZm9yIGEKKyAqIFNob3cgaW5kZXggc2NhbiBy ZWxhdGVkIGV4ZWN1dG9yIGluc3RydW1lbnRhdGlvbiBmb3IgYQogICogSW5kZXhTY2FuL0luZGV4 T25seVNjYW4vQml0bWFwSW5kZXhTY2FuIG5vZGUKICAqLwogc3RhdGljIHZvaWQKLXNob3dfaW5k ZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQor c2hvd19pbmRleHNjYW5faW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRlICpl cykKIHsKIAlQbGFuCSAgICpwbGFuID0gcGxhbnN0YXRlLT5wbGFuOwogCVNoYXJlZEluZGV4U2Nh bkluc3RydW1lbnRhdGlvbiAqU2hhcmVkSW5mbyA9IE5VTEw7Ci0JdWludDY0CQluc2VhcmNoZXMg PSAwOworCXVpbnQ2NAkJbnNlYXJjaGVzID0gMCwKKwkJCQludGFibGV0dXBsZWZldGNoZXMgPSAw OwogCiAJaWYgKCFlcy0+YW5hbHl6ZSkKIAkJcmV0dXJuOwpAQCAtMzg5Niw2ICszODk0LDcgQEAg c2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxhaW5TdGF0 ZSAqZXMpCiAJCQkJSW5kZXhPbmx5U2NhblN0YXRlICppbmRleHN0YXRlID0gKChJbmRleE9ubHlT Y2FuU3RhdGUgKikgcGxhbnN0YXRlKTsKIAogCQkJCW5zZWFyY2hlcyA9IGluZGV4c3RhdGUtPmlv c3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOworCQkJCW50YWJsZXR1cGxlZmV0Y2hlcyA9IGluZGV4 c3RhdGUtPmlvc3NfSW5zdHJ1bWVudC0+bnRhYmxldHVwbGVmZXRjaGVzOwogCQkJCVNoYXJlZElu Zm8gPSBpbmRleHN0YXRlLT5pb3NzX1NoYXJlZEluZm87CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0z OTE5LDkgKzM5MTgsMTMgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFu c3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKndp bnN0cnVtZW50ID0gJlNoYXJlZEluZm8tPndpbnN0cnVtZW50W2ldOwogCiAJCQluc2VhcmNoZXMg Kz0gd2luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJCW50YWJsZXR1cGxlZmV0Y2hlcyArPSB3aW5z dHJ1bWVudC0+bnRhYmxldHVwbGVmZXRjaGVzOwogCQl9CiAJfQogCisJaWYgKG5vZGVUYWcocGxh bikgPT0gVF9JbmRleE9ubHlTY2FuKQorCQlFeHBsYWluUHJvcGVydHlVSW50ZWdlcigiSGVhcCBG ZXRjaGVzIiwgTlVMTCwgbnRhYmxldHVwbGVmZXRjaGVzLCBlcyk7CisKIAlFeHBsYWluUHJvcGVy dHlVSW50ZWdlcigiSW5kZXggU2VhcmNoZXMiLCBOVUxMLCBuc2VhcmNoZXMsIGVzKTsKIH0KIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcmVwYWNrLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9yZXBhY2suYwppbmRleCA0ZDE3N2M4NjguLmZjZjUxZTg2NyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvcmVwYWNrLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv cmVwYWNrLmMKQEAgLTI4NjIsNiArMjg2Miw3IEBAIGZpbmRfdGFyZ2V0X3R1cGxlKFJlbGF0aW9u IHJlbCwgQ2hhbmdlQ29udGV4dCAqY2hnY3h0LCBUdXBsZVRhYmxlU2xvdCAqbG9jYXRvciwKIAlG b3JtX3BnX2luZGV4IGlkeCA9IGNoZ2N4dC0+Y2NfaWRlbnRfaW5kZXgtPnJkX2luZGV4OwogCUlu ZGV4U2NhbkRlc2Mgc2NhbjsKIAlib29sCQlyZXR2YWwgPSBmYWxzZTsKKwlib29sCQlyZWNoZWNr OwogCiAJLyoKIAkgKiBTY2FuIGtleSBpcyBwYXNzZWQgYnkgY2FsbGVyLCBzbyBpdCBkb2VzIG5v dCBoYXZlIHRvIGJlIGNvbnN0cnVjdGVkCkBAIC0yODgwLDEzICsyODgxLDEzIEBAIGZpbmRfdGFy Z2V0X3R1cGxlKFJlbGF0aW9uIHJlbCwgQ2hhbmdlQ29udGV4dCAqY2hnY3h0LCBUdXBsZVRhYmxl U2xvdCAqbG9jYXRvciwKIAl9CiAKIAkvKiBYWFggbm8gaW5zdHJ1bWVudGF0aW9uIGZvciBub3cg Ki8KLQlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwgY2hnY3h0LT5jY19pZGVudF9pbmRleCwg R2V0QWN0aXZlU25hcHNob3QoKSwKKwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwgY2hnY3h0 LT5jY19pZGVudF9pbmRleCwgZmFsc2UsIEdldEFjdGl2ZVNuYXBzaG90KCksCiAJCQkJCQkgICBO VUxMLCBjaGdjeHQtPmNjX2lkZW50X2tleV9uZW50cmllcywgMCwgMCk7CiAJaW5kZXhfcmVzY2Fu KHNjYW4sIGNoZ2N4dC0+Y2NfaWRlbnRfa2V5LCBjaGdjeHQtPmNjX2lkZW50X2tleV9uZW50cmll cywgTlVMTCwgMCk7Ci0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2Nh bkRpcmVjdGlvbiwgcmV0cmlldmVkKSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90 KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCByZXRyaWV2ZWQsICZyZWNoZWNrKSkKIAl7CiAJ CS8qIEJlIHdhcnkgb2YgdGVtcG9yYWwgY29uc3RyYWludHMgKi8KLQkJaWYgKHNjYW4tPnhzX3Jl Y2hlY2sgJiYgIWlkZW50aXR5X2tleV9lcXVhbChjaGdjeHQsIGxvY2F0b3IsIHJldHJpZXZlZCkp CisJCWlmIChyZWNoZWNrICYmICFpZGVudGl0eV9rZXlfZXF1YWwoY2hnY3h0LCBsb2NhdG9yLCBy ZXRyaWV2ZWQpKQogCQl7CiAJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCQkJY29udGludWU7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCmluZGV4IGViMzgzODEyOS4uNzc5MWM0ZTVm IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYworKysgYi9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwpAQCAtNzIxLDYgKzcyMSw3IEBAIGNo ZWNrX2V4Y2x1c2lvbl9vcl91bmlxdWVfY29uc3RyYWludChSZWxhdGlvbiBoZWFwLCBSZWxhdGlv biBpbmRleCwKIAlpbnQJCQlpOwogCWJvb2wJCWNvbmZsaWN0OwogCWJvb2wJCWZvdW5kX3NlbGY7 CisJYm9vbAkJcmVjaGVjazsKIAlFeHByQ29udGV4dCAqZWNvbnRleHQ7CiAJVHVwbGVUYWJsZVNs b3QgKmV4aXN0aW5nX3Nsb3Q7CiAJVHVwbGVUYWJsZVNsb3QgKnNhdmVfc2NhbnR1cGxlOwpAQCAt ODIzLDEyICs4MjQsMTMgQEAgY2hlY2tfZXhjbHVzaW9uX29yX3VuaXF1ZV9jb25zdHJhaW50KFJl bGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LAogcmV0cnk6CiAJY29uZmxpY3QgPSBmYWxzZTsK IAlmb3VuZF9zZWxmID0gZmFsc2U7Ci0JaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFw LCBpbmRleCwKKwlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXAsIGluZGV4LCBmYWxz ZSwKIAkJCQkJCQkJICZEaXJ0eVNuYXBzaG90LCBOVUxMLCBpbmRua2V5YXR0cywgMCwKIAkJCQkJ CQkJIFNPX05PTkUpOwogCWluZGV4X3Jlc2NhbihpbmRleF9zY2FuLCBzY2Fua2V5cywgaW5kbmtl eWF0dHMsIE5VTEwsIDApOwogCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2Fu LCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgZXhpc3Rpbmdfc2xvdCkpCisJd2hpbGUgKHRhYmxlX2lu ZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwKKwkJCQkJ CQkJCWV4aXN0aW5nX3Nsb3QsICZyZWNoZWNrKSkKIAl7CiAJCVRyYW5zYWN0aW9uSWQgeHdhaXQ7 CiAJCVhMVFdfT3BlcglyZWFzb25fd2FpdDsKQEAgLTg1OCw3ICs4NjAsNyBAQCByZXRyeToKIAkJ CQkJICAgZXhpc3RpbmdfdmFsdWVzLCBleGlzdGluZ19pc251bGwpOwogCiAJCS8qIElmIGxvc3N5 IGluZGV4c2NhbiwgbXVzdCByZWNoZWNrIHRoZSBjb25kaXRpb24gKi8KLQkJaWYgKGluZGV4X3Nj YW4tPnhzX3JlY2hlY2spCisJCWlmIChyZWNoZWNrKQogCQl7CiAJCQlpZiAoIWluZGV4X3JlY2hl Y2tfY29uc3RyYWludChpbmRleCwKIAkJCQkJCQkJCQkgIGNvbnN0cl9wcm9jcywKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKaW5kZXggYjJjYTVjYmYxLi43NWRiNWYzNjMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCkBAIC0xOTEsNiArMTkxLDcgQEAg UmVsYXRpb25GaW5kUmVwbFR1cGxlQnlJbmRleChSZWxhdGlvbiByZWwsIE9pZCBpZHhvaWQsCiAJ VHJhbnNhY3Rpb25JZCB4d2FpdDsKIAlSZWxhdGlvbglpZHhyZWw7CiAJYm9vbAkJZm91bmQ7CisJ Ym9vbAkJcmVjaGVjazsKIAlUeXBlQ2FjaGVFbnRyeSAqKmVxID0gTlVMTDsKIAlib29sCQlpc0lk eFNhZmVUb1NraXBEdXBsaWNhdGVzOwogCkBAIC0yMDUsNyArMjA2LDcgQEAgUmVsYXRpb25GaW5k UmVwbFR1cGxlQnlJbmRleChSZWxhdGlvbiByZWwsIE9pZCBpZHhvaWQsCiAJc2tleV9hdHRvZmYg PSBidWlsZF9yZXBsaW5kZXhfc2Nhbl9rZXkoc2tleSwgcmVsLCBpZHhyZWwsIHNlYXJjaHNsb3Qp OwogCiAJLyogU3RhcnQgYW4gaW5kZXggc2Nhbi4gKi8KLQlzY2FuID0gaW5kZXhfYmVnaW5zY2Fu KHJlbCwgaWR4cmVsLAorCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsIGZhbHNl LAogCQkJCQkJICAgJnNuYXAsIE5VTEwsIHNrZXlfYXR0b2ZmLCAwLCBTT19OT05FKTsKIAogcmV0 cnk6CkBAIC0yMTQsNyArMjE1LDcgQEAgcmV0cnk6CiAJaW5kZXhfcmVzY2FuKHNjYW4sIHNrZXks IHNrZXlfYXR0b2ZmLCBOVUxMLCAwKTsKIAogCS8qIFRyeSB0byBmaW5kIHRoZSB0dXBsZSAqLwot CXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIG91 dHNsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNj YW5EaXJlY3Rpb24sIG91dHNsb3QsICZyZWNoZWNrKSkKIAl7CiAJCS8qCiAJCSAqIEF2b2lkIGV4 cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0aGUgaW5kZXggaXMgcHJpbWFyeSBrZXkgb3IKQEAg LTIyOCw2ICsyMjksOCBAQCByZXRyeToKIAkJCWlmICghdHVwbGVzX2VxdWFsKG91dHNsb3QsIHNl YXJjaHNsb3QsIGVxLCBOVUxMKSkKIAkJCQljb250aW51ZTsKIAkJfQorCQllbHNlCisJCQlBc3Nl cnQoIXJlY2hlY2spOwogCiAJCUV4ZWNNYXRlcmlhbGl6ZVNsb3Qob3V0c2xvdCk7CiAKQEAgLTY0 NSw2ICs2NDgsNyBAQCBSZWxhdGlvbkZpbmREZWxldGVkVHVwbGVJbmZvQnlJbmRleChSZWxhdGlv biByZWwsIE9pZCBpZHhvaWQsCiAJVHVwbGVUYWJsZVNsb3QgKnNjYW5zbG90OwogCVR5cGVDYWNo ZUVudHJ5ICoqZXEgPSBOVUxMOwogCWJvb2wJCWlzSWR4U2FmZVRvU2tpcER1cGxpY2F0ZXM7CisJ Ym9vbAkJcmVjaGVjazsKIAlUdXBsZURlc2MJZGVzYyBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFkg PSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CiAKIAlBc3NlcnQoZXF1YWxUdXBsZURlc2NzKGRlc2Ms IHNlYXJjaHNsb3QtPnR0c190dXBsZURlc2NyaXB0b3IpKTsKQEAgLTY2OSwxMyArNjczLDEzIEBA IFJlbGF0aW9uRmluZERlbGV0ZWRUdXBsZUluZm9CeUluZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlk eG9pZCwKIAkgKiBub3QgeWV0IGNvbW1pdHRlZCBvciB0aG9zZSBqdXN0IGNvbW1pdHRlZCBwcmlv ciB0byB0aGUgc2NhbiBhcmUKIAkgKiBleGNsdWRlZCBpbiB1cGRhdGVfbW9zdF9yZWNlbnRfZGVs ZXRpb25faW5mbygpLgogCSAqLwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWws CisJc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwgZmFsc2UsCiAJCQkJCQkgICBT bmFwc2hvdEFueSwgTlVMTCwgc2tleV9hdHRvZmYsIDAsIFNPX05PTkUpOwogCiAJaW5kZXhfcmVz Y2FuKHNjYW4sIHNrZXksIHNrZXlfYXR0b2ZmLCBOVUxMLCAwKTsKIAogCS8qIFRyeSB0byBmaW5k IHRoZSB0dXBsZSAqLwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNj YW5EaXJlY3Rpb24sIHNjYW5zbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90 KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzY2Fuc2xvdCwgJnJlY2hlY2spKQogCXsKIAkJ LyoKIAkJICogQXZvaWQgZXhwZW5zaXZlIGVxdWFsaXR5IGNoZWNrIGlmIHRoZSBpbmRleCBpcyBw cmltYXJ5IGtleSBvcgpAQCAtNjg5LDYgKzY5Myw4IEBAIFJlbGF0aW9uRmluZERlbGV0ZWRUdXBs ZUluZm9CeUluZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAkJCWlmICghdHVwbGVzX2Vx dWFsKHNjYW5zbG90LCBzZWFyY2hzbG90LCBlcSwgTlVMTCkpCiAJCQkJY29udGludWU7CiAJCX0K KwkJZWxzZQorCQkJQXNzZXJ0KCFyZWNoZWNrKTsKIAogCQl1cGRhdGVfbW9zdF9yZWNlbnRfZGVs ZXRpb25faW5mbyhzY2Fuc2xvdCwgb2xkZXN0eG1pbiwgZGVsZXRlX3hpZCwKIAkJCQkJCQkJCQkg ZGVsZXRlX3RpbWUsIGRlbGV0ZV9vcmlnaW4pOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJp dG1hcEluZGV4c2Nhbi5jCmluZGV4IDc5Nzg1MTRlMS4uOTBiMDEwZjliIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jCkBAIC0yMDQsNiArMjA0LDcgQEAgRXhl Y0VuZEJpdG1hcEluZGV4U2NhbihCaXRtYXBJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICogd2hp Y2ggd2lsbCBoYXZlIGEgbmV3IEJpdG1hcEluZGV4U2NhblN0YXRlIGFuZCB6ZXJvZWQgc3RhdHMu CiAJCSAqLwogCQl3aW5zdHJ1bWVudC0+bnNlYXJjaGVzICs9IG5vZGUtPmJpc3NfSW5zdHJ1bWVu dC0+bnNlYXJjaGVzOworCQlBc3NlcnQobm9kZS0+Ymlzc19JbnN0cnVtZW50LT5udGFibGV0dXBs ZWZldGNoZXMgPT0gMCk7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhv bmx5c2Nhbi5jCmluZGV4IGQ1MjAxMmU4YS4uMjhhMjNkYjBiIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJhY2Nl c3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3R1cGRlc2MuaCIKLSNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgogI2luY2x1 ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAj aW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudC5oIgpAQCAtNDIsMTQgKzQxLDExIEBACiAjaW5j bHVkZSAiZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgog I2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUu aCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgog CiAKIHN0YXRpYyBUdXBsZVRhYmxlU2xvdCAqSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3Rh dGUgKm5vZGUpOwotc3RhdGljIHZvaWQgU3RvcmVJbmRleFR1cGxlKEluZGV4T25seVNjYW5TdGF0 ZSAqbm9kZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCi0JCQkJCQkJSW5kZXhUdXBsZSBpdHVwLCBU dXBsZURlc2MgaXR1cGRlc2MpOwogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTY2LDcgKzYyLDcgQEAgSW5k ZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJU2NhbkRpcmVjdGlvbiBkaXJl Y3Rpb247CiAJSW5kZXhTY2FuRGVzYyBzY2FuZGVzYzsKIAlUdXBsZVRhYmxlU2xvdCAqc2xvdDsK LQlJdGVtUG9pbnRlciB0aWQ7CisJYm9vbAkJcmVjaGVjazsKIAogCS8qCiAJICogZXh0cmFjdCBu ZWNlc3NhcnkgaW5mb3JtYXRpb24gZnJvbSBpbmRleCBzY2FuIG5vZGUKQEAgLTkyLDYgKzg4LDcg QEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCSAqLwogCQlzY2Fu ZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCiAJCQkJ CQkJCSAgIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgICB0cnVlLAogCQkJCQkJ CQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJCQkJCQkgICBub2RlLT5pb3NzX0luc3RydW1l bnQsCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCkBAIC0xMDAsMTEgKzk3LDcg QEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCQkJCQkJCSAgIFNP X0hJTlRfUkVMX1JFQURfT05MWSA6IFNPX05PTkUpOwogCiAJCW5vZGUtPmlvc3NfU2NhbkRlc2Mg PSBzY2FuZGVzYzsKLQotCi0JCS8qIFNldCBpdCB1cCBmb3IgaW5kZXgtb25seSBzY2FuICovCi0J CW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCA9IHRydWU7Ci0JCW5vZGUtPmlvc3Nf Vk1CdWZmZXIgPSBJbnZhbGlkQnVmZmVyOworCQlBc3NlcnQobm9kZS0+aW9zc19TY2FuRGVzYy0+ eHNfd2FudF9pdHVwKTsKIAogCQkvKgogCQkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1 bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kCkBAIC0xMjEsMTA0ICsxMTQsMTQg QEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJLyoKIAkgKiBPSywg bm93IHRoYXQgd2UgaGF2ZSB3aGF0IHdlIG5lZWQsIGZldGNoIHRoZSBuZXh0IHR1cGxlLgogCSAq LwotCXdoaWxlICgodGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbmRlc2MsIGRpcmVjdGlvbikp ICE9IE5VTEwpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgZGly ZWN0aW9uLCBzbG90LCAmcmVjaGVjaykpCiAJewotCQlib29sCQl0dXBsZV9mcm9tX2hlYXAgPSBm YWxzZTsKLQogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCi0JCS8qCi0JCSAqIFdlIGNhbiBz a2lwIHRoZSBoZWFwIGZldGNoIGlmIHRoZSBUSUQgcmVmZXJlbmNlcyBhIGhlYXAgcGFnZSBvbgot CQkgKiB3aGljaCBhbGwgdHVwbGVzIGFyZSBrbm93biB2aXNpYmxlIHRvIGV2ZXJ5Ym9keS4gIElu IGFueSBjYXNlLAotCQkgKiB3ZSdsbCB1c2UgdGhlIGluZGV4IHR1cGxlIG5vdCB0aGUgaGVhcCB0 dXBsZSBhcyB0aGUgZGF0YSBzb3VyY2UuCi0JCSAqCi0JCSAqIE5vdGUgb24gTWVtb3J5IE9yZGVy aW5nIEVmZmVjdHM6IHZpc2liaWxpdHltYXBfZ2V0X3N0YXR1cyBkb2VzIG5vdAotCQkgKiBsb2Nr IHRoZSB2aXNpYmlsaXR5IG1hcCBidWZmZXIsIGFuZCB0aGVyZWZvcmUgdGhlIHJlc3VsdCB3ZSBy ZWFkCi0JCSAqIGhlcmUgY291bGQgYmUgc2xpZ2h0bHkgc3RhbGUuICBIb3dldmVyLCBpdCBjYW4n dCBiZSBzdGFsZSBlbm91Z2ggdG8KLQkJICogbWF0dGVyLgotCQkgKgotCQkgKiBXZSBuZWVkIHRv IGRldGVjdCBjbGVhcmluZyBhIFZNIGJpdCBkdWUgdG8gYW4gaW5zZXJ0IHJpZ2h0IGF3YXksCi0J CSAqIGJlY2F1c2UgdGhlIHR1cGxlIGlzIHByZXNlbnQgaW4gdGhlIGluZGV4IHBhZ2UgYnV0IG5v dCB2aXNpYmxlLiBUaGUKLQkJICogcmVhZGluZyBvZiB0aGUgVElEIGJ5IHRoaXMgc2NhbiAodXNp bmcgYSBzaGFyZWQgbG9jayBvbiB0aGUgaW5kZXgKLQkJICogYnVmZmVyKSBpcyBzZXJpYWxpemVk IHdpdGggdGhlIGluc2VydCBvZiB0aGUgVElEIGludG8gdGhlIGluZGV4Ci0JCSAqICh1c2luZyBh biBleGNsdXNpdmUgbG9jayBvbiB0aGUgaW5kZXggYnVmZmVyKS4gQmVjYXVzZSB0aGUgVk0gYml0 Ci0JCSAqIGlzIGNsZWFyZWQgYmVmb3JlIHVwZGF0aW5nIHRoZSBpbmRleCwgYW5kIGxvY2tpbmcv dW5sb2NraW5nIG9mIHRoZQotCQkgKiBpbmRleCBwYWdlIGFjdHMgYXMgYSBmdWxsIG1lbW9yeSBi YXJyaWVyLCB3ZSBhcmUgc3VyZSB0byBzZWUgdGhlCi0JCSAqIGNsZWFyZWQgYml0IGlmIHdlIHNl ZSBhIHJlY2VudGx5LWluc2VydGVkIFRJRC4KLQkJICoKLQkJICogRGVsZXRlcyBkbyBub3QgdXBk YXRlIHRoZSBpbmRleCBwYWdlIChvbmx5IFZBQ1VVTSB3aWxsIGNsZWFyIG91dAotCQkgKiB0aGUg VElEKSwgc28gdGhlIGNsZWFyaW5nIG9mIHRoZSBWTSBiaXQgYnkgYSBkZWxldGUgaXMgbm90Ci0J CSAqIHNlcmlhbGl6ZWQgd2l0aCB0aGlzIHRlc3QgYmVsb3csIGFuZCB3ZSBtYXkgc2VlIGEgdmFs dWUgdGhhdCBpcwotCQkgKiBzaWduaWZpY2FudGx5IHN0YWxlLiBIb3dldmVyLCB3ZSBkb24ndCBj YXJlIGFib3V0IHRoZSBkZWxldGUgcmlnaHQKLQkJICogYXdheSwgYmVjYXVzZSB0aGUgdHVwbGUg aXMgc3RpbGwgdmlzaWJsZSB1bnRpbCB0aGUgZGVsZXRpbmcKLQkJICogdHJhbnNhY3Rpb24gY29t bWl0cyBvciB0aGUgc3RhdGVtZW50IGVuZHMgKGlmIGl0J3Mgb3VyCi0JCSAqIHRyYW5zYWN0aW9u KS4gSW4gZWl0aGVyIGNhc2UsIHRoZSBsb2NrIG9uIHRoZSBWTSBidWZmZXIgd2lsbCBoYXZlCi0J CSAqIGJlZW4gcmVsZWFzZWQgKGFjdGluZyBhcyBhIHdyaXRlIGJhcnJpZXIpIGFmdGVyIGNsZWFy aW5nIHRoZSBiaXQuCi0JCSAqIEFuZCBmb3IgdXMgdG8gaGF2ZSBhIHNuYXBzaG90IHRoYXQgaW5j bHVkZXMgdGhlIGRlbGV0aW5nCi0JCSAqIHRyYW5zYWN0aW9uIChtYWtpbmcgdGhlIHR1cGxlIGlu dmlzaWJsZSksIHdlIG11c3QgaGF2ZSBhY3F1aXJlZAotCQkgKiBQcm9jQXJyYXlMb2NrIGFmdGVy IHRoYXQgdGltZSwgYWN0aW5nIGFzIGEgcmVhZCBiYXJyaWVyLgotCQkgKgotCQkgKiBJdCdzIHdv cnRoIGdvaW5nIHRocm91Z2ggdGhpcyBjb21wbGV4aXR5IHRvIGF2b2lkIG5lZWRpbmcgdG8gbG9j awotCQkgKiB0aGUgVk0gYnVmZmVyLCB3aGljaCBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBjb250 ZW50aW9uLgotCQkgKi8KLQkJaWYgKCFWTV9BTExfVklTSUJMRShzY2FuZGVzYy0+aGVhcFJlbGF0 aW9uLAotCQkJCQkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKLQkJCQkJCQkmbm9k ZS0+aW9zc19WTUJ1ZmZlcikpCi0JCXsKLQkJCS8qCi0JCQkgKiBSYXRzLCB3ZSBoYXZlIHRvIHZp c2l0IHRoZSBoZWFwIHRvIGNoZWNrIHZpc2liaWxpdHkuCi0JCQkgKi8KLQkJCUluc3RyQ291bnRU dXBsZXMyKG5vZGUsIDEpOwotCQkJaWYgKCFpbmRleF9mZXRjaF9oZWFwKHNjYW5kZXNjLCBub2Rl LT5pb3NzX1RhYmxlU2xvdCkpCi0JCQkJY29udGludWU7CQkvKiBubyB2aXNpYmxlIHR1cGxlLCB0 cnkgbmV4dCBpbmRleCBlbnRyeSAqLwotCi0JCQlFeGVjQ2xlYXJUdXBsZShub2RlLT5pb3NzX1Rh YmxlU2xvdCk7Ci0KLQkJCS8qCi0JCQkgKiBPbmx5IE1WQ0Mgc25hcHNob3RzIGFyZSBzdXBwb3J0 ZWQgaGVyZSwgc28gdGhlcmUgc2hvdWxkIGJlIG5vCi0JCQkgKiBuZWVkIHRvIGtlZXAgZm9sbG93 aW5nIHRoZSBIT1QgY2hhaW4gb25jZSBhIHZpc2libGUgZW50cnkgaGFzCi0JCQkgKiBiZWVuIGZv dW5kLiAgSWYgd2UgZGlkIHdhbnQgdG8gYWxsb3cgdGhhdCwgd2UnZCBuZWVkIHRvIGtlZXAKLQkJ CSAqIG1vcmUgc3RhdGUgdG8gcmVtZW1iZXIgbm90IHRvIGNhbGwgaW5kZXhfZ2V0bmV4dF90aWQg bmV4dCB0aW1lLgotCQkJICovCi0JCQlpZiAoc2NhbmRlc2MtPnhzX2hlYXBfY29udGludWUpCi0J CQkJZWxvZyhFUlJPUiwgIm5vbi1NVkNDIHNuYXBzaG90cyBhcmUgbm90IHN1cHBvcnRlZCBpbiBp bmRleC1vbmx5IHNjYW5zIik7Ci0KLQkJCS8qCi0JCQkgKiBOb3RlOiBhdCB0aGlzIHBvaW50IHdl IGFyZSBob2xkaW5nIGEgcGluIG9uIHRoZSBoZWFwIHBhZ2UsIGFzCi0JCQkgKiByZWNvcmRlZCBp biBzY2FuZGVzYy0+eHNfY2J1Zi4gIFdlIGNvdWxkIHJlbGVhc2UgdGhhdCBwaW4gbm93LAotCQkJ ICogYnV0IGl0J3Mgbm90IGNsZWFyIHdoZXRoZXIgaXQncyBhIHdpbiB0byBkbyBzby4gIFRoZSBu ZXh0IGluZGV4Ci0JCQkgKiBlbnRyeSBtaWdodCByZXF1aXJlIGEgdmlzaXQgdG8gdGhlIHNhbWUg aGVhcCBwYWdlLgotCQkJICovCi0KLQkJCXR1cGxlX2Zyb21faGVhcCA9IHRydWU7Ci0JCX0KLQot CQkvKgotCQkgKiBGaWxsIHRoZSBzY2FuIHR1cGxlIHNsb3Qgd2l0aCBkYXRhIGZyb20gdGhlIGlu ZGV4LiAgVGhpcyBtaWdodCBiZQotCQkgKiBwcm92aWRlZCBpbiBlaXRoZXIgSGVhcFR1cGxlIG9y IEluZGV4VHVwbGUgZm9ybWF0LiAgQ29uY2VpdmFibHkgYW4KLQkJICogaW5kZXggQU0gbWlnaHQg ZmlsbCBib3RoIGZpZWxkcywgaW4gd2hpY2ggY2FzZSB3ZSBwcmVmZXIgdGhlIGhlYXAKLQkJICog Zm9ybWF0LCBzaW5jZSBpdCdzIHByb2JhYmx5IGEgYml0IGNoZWFwZXIgdG8gZmlsbCBhIHNsb3Qg ZnJvbS4KLQkJICovCi0JCWlmIChzY2FuZGVzYy0+eHNfaGl0dXApCi0JCXsKLQkJCS8qCi0JCQkg KiBXZSBkb24ndCB0YWtlIHRoZSB0cm91YmxlIHRvIHZlcmlmeSB0aGF0IHRoZSBwcm92aWRlZCB0 dXBsZSBoYXMKLQkJCSAqIGV4YWN0bHkgdGhlIHNsb3QncyBmb3JtYXQsIGJ1dCBpdCBzZWVtcyB3 b3J0aCBkb2luZyBhIHF1aWNrCi0JCQkgKiBjaGVjayBvbiB0aGUgbnVtYmVyIG9mIGZpZWxkcy4K LQkJCSAqLwotCQkJQXNzZXJ0KHNsb3QtPnR0c190dXBsZURlc2NyaXB0b3ItPm5hdHRzID09Ci0J CQkJICAgc2NhbmRlc2MtPnhzX2hpdHVwZGVzYy0+bmF0dHMpOwotCQkJRXhlY0ZvcmNlU3RvcmVI ZWFwVHVwbGUoc2NhbmRlc2MtPnhzX2hpdHVwLCBzbG90LCBmYWxzZSk7Ci0JCX0KLQkJZWxzZSBp ZiAoc2NhbmRlc2MtPnhzX2l0dXApCi0JCQlTdG9yZUluZGV4VHVwbGUobm9kZSwgc2xvdCwgc2Nh bmRlc2MtPnhzX2l0dXAsIHNjYW5kZXNjLT54c19pdHVwZGVzYyk7Ci0JCWVsc2UKLQkJCWVsb2co RVJST1IsICJubyBkYXRhIHJldHVybmVkIGZvciBpbmRleC1vbmx5IHNjYW4iKTsKLQogCQkvKgog CQkgKiBJZiB0aGUgaW5kZXggd2FzIGxvc3N5LCB3ZSBoYXZlIHRvIHJlY2hlY2sgdGhlIGluZGV4 IHF1YWxzLgogCQkgKi8KLQkJaWYgKHNjYW5kZXNjLT54c19yZWNoZWNrKQorCQlpZiAocmVjaGVj aykKIAkJewogCQkJZWNvbnRleHQtPmVjeHRfc2NhbnR1cGxlID0gc2xvdDsKIAkJCWlmICghRXhl Y1F1YWxBbmRSZXNldChub2RlLT5yZWNoZWNrcXVhbCwgZWNvbnRleHQpKQpAQCAtMjQxLDE2ICsx NDQsNiBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJCWVyZXBv cnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwK IAkJCQkJIGVycm1zZygibG9zc3kgZGlzdGFuY2UgZnVuY3Rpb25zIGFyZSBub3Qgc3VwcG9ydGVk IGluIGluZGV4LW9ubHkgc2NhbnMiKSkpOwotCi0JCS8qCi0JCSAqIElmIHdlIGRpZG4ndCBhY2Nl c3MgdGhlIGhlYXAsIHRoZW4gd2UnbGwgbmVlZCB0byB0YWtlIGEgcHJlZGljYXRlCi0JCSAqIGxv Y2sgZXhwbGljaXRseSwgYXMgaWYgd2UgaGFkLiAgRm9yIG5vdyB3ZSBkbyB0aGF0IGF0IHBhZ2Ug bGV2ZWwuCi0JCSAqLwotCQlpZiAoIXR1cGxlX2Zyb21faGVhcCkKLQkJCVByZWRpY2F0ZUxvY2tQ YWdlKHNjYW5kZXNjLT5oZWFwUmVsYXRpb24sCi0JCQkJCQkJICBJdGVtUG9pbnRlckdldEJsb2Nr TnVtYmVyKHRpZCksCi0JCQkJCQkJICBlc3RhdGUtPmVzX3NuYXBzaG90KTsKLQogCQlyZXR1cm4g c2xvdDsKIAl9CiAKQEAgLTI2MSw2MiArMTU0LDYgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlT Y2FuU3RhdGUgKm5vZGUpCiAJcmV0dXJuIEV4ZWNDbGVhclR1cGxlKHNsb3QpOwogfQogCi0vKgot ICogU3RvcmVJbmRleFR1cGxlCi0gKgkJRmlsbCB0aGUgc2xvdCB3aXRoIGRhdGEgZnJvbSB0aGUg aW5kZXggdHVwbGUuCi0gKgotICogQXQgc29tZSBwb2ludCB0aGlzIG1pZ2h0IGJlIGdlbmVyYWxs eS11c2VmdWwgZnVuY3Rpb25hbGl0eSwgYnV0Ci0gKiByaWdodCBub3cgd2UgZG9uJ3QgbmVlZCBp dCBlbHNld2hlcmUuCi0gKi8KLXN0YXRpYyB2b2lkCi1TdG9yZUluZGV4VHVwbGUoSW5kZXhPbmx5 U2NhblN0YXRlICpub2RlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKLQkJCQlJbmRleFR1cGxlIGl0 dXAsIFR1cGxlRGVzYyBpdHVwZGVzYykKLXsKLQkvKgotCSAqIE5vdGU6IHdlIG11c3QgdXNlIHRo ZSB0dXBkZXNjIHN1cHBsaWVkIGJ5IHRoZSBBTSBpbiBpbmRleF9kZWZvcm1fdHVwbGUsCi0JICog bm90IHRoZSBzbG90J3MgdHVwZGVzYywgaW4gY2FzZSB0aGUgbGF0dGVyIGhhcyBkaWZmZXJlbnQg ZGF0YXR5cGVzCi0JICogKHRoaXMgaGFwcGVucyBmb3IgYnRyZWUgbmFtZV9vcHMgaW4gcGFydGlj dWxhcikuICBUaGV5J2QgYmV0dGVyIGhhdmUKLQkgKiB0aGUgc2FtZSBudW1iZXIgb2YgY29sdW1u cyB0aG91Z2gsIGFzIHdlbGwgYXMgYmVpbmcgZGF0YXR5cGUtY29tcGF0aWJsZQotCSAqIHdoaWNo IGlzIHNvbWV0aGluZyB3ZSBjYW4ndCBzbyBlYXNpbHkgY2hlY2suCi0JICovCi0JQXNzZXJ0KHNs b3QtPnR0c190dXBsZURlc2NyaXB0b3ItPm5hdHRzID09IGl0dXBkZXNjLT5uYXR0cyk7Ci0KLQlF eGVjQ2xlYXJUdXBsZShzbG90KTsKLQlpbmRleF9kZWZvcm1fdHVwbGUoaXR1cCwgaXR1cGRlc2Ms IHNsb3QtPnR0c192YWx1ZXMsIHNsb3QtPnR0c19pc251bGwpOwotCi0JLyoKLQkgKiBDb3B5IGFs bCBuYW1lIGNvbHVtbnMgc3RvcmVkIGFzIGNzdHJpbmdzIGJhY2sgaW50byBhIE5BTUVEQVRBTEVO IGJ5dGUKLQkgKiBzaXplZCBhbGxvY2F0aW9uLiAgV2UgbWFyayB0aGlzIGJyYW5jaCBhcyB1bmxp a2VseSBhcyBnZW5lcmFsbHkgIm5hbWUiCi0JICogaXMgdXNlZCBvbmx5IGZvciB0aGUgc3lzdGVt IGNhdGFsb2dzIGFuZCB0aGlzIHdvdWxkIGhhdmUgdG8gYmUgYSB1c2VyCi0JICogcXVlcnkgcnVu bmluZyBvbiB0aG9zZSBvciBzb21lIG90aGVyIHVzZXIgdGFibGUgd2l0aCBhbiBpbmRleCBvbiBh IG5hbWUKLQkgKiBjb2x1bW4uCi0JICovCi0JaWYgKHVubGlrZWx5KG5vZGUtPmlvc3NfTmFtZUNT dHJpbmdBdHROdW1zICE9IE5VTEwpKQotCXsKLQkJaW50CQkJYXR0Y291bnQgPSBub2RlLT5pb3Nz X05hbWVDU3RyaW5nQ291bnQ7Ci0KLQkJZm9yIChpbnQgaWR4ID0gMDsgaWR4IDwgYXR0Y291bnQ7 IGlkeCsrKQotCQl7Ci0JCQlpbnQJCQlhdHRudW0gPSBub2RlLT5pb3NzX05hbWVDU3RyaW5nQXR0 TnVtc1tpZHhdOwotCQkJTmFtZQkJbmFtZTsKLQotCQkJLyogc2tpcCBudWxsIERhdHVtcyAqLwot CQkJaWYgKHNsb3QtPnR0c19pc251bGxbYXR0bnVtXSkKLQkJCQljb250aW51ZTsKLQotCQkJLyog YWxsb2NhdGUgdGhlIE5BTUVEQVRBTEVOIGFuZCBjb3B5IHRoZSBkYXR1bSBpbnRvIHRoYXQgbWVt b3J5ICovCi0JCQluYW1lID0gKE5hbWUpIE1lbW9yeUNvbnRleHRBbGxvYyhub2RlLT5zcy5wcy5w c19FeHByQ29udGV4dC0+ZWN4dF9wZXJfdHVwbGVfbWVtb3J5LAotCQkJCQkJCQkJCQkgTkFNRURB VEFMRU4pOwotCi0JCQkvKiB1c2UgbmFtZXN0cmNweSB0byB6ZXJvLXBhZCBhbGwgdHJhaWxpbmcg Ynl0ZXMgKi8KLQkJCW5hbWVzdHJjcHkobmFtZSwgRGF0dW1HZXRDU3RyaW5nKHNsb3QtPnR0c192 YWx1ZXNbYXR0bnVtXSkpOwotCQkJc2xvdC0+dHRzX3ZhbHVlc1thdHRudW1dID0gTmFtZUdldERh dHVtKG5hbWUpOwotCQl9Ci0JfQotCi0JRXhlY1N0b3JlVmlydHVhbFR1cGxlKHNsb3QpOwotfQot CiAvKgogICogSW5kZXhPbmx5UmVjaGVjayAtLSBhY2Nlc3MgbWV0aG9kIHJvdXRpbmUgdG8gcmVj aGVjayBhIHR1cGxlIGluIEV2YWxQbGFuUXVhbAogICoKQEAgLTQxMCwxMyArMjQ3LDYgQEAgRXhl Y0VuZEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCWluZGV4UmVsYXRp b25EZXNjID0gbm9kZS0+aW9zc19SZWxhdGlvbkRlc2M7CiAJaW5kZXhTY2FuRGVzYyA9IG5vZGUt Pmlvc3NfU2NhbkRlc2M7CiAKLQkvKiBSZWxlYXNlIFZNIGJ1ZmZlciBwaW4sIGlmIGFueS4gKi8K LQlpZiAobm9kZS0+aW9zc19WTUJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQotCXsKLQkJUmVsZWFz ZUJ1ZmZlcihub2RlLT5pb3NzX1ZNQnVmZmVyKTsKLQkJbm9kZS0+aW9zc19WTUJ1ZmZlciA9IElu dmFsaWRCdWZmZXI7Ci0JfQotCiAJLyoKIAkgKiBXaGVuIGVuZGluZyBhIHBhcmFsbGVsIHdvcmtl ciwgY29weSB0aGUgc3RhdGlzdGljcyBnYXRoZXJlZCBieSB0aGUKIAkgKiB3b3JrZXIgYmFjayBp bnRvIHNoYXJlZCBtZW1vcnkgc28gdGhhdCBpdCBjYW4gYmUgcGlja2VkIHVwIGJ5IHRoZSBtYWlu CkBAIC00MzYsNiArMjY2LDcgQEAgRXhlY0VuZEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhblN0 YXRlICpub2RlKQogCQkgKiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgSW5kZXhPbmx5U2NhblN0YXRl IGFuZCB6ZXJvZWQgc3RhdHMuCiAJCSAqLwogCQl3aW5zdHJ1bWVudC0+bnNlYXJjaGVzICs9IG5v ZGUtPmlvc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOworCQl3aW5zdHJ1bWVudC0+bnRhYmxldHVw bGVmZXRjaGVzICs9IG5vZGUtPmlvc3NfSW5zdHJ1bWVudC0+bnRhYmxldHVwbGVmZXRjaGVzOwog CX0KIAogCS8qCkBAIC01MzUsOCArMzY2LDYgQEAgRXhlY0luaXRJbmRleE9ubHlTY2FuKEluZGV4 T25seVNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCVJlbGF0aW9uCWlu ZGV4UmVsYXRpb247CiAJTE9DS01PREUJbG9ja21vZGU7CiAJVHVwbGVEZXNjCXR1cERlc2M7Ci0J aW50CQkJaW5kbmtleWF0dHM7Ci0JaW50CQkJbmFtZWNvdW50OwogCiAJLyoKIAkgKiBjcmVhdGUg c3RhdGUgc3RydWN0dXJlCkBAIC01NzMsMTUgKzQwMiw2IEBAIEV4ZWNJbml0SW5kZXhPbmx5U2Nh bihJbmRleE9ubHlTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJCQkJ CSAgJlRUU09wc1ZpcnR1YWwsCiAJCQkJCQkgIDApOwogCi0JLyoKLQkgKiBXZSBuZWVkIGFub3Ro ZXIgc2xvdCwgaW4gYSBmb3JtYXQgdGhhdCdzIHN1aXRhYmxlIGZvciB0aGUgdGFibGUgQU0sIGZv cgotCSAqIHdoZW4gd2UgbmVlZCB0byBmZXRjaCBhIHR1cGxlIGZyb20gdGhlIHRhYmxlIGZvciBy ZWNoZWNraW5nIHZpc2liaWxpdHkuCi0JICovCi0JaW5kZXhzdGF0ZS0+aW9zc19UYWJsZVNsb3Qg PQotCQlFeGVjQWxsb2NUYWJsZVNsb3QoJmVzdGF0ZS0+ZXNfdHVwbGVUYWJsZSwKLQkJCQkJCSAg IFJlbGF0aW9uR2V0RGVzY3IoY3VycmVudFJlbGF0aW9uKSwKLQkJCQkJCSAgIHRhYmxlX3Nsb3Rf Y2FsbGJhY2tzKGN1cnJlbnRSZWxhdGlvbiksIDApOwotCiAJLyoKIAkgKiBJbml0aWFsaXplIHJl c3VsdCB0eXBlIGFuZCBwcm9qZWN0aW9uIGluZm8uICBUaGUgbm9kZSdzIHRhcmdldGxpc3Qgd2ls bAogCSAqIGNvbnRhaW4gVmFycyB3aXRoIHZhcm5vID0gSU5ERVhfVkFSLCByZWZlcmVuY2luZyB0 aGUgc2NhbiB0dXBsZS4KQEAgLTY3MSw0OCArNDkxLDYgQEAgRXhlY0luaXRJbmRleE9ubHlTY2Fu KEluZGV4T25seVNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQlpbmRl eHN0YXRlLT5pb3NzX1J1bnRpbWVDb250ZXh0ID0gTlVMTDsKIAl9CiAKLQlpbmRleHN0YXRlLT5p b3NzX05hbWVDU3RyaW5nQXR0TnVtcyA9IE5VTEw7Ci0JaW5kbmtleWF0dHMgPSBpbmRleFJlbGF0 aW9uLT5yZF9pbmRleC0+aW5kbmtleWF0dHM7Ci0JbmFtZWNvdW50ID0gMDsKLQotCS8qCi0JICog VGhlICJuYW1lIiB0eXBlIGZvciBidHJlZSB1c2VzIHRleHRfb3BzIHdoaWNoIHJlc3VsdHMgaW4g c3RvcmluZwotCSAqIGNzdHJpbmdzIGluIHRoZSBpbmRleGVkIGtleXMgcmF0aGVyIHRoYW4gbmFt ZXMuICBIZXJlIHdlIGRldGVjdCB0aGF0IGluCi0JICogYSBnZW5lcmljIHdheSBpbiBjYXNlIG90 aGVyIGluZGV4IEFNcyB3YW50IHRvIGRvIHRoZSBzYW1lIG9wdGltaXphdGlvbi4KLQkgKiBDaGVj ayBmb3Igb3BjbGFzc2VzIHdpdGggYW4gb3BjaW50eXBlIG9mIE5BTUVPSUQgYW5kIGFuIGluZGV4 IHR1cGxlCi0JICogZGVzY3JpcHRvciB3aXRoIENTVFJJTkdPSUQuICBJZiBhbnkgb2YgdGhlc2Ug YXJlIGZvdW5kLCBjcmVhdGUgYW4gYXJyYXkKLQkgKiBtYXJraW5nIHRoZSBpbmRleCBhdHRyaWJ1 dGUgbnVtYmVyIG9mIGVhY2ggb2YgdGhlbS4gIFN0b3JlSW5kZXhUdXBsZSgpCi0JICogaGFuZGxl cyBjb3B5aW5nIHRoZSBuYW1lIERhdHVtcyBpbnRvIGEgTkFNRURBVEFMRU4tYnl0ZSBhbGxvY2F0 aW9uLgotCSAqLwotCi0JLyogRmlyc3QsIGNvdW50IHRoZSBudW1iZXIgb2Ygc3VjaCBpbmRleCBr ZXlzICovCi0JZm9yIChpbnQgYXR0bnVtID0gMDsgYXR0bnVtIDwgaW5kbmtleWF0dHM7IGF0dG51 bSsrKQotCXsKLQkJaWYgKFR1cGxlRGVzY0F0dHIoaW5kZXhSZWxhdGlvbi0+cmRfYXR0LCBhdHRu dW0pLT5hdHR0eXBpZCA9PSBDU1RSSU5HT0lEICYmCi0JCQlpbmRleFJlbGF0aW9uLT5yZF9vcGNp bnR5cGVbYXR0bnVtXSA9PSBOQU1FT0lEKQotCQkJbmFtZWNvdW50Kys7Ci0JfQotCi0JaWYgKG5h bWVjb3VudCA+IDApCi0JewotCQlpbnQJCQlpZHggPSAwOwotCi0JCS8qCi0JCSAqIE5vdyBjcmVh dGUgYW4gYXJyYXkgdG8gbWFyayB0aGUgYXR0cmlidXRlIG51bWJlcnMgb2YgdGhlIGtleXMgdGhh dAotCQkgKiBuZWVkIHRvIGJlIGNvbnZlcnRlZCBmcm9tIGNzdHJpbmcgdG8gbmFtZS4KLQkJICov Ci0JCWluZGV4c3RhdGUtPmlvc3NfTmFtZUNTdHJpbmdBdHROdW1zID0gcGFsbG9jX2FycmF5KEF0 dHJOdW1iZXIsIG5hbWVjb3VudCk7Ci0KLQkJZm9yIChpbnQgYXR0bnVtID0gMDsgYXR0bnVtIDwg aW5kbmtleWF0dHM7IGF0dG51bSsrKQotCQl7Ci0JCQlpZiAoVHVwbGVEZXNjQXR0cihpbmRleFJl bGF0aW9uLT5yZF9hdHQsIGF0dG51bSktPmF0dHR5cGlkID09IENTVFJJTkdPSUQgJiYKLQkJCQlp bmRleFJlbGF0aW9uLT5yZF9vcGNpbnR5cGVbYXR0bnVtXSA9PSBOQU1FT0lEKQotCQkJCWluZGV4 c3RhdGUtPmlvc3NfTmFtZUNTdHJpbmdBdHROdW1zW2lkeCsrXSA9IChBdHRyTnVtYmVyKSBhdHRu dW07Ci0JCX0KLQl9Ci0KLQlpbmRleHN0YXRlLT5pb3NzX05hbWVDU3RyaW5nQ291bnQgPSBuYW1l Y291bnQ7Ci0KIAkvKgogCSAqIGFsbCBkb25lLgogCSAqLwpAQCAtNzY4LDE0ICs1NDYsMTQgQEAg RXhlY0luZGV4T25seVNjYW5Jbml0aWFsaXplRFNNKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwK IAlub2RlLT5pb3NzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUt PnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNj LAorCQkJCQkJCQkgdHJ1ZSwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfSW5zdHJ1bWVudCwKIAkJCQkJ CQkJIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bU9yZGVy QnlLZXlzLAogCQkJCQkJCQkgcGlzY2FuLAogCQkJCQkJCQkgU2NhblJlbElzUmVhZE9ubHkoJm5v ZGUtPnNzKSA/CiAJCQkJCQkJCSBTT19ISU5UX1JFTF9SRUFEX09OTFkgOiBTT19OT05FKTsKLQlu b2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXAgPSB0cnVlOwotCW5vZGUtPmlvc3NfVk1C dWZmZXIgPSBJbnZhbGlkQnVmZmVyOworCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193 YW50X2l0dXApOwogCiAJLyoKIAkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBv ciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kIHBhc3MKQEAgLTgxOCwxMyArNTk2LDE0IEBA IEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlhbGl6ZVdvcmtlcihJbmRleE9ubHlTY2FuU3RhdGUgKm5v ZGUsCiAJbm9kZS0+aW9zc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChu b2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCiAJCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9u RGVzYywKKwkJCQkJCQkJIHRydWUsCiAJCQkJCQkJCSBub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJ CQkJCQkJCSBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1P cmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2NhbiwKIAkJCQkJCQkJIFNjYW5SZWxJc1JlYWRPbmx5 KCZub2RlLT5zcykgPwogCQkJCQkJCQkgU09fSElOVF9SRUxfUkVBRF9PTkxZIDogU09fTk9ORSk7 Ci0Jbm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKKwlBc3NlcnQobm9k ZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwKTsKIAogCS8qCiAJICogSWYgbm8gcnVuLXRp bWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZCBwYXNz CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMgYi9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKaW5kZXggMzlmNjY5MWVlLi40NTdmYmRi MDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYworKysg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKQEAgLTg2LDYgKzg2LDcgQEAg SW5kZXhOZXh0KEluZGV4U2NhblN0YXRlICpub2RlKQogCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9u OwogCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2M7CiAJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CisJYm9v bAkJcmVjaGVjazsKIAogCS8qCiAJICogZXh0cmFjdCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZnJv bSBpbmRleCBzY2FuIG5vZGUKQEAgLTExMCw2ICsxMTEsNyBAQCBJbmRleE5leHQoSW5kZXhTY2Fu U3RhdGUgKm5vZGUpCiAJCSAqLwogCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5z cy5zc19jdXJyZW50UmVsYXRpb24sCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19SZWxhdGlvbkRlc2Ms CisJCQkJCQkJCSAgIGZhbHNlLAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJ CQkJCQkgICBub2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX051bVNj YW5LZXlzLApAQCAtMTMyLDcgKzEzNCw3IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9k ZSkKIAkvKgogCSAqIG9rLCBub3cgdGhhdCB3ZSBoYXZlIHdoYXQgd2UgbmVlZCwgZmV0Y2ggdGhl IG5leHQgdHVwbGUuCiAJICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywg ZGlyZWN0aW9uLCBzbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5k ZXNjLCBkaXJlY3Rpb24sIHNsb3QsICZyZWNoZWNrKSkKIAl7CiAJCUNIRUNLX0ZPUl9JTlRFUlJV UFRTKCk7CiAKQEAgLTE0MCw3ICsxNDIsNyBAQCBJbmRleE5leHQoSW5kZXhTY2FuU3RhdGUgKm5v ZGUpCiAJCSAqIElmIHRoZSBpbmRleCB3YXMgbG9zc3ksIHdlIGhhdmUgdG8gcmVjaGVjayB0aGUg aW5kZXggcXVhbHMgdXNpbmcKIAkJICogdGhlIGZldGNoZWQgdHVwbGUuCiAJCSAqLwotCQlpZiAo c2NhbmRlc2MtPnhzX3JlY2hlY2spCisJCWlmIChyZWNoZWNrKQogCQl7CiAJCQllY29udGV4dC0+ ZWN4dF9zY2FudHVwbGUgPSBzbG90OwogCQkJaWYgKCFFeGVjUXVhbEFuZFJlc2V0KG5vZGUtPmlu ZGV4cXVhbG9yaWcsIGVjb250ZXh0KSkKQEAgLTE3OCw2ICsxODAsNyBAQCBJbmRleE5leHRXaXRo UmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKIAlS ZW9yZGVyVHVwbGUgKnRvcG1vc3QgPSBOVUxMOwogCWJvb2wJCXdhc19leGFjdDsKKwlib29sCQly ZWNoZWNrOwogCURhdHVtCSAgICpsYXN0ZmV0Y2hlZF92YWxzOwogCWJvb2wJICAgKmxhc3RmZXRj aGVkX251bGxzOwogCWludAkJCWNtcDsKQEAgLTIwOCw2ICsyMTEsNyBAQCBJbmRleE5leHRXaXRo UmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhf YmVnaW5zY2FuKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJICAgbm9kZS0+ aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJICAgZmFsc2UsCiAJCQkJCQkJCSAgIGVzdGF0ZS0+ ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkg ICBub2RlLT5pc3NfTnVtU2NhbktleXMsCkBAIC0yNjYsNyArMjcwLDggQEAgSW5kZXhOZXh0V2l0 aFJlb3JkZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIEZldGNoIG5leHQgdHVwbGUgZnJv bSB0aGUgaW5kZXguCiAJCSAqLwogbmV4dF9pbmRleHR1cGxlOgotCQlpZiAoIWluZGV4X2dldG5l eHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQorCQlpZiAoIXRh YmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNs b3QsCisJCQkJCQkJCQkgICZyZWNoZWNrKSkKIAkJewogCQkJLyoKIAkJCSAqIE5vIG1vcmUgdHVw bGVzIGZyb20gdGhlIGluZGV4LiAgQnV0IHdlIHN0aWxsIG5lZWQgdG8gZHJhaW4gYW55CkBAIC0y ODAsNyArMjg1LDcgQEAgbmV4dF9pbmRleHR1cGxlOgogCQkgKiBJZiB0aGUgaW5kZXggd2FzIGxv c3N5LCB3ZSBoYXZlIHRvIHJlY2hlY2sgdGhlIGluZGV4IHF1YWxzIGFuZAogCQkgKiBPUkRFUiBC WSBleHByZXNzaW9ucyB1c2luZyB0aGUgZmV0Y2hlZCB0dXBsZS4KIAkJICovCi0JCWlmIChzY2Fu ZGVzYy0+eHNfcmVjaGVjaykKKwkJaWYgKHJlY2hlY2spCiAJCXsKIAkJCWVjb250ZXh0LT5lY3h0 X3NjYW50dXBsZSA9IHNsb3Q7CiAJCQlpZiAoIUV4ZWNRdWFsQW5kUmVzZXQobm9kZS0+aW5kZXhx dWFsb3JpZywgZWNvbnRleHQpKQpAQCAtODE4LDYgKzgyMyw3IEBAIEV4ZWNFbmRJbmRleFNjYW4o SW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHdoaWNoIHdpbGwgaGF2ZSBhIG5ldyBJbmRleE9u bHlTY2FuU3RhdGUgYW5kIHplcm9lZCBzdGF0cy4KIAkJICovCiAJCXdpbnN0cnVtZW50LT5uc2Vh cmNoZXMgKz0gbm9kZS0+aXNzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJQXNzZXJ0KG5vZGUt Pmlzc19JbnN0cnVtZW50LT5udGFibGV0dXBsZWZldGNoZXMgPT0gMCk7CiAJfQogCiAJLyoKQEAg LTE3MDYsNiArMTcxMiw3IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXplRFNNKEluZGV4U2NhblN0 YXRlICpub2RlLAogCW5vZGUtPmlzc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJh bGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCiAJCQkJCQkJCSBub2RlLT5pc3NfUmVs YXRpb25EZXNjLAorCQkJCQkJCQkgZmFsc2UsCiAJCQkJCQkJCSBub2RlLT5pc3NfSW5zdHJ1bWVu dCwKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlzc19O dW1PcmRlckJ5S2V5cywKQEAgLTE3NTQsNiArMTc2MSw3IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFs aXplV29ya2VyKEluZGV4U2NhblN0YXRlICpub2RlLAogCW5vZGUtPmlzc19TY2FuRGVzYyA9CiAJ CWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCiAJ CQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgZmFsc2UsCiAJCQkJCQkJ CSBub2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1TY2FuS2V5cywK IAkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3Ry aWdnZXJzLmMKaW5kZXggNDQxMjlhMzVjLi43NjFlMjA1MGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y aV90cmlnZ2Vycy5jCkBAIC0yODI3LDcgKzI4MjcsNyBAQCByaV9GYXN0UGF0aENoZWNrKFJJX0Nv bnN0cmFpbnRJbmZvICpyaWluZm8sCiAJaWR4X3JlbCA9IGluZGV4X29wZW4ocmlpbmZvLT5jb25p bmRpZCwgQWNjZXNzU2hhcmVMb2NrKTsKIAogCXNsb3QgPSB0YWJsZV9zbG90X2NyZWF0ZShwa19y ZWwsIE5VTEwpOwotCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKHBrX3JlbCwgaWR4X3JlbCwK KwlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihwa19yZWwsIGlkeF9yZWwsIGZhbHNlLAogCQkJ CQkJCSAgIHNuYXBzaG90LCBOVUxMLAogCQkJCQkJCSAgIHJpaW5mby0+bmtleXMsIDAsCiAJCQkJ CQkJICAgU09fTk9ORSk7CkBAIC0yOTY0LDcgKzI5NjQsNyBAQCByaV9GYXN0UGF0aEJhdGNoRmx1 c2goUklfRmFzdFBhdGhFbnRyeSAqZnBlbnRyeSwgUmVsYXRpb24gZmtfcmVsLAogCSAqLwogCW9s ZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmcGVudHJ5LT5mbHVzaF9jeHQpOwogCi0Jc2Nh bmRlc2MgPSBpbmRleF9iZWdpbnNjYW4ocGtfcmVsLCBpZHhfcmVsLCBzbmFwc2hvdCwgTlVMTCwK KwlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihwa19yZWwsIGlkeF9yZWwsIGZhbHNlLCBzbmFw c2hvdCwgTlVMTCwKIAkJCQkJCQkgICByaWluZm8tPm5rZXlzLCAwLCBTT19OT05FKTsKIAogCUdl dFVzZXJJZEFuZFNlY0NvbnRleHQoJnNhdmVkX3VzZXJpZCwgJnNhdmVkX3NlY19jb250ZXh0KTsK QEAgLTMxMDgsNiArMzEwOCw3IEBAIHJpX0Zhc3RQYXRoRmx1c2hBcnJheShSSV9GYXN0UGF0aEVu dHJ5ICpmcGVudHJ5LCBUdXBsZVRhYmxlU2xvdCAqZmtfc2xvdCwKIAlib29sCQllbGVtX2J5dmFs OwogCWNoYXIJCWVsZW1fYWxpZ247CiAJQXJyYXlUeXBlICAqYXJyOworCWJvb2wJCXJlY2hlY2s7 CiAKIAlBc3NlcnQoZnBtZXRhKTsKIApAQCAtMzE3NCwxMyArMzE3NSwxNiBAQCByaV9GYXN0UGF0 aEZsdXNoQXJyYXkoUklfRmFzdFBhdGhFbnRyeSAqZnBlbnRyeSwgVHVwbGVUYWJsZVNsb3QgKmZr X3Nsb3QsCiAJICogV2FsayBhbGwgbWF0Y2hlcy4gIFRoZSBpbmRleCBBTSByZXR1cm5zIHRoZW0g aW4gaW5kZXggb3JkZXIuICBGb3IgZWFjaAogCSAqIG1hdGNoLCBmaW5kIHdoaWNoIGJhdGNoIGl0 ZW0ocykgaXQgc2F0aXNmaWVzLgogCSAqLwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2Nh bmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBwa19zbG90KSkKKwl3aGlsZSAodGFibGVfaW5k ZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgcGtfc2xvdCwK KwkJCQkJCQkJCSZyZWNoZWNrKSkKIAl7CiAJCURhdHVtCQlmb3VuZF92YWw7CiAJCWJvb2wJCWZv dW5kX251bGw7CiAJCWJvb2wJCWNvbmN1cnJlbnRseV91cGRhdGVkOwogCQlTY2FuS2V5RGF0YSBy ZWNoZWNrX3NrZXlbMV07CiAKKwkJQXNzZXJ0KCFyZWNoZWNrKTsKKwogCQlpZiAoIXJpX0xvY2tQ S1R1cGxlKHBrX3JlbCwgcGtfc2xvdCwgc25hcHNob3QsICZjb25jdXJyZW50bHlfdXBkYXRlZCkp CiAJCQljb250aW51ZTsKIApAQCAtMzI0NCwxMyArMzI0OCwxNyBAQCByaV9GYXN0UGF0aFByb2Jl T25lKFJlbGF0aW9uIHBrX3JlbCwgUmVsYXRpb24gaWR4X3JlbCwKIAkJCQkJU2NhbktleURhdGEg KnNrZXksIGludCBua2V5cykKIHsKIAlib29sCQlmb3VuZCA9IGZhbHNlOworCWJvb2wJCXJlY2hl Y2s7CiAKIAlpbmRleF9yZXNjYW4oc2NhbmRlc2MsIHNrZXksIG5rZXlzLCBOVUxMLCAwKTsKIAot CWlmIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBz bG90KSkKKwlpZiAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2Nh bkRpcmVjdGlvbiwgc2xvdCwKKwkJCQkJCQkJICZyZWNoZWNrKSkKIAl7CiAJCWJvb2wJCWNvbmN1 cnJlbnRseV91cGRhdGVkOwogCisJCUFzc2VydCghcmVjaGVjayk7CisKIAkJaWYgKHJpX0xvY2tQ S1R1cGxlKHBrX3JlbCwgc2xvdCwgc25hcHNob3QsCiAJCQkJCQkgICAmY29uY3VycmVudGx5X3Vw ZGF0ZWQpKQogCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3Mu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCmluZGV4IGQ2ZWZkMDcwNy4uZmI5 NzhmMGNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwpAQCAtMTAyLDcgKzEwMiw2IEBACiAj aW5jbHVkZSAiYWNjZXNzL2dpbi5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgogI2luY2x1 ZGUgImFjY2Vzcy90YWJsZWFtLmgiCi0jaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdf b3BlcmF0b3IuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N0YXRpc3RpYy5oIgpAQCAtMTIyLDcg KzEyMSw2IEBACiAjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgogI2luY2x1ZGUgInJld3Jp dGUvcmV3cml0ZU1hbmlwLmgiCiAjaW5jbHVkZSAic3RhdGlzdGljcy9zdGF0aXN0aWNzLmgiCi0j aW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNs dWRlICJ1dGlscy9hcnJheS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCkBAIC0yNjYs NyArMjY0LDcgQEAgc3RhdGljIGJvb2wgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxh dGlvbiBoZWFwUmVsLAogCQkJCQkJCQkJCSBTY2FuS2V5IHNjYW5rZXlzLAogCQkJCQkJCQkJCSBp bnQxNiB0eXBMZW4sCiAJCQkJCQkJCQkJIGJvb2wgdHlwQnlWYWwsCi0JCQkJCQkJCQkJIFR1cGxl VGFibGVTbG90ICp0YWJsZXNsb3QsCisJCQkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAog CQkJCQkJCQkJCSBNZW1vcnlDb250ZXh0IG91dGVyY29udGV4dCwKIAkJCQkJCQkJCQkgRGF0dW0g KmVuZHBvaW50RGF0dW0pOwogc3RhdGljIFJlbE9wdEluZm8gKmZpbmRfam9pbl9pbnB1dF9yZWwo UGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyByZWxpZHMpOwpAQCAtNzA0MSw3ICs3MDM5LDggQEAg Z2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZShQbGFubmVySW5mbyAqcm9vdCwgVmFyaWFibGVTdGF0 RGF0YSAqdmFyZGF0YSwKIAkJCWluZGV4UmVsID0gaW5kZXhfb3BlbihpbmRleC0+aW5kZXhvaWQs IE5vTG9jayk7CiAKIAkJCS8qIGJ1aWxkIHNvbWUgc3R1ZmYgbmVlZGVkIGZvciBpbmRleHNjYW4g ZXhlY3V0aW9uICovCi0JCQlzbG90ID0gdGFibGVfc2xvdF9jcmVhdGUoaGVhcFJlbCwgTlVMTCk7 CisJCQlzbG90ID0gTWFrZVNpbmdsZVR1cGxlVGFibGVTbG90KFJlbGF0aW9uR2V0RGVzY3IoaW5k ZXhSZWwpLAorCQkJCQkJCQkJCQkmVFRTT3BzVmlydHVhbCk7CiAJCQlnZXRfdHlwbGVuYnl2YWwo dmFyZGF0YS0+YXR0dHlwZSwgJnR5cExlbiwgJnR5cEJ5VmFsKTsKIAogCQkJLyogc2V0IHVwIGFu IElTIE5PVCBOVUxMIHNjYW4ga2V5IHNvIHRoYXQgd2UgaWdub3JlIG51bGxzICovCkBAIC03MTEz LDggKzcxMTIsNyBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX3JhbmdlKFBsYW5uZXJJbmZvICpyb290 LCBWYXJpYWJsZVN0YXREYXRhICp2YXJkYXRhLAogICoKICAqIHNjYW5rZXlzIGlzIGEgMS1lbGVt ZW50IHNjYW5rZXkgYXJyYXkgc2V0IHVwIHRvIHJlamVjdCBudWxscy4KICAqIHR5cExlbi90eXBC eVZhbCBkZXNjcmliZSB0aGUgZGF0YXR5cGUgb2YgdGhlIGluZGV4J3MgZmlyc3QgY29sdW1uLgot ICogdGFibGVzbG90IGlzIGEgc2xvdCBzdWl0YWJsZSB0byBob2xkIHRhYmxlIHR1cGxlcywgaW4g Y2FzZSB3ZSBuZWVkCi0gKiB0byBwcm9iZSB0aGUgaGVhcC4KKyAqIHNsb3QgaXMgYSB2aXJ0dWFs IHNsb3QgdG8gcmVjZWl2ZSBlYWNoIGluZGV4IHR1cGxlJ3MgdmFsdWVzLgogICogKFdlIGNvdWxk IGNvbXB1dGUgdGhlc2UgdmFsdWVzIGxvY2FsbHksIGJ1dCB0aGF0IHdvdWxkIG1lYW4gY29tcHV0 aW5nIHRoZW0KICAqIHR3aWNlIHdoZW4gZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZSBuZWVkcyBi b3RoIHRoZSBtaW4gYW5kIHRoZSBtYXguKQogICoKQEAgLTcxMjgsMTkgKzcxMjYsMTYgQEAgZ2V0 X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCQkJCQkJCSBTY2Fu S2V5IHNjYW5rZXlzLAogCQkJCQkJCSBpbnQxNiB0eXBMZW4sCiAJCQkJCQkJIGJvb2wgdHlwQnlW YWwsCi0JCQkJCQkJIFR1cGxlVGFibGVTbG90ICp0YWJsZXNsb3QsCisJCQkJCQkJIFR1cGxlVGFi bGVTbG90ICpzbG90LAogCQkJCQkJCSBNZW1vcnlDb250ZXh0IG91dGVyY29udGV4dCwKIAkJCQkJ CQkgRGF0dW0gKmVuZHBvaW50RGF0dW0pCiB7CiAJYm9vbAkJaGF2ZV9kYXRhID0gZmFsc2U7CiAJ U25hcHNob3REYXRhIFNuYXBzaG90Tm9uVmFjdXVtYWJsZTsKIAlJbmRleFNjYW5EZXNjIGluZGV4 X3NjYW47Ci0JQnVmZmVyCQl2bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7Ci0JQmxvY2tOdW1iZXIg bGFzdF9oZWFwX2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCWludAkJCW5fdmlzaXRlZF9o ZWFwX3BhZ2VzID0gMDsKLQlJdGVtUG9pbnRlciB0aWQ7Ci0JRGF0dW0JCXZhbHVlc1tJTkRFWF9N QVhfS0VZU107Ci0JYm9vbAkJaXNudWxsW0lOREVYX01BWF9LRVlTXTsKKwlib29sCQlyZWNoZWNr OworCURhdHVtCQl2YWw7CisJYm9vbAkJaXNudWxsOwogCU1lbW9yeUNvbnRleHQgb2xkY29udGV4 dDsKIAogCS8qCkBAIC03MTg2LDk1ICs3MTgxLDQ5IEBAIGdldF9hY3R1YWxfdmFyaWFibGVfZW5k cG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAkgKiBhIGh1Z2UgYW1vdW50IG9mIHRpbWUgaGVyZSwg c28gd2UgZ2l2ZSB1cCBvbmNlIHdlJ3ZlIHJlYWQgdG9vIG1hbnkgaGVhcAogCSAqIHBhZ2VzLiAg V2hlbiB3ZSBmYWlsIGZvciB0aGF0IHJlYXNvbiwgdGhlIGNhbGxlciB3aWxsIGVuZCB1cCB1c2lu ZwogCSAqIHdoYXRldmVyIGV4dHJlbWFsIHZhbHVlIGlzIHJlY29yZGVkIGluIHBnX3N0YXRpc3Rp Yy4KKwkgKgorCSAqIFdlIHNldCB4c192aXNpdGVkX3BhZ2VzX2xpbWl0IHRvIHRlbGwgdGhlIHRh YmxlIEFNIHRvIGNvdW50IGRpc3RpbmN0CisJICogaGVhcCBwYWdlcyB2aXNpdGVkIGZvciBub24t dmlzaWJsZSB0dXBsZXMgYW5kIGdpdmUgdXAgYWZ0ZXIgdGhlIGxpbWl0CisJICogaXMgZXhjZWVk ZWQuCiAJICovCisjZGVmaW5lIFZJU0lURURfUEFHRVNfTElNSVQgMTAwCiAJSW5pdE5vblZhY3V1 bWFibGVTbmFwc2hvdChTbmFwc2hvdE5vblZhY3V1bWFibGUsCiAJCQkJCQkJICBHbG9iYWxWaXNU ZXN0Rm9yKGhlYXBSZWwpKTsKIAotCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJl bCwgaW5kZXhSZWwsCisJaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsLCBpbmRl eFJlbCwgdHJ1ZSwKIAkJCQkJCQkJICZTbmFwc2hvdE5vblZhY3V1bWFibGUsIE5VTEwsCiAJCQkJ CQkJCSAxLCAwLAogCQkJCQkJCQkgU09fTk9ORSk7Ci0JLyogU2V0IGl0IHVwIGZvciBpbmRleC1v bmx5IHNjYW4gKi8KLQlpbmRleF9zY2FuLT54c193YW50X2l0dXAgPSB0cnVlOworCUFzc2VydChp bmRleF9zY2FuLT54c193YW50X2l0dXApOworCWluZGV4X3NjYW4tPnhzX3Zpc2l0ZWRfcGFnZXNf bGltaXQgPSBWSVNJVEVEX1BBR0VTX0xJTUlUOwogCWluZGV4X3Jlc2NhbihpbmRleF9zY2FuLCBz Y2Fua2V5cywgMSwgTlVMTCwgMCk7CiAKIAkvKiBGZXRjaCBmaXJzdC9uZXh0IHR1cGxlIGluIHNw ZWNpZmllZCBkaXJlY3Rpb24gKi8KLQl3aGlsZSAoKHRpZCA9IGluZGV4X2dldG5leHRfdGlkKGlu ZGV4X3NjYW4sIGluZGV4c2NhbmRpcikpICE9IE5VTEwpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dl dG5leHRfc2xvdChpbmRleF9zY2FuLCBpbmRleHNjYW5kaXIsIHNsb3QsICZyZWNoZWNrKSkKIAl7 Ci0JCUJsb2NrTnVtYmVyIGJsb2NrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpOwot Ci0JCWlmICghVk1fQUxMX1ZJU0lCTEUoaGVhcFJlbCwKLQkJCQkJCQlibG9jaywKLQkJCQkJCQkm dm1idWZmZXIpKQotCQl7Ci0JCQkvKiBSYXRzLCB3ZSBoYXZlIHRvIHZpc2l0IHRoZSBoZWFwIHRv IGNoZWNrIHZpc2liaWxpdHkgKi8KLQkJCWlmICghaW5kZXhfZmV0Y2hfaGVhcChpbmRleF9zY2Fu LCB0YWJsZXNsb3QpKQotCQkJewotCQkJCS8qCi0JCQkJICogTm8gdmlzaWJsZSB0dXBsZSBmb3Ig dGhpcyBpbmRleCBlbnRyeSwgc28gd2UgbmVlZCB0bwotCQkJCSAqIGFkdmFuY2UgdG8gdGhlIG5l eHQgZW50cnkuICBCZWZvcmUgZG9pbmcgc28sIGNvdW50IGhlYXAKLQkJCQkgKiBwYWdlIGZldGNo ZXMgYW5kIGdpdmUgdXAgaWYgd2UndmUgZG9uZSB0b28gbWFueS4KLQkJCQkgKgotCQkJCSAqIFdl IGRvbid0IGNoYXJnZSBhIHBhZ2UgZmV0Y2ggaWYgdGhpcyBpcyB0aGUgc2FtZSBoZWFwIHBhZ2UK LQkJCQkgKiBhcyB0aGUgcHJldmlvdXMgdHVwbGUuICBUaGlzIGlzIG9uIHRoZSBjb25zZXJ2YXRp dmUgc2lkZSwKLQkJCQkgKiBzaW5jZSBvdGhlciByZWNlbnRseS1hY2Nlc3NlZCBwYWdlcyBhcmUg cHJvYmFibHkgc3RpbGwgaW4KLQkJCQkgKiBidWZmZXJzIHRvbzsgYnV0IGl0J3MgZ29vZCBlbm91 Z2ggZm9yIHRoaXMgaGV1cmlzdGljLgotCQkJCSAqLwotI2RlZmluZSBWSVNJVEVEX1BBR0VTX0xJ TUlUIDEwMAotCi0JCQkJaWYgKGJsb2NrICE9IGxhc3RfaGVhcF9ibG9jaykKLQkJCQl7Ci0JCQkJ CWxhc3RfaGVhcF9ibG9jayA9IGJsb2NrOwotCQkJCQluX3Zpc2l0ZWRfaGVhcF9wYWdlcysrOwot CQkJCQlpZiAobl92aXNpdGVkX2hlYXBfcGFnZXMgPiBWSVNJVEVEX1BBR0VTX0xJTUlUKQotCQkJ CQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJY29udGludWU7CQkvKiBubyB2aXNpYmxlIHR1cGxlLCB0 cnkgbmV4dCBpbmRleCBlbnRyeSAqLwotCQkJfQotCi0JCQkvKiBXZSBkb24ndCBhY3R1YWxseSBu ZWVkIHRoZSBoZWFwIHR1cGxlIGZvciBhbnl0aGluZyAqLwotCQkJRXhlY0NsZWFyVHVwbGUodGFi bGVzbG90KTsKLQotCQkJLyoKLQkJCSAqIFdlIGRvbid0IGNhcmUgd2hldGhlciB0aGVyZSdzIG1v cmUgdGhhbiBvbmUgdmlzaWJsZSB0dXBsZSBpbgotCQkJICogdGhlIEhPVCBjaGFpbjsgaWYgYW55 IGFyZSB2aXNpYmxlLCB0aGF0J3MgZ29vZCBlbm91Z2guCi0JCQkgKi8KLQkJfQotCi0JCS8qCi0J CSAqIFdlIGV4cGVjdCB0aGF0IHRoZSBpbmRleCB3aWxsIHJldHVybiBkYXRhIGluIEluZGV4VHVw bGUgbm90Ci0JCSAqIEhlYXBUdXBsZSBmb3JtYXQuCi0JCSAqLwotCQlpZiAoIWluZGV4X3NjYW4t PnhzX2l0dXApCi0JCQllbG9nKEVSUk9SLCAibm8gZGF0YSByZXR1cm5lZCBmb3IgaW5kZXgtb25s eSBzY2FuIik7Ci0KIAkJLyoKIAkJICogV2UgZG8gbm90IHlldCBzdXBwb3J0IHJlY2hlY2sgaGVy ZS4KIAkJICovCi0JCWlmIChpbmRleF9zY2FuLT54c19yZWNoZWNrKQorCQlpZiAocmVjaGVjaykK IAkJCWJyZWFrOwogCi0JCS8qIE9LIHRvIGRlY29uc3RydWN0IHRoZSBpbmRleCB0dXBsZSAqLwot CQlpbmRleF9kZWZvcm1fdHVwbGUoaW5kZXhfc2Nhbi0+eHNfaXR1cCwKLQkJCQkJCSAgIGluZGV4 X3NjYW4tPnhzX2l0dXBkZXNjLAotCQkJCQkJICAgdmFsdWVzLCBpc251bGwpOworCQkvKiBSZWFk IHRoZSBpbmRleCdzIGZpcnN0IGNvbHVtbiB2YWx1ZSBvdXQgb2YgdGhlIHNsb3QgKi8KKwkJdmFs ID0gc2xvdF9nZXRhdHRyKHNsb3QsIDEsICZpc251bGwpOwogCiAJCS8qIFNob3VsZG4ndCBoYXZl IGdvdCBhIG51bGwsIGJ1dCBiZSBjYXJlZnVsICovCi0JCWlmIChpc251bGxbMF0pCisJCWlmIChp c251bGwpCiAJCQllbG9nKEVSUk9SLCAiZm91bmQgdW5leHBlY3RlZCBudWxsIHZhbHVlIGluIGlu ZGV4IFwiJXNcIiIsCiAJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGluZGV4UmVsKSk7CiAK IAkJLyogQ29weSB0aGUgaW5kZXggY29sdW1uIHZhbHVlIG91dCB0byBjYWxsZXIncyBjb250ZXh0 ICovCiAJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ob3V0ZXJjb250ZXh0KTsK LQkJKmVuZHBvaW50RGF0dW0gPSBkYXR1bUNvcHkodmFsdWVzWzBdLCB0eXBCeVZhbCwgdHlwTGVu KTsKKwkJKmVuZHBvaW50RGF0dW0gPSBkYXR1bUNvcHkodmFsLCB0eXBCeVZhbCwgdHlwTGVuKTsK IAkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwogCQloYXZlX2RhdGEgPSB0cnVl OwogCQlicmVhazsKIAl9CiAKLQlpZiAodm1idWZmZXIgIT0gSW52YWxpZEJ1ZmZlcikKLQkJUmVs ZWFzZUJ1ZmZlcih2bWJ1ZmZlcik7CisJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CiAJaW5kZXhfZW5k c2NhbihpbmRleF9zY2FuKTsKIAogCXJldHVybiBoYXZlX2RhdGE7CmRpZmYgLS1naXQgYS9zcmMv dGVzdC9tb2R1bGVzL2luZGV4L01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9NYWtl ZmlsZQppbmRleCAyOTA0NzA0NGUuLjgzZGQwOTc0NSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9k dWxlcy9pbmRleC9NYWtlZmlsZQorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2luZGV4L01ha2VmaWxl CkBAIC0xLDcgKzEsMTcgQEAKICMgc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9NYWtlZmlsZQogCitN T0RVTEVfYmlnID0gdGVzdF9pbmRleHNjYW4KK09CSlMgPSBcCisJJChXSU4zMlJFUykgXAorCXRl c3RfaW5kZXhzY2FuLm8KK0VYVEVOU0lPTiA9IHRlc3RfaW5kZXhzY2FuCitEQVRBID0gdGVzdF9p bmRleHNjYW4tLTEuMC5zcWwKK1BHRklMRURFU0MgPSAidGVzdF9pbmRleHNjYW4gLSB0ZXN0IGlu ZGV4IHNjYW4gaW50ZXJuYWxzIgorCiBFWFRSQV9JTlNUQUxMID0gY29udHJpYi9idHJlZV9naW4g Y29udHJpYi9idHJlZV9naXN0CiAKK1JFR1JFU1MgPSBob3RfY2hhaW4KKwogSVNPTEFUSU9OID0g a2lsbHR1cGxlcwogCiBpZmRlZiBVU0VfUEdYUwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxl cy9pbmRleC9leHBlY3RlZC9ob3RfY2hhaW4ub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9l eHBlY3RlZC9ob3RfY2hhaW4ub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MC4uMGU3ODMyYTg0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9l eHBlY3RlZC9ob3RfY2hhaW4ub3V0CkBAIC0wLDAgKzEsNTYgQEAKKy0tIE5vbi1NVkNDIGluZGV4 IHNjYW5zIG11c3QgcmV0dXJuIGV2ZXJ5IHZpc2libGUgbWVtYmVyIG9mIGEgSE9UIGNoYWluLgor LS0gVmVyaWZ5IHRoYXQgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGdldHMgdGhhdCByaWdodCBp biBhIHZhcmlldHkgb2YgY2FzZXMuCitDUkVBVEUgRVhURU5TSU9OIHRlc3RfaW5kZXhzY2FuOwor LS0gU2luZ2xlLXBhZ2UgdGFibGU7IGFsbCBUSURzIGJlbG93IGFyZSBkZXRlcm1pbmlzdGljOiBh IGZyZXNoIHRhYmxlIGdldHMKKy0tIGJsb2NrIDAsIGhlYXBfaW5zZXJ0L2hlYXBfdXBkYXRlIGFz c2lnbiBsaW5lIHBvaW50ZXJzIHNlcXVlbnRpYWxseSwgYW5kIHRoZQorLS0gcm93cyBhcmUgdGlu eSB0byBhdm9pZCBhbnkgdG9hc3RpbmcuCitDUkVBVEUgVEFCTEUgaG90X2NoYWluX3RhYiAoaWQg aW50LCBmaWxsZXIgdGV4dCkgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmKTsKK0NSRUFU RSBJTkRFWCBob3RfY2hhaW5faWR4IE9OIGhvdF9jaGFpbl90YWIgKGlkKTsKK0lOU0VSVCBJTlRP IGhvdF9jaGFpbl90YWIgVkFMVUVTICgxLCAncjF2MScpLCAoMiwgJ3IydjEnKTsgIC0tICgwLDEp ICgwLDIpCitCRUdJTjsKKy0tIENyZWF0ZSBIT1QgY2hhaW5zLiAgVGhlc2UgdXBkYXRlcyB0b3Vj aCBvbmx5IHRoZSBub24taW5kZXhlZCBjb2x1bW4KKy0tICJmaWxsZXIiLCBhbmQgZXZlcnkgY2hh aW4gbWVtYmVyIHN0YXlzIHZpc2libGUgdG8gU25hcHNob3RBbnkgYmVjYXVzZSB0aGUKKy0tIGRl bGV0aW5nIHRyYW5zYWN0aW9uICh1cykgaXMgc3RpbGwgb3Blbi4KK1VQREFURSBob3RfY2hhaW5f dGFiIFNFVCBmaWxsZXIgPSAncjF2MicgV0hFUkUgaWQgPSAxOyAgIC0tICgwLDMpCitVUERBVEUg aG90X2NoYWluX3RhYiBTRVQgZmlsbGVyID0gJ3IxdjMnIFdIRVJFIGlkID0gMTsgICAtLSAoMCw0 KQorVVBEQVRFIGhvdF9jaGFpbl90YWIgU0VUIGZpbGxlciA9ICdyMnYyJyBXSEVSRSBpZCA9IDI7 ICAgLS0gKDAsNSkKKy0tIFZlcmlmeSB0aGF0IGFsbCB0aHJlZSB1cGRhdGVzIHdlcmUgSE9UIHVz aW5nIGJhY2tlbmQtbG9jYWwgeGFjdCBjb3VudGVyOgorU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3Rf dHVwbGVzX2hvdF91cGRhdGVkKCdob3RfY2hhaW5fdGFiJzo6cmVnY2xhc3MpIEFTIGhvdF91cGRh dGVkOworIGhvdF91cGRhdGVkIAorLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAzCisoMSByb3cp CisKKy0tIFNuYXBzaG90QW55OiBldmVyeSBjaGFpbiBtZW1iZXIKK1NFTEVDVCAqIEZST00gaW5k ZXhfc2Nhbl90aWRzKCdob3RfY2hhaW5faWR4JywgJ2FueScpOworIGluZGV4X3NjYW5fdGlkcyAK Ky0tLS0tLS0tLS0tLS0tLS0tCisgKDAsMSkKKyAoMCwzKQorICgwLDQpCisgKDAsMikKKyAoMCw1 KQorKDUgcm93cykKKworLS0gTVZDQyBzY2FuLCBmb3IgY29udHJhc3Q6IG9ubHkgdGhlIG5ld2Vz dCBtZW1iZXIgb2YgZWFjaCBjaGFpbgorU0VMRUNUICogRlJPTSBpbmRleF9zY2FuX3RpZHMoJ2hv dF9jaGFpbl9pZHgnLCAnbXZjYycpOworIGluZGV4X3NjYW5fdGlkcyAKKy0tLS0tLS0tLS0tLS0t LS0tCisgKDAsNCkKKyAoMCw1KQorKDIgcm93cykKKworLS0gYmFja3dhcmQ6IGluZGV4IGVudHJp ZXMgaW4gcmV2ZXJzZSBrZXkgb3JkZXIsIGNoYWlucyBzdGlsbCBpbiBBU0MgY2hhaW4gb3JkZXIK K1NFTEVDVCAqIEZST00gaW5kZXhfc2Nhbl90aWRzKCdob3RfY2hhaW5faWR4JywgJ2FueScsICdi YWNrd2FyZCcpOworIGluZGV4X3NjYW5fdGlkcyAKKy0tLS0tLS0tLS0tLS0tLS0tCisgKDAsMikK KyAoMCw1KQorICgwLDEpCisgKDAsMykKKyAoMCw0KQorKDUgcm93cykKKworQ09NTUlUOworRFJP UCBUQUJMRSBob3RfY2hhaW5fdGFiOworRFJPUCBFWFRFTlNJT04gdGVzdF9pbmRleHNjYW47CmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2luZGV4L21lc29uLmJ1aWxkIGIvc3JjL3Rlc3Qv bW9kdWxlcy9pbmRleC9tZXNvbi5idWlsZAppbmRleCA4MzRjZTA4MWYuLjVmNTYzMDIzMCAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVz dC9tb2R1bGVzL2luZGV4L21lc29uLmJ1aWxkCkBAIC0xLDkgKzEsMzUgQEAKICMgQ29weXJpZ2h0 IChjKSAyMDI1LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAKK3Rl c3RfaW5kZXhzY2FuX3NvdXJjZXMgPSBmaWxlcygKKyAgJ3Rlc3RfaW5kZXhzY2FuLmMnLAorKQor CitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgdGVzdF9pbmRleHNjYW5fc291cmNlcyAr PSByY19saWJfZ2VuLnByb2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1O QU1FJywgJ3Rlc3RfaW5kZXhzY2FuJywKKyAgICAnLS1GSUxFREVTQycsICd0ZXN0X2luZGV4c2Nh biAtIHRlc3QgaW5kZXggc2NhbiBpbnRlcm5hbHMnLF0pCitlbmRpZgorCit0ZXN0X2luZGV4c2Nh biA9IHNoYXJlZF9tb2R1bGUoJ3Rlc3RfaW5kZXhzY2FuJywKKyAgdGVzdF9pbmRleHNjYW5fc291 cmNlcywKKyAga3dhcmdzOiBwZ190ZXN0X21vZF9hcmdzLAorKQordGVzdF9pbnN0YWxsX2xpYnMg Kz0gdGVzdF9pbmRleHNjYW4KKwordGVzdF9pbnN0YWxsX2RhdGEgKz0gZmlsZXMoCisgICd0ZXN0 X2luZGV4c2Nhbi5jb250cm9sJywKKyAgJ3Rlc3RfaW5kZXhzY2FuLS0xLjAuc3FsJywKKykKKwog dGVzdHMgKz0gewogICAnbmFtZSc6ICdpbmRleCcsCiAgICdzZCc6IG1lc29uLmN1cnJlbnRfc291 cmNlX2RpcigpLAogICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAncmVncmVz cyc6IHsKKyAgICAnc3FsJzogWworICAgICAgJ2hvdF9jaGFpbicsCisgICAgXSwKKyAgfSwKICAg J2lzb2xhdGlvbic6IHsKICAgICAnc3BlY3MnOiBbCiAgICAgICAna2lsbHR1cGxlcycsCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2luZGV4L3NxbC9ob3RfY2hhaW4uc3FsIGIvc3JjL3Rl c3QvbW9kdWxlcy9pbmRleC9zcWwvaG90X2NoYWluLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAuLmRjYmRiOTNiNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21v ZHVsZXMvaW5kZXgvc3FsL2hvdF9jaGFpbi5zcWwKQEAgLTAsMCArMSwzNyBAQAorLS0gTm9uLU1W Q0MgaW5kZXggc2NhbnMgbXVzdCByZXR1cm4gZXZlcnkgdmlzaWJsZSBtZW1iZXIgb2YgYSBIT1Qg Y2hhaW4uCistLSBWZXJpZnkgdGhhdCB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgZ2V0cyB0aGF0 IHJpZ2h0IGluIGEgdmFyaWV0eSBvZiBjYXNlcy4KKworQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2lu ZGV4c2NhbjsKKworLS0gU2luZ2xlLXBhZ2UgdGFibGU7IGFsbCBUSURzIGJlbG93IGFyZSBkZXRl cm1pbmlzdGljOiBhIGZyZXNoIHRhYmxlIGdldHMKKy0tIGJsb2NrIDAsIGhlYXBfaW5zZXJ0L2hl YXBfdXBkYXRlIGFzc2lnbiBsaW5lIHBvaW50ZXJzIHNlcXVlbnRpYWxseSwgYW5kIHRoZQorLS0g cm93cyBhcmUgdGlueSB0byBhdm9pZCBhbnkgdG9hc3RpbmcuCitDUkVBVEUgVEFCTEUgaG90X2No YWluX3RhYiAoaWQgaW50LCBmaWxsZXIgdGV4dCkgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g b2ZmKTsKK0NSRUFURSBJTkRFWCBob3RfY2hhaW5faWR4IE9OIGhvdF9jaGFpbl90YWIgKGlkKTsK K0lOU0VSVCBJTlRPIGhvdF9jaGFpbl90YWIgVkFMVUVTICgxLCAncjF2MScpLCAoMiwgJ3IydjEn KTsgIC0tICgwLDEpICgwLDIpCisKK0JFR0lOOworCistLSBDcmVhdGUgSE9UIGNoYWlucy4gIFRo ZXNlIHVwZGF0ZXMgdG91Y2ggb25seSB0aGUgbm9uLWluZGV4ZWQgY29sdW1uCistLSAiZmlsbGVy IiwgYW5kIGV2ZXJ5IGNoYWluIG1lbWJlciBzdGF5cyB2aXNpYmxlIHRvIFNuYXBzaG90QW55IGJl Y2F1c2UgdGhlCistLSBkZWxldGluZyB0cmFuc2FjdGlvbiAodXMpIGlzIHN0aWxsIG9wZW4uCitV UERBVEUgaG90X2NoYWluX3RhYiBTRVQgZmlsbGVyID0gJ3IxdjInIFdIRVJFIGlkID0gMTsgICAt LSAoMCwzKQorVVBEQVRFIGhvdF9jaGFpbl90YWIgU0VUIGZpbGxlciA9ICdyMXYzJyBXSEVSRSBp ZCA9IDE7ICAgLS0gKDAsNCkKK1VQREFURSBob3RfY2hhaW5fdGFiIFNFVCBmaWxsZXIgPSAncjJ2 MicgV0hFUkUgaWQgPSAyOyAgIC0tICgwLDUpCisKKy0tIFZlcmlmeSB0aGF0IGFsbCB0aHJlZSB1 cGRhdGVzIHdlcmUgSE9UIHVzaW5nIGJhY2tlbmQtbG9jYWwgeGFjdCBjb3VudGVyOgorU0VMRUNU IHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdob3RfY2hhaW5fdGFiJzo6cmVn Y2xhc3MpIEFTIGhvdF91cGRhdGVkOworCistLSBTbmFwc2hvdEFueTogZXZlcnkgY2hhaW4gbWVt YmVyCitTRUxFQ1QgKiBGUk9NIGluZGV4X3NjYW5fdGlkcygnaG90X2NoYWluX2lkeCcsICdhbnkn KTsKKworLS0gTVZDQyBzY2FuLCBmb3IgY29udHJhc3Q6IG9ubHkgdGhlIG5ld2VzdCBtZW1iZXIg b2YgZWFjaCBjaGFpbgorU0VMRUNUICogRlJPTSBpbmRleF9zY2FuX3RpZHMoJ2hvdF9jaGFpbl9p ZHgnLCAnbXZjYycpOworCistLSBiYWNrd2FyZDogaW5kZXggZW50cmllcyBpbiByZXZlcnNlIGtl eSBvcmRlciwgY2hhaW5zIHN0aWxsIGluIEFTQyBjaGFpbiBvcmRlcgorU0VMRUNUICogRlJPTSBp bmRleF9zY2FuX3RpZHMoJ2hvdF9jaGFpbl9pZHgnLCAnYW55JywgJ2JhY2t3YXJkJyk7CisKK0NP TU1JVDsKKworRFJPUCBUQUJMRSBob3RfY2hhaW5fdGFiOworRFJPUCBFWFRFTlNJT04gdGVzdF9p bmRleHNjYW47CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2luZGV4L3Rlc3RfaW5kZXhz Y2FuLS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC90ZXN0X2luZGV4c2Nhbi0tMS4w LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmI2NjJkNzA1NAotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvaW5kZXgvdGVzdF9pbmRleHNjYW4tLTEu MC5zcWwKQEAgLTAsMCArMSwxMyBAQAorLyogc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC90ZXN0X2lu ZGV4c2Nhbi0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBp biBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgorXGVjaG8gVXNlICJDUkVB VEUgRVhURU5TSU9OIHRlc3RfaW5kZXhzY2FuIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKwor LS0gU2NhbiBpbmRleHJlbCB3aXRoIHplcm8gc2NhbiBrZXlzIGFuZCB0aGUgZ2l2ZW4gc25hcHNo b3QgdHlwZSAoJ212Y2MnLAorLS0gJ2FueScsICdzZWxmJywgJ2RpcnR5JywgJ25vbnZhY3V1bWFi bGUnKSBhbmQgZGlyZWN0aW9uICgnZm9yd2FyZCcsCistLSAnYmFja3dhcmQnKSwgcmV0dXJuaW5n IHRoZSBoZWFwIFRJRCBvZiBldmVyeSB0dXBsZSB0aGUgc2NhbiB5aWVsZHMsIGluCistLSBzY2Fu IG9yZGVyLgorQ1JFQVRFIEZVTkNUSU9OIGluZGV4X3NjYW5fdGlkcyhpbmRleHJlbCByZWdjbGFz cywgc25hcHR5cGUgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyIHRl eHQgREVGQVVMVCAnZm9yd2FyZCcpCitSRVRVUk5TIFNFVE9GIHBnX2NhdGFsb2cudGlkCitTVFJJ Q1QgQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L21vZHVsZXMvaW5kZXgvdGVzdF9pbmRleHNjYW4uYyBiL3NyYy90ZXN0L21vZHVsZXMvaW5kZXgv dGVzdF9pbmRleHNjYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmZh YmQ0YWUyNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvaW5kZXgvdGVzdF9p bmRleHNjYW4uYwpAQCAtMCwwICsxLDE0NiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IHRlc3RfaW5kZXhzY2FuLmMKKyAqCQlUZXN0IGhlbHBlcnMgZm9yIGxvdy1sZXZlbCBpbmRleCBz Y2FuIGJlaGF2aW9yLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyNiwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJCXNyYy90ZXN0 L21vZHVsZXMvaW5kZXgvdGVzdF9pbmRleHNjYW4uYworICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIK KyNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgor I2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9pbmRleC5oIgor I2luY2x1ZGUgImV4ZWN1dG9yL3R1cHRhYmxlLmgiCisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1 ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJzdG9yYWdl L2l0ZW1wdHIuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxz L3JlbC5oIgorI2luY2x1ZGUgInV0aWxzL3R1cGxlc3RvcmUuaCIKKworUEdfTU9EVUxFX01BR0lD OworCisvKgorICogaW5kZXhfc2Nhbl90aWRzKGluZGV4cmVsIHJlZ2NsYXNzLCBzbmFwdHlwZSB0 ZXh0LCBkaXIgdGV4dCkgUkVUVVJOUyBTRVRPRiB0aWQKKyAqCisgKiBTY2FuIGluZGV4cmVsIHdp dGggemVybyBzY2FuIGtleXMsIHVzaW5nIGEgc25hcHNob3Qgb2YgdGhlIGdpdmVuIHR5cGUgYW5k CisgKiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24sIGFuZCByZXR1cm4gdGhlIGhlYXAgVElEIG9m IGV2ZXJ5IHR1cGxlIHRoYXQgdGhlCisgKiBzY2FuIHJldHVybnMsIGluIHNjYW4gb3JkZXIuCisg Ki8KK1BHX0ZVTkNUSU9OX0lORk9fVjEoaW5kZXhfc2Nhbl90aWRzKTsKK0RhdHVtCitpbmRleF9z Y2FuX3RpZHMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlPaWQJCQlpbmRleG9pZCA9IFBHX0dFVEFS R19PSUQoMCk7CisJY2hhcgkgICAqc25hcHR5cGUgPSB0ZXh0X3RvX2NzdHJpbmcoUEdfR0VUQVJH X1RFWFRfUFAoMSkpOworCWNoYXIJICAgKmRpcnN0ciA9IHRleHRfdG9fY3N0cmluZyhQR19HRVRB UkdfVEVYVF9QUCgyKSk7CisJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8g KikgZmNpbmZvLT5yZXN1bHRpbmZvOworCU9pZAkJCWhlYXBvaWQ7CisJUmVsYXRpb24JaGVhcHJl bDsKKwlSZWxhdGlvbglpbmRleHJlbDsKKwlTY2FuRGlyZWN0aW9uIGRpcjsKKwlTbmFwc2hvdERh dGEgc25hcGRhdGE7CisJU25hcHNob3QJc25hcHNob3Q7CisJSW5kZXhTY2FuRGVzYyBzY2FuOwor CVR1cGxlVGFibGVTbG90ICpzbG90OworCWJvb2wJCXJlY2hlY2s7CisKKwlpZiAoIXN1cGVydXNl cigpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5U X1BSSVZJTEVHRSksCisJCQkJIGVycm1zZygibXVzdCBiZSBzdXBlcnVzZXIgdG8gdXNlIGluZGV4 IHNjYW4gdGVzdCBmdW5jdGlvbnMiKSkpOworCisJSW5pdE1hdGVyaWFsaXplZFNSRihmY2luZm8s IE1BVF9TUkZfVVNFX0VYUEVDVEVEX0RFU0MpOworCisJaWYgKHN0cmNtcChkaXJzdHIsICJmb3J3 YXJkIikgPT0gMCkKKwkJZGlyID0gRm9yd2FyZFNjYW5EaXJlY3Rpb247CisJZWxzZSBpZiAoc3Ry Y21wKGRpcnN0ciwgImJhY2t3YXJkIikgPT0gMCkKKwkJZGlyID0gQmFja3dhcmRTY2FuRGlyZWN0 aW9uOworCWVsc2UKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJpbnZhbGlkIHNjYW4gZGlyZWN0aW9u IFwiJXNcIiIsIGRpcnN0cikpKTsKKworCS8qCisJICogTG9jayB0aGUgaGVhcCBiZWZvcmUgdGhl IGluZGV4IHRvIGF2b2lkIGRlYWRsb2NrLiAgSW5kZXhHZXRSZWxhdGlvbigpCisJICogcnVucyB3 aXRob3V0IGEgbG9jaywgc28gaWYgdGhlIE9JRCBpc24ndCBhbiBpbmRleCBpdCByZXR1cm5zCisJ ICogSW52YWxpZE9pZDsgZGVmZXIgdGhlIGNvbXBsYWludCB0byBpbmRleF9vcGVuKCkgYmVsb3cs IHdoaWNoIGdpdmVzIGEKKwkgKiBiZXR0ZXIgbWVzc2FnZS4KKwkgKi8KKwloZWFwb2lkID0gSW5k ZXhHZXRSZWxhdGlvbihpbmRleG9pZCwgdHJ1ZSk7CisJaWYgKE9pZElzVmFsaWQoaGVhcG9pZCkp CisJCWhlYXByZWwgPSB0YWJsZV9vcGVuKGhlYXBvaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZWxz ZQorCQloZWFwcmVsID0gTlVMTDsKKworCWluZGV4cmVsID0gaW5kZXhfb3BlbihpbmRleG9pZCwg QWNjZXNzU2hhcmVMb2NrKTsKKworCS8qCisJICogU2luY2UgdGhlIEluZGV4R2V0UmVsYXRpb24o KSBjYWxsIGFib3ZlIHJhbiB3aXRob3V0IGEgbG9jaywgcmVjaGVjayBub3cKKwkgKiB0aGF0IGJv dGggcmVsYXRpb25zIGFyZSBsb2NrZWQ6IGEgY29uY3VycmVudCBkcm9wIGFuZCByZWNyZWF0ZSBj b3VsZAorCSAqIGhhdmUgbGVmdCB1cyB3aXRoIHRoZSB3cm9uZyBoZWFwLgorCSAqLworCWlmICho ZWFwcmVsID09IE5VTEwgfHwgaGVhcG9pZCAhPSBJbmRleEdldFJlbGF0aW9uKGluZGV4b2lkLCBm YWxzZSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURf VEFCTEUpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBvcGVuIHBhcmVudCB0YWJsZSBvZiBpbmRl eCBcIiVzXCIiLAorCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaW5kZXhyZWwpKSkpOwor CisJaWYgKHN0cmNtcChzbmFwdHlwZSwgIm12Y2MiKSA9PSAwKQorCQlzbmFwc2hvdCA9IEdldEFj dGl2ZVNuYXBzaG90KCk7CisJZWxzZSBpZiAoc3RyY21wKHNuYXB0eXBlLCAiYW55IikgPT0gMCkK KwkJc25hcHNob3QgPSBTbmFwc2hvdEFueTsKKwllbHNlIGlmIChzdHJjbXAoc25hcHR5cGUsICJz ZWxmIikgPT0gMCkKKwkJc25hcHNob3QgPSBTbmFwc2hvdFNlbGY7CisJZWxzZSBpZiAoc3RyY21w KHNuYXB0eXBlLCAiZGlydHkiKSA9PSAwKQorCXsKKwkJSW5pdERpcnR5U25hcHNob3Qoc25hcGRh dGEpOworCQlzbmFwc2hvdCA9ICZzbmFwZGF0YTsKKwl9CisJZWxzZSBpZiAoc3RyY21wKHNuYXB0 eXBlLCAibm9udmFjdXVtYWJsZSIpID09IDApCisJeworCQlJbml0Tm9uVmFjdXVtYWJsZVNuYXBz aG90KHNuYXBkYXRhLCBHbG9iYWxWaXNUZXN0Rm9yKGhlYXByZWwpKTsKKwkJc25hcHNob3QgPSAm c25hcGRhdGE7CisJfQorCWVsc2UKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJpbnZhbGlkIHNuYXBz aG90IHR5cGUgXCIlc1wiIiwgc25hcHR5cGUpKSk7CisKKwlzbG90ID0gdGFibGVfc2xvdF9jcmVh dGUoaGVhcHJlbCwgTlVMTCk7CisKKwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXByZWwsIGlu ZGV4cmVsLCBmYWxzZSwgc25hcHNob3QsIE5VTEwsCisJCQkJCQkgICAwLCAwLCBTT19OT05FKTsK KwlpbmRleF9yZXNjYW4oc2NhbiwgTlVMTCwgMCwgTlVMTCwgMCk7CisKKwl3aGlsZSAodGFibGVf aW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIGRpciwgc2xvdCwgJnJlY2hlY2spKQorCXsKKwkJSXRl bVBvaW50ZXJEYXRhIHRpZCA9IHNsb3QtPnR0c190aWQ7CisJCURhdHVtCQl2YWx1ZXNbMV07CisJ CWJvb2wJCW51bGxzWzFdOworCisJCS8qIHdpdGggemVybyBzY2FuIGtleXMsIG5vIEFNIHNob3Vs ZCBldmVyIHJlcXVlc3QgYSByZWNoZWNrICovCisJCWlmIChyZWNoZWNrKQorCQkJZWxvZyhFUlJP UiwgInVuZXhwZWN0ZWQgcmVjaGVjayByZXF1ZXN0IGZyb20ga2V5bGVzcyBpbmRleCBzY2FuIik7 CisKKwkJdmFsdWVzWzBdID0gSXRlbVBvaW50ZXJHZXREYXR1bSgmdGlkKTsKKwkJbnVsbHNbMF0g PSBmYWxzZTsKKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQsIHJzaW5m by0+c2V0RGVzYywKKwkJCQkJCQkgdmFsdWVzLCBudWxscyk7CisJfQorCisJaW5kZXhfZW5kc2Nh bihzY2FuKTsKKwlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOworCWluZGV4X2Ns b3NlKGluZGV4cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCXRhYmxlX2Nsb3NlKGhlYXByZWwsIEFj Y2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gKERhdHVtKSAwOworfQpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy9pbmRleC90ZXN0X2luZGV4c2Nhbi5jb250cm9sIGIvc3JjL3Rlc3QvbW9k dWxlcy9pbmRleC90ZXN0X2luZGV4c2Nhbi5jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMC4uYmZhYjI3YmYwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9k dWxlcy9pbmRleC90ZXN0X2luZGV4c2Nhbi5jb250cm9sCkBAIC0wLDAgKzEsNCBAQAorY29tbWVu dCA9ICdoZWxwZXIgZnVuY3Rpb24gZm9yIGxvdy1sZXZlbCBpbmRleCBzY2FuIGJlaGF2aW9yJwor ZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL3Rlc3Rf aW5kZXhzY2FuJworcmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3N0YXRzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHMu b3V0CmluZGV4IGJiYjFkYjNjNC4uZmU2ZjUxYTZhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3N0YXRzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0 YXRzLm91dApAQCAtODk3LDYgKzg5Nyw2OCBAQCBTRUxFQ1QgaWR4X3NjYW4sIHN0YXRzX3Jlc2V0 IElTIE5PVCBOVUxMIEFTIGhhc19zdGF0c19yZXNldAogICAgICAgICAwIHwgdAogKDEgcm93KQog CistLSBUZXN0IHBnX3N0YXRfYWxsX2luZGV4ZXMuaWR4X3R1cF9yZWFkIGNvdW50ZXIKK0NSRUFU RSBURU1QT1JBUlkgVEFCTEUgdGVzdF9pZHhfdHVwX3JlYWQgQVMKKyAgU0VMRUNUIGcgQVMgYSBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLCAyMDApIGc7CitDUkVBVEUgSU5ERVggT04gdGVzdF9pZHhf dHVwX3JlYWQoYSk7CitTRVQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7CitTRVQgZW5hYmxlX2luZGV4 b25seXNjYW4gPSBvZmY7CistLSBwbGFpbiBpbmRleCBzY2FuCitTRVQgZW5hYmxlX2JpdG1hcHNj YW4gPSBvZmY7CitFWFBMQUlOIChDT1NUUyBvZmYpIFNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3Rf aWR4X3R1cF9yZWFkIFdIRVJFIGEgQkVUV0VFTiAxIEFORCAyMDA7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdGVzdF9pZHhf dHVwX3JlYWRfYV9pZHggb24gdGVzdF9pZHhfdHVwX3JlYWQKKyAgICAgICAgIEluZGV4IENvbmQ6 ICgoYSA+PSAxKSBBTkQgKGEgPD0gMjAwKSkKKygzIHJvd3MpCisKK1NFTEVDVCBjb3VudCgqKSBG Uk9NIHRlc3RfaWR4X3R1cF9yZWFkIFdIRVJFIGEgQkVUV0VFTiAxIEFORCAyMDA7CisgY291bnQg CistLS0tLS0tCisgICAyMDAKKygxIHJvdykKKworLS0gYml0bWFwIGluZGV4IHNjYW4KK1NFVCBl bmFibGVfaW5kZXhzY2FuID0gb2ZmOworU0VUIGVuYWJsZV9iaXRtYXBzY2FuID0gb247CitFWFBM QUlOIChDT1NUUyBvZmYpIFNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfaWR4X3R1cF9yZWFkIFdI RVJFIGEgQkVUV0VFTiAxIEFORCAyMDA7CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgQml0bWFw IEhlYXAgU2NhbiBvbiB0ZXN0X2lkeF90dXBfcmVhZAorICAgICAgICAgUmVjaGVjayBDb25kOiAo KGEgPj0gMSkgQU5EIChhIDw9IDIwMCkpCisgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4g b24gdGVzdF9pZHhfdHVwX3JlYWRfYV9pZHgKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICgo YSA+PSAxKSBBTkQgKGEgPD0gMjAwKSkKKyg1IHJvd3MpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9N IHRlc3RfaWR4X3R1cF9yZWFkIFdIRVJFIGEgQkVUV0VFTiAxIEFORCAyMDA7CisgY291bnQgCist LS0tLS0tCisgICAyMDAKKygxIHJvdykKKworUkVTRVQgZW5hYmxlX3NlcXNjYW47CitSRVNFVCBl bmFibGVfaW5kZXhvbmx5c2NhbjsKK1JFU0VUIGVuYWJsZV9pbmRleHNjYW47CitSRVNFVCBlbmFi bGVfYml0bWFwc2NhbjsKKy0tIFdlIGV4cGVjdCBhIHRvdGFsIG9mIDQwMCB0dXBsZXMgcmVhZCAo MjAwIGZyb20gcGxhaW4gaW5kZXggc2NhbiwgMjAwIGZyb20KKy0tIGJpdG1hcCBpbmRleCBzY2Fu KS4gIEhvd2V2ZXIsIHdlIG9ubHkgZXhwZWN0IDIwMCB0dXBsZSBmZXRjaGVzLCBiZWNhdXNlCist LSBiaXRtYXAgaW5kZXggc2NhbnMvaGVhcCBzY2FucyBkb24ndCBhZmZlY3QgdGhlIHJlbGV2YW50 IGNvdW50ZXIuCitTRUxFQ1QgcGdfc3RhdF9mb3JjZV9uZXh0X2ZsdXNoKCk7CisgcGdfc3RhdF9m b3JjZV9uZXh0X2ZsdXNoIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykK KworU0VMRUNUIGlkeF90dXBfcmVhZCwgaWR4X3R1cF9mZXRjaCBGUk9NIHBnX3N0YXRfYWxsX2lu ZGV4ZXMKKyAgV0hFUkUgaW5kZXhyZWxpZCA9ICd0ZXN0X2lkeF90dXBfcmVhZF9hX2lkeCc6OnJl Z2NsYXNzOworIGlkeF90dXBfcmVhZCB8IGlkeF90dXBfZmV0Y2ggCistLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICA0MDAgfCAgICAgICAgICAgMjAwCisoMSByb3cpCisK K0RST1AgVEFCTEUgdGVzdF9pZHhfdHVwX3JlYWQ7CiAtLS0tLQogLS0gVGVzdCByZXNldCBvZiBz b21lIHN0YXRzIGZvciBzaGFyZWQgdGFibGUKIC0tLS0tCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9zdGF0cy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0cy5zcWwKaW5k ZXggNjEwZmQyMWZhLi45MjNkMmNiYzAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3N0YXRzLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0cy5zcWwKQEAgLTM5Niw2 ICszOTYsMzUgQEAgU0VMRUNUIHBnX3N0YXRfcmVzZXRfc2luZ2xlX3RhYmxlX2NvdW50ZXJzKCd0 ZXN0X2xhc3Rfc2Nhbl9wa2V5Jzo6cmVnY2xhc3MpOwogU0VMRUNUIGlkeF9zY2FuLCBzdGF0c19y ZXNldCBJUyBOT1QgTlVMTCBBUyBoYXNfc3RhdHNfcmVzZXQKICAgRlJPTSBwZ19zdGF0X2FsbF9p bmRleGVzIFdIRVJFIGluZGV4cmVsaWQgPSAndGVzdF9sYXN0X3NjYW5fcGtleSc6OnJlZ2NsYXNz OwogCistLSBUZXN0IHBnX3N0YXRfYWxsX2luZGV4ZXMuaWR4X3R1cF9yZWFkIGNvdW50ZXIKK0NS RUFURSBURU1QT1JBUlkgVEFCTEUgdGVzdF9pZHhfdHVwX3JlYWQgQVMKKyAgU0VMRUNUIGcgQVMg YSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAyMDApIGc7CitDUkVBVEUgSU5ERVggT04gdGVzdF9p ZHhfdHVwX3JlYWQoYSk7CisKK1NFVCBlbmFibGVfc2Vxc2NhbiA9IG9mZjsKK1NFVCBlbmFibGVf aW5kZXhvbmx5c2NhbiA9IG9mZjsKKy0tIHBsYWluIGluZGV4IHNjYW4KK1NFVCBlbmFibGVfYml0 bWFwc2NhbiA9IG9mZjsKK0VYUExBSU4gKENPU1RTIG9mZikgU0VMRUNUIGNvdW50KCopIEZST00g dGVzdF9pZHhfdHVwX3JlYWQgV0hFUkUgYSBCRVRXRUVOIDEgQU5EIDIwMDsKK1NFTEVDVCBjb3Vu dCgqKSBGUk9NIHRlc3RfaWR4X3R1cF9yZWFkIFdIRVJFIGEgQkVUV0VFTiAxIEFORCAyMDA7Cist LSBiaXRtYXAgaW5kZXggc2NhbgorU0VUIGVuYWJsZV9pbmRleHNjYW4gPSBvZmY7CitTRVQgZW5h YmxlX2JpdG1hcHNjYW4gPSBvbjsKK0VYUExBSU4gKENPU1RTIG9mZikgU0VMRUNUIGNvdW50KCop IEZST00gdGVzdF9pZHhfdHVwX3JlYWQgV0hFUkUgYSBCRVRXRUVOIDEgQU5EIDIwMDsKK1NFTEVD VCBjb3VudCgqKSBGUk9NIHRlc3RfaWR4X3R1cF9yZWFkIFdIRVJFIGEgQkVUV0VFTiAxIEFORCAy MDA7CitSRVNFVCBlbmFibGVfc2Vxc2NhbjsKK1JFU0VUIGVuYWJsZV9pbmRleG9ubHlzY2FuOwor UkVTRVQgZW5hYmxlX2luZGV4c2NhbjsKK1JFU0VUIGVuYWJsZV9iaXRtYXBzY2FuOworCistLSBX ZSBleHBlY3QgYSB0b3RhbCBvZiA0MDAgdHVwbGVzIHJlYWQgKDIwMCBmcm9tIHBsYWluIGluZGV4 IHNjYW4sIDIwMCBmcm9tCistLSBiaXRtYXAgaW5kZXggc2NhbikuICBIb3dldmVyLCB3ZSBvbmx5 IGV4cGVjdCAyMDAgdHVwbGUgZmV0Y2hlcywgYmVjYXVzZQorLS0gYml0bWFwIGluZGV4IHNjYW5z L2hlYXAgc2NhbnMgZG9uJ3QgYWZmZWN0IHRoZSByZWxldmFudCBjb3VudGVyLgorU0VMRUNUIHBn X3N0YXRfZm9yY2VfbmV4dF9mbHVzaCgpOworU0VMRUNUIGlkeF90dXBfcmVhZCwgaWR4X3R1cF9m ZXRjaCBGUk9NIHBnX3N0YXRfYWxsX2luZGV4ZXMKKyAgV0hFUkUgaW5kZXhyZWxpZCA9ICd0ZXN0 X2lkeF90dXBfcmVhZF9hX2lkeCc6OnJlZ2NsYXNzOworRFJPUCBUQUJMRSB0ZXN0X2lkeF90dXBf cmVhZDsKKwogLS0tLS0KIC0tIFRlc3QgcmVzZXQgb2Ygc29tZSBzdGF0cyBmb3Igc2hhcmVkIHRh YmxlCiAtLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBjNWRiNmNhNjcuLjY4MDE4 OTRkNyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEzMzIsOCArMTMzMiw2IEBAIElu ZGV4RGVsZXRlQ291bnRzCiBJbmRleERlbGV0ZVByZWZldGNoU3RhdGUKIEluZGV4RG9DaGVja0Nh bGxiYWNrCiBJbmRleEVsZW0KLUluZGV4RmV0Y2hIZWFwRGF0YQotSW5kZXhGZXRjaFRhYmxlRGF0 YQogSW5kZXhJbmZvCiBJbmRleExpc3QKIEluZGV4T25seVNjYW4KQEAgLTEzNDUsNiArMTM0Myw3 IEBAIEluZGV4UnVudGltZUtleUluZm8KIEluZGV4U2NhbgogSW5kZXhTY2FuRGVzYwogSW5kZXhT Y2FuRGVzY0RhdGEKK0luZGV4U2NhbkhlYXBEYXRhCiBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24K IEluZGV4U2NhblN0YXRlCiBJbmRleFN0YXRlRmxhZ3NBY3Rpb24KLS0gCjIuNTMuMAoK --0000000000004ffa5f0654ddc4ef Content-Type: application/octet-stream; name="v28-0008-heapam-Add-index-scan-I-O-prefetching.patch" Content-Disposition: attachment; filename="v28-0008-heapam-Add-index-scan-I-O-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqpot0fa4 RnJvbSA0N2JkNzAzYzg5ZjYwMjMzNzYzYzlkZDVhYzE3OWU0NWZlNDFiNTUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NTg6MDkgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyOCAwOC8xMV0g aGVhcGFtOiBBZGQgaW5kZXggc2NhbiBJL08gcHJlZmV0Y2hpbmcuCgpUaGlzIGNvbW1pdCBpbXBs ZW1lbnRzIEkvTyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbnMgKGFuZCBpbmRleC1vbmx5CnNj YW5zIHRoYXQgcmVxdWlyZSBoZWFwIGZldGNoZXMpLiBUaGlzIHdhcyBtYWRlIHBvc3NpYmxlIGJ5 IHRoZSByZWNlbnQKYWRkaXRpb24gb2YgYmF0Y2hpbmcgaW50ZXJmYWNlcyB0byBib3RoIHRoZSB0 YWJsZSBBTSBhbmQgaW5kZXggQU0gQVBJcy4KClRoZSBhbWdldGJhdGNoIGluZGV4IEFNIGludGVy ZmFjZSBwcm92aWRlcyBiYXRjaGVzIG9mIG1hdGNoaW5nIFRJRHMKKHJhdGhlciB0aGFuIG9uZSB0 dXBsZSBhdCBhIHRpbWUpLCBlYWNoIG9mIHdoaWNoIG11c3QgYmUgdGFrZW4gZnJvbQppbmRleCB0 dXBsZXMgdGhhdCBhcHBlYXIgdG9nZXRoZXIgb24gYSBzaW5nbGUgaW5kZXggcGFnZS4gIFRoaXMg YWxsb3dzCm11bHRpcGxlIGJhdGNoZXMgdG8gYmUgaGVsZCBvcGVuIHNpbXVsdGFuZW91c2x5LiAg R2l2aW5nIHRoZSB0YWJsZSBBTSBhbgpleHBsaWNpdCB1bmRlcnN0YW5kaW5nIG9mIGluZGV4IEFN IGNvbmNlcHRzL2luZGV4IHBhZ2UgYm91bmRhcmllcyBhbGxvd3MKaXQgdG8gY29uc2lkZXIgYWxs IG9mIHRoZSByZWxldmFudCBjb3N0cyBhbmQgYmVuZWZpdHMuCgpQcmVmZXRjaGluZyBpcyBpbXBs ZW1lbnRlZCB1c2luZyBhIHByZWZldGNoaW5nIHBvc2l0aW9uIHVuZGVyIHRoZQpjb250cm9sIG9m IHRoZSB0YWJsZSBBTS4gIFRoaXMgaXMgY2xvc2VseSByZWxhdGVkIHRvIHRoZSBzY2FuIHBvc2l0 aW9uCmFkZGVkIGJ5IGNvbW1pdCBGSVhNRSwgd2hpY2ggaW50cm9kdWNlZCB0aGUgYW1nZXRiYXRj aCBpbnRlcmZhY2UuICBBCnJlYWQgc3RyZWFtIGNhbGxiYWNrIGFkdmFuY2VzIHRoZSByZWFkIHN0 cmVhbSBhcyBuZWVkZWQgdG8gcHJvdmlkZQpzdWZmaWNpZW50bHkgbWFueSBoZWFwIGJsb2NrIG51 bWJlcnMgdG8gbWFpbnRhaW4gdGhlIHJlYWQgc3RyZWFtJ3MKdGFyZ2V0IHByZWZldGNoIGRpc3Rh bmNlLgoKVGVzdGluZyBoYXMgc2hvd24gdGhhdCBpbmRleCBwcmVmZXRjaGluZyBjYW4gbWFrZSBp bmRleCBzY2FucyBtdWNoCmZhc3Rlci4gIExhcmdlIHJhbmdlIHNjYW5zIHRoYXQgcmV0dXJuIG1h bnkgdHVwbGVzIGNhbiBiZSBhcyBtdWNoIGFzIDMweApmYXN0ZXIgd2l0aCBsb2NhbCBTU0RzIHdo ZW4gYnVmZmVyZWQgSS9PIGlzIHVzZWQsIGFuZCA1MHggZmFzdGVyIG9yIG1vcmUKd2l0aCBoaWdo ZXItbGF0ZW5jeSBzdG9yYWdlIHN1Y2ggYXMgbmV0d29yay1hdHRhY2hlZCBibG9jayBkZXZpY2Vz LAp3aGVyZSB0aGUgYmVuZWZpdCBvZiBoaWRpbmcgSS9PIGxhdGVuY3kgdGhyb3VnaCBwcmVmZXRj aGluZyBpcyBldmVuCmdyZWF0ZXIuCgpBbiBpbXBvcnRhbnQgZ29hbCBvZiB0aGUgYW1nZXRiYXRj aCBkZXNpZ24gaXMgdG8gZW5hYmxlIHRoZSB0YWJsZSBBTSdzCnJlYWQgc3RyZWFtIGNhbGxiYWNr IHRvIGFkdmFuY2UgaXRzIHByZWZldGNoIHBvc2l0aW9uIHVzaW5nIFRJRHMgdGhhdAphcHBlYXIg b24gYSBsZWFmIHBhZ2UgdGhhdCdzIGFoZWFkIG9mIHRoZSBjdXJyZW50IHNjYW4gcG9zaXRpb24n cyBsZWFmCnBhZ2UuICBUaGlzIGlzIGNydWNpYWwgd2l0aCBzY2FucyBvZiBpbmRleGVzIHdoZXJl IGVhY2ggbGVhZiBwYWdlCmhhcHBlbnMgdG8gaGF2ZSByZWxhdGl2ZWx5IGZldyBkaXN0aW5jdCBo ZWFwIGJsb2NrcyBhbW9uZyBpdHMgbWF0Y2hpbmcKVElEcyAoYXMgd2VsbCBhcyB3aXRoIHNjYW5z IHdpdGggbGVhZiBwYWdlcyB0aGF0IGhhdmUgcmVsYXRpdmVseSBmZXcKdG90YWwgbWF0Y2hpbmcg aXRlbXMpLiAgSW5kZXggc2NhbnMgY2FuIGhhdmUgYXMgbWFueSBhcyA2NCBvcGVuIGJhdGNoZXMs CndoaWNoIHRlc3RpbmcgaGFzIHNob3duIHRvIGJlIGFib3V0IHRoZSBtYXhpbXVtIG51bWJlciB0 aGF0IGNhbiBldmVyIGJlCnVzZWZ1bC4gIEJhdGNoZXMgYXJlIG1haW50YWluZWQgaW4gc2NhbiBv cmRlciB1c2luZyBhIHNpbXBsZSByaW5nIGJ1ZmZlcgpkYXRhIHN0cnVjdHVyZS4KCkluIHJhcmUg Y2FzZXMgd2hlcmUgdGhlIHNjYW4gZXhjZWVkcyB0aGlzIHF1YXNpLWFyYml0cmFyeSBsaW1pdCBv ZiA2NCwKdGhlIHJlYWQgc3RyZWFtIGlzIHRlbXBvcmFyaWx5IHBhdXNlZCB1c2luZyB0aGUgcmVh ZCBzdHJlYW0gcGF1c2luZwptZWNoYW5pc20gYWRkZWQgYnkgY29tbWl0IDM4MjI5Y2I5LiAgUHJl ZmV0Y2hpbmcgKHZpYSB0aGUgcmVhZCBzdHJlYW0pCmlzIHJlc3VtZWQgb25seSBhZnRlciB0aGUg c2NhbiBwb3NpdGlvbiBhZHZhbmNlcyBiZXlvbmQgaXRzIGN1cnJlbnQgb3BlbgpiYXRjaCBhbmQg dGhlbiBmcmVlcyBhbmQgcmVtb3ZlcyB0aGUgYmF0Y2ggZnJvbSB0aGUgc2NhbidzIGJhdGNoIHJp bmcKYnVmZmVyLiAgVGVzdGluZyBoYXMgc2hvd24gdGhhdCBpdCBpc24ndCB2ZXJ5IGNvbW1vbiBm b3Igc2NhbnMgdG8gaG9sZApvcGVuIG1vcmUgdGhhbiBhYm91dCAxMCBiYXRjaGVzIHRvIGdldCB0 aGUgZGVzaXJlZCBJL08gcHJlZmV0Y2gKZGlzdGFuY2UuCgpUaGUgaGV1cmlzdGljIHVzZWQgdG8g ZGVjaWRlIHdoZW4gdG8gYmVnaW4gcHJlZmV0Y2hpbmcgZGVsYXlzCmluaXRpYWxpemF0aW9uIG9m IHRoZSBzY2FuJ3MgcmVhZCBzdHJlYW0gdW50aWwgdGhlIHNjYW4gbXVzdCByZWFkIGEKZm91cnRo IGhlYXAgcGFnZS4gIE5vdGUgdGhhdCB0aGUgcnVsZSBpcyB0aGUgc2FtZSBmb3IgaW5kZXgtb25s eSBzY2Fucy4KQXMgYSByZXN1bHQsIGluZGV4LW9ubHkgc2NhbnMgd29uJ3QgY3JlYXRlIGEgcmVh ZCBzdHJlYW0gd2hlbmV2ZXIgdGhleQpyZXF1aXJlIG5vIChvciBvbmx5IHZlcnkgZmV3KSBoZWFw IGZldGNoZXMuCgpBIG5ldyBHVUMgKGVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gpIGNvbnRyb2xz IHRoZSB1c2Ugb2YgaW5kZXgKcHJlZmV0Y2hpbmcuICBUaGUgZGVmYXVsdCBzZXR0aW5nIGlzICdv bicsIHNvIGFsbCBhbWdldGJhdGNoIGluZGV4IHNjYW5zCnVzZSBwcmVmZXRjaGluZy4gIEluZGV4 LW9ubHkgc2NhbnMgYXBwbHkgdGhlIHVzdWFsICJzdGFydCBwcmVmZXRjaGluZyBvbgp0aGUgZm91 cnRoIGhlYXAgcGFnZSIgdGVzdCB0byBnYXRlIHByZWZldGNoaW5nLCBhbmQgc28gd2lsbCBuZXZl ciBjcmVhdGUKYSByZWFkIHN0cmVhbSBpbiBjYXNlcyB3aGVyZSBhbGwgKG9yIGFsbW9zdCBhbGwp IHJlbGV2YW50IHZpc2liaWxpdHkgbWFwCmJpdHMgYXJlIHNldC4KCkF1dGhvcjogVG9tYXMgVm9u ZHJhIDx0b21hc0B2b25kcmEubWU+CkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0Lmll PgpSZXZpZXdlZC1ieTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpSZXZpZXdl ZC1ieTogVGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tL2NmODVmNDZmLWIwMmYtMDViMi01MjQ4LTUwMDBiODk0ZWJhYkBl bnRlcnByaXNlZGIuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAg ICAgICAgICAgIHwgIDE2ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oICAgICAg ICAgICAgICAgfCAyMjggKysrKysrKysrLQogc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAg ICAgICAgICAgICAgICAgIHwgICA3ICsKIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAg ICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5k ZXhzY2FuLmMgICAgfCA0MTcgKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvaW5kZXhiYXRjaC5jICAgICAgICAgfCAgMzUgKy0KIHNyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2Nvc3RzaXplLmMgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y19wYXJhbWV0ZXJzLmRhdCAgICAgfCAgIDcgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9w b3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAxICsKIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAg ICAgICAgICAgICAgICAgICAgICB8ICAxNiArCiBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sICAg ICAgICAgICAgICAgICAgICAgfCAxMDcgKysrKy0KIGRvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwg ICAgICAgICAgICAgICAgICAgICB8ICAgNyArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5 c3ZpZXdzLm91dCAgICAgICAgfCAgIDMgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0ICAgICAgICAgICAgICB8ICAgMSArCiAxNCBmaWxlcyBjaGFuZ2VkLCA4MjUgaW5zZXJ0aW9u cygrKSwgMjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hl YXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IDcxYjY0MjBjOS4uOTg2 YjVkYmU5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0xMzUsNyArMTM1LDIxIEBAIHR5cGVkZWYgc3Ry dWN0IEluZGV4U2NhbkhlYXBEYXRhCiAJLyogUGxhaW4gaW5kZXggc2NhbiB4c19sYXN0aW5ibG9j ayBvcHRpbWl6YXRpb24gKi8KIAlib29sCQl4c19sYXN0aW5ibG9jazsgLyogbGFzdCBUSUQgb24g dGhpcyBibG9jayBpbiBjdXJyZW50IGJhdGNoPyAqLwogCi0JdWludDE2CQl4c19ibGtzd2l0Y2hf Y291bnQ7IC8qIG51bWJlciBvZiBoZWFwIGJsb2NrcyBmZXRjaGVkICovCisJLyoKKwkgKiBSZWFk IHN0cmVhbSBzdGF0ZSBmb3IgcHJlZmV0Y2hpbmcgKG9ubHkgdXNlZCBkdXJpbmcgYW1nZXRiYXRj aCBzY2FucykuCisJICoKKwkgKiBUaGUgcmVhZCBzdHJlYW0gbW92ZXMgYWhlYWQgb2YgdGhlIHNj YW4ncyBjdXJyZW50IHBvc2l0aW9uIHVzaW5nIGl0cworCSAqIG93biBwcmVmZXRjaGluZyBwb3Np dGlvbiAocGVyIHRoZSB0YWJsZWFtX3V0aWxfcHJlZmV0Y2hwb3NfKgorCSAqIGNvbnZlbnRpb25z IGZyb20gaW5kZXhiYXRjaC5oKS4gIFRoZSByZWFkIHN0cmVhbSBpcyBhbGxvY2F0ZWQgZWFybHkg aW4KKwkgKiB0aGUgc2NhbiwgYW5kIHJlc2V0IG9uIHJlc2NhbiAoYW5kIHdoZW4gdGhlIHNjYW4g ZGlyZWN0aW9uIGNoYW5nZXMpLgorCSAqLworCWJvb2wJCXhzX3BhdXNlZDsJCS8qIHBhdXNlZCB1 bnRpbCBuZXh0IGJhdGNoIGlzIHJlYWQ/ICovCisJYm9vbAkJeHNfcHJlZmV0Y2hpbmdfc2FmZTsJ LyogcHJlZmV0Y2hpbmcgaXMgc2FmZT8gKi8KKwl1aW50MTYJCXhzX2Jsa3N3aXRjaF9jb3VudDsg LyogZGV0ZXJtaW5lcyB3aGVuIHRvIHByZWZldGNoICovCisKKwlTY2FuRGlyZWN0aW9uIHhzX3Jl YWRfc3RyZWFtX2RpcjsJLyogaW5kZXggc2NhbiBkaXJlY3Rpb24gKi8KKwlCbG9ja051bWJlciB4 c19wcmVmZXRjaF9ibG9jazsJLyogbGFzdCBibG9jayByZXR1cm5lZCB0byB4c19yZWFkX3N0cmVh bSAqLworCVJlYWRTdHJlYW0gKnhzX3JlYWRfc3RyZWFtOyAvKiBwcmVmZXRjaGluZyByZWFkIHN0 cmVhbSAqLwogCiAJLyogUGVyLXR1cGxlIGNvbnRleHQgZm9yIHBhZGRpbmcgIm5hbWUiIGNvbHVt bnMgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMgKi8KIAlNZW1vcnlDb250ZXh0IHhzX2l0dXBfY3h0 OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaCBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgKaW5kZXggMjRiNTMxNzA1Li5kNzY1MDU5ZTkgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgKKysrIGIvc3JjL2luY2x1ZGUv YWNjZXNzL2luZGV4YmF0Y2guaApAQCAtMTk1LDYgKzE5NSw0MSBAQCBpbmRleF9zY2FuX2JhdGNo X2luZGV4X29wYXF1ZV9keW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRj aCkKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCisvKgorICogQ29tcGFyZSB0d28gYmF0 Y2ggcmluZyBwb3NpdGlvbnMgaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLgorICoKKyAqIFJl dHVybnMgbmVnYXRpdmUgaWYgcG9zMSBpcyBiZWhpbmQgcG9zMiwgMCBpZiBlcXVhbCwgcG9zaXRp dmUgaWYgcG9zMSBpcworICogYWhlYWQgb2YgcG9zMi4KKyAqLworc3RhdGljIGlubGluZSBpbnQK K2luZGV4X3NjYW5fcG9zX2NtcChCYXRjaFJpbmdJdGVtUG9zICpwb3MxLCBCYXRjaFJpbmdJdGVt UG9zICpwb3MyLAorCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWludDgJCWJh dGNoZGlmZjsKKworCUFzc2VydChwb3MxLT52YWxpZCAmJiBwb3MyLT52YWxpZCk7CisKKwliYXRj aGRpZmYgPSAoaW50OCkgKHBvczEtPmJhdGNoIC0gcG9zMi0+YmF0Y2gpOworCisJQXNzZXJ0KGJh dGNoZGlmZiA+IC1JTkRFWF9TQ0FOX01BWF9CQVRDSEVTICYmCisJCSAgIGJhdGNoZGlmZiA8IElO REVYX1NDQU5fTUFYX0JBVENIRVMpOworCisJaWYgKGJhdGNoZGlmZiAhPSAwKQorCXsKKwkJLyog UmVzb2x2ZSBjb21wYXJpc29uIHVzaW5nIGRpZmZlcmluZyBiYXRjaCBvZmZzZXRzICovCisJCXJl dHVybiBiYXRjaGRpZmY7CisJfQorCisJLyoKKwkgKiBSZXNvbHZlIGNvbXBhcmlzb24gdXNpbmcg aXRlbXNbXS13aXNlIGluZGV4ZXMgZnJvbSBjYWxsZXIncyBwb3NpdGlvbnMsCisJICogc2luY2Ug Ym90aCBwb3NpdGlvbnMgcG9pbnQgdG8gdGhlIHNhbWUgcmluZyBidWZmZXIgYmF0Y2gKKwkgKi8K KwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCQlyZXR1cm4gcG9zMS0+ aXRlbSAtIHBvczItPml0ZW07CisJZWxzZQorCQlyZXR1cm4gcG9zMi0+aXRlbSAtIHBvczEtPml0 ZW07Cit9CisKIC8qCiAgKiBBZHZhbmNlIHBvc2l0aW9uIHRvIGl0cyBuZXh0IGl0ZW0gaW4gdGhl IGJhdGNoLgogICoKQEAgLTI5Niw2ICszMzEsNyBAQCB0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX2lu aXQoSW5kZXhTY2FuRGVzYyBzY2FuKQogCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9p bmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKIAogCXNjYW4tPmJhdGNocmluZ2J1Zi5zY2FuUG9z LnZhbGlkID0gZmFsc2U7CisJc2Nhbi0+YmF0Y2hyaW5nYnVmLnByZWZldGNoUG9zLnZhbGlkID0g ZmFsc2U7CiAJc2Nhbi0+YmF0Y2hyaW5nYnVmLm1hcmtQb3MudmFsaWQgPSBmYWxzZTsKIAogCXNj YW4tPmJhdGNocmluZ2J1Zi5tYXJrQmF0Y2ggPSBOVUxMOwpAQCAtMzQ1LDcgKzM4MSw3IEBAIHRh YmxlYW1fdXRpbF9zY2FucG9zX2FkdmFuY2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcmVjdGlvbiwKIAogCS8qCiAJICogc2NhblBvcyBpcyB2YWxpZCwgc28gc2NhbkJhdGNo IG11c3QgYWxyZWFkeSBiZSBsb2FkZWQgaW4gYmF0Y2ggcmluZwotCSAqIGJ1ZmZlci4gIFdlIHJl bHkgb24gdGhhdCBoZXJlLgorCSAqIGJ1ZmZlci4gIFdlIHJlbHkgb24gdGhhdCBoZXJlIChjYW4n dCBkbyB0aGlzIHdpdGggcHJlZmV0Y2hCYXRjaCkuCiAJICovCiAJcGdfYXNzdW1lKGJhdGNocmlu Z2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Qb3MtPmJhdGNoKTsKIApAQCAtMzU3LDkgKzM5Myw5IEBA IHRhYmxlYW1fdXRpbF9zY2FucG9zX2FkdmFuY2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbiwKIC8qCiAgKiBGZXRjaCB0aGUgbmV4dCBiYXRjaCBvZiBtYXRjaGlu ZyBpdGVtcyBmb3IgdGhlIHNjYW4gKG9yIHRoZSBmaXJzdCkuCiAgKgotICogQ2FsbGVkIHdoZW4g Y2FsbGVyJ3MgY3VycmVudCBiYXRjaCAocGFzc2VkIHRvIHVzIGFzIHByaW9yQmF0Y2gpIGhhcyBu byBtb3JlCi0gKiBtYXRjaGluZyBpdGVtcyBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24uICBD YWxsZXIgcGFzc2VzIGEgTlVMTAotICogcHJpb3JCYXRjaCBvbiB0aGUgZmlyc3QgY2FsbCBoZXJl IGZvciB0aGUgc2Nhbi4KKyAqIENhbGxlZCB3aGVuIGNhbGxlcidzIGN1cnJlbnQgc2NhbkJhdGNo L3ByZWZldGNoQmF0Y2ggKHBhc3NlZCB0byB1cyBhcworICogcHJpb3JCYXRjaCkgaGFzIG5vIG1v cmUgbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLiAgQ2FsbGVyCisg KiBwYXNzZXMgYSBOVUxMIHByaW9yQmF0Y2ggb24gdGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhl IHNjYW4uCiAgKgogICogUmV0dXJucyB0aGUgbmV4dCBiYXRjaCB0byBiZSBwcm9jZXNzZWQgYnkg Y2FsbGVyIGluIHRoZSBnaXZlbiBzY2FuCiAgKiBkaXJlY3Rpb24sIG9yIE5VTEwgd2hlbiB0aGVy ZSBhcmUgbm8gbW9yZSBtYXRjaGVzIGluIHRoYXQgZGlyZWN0aW9uLgpAQCAtMzY4LDcgKzQwNCw3 IEBAIHRhYmxlYW1fdXRpbF9zY2FucG9zX2FkdmFuY2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcmVjdGlvbiwKICAqCiAgKiBXZSBkb24ndCBmcmVlIGFueSBiYXRjaGVzIGhl cmU7IHRoYXQgaXMgYSBzZXBhcmF0ZSBzdGVwIHBlcmZvcm1lZCBieQogICogdGFibGVhbV91dGls X3NjYW5wb3NfbmV4dGJhdGNoLiAgQ2FsbGVyIGFsc28gbmVlZHMgdG8gYWR2YW5jZSB0aGVpcgot ICogcG9zaXRpb24gdG8gdGhlIHN0YXJ0IG9mIHRoZSByZXR1cm5lZCBiYXRjaC4KKyAqIHNjYW5Q b3MvcHJlZmV0Y2hQb3MgcG9zaXRpb24gdG8gdGhlIHN0YXJ0IG9mIHRoZSByZXR1cm5lZCBiYXRj aC4KICAqLwogc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIEluZGV4U2NhbkJhdGNo CiB0YWJsZWFtX3V0aWxfZmV0Y2hfbmV4dF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uLApAQCAtNDgyLDEzICs1MTgsMTkgQEAgdGFibGVhbV91dGlsX2Zl dGNoX25leHRfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlv biwKICAqIG5vdy1vYnNvbGVzY2VudCBvbGQgc2NhbkJhdGNoICh0aGUgcmluZyBidWZmZXIncyBo ZWFkIGJhdGNoKSwgZnJlZWluZyB1cAogICogaXRzIHJpbmcgYnVmZmVyIHNsb3QuICAoV2hlbiBu ZXdTY2FuQmF0Y2ggaXMgdGhlIHNjYW4ncyBmaXJzdCBiYXRjaCwgdGhlcmUKICAqIGlzIG5vIG9s ZCBzY2FuQmF0Y2ggZm9yIHVzIHRvIHJlbGVhc2UuKQorICoKKyAqIFJldHVybiB2YWx1ZSBpbmRp Y2F0ZXMgaWYgYSBwcmV2aW91c2x5IG9jY3VwaWVkIHJpbmcgYnVmZmVyIHNsb3Qgd2FzIGZyZWVk LgorICogQSB0YWJsZSBBTSB0aGF0IHBhdXNlZCBpdHMgcHJlZmV0Y2ggbWVjaGFuaXNtIGJlY2F1 c2UgdGhlIHJpbmcgYnVmZmVyIHdhcworICogZnVsbCAoc2VlIHRhYmxlYW1fdXRpbF9wcmVmZXRj aHBvc19hZHZhbmNlKSBjYW4gcmVzdW1lIGl0IHdoZW4gd2UgcmV0dXJuCisgKiB0cnVlICh0byBp bmRpY2F0ZSB0byBjYWxsZXIgdGhhdCB0aGVyZSdzIG5vdyBzcGFjZSB0byBzdG9yZSBhbm90aGVy IGJhdGNoKS4KICAqLwotc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQKK3N0 YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBib29sCiB0YWJsZWFtX3V0aWxfc2NhbnBv c19uZXh0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwK IAkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBuZXdTY2FuQmF0Y2gpCiB7CiAJQmF0Y2hSaW5nQnVm ZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOwogCUJhdGNoUmluZ0l0ZW1Q b3MgKnNjYW5Qb3MgPSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9zOworCUJhdGNoUmluZ0l0ZW1Qb3Mg KnByZWZldGNoUG9zID0gJmJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQb3M7CiAJYm9vbAkJcmVsZWFz ZU9sZEhlYWRCYXRjaCA9IHNjYW5Qb3MtPnZhbGlkOwogCUluZGV4U2NhbkJhdGNoIGhlYWRCYXRj aDsKIApAQCAtNTAwLDcgKzU0Miw3IEBAIHRhYmxlYW1fdXRpbF9zY2FucG9zX25leHRiYXRjaChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCXsKIAkJLyogbmV3 U2NhbkJhdGNoIGlzIHRoZSBzY2FuJ3MgZmlyc3QgYW5kIG9ubHkgYmF0Y2ggKi8KIAkJQXNzZXJ0 KGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Qb3MtPmJhdGNoKTsKLQkJcmV0dXJuOwor CQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJaGVhZEJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2Fu LCBiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCk7CkBAIC01MTEsMTIgKzU1MywxODQgQEAgdGFibGVh bV91dGlsX3NjYW5wb3NfbmV4dGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXJlY3Rpb24sCiAJLyogZnJlZSBvYnNvbGVzY2VudCBoZWFkIGJhdGNoICh1bmxlc3MgaXQg aXMgc2NhbidzIG1hcmtCYXRjaCkgKi8KIAl0YWJsZWFtX3V0aWxfcmVsZWFzZV9iYXRjaChzY2Fu LCBoZWFkQmF0Y2gpOwogCisJLyoKKwkgKiBJZiB3ZSdyZSBhYm91dCB0byByZWxlYXNlIHRoZSBi YXRjaCB0aGF0IHByZWZldGNoUG9zIGN1cnJlbnRseSBwb2ludHMKKwkgKiB0bywganVzdCBpbnZh bGlkYXRlIHByZWZldGNoUG9zLiAgVGhpcyBrZWVwcyBwcmVmZXRjaFBvcyBmcm9tIGV2ZXIKKwkg KiBmYWxsaW5nIGJlaGluZCBzY2FuUG9zIGF0IHRoZSBiYXRjaCBncmFudWxhcml0eSwgd2hpY2gK KwkgKiB0YWJsZWFtX3V0aWxfcHJlZmV0Y2hwb3NfY2F0Y2h1cCByZWxpZXMgb24uCisJICovCisJ aWYgKHByZWZldGNoUG9zLT52YWxpZCAmJgorCQlwcmVmZXRjaFBvcy0+YmF0Y2ggPT0gYmF0Y2hy aW5nYnVmLT5oZWFkQmF0Y2gpCisJCXByZWZldGNoUG9zLT52YWxpZCA9IGZhbHNlOworCiAJLyog UmVtb3ZlIHRoZSBiYXRjaCBmcm9tIHRoZSByaW5nIGJ1ZmZlciAoZXZlbiBpZiBpdCdzIG1hcmtC YXRjaCkgKi8KIAliYXRjaHJpbmdidWYtPmhlYWRCYXRjaCsrOwogCiAJLyogUG9zdGNvbmRpdGlv bnMgZm9yIGhhdmluZyBmcmVlZCB1cCBhIHJpbmcgYnVmZmVyIHNsb3QgKi8KKwlBc3NlcnQoIXBy ZWZldGNoUG9zLT52YWxpZCB8fAorCQkgICBpbmRleF9zY2FuX2JhdGNoX2xvYWRlZChzY2FuLCBw cmVmZXRjaFBvcy0+YmF0Y2gpKTsKIAlBc3NlcnQoIWluZGV4X3NjYW5fYmF0Y2hfZnVsbChzY2Fu KSk7CiAJQXNzZXJ0KGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Qb3MtPmJhdGNoKTsK KworCXJldHVybiB0cnVlOworfQorCisvKgorICogSGFuZGxlIGluaXRpYWxpemF0aW9uIG9mIHRo ZSBzY2FuJ3MgcHJlZmV0Y2hQb3MsIHdoZW4gcHJlZmV0Y2hQb3MgaXNuJ3QKKyAqIHlldCB2YWxp ZCAoYWxzbyBoYW5kbGVzIHRoZSBwcmVmZXRjaFBvcyA8IHNjYW5Qb3MgZWRnZSBjYXNlKS4KKyAq CisgKiBDYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggdGFibGUgQU0gcHJlZmV0Y2ggY2FsbGJh Y2sgY2FsbC4gIFJldHVybnMgdHJ1ZQorICogYWZ0ZXIgc2V0dGluZyBwcmVmZXRjaFBvcyB0byB0 aGUgc2NhbidzIGN1cnJlbnQgc2NhblBvcy4gIFRoYXQncyBhIHNwZWNpYWwKKyAqIGNhc2U6IHRo ZSBwcmVmZXRjaCBjYWxsYmFjayBzaG91bGQgcHJvY2VzcyB0aGUgdmVyeSBpdGVtIHRoYXQgdGhl IHNjYW4gaXMKKyAqIG9uIGRpcmVjdGx5IChlLmcuLCBieSByZXR1cm5pbmcgdGhhdCBpdGVtJ3Mg dGFibGUgYmxvY2sgdG8gaXRzIHJlYWQKKyAqIHN0cmVhbSksIHJhdGhlciB0aGFuIHJlYWRpbmcg YWhlYWQgb2YgdGhlIHNjYW4uICBSZXR1cm5zIGZhbHNlIHdoZW4KKyAqIHByZWZldGNoUG9zIGlz IGFoZWFkIG9mIChvciBlcXVhbCB0bykgc2NhblBvcywgaW4gd2hpY2ggY2FzZSB0aGUgcHJlZmV0 Y2gKKyAqIGNhbGxiYWNrIHBpY2tzIHVwIGZyb20gd2hlcmUgaXRzIGxhc3QgY2FsbCBsZWZ0IG9m Zi4KKyAqLworc3RhdGljIGlubGluZSBib29sCit0YWJsZWFtX3V0aWxfcHJlZmV0Y2hwb3NfY2F0 Y2h1cChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJh dGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlCYXRj aFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJmJhdGNocmluZ2J1Zi0+c2NhblBvczsKKwlCYXRjaFJp bmdJdGVtUG9zICpwcmVmZXRjaFBvcyA9ICZiYXRjaHJpbmdidWYtPnByZWZldGNoUG9zOworCisJ LyoKKwkgKiBzY2FuUG9zIG11c3QgYWx3YXlzIGJlIHZhbGlkIHdoZW4gcHJlZmV0Y2hpbmcgdGFr ZXMgcGxhY2UuICBUaGVyZSBoYXMKKwkgKiB0byBiZSBhdCBsZWFzdCBvbmUgYmF0Y2gsIGxvYWRl ZCBhcyB0aGUgc2NhbidzIHNjYW5CYXRjaC4KKwkgKi8KKwlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRj aF9jb3VudChzY2FuKSA+IDApOworCUFzc2VydChzY2FuUG9zLT52YWxpZCAmJiBpbmRleF9zY2Fu X2JhdGNoX2xvYWRlZChzY2FuLCBzY2FuUG9zLT5iYXRjaCkpOworCisJLyoKKwkgKiBwcmVmZXRj aFBvcyBjYW4gImZhbGwgYmVoaW5kIiBzY2FuUG9zIGF0IHRoZSBpdGVtIGdyYW51bGFyaXR5OiB0 aGUKKwkgKiBwcmVmZXRjaCBjYWxsYmFjayBvbmx5IHJ1bnMgb24gZGVtYW5kLCBzbyBzY2FuUG9z IGNhbiBvdmVydGFrZQorCSAqIHByZWZldGNoUG9zIHdoZW5ldmVyIHRoZSBzY2FuIGNvbnN1bWVz IGl0ZW1zIHdpdGhvdXQgdGhlIGNhbGxiYWNrIGJlaW5nCisJICogY2FsbGVkIChlLmcuLCBydW5z IG9mIGFkamFjZW50IG1hdGNoaW5nIGl0ZW1zIHdob3NlIFRJRHMgYWxsIHBvaW50IHRvCisJICog dGhlIHNhbWUgdGFibGUgYmxvY2spLiAgV2UgaGFuZGxlIHRoYXQgY2FzZSB1c2luZyBleGFjdGx5 IHRoZSBzYW1lCisJICogc3RlcHMgYXMgaW5pdGlhbGl6YXRpb24uCisJICoKKwkgKiBwcmVmZXRj aFBvcyBjYW4gbmV2ZXIgZmFsbCBiZWhpbmQgc2NhblBvcyBhdCB0aGUgYmF0Y2ggZ3JhbnVsYXJp dHksCisJICogc2luY2UgdGFibGVhbV91dGlsX3NjYW5wb3NfbmV4dGJhdGNoIGludmFsaWRhdGVz IHByZWZldGNoUG9zIGJlZm9yZQorCSAqIHJlbGVhc2luZyB0aGUgYmF0Y2ggdGhhdCBwcmVmZXRj aFBvcyBwb2ludHMgdG8uICBUaGVyZSBpcyB0aGVyZWZvcmUgbm8KKwkgKiBkYW5nZXIgb2YgcHJl ZmV0Y2hQb3MuYmF0Y2ggZmFsbGluZyBzbyBmYXIgYmVoaW5kIHNjYW5Qb3MuYmF0Y2ggdGhhdCBp dAorCSAqIHdyYXBzIGFyb3VuZCAoYW5kIGFwcGVhcnMgdG8gYmUgYWhlYWQgb2Ygc2NhblBvcyBp bnN0ZWFkIG9mIGJlaGluZCBpdCkuCisJICovCisJaWYgKCFwcmVmZXRjaFBvcy0+dmFsaWQgfHwK KwkJaW5kZXhfc2Nhbl9wb3NfY21wKHNjYW5Qb3MsIHByZWZldGNoUG9zLCBkaXJlY3Rpb24pID4g MCkKKwl7CisJCSpwcmVmZXRjaFBvcyA9ICpzY2FuUG9zOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisK KwkvKiBQaWNraW5nIHVwIHByZWZldGNoaW5nIGZyb20gd2hlcmUgdGhlIGxhc3QgY2FsbGJhY2sg Y2FsbCBsZWZ0IG9mZiAqLworCUFzc2VydChpbmRleF9zY2FuX3Bvc19jbXAoc2NhblBvcywgcHJl ZmV0Y2hQb3MsIGRpcmVjdGlvbikgPD0gMCk7CisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICog UmVzdWx0IG9mIGEgdGFibGVhbV91dGlsX3ByZWZldGNocG9zX2FkdmFuY2UgY2FsbAorICovCit0 eXBlZGVmIGVudW0gQmF0Y2hQb3NBZHZhbmNlUmVzdWx0Cit7CisJQkFUQ0hfUE9TX0FEVkFOQ0VE LAkJCS8qIGFkdmFuY2VkIHRvIG5leHQgaXRlbSBpbiBjdXJyZW50IGJhdGNoICovCisJQkFUQ0hf UE9TX0JBVENIX0FEVkFOQ0VELAkvKiBhZHZhbmNlZCB0byBmaXJzdCBpdGVtIG9mIG5ldyBiYXRj aCAqLworCUJBVENIX1BPU19ET05FLAkJCQkvKiBubyBmdXJ0aGVyIG1hdGNoaW5nIGl0ZW1zIGlu IGRpcmVjdGlvbiAqLworCUJBVENIX1BPU19SSU5HX0ZVTEwsCQkvKiBjb3VsZG4ndCBhZHZhbmNl OyByaW5nIGJ1ZmZlciBmdWxsICovCit9IEJhdGNoUG9zQWR2YW5jZVJlc3VsdDsKKworLyoKKyAq IEFkdmFuY2UgdGhlIHNjYW4ncyBwcmVmZXRjaFBvcyB0byB0aGUgbmV4dCBpdGVtIHRoYXQgdGhl IHRhYmxlIEFNJ3MKKyAqIHByZWZldGNoIGNhbGxiYWNrIHNob3VsZCBjb25zaWRlciByZWFkaW5n IGFoZWFkLCBtb3ZpbmcgaW4gdGhlIGdpdmVuIHNjYW4KKyAqIGRpcmVjdGlvbi4KKyAqCisgKiBP biBlbnRyeSwgKnByZWZldGNoQmF0Y2ggbXVzdCBiZSB0aGUgYmF0Y2ggdGhhdCBwcmVmZXRjaFBv cyBwb2ludHMgdG8uCisgKiBBZHZhbmNlcyBwcmVmZXRjaFBvcyB0byB0aGUgbmV4dCBpdGVtIHdp dGhpbiAqcHJlZmV0Y2hCYXRjaCB3aGVuIHBvc3NpYmxlCisgKiAocmV0dXJucyBCQVRDSF9QT1Nf QURWQU5DRUQpLiAgT3RoZXJ3aXNlIHRyaWVzIHRvIGFkdmFuY2UgdG8gdGhlIHNjYW4ncworICog bmV4dCBiYXRjaCwgc2V0dGluZyAqcHJlZmV0Y2hCYXRjaCB0byB0aGUgbmV3IGJhdGNoIGFuZCBw b3NpdGlvbmluZworICogcHJlZmV0Y2hQb3MgYXQgaXRzIGZpcnN0IGl0ZW0gaW4gdGhlIHNjYW4g ZGlyZWN0aW9uIChyZXR1cm5zCisgKiBCQVRDSF9QT1NfQkFUQ0hfQURWQU5DRUQpLiAgQ2FsbGVy cyBtdXN0IHVzZSB0aGUgcmV0dXJuZWQgcmVzdWx0IChuZXZlcgorICogY29tcGFyZSAqcHJlZmV0 Y2hCYXRjaCBhZ2FpbnN0IGl0cyBlYXJsaWVyIHZhbHVlKSB0byBkZXRlY3QgdGhpcyBjYXNlOwor ICogYmF0Y2ggcmVjeWNsaW5nIGNhbiByZXVzZSB0aGUgbWVtb3J5IG9mIGEgcmVjZW50bHkgcmVs ZWFzZWQgYmF0Y2guCisgKgorICogUmV0dXJucyBCQVRDSF9QT1NfRE9ORSB3aGVuIHRoZXJlIGFy ZSBubyBmdXJ0aGVyIG1hdGNoaW5nIGl0ZW1zIGluIHRoZQorICogZ2l2ZW4gc2NhbiBkaXJlY3Rp b24gKCpwcmVmZXRjaEJhdGNoIGlzIHNldCB0byBOVUxMKS4KKyAqCisgKiBSZXR1cm5zIEJBVENI X1BPU19SSU5HX0ZVTEwgd2hlbiB0aGUgbmV4dCBiYXRjaCBjb3VsZG4ndCBiZSBsb2FkZWQgYmVj YXVzZQorICogYWxsIGF2YWlsYWJsZSByaW5nIGJ1ZmZlciBiYXRjaCBzbG90cyBhcmUgY3VycmVu dGx5IGluIHVzZSAocHJlZmV0Y2hQb3MKKyAqIGFuZCAqcHJlZmV0Y2hCYXRjaCBhcmUgbGVmdCB1 bmNoYW5nZWQpLiAgQ2FsbGVyIHJlc3BvbmRzIGJ5IG1vbWVudGFyaWx5CisgKiBwYXVzaW5nIGl0 cyByZWFkLWFoZWFkIG1lY2hhbmlzbTsgaXQgY2FuIGJlIHJlc3VtZWQgb25jZQorICogdGFibGVh bV91dGlsX3NjYW5wb3NfbmV4dGJhdGNoIHJlcG9ydHMgdGhhdCB0aGUgc2NhbiBmcmVlZCB1cCBh IHNsb3QKKyAqICh3aGljaCdsbCBoYXBwZW4gb25seSBhZnRlciBzY2FuUG9zIGhhcyBjb25zdW1l ZCBhbGwgcmVtYWluaW5nIGl0ZW1zIGZyb20KKyAqIHRoZSBzY2FuJ3MgY3VycmVudCBzY2FuQmF0 Y2gpLgorICoKKyAqIFdoZW4gY2FsbGVyIHBhc3NlcyB0aHJvdHRsZT10cnVlIHdlIGxpa2V3aXNl IGRlY2xpbmUgdG8gYWR2YW5jZSB0byB0aGUgbmV4dAorICogYmF0Y2ggYW5kIHJldHVybiBCQVRD SF9QT1NfUklOR19GVUxMIGluc3RlYWQuICBDYWxsZXIgdXNlcyB0aGlzIHRvIGNhcCBob3cKKyAq IG1hbnkgYmF0Y2hlcyBhIHNpbmdsZSByZWFkLWFoZWFkIGNhbGxiYWNrIGludm9jYXRpb24gY2Fu IGFkdmFuY2UgYnkuCisgKiBBZHZhbmNpbmcgd2l0aGluIHRoZSBjdXJyZW50IGJhdGNoIChCQVRD SF9QT1NfQURWQU5DRUQpIGlnbm9yZXMgdGhyb3R0bGUsCisgKiBzbyB0aHJvdHRsaW5nIG9ubHkg dGFrZXMgZWZmZWN0IGF0IGEgYmF0Y2ggYm91bmRhcnkuCisgKi8KK3N0YXRpYyBpbmxpbmUgQmF0 Y2hQb3NBZHZhbmNlUmVzdWx0Cit0YWJsZWFtX3V0aWxfcHJlZmV0Y2hwb3NfYWR2YW5jZShJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkgSW5kZXhT Y2FuQmF0Y2ggKnByZWZldGNoQmF0Y2gsCisJCQkJCQkJCSBCYXRjaFJpbmdJdGVtUG9zICpwcmVm ZXRjaFBvcywKKwkJCQkJCQkJIGJvb2wgdGhyb3R0bGUpCit7CisJaWYgKCFpbmRleF9zY2FuX3Bv c19hZHZhbmNlKGRpcmVjdGlvbiwgKnByZWZldGNoQmF0Y2gsIHByZWZldGNoUG9zKSkKKwl7CisJ CS8qCisJCSAqIFJhbiBvdXQgb2YgaXRlbXMgZnJvbSBwcmVmZXRjaEJhdGNoLiAgVHJ5IHRvIGFk dmFuY2UgdG8gdGhlIHNjYW4ncworCQkgKiBuZXh0IGJhdGNoLgorCQkgKi8KKwkJaWYgKHVubGlr ZWx5KGluZGV4X3NjYW5fYmF0Y2hfZnVsbChzY2FuKSkgfHwgdW5saWtlbHkodGhyb3R0bGUpKQor CQl7CisJCQkvKgorCQkJICogQ2FuJ3QgYWR2YW5jZSBwcmVmZXRjaEJhdGNoIGJlY2F1c2UgYWxs IGF2YWlsYWJsZSByaW5nIGJ1ZmZlcgorCQkJICogYmF0Y2ggc2xvdHMgYXJlIGN1cnJlbnRseSBp biB1c2UgKG9yIGJlY2F1c2UgY2FsbGVyIHdhbnRzIHVzIHRvCisJCQkgKiB0aHJvdHRsZSBpbnN0 ZWFkIG9mIHJldHVybmluZyBhbm90aGVyIGJhdGNoKS4gIFVuZG8gdGhlIGNoYW5nZXMKKwkJCSAq IHdlJ3ZlIGFscmVhZHkgbWFkZSB0byBwcmVmZXRjaFBvcyBiZWZvcmUgcmV0dXJuaW5nLCBsZWF2 aW5nIGl0CisJCQkgKiBpbiBhIHN0YXRlIHRoYXQncyBjb25zaXN0ZW50IHdpdGggdGhlIHdvcmsg YWN0dWFsbHkgcGVyZm9ybWVkCisJCQkgKiAodmFyaW91cyBwb3NpdGlvbmFsIHN0YXRlIGFzc2Vy dGlvbnMgZXhwZWN0IHRoaXMpLgorCQkJICovCisJCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChkaXJlY3Rpb24pKQorCQkJeworCQkJCUFzc2VydChwcmVmZXRjaFBvcy0+aXRlbSA9PSAoKnBy ZWZldGNoQmF0Y2gpLT5sYXN0SXRlbSArIDEpOworCQkJCXByZWZldGNoUG9zLT5pdGVtLS07CisJ CQl9CisJCQllbHNlCQkJCS8qIFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkICovCisJCQl7CisJCQkJ QXNzZXJ0KHByZWZldGNoUG9zLT5pdGVtID09ICgqcHJlZmV0Y2hCYXRjaCktPmZpcnN0SXRlbSAt IDEpOworCQkJCXByZWZldGNoUG9zLT5pdGVtKys7CisJCQl9CisKKwkJCXJldHVybiBCQVRDSF9Q T1NfUklOR19GVUxMOworCQl9CisKKwkJLyogV2UgaGF2ZSBhIGZyZWUgcmluZyBidWZmZXIgc2xv dCB0byBmaXQgYW5vdGhlciBiYXRjaCAqLworCQkqcHJlZmV0Y2hCYXRjaCA9IHRhYmxlYW1fdXRp bF9mZXRjaF9uZXh0X2JhdGNoKHNjYW4sIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJCQkgICAqcHJl ZmV0Y2hCYXRjaCwKKwkJCQkJCQkJCQkJCQkgICBwcmVmZXRjaFBvcyk7CisJCWlmICgqcHJlZmV0 Y2hCYXRjaCA9PSBOVUxMKQorCQl7CisJCQkvKgorCQkJICogRGVsaWJlcmF0ZWx5IGxlYXZlIHBy ZWZldGNoUG9zIGluICJqdXN0LWJlZm9yZS1zdGFydCIgb3IKKwkJCSAqICJqdXN0LWFmdGVyLWVu ZCIgcG9zaXRpb24KKwkJCSAqLworCQkJcmV0dXJuIEJBVENIX1BPU19ET05FOworCQl9CisKKwkJ LyoKKwkJICogSGF2ZSBhIG5ldyBwcmVmZXRjaEJhdGNoLgorCQkgKgorCQkgKiB0YWJsZWFtX3V0 aWxfZmV0Y2hfbmV4dF9iYXRjaCBhbHJlYWR5IGFwcGVuZGVkIHRoZSBuZXcgYmF0Y2ggdG8gdGhl CisJCSAqIHJpbmcgYnVmZmVyIGZvciB1cywgYnV0IHdlIG11c3QgYWR2YW5jZSBwcmVmZXRjaFBv cyBvdXJzZWx2ZXMuCisJCSAqIFBvc2l0aW9uIHByZWZldGNoUG9zIHRvIHRoZSBzdGFydCBvZiB0 aGUgbmV3IGJhdGNoLgorCQkgKi8KKwkJaW5kZXhfc2Nhbl9wb3Nfc3RhcnRiYXRjaChkaXJlY3Rp b24sICpwcmVmZXRjaEJhdGNoLCBwcmVmZXRjaFBvcyk7CisKKwkJcmV0dXJuIEJBVENIX1BPU19C QVRDSF9BRFZBTkNFRDsKKwl9CisKKwlyZXR1cm4gQkFUQ0hfUE9TX0FEVkFOQ0VEOwogfQogCiAv KgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXggM2ExZTYxNmQzLi4xOGMzNWE2ZjQgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3Jl bHNjYW4uaApAQCAtMTg2LDYgKzE4NiwxMCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5CYXRj aERhdGEKIAkgKiBUaGlzIGFsbG93cyB0YWJsZSBBTXMgdG8gYXZvaWQgcmVkdW5kYW50IGFtZ2V0 YmF0Y2ggY2FsbHMgd2l0aCB0aGUgc2FtZQogCSAqIHByaW9yYmF0Y2ggLS0gdGhlIGluZGV4IEFN IG1pZ2h0IG5lZWQgdG8gcmVhZCBhZGRpdGlvbmFsIGluZGV4IHBhZ2VzIHRvCiAJICogZGV0ZXJt aW5lIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoaW5nIGl0ZW1zIGJleW9uZCBjYWxsZXIncyBwcmlv cmJhdGNoLgorCSAqIEluIHBhcnRpY3VsYXIsIGR1cmluZyBwcmVmZXRjaGluZyB0aGUgcmVhZCBz dHJlYW0gY2FsbGJhY2sgZGlzY292ZXJzCisJICogdGhlIGVuZC1vZi1zY2FuIHZpYSBwcmVmZXRj aEJhdGNoLiAgdGFibGVhbV91dGlsX2ZldGNoX25leHRfYmF0Y2goKQorCSAqIGNoZWNrcyB0aGVz ZSBmbGFncyBzbyB0aGF0IHRoZSBzY2FuIHNpZGUgZG9lc24ndCByZXBlYXQgdGhlIHNhbWUKKwkg KiBhbWdldGJhdGNoIGNhbGwgd2hlbiBpdCBsYXRlciByZWFjaGVzIHRoYXQgYmF0Y2ggYXMgc2Nh bkJhdGNoLgogCSAqLwogCWJvb2wJCWtub3duRW5kQmFja3dhcmQ7CiAJYm9vbAkJa25vd25FbmRG b3J3YXJkOwpAQCAtMjM2LDExICsyNDAsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0 Y2hEYXRhICpJbmRleFNjYW5CYXRjaDsKICAqIGN1cnJlbnQgcmVhZCBwb3NpdGlvbiBieSBfbXVs dGlwbGVfIGJhdGNoZXMvaW5kZXggcGFnZXMuICBUaGUgZnVydGhlciBvdXQKICAqIHRoZSB0YWJs ZSBBTSByZWFkcyBhaGVhZCBsaWtlIHRoaXMsIHRoZSBmdXJ0aGVyIGl0IGNhbiBzZWUgaW50byB0 aGUgZnV0dXJlLgogICogVGhhdCB3YXkgdGhlIHRhYmxlIEFNIGlzIGFibGUgdG8gcmVvcmRlciB3 b3JrIGFzIGFnZ3Jlc3NpdmVseSBhcyBkZXNpcmVkLgorICogSW5kZXggc2NhbnMgc29tZXRpbWVz IG5lZWQgdG8gcmVhZGFoZWFkIGJ5IHNldmVyYWwgZG96ZW4gYmF0Y2hlcyBpbiBvcmRlcgorICog dG8gbWFpbnRhaW4gYW4gb3B0aW1hbCBJL08gcHJlZmV0Y2ggZGlzdGFuY2UgKGZvciByZWFkaW5n IHRhYmxlIGJsb2NrcykuCiAgKi8KIHR5cGVkZWYgc3RydWN0IEJhdGNoUmluZ0J1ZmZlcgogewog CS8qIGN1cnJlbnQgcG9zaXRpb25zIGluIEluZGV4U2NhbkRlc2NEYXRhLmJhdGNoYnVmW10gZm9y IHNjYW4gKi8KIAlCYXRjaFJpbmdJdGVtUG9zIHNjYW5Qb3M7CS8qIHNjYW4ncyByZWFkIHBvc2l0 aW9uICovCisJQmF0Y2hSaW5nSXRlbVBvcyBwcmVmZXRjaFBvczsJLyogcHJlZmV0Y2hpbmcgcG9z aXRpb24gKi8KIAlCYXRjaFJpbmdJdGVtUG9zIG1hcmtQb3M7CS8qIG1hcmsvcmVzdG9yZSBwb3Np dGlvbiAqLwogCiAJLyogbWFya1BvcydzIGJhdGNoIChub3QgaW4gcmluZyBidWZmZXIgd2hlbiBt YXJrQmF0Y2ggIT0gc2NhbkJhdGNoKSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1p emVyL2Nvc3QuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKaW5kZXggZjJmZDVkMzE1 Li40MTkzMDBhNmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKKysr IGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaApAQCAtNTIsNiArNTIsNyBAQCBleHRlcm4g UEdETExJTVBPUlQgaW50IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXI7CiBleHRlcm4g UEdETExJTVBPUlQgYm9vbCBlbmFibGVfc2Vxc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29s IGVuYWJsZV9pbmRleHNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhv bmx5c2NhbjsKK2V4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleHNjYW5fcHJlZmV0 Y2g7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfYml0bWFwc2NhbjsKIGV4dGVybiBQ R0RMTElNUE9SVCBib29sIGVuYWJsZV90aWRzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wg ZW5hYmxlX3NvcnQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f aW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMK aW5kZXggZTliMWVhODUxLi41ZWEzYzBjY2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faW5kZXhzY2FuLmMKQEAgLTE5LDExICsxOSwyNCBAQAogI2luY2x1ZGUgImFjY2Vzcy9p bmRleGJhdGNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJhY2Nl c3MvdmlzaWJpbGl0eW1hcC5oIgorI2luY2x1ZGUgIm9wdGltaXplci9jb3N0LmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2lu Y2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcGdzdGF0X2ludGVybmFs LmgiCiAKKy8qCisgKiBXZSBhdm9pZCBjcmVhdGluZyBhIHJlYWQgc3RyZWFtIGR1cmluZyB2ZXJ5 IHNlbGVjdGl2ZSBzY2FucyB0aGF0IHJlcXVpcmUKKyAqIGZldyBoZWFwIGZldGNoZXMsIHdoZXJl IHRoZSBvdmVyaGVhZCBvZiBjcmVhdGluZyBhIHJlYWQgc3RyZWFtIGlzIHVubGlrZWx5CisgKiB0 byBwYXkgZm9yIGl0c2VsZgorICovCisjZGVmaW5lIElOREVYX1BSRUZFVENIX0JMS1NXSVRDSF9U SFJFU0hPTEQgNAorCisvKgorICogTWF4aW11bSBudW1iZXIgb2YgYmF0Y2hlcyB0aGF0IGEgc2lu Z2xlIGhlYXBhbV9pbmRleF9wcmVmZXRjaF9uZXh0X2Jsb2NrCisgKiBjYWxsIG1heSBhZHZhbmNl IHByZWZldGNoQmF0Y2ggYnkgd2l0aG91dCByZXR1cm5pbmcgYSBoZWFwIGJsb2NrCisgKi8KKyNk ZWZpbmUgSU5ERVhfUFJFRkVUQ0hfTUFYX0JBVENIX0FEVkFOQ0VTIDEKIAogLyoKICAqIGhlYXBh bSdzIHBlci1iYXRjaCBwcml2YXRlIG9wYXF1ZSBhcmVhIChvbmx5IHVzZWQgZHVyaW5nIGluZGV4 LW9ubHkgc2NhbnMpLgpAQCAtOTEsNiArMTA0LDE0IEBAIHN0YXRpYyB2b2lkIGhlYXBhbV9pbmRl eF9iYXRjaF9wb3NfdmlzaWJpbGl0eShJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkJCSAg SW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCiAJCQkJCQkJCQkJCSAgSGVhcEJhdGNoRGF0YSAqaGJhdGNo LAogCQkJCQkJCQkJCQkgIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcyk7CitzdGF0aWMgcGdfbm9pbmxp bmUgdm9pZCBoZWFwYW1faW5kZXhfZGlyY2hhbmdlX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwK KwkJCQkJCQkJCQkJCQkgSW5kZXhTY2FuSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCQkJCQkJCSBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxp bmUgdm9pZCBoZWFwYW1faW5kZXhfY29uc2lkZXJfcHJlZmV0Y2hpbmcoSW5kZXhTY2FuRGVzYyBz Y2FuLAorCQkJCQkJCQkJCQkJCQkJCQkJIEluZGV4U2NhbkhlYXBEYXRhICpoc2Nhbik7CitzdGF0 aWMgQmxvY2tOdW1iZXIgaGVhcGFtX2luZGV4X3ByZWZldGNoX25leHRfYmxvY2soUmVhZFN0cmVh bSAqc3RyZWFtLAorCQkJCQkJCQkJCQkJCXZvaWQgKmNhbGxiYWNrX3ByaXZhdGVfZGF0YSwKKwkJ CQkJCQkJCQkJCQl2b2lkICpwZXJfYnVmZmVyX2RhdGEpOwogCiAvKgogICogU2ltcGxlLCBzaW5n bGUtc2hvdCBUSUQgbG9va3VwIGZvciBjb25zdHJhaW50IGVuZm9yY2VtZW50IGNvZGUgKHVuaXF1 ZQpAQCAtMTU3LDYgKzE3OCwxMCBAQCBoZWFwYW1faW5kZXhfc2Nhbl9iZWdpbihJbmRleFNjYW5E ZXNjIHNjYW4sIHVpbnQzMiBmbGFncykKIAkvKiB4c19sYXN0aW5ibG9jayBvcHRpbWl6YXRpb24g c3RhdGUgKi8KIAlBc3NlcnQoIWhzY2FuLT54c19sYXN0aW5ibG9jayk7CiAKKwkvKiBSZWFkIHN0 cmVhbSBzdGF0ZSAob3RoZXIgZmllbGRzIGluaXRpYWxpemVkIGJ5IGNhbGxiYWNrKSAqLworCUFz c2VydChoc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID09IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9u KTsKKwlBc3NlcnQoaHNjYW4tPnhzX3JlYWRfc3RyZWFtID09IE5VTEwpOworCiAJLyogUmVzb2x2 ZSB3aGljaCB4c19nZXRuZXh0X3Nsb3QgaW1wbGVtZW50YXRpb24gdG8gdXNlIGZvciB0aGlzIHNj YW4gKi8KIAlpZiAoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0g TlVMTCkKIAl7CkBAIC0xODAsNiArMjA1LDE2IEBAIGhlYXBhbV9pbmRleF9zY2FuX2JlZ2luKElu ZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMyIGZsYWdzKQogCiAJCS8qIFNldCB1cCBzY2FuJ3MgYmF0 Y2ggcmluZyBidWZmZXIgKi8KIAkJdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9pbml0KHNjYW4pOwor CisJCS8qCisJCSAqIFdlIGNhbiBvbmx5IHNhZmVseSBwcmVmZXRjaCBkdXJpbmcgc2NhbnMgd2hl cmUgd2UncmUgYWJsZSB0bworCQkgKiB1bmd1YXJkICh1bnBpbikgZWFjaCBiYXRjaCdzIGJ1ZmZl cnMgcmlnaHQgYXdheSAoTVZDQyBzY2FucykuICBXZQorCQkgKiBhcmUgbm90IHByZXBhcmVkIHRv IHNlbnNpYmx5IGxpbWl0IHRoZSB0b3RhbCBudW1iZXIgb2YgYnVmZmVyIHBpbnMKKwkJICogaGVs ZC4gIFRoZSByZWFkIHN0cmVhbSBoYW5kbGVzIGFsbCBwaW4gcmVzb3VyY2UgbWFuYWdlbWVudCBm b3IgdXMsCisJCSAqIGFuZCBrbm93cyBub3RoaW5nIGFib3V0IHBpbnMgaGVsZCBvbiBpbmRleCBw YWdlcy93aXRoaW4gYmF0Y2hlcy4KKwkJICogKEl0J3MgYWxzbyBjb252ZW5pZW50IGZvciBlbmFi bGVfaW5kZXhzY2FuX3ByZWZldGNoIHRvIGdhdGUgaGUuKQorCQkgKi8KKwkJaHNjYW4tPnhzX3By ZWZldGNoaW5nX3NhZmUgPSBzY2FuLT5NVkNDU2NhbiAmJiBlbmFibGVfaW5kZXhzY2FuX3ByZWZl dGNoOwogCX0KIAllbHNlCiAJewpAQCAtMTg4LDYgKzIyMyw5IEBAIGhlYXBhbV9pbmRleF9zY2Fu X2JlZ2luKEluZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMyIGZsYWdzKQogCQkJc2Nhbi0+eHNfZ2V0 bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X29ubHlfdHVwbGVfZ2V0bmV4dF9zbG90OwogCQllbHNl CiAJCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfcGxhaW5fdHVwbGVfZ2V0 bmV4dF9zbG90OworCisJCS8qIFByZWZldGNoaW5nIGlzbid0IHN1cHBvcnQgZHVyaW5nIGFtZ2V0 dHVwbGUgc2NhbnMgKi8KKwkJaHNjYW4tPnhzX3ByZWZldGNoaW5nX3NhZmUgPSBmYWxzZTsKIAl9 CiAKIAkvKgpAQCAtMjM5LDYgKzI3NywxNSBAQCBoZWFwYW1faW5kZXhfc2Nhbl9yZXNjYW4oSW5k ZXhTY2FuRGVzYyBzY2FuKQogCS8qIEhlYXAgZmV0Y2hlcyBmcm9tIHRoZSBsYXN0IHJlc2NhbiBk b24ndCBjb3VudCB0b3dhcmRzIHRoaXMgbGltaXQgICovCiAJaHNjYW4tPnhzX2Jsa3N3aXRjaF9j b3VudCA9IDA7CiAKKwkvKiBEZWZlbnNpdmVseSBkbyBhbiB1bmNvbmRpdGlvbmFsIHJlYWQgc3Ry ZWFtIGRpcmVjdGlvbiByZXNldCAqLworCWhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgPSBOb01v dmVtZW50U2NhbkRpcmVjdGlvbjsKKworCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJewor CQloc2Nhbi0+eHNfcGF1c2VkID0gZmFsc2U7CisJCXJlYWRfc3RyZWFtX3Jlc2V0KGhzY2FuLT54 c19yZWFkX3N0cmVhbSk7CisJfQorCiAJLyogUmVzZXQgYmF0Y2ggcmluZyBidWZmZXIgc3RhdGUg Ki8KIAlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQogCQl0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jl c2V0KHNjYW4sIGZhbHNlKTsKQEAgLTI2Myw2ICszMTAsOSBAQCBoZWFwYW1faW5kZXhfc2Nhbl9l bmQoSW5kZXhTY2FuRGVzYyBzY2FuKQogCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c192bWJ1 ZmZlcikpCiAJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX3ZtYnVmZmVyKTsKIAorCWlmIChoc2Nh bi0+eHNfcmVhZF9zdHJlYW0pCisJCXJlYWRfc3RyZWFtX2VuZChoc2Nhbi0+eHNfcmVhZF9zdHJl YW0pOworCiAJLyogRnJlZSB0aGUgaW5kZXgtb25seSBzY2FuIG5hbWUtY29sdW1uIGNvbnRleHQs IGlmIGFueSAqLwogCWlmIChoc2Nhbi0+eHNfaXR1cF9jeHQpCiAJCU1lbW9yeUNvbnRleHREZWxl dGUoaHNjYW4tPnhzX2l0dXBfY3h0KTsKQEAgLTI5Miw5ICszNDIsMTcgQEAgaGVhcGFtX2luZGV4 X3NjYW5fbWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiB2b2lkCiBoZWFwYW1faW5kZXhfc2Nh bl9yZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiB7CisJSW5kZXhTY2FuSGVhcERhdGEgKmhz Y2FuID0gKEluZGV4U2NhbkhlYXBEYXRhICopIHNjYW4tPnhzX3RhYmxlX29wYXF1ZTsKKwogCUFz c2VydChzY2FuLT51c2ViYXRjaHJpbmcpOwogCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5y ZF9pbmRhbS0+YW1jYW5tYXJrcG9zKTsKIAorCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJ eworCQloc2Nhbi0+eHNfcGF1c2VkID0gZmFsc2U7CisJCXJlYWRfc3RyZWFtX3Jlc2V0KGhzY2Fu LT54c19yZWFkX3N0cmVhbSk7CisJfQorCiAJdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXN0b3Jl X3BvcyhzY2FuKTsKIH0KIApAQCAtNjI3LDYgKzY4NSwxNSBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4 dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJYm9v bAkJYWxsX3Zpc2libGUgPSBmYWxzZTsKIAlJdGVtUG9pbnRlciB0aWQgPSBOVUxMOwogCisJLyoK KwkgKiBDaGFuZ2luZyB0aGUgc2NhbiBkaXJlY3Rpb24gbWlkLXNjYW4gcmVxdWlyZXMgYW4gTVZD QyBzbmFwc2hvdDogd2l0aAorCSAqIGFueSBvdGhlciBzbmFwc2hvdCB0eXBlLCBtb3JlIHRoYW4g b25lIG1lbWJlciBvZiBhIEhPVCBjaGFpbiBjYW4gYmUKKwkgKiB2aXNpYmxlLCBhbmQgcmVzdW1p bmcgYSBwYXJ0aWFsbHktcmV0dXJuZWQgY2hhaW4gb25seSB3b3JrcyBpbiB0aGUKKwkgKiBmb3J3 YXJkIGRpcmVjdGlvbi4gIEFsbCBub24tTVZDQyBjYWxsZXJzIHNjYW4gaW4gb25lIGZpeGVkIGRp cmVjdGlvbi4KKwkgKi8KKwlBc3NlcnQoc2Nhbi0+TVZDQ1NjYW4gfHwgIWFtZ2V0YmF0Y2ggfHwK KwkJICAgaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpciA9PSBOb01vdmVtZW50U2NhbkRpcmVjdGlv biB8fAorCQkgICBoc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID09IGRpcmVjdGlvbik7CiAJQXNz ZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKFJlY2VudFhtaW4pKTsKIAlBc3NlcnQoaW5kZXhfb25s eSB8fCBzY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0ID09IDApOwogCkBAIC03ODcsOSArODU0 LDEzIEBAIGhlYXBhbV9pbmRleF9oZWFwX2ZldGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhT Y2FuSGVhcERhdGEgKmhzY2FuLAogCQloc2Nhbi0+eHNfYmxrID0gSXRlbVBvaW50ZXJHZXRCbG9j a051bWJlcih0aWQpOwogCiAJCS8qCi0JCSAqIFdlJ3JlIHN3aXRjaGluZyB0byBhIG5ldyBoZWFw IGJsb2NrLCBzbyBjb3VudCBpdAorCQkgKiBXZSdyZSBzd2l0Y2hpbmcgdG8gYSBuZXcgaGVhcCBi bG9jaywgc28gY291bnQgaXQ7IG9uY2UgZW5vdWdoCisJCSAqIGRpc3RpbmN0IGJsb2NrcyBhcmUg ZmV0Y2hlZCwgc3RhcnQgcHJlZmV0Y2hpbmcgKHRob3VnaCBvbmx5IGlmIHdlCisJCSAqIGhhdmVu J3QgYWxyZWFkeSkKIAkJICovCi0JCWhzY2FuLT54c19ibGtzd2l0Y2hfY291bnQrKzsKKwkJaWYg KGhzY2FuLT54c19yZWFkX3N0cmVhbSA9PSBOVUxMICYmCisJCQkrK2hzY2FuLT54c19ibGtzd2l0 Y2hfY291bnQgPT0gSU5ERVhfUFJFRkVUQ0hfQkxLU1dJVENIX1RIUkVTSE9MRCkKKwkJCWhlYXBh bV9pbmRleF9jb25zaWRlcl9wcmVmZXRjaGluZyhzY2FuLCBoc2Nhbik7CiAKIAkJLyoKIAkJICog RHJvcCB0aGUgeHNfYmxrIHBpbiBpbmRlcGVuZGVudGx5IGhlbGQgb24gYnkgc2xvdCAoaWYgYW55 KSBub3csCkBAIC04MDMsNyArODc0LDE0IEBAIGhlYXBhbV9pbmRleF9oZWFwX2ZldGNoKEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuSGVhcERhdGEgKmhzY2FuLAogCQlpZiAoQnVmZmVySXNW YWxpZChoc2Nhbi0+eHNfY2J1ZikpCiAJCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsK IAotCQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIocmVsLCBoc2Nhbi0+eHNfYmxrKTsKKwkJ LyoKKwkJICogV2hlbiB1c2luZyBhIHJlYWQgc3RyZWFtLCB0aGUgc3RyZWFtIHdpbGwgYWxyZWFk eSBrbm93IHdoaWNoIGJsb2NrCisJCSAqIG51bWJlciBjb21lcyBuZXh0ICh0aG91Z2ggYW4gYXNz ZXJ0aW9uIHdpbGwgdmVyaWZ5IGEgbWF0Y2ggYmVsb3cpCisJCSAqLworCQlpZiAoaHNjYW4tPnhz X3JlYWRfc3RyZWFtKQorCQkJaHNjYW4tPnhzX2NidWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1ZmZl cihoc2Nhbi0+eHNfcmVhZF9zdHJlYW0sIE5VTEwpOworCQllbHNlCisJCQloc2Nhbi0+eHNfY2J1 ZiA9IFJlYWRCdWZmZXIocmVsLCBoc2Nhbi0+eHNfYmxrKTsKIAogCQkvKgogCQkgKiBQcnVuZSBw YWdlIHdoZW4gaXQgaXMgcGlubmVkIGZvciB0aGUgZmlyc3QgdGltZQpAQCAtOTMwLDYgKzEwMDgs MTIgQEAgaGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3BvcyhJbmRleFNjYW5EZXNjIHNj YW4sIEluZGV4U2NhbkhlYXBEYXRhICpoc2NhbiwKIAogCUFzc2VydChhbGxfdmlzaWJsZSA9PSBO VUxMIHx8IHNjYW4tPnhzX3dhbnRfaXR1cCk7CiAKKwkvKiBIYW5kbGUgcmVzZXR0aW5nIHRoZSBy ZWFkIHN0cmVhbSB3aGVuIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgKi8KKwlpZiAoaHNjYW4tPnhz X3JlYWRfc3RyZWFtX2RpciA9PSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbikKKwkJaHNjYW4tPnhz X3JlYWRfc3RyZWFtX2RpciA9IGRpcmVjdGlvbjsJLyogZmlyc3QgY2FsbCAqLworCWVsc2UgaWYg KHVubGlrZWx5KGhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgIT0gZGlyZWN0aW9uKSkKKwkJaGVh cGFtX2luZGV4X2RpcmNoYW5nZV9yZXNldChzY2FuLCBoc2NhbiwgZGlyZWN0aW9uKTsKKwogCS8q CiAJICogQXR0ZW1wdCB0byBpbmNyZW1lbnQgdGhlIHBvc2l0aW9uIG9mIGFueSBleGlzdGluZyBs b2FkZWQgc2NhbkJhdGNoCiAJICogKGFsd2F5cyBmYWlscyBvbiBmaXJzdCBjYWxsIGhlcmUgZm9y IHRoZSBzY2FuKQpAQCAtOTczLDcgKzEwNTcsMjUgQEAgaGVhcGFtX2luZGV4X2dldG5leHRfc2Nh bmJhdGNoX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkhlYXBEYXRhICpoc2NhbiwK IAkgKiBhbHNvIHJlbW92ZSB0aGUgb2xkIGhlYWQgYmF0Y2gvc2NhbkJhdGNoIGZyb20gdGhlIGJh dGNoIHJpbmcgYnVmZmVyLAogCSAqIGFuZCByZWxlYXNlIHRoZSB1bmRlcmx5aW5nIGJhdGNoIHN0 b3JhZ2UuCiAJICovCi0JdGFibGVhbV91dGlsX3NjYW5wb3NfbmV4dGJhdGNoKHNjYW4sIGRpcmVj dGlvbiwgc2NhbkJhdGNoKTsKKwlpZiAodGFibGVhbV91dGlsX3NjYW5wb3NfbmV4dGJhdGNoKHNj YW4sIGRpcmVjdGlvbiwgc2NhbkJhdGNoKSkKKwl7CisJCS8qIEEgcHJldmlvdXNseSBvY2N1cGll ZCByaW5nIGJ1ZmZlciBzbG90IHdhcyBmcmVlZCAqLworCQlpZiAodW5saWtlbHkoaHNjYW4tPnhz X3BhdXNlZCkpCisJCXsKKwkJCS8qCisJCQkgKiBoZWFwYW1faW5kZXhfcHJlZmV0Y2hfbmV4dF9i bG9jayBwYXVzZWQgdGhlIHNjYW4ncyByZWFkIHN0cmVhbQorCQkJICogZHVlIHRvIG91ciBydW5u aW5nIG91dCBvZiBiYXRjaCBzbG90cyAob3IgaXQgInRocm90dGxlZCIgdGhlCisJCQkgKiByZWFk IHN0cmVhbSB0byBhdm9pZCByZWFkaW5nIHRvbyBmYXIgYWhlYWQgaW4gdGhlIGluZGV4KS4KKwkJ CSAqCisJCQkgKiBOb3cgdGhhdCB0aGUgc2NhbkJhdGNoIHRoYXQgd2FzIGN1cnJlbnQgd2hlbiB3 ZSBwYXVzZWQgaGFzIGJlZW4KKwkJCSAqIHJlbW92ZWQgZnJvbSB0aGUgYmF0Y2ggcmluZyBidWZm ZXIsIHdlIG11c3QgcmVzdW1lIHByZWZldGNoaW5nLgorCQkJICovCisJCQlyZWFkX3N0cmVhbV9y ZXN1bWUoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKKwkJCWhzY2FuLT54c19wYXVzZWQgPSBmYWxz ZTsKKwkJfQorCX0KKworCUFzc2VydCghaHNjYW4tPnhzX3BhdXNlZCk7CiAKIAkvKgogCSAqIFNl dCBzY2FuUG9zIHRvIGZpcnN0IGl0ZW0gZm9yIG5ld2x5IGxvYWRlZCBzY2FuQmF0Y2g7IHJldHVy biB0aGUgbmV3CkBAIC0xMDk5LDYgKzEyMDEsMTMgQEAgaGVhcGFtX2luZGV4X3JldHVybl9zY2Fu cG9zX3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkhlYXBEYXRhICpoc2NhbiwKICAq IChpbXBvcnRhbnQgZm9yIGlubmVyIGluZGV4IHNjYW5zIG9mIGFudGktam9pbnMgYW5kIHNlbWkt am9pbnMpLCBhbmQgdGhlCiAgKiBuZWVkIHRvIHVuZ3VhcmQgYmF0Y2hlcyBwcm9tcHRseS4KICAq CisgKiBJbiBubyBldmVudCB3aWxsIHRoZSBzY2FuIGJlIGFsbG93ZWQgdG8gZ3VhcmQgbW9yZSB0 aGFuIG9uZSBiYXRjaCBhdCBhCisgKiB0aW1lLiAgVGhlIHByaW1hcnkgcmVhc29uIGZvciB0aGlz IHJlc3RyaWN0aW9uIGlzIHRvIGF2b2lkIHVuaW50ZW5kZWQKKyAqIGludGVyYWN0aW9ucyB3aXRo IHRoZSByZWFkIHN0cmVhbSwgd2hpY2ggaGFzIGl0cyBvd24gc3RyYXRlZ3kgZm9yIGtlZXBpbmcK KyAqIHRoZSBudW1iZXIgb2YgcGlucyBoZWxkIGJ5IHRoZSBiYWNrZW5kIHVuZGVyIGNvbnRyb2wu ICAoVW5ndWFyZGluZyB2aWEKKyAqIHRoZSBhbXVuZ3VhcmRiYXRjaCBjYWxsYmFjayBvZnRlbiBt ZWFucyByZWxlYXNpbmcgYSBidWZmZXIgcGluIG9uIGFuCisgKiBpbmRleCBwYWdlLCB3aGljaCBj b3VudHMgYWdhaW5zdCB0aGUgc2FtZSBzaGFyZWQgcGluIGxpbWl0LikKKyAqCiAgKiBPbmNlIHdl J3ZlIHJlc29sdmVkIHZpc2liaWxpdHkgZm9yIGFsbCBpdGVtcyBpbiBhIGJhdGNoLCB3ZSBjYW4g c2FmZWx5CiAgKiB1bmd1YXJkIGl0IGJ5IGNhbGxpbmcgYW11bmd1YXJkYmF0Y2guICBUaGlzIGlz IHNhZmUgd2l0aCByZXNwZWN0IHRvCiAgKiBjb25jdXJyZW50IFZBQ1VVTSBiZWNhdXNlIHRoZSBi YXRjaCdzIGd1YXJkICh0eXBpY2FsbHkgYSBidWZmZXIgcGluIG9uIHRoZQpAQCAtMTI0NywzICsx MzU2LDMwMyBAQCBoZWFwYW1faW5kZXhfYmF0Y2hfcG9zX3Zpc2liaWxpdHkoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAllbHNlCiAJCWhzY2FuLT54c192bV9p dGVtcyA9IHNjYW4tPm1heGl0ZW1zYmF0Y2g7CiB9CisKKy8qCisgKiBIYW5kbGUgYSBjaGFuZ2Ug aW4gaW5kZXggc2NhbiBkaXJlY3Rpb24gKGF0IHRoZSB0dXBsZSBncmFudWxhcml0eSkuCisgKgor ICogUmVzZXRzIHRoZSByZWFkIHN0cmVhbSwgc2luY2Ugd2UgY2FuJ3QgcmVseSBvbiBzY2FuUG9z IGNvbnRpbnVpbmcgdG8gYWdyZWUKKyAqIHdpdGggdGhlIGJsb2NrcyB0aGF0IHJlYWQgc3RyZWFt IGFscmVhZHkgY29uc3VtZWQgdXNpbmcgcHJlZmV0Y2hQb3MuCisgKgorICogTm90ZTogaWZmIHRo ZSBzY2FuIF9jb250aW51ZXNfIGluIHRoaXMgbmV3IGRpcmVjdGlvbiwgYW5kIGFjdHVhbGx5IHN0 ZXBzCisgKiBvZmYgc2NhbkJhdGNoIHRvIGFuIGVhcmxpZXIgaW5kZXggcGFnZSwgdGFibGVhbV91 dGlsX2ZldGNoX25leHRfYmF0Y2ggd2lsbAorICogZGVhbCB3aXRoIGl0LiAgQnV0IHRoYXQgbWln aHQgbmV2ZXIgaGFwcGVuOyB0aGUgc2NhbiBtaWdodCB5ZXQgY2hhbmdlCisgKiBkaXJlY3Rpb24g YWdhaW4gKG9yIGp1c3QgZW5kIGJlZm9yZSByZXR1cm5pbmcgbW9yZSBpdGVtcykuCisgKi8KK3N0 YXRpYyBwZ19ub2lubGluZSB2b2lkCitoZWFwYW1faW5kZXhfZGlyY2hhbmdlX3Jlc2V0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCSBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbikKK3sKKwkvKiBSZXNldCByZWFkIHN0cmVhbSBzdGF0ZSAqLworCXNj YW4tPmJhdGNocmluZ2J1Zi5wcmVmZXRjaFBvcy52YWxpZCA9IGZhbHNlOworCWhzY2FuLT54c19w YXVzZWQgPSBmYWxzZTsKKwloc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID0gZGlyZWN0aW9uOwor CWhzY2FuLT54c19ibGtzd2l0Y2hfY291bnQgPSAwOworCisJLyogUmVzZXQgcmVhZCBzdHJlYW0g aXRzZWxmICovCisJaWYgKGhzY2FuLT54c19yZWFkX3N0cmVhbSkKKwkJcmVhZF9zdHJlYW1fcmVz ZXQoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKK30KKworLyoKKyAqIFN0YXJ0IGEgcmVhZCBzdHJl YW0gZm9yIGhlYXAgYmxvY2sgcHJlZmV0Y2hpbmcgZHVyaW5nIGFuIGluZGV4IHNjYW4KKyAqLwor c3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQKK2hlYXBhbV9pbmRleF9jb25z aWRlcl9wcmVmZXRjaGluZyhJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCSAgSW5kZXhTY2Fu SGVhcERhdGEgKmhzY2FuKQoreworCUFzc2VydChoc2Nhbi0+eHNfYmxrICE9IEludmFsaWRCbG9j a051bWJlcik7CisJQXNzZXJ0KCFoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pOworCUFzc2VydCghc2Nh bi0+YmF0Y2hyaW5nYnVmLnByZWZldGNoUG9zLnZhbGlkKTsKKworCWlmICghaHNjYW4tPnhzX3By ZWZldGNoaW5nX3NhZmUpCisJCXJldHVybjsKKworCWhzY2FuLT54c19yZWFkX3N0cmVhbSA9CisJ CXJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9uKFJFQURfU1RSRUFNX0RFRkFVTFQsIE5VTEwsCisJ CQkJCQkJCSAgIHNjYW4tPmhlYXBSZWxhdGlvbiwgTUFJTl9GT1JLTlVNLAorCQkJCQkJCQkgICBo ZWFwYW1faW5kZXhfcHJlZmV0Y2hfbmV4dF9ibG9jaywgc2NhbiwgMCk7Cit9CisKKy8qCisgKiBS ZXR1cm4gdGhlIG5leHQgYmxvY2sgdG8gdGhlIHJlYWQgc3RyZWFtIHdoZW4gcGVyZm9ybWluZyBp bmRleCBwcmVmZXRjaGluZy4KKyAqCisgKiBUaGUgaW5pdGlhbCBiYXRjaCBpcyBhbHdheXMgbG9h ZGVkIGJ5IGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MuCisgKiBXZSBkb24ndCBn ZXQgY2FsbGVkIHVudGlsIHRoZSBmaXJzdCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlciBjYWxsLCB3 aGVuIGEKKyAqIGhlYXAgYmxvY2sgaXMgcmVxdWVzdGVkIGZyb20gdGhlIHNjYW4ncyBzdHJlYW0g Zm9yIHRoZSBmaXJzdCB0aW1lLgorICoKKyAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgcmVhZCBzdHJl YW0gaXMgc3RvcmVkIGluIHByZWZldGNoUG9zLCB3aGljaCB0eXBpY2FsbHkKKyAqIHN0YXlzIGFo ZWFkIG9mIHNjYW5Qb3MgKHRoZSBzY2FuJ3MgcmVhZCBwb3NpdGlvbikuICBXaGVuIHdlIHJldHVy biwgd2UKKyAqIGFsd2F5cyBsZWF2ZSBzY2FuUG9zIDw9IHByZWZldGNoUG9zLgorICovCitzdGF0 aWMgQmxvY2tOdW1iZXIKK2hlYXBhbV9pbmRleF9wcmVmZXRjaF9uZXh0X2Jsb2NrKFJlYWRTdHJl YW0gKnN0cmVhbSwKKwkJCQkJCQkJIHZvaWQgKmNhbGxiYWNrX3ByaXZhdGVfZGF0YSwKKwkJCQkJ CQkJIHZvaWQgKnBlcl9idWZmZXJfZGF0YSkKK3sKKwlJbmRleFNjYW5EZXNjIHNjYW4gPSAoSW5k ZXhTY2FuRGVzYykgY2FsbGJhY2tfcHJpdmF0ZV9kYXRhOworCUluZGV4U2NhbkhlYXBEYXRhICpo c2NhbiA9IChJbmRleFNjYW5IZWFwRGF0YSAqKSBzY2FuLT54c190YWJsZV9vcGFxdWU7CisJQmF0 Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUJhdGNo UmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZID0gJmJhdGNocmlu Z2J1Zi0+c2NhblBvczsKKwlCYXRjaFJpbmdJdGVtUG9zICpwcmVmZXRjaFBvcyA9ICZiYXRjaHJp bmdidWYtPnByZWZldGNoUG9zOworCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uID0gaHNjYW4tPnhz X3JlYWRfc3RyZWFtX2RpcjsKKwlJbmRleFNjYW5CYXRjaCBwcmVmZXRjaEJhdGNoOworCUhlYXBC YXRjaERhdGEgKmhiYXRjaCA9IE5VTEw7CisJaW50CQkJbmJhdGNoYWR2YW5jZXNfdGhpc19jYWxs ID0gMDsKKworCUFzc2VydCghaHNjYW4tPnhzX3BhdXNlZCAmJiBoc2Nhbi0+eHNfcHJlZmV0Y2hp bmdfc2FmZSk7CisJQXNzZXJ0KGRpcmVjdGlvbiAhPSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbik7 CisKKwkvKgorCSAqIEhhbmRsZSBpbml0aWFsaXphdGlvbiBvZiBwcmVmZXRjaFBvczogc2V0IGl0 IGZyb20gdGhlIHNjYW4ncyBjdXJyZW50CisJICogc2NhblBvcyB3aGVuIGl0IGlzbid0IGFscmVh ZHkgKHZhbGlkbHkpIGFoZWFkIG9mIHNjYW5Qb3MuICBUaGlzIGlzCisJICogcmVxdWlyZWQgZHVy aW5nIHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBzY2FuIChhbmQgaW4gY2VydGFpbiBlZGdl CisJICogY2FzZXMpLiAgU2VlIHRhYmxlYW1fdXRpbF9wcmVmZXRjaHBvc19jYXRjaHVwIGZvciBm dWxsIGRldGFpbHMuCisJICovCisJaWYgKHRhYmxlYW1fdXRpbF9wcmVmZXRjaHBvc19jYXRjaHVw KHNjYW4sIGRpcmVjdGlvbikpCisJeworCQlCYXRjaE1hdGNoaW5nSXRlbSAqaXRlbTsKKworCQkv KiBwcmVmZXRjaFBvcyBoYXMgYmVlbiBpbml0aWFsaXplZCBmcm9tIHNjYW5Qb3MgZm9yIHVzICov CisJCXByZWZldGNoQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHByZWZldGNoUG9zLT5i YXRjaCk7CisKKwkJLyoKKwkJICogV2UgbXVzdCBhdm9pZCBrZWVwaW5nIGFueSBiYXRjaCBndWFy ZGVkIGZvciBtb3JlIHRoYW4gYW4gaW5zdGFudCwKKwkJICogdG8gYXZvaWQgdW5kZXNpcmFibGUg aW50ZXJhY3Rpb25zIHdpdGggdGhlIHNjYW4ncyByZWFkIHN0cmVhbS4gU2VlCisJCSAqIGNvbW1l bnQgYW5kIGFzc2VydGlvbiBhdCB0aGUgdG9wIG9mIHRoZSBsb29wIGJlbG93LgorCQkgKi8KKwkJ aWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJeworCQkJLyoKKwkJCSAqIEluZGV4LW9ubHkgc2Nh biBiYXRjaGVzIGFyZW4ndCB1bmd1YXJkZWQgaW1tZWRpYXRlbHkuICBEZWFsCisJCQkgKiB3aXRo IHRoYXQuCisJCQkgKi8KKwkJCWhiYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2hfdGFibGVfYXJlYShz Y2FuLCBwcmVmZXRjaEJhdGNoKTsKKworCQkJLyoKKwkJCSAqIFRoZSByZXF1ZXN0ZWQgaXRlbSBj YW4ndCBiZSBhbGwtdmlzaWJsZSBhY2NvcmRpbmcgdG8gaXRzCisJCQkgKiBiYXRjaCdzIGNhY2hl ZCB2aXNpYmlsaXR5IGluZm9ybWF0aW9uOyBpZiBpdCB3ZXJlLCB3ZSdkIG5ldmVyCisJCQkgKiBo YXZlIGJlZW4gY2FsbGVkIGluIHRoZSBmaXJzdCBwbGFjZQorCQkJICovCisJCQlBc3NlcnQoSEVB UF9CQVRDSF9WSVNfQ0FDSEVEKGhiYXRjaCwgcHJlZmV0Y2hQb3MtPml0ZW0pICYmCisJCQkJICAg IWhiYXRjaC0+YmF0Y2h2aXNbcHJlZmV0Y2hQb3MtPml0ZW1dKTsKKworCQkJLyoKKwkJCSAqIExv YWQgYW55IHZpc2liaWxpdHkgaW5mbyBub3QgYWxyZWFkeSBzZXQgdGhyb3VnaCBzY2FuQmF0Y2gs IHNvCisJCQkgKiB0aGF0IHNjYW5CYXRjaC9wcmVmZXRjaEJhdGNoIGlzIHVuZ3VhcmRlZCByaWdo dCBhd2F5CisJCQkgKi8KKwkJCWhzY2FuLT54c192bV9pdGVtcyA9IHNjYW4tPm1heGl0ZW1zYmF0 Y2g7CS8qIG11c3QgdW5ndWFyZCAqLworCQkJaWYgKHByZWZldGNoQmF0Y2gtPmlzR3VhcmRlZCkK KwkJCQloZWFwYW1faW5kZXhfYmF0Y2hfcG9zX3Zpc2liaWxpdHkoc2NhbiwgZGlyZWN0aW9uLAor CQkJCQkJCQkJCQkJICBwcmVmZXRjaEJhdGNoLCBoYmF0Y2gsCisJCQkJCQkJCQkJCQkgIHByZWZl dGNoUG9zKTsKKworCQkJLyoKKwkJCSAqIExhdGVyIGNhbGxzIHRvIGhlYXBhbV9pbmRleF9iYXRj aF9wb3NfdmlzaWJpbGl0eSB3aWxsIGFsd2F5cworCQkJICogdW5ndWFyZCBiYXRjaGVzIHJpZ2h0 IGF3YXksIHdoaWNoIHdlIHJlbHkgb24gaW4gdGhlIGxvb3AgYmVsb3cKKwkJCSAqLworCQl9CisK KwkJQXNzZXJ0KCFwcmVmZXRjaEJhdGNoLT5pc0d1YXJkZWQpOworCisJCWl0ZW0gPSAmcHJlZmV0 Y2hCYXRjaC0+aXRlbXNbcHJlZmV0Y2hQb3MtPml0ZW1dOworCQloc2Nhbi0+eHNfcHJlZmV0Y2hf YmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZpdGVtLT50YWJsZVRpZCk7CisKKwkJ LyoKKwkJICogU3BlY2lhbCBjYXNlOiB3aGVuIHdlIHJldHVybiwgcHJlZmV0Y2hQb3Mgd29uJ3Qg YmUgYWhlYWQgb2Ygc2NhblBvcworCQkgKiAoaXQnbGwganVzdCBiZSBlcXVhbCB0byBzY2FuUG9z KS4gIFdlJ3JlIG1lcmVseSBmZXRjaGluZyB0aHJvdWdoIGEKKwkJICogcmVhZCBzdHJlYW07IHRy dWUgcHJlZmV0Y2hpbmcgaGFzbid0IHJlYWxseSBzdGFydGVkIHlldC4KKwkJICovCisJCUFzc2Vy dChpbmRleF9zY2FuX3Bvc19jbXAoc2NhblBvcywgcHJlZmV0Y2hQb3MsIGRpcmVjdGlvbikgPT0g MCk7CisKKwkJcmV0dXJuIGhzY2FuLT54c19wcmVmZXRjaF9ibG9jazsKKwl9CisKKwkvKgorCSAq IFdlJ3JlIHBpY2tpbmcgdXAgcHJlZmV0Y2hpbmcgZnJvbSB3aGVyZSB0aGUgbGFzdCBjYWxsIGhl cmUgbGVmdCBvZmYKKwkgKi8KKwlBc3NlcnQoaW5kZXhfc2Nhbl9wb3NfY21wKHNjYW5Qb3MsIHBy ZWZldGNoUG9zLCBkaXJlY3Rpb24pIDw9IDApOworCXByZWZldGNoQmF0Y2ggPSBpbmRleF9zY2Fu X2JhdGNoKHNjYW4sIHByZWZldGNoUG9zLT5iYXRjaCk7CisJaWYgKHNjYW4tPnhzX3dhbnRfaXR1 cCkKKwkJaGJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaF90YWJsZV9hcmVhKHNjYW4sIHByZWZldGNo QmF0Y2gpOworCisJLyoKKwkgKiBBc3NlcnQgaW4gcGFzc2luZyB0aGF0IHhzX3ByZWZldGNoX2Js b2NrIG1hdGNoZXMgdGhlIGxhc3QgaXRlbSB3ZQorCSAqIHJldHVybmVkLgorCSAqCisJICogTm90 ZTogd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCBhIHhzX3ByZWZldGNoX2Jsb2NrIGZpZWxkIGF0IGFs bDsgd2UgY291bGQKKwkgKiBqdXN0IHRha2UgdGhlIGxhc3QgYmxvY2sgd2UgcmV0dXJuZWQgZnJv bSBwcmVmZXRjaFBvcyBkaXJlY3RseSBpbnN0ZWFkLgorCSAqIEJ1dCBtYWludGFpbmluZyB4c19w cmVmZXRjaF9ibG9jayBleHBsaWNpdGx5IGlzIHNsaWdodGx5IG1vcmUgcm9idXN0LgorCSAqIEl0 IGdpdmVzIHVzIGEgd2F5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsYXN0IGNhbGwgaGVyZSBsZWZ0 IHByZWZldGNoUG9zCisJICogaW4gYSBjb25zaXN0ZW50IHN0YXRlIChlLmcuLCB3aGVuIHRoZSBy ZWFkIHN0cmVhbSBoYWQgdG8gYmUgcGF1c2VkKS4KKwkgKi8KKyNpZmRlZiBVU0VfQVNTRVJUX0NI RUNLSU5HCisJeworCQlCYXRjaE1hdGNoaW5nSXRlbSAqbGFzdGl0ZW0gPSAmcHJlZmV0Y2hCYXRj aC0+aXRlbXNbcHJlZmV0Y2hQb3MtPml0ZW1dOworCQlCbG9ja051bWJlciBsYXN0X2Jsb2NrID0g SXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmbGFzdGl0ZW0tPnRhYmxlVGlkKTsKKworCQkvKgor CQkgKiBOb3RlOiB3aGVuIGEgcHJldmlvdXMgY2FsbCBwYXVzZWQgdGhlIHJlYWQgc3RyZWFtLCBw cmVmZXRjaFBvcworCQkgKiBtaWdodCBwb2ludCB0byBhbiBpdGVtIHdob3NlIFRJRCBkb2Vzbid0 IG1hdGNoIGxhc3RfYmxvY2suICBUaGlzCisJCSAqIGNhbiBvbmx5IGhhcHBlbiB3aGVuIHRoZSBp dGVtIHdhcyBuZXZlciByZXR1cm5lZCBkdWUgdG8gaXQgYmVpbmcKKwkJICogYWxsLXZpc2libGUu CisJCSAqLworCQlBc3NlcnQobGFzdF9ibG9jayA9PSBoc2Nhbi0+eHNfcHJlZmV0Y2hfYmxvY2sg fHwKKwkJCSAgIChoYmF0Y2ggJiYgSEVBUF9CQVRDSF9WSVNfQ0FDSEVEKGhiYXRjaCwgcHJlZmV0 Y2hQb3MtPml0ZW0pICYmCisJCQkJaGJhdGNoLT5iYXRjaHZpc1twcmVmZXRjaFBvcy0+aXRlbV0p KTsKKwl9CisjZW5kaWYKKworCWZvciAoOzspCisJeworCQlCYXRjaE1hdGNoaW5nSXRlbSAqaXRl bTsKKwkJQmxvY2tOdW1iZXIgcHJlZmV0Y2hfYmxvY2s7CisJCWJvb2wJCXRocm90dGxlOworCisJ CS8qCisJCSAqIFdlIG5ldmVyIGNhbGwgYW1nZXRiYXRjaCB3aXRob3V0IGltbWVkaWF0ZWx5IHVu Z3VhcmRpbmcgdGhlIGJhdGNoCisJCSAqIG9uY2UgcHJlZmV0Y2hpbmcgYmVnaW5zLiAgVGhhdCB3 YXkgaW5kZXggQU1zIHdvbid0IGhvbGQgb250byBhbnkKKwkJICogImV4dHJhIiBpbmRleCBwYWdl IHBpbnMgbmVlZGVkIGFzIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIGd1YXJkcy4KKwkJICoKKwkJ ICogVGhpcyBpcyBkZWZlbnNpdmUuICBUaGUgcmVhZCBzdHJlYW0gdHJpZXMgdG8gYmUgY2FyZWZ1 bCBhYm91dCBub3QKKwkJICogcGlubmluZyB0b28gbWFueSBidWZmZXJzLCBhbmQgdGhhdCdzIGhh cmRlciB0byBkbyByZWxpYWJseSBpZiB0aGVyZQorCQkgKiBhcmUgdmFyaWFibGUgbnVtYmVycyBv ZiBwaW5zIHRha2VuIHdpdGhvdXQgc3VjaCBjYXJlLgorCQkgKi8KKwkJQXNzZXJ0KCFwcmVmZXRj aEJhdGNoLT5pc0d1YXJkZWQpOworCisJCS8qCisJCSAqIEJlZm9yZSBhZHZhbmNpbmcgcHJlZmV0 Y2hQb3MsIGNvbnNpZGVyIGlmIHJlYWQgc3RyZWFtJ3MgY3VycmVudAorCQkgKiBjYWxsIGhlcmUg YWxyZWFkeSBhZHZhbmNlZCBwcmVmZXRjaEJhdGNoLiAgVGhpcyBpcyBwb3NzaWJsZSBkdXJpbmcK KwkJICogaW5kZXgtb25seSBzY2FucyB3aXRoIGxvbmcgcnVucyBvZiBiYXRjaGVzIGNvbnRhaW5p bmcgb25seSBpdGVtcworCQkgKiB0aGF0IGFyZSBhbGwtdmlzaWJsZSAoaXQncyBhbHNvIHBvc3Np YmxlIGR1cmluZyBwbGFpbiBpbmRleCBzY2FucworCQkgKiB3aXRoIHVudXN1YWwgYmF0Y2ggbGF5 b3V0cywgdGhvdWdoIHRoYXQncyBtdWNoIGxlc3MgY29tbW9uKS4KKwkJICoKKwkJICogV2hlbiB3 ZSBkZXRlY3QgdGhpcyBjb25kaXRpb24sIHdlIGZvcmNpYmx5IHRocm90dGxlIHByZWZldGNoaW5n LAorCQkgKiB3aGljaCBwYXVzZXMgdGhlIHJlYWQgc3RyZWFtLiAgVGhhdCdsbCBnaXZlIHNjYW5Q b3MgdGhlIG9wcG9ydHVuaXR5CisJCSAqIHRvIHJldHVybiB0aGUgbmV4dCBpdGVtIHRvIHRoZSBz Y2FuLiAgV2UgaW1wb3NlIGEgY2VpbGluZyBvbiBob3cKKwkJICogZmFyIHByZWZldGNoQmF0Y2gg Y2FuIGdldCBhaGVhZCBvZiBzY2FuQmF0Y2ggd2l0aG91dCBvdXIgcHJvZHVjaW5nCisJCSAqIGV2 ZW4gb25lIGFkZGl0aW9uYWwgaGVhcCBibG9jayBmb3IgdGhlIHJlYWQgc3RyZWFtIHRvIHByZWZl dGNoLgorCQkgKi8KKwkJdGhyb3R0bGUgPSBuYmF0Y2hhZHZhbmNlc190aGlzX2NhbGwgPj0gSU5E RVhfUFJFRkVUQ0hfTUFYX0JBVENIX0FEVkFOQ0VTOworCisJCS8qIEluY3JlbWVudCBwcmVmZXRj aFBvcyB0byBkZXRlcm1pbmUgdGhlIG5leHQgaXRlbSB0byBwcmVmZXRjaCAqLworCQlzd2l0Y2gg KHRhYmxlYW1fdXRpbF9wcmVmZXRjaHBvc19hZHZhbmNlKHNjYW4sIGRpcmVjdGlvbiwKKwkJCQkJ CQkJCQkJCSAmcHJlZmV0Y2hCYXRjaCwgcHJlZmV0Y2hQb3MsCisJCQkJCQkJCQkJCQkgdGhyb3R0 bGUpKQorCQl7CisJCQljYXNlIEJBVENIX1BPU19BRFZBTkNFRDoKKwkJCQkvKiBBZHZhbmNlZCB0 byBuZXh0IGl0ZW0gaW4gY3VycmVudC9wcmV2aW91cyBwcmVmZXRjaEJhdGNoICovCisJCQkJYnJl YWs7CisJCQljYXNlIEJBVENIX1BPU19CQVRDSF9BRFZBTkNFRDoKKwkJCQkvKiBBZHZhbmNlZCB0 byBmaXJzdCBpdGVtIGluIG5ldyBwcmVmZXRjaEJhdGNoICovCisJCQkJbmJhdGNoYWR2YW5jZXNf dGhpc19jYWxsKys7CisJCQkJaWYgKGhiYXRjaCkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEV4 dHJhIGhlYXBhbS1zcGVjaWZpYyBzdGVwOiBidWxrLWxvYWQgdmlzaWJpbGl0eSBpbmZvCisJCQkJ CSAqIHVwIGZyb250IHRvIHVuZ3VhcmQgYmF0Y2ggaW1tZWRpYXRlbHkKKwkJCQkJICovCisJCQkJ CUFzc2VydChzY2FuLT54c193YW50X2l0dXApOworCisJCQkJCWhiYXRjaCA9IGluZGV4X3NjYW5f YmF0Y2hfdGFibGVfYXJlYShzY2FuLCBwcmVmZXRjaEJhdGNoKTsKKworCQkJCQlBc3NlcnQoaHNj YW4tPnhzX3ZtX2l0ZW1zID09IHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCQkJCQlpZiAocHJlZmV0 Y2hCYXRjaC0+aXNHdWFyZGVkKQorCQkJCQkJaGVhcGFtX2luZGV4X2JhdGNoX3Bvc192aXNpYmls aXR5KHNjYW4sIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJCQkJICBwcmVmZXRjaEJhdGNoLAorCQkJ CQkJCQkJCQkJCQkgIGhiYXRjaCwgcHJlZmV0Y2hQb3MpOworCQkJCX0KKwkJCQlicmVhazsKKwkJ CWNhc2UgQkFUQ0hfUE9TX0RPTkU6CisJCQkJLyogTm8gbW9yZSBiYXRjaGVzIGluIHRoaXMgc2Nh biBkaXJlY3Rpb24gKi8KKwkJCQlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOworCQkJY2FzZSBC QVRDSF9QT1NfUklOR19GVUxMOgorCisJCQkJLyoKKwkJCQkgKiBFZGdlIGNhc2U6IFJhbiBvdXQg b2YgaXRlbXMgZnJvbSBwcmVmZXRjaEJhdGNoLCBidXQgY2FuJ3QKKwkJCQkgKiBhZHZhbmNlIHRv IHRoZSBzY2FuJ3MgbmV4dCBiYXRjaCByaWdodCBub3cgKGFsbCBhdmFpbGFibGUKKwkJCQkgKiBi YXRjaHJpbmdidWYgYmF0Y2ggc2xvdHMgYXJlIGN1cnJlbnRseSBpbiB1c2UpLiAgVGhpcyBhbHNv CisJCQkJICogaGFwcGVucyB3aGVuIHdlIGRlbGliZXJhdGVseSB0aHJvdHRsZWQgcHJlZmV0Y2hp bmcuCisJCQkJICoKKwkJCQkgKiBEZWFsIHdpdGggdGhpcyBieSBtb21lbnRhcmlseSBwYXVzaW5n IHRoZSByZWFkIHN0cmVhbS4KKwkJCQkgKiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hf cG9zIHdpbGwgcmVzdW1lIHRoZSByZWFkCisJCQkJICogc3RyZWFtIGxhdGVyLCB0aG91Z2ggb25s eSBhZnRlciBzY2FuUG9zIGhhcyBjb25zdW1lZCBhbGwKKwkJCQkgKiByZW1haW5pbmcgaXRlbXMg ZnJvbSBzY2FuQmF0Y2ggKGF0IHdoaWNoIHBvaW50IHRoZSBjdXJyZW50CisJCQkJICogaGVhZCBi YXRjaCB3aWxsIGJlIGZyZWVkLCBtYWtpbmcgYSBzbG90IGF2YWlsYWJsZSBmb3IKKwkJCQkgKiBy ZXVzZSkuCisJCQkJICovCisJCQkJaHNjYW4tPnhzX3BhdXNlZCA9IHRydWU7CisJCQkJcmV0dXJu IHJlYWRfc3RyZWFtX3BhdXNlKHN0cmVhbSk7CisJCX0KKworCQkvKgorCQkgKiBwcmVmZXRjaFBv cyBub3cgcG9pbnRzIHRvIHRoZSBuZXh0IGl0ZW0gd2hvc2UgVElEJ3MgaGVhcCBibG9jaworCQkg KiBudW1iZXIgbWlnaHQgbmVlZCB0byBiZSBwcmVmZXRjaGVkLgorCQkgKgorCQkgKiBzY2FuUG9z IG11c3QgYmUgPCBwcmVmZXRjaFBvcyB3aGVuIHdlIHJldHVybiBmcm9tIHRoaXMgbG9vcCBwYXRo LgorCQkgKi8KKwkJQXNzZXJ0KGluZGV4X3NjYW5fcG9zX2NtcChzY2FuUG9zLCBwcmVmZXRjaFBv cywgZGlyZWN0aW9uKSA8IDApOworCisJCWlmIChoYmF0Y2gpCisJCXsKKwkJCUFzc2VydChzY2Fu LT54c193YW50X2l0dXApOworCQkJQXNzZXJ0KEhFQVBfQkFUQ0hfVklTX0NBQ0hFRChoYmF0Y2gs IHByZWZldGNoUG9zLT5pdGVtKSk7CisKKwkJCWlmIChoYmF0Y2gtPmJhdGNodmlzW3ByZWZldGNo UG9zLT5pdGVtXSkKKwkJCXsKKwkJCQkvKiBpdGVtIGlzIGtub3duIHRvIGJlIGFsbC12aXNpYmxl IC0tIGRvbid0IHByZWZldGNoICovCisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlpdGVt ID0gJnByZWZldGNoQmF0Y2gtPml0ZW1zW3ByZWZldGNoUG9zLT5pdGVtXTsKKwkJcHJlZmV0Y2hf YmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZpdGVtLT50YWJsZVRpZCk7CisKKwkJ aWYgKHByZWZldGNoX2Jsb2NrID09IGhzY2FuLT54c19wcmVmZXRjaF9ibG9jaykKKwkJeworCQkJ LyoKKwkJCSAqIHByZWZldGNoX2Jsb2NrIG1hdGNoZXMgdGhlIGxhc3QgcHJlZmV0Y2hQb3MgaXRl bSdzIFRJRCdzIGhlYXAKKwkJCSAqIGJsb2NrIG51bWJlcjsgd2UgbXVzdCBub3QgcmV0dXJuIHRo ZSBzYW1lIHByZWZldGNoX2Jsb2NrIHR3aWNlCisJCQkgKiAodHdpY2UgaW4gc3VjY2Vzc2lvbikK KwkJCSAqLworCQkJY29udGludWU7CisJCX0KKworCQkvKiBXZSBoYXZlIGEgbmV3IGhlYXAgYmxv Y2sgbnVtYmVyIHRvIHJldHVybiB0byByZWFkIHN0cmVhbSAqLworCQloc2Nhbi0+eHNfcHJlZmV0 Y2hfYmxvY2sgPSBwcmVmZXRjaF9ibG9jazsKKwkJcmV0dXJuIHByZWZldGNoX2Jsb2NrOworCX0K KworCXBnX3VucmVhY2hhYmxlKCk7CisKKwlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOworfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKaW5kZXggMmUyY2NmNmE5Li5kY2UyYjJh NTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpAQCAtNSwxNSArNSwyMSBA QAogICoKICAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBjb3JlIGluZnJhc3RydWN0dXJlIGZv ciBiYXRjaC1iYXNlZCBpbmRleCBzY2FucywKICAqIHdoaWNoIGFsbG93IGluZGV4IEFNcyB0byBy ZXR1cm4gbXVsdGlwbGUgbWF0Y2hpbmcgVElEcyBwZXIgcGFnZSBpbiBhIHNpbmdsZQotICogY2Fs bC4gIFRoZSBiYXRjaCByaW5nIGJ1ZmZlciBpcyBvd25lZCBieSB0aGUgdGFibGUgQU0uCisgKiBj YWxsLiAgVGhlIGJhdGNoIHJpbmcgYnVmZmVyIGlzIG93bmVkIGJ5IHRoZSB0YWJsZSBBTSwgdHlw aWNhbGx5IG1haW50YWluZWQKKyAqIGFsb25nc2lkZSBhIHJlYWQgc3RyZWFtIHVzZWQgZm9yIHBy ZWZldGNoaW5nIHRhYmxlIGJsb2Nrcy4KICAqCi0gKiBUaGUgcmluZyBidWZmZXIgbG9hZHMgYmF0 Y2hlcyBpbiBpbmRleCBrZXkgc3BhY2UvaW5kZXggc2NhbiBvcmRlci4KKyAqIFRoZSByaW5nIGJ1 ZmZlciBsb2FkcyBiYXRjaGVzIGluIGluZGV4IGtleSBzcGFjZS9pbmRleCBzY2FuIG9yZGVyLiAg VGhpcworICogYWxsb3dzIHRoZSB0YWJsZSBBTSB0byBtYWludGFpbiBhbiBhZGVxdWF0ZSBwcmVm ZXRjaCBkaXN0YW5jZTogcHJlZmV0Y2hpbmcKKyAqIGlzIHRoZXJlYnkgYWJsZSB0byByZXF1ZXN0 IHRhYmxlIGJsb2NrcyByZWZlcmVuY2VkIGJ5IGluZGV4IHBhZ2VzIHRoYXQgYXJlCisgKiB3ZWxs IGFoZWFkIG9mIHRoZSBjdXJyZW50IHNjYW4gcG9zaXRpb24ncyBpbmRleCBwYWdlLgogICoKICAq IE1vc3QgZnVuY3Rpb25zIGhlcmUgYXJlIHRhYmxlIEFNIHV0aWxpdGllcyAodGFibGVhbV91dGls XyopLCBjYWxsZWQgYnkKICAqIHRhYmxlIEFNcyBkdXJpbmcgYW1nZXRiYXRjaCBpbmRleCBzY2Fu cy4gIFRoZXNlIG1hbmFnZSB0aGUgYmF0Y2ggcmluZwogICogYnVmZmVyJ3MgbGlmZWN5Y2xlIGFu ZCBwb3NpdGlvbmFsIHN0YXRlLCBhbmQgaGVscCB3aXRoIGNlcnRhaW4gYXNwZWN0cyBvZgogICog cmVzb3VyY2UgbWFuYWdlbWVudC4gIFRoZSB0YWJsZSBBTSB1c2VzIHNjYW5Qb3MgdG8gcmV0dXJu IGl0ZW1zIGZyb20KLSAqIGJhdGNoZXMgcmV0dXJuZWQgYnkgYW1nZXRiYXRjaC4KKyAqIGJhdGNo ZXMgcmV0dXJuZWQgYnkgYW1nZXRiYXRjaC4gIFRhYmxlIEFNcyB0aGF0IHN1cHBvcnQgSS9PIHBy ZWZldGNoaW5nIG9mCisgKiB0YWJsZSBibG9ja3MgZHVyaW5nIGluZGV4IHNjYW5zIHVzZSBwcmVm ZXRjaFBvcyB0byByZXF1ZXN0IHRhYmxlIGJsb2NrcworICogd2VsbCBhaGVhZCBvZiB0aG9zZSB0 aGF0IGFyZSBvZiBpbW1lZGlhdGUgaW50ZXJlc3QgdG8gc2NhblBvcy4KICAqCiAgKiBUaGVyZSBh cmUgYWxzbyBzb21lIGluZGV4IEFNIHV0aWxpdGllcyAoaW5kZXhhbV91dGlsXyopLCBjYWxsZWQg YnkgaW5kZXgKICAqIEFNcyB0aGF0IGltcGxlbWVudCB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2Us IHRvIGhlbHAgbWFuYWdlIHJlc291cmNlcyBsaWtlCkBAIC0xMDQsNiArMTEwLDcgQEAgdGFibGVh bV91dGlsX2JhdGNoc2Nhbl9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4sIGJvb2wgZW5kc2NhbikK IAlib29sCQltYXJrQmF0Y2hGcmVlZCA9IGZhbHNlOwogCiAJYmF0Y2hyaW5nYnVmLT5zY2FuUG9z LnZhbGlkID0gZmFsc2U7CisJYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvcy52YWxpZCA9IGZhbHNl OwogCWJhdGNocmluZ2J1Zi0+bWFya1Bvcy52YWxpZCA9IGZhbHNlOwogCiAJZm9yICh1aW50OCBp ID0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2g7IGkgIT0gYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2g7 IGkrKykKQEAgLTIxNSw3ICsyMjIsMTIgQEAgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9tYXJrX3Bv cyhJbmRleFNjYW5EZXNjIHNjYW4pCiAgKiB0aGUgY3VycmVudCBzY2FuQmF0Y2ggd2hlbiBuZWVk ZWQuCiAgKgogICogV2UganVzdCBkaXNjYXJkIGFsbCBiYXRjaGVzIChvdGhlciB0aGFuIG1hcmtC YXRjaC9yZXN0b3JlZCBzY2FuQmF0Y2gpLAotICogZXhjZXB0IHdoZW4gbWFya0JhdGNoIGlzIGFs cmVhZHkgdGhlIHNjYW4ncyBjdXJyZW50IHNjYW5CYXRjaC4KKyAqIGV4Y2VwdCB3aGVuIG1hcmtC YXRjaCBpcyBhbHJlYWR5IHRoZSBzY2FuJ3MgY3VycmVudCBzY2FuQmF0Y2guICBXZSBhbHdheXMK KyAqIGludmFsaWRhdGUgcHJlZmV0Y2hQb3MuICBUaGUgdGFibGUgQU0ncyBwcmVmZXRjaGluZyBz dGF0ZSAoZS5nLiwgaXRzIHJlYWQKKyAqIHN0cmVhbSkgaXMgcmVzZXQgYnkgdGhlIGNhbGxlciAo d2hpY2ggY2FsbHMgdGhpcyBmdW5jdGlvbiBhcyBpdCByZXNldHMgdGhhdAorICogc3RhdGUpLiAg VGhpcyBhcHByb2FjaCBrZWVwcyB0aGluZ3Mgc2ltcGxlIGZvciB0YWJsZSBBTXM6IG1vc3QgY29k ZSB0aGF0CisgKiBkZWFscyB3aXRoIGJhdGNoZXMgaXMgdGhlcmVieSBhYmxlIHRvIGFzc3VtZSB0 aGF0IHRoZSBjb21tb24gY2FzZSB3aGVyZQorICogc2NhbiBkaXJlY3Rpb24gbmV2ZXIgY2hhbmdl cyBpcyB0aGUgb25seSBjYXNlLgogICoKICAqIE5vdGU6IFRoaXMgcmVsaWVzIG9uIHRoZSBhc3N1 bXB0aW9uIHRoYXQgd2UgYWxyZWFkeSBoYXZlIGEgdmFsaWQgc2NhblBvcy4KICAqIFRhYmxlIEFN cyBzaG91bGQgb25seSBjYWxsIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzZXQgZnJvbSB3aXRo aW4gdGhlaXIKQEAgLTI0Miw2ICsyNTQsMTQgQEAgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXN0 b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJQXNzZXJ0KG1hcmtQb3MtPml0ZW0gPj0gbWFy a0JhdGNoLT5maXJzdEl0ZW0gJiYKIAkJICAgbWFya1Bvcy0+aXRlbSA8PSBtYXJrQmF0Y2gtPmxh c3RJdGVtKTsKIAorCS8qCisJICogUmVzdG9yaW5nIGEgbWFyayBhbHdheXMgcmVxdWlyZXMgc3Rv cHBpbmcgcHJlZmV0Y2hpbmcuICBUaGlzIGlzIHNpbWlsYXIKKwkgKiB0byB0aGUgaGFuZGxpbmcg dGFibGUgQU1zIGltcGxlbWVudCB0byBkZWFsIHdpdGggYSB0dXBsZS1sZXZlbCBjaGFuZ2UKKwkg KiBpbiB0aGUgc2NhbidzIGRpcmVjdGlvbi4gIFRoZSByZWFkIHN0cmVhbSBtdXN0IGhhdmUgYWxy ZWFkeSBiZWVuIHJlc2V0CisJICogYnkgdGhlIHRhYmxlIEFNIGNhbGxlci4KKwkgKi8KKwliYXRj aHJpbmdidWYtPnByZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7CisKIAlpZiAoc2NhbkJhdGNoID09 IG1hcmtCYXRjaCkKIAl7CiAJCS8qIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHNjYW5CYXRjaDsgbmVl ZG4ndCBjaGFuZ2UgYmF0Y2hyaW5nYnVmICovCkBAIC0zMTIsNiArMzMyLDEzIEBAIHRhYmxlYW1f dXRpbF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogICogdG8gZGV0 ZXJtaW5lIHdoaWNoIGJhdGNoIGNvbWVzIG5leHQgaW4gdGhlIG5ldyBzY2FuIGRpcmVjdGlvbi4g IFRoaXMKICAqIGFwcHJvYWNoIGlzbid0IHBhcnRpY3VsYXJseSBlZmZpY2llbnQsIGJ1dCBpdCB3 b3JrcyB3ZWxsIGVub3VnaCBmb3Igd2hhdAogICogb3VnaHQgdG8gYmUgYSByZWxhdGl2ZWx5IHJh cmUgb2NjdXJyZW5jZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBoYXZlIHJlc2V0IHRoZSBzY2FuJ3Mg cmVhZCBzdHJlYW0gYmVmb3JlIGNhbGxpbmcgaGVyZS4gIFRoYXQKKyAqIG5lZWRzIHRvIGhhcHBl biBhcyBzb29uIGFzIHRoZSBzY2FuIHJlcXVlc3RzIGEgdHVwbGUgaW4gd2hhdGV2ZXIgc2Nhbgor ICogZGlyZWN0aW9uIGlzIG9wcG9zaXRlLXRvLWN1cnJlbnQuICBXZSBvbmx5IGRlYWwgd2l0aCB0 aGUgY2FzZSB3aGVyZSB0aGUKKyAqIHNjYW4gYmFja3MgdXAgYnkgZW5vdWdoIGl0ZW1zIHRvIGNy b3NzIGEgYmF0Y2ggYm91bmRhcnkgKHdoZW4gdGhlIHNjYW4KKyAqIHJlc3VtZXMgc2Nhbm5pbmcg aW4gaXRzIG9yaWdpbmFsIGRpcmVjdGlvbi9lbmRzIGJlZm9yZSBjcm9zc2luZyBhIGJvdW5kYXJ5 LAorICogdGhlcmUgaXNuJ3QgYW55IG5lZWQgdG8gY2FsbCBoZXJlKS4KICAqLwogdm9pZAogdGFi bGVhbV91dGlsX3NjYW5iYXRjaF9kaXJjaGFuZ2UoSW5kZXhTY2FuRGVzYyBzY2FuKQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKaW5kZXggMWM1NzVlNTZmLi42ZmNiODE1ZjcgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwpAQCAtMTQ2LDYgKzE0Niw3IEBAIGlu dAkJCW1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOwogYm9vbAkJZW5hYmxlX3Nl cXNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX2luZGV4c2NhbiA9IHRydWU7CiBib29sCQllbmFi bGVfaW5kZXhvbmx5c2NhbiA9IHRydWU7Citib29sCQllbmFibGVfaW5kZXhzY2FuX3ByZWZldGNo ID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9iaXRtYXBzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV90 aWRzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9zb3J0ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKaW5kZXggYWZhYTA1OGIwLi5hY2U1NmY3YTggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CkBAIC05NDEsNiArOTQx LDEzIEBACiAgIGJvb3RfdmFsID0+ICd0cnVlJywKIH0sCiAKK3sgbmFtZSA9PiAnZW5hYmxlX2lu ZGV4c2Nhbl9wcmVmZXRjaCcsIHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQR0NfVVNFUlNF VCcsIGdyb3VwID0+ICdRVUVSWV9UVU5JTkdfTUVUSE9EJywKKyAgc2hvcnRfZGVzYyA9PiAnRW5h YmxlcyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbnMgYW5kIGluZGV4LW9ubHkgc2NhbnMuJywK KyAgZmxhZ3MgPT4gJ0dVQ19FWFBMQUlOJywKKyAgdmFyaWFibGUgPT4gJ2VuYWJsZV9pbmRleHNj YW5fcHJlZmV0Y2gnLAorICBib290X3ZhbCA9PiAndHJ1ZScsCit9LAorCiB7IG5hbWUgPT4gJ2Vu YWJsZV9tYXRlcmlhbCcsIHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcs IGdyb3VwID0+ICdRVUVSWV9UVU5JTkdfTUVUSE9EJywKICAgc2hvcnRfZGVzYyA9PiAnRW5hYmxl cyB0aGUgcGxhbm5lclwncyB1c2Ugb2YgbWF0ZXJpYWxpemF0aW9uLicsCiAgIGZsYWdzID0+ICdH VUNfRVhQTEFJTicsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVz cWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5z YW1wbGUKaW5kZXggYWMzOGNkZGFhLi44NzA1ZGQ1ZjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2VuZC91dGls cy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTQzMSw2ICs0MzEsNyBAQAogI2VuYWJs ZV9pbmNyZW1lbnRhbF9zb3J0ID0gb24KICNlbmFibGVfaW5kZXhzY2FuID0gb24KICNlbmFibGVf aW5kZXhvbmx5c2NhbiA9IG9uCisjZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCA9IG9uCiAjZW5h YmxlX21hdGVyaWFsID0gb24KICNlbmFibGVfbWVtb2l6ZSA9IG9uCiAjZW5hYmxlX21lcmdlam9p biA9IG9uCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgYi9kb2Mvc3JjL3Nn bWwvY29uZmlnLnNnbWwKaW5kZXggZmE1NjZjOWU1Li5mN2RjMDEzYTIgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAg LTU5MzgsNiArNTkzOCwyMiBAQCBBTlkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51 bV9zeW5jPC9yZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFibGUgY2xhc3M9IgogICAgICAgPC9saXN0 aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3Vj LWVuYWJsZS1pbmRleHNjYW4tcHJlZmV0Y2giIHhyZWZsYWJlbD0iZW5hYmxlX2luZGV4c2Nhbl9w cmVmZXRjaCI+CisgICAgICA8dGVybT48dmFybmFtZT5lbmFibGVfaW5kZXhzY2FuX3ByZWZldGNo PC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJtPgorICAg ICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2g8L3Zhcm5hbWU+ IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAgPC9pbmRleHRlcm0+Cisg ICAgICA8L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIEVu YWJsZXMgb3IgZGlzYWJsZXMgSS9PIHByZWZldGNoaW5nIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9m IGluZGV4CisgICAgICAgIHNjYW5zIGFuZCBpbmRleC1vbmx5IHNjYW5zLiAgUHJlZmV0Y2hpbmcg Y2FuIGltcHJvdmUgcGVyZm9ybWFuY2UgYnkKKyAgICAgICAgcmVhZGluZyB0YWJsZSBBTSBwYWdl cyBhaGVhZCBvZiB3aGVuIHRoZXkgYXJlIG5lZWRlZCBkdXJpbmcgdGhlc2UKKyAgICAgICAgc2Nh bnMuICBUaGUgZGVmYXVsdCBpcyA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4uCisgICAgICAgPC9wYXJh PgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxp c3RlbnRyeSBpZD0iZ3VjLWVuYWJsZS1tYXRlcmlhbCIgeHJlZmxhYmVsPSJlbmFibGVfbWF0ZXJp YWwiPgogICAgICAgPHRlcm0+PHZhcm5hbWU+ZW5hYmxlX21hdGVyaWFsPC92YXJuYW1lPiAoPHR5 cGU+Ym9vbGVhbjwvdHlwZT4pCiAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL2luZGV4YW0uc2dtbCBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKaW5kZXggNDkw NDMxZjcwLi43ZGE4MGQxNmEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbApAQCAtODgzLDkgKzg4MywxMSBAQCBhbWdl dGJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICB0aW1lIChzbyB0aGV5IGNhbiBkcml2ZSBh IGN1cnNvciksIGFzIG9wcG9zZWQgdG8gYSBiaXRtYXAgc2NhbgogICAgKDxmdW5jdGlvbj5hbWdl dGJpdG1hcDwvZnVuY3Rpb24+KSwgd2hpY2ggcmV0dXJucyBhbGwgbWF0Y2hlcyBhdCBvbmNlLgog ICAgV2hlcmUgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiByZXR1cm5zIG9uZSBtYXRj aGluZyBlbnRyeSBwZXIgY2FsbCwKLSAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g cmV0dXJucyB0aGVtIGluIGJhdGNoZXMuICBCeSByZXR1cm5pbmcgYWxsCi0gICBtYXRjaGluZyBp bmRleCBlbnRyaWVzIGZyb20gYSBzaW5nbGUgaW5kZXggcGFnZSB0b2dldGhlciwgdGhlIHRhYmxl IEFNIGdhaW5zCi0gICB2aXNpYmlsaXR5IGludG8gd2hpY2ggdGFibGUgYmxvY2tzIHdpbGwgYmUg bmVlZGVkIGluIHRoZSBuZWFyIGZ1dHVyZS4KKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gcmV0dXJucyB0aGVtIGluIGJhdGNoZXMuICBUaGlzIGVuYWJsZXMgdGhlCisgICB0YWJs ZSBhY2Nlc3MgbWV0aG9kIHRvIG9wdGltaXplIHRhYmxlIGJsb2NrIGFjY2VzcyBwYXR0ZXJucyBh bmQgcGVyZm9ybQorICAgSS9PIHByZWZldGNoaW5nOiBieSByZXR1cm5pbmcgbWF0Y2hpbmcgaW5k ZXggZW50cmllcyBpbiBiYXRjaGVzICh0eXBpY2FsbHkKKyAgIGFsbCBtYXRjaGVzIGZyb20gYSBz aW5nbGUgaW5kZXggcGFnZSksIHRoZSB0YWJsZSBBTSBjYW4gcmVhZCBhaGVhZCB0aHJvdWdoCisg ICB0aGUgaW5kZXgsIGlkZW50aWZ5IHdoaWNoIHRhYmxlIGJsb2NrcyB3aWxsIGJlIG5lZWRlZCwg YW5kIHByZWZldGNoIHRoZW0uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTEwNTIsNyArMTA1 NCw5IEBAIGFtdW5ndWFyZGJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICAgYmUgc3VyZSB0 byBmcmVlIHRoZSBwaW5zIGF0IGFuIG9wcG9ydHVuZSBwb2ludCAoYXQgYSBtaW5pbXVtIHdoZW5l dmVyCiAgICAgPGZ1bmN0aW9uPmFtZW5kc2NhbjwvZnVuY3Rpb24+IGlzIGNhbGxlZCwgYW5kIHR5 cGljYWxseSB3aGVuCiAgICAgPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4gaXMgY2FsbGVk KS4gIEl0IG11c3QgYWxzbyBrZWVwIHRoZSBudW1iZXIgb2YKLSAgICByZXRhaW5lZCBwaW5zIGZp eGVkIGFuZCBzbWFsbC4KKyAgICByZXRhaW5lZCBwaW5zIGZpeGVkIGFuZCBzbWFsbCwgdG8gYXZv aWQgZXhoYXVzdGluZyB0aGUgYmFja2VuZCdzIGJ1ZmZlcgorICAgIHBpbiBsaW1pdCAod2hpY2gg aXMgc2hhcmVkIHdpdGggdGhlIHRhYmxlIEFNJ3MgcmVhZCBzdHJlYW0gZm9yIGluZGV4IHNjYW4K KyAgICBwcmVmZXRjaGluZykuCiAgICA8L3BhcmE+CiAgIDwvbm90ZT4KIApAQCAtMTU5Nyw2ICsx NjAxLDY2IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9w ZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgIG9yIHZpY2UgdmVyc2EsIGlmIGl0cyBpbnRlcm5h bCBpbXBsZW1lbnRhdGlvbiBpcyB1bnN1aXRlZCB0byBvbmUgQVBJIG9yIHRoZSBvdGhlci4KICAg PC9wYXJhPgogCisgIDxzZWN0MiBpZD0iaW5kZXgtc2Nhbm5pbmctYmF0Y2hlcyI+CisgICA8dGl0 bGU+VGFibGUgQU0gQ29uc2lkZXJhdGlvbnMgZm9yIEJhdGNoIFNjYW5uaW5nPC90aXRsZT4KKwor ICAgPHBhcmE+CisgICAgVGhpcyBzZWN0aW9uIGlzIHByaW1hcmlseSByZWxldmFudCB0byA8bGlu ayBsaW5rZW5kPSJ0YWJsZWFtIj50YWJsZSBhY2Nlc3MKKyAgICAgbWV0aG9kPC9saW5rPiBhdXRo b3JzLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBXaGVuIGFuIGluZGV4IHNjYW4gdXNl cyB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UsIHRoZQorICAg IHRhYmxlIEFNIGhhcyBzb2xlIGNvbnRyb2wgb3ZlciB0aGUgPHN0cnVjdG5hbWU+SW5kZXhTY2Fu RGVzYzwvc3RydWN0bmFtZT4ncworICAgIDxzdHJ1Y3RmaWVsZD5iYXRjaHJpbmdidWY8L3N0cnVj dGZpZWxkPiwgaW5jbHVkaW5nIGNyZWF0aW5nLCByZXNldHRpbmcsCisgICAgYW5kIGVuZGluZyB0 aGUgYmF0Y2ggcmluZyBidWZmZXIgd2l0aGluIHRoZSBhcHByb3ByaWF0ZSB0YWJsZSBBTQorICAg IGNhbGxiYWNrcywgYW5kIG1hbmFnaW5nIHBvc2l0aW9uYWwgc3RhdGUgYW5kIFRJRCByZWN5Y2xp bmcgaW50ZXJsb2NraW5nCisgICAgKHRoYXQgaXMsIGRldGVybWluaW5nIHdoZW4gdG8gdW5ndWFy ZCBlYWNoIGJhdGNoLCB3aGljaCB3aWxsIHR5cGljYWxseQorICAgIHJlbGVhc2UgYW4gaW5kZXgg cGFnZSBidWZmZXIgcGluIGFzc29jaWF0ZWQgd2l0aCB0aGUgYmF0Y2gpLiAgSW5kZXggYWNjZXNz CisgICAgbWV0aG9kcyBzaG91bGQgbm90IGFjY2VzcyBvciBtYW5pcHVsYXRlIHRoZXNlIGZpZWxk cy4KKyAgICA8ZmlsZW5hbWU+c3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaDwvZmlsZW5h bWU+IHByb3ZpZGVzIHRoZQorICAgIDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfKjwvZnVuY3Rpb24+ IHV0aWxpdHkgZnVuY3Rpb25zIHRoYXQgdGFibGUgQU1zIHVzZQorICAgIHRvIG1hbmFnZSB0aGUg cmluZyBidWZmZXIgYW5kIGl0cyBwb3NpdGlvbmFsIHN0YXRlLiAgU2VlIHRoZQorICAgIDxmaWxl bmFtZT5zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmM8L2ZpbGVuYW1l PgorICAgIGltcGxlbWVudGF0aW9uIGZvciBhIHJlZmVyZW5jZSBleGFtcGxlLgorICAgPC9wYXJh PgorCisgICA8cGFyYT4KKyAgICBUaGUgPHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxk PiBmaWVsZCB3aXRoaW4KKyAgICA8c3RydWN0ZmllbGQ+YmF0Y2hyaW5nYnVmPC9zdHJ1Y3RmaWVs ZD4gdHJhY2tzIHdoaWNoIGJhdGNoIGFuZCBpdGVtIHdpdGhpbgorICAgIHRoYXQgYmF0Y2ggd2ls bCBiZSByZXR1cm5lZCBuZXh0IHRvIHRoZSBleGVjdXRvci4gIFRoZSB0YWJsZSBBTSBtdXN0IGFk dmFuY2UKKyAgICA8c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0ZmllbGQ+IGFzIHR1cGxlcyBh cmUgcmV0dXJuZWQgYnkKKyAgICA8ZnVuY3Rpb24+dGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90PC9m dW5jdGlvbj4gKHVzaW5nCisgICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9zY2FucG9zX2FkdmFu Y2U8L2Z1bmN0aW9uPiwgcGx1cworICAgIDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfc2NhbnBvc19u ZXh0YmF0Y2g8L2Z1bmN0aW9uPiB3aGVuIGNyb3NzaW5nIGJhdGNoCisgICAgYm91bmRhcmllcyks IGFuZCBtdXN0IGFsc28gbW9kaWZ5IHRoaXMgZmllbGQgd2hlbiByZXN0b3JpbmcgYSBzYXZlZCBt YXJrLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBUaGUgPHN0cnVjdGZpZWxkPnByZWZl dGNoUG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdHJhY2tzIHRoZSBwb3NpdGlvbiB1c2VkCisgICAg Zm9yIEkvTyBwcmVmZXRjaGluZy4gIEl0IGlzIG1hbmFnZWQgd2l0aGluIGEgcmVhZCBzdHJlYW0g Y2FsbGJhY2sgKHVzaW5nCisgICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9wcmVmZXRjaHBvc19j YXRjaHVwPC9mdW5jdGlvbj4gYW5kCisgICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9wcmVmZXRj aHBvc19hZHZhbmNlPC9mdW5jdGlvbj4pLCBhbGxvd2luZworICAgIHRoZSB0YWJsZSBBTSB0byBw cmVmZXRjaCB0YWJsZSBibG9ja3MgcG9pbnRlZCB0byBieSBpdGVtcyB0aGF0IGFyZSB3ZWxsCisg ICAgYWhlYWQgb2YgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbi4gIEluaXRpYWxseQorICAgIDxz dHJ1Y3RmaWVsZD5wcmVmZXRjaFBvczwvc3RydWN0ZmllbGQ+IHN0YXJ0cyBhdAorICAgIDxzdHJ1 Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4sIGJ1dCBhcyB0aGUgcmVhZCBzdHJlYW0gcmFt cHMgdXAgaXQgY2FuCisgICAgZ2V0IGZhciBhaGVhZCAmbWRhc2g7IHNwYW5uaW5nIG11bHRpcGxl IGluZGV4IHBhZ2VzIGlmIG5lY2Vzc2FyeSB0bworICAgIG1haW50YWluIGFuIG9wdGltYWwgSS9P IHByZWZldGNoIGRpc3RhbmNlIGZvciB0YWJsZSBibG9jayByZWFkcy4gIEEgbWFqb3IKKyAgICBn b2FsIG9mIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBpcyB0 byBhbGxvdyB0aGUKKyAgICB0YWJsZSBBTSB0byBwcmVmZXRjaCB3aXRob3V0IGJlaW5nIGxpbWl0 ZWQgdG8gaXRlbXMgZnJvbSB0aGUgY3VycmVudAorICAgIDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9z dHJ1Y3RmaWVsZD4gYmF0Y2gncyBpbmRleCBsZWFmIHBhZ2UuCisgICA8L3BhcmE+CisKKyAgIDxw YXJhPgorICAgIEZvciBkZXRhaWxzIG9uIHRoZSBUSUQgcmVjeWNsaW5nIGludGVybG9jayBkdXJp bmcgYmF0Y2ggc2NhbnMsIGluY2x1ZGluZworICAgIHRoZSA8c3RydWN0ZmllbGQ+YmF0Y2hJbW1l ZGlhdGVVbmd1YXJkPC9zdHJ1Y3RmaWVsZD4gcG9saWN5IGFuZCB0aGUKKyAgICA8ZnVuY3Rpb24+ YW11bmd1YXJkYmF0Y2g8L2Z1bmN0aW9uPiBjYWxsYmFjaywgc2VlCisgICAgPHhyZWYgbGlua2Vu ZD0iaW5kZXgtbG9ja2luZyIvPi4KKyAgIDwvcGFyYT4KKworICA8L3NlY3QyPgorCiAgPC9zZWN0 MT4KIAogIDxzZWN0MSBpZD0iaW5kZXgtbG9ja2luZyI+CkBAIC0xNzAyLDcgKzE3NjYsNDAgQEAg YW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9p ZCBvcGNpbnR5cGUpOwogICAgaW1tZWRpYXRlbHkgYWZ0ZXIgc2Nhbm5pbmcgdGhlIGNvcnJlc3Bv bmRpbmcgaW5kZXggZW50cnkuICBUaGlzIGlzCiAgICBleHBlbnNpdmUgZm9yIGEgbnVtYmVyIG9m IHJlYXNvbnMuICBUaGUKICAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJm YWNlLCBieSBjb250cmFzdCwgd2FzIGRlc2lnbmVkIHRvCi0gICBhbGxvdyBzY2FucyB0byBiZSA8 cXVvdGU+YXN5bmNocm9ub3VzPC9xdW90ZT4uCisgICBhbGxvdyBzY2FucyB0byBiZSA8cXVvdGU+ YXN5bmNocm9ub3VzPC9xdW90ZT46IGJ5IGNvbGxlY3RpbmcgYmF0Y2hlcyBvZgorICAgVElEcyBm cm9tIG11bHRpcGxlIGluZGV4IHBhZ2VzLCB0aGUgdGFibGUgQU0gY2FuIHByZWZldGNoIHRoZSBj b3JyZXNwb25kaW5nCisgICB0YWJsZSBibG9ja3Mgd2VsbCBhaGVhZCBvZiB0aGUgY3VycmVudCBz Y2FuIHBvc2l0aW9uICh1c2luZyBhc3luY2hyb25vdXMKKyAgIEkvTyB3aGVuIGF2YWlsYWJsZSks IGFsbG93aW5nIGEgbW9yZSBlZmZpY2llbnQgaGVhcCBhY2Nlc3MgcGF0dGVybi4gIE5vdAorICAg YWxsIHNjYW5zIGVuZCB1cCBiZWluZyBhc3luY2hyb25vdXMgaW4gcHJhY3RpY2UsIGJ1dCB0aGUg aW50ZXJmYWNlIGlzCisgICBkZXNpZ25lZCB0byBhbGxvdyBpdC4gIFBlciB0aGUgYWJvdmUgYW5h bHlzaXMsIHdlIG11c3QgdXNlIHRoZSBzeW5jaHJvbm91cworICAgYXBwcm9hY2ggZm9yIG5vbi1N VkNDLWNvbXBsaWFudCBzbmFwc2hvdHMgKGV2ZW4gd2hlbiB1c2luZyB0aGUKKyAgIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlKSwgYnV0IGFuIGFzeW5jaHJvbm91cyBz Y2FuIGlzCisgICB3b3JrYWJsZSBmb3IgcGxhaW4gaW5kZXggc2NhbnMgdGhhdCB1c2UgYW4gTVZD QyBzbmFwc2hvdC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQmVjYXVzZSB0aGUgdGFibGUg QU0gcmVhZHMgbXVsdGlwbGUgaW5kZXggbGVhZiBwYWdlcyBhaGVhZCB2aWEKKyAgIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gdG8gZmFjaWxpdGF0ZSB0aGlzIHByZWZldGNoaW5nLCBh IG5vbi1NVkNDCisgICBzY2FuIHdvdWxkIGhhdmUgdG8gaG9sZCB0aGUgVElEIHJlY3ljbGluZyBp bnRlcmxvY2sgYWNyb3NzIHRoZSBlbnRpcmUKKyAgIHJlYWQtYWhlYWQgd2luZG93LCBzaW5jZSBp dCBoYXMgbm8gaGVhcC12aXNpYmlsaXR5IGJhY2tzdG9wIHRvIGZhbGwgYmFjayBvbi4KKyAgIFRo YXQgaXMgaW1wcmFjdGljYWwsIHNvIEkvTyBwcmVmZXRjaGluZyB3aXRoCisgICA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlzIG9ubHkgcG9zc2libGUgd2hlbiBhbiBNVkNDLWNvbXBs aWFudAorICAgc25hcHNob3QgaXMgaW4gdXNlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBX aXRoIGFuIE1WQ0Mgc25hcHNob3QsIGEgcGxhaW4gaW5kZXggc2NhbiBkcm9wcyBlYWNoIGJhdGNo J3MgaW50ZXJsb2NrCisgICBpbW1lZGlhdGVseSwgc2luY2UgaXQgYWx3YXlzIHZpc2l0cyB0aGUg aGVhcCBwYWdlLCB3aGVyZSB0aGUgc25hcHNob3QKKyAgIHJlamVjdHMgYW55IHJlY3ljbGVkIFRJ RCdzIG5ldyBvY2N1cGFudC4gIEFuIGluZGV4LW9ubHkgc2NhbiBtYXkgaW5zdGVhZAorICAgc2tp cCB0aGUgaGVhcCBhbmQgY29uc3VsdCB0aGUgdmlzaWJpbGl0eSBtYXAsIHNvIHRoZSB0YWJsZSBB TSBob2xkcyB0aGUKKyAgIGJhdGNoJ3MgaW50ZXJsb2NrIHBpbiB1bnRpbCBpdCBoYXMgY29waWVk IHRoYXQgYmF0Y2gncyB2aXNpYmlsaXR5CisgICBpbmZvcm1hdGlvbiBvdXQgb2YgdGhlIHZpc2li aWxpdHkgbWFwLCBhbmQgdGhlbiBkcm9wcyBpdC4gIEVpdGhlciB3YXksIHRoZQorICAgc2NhbiBu ZXZlciBob2xkcyBtb3JlIHRoYW4gb25lIHN1Y2ggaW50ZXJsb2NrIHBpbiBhdCBhIHRpbWUsIHdo ZXRoZXIgb3Igbm90CisgICBwcmVmZXRjaGluZyBpcyBhY3RpdmUgJm1kYXNoOyBzbyBpbiB0ZXJt cyBvZiBwaW5zIGhlbGQsIGFuIGluZGV4LW9ubHkgc2NhbgorICAgYmVoYXZlcyBtdWNoIGxpa2Ug YSBwbGFpbiBpbmRleCBzY2FuLiAgVGhhdCBzaW5nbGUKKyAgIGV4dHJhIHBpbiBpcyB0YWtlbiBh bmQgcmVsZWFzZWQgYnkgdGhlIHNjYW4gaXRzZWxmLCBvdXRzaWRlIHRoZSBwcmVmZXRjaGluZwor ICAgcmVhZCBzdHJlYW0ncyBvd24gcGluIG1hbmFnZW1lbnQ7IGJvdW5kaW5nIGl0IHRvIG9uZSBw aW4gaXMgd2hhdCBrZWVwcyBpdAorICAgZnJvbSBkaXN0dXJiaW5nIGhvdyB0aGUgcmVhZCBzdHJl YW0gYnVkZ2V0cyBpdHMgYnVmZmVyIHBpbnMuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KZGlmZiAt LWdpdCBhL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvdGFibGVhbS5z Z21sCmluZGV4IDljY2Y1YjczOS4uNTRiNWJhMmRjIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwv dGFibGVhbS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwKQEAgLTEyOSw2ICsx MjksMTMgQEAgbXlfdGFibGVhbV9oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAgIG9wdGlvbmFs KSwgdGhlIGJsb2NrIG51bWJlciBuZWVkcyB0byBwcm92aWRlIGxvY2FsaXR5LgogIDwvcGFyYT4K IAorIDxwYXJhPgorICBUYWJsZSBhY2Nlc3MgbWV0aG9kcyBtdXN0IHN1cHBvcnQgaW5kZXggc2Nh bnMgdGhhdCBhcmUgZHJpdmVuIGJ5IGluZGV4CisgIGFjY2VzcyBtZXRob2RzIGltcGxlbWVudGlu ZyB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UuCisgIFNlZSA8 eHJlZiBsaW5rZW5kPSJpbmRleC1zY2FubmluZy1iYXRjaGVzIi8+IGZvciBkZXRhaWxzIG9uIGNv bnN1bWluZworICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGJhdGNoZXMgYW5kIG1h bmFnaW5nIHRoZSBzY2FuJ3MgcG9zaXRpb24uCisgPC9wYXJhPgorCiAgPHBhcmE+CiAgIEZvciBj cmFzaCBzYWZldHksIGFuIEFNIGNhbiB1c2UgcG9zdGdyZXMnIDxsaW5rCiAgIGxpbmtlbmQ9Indh bCI+PGFjcm9ueW0+V0FMPC9hY3JvbnltPjwvbGluaz4sIG9yIGEgY3VzdG9tIGltcGxlbWVudGF0 aW9uLgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAppbmRleCAxMzJiNTZhNTgu LjMyYmMzZGQzZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3 cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE2 Niw2ICsxNjYsNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJl IG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX2luY3JlbWVudGFsX3NvcnQgICAgICAgIHwg b24KICBlbmFibGVfaW5kZXhvbmx5c2NhbiAgICAgICAgICAgfCBvbgogIGVuYWJsZV9pbmRleHNj YW4gICAgICAgICAgICAgICB8IG9uCisgZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCAgICAgIHwg b24KICBlbmFibGVfbWF0ZXJpYWwgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9tZW1vaXpl ICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX21lcmdlam9pbiAgICAgICAgICAgICAgIHwg b24KQEAgLTE4MCw3ICsxODEsNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRp bmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAg ICAgICAgIHwgb24KICBlbmFibGVfc29ydCAgICAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJs ZV90aWRzY2FuICAgICAgICAgICAgICAgICB8IG9uCi0oMjUgcm93cykKKygyNiByb3dzKQogCiAt LSBUaGVyZSBhcmUgYWx3YXlzIHdhaXQgZXZlbnQgZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5 cGVzLiAgSW5qZWN0aW9uUG9pbnQKIC0tIG1heSBiZSBwcmVzZW50IG9yIGFic2VudCwgZGVwZW5k aW5nIG9uIGhpc3Rvcnkgc2luY2UgbGFzdCBwb3N0bWFzdGVyIHN0YXJ0LgpkaWZmIC0tZ2l0IGEv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAppbmRleCBjYmZjZGUzMDMuLjE5MWNlMWQ3YyAxMDA2NDQKLS0tIGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKQEAgLTI2Niw2ICsyNjYsNyBAQCBCYXNlQmFja3VwVGFyZ2V0SGFuZGxlCiBCYXNl QmFja3VwVGFyZ2V0VHlwZQogQmF0Y2hNVkNDU3RhdGUKIEJhdGNoTWF0Y2hpbmdJdGVtCitCYXRj aFBvc0FkdmFuY2VSZXN1bHQKIEJhdGNoUmluZ0J1ZmZlcgogQmF0Y2hSaW5nSXRlbVBvcwogQmVn aW5EaXJlY3RNb2RpZnlfZnVuY3Rpb24KLS0gCjIuNTMuMAoK --0000000000004ffa5f0654ddc4ef Content-Type: application/octet-stream; name="v28-0005-WIP-Adopt-amgetbatch-interface-in-GiST-index-AM.patch" Content-Disposition: attachment; filename="v28-0005-WIP-Adopt-amgetbatch-interface-in-GiST-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqpot0fn7 RnJvbSA5ZGJjYTQzZmNhMTAyZTM2ODQxNjYwNjdlOTAxZDJjZTEwZDk5ZDE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IE1v biwgMSBKdW4gMjAyNiAxOTozNTo0NyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjI4IDA1LzExXSBX SVA6IEFkb3B0IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGluIEdpU1QgaW5kZXggQU0uCgpSZXBsYWNl IGdpc3RnZXR0dXBsZSB3aXRoIGdpc3RnZXRiYXRjaCwgYSBmdW5jdGlvbiB0aGF0IGltcGxlbWVu dHMgdGhlCm5ldyBhbWdldGJhdGNoIGludGVyZmFjZSBhZGRlZCBieSBjb21taXQgRklYTUUuICBQ bGFpbiBpbmRleCBzY2FucyBvZgpHaVNUIGluZGV4ZXMgbm93IHJldHVybiBtYXRjaGluZyBpdGVt cyBpbiBiYXRjaGVzIGNvbnNpc3Rpbmcgb2YgYWxsIG9mCnRoZSBtYXRjaGVzIGZyb20gYSBnaXZl biBsZWFmIHBhZ2UuICBUaGlzIGdpdmVzIHRoZSB0YWJsZSBBTSB0aGUgYWJpbGl0eQp0byBwZXJm b3JtIG9wdGltaXphdGlvbnMgbGlrZSBpbmRleCBwcmVmZXRjaGluZyBkdXJpbmcgR2lTVCBpbmRl eCBzY2Fucy4KClRoZSBhbWdldGJhdGNoIGludGVyZmFjZSByZXF1aXJlcyB0aGF0IGluZGV4IEFN cyB0YWtlIHRoZSBzYW1lCnN0YW5kYXJkaXplZCBhcHByb2FjaCB0byBwaW4gbWFuYWdlbWVudCBm b3IgcGlucyB0aGF0IGFyZSB1c2VkIHRvCnByZXZlbnQgdW5zYWZlIGNvbmN1cnJlbnQgVElEIHJl Y3ljbGluZyBieSBWQUNVVU0gKHRoYXQgd2F5IHByZWZldGNoaW5nCmNhbiBob2xkIG9wZW4gbXVs dGlwbGUgYmF0Y2hlcyB3aXRob3V0IGl0IGFmZmVjdGluZyB0aGUgcmVhZCBzdHJlYW0pLgpGb3Ig YW4gb3JkaW5hcnkgR2lTVCBiYXRjaCB0aGlzIGludGVybG9jayBwaW4gaXMgdGhlIHBpbiBvbiBp dHMgc2luZ2xlCmxlYWYgcGFnZSwgaGVsZCBvbmx5IGZvciBhcyBsb25nIGFzIHRoZSB0YWJsZSBB TSBzdGlsbCBuZWVkcyBpdCBhcyBhbgppbnRlcmxvY2sgKGp1c3QgbGlrZSBkdXJpbmcgbmJ0cmVl IGFuZCBoYXNoIHNjYW5zKS4KCk5lYXJlc3QtbmVpZ2hib3IgKG9yZGVyZWQpIHNjYW5zIGFyZSBo YW5kbGVkIHF1aXRlIGRpZmZlcmVudGx5LCBiZWNhdXNlCnRoZWlyIG1hdGNoZXMgZG9uJ3QgbmF0 dXJhbGx5IGFycml2ZSBvbmUgbGVhZiBwYWdlIGF0IGEgdGltZS4gIEhlcmUKZ2lzdGdldGJhdGNo IGluc3RlYWQgZHJhaW5zIHRoZSBzY2FuJ3MgZGlzdGFuY2Utb3JkZXJlZCBwYWlyaW5nIGhlYXAs CnBhY2tpbmcgdGhlIG1hdGNoaW5nIGxlYWYgaXRlbXMgaW50byBhIHNpbmdsZSAidmlydHVhbCIg YmF0Y2ggaW4KZGlzdGFuY2Ugb3JkZXIsIHR5cGljYWxseSBzcGFubmluZyBtYW55IGxlYWYgcGFn ZXMuICBXZSdyZSBlZmZlY3RpdmVseQpwcmV0ZW5kaW5nIHRoYXQgdGhlIG1hdGNoZXMgd2UgZm91 bmQgd2VyZSBpbiB1c2VmdWwgb3JkZXIsIHRvZ2V0aGVyIG9uCnRoZSBzYW1lIGxlYWYgcGFnZSAt LSB0aG91Z2ggdGhhdCBpc24ndCByZWFsbHkgdHJ1ZS4gIFZpcnR1YWwgYmF0Y2hlcwpjb21lIHdp dGggcmVzdHJpY3Rpb25zIHRoYXQgbWFrZSB0aGUgcHJldGVuc2Ugc2FmZTogYW4gb3JkZXJlZCBz Y2FuIGlzCm5ldmVyIHBsYW5uZWQgYXMgYW4gaW5kZXgtb25seSBzY2FuLCBhbmQgZ2lzdGtpbGxp dGVtc2JhdGNoIGRvZXMgbm90aGluZwpmb3IgYSB2aXJ0dWFsIGJhdGNoLiAgQSB2aXJ0dWFsIGJh dGNoIHRoZXJlZm9yZSBuZXZlciBob2xkcyBhIFRJRApyZWN5Y2xpbmcgaW50ZXJsb2NrIHBpbiBh dCBhbGw7IHRoZSBwaW4gb24gZWFjaCB1bmRlcmx5aW5nIGxlYWYgcGFnZSBpcwppbnN0ZWFkIGRy b3BwZWQgcmlnaHQgYXdheSwgYXMgdGhlIHBhZ2UgaXMgc2Nhbm5lZCBpbnRvIHRoZSBxdWV1ZS4K ClRoZSBpbnRlcmxvY2sgcGluIGFsc28gZml4ZXMgYSBwcmUtZXhpc3RpbmcgYnVnIGluIHdoaWNo IEdpU1QgaW5kZXgtb25seQpzY2FucyBjb3VsZCByZXR1cm4gd3JvbmcgYW5zd2VycyBbMV0uICBB biBpbmRleC1vbmx5IHNjYW4gdHJ1c3RzIHRoZQp2aXNpYmlsaXR5IG1hcCBpbnN0ZWFkIG9mIGZl dGNoaW5nIHRoZSBoZWFwIHR1cGxlLCBzbyBpdCBtdXN0IGtlZXAKVkFDVVVNIGZyb20gcmVjeWNs aW5nIGEgaGVhcCBUSUQgYmV0d2VlbiB0aGUgbW9tZW50IGl0IHJlYWRzIGFuIGluZGV4CmVudHJ5 IGFuZCB0aGUgbW9tZW50IGl0IGNvbnN1bHRzIHRoZSB2aXNpYmlsaXR5IG1hcDsgb3RoZXJ3aXNl IGl0IGNhbgpyZXBvcnQgaW5kZXhlZCB2YWx1ZXMgdGhhdCBiZWxvbmcgdG8gYW4gdW5yZWxhdGVk LCBzaW5jZS1yZWN5Y2xlZCBoZWFwCnR1cGxlLiAgVGhlIHJldGFpbmVkIGxlYWYtcGFnZSBidWZm ZXIgcGluIGlzIHRoYXQgaW50ZXJsb2NrIC0tIGJ1dCBvbmx5CmlmIFZBQ1VVTSBob25vcnMgaXQu ICBnaXN0dmFjdXVtcGFnZSB0aGVyZWZvcmUgbm93IGFjcXVpcmVzIGEgY2xlYW51cApsb2NrIG9u IGVhY2ggcGFnZSAocmF0aGVyIHRoYW4gYSBwbGFpbiBleGNsdXNpdmUgbG9jayksIHNvIGEgY29u Y3VycmVudApzY2FuJ3MgcGluIGhvbGRzIFZBQ1VVTSBvZmYgZnJvbSByZWN5Y2xpbmcgdGhhdCBw YWdlJ3MgVElEcyB1bnRpbCB0aGUKc2NhbiBoYXMgZmluaXNoZWQgaXRzIHZpc2liaWxpdHkgY2hl Y2tzLgoKVGhpcyBzYW1lIGludGVybG9jayByZXF1aXJlbWVudCBpcyB3aHkgb3JkZXJlZCBzY2Fu cyBjYW5ub3QgYmUKaW5kZXgtb25seTogYSB2aXJ0dWFsIGJhdGNoIGRyb3BzIGVhY2ggbGVhZiBw YWdlJ3MgcGluIGFzIHNvb24gYXMgdGhlCnBhZ2UgaXMgc2Nhbm5lZCwgc28gaXQgaGFzIG5vIGJv dW5kZWQgcGluIHRvIG9mZmVyIGFzIHRoZSByZWN5Y2xpbmcKaW50ZXJsb2NrIHRoYXQgYW4gaW5k ZXgtb25seSBzY2FuIGRlcGVuZHMgb24uICBSYXRoZXIgdGhhbiB3b3JrIGFyb3VuZAp0aGF0ICh3 aGljaCBzZWVtcyBwcm9oaWJpdGl2ZWx5IGNvbXBsaWNhdGVkKSwgdGhlIHBsYW5uZXIgbmV2ZXIg YnVpbGRzCmFuIGluZGV4LW9ubHkgc2NhbiB0aGF0IHVzZXMgb3JkZXJpbmcgb3BlcmF0b3JzOyBv cmRlcmVkIHNjYW5zIG11c3QgYmUKcGxhaW4gaW5kZXggc2NhbnMsIHdoaWNoIGZldGNoIGFuZCBy ZWNoZWNrIHRoZSBoZWFwIHR1cGxlIGFuZCBzbyB3ZXJlCm5ldmVyIHN1YmplY3QgdG8gdGhlIGJ1 Zy4gIFRoaXMgd2FycmFudHMgYW4gaW5jb21wYXRpYmlsaXR5IGl0ZW0gaW4gdGhlClBvc3RncmVz IDIwIHJlbGVhc2Ugbm90ZXMgKG5vdGUgdGhhdCBib3RoIEdpU1QgYW5kIFNQLUdpU1QgYXJlIGFm ZmVjdGVkKS4KClRoZSBnaXN0Z2V0YmF0Y2ggaW1wbGVtZW50YXRpb24gbWFrZXMgdXNlIG9mIG5l dyBiYXRjaC1yZWxhdGVkIGNvcmUKaW5mcmFzdHJ1Y3R1cmUuICBHaVNUIG5vdyByZWdpc3RlcnMg YW4gYW1nZXR0cmFuc2Zvcm0gY2FsbGJhY2ssIHdoaWNoCnNldHMgdGhlIHNjYW4gZGVzY3JpcHRv cidzIHBlci10dXBsZSByZWNoZWNrIGZsYWdzLiAgSXQgYWxzbyBzZXRzCm9yZGVyLWJ5IGRpc3Rh bmNlcywgYW5kIHJlY29uc3RydWN0cyBhIGhlYXAgdHVwbGUgZm9yIGluZGV4LW9ubHkgc2NhbnMu Ckl0IGlzIGNhbGxlZCBqdXN0IGJlZm9yZSB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgcmV0dXJu cyBhbm90aGVyIHR1cGxlLgpMaWtlIG5idHJlZSwgdGhlIHNjYW4gdXNlcyBhIGN1cnJUdXBsZXMg c3RvcmFnZSBhcmVhIHRvIHN0b3JlIEluZGV4VHVwbGUKc3RydWN0cyBpbiB0aGVpciBvcmlnaW5h bCBvbi1kaXNrIHJlcHJlc2VudGF0aW9uLiAgVW5saWtlIG5idHJlZSwgR2lTVAp1c2VzIGFtZ2V0 dHJhbnNmb3JtIHRvIGNvbnZlcnQgdGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0dXBsZXMgaW50 byBhCmhlYXAgdHVwbGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVuZGVybHlpbmcgaW5kZXhlZCB0 eXBlLiAgVGhpcyBzY2hlbWUKYWxzbyByZWxpZXMgb24gYSBuZXcgZmFjaWxpdHkgdGhhdCBhbGxv d3MgaW5kZXggQU1zIHRvIHJlcXVlc3QgdGhlaXIgb3duCnNlcGFyYXRlIGR5bmFtaWNhbGx5IHNp emVkIGFyZWEgZm9yIHN1cHBsZW1lbnRhbCBtZXRhZGF0YSAoR2lTVApvcGNsYXNzZXMgaGF2ZSB0 aGUgYWJpbGl0eSB0byByZXByZXNlbnQgdGhhdCBhbnkgdHVwbGUgbmVlZHMgYSByZWNoZWNrLApz byB3ZSBoYXZlIHRvIHNodXR0bGUgdGhhdCBpbmZvcm1hdGlvbiBhcm91bmQgd2l0aCB0aGUgYmF0 Y2gpLgoKWzFdIGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xej1qamlOTDlGQ2g4QzFMLUdVSDE1 ZjRXRlRXdWIyeCtfTnVjbmdjRERjSEt3QG1haWwuZ21haWwuY29tCgpBdXRob3I6IFBldGVyIEdl b2doZWdhbiA8cGdAYm93dC5pZT4KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAgICAg ICAgICAgICAgICAgICAgfCAgIDUgKwogc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0ZS5o ICAgICAgICAgICAgIHwgIDc3ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdHhsb2cuaCAgICAg ICAgICAgICAgICAgfCAgMTMgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmggICAg ICAgICAgICAgICB8ICAyNSArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oICAgICAgICAg ICAgICAgICAgfCAgIDUgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICAg ICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jICAgICAgICAg ICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9SRUFETUUgICAgICAgICAgICAg ICAgfCAgOTQgKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgICAgICAgICAgICAg ICAgfCAgIDkgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RnZXQuYyAgICAgICAgICAg ICB8IDY2MSArKysrKysrKysrLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3Rz Y2FuLmMgICAgICAgICAgICB8ICA0NSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHV0 aWwuYyAgICAgICAgICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0dmFj dXVtLmMgICAgICAgICAgfCAgMTcgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R4bG9n LmMgICAgICAgICAgICB8ICAzNyArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jICAg ICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRl eHNjYW4uYyAgICB8ICAyMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2FtYXBpLmMgICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jICAgICAg ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jICAg ICAgICAgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgICAgICAg ICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvZ2lzdGRlc2MuYyAgICAg ICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jICAgICAgICAg IHwgICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgICAgICB8 ICAxMiAtCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jICAgICAgICAgfCAg IDUgKy0KIGNvbnRyaWIvYmxvb20vYmx1dGlscy5jICAgICAgICAgICAgICAgICAgICAgICB8ICAg MSArCiBjb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvY2FzaC5vdXQgICAgICAgICAgfCAgIDYg Ky0KIGNvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9kYXRlLm91dCAgICAgICAgICB8ICAgNiAr LQogY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2Zsb2F0NC5vdXQgICAgICAgIHwgICA2ICst CiBjb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvZmxvYXQ4Lm91dCAgICAgICAgfCAgIDIgKy0K IGNvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9pbnQyLm91dCAgICAgICAgICB8ICAgNiArLQog Y29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2ludDQub3V0ICAgICAgICAgIHwgICA2ICstCiBj b250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvaW50OC5vdXQgICAgICAgICAgfCAgIDIgKy0KIGNv bnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9pbnRlcnZhbC5vdXQgICAgICB8ICAgMiArLQogY29u dHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL3RpbWUub3V0ICAgICAgICAgIHwgICAyICstCiBjb250 cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvdGltZXN0YW1wLm91dCAgICAgfCAgIDIgKy0KIGNvbnRy aWIvYnRyZWVfZ2lzdC9leHBlY3RlZC90aW1lc3RhbXB0ei5vdXQgICB8ICAgMiArLQogZG9jL3Ny Yy9zZ21sL2luZGV4YW0uc2dtbCAgICAgICAgICAgICAgICAgICAgIHwgMjAwICsrKysrLQogLi4u L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYyAgIHwgICAxICsKIC4uLi9t b2R1bGVzL2luZGV4L2V4cGVjdGVkL2tpbGx0dXBsZXMub3V0ICAgICB8ICA3OSArKy0KIHNyYy90 ZXN0L21vZHVsZXMvaW5kZXgvc3BlY3Mva2lsbHR1cGxlcy5zcGVjICB8ICAxOCArLQogc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0ICAgIHwgIDE0ICstCiAuLi4vcmVn cmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXhfc3BnaXN0Lm91dCAgfCAgMTggKy0KIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2lzdC5vdXQgICAgICAgICAgICB8ICA1MiArLQogc3JjL3Rlc3Qv cmVncmVzcy9zcWwvZ2lzdC5zcWwgICAgICAgICAgICAgICAgIHwgICA4ICstCiBzcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDIgKwogNDUgZmlsZXMgY2hh bmdlZCwgMTAyOSBpbnNlcnRpb25zKCspLCA0NTggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaApp bmRleCAwMjc5M2ExMTUuLjE1N2MxYThkZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L2FtYXBpLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKQEAgLTIxMiw2ICsyMTIs MTAgQEAgdHlwZWRlZiB2b2lkICgqYW11bmd1YXJkYmF0Y2hfZnVuY3Rpb24pIChJbmRleFNjYW5E ZXNjIHNjYW4sCiB0eXBlZGVmIHZvaWQgKCphbWtpbGxpdGVtc2JhdGNoX2Z1bmN0aW9uKSAoSW5k ZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIAor LyogU2V0IHVwIHRoZSBzY2FuJ3MgeHNfaGl0dXAgb3V0cHV0IHR1cGxlIGZvciB0aGUgZ2l2ZW4g YmF0Y2ggaXRlbSAqLwordHlwZWRlZiB2b2lkICgqYW1nZXR0cmFuc2Zvcm1fZnVuY3Rpb24pIChJ bmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJIEluZGV4U2NhbkJhdGNoIGJhdGNoLCBpbnQg aXRlbSk7CisKIC8qIGZldGNoIGFsbCB2YWxpZCB0dXBsZXMgKi8KIHR5cGVkZWYgaW50NjQgKCph bWdldGJpdG1hcF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSAgIFRJ REJpdG1hcCAqdGJtKTsKQEAgLTMyNiw2ICszMzAsNyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEFt Um91dGluZQogCWFtZ2V0YmF0Y2hfZnVuY3Rpb24gYW1nZXRiYXRjaDsgLyogY2FuIGJlIE5VTEwg Ki8KIAlhbXVuZ3VhcmRiYXRjaF9mdW5jdGlvbiBhbXVuZ3VhcmRiYXRjaDsgLyogY2FuIGJlIE5V TEwgKi8KIAlhbWtpbGxpdGVtc2JhdGNoX2Z1bmN0aW9uIGFta2lsbGl0ZW1zYmF0Y2g7IC8qIGNh biBiZSBOVUxMICovCisJYW1nZXR0cmFuc2Zvcm1fZnVuY3Rpb24gYW1nZXR0cmFuc2Zvcm07IC8q IGNhbiBiZSBOVUxMICovCiAJYW1nZXRiaXRtYXBfZnVuY3Rpb24gYW1nZXRiaXRtYXA7CS8qIGNh biBiZSBOVUxMICovCiAJYW1lbmRzY2FuX2Z1bmN0aW9uIGFtZW5kc2NhbjsKIAlhbXBvc3Jlc2V0 X2Z1bmN0aW9uIGFtcG9zcmVzZXQ7IC8qIGNhbiBiZSBOVUxMICovCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9hY2Nlc3MvZ2lzdF9wcml2YXRlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdF9w cml2YXRlLmgKaW5kZXggNDQ1MTRmMWNiLi41MzRlM2I0Y2EgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9naXN0X3ByaXZhdGUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdF9w cml2YXRlLmgKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgog I2luY2x1ZGUgImFjY2Vzcy9naXN0LmgiCisjaW5jbHVkZSAiYWNjZXNzL2luZGV4YmF0Y2guaCIK ICNpbmNsdWRlICJhY2Nlc3MvaXR1cC5oIgogI2luY2x1ZGUgImxpYi9wYWlyaW5naGVhcC5oIgog I2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCkBAIC0xMjAsMTAgKzEyMSw2IEBAIHR5cGVkZWYg c3RydWN0IEdJU1RTZWFyY2hIZWFwSXRlbQogCUl0ZW1Qb2ludGVyRGF0YSBoZWFwUHRyOwogCWJv b2wJCXJlY2hlY2s7CQkvKiBUIGlmIHF1YWxzIG11c3QgYmUgcmVjaGVja2VkICovCiAJYm9vbAkJ cmVjaGVja0Rpc3RhbmNlczsJLyogVCBpZiBkaXN0YW5jZXMgbXVzdCBiZSByZWNoZWNrZWQgKi8K LQlIZWFwVHVwbGUJcmVjb250dXA7CQkvKiBkYXRhIHJlY29uc3RydWN0ZWQgZnJvbSB0aGUgaW5k ZXgsIHVzZWQgaW4KLQkJCQkJCQkJICogaW5kZXgtb25seSBzY2FucyAqLwotCU9mZnNldE51bWJl ciBvZmZudW07CQkvKiB0cmFjayBvZmZzZXQgaW4gcGFnZSB0byBtYXJrIHR1cGxlIGFzCi0JCQkJ CQkJCSAqIExQX0RFQUQgKi8KIH0gR0lTVFNlYXJjaEhlYXBJdGVtOwogCiAvKiBVbnZpc2l0ZWQg aXRlbSwgZWl0aGVyIGluZGV4IHBhZ2Ugb3IgaGVhcCB0dXBsZSAqLwpAQCAtMTQ4LDYgKzE0NSw1 NSBAQCB0eXBlZGVmIHN0cnVjdCBHSVNUU2VhcmNoSXRlbQogCShvZmZzZXRvZihHSVNUU2VhcmNo SXRlbSwgZGlzdGFuY2VzKSArIFwKIAkgc2l6ZW9mKEluZGV4T3JkZXJCeURpc3RhbmNlKSAqIChu X2Rpc3RhbmNlcykpCiAKKy8qIFBlci1iYXRjaCBkYXRhIHByaXZhdGUgdG8gdGhlIEdpU1QgaW5k ZXggQU0gKi8KK3R5cGVkZWYgc3RydWN0IEdJU1RCYXRjaERhdGEKK3sKKwkvKiBsZWFmIHBhZ2Un cyBidWZmZXIgcGluICovCisJQnVmZmVyCQlidWY7CisJLyogbGVhZiBwYWdlJ3MgYmxvY2sgbnVt YmVyIChJbnZhbGlkQmxvY2tOdW1iZXIgbWVhbnMgInZpcnR1YWwiIGJhdGNoKSAqLworCUJsb2Nr TnVtYmVyIGJsa25vOworfSBHSVNUQmF0Y2hEYXRhOworCisvKiBBY2Nlc3MgdGhlIEdpU1QtcHJp dmF0ZSBwZXItYmF0Y2ggZGF0YSBmcm9tIGFuIEluZGV4U2NhbkJhdGNoIHBvaW50ZXIgKi8KKyNk ZWZpbmUgR0lTVEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCkgXAorCWluZGV4X3NjYW5fYmF0Y2hf aW5kZXhfb3BhcXVlX3N0YXRpYyhzY2FuLCBiYXRjaCwgR0lTVEJhdGNoRGF0YSkKKworLyoKKyAq IFBlci1pdGVtIHByaXZhdGUgR2lTVCBkYXRhLiAgV2UgbGF5IG91dCB0aGUgaW5kZXggQU0ncyBk eW5hbWljIG9wYXF1ZSBhcmVhCisgKiBhcyBhbiBhcnJheSBvZiB0aGVzZSwgb25lIHBlciBiYXRj aCBpdGVtLCBhbmQgc3Vic2NyaXB0IGl0IHZpYQorICogR0lTVEJhdGNoR2V0SXRlbS4KKyAqCisg KiBHaVNUIG1hdGNoaW5nIGlzIHBvdGVudGlhbGx5IGxvc3N5LCBhbmQgdGhlIENvbnNpc3RlbnQg ZnVuY3Rpb24ncyByZWNoZWNrCisgKiBmbGFnIHZhcmllcyBmcm9tIG9uZSBpdGVtIHRvIHRoZSBu ZXh0LCBzbyBldmVyeSBiYXRjaCBpdGVtIHJlY29yZHMgaXRzIG93bgorICogcXVhbCByZWNoZWNr IGZsYWc7IGdpc3RnZXR0cmFuc2Zvcm0gcmVwb3J0cyBpdCBhcyB0aGUgaXRlbSdzIHhzX3JlY2hl Y2suCisgKgorICogTm90ZTogVW5vcmRlcmVkIHNjYW5zIG9ubHkgbmVlZCBhIHJlY2hlY2sgZmxh Zywgc28gdGhlaXIgZHluYW1pYyBvcGFxdWUKKyAqIGFyZWEgaXMganVzdCBhIGJvb2wgYXJyYXks IHN1YnNjcmlwdGVkIHZpYSBHSVNUQmF0Y2hHZXRSZWNoZWNrLgorICovCit0eXBlZGVmIHN0cnVj dCBHSVNUQmF0Y2hJdGVtCit7CisJYm9vbAkJcmVjaGVjazsJCS8qIFQgaWYgcXVhbHMgbXVzdCBi ZSByZWNoZWNrZWQgKi8KKwlib29sCQlyZWNoZWNrRGlzdGFuY2VzOwkvKiBUIGlmIGRpc3RhbmNl cyBhcmUgbG9zc3kgbG93ZXIgYm91bmRzICovCisJLyogbnVtYmVyT2ZPcmRlckJ5cyBlbnRyaWVz ICovCisJSW5kZXhPcmRlckJ5RGlzdGFuY2UgZGlzdGFuY2VzW0ZMRVhJQkxFX0FSUkFZX01FTUJF Ul07Cit9IEdJU1RCYXRjaEl0ZW07CisKKyNkZWZpbmUgU2l6ZU9mR0lTVEJhdGNoSXRlbShuX2Rp c3RhbmNlcykgXAorCShvZmZzZXRvZihHSVNUQmF0Y2hJdGVtLCBkaXN0YW5jZXMpICsgXAorCSBz aXplb2YoSW5kZXhPcmRlckJ5RGlzdGFuY2UpICogKG5fZGlzdGFuY2VzKSkKKworLyogR2V0IGFu IGl0ZW0gZnJvbSBkeW5hbWljIGFyZWEgZHVyaW5nIGFuIG9yZGVyZWQgc2NhbiAqLworI2RlZmlu ZSBHSVNUQmF0Y2hHZXRJdGVtKHNjYW4sIGJhdGNoLCBpdGVtKSBcCisJKEFzc2VydE1hY3JvKChz Y2FuKS0+bnVtYmVyT2ZPcmRlckJ5cyA+IDApLCBcCisJIEFzc2VydE1hY3JvKChpdGVtKSA+PSAw ICYmIChpdGVtKSA8IE1heEluZGV4VHVwbGVzUGVyUGFnZSksIFwKKwkgKEdJU1RCYXRjaEl0ZW0g KikgKChjaGFyICopIGluZGV4X3NjYW5fYmF0Y2hfaW5kZXhfb3BhcXVlX2R5bigoc2NhbiksIChi YXRjaCkpICsgXAorCQkJCQkJKFNpemUpIChpdGVtKSAqIFNpemVPZkdJU1RCYXRjaEl0ZW0oKHNj YW4pLT5udW1iZXJPZk9yZGVyQnlzKSkpCisKKy8qIEdldCBhbiBpdGVtIGZyb20gZHluYW1pYyBh cmVhIGR1cmluZyBhIG5vbi1vcmRlcmVkIHNjYW4gKi8KKyNkZWZpbmUgR0lTVEJhdGNoR2V0UmVj aGVjayhzY2FuLCBiYXRjaCkgXAorCShBc3NlcnRNYWNybygoc2NhbiktPm51bWJlck9mT3JkZXJC eXMgPT0gMCksIFwKKwkgKGJvb2wgKikgaW5kZXhfc2Nhbl9iYXRjaF9pbmRleF9vcGFxdWVfZHlu KChzY2FuKSwgKGJhdGNoKSkpCisKIC8qCiAgKiBHSVNUU2Nhbk9wYXF1ZURhdGE6IHByaXZhdGUg c3RhdGUgZm9yIGEgc2NhbiBvZiBhIEdpU1QgaW5kZXgKICAqLwpAQCAtMTU5LDIzICsyMDUsOSBA QCB0eXBlZGVmIHN0cnVjdCBHSVNUU2Nhbk9wYXF1ZURhdGEKIAlwYWlyaW5naGVhcCAqcXVldWU7 CQkJLyogcXVldWUgb2YgdW52aXNpdGVkIGl0ZW1zICovCiAJTWVtb3J5Q29udGV4dCBxdWV1ZUN4 dDsJCS8qIGNvbnRleHQgaG9sZGluZyB0aGUgcXVldWUgKi8KIAlib29sCQlxdWFsX29rOwkJLyog ZmFsc2UgaWYgcXVhbCBjYW4gbmV2ZXIgYmUgc2F0aXNmaWVkICovCi0JYm9vbAkJZmlyc3RDYWxs OwkJLyogdHJ1ZSB1bnRpbCBmaXJzdCBnaXN0Z2V0dHVwbGUgY2FsbCAqLwogCiAJLyogcHJlLWFs bG9jYXRlZCB3b3Jrc3BhY2UgYXJyYXlzICovCiAJSW5kZXhPcmRlckJ5RGlzdGFuY2UgKmRpc3Rh bmNlczsJLyogb3V0cHV0IGFyZWEgZm9yIGdpc3RpbmRleF9rZXl0ZXN0ICovCi0KLQkvKiBpbmZv IGFib3V0IGtpbGxlZCBpdGVtcyBpZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIg dXNlZCkgKi8KLQlPZmZzZXROdW1iZXIgKmtpbGxlZEl0ZW1zOwkvKiBvZmZzZXQgbnVtYmVycyBv ZiBraWxsZWQgaXRlbXMgKi8KLQlpbnQJCQludW1LaWxsZWQ7CQkvKiBudW1iZXIgb2YgY3VycmVu dGx5IHN0b3JlZCBpdGVtcyAqLwotCUJsb2NrTnVtYmVyIGN1ckJsa25vOwkJLyogY3VycmVudCBu dW1iZXIgb2YgYmxvY2sgKi8KLQlHaXN0TlNOCQljdXJQYWdlTFNOOwkJLyogcG9zIGluIHRoZSBX QUwgc3RyZWFtIHdoZW4gcGFnZSB3YXMgcmVhZCAqLwotCi0JLyogSW4gYSBub24tb3JkZXJlZCBz ZWFyY2gsIHJldHVybmFibGUgaGVhcCBpdGVtcyBhcmUgc3RvcmVkIGhlcmU6ICovCi0JR0lTVFNl YXJjaEhlYXBJdGVtIHBhZ2VEYXRhW0JMQ0tTWiAvIHNpemVvZihJbmRleFR1cGxlRGF0YSldOwot CU9mZnNldE51bWJlciBuUGFnZURhdGE7CQkvKiBudW1iZXIgb2YgdmFsaWQgaXRlbXMgaW4gYXJy YXkgKi8KLQlPZmZzZXROdW1iZXIgY3VyUGFnZURhdGE7CS8qIG5leHQgaXRlbSB0byByZXR1cm4g Ki8KLQlNZW1vcnlDb250ZXh0IHBhZ2VEYXRhQ3h0OwkvKiBjb250ZXh0IGhvbGRpbmcgdGhlIGZl dGNoZWQgdHVwbGVzLCBmb3IKLQkJCQkJCQkJICogaW5kZXgtb25seSBzY2FucyAqLwogfSBHSVNU U2Nhbk9wYXF1ZURhdGE7CiAKIHR5cGVkZWYgR0lTVFNjYW5PcGFxdWVEYXRhICpHSVNUU2Nhbk9w YXF1ZTsKQEAgLTQ0OCw2ICs0ODAsOSBAQCBleHRlcm4gWExvZ1JlY1B0ciBnaXN0WExvZ1VwZGF0 ZShCdWZmZXIgYnVmZmVyLAogCQkJCQkJCQkgSW5kZXhUdXBsZSAqaXR1cCwgaW50IGl0dXBsZW4s CiAJCQkJCQkJCSBCdWZmZXIgbGVmdGNoaWxkYnVmKTsKIAorZXh0ZXJuIFhMb2dSZWNQdHIgZ2lz dFhMb2dWYWN1dW0oQnVmZmVyIGJ1ZmZlciwKKwkJCQkJCQkJIE9mZnNldE51bWJlciAqdG9kZWxl dGUsIGludCBudG9kZWxldGUpOworCiBleHRlcm4gWExvZ1JlY1B0ciBnaXN0WExvZ0RlbGV0ZShC dWZmZXIgYnVmZmVyLCBPZmZzZXROdW1iZXIgKnRvZGVsZXRlLAogCQkJCQkJCQkgaW50IG50b2Rl bGV0ZSwgVHJhbnNhY3Rpb25JZCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbiwKIAkJCQkJCQkJIFJl bGF0aW9uIGhlYXByZWwpOwpAQCAtNDU4LDcgKzQ5MywxMSBAQCBleHRlcm4gWExvZ1JlY1B0ciBn aXN0WExvZ1NwbGl0KGJvb2wgcGFnZV9pc19sZWFmLAogCQkJCQkJCQlCdWZmZXIgbGVmdGNoaWxk YnVmLCBib29sIG1hcmtmb2xsb3dyaWdodCk7CiAKIC8qIGdpc3RnZXQuYyAqLwotZXh0ZXJuIGJv b2wgZ2lzdGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwor ZXh0ZXJuIHZvaWQgZ2lzdGtpbGxpdGVtc2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhT Y2FuQmF0Y2ggYmF0Y2gpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIGdpc3RnZXRiYXRjaChJbmRl eFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsCisJCQkJCQkJCSAgIFNj YW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiB2b2lkIGdpc3R1bmd1YXJkYmF0Y2goSW5kZXhTY2Fu RGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CitleHRlcm4gdm9pZCBnaXN0Z2V0dHJh bnNmb3JtKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIGludCBpdGVt KTsKIGV4dGVybiBpbnQ2NCBnaXN0Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0 bWFwICp0Ym0pOwogZXh0ZXJuIGJvb2wgZ2lzdGNhbnJldHVybihSZWxhdGlvbiBpbmRleCwgaW50 IGF0dG5vKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3R4bG9nLmggYi9z cmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdHhsb2cuaAppbmRleCAxYzJjZjZlODEuLjg2ZTVlMWY4NiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3R4bG9nLmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL2dpc3R4bG9nLmgKQEAgLTE4LDE3ICsxOCwyNCBAQAogI2luY2x1ZGUgImxpYi9z dHJpbmdpbmZvLmgiCiAKICNkZWZpbmUgWExPR19HSVNUX1BBR0VfVVBEQVRFCQkweDAwCi0jZGVm aW5lIFhMT0dfR0lTVF9ERUxFVEUJCQkweDEwCS8qIGRlbGV0ZSBsZWFmIGluZGV4IHR1cGxlcyBm b3IgYQotCQkJCQkJCQkJCQkgKiBwYWdlICovCisjZGVmaW5lIFhMT0dfR0lTVF9ERUxFVEUJCQkw eDEwCS8qIGRlbGV0ZSBsZWFmIGluZGV4IHR1cGxlcyBtYXJrZWQKKwkJCQkJCQkJCQkJICogYXMg TFBfREVBRCBkdXJpbmcgbm9ybWFsIGluZGV4CisJCQkJCQkJCQkJCSAqIHR1cGxlIGluc2VydGlv biAqLwogI2RlZmluZSBYTE9HX0dJU1RfUEFHRV9SRVVTRQkJMHgyMAkvKiBvbGQgcGFnZSBpcyBh Ym91dCB0byBiZSByZXVzZWQKIAkJCQkJCQkJCQkJICogZnJvbSBGU00gKi8KICNkZWZpbmUgWExP R19HSVNUX1BBR0VfU1BMSVQJCTB4MzAKLSAvKiAjZGVmaW5lIFhMT0dfR0lTVF9JTlNFUlRfQ09N UExFVEUJIDB4NDAgKi8JLyogbm90IHVzZWQgYW55bW9yZSAqLworI2RlZmluZSBYTE9HX0dJU1Rf UEFHRV9WQUNVVU0JCTB4NDAJLyogZGVsZXRlIGxlYWYgaW5kZXggdHVwbGVzIGR1cmluZworCQkJ CQkJCQkJCQkgKiBWQUNVVU0gKi8KICAvKiAjZGVmaW5lIFhMT0dfR0lTVF9DUkVBVEVfSU5ERVgJ CSAweDUwICovCS8qIG5vdCB1c2VkIGFueW1vcmUgKi8KICNkZWZpbmUgWExPR19HSVNUX1BBR0Vf REVMRVRFCQkweDYwCiAgLyogI2RlZmluZSBYTE9HX0dJU1RfQVNTSUdOX0xTTgkJIDB4NzAgKi8J Lyogbm90IHVzZWQgYW55bW9yZSAqLwogCiAvKgorICogVXNlZCBieSBib3RoIFhMT0dfR0lTVF9Q QUdFX1VQREFURSBhbmQgWExPR19HSVNUX1BBR0VfVkFDVVVNLiAgVkFDVVVNIG9ubHkKKyAqIGV2 ZXIgZGVsZXRlcyB0dXBsZXMgKG50b2luc2VydCBpcyAwLCBhbmQgdGhlcmUgaXMgbm8gbGVmdCBj aGlsZCksIGJ1dCB0aGUKKyAqIHBhZ2UtbGV2ZWwgY2hhbmdlcyBhcmUgb3RoZXJ3aXNlIHRoZSBz YW1lOyB0aGUgcmVjb3JkcyBkaWZmZXIgb25seSBpbiB0aGF0CisgKiByZXBsYXlpbmcgYSBWQUNV VU0gcmVjb3JkIHRha2VzIGEgY2xlYW51cCBsb2NrIG9uIHRoZSB0YXJnZXQgcGFnZS4KKyAqCiAg KiBCYWNrdXAgQmxrIDA6IHVwZGF0ZWQgcGFnZS4KICAqIEJhY2t1cCBCbGsgMTogSWYgdGhpcyBv cGVyYXRpb24gY29tcGxldGVzIGEgcGFnZSBzcGxpdCwgYnkgaW5zZXJ0aW5nIGEKICAqCQkJCSBk b3dubGluayBmb3IgdGhlIHNwbGl0IHBhZ2UsIHRoZSBsZWZ0IGhhbGYgb2YgdGhlIHNwbGl0CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oIGIvc3JjL2luY2x1ZGUv YWNjZXNzL2luZGV4YmF0Y2guaAppbmRleCA5NDcxYTlkYjUuLjI0YjUzMTcwNSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3MvaW5kZXhiYXRjaC5oCkBAIC0xMDEsNiArMTAxLDggQEAgaW5kZXhfc2Nhbl9iYXRjaF9hcHBl bmQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKICAqCiAgKiAgIFt0 YWJsZSBBTSBvcGFxdWUgYXJlYV0gICAgPC0gdGFibGUgQU0gYXJlYSAoYmF0Y2hfdGFibGVfb3Bh cXVlX3NpemUpLAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsbHkg cmVxdWVzdGVkIGJ5IHRhYmxlIEFNCisgKiAgIFtpbmRleCBBTSBkeW4gb3BhcXVlXSAgICAgPC0g aW5kZXggQU0gYXJlYSAoYmF0Y2hfaW5kZXhfb3BhcXVlX2R5biksCisgKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgb3B0aW9uYWxseSByZXF1ZXN0ZWQgYnkgaW5kZXggQU0KICAqICAg W2luZGV4IEFNIHN0YXRpYyBvcGFxdWVdICA8LSBpbmRleCBBTSBhcmVhIChiYXRjaF9pbmRleF9v cGFxdWVfc3RhdGljKSwKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5kYXRv cnkgZml4ZWQtc2l6ZSBpbmRleCBBTSBhcmVhCiAgKiAgIFtJbmRleFNjYW5CYXRjaERhdGFdICAg ICAgPC0gYmF0Y2ggcG9pbnRlciwgcmV0dXJuZWQgYnkgYW1nZXRiYXRjaApAQCAtMTI5LDYgKzEz MSwxNyBAQCBpbmRleF9zY2FuX2JhdGNoX2FwcGVuZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4 U2NhbkJhdGNoIGJhdGNoKQogICogYXJlYS4gIEFjY2VzcyB0byB0aGUgYXJlYSBpcyBjaGVhcCAo YSBjb21waWxlLXRpbWUtY29uc3RhbnQgc3VidHJhY3Rpb24pLAogICogYnV0IGl0cyBzaXplIGNh bm5vdCB2YXJ5IGZyb20gc2NhbiB0byBzY2FuLiAgSW5kZXggQU1zIHR5cGljYWxseSB1c2UgdGhp cwogICogYXJlYSB0byBzdG9yZSB0aGluZ3MgbGlrZSBpbmRleCBwYWdlIHNpYmxpbmcgbGluayBi bG9jayBudW1iZXJzLgorICoKKyAqIEluZGV4IEFNcyBjYW4gdXNlIGEgc2Vjb25kLCBvcHRpb25h bCBkeW5hbWljYWxseS1zaXplZCBwcml2YXRlIGFyZWEKKyAqIChiYXRjaF9pbmRleF9vcGFxdWVf ZHluKSB0aGF0IHNpdHMganVzdCBiZWZvcmUgdGhlIHN0YXRpYyBhcmVhLiAgSXRzIHNpemUKKyAq IGlzIGNob3NlbiBhdCBzY2FuIHN0YXJ0IHJhdGhlciB0aGFuIGF0IGNvbXBpbGUgdGltZS4gIEl0 IGlzIGFjY2Vzc2VkIHZpYQorICogaW5kZXhfc2Nhbl9iYXRjaF9pbmRleF9vcGFxdWVfZHluLiAg VGhpcyBzZWNvbmQgYXJlYSBpcyBnZW5lcmFsbHkgb25seSB1c2VkCisgKiBkdXJpbmcgc2NhbnMg d2hlcmUgbGFyZ2UgYW1vdW50cyBvZiBzdXBwbGVtZW50YWwgbWV0YWRhdGEgYXJlIHJlcXVpcmVk LAorICogdGhhdCBjYW5ub3QgcmVhc29uYWJseSBiZSBhbGxvY2F0ZWQgZm9yIGV2ZXJ5IHNjYW4u ICBUeXBpY2FsbHksIHRoaXMgaXMKKyAqIGdyYW51bGFyIGluZm9ybWF0aW9uIGFib3V0IHRoZSBi YXRjaCdzIGl0ZW1zIGZvciB1c2UgYnkgdGhlIGluZGV4IEFNJ3MKKyAqIGFtZ2V0dHJhbnNmb3Jt IHJvdXRpbmUgKHRoZSB0dXBsZXMgdGhlbXNlbHZlcyBhcmUgc3RvcmVkIHNlcGFyYXRlbHksIGlu CisgKiBvbi1kaXNrIGZvcm1hdCwgaW4gdGhlIGN1cnJUdXBsZXMgd29ya3NwYWNlOyBhbWdldHRy YW5zZm9ybSBjb252ZXJ0cyBlYWNoCisgKiBvbmUgaW50byB0aGUgc2NhbidzIHJldHVybmFibGUg dHVwbGUpLgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTE2NSw2ICsxNzgsMTgg QEAgaW5kZXhfc2Nhbl9iYXRjaF90YWJsZV9hcmVhKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhT Y2FuQmF0Y2ggYmF0Y2gpCiAJKEFzc2VydE1hY3JvKChzY2FuKS0+YmF0Y2hfaW5kZXhfb3BhcXVl X3N0YXRpYyA9PSBNQVhBTElHTihzaXplb2YodHlwZSkpKSwgXAogCSAoKHR5cGUgKikgKChjaGFy ICopIChiYXRjaCkgLSBNQVhBTElHTihzaXplb2YodHlwZSkpKSkpCiAKKy8qCisgKiBSZXR1cm4g YSBwb2ludGVyIHRvIHRoZSBpbmRleCBBTSdzIGR5bmFtaWMgb3BhcXVlIGFyZWEKKyAqLworc3Rh dGljIGlubGluZSB2b2lkICoKK2luZGV4X3NjYW5fYmF0Y2hfaW5kZXhfb3BhcXVlX2R5bihJbmRl eFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCUFzc2VydChzY2FuLT5i YXRjaF9pbmRleF9vcGFxdWVfZHluID4gMCk7CisKKwlyZXR1cm4gKGNoYXIgKikgYmF0Y2ggLSBz Y2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc3RhdGljIC0KKwkJTUFYQUxJR04oc2Nhbi0+YmF0Y2hf aW5kZXhfb3BhcXVlX2R5bik7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEVsZW1l bnRhcnkgYmF0Y2ggcG9zaXRpb24gb3BlcmF0aW9ucwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9yZWxzY2FuLmgKaW5kZXggZjJmNjZlMzY3Li4zYTFlNjE2ZDMgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNj YW4uaApAQCAtMzc3LDYgKzM3NywxMSBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0 YQogCSAqLwogCXVpbnQzMgkJYmF0Y2hfdGFibGVfb3BhcXVlX3NpemU7CS8qIHRhYmxlIEFNIG9w YXF1ZSBhcmVhIHNpemUgKi8KIAorCS8qCisJICogT3B0aW9uYWwgZHluYW1pYyBvcGFxdWUgc2l6 ZSwgYWxzbyBzZXQgYnkgaW5kZXggQU0gaW4gYW1iZWdpbnNjYW4KKwkgKi8KKwl1aW50MzIJCWJh dGNoX2luZGV4X29wYXF1ZV9keW47CisKIAkvKgogCSAqIE9mZnNldCB1c2VkIGJ5IGluZGV4X3Nj YW5fYmF0Y2hfYmFzZSAoc2V0IG9uIGZpcnN0IGJhdGNoIGFsbG9jKS4gIFNlZQogCSAqIGFjY2Vz cy9pbmRleGJhdGNoLmguCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmlu LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKaW5kZXggMmQ5ZDA0YWEzLi40Nzk5 YTQwYjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKQEAgLTMwMiw2ICszMDIsNyBAQCBicmluaGFu ZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1nZXRiYXRjaCA9IE5VTEwsCiAJCS5hbXVuZ3Vh cmRiYXRjaCA9IE5VTEwsCiAJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKKwkJLmFtZ2V0dHJh bnNmb3JtID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gYnJpbmdldGJpdG1hcCwKIAkJLmFtZW5k c2NhbiA9IGJyaW5lbmRzY2FuLAogCQkuYW1wb3NyZXNldCA9IE5VTEwsCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4v Z2ludXRpbC5jCmluZGV4IDBlOGI2YTU0OS4uY2ViOWNiNDQ3IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dp bnV0aWwuYwpAQCAtODcsNiArODcsNyBAQCBnaW5oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ CS5hbWdldGJhdGNoID0gTlVMTCwKIAkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKIAkJLmFta2ls bGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW1nZXR0cmFuc2Zvcm0gPSBOVUxMLAogCQkuYW1nZXRi aXRtYXAgPSBnaW5nZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBnaW5lbmRzY2FuLAogCQkuYW1w b3NyZXNldCA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9SRUFE TUUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9SRUFETUUKaW5kZXggNzU0NDViMDc0Li44ODY0 YTNmYWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L1JFQURNRQorKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9SRUFETUUKQEAgLTQ4LDcgKzQ4LDcgQEAgVGhlIG9yaWdp bmFsIGFsZ29yaXRobXMgd2VyZSBtb2RpZmllZCBpbiBzZXZlcmFsIHdheXM6CiAKICogVGhleSBo YWQgdG8gYmUgYWRhcHRlZCB0byBQb3N0Z3JlU1FMIGNvbnZlbnRpb25zLiBGb3IgZXhhbXBsZSwg dGhlIFNFQVJDSAogICBhbGdvcml0aG0gd2FzIGNvbnNpZGVyYWJseSBjaGFuZ2VkLCBiZWNhdXNl IGluIFBvc3RncmVTUUwgdGhlIHNlYXJjaCBmdW5jdGlvbgotICBzaG91bGQgcmV0dXJuIG9uZSB0 dXBsZSAobmV4dCksIG5vdCBhbGwgdHVwbGVzIGF0IG9uY2UuIEFsc28sIGl0IHNob3VsZAorICBy ZXR1cm5zIG1hdGNoaW5nIHR1cGxlcyBpbmNyZW1lbnRhbGx5LCBub3QgYWxsIGF0IG9uY2UuIEFs c28sIGl0IHNob3VsZAogICByZWxlYXNlIHBhZ2UgbG9ja3MgYmV0d2VlbiBjYWxscy4KICogU2lu Y2Ugd2UgYWRkZWQgc3VwcG9ydCBmb3IgdmFyaWFibGUgbGVuZ3RoIGtleXMsIGl0J3Mgbm90IHBv c3NpYmxlIHRvCiAgIGd1YXJhbnRlZSBlbm91Z2ggZnJlZSBzcGFjZSBmb3IgYWxsIGtleXMgb24g cGFnZXMgYWZ0ZXIgc3BsaXR0aW5nLiBVc2VyCkBAIC03MSwyMCArNzEsMjQgQEAgd2FzIG5vdCB0 b3VjaGVkIGluIHRoZSBwYXBlci4KIFNlYXJjaCBBbGdvcml0aG0KIC0tLS0tLS0tLS0tLS0tLS0K IAotVGhlIHNlYXJjaCBjb2RlIG1haW50YWlucyBhIHF1ZXVlIG9mIHVudmlzaXRlZCBpdGVtcywg d2hlcmUgYW4gIml0ZW0iIGlzCi1laXRoZXIgYSBoZWFwIHR1cGxlIGtub3duIHRvIHNhdGlzZnkg dGhlIHNlYXJjaCBjb25kaXRpb25zLCBvciBhbiBpbmRleAotcGFnZSB0aGF0IGlzIGNvbnNpc3Rl bnQgd2l0aCB0aGUgc2VhcmNoIGNvbmRpdGlvbnMgYWNjb3JkaW5nIHRvIGluc3BlY3Rpb24KLW9m IGl0cyBwYXJlbnQgcGFnZSdzIGRvd25saW5rIGl0ZW0uICBJbml0aWFsbHkgdGhlIHJvb3QgcGFn ZSBpcyBzZWFyY2hlZAotdG8gZmluZCB1bnZpc2l0ZWQgaXRlbXMgaW4gaXQuICBUaGVuIHdlIHB1 bGwgaXRlbXMgZnJvbSB0aGUgcXVldWUuICBBCi1oZWFwIHR1cGxlIHBvaW50ZXIgaXMganVzdCBy ZXR1cm5lZCBpbW1lZGlhdGVseTsgYW4gaW5kZXggcGFnZSBlbnRyeQotY2F1c2VzIHRoYXQgcGFn ZSB0byBiZSBzZWFyY2hlZCwgZ2VuZXJhdGluZyBtb3JlIHF1ZXVlIGVudHJpZXMuCitUaGUgc2Vh cmNoIGNvZGUgbWFpbnRhaW5zIGEgcXVldWUgb2YgdW52aXNpdGVkIGl0ZW1zLiAgRm9yIGEgcGxh aW4gaW5kZXgKK3NjYW4gYW4gIml0ZW0iIGlzIGFsd2F5cyBhbiBpbmRleCBwYWdlIHRoYXQgaXMg Y29uc2lzdGVudCB3aXRoIHRoZSBzZWFyY2gKK2NvbmRpdGlvbnMgYWNjb3JkaW5nIHRvIGluc3Bl Y3Rpb24gb2YgaXRzIHBhcmVudCBwYWdlJ3MgZG93bmxpbmsgaXRlbTsKK21hdGNoaW5nIGhlYXAg dHVwbGVzIGFyZSBub3QgcXVldWVkLCBidXQgYXJlIGdhdGhlcmVkIGludG8gYSBiYXRjaCBhcyBl YWNoCitsZWFmIHBhZ2UgaXMgc2Nhbm5lZCAoc2VlICJSZXR1cm5pbmcgbWF0Y2hlcyBpbiBiYXRj aGVzIiwgYmVsb3cpLiAgRm9yIGEKK25lYXJlc3QtbmVpZ2hib3IgKG9yZGVyZWQpIHNjYW4gdGhl IHF1ZXVlIGFkZGl0aW9uYWxseSBob2xkcyBoZWFwIHR1cGxlcwora25vd24gdG8gc2F0aXNmeSB0 aGUgc2VhcmNoIGNvbmRpdGlvbnMsIHNvIHRoYXQgaGVhcCB0dXBsZXMgYW5kIGluZGV4CitwYWdl cyBjYW4gYmUgaW50ZXJsZWF2ZWQgaW4gZGlzdGFuY2Ugb3JkZXIuICBJbml0aWFsbHkgdGhlIHJv b3QgcGFnZSBpcworYWRkZWQgdG8gdGhlIHF1ZXVlLiAgVGhlbiB3ZSBwdWxsIGl0ZW1zIGZyb20g dGhlIHF1ZXVlOiBhbiBpbmRleCBwYWdlCitlbnRyeSBjYXVzZXMgdGhhdCBwYWdlIHRvIGJlIHNj YW5uZWQsIGdlbmVyYXRpbmcgbW9yZSBxdWV1ZSBlbnRyaWVzLCB3aGlsZQorYSBoZWFwIHR1cGxl IGVudHJ5IChvcmRlcmVkIHNjYW5zIG9ubHkpIGlzIGEgbWF0Y2ggdG8gYmUgcmV0dXJuZWQuCiAK LVRoZSBxdWV1ZSBpcyBrZXB0IG9yZGVyZWQgd2l0aCBoZWFwIHR1cGxlIGl0ZW1zIGF0IHRoZSBm cm9udCwgdGhlbgotaW5kZXggcGFnZSBlbnRyaWVzLCB3aXRoIGFueSBuZXdseS1hZGRlZCBpbmRl eCBwYWdlIGVudHJ5IGluc2VydGVkCi1iZWZvcmUgZXhpc3RpbmcgaW5kZXggcGFnZSBlbnRyaWVz LiAgVGhpcyBlbnN1cmVzIGRlcHRoLWZpcnN0IHRyYXZlcnNhbAotb2YgdGhlIGluZGV4LCBhbmQg aW4gcGFydGljdWxhciBjYXVzZXMgdGhlIGZpcnN0IGZldyBoZWFwIHR1cGxlcyB0byBiZQotcmV0 dXJuZWQgYXMgc29vbiBhcyBwb3NzaWJsZS4gIFRoYXQgaXMgaGVscGZ1bCBpbiBjYXNlIHRoZXJl IGlzIGEgTElNSVQKLXRoYXQgcmVxdWlyZXMgb25seSBhIGZldyB0dXBsZXMgdG8gYmUgcHJvZHVj ZWQuCitUaGUgcXVldWUgaXMga2VwdCBvcmRlcmVkIHNvIHRoYXQgd2UgcGVyZm9ybSBhIGRlcHRo LWZpcnN0IHRyYXZlcnNhbCBvZgordGhlIGluZGV4OiBhbnkgbmV3bHktYWRkZWQgaW5kZXggcGFn ZSBlbnRyeSBpcyBpbnNlcnRlZCBiZWZvcmUgZXhpc3RpbmcKK2luZGV4IHBhZ2UgZW50cmllcywg YW5kIChmb3Igb3JkZXJlZCBzY2FucykgaGVhcCB0dXBsZSBpdGVtcyBhcmUga2VwdCBhdAordGhl IGZyb250LiAgVGhpcyBjYXVzZXMgdGhlIGZpcnN0IGZldyBtYXRjaGluZyBoZWFwIHR1cGxlcyB0 byBiZSByZXR1cm5lZAorYXMgc29vbiBhcyBwb3NzaWJsZSwgd2hpY2ggaXMgaGVscGZ1bCBpbiBj YXNlIHRoZXJlIGlzIGEgTElNSVQgdGhhdAorcmVxdWlyZXMgb25seSBhIGZldyB0dXBsZXMgdG8g YmUgcHJvZHVjZWQuCiAKIFRvIGltcGxlbWVudCBuZWFyZXN0LW5laWdoYm9yIHNlYXJjaCwgdGhl IHF1ZXVlIGVudHJpZXMgYXJlIGF1Z21lbnRlZAogd2l0aCBkaXN0YW5jZSBkYXRhOiBoZWFwIHR1 cGxlIGVudHJpZXMgYXJlIGxhYmVsZWQgd2l0aCBleGFjdCBkaXN0YW5jZQpAQCAtOTQsMTcgKzk4 LDE4IEBAIHF1ZXVlIGVudHJpZXMgYXJlIHJldHJpZXZlZCBpbiBzbWFsbGVzdC1kaXN0YW5jZS1m aXJzdCBvcmRlciwgd2l0aAogZW50cmllcyBoYXZpbmcgaWRlbnRpY2FsIGRpc3RhbmNlcyBtYW5h Z2VkIGFzIHN0YXRlZCBpbiB0aGUgcHJldmlvdXMKIHBhcmFncmFwaC4KIAotVGhlIHNlYXJjaCBh bGdvcml0aG0ga2VlcHMgYW4gaW5kZXggcGFnZSBsb2NrZWQgb25seSBsb25nIGVub3VnaCB0byBz Y2FuCi1pdHMgZW50cmllcyBhbmQgcXVldWUgdGhvc2UgdGhhdCBzYXRpc2Z5IHRoZSBzZWFyY2gg Y29uZGl0aW9ucy4gIFNpbmNlCi1pbnNlcnRpb25zIGNhbiBvY2N1ciBjb25jdXJyZW50bHkgd2l0 aCBzZWFyY2hlcywgaXQgaXMgcG9zc2libGUgZm9yIGFuCi1pbmRleCBjaGlsZCBwYWdlIHRvIGJl IHNwbGl0IGJldHdlZW4gdGhlIHRpbWUgd2UgbWFrZSBhIHF1ZXVlIGVudHJ5IGZvciBpdAotKHdo aWxlIHZpc2l0aW5nIGl0cyBwYXJlbnQgcGFnZSkgYW5kIHRoZSB0aW1lIHdlIGFjdHVhbGx5IHJl YWNoIGFuZCBzY2FuCi10aGUgY2hpbGQgcGFnZS4gIFRvIGF2b2lkIG1pc3NpbmcgdGhlIGVudHJp ZXMgdGhhdCB3ZXJlIG1vdmVkIHRvIHRoZSByaWdodAotc2libGluZywgd2UgZGV0ZWN0IHdoZXRo ZXIgYSBzcGxpdCBoYXMgb2NjdXJyZWQgYnkgY29tcGFyaW5nIHRoZSBjaGlsZAotcGFnZSdzIE5T TiAobm9kZSBzZXF1ZW5jZSBudW1iZXIsIGEgc3BlY2lhbC1wdXJwb3NlIExTTikgdG8gdGhlIExT TiB0aGF0Ci10aGUgcGFyZW50IGhhZCB3aGVuIHZpc2l0ZWQuICBJZiBpdCBkaWQsIHRoZSBzaWJs aW5nIHBhZ2UgaXMgaW1tZWRpYXRlbHkKLWFkZGVkIHRvIHRoZSBmcm9udCBvZiB0aGUgcXVldWUs IGVuc3VyaW5nIHRoYXQgaXRzIGl0ZW1zIHdpbGwgYmUgc2Nhbm5lZAotaW4gdGhlIHNhbWUgb3Jk ZXIgYXMgaWYgdGhleSB3ZXJlIHN0aWxsIG9uIHRoZSBvcmlnaW5hbCBjaGlsZCBwYWdlLgorVGhl IHNlYXJjaCBhbGdvcml0aG0ga2VlcHMgYW4gaW5kZXggcGFnZSBsb2NrZWQgb25seSBsb25nIGVu b3VnaCB0byBzY2FuIGl0cworZW50cmllcyAtLSBxdWV1ZWluZyB0aGUgY2hpbGQgcGFnZXMgdGhh dCBzYXRpc2Z5IHRoZSBzZWFyY2ggY29uZGl0aW9ucywgYW5kCitnYXRoZXJpbmcgYW55IG1hdGNo aW5nIGhlYXAgdHVwbGVzIChpbnRvIGEgYmF0Y2gsIG9yIG9udG8gdGhlIHF1ZXVlIGZvciBhbgor b3JkZXJlZCBzY2FuKS4gIFNpbmNlIGluc2VydGlvbnMgY2FuIG9jY3VyIGNvbmN1cnJlbnRseSB3 aXRoIHNlYXJjaGVzLCBpdCBpcworcG9zc2libGUgZm9yIGFuIGluZGV4IGNoaWxkIHBhZ2UgdG8g YmUgc3BsaXQgYmV0d2VlbiB0aGUgdGltZSB3ZSBtYWtlIGEgcXVldWUKK2VudHJ5IGZvciBpdCAo d2hpbGUgdmlzaXRpbmcgaXRzIHBhcmVudCBwYWdlKSBhbmQgdGhlIHRpbWUgd2UgYWN0dWFsbHkg cmVhY2gKK2FuZCBzY2FuIHRoZSBjaGlsZCBwYWdlLiAgVG8gYXZvaWQgbWlzc2luZyB0aGUgZW50 cmllcyB0aGF0IHdlcmUgbW92ZWQgdG8gdGhlCityaWdodCBzaWJsaW5nLCB3ZSBkZXRlY3Qgd2hl dGhlciBhIHNwbGl0IGhhcyBvY2N1cnJlZCBieSBjb21wYXJpbmcgdGhlIGNoaWxkCitwYWdlJ3Mg TlNOIChub2RlIHNlcXVlbmNlIG51bWJlciwgYSBzcGVjaWFsLXB1cnBvc2UgTFNOKSB0byB0aGUg TFNOIHRoYXQgdGhlCitwYXJlbnQgaGFkIHdoZW4gdmlzaXRlZC4gIElmIGl0IGRpZCwgdGhlIHNp YmxpbmcgcGFnZSBpcyBpbW1lZGlhdGVseSBhZGRlZCB0bwordGhlIGZyb250IG9mIHRoZSBxdWV1 ZSwgZW5zdXJpbmcgdGhhdCBpdHMgaXRlbXMgd2lsbCBiZSBzY2FubmVkIGluIHRoZSBzYW1lCitv cmRlciBhcyBpZiB0aGV5IHdlcmUgc3RpbGwgb24gdGhlIG9yaWdpbmFsIGNoaWxkIHBhZ2UuCiAK IEFzIGlzIHVzdWFsIGluIFBvc3RncmVzLCB0aGUgc2VhcmNoIGFsZ29yaXRobSBvbmx5IGd1YXJh bnRlZXMgdG8gZmluZCBpbmRleAogZW50cmllcyB0aGF0IGV4aXN0ZWQgYmVmb3JlIHRoZSBzY2Fu IHN0YXJ0ZWQ7IGluZGV4IGVudHJpZXMgYWRkZWQgZHVyaW5nCkBAIC0xMTYsNiArMTIxLDM2IEBA IEFueSBzdWNoIGVubGFyZ2VtZW50IHdvdWxkIGJlIHRvIGFkZCBjaGlsZCBpdGVtcyB0aGF0IHdl IGFyZW4ndCBpbnRlcmVzdGVkCiBpbiByZXR1cm5pbmcgYW55d2F5LgogCiAKK1JldHVybmluZyBt YXRjaGVzIGluIGJhdGNoZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR2lTVCBp bXBsZW1lbnRzIHRoZSBhbWdldGJhdGNoIGluZGV4IEFNIGludGVyZmFjZSwgd2hvc2UgY29udHJh Y3QgaXMKK2RvY3VtZW50ZWQgaW4gZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCAoc2VlIGFsc28K K3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FKS4gIEVhY2ggY2FsbCBoYW5kcyB0aGUg dGFibGUgQU0gYSBiYXRjaCBvZgorbWF0Y2hpbmcgVElEcyByYXRoZXIgdGhhbiBhIHNpbmdsZSBU SUQuICBHaVNUIGZvcm1zIHR3byBraW5kcyBvZiBiYXRjaDoKKworKiBBIHBsYWluIChub24tb3Jk ZXJlZCkgc2NhbiByZXR1cm5zIG9uZSAiY29udmVudGlvbmFsIiBiYXRjaCBwZXIgbGVhZgorICBw YWdlLCBob2xkaW5nIGFsbCBvZiB0aGF0IHBhZ2UncyBtYXRjaGluZyBUSURzIGluIHBoeXNpY2Fs IG9yZGVyLiAgQXMgaW4KKyAgbmJ0cmVlIGFuZCBoYXNoLCB0aGUgYmF0Y2ggcmV0YWlucyB0aGUg bGVhZiBwYWdlJ3MgYnVmZmVyIHBpbiAodGhvdWdoIG5vdAorICBpdHMgY29udGVudCBsb2NrKSBh cyB0aGUgaW50ZXJsb2NrIGFnYWluc3QgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5CisgIFZB Q1VVTS4KKworKiBBIG5lYXJlc3QtbmVpZ2hib3IgKG9yZGVyZWQpIHNjYW4gcmV0dXJucyBhIHNp bmdsZSAidmlydHVhbCIgYmF0Y2guICBJdHMKKyAgbWF0Y2hlcyBkb24ndCBhcnJpdmUgb25lIGxl YWYgcGFnZSBhdCBhIHRpbWUsIHNvIGluc3RlYWQgd2UgZHJhaW4gdGhlCisgIGRpc3RhbmNlLW9y ZGVyZWQgcXVldWUsIGNvcHlpbmcgbWF0Y2hpbmcgVElEcyBpbnRvIHRoZSBiYXRjaCBpbiBkaXN0 YW5jZQorICBvcmRlciAtLSB0eXBpY2FsbHkgc3Bhbm5pbmcgbWFueSBsZWFmIHBhZ2VzLiAgQSB2 aXJ0dWFsIGJhdGNoIHJldGFpbnMgbm8KKyAgYnVmZmVyIHBpbjsgZWFjaCBsZWFmIHBhZ2UncyBw aW4gaXMgZHJvcHBlZCBhcyBzb29uIGFzIHRoZSBwYWdlIGlzIHNjYW5uZWQuCisKK1ZBQ1VVTSBo b25vcnMgYSBiYXRjaCdzIHBpbiBieSB0YWtpbmcgYSBjbGVhbnVwIGxvY2sgb24gdGhlIGxlYWYg cGFnZSAoc2VlCisiQnVsayBkZWxldGUgYWxnb3JpdGhtIChWQUNVVU0pIiwgYmVsb3cpLCBqdXN0 IGFzIG5idHJlZSBkb2VzLiAgQmVjYXVzZSBhCit2aXJ0dWFsIGJhdGNoIGhvbGRzIG5vIHN1Y2gg cGluLCBvcmRlcmVkIHNjYW5zIGNvbWUgd2l0aCB0d28gcmVzdHJpY3Rpb25zLAorYm90aCBhbHNv IHNlZW4gaW4gYml0bWFwIChhbWdldGJpdG1hcCkgc2NhbnMgYW5kIGJvdGggZXhwbGFpbmVkIGlu Citkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sOiB0aGV5IG5ldmVyIHNldCBMUF9ERUFEIGJpdHMg KGdpc3RraWxsaXRlbXNiYXRjaAorZG9lcyBub3RoaW5nIGZvciBhIHZpcnR1YWwgYmF0Y2gpLCBh bmQgdGhleSBhcmUgbmV2ZXIgcGxhbm5lZCBhcyBpbmRleC1vbmx5CitzY2FucyAoYSB2aXJ0dWFs IGJhdGNoIGhhcyBubyBwaW4gdG8gb2ZmZXIgYXMgdGhlIFRJRC1yZWN5Y2xpbmcgaW50ZXJsb2Nr Cit0aGF0IGluZGV4LW9ubHkgc2NhbnMgZGVwZW5kIG9uKS4KKworCiBJbnNlcnQgQWxnb3JpdGht CiAtLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTQ1Miw2ICs0ODcsMTUgQEAgQi10cmVlIFZBQ1VVTSB1 c2VzLCBidXQgYmVjYXVzZSB3ZSBhbHJlYWR5IGhhdmUgTlNOcyBvbiBwYWdlcywgdG8gZGV0ZWN0 IHBhZ2UKIHNwbGl0cyBkdXJpbmcgc2VhcmNoZXMsIHdlIGRvbid0IG5lZWQgYSAidmFjdXVtIGN5 Y2xlIElEIiBjb25jZXB0IGZvciB0aGF0CiBsaWtlIEItdHJlZSBkb2VzLgogCitXZSB0YWtlIGEg ZnVsbCBjbGVhbnVwIGxvY2sgb24gZXZlcnkgbGVhZiBwYWdlIGFzIHdlIHNjYW4gaXQsIGV2ZW4g bGVhZgorcGFnZXMgd2l0aCBubyBkZWxldGFibGUgdHVwbGVzLiAgQXMgaW4gbmJ0cmVlLCB0aGlz IGlzIHRoZSBpbnRlcmxvY2sgdGhhdAoraG9sZHMgY29uY3VycmVudCBzY2FucyBvZmYgZnJvbSBU SUQgcmVjeWNsaW5nOyBzZWUgIlJldHVybmluZyBtYXRjaGVzIGluCitiYXRjaGVzIiwgYWJvdmUu ICBSZXBsYXkgb2YgdGhlIHJlc3VsdGluZyBYTE9HX0dJU1RfUEFHRV9WQUNVVU0gcmVjb3Jkcwor dGFrZXMgdGhlIHNhbWUgY2xlYW51cCBsb2NrLCBzbyB0aGF0IHRoZSBpbnRlcmxvY2sgYWxzbyBw cm90ZWN0cyBpbmRleC1vbmx5CitzY2FucyBydW5uaW5nIG9uIGEgaG90IHN0YW5kYnkuICBSZWNv dmVyeSBvbmx5IG5lZWRzIHRoZSBjbGVhbnVwIGxvY2sgb24KK3BhZ2VzIHRoYXQgYWN0dWFsbHkg aGF2ZSBpdGVtcyB0byBkZWxldGUgKHRoZSBvbmx5IHBhZ2VzIHRoYXQgZ2VuZXJhdGUgYQorcmVj b3JkKSwgbm90IG9uIGV2ZXJ5IGxlYWYgcGFnZS4KKwogV2hpbGUgd2Ugc2NhbiBhbGwgdGhlIHBh Z2VzLCB3ZSBhbHNvIG1ha2Ugbm90ZSBvZiBhbnkgY29tcGxldGVseSBlbXB0eSBsZWFmCiBwYWdl cy4gV2Ugd2lsbCB0cnkgdG8gdW5saW5rIHRoZW0gZnJvbSB0aGUgdHJlZSBhZnRlciB0aGUgc2Nh bi4gV2UgYWxzbyByZWNvcmQKIHRoZSBibG9jayBudW1iZXJzIG9mIGFsbCBpbnRlcm5hbCBwYWdl czsgdGhleSBhcmUgbmVlZGVkIHRvIGxvY2F0ZSBwYXJlbnRzIG9mCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0 LmMKaW5kZXggNjdiMTYwNTNhLi44OGI4YTRkZGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9naXN0L2dpc3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKQEAg LTEwMywxMCArMTAzLDExIEBAIGdpc3RoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWFk anVzdG1lbWJlcnMgPSBnaXN0YWRqdXN0bWVtYmVycywKIAkJLmFtYmVnaW5zY2FuID0gZ2lzdGJl Z2luc2NhbiwKIAkJLmFtcmVzY2FuID0gZ2lzdHJlc2NhbiwKLQkJLmFtZ2V0dHVwbGUgPSBnaXN0 Z2V0dHVwbGUsCi0JCS5hbWdldGJhdGNoID0gTlVMTCwKLQkJLmFtdW5ndWFyZGJhdGNoID0gTlVM TCwKLQkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJ CS5hbWdldGJhdGNoID0gZ2lzdGdldGJhdGNoLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBnaXN0dW5n dWFyZGJhdGNoLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IGdpc3RraWxsaXRlbXNiYXRjaCwKKwkJ LmFtZ2V0dHJhbnNmb3JtID0gZ2lzdGdldHRyYW5zZm9ybSwKIAkJLmFtZ2V0Yml0bWFwID0gZ2lz dGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGdpc3RlbmRzY2FuLAogCQkuYW1wb3NyZXNldCA9 IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0Z2V0LmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0Z2V0LmMKaW5kZXggNGQ3YzEwMGQ3Li5kNmMyNjgw ODQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RnZXQuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0Z2V0LmMKQEAgLTI3LDg0ICsyNyw4NCBAQAogI2lu Y2x1ZGUgInV0aWxzL3JlbC5oIgogCiAvKgotICogZ2lzdGtpbGxpdGVtcygpIC0tIHNldCBMUF9E RUFEIHN0YXRlIGZvciBpdGVtcyBhbiBpbmRleHNjYW4gY2FsbGVyIGhhcwotICogdG9sZCB1cyB3 ZXJlIGtpbGxlZC4KLSAqCi0gKiBXZSByZS1yZWFkIHBhZ2UgaGVyZSwgc28gaXQncyBpbXBvcnRh bnQgdG8gY2hlY2sgcGFnZSBMU04uIElmIHRoZSBwYWdlCi0gKiBoYXMgYmVlbiBtb2RpZmllZCBz aW5jZSB0aGUgbGFzdCByZWFkIChhcyBkZXRlcm1pbmVkIGJ5IExTTiksIHdlIGNhbm5vdAotICog ZmxhZyBhbnkgZW50cmllcyBiZWNhdXNlIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIG9sZCBlbnRy eSB3YXMgdmFjdXVtZWQKLSAqIGF3YXkgYW5kIHRoZSBUSUQgd2FzIHJlLXVzZWQgYnkgYSBjb21w bGV0ZWx5IGRpZmZlcmVudCBoZWFwIHR1cGxlLgorICogZ2lzdGtpbGxpdGVtc2JhdGNoKCkgLS0g TWFyayBkZWFkIGl0ZW1zJyBpbmRleCB0dXBsZXMgTFBfREVBRAogICovCi1zdGF0aWMgdm9pZAot Z2lzdGtpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCit2b2lkCitnaXN0a2lsbGl0ZW1zYmF0 Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIHsKLQlHSVNUU2Nh bk9wYXF1ZSBzbyA9IChHSVNUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCUJ1ZmZlcgkJYnVm ZmVyOworCUdJU1RCYXRjaERhdGEgKmdiYXRjaCA9IEdJU1RCYXRjaEdldERhdGEoc2NhbiwgYmF0 Y2gpOworCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CisJQnVmZmVyCQlidWY7 CiAJUGFnZQkJcGFnZTsKLQlPZmZzZXROdW1iZXIgb2ZmbnVtOwotCUl0ZW1JZAkJaWlkOwotCWlu dAkJCWk7CiAJYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7CisJWExvZ1JlY1B0cglsYXRl c3Rsc247CiAKLQlBc3NlcnQoc28tPmN1ckJsa25vICE9IEludmFsaWRCbG9ja051bWJlcik7Ci0J QXNzZXJ0KFhMb2dSZWNQdHJJc1ZhbGlkKHNvLT5jdXJQYWdlTFNOKSk7Ci0JQXNzZXJ0KHNvLT5r aWxsZWRJdGVtcyAhPSBOVUxMKTsKKwlBc3NlcnQoYmF0Y2gtPm51bURlYWQgPiAwKTsKIAotCWJ1 ZmZlciA9IFJlYWRCdWZmZXIoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgc28tPmN1ckJsa25vKTsKLQlp ZiAoIUJ1ZmZlcklzVmFsaWQoYnVmZmVyKSkKKwkvKgorCSAqIFNraXAgdmlydHVhbCAob3JkZXJl ZC1zY2FuKSBiYXRjaGVzLCBzaW5jZSB0aGVyZSdzIG5vIHByYWN0aWNhbCB3YXkgdG8KKwkgKiB2 aXNpdCBhbGwgb2YgdGhlIGluZGV4IHBhZ2VzIHRoYXQgdGhlc2UgdHVwbGVzIHJlYWxseSBjYW1l IGZyb20KKwkgKi8KKwlpZiAoZ2JhdGNoLT5ibGtubyA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpCiAJ CXJldHVybjsKIAotCUxvY2tCdWZmZXIoYnVmZmVyLCBHSVNUX1NIQVJFKTsKLQlnaXN0Y2hlY2tw YWdlKHNjYW4tPmluZGV4UmVsYXRpb24sIGJ1ZmZlcik7Ci0JcGFnZSA9IEJ1ZmZlckdldFBhZ2Uo YnVmZmVyKTsKKwlidWYgPSBSZWFkQnVmZmVyKHJlbCwgZ2JhdGNoLT5ibGtubyk7CisJTG9ja0J1 ZmZlcihidWYsIEdJU1RfU0hBUkUpOworCWdpc3RjaGVja3BhZ2UocmVsLCBidWYpOworCXBhZ2Ug PSBCdWZmZXJHZXRQYWdlKGJ1Zik7CiAKLQkvKgotCSAqIElmIHBhZ2UgTFNOIGRpZmZlcnMgaXQg bWVhbnMgdGhhdCB0aGUgcGFnZSB3YXMgbW9kaWZpZWQgc2luY2UgdGhlIGxhc3QKLQkgKiByZWFk LiBraWxsZWRJdGVtcyBjb3VsZCBiZSBub3QgdmFsaWQgc28gTFBfREVBRCBoaW50cyBhcHBseWlu ZyBpcyBub3QKLQkgKiBzYWZlLgotCSAqLwotCWlmIChCdWZmZXJHZXRMU05BdG9taWMoYnVmZmVy KSAhPSBzby0+Y3VyUGFnZUxTTikKLQkJZ290byB1bmxvY2s7Ci0KLQlBc3NlcnQoR2lzdFBhZ2VJ c0xlYWYocGFnZSkpOwotCi0JLyoKLQkgKiBNYXJrIGFsbCBraWxsZWRJdGVtcyBhcyBkZWFkLiBX ZSBuZWVkIG5vIGFkZGl0aW9uYWwgcmVjaGVjaywgYmVjYXVzZSwKLQkgKiBpZiBwYWdlIHdhcyBt b2RpZmllZCwgY3VyUGFnZUxTTiBtdXN0IGhhdmUgY2hhbmdlZC4KLQkgKi8KLQlmb3IgKGkgPSAw OyBpIDwgc28tPm51bUtpbGxlZDsgaSsrKQorCWxhdGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0b21p YyhidWYpOworCUFzc2VydChiYXRjaC0+bHNuIDw9IGxhdGVzdGxzbik7CisJaWYgKGJhdGNoLT5s c24gIT0gbGF0ZXN0bHNuKQogCXsKLQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCi0JCXsKLQkJCS8q Ci0JCQkgKiBVc2UgdGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNh biB1cGRhdGUgdGhlCi0JCQkgKiBwYWdlIHdoaWxlIGp1c3QgaG9sZGluZyBhIHNoYXJlIGxvY2su IElmIHdlIGFyZSBub3QgYWxsb3dlZCwKLQkJCSAqIHRoZXJlJ3Mgbm8gcG9pbnQgY29udGludWlu Zy4KLQkJCSAqLwotCQkJaWYgKCFCdWZmZXJCZWdpblNldEhpbnRCaXRzKGJ1ZmZlcikpCi0JCQkJ Z290byB1bmxvY2s7Ci0JCX0KKwkJLyogTW9kaWZpZWQsIGdpdmUgdXAgb24gaGludGluZyAqLwor CQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1Zik7CisJCXJldHVybjsKKwl9CiAKLQkJb2ZmbnVtID0g c28tPmtpbGxlZEl0ZW1zW2ldOwotCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7 Ci0JCUl0ZW1JZE1hcmtEZWFkKGlpZCk7Ci0JCWtpbGxlZHNvbWV0aGluZyA9IHRydWU7CisJLyog SXRlcmF0ZSB0aHJvdWdoIGJhdGNoLT5kZWFkSXRlbXNbXSBpbiBpbmRleCBwYWdlIG9yZGVyICov CisJZm9yIChpbnQgaSA9IDA7IGkgPCBiYXRjaC0+bnVtRGVhZDsgaSsrKQorCXsKKwkJaW50CQkJ aXRlbUluZGV4ID0gYmF0Y2gtPmRlYWRJdGVtc1tpXTsKKwkJT2Zmc2V0TnVtYmVyIG9mZm51bSA9 IGJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmluZGV4T2Zmc2V0OworCQlJdGVtSWQJCWlpZCA9IFBh Z2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsKKworCQlBc3NlcnQoaXRlbUluZGV4ID49IGJhdGNo LT5maXJzdEl0ZW0gJiYgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0SXRlbSk7CisJCUFzc2VydChp ID09IDAgfHwKKwkJCSAgIG9mZm51bSA+IGJhdGNoLT5pdGVtc1tiYXRjaC0+ZGVhZEl0ZW1zW2kg LSAxXV0uaW5kZXhPZmZzZXQpOworCQlBc3NlcnQob2ZmbnVtIDw9IFBhZ2VHZXRNYXhPZmZzZXRO dW1iZXIocGFnZSkpOworCQlBc3NlcnQoSXRlbVBvaW50ZXJFcXVhbHMoJigoSW5kZXhUdXBsZSkg UGFnZUdldEl0ZW0ocGFnZSwgaWlkKSktPnRfdGlkLAorCQkJCQkJCQkgJmJhdGNoLT5pdGVtc1tp dGVtSW5kZXhdLnRhYmxlVGlkKSk7CisKKwkJLyogTWFyayBpbmRleCBpdGVtIGFzIGRlYWQsIGlm IGl0IGlzbid0IGFscmVhZHkgKi8KKwkJaWYgKCFJdGVtSWRJc0RlYWQoaWlkKSkKKwkJeworCQkJ aWYgKCFraWxsZWRzb21ldGhpbmcpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBVc2UgdGhlIGhpbnQg Yml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNhbiB1cGRhdGUKKwkJCQkgKiB0aGUg cGFnZSB3aGlsZSBqdXN0IGhvbGRpbmcgYSBzaGFyZSBsb2NrLiBJZiB3ZSBhcmUgbm90CisJCQkJ ICogYWxsb3dlZCwgdGhlcmUncyBubyBwb2ludCBjb250aW51aW5nLgorCQkJCSAqLworCQkJCWlm ICghQnVmZmVyQmVnaW5TZXRIaW50Qml0cyhidWYpKQorCQkJCXsKKwkJCQkJVW5sb2NrUmVsZWFz ZUJ1ZmZlcihidWYpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJfQorCisJCQlJdGVtSWRNYXJr RGVhZChpaWQpOworCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKKwkJfQogCX0KIAogCWlmIChr aWxsZWRzb21ldGhpbmcpCiAJewogCQlHaXN0TWFya1BhZ2VIYXNHYXJiYWdlKHBhZ2UpOwotCQlC dWZmZXJGaW5pc2hTZXRIaW50Qml0cyhidWZmZXIsIHRydWUsIHRydWUpOworCQlCdWZmZXJGaW5p c2hTZXRIaW50Qml0cyhidWYsIHRydWUsIHRydWUpOwogCX0KIAotdW5sb2NrOgotCVVubG9ja1Jl bGVhc2VCdWZmZXIoYnVmZmVyKTsKLQotCS8qCi0JICogQWx3YXlzIHJlc2V0IHRoZSBzY2FuIHN0 YXRlLCBzbyB3ZSBkb24ndCBsb29rIGZvciBzYW1lIGl0ZW1zIG9uIG90aGVyCi0JICogcGFnZXMu Ci0JICovCi0Jc28tPm51bUtpbGxlZCA9IDA7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWYpOwog fQogCiAvKgpAQCAtMzE4LDE2ICszMTgsMjUgQEAgZ2lzdGluZGV4X2tleXRlc3QoSW5kZXhTY2Fu RGVzYyBzY2FuLAogICogc2NhbjogaW5kZXggc2NhbiB3ZSBhcmUgZXhlY3V0aW5nCiAgKiBwYWdl SXRlbTogc2VhcmNoIHF1ZXVlIGl0ZW0gaWRlbnRpZnlpbmcgYW4gaW5kZXggcGFnZSB0byBzY2Fu CiAgKiBteURpc3RhbmNlczogZGlzdGFuY2VzIGFycmF5IGFzc29jaWF0ZWQgd2l0aCBwYWdlSXRl bSwgb3IgTlVMTCBhdCB0aGUgcm9vdAotICogdGJtOiBpZiBub3QgTlVMTCwgZ2lzdGdldGJpdG1h cCdzIG91dHB1dCBiaXRtYXAKLSAqIG50aWRzOiBpZiBub3QgTlVMTCwgZ2lzdGdldGJpdG1hcCdz IG91dHB1dCB0dXBsZSBjb3VudGVyCisgKiBuZXdiYXRjaDogY2FsbGVyJ3MgYmF0Y2ggdG8gZmls bCwgZm9yIGEgbm9uLW9yZGVyZWQgc2NhbjsgTlVMTCB3aGVuIG9yZGVyZWQKICAqCi0gKiBJZiB0 Ym0vbnRpZHMgYXJlbid0IE5VTEwsIHdlIGFyZSBkb2luZyBhbiBhbWdldGJpdG1hcCBzY2FuLCBh bmQgaGVhcAotICogdHVwbGVzIHNob3VsZCBiZSByZXBvcnRlZCBkaXJlY3RseSBpbnRvIHRoZSBi aXRtYXAuICBJZiB0aGV5IGFyZSBOVUxMLAotICogd2UncmUgZG9pbmcgYSBwbGFpbiBvciBvcmRl cmVkIGluZGV4c2Nhbi4gIEZvciBhIHBsYWluIGluZGV4c2NhbiwgaGVhcAotICogdHVwbGUgVElE cyBhcmUgcmV0dXJuZWQgaW50byBzby0+cGFnZURhdGFbXS4gIEZvciBhbiBvcmRlcmVkIGluZGV4 c2NhbiwKLSAqIGhlYXAgdHVwbGUgVElEcyBhcmUgcHVzaGVkIGludG8gaW5kaXZpZHVhbCBzZWFy Y2ggcXVldWUgaXRlbXMuICBJbiBhbgotICogaW5kZXgtb25seSBzY2FuLCByZWNvbnN0cnVjdGVk IGluZGV4IHR1cGxlcyBhcmUgcmV0dXJuZWQgYWxvbmcgd2l0aCB0aGUKLSAqIFRJRHMuCisgKiBG b3IgYSBub24tb3JkZXJlZCBzY2FuIChuZXdiYXRjaCBpc24ndCBOVUxMLCB3aGljaCBpcyB0aGUg Y2FzZSBmb3IgYm90aAorICogdW5vcmRlcmVkIGdpc3RnZXRiYXRjaCBhbmQgZ2lzdGdldGJpdG1h cCksIG1hdGNoaW5nIGl0ZW0gVElEcyBmcm9tIGEgbGVhZgorICogcGFnZSBhcmUgc3RvcmVkIGlu dG8gY2FsbGVyJ3MgbmV3YmF0Y2ggdG8gcmV0dXJuIHZpYSBnaXN0Z2V0YmF0Y2guICBJZiB3ZQor ICogZG9uJ3Qgc2F2ZSBhbnkgaXRlbXMgaW4gbmV3YmF0Y2gsIGNhbGxlciBuZWVkcyB0byBmaW5k IHRoZSBuZXh0IGxlYWYgcGFnZQorICogdGhhdCBoYXMgbWF0Y2hlcyBhbmQgc2F2ZSBpdHMgaXRl bXMgaW4gbmV3YmF0Y2ggaW5zdGVhZCAoaWYgdGhlcmUgaXMgbm9uZQorICogdGhlbiBjYWxsZXIg c2hvdWxkIHJlbGVhc2UgbmV3YmF0Y2gpLgorICoKKyAqIEZvciBhbiBvcmRlcmVkIChuZWFyZXN0 LW5laWdoYm9yKSBzY2FuIChuZXdiYXRjaCBpcyBOVUxMKSwgbWF0Y2hpbmcgbGVhZiBoZWFwCisg KiB0dXBsZXMgYXJlIHB1c2hlZCBvbnRvIHRoZSBzZWFyY2ggcXVldWUgYXMgR0lTVFNlYXJjaEl0 ZW1zIGNhcnJ5aW5nIHRoZWlyCisgKiBkaXN0YW5jZXMsIHNvIHRoZSBxdWV1ZSBjYW4gbGF0ZXIg YmUgZHJhaW5lZCBpbiBkaXN0YW5jZSBvcmRlci4gIFRoZSBwYWdlJ3MKKyAqIGJ1ZmZlciBwaW4g aXMgZHJvcHBlZCBiZWZvcmUgcmV0dXJuaW5nLiAgVGhpcyBjYW4gb25seSBoYXBwZW4gZHVyaW5n CisgKiBiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgc2NhbnMsIHdoaWNoIGlzIHdoYXQgbWFrZXMgaXQg c2FmZS4gIEdyb3VwcyBvZiBlbnF1ZXVlZAorICogaXRlbXMgd2lsbCBldmVudHVhbGx5IGJlIHJl dHVybmVkIChpbiB0aGUgZXhwZWN0ZWQgb3JkZXIpIGFzICJ2aXJ0dWFsCisgKiBiYXRjaGVzIiwg YnV0IHdlIGRvbid0IGRvIHRoYXQgaGVyZS4KKyAqCisgKiBJbiBhbGwgY2FzZXMsIGxvd2VyIGlu ZGV4IHBhZ2VzIGFyZSBwdXNoZWQgb250byB0aGUgc2VhcmNoIHF1ZXVlIHRvIGJlCisgKiB2aXNp dGVkIGxhdGVyLgogICoKICAqIElmIHdlIGRldGVjdCB0aGF0IHRoZSBpbmRleCBwYWdlIGhhcyBz cGxpdCBzaW5jZSB3ZSBzYXcgaXRzIGRvd25saW5rCiAgKiBpbiB0aGUgcGFyZW50LCB3ZSBwdXNo IGl0cyBuZXcgcmlnaHQgc2libGluZyBvbnRvIHRoZSBxdWV1ZSBzbyB0aGUKQEAgLTMzNSwxMCAr MzQ0LDkgQEAgZ2lzdGluZGV4X2tleXRlc3QoSW5kZXhTY2FuRGVzYyBzY2FuLAogICovCiBzdGF0 aWMgdm9pZAogZ2lzdFNjYW5QYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgR0lTVFNlYXJjaEl0ZW0g KnBhZ2VJdGVtLAotCQkJIEluZGV4T3JkZXJCeURpc3RhbmNlICpteURpc3RhbmNlcywgVElEQml0 bWFwICp0Ym0sIGludDY0ICpudGlkcykKKwkJCSBJbmRleE9yZGVyQnlEaXN0YW5jZSAqbXlEaXN0 YW5jZXMsIEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoKQogewogCUdJU1RTY2FuT3BhcXVlIHNvID0g KEdJU1RTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JR0lTVFNUQVRFICAqZ2lzdHN0YXRlID0g c28tPmdpc3RzdGF0ZTsKIAlSZWxhdGlvbglyID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAlCdWZm ZXIJCWJ1ZmZlcjsKIAlQYWdlCQlwYWdlOwpAQCAtMzQ3LDcgKzM1NSwxMiBAQCBnaXN0U2NhblBh Z2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBHSVNUU2VhcmNoSXRlbSAqcGFnZUl0ZW0sCiAJT2Zmc2V0 TnVtYmVyIGk7CiAJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CiAKKwkvKiBzdGF0ZSB1c2VkIHdoZW4g c2F2aW5nIG1hdGNoaW5nIGl0ZW1zIGludG8gY2FsbGVyJ3MgbmV3YmF0Y2ggKi8KKwlpbnQJCQlp dGVtSW5kZXggPSAwOworCWludAkJCXR1cGxlT2Zmc2V0ID0gMDsKKwogCUFzc2VydCghR0lTVFNl YXJjaEl0ZW1Jc0hlYXAoKnBhZ2VJdGVtKSk7CisJQXNzZXJ0KChzY2FuLT5udW1iZXJPZk9yZGVy QnlzID09IDApID09IChuZXdiYXRjaCAhPSBOVUxMKSk7CiAKIAlidWZmZXIgPSBSZWFkQnVmZmVy KHNjYW4tPmluZGV4UmVsYXRpb24sIHBhZ2VJdGVtLT5ibGtubyk7CiAJTG9ja0J1ZmZlcihidWZm ZXIsIEdJU1RfU0hBUkUpOwpAQCAtMzk5LDIyICs0MTIsMTEgQEAgZ2lzdFNjYW5QYWdlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgR0lTVFNlYXJjaEl0ZW0gKnBhZ2VJdGVtLAogCSAqLwogCWlmIChHaXN0 UGFnZUlzRGVsZXRlZChwYWdlKSkKIAl7CisJCUFzc2VydCghbmV3YmF0Y2ggfHwgbmV3YmF0Y2gt PmZpcnN0SXRlbSA+IG5ld2JhdGNoLT5sYXN0SXRlbSk7CiAJCVVubG9ja1JlbGVhc2VCdWZmZXIo YnVmZmVyKTsKIAkJcmV0dXJuOwogCX0KIAotCXNvLT5uUGFnZURhdGEgPSBzby0+Y3VyUGFnZURh dGEgPSAwOwotCXNjYW4tPnhzX2hpdHVwID0gTlVMTDsJCS8qIG1pZ2h0IHBvaW50IGludG8gcGFn ZURhdGFDeHQgKi8KLQlpZiAoc28tPnBhZ2VEYXRhQ3h0KQotCQlNZW1vcnlDb250ZXh0UmVzZXQo c28tPnBhZ2VEYXRhQ3h0KTsKLQotCS8qCi0JICogV2Ugc2F2ZSB0aGUgTFNOIG9mIHRoZSBwYWdl IGFzIHdlIHJlYWQgaXQsIHNvIHRoYXQgd2Uga25vdyB3aGV0aGVyIGl0Ci0JICogaXMgc2FmZSB0 byBhcHBseSBMUF9ERUFEIGhpbnRzIHRvIHRoZSBwYWdlIGxhdGVyLiBUaGlzIGFsbG93cyB1cyB0 bwotCSAqIGRyb3AgdGhlIHBpbiBmb3IgTVZDQyBzY2Fucywgd2hpY2ggYWxsb3dzIHZhY3V1bSB0 byBhdm9pZCBibG9ja2luZy4KLQkgKi8KLQlzby0+Y3VyUGFnZUxTTiA9IEJ1ZmZlckdldExTTkF0 b21pYyhidWZmZXIpOwotCiAJLyoKIAkgKiBjaGVjayBhbGwgdHVwbGVzIG9uIHBhZ2UKIAkgKi8K QEAgLTQ1MiwzNiArNDU0LDI4IEBAIGdpc3RTY2FuUGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEdJ U1RTZWFyY2hJdGVtICpwYWdlSXRlbSwKIAkJaWYgKCFtYXRjaCkKIAkJCWNvbnRpbnVlOwogCi0J CWlmICh0Ym0gJiYgR2lzdFBhZ2VJc0xlYWYocGFnZSkpCisJCWlmIChzY2FuLT5udW1iZXJPZk9y ZGVyQnlzID09IDAgJiYgR2lzdFBhZ2VJc0xlYWYocGFnZSkpCiAJCXsKIAkJCS8qCi0JCQkgKiBn ZXRiaXRtYXAgc2Nhbiwgc28ganVzdCBwdXNoIGhlYXAgdHVwbGUgVElEcyBpbnRvIHRoZSBiaXRt YXAKLQkJCSAqIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgb3JkZXJpbmcKKwkJCSAqIE5vbi1vcmRl cmVkIHNjYW4gKHVub3JkZXJlZCBhbWdldGJhdGNoIG9yIGJpdG1hcCksIHNvIGp1c3QKKwkJCSAq IHN0b3JlIGFub3RoZXIgbWF0Y2hpbmcgaXRlbSBpbiBjYWxsZXIncyBiYXRjaCB3aXRob3V0IHdv cnJ5aW5nCisJCQkgKiBhYm91dCBvcmRlcmluZwogCQkJICovCi0JCQl0Ym1fYWRkX3R1cGxlcyh0 Ym0sICZpdC0+dF90aWQsIDEsIHJlY2hlY2spOwotCQkJKCpudGlkcykrKzsKLQkJfQotCQllbHNl IGlmIChzY2FuLT5udW1iZXJPZk9yZGVyQnlzID09IDAgJiYgR2lzdFBhZ2VJc0xlYWYocGFnZSkp Ci0JCXsKLQkJCS8qCi0JCQkgKiBOb24tb3JkZXJlZCBzY2FuLCBzbyByZXBvcnQgdHVwbGVzIGlu IHNvLT5wYWdlRGF0YVtdCi0JCQkgKi8KLQkJCXNvLT5wYWdlRGF0YVtzby0+blBhZ2VEYXRhXS5o ZWFwUHRyID0gaXQtPnRfdGlkOwotCQkJc28tPnBhZ2VEYXRhW3NvLT5uUGFnZURhdGFdLnJlY2hl Y2sgPSByZWNoZWNrOwotCQkJc28tPnBhZ2VEYXRhW3NvLT5uUGFnZURhdGFdLm9mZm51bSA9IGk7 CisJCQluZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS50YWJsZVRpZCA9IGl0LT50X3RpZDsKKwkJ CW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmluZGV4T2Zmc2V0ID0gaTsKKwkJCW5ld2JhdGNo LT5pdGVtc1tpdGVtSW5kZXhdLnR1cGxlT2Zmc2V0ID0gMDsKKwkJCUdJU1RCYXRjaEdldFJlY2hl Y2soc2NhbiwgbmV3YmF0Y2gpW2l0ZW1JbmRleF0gPSByZWNoZWNrOwogCi0JCQkvKgotCQkJICog SW4gYW4gaW5kZXgtb25seSBzY2FuLCBhbHNvIGZldGNoIHRoZSBkYXRhIGZyb20gdGhlIHR1cGxl LiAgVGhlCi0JCQkgKiByZWNvbnN0cnVjdGVkIHR1cGxlcyBhcmUgc3RvcmVkIGluIHBhZ2VEYXRh Q3h0LgotCQkJICovCiAJCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQogCQkJewotCQkJCW9sZGN4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzby0+cGFnZURhdGFDeHQpOwotCQkJCXNvLT5wYWdl RGF0YVtzby0+blBhZ2VEYXRhXS5yZWNvbnR1cCA9Ci0JCQkJCWdpc3RGZXRjaFR1cGxlKGdpc3Rz dGF0ZSwgciwgaXQpOwotCQkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCQkJCS8q IENvcHkgb24tZGlzayBmb3JtYXQgaW5kZXggdHVwbGUgaW50byBjdXJyVHVwbGVzICovCisJCQkJ U2l6ZQkJaXR1cHN6ID0gSW5kZXhUdXBsZVNpemUoaXQpOworCisJCQkJbmV3YmF0Y2gtPml0ZW1z W2l0ZW1JbmRleF0udHVwbGVPZmZzZXQgPSB0dXBsZU9mZnNldDsKKwkJCQltZW1jcHkobmV3YmF0 Y2gtPmN1cnJUdXBsZXMgKyB0dXBsZU9mZnNldCwgaXQsIGl0dXBzeik7CisJCQkJdHVwbGVPZmZz ZXQgKz0gTUFYQUxJR04oaXR1cHN6KTsKIAkJCX0KLQkJCXNvLT5uUGFnZURhdGErKzsKKwkJCWl0 ZW1JbmRleCsrOwogCQl9CiAJCWVsc2UKIAkJewpAQCAtNTAwLDE3ICs0OTQsMTUgQEAgZ2lzdFNj YW5QYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgR0lTVFNlYXJjaEl0ZW0gKnBhZ2VJdGVtLAogCiAJ CQlpZiAoR2lzdFBhZ2VJc0xlYWYocGFnZSkpCiAJCQl7Ci0JCQkJLyogQ3JlYXRpbmcgaGVhcC10 dXBsZSBHSVNUU2VhcmNoSXRlbSAqLworCQkJCS8qIENyZWF0aW5nIGhlYXAtdHVwbGUgR0lTVFNl YXJjaEl0ZW0gZm9yIG9yZGVyZWQgc2VhcmNoICovCisJCQkJQXNzZXJ0KHNjYW4tPm51bWJlck9m T3JkZXJCeXMgPiAwKTsKKwkJCQlBc3NlcnQobmV3YmF0Y2ggPT0gTlVMTCk7CisJCQkJQXNzZXJ0 KHNjYW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCk7CisKIAkJCQlpdGVtLT5ibGtubyA9IEludmFs aWRCbG9ja051bWJlcjsKIAkJCQlpdGVtLT5kYXRhLmhlYXAuaGVhcFB0ciA9IGl0LT50X3RpZDsK IAkJCQlpdGVtLT5kYXRhLmhlYXAucmVjaGVjayA9IHJlY2hlY2s7CiAJCQkJaXRlbS0+ZGF0YS5o ZWFwLnJlY2hlY2tEaXN0YW5jZXMgPSByZWNoZWNrX2Rpc3RhbmNlczsKLQotCQkJCS8qCi0JCQkJ ICogSW4gYW4gaW5kZXgtb25seSBzY2FuLCBhbHNvIGZldGNoIHRoZSBkYXRhIGZyb20gdGhlIHR1 cGxlLgotCQkJCSAqLwotCQkJCWlmIChzY2FuLT54c193YW50X2l0dXApCi0JCQkJCWl0ZW0tPmRh dGEuaGVhcC5yZWNvbnR1cCA9IGdpc3RGZXRjaFR1cGxlKGdpc3RzdGF0ZSwgciwgaXQpOwogCQkJ fQogCQkJZWxzZQogCQkJewpAQCAtNTM1LDYgKzUyNywzMCBAQCBnaXN0U2NhblBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBHSVNUU2VhcmNoSXRlbSAqcGFnZUl0ZW0sCiAJCX0KIAl9CiAKKwlpZiAo bmV3YmF0Y2gpCisJeworCQkvKiBGaW5hbGl6ZSByZXN1bHQgYmF0Y2ggZHVyaW5nIGEgbm9uLW9y ZGVyZWQgc2NhbiAqLworCQlBc3NlcnQoc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyA9PSAwKTsKKwor CQluZXdiYXRjaC0+Zmlyc3RJdGVtID0gMDsKKwkJbmV3YmF0Y2gtPmxhc3RJdGVtID0gaXRlbUlu ZGV4IC0gMTsKKworCQlpZiAoaXRlbUluZGV4ID4gMCkKKwkJeworCQkJR0lTVEJhdGNoRGF0YSAq Z25ld2JhdGNoOworCisJCQlBc3NlcnQoR2lzdFBhZ2VJc0xlYWYocGFnZSkpOworCisJCQlnbmV3 YmF0Y2ggPSBHSVNUQmF0Y2hHZXREYXRhKHNjYW4sIG5ld2JhdGNoKTsKKwkJCWduZXdiYXRjaC0+ YnVmID0gYnVmZmVyOworCQkJZ25ld2JhdGNoLT5ibGtubyA9IEJ1ZmZlckdldEJsb2NrTnVtYmVy KGJ1ZmZlcik7CisKKwkJCWluZGV4YW1fdXRpbF91bmxvY2tfYmF0Y2goc2NhbiwgbmV3YmF0Y2gs IGJ1ZmZlcik7CisJCQlyZXR1cm47CisJCX0KKwkJLyogZWxzZSBjYWxsZXIgbmVlZHMgdG8gZmlu ZCBhbm90aGVyIHBhZ2UgdG8gZmlsbCBuZXdiYXRjaCAqLworCX0KKwogCVVubG9ja1JlbGVhc2VC dWZmZXIoYnVmZmVyKTsKIH0KIApAQCAtNTYzLDIyICs1NzksMTExIEBAIGdldE5leHRHSVNUU2Vh cmNoSXRlbShHSVNUU2Nhbk9wYXF1ZSBzbykKIH0KIAogLyoKLSAqIEZldGNoIG5leHQgaGVhcCB0 dXBsZSBpbiBhbiBvcmRlcmVkIHNlYXJjaAorICogZ2lzdFNjYW5TdGFydCgpIC0tIGJlZ2luIGEg c2NhbiBieSBxdWV1ZWluZyBpdHMgcm9vdCBwYWdlCisgKgorICogQ2FsbGVkIG9uIHRoZSBmaXJz dCBhbWdldGJhdGNoL2FtZ2V0Yml0bWFwIGNhbGwgb2YgYSBzY2FuICh0aGUgY2FsbGVyIGhhdmlu ZworICogYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlIHF1YWwgaXMgc2F0aXNmaWFibGUpLiAgQ291 bnRzIHRoZSBzY2FuIGZvciBzdGF0cyBhbmQKKyAqIHF1ZXVlcyB0aGUgcm9vdCBwYWdlIGFzIHRo ZSBmaXJzdCB3b3JrIGl0ZW0sIHNvIHRoZSBzY2FuIGRyaXZlcnMgYXJlCisgKiBvdGhlcndpc2Ug cHVyZSBxdWV1ZSBkcmFpbmVycy4gIFRoZSByb290IGNhcnJpZXMgYSB6ZXJvZWQgcGFyZW50bHNu IChpdCBoYXMKKyAqIG5vIHBhcmVudCwgc28gZ2lzdFNjYW5QYWdlJ3Mgc3BsaXQtZGV0ZWN0aW9u IGlzIGEgbm8tb3AgZm9yIGl0KSBhbmQgemVyb2VkCisgKiBkaXN0YW5jZXMgKHNvIGl0IHNvcnRz IGZpcnN0IGluIGFuIG9yZGVyZWQgc2NhbikuCisgKgorICogU3RhcnRpbmcgdGhlIHNjYW4gaGVy ZSwgcmF0aGVyIHRoYW4gaW4gZ2lzdHJlc2NhbiwgZm9sbG93cyB0aGUgY29udmVudGlvbgorICog dGhhdCBhbXJlc2NhbiBvbmx5IHNldHMgdXAgc2NhbiBrZXlzIHdoaWxlIHRoZSBzY2FuIHByb3Bl ciAoY291bnRpbmcgaXQsCisgKiByZWFkaW5nIGluZGV4IHBhZ2VzKSBiZWdpbnMgb24gdGhlIGZp cnN0IGZldGNoLgogICovCi1zdGF0aWMgYm9vbAotZ2V0TmV4dE5lYXJlc3QoSW5kZXhTY2FuRGVz YyBzY2FuKQorc3RhdGljIHZvaWQKK2dpc3RTY2FuU3RhcnQoSW5kZXhTY2FuRGVzYyBzY2FuKQog ewogCUdJU1RTY2FuT3BhcXVlIHNvID0gKEdJU1RTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0J Ym9vbAkJcmVzID0gZmFsc2U7CisJR0lTVFNlYXJjaEl0ZW0gKnJvb3Q7CisJTWVtb3J5Q29udGV4 dCBvbGRjeHQ7CiAKLQlpZiAoc2Nhbi0+eHNfaGl0dXApCisJcGdzdGF0X2NvdW50X2luZGV4X3Nj YW4oc2Nhbi0+aW5kZXhSZWxhdGlvbik7CisJaWYgKHNjYW4tPmluc3RydW1lbnQpCisJCXNjYW4t Pmluc3RydW1lbnQtPm5zZWFyY2hlcysrOworCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRj aFRvKHNvLT5xdWV1ZUN4dCk7CisJcm9vdCA9IHBhbGxvYyhTaXplT2ZHSVNUU2VhcmNoSXRlbShz Y2FuLT5udW1iZXJPZk9yZGVyQnlzKSk7CisJcm9vdC0+Ymxrbm8gPSBHSVNUX1JPT1RfQkxLTk87 CisJbWVtc2V0KCZyb290LT5kYXRhLnBhcmVudGxzbiwgMCwgc2l6ZW9mKEdpc3ROU04pKTsKKwlt ZW1zZXQocm9vdC0+ZGlzdGFuY2VzLCAwLAorCQkgICBzaXplb2Yocm9vdC0+ZGlzdGFuY2VzWzBd KSAqIHNjYW4tPm51bWJlck9mT3JkZXJCeXMpOworCXBhaXJpbmdoZWFwX2FkZChzby0+cXVldWUs ICZyb290LT5waE5vZGUpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworfQorCisv KgorICogZ2V0TmV4dEJhdGNoKCkgLS0gcmVhZCB0aGUgbmV4dCBsZWFmIHBhZ2Ugd2l0aCBtYXRj aGVzIGludG8gYSBmcmVzaCBiYXRjaAorICoKKyAqIGdpc3RnZXRiYXRjaCdzIG5vbi1vcmRlcmVk IHdhbGtlciwgYWxzbyBkcml2ZW4gYnkgZ2lzdGdldGJpdG1hcC4gIEFsbG9jYXRlcyBhCisgKiBi YXRjaCBhbmQgZHJhaW5zIHRoZSBxdWV1ZSwgc2Nhbm5pbmcgZWFjaCBxdWV1ZWQgaW5kZXggcGFn ZSB1bnRpbCBvbmUKKyAqIHByb2R1Y2VzIG1hdGNoaW5nIGxlYWYgaXRlbXMsIHRoZW4gcmV0dXJu cyB0aGF0IGJhdGNoLiAgV2hlbiB0aGUgcXVldWUgaXMKKyAqIGV4aGF1c3RlZCB3aXRob3V0IGEg bWF0Y2gsIHJlbGVhc2VzIHRoZSBiYXRjaCBhbmQgcmV0dXJucyBOVUxMLgorICovCitzdGF0aWMg SW5kZXhTY2FuQmF0Y2gKK2dldE5leHRCYXRjaChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJR0lT VFNjYW5PcGFxdWUgc28gPSAoR0lTVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlJbmRleFNj YW5CYXRjaCBuZXdiYXRjaCA9IGluZGV4YW1fdXRpbF9hbGxvY19iYXRjaChzY2FuKTsKKworCS8q IEdpU1Qgb25seSBldmVyIHNjYW5zIGZvcndhcmQ7IHNldCB0aGUgYmF0Y2gncyBkaXJlY3Rpb24g dXAgZnJvbnQgKi8KKwluZXdiYXRjaC0+ZGlyID0gRm9yd2FyZFNjYW5EaXJlY3Rpb247CisKKwlm b3IgKDs7KQogCXsKLQkJLyogZnJlZSBwcmV2aW91c2x5IHJldHVybmVkIHR1cGxlICovCi0JCXBm cmVlKHNjYW4tPnhzX2hpdHVwKTsKLQkJc2Nhbi0+eHNfaGl0dXAgPSBOVUxMOworCQlHSVNUU2Vh cmNoSXRlbSAqaXRlbSA9IGdldE5leHRHSVNUU2VhcmNoSXRlbShzbyk7CisKKwkJaWYgKGl0ZW0g PT0gTlVMTCkKKwkJeworCQkJLyogTm8gbW9yZSBpbmRleCBwYWdlcyB0byBzY2FuOyB0aGUgc2Nh biBpcyBleGhhdXN0ZWQgKi8KKwkJCWluZGV4YW1fdXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4sIG5l d2JhdGNoKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMo KTsKKworCQkvKiBTY2FuIHRoaXMgcXVldWVkIGluZGV4IHBhZ2U7IG1hdGNoaW5nIGxlYWYgaXRl bXMgZ28gaW50byB0aGUgYmF0Y2ggKi8KKwkJZ2lzdFNjYW5QYWdlKHNjYW4sIGl0ZW0sIGl0ZW0t PmRpc3RhbmNlcywgbmV3YmF0Y2gpOworCQlwZnJlZShpdGVtKTsKKworCQkvKiBJZiB0aGlzIGxl YWYgcGFnZSBwcm9kdWNlZCBtYXRjaGluZyBpdGVtcywgcmV0dXJuIHRoZSBiYXRjaCAqLworCQlp ZiAobmV3YmF0Y2gtPmZpcnN0SXRlbSA8PSBuZXdiYXRjaC0+bGFzdEl0ZW0pCisJCQlyZXR1cm4g bmV3YmF0Y2g7CiAJfQogCi0JZG8KKwlwZ191bnJlYWNoYWJsZSgpOworCisJcmV0dXJuIE5VTEw7 Cit9CisKKy8qCisgKiBnZXROZXh0TmVhcmVzdEJhdGNoKCkgLS0gZHJhaW4gdGhlIHF1ZXVlIGlu dG8gYSBmcmVzaCBiYXRjaCBpbiBkaXN0YW5jZSBvcmRlcgorICoKKyAqIGdpc3RnZXRiYXRjaCdz IG9yZGVyZWQgKG5lYXJlc3QtbmVpZ2hib3IpIHdhbGtlci4gIFRoZSBwYWlyaW5nLWhlYXAgcXVl dWUKKyAqIChzby0+cXVldWUpIGhvbGRzIGJvdGggdW52aXNpdGVkIGluZGV4IHBhZ2VzIGFuZCBt YXRjaGluZyBsZWFmIGhlYXAgdHVwbGVzLAorICogb3JkZXJlZCBieSAobG93ZXItYm91bmQpIGRp c3RhbmNlLiAgV2UgcG9wIGl0ZW1zIGluIHRoYXQgb3JkZXIsIGRpc3BhdGNoaW5nCisgKiBvbiB0 aGUgaXRlbSB0eXBlLiAgQSBwb3BwZWQgaGVhcCB0dXBsZSBpcyBhcHBlbmRlZCB0byB0aGUgYmF0 Y2guICBXZSBzdG9wCisgKiBvbmNlIHRoZSBiYXRjaCBpcyBmdWxsIChtYXhpdGVtc2JhdGNoIGl0 ZW1zKSBvciB0aGUgcXVldWUgaXMgZXhoYXVzdGVkLAorICogbGVhdmluZyBhbnkgcmVtYWluaW5n IGl0ZW1zIHF1ZXVlZCBmb3IgdGhlIG5leHQgY2FsbC4KKyAqCisgKiBCZWNhdXNlIHRoZSBxdWV1 ZSBpcyBkcmFpbmVkIGluIG5vbmRlY3JlYXNpbmcgZGlzdGFuY2Ugb3JkZXIgYWNyb3NzIHRoZSB3 aG9sZQorICogc2NhbiAoYSBkb3dubGluaydzIGRpc3RhbmNlIGlzIGEgbG93ZXIgYm91bmQgb24g aXRzIHN1YnRyZWUsIHNvIGl0ZW1zIHB1c2hlZAorICogd2hpbGUgc2Nhbm5pbmcgYSBwYWdlIG5l dmVyIHNvcnQgYWhlYWQgb2YgaXRlbXMgYWxyZWFkeSBwb3BwZWQpLCB0aGUKKyAqIGJhdGNoZXMg d2UgZW1pdCBhcmUgZ2xvYmFsbHkgZGlzdGFuY2Utb3JkZXJlZC4KKyAqLworc3RhdGljIEluZGV4 U2NhbkJhdGNoCitnZXROZXh0TmVhcmVzdEJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlH SVNUU2Nhbk9wYXF1ZSBzbyA9IChHSVNUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUluZGV4 U2NhbkJhdGNoIG5ld2JhdGNoID0gaW5kZXhhbV91dGlsX2FsbG9jX2JhdGNoKHNjYW4pOworCUdJ U1RCYXRjaERhdGEgKmduZXdiYXRjaDsKKwlpbnQJCQluaXRlbXMgPSAwOworCisJLyogR2lTVCBv bmx5IGV2ZXIgc2NhbnMgZm9yd2FyZDsgc2V0IHRoZSBiYXRjaCdzIGRpcmVjdGlvbiB1cCBmcm9u dCAqLworCW5ld2JhdGNoLT5kaXIgPSBGb3J3YXJkU2NhbkRpcmVjdGlvbjsKKworCWZvciAoOzsp CiAJewogCQlHSVNUU2VhcmNoSXRlbSAqaXRlbSA9IGdldE5leHRHSVNUU2VhcmNoSXRlbShzbyk7 CiAKQEAgLTU4OCwzNyArNjkzLDY3IEBAIGdldE5leHROZWFyZXN0KEluZGV4U2NhbkRlc2Mgc2Nh bikKIAkJaWYgKEdJU1RTZWFyY2hJdGVtSXNIZWFwKCppdGVtKSkKIAkJewogCQkJLyogZm91bmQg YSBoZWFwIGl0ZW0gYXQgY3VycmVudGx5IG1pbmltYWwgZGlzdGFuY2UgKi8KLQkJCXNjYW4tPnhz X2hlYXB0aWQgPSBpdGVtLT5kYXRhLmhlYXAuaGVhcFB0cjsKLQkJCXNjYW4tPnhzX3JlY2hlY2sg PSBpdGVtLT5kYXRhLmhlYXAucmVjaGVjazsKKwkJCUdJU1RCYXRjaEl0ZW0gKmJpdGVtID0gR0lT VEJhdGNoR2V0SXRlbShzY2FuLCBuZXdiYXRjaCwgbml0ZW1zKTsKIAotCQkJaW5kZXhfc3RvcmVf ZmxvYXQ4X29yZGVyYnlfZGlzdGFuY2VzKHNjYW4sIHNvLT5vcmRlckJ5VHlwZXMsCi0JCQkJCQkJ CQkJCQkgaXRlbS0+ZGlzdGFuY2VzLAotCQkJCQkJCQkJCQkJIGl0ZW0tPmRhdGEuaGVhcC5yZWNo ZWNrRGlzdGFuY2VzKTsKKwkJCW5ld2JhdGNoLT5pdGVtc1tuaXRlbXNdLnRhYmxlVGlkID0gaXRl bS0+ZGF0YS5oZWFwLmhlYXBQdHI7CisJCQluZXdiYXRjaC0+aXRlbXNbbml0ZW1zXS5pbmRleE9m ZnNldCA9IC0xOwkvKiBtZWFuaW5nbGVzcyBoZXJlICovCisJCQluZXdiYXRjaC0+aXRlbXNbbml0 ZW1zXS50dXBsZU9mZnNldCA9IDA7CiAKLQkJCS8qIGluIGFuIGluZGV4LW9ubHkgc2NhbiwgYWxz byByZXR1cm4gdGhlIHJlY29uc3RydWN0ZWQgdHVwbGUuICovCi0JCQlpZiAoc2Nhbi0+eHNfd2Fu dF9pdHVwKQotCQkJCXNjYW4tPnhzX2hpdHVwID0gaXRlbS0+ZGF0YS5oZWFwLnJlY29udHVwOwot CQkJcmVzID0gdHJ1ZTsKKwkJCWJpdGVtLT5yZWNoZWNrID0gaXRlbS0+ZGF0YS5oZWFwLnJlY2hl Y2s7CisJCQliaXRlbS0+cmVjaGVja0Rpc3RhbmNlcyA9IGl0ZW0tPmRhdGEuaGVhcC5yZWNoZWNr RGlzdGFuY2VzOworCQkJbWVtY3B5KGJpdGVtLT5kaXN0YW5jZXMsIGl0ZW0tPmRpc3RhbmNlcywK KwkJCQkgICBzaXplb2YoaXRlbS0+ZGlzdGFuY2VzWzBdKSAqIHNjYW4tPm51bWJlck9mT3JkZXJC eXMpOworCisJCQluaXRlbXMrKzsKKwkJCXBmcmVlKGl0ZW0pOworCisJCQlpZiAobml0ZW1zID09 IHNjYW4tPm1heGl0ZW1zYmF0Y2gpCisJCQkJYnJlYWs7CQkJLyogYmF0Y2ggZnVsbDsgcmVtYWlu aW5nIGl0ZW1zIHN0YXkgcXVldWVkICovCiAJCX0KIAkJZWxzZQogCQl7CiAJCQkvKiB2aXNpdCBh biBpbmRleCBwYWdlLCBleHRyYWN0IGl0cyBpdGVtcyBpbnRvIHF1ZXVlICovCiAJCQlDSEVDS19G T1JfSU5URVJSVVBUUygpOwogCi0JCQlnaXN0U2NhblBhZ2Uoc2NhbiwgaXRlbSwgaXRlbS0+ZGlz dGFuY2VzLCBOVUxMLCBOVUxMKTsKKwkJCWdpc3RTY2FuUGFnZShzY2FuLCBpdGVtLCBpdGVtLT5k aXN0YW5jZXMsIE5VTEwpOworCQkJcGZyZWUoaXRlbSk7CiAJCX0KKwl9CiAKLQkJcGZyZWUoaXRl bSk7Ci0JfSB3aGlsZSAoIXJlcyk7CisJaWYgKG5pdGVtcyA9PSAwKQorCXsKKwkJLyogTm8gbWF0 Y2hpbmcgaXRlbXMgcmVtYWluOiB0aGUgc2NhbiBpcyBleGhhdXN0ZWQgKi8KKwkJaW5kZXhhbV91 dGlsX3JlbGVhc2VfYmF0Y2goc2NhbiwgbmV3YmF0Y2gpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAK LQlyZXR1cm4gcmVzOworCS8qCisJICogQW4gb3JkZXJlZCBiYXRjaCBpcyAidmlydHVhbCI6IGl0 cyBpdGVtcyBjb21lIGZyb20gbWFueSBsZWFmIHBhZ2VzLAorCSAqIHdob3NlIHBpbnMgZ2lzdFNj YW5QYWdlIGFscmVhZHkgZHJvcHBlZCwgc28gaXQgaG9sZHMgbm8gVElEIHJlY3ljbGluZworCSAq IGludGVybG9jay4gIEl0IGhhcyBubyBzaW5nbGUgb3JpZ2luYXRpbmcgcGFnZSwgYW5kIHdlIGRv bid0IHRyYWNrIHRob3NlCisJICogaW5kZXggcGFnZXMgaW4gYW55IGNhc2UgKGdpc3RraWxsaXRl bXNiYXRjaCB3aWxsIGp1c3Qgc2tpcCBpdCkuCisJICovCisJQXNzZXJ0KCFuZXdiYXRjaC0+aXNH dWFyZGVkKTsKKworCW5ld2JhdGNoLT5maXJzdEl0ZW0gPSAwOworCW5ld2JhdGNoLT5sYXN0SXRl bSA9IG5pdGVtcyAtIDE7CisKKwlnbmV3YmF0Y2ggPSBHSVNUQmF0Y2hHZXREYXRhKHNjYW4sIG5l d2JhdGNoKTsKKwlnbmV3YmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJZ25ld2JhdGNoLT5i bGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKKworCXJldHVybiBuZXdiYXRjaDsKIH0KIAogLyoK LSAqIGdpc3RnZXR0dXBsZSgpIC0tIEdldCB0aGUgbmV4dCB0dXBsZSBpbiB0aGUgc2NhbgorICog Z2lzdGdldGJhdGNoKCkgLS0gR2V0IHRoZSBmaXJzdCBvciBuZXh0IGJhdGNoIG9mIGl0ZW1zIGlu IGEgc2NhbgorICoKKyAqIERpc3BhdGNoZXMgdG8gdGhlIG9yZGVyZWQgb3Igbm9uLW9yZGVyZWQg d2Fsa2VyLiAgUGVyc2lzdGVudCB0cmF2ZXJzYWwgc3RhdGUKKyAqIGxpdmVzIGluIHNvLT5xdWV1 ZSwgc28gcHJpb3JiYXRjaCBpcyB1bnVzZWQgZXhjZXB0IHRvIHJlY29nbml6ZSB0aGUgc2Nhbidz CisgKiBmaXJzdCBjYWxsLCB3aGVuIHdlIHF1ZXVlIHRoZSByb290IHBhZ2UgKGdpc3RTY2FuU3Rh cnQpLgogICovCi1ib29sCi1naXN0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcikKK0luZGV4U2NhbkJhdGNoCitnaXN0Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBz Y2FuLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlH SVNUU2Nhbk9wYXF1ZSBzbyA9IChHSVNUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCkBAIC02 MjYsMTI0ICs3NjEsMTExIEBAIGdpc3RnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKQogCQllbG9nKEVSUk9SLCAiR2lTVCBvbmx5IHN1cHBvcnRzIGZvcndhcmQg c2NhbiBkaXJlY3Rpb24iKTsKIAogCWlmICghc28tPnF1YWxfb2spCi0JCXJldHVybiBmYWxzZTsK KwkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoc28tPmZpcnN0Q2FsbCkKLQl7Ci0JCS8qIEJlZ2luIHRo ZSBzY2FuIGJ5IHByb2Nlc3NpbmcgdGhlIHJvb3QgcGFnZSAqLwotCQlHSVNUU2VhcmNoSXRlbSBm YWtlSXRlbTsKLQotCQlwZ3N0YXRfY291bnRfaW5kZXhfc2NhbihzY2FuLT5pbmRleFJlbGF0aW9u KTsKLQkJaWYgKHNjYW4tPmluc3RydW1lbnQpCi0JCQlzY2FuLT5pbnN0cnVtZW50LT5uc2VhcmNo ZXMrKzsKLQotCQlzby0+Zmlyc3RDYWxsID0gZmFsc2U7Ci0JCXNvLT5jdXJQYWdlRGF0YSA9IHNv LT5uUGFnZURhdGEgPSAwOwotCQlzY2FuLT54c19oaXR1cCA9IE5VTEw7Ci0JCWlmIChzby0+cGFn ZURhdGFDeHQpCi0JCQlNZW1vcnlDb250ZXh0UmVzZXQoc28tPnBhZ2VEYXRhQ3h0KTsKLQotCQlm YWtlSXRlbS5ibGtubyA9IEdJU1RfUk9PVF9CTEtOTzsKLQkJbWVtc2V0KCZmYWtlSXRlbS5kYXRh LnBhcmVudGxzbiwgMCwgc2l6ZW9mKEdpc3ROU04pKTsKLQkJZ2lzdFNjYW5QYWdlKHNjYW4sICZm YWtlSXRlbSwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0JfQorCWlmIChwcmlvcmJhdGNoID09IE5VTEwp CisJCWdpc3RTY2FuU3RhcnQoc2Nhbik7CiAKKwlpZiAoc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyA+ IDApCisJCXJldHVybiBnZXROZXh0TmVhcmVzdEJhdGNoKHNjYW4pOworCisJcmV0dXJuIGdldE5l eHRCYXRjaChzY2FuKTsKK30KKworLyoKKyAqIGdpc3R1bmd1YXJkYmF0Y2goKSAtLSBEcm9wIGEg YmF0Y2gncyBUSUQgcmVjeWNsaW5nIGludGVybG9jayAoYnVmZmVyIHBpbikKKyAqCisgKiBDYWxs ZWQgYnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQncyBzYWZlIHRvIGRyb3AgdGhlIGJ1ZmZlciBwaW4g aGVsZCB0bworICogcHJldmVudCBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNLgor ICovCit2b2lkCitnaXN0dW5ndWFyZGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2Fu QmF0Y2ggYmF0Y2gpCit7CisJR0lTVEJhdGNoRGF0YSAqZ2JhdGNoID0gR0lTVEJhdGNoR2V0RGF0 YShzY2FuLCBiYXRjaCk7CisKKwkvKiBTaG91bGQgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBpZmYg IWJhdGNoSW1tZWRpYXRlVW5ndWFyZCAqLworCUFzc2VydCghc2Nhbi0+YmF0Y2hJbW1lZGlhdGVV bmd1YXJkKTsKKwlBc3NlcnQoYmF0Y2gtPmlzR3VhcmRlZCk7CisKKwlSZWxlYXNlQnVmZmVyKGdi YXRjaC0+YnVmKTsKK30KKworLyoKKyAqIGdpc3RnZXR0cmFuc2Zvcm0oKSAtLSBTZXQgdXAgdGhl IHNjYW4ncyBwZXItdHVwbGUgb3V0cHV0IGZvciBvbmUgYmF0Y2ggaXRlbQorICoKKyAqIEltcGxl bWVudHMgdGhlIGFtZ2V0dHJhbnNmb3JtIGludGVyZmFjZS4gIFRoZSB0YWJsZSBBTSBjYWxscyB0 aGlzIGFzIGl0CisgKiByZXR1cm5zIGVhY2ggaXRlbSBvZiBhIEdpU1Qgc2NhbiwgdG8gc2V0IHRo ZSBzY2FuIGRlc2NyaXB0b3IncyBwZXItdHVwbGUKKyAqIG91dHB1dCBmcm9tIHRoZSBpdGVtJ3Mg cGVyLWl0ZW0gZGF0YS4KKyAqCisgKiAgIC0gV2UgYWx3YXlzIGFwcGx5IHRoZSBpdGVtJ3MgcXVh bCByZWNoZWNrIGZsYWcgdG8gc2Nhbi0+eHNfcmVjaGVjay4KKyAqICAgLSBGb3Igb3JkZXJlZCBz Y2Fucywgd2UgcmVwb3J0IHRoZSBpdGVtJ3Mgb3duIE9SREVSIEJZIGRpc3RhbmNlcyAoc3RvcmVk IGluCisgKiAgICAgdGhlIHBlci1pdGVtIGluZGV4IEFNIGFyZWEgYnkgZ2V0TmV4dE5lYXJlc3RC YXRjaCkgYXMgeHNfb3JkZXJieXZhbHMuCisgKiAgICAgVGhleSBhcmUgZmxhZ2dlZCBmb3IgcmVj aGVjayBvbmx5IHdoZW4gdGhlIGRpc3RhbmNlIGZ1bmN0aW9uIHdhcyBsb3NzeQorICogICAgIGZv ciB0aGF0IGl0ZW07IGFuIGV4YWN0IGRpc3RhbmNlIGlzIHJlcG9ydGVkIGFzIGZpbmFsLCB3aGls ZSBhIGxvc3N5CisgKiAgICAgbG93ZXIgYm91bmQgaXMgcmVjaGVja2VkIGJ5IHRoZSBleGVjdXRv cidzIHJlb3JkZXIgcXVldWUgdG8gcmVjb21wdXRlCisgKiAgICAgdGhlIHRydWUgb3JkZXIuCisg KiAgIC0gRm9yIGluZGV4LW9ubHkgc2NhbnMsIHdlIHJlY29uc3RydWN0IHRoZSBvcmlnaW5hbGx5 IGluZGV4ZWQgdmFsdWVzIGZyb20KKyAqICAgICB0aGUgc3RvcmVkIG9uLWRpc2sgaW5kZXggdHVw bGUgaW50byBhIGhlYXAgdHVwbGUsIGV4cG9zZWQgYXMgeHNfaGl0dXAuCisgKgorICogVGhlIHJl Y29uc3RydWN0ZWQgdHVwbGUgbGl2ZXMgaW4gdGhlIHNjYW4ncyBtZW1vcnkgY29udGV4dCBhbmQg b25seSBuZWVkcyB0bworICogb3V0bGl2ZSBhIHNpbmdsZSB0YWJsZV9pbmRleF9nZXRuZXh0X3Ns b3QgY2FsbCAodGhlIGV4ZWN1dG9yIGNvcGllcyBpdCBpbnRvCisgKiB0aGUgc2NhbiBzbG90KS4g IFdlIGZyZWUgdGhlIHByZXZpb3VzbHkgcmV0dXJuZWQgdHVwbGUgYmVmb3JlIGJ1aWxkaW5nIHRo ZQorICogbmV4dCBvbmUuCisgKi8KK3ZvaWQKK2dpc3RnZXR0cmFuc2Zvcm0oSW5kZXhTY2FuRGVz YyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwgaW50IGl0ZW0pCit7CisJR0lTVFNjYW5PcGFx dWUgc28gPSAoR0lTVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKworCUFzc2VydChpdGVtID49 IGJhdGNoLT5maXJzdEl0ZW0gJiYgaXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0pOworCisJLyogT3Jk ZXJlZCBzY2FuIChtdXN0IGJlIGEgcGxhaW4gaW5kZXggc2NhbikgKi8KIAlpZiAoc2Nhbi0+bnVt YmVyT2ZPcmRlckJ5cyA+IDApCiAJewotCQkvKiBNdXN0IGZldGNoIHR1cGxlcyBpbiBzdHJpY3Qg ZGlzdGFuY2Ugb3JkZXIgKi8KLQkJcmV0dXJuIGdldE5leHROZWFyZXN0KHNjYW4pOworCQlHSVNU QmF0Y2hJdGVtICpiaXRlbSA9IEdJU1RCYXRjaEdldEl0ZW0oc2NhbiwgYmF0Y2gsIGl0ZW0pOwor CisJCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwKTsKKworCQkvKiBBcHBseSB0aGlzIGl0ZW0n cyBxdWFsIHJlY2hlY2sgZmxhZyAqLworCQlzY2FuLT54c19yZWNoZWNrID0gYml0ZW0tPnJlY2hl Y2s7CisKKwkJLyoKKwkJICogTm90ZTogVGhpcyBpcyBhICJ2aXJ0dWFsIiBiYXRjaC4gIFRoZSBp dGVtcyBmcm9tIGNhbGxlcidzIGJhdGNoCisJCSAqIHdlcmUgc3RvcmVkIGluIHRoZSBiYXRjaCBp biBkaXN0YW5jZSBvcmRlciBieSBnZXROZXh0TmVhcmVzdEJhdGNoLAorCQkgKiByaWdodCBiZWZv cmUgZ2lzdGdldGJhdGNoIHJldHVybmVkIGl0LgorCQkgKi8KKwkJQXNzZXJ0KEdJU1RCYXRjaEdl dERhdGEoc2NhbiwgYmF0Y2gpLT5ibGtubyA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpOworCQlpbmRl eF9zdG9yZV9mbG9hdDhfb3JkZXJieV9kaXN0YW5jZXMoc2Nhbiwgc28tPm9yZGVyQnlUeXBlcywK KwkJCQkJCQkJCQkJIGJpdGVtLT5kaXN0YW5jZXMsCisJCQkJCQkJCQkJCSBiaXRlbS0+cmVjaGVj a0Rpc3RhbmNlcyk7CisJCXJldHVybjsKIAl9Ci0JZWxzZQorCisJLyoKKwkgKiBVbm9yZGVyZWQg c2Nhbi4KKwkgKgorCSAqIEFsd2F5cyB1c2VzIHNpbXBsZSBib29sIGFycmF5IGZvciBpdGVtIHJl Y2hlY2sgZmxhZ3MuCisJICovCisJc2Nhbi0+eHNfcmVjaGVjayA9IEdJU1RCYXRjaEdldFJlY2hl Y2soc2NhbiwgYmF0Y2gpW2l0ZW1dOworCisJLyogSW5kZXgtb25seSBzY2FuICovCisJaWYgKHNj YW4tPnhzX3dhbnRfaXR1cCkKIAl7Ci0JCS8qIEZldGNoIHR1cGxlcyBpbmRleC1wYWdlLWF0LWEt dGltZSAqLwotCQlmb3IgKDs7KQorCQkvKiBSZWNvbnN0cnVjdCBhIHJldHVybmFibGUgaGVhcCB0 dXBsZSBmcm9tIHN0YXNoZWQgaW5kZXggdHVwbGUgKi8KKwkJSW5kZXhUdXBsZQlpdHVwID0gKElu ZGV4VHVwbGUpIChiYXRjaC0+Y3VyclR1cGxlcyArCisJCQkJCQkJCQkJIGJhdGNoLT5pdGVtc1tp dGVtXS50dXBsZU9mZnNldCk7CisJCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCisJCWlmIChzY2Fu LT54c19oaXR1cCkKIAkJewotCQkJaWYgKHNvLT5jdXJQYWdlRGF0YSA8IHNvLT5uUGFnZURhdGEp Ci0JCQl7Ci0JCQkJaWYgKHNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgJiYgc28tPmN1clBhZ2VEYXRh ID4gMCkKLQkJCQl7Ci0KLQkJCQkJaWYgKHNvLT5raWxsZWRJdGVtcyA9PSBOVUxMKQotCQkJCQl7 Ci0JCQkJCQlNZW1vcnlDb250ZXh0IG9sZEN4dCA9Ci0JCQkJCQkJTWVtb3J5Q29udGV4dFN3aXRj aFRvKHNvLT5naXN0c3RhdGUtPnNjYW5DeHQpOwotCi0JCQkJCQlzby0+a2lsbGVkSXRlbXMgPQot CQkJCQkJCShPZmZzZXROdW1iZXIgKikgcGFsbG9jKE1heEluZGV4VHVwbGVzUGVyUGFnZQotCQkJ CQkJCQkJCQkJCSogc2l6ZW9mKE9mZnNldE51bWJlcikpOwotCi0JCQkJCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkQ3h0KTsKLQkJCQkJfQotCQkJCQlpZiAoc28tPm51bUtpbGxlZCA8IE1heElu ZGV4VHVwbGVzUGVyUGFnZSkKLQkJCQkJCXNvLT5raWxsZWRJdGVtc1tzby0+bnVtS2lsbGVkKytd ID0KLQkJCQkJCQlzby0+cGFnZURhdGFbc28tPmN1clBhZ2VEYXRhIC0gMV0ub2ZmbnVtOwotCQkJ CX0KLQkJCQkvKiBjb250aW51aW5nIHRvIHJldHVybiB0dXBsZXMgZnJvbSBhIGxlYWYgcGFnZSAq LwotCQkJCXNjYW4tPnhzX2hlYXB0aWQgPSBzby0+cGFnZURhdGFbc28tPmN1clBhZ2VEYXRhXS5o ZWFwUHRyOwotCQkJCXNjYW4tPnhzX3JlY2hlY2sgPSBzby0+cGFnZURhdGFbc28tPmN1clBhZ2VE YXRhXS5yZWNoZWNrOwotCi0JCQkJLyogaW4gYW4gaW5kZXgtb25seSBzY2FuLCBhbHNvIHJldHVy biB0aGUgcmVjb25zdHJ1Y3RlZCB0dXBsZSAqLwotCQkJCWlmIChzY2FuLT54c193YW50X2l0dXAp Ci0JCQkJCXNjYW4tPnhzX2hpdHVwID0gc28tPnBhZ2VEYXRhW3NvLT5jdXJQYWdlRGF0YV0ucmVj b250dXA7Ci0KLQkJCQlzby0+Y3VyUGFnZURhdGErKzsKLQotCQkJCXJldHVybiB0cnVlOwotCQkJ fQotCi0JCQkvKgotCQkJICogQ2hlY2sgdGhlIGxhc3QgcmV0dXJuZWQgdHVwbGUgYW5kIGFkZCBp dCB0byBraWxsZWRJdGVtcyBpZgotCQkJICogbmVjZXNzYXJ5Ci0JCQkgKi8KLQkJCWlmIChzY2Fu LT5raWxsX3ByaW9yX3R1cGxlCi0JCQkJJiYgc28tPmN1clBhZ2VEYXRhID4gMAotCQkJCSYmIHNv LT5jdXJQYWdlRGF0YSA9PSBzby0+blBhZ2VEYXRhKQotCQkJewotCi0JCQkJaWYgKHNvLT5raWxs ZWRJdGVtcyA9PSBOVUxMKQotCQkJCXsKLQkJCQkJTWVtb3J5Q29udGV4dCBvbGRDeHQgPQotCQkJ CQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKHNvLT5naXN0c3RhdGUtPnNjYW5DeHQpOwotCi0JCQkJ CXNvLT5raWxsZWRJdGVtcyA9Ci0JCQkJCQkoT2Zmc2V0TnVtYmVyICopIHBhbGxvYyhNYXhJbmRl eFR1cGxlc1BlclBhZ2UKLQkJCQkJCQkJCQkJCSogc2l6ZW9mKE9mZnNldE51bWJlcikpOwotCi0J CQkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRDeHQpOwotCQkJCX0KLQkJCQlpZiAoc28tPm51 bUtpbGxlZCA8IE1heEluZGV4VHVwbGVzUGVyUGFnZSkKLQkJCQkJc28tPmtpbGxlZEl0ZW1zW3Nv LT5udW1LaWxsZWQrK10gPQotCQkJCQkJc28tPnBhZ2VEYXRhW3NvLT5jdXJQYWdlRGF0YSAtIDFd Lm9mZm51bTsKLQkJCX0KLQkJCS8qIGZpbmQgYW5kIHByb2Nlc3MgdGhlIG5leHQgaW5kZXggcGFn ZSAqLwotCQkJZG8KLQkJCXsKLQkJCQlHSVNUU2VhcmNoSXRlbSAqaXRlbTsKLQotCQkJCWlmICgo c28tPmN1ckJsa25vICE9IEludmFsaWRCbG9ja051bWJlcikgJiYgKHNvLT5udW1LaWxsZWQgPiAw KSkKLQkJCQkJZ2lzdGtpbGxpdGVtcyhzY2FuKTsKLQotCQkJCWl0ZW0gPSBnZXROZXh0R0lTVFNl YXJjaEl0ZW0oc28pOwotCi0JCQkJaWYgKCFpdGVtKQotCQkJCQlyZXR1cm4gZmFsc2U7Ci0KLQkJ CQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwotCi0JCQkJLyogc2F2ZSBjdXJyZW50IGl0ZW0gQmxv Y2tOdW1iZXIgZm9yIG5leHQgZ2lzdGtpbGxpdGVtcygpIGNhbGwgKi8KLQkJCQlzby0+Y3VyQmxr bm8gPSBpdGVtLT5ibGtubzsKLQotCQkJCS8qCi0JCQkJICogV2hpbGUgc2Nhbm5pbmcgYSBsZWFm IHBhZ2UsIEl0ZW1Qb2ludGVycyBvZiBtYXRjaGluZyBoZWFwCi0JCQkJICogdHVwbGVzIGFyZSBz dG9yZWQgaW4gc28tPnBhZ2VEYXRhLiAgSWYgdGhlcmUgYXJlIGFueSBvbgotCQkJCSAqIHRoaXMg cGFnZSwgd2UgZmFsbCBvdXQgb2YgdGhlIGlubmVyICJkbyIgYW5kIGxvb3AgYXJvdW5kIHRvCi0J CQkJICogcmV0dXJuIHRoZW0uCi0JCQkJICovCi0JCQkJZ2lzdFNjYW5QYWdlKHNjYW4sIGl0ZW0s IGl0ZW0tPmRpc3RhbmNlcywgTlVMTCwgTlVMTCk7Ci0KLQkJCQlwZnJlZShpdGVtKTsKLQkJCX0g d2hpbGUgKHNvLT5uUGFnZURhdGEgPT0gMCk7CisJCQlwZnJlZShzY2FuLT54c19oaXR1cCk7CisJ CQlzY2FuLT54c19oaXR1cCA9IE5VTEw7CiAJCX0KKworCQkvKiByZWNvbnN0cnVjdCB0aGUgb3Jp Z2luYWxseSBpbmRleGVkIHZhbHVlcyBhcyBhIGhlYXAgdHVwbGUgKi8KKwkJb2xkY3h0ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKHNvLT5naXN0c3RhdGUtPnNjYW5DeHQpOworCQlzY2FuLT54c19o aXR1cCA9IGdpc3RGZXRjaFR1cGxlKHNvLT5naXN0c3RhdGUsIHNjYW4tPmluZGV4UmVsYXRpb24s IGl0dXApOworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKIAl9CiB9CiAKQEAgLTc1 NSw0MSArODc3LDM0IEBAIGdpc3RnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRt YXAgKnRibSkKIHsKIAlHSVNUU2Nhbk9wYXF1ZSBzbyA9IChHSVNUU2Nhbk9wYXF1ZSkgc2Nhbi0+ b3BhcXVlOwogCWludDY0CQludGlkcyA9IDA7Ci0JR0lTVFNlYXJjaEl0ZW0gZmFrZUl0ZW07CisJ SW5kZXhTY2FuQmF0Y2ggYmF0Y2g7CiAKIAlpZiAoIXNvLT5xdWFsX29rKQogCQlyZXR1cm4gMDsK IAotCXBnc3RhdF9jb3VudF9pbmRleF9zY2FuKHNjYW4tPmluZGV4UmVsYXRpb24pOwotCWlmIChz Y2FuLT5pbnN0cnVtZW50KQotCQlzY2FuLT5pbnN0cnVtZW50LT5uc2VhcmNoZXMrKzsKLQotCS8q IEJlZ2luIHRoZSBzY2FuIGJ5IHByb2Nlc3NpbmcgdGhlIHJvb3QgcGFnZSAqLwotCXNvLT5jdXJQ YWdlRGF0YSA9IHNvLT5uUGFnZURhdGEgPSAwOwotCXNjYW4tPnhzX2hpdHVwID0gTlVMTDsKLQlp ZiAoc28tPnBhZ2VEYXRhQ3h0KQotCQlNZW1vcnlDb250ZXh0UmVzZXQoc28tPnBhZ2VEYXRhQ3h0 KTsKLQotCWZha2VJdGVtLmJsa25vID0gR0lTVF9ST09UX0JMS05POwotCW1lbXNldCgmZmFrZUl0 ZW0uZGF0YS5wYXJlbnRsc24sIDAsIHNpemVvZihHaXN0TlNOKSk7Ci0JZ2lzdFNjYW5QYWdlKHNj YW4sICZmYWtlSXRlbSwgTlVMTCwgdGJtLCAmbnRpZHMpOworCS8qIEJlZ2luIHRoZSBzY2FuIGJ5 IHF1ZXVlaW5nIHRoZSByb290IHBhZ2UgKi8KKwlnaXN0U2NhblN0YXJ0KHNjYW4pOwogCiAJLyoK LQkgKiBXaGlsZSBzY2FubmluZyBhIGxlYWYgcGFnZSwgSXRlbVBvaW50ZXJzIG9mIG1hdGNoaW5n IGhlYXAgdHVwbGVzIHdpbGwKLQkgKiBiZSBzdG9yZWQgZGlyZWN0bHkgaW50byB0Ym0sIHNvIHdl IGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoIHRoZW0gaGVyZS4KKwkgKiBEcml2ZSB0aGUgc2FtZSBu b24tb3JkZXJlZCB3YWxrZXIgYXMgZ2lzdGdldGJhdGNoLCBvbmUgbGVhZiBwYWdlIGF0IGEKKwkg KiB0aW1lLCBkcmFpbmluZyBlYWNoIGJhdGNoIGludG8gdGhlIGJpdG1hcCBhbmQgcmVsZWFzaW5n IGl0IGJlZm9yZQorCSAqIGZldGNoaW5nIHRoZSBuZXh0LCBzbyBvbmx5IG9uZSBiYXRjaCBpcyBl dmVyIGxpdmUgKGNmLiBzcGdnZXRiaXRtYXApLgogCSAqLwotCWZvciAoOzspCisJd2hpbGUgKChi YXRjaCA9IGdldE5leHRCYXRjaChzY2FuKSkgIT0gTlVMTCkKIAl7Ci0JCUdJU1RTZWFyY2hJdGVt ICppdGVtID0gZ2V0TmV4dEdJU1RTZWFyY2hJdGVtKHNvKTsKKwkJYm9vbAkgICAqcmVjaGVjayA9 IEdJU1RCYXRjaEdldFJlY2hlY2soc2NhbiwgYmF0Y2gpOwogCi0JCWlmICghaXRlbSkKLQkJCWJy ZWFrOworCQlmb3IgKGludCBpID0gYmF0Y2gtPmZpcnN0SXRlbTsgaSA8PSBiYXRjaC0+bGFzdEl0 ZW07IGkrKykKKwkJeworCQkJdGJtX2FkZF90dXBsZXModGJtLCAmYmF0Y2gtPml0ZW1zW2ldLnRh YmxlVGlkLCAxLCByZWNoZWNrW2ldKTsKKwkJCW50aWRzKys7CisJCX0KIAotCQlDSEVDS19GT1Jf SU5URVJSVVBUUygpOwotCi0JCWdpc3RTY2FuUGFnZShzY2FuLCBpdGVtLCBpdGVtLT5kaXN0YW5j ZXMsIHRibSwgJm50aWRzKTsKLQotCQlwZnJlZShpdGVtKTsKKwkJLyoKKwkJICogUmV0dXJuIHRo ZSBiYXRjaCB0byB0aGUgc2luZ2xlLXNsb3QgYml0bWFwIGNhY2hlLCB0byBiZSByZXVzZWQgYnkK KwkJICogdGhlIG5leHQgZ2V0TmV4dEJhdGNoCisJCSAqLworCQlpbmRleGFtX3V0aWxfcmVsZWFz ZV9iYXRjaChzY2FuLCBiYXRjaCk7CiAJfQogCiAJcmV0dXJuIG50aWRzOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHNjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aXN0L2dpc3RzY2FuLmMKaW5kZXggYzY1ZjkzYWJkLi4zZWM0MDUzNzkgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2dpc3QvZ2lzdHNjYW4uYwpAQCAtMTA0LDEyICsxMDQsMzQgQEAgZ2lzdGJlZ2luc2NhbihSZWxh dGlvbiByLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJCXNjYW4tPnhzX29yZGVyYnl2YWxz ID0gcGFsbG9jMF9hcnJheShEYXR1bSwgc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyk7CiAJCXNjYW4t PnhzX29yZGVyYnludWxscyA9IHBhbGxvY19hcnJheShib29sLCBzY2FuLT5udW1iZXJPZk9yZGVy QnlzKTsKIAkJbWVtc2V0KHNjYW4tPnhzX29yZGVyYnludWxscywgdHJ1ZSwgc2l6ZW9mKGJvb2wp ICogc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyk7Ci0JfQogCi0Jc28tPmtpbGxlZEl0ZW1zID0gTlVM TDsJCS8qIHVudGlsIG5lZWRlZCAqLwotCXNvLT5udW1LaWxsZWQgPSAwOwotCXNvLT5jdXJCbGtu byA9IEludmFsaWRCbG9ja051bWJlcjsKLQlzby0+Y3VyUGFnZUxTTiA9IEludmFsaWRYTG9nUmVj UHRyOworCQkvKgorCQkgKiBPcmRlcmVkIHNjYW5zIGZpbGwgYSAidmlydHVhbCIgYmF0Y2ggYnkg ZHJhaW5pbmcgdGhlCisJCSAqIGRpc3RhbmNlLW9yZGVyZWQgcXVldWUsIHNvIHRoZSBiYXRjaCBz aXplIGlzIGEgdHVuaW5nIGtub2Igd2l0aCBubworCQkgKiBuYXR1cmFsIHZhbHVlLiBUZXN0aW5n IGhhcyBzaG93biB0aGF0IGEgdmVyeSBzbWFsbCBzaXplIHdpbGwKKwkJICogaW5jcmVhc2UgcGVy LWJhdGNoIG92ZXJoZWFkIChhbmQgbGlrZWx5IGluc3RydWN0aW9uLWNhY2hlIG1pc3NlcyksCisJ CSAqIHdoaWxlIGEgbGFyZ2Ugc2l6ZSAoc3VjaCBhcyBNYXhJbmRleFR1cGxlc1BlclBhZ2UpIHJp c2tzIHByb2R1Y2luZworCQkgKiBtYW55IHR1cGxlcyB0aGF0IGEgTElNSVQgbm9kZSBuZXZlciBj b25zdW1lcy4gIFRoaXMgbWF4aXRlbXNiYXRjaAorCQkgKiBpcyBhIGNvbXByb21pc2UuCisJCSAq LworCQlzY2FuLT5tYXhpdGVtc2JhdGNoID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlIC8gMzI7CisJ fQorCWVsc2UKKwkJc2Nhbi0+bWF4aXRlbXNiYXRjaCA9IE1heEluZGV4VHVwbGVzUGVyUGFnZTsK KworCXNjYW4tPmJhdGNoX2luZGV4X29wYXF1ZV9zdGF0aWMgPSBNQVhBTElHTihzaXplb2YoR0lT VEJhdGNoRGF0YSkpOworCisJLyoKKwkgKiBVc2Ugc2Vjb25kIG9wYXF1ZSBhcmVhIGZvciBvdXIg cGVyLWl0ZW0gZGF0YTogYSBHSVNUQmF0Y2hJdGVtIGFycmF5CisJICogKHdpdGggcm9vbSBmb3Ig ZWFjaCBpdGVtJ3MgT1JERVIgQlkgZGlzdGFuY2VzKSBmb3Igb3JkZXJlZCBzY2Fucywgb3IKKwkg KiBqdXN0IGFuIGFycmF5IG9mIHF1YWwgcmVjaGVjayBmbGFncyBmb3IgdW5vcmRlcmVkIHNjYW5z CisJICovCisJaWYgKHNjYW4tPm51bWJlck9mT3JkZXJCeXMgPiAwKQorCQlzY2FuLT5iYXRjaF9p bmRleF9vcGFxdWVfZHluID0KKwkJCVNpemVPZkdJU1RCYXRjaEl0ZW0oc2Nhbi0+bnVtYmVyT2ZP cmRlckJ5cykgKiBzY2FuLT5tYXhpdGVtc2JhdGNoOworCWVsc2UKKwkJc2Nhbi0+YmF0Y2hfaW5k ZXhfb3BhcXVlX2R5biA9IHNpemVvZihib29sKSAqIHNjYW4tPm1heGl0ZW1zYmF0Y2g7CisJc2Nh bi0+YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSA9IEJMQ0tTWjsKIAogCXNjYW4tPm9wYXF1ZSA9IHNv OwogCkBAIC0xNjgsOCArMTkwLDcgQEAgZ2lzdHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5LZXkga2V5LCBpbnQgbmtleXMsCiAKIAkvKgogCSAqIElmIHdlJ3JlIGRvaW5nIGFuIGluZGV4 LW9ubHkgc2Nhbiwgb24gdGhlIGZpcnN0IGNhbGwsIGFsc28gaW5pdGlhbGl6ZSBhCi0JICogdHVw bGUgZGVzY3JpcHRvciB0byByZXByZXNlbnQgdGhlIHJldHVybmVkIGluZGV4IHR1cGxlcyBhbmQg Y3JlYXRlIGEKLQkgKiBtZW1vcnkgY29udGV4dCB0byBob2xkIHRoZW0gZHVyaW5nIHRoZSBzY2Fu LgorCSAqIHR1cGxlIGRlc2NyaXB0b3IgdG8gcmVwcmVzZW50IHRoZSByZXR1cm5lZCBpbmRleCB0 dXBsZXMuCiAJICovCiAJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiAhc2Nhbi0+eHNfaGl0dXBk ZXNjKQogCXsKQEAgLTIwMywxMSArMjI0LDYgQEAgZ2lzdHJlc2NhbihJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5LZXkga2V5LCBpbnQgbmtleXMsCiAJCX0KIAkJVHVwbGVEZXNjRmluYWxpemUoc28t Pmdpc3RzdGF0ZS0+ZmV0Y2hUdXBkZXNjKTsKIAkJc2Nhbi0+eHNfaGl0dXBkZXNjID0gc28tPmdp c3RzdGF0ZS0+ZmV0Y2hUdXBkZXNjOwotCi0JCS8qIEFsc28gY3JlYXRlIGEgbWVtb3J5IGNvbnRl eHQgdGhhdCB3aWxsIGhvbGQgdGhlIHJldHVybmVkIHR1cGxlcyAqLwotCQlzby0+cGFnZURhdGFD eHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoc28tPmdpc3RzdGF0ZS0+c2NhbkN4dCwKLQkJCQkJ CQkJCQkJCSJHaVNUIHBhZ2UgZGF0YSBjb250ZXh0IiwKLQkJCQkJCQkJCQkJCUFMTE9DU0VUX0RF RkFVTFRfU0laRVMpOwogCX0KIAogCS8qIGNyZWF0ZSBuZXcsIGVtcHR5IHBhaXJpbmcgaGVhcCBm b3Igc2VhcmNoIHF1ZXVlICovCkBAIC0yMTUsOCArMjMxLDYgQEAgZ2lzdHJlc2NhbihJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5LZXkga2V5LCBpbnQgbmtleXMsCiAJc28tPnF1ZXVlID0gcGFpcmlu Z2hlYXBfYWxsb2NhdGUocGFpcmluZ2hlYXBfR0lTVFNlYXJjaEl0ZW1fY21wLCBzY2FuKTsKIAlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ3h0KTsKIAotCXNvLT5maXJzdENhbGwgPSB0cnVlOwot CiAJLyogVXBkYXRlIHNjYW4ga2V5LCBpZiBhIG5ldyBvbmUgaXMgZ2l2ZW4gKi8KIAlpZiAoa2V5 ICYmIHNjYW4tPm51bWJlck9mS2V5cyA+IDApCiAJewpAQCAtMzQwLDcgKzM1NCw4IEBAIGdpc3Ry ZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IGtleSwgaW50IG5rZXlzLAogCQkJcGZy ZWUoZm5fZXh0cmFzKTsKIAl9CiAKLQkvKiBhbnkgcHJldmlvdXMgeHNfaGl0dXAgd2lsbCBoYXZl IGJlZW4gcGZyZWUnZCBpbiBjb250ZXh0IHJlc2V0cyBhYm92ZSAqLworCWlmIChzY2FuLT54c19o aXR1cCkKKwkJcGZyZWUoc2Nhbi0+eHNfaGl0dXApOwogCXNjYW4tPnhzX2hpdHVwID0gTlVMTDsK IH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHV0aWwuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R1dGlsLmMKaW5kZXggMGY1OGY2MTg3Li5hNjg3NzE4 ZTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R1dGlsLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHV0aWwuYwpAQCAtMjMsNiArMjMsNyBAQAogI2lu Y2x1ZGUgInV0aWxzL2Zsb2F0LmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5oIgogI2lu Y2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAj aW5jbHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogI2luY2x1 ZGUgInV0aWxzL3N5c2NhY2hlLmgiCkBAIC02NzAsNiArNjcxLDcgQEAgZ2lzdEZldGNoVHVwbGUo R0lTVFNUQVRFICpnaXN0c3RhdGUsIFJlbGF0aW9uIHIsIEluZGV4VHVwbGUgdHVwbGUpCiAJRGF0 dW0JCWZldGNoYXR0W0lOREVYX01BWF9LRVlTXTsKIAlib29sCQlpc251bGxbSU5ERVhfTUFYX0tF WVNdOwogCWludAkJCWk7CisJSGVhcFR1cGxlCWh0dXA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgSW5k ZXhSZWxhdGlvbkdldE51bWJlck9mS2V5QXR0cmlidXRlcyhyKTsgaSsrKQogCXsKQEAgLTcxNyw3 ICs3MTksMTIgQEAgZ2lzdEZldGNoVHVwbGUoR0lTVFNUQVRFICpnaXN0c3RhdGUsIFJlbGF0aW9u IHIsIEluZGV4VHVwbGUgdHVwbGUpCiAJfQogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQp OwogCi0JcmV0dXJuIGhlYXBfZm9ybV90dXBsZShnaXN0c3RhdGUtPmZldGNoVHVwZGVzYywgZmV0 Y2hhdHQsIGlzbnVsbCk7CisJaHR1cCA9IGhlYXBfZm9ybV90dXBsZShnaXN0c3RhdGUtPmZldGNo VHVwZGVzYywgZmV0Y2hhdHQsIGlzbnVsbCk7CisKKwkvKiBjbGVhbnVwICovCisJTWVtb3J5Q29u dGV4dFJlc2V0KGdpc3RzdGF0ZS0+dGVtcEN4dCk7CisKKwlyZXR1cm4gaHR1cDsKIH0KIAogZmxv YXQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0uYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0uYwppbmRleCA2ODZhMDQxODAuLjZiOGRj MjE3OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHZhY3V1bS5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0uYwpAQCAtMzI2LDEwICszMjYs MTcgQEAgcmVzdGFydDoKIAlyZWN1cnNlX3RvID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCiAJLyoK LQkgKiBXZSBhcmUgbm90IGdvaW5nIHRvIHN0YXkgaGVyZSBmb3IgYSBsb25nIHRpbWUsIGFnZ3Jl c3NpdmVseSBncmFiIGFuCi0JICogZXhjbHVzaXZlIGxvY2suCisJICogR2V0IGEgZnVsbCBjbGVh bnVwIGxvY2sgb24gdGhpcyBwYWdlLiAgV2UgbXVzdCBnZXQgc3VjaCBhIGxvY2sgb24gZXZlcnkK KwkgKiBsZWFmIHBhZ2Ugb3ZlciB0aGUgY291cnNlIG9mIHRoZSB2YWN1dW0gc2Nhbiwgd2hldGhl ciBvciBub3QgaXQKKwkgKiBhY3R1YWxseSBjb250YWlucyBhbnkgZGVsZXRhYmxlIHR1cGxlcy4K KwkgKgorCSAqIE5vdGU6IHdlIGNvdWxkIGF2b2lkIHRoaXMgZm9yIGludGVybmFsIHBhZ2VzLCBi dXQgbm90IGZvciB0aGUgcm9vdAorCSAqIHBhZ2UuICBUaGUgcm9vdCBwYWdlIGNhbiBzdGFydCBv dXQgYXMgYSBsZWFmIHBhZ2UsIGJ1dCBzdWJzZXF1ZW50bHkKKwkgKiBiZWNvbWUgYW4gaW50ZXJu YWwgcGFnZSwgZXZlbiB3aGlsZSBhIHNjYW4gaG9sZHMgYW4gaW50ZXJsb2NrIHBpbiBvbgorCSAq IHRoYXQgcGFnZSAodGhpcyBpc24ndCBwb3NzaWJsZSBpbiBuYnRyZWUgYmVjYXVzZSByb290IHNw bGl0cyBhbHdheXMKKwkgKiBjcmVhdGUgYSBuZXcgcm9vdCBwYWdlLCBzdG9yZWQgd2l0aGluIGEg c2VwYXJhdGUgYmxvY2sgbnVtYmVyKS4KIAkgKi8KLQlMb2NrQnVmZmVyKGJ1ZmZlciwgR0lTVF9F WENMVVNJVkUpOworCUxvY2tCdWZmZXJGb3JDbGVhbnVwKGJ1ZmZlcik7CiAJcGFnZSA9IEJ1ZmZl ckdldFBhZ2UoYnVmZmVyKTsKIAogCWlmIChnaXN0UGFnZVJlY3ljbGFibGUocGFnZSkpCkBAIC00 MDcsOSArNDE0LDcgQEAgcmVzdGFydDoKIAkJCXsKIAkJCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAot CQkJCXJlY3B0ciA9IGdpc3RYTG9nVXBkYXRlKGJ1ZmZlciwKLQkJCQkJCQkJCQl0b2RlbGV0ZSwg bnRvZGVsZXRlLAotCQkJCQkJCQkJCU5VTEwsIDAsIEludmFsaWRCdWZmZXIpOworCQkJCXJlY3B0 ciA9IGdpc3RYTG9nVmFjdXVtKGJ1ZmZlciwgdG9kZWxldGUsIG50b2RlbGV0ZSk7CiAJCQkJUGFn ZVNldExTTihwYWdlLCByZWNwdHIpOwogCQkJfQogCQkJZWxzZQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHhsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dp c3R4bG9nLmMKaW5kZXggYWU1MzhkYzgxLi5mOWY2NTEyNjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9naXN0L2dpc3R4bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3Qv Z2lzdHhsb2cuYwpAQCAtNjcsMTQgKzY3LDE1IEBAIGdpc3RSZWRvQ2xlYXJGb2xsb3dSaWdodChY TG9nUmVhZGVyU3RhdGUgKnJlY29yZCwgdWludDggYmxvY2tfaWQpCiAgKiByZWRvIGFueSBwYWdl IHVwZGF0ZSAoZXhjZXB0IHBhZ2Ugc3BsaXQpCiAgKi8KIHN0YXRpYyB2b2lkCi1naXN0UmVkb1Bh Z2VVcGRhdGVSZWNvcmQoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCitnaXN0UmVkb1BhZ2VVcGRh dGVSZWNvcmQoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQsIGJvb2wgZ2V0X2NsZWFudXBfbG9jaykK IHsKIAlYTG9nUmVjUHRyCWxzbiA9IHJlY29yZC0+RW5kUmVjUHRyOwogCWdpc3R4bG9nUGFnZVVw ZGF0ZSAqeGxkYXRhID0gKGdpc3R4bG9nUGFnZVVwZGF0ZSAqKSBYTG9nUmVjR2V0RGF0YShyZWNv cmQpOwogCUJ1ZmZlcgkJYnVmZmVyOwogCVBhZ2UJCXBhZ2U7CiAKLQlpZiAoWExvZ1JlYWRCdWZm ZXJGb3JSZWRvKHJlY29yZCwgMCwgJmJ1ZmZlcikgPT0gQkxLX05FRURTX1JFRE8pCisJaWYgKFhM b2dSZWFkQnVmZmVyRm9yUmVkb0V4dGVuZGVkKHJlY29yZCwgMCwgUkJNX05PUk1BTCwgZ2V0X2Ns ZWFudXBfbG9jaywKKwkJCQkJCQkJCSAgJmJ1ZmZlcikgPT0gQkxLX05FRURTX1JFRE8pCiAJewog CQljaGFyCSAgICpiZWdpbjsKIAkJY2hhcgkgICAqZGF0YTsKQEAgLTQwNyw3ICs0MDgsMTAgQEAg Z2lzdF9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCXN3aXRjaCAoaW5mbykKIAl7CiAJ CWNhc2UgWExPR19HSVNUX1BBR0VfVVBEQVRFOgotCQkJZ2lzdFJlZG9QYWdlVXBkYXRlUmVjb3Jk KHJlY29yZCk7CisJCQlnaXN0UmVkb1BhZ2VVcGRhdGVSZWNvcmQocmVjb3JkLCBmYWxzZSk7CisJ CQlicmVhazsKKwkJY2FzZSBYTE9HX0dJU1RfUEFHRV9WQUNVVU06CisJCQlnaXN0UmVkb1BhZ2VV cGRhdGVSZWNvcmQocmVjb3JkLCB0cnVlKTsKIAkJCWJyZWFrOwogCQljYXNlIFhMT0dfR0lTVF9E RUxFVEU6CiAJCQlnaXN0UmVkb0RlbGV0ZVJlY29yZChyZWNvcmQpOwpAQCAtNjM3LDYgKzY0MSwz MyBAQCBnaXN0WExvZ1VwZGF0ZShCdWZmZXIgYnVmZmVyLAogCXJldHVybiByZWNwdHI7CiB9CiAK Ky8qCisgKiBXcml0ZSBYTE9HIHJlY29yZCBkZXNjcmliaW5nIGEgVkFDVVVNIGRlbGV0aW9uIG9m IGxlYWYgaW5kZXggdHVwbGVzLgorICoKKyAqIFRoaXMgdXNlcyB0aGUgc2FtZSBvbi1wYWdlIHJl cHJlc2VudGF0aW9uIGFzIGdpc3RYTG9nVXBkYXRlKCkgKHRoZSBkZWxldGlvbgorICogb2YgYSBz ZXQgb2YgaXRlbXMgZnJvbSBhIHNpbmdsZSBsZWFmIHBhZ2UpLCBidXQgaXMgbG9nZ2VkIHVuZGVy IGEgZGlzdGluY3QKKyAqIHJlY29yZCB0eXBlIHNvIHRoYXQgcmVwbGF5IGtub3dzIHRvIHRha2Ug YSBjbGVhbnVwIGxvY2sgb24gdGhlIHRhcmdldCBwYWdlLgorICovCitYTG9nUmVjUHRyCitnaXN0 WExvZ1ZhY3V1bShCdWZmZXIgYnVmZmVyLCBPZmZzZXROdW1iZXIgKnRvZGVsZXRlLCBpbnQgbnRv ZGVsZXRlKQoreworCWdpc3R4bG9nUGFnZVVwZGF0ZSB4bHJlYzsKKwlYTG9nUmVjUHRyCXJlY3B0 cjsKKworCXhscmVjLm50b2RlbGV0ZSA9IG50b2RlbGV0ZTsKKwl4bHJlYy5udG9pbnNlcnQgPSAw OworCisJWExvZ0JlZ2luSW5zZXJ0KCk7CisJWExvZ1JlZ2lzdGVyRGF0YSgmeGxyZWMsIHNpemVv ZihnaXN0eGxvZ1BhZ2VVcGRhdGUpKTsKKworCVhMb2dSZWdpc3RlckJ1ZmZlcigwLCBidWZmZXIs IFJFR0JVRl9TVEFOREFSRCk7CisJWExvZ1JlZ2lzdGVyQnVmRGF0YSgwLCB0b2RlbGV0ZSwgc2l6 ZW9mKE9mZnNldE51bWJlcikgKiBudG9kZWxldGUpOworCisJcmVjcHRyID0gWExvZ0luc2VydChS TV9HSVNUX0lELCBYTE9HX0dJU1RfUEFHRV9WQUNVVU0pOworCisJcmV0dXJuIHJlY3B0cjsKK30K KwogLyoKICAqIFdyaXRlIFhMT0cgcmVjb3JkIGRlc2NyaWJpbmcgYSBkZWxldGUgb2YgbGVhZiBp bmRleCB0dXBsZXMgbWFya2VkIGFzIERFQUQKICAqIGR1cmluZyBuZXcgdHVwbGUgaW5zZXJ0aW9u LiAgT25lIG1heSB0aGluayB0aGF0IHRoaXMgY2FzZSBpcyBhbHJlYWR5IGNvdmVyZWQKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2guYwppbmRleCA3NmUzMTkzZDkuLjEwM2EwODMzYiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2guYwpAQCAtMTE4LDYgKzExOCw3IEBAIGhhc2hoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJCS5hbWdldGJhdGNoID0gaGFzaGdldGJhdGNoLAogCQkuYW11bmd1YXJkYmF0Y2ggPSBoYXNo dW5ndWFyZGJhdGNoLAogCQkuYW1raWxsaXRlbXNiYXRjaCA9IGhhc2hraWxsaXRlbXNiYXRjaCwK KwkJLmFtZ2V0dHJhbnNmb3JtID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gaGFzaGdldGJpdG1h cCwKIAkJLmFtZW5kc2NhbiA9IGhhc2hlbmRzY2FuLAogCQkuYW1wb3NyZXNldCA9IE5VTEwsCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKaW5kZXggMzIzYzI0NWNk Li41ZjA0MDQxZGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9p bmRleHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2Fu LmMKQEAgLTk1NiwxMSArOTU2LDIzIEBAIGhlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQo SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5IZWFwRGF0YSAqaHNjYW4sCiAJCQkJCQkJCUJh dGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MsCiAJCQkJCQkJCWJvb2wgKmFsbF92aXNpYmxlKQogewor CWFtZ2V0dHJhbnNmb3JtX2Z1bmN0aW9uIGFtZ2V0dHJhbnNmb3JtID0KKwkJc2Nhbi0+aW5kZXhS ZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0dHJhbnNmb3JtOwogCUhlYXBCYXRjaERhdGEgKmhiYXRj aDsKIAogCS8qIFNldCB4c19oZWFwdGlkLCB3aGljaCBjYWxsZXIgKGFuZCBjb3JlIGV4ZWN1dG9y KSB3aWxsIG5lZWQgKi8KIAlzY2FuLT54c19oZWFwdGlkID0gc2NhbkJhdGNoLT5pdGVtc1tzY2Fu UG9zLT5pdGVtXS50YWJsZVRpZDsKIAorCS8qCisJICogTGV0IHRoZSBpbmRleCBBTSBzZXQgdGhp cyBpdGVtJ3MgcGVyLXR1cGxlIG91dHB1dC4gIEFuIEFNIHRoYXQgcHJvdmlkZXMKKwkgKiBhbWdl dHRyYW5zZm9ybSB1c2VzIGl0IHRvIHNldCB0aGUgaXRlbSdzIHF1YWwgcmVjaGVjayBmbGFnCisJ ICogKHNjYW4tPnhzX3JlY2hlY2spLCBhbiBvcmRlcmVkIHNjYW4ncyBPUkRFUiBCWSBkaXN0YW5j ZXMKKwkgKiAoeHNfb3JkZXJieXZhbHMveHNfcmVjaGVja29yZGVyYnkpLCBhbmQgYW4gaW5kZXgt b25seSBzY2FuJ3MgcmV0dXJuYWJsZQorCSAqIHR1cGxlICh4c19oaXR1cCkuCisJICovCisJaWYg KGFtZ2V0dHJhbnNmb3JtICE9IE5VTEwpCisJCWFtZ2V0dHJhbnNmb3JtKHNjYW4sIHNjYW5CYXRj aCwgc2NhblBvcy0+aXRlbSk7CisKIAlpZiAoYWxsX3Zpc2libGUgPT0gTlVMTCkKIAl7CiAJCS8q CkBAIC05NzMsOCArOTg1LDE0IEBAIGhlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoSW5k ZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5IZWFwRGF0YSAqaHNjYW4sCiAJLyogSW5kZXgtb25s eSBzY2FuICovCiAJQXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1cCk7CiAKLQlzY2FuLT54c19pdHVw ID0gKEluZGV4VHVwbGUpIChzY2FuQmF0Y2gtPmN1cnJUdXBsZXMgKwotCQkJCQkJCQkgIHNjYW5C YXRjaC0+aXRlbXNbc2NhblBvcy0+aXRlbV0udHVwbGVPZmZzZXQpOworCS8qCisJICogVW5sZXNz IHRoZSBpbmRleCBBTSBhbHJlYWR5IHByb2R1Y2VkIHRoZSByZXR1cm5hYmxlIHR1cGxlIHZpYQor CSAqIGFtZ2V0dHJhbnNmb3JtIGFib3ZlIChpbiB4c19oaXR1cCksIHNldCB0aGUgb3JpZ2luYWwg aW5kZXggdHVwbGUgdGhhdAorCSAqIGFtZ2V0YmF0Y2ggc3RvcmVkIGluIGN1cnJUdXBsZXMgaW4g eHNfaXR1cC4KKwkgKi8KKwlpZiAoYW1nZXR0cmFuc2Zvcm0gPT0gTlVMTCkKKwkJc2Nhbi0+eHNf aXR1cCA9IChJbmRleFR1cGxlKSAoc2NhbkJhdGNoLT5jdXJyVHVwbGVzICsKKwkJCQkJCQkJCSAg c2NhbkJhdGNoLT5pdGVtc1tzY2FuUG9zLT5pdGVtXS50dXBsZU9mZnNldCk7CiAKIAkvKgogCSAq IFNldCB2aXNpYmlsaXR5IGluZm8gZm9yIHRoZSBjdXJyZW50IHNjYW5Qb3MgaXRlbSAocGx1cyBw b3NzaWJseSBzb21lCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvYW1hcGku YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jCmluZGV4IGQ0YWRiYmViMi4uOTg4 NmY0OWZmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvYW1hcGkuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvYW1hcGkuYwpAQCAtNTgsNiArNTgsNyBAQCBHZXRJ bmRleEFtUm91dGluZShPaWQgYW1oYW5kbGVyKQogCS8qIEFzc2VydCB0aGF0IEFNIGRvZXNuJ3Qg aGF2ZSBhbiBpbnZhbGlkIGNvbWJpbmF0aW9uIG9mIGNhbGxiYWNrcyAqLwogCUFzc2VydCgocm91 dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKSA9PSAocm91dGluZS0+YW11bmd1YXJkYmF0Y2ggIT0g TlVMTCkpOwogCUFzc2VydChyb3V0aW5lLT5hbWtpbGxpdGVtc2JhdGNoID09IE5VTEwgfHwgcm91 dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKKwlBc3NlcnQocm91dGluZS0+YW1nZXR0cmFuc2Zv cm0gPT0gTlVMTCB8fCByb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpOwogCUFzc2VydChyb3V0 aW5lLT5hbWdldGJhdGNoICE9IE5VTEwgfHwgcm91dGluZS0+YW1wb3NyZXNldCA9PSBOVUxMKTsK IAogCXJldHVybiByb3V0aW5lOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2dlbmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCBjYTliYWU4 MDMuLjE5MjdmYWVhYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFt LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTEzMyw2ICsxMzMs NyBAQCBSZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtl eXMsIGludCBub3JkZXJieXMpCiAJc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3N0YXRpYyA9IDA7 CiAJc2Nhbi0+YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSA9IDA7CiAJc2Nhbi0+YmF0Y2hfdGFibGVf b3BhcXVlX3NpemUgPSAwOworCXNjYW4tPmJhdGNoX2luZGV4X29wYXF1ZV9keW4gPSAwOwogCXNj YW4tPmJhdGNoX2Jhc2Vfb2Zmc2V0ID0gMDsKIAogCXNjYW4tPnhzX25hbWVfY3N0cmluZ19hdHRu dW1zID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJh dGNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCmluZGV4IGU1OGUw OTg5Ny4uMmUyY2NmNmE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5k ZXhiYXRjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKQEAg LTYzMiw2ICs2MzIsNyBAQCBpbmRleGFtX3V0aWxfYWxsb2NfYmF0Y2goSW5kZXhTY2FuRGVzYyBz Y2FuKQogCQl7CiAJCQkvKiBXZSBsYXppbHkgY29tcHV0ZSBiYXRjaF9iYXNlX29mZnNldCBvbiBz Y2FuJ3MgZmlyc3QgY2FsbCAqLwogCQkJc2l6ZV90CQl0YWJsZV9hcmVhID0gMDsKKwkJCXNpemVf dAkJaW5kZXhfZHluX2FyZWEgPSBNQVhBTElHTihzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfZHlu KTsKIAogCQkJaWYgKHNjYW4tPnVzZWJhdGNocmluZykKIAkJCXsKQEAgLTY0Miw4ICs2NDMsOCBA QCBpbmRleGFtX3V0aWxfYWxsb2NfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuKQogCQkJCXRhYmxl X2FyZWEgPSBNQVhBTElHTihzY2FuLT5iYXRjaF90YWJsZV9vcGFxdWVfc2l6ZSk7CiAJCQl9CiAK LQkJCS8qIC4uLnRob3VnaCB3ZSBhbHdheXMgbmVlZCBhbiBpbmRleCBBTSBhcmVhICovCi0JCQlz Y2FuLT5iYXRjaF9iYXNlX29mZnNldCA9IHRhYmxlX2FyZWEgKworCQkJLyogLi4udGhvdWdoIHdl IGFsd2F5cyBuZWVkIGluZGV4IEFNIGFyZWFzICovCisJCQlzY2FuLT5iYXRjaF9iYXNlX29mZnNl dCA9IHRhYmxlX2FyZWEgKyBpbmRleF9keW5fYXJlYSArCiAJCQkJc2Nhbi0+YmF0Y2hfaW5kZXhf b3BhcXVlX3N0YXRpYzsKIAkJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHJlZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwppbmRleCBi ODM5MjZmOWYuLjZhY2U2NTUwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRyZWUuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCkBAIC0x NjYsNiArMTY2LDcgQEAgYnRoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWdldGJhdGNo ID0gYnRnZXRiYXRjaCwKIAkJLmFtdW5ndWFyZGJhdGNoID0gYnR1bmd1YXJkYmF0Y2gsCiAJCS5h bWtpbGxpdGVtc2JhdGNoID0gYnRraWxsaXRlbXNiYXRjaCwKKwkJLmFtZ2V0dHJhbnNmb3JtID0g TlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gYnRnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBidGVu ZHNjYW4sCiAJCS5hbXBvc3Jlc2V0ID0gYnRwb3NyZXNldCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9ybWdyZGVzYy9naXN0ZGVzYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk ZXNjL2dpc3RkZXNjLmMKaW5kZXggNjc3ODllMDI1Li4wMjFmNzJmYTAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9naXN0ZGVzYy5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9ybWdyZGVzYy9naXN0ZGVzYy5jCkBAIC02Niw2ICs2Niw3IEBAIGdpc3RfZGVzYyhTdHJp bmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJc3dpdGNoIChpbmZvKQogCXsK IAkJY2FzZSBYTE9HX0dJU1RfUEFHRV9VUERBVEU6CisJCWNhc2UgWExPR19HSVNUX1BBR0VfVkFD VVVNOgogCQkJb3V0X2dpc3R4bG9nUGFnZVVwZGF0ZShidWYsIChnaXN0eGxvZ1BhZ2VVcGRhdGUg KikgcmVjKTsKIAkJCWJyZWFrOwogCQljYXNlIFhMT0dfR0lTVF9QQUdFX1JFVVNFOgpAQCAtOTMs NiArOTQsOSBAQCBnaXN0X2lkZW50aWZ5KHVpbnQ4IGluZm8pCiAJCWNhc2UgWExPR19HSVNUX1BB R0VfVVBEQVRFOgogCQkJaWQgPSAiUEFHRV9VUERBVEUiOwogCQkJYnJlYWs7CisJCWNhc2UgWExP R19HSVNUX1BBR0VfVkFDVVVNOgorCQkJaWQgPSAiUEFHRV9WQUNVVU0iOworCQkJYnJlYWs7CiAJ CWNhc2UgWExPR19HSVNUX0RFTEVURToKIAkJCWlkID0gIkRFTEVURSI7CiAJCQlicmVhazsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwppbmRleCA3NDU0MzVkYTMuLjQ3MTUzYjRiMCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwpAQCAtOTIsNiArOTIsNyBAQCBzcGdo YW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWdldGJhdGNoID0gTlVMTCwKIAkJLmFtdW5n dWFyZGJhdGNoID0gTlVMTCwKIAkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW1nZXR0 cmFuc2Zvcm0gPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBzcGdnZXRiaXRtYXAsCiAJCS5hbWVu ZHNjYW4gPSBzcGdlbmRzY2FuLAogCQkuYW1wb3NyZXNldCA9IE5VTEwsCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwppbmRleCA4NGE5N2I3MWQuLmE2YThhOTZlNyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYworKysgYi9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCkBAIC0xMzIsMTggKzEzMiw2 IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkJfQogCQl9CiAK LQkJLyoKLQkJICogV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgcmVjaGVja2luZyBPUkRFUiBC WSBkaXN0YW5jZXMuICAoSW4KLQkJICogcHJpbmNpcGxlLCBpZiB0aGUgaW5kZXggY2FuIHN1cHBv cnQgcmV0cmlldmFsIG9mIHRoZSBvcmlnaW5hbGx5Ci0JCSAqIGluZGV4ZWQgdmFsdWUsIGl0IHNo b3VsZCBiZSBhYmxlIHRvIHByb2R1Y2UgYW4gZXhhY3QgZGlzdGFuY2UKLQkJICogY2FsY3VsYXRp b24gdG9vLiAgU28gaXQncyBub3QgY2xlYXIgdGhhdCBhZGRpbmcgY29kZSBoZXJlIGZvcgotCQkg KiByZWNoZWNrL3JlLXNvcnQgd291bGQgYmUgd29ydGggdGhlIHRyb3VibGUuICBCdXQgd2Ugc2hv dWxkIGF0IGxlYXN0Ci0JCSAqIHRocm93IGFuIGVycm9yIGlmIHNvbWVvbmUgdHJpZXMgaXQuKQot CQkgKi8KLQkJaWYgKHNjYW5kZXNjLT5udW1iZXJPZk9yZGVyQnlzID4gMCAmJiBzY2FuZGVzYy0+ eHNfcmVjaGVja29yZGVyYnkpCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZShFUlJD T0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJCSBlcnJtc2coImxvc3N5IGRpc3RhbmNl IGZ1bmN0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBpbiBpbmRleC1vbmx5IHNjYW5zIikpKTsKIAkJ cmV0dXJuIHNsb3Q7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9pbmR4cGF0aC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwppbmRl eCA5NGZlZGYzMmMuLjYyNGI2ZDBmOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BhdGgvaW5keHBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0 aC5jCkBAIC05NTEsOSArOTUxLDEyIEBAIGJ1aWxkX2luZGV4X3BhdGhzKFBsYW5uZXJJbmZvICpy b290LCBSZWxPcHRJbmZvICpyZWwsCiAJLyoKIAkgKiAzLiBDaGVjayBpZiBhbiBpbmRleC1vbmx5 IHNjYW4gaXMgcG9zc2libGUuICBJZiB3ZSdyZSBub3QgYnVpbGRpbmcKIAkgKiBwbGFpbiBpbmRl eHNjYW5zLCB0aGlzIGlzbid0IHJlbGV2YW50IHNpbmNlIGJpdG1hcCBzY2FucyBkb24ndCBzdXBw b3J0Ci0JICogaW5kZXggZGF0YSByZXRyaWV2YWwgYW55d2F5LgorCSAqIGluZGV4IGRhdGEgcmV0 cmlldmFsIGFueXdheS4gIElmIHRoZXJlIGFyZSBvcmRlcmluZyBvcGVyYXRvcnMgdGhlbiB3ZQor CSAqIGFzc3VtZSB0aGF0IGFuIGluZGV4LW9ubHkgc2NhbiBpcyB1bnNhZmUgZHVlIHRvIHRoZSBk aWZmaWN1bHR5IHdpdGgKKwkgKiBob2xkaW5nIGluZGV4IHBhZ2UgcGlucyBzdWZmaWNpZW50IHRv IGF2b2lkIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZy4KIAkgKi8KIAlpbmRleF9vbmx5X3NjYW4g PSAoc2NhbnR5cGUgIT0gU1RfQklUTUFQU0NBTiAmJgorCQkJCQkgICBvcmRlcmJ5Y2xhdXNlcyA9 PSBOSUwgJiYKIAkJCQkJICAgY2hlY2tfaW5kZXhfb25seShyZWwsIGluZGV4KSk7CiAKIAkvKgpk aWZmIC0tZ2l0IGEvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMgYi9jb250cmliL2Jsb29tL2JsdXRp bHMuYwppbmRleCAyNDlhZjQ4ZTYuLjE2ODg0MmJjNyAxMDA2NDQKLS0tIGEvY29udHJpYi9ibG9v bS9ibHV0aWxzLmMKKysrIGIvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKQEAgLTE1MCw2ICsxNTAs NyBAQCBibGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAog CQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxMLAogCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCisJ CS5hbWdldHRyYW5zZm9ybSA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGJsZ2V0Yml0bWFwLAog CQkuYW1lbmRzY2FuID0gYmxlbmRzY2FuLAogCQkuYW1wb3NyZXNldCA9IE5VTEwsCmRpZmYgLS1n aXQgYS9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvY2FzaC5vdXQgYi9jb250cmliL2J0cmVl X2dpc3QvZXhwZWN0ZWQvY2FzaC5vdXQKaW5kZXggN2ZiYzczNTU5Li41NmZkMWViNDkgMTAwNjQ0 Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9jYXNoLm91dAorKysgYi9jb250cmli L2J0cmVlX2dpc3QvZXhwZWN0ZWQvY2FzaC5vdXQKQEAgLTc0LDEwICs3NCwxMCBAQCBTRUxFQ1Qg Y291bnQoKikgRlJPTSBtb25leXRtcCBXSEVSRSBhID4gICcyMjY0OS42NCc6Om1vbmV5OwogCiBF WFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgYSwgYSA8LT4gJzIxNDcyLjc5JyBGUk9NIG1vbmV5 dG1wIE9SREVSIEJZIGEgPC0+ICcyMTQ3Mi43OScgTElNSVQgMzsKLSAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiAgTGltaXQKLSAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgbW9uZXlp ZHggb24gbW9uZXl0bXAKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIG1vbmV5aWR4IG9uIG1vbmV5 dG1wCiAgICAgICAgICBPcmRlciBCeTogKGEgPC0+ICckMjEsNDcyLjc5Jzo6bW9uZXkpCiAoMyBy b3dzKQogCmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvZGF0ZS5vdXQg Yi9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvZGF0ZS5vdXQKaW5kZXggNWRiODY0YmI4Li40 YTM2MGJlYTYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9kYXRlLm91 dAorKysgYi9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvZGF0ZS5vdXQKQEAgLTc0LDEwICs3 NCwxMCBAQCBTRUxFQ1QgY291bnQoKikgRlJPTSBkYXRldG1wIFdIRVJFIGEgPiAgJzIwMDEtMDIt MTMnOjpkYXRlOwogCiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgYSwgYSA8LT4gJzIwMDEt MDItMTMnIEZST00gZGF0ZXRtcCBPUkRFUiBCWSBhIDwtPiAnMjAwMS0wMi0xMycgTElNSVQgMzsK LSAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgTGltaXQKLSAgIC0+ICBJbmRleCBPbmx5IFNjYW4g dXNpbmcgZGF0ZWlkeCBvbiBkYXRldG1wCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBkYXRlaWR4 IG9uIGRhdGV0bXAKICAgICAgICAgIE9yZGVyIEJ5OiAoYSA8LT4gJzAyLTEzLTIwMDEnOjpkYXRl KQogKDMgcm93cykKIApkaWZmIC0tZ2l0IGEvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2Zs b2F0NC5vdXQgYi9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvZmxvYXQ0Lm91dAppbmRleCBk ZmU3MzIwNDkuLjg4NzhhMzE3YyAxMDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9naXN0L2V4cGVj dGVkL2Zsb2F0NC5vdXQKKysrIGIvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2Zsb2F0NC5v dXQKQEAgLTc0LDEwICs3NCwxMCBAQCBTRUxFQ1QgY291bnQoKikgRlJPTSBmbG9hdDR0bXAgV0hF UkUgYSA+ICAtMTc5LjA6OmZsb2F0NDsKIAogRVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUIGEs IGEgPC0+ICctMTc5LjAnIEZST00gZmxvYXQ0dG1wIE9SREVSIEJZIGEgPC0+ICctMTc5LjAnIExJ TUlUIDM7Ci0gICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBMaW1pdAotICAgLT4g IEluZGV4IE9ubHkgU2NhbiB1c2luZyBmbG9hdDRpZHggb24gZmxvYXQ0dG1wCisgICAtPiAgSW5k ZXggU2NhbiB1c2luZyBmbG9hdDRpZHggb24gZmxvYXQ0dG1wCiAgICAgICAgICBPcmRlciBCeTog KGEgPC0+ICctMTc5Jzo6cmVhbCkKICgzIHJvd3MpCiAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnRy ZWVfZ2lzdC9leHBlY3RlZC9mbG9hdDgub3V0IGIvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVk L2Zsb2F0OC5vdXQKaW5kZXggZWJkMGVmM2Q2Li43NjMwOTFiNWMgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9mbG9hdDgub3V0CisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lz dC9leHBlY3RlZC9mbG9hdDgub3V0CkBAIC03Nyw3ICs3Nyw3IEBAIFNFTEVDVCBhLCBhIDwtPiAn LTE4OTAuMCcgRlJPTSBmbG9hdDh0bXAgT1JERVIgQlkgYSA8LT4gJy0xODkwLjAnIExJTUlUIDM7 CiAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBM aW1pdAotICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBmbG9hdDhpZHggb24gZmxvYXQ4dG1w CisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBmbG9hdDhpZHggb24gZmxvYXQ4dG1wCiAgICAgICAg ICBPcmRlciBCeTogKGEgPC0+ICctMTg5MCc6OmRvdWJsZSBwcmVjaXNpb24pCiAoMyByb3dzKQog CmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvaW50Mi5vdXQgYi9jb250 cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvaW50Mi5vdXQKaW5kZXggNTBhMzMyOTM5Li4yNDVmYTRi ZTYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9pbnQyLm91dAorKysg Yi9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvaW50Mi5vdXQKQEAgLTc0LDEwICs3NCwxMCBA QCBTRUxFQ1QgY291bnQoKikgRlJPTSBpbnQydG1wIFdIRVJFIGEgPiAgMjM3OjppbnQyOwogCiBF WFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgYSwgYSA8LT4gJzIzNycgRlJPTSBpbnQydG1wIE9S REVSIEJZIGEgPC0+ICcyMzcnIExJTUlUIDM7Ci0gICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIExpbWl0Ci0g ICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGludDJpZHggb24gaW50MnRtcAorICAgLT4gIElu ZGV4IFNjYW4gdXNpbmcgaW50MmlkeCBvbiBpbnQydG1wCiAgICAgICAgICBPcmRlciBCeTogKGEg PC0+ICcyMzcnOjpzbWFsbGludCkKICgzIHJvd3MpCiAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnRy ZWVfZ2lzdC9leHBlY3RlZC9pbnQ0Lm91dCBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9p bnQ0Lm91dAppbmRleCA2YmJkYzdjM2YuLjQxYmVkMWY2ZSAxMDA2NDQKLS0tIGEvY29udHJpYi9i dHJlZV9naXN0L2V4cGVjdGVkL2ludDQub3V0CisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBl Y3RlZC9pbnQ0Lm91dApAQCAtNzQsMTAgKzc0LDEwIEBAIFNFTEVDVCBjb3VudCgqKSBGUk9NIGlu dDR0bXAgV0hFUkUgYSA+ICAyMzc6OmludDQ7CiAKIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVD VCBhLCBhIDwtPiAnMjM3JyBGUk9NIGludDR0bXAgT1JERVIgQlkgYSA8LT4gJzIzNycgTElNSVQg MzsKLSAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgTGltaXQKLSAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNp bmcgaW50NGlkeCBvbiBpbnQ0dG1wCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBpbnQ0aWR4IG9u IGludDR0bXAKICAgICAgICAgIE9yZGVyIEJ5OiAoYSA8LT4gMjM3KQogKDMgcm93cykKIApkaWZm IC0tZ2l0IGEvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2ludDgub3V0IGIvY29udHJpYi9i dHJlZV9naXN0L2V4cGVjdGVkL2ludDgub3V0CmluZGV4IGVmZjc3YzI2Yi4uMmJiZGQ3NjU3IDEw MDY0NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvaW50OC5vdXQKKysrIGIvY29u dHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2ludDgub3V0CkBAIC03Nyw3ICs3Nyw3IEBAIFNFTEVD VCBhLCBhIDwtPiAnNDY0NTcxMjkxMzU0ODQxJyBGUk9NIGludDh0bXAgT1JERVIgQlkgYSA8LT4g JzQ2NDU3MTI5MTM1NDg0MScKICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogIExpbWl0Ci0gICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGludDhp ZHggb24gaW50OHRtcAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgaW50OGlkeCBvbiBpbnQ4dG1w CiAgICAgICAgICBPcmRlciBCeTogKGEgPC0+ICc0NjQ1NzEyOTEzNTQ4NDEnOjpiaWdpbnQpCiAo MyByb3dzKQogCmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvaW50ZXJ2 YWwub3V0IGIvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2ludGVydmFsLm91dAppbmRleCA0 YzNkNDk0ZTQuLjRlZDE5NjE5OCAxMDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9naXN0L2V4cGVj dGVkL2ludGVydmFsLm91dAorKysgYi9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvaW50ZXJ2 YWwub3V0CkBAIC03Nyw3ICs3Nyw3IEBAIFNFTEVDVCBhLCBhIDwtPiAnMTk5IGRheXMgMjE6MjE6 MjMnIEZST00gaW50ZXJ2YWx0bXAgT1JERVIgQlkgYSA8LT4gJzE5OSBkYXlzIDIxCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIExpbWl0Ci0gICAtPiAgSW5kZXggT25s eSBTY2FuIHVzaW5nIGludGVydmFsaWR4IG9uIGludGVydmFsdG1wCisgICAtPiAgSW5kZXggU2Nh biB1c2luZyBpbnRlcnZhbGlkeCBvbiBpbnRlcnZhbHRtcAogICAgICAgICAgT3JkZXIgQnk6IChh IDwtPiAnQCAxOTkgZGF5cyAyMSBob3VycyAyMSBtaW5zIDIzIHNlY3MnOjppbnRlcnZhbCkKICgz IHJvd3MpCiAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC90aW1lLm91 dCBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC90aW1lLm91dAppbmRleCBlYzk1ZWY3N2Mu LjFiOWRhNGUxOSAxMDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL3RpbWUu b3V0CisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC90aW1lLm91dApAQCAtNzcsNyAr NzcsNyBAQCBTRUxFQ1QgYSwgYSA8LT4gJzEwOjU3OjExJyBGUk9NIHRpbWV0bXAgT1JERVIgQlkg YSA8LT4gJzEwOjU3OjExJyBMSU1JVCAzOwogICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgTGltaXQKLSAgIC0+ICBJ bmRleCBPbmx5IFNjYW4gdXNpbmcgdGltZWlkeCBvbiB0aW1ldG1wCisgICAtPiAgSW5kZXggU2Nh biB1c2luZyB0aW1laWR4IG9uIHRpbWV0bXAKICAgICAgICAgIE9yZGVyIEJ5OiAoYSA8LT4gJzEw OjU3OjExJzo6dGltZSB3aXRob3V0IHRpbWUgem9uZSkKICgzIHJvd3MpCiAKZGlmZiAtLWdpdCBh L2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC90aW1lc3RhbXAub3V0IGIvY29udHJpYi9idHJl ZV9naXN0L2V4cGVjdGVkL3RpbWVzdGFtcC5vdXQKaW5kZXggMGQ5NGYyZjI0Li5jYzM2MjRmMDgg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC90aW1lc3RhbXAub3V0Cisr KyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC90aW1lc3RhbXAub3V0CkBAIC03Nyw3ICs3 Nyw3IEBAIFNFTEVDVCBhLCBhIDwtPiAnMjAwNC0xMC0yNiAwODo1NTowOCcgRlJPTSB0aW1lc3Rh bXB0bXAgT1JERVIgQlkgYSA8LT4gJzIwMDQtMTAtCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBMaW1pdAotICAgLT4gIEluZGV4IE9ubHkg U2NhbiB1c2luZyB0aW1lc3RhbXBpZHggb24gdGltZXN0YW1wdG1wCisgICAtPiAgSW5kZXggU2Nh biB1c2luZyB0aW1lc3RhbXBpZHggb24gdGltZXN0YW1wdG1wCiAgICAgICAgICBPcmRlciBCeTog KGEgPC0+ICdUdWUgT2N0IDI2IDA4OjU1OjA4IDIwMDQnOjp0aW1lc3RhbXAgd2l0aG91dCB0aW1l IHpvbmUpCiAoMyByb3dzKQogCmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0 ZWQvdGltZXN0YW1wdHoub3V0IGIvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL3RpbWVzdGFt cHR6Lm91dAppbmRleCA3NWExNWE0MjUuLjg4ZDI0MDRjNCAxMDA2NDQKLS0tIGEvY29udHJpYi9i dHJlZV9naXN0L2V4cGVjdGVkL3RpbWVzdGFtcHR6Lm91dAorKysgYi9jb250cmliL2J0cmVlX2dp c3QvZXhwZWN0ZWQvdGltZXN0YW1wdHoub3V0CkBAIC0xOTcsNyArMTk3LDcgQEAgU0VMRUNUIGEs IGEgPC0+ICcyMDE4LTEyLTE4IDEwOjU5OjU0IEdNVCsyJyBGUk9NIHRpbWVzdGFtcHR6dG1wIE9S REVSIEJZIGEgPC0+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiAgTGltaXQKLSAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgdGlt ZXN0YW1wdHppZHggb24gdGltZXN0YW1wdHp0bXAKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHRp bWVzdGFtcHR6aWR4IG9uIHRpbWVzdGFtcHR6dG1wCiAgICAgICAgICBPcmRlciBCeTogKGEgPC0+ ICdUdWUgRGVjIDE4IDA0OjU5OjU0IDIwMTggUFNUJzo6dGltZXN0YW1wIHdpdGggdGltZSB6b25l KQogKDMgcm93cykKIApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCBiL2Rv Yy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKaW5kZXggNmUxZTUxMTY5Li43NWMwNzA0Y2MgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2luZGV4 YW0uc2dtbApAQCAtMTcyLDYgKzE3Miw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1Sb3V0aW5l CiAgICAgYW1nZXRiYXRjaF9mdW5jdGlvbiBhbWdldGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLwog ICAgIGFtdW5ndWFyZGJhdGNoX2Z1bmN0aW9uIGFtdW5ndWFyZGJhdGNoOyAvKiBjYW4gYmUgTlVM TCAqLwogICAgIGFta2lsbGl0ZW1zYmF0Y2hfZnVuY3Rpb24gYW1raWxsaXRlbXNiYXRjaDsJLyog Y2FuIGJlIE5VTEwgKi8KKyAgICBhbWdldHRyYW5zZm9ybV9mdW5jdGlvbiBhbWdldHRyYW5zZm9y bTsgLyogY2FuIGJlIE5VTEwgKi8KICAgICBhbWdldGJpdG1hcF9mdW5jdGlvbiBhbWdldGJpdG1h cDsgICAvKiBjYW4gYmUgTlVMTCAqLwogICAgIGFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47 CiAgICAgYW1wb3NyZXNldF9mdW5jdGlvbiBhbXBvc3Jlc2V0OyAvKiBjYW4gYmUgTlVMTCAqLwpA QCAtNzE2LDI3ICs3MTcsNTggQEAgYW1iZWdpbnNjYW4gKFJlbGF0aW9uIGluZGV4UmVsYXRpb24s CiAgICAgICBhbmQgc2libGluZyBwYWdlIGxpbmtzKS4KICAgICAgPC9wYXJhPgogICAgIDwvbGlz dGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPnNjYW4t Jmd0O2JhdGNoX2luZGV4X29wYXF1ZV9keW48L2xpdGVyYWw+OiB0aGUgc2l6ZSBvZiBhbgorICAg ICAgb3B0aW9uYWwgc2Vjb25kIHBlci1iYXRjaCBvcGFxdWUgYXJlYSwgb3IgMCBpZiB0aGUgaW5k ZXggQU0gZG9lcyBub3QgbmVlZAorICAgICAgb25lLiAgVW5saWtlIHRoZSBhcmVhIGFib3ZlLCBp dHMgc2l6ZSBuZWVkIG5vdCBiZSBrbm93biBhdCBjb21waWxlIHRpbWU7CisgICAgICB0aGUgaW5k ZXggQU0gbWF5IGNob29zZSBpdCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBzY2FuLiAgSXQgc2l0cyBp bW1lZGlhdGVseQorICAgICAgYmVmb3JlIHRoZSBzdGF0aWMgYXJlYSwgYW5kIGNvcmUgY29kZSB0 cmVhdHMgaXQgYXMgYSBzaW5nbGUgb3BhcXVlCisgICAgICBhbGxvY2F0aW9uIHRoYXQgdGhlIGlu ZGV4IEFNIGxheXMgb3V0IGhvd2V2ZXIgaXQgbGlrZXMgKGZvciBleGFtcGxlLCB0bworICAgICAg Y2FycnkgcGVyLWl0ZW0gbWF0Y2ggbWV0YWRhdGEsIHN1Y2ggYXMgYSByZWNoZWNrIGZsYWcgb3Ig b3JkZXItYnkKKyAgICAgIGRpc3RhbmNlcywgdGhhdCBtdXN0IHRyYXZlbCB3aXRoIHRoZSBiYXRj aCkuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgogICAgIDxsaXN0aXRlbT4KICAgICAg PHBhcmE+CiAgICAgICA8bGl0ZXJhbD5zY2FuLSZndDtiYXRjaF90dXBsZXNfd29ya3NwYWNlPC9s aXRlcmFsPjogdGhlIHNpemUgaW4gYnl0ZXMKICAgICAgIG9mIHRoZSBwZXItYmF0Y2ggdHVwbGUg c3RvcmFnZSB3b3Jrc3BhY2UgdXNlZCBmb3IgaW5kZXgtb25seSBzY2FucwogICAgICAgKHR5cGlj YWxseSA8bGl0ZXJhbD5CTENLU1o8L2xpdGVyYWw+KSwgb3IgMCBpZiB0aGUgaW5kZXggQU0gZG9l cyBub3QKLSAgICAgIHN1cHBvcnQgaW5kZXgtb25seSBzY2Fucy4gIFRoZSB3b3Jrc3BhY2UgaXMg YWNjZXNzaWJsZSB2aWEKLSAgICAgIDxzdHJ1Y3RmaWVsZD5iYXRjaC0mZ3Q7Y3VyclR1cGxlczwv c3RydWN0ZmllbGQ+LgorICAgICAgc3VwcG9ydCBpbmRleC1vbmx5IHNjYW5zLiAgVGhlIHdvcmtz cGFjZSBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgYmF0Y2gncworICAgICAgPHN0cnVjdGZpZWxkPmN1 cnJUdXBsZXM8L3N0cnVjdGZpZWxkPiBmaWVsZC4gIFRoZSBpbmRleCBBTSBzdG9yZXMgZWFjaAor ICAgICAgbWF0Y2hpbmcgdHVwbGUgaGVyZSBpbiBpdHMgb24tZGlzayBmb3JtYXQgKGFuCisgICAg ICA8c3RydWN0bmFtZT5JbmRleFR1cGxlPC9zdHJ1Y3RuYW1lPiwgb3IgYW5vdGhlciBvbi1kaXNr IHR1cGxlIGZvcm0gdXNlZCBieQorICAgICAgdGhlIEFNKTsgaXQgaXMgZWl0aGVyIGV4cG9zZWQg ZGlyZWN0bHkgYXMKKyAgICAgIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2l0dXA8L2xpdGVyYWw+LCBv ciBjb252ZXJ0ZWQgdG8gdGhlIHJldHVybmFibGUgdHVwbGUKKyAgICAgIGxhdGVyLCBieSA8ZnVu Y3Rpb24+YW1nZXR0cmFuc2Zvcm08L2Z1bmN0aW9uPiAoc2VlIGJlbG93KS4KICAgICAgPC9wYXJh PgogICAgIDwvbGlzdGl0ZW0+CiAgICA8L2l0ZW1pemVkbGlzdD4KICAgPC9wYXJhPgogCisgIDxw YXJhPgorICAgVGhlc2UgYmF0Y2ggZmllbGRzIGFyZSB1c3VhbGx5IHNldCBpbiA8ZnVuY3Rpb24+ YW1iZWdpbnNjYW48L2Z1bmN0aW9uPiwgYnV0IGFuCisgICBpbmRleCBhY2Nlc3MgbWV0aG9kIG1h eSBpbnN0ZWFkIHNldCBhbnkgb2YgdGhlbSBpbgorICAgPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5j dGlvbj4gd2hlbiB0aGVpciB2YWx1ZSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCB1bnRpbCB0aGVuLgor ICAgRm9yIGV4YW1wbGUsIHRoZSBzaXplIG9mIHRoZSBkeW5hbWljIG9wYXF1ZSBhcmVhIG1pZ2h0 IGRlcGVuZCBvbiB3aGV0aGVyIHRoaXMKKyAgIGlzIGFuIDxsaW5rIGxpbmtlbmQ9ImluZGV4ZXMt aW5kZXgtb25seS1zY2FucyI+aW5kZXgtb25seSBzY2FuPC9saW5rPgorICAgKDxsaXRlcmFsPnNj YW4tJmd0O3hzX3dhbnRfaXR1cDwvbGl0ZXJhbD4pLCB3aGljaCBjb3JlIGNvZGUgb25seSBzZXRz IGFmdGVyCisgICA8ZnVuY3Rpb24+YW1iZWdpbnNjYW48L2Z1bmN0aW9uPiBoYXMgcmV0dXJuZWQ7 IHN1Y2ggYW4gYWNjZXNzIG1ldGhvZCBzaXplcworICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7YmF0Y2hf aW5kZXhfb3BhcXVlX2R5bjwvbGl0ZXJhbD4gaW4KKyAgIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVu Y3Rpb24+IGluc3RlYWQuICBUaGlzIGlzIHNhZmUgYmVjYXVzZSBubyBiYXRjaCBpcyBldmVyCisg ICBhbGxvY2F0ZWQgYmVmb3JlIHRoZSBmaXJzdCA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9u PiBjYWxsLgorICA8L3BhcmE+CisKICAgPHBhcmE+CiAgICBBbiA8ZnVuY3Rpb24+YW1nZXRiYXRj aDwvZnVuY3Rpb24+IGFjY2VzcyBtZXRob2Qgd2hvc2UgcmVjaGVjayByZXF1aXJlbWVudCBpcwog ICAgYSBmaXhlZCBwcm9wZXJ0eSBvZiB0aGUgd2hvbGUgc2NhbiAocmF0aGVyIHRoYW4gc29tZXRo aW5nIHRoYXQgdmFyaWVzIGZyb20KICAgIG9uZSBtYXRjaGluZyBpdGVtIHRvIHRoZSBuZXh0KSBz aG91bGQgYWxzbyBzZXQKICAgIDxsaXRlcmFsPnNjYW4tJmd0O3hzX3JlY2hlY2s8L2xpdGVyYWw+ IGhlcmUsIGluCi0gICA8ZnVuY3Rpb24+YW1iZWdpbnNjYW48L2Z1bmN0aW9uPiwgc2luY2UgdGhl IHZhbHVlIGFwcGxpZXMgdG8gZXZlcnkgaXRlbSB0aGUKLSAgIHNjYW4gcmV0dXJucy4gIFRoZSB2 YWx1ZSBzZXQgaGVyZSBwZXJzaXN0cyBhY3Jvc3MgYW55IHN1YnNlcXVlbnQKLSAgIDxmdW5jdGlv bj5hbXJlc2NhbjwvZnVuY3Rpb24+IGNhbGxzLiAgQi10cmVlIChhbHdheXMgZmFsc2UpIGFuZCBo YXNoIChhbHdheXMKLSAgIHRydWUpIHdvcmsgdGhpcyB3YXkuCisgICA8ZnVuY3Rpb24+YW1iZWdp bnNjYW48L2Z1bmN0aW9uPjogdGhlIHZhbHVlIHRoZW4gYXBwbGllcyB0byBldmVyeSBpdGVtIHRo ZQorICAgc2NhbiByZXR1cm5zLCBhbmQgcGVyc2lzdHMgYWNyb3NzIGFueSBzdWJzZXF1ZW50Cisg ICA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPiBjYWxscy4gIFNlZSA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+CisgICBiZWxvdywgd2hpY2ggZGVzY3JpYmVzIGJvdGggdGhpcyB3 aG9sZS1zY2FuIGNhc2UgYW5kIHRoZSBwZXItaXRlbSBjYXNlIGluCisgICBkZXRhaWwuCiAgIDwv cGFyYT4KIAogICA8cGFyYT4KQEAgLTc1OCw2ICs3OTAsMTMgQEAgYW1yZXNjYW4gKEluZGV4U2Nh bkRlc2Mgc2NhbiwKICAgIHJlbWFpbnMgdGhlIHNhbWUuCiAgIDwvcGFyYT4KIAorICA8cGFyYT4K KyAgIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rpb24+IGlzIGFsc28gd2hlcmUgYW4KKyAgIDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gYWNjZXNzIG1ldGhvZCBzZXRzIGFueSBvZiB0 aGUgYmF0Y2ggZmllbGRzCisgICBkZXNjcmliZWQgdW5kZXIgPGZ1bmN0aW9uPmFtYmVnaW5zY2Fu PC9mdW5jdGlvbj4gYWJvdmUgd2hvc2UgdmFsdWUgY291bGQgbm90CisgICBiZSBkZXRlcm1pbmVk IHVudGlsIG5vdy4KKyAgPC9wYXJhPgorCiAgIDxwYXJhPgogPHByb2dyYW1saXN0aW5nPgogYm9v bApAQCAtODk0LDIzICs5MzMsNzUgQEAgYW1nZXRiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAog ICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB1c2luZyA8ZnVu Y3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IG11c3Qgc2V0Ci0gICA8bGl0ZXJhbD5zY2FuLSZn dDt4c19yZWNoZWNrPC9saXRlcmFsPiB0byBpbmRpY2F0ZSB3aGV0aGVyIHJlY2hlY2tpbmcgb2YK LSAgIHNjYW4ga2V5cyBpcyByZXF1aXJlZCwgaW4gdGhlIHNhbWUgd2F5IGFzIDxmdW5jdGlvbj5h bWdldHR1cGxlPC9mdW5jdGlvbj4KLSAgIGRvZXMuIEhvd2V2ZXIsIDxsaXRlcmFsPnNjYW4tJmd0 O3hzX3JlY2hlY2s8L2xpdGVyYWw+IG11c3QgYmUgc2V0IGNvbnNpc3RlbnRseQotICAgZm9yIGFu IGVudGlyZSBzY2FuIHJhdGhlciB0aGFuIHZhcnlpbmcgb24gYSBwZXItdHVwbGUgYmFzaXMuIFRo aXMgaXMgYSBrZXkKLSAgIGRpZmZlcmVuY2UgZnJvbSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVu Y3Rpb24+LCB3aGljaCBjYW4gc2V0Ci0gICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9s aXRlcmFsPiBpbmRlcGVuZGVudGx5IGZvciBlYWNoIHR1cGxlIGl0IHJldHVybnMuCi0gICBJbmRl eCBhY2Nlc3MgbWV0aG9kcyB0aGF0IHJlcXVpcmUgZ3JhbnVsYXIgY29udHJvbCBvdmVyCi0gICA8 bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBtdXN0IHVzZSB0aGUgPGZ1bmN0 aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPgotICAgaW50ZXJmYWNlIGluc3RlYWQgb2YgPGZ1bmN0 aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPi4KKyAgIEluZGV4IGFjY2VzcyBtZXRob2RzIHVzaW5n IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gbXVzdCBjb252ZXkKKyAgIHdoZXRoZXIg dGhlIHNjYW4ga2V5cyBuZWVkIHRvIGJlIHJlY2hlY2tlZCwgdmlhCisgICA8bGl0ZXJhbD5zY2Fu LSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiwganVzdCBhcworICAgPGZ1bmN0aW9uPmFtZ2V0dHVw bGU8L2Z1bmN0aW9uPiBhY2Nlc3MgbWV0aG9kcyBkby4gIFVubGlrZQorICAgPGZ1bmN0aW9uPmFt Z2V0dHVwbGU8L2Z1bmN0aW9uPiwgaG93ZXZlciwgYW4KKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4gYWNjZXNzIG1ldGhvZCBjYW5ub3Qgc2V0CisgICA8bGl0ZXJhbD5zY2FuLSZn dDt4c19yZWNoZWNrPC9saXRlcmFsPiBhdCB0aGUgcG9pbnQgYW4gaW5kaXZpZHVhbCBpdGVtIGlz CisgICByZXR1cm5lZCwgYmVjYXVzZSB0aGUgaW50ZXJmYWNlIGRlY291cGxlcyB0aGUgb3JkZXIg b2YKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2FsbHMgZnJvbSB0aGUgb3Jk ZXIgaW4gd2hpY2ggaXRlbXMgYXJlCisgICBsYXRlciByZXR1cm5lZCB0byB0aGUgc2Nhbi4gIFdo ZW4gdGhlIHJlY2hlY2sgcmVxdWlyZW1lbnQgaXMgYSBmaXhlZAorICAgcHJvcGVydHkgb2YgdGhl IHdob2xlIHNjYW4sIHRoZSBpbmRleCBhY2Nlc3MgbWV0aG9kIGluc3RlYWQgc2V0cworICAgPGxp dGVyYWw+c2Nhbi0mZ3Q7eHNfcmVjaGVjazwvbGl0ZXJhbD4gb25jZSwgYXQgc2NhbiBzdGFydCAo aW4gaXRzCisgICA8ZnVuY3Rpb24+YW1iZWdpbnNjYW48L2Z1bmN0aW9uPiByb3V0aW5lKTogQi10 cmVlIGFsd2F5cyBzZXRzIGl0IGZhbHNlLCBhbmQKKyAgIGhhc2ggYWx3YXlzIHNldHMgaXQgdHJ1 ZS4gIFdoZW4gdGhlIHJlcXVpcmVtZW50IGluc3RlYWQgdmFyaWVzIGZyb20gb25lCisgICBtYXRj aGluZyBpdGVtIHRvIHRoZSBuZXh0LCB0aGUgaW5kZXggYWNjZXNzIG1ldGhvZCByZWNvcmRzIHRo ZSBwZXItaXRlbQorICAgdmFsdWUgaW4gdGhlIGJhdGNoIGFuZCBwcm92aWRlcyBhbiA8ZnVuY3Rp b24+YW1nZXR0cmFuc2Zvcm08L2Z1bmN0aW9uPgorICAgY2FsbGJhY2sgKHNlZSBiZWxvdyksIHdo aWNoIHRoZSB0YWJsZSBBTSBpbnZva2VzIGZvciBlYWNoIHJldHVybmVkIGl0ZW0gdG8KKyAgIHNl dCA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBmcm9tIHRoYXQgcmVjb3Jk ZWQgc3RhdGU7IEdpU1QKKyAgIHdvcmtzIHRoaXMgd2F5LgogICA8L3BhcmE+CiAKICAgPHBhcmE+ Ci0gICBTaW1pbGFybHksIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVy ZmFjZSBkb2VzIG5vdCBjdXJyZW50bHkKLSAgIHN1cHBvcnQgaW5kZXgtb25seSBzY2FucyB0aGF0 IHJldHVybiBkYXRhIGluIHRoZSBmb3JtIG9mIGEKLSAgIDxzdHJ1Y3RuYW1lPkhlYXBUdXBsZTwv c3RydWN0bmFtZT4gcG9pbnRlciBzdG9yZWQgaW4KLSAgIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2hp dHVwPC9saXRlcmFsPi4KKyAgIEFuIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gYWNj ZXNzIG1ldGhvZCB0aGF0IHN1cHBvcnRzIGluZGV4LW9ubHkKKyAgIHNjYW5zIG11c3Qgc3VwcGx5 IHRoZSBzY2FuJ3MgcmV0dXJuYWJsZSB0dXBsZSBmb3IgZWFjaCBtYXRjaGluZyBpdGVtLCBhbmQK KyAgIG11c3QgZG8gc28gaW4gb25lIG9mIGV4YWN0bHkgdHdvIHdheXMuICBXaGljaCBvbmUgYXBw bGllcyBpcyBhIGZpeGVkCisgICBwcm9wZXJ0eSBvZiB0aGUgYWNjZXNzIG1ldGhvZCwgZGV0ZXJt aW5lZCBieSB3aGV0aGVyIGl0IHByb3ZpZGVzIGFuCisgICA8ZnVuY3Rpb24+YW1nZXR0cmFuc2Zv cm08L2Z1bmN0aW9uPiBjYWxsYmFjazoKKyAgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVt PgorICAgICA8cGFyYT4KKyAgICAgIElmIHRoZSBpbmRleCBhY2Nlc3MgbWV0aG9kIGRvZXMgPGVt cGhhc2lzPm5vdDwvZW1waGFzaXM+IHByb3ZpZGUKKyAgICAgIDxmdW5jdGlvbj5hbWdldHRyYW5z Zm9ybTwvZnVuY3Rpb24+LCBpdCBtdXN0IHN0b3JlIGVhY2ggbWF0Y2hpbmcgdHVwbGUKKyAgICAg IGluIHRoZSBiYXRjaCdzIDxzdHJ1Y3RmaWVsZD5jdXJyVHVwbGVzPC9zdHJ1Y3RmaWVsZD4gd29y a3NwYWNlIGFzIGFuCisgICAgICBvbi1kaXNrIDxzdHJ1Y3RuYW1lPkluZGV4VHVwbGU8L3N0cnVj dG5hbWU+IHdob3NlIGxheW91dCBpcyBleGFjdGx5IHdoYXQKKyAgICAgIDxsaXRlcmFsPnNjYW4t Jmd0O3hzX2l0dXBkZXNjPC9saXRlcmFsPiBkZXNjcmliZXMuICBUaGUgdGFibGUgQU0gZXhwb3Nl cworICAgICAgdGhvc2Ugc3RvcmVkIGJ5dGVzIGRpcmVjdGx5IGFzIDxsaXRlcmFsPnNjYW4tJmd0 O3hzX2l0dXA8L2xpdGVyYWw+IGFuZAorICAgICAgZGVmb3JtcyB0aGVtIGFnYWluc3QgPGxpdGVy YWw+eHNfaXR1cGRlc2M8L2xpdGVyYWw+IChqdXN0IGFzIGZvciBhbgorICAgICAgPGZ1bmN0aW9u PmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBpbmRleC1vbmx5IHNjYW4pOyB0aGUgaW5kZXggYWNjZXNz CisgICAgICBtZXRob2QgbXVzdCBub3Qgc2V0IDxsaXRlcmFsPnNjYW4tJmd0O3hzX2l0dXA8L2xp dGVyYWw+IGl0c2VsZi4gIEFtb25nCisgICAgICB0aGUgY29yZSBhY2Nlc3MgbWV0aG9kcyBvbmx5 IEItdHJlZSB1c2VzIHRoaXMgcGF0aCwgYmVjYXVzZSBpdCBzdG9yZXMKKyAgICAgIHRoZSBvcmln aW5hbCBpbmRleGVkIHZhbHVlcyB1bmNoYW5nZWQsIHNvIHRoZSBzdG9yZWQgdHVwbGUgYWxyZWFk eQorICAgICAgbWF0Y2hlcyA8bGl0ZXJhbD54c19pdHVwZGVzYzwvbGl0ZXJhbD4uCisgICAgIDwv cGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAg ICBPdGhlcndpc2UgdGhlIGluZGV4IGFjY2VzcyBtZXRob2QgbXVzdCBwcm92aWRlIGFuCisgICAg ICA8ZnVuY3Rpb24+YW1nZXR0cmFuc2Zvcm08L2Z1bmN0aW9uPiBjYWxsYmFjayB0aGF0IHByb2R1 Y2VzIHRoZQorICAgICAgcmV0dXJuYWJsZSB0dXBsZSBpbiA8bGl0ZXJhbD5zY2FuLSZndDt4c19o aXR1cDwvbGl0ZXJhbD4gKGEKKyAgICAgIDxzdHJ1Y3RuYW1lPkhlYXBUdXBsZTwvc3RydWN0bmFt ZT4gbWF0Y2hpbmcKKyAgICAgIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2hpdHVwZGVzYzwvbGl0ZXJh bD4pLiAgVGhpcyBnaXZlcyB0aGUgYWNjZXNzIG1ldGhvZAorICAgICAgY29tcGxldGUgZnJlZWRv bSB0byBmb3JtIHRoYXQgdHVwbGUgZnJvbSB3aGF0ZXZlciBpdCBzdG9yZWQgaW4KKyAgICAgIDxz dHJ1Y3RmaWVsZD5jdXJyVHVwbGVzPC9zdHJ1Y3RmaWVsZD4sIGluIHdoYXRldmVyIG9uLWRpc2sg Zm9ybWF0IHN1aXRzCisgICAgICBpdC4gIEdpU1QgdXNlcyB0aGlzIHBhdGgsIGJlY2F1c2UgdGhl IHJlcHJlc2VudGF0aW9uIGl0CisgICAgICBzdG9yZXMgZGlmZmVycyBmcm9tIHRoZSBpbmRleGVk IHZhbHVlIGFuZCBzbyBjb3VsZCBub3Qgc2F0aXNmeSB0aGUKKyAgICAgIDxsaXRlcmFsPnhzX2l0 dXBkZXNjPC9saXRlcmFsPiBsYXlvdXQgZGlyZWN0bHkuCisgICAgIDwvcGFyYT4KKyAgICA8L2xp c3RpdGVtPgorICAgPC9pdGVtaXplZGxpc3Q+CisgICBUaGUgZmlyc3QgcGF0aCBpcyBnZW5lcmlj LCBidXQgdXNlZnVsIG9ubHkgdG8gYW4gYWNjZXNzIG1ldGhvZCB0aGF0ICZtZGFzaDsKKyAgIGxp a2UgQi10cmVlICZtZGFzaDsgYWxyZWFkeSBzdG9yZXMgdHVwbGVzIGluIGV4YWN0bHkgdGhlIGlu ZGV4ZWQtYXR0cmlidXRlCisgICBmb3JtYXQ7IGFuIGFjY2VzcyBtZXRob2QgdGhhdCBzdG9yZXMg c29tZSBvdGhlciByZXByZXNlbnRhdGlvbiBtdXN0IHRha2UKKyAgIHRoZSBzZWNvbmQgcGF0aC4g IFRoZSB0d28gcGF0aHMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZTogYW4KKyAgIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gYWNjZXNzIG1ldGhvZCB0YWtlcyBvbmUgb3IgdGhlIG90aGVy LCBuZXZlcgorICAgYm90aC4gIChGb3IgaGlzdG9yaWNhbCByZWFzb25zIGFuIDxmdW5jdGlvbj5h bWdldHR1cGxlPC9mdW5jdGlvbj4gYWNjZXNzCisgICBtZXRob2QgaXMgYWxsb3dlZCB0byBzZXQg Ym90aCA8bGl0ZXJhbD5zY2FuLSZndDt4c19pdHVwPC9saXRlcmFsPiBhbmQKKyAgIDxsaXRlcmFs PnNjYW4tJmd0O3hzX2hpdHVwPC9saXRlcmFsPiBmb3IgdGhlIHNhbWUgc2NhbiAmbWRhc2g7IHRo ZQorICAgaGVhcC10dXBsZSBmb3JtIGlzIHRoZW4gdXNlZCAmbWRhc2g7IGJ1dCB0aGF0IGxhdGl0 dWRlIGlzIGEgbGVnYWN5IHF1aXJrCisgICB0aGF0IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gZGVsaWJlcmF0ZWx5IGRvZXMgbm90IHJlcGVhdC4pCiAgIDwvcGFyYT4KIAogICA8cGFy YT4KQEAgLTk0MCw4ICsxMDMxLDEwIEBAIGFtdW5ndWFyZGJhdGNoIChJbmRleFNjYW5EZXNjIHNj YW4sCiAgICBpcyBub3QgZXZlbiByZXF1aXJlZCB0byB1c2UgdGhlIHN0YW5kYXJkIGhlbHBlcgog ICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF91bmxvY2tfYmF0Y2g8L2Z1bmN0aW9uPiB0byBtYW5h Z2UgaXQuICBJbiBwcmFjdGljZSwKICAgIHRob3VnaCwgbW9zdCBvciBhbGwgaW5kZXggQU1zIHdp bGwgdXNlIHRoYXQgaGVscGVyIGFuZCBob2xkIHRoZSBzaW1wbGVzdAotICAgcG9zc2libGUgaW50 ZXJsb2NrOiBlYWNoIGd1YXJkZWQgQi10cmVlIG9yIGhhc2ggYmF0Y2gga2VlcHMgYSBzaW5nbGUK LSAgIGJ1ZmZlciBwaW4gb24gdGhlIG9uZSBpbmRleCBwYWdlIHRoZSBiYXRjaCBjYW1lIGZyb20u ICBTZWUgPHhyZWYKKyAgIHBvc3NpYmxlIGludGVybG9jazogZWFjaCBndWFyZGVkIEItdHJlZSwg aGFzaCwgb3IgR2lTVCBiYXRjaCBrZWVwcyBhCisgICBzaW5nbGUgYnVmZmVyIHBpbiBvbiB0aGUg b25lIGluZGV4IHBhZ2UgdGhlIGJhdGNoIGNhbWUgZnJvbS4gIChUaGUKKyAgIDxxdW90ZT52aXJ0 dWFsPC9xdW90ZT4gbmVhcmVzdC1uZWlnaGJvciBiYXRjaGVzIHRoYXQgR2lTVCB1c2VzIGZvciBv cmRlcmVkCisgICBzY2FucyBhcmUgbm90IGd1YXJkZWQsIGFuZCBob2xkIG5vIHN1Y2ggcGluLikg IFNlZSA8eHJlZgogICAgIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4gZm9yIGRldGFpbHMgb24g YnVmZmVyIHBpbiBtYW5hZ2VtZW50IGR1cmluZwogICAgaW5kZXggc2NhbnMuICBUaGlzIGZ1bmN0 aW9uIHdpbGwgYmUgY2FsbGVkIGF0IG1vc3Qgb25jZSBmb3IgZWFjaCBndWFyZGVkCiAgICBiYXRj aDsgaXQgaXMgbm90IGNhbGxlZCB3aGVuIHRoZSBpbmRleCBBTSBoYXMgYWxyZWFkeSB1bmd1YXJk ZWQgdGhlIGJhdGNoCkBAIC05ODUsOCArMTA3OCw4IEBAIGFta2lsbGl0ZW1zYmF0Y2ggKEluZGV4 U2NhbkRlc2Mgc2NhbiwKICAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW5kZXgg QU1zICh0aG9zZSB0aGF0IGRvbid0IGNhbiBsZWF2ZQogICAgdGhlIGZpZWxkIHNldCB0byA8bGl0 ZXJhbD5OVUxMPC9saXRlcmFsPiksIGJ1dCBkb2luZyBzbyBpcyByZWNvbW1lbmRlZCBmb3IKICAg IHBlcmZvcm1hbmNlLCBhcyBpdCBhbGxvd3MgZnV0dXJlIHNjYW5zIHRvIHNraXAga25vd24tZGVh ZCBpbmRleCBlbnRyaWVzLgotICAgQm90aCBjb3JlIGluZGV4IGFjY2VzcyBtZXRob2RzIHRoYXQg Y3VycmVudGx5IHN1cHBvcnQKLSAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gKEIt dHJlZSBhbmQgaGFzaCkgaW1wbGVtZW50CisgICBBbGwgdGhyZWUgY29yZSBpbmRleCBhY2Nlc3Mg bWV0aG9kcyB0aGF0IGN1cnJlbnRseSBzdXBwb3J0CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IChCLXRyZWUsIGhhc2gsIGFuZCBHaVNUKSBpbXBsZW1lbnQKICAgIDxsaXRlcmFs PkxQX0RFQUQ8L2xpdGVyYWw+IG1hcmtpbmcsIHRob3VnaCB0aGlyZC1wYXJ0eSBpbmRleCBhY2Nl c3MgbWV0aG9kcwogICAgYXJlIGZyZWUgdG8gY2hvb3NlIHdoZXRoZXIgdG8gaW1wbGVtZW50IHRo aXMgZmVhdHVyZS4gIFRoZSB0YWJsZSBBTSBtYXkKICAgIGNhbGwgPGZ1bmN0aW9uPnRhYmxlYW1f dXRpbF9zY2FucG9zX2tpbGxpdGVtPC9mdW5jdGlvbj4gdG8gbWFyayBkZWFkIGl0ZW1zIGFzCkBA IC0xMDI4LDcgKzExMjEsNyBAQCBhbWtpbGxpdGVtc2JhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4s CiAgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IHJlY3ljbGluZyB0YWJsZSBUSURzICZtZGFz aDsgc28gaXQgd291bGQgYmUKICAgIHVuc2FmZSB0byBhc3N1bWUgdGhhdCBpbmRleCBlbnRyaWVz IHN0aWxsIHBvaW50IHRvIHRoZSBzYW1lIGhlYXAvdGFibGUKICAgIHR1cGxlcy4gIFNpbmNlIDxs aXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IG1hcmtpbmcgaXMgb25seSBhbiBvcHRpbWl6YXRpb24K LSAgIGhpbnQsIGl0IGlzIGFsd2F5cyBzYWZlIHRvIHNraXAgaXQuICBCb3RoIEItdHJlZSBhbmQg aGFzaCB1c2UgdGhpcworICAgaGludCwgaXQgaXMgYWx3YXlzIHNhZmUgdG8gc2tpcCBpdC4gIEIt dHJlZSwgaGFzaCwgYW5kIEdpU1QgdXNlIHRoaXMKICAgIGFwcHJvYWNoLgogICA8L3BhcmE+CiAK QEAgLTEwNjcsNiArMTE2MCw0MSBAQCBhbWtpbGxpdGVtc2JhdGNoIChJbmRleFNjYW5EZXNjIHNj YW4sCiAKICAgPHBhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+Cit2b2lkCithbWdldHRyYW5zZm9ybSAo SW5kZXhTY2FuRGVzYyBzY2FuLAorICAgICAgICAgICAgICAgIEluZGV4U2NhbkJhdGNoIGJhdGNo LAorICAgICAgICAgICAgICAgIGludCBpdGVtKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICBDYWxs ZWQgYnkgdGhlIHRhYmxlIEFNIGFzIGl0IHJldHVybnMgZWFjaCBtYXRjaGluZyBpdGVtCisgICAo PHJlcGxhY2VhYmxlPml0ZW08L3JlcGxhY2VhYmxlPiBpcyBhbiBpbmRleCBpbnRvIHRoZSBiYXRj aCdzCisgICA8c3RydWN0ZmllbGQ+aXRlbXM8L3N0cnVjdGZpZWxkPiBhcnJheSkgb2YgYW4gPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPgorICAgc2NhbiwgdG8gc2V0IHVwIHRoZSBzY2Fu J3MgcGVyLXR1cGxlIG91dHB1dCBmcm9tIHBlci1pdGVtIHN0YXRlIHRoYXQgdGhlCisgICBhY2Nl c3MgbWV0aG9kIHJlY29yZGVkIGluIHRoZSBiYXRjaC4gIFRoaXMgaXMgbmVlZGVkIHdoZW4gdGhh dCBvdXRwdXQgY2Fubm90CisgICBiZSBhIGZpeGVkIHByb3BlcnR5IG9mIHRoZSB3aG9sZSBzY2Fu LiAgQW4gYWNjZXNzIG1ldGhvZCBtYXkgdXNlIGl0IHRvIHNldAorICAgPGxpdGVyYWw+c2Nhbi0m Z3Q7eHNfcmVjaGVjazwvbGl0ZXJhbD4gKHdoZW4gdGhlIG5lZWQgdG8gcmVjaGVjayB0aGUgc2Nh bgorICAgY29uZGl0aW9ucyB2YXJpZXMgZnJvbSBvbmUgbWF0Y2hpbmcgaXRlbSB0byB0aGUgbmV4 dCksIHRvIHNldAorICAgPHN0cnVjdGZpZWxkPnhzX29yZGVyYnl2YWxzPC9zdHJ1Y3RmaWVsZD4g YW5kCisgICA8c3RydWN0ZmllbGQ+eHNfcmVjaGVja29yZGVyYnk8L3N0cnVjdGZpZWxkPiBmb3Ig YW4gb3JkZXJlZAorICAgKG5lYXJlc3QtbmVpZ2hib3IpIHNjYW4sIGFuZCB0byBzZXQgPGxpdGVy YWw+c2Nhbi0mZ3Q7eHNfaGl0dXA8L2xpdGVyYWw+IGZvcgorICAgYW4gaW5kZXgtb25seSBzY2Fu IHdob3NlIHJldHVybmFibGUgdHVwbGUgbXVzdCBiZSByZWNvbnN0cnVjdGVkIHJhdGhlciB0aGFu CisgICByZXR1cm5lZCBkaXJlY3RseSBhcyBhIHN0b3JlZCBpbmRleCB0dXBsZS4KKyAgPC9wYXJh PgorCisgIDxwYXJhPgorICAgSW1wbGVtZW50aW5nIDxmdW5jdGlvbj5hbWdldHRyYW5zZm9ybTwv ZnVuY3Rpb24+IGlzIG9wdGlvbmFsLCBhbmQgaXMgb25seQorICAgbWVhbmluZ2Z1bCB0b2dldGhl ciB3aXRoIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4uICBBbiBhY2Nlc3MgbWV0aG9k CisgICBuZWVkIG9ubHkgcHJvdmlkZSBpdCB3aGVuIHNvbWUgcGFydCBvZiBpdHMgcGVyLXR1cGxl IG91dHB1dCB2YXJpZXMgZnJvbSBvbmUKKyAgIG1hdGNoaW5nIGl0ZW0gdG8gdGhlIG5leHQuICBX aGVuIGV2ZXJ5IHN1Y2ggb3V0cHV0IGlzIGluc3RlYWQgYSBmaXhlZAorICAgcHJvcGVydHkgb2Yg dGhlIHdob2xlIHNjYW4gJm1kYXNoOyBvciwgZm9yIGluZGV4LW9ubHkgc2NhbnMsIGlzIHRoZSBv bi1kaXNrCisgICBpbmRleCB0dXBsZSByZXR1cm5lZCBkaXJlY3RseSB2aWEgPGxpdGVyYWw+c2Nh bi0mZ3Q7eHNfaXR1cDwvbGl0ZXJhbD4gJm1kYXNoOworICAgdGhlIGZpZWxkIGNhbiBiZSBsZWZ0 IDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+LCBhcyBCLXRyZWUgYW5kIGhhc2ggZG8uICBHaVNUCisg ICBwcm92aWRlcyBvbmUgYmVjYXVzZSBwYXJ0cyBvZiBpdHMgcGVyLXR1cGxlIG91dHB1dCAodGhl IHJlY2hlY2sgZmxhZywgdGhlCisgICA8bGl0ZXJhbD5PUkRFUiBCWTwvbGl0ZXJhbD4gZGlzdGFu Y2VzLCBhbmQgdGhlIHJlY29uc3RydWN0ZWQgaW5kZXgtb25seQorICAgdHVwbGVzKSB2YXJ5IHBl ciBtYXRjaGluZyBpdGVtLCBhcyBkZXNjcmliZWQgYWJvdmUuCisgIDwvcGFyYT4KKworICA8cGFy YT4KKzxwcm9ncmFtbGlzdGluZz4KIGludDY0CiBhbWdldGJpdG1hcCAoSW5kZXhTY2FuRGVzYyBz Y2FuLAogICAgICAgICAgICAgIFRJREJpdG1hcCAqdGJtKTsKQEAgLTEzNjQsOCArMTQ5MiwyNiBA QCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwg T2lkIG9wY2ludHlwZSk7CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIE5vdGUgdGhhdCA8ZnVu Y3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHNjYW5zIGRvIG5vdCBjdXJyZW50bHkgc3VwcG9y dAotICAgb3JkZXJpbmcgb3BlcmF0b3JzLgorICAgQW4gPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiBhY2Nlc3MgbWV0aG9kIGNhbiBzdXBwb3J0IG9yZGVyaW5nCisgICBvcGVyYXRvcnMg YnkgcHJvdmlkaW5nIGFuIDxmdW5jdGlvbj5hbWdldHRyYW5zZm9ybTwvZnVuY3Rpb24+IGNhbGxi YWNrOiBpdAorICAgcmVjb3JkcyBlYWNoIG1hdGNoaW5nIGl0ZW0ncyBvcmRlcmluZyB2YWx1ZXMg aW4gdGhlIGJhdGNoLCBhbmQgdGhlIHRhYmxlIEFNCisgICBjYWxscyA8ZnVuY3Rpb24+YW1nZXR0 cmFuc2Zvcm08L2Z1bmN0aW9uPiBhcyBpdCByZXR1cm5zIGVhY2ggaXRlbSB0byBzZXQKKyAgIDxz dHJ1Y3RmaWVsZD54c19vcmRlcmJ5dmFsczwvc3RydWN0ZmllbGQ+IGFuZAorICAgPHN0cnVjdGZp ZWxkPnhzX3JlY2hlY2tvcmRlcmJ5PC9zdHJ1Y3RmaWVsZD4gZnJvbSB0aGF0IHJlY29yZGVkIHN0 YXRlLiAgR2lTVAorICAgdXNlcyB0aGlzIGZvciBuZWFyZXN0LW5laWdoYm9yIHNjYW5zLiAgQXMg d2l0aAorICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfcmVjaGVjazwvbGl0ZXJhbD4sIHRoZXNlIHZh bHVlcyBjYW5ub3QgYmUgc2V0IGRpcmVjdGx5IGFzCisgICBpdGVtcyBhcmUgcmV0dXJuZWQuCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFNjYW5zIHRoYXQgdXNlIG9yZGVyaW5nIG9wZXJhdG9y cyBhcmUgbmV2ZXIgcGxhbm5lZCBhcyBpbmRleC1vbmx5IHNjYW5zLgorICAgQmVjYXVzZSBhbiBv cmRlcmVkIHNjYW4gY2FuIGNvbGxlY3QgbWF0Y2hpbmcgaXRlbXMgZnJvbSBtYW55IGluZGV4IGxl YWYKKyAgIHBhZ2VzIHdpdGhvdXQgcmV0YWluaW5nIGEgYnVmZmVyIHBpbiBvbiBhbnkgb2YgdGhl bSAoR2lTVCdzCisgICA8cXVvdGU+dmlydHVhbDwvcXVvdGU+IG5lYXJlc3QtbmVpZ2hib3IgYmF0 Y2hlcyB3b3JrIHRoaXMgd2F5KSwgaXQgaGFzIG5vCisgICBwaW4gdG8gc2VydmUgYXMgdGhlIGlu dGVybG9jayBhZ2FpbnN0IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyB0aGF0IGFuCisgICBpbmRl eC1vbmx5IHNjYW4gZGVwZW5kcyBvbiAoc2VlIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmci Lz4pLiAgVGhlCisgICBwbGFubmVyIHRoZXJlZm9yZSBjb3N0cyBhbmQgZXhlY3V0ZXMgc3VjaCBz Y2FucyBhcyBwbGFpbiBpbmRleCBzY2Fucywgd2hpY2gKKyAgIGFsd2F5cyBmZXRjaCBhbmQgcmVj aGVjayB0aGUgaGVhcCB0dXBsZS4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jIGIvc3JjL3Rl c3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCmluZGV4IDNmNWJlNjA4 Mi4uYzY5OTBjYWI1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2Ft L2R1bW15X2luZGV4X2FtLmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9k dW1teV9pbmRleF9hbS5jCkBAIC0zMzgsNiArMzM4LDcgQEAgZGloYW5kbGVyKFBHX0ZVTkNUSU9O X0FSR1MpCiAJCS5hbWdldGJhdGNoID0gTlVMTCwKIAkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwK IAkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW1nZXR0cmFuc2Zvcm0gPSBOVUxMLAog CQkuYW1nZXRiaXRtYXAgPSBOVUxMLAogCQkuYW1lbmRzY2FuID0gZGllbmRzY2FuLAogCQkuYW1w b3NyZXNldCA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2luZGV4L2V4cGVj dGVkL2tpbGx0dXBsZXMub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9leHBlY3RlZC9raWxs dHVwbGVzLm91dAppbmRleCBhM2RiMmM0MDkuLjExMGMzZDQ0NSAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvbW9kdWxlcy9pbmRleC9leHBlY3RlZC9raWxsdHVwbGVzLm91dAorKysgYi9zcmMvdGVzdC9t b2R1bGVzL2luZGV4L2V4cGVjdGVkL2tpbGx0dXBsZXMub3V0CkBAIC0xNTIsNiArMTUyLDgzIEBA IGYKIHN0ZXAgZHJvcF90YWJsZTogRFJPUCBUQUJMRSBJRiBFWElTVFMga2lsbF9wcmlvcl90dXBs ZTsKIHN0ZXAgZHJvcF9leHRfYnRyZWVfZ2lzdDogRFJPUCBFWFRFTlNJT04gYnRyZWVfZ2lzdDsK IAorc3RhcnRpbmcgcGVybXV0YXRpb246IGNyZWF0ZV90YWJsZSBmaWxsXzUwMCBjcmVhdGVfZXh0 X2J0cmVlX2dpc3QgY3JlYXRlX2dpc3QgZmx1c2ggZGlzYWJsZV9zZXEgZGlzYWJsZV9iaXRtYXAg bWVhc3VyZSBhY2Nlc3Nfb3JkZXJlZCBmbHVzaCByZXN1bHQgbWVhc3VyZSBhY2Nlc3Nfb3JkZXJl ZCBmbHVzaCByZXN1bHQgZGVsZXRlIGZsdXNoIG1lYXN1cmUgYWNjZXNzX29yZGVyZWQgZmx1c2gg cmVzdWx0IG1lYXN1cmUgYWNjZXNzX29yZGVyZWQgZmx1c2ggcmVzdWx0IGRyb3BfdGFibGUgZHJv cF9leHRfYnRyZWVfZ2lzdAorc3RlcCBjcmVhdGVfdGFibGU6IENSRUFURSBURU1QT1JBUlkgVEFC TEUga2lsbF9wcmlvcl90dXBsZShrZXkgaW50IG5vdCBudWxsLCBjYXQgdGV4dCBub3QgbnVsbCk7 CitzdGVwIGZpbGxfNTAwOiBJTlNFUlQgSU5UTyBraWxsX3ByaW9yX3R1cGxlKGtleSwgY2F0KSBT RUxFQ1QgZy5pLCAnYScgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwKSBnKGkpOworc3RlcCBj cmVhdGVfZXh0X2J0cmVlX2dpc3Q6IENSRUFURSBFWFRFTlNJT04gYnRyZWVfZ2lzdDsKK3N0ZXAg Y3JlYXRlX2dpc3Q6IENSRUFURSBJTkRFWCBraWxsX3ByaW9yX3R1cGxlX2dpc3QgT04ga2lsbF9w cmlvcl90dXBsZSBVU0lORyBnaXN0IChrZXkpOworc3RlcCBmbHVzaDogU0VMRUNUIEZST00gcGdf c3RhdF9mb3JjZV9uZXh0X2ZsdXNoKCk7CitzdGVwIGRpc2FibGVfc2VxOiBTRVQgZW5hYmxlX3Nl cXNjYW4gPSBmYWxzZTsKK3N0ZXAgZGlzYWJsZV9iaXRtYXA6IFNFVCBlbmFibGVfYml0bWFwc2Nh biA9IGZhbHNlOworc3RlcCBtZWFzdXJlOiBVUERBVEUgY291bnRlciBTRVQgaGVhcF9hY2Nlc3Nl cyA9IChTRUxFQ1QgaGVhcF9ibGtzX3JlYWQgKyBoZWFwX2Jsa3NfaGl0IEZST00gcGdfc3RhdGlv X2FsbF90YWJsZXMgV0hFUkUgcmVsbmFtZSA9ICdraWxsX3ByaW9yX3R1cGxlJyk7CitzdGVwIGFj Y2Vzc19vcmRlcmVkOiBFWFBMQUlOIChBTkFMWVpFLCBDT1NUUyBPRkYsIFRJTUlORyBPRkYsIFNV TU1BUlkgT0ZGLCBCVUZGRVJTIE9GRikgU0VMRUNUICogRlJPTSBraWxsX3ByaW9yX3R1cGxlIE9S REVSIEJZIGtleSA8LT4gMTsKK1FVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmRleCBTY2FuIHVzaW5nIGtpbGxfcHJpb3JfdHVw bGVfZ2lzdCBvbiBraWxsX3ByaW9yX3R1cGxlIChhY3R1YWwgcm93cz01MDAuMDAgbG9vcHM9MSkK KyAgT3JkZXIgQnk6IChrZXkgPC0+IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBJbmRleCBTZWFyY2hlczogMSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCisoMyByb3dzKQorCitzdGVwIGZsdXNoOiBTRUxFQ1QgRlJPTSBwZ19zdGF0X2ZvcmNl X25leHRfZmx1c2goKTsKK3N0ZXAgcmVzdWx0OiBTRUxFQ1QgKChoZWFwX2Jsa3NfcmVhZCArIGhl YXBfYmxrc19oaXQgLSBjb3VudGVyLmhlYXBfYWNjZXNzZXMpID4gMCkgQVMgaGFzX25ld19oZWFw X2FjY2Vzc2VzIEZST00gY291bnRlciwgcGdfc3RhdGlvX2FsbF90YWJsZXMgV0hFUkUgcmVsbmFt ZSA9ICdraWxsX3ByaW9yX3R1cGxlJzsKK2hhc19uZXdfaGVhcF9hY2Nlc3NlcworLS0tLS0tLS0t LS0tLS0tLS0tLS0tCit0ICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykKKworc3RlcCBtZWFz dXJlOiBVUERBVEUgY291bnRlciBTRVQgaGVhcF9hY2Nlc3NlcyA9IChTRUxFQ1QgaGVhcF9ibGtz X3JlYWQgKyBoZWFwX2Jsa3NfaGl0IEZST00gcGdfc3RhdGlvX2FsbF90YWJsZXMgV0hFUkUgcmVs bmFtZSA9ICdraWxsX3ByaW9yX3R1cGxlJyk7CitzdGVwIGFjY2Vzc19vcmRlcmVkOiBFWFBMQUlO IChBTkFMWVpFLCBDT1NUUyBPRkYsIFRJTUlORyBPRkYsIFNVTU1BUlkgT0ZGLCBCVUZGRVJTIE9G RikgU0VMRUNUICogRlJPTSBraWxsX3ByaW9yX3R1cGxlIE9SREVSIEJZIGtleSA8LT4gMTsKK1FV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCitJbmRleCBTY2FuIHVzaW5nIGtpbGxfcHJpb3JfdHVwbGVfZ2lzdCBvbiBraWxsX3ByaW9y X3R1cGxlIChhY3R1YWwgcm93cz01MDAuMDAgbG9vcHM9MSkKKyAgT3JkZXIgQnk6IChrZXkgPC0+ IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorICBJbmRleCBTZWFyY2hlczogMSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisoMyByb3dzKQorCitz dGVwIGZsdXNoOiBTRUxFQ1QgRlJPTSBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2goKTsKK3N0ZXAg cmVzdWx0OiBTRUxFQ1QgKChoZWFwX2Jsa3NfcmVhZCArIGhlYXBfYmxrc19oaXQgLSBjb3VudGVy LmhlYXBfYWNjZXNzZXMpID4gMCkgQVMgaGFzX25ld19oZWFwX2FjY2Vzc2VzIEZST00gY291bnRl ciwgcGdfc3RhdGlvX2FsbF90YWJsZXMgV0hFUkUgcmVsbmFtZSA9ICdraWxsX3ByaW9yX3R1cGxl JzsKK2hhc19uZXdfaGVhcF9hY2Nlc3NlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0ICAgICAg ICAgICAgICAgICAgICAKKygxIHJvdykKKworc3RlcCBkZWxldGU6IERFTEVURSBGUk9NIGtpbGxf cHJpb3JfdHVwbGU7CitzdGVwIGZsdXNoOiBTRUxFQ1QgRlJPTSBwZ19zdGF0X2ZvcmNlX25leHRf Zmx1c2goKTsKK3N0ZXAgbWVhc3VyZTogVVBEQVRFIGNvdW50ZXIgU0VUIGhlYXBfYWNjZXNzZXMg PSAoU0VMRUNUIGhlYXBfYmxrc19yZWFkICsgaGVhcF9ibGtzX2hpdCBGUk9NIHBnX3N0YXRpb19h bGxfdGFibGVzIFdIRVJFIHJlbG5hbWUgPSAna2lsbF9wcmlvcl90dXBsZScpOworc3RlcCBhY2Nl c3Nfb3JkZXJlZDogRVhQTEFJTiAoQU5BTFlaRSwgQ09TVFMgT0ZGLCBUSU1JTkcgT0ZGLCBTVU1N QVJZIE9GRiwgQlVGRkVSUyBPRkYpIFNFTEVDVCAqIEZST00ga2lsbF9wcmlvcl90dXBsZSBPUkRF UiBCWSBrZXkgPC0+IDE7CitRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCitJbmRleCBTY2FuIHVzaW5nIGtpbGxfcHJpb3JfdHVwbGVfZ2lz dCBvbiBraWxsX3ByaW9yX3R1cGxlIChhY3R1YWwgcm93cz0wLjAwIGxvb3BzPTEpCisgIE9yZGVy IEJ5OiAoa2V5IDwtPiAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCisgIEluZGV4IFNlYXJjaGVzOiAxICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisoMyBy b3dzKQorCitzdGVwIGZsdXNoOiBTRUxFQ1QgRlJPTSBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2go KTsKK3N0ZXAgcmVzdWx0OiBTRUxFQ1QgKChoZWFwX2Jsa3NfcmVhZCArIGhlYXBfYmxrc19oaXQg LSBjb3VudGVyLmhlYXBfYWNjZXNzZXMpID4gMCkgQVMgaGFzX25ld19oZWFwX2FjY2Vzc2VzIEZS T00gY291bnRlciwgcGdfc3RhdGlvX2FsbF90YWJsZXMgV0hFUkUgcmVsbmFtZSA9ICdraWxsX3By aW9yX3R1cGxlJzsKK2hhc19uZXdfaGVhcF9hY2Nlc3NlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0t Cit0ICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykKKworc3RlcCBtZWFzdXJlOiBVUERBVEUg Y291bnRlciBTRVQgaGVhcF9hY2Nlc3NlcyA9IChTRUxFQ1QgaGVhcF9ibGtzX3JlYWQgKyBoZWFw X2Jsa3NfaGl0IEZST00gcGdfc3RhdGlvX2FsbF90YWJsZXMgV0hFUkUgcmVsbmFtZSA9ICdraWxs X3ByaW9yX3R1cGxlJyk7CitzdGVwIGFjY2Vzc19vcmRlcmVkOiBFWFBMQUlOIChBTkFMWVpFLCBD T1NUUyBPRkYsIFRJTUlORyBPRkYsIFNVTU1BUlkgT0ZGLCBCVUZGRVJTIE9GRikgU0VMRUNUICog RlJPTSBraWxsX3ByaW9yX3R1cGxlIE9SREVSIEJZIGtleSA8LT4gMTsKK1FVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luZGV4IFNjYW4g dXNpbmcga2lsbF9wcmlvcl90dXBsZV9naXN0IG9uIGtpbGxfcHJpb3JfdHVwbGUgKGFjdHVhbCBy b3dzPTAuMDAgbG9vcHM9MSkKKyAgT3JkZXIgQnk6IChrZXkgPC0+IDEpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgSW5kZXgg U2VhcmNoZXM6IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKygzIHJvd3MpCisKK3N0ZXAgZmx1c2g6IFNFTEVDVCBGUk9N IHBnX3N0YXRfZm9yY2VfbmV4dF9mbHVzaCgpOworc3RlcCByZXN1bHQ6IFNFTEVDVCAoKGhlYXBf Ymxrc19yZWFkICsgaGVhcF9ibGtzX2hpdCAtIGNvdW50ZXIuaGVhcF9hY2Nlc3NlcykgPiAwKSBB UyBoYXNfbmV3X2hlYXBfYWNjZXNzZXMgRlJPTSBjb3VudGVyLCBwZ19zdGF0aW9fYWxsX3RhYmxl cyBXSEVSRSByZWxuYW1lID0gJ2tpbGxfcHJpb3JfdHVwbGUnOworaGFzX25ld19oZWFwX2FjY2Vz c2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3QgICAgICAgICAgICAgICAgICAgIAorKDEgcm93 KQorCitzdGVwIGRyb3BfdGFibGU6IERST1AgVEFCTEUgSUYgRVhJU1RTIGtpbGxfcHJpb3JfdHVw bGU7CitzdGVwIGRyb3BfZXh0X2J0cmVlX2dpc3Q6IERST1AgRVhURU5TSU9OIGJ0cmVlX2dpc3Q7 CisKIHN0YXJ0aW5nIHBlcm11dGF0aW9uOiBjcmVhdGVfdGFibGUgZmlsbF8xMCBjcmVhdGVfZXh0 X2J0cmVlX2dpc3QgY3JlYXRlX2dpc3QgZmx1c2ggZGlzYWJsZV9zZXEgZGlzYWJsZV9iaXRtYXAg bWVhc3VyZSBhY2Nlc3MgZmx1c2ggcmVzdWx0IG1lYXN1cmUgYWNjZXNzIGZsdXNoIHJlc3VsdCBk ZWxldGUgZmx1c2ggbWVhc3VyZSBhY2Nlc3MgZmx1c2ggcmVzdWx0IG1lYXN1cmUgYWNjZXNzIGZs dXNoIHJlc3VsdCBkcm9wX3RhYmxlIGRyb3BfZXh0X2J0cmVlX2dpc3QKIHN0ZXAgY3JlYXRlX3Rh YmxlOiBDUkVBVEUgVEVNUE9SQVJZIFRBQkxFIGtpbGxfcHJpb3JfdHVwbGUoa2V5IGludCBub3Qg bnVsbCwgY2F0IHRleHQgbm90IG51bGwpOwogc3RlcCBmaWxsXzEwOiBJTlNFUlQgSU5UTyBraWxs X3ByaW9yX3R1cGxlKGtleSwgY2F0KSBTRUxFQ1QgZy5pLCAnYScgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwgMTApIGcoaSk7CkBAIC0yMjMsNyArMzAwLDcgQEAgc3RlcCBmbHVzaDogU0VMRUNUIEZS T00gcGdfc3RhdF9mb3JjZV9uZXh0X2ZsdXNoKCk7CiBzdGVwIHJlc3VsdDogU0VMRUNUICgoaGVh cF9ibGtzX3JlYWQgKyBoZWFwX2Jsa3NfaGl0IC0gY291bnRlci5oZWFwX2FjY2Vzc2VzKSA+IDAp IEFTIGhhc19uZXdfaGVhcF9hY2Nlc3NlcyBGUk9NIGNvdW50ZXIsIHBnX3N0YXRpb19hbGxfdGFi bGVzIFdIRVJFIHJlbG5hbWUgPSAna2lsbF9wcmlvcl90dXBsZSc7CiBoYXNfbmV3X2hlYXBfYWNj ZXNzZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdCAgICAgICAgICAgICAgICAgICAgCitmICAg ICAgICAgICAgICAgICAgICAKICgxIHJvdykKIAogc3RlcCBkcm9wX3RhYmxlOiBEUk9QIFRBQkxF IElGIEVYSVNUUyBraWxsX3ByaW9yX3R1cGxlOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxl cy9pbmRleC9zcGVjcy9raWxsdHVwbGVzLnNwZWMgYi9zcmMvdGVzdC9tb2R1bGVzL2luZGV4L3Nw ZWNzL2tpbGx0dXBsZXMuc3BlYwppbmRleCAzYjk4ZmY5ZjcuLmY1ZDJmZDc3MyAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9zcGVjcy9raWxsdHVwbGVzLnNwZWMKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy9pbmRleC9zcGVjcy9raWxsdHVwbGVzLnNwZWMKQEAgLTQ3LDYgKzQ3LDkg QEAgc3RlcCByZXN1bHQgeyBTRUxFQ1QgKChoZWFwX2Jsa3NfcmVhZCArIGhlYXBfYmxrc19oaXQg LSBjb3VudGVyLmhlYXBfYWNjZXNzZXMpID4KIAogc3RlcCBhY2Nlc3MgeyBFWFBMQUlOIChBTkFM WVpFLCBDT1NUUyBPRkYsIFRJTUlORyBPRkYsIFNVTU1BUlkgT0ZGLCBCVUZGRVJTIE9GRikgU0VM RUNUICogRlJPTSBraWxsX3ByaW9yX3R1cGxlIFdIRVJFIGtleSA9IDE7IH0KIAorIyBuZWFyZXN0 LW5laWdoYm9yIChvcmRlci1ieSBvcGVyYXRvcikgc2NhbiAoY2Fubm90IHNldCBMUF9ERUFEIGJp dHMpCitzdGVwIGFjY2Vzc19vcmRlcmVkIHsgRVhQTEFJTiAoQU5BTFlaRSwgQ09TVFMgT0ZGLCBU SU1JTkcgT0ZGLCBTVU1NQVJZIE9GRiwgQlVGRkVSUyBPRkYpIFNFTEVDVCAqIEZST00ga2lsbF9w cmlvcl90dXBsZSBPUkRFUiBCWSBrZXkgPC0+IDE7IH0KKwogc3RlcCBkZWxldGUgeyBERUxFVEUg RlJPTSBraWxsX3ByaW9yX3R1cGxlOyB9CiAKIHN0ZXAgZHJvcF90YWJsZSB7IERST1AgVEFCTEUg SUYgRVhJU1RTIGtpbGxfcHJpb3JfdHVwbGU7IH0KQEAgLTk2LDcgKzk5LDIwIEBAIHBlcm11dGF0 aW9uCiAgIG1lYXN1cmUgYWNjZXNzIGZsdXNoIHJlc3VsdAogICBkcm9wX3RhYmxlIGRyb3BfZXh0 X2J0cmVlX2dpc3QKIAotIyBUZXN0IGdpc3QsIGJ1dCB3aXRoIGZld2VyIHJvd3MgLSBzaG93cyB0 aGF0IGtpbGxpdGVtcyBkb2Vzbid0IHdvcmsgYW55bW9yZSEKKyMgR2lTVCBkb2Vzbid0IHNldCBM UF9ERUFEIGJpdHMgZm9yIG9yZGVyZWQgc2NhbnMsIHNvIGV2ZXJ5IGFjY2VzcyByZS12aXNpdHMK KyMgdGhlIGhlYXAKK3Blcm11dGF0aW9uCisgIGNyZWF0ZV90YWJsZSBmaWxsXzUwMCBjcmVhdGVf ZXh0X2J0cmVlX2dpc3QgY3JlYXRlX2dpc3QgZmx1c2gKKyAgZGlzYWJsZV9zZXEgZGlzYWJsZV9i aXRtYXAKKyAgbWVhc3VyZSBhY2Nlc3Nfb3JkZXJlZCBmbHVzaCByZXN1bHQKKyAgbWVhc3VyZSBh Y2Nlc3Nfb3JkZXJlZCBmbHVzaCByZXN1bHQKKyAgZGVsZXRlIGZsdXNoCisgIG1lYXN1cmUgYWNj ZXNzX29yZGVyZWQgZmx1c2ggcmVzdWx0CisgIG1lYXN1cmUgYWNjZXNzX29yZGVyZWQgZmx1c2gg cmVzdWx0CisgIGRyb3BfdGFibGUgZHJvcF9leHRfYnRyZWVfZ2lzdAorCisjIFRlc3QgZ2lzdCB3 aXRoIGZld2VyIHJvd3MsIGV4ZXJjaXNpbmcgdGhlIGNhc2Ugd2hlcmUgYWxsIHRoZSBkZWFkIHR1 cGxlcyBhcmUKKyMgb24gYSBzaW5nbGUgcGFnZQogcGVybXV0YXRpb24KICAgY3JlYXRlX3RhYmxl IGZpbGxfMTAgY3JlYXRlX2V4dF9idHJlZV9naXN0IGNyZWF0ZV9naXN0IGZsdXNoCiAgIGRpc2Fi bGVfc2VxIGRpc2FibGVfYml0bWFwCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2NyZWF0ZV9pbmRleC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9p bmRleC5vdXQKaW5kZXggNTU1MzhjNGM0Li45NzBiODU3YzYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQKQEAgLTQ3NSw5ICs0NzUsOSBAQCBTRUxFQ1QgY291 bnQoKikgRlJPTSBwb2ludF90YmwgcCBXSEVSRSBwLmYxIH49ICcoLTUsIC0xMiknOwogCiBFWFBM QUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgKiBGUk9NIHBvaW50X3RibCBPUkRFUiBCWSBmMSA8LT4g JzAsMSc7Ci0gICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW5kZXggT25s eSBTY2FuIHVzaW5nIGdwb2ludGluZCBvbiBwb2ludF90YmwKKyAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgZ3BvaW50aW5kIG9uIHBvaW50X3RibAogICAgT3Jk ZXIgQnk6IChmMSA8LT4gJygwLDEpJzo6cG9pbnQpCiAoMiByb3dzKQogCkBAIC01MTMsOSArNTEz LDkgQEAgU0VMRUNUICogRlJPTSBwb2ludF90YmwgV0hFUkUgZjEgSVMgTlVMTDsKIAogRVhQTEFJ TiAoQ09TVFMgT0ZGKQogU0VMRUNUICogRlJPTSBwb2ludF90YmwgV0hFUkUgZjEgSVMgTk9UIE5V TEwgT1JERVIgQlkgZjEgPC0+ICcwLDEnOwotICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQotIEluZGV4IE9ubHkgU2NhbiB1c2luZyBncG9pbnRpbmQgb24gcG9pbnRfdGJsCisg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIGdwb2ludGluZCBv biBwb2ludF90YmwKICAgIEluZGV4IENvbmQ6IChmMSBJUyBOT1QgTlVMTCkKICAgIE9yZGVyIEJ5 OiAoZjEgPC0+ICcoMCwxKSc6OnBvaW50KQogKDMgcm93cykKQEAgLTUzOSw3ICs1MzksNyBAQCBF WFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgKiBGUk9NIHBvaW50X3RibCBXSEVSRSBmMSA8QCAn KC0xMCwtMTApLCgxMCwxMCknOjogYm94IE9SREVSIEJZIGYxIDwtPiAnMCwxJzsKICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW5kZXggT25seSBTY2FuIHVzaW5n IGdwb2ludGluZCBvbiBwb2ludF90YmwKKyBJbmRleCBTY2FuIHVzaW5nIGdwb2ludGluZCBvbiBw b2ludF90YmwKICAgIEluZGV4IENvbmQ6IChmMSA8QCAnKDEwLDEwKSwoLTEwLC0xMCknOjpib3gp CiAgICBPcmRlciBCeTogKGYxIDwtPiAnKDAsMSknOjpwb2ludCkKICgzIHJvd3MpCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleF9zcGdpc3Qub3V0IGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXhfc3BnaXN0Lm91dAppbmRleCBj NmJlYjBlZmEuLmRkZmZjYTJlNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9jcmVhdGVfaW5kZXhfc3BnaXN0Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2NyZWF0ZV9pbmRleF9zcGdpc3Qub3V0CkBAIC0zMzMsNyArMzMzLDcgQEAgRlJPTSBxdWFkX3Bv aW50X3RibDsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBXaW5kb3dBZ2cKICAgIFdpbmRvdzogdzEg QVMgKE9SREVSIEJZIChwIDwtPiAnKDAsMCknOjpwb2ludCkgUk9XUyBVTkJPVU5ERUQgUFJFQ0VE SU5HKQotICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzcF9xdWFkX2luZCBvbiBxdWFkX3Bv aW50X3RibAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc3BfcXVhZF9pbmQgb24gcXVhZF9wb2lu dF90YmwKICAgICAgICAgIE9yZGVyIEJ5OiAocCA8LT4gJygwLDApJzo6cG9pbnQpCiAoNCByb3dz KQogCkBAIC0zNTQsNyArMzU0LDcgQEAgRlJPTSBxdWFkX3BvaW50X3RibCBXSEVSRSBwIDxAIGJv eCAnKDIwMCwyMDAsMTAwMCwxMDAwKSc7CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgV2luZG93QWdn CiAgICBXaW5kb3c6IHcxIEFTIChPUkRFUiBCWSAocCA8LT4gJygwLDApJzo6cG9pbnQpIFJPV1Mg VU5CT1VOREVEIFBSRUNFRElORykKLSAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc3BfcXVh ZF9pbmQgb24gcXVhZF9wb2ludF90YmwKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHNwX3F1YWRf aW5kIG9uIHF1YWRfcG9pbnRfdGJsCiAgICAgICAgICBJbmRleCBDb25kOiAocCA8QCAnKDEwMDAs MTAwMCksKDIwMCwyMDApJzo6Ym94KQogICAgICAgICAgT3JkZXIgQnk6IChwIDwtPiAnKDAsMCkn Ojpwb2ludCkKICg1IHJvd3MpCkBAIC0zNzYsNyArMzc2LDcgQEAgRlJPTSBxdWFkX3BvaW50X3Ri bCBXSEVSRSBwIElTIE5PVCBOVUxMOwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBXaW5kb3dB Z2cKICAgIFdpbmRvdzogdzEgQVMgKE9SREVSIEJZIChwIDwtPiAnKDMzMyw0MDApJzo6cG9pbnQp IFJPV1MgVU5CT1VOREVEIFBSRUNFRElORykKLSAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcg c3BfcXVhZF9pbmQgb24gcXVhZF9wb2ludF90YmwKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHNw X3F1YWRfaW5kIG9uIHF1YWRfcG9pbnRfdGJsCiAgICAgICAgICBJbmRleCBDb25kOiAocCBJUyBO T1QgTlVMTCkKICAgICAgICAgIE9yZGVyIEJ5OiAocCA8LT4gJygzMzMsNDAwKSc6OnBvaW50KQog KDUgcm93cykKQEAgLTUwMyw3ICs1MDMsNyBAQCBGUk9NIGtkX3BvaW50X3RibDsKIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KICBXaW5kb3dBZ2cKICAgIFdpbmRvdzogdzEgQVMgKE9SREVSIEJZIChwIDwt PiAnKDAsMCknOjpwb2ludCkgUk9XUyBVTkJPVU5ERUQgUFJFQ0VESU5HKQotICAgLT4gIEluZGV4 IE9ubHkgU2NhbiB1c2luZyBzcF9rZF9pbmQgb24ga2RfcG9pbnRfdGJsCisgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBzcF9rZF9pbmQgb24ga2RfcG9pbnRfdGJsCiAgICAgICAgICBPcmRlciBCeTog KHAgPC0+ICcoMCwwKSc6OnBvaW50KQogKDQgcm93cykKIApAQCAtNTI0LDcgKzUyNCw3IEBAIEZS T00ga2RfcG9pbnRfdGJsIFdIRVJFIHAgPEAgYm94ICcoMjAwLDIwMCwxMDAwLDEwMDApJzsKIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KICBXaW5kb3dBZ2cKICAgIFdpbmRvdzogdzEgQVMgKE9SREVSIEJZ IChwIDwtPiAnKDAsMCknOjpwb2ludCkgUk9XUyBVTkJPVU5ERUQgUFJFQ0VESU5HKQotICAgLT4g IEluZGV4IE9ubHkgU2NhbiB1c2luZyBzcF9rZF9pbmQgb24ga2RfcG9pbnRfdGJsCisgICAtPiAg SW5kZXggU2NhbiB1c2luZyBzcF9rZF9pbmQgb24ga2RfcG9pbnRfdGJsCiAgICAgICAgICBJbmRl eCBDb25kOiAocCA8QCAnKDEwMDAsMTAwMCksKDIwMCwyMDApJzo6Ym94KQogICAgICAgICAgT3Jk ZXIgQnk6IChwIDwtPiAnKDAsMCknOjpwb2ludCkKICg1IHJvd3MpCkBAIC01NDYsNyArNTQ2LDcg QEAgRlJPTSBrZF9wb2ludF90YmwgV0hFUkUgcCBJUyBOT1QgTlVMTDsKIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiAgV2luZG93QWdnCiAgICBXaW5kb3c6IHcxIEFTIChPUkRFUiBCWSAocCA8LT4g JygzMzMsNDAwKSc6OnBvaW50KSBST1dTIFVOQk9VTkRFRCBQUkVDRURJTkcpCi0gICAtPiAgSW5k ZXggT25seSBTY2FuIHVzaW5nIHNwX2tkX2luZCBvbiBrZF9wb2ludF90YmwKKyAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIHNwX2tkX2luZCBvbiBrZF9wb2ludF90YmwKICAgICAgICAgIEluZGV4IENv bmQ6IChwIElTIE5PVCBOVUxMKQogICAgICAgICAgT3JkZXIgQnk6IChwIDwtPiAnKDMzMyw0MDAp Jzo6cG9pbnQpCiAoNSByb3dzKQpAQCAtNTY3LDEwICs1NjcsMTAgQEAgU0VUIGV4dHJhX2Zsb2F0 X2RpZ2l0cyA9IDA7CiBDUkVBVEUgSU5ERVggT04gcXVhZF9wb2ludF90Ymxfb3JkX3NlcTEgVVNJ Tkcgc3BnaXN0KHApIElOQ0xVREUoZGlzdCk7CiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1Qg cCwgZGlzdCBGUk9NIHF1YWRfcG9pbnRfdGJsX29yZF9zZXExIE9SREVSIEJZIHAgPC0+ICcwLDAn IExJTUlUIDEwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgTGltaXQKLSAgIC0+ICBJbmRleCBPbmx5 IFNjYW4gdXNpbmcgcXVhZF9wb2ludF90Ymxfb3JkX3NlcTFfcF9kaXN0X2lkeCBvbiBxdWFkX3Bv aW50X3RibF9vcmRfc2VxMQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcXVhZF9wb2ludF90Ymxf b3JkX3NlcTFfcF9kaXN0X2lkeCBvbiBxdWFkX3BvaW50X3RibF9vcmRfc2VxMQogICAgICAgICAg T3JkZXIgQnk6IChwIDwtPiAnKDAsMCknOjpwb2ludCkKICgzIHJvd3MpCiAKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2lzdC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2dpc3Qub3V0CmluZGV4IGM3NWJiYjIzYi4uODEwZGI4YjhmIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dpc3Qub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvZ2lzdC5vdXQKQEAgLTc0LDEzICs3NCwxMyBAQCBzZWxlY3QgcCBmcm9tIGdpc3Rf dGJsIHdoZXJlIHAgPEAgYm94KHBvaW50KDAsMCksIHBvaW50KDAuNSwgMC41KSk7CiAgKDAuNSww LjUpCiAoMTEgcm93cykKIAotLS0gQWxzbyB0ZXN0IGFuIGluZGV4LW9ubHkga25uLXNlYXJjaAor LS0gQWxzbyB0ZXN0IGEga25uLXNlYXJjaAogZXhwbGFpbiAoY29zdHMgb2ZmKQogc2VsZWN0IHAg ZnJvbSBnaXN0X3RibCB3aGVyZSBwIDxAIGJveChwb2ludCgwLDApLCBwb2ludCgwLjUsIDAuNSkp CiBvcmRlciBieSBwIDwtPiBwb2ludCgwLjIwMSwgMC4yMDEpOwotICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW5kZXggT25seSBTY2Fu IHVzaW5nIGdpc3RfdGJsX3BvaW50X2luZGV4IG9uIGdpc3RfdGJsCisgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgZ2lzdF90 YmxfcG9pbnRfaW5kZXggb24gZ2lzdF90YmwKICAgIEluZGV4IENvbmQ6IChwIDxAICcoMC41LDAu NSksKDAsMCknOjpib3gpCiAgICBPcmRlciBCeTogKHAgPC0+ICcoMC4yMDEsMC4yMDEpJzo6cG9p bnQpCiAoMyByb3dzKQpAQCAtMTA2LDkgKzEwNiw5IEBAIG9yZGVyIGJ5IHAgPC0+IHBvaW50KDAu MjAxLCAwLjIwMSk7CiBleHBsYWluIChjb3N0cyBvZmYpCiBzZWxlY3QgcCBmcm9tIGdpc3RfdGJs IHdoZXJlIHAgPEAgYm94KHBvaW50KDAsMCksIHBvaW50KDAuNSwgMC41KSkKIG9yZGVyIGJ5IHBv aW50KDAuMTAxLCAwLjEwMSkgPC0+IHA7Ci0gICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBJbmRleCBPbmx5IFNjYW4gdXNpbmcgZ2lzdF90 YmxfcG9pbnRfaW5kZXggb24gZ2lzdF90YmwKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBnaXN0X3RibF9wb2ludF9pbmRl eCBvbiBnaXN0X3RibAogICAgSW5kZXggQ29uZDogKHAgPEAgJygwLjUsMC41KSwoMCwwKSc6OmJv eCkKICAgIE9yZGVyIEJ5OiAocCA8LT4gJygwLjEwMSwwLjEwMSknOjpwb2ludCkKICgzIHJvd3Mp CkBAIC0xMzgsMTIgKzEzOCwxMiBAQCBzZWxlY3QgcCBmcm9tCiAgICAgICAgICAgKGJveChwb2lu dCgwLjgsMC44KSwgcG9pbnQoMS4wLDEuMCkpKSkgYXMgdihiYikKIGNyb3NzIGpvaW4gbGF0ZXJh bAogICAoc2VsZWN0IHAgZnJvbSBnaXN0X3RibCB3aGVyZSBwIDxAIGJiIG9yZGVyIGJ5IHAgPC0+ IGJiWzBdIGxpbWl0IDIpIHNzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogIE5lc3RlZCBMb29wCiAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqIgogICAg LT4gIExpbWl0Ci0gICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGdpc3RfdGJsX3Bv aW50X2luZGV4IG9uIGdpc3RfdGJsCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBnaXN0 X3RibF9wb2ludF9pbmRleCBvbiBnaXN0X3RibAogICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KHAgPEAgIipWQUxVRVMqIi5jb2x1bW4xKQogICAgICAgICAgICAgICAgT3JkZXIgQnk6IChwIDwt PiAoIipWQUxVRVMqIi5jb2x1bW4xKVswXSkKICg2IHJvd3MpCkBAIC0yMDMsMTMgKzIwMywxMyBA QCBzZWxlY3QgYiBmcm9tIGdpc3RfdGJsIHdoZXJlIGIgPEAgYm94KHBvaW50KDUsNSksIHBvaW50 KDYsNikpOwogICg2LDYpLCg2LDYpCiAoMjEgcm93cykKIAotLS0gQWxzbyB0ZXN0IGFuIGluZGV4 LW9ubHkga25uLXNlYXJjaAorLS0gQWxzbyB0ZXN0IGEga25uLXNlYXJjaAogZXhwbGFpbiAoY29z dHMgb2ZmKQogc2VsZWN0IGIgZnJvbSBnaXN0X3RibCB3aGVyZSBiIDxAIGJveChwb2ludCg1LDUp LCBwb2ludCg2LDYpKQogb3JkZXIgYnkgYiA8LT4gcG9pbnQoNS4yLCA1LjkxKTsKLSAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW5kZXggT25s eSBTY2FuIHVzaW5nIGdpc3RfdGJsX2JveF9pbmRleCBvbiBnaXN0X3RibAorICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgZ2lzdF90 YmxfYm94X2luZGV4IG9uIGdpc3RfdGJsCiAgICBJbmRleCBDb25kOiAoYiA8QCAnKDYsNiksKDUs NSknOjpib3gpCiAgICBPcmRlciBCeTogKGIgPC0+ICcoNS4yLDUuOTEpJzo6cG9pbnQpCiAoMyBy b3dzKQpAQCAtMjQ1LDkgKzI0NSw5IEBAIG9yZGVyIGJ5IGIgPC0+IHBvaW50KDUuMiwgNS45MSk7 CiBleHBsYWluIChjb3N0cyBvZmYpCiBzZWxlY3QgYiBmcm9tIGdpc3RfdGJsIHdoZXJlIGIgPEAg Ym94KHBvaW50KDUsNSksIHBvaW50KDYsNikpCiBvcmRlciBieSBwb2ludCg1LjIsIDUuOTEpIDwt PiBiOwotICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KLSBJbmRleCBPbmx5IFNjYW4gdXNpbmcgZ2lzdF90YmxfYm94X2luZGV4IG9uIGdpc3RfdGJs CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2Nh biB1c2luZyBnaXN0X3RibF9ib3hfaW5kZXggb24gZ2lzdF90YmwKICAgIEluZGV4IENvbmQ6IChi IDxAICcoNiw2KSwoNSw1KSc6OmJveCkKICAgIE9yZGVyIEJ5OiAoYiA8LT4gJyg1LjIsNS45MSkn Ojpwb2ludCkKICgzIHJvd3MpCkBAIC0zNzMsMjAgKzM3MywyNiBAQCBzZWxlY3QgY291bnQoKikg ZnJvbSBnaXN0X3RibDsKICAxMDAwMQogKDEgcm93KQogCi0tLSBUaGlzIGNhc2UgaXNuJ3Qgc3Vw cG9ydGVkLCBidXQgaXQgc2hvdWxkIGF0IGxlYXN0IEVYUExBSU4gY29ycmVjdGx5LgorLS0gQW4g b3JkZXJpbmctb3BlcmF0b3IgKG5lYXJlc3QtbmVpZ2hib3IpIHNjYW4gaXMgbmV2ZXIgcGxhbm5l ZCBhcyBhbgorLS0gaW5kZXgtb25seSBzY2FuLCBzbyB0aGlzIGxvc3N5LWRpc3RhbmNlIGNhc2Ug cnVucyBhcyBhIHBsYWluIGluZGV4IHNjYW4gdGhhdAorLS0gcmVjaGVja3MgdGhlIGRpc3RhbmNl cyBhZ2FpbnN0IHRoZSBoZWFwIHR1cGxlLgogZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQog c2VsZWN0IHAgZnJvbSBnaXN0X3RibCBvcmRlciBieSBjaXJjbGUocCwxKSA8LT4gcG9pbnQoMCww KSBsaW1pdCAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KICBMaW1pdAogICAgT3V0cHV0OiBwLCAoKGNpcmNsZShwLCAnMSc6OmRvdWJsZSBw cmVjaXNpb24pIDwtPiAnKDAsMCknOjpwb2ludCkpCi0gICAtPiAgSW5kZXggT25seSBTY2FuIHVz aW5nIGdpc3RfdGJsX211bHRpX2luZGV4IG9uIHB1YmxpYy5naXN0X3RibAorICAgLT4gIEluZGV4 IFNjYW4gdXNpbmcgZ2lzdF90YmxfbXVsdGlfaW5kZXggb24gcHVibGljLmdpc3RfdGJsCiAgICAg ICAgICBPdXRwdXQ6IHAsIChjaXJjbGUocCwgJzEnOjpkb3VibGUgcHJlY2lzaW9uKSA8LT4gJygw LDApJzo6cG9pbnQpCi0gICAgICAgICBPcmRlciBCeTogKChjaXJjbGUoZ2lzdF90YmwucCwgJzEn Ojpkb3VibGUgcHJlY2lzaW9uKSkgPC0+ICcoMCwwKSc6OnBvaW50KQorICAgICAgICAgT3JkZXIg Qnk6IChjaXJjbGUoZ2lzdF90YmwucCwgJzEnOjpkb3VibGUgcHJlY2lzaW9uKSA8LT4gJygwLDAp Jzo6cG9pbnQpCiAoNSByb3dzKQogCiBzZWxlY3QgcCBmcm9tIGdpc3RfdGJsIG9yZGVyIGJ5IGNp cmNsZShwLDEpIDwtPiBwb2ludCgwLDApIGxpbWl0IDE7Ci1FUlJPUjogIGxvc3N5IGRpc3RhbmNl IGZ1bmN0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBpbiBpbmRleC1vbmx5IHNjYW5zCisgICBwICAg CistLS0tLS0tCisgKDAsMCkKKygxIHJvdykKKwogLS0gRm9yY2UgYW4gaW5kZXggYnVpbGQgdXNp bmcgYnVmZmVyaW5nLgogY3JlYXRlIGluZGV4IGdpc3RfdGJsX2JveF9pbmRleF9mb3JjaW5nX2J1 ZmZlcmluZyBvbiBnaXN0X3RibCB1c2luZyBnaXN0IChwKQogICB3aXRoIChidWZmZXJpbmc9b24s IGZpbGxmYWN0b3I9NTApOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2lzdC5z cWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9naXN0LnNxbAppbmRleCA2ZjFmYzY1ZjEuLjM2OWVi NDU3NiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2lzdC5zcWwKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvZ2lzdC5zcWwKQEAgLTY1LDcgKzY1LDcgQEAgc2VsZWN0IHAgZnJv bSBnaXN0X3RibCB3aGVyZSBwIDxAIGJveChwb2ludCgwLDApLCBwb2ludCgwLjUsIDAuNSkpOwog LS0gZXhlY3V0ZSB0aGUgc2FtZQogc2VsZWN0IHAgZnJvbSBnaXN0X3RibCB3aGVyZSBwIDxAIGJv eChwb2ludCgwLDApLCBwb2ludCgwLjUsIDAuNSkpOwogCi0tLSBBbHNvIHRlc3QgYW4gaW5kZXgt b25seSBrbm4tc2VhcmNoCistLSBBbHNvIHRlc3QgYSBrbm4tc2VhcmNoCiBleHBsYWluIChjb3N0 cyBvZmYpCiBzZWxlY3QgcCBmcm9tIGdpc3RfdGJsIHdoZXJlIHAgPEAgYm94KHBvaW50KDAsMCks IHBvaW50KDAuNSwgMC41KSkKIG9yZGVyIGJ5IHAgPC0+IHBvaW50KDAuMjAxLCAwLjIwMSk7CkBA IC0xMDksNyArMTA5LDcgQEAgc2VsZWN0IGIgZnJvbSBnaXN0X3RibCB3aGVyZSBiIDxAIGJveChw b2ludCg1LDUpLCBwb2ludCg2LDYpKTsKIC0tIGV4ZWN1dGUgdGhlIHNhbWUKIHNlbGVjdCBiIGZy b20gZ2lzdF90Ymwgd2hlcmUgYiA8QCBib3gocG9pbnQoNSw1KSwgcG9pbnQoNiw2KSk7CiAKLS0t IEFsc28gdGVzdCBhbiBpbmRleC1vbmx5IGtubi1zZWFyY2gKKy0tIEFsc28gdGVzdCBhIGtubi1z ZWFyY2gKIGV4cGxhaW4gKGNvc3RzIG9mZikKIHNlbGVjdCBiIGZyb20gZ2lzdF90Ymwgd2hlcmUg YiA8QCBib3gocG9pbnQoNSw1KSwgcG9pbnQoNiw2KSkKIG9yZGVyIGJ5IGIgPC0+IHBvaW50KDUu MiwgNS45MSk7CkBAIC0xNjQsNyArMTY0LDkgQEAgZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2Zm KQogc2VsZWN0IGNvdW50KCopIGZyb20gZ2lzdF90Ymw7CiBzZWxlY3QgY291bnQoKikgZnJvbSBn aXN0X3RibDsKIAotLS0gVGhpcyBjYXNlIGlzbid0IHN1cHBvcnRlZCwgYnV0IGl0IHNob3VsZCBh dCBsZWFzdCBFWFBMQUlOIGNvcnJlY3RseS4KKy0tIEFuIG9yZGVyaW5nLW9wZXJhdG9yIChuZWFy ZXN0LW5laWdoYm9yKSBzY2FuIGlzIG5ldmVyIHBsYW5uZWQgYXMgYW4KKy0tIGluZGV4LW9ubHkg c2Nhbiwgc28gdGhpcyBsb3NzeS1kaXN0YW5jZSBjYXNlIHJ1bnMgYXMgYSBwbGFpbiBpbmRleCBz Y2FuIHRoYXQKKy0tIHJlY2hlY2tzIHRoZSBkaXN0YW5jZXMgYWdhaW5zdCB0aGUgaGVhcCB0dXBs ZS4KIGV4cGxhaW4gKHZlcmJvc2UsIGNvc3RzIG9mZikKIHNlbGVjdCBwIGZyb20gZ2lzdF90Ymwg b3JkZXIgYnkgY2lyY2xlKHAsMSkgPC0+IHBvaW50KDAsMCkgbGltaXQgMTsKIHNlbGVjdCBwIGZy b20gZ2lzdF90Ymwgb3JkZXIgYnkgY2lyY2xlKHAsMSkgPC0+IHBvaW50KDAsMCkgbGltaXQgMTsK ZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNDQ2ZTY4YTg0Li5kM2FiMjc2MDcgMTAwNjQ0 Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMDYzLDYgKzEwNjMsOCBAQCBHQlRfTlVNS0VZX1IK IEdCVF9WQVJLRVkKIEdCVF9WQVJLRVlfUgogR0VORVJBTF9OQU1FCitHSVNUQmF0Y2hEYXRhCitH SVNUQmF0Y2hJdGVtCiBHSVNUQnVpbGRCdWZmZXJzCiBHSVNUQnVpbGRTdGF0ZQogR0lTVERlbGV0 ZWRQYWdlQ29udGVudHMKLS0gCjIuNTMuMAoK --0000000000004ffa5f0654ddc4ef Content-Type: application/octet-stream; name="v28-0006-WIP-Adopt-amgetbatch-interface-in-SP-GiST-index-.patch" Content-Disposition: attachment; filename="v28-0006-WIP-Adopt-amgetbatch-interface-in-SP-GiST-index-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqpot0fj6 RnJvbSA3ZDg1MzU3YzAwYjRiNzY4YWY0MzZiYmZlMzg1MzliZmY3NWQxZTRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFRo dSwgNCBKdW4gMjAyNiAyMzowOTozNyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjI4IDA2LzExXSBX SVA6IEFkb3B0IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGluIFNQLUdpU1QgaW5kZXgKIEFNLgoKUmVw bGFjZSBzcGdnZXR0dXBsZSB3aXRoIHNwZ2dldGJhdGNoLCB3aGljaCBpbXBsZW1lbnRzIHRoZSBh bWdldGJhdGNoCmludGVyZmFjZSBhZGRlZCBieSBjb21taXQgRklYTUUuICBQbGFpbiBpbmRleCBz Y2FucyBvZiBTUC1HaVNUIGluZGV4ZXMKbm93IHJldHVybiBtYXRjaGluZyBpdGVtcyBpbiBiYXRj aGVzIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZSBtYXRjaGVzCmZyb20gYSBnaXZlbiBsZWFmIHBh Z2UsIGdpdmluZyB0aGUgdGFibGUgQU0gdGhlIGFiaWxpdHkgdG8gcGVyZm9ybQpvcHRpbWl6YXRp b25zIGxpa2UgaW5kZXggcHJlZmV0Y2hpbmcgZHVyaW5nIFNQLUdpU1QgaW5kZXggc2NhbnMuCgpB cyBpbiBuYnRyZWUsIGhhc2gsIGFuZCBHaVNULCBhbiBvcmRpbmFyeSBiYXRjaCdzIG9ubHkgcmV0 YWluZWQgYnVmZmVyCnBpbiBpcyB0aGUgb25lIG9uIGl0cyBzaW5nbGUgbGVhZiBwYWdlLCBoZWxk IGFzIHRoZSBzdGFuZGFyZGl6ZWQKaW50ZXJsb2NrIGFnYWluc3QgdW5zYWZlIGNvbmN1cnJlbnQg VElEIHJlY3ljbGluZyBieSBWQUNVVU0sIGZvciBhcyBsb25nCmFzIHRoZSB0YWJsZSBBTSBzdGls bCBuZWVkcyBpdC4gIE5lYXJlc3QtbmVpZ2hib3IgKG9yZGVyZWQpIHNjYW5zIHdvcmsKYXMgaW4g R2lTVDogc3BnZ2V0YmF0Y2ggZHJhaW5zIHRoZSBkaXN0YW5jZS1vcmRlcmVkIHF1ZXVlIGludG8g b25lCiJ2aXJ0dWFsIiBiYXRjaCBzcGFubmluZyBtYW55IGxlYWYgcGFnZXMuCgpUaGUgaW50ZXJs b2NrIHBpbiBhbHNvIGZpeGVzIGEgcHJlLWV4aXN0aW5nIGJ1ZyBpbiB3aGljaCBTUC1HaVNUCmlu ZGV4LW9ubHkgc2NhbnMgY291bGQgcmV0dXJuIHdyb25nIGFuc3dlcnMuICBUaGlzIGlzIGV4YWN0 bHkgdGhlIHNhbWUKcmFjZSBjb25kaXRpb24gdGhhdCBjb21taXQgRklYTUUgKHdoaWNoIHRhdWdo dCBHaVNUIHRvIHVzZSB0aGUKYW1nZXRiYXRjaCBpbnRlcmZhY2UpIGZpeGVkIGluIEdpU1QuICBB cyB3aXRoIEdpU1QsIHdlIHJlbHkgb24gdGhlCnBsYW5uZXIgZGlzYWxsb3dpbmcgb3JkZXJlZCBT UC1HaVNUIHNjYW5zIHRvIGNsb3NlIHRoZSBnYXAgdGhlcmUKKFNQLUdpU1QgYWxzbyB1c2VzICJ2 aXJ0dWFsIGJhdGNoZXMiIGR1cmluZyBvcmRlcmVkIHNjYW5zLCB3aGljaCBtYWtlIGEKY29udmVu dGlvbmFsIGxlYWYgcGFnZSBwaW4gaW50ZXJsb2NrIGltcHJhY3RpY2FsLCBqdXN0IGxpa2UgaW4g R2lTVCkuCgpUaGVyZSBpcyBhbiBhZGRpdGlvbmFsIHJlc3RyaWN0aW9uIG9uIGluZGV4LW9ubHkg c2NhbnMsIHdoaWNoIGlzIGEKc2VwYXJhdGUgaXNzdWUgdGhhdCBpcyBwZWN1bGlhciB0byBTUC1H aVNUOiBpbmRleC1vbmx5IHNjYW5zIGFyZSBub3cKZGlzYWJsZWQgZm9yICJsb25nIHZhbHVlcyIg b3BjbGFzc2VzIHN1Y2ggYXMgdGhlIHRleHQgcmFkaXggb3BjbGFzcy4KVGhlc2Ugb3BjbGFzc2Vz IHVzZSByZWNvbnN0cnVjdGVkIHZhbHVlcyB3aG9zZSBzaXplIGlzIGVzc2VudGlhbGx5CnVuYm91 bmRlZC4gIFRoZSBwcmVmaXggY2Fubm90IHJlbGlhYmx5IGZpdCBpbnRvIGEgZml4ZWQgcGVyLWJh dGNoCnJlY29uc3RydWN0aW9uIHdvcmtzcGFjZS4gIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJl IGEgc2ltcGxlIHdheSB0bwpzb2x2ZSB0aGF0IHJlc291cmNlIG1hbmFnZW1lbnQgcHJvYmxlbSB3 aXRoaW4gdGhlIGNvbmZpbmVzIG9mIHRoZQphbWdldGJhdGNoIGRlc2lnbiwgYW5kIGludmVudGlu ZyBuZXcgaW5mcmFzdHJ1Y3R1cmUgdG8gbWFrZSBpdCB3b3JrCmRvZXNuJ3Qgc2VlbSBsaWtlbHkg dG8gcGF5IGZvciBpdHNlbGYuICBUaGlzIHdhcnJhbnRzIGEgc2VwYXJhdGUgU1AtR2lTVApvbmx5 IGluY29tcGF0aWJpbGl0eSBpdGVtIGluIHRoZSBQb3N0Z3JlcyAyMCByZWxlYXNlIG5vdGVzIChp biBhZGRpdGlvbgp0byBhbiBpdGVtIGFib3V0IEdpU1QgX2FuZF8gU1AtR2lTVCBub3Qgc3VwcG9y dGluZyBvcmRlcmVkIGluZGV4LW9ubHkKc2NhbnMgYW55bW9yZSkuCgpBdXRob3I6IFBldGVyIEdl b2doZWdhbiA8cGdAYm93dC5pZT4KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc3BnaXN0LmggICAg ICAgICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9zcGdpc3RfcHJpdmF0 ZS5oICAgICAgICAgICB8IDEwMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9SRUFETUUg ICAgICAgICAgICAgIHwgIDExICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3NjYW4u YyAgICAgICAgICAgfCA5MDggKysrKysrKysrKysrKy0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mv c3BnaXN0L3NwZ3V0aWxzLmMgICAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9z cGdpc3Qvc3BndmFjdXVtLmMgICAgICAgICB8ICA2OCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3Nw Z2lzdC9zcGd4bG9nLmMgICAgICAgICAgIHwgIDEyICstCiBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5z Z21sICAgICAgICAgICAgICAgICAgICAgfCAgNDAgKy0KIGRvYy9zcmMvc2dtbC9zcGdpc3Quc2dt bCAgICAgICAgICAgICAgICAgICAgICB8ICAgNyArLQogLi4uL2V4cGVjdGVkL3NwZ2lzdF9uYW1l X29wcy5vdXQgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2FtdXRpbHMub3V0ICAgICAgICAgfCAgIDIgKy0KIC4uLi9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0 ZV9pbmRleF9zcGdpc3Qub3V0ICB8ICA1MCArLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgICAgICAgICAgICAgIHwgICAzICstCiAxMyBmaWxlcyBjaGFuZ2VkLCA4NTMgaW5zZXJ0 aW9ucygrKSwgMzY3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9zcGdpc3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zcGdpc3QuaAppbmRleCAwODNkOTNmOGYu LjNjMjU4MmU3NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3NwZ2lzdC5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9zcGdpc3QuaApAQCAtMjA4LDcgKzIwOCwxMCBAQCBleHRlcm4g dm9pZCBzcGdlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gdm9pZCBzcGdyZXNj YW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJ CQkJCSAgU2NhbktleSBvcmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CiBleHRlcm4gaW50NjQgc3Bn Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pOwotZXh0ZXJuIGJv b2wgc3BnZ2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7Citl eHRlcm4gSW5kZXhTY2FuQmF0Y2ggc3BnZ2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRl eFNjYW5CYXRjaCBwcmlvcmJhdGNoLAorCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4 dGVybiB2b2lkIHNwZ3VuZ3VhcmRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJh dGNoIGJhdGNoKTsKK2V4dGVybiB2b2lkIHNwZ2dldHRyYW5zZm9ybShJbmRleFNjYW5EZXNjIHNj YW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLCBpbnQgaXRlbSk7CiBleHRlcm4gYm9vbCBzcGdjYW5y ZXR1cm4oUmVsYXRpb24gaW5kZXgsIGludCBhdHRubyk7CiAKIC8qIHNwZ3ZhY3V1bS5jICovCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3BnaXN0X3ByaXZhdGUuaCBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9zcGdpc3RfcHJpdmF0ZS5oCmluZGV4IGVjNmQ2ZjVmNy4uZmY4OTIwMTQwIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3BnaXN0X3ByaXZhdGUuaAorKysgYi9zcmMv aW5jbHVkZS9hY2Nlc3Mvc3BnaXN0X3ByaXZhdGUuaApAQCAtMTQsNiArMTQsNyBAQAogI2lmbmRl ZiBTUEdJU1RfUFJJVkFURV9ICiAjZGVmaW5lIFNQR0lTVF9QUklWQVRFX0gKIAorI2luY2x1ZGUg ImFjY2Vzcy9pbmRleGJhdGNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKICNpbmNsdWRl ICJhY2Nlc3Mvc3BnaXN0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbV9kLmgiCkBAIC0xODMs NiArMTg0LDgxIEBAIHR5cGVkZWYgc3RydWN0IFNwR2lzdFNlYXJjaEl0ZW0KICNkZWZpbmUgU2l6 ZU9mU3BHaXN0U2VhcmNoSXRlbShuX2Rpc3RhbmNlcykgXAogCShvZmZzZXRvZihTcEdpc3RTZWFy Y2hJdGVtLCBkaXN0YW5jZXMpICsgc2l6ZW9mKGRvdWJsZSkgKiAobl9kaXN0YW5jZXMpKQogCisv KgorICogUGVyLWJhdGNoIGRhdGEgcHJpdmF0ZSB0byB0aGUgU1AtR2lTVCBpbmRleCBBTSAodGhl IHN0YXRpYyBpbmRleCBBTSBvcGFxdWUKKyAqIGFyZWEgb2YgYW4gSW5kZXhTY2FuQmF0Y2gpLgor ICoKKyAqIEEgbm9uLW9yZGVyZWQgYmF0Y2ggaG9sZHMgYWxsIG1hdGNoZXMgZnJvbSBhIHNpbmds ZSBsZWFmIHBhZ2UsIGFuZCBpdHMgYnVmZmVyCisgKiBwaW4gaXMgdGhlIFRJRCByZWN5Y2xpbmcg aW50ZXJsb2NrLiAgQW4gb3JkZXJlZCAobmVhcmVzdC1uZWlnaGJvcikgc2NhbgorICogaW5zdGVh ZCByZXR1cm5zIGEgInZpcnR1YWwiIGJhdGNoLCBkcmFpbmVkIGZyb20gdGhlIGRpc3RhbmNlLW9y ZGVyZWQgcXVldWUKKyAqIGFuZCBzcGFubmluZyBtYW55IGxlYWYgcGFnZXM7IGl0IGhvbGRzIG5v IHBpbiAoYmxrbm8gPT0gSW52YWxpZEJsb2NrTnVtYmVyKS4KKyAqCisgKiByZWNvblZhbHVlL2xl dmVsL2lzTnVsbCBhcmUgdGhlIHNoYXJlZCBpbnB1dHMgc3BnZ2V0dHJhbnNmb3JtIHVzZXMgdG8K KyAqIHJlY29uc3RydWN0IGFuIGluZGV4LW9ubHkgc2NhbidzIHZhbHVlczsgdGhlIHByZWZpeCBp cyB0aGUgc2FtZSBmb3IgZXZlcnkKKyAqIG1hdGNoIGluIGEgbm9uLW9yZGVyZWQgYmF0Y2guICAo T3JkZXJlZCBzY2FucyBhcmUgbmV2ZXIgaW5kZXgtb25seS4pCisgKi8KK3R5cGVkZWYgc3RydWN0 IFNwR2lzdEJhdGNoRGF0YQoreworCUJ1ZmZlcgkJYnVmOwkJCS8qIGxlYWYgcGFnZSdzIHBpbiAo SW52YWxpZEJ1ZmZlciBpZiB2aXJ0dWFsKSAqLworCUJsb2NrTnVtYmVyIGJsa25vOwkJCS8qIGxl YWYgYmxrbm8gKEludmFsaWRCbG9ja051bWJlciA9PSB2aXJ0dWFsKSAqLworCURhdHVtCQlyZWNv blZhbHVlOwkJLyogcHJlZml4OyBpbnRvIHRoZSByZWNvbiBhcmVhIHdoZW4KKwkJCQkJCQkJICog YnktcmVmZXJlbmNlICovCisJaW50CQkJbGV2ZWw7CisJYm9vbAkJaXNOdWxsOwkJCS8qIGJhdGNo IGNhbWUgZnJvbSBhIG51bGxzIHBhZ2UgKi8KK30gU3BHaXN0QmF0Y2hEYXRhOworCisjZGVmaW5l IFNwR2lzdEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCkgXAorCWluZGV4X3NjYW5fYmF0Y2hfaW5k ZXhfb3BhcXVlX3N0YXRpYyhzY2FuLCBiYXRjaCwgU3BHaXN0QmF0Y2hEYXRhKQorCisvKgorICog UGVyLWl0ZW0gZGF0YSBmb3IgYW4gb3JkZXJlZCAodmlydHVhbCkgYmF0Y2g6IGFuIGFycmF5IGlu IHRoZSBkeW5hbWljIG9wYXF1ZQorICogYXJlYSwgc3Vic2NyaXB0ZWQgdmlhIFNwR2lzdEJhdGNo R2V0SXRlbS4gIEVhY2ggaXRlbSBoYXMgaXRzIG93biByZWNoZWNrIGZsYWcKKyAqIChTUC1HaVNU IG1hdGNoaW5nIGlzIGxvc3N5LCB2YXJ5aW5nIHBlciBpdGVtKSBwbHVzIGl0cyBPUkRFUiBCWSBk aXN0YW5jZXMuCisgKgorICogQSBub24tb3JkZXJlZCBiYXRjaCBuZWVkcyBvbmx5IGEgcmVjaGVj ayBmbGFnIHBlciBpdGVtLCBzbyBpdHMgZHluYW1pYyBvcGFxdWUKKyAqIGFyZWEgaXMgYSBwbGFp biBib29sIGFycmF5LCBzdWJzY3JpcHRlZCB2aWEgU3BHaXN0QmF0Y2hHZXRSZWNoZWNrLgorICov Cit0eXBlZGVmIHN0cnVjdCBTcEdpc3RCYXRjaEl0ZW0KK3sKKwlib29sCQlyZWNoZWNrOwkJLyog VCBpZiBxdWFscyBtdXN0IGJlIHJlY2hlY2tlZCAqLworCWJvb2wJCXJlY2hlY2tEaXN0YW5jZXM7 CS8qIFQgaWYgZGlzdGFuY2VzIGFyZSBsb3NzeSBsb3dlciBib3VuZHMgKi8KKwlJbmRleE9yZGVy QnlEaXN0YW5jZSBkaXN0YW5jZXNbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsJLyogbnVtYmVyT2ZP cmRlckJ5cyAqLworfSBTcEdpc3RCYXRjaEl0ZW07CisKKyNkZWZpbmUgU2l6ZU9mU3BHaXN0QmF0 Y2hJdGVtKG5fZGlzdGFuY2VzKSBcCisJKG9mZnNldG9mKFNwR2lzdEJhdGNoSXRlbSwgZGlzdGFu Y2VzKSArIFwKKwkgc2l6ZW9mKEluZGV4T3JkZXJCeURpc3RhbmNlKSAqIChuX2Rpc3RhbmNlcykp CisKKy8qIFN1YnNjcmlwdCBhbiBvcmRlcmVkICh2aXJ0dWFsKSBiYXRjaCdzIGl0ZW0gYXJyYXkg Ki8KKyNkZWZpbmUgU3BHaXN0QmF0Y2hHZXRJdGVtKHNjYW4sIGJhdGNoLCBpdGVtKSBcCisJKEFz c2VydE1hY3JvKCgoU3BHaXN0U2Nhbk9wYXF1ZSkgKHNjYW4pLT5vcGFxdWUpLT5udW1iZXJPZk5v bk51bGxPcmRlckJ5cyA+IDApLCBcCisJIEFzc2VydE1hY3JvKChpdGVtKSA+PSAwICYmIChpdGVt KSA8IE1heEluZGV4VHVwbGVzUGVyUGFnZSksIFwKKwkgKFNwR2lzdEJhdGNoSXRlbSAqKSAoKGNo YXIgKikgaW5kZXhfc2Nhbl9iYXRjaF9pbmRleF9vcGFxdWVfZHluKChzY2FuKSwgKGJhdGNoKSkg KyBcCisJCQkJCQkgIChTaXplKSAoaXRlbSkgKiBTaXplT2ZTcEdpc3RCYXRjaEl0ZW0oKHNjYW4p LT5udW1iZXJPZk9yZGVyQnlzKSkpCisKKy8qIFN1YnNjcmlwdCBhIG5vbi1vcmRlcmVkIGJhdGNo J3MgcmVjaGVjay1mbGFnIGFycmF5ICovCisjZGVmaW5lIFNwR2lzdEJhdGNoR2V0UmVjaGVjayhz Y2FuLCBiYXRjaCkgXAorCShBc3NlcnRNYWNybygoKFNwR2lzdFNjYW5PcGFxdWUpIChzY2FuKS0+ b3BhcXVlKS0+bnVtYmVyT2ZOb25OdWxsT3JkZXJCeXMgPT0gMCksIFwKKwkgKGJvb2wgKikgaW5k ZXhfc2Nhbl9iYXRjaF9pbmRleF9vcGFxdWVfZHluKChzY2FuKSwgKGJhdGNoKSkpCisKKy8qIFNp emUgb2YgZWFjaCBsYXlvdXQncyBwZXItaXRlbSBhcnJheSB3aXRoaW4gdGhlIGR5bmFtaWMgb3Bh cXVlIGFyZWEgKi8KKyNkZWZpbmUgU3BHaXN0QmF0Y2hJdGVtQXJyYXlTaXplKHNjYW4pIFwKKwlN QVhBTElHTihTaXplT2ZTcEdpc3RCYXRjaEl0ZW0oKHNjYW4pLT5udW1iZXJPZk9yZGVyQnlzKSAq IChzY2FuKS0+bWF4aXRlbXNiYXRjaCkKKyNkZWZpbmUgU3BHaXN0QmF0Y2hSZWNoZWNrQXJyYXlT aXplKHNjYW4pIFwKKwlNQVhBTElHTihzaXplb2YoYm9vbCkgKiAoc2NhbiktPm1heGl0ZW1zYmF0 Y2gpCisKKy8qCisgKiBGb3IgYW4gaW5kZXgtb25seSBzY2FuLCB0aGUgc2hhcmVkIGJ5LXJlZmVy ZW5jZSByZWNvbnN0cnVjdGlvbiBwcmVmaXgKKyAqIChTcEdpc3RCYXRjaERhdGEucmVjb25WYWx1 ZSkgaXMgc3RvcmVkIGFmdGVyIHRoZSBwZXItaXRlbSBhcnJheSBpbiB0aGUKKyAqIGR5bmFtaWMg b3BhcXVlIGFyZWEsIG5vdCBpbiBjdXJyVHVwbGVzOiB0aGUgcHJlZml4IGlzIHJlY29uc3RydWN0 ZWQgZnJvbQorICogYW5jZXN0b3IgaW5uZXIgcGFnZXMsIHNvIGl0IGlzbid0IGJvdW5kZWQgYnkg dGhlIG9uZSBsZWFmIHBhZ2UgdGhhdAorICogY3VyclR1cGxlcyBpcyBzaXplZCBmb3IuICBJbmRl eC1vbmx5IHNjYW5zIGFyZSBhbHdheXMgbm9uLW9yZGVyZWQsIHNvIGl0CisgKiBmb2xsb3dzIHRo ZSByZWNoZWNrIGFycmF5LgorICovCisjZGVmaW5lIFNwR2lzdEJhdGNoR2V0UmVjb25BcmVhKHNj YW4sIGJhdGNoKSBcCisJKChjaGFyICopIGluZGV4X3NjYW5fYmF0Y2hfaW5kZXhfb3BhcXVlX2R5 bigoc2NhbiksIChiYXRjaCkpICsgXAorCSBTcEdpc3RCYXRjaFJlY2hlY2tBcnJheVNpemUoc2Nh bikpCisKIC8qCiAgKiBQcml2YXRlIHN0YXRlIG9mIGFuIGluZGV4IHNjYW4KICAqLwpAQCAtMjE3 LDI5ICsyOTMsOSBAQCB0eXBlZGVmIHN0cnVjdCBTcEdpc3RTY2FuT3BhcXVlRGF0YQogCWRvdWJs ZQkgICAqemVyb0Rpc3RhbmNlczsKIAlkb3VibGUJICAgKmluZkRpc3RhbmNlczsKIAotCS8qIFRo ZXNlIGZpZWxkcyBhcmUgb25seSB1c2VkIGluIGFtZ2V0Yml0bWFwIHNjYW5zOiAqLwotCVRJREJp dG1hcCAgKnRibTsJCQkvKiBiaXRtYXAgYmVpbmcgZmlsbGVkICovCi0JaW50NjQJCW50aWRzOwkJ CS8qIG51bWJlciBvZiBUSURzIHBhc3NlZCB0byBiaXRtYXAgKi8KLQotCS8qIFRoZXNlIGZpZWxk cyBhcmUgb25seSB1c2VkIGluIGFtZ2V0dHVwbGUgc2NhbnM6ICovCi0JYm9vbAkJd2FudF9pdHVw OwkJLyogYXJlIHdlIHJlY29uc3RydWN0aW5nIHR1cGxlcz8gKi8KLQlUdXBsZURlc2MJcmVjb25U dXBEZXNjOwkvKiBpZiBzbywgZGVzY3JpcHRvciBmb3IgcmVjb25zdHJ1Y3RlZCB0dXBsZXMgKi8K LQlpbnQJCQluUHRyczsJCQkvKiBudW1iZXIgb2YgVElEcyBmb3VuZCBvbiBjdXJyZW50IHBhZ2Ug Ki8KLQlpbnQJCQlpUHRyOwkJCS8qIGluZGV4IGZvciBzY2FubmluZyB0aHJvdWdoIHNhbWUgKi8K LQlJdGVtUG9pbnRlckRhdGEgaGVhcFB0cnNbTWF4SW5kZXhUdXBsZXNQZXJQYWdlXTsJLyogVElE cyBmcm9tIGN1ciBwYWdlICovCi0JYm9vbAkJcmVjaGVja1tNYXhJbmRleFR1cGxlc1BlclBhZ2Vd OyAvKiB0aGVpciByZWNoZWNrIGZsYWdzICovCi0JYm9vbAkJcmVjaGVja0Rpc3RhbmNlc1tNYXhJ bmRleFR1cGxlc1BlclBhZ2VdOwkvKiBkaXN0YW5jZSByZWNoZWNrCi0JCQkJCQkJCQkJCQkJCQkg KiBmbGFncyAqLwotCUhlYXBUdXBsZQlyZWNvblR1cHNbTWF4SW5kZXhUdXBsZXNQZXJQYWdlXTsJ LyogcmVjb25zdHJ1Y3RlZCB0dXBsZXMgKi8KLQotCS8qIGRpc3RhbmNlcyAoZm9yIHJlY2hlY2sp ICovCi0JSW5kZXhPcmRlckJ5RGlzdGFuY2UgKmRpc3RhbmNlc1tNYXhJbmRleFR1cGxlc1BlclBh Z2VdOwotCi0JLyoKLQkgKiBOb3RlOiB1c2luZyBNYXhJbmRleFR1cGxlc1BlclBhZ2UgYWJvdmUg aXMgYSBiaXQgaG9rZXkgc2luY2UKLQkgKiBTcEdpc3RMZWFmVHVwbGVzIGFyZW4ndCBleGFjdGx5 IEluZGV4VHVwbGVzOyBob3dldmVyLCB0aGV5IGFyZSBsYXJnZXIsCi0JICogc28gdGhpcyBpcyBz YWZlLgotCSAqLworCS8qIFRoZXNlIGZpZWxkcyBhcmUgb25seSB1c2VkIGluIGFtZ2V0YmF0Y2gg c2NhbnM6ICovCisJVHVwbGVEZXNjCXJlY29uVHVwRGVzYzsJLyogZGVzY3JpcHRvciBmb3IgcmVj b25zdHJ1Y3RlZCB0dXBsZXMgKi8KKwlNZW1vcnlDb250ZXh0IHJlY29uQ3h0OwkJLyogY29udGV4 dCBmb3IgbGF6aWx5IHJlY29uc3RydWN0ZWQgeHNfaGl0dXAgKi8KIH0gU3BHaXN0U2Nhbk9wYXF1 ZURhdGE7CiAKIHR5cGVkZWYgU3BHaXN0U2Nhbk9wYXF1ZURhdGEgKlNwR2lzdFNjYW5PcGFxdWU7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L1JFQURNRSBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9zcGdpc3QvUkVBRE1FCmluZGV4IDcxMTdlMDJjNy4uZTM3MjQwOTkyIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L1JFQURNRQorKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3Mvc3BnaXN0L1JFQURNRQpAQCAtMzUyLDggKzM1Miw4IEBAIHRhcmdldCBUSUQgaXMg bm90IGFjY2VwdGFibGUsIHNvIHdlIGhhdmUgdG8gZXh0ZW5kIHRoZSBhbGdvcml0aG0gdG8gY29w ZQogd2l0aCBzdWNoIGNhc2VzLiAgV2UgcmVjb2duaXplIHRoYXQgc3VjaCBhIG1vdmUgbWlnaHQg aGF2ZSBvY2N1cnJlZCB3aGVuCiB3ZSBzZWUgYSBsZWFmLXBhZ2UgUkVESVJFQ1QgdHVwbGUgd2hv c2UgWElEIGluZGljYXRlcyBpdCBtaWdodCBoYXZlIGJlZW4KIGNyZWF0ZWQgYWZ0ZXIgdGhlIFZB Q1VVTSBzY2FuIHN0YXJ0ZWQuICBXZSBhZGQgdGhlIHJlZGlyZWN0aW9uIHRhcmdldCBUSUQKLXRv IGEgInBlbmRpbmcgbGlzdCIgb2YgcGxhY2VzIHdlIG5lZWQgdG8gcmVjaGVjay4gIEJldHdlZW4g cGFnZXMgb2YgdGhlCi1tYWluIHNlcXVlbnRpYWwgc2Nhbiwgd2UgZW1wdHkgdGhlIHBlbmRpbmcg bGlzdCBieSB2aXNpdGluZyBlYWNoIGxpc3RlZAordG8gYSAicGVuZGluZyBsaXN0IiBvZiBwbGFj ZXMgd2UgbmVlZCB0byByZWNoZWNrLiAgRHVyaW5nIHRoZSBtYWluCitzZXF1ZW50aWFsIHNjYW4s IHdlIGVtcHR5IHRoZSBwZW5kaW5nIGxpc3QgYnkgdmlzaXRpbmcgZWFjaCBsaXN0ZWQKIFRJRC4g IElmIGl0IHBvaW50cyB0byBhbiBpbm5lciB0dXBsZSAoZnJvbSBhIFBpY2tTcGxpdCksIGFkZCBl YWNoIGRvd25saW5rCiBUSUQgdG8gdGhlIHBlbmRpbmcgbGlzdC4gIElmIGl0IHBvaW50cyB0byBh IGxlYWYgcGFnZSwgdmFjdXVtIHRoYXQgcGFnZS4KIChXZSBjb3VsZCBqdXN0IHZhY3V1bSB0aGUg c2luZ2xlIHBvaW50ZWQtdG8gY2hhaW4sIGJ1dCB2YWN1dW1pbmcgdGhlCkBAIC0zNjUsNiArMzY1 LDEzIEBAIG9ubHkgYWZ0ZXIgd2UndmUgY29tcGxldGVkIGFsbCBwZW5kaW5nLWxpc3QgcHJvY2Vz c2luZzsgaW5zdGVhZCB3ZSBqdXN0CiBtYXJrIGl0ZW1zIGFzIGRvbmUgYWZ0ZXIgcHJvY2Vzc2lu ZyB0aGVtLiAgQWRkaW5nIGEgVElEIHRoYXQncyBhbHJlYWR5IGluCiB0aGUgbGlzdCBpcyBhIG5v LW9wLCB3aGV0aGVyIG9yIG5vdCB0aGF0IGl0ZW0gaXMgbWFya2VkIGRvbmUgeWV0LgogCitPbiBh IGxlYWYgcGFnZSwgVkFDVVVNIHRha2VzIGEgY2xlYW51cCBsb2NrIHJhdGhlciB0aGFuIGEgcGxh aW4gZXhjbHVzaXZlIGxvY2suCitUaGlzIGlzIHRoZSBpbnRlcmxvY2sgdGhhdCBtYWtlcyBpbmRl eC1vbmx5IHNjYW5zIHNhZmUgYWdhaW5zdCBjb25jdXJyZW50IFRJRAorcmVjeWNsaW5nOiBzdWNo IGEgc2NhbiBrZWVwcyBhIHBpbiBvbiB0aGUgbGVhZiBwYWdlIGl0IHJlYWQgaGVhcCBUSURzIGZy b20gdW50aWwKK2l0IGhhcyBjb25zdWx0ZWQgdGhlIHZpc2liaWxpdHkgbWFwLCBhbmQgVkFDVVVN IGNhbm5vdCBtYWtlIGFueSBvZiB0aGF0IHBhZ2UncworVElEcyByZWN5Y2xhYmxlIHVudGlsIHNw Z2J1bGtkZWxldGUgcmV0dXJucywgd2hpY2ggaXQgY2Fubm90IGRvIHVudGlsIGl0IGhhcworY2xl YW51cC1sb2NrZWQgdGhhdCBwYWdlIGJlaGluZCB0aGUgc2NhbidzIHBpbi4KKwogc3BnYnVsa2Rl bGV0ZSBhbHNvIHVwZGF0ZXMgdGhlIGluZGV4J3MgZnJlZSBzcGFjZSBtYXAuCiAKIEN1cnJlbnRs eSwgc3BndmFjdXVtY2xlYW51cCBoYXMgbm90aGluZyB0byBkbyBpZiBzcGdidWxrZGVsZXRlIHdh cwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdzY2FuLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3NjYW4uYwppbmRleCAyY2M1ZjA2ZjUuLmU2YjE1ZDJj YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdzY2FuLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdzY2FuLmMKQEAgLTI4LDEwICsyOCwxMiBAQAog I2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKLXR5 cGVkZWYgdm9pZCAoKnN0b3JlUmVzX2Z1bmMpIChTcEdpc3RTY2FuT3BhcXVlIHNvLCBJdGVtUG9p bnRlciBoZWFwUHRyLAotCQkJCQkJCSAgIERhdHVtIGxlYWZWYWx1ZSwgYm9vbCBpc051bGwsCi0J CQkJCQkJICAgU3BHaXN0TGVhZlR1cGxlIGxlYWZUdXBsZSwgYm9vbCByZWNoZWNrLAotCQkJCQkJ CSAgIGJvb2wgcmVjaGVja0Rpc3RhbmNlcywgZG91YmxlICpkaXN0YW5jZXMpOworc3RhdGljIEJ1 ZmZlciBzcGdSZWFkSXRlbVBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTcEdpc3RTZWFyY2hJdGVt ICppdGVtLAorCQkJCQkJCSAgQnVmZmVyIGJ1ZmZlcik7CitzdGF0aWMgdm9pZCBzcGdQcm9jZXNz SW5uZXJQYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU3BHaXN0U2VhcmNoSXRlbSAqaXRlbSwKKwkJ CQkJCQkJUGFnZSBwYWdlKTsKK3N0YXRpYyB2b2lkIHNwZ1Byb2Nlc3NMZWFmUGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIFNwR2lzdFNlYXJjaEl0ZW0gKml0ZW0sCisJCQkJCQkJICAgUGFnZSBwYWdl LCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiAKIC8qCiAgKiBQYWlyaW5nIGhlYXAgY29tcGFyaXNv biBmdW5jdGlvbiBmb3IgdGhlIFNwR2lzdFNlYXJjaEl0ZW0gcXVldWUuCkBAIC0xNzIsMjYgKzE3 NCw2IEBAIHJlc2V0U3BHaXN0U2Nhbk9wYXF1ZShTcEdpc3RTY2FuT3BhcXVlIHNvKQogCQlzcGdB ZGRTdGFydEl0ZW0oc28sIGZhbHNlKTsKIAogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRDdHgp OwotCi0JaWYgKHNvLT5udW1iZXJPZk9yZGVyQnlzID4gMCkKLQl7Ci0JCS8qIE11c3QgcGZyZWUg ZGlzdGFuY2VzIHRvIGF2b2lkIG1lbW9yeSBsZWFrICovCi0JCWludAkJCWk7Ci0KLQkJZm9yIChp ID0gMDsgaSA8IHNvLT5uUHRyczsgaSsrKQotCQkJaWYgKHNvLT5kaXN0YW5jZXNbaV0pCi0JCQkJ cGZyZWUoc28tPmRpc3RhbmNlc1tpXSk7Ci0JfQotCi0JaWYgKHNvLT53YW50X2l0dXApCi0Jewot CQkvKiBNdXN0IHBmcmVlIHJlY29uc3RydWN0ZWQgdHVwbGVzIHRvIGF2b2lkIG1lbW9yeSBsZWFr ICovCi0JCWludAkJCWk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IHNvLT5uUHRyczsgaSsrKQotCQkJ cGZyZWUoc28tPnJlY29uVHVwc1tpXSk7Ci0JfQotCXNvLT5pUHRyID0gc28tPm5QdHJzID0gMDsK IH0KIAogLyoKQEAgLTMzMiw2ICszMTQsOSBAQCBzcGdiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBp bnQga2V5c3osIGludCBvcmRlcmJ5c3opCiAJICovCiAJc28tPnJlY29uVHVwRGVzYyA9IHNjYW4t PnhzX2hpdHVwZGVzYyA9CiAJCWdldFNwR2lzdFR1cGxlRGVzYyhyZWwsICZzby0+c3RhdGUuYXR0 VHlwZSk7CisJc28tPnJlY29uQ3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1v cnlDb250ZXh0LAorCQkJCQkJCQkJCSAiU1AtR2lTVCByZWNvbnN0cnVjdGlvbiBjb250ZXh0IiwK KwkJCQkJCQkJCQkgQUxMT0NTRVRfU01BTExfU0laRVMpOwogCiAJLyogQWxsb2NhdGUgdmFyaW91 cyBhcnJheXMgbmVlZGVkIGZvciBvcmRlci1ieSBzY2FucyAqLwogCWlmIChzY2FuLT5udW1iZXJP Zk9yZGVyQnlzID4gMCkKQEAgLTM1NCw2ICszMzksMjcgQEAgc3BnYmVnaW5zY2FuKFJlbGF0aW9u IHJlbCwgaW50IGtleXN6LCBpbnQgb3JkZXJieXN6KQogCQlzY2FuLT54c19vcmRlcmJ5bnVsbHMg PSBwYWxsb2NfYXJyYXkoYm9vbCwgc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyk7CiAJCW1lbXNldChz Y2FuLT54c19vcmRlcmJ5bnVsbHMsIHRydWUsCiAJCQkgICBzaXplb2YoYm9vbCkgKiBzY2FuLT5u dW1iZXJPZk9yZGVyQnlzKTsKKworCQkvKgorCQkgKiBPcmRlcmVkIHNjYW5zIGZpbGwgYSAidmly dHVhbCIgYmF0Y2ggYnkgZHJhaW5pbmcgdGhlCisJCSAqIGRpc3RhbmNlLW9yZGVyZWQgcXVldWUs IHNvIHRoZSBiYXRjaCBzaXplIGlzIGEgdHVuaW5nIGtub2Igd2l0aCBubworCQkgKiBuYXR1cmFs IHZhbHVlLiBUZXN0aW5nIGhhcyBzaG93biB0aGF0IGEgdmVyeSBzbWFsbCBzaXplIHdpbGwKKwkJ ICogaW5jcmVhc2UgcGVyLWJhdGNoIG92ZXJoZWFkIChhbmQgbGlrZWx5IGluc3RydWN0aW9uLWNh Y2hlIG1pc3NlcyksCisJCSAqIHdoaWxlIGEgbGFyZ2Ugc2l6ZSAoc3VjaCBhcyBNYXhJbmRleFR1 cGxlc1BlclBhZ2UpIHJpc2tzIHByb2R1Y2luZworCQkgKiBtYW55IHR1cGxlcyB0aGF0IGEgTElN SVQgbm9kZSBuZXZlciBjb25zdW1lcy4gIFRoaXMgbWF4aXRlbXNiYXRjaAorCQkgKiBpcyBhIGNv bXByb21pc2UuCisJCSAqLworCQlzY2FuLT5tYXhpdGVtc2JhdGNoID0gTWF4SW5kZXhUdXBsZXNQ ZXJQYWdlIC8gMzI7CisJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIEEgbm9uLW9yZGVyZWQgYmF0 Y2ggaG9sZHMgYWxsIG9mIHRoZSBtYXRjaGVzIGZyb20gYSBzaW5nbGUgbGVhZgorCQkgKiBwYWdl LCBzbyBvbmUgcGFnZSdzIHdvcnRoIG9mIGl0ZW1zIGlzIHRoZSBuYXR1cmFsIGNhcC4gIFVzaW5n CisJCSAqIE1heEluZGV4VHVwbGVzUGVyUGFnZSBpcyBhIGJpdCBob2tleSBzaW5jZSBTcEdpc3RM ZWFmVHVwbGVzIGFyZW4ndAorCQkgKiBleGFjdGx5IEluZGV4VHVwbGVzOyBob3dldmVyLCB0aGV5 IGFyZSBsYXJnZXIsIHNvIHRoaXMgaXMgc2FmZS4KKwkJICovCisJCXNjYW4tPm1heGl0ZW1zYmF0 Y2ggPSBNYXhJbmRleFR1cGxlc1BlclBhZ2U7CiAJfQogCiAJZm1ncl9pbmZvX2NvcHkoJnNvLT5p bm5lckNvbnNpc3RlbnRGbiwKQEAgLTM2Niw2ICszNzIsOSBAQCBzcGdiZWdpbnNjYW4oUmVsYXRp b24gcmVsLCBpbnQga2V5c3osIGludCBvcmRlcmJ5c3opCiAKIAlzby0+aW5kZXhDb2xsYXRpb24g PSByZWwtPnJkX2luZGNvbGxhdGlvblswXTsKIAorCXNjYW4tPmJhdGNoX2luZGV4X29wYXF1ZV9z dGF0aWMgPSBNQVhBTElHTihzaXplb2YoU3BHaXN0QmF0Y2hEYXRhKSk7CisJc2Nhbi0+YmF0Y2hf dHVwbGVzX3dvcmtzcGFjZSA9IEJMQ0tTWjsKKwogCXNjYW4tPm9wYXF1ZSA9IHNvOwogCiAJcmV0 dXJuIHNjYW47CkBAIC00MTEsOSArNDIwLDMxIEBAIHNwZ3Jlc2NhbihJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkvKiBwcmVwcm9jZXNzIHNjYW5r ZXlzLCBzZXQgdXAgdGhlIHJlcHJlc2VudGF0aW9uIGluICpzbyAqLwogCXNwZ1ByZXBhcmVTY2Fu S2V5cyhzY2FuKTsKIAorCS8qCisJICogU2l6ZSB0aGUgZHluYW1pYyBvcGFxdWUgYXJlYSBub3cg dGhhdCB0aGUgc2NhbiBrZXlzIChhbmQgeHNfd2FudF9pdHVwKQorCSAqIGFyZSBrbm93bi4gIE9y ZGVyZWQgKHZpcnR1YWwpIGJhdGNoZXMgbmVlZCBhIGZ1bGwgU3BHaXN0QmF0Y2hJdGVtIGFycmF5 CisJICogKGVhY2ggaXRlbSdzIE9SREVSIEJZIGRpc3RhbmNlcyBpbmNsdWRlZCk7IG5vbi1vcmRl cmVkIGJhdGNoZXMgbmVlZAorCSAqIG9ubHkgYSByZWNoZWNrIGZsYWcgcGVyIGl0ZW0uICBJbmRl eC1vbmx5IHNjYW5zIChhbHdheXMgbm9uLW9yZGVyZWQpCisJICogbmVlZCBleHRyYSByb29tIGFm dGVyIHRoZSBhcnJheSBmb3IgdGhlIHJlY29uc3RydWN0aW9uIHByZWZpeCAoc2VlCisJICogU3BH aXN0QmF0Y2hHZXRSZWNvbkFyZWEgYW5kIHNwZ2NhbnJldHVybikuCisJICoKKwkgKiBXZSBkbyB0 aGlzIGhlcmUgcmF0aGVyIHRoYW4gaW4gc3BnYmVnaW5zY2FuIGJlY2F1c2UgeHNfd2FudF9pdHVw IGlzIHNldAorCSAqIGJ5IGluZGV4X2JlZ2luc2NhbiBvbmx5IGFmdGVyIGFtYmVnaW5zY2FuIHJl dHVybnMuCisJICovCisJaWYgKHNvLT5udW1iZXJPZk5vbk51bGxPcmRlckJ5cyA+IDApCisJCXNj YW4tPmJhdGNoX2luZGV4X29wYXF1ZV9keW4gPSBTcEdpc3RCYXRjaEl0ZW1BcnJheVNpemUoc2Nh bik7CisJZWxzZQorCQlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfZHluID0gU3BHaXN0QmF0Y2hS ZWNoZWNrQXJyYXlTaXplKHNjYW4pOworCWlmIChzY2FuLT54c193YW50X2l0dXApCisJCXNjYW4t PmJhdGNoX2luZGV4X29wYXF1ZV9keW4gKz0gQkxDS1NaOworCiAJLyogc2V0IHVwIHN0YXJ0aW5n IHF1ZXVlIGVudHJpZXMgKi8KIAlyZXNldFNwR2lzdFNjYW5PcGFxdWUoc28pOwogCisJLyogZGlz Y2FyZCBhbnkgaW5kZXgtb25seSB0dXBsZSByZWNvbnN0cnVjdGVkIGJ5IGEgcHJldmlvdXMgc2Nh biAqLworCU1lbW9yeUNvbnRleHRSZXNldChzby0+cmVjb25DeHQpOworCXNjYW4tPnhzX2hpdHVw ID0gTlVMTDsKKwogCS8qIGNvdW50IGFuIGluZGV4c2NhbiBmb3Igc3RhdHMgKi8KIAlwZ3N0YXRf Y291bnRfaW5kZXhfc2NhbihzY2FuLT5pbmRleFJlbGF0aW9uKTsKIAlpZiAoc2Nhbi0+aW5zdHJ1 bWVudCkKQEAgLTQyNyw2ICs0NTgsNyBAQCBzcGdlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikK IAogCU1lbW9yeUNvbnRleHREZWxldGUoc28tPnRlbXBDeHQpOwogCU1lbW9yeUNvbnRleHREZWxl dGUoc28tPnRyYXZlcnNhbEN4dCk7CisJTWVtb3J5Q29udGV4dERlbGV0ZShzby0+cmVjb25DeHQp OwogCiAJaWYgKHNvLT5rZXlEYXRhKQogCQlwZnJlZShzby0+a2V5RGF0YSk7CkBAIC00NTUsMTAg KzQ4NywxMSBAQCBzcGdlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKICAqIExlYWYgU3BHaXN0 U2VhcmNoSXRlbSBjb25zdHJ1Y3RvciwgY2FsbGVkIGluIHF1ZXVlIGNvbnRleHQKICAqLwogc3Rh dGljIFNwR2lzdFNlYXJjaEl0ZW0gKgotc3BnTmV3SGVhcEl0ZW0oU3BHaXN0U2Nhbk9wYXF1ZSBz bywgaW50IGxldmVsLCBTcEdpc3RMZWFmVHVwbGUgbGVhZlR1cGxlLAorc3BnTmV3SGVhcEl0ZW0o SW5kZXhTY2FuRGVzYyBzY2FuLCBpbnQgbGV2ZWwsIFNwR2lzdExlYWZUdXBsZSBsZWFmVHVwbGUs CiAJCQkgICBEYXR1bSBsZWFmVmFsdWUsIGJvb2wgcmVjaGVjaywgYm9vbCByZWNoZWNrRGlzdGFu Y2VzLAogCQkJICAgYm9vbCBpc251bGwsIGRvdWJsZSAqZGlzdGFuY2VzKQogeworCVNwR2lzdFNj YW5PcGFxdWUgc28gPSAoU3BHaXN0U2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVNwR2lzdFNl YXJjaEl0ZW0gKml0ZW0gPSBzcGdBbGxvY1NlYXJjaEl0ZW0oc28sIGlzbnVsbCwgZGlzdGFuY2Vz KTsKIAogCWl0ZW0tPmxldmVsID0gbGV2ZWw7CkBAIC00NzAsNyArNTAzLDcgQEAgc3BnTmV3SGVh cEl0ZW0oU3BHaXN0U2Nhbk9wYXF1ZSBzbywgaW50IGxldmVsLCBTcEdpc3RMZWFmVHVwbGUgbGVh ZlR1cGxlLAogCSAqIGlmIHdlIGRpZG4ndCBhc2sgaXQgdG8sIGFuZCBtaWxkbHktYnJva2VuIG1l dGhvZHMgbWlnaHQgc3VwcGx5IG9uZSBvZgogCSAqIHRoZSB3cm9uZyB0eXBlLiAgVGhlIGNvcnJl Y3QgbGVhZlZhbHVlIHR5cGUgaXMgYXR0VHlwZSBub3QgbGVhZlR5cGUuCiAJICovCi0JaWYgKHNv LT53YW50X2l0dXApCisJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKIAl7CiAJCWl0ZW0tPnZhbHVl ID0gaXNudWxsID8gKERhdHVtKSAwIDoKIAkJCWRhdHVtQ29weShsZWFmVmFsdWUsIHNvLT5zdGF0 ZS5hdHRUeXBlLmF0dGJ5dmFsLApAQCAtNTAyLDE2ICs1MzUsMTggQEAgc3BnTmV3SGVhcEl0ZW0o U3BHaXN0U2Nhbk9wYXF1ZSBzbywgaW50IGxldmVsLCBTcEdpc3RMZWFmVHVwbGUgbGVhZlR1cGxl LAogfQogCiAvKgotICogVGVzdCB3aGV0aGVyIGEgbGVhZiB0dXBsZSBzYXRpc2ZpZXMgYWxsIHRo ZSBzY2FuIGtleXMKKyAqIFRlc3Qgd2hldGhlciBhIGxlYWYgdHVwbGUgc2F0aXNmaWVzIGFsbCB0 aGUgc2NhbiBrZXlzLgogICoKLSAqICpyZXBvcnRlZFNvbWUgaXMgc2V0IHRvIHRydWUgaWY6Ci0g KgkJdGhlIHNjYW4gaXMgbm90IG9yZGVyZWQgQU5EIHRoZSBpdGVtIHNhdGlzZmllcyB0aGUgc2Nh bmtleXMKKyAqIFdoZW4gYSBtYXRjaCBpcyBmb3VuZCwgYW4gb3JkZXJlZCBzY2FuIHF1ZXVlcyB0 aGUgaGVhcCB0dXBsZSBmb3IgbGF0ZXIKKyAqIGRpc3RhbmNlLW9yZGVyZWQgZHJhaW5pbmcuICBB IG5vbi1vcmRlcmVkIHNjYW4gYXBwZW5kcyBpdCB0byBiYXRjaC4KKyAqCisgKiAnYmF0Y2gnIGFy ZyBpcyBOVUxMIGZvciBvcmRlcmVkIHNjYW5zLgogICovCiBzdGF0aWMgYm9vbAotc3BnTGVhZlRl c3QoU3BHaXN0U2Nhbk9wYXF1ZSBzbywgU3BHaXN0U2VhcmNoSXRlbSAqaXRlbSwKLQkJCVNwR2lz dExlYWZUdXBsZSBsZWFmVHVwbGUsIGJvb2wgaXNudWxsLAotCQkJYm9vbCAqcmVwb3J0ZWRTb21l LCBzdG9yZVJlc19mdW5jIHN0b3JlUmVzKQorc3BnTGVhZlRlc3QoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTcEdpc3RTZWFyY2hJdGVtICppdGVtLAorCQkJU3BHaXN0TGVhZlR1cGxlIGxlYWZUdXBsZSwg Ym9vbCBpc251bGwsIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogeworCVNwR2lzdFNjYW5PcGFxdWUg c28gPSAoU3BHaXN0U2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCURhdHVtCQlsZWFmVmFsdWU7 CiAJZG91YmxlCSAgICpkaXN0YW5jZXM7CiAJYm9vbAkJcmVzdWx0OwpAQCAtNTQ0LDcgKzU3OSw3 IEBAIHNwZ0xlYWZUZXN0KFNwR2lzdFNjYW5PcGFxdWUgc28sIFNwR2lzdFNlYXJjaEl0ZW0gKml0 ZW0sCiAJCWluLnJlY29uc3RydWN0ZWRWYWx1ZSA9IGl0ZW0tPnZhbHVlOwogCQlpbi50cmF2ZXJz YWxWYWx1ZSA9IGl0ZW0tPnRyYXZlcnNhbFZhbHVlOwogCQlpbi5sZXZlbCA9IGl0ZW0tPmxldmVs OwotCQlpbi5yZXR1cm5EYXRhID0gc28tPndhbnRfaXR1cDsKKwkJaW4ucmV0dXJuRGF0YSA9IHNj YW4tPnhzX3dhbnRfaXR1cDsKIAkJaW4ubGVhZkRhdHVtID0gU0dMVERBVFVNKGxlYWZUdXBsZSwg JnNvLT5zdGF0ZSk7CiAKIAkJb3V0LmxlYWZWYWx1ZSA9IChEYXR1bSkgMDsKQEAgLTU2OSwxNSAr NjA0LDE2IEBAIHNwZ0xlYWZUZXN0KFNwR2lzdFNjYW5PcGFxdWUgc28sIFNwR2lzdFNlYXJjaEl0 ZW0gKml0ZW0sCiAJCS8qIGl0ZW0gcGFzc2VzIHRoZSBzY2Fua2V5cyAqLwogCQlpZiAoc28tPm51 bWJlck9mTm9uTnVsbE9yZGVyQnlzID4gMCkKIAkJewotCQkJLyogdGhlIHNjYW4gaXMgb3JkZXJl ZCAtPiBhZGQgdGhlIGl0ZW0gdG8gdGhlIHF1ZXVlICovCi0JCQlNZW1vcnlDb250ZXh0IG9sZEN4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzby0+dHJhdmVyc2FsQ3h0KTsKLQkJCVNwR2lzdFNl YXJjaEl0ZW0gKmhlYXBJdGVtID0gc3BnTmV3SGVhcEl0ZW0oc28sIGl0ZW0tPmxldmVsLAotCQkJ CQkJCQkJCQkJCQlsZWFmVHVwbGUsCi0JCQkJCQkJCQkJCQkJCWxlYWZWYWx1ZSwKLQkJCQkJCQkJ CQkJCQkJcmVjaGVjaywKLQkJCQkJCQkJCQkJCQkJcmVjaGVja0Rpc3RhbmNlcywKLQkJCQkJCQkJ CQkJCQkJaXNudWxsLAotCQkJCQkJCQkJCQkJCQlkaXN0YW5jZXMpOworCQkJLyogVGhlIHNjYW4g aXMgb3JkZXJlZDsgYWRkIHRoZSBpdGVtIHRvIHRoZSBxdWV1ZSAqLworCQkJTWVtb3J5Q29udGV4 dCBvbGRDeHQ7CisJCQlTcEdpc3RTZWFyY2hJdGVtICpoZWFwSXRlbTsKKworCQkJQXNzZXJ0KHNj YW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCk7CisKKwkJCW9sZEN4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhzby0+dHJhdmVyc2FsQ3h0KTsKKwkJCWhlYXBJdGVtID0gc3BnTmV3SGVhcEl0ZW0o c2NhbiwgaXRlbS0+bGV2ZWwsIGxlYWZUdXBsZSwgbGVhZlZhbHVlLAorCQkJCQkJCQkJICByZWNo ZWNrLCByZWNoZWNrRGlzdGFuY2VzLCBpc251bGwsCisJCQkJCQkJCQkgIGRpc3RhbmNlcyk7CiAK IAkJCXNwZ0FkZFNlYXJjaEl0ZW1Ub1F1ZXVlKHNvLCBoZWFwSXRlbSk7CiAKQEAgLTU4NSwxMSAr NjIxLDQxIEBAIHNwZ0xlYWZUZXN0KFNwR2lzdFNjYW5PcGFxdWUgc28sIFNwR2lzdFNlYXJjaEl0 ZW0gKml0ZW0sCiAJCX0KIAkJZWxzZQogCQl7Ci0JCQkvKiBub24tb3JkZXJlZCBzY2FuLCBzbyBy ZXBvcnQgdGhlIGl0ZW0gcmlnaHQgYXdheSAqLworCQkJLyoKKwkJCSAqIFRoZSBzY2FuIGlzIG5v bi1vcmRlcmVkOyBhZGQgdGhlIGl0ZW0gdG8gY2FsbGVyJ3MgYmF0Y2gKKwkJCSAqIGRpcmVjdGx5 LgorCQkJICovCisJCQlpbnQJCQlpID0gKytiYXRjaC0+bGFzdEl0ZW07CisKIAkJCUFzc2VydCgh cmVjaGVja0Rpc3RhbmNlcyk7Ci0JCQlzdG9yZVJlcyhzbywgJmxlYWZUdXBsZS0+aGVhcFB0ciwg bGVhZlZhbHVlLCBpc251bGwsCi0JCQkJCSBsZWFmVHVwbGUsIHJlY2hlY2ssIGZhbHNlLCBOVUxM KTsKLQkJCSpyZXBvcnRlZFNvbWUgPSB0cnVlOworCQkJQXNzZXJ0KGkgPCBzY2FuLT5tYXhpdGVt c2JhdGNoKTsKKworCQkJYmF0Y2gtPml0ZW1zW2ldLnRhYmxlVGlkID0gbGVhZlR1cGxlLT5oZWFw UHRyOworCQkJYmF0Y2gtPml0ZW1zW2ldLmluZGV4T2Zmc2V0ID0gSW52YWxpZE9mZnNldE51bWJl cjsJLyogbWVhbmluZ2xlc3MgKi8KKwkJCWJhdGNoLT5pdGVtc1tpXS50dXBsZU9mZnNldCA9IDA7 CisKKwkJCVNwR2lzdEJhdGNoR2V0UmVjaGVjayhzY2FuLCBiYXRjaClbaV0gPSByZWNoZWNrOwor CisJCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCQkJeworCQkJCVNpemUJCXN6ID0gbGVhZlR1 cGxlLT5zaXplOworCQkJCWludAkJCW9mZiA9IDA7CisKKwkJCQlpZiAoaSA+IGJhdGNoLT5maXJz dEl0ZW0pCisJCQkJeworCQkJCQlpbnQJCQlwcmV2ID0gYmF0Y2gtPml0ZW1zW2kgLSAxXS50dXBs ZU9mZnNldDsKKworCQkJCQkvKgorCQkJCQkgKiBDb3B5IHR1cGxlIHRvIHBvaW50IGltbWVkaWF0 ZWx5IGFmdGVyIG1vc3QgcmVjZW50bHkKKwkJCQkJICogYXBwZW5kZWQgdHVwbGUKKwkJCQkJICov CisJCQkJCW9mZiA9IHByZXYgKyAoKFNwR2lzdExlYWZUdXBsZSkgKGJhdGNoLT5jdXJyVHVwbGVz ICsgcHJldikpLT5zaXplOworCQkJCX0KKworCQkJCWJhdGNoLT5pdGVtc1tpXS50dXBsZU9mZnNl dCA9IG9mZjsKKwkJCQltZW1jcHkoYmF0Y2gtPmN1cnJUdXBsZXMgKyBvZmYsIGxlYWZUdXBsZSwg c3opOworCQkJCUFzc2VydChvZmYgKyBzeiA8PSBzY2FuLT5iYXRjaF90dXBsZXNfd29ya3NwYWNl KTsKKwkJCX0KIAkJfQogCX0KIApAQCAtNTk5LDEwICs2NjUsMTIgQEAgc3BnTGVhZlRlc3QoU3BH aXN0U2Nhbk9wYXF1ZSBzbywgU3BHaXN0U2VhcmNoSXRlbSAqaXRlbSwKIC8qIEEgYnVuZGxlIGlu aXRpYWxpemVyIGZvciBpbm5lcl9jb25zaXN0ZW50IG1ldGhvZHMgKi8KIHN0YXRpYyB2b2lkCiBz cGdJbml0SW5uZXJDb25zaXN0ZW50SW4oc3BnSW5uZXJDb25zaXN0ZW50SW4gKmluLAotCQkJCQkJ IFNwR2lzdFNjYW5PcGFxdWUgc28sCisJCQkJCQkgSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJ IFNwR2lzdFNlYXJjaEl0ZW0gKml0ZW0sCiAJCQkJCQkgU3BHaXN0SW5uZXJUdXBsZSBpbm5lclR1 cGxlKQogeworCVNwR2lzdFNjYW5PcGFxdWUgc28gPSAoU3BHaXN0U2Nhbk9wYXF1ZSkgc2Nhbi0+ b3BhcXVlOworCiAJaW4tPnNjYW5rZXlzID0gc28tPmtleURhdGE7CiAJaW4tPm9yZGVyYnlzID0g c28tPm9yZGVyQnlEYXRhOwogCWluLT5ua2V5cyA9IHNvLT5udW1iZXJPZktleXM7CkBAIC02MTIs NyArNjgwLDcgQEAgc3BnSW5pdElubmVyQ29uc2lzdGVudEluKHNwZ0lubmVyQ29uc2lzdGVudElu ICppbiwKIAlpbi0+dHJhdmVyc2FsTWVtb3J5Q29udGV4dCA9IHNvLT50cmF2ZXJzYWxDeHQ7CiAJ aW4tPnRyYXZlcnNhbFZhbHVlID0gaXRlbS0+dHJhdmVyc2FsVmFsdWU7CiAJaW4tPmxldmVsID0g aXRlbS0+bGV2ZWw7Ci0JaW4tPnJldHVybkRhdGEgPSBzby0+d2FudF9pdHVwOworCWluLT5yZXR1 cm5EYXRhID0gc2Nhbi0+eHNfd2FudF9pdHVwOwogCWluLT5hbGxUaGVTYW1lID0gaW5uZXJUdXBs ZS0+YWxsVGhlU2FtZTsKIAlpbi0+aGFzUHJlZml4ID0gKGlubmVyVHVwbGUtPnByZWZpeFNpemUg PiAwKTsKIAlpbi0+cHJlZml4RGF0dW0gPSBTR0lUREFUVU0oaW5uZXJUdXBsZSwgJnNvLT5zdGF0 ZSk7CkBAIC02NTksOSArNzI3LDEwIEBAIHNwZ01ha2VJbm5lckl0ZW0oU3BHaXN0U2Nhbk9wYXF1 ZSBzbywKIH0KIAogc3RhdGljIHZvaWQKLXNwZ0lubmVyVGVzdChTcEdpc3RTY2FuT3BhcXVlIHNv LCBTcEdpc3RTZWFyY2hJdGVtICppdGVtLAorc3BnSW5uZXJUZXN0KEluZGV4U2NhbkRlc2Mgc2Nh biwgU3BHaXN0U2VhcmNoSXRlbSAqaXRlbSwKIAkJCSBTcEdpc3RJbm5lclR1cGxlIGlubmVyVHVw bGUsIGJvb2wgaXNudWxsKQogeworCVNwR2lzdFNjYW5PcGFxdWUgc28gPSAoU3BHaXN0U2Nhbk9w YXF1ZSkgc2Nhbi0+b3BhcXVlOwogCU1lbW9yeUNvbnRleHQgb2xkQ3h0ID0gTWVtb3J5Q29udGV4 dFN3aXRjaFRvKHNvLT50ZW1wQ3h0KTsKIAlzcGdJbm5lckNvbnNpc3RlbnRPdXQgb3V0OwogCWlu dAkJCW5Ob2RlcyA9IGlubmVyVHVwbGUtPm5Ob2RlczsKQEAgLTY3Myw3ICs3NDIsNyBAQCBzcGdJ bm5lclRlc3QoU3BHaXN0U2Nhbk9wYXF1ZSBzbywgU3BHaXN0U2VhcmNoSXRlbSAqaXRlbSwKIAl7 CiAJCXNwZ0lubmVyQ29uc2lzdGVudEluIGluOwogCi0JCXNwZ0luaXRJbm5lckNvbnNpc3RlbnRJ bigmaW4sIHNvLCBpdGVtLCBpbm5lclR1cGxlKTsKKwkJc3BnSW5pdElubmVyQ29uc2lzdGVudElu KCZpbiwgc2NhbiwgaXRlbSwgaW5uZXJUdXBsZSk7CiAKIAkJLyogdXNlIHVzZXItZGVmaW5lZCBp bm5lciBjb25zaXN0ZW50IG1ldGhvZCAqLwogCQlGdW5jdGlvbkNhbGwyQ29sbCgmc28tPmlubmVy Q29uc2lzdGVudEZuLApAQCAtNzU1LDEyICs4MjQsMTEgQEAgZW51bSBTcEdpc3RTcGVjaWFsT2Zm c2V0TnVtYmVycwogfTsKIAogc3RhdGljIE9mZnNldE51bWJlcgotc3BnVGVzdExlYWZUdXBsZShT cEdpc3RTY2FuT3BhcXVlIHNvLAorc3BnVGVzdExlYWZUdXBsZShJbmRleFNjYW5EZXNjIHNjYW4s CiAJCQkJIFNwR2lzdFNlYXJjaEl0ZW0gKml0ZW0sCiAJCQkJIFBhZ2UgcGFnZSwgT2Zmc2V0TnVt YmVyIG9mZnNldCwKIAkJCQkgYm9vbCBpc251bGwsIGJvb2wgaXNyb290LAotCQkJCSBib29sICpy ZXBvcnRlZFNvbWUsCi0JCQkJIHN0b3JlUmVzX2Z1bmMgc3RvcmVSZXMpCisJCQkJIEluZGV4U2Nh bkJhdGNoIGJhdGNoKQogewogCVNwR2lzdExlYWZUdXBsZSBsZWFmVHVwbGUgPSAoU3BHaXN0TGVh ZlR1cGxlKQogCQlQYWdlR2V0SXRlbShwYWdlLCBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZnNldCkp OwpAQCAtNzk2LDExNyArODY0LDkxIEBAIHNwZ1Rlc3RMZWFmVHVwbGUoU3BHaXN0U2Nhbk9wYXF1 ZSBzbywKIAogCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQoJmxlYWZUdXBsZS0+aGVhcFB0cikp OwogCi0Jc3BnTGVhZlRlc3Qoc28sIGl0ZW0sIGxlYWZUdXBsZSwgaXNudWxsLCByZXBvcnRlZFNv bWUsIHN0b3JlUmVzKTsKKwlzcGdMZWFmVGVzdChzY2FuLCBpdGVtLCBsZWFmVHVwbGUsIGlzbnVs bCwgYmF0Y2gpOwogCiAJcmV0dXJuIFNHTFRfR0VUX05FWFRPRkZTRVQobGVhZlR1cGxlKTsKIH0K IAogLyoKLSAqIFdhbGsgdGhlIHRyZWUgYW5kIHJlcG9ydCBhbGwgdHVwbGVzIHBhc3NpbmcgdGhl IHNjYW4gcXVhbHMgdG8gdGhlIHN0b3JlUmVzCi0gKiBzdWJyb3V0aW5lLgorICogV2FsayB0aGUg dHJlZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGJhdGNoIG9mIG1hdGNoaW5nIHR1cGxlcy4KICAqCi0g KiBJZiBzY2FuV2hvbGVJbmRleCBpcyB0cnVlLCB3ZSdsbCBkbyBqdXN0IHRoYXQuICBJZiBub3Qs IHdlJ2xsIHN0b3AgYXQgdGhlCi0gKiBuZXh0IHBhZ2UgYm91bmRhcnkgb25jZSB3ZSBoYXZlIHJl cG9ydGVkIGF0IGxlYXN0IG9uZSB0dXBsZS4KKyAqIE1haW4gZHJpdmVyIG9mIHNwZ2lzdGdldGJp dG1hcCBhbmQgbm9uLW9yZGVyZWQgc3BnaXN0Z2V0YmF0Y2ggc2NhbnMuCiAgKi8KLXN0YXRpYyB2 b2lkCi1zcGdXYWxrKFJlbGF0aW9uIGluZGV4LCBTcEdpc3RTY2FuT3BhcXVlIHNvLCBib29sIHNj YW5XaG9sZUluZGV4LAotCQlzdG9yZVJlc19mdW5jIHN0b3JlUmVzKQorc3RhdGljIEluZGV4U2Nh bkJhdGNoCitzcGdXYWxrKEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKKwlTcEdpc3RTY2FuT3BhcXVl IHNvID0gKFNwR2lzdFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlJbmRleFNjYW5CYXRjaCBi YXRjaDsKIAlCdWZmZXIJCWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7Ci0JYm9vbAkJcmVwb3J0ZWRT b21lID0gZmFsc2U7CiAKLQl3aGlsZSAoc2Nhbldob2xlSW5kZXggfHwgIXJlcG9ydGVkU29tZSkK KwliYXRjaCA9IGluZGV4YW1fdXRpbF9hbGxvY19iYXRjaChzY2FuKTsKKworCS8qIFNQLUdpU1Qg b25seSBldmVyIHNjYW5zIGZvcndhcmQ7IHNldCB0aGUgYmF0Y2gncyBkaXJlY3Rpb24gdXAgZnJv bnQgKi8KKwliYXRjaC0+ZGlyID0gRm9yd2FyZFNjYW5EaXJlY3Rpb247CisKKwkvKiBXYWxrIHVu dGlsIGEgbGVhZiBwYWdlIHlpZWxkcyBtYXRjaGVzLCBvciB0aGUgaW5kZXggaXMgZXhoYXVzdGVk ICovCisJd2hpbGUgKGJhdGNoLT5maXJzdEl0ZW0gPiBiYXRjaC0+bGFzdEl0ZW0pCiAJewogCQlT cEdpc3RTZWFyY2hJdGVtICppdGVtID0gc3BnR2V0TmV4dFF1ZXVlSXRlbShzbyk7CisJCVBhZ2UJ CXBhZ2U7CiAKIAkJaWYgKGl0ZW0gPT0gTlVMTCkKIAkJCWJyZWFrOwkJCQkvKiBObyBtb3JlIGl0 ZW1zIGluIHF1ZXVlIC0+IGRvbmUgKi8KIAotcmVkaXJlY3Q6Ci0JCS8qIENoZWNrIGZvciBpbnRl cnJ1cHRzLCBqdXN0IGluIGNhc2Ugb2YgaW5maW5pdGUgbG9vcCAqLwotCQlDSEVDS19GT1JfSU5U RVJSVVBUUygpOworCQkvKiBIZWFwIGl0ZW1zIG9ubHkgb2NjdXIgaW4gb3JkZXJlZCBzY2FucyAo c2VlIHNwZ1dhbGtPcmRlcmVkKSAqLworCQlBc3NlcnQoIWl0ZW0tPmlzTGVhZik7CiAKLQkJaWYg KGl0ZW0tPmlzTGVhZikKLQkJewotCQkJLyogV2Ugc3RvcmUgaGVhcCBpdGVtcyBpbiB0aGUgcXVl dWUgb25seSBpbiBjYXNlIG9mIG9yZGVyZWQgc2VhcmNoICovCi0JCQlBc3NlcnQoc28tPm51bWJl ck9mTm9uTnVsbE9yZGVyQnlzID4gMCk7Ci0JCQlzdG9yZVJlcyhzbywgJml0ZW0tPmhlYXBQdHIs IGl0ZW0tPnZhbHVlLCBpdGVtLT5pc051bGwsCi0JCQkJCSBpdGVtLT5sZWFmVHVwbGUsIGl0ZW0t PnJlY2hlY2ssCi0JCQkJCSBpdGVtLT5yZWNoZWNrRGlzdGFuY2VzLCBpdGVtLT5kaXN0YW5jZXMp OwotCQkJcmVwb3J0ZWRTb21lID0gdHJ1ZTsKLQkJfQorCQkvKgorCQkgKiBOYXZpZ2F0ZSB0byB0 aGUgaXRlbSdzIGxpdmUgcGFnZSwgdGhlbiBwcm9jZXNzIGl0cyBjb250ZW50cy4KKwkJICoKKwkJ ICogTm90ZTogc3BnUmVhZEl0ZW1QYWdlIGNhbGxzIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkuCisJ CSAqLworCQlidWZmZXIgPSBzcGdSZWFkSXRlbVBhZ2Uoc2NhbiwgaXRlbSwgYnVmZmVyKTsKKwkJ cGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKKworCQlpZiAoU3BHaXN0UGFnZUlzTGVhZihw YWdlKSkKKwkJCXNwZ1Byb2Nlc3NMZWFmUGFnZShzY2FuLCBpdGVtLCBwYWdlLCBiYXRjaCk7CiAJ CWVsc2UKKwkJCXNwZ1Byb2Nlc3NJbm5lclBhZ2Uoc2NhbiwgaXRlbSwgcGFnZSk7CisKKwkJaWYg KGJhdGNoLT5maXJzdEl0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtKQogCQl7Ci0JCQlCbG9ja051bWJl ciBibGtubyA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoJml0ZW0tPmhlYXBQdHIpOwotCQkJ T2Zmc2V0TnVtYmVyIG9mZnNldCA9IEl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyKCZpdGVtLT5o ZWFwUHRyKTsKLQkJCVBhZ2UJCXBhZ2U7Ci0JCQlib29sCQlpc251bGw7CisJCQkvKiBiYXRjaCBo YXMgbWF0Y2hpbmcgaXRlbXMgdG8gcmV0dXJuICovCisJCQlTcEdpc3RCYXRjaERhdGEgKnNiYXRj aCA9IFNwR2lzdEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCk7CiAKLQkJCWlmIChidWZmZXIgPT0g SW52YWxpZEJ1ZmZlcikKKwkJCUFzc2VydChCdWZmZXJJc1ZhbGlkKGJ1ZmZlcikpOworCQkJQXNz ZXJ0KFNwR2lzdFBhZ2VJc0xlYWYoQnVmZmVyR2V0UGFnZShidWZmZXIpKSk7CisKKwkJCXNiYXRj aC0+YnVmID0gYnVmZmVyOworCQkJc2JhdGNoLT5ibGtubyA9IEJ1ZmZlckdldEJsb2NrTnVtYmVy KGJ1ZmZlcik7CisKKwkJCWlmIChzY2FuLT54c193YW50X2l0dXApCiAJCQl7Ci0JCQkJYnVmZmVy ID0gUmVhZEJ1ZmZlcihpbmRleCwgYmxrbm8pOwotCQkJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZG RVJfTE9DS19TSEFSRSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChibGtubyAhPSBCdWZmZXJHZXRCbG9j a051bWJlcihidWZmZXIpKQotCQkJewotCQkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsK LQkJCQlidWZmZXIgPSBSZWFkQnVmZmVyKGluZGV4LCBibGtubyk7Ci0JCQkJTG9ja0J1ZmZlcihi dWZmZXIsIEJVRkZFUl9MT0NLX1NIQVJFKTsKLQkJCX0KKwkJCQkvKgorCQkJCSAqIFN0YXNoIHRo ZSBzaGFyZWQgcmVjb25zdHJ1Y3Rpb24gcHJlZml4IGZvciBzcGdnZXR0cmFuc2Zvcm0sCisJCQkJ ICogd2hpY2ggcnVucyBhZnRlciBpdGVtIGlzIGZyZWVkLiAgVGhlIHByZWZpeCAoaXRlbS0+dmFs dWUpCisJCQkJICogaXMgdGhlIHNhbWUgZm9yIGV2ZXJ5IG1hdGNoIGluIHRoZSBiYXRjaC4gIEl0 IGNhbiBiZSBOVUxMCisJCQkJICogd2hlbiB0aGUgb3BjbGFzcyByZWNvbnN0cnVjdHMgZW50aXJl bHkgZnJvbSB0aGUgbGVhZiBkYXR1bQorCQkJCSAqIChlLmcuIHF1YWQva2QtdHJlZSkgb3IgYXQg dGhlIHJvb3QgbGV2ZWwuCisJCQkJICovCisJCQkJc2JhdGNoLT5sZXZlbCA9IGl0ZW0tPmxldmVs OworCQkJCXNiYXRjaC0+aXNOdWxsID0gaXRlbS0+aXNOdWxsOwogCi0JCQkvKiBlbHNlIG5ldyBw b2ludGVyIHBvaW50cyB0byB0aGUgc2FtZSBwYWdlLCBubyB3b3JrIG5lZWRlZCAqLwotCi0JCQlw YWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIpOwotCi0JCQlpc251bGwgPSBTcEdpc3RQYWdlU3Rv cmVzTnVsbHMocGFnZSkgPyB0cnVlIDogZmFsc2U7Ci0KLQkJCWlmIChTcEdpc3RQYWdlSXNMZWFm KHBhZ2UpKQotCQkJewotCQkJCS8qIFBhZ2UgaXMgYSBsZWFmIC0gdGhhdCBpcywgYWxsIGl0cyB0 dXBsZXMgYXJlIGhlYXAgaXRlbXMgKi8KLQkJCQlPZmZzZXROdW1iZXIgbWF4ID0gUGFnZUdldE1h eE9mZnNldE51bWJlcihwYWdlKTsKLQotCQkJCWlmIChTcEdpc3RCbG9ja0lzUm9vdChibGtubykp CisJCQkJaWYgKHNvLT5zdGF0ZS5hdHRMZWFmVHlwZS5hdHRieXZhbCB8fCBpdGVtLT5pc051bGwg fHwKKwkJCQkJRGF0dW1HZXRQb2ludGVyKGl0ZW0tPnZhbHVlKSA9PSBOVUxMKQogCQkJCXsKLQkJ CQkJLyogV2hlbiByb290IGlzIGEgbGVhZiwgZXhhbWluZSBhbGwgaXRzIHR1cGxlcyAqLwotCQkJ CQlmb3IgKG9mZnNldCA9IEZpcnN0T2Zmc2V0TnVtYmVyOyBvZmZzZXQgPD0gbWF4OyBvZmZzZXQr KykKLQkJCQkJCSh2b2lkKSBzcGdUZXN0TGVhZlR1cGxlKHNvLCBpdGVtLCBwYWdlLCBvZmZzZXQs Ci0JCQkJCQkJCQkJCQlpc251bGwsIHRydWUsCi0JCQkJCQkJCQkJCQkmcmVwb3J0ZWRTb21lLCBz dG9yZVJlcyk7CisJCQkJCXNiYXRjaC0+cmVjb25WYWx1ZSA9IGl0ZW0tPnZhbHVlOwogCQkJCX0K IAkJCQllbHNlCiAJCQkJewotCQkJCQkvKiBOb3JtYWwgY2FzZToganVzdCBleGFtaW5lIHRoZSBj aGFpbiB3ZSBhcnJpdmVkIGF0ICovCi0JCQkJCXdoaWxlIChvZmZzZXQgIT0gSW52YWxpZE9mZnNl dE51bWJlcikKLQkJCQkJewotCQkJCQkJQXNzZXJ0KG9mZnNldCA+PSBGaXJzdE9mZnNldE51bWJl ciAmJiBvZmZzZXQgPD0gbWF4KTsKLQkJCQkJCW9mZnNldCA9IHNwZ1Rlc3RMZWFmVHVwbGUoc28s IGl0ZW0sIHBhZ2UsIG9mZnNldCwKLQkJCQkJCQkJCQkJCSAgaXNudWxsLCBmYWxzZSwKLQkJCQkJ CQkJCQkJCSAgJnJlcG9ydGVkU29tZSwgc3RvcmVSZXMpOwotCQkJCQkJaWYgKG9mZnNldCA9PSBT cEdpc3RSZWRpcmVjdE9mZnNldE51bWJlcikKLQkJCQkJCQlnb3RvIHJlZGlyZWN0OwotCQkJCQl9 Ci0JCQkJfQotCQkJfQotCQkJZWxzZQkJCQkvKiBwYWdlIGlzIGlubmVyICovCi0JCQl7Ci0JCQkJ U3BHaXN0SW5uZXJUdXBsZSBpbm5lclR1cGxlID0gKFNwR2lzdElubmVyVHVwbGUpCi0JCQkJCVBh Z2VHZXRJdGVtKHBhZ2UsIFBhZ2VHZXRJdGVtSWQocGFnZSwgb2Zmc2V0KSk7CisJCQkJCS8qIHBh c3MtYnktcmVmZXJlbmNlIHByZWZpeDogY29weSBpdCBpbnRvIHRoZSByZWNvbiBhcmVhICovCisJ CQkJCVNpemUJCXN6ID0gZGF0dW1HZXRTaXplKGl0ZW0tPnZhbHVlLCBmYWxzZSwKKwkJCQkJCQkJ CQkJCSAgc28tPnN0YXRlLmF0dExlYWZUeXBlLmF0dGxlbik7CisJCQkJCWNoYXIJICAgKmRlc3Qg PSBTcEdpc3RCYXRjaEdldFJlY29uQXJlYShzY2FuLCBiYXRjaCk7CiAKLQkJCQlpZiAoaW5uZXJU dXBsZS0+dHVwc3RhdGUgIT0gU1BHSVNUX0xJVkUpCi0JCQkJewotCQkJCQlpZiAoaW5uZXJUdXBs ZS0+dHVwc3RhdGUgPT0gU1BHSVNUX1JFRElSRUNUKQotCQkJCQl7Ci0JCQkJCQkvKiB0cmFuc2Zl ciBhdHRlbnRpb24gdG8gcmVkaXJlY3QgcG9pbnQgKi8KLQkJCQkJCWl0ZW0tPmhlYXBQdHIgPSAo KFNwR2lzdERlYWRUdXBsZSkgaW5uZXJUdXBsZSktPnBvaW50ZXI7Ci0JCQkJCQlBc3NlcnQoSXRl bVBvaW50ZXJHZXRCbG9ja051bWJlcigmaXRlbS0+aGVhcFB0cikgIT0KLQkJCQkJCQkgICBTUEdJ U1RfTUVUQVBBR0VfQkxLTk8pOwotCQkJCQkJZ290byByZWRpcmVjdDsKLQkJCQkJfQotCQkJCQll bG9nKEVSUk9SLCAidW5leHBlY3RlZCBTUEdpU1QgdHVwbGUgc3RhdGU6ICVkIiwKLQkJCQkJCSBp bm5lclR1cGxlLT50dXBzdGF0ZSk7CisJCQkJCW1lbWNweShkZXN0LCBEYXR1bUdldFBvaW50ZXIo aXRlbS0+dmFsdWUpLCBzeik7CisJCQkJCXNiYXRjaC0+cmVjb25WYWx1ZSA9IFBvaW50ZXJHZXRE YXR1bShkZXN0KTsKIAkJCQl9Ci0KLQkJCQlzcGdJbm5lclRlc3Qoc28sIGl0ZW0sIGlubmVyVHVw bGUsIGlzbnVsbCk7CiAJCQl9CiAJCX0KIApAQCAtOTE2LDE3NSArOTU4LDUxMSBAQCByZWRpcmVj dDoKIAkJTWVtb3J5Q29udGV4dFJlc2V0KHNvLT50ZW1wQ3h0KTsKIAl9CiAKLQlpZiAoYnVmZmVy ICE9IEludmFsaWRCdWZmZXIpCi0JCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwlpZiAo YmF0Y2gtPmZpcnN0SXRlbSA+IGJhdGNoLT5sYXN0SXRlbSkKKwl7CisJCS8qIHF1ZXVlIGV4aGF1 c3RlZCB3aXRob3V0IGZpbmRpbmcgYW55IG1hdGNoZXM6IGVuZCBvZiBzY2FuICovCisJCWlmIChi dWZmZXIgIT0gSW52YWxpZEJ1ZmZlcikKKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsK KwkJaW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2goc2NhbiwgYmF0Y2gpOworCQlyZXR1cm4gTlVM TDsKKwl9CisKKwlpbmRleGFtX3V0aWxfdW5sb2NrX2JhdGNoKHNjYW4sIGJhdGNoLCBidWZmZXIp OworCisJcmV0dXJuIGJhdGNoOwogfQogCi0KLS8qIHN0b3JlUmVzIHN1YnJvdXRpbmUgZm9yIGdl dGJpdG1hcCBjYXNlICovCisvKgorICogQ29udmVydCBhbiBvcmRlcmVkIGhlYXAgaXRlbSdzIGZs YXR0ZW5lZCBkaXN0YW5jZXMgaW50byB0aGUgYmF0Y2ggaXRlbSdzCisgKiBJbmRleE9yZGVyQnlE aXN0YW5jZSBhcnJheSwgaG9ub3Jpbmcgbm9uTnVsbE9yZGVyQnlPZmZzZXRzLgorICovCiBzdGF0 aWMgdm9pZAotc3RvcmVCaXRtYXAoU3BHaXN0U2Nhbk9wYXF1ZSBzbywgSXRlbVBvaW50ZXIgaGVh cFB0ciwKLQkJCURhdHVtIGxlYWZWYWx1ZSwgYm9vbCBpc251bGwsCi0JCQlTcEdpc3RMZWFmVHVw bGUgbGVhZlR1cGxlLCBib29sIHJlY2hlY2ssCi0JCQlib29sIHJlY2hlY2tEaXN0YW5jZXMsIGRv dWJsZSAqZGlzdGFuY2VzKQorc3BnRmlsbEJhdGNoSXRlbURpc3RhbmNlcyhTcEdpc3RTY2FuT3Bh cXVlIHNvLCBTcEdpc3RCYXRjaEl0ZW0gKmJpdGVtLAorCQkJCQkJICBTcEdpc3RTZWFyY2hJdGVt ICppdGVtKQogewotCUFzc2VydCghcmVjaGVja0Rpc3RhbmNlcyAmJiAhZGlzdGFuY2VzKTsKLQl0 Ym1fYWRkX3R1cGxlcyhzby0+dGJtLCBoZWFwUHRyLCAxLCByZWNoZWNrKTsKLQlzby0+bnRpZHMr KzsKKwlpZiAoaXRlbS0+aXNOdWxsIHx8IHNvLT5udW1iZXJPZk5vbk51bGxPcmRlckJ5cyA8PSAw KQorCXsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzby0+bnVtYmVyT2ZPcmRlckJ5czsgaSsrKQor CQl7CisJCQliaXRlbS0+ZGlzdGFuY2VzW2ldLnZhbHVlID0gMC4wOworCQkJYml0ZW0tPmRpc3Rh bmNlc1tpXS5pc251bGwgPSB0cnVlOworCQl9CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGludCBp ID0gMDsgaSA8IHNvLT5udW1iZXJPZk9yZGVyQnlzOyBpKyspCisJeworCQlpbnQJCQlvZmZzZXQg PSBzby0+bm9uTnVsbE9yZGVyQnlPZmZzZXRzW2ldOworCisJCWlmIChvZmZzZXQgPj0gMCkKKwkJ eworCQkJYml0ZW0tPmRpc3RhbmNlc1tpXS52YWx1ZSA9IGl0ZW0tPmRpc3RhbmNlc1tvZmZzZXRd OworCQkJYml0ZW0tPmRpc3RhbmNlc1tpXS5pc251bGwgPSBmYWxzZTsKKwkJfQorCQllbHNlCisJ CXsKKwkJCWJpdGVtLT5kaXN0YW5jZXNbaV0udmFsdWUgPSAwLjA7CisJCQliaXRlbS0+ZGlzdGFu Y2VzW2ldLmlzbnVsbCA9IHRydWU7CisJCX0KKwl9Cit9CisKKy8qCisgKiBzcGdXYWxrT3JkZXJl ZCgpIC0tIGRyYWluIHRoZSBkaXN0YW5jZSBxdWV1ZSBpbnRvIG9uZSB2aXJ0dWFsIGJhdGNoCisg KgorICogUG9wIGl0ZW1zIGZyb20gc28tPnNjYW5RdWV1ZSBpbiAobG93ZXItYm91bmQpIGRpc3Rh bmNlIG9yZGVyOiBpbmRleCBwYWdlcyBhcmUKKyAqIHNjYW5uZWQgKHB1c2hpbmcgY2hpbGRyZW4g YW5kIG1hdGNoaW5nIGhlYXAgdHVwbGVzIGJhY2sgb250byB0aGUgcXVldWUpLCBoZWFwCisgKiB0 dXBsZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSBiYXRjaCwgdW50aWwgdGhlIGJhdGNoIGZpbGxzIG9y IHRoZSBxdWV1ZSBlbXB0aWVzLgorICogVGhlIHJlc3VsdCBpcyBhICJ2aXJ0dWFsIiBiYXRjaCBz cGFubmluZyBtYW55IGxlYWYgcGFnZXMsIGhvbGRpbmcgbm8gcGluIChhbmQKKyAqIG5ldmVyIGlu ZGV4LW9ubHksIHdoaWNoIHRoZSBwbGFubmVyIGZvcmJpZHMgZm9yIG9yZGVyZWQgc2NhbnMpLgor ICovCitzdGF0aWMgSW5kZXhTY2FuQmF0Y2gKK3NwZ1dhbGtPcmRlcmVkKEluZGV4U2NhbkRlc2Mg c2NhbikKK3sKKwlTcEdpc3RTY2FuT3BhcXVlIHNvID0gKFNwR2lzdFNjYW5PcGFxdWUpIHNjYW4t Pm9wYXF1ZTsKKwlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IGluZGV4YW1fdXRpbF9hbGxvY19iYXRj aChzY2FuKTsKKwlTcEdpc3RCYXRjaERhdGEgKnNiYXRjaDsKKwlCdWZmZXIJCWJ1ZmZlciA9IElu dmFsaWRCdWZmZXI7CisJaW50CQkJbml0ZW1zID0gMDsKKworCS8qIFNQLUdpU1Qgb25seSBldmVy IHNjYW5zIGZvcndhcmQ7IHNldCB0aGUgYmF0Y2gncyBkaXJlY3Rpb24gdXAgZnJvbnQgKi8KKwli YXRjaC0+ZGlyID0gRm9yd2FyZFNjYW5EaXJlY3Rpb247CisKKwlmb3IgKDs7KQorCXsKKwkJU3BH aXN0U2VhcmNoSXRlbSAqaXRlbSA9IHNwZ0dldE5leHRRdWV1ZUl0ZW0oc28pOworCisJCWlmIChp dGVtID09IE5VTEwpCisJCQlicmVhazsJCQkJLyogcXVldWUgZXhoYXVzdGVkIChlbmQgb2Ygc2Nh bikgKi8KKworCQlpZiAoaXRlbS0+aXNMZWFmKQorCQl7CisJCQkvKiBtYXRjaGluZyBoZWFwIHR1 cGxlOiBhcHBlbmQgdG8gdGhlIGJhdGNoIGluIGRpc3RhbmNlIG9yZGVyICovCisJCQlTcEdpc3RC YXRjaEl0ZW0gKmJpdGVtID0gU3BHaXN0QmF0Y2hHZXRJdGVtKHNjYW4sIGJhdGNoLCBuaXRlbXMp OworCisJCQliYXRjaC0+aXRlbXNbbml0ZW1zXS50YWJsZVRpZCA9IGl0ZW0tPmhlYXBQdHI7CisJ CQliYXRjaC0+aXRlbXNbbml0ZW1zXS5pbmRleE9mZnNldCA9IEludmFsaWRPZmZzZXROdW1iZXI7 CisJCQliYXRjaC0+aXRlbXNbbml0ZW1zXS50dXBsZU9mZnNldCA9IDA7CisKKwkJCWJpdGVtLT5y ZWNoZWNrID0gaXRlbS0+cmVjaGVjazsKKwkJCWJpdGVtLT5yZWNoZWNrRGlzdGFuY2VzID0gaXRl bS0+cmVjaGVja0Rpc3RhbmNlczsKKwkJCXNwZ0ZpbGxCYXRjaEl0ZW1EaXN0YW5jZXMoc28sIGJp dGVtLCBpdGVtKTsKKworCQkJc3BnRnJlZVNlYXJjaEl0ZW0oc28sIGl0ZW0pOworCQkJTWVtb3J5 Q29udGV4dFJlc2V0KHNvLT50ZW1wQ3h0KTsKKworCQkJaWYgKCsrbml0ZW1zID09IHNjYW4tPm1h eGl0ZW1zYmF0Y2gpCisJCQkJYnJlYWs7CQkJLyogYmF0Y2ggZnVsbDsgcmVtYWluaW5nIGl0ZW1z IHN0YXkgcXVldWVkICovCisJCX0KKwkJZWxzZQorCQl7CisJCQlQYWdlCQlwYWdlOworCisJCQkv KgorCQkJICogSW5kZXggcGFnZTogc2NhbiBpdCwgcHVzaGluZyBjaGlsZHJlbi9oZWFwIGl0ZW1z IG9udG8gdGhlCisJCQkgKiBxdWV1ZS4KKwkJCSAqCisJCQkgKiBOb3RlOiBzcGdSZWFkSXRlbVBh Z2UgY2FsbHMgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKS4KKwkJCSAqLworCQkJYnVmZmVyID0gc3Bn UmVhZEl0ZW1QYWdlKHNjYW4sIGl0ZW0sIGJ1ZmZlcik7CisJCQlwYWdlID0gQnVmZmVyR2V0UGFn ZShidWZmZXIpOworCisJCQlpZiAoU3BHaXN0UGFnZUlzTGVhZihwYWdlKSkKKwkJCXsKKwkJCQkv KiByb290LWFzLWxlYWY6IHF1ZXVlIG1hdGNoaW5nIGhlYXAgaXRlbXMgKGJhdGNoIHVudXNlZCkg Ki8KKwkJCQlzcGdQcm9jZXNzTGVhZlBhZ2Uoc2NhbiwgaXRlbSwgcGFnZSwgTlVMTCk7CisJCQl9 CisJCQllbHNlCisJCQkJc3BnUHJvY2Vzc0lubmVyUGFnZShzY2FuLCBpdGVtLCBwYWdlKTsKKwor CQkJc3BnRnJlZVNlYXJjaEl0ZW0oc28sIGl0ZW0pOworCQkJTWVtb3J5Q29udGV4dFJlc2V0KHNv LT50ZW1wQ3h0KTsKKwkJfQorCX0KKworCWlmIChidWZmZXIgIT0gSW52YWxpZEJ1ZmZlcikKKwkJ VW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOworCisJaWYgKG5pdGVtcyA9PSAwKQorCXsKKwkJ Lyogbm8gbWF0Y2hpbmcgaXRlbXMgcmVtYWluOiB0aGUgc2NhbiBpcyBleGhhdXN0ZWQgKi8KKwkJ aW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2goc2NhbiwgYmF0Y2gpOworCQlyZXR1cm4gTlVMTDsK Kwl9CisKKwkvKiBhbiBvcmRlcmVkIGJhdGNoIGlzICJ2aXJ0dWFsIiBhbmQgaG9sZHMgbm8gaW50 ZXJsb2NrIHBpbiAqLworCXNiYXRjaCA9IFNwR2lzdEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCk7 CisJc2JhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCXNiYXRjaC0+Ymxrbm8gPSBJbnZhbGlk QmxvY2tOdW1iZXI7CisKKwliYXRjaC0+Zmlyc3RJdGVtID0gMDsKKwliYXRjaC0+bGFzdEl0ZW0g PSBuaXRlbXMgLSAxOworCisJQXNzZXJ0KCFiYXRjaC0+aXNHdWFyZGVkKTsKKworCXJldHVybiBi YXRjaDsKK30KKworLyoKKyAqIE5hdmlnYXRlIHRvIHRoZSBsaXZlIHBhZ2UgdGhhdCAnaXRlbScg cG9pbnRzIGF0LCBmb2xsb3dpbmcgaW5uZXItdHVwbGUgYW5kCisgKiBsZWFmLWhlYWQgUkVESVJF Q1RzLgorICoKKyAqICdidWZmZXInIGlzIHRoZSBsb2NrIHRoZSBjYWxsZXIgaXMgYWxyZWFkeSBo b2xkaW5nIChvciBJbnZhbGlkQnVmZmVyKS4gIFdlCisgKiBrZWVwIHRoYXQgbG9jayB3aGlsZSB0 aGUgaXRlbSBzdGF5cyBvbiB0aGUgc2FtZSBibG9jaywgcmVsZWFzaW5nIGFuZAorICogcmUtYWNx dWlyaW5nIG9ubHkgd2hlbiB0aGUgYmxvY2sgY2hhbmdlcy4KKyAqCisgKiBUaGUgcmV0dXJuZWQg YnVmZmVyIGlzIHBpbm5lZCBhbmQgc2hhcmUtbG9ja2VkLCBob2xkaW5nIGVpdGhlciBhIGxpdmUg aW5uZXIKKyAqIHR1cGxlIG9yIGEgbGVhZiBwYWdlICh3aG9zZSBjaGFpbiBoZWFkIGlzIG5vdCBh IHJlZGlyZWN0KSBhdCBpdGVtLT5oZWFwUHRyLgorICovCitzdGF0aWMgQnVmZmVyCitzcGdSZWFk SXRlbVBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTcEdpc3RTZWFyY2hJdGVtICppdGVtLCBCdWZm ZXIgYnVmZmVyKQoreworCVJlbGF0aW9uCWluZGV4ID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKKwor CUFzc2VydCghaXRlbS0+aXNMZWFmKTsJCS8qIGhlYXAgaXRlbXMgYXJlIGhhbmRsZWQgYnkgdGhl IGNhbGxlciAqLworCisJZm9yICg7OykKKwl7CisJCUJsb2NrTnVtYmVyIGJsa25vID0gSXRlbVBv aW50ZXJHZXRCbG9ja051bWJlcigmaXRlbS0+aGVhcFB0cik7CisJCU9mZnNldE51bWJlciBvZmZz ZXQgPSBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcigmaXRlbS0+aGVhcFB0cik7CisJCVBhZ2UJ CXBhZ2U7CisKKwkJLyogUmVsZWFzZSB0aGUgcGFnZSB3ZSBob2xkIGlmIHRoZSBpdGVtIG1vdmVk IHRvIGEgZGlmZmVyZW50IGJsb2NrICovCisJCWlmIChidWZmZXIgIT0gSW52YWxpZEJ1ZmZlciAm JiBibGtubyAhPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWZmZXIpKQorCQl7CisJCQlVbmxvY2tS ZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJCQlidWZmZXIgPSBJbnZhbGlkQnVmZmVyOworCQl9CisK KwkJLyogQWNxdWlyZSB0aGUgcGFnZSBpZiB3ZSdyZSBub3QgYWxyZWFkeSBob2xkaW5nIGl0ICov CisJCWlmIChidWZmZXIgPT0gSW52YWxpZEJ1ZmZlcikKKwkJeworCQkJQ0hFQ0tfRk9SX0lOVEVS UlVQVFMoKTsKKwkJCWJ1ZmZlciA9IFJlYWRCdWZmZXIoaW5kZXgsIGJsa25vKTsKKwkJCUxvY2tC dWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJCX0KKworCQlwYWdlID0gQnVmZmVy R2V0UGFnZShidWZmZXIpOworCisJCWlmIChTcEdpc3RQYWdlSXNMZWFmKHBhZ2UpKQorCQl7CisJ CQlJdGVtSWQJCWlpZDsKKwkJCVNwR2lzdExlYWZUdXBsZSBoZWFkOworCisJCQkvKiBXaGVuIHJv b3QgaXMgYSBsZWFmLCBhbGwgaXRzIHR1cGxlcyBhcmUgbGl2ZTogbm8gcmVkaXJlY3QgKi8KKwkJ CWlmIChTcEdpc3RCbG9ja0lzUm9vdChibGtubykpCisJCQkJcmV0dXJuIGJ1ZmZlcjsKKworCQkJ LyoKKwkJCSAqIEEgbGVhZiBSRURJUkVDVCBpcyBhbHdheXMgdGhlIGhlYWQgb2YgaXRzIGNoYWlu OyBmb2xsb3cgaXQgdG8KKwkJCSAqIHRoZSBsaXZlIHR1cGxlcycgcGFnZSBiZWZvcmUgdGhlIGNh bGxlciByZXBvcnRzIGFueSBtYXRjaC4gIEEKKwkJCSAqIGxpdmUgb3IgZGVhZCBoZWFkIGlzIGxl ZnQgZm9yIHNwZ1Byb2Nlc3NMZWFmUGFnZSB0byBkZWFsIHdpdGguCisJCQkgKi8KKwkJCWlpZCA9 IFBhZ2VHZXRJdGVtSWQocGFnZSwgb2Zmc2V0KTsKKwkJCWhlYWQgPSAoU3BHaXN0TGVhZlR1cGxl KSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOworCisJCQlpZiAoaGVhZC0+dHVwc3RhdGUgPT0gU1BH SVNUX1JFRElSRUNUKQorCQkJeworCQkJCWl0ZW0tPmhlYXBQdHIgPSAoKFNwR2lzdERlYWRUdXBs ZSkgaGVhZCktPnBvaW50ZXI7CisJCQkJQXNzZXJ0KEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIo Jml0ZW0tPmhlYXBQdHIpICE9CisJCQkJCSAgIFNQR0lTVF9NRVRBUEFHRV9CTEtOTyk7CisJCQkJ Y29udGludWU7CisJCQl9CisKKwkJCXJldHVybiBidWZmZXI7CisJCX0KKwkJZWxzZQkJCQkJLyog cGFnZSBpcyBpbm5lciAqLworCQl7CisJCQlJdGVtSWQJCWlpZDsKKwkJCVNwR2lzdElubmVyVHVw bGUgaW5uZXJUdXBsZTsKKworCQkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZzZXQpOwor CQkJaW5uZXJUdXBsZSA9IChTcEdpc3RJbm5lclR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQp OworCisJCQlpZiAoaW5uZXJUdXBsZS0+dHVwc3RhdGUgIT0gU1BHSVNUX0xJVkUpCisJCQl7CisJ CQkJaWYgKGlubmVyVHVwbGUtPnR1cHN0YXRlID09IFNQR0lTVF9SRURJUkVDVCkKKwkJCQl7CisJ CQkJCS8qIHRyYW5zZmVyIGF0dGVudGlvbiB0byByZWRpcmVjdCBwb2ludCAqLworCQkJCQlpdGVt LT5oZWFwUHRyID0gKChTcEdpc3REZWFkVHVwbGUpIGlubmVyVHVwbGUpLT5wb2ludGVyOworCQkJ CQlBc3NlcnQoSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmaXRlbS0+aGVhcFB0cikgIT0KKwkJ CQkJCSAgIFNQR0lTVF9NRVRBUEFHRV9CTEtOTyk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJ CQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBTUEdpU1QgdHVwbGUgc3RhdGU6ICVkIiwKKwkJCQkJ IGlubmVyVHVwbGUtPnR1cHN0YXRlKTsKKwkJCX0KKworCQkJcmV0dXJuIGJ1ZmZlcjsKKwkJfQor CX0KK30KKworLyoKKyAqIERlc2NlbmQgYSBsaXZlIGlubmVyIHR1cGxlIHJlYWNoZWQgYnkgc3Bn UmVhZEl0ZW1QYWdlOiBydW4gaW5uZXJfY29uc2lzdGVudAorICogYW5kIHB1c2ggdGhlIG1hdGNo aW5nIGNoaWxkIG5vZGVzIG9udG8gdGhlIHNjYW4gcXVldWUuCisgKgorICogV2hlbiB3ZSdyZSBj YWxsZWQsIGJ1ZmZlciBjb250YWluaW5nICdwYWdlJyBpcyBzaGFyZS1sb2NrZWQuICBUaGUgdHVw bGUgYXQKKyAqIGl0ZW0tPmhlYXBQdHIgbXVzdCBiZSBsaXZlLgorICovCitzdGF0aWMgdm9pZAor c3BnUHJvY2Vzc0lubmVyUGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNwR2lzdFNlYXJjaEl0ZW0g Kml0ZW0sIFBhZ2UgcGFnZSkKK3sKKwlPZmZzZXROdW1iZXIgb2Zmc2V0ID0gSXRlbVBvaW50ZXJH ZXRPZmZzZXROdW1iZXIoJml0ZW0tPmhlYXBQdHIpOworCUl0ZW1JZAkJaWlkOworCVNwR2lzdElu bmVyVHVwbGUgaW5uZXJUdXBsZTsKKworCUFzc2VydCghU3BHaXN0UGFnZUlzTGVhZihwYWdlKSk7 CisKKwlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZnNldCk7CisJaW5uZXJUdXBsZSA9IChT cEdpc3RJbm5lclR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOworCUFzc2VydChpbm5lclR1 cGxlLT50dXBzdGF0ZSA9PSBTUEdJU1RfTElWRSk7CisKKwlzcGdJbm5lclRlc3Qoc2NhbiwgaXRl bSwgaW5uZXJUdXBsZSwgU3BHaXN0UGFnZVN0b3Jlc051bGxzKHBhZ2UpKTsKK30KKworLyoKKyAq IEV4YW1pbmUgYSBsZWFmIHBhZ2UgcmVhY2hlZCBieSBzcGdSZWFkSXRlbVBhZ2UsIGFjdGluZyBv biBtYXRjaGluZyB0dXBsZXM6CisgKiBhIG5vbi1vcmRlcmVkIHNjYW4gYXBwZW5kcyB0aGVtIHRv IGJhdGNoOyBhbiBvcmRlcmVkIHNjYW4gcXVldWVzIHRoZW0sIHdpdGgKKyAqIGJhdGNoIE5VTEwu CisgKgorICogV2hlbiB3ZSdyZSBjYWxsZWQsIGJ1ZmZlciBjb250YWluaW5nICdwYWdlJyBpcyBz aGFyZS1sb2NrZWQuCisgKiBzcGdSZWFkSXRlbVBhZ2UgbXVzdCBoYXZlIGFscmVhZHkgZm9sbG93 ZWQgYW55IGxlYWYtaGVhZCByZWRpcmVjdCwgc28gdGhlCisgKiBjaGFpbiBleGFtaW5lZCBoZXJl IGNvbnRhaW5zIG5vIHJlZGlyZWN0LgorICovCitzdGF0aWMgdm9pZAorc3BnUHJvY2Vzc0xlYWZQ YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU3BHaXN0U2VhcmNoSXRlbSAqaXRlbSwgUGFnZSBwYWdl LAorCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCUJsb2NrTnVtYmVyIGJsa25vID0g SXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmaXRlbS0+aGVhcFB0cik7CisJT2Zmc2V0TnVtYmVy IG9mZnNldCA9IEl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyKCZpdGVtLT5oZWFwUHRyKTsKKwli b29sCQlpc251bGwgPSBTcEdpc3RQYWdlU3RvcmVzTnVsbHMocGFnZSk7CisJT2Zmc2V0TnVtYmVy IG1heCA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSk7CisKKwlBc3NlcnQoU3BHaXN0UGFn ZUlzTGVhZihwYWdlKSk7CisKKwlpZiAoU3BHaXN0QmxvY2tJc1Jvb3QoYmxrbm8pKQorCXsKKwkJ LyogV2hlbiByb290IGlzIGEgbGVhZiwgZXhhbWluZSBhbGwgaXRzIHR1cGxlcyAqLworCQlmb3Ig KG9mZnNldCA9IEZpcnN0T2Zmc2V0TnVtYmVyOyBvZmZzZXQgPD0gbWF4OyBvZmZzZXQrKykKKwkJ CSh2b2lkKSBzcGdUZXN0TGVhZlR1cGxlKHNjYW4sIGl0ZW0sIHBhZ2UsIG9mZnNldCwKKwkJCQkJ CQkJCWlzbnVsbCwgdHJ1ZSwgYmF0Y2gpOworCX0KKwllbHNlCisJeworCQkvKiBOb3JtYWwgY2Fz ZToganVzdCBleGFtaW5lIHRoZSBjaGFpbiB3ZSBhcnJpdmVkIGF0ICovCisJCXdoaWxlIChvZmZz ZXQgIT0gSW52YWxpZE9mZnNldE51bWJlcikKKwkJeworCQkJQXNzZXJ0KG9mZnNldCA+PSBGaXJz dE9mZnNldE51bWJlciAmJiBvZmZzZXQgPD0gbWF4KTsKKwkJCW9mZnNldCA9IHNwZ1Rlc3RMZWFm VHVwbGUoc2NhbiwgaXRlbSwgcGFnZSwgb2Zmc2V0LAorCQkJCQkJCQkJICBpc251bGwsIGZhbHNl LCBiYXRjaCk7CisJCQkvKiBzcGdSZWFkSXRlbVBhZ2UgYWxyZWFkeSByZXNvbHZlZCBhbnkgbGVh Zi1oZWFkIHJlZGlyZWN0ICovCisJCQlBc3NlcnQob2Zmc2V0ICE9IFNwR2lzdFJlZGlyZWN0T2Zm c2V0TnVtYmVyKTsKKwkJfQorCX0KIH0KIAogaW50NjQKIHNwZ2dldGJpdG1hcChJbmRleFNjYW5E ZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogewotCVNwR2lzdFNjYW5PcGFxdWUgc28gPSAoU3BH aXN0U2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCWludDY0CQludGlkcyA9IDA7CisJSW5kZXhT Y2FuQmF0Y2ggYmF0Y2g7CiAKLQkvKiBDb3B5IHdhbnRfaXR1cCB0byAqc28gc28gd2UgZG9uJ3Qg bmVlZCB0byBwYXNzIGl0IGFyb3VuZCBzZXBhcmF0ZWx5ICovCi0Jc28tPndhbnRfaXR1cCA9IGZh bHNlOwotCi0Jc28tPnRibSA9IHRibTsKLQlzby0+bnRpZHMgPSAwOwotCi0Jc3BnV2FsayhzY2Fu LT5pbmRleFJlbGF0aW9uLCBzbywgdHJ1ZSwgc3RvcmVCaXRtYXApOwotCi0JcmV0dXJuIHNvLT5u dGlkczsKLX0KLQotLyogc3RvcmVSZXMgc3Vicm91dGluZSBmb3IgZ2V0dHVwbGUgY2FzZSAqLwot c3RhdGljIHZvaWQKLXN0b3JlR2V0dHVwbGUoU3BHaXN0U2Nhbk9wYXF1ZSBzbywgSXRlbVBvaW50 ZXIgaGVhcFB0ciwKLQkJCSAgRGF0dW0gbGVhZlZhbHVlLCBib29sIGlzbnVsbCwKLQkJCSAgU3BH aXN0TGVhZlR1cGxlIGxlYWZUdXBsZSwgYm9vbCByZWNoZWNrLAotCQkJICBib29sIHJlY2hlY2tE aXN0YW5jZXMsIGRvdWJsZSAqbm9uTnVsbERpc3RhbmNlcykKLXsKLQlBc3NlcnQoc28tPm5QdHJz IDwgTWF4SW5kZXhUdXBsZXNQZXJQYWdlKTsKLQlzby0+aGVhcFB0cnNbc28tPm5QdHJzXSA9ICpo ZWFwUHRyOwotCXNvLT5yZWNoZWNrW3NvLT5uUHRyc10gPSByZWNoZWNrOwotCXNvLT5yZWNoZWNr RGlzdGFuY2VzW3NvLT5uUHRyc10gPSByZWNoZWNrRGlzdGFuY2VzOwotCi0JaWYgKHNvLT5udW1i ZXJPZk9yZGVyQnlzID4gMCkKKwkvKgorCSAqIERyaXZlIHNwZ1dhbGsgb25lIGxlYWYgcGFnZSBh dCBhIHRpbWUsIGRyYWluaW5nIGVhY2ggYmF0Y2ggaW50byB0aGUKKwkgKiBiaXRtYXAgYW5kIHJl bGVhc2luZyBpdCBiZWZvcmUgZmV0Y2hpbmcgdGhlIG5leHQsIHNvIG9ubHkgb25lIGJhdGNoIGlz CisJICogZXZlciBsaXZlIChjZi4gaGFzaGdldGJpdG1hcCkuCisJICovCisJd2hpbGUgKChiYXRj aCA9IHNwZ1dhbGsoc2NhbikpICE9IE5VTEwpCiAJewotCQlpZiAoaXNudWxsIHx8IHNvLT5udW1i ZXJPZk5vbk51bGxPcmRlckJ5cyA8PSAwKQotCQkJc28tPmRpc3RhbmNlc1tzby0+blB0cnNdID0g TlVMTDsKLQkJZWxzZQorCQlib29sCSAgICpyZWNoZWNrID0gU3BHaXN0QmF0Y2hHZXRSZWNoZWNr KHNjYW4sIGJhdGNoKTsKKworCQlmb3IgKGludCBpID0gYmF0Y2gtPmZpcnN0SXRlbTsgaSA8PSBi YXRjaC0+bGFzdEl0ZW07IGkrKykKIAkJewotCQkJSW5kZXhPcmRlckJ5RGlzdGFuY2UgKmRpc3Rh bmNlcyA9IHBhbGxvY19hcnJheShJbmRleE9yZGVyQnlEaXN0YW5jZSwKLQkJCQkJCQkJCQkJCQkJ ICAgc28tPm51bWJlck9mT3JkZXJCeXMpOwotCQkJaW50CQkJaTsKLQotCQkJZm9yIChpID0gMDsg aSA8IHNvLT5udW1iZXJPZk9yZGVyQnlzOyBpKyspCi0JCQl7Ci0JCQkJaW50CQkJb2Zmc2V0ID0g c28tPm5vbk51bGxPcmRlckJ5T2Zmc2V0c1tpXTsKLQotCQkJCWlmIChvZmZzZXQgPj0gMCkKLQkJ CQl7Ci0JCQkJCS8qIENvcHkgbm9uLU5VTEwgZGlzdGFuY2UgdmFsdWUgKi8KLQkJCQkJZGlzdGFu Y2VzW2ldLnZhbHVlID0gbm9uTnVsbERpc3RhbmNlc1tvZmZzZXRdOwotCQkJCQlkaXN0YW5jZXNb aV0uaXNudWxsID0gZmFsc2U7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCS8qIFNldCBk aXN0YW5jZSdzIE5VTEwgZmxhZy4gKi8KLQkJCQkJZGlzdGFuY2VzW2ldLnZhbHVlID0gMC4wOwot CQkJCQlkaXN0YW5jZXNbaV0uaXNudWxsID0gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCXNvLT5k aXN0YW5jZXNbc28tPm5QdHJzXSA9IGRpc3RhbmNlczsKKwkJCXRibV9hZGRfdHVwbGVzKHRibSwg JmJhdGNoLT5pdGVtc1tpXS50YWJsZVRpZCwgMSwgcmVjaGVja1tpXSk7CisJCQludGlkcysrOwog CQl9Ci0JfQogCi0JaWYgKHNvLT53YW50X2l0dXApCi0JewogCQkvKgotCQkgKiBSZWNvbnN0cnVj dCBpbmRleCBkYXRhLiAgV2UgaGF2ZSB0byBjb3B5IHRoZSBkYXR1bSBvdXQgb2YgdGhlIHRlbXAK LQkJICogY29udGV4dCBhbnl3YXksIHNvIHdlIG1heSBhcyB3ZWxsIGNyZWF0ZSB0aGUgdHVwbGUg aGVyZS4KKwkJICogUmV0dXJuIHRoZSBiYXRjaCB0byB0aGUgc2luZ2xlLXNsb3QgYml0bWFwIGNh Y2hlLCB0byBiZSByZXVzZWQgYnkKKwkJICogdGhlIG5leHQgc3BnV2FsawogCQkgKi8KLQkJRGF0 dW0JCWxlYWZEYXR1bXNbSU5ERVhfTUFYX0tFWVNdOwotCQlib29sCQlsZWFmSXNudWxsc1tJTkRF WF9NQVhfS0VZU107Ci0KLQkJLyogV2Ugb25seSBuZWVkIHRvIGRlZm9ybSB0aGUgb2xkIHR1cGxl IGlmIGl0IGhhcyBJTkNMVURFIGF0dHJpYnV0ZXMgKi8KLQkJaWYgKHNvLT5zdGF0ZS5sZWFmVHVw RGVzYy0+bmF0dHMgPiAxKQotCQkJc3BnRGVmb3JtTGVhZlR1cGxlKGxlYWZUdXBsZSwgc28tPnN0 YXRlLmxlYWZUdXBEZXNjLAotCQkJCQkJCSAgIGxlYWZEYXR1bXMsIGxlYWZJc251bGxzLCBpc251 bGwpOwotCi0JCWxlYWZEYXR1bXNbc3BnS2V5Q29sdW1uXSA9IGxlYWZWYWx1ZTsKLQkJbGVhZklz bnVsbHNbc3BnS2V5Q29sdW1uXSA9IGlzbnVsbDsKLQotCQlzby0+cmVjb25UdXBzW3NvLT5uUHRy c10gPSBoZWFwX2Zvcm1fdHVwbGUoc28tPnJlY29uVHVwRGVzYywKLQkJCQkJCQkJCQkJCSAgIGxl YWZEYXR1bXMsCi0JCQkJCQkJCQkJCQkgICBsZWFmSXNudWxscyk7CisJCWluZGV4YW1fdXRpbF9y ZWxlYXNlX2JhdGNoKHNjYW4sIGJhdGNoKTsKIAl9Ci0Jc28tPm5QdHJzKys7CisKKwlyZXR1cm4g bnRpZHM7CiB9CiAKLWJvb2wKLXNwZ2dldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpCitJbmRleFNjYW5CYXRjaAorc3BnZ2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBz Y2FuLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlT cEdpc3RTY2FuT3BhcXVlIHNvID0gKFNwR2lzdFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAor CS8qCisJICogTm90ZTogUGVyc2lzdGVudCB0cmF2ZXJzYWwgc3RhdGUgbGl2ZXMgaW4gc28tPnNj YW5RdWV1ZSwgc28gd2UgaGF2ZSBubworCSAqIHVzZSBmb3IgcHJpb3JiYXRjaCBoZXJlCisJICov CiAJaWYgKGRpciAhPSBGb3J3YXJkU2NhbkRpcmVjdGlvbikKIAkJZWxvZyhFUlJPUiwgIlNQLUdp U1Qgb25seSBzdXBwb3J0cyBmb3J3YXJkIHNjYW4gZGlyZWN0aW9uIik7CiAKLQkvKiBDb3B5IHdh bnRfaXR1cCB0byAqc28gc28gd2UgZG9uJ3QgbmVlZCB0byBwYXNzIGl0IGFyb3VuZCBzZXBhcmF0 ZWx5ICovCi0Jc28tPndhbnRfaXR1cCA9IHNjYW4tPnhzX3dhbnRfaXR1cDsKKwlpZiAoc28tPm51 bWJlck9mTm9uTnVsbE9yZGVyQnlzID4gMCkKKwkJcmV0dXJuIHNwZ1dhbGtPcmRlcmVkKHNjYW4p OwogCi0JZm9yICg7OykKKwlyZXR1cm4gc3BnV2FsayhzY2FuKTsKK30KKworLyoKKyAqIHNwZ3Vu Z3VhcmRiYXRjaCgpIC0tIERyb3AgYSBiYXRjaCdzIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIChi dWZmZXIgcGluKQorICovCit2b2lkCitzcGd1bmd1YXJkYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2Fu LCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlTcEdpc3RCYXRjaERhdGEgKnNiYXRjaCA9IFNw R2lzdEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCk7CisKKwkvKiBTaG91bGQgYmUgY2FsbGVkIGV4 YWN0bHkgb25jZSBpZmYgIWJhdGNoSW1tZWRpYXRlVW5ndWFyZCAqLworCUFzc2VydCghc2Nhbi0+ YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKTsKKwlBc3NlcnQoYmF0Y2gtPmlzR3VhcmRlZCk7CisKKwlS ZWxlYXNlQnVmZmVyKHNiYXRjaC0+YnVmKTsKK30KKworLyoKKyAqIHNwZ2dldHRyYW5zZm9ybSgp IC0tIFNldCB1cCB0aGUgc2NhbidzIHBlci10dXBsZSBvdXRwdXQgZm9yIG9uZSBiYXRjaCBpdGVt CisgKgorICogQXBwbGllcyB0aGUgaXRlbSdzIHJlY2hlY2sgZmxhZywgYW5kIGVpdGhlciByZWNv bnN0cnVjdHMgdGhlIGluZGV4LW9ubHkgaGVhcAorICogdHVwbGUgKHhzX2hpdHVwKSBvciByZXBv cnRzIHRoZSBpdGVtJ3MgT1JERVIgQlkgZGlzdGFuY2VzLgorICovCit2b2lkCitzcGdnZXR0cmFu c2Zvcm0oSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwgaW50IGl0ZW0p Cit7CisJU3BHaXN0U2Nhbk9wYXF1ZSBzbyA9IChTcEdpc3RTY2FuT3BhcXVlKSBzY2FuLT5vcGFx dWU7CisKKwlBc3NlcnQoaXRlbSA+PSBiYXRjaC0+Zmlyc3RJdGVtICYmIGl0ZW0gPD0gYmF0Y2gt Pmxhc3RJdGVtKTsKKworCS8qIE9yZGVyZWQgKHZpcnR1YWwpIGJhdGNoOiByZWNoZWNrIGZsYWcg YW5kIGRpc3RhbmNlcyBsaXZlIGluIHRoZSBpdGVtICovCisJaWYgKHNvLT5udW1iZXJPZk5vbk51 bGxPcmRlckJ5cyA+IDApCiAJewotCQlpZiAoc28tPmlQdHIgPCBzby0+blB0cnMpCi0JCXsKLQkJ CS8qIGNvbnRpbnVpbmcgdG8gcmV0dXJuIHJlcG9ydGVkIHR1cGxlcyAqLwotCQkJc2Nhbi0+eHNf aGVhcHRpZCA9IHNvLT5oZWFwUHRyc1tzby0+aVB0cl07Ci0JCQlzY2FuLT54c19yZWNoZWNrID0g c28tPnJlY2hlY2tbc28tPmlQdHJdOwotCQkJc2Nhbi0+eHNfaGl0dXAgPSBzby0+cmVjb25UdXBz W3NvLT5pUHRyXTsKKwkJU3BHaXN0QmF0Y2hJdGVtICpiaXRlbSA9IFNwR2lzdEJhdGNoR2V0SXRl bShzY2FuLCBiYXRjaCwgaXRlbSk7CiAKLQkJCWlmIChzby0+bnVtYmVyT2ZPcmRlckJ5cyA+IDAp Ci0JCQkJaW5kZXhfc3RvcmVfZmxvYXQ4X29yZGVyYnlfZGlzdGFuY2VzKHNjYW4sIHNvLT5vcmRl ckJ5VHlwZXMsCi0JCQkJCQkJCQkJCQkJIHNvLT5kaXN0YW5jZXNbc28tPmlQdHJdLAotCQkJCQkJ CQkJCQkJCSBzby0+cmVjaGVja0Rpc3RhbmNlc1tzby0+aVB0cl0pOwotCQkJc28tPmlQdHIrKzsK LQkJCXJldHVybiB0cnVlOwotCQl9CisJCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwkJ QXNzZXJ0KFNwR2lzdEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCktPmJsa25vID09IEludmFsaWRC bG9ja051bWJlcik7CiAKLQkJaWYgKHNvLT5udW1iZXJPZk9yZGVyQnlzID4gMCkKLQkJewotCQkJ LyogTXVzdCBwZnJlZSBkaXN0YW5jZXMgdG8gYXZvaWQgbWVtb3J5IGxlYWsgKi8KLQkJCWludAkJ CWk7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBzby0+blB0cnM7IGkrKykKLQkJCQlpZiAoc28tPmRp c3RhbmNlc1tpXSkKLQkJCQkJcGZyZWUoc28tPmRpc3RhbmNlc1tpXSk7Ci0JCX0KLQotCQlpZiAo c28tPndhbnRfaXR1cCkKLQkJewotCQkJLyogTXVzdCBwZnJlZSByZWNvbnN0cnVjdGVkIHR1cGxl cyB0byBhdm9pZCBtZW1vcnkgbGVhayAqLwotCQkJaW50CQkJaTsKLQotCQkJZm9yIChpID0gMDsg aSA8IHNvLT5uUHRyczsgaSsrKQotCQkJCXBmcmVlKHNvLT5yZWNvblR1cHNbaV0pOwotCQl9Ci0J CXNvLT5pUHRyID0gc28tPm5QdHJzID0gMDsKLQotCQlzcGdXYWxrKHNjYW4tPmluZGV4UmVsYXRp b24sIHNvLCBmYWxzZSwgc3RvcmVHZXR0dXBsZSk7Ci0KLQkJaWYgKHNvLT5uUHRycyA9PSAwKQot CQkJYnJlYWs7CQkJCS8qIG11c3QgaGF2ZSBjb21wbGV0ZWQgc2NhbiAqLworCQlzY2FuLT54c19y ZWNoZWNrID0gYml0ZW0tPnJlY2hlY2s7CisJCWluZGV4X3N0b3JlX2Zsb2F0OF9vcmRlcmJ5X2Rp c3RhbmNlcyhzY2FuLCBzby0+b3JkZXJCeVR5cGVzLAorCQkJCQkJCQkJCQkgYml0ZW0tPmRpc3Rh bmNlcywKKwkJCQkJCQkJCQkJIGJpdGVtLT5yZWNoZWNrRGlzdGFuY2VzKTsKKwkJcmV0dXJuOwog CX0KIAotCXJldHVybiBmYWxzZTsKKwkvKiBOb24tb3JkZXJlZCBiYXRjaDogcmVjaGVjayBmbGFn cyBsaXZlIGluIGEgYm9vbCBhcnJheSAqLworCXNjYW4tPnhzX3JlY2hlY2sgPSBTcEdpc3RCYXRj aEdldFJlY2hlY2soc2NhbiwgYmF0Y2gpW2l0ZW1dOworCisJaWYgKHNjYW4tPnhzX3dhbnRfaXR1 cCkKKwl7CisJCS8qIEluZGV4LW9ubHkgc2NhbiAqLworCQlTcEdpc3RCYXRjaERhdGEgKnNiYXRj aCA9IFNwR2lzdEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCk7CisJCVNwR2lzdExlYWZUdXBsZSBs ZWFmVHVwbGU7CisJCURhdHVtCQlsZWFmRGF0dW1zW0lOREVYX01BWF9LRVlTXTsKKwkJYm9vbAkJ bGVhZklzbnVsbHNbSU5ERVhfTUFYX0tFWVNdOworCQlEYXR1bQkJbGVhZlZhbHVlID0gKERhdHVt KSAwOworCQlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKworCQlBc3NlcnQoc2Nhbi0+bnVtYmVyT2ZP cmRlckJ5cyA9PSAwKTsKKwkJQXNzZXJ0KHNiYXRjaC0+Ymxrbm8gIT0gSW52YWxpZEJsb2NrTnVt YmVyKTsKKworCQkvKiBSZWNvbnN0cnVjdCB0aGUga2V5IHZhbHVlIHZpYSBsZWFmX2NvbnNpc3Rl bnQgKi8KKwkJbGVhZlR1cGxlID0gKFNwR2lzdExlYWZUdXBsZSkgKGJhdGNoLT5jdXJyVHVwbGVz ICsKKwkJCQkJCQkJCSAgIGJhdGNoLT5pdGVtc1tpdGVtXS50dXBsZU9mZnNldCk7CisJCWlmICgh c2JhdGNoLT5pc051bGwpCisJCXsKKwkJCXNwZ0xlYWZDb25zaXN0ZW50SW4gaW47CisJCQlzcGdM ZWFmQ29uc2lzdGVudE91dCBvdXQ7CisKKwkJCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhzby0+dGVtcEN4dCk7CisKKwkJCWluLnNjYW5rZXlzID0gc28tPmtleURhdGE7CisJCQlpbi5v cmRlcmJ5cyA9IE5VTEw7CisJCQlpbi5ua2V5cyA9IHNvLT5udW1iZXJPZktleXM7CisJCQlpbi5u b3JkZXJieXMgPSAwOworCQkJaW4ucmVjb25zdHJ1Y3RlZFZhbHVlID0gc2JhdGNoLT5yZWNvblZh bHVlOworCQkJaW4udHJhdmVyc2FsVmFsdWUgPSBOVUxMOworCQkJaW4ubGV2ZWwgPSBzYmF0Y2gt PmxldmVsOworCQkJaW4ucmV0dXJuRGF0YSA9IHRydWU7CisJCQlpbi5sZWFmRGF0dW0gPSBTR0xU REFUVU0obGVhZlR1cGxlLCAmc28tPnN0YXRlKTsKKworCQkJb3V0LmxlYWZWYWx1ZSA9IChEYXR1 bSkgMDsKKwkJCW91dC5yZWNoZWNrID0gZmFsc2U7CisJCQlvdXQuZGlzdGFuY2VzID0gTlVMTDsK KwkJCW91dC5yZWNoZWNrRGlzdGFuY2VzID0gZmFsc2U7CisKKwkJCSh2b2lkKSBGdW5jdGlvbkNh bGwyQ29sbCgmc28tPmxlYWZDb25zaXN0ZW50Rm4sIHNvLT5pbmRleENvbGxhdGlvbiwKKwkJCQkJ CQkJCSBQb2ludGVyR2V0RGF0dW0oJmluKSwgUG9pbnRlckdldERhdHVtKCZvdXQpKTsKKwkJCWxl YWZWYWx1ZSA9IG91dC5sZWFmVmFsdWU7CisKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRj eHQpOworCQl9CisKKwkJLyogZnJlZSB0aGUgcHJldmlvdXNseSByZXR1cm5lZCByZWNvbnN0cnVj dGVkIHR1cGxlLCBpZiBhbnkgKi8KKwkJaWYgKHNjYW4tPnhzX2hpdHVwKQorCQl7CisJCQlwZnJl ZShzY2FuLT54c19oaXR1cCk7CisJCQlzY2FuLT54c19oaXR1cCA9IE5VTEw7CisJCX0KKworCQkv KiBidWlsZCB0aGUgcmV0dXJuYWJsZSBoZWFwIHR1cGxlIGluIHRoZSBzY2FuLWxpZmV0aW1lIGNv bnRleHQgKi8KKwkJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHNvLT5yZWNvbkN4dCk7 CisKKwkJLyogT25seSBkZWZvcm0gdGhlIGxlYWYgdHVwbGUgaWYgaXQgaGFzIElOQ0xVREUgYXR0 cmlidXRlcyAqLworCQlpZiAoc28tPnN0YXRlLmxlYWZUdXBEZXNjLT5uYXR0cyA+IDEpCisJCQlz cGdEZWZvcm1MZWFmVHVwbGUobGVhZlR1cGxlLCBzby0+c3RhdGUubGVhZlR1cERlc2MsCisJCQkJ CQkJICAgbGVhZkRhdHVtcywgbGVhZklzbnVsbHMsIHNiYXRjaC0+aXNOdWxsKTsKKworCQlsZWFm RGF0dW1zW3NwZ0tleUNvbHVtbl0gPSBsZWFmVmFsdWU7CisJCWxlYWZJc251bGxzW3NwZ0tleUNv bHVtbl0gPSBzYmF0Y2gtPmlzTnVsbDsKKworCQlzY2FuLT54c19oaXR1cCA9IGhlYXBfZm9ybV90 dXBsZShzby0+cmVjb25UdXBEZXNjLAorCQkJCQkJCQkJCSBsZWFmRGF0dW1zLCBsZWFmSXNudWxs cyk7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisKKwkJLyogY2xlYW4gdXAg YWZ0ZXIgdGhlIGxlYWZfY29uc2lzdGVudCBjYWxsICovCisJCU1lbW9yeUNvbnRleHRSZXNldChz by0+dGVtcEN4dCk7CisJfQorCWVsc2UgaWYgKHNjYW4tPm51bWJlck9mT3JkZXJCeXMgPiAwKQor CXsKKwkJLyogYWxsLU5VTEwgb3JkZXItYnkgYXJndW1lbnRzOiByZXBvcnQgTlVMTCBkaXN0YW5j ZXMgKi8KKwkJaW5kZXhfc3RvcmVfZmxvYXQ4X29yZGVyYnlfZGlzdGFuY2VzKHNjYW4sIHNvLT5v cmRlckJ5VHlwZXMsCisJCQkJCQkJCQkJCSBOVUxMLCBmYWxzZSk7CisJfQogfQogCiBib29sCiBz cGdjYW5yZXR1cm4oUmVsYXRpb24gaW5kZXgsIGludCBhdHRubykKIHsKLQlTcEdpc3RDYWNoZSAq Y2FjaGU7CisJU3BHaXN0Q2FjaGUgKmNhY2hlID0gc3BnR2V0Q2FjaGUoaW5kZXgpOwogCi0JLyog SU5DTFVERSBhdHRyaWJ1dGVzIGNhbiBhbHdheXMgYmUgZmV0Y2hlZCBmb3IgaW5kZXgtb25seSBz Y2FucyAqLworCS8qCisJICogRm9yYmlkIGluZGV4LW9ubHkgc2NhbnMgZm9yICJsb25nIHZhbHVl cyIgb3BjbGFzc2VzIChlLmcuIHRleHQgcmFkaXgpOgorCSAqIHRoZSBrZXkgaXMgcmVjb25zdHJ1 Y3RlZCBmcm9tIHRoZSBwcmVmaXggYWNjdW11bGF0ZWQgZHVyaW5nIHRoZSBkZXNjZW50CisJICog KHNlZSBzcGdnZXR0cmFuc2Zvcm0pIGFuZCBpcyBib3VuZGVkIG9ubHkgYnkgdGhlIGZpZWxkLXNp emUgbGltaXQsIHNvCisJICogaXQgd29uJ3QgZml0IHRoZSBmaXhlZCBwZXItYmF0Y2ggcmVjb25z dHJ1Y3Rpb24gd29ya3NwYWNlCisJICogKHNwZ2JlZ2luc2NhbikuCisJICovCisJaWYgKGNhY2hl LT5jb25maWcubG9uZ1ZhbHVlc09LKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIGVsc2Ug SU5DTFVERSBhdHRyaWJ1dGVzIGNhbiBhbHdheXMgYmUgZmV0Y2hlZCBmb3IgaW5kZXgtb25seSBz Y2Fucy4KKwkgKgorCSAqIE5vdGU6IFdlIGRlbGliZXJhdGVseSBnaXZlIHVwIG9uIElOQ0xVREUt b25seSBpbmRleC1vbmx5IHNjYW5zIHRvbywKKwkgKiBldmVuIHRob3VnaCBhbiBJTkNMVURFIGNv bHVtbiBjb21lcyBzdHJhaWdodCBmcm9tIHRoZSBib3VuZGVkIGxlYWYKKwkgKiB0dXBsZSBhbmQg bmVlZHMgbm8ga2V5IHJlY29uc3RydWN0aW9uOiBzcGdnZXR0cmFuc2Zvcm0gcmVjb25zdHJ1Y3Rz IHRoZQorCSAqIGtleSB1bmNvbmRpdGlvbmFsbHksIGFuZCByZWNoZWNrIG9mIGEga2V5LWNvbHVt biBxdWFsIHdvdWxkIG5lZWQgdGhlCisJICoga2V5IHZhbHVlIHJlZ2FyZGxlc3MuCisJICovCiAJ aWYgKGF0dG5vID4gMSkKIAkJcmV0dXJuIHRydWU7CiAKIAkvKiBXZSBjYW4gZG8gaXQgaWYgdGhl IG9wY2xhc3MgY29uZmlnIGZ1bmN0aW9uIHNheXMgc28gKi8KLQljYWNoZSA9IHNwZ0dldENhY2hl KGluZGV4KTsKLQogCXJldHVybiBjYWNoZS0+Y29uZmlnLmNhblJldHVybkRhdGE7CiB9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKaW5kZXggNDcxNTNiNGIwLi4yNjBhMTY0OTAgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKQEAgLTg4LDExICs4OCwxMSBAQCBzcGdo YW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWFkanVzdG1lbWJlcnMgPSBzcGdhZGp1c3Rt ZW1iZXJzLAogCQkuYW1iZWdpbnNjYW4gPSBzcGdiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IHNw Z3Jlc2NhbiwKLQkJLmFtZ2V0dHVwbGUgPSBzcGdnZXR0dXBsZSwKLQkJLmFtZ2V0YmF0Y2ggPSBO VUxMLAotCQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxMLAorCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJ CS5hbWdldGJhdGNoID0gc3BnZ2V0YmF0Y2gsCisJCS5hbXVuZ3VhcmRiYXRjaCA9IHNwZ3VuZ3Vh cmRiYXRjaCwKIAkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAotCQkuYW1nZXR0cmFuc2Zvcm0g PSBOVUxMLAorCQkuYW1nZXR0cmFuc2Zvcm0gPSBzcGdnZXR0cmFuc2Zvcm0sCiAJCS5hbWdldGJp dG1hcCA9IHNwZ2dldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IHNwZ2VuZHNjYW4sCiAJCS5hbXBv c3Jlc2V0ID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3Bn dmFjdXVtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5jCmluZGV4IGM0 NjFmOGRjMC4uMzliOWJmY2JkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0 L3NwZ3ZhY3V1bS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndmFjdXVtLmMK QEAgLTYyNSw3ICs2MjUsMTggQEAgc3BndmFjdXVtcGFnZShzcGdCdWxrRGVsZXRlU3RhdGUgKmJk cywgQnVmZmVyIGJ1ZmZlcikKIAlCbG9ja051bWJlciBibGtubyA9IEJ1ZmZlckdldEJsb2NrTnVt YmVyKGJ1ZmZlcik7CiAJUGFnZQkJcGFnZTsKIAotCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJf TE9DS19FWENMVVNJVkUpOworCS8qCisJICogR2V0IGEgZnVsbCBjbGVhbnVwIGxvY2sgb24gdGhp cyBwYWdlLiAgV2UgbXVzdCBnZXQgc3VjaCBhIGxvY2sgb24gZXZlcnkKKwkgKiBsZWFmIHBhZ2Ug b3ZlciB0aGUgY291cnNlIG9mIHRoZSB2YWN1dW0gc2Nhbiwgd2hldGhlciBvciBub3QgaXQKKwkg KiBhY3R1YWxseSBjb250YWlucyBhbnkgZGVsZXRhYmxlIHR1cGxlcy4KKwkgKgorCSAqIE5vdGU6 IHdlIGNvdWxkIGF2b2lkIHRoaXMgZm9yIGlubmVyIHBhZ2VzLCBidXQgbm90IGZvciB0aGUgcm9v dCBwYWdlLgorCSAqIFRoZSByb290IHBhZ2UgY2FuIHN0YXJ0IG91dCBhcyBhIGxlYWYgcGFnZSwg YnV0IHN1YnNlcXVlbnRseSBiZWNvbWUgYW4KKwkgKiBpbm5lciBwYWdlLCBldmVuIHdoaWxlIGEg c2NhbiBob2xkcyBhbiBpbnRlcmxvY2sgcGluIG9uIHRoYXQgcGFnZSAodGhpcworCSAqIGlzbid0 IHBvc3NpYmxlIGluIG5idHJlZSBiZWNhdXNlIHJvb3Qgc3BsaXRzIGFsd2F5cyBjcmVhdGUgYSBu ZXcgcm9vdAorCSAqIHBhZ2UsIHN0b3JlZCB3aXRoaW4gYSBzZXBhcmF0ZSBibG9jayBudW1iZXIp LgorCSAqLworCUxvY2tCdWZmZXJGb3JDbGVhbnVwKGJ1ZmZlcik7CiAJcGFnZSA9IEJ1ZmZlckdl dFBhZ2UoYnVmZmVyKTsKIAogCWlmIChQYWdlSXNOZXcocGFnZSkpCkBAIC03MDYsNyArNzE3LDcg QEAgc3BncHJvY2Vzc3BlbmRpbmcoc3BnQnVsa0RlbGV0ZVN0YXRlICpiZHMpCiAJCWJsa25vID0g SXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmcGl0ZW0tPnRpZCk7CiAJCWJ1ZmZlciA9IFJlYWRC dWZmZXJFeHRlbmRlZChpbmRleCwgTUFJTl9GT1JLTlVNLCBibGtubywKIAkJCQkJCQkJCVJCTV9O T1JNQUwsIGJkcy0+aW5mby0+c3RyYXRlZ3kpOwotCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVS X0xPQ0tfRVhDTFVTSVZFKTsKKwkJTG9ja0J1ZmZlckZvckNsZWFudXAoYnVmZmVyKTsKIAkJcGFn ZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKIAogCQlpZiAoUGFnZUlzTmV3KHBhZ2UpIHx8IFNw R2lzdFBhZ2VJc0RlbGV0ZWQocGFnZSkpCkBAIC03OTMsNiArODA0LDE2IEBAIHNwZ3Byb2Nlc3Nw ZW5kaW5nKHNwZ0J1bGtEZWxldGVTdGF0ZSAqYmRzKQogCXNwZ0NsZWFyUGVuZGluZ0xpc3QoYmRz KTsKIH0KIAorLyoKKyAqIENodW5rIHNpemUgZm9yIHRoZSBtYWluIGJ1bGtkZWxldGUgc2Nhbjog dGhlIHBlbmRpbmcgbGlzdCBpcyBkcmFpbmVkIGF0IGVhY2gKKyAqIGNodW5rIGJvdW5kYXJ5LCB0 aGUgb25seSBwb2ludCB3aGVyZSB0aGUgcmVhZCBzdHJlYW0gaXMgaWRsZSAoc2VlCisgKiBzcGd2 YWN1dW1zY2FuKS4gIFRoaXMgdHJhZGVzIHJlYWQtYWhlYWQgYWdhaW5zdCBtZW1vcnkgLS0gYSBs YXJnZXIgaW50ZXJ2YWwKKyAqIGxldHMgdGhlIHN0cmVhbSBwcmVmZXRjaCBmdXJ0aGVyIGJldHdl ZW4gcmVzZXRzLCBidXQgbGV0cyB0aGUgcGVuZGluZyBsaXN0CisgKiBncm93IGxhcmdlciBiZWZv cmUgaXQgaXMgYm91bmRlZC4gIDQwOTYga2VlcHMgcHJlZmV0Y2ggZWZmZWN0aXZlIHdoaWxlCisg KiBjYXBwaW5nIHRoZSBsaXN0IGF0IGEgZmV3IHRob3VzYW5kIGVudHJpZXMgdW5kZXIgaGVhdnkg Y29uY3VycmVudCBpbnNlcnRpb24uCisgKi8KKyNkZWZpbmUgU1BHSVNUX1ZBQ1VVTV9EUkFJTl9J TlRFUlZBTAk0MDk2CisKIC8qCiAgKiBQZXJmb3JtIGEgYnVsa2RlbGV0ZSBzY2FuCiAgKi8KQEAg LTg0NSwyMiArODY2LDI5IEBAIHNwZ3ZhY3V1bXNjYW4oc3BnQnVsa0RlbGV0ZVN0YXRlICpiZHMp CiAJICogZGVsZXRlIHNvbWUgZGVsZXRhYmxlIHR1cGxlcy4gIFNlZSBtb3JlIGV4dGVuc2l2ZSBj b21tZW50cyBhYm91dCB0aGlzCiAJICogaW4gYnR2YWN1dW1zY2FuKCkuCiAJICovCisJbnVtX3Bh Z2VzID0gMDsJCQkJLyogMCBmb3JjZXMgYW4gaW5pdGlhbCBsZW5ndGggY2hlY2sgYmVsb3cgKi8K IAlmb3IgKDs7KQogCXsKLQkJLyogR2V0IHRoZSBjdXJyZW50IHJlbGF0aW9uIGxlbmd0aCAqLwot CQlpZiAobmVlZExvY2spCi0JCQlMb2NrUmVsYXRpb25Gb3JFeHRlbnNpb24oaW5kZXgsIEV4Y2x1 c2l2ZUxvY2spOwotCQludW1fcGFnZXMgPSBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKGluZGV4 KTsKLQkJaWYgKG5lZWRMb2NrKQotCQkJVW5sb2NrUmVsYXRpb25Gb3JFeHRlbnNpb24oaW5kZXgs IEV4Y2x1c2l2ZUxvY2spOwotCi0JCS8qIFF1aXQgaWYgd2UndmUgc2Nhbm5lZCB0aGUgd2hvbGUg cmVsYXRpb24gKi8KKwkJLyogUmVmcmVzaCB0aGUgcmVsYXRpb24gbGVuZ3RoIG9uY2Ugd2UgaGF2 ZSBjYXVnaHQgdXAgdG8gaXQgKi8KIAkJaWYgKHAuY3VycmVudF9ibG9ja251bSA+PSBudW1fcGFn ZXMpCi0JCQlicmVhazsKKwkJeworCQkJaWYgKG5lZWRMb2NrKQorCQkJCUxvY2tSZWxhdGlvbkZv ckV4dGVuc2lvbihpbmRleCwgRXhjbHVzaXZlTG9jayk7CisJCQludW1fcGFnZXMgPSBSZWxhdGlv bkdldE51bWJlck9mQmxvY2tzKGluZGV4KTsKKwkJCWlmIChuZWVkTG9jaykKKwkJCQlVbmxvY2tS ZWxhdGlvbkZvckV4dGVuc2lvbihpbmRleCwgRXhjbHVzaXZlTG9jayk7CiAKLQkJcC5sYXN0X2V4 Y2x1c2l2ZSA9IG51bV9wYWdlczsKKwkJCS8qIFF1aXQgaWYgd2UndmUgc2Nhbm5lZCB0aGUgd2hv bGUgcmVsYXRpb24gKi8KKwkJCWlmIChwLmN1cnJlbnRfYmxvY2tudW0gPj0gbnVtX3BhZ2VzKQor CQkJCWJyZWFrOworCQl9CisKKwkJLyogR2l2ZSB0aGUgc3RyZWFtIHRoZSBuZXh0IGNodW5rOyBz ZWUgU1BHSVNUX1ZBQ1VVTV9EUkFJTl9JTlRFUlZBTCAqLworCQlpZiAobnVtX3BhZ2VzIC0gcC5j dXJyZW50X2Jsb2NrbnVtID4gU1BHSVNUX1ZBQ1VVTV9EUkFJTl9JTlRFUlZBTCkKKwkJCXAubGFz dF9leGNsdXNpdmUgPSBwLmN1cnJlbnRfYmxvY2tudW0gKyBTUEdJU1RfVkFDVVVNX0RSQUlOX0lO VEVSVkFMOworCQllbHNlCisJCQlwLmxhc3RfZXhjbHVzaXZlID0gbnVtX3BhZ2VzOwogCi0JCS8q IEl0ZXJhdGUgb3ZlciBwYWdlcywgdGhlbiBsb29wIGJhY2sgdG8gcmVjaGVjayBsZW5ndGggKi8K IAkJd2hpbGUgKHRydWUpCiAJCXsKIAkJCUJ1ZmZlcgkJYnVmOwpAQCAtODc0LDE4ICs5MDIsMTgg QEAgc3BndmFjdXVtc2NhbihzcGdCdWxrRGVsZXRlU3RhdGUgKmJkcykKIAkJCQlicmVhazsKIAog CQkJc3BndmFjdXVtcGFnZShiZHMsIGJ1Zik7Ci0KLQkJCS8qIGVtcHR5IHRoZSBwZW5kaW5nLWxp c3QgYWZ0ZXIgZWFjaCBwYWdlICovCi0JCQlpZiAoYmRzLT5wZW5kaW5nTGlzdCAhPSBOVUxMKQot CQkJCXNwZ3Byb2Nlc3NwZW5kaW5nKGJkcyk7CiAJCX0KIAogCQkvKgotCQkgKiBXZSBoYXZlIHRv IHJlc2V0IHRoZSByZWFkIHN0cmVhbSB0byB1c2UgaXQgYWdhaW4uIEFmdGVyIHJldHVybmluZwot CQkgKiBJbnZhbGlkQnVmZmVyLCB0aGUgcmVhZCBzdHJlYW0gQVBJIHdvbid0IGludm9rZSBvdXIg Y2FsbGJhY2sgYWdhaW4KLQkJICogdW50aWwgdGhlIHN0cmVhbSBoYXMgYmVlbiByZXNldC4KKwkJ ICogUmVzZXQgdGhlIHJlYWQgc3RyZWFtIGZvciB0aGUgbmV4dCBjaHVuayAoYWZ0ZXIgcmV0dXJu aW5nCisJCSAqIEludmFsaWRCdWZmZXIgaXQgd29uJ3QgY2FsbCBvdXIgY2FsbGJhY2sgYWdhaW4g dW50aWwgcmVzZXQpLiAgTm93CisJCSAqIHRoYXQgaXQgaXMgaWRsZSwgZHJhaW4gdGhlIHBlbmRp bmcgbGlzdDogc3BncHJvY2Vzc3BlbmRpbmcgcmV2aXNpdHMKKwkJICogcmVkaXJlY3QtcmVsb2Nh dGVkIHR1cGxlcyB1bmRlciB0aGUgc2FtZSBjbGVhbnVwLWxvY2sgaW50ZXJsb2NrLgogCQkgKi8K IAkJcmVhZF9zdHJlYW1fcmVzZXQoc3RyZWFtKTsKKworCQlpZiAoYmRzLT5wZW5kaW5nTGlzdCAh PSBOVUxMKQorCQkJc3BncHJvY2Vzc3BlbmRpbmcoYmRzKTsKIAl9CiAKIAlyZWFkX3N0cmVhbV9l bmQoc3RyZWFtKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BneGxv Zy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd4bG9nLmMKaW5kZXggNTVlODA2NmE3 Li4wZWFjMWQxYTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BneGxv Zy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BneGxvZy5jCkBAIC03NzEsNyAr NzcxLDkgQEAgc3BnUmVkb1ZhY3V1bUxlYWYoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJcHRy ICs9IHNpemVvZihPZmZzZXROdW1iZXIpICogeGxkYXRhLT5uQ2hhaW47CiAJY2hhaW5EZXN0ID0g KE9mZnNldE51bWJlciAqKSBwdHI7CiAKLQlpZiAoWExvZ1JlYWRCdWZmZXJGb3JSZWRvKHJlY29y ZCwgMCwgJmJ1ZmZlcikgPT0gQkxLX05FRURTX1JFRE8pCisJLyogV2UgbXVzdCB0YWtlIGEgY2xl YW51cCBsb2NrIGhlcmUsIGp1c3QgbGlrZSBzcGd2YWN1dW1wYWdlKCkgKi8KKwlpZiAoWExvZ1Jl YWRCdWZmZXJGb3JSZWRvRXh0ZW5kZWQocmVjb3JkLCAwLCBSQk1fTk9STUFMLCB0cnVlLCAmYnVm ZmVyKQorCQk9PSBCTEtfTkVFRFNfUkVETykKIAl7CiAJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1 ZmZlcik7CiAKQEAgLTgzNCw3ICs4MzYsOSBAQCBzcGdSZWRvVmFjdXVtUm9vdChYTG9nUmVhZGVy U3RhdGUgKnJlY29yZCkKIAogCXRvRGVsZXRlID0geGxkYXRhLT5vZmZzZXRzOwogCi0JaWYgKFhM b2dSZWFkQnVmZmVyRm9yUmVkbyhyZWNvcmQsIDAsICZidWZmZXIpID09IEJMS19ORUVEU19SRURP KQorCS8qIFRha2UgYSBjbGVhbnVwIGxvY2ssIGFzIGluIHNwZ1JlZG9WYWN1dW1MZWFmKCkgKi8K KwlpZiAoWExvZ1JlYWRCdWZmZXJGb3JSZWRvRXh0ZW5kZWQocmVjb3JkLCAwLCBSQk1fTk9STUFM LCB0cnVlLCAmYnVmZmVyKQorCQk9PSBCTEtfTkVFRFNfUkVETykKIAl7CiAJCXBhZ2UgPSBCdWZm ZXJHZXRQYWdlKGJ1ZmZlcik7CiAKQEAgLTg3Myw3ICs4NzcsOSBAQCBzcGdSZWRvVmFjdXVtUmVk aXJlY3QoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCQkJCQkJCQkJCWxvY2F0b3IpOwogCX0K IAotCWlmIChYTG9nUmVhZEJ1ZmZlckZvclJlZG8ocmVjb3JkLCAwLCAmYnVmZmVyKSA9PSBCTEtf TkVFRFNfUkVETykKKwkvKiBUYWtlIGEgY2xlYW51cCBsb2NrLCBhcyBpbiBzcGdSZWRvVmFjdXVt TGVhZigpICovCisJaWYgKFhMb2dSZWFkQnVmZmVyRm9yUmVkb0V4dGVuZGVkKHJlY29yZCwgMCwg UkJNX05PUk1BTCwgdHJ1ZSwgJmJ1ZmZlcikKKwkJPT0gQkxLX05FRURTX1JFRE8pCiAJewogCQlQ YWdlCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIpOwogCQlTcEdpc3RQYWdlT3BhcXVlIG9w YXF1ZSA9IFNwR2lzdFBhZ2VHZXRPcGFxdWUocGFnZSk7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3Nn bWwvaW5kZXhhbS5zZ21sIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAppbmRleCA3NWMwNzA0 Y2MuLjQ5MDQzMWY3MCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCkBAIC05NTEsNyArOTUxLDcgQEAgYW1nZXRiYXRj aCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgdmFsdWUgaW4gdGhlIGJhdGNoIGFuZCBwcm92aWRl cyBhbiA8ZnVuY3Rpb24+YW1nZXR0cmFuc2Zvcm08L2Z1bmN0aW9uPgogICAgY2FsbGJhY2sgKHNl ZSBiZWxvdyksIHdoaWNoIHRoZSB0YWJsZSBBTSBpbnZva2VzIGZvciBlYWNoIHJldHVybmVkIGl0 ZW0gdG8KICAgIHNldCA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBmcm9t IHRoYXQgcmVjb3JkZWQgc3RhdGU7IEdpU1QKLSAgIHdvcmtzIHRoaXMgd2F5LgorICAgYW5kIFNQ LUdpU1Qgd29yayB0aGlzIHdheS4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtOTg2LDggKzk4 Niw4IEBAIGFtZ2V0YmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgICAgIDxsaXRlcmFsPnNj YW4tJmd0O3hzX2hpdHVwZGVzYzwvbGl0ZXJhbD4pLiAgVGhpcyBnaXZlcyB0aGUgYWNjZXNzIG1l dGhvZAogICAgICAgY29tcGxldGUgZnJlZWRvbSB0byBmb3JtIHRoYXQgdHVwbGUgZnJvbSB3aGF0 ZXZlciBpdCBzdG9yZWQgaW4KICAgICAgIDxzdHJ1Y3RmaWVsZD5jdXJyVHVwbGVzPC9zdHJ1Y3Rm aWVsZD4sIGluIHdoYXRldmVyIG9uLWRpc2sgZm9ybWF0IHN1aXRzCi0gICAgICBpdC4gIEdpU1Qg dXNlcyB0aGlzIHBhdGgsIGJlY2F1c2UgdGhlIHJlcHJlc2VudGF0aW9uIGl0Ci0gICAgICBzdG9y ZXMgZGlmZmVycyBmcm9tIHRoZSBpbmRleGVkIHZhbHVlIGFuZCBzbyBjb3VsZCBub3Qgc2F0aXNm eSB0aGUKKyAgICAgIGl0LiAgR2lTVCBhbmQgU1AtR2lTVCB1c2UgdGhpcyBwYXRoLCBiZWNhdXNl IHRoZSByZXByZXNlbnRhdGlvbiB0aGV5CisgICAgICBzdG9yZSBkaWZmZXJzIGZyb20gdGhlIGlu ZGV4ZWQgdmFsdWUgYW5kIHNvIGNvdWxkIG5vdCBzYXRpc2Z5IHRoZQogICAgICAgPGxpdGVyYWw+ eHNfaXR1cGRlc2M8L2xpdGVyYWw+IGxheW91dCBkaXJlY3RseS4KICAgICAgPC9wYXJhPgogICAg IDwvbGlzdGl0ZW0+CkBAIC0xMDMxLDEwICsxMDMxLDEwIEBAIGFtdW5ndWFyZGJhdGNoIChJbmRl eFNjYW5EZXNjIHNjYW4sCiAgICBpcyBub3QgZXZlbiByZXF1aXJlZCB0byB1c2UgdGhlIHN0YW5k YXJkIGhlbHBlcgogICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF91bmxvY2tfYmF0Y2g8L2Z1bmN0 aW9uPiB0byBtYW5hZ2UgaXQuICBJbiBwcmFjdGljZSwKICAgIHRob3VnaCwgbW9zdCBvciBhbGwg aW5kZXggQU1zIHdpbGwgdXNlIHRoYXQgaGVscGVyIGFuZCBob2xkIHRoZSBzaW1wbGVzdAotICAg cG9zc2libGUgaW50ZXJsb2NrOiBlYWNoIGd1YXJkZWQgQi10cmVlLCBoYXNoLCBvciBHaVNUIGJh dGNoIGtlZXBzIGEKLSAgIHNpbmdsZSBidWZmZXIgcGluIG9uIHRoZSBvbmUgaW5kZXggcGFnZSB0 aGUgYmF0Y2ggY2FtZSBmcm9tLiAgKFRoZQotICAgPHF1b3RlPnZpcnR1YWw8L3F1b3RlPiBuZWFy ZXN0LW5laWdoYm9yIGJhdGNoZXMgdGhhdCBHaVNUIHVzZXMgZm9yIG9yZGVyZWQKLSAgIHNjYW5z IGFyZSBub3QgZ3VhcmRlZCwgYW5kIGhvbGQgbm8gc3VjaCBwaW4uKSAgU2VlIDx4cmVmCisgICBw b3NzaWJsZSBpbnRlcmxvY2s6IGVhY2ggZ3VhcmRlZCBCLXRyZWUsIGhhc2gsIEdpU1QsIG9yIFNQ LUdpU1QgYmF0Y2gga2VlcHMKKyAgIGEgc2luZ2xlIGJ1ZmZlciBwaW4gb24gdGhlIG9uZSBpbmRl eCBwYWdlIHRoZSBiYXRjaCBjYW1lIGZyb20uICAoVGhlCisgICA8cXVvdGU+dmlydHVhbDwvcXVv dGU+IG5lYXJlc3QtbmVpZ2hib3IgYmF0Y2hlcyB0aGF0IEdpU1QgYW5kIFNQLUdpU1QgdXNlCisg ICBmb3Igb3JkZXJlZCBzY2FucyBhcmUgbm90IGd1YXJkZWQsIGFuZCBob2xkIG5vIHN1Y2ggcGlu LikgIFNlZSA8eHJlZgogICAgIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4gZm9yIGRldGFpbHMg b24gYnVmZmVyIHBpbiBtYW5hZ2VtZW50IGR1cmluZwogICAgaW5kZXggc2NhbnMuICBUaGlzIGZ1 bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGF0IG1vc3Qgb25jZSBmb3IgZWFjaCBndWFyZGVkCiAgICBi YXRjaDsgaXQgaXMgbm90IGNhbGxlZCB3aGVuIHRoZSBpbmRleCBBTSBoYXMgYWxyZWFkeSB1bmd1 YXJkZWQgdGhlIGJhdGNoCkBAIC0xMDc4LDEwICsxMDc4LDEyIEBAIGFta2lsbGl0ZW1zYmF0Y2gg KEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g aW5kZXggQU1zICh0aG9zZSB0aGF0IGRvbid0IGNhbiBsZWF2ZQogICAgdGhlIGZpZWxkIHNldCB0 byA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiksIGJ1dCBkb2luZyBzbyBpcyByZWNvbW1lbmRlZCBm b3IKICAgIHBlcmZvcm1hbmNlLCBhcyBpdCBhbGxvd3MgZnV0dXJlIHNjYW5zIHRvIHNraXAga25v d24tZGVhZCBpbmRleCBlbnRyaWVzLgotICAgQWxsIHRocmVlIGNvcmUgaW5kZXggYWNjZXNzIG1l dGhvZHMgdGhhdCBjdXJyZW50bHkgc3VwcG9ydAotICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiAoQi10cmVlLCBoYXNoLCBhbmQgR2lTVCkgaW1wbGVtZW50Ci0gICA8bGl0ZXJhbD5M UF9ERUFEPC9saXRlcmFsPiBtYXJraW5nLCB0aG91Z2ggdGhpcmQtcGFydHkgaW5kZXggYWNjZXNz IG1ldGhvZHMKLSAgIGFyZSBmcmVlIHRvIGNob29zZSB3aGV0aGVyIHRvIGltcGxlbWVudCB0aGlz IGZlYXR1cmUuICBUaGUgdGFibGUgQU0gbWF5CisgICBCLXRyZWUsIGhhc2gsIGFuZCBHaVNUIGlt cGxlbWVudCA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBtYXJraW5nOyBTUC1HaVNUCisgICBp cyBhbiBleGFtcGxlIG9mIGEgY29yZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGFj Y2VzcyBtZXRob2QgdGhhdAorICAgbGVhdmVzIGl0IHVuaW1wbGVtZW50ZWQgKGl0IHN0aWxsIGhv bGRzIHRoZSBsZWFmLXBhZ2UgaW50ZXJsb2NrIHBpbiBmb3IKKyAgIGluZGV4LW9ubHkgc2NhbnMs IGJ1dCBuZXZlciBzZXRzIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMpLCBhbmQKKyAg IHRoaXJkLXBhcnR5IGluZGV4IGFjY2VzcyBtZXRob2RzIGFyZSBsaWtld2lzZSBmcmVlIHRvIGNo b29zZSB3aGV0aGVyIHRvCisgICBpbXBsZW1lbnQgdGhpcyBmZWF0dXJlLiAgVGhlIHRhYmxlIEFN IG1heQogICAgY2FsbCA8ZnVuY3Rpb24+dGFibGVhbV91dGlsX3NjYW5wb3Nfa2lsbGl0ZW08L2Z1 bmN0aW9uPiB0byBtYXJrIGRlYWQgaXRlbXMgYXMKICAgIHRoZSBzY2FuIHByb2dyZXNzZXMuICBJ ZiB0aGUgYmF0Y2ggY29udGFpbnMgYW55IHN1Y2ggZGVhZCBpdGVtcywgdGhlIGJhdGNoJ3MKICAg IDxzdHJ1Y3RmaWVsZD5kZWFkSXRlbXM8L3N0cnVjdGZpZWxkPiBhcnJheSB3aWxsIGhhdmUgYmVl biBzb3J0ZWQgYW5kCkBAIC0xMTg4LDkgKzExOTAsOSBAQCBhbWdldHRyYW5zZm9ybSAoSW5kZXhT Y2FuRGVzYyBzY2FuLAogICAgcHJvcGVydHkgb2YgdGhlIHdob2xlIHNjYW4gJm1kYXNoOyBvciwg Zm9yIGluZGV4LW9ubHkgc2NhbnMsIGlzIHRoZSBvbi1kaXNrCiAgICBpbmRleCB0dXBsZSByZXR1 cm5lZCBkaXJlY3RseSB2aWEgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfaXR1cDwvbGl0ZXJhbD4gJm1k YXNoOwogICAgdGhlIGZpZWxkIGNhbiBiZSBsZWZ0IDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+LCBh cyBCLXRyZWUgYW5kIGhhc2ggZG8uICBHaVNUCi0gICBwcm92aWRlcyBvbmUgYmVjYXVzZSBwYXJ0 cyBvZiBpdHMgcGVyLXR1cGxlIG91dHB1dCAodGhlIHJlY2hlY2sgZmxhZywgdGhlCi0gICA8bGl0 ZXJhbD5PUkRFUiBCWTwvbGl0ZXJhbD4gZGlzdGFuY2VzLCBhbmQgdGhlIHJlY29uc3RydWN0ZWQg aW5kZXgtb25seQotICAgdHVwbGVzKSB2YXJ5IHBlciBtYXRjaGluZyBpdGVtLCBhcyBkZXNjcmli ZWQgYWJvdmUuCisgICBhbmQgU1AtR2lTVCBwcm92aWRlIG9uZSBiZWNhdXNlIHBhcnRzIG9mIHRo ZWlyIHBlci10dXBsZSBvdXRwdXQgKHRoZSByZWNoZWNrCisgICBmbGFnLCB0aGUgPGxpdGVyYWw+ T1JERVIgQlk8L2xpdGVyYWw+IGRpc3RhbmNlcywgYW5kIHRoZSByZWNvbnN0cnVjdGVkCisgICBp bmRleC1vbmx5IHR1cGxlcykgdmFyeSBwZXIgbWF0Y2hpbmcgaXRlbSwgYXMgZGVzY3JpYmVkIGFi b3ZlLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC0xNDk4LDcgKzE1MDAsNyBAQCBhbXRyYW5z bGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2lu dHlwZSk7CiAgICBjYWxscyA8ZnVuY3Rpb24+YW1nZXR0cmFuc2Zvcm08L2Z1bmN0aW9uPiBhcyBp dCByZXR1cm5zIGVhY2ggaXRlbSB0byBzZXQKICAgIDxzdHJ1Y3RmaWVsZD54c19vcmRlcmJ5dmFs czwvc3RydWN0ZmllbGQ+IGFuZAogICAgPHN0cnVjdGZpZWxkPnhzX3JlY2hlY2tvcmRlcmJ5PC9z dHJ1Y3RmaWVsZD4gZnJvbSB0aGF0IHJlY29yZGVkIHN0YXRlLiAgR2lTVAotICAgdXNlcyB0aGlz IGZvciBuZWFyZXN0LW5laWdoYm9yIHNjYW5zLiAgQXMgd2l0aAorICAgYW5kIFNQLUdpU1QgdXNl IHRoaXMgZm9yIG5lYXJlc3QtbmVpZ2hib3Igc2NhbnMuICBBcyB3aXRoCiAgICA8bGl0ZXJhbD5z Y2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiwgdGhlc2UgdmFsdWVzIGNhbm5vdCBiZSBzZXQg ZGlyZWN0bHkgYXMKICAgIGl0ZW1zIGFyZSByZXR1cm5lZC4KICAgPC9wYXJhPgpAQCAtMTUwNiwx MCArMTUwOCwxMCBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9p ZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgIDxwYXJhPgogICAgU2NhbnMgdGhhdCB1c2Ug b3JkZXJpbmcgb3BlcmF0b3JzIGFyZSBuZXZlciBwbGFubmVkIGFzIGluZGV4LW9ubHkgc2NhbnMu CiAgICBCZWNhdXNlIGFuIG9yZGVyZWQgc2NhbiBjYW4gY29sbGVjdCBtYXRjaGluZyBpdGVtcyBm cm9tIG1hbnkgaW5kZXggbGVhZgotICAgcGFnZXMgd2l0aG91dCByZXRhaW5pbmcgYSBidWZmZXIg cGluIG9uIGFueSBvZiB0aGVtIChHaVNUJ3MKLSAgIDxxdW90ZT52aXJ0dWFsPC9xdW90ZT4gbmVh cmVzdC1uZWlnaGJvciBiYXRjaGVzIHdvcmsgdGhpcyB3YXkpLCBpdCBoYXMgbm8KLSAgIHBpbiB0 byBzZXJ2ZSBhcyB0aGUgaW50ZXJsb2NrIGFnYWluc3QgY29uY3VycmVudCBUSUQgcmVjeWNsaW5n IHRoYXQgYW4KLSAgIGluZGV4LW9ubHkgc2NhbiBkZXBlbmRzIG9uIChzZWUgPHhyZWYgbGlua2Vu ZD0iaW5kZXgtbG9ja2luZyIvPikuICBUaGUKKyAgIHBhZ2VzIHdpdGhvdXQgcmV0YWluaW5nIGEg YnVmZmVyIHBpbiBvbiBhbnkgb2YgdGhlbSAodGhlCisgICA8cXVvdGU+dmlydHVhbDwvcXVvdGU+ IG5lYXJlc3QtbmVpZ2hib3IgYmF0Y2hlcyBvZiBHaVNUIGFuZCBTUC1HaVNUIHdvcmsKKyAgIHRo aXMgd2F5KSwgaXQgaGFzIG5vIHBpbiB0byBzZXJ2ZSBhcyB0aGUgaW50ZXJsb2NrIGFnYWluc3Qg Y29uY3VycmVudCBUSUQKKyAgIHJlY3ljbGluZyB0aGF0IGFuIGluZGV4LW9ubHkgc2NhbiBkZXBl bmRzIG9uIChzZWUgPHhyZWYgbGlua2VuZD0iaW5kZXgtbG9ja2luZyIvPikuICBUaGUKICAgIHBs YW5uZXIgdGhlcmVmb3JlIGNvc3RzIGFuZCBleGVjdXRlcyBzdWNoIHNjYW5zIGFzIHBsYWluIGlu ZGV4IHNjYW5zLCB3aGljaAogICAgYWx3YXlzIGZldGNoIGFuZCByZWNoZWNrIHRoZSBoZWFwIHR1 cGxlLgogICA8L3BhcmE+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvc3BnaXN0LnNnbWwgYi9k b2Mvc3JjL3NnbWwvc3BnaXN0LnNnbWwKaW5kZXggNmFmOTM3MTliLi4wMDExYTQ1OGIgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9zcGdpc3Quc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvc3BnaXN0 LnNnbWwKQEAgLTMzNiw3ICszMzYsMTIgQEAgdHlwZWRlZiBzdHJ1Y3Qgc3BnQ29uZmlnT3V0CiAg ICAgICA8c3RydWN0ZmllbGQ+bG9uZ1ZhbHVlc09LPC9zdHJ1Y3RmaWVsZD4gc2hvdWxkIGJlIHNl dCB0cnVlIG9ubHkgd2hlbiB0aGUKICAgICAgIDxzdHJ1Y3RmaWVsZD5hdHRUeXBlPC9zdHJ1Y3Rm aWVsZD4gaXMgb2YgdmFyaWFibGUgbGVuZ3RoIGFuZCB0aGUgb3BlcmF0b3IKICAgICAgIGNsYXNz IGlzIGNhcGFibGUgb2Ygc2VnbWVudGluZyBsb25nIHZhbHVlcyBieSByZXBlYXRlZCBzdWZmaXhp bmcKLSAgICAgIChzZWUgPHhyZWYgbGlua2VuZD0ic3BnaXN0LWxpbWl0cyIvPikuCisgICAgICAo c2VlIDx4cmVmIGxpbmtlbmQ9InNwZ2lzdC1saW1pdHMiLz4pLiAgU2V0dGluZyBpdCB0cnVlIGRp c2FibGVzCisgICAgICBpbmRleC1vbmx5IHNjYW5zIGZvciB0aGUgb3BlcmF0b3IgY2xhc3MsIGV2 ZW4gaWYKKyAgICAgIDxzdHJ1Y3RmaWVsZD5jYW5SZXR1cm5EYXRhPC9zdHJ1Y3RmaWVsZD4gaXMg YWxzbyBzZXQ6IHJlY29uc3RydWN0aW5nIHRoZQorICAgICAgaW5kZXhlZCB2YWx1ZSBjYW4gdGhl biByZXF1aXJlIG1hdGVyaWFsaXppbmcgYW4gYXJiaXRyYXJpbHkgbGFyZ2UgcHJlZml4CisgICAg ICAoYSBsb25nIHZhbHVlIGlzIHN0b3JlZCBieSBzcHJlYWRpbmcgaXRzIHByZWZpeCBhY3Jvc3Mg bWFueSBpbm5lciB0dXBsZXMpLAorICAgICAgc28gc3VjaCBxdWVyaWVzIGFyZSBleGVjdXRlZCBh cyByZWd1bGFyIGluZGV4IHNjYW5zIGluc3RlYWQuCiAgICAgIDwvcGFyYT4KIAogICAgICA8cGFy YT4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvc3BnaXN0X25hbWVfb3BzL2V4cGVjdGVk L3NwZ2lzdF9uYW1lX29wcy5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3NwZ2lzdF9uYW1lX29wcy9l eHBlY3RlZC9zcGdpc3RfbmFtZV9vcHMub3V0CmluZGV4IDFlZTY1ZWRlMi4uYWUwZWY5OTMzIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3NwZ2lzdF9uYW1lX29wcy9leHBlY3RlZC9zcGdp c3RfbmFtZV9vcHMub3V0CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvc3BnaXN0X25hbWVfb3BzL2V4 cGVjdGVkL3NwZ2lzdF9uYW1lX29wcy5vdXQKQEAgLTQxLDcgKzQxLDcgQEAgc2VsZWN0ICogZnJv bSB0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBTb3J0CiAg ICBTb3J0IEtleTogZjEKLSAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgdF9mMV9mMl9mM19p ZHggb24gdAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdF9mMV9mMl9mM19pZHggb24gdAogICAg ICAgICAgSW5kZXggQ29uZDogKChmMSA+ICdiaW5hcnlfdXBncmFkZV9zZXRfbic6Om5hbWUpIEFO RCAoZjEgPCAnYmluYXJ5X3VwZ3JhZGVfc2V0X3AnOjpuYW1lKSkKICg0IHJvd3MpCiAKQEAgLTkw LDcgKzkwLDcgQEAgc2VsZWN0ICogZnJvbSB0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICBTb3J0CiAgICBTb3J0IEtleTogZjEKLSAgIC0+ICBJbmRleCBPbmx5 IFNjYW4gdXNpbmcgdF9mMV9mMl9mM19pZHggb24gdAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcg dF9mMV9mMl9mM19pZHggb24gdAogICAgICAgICAgSW5kZXggQ29uZDogKChmMSA+ICdiaW5hcnlf dXBncmFkZV9zZXRfbic6Om5hbWUpIEFORCAoZjEgPCAnYmluYXJ5X3VwZ3JhZGVfc2V0X3AnOjpu YW1lKSkKICg0IHJvd3MpCiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv YW11dGlscy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FtdXRpbHMub3V0CmluZGV4 IDdhYjYxMTNjNi4uMmQyNmY3Zjk5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2FtdXRpbHMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYW11dGlscy5v dXQKQEAgLTEwMSw3ICsxMDEsNyBAQCBzZWxlY3QgcHJvcCwKICBudWxsc19sYXN0ICAgICAgICAg fCB0ICAgICB8IGYgICAgfCBmICAgIHwgZiAgICAgICAgICAgIHwgZiAgICAgICAgICAgfCBmICAg fCBmCiAgb3JkZXJhYmxlICAgICAgICAgIHwgdCAgICAgfCBmICAgIHwgZiAgICB8IGYgICAgICAg ICAgICB8IGYgICAgICAgICAgIHwgZiAgIHwgZgogIGRpc3RhbmNlX29yZGVyYWJsZSB8IGYgICAg IHwgZiAgICB8IHQgICAgfCBmICAgICAgICAgICAgfCB0ICAgICAgICAgICB8IGYgICB8IGYKLSBy ZXR1cm5hYmxlICAgICAgICAgfCB0ICAgICB8IGYgICAgfCBmICAgIHwgdCAgICAgICAgICAgIHwg dCAgICAgICAgICAgfCBmICAgfCBmCisgcmV0dXJuYWJsZSAgICAgICAgIHwgdCAgICAgfCBmICAg IHwgZiAgICB8IGYgICAgICAgICAgICB8IHQgICAgICAgICAgIHwgZiAgIHwgZgogIHNlYXJjaF9h cnJheSAgICAgICB8IHQgICAgIHwgZiAgICB8IGYgICAgfCBmICAgICAgICAgICAgfCBmICAgICAg ICAgICB8IGYgICB8IGYKICBzZWFyY2hfbnVsbHMgICAgICAgfCB0ICAgICB8IGYgICAgfCB0ICAg IHwgdCAgICAgICAgICAgIHwgdCAgICAgICAgICAgfCBmICAgfCB0CiAgYm9ndXMgICAgICAgICAg ICAgIHwgICAgICAgfCAgICAgIHwgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwg ICAgIHwgCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRl eF9zcGdpc3Qub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXhfc3Bn aXN0Lm91dAppbmRleCBkZGZmY2EyZTcuLmRhNzMwZGQ0NyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXhfc3BnaXN0Lm91dAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleF9zcGdpc3Qub3V0CkBAIC02MDIsMTAgKzYwMiwx MCBAQCBGUk9NIChWQUxVRVMgKHBvaW50ICcxLDInKSwgKE5VTEwpLCAoJzEyMzQsNTY3OCcpKSBw dHMocHQpOwogCiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgY291bnQoKikgRlJPTSByYWRp eF90ZXh0X3RibCBXSEVSRSB0ID0gJ1AwMTIzNDU2Nzg5YWJjZGVmJzsKLSAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgQWdn cmVnYXRlCi0gICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIHNwX3JhZGl4X2luZCBvbiByYWRp eF90ZXh0X3RibAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc3BfcmFkaXhfaW5kIG9uIHJhZGl4 X3RleHRfdGJsCiAgICAgICAgICBJbmRleCBDb25kOiAodCA9ICdQMDEyMzQ1Njc4OWFiY2RlZic6 OnRleHQpCiAoMyByb3dzKQogCkBAIC02MTcsMTAgKzYxNywxMCBAQCBTRUxFQ1QgY291bnQoKikg RlJPTSByYWRpeF90ZXh0X3RibCBXSEVSRSB0ID0gJ1AwMTIzNDU2Nzg5YWJjZGVmJzsKIAogRVhQ TEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUIGNvdW50KCopIEZST00gcmFkaXhfdGV4dF90YmwgV0hF UkUgdCA9ICdQMDEyMzQ1Njc4OWFiY2RlJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgQWdncmVnYXRlCi0gICAtPiAg SW5kZXggT25seSBTY2FuIHVzaW5nIHNwX3JhZGl4X2luZCBvbiByYWRpeF90ZXh0X3RibAorICAg LT4gIEluZGV4IFNjYW4gdXNpbmcgc3BfcmFkaXhfaW5kIG9uIHJhZGl4X3RleHRfdGJsCiAgICAg ICAgICBJbmRleCBDb25kOiAodCA9ICdQMDEyMzQ1Njc4OWFiY2RlJzo6dGV4dCkKICgzIHJvd3Mp CiAKQEAgLTYzMiwxMCArNjMyLDEwIEBAIFNFTEVDVCBjb3VudCgqKSBGUk9NIHJhZGl4X3RleHRf dGJsIFdIRVJFIHQgPSAnUDAxMjM0NTY3ODlhYmNkZSc7CiAKIEVYUExBSU4gKENPU1RTIE9GRikK IFNFTEVDVCBjb3VudCgqKSBGUk9NIHJhZGl4X3RleHRfdGJsIFdIRVJFIHQgPSAnUDAxMjM0NTY3 ODlhYmNkZWZGJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgQWdncmVnYXRlCi0gICAtPiAgSW5kZXggT25seSBTY2Fu IHVzaW5nIHNwX3JhZGl4X2luZCBvbiByYWRpeF90ZXh0X3RibAorICAgLT4gIEluZGV4IFNjYW4g dXNpbmcgc3BfcmFkaXhfaW5kIG9uIHJhZGl4X3RleHRfdGJsCiAgICAgICAgICBJbmRleCBDb25k OiAodCA9ICdQMDEyMzQ1Njc4OWFiY2RlZkYnOjp0ZXh0KQogKDMgcm93cykKIApAQCAtNjUwLDcg KzY1MCw3IEBAIFNFTEVDVCBjb3VudCgqKSBGUk9NIHJhZGl4X3RleHRfdGJsIFdIRVJFIHQgPCAg ICAnQXp0ZWMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBBZ2dyZWdhdGUKLSAgIC0+ ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc3BfcmFkaXhfaW5kIG9uIHJhZGl4X3RleHRfdGJsCisg ICAtPiAgSW5kZXggU2NhbiB1c2luZyBzcF9yYWRpeF9pbmQgb24gcmFkaXhfdGV4dF90YmwKICAg ICAgICAgIEluZGV4IENvbmQ6ICh0IDwgJ0F6dGVjICAgICAgICAgICAgICAgICAgICAgICAgIEN0 ICAnOjp0ZXh0KQogKDMgcm93cykKIApAQCAtNjY1LDcgKzY2NSw3IEBAIFNFTEVDVCBjb3VudCgq KSBGUk9NIHJhZGl4X3RleHRfdGJsIFdIRVJFIHQgfjx+ICAnQXp0ZWMKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiAgQWdncmVnYXRlCi0gICAtPiAgSW5kZXggT25seSBTY2FuIHVz aW5nIHNwX3JhZGl4X2luZCBvbiByYWRpeF90ZXh0X3RibAorICAgLT4gIEluZGV4IFNjYW4gdXNp bmcgc3BfcmFkaXhfaW5kIG9uIHJhZGl4X3RleHRfdGJsCiAgICAgICAgICBJbmRleCBDb25kOiAo dCB+PH4gJ0F6dGVjICAgICAgICAgICAgICAgICAgICAgICAgIEN0ICAnOjp0ZXh0KQogKDMgcm93 cykKIApAQCAtNjgwLDcgKzY4MCw3IEBAIFNFTEVDVCBjb3VudCgqKSBGUk9NIHJhZGl4X3RleHRf dGJsIFdIRVJFIHQgPD0gICAnQXp0ZWMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog IEFnZ3JlZ2F0ZQotICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzcF9yYWRpeF9pbmQgb24g cmFkaXhfdGV4dF90YmwKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHNwX3JhZGl4X2luZCBvbiBy YWRpeF90ZXh0X3RibAogICAgICAgICAgSW5kZXggQ29uZDogKHQgPD0gJ0F6dGVjICAgICAgICAg ICAgICAgICAgICAgICAgIEN0ICAnOjp0ZXh0KQogKDMgcm93cykKIApAQCAtNjk1LDcgKzY5NSw3 IEBAIFNFTEVDVCBjb3VudCgqKSBGUk9NIHJhZGl4X3RleHRfdGJsIFdIRVJFIHQgfjw9fiAnQXp0 ZWMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBBZ2dyZWdhdGUKLSAgIC0+ ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc3BfcmFkaXhfaW5kIG9uIHJhZGl4X3RleHRfdGJsCisg ICAtPiAgSW5kZXggU2NhbiB1c2luZyBzcF9yYWRpeF9pbmQgb24gcmFkaXhfdGV4dF90YmwKICAg ICAgICAgIEluZGV4IENvbmQ6ICh0IH48PX4gJ0F6dGVjICAgICAgICAgICAgICAgICAgICAgICAg IEN0ICAnOjp0ZXh0KQogKDMgcm93cykKIApAQCAtNzEwLDcgKzcxMCw3IEBAIFNFTEVDVCBjb3Vu dCgqKSBGUk9NIHJhZGl4X3RleHRfdGJsIFdIRVJFIHQgPSAgICAnQXp0ZWMKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KICBBZ2dyZWdhdGUKLSAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNp bmcgc3BfcmFkaXhfaW5kIG9uIHJhZGl4X3RleHRfdGJsCisgICAtPiAgSW5kZXggU2NhbiB1c2lu ZyBzcF9yYWRpeF9pbmQgb24gcmFkaXhfdGV4dF90YmwKICAgICAgICAgIEluZGV4IENvbmQ6ICh0 ID0gJ0F6dGVjICAgICAgICAgICAgICAgICAgICAgICAgIEN0ICAnOjp0ZXh0KQogKDMgcm93cykK IApAQCAtNzI1LDcgKzcyNSw3IEBAIFNFTEVDVCBjb3VudCgqKSBGUk9NIHJhZGl4X3RleHRfdGJs IFdIRVJFIHQgPSAgICAnV29ydGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBBZ2dy ZWdhdGUKLSAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc3BfcmFkaXhfaW5kIG9uIHJhZGl4 X3RleHRfdGJsCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzcF9yYWRpeF9pbmQgb24gcmFkaXhf dGV4dF90YmwKICAgICAgICAgIEluZGV4IENvbmQ6ICh0ID0gJ1dvcnRoICAgICAgICAgICAgICAg ICAgICAgICAgIFN0ICAnOjp0ZXh0KQogKDMgcm93cykKIApAQCAtNzQwLDcgKzc0MCw3IEBAIFNF TEVDVCBjb3VudCgqKSBGUk9NIHJhZGl4X3RleHRfdGJsIFdIRVJFIHQgPj0gICAnV29ydGgKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEFnZ3JlZ2F0ZQotICAgLT4gIEluZGV4IE9u bHkgU2NhbiB1c2luZyBzcF9yYWRpeF9pbmQgb24gcmFkaXhfdGV4dF90YmwKKyAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIHNwX3JhZGl4X2luZCBvbiByYWRpeF90ZXh0X3RibAogICAgICAgICAgSW5k ZXggQ29uZDogKHQgPj0gJ1dvcnRoICAgICAgICAgICAgICAgICAgICAgICAgIFN0ICAnOjp0ZXh0 KQogKDMgcm93cykKIApAQCAtNzU1LDcgKzc1NSw3IEBAIFNFTEVDVCBjb3VudCgqKSBGUk9NIHJh ZGl4X3RleHRfdGJsIFdIRVJFIHQgfj49fiAnV29ydGgKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KICBBZ2dyZWdhdGUKLSAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc3Bf cmFkaXhfaW5kIG9uIHJhZGl4X3RleHRfdGJsCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzcF9y YWRpeF9pbmQgb24gcmFkaXhfdGV4dF90YmwKICAgICAgICAgIEluZGV4IENvbmQ6ICh0IH4+PX4g J1dvcnRoICAgICAgICAgICAgICAgICAgICAgICAgIFN0ICAnOjp0ZXh0KQogKDMgcm93cykKIApA QCAtNzcwLDcgKzc3MCw3IEBAIFNFTEVDVCBjb3VudCgqKSBGUk9NIHJhZGl4X3RleHRfdGJsIFdI RVJFIHQgPiAgICAnV29ydGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBBZ2dyZWdh dGUKLSAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc3BfcmFkaXhfaW5kIG9uIHJhZGl4X3Rl eHRfdGJsCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzcF9yYWRpeF9pbmQgb24gcmFkaXhfdGV4 dF90YmwKICAgICAgICAgIEluZGV4IENvbmQ6ICh0ID4gJ1dvcnRoICAgICAgICAgICAgICAgICAg ICAgICAgIFN0ICAnOjp0ZXh0KQogKDMgcm93cykKIApAQCAtNzg1LDcgKzc4NSw3IEBAIFNFTEVD VCBjb3VudCgqKSBGUk9NIHJhZGl4X3RleHRfdGJsIFdIRVJFIHQgfj5+ICAnV29ydGgKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgQWdncmVnYXRlCi0gICAtPiAgSW5kZXggT25s eSBTY2FuIHVzaW5nIHNwX3JhZGl4X2luZCBvbiByYWRpeF90ZXh0X3RibAorICAgLT4gIEluZGV4 IFNjYW4gdXNpbmcgc3BfcmFkaXhfaW5kIG9uIHJhZGl4X3RleHRfdGJsCiAgICAgICAgICBJbmRl eCBDb25kOiAodCB+Pn4gJ1dvcnRoICAgICAgICAgICAgICAgICAgICAgICAgIFN0ICAnOjp0ZXh0 KQogKDMgcm93cykKIApAQCAtNzk3LDEwICs3OTcsMTAgQEAgU0VMRUNUIGNvdW50KCopIEZST00g cmFkaXhfdGV4dF90YmwgV0hFUkUgdCB+Pn4gICdXb3J0aAogCiBFWFBMQUlOIChDT1NUUyBPRkYp CiBTRUxFQ1QgY291bnQoKikgRlJPTSByYWRpeF90ZXh0X3RibCBXSEVSRSB0IF5ACSAnV29ydGgn OwotICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KICBBZ2dyZWdhdGUKLSAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc3Bf cmFkaXhfaW5kIG9uIHJhZGl4X3RleHRfdGJsCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzcF9y YWRpeF9pbmQgb24gcmFkaXhfdGV4dF90YmwKICAgICAgICAgIEluZGV4IENvbmQ6ICh0IF5AICdX b3J0aCc6OnRleHQpCiAoMyByb3dzKQogCkBAIC04MTIsMTAgKzgxMiwxMCBAQCBTRUxFQ1QgY291 bnQoKikgRlJPTSByYWRpeF90ZXh0X3RibCBXSEVSRSB0IF5ACSAnV29ydGgnOwogCiBFWFBMQUlO IChDT1NUUyBPRkYpCiBTRUxFQ1QgY291bnQoKikgRlJPTSByYWRpeF90ZXh0X3RibCBXSEVSRSBz dGFydHNfd2l0aCh0LCAnV29ydGgnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgQWdncmVnYXRlCi0gICAtPiAgSW5k ZXggT25seSBTY2FuIHVzaW5nIHNwX3JhZGl4X2luZCBvbiByYWRpeF90ZXh0X3RibAorICAgLT4g IEluZGV4IFNjYW4gdXNpbmcgc3BfcmFkaXhfaW5kIG9uIHJhZGl4X3RleHRfdGJsCiAgICAgICAg ICBJbmRleCBDb25kOiAodCBeQCAnV29ydGgnOjp0ZXh0KQogICAgICAgICAgRmlsdGVyOiBzdGFy dHNfd2l0aCh0LCAnV29ydGgnOjp0ZXh0KQogKDQgcm93cykKZGlmZiAtLWdpdCBhL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKaW5kZXggZDNhYjI3NjA3Li5jYmZjZGUzMDMgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CkBAIC0yOTcxLDYgKzI5NzEsOCBAQCBTb3J0U3VwcG9ydERhdGEKIFNvcnRUdXBsZQogU29ydFR1 cGxlQ29tcGFyYXRvcgogU29ydGVkUG9pbnQKK1NwR2lzdEJhdGNoRGF0YQorU3BHaXN0QmF0Y2hJ dGVtCiBTcEdpc3RCdWlsZFN0YXRlCiBTcEdpc3RDYWNoZQogU3BHaXN0RGVhZFR1cGxlCkBAIC00 MzQ1LDcgKzQzNDcsNiBAQCBzdGFuZGFyZF9xcF9leHRyYQogc3RlbW1lcl9tb2R1bGUKIHN0bXRD YWNoZUVudHJ5CiBzdG9yZUluZm8KLXN0b3JlUmVzX2Z1bmMKIHN0cmVhbV9zdG9wX2NhbGxiYWNr CiBzdHJpbmcKIHN1YnN0aXR1dGVfYWN0dWFsX3BhcmFtZXRlcnNfY29udGV4dAotLSAKMi41My4w Cgo= --0000000000004ffa5f0654ddc4ef Content-Type: application/octet-stream; name="v28-0007-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Disposition: attachment; filename="v28-0007-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqpot0fe5 RnJvbSBlNDA5NTI2YTAwN2RmZjY2M2I2NWY2ZGVlZWVlYzA5MTkwZGJiNmYzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MjI6MDYgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyOCAwNy8xMV0g aGVhcGFtOiBPcHRpbWl6ZSBwaW4gdHJhbnNmZXJzIGR1cmluZyBpbmRleCBzY2Fucy4KCkFkZCBh biB4c19sYXN0aW5ibG9jayBmbGFnIHRvIEluZGV4U2NhbkhlYXBEYXRhLCB0byB0cmFjayB3aGV0 aGVyIHRoZQpjdXJyZW50IGl0ZW0ncyBoZWFwIGJsb2NrIGRpZmZlcnMgZnJvbSB0aGUgbmV4dCBp dGVtJ3MgaGVhcCBibG9jawooIm5leHQiIGluIHRlcm1zIG9mIHRoZSBjdXJyZW50IHNjYW4gZGly ZWN0aW9uKS4gIFdoZW4gdGhlc2UgYWRqYWNlbnQKYmxvY2tzIGRpZmZlciwgaGVhcGFtX2luZGV4 X2hlYXBfZmV0Y2ggd2lsbCB0cmFuc2ZlciBpdHMgYnVmZmVyIHBpbiB0bwppdHMgdGFibGUgc2xv dCBpbnN0ZWFkIG9mIGluY3JlbWVudGluZyB0aGUgcGluIGNvdW50LiAgVGhpcyBhdm9pZHMgYW4K aW1tZWRpYXRlIEluY3JCdWZmZXJSZWZDb3VudCBjYWxsLiAgSXQgYWxzbyBhdm9pZHMgYSBSZWxl YXNlQnVmZmVyIGNhbGwKbGF0ZXIgb24sIGR1cmluZyB0aGUgbmV4dCBjYWxsIHRvIGhlYXBhbV9p bmRleF9oZWFwX2ZldGNoICh3aGVuIHRoZSBzY2FuCmhhcyB0byByZXR1cm4gdGhlIGFmb3JlbWVu dGlvbmVkICJuZXh0IiBpdGVtKS4KCkFsc28gYWRkIGFuIGV4cGxpY2l0IEV4ZWNDbGVhclR1cGxl IHRvIHRoZSBibG9jay1zd2l0Y2ggcGF0aCBpbgpoZWFwYW1faW5kZXhfaGVhcF9mZXRjaCB0byBy ZWxlYXNlIHRoZSBwaW4gb24gdGhlIHNsb3QgKHdoaWNoIGlzIG9mdGVuCnRoZSBwaW4gdHJhbnNm ZXJyZWQgdG8gdGhlIHNsb3QgZHVyaW5nIHRoZSBwcmV2aW91cyBjYWxsKS4gIFRoaXMgZml4ZXMg YQpwZXJmb3JtYW5jZSBwcm9ibGVtIHdoZXJlIEdldFByaXZhdGVSZWZDb3VudEVudHJ5U2xvdyBp cyBjYWxsZWQgbW9yZQpvZnRlbiB0aGFuIG9uZSB3b3VsZCBob3BlLiAgVGhlIHVuZGVybHlpbmcg aXNzdWUgaGFzIGJlZW4gdGllZCB0byB0aGUKcGluIGluIHRoZSBzbG90IGJlaW5nIGhlbGQsIGV2 ZW4gaWYgd2UgZGVjaWRlIHRvIHJlbGVhc2UgdGhlIGJ1ZmZlciBhbmQKbW92ZSBvbjogRXhlY1N0 b3JlQnVmZmVySGVhcFR1cGxlIHdpbGwgZmlyc3QgZmFpbCB0byBoaXQgdGhlCmJhY2tlbmQtbG9j YWwgY2FjaGUgZm9yIHRoZSByZWxlYXNlIG9mIHRoZSBvbGQgcGluIChiZWNhdXNlIHdlIGp1c3QK cGlubmVkIGFuZCBsb2NrZWQgdGhlIG5ldyBidWZmZXIpLCBjYXVzaW5nIGEgY2FjaGUgbWlzcy4K CkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpTdWdnZXN0ZWQtYnk6IEFuZHJl cyBGcmV1bmQgPGFuZHJlc0BhbmFyYXplbC5kZT4KUmV2aWV3ZWQtYnk6IEFuZHJlcyBGcmV1bmQg PGFuZHJlc0BhbmFyYXplbC5kZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgy LVd6PUQ0THJ1OUJrdnFhUm5GUlBEYVpiZlRPZFdjeHcxM3p5RzZHVkZUdHpfdndAbWFpbC5nbWFp bC5jb20KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgICAgfCAg MyArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgfCA3MyArKysr KysrKysrKysrKysrKysrKystCiAyIGZpbGVzIGNoYW5nZWQsIDc1IGluc2VydGlvbnMoKyksIDEg ZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9z cmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggNTM2NGNlMjdiLi43MWI2NDIwYzkgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvaGVhcGFtLmgKQEAgLTEzMiw2ICsxMzIsOSBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNj YW5IZWFwRGF0YQogCiAJYm9vbAkJeHNfcmVhZG9ubHk7CS8qIHNjYW4gaXMgcmVhZC1vbmx5PyAq LwogCisJLyogUGxhaW4gaW5kZXggc2NhbiB4c19sYXN0aW5ibG9jayBvcHRpbWl6YXRpb24gKi8K Kwlib29sCQl4c19sYXN0aW5ibG9jazsgLyogbGFzdCBUSUQgb24gdGhpcyBibG9jayBpbiBjdXJy ZW50IGJhdGNoPyAqLworCiAJdWludDE2CQl4c19ibGtzd2l0Y2hfY291bnQ7IC8qIG51bWJlciBv ZiBoZWFwIGJsb2NrcyBmZXRjaGVkICovCiAKIAkvKiBQZXItdHVwbGUgY29udGV4dCBmb3IgcGFk ZGluZyAibmFtZSIgY29sdW1ucyBkdXJpbmcgaW5kZXgtb25seSBzY2FucyAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCmluZGV4IDVmMDQwNDFkZi4uZTliMWVh ODUxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2Fu LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCkBAIC0x NTQsNiArMTU0LDkgQEAgaGVhcGFtX2luZGV4X3NjYW5fYmVnaW4oSW5kZXhTY2FuRGVzYyBzY2Fu LCB1aW50MzIgZmxhZ3MpCiAJLyogUmVtZW1iZXIgaWYgc2NhbiBpcyByZWFkLW9ubHkgKi8KIAlo c2Nhbi0+eHNfcmVhZG9ubHkgPSAoZmxhZ3MgJiBTT19ISU5UX1JFTF9SRUFEX09OTFkpICE9IDA7 CiAKKwkvKiB4c19sYXN0aW5ibG9jayBvcHRpbWl6YXRpb24gc3RhdGUgKi8KKwlBc3NlcnQoIWhz Y2FuLT54c19sYXN0aW5ibG9jayk7CisKIAkvKiBSZXNvbHZlIHdoaWNoIHhzX2dldG5leHRfc2xv dCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgZm9yIHRoaXMgc2NhbiAqLwogCWlmIChzY2FuLT5pbmRl eFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKQogCXsKQEAgLTc4OCw2ICs3 OTEsMTUgQEAgaGVhcGFtX2luZGV4X2hlYXBfZmV0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRl eFNjYW5IZWFwRGF0YSAqaHNjYW4sCiAJCSAqLwogCQloc2Nhbi0+eHNfYmxrc3dpdGNoX2NvdW50 Kys7CiAKKwkJLyoKKwkJICogRHJvcCB0aGUgeHNfYmxrIHBpbiBpbmRlcGVuZGVudGx5IGhlbGQg b24gYnkgc2xvdCAoaWYgYW55KSBub3csCisJCSAqIGJlZm9yZSBjYWxsaW5nIFJlbGVhc2VCdWZm ZXIuICBUaGlzIGF2b2lkcyBleHBlbnNpdmUgY2FsbHMgdG8KKwkJICogR2V0UHJpdmF0ZVJlZkNv dW50RW50cnlTbG93IGNhdXNlZCBieSBFeGVjU3RvcmVCdWZmZXJIZWFwVHVwbGUKKwkJICogZmFp bGluZyB0byBoaXQgdGhlIGJhY2tlbmQncyBjYWNoZSBmb3IgdGhlIHJlbGVhc2Ugb2YgdGhlIG9s ZCBwaW4uCisJCSAqLworCQlpZiAoIWluZGV4X29ubHkpCisJCQlFeGVjQ2xlYXJUdXBsZShzbG90 KTsKKwogCQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCiAJCQlSZWxlYXNlQnVm ZmVyKGhzY2FuLT54c19jYnVmKTsKIApAQCAtODI2LDcgKzgzOCwzNiBAQCBoZWFwYW1faW5kZXhf aGVhcF9mZXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkhlYXBEYXRhICpoc2NhbiwK IAkJCSpoZWFwX2NvbnRpbnVlID0gIXNjYW4tPk1WQ0NTY2FuOwogCiAJCQlzbG90LT50dHNfdGFi bGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbCk7Ci0JCQlFeGVjU3RvcmVCdWZmZXJIZWFwVHVw bGUoaGVhcFR1cGxlLCBzbG90LCBoc2Nhbi0+eHNfY2J1Zik7CisKKwkJCS8qCisJCQkgKiBJZiB4 c19sYXN0aW5ibG9jayBpbmRpY2F0ZXMgdGhhdCBgdGlkYCBpcyB0aGUgbGFzdCBUSUQgb24gdGhl CisJCQkgKiBjdXJyZW50IGhlYXAgYmxvY2ssIHRyYW5zZmVyIG91ciBidWZmZXIgcGluIHRvIHRo ZSBzbG90IHJhdGhlcgorCQkJICogdGhhbiBoYXZpbmcgdGhlIHNsb3QgaW5jcmVtZW50IHRoZSBw aW4gY291bnQuICBUaGlzIHNhdmVzIGEKKwkJCSAqIHBhaXIgb2YgSW5jckJ1ZmZlclJlZkNvdW50 IGFuZCBSZWxlYXNlQnVmZmVyIGNhbGxzLCBzaW5jZSB0aGUKKwkJCSAqIG5leHQgY2FsbCBoZXJl IHdvdWxkIGp1c3QgcmVsZWFzZSB0aGUgc2FtZSBwaW4gb24geHNfY2J1ZgorCQkJICogYW55d2F5 LiAoQWN0dWFsbHksIHRoaXMgaXMgb25seSB0cnVlIGlmIHlvdSBhc3N1bWUgdGhhdCB0aGUKKwkJ CSAqIHNjYW4gd2lsbCBjb250aW51ZSBpbiB0aGUgY3VycmVudCBkaXJlY3Rpb24sIGJ1dCBpdCBn ZW5lcmFsbHkKKwkJCSAqIGRvZXMuICBBbiBpbmNvcnJlY3QgcHJlZGljdGlvbiBjb3N0cyB1cyBs aXR0bGUuKQorCQkJICoKKwkJCSAqIFdlIGNhbiBvbmx5IHNhZmVseSBkbyB0aGlzIHdoZW4gaGVh cF9jb250aW51ZSBpcyBmYWxzZSwgc2luY2UKKwkJCSAqIG90aGVyd2lzZSB0aGUgY2FsbGVyIHdp bGwgbmVlZCB4c19jYnVmIHRvIHJlbWFpbiB2YWxpZCBmb3IgdGhlCisJCQkgKiBuZXh0IGNhbGwu CisJCQkgKi8KKwkJCWlmIChoc2Nhbi0+eHNfbGFzdGluYmxvY2sgJiYgISpoZWFwX2NvbnRpbnVl KQorCQkJeworCQkJCUV4ZWNTdG9yZVBpbm5lZEJ1ZmZlckhlYXBUdXBsZShoZWFwVHVwbGUsIHNs b3QsIGhzY2FuLT54c19jYnVmKTsKKwkJCQloc2Nhbi0+eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7 CisJCQkJaHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9ja051bWJlcjsKKworCQkJCS8qCisJCQkJ ICogTm90ZTogdGhlIHBpbiBub3cgb3duZWQgYnkgdGhlIHNsb3QgaXMgZXhwZWN0ZWQgdG8gYmUK KwkJCQkgKiByZWxlYXNlZCBvbiB0aGUgbmV4dCBjYWxsIGhlcmUsIHZpYSBhbiBleHBsaWNpdAor CQkJCSAqIEV4ZWNDbGVhclR1cGxlLiAgVGhpcyBhdm9pZHMgY2h1cm4gaW4gdGhlIGJhY2tlbmQn cyBwcml2YXRlCisJCQkJICogcmVmY291bnQgY2FjaGUuCisJCQkJICovCisJCQl9CisJCQllbHNl CisJCQkJRXhlY1N0b3JlQnVmZmVySGVhcFR1cGxlKGhlYXBUdXBsZSwgc2xvdCwgaHNjYW4tPnhz X2NidWYpOwogCQl9CiAJCWVsc2UKIAkJewpAQCAtOTc1LDEwICsxMDE2LDQwIEBAIGhlYXBhbV9p bmRleF9yZXR1cm5fc2NhbnBvc190aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5IZWFw RGF0YSAqaHNjYW4sCiAKIAlpZiAoYWxsX3Zpc2libGUgPT0gTlVMTCkKIAl7CisJCWludAkJCW5l eHRJdGVtOworCQlib29sCQloYXNOZXh0OworCiAJCS8qCiAJCSAqIFBsYWluIGluZGV4IHNjYW4u CisJCSAqCisJCSAqIFNldCB4c19sYXN0aW5ibG9jayB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBu ZXh0IGl0ZW0gaW4gdGhlIGN1cnJlbnQKKwkJICogc2NhbiBkaXJlY3Rpb24gaXMgb24gYSBkaWZm ZXJlbnQgaGVhcCBibG9jayB0byB0aGUgY3VycmVudCBpdGVtLgorCQkgKiBoZWFwYW1faW5kZXhf aGVhcF9mZXRjaCB3aWxsIGFwcGx5IHRoaXMgaW5mb3JtYXRpb24gYWJvdXQKKwkJICogc2NhblBv cy5pdGVtJ3MgdGFibGVUSUQgYmVmb3JlIHdlIHJldHVybiB0byB0aGUgY29yZSBleGVjdXRvci4K KwkJICoKKwkJICogTm90ZTogV2UgZG9uJ3Qgc2V0IHRoaXMgZm9yIGluZGV4LW9ubHkgc2NhbnMg YmVjYXVzZSBpdCBkb2Vzbid0IHNlZW0KKwkJICogd29ydGggdGhlIHRyb3VibGUgb2YgcmVhc29u aW5nIGFib3V0IGFsbC12aXNpYmxlIGl0ZW1zLgorCQkgKgorCQkgKiBOb3RlOiBXZSBkZWxpYmVy YXRlbHkgZG9uJ3QgY29uc2lkZXIgdGhlIGJhdGNoIGFmdGVyIHNjYW5CYXRjaCwKKwkJICogYmVj YXVzZSBkb2luZyBzbyB3b3VsZCBhZGQgY29tcGxleGl0eSBmb3IgbGl0dGxlIGJlbmVmaXQuICBJ dCdzCisJCSAqIG9rYXkgaWYgeHNfbGFzdGluYmxvY2sgaXMgc3B1cmlvdXNseSBzZXQgdG8gZmFs c2UuCiAJCSAqLwogCQlBc3NlcnQoIXNjYW4tPnhzX3dhbnRfaXR1cCk7CisJCWlmIChTY2FuRGly ZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCXsKKwkJCW5leHRJdGVtID0gc2NhblBvcy0+ aXRlbSArIDE7CisJCQloYXNOZXh0ID0gKG5leHRJdGVtIDw9IHNjYW5CYXRjaC0+bGFzdEl0ZW0p OworCQl9CisJCWVsc2UKKwkJeworCQkJbmV4dEl0ZW0gPSBzY2FuUG9zLT5pdGVtIC0gMTsKKwkJ CWhhc05leHQgPSAobmV4dEl0ZW0gPj0gc2NhbkJhdGNoLT5maXJzdEl0ZW0pOworCQl9CisKKwkJ aHNjYW4tPnhzX2xhc3RpbmJsb2NrID0gaGFzTmV4dCAmJgorCQkJSXRlbVBvaW50ZXJHZXRCbG9j a051bWJlcigmc2NhbkJhdGNoLT5pdGVtc1tuZXh0SXRlbV0udGFibGVUaWQpICE9CisJCQlJdGVt UG9pbnRlckdldEJsb2NrTnVtYmVyKCZzY2FuLT54c19oZWFwdGlkKTsKKwogCQlyZXR1cm4gJnNj YW4tPnhzX2hlYXB0aWQ7CiAJfQogCi0tIAoyLjUzLjAKCg== --0000000000004ffa5f0654ddc4ef Content-Type: application/octet-stream; name="v28-0004-Adopt-amgetbatch-interface-in-hash-index-AM.patch" Content-Disposition: attachment; filename="v28-0004-Adopt-amgetbatch-interface-in-hash-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqpot0fr8 RnJvbSAyZTc0YWNjZmZlZDMwMGE4ZjU0NGNhNjVjNTE1NDdhNWYwMzcyNjQxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYyOCAwNC8xMV0g QWRvcHQgYW1nZXRiYXRjaCBpbnRlcmZhY2UgaW4gaGFzaCBpbmRleCBBTS4KClJlcGxhY2UgaGFz aGdldHR1cGxlIHdpdGggaGFzaGdldGJhdGNoLCBhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0 aGUKbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGFkZGVkIGJ5IGNvbW1pdCBGSVhNRS4gIFBsYWlu IGluZGV4IHNjYW5zIG9mCmhhc2ggaW5kZXhlcyBub3cgcmV0dXJuIG1hdGNoaW5nIGl0ZW1zIGlu IGJhdGNoZXMgY29uc2lzdGluZyBvZiBhbGwgb2YKdGhlIG1hdGNoZXMgZnJvbSBhIGdpdmVuIGJ1 Y2tldCBwYWdlIG9yIG92ZXJmbG93IHBhZ2UuICBUaGlzIGdpdmVzIHRoZQp0YWJsZSBBTSB0aGUg YWJpbGl0eSB0byBwZXJmb3JtIG9wdGltaXphdGlvbnMgbGlrZSBpbmRleCBwcmVmZXRjaGluZwpk dXJpbmcgaGFzaCBpbmRleCBzY2Fucy4KClRoZSBhbWdldGJhdGNoIGludGVyZmFjZSByZXF1aXJl cyB0aGF0IGluZGV4IEFNcyB0YWtlIHRoZSBzYW1lCnN0YW5kYXJkaXplZCBhcHByb2FjaCB0byBw aW4gbWFuYWdlbWVudCBmb3IgcGlucyB0aGF0IGFyZSB1c2VkIHRvCnByZXZlbnQgdW5zYWZlIGNv bmN1cnJlbnQgVElEIHJlY3ljbGluZyBieSBWQUNVVU0gKHRoYXQgd2F5IHByZWZldGNoaW5nCmNh biBob2xkIG9wZW4gbXVsdGlwbGUgYmF0Y2hlcyB3aXRob3V0IGl0IGFmZmVjdGluZyB0aGUgcmVh ZCBzdHJlYW0pLgpOb3RlLCBob3dldmVyLCB0aGF0IGhhc2ggc3RpbGwgaG9sZHMgb24gdG8gcGlu cyBuZWVkZWQgZm9yIGl0cyBvd24KaW50ZXJuYWwgcHVycG9zZXMgKGUuZy4sIGl0J2xsIHN0aWxs IGhvbGQgb250byBhIHBpbiBkdXJpbmcgYSBidWNrZXQKc3BsaXQpLgoKaGFzaGtpbGxpdGVtc2Jh dGNoICh0aGUgaGFzaCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmV3IGFta2lsbGl0ZW1zYmF0Y2gK aW50ZXJmYWNlKSBwZXJmb3JtcyBMUF9ERUFEIG1hcmtpbmcgb2YgZGVhZCBpbmRleCBlbnRyaWVz LCB3aGlsZQpmb2xsb3dpbmcgc2xpZ2h0bHkgZGlmZmVyZW50IHJ1bGVzIHRvIHRoZSBvbGQgYXBw cm9hY2guICBJdCByZWxpZXMgb24KY29tcGFyaW5nIHRoZSBiYXRjaCdzIHNhdmVkIExTTiBhZ2Fp bnN0IHRoZSBjdXJyZW50IHBhZ2UgTFNOIHRvIGRldGVjdApjb25jdXJyZW50IHBhZ2UgbW9kaWZp Y2F0aW9ucywgd2hpY2ggaW4gdHVybiByZXF1aXJlcyBmYWtlIExTTiBzdXBwb3J0CmZvciB1bmxv Z2dlZCByZWxhdGlvbnMuICBQcmVwYXJhdG9yeSBjb21taXQgZTU4MzZmN2IgYWRkZWQgdGhhdCBz dXBwb3J0CnRvIHRoZSBoYXNoIGluZGV4IEFNLgoKQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBn QGJvd3QuaWU+ClJldmlld2VkLWJ5OiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KUmV2 aWV3ZWQtYnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFyYXplbC5kZT4KRGlzY3Vzc2lvbjog aHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6bVlxaGFjQkgxNjFwZUFXYjVlRj1KYTdDRkFRKzBq U0VNcT1xbmZMVlRPT2dAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGFz aC5oICAgICAgICAgICAgfCAgODEgKystLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvUkVB RE1FICAgICAgIHwgIDMxICstLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jICAgICAg IHwgMjEwICsrKysrKysrKystLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxv Zy5jICB8ICAgNCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYyAgIHwgIDIx ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMgfCAzNDUgKysrKysrKysr KysrLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jICAg fCAxMjkgKy0tLS0tLS0tLQogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCAgICAgICAgICAgIHwg IDMwICsrLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgIHwgICAzICstCiA5 IGZpbGVzIGNoYW5nZWQsIDM0NCBpbnNlcnRpb25zKCspLCA1MTAgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9o YXNoLmgKaW5kZXggYTg3MDJmMGU1Li5mZTYwNDg0MjIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9oYXNoLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaApAQCAtMTgsNiAr MTgsNyBAQAogI2RlZmluZSBIQVNIX0gKIAogI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2lu Y2x1ZGUgImFjY2Vzcy9pbmRleGJhdGNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKICNp bmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYW1fZC5oIgpAQCAt MTAwLDU3ICsxMDEsMTggQEAgdHlwZWRlZiBIYXNoUGFnZU9wYXF1ZURhdGEgKkhhc2hQYWdlT3Bh cXVlOwogICovCiAjZGVmaW5lIEhBU0hPX1BBR0VfSUQJCTB4RkY4MAogCi10eXBlZGVmIHN0cnVj dCBIYXNoU2NhblBvc0l0ZW0JLyogd2hhdCB3ZSByZW1lbWJlciBhYm91dCBlYWNoIG1hdGNoICov CisvKiBQZXItYmF0Y2ggZGF0YSBwcml2YXRlIHRvIHRoZSBoYXNoIGluZGV4IEFNICovCit0eXBl ZGVmIHN0cnVjdCBIYXNoQmF0Y2hEYXRhCiB7Ci0JSXRlbVBvaW50ZXJEYXRhIGhlYXBUaWQ7CS8q IFRJRCBvZiByZWZlcmVuY2VkIGhlYXAgaXRlbSAqLwotCU9mZnNldE51bWJlciBpbmRleE9mZnNl dDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBwYWdlICovCi19IEhhc2hTY2FuUG9z SXRlbTsKKwlCdWZmZXIJCWJ1ZjsJCQkvKiBpbmRleCBwYWdlJ3MgYnVmZmVyIHBpbiAqLworCUJs b2NrTnVtYmVyIGN1cnJQYWdlOwkJLyogaW5kZXggcGFnZSdzIGJsb2NrIG51bWJlciAqLworCUJs b2NrTnVtYmVyIHByZXZQYWdlOwkJLyogaW5kZXggcGFnZSdzIGxlZnQgc2libGluZyAqLworCUJs b2NrTnVtYmVyIG5leHRQYWdlOwkJLyogaW5kZXggcGFnZSdzIHJpZ2h0IHNpYmxpbmcgKi8KK30g SGFzaEJhdGNoRGF0YTsKIAotdHlwZWRlZiBzdHJ1Y3QgSGFzaFNjYW5Qb3NEYXRhCi17Ci0JQnVm ZmVyCQlidWY7CQkJLyogaWYgdmFsaWQsIHRoZSBidWZmZXIgaXMgcGlubmVkICovCi0JQmxvY2tO dW1iZXIgY3VyclBhZ2U7CQkvKiBjdXJyZW50IGhhc2ggaW5kZXggcGFnZSAqLwotCUJsb2NrTnVt YmVyIG5leHRQYWdlOwkJLyogbmV4dCBvdmVyZmxvdyBwYWdlICovCi0JQmxvY2tOdW1iZXIgcHJl dlBhZ2U7CQkvKiBwcmV2IG92ZXJmbG93IG9yIGJ1Y2tldCBwYWdlICovCi0KLQkvKgotCSAqIFRo ZSBpdGVtcyBhcnJheSBpcyBhbHdheXMgb3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3Jl YXNpbmcKLQkgKiBpbmRleG9mZnNldCkuICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBj b252ZW5pZW50IHRvIGZpbGwgdGhlCi0JICogYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3Rh cnQgYXQgdGhlIGxhc3Qgc2xvdCBhbmQgZmlsbCBkb3dud2FyZHMuCi0JICogSGVuY2Ugd2UgbmVl ZCBib3RoIGEgZmlyc3QtdmFsaWQtZW50cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeSBjb3VudGVy LgotCSAqIGl0ZW1JbmRleCBpcyBhIGN1cnNvciBzaG93aW5nIHdoaWNoIGVudHJ5IHdhcyBsYXN0 IHJldHVybmVkIHRvIGNhbGxlci4KLQkgKi8KLQlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2 YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCi0JaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlk IGluZGV4IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlpdGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4 IGluIGl0ZW1zW10gKi8KLQotCUhhc2hTY2FuUG9zSXRlbSBpdGVtc1tNYXhJbmRleFR1cGxlc1Bl clBhZ2VdOwkvKiBNVVNUIEJFIExBU1QgKi8KLX0gSGFzaFNjYW5Qb3NEYXRhOwotCi0jZGVmaW5l IEhhc2hTY2FuUG9zSXNQaW5uZWQoc2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tO dW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlk KChzY2FucG9zKS5idWYpKSwgXAotCUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikgXAotKQot Ci0jZGVmaW5lIEhhc2hTY2FuUG9zSXNWYWxpZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNy byhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZl cklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9z KS5jdXJyUGFnZSkgXAotKQotCi0jZGVmaW5lIEhhc2hTY2FuUG9zSW52YWxpZGF0ZShzY2FucG9z KSBcCi0JZG8geyBcCi0JCShzY2FucG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JCShzY2Fu cG9zKS5jdXJyUGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAotCQkoc2NhbnBvcykubmV4dFBh Z2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQkJKHNjYW5wb3MpLnByZXZQYWdlID0gSW52YWxp ZEJsb2NrTnVtYmVyOyBcCi0JCShzY2FucG9zKS5maXJzdEl0ZW0gPSAwOyBcCi0JCShzY2FucG9z KS5sYXN0SXRlbSA9IDA7IFwKLQkJKHNjYW5wb3MpLml0ZW1JbmRleCA9IDA7IFwKLQl9IHdoaWxl ICgwKQorLyogQWNjZXNzIHRoZSBoYXNoLXByaXZhdGUgcGVyLWJhdGNoIGRhdGEgZnJvbSBhbiBJ bmRleFNjYW5CYXRjaCBwb2ludGVyICovCisjZGVmaW5lIEhhc2hCYXRjaEdldERhdGEoc2Nhbiwg YmF0Y2gpIFwKKwlpbmRleF9zY2FuX2JhdGNoX2luZGV4X29wYXF1ZV9zdGF0aWMoc2NhbiwgYmF0 Y2gsIEhhc2hCYXRjaERhdGEpCiAKIC8qCiAgKglIYXNoU2Nhbk9wYXF1ZURhdGEgaXMgcHJpdmF0 ZSBzdGF0ZSBmb3IgYSBoYXNoIGluZGV4IHNjYW4uCkBAIC0xNzgsMTUgKzE0MCw2IEBAIHR5cGVk ZWYgc3RydWN0IEhhc2hTY2FuT3BhcXVlRGF0YQogCSAqIHJlZmVycmVkIG9ubHkgd2hlbiBoYXNo c29fYnVjX3BvcHVsYXRlZCBpcyB0cnVlLgogCSAqLwogCWJvb2wJCWhhc2hzb19idWNfc3BsaXQ7 Ci0JLyogaW5mbyBhYm91dCBraWxsZWQgaXRlbXMgaWYgYW55IChraWxsZWRJdGVtcyBpcyBOVUxM IGlmIG5ldmVyIHVzZWQpICovCi0JaW50CQkgICAqa2lsbGVkSXRlbXM7CS8qIGN1cnJQb3MuaXRl bXMgaW5kZXhlcyBvZiBraWxsZWQgaXRlbXMgKi8KLQlpbnQJCQludW1LaWxsZWQ7CQkvKiBudW1i ZXIgb2YgY3VycmVudGx5IHN0b3JlZCBpdGVtcyAqLwotCi0JLyoKLQkgKiBJZGVudGlmeSBhbGwg dGhlIG1hdGNoaW5nIGl0ZW1zIG9uIGEgcGFnZSBhbmQgc2F2ZSB0aGVtIGluCi0JICogSGFzaFNj YW5Qb3NEYXRhCi0JICovCi0JSGFzaFNjYW5Qb3NEYXRhIGN1cnJQb3M7CS8qIGN1cnJlbnQgcG9z aXRpb24gZGF0YSAqLwogfSBIYXNoU2Nhbk9wYXF1ZURhdGE7CiAKIHR5cGVkZWYgSGFzaFNjYW5P cGFxdWVEYXRhICpIYXNoU2Nhbk9wYXF1ZTsKQEAgLTM2OCwxMSArMzIxLDE1IEBAIGV4dGVybiBi b29sIGhhc2hpbnNlcnQoUmVsYXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGws CiAJCQkJCSAgIEluZGV4VW5pcXVlQ2hlY2sgY2hlY2tVbmlxdWUsCiAJCQkJCSAgIGJvb2wgaW5k ZXhVbmNoYW5nZWQsCiAJCQkJCSAgIHN0cnVjdCBJbmRleEluZm8gKmluZGV4SW5mbyk7Ci1leHRl cm4gYm9vbCBoYXNoZ2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggaGFzaGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2Nh biwKKwkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwKKwkJCQkJCQkJICAgU2Nh bkRpcmVjdGlvbiBkaXIpOwogZXh0ZXJuIGludDY0IGhhc2hnZXRiaXRtYXAoSW5kZXhTY2FuRGVz YyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gSW5kZXhTY2FuRGVzYyBoYXNoYmVnaW5z Y2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVybiB2b2lk IGhhc2hyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2Nh bmtleXMsCiAJCQkJCSAgIFNjYW5LZXkgb3JkZXJieXMsIGludCBub3JkZXJieXMpOworZXh0ZXJu IHZvaWQgaGFzaHVuZ3VhcmRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNo IGJhdGNoKTsKK2V4dGVybiB2b2lkIGhhc2hraWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNjIHNj YW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIGV4dGVybiB2b2lkIGhhc2hlbmRzY2FuKEluZGV4 U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpoYXNoYnVsa2Rl bGV0ZShJbmRleFZhY3V1bUluZm8gKmluZm8sCiAJCQkJCQkJCQkJCSBJbmRleEJ1bGtEZWxldGVS ZXN1bHQgKnN0YXRzLApAQCAtNDQ1LDggKzQwMiw5IEBAIGV4dGVybiB2b2lkIF9oYXNoX2Zpbmlz aF9zcGxpdChSZWxhdGlvbiByZWwsIEJ1ZmZlciBtZXRhYnVmLCBCdWZmZXIgb2J1ZiwKIAkJCQkJ CQkgICB1aW50MzIgbG93bWFzayk7CiAKIC8qIGhhc2hzZWFyY2guYyAqLwotZXh0ZXJuIGJvb2wg X2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKLWV4dGVy biBib29sIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp OworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIF9oYXNoX25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkJIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gpOwor ZXh0ZXJuIEluZGV4U2NhbkJhdGNoIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIpOwogCiAvKiBoYXNoc29ydC5jICovCiB0eXBlZGVmIHN0cnVjdCBIU3Bv b2wgSFNwb29sOwkvKiBvcGFxdWUgc3RydWN0IGluIGhhc2hzb3J0LmMgKi8KQEAgLTQ3Niw3ICs0 MzQsNiBAQCBleHRlcm4gQmxvY2tOdW1iZXIgX2hhc2hfZ2V0X29sZGJsb2NrX2Zyb21fbmV3YnVj a2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG5ld19idQogZXh0ZXJuIEJsb2NrTnVtYmVyIF9oYXNo X2dldF9uZXdibG9ja19mcm9tX29sZGJ1Y2tldChSZWxhdGlvbiByZWwsIEJ1Y2tldCBvbGRfYnVj a2V0KTsKIGV4dGVybiBCdWNrZXQgX2hhc2hfZ2V0X25ld2J1Y2tldF9mcm9tX29sZGJ1Y2tldChS ZWxhdGlvbiByZWwsIEJ1Y2tldCBvbGRfYnVja2V0LAogCQkJCQkJCQkJCQkJIHVpbnQzMiBsb3dt YXNrLCB1aW50MzIgbWF4YnVja2V0KTsKLWV4dGVybiB2b2lkIF9oYXNoX2tpbGxfaXRlbXMoSW5k ZXhTY2FuRGVzYyBzY2FuKTsKIAogLyogaGFzaC5jICovCiBleHRlcm4gdm9pZCBoYXNoYnVja2V0 Y2xlYW51cChSZWxhdGlvbiByZWwsIEJ1Y2tldCBjdXJfYnVja2V0LApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvUkVBRE1FIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvUkVB RE1FCmluZGV4IGZjOTAzMTExNy4uOTcyYmI2NjZiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9SRUFETUUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvUkVBRE1FCkBA IC0yNTUsMjggKzI1NSwyOSBAQCBUaGUgcmVhZGVyIGFsZ29yaXRobSBpczoKIAkJcmV0YWtlIHRo ZSBidWZmZXIgY29udGVudCBsb2NrIG9uIG5ldyBidWNrZXQKIAkJYXJyYW5nZSB0byBzY2FuIHRo ZSBvbGQgYnVja2V0IG5vcm1hbGx5IGFuZCB0aGUgbmV3IGJ1Y2tldCBmb3IKICAgICAgICAgIHR1 cGxlcyB3aGljaCBhcmUgbm90IG1vdmVkLWJ5LXNwbGl0Ci0tLSB0aGVuLCBwZXIgcmVhZCByZXF1 ZXN0OgorLS0gdGhlbiwgcGVyIGJhdGNoIChwYWdlKSByZXF1ZXN0OgogCXJlYWNxdWlyZSBjb250 ZW50IGxvY2sgb24gY3VycmVudCBwYWdlCiAJc3RlcCB0byBuZXh0IHBhZ2UgaWYgbmVjZXNzYXJ5 IChubyBjaGFpbmluZyBvZiBjb250ZW50IGxvY2tzLCBidXQga2VlcAogCXRoZSBwaW4gb24gdGhl IHByaW1hcnkgYnVja2V0IHRocm91Z2hvdXQgdGhlIHNjYW4pCi0Jc2F2ZSBhbGwgdGhlIG1hdGNo aW5nIHR1cGxlcyBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIGFuIGl0ZW1zIGFycmF5Ci0J cmVsZWFzZSBwaW4gYW5kIGNvbnRlbnQgbG9jayAoYnV0IGlmIGl0IGlzIHByaW1hcnkgYnVja2V0 IHBhZ2UgcmV0YWluCi0JaXRzIHBpbiB0aWxsIHRoZSBlbmQgb2YgdGhlIHNjYW4pCi0JZ2V0IHR1 cGxlIGZyb20gYW4gaXRlbSBhcnJheQorCXNhdmUgYWxsIHRoZSBtYXRjaGluZyB0dXBsZXMgZnJv bSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBhIGJhdGNoCisJcmVsZWFzZSBjb250ZW50IGxvY2sg b24gY3VycmVudCBwYWdlIHJldHVybiBiYXRjaCB0byB0YWJsZSBBTSAodGFibGUgQU0KKwl3aWxs IGRyb3AgYmF0Y2gncyBidWZmZXIgcGluLCB0aG91Z2ggcHJpbWFyeSBidWNrZXQgcGFnZSBwaW4g aXMga2VwdAorCXVudGlsIHRoZSBlbmQgb2YgdGhlIHNjYW4pCiAtLSBhdCBzY2FuIHNodXRkb3du OgotCXJlbGVhc2UgYWxsIHBpbnMgc3RpbGwgaGVsZAorCXJlbGVhc2Ugc2Nhbi1vd25lZCBwaW5z IChlLmcuLCBwcmltYXJ5IGJ1Y2tldCBwYWdlIHBpbikgYXMgbmVlZGVkCiAKIEhvbGRpbmcgdGhl IGJ1ZmZlciBwaW4gb24gdGhlIHByaW1hcnkgYnVja2V0IHBhZ2UgZm9yIHRoZSB3aG9sZSBzY2Fu IHByZXZlbnRzCi10aGUgcmVhZGVyJ3MgY3VycmVudC10dXBsZSBwb2ludGVyIGZyb20gYmVpbmcg aW52YWxpZGF0ZWQgYnkgc3BsaXRzIG9yCi1jb21wYWN0aW9ucy4gIChPZiBjb3Vyc2UsIG90aGVy IGJ1Y2tldHMgY2FuIHN0aWxsIGJlIHNwbGl0IG9yIGNvbXBhY3RlZC4pCit0aGUgYnVja2V0IGZy b20gYmVpbmcgcmVvcmdhbml6ZWQgYnkgc3BsaXRzIG9yIGNvbXBhY3Rpb25zIHdoaWxlIHRoZSBz Y2FuIGlzCitpbiBwcm9ncmVzcy4gIChPZiBjb3Vyc2UsIG90aGVyIGJ1Y2tldHMgY2FuIHN0aWxs IGJlIHNwbGl0IG9yIGNvbXBhY3RlZC4pCiAKLVRvIG1pbmltaXplIGxvY2svdW5sb2NrIHRyYWZm aWMsIGhhc2ggaW5kZXggc2NhbiBhbHdheXMgc2VhcmNoZXMgdGhlIGVudGlyZQotaGFzaCBwYWdl IHRvIGlkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgYXQgb25jZSwgY29weWluZyB0aGVp ciBoZWFwIHR1cGxlCi1JRHMgaW50byBiYWNrZW5kLWxvY2FsIHN0b3JhZ2UuIFRoZSBoZWFwIHR1 cGxlIElEcyBhcmUgdGhlbiBwcm9jZXNzZWQgd2hpbGUgbm90Ci1ob2xkaW5nIGFueSBwYWdlIGxv Y2sgd2l0aGluIHRoZSBpbmRleCB0aGVyZWJ5LCBhbGxvd2luZyBjb25jdXJyZW50IGluc2VydGlv bgotdG8gaGFwcGVuIG9uIHRoZSBzYW1lIGluZGV4IHBhZ2Ugd2l0aG91dCBhbnkgcmVxdWlyZW1l bnQgb2YgcmUtZmluZGluZyB0aGUKLWN1cnJlbnQgc2NhbiBwb3NpdGlvbiBmb3IgdGhlIHJlYWRl ci4gV2UgZG8gY29udGludWUgdG8gaG9sZCBhIHBpbiBvbiB0aGUKLWJ1Y2tldCBwYWdlLCB0byBw cm90ZWN0IGFnYWluc3QgY29uY3VycmVudCBkZWxldGlvbnMgYW5kIGJ1Y2tldCBzcGxpdC4KK1Rv IG1pbmltaXplIGxvY2svdW5sb2NrIHRyYWZmaWMsIGhhc2ggaW5kZXggc2NhbnMgYWx3YXlzIHNl YXJjaCB0aGUgZW50aXJlCitoYXNoIHBhZ2UgdG8gaWRlbnRpZnkgYWxsIHRoZSBtYXRjaGluZyBp dGVtcyBhdCBvbmNlLCByZXR1cm5pbmcgdGhlbSBpbgorYmF0Y2hlcyB0byB0aGUgdGFibGUgQU0u ICBUaGUgdGFibGUgQU0gcHJvY2Vzc2VzIGJhdGNoZXMgd2hpbGUgbm8gcGFnZSBsb2NrCitpcyBo ZWxkIHdpdGhpbiB0aGUgaW5kZXgsIGFsbG93aW5nIGNvbmN1cnJlbnQgaW5zZXJ0aW9uIHRvIGhh cHBlbiBvbiB0aGUKK3NhbWUgaW5kZXggcGFnZSB3aXRob3V0IGFueSByZXF1aXJlbWVudCBvZiBy ZS1maW5kaW5nIHRoZSBjdXJyZW50IHNjYW4KK3Bvc2l0aW9uIGZvciB0aGUgcmVhZGVyLiAgVGhl IHRhYmxlIEFNIGNvbnRyb2xzIHdoZW4gYmF0Y2ggYnVmZmVyIHBpbnMgYXJlCitkcm9wcGVkLiAg V2UgZG8gY29udGludWUgdG8gaG9sZCBhIHBpbiBvbiB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSwg dG8KK3Byb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IGJ1Y2tldCBzcGxpdHMuCiAKIFRvIGFsbG93 IGZvciBzY2FucyBkdXJpbmcgYSBidWNrZXQgc3BsaXQsIGlmIGF0IHRoZSBzdGFydCBvZiB0aGUg c2NhbiwgdGhlCiBidWNrZXQgaXMgbWFya2VkIGFzIGJ1Y2tldC1iZWluZy1wb3B1bGF0ZWQsIGl0 IHNjYW4gYWxsIHRoZSB0dXBsZXMgaW4gdGhhdApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4IDU0 MGYyYmNkNC4uNzZlMzE5M2Q5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCkBAIC0xMTQsMTAgKzEx NCwxMCBAQCBoYXNoaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1hZGp1c3RtZW1iZXJz ID0gaGFzaGFkanVzdG1lbWJlcnMsCiAJCS5hbWJlZ2luc2NhbiA9IGhhc2hiZWdpbnNjYW4sCiAJ CS5hbXJlc2NhbiA9IGhhc2hyZXNjYW4sCi0JCS5hbWdldHR1cGxlID0gaGFzaGdldHR1cGxlLAot CQkuYW1nZXRiYXRjaCA9IE5VTEwsCi0JCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCi0JCS5hbWtp bGxpdGVtc2JhdGNoID0gTlVMTCwKKwkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRj aCA9IGhhc2hnZXRiYXRjaCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gaGFzaHVuZ3VhcmRiYXRjaCwK KwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBoYXNoa2lsbGl0ZW1zYmF0Y2gsCiAJCS5hbWdldGJpdG1h cCA9IGhhc2hnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBoYXNoZW5kc2NhbiwKIAkJLmFtcG9z cmVzZXQgPSBOVUxMLApAQCAtMzAwLDUzICszMDAsMjggQEAgaGFzaGluc2VydChSZWxhdGlvbiBy ZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAogCiAvKgotICoJaGFzaGdldHR1cGxl KCkgLS0gR2V0IHRoZSBuZXh0IHR1cGxlIGluIHRoZSBzY2FuLgorICoJaGFzaGdldGJhdGNoKCkg LS0gR2V0IHRoZSBmaXJzdCBvciBuZXh0IGJhdGNoIG9mIHR1cGxlcyBpbiB0aGUgc2NhbgogICov Ci1ib29sCi1oYXNoZ2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cikKK0luZGV4U2NhbkJhdGNoCitoYXNoZ2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRl eFNjYW5CYXRjaCBwcmlvcmJhdGNoLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlIYXNoU2Nhbk9w YXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCWJvb2wJCXJlczsKIAog CS8qIEhhc2ggaW5kZXhlcyBhcmUgYWx3YXlzIGxvc3N5IHNpbmNlIHdlIHN0b3JlIG9ubHkgdGhl IGhhc2ggY29kZSAqLwotCXNjYW4tPnhzX3JlY2hlY2sgPSB0cnVlOworCUFzc2VydChzY2FuLT54 c19yZWNoZWNrKTsKIAotCS8qCi0JICogSWYgd2UndmUgYWxyZWFkeSBpbml0aWFsaXplZCB0aGlz IHNjYW4sIHdlIGNhbiBqdXN0IGFkdmFuY2UgaXQgaW4gdGhlCi0JICogYXBwcm9wcmlhdGUgZGly ZWN0aW9uLiAgSWYgd2UgaGF2ZW4ndCBkb25lIHNvIHlldCwgd2UgY2FsbCBhIHJvdXRpbmUgdG8K LQkgKiBnZXQgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNjYW4uCi0JICovCi0JaWYgKCFIYXNoU2Nh blBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQlyZXMgPSBfaGFzaF9maXJzdChzY2FuLCBkaXIp OwotCWVsc2UKKwlpZiAocHJpb3JiYXRjaCA9PSBOVUxMKQogCXsKLQkJLyoKLQkJICogQ2hlY2sg dG8gc2VlIGlmIHdlIHNob3VsZCBraWxsIHRoZSBwcmV2aW91c2x5LWZldGNoZWQgdHVwbGUuCi0J CSAqLwotCQlpZiAoc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSkKLQkJewotCQkJLyoKLQkJCSAqIFll cywgc28gcmVtZW1iZXIgaXQgZm9yIGxhdGVyLiAoV2UnbGwgZGVhbCB3aXRoIGFsbCBzdWNoIHR1 cGxlcwotCQkJICogYXQgb25jZSByaWdodCBhZnRlciBsZWF2aW5nIHRoZSBpbmRleCBwYWdlIG9y IGF0IGVuZCBvZiBzY2FuLikKLQkJCSAqIEluIGNhc2UgaWYgY2FsbGVyIHJldmVyc2VzIHRoZSBp bmRleHNjYW4gZGlyZWN0aW9uIGl0IGlzIHF1aXRlCi0JCQkgKiBwb3NzaWJsZSB0aGF0IHRoZSBz YW1lIGl0ZW0gbWlnaHQgZ2V0IGVudGVyZWQgbXVsdGlwbGUgdGltZXMuCi0JCQkgKiBCdXQsIHdl IGRvbid0IGRldGVjdCB0aGF0OyBpbnN0ZWFkLCB3ZSBqdXN0IGZvcmdldCBhbnkgZXhjZXNzCi0J CQkgKiBlbnRyaWVzLgotCQkJICovCi0JCQlpZiAoc28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCi0J CQkJc28tPmtpbGxlZEl0ZW1zID0gcGFsbG9jX2FycmF5KGludCwgTWF4SW5kZXhUdXBsZXNQZXJQ YWdlKTsKKwkJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAotCQkJaWYgKHNv LT5udW1LaWxsZWQgPCBNYXhJbmRleFR1cGxlc1BlclBhZ2UpCi0JCQkJc28tPmtpbGxlZEl0ZW1z W3NvLT5udW1LaWxsZWQrK10gPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7Ci0JCX0KKwkJX2hhc2hf ZHJvcHNjYW5idWYocmVsLCBzbyk7CiAKLQkJLyoKLQkJICogTm93IGNvbnRpbnVlIHRoZSBzY2Fu LgotCQkgKi8KLQkJcmVzID0gX2hhc2hfbmV4dChzY2FuLCBkaXIpOworCQkvKiBJbml0aWFsaXpl IHRoZSBzY2FuLCBhbmQgcmV0dXJuIGZpcnN0IGJhdGNoIG9mIG1hdGNoaW5nIGl0ZW1zICovCisJ CXJldHVybiBfaGFzaF9maXJzdChzY2FuLCBkaXIpOwogCX0KIAotCXJldHVybiByZXM7CisJLyog UmV0dXJuIGJhdGNoIHBvc2l0aW9uZWQgYWZ0ZXIgY2FsbGVyJ3MgYmF0Y2ggKGluIGRpcmVjdGlv biAnZGlyJykgKi8KKwlyZXR1cm4gX2hhc2hfbmV4dChzY2FuLCBkaXIsIHByaW9yYmF0Y2gpOwog fQogCiAKQEAgLTM1NiwyNiArMzMxLDI2IEBAIGhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogaW50NjQKIGhhc2hnZXRiaXRtYXAoSW5kZXhTY2FuRGVz YyBzY2FuLCBUSURCaXRtYXAgKnRibSkKIHsKLQlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nh bk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCWJvb2wJCXJlczsKKwlJbmRleFNjYW5CYXRjaCBiYXRj aDsKIAlpbnQ2NAkJbnRpZHMgPSAwOwotCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW07CiAKLQly ZXMgPSBfaGFzaF9maXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CisJYmF0Y2ggPSBf aGFzaF9maXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CiAKLQl3aGlsZSAocmVzKQor CXdoaWxlIChiYXRjaCAhPSBOVUxMKQogCXsKLQkJY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRl bXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsKKwkJZm9yIChpbnQgaXRlbUluZGV4ID0gYmF0Y2gt PmZpcnN0SXRlbTsKKwkJCSBpdGVtSW5kZXggPD0gYmF0Y2gtPmxhc3RJdGVtOworCQkJIGl0ZW1J bmRleCsrKQorCQl7CisJCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sICZiYXRjaC0+aXRlbXNbaXRlbUlu ZGV4XS50YWJsZVRpZCwgMSwgdHJ1ZSk7CisJCQludGlkcysrOworCQl9CiAKIAkJLyoKLQkJICog X2hhc2hfZmlyc3QgYW5kIF9oYXNoX25leHQgaGFuZGxlIGVsaW1pbmF0ZSBkZWFkIGluZGV4IGVu dHJpZXMKLQkJICogd2hlbmV2ZXIgc2Nhbi0+aWdub3JlX2tpbGxlZF90dXBsZXMgaXMgdHJ1ZS4g IFRoZXJlZm9yZSwgdGhlcmUncwotCQkgKiBub3RoaW5nIHRvIGRvIGhlcmUgZXhjZXB0IGFkZCB0 aGUgcmVzdWx0cyB0byB0aGUgVElEQml0bWFwLgorCQkgKiBfaGFzaF9uZXh0IHJlbGVhc2VzIHRo ZSBwcmlvciBiYXRjaCBmb3IgYml0bWFwIGNhbGxlcnMgYmVmb3JlCisJCSAqIGFsbG9jYXRpbmcg dGhlIG5leHQgb25lLCBzbyBvbmx5IG9uZSBiYXRjaCBpcyBldmVyIHVzZWQgYXQgYSB0aW1lCiAJ CSAqLwotCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sICYoY3Vyckl0ZW0tPmhlYXBUaWQpLCAxLCB0cnVl KTsKLQkJbnRpZHMrKzsKLQotCQlyZXMgPSBfaGFzaF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGly ZWN0aW9uKTsKKwkJYmF0Y2ggPSBfaGFzaF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9u LCBiYXRjaCk7CiAJfQogCiAJcmV0dXJuIG50aWRzOwpAQCAtMzk3LDE3ICszNzIsMTcgQEAgaGFz aGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2Fu ID0gUmVsYXRpb25HZXRJbmRleFNjYW4ocmVsLCBua2V5cywgbm9yZGVyYnlzKTsKIAogCXNvID0g KEhhc2hTY2FuT3BhcXVlKSBwYWxsb2Nfb2JqZWN0KEhhc2hTY2FuT3BhcXVlRGF0YSk7Ci0JSGFz aFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKIAlzby0+aGFzaHNvX2J1Y2tldF9idWYg PSBJbnZhbGlkQnVmZmVyOwogCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiA9IEludmFsaWRC dWZmZXI7CiAKIAlzby0+aGFzaHNvX2J1Y19wb3B1bGF0ZWQgPSBmYWxzZTsKIAlzby0+aGFzaHNv X2J1Y19zcGxpdCA9IGZhbHNlOwogCi0Jc28tPmtpbGxlZEl0ZW1zID0gTlVMTDsKLQlzby0+bnVt S2lsbGVkID0gMDsKLQogCXNjYW4tPm9wYXF1ZSA9IHNvOworCXNjYW4tPnhzX3JlY2hlY2sgPSB0 cnVlOworCXNjYW4tPm1heGl0ZW1zYmF0Y2ggPSBNYXhJbmRleFR1cGxlc1BlclBhZ2U7CisJc2Nh bi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3N0YXRpYyA9IE1BWEFMSUdOKHNpemVvZihIYXNoQmF0Y2hE YXRhKSk7CisJc2Nhbi0+YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSA9IDA7CiAKIAlyZXR1cm4gc2Nh bjsKIH0KQEAgLTQyMiwxOCArMzk3LDggQEAgaGFzaHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChI YXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4 UmVsYXRpb247CiAKLQlpZiAoSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0J CS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRl bXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2Fu KTsKLQl9Ci0KIAlfaGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsKIAotCS8qIHNldCBwb3NpdGlv biBpbnZhbGlkICh0aGlzIHdpbGwgY2F1c2UgX2hhc2hfZmlyc3QgY2FsbCkgKi8KLQlIYXNoU2Nh blBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCiAJLyogVXBkYXRlIHNjYW4ga2V5LCBpZiBh IG5ldyBvbmUgaXMgZ2l2ZW4gKi8KIAlpZiAoc2NhbmtleSAmJiBzY2FuLT5udW1iZXJPZktleXMg PiAwKQogCQltZW1jcHkoc2Nhbi0+a2V5RGF0YSwgc2NhbmtleSwgc2Nhbi0+bnVtYmVyT2ZLZXlz ICogc2l6ZW9mKFNjYW5LZXlEYXRhKSk7CkBAIC00NDIsNiArNDA3LDEwOCBAQCBoYXNocmVzY2Fu KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCXNv LT5oYXNoc29fYnVjX3NwbGl0ID0gZmFsc2U7CiB9CiAKKy8qCisgKgloYXNodW5ndWFyZGJhdGNo KCkgLS0gRHJvcCBiYXRjaCdzIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIChidWZmZXIgcGluKQor ICoKKyAqIENhbGxlZCBieSB0aGUgdGFibGUgQU0gd2hlbiBpdCdzIHNhZmUgdG8gZHJvcCB0aGUg YnVmZmVyIHBpbiBoZWxkIHRvCisgKiBwcmV2ZW50IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBi eSBWQUNVVU0uCisgKi8KK3ZvaWQKK2hhc2h1bmd1YXJkYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2Fu LCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlIYXNoQmF0Y2hEYXRhICpoYXNoYmF0Y2ggPSBI YXNoQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKTsKKworCS8qIFNob3VsZCBiZSBjYWxsZWQgZXhh Y3RseSBvbmNlIGlmZiAhYmF0Y2hJbW1lZGlhdGVVbmd1YXJkICovCisJQXNzZXJ0KCFzY2FuLT5i YXRjaEltbWVkaWF0ZVVuZ3VhcmQpOworCUFzc2VydChiYXRjaC0+aXNHdWFyZGVkKTsKKworCVJl bGVhc2VCdWZmZXIoaGFzaGJhdGNoLT5idWYpOworfQorCisvKgorICoJaGFzaGtpbGxpdGVtc2Jh dGNoKCkgLS0gTWFyayBkZWFkIGl0ZW1zJyBpbmRleCB0dXBsZXMgTFBfREVBRAorICovCit2b2lk CitoYXNoa2lsbGl0ZW1zYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBi YXRjaCkKK3sKKwlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOworCUhhc2hCYXRj aERhdGEgKmhhc2hiYXRjaCA9IEhhc2hCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpOworCUJ1ZmZl cgkJYnVmOworCVBhZ2UJCXBhZ2U7CisJSGFzaFBhZ2VPcGFxdWUgb3BhcXVlOworCWJvb2wJCWtp bGxlZHNvbWV0aGluZyA9IGZhbHNlOworCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOworCisJQXNzZXJ0 KGJhdGNoLT5udW1EZWFkID4gMCk7CisKKwlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBoYXNoYmF0 Y2gtPmN1cnJQYWdlLCBIQVNIX1JFQUQsCisJCQkJCSAgIExIX0JVQ0tFVF9QQUdFIHwgTEhfT1ZF UkZMT1dfUEFHRSk7CisKKwlsYXRlc3Rsc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYnVmKTsKKwlB c3NlcnQoYmF0Y2gtPmxzbiA8PSBsYXRlc3Rsc24pOworCWlmIChiYXRjaC0+bHNuICE9IGxhdGVz dGxzbikKKwl7CisJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8KKwkJX2hhc2hf cmVsYnVmKHJlbCwgYnVmKTsKKwkJcmV0dXJuOworCX0KKworCXBhZ2UgPSBCdWZmZXJHZXRQYWdl KGJ1Zik7CisJb3BhcXVlID0gSGFzaFBhZ2VHZXRPcGFxdWUocGFnZSk7CisKKwkvKiBJdGVyYXRl IHRocm91Z2ggYmF0Y2gtPmRlYWRJdGVtc1tdIGluIGluZGV4IHBhZ2Ugb3JkZXIgKi8KKwlmb3Ig KGludCBpID0gMDsgaSA8IGJhdGNoLT5udW1EZWFkOyBpKyspCisJeworCQlpbnQJCQlpdGVtSW5k ZXggPSBiYXRjaC0+ZGVhZEl0ZW1zW2ldOworCQlCYXRjaE1hdGNoaW5nSXRlbSAqY3Vyckl0ZW0g PSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CisJCU9mZnNldE51bWJlciBvZmZudW0gPSBjdXJy SXRlbS0+aW5kZXhPZmZzZXQ7CisJCUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBv ZmZudW0pOworCisJCUFzc2VydChpdGVtSW5kZXggPj0gYmF0Y2gtPmZpcnN0SXRlbSAmJgorCQkJ ICAgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0SXRlbSk7CisJCUFzc2VydChpID09IDAgfHwKKwkJ CSAgIG9mZm51bSA+IGJhdGNoLT5pdGVtc1tiYXRjaC0+ZGVhZEl0ZW1zW2kgLSAxXV0uaW5kZXhP ZmZzZXQpOworCQlBc3NlcnQob2ZmbnVtIDw9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSkp OworCQlBc3NlcnQoSXRlbVBvaW50ZXJFcXVhbHMoJigoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0o cGFnZSwgaWlkKSktPnRfdGlkLAorCQkJCQkJCQkgJmN1cnJJdGVtLT50YWJsZVRpZCkpOworCisJ CS8qIE1hcmsgaW5kZXggaXRlbSBhcyBkZWFkLCBpZiBpdCBpc24ndCBhbHJlYWR5ICovCisJCWlm ICghSXRlbUlkSXNEZWFkKGlpZCkpCisJCXsKKwkJCWlmICgha2lsbGVkc29tZXRoaW5nKQorCQkJ eworCQkJCS8qCisJCQkJICogVXNlIHRoZSBoaW50IGJpdCBpbmZyYXN0cnVjdHVyZSB0byBjaGVj ayBpZiB3ZSBjYW4gdXBkYXRlCisJCQkJICogdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xkaW5nIGEg c2hhcmUgbG9jay4gSWYgd2UgYXJlIG5vdAorCQkJCSAqIGFsbG93ZWQsIHRoZXJlJ3Mgbm8gcG9p bnQgY29udGludWluZy4KKwkJCQkgKi8KKwkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJpdHMo YnVmKSkKKwkJCQl7CisJCQkJCV9oYXNoX3JlbGJ1ZihyZWwsIGJ1Zik7CisJCQkJCXJldHVybjsK KwkJCQl9CisJCQl9CisKKwkJCS8qIGZvdW5kIHRoZSBpdGVtICovCisJCQlJdGVtSWRNYXJrRGVh ZChpaWQpOworCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKKwkJfQorCX0KKworCS8qCisJICog U2luY2UgdGhpcyBjYW4gYmUgcmVkb25lIGxhdGVyIGlmIG5lZWRlZCwgbWFyayBhcyBkaXJ0eSBo aW50LiBXaGVuZXZlcgorCSAqIHdlIG1hcmsgYW55dGhpbmcgTFBfREVBRCwgd2UgYWxzbyBzZXQg dGhlIHBhZ2UncworCSAqIExIX1BBR0VfSEFTX0RFQURfVFVQTEVTIGZsYWcsIHdoaWNoIGlzIGxp a2V3aXNlIGp1c3QgYSBoaW50LgorCSAqLworCWlmIChraWxsZWRzb21ldGhpbmcpCisJeworCQlv cGFxdWUtPmhhc2hvX2ZsYWcgfD0gTEhfUEFHRV9IQVNfREVBRF9UVVBMRVM7CisJCUJ1ZmZlckZp bmlzaFNldEhpbnRCaXRzKGJ1ZiwgdHJ1ZSwgdHJ1ZSk7CisJfQorCisJX2hhc2hfcmVsYnVmKHJl bCwgYnVmKTsKK30KKwogLyoKICAqCWhhc2hlbmRzY2FuKCkgLS0gY2xvc2UgZG93biBhIHNjYW4K ICAqLwpAQCAtNDUxLDE3ICs1MTgsOCBAQCBoYXNoZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4p CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlS ZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCi0JaWYgKEhhc2hTY2FuUG9zSXNW YWxpZChzby0+Y3VyclBvcykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2Us IGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkK LQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0JfQotCiAJX2hhc2hfZHJvcHNjYW5idWYocmVs LCBzbyk7CiAKLQlpZiAoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5raWxs ZWRJdGVtcyk7CiAJcGZyZWUoc28pOwogCXNjYW4tPm9wYXF1ZSA9IE5VTEw7CiB9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oYXNoL2hhc2hfeGxvZy5jCmluZGV4IDIwNjA2MjBjNy4uZTI2ZWU4YmI5IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYwpAQCAtMTE0MSwxNCArMTE0MSwxNCBAQCBoYXNoX21h c2soY2hhciAqcGFnZWRhdGEsIEJsb2NrTnVtYmVyIGJsa25vKQogCQkvKgogCQkgKiBJbiBoYXNo IGJ1Y2tldCBhbmQgb3ZlcmZsb3cgcGFnZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUK IAkJICogTFBfRkxBR1Mgd2l0aG91dCBlbWl0dGluZyBhbnkgV0FMIHJlY29yZC4gSGVuY2UsIG1h c2sgdGhlIGxpbmUKLQkJICogcG9pbnRlciBmbGFncy4gU2VlIGhhc2hnZXR0dXBsZSgpLCBfaGFz aF9raWxsX2l0ZW1zKCkgZm9yIGRldGFpbHMuCisJCSAqIHBvaW50ZXIgZmxhZ3MuIFNlZSBoYXNo a2lsbGl0ZW1zYmF0Y2goKSBmb3IgZGV0YWlscy4KIAkJICovCiAJCW1hc2tfbHBfZmxhZ3MocGFn ZSk7CiAJfQogCiAJLyoKIAkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBoaW50IGJpdCBMSF9Q QUdFX0hBU19ERUFEX1RVUExFUyBtYXkgcmVtYWluCi0JICogdW5sb2dnZWQuIFNvLCBtYXNrIGl0 LiBTZWUgX2hhc2hfa2lsbF9pdGVtcygpIGZvciBkZXRhaWxzLgorCSAqIHVubG9nZ2VkLiBTbywg bWFzayBpdC4gU2VlIGhhc2hraWxsaXRlbXNiYXRjaCgpIGZvciBkZXRhaWxzLgogCSAqLwogCW9w YXF1ZS0+aGFzaG9fZmxhZyAmPSB+TEhfUEFHRV9IQVNfREVBRF9UVVBMRVM7CiB9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaHBhZ2UuYwppbmRleCA4MDk5YjBkMDIuLjExZTNkYjQ3MiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNocGFnZS5jCkBAIC0yODAsMzEgKzI4MCwyNCBAQCBfaGFzaF9kcm9wYnVm KFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKIH0KIAogLyoKLSAqCV9oYXNoX2Ryb3BzY2FuYnVm KCkgLS0gcmVsZWFzZSBidWZmZXJzIHVzZWQgaW4gc2Nhbi4KKyAqCV9oYXNoX2Ryb3BzY2FuYnVm KCkgLS0gcmVsZWFzZSBidWZmZXJzIG93bmVkIGJ5IHNjYW4uCiAgKgotICogVGhpcyByb3V0aW5l IHVucGlucyB0aGUgYnVmZmVycyB1c2VkIGR1cmluZyBzY2FuIG9uIHdoaWNoIHdlCi0gKiBob2xk IG5vIGxvY2suCisgKiBUaGlzIHJvdXRpbmUgdW5waW5zIHRoZSBidWZmZXJzIGZvciB0aGUgcHJp bWFyeSBidWNrZXQgcGFnZSBhbmQgZm9yIHRoZQorICogYnVja2V0IHBhZ2Ugb2YgYSBidWNrZXQg YmVpbmcgc3BsaXQgYXMgbmVlZGVkLgogICovCiB2b2lkCiBfaGFzaF9kcm9wc2NhbmJ1ZihSZWxh dGlvbiByZWwsIEhhc2hTY2FuT3BhcXVlIHNvKQogewotCS8qIHJlbGVhc2UgcGluIHdlIGhvbGQg b24gcHJpbWFyeSBidWNrZXQgcGFnZSAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29f YnVja2V0X2J1ZikgJiYKLQkJc28tPmhhc2hzb19idWNrZXRfYnVmICE9IHNvLT5jdXJyUG9zLmJ1 ZikKKwkvKiByZWxlYXNlIHBpbiBoZWxkIG9uIHByaW1hcnkgYnVja2V0IHBhZ2UgKi8KKwlpZiAo QnVmZmVySXNWYWxpZChzby0+aGFzaHNvX2J1Y2tldF9idWYpKQogCQlfaGFzaF9kcm9wYnVmKHJl bCwgc28tPmhhc2hzb19idWNrZXRfYnVmKTsKIAlzby0+aGFzaHNvX2J1Y2tldF9idWYgPSBJbnZh bGlkQnVmZmVyOwogCi0JLyogcmVsZWFzZSBwaW4gd2UgaG9sZCBvbiBwcmltYXJ5IGJ1Y2tldCBw YWdlICBvZiBidWNrZXQgYmVpbmcgc3BsaXQgKi8KLQlpZiAoQnVmZmVySXNWYWxpZChzby0+aGFz aHNvX3NwbGl0X2J1Y2tldF9idWYpICYmCi0JCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiAh PSBzby0+Y3VyclBvcy5idWYpCisJLyogcmVsZWFzZSBwaW4gaGVsZCBvbiBwcmltYXJ5IGJ1Y2tl dCBwYWdlIG9mIGJ1Y2tldCBiZWluZyBzcGxpdCAqLworCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5o YXNoc29fc3BsaXRfYnVja2V0X2J1ZikpCiAJCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+aGFzaHNv X3NwbGl0X2J1Y2tldF9idWYpOwogCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiA9IEludmFs aWRCdWZmZXI7CiAKLQkvKiByZWxlYXNlIGFueSBwaW4gd2Ugc3RpbGwgaG9sZCAqLwotCWlmIChC dWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCi0JCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+ Y3VyclBvcy5idWYpOwotCXNvLT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7Ci0KIAkvKiBy ZXNldCBzcGxpdCBzY2FuICovCiAJc28tPmhhc2hzb19idWNfcG9wdWxhdGVkID0gZmFsc2U7CiAJ c28tPmhhc2hzb19idWNfc3BsaXQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oYXNoL2hhc2hzZWFyY2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFy Y2guYwppbmRleCA4OWQxYzViYzYuLjVhNThjMDQwYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hh c2hzZWFyY2guYwpAQCAtMjIsMTA1ICsyMiw5NCBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGlj YXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKLXN0YXRpYyBib29sIF9oYXNoX3JlYWRw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLAotCQkJCQkJICAgU2NhbkRpcmVj dGlvbiBkaXIpOworc3RhdGljIGJvb2wgX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2Fu LCBCdWZmZXIgYnVmLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCSAgIEluZGV4U2NhbkJhdGNo IGJhdGNoKTsKIHN0YXRpYyBpbnQJX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2Fu RGVzYyBzY2FuLCBQYWdlIHBhZ2UsCi0JCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBT Y2FuRGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2hhc2hfc2F2ZWl0ZW0oSGFz aFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCisJCQkJCQkJCQkgICBPZmZzZXROdW1iZXIg b2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJh dGNoKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfaGFzaF9zYXZlaXRlbShJbmRleFNjYW5CYXRjaCBi YXRjaCwgaW50IGl0ZW1JbmRleCwKIAkJCQkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRl eFR1cGxlIGl0dXApOwogc3RhdGljIHZvaWQgX2hhc2hfcmVhZG5leHQoSW5kZXhTY2FuRGVzYyBz Y2FuLCBCdWZmZXIgKmJ1ZnAsCiAJCQkJCQkgICBQYWdlICpwYWdlcCwgSGFzaFBhZ2VPcGFxdWUg Km9wYXF1ZXApOwogCiAvKgotICoJX2hhc2hfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBpdGVtIGlu IGEgc2Nhbi4KKyAqCV9oYXNoX25leHQoKSAtLSBHZXQgdGhlIG5leHQgYmF0Y2ggb2YgaXRlbXMg aW4gYSBzY2FuLgogICoKLSAqCQlPbiBlbnRyeSwgc28tPmN1cnJQb3MgZGVzY3JpYmVzIHRoZSBj dXJyZW50IHBhZ2UsIHdoaWNoIG1heQotICoJCWJlIHBpbm5lZCBidXQgbm90IGxvY2tlZCwgYW5k IHNvLT5jdXJyUG9zLml0ZW1JbmRleCBpZGVudGlmaWVzCi0gKgkJd2hpY2ggaXRlbSB3YXMgcHJl dmlvdXNseSByZXR1cm5lZC4KKyAqCQlPbiBlbnRyeSwgcHJpb3JiYXRjaCBkZXNjcmliZXMgdGhl IGN1cnJlbnQgcGFnZSBiYXRjaCB3aXRoIGl0ZW1zCisgKgkJYWxyZWFkeSByZXR1cm5lZC4KICAq Ci0gKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCBzY2FuLT54c19oZWFwdGlkIGlzIHNldCB0byB0aGUg VElEIG9mIHRoZSBuZXh0Ci0gKgkJaGVhcCB0dXBsZS4gIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQg YXMgbmVlZGVkLgorICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgcmV0dXJucyBhIGJhdGNoIGNvbnRh aW5pbmcgbWF0Y2hpbmcgaXRlbXMgZnJvbQorICoJCW5leHQgcGFnZS4gIE90aGVyd2lzZSByZXR1 cm5zIE5VTEwsIGluZGljYXRpbmcgdGhhdCB0aGVyZSBhcmUgbm8KKyAqCQlmdXJ0aGVyIG1hdGNo ZXMuICBObyBsb2NrcyBhcmUgZXZlciBoZWxkIHdoZW4gd2UgcmV0dXJuLgogICoKLSAqCQlPbiBm YWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwgd2UgcmV0dXJuIGZhbHNlIHdpdGggcGluCi0g KgkJaGVsZCBvbiBidWNrZXQgcGFnZSBidXQgbm8gcGlucyBvciBsb2NrcyBoZWxkIG9uIG92ZXJm bG93Ci0gKgkJcGFnZS4KKyAqCQlSZXRhaW5zIHBpbnMgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1 bGVzIGFzIF9oYXNoX2ZpcnN0LgogICovCi1ib29sCi1faGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitJbmRleFNjYW5CYXRjaAorX2hhc2hfbmV4dChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJh dGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJSGFzaFNjYW5P cGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlIYXNoU2NhblBvc0l0 ZW0gKmN1cnJJdGVtOworCUhhc2hCYXRjaERhdGEgKmhhc2hwcmlvcmJhdGNoID0gSGFzaEJhdGNo R2V0RGF0YShzY2FuLCBwcmlvcmJhdGNoKTsKIAlCbG9ja051bWJlciBibGtubzsKIAlCdWZmZXIJ CWJ1ZjsKLQlib29sCQllbmRfb2Zfc2NhbiA9IGZhbHNlOworCUluZGV4U2NhbkJhdGNoIGJhdGNo OwogCiAJLyoKLQkgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IHR1cGxlIG9uIHRoZSBjdXJyZW50IHBh Z2U7IG9yIGlmIGRvbmUsIHRyeSB0byByZWFkCi0JICogZGF0YSBmcm9tIHRoZSBuZXh0IG9yIHBy ZXZpb3VzIHBhZ2UgYmFzZWQgb24gdGhlIHNjYW4gZGlyZWN0aW9uLiBCZWZvcmUKLQkgKiBtb3Zp bmcgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMgcGFnZSBtYWtlIHN1cmUgdGhhdCB3ZSBkZWFsIHdp dGggYWxsIHRoZQotCSAqIGtpbGxlZCBpdGVtcy4KKwkgKiBUaGUgY29yZSBjb2RlIG11c3QgZGVh bCB3aXRoIGNyb3NzLWJhdGNoIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgZm9yIHVzLgorCSAqIEEg YmF0Y2ggbWFuYWdlbWVudCByb3V0aW5lIHRoYXQgZmxpcHMgcHJpb3JiYXRjaCdzIHNjYW4gZGly ZWN0aW9uIGlzCisJICogdXNlZCBmb3IgdGhpcy4KKwkgKi8KKwlBc3NlcnQocHJpb3JiYXRjaC0+ ZGlyID09IGRpcik7CisKKwkvKgorCSAqIERldGVybWluZSB3aGljaCBwYWdlIHRvIHJlYWQgbmV4 dCBiYXNlZCBvbiBzY2FuIGRpcmVjdGlvbiBhbmQgZGV0YWlscworCSAqIHRha2VuIGZyb20gdGhl IHByaW9yIGJhdGNoCiAJICovCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQl7 Ci0JCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQot CQl7Ci0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2Fu KTsKKwkJYmxrbm8gPSBoYXNocHJpb3JiYXRjaC0+bmV4dFBhZ2U7CisJZWxzZQorCQlibGtubyA9 IGhhc2hwcmlvcmJhdGNoLT5wcmV2UGFnZTsKIAotCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5uZXh0 UGFnZTsKLQkJCWlmIChCbG9ja051bWJlcklzVmFsaWQoYmxrbm8pKQotCQkJewotCQkJCWJ1ZiA9 IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0UpOwot CQkJCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1ZiwgZGlyKSkKLQkJCQkJZW5kX29mX3Nj YW4gPSB0cnVlOwotCQkJfQotCQkJZWxzZQotCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJfQot CX0KKwkvKgorCSAqIEZvciBiaXRtYXAgc2NhbiBjYWxsZXJzLCByZWxlYXNlIHRoZSBwcmlvciBi YXRjaCBub3cgc28gdGhhdCB0aGUKKwkgKiBhbGxvY2F0aW9uIGJlbG93IGNhbiByZXVzZSBpdHMg bWVtb3J5LiAgVGhhdCB3YXkgYml0bWFwIHNjYW5zIG5ldmVyCisJICogbmVlZCBtb3JlIHRoYW4g b25lIGJhdGNoIGFsbG9jYXRpb24uCisJICovCisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcpCisJ CWluZGV4YW1fdXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4sIHByaW9yYmF0Y2gpOworCisJaWYgKCFC bG9ja051bWJlcklzVmFsaWQoYmxrbm8pKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEFsbG9jYXRl IHNwYWNlIGZvciBuZXh0IGJhdGNoICovCisJYmF0Y2ggPSBpbmRleGFtX3V0aWxfYWxsb2NfYmF0 Y2goc2Nhbik7CisKKwkvKiBHZXQgdGhlIGJ1ZmZlciBmb3IgbmV4dCBiYXRjaCAqLworCWlmIChT Y2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJs a25vLCBIQVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0UpOwogCWVsc2UKIAl7Ci0JCWlmICgtLXNv LT5jdXJyUG9zLml0ZW1JbmRleCA8IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSkKLQkJewotCQkJaWYg KHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7CisJCWJ1ZiA9 IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsCisJCQkJCQkgICBMSF9CVUNLRVRf UEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOwogCi0JCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQ YWdlOwotCQkJaWYgKEJsb2NrTnVtYmVySXNWYWxpZChibGtubykpCi0JCQl7Ci0JCQkJYnVmID0g X2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwKLQkJCQkJCQkJICAgTEhfQlVDS0VU X1BBR0UgfCBMSF9PVkVSRkxPV19QQUdFKTsKLQotCQkJCS8qCi0JCQkJICogV2UgYWx3YXlzIG1h aW50YWluIHRoZSBwaW4gb24gYnVja2V0IHBhZ2UgZm9yIHdob2xlIHNjYW4KLQkJCQkgKiBvcGVy YXRpb24sIHNvIHJlbGVhc2luZyB0aGUgYWRkaXRpb25hbCBwaW4gd2UgaGF2ZSBhY3F1aXJlZAot CQkJCSAqIGhlcmUuCi0JCQkJICovCi0JCQkJaWYgKGJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9i dWYgfHwKLQkJCQkJYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKLQkJCQkJX2hh c2hfZHJvcGJ1ZihyZWwsIGJ1Zik7Ci0KLQkJCQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZi dWYsIGRpcikpCi0JCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UKLQkJCQll bmRfb2Zfc2NhbiA9IHRydWU7Ci0JCX0KKwkJLyoKKwkJICogV2UgYWx3YXlzIG1haW50YWluIHRo ZSBwaW4gb24gYnVja2V0IHBhZ2UgZm9yIHdob2xlIHNjYW4gb3BlcmF0aW9uLAorCQkgKiBzbyBy ZWxlYXNpbmcgdGhlIGFkZGl0aW9uYWwgcGluIHdlIGhhdmUgYWNxdWlyZWQgaGVyZS4KKwkJICov CisJCWlmIChidWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8CisJCQlidWYgPT0gc28tPmhh c2hzb19zcGxpdF9idWNrZXRfYnVmKQorCQkJX2hhc2hfZHJvcGJ1ZihyZWwsIGJ1Zik7CiAJfQog Ci0JaWYgKGVuZF9vZl9zY2FuKQorCS8qIFJlYWQgdGhlIG5leHQgcGFnZSBhbmQgbG9hZCBpdGVt cyBpbnRvIGFsbG9jYXRlZCBiYXRjaCAqLworCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgYnVm LCBkaXIsIGJhdGNoKSkKIAl7Ci0JCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwotCQlIYXNo U2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQlyZXR1cm4gZmFsc2U7CisJCWluZGV4 YW1fdXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4sIGJhdGNoKTsKKwkJcmV0dXJuIE5VTEw7CiAJfQog Ci0JLyogT0ssIGl0ZW1JbmRleCBzYXlzIHdoYXQgdG8gcmV0dXJuICovCi0JY3Vyckl0ZW0gPSAm c28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsKLQlzY2FuLT54c19oZWFw dGlkID0gY3Vyckl0ZW0tPmhlYXBUaWQ7Ci0KLQlyZXR1cm4gdHJ1ZTsKKwkvKiBSZXR1cm4gdGhl IGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hlZCBpdGVtcyBmcm9tIG5leHQgcGFnZSAqLworCXJldHVy biBiYXRjaDsKIH0KIAogLyoKQEAgLTI3MCwyMiArMjU5LDIwIEBAIF9oYXNoX3JlYWRwcmV2KElu ZGV4U2NhbkRlc2Mgc2NhbiwKIH0KIAogLyoKLSAqCV9oYXNoX2ZpcnN0KCkgLS0gRmluZCB0aGUg Zmlyc3QgaXRlbSBpbiBhIHNjYW4uCisgKglfaGFzaF9maXJzdCgpIC0tIEZpbmQgdGhlIGZpcnN0 IGJhdGNoIG9mIGl0ZW1zIGluIGEgc2Nhbi4KICAqCi0gKgkJV2UgZmluZCB0aGUgZmlyc3QgaXRl bSAob3IsIGlmIGJhY2t3YXJkIHNjYW4sIHRoZSBsYXN0IGl0ZW0pIGluIHRoZQotICoJCWluZGV4 IHRoYXQgc2F0aXNmaWVzIHRoZSBxdWFsaWZpY2F0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2Nh bgotICoJCWRlc2NyaXB0b3IuCisgKgkJV2UgZmluZCB0aGUgZmlyc3QgYmF0Y2ggb2YgaXRlbXMg KG9yLCBpZiBiYWNrd2FyZCBzY2FuLCB0aGUgbGFzdAorICoJCWJhdGNoKSBpbiB0aGUgaW5kZXgg dGhhdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24gYXNzb2NpYXRlZCB3aXRoCisgKgkJdGhl IHNjYW4gZGVzY3JpcHRvci4KICAqCi0gKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCBpZiB0aGUgcGFn ZSBjb250YWluaW5nIGN1cnJlbnQgaW5kZXggdHVwbGUgaXMgYW4KLSAqCQlvdmVyZmxvdyBwYWdl LCBib3RoIHBpbiBhbmQgbG9jayBhcmUgcmVsZWFzZWQgd2hlcmVhcyBpZiBpdCBpcyBhIGJ1Y2tl dAotICoJCXBhZ2UgdGhlbiBpdCBpcyBwaW5uZWQgYnV0IG5vdCBsb2NrZWQgYW5kIGRhdGEgYWJv dXQgdGhlIG1hdGNoaW5nCi0gKgkJdHVwbGUocykgb24gdGhlIHBhZ2UgaGFzIGJlZW4gbG9hZGVk IGludG8gc28tPmN1cnJQb3MsCi0gKgkJc2Nhbi0+eHNfaGVhcHRpZCBpcyBzZXQgdG8gdGhlIGhl YXAgVElEIG9mIHRoZSBjdXJyZW50IHR1cGxlLgorICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgcmV0 dXJucyBhIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hpbmcgaXRlbXMuCisgKgkJT3RoZXJ3aXNlIHJl dHVybnMgTlVMTCwgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGFyZSBubyBmdXJ0aGVyIG1hdGNoZXMu CisgKgkJTm8gbG9ja3MgYXJlIGV2ZXIgaGVsZCB3aGVuIHdlIHJldHVybi4KICAqCi0gKgkJT24g ZmFpbHVyZSBleGl0IChubyBtb3JlIHR1cGxlcyksIHdlIHJldHVybiBmYWxzZSwgd2l0aCBwaW4g aGVsZCBvbgotICoJCWJ1Y2tldCBwYWdlIGJ1dCBubyBwaW5zIG9yIGxvY2tzIGhlbGQgb24gb3Zl cmZsb3cgcGFnZS4KKyAqCQlXZSBhbHdheXMgcmV0YWluIG91ciBvd24gcGluIG9uIHRoZSBidWNr ZXQgcGFnZS4gIFdoZW4gd2UgcmV0dXJuIGEKKyAqCQliYXRjaCB3aXRoIGEgYnVja2V0IHBhZ2Us IGl0IHdpbGwgcmV0YWluIGl0cyBvd24gcmVmZXJlbmNlIHBpbi4KICAqLwotYm9vbAorSW5kZXhT Y2FuQmF0Y2gKIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKQEAgLTI5Niw3ICsy ODMsNyBAQCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQogCUJ1ZmZlcgkJYnVmOwogCVBhZ2UJCXBhZ2U7CiAJSGFzaFBhZ2VPcGFxdWUgb3BhcXVlOwot CUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW07CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2g7CiAKIAlw Z3N0YXRfY291bnRfaW5kZXhfc2NhbihyZWwpOwogCWlmIChzY2FuLT5pbnN0cnVtZW50KQpAQCAt MzI2LDcgKzMxMyw3IEBAIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpCiAJICogaXRlbXMgaW4gdGhlIGluZGV4LgogCSAqLwogCWlmIChjdXItPnNrX2Zs YWdzICYgU0tfSVNOVUxMKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBOVUxMOwogCiAJLyoK IAkgKiBPa2F5IHRvIGNvbXB1dGUgdGhlIGhhc2gga2V5LiAgV2Ugd2FudCB0byBkbyB0aGlzIGJl Zm9yZSBhY3F1aXJpbmcgYW55CkBAIC00MTksMTkxICs0MDYsMTUyIEBAIF9oYXNoX2ZpcnN0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCQlfaGFzaF9yZWFkbmV4dChz Y2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7CiAJfQogCi0JLyogcmVtZW1iZXIgd2hpY2ggYnVm ZmVyIHdlIGhhdmUgcGlubmVkLCBpZiBhbnkgKi8KLQlBc3NlcnQoQnVmZmVySXNJbnZhbGlkKHNv LT5jdXJyUG9zLmJ1ZikpOwotCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkvKiBBbGxvY2F0ZSBz cGFjZSBmb3IgZmlyc3QgYmF0Y2ggKi8KKwliYXRjaCA9IGluZGV4YW1fdXRpbF9hbGxvY19iYXRj aChzY2FuKTsKIAotCS8qIE5vdyBmaW5kIGFsbCB0aGUgdHVwbGVzIHNhdGlzZnlpbmcgdGhlIHF1 YWxpZmljYXRpb24gZnJvbSBhIHBhZ2UgKi8KLQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZi dWYsIGRpcikpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBSZWFkIHRoZSBmaXJzdCBwYWdlIGFuZCBs b2FkIGl0ZW1zIGludG8gYWxsb2NhdGVkIGJhdGNoICovCisJaWYgKCFfaGFzaF9yZWFkcGFnZShz Y2FuLCBidWYsIGRpciwgYmF0Y2gpKQorCXsKKwkJaW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2go c2NhbiwgYmF0Y2gpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKLQkvKiBPSywgaXRlbUluZGV4IHNh eXMgd2hhdCB0byByZXR1cm4gKi8KLQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+ Y3VyclBvcy5pdGVtSW5kZXhdOwotCXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+aGVhcFRp ZDsKLQotCS8qIGlmIHdlJ3JlIGhlcmUsIF9oYXNoX3JlYWRwYWdlIGZvdW5kIGEgdmFsaWQgdHVw bGVzICovCi0JcmV0dXJuIHRydWU7CisJLyogUmV0dXJuIHRoZSBiYXRjaCBjb250YWluaW5nIG1h dGNoZWQgaXRlbXMgKi8KKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8qCi0gKglfaGFzaF9yZWFkcGFn ZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIHNvLT5jdXJyUG9z CisgKglfaGFzaF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFn ZSBpbnRvIGJhdGNoCiAgKgogICoJV2Ugc2NhbiBhbGwgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50 IGluZGV4IHBhZ2UgYW5kIHNhdmUgdGhlbSBpbnRvCi0gKglzby0+Y3VyclBvcyBpZiBpdCBzYXRp c2ZpZXMgdGhlIHF1YWxpZmljYXRpb24uIElmIG5vIG1hdGNoaW5nIGl0ZW1zCisgKgl0aGUgYmF0 Y2ggaWYgdGhleSBzYXRpc2Z5IHRoZSBxdWFsaWZpY2F0aW9uLiBJZiBubyBtYXRjaGluZyBpdGVt cwogICoJYXJlIGZvdW5kIGluIHRoZSBjdXJyZW50IHBhZ2UsIHdlIG1vdmUgdG8gdGhlIG5leHQg b3IgcHJldmlvdXMgcGFnZQogICoJaW4gYSBidWNrZXQgY2hhaW4gYXMgaW5kaWNhdGVkIGJ5IHRo ZSBkaXJlY3Rpb24uCiAgKgogICoJUmV0dXJuIHRydWUgaWYgYW55IG1hdGNoaW5nIGl0ZW1zIGFy ZSBmb3VuZCBlbHNlIHJldHVybiBmYWxzZS4KICAqLwogc3RhdGljIGJvb2wKLV9oYXNoX3JlYWRw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLCBTY2FuRGlyZWN0aW9uIGRpcikK K19oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyIGJ1ZiwgU2NhbkRpcmVj dGlvbiBkaXIsCisJCQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIHsKIAlSZWxhdGlvbglyZWwg PSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3Bh cXVlKSBzY2FuLT5vcGFxdWU7Ci0JQnVmZmVyCQlidWY7CisJSGFzaEJhdGNoRGF0YSAqaGFzaGJh dGNoID0gSGFzaEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCk7CiAJUGFnZQkJcGFnZTsKIAlIYXNo UGFnZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVtYmVyIG9mZm51bTsKIAl1aW50MTYJCWl0ZW1J bmRleDsKIAotCWJ1ZiA9ICpidWZQOwogCUFzc2VydChCdWZmZXJJc1ZhbGlkKGJ1ZikpOwogCV9o YXNoX2NoZWNrcGFnZShyZWwsIGJ1ZiwgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19QQUdF KTsKIAlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCW9wYXF1ZSA9IEhhc2hQYWdlR2V0T3Bh cXVlKHBhZ2UpOwogCi0Jc28tPmN1cnJQb3MuYnVmID0gYnVmOwotCXNvLT5jdXJyUG9zLmN1cnJQ YWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKKwloYXNoYmF0Y2gtPmJ1ZiA9IGJ1ZjsK KwloYXNoYmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKKwliYXRj aC0+ZGlyID0gZGlyOwogCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7Ci0J CUJsb2NrTnVtYmVyIHByZXZfYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0KIAkJZm9yICg7 OykKIAkJewogCQkJLyogbmV3IHBhZ2UsIGxvY2F0ZSBzdGFydGluZyBwb3NpdGlvbiBieSBiaW5h cnkgc2VhcmNoICovCiAJCQlvZmZudW0gPSBfaGFzaF9iaW5zZWFyY2gocGFnZSwgc28tPmhhc2hz b19za19oYXNoKTsKIAotCQkJaXRlbUluZGV4ID0gX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMo c2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIpOworCQkJaXRlbUluZGV4ID0gX2hhc2hfbG9hZF9xdWFs aWZpZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIsCisJCQkJCQkJCQkJCQkgICBiYXRj aCk7CiAKIAkJCWlmIChpdGVtSW5kZXggIT0gMCkKIAkJCQlicmVhazsKIAogCQkJLyoKLQkJCSAq IENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwg bW92ZSB0bwotCQkJICogdGhlIG5leHQgcGFnZS4gQmVmb3JlIGxlYXZpbmcgdGhlIGN1cnJlbnQg cGFnZSwgZGVhbCB3aXRoIGFueQotCQkJICoga2lsbGVkIGl0ZW1zLgorCQkJICogQ291bGQgbm90 IGZpbmQgYW55IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBwYWdlLCB0cnkgdG8KKwkJ CSAqIG1vdmUgdG8gdGhlIG5leHQgcGFnZQogCQkJICovCi0JCQlpZiAoc28tPm51bUtpbGxlZCA+ IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQotCQkJLyoKLQkJCSAqIElmIHRoaXMg aXMgYSBwcmltYXJ5IGJ1Y2tldCBwYWdlLCBoYXNob19wcmV2Ymxrbm8gaXMgbm90IGEgcmVhbAot CQkJICogYmxvY2sgbnVtYmVyLgotCQkJICovCi0JCQlpZiAoc28tPmN1cnJQb3MuYnVmID09IHNv LT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNv X3NwbGl0X2J1Y2tldF9idWYpCi0JCQkJcHJldl9ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsK LQkJCWVsc2UKLQkJCQlwcmV2X2Jsa25vID0gb3BhcXVlLT5oYXNob19wcmV2Ymxrbm87Ci0KIAkJ CV9oYXNoX3JlYWRuZXh0KHNjYW4sICZidWYsICZwYWdlLCAmb3BhcXVlKTsKLQkJCWlmIChCdWZm ZXJJc1ZhbGlkKGJ1ZikpCi0JCQl7Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOwotCQkJCXNv LT5jdXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKLQkJCX0KLQkJ CWVsc2UKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFJlbWVtYmVyIG5leHQgYW5kIHByZXZpb3VzIGJs b2NrIG51bWJlcnMgZm9yIHNjcm9sbGFibGUKLQkJCQkgKiBjdXJzb3JzIHRvIGtub3cgdGhlIHN0 YXJ0IHBvc2l0aW9uIGFuZCByZXR1cm4gZmFsc2UKLQkJCQkgKiBpbmRpY2F0aW5nIHRoYXQgbm8g bW9yZSBtYXRjaGluZyB0dXBsZXMgd2VyZSBmb3VuZC4gQWxzbywKLQkJCQkgKiBkb24ndCByZXNl dCBjdXJyUGFnZSBvciBsc24sIGJlY2F1c2Ugd2UgZXhwZWN0Ci0JCQkJICogX2hhc2hfa2lsbF9p dGVtcyB0byBiZSBjYWxsZWQgZm9yIHRoZSBvbGQgcGFnZSBhZnRlciB0aGlzCi0JCQkJICogZnVu Y3Rpb24gcmV0dXJucy4KLQkJCQkgKi8KLQkJCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IHByZXZf Ymxrbm87Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0J CQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOworCQkJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ1ZikpCiAJ CQkJcmV0dXJuIGZhbHNlOwotCQkJfQorCisJCQloYXNoYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwkJCWhh c2hiYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCQl9CiAKLQkJ c28tPmN1cnJQb3MuZmlyc3RJdGVtID0gMDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBpdGVt SW5kZXggLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAwOworCQliYXRjaC0+Zmlyc3RJ dGVtID0gMDsKKwkJYmF0Y2gtPmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKIAl9CiAJZWxzZQog CXsKLQkJQmxvY2tOdW1iZXIgbmV4dF9ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKLQogCQlm b3IgKDs7KQogCQl7CiAJCQkvKiBuZXcgcGFnZSwgbG9jYXRlIHN0YXJ0aW5nIHBvc2l0aW9uIGJ5 IGJpbmFyeSBzZWFyY2ggKi8KIAkJCW9mZm51bSA9IF9oYXNoX2JpbnNlYXJjaF9sYXN0KHBhZ2Us IHNvLT5oYXNoc29fc2tfaGFzaCk7CiAKLQkJCWl0ZW1JbmRleCA9IF9oYXNoX2xvYWRfcXVhbGlm aWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGlyKTsKKwkJCWl0ZW1JbmRleCA9IF9oYXNo X2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGlyLAorCQkJCQkJCQkJ CQkJICAgYmF0Y2gpOwogCiAJCQlpZiAoaXRlbUluZGV4ICE9IE1heEluZGV4VHVwbGVzUGVyUGFn ZSkKIAkJCQlicmVhazsKIAogCQkJLyoKLQkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGlu ZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgbW92ZSB0bwotCQkJICogdGhlIHByZXZpb3Vz IHBhZ2UuIEJlZm9yZSBsZWF2aW5nIHRoZSBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aAotCQkJICog YW55IGtpbGxlZCBpdGVtcy4KKwkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBs ZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgdHJ5IHRvCisJCQkgKiBtb3ZlIHRvIHRoZSBwcmV2aW91 cyBwYWdlCiAJCQkgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfaGFzaF9raWxs X2l0ZW1zKHNjYW4pOwotCi0JCQlpZiAoc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fYnVj a2V0X2J1ZiB8fAotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tl dF9idWYpCi0JCQkJbmV4dF9ibGtubyA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwotCiAJCQlf aGFzaF9yZWFkcHJldihzY2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7Ci0JCQlpZiAoQnVmZmVy SXNWYWxpZChidWYpKQotCQkJewotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQkJCQlzby0+ Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7Ci0JCQl9Ci0JCQll bHNlCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBSZW1lbWJlciBuZXh0IGFuZCBwcmV2aW91cyBibG9j ayBudW1iZXJzIGZvciBzY3JvbGxhYmxlCi0JCQkJICogY3Vyc29ycyB0byBrbm93IHRoZSBzdGFy dCBwb3NpdGlvbiBhbmQgcmV0dXJuIGZhbHNlCi0JCQkJICogaW5kaWNhdGluZyB0aGF0IG5vIG1v cmUgbWF0Y2hpbmcgdHVwbGVzIHdlcmUgZm91bmQuIEFsc28sCi0JCQkJICogZG9uJ3QgcmVzZXQg Y3VyclBhZ2Ugb3IgbHNuLCBiZWNhdXNlIHdlIGV4cGVjdAotCQkJCSAqIF9oYXNoX2tpbGxfaXRl bXMgdG8gYmUgY2FsbGVkIGZvciB0aGUgb2xkIHBhZ2UgYWZ0ZXIgdGhpcwotCQkJCSAqIGZ1bmN0 aW9uIHJldHVybnMuCi0JCQkJICovCi0JCQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBJbnZhbGlk QmxvY2tOdW1iZXI7Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBuZXh0X2Jsa25vOwotCQkJ CXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkJCWlmICghQnVmZmVySXNWYWxpZChidWYpKQogCQkJ CXJldHVybiBmYWxzZTsKLQkJCX0KKworCQkJaGFzaGJhdGNoLT5idWYgPSBidWY7CisJCQloYXNo YmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKIAkJfQogCi0JCXNv LT5jdXJyUG9zLmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0g PSBNYXhJbmRleFR1cGxlc1BlclBhZ2UgLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSBN YXhJbmRleFR1cGxlc1BlclBhZ2UgLSAxOworCQliYXRjaC0+Zmlyc3RJdGVtID0gaXRlbUluZGV4 OworCQliYXRjaC0+bGFzdEl0ZW0gPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UgLSAxOwogCX0KIAot CWlmIChzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8Ci0JCXNvLT5j dXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCisJLyoKKwkgKiBTYXZl ZCBhdCBsZWFzdCBvbmUgbWF0Y2ggaW4gYmF0Y2guaXRlbXNbXS4gIFByZXBhcmUgZm9yIGhhc2hn ZXRiYXRjaCB0bworCSAqIHJldHVybiBpdCBieSBpbml0aWFsaXppbmcgcmVtYWluaW5nIHVuaW5p dGlhbGl6ZWQgZmllbGRzLgorCSAqLworCWlmIChoYXNoYmF0Y2gtPmJ1ZiA9PSBzby0+aGFzaHNv X2J1Y2tldF9idWYgfHwKKwkJaGFzaGJhdGNoLT5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNr ZXRfYnVmKQogCXsKLQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7 Ci0JCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87Ci0JCUxv Y2tCdWZmZXIoc28tPmN1cnJQb3MuYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQkvKgorCQkg KiBCYXRjaCdzIGJ1ZmZlciBpcyBlaXRoZXIgdGhlIHByaW1hcnkgYnVja2V0LCBvciBhIGJ1Y2tl dCBiZWluZworCQkgKiBwb3B1bGF0ZWQgZHVlIHRvIGEgc3BsaXQuCisJCSAqCisJCSAqIEluY3Jl bWVudCBsb2NhbCByZWZlcmVuY2UgY291bnQgc28gdGhhdCBiYXRjaCBnZXRzIGl0cyBvd24gYnVm ZmVyCisJCSAqIHJlZmVyZW5jZSB0aGF0IGNhbiBiZSBpbmRlcGVuZGVudGx5IHJlbGVhc2VkIGJ5 IGhhc2h1bmd1YXJkYmF0Y2guCisJCSAqIFRoZSBvcmlnaW5hbCBoYXNoc29fYnVja2V0X2J1Zi9o YXNoc29fc3BsaXRfYnVja2V0X2J1ZiByZWZlcmVuY2VzCisJCSAqIGJlbG9uZyB0byB1cy4KKwkJ ICovCisJCUluY3JCdWZmZXJSZWZDb3VudChoYXNoYmF0Y2gtPmJ1Zik7CisKKwkJLyogQ2FuIG9u bHkgdXNlIG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vICovCisJCWhhc2hiYXRjaC0+cHJldlBhZ2Ug PSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCWhhc2hiYXRjaC0+bmV4dFBhZ2UgPSBvcGFxdWUtPmhh c2hvX25leHRibGtubzsKIAl9CiAJZWxzZQogCXsKLQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBv cGFxdWUtPmhhc2hvX3ByZXZibGtubzsKLQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBvcGFxdWUt Pmhhc2hvX25leHRibGtubzsKLQkJX2hhc2hfcmVsYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsK LQkJc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwkJLyogQ2FuIHVzZSBvcGFxdWUt Pmhhc2hvX3ByZXZibGtubyBhbmQgb3BhcXVlLT5oYXNob19uZXh0Ymxrbm8gKi8KKwkJaGFzaGJh dGNoLT5wcmV2UGFnZSA9IG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vOworCQloYXNoYmF0Y2gtPm5l eHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87CiAJfQogCi0JQXNzZXJ0KHNvLT5jdXJy UG9zLmZpcnN0SXRlbSA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJLyogd2Ugc2F2ZWQgb25l IG9yIG1vcmUgbWF0Y2hlcyBpbiBiYXRjaC5pdGVtc1tdICovCisJaW5kZXhhbV91dGlsX3VubG9j a19iYXRjaChzY2FuLCBiYXRjaCwgaGFzaGJhdGNoLT5idWYpOworCisJQXNzZXJ0KGJhdGNoLT5m aXJzdEl0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoKICAq IExvYWQgYWxsIHRoZSBxdWFsaWZpZWQgaXRlbXMgZnJvbSBhIGN1cnJlbnQgaW5kZXggcGFnZQot ICogaW50byBzby0+Y3VyclBvcy4gSGVscGVyIGZ1bmN0aW9uIGZvciBfaGFzaF9yZWFkcGFnZS4K KyAqIGludG8gYmF0Y2guIEhlbHBlciBmdW5jdGlvbiBmb3IgX2hhc2hfcmVhZHBhZ2UuCiAgKi8K IHN0YXRpYyBpbnQKIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nh biwgUGFnZSBwYWdlLAotCQkJCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlv biBkaXIpCisJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpciwK KwkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogewogCUhhc2hTY2FuT3BhcXVlIHNvID0g KEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJSW5kZXhUdXBsZQlpdHVwOwpAQCAtNjQw LDcgKzU4OCw3IEBAIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nh biwgUGFnZSBwYWdlLAogCQkJCV9oYXNoX2NoZWNrcXVhbChzY2FuLCBpdHVwKSkKIAkJCXsKIAkJ CQkvKiB0dXBsZSBpcyBxdWFsaWZpZWQsIHNvIHJlbWVtYmVyIGl0ICovCi0JCQkJX2hhc2hfc2F2 ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQlfaGFzaF9zYXZlaXRlbShi YXRjaCwgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOwogCQkJCWl0ZW1JbmRleCsrOwogCQkJfQog CQkJZWxzZQpAQCAtNjg3LDcgKzYzNSw3IEBAIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKElu ZGV4U2NhbkRlc2Mgc2NhbiwgUGFnZSBwYWdlLAogCQkJewogCQkJCWl0ZW1JbmRleC0tOwogCQkJ CS8qIHR1cGxlIGlzIHF1YWxpZmllZCwgc28gcmVtZW1iZXIgaXQgKi8KLQkJCQlfaGFzaF9zYXZl aXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCV9oYXNoX3NhdmVpdGVtKGJh dGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CiAJCQl9CiAJCQllbHNlCiAJCQl7CkBAIC03 MDYsMTMgKzY1NCwxNCBAQCBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNj IHNjYW4sIFBhZ2UgcGFnZSwKIAl9CiB9CiAKLS8qIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIHNv LT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gKi8KKy8qIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRv IGJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLV9oYXNoX3Nh dmVpdGVtKEhhc2hTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAorX2hhc2hfc2F2ZWl0ZW0o SW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIGludCBpdGVtSW5kZXgsCiAJCQkgICBPZmZzZXROdW1iZXIg b2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApCiB7Ci0JSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9 ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCUJhdGNoTWF0Y2hpbmdJdGVtICpjdXJy SXRlbSA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKIAotCWN1cnJJdGVtLT5oZWFwVGlkID0g aXR1cC0+dF90aWQ7CisJY3Vyckl0ZW0tPnRhYmxlVGlkID0gaXR1cC0+dF90aWQ7CiAJY3Vyckl0 ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IDA7CiB9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYwppbmRleCAxZDFiMDVmODcuLjg4YTNmM2FkOCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jCkBAIC0xNiwxMCArMTYsOCBAQAogCiAjaW5j bHVkZSAiYWNjZXNzL2hhc2guaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsb3B0aW9ucy5oIgotI2lu Y2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAicG9ydC9wZ19iaXR1dGlscy5oIgog I2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgotI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiAj ZGVmaW5lIENBTENfTkVXX0JVQ0tFVChvbGRfYnVja2V0LCBsb3dtYXNrKSBcCiAJCQlvbGRfYnVj a2V0IHwgKGxvd21hc2sgKyAxKQpAQCAtMzMsNyArMzEsNyBAQCBfaGFzaF9jaGVja3F1YWwoSW5k ZXhTY2FuRGVzYyBzY2FuLCBJbmRleFR1cGxlIGl0dXApCiAJLyoKIAkgKiBDdXJyZW50bHksIHdl IGNhbid0IGNoZWNrIGFueSBvZiB0aGUgc2NhbiBjb25kaXRpb25zIHNpbmNlIHdlIGRvIG5vdAog CSAqIGhhdmUgdGhlIG9yaWdpbmFsIGluZGV4IGVudHJ5IHZhbHVlIHRvIHN1cHBseSB0byB0aGUg c2tfZnVuYy4gQWx3YXlzCi0JICogcmV0dXJuIHRydWU7IHdlIGV4cGVjdCB0aGF0IGhhc2hnZXR0 dXBsZSBhbHJlYWR5IHNldCB0aGUgcmVjaGVjayBmbGFnCisJICogcmV0dXJuIHRydWU7IHdlIGV4 cGVjdCB0aGF0IGhhc2hnZXRiYXRjaCBhbHJlYWR5IHNldCB0aGUgcmVjaGVjayBmbGFnCiAJICog dG8gbWFrZSB0aGUgbWFpbiBpbmRleHNjYW4gY29kZSBkbyBpdC4KIAkgKi8KICNpZmRlZiBOT1Rf VVNFRApAQCAtNTA1LDEyOCArNTAzLDMgQEAgX2hhc2hfZ2V0X25ld2J1Y2tldF9mcm9tX29sZGJ1 Y2tldChSZWxhdGlvbiByZWwsIEJ1Y2tldCBvbGRfYnVja2V0LAogCiAJcmV0dXJuIG5ld19idWNr ZXQ7CiB9Ci0KLS8qCi0gKiBfaGFzaF9raWxsX2l0ZW1zIC0gc2V0IExQX0RFQUQgc3RhdGUgZm9y IGl0ZW1zIGFuIGluZGV4c2NhbiBjYWxsZXIgaGFzCi0gKiB0b2xkIHVzIHdlcmUga2lsbGVkLgot ICoKLSAqIHNjYW4tPm9wYXF1ZSwgcmVmZXJlbmNlZCBsb2NhbGx5IHRocm91Z2ggc28sIGNvbnRh aW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZQotICogY3VycmVudCBwYWdlIGFuZCBraWxsZWQgdHVw bGVzIHRoZXJlb24gKGdlbmVyYWxseSwgdGhpcyBzaG91bGQgb25seSBiZQotICogY2FsbGVkIGlm IHNvLT5udW1LaWxsZWQgPiAwKS4KLSAqCi0gKiBUaGUgY2FsbGVyIGRvZXMgbm90IGhhdmUgYSBs b2NrIG9uIHRoZSBwYWdlIGFuZCBtYXkgb3IgbWF5IG5vdCBoYXZlIHRoZQotICogcGFnZSBwaW5u ZWQgaW4gYSBidWZmZXIuICBOb3RlIHRoYXQgcmVhZC1sb2NrIGlzIHN1ZmZpY2llbnQgZm9yIHNl dHRpbmcKLSAqIExQX0RFQUQgc3RhdHVzICh3aGljaCBpcyBvbmx5IGEgaGludCkuCi0gKgotICog VGhlIGNhbGxlciBtdXN0IGhhdmUgcGluIG9uIGJ1Y2tldCBidWZmZXIsIGJ1dCBtYXkgb3IgbWF5 IG5vdCBoYXZlIHBpbgotICogb24gb3ZlcmZsb3cgYnVmZmVyLCBhcyBpbmRpY2F0ZWQgYnkgSGFz aFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykuCi0gKgotICogV2UgbWF0Y2ggaXRlbXMgYnkg aGVhcCBUSUQgYmVmb3JlIGFzc3VtaW5nIHRoZXkgYXJlIHRoZSByaWdodCBvbmVzIHRvCi0gKiBk ZWxldGUuCi0gKgotICogVGhlcmUgYXJlIG5ldmVyIGFueSBzY2FucyBhY3RpdmUgaW4gYSBidWNr ZXQgYXQgdGhlIHRpbWUgVkFDVVVNIGJlZ2lucywKLSAqIGJlY2F1c2UgVkFDVVVNIHRha2VzIGEg Y2xlYW51cCBsb2NrIG9uIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdlIGFuZCBzY2FucwotICogaG9s ZCBhIHBpbi4gIEEgc2NhbiBjYW4gYmVnaW4gYWZ0ZXIgVkFDVVVNIGxlYXZlcyB0aGUgcHJpbWFy eSBidWNrZXQgcGFnZQotICogYnV0IGJlZm9yZSBpdCBmaW5pc2hlcyB0aGUgZW50aXJlIGJ1Y2tl dCwgYnV0IGl0IGNhbiBuZXZlciBwYXNzIFZBQ1VVTSwKLSAqIGJlY2F1c2UgVkFDVVVNIGFsd2F5 cyBsb2NrcyB0aGUgbmV4dCBwYWdlIGJlZm9yZSByZWxlYXNpbmcgdGhlIGxvY2sgb24KLSAqIHRo ZSBwcmV2aW91cyBvbmUuICBUaGVyZWZvcmUsIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQg YWNjaWRlbnRhbGx5Ci0gKiBraWxsaW5nIGEgVElEIHRoYXQgaGFzIGJlZW4gcmV1c2VkIGZvciBh biB1bnJlbGF0ZWQgdHVwbGUuCi0gKi8KLXZvaWQKLV9oYXNoX2tpbGxfaXRlbXMoSW5kZXhTY2Fu RGVzYyBzY2FuKQotewotCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2Fu LT5vcGFxdWU7Ci0JUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlCbG9ja051 bWJlciBibGtubzsKLQlCdWZmZXIJCWJ1ZjsKLQlQYWdlCQlwYWdlOwotCUhhc2hQYWdlT3BhcXVl IG9wYXF1ZTsKLQlPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCW1heG9mZjsKLQlpbnQJCQludW1L aWxsZWQgPSBzby0+bnVtS2lsbGVkOwotCWludAkJCWk7Ci0JYm9vbAkJa2lsbGVkc29tZXRoaW5n ID0gZmFsc2U7Ci0JYm9vbAkJaGF2ZVBpbiA9IGZhbHNlOwotCi0JQXNzZXJ0KHNvLT5udW1LaWxs ZWQgPiAwKTsKLQlBc3NlcnQoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpOwotCUFzc2VydChIYXNo U2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQotCS8qCi0JICogQWx3YXlzIHJlc2V0IHRo ZSBzY2FuIHN0YXRlLCBzbyB3ZSBkb24ndCBsb29rIGZvciBzYW1lIGl0ZW1zIG9uIG90aGVyCi0J ICogcGFnZXMuCi0JICovCi0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KLQlibGtubyA9IHNvLT5jdXJy UG9zLmN1cnJQYWdlOwotCWlmIChIYXNoU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSkKLQl7 Ci0JCS8qCi0JCSAqIFdlIGFscmVhZHkgaGF2ZSBwaW4gb24gdGhpcyBidWZmZXIsIHNvLCBhbGwg d2UgbmVlZCB0byBkbyBpcwotCQkgKiBhY3F1aXJlIGxvY2sgb24gaXQuCi0JCSAqLwotCQloYXZl UGluID0gdHJ1ZTsKLQkJYnVmID0gc28tPmN1cnJQb3MuYnVmOwotCQlMb2NrQnVmZmVyKGJ1Ziwg QlVGRkVSX0xPQ0tfU0hBUkUpOwotCX0KLQllbHNlCi0JCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWws IGJsa25vLCBIQVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0UpOwotCi0JcGFnZSA9IEJ1ZmZlckdl dFBhZ2UoYnVmKTsKLQlvcGFxdWUgPSBIYXNoUGFnZUdldE9wYXF1ZShwYWdlKTsKLQltYXhvZmYg PSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOwotCi0JZm9yIChpID0gMDsgaSA8IG51bUtp bGxlZDsgaSsrKQotCXsKLQkJaW50CQkJaXRlbUluZGV4ID0gc28tPmtpbGxlZEl0ZW1zW2ldOwot CQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRl eF07Ci0KLQkJb2ZmbnVtID0gY3Vyckl0ZW0tPmluZGV4T2Zmc2V0OwotCi0JCUFzc2VydChpdGVt SW5kZXggPj0gc28tPmN1cnJQb3MuZmlyc3RJdGVtICYmCi0JCQkgICBpdGVtSW5kZXggPD0gc28t PmN1cnJQb3MubGFzdEl0ZW0pOwotCi0JCXdoaWxlIChvZmZudW0gPD0gbWF4b2ZmKQotCQl7Ci0J CQlJdGVtSWQJCWlpZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsKLQkJCUluZGV4VHVw bGUJaXR1cGxlID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGlpZCk7Ci0KLQkJCWlm IChJdGVtUG9pbnRlckVxdWFscygmaXR1cGxlLT50X3RpZCwgJmN1cnJJdGVtLT5oZWFwVGlkKSkK LQkJCXsKLQkJCQlpZiAoIWtpbGxlZHNvbWV0aGluZykKLQkJCQl7Ci0JCQkJCS8qCi0JCQkJCSAq IFVzZSB0aGUgaGludCBiaXQgaW5mcmFzdHJ1Y3R1cmUgdG8gY2hlY2sgaWYgd2UgY2FuCi0JCQkJ CSAqIHVwZGF0ZSB0aGUgcGFnZSB3aGlsZSBqdXN0IGhvbGRpbmcgYSBzaGFyZSBsb2NrLiBJZiB3 ZQotCQkJCQkgKiBhcmUgbm90IGFsbG93ZWQsIHRoZXJlJ3Mgbm8gcG9pbnQgY29udGludWluZy4K LQkJCQkJICovCi0JCQkJCWlmICghQnVmZmVyQmVnaW5TZXRIaW50Qml0cyhidWYpKQotCQkJCQkJ Z290byB1bmxvY2tfcGFnZTsKLQkJCQl9Ci0KLQkJCQkvKiBmb3VuZCB0aGUgaXRlbSAqLwotCQkJ CUl0ZW1JZE1hcmtEZWFkKGlpZCk7Ci0JCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKLQkJCQli cmVhazsJCQkvKiBvdXQgb2YgaW5uZXIgc2VhcmNoIGxvb3AgKi8KLQkJCX0KLQkJCW9mZm51bSA9 IE9mZnNldE51bWJlck5leHQob2ZmbnVtKTsKLQkJfQotCX0KLQotCS8qCi0JICogU2luY2UgdGhp cyBjYW4gYmUgcmVkb25lIGxhdGVyIGlmIG5lZWRlZCwgbWFyayBhcyBkaXJ0eSBoaW50LiBXaGVu ZXZlcgotCSAqIHdlIG1hcmsgYW55dGhpbmcgTFBfREVBRCwgd2UgYWxzbyBzZXQgdGhlIHBhZ2Un cwotCSAqIExIX1BBR0VfSEFTX0RFQURfVFVQTEVTIGZsYWcsIHdoaWNoIGlzIGxpa2V3aXNlIGp1 c3QgYSBoaW50LgotCSAqLwotCWlmIChraWxsZWRzb21ldGhpbmcpCi0JewotCQlvcGFxdWUtPmhh c2hvX2ZsYWcgfD0gTEhfUEFHRV9IQVNfREVBRF9UVVBMRVM7Ci0JCUJ1ZmZlckZpbmlzaFNldEhp bnRCaXRzKGJ1ZiwgdHJ1ZSwgdHJ1ZSk7Ci0JfQotCi11bmxvY2tfcGFnZToKLQlpZiAoaGF2ZVBp bikKLQkJTG9ja0J1ZmZlcihzby0+Y3VyclBvcy5idWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7Ci0J ZWxzZQotCQlfaGFzaF9yZWxidWYocmVsLCBidWYpOwotfQpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL2luZGV4YW0uc2dtbCBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKaW5kZXggODcyNWZh MzZmLi42ZTFlNTExNjkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKKysr IGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbApAQCAtNzM1LDcgKzczNSw4IEBAIGFtYmVnaW5z Y2FuIChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfcmVj aGVjazwvbGl0ZXJhbD4gaGVyZSwgaW4KICAgIDxmdW5jdGlvbj5hbWJlZ2luc2NhbjwvZnVuY3Rp b24+LCBzaW5jZSB0aGUgdmFsdWUgYXBwbGllcyB0byBldmVyeSBpdGVtIHRoZQogICAgc2NhbiBy ZXR1cm5zLiAgVGhlIHZhbHVlIHNldCBoZXJlIHBlcnNpc3RzIGFjcm9zcyBhbnkgc3Vic2VxdWVu dAotICAgPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4gY2FsbHMuICBCLXRyZWUgKGFsd2F5 cyBmYWxzZSkgd29ya3MgdGhpcyB3YXkuCisgICA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9u PiBjYWxscy4gIEItdHJlZSAoYWx3YXlzIGZhbHNlKSBhbmQgaGFzaCAoYWx3YXlzCisgICB0cnVl KSB3b3JrIHRoaXMgd2F5LgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC04ODAsNyArODgxLDgg QEAgYW1nZXRiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgbWV0aG9kLiAgSXQgaXMgdXAg dG8gdGhlIHRhYmxlIEFNIGNhbGxlciB0byBkZWNpZGUgd2hlbiBpdCBzaG91bGQgYmUKICAgIHJl bGVhc2VkLiAgTm90ZSBhbHNvIHRoYXQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBm dW5jdGlvbnMgbXVzdAogICAgbmV2ZXIgbW9kaWZ5IHRoZSA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9s aXRlcmFsPiBwYXJhbWV0ZXIuICBUaGUgY29yZQotICAgPGZpbGVuYW1lPnNyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgYQorICAgPGZp bGVuYW1lPnNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvPC9maWxlbmFtZT4gYW5kCisgICA8Zmls ZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb25z IHByb3ZpZGUKICAgIHJlZmVyZW5jZSBleGFtcGxlcyBvZiB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UuCiAgIDwvcGFyYT4KIApAQCAtOTM4LDggKzk0MCw4IEBA IGFtdW5ndWFyZGJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICBpcyBub3QgZXZlbiByZXF1 aXJlZCB0byB1c2UgdGhlIHN0YW5kYXJkIGhlbHBlcgogICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRp bF91bmxvY2tfYmF0Y2g8L2Z1bmN0aW9uPiB0byBtYW5hZ2UgaXQuICBJbiBwcmFjdGljZSwKICAg IHRob3VnaCwgbW9zdCBvciBhbGwgaW5kZXggQU1zIHdpbGwgdXNlIHRoYXQgaGVscGVyIGFuZCBo b2xkIHRoZSBzaW1wbGVzdAotICAgcG9zc2libGUgaW50ZXJsb2NrOiBlYWNoIGd1YXJkZWQgQi10 cmVlIGJhdGNoIGtlZXBzIGEgc2luZ2xlIGJ1ZmZlciBwaW4KLSAgIG9uIHRoZSBvbmUgaW5kZXgg cGFnZSB0aGUgYmF0Y2ggY2FtZSBmcm9tLiAgU2VlIDx4cmVmCisgICBwb3NzaWJsZSBpbnRlcmxv Y2s6IGVhY2ggZ3VhcmRlZCBCLXRyZWUgb3IgaGFzaCBiYXRjaCBrZWVwcyBhIHNpbmdsZQorICAg YnVmZmVyIHBpbiBvbiB0aGUgb25lIGluZGV4IHBhZ2UgdGhlIGJhdGNoIGNhbWUgZnJvbS4gIFNl ZSA8eHJlZgogICAgIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4gZm9yIGRldGFpbHMgb24gYnVm ZmVyIHBpbiBtYW5hZ2VtZW50IGR1cmluZwogICAgaW5kZXggc2NhbnMuICBUaGlzIGZ1bmN0aW9u IHdpbGwgYmUgY2FsbGVkIGF0IG1vc3Qgb25jZSBmb3IgZWFjaCBndWFyZGVkCiAgICBiYXRjaDsg aXQgaXMgbm90IGNhbGxlZCB3aGVuIHRoZSBpbmRleCBBTSBoYXMgYWxyZWFkeSB1bmd1YXJkZWQg dGhlIGJhdGNoCkBAIC05NTAsMTAgKzk1MiwxMSBAQCBhbXVuZ3VhcmRiYXRjaCAoSW5kZXhTY2Fu RGVzYyBzY2FuLAogICA8bm90ZT4KICAgIDxwYXJhPgogICAgIFRoZSBpbmRleCBBTSBtYXkgY2hv b3NlIHRvIHJldGFpbiBpdHMgb3duIGJ1ZmZlciBwaW5zIHdoZW4gdGhpcyBzZXJ2ZXMgYW4KLSAg ICBpbnRlcm5hbCBwdXJwb3NlIChmb3IgZXhhbXBsZSwgbWFpbnRhaW5pbmcgYSBkZXNjZW50IHN0 YWNrIG9mIHBpbm5lZCBpbmRleAotICAgIHBhZ2VzIGZvciByZXVzZSBhY3Jvc3MgPGZ1bmN0aW9u PmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYWxscykuICBIb3dldmVyLAotICAgIGFueSBzY2hlbWUg dGhhdCByZXRhaW5zIGJ1ZmZlciBwaW5zIG1hbmFnZWQgYnkgdGhlIGluZGV4IEFNIG11c3QgYmUg c3VyZQotICAgIHRvIGZyZWUgdGhlIHBpbnMgYXQgYW4gb3Bwb3J0dW5lIHBvaW50IChhdCBhIG1p bmltdW0gd2hlbmV2ZXIKKyAgICBpbnRlcm5hbCBwdXJwb3NlIChmb3IgZXhhbXBsZSwgdGhlIGhh c2ggYWNjZXNzIG1ldGhvZCBrZWVwcyBhIHBpbiBvbiB0aGUKKyAgICBzY2FuJ3MgcHJpbWFyeSBi dWNrZXQgcGFnZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBzY2FuLCB3aGljaCBibG9ja3MgdGhl CisgICAgY29uY3VycmVudCBidWNrZXQgc3BsaXRzIGFuZCBjb21wYWN0aW9ucyB0aGF0IHdvdWxk IG90aGVyd2lzZSBkaXNydXB0IGl0KS4KKyAgICBIb3dldmVyLCBhbnkgc2NoZW1lIHRoYXQgcmV0 YWlucyBidWZmZXIgcGlucyBtYW5hZ2VkIGJ5IHRoZSBpbmRleCBBTSBtdXN0CisgICAgYmUgc3Vy ZSB0byBmcmVlIHRoZSBwaW5zIGF0IGFuIG9wcG9ydHVuZSBwb2ludCAoYXQgYSBtaW5pbXVtIHdo ZW5ldmVyCiAgICAgPGZ1bmN0aW9uPmFtZW5kc2NhbjwvZnVuY3Rpb24+IGlzIGNhbGxlZCwgYW5k IHR5cGljYWxseSB3aGVuCiAgICAgPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4gaXMgY2Fs bGVkKS4gIEl0IG11c3QgYWxzbyBrZWVwIHRoZSBudW1iZXIgb2YKICAgICByZXRhaW5lZCBwaW5z IGZpeGVkIGFuZCBzbWFsbC4KQEAgLTk4Miw4ICs5ODUsOCBAQCBhbWtpbGxpdGVtc2JhdGNoIChJ bmRleFNjYW5EZXNjIHNjYW4sCiAgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlu ZGV4IEFNcyAodGhvc2UgdGhhdCBkb24ndCBjYW4gbGVhdmUKICAgIHRoZSBmaWVsZCBzZXQgdG8g PGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4pLCBidXQgZG9pbmcgc28gaXMgcmVjb21tZW5kZWQgZm9y CiAgICBwZXJmb3JtYW5jZSwgYXMgaXQgYWxsb3dzIGZ1dHVyZSBzY2FucyB0byBza2lwIGtub3du LWRlYWQgaW5kZXggZW50cmllcy4KLSAgIFRoZSBjb3JlIGluZGV4IGFjY2VzcyBtZXRob2QgdGhh dCBjdXJyZW50bHkgc3VwcG9ydHMKLSAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g KEItdHJlZSkgaW1wbGVtZW50cworICAgQm90aCBjb3JlIGluZGV4IGFjY2VzcyBtZXRob2RzIHRo YXQgY3VycmVudGx5IHN1cHBvcnQKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g KEItdHJlZSBhbmQgaGFzaCkgaW1wbGVtZW50CiAgICA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFs PiBtYXJraW5nLCB0aG91Z2ggdGhpcmQtcGFydHkgaW5kZXggYWNjZXNzIG1ldGhvZHMKICAgIGFy ZSBmcmVlIHRvIGNob29zZSB3aGV0aGVyIHRvIGltcGxlbWVudCB0aGlzIGZlYXR1cmUuICBUaGUg dGFibGUgQU0gbWF5CiAgICBjYWxsIDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfc2NhbnBvc19raWxs aXRlbTwvZnVuY3Rpb24+IHRvIG1hcmsgZGVhZCBpdGVtcyBhcwpAQCAtMTAyNSw3ICsxMDI4LDgg QEAgYW1raWxsaXRlbXNiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgPGNvbW1hbmQ+VkFD VVVNPC9jb21tYW5kPiByZWN5Y2xpbmcgdGFibGUgVElEcyAmbWRhc2g7IHNvIGl0IHdvdWxkIGJl CiAgICB1bnNhZmUgdG8gYXNzdW1lIHRoYXQgaW5kZXggZW50cmllcyBzdGlsbCBwb2ludCB0byB0 aGUgc2FtZSBoZWFwL3RhYmxlCiAgICB0dXBsZXMuICBTaW5jZSA8bGl0ZXJhbD5MUF9ERUFEPC9s aXRlcmFsPiBtYXJraW5nIGlzIG9ubHkgYW4gb3B0aW1pemF0aW9uCi0gICBoaW50LCBpdCBpcyBh bHdheXMgc2FmZSB0byBza2lwIGl0LiAgQi10cmVlIHVzZXMgdGhpcyBhcHByb2FjaC4KKyAgIGhp bnQsIGl0IGlzIGFsd2F5cyBzYWZlIHRvIHNraXAgaXQuICBCb3RoIEItdHJlZSBhbmQgaGFzaCB1 c2UgdGhpcworICAgYXBwcm9hY2guCiAgIDwvcGFyYT4KIAogICA8d2FybmluZz4KQEAgLTExMTUs OCArMTExOSw4IEBAIGFtZ2V0Yml0bWFwIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICA8ZnVuY3Rp b24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBzY2FuczsgZHVyaW5nCiAgICA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IHNjYW5zIHRoZSA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFs PgogICAgaXMgc3RyaWN0bHkgb3duZWQgYnkgdGhlIGNhbGxlciAodGhlIHRhYmxlIEFNKSwgYW5k IHRoZSBpbmRleCBBTSBtdXN0Ci0gICBuZXZlciByZWxlYXNlIGl0LiAgU2VlIDxmdW5jdGlvbj5f YnRfbmV4dDwvZnVuY3Rpb24+IGZvciBhIHJlZmVyZW5jZQotICAgZXhhbXBsZS4KKyAgIG5ldmVy IHJlbGVhc2UgaXQuICBTZWUgPGZ1bmN0aW9uPl9idF9uZXh0PC9mdW5jdGlvbj4gYW5kCisgICA8 ZnVuY3Rpb24+X2hhc2hfbmV4dDwvZnVuY3Rpb24+IGZvciByZWZlcmVuY2UgZXhhbXBsZXMuCiAg IDwvcGFyYT4KIAogICA8cGFyYT4KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggODQ2NTli MTdhLi40NDZlNjhhODQgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMjMzLDYgKzEy MzMsNyBAQCBIYXNoCiBIYXNoQWdnQmF0Y2gKIEhhc2hBZ2dTcGlsbAogSGFzaEFsbG9jRnVuYwor SGFzaEJhdGNoRGF0YQogSGFzaEJ1aWxkU3RhdGUKIEhhc2hCdWxrRGVsZXRlU3RyZWFtUHJpdmF0 ZQogSGFzaENvbXBhcmVGdW5jCkBAIC0xMjU0LDggKzEyNTUsNiBAQCBIYXNoUGFnZVN0YXQKIEhh c2hQYXRoCiBIYXNoU2Nhbk9wYXF1ZQogSGFzaFNjYW5PcGFxdWVEYXRhCi1IYXNoU2NhblBvc0Rh dGEKLUhhc2hTY2FuUG9zSXRlbQogSGFzaFNrZXdCdWNrZXQKIEhhc2hTdGF0ZQogSGFzaFZhbHVl RnVuYwotLSAKMi41My4wCgo= --0000000000004ffa5f0654ddc4ef Content-Type: application/octet-stream; name="v28-0003-Limit-get_actual_variable_range-leaf-page-reads.patch" Content-Disposition: attachment; filename="v28-0003-Limit-get_actual_variable_range-leaf-page-reads.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqpot0fu9 RnJvbSA3YjRiNDkyMzcyYTY2N2IxOGRjNTk4ZGQ0N2YwNWI2OTI4MTU0OWUzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFNh dCwgMjAgSnVuIDIwMjYgMTE6MTg6NTkgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyOCAwMy8xMV0g TGltaXQgZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZSBsZWFmIHBhZ2UgcmVhZHMuCgpnZXRfYWN0 dWFsX3ZhcmlhYmxlX3JhbmdlIHNjYW5zIGFuIGluZGV4IHRvIGZpbmQgYWN0dWFsIG1pbi9tYXgg dmFsdWVzCmZvciBwbGFubmVyIHNlbGVjdGl2aXR5IGVzdGltYXRpb24uICBTaW5jZSB0aGlzIGhh cHBlbnMgZHVyaW5nIHBsYW5uaW5nLAp3ZSBjYW4ndCBhZmZvcmQgdG8gc3BlbmQgdG9vIG11Y2gg dGltZSBvbiBpdC4gIENvbW1pdCA5YzZhZDVlYWE5IGFkZGVkClZJU0lURURfUEFHRVNfTElNSVQg KGEgbGltaXQgb2YgMTAwIGhlYXAgcGFnZSB2aXNpdHMpIHRvIGJvdW5kIHRoZQphbW91bnQgb2Yg d29yayBwZXJmb3JtZWQsIGdpdmluZyB1cCBhbmQgZmFsbGluZyBiYWNrIHRvIHRoZSBwZ19zdGF0 aXN0aWMKZXh0cmVtYWwgdmFsdWUgd2hlbiB0aGUgbGltaXQgaXMgZXhjZWVkZWQuICBCdXQgdGhh dCBpc24ndCBlZmZlY3RpdmUgaW4KY2FzZXMgd2l0aCBtb3JlIGV4dHJlbWUgY29uY2VudHJhdGlv bnMgb2YgZGVhZCBpbmRleCB0dXBsZXMuCgpCZW5jaG1hcmsgcmVzdWx0cyBmcm9tIE1hcmsgQ2Fs bGFnaGFuIHNob3cgdGhhdCBWSVNJVEVEX1BBR0VTX0xJTUlUCnN0b3BzIGJlaW5nIGVmZmVjdGl2 ZSBvbmNlIHRoZSBkZWFkIGluZGV4IHR1cGxlIHByb2JsZW0gZ2V0cyBvdXQgb2YgaGFuZAood2hp Y2ggaXMgZXhwZWN0ZWQgd2l0aCBxdWV1ZS1saWtlIHRhYmxlcyB0aGF0IGNvbnRpbnVhbGx5IGRl bGV0ZSBvbGRlcgpyZWNvcmRzIGFuZCBpbnNlcnQgbmV3ZXIgb25lcykuICBWSVNJVEVEX1BBR0VT X0xJTUlUIGNvdW50cyBoZWFwIHBhZ2UKdmlzaXRzLCBidXQgd2hlbiBtYW55IGluZGV4IHR1cGxl cyBhcmUgbWFya2VkIExQX0RFQUQsIF9idF9yZWFkcGFnZQp0cmF2ZXJzZXMgYXJiaXRyYXJpbHkg bWFueSBpbmRleCBwYWdlcyB3aXRob3V0IHJldHVybmluZyBhbnkgdHVwbGVzLgpUaGUgaGVhcCBw YWdlIGNvdW50ZXIgbmV2ZXIgZ2V0cyBhIGNoYW5jZSB0byBpbmNyZW1lbnQsIHNvClZJU0lURURf UEFHRVNfTElNSVQgbmV2ZXIgdHJpZ2dlcnMuICBUaGUgbW9yZSBMUF9ERUFEIGJpdHMgd2Ugc2V0 LCB0aGUKbGVzcyBlZmZlY3RpdmUgdGhlIGxpbWl0IGJlY29tZXMgYXQgYmFpbGluZyBvdXQgZWFy bHkuCgpBZGQgYSBjb21wbGVtZW50YXJ5IG1lY2hhbmlzbSB0aGF0IGxpbWl0cyBnZXRfYWN0dWFs X3ZhcmlhYmxlX3JhbmdlIHRvCnNjYW5uaW5nIG9ubHkgdGhyZWUgaW5kZXggbGVhZiBwYWdlcyAo SU5ERVhfUEFHRVNfTElNSVQtbWFueSBwYWdlcykgdGhhdApoYXZlIGV4YWN0bHkgemVybyBtYXRj aGluZyBpdGVtcy90aGF0IHdvbid0IHJldHVybiBhIGJhdGNoLiAgV2hlbiB0aGUKbGltaXQgaXMg ZXhjZWVkZWQsIHRoZSBzY2FuIHJldHVybnMgd2l0aG91dCByZXR1cm5pbmcgYW55IG1hdGNoZXMs CmZvcmNpbmcgZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZSB0byBnaXZlIHVwLgoKSU5ERVhfUEFH RVNfTElNSVQgcHJvdmlkZXMgYSBiYWNrc3RvcCBhZ2FpbnN0IHJlYWRpbmcgYW4gZXhjZXNzaXZl Cm51bWJlciBvZiBsZWFmIHBhZ2VzLCB3aXRob3V0IGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgdGhl IGV4aXN0aW5nClZJU0lURURfUEFHRVNfTElNSVQgZGVzaWduLiAgTGVhZiBwYWdlIHJlYWRzIHRo YXQgcmV0dXJuIGEgYmF0Y2ggd2l0aCBhdApsZWFzdCBvbmUgbWF0Y2hpbmcgaXRlbSBhcmVuJ3Qg dGFsbGllZCBhZ2FpbnN0IHRoZSBuZXcgbGltaXQuICBUaGlzCmJhbGFuY2VzIHRoZSBuZWVkIGZv ciBnZXRfYWN0dWFsX3ZhcmlhYmxlX3JhbmdlIHRvIGxvY2F0ZSBhIG1pbi9tYXgKdmFsdWUgd2hl biB0aGF0J3MgZmVhc2libGUgYWdhaW5zdCB0aGUgbmVlZCB0byBib3VuZCB0aGUgYW1vdW50IG9m CndvcmsgaXQgbXVzdCBwZXJmb3JtIHRvIGRvIHNvLgoKQXV0aG9yOiBQZXRlciBHZW9naGVnYW4g PHBnQGJvd3QuaWU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xemt0MVdr S3A0VlJKdTNxSGZtS1hjOFcrWFl2MVJYZzVkMmQzZlN2QWVPPXJnQG1haWwuZ21haWwuY29tCi0t LQogc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oICAgICAgICAgICB8ICA2ICsrKysrKwogc3Jj L2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAgICAgICB8ICAzICsrLQogc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2dlbmFtLmMgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0cmVlLmMgICAgfCAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJj aC5jIHwgMTMgKysrKysrKysrKystLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMg ICAgICB8IDEwICsrKysrKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgMzEgaW5zZXJ0aW9ucygrKSwg MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKaW5kZXggMDI1NGEyMjNlLi5lNzA2NDgxM2Eg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvbmJ0cmVlLmgKQEAgLTk5OCw2ICs5OTgsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRT Y2FuT3BhcXVlRGF0YQogCUJUQXJyYXlLZXlJbmZvICphcnJheUtleXM7CS8qIGluZm8gYWJvdXQg ZWFjaCBlcXVhbGl0eS10eXBlIGFycmF5IGtleSAqLwogCUZtZ3JJbmZvICAgKm9yZGVyUHJvY3M7 CQkvKiBPUkRFUiBwcm9jcyBmb3IgcmVxdWlyZWQgZXF1YWxpdHkga2V5cyAqLwogCU1lbW9yeUNv bnRleHQgYXJyYXlDb250ZXh0OyAvKiBzY2FuLWxpZmVzcGFuIGNvbnRleHQgZm9yIGFycmF5IGRh dGEgKi8KKworCS8qCisJICogUnVubmluZyBjb3VudCBvZiBsZWFmIHBhZ2VzIHJlYWQgd2l0aG91 dCBmaW5kaW5nIGEgbWF0Y2gsIGNvbXBhcmVkCisJICogYWdhaW5zdCBzY2FuLT54c19pbmRleF9w YWdlc19saW1pdCB0byBib3VuZCBwbGFubmVyIHNjYW5zCisJICovCisJaW50CQkJbnVtTm9NYXRj aFBhZ2VzOwkvKiBuby1iYXRjaC1yZXR1cm5lZCBsZWFmIHBhZ2UgY291bnQgKi8KIH0gQlRTY2Fu T3BhcXVlRGF0YTsKIAogdHlwZWRlZiBCVFNjYW5PcGFxdWVEYXRhICpCVFNjYW5PcGFxdWU7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3JlbHNjYW4uaAppbmRleCAyZjIzMTQ4NDMuLmYyZjY2ZTM2NyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nh bi5oCkBAIC00MDQsMTIgKzQwNCwxMyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0 YQogCWludAkJCXhzX25hbWVfY3N0cmluZ19jb3VudDsKIAogCS8qCi0JICogQW4gYXBwcm94aW1h dGUgbGltaXQgb24gdGhlIGFtb3VudCBvZiB3b3JrLCBtZWFzdXJlZCBpbiBwYWdlcyB0b3VjaGVk LAorCSAqIEFwcHJveGltYXRlIGxpbWl0cyBvbiB0aGUgYW1vdW50IG9mIHdvcmssIG1lYXN1cmVk IGluIHBhZ2VzIHRvdWNoZWQsCiAJICogaW1wb3NlZCBvbiB0aGUgaW5kZXggc2Nhbi4gIFRoZSBk ZWZhdWx0LCAwLCBtZWFucyBubyBsaW1pdC4gIE9ubHkKIAkgKiBob25vcmVkIGR1cmluZyBpbmRl eC1vbmx5IHNjYW5zLiAgVXNlZCBieSBzZWxmdW5jcy5jIHRvIGJvdW5kIHRoZSBjb3N0CiAJICog b2YgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludCgpLgogCSAqLwogCXVpbnQ4CQl4c192aXNp dGVkX3BhZ2VzX2xpbWl0OworCXVpbnQ4CQl4c19pbmRleF9wYWdlc19saW1pdDsKIAogCS8qIHBh cmFsbGVsIGluZGV4IHNjYW4gaW5mb3JtYXRpb24sIGluIHNoYXJlZCBtZW1vcnkgKi8KIAlzdHJ1 Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YSAqcGFyYWxsZWxfc2NhbjsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2dlbmFtLmMKaW5kZXggNTQwNDJmNmY1Li5jYTliYWU4MDMgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9nZW5hbS5jCkBAIC0xMzksNiArMTM5LDcgQEAgUmVsYXRpb25HZXRJbmRleFNjYW4oUmVsYXRp b24gaW5kZXhSZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNjYW4tPnhzX25h bWVfY3N0cmluZ19jb3VudCA9IDA7CiAKIAlzY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0ID0g MDsKKwlzY2FuLT54c19pbmRleF9wYWdlc19saW1pdCA9IDA7CiAKIAlyZXR1cm4gc2NhbjsKIH0K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCmluZGV4IDU5MzllNzI4Zi4uYjgzOTI2ZjlmIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKQEAgLTM0NCw2ICszNDQsNyBAQCBidGJlZ2lu c2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzby0+YXJyYXlL ZXlzID0gTlVMTDsKIAlzby0+b3JkZXJQcm9jcyA9IE5VTEw7CiAJc28tPmFycmF5Q29udGV4dCA9 IE5VTEw7CisJc28tPm51bU5vTWF0Y2hQYWdlcyA9IDA7CiAKIAlzY2FuLT5vcGFxdWUgPSBzbzsK IAlzY2FuLT54c19yZWNoZWNrID0gZmFsc2U7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFy Y2guYwppbmRleCA0Yzk0YjllNTkuLjg4Yzg3NzgxYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRzZWFyY2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHNlYXJjaC5jCkBAIC0xNzUwLDYgKzE3NTAsNyBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkJIEJsb2NrTnVtYmVyIGxhc3Rj dXJyYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlv bglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOworCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5P cGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlJbmRleFNjYW5CYXRjaCBuZXdiYXRjaDsKIAlCVEJhdGNo RGF0YSAqYnRuZXdiYXRjaDsKIApAQCAtMTgzMiwxMCArMTgzMywxOCBAQCBfYnRfcmVhZG5leHRw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCS8qIG5vIG1hdGNo aW5nIHR1cGxlcyBvbiB0aGlzIHBhZ2UgKi8KIAkJX2J0X3JlbGJ1ZihyZWwsIGJ0bmV3YmF0Y2gt PmJ1Zik7CiAKLQkJLyogQ29udGludWUgdGhlIHNjYW4gaW4gdGhpcyBkaXJlY3Rpb24/ICovCisJ CS8qCisJCSAqIENvbnRpbnVlIHRoZSBzY2FuIGluIHRoaXMgZGlyZWN0aW9uPworCQkgKgorCQkg KiBBbHNvIGdpdmUgdXAgaWYgYW4gb3B0ZWQtaW4gcGxhbm5lciBzY2FuIChzZWxmdW5jcy5jKSBo YXMgbm93IHJlYWQKKwkJICogdG9vIG1hbnkgbGVhZiBwYWdlcyB3aXRob3V0IGEgbWF0Y2guICBU aGlzIGJvdW5kcyBwbGFubmluZyB0aW1lCisJCSAqIHdoZW4gdGhlIHNjYW5uZWQgZW5kIG9mIHRo ZSBpbmRleCBpcyBmdWxsIG9mIExQX0RFQUQtbWFya2VkIGl0ZW1zLgorCQkgKi8KIAkJaWYgKGJs a25vID09IFBfTk9ORSB8fAogCQkJKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/Ci0JCQkg IWJ0bmV3YmF0Y2gtPm1vcmVSaWdodCA6ICFidG5ld2JhdGNoLT5tb3JlTGVmdCkpCisJCQkgIWJ0 bmV3YmF0Y2gtPm1vcmVSaWdodCA6ICFidG5ld2JhdGNoLT5tb3JlTGVmdCkgfHwKKwkJCSh1bmxp a2VseShzY2FuLT54c19pbmRleF9wYWdlc19saW1pdCA+IDApICYmCisJCQkgKytzby0+bnVtTm9N YXRjaFBhZ2VzID4gc2Nhbi0+eHNfaW5kZXhfcGFnZXNfbGltaXQpKQogCQl7CiAJCQkvKgogCQkJ ICogYmxrbm8gX2J0X3JlYWRwYWdlIGNhbGwgZW5kZWQgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAo dGhvdWdoIGlmCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCmluZGV4IGZiOTc4ZjBjZi4uMTM2NmY0 OTg4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwpAQCAtNzE4NSw4ICs3MTg1LDE3IEBAIGdl dF9hY3R1YWxfdmFyaWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAkgKiBXZSBzZXQg eHNfdmlzaXRlZF9wYWdlc19saW1pdCB0byB0ZWxsIHRoZSB0YWJsZSBBTSB0byBjb3VudCBkaXN0 aW5jdAogCSAqIGhlYXAgcGFnZXMgdmlzaXRlZCBmb3Igbm9uLXZpc2libGUgdHVwbGVzIGFuZCBn aXZlIHVwIGFmdGVyIHRoZSBsaW1pdAogCSAqIGlzIGV4Y2VlZGVkLgorCSAqCisJICogV2UgYWxz byBzZXQgeHNfaW5kZXhfcGFnZXNfbGltaXQgdG8gaW5kZXBlbmRlbnRseSB0ZWxsIHRoZSBpbmRl eCBBTSB0bworCSAqIGdpdmUgdXAgd2hlbiB0aGlzIG1hbnkgbGVhZiBwYWdlcyB0aGF0IGxhY2sg ZXZlbiBvbmUgbWF0Y2hpbmcgaW5kZXgKKwkgKiB0dXBsZSBoYXZlIGJlZW4gcmVhZC4gIFRoaXMg YWN0cyBhcyBhIGJhY2tzdG9wIGFnYWluc3QgcGFnZXMgZW50aXJlbHkKKwkgKiBmdWxsIG9mIGlu ZGV4IGVudHJpZXMgdGhhdCB3ZXJlIGFscmVhZHkgbWFya2VkIGtpbGxlZCAodHlwaWNhbGx5IGJ5 CisJICogcHJpb3IgY2FsbHMgaGVyZSkuICBUaGF0IHdheSB3ZSBhdm9pZCBob3BlbGVzc2x5IHNl YXJjaGluZyB0aHJvdWdoIGFuCisJICogdW5ib3VuZGVkIG51bWJlciBvZiBpbmRleCBsZWFmIHBh Z2VzIHRoYXQgZG9uJ3QgY29udGFpbiBldmVuIGEgc2luZ2xlCisJICogc3RpbGwtbGl2ZSBlbnRy eSAod2hpY2ggY2FuJ3QgdHJpZ2dlciB4c192aXNpdGVkX3BhZ2VzX2xpbWl0KS4KIAkgKi8KICNk ZWZpbmUgVklTSVRFRF9QQUdFU19MSU1JVCAxMDAKKyNkZWZpbmUgSU5ERVhfUEFHRVNfTElNSVQg MwogCUluaXROb25WYWN1dW1hYmxlU25hcHNob3QoU25hcHNob3ROb25WYWN1dW1hYmxlLAogCQkJ CQkJCSAgR2xvYmFsVmlzVGVzdEZvcihoZWFwUmVsKSk7CiAKQEAgLTcxOTYsNiArNzIwNSw3IEBA IGdldF9hY3R1YWxfdmFyaWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAkJCQkJCQkJ IFNPX05PTkUpOwogCUFzc2VydChpbmRleF9zY2FuLT54c193YW50X2l0dXApOwogCWluZGV4X3Nj YW4tPnhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQgPSBWSVNJVEVEX1BBR0VTX0xJTUlUOworCWluZGV4 X3NjYW4tPnhzX2luZGV4X3BhZ2VzX2xpbWl0ID0gSU5ERVhfUEFHRVNfTElNSVQ7CiAJaW5kZXhf cmVzY2FuKGluZGV4X3NjYW4sIHNjYW5rZXlzLCAxLCBOVUxMLCAwKTsKIAogCS8qIEZldGNoIGZp cnN0L25leHQgdHVwbGUgaW4gc3BlY2lmaWVkIGRpcmVjdGlvbiAqLwotLSAKMi41My4wCgo= --0000000000004ffa5f0654ddc4ef Content-Type: application/octet-stream; name="v28-0002-Add-amgetbatch-interface-and-adopt-it-in-nbtree.patch" Content-Disposition: attachment; filename="v28-0002-Add-amgetbatch-interface-and-adopt-it-in-nbtree.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqpot0fy10 RnJvbSA0MmMxMzY3NjFkMjczNWU2OTI4OTZhOWU3YjMxNzg5MDg5MTM1ZWM1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NDg6NDMgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyOCAwMi8xMV0g QWRkIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGFuZCBhZG9wdCBpdCBpbiBuYnRyZWUuCgpBZGQgYSBu ZXcgYW1nZXRiYXRjaCBpbmRleCBBTSBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgaW5kZXggYWNjZXNz IG1ldGhvZHMKdG8gaW1wbGVtZW50IHBsYWluIGluZGV4IHNjYW5zIGFuZCBpbmRleC1vbmx5IHNj YW5zIHRoYXQgcmV0dXJuIGluZGV4CmVudHJpZXMgaW4gYmF0Y2hlcyBjb21wcmlzaW5nIGFsbCBt YXRjaGluZyBpdGVtcyBmcm9tIGFuIGluZGV4IHBhZ2UsCnJhdGhlciB0aGFuIG9uZSBtYXRjaCBh dCBhIHRpbWUuICBBbHNvIHN3aXRjaCBuYnRyZWUgb3ZlciBmcm9tCmFtZ2V0dHVwbGUgdG8gdGhl IG5ldyBhbWdldGJhdGNoIGludGVyZmFjZS4KClRoZSBuZXcgaW50ZXJmYWNlIGFsbG93cyB0aGUg dGFibGUgQU0gdG8gYXBwbHkga25vd2xlZGdlIG9mIHdoaWNoIFRJRHMKd2lsbCBiZSByZXR1cm5l ZCB0byB0aGUgc2NhbiBpbiB0aGUgbmVhciBmdXR1cmUgdG8gcGVyZm9ybSBvcHRpbWl6YXRpb25z Cmxpa2UgSS9PIHByZWZldGNoaW5nLiAgUHJlZmV0Y2hpbmcgaXMgc2V0IHRvIGJlIGFkZGVkIGJ5 IGFuIHVwY29taW5nIGNvbW1pdC4KCldpdGggYW1nZXRiYXRjaCwgYSBzY2FuLWxldmVsIHBvbGlj eSBkZXRlcm1pbmVzIHdoZXRoZXIgZWFjaCBiYXRjaCdzCmluZGV4IHBhZ2UgYnVmZmVyIHBpbiBp cyBkcm9wcGVkIGVhZ2VybHkgYnkgdGhlIGluZGV4IEFNIChmb3IgcGxhaW4Kc2NhbnMgd2l0aCBh biBNVkNDIHNuYXBzaG90LCB3aGVyZSB0aGUgc25hcHNob3QgaXRzZWxmIHByZXZlbnRzIFRJRApy ZWN5Y2xpbmcgcHJvYmxlbXMpIG9yIHJldGFpbmVkIGFzIGFuIGludGVybG9jayBhZ2FpbnN0IGNv bmN1cnJlbnQgVElECnJlY3ljbGluZyBieSBWQUNVVU0uICBUaGUgaW50ZXJsb2NrIGlzIHJldGFp bmVkIGZvciBwbGFpbiBub24tTVZDQyBzY2FucwphbmQgZm9yIGluZGV4LW9ubHkgc2NhbnMsIGFu ZCBpcyBkcm9wcGVkIGJ5IHRoZSB0YWJsZSBBTSB2aWEgdGhlIG5ldwphbXVuZ3VhcmRiYXRjaCBj YWxsYmFjayB3aGVuIGl0IGlzIHNhZmUgdG8gZG8gc28uIChBY3R1YWxseSwgaW5kZXggQU1zCmFy ZSB1c3VhbGx5IGFibGUgdG8gZHJvcCB0aGUgcGluIGF0IHRoZSBzYW1lIHRpbWUgdGhhdCB0aGV5 IHJlbGVhc2UgdGhlCmxvY2suICBJbiBwcmFjdGljZSwgdGhlIGFtdW5ndWFyZGJhdGNoIGNhbGxi YWNrIGlzIG9ubHkgcmVhbGx5IG5lZWRlZApkdXJpbmcgaW5kZXgtb25seSBzY2Fucywgd2hlcmUg ZHJvcHBpbmcgdGhlIHBpbiBpbnRlcmxvY2sgbWlnaHQgbmVlZCB0bwpiZSBkZWxheWVkIGV2ZXIg c28gc2xpZ2h0bHksIGFzIGV4cGxhaW5lZCBiZWxvdy4pCgpUaGlzIGV4dGVuZHMgdGhlIGRyb3BQ aW4gbWVjaGFuaXNtIGFkZGVkIHRvIG5idHJlZSBieSBjb21taXQgMmVkNWI4N2YsCmFuZCBnZW5l cmFsaXplcyBpdCB0byB3b3JrIHdpdGggYWxsIGluZGV4IEFNcyB0aGF0IHN1cHBvcnQgdGhlIG5l dwphbWdldGJhdGNoIGludGVyZmFjZSAoTFBfREVBRCBtYXJraW5nIG9mIGluZGV4IGVudHJpZXMg bXVzdCBiZSBwZXJmb3JtZWQKYnkgaW1wbGVtZW50aW5nIHRoZSBuZXcgYW1raWxsaXRlbXNiYXRj aCBjYWxsYmFjaywgd2hpY2ggaGFzIGEKZG9jdW1lbnRlZCBjb250cmFjdCBkZXNjcmliaW5nIGhv dyBpbmRleCBBTXMgbXVzdCByZWFzb24gYWJvdXQKY29uY3VycmVudCBUSUQgcmVjeWNsaW5nKS4g IFNjYW5zIGNhbiBhbHdheXMgc2FmZWx5IGRyb3AgaW5kZXggcGFnZSBwaW5zCmVhZ2VybHksIHBy b3ZpZGVkIHRoZSBzY2FuIHVzZXMgYW4gTVZDQyBzbmFwc2hvdCAodW5saWtlIHRoZSBuYnRyZWUK ZHJvcFBpbiBvcHRpbWl6YXRpb24sIHdoaWNoIGhhZCBubyB3YXkgb2YgZG9pbmcgdGhpcyBzYWZl bHkgZHVyaW5nCmluZGV4LW9ubHkgc2NhbnMgZHVlIHRvIGhvdyBhbWdldHR1cGxlIHdvcmtzLCBh bmQgb25seSBnYWluZWQgc3VwcG9ydApmb3Igc2NhbnMgb2YgdW5sb2dnZWQgcmVsYXRpb25zIGlu IHJlY2VudCBjb21taXQgOGE4NzkxMTkpLgoKVGhlIG9sZCBhbW1hcmtwb3MgYW5kIGFtcmVzdHJw b3MgaW5kZXggQU0gY2FsbGJhY2tzIGFyZSByZW1vdmVkLiAgV2l0aAphbWdldGJhdGNoLCBtYXJr L3Jlc3RvcmUgb2Ygc2NhbiBwb3NpdGlvbnMgaXMgbWFuYWdlZCBieSB0aGUgdGFibGUgQU0sCndp dGggaGVscCBmcm9tIGluZGV4YmF0Y2guYyB1dGlsaXR5IGZ1bmN0aW9ucywgcmF0aGVyIHRoYW4g YmVpbmcgd2hvbGx5CmRlbGVnYXRlZCB0byB0aGUgaW5kZXggQU0uICBUaGUgbmV3IGluZGV4X3Nj YW5fbWFya3BvcyBhbmQKaW5kZXhfc2Nhbl9yZXN0cnBvcyB0YWJsZSBBTSBjYWxsYmFja3MgbXVz dCBiZSBpbXBsZW1lbnRlZCB0byBtYWtlIGFsbAp0aGlzIHdvcmsuICBBcyBhIGZ1cnRoZXIgY29u ZGl0aW9uLCBtYXJrL3Jlc3RvcmUgaXMgb25seSBzdXBwb3J0ZWQgYnkKaW5kZXggQU1zIHRoYXQg b3B0IGluIGJ5IHNldHRpbmcgdGhlIG5ldyBhbWNhbm1hcmtwb3MgZmxhZyAob25seSBuYnRyZWUK c2V0cyB0aGlzIHRvIHRydWUpLiAgVGhpcyBhbWNhbm1hcmtwb3MgZmxhZyBzY2hlbWUgYXZvaWRz IHRoZSBhc3N1bXB0aW9uCnRoYXQgZXZlcnkgaW5kZXggQU0gaXMgY2FwYWJsZSBvZiBwaWNraW5n IHVwIGEgc2NhbiBmcm9tIGEgcHJldmlvdXNseQpzYXZlZCBtYXJrQmF0Y2guCgpBbiB1cGNvbWlu ZyBjb21taXQgdGhhdCB3aWxsIGFkZCBpbmRleCBwcmVmZXRjaGluZyB3aWxsIHVzZSBhIHJlYWQK c3RyZWFtIHRvIHJlYWQgaGVhcCBwYWdlcyBkdXJpbmcgaW5kZXggc2NhbnMuICBSZWFkIHN0cmVh bSBpcyBjYXJlZnVsIHRvCmxpbWl0IGhvdyBtYW55IHRoaW5ncyBpdCBwaW5zLCBsZXN0IHdlIHJ1 biBpbnRvIHByb2JsZW1zIGR1ZSB0byBoYXZpbmcKdG9vIG1hbnkgYnVmZmVycyBwaW5uZWQuICBT aW1wbHkgbmV2ZXIgaG9sZGluZyBvbiB0byBpbmRleCBwYWdlIGJ1ZmZlcgpwaW5zIGdyZWF0bHkg c2ltcGxpZmllcyByZXNvdXJjZSBtYW5hZ2VtZW50IGZvciBpbmRleCBwcmVmZXRjaGluZzsKdGhl cmUncyBubyByaXNrIG9mIHVuaW50ZW5kZWQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIHJlYWQg c3RyZWFtIGFuZAppbmRleCBBTS4gIFRoZSBvbmx5IGRvd25zaWRlIGlzIHRoYXQgd2UgY2Fubm90 IHN1cHBvcnQgcHJlZmV0Y2hpbmcKZHVyaW5nIHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25h cHNob3QsIHdoaWNoIHNlZW1zIHF1aXRlIGFjY2VwdGFibGUuCgpJbiBwcmFjdGljZSwgaGVhcGFt IGRvZXNuJ3QgZHJvcCBlYWNoIGJhdGNoJ3MgaW5kZXggcGFnZSBidWZmZXIgcGluIGF0CnRoZSBl YXJsaWVzdCBvcHBvcnR1bml0eSBkdXJpbmcgaW5kZXgtb25seSBzY2Fucy4gIFRoaXMgd2FzIGRl ZW1lZApuZWNlc3NhcnkgdG8gYXZvaWQgcmVncmVzc2luZyBpbmRleC1vbmx5IHNjYW5zIHdpdGgg YSBMSU1JVCwgaW4KcGFydGljdWxhciB3aXRoIG5lc3Rsb29wIGFudGktam9pbnMgYW5kIG5lc3Rs b29wIHNlbWktam9pbnM7IGVhZ2VybHkKbG9hZGluZyBhbGwgdGhlIHZpc2liaWxpdHkgaW5mb3Jt YXRpb24gdXAgZnJvbnQgcmVncmVzc2VkIHN1Y2ggcXVlcmllcy4KVGhlIG5ldyBhbWdldGJhdGNo IGludGVyZmFjZSBnaXZlcyB0YWJsZSBBTXMgdGhlIGF1dGhvcml0eSB0byBkZWNpZGUKd2hlbiB0 byBkcm9wIGluZGV4IHBhZ2UgcGlucy91bmd1YXJkIGJhdGNoZXMsIHNvIHRoaXMgY2FuIGJlIGNv bnNpZGVyZWQKYSBoZWFwYW0gaW1wbGVtZW50YXRpb24gZGV0YWlsIChpbmRleCBBTXMgZG9uJ3Qg bmVlZCB0byBrbm93IGFib3V0IGl0KS4KVGhpcyBzY2hlbWUgZW5hYmxlcyBpbmRleCBwcmVmZXRj aGluZyB0byBhY3F1aXJlIGFuZCB0aGVuIGRyb3AgYW55IGV4dHJhCmJhdGNoIGluZGV4IHBhZ2Ug cGluIHdpdGhpbiBpdHMgcmVhZCBzdHJlYW0gY2FsbGJhY2sgLS0gZXZlbiB3aGVuIGFuCmluZGV4 LW9ubHkgc2NhbiAodGhhdCBtdXN0IHBlcmZvcm0gc29tZSBoZWFwIGZldGNoZXMpIGhvbGRzIG9w ZW4gc2V2ZXJhbAppbmRleCBiYXRjaGVzIGF0IG9uY2UgaW4gb3JkZXIgdG8gbWFpbnRhaW4gYW4g YWRlcXVhdGUgcHJlZmV0Y2gKZGlzdGFuY2UuICBUaGUgcmVhZCBzdHJlYW0gY2Fubm90IG9ic2Vy dmUgYW55IGNoYW5nZSBpbiB0aGUgYmFja2VuZCdzCmJ1ZmZlciBwaW4gbGltaXQuCgpJbmRleCBh Y2Nlc3MgbWV0aG9kcyB0aGF0IHN1cHBvcnQgcGxhaW4gaW5kZXggc2NhbnMgbXVzdCBub3cgaW1w bGVtZW50CmVpdGhlciB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2Ugb3IgdGhlIGFtZ2V0dHVwbGUg aW50ZXJmYWNlIChub3QgYm90aCkuClVwY29taW5nIHBhdGNoZXMgd2lsbCBhZGQgc3VwcG9ydCBm b3IgYW1nZXRiYXRjaCB0byB0aGUgaGFzaCwgR2lTVCwgYW5kClNQLUdpU1QgaW5kZXggQU1zLgoK QXV0aG9yOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KQXV0aG9yOiBQZXRlciBHZW9n aGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLWJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5h cmF6ZWwuZGU+ClJldmlld2VkLWJ5OiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5j b20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vY2Y4NWY0NmYtYjAyZi0wNWIyLTUy NDgtNTAwMGI4OTRlYmFiQGVudGVycHJpc2VkYi5jb20KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0 Z3IuZXMvbS9lZmFjMzIzOC02ZjM0LTQxZWEtYTM5My0yNmNjMDQ0MWI1MDYlNDB2b25kcmEubWUK LS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAgICAgICAgICAgICAgICAgICAgfCAgMjkg Ky0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAgICAgICAgICAgICAgICAgICB8ICAgNSAr LQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgICAgIHwgICA3ICst CiBzcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oICAgICAgICAgICAgICAgfCA1MzUgKysr KysrKysrKysrCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggICAgICAgICAgICAgICAgICAg fCAxOTAgKystLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggICAgICAgICAgICAgICAg ICB8IDIwNiArKysrLQogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCAgICAgICAgICAgICAg ICAgIHwgMTAyICsrLQogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAgICAg ICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMgICAgICAgICAgICAg ICAgfCAgIDcgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMgICAgICAgICAgICAg ICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgICAgICAgICAgICAg IHwgICA3ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgICAgICAgICAgICAgICAg fCAgIDcgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyAgICAgICAgICAgICAgICB8 ICAgNyArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyAgICAgIHwg ICA1ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgICAgfCA1 MjUgKysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUgICAgICAg ICAgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jICAgICAgICAg ICAgICB8ICAgNSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyAgICAgICAgICAg ICAgfCAgIDcgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyAgICAgICAgICAg IHwgMTM4ICstLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYyAgICAgICAg IHwgNzk4ICsrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29u LmJ1aWxkICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1F ICAgICAgICAgICAgICB8ICA3NCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdl LmMgICAgICAgICAgIHwgIDEzICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRw YWdlLmMgICAgICAgfCAyMDcgKysrLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVl LmMgICAgICAgICAgICB8IDQ2NSArKysrKy0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHNlYXJjaC5jICAgICAgICAgfCA1NjYgKysrKysrLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnR1dGlscy5jICAgICAgICAgIHwgMjQ1IC0tLS0tLQogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnR4bG9nLmMgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9h Y2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMgICAgICAgICAgfCAgIDcgKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy90YWJsZS90YWJsZWFtYXBpLmMgICAgICAgICB8ICAgNSArLQogc3JjL2JhY2tlbmQvY29t bWFuZHMvaW5kZXhjbWRzLmMgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9leGVj dXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVJbmRleHNjYW4uYyAgICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZU1lcmdlam9pbi5jICAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9pbmR4cGF0aC5jICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL3BsYW5jYXQuYyAgICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9yZWxhdGlvbi5jICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQv YW11dGlscy5jICAgICAgICAgICAgICAgfCAgIDggKy0KIGNvbnRyaWIvYW1jaGVjay92ZXJpZnlf bmJ0cmVlLmMgICAgICAgICAgICAgICB8ICAgMiArLQogY29udHJpYi9ibG9vbS9ibHV0aWxzLmMg ICAgICAgICAgICAgICAgICAgICAgIHwgICA3ICstCiBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21s ICAgICAgICAgICAgICAgICAgICAgfCA1ODggKysrKysrKysrKystLQogZG9jL3NyYy9zZ21sL3Jl Zi9jcmVhdGVfdGFibGUuc2dtbCAgICAgICAgICAgIHwgIDEzICstCiAuLi4vbW9kdWxlcy9kdW1t eV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jICAgfCAgIDcgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvam9pbi5vdXQgICAgICAgICAgICB8ICA2MyArLQogc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wb3J0YWxzLm91dCAgICAgICAgIHwgIDU3ICsrCiBzcmMvdGVzdC9yZWdyZXNzL3Nx bC9qb2luLnNxbCAgICAgICAgICAgICAgICAgfCAgMzggKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3BvcnRhbHMuc3FsICAgICAgICAgICAgICB8ICAzNCArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgMTUgKy0KIDQ4IGZpbGVzIGNoYW5nZWQsIDM2MTQg aW5zZXJ0aW9ucygrKSwgMTQzOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv aW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tl bmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9hbWFwaS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKaW5kZXggNzkyNDAzMzM1 Li4wMjc5M2ExMTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCkBAIC0xOTksNiArMTk5LDE5IEBAIHR5cGVkZWYg dm9pZCAoKmFtcmVzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogdHlwZWRlZiBi b29sICgqYW1nZXR0dXBsZV9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJ CSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CiAKKy8qIG5leHQgYmF0Y2ggb2YgdmFsaWQgdHVw bGVzICovCit0eXBlZGVmIEluZGV4U2NhbkJhdGNoICgqYW1nZXRiYXRjaF9mdW5jdGlvbikgKElu ZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRj aCwKKwkJCQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOworCisvKiBkcm9wIFRJ RCByZWN5Y2xpbmcgaW50ZXJsb2NrIGhlbGQgdG8gcHJldmVudCBjb25jdXJyZW50IFZBQ1VVTSBy ZWN5Y2xpbmcgKi8KK3R5cGVkZWYgdm9pZCAoKmFtdW5ndWFyZGJhdGNoX2Z1bmN0aW9uKSAoSW5k ZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCSBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CisKKy8q IG1hcmsgZGVhZCBpdGVtcyBpbiBpbmRleCBwYWdlICovCit0eXBlZGVmIHZvaWQgKCphbWtpbGxp dGVtc2JhdGNoX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCSAgIElu ZGV4U2NhbkJhdGNoIGJhdGNoKTsKKwogLyogZmV0Y2ggYWxsIHZhbGlkIHR1cGxlcyAqLwogdHlw ZWRlZiBpbnQ2NCAoKmFtZ2V0Yml0bWFwX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAog CQkJCQkJCQkJICAgVElEQml0bWFwICp0Ym0pOwpAQCAtMjA2LDExICsyMTksOSBAQCB0eXBlZGVm IGludDY0ICgqYW1nZXRiaXRtYXBfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAvKiBl bmQgaW5kZXggc2NhbiAqLwogdHlwZWRlZiB2b2lkICgqYW1lbmRzY2FuX2Z1bmN0aW9uKSAoSW5k ZXhTY2FuRGVzYyBzY2FuKTsKIAotLyogbWFyayBjdXJyZW50IHNjYW4gcG9zaXRpb24gKi8KLXR5 cGVkZWYgdm9pZCAoKmFtbWFya3Bvc19mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci0K LS8qIHJlc3RvcmUgbWFya2VkIHNjYW4gcG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAoKmFtcmVz dHJwb3NfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4pOworLyogaW52YWxpZGF0ZSBpbmRl eCBBTSBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHNjYW4ncyBwb3NpdGlvbiAqLwor dHlwZWRlZiB2b2lkICgqYW1wb3NyZXNldF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwK KwkJCQkJCQkJCSBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiAKIC8qCiAgKiBDYWxsYmFjayBmdW5j dGlvbiBzaWduYXR1cmVzIC0gZm9yIHBhcmFsbGVsIGluZGV4IHNjYW5zLgpAQCAtMjU1LDYgKzI2 Niw4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1Sb3V0aW5lCiAJYm9vbAkJYW1jb25zaXN0ZW50 b3JkZXJpbmc7CiAJLyogZG9lcyBBTSBzdXBwb3J0IGJhY2t3YXJkIHNjYW5uaW5nPyAqLwogCWJv b2wJCWFtY2FuYmFja3dhcmQ7CisJLyogZG9lcyBBTSBzdXBwb3J0IG1hcmsvcmVzdG9yZSBvZiBh IHNjYW4gcG9zaXRpb24/ICovCisJYm9vbAkJYW1jYW5tYXJrcG9zOwogCS8qIGRvZXMgQU0gc3Vw cG9ydCBVTklRVUUgaW5kZXhlcz8gKi8KIAlib29sCQlhbWNhbnVuaXF1ZTsKIAkvKiBkb2VzIEFN IHN1cHBvcnQgbXVsdGktY29sdW1uIGluZGV4ZXM/ICovCkBAIC0zMTAsMTAgKzMyMywxMiBAQCB0 eXBlZGVmIHN0cnVjdCBJbmRleEFtUm91dGluZQogCWFtYmVnaW5zY2FuX2Z1bmN0aW9uIGFtYmVn aW5zY2FuOwogCWFtcmVzY2FuX2Z1bmN0aW9uIGFtcmVzY2FuOwogCWFtZ2V0dHVwbGVfZnVuY3Rp b24gYW1nZXR0dXBsZTsgLyogY2FuIGJlIE5VTEwgKi8KKwlhbWdldGJhdGNoX2Z1bmN0aW9uIGFt Z2V0YmF0Y2g7IC8qIGNhbiBiZSBOVUxMICovCisJYW11bmd1YXJkYmF0Y2hfZnVuY3Rpb24gYW11 bmd1YXJkYmF0Y2g7IC8qIGNhbiBiZSBOVUxMICovCisJYW1raWxsaXRlbXNiYXRjaF9mdW5jdGlv biBhbWtpbGxpdGVtc2JhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLwogCWFtZ2V0Yml0bWFwX2Z1bmN0 aW9uIGFtZ2V0Yml0bWFwOwkvKiBjYW4gYmUgTlVMTCAqLwogCWFtZW5kc2Nhbl9mdW5jdGlvbiBh bWVuZHNjYW47Ci0JYW1tYXJrcG9zX2Z1bmN0aW9uIGFtbWFya3BvczsJLyogY2FuIGJlIE5VTEwg Ki8KLQlhbXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVzdHJwb3M7IC8qIGNhbiBiZSBOVUxMICovCisJ YW1wb3NyZXNldF9mdW5jdGlvbiBhbXBvc3Jlc2V0OyAvKiBjYW4gYmUgTlVMTCAqLwogCiAJLyog aW50ZXJmYWNlIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHBhcmFsbGVsIGluZGV4IHNjYW5zICovCiAJ YW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbiBhbWVzdGltYXRlcGFyYWxsZWxzY2FuOyAv KiBjYW4gYmUgTlVMTCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAppbmRleCAwNWVlYzkyMDQuLjYxNTY4NmRjMiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKKysrIGIvc3JjL2luY2x1ZGUv YWNjZXNzL2dlbmFtLmgKQEAgLTk2LDYgKzk2LDcgQEAgdHlwZWRlZiBib29sICgqSW5kZXhCdWxr RGVsZXRlQ2FsbGJhY2spIChJdGVtUG9pbnRlciBpdGVtcHRyLCB2b2lkICpzdGF0ZSk7CiAKIC8q IHN0cnVjdCBkZWZpbml0aW9ucyBhcHBlYXIgaW4gcmVsc2Nhbi5oICovCiB0eXBlZGVmIHN0cnVj dCBJbmRleFNjYW5EZXNjRGF0YSAqSW5kZXhTY2FuRGVzYzsKK3R5cGVkZWYgc3RydWN0IEluZGV4 U2NhbkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CiB0eXBlZGVmIHN0cnVjdCBTeXNTY2FuRGVz Y0RhdGEgKlN5c1NjYW5EZXNjOwogCiB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEluZGV4U2NhbkRl c2NEYXRhICpQYXJhbGxlbEluZGV4U2NhbkRlc2M7CkBAIC0xNjksOCArMTcwLDYgQEAgZXh0ZXJu IHZvaWQgaW5kZXhfcmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCSBTY2FuS2V5IGtl eXMsIGludCBua2V5cywKIAkJCQkJCSBTY2FuS2V5IG9yZGVyYnlzLCBpbnQgbm9yZGVyYnlzKTsK IGV4dGVybiB2b2lkIGluZGV4X2VuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKLWV4dGVybiB2 b2lkIGluZGV4X21hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKLWV4dGVybiB2b2lkIGluZGV4 X3Jlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gU2l6ZSBpbmRleF9wYXJhbGxl bHNjYW5fZXN0aW1hdGUoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAkJCQkJCQkJCQlpbnQgbmtl eXMsIGludCBub3JkZXJieXMsIFNuYXBzaG90IHNuYXBzaG90KTsKIGV4dGVybiB2b2lkIGluZGV4 X3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKQEAgLTE4NCw4 ICsxODMsNiBAQCBleHRlcm4gSW5kZXhTY2FuRGVzYyBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwo UmVsYXRpb24gaGVhcHJlbCwKIAkJCQkJCQkJCQkJICBpbnQgbmtleXMsIGludCBub3JkZXJieXMs CiAJCQkJCQkJCQkJCSAgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuLAogCQkJCQkJCQkJCQkg IHVpbnQzMiBmbGFncyk7Ci1leHRlcm4gSXRlbVBvaW50ZXIgaW5kZXhfZ2V0bmV4dF90aWQoSW5k ZXhTY2FuRGVzYyBzY2FuLAotCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKIGV4 dGVybiBpbnQ2NCBpbmRleF9nZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAg KmJpdG1hcCk7CiAKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmluZGV4X2J1bGtfZGVs ZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCA0ZmVhNTE3NjEu LjUzNjRjZTI3YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTI4LDYgKzEyOCw3IEBAIHR5cGVkZWYg c3RydWN0IEluZGV4U2NhbkhlYXBEYXRhCiAKIAkvKiBGb3IgdmlzaWJpbGl0eSBtYXAgY2hlY2tz IChpbmRleC1vbmx5IHNjYW5zIGFuZCBvbi1hY2Nlc3MgcHJ1bmluZykgKi8KIAlCdWZmZXIJCXhz X3ZtYnVmZmVyOwkvKiB2aXNpYmlsaXR5IG1hcCBidWZmZXIgKi8KKwlpbnQJCQl4c192bV9pdGVt czsJLyogIyBpdGVtcyB0byByZXNvbHZlIHZpc2liaWxpdHkgaW5mbyBmb3IgKi8KIAogCWJvb2wJ CXhzX3JlYWRvbmx5OwkvKiBzY2FuIGlzIHJlYWQtb25seT8gKi8KIApAQCAtNDM4LDggKzQzOSwx MiBAQCBleHRlcm4gVHJhbnNhY3Rpb25JZCBoZWFwX2luZGV4X2RlbGV0ZV90dXBsZXMoUmVsYXRp b24gcmVsLAogZXh0ZXJuIGJvb2wgaGVhcGFtX2ZldGNoX3RpZChSZWxhdGlvbiByZWwsIEl0ZW1Q b2ludGVyIHRpZCwgU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpz bG90LCBib29sICphbGxfZGVhZCk7CiBleHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfc2Nhbl9iZWdp bihJbmRleFNjYW5EZXNjIHNjYW4sIHVpbnQzMiBmbGFncyk7Ci1leHRlcm4gdm9pZCBoZWFwYW1f aW5kZXhfc2Nhbl9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgaGVhcGFt X2luZGV4X3NjYW5fYmF0Y2hfaW5pdChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJIElu ZGV4U2NhbkJhdGNoIGJhdGNoKTsKK2V4dGVybiB2b2lkIGhlYXBhbV9pbmRleF9zY2FuX3Jlc2Nh bihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIHZvaWQgaGVhcGFtX2luZGV4X3NjYW5fZW5k KEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfc2Nhbl9tYXJr cG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfc2Nhbl9y ZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIGJvb2wgaGVhcF9ob3Rfc2VhcmNo X2J1ZmZlcihJdGVtUG9pbnRlciB0aWQsIFJlbGF0aW9uIHJlbGF0aW9uLAogCQkJCQkJCQkgICBC dWZmZXIgYnVmZmVyLCBTbmFwc2hvdCBzbmFwc2hvdCwgSGVhcFR1cGxlIGhlYXBUdXBsZSwKIAkJ CQkJCQkJICAgYm9vbCAqYWxsX2RlYWQsIGJvb2wgZmlyc3RfY2FsbCk7CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4 YmF0Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjk0NzFhOWRiNQot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgKQEAgLTAs MCArMSw1MzUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGluZGV4YmF0Y2guaAorICoJ ICBCYXRjaC1iYXNlZCBpbmRleCBzY2FuIGluZnJhc3RydWN0dXJlIGZvciB0aGUgYW1nZXRiYXRj aCBpbnRlcmZhY2UuCisgKgorICogVGhpcyBoZWFkZXIgZGVjbGFyZXMgdGhlIGlubGluZSBmdW5j dGlvbnMsIG1hY3JvcywgYW5kIGV4dGVybnMgdGhhdCB0YWJsZQorICogQU1zIGFuZCBpbmRleCBB TXMgdXNlIHRvIG9wZXJhdGUgb24gaW5kZXggc2NhbiBiYXRjaGVzIGFuZCB0aGUgc2NhbidzIGJh dGNoCisgKiByaW5nIGJ1ZmZlci4gIFNlZSBpbmRleGJhdGNoLmMgZm9yIGFuIG92ZXJ2aWV3IG9m IHRoZSBtb2R1bGUuCisgKgorICogVGhlIGRhdGEgc3RydWN0dXJlcyB0aGF0IHRoZXNlIGZ1bmN0 aW9ucyBvcGVyYXRlIG9uIGFyZSBkZWZpbmVkIGluCisgKiByZWxzY2FuLmgsIG5vdCBoZXJlLgor ICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdl bnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS9h Y2Nlc3MvaW5kZXhiYXRjaC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYg SU5ERVhCQVRDSF9ICisjZGVmaW5lIElOREVYQkFUQ0hfSAorCisjaW5jbHVkZSAiYWNjZXNzL2Ft YXBpLmgiCisjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCisjaW5jbHVkZSAiYWNjZXNzL3JlbHNj YW4uaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1Zi5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgor CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBFbGVtZW50YXJ5IGJhdGNoIHJpbmcgYnVmZmVy IG9wZXJhdGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitTdGF0aWNBc3NlcnRE ZWNsKElOREVYX1NDQU5fTUFYX0JBVENIRVMgPD0gUEdfSU5UOF9NQVggKyAxLAorCQkJCSAiaW5k ZXhfc2Nhbl9iYXRjaF9sb2FkZWQgcmVsaWVzIG9uIGludDggcmluZyBidWZmZXIgYXJpdGhtZXRp YyIpOworU3RhdGljQXNzZXJ0RGVjbCgoSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAmIChJTkRFWF9T Q0FOX01BWF9CQVRDSEVTIC0gMSkpID09IDAsCisJCQkJICJJTkRFWF9TQ0FOX01BWF9CQVRDSEVT IG11c3QgYmUgYSBwb3dlciBvZiAyIik7CisKKy8qCisgKiBIb3cgbWFueSBiYXRjaGVzIGFyZSBj dXJyZW50bHkgbG9hZGVkIGluIHRoZSByaW5nIGJ1ZmZlcj8KKyAqLworc3RhdGljIGlubGluZSB1 aW50OAoraW5kZXhfc2Nhbl9iYXRjaF9jb3VudChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJcmV0 dXJuICh1aW50OCkgKHNjYW4tPmJhdGNocmluZ2J1Zi5uZXh0QmF0Y2ggLQorCQkJCQlzY2FuLT5i YXRjaHJpbmdidWYuaGVhZEJhdGNoKTsKK30KKworLyoKKyAqIERvIHdlIGFscmVhZHkgaGF2ZSBh IGJhdGNoIGxvYWRlZCBhdCAnaWR4JyBvZmZzZXQgaW4gc2NhbidzIHJpbmcgYnVmZmVyPworICoK KyAqIE5PVEU6IGEgc3RhbGUgYmF0Y2ggaWR4IGNhbiBhbGlhcyBhIGN1cnJlbnRseS1sb2FkZWQg cmFuZ2UgZHVlIHRvCisgKiB3cmFwYXJvdW5kLCBwcm9kdWNpbmcgYSBmYWxzZSBwb3NpdGl2ZS4g IEZhbHNlIG5lZ2F0aXZlcyBhcmUgbm90IHBvc3NpYmxlLgorICovCitzdGF0aWMgaW5saW5lIGJv b2wKK2luZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKEluZGV4U2NhbkRlc2Mgc2NhbiwgdWludDggaWR4 KQoreworCXJldHVybiAoaW50OCkgKGlkeCAtIHNjYW4tPmJhdGNocmluZ2J1Zi5oZWFkQmF0Y2gp ID49IDAgJiYKKwkJKGludDgpIChpZHggLSBzY2FuLT5iYXRjaHJpbmdidWYubmV4dEJhdGNoKSA8 IDA7Cit9CisKKy8qCisgKiBIYXZlIHdlIGxvYWRlZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYmF0 Y2hlcz8KKyAqLworc3RhdGljIGlubGluZSBib29sCitpbmRleF9zY2FuX2JhdGNoX2Z1bGwoSW5k ZXhTY2FuRGVzYyBzY2FuKQoreworCXJldHVybiBpbmRleF9zY2FuX2JhdGNoX2NvdW50KHNjYW4p ID09IElOREVYX1NDQU5fTUFYX0JBVENIRVM7Cit9CisKKy8qCisgKiBSZXR1cm4gYmF0Y2ggZm9y IHRoZSBwcm92aWRlZCBpbmRleC4KKyAqLworc3RhdGljIGlubGluZSBJbmRleFNjYW5CYXRjaAor aW5kZXhfc2Nhbl9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIHVpbnQ4IGlkeCkKK3sKKwlBc3Nl cnQoaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQoc2NhbiwgaWR4KSk7CisKKwlyZXR1cm4gc2Nhbi0+ YmF0Y2hidWZbaWR4ICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKV07Cit9CisKKy8qCisg KiBBcHBlbmQgZ2l2ZW4gYmF0Y2ggdG8gc2NhbidzIGJhdGNoIHJpbmcgYnVmZmVyLgorICovCitz dGF0aWMgaW5saW5lIHZvaWQKK2luZGV4X3NjYW5fYmF0Y2hfYXBwZW5kKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJQmF0Y2hSaW5nQnVmZmVyICpyaW5nYnVm ID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwl1aW50OAkJbmV4dEJhdGNoID0gcmluZ2J1Zi0+bmV4 dEJhdGNoOworCisJQXNzZXJ0KCFpbmRleF9zY2FuX2JhdGNoX2Z1bGwoc2NhbikpOworCisJc2Nh bi0+YmF0Y2hidWZbbmV4dEJhdGNoICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKV0gPSBi YXRjaDsKKwlyaW5nYnVmLT5uZXh0QmF0Y2grKzsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICogQmF0Y2ggbWVtb3J5IGxheW91dCBhY2Nlc3NvcnMKKyAqCisgKiBFYWNoIGJhdGNoIGFs bG9jYXRpb24gaGFzIHRoZSBmb2xsb3dpbmcgbWVtb3J5IGxheW91dDoKKyAqCisgKiAgIFt0YWJs ZSBBTSBvcGFxdWUgYXJlYV0gICAgPC0gdGFibGUgQU0gYXJlYSAoYmF0Y2hfdGFibGVfb3BhcXVl X3NpemUpLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsbHkgcmVx dWVzdGVkIGJ5IHRhYmxlIEFNCisgKiAgIFtpbmRleCBBTSBzdGF0aWMgb3BhcXVlXSAgPC0gaW5k ZXggQU0gYXJlYSAoYmF0Y2hfaW5kZXhfb3BhcXVlX3N0YXRpYyksCisgKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbWFuZGF0b3J5IGZpeGVkLXNpemUgaW5kZXggQU0gYXJlYQorICog ICBbSW5kZXhTY2FuQmF0Y2hEYXRhXSAgICAgIDwtIGJhdGNoIHBvaW50ZXIsIHJldHVybmVkIGJ5 IGFtZ2V0YmF0Y2gKKyAqICAgW2l0ZW1zW21heGl0ZW1zYmF0Y2hdXQorICogICBbY3VyclR1cGxl cyB3b3Jrc3BhY2VdICAgIDwtIGluZGV4IHR1cGxlIGFyZWEgKGJhdGNoX3R1cGxlc193b3Jrc3Bh Y2UpLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHkgdXNlZCBkdXJpbmcg aW5kZXgtb25seSBzY2FucworICoKKyAqIGJhdGNoX2Jhc2Vfb2Zmc2V0IGNvbWJpbmVzIHRoZSB0 YWJsZSBBTSBvcGFxdWUgYXJlYSwgdGhlIG9wdGlvbmFsIGR5bmFtaWMKKyAqIGluZGV4IEFNIG9w YXF1ZSBhcmVhLCBhbmQgdGhlIHN0YXRpYyBpbmRleCBBTSBvcGFxdWUgYXJlYSBpbnRvIGEgc2lu Z2xlCisgKiBvZmZzZXQgZnJvbSB0aGUgYmF0Y2ggcG9pbnRlciB0byB0aGUgdHJ1ZSBhbGxvY2F0 aW9uIGJhc2UuICBXZSBwZnJlZSBhCisgKiBiYXRjaCBieSBwYXNzaW5nIHBmcmVlIGEgcG9pbnRl ciByZXR1cm5lZCBieSBpbmRleF9zY2FuX2JhdGNoX2Jhc2UuICBXZQorICogcmVseSBvbiB0aGUg YXNzdW1wdGlvbiB0aGF0IGJhdGNoZXMgaGF2ZSBhIGZpeGVkIGxheW91dCBmb3IgdGhlIGR1cmF0 aW9uIG9mCisgKiBhbiBpbmRleCBzY2FuIChiYXRjaGVzIGFyZSBjYWNoZWQgZm9yIHJldXNlIHRv IGF2b2lkIHBhbGxvYyBjaHVybikuCisgKgorICogVGhlIHRhYmxlIEFNIGFjY2Vzc2VzIGl0cyBv cGFxdWUgYXJlYSAoc2l6ZWQgYmF0Y2hfdGFibGVfb3BhcXVlX3NpemUpIHVzaW5nCisgKiB0aGUg aW5kZXhfc2Nhbl9iYXRjaF90YWJsZV9hcmVhIHNoaW0gYWNjZXNzb3IuICBUaGUgdGFibGUgQU0n cworICogdGFibGVfaW5kZXhfc2Nhbl9iZWdpbiBjYWxsYmFjayBpcyBwZXJtaXR0ZWQgdG8gdmFy eSB0aGUgbGF5b3V0IG9mIGl0cworICogb3BhcXVlIGFyZWEgYXMgaXQgc2VlcyBmaXQgKG9yIHRv IHJlcXVlc3Qgbm8gYXJlYSksIG9mdGVuIGJhc2VkIG9uIHRoZQorICogcmVxdWlyZW1lbnRzIG9m IG9uZSBwYXJ0aWN1bGFyIHNjYW4uICBCaXRtYXAgc2NhbnMgbmV2ZXIgZ2V0IGEgdGFibGUgQU0K KyAqIG9wYXF1ZSBhcmVhICh0aGUgdGFibGUgQU0gaXNuJ3QgaW52b2x2ZWQsIGV2ZW4gd2hlbiBh biBhbWdldGJpdG1hcCByb3V0aW5lCisgKiByZXVzZXMgdGhlIGJhdGNoIGluZnJhc3RydWN0dXJl IGludGVybmFsbHkpLgorICoKKyAqIEFuIGluZGV4IEFNIGlzIHJlcXVpcmVkIHRvIHByb3ZpZGUg YSBmaXhlZC1zaXplIG9wYXF1ZSBhcmVhLiAgVGhpcyBhcmVhIGlzCisgKiBzaXplZCBNQVhBTElH TihzaXplb2YodGhlIEFNJ3Mgc3RydWN0KSksIGFuZCBpcyBhbHdheXMga25vd24gYXQgY29tcGls ZQorICogdGltZS4gIEluZGV4IEFNcyB1c2UgaW5kZXhfc2Nhbl9iYXRjaF9pbmRleF9vcGFxdWVf c3RhdGljIHRvIGFjY2VzcyB0aGUKKyAqIGFyZWEuICBBY2Nlc3MgdG8gdGhlIGFyZWEgaXMgY2hl YXAgKGEgY29tcGlsZS10aW1lLWNvbnN0YW50IHN1YnRyYWN0aW9uKSwKKyAqIGJ1dCBpdHMgc2l6 ZSBjYW5ub3QgdmFyeSBmcm9tIHNjYW4gdG8gc2Nhbi4gIEluZGV4IEFNcyB0eXBpY2FsbHkgdXNl IHRoaXMKKyAqIGFyZWEgdG8gc3RvcmUgdGhpbmdzIGxpa2UgaW5kZXggcGFnZSBzaWJsaW5nIGxp bmsgYmxvY2sgbnVtYmVycy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICog UmV0dXJuIHRoZSB0cnVlIGFsbG9jYXRpb24gYmFzZSBvZiBhIGJhdGNoICh1c2VkIHRvIHBmcmVl IGJhdGNoZXMpCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitpbmRleF9zY2FuX2JhdGNoX2Jh c2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlBc3NlcnQo c2Nhbi0+YmF0Y2hfYmFzZV9vZmZzZXQgPiAwKTsKKworCXJldHVybiAoY2hhciAqKSBiYXRjaCAt IHNjYW4tPmJhdGNoX2Jhc2Vfb2Zmc2V0OworfQorCisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0 byB0aGUgdGFibGUgQU0gb3BhcXVlIGFyZWEKKyAqLworc3RhdGljIGlubGluZSB2b2lkICoKK2lu ZGV4X3NjYW5fYmF0Y2hfdGFibGVfYXJlYShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJh dGNoIGJhdGNoKQoreworCS8qCisJICogVGhlIHRhYmxlIEFNIG9wYXF1ZSBhcmVhIGlzIGFsd2F5 cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBiYXRjaCdzCisJICogYWxsb2NhdGVkIHNwYWNlCisJ ICovCisJcmV0dXJuIGluZGV4X3NjYW5fYmF0Y2hfYmFzZShzY2FuLCBiYXRjaCk7Cit9CisKKy8q CisgKiBSZXR1cm4gYSB0eXBlZCBwb2ludGVyIHRvIHRoZSBpbmRleCBBTSdzIHN0YXRpYyAoY29t cGlsZS10aW1lIHNpemVkKSBvcGFxdWUKKyAqIGFyZWEsIHdoaWNoIHNpdHMgaW1tZWRpYXRlbHkg YmVmb3JlIHRoZSBiYXRjaCBwb2ludGVyLiAgSW5kZXggQU1zIHVzZSB0aGVpcgorICogb3duIHdy YXBwZXIgZnVuY3Rpb24tc3R5bGUgbWFjcm8sIGJ1aWx0IG9uIHRvcCBvZiB0aGlzLgorICovCisj ZGVmaW5lIGluZGV4X3NjYW5fYmF0Y2hfaW5kZXhfb3BhcXVlX3N0YXRpYyhzY2FuLCBiYXRjaCwg dHlwZSkgXAorCShBc3NlcnRNYWNybygoc2NhbiktPmJhdGNoX2luZGV4X29wYXF1ZV9zdGF0aWMg PT0gTUFYQUxJR04oc2l6ZW9mKHR5cGUpKSksIFwKKwkgKCh0eXBlICopICgoY2hhciAqKSAoYmF0 Y2gpIC0gTUFYQUxJR04oc2l6ZW9mKHR5cGUpKSkpKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKiBFbGVtZW50YXJ5IGJhdGNoIHBvc2l0aW9uIG9wZXJhdGlvbnMKKyAqIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworCisvKgorICogQWR2YW5jZSBwb3NpdGlvbiB0byBpdHMgbmV4dCBpdGVt IGluIHRoZSBiYXRjaC4KKyAqCisgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IGl0ZW0gd2l0aGluIHRo ZSBwcm92aWRlZCBiYXRjaCAob3IgdG8gdGhlIHByZXZpb3VzIGl0ZW0sCisgKiB3aGVuIHNjYW5u aW5nIGJhY2t3YXJkcykuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBwb3NpdGlvbiBjb3Vs ZCBiZSBhZHZhbmNlZC4gIFJldHVybnMgZmFsc2Ugd2hlbiB0aGVyZQorICogYXJlIG5vIG1vcmUg aXRlbXMgZnJvbSB0aGUgYmF0Y2ggcmVtYWluaW5nIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlv bi4KKyAqLworc3RhdGljIGlubGluZSBib29sCitpbmRleF9zY2FuX3Bvc19hZHZhbmNlKFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCwgQmF0Y2hS aW5nSXRlbVBvcyAqcG9zKQoreworCS8qCisJICogT24gZW50cnksIHBvcy0+aXRlbSBtdXN0IGJl IHZhbGlkLCBhbmQgbXVzdCBhY3R1YWxseSBwb2ludCB0byBhIHZhbGlkCisJICogaXRlbSBmb3Ig dGhpcyBiYXRjaC4gIFRoZXJlIGlzIGV4YWN0bHkgb25lIGV4Y2VwdGlvbjogcG9zLT5pdGVtIG1h eQorCSAqIGluaXRpYWxseSBzaXQgb25lIHN0ZXAgb3V0c2lkZSB0aGUgYmF0Y2ggd2hlbiBjYWxs ZXIganVzdCBmbGlwcGVkIGl0cworCSAqIHNjYW4gZGlyZWN0aW9uLiAgcG9zLT5pdGVtIHdpbGwg cG9pbnQgdG8gYSB2YWxpZCBpdGVtIG9uY2Ugd2UgcmV0dXJuCisJICogKHdlIF9tdXN0XyByZXR1 cm4gdHJ1ZSB3aGVuIHBhc3NlZCBhIGp1c3Qtc3RlcHBlZC1vZmYtYmF0Y2ggcG9zaXRpb24pLgor CSAqCisJICogVGhpcyBwcmVjb25kaXRpb24gZW5zdXJlcyB0aGF0IGNhbGxlcnMgYWN0dWFsbHkg c3RlcCB0byB0aGUgbmV4dCBiYXRjaAorCSAqIHdoZW4gaW5kaWNhdGVkIChvciBmbGlwIHRoZSBz Y2FuIGRpcmVjdGlvbiBpbnN0ZWFkLCB3aGljaCBjYW4gaGFwcGVuCisJICogcmlnaHQgYWZ0ZXIg YSBjdXJzb3IgdHJpZXMgdG8gc3RlcCBvZmYgdGhlIGZpbmFsIGJhdGNoIGluIHRoZSBnaXZlbgor CSAqIHNjYW4gZGlyZWN0aW9uKS4gIFRhYmxlIEFNcyBtdXN0IGF2b2lkIGFtYmlndW91cyBwb3Np dGlvbmFsIHN0YXRlcy4KKwkgKi8KKwlBc3NlcnQocG9zLT52YWxpZCk7CisKKwlpZiAoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCXsKKwkJLyogUHJlY29uZGl0aW9uOiB2YWxp ZC1vci1qdXN0LWJlZm9yZS1zdGFydCBpdGVtIHBvc2l0aW9uICovCisJCUFzc2VydChwb3MtPml0 ZW0gPj0gYmF0Y2gtPmZpcnN0SXRlbSAtIDEpOworCQlBc3NlcnQocG9zLT5pdGVtIDw9IGJhdGNo LT5sYXN0SXRlbSk7CisKKwkJaWYgKCsrcG9zLT5pdGVtID4gYmF0Y2gtPmxhc3RJdGVtKQorCQkJ cmV0dXJuIGZhbHNlOworCX0KKwllbHNlCQkJCQkJLyogU2NhbkRpcmVjdGlvbklzQmFja3dhcmQg Ki8KKwl7CisJCS8qIFByZWNvbmRpdGlvbjogdmFsaWQtb3ItanVzdC1wYXN0LWVuZCBpdGVtIHBv c2l0aW9uICovCisJCUFzc2VydChwb3MtPml0ZW0gPj0gYmF0Y2gtPmZpcnN0SXRlbSk7CisJCUFz c2VydChwb3MtPml0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtICsgMSk7CisKKwkJaWYgKC0tcG9zLT5p dGVtIDwgYmF0Y2gtPmZpcnN0SXRlbSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBBZHZh bmNlZCB3aXRoaW4gYmF0Y2ggKi8KKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIFBvc2l0aW9u IHBvcyBhdCB0aGUgc3RhcnQgb2YgbmV3QmF0Y2ggKGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlv bikuCisgKgorICogV2hlbiB3ZSdyZSBjYWxsZWQsIHBvcyBzaG91bGQgcG9pbnQgdG8gYSBiYXRj aCB0aGF0IGNhbGxlciBqdXN0IGZpbmlzaGVkCisgKiBjb25zdW1pbmcgZnJvbSAob3IgYmUgaW52 YWxpZCwgd2hlbiBubyBiYXRjaCBoYXMgYmVlbiBsb2FkZWQgZm9yIGNhbGxlcidzCisgKiBzY2Fu IHlldCkuICBXaGVuIHdlIHJldHVybiwgcG9zIHdpbGwgcG9pbnQgdG8gbmV3QmF0Y2gsIHRoZSBu ZXh0IGJhdGNoIGZyb20KKyAqIHRoZSByaW5nIGJ1ZmZlci4gIFdlJ2xsIGhhdmUgYWxzbyBzZXQg cG9zJ3MgaXRlbSBvZmZzZXQgdG8gbmV3QmF0Y2gncworICogaW5pdGlhbCBpdGVtIGluIHRoZSBn aXZlbiBkaXJlY3Rpb24gKHRoZSBmaXJzdCBpdGVtIHdoZW4gc2Nhbm5pbmcgZm9yd2FyZHMsCisg KiB0aGUgbGFzdCBpdGVtIHdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzKS4KKyAqCisgKiBuZXdCYXRj aCBkb2Vzbid0IGhhdmUgdG8gYmUgKGFuZCBvZnRlbiBpc24ndCkgdGhlIG1vc3QgcmVjZW50bHkg YXBwZW5kZWQKKyAqIGJhdGNoIGluIHRoZSBzY2FuJ3MgcmluZyBidWZmZXIuICBJdCBpcyBtZXJl bHkgdGhlIG5leHQgYmF0Y2ggaW4gbGluZSB0byBiZQorICogY29uc3VtZWQgZnJvbSB0aGUgcG9p bnQgb2YgdmlldyBvZiBvdXIgY2FsbGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2luZGV4 X3NjYW5fcG9zX3N0YXJ0YmF0Y2goU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkgIElu ZGV4U2NhbkJhdGNoIG5ld0JhdGNoLCBCYXRjaFJpbmdJdGVtUG9zICpwb3MpCit7CisJQXNzZXJ0 KG5ld0JhdGNoLT5kaXIgPT0gZGlyZWN0aW9uKTsKKwlBc3NlcnQobmV3QmF0Y2gtPmZpcnN0SXRl bSA+PSAwICYmIG5ld0JhdGNoLT5maXJzdEl0ZW0gPD0gbmV3QmF0Y2gtPmxhc3RJdGVtKTsKKwor CS8qIEluY3JlbWVudCBiYXRjaCAobWlnaHQgd3JhcCksIG9yIGluaXRpYWxpemUgaXQgdG8gemVy byAqLworCWlmIChwb3MtPnZhbGlkKQorCQlwb3MtPmJhdGNoKys7CisJZWxzZQorCQlwb3MtPmJh dGNoID0gMDsKKworCXBvcy0+dmFsaWQgPSB0cnVlOworCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zv cndhcmQoZGlyZWN0aW9uKSkKKwkJcG9zLT5pdGVtID0gbmV3QmF0Y2gtPmZpcnN0SXRlbTsKKwll bHNlCisJCXBvcy0+aXRlbSA9IG5ld0JhdGNoLT5sYXN0SXRlbTsKK30KKworLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICogVXRpbGl0aWVzIGNhbGxlZCBieSB0YWJsZSBBTXMKKyAqIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworCisvKgorICogU2V0cyB1cCB0aGUgYmF0Y2ggcmluZyBidWZmZXIg c3RydWN0dXJlIGZvciB1c2UgYnkgYW4gaW5kZXggc2Nhbi4KKyAqCisgKiBDYWxsZWQgZnJvbSB0 YWJsZSBBTSdzIGluZGV4X3NjYW5fYmVnaW4gY2FsbGJhY2sgZHVyaW5nIGFtZ2V0YmF0Y2ggc2Nh bnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVhbV91dGlsX2JhdGNoc2Nhbl9pbml0 KEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRf aW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CisKKwlzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBv cy52YWxpZCA9IGZhbHNlOworCXNjYW4tPmJhdGNocmluZ2J1Zi5tYXJrUG9zLnZhbGlkID0gZmFs c2U7CisKKwlzY2FuLT5iYXRjaHJpbmdidWYubWFya0JhdGNoID0gTlVMTDsKKwlzY2FuLT5iYXRj aHJpbmdidWYuaGVhZEJhdGNoID0gMDsKKwlzY2FuLT5iYXRjaHJpbmdidWYubmV4dEJhdGNoID0g MDsKKworCXNjYW4tPnVzZWJhdGNocmluZyA9IHRydWU7Cit9CisKK2V4dGVybiB2b2lkIHRhYmxl YW1fdXRpbF9iYXRjaHNjYW5fcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGVuZHNjYW4p OworZXh0ZXJuIHZvaWQgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9lbmQoSW5kZXhTY2FuRGVzYyBz Y2FuKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fbWFya19wb3MoSW5kZXhT Y2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzdG9y ZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF9zY2Fu YmF0Y2hfZGlyY2hhbmdlKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCB0YWJsZWFt X3V0aWxfc2NhbnBvc19raWxsaXRlbShJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQg dGFibGVhbV91dGlsX3JlbGVhc2VfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5C YXRjaCBiYXRjaCk7CitleHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfdW5ndWFyZF9iYXRjaChJbmRl eFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKworLyoKKyAqIFRyeSB0byBh ZHZhbmNlIHRoZSBzY2FuJ3Mgc2NhblBvcyB0byB0aGUgbmV4dCBtYXRjaGluZyBpdGVtIGZyb20g dGhlCisgKiBzY2FuJ3MgZXhpc3Rpbmcgc2NhbkJhdGNoLCBtb3ZpbmcgaW4gdGhlIGdpdmVuIHNj YW4gZGlyZWN0aW9uLgorICoKKyAqIFNldHMgKnNjYW5CYXRjaCB0byB0aGUgcmluZyBidWZmZXIn cyBleGlzdGluZyBzY2FuQmF0Y2gsIG9yIHRvIE5VTEwgd2hlbiBubworICogYmF0Y2ggaGFzIGJl ZW4gbG9hZGVkIHlldCAodGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIGVudGlyZSBzY2FuKS4K KyAqCisgKiBSZXR1cm5zIHRydWUgd2hlbiBzY2FuUG9zIHdhcyBhZHZhbmNlZCwgaW4gd2hpY2gg Y2FzZSB0aGUgc2NhbiBzaG91bGQKKyAqIHByb2Nlc3MgdGhlIGl0ZW0gdGhhdCBzY2FuUG9zIG5v dyBwb2ludHMgdG8uICBSZXR1cm5zIGZhbHNlIHdoZW4gdGhlcmUgYXJlCisgKiBubyBtb3JlIG1h dGNoaW5nIGl0ZW1zIHJlbWFpbmluZyBpbiBzY2FuQmF0Y2ggKG9yIHdoZW4gbm8gc2NhbkJhdGNo IGhhcworICogYmVlbiBsb2FkZWQgeWV0KS4gIENhbGxlciByZXNwb25kcyB0byBhIGZhbHNlIHJl dHVybiBieSBwYXNzaW5nICpzY2FuQmF0Y2gKKyAqIHRvIHRhYmxlYW1fdXRpbF9mZXRjaF9uZXh0 X2JhdGNoIGFzIGl0cyBwcmlvckJhdGNoIGFyZ3VtZW50LCBhZHZhbmNpbmcgdGhlCisgKiBzY2Fu IHRvIGl0cyBuZXh0IGJhdGNoLgorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxp bmUgYm9vbAordGFibGVhbV91dGlsX3NjYW5wb3NfYWR2YW5jZShJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCSBJbmRleFNjYW5CYXRjaCAqc2NhbkJh dGNoLCBCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0 Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKworCWlmICghc2NhblBvcy0+dmFsaWQp CisJeworCQkvKiBGaXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBlbnRpcmUgc2NhbiAqLworCQlBc3Nl cnQoaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA9PSAwKTsKKworCQkqc2NhbkJhdGNoID0g TlVMTDsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogc2NhblBvcyBpcyB2YWxpZCwg c28gc2NhbkJhdGNoIG11c3QgYWxyZWFkeSBiZSBsb2FkZWQgaW4gYmF0Y2ggcmluZworCSAqIGJ1 ZmZlci4gIFdlIHJlbHkgb24gdGhhdCBoZXJlLgorCSAqLworCXBnX2Fzc3VtZShiYXRjaHJpbmdi dWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRjaCk7CisKKwkqc2NhbkJhdGNoID0gaW5kZXhf c2Nhbl9iYXRjaChzY2FuLCBzY2FuUG9zLT5iYXRjaCk7CisKKwlyZXR1cm4gaW5kZXhfc2Nhbl9w b3NfYWR2YW5jZShkaXJlY3Rpb24sICpzY2FuQmF0Y2gsIHNjYW5Qb3MpOworfQorCisvKgorICog RmV0Y2ggdGhlIG5leHQgYmF0Y2ggb2YgbWF0Y2hpbmcgaXRlbXMgZm9yIHRoZSBzY2FuIChvciB0 aGUgZmlyc3QpLgorICoKKyAqIENhbGxlZCB3aGVuIGNhbGxlcidzIGN1cnJlbnQgYmF0Y2ggKHBh c3NlZCB0byB1cyBhcyBwcmlvckJhdGNoKSBoYXMgbm8gbW9yZQorICogbWF0Y2hpbmcgaXRlbXMg aW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLiAgQ2FsbGVyIHBhc3NlcyBhIE5VTEwKKyAqIHBy aW9yQmF0Y2ggb24gdGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIHNjYW4uCisgKgorICogUmV0 dXJucyB0aGUgbmV4dCBiYXRjaCB0byBiZSBwcm9jZXNzZWQgYnkgY2FsbGVyIGluIHRoZSBnaXZl biBzY2FuCisgKiBkaXJlY3Rpb24sIG9yIE5VTEwgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRj aGVzIGluIHRoYXQgZGlyZWN0aW9uLgorICogUmV0dXJuZWQgYmF0Y2ggd2lsbCBoYXZlIGFscmVh ZHkgYmVlbiBhcHBlbmRlZCB0byB0aGUgc2NhbidzIHJpbmcgYnVmZmVyCisgKiAodGhvdWdoIG5v dCBuZWNlc3NhcmlseSBkdXJpbmcgdGhpcyBjYWxsKS4KKyAqCisgKiBXZSBkb24ndCBmcmVlIGFu eSBiYXRjaGVzIGhlcmU7IHRoYXQgaXMgYSBzZXBhcmF0ZSBzdGVwIHBlcmZvcm1lZCBieQorICog dGFibGVhbV91dGlsX3NjYW5wb3NfbmV4dGJhdGNoLiAgQ2FsbGVyIGFsc28gbmVlZHMgdG8gYWR2 YW5jZSB0aGVpcgorICogcG9zaXRpb24gdG8gdGhlIHN0YXJ0IG9mIHRoZSByZXR1cm5lZCBiYXRj aC4KKyAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIEluZGV4U2NhbkJhdGNo Cit0YWJsZWFtX3V0aWxfZmV0Y2hfbmV4dF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCSAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JCYXRjaCwg QmF0Y2hSaW5nSXRlbVBvcyAqcG9zKQoreworCUluZGV4U2NhbkJhdGNoIGJhdGNoID0gTlVMTDsK KwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFkg PSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCisJQXNzZXJ0KHNjYW4tPnVzZWJhdGNocmluZyk7CisK KwlpZiAoIXByaW9yQmF0Y2gpCisJeworCQkvKiBGaXJzdCBjYWxsIGZvciB0aGUgc2NhbiAqLwor CQlBc3NlcnQocG9zID09ICZiYXRjaHJpbmdidWYtPnNjYW5Qb3MpOworCX0KKwllbHNlIGlmICh1 bmxpa2VseShwcmlvckJhdGNoLT5kaXIgIT0gZGlyZWN0aW9uKSkKKwl7CisJCS8qCisJCSAqIFdl IGRldGVjdGVkIGEgY2hhbmdlIGluIHNjYW4gZGlyZWN0aW9uIGFjcm9zcyBiYXRjaGVzLiAgUHJl cGFyZQorCQkgKiBzY2FuJ3MgYmF0Y2hyaW5nYnVmIHN0YXRlIGZvciB1cyB0byBnZXQgdGhlIG5l eHQgYmF0Y2ggZm9yIHRoZQorCQkgKiBvcHBvc2l0ZSBzY2FuIGRpcmVjdGlvbiB0byB0aGUgb25l IHVzZWQgd2hlbiBwcmlvckJhdGNoIHdhcworCQkgKiByZXR1cm5lZCBieSBhbWdldGJhdGNoLgor CQkgKi8KKwkJdGFibGVhbV91dGlsX3NjYW5iYXRjaF9kaXJjaGFuZ2Uoc2Nhbik7CisKKwkJLyog cHJpb3JCYXRjaCBpcyBub3cgYmF0Y2hyaW5nYnVmJ3Mgb25seSBiYXRjaCAqLworCQlBc3NlcnQo cG9zLT5iYXRjaCA9PSBiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCk7CisJCUFzc2VydChpbmRleF9z Y2FuX2JhdGNoX2NvdW50KHNjYW4pID09IDEpOworCX0KKwllbHNlIGlmIChpbmRleF9zY2FuX2Jh dGNoX2xvYWRlZChzY2FuLCBwb3MtPmJhdGNoICsgMSkpCisJeworCQkvKiBOZXh0IGJhdGNoIGFs cmVhZHkgbG9hZGVkIGZvciB1cyAqLworCQliYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwg cG9zLT5iYXRjaCArIDEpOworCisJCUFzc2VydChwcmlvckJhdGNoLT5kaXIgPT0gZGlyZWN0aW9u KTsKKwkJQXNzZXJ0KGJhdGNoLT5kaXIgPT0gZGlyZWN0aW9uKTsKKwkJQXNzZXJ0KGJhdGNoLT5m aXJzdEl0ZW0gPj0gMCAmJiBiYXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CisJ CXJldHVybiBiYXRjaDsKKwl9CisKKwkvKgorCSAqIEFzc2VydCBwcmVjb25kaXRpb25zIGZvciBj YWxsaW5nIGFtZ2V0YmF0Y2guCisJICoKKwkgKiBwcmlvckJhdGNoIGhhZCBiZXR0ZXIgYmUgZm9y IHRoZSBsYXN0IHZhbGlkIGJhdGNoIGN1cnJlbnRseSBpbiB0aGUgcmluZworCSAqIGJ1ZmZlciAo YmF0Y2hlcyBtdXN0IHN0YXkgaW4gc2NhbiBvcmRlcikuICBJZiBpdCBpc24ndCB0aGVuIHdlIHNo b3VsZAorCSAqIGhhdmUgYWxyZWFkeSByZXR1cm5lZCBzb21lIGV4aXN0aW5nIGxvYWRlZCBiYXRj aCBlYXJsaWVyLgorCSAqLworCUFzc2VydCghaW5kZXhfc2Nhbl9iYXRjaF9mdWxsKHNjYW4pKTsK KwlBc3NlcnQoIXByaW9yQmF0Y2ggfHwKKwkJICAgKGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2Nh bikgPiAwICYmIHByaW9yQmF0Y2gtPmRpciA9PSBkaXJlY3Rpb24gJiYKKwkJCWluZGV4X3NjYW5f YmF0Y2goc2NhbiwgYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2ggLSAxKSA9PSBwcmlvckJhdGNoKSk7 CisKKwkvKgorCSAqIEJlZm9yZSB3ZSBjYWxsIGFtZ2V0YmF0Y2ggYWdhaW4sIGNoZWNrIGlmIHBy aW9yQmF0Y2ggaXMgYWxyZWFkeSBrbm93bgorCSAqIHRvIGJlIHRoZSBsYXN0IGJhdGNoIHdpdGgg bWF0Y2hpbmcgaXRlbXMgaW4gdGhpcyBzY2FuIGRpcmVjdGlvbgorCSAqLworCWlmIChwcmlvckJh dGNoICYmCisJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikgPworCQkgcHJpb3JC YXRjaC0+a25vd25FbmRGb3J3YXJkIDoKKwkJIHByaW9yQmF0Y2gtPmtub3duRW5kQmFja3dhcmQp KQorCQlyZXR1cm4gTlVMTDsKKworCWJhdGNoID0gc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5k YW0tPmFtZ2V0YmF0Y2goc2NhbiwgcHJpb3JCYXRjaCwKKwkJCQkJCQkJCQkJCQkgIGRpcmVjdGlv bik7CisJaWYgKGJhdGNoKQorCXsKKwkJLyogV2UgZ290IHRoZSBiYXRjaCBmcm9tIHRoZSBpbmRl eCBBTSAqLworCQlBc3NlcnQoYmF0Y2gtPmRpciA9PSBkaXJlY3Rpb24pOworCQlBc3NlcnQoYmF0 Y2gtPmZpcnN0SXRlbSA+PSAwICYmIGJhdGNoLT5maXJzdEl0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVt KTsKKworCQkvKiBBcHBlbmQgYmF0Y2ggdG8gdGhlIGVuZCBvZiByaW5nIGJ1ZmZlci93cml0ZSBp dCB0byBidWZmZXIgaW5kZXggKi8KKwkJaW5kZXhfc2Nhbl9iYXRjaF9hcHBlbmQoc2NhbiwgYmF0 Y2gpOworCisJCS8qCisJCSAqIFRoZW9yZXRpY2FsbHkgd2Ugc2hvdWxkIHNldCBrbm93bkVuZEZv cndhcmQva25vd25FbmRCYWNrd2FyZCB0bworCQkgKiBmYWxzZSAod2hpY2hldmVyIGlzIHVzZWQg d2hlbiBtb3ZpbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbikKKwkJICogd2hlbiB0aGlzIGlz IHRoZSBzY2FuJ3MgZmlyc3QgcmV0dXJuZWQgYmF0Y2guICBXZSBkb24ndCBib3RoZXIKKwkJICog YmVjYXVzZSB0aGUgaW5kZXggQU0gc2hvdWxkIGFsd2F5cyByZWNvcmQgdGhhdCBmYWN0IGluIGl0 cyBvd24KKwkJICogb3BhcXVlIGFyZWEuICAoVGhlc2UgZmllbGRzIG9ubHkgZXhpc3QgYmVjYXVz ZSB3ZSBkb24ndCB3YW50IGluZGV4CisJCSAqIEFNcyBzZXR0aW5nIF9hbnlfIGZpZWxkIGZyb20g YW55IHByaW9yYmF0Y2ggdGhhdCB3ZSBwYXNzIHRvIHRoZW0uCisJCSAqIEJlc2lkZXMsIGl0IHdv dWxkIGJlIGN1bWJlcnNvbWUgZm9yIGluZGV4IEFNcyB0byBrZWVwIHRyYWNrIG9mCisJCSAqIHdo aWNoIGJhdGNoIGlzIHRoZSBjdXJyZW50IGFtZ2V0YmF0Y2ggY2FsbCdzIG9yaWdpbmFsIHByaW9y YmF0Y2guKQorCQkgKi8KKwl9CisJZWxzZQorCXsKKwkJLyogYW1nZXRiYXRjaCByZXR1cm5lZCBO VUxMICovCisJCWlmIChwcmlvckJhdGNoKQorCQl7CisJCQkvKgorCQkJICogVGhlcmUgYXJlIG5v IGZ1cnRoZXIgbWF0Y2hlcyB0byBiZSBmb3VuZCBpbiB0aGUgY3VycmVudCBzY2FuCisJCQkgKiBk aXJlY3Rpb24sIGZvbGxvd2luZyBwcmlvckJhdGNoLiAgUmVtZW1iZXIgdGhhdCBwcmlvckJhdGNo IGlzCisJCQkgKiB0aGUgbGFzdCBiYXRjaCB3aXRoIG1hdGNoaW5nIGl0ZW1zLgorCQkJICovCisJ CQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCQkJCXByaW9yQmF0Y2gt Pmtub3duRW5kRm9yd2FyZCA9IHRydWU7CisJCQllbHNlCisJCQkJcHJpb3JCYXRjaC0+a25vd25F bmRCYWNrd2FyZCA9IHRydWU7CisJCX0KKwl9CisKKwlyZXR1cm4gYmF0Y2g7Cit9CisKKy8qCisg KiBQb3NpdGlvbiBzY2FuUG9zIGF0IHRoZSBzdGFydCBvZiBuZXdTY2FuQmF0Y2ggKGluIHRoZSBn aXZlbiBzY2FuCisgKiBkaXJlY3Rpb24pLCBhbmQgcmVtb3ZlIHRoZSBzY2FuJ3Mgb2xkIHNjYW5C YXRjaCBmcm9tIHRoZSByaW5nIGJ1ZmZlci4KKyAqCisgKiBDYWxsZWQgYWZ0ZXIgdGFibGVhbV91 dGlsX2ZldGNoX25leHRfYmF0Y2ggcmV0dXJucyBuZXdTY2FuQmF0Y2gsIHRoZSBuZXh0CisgKiBi YXRjaCB0aGF0IHNjYW5Qb3Mgd2lsbCBjb25zdW1lIG1hdGNoaW5nIGl0ZW1zIGZyb20uICBXZSBy ZWxlYXNlIHRoZQorICogbm93LW9ic29sZXNjZW50IG9sZCBzY2FuQmF0Y2ggKHRoZSByaW5nIGJ1 ZmZlcidzIGhlYWQgYmF0Y2gpLCBmcmVlaW5nIHVwCisgKiBpdHMgcmluZyBidWZmZXIgc2xvdC4g IChXaGVuIG5ld1NjYW5CYXRjaCBpcyB0aGUgc2NhbidzIGZpcnN0IGJhdGNoLCB0aGVyZQorICog aXMgbm8gb2xkIHNjYW5CYXRjaCBmb3IgdXMgdG8gcmVsZWFzZS4pCisgKi8KK3N0YXRpYyBwZ19h dHRyaWJ1dGVfYWx3YXlzX2lubGluZSB2b2lkCit0YWJsZWFtX3V0aWxfc2NhbnBvc19uZXh0YmF0 Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkg ICBJbmRleFNjYW5CYXRjaCBuZXdTY2FuQmF0Y2gpCit7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRj aHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Q b3MgPSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9zOworCWJvb2wJCXJlbGVhc2VPbGRIZWFkQmF0Y2gg PSBzY2FuUG9zLT52YWxpZDsKKwlJbmRleFNjYW5CYXRjaCBoZWFkQmF0Y2g7CisKKwkvKiBQb3Np dGlvbiBzY2FuUG9zIHRvIHRoZSBzdGFydCBvZiBuZXcgc2NhbkJhdGNoICovCisJaW5kZXhfc2Nh bl9wb3Nfc3RhcnRiYXRjaChkaXJlY3Rpb24sIG5ld1NjYW5CYXRjaCwgc2NhblBvcyk7CisJQXNz ZXJ0KGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpID09IG5ld1NjYW5CYXRj aCk7CisKKwlpZiAoIXJlbGVhc2VPbGRIZWFkQmF0Y2gpCisJeworCQkvKiBuZXdTY2FuQmF0Y2gg aXMgdGhlIHNjYW4ncyBmaXJzdCBhbmQgb25seSBiYXRjaCAqLworCQlBc3NlcnQoYmF0Y2hyaW5n YnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCQlyZXR1cm47CisJfQorCisJaGVh ZEJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCk7 CisKKwlBc3NlcnQoaGVhZEJhdGNoICE9IG5ld1NjYW5CYXRjaCk7CisJQXNzZXJ0KGJhdGNocmlu Z2J1Zi0+aGVhZEJhdGNoICE9IHNjYW5Qb3MtPmJhdGNoKTsKKworCS8qIGZyZWUgb2Jzb2xlc2Nl bnQgaGVhZCBiYXRjaCAodW5sZXNzIGl0IGlzIHNjYW4ncyBtYXJrQmF0Y2gpICovCisJdGFibGVh bV91dGlsX3JlbGVhc2VfYmF0Y2goc2NhbiwgaGVhZEJhdGNoKTsKKworCS8qIFJlbW92ZSB0aGUg YmF0Y2ggZnJvbSB0aGUgcmluZyBidWZmZXIgKGV2ZW4gaWYgaXQncyBtYXJrQmF0Y2gpICovCisJ YmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2grKzsKKworCS8qIFBvc3Rjb25kaXRpb25zIGZvciBoYXZp bmcgZnJlZWQgdXAgYSByaW5nIGJ1ZmZlciBzbG90ICovCisJQXNzZXJ0KCFpbmRleF9zY2FuX2Jh dGNoX2Z1bGwoc2NhbikpOworCUFzc2VydChiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2Fu UG9zLT5iYXRjaCk7Cit9CisKKy8qCisgKiBGZXRjaCB0aGUgbmV4dCBtYXRjaGluZyBUSUQgZm9y IHRoZSBzY2FuIChvciB0aGUgZmlyc3QpLgorICoKKyAqIFRoaXMgaXMgdGhlIGFtZ2V0dHVwbGUg ZXF1aXZhbGVudCBvZiB0YWJsZWFtX3V0aWxfZmV0Y2hfbmV4dF9iYXRjaC4KKyAqCisgKiBUaGVy ZSBpcyBubyBiYXRjaC1saWtlIHN0YXRlIGZvciB1cyB0byBtYW5hZ2UgKHR5cGljYWxseSB0aGF0 J3MgdXAgdG8gdGhlCisgKiBpbmRleCBBTSB3aGVuIGl0IGltcGxlbWVudHMgYW1nZXR0dXBsZSku CisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBJdGVtUG9pbnRlcgordGFi bGVhbV91dGlsX2ZldGNoX25leHRfdHVwbGVfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXJlY3Rpb24pCit7CisJYm9vbAkJZm91bmQ7CisKKwlBc3NlcnQoIXNjYW4tPnVz ZWJhdGNocmluZyk7CisKKwlmb3VuZCA9IHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5h bWdldHR1cGxlKHNjYW4sIGRpcmVjdGlvbik7CisKKwkvKiBSZXNldCBraWxsIGZsYWcgaW1tZWRp YXRlbHkgZm9yIHNhZmV0eSAqLworCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsKKwlB c3NlcnQoIXNjYW4tPnhzX2hlYXBfY29udGludWUpOworCisJLyogSWYgd2UncmUgb3V0IG9mIGlu ZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KKwlpZiAoIWZvdW5kKQorCQlyZXR1cm4gTlVMTDsK KworCS8qIFJldHVybiB0aGUgVElEIG9mIHRoZSB0dXBsZSB3ZSBmb3VuZCAqLworCXJldHVybiAm c2Nhbi0+eHNfaGVhcHRpZDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXRpbGl0 aWVzIGNhbGxlZCBieSBpbmRleCBBTXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworZXh0 ZXJuIHZvaWQgaW5kZXhhbV91dGlsX3VubG9ja19iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIElu ZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkJCQkJICBCdWZmZXIgYnVmKTsKK2V4dGVybiBJbmRl eFNjYW5CYXRjaCBpbmRleGFtX3V0aWxfYWxsb2NfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuKTsK K2V4dGVybiB2b2lkIGluZGV4YW1fdXRpbF9yZWxlYXNlX2JhdGNoKEluZGV4U2NhbkRlc2Mgc2Nh biwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworCisjZW5kaWYJCQkJCQkJLyogSU5ERVhCQVRDSF9I ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvbmJ0cmVlLmgKaW5kZXggMzA5N2U5YmIxLi4wMjU0YTIyM2UgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0 cmVlLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgTkJUUkVFX0gKIAogI2luY2x1ZGUgImFj Y2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy9pbmRleGJhdGNoLmgiCiAjaW5jbHVkZSAi YWNjZXNzL2l0dXAuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgogI2luY2x1ZGUgImNhdGFs b2cvcGdfYW1fZC5oIgpAQCAtOTI0LDExMiArOTI1LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRWYWN1 dW1Qb3N0aW5nRGF0YQogCiB0eXBlZGVmIEJUVmFjdXVtUG9zdGluZ0RhdGEgKkJUVmFjdXVtUG9z dGluZzsKIAotLyoKLSAqIEJUU2Nhbk9wYXF1ZURhdGEgaXMgdGhlIGJ0cmVlLXByaXZhdGUgc3Rh dGUgbmVlZGVkIGZvciBhbiBpbmRleHNjYW4uCi0gKiBUaGlzIGNvbnNpc3RzIG9mIHByZXByb2Nl c3NlZCBzY2FuIGtleXMgKHNlZSBfYnRfcHJlcHJvY2Vzc19rZXlzKCkgZm9yCi0gKiBkZXRhaWxz IG9mIHRoZSBwcmVwcm9jZXNzaW5nKSwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgbG9j YXRpb24KLSAqIG9mIHRoZSBzY2FuLCBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hcmtlZCBs b2NhdGlvbiwgaWYgYW55LiAgKFdlIHVzZQotICogQlRTY2FuUG9zRGF0YSB0byByZXByZXNlbnQg dGhlIGRhdGEgbmVlZGVkIGZvciBlYWNoIG9mIGN1cnJlbnQgYW5kIG1hcmtlZAotICogbG9jYXRp b25zLikJSW4gYWRkaXRpb24gd2UgY2FuIHJlbWVtYmVyIHNvbWUga25vd24ta2lsbGVkIGluZGV4 IGVudHJpZXMKLSAqIHRoYXQgbXVzdCBiZSBtYXJrZWQgYmVmb3JlIHdlIGNhbiBtb3ZlIG9mZiB0 aGUgY3VycmVudCBwYWdlLgotICoKLSAqIEluZGV4IHNjYW5zIHdvcmsgYSBwYWdlIGF0IGEgdGlt ZTogd2UgcGluIGFuZCByZWFkLWxvY2sgdGhlIHBhZ2UsIGlkZW50aWZ5Ci0gKiBhbGwgdGhlIG1h dGNoaW5nIGl0ZW1zIG9uIHRoZSBwYWdlIGFuZCBzYXZlIHRoZW0gaW4gQlRTY2FuUG9zRGF0YSwg dGhlbgotICogcmVsZWFzZSB0aGUgcmVhZC1sb2NrIHdoaWxlIHJldHVybmluZyB0aGUgaXRlbXMg dG8gdGhlIGNhbGxlciBmb3IKLSAqIHByb2Nlc3NpbmcuICBUaGlzIGFwcHJvYWNoIG1pbmltaXpl cyBsb2NrL3VubG9jayB0cmFmZmljLiAgV2UgbXVzdCBhbHdheXMKLSAqIGRyb3AgdGhlIGxvY2sg dG8gbWFrZSBpdCBva2F5IGZvciBjYWxsZXIgdG8gcHJvY2VzcyB0aGUgcmV0dXJuZWQgaXRlbXMu Ci0gKiBXaGV0aGVyIG9yIG5vdCB3ZSBjYW4gYWxzbyByZWxlYXNlIHRoZSBwaW4gZHVyaW5nIHRo aXMgd2luZG93IHdpbGwgdmFyeS4KLSAqIFdlIGRyb3AgdGhlIHBpbiAod2hlbiBzby0+ZHJvcFBp bikgdG8gYXZvaWQgYmxvY2tpbmcgcHJvZ3Jlc3MgYnkgVkFDVVVNCi0gKiAoc2VlIG5idHJlZS9S RUFETUUgc2VjdGlvbiBhYm91dCBtYWtpbmcgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHNhZmUp LgotICogV2UnbGwgYWx3YXlzIHJlbGVhc2UgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbiBvbiB0 aGUgY3VycmVudCBwYWdlIGJlZm9yZQotICogbW92aW5nIG9uIHRvIGl0cyBzaWJsaW5nIHBhZ2Uu Ci0gKgotICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwgd2Ugc2F2ZSB0aGUg ZW50aXJlIEluZGV4VHVwbGUgZm9yIGVhY2gKLSAqIG1hdGNoZWQgaXRlbSwgb3RoZXJ3aXNlIG9u bHkgaXRzIGhlYXAgVElEIGFuZCBvZmZzZXQuICBUaGUgSW5kZXhUdXBsZXMgZ28KLSAqIGludG8g YSBzZXBhcmF0ZSB3b3Jrc3BhY2UgYXJyYXk7IGVhY2ggQlRTY2FuUG9zSXRlbSBzdG9yZXMgaXRz IHR1cGxlJ3MKLSAqIG9mZnNldCB3aXRoaW4gdGhhdCBhcnJheS4gIFBvc3RpbmcgbGlzdCB0dXBs ZXMgc3RvcmUgYSAiYmFzZSIgdHVwbGUgb25jZSwKLSAqIGFsbG93aW5nIHRoZSBzYW1lIGtleSB0 byBiZSByZXR1cm5lZCBmb3IgZWFjaCBUSUQgaW4gdGhlIHBvc3RpbmcgbGlzdAotICogdHVwbGUu Ci0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuUG9zSXRlbQkvKiB3aGF0IHdlIHJlbWVtYmVy IGFib3V0IGVhY2ggbWF0Y2ggKi8KLXsKLQlJdGVtUG9pbnRlckRhdGEgaGVhcFRpZDsJLyogVElE IG9mIHJlZmVyZW5jZWQgaGVhcCBpdGVtICovCi0JT2Zmc2V0TnVtYmVyIGluZGV4T2Zmc2V0Owkv KiBpbmRleCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2UgKi8KLQlMb2NhdGlvbkluZGV4IHR1 cGxlT2Zmc2V0OwkvKiBJbmRleFR1cGxlJ3Mgb2Zmc2V0IGluIHdvcmtzcGFjZSwgaWYgYW55ICov Ci19IEJUU2NhblBvc0l0ZW07Ci0KLXR5cGVkZWYgc3RydWN0IEJUU2NhblBvc0RhdGEKLXsKLQlC dWZmZXIJCWJ1ZjsJCQkvKiBjdXJyUGFnZSBidWYgKGludmFsaWQgbWVhbnMgdW5waW5uZWQpICov Ci0KLQkvKiBwYWdlIGRldGFpbHMgYXMgb2YgdGhlIHNhdmVkIHBvc2l0aW9uJ3MgY2FsbCB0byBf YnRfcmVhZHBhZ2UgKi8KLQlCbG9ja051bWJlciBjdXJyUGFnZTsJCS8qIHBhZ2UgcmVmZXJlbmNl ZCBieSBpdGVtcyBhcnJheSAqLwotCUJsb2NrTnVtYmVyIHByZXZQYWdlOwkJLyogY3VyclBhZ2Un cyBsZWZ0IGxpbmsgKi8KLQlCbG9ja051bWJlciBuZXh0UGFnZTsJCS8qIGN1cnJQYWdlJ3Mgcmln aHQgbGluayAqLwotCVhMb2dSZWNQdHIJbHNuOwkJCS8qIGN1cnJQYWdlJ3MgTFNOICh3aGVuIHNv LT5kcm9wUGluKSAqLwotCi0JLyogc2NhbiBkaXJlY3Rpb24gZm9yIHRoZSBzYXZlZCBwb3NpdGlv bidzIGNhbGwgdG8gX2J0X3JlYWRwYWdlICovCi0JU2NhbkRpcmVjdGlvbiBkaXI7Ci0KLQkvKgot CSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIG5leHRUdXBsZU9mZnNldCBp cyB0aGUgZmlyc3QgZnJlZQotCSAqIGxvY2F0aW9uIGluIHRoZSBhc3NvY2lhdGVkIHR1cGxlIHN0 b3JhZ2Ugd29ya3NwYWNlLgotCSAqLwotCWludAkJCW5leHRUdXBsZU9mZnNldDsKLQotCS8qCi0J ICogbW9yZUxlZnQgYW5kIG1vcmVSaWdodCB0cmFjayB3aGV0aGVyIHdlIHRoaW5rIHRoZXJlIG1h eSBiZSBtYXRjaGluZwotCSAqIGluZGV4IGVudHJpZXMgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0IG9m IHRoZSBjdXJyZW50IHBhZ2UsIHJlc3BlY3RpdmVseS4KLQkgKi8KLQlib29sCQltb3JlTGVmdDsK LQlib29sCQltb3JlUmlnaHQ7Ci0KLQkvKgotCSAqIFRoZSBpdGVtcyBhcnJheSBpcyBhbHdheXMg b3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcKLQkgKiBpbmRleG9mZnNldCku ICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50IHRvIGZpbGwgdGhlCi0J ICogYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQgdGhlIGxhc3Qgc2xvdCBhbmQg ZmlsbCBkb3dud2FyZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3RoIGEgZmlyc3QtdmFsaWQtZW50 cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAqIGl0ZW1JbmRleCBpcyBhIGN1 cnNvciBzaG93aW5nIHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVybmVkIHRvIGNhbGxlci4KLQkg Ki8KLQlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICov Ci0JaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlp bnQJCQlpdGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0ZW1zW10gKi8KLQotCUJUU2Nh blBvc0l0ZW0gaXRlbXNbTWF4VElEc1BlckJUcmVlUGFnZV07CS8qIE1VU1QgQkUgTEFTVCAqLwot fSBCVFNjYW5Qb3NEYXRhOwotCi10eXBlZGVmIEJUU2NhblBvc0RhdGEgKkJUU2NhblBvczsKLQot I2RlZmluZSBCVFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNybyhC bG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklz VmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSBc Ci0pCi0jZGVmaW5lIEJUU2NhblBvc1VucGluKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJUmVsZWFz ZUJ1ZmZlcigoc2NhbnBvcykuYnVmKTsgXAotCQkoc2NhbnBvcykuYnVmID0gSW52YWxpZEJ1ZmZl cjsgXAotCX0gd2hpbGUgKDApCi0jZGVmaW5lIEJUU2NhblBvc1VucGluSWZQaW5uZWQoc2NhbnBv cykgXAotCWRvIHsgXAotCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQoc2NhbnBvcykpIFwKLQkJCUJU U2NhblBvc1VucGluKHNjYW5wb3MpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBCVFNjYW5Q b3NJc1ZhbGlkKHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxp ZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcyku YnVmKSksIFwKLQlCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSBcCi0pCi0j ZGVmaW5lIEJUU2NhblBvc0ludmFsaWRhdGUoc2NhbnBvcykgXAotCWRvIHsgXAotCQkoc2NhbnBv cykuYnVmID0gSW52YWxpZEJ1ZmZlcjsgXAotCQkoc2NhbnBvcykuY3VyclBhZ2UgPSBJbnZhbGlk QmxvY2tOdW1iZXI7IFwKLQl9IHdoaWxlICgwKQotCiAvKiBXZSBuZWVkIG9uZSBvZiB0aGVzZSBm b3IgZWFjaCBlcXVhbGl0eS10eXBlIFNLX1NFQVJDSEFSUkFZIHNjYW4ga2V5ICovCiB0eXBlZGVm IHN0cnVjdCBCVEFycmF5S2V5SW5mbwogewpAQCAtMTA1MCw2ICs5NDUsNDMgQEAgdHlwZWRlZiBz dHJ1Y3QgQlRBcnJheUtleUluZm8KIAlTY2FuS2V5CQloaWdoX2NvbXBhcmU7CS8qIGFycmF5J3Mg PCBvciA8PSB1cHBlciBib3VuZCAqLwogfSBCVEFycmF5S2V5SW5mbzsKIAorLyogUGVyLWJhdGNo IGRhdGEgcHJpdmF0ZSB0byB0aGUgYnRyZWUgaW5kZXggQU0gKi8KK3R5cGVkZWYgc3RydWN0IEJU QmF0Y2hEYXRhCit7CisJQnVmZmVyCQlidWY7CQkJLyogbGVhZiBwYWdlJ3MgYnVmZmVyIHBpbiAq LworCUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJLyogbGVhZiBwYWdlJ3MgYmxvY2sgbnVtYmVyICov CisJQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBsZWFmIHBhZ2UncyBsZWZ0IHNpYmxpbmcgKi8K KwlCbG9ja051bWJlciBuZXh0UGFnZTsJCS8qIGxlYWYgcGFnZSdzIHJpZ2h0IHNpYmxpbmcgKi8K Kwlib29sCQltb3JlTGVmdDsJCS8qIG1vcmUgcGFnZXMgb2YgaW50ZXJlc3QgdG8gdGhlIGxlZnQ/ ICovCisJYm9vbAkJbW9yZVJpZ2h0OwkJLyogbW9yZSBwYWdlcyBvZiBpbnRlcmVzdCB0byB0aGUg cmlnaHQ/ICovCit9IEJUQmF0Y2hEYXRhOworCisvKiBBY2Nlc3MgdGhlIGJ0cmVlLXByaXZhdGUg cGVyLWJhdGNoIGRhdGEgZnJvbSBhbiBJbmRleFNjYW5CYXRjaCBwb2ludGVyICovCisjZGVmaW5l IEJUQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKSBcCisJaW5kZXhfc2Nhbl9iYXRjaF9pbmRleF9v cGFxdWVfc3RhdGljKHNjYW4sIGJhdGNoLCBCVEJhdGNoRGF0YSkKKworLyoKKyAqIEJUU2Nhbk9w YXF1ZURhdGEgaXMgdGhlIGJ0cmVlLXByaXZhdGUgc3RhdGUgbmVlZGVkIGZvciBhbiBpbmRleHNj YW4uCisgKiBUaGlzIGNvbnNpc3RzIG9mIHByZXByb2Nlc3NlZCBzY2FuIGtleXMgKHNlZSBfYnRf cHJlcHJvY2Vzc19rZXlzKCkgZm9yCisgKiBkZXRhaWxzIG9mIHRoZSBwcmVwcm9jZXNzaW5nKSwg YW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGFycmF5CisgKiBrZXlzLiAgVGhlcmUg YXJlIGFzc3VtcHRpb25zIGFib3V0IGhvdyB0aGUgY3VycmVudCBhcnJheSBrZXlzIHRyYWNrIHRo ZQorICogcHJvZ3Jlc3Mgb2YgdGhlIGluZGV4IHNjYW4gdGhyb3VnaCB0aGUgaW5kZXgncyBrZXkg c3BhY2UgKHNlZSBfYnRfcmVhZHBhZ2UsCisgKiBidHBvc3Jlc2V0LCBhbmQgX2J0X2FkdmFuY2Vf YXJyYXlfa2V5cyksIGJ1dCB3ZSBkb24ndCB0cmFjayBhbnl0aGluZyBhYm91dAorICogdGhlIGN1 cnJlbnQgc2NhbiBwb3NpdGlvbi9iYXRjaCBpbiB0aGlzIG9wYXF1ZSBzdHJ1Y3QuCisgKgorICog SW5kZXggc2NhbnMgd29yayBhIHBhZ2UgYXQgYSB0aW1lLCBhcyByZXF1aXJlZCBieSB0aGUgYW1n ZXRiYXRjaCBjb250cmFjdDoKKyAqIHdlIHBpbiBhbmQgcmVhZC1sb2NrIHRoZSBwYWdlLCBpZGVu dGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIG9uIHRoZSBwYWdlCisgKiBhbmQgcmV0dXJuIHRo ZW0gaW4gYSBuZXdseSBhbGxvY2F0ZWQgYmF0Y2guICBXZSB0aGVuIHJlbGVhc2UgdGhlIHJlYWQt bG9jaworICogdXNpbmcgYW1nZXRiYXRjaCB1dGlsaXR5IHJvdXRpbmVzLiAgVGhpcyBhcHByb2Fj aCBtaW5pbWl6ZXMgbG9jay91bmxvY2sKKyAqIHRyYWZmaWMuICBfYnRfbmV4dCBpcyBwYXNzZWQg cHJpb3JiYXRjaCwgd2hpY2ggaGFzIGEgQlRCYXRjaERhdGEgYXJlYSB0aGF0CisgKiB0ZWxscyB1 cyB3aGljaCBwYWdlIGlzIG5leHQgaW4gbGluZSB0byBiZSByZWFkIGluIHRoZSBnaXZlbiBzY2Fu IGRpcmVjdGlvbgorICogKHRoaXMgaXMgb2Z0ZW4gdGhlIHNhbWUgcHJpb3JiYXRjaCBwYXNzZWQg dG8gYnRnZXRiYXRjaCBieSBjb3JlIGNvZGUpLgorICoKKyAqIElmIHdlIGFyZSBkb2luZyBhbiBp bmRleC1vbmx5IHNjYW4sIHdlIHNhdmUgdGhlIGVudGlyZSBJbmRleFR1cGxlIGZvciBlYWNoCisg KiBtYXRjaGVkIGl0ZW0sIG90aGVyd2lzZSBvbmx5IGl0cyB0YWJsZSBUSUQgYW5kIG9mZnNldC4g IFBvc3RpbmcgbGlzdCB0dXBsZXMKKyAqIHN0b3JlIGEgImJhc2UiIHR1cGxlIG9uY2UsIGFsbG93 aW5nIHRoZSBzYW1lIGtleSB0byBiZSB1c2VkIGZvciBlYWNoIFRJRCBpbgorICogdGhlIHBvc3Rp bmcgbGlzdC4KKyAqLwogdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQogewogCS8qIHRo ZXNlIGZpZWxkcyBhcmUgc2V0IGJ5IF9idF9wcmVwcm9jZXNzX2tleXMoKTogKi8KQEAgLTEwNjYs MzIgKzk5OCw2IEBAIHR5cGVkZWYgc3RydWN0IEJUU2Nhbk9wYXF1ZURhdGEKIAlCVEFycmF5S2V5 SW5mbyAqYXJyYXlLZXlzOwkvKiBpbmZvIGFib3V0IGVhY2ggZXF1YWxpdHktdHlwZSBhcnJheSBr ZXkgKi8KIAlGbWdySW5mbyAgICpvcmRlclByb2NzOwkJLyogT1JERVIgcHJvY3MgZm9yIHJlcXVp cmVkIGVxdWFsaXR5IGtleXMgKi8KIAlNZW1vcnlDb250ZXh0IGFycmF5Q29udGV4dDsgLyogc2Nh bi1saWZlc3BhbiBjb250ZXh0IGZvciBhcnJheSBkYXRhICovCi0KLQkvKiBpbmZvIGFib3V0IGtp bGxlZCBpdGVtcyBpZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIgdXNlZCkgKi8K LQlpbnQJCSAgICpraWxsZWRJdGVtczsJLyogY3VyclBvcy5pdGVtcyBpbmRleGVzIG9mIGtpbGxl ZCBpdGVtcyAqLwotCWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3Rv cmVkIGl0ZW1zICovCi0JYm9vbAkJZHJvcFBpbjsJCS8qIGRyb3AgbGVhZiBwaW4gYmVmb3JlIGJ0 Z2V0dHVwbGUgcmV0dXJucz8gKi8KLQotCS8qCi0JICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4 LW9ubHkgc2NhbiwgdGhlc2UgYXJlIHRoZSB0dXBsZSBzdG9yYWdlCi0JICogd29ya3NwYWNlcyBm b3IgdGhlIGN1cnJQb3MgYW5kIG1hcmtQb3MgcmVzcGVjdGl2ZWx5LiAgRWFjaCBpcyBvZiBzaXpl Ci0JICogQkxDS1NaLCBzbyBpdCBjYW4gaG9sZCBhcyBtdWNoIGFzIGEgZnVsbCBwYWdlJ3Mgd29y dGggb2YgdHVwbGVzLgotCSAqLwotCWNoYXIJICAgKmN1cnJUdXBsZXM7CQkvKiB0dXBsZSBzdG9y YWdlIGZvciBjdXJyUG9zICovCi0JY2hhcgkgICAqbWFya1R1cGxlczsJCS8qIHR1cGxlIHN0b3Jh Z2UgZm9yIG1hcmtQb3MgKi8KLQotCS8qCi0JICogSWYgdGhlIG1hcmtlZCBwb3NpdGlvbiBpcyBv biB0aGUgc2FtZSBwYWdlIGFzIGN1cnJlbnQgcG9zaXRpb24sIHdlCi0JICogZG9uJ3QgdXNlIG1h cmtQb3MsIGJ1dCBqdXN0IGtlZXAgdGhlIG1hcmtlZCBpdGVtSW5kZXggaW4gbWFya0l0ZW1JbmRl eAotCSAqIChhbGwgdGhlIHJlc3Qgb2YgY3VyclBvcyBpcyB2YWxpZCBmb3IgdGhlIG1hcmsgcG9z aXRpb24pLiBIZW5jZSwgdG8KLQkgKiBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYSBtYXJrLCBmaXJz dCBsb29rIGF0IG1hcmtJdGVtSW5kZXgsIHRoZW4gYXQKLQkgKiBtYXJrUG9zLgotCSAqLwotCWlu dAkJCW1hcmtJdGVtSW5kZXg7CS8qIGl0ZW1JbmRleCwgb3IgLTEgaWYgbm90IHZhbGlkICovCi0K LQkvKiBrZWVwIHRoZXNlIGxhc3QgaW4gc3RydWN0IGZvciBlZmZpY2llbmN5ICovCi0JQlRTY2Fu UG9zRGF0YSBjdXJyUG9zOwkJLyogY3VycmVudCBwb3NpdGlvbiBkYXRhICovCi0JQlRTY2FuUG9z RGF0YSBtYXJrUG9zOwkJLyogbWFya2VkIHBvc2l0aW9uLCBpZiBhbnkgKi8KIH0gQlRTY2FuT3Bh cXVlRGF0YTsKIAogdHlwZWRlZiBCVFNjYW5PcGFxdWVEYXRhICpCVFNjYW5PcGFxdWU7CkBAIC0x MTYwLDE0ICsxMDY2LDE3IEBAIGV4dGVybiBib29sIGJ0aW5zZXJ0KFJlbGF0aW9uIHJlbCwgRGF0 dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogZXh0ZXJuIEluZGV4U2NhbkRlc2MgYnRiZWdpbnNj YW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwogZXh0ZXJuIFNpemUg YnRlc3RpbWF0ZXBhcmFsbGVsc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRl cmJ5cyk7CiBleHRlcm4gdm9pZCBidGluaXRwYXJhbGxlbHNjYW4odm9pZCAqdGFyZ2V0KTsKLWV4 dGVybiBib29sIGJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggYnRnZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4s CisJCQkJCQkJCSBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLAorCQkJCQkJCQkgU2NhbkRpcmVj dGlvbiBkaXIpOwogZXh0ZXJuIGludDY0IGJ0Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2Nhbiwg VElEQml0bWFwICp0Ym0pOwogZXh0ZXJuIHZvaWQgYnRyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJCQkJCSBTY2FuS2V5IG9yZGVyYnlz LCBpbnQgbm9yZGVyYnlzKTsKK2V4dGVybiB2b2lkIGJ0dW5ndWFyZGJhdGNoKEluZGV4U2NhbkRl c2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworZXh0ZXJuIHZvaWQgYnRraWxsaXRlbXNi YXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIGV4dGVybiB2 b2lkIGJ0cGFyYWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiB2b2lkIGJ0 ZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwotZXh0ZXJuIHZvaWQgYnRtYXJrcG9zKEluZGV4 U2NhbkRlc2Mgc2Nhbik7Ci1leHRlcm4gdm9pZCBidHJlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2Nh bik7CitleHRlcm4gdm9pZCBidHBvc3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2Fu QmF0Y2ggYmF0Y2gpOwogZXh0ZXJuIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqYnRidWxrZGVsZXRl KEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkgICBJbmRleEJ1bGtEZWxldGVSZXN1 bHQgKnN0YXRzLAogCQkJCQkJCQkJCSAgIEluZGV4QnVsa0RlbGV0ZUNhbGxiYWNrIGNhbGxiYWNr LApAQCAtMTI3MSw4ICsxMTgwLDkgQEAgZXh0ZXJuIHZvaWQgX2J0X3ByZXByb2Nlc3Nfa2V5cyhJ bmRleFNjYW5EZXNjIHNjYW4pOwogLyoKICAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBu YnRyZWFkcGFnZS5jCiAgKi8KLWV4dGVybiBib29sIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAotCQkJCQkJIE9mZnNldE51bWJlciBvZmZudW0sIGJv b2wgZmlyc3RwYWdlKTsKK2V4dGVybiBib29sIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLAorCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyLCBP ZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJCQkJIGJvb2wgZmlyc3RwYWdlKTsKIGV4dGVybiB2b2lk IF9idF9zdGFydF9hcnJheV9rZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpOwogZXh0ZXJuIGludAlfYnRfYmluc3JjaF9hcnJheV9za2V5KEZtZ3JJbmZvICpvcmRlcnBy b2MsCiAJCQkJCQkJCSAgIGJvb2wgY3VyX2VsZW1fdHJpZywgU2NhbkRpcmVjdGlvbiBkaXIsCkBA IC0xMjg3LDE1ICsxMTk3LDE1IEBAIGV4dGVybiBCVFN0YWNrIF9idF9zZWFyY2goUmVsYXRpb24g cmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQga2V5LAogCQkJCQkJICBCdWZmZXIg KmJ1ZlAsIGludCBhY2Nlc3MsIGJvb2wgcmV0dXJuc3RhY2spOwogZXh0ZXJuIE9mZnNldE51bWJl ciBfYnRfYmluc3JjaF9pbnNlcnQoUmVsYXRpb24gcmVsLCBCVEluc2VydFN0YXRlIGluc2VydHN0 YXRlKTsKIGV4dGVybiBpbnQzMiBfYnRfY29tcGFyZShSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2Vy dCBrZXksIFBhZ2UgcGFnZSwgT2Zmc2V0TnVtYmVyIG9mZm51bSk7Ci1leHRlcm4gYm9vbCBfYnRf Zmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci1leHRlcm4gYm9v bCBfYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVy biBJbmRleFNjYW5CYXRjaCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2J0X25leHQoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBwcmlvcmJh dGNoKTsKIGV4dGVybiBCdWZmZXIgX2J0X2dldF9lbmRwb2ludChSZWxhdGlvbiByZWwsIHVpbnQz MiBsZXZlbCwgYm9vbCByaWdodG1vc3QpOwogCiAvKgogICogcHJvdG90eXBlcyBmb3IgZnVuY3Rp b25zIGluIG5idHV0aWxzLmMKICAqLwogZXh0ZXJuIEJUU2Nhbkluc2VydCBfYnRfbWtzY2Fua2V5 KFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBpdHVwKTsKLWV4dGVybiB2b2lkIF9idF9raWxsaXRl bXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiBCVEN5Y2xlSWQgX2J0X3ZhY3V1bV9jeWNs ZWlkKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gQlRDeWNsZUlkIF9idF9zdGFydF92YWN1dW0oUmVs YXRpb24gcmVsKTsKIGV4dGVybiB2b2lkIF9idF9lbmRfdmFjdXVtKFJlbGF0aW9uIHJlbCk7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3JlbHNjYW4uaAppbmRleCBlMmUyMTUwZGEuLjJmMjMxNDg0MyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nh bi5oCkBAIC0xMjIsMTMgKzEyMiwxNjcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxCbG9ja1Rh YmxlU2NhbldvcmtlckRhdGEKIH0gUGFyYWxsZWxCbG9ja1RhYmxlU2NhbldvcmtlckRhdGE7CiB0 eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29ya2VyRGF0YSAqUGFyYWxsZWxC bG9ja1RhYmxlU2NhbldvcmtlcjsKIAorLyoKKyAqIERhdGEgc3RydWN0dXJlcyB1c2VkIGJ5IGFt Z2V0YmF0Y2ggaW5kZXggc2NhbnMuCisgKgorICogVGhlc2Ugc3RydWN0cyBhcmUgZGVmaW5lZCBo ZXJlLCByYXRoZXIgdGhhbiBpbiBhY2Nlc3MvaW5kZXhiYXRjaC5oLCBvbmx5CisgKiBiZWNhdXNl IEluZGV4U2NhbkRlc2NEYXRhIGVtYmVkcyB0aGVtIGJ5IHZhbHVlLiAgcmVsc2Nhbi5oIGRlZmlu ZXMgZGF0YQorICogc3RydWN0dXJlcyBvbmx5OyBhbGwgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IG9w ZXJhdGUgb24gdGhlbSBhcHBlYXIgaW4KKyAqIGFjY2Vzcy9pbmRleGJhdGNoLmguCisgKi8KKwor LyoKKyAqIExvY2F0aW9uIG9mIGEgQmF0Y2hNYXRjaGluZ0l0ZW0gd2l0aGluIHRoZSBzY2FuJ3Mg cmluZyBidWZmZXIKKyAqLwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hSaW5nSXRlbVBvcworeworCS8q IFBvc2l0aW9uIHJlZmVyZW5jZXMgYSB2YWxpZCBJbmRleFNjYW5EZXNjRGF0YS5iYXRjaGJ1Zltd IGVudHJ5PyAqLworCWJvb2wJCXZhbGlkOworCisJLyogSW5kZXhTY2FuRGVzY0RhdGEuYmF0Y2hi dWZbXS13aXNlIGluZGV4IHRvIHJlbGV2YW50IEluZGV4U2NhbkJhdGNoICovCisJdWludDgJCWJh dGNoOworCisJLyogSW5kZXhTY2FuQmF0Y2guaXRlbXNbXS13aXNlIGluZGV4IHRvIHJlbGV2YW50 IEJhdGNoTWF0Y2hpbmdJdGVtICovCisJaW50CQkJaXRlbTsKKworfSBCYXRjaFJpbmdJdGVtUG9z OworCisvKgorICogTWF0Y2hpbmcgaXRlbSByZXR1cm5lZCBieSBhbWdldGJhdGNoIChpbiByZXR1 cm5lZCBJbmRleFNjYW5CYXRjaCkgZHVyaW5nIGFuCisgKiBpbmRleCBzY2FuLiAgVXNlZCBieSB0 YWJsZSBBTSB0byBsb2NhdGUgcmVsZXZhbnQgbWF0Y2hpbmcgdGFibGUgdHVwbGUuCisgKi8KK3R5 cGVkZWYgc3RydWN0IEJhdGNoTWF0Y2hpbmdJdGVtCit7CisJSXRlbVBvaW50ZXJEYXRhIHRhYmxl VGlkOwkvKiBUSUQgb2YgcmVmZXJlbmNlZCB0YWJsZSBpdGVtICovCisJT2Zmc2V0TnVtYmVyIGlu ZGV4T2Zmc2V0OwkvKiBpbmRleCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2UgKi8KKwlMb2Nh dGlvbkluZGV4IHR1cGxlT2Zmc2V0OwkvKiBpbmRleCB0dXBsZSdzIGN1cnJUdXBsZXMgb2Zmc2V0 LCBpZiBhbnkgKi8KK30gQmF0Y2hNYXRjaGluZ0l0ZW07CisKKy8qCisgKiBEYXRhIGFib3V0IG9u ZSBiYXRjaCBvZiBpdGVtcyByZXR1cm5lZCBieSAoYW5kIHBhc3NlZCB0bykgYW1nZXRiYXRjaCBk dXJpbmcKKyAqIGluZGV4IHNjYW5zLgorICoKKyAqIFRoZSBiYXRjaCBwb2ludGVyIHJldHVybmVk IGJ5IGFtZ2V0YmF0Y2ggcG9pbnRzIGludG8gdGhlIGludGVyaW9yIG9mIGEKKyAqIGxhcmdlciBh bGxvY2F0aW9uLCB3aGljaCBhbHNvIGNhcnJpZXMgb3BhcXVlIGFyZWFzIGZvciB0aGUgdGFibGUg QU0gYW5kCisgKiB0aGUgaW5kZXggQU0uICBTZWUgYWNjZXNzL2luZGV4YmF0Y2guaCBmb3IgdGhl IGxheW91dCBvZiBiYXRjaCBhbGxvY2F0aW9ucworICogYW5kIGZvciB0aGUgYWNjZXNzb3JzIHVz ZWQgdG8gcmVhY2ggZWFjaCBjb25zdGl0dWVudCBhcmVhLgorICovCit0eXBlZGVmIHN0cnVjdCBJ bmRleFNjYW5CYXRjaERhdGEKK3sKKwkvKiBJbmRleCBwYWdlJ3MgTFNOLCBvcHRpb25hbGx5IHVz ZWQgYnkgYW1raWxsaXRlbXNiYXRjaCByb3V0aW5lcyAqLworCVhMb2dSZWNQdHIJbHNuOworCisJ Lyogc2NhbiBkaXJlY3Rpb24gd2hlbiB0aGUgaW5kZXggcGFnZSB3YXMgcmVhZCAqLworCVNjYW5E aXJlY3Rpb24gZGlyOworCisJLyoKKwkgKiBrbm93bkVuZEJhY2t3YXJkIGFuZCBrbm93bkVuZEZv cndhcmQgaW5kaWNhdGUgdGhhdCB0aGlzIGJhdGNoIGlzIHRoZQorCSAqIGxhc3Qgb25lIHdpdGgg bWF0Y2hpbmcgaXRlbXMgaW4gdGhlIHJlbGV2YW50IHNjYW4gZGlyZWN0aW9uLiAgV2hlbgorCSAq IGFtZ2V0YmF0Y2ggcmV0dXJucyBOVUxMIGZvciBhIGdpdmVuIGRpcmVjdGlvbiwgdGhlIGNvcnJl c3BvbmRpbmcgZmxhZworCSAqIGlzIHNldCBvbiB0aGUgcHJpb3JiYXRjaCB0aGF0IHdhcyBwYXNz ZWQgdG8gdGhhdCBjYWxsLiAgV2UgY2Fubm90IGtub3cKKwkgKiB0aGlzIHdoZW4gYSBiYXRjaCBp cyBmaXJzdCByZXR1cm5lZCBieSBhbWdldGJhdGNoOyBpdCBvbmx5IGJlY29tZXMKKwkgKiBhcHBh cmVudCB3aGVuIHdlIHRyeSBhbmQgZmFpbCB0byBjb250aW51ZSB0aGUgc2NhbiBwYXN0IGl0Lgor CSAqCisJICogVGhpcyBhbGxvd3MgdGFibGUgQU1zIHRvIGF2b2lkIHJlZHVuZGFudCBhbWdldGJh dGNoIGNhbGxzIHdpdGggdGhlIHNhbWUKKwkgKiBwcmlvcmJhdGNoIC0tIHRoZSBpbmRleCBBTSBt aWdodCBuZWVkIHRvIHJlYWQgYWRkaXRpb25hbCBpbmRleCBwYWdlcyB0bworCSAqIGRldGVybWlu ZSB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBpdGVtcyBiZXlvbmQgY2FsbGVyJ3MgcHJpb3Ji YXRjaC4KKwkgKi8KKwlib29sCQlrbm93bkVuZEJhY2t3YXJkOworCWJvb2wJCWtub3duRW5kRm9y d2FyZDsKKworCS8qCisJICogQmF0Y2ggc3RpbGwgaG9sZHMgVElEIHJlY3ljbGluZyBpbnRlcmxv Y2s/CisJICovCisJYm9vbAkJaXNHdWFyZGVkOworCisJLyoKKwkgKiBNYXRjaGluZyBpdGVtcyBz dGF0ZSBmb3IgdGhpcyBiYXRjaC4gIE91dHB1dCBieSBpbmRleCBBTSBmb3IgdGFibGUgQU0uCisJ ICoKKwkgKiBUaGUgaXRlbXMgYXJyYXkgaXMgYWx3YXlzIG9yZGVyZWQgaW4gaW5kZXggb3JkZXIg KGllLCBieSBpbmNyZWFzaW5nCisJICogaW5kZXhvZmZzZXQpLiAgV2hlbiBzY2FubmluZyBiYWNr d2FyZHMgaXQgaXMgY29udmVuaWVudCBmb3IgaW5kZXggQU1zCisJICogdG8gZmlsbCB0aGUgYXJy YXkgYmFjay10by1mcm9udCwgc3RhcnRpbmcgYXQgdGhlIGxhc3QgaXRlbSBzbG90IGFuZAorCSAq IGZpbGxpbmcgZG93bndhcmRzLiAgVGhpcyBpcyB3aHkgd2UgbmVlZCBib3RoIGEgZmlyc3QtdmFs aWQtZW50cnkgYW5kIGEKKwkgKiBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIuCisJICoKKwkgKiBO b3RlOiB0aGVzZSBhcmUgc2lnbmVkIGJlY2F1c2UgaXQncyBzb21ldGltZXMgY29udmVuaWVudCB0 byB1c2UgLTEgdG8KKwkgKiByZXByZXNlbnQgYW4gb3V0LW9mLWJvdW5kcyBzcGFjZSBqdXN0IGJl Zm9yZSBmaXJzdEl0ZW0gKHdoZW4gaXQncyAwKS4KKwkgKi8KKwlpbnQJCQlmaXJzdEl0ZW07CQkv KiBmaXJzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCisJaW50CQkJbGFzdEl0ZW07CQkvKiBs YXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KKworCS8qIGluZm8gYWJvdXQgZGVhZCBpdGVt cywgaWYgYW55IChwYWxsb2MnZCBzZXBhcmF0ZWx5LCBOVUxMIGlmIHVudXNlZCkgKi8KKwlpbnQJ CQludW1EZWFkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRseSBzdG9yZWQgaXRlbXMgKi8KKwlpbnQJ CSAgICpkZWFkSXRlbXM7CQkvKiBpdGVtc1tdLXdpc2UgaW5kZXhlcyBvZiBkZWFkIGl0ZW1zICov CisKKwkvKgorCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHRoaXMgaXMg dGhlIHR1cGxlIHN0b3JhZ2Ugd29ya3NwYWNlCisJICogZm9yIHRoZSBtYXRjaGluZyB0dXBsZXMg KHR1cGxlcyByZWZlcmVuY2VkIGJ5IGl0ZW1zW10pLiAgVGhlIHdvcmtzcGFjZQorCSAqIHNpemUg aXMgZGV0ZXJtaW5lZCBieSB0aGUgaW5kZXggQU0gKGJhdGNoX3R1cGxlc193b3Jrc3BhY2UpLgor CSAqCisJICogY3VyclR1cGxlcyBwb2ludHMgaW50byB0aGUgdHJhaWxpbmcgcG9ydGlvbiBvZiB0 aGlzIGFsbG9jYXRpb24sCisJICogZGlyZWN0bHkgcGFzdCBpdGVtc1tdLiAgSXQgaXMgTlVMTCBm b3IgcGxhaW4gaW5kZXggc2NhbnMuCisJICovCisJY2hhcgkgICAqY3VyclR1cGxlczsJCS8qIHR1 cGxlIHN0b3JhZ2UgZm9yIGl0ZW1zW10gKi8KKwlCYXRjaE1hdGNoaW5nSXRlbSBpdGVtc1tGTEVY SUJMRV9BUlJBWV9NRU1CRVJdOyAvKiBtYXRjaGluZyBpdGVtcyAqLworfSBJbmRleFNjYW5CYXRj aERhdGE7CisKK3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0 Y2g7CisKKy8qCisgKiBTdGF0ZSB1c2VkIGJ5IHRhYmxlIEFNcyB0byBtYW5hZ2UgYW4gaW5kZXgg c2NhbiB0aGF0IHVzZXMgdGhlIGFtZ2V0YmF0Y2gKKyAqIGludGVyZmFjZS4gIFNjYW5zIHVzZSBh IHJpbmcgYnVmZmVyIG9mIGJhdGNoZXMgcmV0dXJuZWQgYnkgYW1nZXRiYXRjaC4KKyAqCisgKiBU aGlzIGRhdGEgc3RydWN0dXJlIHByb3ZpZGVzIHRhYmxlIEFNcyB3aXRoIGEgd2F5IHRvIHJlYWQg YWhlYWQgb2YgdGhlCisgKiBjdXJyZW50IHJlYWQgcG9zaXRpb24gYnkgX211bHRpcGxlXyBiYXRj aGVzL2luZGV4IHBhZ2VzLiAgVGhlIGZ1cnRoZXIgb3V0CisgKiB0aGUgdGFibGUgQU0gcmVhZHMg YWhlYWQgbGlrZSB0aGlzLCB0aGUgZnVydGhlciBpdCBjYW4gc2VlIGludG8gdGhlIGZ1dHVyZS4K KyAqIFRoYXQgd2F5IHRoZSB0YWJsZSBBTSBpcyBhYmxlIHRvIHJlb3JkZXIgd29yayBhcyBhZ2dy ZXNzaXZlbHkgYXMgZGVzaXJlZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hSaW5nQnVmZmVy Cit7CisJLyogY3VycmVudCBwb3NpdGlvbnMgaW4gSW5kZXhTY2FuRGVzY0RhdGEuYmF0Y2hidWZb XSBmb3Igc2NhbiAqLworCUJhdGNoUmluZ0l0ZW1Qb3Mgc2NhblBvczsJLyogc2NhbidzIHJlYWQg cG9zaXRpb24gKi8KKwlCYXRjaFJpbmdJdGVtUG9zIG1hcmtQb3M7CS8qIG1hcmsvcmVzdG9yZSBw b3NpdGlvbiAqLworCisJLyogbWFya1BvcydzIGJhdGNoIChub3QgaW4gcmluZyBidWZmZXIgd2hl biBtYXJrQmF0Y2ggIT0gc2NhbkJhdGNoKSAqLworCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRjaDsK KworCS8qCisJICogaGVhZEJhdGNoIGlzIGFuIGluZGV4IHRvIHRoZSBlYXJsaWVzdCBzdGlsbC12 YWxpZCByaW5nIGJ1ZmZlciBiYXRjaAorCSAqIHNsb3QgaW4gYmF0Y2hidWZbXS4gIFRoZSBhY3R1 YWwgYXJyYXkgcG9zaXRpb24gZm9yIGl0cyBJbmRleFNjYW5CYXRjaAorCSAqIGlzIGhlYWRCYXRj aCAmIChJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIC0gMSksIHNpbmNlIHRoZXNlIGluZGV4ZXMgdXNl CisJICogdW5zaWduZWQgd3JhcHBpbmcgYXJpdGhtZXRpYy4gIGhlYWRCYXRjaCBtdXN0IGJlIHRo ZSBzY2FuJ3MgY3VycmVudAorCSAqIHNjYW5CYXRjaCAoaS5lLiB0aGUgY3VycmVudCBzY2FuUG9z IGJhdGNoKS4KKwkgKi8KKwl1aW50OAkJaGVhZEJhdGNoOworCisJLyoKKwkgKiBuZXh0QmF0Y2gg aXMgYW4gaW5kZXggdG8gdGhlIG5leHQgX2VtcHR5XyByaW5nIGJ1ZmZlciBiYXRjaCBzbG90IGlu CisJICogYmF0Y2hidWZbXSAoaS5lLiBpdCdzIHRoZSB0YWlsIGVudHJ5IG9mIG91ciByaW5nIGJ1 ZmZlcikuICBUaGUgYWN0dWFsCisJICogYmF0Y2hidWZbXSBhcnJheSBwb3NpdGlvbiBpcyBuZXh0 QmF0Y2ggJiAoSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAtIDEpLgorCSAqIE5ldyBiYXRjaGVzIGNh biBvbmx5IGJlIHNhZmVseSBhcHBlbmRlZCB0byB0aGlzIHRhaWwgcG9zaXRpb24gd2hlbgorCSAq ICFpbmRleF9zY2FuX2JhdGNoX2Z1bGwoKSAoc2VlIGFjY2Vzcy9pbmRleGJhdGNoLmgpLgorCSAq CisJICogTm90ZTogdGhlIHNjYW4ncyBtb3N0IHJlY2VudGx5IGFwcGVuZGVkIGJhdGNoIGlzIGFs d2F5cyBsb2NhdGVkIGF0CisJICogKG5leHRCYXRjaCAtIDEpICYgKElOREVYX1NDQU5fTUFYX0JB VENIRVMgLSAxKS4KKwkgKi8KKwl1aW50OAkJbmV4dEJhdGNoOworfSBCYXRjaFJpbmdCdWZmZXI7 CisKIHN0cnVjdCBJbmRleFNjYW5JbnN0cnVtZW50YXRpb247CiAKIC8qCiAgKiBXZSB1c2UgdGhl IHNhbWUgSW5kZXhTY2FuRGVzY0RhdGEgc3RydWN0dXJlIGZvciBib3RoIGFtZ2V0dHVwbGUtYmFz ZWQKICAqIGFuZCBhbWdldGJpdG1hcC1iYXNlZCBpbmRleCBzY2Fucy4gIFNvbWUgZmllbGRzIGFy ZSBvbmx5IHJlbGV2YW50IGluCi0gKiBhbWdldHR1cGxlLWJhc2VkIHNjYW5zLgorICogYW1nZXR0 dXBsZS1iYXNlZCBzY2Fucy4gIE90aGVycyBhcmUgb25seSB1c2VkIGluIGFtZ2V0YmF0Y2gtYmFz ZWQgc2NhbnMuCisgKgorICogVGhlIHJpbmcgYnVmZmVyIHVzZWQgYnkgYW1nZXRiYXRjaCBzY2Fu cyBpcyBzdG9yZWQgaGVyZSBhcyBhIGZpeGVkIGFycmF5IG9mCisgKiBwb2ludGVycyB0byBiYXRj aGVzLiAgV2UgbmVlZCBhIG1pbmltdW0gb2YgdHdvIHJpbmcgYnVmZmVyIGJhdGNoZXMgKGJ1dCB1 c2UKKyAqIElOREVYX1NDQU5fTUFYX0JBVENIRVMpLCBzaW5jZSB0YWJsZSBBTXMgb25seSByZW1v dmUgYSBiYXRjaCBhZnRlciB0aGV5J3ZlCisgKiBhbHJlYWR5IGNhbGxlZCBhbWdldGJhdGNoIGFn YWluIGFuZCBhcHBlbmRlZCB0aGUgcmV0dXJuZWQgYmF0Y2guCiAgKi8KKyNkZWZpbmUgSU5ERVhf U0NBTl9DQUNIRV9CQVRDSEVTCTIKKyNkZWZpbmUgSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUwkJNjQK KwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIHsKIAkvKiBzY2FuIHBhcmFtZXRl cnMgKi8KQEAgLTEzOSw2ICsyOTMsMjYgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0Rh dGEKIAlpbnQJCQludW1iZXJPZk9yZGVyQnlzOwkvKiBudW1iZXIgb2Ygb3JkZXJpbmcgb3BlcmF0 b3JzICovCiAJc3RydWN0IFNjYW5LZXlEYXRhICprZXlEYXRhOwkvKiBhcnJheSBvZiBpbmRleCBx dWFsaWZpZXIgZGVzY3JpcHRvcnMgKi8KIAlzdHJ1Y3QgU2NhbktleURhdGEgKm9yZGVyQnlEYXRh OwkvKiBhcnJheSBvZiBvcmRlcmluZyBvcCBkZXNjcmlwdG9ycyAqLworCisJLyogaW5kZXggYWNj ZXNzIG1ldGhvZCdzIHByaXZhdGUgc3RhdGUgKi8KKwl2b2lkCSAgICpvcGFxdWU7CQkJLyogYWNj ZXNzLW1ldGhvZC1zcGVjaWZpYyBpbmZvICovCisKKwkvKiBzY2FuJ3MgYW1nZXRiYXRjaCBzdGF0 ZSAob25seSB1c2VkIGJ5IGFtZ2V0YmF0Y2gvdXNlYmF0Y2hyaW5nIHNjYW5zKSAqLworCUJhdGNo UmluZ0J1ZmZlciBiYXRjaHJpbmdidWY7CisKKwkvKgorCSAqIEFycmF5IG9mIHBvaW50ZXJzIHRv IHJlY3ljbGFibGUgYmF0Y2hlcywgdXNlZCBieSBhbGwgYW1nZXRiYXRjaCBzY2FucworCSAqIGFu ZCBieSBhbWdldGJpdG1hcCBzY2FucyBvZiBhbiBpbmRleCBBTSB0aGF0IHN1cHBvcnRzIGFtZ2V0 YmF0Y2gKKwkgKi8KKwlJbmRleFNjYW5CYXRjaCBiYXRjaGNhY2hlW0lOREVYX1NDQU5fQ0FDSEVf QkFUQ0hFU107CisKKwkvKiBBcnJheSBvZiBwb2ludGVycyB0byBiYXRjaGVzLCByZWZlcmVuY2Vk IHdpdGhpbiBiYXRjaHJpbmdidWYgKi8KKwlJbmRleFNjYW5CYXRjaCBiYXRjaGJ1ZltJTkRFWF9T Q0FOX01BWF9CQVRDSEVTXTsKKworCWJvb2wJCXVzZWJhdGNocmluZzsJLyogc2NhbiB1c2VzIGFt Z2V0YmF0Y2gvYmF0Y2hyaW5nYnVmPyAqLworCWJvb2wJCWJhdGNoSW1tZWRpYXRlVW5ndWFyZDsJ LyogZWFnZXJseSBkcm9wIFRJRCByZWN5Y2xpbmcKKwkJCQkJCQkJCQkgKiBpbnRlcmxvY2s/ICov CisKIAlib29sCQl4c193YW50X2l0dXA7CS8qIGNhbGxlciByZXF1ZXN0cyBpbmRleCB0dXBsZXMg Ki8KIAlib29sCQl4c190ZW1wX3NuYXA7CS8qIHVucmVnaXN0ZXIgc25hcHNob3QgYXQgc2NhbiBl bmQ/ICovCiAKQEAgLTE0NywxMyArMzIxLDEyIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRl c2NEYXRhCiAJYm9vbAkJaWdub3JlX2tpbGxlZF90dXBsZXM7CS8qIGRvIG5vdCByZXR1cm4ga2ls bGVkIGVudHJpZXMgKi8KIAlib29sCQl4YWN0U3RhcnRlZEluUmVjb3Zlcnk7CS8qIHByZXZlbnRz IGtpbGxpbmcvc2VlaW5nIGtpbGxlZAogCQkJCQkJCQkJCSAqIHR1cGxlcyAqLwotCi0JLyogaW5k ZXggYWNjZXNzIG1ldGhvZCdzIHByaXZhdGUgc3RhdGUgKi8KLQl2b2lkCSAgICpvcGFxdWU7CQkJ LyogYWNjZXNzLW1ldGhvZC1zcGVjaWZpYyBpbmZvICovCisJLyogeHNfc25hcHNob3QgdXNlcyBh biBNVkNDIHNuYXBzaG90PyAqLworCWJvb2wJCU1WQ0NTY2FuOwogCiAJLyoKLQkgKiBJbnN0cnVt ZW50YXRpb24gY291bnRlcnMgbWFpbnRhaW5lZCBieSBhbGwgaW5kZXggQU1zIGR1cmluZyBib3Ro Ci0JICogYW1nZXR0dXBsZSBjYWxscyBhbmQgYW1nZXRiaXRtYXAgY2FsbHMgKHVubGVzcyBmaWVs ZCByZW1haW5zIE5VTEwpCisJICogSW5zdHJ1bWVudGF0aW9uIGNvdW50ZXJzIG1haW50YWluZWQg ZHVyaW5nIGFtZ2V0YmF0Y2gsIGFtZ2V0Yml0bWFwLCBhbmQKKwkgKiBhbWdldHR1cGxlIHNjYW5z ICh1bmxlc3MgZmllbGQgcmVtYWlucyBOVUxMKQogCSAqLwogCXN0cnVjdCBJbmRleFNjYW5JbnN0 cnVtZW50YXRpb24gKmluc3RydW1lbnQ7CiAKQEAgLTE4NSwxNCArMzU4LDMxIEBAIHR5cGVkZWYg c3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAKIAkvKgogCSAqIFJlc29sdmVkIHRhYmxlX2luZGV4 X2dldG5leHRfc2xvdCBjYWxsYmFjaywgd2hpY2ggaXMgc2V0IGJ5Ci0JICogdGFibGVfaW5kZXhf c2Nhbl9iZWdpbiBhdCB0aGUgc3RhcnQgb2YgYW1nZXR0dXBsZSBzY2Fucy4gIFJlcG9ydHMgdmlh Ci0JICogKnJlY2hlY2sgd2hldGhlciB0aGUgc2NhbiBrZXlzIG11c3QgYmUgcmVjaGVja2VkLgor CSAqIHRhYmxlX2luZGV4X3NjYW5fYmVnaW4gYXQgdGhlIHN0YXJ0IG9mIGFtZ2V0YmF0Y2gvYW1n ZXR0dXBsZSBzY2Fucy4KKwkgKiBSZXBvcnRzIHZpYSAqcmVjaGVjayB3aGV0aGVyIHRoZSBzY2Fu IGtleXMgbXVzdCBiZSByZWNoZWNrZWQuCiAJICovCiAJYm9vbAkJKCp4c19nZXRuZXh0X3Nsb3Qp IChzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sCiAJCQkJCQkJCQlTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbiwKIAkJCQkJCQkJCXN0cnVjdCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJ CQkJCWJvb2wgKnJlY2hlY2spOwogCisJLyogYmF0Y2ggc2l6ZSBpbmZvcm1hdGlvbiwgc2V0IG9u Y2UgYnkgaW5kZXggQU0gaW4gYW1iZWdpbnNjYW4gKi8KKwl1aW50MTYJCW1heGl0ZW1zYmF0Y2g7 CS8qIHNpemUgb2YgZWFjaCBiYXRjaCdzIGl0ZW1zW10gYXJyYXkgKi8KKwl1aW50MTYJCWJhdGNo X2luZGV4X29wYXF1ZV9zdGF0aWM7CS8qIGNvbXBpbGUtdGltZSBvcGFxdWUgc2l6ZSAqLworCXVp bnQxNgkJYmF0Y2hfdHVwbGVzX3dvcmtzcGFjZTsgLyogY3VyclR1cGxlcyB3b3Jrc3BhY2Ugc2l6 ZSAqLworCisJLyoKKwkgKiBPcHRpb25hbCB0YWJsZSBBTSBwZXItYmF0Y2ggb3BhcXVlIGFyZWEg c2l6ZSwgc2V0IG9uY2UgYnkKKwkgKiBpbmRleF9zY2FuX2JlZ2luIChleGNlcHQgZHVyaW5nIGJp dG1hcCBzY2FucykKKwkgKi8KKwl1aW50MzIJCWJhdGNoX3RhYmxlX29wYXF1ZV9zaXplOwkvKiB0 YWJsZSBBTSBvcGFxdWUgYXJlYSBzaXplICovCisKKwkvKgorCSAqIE9mZnNldCB1c2VkIGJ5IGlu ZGV4X3NjYW5fYmF0Y2hfYmFzZSAoc2V0IG9uIGZpcnN0IGJhdGNoIGFsbG9jKS4gIFNlZQorCSAq IGFjY2Vzcy9pbmRleGJhdGNoLmguCisJICovCisJc2l6ZV90CQliYXRjaF9iYXNlX29mZnNldDsK KwogCS8qCiAJICogV2hlbiBmZXRjaGluZyB3aXRoIGFuIG9yZGVyaW5nIG9wZXJhdG9yLCB0aGUg dmFsdWVzIG9mIHRoZSBPUkRFUiBCWQogCSAqIGV4cHJlc3Npb25zIG9mIHRoZSBsYXN0IHJldHVy bmVkIHR1cGxlLCBhY2NvcmRpbmcgdG8gdGhlIGluZGV4LiAgSWYKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCmlu ZGV4IDhmMjY4ZTRkOC4uOTdhNzMxMzJhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv dGFibGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTQ1NCwxMCAr NDU0LDEyIEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICogZmxhZ3MgaXMgYSBi aXRtYXNrIG9mIFNjYW5PcHRpb25zIGFmZmVjdGluZyB1bmRlcmx5aW5nIHRhYmxlIHNjYW4KIAkg KiBiZWhhdmlvci4gU2VlIHNjYW5fYmVnaW4oKSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYXNz aW5nIHRoZXNlLgogCSAqCi0JICogQ2FsbGJhY2sgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcg SW5kZXhTY2FuRGVzYy54c19nZXRuZXh0X3Nsb3QgdG8KLQkgKiB0aGUgYXBwcm9wcmlhdGUgc2xv dC1iYXNlZCBjYWxsYmFjay4gIFR1cGxlcyBhcmUgdGhlbiByZXR1cm5lZCB0aHJvdWdoCi0JICog dGhlIGNhbGxlcidzIHNsb3QsIHZpYSB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoKS4gIE5vIHNl cGFyYXRlCi0JICogc2xvdC1iYXNlZCBjYWxsYmFjayBleGlzdHMgaW4gdGhpcyBzdHJ1Y3QhCisJ ICogQ2FsbGJhY2sgaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgc2NhbidzIGJh dGNoIHJpbmcgYnVmZmVyCisJICogKHdoZW4gdGhlIHNjYW4ncyBpbmRleCBBTSBzdXBwb3J0cyB0 aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UpLCBhbmQgZm9yCisJICogc2V0dGluZyBJbmRleFNjYW5E ZXNjLnhzX2dldG5leHRfc2xvdCB0byB0aGUgYXBwcm9wcmlhdGUgc2xvdC1iYXNlZAorCSAqIGNh bGxiYWNrLiAgVHVwbGVzIGFyZSB0aGVuIHJldHVybmVkIHRocm91Z2ggdGhlIGNhbGxlcidzIHNs b3QsIHZpYQorCSAqIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCgpLiAgTm8gc2VwYXJhdGUgc2xv dC1iYXNlZCBjYWxsYmFjayBleGlzdHMgaW4KKwkgKiB0aGlzIHN0cnVjdCEKIAkgKgogCSAqIElu IHByaW5jaXBsZSBhIHNpbmdsZSBnZW5lcmFsLXB1cnBvc2UgY2FsbGJhY2sgKHN0b3JlZCBoZXJl KSB3b3VsZAogCSAqIHN1ZmZpY2UsIGJ1dCB1c2luZyBzcGVjaWFsaXplZCB2YXJpYW50cyBhbGxv d3MgdGhlIHRhYmxlIEFNIHRvIHByb3ZpZGUKQEAgLTQ3NSwyMCArNDc3LDQ0IEBAIHR5cGVkZWYg c3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICogY29sdW1ucyBkbyBub3QgY2hhbmdlLCBuZWVkIHRv IHJldHVybiB0aGUgY3VycmVudC9jb3JyZWN0IHZlcnNpb24gb2YKIAkgKiB0aGUgdHVwbGUgdGhh dCBpcyB2aXNpYmxlIHRvIHRoZSBzbmFwc2hvdCwgZXZlbiBpZiB0aGUgdGlkIHBvaW50cyB0byBh bgogCSAqIG9sZGVyIHZlcnNpb24gb2YgdGhlIHR1cGxlLgorCSAqCisJICogQ2FsbGJhY2sgYWxz byBpbml0aWFsaXplcyB0aGUgc2NhbiBkZXNjcmlwdG9yJ3MgYmF0Y2hfdGFibGVfb3BhcXVlX3Np emUKKwkgKiBmaWVsZCwgdG8gbGV0IHRoZSBjb3JlIGNvZGUga25vdyBob3cgbXVjaCBtZW1vcnkg d2lsbCBiZSByZXF1aXJlZCBpbgorCSAqIHRoZSB0YWJsZSBBTSBwb3J0aW9uIG9mIGVhY2ggYmF0 Y2ggYWxsb2NhdGlvbiAodGhvdWdoIG9ubHkgZHVyaW5nCisJICogYW1nZXRiYXRjaCBpbmRleCBz Y2FucykuICBTZWUgcmVsc2Nhbi5oIGZvciBmdWxsIGRldGFpbHMuCiAJICovCiAJdm9pZAkJKCpp bmRleF9zY2FuX2JlZ2luKSAoSW5kZXhTY2FuRGVzYyBzY2FuLCB1aW50MzIgZmxhZ3MpOwogCiAJ LyoKLQkgKiBJbmZvcm0gdGhlIHRhYmxlIEFNIHRoYXQgdGhlcmUncyB0byBiZSBlaXRoZXIgYSBy ZXNjYW4gb3IgYSByZXN0b3JlIG9mCi0JICogYSBtYXJrZWQgcG9zaXRpb24sIG9yIHRoYXQgdGhl IHNjYW4gaGFzIHJ1biBvdXQgb2YgaW5kZXggZW50cmllcy4KKwkgKiBJbml0aWFsaXplIHRhYmxl IEFNJ3MgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhIHdpdGhpbiBhIGJhdGNoIGFsbG9jYXRpb24uCisJ ICoKKwkgKiBDYWxsZWQgYnkgaW5kZXhhbV91dGlsX2FsbG9jX2JhdGNoIGZvciBlYWNoIG5ldyBv ciByZWN5Y2xlZCBiYXRjaCwgYnV0CisJICogb25seSB3aGVuIHRoZSB0YWJsZSBBTSByZXNlcnZl ZCBhbiBvcGFxdWUgYXJlYSBmb3IgdGhlIHNjYW4gKGJ5IHNldHRpbmcKKwkgKiBiYXRjaF90YWJs ZV9vcGFxdWVfc2l6ZSB0byBhIHZhbHVlID4gMCkuCiAJICovCi0Jdm9pZAkJKCppbmRleF9zY2Fu X3Jlc2V0KSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKKwl2b2lkCQkoKmluZGV4X3NjYW5fYmF0Y2hf aW5pdCkgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkgIEluZGV4U2NhbkJhdGNoIGJh dGNoKTsKKworCS8qCisJICogSW5mb3JtIHRoZSB0YWJsZSBBTSB0aGF0IHRoZXJlJ3MgdG8gYmUg YSByZXNjYW4uCisJICovCisJdm9pZAkJKCppbmRleF9zY2FuX3Jlc2NhbikgKEluZGV4U2NhbkRl c2Mgc2Nhbik7CiAKIAkvKgogCSAqIFJlbGVhc2UgcmVzb3VyY2VzIGFuZCBkZWFsbG9jYXRlIGlu ZGV4IHNjYW4gc3RhdGUuCiAJICovCiAJdm9pZAkJKCppbmRleF9zY2FuX2VuZCkgKEluZGV4U2Nh bkRlc2Mgc2Nhbik7CiAKKwkvKgorCSAqIE1hcmsgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiBz byBpdCBjYW4gYmUgcmVzdG9yZWQgbGF0ZXIuCisJICovCisJdm9pZAkJKCppbmRleF9zY2FuX21h cmtwb3MpIChJbmRleFNjYW5EZXNjIHNjYW4pOworCisJLyoKKwkgKiBSZXN0b3JlIGEgcHJldmlv dXNseSBtYXJrZWQgc2NhbiBwb3NpdGlvbi4KKwkgKi8KKwl2b2lkCQkoKmluZGV4X3NjYW5fcmVz dHJwb3MpIChJbmRleFNjYW5EZXNjIHNjYW4pOworCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICog Q2FsbGJhY2tzIGZvciBub24tbW9kaWZ5aW5nIG9wZXJhdGlvbnMgb24gaW5kaXZpZHVhbCB0dXBs ZXMKIAkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEyNzEsMTUgKzEyOTcsNTMgQEAgdGFibGVfaW5k ZXhfc2Nhbl9iZWdpbihJbmRleFNjYW5EZXNjIHNjYW4sIHVpbnQzMiBmbGFncykKIH0KIAogLyoK LSAqIEluZm9ybSB0aGUgdGFibGUgQU0gdGhhdCB0aGVyZSdzIHRvIGJlIGVpdGhlciBhIHJlc2Nh biBvciBhIHJlc3RvcmUgb2YgYQotICogbWFya2VkIHBvc2l0aW9uLCBvciB0aGF0IHRoZSBzY2Fu IGhhcyBydW4gb3V0IG9mIGluZGV4IGVudHJpZXMuCisgKiBJbmZvcm0gdGhlIHRhYmxlIEFNIHRo YXQgdGhlcmUncyB0byBiZSBhIHJlc2Nhbi4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCi10YWJs ZV9pbmRleF9zY2FuX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKK3RhYmxlX2luZGV4X3NjYW5f cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKIAlBc3NlcnQoc2Nhbi0+eHNfdGFibGVfb3Bh cXVlKTsKIAotCXNjYW4tPmhlYXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfc2Nhbl9yZXNl dChzY2FuKTsKKwlzY2FuLT5oZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X3NjYW5fcmVz Y2FuKHNjYW4pOworfQorCisvKgorICogTWFyayB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uIHNv IGl0IGNhbiBiZSByZXN0b3JlZCBsYXRlcgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxl X2luZGV4X3NjYW5fbWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQXNzZXJ0KHNjYW4t PnhzX3RhYmxlX29wYXF1ZSAmJiBzY2FuLT51c2ViYXRjaHJpbmcpOworCisJc2Nhbi0+aGVhcFJl bGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9zY2FuX21hcmtwb3Moc2Nhbik7Cit9CisKKy8qCisg KiBSZXN0b3JlIGEgcHJldmlvdXNseSBtYXJrZWQgc2NhbiBwb3NpdGlvbgorICoKKyAqIE5PVEU6 IHRoaXMgb25seSByZXN0b3JlcyB0aGUgYmF0Y2ggcG9zaXRpb25hbCBzdGF0ZSBvZiB0aGUgdGFi bGUgQU0uICBTZWUKKyAqIGNvbW1lbnRzIGZvciBFeGVjUmVzdHJQb3MoKS4KKyAqLworc3RhdGlj IGlubGluZSB2b2lkCit0YWJsZV9pbmRleF9zY2FuX3Jlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2Nh bikKK3sKKwlBc3NlcnQoc2Nhbi0+eHNfdGFibGVfb3BhcXVlICYmIHNjYW4tPnVzZWJhdGNocmlu Zyk7CisJQXNzZXJ0KCFzY2FuLT5raWxsX3ByaW9yX3R1cGxlKTsJLyogbm90IHVzZWQgd2l0aCBh bWdldGJhdGNoICovCisKKwkvKgorCSAqIE1hcmsvcmVzdG9yZSBvbmx5IHdvcmtzIGNvcnJlY3Rs eSB3aGVuIHRoZXJlJ3MgYXQgbW9zdCBvbmUgcmV0dXJuYWJsZQorCSAqIHR1cGxlIHBlciBzY2Fu IGl0ZW0sIHNvIHRoYXQgcmVzdG9yaW5nIHRoZSBwcmlvciBzdGF0ZSBhdCB0aGUgc2NhbiBpdGVt CisJICogZ3JhbnVsYXJpdHkgaXMgc3VmZmljaWVudC4gIFRhYmxlIEFNcyB0aGF0IGNhbiByZWFj aCBtdWx0aXBsZSByb3cKKwkgKiB2ZXJzaW9ucyB0aHJvdWdoIGEgc2luZ2xlIFRJRCBjYW4gZ2Vu ZXJhbGx5IG9ubHkgZ3VhcmFudGVlIHRoYXQgdW5kZXIKKwkgKiBNVkNDIHNuYXBzaG90cyAoZm9y IGhlYXAsIGFuIE1WQ0Mtc2FmZSBzbmFwc2hvdCBlbnN1cmVzIHRoYXQgdGhlcmUncyBhdAorCSAq IG1vc3Qgb25lIHJldHVybmFibGUgdHVwbGUgaW4gZWFjaCBIT1QgY2hhaW4pLiAgU2luY2UgdGhl IG9ubHkgY3VycmVudAorCSAqIHVzZXIgb2YgbWFyay9yZXN0b3JlIGZ1bmN0aW9uYWxpdHkgaXMg bm9kZU1lcmdlam9pbi5jLCB0aGlzIGVmZmVjdGl2ZWx5CisJICogbWVhbnMgdGhhdCBtZXJnZS1q b2luIHBsYW5zIG9ubHkgd29yayBmb3IgTVZDQyBzbmFwc2hvdHMuCisJICovCisJQXNzZXJ0KHNj YW4tPk1WQ0NTY2FuKTsKKwlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0gZmFsc2U7CisKKwlzY2Fu LT5oZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X3NjYW5fcmVzdHJwb3Moc2Nhbik7CiB9 CiAKIC8qCkBAIC0xMjk0LDYgKzEzNTgsMjIgQEAgdGFibGVfaW5kZXhfc2Nhbl9lbmQoSW5kZXhT Y2FuRGVzYyBzY2FuKQogCXNjYW4tPmhlYXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfc2Nh bl9lbmQoc2Nhbik7CiB9CiAKKy8qCisgKiBJbml0aWFsaXplIHRhYmxlIEFNJ3MgcGVyLWJhdGNo IG9wYXF1ZSBhcmVhIHdpdGhpbiBhIGJhdGNoIGFsbG9jYXRpb24uCisgKgorICogQ2FsbGVkIGJ5 IGluZGV4YW1fdXRpbF9hbGxvY19iYXRjaCBmb3IgZWFjaCBuZXcgb3IgcmVjeWNsZWQgYmF0Y2gs IGJ1dCBvbmx5CisgKiB3aGVuIHRoZSB0YWJsZSBBTSByZXNlcnZlZCBhbiBvcGFxdWUgYXJlYSBm b3IgdGhlIHNjYW4gKHNlZSB0aGUgY2FsbGJhY2sncworICogZG9jdW1lbnRhdGlvbikuCisgKi8K K3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVfaW5kZXhfc2Nhbl9iYXRjaF9pbml0KEluZGV4U2Nh bkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJQXNzZXJ0KHNjYW4tPnhzX3Rh YmxlX29wYXF1ZSAmJiBzY2FuLT51c2ViYXRjaHJpbmcpOworCUFzc2VydChzY2FuLT5iYXRjaF90 YWJsZV9vcGFxdWVfc2l6ZSA+IDApOworCisJc2Nhbi0+aGVhcFJlbGF0aW9uLT5yZF90YWJsZWFt LT5pbmRleF9zY2FuX2JhdGNoX2luaXQoc2NhbiwgYmF0Y2gpOworfQorCiAvKgogICogUmV0dXJu IHRoZSBuZXh0IHR1cGxlIGZyb20gYW4gaW5kZXggc2NhbiB0aHJvdWdoIGBzbG90YCwgc2Nhbm5p bmcgaW4gdGhlCiAgKiBzcGVjaWZpZWQgZGlyZWN0aW9uLiAgUmV0dXJucyB0cnVlIGlmIGEgdHVw bGUgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFuZApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv bm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCAy N2EyYzY4MTUuLjBhYzE2YjkzMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5v ZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTE0MzcsMTIgKzE0 MzcsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPcHRJbmZvCiAJYm9vbAkJYW1vcHRpb25hbGtl eTsKIAlib29sCQlhbXNlYXJjaGFycmF5OwogCWJvb2wJCWFtc2VhcmNobnVsbHM7Ci0JLyogZG9l cyBBTSBoYXZlIGFtZ2V0dHVwbGUgaW50ZXJmYWNlPyAqLwotCWJvb2wJCWFtaGFzZ2V0dHVwbGU7 CisJLyogZG9lcyBBTSBoYXZlIGFtZ2V0YmF0Y2ggKG9yIGdldHR1cGxlKSBpbnRlcmZhY2U/ICov CisJYm9vbAkJYW1jYW5wbGFpbnNjYW47CiAJLyogZG9lcyBBTSBoYXZlIGFtZ2V0Yml0bWFwIGlu dGVyZmFjZT8gKi8KIAlib29sCQlhbWhhc2dldGJpdG1hcDsKIAlib29sCQlhbWNhbnBhcmFsbGVs OwotCS8qIGRvZXMgQU0gaGF2ZSBhbW1hcmtwb3MgaW50ZXJmYWNlPyAqLworCS8qIGlzIEFNIHBy ZXBhcmVkIGZvciB1cyB0byByZXN0b3JlIGEgbWFyaz8gKi8KIAlib29sCQlhbWNhbm1hcmtwb3M7 CiAJLyogQU0ncyBjb3N0IGVzdGltYXRvciAqLwogCS8qIFJhdGhlciB0aGFuIGluY2x1ZGUgYW1h cGkuaCBoZXJlLCB3ZSBkZWNsYXJlIGFtY29zdGVzdGltYXRlIGxpa2UgdGhpcyAqLwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2JyaW4vYnJpbi5jCmluZGV4IGJkYjMwNzUyZS4uMmQ5ZDA0YWEzIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4v YnJpbi5jCkBAIC0yNjQsNiArMjY0LDcgQEAgYnJpbmhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykK IAkJLmFtY29uc2lzdGVudGVxdWFsaXR5ID0gZmFsc2UsCiAJCS5hbWNvbnNpc3RlbnRvcmRlcmlu ZyA9IGZhbHNlLAogCQkuYW1jYW5iYWNrd2FyZCA9IGZhbHNlLAorCQkuYW1jYW5tYXJrcG9zID0g ZmFsc2UsCiAJCS5hbWNhbnVuaXF1ZSA9IGZhbHNlLAogCQkuYW1jYW5tdWx0aWNvbCA9IHRydWUs CiAJCS5hbW9wdGlvbmFsa2V5ID0gdHJ1ZSwKQEAgLTI5OCwxMCArMjk5LDEyIEBAIGJyaW5oYW5k bGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGJyaW5iZWdpbnNjYW4sCiAJ CS5hbXJlc2NhbiA9IGJyaW5yZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0 YmF0Y2ggPSBOVUxMLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxMLAorCQkuYW1raWxsaXRlbXNi YXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGJyaW5nZXRiaXRtYXAsCiAJCS5hbWVuZHNj YW4gPSBicmluZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0g TlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9 IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2Nh biA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYwppbmRleCA2YjE0OGU2OWEuLjhmNzAzM2Q2 MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jCkBAIC0xOTUzLDkgKzE5NTMsOSBAQCBnaW5nZXRi aXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSkKIAkgKiBpbnRvIHRoZSBt YWluIGluZGV4LCBhbmQgc28gd2UgbWlnaHQgdmlzaXQgaXQgYSBzZWNvbmQgdGltZSBkdXJpbmcg dGhlCiAJICogbWFpbiBzY2FuLiAgVGhpcyBpcyBva2F5IGJlY2F1c2Ugd2UnbGwganVzdCByZS1z ZXQgdGhlIHNhbWUgYml0IGluIHRoZQogCSAqIGJpdG1hcC4gIChUaGUgcG9zc2liaWxpdHkgb2Yg ZHVwbGljYXRlIHZpc2l0cyBpcyBhIG1ham9yIHJlYXNvbiB3aHkgR0lOCi0JICogY2FuJ3Qgc3Vw cG9ydCB0aGUgYW1nZXR0dXBsZSBBUEksIGhvd2V2ZXIuKSBOb3RlIHRoYXQgaXQgd291bGQgbm90 IGRvCi0JICogdG8gc2NhbiB0aGUgbWFpbiBpbmRleCBiZWZvcmUgdGhlIHBlbmRpbmcgbGlzdCwg c2luY2UgY29uY3VycmVudAotCSAqIGNsZWFudXAgY291bGQgdGhlbiBtYWtlIHVzIG1pc3MgZW50 cmllcyBlbnRpcmVseS4KKwkgKiBjYW4ndCBzdXBwb3J0IGVpdGhlciB0aGUgYW1nZXR0dXBsZSBv ciBhbWdldGJhdGNoIEFQSS4pIE5vdGUgdGhhdCBpdAorCSAqIHdvdWxkIG5vdCBkbyB0byBzY2Fu IHRoZSBtYWluIGluZGV4IGJlZm9yZSB0aGUgcGVuZGluZyBsaXN0LCBzaW5jZQorCSAqIGNvbmN1 cnJlbnQgY2xlYW51cCBjb3VsZCB0aGVuIG1ha2UgdXMgbWlzcyBlbnRyaWVzIGVudGlyZWx5Lgog CSAqLwogCXNjYW5QZW5kaW5nSW5zZXJ0KHNjYW4sIHRibSwgJm50aWRzKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2luL2dpbnV0aWwuYwppbmRleCBlN2NiYTgxZDQuLjBlOGI2YTU0OSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dp bi9naW51dGlsLmMKQEAgLTQ5LDYgKzQ5LDcgQEAgZ2luaGFuZGxlcihQR19GVU5DVElPTl9BUkdT KQogCQkuYW1jb25zaXN0ZW50ZXF1YWxpdHkgPSBmYWxzZSwKIAkJLmFtY29uc2lzdGVudG9yZGVy aW5nID0gZmFsc2UsCiAJCS5hbWNhbmJhY2t3YXJkID0gZmFsc2UsCisJCS5hbWNhbm1hcmtwb3Mg PSBmYWxzZSwKIAkJLmFtY2FudW5pcXVlID0gZmFsc2UsCiAJCS5hbWNhbm11bHRpY29sID0gdHJ1 ZSwKIAkJLmFtb3B0aW9uYWxrZXkgPSB0cnVlLApAQCAtODMsMTAgKzg0LDEyIEBAIGdpbmhhbmRs ZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gZ2luYmVnaW5zY2FuLAogCQku YW1yZXNjYW4gPSBnaW5yZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0 Y2ggPSBOVUxMLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxMLAorCQkuYW1raWxsaXRlbXNiYXRj aCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGdpbmdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9 IGdpbmVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEws CisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxM LAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBO VUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCmluZGV4IDg1NjVlMjI1Yi4uNjdiMTYwNTNhIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2dpc3QvZ2lzdC5jCkBAIC02OSw2ICs2OSw3IEBAIGdpc3RoYW5kbGVyKFBHX0ZVTkNU SU9OX0FSR1MpCiAJCS5hbWNvbnNpc3RlbnRlcXVhbGl0eSA9IGZhbHNlLAogCQkuYW1jb25zaXN0 ZW50b3JkZXJpbmcgPSBmYWxzZSwKIAkJLmFtY2FuYmFja3dhcmQgPSBmYWxzZSwKKwkJLmFtY2Fu bWFya3BvcyA9IGZhbHNlLAogCQkuYW1jYW51bmlxdWUgPSBmYWxzZSwKIAkJLmFtY2FubXVsdGlj b2wgPSB0cnVlLAogCQkuYW1vcHRpb25hbGtleSA9IHRydWUsCkBAIC0xMDMsMTAgKzEwNCwxMiBA QCBnaXN0aGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBnaXN0YmVn aW5zY2FuLAogCQkuYW1yZXNjYW4gPSBnaXN0cmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IGdpc3Rn ZXR0dXBsZSwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxM LAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGdpc3RnZXRi aXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBnaXN0ZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEws Ci0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3Rp bWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAog CQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKaW5kZXggOGQ4 Y2QzMGRjLi41NDBmMmJjZDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hh c2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKQEAgLTgwLDYgKzgwLDcg QEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtY29uc2lzdGVudGVxdWFsaXR5 ID0gdHJ1ZSwKIAkJLmFtY29uc2lzdGVudG9yZGVyaW5nID0gZmFsc2UsCiAJCS5hbWNhbmJhY2t3 YXJkID0gdHJ1ZSwKKwkJLmFtY2FubWFya3BvcyA9IGZhbHNlLAogCQkuYW1jYW51bmlxdWUgPSBm YWxzZSwKIAkJLmFtY2FubXVsdGljb2wgPSBmYWxzZSwKIAkJLmFtb3B0aW9uYWxrZXkgPSBmYWxz ZSwKQEAgLTExNCwxMCArMTE1LDEyIEBAIGhhc2hoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ CS5hbWJlZ2luc2NhbiA9IGhhc2hiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGhhc2hyZXNjYW4s CiAJCS5hbWdldHR1cGxlID0gaGFzaGdldHR1cGxlLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJ CS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKIAkJ LmFtZ2V0Yml0bWFwID0gaGFzaGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGhhc2hlbmRzY2Fu LAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3Ny ZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5p dHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IGYwZThkMDkxYS4uMzYxZGY3 M2FkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTI2ODMs OCArMjY4MywxMSBAQCBzdGF0aWMgY29uc3QgVGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMg PSB7CiAJLnBhcmFsbGVsc2Nhbl9yZWluaXRpYWxpemUgPSB0YWJsZV9ibG9ja19wYXJhbGxlbHNj YW5fcmVpbml0aWFsaXplLAogCiAJLmluZGV4X3NjYW5fYmVnaW4gPSBoZWFwYW1faW5kZXhfc2Nh bl9iZWdpbiwKLQkuaW5kZXhfc2Nhbl9yZXNldCA9IGhlYXBhbV9pbmRleF9zY2FuX3Jlc2V0LAor CS5pbmRleF9zY2FuX2JhdGNoX2luaXQgPSBoZWFwYW1faW5kZXhfc2Nhbl9iYXRjaF9pbml0LAor CS5pbmRleF9zY2FuX3Jlc2NhbiA9IGhlYXBhbV9pbmRleF9zY2FuX3Jlc2NhbiwKIAkuaW5kZXhf c2Nhbl9lbmQgPSBoZWFwYW1faW5kZXhfc2Nhbl9lbmQsCisJLmluZGV4X3NjYW5fbWFya3BvcyA9 IGhlYXBhbV9pbmRleF9zY2FuX21hcmtwb3MsCisJLmluZGV4X3NjYW5fcmVzdHJwb3MgPSBoZWFw YW1faW5kZXhfc2Nhbl9yZXN0cnBvcywKIAogCS50dXBsZV9pbnNlcnQgPSBoZWFwYW1fdHVwbGVf aW5zZXJ0LAogCS50dXBsZV9pbnNlcnRfc3BlY3VsYXRpdmUgPSBoZWFwYW1fdHVwbGVfaW5zZXJ0 X3NwZWN1bGF0aXZlLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2luZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5j CmluZGV4IDMyZDZhZmYxZC4uMzIzYzI0NWNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2luZGV4c2Nhbi5jCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlICJhY2Nlc3Mv YW1hcGkuaCIKICNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgiCisjaW5jbHVkZSAiYWNjZXNzL2lu ZGV4YmF0Y2guaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImFjY2Vz cy92aXNpYmlsaXR5bWFwLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKQEAgLTI0 LDYgKzI1LDM4IEBACiAjaW5jbHVkZSAidXRpbHMvcGdzdGF0X2ludGVybmFsLmgiCiAKIAorLyoK KyAqIGhlYXBhbSdzIHBlci1iYXRjaCBwcml2YXRlIG9wYXF1ZSBhcmVhIChvbmx5IHVzZWQgZHVy aW5nIGluZGV4LW9ubHkgc2NhbnMpLgorICoKKyAqIE1haW50YWlucyBhIHBlci1iYXRjaCB2aXNp YmlsaXR5IGluZm9ybWF0aW9uIGNhY2hlLCBwb3B1bGF0ZWQgb24gZGVtYW5kCisgKiB1c2luZyB0 aGUgdmlzaWJpbGl0eSBtYXAuICBJdCBpcyBpbXBvcnRhbnQgdGhhdCB3ZSBzZXQgZWFjaCBiYXRj aCBpdGVtJ3MKKyAqIGJhdGNodmlzW10gZW50cnkgZXhhY3RseSBvbmNlIChvciBub3QgYXQgYWxs KS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSGVhcEJhdGNoRGF0YQoreworCS8qCisJICogUmFuZ2Ug b2YgYmF0Y2h2aXNbXSBlbnRyaWVzIHdpdGggdmFsaWQgdmlzaWJpbGl0eSBpbmZvLCBpbiBpdGVt c1tdLXdpc2UKKwkgKiB0ZXJtcy4gIEFuIGl0ZW0ncyB2aXNpYmlsaXR5IGlzIGNhY2hlZCBpZmYg Zmlyc3RWaXNTZXQgPD0gaXRlbSA8PQorCSAqIGxhc3RWaXNTZXQuCisJICovCisJaW50CQkJZmly c3RWaXNTZXQ7CS8qIGZpcnN0IHZhbGlkIGJhdGNodmlzW10gZW50cnksIG9yID4gbGFzdCAqLwor CWludAkJCWxhc3RWaXNTZXQ7CQkvKiBsYXN0IHZhbGlkIGJhdGNodmlzW10gZW50cnksIG9yIDwg Zmlyc3QgKi8KKworCS8qIG1heGl0ZW1zYmF0Y2gtbWFueSBhbGwtdmlzaWJsZSBzdGF0ZXMsIHZh bGlkIG9ubHkgd2l0aGluIHJhbmdlICovCisJYm9vbAkJYmF0Y2h2aXNbRkxFWElCTEVfQVJSQVlf TUVNQkVSXTsKK30gSGVhcEJhdGNoRGF0YTsKKworI2RlZmluZSBIRUFQX0JBVENIX1ZJU19DQUNI RUQoaGJhdGNoLCBpdGVtKSBcCisJKChpdGVtKSA+PSAoaGJhdGNoKS0+Zmlyc3RWaXNTZXQgJiYg KGl0ZW0pIDw9IChoYmF0Y2gpLT5sYXN0VmlzU2V0KQorCitzdGF0aWMgYm9vbCBoZWFwYW1faW5k ZXhfcGxhaW5fYmF0Y2hfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJ CQkJCSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCQkgIFR1cGxlVGFibGVT bG90ICpzbG90LAorCQkJCQkJCQkJCQkJICBib29sICpyZWNoZWNrKTsKK3N0YXRpYyBib29sIGhl YXBhbV9pbmRleF9vbmx5X2JhdGNoX2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCisJ CQkJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCQkgVHVwbGVU YWJsZVNsb3QgKnNsb3QsCisJCQkJCQkJCQkJCQkgYm9vbCAqcmVjaGVjayk7CiBzdGF0aWMgYm9v bCBoZWFwYW1faW5kZXhfcGxhaW5fdHVwbGVfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2Nh biwKIAkJCQkJCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkJCQkJCQkJCQkg IFR1cGxlVGFibGVTbG90ICpzbG90LApAQCAtMzYsMTEgKzY5LDI4IEBAIHN0YXRpYyBwZ19hdHRy aWJ1dGVfYWx3YXlzX2lubGluZSBib29sIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhT Y2FuRGVzYyBzCiAJCQkJCQkJCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJ CQkJCQkJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJCQkJCQkJCQkJCQkgYm9v bCBpbmRleF9vbmx5LAorCQkJCQkJCQkJCQkJCQkJCSBib29sIGFtZ2V0YmF0Y2gsCiAJCQkJCQkJ CQkJCQkJCQkJIGJvb2wgKnJlY2hlY2spOwogc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5s aW5lIGJvb2wgaGVhcGFtX2luZGV4X2hlYXBfZmV0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRl eFNjYW5IZWFwRGF0YSAqaHNjYW4sCiAJCQkJCQkJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAq c2xvdCwgYm9vbCBpbmRleF9vbmx5LAogCQkJCQkJCQkJCQkJCQkJICAgYm9vbCAqaGVhcF9jb250 aW51ZSwgYm9vbCAqYWxsX2RlYWQpOwotc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5l IHZvaWQgaGVhcGFtX2luZGV4X2tpbGxfaXRlbShJbmRleFNjYW5EZXNjIHNjYW4pOworc3RhdGlj IHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQgaGVhcGFtX2luZGV4X2tpbGxfaXRlbShJ bmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkJCQkgIGJvb2wgYW1nZXRiYXRjaCk7Citz dGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgSXRlbVBvaW50ZXIgaGVhcGFtX2luZGV4 X2dldG5leHRfc2NhbmJhdGNoX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkJ CQkJCQkJCSBJbmRleFNjYW5IZWFwRGF0YSAqaHNjYW4sCisJCQkJCQkJCQkJCQkJCQkJCQkJCSBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJCQkJCQkJCQkJIGJvb2wgKmFsbF92 aXNpYmxlKTsKK3N0YXRpYyBpbmxpbmUgSXRlbVBvaW50ZXIgaGVhcGFtX2luZGV4X3JldHVybl9z Y2FucG9zX3RpZChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkJCSAgSW5kZXhTY2Fu SGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9u LAorCQkJCQkJCQkJCQkJCQkgIEluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCwKKwkJCQkJCQkJCQkJ CQkJICBCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zLAorCQkJCQkJCQkJCQkJCQkgIGJvb2wgKmFs bF92aXNpYmxlKTsKK3N0YXRpYyB2b2lkIGhlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0 eShJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rp b24sCisJCQkJCQkJCQkJCSAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJCQkJCSAgSGVh cEJhdGNoRGF0YSAqaGJhdGNoLAorCQkJCQkJCQkJCQkgIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcyk7 CiAKIC8qCiAgKiBTaW1wbGUsIHNpbmdsZS1zaG90IFRJRCBsb29rdXAgZm9yIGNvbnN0cmFpbnQg ZW5mb3JjZW1lbnQgY29kZSAodW5pcXVlCkBAIC05MCwxOCArMTQwLDUyIEBAIGhlYXBhbV9pbmRl eF9zY2FuX2JlZ2luKEluZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMyIGZsYWdzKQogewogCUluZGV4 U2NhbkhlYXBEYXRhICpoc2NhbiA9IHBhbGxvYzBfb2JqZWN0KEluZGV4U2NhbkhlYXBEYXRhKTsK IAotCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwkvKiB0YWJsZSBBTSBvcGFxdWUg YXJlYSBzaXplIGlzIHNldCBiZWxvdyBmb3IgaW5kZXgtb25seSBzY2FucyAqLworCXNjYW4tPmJh dGNoX3RhYmxlX29wYXF1ZV9zaXplID0gMDsKKworCS8qIEN1cnJlbnQgaGVhcCBibG9jayBzdGF0 ZSAqLworCUFzc2VydChoc2Nhbi0+eHNfY2J1ZiA9PSBJbnZhbGlkQnVmZmVyKTsKIAloc2Nhbi0+ eHNfYmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCWhzY2FuLT54c192bWJ1ZmZlciA9IEludmFs aWRCdWZmZXI7CisKKwkvKiBWTSByZWxhdGVkIHN0YXRlICovCisJQXNzZXJ0KGhzY2FuLT54c192 bWJ1ZmZlciA9PSBJbnZhbGlkQnVmZmVyKTsKKwloc2Nhbi0+eHNfdm1faXRlbXMgPSAxOwogCiAJ LyogUmVtZW1iZXIgaWYgc2NhbiBpcyByZWFkLW9ubHkgKi8KIAloc2Nhbi0+eHNfcmVhZG9ubHkg PSAoZmxhZ3MgJiBTT19ISU5UX1JFTF9SRUFEX09OTFkpICE9IDA7CiAKIAkvKiBSZXNvbHZlIHdo aWNoIHhzX2dldG5leHRfc2xvdCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgZm9yIHRoaXMgc2NhbiAq LwotCWlmIChzY2FuLT54c193YW50X2l0dXApCi0JCXNjYW4tPnhzX2dldG5leHRfc2xvdCA9IGhl YXBhbV9pbmRleF9vbmx5X3R1cGxlX2dldG5leHRfc2xvdDsKKwlpZiAoc2Nhbi0+aW5kZXhSZWxh dGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCkKKwl7CisJCS8qIGFtZ2V0YmF0Y2gg aW5kZXggQU0gKi8KKwkJQXNzZXJ0KHNjYW4tPm1heGl0ZW1zYmF0Y2ggPiAwKTsKKworCQlpZiAo c2Nhbi0+eHNfd2FudF9pdHVwKQorCQl7CisJCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBoZWFw YW1faW5kZXhfb25seV9iYXRjaF9nZXRuZXh0X3Nsb3Q7CisKKwkJCS8qCisJCQkgKiBJbmRleC1v bmx5IHNjYW5zIGNhY2hlIHZpc2liaWxpdHkgaW5mbyBpbiBhIEhlYXBCYXRjaERhdGEgcGVyCisJ CQkgKiBiYXRjaDogYSBmaXhlZC1zaXplIGhlYWRlciBmb2xsb3dlZCBieSBhIHBlci1pdGVtIGJh dGNodmlzW10KKwkJCSAqIGFycmF5IChvbmUgYm9vbCBwZXIgYmF0Y2ggaXRlbSkKKwkJCSAqLwor CQkJc2Nhbi0+YmF0Y2hfdGFibGVfb3BhcXVlX3NpemUgPSBvZmZzZXRvZihIZWFwQmF0Y2hEYXRh LCBiYXRjaHZpcykgKworCQkJCXNpemVvZihib29sKSAqIHNjYW4tPm1heGl0ZW1zYmF0Y2g7CisJ CX0KKwkJZWxzZQorCQkJc2Nhbi0+eHNfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X3BsYWlu X2JhdGNoX2dldG5leHRfc2xvdDsKKworCQkvKiBTZXQgdXAgc2NhbidzIGJhdGNoIHJpbmcgYnVm ZmVyICovCisJCXRhYmxlYW1fdXRpbF9iYXRjaHNjYW5faW5pdChzY2FuKTsKKwl9CiAJZWxzZQot CQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfcGxhaW5fdHVwbGVfZ2V0bmV4 dF9zbG90OworCXsKKwkJLyogYW1nZXR0dXBsZSBpbmRleCBBTSAqLworCQlpZiAoc2Nhbi0+eHNf d2FudF9pdHVwKQorCQkJc2Nhbi0+eHNfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X29ubHlf dHVwbGVfZ2V0bmV4dF9zbG90OworCQllbHNlCisJCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBo ZWFwYW1faW5kZXhfcGxhaW5fdHVwbGVfZ2V0bmV4dF9zbG90OworCX0KIAogCS8qCiAJICogSW5k ZXgtb25seSBzY2FucyB0aGF0IHJldHVybiAibmFtZSIgY29sdW1ucyBzdG9yZWQgYXMgY3N0cmlu Z3MgbmVlZCBhCkBAIC0xMTgsMTQgKzIwMiw0NCBAQCBoZWFwYW1faW5kZXhfc2Nhbl9iZWdpbihJ bmRleFNjYW5EZXNjIHNjYW4sIHVpbnQzMiBmbGFncykKIAlzY2FuLT54c190YWJsZV9vcGFxdWUg PSBoc2NhbjsKIH0KIAorLyoKKyAqIEluaXRpYWxpemUgdGhlIGhlYXAgdGFibGUgQU0ncyBwZXIt YmF0Y2ggb3BhcXVlIGFyZWEKKyAqLwogdm9pZAotaGVhcGFtX2luZGV4X3NjYW5fcmVzZXQoSW5k ZXhTY2FuRGVzYyBzY2FuKQoraGVhcGFtX2luZGV4X3NjYW5fYmF0Y2hfaW5pdChJbmRleFNjYW5E ZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCUhlYXBCYXRjaERhdGEgKmhiYXRj aDsKKworCS8qCisJICogVGhlIGNvcmUgY29kZSBzaG91bGQgb25seSBjYWxsIGhlcmUgZHVyaW5n IGluZGV4LW9ubHkgc2NhbnMuICBQbGFpbgorCSAqIHNjYW5zIGRvbid0IHJlcXVlc3QgYSBIZWFw QmF0Y2hEYXRhIGFyZWEgYXQgYWxsLgorCSAqLworCUFzc2VydChzY2FuLT54c193YW50X2l0dXAg JiYgc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKKworCS8qIFJlc2V0dGluZyB0aGUgdmFsaWQgcmFuZ2Ug bWFrZXMgaXQgc2FmZSB0byB1c2UvcmVjeWNsZSB0aGUgYmF0Y2ggKi8KKwloYmF0Y2ggPSBpbmRl eF9zY2FuX2JhdGNoX3RhYmxlX2FyZWEoc2NhbiwgYmF0Y2gpOworCWhiYXRjaC0+Zmlyc3RWaXNT ZXQgPSBJTlRfTUFYOworCWhiYXRjaC0+bGFzdFZpc1NldCA9IC0xOworfQorCisvKgorICogUmVz ZXQgdGFibGUgQU0gaW5kZXggc2NhbiBzdGF0ZSBpbiBwcmVwYXJhdGlvbiBmb3IgYSByZXNjYW4K KyAqLwordm9pZAoraGVhcGFtX2luZGV4X3NjYW5fcmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikK IHsKIAlJbmRleFNjYW5IZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhTY2FuSGVhcERhdGEgKikgc2Nh bi0+eHNfdGFibGVfb3BhcXVlOwogCisJLyogUmVzY2FucyBzaG91bGQgYXZvaWQgYW4gZXhjZXNz aXZlIG51bWJlciBvZiBWTSBsb29rdXBzICovCisJaHNjYW4tPnhzX3ZtX2l0ZW1zID0gMTsKKwog CS8qIEhlYXAgZmV0Y2hlcyBmcm9tIHRoZSBsYXN0IHJlc2NhbiBkb24ndCBjb3VudCB0b3dhcmRz IHRoaXMgbGltaXQgICovCiAJaHNjYW4tPnhzX2Jsa3N3aXRjaF9jb3VudCA9IDA7CiAKKwkvKiBS ZXNldCBiYXRjaCByaW5nIGJ1ZmZlciBzdGF0ZSAqLworCWlmIChzY2FuLT51c2ViYXRjaHJpbmcp CisJCXRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzZXQoc2NhbiwgZmFsc2UpOworCiAJLyoKIAkg KiBEZWxpYmVyYXRlbHkgYXZvaWQgZHJvcHBpbmcgcGlucyBub3cgaGVsZCBpbiB4c19jYnVmIGFu ZCB4c192bWJ1ZmZlci4KIAkgKiBUaGlzIHNhdmVzIGN5Y2xlcyBkdXJpbmcgY2VydGFpbiB0aWdo dCBuZXN0ZWQgbG9vcCBqb2lucyAoaXQgY2FuIGF2b2lkCkBAIC0xNTAsOSArMjY0LDM3IEBAIGhl YXBhbV9pbmRleF9zY2FuX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCiAJaWYgKGhzY2FuLT54c19p dHVwX2N4dCkKIAkJTWVtb3J5Q29udGV4dERlbGV0ZShoc2Nhbi0+eHNfaXR1cF9jeHQpOwogCisJ LyogRnJlZSBhbGwgYmF0Y2ggcmVsYXRlZCByZXNvdXJjZXMgKi8KKwlpZiAoc2Nhbi0+dXNlYmF0 Y2hyaW5nKQorCQl0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX2VuZChzY2FuKTsKKwogCXBmcmVlKGhz Y2FuKTsKIH0KIAorLyoKKyAqIFNhdmUgYmF0Y2ggcmluZyBidWZmZXIncyBjdXJyZW50IHNjYW5Q b3MgYXMgaXRzIG1hcmtQb3MKKyAqLwordm9pZAoraGVhcGFtX2luZGV4X3NjYW5fbWFya3BvcyhJ bmRleFNjYW5EZXNjIHNjYW4pCit7CisJQXNzZXJ0KHNjYW4tPnVzZWJhdGNocmluZyk7CisJQXNz ZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWNhbm1hcmtwb3MpOworCisJdGFi bGVhbV91dGlsX2JhdGNoc2Nhbl9tYXJrX3BvcyhzY2FuKTsKK30KKworLyoKKyAqIFJlc3RvcmUg YmF0Y2ggcmluZyBidWZmZXIncyBtYXJrUG9zIGludG8gaXRzIHNjYW5Qb3MKKyAqLwordm9pZAor aGVhcGFtX2luZGV4X3NjYW5fcmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUFzc2Vy dChzY2FuLT51c2ViYXRjaHJpbmcpOworCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9p bmRhbS0+YW1jYW5tYXJrcG9zKTsKKworCXRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzdG9yZV9w b3Moc2Nhbik7Cit9CisKIC8qCiAgKgloZWFwX2hvdF9zZWFyY2hfYnVmZmVyCS0gc2VhcmNoIEhP VCBjaGFpbiBmb3IgdHVwbGUgc2F0aXNmeWluZyBzbmFwc2hvdAogICoKQEAgLTQwMCw2ICs1NDIs MzQgQEAgaGVhcF9maWxsX2lvc19zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgVHVwbGVUYWJsZVNs b3QgKnNsb3QpCiAJCWVsb2coRVJST1IsICJubyBkYXRhIHJldHVybmVkIGZvciBpbmRleC1vbmx5 IHNjYW4iKTsKIH0KIAorLyogeHNfZ2V0bmV4dF9zbG90IGNhbGxiYWNrOiBhbWdldGJhdGNoLCBw bGFpbiBpbmRleCBzY2FuICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2hvdCBib29sCitoZWFwYW1f aW5kZXhfcGxhaW5fYmF0Y2hfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJ CQkJCSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90 ICpzbG90LAorCQkJCQkJCQkJICBib29sICpyZWNoZWNrKQoreworCUFzc2VydCghc2Nhbi0+eHNf d2FudF9pdHVwICYmIHNjYW4tPnVzZWJhdGNocmluZyk7CisJQXNzZXJ0KHNjYW4tPmluZGV4UmVs YXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpOworCisJcmV0dXJuIGhlYXBhbV9p bmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBzbG90LCBmYWxzZSwgdHJ1ZSwKKwkJ CQkJCQkJCSByZWNoZWNrKTsKK30KKworLyogeHNfZ2V0bmV4dF9zbG90IGNhbGxiYWNrOiBhbWdl dGJhdGNoLCBpbmRleC1vbmx5IHNjYW4gKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfaG90IGJvb2wK K2hlYXBhbV9pbmRleF9vbmx5X2JhdGNoX2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4s CisJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkgVHVwbGVUYWJs ZVNsb3QgKnNsb3QsCisJCQkJCQkJCQkgYm9vbCAqcmVjaGVjaykKK3sKKwlBc3NlcnQoc2Nhbi0+ eHNfd2FudF9pdHVwICYmIHNjYW4tPnVzZWJhdGNocmluZyk7CisJQXNzZXJ0KHNjYW4tPmluZGV4 UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpOworCisJcmV0dXJuIGhlYXBh bV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBzbG90LCB0cnVlLCB0cnVlLAor CQkJCQkJCQkJIHJlY2hlY2spOworfQorCiAvKiB4c19nZXRuZXh0X3Nsb3QgY2FsbGJhY2s6IGFt Z2V0dHVwbGUsIHBsYWluIGluZGV4IHNjYW4gKi8KIHN0YXRpYyBwZ19hdHRyaWJ1dGVfaG90IGJv b2wKIGhlYXBhbV9pbmRleF9wbGFpbl90dXBsZV9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBz Y2FuLApAQCAtNDA3LDEwICs1NzcsMTEgQEAgaGVhcGFtX2luZGV4X3BsYWluX3R1cGxlX2dldG5l eHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpz bG90LAogCQkJCQkJCQkJICBib29sICpyZWNoZWNrKQogewotCUFzc2VydCghc2Nhbi0+eHNfd2Fu dF9pdHVwKTsKKwlBc3NlcnQoIXNjYW4tPnhzX3dhbnRfaXR1cCAmJiAhc2Nhbi0+dXNlYmF0Y2hy aW5nKTsKIAlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0dHVwbGUg IT0gTlVMTCk7CiAKLQlyZXR1cm4gaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBkaXJl Y3Rpb24sIHNsb3QsIGZhbHNlLCByZWNoZWNrKTsKKwlyZXR1cm4gaGVhcGFtX2luZGV4X2dldG5l eHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJCQkJCSBy ZWNoZWNrKTsKIH0KIAogLyogeHNfZ2V0bmV4dF9zbG90IGNhbGxiYWNrOiBhbWdldHR1cGxlLCBp bmRleC1vbmx5IHNjYW4gKi8KQEAgLTQyMCwxNCArNTkxLDE1IEBAIGhlYXBhbV9pbmRleF9vbmx5 X3R1cGxlX2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgVHVwbGVU YWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkJCQkgYm9vbCAqcmVjaGVjaykKIHsKLQlBc3NlcnQoc2Nh bi0+eHNfd2FudF9pdHVwKTsKKwlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwICYmICFzY2FuLT51 c2ViYXRjaHJpbmcpOwogCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1n ZXR0dXBsZSAhPSBOVUxMKTsKIAotCXJldHVybiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KHNj YW4sIGRpcmVjdGlvbiwgc2xvdCwgdHJ1ZSwgcmVjaGVjayk7CisJcmV0dXJuIGhlYXBhbV9pbmRl eF9nZXRuZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBzbG90LCB0cnVlLCBmYWxzZSwKKwkJCQkJ CQkJCSByZWNoZWNrKTsKIH0KIAogLyoKLSAqIENvbW1vbiBpbXBsZW1lbnRhdGlvbiBmb3IgYm90 aCBoZWFwYW1faW5kZXhfKl9nZXRuZXh0X3Nsb3QgdmFyaWFudHMuCisgKiBDb21tb24gaW1wbGVt ZW50YXRpb24gZm9yIGFsbCBmb3VyIGhlYXBhbV9pbmRleF8qX2dldG5leHRfc2xvdCB2YXJpYW50 cy4KICAqCiAgKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRoZSBz Y2FuIGtleXMgYW5kIHRoZSBzbmFwc2hvdCB3YXMKICAqIGZvdW5kLCBmYWxzZSBvdGhlcndpc2Uu ICBPbiBzdWNjZXNzIHRoZSBzbG90IGlzIGZpbGxlZDogZm9yIHBsYWluIGluZGV4CkBAIC00Mzks MTMgKzYxMSwxMyBAQCBoZWFwYW1faW5kZXhfb25seV90dXBsZV9nZXRuZXh0X3Nsb3QoSW5kZXhT Y2FuRGVzYyBzY2FuLAogICogZHJvcHBlZCBieSBhIGZ1dHVyZSBjYWxsIGhlcmUgKG9yIGJ5IGEg bGF0ZXIgY2FsbCB0byBoZWFwYW1faW5kZXhfc2Nhbl9lbmQKICAqIHRocm91Z2ggaW5kZXhfZW5k c2NhbikuCiAgKgotICogVGhlIGluZGV4X29ubHkgcGFyYW1ldGVyIGlzIGEgY29tcGlsZS10aW1l IGNvbnN0YW50IGF0IGVhY2ggY2FsbCBzaXRlLAotICogYWxsb3dpbmcgdGhlIGNvbXBpbGVyIHRv IHNwZWNpYWxpemUgdGhlIGNvZGUgZm9yIGVhY2ggdmFyaWFudC4KKyAqIFRoZSBpbmRleF9vbmx5 IGFuZCBhbWdldGJhdGNoIHBhcmFtZXRlcnMgYXJlIGNvbXBpbGUtdGltZSBjb25zdGFudHMgYXQg ZWFjaAorICogY2FsbCBzaXRlLCBhbGxvd2luZyB0aGUgY29tcGlsZXIgdG8gc3BlY2lhbGl6ZSB0 aGUgY29kZSBmb3IgZWFjaCB2YXJpYW50LgogICovCiBzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5 c19pbmxpbmUgYm9vbAogaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xv dCwgYm9vbCBpbmRleF9vbmx5LAotCQkJCQkJICBib29sICpyZWNoZWNrKQorCQkJCQkJICBib29s IGFtZ2V0YmF0Y2gsIGJvb2wgKnJlY2hlY2spCiB7CiAJSW5kZXhTY2FuSGVhcERhdGEgKmhzY2Fu ID0gKEluZGV4U2NhbkhlYXBEYXRhICopIHNjYW4tPnhzX3RhYmxlX29wYXF1ZTsKIAlib29sCSAg ICpoZWFwX2NvbnRpbnVlID0gJnNjYW4tPnhzX2hlYXBfY29udGludWU7CkBAIC00NjAsMTQgKzYz MiwyMiBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCWlmICghKmhlYXBfY29udGludWUpCiAJCXsKIAkJCS8q IEdldCB0aGUgbmV4dCBUSUQgZnJvbSB0aGUgaW5kZXggKi8KLQkJCXRpZCA9IGluZGV4X2dldG5l eHRfdGlkKHNjYW4sIGRpcmVjdGlvbik7CisJCQlpZiAoYW1nZXRiYXRjaCkKKwkJCQl0aWQgPSBo ZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zKHNjYW4sIGhzY2FuLAorCQkJCQkJCQkJ CQkJCQkgZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCQkgaW5kZXhfb25seSA/CisJCQkJCQkJCQkJ CQkJCSAmYWxsX3Zpc2libGUgOiBOVUxMKTsKKwkJCWVsc2UKKwkJCQl0aWQgPSB0YWJsZWFtX3V0 aWxfZmV0Y2hfbmV4dF90dXBsZV90aWQoc2NhbiwgZGlyZWN0aW9uKTsKIAogCQkJLyogSWYgd2Un cmUgb3V0IG9mIGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KIAkJCWlmICh0aWQgPT0gTlVM TCkKIAkJCQlicmVhazsKIAotCQkJLyogRm9yIGluZGV4LW9ubHkgc2NhbnMsIGNoZWNrIHRoZSB2 aXNpYmlsaXR5IG1hcCAqLwotCQkJaWYgKGluZGV4X29ubHkpCisJCQlwZ3N0YXRfY291bnRfaW5k ZXhfdHVwbGVzKHNjYW4tPmluZGV4UmVsYXRpb24sIDEpOworCisJCQkvKiBGb3Igbm9uLWJhdGNo IGluZGV4LW9ubHkgc2NhbnMsIGNoZWNrIHRoZSB2aXNpYmlsaXR5IG1hcCAqLworCQkJaWYgKGlu ZGV4X29ubHkgJiYgIWFtZ2V0YmF0Y2gpCiAJCQkJYWxsX3Zpc2libGUgPSBWTV9BTExfVklTSUJM RShzY2FuLT5oZWFwUmVsYXRpb24sCiAJCQkJCQkJCQkJCSBJdGVtUG9pbnRlckdldEJsb2NrTnVt YmVyKHRpZCksCiAJCQkJCQkJCQkJCSAmaHNjYW4tPnhzX3ZtYnVmZmVyKTsKQEAgLTQ5Myw3ICs2 NzMsNyBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQl7CiAJCQkJLyogTm8gdmlzaWJsZSB0dXBsZSAqLwog CQkJCWlmIChhbGxfZGVhZCkKLQkJCQkJaGVhcGFtX2luZGV4X2tpbGxfaXRlbShzY2FuKTsKKwkJ CQkJaGVhcGFtX2luZGV4X2tpbGxfaXRlbShzY2FuLCBhbWdldGJhdGNoKTsKIAogCQkJCS8qCiAJ CQkJICogSWYgY2FsbGVyIHNldCBhIHZpc2l0ZWQtcGFnZXMgbGltaXQgKG9ubHkgc2VsZnVuY3Mu YydzCkBAIC01MTgsOCArNjk4LDcgQEAgaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJICogdXMgdG8gYXNzdW1l IHRoYXQganVzdCBoYXZpbmcgb25lIHZpc2libGUgdHVwbGUgaW4gdGhlIGhvdAogCQkJICogY2hh aW4gaXMgYWx3YXlzIGdvb2QgZW5vdWdoLgogCQkJICovCi0JCQlBc3NlcnQoIWluZGV4X29ubHkg fHwKLQkJCQkgICAhKCpoZWFwX2NvbnRpbnVlICYmIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhzX3Nu YXBzaG90KSkpOworCQkJQXNzZXJ0KCFpbmRleF9vbmx5IHx8ICEoKmhlYXBfY29udGludWUgJiYg c2Nhbi0+TVZDQ1NjYW4pKTsKIAkJfQogCQllbHNlCiAJCXsKQEAgLTY0NCw3ICs4MjMsNyBAQCBo ZWFwYW1faW5kZXhfaGVhcF9mZXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkhlYXBE YXRhICpoc2NhbiwKIAkJCSAqIE9ubHkgaW4gYSBub24tTVZDQyBzbmFwc2hvdCBwbGFpbiBzY2Fu IGNhbiBtb3JlIHRoYW4gb25lIG1lbWJlcgogCQkJICogb2YgdGhlIEhPVCBjaGFpbiBiZSB2aXNp YmxlCiAJCQkgKi8KLQkJCSpoZWFwX2NvbnRpbnVlID0gIUlzTVZDQ0xpa2VTbmFwc2hvdChzbmFw c2hvdCk7CisJCQkqaGVhcF9jb250aW51ZSA9ICFzY2FuLT5NVkNDU2NhbjsKIAogCQkJc2xvdC0+ dHRzX3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZWwpOwogCQkJRXhlY1N0b3JlQnVmZmVy SGVhcFR1cGxlKGhlYXBUdXBsZSwgc2xvdCwgaHNjYW4tPnhzX2NidWYpOwpAQCAtNjc5LDE1ICs4 NTgsMzAzIEBAIGhlYXBhbV9pbmRleF9oZWFwX2ZldGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5k ZXhTY2FuSGVhcERhdGEgKmhzY2FuLAogICogUmVsYXRpb25HZXRJbmRleFNjYW4oKS4KICAqLwog c3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQKLWhlYXBhbV9pbmRleF9raWxs X2l0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuKQoraGVhcGFtX2luZGV4X2tpbGxfaXRlbShJbmRleFNj YW5EZXNjIHNjYW4sIGJvb2wgYW1nZXRiYXRjaCkKIHsKIAlpZiAoc2Nhbi0+eGFjdFN0YXJ0ZWRJ blJlY292ZXJ5KQogCQlyZXR1cm47CiAKLQkvKgotCSAqIFRlbGwgYW1nZXR0dXBsZS1iYXNlZCBp bmRleCBBTSB0byBraWxsIGl0cyBlbnRyeSBmb3IgdGhhdCBUSUQuICBUaGUKLQkgKiBuZXh0IGlu ZGV4X2dldG5leHRfdGlkIGNhbGwgd2lsbCBwYXNzIHRoYXQgYWxvbmcgdG8gdGhlIGluZGV4IEFN LAotCSAqIGJlZm9yZSB1bnNldHRpbmcgdGhlIGZsYWcgYWdhaW4uCi0JICovCi0Jc2Nhbi0+a2ls bF9wcmlvcl90dXBsZSA9IHRydWU7CisJaWYgKGFtZ2V0YmF0Y2gpCisJCXRhYmxlYW1fdXRpbF9z Y2FucG9zX2tpbGxpdGVtKHNjYW4pOworCWVsc2UKKwl7CisJCS8qCisJCSAqIFRlbGwgYW1nZXR0 dXBsZS1iYXNlZCBpbmRleCBBTSB0byBraWxsIGl0cyBlbnRyeSBmb3IgdGhhdCBUSUQuICBUaGUK KwkJICogbmV4dCB0YWJsZWFtX3V0aWxfZmV0Y2hfbmV4dF90dXBsZV90aWQgY2FsbCB3aWxsIHBh c3MgdGhhdCBhbG9uZyB0bworCQkgKiB0aGUgaW5kZXggQU0sIGJlZm9yZSB1bnNldHRpbmcgdGhl IGZsYWcgYWdhaW4uCisJCSAqLworCQlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gdHJ1ZTsKKwl9 Cit9CisKKy8qCisgKiBHZXQgbmV4dCBUSUQgZnJvbSBiYXRjaCByaW5nIGJ1ZmZlciwgbW92aW5n IGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4KKyAqIEFsc28gc2V0cyAqYWxsX3Zpc2libGUg Zm9yIGl0ZW0gd2hlbiBjYWxsZXIgcGFzc2VzIGEgbm9uLU5VTEwgYXJnLgorICovCitzdGF0aWMg cGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgSXRlbVBvaW50ZXIKK2hlYXBhbV9pbmRleF9nZXRu ZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5IZWFwRGF0YSAq aHNjYW4sCisJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sICphbGxfdmlz aWJsZSkKK3sKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJnNjYW4tPmJhdGNocmluZ2J1 Zi5zY2FuUG9zOworCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaDsKKworCUFzc2VydChhbGxfdmlz aWJsZSA9PSBOVUxMIHx8IHNjYW4tPnhzX3dhbnRfaXR1cCk7CisKKwkvKgorCSAqIEF0dGVtcHQg dG8gaW5jcmVtZW50IHRoZSBwb3NpdGlvbiBvZiBhbnkgZXhpc3RpbmcgbG9hZGVkIHNjYW5CYXRj aAorCSAqIChhbHdheXMgZmFpbHMgb24gZmlyc3QgY2FsbCBoZXJlIGZvciB0aGUgc2NhbikKKwkg Ki8KKwlpZiAodGFibGVhbV91dGlsX3NjYW5wb3NfYWR2YW5jZShzY2FuLCBkaXJlY3Rpb24sICZz Y2FuQmF0Y2gsIHNjYW5Qb3MpKQorCXsKKwkJLyoKKwkJICogSW5jcmVtZW50ZWQgc2NhblBvcyB3 aXRoaW4gZXhpc3RpbmcgbG9hZGVkIHNjYW5CYXRjaDsgcmV0dXJuIHRoZQorCQkgKiBuZXcgcG9z aXRpb24ncyBUSUQgdG8gY2FsbGVyCisJCSAqLworCQlyZXR1cm4gaGVhcGFtX2luZGV4X3JldHVy bl9zY2FucG9zX3RpZChzY2FuLCBoc2NhbiwgZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkgICBzY2Fu QmF0Y2gsIHNjYW5Qb3MsCisJCQkJCQkJCQkJCSAgIGFsbF92aXNpYmxlKTsKKwl9CisKKwkvKiBU cnkgdG8gYWR2YW5jZSBzY2FuQmF0Y2ggdG8gdGhlIG5leHQgYmF0Y2ggKG9yIGdldCB0aGUgZmly c3QgYmF0Y2gpICovCisJc2NhbkJhdGNoID0gdGFibGVhbV91dGlsX2ZldGNoX25leHRfYmF0Y2go c2NhbiwgZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkgIHNjYW5CYXRjaCwgc2NhblBvcyk7CisKKwlp ZiAoIXNjYW5CYXRjaCkKKwl7CisJCS8qCisJCSAqIFdlJ3JlIGRvbmU7IG5vIG1vcmUgYmF0Y2hl cyBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbi4KKwkJICoKKwkJICogTm90ZTogaWYgc2Nh blBvcyB3YXMgZXZlciB2YWxpZCAoaWYgYW1nZXRiYXRjaCBldmVyIHJldHVybmVkIGEKKwkJICog YmF0Y2gpLCBpdCByZW1haW5zIHZhbGlkIG5vdy4gIFRoZSBjdXJyZW50IHNjYW5Qb3MuaXRlbSBp cyBub3cKKwkJICogc2NhbkJhdGNoLmxhc3RJdGVtICsgMSAob3Igc2NhbkJhdGNoLmZpcnN0SXRl bSAtIDEsIHdoZW4gc2Nhbm5pbmcKKwkJICogYmFja3dhcmRzKS4gIFdlIGFyZSB0aGVyZWZvcmUg cHJlcGFyZWQgdG8gbW92ZSB0aGUgc2NhbiBpbiB0aGUKKwkJICogb3Bwb3NpdGUgZGlyZWN0aW9u LCB3aXRoaW4gb3VyIHN0aWxsLWxvYWRlZCBzY2FuQmF0Y2guICBTaW1pbGFybHksCisJCSAqIHdl IGNhbiBzdGlsbCByZXN0b3JlIGEgc2F2ZWQgbWFyayBpbiB0aGUgdXN1YWwgd2F5LgorCQkgKi8K KwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBXZSBoYXZlIGEgbmV3IHNjYW5CYXRjaCwg YnV0IHNjYW5Qb3MgaGFzbid0IGJlZW4gYWR2YW5jZWQgdG8gaXQganVzdAorCSAqIHlldC4gIFVw ZGF0ZSBiYXRjaHJpbmdidWYgYW5kIHNjYW5Qb3Mgc3VjaCB0aGF0IHRoZSBzY2FuIGNhbiBjb250 aW51ZQorCSAqIHdpdGggb3VyIG5ldyBzY2FuQmF0Y2guCisJICoKKwkgKiBUaGlzIHdpbGwgcG9z aXRpb24gc2NhblBvcyB0byB0aGUgc3RhcnQgb2Ygb3VyIG5ldyBzY2FuQmF0Y2guICBJdCB3aWxs CisJICogYWxzbyByZW1vdmUgdGhlIG9sZCBoZWFkIGJhdGNoL3NjYW5CYXRjaCBmcm9tIHRoZSBi YXRjaCByaW5nIGJ1ZmZlciwKKwkgKiBhbmQgcmVsZWFzZSB0aGUgdW5kZXJseWluZyBiYXRjaCBz dG9yYWdlLgorCSAqLworCXRhYmxlYW1fdXRpbF9zY2FucG9zX25leHRiYXRjaChzY2FuLCBkaXJl Y3Rpb24sIHNjYW5CYXRjaCk7CisKKwkvKgorCSAqIFNldCBzY2FuUG9zIHRvIGZpcnN0IGl0ZW0g Zm9yIG5ld2x5IGxvYWRlZCBzY2FuQmF0Y2g7IHJldHVybiB0aGUgbmV3CisJICogcG9zaXRpb24n cyBUSUQgdG8gY2FsbGVyCisJICovCisJcmV0dXJuIGhlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBv c190aWQoc2NhbiwgaHNjYW4sIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkgICBzY2FuQmF0Y2gsIHNj YW5Qb3MsIGFsbF92aXNpYmxlKTsKK30KKworLyoKKyAqIFNhdmUgdGhlIGN1cnJlbnQgc2NhblBv cy9zY2FuQmF0Y2ggaXRlbSdzIFRJRCBpbiBzY2FuJ3MgeHNfaGVhcHRpZCwgYW5kCisgKiByZXR1 cm4gYSBwb2ludGVyIHRvIHRoYXQgVElELiAgV2hlbiBhbGxfdmlzaWJsZSBpc24ndCBOVUxMIChk dXJpbmcgYW4KKyAqIGluZGV4LW9ubHkgc2NhbiksIGFsc28gc2V0cyBpdGVtJ3MgdmlzaWJpbGl0 eSBzdGF0dXMgaW4gKmFsbF92aXNpYmxlLgorICoKKyAqIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nj YW5iYXRjaF9wb3MgaGVscGVyIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW5saW5lIEl0ZW1Qb2lu dGVyCitoZWFwYW1faW5kZXhfcmV0dXJuX3NjYW5wb3NfdGlkKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhTY2FuSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlv biwKKwkJCQkJCQkJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoLAorCQkJCQkJCQlCYXRjaFJpbmdJ dGVtUG9zICpzY2FuUG9zLAorCQkJCQkJCQlib29sICphbGxfdmlzaWJsZSkKK3sKKwlIZWFwQmF0 Y2hEYXRhICpoYmF0Y2g7CisKKwkvKiBTZXQgeHNfaGVhcHRpZCwgd2hpY2ggY2FsbGVyIChhbmQg Y29yZSBleGVjdXRvcikgd2lsbCBuZWVkICovCisJc2Nhbi0+eHNfaGVhcHRpZCA9IHNjYW5CYXRj aC0+aXRlbXNbc2NhblBvcy0+aXRlbV0udGFibGVUaWQ7CisKKwlpZiAoYWxsX3Zpc2libGUgPT0g TlVMTCkKKwl7CisJCS8qCisJCSAqIFBsYWluIGluZGV4IHNjYW4uCisJCSAqLworCQlBc3NlcnQo IXNjYW4tPnhzX3dhbnRfaXR1cCk7CisJCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKKwl9CisK KwkvKiBJbmRleC1vbmx5IHNjYW4gKi8KKwlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwor CXNjYW4tPnhzX2l0dXAgPSAoSW5kZXhUdXBsZSkgKHNjYW5CYXRjaC0+Y3VyclR1cGxlcyArCisJ CQkJCQkJCSAgc2NhbkJhdGNoLT5pdGVtc1tzY2FuUG9zLT5pdGVtXS50dXBsZU9mZnNldCk7CisK KwkvKgorCSAqIFNldCB2aXNpYmlsaXR5IGluZm8gZm9yIHRoZSBjdXJyZW50IHNjYW5Qb3MgaXRl bSAocGx1cyBwb3NzaWJseSBzb21lCisJICogYWRkaXRpb25hbCBpdGVtcyBpbiB0aGUgY3VycmVu dCBzY2FuIGRpcmVjdGlvbikgYXMgbmVlZGVkCisJICovCisJaGJhdGNoID0gaW5kZXhfc2Nhbl9i YXRjaF90YWJsZV9hcmVhKHNjYW4sIHNjYW5CYXRjaCk7CisJaWYgKCFIRUFQX0JBVENIX1ZJU19D QUNIRUQoaGJhdGNoLCBzY2FuUG9zLT5pdGVtKSkKKwkJaGVhcGFtX2luZGV4X2JhdGNoX3Bvc192 aXNpYmlsaXR5KHNjYW4sIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkgIHNjYW5CYXRjaCwgaGJhdGNo LCBzY2FuUG9zKTsKKworCS8qIEZpbmFsbHksIHNldCBhbGxfdmlzaWJsZSBmb3IgY2FsbGVyICov CisJKmFsbF92aXNpYmxlID0gaGJhdGNoLT5iYXRjaHZpc1tzY2FuUG9zLT5pdGVtXTsKKworCXJl dHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKK30KKworLyoKKyAqIE9idGFpbiB2aXNpYmlsaXR5IGlu Zm9ybWF0aW9uIGZvciBhIFRJRCBmcm9tIGNhbGxlcidzIGJhdGNoLgorICoKKyAqIENhbGxlZCBk dXJpbmcgYW1nZXRiYXRjaCBpbmRleC1vbmx5IHNjYW5zLiAgV2UgYWx3YXlzIG1ha2Ugc3VyZSB0 aGF0IHRoZQorICogdmlzaWJpbGl0eSBvZiBjYWxsZXIncyBpdGVtIChhbiBvZmZzZXQgaW50byBj YWxsZXIncyBiYXRjaC0+aXRlbXNbXSBhcnJheSkKKyAqIGhhcyBiZWVuIHNldCBpbiBpdHMgYmF0 Y2gncyBiYXRjaHZpc1tdLiAgV2UgbWlnaHQgYWxzbyBzZXQgdmlzaWJpbGl0eSBpbmZvCisgKiBm b3Igb3RoZXIgaXRlbXMgZnJvbSBjYWxsZXIncyBiYXRjaCBtb3JlIHByb2FjdGl2ZWx5IHdoZW4g dGhhdCBtYWtlcyBzZW5zZS4KKyAqCisgKiBFdmVyeSBpdGVtIGhhcyBpdHMgYmF0Y2h2aXNbXSBl bnRyeSBzZXQgZXhhY3RseSBvbmNlIChvciBuZXZlcikuICBXZSBtYWtlCisgKiBzdXJlIHRoYXQg dGhlIHNjYW4gaGFzIGEgZml4ZWQgcGljdHVyZSBvZiB3aGljaCBibG9ja3MgaXQnbGwgbmVlZCB0 byBmZXRjaAorICogaW4gdGhlIG5lYXIgZnV0dXJlLiAgSWYgY2FsbGVyJ3MgcG9zaXRpb24ncyBp dGVtIChvciBvdGhlciBuZWFyYnkgaXRlbXMpCisgKiBhbHJlYWR5IGhhdmUgYSB2YWxpZCBiYXRj aHZpc1tdIGVudHJ5LCB3ZSBtdXN0IGF2b2lkIGNsb2JiZXJpbmcgdGhhdCBlbnRyeS4KKyAqCisg KiBXZSBrZWVwIHR3byBjb21wZXRpbmcgY29uc2lkZXJhdGlvbnMgaW4gYmFsYW5jZSB3aGVuIGRl dGVybWluaW5nIHdoZXRoZXIgdG8KKyAqIGNoZWNrIGFkZGl0aW9uYWwgaXRlbXM6IHRoZSBuZWVk IHRvIGtlZXAgdGhlIGNvc3Qgb2YgdmlzaWJpbGl0eSBtYXAgYWNjZXNzCisgKiB1bmRlciBjb250 cm9sIHdoZW4gbW9zdCBpdGVtcyB3aWxsIG5ldmVyIGJlIHJldHVybmVkIGJ5IHRoZSBzY2FuIGFu eXdheQorICogKGltcG9ydGFudCBmb3IgaW5uZXIgaW5kZXggc2NhbnMgb2YgYW50aS1qb2lucyBh bmQgc2VtaS1qb2lucyksIGFuZCB0aGUKKyAqIG5lZWQgdG8gdW5ndWFyZCBiYXRjaGVzIHByb21w dGx5LgorICoKKyAqIE9uY2Ugd2UndmUgcmVzb2x2ZWQgdmlzaWJpbGl0eSBmb3IgYWxsIGl0ZW1z IGluIGEgYmF0Y2gsIHdlIGNhbiBzYWZlbHkKKyAqIHVuZ3VhcmQgaXQgYnkgY2FsbGluZyBhbXVu Z3VhcmRiYXRjaC4gIFRoaXMgaXMgc2FmZSB3aXRoIHJlc3BlY3QgdG8KKyAqIGNvbmN1cnJlbnQg VkFDVVVNIGJlY2F1c2UgdGhlIGJhdGNoJ3MgZ3VhcmQgKHR5cGljYWxseSBhIGJ1ZmZlciBwaW4g b24gdGhlCisgKiBvcmlnaW5hdGluZyBpbmRleCBwYWdlKSBibG9ja3MgVkFDVVVNIGZyb20gYWNx dWlyaW5nIGEgY29uZmxpY3RpbmcgY2xlYW51cAorICogbG9jayBvbiB0aGF0IHBhZ2UuICBDb3B5 aW5nIHRoZSByZWxldmFudCB2aXNpYmlsaXR5IG1hcCBkYXRhIGludG8gb3VyIGxvY2FsCisgKiBj YWNoZSBzdWZmaWNlcyB0byBwcmV2ZW50IHVuc2FmZSBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmc6 IGlmIGFueSBvZiB0aGVzZQorICogVElEcyBwb2ludCB0byBkZWFkIGhlYXAgdHVwbGVzLCBWQUNV VU0gY2Fubm90IHBvc3NpYmx5IHJldHVybiBmcm9tCisgKiBhbWJ1bGtkZWxldGUgYW5kIG1hcmsg dGhlIHBvaW50ZWQtdG8gaGVhcCBwYWdlcyBhcyBhbGwtdmlzaWJsZS4gIFZBQ1VVTQorICogX2Nh bl8gZG8gc28gb25jZSB0aGUgYmF0Y2ggaXMgdW5ndWFyZGVkLCBidXQgdGhhdCdzIG9rYXk7IHdl J2xsIGJlIHdvcmtpbmcKKyAqIG9mZiBvZiBjYWNoZWQgdmlzaWJpbGl0eSBpbmZvIHRoYXQgaW5k aWNhdGVzIHRoYXQgdGhlIGRlYWQgVElEcyBhcmUgTk9UCisgKiBhbGwtdmlzaWJsZS4KKyAqCisg KiBXaGF0IGFib3V0IHRoZSBvcHBvc2l0ZSBjYXNlLCB3aGVyZSBhIHBhZ2Ugd2FzIGFsbC12aXNp YmxlIHdoZW4gd2UgY2FjaGVkCisgKiB0aGUgVk0gYml0cyBidXQgdHVwbGVzIG9uIGl0IGFyZSBk ZWxldGVkIGFmdGVyd2FyZHM/ICBUaGF0IGlzIHNhZmUgdG9vOiBhbnkKKyAqIHR1cGxlIHRoYXQg d2FzIHZpc2libGUgdG8gYWxsIHdoZW4gd2UgcmVhZCB0aGUgVk0gbXVzdCBhbHNvIGJlIHZpc2li bGUgdG8KKyAqIG91ciBNVkNDIHNuYXBzaG90LCBzbyBpdCBpcyBjb3JyZWN0IHRvIHNraXAgdGhl IGhlYXAgZmV0Y2ggZm9yIHRob3NlIFRJRHMuCisgKi8KK3N0YXRpYyB2b2lkCitoZWFwYW1faW5k ZXhfYmF0Y2hfcG9zX3Zpc2liaWxpdHkoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbiwKKwkJCQkJCQkJICBJbmRleFNjYW5CYXRjaCBiYXRjaCwgSGVhcEJhdGNoRGF0 YSAqaGJhdGNoLAorCQkJCQkJCQkgIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcykKK3sKKwlJbmRleFNj YW5IZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhTY2FuSGVhcERhdGEgKikgc2Nhbi0+eHNfdGFibGVf b3BhcXVlOworCWludAkJCXBvc0l0ZW0gPSBwb3MtPml0ZW07CisJaW50CQkJbG9JdGVtLAorCQkJ CWhpSXRlbTsKKwlCbG9ja051bWJlciBjdXJ2bWhlYXBibGtubyA9IEludmFsaWRCbG9ja051bWJl cjsKKwlib29sCQljdXJ2bWhlYXBhbGx2aXMgPSBmYWxzZTsKKworCUFzc2VydChoYmF0Y2ggPT0g aW5kZXhfc2Nhbl9iYXRjaF90YWJsZV9hcmVhKHNjYW4sIGJhdGNoKSk7CisKKwkvKgorCSAqIFRo ZSBiYXRjaCBtdXN0IHN0aWxsIGJlIGd1YXJkZWQgd2hlbmV2ZXIgd2UncmUgY2FsbGVkLgorCSAq CisJICogYW11bmd1YXJkYmF0Y2ggY2FuJ3QgYmUgY2FsbGVkIHVudGlsIHdlJ3ZlIGFscmVhZHkg c2V0IF9ldmVyeV8gYmF0Y2gKKwkgKiBpdGVtJ3MgYmF0Y2h2aXNbXSBzdGF0dXMsIGJ1dCBpZiB3 ZSd2ZSBhbHJlYWR5IGRvbmUgc28gZm9yIHRoaXMgYmF0Y2gKKwkgKiB0aGVuIGl0IHNob3VsZG4n dCBldmVyIGdldCBwYXNzZWQgdG8gdXMgYWdhaW4gYnkgc29tZSBzdWJzZXF1ZW50IGNhbGwuCisJ ICogKFRoaXMgcmVsaWVzIG9uIGluZGV4LW9ubHkgc2NhbnMgYWx3YXlzIGJlaW5nICFiYXRjaElt bWVkaWF0ZVVuZ3VhcmQuKQorCSAqLworCUFzc2VydChiYXRjaC0+aXNHdWFyZGVkICYmICFzY2Fu LT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQpOworCisJLyoKKwkgKiBTZXQgdmlzaWJpbGl0eSBpbmZv IGZvciBhIHJhbmdlIG9mIGl0ZW1zLCBpbiBzY2FuIG9yZGVyLgorCSAqCisJICogTm90ZTogdmlz aWJpbGl0eW1hcF9nZXRfc3RhdHVzIGRvZXMgbm90IGxvY2sgdGhlIHZpc2liaWxpdHkgbWFwIGJ1 ZmZlciwKKwkgKiBzbyB0aGUgcmVzdWx0IGNvdWxkIGJlIHNsaWdodGx5IHN0YWxlLiAgU2VlIHRo ZSAiTWVtb3J5IG9yZGVyaW5nCisJICogZWZmZWN0cyIgZGlzY3Vzc2lvbiBhYm92ZSB2aXNpYmls aXR5bWFwX2dldF9zdGF0dXMgZm9yIGFuIGV4cGxhbmF0aW9uCisJICogb2Ygd2h5IHRoaXMgaXMg b2theS4KKwkgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCXsK KwkJaW50CQkJbGFzdFNldEl0ZW0gPSBNaW4oYmF0Y2gtPmxhc3RJdGVtLAorCQkJCQkJCQkJICBw b3NJdGVtICsgaHNjYW4tPnhzX3ZtX2l0ZW1zIC0gMSk7CisKKwkJZm9yIChpbnQgc2V0SXRlbSA9 IHBvc0l0ZW07IHNldEl0ZW0gPD0gbGFzdFNldEl0ZW07IHNldEl0ZW0rKykKKwkJeworCQkJSXRl bVBvaW50ZXIgdGlkID0gJmJhdGNoLT5pdGVtc1tzZXRJdGVtXS50YWJsZVRpZDsKKwkJCUJsb2Nr TnVtYmVyIGhlYXBibGtubyA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKKworCQkJ LyogTXVzdCBuZXZlciBvdmVyd3JpdGUgYW55IGJhdGNoIGl0ZW0ncyBjYWNoZWQgdmlzaWJpbGl0 eSBpbmZvICovCisJCQlpZiAoSEVBUF9CQVRDSF9WSVNfQ0FDSEVEKGhiYXRjaCwgc2V0SXRlbSkp CisJCQkJY29udGludWU7CisKKwkJCWlmIChoZWFwYmxrbm8gIT0gY3Vydm1oZWFwYmxrbm8pCisJ CQl7CisJCQkJY3Vydm1oZWFwYWxsdmlzID0gVk1fQUxMX1ZJU0lCTEUoc2Nhbi0+aGVhcFJlbGF0 aW9uLCBoZWFwYmxrbm8sCisJCQkJCQkJCQkJCQkgJmhzY2FuLT54c192bWJ1ZmZlcik7CisJCQkJ Y3Vydm1oZWFwYmxrbm8gPSBoZWFwYmxrbm87CisJCQl9CisKKwkJCWhiYXRjaC0+YmF0Y2h2aXNb c2V0SXRlbV0gPSBjdXJ2bWhlYXBhbGx2aXM7CisJCX0KKworCQkvKiBXZSBqdXN0IGNhY2hlZCB2 aXNpYmlsaXR5IGZvciBpdGVtcyBbcG9zSXRlbSwgbGFzdFNldEl0ZW1dICovCisJCWxvSXRlbSA9 IHBvc0l0ZW07CisJCWhpSXRlbSA9IGxhc3RTZXRJdGVtOworCX0KKwllbHNlCisJeworCQlpbnQJ CQlsYXN0U2V0SXRlbSA9IE1heChiYXRjaC0+Zmlyc3RJdGVtLAorCQkJCQkJCQkJICBwb3NJdGVt IC0gaHNjYW4tPnhzX3ZtX2l0ZW1zICsgMSk7CisKKwkJZm9yIChpbnQgc2V0SXRlbSA9IHBvc0l0 ZW07IHNldEl0ZW0gPj0gbGFzdFNldEl0ZW07IHNldEl0ZW0tLSkKKwkJeworCQkJSXRlbVBvaW50 ZXIgdGlkID0gJmJhdGNoLT5pdGVtc1tzZXRJdGVtXS50YWJsZVRpZDsKKwkJCUJsb2NrTnVtYmVy IGhlYXBibGtubyA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKKworCQkJLyogTXVz dCBuZXZlciBvdmVyd3JpdGUgYW55IGJhdGNoIGl0ZW0ncyBjYWNoZWQgdmlzaWJpbGl0eSBpbmZv ICovCisJCQlpZiAoSEVBUF9CQVRDSF9WSVNfQ0FDSEVEKGhiYXRjaCwgc2V0SXRlbSkpCisJCQkJ Y29udGludWU7CisKKwkJCWlmIChoZWFwYmxrbm8gIT0gY3Vydm1oZWFwYmxrbm8pCisJCQl7CisJ CQkJY3Vydm1oZWFwYWxsdmlzID0gVk1fQUxMX1ZJU0lCTEUoc2Nhbi0+aGVhcFJlbGF0aW9uLCBo ZWFwYmxrbm8sCisJCQkJCQkJCQkJCQkgJmhzY2FuLT54c192bWJ1ZmZlcik7CisJCQkJY3Vydm1o ZWFwYmxrbm8gPSBoZWFwYmxrbm87CisJCQl9CisKKwkJCWhiYXRjaC0+YmF0Y2h2aXNbc2V0SXRl bV0gPSBjdXJ2bWhlYXBhbGx2aXM7CisJCX0KKworCQkvKiBXZSBqdXN0IGNhY2hlZCB2aXNpYmls aXR5IGZvciBpdGVtcyBbbGFzdFNldEl0ZW0sIHBvc0l0ZW1dICovCisJCWxvSXRlbSA9IGxhc3RT ZXRJdGVtOworCQloaUl0ZW0gPSBwb3NJdGVtOworCX0KKworCS8qCisJICogRXh0ZW5kIHRoZSBi YXRjaCdzIHZhbGlkIHJhbmdlIHRvIGNvdmVyIHRoZSBpdGVtcyB3ZSBqdXN0IGNhY2hlZC4gIFRo ZQorCSAqIHNldCBvZiBjYWNoZWQgaXRlbXMgaXMgYWx3YXlzIGNvbnRpZ3VvdXMsIGJlY2F1c2Ug dGhlIHNjYW4gdmlzaXRzIGl0ZW1zCisJICogaW4gb3JkZXIgYW5kIG9ubHkgZXZlciBleHRlbmRz IHRoZSByYW5nZSBmcm9tIGZpcnN0SXRlbSBmb3J3YXJkcyBvcgorCSAqIGZyb20gbGFzdEl0ZW0g YmFja3dhcmRzLgorCSAqLworCUFzc2VydChoYmF0Y2gtPmZpcnN0VmlzU2V0ID4gaGJhdGNoLT5s YXN0VmlzU2V0IHx8CS8qIHN0aWxsIGNvbnRpZ3VvdXM/ICovCisJCSAgIChsb0l0ZW0gPD0gaGJh dGNoLT5sYXN0VmlzU2V0ICsgMSAmJgorCQkJaGlJdGVtID49IGhiYXRjaC0+Zmlyc3RWaXNTZXQg LSAxKSk7CisJaGJhdGNoLT5maXJzdFZpc1NldCA9IE1pbihoYmF0Y2gtPmZpcnN0VmlzU2V0LCBs b0l0ZW0pOworCWhiYXRjaC0+bGFzdFZpc1NldCA9IE1heChoYmF0Y2gtPmxhc3RWaXNTZXQsIGhp SXRlbSk7CisKKwkvKgorCSAqIEl0J3Mgc2FmZSB0byB1bmd1YXJkIHRoZSBiYXRjaCAodmlhIGFt dW5ndWFyZGJhdGNoKSBhcyBzb29uIGFzIHdlJ3ZlCisJICogcmVzb2x2ZWQgdGhlIHZpc2liaWxp dHkgc3RhdHVzIG9mIGFsbCBvZiBpdHMgaXRlbXMgKHVubGVzcyB0aGlzIGlzIGEKKwkgKiBub24t TVZDQyBzY2FuKQorCSAqLworCWlmIChoYmF0Y2gtPmZpcnN0VmlzU2V0IDw9IGJhdGNoLT5maXJz dEl0ZW0gJiYKKwkJaGJhdGNoLT5sYXN0VmlzU2V0ID49IGJhdGNoLT5sYXN0SXRlbSkKKwl7CisJ CUFzc2VydChoYmF0Y2gtPmZpcnN0VmlzU2V0ID09IGJhdGNoLT5maXJzdEl0ZW0gJiYKKwkJCSAg IGhiYXRjaC0+bGFzdFZpc1NldCA9PSBiYXRjaC0+bGFzdEl0ZW0pOworCisJCS8qCisJCSAqIE5v dGU6IG5vZGVJbmRleG9ubHlzY2FuLmMgb25seSBzdXBwb3J0cyBNVkNDIHNuYXBzaG90cywgYnV0 IHdlCisJCSAqIHN0aWxsIGNvcGUgd2l0aCBpbmRleC1vbmx5IHNjYW4gY2FsbGVycyB3aXRoIG90 aGVyIHNuYXBzaG90IHR5cGVzLgorCQkgKiBUaGlzIGlzIGNlcnRhaW5seSBub3QgdW5leHBlY3Rl ZDsgc2VsZnVuY3MuYyBwZXJmb3JtcyBpbmRleC1vbmx5CisJCSAqIHNjYW5zIHRoYXQgdXNlIFNu YXBzaG90Tm9uVmFjdXVtYWJsZS4KKwkJICovCisJCWlmIChzY2FuLT5NVkNDU2NhbikKKwkJCXRh YmxlYW1fdXRpbF91bmd1YXJkX2JhdGNoKHNjYW4sIGJhdGNoKTsKKwl9CisKKwkvKgorCSAqIEVs c2UgY2hlY2sgdmlzaWJpbGl0eSBmb3IgdHdpY2UgYXMgbWFueSBpdGVtcyBuZXh0IHRpbWUsIG9y IGFsbCBpdGVtcy4KKwkgKiBXZSBjaGVjayBhbGwgaXRlbXMgaW4gb25lIGdvIG9uY2Ugd2UncmUg cGFzc2VkIHRoZSBzY2FuJ3MgZmlyc3QgYmF0Y2guCisJICovCisJZWxzZSBpZiAoaHNjYW4tPnhz X3ZtX2l0ZW1zIDwgKGJhdGNoLT5sYXN0SXRlbSAtIGJhdGNoLT5maXJzdEl0ZW0pKQorCQloc2Nh bi0+eHNfdm1faXRlbXMgKj0gMjsKKwllbHNlCisJCWhzY2FuLT54c192bV9pdGVtcyA9IHNjYW4t Pm1heGl0ZW1zYmF0Y2g7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv TWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUKaW5kZXggNmYyZTMw NjFhLi5lNmQ2ODFiNDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtl ZmlsZQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUKQEAgLTE2LDYgKzE2 LDcgQEAgT0JKUyA9IFwKIAlhbWFwaS5vIFwKIAlhbXZhbGlkYXRlLm8gXAogCWdlbmFtLm8gXAot CWluZGV4YW0ubworCWluZGV4YW0ubyBcCisJaW5kZXhiYXRjaC5vCiAKIGluY2x1ZGUgJCh0b3Bf c3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9hbWFwaS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2FtYXBpLmMKaW5k ZXggZWZhMDA3MDMwLi5kNGFkYmJlYjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9hbWFwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jCkBAIC01 NSw2ICs1NSwxMSBAQCBHZXRJbmRleEFtUm91dGluZShPaWQgYW1oYW5kbGVyKQogCUFzc2VydChy b3V0aW5lLT5hbXJlc2NhbiAhPSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+YW1lbmRzY2FuICE9 IE5VTEwpOwogCisJLyogQXNzZXJ0IHRoYXQgQU0gZG9lc24ndCBoYXZlIGFuIGludmFsaWQgY29t YmluYXRpb24gb2YgY2FsbGJhY2tzICovCisJQXNzZXJ0KChyb3V0aW5lLT5hbWdldGJhdGNoICE9 IE5VTEwpID09IChyb3V0aW5lLT5hbXVuZ3VhcmRiYXRjaCAhPSBOVUxMKSk7CisJQXNzZXJ0KHJv dXRpbmUtPmFta2lsbGl0ZW1zYmF0Y2ggPT0gTlVMTCB8fCByb3V0aW5lLT5hbWdldGJhdGNoICE9 IE5VTEwpOworCUFzc2VydChyb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwgfHwgcm91dGluZS0+ YW1wb3NyZXNldCA9PSBOVUxMKTsKKwogCXJldHVybiByb3V0aW5lOwogfQogCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9nZW5hbS5jCmluZGV4IDE1MTI0MzhkNi4uNTQwNDJmNmY1IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvZ2VuYW0uYwpAQCAtODksNiArODksOCBAQCBSZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlv biBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJc2Nhbi0+eHNfc25h cHNob3QgPSBJbnZhbGlkU25hcHNob3Q7CS8qIGNhbGxlciBtdXN0IGluaXRpYWxpemUgdGhpcyAq LwogCXNjYW4tPm51bWJlck9mS2V5cyA9IG5rZXlzOwogCXNjYW4tPm51bWJlck9mT3JkZXJCeXMg PSBub3JkZXJieXM7CisJc2Nhbi0+dXNlYmF0Y2hyaW5nID0gZmFsc2U7IC8qIHNldCBsYXRlciBm b3IgYW1nZXRiYXRjaCBjYWxsZXJzICovCisJbWVtc2V0KCZzY2FuLT5iYXRjaGNhY2hlLCAwLCBz aXplb2Yoc2Nhbi0+YmF0Y2hjYWNoZSkpOwogCiAJLyoKIAkgKiBXZSBhbGxvY2F0ZSBrZXkgd29y a3NwYWNlIGhlcmUsIGJ1dCBpdCB3b24ndCBnZXQgZmlsbGVkIHVudGlsIGFtcmVzY2FuLgpAQCAt MTI4LDYgKzEzMCwxMSBAQCBSZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0 aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAKIAlzY2FuLT54c19nZXRuZXh0X3Nsb3Qg PSBOVUxMOwogCisJc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3N0YXRpYyA9IDA7CisJc2Nhbi0+ YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSA9IDA7CisJc2Nhbi0+YmF0Y2hfdGFibGVfb3BhcXVlX3Np emUgPSAwOworCXNjYW4tPmJhdGNoX2Jhc2Vfb2Zmc2V0ID0gMDsKKwogCXNjYW4tPnhzX25hbWVf Y3N0cmluZ19hdHRudW1zID0gTlVMTDsKIAlzY2FuLT54c19uYW1lX2NzdHJpbmdfY291bnQgPSAw OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwppbmRleCBhYTBkNGIxNDMuLmMzZThlNTRm YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCkBAIC0xMywxOCArMTMsMTUgQEAKICAq IElOVEVSRkFDRSBST1VUSU5FUwogICoJCWluZGV4X29wZW4JCS0gb3BlbiBhbiBpbmRleCByZWxh dGlvbiBieSByZWxhdGlvbiBPSUQKICAqCQlpbmRleF9jbG9zZQkJLSBjbG9zZSBhbiBpbmRleCBy ZWxhdGlvbgotICoJCWluZGV4X2JlZ2luc2NhbiAtIHN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRleCB3 aXRoIGFtZ2V0dHVwbGUKKyAqCQlpbmRleF9iZWdpbnNjYW4gLSBzdGFydCBhIHNjYW4gb2YgYW4g aW5kZXggd2l0aCBhbWdldGJhdGNoL2FtZ2V0dHVwbGUKICAqCQlpbmRleF9iZWdpbnNjYW5fYml0 bWFwIC0gc3RhcnQgYSBzY2FuIG9mIGFuIGluZGV4IHdpdGggYW1nZXRiaXRtYXAKICAqCQlpbmRl eF9yZXNjYW4JLSByZXN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRleAogICoJCWluZGV4X2VuZHNjYW4J LSBlbmQgYSBzY2FuCiAgKgkJaW5kZXhfaW5zZXJ0CS0gaW5zZXJ0IGFuIGluZGV4IHR1cGxlIGlu dG8gYSByZWxhdGlvbgotICoJCWluZGV4X21hcmtwb3MJLSBtYXJrIGEgc2NhbiBwb3NpdGlvbgot ICoJCWluZGV4X3Jlc3RycG9zCS0gcmVzdG9yZSBhIHNjYW4gcG9zaXRpb24KICAqCQlpbmRleF9w YXJhbGxlbHNjYW5fZXN0aW1hdGUgLSBlc3RpbWF0ZSBzaGFyZWQgbWVtb3J5IGZvciBwYXJhbGxl bCBzY2FuCiAgKgkJaW5kZXhfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUgLSBpbml0aWFsaXplIHBh cmFsbGVsIHNjYW4KICAqCQlpbmRleF9wYXJhbGxlbHJlc2NhbiAgLSAocmUpc3RhcnQgYSBwYXJh bGxlbCBzY2FuIG9mIGFuIGluZGV4CiAgKgkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsIC0gam9p biBwYXJhbGxlbCBpbmRleCBzY2FuCi0gKgkJaW5kZXhfZ2V0bmV4dF90aWQJLSBhbWdldHR1cGxl IHRhYmxlIEFNIGhlbHBlciByb3V0aW5lCiAgKgkJaW5kZXhfZ2V0Yml0bWFwIC0gZ2V0IGFsbCB0 dXBsZXMgZnJvbSBhIHNjYW4KICAqCQlpbmRleF9idWxrX2RlbGV0ZQktIGJ1bGsgZGVsZXRpb24g b2YgaW5kZXggdHVwbGVzCiAgKgkJaW5kZXhfdmFjdXVtX2NsZWFudXAJLSBwb3N0LWRlbGV0aW9u IGNsZWFudXAgb2YgYW4gaW5kZXgKQEAgLTQyLDYgKzM5LDcgQEAKICNpbmNsdWRlICJwb3N0Z3Jl cy5oIgogCiAjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAiYWNjZXNzL2luZGV4 YmF0Y2guaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsYXRpb24uaCIKICNpbmNsdWRlICJhY2Nlc3Mv cmVsb3B0aW9ucy5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCkBAIC0yNTQsNyArMjUy LDcgQEAgaW5kZXhfaW5zZXJ0X2NsZWFudXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIH0KIAog LyoKLSAqIGluZGV4X2JlZ2luc2NhbiAtIHN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRleCB3aXRoIGFt Z2V0dHVwbGUKKyAqIGluZGV4X2JlZ2luc2NhbiAtIHN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRleCB3 aXRoIGFtZ2V0YmF0Y2gvYW1nZXR0dXBsZQogICoKICAqIENhbGxlciBtdXN0IGJlIGhvbGRpbmcg c3VpdGFibGUgbG9ja3Mgb24gdGhlIGhlYXAgYW5kIHRoZSBpbmRleC4KICAqLwpAQCAtMzM5LDYg KzMzNyw3IEBAIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9u LCBSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJc2Nhbi0+eHNfdGVtcF9zbmFwID0gdGVtcF9zbmFw OwogCiAJc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKKwlzY2FuLT5NVkNDU2NhbiA9IElz TVZDQ0xpa2VTbmFwc2hvdChzbmFwc2hvdCk7CiAJc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1l bnQ7CiAKIAkvKgpAQCAtMzUwLDYgKzM0OSw3IEBAIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChS ZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCXNjYW4tPmhl YXBSZWxhdGlvbiA9IGhlYXBSZWxhdGlvbjsKIAkJc2Nhbi0+eHNfd2FudF9pdHVwID0gaW5kZXhf b25seV9zY2FuOwogCQlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0gZmFsc2U7CisJCXNjYW4tPmJh dGNoSW1tZWRpYXRlVW5ndWFyZCA9IChzY2FuLT5NVkNDU2NhbiAmJiAhaW5kZXhfb25seV9zY2Fu KTsKIAogCQkvKgogCQkgKiBGb3IgaW5kZXgtb25seSBzY2FucywgZmluZCBhbnkgIm5hbWUiIGNv bHVtbnMgc3RvcmVkIGFzIGNzdHJpbmdzCkBAIC0zOTQsNiArMzk0LDE0IEBAIGluZGV4X2JlZ2lu c2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBSZWxhdGlvbiBoZWFwUmVsYXRp b24sCiAJCUFzc2VydChzY2FuLT54c19nZXRuZXh0X3Nsb3QgIT0gTlVMTCAmJiBzY2FuLT54c190 YWJsZV9vcGFxdWUgIT0gTlVMTCk7CiAJfQogCisJLyoKKwkgKiBCaXRtYXAgaW5kZXggc2NhbnMg c2hvdWxkIG5ldmVyIHVzZSBhIGJhdGNoIHJpbmcgYnVmZmVyICh0aG91Z2ggY2FuIHVzZQorCSAq IHRoZSBzY2FuJ3MgYmF0Y2ggY2FjaGUpLiAgUGxhaW4gaW5kZXggc2NhbnMgKGFuZCBpbmRleC1v bmx5IHNjYW5zKQorCSAqIHNob3VsZCBvbmx5IHVzZSBhIGJhdGNoIHJpbmcgYnVmZmVyIHdpdGgg YW4gYW1nZXRiYXRjaCBpbmRleCBBTS4KKwkgKi8KKwlBc3NlcnQoIXNjYW4tPnhzX3RhYmxlX29w YXF1ZSA/ICFzY2FuLT51c2ViYXRjaHJpbmcgOgorCQkgICAoaW5kZXhSZWxhdGlvbi0+cmRfaW5k YW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCkgPT0gc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKKwogCXJldHVy biBzY2FuOwogfQogCkBAIC00MjAsOSArNDI4LDkgQEAgaW5kZXhfcmVzY2FuKEluZGV4U2NhbkRl c2Mgc2NhbiwKIAlBc3NlcnQobmtleXMgPT0gc2Nhbi0+bnVtYmVyT2ZLZXlzKTsKIAlBc3NlcnQo bm9yZGVyYnlzID09IHNjYW4tPm51bWJlck9mT3JkZXJCeXMpOwogCi0JLyogcmVzZXQgdGFibGUg QU0gc3RhdGUgZm9yIHJlc2NhbiAqLworCS8qIHRlbGwgdGhlIHRhYmxlIEFNIHRoYXQgdGhlcmUn cyB0byBiZSBhIHJlc2NhbiAqLwogCWlmIChzY2FuLT54c190YWJsZV9vcGFxdWUpCi0JCXRhYmxl X2luZGV4X3NjYW5fcmVzZXQoc2Nhbik7CisJCXRhYmxlX2luZGV4X3NjYW5fcmVzY2FuKHNjYW4p OwogCiAJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5ICovCiAJ c2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOwpAQCAtNDQxLDcgKzQ0OSwyMSBAQCBpbmRl eF9lbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlTQ0FOX0NIRUNLUzsKIAlDSEVDS19TQ0FO X1BST0NFRFVSRShhbWVuZHNjYW4pOwogCi0JLyogUmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVm ZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8KKwkvKgorCSAqIGFtZ2V0Yml0bWFwIHNj YW5zIG9mIGFuIGluZGV4IEFNIHRoYXQgc3VwcG9ydHMgYW1nZXRiYXRjaCBtYWtlIGxpbWl0ZWQK KwkgKiB1c2Ugb2YgdGhlIHNjYW4ncyBiYXRjaCBjYWNoZS4gIENoZWNrIGZvciB0aGF0LgorCSAq LworCWlmICghc2Nhbi0+dXNlYmF0Y2hyaW5nICYmIHNjYW4tPmJhdGNoY2FjaGVbMF0gIT0gTlVM TCkKKwl7CisJCUFzc2VydChzY2FuLT54c190YWJsZV9vcGFxdWUgPT0gTlVMTCk7CisJCUFzc2Vy dChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKKwkJ cGZyZWUoaW5kZXhfc2Nhbl9iYXRjaF9iYXNlKHNjYW4sIHNjYW4tPmJhdGNoY2FjaGVbMF0pKTsK Kwl9CisKKwkvKgorCSAqIFJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zIGFuZCBi YXRjaCByaW5nIGJ1ZmZlcikgaGVsZCBieQorCSAqIHRhYmxlIEFNIGZvciBpbmRleCBzY2FuCisJ ICovCiAJaWYgKHNjYW4tPnhzX3RhYmxlX29wYXF1ZSkKIAl7CiAJCXRhYmxlX2luZGV4X3NjYW5f ZW5kKHNjYW4pOwpAQCAtNDYxLDUyICs0ODMsNiBAQCBpbmRleF9lbmRzY2FuKEluZGV4U2NhbkRl c2Mgc2NhbikKIAlJbmRleFNjYW5FbmQoc2Nhbik7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0K LSAqCQlpbmRleF9tYXJrcG9zICAtIG1hcmsgYSBzY2FuIHBvc2l0aW9uCi0gKiAtLS0tLS0tLS0t LS0tLS0tCi0gKi8KLXZvaWQKLWluZGV4X21hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQotewot CVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtbWFya3Bvcyk7Ci0KLQlzY2Fu LT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1tYXJrcG9zKHNjYW4pOwotfQotCi0vKiAtLS0t LS0tLS0tLS0tLS0tCi0gKgkJaW5kZXhfcmVzdHJwb3MJLSByZXN0b3JlIGEgc2NhbiBwb3NpdGlv bgotICoKLSAqIE5PVEU6IHRoaXMgb25seSByZXN0b3JlcyB0aGUgaW50ZXJuYWwgc2NhbiBzdGF0 ZSBvZiB0aGUgaW5kZXggQU0uICBTZWUKLSAqIGNvbW1lbnRzIGZvciBFeGVjUmVzdHJQb3MoKS4K LSAqCi0gKiBOT1RFOiBGb3IgaGVhcCwgaW4gdGhlIHByZXNlbmNlIG9mIEhPVCBjaGFpbnMsIG1h cmsvcmVzdG9yZSBvbmx5IHdvcmtzCi0gKiBjb3JyZWN0bHkgaWYgdGhlIHNjYW4ncyBzbmFwc2hv dCBpcyBNVkNDLXNhZmU7IHRoYXQgZW5zdXJlcyB0aGF0IHRoZXJlJ3MgYXQKLSAqIG1vc3Qgb25l IHJldHVybmFibGUgdHVwbGUgaW4gZWFjaCBIT1QgY2hhaW4sIGFuZCBzbyByZXN0b3JpbmcgdGhl IHByaW9yCi0gKiBzdGF0ZSBhdCB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIGluZGV4IEFNIGlzIHN1 ZmZpY2llbnQuICBTaW5jZSB0aGUgb25seQotICogY3VycmVudCB1c2VyIG9mIG1hcmsvcmVzdG9y ZSBmdW5jdGlvbmFsaXR5IGlzIG5vZGVNZXJnZWpvaW4uYywgdGhpcwotICogZWZmZWN0aXZlbHkg bWVhbnMgdGhhdCBtZXJnZS1qb2luIHBsYW5zIG9ubHkgd29yayBmb3IgTVZDQyBzbmFwc2hvdHMu ICBUaGlzCi0gKiBjb3VsZCBiZSBmaXhlZCBpZiBuZWNlc3NhcnksIGJ1dCBmb3Igbm93IGl0IHNl ZW1zIHVuaW1wb3J0YW50LgotICogLS0tLS0tLS0tLS0tLS0tLQotICovCi12b2lkCi1pbmRleF9y ZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCi17Ci0JQXNzZXJ0KElzTVZDQ0xpa2VTbmFwc2hv dChzY2FuLT54c19zbmFwc2hvdCkpOwotCi0JU0NBTl9DSEVDS1M7Ci0JQ0hFQ0tfU0NBTl9QUk9D RURVUkUoYW1yZXN0cnBvcyk7Ci0KLQkvKiByZXNldCB0YWJsZSBBTSBzdGF0ZSBmb3IgcmVzdG9y aW5nIHRoZSBtYXJrZWQgcG9zaXRpb24gKi8KLQlpZiAoc2Nhbi0+eHNfdGFibGVfb3BhcXVlKQot CQl0YWJsZV9pbmRleF9zY2FuX3Jlc2V0KHNjYW4pOwotCi0Jc2Nhbi0+a2lsbF9wcmlvcl90dXBs ZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5ICovCi0Jc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZh bHNlOwotCi0Jc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcmVzdHJwb3Moc2Nhbik7 Ci19Ci0KIC8qCiAgKiBFc3RpbWF0ZXMgdGhlIHNoYXJlZCBtZW1vcnkgbmVlZGVkIGZvciBwYXJh bGxlbCBzY2FuLCBpbmNsdWRpbmcgYW55CiAgKiBBTS1zcGVjaWZpYyBwYXJhbGxlbCBzY2FuIHN0 YXRlLgpAQCAtNTg0LDkgKzU2MCw5IEBAIGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRl c2Mgc2NhbikKIHsKIAlTQ0FOX0NIRUNLUzsKIAotCS8qIHJlc2V0IHRhYmxlIEFNIHN0YXRlIGZv ciByZXNjYW4gKi8KKwkvKiB0ZWxsIHRoZSB0YWJsZSBBTSB0aGF0IHRoZXJlJ3MgdG8gYmUgYSBy ZXNjYW4gKi8KIAlpZiAoc2Nhbi0+eHNfdGFibGVfb3BhcXVlKQotCQl0YWJsZV9pbmRleF9zY2Fu X3Jlc2V0KHNjYW4pOworCQl0YWJsZV9pbmRleF9zY2FuX3Jlc2NhbihzY2FuKTsKIAogCS8qIGFt cGFyYWxsZWxyZXNjYW4gaXMgb3B0aW9uYWw7IGFzc3VtZSBuby1vcCBpZiBub3QgcHJvdmlkZWQg YnkgQU0gKi8KIAlpZiAoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcGFyYWxsZWxy ZXNjYW4gIT0gTlVMTCkKQEAgLTYyMiw1NiArNTk4LDYgQEAgaW5kZXhfYmVnaW5zY2FuX3BhcmFs bGVsKFJlbGF0aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLAogCQkJCQkJCQkJaW5kZXhf b25seV9zY2FuLCB0cnVlLCBmbGFncyk7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0KLSAqIGlu ZGV4X2dldG5leHRfdGlkIC0gYW1nZXR0dXBsZSBpbnRlcmZhY2UKLSAqCi0gKiBUaGUgcmVzdWx0 IGlzIHRoZSBuZXh0IFRJRCBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMsCi0gKiBvciBOVUxMIGlm IG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIGV4aXN0LgotICoKLSAqIFRoaXMgc2hvdWxkIG9ubHkg YmUgY2FsbGVkIGJ5IHRhYmxlIEFNIGFtZ2V0dHVwbGUtYmFzZWQgaW5kZXggc2NhbgotICogY2Fs bGJhY2tzLgotICogLS0tLS0tLS0tLS0tLS0tLQotICovCi1JdGVtUG9pbnRlcgotaW5kZXhfZ2V0 bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKLXsK LQlib29sCQlmb3VuZDsKLQotCVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFt Z2V0dHVwbGUpOwotCi0JLyogWFhYOiB3ZSBzaG91bGQgYXNzZXJ0IHRoYXQgYSBzbmFwc2hvdCBp cyBwdXNoZWQgb3IgcmVnaXN0ZXJlZCAqLwotCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChS ZWNlbnRYbWluKSk7Ci0KLQkvKgotCSAqIFRoZSBBTSdzIGFtZ2V0dHVwbGUgcHJvYyBmaW5kcyB0 aGUgbmV4dCBpbmRleCBlbnRyeSBtYXRjaGluZyB0aGUgc2NhbgotCSAqIGtleXMsIGFuZCBwdXRz IHRoZSBUSUQgaW50byBzY2FuLT54c19oZWFwdGlkLiAgSXQgc2hvdWxkIGFsc28gc2V0Ci0JICog c2Nhbi0+eHNfcmVjaGVjayBhbmQgcG9zc2libHkgc2Nhbi0+eHNfaXR1cC9zY2FuLT54c19oaXR1 cCwgdGhvdWdoIHdlCi0JICogcGF5IG5vIGF0dGVudGlvbiB0byB0aG9zZSBmaWVsZHMgaGVyZS4K LQkgKi8KLQlmb3VuZCA9IHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldHR1cGxl KHNjYW4sIGRpcmVjdGlvbik7Ci0KLQkvKiBSZXNldCBraWxsIGZsYWcgaW1tZWRpYXRlbHkgZm9y IHNhZmV0eSAqLwotCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsKLQlzY2FuLT54c19o ZWFwX2NvbnRpbnVlID0gZmFsc2U7Ci0KLQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmll cywgd2UncmUgZG9uZSAqLwotCWlmICghZm91bmQpCi0JewotCQkvKiByZXNldCB0YWJsZSBBTSBz dGF0ZSAqLwotCQlpZiAoc2Nhbi0+eHNfdGFibGVfb3BhcXVlKQotCQkJdGFibGVfaW5kZXhfc2Nh bl9yZXNldChzY2FuKTsKLQotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JQXNzZXJ0KEl0ZW1Qb2ludGVy SXNWYWxpZCgmc2Nhbi0+eHNfaGVhcHRpZCkpOwotCi0JcGdzdGF0X2NvdW50X2luZGV4X3R1cGxl cyhzY2FuLT5pbmRleFJlbGF0aW9uLCAxKTsKLQotCS8qIFJldHVybiB0aGUgVElEIG9mIHRoZSB0 dXBsZSB3ZSBmb3VuZC4gKi8KLQlyZXR1cm4gJnNjYW4tPnhzX2hlYXB0aWQ7Ci19Ci0KIC8qIC0t LS0tLS0tLS0tLS0tLS0KICAqCQlpbmRleF9nZXRiaXRtYXAgLSBnZXQgYWxsIHR1cGxlcyBhdCBv bmNlIGZyb20gYW4gaW5kZXggc2NhbgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9pbmRleC9pbmRleGJhdGNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRj aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uZTU4ZTA5ODk3Ci0tLSAv ZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpAQCAt MCwwICsxLDc5OCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogaW5kZXhiYXRjaC5jCisg KgkgIEJhdGNoLWJhc2VkIGluZGV4IHNjYW4gaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoZSBhbWdldGJh dGNoIGludGVyZmFjZS4KKyAqCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgY29yZSBpbmZy YXN0cnVjdHVyZSBmb3IgYmF0Y2gtYmFzZWQgaW5kZXggc2NhbnMsCisgKiB3aGljaCBhbGxvdyBp bmRleCBBTXMgdG8gcmV0dXJuIG11bHRpcGxlIG1hdGNoaW5nIFRJRHMgcGVyIHBhZ2UgaW4gYSBz aW5nbGUKKyAqIGNhbGwuICBUaGUgYmF0Y2ggcmluZyBidWZmZXIgaXMgb3duZWQgYnkgdGhlIHRh YmxlIEFNLgorICoKKyAqIFRoZSByaW5nIGJ1ZmZlciBsb2FkcyBiYXRjaGVzIGluIGluZGV4IGtl eSBzcGFjZS9pbmRleCBzY2FuIG9yZGVyLgorICoKKyAqIE1vc3QgZnVuY3Rpb25zIGhlcmUgYXJl IHRhYmxlIEFNIHV0aWxpdGllcyAodGFibGVhbV91dGlsXyopLCBjYWxsZWQgYnkKKyAqIHRhYmxl IEFNcyBkdXJpbmcgYW1nZXRiYXRjaCBpbmRleCBzY2Fucy4gIFRoZXNlIG1hbmFnZSB0aGUgYmF0 Y2ggcmluZworICogYnVmZmVyJ3MgbGlmZWN5Y2xlIGFuZCBwb3NpdGlvbmFsIHN0YXRlLCBhbmQg aGVscCB3aXRoIGNlcnRhaW4gYXNwZWN0cyBvZgorICogcmVzb3VyY2UgbWFuYWdlbWVudC4gIFRo ZSB0YWJsZSBBTSB1c2VzIHNjYW5Qb3MgdG8gcmV0dXJuIGl0ZW1zIGZyb20KKyAqIGJhdGNoZXMg cmV0dXJuZWQgYnkgYW1nZXRiYXRjaC4KKyAqCisgKiBUaGVyZSBhcmUgYWxzbyBzb21lIGluZGV4 IEFNIHV0aWxpdGllcyAoaW5kZXhhbV91dGlsXyopLCBjYWxsZWQgYnkgaW5kZXgKKyAqIEFNcyB0 aGF0IGltcGxlbWVudCB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UsIHRvIGhlbHAgbWFuYWdlIHJl c291cmNlcyBsaWtlCisgKiBtZW1vcnksIGxvY2tzLCBhbmQgYnVmZmVyIHBpbnMuICBJbmRleCBB TXMgZnJlZSBhbmQgdW5sb2NrIGJhdGNoZXMgYXMKKyAqIGRlc2NyaWJlZCBpbiBpbmRleGFtLnNn bWwuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQs IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVO VElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCisg KgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNp bmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKKyNpbmNsdWRlICJhY2Nlc3MvaW5kZXhiYXRjaC5oIgor I2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCisjaW5jbHVkZSAiY29tbW9uL2ludC5oIgorI2lu Y2x1ZGUgImxpYi9xdW5pcXVlLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtZGVidWcuaCIKKworc3Rh dGljIHZvaWQgYmF0Y2hfY2FjaGVfbWFya191bmRlZmluZWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleFNjYW5CYXRjaCBiYXRjaCk7CitzdGF0aWMgdm9pZCByZWxlYXNlX2FuZF91bmd1YXJkX2Jh dGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJCQkg IGJvb2wgYWxsb3dfY2FjaGUpOworc3RhdGljIGlubGluZSBib29sIGJhdGNoX2NhY2hlX3N0b3Jl KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworc3RhdGljIGludAli YXRjaF9jb21wYXJlX2ludChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIpOworCisvKgor ICogUmV0dXJuIHRoZSBzaXplIG9mIHRoZSBzaW5nbGUgYWxsb2NhdGlvbiBiYWNraW5nIG9uZSBv ZiB0aGlzIHNjYW4ncyBiYXRjaGVzCisgKiBmb3IgYXNzZXJ0aW9ucy9jdXN0b20gVmFsZ3JpbmQg YmF0Y2ggaW5zdHJ1bWVudGF0aW9uCisgKi8KKyNpZiBkZWZpbmVkKFVTRV9WQUxHUklORCkgfHwg ZGVmaW5lZChVU0VfQVNTRVJUX0NIRUNLSU5HKQorc3RhdGljIHNpemVfdAorYmF0Y2hfYWxsb2Nf c2l6ZShJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJc2l6ZV90CQlhbGxvY3N6OworCisJQXNzZXJ0 KHNjYW4tPmJhdGNoX2Jhc2Vfb2Zmc2V0ID4gMCk7CisKKwlhbGxvY3N6ID0gc2Nhbi0+YmF0Y2hf YmFzZV9vZmZzZXQgKworCQlNQVhBTElHTihvZmZzZXRvZihJbmRleFNjYW5CYXRjaERhdGEsIGl0 ZW1zKSArCisJCQkJIHNpemVvZihCYXRjaE1hdGNoaW5nSXRlbSkgKiBzY2FuLT5tYXhpdGVtc2Jh dGNoKTsKKwlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCQlhbGxvY3N6ICs9IHNjYW4tPmJhdGNo X3R1cGxlc193b3Jrc3BhY2U7CisKKwlyZXR1cm4gYWxsb2NzejsKK30KKyNlbmRpZgorCisvKgor ICogTWFrZSBWYWxncmluZCB0cmVhdCBhIGJhdGNoJ3MgZW50aXJlIGFsbG9jYXRpb24gYXMgdW5k ZWZpbmVkIG1lbW9yeQorICovCitzdGF0aWMgdm9pZAorYmF0Y2hfY2FjaGVfbWFya191bmRlZmlu ZWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKyNpZmRlZiBV U0VfVkFMR1JJTkQKKwljaGFyCSAgICpjdXJyVHVwbGVzID0gYmF0Y2gtPmN1cnJUdXBsZXM7CisJ aW50CQkgICAqZGVhZEl0ZW1zID0gYmF0Y2gtPmRlYWRJdGVtczsKKworCVZBTEdSSU5EX01BS0Vf TUVNX1VOREVGSU5FRChpbmRleF9zY2FuX2JhdGNoX2Jhc2Uoc2NhbiwgYmF0Y2gpLAorCQkJCQkJ CQliYXRjaF9hbGxvY19zaXplKHNjYW4pKTsKKwlpZiAoZGVhZEl0ZW1zKQorCQlWQUxHUklORF9N QUtFX01FTV9VTkRFRklORUQoZGVhZEl0ZW1zLAorCQkJCQkJCQkJc2l6ZW9mKGludCkgKiBzY2Fu LT5tYXhpdGVtc2JhdGNoKTsKKworCS8qIHByZXNlcnZlIHBvaW50ZXJzIHRvIG5vdy11bmRlZmlu ZWQgY3VyclR1cGxlcyBhbmQgZGVhZEl0ZW1zIGJ1ZmZlcnMgKi8KKwliYXRjaC0+Y3VyclR1cGxl cyA9IGN1cnJUdXBsZXM7CisJYmF0Y2gtPmRlYWRJdGVtcyA9IGRlYWRJdGVtczsKKyNlbmRpZgor fQorCisvKgorICogUmVzZXQgcmluZyBidWZmZXIgYW5kIHJlbGF0ZWQgcG9zaXRpb25hbCBzdGF0 ZSB1c2VkIGR1cmluZyBhbiBhbWdldGJhdGNoCisgKiBpbmRleCBzY2FuLgorICoKKyAqIFRhYmxl IEFNIGNhbGxlciBzaG91bGQgcGFzcyBlbmRzY2FuPWZhbHNlLCB3aGljaCBtYWtlcyB1cyBjYWNo ZSBhbnkgZnJlZWQKKyAqIGJhdGNoZXMgZm9yIHJldXNlIG9uIHJlc2Nhbi4gIFdlIHJlbGVhc2Ug c2NhbidzIG1hcmtCYXRjaCBoZXJlIGVpdGhlciB3YXkuCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRp bF9iYXRjaHNjYW5fcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGVuZHNjYW4pCit7CisJ QmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUlu ZGV4U2NhbkJhdGNoIG1hcmtCYXRjaCA9IGJhdGNocmluZ2J1Zi0+bWFya0JhdGNoOworCWJvb2wJ CW1hcmtCYXRjaEZyZWVkID0gZmFsc2U7CisKKwliYXRjaHJpbmdidWYtPnNjYW5Qb3MudmFsaWQg PSBmYWxzZTsKKwliYXRjaHJpbmdidWYtPm1hcmtQb3MudmFsaWQgPSBmYWxzZTsKKworCWZvciAo dWludDggaSA9IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoOyBpICE9IGJhdGNocmluZ2J1Zi0+bmV4 dEJhdGNoOyBpKyspCisJeworCQlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IGluZGV4X3NjYW5fYmF0 Y2goc2NhbiwgaSk7CisKKwkJaWYgKGJhdGNoID09IG1hcmtCYXRjaCkKKwkJCW1hcmtCYXRjaEZy ZWVkID0gdHJ1ZTsKKworCQlyZWxlYXNlX2FuZF91bmd1YXJkX2JhdGNoKHNjYW4sIGJhdGNoLCAh ZW5kc2Nhbik7CisJfQorCisJaWYgKCFtYXJrQmF0Y2hGcmVlZCAmJiB1bmxpa2VseShtYXJrQmF0 Y2gpKQorCQlyZWxlYXNlX2FuZF91bmd1YXJkX2JhdGNoKHNjYW4sIG1hcmtCYXRjaCwgIWVuZHNj YW4pOworCisJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPSAwOworCWJhdGNocmluZ2J1Zi0+bmV4 dEJhdGNoID0gMDsKKwliYXRjaHJpbmdidWYtPm1hcmtCYXRjaCA9IE5VTEw7Cit9CisKKy8qCisg KiBGcmVlIHJlc291cmNlcyBhdCBlbmQgb2YgYSBiYXRjaCBpbmRleCBzY2FuLgorICoKKyAqIENh bGxlZCBieSB0YWJsZSBBTSB3aGVuIGFuIGluZGV4IHNjYW4gaXMgZW5kaW5nLCByaWdodCBiZWZv cmUgdGhlIG93bmluZworICogc2NhbiBkZXNjcmlwdG9yIGdvZXMgYXdheS4gIENsZWFucyB1cCBh bGwgYmF0Y2ggcmVsYXRlZCByZXNvdXJjZXMuCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9iYXRj aHNjYW5fZW5kKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwkvKiBGcmVlIGFsbCByZW1haW5pbmcg bG9hZGVkIGJhdGNoZXMgKGV2ZW4gbWFya0JhdGNoKSwgYnlwYXNzaW5nIGNhY2hlICovCisJdGFi bGVhbV91dGlsX2JhdGNoc2Nhbl9yZXNldChzY2FuLCB0cnVlKTsKKworCWZvciAoaW50IGkgPSAw OyBpIDwgSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTOyBpKyspCisJeworCQlJbmRleFNjYW5CYXRj aCBjYWNoZWQgPSBzY2FuLT5iYXRjaGNhY2hlW2ldOworCisJCWlmIChjYWNoZWQgPT0gTlVMTCkK KwkJCWNvbnRpbnVlOworCisJCWlmIChjYWNoZWQtPmRlYWRJdGVtcykKKwkJCXBmcmVlKGNhY2hl ZC0+ZGVhZEl0ZW1zKTsKKwkJcGZyZWUoaW5kZXhfc2Nhbl9iYXRjaF9iYXNlKHNjYW4sIGNhY2hl ZCkpOworCX0KK30KKworLyoKKyAqIFNldCBhIG1hcmsgZnJvbSBzY2FuUG9zIHBvc2l0aW9uCisg KgorICogQ2FsbGVkIGZyb20gdGhlIHRhYmxlIEFNJ3MgaW5kZXhfc2Nhbl9tYXJrcG9zIGNhbGxi YWNrLiAgU2F2ZXMgdGhlIGN1cnJlbnQKKyAqIHNjYW4gcG9zaXRpb24gYW5kIGFzc29jaWF0ZWQg YmF0Y2ggc28gdGhhdCB0aGUgc2NhbiBjYW4gYmUgcmVzdG9yZWQgdG8gdGhpcworICogcG9pbnQg bGF0ZXIsIHZpYSB0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zLiAgVGhlIG1hcmtl ZCBiYXRjaCBpcworICogcmV0YWluZWQgYW5kIG5vdCBmcmVlZCB1bnRpbCBhIG5ldyBtYXJrIGlz IHNldCBvciB0aGUgc2NhbiBlbmRzIChvciB1bnRpbAorICogdGhlIG1hcmsgaXMgcmVzdG9yZWQp LgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX21hcmtfcG9zKEluZGV4U2NhbkRl c2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRj aHJpbmdidWY7CisJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZzY2FuLT5iYXRjaHJpbmdi dWYuc2NhblBvczsKKwlCYXRjaFJpbmdJdGVtUG9zICptYXJrUG9zIFBHX1VTRURfRk9SX0FTU0VS VFNfT05MWSA9ICZiYXRjaHJpbmdidWYtPm1hcmtQb3M7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJh dGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBzY2FuUG9zLT5iYXRjaCk7CisJSW5kZXhTY2Fu QmF0Y2ggbWFya0JhdGNoID0gYmF0Y2hyaW5nYnVmLT5tYXJrQmF0Y2g7CisKKwlBc3NlcnQoc2Nh bi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtY2FubWFya3Bvcyk7CisJQXNzZXJ0KHNjYW4t Pk1WQ0NTY2FuKTsKKwlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+ YmF0Y2gpOwkvKiBzZWUgYmVsb3cgKi8KKworCS8qCisJICogQSBtYXJrIG11c3QgcG9pbnQgYXQg YSByZWFsIG1hdGNoaW5nIGl0ZW0uICBXZSByZXF1aXJlIHRoZSBjb3JlCisJICogZXhlY3V0b3Ig dG8gb25seSB0YWtlIGEgbWFyayBqdXN0IGFmdGVyIGEgc3VjY2Vzc2Z1bCB0dXBsZSBmZXRjaC4K KwkgKi8KKwlBc3NlcnQoc2NhblBvcy0+dmFsaWQpOworCUFzc2VydChzY2FuUG9zLT5pdGVtID49 IHNjYW5CYXRjaC0+Zmlyc3RJdGVtICYmCisJCSAgIHNjYW5Qb3MtPml0ZW0gPD0gc2NhbkJhdGNo LT5sYXN0SXRlbSk7CisKKwkvKiBGcmVlIHRoZSBwcmV2aW91cyBtYXJrIGJhdGNoPyAqLworCWlm ICghbWFya0JhdGNoIHx8IG1hcmtCYXRjaCA9PSBzY2FuQmF0Y2gpCisJeworCQkvKiBObyBvbGRl ciBtYXJrQmF0Y2ggdGhhdCBuZWVkcyB0byBiZSBmcmVlZCBub3cgKi8KKwl9CisJZWxzZQorCXsK KwkJLyoKKwkJICogSGF2ZSBhIG1hcmtCYXRjaCB0aGF0IGlzbid0IGluIGJhdGNocmluZ2J1Zjsg aXQgd2FzIHNhdmVkIHdoZW4KKwkJICogdGFibGVhbV91dGlsX3JlbGVhc2VfYmF0Y2ggd2FzIGFz a2VkIHRvIHJlbGVhc2UgaXQgZWFybGllciBvbi4KKwkJICoKKwkJICogTm90ZTogdGhpcyBhc3N1 bWVzIHRoYXQgImJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Qb3MtPmJhdGNoIgorCQkg KiBpcyBpbnZhcmlhbnQuICBJbiBvdGhlciB3b3JkcywgaXQgYXNzdW1lcyB0aGF0IHRhYmxlIEFN cyBhbHdheXMKKwkJICogcmVtb3ZlIGFuIG9ic29sZXNjZW50IHNjYW5CYXRjaCBmcm9tIHRoZSBy aW5nIGJ1ZmZlciBhdCB0aGUgcG9pbnQKKwkJICogd2hlcmUgdGhleSBzdGVwIG9mZiBpdHMgdW5k ZXJseWluZyBiYXRjaC4KKwkJICovCisJCUFzc2VydCghbWFya0JhdGNoLT5pc0d1YXJkZWQpOwor CQlBc3NlcnQoIWluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKHNjYW4sIG1hcmtQb3MtPmJhdGNoKSB8 fAorCQkJICAgaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBtYXJrUG9zLT5iYXRjaCkgIT0gbWFya0Jh dGNoKTsKKworCQlyZWxlYXNlX2FuZF91bmd1YXJkX2JhdGNoKHNjYW4sIG1hcmtCYXRjaCwgdHJ1 ZSk7CisJfQorCisJYmF0Y2hyaW5nYnVmLT5tYXJrUG9zID0gKnNjYW5Qb3M7CisJYmF0Y2hyaW5n YnVmLT5tYXJrQmF0Y2ggPSBzY2FuQmF0Y2g7Cit9CisKKy8qCisgKiBSZXN0b3JlIHNjYW5Qb3Mg dG8gdGhlIHByZXZpb3VzbHkgc2F2ZWQgbWFya1BvcyBwb3NpdGlvbi4KKyAqCisgKiBDYWxsZWQg ZnJvbSB0aGUgdGFibGUgQU0ncyBpbmRleF9zY2FuX3Jlc3RycG9zIGNhbGxiYWNrLiAgUmVzdG9y ZXMgdGhlCisgKiBzY2FuIHRvIGEgcG9zaXRpb24gc2F2ZWQgdXNpbmcgdGFibGVhbV91dGlsX2Jh dGNoc2Nhbl9tYXJrX3BvcyBlYXJsaWVyLgorICogVGhlIHNjYW4ncyBtYXJrUG9zIGJlY29tZXMg aXRzIHNjYW5Qb3MuICBUaGUgbWFya2VkIGJhdGNoIGlzIHJlc3RvcmVkIGFzCisgKiB0aGUgY3Vy cmVudCBzY2FuQmF0Y2ggd2hlbiBuZWVkZWQuCisgKgorICogV2UganVzdCBkaXNjYXJkIGFsbCBi YXRjaGVzIChvdGhlciB0aGFuIG1hcmtCYXRjaC9yZXN0b3JlZCBzY2FuQmF0Y2gpLAorICogZXhj ZXB0IHdoZW4gbWFya0JhdGNoIGlzIGFscmVhZHkgdGhlIHNjYW4ncyBjdXJyZW50IHNjYW5CYXRj aC4KKyAqCisgKiBOb3RlOiBUaGlzIHJlbGllcyBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHdlIGFs cmVhZHkgaGF2ZSBhIHZhbGlkIHNjYW5Qb3MuCisgKiBUYWJsZSBBTXMgc2hvdWxkIG9ubHkgY2Fs bCB0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc2V0IGZyb20gd2l0aGluIHRoZWlyCisgKiBzY2Fu J3MgaW5kZXhfc2Nhbl9yZXN0cnBvcyBjYWxsYmFjayB0byBhdm9pZCBicmVha2luZyB0aGlzIGFz c3VtcHRpb24uCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzdG9yZV9wb3Mo SW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0g JnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJnNjYW4t PmJhdGNocmluZ2J1Zi5zY2FuUG9zOworCUJhdGNoUmluZ0l0ZW1Qb3MgKm1hcmtQb3MgPSAmYmF0 Y2hyaW5nYnVmLT5tYXJrUG9zOworCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRjaCA9IGJhdGNocmlu Z2J1Zi0+bWFya0JhdGNoOworCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCA9IGluZGV4X3NjYW5f YmF0Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpOworCisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRp b24tPnJkX2luZGFtLT5hbWNhbm1hcmtwb3MpOworCUFzc2VydChzY2FuLT5NVkNDU2Nhbik7CisJ QXNzZXJ0KHNjYW4tPnhzX3RhYmxlX29wYXF1ZSk7CisKKwkvKgorCSAqIFRoZSBjb3JlIGV4ZWN1 dG9yIG11c3Qgb25seSBhc2sgdXMgdG8gcmVzdG9yZSBhIG1hcmsgd2hlbiBpdCBhbHJlYWR5CisJ ICogaGFkIHVzIHRha2Ugb25lIG9uIGl0cyBiZWhhbGYgYXQgc29tZSBwb2ludCBkdXJpbmcgdGhl IG9uZ29pbmcgc2NhbgorCSAqLworCUFzc2VydChtYXJrUG9zLT52YWxpZCk7CisJQXNzZXJ0KG1h cmtQb3MtPml0ZW0gPj0gbWFya0JhdGNoLT5maXJzdEl0ZW0gJiYKKwkJICAgbWFya1Bvcy0+aXRl bSA8PSBtYXJrQmF0Y2gtPmxhc3RJdGVtKTsKKworCWlmIChzY2FuQmF0Y2ggPT0gbWFya0JhdGNo KQorCXsKKwkJLyogbWFya0JhdGNoIGlzIGFscmVhZHkgc2NhbkJhdGNoOyBuZWVkbid0IGNoYW5n ZSBiYXRjaHJpbmdidWYgKi8KKwkJQXNzZXJ0KHNjYW5Qb3MtPmJhdGNoID09IG1hcmtQb3MtPmJh dGNoKTsKKworCQlzY2FuUG9zLT5pdGVtID0gbWFya1Bvcy0+aXRlbTsKKwkJcmV0dXJuOworCX0K KworCS8qCisJICogQSBiYXRjaCBpcyBhbHdheXMgdW5ndWFyZGVkIGJ5IHRoZSB0aW1lIHRoZSBz Y2FuIG1vdmVzIG9uIHRvIGEgbGF0ZXIKKwkgKiBiYXRjaCwgc28gbWFya0JhdGNoIChub3cgYmVo aW5kIHNjYW5CYXRjaCkgY2Fubm90IHN0aWxsIGJlIGd1YXJkZWQKKwkgKi8KKwlBc3NlcnQoIW1h cmtCYXRjaC0+aXNHdWFyZGVkKTsKKworCS8qCisJICogbWFya0JhdGNoIGlzIGJlaGluZCBzY2Fu QmF0Y2gsIGFuZCBzbyBtdXN0IG5vdCBiZSBzYXZlZCBpbiByaW5nIGJ1ZmZlcgorCSAqIGFueW1v cmUuICBXZSBoYXZlIHRvIGRlYWwgd2l0aCByZXN0b3JpbmcgdGhlIG1hcmsgdGhlIGhhcmQgd2F5 OiBieQorCSAqIGludmFsaWRhdGluZyBhbGwgb3RoZXIgbG9hZGVkIGJhdGNoZXMuICBUaGlzIGlz IHNpbWlsYXIgdG8gdGhlIGNhc2UKKwkgKiB3aGVyZSB0aGUgc2NhbiBkaXJlY3Rpb24gY2hhbmdl cyBhbmQgdGhlIHNjYW4gYWN0dWFsbHkgY3Jvc3NlcworCSAqIGJhdGNoL2luZGV4IHBhZ2UgYm91 bmRhcmllcyAoc2VlIHRhYmxlYW1fdXRpbF9zY2FuYmF0Y2hfZGlyY2hhbmdlKS4KKwkgKgorCSAq IEZpcnN0LCBmcmVlIGFsbCBiYXRjaGVzIHRoYXQgYXJlIHN0aWxsIGluIHRoZSByaW5nIGJ1ZmZl ci4KKwkgKi8KKwlmb3IgKHVpbnQ4IGkgPSBiYXRjaHJpbmdidWYtPmhlYWRCYXRjaDsgaSAhPSBi YXRjaHJpbmdidWYtPm5leHRCYXRjaDsgaSsrKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2ggYmF0Y2gg PSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGkpOworCisJCUFzc2VydChiYXRjaCAhPSBtYXJrQmF0 Y2gpOworCisJCXRhYmxlYW1fdXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4sIGJhdGNoKTsKKwl9CisK KwkvKgorCSAqIE5leHQgImFwcGVuZCIgc3RhbmRhbG9uZSBtYXJrQmF0Y2gsIHdoaWNoIHdpbGwg YmVjb21lIHNjYW5CYXRjaAorCSAqIChzY2FuQmF0Y2ggaXMgYWx3YXlzIHRoZSByaW5nIGJ1ZmZl cidzIGhlYWRCYXRjaCkKKwkgKi8KKwltYXJrUG9zLT5iYXRjaCA9IDA7CisJYmF0Y2hyaW5nYnVm LT5zY2FuUG9zID0gKm1hcmtQb3M7CisJYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2ggPSBiYXRjaHJp bmdidWYtPmhlYWRCYXRjaCA9IG1hcmtQb3MtPmJhdGNoOworCWluZGV4X3NjYW5fYmF0Y2hfYXBw ZW5kKHNjYW4sIG1hcmtCYXRjaCk7CisJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgYmF0 Y2hyaW5nYnVmLT5zY2FuUG9zLmJhdGNoKSA9PSBtYXJrQmF0Y2gpOworCisJLyoKKwkgKiBGaW5h bGx5LCBjYWxsIGFtcG9zcmVzZXQgdG8gbGV0IGluZGV4IEFNIGtub3cgdG8gaW52YWxpZGF0ZSBh bnkgcHJpdmF0ZQorCSAqIHN0YXRlIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFja3MgdGhlIHNjYW4n cyBwcm9ncmVzcworCSAqLworCWlmIChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1w b3NyZXNldCkKKwkJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcG9zcmVzZXQoc2Nh biwgbWFya0JhdGNoKTsKKworCS8qCisJICogTm90ZTogbWFya0JhdGNoLmRlYWRJdGVtc1tdIG1p Z2h0IGFscmVhZHkgY29udGFpbiBkZWFkIGl0ZW1zLCBhbmQgbWlnaHQKKwkgKiB5ZXQgaGF2ZSBt b3JlIGRlYWQgaXRlbXMgc2F2ZWQuICB0YWJsZWFtX3V0aWxfcmVsZWFzZV9iYXRjaCBpcyBwcmVw YXJlZAorCSAqIGZvciB0aGF0LgorCSAqLworfQorCisvKgorICogSGFuZGxlIGNyb3NzLWJhdGNo IGNoYW5nZSBpbiBzY2FuIGRpcmVjdGlvbgorICoKKyAqIENhbGxlZCBieSB0YWJsZSBBTSB3aGVu IGl0cyBzY2FuIGNoYW5nZXMgZGlyZWN0aW9uIGluIGEgd2F5IHRoYXQKKyAqIG5lY2Vzc2l0YXRl cyBiYWNraW5nIHRoZSBzY2FuIHVwIHRvIGFuIGluZGV4IHBhZ2Ugb3JpZ2luYWxseSBhc3NvY2lh dGVkCisgKiB3aXRoIGEgbm93LWZyZWVkIGJhdGNoLgorICoKKyAqIFdoZW4gd2UgcmV0dXJuLCBi YXRjaHJpbmdidWYgd2lsbCBvbmx5IGNvbnRhaW4gb25lIGJhdGNoICh0aGUgY3VycmVudAorICog aGVhZEJhdGNoL3NjYW5CYXRjaCkgYW5kIHdpbGwgbG9vayBhcyBpZiB0aGUgbmV3IHNjYW4gZGly ZWN0aW9uIGhhZCBiZWVuCisgKiB1c2VkIGZyb20gdGhlIHN0YXJ0LiAgQ2FsbGVyIGNhbiB0aGVu IHNhZmVseSBwYXNzIHRoaXMgYmF0Y2ggdG8gYW1nZXRiYXRjaAorICogdG8gZGV0ZXJtaW5lIHdo aWNoIGJhdGNoIGNvbWVzIG5leHQgaW4gdGhlIG5ldyBzY2FuIGRpcmVjdGlvbi4gIFRoaXMKKyAq IGFwcHJvYWNoIGlzbid0IHBhcnRpY3VsYXJseSBlZmZpY2llbnQsIGJ1dCBpdCB3b3JrcyB3ZWxs IGVub3VnaCBmb3Igd2hhdAorICogb3VnaHQgdG8gYmUgYSByZWxhdGl2ZWx5IHJhcmUgb2NjdXJy ZW5jZS4KKyAqLwordm9pZAordGFibGVhbV91dGlsX3NjYW5iYXRjaF9kaXJjaGFuZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4t PmJhdGNocmluZ2J1ZjsKKwlJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2g7CisKKwlBc3NlcnQoc2Nh bi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtY2FuYmFja3dhcmQpOworCisJLyoKKwkgKiBS ZWxlYXNlIGJhdGNoZXMgc3RhcnRpbmcgZnJvbSB0aGUgY3VycmVudCAiZmluYWwiIGJhdGNoLCB3 b3JraW5nCisJICogYmFja3dhcmRzIHVudGlsIHRoZSBjdXJyZW50IGhlYWQgYmF0Y2ggKHdoaWNo IGlzIGFsc28gdGhlIGN1cnJlbnQKKwkgKiBzY2FuQmF0Y2gpIGlzIHRoZSBvbmx5IGJhdGNoIGhh c24ndCBiZWVuIGZyZWVkCisJICovCisJd2hpbGUgKGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2Nh bikgPiAxKQorCXsKKwkJdWludDgJCWZpbmFsaWR4ID0gYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2gg LSAxOworCQlJbmRleFNjYW5CYXRjaCBmaW5hbCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgZmlu YWxpZHgpOworCisJCUFzc2VydChmaW5hbGlkeCAhPSBiYXRjaHJpbmdidWYtPnNjYW5Qb3MuYmF0 Y2gpOworCisJCXRhYmxlYW1fdXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4sIGZpbmFsKTsKKwkJYmF0 Y2hyaW5nYnVmLT5uZXh0QmF0Y2gtLTsKKwl9CisKKwkvKiBzY2FuQmF0Y2ggaXMgbm93IHRoZSBv bmx5IGJhdGNoIHN0aWxsIGxvYWRlZCAqLworCUFzc2VydChiYXRjaHJpbmdidWYtPmhlYWRCYXRj aCA9PSBiYXRjaHJpbmdidWYtPnNjYW5Qb3MuYmF0Y2gpOworCXNjYW5CYXRjaCA9IGluZGV4X3Nj YW5fYmF0Y2goc2NhbiwgYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCisJLyoKKwkgKiBGbGlw IHNjYW5CYXRjaCdzIHNjYW4gZGlyZWN0aW9uIHRvIHJlZmxlY3QgdGhlIHJldmVyc2FsLiAgQWxz byByZXNldAorCSAqIGFueSBpbmRleCBBTSBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tz IHNjYW4gcHJvZ3Jlc3MuCisJICovCisJc2NhbkJhdGNoLT5kaXIgPSAtc2NhbkJhdGNoLT5kaXI7 CisJaWYgKHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0KQorCQlzY2Fu LT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wb3NyZXNldChzY2FuLCBzY2FuQmF0Y2gpOwor fQorCisvKgorICogUmVjb3JkIHRoYXQgc2NhblBvcyBpdGVtIGlzIGRlYWQKKyAqCisgKiBSZWNv cmRzIGFuIG9mZnNldCB0byB0aGUgY3VycmVudCBzY2FuQmF0Y2gvc2NhblBvcyBpdGVtLCBzYXZp bmcgaXQgaW4KKyAqIHNjYW5CYXRjaCdzIGRlYWRJdGVtcyBhcnJheS4gIFRoZSBpdGVtcycgaW5k ZXggdHVwbGVzIHdpbGwgbGF0ZXIgYmUKKyAqIG1hcmtlZCBMUF9ERUFEIHdoZW4gY3VycmVudCBz Y2FuQmF0Y2ggaXMgZnJlZWQuCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9zY2FucG9zX2tpbGxp dGVtKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0g JnNjYW4tPmJhdGNocmluZ2J1Zi5zY2FuUG9zOworCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCA9 IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpOworCisJaWYgKHNjYW5CYXRj aC0+ZGVhZEl0ZW1zID09IE5VTEwpCisJCXNjYW5CYXRjaC0+ZGVhZEl0ZW1zID0gcGFsbG9jX2Fy cmF5KGludCwgc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CisJaWYgKHNjYW5CYXRjaC0+bnVtRGVhZCA8 IHNjYW4tPm1heGl0ZW1zYmF0Y2gpCisJCXNjYW5CYXRjaC0+ZGVhZEl0ZW1zW3NjYW5CYXRjaC0+ bnVtRGVhZCsrXSA9IHNjYW5Qb3MtPml0ZW07Cit9CisKKy8qCisgKiBSZWxlYXNlIHJlc291cmNl cyBhc3NvY2lhdGVkIHdpdGggYSBiYXRjaAorICoKKyAqIENhbGxlZCBieSB0YWJsZSBBTSdzIGFt Z2V0YmF0Y2ggaW5kZXggc2NhbiBpbXBsZW1lbnRhdGlvbiB3aGVuIGl0IGlzCisgKiBmaW5pc2hl ZCB3aXRoIGEgYmF0Y2ggYW5kIHdpc2hlcyB0byByZWxlYXNlIGl0cyByZXNvdXJjZXMuCisgKgor ICogQ2FsbGluZyBoZXJlIHdoZW4gJ2JhdGNoJyBpcyBhbHNvIGJhdGNocmluZ2J1Zi5tYXJrQmF0 Y2ggaXMgYSBuby1vcC4gIFRhYmxlCisgKiBBTSBjYWxsZXJzIGdlbmVyYWxseSB3b24ndCBuZWVk IHRvIHdvcnJ5IGFib3V0IHRoaXMgYmVjYXVzZSBpdCBpcyBoYW5kbGVkCisgKiBhcyBhIHNwZWNp YWwgY2FzZSBieSB0aGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIChiZXNpZGVzLCB0aGUgc2Nh biBjYW4KKyAqIG9ubHkgaGF2ZSBvbmUgbWFya0JhdGNoIGF0IGEgdGltZSkuCisgKgorICogV2Ug Y2FsbCBhbXVuZ3VhcmRiYXRjaCB0byBkcm9wIHRoZSBUSUQgcmVjeWNsaW5nIGludGVybG9jayAo ZS5nLiBidWZmZXIKKyAqIHBpbikgd2hlbiBpdCBoYXNuJ3QgYmVlbiBkcm9wcGVkIHlldC4gIEZv ciBwbGFpbiBNVkNDIHNjYW5zICh3aGVyZQorICogYmF0Y2hJbW1lZGlhdGVVbmd1YXJkIGlzIHNl dCksIHRoZSBpbnRlcmxvY2sgd2FzIGFscmVhZHkgZHJvcHBlZCBlYWdlcmx5CisgKiBpbiBpbmRl eGFtX3V0aWxfdW5sb2NrX2JhdGNoLCBzbyB3ZSBza2lwIHRoZSBhbXVuZ3VhcmRiYXRjaCBjYWxs IGhlcmUuCisgKiBJbmRleC1vbmx5IHNjYW5zIG11c3QgZGVsYXkgZHJvcHBpbmcgdGhlIGludGVy bG9jayB1bnRpbCB2aXNpYmlsaXR5IGlzCisgKiByZXNvbHZlZCBmb3IgYWxsIGl0ZW1zIGluIHRo ZSBiYXRjaCwgc28gYW11bmd1YXJkYmF0Y2ggbWF5IHN0aWxsIG5lZWQgdG8KKyAqIGFjdCBoZXJl LiAgRm9yIG5vbi1NVkNDIHNuYXBzaG90IHNjYW5zLCB0aGUgaW50ZXJsb2NrIGlzIGFsd2F5cyBo ZWxkCisgKiB1bnRpbCBhbXVuZ3VhcmRiYXRjaCBkcm9wcyBpdCBoZXJlIC0tIHRoaXMgaXMgdGhl IG9ubHkgcGxhY2Ugd2lsbGluZyB0bworICogdW5ndWFyZCBhIG5vbi1NVkNDIHNjYW4ncyBiYXRj aC4KKyAqCisgKiBXaGVuIHRoZSBiYXRjaCBoYXMgZGVhZCBpdGVtcyAobnVtRGVhZCA+IDApIGFu ZCB0aGUgaW5kZXggQU0gcHJvdmlkZXMgYW4KKyAqIGFta2lsbGl0ZW1zYmF0Y2ggY2FsbGJhY2ss IHdlIGNhbGwgaXQgdG8gc2V0IExQX0RFQUQgYml0cyBpbiB0aGUgaW5kZXgKKyAqIHBhZ2UuICBU aGlzIGlzIHRoZSBuYXR1cmFsIHBsYWNlIHRvIGtpbGwgaW5kZXggaXRlbXMgYmVjYXVzZSBpdCdz IHRoZQorICogcG9pbnQgd2hlbiB3ZSBrbm93IGZvciBzdXJlIHRoYXQgbm8gZnVydGhlciB0YWJs ZSBhY2Nlc3NlcyB3aWxsIHRha2UKKyAqIHBsYWNlIGZvciB0aGF0IGJhdGNoJ3MgaXRlbXMuCisg Ki8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9yZWxlYXNlX2JhdGNoKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJLyogZG9uJ3QgZnJlZSBjYWxsZXIncyBiYXRjaCBp ZiBpdCBpcyBzY2FuJ3MgY3VycmVudCBtYXJrQmF0Y2ggKi8KKwlpZiAoYmF0Y2ggPT0gc2Nhbi0+ YmF0Y2hyaW5nYnVmLm1hcmtCYXRjaCkKKwkJcmV0dXJuOworCisJLyogUGFzcyB0aHJvdWdoIHRv IGltcGxlbWVudGF0aW9uIGZ1bmN0aW9uLCB3aXRoIGFsbG93X2NhY2hlPXRydWUgKi8KKwlyZWxl YXNlX2FuZF91bmd1YXJkX2JhdGNoKHNjYW4sIGJhdGNoLCB0cnVlKTsKK30KKworLyoKKyAqIEZy ZWUgYSBiYXRjaCwgb3B0aW9uYWxseSBjYWNoaW5nIGl0IGZvciByZXVzZS4KKyAqCisgKiBXaGVu IGFsbG93X2NhY2hlIGlzIHRydWUsIHdlIHRyeSB0byBzdG9yZSB0aGUgYmF0Y2ggaW4gdGhlIHNj YW4ncyBiYXRjaAorICogY2FjaGUgZm9yIGxhdGVyIHJldXNlLiAgV2hlbiBhbGxvd19jYWNoZSBp cyBmYWxzZSAodHlwaWNhbGx5IGJlY2F1c2UgdGhlCisgKiBzY2FuIGlzIHNodXR0aW5nIGRvd24p LCB3ZSBwZnJlZSB0aGUgY2FsbGVyJ3MgYmF0Y2ggdW5jb25kaXRpb25hbGx5LgorICovCitzdGF0 aWMgdm9pZAorcmVsZWFzZV9hbmRfdW5ndWFyZF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIElu ZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkJICBib29sIGFsbG93X2NhY2hlKQoreworCUFzc2Vy dCghKHNjYW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCAmJiBiYXRjaC0+aXNHdWFyZGVkKSk7CisJ QXNzZXJ0KGJhdGNoLT5pc0d1YXJkZWQgfHwgc2Nhbi0+TVZDQ1NjYW4pOworCisJLyogRHJvcCBU SUQgcmVjeWNsaW5nIGludGVybG9jayB2aWEgYW11bmd1YXJkYmF0Y2ggYXMgbmVlZGVkICovCisJ aWYgKCFzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQgJiYgYmF0Y2gtPmlzR3VhcmRlZCkKKwkJ dGFibGVhbV91dGlsX3VuZ3VhcmRfYmF0Y2goc2NhbiwgYmF0Y2gpOworCisJLyoKKwkgKiBMZXQg dGhlIGluZGV4IEFNIHNldCBMUF9ERUFEIGJpdHMgaW4gdGhlIGluZGV4IHBhZ2UsIGlmIGFwcGxp Y2FibGUuCisJICoKKwkgKiBiYXRjaC5kZWFkSXRlbXNbXSBpcyBub3cgaW4gd2hhdGV2ZXIgb3Jk ZXIgdGhlIHNjYW4gcmV0dXJuZWQgaXRlbXMgaW4uCisJICogV2UgbWlnaHQgaGF2ZSBldmVuIHNh dmVkIHRoZSBzYW1lIGl0ZW0vVElEIHR3aWNlLgorCSAqCisJICogU29ydCBhbmQgdW5pcXVlLWlm eSBkZWFkSXRlbXNbXS4gIFRoYXQgd2F5IHRoZSBpbmRleCBBTSBjYW4gc2FmZWx5CisJICogYXNz dW1lIHRoYXQgaXRlbXMgd2lsbCBhbHdheXMgYmUgaW4gdGhlaXIgb3JpZ2luYWwgaW5kZXggcGFn ZSBvcmRlci4KKwkgKi8KKwlpZiAoYmF0Y2gtPm51bURlYWQgPiAwICYmCisJCXNjYW4tPmluZGV4 UmVsYXRpb24tPnJkX2luZGFtLT5hbWtpbGxpdGVtc2JhdGNoICE9IE5VTEwpCisJeworCQlpZiAo YmF0Y2gtPm51bURlYWQgPiAxKQorCQl7CisJCQlxc29ydChiYXRjaC0+ZGVhZEl0ZW1zLCBiYXRj aC0+bnVtRGVhZCwgc2l6ZW9mKGludCksCisJCQkJICBiYXRjaF9jb21wYXJlX2ludCk7CisJCQli YXRjaC0+bnVtRGVhZCA9IHF1bmlxdWUoYmF0Y2gtPmRlYWRJdGVtcywgYmF0Y2gtPm51bURlYWQs CisJCQkJCQkJCQkgc2l6ZW9mKGludCksIGJhdGNoX2NvbXBhcmVfaW50KTsKKwkJfQorCisJCXNj YW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWtpbGxpdGVtc2JhdGNoKHNjYW4sIGJhdGNo KTsKKwl9CisKKwkvKgorCSAqIFRyeSB0byBzdG9yZSBjYWxsZXIncyBiYXRjaCBpbiB0aGlzIGFt Z2V0YmF0Y2ggc2NhbidzIGNhY2hlIG9mCisJICogcHJldmlvdXNseSByZWxlYXNlZCBiYXRjaGVz IGZpcnN0ICh3aGVuIGNhbGxlciByZXF1ZXN0cyBpdCkKKwkgKi8KKwlpZiAoYWxsb3dfY2FjaGUg JiYgYmF0Y2hfY2FjaGVfc3RvcmUoc2NhbiwgYmF0Y2gpKQorCQlyZXR1cm47CisKKwkvKiBqdXN0 IHBmcmVlIHRoZSBjYWxsZXIncyBiYXRjaCAocGx1cyBiYXRjaCdzIGRlYWRJdGVtcywgaWYgYW55 KSAqLworCWlmIChiYXRjaC0+ZGVhZEl0ZW1zKQorCQlwZnJlZShiYXRjaC0+ZGVhZEl0ZW1zKTsK KwlwZnJlZShpbmRleF9zY2FuX2JhdGNoX2Jhc2Uoc2NhbiwgYmF0Y2gpKTsKK30KKworLyoKKyAq IERyb3AgdGhlIGJhdGNoJ3MgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgdmlhIGFtdW5ndWFyZGJh dGNoCisgKgorICogQ2FsbGVkIGJ5IHRoZSB0YWJsZSBBTSB3aGVuIGl0J3Mgc2FmZSB0byBkcm9w IHdoYXRldmVyIGludGVybG9jayB0aGUgaW5kZXgKKyAqIEFNIGhvbGRzIHRvIHByZXZlbnQgdW5z YWZlIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieSBWQUNVVU0gKHR5cGljYWxseSBhCisgKiBi dWZmZXIgcGluIG9uIHRoZSBiYXRjaCdzIGluZGV4IHBhZ2UgaW4gYmF0Y2gncyBvcGFxdWUgYXJl YSkuCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF91bmd1YXJkX2JhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJLyogU2hvdWxkIGJlIGNhbGxlZCBleGFj dGx5IG9uY2UgaWZmICFiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgKi8KKwlBc3NlcnQoIXNjYW4tPmJh dGNoSW1tZWRpYXRlVW5ndWFyZCk7CisJQXNzZXJ0KGJhdGNoLT5pc0d1YXJkZWQpOworCisJc2Nh bi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtdW5ndWFyZGJhdGNoKHNjYW4sIGJhdGNoKTsK KworCWJhdGNoLT5pc0d1YXJkZWQgPSBmYWxzZTsKK30KKworLyoKKyAqIFVubG9jayBiYXRjaCdz IGluZGV4IHBhZ2UgYnVmZmVyIGxvY2sKKyAqCisgKiBVbmxvY2tzIHRoZSBnaXZlbiBidWZmZXIg aW4gcHJlcGFyYXRpb24gZm9yIGFtZ2V0YmF0Y2ggcmV0dXJuaW5nIGl0ZW1zCisgKiBzYXZlZCBp biB0aGF0IGJhdGNoLiAgUGVyZm9ybXMgZXh0cmEgc3RlcHMgcmVxdWlyZWQgYnkgYW1nZXRiYXRj aCBjYWxsZXJzCisgKiBpbiBwYXNzaW5nLgorICoKKyAqIE9ubHkgY2FsbCBoZXJlIHdoZW4gYSBi YXRjaCBoYXMgb25lIG9yIG1vcmUgbWF0Y2hpbmcgaXRlbXMgdG8gcmV0dXJuIHVzaW5nCisgKiBh bWdldGJhdGNoIChvciBmb3IgYW1nZXRiaXRtYXAgdG8gbG9hZCBpbnRvIGl0cyBiaXRtYXAgb2Yg bWF0Y2hpbmcgVElEcykuCisgKiBXaGVuIGFuIGluZGV4IHBhZ2UgaGFzIG5vIG1hdGNoZXMsIGl0 J3MgYWx3YXlzIHNhZmUgZm9yIGluZGV4IEFNcyB0byBkcm9wCisgKiBib3RoIHRoZSBsb2NrIGFu ZCB0aGUgcGluIGZvciB0aGVtc2VsdmVzLgorICoKKyAqIE5vdGU6IEl0IGlzIGNvbnZlbmllbnQg Zm9yIGluZGV4IEFNcyB0aGF0IGltcGxlbWVudCBib3RoIGFtZ2V0YmF0Y2ggYW5kCisgKiBhbWdl dGJpdG1hcCB0byBjb25zaXN0ZW50bHkgdXNlIHRoZSBzYW1lIGJhdGNoIG1hbmFnZW1lbnQgYXBw cm9hY2gsIHNpbmNlCisgKiB0aGF0IGF2b2lkcyBpbnRyb2R1Y2luZyBzcGVjaWFsIGNhc2VzIHRv IGxvd2VyLWxldmVsIGNvZGUuICBXZSBkcm9wIGJvdGgKKyAqIHRoZSBsb2NrIGFuZCB0aGUgcGlu IG9uIGJhdGNoJ3MgcGFnZSBvbiBiZWhhbGYgb2YgYW1nZXRiaXRtYXAgY2FsbGVycy4KKyAqCisg KiBGb3IgYW1nZXRiYXRjaCBjYWxsZXJzLCB3aGVuIGJhdGNoSW1tZWRpYXRlVW5ndWFyZCBpcyBz ZXQgKHBsYWluIE1WQ0MKKyAqIHNjYW5zKSwgd2UgYWxzbyByZWxlYXNlIHRoZSBwaW4gaGVyZSAo dGhlIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrKS4gIFRoZQorICogYmF0Y2ggd2lsbCBiZSBtYXJr ZWQgInVuZ3VhcmRlZCIsIHByZXZlbnRpbmcgdGhlIHRhYmxlIEFNIGZyb20gc3B1cmlvdXNseQor ICogY2FsbGluZyBhbXVuZ3VhcmRiYXRjaCBsYXRlciBvbi4KKyAqCisgKiBJbmRleCBBTXMgd2hv c2UgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgaXMgbm90IGp1c3QgYSBidWZmZXIgcGluLCBvciB3 aG9zZQorICogYW11bmd1YXJkYmF0Y2ggZG9lcyBub3Qgc2ltcGx5IHJlbGVhc2UgYSBwaW4sIGFy ZSBub3Qgb2JsaWdhdGVkIHRvIHVzZSB0aGlzCisgKiBmdW5jdGlvbi4gIFRoZXkgY2FuIGltcGxl bWVudCB0aGVpciBvd24gZXF1aXZhbGVudC4gIFN1Y2ggaW5kZXggQU1zIGFyZSBhbHNvCisgKiBm cmVlIHRvIHVzZSB0aGUgYmF0Y2ggTFNOIGZpZWxkIHRoZW1zZWx2ZXM7IHRoZWlyIGFta2lsbGl0 ZW1zYmF0Y2ggcm91dGluZQorICogY2FuIHVzZSB0aGF0IExTTiBpbiB0aGUgdXN1YWwgd2F5LCBv ciBpbiB3aGF0ZXZlciB3YXkgdGhlIEFNIGRlZW1zIG5lY2Vzc2FyeQorICogKGNvcmUgY29kZSB3 aWxsIG5vdCB1c2UgaXQgZm9yIGFueSBvdGhlciBwdXJwb3NlKS4KKyAqLworcGdfYXR0cmlidXRl X2hvdCB2b2lkCitpbmRleGFtX3V0aWxfdW5sb2NrX2JhdGNoKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIEJ1ZmZlciBidWYpCit7CisJLyogYmF0Y2ggbXVzdCBoYXZl IG9uZSBvciBtb3JlIG1hdGNoaW5nIGl0ZW1zIHJldHVybmVkIGJ5IGluZGV4IEFNICovCisJQXNz ZXJ0KGJhdGNoLT5maXJzdEl0ZW0gPj0gMCAmJiBiYXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5s YXN0SXRlbSk7CisKKwlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCXsKKwkJLyogYW1nZXRiYXRj aCAobm90IGFtZ2V0Yml0bWFwKSBjYWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlv biAhPSBOVUxMKTsKKworCQkvKgorCQkgKiBIYXZlIHRvIHNldCBiYXRjaC0+bHNuIHNvIHRoYXQg YW1raWxsaXRlbXNiYXRjaCBjYWxsYmFjayBoYXMgYSB3YXkKKwkJICogdG8gZGV0ZWN0IHdoZW4g Y29uY3VycmVudCB0YWJsZSBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSBtaWdodCBoYXZlCisJCSAq IHRha2VuIHBsYWNlLiAgSXQnbGwgb25seSBiZSBzYWZlIGZvciBhbWtpbGxpdGVtc2JhdGNoIHRv IHNldCBpbmRleAorCQkgKiB0dXBsZSBMUF9ERUFEIGJpdHMgd2hlbiB0aGUgcGFnZSBMU04gaGFz bid0IGFkdmFuY2VkIGJldHdlZW4gdGhlbgorCQkgKiBhbmQgbm93LgorCQkgKi8KKwkJYmF0Y2gt PmxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYpOworCisJCS8qCisJCSAqIERyb3AgdGhlIHBp biBoZXJlIGR1cmluZyBzY2FucyB0aGF0IGRvbid0IHJlcXVpcmUgYW4gZXhwbGljaXQgVElECisJ CSAqIHJlY3ljbGluZyBpbnRlcmxvY2sgKGEgcGluIHdpbGwgYmxvY2sgY2xlYW51cCBsb2NrIGFj cXVpc2l0aW9uIGJ5CisJCSAqIGluZGV4IHZhY3V1bWluZykKKwkJICovCisJCWlmIChzY2FuLT5i YXRjaEltbWVkaWF0ZVVuZ3VhcmQpCisJCXsKKwkJCS8qIGRyb3AgYm90aCB0aGUgbG9jayBhbmQg dGhlIHBpbiAqLworCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWYpOworCQkJYmF0Y2gtPmlzR3Vh cmRlZCA9IGZhbHNlOwkvKiB3b24ndCBjYWxsIGFtdW5ndWFyZGJhdGNoICovCisJCX0KKwkJZWxz ZQorCQl7CisJCQkvKgorCQkJICoganVzdCBkcm9wIHRoZSBsb2NrOyBpbmRleCBBTSdzIGFtdW5n dWFyZGJhdGNoIGNhbGxiYWNrIHdpbGwgYmUKKwkJCSAqIGNhbGxlZCB0byBkcm9wIHRoZSBwaW4g bGF0ZXIgb24sIHdoZW4gdGhlIHRhYmxlIEFNIGRldGVybWluZXMKKwkJCSAqIHRoYXQgaXQgaXMg c2FmZSB0byBkbyBzbworCQkJICovCisJCQlVbmxvY2tCdWZmZXIoYnVmKTsKKwkJCWJhdGNoLT5p c0d1YXJkZWQgPSB0cnVlOworCQl9CisJfQorCWVsc2UKKwl7CisJCS8qIGFtZ2V0Yml0bWFwIChu b3QgYW1nZXRiYXRjaCkgY2FsbGVyICovCisJCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gPT0g TlVMTCk7CisKKwkJLyoKKwkJICogZHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluIChhbXVu Z3VhcmRiYXRjaCBpcyBuZXZlciBjYWxsZWQKKwkJICogZHVyaW5nIGJpdG1hcCBpbmRleCBzY2Fu cykKKwkJICovCisJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmKTsKKwl9Cit9CisKKy8qCisgKiBB bGxvY2F0ZSBhIG5ldyBiYXRjaAorICoKKyAqIFVzZWQgYnkgaW5kZXggQU1zIHRoYXQgc3VwcG9y dCBhbWdldGJhdGNoIGludGVyZmFjZSAoYm90aCBkdXJpbmcgYW1nZXRiYXRjaAorICogYW5kIGFt Z2V0Yml0bWFwIHNjYW5zKS4KKyAqCisgKiBSZXR1cm5zIEluZGV4U2NhbkJhdGNoIHdpdGggc3Bh Y2UgdG8gZml0IHNjYW4tPm1heGl0ZW1zYmF0Y2gtbWFueQorICogQmF0Y2hNYXRjaGluZ0l0ZW0g ZW50cmllcy4gIFRoaXMgd2lsbCBlaXRoZXIgYmUgYSBuZXdseSBhbGxvY2F0ZWQgYmF0Y2gsIG9y CisgKiBhIGJhdGNoIHJlY3ljbGVkIGZyb20gdGhlIGNhY2hlIG1hbmFnZWQgYnkgaW5kZXhhbV91 dGlsX3JlbGVhc2VfYmF0Y2guICBTZWUKKyAqIGNvbW1lbnRzIGFib3ZlIGluZGV4YW1fdXRpbF9y ZWxlYXNlX2JhdGNoLgorICoKKyAqIEhvdXNla2VlcGluZyBmaWVsZHMgKGJ1Ziwga25vd25FbmRC YWNrd2FyZC9Gb3J3YXJkLCBmaXJzdEl0ZW0sIGxhc3RJdGVtLAorICogbnVtRGVhZCwgZGVhZEl0 ZW1zLCBjdXJyVHVwbGVzKSBhcmUgaW5pdGlhbGl6ZWQgaGVyZS4gIFRoZSB0YWJsZSBBTSdzCisg KiBiYXRjaF9pbml0IGNhbGxiYWNrIGlzIGludm9rZWQgaGVyZSB0byBpbml0aWFsaXplIHRoZSB0 YWJsZSBBTSBvcGFxdWUgYXJlYS4KKyAqIFRoZSBpbmRleCBBTSBjYWxsZXIgaXMgcmVzcG9uc2li bGUgZm9yIGZpbGxpbmcgaW4gaXRzIHBlci1iYXRjaCBvcGFxdWUKKyAqIGZpZWxkcyBhbmQgdGhl IG1hdGNoaW5nIGl0ZW1zW10gYXJyYXkuCisgKgorICogT25jZSB0aGUgYmF0Y2ggaGFzIHRoZSBy ZXF1aXJlZCBtYXRjaGluZyBpdGVtcywgY2FsbGVyIHNob3VsZCBnZW5lcmFsbHkKKyAqIHBhc3Mg aXQgdG8gaW5kZXhhbV91dGlsX3VubG9ja19iYXRjaCwgYWhlYWQgb2YgaXQgYmVpbmcgcmV0dXJu ZWQgdGhyb3VnaAorICogaW5kZXggQU0ncyBhbWdldGJhdGNoIHJvdXRpbmUuICBJZiBpdCB0dXJu cyBvdXQgdGhhdCB0aGUgYmF0Y2ggd29uJ3QgbmVlZAorICogdG8gYmUgcmV0dXJuZWQgbGlrZSB0 aGlzIChlLmcuLCBkdWUgdG8gdGhlIHNjYW4gaGF2aW5nIG5vIG1vcmUgbWF0Y2hlcyksCisgKiBj YWxsZXIgc2hvdWxkIHBhc3MgaXRzIGVtcHR5L3VudXNlZCBiYXRjaCB0byBpbmRleGFtX3V0aWxf cmVsZWFzZV9iYXRjaC4KKyAqLworcGdfYXR0cmlidXRlX2hvdCBJbmRleFNjYW5CYXRjaAoraW5k ZXhhbV91dGlsX2FsbG9jX2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlJbmRleFNjYW5C YXRjaCBiYXRjaCA9IE5VTEw7CisKKwkvKiBJbmRleCBBTSBtdXN0IGhhdmUgc2V0IGl0cyBvcGFx dWUgc3BhY2UgdG8gc29tZXRoaW5nIGFscmVhZHkgKi8KKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxh dGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CisJQXNzZXJ0KHNjYW4tPmJhdGNo X2luZGV4X29wYXF1ZV9zdGF0aWMgPiAwKTsKKworCS8qIEZpcnN0IGxvb2sgZm9yIGFuIGV4aXN0 aW5nIGJhdGNoIGZyb20gdGhlIGNhY2hlICovCisJaWYgKHNjYW4tPnVzZWJhdGNocmluZykKKwl7 CisJCWZvciAoaW50IGkgPSAwOyBpIDwgSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTOyBpKyspCisJ CXsKKwkJCWlmIChzY2FuLT5iYXRjaGNhY2hlW2ldICE9IE5VTEwpCisJCQl7CisJCQkJLyogUmV0 dXJuIGNhY2hlZCB1bnJlZmVyZW5jZWQgYmF0Y2ggKi8KKwkJCQliYXRjaCA9IHNjYW4tPmJhdGNo Y2FjaGVbaV07CisJCQkJc2Nhbi0+YmF0Y2hjYWNoZVtpXSA9IE5VTEw7CisJCQkJYnJlYWs7CisJ CQl9CisJCX0KKwl9CisJZWxzZSBpZiAoc2Nhbi0+YmF0Y2hjYWNoZVswXSAhPSBOVUxMKQorCXsK KwkJLyoKKwkJICogUmV1c2UgY2FjaGVkIGJhdGNoIGZyb20gcHJpb3IgYW1nZXRiaXRtYXAgaXRl cmF0aW9uLiAgVGhpcyBwYXRoIGlzCisJCSAqIGhpdCBvbiBldmVyeSBhbWdldGJpdG1hcCBjYWxs IGhlcmUgYWZ0ZXIgdGhlIHNjYW4ncyBmaXJzdC4KKwkJICovCisJCWJhdGNoID0gc2Nhbi0+YmF0 Y2hjYWNoZVswXTsKKwkJc2Nhbi0+YmF0Y2hjYWNoZVswXSA9IE5VTEw7CisJfQorCisJaWYgKCFi YXRjaCkKKwl7CisJCXNpemVfdAkJb3BhcXVlX2FyZWFzX3ByZWZpeF9zeiwKKwkJCQkJYmFzZV9z eiwKKwkJCQkJaW9zX3RvdGFsX3RyYWlsaW5nX3N6LAorCQkJCQlhbGxvY3N6OworCQljaGFyCSAg ICpyYXdfYmF0Y2hfYWxsb2M7CisKKwkJaWYgKHNjYW4tPmJhdGNoX2Jhc2Vfb2Zmc2V0ID09IDAp CisJCXsKKwkJCS8qIFdlIGxhemlseSBjb21wdXRlIGJhdGNoX2Jhc2Vfb2Zmc2V0IG9uIHNjYW4n cyBmaXJzdCBjYWxsICovCisJCQlzaXplX3QJCXRhYmxlX2FyZWEgPSAwOworCisJCQlpZiAoc2Nh bi0+dXNlYmF0Y2hyaW5nKQorCQkJeworCQkJCS8qCisJCQkJICogSGFuZGxlIHRhYmxlIEFNJ3Mg ZHluYW1pY2FsbHktc2l6ZWQgYXJlYS4gIEl0IGlzbid0IHVzZWQKKwkJCQkgKiBkdXJpbmcgYmF0 Y2gtYmFzZWQgYml0bWFwIHNjYW5zLi4uCisJCQkJICovCisJCQkJdGFibGVfYXJlYSA9IE1BWEFM SUdOKHNjYW4tPmJhdGNoX3RhYmxlX29wYXF1ZV9zaXplKTsKKwkJCX0KKworCQkJLyogLi4udGhv dWdoIHdlIGFsd2F5cyBuZWVkIGFuIGluZGV4IEFNIGFyZWEgKi8KKwkJCXNjYW4tPmJhdGNoX2Jh c2Vfb2Zmc2V0ID0gdGFibGVfYXJlYSArCisJCQkJc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3N0 YXRpYzsKKwkJfQorCisJCS8qIFN1YnRvdGFsICMxOiB0aGUgc2l6ZSBvZiBhbGwgQU0gb3BhcXVl IGFyZWFzICovCisJCW9wYXF1ZV9hcmVhc19wcmVmaXhfc3ogPSBzY2FuLT5iYXRjaF9iYXNlX29m ZnNldDsKKwkJQXNzZXJ0KG9wYXF1ZV9hcmVhc19wcmVmaXhfc3ogPT0gTUFYQUxJR04ob3BhcXVl X2FyZWFzX3ByZWZpeF9zeikpOworCisJCS8qIFN1YnRvdGFsICMyOiBJbmRleFNjYW5CYXRjaERh dGEgYW5kIGl0cyBpdGVtc1ttYXhpdGVtc2JhdGNoXSAqLworCQliYXNlX3N6ID0gTUFYQUxJR04o b2Zmc2V0b2YoSW5kZXhTY2FuQmF0Y2hEYXRhLCBpdGVtcykgKworCQkJCQkJICAgc2l6ZW9mKEJh dGNoTWF0Y2hpbmdJdGVtKSAqIHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCisJCS8qCisJCSAqIFN1 YnRvdGFsICMzOiB0aGUgY3VyclR1cGxlcyB3b3Jrc3BhY2UgdGhhdCBjb21lcyBhZnRlciBpdGVt c1tdLAorCQkgKiB3aGVyZSB0aGUgaW5kZXggQU0gc3RvcmVzIGluZGV4IHR1cGxlcyBkdXJpbmcg aW5kZXgtb25seSBzY2FucworCQkgKi8KKwkJaW9zX3RvdGFsX3RyYWlsaW5nX3N6ID0gMDsKKwkJ aWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJeworCQkJaW9zX3RvdGFsX3RyYWlsaW5nX3N6ID0g c2Nhbi0+YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZTsKKwkJCXBnX2Fzc3VtZShpb3NfdG90YWxfdHJh aWxpbmdfc3ogPiAwKTsKKwkJCUFzc2VydChpb3NfdG90YWxfdHJhaWxpbmdfc3ogPT0gTUFYQUxJ R04oaW9zX3RvdGFsX3RyYWlsaW5nX3N6KSk7CisJCX0KKworCQkvKiBUb3RhbCBiYXRjaCBhbGxv Y2F0aW9uIHNpemUgaXMgdGhlIHN1bSBvZiBvdXIgdGhyZWUgc3VidG90YWxzICovCisJCWFsbG9j c3ogPSBvcGFxdWVfYXJlYXNfcHJlZml4X3N6ICsgYmFzZV9zeiArIGlvc190b3RhbF90cmFpbGlu Z19zejsKKwkJQXNzZXJ0KGFsbG9jc3ogPT0gYmF0Y2hfYWxsb2Nfc2l6ZShzY2FuKSk7CisJCXJh d19iYXRjaF9hbGxvYyA9IHBhbGxvYyhhbGxvY3N6KTsKKwkJYmF0Y2ggPSAoSW5kZXhTY2FuQmF0 Y2gpIChyYXdfYmF0Y2hfYWxsb2MgKyBvcGFxdWVfYXJlYXNfcHJlZml4X3N6KTsKKwkJQXNzZXJ0 KGluZGV4X3NjYW5fYmF0Y2hfYmFzZShzY2FuLCBiYXRjaCkgPT0gcmF3X2JhdGNoX2FsbG9jKTsK KworCQkvKiBjdXJyVHVwbGVzIChpZiBhbnkpIGlzIGRpcmVjdGx5IGFmdGVyIGl0ZW1zW10gKi8K KwkJYmF0Y2gtPmN1cnJUdXBsZXMgPSBOVUxMOworCQlpZiAoaW9zX3RvdGFsX3RyYWlsaW5nX3N6 KQorCQkJYmF0Y2gtPmN1cnJUdXBsZXMgPSAoY2hhciAqKSBiYXRjaCArIGJhc2Vfc3o7CisJCWJh dGNoLT5kZWFkSXRlbXMgPSBOVUxMOworCX0KKworCUFzc2VydChzY2FuLT5iYXRjaF9iYXNlX29m ZnNldCA+IDApOworCisJLyoKKwkgKiBMZXQgdGhlIHRhYmxlIEFNIGluaXRpYWxpemUgaXRzIHBl ci1iYXRjaCBvcGFxdWUgYXJlYSBpZmYgaXQgcmVxdWVzdGVkCisJICogb25lICh3aGljaCBjYW4n dCBoYXBwZW4gZHVyaW5nIGJhdGNoLWJhc2VkIGJpdG1hcCBpbmRleCBzY2FucykKKwkgKi8KKwlp ZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nICYmIHNjYW4tPmJhdGNoX3RhYmxlX29wYXF1ZV9zaXplID4g MCkKKwkJdGFibGVfaW5kZXhfc2Nhbl9iYXRjaF9pbml0KHNjYW4sIGJhdGNoKTsKKworCS8qIGlu aXRpYWxpemUgc2hhcmVkIGJhdGNoIGZpZWxkcyAqLworCWJhdGNoLT5kaXIgPSBOb01vdmVtZW50 U2NhbkRpcmVjdGlvbjsKKwliYXRjaC0+a25vd25FbmRCYWNrd2FyZCA9IGZhbHNlOworCWJhdGNo LT5rbm93bkVuZEZvcndhcmQgPSBmYWxzZTsKKwliYXRjaC0+aXNHdWFyZGVkID0gZmFsc2U7CisK KwkvKiAiZmlyc3RJdGVtIDw9IGxhc3RJdGVtIiB0ZXN0cyB3aWxsIGZhaWwgYXQgZmlyc3QgKGRl ZmVuc2l2ZSkgKi8KKwliYXRjaC0+Zmlyc3RJdGVtID0gMDsKKwliYXRjaC0+bGFzdEl0ZW0gPSAt MTsKKworCS8qCisJICogZGVhZEl0ZW1zW10gbWlnaHQgYWxyZWFkeSBiZSBhbGxvY2F0ZWQgaWZm IHRoaXMgaXMgYSByZWN5Y2xlZCBiYXRjaC4KKwkgKiBFaXRoZXIgd2F5LCBpdCBzdGFydHMgb3V0 IHdpdGggemVybyB2YWxpZCBraWxsYWJsZSBpdGVtcy4KKwkgKi8KKwliYXRjaC0+bnVtRGVhZCA9 IDA7CisKKwlyZXR1cm4gYmF0Y2g7Cit9CisKKy8qCisgKiBSZWxlYXNlIGFsbG9jYXRlZCBiYXRj aAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGluZGV4IEFNcyB0byByZWxlYXNl IGEgYmF0Y2ggYWxsb2NhdGVkIGJ5CisgKiBpbmRleGFtX3V0aWxfYWxsb2NfYmF0Y2guICBCYXRj aGVzIGFyZSBjYWNoZWQgaGVyZSBmb3IgcmV1c2UgdG8gcmVkdWNlCisgKiBwYWxsb2MvcGZyZWUg b3ZlcmhlYWQuCisgKgorICogSXQncyBzYWZlIHRvIHJlbGVhc2UgYSBiYXRjaCBpbW1lZGlhdGVs eSB3aGVuIGl0IHdhcyB1c2VkIHRvIHJlYWQgYSBwYWdlCisgKiB0aGF0IHJldHVybmVkIG5vIG1h dGNoZXMgdG8gdGhlIHNjYW4uICBCYXRjaGVzIGFjdHVhbGx5IHJldHVybmVkIGJ5IGluZGV4Cisg KiBBTSdzIGFtZ2V0YmF0Y2ggcm91dGluZSAoaS5lLiBiYXRjaGVzIGZvciBwYWdlcyB3aXRoIG9u ZSBvciBtb3JlIG1hdGNoZXMpCisgKiBtdXN0IGJlIHJlbGVhc2VkIGJ5IHRhYmxlYW1fdXRpbF9y ZWxlYXNlX2JhdGNoLCB3aGljaCBjYWxscyBoZXJlIGFmdGVyIHRoZQorICogaW5kZXggQU0ncyBh bWtpbGxpdGVtc2JhdGNoIHJvdXRpbmUgKGlmIGFueSkuICBJbmRleCBBTXMgdGhhdCB1c2UgYmF0 Y2hlcworICogc2hvdWxkIGNhbGwgaGVyZSB0byByZWxlYXNlIGEgYmF0Y2ggZnJvbSB0aGVpciBh bWdldGJhdGNoIG9yIGFtZ2V0Yml0bWFwCisgKiByb3V0aW5lcy4KKyAqCisgKiBUaGUgcnVsZXMg Zm9yIGJhdGNoIG93bmVyc2hpcCBkaWZmZXIgc2xpZ2h0bHkgZm9yIGFtZ2V0Yml0bWFwIHNjYW5z OyBzZWUKKyAqIHRoZSBhbWdldGJpdG1hcCBkb2N1bWVudGF0aW9uIGluIGRvYy9zcmMvc2dtbC9p bmRleGFtLnNnbWwgZm9yIGRldGFpbHMuCisgKi8KK3ZvaWQKK2luZGV4YW1fdXRpbF9yZWxlYXNl X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJaWYg KCFzY2FuLT51c2ViYXRjaHJpbmcpCisJeworCQkvKgorCQkgKiBhbWdldGJpdG1hcCBzY2FuIGNh bGxlci4KKwkJICoKKwkJICogYW1nZXRiaXRtYXAgcm91dGluZXMgYXJlIHJlcXVpcmVkIHRvIGFs bG9jYXRlIG5vIG1vcmUgdGhhbiBvbmUKKwkJICogYmF0Y2ggYXQgYSB0aW1lLCBzbyB3ZSdsbCBh bHdheXMgaGF2ZSBhIGZyZWUgc2xvdC4KKwkJICovCisJCUFzc2VydChzY2FuLT5iYXRjaGNhY2hl WzBdID09IE5VTEwpOworCQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uID09IE5VTEwpOworCQlB c3NlcnQoYmF0Y2gtPmRlYWRJdGVtcyA9PSBOVUxMKTsKKwkJQXNzZXJ0KGJhdGNoLT5jdXJyVHVw bGVzID09IE5VTEwpOworCisJCWJhdGNoX2NhY2hlX21hcmtfdW5kZWZpbmVkKHNjYW4sIGJhdGNo KTsKKwkJc2Nhbi0+YmF0Y2hjYWNoZVswXSA9IGJhdGNoOworCQlyZXR1cm47CisJfQorCisJLyog YW1nZXRiYXRjaCBzY2FuIGNhbGxlciAqLworCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0g TlVMTCk7CisKKwkvKgorCSAqIFRyeSB0byBzdG9yZSBjYWxsZXIncyBiYXRjaCBpbiB0aGlzIGFt Z2V0YmF0Y2ggc2NhbidzIGNhY2hlIG9mCisJICogcHJldmlvdXNseSByZWxlYXNlZCBiYXRjaGVz IGZpcnN0CisJICovCisJaWYgKGJhdGNoX2NhY2hlX3N0b3JlKHNjYW4sIGJhdGNoKSkKKwkJcmV0 dXJuOworCisJLyogQ2FjaGUgZnVsbDsganVzdCBmcmVlIHRoZSBjYWxsZXIncyBiYXRjaCAqLwor CWlmIChiYXRjaC0+ZGVhZEl0ZW1zKQorCQlwZnJlZShiYXRjaC0+ZGVhZEl0ZW1zKTsKKwlwZnJl ZShpbmRleF9zY2FuX2JhdGNoX2Jhc2Uoc2NhbiwgYmF0Y2gpKTsKK30KKworLyoKKyAqIFRyeSB0 byBzdG9yZSBhIGJhdGNoIGluIHRoZSBzY2FuJ3MgYmF0Y2ggY2FjaGUuCisgKgorICogUmV0dXJu cyB0cnVlIGlmIGEgZnJlZSBzbG90IHdhcyBmb3VuZCwgZmFsc2UgaWYgdGhlIGNhY2hlIGlzIGZ1 bGwuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorYmF0Y2hfY2FjaGVfc3RvcmUoSW5kZXhTY2Fu RGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlmb3IgKGludCBpID0gMDsgaSA8 IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCXsKKwkJaWYgKHNjYW4tPmJhdGNoY2Fj aGVbaV0gPT0gTlVMTCkKKwkJeworCQkJYmF0Y2hfY2FjaGVfbWFya191bmRlZmluZWQoc2Nhbiwg YmF0Y2gpOworCQkJc2Nhbi0+YmF0Y2hjYWNoZVtpXSA9IGJhdGNoOworCQkJcmV0dXJuIHRydWU7 CisJCX0KKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBxc29ydCBjb21wYXJpc29u IGZ1bmN0aW9uIGZvciBpbnQgYXJyYXlzCisgKi8KK3N0YXRpYyBpbnQKK2JhdGNoX2NvbXBhcmVf aW50KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2YikKK3sKKwlpbnQJCQlhID0gKigoY29u c3QgaW50ICopIHZhKTsKKwlpbnQJCQliID0gKigoY29uc3QgaW50ICopIHZiKTsKKworCXJldHVy biBwZ19jbXBfczMyKGEsIGIpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkCmlu ZGV4IGRhNjRjYjU5NS4uODNkZmEzZjJiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1 aWxkCkBAIC01LDQgKzUsNSBAQCBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdhbXZhbGlk YXRlLmMnLAogICAnZ2VuYW0uYycsCiAgICdpbmRleGFtLmMnLAorICAnaW5kZXhiYXRjaC5jJywK ICkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUKaW5kZXggY2I5MjFjYTJlLi5hMzc4NjliNzEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCkBAIC0xNzksMTggKzE3OSwxNSBAQCBob2xkIG9uIHRv IHRoZSBwaW4gKHVzZWQgd2hlbiByZWFkaW5nIGZyb20gdGhlIGxlYWYgcGFnZSkgdW50aWwgX2Fm dGVyXwogdGhleSdyZSBkb25lIHZpc2l0aW5nIHRoZSBoZWFwIChmb3IgVElEcyBmcm9tIHBpbm5l ZCBsZWFmIHBhZ2UpIHByZXZlbnRzCiBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcuICBWQUNVVU0g Y2Fubm90IGdldCBhIGNvbmZsaWN0aW5nIGNsZWFudXAgbG9jawogdW50aWwgdGhlIGluZGV4IHNj YW4gaXMgdG90YWxseSBmaW5pc2hlZCBwcm9jZXNzaW5nIGl0cyBsZWFmIHBhZ2UuCitUaGlzIGlz IHJlcXVpcmVkIGJ5IGFueSBpbmRleCBBTSB0aGF0IGltcGxlbWVudHMgdGhlIGFtZ2V0YmF0Y2gK K2ludGVyZmFjZS4gIChTZWUgYWxzbywgZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCkuCiAKLVRo aXMgYXBwcm9hY2ggaXMgZmFpcmx5IGNvYXJzZSwgc28gd2UgYXZvaWQgaXQgd2hlbmV2ZXIgcG9z c2libGUuICBJbgotcHJhY3RpY2UgbW9zdCBpbmRleCBzY2FucyB3b24ndCBob2xkIG9udG8gdGhl aXIgcGluLCBhbmQgc28gd29uJ3QgYmxvY2sKLVZBQ1VVTS4gIFRoZXNlIGluZGV4IHNjYW5zIG11 c3QgZGVhbCB3aXRoIFRJRCByZWN5Y2xpbmcgZGlyZWN0bHksIHdoaWNoIGlzCi1tb3JlIGNvbXBs aWNhdGVkIGFuZCBub3QgYWx3YXlzIHBvc3NpYmxlLiAgU2VlIGxhdGVyIHNlY3Rpb24gb24gbWFr aW5nCi1jb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgc2FmZS4KLQotT3Bwb3J0dW5pc3RpYyBpbmRl eCB0dXBsZSBkZWxldGlvbiBwZXJmb3JtcyBhbG1vc3QgdGhlIHNhbWUgcGFnZS1sZXZlbAotbW9k aWZpY2F0aW9ucyB3aGlsZSBvbmx5IGhvbGRpbmcgYW4gZXhjbHVzaXZlIGxvY2suICBUaGlzIGlz IHNhZmUgYmVjYXVzZQotdGhlcmUgaXMgbm8gcXVlc3Rpb24gb2YgVElEIHJlY3ljbGluZyB0YWtp bmcgcGxhY2UgbGF0ZXIgb24gLS0gb25seSBWQUNVVU0KLWNhbiBtYWtlIFRJRHMgcmVjeWNsYWJs ZS4gIFNlZSBhbHNvIHNpbXBsZSBkZWxldGlvbiBhbmQgYm90dG9tLXVwCi1kZWxldGlvbiwgYmVs b3cuCitPcHBvcnR1bmlzdGljIGluZGV4IHR1cGxlIGRlbGV0aW9uIHBlcmZvcm1zIHRoZSBzYW1l IHBhZ2UtbGV2ZWwKK21vZGlmaWNhdGlvbnMgYXMgVkFDVVVNLCB3aGlsZSBvbmx5IGhvbGRpbmcg YW4gZXhjbHVzaXZlIGxvY2suICBUaGlzIGlzCitzYWZlIGJlY2F1c2UgdGhlcmUgaXMgbm8gcXVl c3Rpb24gb2YgVElEIHJlY3ljbGluZyB0YWtpbmcgcGxhY2UgLS0gb25seQorVkFDVVVNIGNhbiBt YWtlIFRJRHMgcmVjeWNsYWJsZS4gIEluIG90aGVyIHdvcmRzLCBWQUNVVU0ncyBjbGVhbnVwIGxv Y2sKK3NlcnZlcyB0byBwcm90ZWN0IG5vbi1NVkNDIHNuYXBzaG90IHNjYW5zIGZyb20gY29uY3Vy cmVudCBUSUQgcmVjeWNsaW5nCitoYXphcmRzOyBpdCBkb2Vzbid0IHByb3RlY3QgdGhlIEItVHJl ZSBzdHJ1Y3R1cmUgaXRzZWxmLgogCiBCZWNhdXNlIGEgcGluIGlzIG5vdCBhbHdheXMgaGVsZCwg YW5kIGEgcGFnZSBjYW4gYmUgc3BsaXQgZXZlbiB3aGlsZQogc29tZW9uZSBkb2VzIGhvbGQgYSBw aW4gb24gaXQsIGl0IGlzIHBvc3NpYmxlIHRoYXQgYW4gaW5kZXhzY2FuIHdpbGwKQEAgLTQ0MCw1 NCArNDM3LDYgQEAgd2hlbmV2ZXIgaXQgaXMgc3Vic2VxdWVudGx5IHRha2VuIGZyb20gdGhlIEZT TSBmb3IgcmV1c2UuICBUaGUgZGVsZXRlZAogcGFnZSdzIGNvbnRlbnRzIHdpbGwgYmUgb3Zlcndy aXR0ZW4gYnkgdGhlIHNwbGl0IG9wZXJhdGlvbiAoaXQgd2lsbCBiZWNvbWUKIHRoZSBuZXcgcmln aHQgc2libGluZyBwYWdlKS4KIAotTWFraW5nIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZl Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQXMgZXhwbGFpbmVkIGlu IHRoZSBlYXJsaWVyIHNlY3Rpb24gYWJvdXQgZGVsZXRpbmcgaW5kZXggdHVwbGVzIGR1cmluZwot VkFDVVVNLCB3ZSBpbXBsZW1lbnQgYSBsb2NraW5nIHByb3RvY29sIHRoYXQgYWxsb3dzIGluZGl2 aWR1YWwgaW5kZXggc2NhbnMKLXRvIGF2b2lkIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZy4gIElu ZGV4IHNjYW5zIG9wdC1vdXQgKGFuZCBzbyBkcm9wIHRoZWlyCi1sZWFmIHBhZ2UgcGluIHdoZW4g dmlzaXRpbmcgdGhlIGhlYXApIHdoZW5ldmVyIGl0J3Mgc2FmZSB0byBkbyBzbywgdGhvdWdoLgot RHJvcHBpbmcgdGhlIHBpbiBlYXJseSBpcyB1c2VmdWwgYmVjYXVzZSBpdCBhdm9pZHMgYmxvY2tp bmcgcHJvZ3Jlc3MgYnkKLVZBQ1VVTS4gIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCB3 aXRoIGluZGV4IHNjYW5zIHVzZWQgYnkgY3Vyc29ycywKLXNpbmNlIGlkbGUgY3Vyc29ycyBzb21l dGltZXMgc3RvcCBmb3IgcmVsYXRpdmVseSBsb25nIHBlcmlvZHMgb2YgdGltZS4gIEluCi1leHRy ZW1lIGNhc2VzLCBhIGNsaWVudCBhcHBsaWNhdGlvbiBtYXkgaG9sZCBvbiB0byBhbiBpZGxlIGN1 cnNvcnMgZm9yCi1ob3VycyBvciBldmVuIGRheXMuICBCbG9ja2luZyBWQUNVVU0gZm9yIHRoYXQg bG9uZyBjb3VsZCBiZSBkaXNhc3Ryb3VzLgotCi1JbmRleCBzY2FucyB0aGF0IGRvbid0IGhvbGQg b24gdG8gYSBidWZmZXIgcGluIGFyZSBwcm90ZWN0ZWQgYnkgaG9sZGluZyBhbgotTVZDQyBzbmFw c2hvdCBpbnN0ZWFkLiAgVGhpcyBtb3JlIGxpbWl0ZWQgaW50ZXJsb2NrIHByZXZlbnRzIHdyb25n IGFuc3dlcnMKLXRvIHF1ZXJpZXMsIGJ1dCBpdCBkb2VzIG5vdCBwcmV2ZW50IGNvbmN1cnJlbnQg VElEIHJlY3ljbGluZyBpdHNlbGYgKG9ubHkKLWhvbGRpbmcgb250byB0aGUgbGVhZiBwYWdlIHBp biB3aGlsZSBhY2Nlc3NpbmcgdGhlIGhlYXAgZW5zdXJlcyB0aGF0KS4KLQotSW5kZXgtb25seSBz Y2FucyBjYW4gbmV2ZXIgZHJvcCB0aGVpciBidWZmZXIgcGluLCBzaW5jZSB0aGV5IGFyZSB1bmFi bGUgdG8KLXRvbGVyYXRlIGhhdmluZyBhIHJlZmVyZW5jZWQgVElEIGJlY29tZSByZWN5Y2xhYmxl LiAgSW5kZXgtb25seSBzY2FucwotdHlwaWNhbGx5IGp1c3QgdmlzaXQgdGhlIHZpc2liaWxpdHkg bWFwIChub3QgdGhlIGhlYXAgcHJvcGVyKSwgYW5kIHNvIHdpbGwKLW5vdCByZWxpYWJseSBub3Rp Y2UgdGhhdCBhbnkgc3RhbGUgVElEIHJlZmVyZW5jZSAoZm9yIGEgVElEIHRoYXQgcG9pbnRlZAot dG8gYSBkZWFkLXRvLWFsbCBoZWFwIGl0ZW0gYXQgZmlyc3QpIHdhcyBjb25jdXJyZW50bHkgbWFy a2VkIExQX1VOVVNFRCBpbgotdGhlIGhlYXAgYnkgVkFDVVVNLiAgVGhpcyBjb3VsZCBlYXNpbHkg YWxsb3cgVkFDVVVNIHRvIHNldCB0aGUgd2hvbGUgaGVhcAotcGFnZSB0byBhbGwtdmlzaWJsZSBp biB0aGUgdmlzaWJpbGl0eSBtYXAgaW1tZWRpYXRlbHkgYWZ0ZXJ3YXJkcy4gIEFuIE1WQ0MKLXNu YXBzaG90IGlzIG9ubHkgc3VmZmljaWVudCB0byBhdm9pZCBwcm9ibGVtcyBkdXJpbmcgcGxhaW4g aW5kZXggc2NhbnMKLWJlY2F1c2UgdGhleSBtdXN0IGFjY2VzcyBncmFudWxhciB2aXNpYmlsaXR5 IGluZm9ybWF0aW9uIGZyb20gdGhlIGhlYXAKLXByb3Blci4gIEEgcGxhaW4gaW5kZXggc2NhbiB3 aWxsIGV2ZW4gcmVjb2duaXplIExQX1VOVVNFRCBpdGVtcyBpbiB0aGUKLWhlYXAgKGl0ZW1zIHRo YXQgY291bGQgYmUgcmVjeWNsZWQgYnV0IGhhdmVuJ3QgYmVlbiBqdXN0IHlldCkgYXMgIm5vdAot dmlzaWJsZSIgLS0gZXZlbiB3aGVuIHRoZSBoZWFwIHBhZ2UgaXMgZ2VuZXJhbGx5IGNvbnNpZGVy ZWQgYWxsLXZpc2libGUuCi0KLUxQX0RFQUQgc2V0dGluZyBvZiBpbmRleCB0dXBsZXMgYnkgdGhl IGtpbGxfcHJpb3JfdHVwbGUgb3B0aW1pemF0aW9uCi0oZGVzY3JpYmVkIGluIGZ1bGwgaW4gc2lt cGxlIGRlbGV0aW9uLCBiZWxvdykgaXMgYWxzbyBtb3JlIGNvbXBsaWNhdGVkIGZvcgotaW5kZXgg c2NhbnMgdGhhdCBkcm9wIHRoZWlyIGxlYWYgcGFnZSBwaW5zLiAgV2UgbXVzdCBiZSBjYXJlZnVs IHRvIGF2b2lkCi1MUF9ERUFELW1hcmtpbmcgYW55IG5ldyBpbmRleCB0dXBsZSB0aGF0IGxvb2tz IGxpa2UgYSBrbm93bi1kZWFkIGluZGV4Ci10dXBsZSBiZWNhdXNlIGl0IGhhcHBlbnMgdG8gc2hh cmUgdGhlIHNhbWUgVElELCBmb2xsb3dpbmcgY29uY3VycmVudCBUSUQKLXJlY3ljbGluZy4gIEl0 J3MganVzdCBhYm91dCBwb3NzaWJsZSB0aGF0IHNvbWUgb3RoZXIgc2Vzc2lvbiBpbnNlcnRlZCBh Ci1uZXcsIHVucmVsYXRlZCBpbmRleCB0dXBsZSwgb24gdGhlIHNhbWUgbGVhZiBwYWdlLCB3aGlj aCBoYXMgdGhlIHNhbWUKLW9yaWdpbmFsIFRJRC4gIEl0IHdvdWxkIGJlIHRvdGFsbHkgd3Jvbmcg dG8gTFBfREVBRC1zZXQgdGhpcyBuZXcsCi11bnJlbGF0ZWQgaW5kZXggdHVwbGUuCi0KLVdlIGhh bmRsZSB0aGlzIGtpbGxfcHJpb3JfdHVwbGUgcmFjZSBjb25kaXRpb24gYnkgaGF2aW5nIGFmZmVj dGVkIGluZGV4Ci1zY2FucyBjb25zZXJ2YXRpdmVseSBhc3N1bWUgdGhhdCBhbnkgY2hhbmdlIHRv IHRoZSBsZWFmIHBhZ2UgYXQgYWxsCi1pbXBsaWVzIHRoYXQgaXQgd2FzIHJlYWNoZWQgYnkgYnRi dWxrZGVsZXRlIGluIHRoZSBpbnRlcmltIHBlcmlvZCB3aGVuIG5vCi1idWZmZXIgcGluIHdhcyBo ZWxkLiAgVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBub3Qgc2V0dGluZyBhbnkgTFBfREVBRCBiaXRz Ci1vbiB0aGUgbGVhZiBwYWdlIGF0IGFsbCB3aGVuIHRoZSBwYWdlJ3MgTFNOIGhhcyBjaGFuZ2Vk LiAgKFRoaXMgaXMgd2h5IHdlCi1pbXBsZW1lbnQgImZha2UiIExTTnMgZm9yIHVubG9nZ2VkIGlu ZGV4IHJlbGF0aW9ucy4pCi0KIEZhc3RwYXRoIEZvciBJbmRleCBJbnNlcnRpb24KIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNzM0LDcgKzY4Myw3IEBAIG9mIHJlYWRlcnMgY291 bGQgc3RpbGwgbW92ZSByaWdodCB0byByZWNvdmVyIGlmIHdlIGRpZG4ndCBjb3VwbGUKIHNhbWUt bGV2ZWwgbG9ja3MpLCBidXQgd2UgcHJlZmVyIHRvIGJlIGNvbnNlcnZhdGl2ZSBoZXJlLgogCiBE dXJpbmcgcmVjb3ZlcnkgYWxsIGluZGV4IHNjYW5zIHN0YXJ0IHdpdGggaWdub3JlX2tpbGxlZF90 dXBsZXMgPSBmYWxzZQotYW5kIHdlIG5ldmVyIHNldCBraWxsX3ByaW9yX3R1cGxlLiBXZSBkbyB0 aGlzIGJlY2F1c2UgdGhlIG9sZGVzdCB4bWluCithbmQgd2UgbmV2ZXIgTFBfREVBRC1tYXJrIHR1 cGxlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHRoZSBvbGRlc3QgeG1pbgogb24gdGhlIHN0YW5kYnkg c2VydmVyIGNhbiBiZSBvbGRlciB0aGFuIHRoZSBvbGRlc3QgeG1pbiBvbiB0aGUgcHJpbWFyeQog c2VydmVyLCB3aGljaCBtZWFucyB0dXBsZXMgY2FuIGJlIG1hcmtlZCBMUF9ERUFEIGV2ZW4gd2hl biB0aGV5IGFyZQogc3RpbGwgdmlzaWJsZSBvbiB0aGUgc3RhbmRieS4gV2UgZG9uJ3QgV0FMIGxv ZyB0dXBsZSBMUF9ERUFEIGJpdHMsIGJ1dApAQCAtNzU2LDkgKzcwNSw4IEBAIG5vbi1NVkNDIHNj YW5zIGlzIG5vdCByZXF1aXJlZCBvbiBzdGFuZGJ5IG5vZGVzLiBXZSBzdGlsbCBnZXQgYSBmdWxs CiBjbGVhbnVwIGxvY2sgd2hlbiByZXBsYXlpbmcgVkFDVVVNIHJlY29yZHMgZHVyaW5nIHJlY292 ZXJ5LCBidXQgcmVjb3ZlcnkKIGRvZXMgbm90IG5lZWQgdG8gbG9jayBldmVyeSBsZWFmIHBhZ2Ug KG9ubHkgdGhvc2UgbGVhZiBwYWdlcyB0aGF0IGhhdmUKIGl0ZW1zIHRvIGRlbGV0ZSkgLS0gdGhh dCdzIHN1ZmZpY2llbnQgdG8gYXZvaWQgYnJlYWtpbmcgaW5kZXgtb25seSBzY2FucwotZHVyaW5n IHJlY292ZXJ5IChzZWUgc2VjdGlvbiBhYm92ZSBhYm91dCBtYWtpbmcgVElEIHJlY3ljbGluZyBz YWZlKS4gVGhhdAotbGVhdmVzIGNvbmNlcm4gb25seSBmb3IgcGxhaW4gaW5kZXggc2NhbnMuIChY WFg6IE5vdCBhY3R1YWxseSBjbGVhciB3aHkKLXRoaXMgaXMgdG90YWxseSB1bm5lY2Vzc2FyeSBk dXJpbmcgcmVjb3ZlcnkuKQorZHVyaW5nIHJlY292ZXJ5LiBUaGF0IGxlYXZlcyBjb25jZXJuIG9u bHkgZm9yIHBsYWluIGluZGV4IHNjYW5zLgorKFhYWDogTm90IGFjdHVhbGx5IGNsZWFyIHdoeSB0 aGlzIGlzIHRvdGFsbHkgdW5uZWNlc3NhcnkgZHVyaW5nIHJlY292ZXJ5LikKIAogTVZDQyBzbmFw c2hvdCBwbGFpbiBpbmRleCBzY2FucyBhcmUgYWx3YXlzIHNhZmUsIGZvciB0aGUgc2FtZSByZWFz b25zIHRoYXQKIHRoZXkncmUgc2FmZSBkdXJpbmcgb3JpZ2luYWwgZXhlY3V0aW9uLiAgSGVhcFR1 cGxlU2F0aXNmaWVzVG9hc3QoKSBkb2Vzbid0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5j CmluZGV4IDA1NDcwMzg2MS4uYjljMjc5NTA4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBh Z2UuYwpAQCAtMTA2MCw2ICsxMDYwLDkgQEAgX2J0X3JlbGJ1ZihSZWxhdGlvbiByZWwsIEJ1ZmZl ciBidWYpCiAgKiBMb2NrIGlzIGFjcXVpcmVkIHdpdGhvdXQgYWNxdWlyaW5nIGFub3RoZXIgcGlu LiAgVGhpcyBpcyBsaWtlIGEgcmF3CiAgKiBMb2NrQnVmZmVyKCkgY2FsbCwgYnV0IHBlcmZvcm1z IGV4dHJhIHN0ZXBzIG5lZWRlZCBieSBWYWxncmluZC4KICAqCisgKiBOb3RlOiBfYnRfYmF0Y2hf dW5sb2NrIGluIG5idHNlYXJjaC5jIChpbmRleGFtX3V0aWxfdW5sb2NrX2JhdGNoIHdyYXBwZXIK KyAqIGZ1bmN0aW9uKSBoYXMgbWF0Y2hpbmcgVmFsZ3JpbmQgYnVmZmVyIGxvY2sgaW5zdHJ1bWVu dGF0aW9uLgorICoKICAqIE5vdGU6IENhbGxlciBtYXkgbmVlZCB0byBjYWxsIF9idF9jaGVja3Bh Z2UoKSB3aXRoIGJ1ZiB3aGVuIHBpbiBvbiBidWYKICAqIHdhc24ndCBvcmlnaW5hbGx5IGFjcXVp cmVkIGluIF9idF9nZXRidWYoKSBvciBfYnRfcmVsYW5kZ2V0YnVmKCkuCiAgKi8KQEAgLTExMDEs MTMgKzExMDQsMTkgQEAgX2J0X3VubG9ja2J1ZihSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYpCiAJ ICogQnVmZmVyIGlzIHBpbm5lZCBhbmQgbG9ja2VkLCB3aGljaCBtZWFucyB0aGF0IGl0IGlzIGV4 cGVjdGVkIHRvIGJlCiAJICogZGVmaW5lZCBhbmQgYWRkcmVzc2FibGUuICBDaGVjayB0aGF0IHBy b2FjdGl2ZWx5LgogCSAqLwotCVZBTEdSSU5EX0NIRUNLX01FTV9JU19ERUZJTkVEKEJ1ZmZlckdl dFBhZ2UoYnVmKSwgQkxDS1NaKTsKKyNpZiBkZWZpbmVkKFVTRV9WQUxHUklORCkKKwlQYWdlCQlw YWdlID0gQnVmZmVyR2V0UGFnZShidWYpOworCisJVkFMR1JJTkRfQ0hFQ0tfTUVNX0lTX0RFRklO RUQocGFnZSwgQkxDS1NaKTsKKyNlbmRpZgogCiAJLyogTG9ja0J1ZmZlcigpIGFzc2VydHMgdGhh dCBwaW4gaXMgaGVsZCBieSB0aGlzIGJhY2tlbmQgKi8KIAlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVS X0xPQ0tfVU5MT0NLKTsKIAorI2lmIGRlZmluZWQoVVNFX1ZBTEdSSU5EKQogCWlmICghUmVsYXRp b25Vc2VzTG9jYWxCdWZmZXJzKHJlbCkpCi0JCVZBTEdSSU5EX01BS0VfTUVNX05PQUNDRVNTKEJ1 ZmZlckdldFBhZ2UoYnVmKSwgQkxDS1NaKTsKKwkJVkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1Mo cGFnZSwgQkxDS1NaKTsKKyNlbmRpZgogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRyZWFkcGFnZS5jCmluZGV4IDQ0OGE1MTQxMi4uMmM2YTNkMjZiIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jCkBAIC0zMiw2ICszMiw3IEBAIHR5cGVkZWYgc3RydWN0 IEJUUmVhZFBhZ2VTdGF0ZQogewogCS8qIElucHV0IHBhcmFtZXRlcnMsIHNldCBieSBfYnRfcmVh ZHBhZ2UgZm9yIF9idF9jaGVja2tleXMgKi8KIAlTY2FuRGlyZWN0aW9uIGRpcjsJCQkvKiBjdXJy ZW50IHNjYW4gZGlyZWN0aW9uICovCisJQmxvY2tOdW1iZXIgY3VycnBhZ2U7CQkvKiBjdXJyZW50 IHBhZ2UgYmVpbmcgcmVhZCAqLwogCU9mZnNldE51bWJlciBtaW5vZmY7CQkvKiBMb3dlc3Qgbm9u LXBpdm90IHR1cGxlJ3Mgb2Zmc2V0ICovCiAJT2Zmc2V0TnVtYmVyIG1heG9mZjsJCS8qIEhpZ2hl c3Qgbm9uLXBpdm90IHR1cGxlJ3Mgb2Zmc2V0ICovCiAJSW5kZXhUdXBsZQlmaW5hbHR1cDsJCS8q IE5lZWRlZCBieSBzY2FucyB3aXRoIGFycmF5IGtleXMgKi8KQEAgLTYzLDE0ICs2NCwxMyBAQCBz dGF0aWMgYm9vbCBfYnRfc2NhbmJlaGluZF9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpciwKIAkJCQkJCQkJCSBJbmRleFR1cGxlIGZpbmFsdHVwKTsKIHN0YXRp YyBib29sIF9idF9vcHBvZGlyX2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyLAogCQkJCQkJCQkgIEluZGV4VHVwbGUgZmluYWx0dXApOwotc3RhdGljIHZvaWQg X2J0X3NhdmVpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJCQkJCSBPZmZz ZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApOwotc3RhdGljIGludAlfYnRfc2V0dXBw b3N0aW5naXRlbXMoQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAotCQkJCQkJCQkgIE9m ZnNldE51bWJlciBvZmZudW0sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqaGVhcFRpZCwKLQkJCQkJ CQkJICBJbmRleFR1cGxlIGl0dXApOwotc3RhdGljIGlubGluZSB2b2lkIF9idF9zYXZlcG9zdGlu Z2l0ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAotCQkJCQkJCQkJICAgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKLQkJCQkJCQkJCSAgIEl0ZW1Qb2ludGVyIGhlYXBUaWQsIGludCB0dXBs ZU9mZnNldCk7CitzdGF0aWMgdm9pZCBfYnRfc2F2ZWl0ZW0oSW5kZXhTY2FuQmF0Y2ggbmV3YmF0 Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCQkgSW5kZXhUdXBs ZSBpdHVwLCBpbnQgKnR1cGxlT2Zmc2V0KTsKK3N0YXRpYyBpbnQJX2J0X3NldHVwcG9zdGluZ2l0 ZW1zKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LAorCQkJCQkJCQkgIE9m ZnNldE51bWJlciBvZmZudW0sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGFibGVUaWQsCisJCQkJ CQkJCSAgSW5kZXhUdXBsZSBpdHVwLCBpbnQgKnR1cGxlT2Zmc2V0KTsKK3N0YXRpYyBpbmxpbmUg dm9pZCBfYnRfc2F2ZXBvc3RpbmdpdGVtKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRl bUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJCQkJCQkJICAgSXRlbVBvaW50ZXIgdGFi bGVUaWQsIGludCBiYXNlT2Zmc2V0KTsKIHN0YXRpYyBib29sIF9idF9jaGVja2tleXMoSW5kZXhT Y2FuRGVzYyBzY2FuLCBCVFJlYWRQYWdlU3RhdGUgKnBzdGF0ZSwgYm9vbCBhcnJheUtleXMsCiAJ CQkJCQkgIEluZGV4VHVwbGUgdHVwbGUsIGludCB0dXBuYXR0cyk7CiBzdGF0aWMgYm9vbCBfYnRf Y2hlY2tfY29tcGFyZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLApAQCAt MTExLDE1ICsxMTEsMTUgQEAgc3RhdGljIGJvb2wgX2J0X3ZlcmlmeV9rZXlzX3dpdGhfYXJyYXlr ZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKIAogLyoKLSAqCV9idF9yZWFkcGFnZSgpIC0tIExv YWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIHNvLT5jdXJyUG9zCisgKglfYnRf cmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBuZXdi YXRjaC4KICAqCi0gKiBDYWxsZXIgbXVzdCBoYXZlIHBpbm5lZCBhbmQgcmVhZC1sb2NrZWQgc28t PmN1cnJQb3MuYnVmOyB0aGUgYnVmZmVyJ3Mgc3RhdGUKLSAqIGlzIG5vdCBjaGFuZ2VkIGhlcmUu ICBBbHNvLCBjdXJyUG9zLm1vcmVMZWZ0IGFuZCBtb3JlUmlnaHQgbXVzdCBiZSB2YWxpZDsKLSAq IHRoZXkgYXJlIHVwZGF0ZWQgYXMgYXBwcm9wcmlhdGUuICBBbGwgb3RoZXIgZmllbGRzIG9mIHNv LT5jdXJyUG9zIGFyZQorICogQ2FsbGVyIG11c3QgaGF2ZSBwaW5uZWQgYW5kIHJlYWQtbG9ja2Vk IG5ld2JhdGNoLmJ1ZjsgdGhlIGJ1ZmZlcidzIHN0YXRlIGlzCisgKiBub3QgY2hhbmdlZCBoZXJl LiAgQWxzbywgbmV3YmF0Y2gncyBtb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IG11c3QgYmUgdmFsaWQ7 CisgKiB0aGV5IGFyZSB1cGRhdGVkIGFzIGFwcHJvcHJpYXRlLiAgQWxsIG90aGVyIGZpZWxkcyBv ZiBuZXdiYXRjaCBhcmUKICAqIGluaXRpYWxpemVkIGZyb20gc2NyYXRjaCBoZXJlLgogICoKICAq IFdlIHNjYW4gdGhlIGN1cnJlbnQgcGFnZSBzdGFydGluZyBhdCBvZmZudW0gYW5kIG1vdmluZyBp biB0aGUgaW5kaWNhdGVkCi0gKiBkaXJlY3Rpb24uICBBbGwgaXRlbXMgbWF0Y2hpbmcgdGhlIHNj YW4ga2V5cyBhcmUgbG9hZGVkIGludG8gY3VyclBvcy5pdGVtcy4KKyAqIGRpcmVjdGlvbi4gIEFs bCBpdGVtcyBtYXRjaGluZyB0aGUgc2NhbiBrZXlzIGFyZSBzYXZlZCBpbiBuZXdiYXRjaC5pdGVt cy4KICAqIG1vcmVMZWZ0IG9yIG1vcmVSaWdodCAoYXMgYXBwcm9wcmlhdGUpIGlzIGNsZWFyZWQg aWYgX2J0X2NoZWNra2V5cyByZXBvcnRzCiAgKiB0aGF0IHRoZXJlIGNhbiBiZSBubyBtb3JlIG1h dGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbgogICogKGNvdWxkIGp1 c3QgYmUgZm9yIHRoZSBjdXJyZW50IHByaW1pdGl2ZSBpbmRleCBzY2FuIHdoZW4gc2NhbiBoYXMg YXJyYXlzKS4KQEAgLTEzMSwxMSArMTMxLDEyIEBAIHN0YXRpYyBib29sIF9idF92ZXJpZnlfa2V5 c193aXRoX2FycmF5a2V5cyhJbmRleFNjYW5EZXNjIHNjYW4pOwogICogUmV0dXJucyB0cnVlIGlm IGFueSBtYXRjaGluZyBpdGVtcyBmb3VuZCBvbiB0aGUgcGFnZSwgZmFsc2UgaWYgbm9uZS4KICAq LwogYm9vbAotX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIsIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkgYm9vbCBmaXJzdHBhZ2UpCitfYnRfcmVhZHBh Z2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgU2NhbkRpcmVj dGlvbiBkaXIsCisJCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgYm9vbCBmaXJzdHBhZ2UpCiB7CiAJ UmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAlCVFNjYW5PcGFxdWUgc28gPSAo QlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRCYXRjaERhdGEgKmJ0bmV3YmF0Y2ggPSBC VEJhdGNoR2V0RGF0YShzY2FuLCBuZXdiYXRjaCk7CiAJUGFnZQkJcGFnZTsKIAlCVFBhZ2VPcGFx dWUgb3BhcXVlOwogCU9mZnNldE51bWJlciBtaW5vZmY7CkBAIC0xNDQsMjMgKzE0NSwyMCBAQCBf YnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKIAlib29sCQlhcnJheUtleXMsCiAJCQkJaWdub3JlX2tpbGxlZF90dXBs ZXMgPSBzY2FuLT5pZ25vcmVfa2lsbGVkX3R1cGxlczsKIAlpbnQJCQlpdGVtSW5kZXgsCisJCQkJ dHVwbGVPZmZzZXQgPSAwLAogCQkJCWluZG5hdHRzOwogCiAJLyogc2F2ZSB0aGUgcGFnZS9idWZm ZXIgYmxvY2sgbnVtYmVyLCBhbG9uZyB3aXRoIGl0cyBzaWJsaW5nIGxpbmtzICovCi0JcGFnZSA9 IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShi dG5ld2JhdGNoLT5idWYpOwogCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKLQlzby0+ Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKHNvLT5jdXJyUG9zLmJ1Zik7 Ci0Jc28tPmN1cnJQb3MucHJldlBhZ2UgPSBvcGFxdWUtPmJ0cG9fcHJldjsKLQlzby0+Y3VyclBv cy5uZXh0UGFnZSA9IG9wYXF1ZS0+YnRwb19uZXh0OwotCS8qIGRlbGF5IHNldHRpbmcgc28tPmN1 cnJQb3MubHNuIHVudGlsIF9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbiAqLwotCXBzdGF0ZS5k aXIgPSBzby0+Y3VyclBvcy5kaXIgPSBkaXI7Ci0Jc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0 ID0gMDsKKwlwc3RhdGUuY3VycnBhZ2UgPSBidG5ld2JhdGNoLT5jdXJyUGFnZSA9IEJ1ZmZlckdl dEJsb2NrTnVtYmVyKGJ0bmV3YmF0Y2gtPmJ1Zik7CisJYnRuZXdiYXRjaC0+cHJldlBhZ2UgPSBv cGFxdWUtPmJ0cG9fcHJldjsKKwlidG5ld2JhdGNoLT5uZXh0UGFnZSA9IG9wYXF1ZS0+YnRwb19u ZXh0OworCXBzdGF0ZS5kaXIgPSBuZXdiYXRjaC0+ZGlyID0gZGlyOwogCiAJLyogZWl0aGVyIG1v cmVSaWdodCBvciBtb3JlTGVmdCBzaG91bGQgYmUgc2V0IG5vdyAobWF5IGJlIHVuc2V0IGxhdGVy KSAqLwotCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPyBzby0+Y3VyclBvcy5t b3JlUmlnaHQgOgotCQkgICBzby0+Y3VyclBvcy5tb3JlTGVmdCk7CisJQXNzZXJ0KFNjYW5EaXJl Y3Rpb25Jc0ZvcndhcmQoZGlyKSA/IGJ0bmV3YmF0Y2gtPm1vcmVSaWdodCA6IGJ0bmV3YmF0Y2gt Pm1vcmVMZWZ0KTsKIAlBc3NlcnQoIVBfSUdOT1JFKG9wYXF1ZSkpOwotCUFzc2VydChCVFNjYW5Q b3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwogCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7CiAK IAkvKiBpbml0aWFsaXplIGxvY2FsIHZhcmlhYmxlcyAqLwpAQCAtMTg4LDE0ICsxODYsMTQgQEAg X2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNl dE51bWJlciBvZmZudW0sCiAJewogCQkvKiBhbGxvdyBuZXh0L3ByZXYgcGFnZSB0byBiZSByZWFk IGJ5IG90aGVyIHdvcmtlciB3aXRob3V0IGRlbGF5ICovCiAJCWlmIChTY2FuRGlyZWN0aW9uSXNG b3J3YXJkKGRpcikpCi0JCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShzY2FuLCBzby0+Y3VyclBvcy5u ZXh0UGFnZSwKLQkJCQkJCQkJIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJCV9idF9wYXJhbGxl bF9yZWxlYXNlKHNjYW4sIGJ0bmV3YmF0Y2gtPm5leHRQYWdlLAorCQkJCQkJCQkgYnRuZXdiYXRj aC0+Y3VyclBhZ2UpOwogCQllbHNlCi0JCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShzY2FuLCBzby0+ Y3VyclBvcy5wcmV2UGFnZSwKLQkJCQkJCQkJIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJCV9i dF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIGJ0bmV3YmF0Y2gtPnByZXZQYWdlLAorCQkJCQkJCQkg YnRuZXdiYXRjaC0+Y3VyclBhZ2UpOwogCX0KIAotCVByZWRpY2F0ZUxvY2tQYWdlKHJlbCwgc28t PmN1cnJQb3MuY3VyclBhZ2UsIHNjYW4tPnhzX3NuYXBzaG90KTsKKwlQcmVkaWNhdGVMb2NrUGFn ZShyZWwsIHBzdGF0ZS5jdXJycGFnZSwgc2Nhbi0+eHNfc25hcHNob3QpOwogCiAJaWYgKFNjYW5E aXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7CkBAIC0yMTIsMTEgKzIxMCwxMSBAQCBfYnRfcmVh ZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVy IG9mZm51bSwKIAkJCQkJIV9idF9zY2FuYmVoaW5kX2NoZWNra2V5cyhzY2FuLCBkaXIsIHBzdGF0 ZS5maW5hbHR1cCkpCiAJCQkJewogCQkJCQkvKiBTY2hlZHVsZSBhbm90aGVyIHByaW1pdGl2ZSBp bmRleCBzY2FuIGFmdGVyIGFsbCAqLwotCQkJCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSBmYWxz ZTsKKwkJCQkJYnRuZXdiYXRjaC0+bW9yZVJpZ2h0ID0gZmFsc2U7CiAJCQkJCXNvLT5uZWVkUHJp bVNjYW4gPSB0cnVlOwogCQkJCQlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbikKIAkJCQkJCV9idF9w YXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLAotCQkJCQkJCQkJCQkJCSAgIHNvLT5jdXJy UG9zLmN1cnJQYWdlKTsKKwkJCQkJCQkJCQkJCQkgICBidG5ld2JhdGNoLT5jdXJyUGFnZSk7CiAJ CQkJCXJldHVybiBmYWxzZTsKIAkJCQl9CiAJCQl9CkBAIC0yODAsMjYgKzI3OCwyNiBAQCBfYnRf cmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVt YmVyIG9mZm51bSwKIAkJCQlpZiAoIUJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpCiAJCQkJewog CQkJCQkvKiBSZW1lbWJlciBpdCAqLwotCQkJCQlfYnRfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRleCwg b2ZmbnVtLCBpdHVwKTsKKwkJCQkJX2J0X3NhdmVpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9m Zm51bSwgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAkJCQkJaXRlbUluZGV4Kys7CiAJCQkJfQogCQkJ CWVsc2UKIAkJCQl7Ci0JCQkJCWludAkJCXR1cGxlT2Zmc2V0OworCQkJCQlpbnQJCQliYXNlT2Zm c2V0OwogCiAJCQkJCS8qIFNldCB1cCBwb3N0aW5nIGxpc3Qgc3RhdGUgKGFuZCByZW1lbWJlciBm aXJzdCBUSUQpICovCi0JCQkJCXR1cGxlT2Zmc2V0ID0KLQkJCQkJCV9idF9zZXR1cHBvc3Rpbmdp dGVtcyhzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCWJhc2VPZmZzZXQgPQorCQkJCQkJX2J0 X3NldHVwcG9zdGluZ2l0ZW1zKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJ CQkJICBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwgMCksCi0JCQkJCQkJCQkJCSAgaXR1cCk7 CisJCQkJCQkJCQkJCSAgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAkJCQkJaXRlbUluZGV4Kys7CiAK IAkJCQkJLyogUmVtZW1iZXIgYWxsIGxhdGVyIFRJRHMgKG11c3QgYmUgYXQgbGVhc3Qgb25lKSAq LwogCQkJCQlmb3IgKGludCBpID0gMTsgaSA8IEJUcmVlVHVwbGVHZXROUG9zdGluZyhpdHVwKTsg aSsrKQogCQkJCQl7Ci0JCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKHNvLCBpdGVtSW5kZXgsIG9m Zm51bSwKKwkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2Zm bnVtLAogCQkJCQkJCQkJCQlCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwgaSksCi0JCQkJCQkJ CQkJCXR1cGxlT2Zmc2V0KTsKKwkJCQkJCQkJCQkJYmFzZU9mZnNldCk7CiAJCQkJCQlpdGVtSW5k ZXgrKzsKIAkJCQkJfQogCQkJCX0KQEAgLTMzOSwxMiArMzM3LDExIEBAIF9idF9yZWFkcGFnZShJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVt LAogCQl9CiAKIAkJaWYgKCFwc3RhdGUuY29udGludWVzY2FuKQotCQkJc28tPmN1cnJQb3MubW9y ZVJpZ2h0ID0gZmFsc2U7CisJCQlidG5ld2JhdGNoLT5tb3JlUmlnaHQgPSBmYWxzZTsKIAogCQlB c3NlcnQoaXRlbUluZGV4IDw9IE1heFRJRHNQZXJCVHJlZVBhZ2UpOwotCQlzby0+Y3VyclBvcy5m aXJzdEl0ZW0gPSAwOwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7Ci0J CXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IDA7CisJCW5ld2JhdGNoLT5maXJzdEl0ZW0gPSAwOwor CQluZXdiYXRjaC0+bGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwogCX0KIAllbHNlCiAJewpAQCAt MzYxLDExICszNTgsMTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJCSFfYnRfc2NhbmJlaGluZF9j aGVja2tleXMoc2NhbiwgZGlyLCBwc3RhdGUuZmluYWx0dXApKQogCQkJCXsKIAkJCQkJLyogU2No ZWR1bGUgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiBhZnRlciBhbGwgKi8KLQkJCQkJc28t PmN1cnJQb3MubW9yZUxlZnQgPSBmYWxzZTsKKwkJCQkJYnRuZXdiYXRjaC0+bW9yZUxlZnQgPSBm YWxzZTsKIAkJCQkJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7CiAJCQkJCWlmIChzY2FuLT5wYXJh bGxlbF9zY2FuKQogCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sCi0J CQkJCQkJCQkJCQkJICAgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJCQkJCQkJCQkJCSAgIGJ0 bmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCX0KIAkJCX0KQEAg LTQ2NiwyNyArNDYzLDI3IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCXsKIAkJCQkJLyogUmVtZW1i ZXIgaXQgKi8KIAkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCV9idF9zYXZlaXRlbShzbywgaXRlbUlu ZGV4LCBvZmZudW0sIGl0dXApOworCQkJCQlfYnRfc2F2ZWl0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRl eCwgb2ZmbnVtLCBpdHVwLCAmdHVwbGVPZmZzZXQpOwogCQkJCX0KIAkJCQllbHNlCiAJCQkJewog CQkJCQl1aW50MTYJCW5pdGVtcyA9IEJUcmVlVHVwbGVHZXROUG9zdGluZyhpdHVwKTsKLQkJCQkJ aW50CQkJdHVwbGVPZmZzZXQ7CisJCQkJCWludAkJCWJhc2VPZmZzZXQ7CiAKIAkJCQkJLyogU2V0 IHVwIHBvc3RpbmcgbGlzdCBzdGF0ZSAoYW5kIHJlbWVtYmVyIGxhc3QgVElEKSAqLwogCQkJCQlp dGVtSW5kZXgtLTsKLQkJCQkJdHVwbGVPZmZzZXQgPQotCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0 ZW1zKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJYmFzZU9mZnNldCA9CisJCQkJCQlfYnRf c2V0dXBwb3N0aW5naXRlbXMobmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJ CQkgIEJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBuaXRlbXMgLSAxKSwKLQkJCQkJCQkJCQkJ ICBpdHVwKTsKKwkJCQkJCQkJCQkJICBpdHVwLCAmdHVwbGVPZmZzZXQpOwogCiAJCQkJCS8qIFJl bWVtYmVyIGFsbCBwcmlvciBUSURzIChtdXN0IGJlIGF0IGxlYXN0IG9uZSkgKi8KIAkJCQkJZm9y IChpbnQgaSA9IG5pdGVtcyAtIDI7IGkgPj0gMDsgaS0tKQogCQkJCQl7CiAJCQkJCQlpdGVtSW5k ZXgtLTsKLQkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAor CQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJ CQkJCQkJCQkJCUJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBpKSwKLQkJCQkJCQkJCQkJdHVw bGVPZmZzZXQpOworCQkJCQkJCQkJCQliYXNlT2Zmc2V0KTsKIAkJCQkJfQogCQkJCX0KIAkJCX0K QEAgLTUwMiwxMiArNDk5LDExIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkgKiBiZSBmb3VuZCB0aGVy ZQogCQkgKi8KIAkJaWYgKCFwc3RhdGUuY29udGludWVzY2FuKQotCQkJc28tPmN1cnJQb3MubW9y ZUxlZnQgPSBmYWxzZTsKKwkJCWJ0bmV3YmF0Y2gtPm1vcmVMZWZ0ID0gZmFsc2U7CiAKIAkJQXNz ZXJ0KGl0ZW1JbmRleCA+PSAwKTsKLQkJc28tPmN1cnJQb3MuZmlyc3RJdGVtID0gaXRlbUluZGV4 OwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IE1heFRJRHNQZXJCVHJlZVBhZ2UgLSAxOwotCQlz by0+Y3VyclBvcy5pdGVtSW5kZXggPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0gMTsKKwkJbmV3YmF0 Y2gtPmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKKwkJbmV3YmF0Y2gtPmxhc3RJdGVtID0gTWF4VElE c1BlckJUcmVlUGFnZSAtIDE7CiAJfQogCiAJLyoKQEAgLTUyNCw3ICs1MjAsNyBAQCBfYnRfcmVh ZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVy IG9mZm51bSwKIAkgKi8KIAlBc3NlcnQoIXBzdGF0ZS5mb3JjZW5vbnJlcXVpcmVkKTsKIAotCXJl dHVybiAoc28tPmN1cnJQb3MuZmlyc3RJdGVtIDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKKwly ZXR1cm4gKG5ld2JhdGNoLT5maXJzdEl0ZW0gPD0gbmV3YmF0Y2gtPmxhc3RJdGVtKTsKIH0KIAog LyoKQEAgLTEwMjcsOTAgKzEwMjMsOTEgQEAgX2J0X29wcG9kaXJfY2hlY2trZXlzKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJcmV0dXJuIHRydWU7CiB9CiAKLS8qIFNh dmUgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gKi8KKy8q IFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIG5ld2JhdGNoLml0ZW1zW2l0ZW1JbmRleF0gKi8KIHN0 YXRpYyB2b2lkCi1fYnRfc2F2ZWl0ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAot CQkJIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUgaXR1cCkKK19idF9zYXZlaXRlbShJ bmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51 bSwKKwkJCSBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpCiB7Ci0JQlRTY2FuUG9z SXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKLQogCUFzc2Vy dCghQlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkgJiYgIUJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkp OwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSBpdHVwLT50X3RpZDsKLQljdXJySXRlbS0+aW5kZXhP ZmZzZXQgPSBvZmZudW07Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQorCW5ld2JhdGNoLT5pdGVtc1tp dGVtSW5kZXhdLnRhYmxlVGlkID0gaXR1cC0+dF90aWQ7CisJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1J bmRleF0uaW5kZXhPZmZzZXQgPSBvZmZudW07CisKKwlpZiAobmV3YmF0Y2gtPmN1cnJUdXBsZXMp CiAJewogCQlTaXplCQlpdHVwc3ogPSBJbmRleFR1cGxlU2l6ZShpdHVwKTsKIAotCQljdXJySXRl bS0+dHVwbGVPZmZzZXQgPSBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQ7Ci0JCW1lbWNweShz by0+Y3VyclR1cGxlcyArIHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCwgaXR1cCwgaXR1cHN6 KTsKLQkJc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0ICs9IE1BWEFMSUdOKGl0dXBzeik7CisJ CW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnR1cGxlT2Zmc2V0ID0gKnR1cGxlT2Zmc2V0Owor CQltZW1jcHkobmV3YmF0Y2gtPmN1cnJUdXBsZXMgKyAqdHVwbGVPZmZzZXQsIGl0dXAsIGl0dXBz eik7CisJCSp0dXBsZU9mZnNldCArPSBNQVhBTElHTihpdHVwc3opOwogCX0KIH0KIAogLyoKICAq IFNldHVwIHN0YXRlIHRvIHNhdmUgVElEcy9pdGVtcyBmcm9tIGEgc2luZ2xlIHBvc3RpbmcgbGlz dCB0dXBsZS4KICAqCi0gKiBTYXZlcyBhbiBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQb3MuaXRl bXNbaXRlbUluZGV4XSBmb3IgVElEIHRoYXQgaXMKLSAqIHJldHVybmVkIHRvIHNjYW4gZmlyc3Qu ICBTZWNvbmQgb3Igc3Vic2VxdWVudCBUSURzIGZvciBwb3N0aW5nIGxpc3Qgc2hvdWxkCi0gKiBi ZSBzYXZlZCBieSBjYWxsaW5nIF9idF9zYXZlcG9zdGluZ2l0ZW0oKS4KKyAqIFNhdmVzIGFuIGlu ZGV4IGl0ZW0gaW50byBuZXdiYXRjaC5pdGVtc1tpdGVtSW5kZXhdIGZvciBUSUQgdGhhdCBpcyBy ZXR1cm5lZAorICogdG8gc2NhbiBmaXJzdC4gIFNlY29uZCBvciBzdWJzZXF1ZW50IFRJRHMgZm9y IHBvc3RpbmcgbGlzdCBzaG91bGQgYmUgc2F2ZWQKKyAqIGJ5IGNhbGxpbmcgX2J0X3NhdmVwb3N0 aW5naXRlbSgpLgogICoKLSAqIFJldHVybnMgYW4gb2Zmc2V0IGludG8gdHVwbGUgc3RvcmFnZSBz cGFjZSB0aGF0IG1haW4gdHVwbGUgaXMgc3RvcmVkIGF0IGlmCi0gKiBuZWVkZWQuCisgKiBSZXR1 cm5zIGJhc2VPZmZzZXQsIGFuIG9mZnNldCBpbnRvIHR1cGxlIHN0b3JhZ2Ugc3BhY2UgdGhhdCBt YWluIHR1cGxlIGlzCisgKiBzdG9yZWQgYXQgaWYgbmVlZGVkLgogICovCiBzdGF0aWMgaW50Ci1f YnRfc2V0dXBwb3N0aW5naXRlbXMoQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LCBPZmZz ZXROdW1iZXIgb2ZmbnVtLAotCQkJCQkgIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqaGVhcFRpZCwg SW5kZXhUdXBsZSBpdHVwKQorX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEluZGV4U2NhbkJhdGNoIG5l d2JhdGNoLCBpbnQgaXRlbUluZGV4LAorCQkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIGNvbnN0 IEl0ZW1Qb2ludGVyRGF0YSAqdGFibGVUaWQsCisJCQkJCSAgSW5kZXhUdXBsZSBpdHVwLCBpbnQg KnR1cGxlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9z Lml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKml0ZW0gPSAmbmV3YmF0Y2gt Pml0ZW1zW2l0ZW1JbmRleF07CiAKIAlBc3NlcnQoQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7 CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlkOwotCWN1cnJJdGVtLT5pbmRleE9mZnNl dCA9IG9mZm51bTsKLQlpZiAoc28tPmN1cnJUdXBsZXMpCisJaXRlbS0+dGFibGVUaWQgPSAqdGFi bGVUaWQ7CisJaXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CisKKwlpZiAobmV3YmF0Y2gtPmN1 cnJUdXBsZXMpCiAJewogCQkvKiBTYXZlIGJhc2UgSW5kZXhUdXBsZSAodHJ1bmNhdGUgcG9zdGlu ZyBsaXN0KSAqLwogCQlJbmRleFR1cGxlCWJhc2U7CiAJCVNpemUJCWl0dXBzeiA9IEJUcmVlVHVw bGVHZXRQb3N0aW5nT2Zmc2V0KGl0dXApOwogCiAJCWl0dXBzeiA9IE1BWEFMSUdOKGl0dXBzeik7 Ci0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldDsK LQkJYmFzZSA9IChJbmRleFR1cGxlKSAoc28tPmN1cnJUdXBsZXMgKyBzby0+Y3VyclBvcy5uZXh0 VHVwbGVPZmZzZXQpOworCQlpdGVtLT50dXBsZU9mZnNldCA9ICp0dXBsZU9mZnNldDsKKwkJYmFz ZSA9IChJbmRleFR1cGxlKSAobmV3YmF0Y2gtPmN1cnJUdXBsZXMgKyAqdHVwbGVPZmZzZXQpOwog CQltZW1jcHkoYmFzZSwgaXR1cCwgaXR1cHN6KTsKIAkJLyogRGVmZW5zaXZlbHkgcmVkdWNlIHdv cmsgYXJlYSBpbmRleCB0dXBsZSBoZWFkZXIgc2l6ZSAqLwogCQliYXNlLT50X2luZm8gJj0gfklO REVYX1NJWkVfTUFTSzsKIAkJYmFzZS0+dF9pbmZvIHw9IGl0dXBzejsKLQkJc28tPmN1cnJQb3Mu bmV4dFR1cGxlT2Zmc2V0ICs9IGl0dXBzejsKKwkJKnR1cGxlT2Zmc2V0ICs9IGl0dXBzejsKIAot CQlyZXR1cm4gY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0OworCQlyZXR1cm4gaXRlbS0+dHVwbGVPZmZz ZXQ7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKIC8qCi0gKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50 byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdIGZvciBjdXJyZW50IHBvc3RpbmcKKyAqIFNh dmUgYW4gaW5kZXggaXRlbSBpbnRvIG5ld2JhdGNoLml0ZW1zW2l0ZW1JbmRleF0gZm9yIGN1cnJl bnQgcG9zdGluZwogICogdHVwbGUuCiAgKgogICogQXNzdW1lcyB0aGF0IF9idF9zZXR1cHBvc3Rp bmdpdGVtcygpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciBjdXJyZW50Ci0gKiBwb3N0aW5n IGxpc3QgdHVwbGUuICBDYWxsZXIgcGFzc2VzIGl0cyByZXR1cm4gdmFsdWUgYXMgdHVwbGVPZmZz ZXQuCisgKiBwb3N0aW5nIGxpc3QgdHVwbGUuICBDYWxsZXIgcGFzc2VzIGl0cyByZXR1cm4gdmFs dWUgYXMgYmFzZU9mZnNldC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCi1fYnRfc2F2ZXBvc3Rp bmdpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51 bSwKLQkJCQkJSXRlbVBvaW50ZXIgaGVhcFRpZCwgaW50IHR1cGxlT2Zmc2V0KQorX2J0X3NhdmVw b3N0aW5naXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKKwkJCQkJSXRlbVBvaW50ZXIgdGFibGVUaWQsIGludCBiYXNlT2Zmc2V0 KQogewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1J bmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKml0ZW0gPSAmbmV3YmF0Y2gtPml0ZW1zW2l0ZW1J bmRleF07CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlkOwotCWN1cnJJdGVtLT5pbmRl eE9mZnNldCA9IG9mZm51bTsKKwlpdGVtLT50YWJsZVRpZCA9ICp0YWJsZVRpZDsKKwlpdGVtLT5p bmRleE9mZnNldCA9IG9mZm51bTsKIAogCS8qCiAJICogSGF2ZSBpbmRleC1vbmx5IHNjYW5zIHJl dHVybiB0aGUgc2FtZSBiYXNlIEluZGV4VHVwbGUgZm9yIGV2ZXJ5IFRJRAogCSAqIHRoYXQgb3Jp Z2luYXRlcyBmcm9tIHRoZSBzYW1lIHBvc3RpbmcgbGlzdAogCSAqLwotCWlmIChzby0+Y3VyclR1 cGxlcykKLQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gdHVwbGVPZmZzZXQ7CisJaWYgKG5ld2Jh dGNoLT5jdXJyVHVwbGVzKQorCQlpdGVtLT50dXBsZU9mZnNldCA9IGJhc2VPZmZzZXQ7CiB9CiAK ICNkZWZpbmUgTE9PS19BSEVBRF9SRVFVSVJFRF9SRUNIRUNLUyAJMwpAQCAtMjgyMSwxNCArMjgx OCwxNSBAQCBuZXdfcHJpbV9zY2FuOgogCSAqCiAJICogTm90ZTogV2UgbWFrZSBhIHNvZnQgYXNz dW1wdGlvbiB0aGF0IHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uIHdpbGwKIAkgKiBhbHNvIGJl IHVzZWQgd2l0aGluIF9idF9uZXh0LCB3aGVuIGl0IGlzIGFza2VkIHRvIHN0ZXAgb2ZmIHRoaXMg cGFnZS4KLQkgKiBJdCBpcyB1cCB0byBfYnRfbmV4dCB0byBjYW5jZWwgdGhpcyBzY2hlZHVsZWQg cHJpbWl0aXZlIGluZGV4IHNjYW4KLQkgKiB3aGVuZXZlciBpdCBzdGVwcyB0byBhIHBhZ2UgaW4g dGhlIGRpcmVjdGlvbiBvcHBvc2l0ZSBjdXJyUG9zLmRpci4KKwkgKiBUaGUgc2NhbiBkaXJlY3Rp b24gbWlnaHQgYmUgcmV2ZXJzZWQgZHVyaW5nIHRoZSBuZXh0IGFtZ2V0YmF0Y2ggY2FsbCwKKwkg KiBidXQgbm90IGJlZm9yZSBhIGNhbGwgdG8gYnRwb3NyZXNldCB0aGF0IHJlc2V0cyB0aGUgYXJy YXkga2V5cyB0byB0aGUKKwkgKiBmaXJzdCBwb3NpdGlvbnMvZWxlbWVudHMgdXNlZCB3aGVuIHNj YW5uaW5nIGluIHRoaXMgb3RoZXIgZGlyZWN0aW9uLgogCSAqLwogCXBzdGF0ZS0+Y29udGludWVz Y2FuID0gZmFsc2U7CS8qIFRlbGwgX2J0X3JlYWRwYWdlIHdlJ3JlIGRvbmUuLi4gKi8KIAlzby0+ bmVlZFByaW1TY2FuID0gdHJ1ZTsJLyogLi4uYnV0IGNhbGwgX2J0X2ZpcnN0IGFnYWluICovCiAK IAlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbikKLQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVk dWxlKHNjYW4sIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJX2J0X3BhcmFsbGVsX3ByaW1zY2Fu X3NjaGVkdWxlKHNjYW4sIHBzdGF0ZS0+Y3VycnBhZ2UpOwogCiAJLyogQ2FsbGVyJ3MgdHVwbGUg ZG9lc24ndCBtYXRjaCB0aGUgbmV3IHF1YWwgKi8KIAlyZXR1cm4gZmFsc2U7CkBAIC0yODQxLDkg KzI4MzksOCBAQCBlbmRfdG9wbGV2ZWxfc2NhbjoKIAkgKiBUaGlzIGVuZHMgdGhlIGVudGlyZSB0 b3AtbGV2ZWwgc2NhbiBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbi4KIAkgKgogCSAqIE5v dGU6IFRoZSBzY2FuJ3MgYXJyYXlzIChpbmNsdWRpbmcgYW55IG5vbi1yZXF1aXJlZCBhcnJheXMp IGFyZSBub3cgaW4KLQkgKiB0aGVpciBmaW5hbCBwb3NpdGlvbnMgZm9yIHRoZSBjdXJyZW50IHNj YW4gZGlyZWN0aW9uLiAgSWYgdGhlIHNjYW4KLQkgKiBkaXJlY3Rpb24gaGFwcGVucyB0byBjaGFu Z2UsIHRoZW4gdGhlIGFycmF5cyB3aWxsIGFscmVhZHkgYmUgaW4gdGhlaXIKLQkgKiBmaXJzdCBw b3NpdGlvbnMgZm9yIHdoYXQgd2lsbCB0aGVuIGJlIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9u LgorCSAqIHRoZWlyIGZpbmFsIHBvc2l0aW9ucyBmb3IgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rp b24uICBUaGlzIGlzIGp1c3QKKwkgKiBkZWZlbnNpdmUuCiAJICovCiAJcHN0YXRlLT5jb250aW51 ZXNjYW4gPSBmYWxzZTsJLyogVGVsbCBfYnRfcmVhZHBhZ2Ugd2UncmUgZG9uZS4uLiAqLwogCXNv LT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsJLyogLi4uYW5kIGRvbid0IGNhbGwgX2J0X2ZpcnN0IGFn YWluICovCkBAIC0yOTEwLDE3ICsyOTA3LDkgQEAgX2J0X2FkdmFuY2VfYXJyYXlfa2V5c19pbmNy ZW1lbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKIAkvKgogCSAqIFRo ZSBhcnJheSBrZXlzIGFyZSBub3cgZXhoYXVzdGVkLgogCSAqCi0JICogUmVzdG9yZSB0aGUgYXJy YXkga2V5cyB0byB0aGUgc3RhdGUgdGhleSB3ZXJlIGluIGltbWVkaWF0ZWx5IGJlZm9yZSB3ZQot CSAqIHdlcmUgY2FsbGVkLiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGFycmF5cyBvbmx5IGV2ZXIg cmF0Y2hldCBpbiB0aGUKLQkgKiBjdXJyZW50IHNjYW4gZGlyZWN0aW9uLgotCSAqCi0JICogV2l0 aG91dCB0aGlzLCBzY2FucyBjb3VsZCBvdmVybG9vayBtYXRjaGluZyB0dXBsZXMgd2hlbiB0aGUg c2NhbgotCSAqIGRpcmVjdGlvbiBnZXRzIHJldmVyc2VkIGp1c3QgYmVmb3JlIGJ0Z2V0dHVwbGUg cnVucyBvdXQgb2YgaXRlbXMgdG8KLQkgKiByZXR1cm4sIGJ1dCBqdXN0IGFmdGVyIF9idF9yZWFk cGFnZSBwcmVwYXJlcyBhbGwgdGhlIGl0ZW1zIGZyb20gdGhlCi0JICogc2NhbidzIGZpbmFsIHBh Z2UgaW4gc28tPmN1cnJQb3MuICBXaGVuIHdlJ3JlIG9uIHRoZSBmaW5hbCBwYWdlIGl0IGlzCi0J ICogdHlwaWNhbCBmb3Igc28tPmN1cnJQb3MgdG8gZ2V0IGludmFsaWRhdGVkIG9uY2UgYnRnZXR0 dXBsZSBmaW5hbGx5Ci0JICogcmV0dXJucyBmYWxzZSwgd2hpY2gnbGwgZWZmZWN0aXZlbHkgaW52 YWxpZGF0ZSB0aGUgc2NhbidzIGFycmF5IGtleXMuCi0JICogVGhhdCBoYXNuJ3QgaGFwcGVuZWQg eWV0LCB0aG91Z2ggLS0gYW5kIGluIGdlbmVyYWwgaXQgbWF5IG5ldmVyIGhhcHBlbi4KKwkgKiBE ZWZlbnNpdmVseSByZXN0b3JlIHRoZSBhcnJheSBrZXlzIHRvIHRoZSBwb3NpdGlvbnMgdGhleSB3 ZXJlIGluCisJICogaW1tZWRpYXRlbHkgYmVmb3JlIHdlIHdlcmUgY2FsbGVkIChpLmUuIHRvIHRo ZWlyIGZpbmFsIHBvc2l0aW9ucyBmb3IKKwkgKiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbiku CiAJICovCiAJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2NhbiwgLWRpcik7CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHJlZS5jCmluZGV4IDNkZjJjNzUyZS4uNTkzOWU3MjhmIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0cmVlLmMKQEAgLTEyOCw2ICsxMjgsNyBAQCBidGhhbmRsZXIoUEdfRlVOQ1RJ T05fQVJHUykKIAkJLmFtY29uc2lzdGVudGVxdWFsaXR5ID0gdHJ1ZSwKIAkJLmFtY29uc2lzdGVu dG9yZGVyaW5nID0gdHJ1ZSwKIAkJLmFtY2FuYmFja3dhcmQgPSB0cnVlLAorCQkuYW1jYW5tYXJr cG9zID0gdHJ1ZSwKIAkJLmFtY2FudW5pcXVlID0gdHJ1ZSwKIAkJLmFtY2FubXVsdGljb2wgPSB0 cnVlLAogCQkuYW1vcHRpb25hbGtleSA9IHRydWUsCkBAIC0xNjEsMTEgKzE2MiwxMyBAQCBidGhh bmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYWRqdXN0bWVtYmVycyA9IGJ0YWRqdXN0bWVt YmVycywKIAkJLmFtYmVnaW5zY2FuID0gYnRiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGJ0cmVz Y2FuLAotCQkuYW1nZXR0dXBsZSA9IGJ0Z2V0dHVwbGUsCisJCS5hbWdldHR1cGxlID0gTlVMTCwK KwkJLmFtZ2V0YmF0Y2ggPSBidGdldGJhdGNoLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBidHVuZ3Vh cmRiYXRjaCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBidGtpbGxpdGVtc2JhdGNoLAogCQkuYW1n ZXRiaXRtYXAgPSBidGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGJ0ZW5kc2NhbiwKLQkJLmFt bWFya3BvcyA9IGJ0bWFya3BvcywKLQkJLmFtcmVzdHJwb3MgPSBidHJlc3RycG9zLAorCQkuYW1w b3NyZXNldCA9IGJ0cG9zcmVzZXQsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gYnRlc3Rp bWF0ZXBhcmFsbGVsc2NhbiwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IGJ0aW5pdHBhcmFsbGVs c2NhbiwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBidHBhcmFsbGVscmVzY2FuLApAQCAtMjI0LDE4 ICsyMjcsMTggQEAgYnRpbnNlcnQoUmVsYXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICpp c251bGwsCiB9CiAKIC8qCi0gKglidGdldHR1cGxlKCkgLS0gR2V0IHRoZSBuZXh0IHR1cGxlIGlu IHRoZSBzY2FuLgorICoJYnRnZXRiYXRjaCgpIC0tIEdldCB0aGUgZmlyc3Qgb3IgbmV4dCBiYXRj aCBvZiB0dXBsZXMgaW4gdGhlIHNjYW4KICAqLwotYm9vbAotYnRnZXR0dXBsZShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorSW5kZXhTY2FuQmF0Y2gKK2J0Z2V0YmF0Y2go SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLCBTY2FuRGlyZWN0 aW9uIGRpcikKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFx dWU7Ci0JYm9vbAkJcmVzOworCUluZGV4U2NhbkJhdGNoIGJhdGNoID0gcHJpb3JiYXRjaDsKIAog CUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7CiAKIAkvKiBidHJlZSBpbmRleGVz IGFyZSBuZXZlciBsb3NzeSAqLwotCXNjYW4tPnhzX3JlY2hlY2sgPSBmYWxzZTsKKwlBc3NlcnQo IXNjYW4tPnhzX3JlY2hlY2spOwogCiAJLyogRWFjaCBsb29wIGl0ZXJhdGlvbiBwZXJmb3JtcyBh bm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuICovCiAJZG8KQEAgLTI0Myw0NSArMjQ2LDIwIEBA IGJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJLyoK IAkJICogSWYgd2UndmUgYWxyZWFkeSBpbml0aWFsaXplZCB0aGlzIHNjYW4sIHdlIGNhbiBqdXN0 IGFkdmFuY2UgaXQgaW4KIAkJICogdGhlIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi4gIElmIHdlIGhh dmVuJ3QgZG9uZSBzbyB5ZXQsIHdlIGNhbGwKLQkJICogX2J0X2ZpcnN0KCkgdG8gZ2V0IHRoZSBm aXJzdCBpdGVtIGluIHRoZSBzY2FuLgorCQkgKiBfYnRfZmlyc3QoKSB0byBnZXQgdGhlIGZpcnN0 IGJhdGNoIGluIHRoZSBzY2FuLgogCQkgKi8KLQkJaWYgKCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5j dXJyUG9zKSkKLQkJCXJlcyA9IF9idF9maXJzdChzY2FuLCBkaXIpOworCQlpZiAoYmF0Y2ggPT0g TlVMTCkKKwkJCWJhdGNoID0gX2J0X2ZpcnN0KHNjYW4sIGRpcik7CiAJCWVsc2UKLQkJewotCQkJ LyoKLQkJCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQga2lsbCB0aGUgcHJldmlvdXNseS1m ZXRjaGVkIHR1cGxlLgotCQkJICovCi0JCQlpZiAoc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSkKLQkJ CXsKLQkJCQkvKgotCQkJCSAqIFllcywgcmVtZW1iZXIgaXQgZm9yIGxhdGVyLiAoV2UnbGwgZGVh bCB3aXRoIGFsbCBzdWNoCi0JCQkJICogdHVwbGVzIGF0IG9uY2UgcmlnaHQgYmVmb3JlIGxlYXZp bmcgdGhlIGluZGV4IHBhZ2UuKSAgVGhlCi0JCQkJICogdGVzdCBmb3IgbnVtS2lsbGVkIG92ZXJy dW4gaXMgbm90IGp1c3QgcGFyYW5vaWE6IGlmIHRoZQotCQkJCSAqIGNhbGxlciByZXZlcnNlcyBk aXJlY3Rpb24gaW4gdGhlIGluZGV4c2NhbiB0aGVuIHRoZSBzYW1lCi0JCQkJICogaXRlbSBtaWdo dCBnZXQgZW50ZXJlZCBtdWx0aXBsZSB0aW1lcy4gSXQncyBub3Qgd29ydGgKLQkJCQkgKiB0cnlp bmcgdG8gb3B0aW1pemUgdGhhdCwgc28gd2UgZG9uJ3QgZGV0ZWN0IGl0LCBidXQgaW5zdGVhZAot CQkJCSAqIGp1c3QgZm9yZ2V0IGFueSBleGNlc3MgZW50cmllcy4KLQkJCQkgKi8KLQkJCQlpZiAo c28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCi0JCQkJCXNvLT5raWxsZWRJdGVtcyA9IHBhbGxvY19h cnJheShpbnQsIE1heFRJRHNQZXJCVHJlZVBhZ2UpOwotCQkJCWlmIChzby0+bnVtS2lsbGVkIDwg TWF4VElEc1BlckJUcmVlUGFnZSkKLQkJCQkJc28tPmtpbGxlZEl0ZW1zW3NvLT5udW1LaWxsZWQr K10gPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7Ci0JCQl9CisJCQliYXRjaCA9IF9idF9uZXh0KHNj YW4sIGRpciwgYmF0Y2gpOwogCi0JCQkvKgotCQkJICogTm93IGNvbnRpbnVlIHRoZSBzY2FuLgot CQkJICovCi0JCQlyZXMgPSBfYnRfbmV4dChzY2FuLCBkaXIpOwotCQl9Ci0KLQkJLyogSWYgd2Ug aGF2ZSBhIHR1cGxlLCByZXR1cm4gaXQgLi4uICovCi0JCWlmIChyZXMpCisJCS8qIElmIHdlIGhh dmUgYSBiYXRjaCwgcmV0dXJuIGl0IC4uLiAqLworCQlpZiAoYmF0Y2gpCiAJCQlicmVhazsKIAkJ LyogLi4uIG90aGVyd2lzZSBzZWUgaWYgd2UgbmVlZCBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBz Y2FuICovCiAJfSB3aGlsZSAoc28tPm51bUFycmF5S2V5cyAmJiBfYnRfc3RhcnRfcHJpbV9zY2Fu KHNjYW4pKTsKIAotCXJldHVybiByZXM7CisJcmV0dXJuIGJhdGNoOwogfQogCiAvKgpAQCAtMjkx LDM4ICsyNjksNDMgQEAgaW50NjQKIGJ0Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElE Qml0bWFwICp0Ym0pCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+ b3BhcXVlOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwogCWludDY0CQludGlkcyA9IDA7Ci0JSXRl bVBvaW50ZXIgaGVhcFRpZDsKKwlJdGVtUG9pbnRlciB0YWJsZVRpZDsKIAogCUFzc2VydChzY2Fu LT5oZWFwUmVsYXRpb24gPT0gTlVMTCk7CiAKIAkvKiBFYWNoIGxvb3AgaXRlcmF0aW9uIHBlcmZv cm1zIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gKi8KIAlkbwogCXsKLQkJLyogRmV0Y2gg dGhlIGZpcnN0IHBhZ2UgJiB0dXBsZSAqLwotCQlpZiAoX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRT Y2FuRGlyZWN0aW9uKSkKKwkJLyogRmV0Y2ggdGhlIGZpcnN0IGJhdGNoICovCisJCWlmICgoYmF0 Y2ggPSBfYnRfZmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pKSkKIAkJewotCQkJLyog U2F2ZSB0dXBsZSBJRCwgYW5kIGNvbnRpbnVlIHNjYW5uaW5nICovCi0JCQloZWFwVGlkID0gJnNj YW4tPnhzX2hlYXB0aWQ7Ci0JCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sIGhlYXBUaWQsIDEsIGZhbHNl KTsKKwkJCWludAkJCWl0ZW1JbmRleCA9IDA7CisKKwkJCS8qIFNhdmUgZmlyc3QgdHVwbGUncyBU SUQgKi8KKwkJCXRhYmxlVGlkID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnRhYmxlVGlkOwor CQkJdGJtX2FkZF90dXBsZXModGJtLCB0YWJsZVRpZCwgMSwgZmFsc2UpOwogCQkJbnRpZHMrKzsK IAogCQkJZm9yICg7OykKIAkJCXsKLQkJCQkvKgotCQkJCSAqIEFkdmFuY2UgdG8gbmV4dCB0dXBs ZSB3aXRoaW4gcGFnZS4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlCi0JCQkJICogZWFzeSBjYXNl IGluIF9idF9uZXh0KCkuCi0JCQkJICovCi0JCQkJaWYgKCsrc28tPmN1cnJQb3MuaXRlbUluZGV4 ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCisJCQkJLyogQWR2YW5jZSB0byBuZXh0IFRJRCB3aXRo aW4gcGFnZS1zaXplZCBiYXRjaCAqLworCQkJCWlmICgrK2l0ZW1JbmRleCA+IGJhdGNoLT5sYXN0 SXRlbSkKIAkJCQl7Ci0JCQkJCS8qIGxldCBfYnRfbmV4dCBkbyB0aGUgaGVhdnkgbGlmdGluZyAq LwotCQkJCQlpZiAoIV9idF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkKKwkJCQkJ LyoKKwkJCQkJICogX2J0X25leHQgcmVsZWFzZXMgdGhlIHByaW9yIGJhdGNoIGZvciBiaXRtYXAg Y2FsbGVycworCQkJCQkgKiBiZWZvcmUgYWxsb2NhdGluZyB0aGUgbmV4dCBvbmUsIHNvIG9ubHkg b25lIGJhdGNoIGlzCisJCQkJCSAqIGV2ZXIgdXNlZCBhdCBhIHRpbWUKKwkJCQkJICovCisJCQkJ CWl0ZW1JbmRleCA9IDA7CisJCQkJCWJhdGNoID0gX2J0X25leHQoc2NhbiwgRm9yd2FyZFNjYW5E aXJlY3Rpb24sIGJhdGNoKTsKKwkJCQkJaWYgKCFiYXRjaCkKIAkJCQkJCWJyZWFrOwogCQkJCX0K IAotCQkJCS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250aW51ZSBzY2FubmluZyAqLwotCQkJCWhl YXBUaWQgPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XS5oZWFwVGlk OwotCQkJCXRibV9hZGRfdHVwbGVzKHRibSwgaGVhcFRpZCwgMSwgZmFsc2UpOworCQkJCXRhYmxl VGlkID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnRhYmxlVGlkOworCQkJCXRibV9hZGRfdHVw bGVzKHRibSwgdGFibGVUaWQsIDEsIGZhbHNlKTsKIAkJCQludGlkcysrOwogCQkJfQogCQl9CkBA IC0zNDksOCArMzMyLDYgQEAgYnRiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGlu dCBub3JkZXJieXMpCiAKIAkvKiBhbGxvY2F0ZSBwcml2YXRlIHdvcmtzcGFjZSAqLwogCXNvID0g cGFsbG9jX29iamVjdChCVFNjYW5PcGFxdWVEYXRhKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNv LT5jdXJyUG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKIAlpZiAoc2Nh bi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJc28tPmtleURhdGEgPSAoU2NhbktleSkgcGFsbG9jKHNj YW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOwogCWVsc2UKQEAgLTM2NCwx OSArMzQ1LDEyIEBAIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9y ZGVyYnlzKQogCXNvLT5vcmRlclByb2NzID0gTlVMTDsKIAlzby0+YXJyYXlDb250ZXh0ID0gTlVM TDsKIAotCXNvLT5raWxsZWRJdGVtcyA9IE5VTEw7CQkvKiB1bnRpbCBuZWVkZWQgKi8KLQlzby0+ bnVtS2lsbGVkID0gMDsKLQotCS8qCi0JICogV2UgZG9uJ3Qga25vdyB5ZXQgd2hldGhlciB0aGUg c2NhbiB3aWxsIGJlIGluZGV4LW9ubHksIHNvIHdlIGRvIG5vdAotCSAqIGFsbG9jYXRlIHRoZSB0 dXBsZSB3b3Jrc3BhY2UgYXJyYXlzIHVudGlsIGJ0cmVzY2FuLiAgSG93ZXZlciwgd2Ugc2V0IHVw Ci0JICogc2Nhbi0+eHNfaXR1cGRlc2Mgd2hldGhlciB3ZSdsbCBuZWVkIGl0IG9yIG5vdCwgc2lu Y2UgdGhhdCdzIHNvIGNoZWFwLgotCSAqLwotCXNvLT5jdXJyVHVwbGVzID0gc28tPm1hcmtUdXBs ZXMgPSBOVUxMOwotCi0Jc2Nhbi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7 Ci0KIAlzY2FuLT5vcGFxdWUgPSBzbzsKKwlzY2FuLT54c19yZWNoZWNrID0gZmFsc2U7CisJc2Nh bi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJc2Nhbi0+bWF4aXRlbXNi YXRjaCA9IE1heFRJRHNQZXJCVHJlZVBhZ2U7CisJc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3N0 YXRpYyA9IE1BWEFMSUdOKHNpemVvZihCVEJhdGNoRGF0YSkpOworCXNjYW4tPmJhdGNoX3R1cGxl c193b3Jrc3BhY2UgPSBCTENLU1o7CiAKIAlyZXR1cm4gc2NhbjsKIH0KQEAgLTM5MCw2NCArMzY0 LDE3NyBAQCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50 IG5zY2Fua2V5cywKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5v cGFxdWU7CiAKLQkvKiB3ZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZCBsb2NrcywgYnV0IGdvdHRh IGRyb3AgdGhlIHBpbnMgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0J ewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVk IGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9idF9raWxsaXRlbXMoc2Nh bik7Ci0JCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOwotCQlCVFNjYW5Qb3NJ bnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQl9Ci0KLQkvKgotCSAqIFdlIHByZWZlciB0byBlYWdl cmx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgYmVmb3JlIGJ0Z2V0dHVwbGUgcmV0dXJucy4KLQkgKiBU aGlzIGF2b2lkcyBtYWtpbmcgVkFDVVVNIHdhaXQgdG8gYWNxdWlyZSBhIGNsZWFudXAgbG9jayBv biB0aGUgcGFnZS4KLQkgKgotCSAqIFdlIGNhbm5vdCBzYWZlbHkgZHJvcCBsZWFmIHBhZ2UgcGlu cyBkdXJpbmcgaW5kZXgtb25seSBzY2FucyBkdWUgdG8gYQotCSAqIHJhY2UgY29uZGl0aW9uIGlu dm9sdmluZyBWQUNVVU0gc2V0dGluZyBwYWdlcyBhbGwtdmlzaWJsZSBpbiB0aGUgVk0uCi0JICog SXQncyBhbHNvIHVuc2FmZSBmb3IgcGxhaW4gaW5kZXggc2NhbnMgdGhhdCB1c2UgYSBub24tTVZD QyBzbmFwc2hvdC4KLQkgKgotCSAqIEFsc28gb3B0IG91dCBvZiBkcm9wcGluZyBsZWFmIHBhZ2Ug cGlucyBlYWdlcmx5IGR1cmluZyBiaXRtYXAgc2NhbnMuCi0JICogUGlucyBjYW5ub3QgYmUgaGVs ZCBmb3IgbW9yZSB0aGFuIGFuIGluc3RhbnQgZHVyaW5nIGJpdG1hcCBzY2FucyBlaXRoZXIKLQkg KiB3YXksIHNvIHdlIG1pZ2h0IGFzIHdlbGwgYXZvaWQgd2FzdGluZyBjeWNsZXMgb24gYWNxdWly aW5nIHBhZ2UgTFNOcy4KLQkgKgotCSAqIFNlZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gb24gbWFr aW5nIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlLgotCSAqCi0JICogTm90ZTogc28tPmRy b3BQaW4gc2hvdWxkIG5ldmVyIGNoYW5nZSBhY3Jvc3MgcmVzY2Fucy4KLQkgKi8KLQlzby0+ZHJv cFBpbiA9ICghc2Nhbi0+eHNfd2FudF9pdHVwICYmCi0JCQkJICAgSXNNVkNDTGlrZVNuYXBzaG90 KHNjYW4tPnhzX3NuYXBzaG90KSAmJgotCQkJCSAgIHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxM KTsKLQotCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0Jc28tPm5lZWRQcmltU2NhbiA9IGZhbHNl OwotCXNvLT5zY2FuQmVoaW5kID0gZmFsc2U7Ci0Jc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxz ZTsKLQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKLQlCVFNjYW5Qb3NJbnZh bGlkYXRlKHNvLT5tYXJrUG9zKTsKLQotCS8qCi0JICogQWxsb2NhdGUgdHVwbGUgd29ya3NwYWNl IGFycmF5cywgaWYgbmVlZGVkIGZvciBhbiBpbmRleC1vbmx5IHNjYW4gYW5kCi0JICogbm90IGFs cmVhZHkgZG9uZSBpbiBhIHByZXZpb3VzIHJlc2NhbiBjYWxsLiAgVG8gc2F2ZSBvbiBwYWxsb2MK LQkgKiBvdmVyaGVhZCwgYm90aCB3b3Jrc3BhY2VzIGFyZSBhbGxvY2F0ZWQgYXMgb25lIHBhbGxv YyBibG9jazsgb25seSB0aGlzCi0JICogZnVuY3Rpb24gYW5kIGJ0ZW5kc2NhbiBrbm93IHRoYXQu Ci0JICovCi0JaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBzby0+Y3VyclR1cGxlcyA9PSBOVUxM KQotCXsKLQkJc28tPmN1cnJUdXBsZXMgPSAoY2hhciAqKSBwYWxsb2MoQkxDS1NaICogMik7Ci0J CXNvLT5tYXJrVHVwbGVzID0gc28tPmN1cnJUdXBsZXMgKyBCTENLU1o7Ci0JfQotCiAJLyoKIAkg KiBSZXNldCB0aGUgc2NhbiBrZXlzCiAJICovCiAJaWYgKHNjYW5rZXkgJiYgc2Nhbi0+bnVtYmVy T2ZLZXlzID4gMCkKIAkJbWVtY3B5KHNjYW4tPmtleURhdGEsIHNjYW5rZXksIHNjYW4tPm51bWJl ck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOworCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxz ZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNlOworCXNvLT5vcHBvc2l0ZURpckNoZWNrID0gZmFs c2U7CiAJc28tPm51bWJlck9mS2V5cyA9IDA7CQkvKiB1bnRpbCBfYnRfcHJlcHJvY2Vzc19rZXlz IHNldHMgaXQgKi8KIAlzby0+bnVtQXJyYXlLZXlzID0gMDsJCS8qIGRpdHRvICovCiB9CiAKKy8q CisgKglidHVuZ3VhcmRiYXRjaCgpIC0tIERyb3AgYmF0Y2gncyBUSUQgcmVjeWNsaW5nIGludGVy bG9jayAoYnVmZmVyIHBpbikKKyAqCisgKiBDYWxsZWQgYnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQn cyBzYWZlIHRvIGRyb3AgdGhlIGJ1ZmZlciBwaW4gaGVsZCB0bworICogcHJldmVudCBjb25jdXJy ZW50IFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNLgorICovCit2b2lkCitidHVuZ3VhcmRiYXRjaChJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCUJUQmF0Y2hEYXRh ICpidGJhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpOworCisJLyogU2hvdWxkIGJl IGNhbGxlZCBleGFjdGx5IG9uY2UgaWZmICFiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgKi8KKwlBc3Nl cnQoIXNjYW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCk7CisJQXNzZXJ0KGJhdGNoLT5pc0d1YXJk ZWQpOworCisJUmVsZWFzZUJ1ZmZlcihidGJhdGNoLT5idWYpOworfQorCisvKgorICoJYnRraWxs aXRlbXNiYXRjaCgpIC0tIE1hcmsgZGVhZCBpdGVtcycgaW5kZXggdHVwbGVzIExQX0RFQUQKKyAq Lwordm9pZAorYnRraWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJh dGNoIGJhdGNoKQoreworCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CisJQlRC YXRjaERhdGEgKmJ0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCk7CisJUGFnZQkJ cGFnZTsKKwlCVFBhZ2VPcGFxdWUgb3BhcXVlOworCWJvb2wJCWtpbGxlZHNvbWV0aGluZyA9IGZh bHNlOworCUJ1ZmZlcgkJYnVmOworCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOworCisJQXNzZXJ0KGJh dGNoLT5udW1EZWFkID4gMCk7CisKKwlidWYgPSBfYnRfZ2V0YnVmKHJlbCwgYnRiYXRjaC0+Y3Vy clBhZ2UsIEJUX1JFQUQpOworCisJbGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7 CisJQXNzZXJ0KGJhdGNoLT5sc24gPD0gbGF0ZXN0bHNuKTsKKwlpZiAoYmF0Y2gtPmxzbiAhPSBs YXRlc3Rsc24pCisJeworCQkvKiBNb2RpZmllZCwgZ2l2ZSB1cCBvbiBoaW50aW5nICovCisJCV9i dF9yZWxidWYocmVsLCBidWYpOworCQlyZXR1cm47CisJfQorCisJcGFnZSA9IEJ1ZmZlckdldFBh Z2UoYnVmKTsKKwlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CisKKwkvKiBJdGVyYXRl IHRocm91Z2ggYmF0Y2gtPmRlYWRJdGVtc1tdIGluIGxlYWYgcGFnZSBvcmRlciAqLworCWZvciAo aW50IGkgPSAwOyBpIDwgYmF0Y2gtPm51bURlYWQ7IGkrKykKKwl7CisJCWludAkJCWl0ZW1JbmRl eCA9IGJhdGNoLT5kZWFkSXRlbXNbaV07CisJCUJhdGNoTWF0Y2hpbmdJdGVtICpraXRlbSA9ICZi YXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKKwkJT2Zmc2V0TnVtYmVyIG9mZm51bSA9IGtpdGVtLT5p bmRleE9mZnNldDsKKwkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7 CisJCUluZGV4VHVwbGUJaXR1cGxlID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGlp ZCk7CisJCWJvb2wJCWtpbGx0dXBsZSA9IGZhbHNlOworCisJCUFzc2VydChpdGVtSW5kZXggPj0g YmF0Y2gtPmZpcnN0SXRlbSAmJiBpdGVtSW5kZXggPD0gYmF0Y2gtPmxhc3RJdGVtKTsKKwkJQXNz ZXJ0KGkgPT0gMCB8fAorCQkJICAgb2ZmbnVtID49IGJhdGNoLT5pdGVtc1tiYXRjaC0+ZGVhZEl0 ZW1zW2kgLSAxXV0uaW5kZXhPZmZzZXQpOworCQlBc3NlcnQob2ZmbnVtID49IFBfRklSU1REQVRB S0VZKG9wYXF1ZSkgJiYKKwkJCSAgIG9mZm51bSA8PSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBh Z2UpKTsKKworCQlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwbGUpKQorCQl7CisJCQlpbnQJ CQlwaSA9IGkgKyAxOworCQkJaW50CQkJbnBvc3RpbmcgPSBCVHJlZVR1cGxlR2V0TlBvc3Rpbmco aXR1cGxlKTsKKwkJCWludAkJCWo7CisKKwkJCS8qCisJCQkgKiBBIHBvc3RpbmcgbGlzdCB0dXBs ZSBjYW4gb25seSBiZSBtYXJrZWQgTFBfREVBRCBvbmNlIGV2ZXJ5IG9uZQorCQkJICogb2YgaXRz IGhlYXAgVElEcyBpcyBrbm93biBkZWFkLiAgTWF0Y2ggZWFjaCBoZWFwIFRJRCBhZ2FpbnN0CisJ CQkgKiBzdWNjZXNzaXZlIGRlYWQgaXRlbXMsIHdoaWNoIGFyZSBpbiBoZWFwIFRJRCBvcmRlciBq dXN0IGxpa2UKKwkJCSAqIHRoZSBwb3N0aW5nIGxpc3QgaXRzZWxmLgorCQkJICovCisJCQlmb3Ig KGogPSAwOyBqIDwgbnBvc3Rpbmc7IGorKykKKwkJCXsKKwkJCQlJdGVtUG9pbnRlciBpdGVtID0g QlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXBsZSwgaik7CisKKwkJCQlpZiAoIUl0ZW1Qb2ludGVy RXF1YWxzKGl0ZW0sICZraXRlbS0+dGFibGVUaWQpKQorCQkJCQlicmVhazsJCS8qIG91dCBvZiBw b3N0aW5nIGxpc3QgbG9vcCAqLworCisJCQkJQXNzZXJ0KGtpdGVtLT5pbmRleE9mZnNldCA9PSBv ZmZudW0pOworCisJCQkJLyoKKwkJCQkgKiBSZWFkLWFoZWFkIHRvIGxhdGVyIGtpdGVtcyBoZXJl LgorCQkJCSAqCisJCQkJICogV2UgcmVseSBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IG5vdCBhZHZh bmNpbmcga2l0ZW0gaGVyZQorCQkJCSAqIHdpbGwgcHJldmVudCB1cyBmcm9tIGNvbnNpZGVyaW5n IHRoZSBwb3N0aW5nIGxpc3QgdHVwbGUKKwkJCQkgKiBmdWxseSBkZWFkIGJ5IG5vdCBtYXRjaGlu ZyBpdHMgbmV4dCBoZWFwIFRJRCBpbiBuZXh0IGxvb3AKKwkJCQkgKiBpdGVyYXRpb24uCisJCQkJ ICoKKwkJCQkgKiBJZiwgb24gdGhlIG90aGVyIGhhbmQsIHRoaXMgaXMgdGhlIGZpbmFsIGhlYXAg VElEIGluIHRoZQorCQkJCSAqIHBvc3RpbmcgbGlzdCB0dXBsZSwgdGhlbiB0dXBsZSBnZXRzIGtp bGxlZCByZWdhcmRsZXNzIChpLmUuCisJCQkJICogd2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRo ZSBsYXN0IGtpdGVtIGlzIGFsc28gdGhlIGxhc3QKKwkJCQkgKiBoZWFwIFRJRCBpbiB0aGUgbGFz dCBpbmRleCB0dXBsZSBjb3JyZWN0bHkgLS0gcG9zdGluZyB0dXBsZQorCQkJCSAqIHN0aWxsIGdl dHMga2lsbGVkKS4KKwkJCQkgKi8KKwkJCQlpZiAocGkgPCBiYXRjaC0+bnVtRGVhZCkKKwkJCQkJ a2l0ZW0gPSAmYmF0Y2gtPml0ZW1zW2JhdGNoLT5kZWFkSXRlbXNbcGkrK11dOworCQkJfQorCisJ CQkvKgorCQkJICogRG9uJ3QgYm90aGVyIGFkdmFuY2luZyB0aGUgb3V0ZXJtb3N0IGxvb3AncyBp bnQgaXRlcmF0b3IgdG8KKwkJCSAqIGF2b2lkIHByb2Nlc3NpbmcgZGVhZCBpdGVtcyB0aGF0IHJl bGF0ZSB0byB0aGUgc2FtZSBvZmZudW0vCisJCQkgKiBwb3N0aW5nIGxpc3QgdHVwbGUuICBUaGlz IG1pY3JvLW9wdGltaXphdGlvbiBoYXJkbHkgc2VlbXMgd29ydGgKKwkJCSAqIGl0LiAgKEZ1cnRo ZXIgaXRlcmF0aW9ucyBvZiB0aGUgb3V0ZXJtb3N0IGxvb3Agd2lsbCBmYWlsIHRvCisJCQkgKiBt YXRjaCBvbiB0aGlzIHNhbWUgcG9zdGluZyBsaXN0J3MgZmlyc3QgaGVhcCBUSUQgaW5zdGVhZCwg c28KKwkJCSAqIHdlJ2xsIGFkdmFuY2UgdG8gdGhlIG5leHQgb2ZmbnVtL2luZGV4IHR1cGxlIHBy ZXR0eSBxdWlja2x5LikKKwkJCSAqLworCQkJaWYgKGogPT0gbnBvc3RpbmcpCisJCQkJa2lsbHR1 cGxlID0gdHJ1ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUFzc2VydChJdGVtUG9pbnRlckVxdWFs cygmaXR1cGxlLT50X3RpZCwgJmtpdGVtLT50YWJsZVRpZCkpOworCQkJa2lsbHR1cGxlID0gdHJ1 ZTsKKwkJfQorCisJCS8qIE1hcmsgaW5kZXggaXRlbSBhcyBkZWFkLCBpZiBpdCBpc24ndCBhbHJl YWR5ICovCisJCWlmIChraWxsdHVwbGUgJiYgIUl0ZW1JZElzRGVhZChpaWQpKQorCQl7CisJCQlp ZiAoIWtpbGxlZHNvbWV0aGluZykKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFVzZSB0aGUgaGludCBi aXQgaW5mcmFzdHJ1Y3R1cmUgdG8gY2hlY2sgaWYgd2UgY2FuIHVwZGF0ZQorCQkJCSAqIHRoZSBw YWdlIHdoaWxlIGp1c3QgaG9sZGluZyBhIHNoYXJlIGxvY2suIElmIHdlIGFyZSBub3QKKwkJCQkg KiBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50IGNvbnRpbnVpbmcuCisJCQkJICovCisJCQkJaWYg KCFCdWZmZXJCZWdpblNldEhpbnRCaXRzKGJ1ZikpCisJCQkJeworCQkJCQlfYnRfcmVsYnVmKHJl bCwgYnVmKTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCX0KKworCQkJLyogZm91bmQgdGhlIGl0 ZW0vYWxsIHBvc3RpbmcgbGlzdCBpdGVtcyAqLworCQkJSXRlbUlkTWFya0RlYWQoaWlkKTsKKwkJ CWtpbGxlZHNvbWV0aGluZyA9IHRydWU7CisJCX0KKwl9CisKKwkvKgorCSAqIFNpbmNlIHRoaXMg Y2FuIGJlIHJlZG9uZSBsYXRlciBpZiBuZWVkZWQsIG1hcmsgYXMgZGlydHkgaGludC4KKwkgKgor CSAqIFdoZW5ldmVyIHdlIG1hcmsgYW55dGhpbmcgTFBfREVBRCwgd2UgYWxzbyBzZXQgdGhlIHBh Z2UncworCSAqIEJUUF9IQVNfR0FSQkFHRSBmbGFnLCB3aGljaCBpcyBsaWtld2lzZSBqdXN0IGEg aGludC4gIChOb3RlIHRoYXQgd2UKKwkgKiBvbmx5IHJlbHkgb24gdGhlIHBhZ2UtbGV2ZWwgZmxh ZyBpbiAhaGVhcGtleXNwYWNlIGluZGV4ZXMuKQorCSAqLworCWlmIChraWxsZWRzb21ldGhpbmcp CisJeworCQlvcGFxdWUtPmJ0cG9fZmxhZ3MgfD0gQlRQX0hBU19HQVJCQUdFOworCQlCdWZmZXJG aW5pc2hTZXRIaW50Qml0cyhidWYsIHRydWUsIHRydWUpOworCX0KKworCV9idF9yZWxidWYocmVs LCBidWYpOworfQorCiAvKgogICoJYnRlbmRzY2FuKCkgLS0gY2xvc2UgZG93biBhIHNjYW4KICAq LwpAQCAtNDU2LDExNiArNTQzLDYzIEBAIGJ0ZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiB7 CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCi0JLyog d2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1dCBnb3R0YSBkcm9wIHRoZSBwaW5z ICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJLyogQmVmb3Jl IGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwotCQlp ZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwotCQlCVFNjYW5Q b3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQl9Ci0KLQlzby0+bWFya0l0ZW1JbmRleCA9 IC0xOwotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPm1hcmtQb3MpOwotCi0JLyogTm8gbmVl ZCB0byBpbnZhbGlkYXRlIHBvc2l0aW9ucywgdGhlIFJBTSBpcyBhYm91dCB0byBiZSBmcmVlZC4g Ki8KLQogCS8qIFJlbGVhc2Ugc3RvcmFnZSAqLwogCWlmIChzby0+a2V5RGF0YSAhPSBOVUxMKQog CQlwZnJlZShzby0+a2V5RGF0YSk7CiAJLyogc28tPmFycmF5S2V5cyBhbmQgc28tPm9yZGVyUHJv Y3MgYXJlIGluIGFycmF5Q29udGV4dCAqLwogCWlmIChzby0+YXJyYXlDb250ZXh0ICE9IE5VTEwp CiAJCU1lbW9yeUNvbnRleHREZWxldGUoc28tPmFycmF5Q29udGV4dCk7Ci0JaWYgKHNvLT5raWxs ZWRJdGVtcyAhPSBOVUxMKQotCQlwZnJlZShzby0+a2lsbGVkSXRlbXMpOwotCWlmIChzby0+Y3Vy clR1cGxlcyAhPSBOVUxMKQotCQlwZnJlZShzby0+Y3VyclR1cGxlcyk7Ci0JLyogc28tPm1hcmtU dXBsZXMgc2hvdWxkIG5vdCBiZSBwZnJlZSdkLCBzZWUgYnRyZXNjYW4gKi8KIAlwZnJlZShzbyk7 CiB9CiAKIC8qCi0gKglidG1hcmtwb3MoKSAtLSBzYXZlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbgor ICoJYnRwb3NyZXNldCgpIC0tIHJlc2V0IGFycmF5IGtleSBzdGF0ZSBmb3Igc2NhbiBwb3NpdGlv biBjaGFuZ2UKKyAqCisgKiBDYWxsZWQgYnkgdGhlIGNvcmUgc3lzdGVtIHdoZW4gdGhlIHNjYW4n cyBsb2dpY2FsIHBvc2l0aW9uIGlzIGFib3V0IHRvCisgKiBjaGFuZ2UgaW4gYSB3YXkgdGhhdCBp bnZhbGlkYXRlcyBvdXIgYXJyYXkga2V5IHN0YXRlLiAgVGhpcyBoYXBwZW5zIHdoZW4KKyAqIHJl c3RvcmluZyBhIG1hcmtlZCBwb3NpdGlvbiwgb3Igd2hlbiB0aGUgc2NhbiBjcm9zc2VzIGEgYmF0 Y2ggYm91bmRhcnkKKyAqIHdoaWxlIG1vdmluZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIHRv IHRoZSBvbmUgb3JpZ2luYWxseSB1c2VkLgorICoKKyAqIEZvciBkaXJlY3Rpb24gY2hhbmdlcywg dGhlIGNvcmUgc3lzdGVtIHdpbGwgaGF2ZSBhbHJlYWR5IGZsaXBwZWQgdGhlCisgKiBiYXRjaCdz IGRpciBmaWVsZCBiZWZvcmUgY2FsbGluZyBoZXJlOyB3ZSB1c2UgdGhpcyB1cGRhdGVkIGRpcmVj dGlvbiB3aGVuCisgKiByZXNldHRpbmcgb3VyIGFycmF5IGtleXMuICBGb3IgbWFyayByZXN0b3Jh dGlvbiwgdGhlIGJhdGNoJ3MgZGlyIHdpbGwKKyAqIHJldGFpbiBpdHMgb3JpZ2luYWwgdmFsdWUg KGZyb20gd2hlbiBidGdldGJhdGNoIHJldHVybmVkIGl0KS4KICAqLwogdm9pZAotYnRtYXJrcG9z KEluZGV4U2NhbkRlc2Mgc2NhbikKK2J0cG9zcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRl eFNjYW5CYXRjaCBiYXRjaCkKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBz Y2FuLT5vcGFxdWU7CisJQlRCYXRjaERhdGEgKmJ0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShzY2Fu LCBiYXRjaCk7CiAKLQkvKiBUaGVyZSBtYXkgYmUgYW4gb2xkIG1hcmsgd2l0aCBhIHBpbiAoYnV0 IG5vIGxvY2spLiAqLwotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPm1hcmtQb3MpOworCWlm ICghc28tPm51bUFycmF5S2V5cykKKwkJcmV0dXJuOwogCiAJLyoKLQkgKiBKdXN0IHJlY29yZCB0 aGUgY3VycmVudCBpdGVtSW5kZXguICBJZiB3ZSBsYXRlciBzdGVwIHRvIG5leHQgcGFnZQotCSAq IGJlZm9yZSByZWxlYXNpbmcgdGhlIG1hcmtlZCBwb3NpdGlvbiwgX2J0X3N0ZXBwYWdlIG1ha2Vz IGEgZnVsbCBjb3B5IG9mCi0JICogdGhlIGN1cnJQb3Mgc3RydWN0IGluIG1hcmtQb3MuICBJZiAo YXMgb2Z0ZW4gaGFwcGVucykgdGhlIG1hcmsgaXMgbW92ZWQKLQkgKiBiZWZvcmUgd2UgbGVhdmUg dGhlIHBhZ2UsIHdlIGRvbid0IGhhdmUgdG8gZG8gdGhhdCB3b3JrLgorCSAqIFJlc2V0IGFycmF5 IGtleXMgdG8gaW5pdGlhbCBzdGF0ZSBmb3IgdGhlIGJhdGNoJ3Mgc2NhbiBkaXJlY3Rpb24uICBB bHNvCisJICogY2xlYXIgbmVlZFByaW1TY2FuIGFuZCByZWxhdGVkIGZsYWdzLiAgVGhlc2Ugd2Vy ZSBzZXQgYmFzZWQgb24gdGhlIHNvZnQKKwkgKiBhc3N1bXB0aW9uIHRoYXQgdGhlIHNjYW4gd291 bGQgYWx3YXlzIHByb2NlZWQgaW4gdGhlIHNhbWUgZGlyZWN0aW9uLgorCSAqCisJICogVGhlc2Ug c3RlcHMgd29yayBhcm91bmQgdGhlIHNvZnQgYXNzdW1wdGlvbiBiZWluZyB2aW9sYXRlZDogdGhl eSBmb3JjZQorCSAqIHRoZSBzY2FuIHRvIHN0ZXAgdG8gdGhlIG5leHQvcHJldmlvdXMgcGFnZSwg bWFraW5nIHRoZSBhcnJheXMgcmVjb3Zlci4KKwkgKiBXaGVuIHdlIGdvIHRvIHJlYWQgdGhhdCBw YWdlLCBfYnRfcmVhZHBhZ2Ugd2lsbCByZWxpYWJseSBkZXRlcm1pbmUgaWYgYQorCSAqIHByaW1p dGl2ZSBzY2FuIHJlYWxseSBpcyBuZWVkZWQgYmFzZWQgb24gdGhlIHBhZ2UncyB0dXBsZXMuICBJ ZiB0aGVyZSdzCisJICogYSBwcmltaXRpdmUgc2NhbiwgaXQgd2lsbCByZXBvc2l0aW9uIHRoZSBz Y2FuIHVzaW5nIG5ldyBhcnJheSB2YWx1ZXMKKwkgKiAoYmFzZWQgb24gdGhlIHR1cGxlcyBmcm9t IHRoZSBuZWlnaGJvcmluZyBwYWdlIHdlJ2xsIHN0ZXAgb24gdG8pLgorCSAqCisJICogV2UgbmVl ZCB0byByZXNldCB0aGUgYXJyYXkga2V5IHN0YXRlIGluIHRoZSBjb3JyZWN0IGRpcmVjdGlvbiBz byB0aGF0CisJICogd2Ugd29uJ3QgZ2V0IGNvbmZ1c2VkLiAgV2hlbiB0aGUgYXJyYXkga2V5cyBh cmUgYmVoaW5kIHRoZSBrZXkgc3BhY2UKKwkgKiBmb3IgdGhlIHBhZ2Ugd2UncmUgc3RlcHBpbmcg b24gdG8gKGJlaGluZCBpbiB0ZXJtcyBvZiB0aGUgc2NhbiBkaXIpLAorCSAqIHRoZXkgd2lsbCBj YXRjaCB1cCBhdXRvbWF0aWNhbGx5LiAgQnV0IHdoZW4gdGhleSdyZSBhaGVhZCBvZiB0aGF0CisJ ICogcGFnZSdzIGtleSBzcGFjZSwgdGhlIHNjYW4gY291bGQgbWlzcyBtYXRjaGluZyB0dXBsZXMu CiAJICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQlzby0+bWFya0l0 ZW1JbmRleCA9IHNvLT5jdXJyUG9zLml0ZW1JbmRleDsKKwlfYnRfc3RhcnRfYXJyYXlfa2V5cyhz Y2FuLCBiYXRjaC0+ZGlyKTsKKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChiYXRjaC0+ZGly KSkKKwkJYnRiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAllbHNlCi0JewotCQlCVFNjYW5Qb3NJ bnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKLQkJc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQl9Ci19 Ci0KLS8qCi0gKglidHJlc3RycG9zKCkgLS0gcmVzdG9yZSBzY2FuIHRvIGxhc3Qgc2F2ZWQgcG9z aXRpb24KLSAqLwotdm9pZAotYnRyZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCi17Ci0JQlRT Y2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCi0JaWYgKHNvLT5t YXJrSXRlbUluZGV4ID49IDApCi0JewotCQkvKgotCQkgKiBUaGUgc2NhbiBoYXMgbmV2ZXIgbW92 ZWQgdG8gYSBuZXcgcGFnZSBzaW5jZSB0aGUgbGFzdCBtYXJrLiAgSnVzdAotCQkgKiByZXN0b3Jl IHRoZSBpdGVtSW5kZXguCi0JCSAqCi0JCSAqIE5COiBJbiB0aGlzIGNhc2Ugd2UgY2FuJ3QgY291 bnQgb24gYW55dGhpbmcgaW4gc28tPm1hcmtQb3MgdG8gYmUKLQkJICogYWNjdXJhdGUuCi0JCSAq LwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSBzby0+bWFya0l0ZW1JbmRleDsKLQl9Ci0JZWxz ZQotCXsKLQkJLyoKLQkJICogVGhlIHNjYW4gbW92ZWQgdG8gYSBuZXcgcGFnZSBhZnRlciBsYXN0 IG1hcmsgb3IgcmVzdG9yZSwgYW5kIHdlIGFyZQotCQkgKiBub3cgcmVzdG9yaW5nIHRvIHRoZSBt YXJrZWQgcGFnZS4gIFdlIGFyZW4ndCBob2xkaW5nIGFueSByZWFkCi0JCSAqIGxvY2tzLCBidXQg aWYgd2UncmUgc3RpbGwgaG9sZGluZyB0aGUgcGluIGZvciB0aGUgY3VycmVudCBwb3NpdGlvbiwK LQkJICogd2UgbXVzdCBkcm9wIGl0LgotCQkgKi8KLQkJaWYgKEJUU2NhblBvc0lzVmFsaWQoc28t PmN1cnJQb3MpKQotCQl7Ci0JCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwg d2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJ X2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQ b3MpOwotCQl9Ci0KLQkJaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPm1hcmtQb3MpKQotCQl7Ci0J CQkvKiBidW1wIHBpbiBvbiBtYXJrIGJ1ZmZlciBmb3IgYXNzaWdubWVudCB0byBjdXJyZW50IGJ1 ZmZlciAqLwotCQkJaWYgKEJUU2NhblBvc0lzUGlubmVkKHNvLT5tYXJrUG9zKSkKLQkJCQlJbmNy QnVmZmVyUmVmQ291bnQoc28tPm1hcmtQb3MuYnVmKTsKLQkJCW1lbWNweSgmc28tPmN1cnJQb3Ms ICZzby0+bWFya1BvcywKLQkJCQkgICBvZmZzZXRvZihCVFNjYW5Qb3NEYXRhLCBpdGVtc1sxXSkg KwotCQkJCSAgIHNvLT5tYXJrUG9zLmxhc3RJdGVtICogc2l6ZW9mKEJUU2NhblBvc0l0ZW0pKTsK LQkJCWlmIChzby0+Y3VyclR1cGxlcykKLQkJCQltZW1jcHkoc28tPmN1cnJUdXBsZXMsIHNvLT5t YXJrVHVwbGVzLAotCQkJCQkgICBzby0+bWFya1Bvcy5uZXh0VHVwbGVPZmZzZXQpOwotCQkJLyog UmVzZXQgdGhlIHNjYW4ncyBhcnJheSBrZXlzIChzZWUgX2J0X3N0ZXBwYWdlIGZvciB3aHkpICov Ci0JCQlpZiAoc28tPm51bUFycmF5S2V5cykKLQkJCXsKLQkJCQlfYnRfc3RhcnRfYXJyYXlfa2V5 cyhzY2FuLCBzby0+Y3VyclBvcy5kaXIpOwotCQkJCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsK LQkJCX0KLQkJfQotCQllbHNlCi0JCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsK LQl9CisJCWJ0YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwlzby0+bmVlZFByaW1TY2FuID0gZmFs c2U7CisJc28tPnNjYW5CZWhpbmQgPSBmYWxzZTsKKwlzby0+b3Bwb3NpdGVEaXJDaGVjayA9IGZh bHNlOwogfQogCiAvKgpAQCAtODg0LDE1ICs5MTgsNiBAQCBfYnRfcGFyYWxsZWxfc2VpemUoSW5k ZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciAqbmV4dF9zY2FuX3BhZ2UsCiAJKm5leHRfc2Nh bl9wYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCSpsYXN0X2N1cnJfcGFnZSA9IEludmFsaWRC bG9ja051bWJlcjsKIAotCS8qCi0JICogUmVzZXQgc28tPmN1cnJQb3MsIGFuZCBpbml0aWFsaXpl IG1vcmVMZWZ0L21vcmVSaWdodCBzdWNoIHRoYXQgdGhlIG5leHQKLQkgKiBjYWxsIHRvIF9idF9y ZWFkbmV4dHBhZ2UgdHJlYXRzIHRoaXMgYmFja2VuZCBzaW1pbGFybHkgdG8gYSBzZXJpYWwKLQkg KiBiYWNrZW5kIHRoYXQgc3RlcHMgZnJvbSAqbGFzdF9jdXJyX3BhZ2UgdG8gKm5leHRfc2Nhbl9w YWdlICh1bmxlc3MgdGhpcwotCSAqIGJhY2tlbmQncyBzby0+Y3VyclBvcyBpcyBpbml0aWFsaXpl ZCBieSBfYnRfcmVhZGZpcnN0cGFnZSBiZWZvcmUgdGhlbikuCi0JICovCi0JQlRTY2FuUG9zSW52 YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0Jc28tPmN1cnJQb3MubW9yZUxlZnQgPSBzby0+Y3VyclBv cy5tb3JlUmlnaHQgPSB0cnVlOwotCiAJaWYgKGZpcnN0KQogCXsKIAkJLyoKQEAgLTEwNDIsOCAr MTA2Nyw2IEBAIF9idF9wYXJhbGxlbF9kb25lKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlCVFBhcmFs bGVsU2NhbkRlc2MgYnRzY2FuOwogCWJvb2wJCXN0YXR1c19jaGFuZ2VkID0gZmFsc2U7CiAKLQlB c3NlcnQoIUJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQogCS8qIERvIG5vdGhpbmcs IGZvciBub24tcGFyYWxsZWwgc2NhbnMgKi8KIAlpZiAocGFyYWxsZWxfc2NhbiA9PSBOVUxMKQog CQlyZXR1cm47CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJj aC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwppbmRleCBhYWU2YWNi N2YuLjRjOTRiOWU1OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRz ZWFyY2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCkBAIC0y Myw1MyArMjMsNDggQEAKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJzdG9yYWdlL3By ZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxz L21lbWRlYnVnLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIAotc3RhdGljIGlubGluZSB2 b2lkIF9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihSZWxhdGlvbiByZWwsIEJUU2Nhbk9wYXF1 ZSBzbyk7CitzdGF0aWMgaW5saW5lIHZvaWQgX2J0X2JhdGNoX3VubG9jayhJbmRleFNjYW5EZXNj IHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkJCQkJQnVmZmVyIGJ1Zik7CiBzdGF0 aWMgQnVmZmVyIF9idF9tb3ZlcmlnaHQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBC VFNjYW5JbnNlcnQga2V5LAogCQkJCQkJCUJ1ZmZlciBidWYsIGJvb2wgZm9ydXBkYXRlLCBCVFN0 YWNrIHN0YWNrLAogCQkJCQkJCWludCBhY2Nlc3MpOwogc3RhdGljIE9mZnNldE51bWJlciBfYnRf Ymluc3JjaChSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBrZXksIEJ1ZmZlciBidWYpOwogc3Rh dGljIGludAlfYnRfYmluc3JjaF9wb3N0aW5nKEJUU2Nhbkluc2VydCBrZXksIFBhZ2UgcGFnZSwK IAkJCQkJCQkJT2Zmc2V0TnVtYmVyIG9mZm51bSk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2J0X3Jl dHVybml0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFNjYW5PcGFxdWUgc28pOwotc3RhdGljIGJv b2wgX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwot c3RhdGljIGJvb2wgX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBPZmZzZXRO dW1iZXIgb2ZmbnVtLAotCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXIpOwotc3RhdGljIGJvb2wg X2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLAot CQkJCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBTY2FuRGlyZWN0aW9uIGRpciwKLQkJ CQkJCQkgYm9vbCBzZWl6ZWQpOworc3RhdGljIEluZGV4U2NhbkJhdGNoIF9idF9yZWFkZmlyc3Rw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggZmlyc3RiYXRjaCwKKwkJCQkJ CQkJCQlPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcik7CitzdGF0aWMgSW5k ZXhTY2FuQmF0Y2ggX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVt YmVyIGJsa25vLAorCQkJCQkJCQkJICAgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywKKwkJCQkJ CQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIGZpcnN0cGFnZSk7CiBzdGF0aWMgQnVmZmVy IF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgKmJs a25vLAogCQkJCQkJCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vKTsKLXN0YXRpYyBib29s IF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK3N0 YXRpYyBJbmRleFNjYW5CYXRjaCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcik7CiAKIAogLyoKLSAqCV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3Bpbigp CisgKiBfYnRfYmF0Y2hfdW5sb2NrKCkgLS0gbmJ0cmVlIHdyYXBwZXIgZm9yIGluZGV4YW1fdXRp bF91bmxvY2tfYmF0Y2guCiAgKgotICogVW5sb2NrIHNvLT5jdXJyUG9zLmJ1Zi4gIElmIHNjYW4g aXMgc28tPmRyb3BQaW4sIGRyb3AgdGhlIHBpbiwgdG9vLgotICogRHJvcHBpbmcgdGhlIHBpbiBw cmV2ZW50cyBWQUNVVU0gZnJvbSBibG9ja2luZyBvbiBhY3F1aXJpbmcgYSBjbGVhbnVwIGxvY2su CisgKiBQZXJmb3JtcyB0aGUgc2FtZSBWYWxncmluZCBpbnN0cnVtZW50YXRpb24gYXMgX2J0X3Vu bG9ja2J1Zi4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCi1fYnRfZHJvcF9sb2NrX2FuZF9tYXli ZV9waW4oUmVsYXRpb24gcmVsLCBCVFNjYW5PcGFxdWUgc28pCitfYnRfYmF0Y2hfdW5sb2NrKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIEJ1ZmZlciBidWYpCiB7Ci0J aWYgKCFzby0+ZHJvcFBpbikKLQl7Ci0JCS8qIEp1c3QgZHJvcCB0aGUgbG9jayAobm90IHRoZSBw aW4pICovCi0JCV9idF91bmxvY2tidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCQlyZXR1cm47 Ci0JfQorI2lmIGRlZmluZWQoVVNFX1ZBTEdSSU5EKQorCVBhZ2UJCXBhZ2UgPSBCdWZmZXJHZXRQ YWdlKGJ1Zik7CiAKLQkvKgotCSAqIERyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbi4KLQkg KgotCSAqIEhhdmUgdG8gc2V0IHNvLT5jdXJyUG9zLmxzbiBzbyB0aGF0IF9idF9raWxsaXRlbXMg aGFzIGEgd2F5IHRvIGRldGVjdAotCSAqIHdoZW4gY29uY3VycmVudCBoZWFwIFRJRCByZWN5Y2xp bmcgYnkgVkFDVVVNIG1pZ2h0IGhhdmUgdGFrZW4gcGxhY2UuCi0JICovCi0Jc28tPmN1cnJQb3Mu bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKHNvLT5jdXJyUG9zLmJ1Zik7Ci0JX2J0X3JlbGJ1Zihy ZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsK KwlWQUxHUklORF9DSEVDS19NRU1fSVNfREVGSU5FRChwYWdlLCBCTENLU1opOworI2VuZGlmCisK KwlpbmRleGFtX3V0aWxfdW5sb2NrX2JhdGNoKHNjYW4sIGJhdGNoLCBidWYpOworCisjaWYgZGVm aW5lZChVU0VfVkFMR1JJTkQpCisJaWYgKCFSZWxhdGlvblVzZXNMb2NhbEJ1ZmZlcnMoc2Nhbi0+ aW5kZXhSZWxhdGlvbikpCisJCVZBTEdSSU5EX01BS0VfTUVNX05PQUNDRVNTKHBhZ2UsIEJMQ0tT Wik7CisjZW5kaWYKIH0KIAogLyoKQEAgLTg2MCwyNiArODU1LDI1IEBAIF9idF9jb21wYXJlKFJl bGF0aW9uIHJlbCwKIH0KIAogLyoKLSAqCV9idF9maXJzdCgpIC0tIEZpbmQgdGhlIGZpcnN0IGl0 ZW0gaW4gYSBzY2FuLgorICoJX2J0X2ZpcnN0KCkgLS0gRmluZCB0aGUgZmlyc3QgYmF0Y2ggaW4g YSBzY2FuLgogICoKICAqCQlXZSBuZWVkIHRvIGJlIGNsZXZlciBhYm91dCB0aGUgZGlyZWN0aW9u IG9mIHNjYW4sIHRoZSBzZWFyY2gKLSAqCQljb25kaXRpb25zLCBhbmQgdGhlIHRyZWUgb3JkZXJp bmcuICBXZSBmaW5kIHRoZSBmaXJzdCBpdGVtIChvciwKLSAqCQlpZiBiYWNrd2FyZHMgc2Nhbiwg dGhlIGxhc3QgaXRlbSkgaW4gdGhlIHRyZWUgdGhhdCBzYXRpc2ZpZXMgdGhlCi0gKgkJcXVhbGlm aWNhdGlvbnMgaW4gdGhlIHNjYW4ga2V5LiAgT24gc3VjY2VzcyBleGl0LCBkYXRhIGFib3V0IHRo ZQotICoJCW1hdGNoaW5nIHR1cGxlKHMpIG9uIHRoZSBwYWdlIGhhcyBiZWVuIGxvYWRlZCBpbnRv IHNvLT5jdXJyUG9zLiAgV2UnbGwKLSAqCQlkcm9wIGFsbCBsb2NrcyBhbmQgaG9sZCBvbnRvIGEg cGluIG9uIHBhZ2UncyBidWZmZXIsIGV4Y2VwdCBkdXJpbmcKLSAqCQlzby0+ZHJvcFBpbiBzY2Fu cywgd2hlbiB3ZSBkcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4uCi0gKgkJX2J0X3JldHVy bml0ZW0gc2V0cyB0aGUgbmV4dCBpdGVtIHRvIHJldHVybiB0byBzY2FuIG9uIHN1Y2Nlc3MgZXhp dC4KKyAqCQljb25kaXRpb25zLCBhbmQgdGhlIHRyZWUgb3JkZXJpbmcuICBXZSBmaW5kIHRoZSBm aXJzdCBsZWFmIHBhZ2UgKG9yCisgKgkJdGhlIGxhc3QgbGVhZiBwYWdlLCB3aGVuIHNjYW5uaW5n IGJhY2t3YXJkcykgaW4gdGhlIHRyZWUgd2l0aCBhdCBsZWFzdAorICoJCW9uZSB0dXBsZSB0aGF0 IHNhdGlzZmllcyB0aGUgcXVhbGlmaWNhdGlvbnMgaW4gdGhlIHNjYW4ga2V5LiAgT24KKyAqCQlz dWNjZXNzIGV4aXQsIHdlIHJldHVybiBhIG5ldyBiYXRjaCB3aXRoIHRoYXQgcGFnZSdzIG1hdGNo aW5nIGl0ZW1zLgogICoKLSAqIElmIHRoZXJlIGFyZSBubyBtYXRjaGluZyBpdGVtcyBpbiB0aGUg aW5kZXgsIHdlIHJldHVybiBmYWxzZSwgd2l0aCBubwotICogcGlucyBvciBsb2NrcyBoZWxkLiAg c28tPmN1cnJQb3Mgd2lsbCByZW1haW4gaW52YWxpZC4KKyAqIElmIHRoZXJlIGFyZSBubyBtYXRj aGluZyBpdGVtcyBpbiB0aGUgaW5kZXggKGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbiksCisg KiB3ZSBqdXN0IHJldHVybiBOVUxMLiAgTm90ZSB0aGF0IHJldHVybmluZyBOVUxMIGRvZXNuJ3Qg bmVjZXNzYXJpbHkgbWVhbiB0aGUKKyAqIGVuZCBvZiB0aGUgdG9wLWxldmVsIHNjYW47IGNhbGxl ciBzaG91bGQgY2hlY2sgc28tPm5lZWRQcmltU2NhbiB0bworICogZGV0ZXJtaW5lIGlmIGFub3Ro ZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gaXMgcmVxdWlyZWQuCiAgKgogICogTm90ZSB0aGF0IHNj YW4tPmtleURhdGFbXSwgYW5kIHRoZSBzby0+a2V5RGF0YVtdIHNjYW5rZXkgYnVpbHQgZnJvbSBp dCwKICAqIGFyZSBib3RoIHNlYXJjaC10eXBlIHNjYW5rZXlzIChzZWUgbmJ0cmVlL1JFQURNRSBm b3IgbW9yZSBhYm91dCB0aGlzKS4KICAqIFdpdGhpbiB0aGlzIHJvdXRpbmUsIHdlIGJ1aWxkIGEg dGVtcG9yYXJ5IGluc2VydGlvbi10eXBlIHNjYW5rZXkgdG8gdXNlCiAgKiBpbiBsb2NhdGluZyB0 aGUgc2NhbiBzdGFydCBwb3NpdGlvbi4KICAqLwotYm9vbAorSW5kZXhTY2FuQmF0Y2gKIF9idF9m aXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogewogCVJlbGF0aW9u CXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CkBAIC04OTIsOCArODg2LDggQEAgX2J0X2ZpcnN0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJU3RyYXRlZ3lOdW1iZXIg c3RyYXRfdG90YWwgPSBJbnZhbGlkU3RyYXRlZ3k7CiAJQmxvY2tOdW1iZXIgYmxrbm8gPSBJbnZh bGlkQmxvY2tOdW1iZXIsCiAJCQkJbGFzdGN1cnJibGtubzsKLQotCUFzc2VydCghQlRTY2FuUG9z SXNWYWxpZChzby0+Y3VyclBvcykpOworCUluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2g7CisJQlRC YXRjaERhdGEgKmJ0Zmlyc3RiYXRjaDsKIAogCS8qCiAJICogRXhhbWluZSB0aGUgc2NhbiBrZXlz IGFuZCBlbGltaW5hdGUgYW55IHJlZHVuZGFudCBrZXlzOyBhbHNvIG1hcmsgdGhlCkBAIC05MDks NyArOTAzLDcgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCiAJewogCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCQlfYnRfcGFyYWxsZWxfZG9u ZShzY2FuKTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAkvKgpAQCAt OTE4LDcgKzkxMiw3IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKQogCSAqLwogCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKIAkJIV9i dF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCB0cnVlKSkKLQkJ cmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVMTDsJCQkvKiBkZWZpbml0ZWx5IGRvbmUgKHNvLT5u ZWVkUHJpbVNjYW4gaXMgdW5zZXQpICovCiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIHNjYW4n cyBhcnJheXMgKGlmIGFueSkgZm9yIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uCkBAIC05Mzgs MTEgKzkzMiw3IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKQogCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCQlBc3NlcnQoYmxrbm8gIT0gUF9O T05FKTsKIAotCQlpZiAoIV9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxr bm8sIGRpciwgdHJ1ZSkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJX2J0X3JldHVybml0ZW0oc2Nh biwgc28pOwotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2Nhbiwg Ymxrbm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgdHJ1ZSk7CiAJfQogCiAJLyoKQEAgLTE1MDIsMTcg KzE0OTIsMjEgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCiAJCWRlZmF1bHQ6CiAJCQkvKiBjYW4ndCBnZXQgaGVyZSwgYnV0IGtlZXAgY29tcGlsZXIg cXVpZXQgKi8KIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgc3RyYXRfdG90YWw6ICVkIiwg KGludCkgc3RyYXRfdG90YWwpOwotCQkJcmV0dXJuIGZhbHNlOworCQkJcmV0dXJuIE5VTEw7CiAJ fQogCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIGZpcnN0IGJhdGNoIGJlZm9yZSBsb2NraW5nIGFu eXRoaW5nICovCisJZmlyc3RiYXRjaCA9IGluZGV4YW1fdXRpbF9hbGxvY19iYXRjaChzY2FuKTsK KwlidGZpcnN0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShzY2FuLCBmaXJzdGJhdGNoKTsKKwogCS8q CiAJICogVXNlIHRoZSBtYW51ZmFjdHVyZWQgaW5zZXJ0aW9uIHNjYW4ga2V5IHRvIGRlc2NlbmQg dGhlIHRyZWUgYW5kCiAJICogcG9zaXRpb24gb3Vyc2VsdmVzIG9uIHRoZSB0YXJnZXQgbGVhZiBw YWdlLgogCSAqLwogCUFzc2VydChTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpID09IGluc2tl eS5iYWNrd2FyZCk7Ci0JX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZzby0+Y3VyclBv cy5idWYsIEJUX1JFQUQsIGZhbHNlKTsKKwlfYnRfc2VhcmNoKHJlbCwgTlVMTCwgJmluc2tleSwg JmJ0Zmlyc3RiYXRjaC0+YnVmLCBCVF9SRUFELCBmYWxzZSk7CiAKLQlpZiAoIUJ1ZmZlcklzVmFs aWQoc28tPmN1cnJQb3MuYnVmKSkKKwlpZiAodW5saWtlbHkoIUJ1ZmZlcklzVmFsaWQoYnRmaXJz dGJhdGNoLT5idWYpKSkKIAl7CiAJCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7CiAKQEAgLTE1 MjgsMjIgKzE1MjIsMjMgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpCiAJCWlmIChJc29sYXRpb25Jc1NlcmlhbGl6YWJsZSgpKQogCQl7CiAJCQlQcmVk aWNhdGVMb2NrUmVsYXRpb24ocmVsLCBzY2FuLT54c19zbmFwc2hvdCk7Ci0JCQlfYnRfc2VhcmNo KHJlbCwgTlVMTCwgJmluc2tleSwgJnNvLT5jdXJyUG9zLmJ1ZiwgQlRfUkVBRCwgZmFsc2UpOwor CQkJX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZidGZpcnN0YmF0Y2gtPmJ1ZiwgQlRf UkVBRCwgZmFsc2UpOwogCQl9CiAKLQkJaWYgKCFCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1 ZikpCisJCWlmICghQnVmZmVySXNWYWxpZChidGZpcnN0YmF0Y2gtPmJ1ZikpCiAJCXsKIAkJCV9i dF9wYXJhbGxlbF9kb25lKHNjYW4pOwotCQkJcmV0dXJuIGZhbHNlOworCQkJaW5kZXhhbV91dGls X3JlbGVhc2VfYmF0Y2goc2NhbiwgZmlyc3RiYXRjaCk7CisJCQlyZXR1cm4gTlVMTDsKIAkJfQog CX0KIAogCS8qIHBvc2l0aW9uIHRvIHRoZSBwcmVjaXNlIGl0ZW0gb24gdGhlIHBhZ2UgKi8KLQlv ZmZudW0gPSBfYnRfYmluc3JjaChyZWwsICZpbnNrZXksIHNvLT5jdXJyUG9zLmJ1Zik7CisJb2Zm bnVtID0gX2J0X2JpbnNyY2gocmVsLCAmaW5za2V5LCBidGZpcnN0YmF0Y2gtPmJ1Zik7CiAKIAkv KgogCSAqIE5vdyBsb2FkIGRhdGEgZnJvbSB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgc2NhbiAodXN1 YWxseSB0aGUgcGFnZQotCSAqIGN1cnJlbnRseSBpbiBzby0+Y3VyclBvcy5idWYpLgorCSAqIGN1 cnJlbnRseSBpbiBmaXJzdGJhdGNoLmJ1ZikuCiAJICoKIAkgKiBJZiBpbnNrZXkubmV4dGtleSA9 IGZhbHNlIGFuZCBpbnNrZXkuYmFja3dhcmQgPSBmYWxzZSwgb2ZmbnVtIGlzCiAJICogcG9zaXRp b25lZCBhdCB0aGUgZmlyc3Qgbm9uLXBpdm90IHR1cGxlID49IGluc2tleS5zY2Fua2V5cy4KQEAg LTE1NjEsMTY0ICsxNTU2LDcyIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKQogCSAqIGZvciB0aGUgcGFnZS4gIEZvciBleGFtcGxlLCB3aGVuIGluc2tl eSBpcyBib3RoIDwgdGhlIGxlYWYgcGFnZSdzIGhpZ2gKIAkgKiBrZXkgYW5kID4gYWxsIG9mIGl0 cyBub24tcGl2b3QgdHVwbGVzLCBvZmZudW0gd2lsbCBiZSAibWF4b2ZmICsgMSIuCiAJICovCi0J aWYgKCFfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBvZmZudW0sIGRpcikpCi0JCXJldHVybiBmYWxz ZTsKLQotCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4g X2J0X3JlYWRmaXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgb2ZmbnVtLCBkaXIpOwogfQogCiAv KgotICoJX2J0X25leHQoKSAtLSBHZXQgdGhlIG5leHQgaXRlbSBpbiBhIHNjYW4uCisgKglfYnRf bmV4dCgpIC0tIEdldCB0aGUgbmV4dCBiYXRjaCBpbiBhIHNjYW4uCiAgKgotICoJCU9uIGVudHJ5 LCBzby0+Y3VyclBvcyBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSwgd2hpY2ggbWF5IGJlIHBp bm5lZAotICoJCWJ1dCBpcyBub3QgbG9ja2VkLCBhbmQgc28tPmN1cnJQb3MuaXRlbUluZGV4IGlk ZW50aWZpZXMgd2hpY2ggaXRlbSB3YXMKLSAqCQlwcmV2aW91c2x5IHJldHVybmVkLgorICoJCU9u IGVudHJ5LCBwcmlvcmJhdGNoIGRlc2NyaWJlcyB0aGUgYmF0Y2ggdGhhdCB3YXMgbGFzdCByZXR1 cm5lZCBieQorICoJCWJ0Z2V0YmF0Y2guICBXZSdsbCB1c2UgdGhlIHByaW9yIGJhdGNoJ3MgcG9z aXRpb25pbmcgaW5mb3JtYXRpb24gdG8KKyAqCQlkZWNpZGUgd2hpY2ggbGVhZiBwYWdlIHRvIHJl YWQgbmV4dC4KICAqCi0gKgkJT24gc3VjY2VzcyBleGl0LCBzby0+Y3VyclBvcyBpcyB1cGRhdGVk IGFzIG5lZWRlZCwgYW5kIF9idF9yZXR1cm5pdGVtCi0gKgkJc2V0cyB0aGUgbmV4dCBpdGVtIHRv IHJldHVybiB0byB0aGUgc2Nhbi4gIHNvLT5jdXJyUG9zIHJlbWFpbnMgdmFsaWQuCi0gKgotICoJ CU9uIGZhaWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSBpbnZhbGlkYXRlIHNvLT5jdXJy UG9zLiAgSXQnbGwKLSAqCQlzdGlsbCBiZSBwb3NzaWJsZSBmb3IgdGhlIHNjYW4gdG8gcmV0dXJu IHR1cGxlcyBieSBjaGFuZ2luZyBkaXJlY3Rpb24sCi0gKgkJdGhvdWdoIHdlJ2xsIG5lZWQgdG8g Y2FsbCBfYnRfZmlyc3QgYW5ldyBpbiB0aGF0IG90aGVyIGRpcmVjdGlvbi4KKyAqCQlPbiBzdWNj ZXNzIGV4aXQsIHJldHVybnMgdGhlIG5leHQgYmF0Y2guICBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0 IG9uZQorICoJCW1hdGNoaW5nIHR1cGxlIG9uIGFueSByZXR1cm5lZCBiYXRjaCAoZWxzZSB3ZSdk IGp1c3QgcmV0dXJuIE5VTEwpLgorICoJCU5vdGUgdGhhdCByZXR1cm5pbmcgTlVMTCBkb2Vzbid0 IG5lY2Vzc2FyaWx5IG1lYW4gdGhlIGVuZCBvZiB0aGUKKyAqCQl0b3AtbGV2ZWwgc2NhbjsgY2Fs bGVyIHNob3VsZCBjaGVjayBzby0+bmVlZFByaW1TY2FuIHRvIGRldGVybWluZQorICoJCWlmIGFu b3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gaXMgcmVxdWlyZWQuCiAgKi8KLWJvb2wKLV9idF9u ZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitJbmRleFNjYW5CYXRj aAorX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgSW5kZXhT Y2FuQmF0Y2ggcHJpb3JiYXRjaCkKIHsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVl KSBzY2FuLT5vcGFxdWU7Ci0KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykp OwotCi0JLyoKLQkgKiBBZHZhbmNlIHRvIG5leHQgdHVwbGUgb24gY3VycmVudCBwYWdlOyBvciBp ZiB0aGVyZSdzIG5vIG1vcmUsIHRyeSB0bwotCSAqIHN0ZXAgdG8gdGhlIG5leHQgcGFnZSB3aXRo IGRhdGEuCi0JICovCi0JaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQl7Ci0JCWlm ICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQotCQl7Ci0J CQlpZiAoIV9idF9zdGVwcGFnZShzY2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQot CX0KLQllbHNlCi0JewotCQlpZiAoLS1zby0+Y3VyclBvcy5pdGVtSW5kZXggPCBzby0+Y3VyclBv cy5maXJzdEl0ZW0pCi0JCXsKLQkJCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCQkJ cmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwotCXJl dHVybiB0cnVlOwotfQotCi0vKgotICogUmV0dXJuIHRoZSBpbmRleCBpdGVtIGZyb20gc28tPmN1 cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XSB0byB0aGUKLSAqIGluZGV4IHNjYW4g Ynkgc2V0dGluZyB0aGUgcmVsZXZhbnQgZmllbGRzIGluIGNhbGxlcidzIGluZGV4IHNjYW4gZGVz Y3JpcHRvcgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9idF9yZXR1cm5pdGVtKEluZGV4U2Nh bkRlc2Mgc2NhbiwgQlRTY2FuT3BhcXVlIHNvKQotewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVt ID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0KLQkvKiBNb3N0 IHJlY2VudCBfYnRfcmVhZHBhZ2UgbXVzdCBoYXZlIHN1Y2NlZWRlZCAqLwotCUFzc2VydChCVFNj YW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0JQXNzZXJ0KHNvLT5jdXJyUG9zLml0ZW1JbmRl eCA+PSBzby0+Y3VyclBvcy5maXJzdEl0ZW0pOwotCUFzc2VydChzby0+Y3VyclBvcy5pdGVtSW5k ZXggPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOwotCi0JLyogUmV0dXJuIG5leHQgaXRlbSwgcGVy IGFtZ2V0dHVwbGUgY29udHJhY3QgKi8KLQlzY2FuLT54c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhl YXBUaWQ7Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQotCQlzY2FuLT54c19pdHVwID0gKEluZGV4VHVw bGUpIChzby0+Y3VyclR1cGxlcyArIGN1cnJJdGVtLT50dXBsZU9mZnNldCk7Ci19Ci0KLS8qCi0g KglfYnRfc3RlcHBhZ2UoKSAtLSBTdGVwIHRvIG5leHQgcGFnZSBjb250YWluaW5nIHZhbGlkIGRh dGEgZm9yIHNjYW4KLSAqCi0gKiBXcmFwcGVyIG9uIF9idF9yZWFkbmV4dHBhZ2UgdGhhdCBwZXJm b3JtcyBmaW5hbCBzdGVwcyBmb3IgdGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBPbiBlbnRyeSwg c28tPmN1cnJQb3MgbXVzdCBiZSB2YWxpZC4gIEl0cyBidWZmZXIgd2lsbCBiZSBwaW5uZWQsIHRo b3VnaAotICogbmV2ZXIgbG9ja2VkLiAoQWN0dWFsbHksIHdoZW4gc28tPmRyb3BQaW4gdGhlcmUg d29uJ3QgZXZlbiBiZSBhIHBpbiBoZWxkLAotICogdGhvdWdoIHNvLT5jdXJyUG9zLmN1cnJQYWdl IG11c3Qgc3RpbGwgYmUgc2V0IHRvIGEgdmFsaWQgYmxvY2sgbnVtYmVyLikKLSAqLwotc3RhdGlj IGJvb2wKLV9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQotewotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlC VEJhdGNoRGF0YSAqYnRwcmlvcmJhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgcHJpb3JiYXRj aCk7CiAJQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkJbGFzdGN1cnJibGtubzsKLQotCUFzc2VydChC VFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0KLQkvKiBCZWZvcmUgbGVhdmluZyBjdXJy ZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JaWYgKHNvLT5udW1LaWxs ZWQgPiAwKQotCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOworCWJvb2wJCW1vcmVJbkRpcjsKIAogCS8q Ci0JICogQmVmb3JlIHdlIG1vZGlmeSBjdXJyUG9zLCBtYWtlIGEgY29weSBvZiB0aGUgcGFnZSBk YXRhIGlmIHRoZXJlIHdhcyBhCi0JICogbWFyayBwb3NpdGlvbiB0aGF0IG5lZWRzIGl0LgorCSAq IFRoZSBjb3JlIGNvZGUgbXVzdCBkZWFsIHdpdGggY3Jvc3MtYmF0Y2ggc2NhbiBkaXJlY3Rpb24g Y2hhbmdlcyBmb3IgdXMuCisJICogQSBiYXRjaCBtYW5hZ2VtZW50IHJvdXRpbmUgdGhhdCBmbGlw cyBwcmlvcmJhdGNoJ3Mgc2NhbiBkaXJlY3Rpb24gKGFuZAorCSAqIGNhbGxzIGJ0cG9zcmVzZXQg dG8gZGVhbCB3aXRoIHRoZSBzY2FuJ3MgYXJyYXkga2V5cykgaXMgdXNlZCBmb3IgdGhpcy4KIAkg Ki8KLQlpZiAoc28tPm1hcmtJdGVtSW5kZXggPj0gMCkKLQl7Ci0JCS8qIGJ1bXAgcGluIG9uIGN1 cnJlbnQgYnVmZmVyIGZvciBhc3NpZ25tZW50IHRvIG1hcmsgYnVmZmVyICovCi0JCWlmIChCVFNj YW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpCi0JCQlJbmNyQnVmZmVyUmVmQ291bnQoc28tPmN1 cnJQb3MuYnVmKTsKLQkJbWVtY3B5KCZzby0+bWFya1BvcywgJnNvLT5jdXJyUG9zLAotCQkJICAg b2Zmc2V0b2YoQlRTY2FuUG9zRGF0YSwgaXRlbXNbMV0pICsKLQkJCSAgIHNvLT5jdXJyUG9zLmxh c3RJdGVtICogc2l6ZW9mKEJUU2NhblBvc0l0ZW0pKTsKLQkJaWYgKHNvLT5tYXJrVHVwbGVzKQot CQkJbWVtY3B5KHNvLT5tYXJrVHVwbGVzLCBzby0+Y3VyclR1cGxlcywKLQkJCQkgICBzby0+Y3Vy clBvcy5uZXh0VHVwbGVPZmZzZXQpOwotCQlzby0+bWFya1Bvcy5pdGVtSW5kZXggPSBzby0+bWFy a0l0ZW1JbmRleDsKLQkJc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQotCQkvKgotCQkgKiBJZiB3 ZSdyZSBqdXN0IGFib3V0IHRvIHN0YXJ0IHRoZSBuZXh0IHByaW1pdGl2ZSBpbmRleCBzY2FuCi0J CSAqIChwb3NzaWJsZSB3aXRoIGEgc2NhbiB0aGF0IGhhcyBhcnJheXMga2V5cywgYW5kIG5lZWRz IHRvIHNraXAgdG8KLQkJICogY29udGludWUgaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24p LCBtb3JlTGVmdC9tb3JlUmlnaHQgb25seQotCQkgKiBpbmRpY2F0ZSB0aGUgZW5kIG9mIHRoZSBj dXJyZW50IHByaW1pdGl2ZSBpbmRleCBzY2FuLiAgVGhleSBtdXN0Ci0JCSAqIG5ldmVyIGJlIHRh a2VuIHRvIGluZGljYXRlIHRoYXQgdGhlIHRvcC1sZXZlbCBpbmRleCBzY2FuIGhhcyBlbmRlZAot CQkgKiAodGhhdCB3b3VsZCBiZSB3cm9uZykuCi0JCSAqCi0JCSAqIFdlIGNvdWxkIGhhbmRsZSB0 aGlzIGNhc2UgYnkgdHJlYXRpbmcgdGhlIGN1cnJlbnQgYXJyYXkga2V5cyBhcwotCQkgKiBtYXJr UG9zIHN0YXRlLiAgQnV0IGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBhcnJheSBzdGF0ZSBsaWtl IHRoaXMKLQkJICogd291bGQgYWRkIGNvbXBsZXhpdHkuICBJbnN0ZWFkLCB3ZSBqdXN0IHVuc2V0 IG1hcmtQb3MncyBjb3B5IG9mCi0JCSAqIG1vcmVSaWdodCBvciBtb3JlTGVmdCAod2hpY2hldmVy IG1pZ2h0IGJlIGFmZmVjdGVkKSwgd2hpbGUgbWFraW5nCi0JCSAqIGJ0cmVzdHJwb3MgcmVzZXQg dGhlIHNjYW4ncyBhcnJheXMgdG8gdGhlaXIgaW5pdGlhbCBzY2FuIHBvc2l0aW9ucy4KLQkJICog SW4gZWZmZWN0LCBidHJlc3RycG9zIGxlYXZlcyBhZHZhbmNpbmcgdGhlIGFycmF5cyB1cCB0byB0 aGUgZmlyc3QKLQkJICogX2J0X3JlYWRwYWdlIGNhbGwgKHRoYXQgdGFrZXMgcGxhY2UgYWZ0ZXIg aXQgaGFzIHJlc3RvcmVkIG1hcmtQb3MpLgotCQkgKi8KLQkJaWYgKHNvLT5uZWVkUHJpbVNjYW4p Ci0JCXsKLQkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKHNvLT5jdXJyUG9zLmRpcikpCi0J CQkJc28tPm1hcmtQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKLQkJCWVsc2UKLQkJCQlzby0+bWFya1Bv cy5tb3JlTGVmdCA9IHRydWU7Ci0JCX0KLQotCQkvKiBtYXJrL3Jlc3RvcmUgbm90IHN1cHBvcnRl ZCBieSBwYXJhbGxlbCBzY2FucyAqLwotCQlBc3NlcnQoIXNjYW4tPnBhcmFsbGVsX3NjYW4pOwot CX0KLQotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOworCUFzc2VydChwcmlv cmJhdGNoLT5kaXIgPT0gZGlyKTsKIAogCS8qIFdhbGsgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRh dGEgKi8KIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQotCQlibGtubyA9IHNvLT5j dXJyUG9zLm5leHRQYWdlOworCQlibGtubyA9IGJ0cHJpb3JiYXRjaC0+bmV4dFBhZ2U7CiAJZWxz ZQotCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdlOwotCWxhc3RjdXJyYmxrbm8gPSBzby0+ Y3VyclBvcy5jdXJyUGFnZTsKKwkJYmxrbm8gPSBidHByaW9yYmF0Y2gtPnByZXZQYWdlOworCWxh c3RjdXJyYmxrbm8gPSBidHByaW9yYmF0Y2gtPmN1cnJQYWdlOworCW1vcmVJbkRpciA9IFNjYW5E aXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJCWJ0cHJpb3JiYXRjaC0+bW9yZVJpZ2h0IDogYnRw cmlvcmJhdGNoLT5tb3JlTGVmdDsKIAogCS8qCi0JICogQ2FuY2VsIHByaW1pdGl2ZSBpbmRleCBz Y2FucyB0aGF0IHdlcmUgc2NoZWR1bGVkIHdoZW4gdGhlIGNhbGwgdG8KLQkgKiBfYnRfcmVhZHBh Z2UgZm9yIGN1cnJQb3MgaGFwcGVuZWQgdG8gdXNlIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gdG8g dGhlCi0JICogb25lIHRoYXQgd2UncmUgc3RlcHBpbmcgaW4gbm93LiAgKEl0J3Mgb2theSB0byBs ZWF2ZSB0aGUgc2NhbidzIGFycmF5Ci0JICoga2V5cyBhcy1pcywgc2luY2UgdGhlIG5leHQgX2J0 X3JlYWRwYWdlIHdpbGwgYWR2YW5jZSB0aGVtLikKKwkgKiBGb3IgYml0bWFwIHNjYW4gY2FsbGVy cywgcmVsZWFzZSB0aGUgcHJpb3IgYmF0Y2ggbm93IHNvIHRoYXQKKwkgKiBfYnRfcmVhZG5leHRw YWdlIGNhbiByZXVzZSBpdHMgbWVtb3J5LiAgVGhhdCB3YXkgYml0bWFwIHNjYW5zIG5ldmVyCisJ ICogbmVlZCBtb3JlIHRoYW4gb25lIGJhdGNoIGFsbG9jYXRpb24uCiAJICovCi0JaWYgKHNvLT5j dXJyUG9zLmRpciAhPSBkaXIpCi0JCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKKwlpZiAoIXNj YW4tPnVzZWJhdGNocmluZykKKwkJaW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2goc2NhbiwgcHJp b3JiYXRjaCk7CisKKwlpZiAoYmxrbm8gPT0gUF9OT05FIHx8ICFtb3JlSW5EaXIpCisJeworCQkv KgorCQkgKiBwcmlvcmJhdGNoJ3MgcGFnZSBpcyBrbm93biB0byBiZSB0aGUgZmluYWwgbGVhZiBw YWdlIHdpdGggbWF0Y2hlcworCQkgKiBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uIChpdHMgX2J0X3Jl YWRwYWdlIGNhbGwgZmlndXJlZCB0aGF0IG91dCkuCisJCSAqCisJCSAqIE5vdGU6IGlmIHNvLT5u ZWVkUHJpbVNjYW4gaXMgc2V0LCB0aGVuIHByaW9yYmF0Y2gncyBsZWFmIHBhZ2UgaXMKKwkJICog YWN0dWFsbHkganVzdCB0aGUgZmluYWwgcGFnZSBmb3IgdGhlIGN1cnJlbnQgcHJpbWl0aXZlIGlu ZGV4IHNjYW4KKwkJICogaW4gdGhpcyBzY2FuIGRpcmVjdGlvbiAodGhlIHNjYW4gd2lsbCBjb250 aW51ZSBpbiBfYnRfZmlyc3QpLgorCQkgKi8KKwkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJ CXJldHVybiBOVUxMOworCX0KKworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2Nh biB0byBnZXQgbmV4dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwg JiYKKwkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBm YWxzZSkpCisJCXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4gd2Fz bid0IHNldCAqLwogCiAJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3Rj dXJyYmxrbm8sIGRpciwgZmFsc2UpOwogfQpAQCAtMTczMiwxNzggKzE2MzUsMTY5IEBAIF9idF9z dGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogICogdG8gc3Rv cCB0aGUgc2NhbiBvbiB0aGlzIHBhZ2UgYnkgY2FsbGluZyBfYnRfY2hlY2trZXlzIGFnYWluc3Qg dGhlIGhpZ2gKICAqIGtleS4gIFNlZSBfYnRfcmVhZHBhZ2UgZm9yIGZ1bGwgZGV0YWlscy4KICAq Ci0gKiBPbiBlbnRyeSwgc28tPmN1cnJQb3MgbXVzdCBiZSBwaW5uZWQgYW5kIGxvY2tlZCAoc28g b2ZmbnVtIHN0YXlzIHZhbGlkKS4KKyAqIE9uIGVudHJ5LCBmaXJzdGJhdGNoIG11c3QgYmUgcGlu bmVkIGFuZCBsb2NrZWQgKHNvIG9mZm51bSBzdGF5cyB2YWxpZCkuCiAgKiBQYXJhbGxlbCBzY2Fu IGNhbGxlcnMgbXVzdCBoYXZlIHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlLgog ICoKLSAqIE9uIGV4aXQsIHdlJ2xsIGhhdmUgdXBkYXRlZCBzby0+Y3VyclBvcyBhbmQgcmV0YWlu ZWQgbG9ja3MgYW5kIHBpbnMKLSAqIGFjY29yZGluZyB0byB0aGUgc2FtZSBydWxlcyBhcyB0aG9z ZSBsYWlkIG91dCBmb3IgX2J0X3JlYWRuZXh0cGFnZSBleGl0LgotICogTGlrZSBfYnRfcmVhZG5l eHRwYWdlLCBvdXIgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBpZiB0aGVyZSBhcmUgYW55IG1hdGNo aW5nCi0gKiByZWNvcmRzIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uCisgKiBPbiBzdWNjZXNzIGV4 aXQsIHJldHVybnMgdW5sb2NrZWQgYmF0Y2ggY29udGFpbmluZyBkYXRhIGZyb20gdGhlIG5leHQg cGFnZQorICogdGhhdCBoYXMgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIGl0ZW0uICBJZiB0aGVyZSBh cmUgbm8gbWF0Y2hpbmcgaXRlbXMgaW4gdGhlCisgKiBnaXZlbiBzY2FuIGRpcmVjdGlvbiwgd2Ug anVzdCByZXR1cm4gTlVMTC4gIE5vdGUgdGhhdCByZXR1cm5pbmcgTlVMTAorICogZG9lc24ndCBu ZWNlc3NhcmlseSBtZWFuIHRoZSBlbmQgb2YgdGhlIHRvcC1sZXZlbCBzY2FuOyBidGdldGJhdGNo IGFuZAorICogYnRnZXRiaXRtYXAgY2hlY2sgc28tPm5lZWRQcmltU2NhbiB0byBkZXRlcm1pbmUg aWYgYW5vdGhlciBwcmltaXRpdmUgaW5kZXgKKyAqIHNjYW4gaXMgcmVxdWlyZWQuCiAgKgogICog V2UgYWx3YXlzIHJlbGVhc2UgdGhlIHNjYW4gZm9yIGEgcGFyYWxsZWwgc2NhbiBjYWxsZXIsIHJl Z2FyZGxlc3Mgb2YKICAqIHN1Y2Nlc3Mgb3IgZmFpbHVyZTsgd2UnbGwgY2FsbCBfYnRfcGFyYWxs ZWxfcmVsZWFzZSBhcyBzb29uIGFzIHBvc3NpYmxlLgogICovCi1zdGF0aWMgYm9vbAotX2J0X3Jl YWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2Fu RGlyZWN0aW9uIGRpcikKK3N0YXRpYyBJbmRleFNjYW5CYXRjaAorX2J0X3JlYWRmaXJzdHBhZ2Uo SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoLAorCQkJCSAgT2Zm c2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJQlRTY2FuT3BhcXVlIHNv ID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUQmF0Y2hEYXRhICpidGZpcnN0YmF0 Y2ggPSBCVEJhdGNoR2V0RGF0YShzY2FuLCBmaXJzdGJhdGNoKTsKKwlCbG9ja051bWJlciBibGtu bywKKwkJCQlsYXN0Y3VycmJsa25vOworCWJvb2wJCW1vcmVJbkRpcjsKIAotCXNvLT5udW1LaWxs ZWQgPSAwOwkJCS8qIGp1c3QgcGFyYW5vaWEgKi8KLQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwkJ LyogZGl0dG8gKi8KLQotCS8qIEluaXRpYWxpemUgc28tPmN1cnJQb3MgZm9yIHRoZSBmaXJzdCBw YWdlIChwYWdlIGluIHNvLT5jdXJyUG9zLmJ1ZikgKi8KKwkvKiBJbml0aWFsaXplIGZpcnN0YmF0 Y2gncyBwb3NpdGlvbiBmb3IgdGhlIGZpcnN0IHBhZ2UgKi8KIAlpZiAoc28tPm5lZWRQcmltU2Nh bikKIAl7CiAJCUFzc2VydChzby0+bnVtQXJyYXlLZXlzKTsKIAotCQlzby0+Y3VyclBvcy5tb3Jl TGVmdCA9IHRydWU7Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7CisJCWJ0Zmlyc3Ri YXRjaC0+bW9yZUxlZnQgPSB0cnVlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7 CiAJCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKIAl9CiAJZWxzZSBpZiAoU2NhbkRpcmVjdGlv bklzRm9yd2FyZChkaXIpKQogCXsKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSBmYWxzZTsKLQkJ c28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlTGVmdCA9 IGZhbHNlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7CiAJfQogCWVsc2UKIAl7 Ci0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0 ID0gZmFsc2U7CisJCWJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOworCQlidGZpcnN0YmF0 Y2gtPm1vcmVSaWdodCA9IGZhbHNlOwogCX0KIAogCS8qCiAJICogQXR0ZW1wdCB0byBsb2FkIG1h dGNoaW5nIHR1cGxlcyBmcm9tIHRoZSBmaXJzdCBwYWdlLgogCSAqCi0JICogTm90ZSB0aGF0IF9i dF9yZWFkcGFnZSB3aWxsIGZpbmlzaCBpbml0aWFsaXppbmcgdGhlIHNvLT5jdXJyUG9zIGZpZWxk cy4KKwkgKiBOb3RlIHRoYXQgX2J0X3JlYWRwYWdlIHdpbGwgZmluaXNoIGluaXRpYWxpemluZyB0 aGUgZmlyc3RiYXRjaCBmaWVsZHMuCiAJICogX2J0X3JlYWRwYWdlIGFsc28gcmVsZWFzZXMgcGFy YWxsZWwgc2NhbiAoZXZlbiB3aGVuIGl0IHJldHVybnMgZmFsc2UpLgogCSAqLwotCWlmIChfYnRf cmVhZHBhZ2Uoc2NhbiwgZGlyLCBvZmZudW0sIHRydWUpKQorCWlmIChfYnRfcmVhZHBhZ2Uoc2Nh biwgZmlyc3RiYXRjaCwgZGlyLCBvZmZudW0sIHRydWUpKQogCXsKLQkJUmVsYXRpb24JcmVsID0g c2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQotCQkvKgotCQkgKiBfYnRfcmVhZHBhZ2Ugc3VjY2VlZGVk LiAgRHJvcCB0aGUgbG9jayAoYW5kIG1heWJlIHRoZSBwaW4pIG9uCi0JCSAqIHNvLT5jdXJyUG9z LmJ1ZiBpbiBwcmVwYXJhdGlvbiBmb3IgYnRnZXR0dXBsZSByZXR1cm5pbmcgdHVwbGVzLgotCQkg Ki8KLQkJQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JCV9idF9kcm9w X2xvY2tfYW5kX21heWJlX3BpbihyZWwsIHNvKTsKLQkJcmV0dXJuIHRydWU7CisJCS8qIF9idF9y ZWFkcGFnZSBzYXZlZCBvbmUgb3IgbW9yZSBtYXRjaGVzIGluIGZpcnN0YmF0Y2guaXRlbXNbXSAq LworCQlfYnRfYmF0Y2hfdW5sb2NrKHNjYW4sIGZpcnN0YmF0Y2gsIGJ0Zmlyc3RiYXRjaC0+YnVm KTsKKwkJcmV0dXJuIGZpcnN0YmF0Y2g7CiAJfQogCi0JLyogVGhlcmUncyBubyBhY3R1YWxseS1t YXRjaGluZyBkYXRhIG9uIHRoZSBwYWdlIGluIHNvLT5jdXJyUG9zLmJ1ZiAqLwotCV9idF91bmxv Y2tidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgc28tPmN1cnJQb3MuYnVmKTsKKwkvKiBUaGVyZSdz IG5vIGFjdHVhbGx5LW1hdGNoaW5nIGRhdGEgb24gdGhlIHBhZ2UgcmV0dXJuZWQgYnkgX2J0X3Nl YXJjaCAqLworCV9idF9yZWxidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgYnRmaXJzdGJhdGNoLT5i dWYpOwogCi0JLyogQ2FsbCBfYnRfcmVhZG5leHRwYWdlIHVzaW5nIGl0cyBfYnRfc3RlcHBhZ2Ug d3JhcHBlciBmdW5jdGlvbiAqLwotCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCXJl dHVybiBmYWxzZTsKKwkvKiBXYWxrIHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhICovCisJaWYg KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJYmxrbm8gPSBidGZpcnN0YmF0Y2gtPm5l eHRQYWdlOworCWVsc2UKKwkJYmxrbm8gPSBidGZpcnN0YmF0Y2gtPnByZXZQYWdlOworCWxhc3Rj dXJyYmxrbm8gPSBidGZpcnN0YmF0Y2gtPmN1cnJQYWdlOworCW1vcmVJbkRpciA9IFNjYW5EaXJl Y3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJCWJ0Zmlyc3RiYXRjaC0+bW9yZVJpZ2h0IDogYnRmaXJz dGJhdGNoLT5tb3JlTGVmdDsKIAotCS8qIF9idF9yZWFkcGFnZSBmb3IgYSBsYXRlciBwYWdlIChu b3cgaW4gc28tPmN1cnJQb3MpIHN1Y2NlZWRlZCAqLwotCXJldHVybiB0cnVlOworCS8qIFJlbGVh c2UgZmlyc3RiYXRjaCAod2lsbCBiZSByZWN5Y2xlZCBpZiB3ZSByZWFjaCBfYnRfcmVhZG5leHRw YWdlKSAqLworCWluZGV4YW1fdXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4sIGZpcnN0YmF0Y2gpOwor CisJaWYgKGJsa25vID09IFBfTk9ORSB8fCAhbW9yZUluRGlyKQorCXsKKwkJLyoKKwkJICogZmly c3RiYXRjaCBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRlZCBzY2FuIGluIHRoaXMgZGlyZWN0aW9uICh0 aG91Z2gKKwkJICogaWYgc28tPm5lZWRQcmltU2NhbiB3YXMgc2V0IHRoZSBzY2FuIHdpbGwgY29u dGludWUgaW4gX2J0X2ZpcnN0KQorCQkgKi8KKwkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJ CXJldHVybiBOVUxMOworCX0KKworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2Nh biB0byBnZXQgbmV4dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwg JiYKKwkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBm YWxzZSkpCisJCXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4gd2Fz bid0IHNldCAqLworCisJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3Rj dXJyYmxrbm8sIGRpciwgZmFsc2UpOwogfQogCiAvKgogICoJX2J0X3JlYWRuZXh0cGFnZSgpIC0t IFJlYWQgbmV4dCBwYWdlIGNvbnRhaW5pbmcgdmFsaWQgZGF0YSBmb3IgX2J0X25leHQKICAqCi0g KiBDYWxsZXIncyBibGtubyBpcyB0aGUgbmV4dCBpbnRlcmVzdGluZyBwYWdlJ3MgbGluaywgdGFr ZW4gZnJvbSBlaXRoZXIgdGhlCi0gKiBwcmV2aW91c2x5LXNhdmVkIHJpZ2h0IGxpbmsgb3IgbGVm dCBsaW5rLiAgbGFzdGN1cnJibGtubyBpcyB0aGUgcGFnZSB0aGF0Ci0gKiB3YXMgY3VycmVudCBh dCB0aGUgcG9pbnQgd2hlcmUgdGhlIGJsa25vIGxpbmsgd2FzIHNhdmVkLCB3aGljaCB3ZSB1c2Ug dG8KLSAqIHJlYXNvbiBhYm91dCBjb25jdXJyZW50IHBhZ2Ugc3BsaXRzL3BhZ2UgZGVsZXRpb25z IGR1cmluZyBiYWNrd2FyZHMgc2NhbnMuCi0gKiBJbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgc2Vp emVkPWZhbHNlLCBibGtubyBpcyBlaXRoZXIgc28tPmN1cnJQb3MubmV4dFBhZ2UKLSAqIG9yIHNv LT5jdXJyUG9zLnByZXZQYWdlLCBhbmQgbGFzdGN1cnJibGtubyBpcyBzby0+Y3VyclBvcy5jdXJy UGFnZS4KKyAqIENhbGxlcidzIGJsa25vIGlzIHRoZSBwcmlvciBiYXRjaCdzIG5leHRQYWdlIG9y IHByZXZQYWdlIChkZXBlbmRpbmcgb24gdGhlCisgKiBjdXJyZW50IHNjYW4gZGlyZWN0aW9uKSwg YW5kIGxhc3RjdXJyYmxrbm8gaXMgdGhlIHByaW9yIGJhdGNoJ3MgY3VyclBhZ2UuCisgKiBXZSB1 c2UgbGFzdGN1cnJibGtubyB0byByZWFzb24gYWJvdXQgY29uY3VycmVudCBwYWdlIHNwbGl0cy9w YWdlIGRlbGV0aW9ucworICogZHVyaW5nIGJhY2t3YXJkcyBzY2Fucy4KICAqCi0gKiBPbiBlbnRy eSwgc28tPmN1cnJQb3Mgc2hvdWxkbid0IGJlIGxvY2tlZCBieSBjYWxsZXIuICBzby0+Y3VyclBv cy5idWYgbXVzdAotICogYmUgSW52YWxpZEJ1ZmZlci91bnBpbm5lZCBhcyBuZWVkZWQgYnkgY2Fs bGVyIChub3RlIHRoYXQgbGFzdGN1cnJibGtubwotICogd29uJ3QgbmVlZCB0byBiZSByZWFkIGFn YWluIGluIGFsbW9zdCBhbGwgY2FzZXMpLiAgUGFyYWxsZWwgc2NhbiBjYWxsZXJzCi0gKiB0aGF0 IHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlIHNob3VsZCBwYXNzIHNlaXplZD10 cnVlOyBzdWNoIGEKLSAqIGNhbGxlcidzIGJsa25vIGFuZCBsYXN0Y3VycmJsa25vIGFyZ3VtZW50 cyBjb21lIGZyb20gdGhlIHNlaXplZCBzY2FuLgotICogc2VpemVkPWZhbHNlIGNhbGxlcnMganVz dCBwYXNzIHVzIHRoZSBibGtuby9sYXN0Y3VycmJsa25vIHRha2VuIGZyb20gdGhlaXIKLSAqIHNv LT5jdXJyUG9zLCB3aGljaCAoYWxvbmcgd2l0aCBzby0+Y3VyclBvcyBpdHNlbGYpIGNhbiBiZSB1 c2VkIHRvIGVuZCB0aGUKLSAqIHNjYW4uICBBIHNlaXplZD1mYWxzZSBjYWxsZXIncyBibGtubyBj YW4gbmV2ZXIgYmUgYXNzdW1lZCB0byBiZSB0aGUgcGFnZQotICogdGhhdCBtdXN0IGJlIHJlYWQg bmV4dCBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLCB0aG91Z2guICBXZSBtdXN0IGZpZ3VyZSB0aGF0 Ci0gKiBwYXJ0IG91dCBmb3Igb3Vyc2VsdmVzIGJ5IHNlaXppbmcgdGhlIHNjYW4gKHRoZSBjb3Jy ZWN0IHBhZ2UgdG8gcmVhZCBtaWdodAotICogYWxyZWFkeSBiZSBiZXlvbmQgdGhlIHNlaXplZD1m YWxzZSBjYWxsZXIncyBibGtubyBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLAotICogdW5sZXNzIGJs a25vL3NvLT5jdXJyUG9zLm5leHRQYWdlL3NvLT5jdXJyUG9zLnByZXZQYWdlIGlzIGFscmVhZHkg UF9OT05FLAotICogb3IgdW5sZXNzIHNvLT5jdXJyUG9zLm1vcmVSaWdodC9zby0+Y3VyclBvcy5t b3JlTGVmdCBpcyBhbHJlYWR5IHVuc2V0KS4KKyAqIE9uIGVudHJ5LCBubyBwYWdlIHNob3VsZCBi ZSBsb2NrZWQgYnkgY2FsbGVyLgogICoKLSAqIE9uIHN1Y2Nlc3MgZXhpdCwgc28tPmN1cnJQb3Mg aXMgdXBkYXRlZCB0byBjb250YWluIGRhdGEgZnJvbSB0aGUgbmV4dAotICogaW50ZXJlc3Rpbmcg cGFnZSwgYW5kIHdlIHJldHVybiB0cnVlLiAgV2UgaG9sZCBhIHBpbiBvbiB0aGUgYnVmZmVyIG9u Ci0gKiBzdWNjZXNzIGV4aXQgKGV4Y2VwdCBkdXJpbmcgc28tPmRyb3BQaW4gaW5kZXggc2NhbnMs IHdoZW4gd2UgZHJvcCB0aGUgcGluCi0gKiBlYWdlcmx5IHRvIGF2b2lkIGJsb2NraW5nIFZBQ1VV TSkuCisgKiBPbiBzdWNjZXNzIGV4aXQsIHJldHVybnMgdW5sb2NrZWQgYmF0Y2ggY29udGFpbmlu ZyBkYXRhIGZyb20gdGhlIG5leHQgcGFnZQorICogdGhhdCBoYXMgYXQgbGVhc3Qgb25lIG1hdGNo aW5nIGl0ZW0uICBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBpdGVtcworICogaW4gdGhl IGdpdmVuIHNjYW4gZGlyZWN0aW9uLCB3ZSBqdXN0IHJldHVybiBOVUxMLiAgTm90ZSB0aGF0IHJl dHVybmluZyBOVUxMCisgKiBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gdGhlIGVuZCBvZiB0aGUg dG9wLWxldmVsIHNjYW47IGJ0Z2V0YmF0Y2ggYW5kCisgKiBidGdldGJpdG1hcCBjaGVjayBzby0+ bmVlZFByaW1TY2FuIHRvIGRldGVybWluZSBpZiBhbm90aGVyIHByaW1pdGl2ZSBpbmRleAorICog c2NhbiBpcyByZXF1aXJlZC4KICAqCi0gKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBy ZWNvcmRzIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24sIHdlIGludmFsaWRhdGUKLSAqIHNvLT5jdXJy UG9zICh3aGlsZSBlbnN1cmluZyBpdCByZXRhaW5zIG5vIGxvY2tzIG9yIHBpbnMpLCBhbmQgcmV0 dXJuIGZhbHNlLgotICoKLSAqIFdlIGFsd2F5cyByZWxlYXNlIHRoZSBzY2FuIGZvciBhIHBhcmFs bGVsIHNjYW4gY2FsbGVyLCByZWdhcmRsZXNzIG9mCi0gKiBzdWNjZXNzIG9yIGZhaWx1cmU7IHdl J2xsIGNhbGwgX2J0X3BhcmFsbGVsX3JlbGVhc2UgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAqIFBh cmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IHNlaXplIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhl cmUuICBibGtubyBhbmQKKyAqIGxhc3RjdXJyYmxrbm8gc2hvdWxkIGNvbWUgZnJvbSB0aGUgc2Vp emVkIHNjYW4uICBXZSdsbCByZWxlYXNlIHRoZSBzY2FuIGFzCisgKiBzb29uIGFzIHBvc3NpYmxl LgogICovCi1zdGF0aWMgYm9vbAorc3RhdGljIEluZGV4U2NhbkJhdGNoCiBfYnRfcmVhZG5leHRw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCi0JCQkJIEJsb2NrTnVt YmVyIGxhc3RjdXJyYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIHNlaXplZCkKKwkJCQkg QmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgZmlyc3Rw YWdlKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQlRTY2FuT3Bh cXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUluZGV4U2NhbkJhdGNoIG5l d2JhdGNoOworCUJUQmF0Y2hEYXRhICpidG5ld2JhdGNoOwogCi0JQXNzZXJ0KHNvLT5jdXJyUG9z LmN1cnJQYWdlID09IGxhc3RjdXJyYmxrbm8gfHwgc2VpemVkKTsKLQlBc3NlcnQoIShibGtubyA9 PSBQX05PTkUgJiYgc2VpemVkKSk7Ci0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3Vy clBvcykpOworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBuZXcgYmF0Y2ggYmVmb3JlIGxvY2tpbmcg YW55dGhpbmcgKi8KKwluZXdiYXRjaCA9IGluZGV4YW1fdXRpbF9hbGxvY19iYXRjaChzY2FuKTsK KwlidG5ld2JhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgbmV3YmF0Y2gpOwogCiAJLyoKLQkg KiBSZW1lbWJlciB0aGF0IHRoZSBzY2FuIGFscmVhZHkgcmVhZCBsYXN0Y3VycmJsa25vLCBhIHBh Z2UgdG8gdGhlIGxlZnQKLQkgKiBvZiBibGtubyAob3IgcmVtZW1iZXIgcmVhZGluZyBhIHBhZ2Ug dG8gdGhlIHJpZ2h0LCBmb3IgYmFja3dhcmRzIHNjYW5zKQorCSAqIG5ld2JhdGNoIHdpbGwgYmUg dGhlIGJhdGNoIGZvciBibGtubywgYSBwYWdlIHRvIHRoZSByaWdodCBvZgorCSAqIGxhc3RjdXJy Ymxrbm8gKG9yIHRvIHRoZSBsZWZ0LCB3aGVuIHRoZSBzY2FuIGlzIG1vdmluZyBiYWNrd2FyZHMp LgorCSAqCisJICogTm90ZTogY2FsbGVyJ3MgYmxrbm8gaXMgdGVudGF0aXZlLiAgbmV3YmF0Y2gg YWN0dWFsbHkgc3RvcmVzIG1hdGNoZXMKKwkgKiBmcm9tIHRoZSBuZXh0IGxlYWYgcGFnZSBpbiB0 aGlzIHNjYW4gZGlyZWN0aW9uIHRoYXQgaGFzIGF0IGxlYXN0IG9uZQorCSAqIG1hdGNoaW5nIGl0 ZW0uICBUaGlzIGlzIHVzdWFsbHkgY2FsbGVyJ3MgYmxrbm8gcGFnZSwgYnV0IG1pZ2h0IGJlIHNv bWUKKwkgKiBvdGhlciBwYWdlIHRvIGl0cyByaWdodCAob3IgdG8gaXRzIGxlZnQpIGluc3RlYWQu CiAJICovCi0JaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQkJc28tPmN1cnJQb3Mu bW9yZUxlZnQgPSB0cnVlOwotCWVsc2UKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsK KwlidG5ld2JhdGNoLT5tb3JlTGVmdCA9IHRydWU7CS8qIGZvciBsYXN0Y3VycmJsa25vIChvciB0 ZW50YXRpdmUpICovCisJYnRuZXdiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsJLyogdGVudGF0aXZl IChvciBmb3IgbGFzdGN1cnJibGtubykgKi8KIAogCWZvciAoOzspCiAJewogCQlQYWdlCQlwYWdl OwogCQlCVFBhZ2VPcGFxdWUgb3BhcXVlOwogCi0JCWlmIChibGtubyA9PSBQX05PTkUgfHwKLQkJ CShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPwotCQkJICFzby0+Y3VyclBvcy5tb3JlUmln aHQgOiAhc28tPmN1cnJQb3MubW9yZUxlZnQpKQotCQl7Ci0JCQkvKiBtb3N0IHJlY2VudCBfYnRf cmVhZHBhZ2UgY2FsbCAoZm9yIGxhc3RjdXJyYmxrbm8pIGVuZGVkIHNjYW4gKi8KLQkJCUFzc2Vy dChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBsYXN0Y3VycmJsa25vICYmICFzZWl6ZWQpOwotCQkJ QlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCQlfYnRfcGFyYWxsZWxfZG9uZShz Y2FuKTsJLyogaWZmICFzby0+bmVlZFByaW1TY2FuICovCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0K LQotCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwotCi0JCS8qIHBhcmFsbGVsIHNjYW4gbXVz dCBuZXZlciBhY3R1YWxseSB2aXNpdCBzby0+Y3VyclBvcyBibGtubyAqLwotCQlpZiAoIXNlaXpl ZCAmJiBzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKLQkJCSFfYnRfcGFyYWxsZWxfc2Vp emUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQotCQl7Ci0JCQkvKiB3aG9s ZSBzY2FuIGlzIG5vdyBkb25lIChvciBhbm90aGVyIHByaW1pdGl2ZSBzY2FuIHJlcXVpcmVkKSAq LwotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCQlyZXR1cm4gZmFsc2U7 Ci0JCX0KKwkJQXNzZXJ0KCEoKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlKS0+bmVlZFByaW1T Y2FuKTsKKwkJQXNzZXJ0KGJsa25vICE9IFBfTk9ORSAmJiBsYXN0Y3VycmJsa25vICE9IFBfTk9O RSk7CiAKIAkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAkJewogCQkJLyogcmVh ZCBibGtubywgYnV0IGNoZWNrIGZvciBpbnRlcnJ1cHRzIGZpcnN0ICovCiAJCQlDSEVDS19GT1Jf SU5URVJSVVBUUygpOwotCQkJc28tPmN1cnJQb3MuYnVmID0gX2J0X2dldGJ1ZihyZWwsIGJsa25v LCBCVF9SRUFEKTsKKwkJCWJ0bmV3YmF0Y2gtPmJ1ZiA9IF9idF9nZXRidWYocmVsLCBibGtubywg QlRfUkVBRCk7CiAJCX0KIAkJZWxzZQogCQl7CiAJCQkvKiByZWFkIGJsa25vLCBhdm9pZGluZyBy YWNlIChhbHNvIGNoZWNrcyBmb3IgaW50ZXJydXB0cykgKi8KLQkJCXNvLT5jdXJyUG9zLmJ1ZiA9 IF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KHJlbCwgJmJsa25vLAorCQkJYnRuZXdiYXRjaC0+ YnVmID0gX2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xlZnQocmVsLCAmYmxrbm8sCiAJCQkJCQkJCQkJ CQkJCSBsYXN0Y3VycmJsa25vKTsKLQkJCWlmIChzby0+Y3VyclBvcy5idWYgPT0gSW52YWxpZEJ1 ZmZlcikKKwkJCWlmIChidG5ld2JhdGNoLT5idWYgPT0gSW52YWxpZEJ1ZmZlcikKIAkJCXsKIAkJ CQkvKiBtdXN0IGhhdmUgYmVlbiBhIGNvbmN1cnJlbnQgZGVsZXRpb24gb2YgbGVmdG1vc3QgcGFn ZSAqLwotCQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwogCQkJCV9idF9wYXJh bGxlbF9kb25lKHNjYW4pOwotCQkJCXJldHVybiBmYWxzZTsKKwkJCQlpbmRleGFtX3V0aWxfcmVs ZWFzZV9iYXRjaChzY2FuLCBuZXdiYXRjaCk7CisJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CiAJCX0K IAotCQlwYWdlID0gQnVmZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYpOworCQlwYWdlID0gQnVm ZmVyR2V0UGFnZShidG5ld2JhdGNoLT5idWYpOwogCQlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUo cGFnZSk7CiAJCWxhc3RjdXJyYmxrbm8gPSBibGtubzsKIAkJaWYgKGxpa2VseSghUF9JR05PUkUo b3BhcXVlKSkpCkBAIC0xOTExLDE3ICsxODA1LDE3IEBAIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKIAkJCS8qIHNlZSBpZiB0aGVyZSBhcmUg YW55IG1hdGNoZXMgb24gdGhpcyBwYWdlICovCiAJCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChkaXIpKQogCQkJewotCQkJCS8qIG5vdGUgdGhhdCB0aGlzIHdpbGwgY2xlYXIgbW9yZVJpZ2h0 IGlmIHdlIGNhbiBzdG9wICovCi0JCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIsIFBfRklS U1REQVRBS0VZKG9wYXF1ZSksIHNlaXplZCkpCisJCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBu ZXdiYXRjaCwgZGlyLAorCQkJCQkJCQkgUF9GSVJTVERBVEFLRVkob3BhcXVlKSwgZmlyc3RwYWdl KSkKIAkJCQkJYnJlYWs7Ci0JCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFnZTsKKwkJCQli bGtubyA9IGJ0bmV3YmF0Y2gtPm5leHRQYWdlOwogCQkJfQogCQkJZWxzZQogCQkJewotCQkJCS8q IG5vdGUgdGhhdCB0aGlzIHdpbGwgY2xlYXIgbW9yZUxlZnQgaWYgd2UgY2FuIHN0b3AgKi8KLQkJ CQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdl KSwgc2VpemVkKSkKKwkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIG5ld2JhdGNoLCBkaXIsCisJ CQkJCQkJCSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpLCBmaXJzdHBhZ2UpKQogCQkJCQli cmVhazsKLQkJCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdlOworCQkJCWJsa25vID0gYnRu ZXdiYXRjaC0+cHJldlBhZ2U7CiAJCQl9CiAJCX0KIAkJZWxzZQpAQCAtMTkzNiwxOSArMTgzMCwz OCBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxr bm8sCiAJCX0KIAogCQkvKiBubyBtYXRjaGluZyB0dXBsZXMgb24gdGhpcyBwYWdlICovCi0JCV9i dF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCQlzZWl6ZWQgPSBmYWxzZTsJCQkvKiBy ZWxlYXNlZCBieSBfYnRfcmVhZHBhZ2UgKG9yIGJ5IHVzKSAqLworCQlfYnRfcmVsYnVmKHJlbCwg YnRuZXdiYXRjaC0+YnVmKTsKKworCQkvKiBDb250aW51ZSB0aGUgc2NhbiBpbiB0aGlzIGRpcmVj dGlvbj8gKi8KKwkJaWYgKGJsa25vID09IFBfTk9ORSB8fAorCQkJKFNjYW5EaXJlY3Rpb25Jc0Zv cndhcmQoZGlyKSA/CisJCQkgIWJ0bmV3YmF0Y2gtPm1vcmVSaWdodCA6ICFidG5ld2JhdGNoLT5t b3JlTGVmdCkpCisJCXsKKwkJCS8qCisJCQkgKiBibGtubyBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRl ZCBzY2FuIGluIHRoaXMgZGlyZWN0aW9uICh0aG91Z2ggaWYKKwkJCSAqIHNvLT5uZWVkUHJpbVNj YW4gd2FzIHNldCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJzdCkKKwkJCSAqLwor CQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCQlpbmRleGFtX3V0aWxfcmVsZWFzZV9iYXRj aChzY2FuLCBuZXdiYXRjaCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCS8qIHBhcmFsbGVs IHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2NhbiB0byBnZXQgbmV4dCBibGtubyAqLworCQlpZiAoc2Nh bi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4s ICZibGtubywgJmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKKwkJeworCQkJaW5kZXhhbV91dGlsX3Jl bGVhc2VfYmF0Y2goc2NhbiwgbmV3YmF0Y2gpOworCQkJcmV0dXJuIE5VTEw7CQkvKiBkb25lIGlm ZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KKwkJfQorCisJCWZpcnN0cGFnZSA9IGZh bHNlOwkJLyogbmV4dCBwYWdlIGNhbm5vdCBiZSBmaXJzdCAqLwogCX0KIAotCS8qCi0JICogX2J0 X3JlYWRwYWdlIHN1Y2NlZWRlZC4gIERyb3AgdGhlIGxvY2sgKGFuZCBtYXliZSB0aGUgcGluKSBv bgotCSAqIHNvLT5jdXJyUG9zLmJ1ZiBpbiBwcmVwYXJhdGlvbiBmb3IgYnRnZXR0dXBsZSByZXR1 cm5pbmcgdHVwbGVzLgotCSAqLwotCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBibGtu byk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JX2J0X2Ryb3Bf bG9ja19hbmRfbWF5YmVfcGluKHJlbCwgc28pOworCS8qIF9idF9yZWFkcGFnZSBzYXZlZCBvbmUg b3IgbW9yZSBtYXRjaGVzIGluIG5ld2JhdGNoLml0ZW1zW10gKi8KKwlBc3NlcnQoYnRuZXdiYXRj aC0+Y3VyclBhZ2UgPT0gYmxrbm8pOworCV9idF9iYXRjaF91bmxvY2soc2NhbiwgbmV3YmF0Y2gs IGJ0bmV3YmF0Y2gtPmJ1Zik7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbmV3YmF0Y2g7CiB9 CiAKIC8qCkBAIC0yMTc0LDI1ICsyMDg3LDI5IEBAIF9idF9nZXRfZW5kcG9pbnQoUmVsYXRpb24g cmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0KQogICogUGFyYWxsZWwgc2NhbiBjYWxs ZXJzIG11c3QgaGF2ZSBzZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVyZS4KICAqIEV4 aXQgY29uZGl0aW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yIF9idF9maXJzdCgpLgogICovCi1zdGF0 aWMgYm9vbAorc3RhdGljIEluZGV4U2NhbkJhdGNoCiBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRl eFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1 ZTsKKwlJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoOworCUJUQmF0Y2hEYXRhICpidGZpcnN0YmF0 Y2g7CiAJUGFnZQkJcGFnZTsKIAlCVFBhZ2VPcGFxdWUgb3BhcXVlOwogCU9mZnNldE51bWJlciBz dGFydDsKIAotCUFzc2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCUFzc2Vy dCghc28tPm5lZWRQcmltU2Nhbik7CisJQXNzZXJ0KCEoKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3Bh cXVlKS0+bmVlZFByaW1TY2FuKTsKKworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBmaXJzdCBiYXRj aCBiZWZvcmUgbG9ja2luZyBhbnl0aGluZyAqLworCWZpcnN0YmF0Y2ggPSBpbmRleGFtX3V0aWxf YWxsb2NfYmF0Y2goc2Nhbik7CisJYnRmaXJzdGJhdGNoID0gQlRCYXRjaEdldERhdGEoc2Nhbiwg Zmlyc3RiYXRjaCk7CiAKIAkvKgogCSAqIFNjYW4gZG93biB0byB0aGUgbGVmdG1vc3Qgb3Igcmln aHRtb3N0IGxlYWYgcGFnZS4gIFRoaXMgaXMgYSBzaW1wbGlmaWVkCiAJICogdmVyc2lvbiBvZiBf YnRfc2VhcmNoKCkuCiAJICovCi0Jc28tPmN1cnJQb3MuYnVmID0gX2J0X2dldF9lbmRwb2ludChy ZWwsIDAsIFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikpOworCWJ0Zmlyc3RiYXRjaC0+YnVm ID0gX2J0X2dldF9lbmRwb2ludChyZWwsIDAsIFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikp OwogCi0JaWYgKCFCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCisJaWYgKCFCdWZmZXJJ c1ZhbGlkKGJ0Zmlyc3RiYXRjaC0+YnVmKSkKIAl7CiAJCS8qCiAJCSAqIEVtcHR5IGluZGV4LiBM b2NrIHRoZSB3aG9sZSByZWxhdGlvbiwgYXMgbm90aGluZyBmaW5lciB0byBsb2NrCkBAIC0yMjAw LDEwICsyMTE3LDExIEBAIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKQogCQkgKi8KIAkJUHJlZGljYXRlTG9ja1JlbGF0aW9uKHJlbCwgc2Nhbi0+eHNf c25hcHNob3QpOwogCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKLQkJcmV0dXJuIGZhbHNlOwor CQlpbmRleGFtX3V0aWxfcmVsZWFzZV9iYXRjaChzY2FuLCBmaXJzdGJhdGNoKTsKKwkJcmV0dXJu IE5VTEw7CiAJfQogCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwlw YWdlID0gQnVmZmVyR2V0UGFnZShidGZpcnN0YmF0Y2gtPmJ1Zik7CiAJb3BhcXVlID0gQlRQYWdl R2V0T3BhcXVlKHBhZ2UpOwogCUFzc2VydChQX0lTTEVBRihvcGFxdWUpKTsKIApAQCAtMjIyOSw5 ICsyMTQ3LDUgQEAgX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpCiAJLyoKIAkgKiBOb3cgbG9hZCBkYXRhIGZyb20gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhl IHNjYW4uCiAJICovCi0JaWYgKCFfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBzdGFydCwgZGlyKSkK LQkJcmV0dXJuIGZhbHNlOwotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwotCXJldHVybiB0 cnVlOworCXJldHVybiBfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBmaXJzdGJhdGNoLCBzdGFydCwg ZGlyKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYwppbmRleCAwMTRmYWExNjIu LmI2Yzk3N2I5NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGls cy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYwpAQCAtMTksMTAg KzE5LDcgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIKICNpbmNsdWRlICJhY2Nlc3Mv cmVsb3B0aW9ucy5oIgotI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiY29t bWFuZHMvcHJvZ3Jlc3MuaCIKLSNpbmNsdWRlICJjb21tb24vaW50LmgiCi0jaW5jbHVkZSAibGli L3F1bmlxdWUuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJzdG9yYWdlL2x3 bG9jay5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgpAQCAtMzEsNyArMjgsNiBA QAogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiAKLXN0YXRpYyBpbnQJX2J0X2NvbXBhcmVfaW50 KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2Yik7CiBzdGF0aWMgaW50CV9idF9rZWVwX25h dHRzKFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBsYXN0bGVmdCwKIAkJCQkJCSAgIEluZGV4VHVw bGUgZmlyc3RyaWdodCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5KTsKIApAQCAtMTQ2LDI0NyArMTQy LDYgQEAgX2J0X21rc2NhbmtleShSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgaXR1cCkKIAlyZXR1 cm4ga2V5OwogfQogCi0vKgotICogcXNvcnQgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgaW50IGFy cmF5cwotICovCi1zdGF0aWMgaW50Ci1fYnRfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEsIGNv bnN0IHZvaWQgKnZiKQotewotCWludAkJCWEgPSAqKChjb25zdCBpbnQgKikgdmEpOwotCWludAkJ CWIgPSAqKChjb25zdCBpbnQgKikgdmIpOwotCi0JcmV0dXJuIHBnX2NtcF9zMzIoYSwgYik7Ci19 Ci0KLS8qCi0gKiBfYnRfa2lsbGl0ZW1zIC0gc2V0IExQX0RFQUQgc3RhdGUgZm9yIGl0ZW1zIGFu IGluZGV4c2NhbiBjYWxsZXIgaGFzCi0gKiB0b2xkIHVzIHdlcmUga2lsbGVkCi0gKgotICogc2Nh bi0+b3BhcXVlLCByZWZlcmVuY2VkIGxvY2FsbHkgdGhyb3VnaCBzbywgY29udGFpbnMgaW5mb3Jt YXRpb24gYWJvdXQgdGhlCi0gKiBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZCB0dXBsZXMgdGhlcmVv biAoZ2VuZXJhbGx5LCB0aGlzIHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgaWYgc28tPm51bUtp bGxlZCA+IDApLgotICoKLSAqIENhbGxlciBzaG91bGQgbm90IGhhdmUgYSBsb2NrIG9uIHRoZSBz by0+Y3VyclBvcyBwYWdlLCBidXQgbXVzdCBob2xkIGEKLSAqIGJ1ZmZlciBwaW4gd2hlbiAhc28t PmRyb3BQaW4uICBXaGVuIHdlIHJldHVybiwgaXQgc3RpbGwgd29uJ3QgYmUgbG9ja2VkLgotICog SXQnbGwgY29udGludWUgdG8gaG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUgaGVsZCBiZWZvcmUgY2Fs bGluZyBoZXJlLgotICoKLSAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1 bWluZyB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcyB0byBzZXQKLSAqIExQX0RFQUQuICBJZiB0aGUg c2NhbiBpcyBvbmUgdGhhdCBob2xkcyBhIGJ1ZmZlciBwaW4gb24gdGhlIHRhcmdldCBwYWdlCi0g KiBjb250aW51b3VzbHkgZnJvbSBpbml0aWFsbHkgcmVhZGluZyB0aGUgaXRlbXMgdW50aWwgYXBw bHlpbmcgdGhpcyBmdW5jdGlvbgotICogKGlmIGl0IGlzIGEgIXNvLT5kcm9wUGluIHNjYW4pLCBW QUNVVU0gY2Fubm90IGhhdmUgZGVsZXRlZCBhbnkgaXRlbXMgb24gdGhlCi0gKiBwYWdlLCBzbyB0 aGUgcGFnZSdzIFRJRHMgY2FuJ3QgaGF2ZSBiZWVuIHJlY3ljbGVkIGJ5IG5vdy4gIFRoZXJlJ3Mg bm8gcmlzawotICogdGhhdCB3ZSdsbCBjb25mdXNlIGEgbmV3IGluZGV4IHR1cGxlIHRoYXQgaGFw cGVucyB0byB1c2UgYSByZWN5Y2xlZCBUSUQKLSAqIHdpdGggYSBub3ctcmVtb3ZlZCB0dXBsZSB3 aXRoIHRoZSBzYW1lIFRJRCAodGhhdCB1c2VkIHRvIGJlIG9uIHRoaXMgc2FtZQotICogcGFnZSku ICBXZSBjYW4ndCByZWx5IG9uIHRoYXQgZHVyaW5nIHNjYW5zIHRoYXQgZHJvcCBidWZmZXIgcGlu cyBlYWdlcmx5Ci0gKiAoc28tPmRyb3BQaW4gc2NhbnMpLCB0aG91Z2gsIHNvIHdlIG11c3QgY29u ZGl0aW9uIHNldHRpbmcgTFBfREVBRCBiaXRzIG9uCi0gKiB0aGUgcGFnZSBMU04gaGF2aW5nIG5v dCBjaGFuZ2VkIHNpbmNlIGJhY2sgd2hlbiBfYnRfcmVhZHBhZ2Ugc2F3IHRoZSBwYWdlLgotICog V2UgdG90YWxseSBnaXZlIHVwIG9uIHNldHRpbmcgTFBfREVBRCBiaXRzIHdoZW4gdGhlIHBhZ2Ug TFNOIGNoYW5nZWQuCi0gKgotICogV2UgZ2l2ZSB1cCBtdWNoIGxlc3Mgb2Z0ZW4gZHVyaW5nICFz by0+ZHJvcFBpbiBzY2FucywgYnV0IGl0IHN0aWxsIGhhcHBlbnMuCi0gKiBXZSBjb3BlIHdpdGgg Y2FzZXMgd2hlcmUgaXRlbXMgaGF2ZSBtb3ZlZCByaWdodCBkdWUgdG8gaW5zZXJ0aW9ucy4gIElm IGFuCi0gKiBpdGVtIGhhcyBtb3ZlZCBvZmYgdGhlIGN1cnJlbnQgcGFnZSBkdWUgdG8gYSBzcGxp dCwgd2UnbGwgZmFpbCB0byBmaW5kIGl0Ci0gKiBhbmQganVzdCBnaXZlIHVwIG9uIGl0LgotICov Ci12b2lkCi1fYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlSZWxhdGlvbgly ZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFx dWUpIHNjYW4tPm9wYXF1ZTsKLQlQYWdlCQlwYWdlOwotCUJUUGFnZU9wYXF1ZSBvcGFxdWU7Ci0J T2Zmc2V0TnVtYmVyIG1pbm9mZjsKLQlPZmZzZXROdW1iZXIgbWF4b2ZmOwotCWludAkJCW51bUtp bGxlZCA9IHNvLT5udW1LaWxsZWQ7Ci0JYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7Ci0J QnVmZmVyCQlidWY7Ci0KLQlBc3NlcnQobnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0KEJUU2NhblBv c0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5V TEwpOyAvKiBjYW4ndCBiZSBhIGJpdG1hcCBpbmRleCBzY2FuICovCi0KLQkvKiBBbHdheXMgaW52 YWxpZGF0ZSBzby0+a2lsbGVkSXRlbXNbXSBiZWZvcmUgbGVhdmluZyBzby0+Y3VyclBvcyAqLwot CXNvLT5udW1LaWxsZWQgPSAwOwotCi0JLyoKLQkgKiBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3Vn aCBzby0+a2lsbGVkSXRlbXNbXSBpbiBsZWFmIHBhZ2Ugb3JkZXI7IHRoZQotCSAqIGxvb3AgYmVs b3cgZXhwZWN0cyB0aGlzICh3aGVuIG1hcmtpbmcgcG9zdGluZyBsaXN0IHR1cGxlcywgYXQgbGVh c3QpLgotCSAqIHNvLT5raWxsZWRJdGVtc1tdIGlzIG5vdyBpbiB3aGF0ZXZlciBvcmRlciB0aGUg c2NhbiByZXR1cm5lZCBpdGVtcyBpbi4KLQkgKiBTY3JvbGxhYmxlIGN1cnNvciBzY2FucyBtaWdo dCBoYXZlIGV2ZW4gc2F2ZWQgdGhlIHNhbWUgaXRlbS9USUQgdHdpY2UuCi0JICoKLQkgKiBTb3J0 IGFuZCB1bmlxdWUtaWZ5IHNvLT5raWxsZWRJdGVtc1tdIHRvIGRlYWwgd2l0aCBhbGwgdGhpcy4K LQkgKi8KLQlpZiAobnVtS2lsbGVkID4gMSkKLQl7Ci0JCXFzb3J0KHNvLT5raWxsZWRJdGVtcywg bnVtS2lsbGVkLCBzaXplb2YoaW50KSwgX2J0X2NvbXBhcmVfaW50KTsKLQkJbnVtS2lsbGVkID0g cXVuaXF1ZShzby0+a2lsbGVkSXRlbXMsIG51bUtpbGxlZCwgc2l6ZW9mKGludCksCi0JCQkJCQkJ X2J0X2NvbXBhcmVfaW50KTsKLQl9Ci0KLQlpZiAoIXNvLT5kcm9wUGluKQotCXsKLQkJLyoKLQkJ ICogV2UgaGF2ZSBoZWxkIHRoZSBwaW4gb24gdGhpcyBwYWdlIHNpbmNlIHdlIHJlYWQgdGhlIGlu ZGV4IHR1cGxlcywKLQkJICogc28gYWxsIHdlIG5lZWQgdG8gZG8gaXMgbG9jayBpdC4gIFRoZSBw aW4gd2lsbCBoYXZlIHByZXZlbnRlZAotCQkgKiBjb25jdXJyZW50IFZBQ1VVTXMgZnJvbSByZWN5 Y2xpbmcgYW55IG9mIHRoZSBUSURzIG9uIHRoZSBwYWdlLgotCQkgKi8KLQkJQXNzZXJ0KEJUU2Nh blBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKLQkJ X2J0X2xvY2tidWYocmVsLCBidWYsIEJUX1JFQUQpOwotCX0KLQllbHNlCi0JewotCQlYTG9nUmVj UHRyCWxhdGVzdGxzbjsKLQotCQlBc3NlcnQoIUJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9z KSk7Ci0JCWJ1ZiA9IF9idF9nZXRidWYocmVsLCBzby0+Y3VyclBvcy5jdXJyUGFnZSwgQlRfUkVB RCk7Ci0KLQkJbGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7Ci0JCUFzc2VydChz by0+Y3VyclBvcy5sc24gPD0gbGF0ZXN0bHNuKTsKLQkJaWYgKHNvLT5jdXJyUG9zLmxzbiAhPSBs YXRlc3Rsc24pCi0JCXsKLQkJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8KLQkJ CV9idF9yZWxidWYocmVsLCBidWYpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJLyogVW5tb2RpZmll ZCwgaGludGluZyBpcyBzYWZlICovCi0JfQotCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsK LQlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7Ci0JbWlub2ZmID0gUF9GSVJTVERBVEFL RVkob3BhcXVlKTsKLQltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOwotCi0J LyogSXRlcmF0ZSB0aHJvdWdoIHNvLT5raWxsZWRJdGVtc1tdIGluIGxlYWYgcGFnZSBvcmRlciAq LwotCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtS2lsbGVkOyBpKyspCi0JewotCQlpbnQJCQlpdGVt SW5kZXggPSBzby0+a2lsbGVkSXRlbXNbaV07Ci0JCUJUU2NhblBvc0l0ZW0gKmtpdGVtID0gJnNv LT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07Ci0JCU9mZnNldE51bWJlciBvZmZudW0gPSBraXRl bS0+aW5kZXhPZmZzZXQ7Ci0KLQkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5maXJz dEl0ZW0gJiYKLQkJCSAgIGl0ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7Ci0JCUFz c2VydChpID09IDAgfHwKLQkJCSAgIG9mZm51bSA+PSBzby0+Y3VyclBvcy5pdGVtc1tzby0+a2ls bGVkSXRlbXNbaSAtIDFdXS5pbmRleE9mZnNldCk7Ci0KLQkJaWYgKG9mZm51bSA8IG1pbm9mZikK LQkJCWNvbnRpbnVlOwkJCS8qIHB1cmUgcGFyYW5vaWEgKi8KLQkJd2hpbGUgKG9mZm51bSA8PSBt YXhvZmYpCi0JCXsKLQkJCUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0p OwotCQkJSW5kZXhUdXBsZQlpdHVwbGUgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwg aWlkKTsKLQkJCWJvb2wJCWtpbGx0dXBsZSA9IGZhbHNlOwotCi0JCQlpZiAoQlRyZWVUdXBsZUlz UG9zdGluZyhpdHVwbGUpKQotCQkJewotCQkJCWludAkJCXBpID0gaSArIDE7Ci0JCQkJaW50CQkJ bnBvc3RpbmcgPSBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cGxlKTsKLQkJCQlpbnQJCQlqOwot Ci0JCQkJLyoKLQkJCQkgKiBOb3RlIHRoYXQgdGhlIHBhZ2UgbWF5IGhhdmUgYmVlbiBtb2RpZmll ZCBpbiBhbG1vc3QgYW55IHdheQotCQkJCSAqIHNpbmNlIHdlIGZpcnN0IHJlYWQgaXQgKGluIHRo ZSAhc28tPmRyb3BQaW4gY2FzZSksIHNvIGl0J3MKLQkJCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMg cG9zdGluZyBsaXN0IHR1cGxlIHdhc24ndCBhIHBvc3RpbmcgbGlzdAotCQkJCSAqIHR1cGxlIHdo ZW4gd2UgZmlyc3QgZW5jb3VudGVyZWQgaXRzIGhlYXAgVElEcy4KLQkJCQkgKi8KLQkJCQlmb3Ig KGogPSAwOyBqIDwgbnBvc3Rpbmc7IGorKykKLQkJCQl7Ci0JCQkJCUl0ZW1Qb2ludGVyIGl0ZW0g PSBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cGxlLCBqKTsKLQotCQkJCQlpZiAoIUl0ZW1Qb2lu dGVyRXF1YWxzKGl0ZW0sICZraXRlbS0+aGVhcFRpZCkpCi0JCQkJCQlicmVhazsJLyogb3V0IG9m IHBvc3RpbmcgbGlzdCBsb29wICovCi0KLQkJCQkJLyoKLQkJCQkJICoga2l0ZW0gbXVzdCBoYXZl IG1hdGNoaW5nIG9mZm51bSB3aGVuIGhlYXAgVElEcyBtYXRjaCwKLQkJCQkJICogdGhvdWdoIG9u bHkgaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSBwYWdlIGNhbid0Ci0JCQkJCSAqIGhhdmUg YmVlbiBjb25jdXJyZW50bHkgbW9kaWZpZWQKLQkJCQkJICovCi0JCQkJCUFzc2VydChraXRlbS0+ aW5kZXhPZmZzZXQgPT0gb2ZmbnVtIHx8ICFzby0+ZHJvcFBpbik7Ci0KLQkJCQkJLyoKLQkJCQkJ ICogUmVhZC1haGVhZCB0byBsYXRlciBraXRlbXMgaGVyZS4KLQkJCQkJICoKLQkJCQkJICogV2Ug cmVseSBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IG5vdCBhZHZhbmNpbmcga2l0ZW0gaGVyZQotCQkJ CQkgKiB3aWxsIHByZXZlbnQgdXMgZnJvbSBjb25zaWRlcmluZyB0aGUgcG9zdGluZyBsaXN0IHR1 cGxlCi0JCQkJCSAqIGZ1bGx5IGRlYWQgYnkgbm90IG1hdGNoaW5nIGl0cyBuZXh0IGhlYXAgVElE IGluIG5leHQKLQkJCQkJICogbG9vcCBpdGVyYXRpb24uCi0JCQkJCSAqCi0JCQkJCSAqIElmLCBv biB0aGUgb3RoZXIgaGFuZCwgdGhpcyBpcyB0aGUgZmluYWwgaGVhcCBUSUQgaW4KLQkJCQkJICog dGhlIHBvc3RpbmcgbGlzdCB0dXBsZSwgdGhlbiB0dXBsZSBnZXRzIGtpbGxlZAotCQkJCQkgKiBy ZWdhcmRsZXNzIChpLmUuIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgbGFzdAotCQkJCQkg KiBraXRlbSBpcyBhbHNvIHRoZSBsYXN0IGhlYXAgVElEIGluIHRoZSBsYXN0IGluZGV4IHR1cGxl Ci0JCQkJCSAqIGNvcnJlY3RseSAtLSBwb3N0aW5nIHR1cGxlIHN0aWxsIGdldHMga2lsbGVkKS4K LQkJCQkJICovCi0JCQkJCWlmIChwaSA8IG51bUtpbGxlZCkKLQkJCQkJCWtpdGVtID0gJnNvLT5j dXJyUG9zLml0ZW1zW3NvLT5raWxsZWRJdGVtc1twaSsrXV07Ci0JCQkJfQotCi0JCQkJLyoKLQkJ CQkgKiBEb24ndCBib3RoZXIgYWR2YW5jaW5nIHRoZSBvdXRlcm1vc3QgbG9vcCdzIGludCBpdGVy YXRvciB0bwotCQkJCSAqIGF2b2lkIHByb2Nlc3Npbmcga2lsbGVkIGl0ZW1zIHRoYXQgcmVsYXRl IHRvIHRoZSBzYW1lCi0JCQkJICogb2ZmbnVtL3Bvc3RpbmcgbGlzdCB0dXBsZS4gIFRoaXMgbWlj cm8tb3B0aW1pemF0aW9uIGhhcmRseQotCQkJCSAqIHNlZW1zIHdvcnRoIGl0LiAgKEZ1cnRoZXIg aXRlcmF0aW9ucyBvZiB0aGUgb3V0ZXJtb3N0IGxvb3AKLQkJCQkgKiB3aWxsIGZhaWwgdG8gbWF0 Y2ggb24gdGhpcyBzYW1lIHBvc3RpbmcgbGlzdCdzIGZpcnN0IGhlYXAKLQkJCQkgKiBUSUQgaW5z dGVhZCwgc28gd2UnbGwgYWR2YW5jZSB0byB0aGUgbmV4dCBvZmZudW0vaW5kZXgKLQkJCQkgKiB0 dXBsZSBwcmV0dHkgcXVpY2tseS4pCi0JCQkJICovCi0JCQkJaWYgKGogPT0gbnBvc3RpbmcpCi0J CQkJCWtpbGx0dXBsZSA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlIGlmIChJdGVtUG9pbnRlckVxdWFs cygmaXR1cGxlLT50X3RpZCwgJmtpdGVtLT5oZWFwVGlkKSkKLQkJCQlraWxsdHVwbGUgPSB0cnVl OwotCi0JCQkvKgotCQkJICogTWFyayBpbmRleCBpdGVtIGFzIGRlYWQsIGlmIGl0IGlzbid0IGFs cmVhZHkuICBTaW5jZSB0aGlzCi0JCQkgKiBoYXBwZW5zIHdoaWxlIGhvbGRpbmcgYSBidWZmZXIg bG9jayBwb3NzaWJseSBpbiBzaGFyZWQgbW9kZSwKLQkJCSAqIGl0J3MgcG9zc2libGUgdGhhdCBt dWx0aXBsZSBwcm9jZXNzZXMgYXR0ZW1wdCB0byBkbyB0aGlzCi0JCQkgKiBzaW11bHRhbmVvdXNs eSwgbGVhZGluZyB0byBtdWx0aXBsZSBmdWxsLXBhZ2UgaW1hZ2VzIGJlaW5nIHNlbnQKLQkJCSAq IHRvIFdBTCAoaWYgd2FsX2xvZ19oaW50cyBvciBkYXRhIGNoZWNrc3VtcyBhcmUgZW5hYmxlZCks IHdoaWNoCi0JCQkgKiBpcyB1bmRlc2lyYWJsZS4KLQkJCSAqLwotCQkJaWYgKGtpbGx0dXBsZSAm JiAhSXRlbUlkSXNEZWFkKGlpZCkpCi0JCQl7Ci0JCQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCi0J CQkJewotCQkJCQkvKgotCQkJCQkgKiBVc2UgdGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRv IGNoZWNrIGlmIHdlIGNhbgotCQkJCQkgKiB1cGRhdGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xk aW5nIGEgc2hhcmUgbG9jay4gSWYgd2UKLQkJCQkJICogYXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdz IG5vIHBvaW50IGNvbnRpbnVpbmcuCi0JCQkJCSAqLwotCQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0 SGludEJpdHMoYnVmKSkKLQkJCQkJCWdvdG8gdW5sb2NrX3BhZ2U7Ci0JCQkJfQotCi0JCQkJLyog Zm91bmQgdGhlIGl0ZW0vYWxsIHBvc3RpbmcgbGlzdCBpdGVtcyAqLwotCQkJCUl0ZW1JZE1hcmtE ZWFkKGlpZCk7Ci0JCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKLQkJCQlicmVhazsJCQkvKiBv dXQgb2YgaW5uZXIgc2VhcmNoIGxvb3AgKi8KLQkJCX0KLQkJCW9mZm51bSA9IE9mZnNldE51bWJl ck5leHQob2ZmbnVtKTsKLQkJfQotCX0KLQotCS8qCi0JICogU2luY2UgdGhpcyBjYW4gYmUgcmVk b25lIGxhdGVyIGlmIG5lZWRlZCwgbWFyayBhcyBkaXJ0eSBoaW50LgotCSAqCi0JICogV2hlbmV2 ZXIgd2UgbWFyayBhbnl0aGluZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdzCi0JICog QlRQX0hBU19HQVJCQUdFIGZsYWcsIHdoaWNoIGlzIGxpa2V3aXNlIGp1c3QgYSBoaW50LiAgKE5v dGUgdGhhdCB3ZQotCSAqIG9ubHkgcmVseSBvbiB0aGUgcGFnZS1sZXZlbCBmbGFnIGluICFoZWFw a2V5c3BhY2UgaW5kZXhlcy4pCi0JICovCi0JaWYgKGtpbGxlZHNvbWV0aGluZykKLQl7Ci0JCW9w YXF1ZS0+YnRwb19mbGFncyB8PSBCVFBfSEFTX0dBUkJBR0U7Ci0JCUJ1ZmZlckZpbmlzaFNldEhp bnRCaXRzKGJ1ZiwgdHJ1ZSwgdHJ1ZSk7Ci0JfQotCi11bmxvY2tfcGFnZToKLQlpZiAoIXNvLT5k cm9wUGluKQotCQlfYnRfdW5sb2NrYnVmKHJlbCwgYnVmKTsKLQllbHNlCi0JCV9idF9yZWxidWYo cmVsLCBidWYpOwotfQotCi0KIC8qCiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIG1hbmFnZSBh IHNoYXJlZC1tZW1vcnkgYXJlYSBpbiB3aGljaCB3ZSB0cmFjawogICogYXNzaWdubWVudCBvZiAi dmFjdXVtIGN5Y2xlIElEcyIgdG8gY3VycmVudGx5LWFjdGl2ZSBidHJlZSB2YWN1dW1pbmcKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnR4bG9nLmMKaW5kZXggZGZmN2QyODZmLi4zYmM1ZTVjY2QgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jCkBAIC0xMDk1LDE1ICsxMDk1LDE1IEBAIGJ0 cmVlX21hc2soY2hhciAqcGFnZWRhdGEsIEJsb2NrTnVtYmVyIGJsa25vKQogCQkvKgogCQkgKiBJ biBidHJlZSBsZWFmIHBhZ2VzLCBpdCBpcyBwb3NzaWJsZSB0byBtb2RpZnkgdGhlIExQX0ZMQUdT IHdpdGhvdXQKIAkJICogZW1pdHRpbmcgYW55IFdBTCByZWNvcmQuIEhlbmNlLCBtYXNrIHRoZSBs aW5lIHBvaW50ZXIgZmxhZ3MuIFNlZQotCQkgKiBfYnRfa2lsbGl0ZW1zKCksIF9idF9jaGVja191 bmlxdWUoKSBmb3IgZGV0YWlscy4KKwkJICogYnRraWxsaXRlbXNiYXRjaCgpLCBfYnRfY2hlY2tf dW5pcXVlKCkgZm9yIGRldGFpbHMuCiAJCSAqLwogCQltYXNrX2xwX2ZsYWdzKHBhZ2UpOwogCX0K IAogCS8qCiAJICogQlRQX0hBU19HQVJCQUdFIGlzIGp1c3QgYW4gdW4tbG9nZ2VkIGhpbnQgYml0 LiBTbywgbWFzayBpdC4gU2VlCi0JICogX2J0X2RlbGV0ZV9vcl9kZWR1cF9vbmVfcGFnZSgpLCBf YnRfa2lsbGl0ZW1zKCksIGFuZCBfYnRfY2hlY2tfdW5pcXVlKCkKLQkgKiBmb3IgZGV0YWlscy4K KwkgKiBfYnRfZGVsZXRlX29yX2RlZHVwX29uZV9wYWdlKCksIGJ0a2lsbGl0ZW1zYmF0Y2goKSwg YW5kCisJICogX2J0X2NoZWNrX3VuaXF1ZSgpIGZvciBkZXRhaWxzLgogCSAqLwogCW1hc2tvcGFx LT5idHBvX2ZsYWdzICY9IH5CVFBfSEFTX0dBUkJBR0U7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qv c3BndXRpbHMuYwppbmRleCBmMmVlMzMzZjYuLjc0NTQzNWRhMyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9z cGdpc3Qvc3BndXRpbHMuYwpAQCAtNTQsNiArNTQsNyBAQCBzcGdoYW5kbGVyKFBHX0ZVTkNUSU9O X0FSR1MpCiAJCS5hbWNvbnNpc3RlbnRlcXVhbGl0eSA9IGZhbHNlLAogCQkuYW1jb25zaXN0ZW50 b3JkZXJpbmcgPSBmYWxzZSwKIAkJLmFtY2FuYmFja3dhcmQgPSBmYWxzZSwKKwkJLmFtY2FubWFy a3BvcyA9IGZhbHNlLAogCQkuYW1jYW51bmlxdWUgPSBmYWxzZSwKIAkJLmFtY2FubXVsdGljb2wg PSBmYWxzZSwKIAkJLmFtb3B0aW9uYWxrZXkgPSB0cnVlLApAQCAtODgsMTAgKzg5LDEyIEBAIHNw Z2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gc3BnYmVnaW5zY2Fu LAogCQkuYW1yZXNjYW4gPSBzcGdyZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gc3BnZ2V0dHVwbGUs CisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKKwkJLmFt a2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBzcGdnZXRiaXRtYXAsCiAJ CS5hbWVuZHNjYW4gPSBzcGdlbmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVz dHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxs ZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFs bGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90 YWJsZWFtYXBpLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCmluZGV4 IDcyZDJjNjYyYi4uNDJkYzM2ZGY1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFi bGUvdGFibGVhbWFwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBp LmMKQEAgLTUxLDggKzUxLDExIEBAIEdldFRhYmxlQW1Sb3V0aW5lKE9pZCBhbWhhbmRsZXIpCiAJ QXNzZXJ0KHJvdXRpbmUtPnBhcmFsbGVsc2Nhbl9yZWluaXRpYWxpemUgIT0gTlVMTCk7CiAKIAlB c3NlcnQocm91dGluZS0+aW5kZXhfc2Nhbl9iZWdpbiAhPSBOVUxMKTsKLQlBc3NlcnQocm91dGlu ZS0+aW5kZXhfc2Nhbl9yZXNldCAhPSBOVUxMKTsKKwlBc3NlcnQocm91dGluZS0+aW5kZXhfc2Nh bl9yZXNjYW4gIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPmluZGV4X3NjYW5fZW5kICE9IE5V TEwpOworCUFzc2VydChyb3V0aW5lLT5pbmRleF9zY2FuX2JhdGNoX2luaXQgIT0gTlVMTCk7CisJ QXNzZXJ0KHJvdXRpbmUtPmluZGV4X3NjYW5fbWFya3BvcyAhPSBOVUxMKTsKKwlBc3NlcnQocm91 dGluZS0+aW5kZXhfc2Nhbl9yZXN0cnBvcyAhPSBOVUxMKTsKIAogCUFzc2VydChyb3V0aW5lLT5m ZXRjaF90aWQgIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2ZldGNoX3Jvd192ZXJz aW9uICE9IE5VTEwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRz LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwppbmRleCA5YWI3NGM4ZGYuLjFj YWZmZWI4OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKQEAgLTg4NSw3ICs4ODUsNyBAQCBE ZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2coImFjY2VzcyBtZXRob2QgXCIlc1wiIGRv ZXMgbm90IHN1cHBvcnQgbXVsdGljb2x1bW4gaW5kZXhlcyIsCiAJCQkJCQlhY2Nlc3NNZXRob2RO YW1lKSkpOwotCWlmIChleGNsdXNpb24gJiYgYW1Sb3V0aW5lLT5hbWdldHR1cGxlID09IE5VTEwp CisJaWYgKGV4Y2x1c2lvbiAmJiBhbVJvdXRpbmUtPmFtZ2V0dHVwbGUgPT0gTlVMTCAmJiBhbVJv dXRpbmUtPmFtZ2V0YmF0Y2ggPT0gTlVMTCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29k ZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJIGVycm1zZygiYWNjZXNzIG1l dGhvZCBcIiVzXCIgZG9lcyBub3Qgc3VwcG9ydCBleGNsdXNpb24gY29uc3RyYWludHMiLApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKaW5kZXggMjhhMjNkYjBiLi44NGE5 N2I3MWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2Fu LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpAQCAtMzE1 LDcgKzMxNSw3IEBAIEV4ZWNJbmRleE9ubHlNYXJrUG9zKEluZGV4T25seVNjYW5TdGF0ZSAqbm9k ZSkKIAkJfQogCX0KIAotCWluZGV4X21hcmtwb3Mobm9kZS0+aW9zc19TY2FuRGVzYyk7CisJdGFi bGVfaW5kZXhfc2Nhbl9tYXJrcG9zKG5vZGUtPmlvc3NfU2NhbkRlc2MpOwogfQogCiAvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCkBAIC0zNDQsNyArMzQ0LDcgQEAgRXhlY0luZGV4T25seVJlc3RyUG9zKEluZGV4T25seVNj YW5TdGF0ZSAqbm9kZSkKIAkJfQogCX0KIAotCWluZGV4X3Jlc3RycG9zKG5vZGUtPmlvc3NfU2Nh bkRlc2MpOworCXRhYmxlX2luZGV4X3NjYW5fcmVzdHJwb3Mobm9kZS0+aW9zc19TY2FuRGVzYyk7 CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwppbmRleCA0 NTdmYmRiMDcuLmJhM2Q0OTk2YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwpA QCAtODcyLDcgKzg3Miw3IEBAIEV4ZWNJbmRleE1hcmtQb3MoSW5kZXhTY2FuU3RhdGUgKm5vZGUp CiAJCX0KIAl9CiAKLQlpbmRleF9tYXJrcG9zKG5vZGUtPmlzc19TY2FuRGVzYyk7CisJdGFibGVf aW5kZXhfc2Nhbl9tYXJrcG9zKG5vZGUtPmlzc19TY2FuRGVzYyk7CiB9CiAKIC8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K QEAgLTkwMSw3ICs5MDEsNyBAQCBFeGVjSW5kZXhSZXN0clBvcyhJbmRleFNjYW5TdGF0ZSAqbm9k ZSkKIAkJfQogCX0KIAotCWluZGV4X3Jlc3RycG9zKG5vZGUtPmlzc19TY2FuRGVzYyk7CisJdGFi bGVfaW5kZXhfc2Nhbl9yZXN0cnBvcyhub2RlLT5pc3NfU2NhbkRlc2MpOwogfQogCiAvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2Vqb2luLmMgYi9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2Vqb2luLmMKaW5kZXggZjg0MjFhNzRjLi42ZThm ZTA3ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZWpvaW4uYwor KysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2Vqb2luLmMKQEAgLTU0LDggKzU0LDgg QEAKICAqCQl0aGUgaW5uZXIgIjUncyIuIFRoaXMgcmVxdWlyZXMgcmVwb3NpdGlvbmluZyB0aGUg aW5uZXIgImN1cnNvciIKICAqCQl0byBwb2ludCBhdCB0aGUgZmlyc3QgaW5uZXIgIjUiLiBUaGlz IGlzIGRvbmUgYnkgIm1hcmtpbmciIHRoZQogICoJCWZpcnN0IGlubmVyIDUgc28gd2UgY2FuIHJl c3RvcmUgdGhlICJjdXJzb3IiIHRvIGl0IGJlZm9yZSBqb2luaW5nCi0gKgkJd2l0aCB0aGUgc2Vj b25kIG91dGVyIDUuIFRoZSBhY2Nlc3MgbWV0aG9kIGludGVyZmFjZSBwcm92aWRlcwotICoJCXJv dXRpbmVzIHRvIG1hcmsgYW5kIHJlc3RvcmUgdG8gYSB0dXBsZS4KKyAqCQl3aXRoIHRoZSBzZWNv bmQgb3V0ZXIgNS4gVGhlIHRhYmxlIEFNIGludGVyZmFjZSBwcm92aWRlcworICoJCXJvdXRpbmVz IHRvIG1hcmsgYW5kIHJlc3RvcmUgdG8gYSB0dXBsZSBkdXJpbmcgaW5kZXggc2NhbnMuCiAgKgog ICoKICAqCQlFc3NlbnRpYWwgb3BlcmF0aW9uIG9mIHRoZSBtZXJnZSBqb2luIGFsZ29yaXRobSBp cyBhcyBmb2xsb3dzOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5k eHBhdGguYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKaW5kZXggM2Y1 ZDRmYTMxLi45NGZlZGYzMmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2luZHhwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwpA QCAtNDQsNyArNDQsNyBAQAogLyogV2hldGhlciB3ZSBhcmUgbG9va2luZyBmb3IgcGxhaW4gaW5k ZXhzY2FuLCBiaXRtYXAgc2Nhbiwgb3IgZWl0aGVyICovCiB0eXBlZGVmIGVudW0KIHsKLQlTVF9J TkRFWFNDQU4sCQkJCS8qIG11c3Qgc3VwcG9ydCBhbWdldHR1cGxlICovCisJU1RfSU5ERVhTQ0FO LAkJCQkvKiBtdXN0IHN1cHBvcnQgYW1nZXR0dXBsZSBvciBhbWdldGJhdGNoICovCiAJU1RfQklU TUFQU0NBTiwJCQkJLyogbXVzdCBzdXBwb3J0IGFtZ2V0Yml0bWFwICovCiAJU1RfQU5ZU0NBTiwJ CQkJCS8qIGVpdGhlciBpcyBva2F5ICovCiB9IFNjYW5UeXBlQ29udHJvbDsKQEAgLTc0Niw3ICs3 NDYsNyBAQCBnZXRfaW5kZXhfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCwKIAl7CiAJCUluZGV4UGF0aCAgKmlwYXRoID0gKEluZGV4UGF0aCAqKSBsZmlyc3QobGMpOwog Ci0JCWlmIChpbmRleC0+YW1oYXNnZXR0dXBsZSkKKwkJaWYgKGluZGV4LT5hbWNhbnBsYWluc2Nh bikKIAkJCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgaXBhdGgpOwogCiAJCWlmIChpbmRleC0+YW1o YXNnZXRiaXRtYXAgJiYKQEAgLTgzNCw3ICs4MzQsNyBAQCBidWlsZF9pbmRleF9wYXRocyhQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCXN3aXRjaCAoc2NhbnR5cGUpCiAJewog CQljYXNlIFNUX0lOREVYU0NBTjoKLQkJCWlmICghaW5kZXgtPmFtaGFzZ2V0dHVwbGUpCisJCQlp ZiAoIWluZGV4LT5hbWNhbnBsYWluc2NhbikKIAkJCQlyZXR1cm4gTklMOwogCQkJYnJlYWs7CiAJ CWNhc2UgU1RfQklUTUFQU0NBTjoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL3BsYW5jYXQuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwppbmRl eCA3YzRiZTE3NDguLjU0YmJjNjY5MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvcGxhbmNhdC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQu YwpAQCAtMzEwLDExICszMTAsMTEgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJv b3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkJCQlpbmZvLT5hbXNl YXJjaGFycmF5ID0gYW1yb3V0aW5lLT5hbXNlYXJjaGFycmF5OwogCQkJCWluZm8tPmFtc2VhcmNo bnVsbHMgPSBhbXJvdXRpbmUtPmFtc2VhcmNobnVsbHM7CiAJCQkJaW5mby0+YW1jYW5wYXJhbGxl bCA9IGFtcm91dGluZS0+YW1jYW5wYXJhbGxlbDsKLQkJCQlpbmZvLT5hbWhhc2dldHR1cGxlID0g KGFtcm91dGluZS0+YW1nZXR0dXBsZSAhPSBOVUxMKTsKKwkJCQlpbmZvLT5hbWNhbnBsYWluc2Nh biA9IChhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCB8fAorCQkJCQkJCQkJCWFtcm91dGlu ZS0+YW1nZXR0dXBsZSAhPSBOVUxMKTsKIAkJCQlpbmZvLT5hbWhhc2dldGJpdG1hcCA9IGFtcm91 dGluZS0+YW1nZXRiaXRtYXAgIT0gTlVMTCAmJgogCQkJCQlyZWxhdGlvbi0+cmRfdGFibGVhbS0+ c2Nhbl9iaXRtYXBfbmV4dF90dXBsZSAhPSBOVUxMOwotCQkJCWluZm8tPmFtY2FubWFya3BvcyA9 IChhbXJvdXRpbmUtPmFtbWFya3BvcyAhPSBOVUxMICYmCi0JCQkJCQkJCQkgIGFtcm91dGluZS0+ YW1yZXN0cnBvcyAhPSBOVUxMKTsKKwkJCQlpbmZvLT5hbWNhbm1hcmtwb3MgPSBhbXJvdXRpbmUt PmFtY2FubWFya3BvczsKIAkJCQlpbmZvLT5hbWNvc3Rlc3RpbWF0ZSA9IGFtcm91dGluZS0+YW1j b3N0ZXN0aW1hdGU7CiAJCQkJQXNzZXJ0KGluZm8tPmFtY29zdGVzdGltYXRlICE9IE5VTEwpOwog CkBAIC00MTEsNyArNDExLDcgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3Qs IE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkJCQlpbmZvLT5hbXNlYXJj aGFycmF5ID0gZmFsc2U7CiAJCQkJaW5mby0+YW1zZWFyY2hudWxscyA9IGZhbHNlOwogCQkJCWlu Zm8tPmFtY2FucGFyYWxsZWwgPSBmYWxzZTsKLQkJCQlpbmZvLT5hbWhhc2dldHR1cGxlID0gZmFs c2U7CisJCQkJaW5mby0+YW1jYW5wbGFpbnNjYW4gPSBmYWxzZTsKIAkJCQlpbmZvLT5hbWhhc2dl dGJpdG1hcCA9IGZhbHNlOwogCQkJCWluZm8tPmFtY2FubWFya3BvcyA9IGZhbHNlOwogCQkJCWlu Zm8tPmFtY29zdGVzdGltYXRlID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcmVsYXRpb24uYwppbmRleCAyOTZjYmFlZGUuLmEzMjhmZGI4MSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYwpAQCAtODM1LDYgKzgzNSw3IEBAIElzSW5k ZXhVc2FibGVGb3JSZXBsaWNhSWRlbnRpdHlGdWxsKFJlbGF0aW9uIGlkeHJlbCwgQXR0ck1hcCAq YXR0cm1hcCkKIHsKIAlBdHRyTnVtYmVyCWtleWNvbDsKIAlvaWR2ZWN0b3IgICppbmRjbGFzczsK Kwljb25zdCBJbmRleEFtUm91dGluZSAqYW1yb3V0aW5lOwogCiAJLyogVGhlIGluZGV4IG11c3Qg bm90IGJlIGEgcGFydGlhbCBpbmRleCAqLwogCWlmICghaGVhcF9hdHRpc251bGwoaWR4cmVsLT5y ZF9pbmRleHR1cGxlLCBBbnVtX3BnX2luZGV4X2luZHByZWQsIE5VTEwpKQpAQCAtODg2LDEwICs4 ODcsMTIgQEAgSXNJbmRleFVzYWJsZUZvclJlcGxpY2FJZGVudGl0eUZ1bGwoUmVsYXRpb24gaWR4 cmVsLCBBdHRyTWFwICphdHRybWFwKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgotCSAqIFRoZSBn aXZlbiBpbmRleCBhY2Nlc3MgbWV0aG9kIG11c3QgaW1wbGVtZW50ICJhbWdldHR1cGxlIiwgd2hp Y2ggd2lsbAotCSAqIGJlIHVzZWQgbGF0ZXIgdG8gZmV0Y2ggdGhlIHR1cGxlcy4gIFNlZSBSZWxh dGlvbkZpbmRSZXBsVHVwbGVCeUluZGV4KCkuCisJICogVGhlIGdpdmVuIGluZGV4IGFjY2VzcyBt ZXRob2QgbXVzdCBpbXBsZW1lbnQgImFtZ2V0dHVwbGUiIG9yCisJICogImFtZ2V0YmF0Y2giLCB3 aGljaCB3aWxsIGJlIHVzZWQgbGF0ZXIgdG8gZmV0Y2ggdGhlIHR1cGxlcy4gIFNlZQorCSAqIFJl bGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgoKS4KIAkgKi8KLQlpZiAoR2V0SW5kZXhBbVJvdXRp bmVCeUFtSWQoaWR4cmVsLT5yZF9yZWwtPnJlbGFtLCBmYWxzZSktPmFtZ2V0dHVwbGUgPT0gTlVM TCkKKwlhbXJvdXRpbmUgPSBHZXRJbmRleEFtUm91dGluZUJ5QW1JZChpZHhyZWwtPnJkX3JlbC0+ cmVsYW0sIGZhbHNlKTsKKwlpZiAoYW1yb3V0aW5lLT5hbWdldHR1cGxlID09IE5VTEwgJiYgYW1y b3V0aW5lLT5hbWdldGJhdGNoID09IE5VTEwpCiAJCXJldHVybiBmYWxzZTsKIAogCXJldHVybiB0 cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMKaW5kZXggYzgxZmI2MWEwLi5kZGZkMWI1NWMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2FtdXRpbHMuYwpAQCAtMzYzLDEwICszNjMsMTEgQEAgaW5kZXhhbV9wcm9w ZXJ0eShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5l LT5hbWNsdXN0ZXJhYmxlKTsKIAogCQkJY2FzZSBBTVBST1BfSU5ERVhfU0NBTjoKLQkJCQlQR19S RVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxlID8gdHJ1ZSA6IGZhbHNlKTsKKwkJCQlQR19S RVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxlICE9IE5VTEwgfHwKKwkJCQkJCQkgICByb3V0 aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpOwogCiAJCQljYXNlIEFNUFJPUF9CSVRNQVBfU0NBTjoK LQkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldGJpdG1hcCA/IHRydWUgOiBmYWxzZSk7 CisJCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXRiaXRtYXAgIT0gTlVMTCk7CiAKIAkJ CWNhc2UgQU1QUk9QX0JBQ0tXQVJEX1NDQU46CiAJCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+ YW1jYW5iYWNrd2FyZCk7CkBAIC0zOTIsNyArMzkzLDggQEAgaW5kZXhhbV9wcm9wZXJ0eShGdW5j dGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2FubXVs dGljb2wpOwogCiAJCWNhc2UgQU1QUk9QX0NBTl9FWENMVURFOgotCQkJUEdfUkVUVVJOX0JPT0wo cm91dGluZS0+YW1nZXR0dXBsZSA/IHRydWUgOiBmYWxzZSk7CisJCQlQR19SRVRVUk5fQk9PTChy b3V0aW5lLT5hbWdldHR1cGxlICE9IE5VTEwgfHwKKwkJCQkJCSAgIHJvdXRpbmUtPmFtZ2V0YmF0 Y2ggIT0gTlVMTCk7CiAKIAkJY2FzZSBBTVBST1BfQ0FOX0lOQ0xVREU6CiAJCQlQR19SRVRVUk5f Qk9PTChyb3V0aW5lLT5hbWNhbmluY2x1ZGUpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9hbWNoZWNr L3ZlcmlmeV9uYnRyZWUuYyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMKaW5kZXgg M2VmMmQ2NmY4Li5jNWUxZjkwMTAgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlf bmJ0cmVlLmMKKysrIGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYwpAQCAtMzk1LDcg KzM5NSw3IEBAIGJ0X2NoZWNrX2V2ZXJ5X2xldmVsKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVh cHJlbCwgYm9vbCBoZWFwa2V5c3BhY2UsCiAJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVs KSk7CiAKIAkvKgotCSAqIFRoaXMgYXNzZXJ0aW9uIG1hdGNoZXMgdGhlIG9uZSBpbiBpbmRleF9n ZXRuZXh0X3RpZCgpLiAgU2VlIHBhZ2UKKwkgKiBUaGlzIGFzc2VydGlvbiBtYXRjaGVzIHRoZSBv bmUgaW4gaGVhcGFtX2luZGV4c2Nhbi5jLiAgU2VlIHBhZ2UKIAkgKiByZWN5Y2xpbmcvInZpc2li bGUgdG8gZXZlcnlvbmUiIG5vdGVzIGluIG5idHJlZSBSRUFETUUuCiAJICovCiAJQXNzZXJ0KFRy YW5zYWN0aW9uSWRJc1ZhbGlkKFJlY2VudFhtaW4pKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYmxv b20vYmx1dGlscy5jIGIvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKaW5kZXggNTExMWNkYzZkLi4y NDlhZjQ4ZTYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCisrKyBiL2NvbnRy aWIvYmxvb20vYmx1dGlscy5jCkBAIC0xMTMsNiArMTEzLDcgQEAgYmxoYW5kbGVyKFBHX0ZVTkNU SU9OX0FSR1MpCiAJCS5hbWNvbnNpc3RlbnRlcXVhbGl0eSA9IGZhbHNlLAogCQkuYW1jb25zaXN0 ZW50b3JkZXJpbmcgPSBmYWxzZSwKIAkJLmFtY2FuYmFja3dhcmQgPSBmYWxzZSwKKwkJLmFtY2Fu bWFya3BvcyA9IGZhbHNlLAogCQkuYW1jYW51bmlxdWUgPSBmYWxzZSwKIAkJLmFtY2FubXVsdGlj b2wgPSB0cnVlLAogCQkuYW1vcHRpb25hbGtleSA9IHRydWUsCkBAIC0xNDYsMTAgKzE0NywxMiBA QCBibGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gYmxiZWdpbnNj YW4sCiAJCS5hbXJlc2NhbiA9IGJscmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5h bWdldGJhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0 ZW1zYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBibGdldGJpdG1hcCwKIAkJLmFtZW5k c2NhbiA9IGJsZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0g TlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9 IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2Nh biA9IE5VTEwsCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sIGIvZG9jL3Ny Yy9zZ21sL2luZGV4YW0uc2dtbAppbmRleCBmNDhkYTMxODUuLjg3MjVmYTM2ZiAxMDA2NDQKLS0t IGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5z Z21sCkBAIC0xMTcsNiArMTE3LDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhBbVJvdXRpbmUKICAg ICBib29sICAgICAgICBhbWNvbnNpc3RlbnRvcmRlcmluZzsKICAgICAvKiBkb2VzIEFNIHN1cHBv cnQgYmFja3dhcmQgc2Nhbm5pbmc/ICovCiAgICAgYm9vbCAgICAgICAgYW1jYW5iYWNrd2FyZDsK KyAgICAvKiBkb2VzIEFNIHN1cHBvcnQgbWFyay9yZXN0b3JlIG9mIGEgc2NhbiBwb3NpdGlvbj8g Ki8KKyAgICBib29sICAgICAgICBhbWNhbm1hcmtwb3M7CiAgICAgLyogZG9lcyBBTSBzdXBwb3J0 IFVOSVFVRSBpbmRleGVzPyAqLwogICAgIGJvb2wgICAgICAgIGFtY2FudW5pcXVlOwogICAgIC8q IGRvZXMgQU0gc3VwcG9ydCBtdWx0aS1jb2x1bW4gaW5kZXhlcz8gKi8KQEAgLTE2NywxMCArMTY5 LDEyIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1Sb3V0aW5lCiAgICAgYW1iZWdpbnNjYW5fZnVu Y3Rpb24gYW1iZWdpbnNjYW47CiAgICAgYW1yZXNjYW5fZnVuY3Rpb24gYW1yZXNjYW47CiAgICAg YW1nZXR0dXBsZV9mdW5jdGlvbiBhbWdldHR1cGxlOyAgICAgLyogY2FuIGJlIE5VTEwgKi8KKyAg ICBhbWdldGJhdGNoX2Z1bmN0aW9uIGFtZ2V0YmF0Y2g7IC8qIGNhbiBiZSBOVUxMICovCisgICAg YW11bmd1YXJkYmF0Y2hfZnVuY3Rpb24gYW11bmd1YXJkYmF0Y2g7IC8qIGNhbiBiZSBOVUxMICov CisgICAgYW1raWxsaXRlbXNiYXRjaF9mdW5jdGlvbiBhbWtpbGxpdGVtc2JhdGNoOwkvKiBjYW4g YmUgTlVMTCAqLwogICAgIGFtZ2V0Yml0bWFwX2Z1bmN0aW9uIGFtZ2V0Yml0bWFwOyAgIC8qIGNh biBiZSBOVUxMICovCiAgICAgYW1lbmRzY2FuX2Z1bmN0aW9uIGFtZW5kc2NhbjsKLSAgICBhbW1h cmtwb3NfZnVuY3Rpb24gYW1tYXJrcG9zOyAgICAgICAvKiBjYW4gYmUgTlVMTCAqLwotICAgIGFt cmVzdHJwb3NfZnVuY3Rpb24gYW1yZXN0cnBvczsgICAgIC8qIGNhbiBiZSBOVUxMICovCisgICAg YW1wb3NyZXNldF9mdW5jdGlvbiBhbXBvc3Jlc2V0OyAvKiBjYW4gYmUgTlVMTCAqLwogCiAgICAg LyogaW50ZXJmYWNlIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHBhcmFsbGVsIGluZGV4IHNjYW5zICov CiAgICAgYW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbiBhbWVzdGltYXRlcGFyYWxsZWxz Y2FuOyAgICAvKiBjYW4gYmUgTlVMTCAqLwpAQCAtMjgwLDYgKzI4NCwxOSBAQCB0eXBlZGVmIHN0 cnVjdCBJbmRleEFtUm91dGluZQogICAgcHJlZGljYXRlcywgYW4gdXBkYXRlIG9mIHN1Y2ggYW4g YXR0cmlidXRlIGFsd2F5cyBkaXNhYmxlcyA8YWNyb255bT5IT1Q8L2Fjcm9ueW0+LgogICA8L3Bh cmE+CiAKKyAgPHBhcmE+CisgICBUaGUgPHN0cnVjdGZpZWxkPmFtY2FubWFya3Bvczwvc3RydWN0 ZmllbGQ+IGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgdGhlCisgICBpbmRleCBhY2Nlc3MgbWV0aG9k IHN1cHBvcnRzIG1hcmtpbmcgYSBzY2FuIHBvc2l0aW9uIGFuZCBsYXRlciByZXN0b3JpbmcKKyAg IHRoZSBzY2FuIHRvIGl0LiAgVGhlIHBsYW5uZXIgdXNlcyB0aGlzIHRvIGRlY2lkZSB3aGV0aGVy IGFuIGluZGV4IHNjYW4gY2FuCisgICBiZSB1c2VkIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgbWVy Z2Ugam9pbiBkaXJlY3RseSwgb3Igd2hldGhlciBhCisgICA8bGl0ZXJhbD5NYXRlcmlhbGl6ZTwv bGl0ZXJhbD4gbm9kZSBtdXN0IGJlIGludGVycG9zZWQuICBNYXJrIGFuZCByZXN0b3JlCisgICBi dWlsZCBvbiB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBiYXRjaCBpbnRlcmZh Y2UgKHNlZSA8eHJlZgorICAgIGxpbmtlbmQ9ImluZGV4LXNjYW5uaW5nIi8+KSwgc28gYW4gYWNj ZXNzIG1ldGhvZCB0aGF0IHByb3ZpZGVzCisgICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rp b24+IChub3QgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPikgbXVzdAorICAgbGVhdmUg dGhpcyBmYWxzZS4gIEFuIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gYWNjZXNzIG1l dGhvZCBtYXkKKyAgIGFsc28gbGVhdmUgaXQgZmFsc2UgaWYgaXRzIHNjYW5zIGNhbm5vdCBiZSBy ZXdvdW5kIHRvIGFuIGVhcmxpZXIgcG9zaXRpb24uCisgIDwvcGFyYT4KKwogIDwvc2VjdDE+CiAK ICA8c2VjdDEgaWQ9ImluZGV4LWZ1bmN0aW9ucyI+CkBAIC02NzYsOCArNjkzLDQ5IEBAIGFtYmVn aW5zY2FuIChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogICAgPGVtcGhhc2lzPm11c3Q8L2VtcGhh c2lzPiBjcmVhdGUgdGhpcyBzdHJ1Y3QgYnkgY2FsbGluZwogICAgPGZ1bmN0aW9uPlJlbGF0aW9u R2V0SW5kZXhTY2FuKCk8L2Z1bmN0aW9uPi4gIEluIG1vc3QgY2FzZXMKICAgIDxmdW5jdGlvbj5h bWJlZ2luc2NhbjwvZnVuY3Rpb24+IGRvZXMgbGl0dGxlIGJleW9uZCBtYWtpbmcgdGhhdCBjYWxs IGFuZCBwZXJoYXBzCi0gICBhY3F1aXJpbmcgbG9ja3M7CisgICBhY3F1aXJpbmcgbG9ja3MgYW5k IGluaXRpYWxpemluZyBzdGFuZGFyZCA8c3RydWN0bmFtZT5JbmRleFNjYW5EZXNjPC9zdHJ1Y3Ru YW1lPiBmaWVsZHM7CiAgICB0aGUgaW50ZXJlc3RpbmcgcGFydHMgb2YgaW5kZXgtc2NhbiBzdGFy dHVwIGFyZSBpbiA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPi4KKyAgIEluZGV4IGFjY2Vz cyBtZXRob2RzIHRoYXQgdXNlIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlu dGVyZmFjZQorICAgbXVzdCBhbHNvIHNldCB0aGUgZm9sbG93aW5nIGZpZWxkcyBpbiB0aGUgc2Nh biBkZXNjcmlwdG9yOgorICAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxw YXJhPgorICAgICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7bWF4aXRlbXNiYXRjaDwvbGl0ZXJhbD46IHRo ZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcworICAgICAgdGhhdCBjYW4gYXBwZWFyIGluIGEgc2lu Z2xlIGJhdGNoICh0eXBpY2FsbHkgZGVyaXZlZCBmcm9tIHRoZSBpbmRleCBwYWdlCisgICAgICBz aXplLCBlLmcuLCA8bGl0ZXJhbD5NYXhJbmRleFR1cGxlc1BlclBhZ2U8L2xpdGVyYWw+KS4KKyAg ICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4K KyAgICAgIDxsaXRlcmFsPnNjYW4tJmd0O2JhdGNoX2luZGV4X29wYXF1ZV9zdGF0aWM8L2xpdGVy YWw+OiB0aGUKKyAgICAgIDxsaXRlcmFsPk1BWEFMSUdOPC9saXRlcmFsPidkIHNpemUgb2YgdGhl IGluZGV4IEFNJ3MgbWFuZGF0b3J5IHBlci1iYXRjaAorICAgICAgb3BhcXVlIGFyZWEsIHdob3Nl IHNpemUgaXMgZml4ZWQgYXQgY29tcGlsZSB0aW1lLiAgRWFjaCBiYXRjaCBhbGxvY2F0aW9uCisg ICAgICByZXNlcnZlcyB0aGlzIG11Y2ggc3BhY2UgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZQorICAg ICAgPHN0cnVjdG5hbWU+SW5kZXhTY2FuQmF0Y2hEYXRhPC9zdHJ1Y3RuYW1lPiBwb2ludGVyLCBm b3IgdXNlIGJ5IHRoZSBpbmRleAorICAgICAgQU0gdG8gc3RvcmUgcGVyLXBhZ2UgbmF2aWdhdGlv biBzdGF0ZSAoZS5nLiwgYmF0Y2ggaW5kZXggcGFnZSdzIGJ1ZmZlciBwaW4KKyAgICAgIGFuZCBz aWJsaW5nIHBhZ2UgbGlua3MpLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8 bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7YmF0Y2hfdHVw bGVzX3dvcmtzcGFjZTwvbGl0ZXJhbD46IHRoZSBzaXplIGluIGJ5dGVzCisgICAgICBvZiB0aGUg cGVyLWJhdGNoIHR1cGxlIHN0b3JhZ2Ugd29ya3NwYWNlIHVzZWQgZm9yIGluZGV4LW9ubHkgc2Nh bnMKKyAgICAgICh0eXBpY2FsbHkgPGxpdGVyYWw+QkxDS1NaPC9saXRlcmFsPiksIG9yIDAgaWYg dGhlIGluZGV4IEFNIGRvZXMgbm90CisgICAgICBzdXBwb3J0IGluZGV4LW9ubHkgc2NhbnMuICBU aGUgd29ya3NwYWNlIGlzIGFjY2Vzc2libGUgdmlhCisgICAgICA8c3RydWN0ZmllbGQ+YmF0Y2gt Jmd0O2N1cnJUdXBsZXM8L3N0cnVjdGZpZWxkPi4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0 ZW0+CisgICA8L2l0ZW1pemVkbGlzdD4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQW4gPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBhY2Nlc3MgbWV0aG9kIHdob3NlIHJlY2hlY2sg cmVxdWlyZW1lbnQgaXMKKyAgIGEgZml4ZWQgcHJvcGVydHkgb2YgdGhlIHdob2xlIHNjYW4gKHJh dGhlciB0aGFuIHNvbWV0aGluZyB0aGF0IHZhcmllcyBmcm9tCisgICBvbmUgbWF0Y2hpbmcgaXRl bSB0byB0aGUgbmV4dCkgc2hvdWxkIGFsc28gc2V0CisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19y ZWNoZWNrPC9saXRlcmFsPiBoZXJlLCBpbgorICAgPGZ1bmN0aW9uPmFtYmVnaW5zY2FuPC9mdW5j dGlvbj4sIHNpbmNlIHRoZSB2YWx1ZSBhcHBsaWVzIHRvIGV2ZXJ5IGl0ZW0gdGhlCisgICBzY2Fu IHJldHVybnMuICBUaGUgdmFsdWUgc2V0IGhlcmUgcGVyc2lzdHMgYWNyb3NzIGFueSBzdWJzZXF1 ZW50CisgICA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPiBjYWxscy4gIEItdHJlZSAoYWx3 YXlzIGZhbHNlKSB3b3JrcyB0aGlzIHdheS4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtNzQ5 LDYgKzgwNywyNTkgQEAgYW1nZXR0dXBsZSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgPHN0cnVj dGZpZWxkPmFtZ2V0dHVwbGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiBpdHMgPHN0cnVjdG5hbWU+ SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+CiAgICBzdHJ1Y3QgbXVzdCBiZSBzZXQgdG8gTlVM TC4KICAgPC9wYXJhPgorICA8bm90ZT4KKyAgIDxwYXJhPgorICAgIEFzIG9mIDxwcm9kdWN0bmFt ZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gdmVyc2lvbiAyMCwgbWFyay9yZXN0b3JlIG9mCisg ICAgc2NhbiBwb3NpdGlvbnMgaXMgYnVpbHQgb24gdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9m dW5jdGlvbj4gaW50ZXJmYWNlOworICAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4g c2NhbnMgZG8gbm90IHN1cHBvcnQgbWFyay9yZXN0b3JlLiAgVGhlCisgICAgaW1wbGVtZW50YXRp b24gbGl2ZXMgaW4gdGhlIHRhYmxlIEFNLCB0aHJvdWdoIGl0cworICAgIDxmdW5jdGlvbj50YWJs ZV9pbmRleF9zY2FuX21hcmtwb3M8L2Z1bmN0aW9uPiBhbmQKKyAgICA8ZnVuY3Rpb24+dGFibGVf aW5kZXhfc2Nhbl9yZXN0cnBvczwvZnVuY3Rpb24+IGltcGxlbWVudGF0aW9ucy4gIEFuCisgICAg PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBhY2Nlc3MgbWV0aG9kIG11c3QgYWRkaXRp b25hbGx5IGFkdmVydGlzZQorICAgIHN1cHBvcnQgYnkgc2V0dGluZyA8c3RydWN0ZmllbGQ+YW1j YW5tYXJrcG9zPC9zdHJ1Y3RmaWVsZD47IHdoZW4gaXQgZG9lcworICAgIG5vdCwgdGhlIHBsYW5u ZXIgbWF0ZXJpYWxpemVzIHRoZSBzY2FuJ3Mgb3V0cHV0IHJhdGhlciB0aGFuIHJlbHlpbmcgb24K KyAgICBtYXJrL3Jlc3RvcmUuCisgICA8L3BhcmE+CisgIDwvbm90ZT4KKworICA8cGFyYT4KKzxw cm9ncmFtbGlzdGluZz4KK0luZGV4U2NhbkJhdGNoCithbWdldGJhdGNoIChJbmRleFNjYW5EZXNj IHNjYW4sCisgICAgICAgICAgICBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLAorICAgICAgICAg ICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOworPC9wcm9ncmFtbGlzdGluZz4KKyAgIFJldHVy biB0aGUgbmV4dCBiYXRjaCBvZiBpbmRleCB0dXBsZXMgaW4gdGhlIGdpdmVuIHNjYW4sIG1vdmlu ZyBpbiB0aGUKKyAgIGdpdmVuIGRpcmVjdGlvbiAoZm9yd2FyZCBvciBiYWNrd2FyZCBpbiB0aGUg aW5kZXgpLiAgUmV0dXJucyBhbiBpbnN0YW5jZSBvZgorICAgPHR5cGU+SW5kZXhTY2FuQmF0Y2g8 L3R5cGU+IHdpdGggaW5kZXggdHVwbGVzIGxvYWRlZCwgb3IKKyAgIDxsaXRlcmFsPk5VTEw8L2xp dGVyYWw+IGlmIHRoZXJlIGFyZSBubyBtb3JlIGluZGV4IHR1cGxlcyBpbiB0aGUgZ2l2ZW4KKyAg IHNjYW4gZGlyZWN0aW9uLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9u PmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UgaXMgYW4gYWx0ZXJuYXRpdmUgdG8KKyAg IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gZm9yIDxmaXJzdHRlcm0+aW5jcmVtZW50 YWwgaW5kZXgKKyAgIHNjYW5zPC9maXJzdHRlcm0+ICZtZGFzaDsgc2NhbnMgd2hvc2UgbWF0Y2hl cyBhcmUgcmV0dXJuZWQgb25lIHBvc2l0aW9uIGF0IGEKKyAgIHRpbWUgKHNvIHRoZXkgY2FuIGRy aXZlIGEgY3Vyc29yKSwgYXMgb3Bwb3NlZCB0byBhIGJpdG1hcCBzY2FuCisgICAoPGZ1bmN0aW9u PmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4pLCB3aGljaCByZXR1cm5zIGFsbCBtYXRjaGVzIGF0IG9u Y2UuCisgICBXaGVyZSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IHJldHVybnMgb25l IG1hdGNoaW5nIGVudHJ5IHBlciBjYWxsLAorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiByZXR1cm5zIHRoZW0gaW4gYmF0Y2hlcy4gIEJ5IHJldHVybmluZyBhbGwKKyAgIG1hdGNo aW5nIGluZGV4IGVudHJpZXMgZnJvbSBhIHNpbmdsZSBpbmRleCBwYWdlIHRvZ2V0aGVyLCB0aGUg dGFibGUgQU0gZ2FpbnMKKyAgIHZpc2liaWxpdHkgaW50byB3aGljaCB0YWJsZSBibG9ja3Mgd2ls bCBiZSBuZWVkZWQgaW4gdGhlIG5lYXIgZnV0dXJlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+Cisg ICBUaGUgdGFibGUgQU0gcGFzc2VzIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+IHRvIGlu ZGljYXRlIHdoZXJlIHRoZQorICAgaW5kZXggQU0gc2hvdWxkIGNvbnRpbnVlIHNjYW5uaW5nIGZy b20gKG9yIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IG9uIHRoZQorICAgZmlyc3QgY2FsbCBmb3Ig dGhlIHNjYW4pLiAgVGhlIGluZGV4IEFNIHVzZXMgaW5mb3JtYXRpb24gZnJvbQorICAgPGxpdGVy YWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4gdG8gZGV0ZXJtaW5lIHdoaWNoIGluZGV4IHBhZ2UgdG8g cmVhZCBuZXh0LgorICAgVW5saWtlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIHdo ZXJlIHRoZSBpbmRleCBBTSBtYWludGFpbnMgaXRzCisgICBvd24gc2NhbiBwb3NpdGlvbiwgd2l0 aCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGl0IGlzIHRoZSBjYWxsZXIKKyAgIHRo YXQgY29udHJvbHMgdGhlIHByb2dyZXNzIG9mIHRoZSBzY2FuIHRocm91Z2ggdGhlIGluZGV4LiAg VGhlIGNhbGxlcgorICAgd2lsbCB0eXBpY2FsbHkgcGFzcyB0aGUgbW9zdCByZWNlbnRseSByZXR1 cm5lZCBiYXRjaCwgYnV0IHRoaXMgaXMgbm90CisgICBndWFyYW50ZWVkICZtZGFzaDsgZm9yIGV4 YW1wbGUsIGZvbGxvd2luZyB0aGUgcmVzdG9yYXRpb24gb2YgYSBtYXJrZWQKKyAgIHBvc2l0aW9u LCBhbiBlYXJsaWVyIGJhdGNoIG1heSBiZSBwYXNzZWQgaW5zdGVhZC4KKyAgPC9wYXJhPgorCisg IDxwYXJhPgorICAgQSBiYXRjaCByZXR1cm5lZCBieSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVu Y3Rpb24+IGlzIGFzc29jaWF0ZWQgd2l0aCBhbgorICAgaW5kZXggcGFnZSBjb250YWluaW5nIGF0 IGxlYXN0IG9uZSBtYXRjaGluZyBpdGVtLiAgVW50aWwgdGhlIHRhYmxlIEFNIGlzCisgICBkb25l IGZvbGxvd2luZyB0aGUgYmF0Y2gncyBpdGVtcyB0byB0aGUgaGVhcCwgdGhlIGluZGV4IEFNIGhv bGRzIGFuCisgICBpbnRlcmxvY2sgYWdhaW5zdCBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkg PGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPgorICAgJm1kYXNoOyBhbG1vc3QgYWx3YXlzIGEgYnVm ZmVyIHBpbiBvbiB0aGF0IGluZGV4IHBhZ2UsIHRob3VnaCBhbiBpbmRleCBBTQorICAgbWF5IHVz ZSBzb21lIG90aGVyIGludGVybG9jayBpbnN0ZWFkIChzZWUKKyAgIDxmdW5jdGlvbj5hbXVuZ3Vh cmRiYXRjaDwvZnVuY3Rpb24+KS4gIFRoZSB0YWJsZSBBTSBjb250cm9scyB3aGVuIHRoaXMKKyAg IGludGVybG9jayBpcyBkcm9wcGVkLCBieSBjYWxsaW5nIDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRj aDwvZnVuY3Rpb24+IHdoZW4KKyAgIGl0IGlzIHNhZmUgdG8gZG8gc28uICBTZWUgPHhyZWYgbGlu a2VuZD0iaW5kZXgtbG9ja2luZyIvPiBmb3IgZGV0YWlscyBvbgorICAgYnVmZmVyIHBpbiBtYW5h Z2VtZW50IGR1cmluZyBpbmRleCBzY2Fucy4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQW4g PHR5cGU+SW5kZXhTY2FuQmF0Y2g8L3R5cGU+IHRoYXQgaXMgcmV0dXJuZWQgYnkKKyAgIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaXMgbm8gbG9uZ2VyIG1hbmFnZWQgYnkgdGhlIGlu ZGV4IGFjY2VzcworICAgbWV0aG9kLiAgSXQgaXMgdXAgdG8gdGhlIHRhYmxlIEFNIGNhbGxlciB0 byBkZWNpZGUgd2hlbiBpdCBzaG91bGQgYmUKKyAgIHJlbGVhc2VkLiAgTm90ZSBhbHNvIHRoYXQg PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbnMgbXVzdAorICAgbmV2ZXIg bW9kaWZ5IHRoZSA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPiBwYXJhbWV0ZXIuICBUaGUg Y29yZQorICAgPGZpbGVuYW1lPnNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvPC9maWxlbmFtZT4g aW1wbGVtZW50YXRpb24gcHJvdmlkZXMgYQorICAgcmVmZXJlbmNlIGV4YW1wbGVzIG9mIHRoZSA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZS4KKyAgPC9wYXJhPgorCisg IDxwYXJhPgorICAgVGhlIHNhbWUgY2F2ZWF0cyBkZXNjcmliZWQgZm9yIDxmdW5jdGlvbj5hbWdl dHR1cGxlPC9mdW5jdGlvbj4gYXBwbHkgaGVyZQorICAgdG9vOiBhbiBlbnRyeSBpbiB0aGUgcmV0 dXJuZWQgYmF0Y2ggbWVhbnMgb25seSB0aGF0IHRoZSBpbmRleCBjb250YWlucworICAgYW4gZW50 cnkgdGhhdCBtYXRjaGVzIHRoZSBzY2FuIGtleXMsIG5vdCB0aGF0IHRoZSB0dXBsZSBuZWNlc3Nh cmlseSBzdGlsbAorICAgZXhpc3RzIGluIHRoZSBoZWFwIG9yIHdpbGwgcGFzcyB0aGUgY2FsbGVy J3Mgc25hcHNob3QgdGVzdC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSW5kZXggYWNjZXNz IG1ldGhvZHMgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IHNldAor ICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfcmVjaGVjazwvbGl0ZXJhbD4gdG8gaW5kaWNhdGUgd2hl dGhlciByZWNoZWNraW5nIG9mCisgICBzY2FuIGtleXMgaXMgcmVxdWlyZWQsIGluIHRoZSBzYW1l IHdheSBhcyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+CisgICBkb2VzLiBIb3dldmVy LCA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBtdXN0IGJlIHNldCBjb25z aXN0ZW50bHkKKyAgIGZvciBhbiBlbnRpcmUgc2NhbiByYXRoZXIgdGhhbiB2YXJ5aW5nIG9uIGEg cGVyLXR1cGxlIGJhc2lzLiBUaGlzIGlzIGEga2V5CisgICBkaWZmZXJlbmNlIGZyb20gPGZ1bmN0 aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwgd2hpY2ggY2FuIHNldAorICAgPGxpdGVyYWw+c2Nh bi0mZ3Q7eHNfcmVjaGVjazwvbGl0ZXJhbD4gaW5kZXBlbmRlbnRseSBmb3IgZWFjaCB0dXBsZSBp dCByZXR1cm5zLgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCByZXF1aXJlIGdyYW51bGFy IGNvbnRyb2wgb3ZlcgorICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfcmVjaGVjazwvbGl0ZXJhbD4g bXVzdCB1c2UgdGhlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4KKyAgIGludGVyZmFj ZSBpbnN0ZWFkIG9mIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4uCisgIDwvcGFyYT4K KworICA8cGFyYT4KKyAgIFNpbWlsYXJseSwgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gaW50ZXJmYWNlIGRvZXMgbm90IGN1cnJlbnRseQorICAgc3VwcG9ydCBpbmRleC1vbmx5 IHNjYW5zIHRoYXQgcmV0dXJuIGRhdGEgaW4gdGhlIGZvcm0gb2YgYQorICAgPHN0cnVjdG5hbWU+ SGVhcFR1cGxlPC9zdHJ1Y3RuYW1lPiBwb2ludGVyIHN0b3JlZCBpbgorICAgPGxpdGVyYWw+c2Nh bi0mZ3Q7eHNfaGl0dXA8L2xpdGVyYWw+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUg aW5kZXggYWNjZXNzIG1ldGhvZCBtdXN0IHByb3ZpZGUgZWl0aGVyIDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4KKyAgIG9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIGJ1 dCBub3QgYm90aC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbWdl dGJhdGNoPC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZQor ICAgYWNjZXNzIG1ldGhvZCBzdXBwb3J0cyA8cXVvdGU+cGxhaW48L3F1b3RlPiBpbmRleCBzY2Fu cy4gIElmIGl0IGRvZXNuJ3QsCisgICB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u PiBmaWVsZCBpbiBpdHMKKyAgIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1l PiBzdHJ1Y3QgbXVzdCBiZSBzZXQgdG8gTlVMTC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorPHBy b2dyYW1saXN0aW5nPgordm9pZAorYW11bmd1YXJkYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwK KyAgICAgICAgICAgICAgICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7Cis8L3Byb2dyYW1saXN0aW5n PgorICAgQ2FsbGVkIGJ5IHRoZSB0YWJsZSBBTSAodmlhCisgICA8ZnVuY3Rpb24+dGFibGVhbV91 dGlsX3VuZ3VhcmRfYmF0Y2g8L2Z1bmN0aW9uPikgd2hlbiBpdCBpcyBzYWZlIHRvIGRyb3AKKyAg IHRoZSBUSUQgcmVjeWNsaW5nIGludGVybG9jayB0aGF0IHRoZSBpbmRleCBBTSBob2xkcyBmb3Ig dGhlIGJhdGNoLCB3aGljaAorICAgcHJldmVudHMgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5 IDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4uICBUaGlzCisgICBpbnRlcmxvY2sgaXMgb3BhcXVl IHRvIGNvcmUgY29kZTogZm9ybWFsbHksIGFuIGluZGV4IEFNIG1heSBob2xkIGFueSBraW5kCisg ICBvZiBpbnRlcmxvY2sgKG9yIHNldmVyYWwpIGluIGl0cyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEs IGFuZCBmb3IgdGhhdCByZWFzb24KKyAgIGlzIG5vdCBldmVuIHJlcXVpcmVkIHRvIHVzZSB0aGUg c3RhbmRhcmQgaGVscGVyCisgICA8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX3VubG9ja19iYXRjaDwv ZnVuY3Rpb24+IHRvIG1hbmFnZSBpdC4gIEluIHByYWN0aWNlLAorICAgdGhvdWdoLCBtb3N0IG9y IGFsbCBpbmRleCBBTXMgd2lsbCB1c2UgdGhhdCBoZWxwZXIgYW5kIGhvbGQgdGhlIHNpbXBsZXN0 CisgICBwb3NzaWJsZSBpbnRlcmxvY2s6IGVhY2ggZ3VhcmRlZCBCLXRyZWUgYmF0Y2gga2VlcHMg YSBzaW5nbGUgYnVmZmVyIHBpbgorICAgb24gdGhlIG9uZSBpbmRleCBwYWdlIHRoZSBiYXRjaCBj YW1lIGZyb20uICBTZWUgPHhyZWYKKyAgICBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+IGZvciBk ZXRhaWxzIG9uIGJ1ZmZlciBwaW4gbWFuYWdlbWVudCBkdXJpbmcKKyAgIGluZGV4IHNjYW5zLiAg VGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhdCBtb3N0IG9uY2UgZm9yIGVhY2ggZ3VhcmRl ZAorICAgYmF0Y2g7IGl0IGlzIG5vdCBjYWxsZWQgd2hlbiB0aGUgaW5kZXggQU0gaGFzIGFscmVh ZHkgdW5ndWFyZGVkIHRoZSBiYXRjaAorICAgaXRzZWxmIChhcyBpdCBkb2VzIHdoZW4gPHN0cnVj dGZpZWxkPmJhdGNoSW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IGlzCisgICB0cnVlLCB3 aGljaCBpcyB0aGUgY29tbW9uIGNhc2UpLgorICA8L3BhcmE+CisKKyAgPG5vdGU+CisgICA8cGFy YT4KKyAgICBUaGUgaW5kZXggQU0gbWF5IGNob29zZSB0byByZXRhaW4gaXRzIG93biBidWZmZXIg cGlucyB3aGVuIHRoaXMgc2VydmVzIGFuCisgICAgaW50ZXJuYWwgcHVycG9zZSAoZm9yIGV4YW1w bGUsIG1haW50YWluaW5nIGEgZGVzY2VudCBzdGFjayBvZiBwaW5uZWQgaW5kZXgKKyAgICBwYWdl cyBmb3IgcmV1c2UgYWNyb3NzIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2FsbHMp LiAgSG93ZXZlciwKKyAgICBhbnkgc2NoZW1lIHRoYXQgcmV0YWlucyBidWZmZXIgcGlucyBtYW5h Z2VkIGJ5IHRoZSBpbmRleCBBTSBtdXN0IGJlIHN1cmUKKyAgICB0byBmcmVlIHRoZSBwaW5zIGF0 IGFuIG9wcG9ydHVuZSBwb2ludCAoYXQgYSBtaW5pbXVtIHdoZW5ldmVyCisgICAgPGZ1bmN0aW9u PmFtZW5kc2NhbjwvZnVuY3Rpb24+IGlzIGNhbGxlZCwgYW5kIHR5cGljYWxseSB3aGVuCisgICAg PGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4gaXMgY2FsbGVkKS4gIEl0IG11c3QgYWxzbyBr ZWVwIHRoZSBudW1iZXIgb2YKKyAgICByZXRhaW5lZCBwaW5zIGZpeGVkIGFuZCBzbWFsbC4KKyAg IDwvcGFyYT4KKyAgPC9ub3RlPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbXVuZ3Vh cmRiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0aW9uIGlzIHJlcXVpcmVkIGZvciBhbnkgaW5kZXgKKyAg IGFjY2VzcyBtZXRob2QgdGhhdCBwcm92aWRlcyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+Cit2b2lkCithbWtp bGxpdGVtc2JhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAgICAgICAgICAgICAgICBJbmRl eFNjYW5CYXRjaCBiYXRjaCk7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgQ2FsbGVkIGJ5IHRoZSB0 YWJsZSBBTSB3aGVuIGl0IGhhcyBmaW5pc2hlZCBwcm9jZXNzaW5nIGEgYmF0Y2ggdGhhdAorICAg Y29udGFpbnMgZGVhZCBpdGVtcywgdG8gc2V0IDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IGJp dHMgaW4gdGhlIGJhdGNoJ3MKKyAgIGluZGV4IHBhZ2UuICBUaGUgYmF0Y2gncyBpbmRleCBwYWdl IHdpbGwgbm90IGJlIGxvY2tlZCBieSB0aGUgY2FsbGVyOyB0aGUKKyAgIGluZGV4IEFNIG11c3Qg YWNxdWlyZSBhbmQgcmVsZWFzZSBpdHMgb3duIGxvY2sgKGFuZCBwaW4pIG9uIHRoZSBpbmRleCBw YWdlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJbXBsZW1lbnRpbmcgPGZ1bmN0aW9uPmFt a2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiBpcyBvcHRpb25hbCBmb3IKKyAgIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gaW5kZXggQU1zICh0aG9zZSB0aGF0IGRvbid0IGNhbiBsZWF2 ZQorICAgdGhlIGZpZWxkIHNldCB0byA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiksIGJ1dCBkb2lu ZyBzbyBpcyByZWNvbW1lbmRlZCBmb3IKKyAgIHBlcmZvcm1hbmNlLCBhcyBpdCBhbGxvd3MgZnV0 dXJlIHNjYW5zIHRvIHNraXAga25vd24tZGVhZCBpbmRleCBlbnRyaWVzLgorICAgVGhlIGNvcmUg aW5kZXggYWNjZXNzIG1ldGhvZCB0aGF0IGN1cnJlbnRseSBzdXBwb3J0cworICAgPGZ1bmN0aW9u PmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAoQi10cmVlKSBpbXBsZW1lbnRzCisgICA8bGl0ZXJhbD5M UF9ERUFEPC9saXRlcmFsPiBtYXJraW5nLCB0aG91Z2ggdGhpcmQtcGFydHkgaW5kZXggYWNjZXNz IG1ldGhvZHMKKyAgIGFyZSBmcmVlIHRvIGNob29zZSB3aGV0aGVyIHRvIGltcGxlbWVudCB0aGlz IGZlYXR1cmUuICBUaGUgdGFibGUgQU0gbWF5CisgICBjYWxsIDxmdW5jdGlvbj50YWJsZWFtX3V0 aWxfc2NhbnBvc19raWxsaXRlbTwvZnVuY3Rpb24+IHRvIG1hcmsgZGVhZCBpdGVtcyBhcworICAg dGhlIHNjYW4gcHJvZ3Jlc3Nlcy4gIElmIHRoZSBiYXRjaCBjb250YWlucyBhbnkgc3VjaCBkZWFk IGl0ZW1zLCB0aGUgYmF0Y2gncworICAgPHN0cnVjdGZpZWxkPmRlYWRJdGVtczwvc3RydWN0Zmll bGQ+IGFycmF5IHdpbGwgaGF2ZSBiZWVuIHNvcnRlZCBhbmQKKyAgIGRlZHVwbGljYXRlZCBiZWZv cmUgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiBpcyBjYWxsZWQ6IGl0cwor ICAgZW50cmllcyBhcmUgaW5kZXhlcyBpbnRvIHRoZSBiYXRjaCdzIDxzdHJ1Y3RmaWVsZD5pdGVt czwvc3RydWN0ZmllbGQ+CisgICBhcnJheSwgc29ydGVkIGludG8gYXNjZW5kaW5nIG9yZGVyIHdp dGggbm8gaW5kZXggYXBwZWFyaW5nIG1vcmUgdGhhbiBvbmNlLgorICAgQmVjYXVzZSB0aGUgPHN0 cnVjdGZpZWxkPml0ZW1zPC9zdHJ1Y3RmaWVsZD4gYXJyYXkgaXMgaXRzZWxmIG9yZGVyZWQgYnkK KyAgIGluY3JlYXNpbmcgaW5kZXggcGFnZSBvZmZzZXQgbnVtYmVyLCB0aGVzZSBkZWFkLWl0ZW0g aW5kZXhlcyBhcmUgbGlrZXdpc2UKKyAgIGluIGFzY2VuZGluZyBwYWdlLW9mZnNldCBvcmRlciwg c28gdGhlIGluZGV4IEFNIGNhbiB3YWxrCisgICA8c3RydWN0ZmllbGQ+ZGVhZEl0ZW1zPC9zdHJ1 Y3RmaWVsZD4gaW4gbG9ja3N0ZXAgd2l0aCB0aGUgaW5kZXggcGFnZSdzIGl0ZW0KKyAgIHBvaW50 ZXJzIChyZXNvbHZpbmcgZWFjaCBlbnRyeSB0aHJvdWdoIDxzdHJ1Y3RmaWVsZD5pdGVtczwvc3Ry dWN0ZmllbGQ+IHRvCisgICBpdHMgcGFnZSBvZmZzZXQpLiAgVGhpcyBhbHNvIG1lYW5zIHRoZSB0 YWJsZSBBTSBuZWVkIG5vdCBjYWxsCisgICA8ZnVuY3Rpb24+dGFibGVhbV91dGlsX3NjYW5wb3Nf a2lsbGl0ZW08L2Z1bmN0aW9uPiBpbiBhbnkgcGFydGljdWxhciBvcmRlci4KKyAgPC9wYXJhPgor CisgIDxub3RlPgorICAgPHBhcmE+CisgICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdXNpbmcgPGZ1 bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiByZWx5IG9uIHRoZQorICAgIDxzdHJ1Y3RmaWVs ZD5raWxsX3ByaW9yX3R1cGxlPC9zdHJ1Y3RmaWVsZD4gbWVjaGFuaXNtIGluc3RlYWQgdG8gbWFy ayBkZWFkCisgICAgdHVwbGVzLgorICAgPC9wYXJhPgorICA8L25vdGU+CisKKyAgPHBhcmE+Cisg ICBXaGVuIGltcGxlbWVudGluZyA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+ LCB0aGUgaW5kZXggQU0KKyAgIG11c3QgdmVyaWZ5IHRoYXQgdGhlIGluZGV4IHBhZ2UgaGFzIG5v dCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBiYXRjaCB3YXMKKyAgIG9yaWdpbmFsbHkgcmVhZC4g IFRoZSBzdGFuZGFyZCB3YXkgdG8gZG8gdGhpcyBpcyB0byBjYWxsCisgICA8ZnVuY3Rpb24+aW5k ZXhhbV91dGlsX3VubG9ja19iYXRjaDwvZnVuY3Rpb24+IGR1cmluZworICAgPGZ1bmN0aW9uPmFt Z2V0YmF0Y2g8L2Z1bmN0aW9uPiwgd2hpY2ggcmVsZWFzZXMgdGhlIGluZGV4IHBhZ2UgbG9jayBh bmQKKyAgIHNhdmVzIHRoZSBwYWdlIExTTiBpbgorICAgdGhlIGJhdGNoJ3MgPHN0cnVjdGZpZWxk Pmxzbjwvc3RydWN0ZmllbGQ+IGZpZWxkLiAgTGF0ZXIsIHdpdGhpbgorICAgPGZ1bmN0aW9uPmFt a2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiwgdGhlIGluZGV4IEFNIHJlLXJlYWRzIHRoZSBwYWdl LAorICAgY29tcGFyZXMgdGhlIGN1cnJlbnQgcGFnZSBMU04gYWdhaW5zdAorICAgPHN0cnVjdGZp ZWxkPmJhdGNoLSZndDtsc248L3N0cnVjdGZpZWxkPiwgYW5kIGdpdmVzIHVwIG9uIHNldHRpbmcK KyAgIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMgaWYgdGhlIExTTiBoYXMgYWR2YW5j ZWQuICBBbiBhZHZhbmNlZCBMU04KKyAgIGluZGljYXRlcyB0aGF0IHRoZSBwYWdlIHdhcyBtb2Rp ZmllZCAmbWRhc2g7IHBvc3NpYmx5IGJ5CisgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IHJl Y3ljbGluZyB0YWJsZSBUSURzICZtZGFzaDsgc28gaXQgd291bGQgYmUKKyAgIHVuc2FmZSB0byBh c3N1bWUgdGhhdCBpbmRleCBlbnRyaWVzIHN0aWxsIHBvaW50IHRvIHRoZSBzYW1lIGhlYXAvdGFi bGUKKyAgIHR1cGxlcy4gIFNpbmNlIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IG1hcmtpbmcg aXMgb25seSBhbiBvcHRpbWl6YXRpb24KKyAgIGhpbnQsIGl0IGlzIGFsd2F5cyBzYWZlIHRvIHNr aXAgaXQuICBCLXRyZWUgdXNlcyB0aGlzIGFwcHJvYWNoLgorICA8L3BhcmE+CisKKyAgPHdhcm5p bmc+CisgICA8cGFyYT4KKyAgICBUaGlzIExTTiBjb21wYXJpc29uIHRlY2huaXF1ZSByZXF1aXJl cyB0aGUgaW5kZXggQU0gdG8gdXNlIGZha2UKKyAgICAobW9ub3RvbmljYWxseSBpbmNyZWFzaW5n KSBMU05zIG9uIGl0cyBwYWdlcyBmb3IgcmVsYXRpb25zIHdoZXJlIFdBTCBpcworICAgIG5vdCBn ZW5lcmF0ZWQsIHNpbmNlIHJlYWwgTFNOcyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGF0IGNhc2Uu ICBTZWUgdGhlCisgICAgQi10cmVlIGluZGV4IGltcGxlbWVudGF0aW9uIGZvciBhIHJlZmVyZW5j ZSBleGFtcGxlIG9mIHRoaXMKKyAgICB0ZWNobmlxdWUuICBBbiBpbmRleCBBTSB0aGF0IGRvZXMg bm90IGltcGxlbWVudCBmYWtlIExTTnMgY2FuIHN0aWxsCisgICAgcHJvdmlkZSA8ZnVuY3Rpb24+ YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+LCBidXQgc2hvdWxkIHNpbXBseSBkbworICAgIG5v dGhpbmcgd2hlbiB0aGUgcmVsYXRpb24gZG9lcyBub3QgZ2VuZXJhdGUgV0FMIChpLmUuLCB3aGVu CisgICAgPGZ1bmN0aW9uPlJlbGF0aW9uTmVlZHNXQUwoKTwvZnVuY3Rpb24+IGlzIGZhbHNlKSwg c2luY2UgdGhlIExTTgorICAgIGNvbXBhcmlzb24gd291bGQgYmUgdW5yZWxpYWJsZS4KKyAgIDwv cGFyYT4KKyAgPC93YXJuaW5nPgorCisgIDx0aXA+CisgICA8cGFyYT4KKyAgICBJbmRleCBBTXMg YXJlIG5vdCBvYmxpZ2F0ZWQgdG8gdXNlCisgICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF91bmxv Y2tfYmF0Y2g8L2Z1bmN0aW9uPiAmbWRhc2g7IHRoZXkgY2FuIGltcGxlbWVudAorICAgIHRoZWly IG93biBlcXVpdmFsZW50LCBhbmQgYXJlIGZyZWUgdG8gdXNlIHRoZSBiYXRjaAorICAgIDxzdHJ1 Y3RmaWVsZD5sc248L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiB3aGF0ZXZlciB3YXkgdGhleSBkZWVt IG5lY2Vzc2FyeS4KKyAgIDwvcGFyYT4KKyAgPC90aXA+CisKKyAgPHBhcmE+CisgICBUaGlzIExT Ti1iYXNlZCB2ZXJpZmljYXRpb24gbWVhbnMgdGhhdCB0aGUgdGFibGUgQU0gbmVlZCBub3QgY29u c2lkZXIKKyAgIHdoZXRoZXIgdW5ndWFyZGluZyBhIGJhdGNoIGNvdWxkIGludHJvZHVjZSBUSUQg cmVjeWNsaW5nIGhhemFyZHMgZm9yIGEKKyAgIHN1YnNlcXVlbnQgPGZ1bmN0aW9uPmFta2lsbGl0 ZW1zYmF0Y2g8L2Z1bmN0aW9uPiBjYWxsLiAgVGhlIGhhemFyZHMgYXJlIHRoZQorICAgc2FtZSBp biBib3RoIGNhc2VzLCBidXQgc2luY2UgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0 aW9uPgorICAgaW5kZXBlbmRlbnRseSB2ZXJpZmllcyB0aGUgcGFnZSBMU04gYW5kIGNhbiBhbHdh eXMgc2FmZWx5IGdpdmUgdXAgb24KKyAgIHNldHRpbmcgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJh bD4gYml0cywgY29ycmVjdG5lc3MgaXMgb2J2aW91cyB3aXRob3V0IGFueQorICAgY291cGxpbmcg YmV0d2VlbiB0aGUgdHdvLgorICA8L3BhcmE+CiAKICAgPHBhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+ CkBAIC03NjgsOCArMTA3OSw4IEBAIGFtZ2V0Yml0bWFwIChJbmRleFNjYW5EZXNjIHNjYW4sCiAg ICBpdHNlbGYsIGFuZCB0aGVyZWZvcmUgY2FsbGVycyByZWNoZWNrIGJvdGggdGhlIHNjYW4gY29u ZGl0aW9ucyBhbmQgdGhlCiAgICBwYXJ0aWFsIGluZGV4IHByZWRpY2F0ZSAoaWYgYW55KSBmb3Ig cmVjaGVja2FibGUgdHVwbGVzLiAgVGhhdCBtaWdodCBub3QKICAgIGFsd2F5cyBiZSB0cnVlLCBo b3dldmVyLgotICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gYW5kCi0gICA8ZnVu Y3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGNhbm5vdCBiZSB1c2VkIGluIHRoZSBzYW1lIGlu ZGV4IHNjYW47IHRoZXJlCisgICBPbmx5IG9uZSBvZiA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1 bmN0aW9uPiwgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwKKyAgIG9yIDxmdW5jdGlv bj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gY2FuIGJlIHVzZWQgaW4gYW55IGdpdmVuIGluZGV4IHNj YW47IHRoZXJlCiAgICBhcmUgb3RoZXIgcmVzdHJpY3Rpb25zIHRvbyB3aGVuIHVzaW5nIDxmdW5j dGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+LCBhcyBleHBsYWluZWQKICAgIGluIDx4cmVmIGxp bmtlbmQ9ImluZGV4LXNjYW5uaW5nIi8+LgogICA8L3BhcmE+CkBAIC03ODEsNiArMTA5MiwzOSBA QCBhbWdldGJpdG1hcCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgc3RydWN0IG11c3QgYmUgc2V0 IHRvIE5VTEwuCiAgIDwvcGFyYT4KIAorICA8cGFyYT4KKyAgIEluZGV4IGFjY2VzcyBtZXRob2Rz IHRoYXQgc3VwcG9ydCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHdpbGwKKyAgIHR5 cGljYWxseSBhbHNvIHN1cHBvcnQgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4sIGFu ZCBhbG1vc3QgYWxsIG9mCisgICB0aGUgaW5kZXggQU0ncyBpbnRlcm5hbCBzY2FubmluZyBjb2Rl IGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSB0d28gcGF0aHMuICBUaGUKKyAgIG1haW4gZGlmZmVyZW5j ZSBpcyB0aGF0IGR1cmluZyA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBvbmx5IG9u ZQorICAgYmF0Y2ggaXMgYWxsb2NhdGVkIGF0IGEgdGltZSAodmlhIDxmdW5jdGlvbj5pbmRleGFt X3V0aWxfYWxsb2NfYmF0Y2g8L2Z1bmN0aW9uPiksCisgICB1bmxpa2UgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiB3aGVyZSB0aGUgdGFibGUgQU0gbWFuYWdlcyBzZXZlcmFsCisgICBi YXRjaGVzIGluIGEgZGVkaWNhdGVkIGJhdGNoIHJpbmcgYnVmZmVyIGRhdGEgc3RydWN0dXJlLgor ICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgb25seSBjaGFuZ2UgbmVlZGVkIHRvIG1haW50 YWluIHRoaXMgaW52YXJpYW50IGlzIGEgc2luZ2xlIGNhbGwgdG8KKyAgIDxmdW5jdGlvbj5pbmRl eGFtX3V0aWxfcmVsZWFzZV9iYXRjaDwvZnVuY3Rpb24+IGF0IHRoZSBwb2ludCB3aGVyZSB0aGUK KyAgIHNjYW4gbW92ZXMgYmV0d2VlbiBpbmRleCBwYWdlcywgY29uZGl0aW9uYWwgb24gdGhlIHNj YW4ncworICAgPHN0cnVjdGZpZWxkPnVzZWJhdGNocmluZzwvc3RydWN0ZmllbGQ+IGZpZWxkIGJl aW5nIGZhbHNlIChpbmRpY2F0aW5nIGEKKyAgIGJpdG1hcCBpbmRleCBzY2FuKS4gIFRoZSBpbmRl eCBBTSByZWxlYXNlcyBpdHMgcHJpb3IgYmF0Y2gKKyAgIGp1c3QgYXMgaXQgaXMgYWJvdXQgdG8g Z2VuZXJhdGUgdGhlIG5leHQgYmF0Y2ggJm1kYXNoOyB0aGUgc2FtZSBwb2ludAorICAgd2hlcmUg aXQgZXh0cmFjdHMgbmF2aWdhdGlvbiBzdGF0ZSAoc3VjaCBhcyBzaWJsaW5nLXBhZ2UgbGlua3Mp IGZyb20KKyAgIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+LiAgTm8gb3RoZXIgY2hhbmdl cyB0byB0aGUgaW5kZXggQU0ncworICAgc2Nhbm5pbmcgbG9naWMgYXJlIG5lZWRlZC4gIFRoaXMg ZWFybHkgcmVsZWFzZSBpcyBzcGVjaWZpYyB0bworICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9m dW5jdGlvbj4gc2NhbnM7IGR1cmluZworICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u PiBzY2FucyB0aGUgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4KKyAgIGlzIHN0cmljdGx5 IG93bmVkIGJ5IHRoZSBjYWxsZXIgKHRoZSB0YWJsZSBBTSksIGFuZCB0aGUgaW5kZXggQU0gbXVz dAorICAgbmV2ZXIgcmVsZWFzZSBpdC4gIFNlZSA8ZnVuY3Rpb24+X2J0X25leHQ8L2Z1bmN0aW9u PiBmb3IgYSByZWZlcmVuY2UKKyAgIGV4YW1wbGUuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAg IFRoZSByZWxlYXNlZCBiYXRjaCBpcyBjYWNoZWQgaW50ZXJuYWxseSBhbmQgcmV1c2VkIGJ5IHRo ZSBuZXh0CisgICA8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX2FsbG9jX2JhdGNoPC9mdW5jdGlvbj4g Y2FsbCwgYXZvaWRpbmcgcmVwZWF0ZWQKKyAgIG1lbW9yeSBhbGxvY2F0aW9uIGR1cmluZyB0aGUg Yml0bWFwIHNjYW4uCisgIDwvcGFyYT4KKwogICA8cGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KIHZv aWQKQEAgLTc5NSwzMiArMTEzOSw1MiBAQCBhbWVuZHNjYW4gKEluZGV4U2NhbkRlc2Mgc2Nhbik7 CiAgIDxwYXJhPgogPHByb2dyYW1saXN0aW5nPgogdm9pZAotYW1tYXJrcG9zIChJbmRleFNjYW5E ZXNjIHNjYW4pOworYW1wb3NyZXNldCAoSW5kZXhTY2FuRGVzYyBzY2FuLAorICAgICAgICAgICAg SW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogPC9wcm9ncmFtbGlzdGluZz4KLSAgIE1hcmsgY3VycmVu dCBzY2FuIHBvc2l0aW9uLiAgVGhlIGFjY2VzcyBtZXRob2QgbmVlZCBvbmx5IHN1cHBvcnQgb25l Ci0gICByZW1lbWJlcmVkIHNjYW4gcG9zaXRpb24gcGVyIHNjYW4uCisgICBOb3RpZnkgdGhlIGlu ZGV4IEFNIHRoYXQgdGhlIHRhYmxlIEFNIGlzIGFib3V0IHRvIGNoYW5nZSB0aGUgc2NhbidzCisg ICBsb2dpY2FsIHBvc2l0aW9uIGluIGEgd2F5IHRoYXQgbWF5IGludmFsaWRhdGUgaW5kZXggQU0g c3RhdGUgdGhhdAorICAgaW5kZXBlbmRlbnRseSB0cmFja3MgdGhlIHNjYW4ncyBwcm9ncmVzcy4g IFRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuCisgICB0aGUgdGFibGUgQU0gaXMgYWJvdXQg dG8gcHJvY2VzcyBhIGJhdGNoIGluIGEgZGlmZmVyZW50IGRpcmVjdGlvbiB0aGFuCisgICB3YXMg dXNlZCB3aGVuIHRoZSBiYXRjaCB3YXMgb3JpZ2luYWxseSByZXR1cm5lZCBieQorICAgPGZ1bmN0 aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwgYW5kIGFsc28gd2hlbiBhIG1hcmtlZCBzY2FuIHBv c2l0aW9uIGlzCisgICBhYm91dCB0byBiZSByZXN0b3JlZC4gIFNvbWUgaW5kZXggQU1zIG1haW50 YWluIGludGVybmFsIHN0YXRlIHRoYXQKKyAgIGFkdmFuY2VzIGluIGxvY2tzdGVwIHdpdGggdGhl IHNjYW4gdW5kZXIgdGhlIHNvZnQgYXNzdW1wdGlvbiB0aGF0IHRoZSBzY2FuCisgICBkaXJlY3Rp b24gd2lsbCBub3QgY2hhbmdlLiAgU3VjaCBzdGF0ZSBtYXkgZmFsbCBiZWhpbmQgdGhlIHNjYW4n cyB0cnVlCisgICBwb3NpdGlvbiB3aXRob3V0IGhhcm0gKHNpbXBseSByZWFkaW5nIHRoZSBuZXh0 IGluZGV4IHBhZ2Ugd2lsbCBhbGxvdyB0aGUKKyAgIHN0YXRlIHRvIDxxdW90ZT5jYXRjaCB1cDwv cXVvdGU+KSwgYnV0IG11c3QgbmV2ZXIgZ2V0IGFoZWFkIG9mIGl0LiAgV2hlbgorICAgdGhlIHNj YW4gZGlyZWN0aW9uIGNoYW5nZXMgb3IgYSBtYXJrZWQgcG9zaXRpb24gaXMgcmVzdG9yZWQsIHRo ZSBhc3N1bXB0aW9uCisgICBpcyB2aW9sYXRlZCwgc28gdGhlIGluZGV4IEFNIG11c3QgcmVzZXQg dGhlIHN0YXRlIHRvIGEgc2FmZSBzdGFydGluZyBwb2ludAorICAgZm9yIHRoZSBiYXRjaCdzIHNj YW4gZGlyZWN0aW9uIChhcyBnaXZlbiBieSB0aGUgYmF0Y2gncworICAgPHN0cnVjdGZpZWxkPmRp cjwvc3RydWN0ZmllbGQ+IGZpZWxkLCBkaXNjdXNzZWQgYmVsb3cpLiAgRm9yIGV4YW1wbGUsCisg ICBCLXRyZWUgdXNlcyB0aGlzIGNhbGxiYWNrIHRvIHJlc2V0IGl0cyA8bGl0ZXJhbD5TY2FsYXJB cnJheU9wRXhwcjwvbGl0ZXJhbD4KKyAgIGFycmF5IGtleXMgdG8gdGhlaXIgaW5pdGlhbCBwb3Np dGlvbnMuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRoZSA8ZnVuY3Rpb24+YW1tYXJrcG9z PC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZSBhY2Nlc3MK LSAgIG1ldGhvZCBzdXBwb3J0cyBvcmRlcmVkIHNjYW5zLiAgSWYgaXQgZG9lc24ndCwKLSAgIHRo ZSA8c3RydWN0ZmllbGQ+YW1tYXJrcG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaW4gaXRzIDxzdHJ1 Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgotICAgc3RydWN0IG1heSBiZSBzZXQg dG8gTlVMTC4KKyAgIFdoZW4gPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBpcyBjYWxs ZWQgZHVlIHRvIGEgY3Jvc3MtYmF0Y2gKKyAgIGRpcmVjdGlvbiBjaGFuZ2UsIHRoZSBjb3JlIHN5 c3RlbSB3aWxsIGhhdmUgYWxyZWFkeSBmbGlwcGVkIHRoZSBiYXRjaCdzCisgICA8c3RydWN0Zmll bGQ+ZGlyPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdG8gcmVmbGVjdCB0aGUgbmV3IHNjYW4gZGlyZWN0 aW9uCisgICBiZWZvcmUgbWFraW5nIHRoZSBjYWxsLiAgVGhlIGluZGV4IEFNIHNob3VsZCB1c2Ug dGhpcyB1cGRhdGVkIGRpcmVjdGlvbgorICAgd2hlbiByZXNldHRpbmcgYW55IHN0YXRlIHRoYXQg ZGVwZW5kcyBvbiBrbm93aW5nIHdoaWNoIHdheSB0aGUgc2NhbiBpcworICAgcHJvY2VlZGluZy4g IFdoZW4gY2FsbGVkIHRvIHJlc3RvcmUgYSBtYXJrZWQgcG9zaXRpb24sIHRoZSBiYXRjaCdzCisg ICA8c3RydWN0ZmllbGQ+ZGlyPC9zdHJ1Y3RmaWVsZD4gaXMgbm90IG1vZGlmaWVkOyBpdCByZXRh aW5zIHRoZSBkaXJlY3Rpb24KKyAgIGZyb20gd2hlbiB0aGUgYmF0Y2ggd2FzIG9yaWdpbmFsbHkg cmV0dXJuZWQuICBJbiBib3RoIGNhc2VzLCB0aGUgYmF0Y2gKKyAgIHBhc3NlZCB0byA8ZnVuY3Rp b24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGlzIHRoZSBiYXRjaCB0aGF0IHdpbGwgbmV4dCBiZQor ICAgcGFzc2VkIHRvIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gYXMgaXRzCisgICA8 bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPi4gIE5vdGUgaW4gcGFydGljdWxhciB0aGF0IHRo ZQorICAgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4uPHN0cnVjdGZpZWxkPmRpcjwvc3Ry dWN0ZmllbGQ+IGZpZWxkIGlzCisgICBndWFyYW50ZWVkIHRvIGhhdmUgdGhlIHNhbWUgc2NhbiBk aXJlY3Rpb24gYXMgd2hlbgorICAgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiB3YXMg Y2FsbGVkLgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci08cHJvZ3JhbWxpc3Rpbmc+Ci12b2lkCi1h bXJlc3RycG9zIChJbmRleFNjYW5EZXNjIHNjYW4pOwotPC9wcm9ncmFtbGlzdGluZz4KLSAgIFJl c3RvcmUgdGhlIHNjYW4gdG8gdGhlIG1vc3QgcmVjZW50bHkgbWFya2VkIHBvc2l0aW9uLgotICA8 L3BhcmE+Ci0KLSAgPHBhcmE+Ci0gICBUaGUgPGZ1bmN0aW9uPmFtcmVzdHJwb3M8L2Z1bmN0aW9u PiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlIGFjY2VzcwotICAgbWV0aG9k IHN1cHBvcnRzIG9yZGVyZWQgc2NhbnMuICBJZiBpdCBkb2Vzbid0LAotICAgdGhlIDxzdHJ1Y3Rm aWVsZD5hbXJlc3RycG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPklu ZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgotICAgc3RydWN0IG1heSBiZSBzZXQgdG8gTlVMTC4K KyAgIEluZGV4IGFjY2VzcyBtZXRob2RzIHRoYXQgaGF2ZSBwcml2YXRlIHN0YXRlIHdoaWNoIG11 c3QgYmUgcmVzZXQgd2hlbiB0aGUKKyAgIHNjYW4gcG9zaXRpb24gY2hhbmdlcyBtdXN0IHByb3Zp ZGUgYW4gPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPgorICAgaW1wbGVtZW50YXRpb24u ICBJbmRleCBBTXMgd2l0aCBubyBzdWNoIHN0YXRlIG1heSBzZXQKKyAgIDxzdHJ1Y3RmaWVsZD5h bXBvc3Jlc2V0PC9zdHJ1Y3RmaWVsZD4gdG8gTlVMTC4gIFRoZQorICAgPGZ1bmN0aW9uPmFtcG9z cmVzZXQ8L2Z1bmN0aW9uPiBmdW5jdGlvbiBjYW4gb25seSBiZSBwcm92aWRlZCBieSBhbiBhY2Nl c3MKKyAgIG1ldGhvZCB0aGF0IGltcGxlbWVudHMgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9m dW5jdGlvbj4gaW50ZXJmYWNlLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC05NzUsNiArMTMz OSw4IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFt aWx5LCBPaWQgb3BjaW50eXBlKTsKICAgICAgICBBY2Nlc3MgbWV0aG9kcyB0aGF0IGFsd2F5cyBy ZXR1cm4gZW50cmllcyBpbiB0aGUgbmF0dXJhbCBvcmRlcmluZwogICAgICAgIG9mIHRoZWlyIGRh dGEgKHN1Y2ggYXMgYnRyZWUpIHNob3VsZCBzZXQKICAgICAgICA8c3RydWN0ZmllbGQ+YW1jYW5v cmRlcjwvc3RydWN0ZmllbGQ+IHRvIHRydWUuCisgICAgICAgQm90aCA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+CisgICAg ICAgc2NhbnMgc3VwcG9ydCB0aGlzIGNhcGFiaWxpdHkuCiAgICAgICAgQ3VycmVudGx5LCBzdWNo IGFjY2VzcyBtZXRob2RzIG11c3QgdXNlIGJ0cmVlLWNvbXBhdGlibGUgc3RyYXRlZ3kKICAgICAg ICBudW1iZXJzIGZvciB0aGVpciBlcXVhbGl0eSBhbmQgb3JkZXJpbmcgb3BlcmF0b3JzLgogICAg ICAgPC9wYXJhPgpAQCAtOTk0LDM0ICsxMzYwLDQwIEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29t cGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgPC9wYXJh PgogCiAgIDxwYXJhPgotICAgVGhlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gZnVu Y3Rpb24gaGFzIGEgPGxpdGVyYWw+ZGlyZWN0aW9uPC9saXRlcmFsPiBhcmd1bWVudCwKKyAgIE5v dGUgdGhhdCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHNjYW5zIGRvIG5vdCBjdXJy ZW50bHkgc3VwcG9ydAorICAgb3JkZXJpbmcgb3BlcmF0b3JzLgorICA8L3BhcmE+CisKKyAgPHBh cmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbiBoYXMg YSA8bGl0ZXJhbD5kaXJlY3Rpb248L2xpdGVyYWw+IGFyZ3VtZW50LAogICAgd2hpY2ggY2FuIGJl IGVpdGhlciA8bGl0ZXJhbD5Gb3J3YXJkU2NhbkRpcmVjdGlvbjwvbGl0ZXJhbD4gKHRoZSBub3Jt YWwgY2FzZSkKICAgIG9yICA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+ LiAgSWYgdGhlIGZpcnN0IGNhbGwgYWZ0ZXIKICAgIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rp b24+IHNwZWNpZmllcyA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+LCB0 aGVuIHRoZQotICAgc2V0IG9mIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgaXMgdG8gYmUgc2Nhbm5l ZCBiYWNrLXRvLWZyb250IHJhdGhlciB0aGFuIGluCi0gICB0aGUgbm9ybWFsIGZyb250LXRvLWJh Y2sgZGlyZWN0aW9uLCBzbyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG11c3QgcmV0 dXJuCi0gICB0aGUgbGFzdCBtYXRjaGluZyB0dXBsZSBpbiB0aGUgaW5kZXgsIHJhdGhlciB0aGFu IHRoZSBmaXJzdCBvbmUgYXMgaXQKLSAgIG5vcm1hbGx5IHdvdWxkLiAgKFRoaXMgd2lsbCBvbmx5 IG9jY3VyIGZvciBhY2Nlc3MKLSAgIG1ldGhvZHMgdGhhdCBzZXQgPHN0cnVjdGZpZWxkPmFtY2Fu b3JkZXI8L3N0cnVjdGZpZWxkPiB0byB0cnVlLikgIEFmdGVyIHRoZQotICAgZmlyc3QgY2FsbCwg PGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBhcmVkIHRvIGFkdmFu Y2UgdGhlIHNjYW4gaW4KKyAgIHJldHVybmVkIGJhdGNoIG11c3QgYmUgdGhlIGJhdGNoIGNvbnRh aW5pbmcgdGhlIGxhc3QgbWF0Y2hpbmcgaXRlbShzKSwKKyAgIHJhdGhlciB0aGFuIHRoZSBiYXRj aCBjb250YWluaW5nIHRoZSBmaXJzdCBtYXRjaGluZyBpdGVtKHMpLgorICAgPGZ1bmN0aW9uPmFt Z2V0YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBhcmVkIHRvIGFkdmFuY2UgdGhlIHNjYW4g aW4KICAgIGVpdGhlciBkaXJlY3Rpb24gZnJvbSB0aGUgbW9zdCByZWNlbnRseSByZXR1cm5lZCBl bnRyeS4gIChCdXQgaWYKICAgIDxzdHJ1Y3RmaWVsZD5hbWNhbmJhY2t3YXJkPC9zdHJ1Y3RmaWVs ZD4gaXMgZmFsc2UsIGFsbCBzdWJzZXF1ZW50CiAgICBjYWxscyB3aWxsIGhhdmUgdGhlIHNhbWUg ZGlyZWN0aW9uIGFzIHRoZSBmaXJzdCBvbmUuKQogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBB Y2Nlc3MgbWV0aG9kcyB0aGF0IHN1cHBvcnQgb3JkZXJlZCBzY2FucyBtdXN0IHN1cHBvcnQgPHF1 b3RlPm1hcmtpbmc8L3F1b3RlPiBhCi0gICBwb3NpdGlvbiBpbiBhIHNjYW4gYW5kIGxhdGVyIHJl dHVybmluZyB0byB0aGUgbWFya2VkIHBvc2l0aW9uLiAgVGhlIHNhbWUKLSAgIHBvc2l0aW9uIG1p Z2h0IGJlIHJlc3RvcmVkIG11bHRpcGxlIHRpbWVzLiAgSG93ZXZlciwgb25seSBvbmUgcG9zaXRp b24gbmVlZAotICAgYmUgcmVtZW1iZXJlZCBwZXIgc2NhbjsgYSBuZXcgPGZ1bmN0aW9uPmFtbWFy a3BvczwvZnVuY3Rpb24+IGNhbGwgb3ZlcnJpZGVzIHRoZQotICAgcHJldmlvdXNseSBtYXJrZWQg cG9zaXRpb24uICBBbiBhY2Nlc3MgbWV0aG9kIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBvcmRlcmVk Ci0gICBzY2FucyBuZWVkIG5vdCBwcm92aWRlIDxmdW5jdGlvbj5hbW1hcmtwb3M8L2Z1bmN0aW9u PiBhbmQgPGZ1bmN0aW9uPmFtcmVzdHJwb3M8L2Z1bmN0aW9uPgotICAgZnVuY3Rpb25zIGluIDxz dHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPjsgc2V0IHRob3NlIHBvaW50ZXJz IHRvIE5VTEwKLSAgIGluc3RlYWQuCisgICBBbiA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+IGluZGV4IEFNIGNhbiBzdXBwb3J0IG1hcmsvcmVzdG9yZSBvZgorICAgc2NhbiBwb3NpdGlv bnMgYnkgc2V0dGluZyA8c3RydWN0ZmllbGQ+YW1jYW5tYXJrcG9zPC9zdHJ1Y3RmaWVsZD4KKyAg ICg8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGluZGV4IEFNcyBkbyBub3Qgc3VwcG9y dCBtYXJrL3Jlc3RvcmUpLgorICAgVGhlIG1hcmsvcmVzdG9yZSBpbXBsZW1lbnRhdGlvbiBsaXZl cyBpbiB0aGUgdGFibGUgQU0gYW5kIHdvcmtzIHdpdGggYW55CisgICA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+IGltcGxlbWVudGF0aW9uOyBob3dldmVyLCBhbiBpbmRleCBhY2Nlc3MK KyAgIG1ldGhvZCB3aG9zZSBzY2FucyBjYW5ub3QgYmUgcmV3b3VuZCB0byBhbiBlYXJsaWVyIHBv c2l0aW9uIHNob3VsZCBsZWF2ZQorICAgPHN0cnVjdGZpZWxkPmFtY2FubWFya3Bvczwvc3RydWN0 ZmllbGQ+IGZhbHNlLCBpbiB3aGljaCBjYXNlIHRoZSBwbGFubmVyCisgICBtYXRlcmlhbGl6ZXMg dGhlIHNjYW4ncyBvdXRwdXQgd2hlcmUgbWFyay9yZXN0b3JlIHdvdWxkIGJlIG5lZWRlZC4KKyAg IFNlcGFyYXRlbHksIGluZGV4IEFNcyB0aGF0IG1haW50YWluIGludGVybmFsIHN0YXRlIHdoaWNo IHRyYWNrcyB0aGUgc2NhbidzCisgICBwcm9ncmVzcyBtdXN0IHByb3ZpZGUgYW4gPGZ1bmN0aW9u PmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBjYWxsYmFjayB0byBiZQorICAgbm90aWZpZWQgd2hlbiB0 aGUgc2NhbidzIGxvZ2ljYWwgcG9zaXRpb24gY2hhbmdlcyB1bmV4cGVjdGVkbHksIHN1Y2ggYXMK KyAgIGR1cmluZyBtYXJrL3Jlc3RvcmU7IHNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1mdW5jdGlv bnMiLz4gZm9yIGRldGFpbHMuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIEJvdGggdGhlIHNj YW4gcG9zaXRpb24gYW5kIHRoZSBtYXJrIHBvc2l0aW9uIChpZiBhbnkpIG11c3QgYmUgbWFpbnRh aW5lZAorICAgVGhlIHNjYW4gcG9zaXRpb24gbXVzdCBiZSBtYWludGFpbmVkIGJ5IHRoZSB0YWJs ZSBBTSBhbmQgaW5kZXggQU0KICAgIGNvbnNpc3RlbnRseSBpbiB0aGUgZmFjZSBvZiBjb25jdXJy ZW50IGluc2VydGlvbnMgb3IgZGVsZXRpb25zIGluIHRoZQogICAgaW5kZXguICBJdCBpcyBPSyBp ZiBhIGZyZXNobHktaW5zZXJ0ZWQgZW50cnkgaXMgbm90IHJldHVybmVkIGJ5IGEgc2NhbiB0aGF0 CiAgICB3b3VsZCBoYXZlIGZvdW5kIHRoZSBlbnRyeSBpZiBpdCBoYWQgZXhpc3RlZCB3aGVuIHRo ZSBzY2FuIHN0YXJ0ZWQsIG9yIGZvcgpAQCAtMTA0MCwxNSArMTQxMiwxNyBAQCBhbXRyYW5zbGF0 ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlw ZSk7CiAgICB3aGljaCB0aGUgaW5kZXggcmV0dXJucyB0aGUgYWN0dWFsIGRhdGEgbm90IGp1c3Qg dGhlIFRJRCBvZiB0aGUgaGVhcCB0dXBsZS4KICAgIFRoaXMgd2lsbCBvbmx5IGF2b2lkIEkvTyBp ZiB0aGUgdmlzaWJpbGl0eSBtYXAgc2hvd3MgdGhhdCB0aGUgVElEIGlzIG9uIGFuCiAgICBhbGwt dmlzaWJsZSBwYWdlOyBlbHNlIHRoZSBoZWFwIHR1cGxlIG11c3QgYmUgdmlzaXRlZCBhbnl3YXkg dG8gY2hlY2sKLSAgIE1WQ0MgdmlzaWJpbGl0eS4gIEJ1dCB0aGF0IGlzIG5vIGNvbmNlcm4gb2Yg dGhlIGFjY2VzcyBtZXRob2Qncy4KKyAgIE1WQ0MgdmlzaWJpbGl0eS4gIEJ1dCB0aGF0IGlzIG5v IGNvbmNlcm4gb2YgdGhlIGluZGV4IGFjY2VzcyBtZXRob2Qncy4KICAgPC9wYXJhPgogCiAgIDxw YXJhPgotICAgSW5zdGVhZCBvZiB1c2luZyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+ LCBhbiBpbmRleCBzY2FuIGNhbiBiZSBkb25lIHdpdGgKLSAgIDxmdW5jdGlvbj5hbWdldGJpdG1h cDwvZnVuY3Rpb24+IHRvIGZldGNoIGFsbCB0dXBsZXMgaW4gb25lIGNhbGwuICBUaGlzIGNhbiBi ZQotICAgbm90aWNlYWJseSBtb3JlIGVmZmljaWVudCB0aGFuIDxmdW5jdGlvbj5hbWdldHR1cGxl PC9mdW5jdGlvbj4gYmVjYXVzZSBpdCBhbGxvd3MKLSAgIGF2b2lkaW5nIGxvY2svdW5sb2NrIGN5 Y2xlcyB3aXRoaW4gdGhlIGFjY2VzcyBtZXRob2QuICBJbiBwcmluY2lwbGUKLSAgIDxmdW5jdGlv bj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHNob3VsZCBoYXZlIHRoZSBzYW1lIGVmZmVjdHMgYXMg cmVwZWF0ZWQKKyAgIEluc3RlYWQgb2YgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiBvcgorICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwgYW4gaW5kZXggc2Nh biBjYW4gYmUgZG9uZSB3aXRoCisgICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiB0 byBmZXRjaCBhbGwgdHVwbGVzIGluIG9uZSBjYWxsLiAgVGhpcyBjYW4KKyAgIGJlIG5vdGljZWFi bHkgbW9yZSBlZmZpY2llbnQgdGhhbiBhbiBpbmNyZW1lbnRhbCBpbmRleCBzY2FuIGJlY2F1c2Ug dGhlCisgICB0YWJsZSBBTSB2aXNpdHMgZWFjaCB0YWJsZSBibG9jayBhdCBtb3N0IG9uY2UsIGlu IHBoeXNpY2FsIGJsb2NrIG9yZGVyLgorICAgSW4gcHJpbmNpcGxlIDxmdW5jdGlvbj5hbWdldGJp dG1hcDwvZnVuY3Rpb24+IHNob3VsZCBoYXZlIHRoZQorICAgc2FtZSBlZmZlY3RzIGFzIHJlcGVh dGVkIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gb3IKICAgIDxmdW5jdGlvbj5hbWdl dHR1cGxlPC9mdW5jdGlvbj4gY2FsbHMsIGJ1dCB3ZSBpbXBvc2Ugc2V2ZXJhbCByZXN0cmljdGlv bnMgdG8KICAgIHNpbXBsaWZ5IG1hdHRlcnMuICBGaXJzdCBvZiBhbGwsIDxmdW5jdGlvbj5hbWdl dGJpdG1hcDwvZnVuY3Rpb24+IHJldHVybnMgYWxsCiAgICB0dXBsZXMgYXQgb25jZSBhbmQgbWFy a2luZyBvciByZXN0b3Jpbmcgc2NhbiBwb3NpdGlvbnMgaXNuJ3QKQEAgLTEwNTksMTUgKzE0MzMs MTYgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1p bHksIE9pZCBvcGNpbnR5cGUpOwogICAgQWxzbywgdGhlcmUgaXMgbm8gcHJvdmlzaW9uIGZvciBp bmRleC1vbmx5IHNjYW5zIHdpdGgKICAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+ LCBzaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gcmV0dXJuIHRoZSBjb250ZW50cyBvZgogICAgaW5k ZXggdHVwbGVzLgotICAgRmluYWxseSwgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4K LSAgIGRvZXMgbm90IGd1YXJhbnRlZSBhbnkgbG9ja2luZyBvZiB0aGUgcmV0dXJuZWQgdHVwbGVz LCB3aXRoIGltcGxpY2F0aW9ucwotICAgc3BlbGxlZCBvdXQgaW4gPHhyZWYgbGlua2VuZD0iaW5k ZXgtbG9ja2luZyIvPi4KKyAgIEZpbmFsbHksIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rp b24+IGRvZXMgbm90IGhvbGQgYW55IGluZGV4IHBhZ2UgcGlucworICAgYWZ0ZXIgaXQgcmV0dXJu cyAoc2ltaWxhcmx5IHRvIHBsYWluLCBub24taW5kZXgtb25seQorICAgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiBzY2FucyB0aGF0IHVzZSBhbiBNVkNDIHNuYXBzaG90KSwgYXMKKyAg IGRlc2NyaWJlZCBpbiA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+LgogICA8L3BhcmE+ CiAKICAgPHBhcmE+CiAgICBOb3RlIHRoYXQgaXQgaXMgcGVybWl0dGVkIGZvciBhbiBhY2Nlc3Mg bWV0aG9kIHRvIGltcGxlbWVudCBvbmx5Ci0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0 aW9uPiBhbmQgbm90IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIG9yIHZpY2UgdmVy c2EsCi0gICBpZiBpdHMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gaXMgdW5zdWl0ZWQgdG8gb25l IEFQSSBvciB0aGUgb3RoZXIuCisgICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBh bmQgbm90IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4vPGZ1bmN0aW9uPmFtZ2V0dHVw bGU8L2Z1bmN0aW9uPiwKKyAgIG9yIHZpY2UgdmVyc2EsIGlmIGl0cyBpbnRlcm5hbCBpbXBsZW1l bnRhdGlvbiBpcyB1bnN1aXRlZCB0byBvbmUgQVBJIG9yIHRoZSBvdGhlci4KICAgPC9wYXJhPgog CiAgPC9zZWN0MT4KQEAgLTExMjMsMTEgKzE0OTgsMjIgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChD b21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICAgICA8 L2xpc3RpdGVtPgogICAgICA8bGlzdGl0ZW0+CiAgICAgICA8cGFyYT4KLSAgICAgICBBbiBpbmRl eCBzY2FuIG11c3QgbWFpbnRhaW4gYSBwaW4KLSAgICAgICBvbiB0aGUgaW5kZXggcGFnZSBob2xk aW5nIHRoZSBpdGVtIGxhc3QgcmV0dXJuZWQgYnkKLSAgICAgICA8ZnVuY3Rpb24+YW1nZXR0dXBs ZTwvZnVuY3Rpb24+LCBhbmQgPGZ1bmN0aW9uPmFtYnVsa2RlbGV0ZTwvZnVuY3Rpb24+IGNhbm5v dCBkZWxldGUKLSAgICAgICBlbnRyaWVzIGZyb20gcGFnZXMgdGhhdCBhcmUgcGlubmVkIGJ5IG90 aGVyIGJhY2tlbmRzLiAgVGhlIG5lZWQKLSAgICAgICBmb3IgdGhpcyBydWxlIGlzIGV4cGxhaW5l ZCBiZWxvdy4KKyAgICAgICBBIHBpbiBtdXN0IGJlIGhlbGQgb24gYW55IGluZGV4IHBhZ2Ugd2hv c2UgaXRlbXMgbWlnaHQgc3RpbGwgbmVlZCB0bworICAgICAgIGJlIGZvbGxvd2VkLCBhbmQgPGZ1 bmN0aW9uPmFtYnVsa2RlbGV0ZTwvZnVuY3Rpb24+IG11c3QgYWNxdWlyZSBhCisgICAgICAgY2xl YW51cCBsb2NrIG9uIGVhY2ggaW5kZXggcGFnZSwgd2hpY2ggd2lsbCBibG9jayBpZiBhbnkgb3Ro ZXIKKyAgICAgICBiYWNrZW5kIGhvbGRzIGEgcGluIG9uIHRoYXQgcGFnZS4KKyAgICAgICBGb3Ig PGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBzY2FucywgdGhlIGluZGV4IGFjY2VzcyBt ZXRob2QKKyAgICAgICBtYW5hZ2VzIHRoaXMgcGluIGRpcmVjdGx5LCBob2xkaW5nIGEgcGluIG9u IHRoZSBjdXJyZW50IGluZGV4IHBhZ2UKKyAgICAgICB1bnRpbCB0aGUgc2NhbiBtb3ZlcyB0byBh IGRpZmZlcmVudCBwYWdlIG9yIGVuZHMuCisgICAgICAgRm9yIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4gc2NhbnMsIHRoZSBpbmRleCBBTSBob2xkcyB0aGUKKyAgICAgICBiYXRjaCdz IGludGVybG9jayAodHlwaWNhbGx5IGEgYnVmZmVyIHBpbiBvbiB0aGUgYmF0Y2gncyBpbmRleCBw YWdlKSBpbgorICAgICAgIGl0cyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEuCisgICAgICAgRGVwZW5k aW5nIG9uIGEgc2Nhbi1sZXZlbCBwb2xpY3kgZGVzY3JpYmVkIGJlbG93LCB0aGUgaW50ZXJsb2Nr IGlzIHRoZW4KKyAgICAgICBlaXRoZXIgZHJvcHBlZCBlYWdlcmx5IChpbnNpZGUgdGhlIGluZGV4 IEFNJ3MgY2FsbCB0bworICAgICAgIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfdW5sb2NrX2JhdGNo PC9mdW5jdGlvbj4pIGJlZm9yZSB0aGUgYmF0Y2ggaXMKKyAgICAgICByZXR1cm5lZCB0byB0aGUg dGFibGUgQU0sIG9yIHJldGFpbmVkIHVudGlsIHRoZSB0YWJsZSBBTSByZWxlYXNlcyBpdAorICAg ICAgICh2aWEgdGhlIGluZGV4IEFNJ3MgPGZ1bmN0aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlv bj4gY2FsbGJhY2spLgorICAgICAgIFRoZSBuZWVkIGZvciB0aGlzIHJ1bGUgaXMgZXhwbGFpbmVk IGJlbG93LgogICAgICAgPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgIDwvaXRlbWl6ZWRs aXN0PgpAQCAtMTEzOCwzOSArMTUyNCw4NSBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVU eXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICA8Y29tbWFuZD5W QUNVVU08L2NvbW1hbmQ+LgogICAgVGhpcyBjcmVhdGVzIG5vIHNlcmlvdXMgcHJvYmxlbXMgaWYg dGhhdCBpdGVtCiAgICBudW1iZXIgaXMgc3RpbGwgdW51c2VkIHdoZW4gdGhlIHJlYWRlciByZWFj aGVzIGl0LCBzaW5jZSBhbiBlbXB0eQotICAgaXRlbSBzbG90IHdpbGwgYmUgaWdub3JlZCBieSA8 ZnVuY3Rpb24+aGVhcF9mZXRjaCgpPC9mdW5jdGlvbj4uICBCdXQgd2hhdCBpZiBhCisgICBpdGVt IHNsb3Qgd2lsbCBzaW1wbHkgYmUgdHJlYXRlZCBhcyBub3QtdmlzaWJsZS4gIEJ1dCB3aGF0IGlm IGEKICAgIHRoaXJkIGJhY2tlbmQgaGFzIGFscmVhZHkgcmUtdXNlZCB0aGUgaXRlbSBzbG90IGZv ciBzb21ldGhpbmcgZWxzZT8KICAgIFdoZW4gdXNpbmcgYW4gTVZDQy1jb21wbGlhbnQgc25hcHNo b3QsIHRoZXJlIGlzIG5vIHByb2JsZW0gYmVjYXVzZQogICAgdGhlIG5ldyBvY2N1cGFudCBvZiB0 aGUgc2xvdCBpcyBjZXJ0YWluIHRvIGJlIHRvbyBuZXcgdG8gcGFzcyB0aGUKICAgIHNuYXBzaG90 IHRlc3QuICBIb3dldmVyLCB3aXRoIGEgbm9uLU1WQ0MtY29tcGxpYW50IHNuYXBzaG90IChzdWNo IGFzCiAgICA8bGl0ZXJhbD5TbmFwc2hvdEFueTwvbGl0ZXJhbD4pLCBpdCB3b3VsZCBiZSBwb3Nz aWJsZSB0byBhY2NlcHQgYW5kIHJldHVybgotICAgYSByb3cgdGhhdCBkb2VzIG5vdCBpbiBmYWN0 IG1hdGNoIHRoZSBzY2FuIGtleXMuICBXZSBjb3VsZCBkZWZlbmQKLSAgIGFnYWluc3QgdGhpcyBz Y2VuYXJpbyBieSByZXF1aXJpbmcgdGhlIHNjYW4ga2V5cyB0byBiZSByZWNoZWNrZWQKLSAgIGFn YWluc3QgdGhlIGhlYXAgcm93IGluIGFsbCBjYXNlcywgYnV0IHRoYXQgaXMgdG9vIGV4cGVuc2l2 ZS4gIEluc3RlYWQsCi0gICB3ZSB1c2UgYSBwaW4gb24gYW4gaW5kZXggcGFnZSBhcyBhIHByb3h5 IHRvIGluZGljYXRlIHRoYXQgdGhlIHJlYWRlcgotICAgbWlnaHQgc3RpbGwgYmUgPHF1b3RlPmlu IGZsaWdodDwvcXVvdGU+IGZyb20gdGhlIGluZGV4IGVudHJ5IHRvIHRoZSBtYXRjaGluZwotICAg aGVhcCBlbnRyeS4gIE1ha2luZyA8ZnVuY3Rpb24+YW1idWxrZGVsZXRlPC9mdW5jdGlvbj4gYmxv Y2sgb24gc3VjaCBhIHBpbiBlbnN1cmVzCi0gICB0aGF0IDxjb21tYW5kPlZBQ1VVTTwvY29tbWFu ZD4gY2Fubm90IGRlbGV0ZSB0aGUgaGVhcCBlbnRyeSBiZWZvcmUgdGhlIHJlYWRlcgotICAgaXMg ZG9uZSB3aXRoIGl0LiAgVGhpcyBzb2x1dGlvbiBjb3N0cyBsaXR0bGUgaW4gcnVuIHRpbWUsIGFu ZCBhZGRzIGJsb2NraW5nCi0gICBvdmVyaGVhZCBvbmx5IGluIHRoZSByYXJlIGNhc2VzIHdoZXJl IHRoZXJlIGFjdHVhbGx5IGlzIGEgY29uZmxpY3QuCisgICBhIHdob2xseSB1bnJlbGF0ZWQgcm93 IChvbmUgdGhhdCBkb2VzIG5vdCBuZWNlc3NhcmlseSBzYXRpc2Z5IHRoZSBzY2FuCisgICBrZXlz KS4gIFdlIGNhbiBvcHRpb25hbGx5IHVzZSBhIHBpbiBvbiBhbiBpbmRleCBwYWdlIGFzIGEgcHJv eHkgdG8gaW5kaWNhdGUKKyAgIHRoYXQgdGhlIHJlYWRlciBtaWdodCBzdGlsbCBiZSA8cXVvdGU+ aW4gZmxpZ2h0PC9xdW90ZT4gZnJvbSB0aGUgaW5kZXgKKyAgIGVudHJ5IHRvIHRoZSBtYXRjaGlu ZyBoZWFwIGVudHJ5LiAgTWFraW5nIDxmdW5jdGlvbj5hbWJ1bGtkZWxldGU8L2Z1bmN0aW9uPgor ICAgYmxvY2sgb24gc3VjaCBhIHBpbiBlbnN1cmVzIHRoYXQgPGNvbW1hbmQ+VkFDVVVNPC9jb21t YW5kPiBjYW5ub3QgZGVsZXRlCisgICB0aGUgaGVhcCBlbnRyeSBiZWZvcmUgdGhlIHJlYWRlciBp cyBkb25lIHdpdGggaXQuICBUaGlzIHNvbHV0aW9uIGNvc3RzCisgICBsaXR0bGUgaW4gcnVuIHRp bWUsIGFuZCBhZGRzIGJsb2NraW5nIG92ZXJoZWFkIG9ubHkgaW4gdGhlIHJhcmUgY2FzZXMgd2hl cmUKKyAgIHRoZXJlIGFjdHVhbGx5IGlzIGEgY29uZmxpY3QuICBGb3IgcGxhaW4gaW5kZXggc2Nh bnMgdGhhdCB1c2UgYW4KKyAgIE1WQ0MtY29tcGxpYW50IHNuYXBzaG90LCBob2xkaW5nIHRoZSBw aW4gaXMgdW5uZWNlc3NhcnkgYmVjYXVzZSB0aGUgc2NhbgorICAgd2lsbCBhbHdheXMgdmlzaXQg dGhlIGhlYXAgcGFnZSwgd2hlcmUgdGhlIHNuYXBzaG90IGl0c2VsZiB3aWxsIHJlamVjdCBhbnkK KyAgIHJlY3ljbGVkIFRJRCdzIG5ldyBvY2N1cGFudC4gIChJbmRleC1vbmx5IHNjYW5zIGFyZSBh IHNwZWNpYWwgY2FzZSwgYXMKKyAgIGRpc2N1c3NlZCBiZWxvdy4pCiAgIDwvcGFyYT4KIAogICA8 cGFyYT4KLSAgIFRoaXMgc29sdXRpb24gcmVxdWlyZXMgdGhhdCBpbmRleCBzY2FucyBiZSA8cXVv dGU+c3luY2hyb25vdXM8L3F1b3RlPjogd2UgaGF2ZQotICAgdG8gZmV0Y2ggZWFjaCBoZWFwIHR1 cGxlIGltbWVkaWF0ZWx5IGFmdGVyIHNjYW5uaW5nIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4Ci0g ICBlbnRyeS4gIFRoaXMgaXMgZXhwZW5zaXZlIGZvciBhIG51bWJlciBvZiByZWFzb25zLiAgQW4K LSAgIDxxdW90ZT5hc3luY2hyb25vdXM8L3F1b3RlPiBzY2FuIGluIHdoaWNoIHdlIGNvbGxlY3Qg bWFueSBUSURzIGZyb20gdGhlIGluZGV4LAotICAgYW5kIG9ubHkgdmlzaXQgdGhlIGhlYXAgdHVw bGVzIHNvbWV0aW1lIGxhdGVyLCByZXF1aXJlcyBtdWNoIGxlc3MgaW5kZXgKLSAgIGxvY2tpbmcg b3ZlcmhlYWQgYW5kIGNhbiBhbGxvdyBhIG1vcmUgZWZmaWNpZW50IGhlYXAgYWNjZXNzIHBhdHRl cm4uCi0gICBQZXIgdGhlIGFib3ZlIGFuYWx5c2lzLCB3ZSBtdXN0IHVzZSB0aGUgc3luY2hyb25v dXMgYXBwcm9hY2ggZm9yCi0gICBub24tTVZDQy1jb21wbGlhbnQgc25hcHNob3RzLCBidXQgYW4g YXN5bmNocm9ub3VzIHNjYW4gaXMgd29ya2FibGUKLSAgIGZvciBhIHF1ZXJ5IHVzaW5nIGFuIE1W Q0Mgc25hcHNob3QuCisgICBUaGlzIHNvbHV0aW9uIHJlcXVpcmVzIHRoYXQgPGZ1bmN0aW9uPmFt Z2V0dHVwbGU8L2Z1bmN0aW9uPiBpbmRleCBzY2FucyBiZQorICAgPHF1b3RlPnN5bmNocm9ub3Vz PC9xdW90ZT46IHRoZSB0YWJsZSBBTSBtdXN0IGZldGNoIGVhY2ggaGVhcCB0dXBsZQorICAgaW1t ZWRpYXRlbHkgYWZ0ZXIgc2Nhbm5pbmcgdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXggZW50cnkuICBU aGlzIGlzCisgICBleHBlbnNpdmUgZm9yIGEgbnVtYmVyIG9mIHJlYXNvbnMuICBUaGUKKyAgIDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlLCBieSBjb250cmFzdCwgd2Fz IGRlc2lnbmVkIHRvCisgICBhbGxvdyBzY2FucyB0byBiZSA8cXVvdGU+YXN5bmNocm9ub3VzPC9x dW90ZT4uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIEluIGFuIDxmdW5jdGlvbj5hbWdldGJp dG1hcDwvZnVuY3Rpb24+IGluZGV4IHNjYW4sIHRoZSBhY2Nlc3MgbWV0aG9kIGRvZXMgbm90Ci0g ICBrZWVwIGFuIGluZGV4IHBpbiBvbiBhbnkgb2YgdGhlIHJldHVybmVkIHR1cGxlcy4gIFRoZXJl Zm9yZQotICAgaXQgaXMgb25seSBzYWZlIHRvIHVzZSBzdWNoIHNjYW5zIHdpdGggTVZDQy1jb21w bGlhbnQgc25hcHNob3RzLgorICAgV2hldGhlciBhIGJhdGNoJ3MgVElEIHJlY3ljbGluZyBpbnRl cmxvY2sgKHR5cGljYWxseSBhbiBpbmRleCBwYWdlIGJ1ZmZlcgorICAgcGluKSBpcyBkcm9wcGVk IGltbWVkaWF0ZWx5IG9yIGRlZmVycmVkIGlzIGNvbnRyb2xsZWQgYnkgYSBnZW5lcmljLAorICAg c2Nhbi1sZXZlbCBwb2xpY3kgdGhhdCBpcyBkZXRlcm1pbmVkIHdoZW4gdGhlIHNjYW4gaXMgb3Bl bmVkICZtZGFzaDsgaXQgaXMKKyAgIG5vdCB1bmRlciB0aGUgY29udHJvbCBvZiBlaXRoZXIgdGhl IGluZGV4IEFNIG9yIHRoZSB0YWJsZSBBTS4gIFRoZSBzY2FuJ3MKKyAgIDxzdHJ1Y3RmaWVsZD5i YXRjaEltbWVkaWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxkPiBmbGFnIGVuY29kZXMgdGhpcyBwb2xp Y3kuCisgICBJdCBpcyBzZXQgYmFzZWQgb24gdHdvIGNyaXRlcmlhIHRoYXQgYXJlIGtub3duIHRv IHRoZSBjb3JlIHNjYW4gbWFjaGluZXJ5OgorICAgd2hldGhlciB0aGUgc2NhbiB1c2VzIGFuIE1W Q0MtY29tcGxpYW50IHNuYXBzaG90LCBhbmQgd2hldGhlciBpdCBpcyBhbgorICAgaW5kZXgtb25s eSBzY2FuLiAgU3BlY2lmaWNhbGx5LAorICAgPHN0cnVjdGZpZWxkPmJhdGNoSW1tZWRpYXRlVW5n dWFyZDwvc3RydWN0ZmllbGQ+IGlzIHRydWUgd2hlbiB0aGUgc2NhbiB1c2VzCisgICBhbiBNVkND IHNuYXBzaG90IGFuZCBpcyA8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4gYW4gaW5kZXgtb25seSBz Y2FuLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBXaGVuIDxzdHJ1Y3RmaWVsZD5iYXRjaElt bWVkaWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxkPiBpcyB0cnVlLCB0aGUKKyAgIGludGVybG9jayBp cyBkcm9wcGVkIGluc2lkZQorICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF91bmxvY2tfYmF0Y2g8 L2Z1bmN0aW9uPiAoYmVmb3JlIHRoZSBiYXRjaCBpcyBldmVuCisgICByZXR1cm5lZCB0byB0aGUg dGFibGUgQU0pLCBiZWNhdXNlIGEgcGxhaW4gaW5kZXggc2NhbiB3aXRoIGFuIE1WQ0MKKyAgIHNu YXBzaG90IHdpbGwgYWx3YXlzIHZpc2l0IHRoZSBoZWFwIHBhZ2UsIHdoZXJlIHRoZSBNVkNDIHZp c2liaWxpdHkgY2hlY2sKKyAgIGlzIGF1dGhvcml0YXRpdmUgJm1kYXNoOyBldmVuIGlmIDxjb21t YW5kPlZBQ1VVTTwvY29tbWFuZD4gcmVjeWNsZXMgYSBUSUQsCisgICB0aGUgbmV3IG9jY3VwYW50 IGNhbm5vdCBwYXNzIHRoZSBzbmFwc2hvdCB0ZXN0LgorICA8L3BhcmE+CisKKyAgPHBhcmE+Cisg ICBXaGVuIDxzdHJ1Y3RmaWVsZD5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxkPiBp cyBmYWxzZSwgdGhlCisgICBpbnRlcmxvY2sgaXMgcmV0YWluZWQgdW50aWwgdGhlIHRhYmxlIEFN IGV4cGxpY2l0bHkgcmVsZWFzZXMgaXQgYnkgY2FsbGluZworICAgPGZ1bmN0aW9uPnRhYmxlYW1f dXRpbF91bmd1YXJkX2JhdGNoPC9mdW5jdGlvbj4gKHdoaWNoIGludm9rZXMgdGhlIGluZGV4Cisg ICBBTSdzIDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVuY3Rpb24+IGNhbGxiYWNrKSwgYmVj YXVzZSB0aGUgc2NhbiBjYW5ub3QKKyAgIHJlbHkgb24gdGhhdCBoZWFwIHBhZ2UgTVZDQyBiYWNr c3RvcC4gIEZvciBub24tTVZDQyBzY2FucywgdGhlcmUgaXMgbm8gTVZDQworICAgc25hcHNob3Qg dG8gcmVqZWN0IGEgcmVjeWNsZWQgVElEJ3MgbmV3IG9jY3VwYW50IGF0IGFsbC4gIEZvciBpbmRl eC1vbmx5CisgICBzY2FucywgZXZlbiB3aXRoIGFuIE1WQ0Mgc25hcHNob3QsIHRoZSBzY2FuIHR5 cGljYWxseSBhdm9pZHMgdmlzaXRpbmcgdGhlCisgICBoZWFwIHBhZ2UgYWx0b2dldGhlciAodXNp bmcgdGhlIHZpc2liaWxpdHkgbWFwIGluc3RlYWQpLCBzbyB0aGUgTVZDQyBjaGVjaworICAgdGhh dCB3b3VsZCBjYXRjaCBhIHJlY3ljbGVkIFRJRCB1c3VhbGx5IG5ldmVyIHJ1bnMuICBJbiBib3Ro IGNhc2VzIHRoZQorICAgaW50ZXJsb2NrIG9uIHRoZSBpbmRleCBwYWdlIGlzIHdoYXQgcHJldmVu dHMgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBmcm9tCisgICByZWN5Y2xpbmcgVElEcyB3aGls ZSB0aGUgc2NhbiBpcyBzdGlsbCBpbiBmbGlnaHQuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAg IEluIHRoZSBkZWZlcnJlZCAoZmFsc2UpIGNhc2UsIHRoZSB0YWJsZSBBTSBkZWNpZGVzCisgICA8 ZW1waGFzaXM+d2hlbjwvZW1waGFzaXM+IHRvIGNhbGwKKyAgIDxmdW5jdGlvbj50YWJsZWFtX3V0 aWxfdW5ndWFyZF9iYXRjaDwvZnVuY3Rpb24+LCB3aGlsZSB0aGUgaW5kZXggQU0ncworICAgPGZ1 bmN0aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj4gY2FsbGJhY2sgZGVjaWRlcworICAgPGVt cGhhc2lzPndoYXQ8L2VtcGhhc2lzPiB0byByZWxlYXNlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+ CisgICBGb3IgdGhlIHNhbWUgcmVhc29uLCBhbiA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0 aW9uPiBpbmRleCBzY2FuICZtZGFzaDsKKyAgIHdoaWNoIGlzIGluaGVyZW50bHkgYXN5bmNocm9u b3VzLCBjb2xsZWN0aW5nIGFsbCBtYXRjaGluZyBUSURzIGludG8gYSBiaXRtYXAKKyAgIGJlZm9y ZSBhbnkgaGVhcCBhY2Nlc3MgYmVnaW5zICZtZGFzaDsgcmVxdWlyZXMgYW4gTVZDQy1jb21wbGlh bnQgc25hcHNob3QsCisgICBhbmQgaGFzIG5vIG5lZWQgZm9yIHRoZSBhY2Nlc3MgbWV0aG9kIHRv IGhvbGQgaW5kZXggcGFnZSBwaW5zLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CmRpZmYgLS1naXQg YS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9j cmVhdGVfdGFibGUuc2dtbAppbmRleCBlMzQyNTg1YzcuLmI2NTAzOGE1NSAxMDA2NDQKLS0tIGEv ZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVm L2NyZWF0ZV90YWJsZS5zZ21sCkBAIC0xMTczLDEyICsxMTczLDEzIEBAIFdJVEggKCBNT0RVTFVT IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1lcmljX2xpdGVyYWw8L3JlcGxhY2Vh YmxlPiwgUkVNCiAgICAgIDwvcGFyYT4KIAogICAgICA8cGFyYT4KLSAgICAgIFRoZSBhY2Nlc3Mg bWV0aG9kIG11c3Qgc3VwcG9ydCA8bGl0ZXJhbD5hbWdldHR1cGxlPC9saXRlcmFsPiAoc2VlIDx4 cmVmCi0gICAgICBsaW5rZW5kPSJpbmRleGFtIi8+KTsgYXQgcHJlc2VudCB0aGlzIG1lYW5zIDxh Y3JvbnltPkdJTjwvYWNyb255bT4KLSAgICAgIGNhbm5vdCBiZSB1c2VkLiAgQWx0aG91Z2ggaXQn cyBhbGxvd2VkLCB0aGVyZSBpcyBsaXR0bGUgcG9pbnQgaW4gdXNpbmcKLSAgICAgIEItdHJlZSBv ciBoYXNoIGluZGV4ZXMgd2l0aCBhbiBleGNsdXNpb24gY29uc3RyYWludCwgYmVjYXVzZSB0aGlz Ci0gICAgICBkb2VzIG5vdGhpbmcgdGhhdCBhbiBvcmRpbmFyeSB1bmlxdWUgY29uc3RyYWludCBk b2Vzbid0IGRvIGJldHRlci4KLSAgICAgIFNvIGluIHByYWN0aWNlIHRoZSBhY2Nlc3MgbWV0aG9k IHdpbGwgYWx3YXlzIGJlIDxhY3JvbnltPkdpU1Q8L2Fjcm9ueW0+IG9yCisgICAgICBUaGUgYWNj ZXNzIG1ldGhvZCBtdXN0IHN1cHBvcnQgZWl0aGVyIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4KKyAgICAgIG9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gKHNlZSA8eHJl ZiBsaW5rZW5kPSJpbmRleGFtIi8+KTsgYXQKKyAgICAgIHByZXNlbnQgdGhpcyBtZWFucyA8YWNy b255bT5HSU48L2Fjcm9ueW0+IGNhbm5vdCBiZSB1c2VkLiAgQWx0aG91Z2gKKyAgICAgIGl0J3Mg YWxsb3dlZCwgdGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIHVzaW5nIEItdHJlZSBvciBoYXNoIGlu ZGV4ZXMKKyAgICAgIHdpdGggYW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQsIGJlY2F1c2UgdGhpcyBk b2VzIG5vdGhpbmcgdGhhdCBhbgorICAgICAgb3JkaW5hcnkgdW5pcXVlIGNvbnN0cmFpbnQgZG9l c24ndCBkbyBiZXR0ZXIuICBTbyBpbiBwcmFjdGljZSB0aGUKKyAgICAgIGFjY2VzcyBtZXRob2Qg d2lsbCBhbHdheXMgYmUgPGFjcm9ueW0+R2lTVDwvYWNyb255bT4gb3IKICAgICAgIDxhY3Jvbnlt PlNQLUdpU1Q8L2Fjcm9ueW0+LgogICAgICA8L3BhcmE+CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYyBiL3NyYy90ZXN0L21vZHVs ZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwppbmRleCAzMWY4ZDJiODEuLjNmNWJl NjA4MiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9p bmRleF9hbS5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5k ZXhfYW0uYwpAQCAtMzAzLDYgKzMwMyw3IEBAIGRpaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQog CQkuYW1jb25zaXN0ZW50ZXF1YWxpdHkgPSBmYWxzZSwKIAkJLmFtY29uc2lzdGVudG9yZGVyaW5n ID0gZmFsc2UsCiAJCS5hbWNhbmJhY2t3YXJkID0gZmFsc2UsCisJCS5hbWNhbm1hcmtwb3MgPSBm YWxzZSwKIAkJLmFtY2FudW5pcXVlID0gZmFsc2UsCiAJCS5hbWNhbm11bHRpY29sID0gZmFsc2Us CiAJCS5hbW9wdGlvbmFsa2V5ID0gZmFsc2UsCkBAIC0zMzQsMTAgKzMzNSwxMiBAQCBkaWhhbmRs ZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gZGliZWdpbnNjYW4sCiAJCS5h bXJlc2NhbiA9IGRpcmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNo ID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2gg PSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBOVUxMLAogCQkuYW1lbmRzY2FuID0gZGllbmRzY2Fu LAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3Ny ZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5p dHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2pvaW4ub3V0CmluZGV4IGVkOTQ2YWJlZC4uODk3MDdlOTRjIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKQEAgLTk5MDEsMjkgKzk5MDEsNiBAQCB3aGVyZSBqMS5p ZDEgJSAxMDAwID0gMSBhbmQgajIuaWQxICUgMTAwMCA9IDE7CiAgICAxIHwgICAyIHwgICAxIHwg ICAyCiAoMiByb3dzKQogCi0tLSBFeGVyY2lzZSBhcnJheSBrZXlzIG1hcmsvcmVzdG9yZSBCLVRy ZWUgY29kZQotZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGoxCi1pbm5lciBqb2lu IGoyIG9uIGoxLmlkMSA9IGoyLmlkMSBhbmQgajEuaWQyID0gajIuaWQyCi13aGVyZSBqMS5pZDEg JSAxMDAwID0gMSBhbmQgajIuaWQxICUgMTAwMCA9IDEgYW5kIGoyLmlkMSA9IGFueSAoYXJyYXlb MV0pOwotICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot IE1lcmdlIEpvaW4KLSAgIE1lcmdlIENvbmQ6IChqMS5pZDEgPSBqMi5pZDEpCi0gICBKb2luIEZp bHRlcjogKGoyLmlkMiA9IGoxLmlkMikKLSAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGoxX2lkMV9p ZHggb24gajEKLSAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGoyX2lkMV9pZHggb24gajIKLSAgICAg ICAgIEluZGV4IENvbmQ6IChpZDEgPSBBTlkgKCd7MX0nOjppbnRlZ2VyW10pKQotKDYgcm93cykK LQotc2VsZWN0ICogZnJvbSBqMQotaW5uZXIgam9pbiBqMiBvbiBqMS5pZDEgPSBqMi5pZDEgYW5k IGoxLmlkMiA9IGoyLmlkMgotd2hlcmUgajEuaWQxICUgMTAwMCA9IDEgYW5kIGoyLmlkMSAlIDEw MDAgPSAxIGFuZCBqMi5pZDEgPSBhbnkgKGFycmF5WzFdKTsKLSBpZDEgfCBpZDIgfCBpZDEgfCBp ZDIgCi0tLS0tLSstLS0tLSstLS0tLSstLS0tLQotICAgMSB8ICAgMSB8ICAgMSB8ICAgMQotICAg MSB8ICAgMiB8ICAgMSB8ICAgMgotKDIgcm93cykKLQogLS0gRXhlcmNpc2UgYXJyYXkga2V5cyAi ZmluZCBleHRyZW1lIGVsZW1lbnQiIEItVHJlZSBjb2RlCiBleHBsYWluIChjb3N0cyBvZmYpIHNl bGVjdCAqIGZyb20gajEKIGlubmVyIGpvaW4gajIgb24gajEuaWQxID0gajIuaWQxIGFuZCBqMS5p ZDIgPSBqMi5pZDIKQEAgLTk5NTMsNiArOTkzMCw0NiBAQCByZXNldCBlbmFibGVfc29ydDsKIGRy b3AgdGFibGUgajE7CiBkcm9wIHRhYmxlIGoyOwogZHJvcCB0YWJsZSBqMzsKKy0tIEV4ZXJjaXNl IGJ0cG9zcmVzZXQgd2hlbiBhIG1lcmdlIGpvaW4ncyBtYXJrL3Jlc3RvcmUgY3Jvc3NlcyBhIGxl YWYtcGFnZS9iYXRjaAorLS0gYm91bmRhcnkgd2l0aCBTQU9QIGFycmF5IGtleXMgc2V0CitjcmVh dGUgdGFibGUgYnRwb3NyZXNldF9vdXRlciAoaCBpbnQpOworaW5zZXJ0IGludG8gYnRwb3NyZXNl dF9vdXRlciB2YWx1ZXMgKDApLCAoMCksICg5OSk7CitjcmVhdGUgaW5kZXggb24gYnRwb3NyZXNl dF9vdXRlciAoaCk7CithbmFseXplIGJ0cG9zcmVzZXRfb3V0ZXI7CitzZXQgZW5hYmxlX2hhc2hq b2luIHRvIDA7CitzZXQgZW5hYmxlX25lc3Rsb29wIHRvIDA7CitzZXQgZW5hYmxlX21hdGVyaWFs IHRvIDA7CitzZXQgZW5hYmxlX3NvcnQgdG8gMDsKKy0tIHRlbmsxX2h1bmRyZWQgaXMgYSBsb3ct Y2FyZGluYWxpdHkgZGVkdXBsaWNhdGVkIGluZGV4LCBzbyBodW5kcmVkID0gMCBhbmQKKy0tIGh1 bmRyZWQgPSA5OSBsYW5kIG9uIGRpZmZlcmVudCBsZWFmIHBhZ2VzLiAgV2l0aCB0ZW5rMSBhcyB0 aGUgaW5uZXIgaW5wdXQsCistLSB0aGUgc2NhbiBtYXJrcyBpbiB0aGUgaHVuZHJlZCA9IDAgZ3Jv dXAgYW5kIGFkdmFuY2VzIGl0cyBhcnJheSBrZXkgdG8gOTkKKy0tIGJlZm9yZSB0aGUgcmVzdG9y ZTsgYnRwb3NyZXNldCBtdXN0IHJlc2V0IHRoYXQgYXJyYXkta2V5IHN0YXRlLCBvciB0aGUKKy0t IHNlY29uZCBvdXRlciAiMCIgcm93IGxvc2VzIGFsbCBvZiBpdHMgbWF0Y2hlcy4gIChUaGUgcmVz ZXQgaXNuJ3QgcmVxdWlyZWQKKy0tIGluIHRoZSBjb21tb24gY2FzZSB3aGVyZSB3ZSByZXN0b3Jl IGEgbWFyayB3aXRoaW4gdGhlIHNhbWUgYmF0Y2guKQorZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxl Y3QgY291bnQoKikgZnJvbSBidHBvc3Jlc2V0X291dGVyIG8KK2lubmVyIGpvaW4gdGVuazEgaSBv biBvLmggPSBpLmh1bmRyZWQgd2hlcmUgaS5odW5kcmVkID0gYW55IChhcnJheVswLDk5XSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdh dGUKKyAgIC0+ICBNZXJnZSBKb2luCisgICAgICAgICBNZXJnZSBDb25kOiAoby5oID0gaS5odW5k cmVkKQorICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBidHBvc3Jlc2V0X291dGVy X2hfaWR4IG9uIGJ0cG9zcmVzZXRfb3V0ZXIgbworICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2Nh biB1c2luZyB0ZW5rMV9odW5kcmVkIG9uIHRlbmsxIGkKKyAgICAgICAgICAgICAgIEluZGV4IENv bmQ6IChodW5kcmVkID0gQU5ZICgnezAsOTl9Jzo6aW50ZWdlcltdKSkKKyg2IHJvd3MpCisKK3Nl bGVjdCBjb3VudCgqKSBmcm9tIGJ0cG9zcmVzZXRfb3V0ZXIgbworaW5uZXIgam9pbiB0ZW5rMSBp IG9uIG8uaCA9IGkuaHVuZHJlZCB3aGVyZSBpLmh1bmRyZWQgPSBhbnkgKGFycmF5WzAsOTldKTsK KyBjb3VudCAKKy0tLS0tLS0KKyAgIDMwMAorKDEgcm93KQorCityZXNldCBlbmFibGVfaGFzaGpv aW47CityZXNldCBlbmFibGVfbmVzdGxvb3A7CityZXNldCBlbmFibGVfbWF0ZXJpYWw7CityZXNl dCBlbmFibGVfc29ydDsKK2Ryb3AgdGFibGUgYnRwb3NyZXNldF9vdXRlcjsKIC0tIGNoZWNrIHRo YXQgc2VtaWpvaW4gaW5uZXIgaXMgbm90IHNlZW4gYXMgdW5pcXVlIGZvciBhIHBvcnRpb24gb2Yg dGhlIG91dGVycmVsCiBleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCiBzZWxlY3QgdDEudW5p cXVlMSwgdDIuaHVuZHJlZApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w b3J0YWxzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcG9ydGFscy5vdXQKaW5kZXgg YTY2ZjI3ZTM2Li44YmNmNDY5ZTQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcG9ydGFscy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wb3J0YWxzLm91 dApAQCAtNzAwLDYgKzcwMCw2MyBAQCBTRUxFQ1QgbmFtZSwgc3RhdGVtZW50LCBpc19ob2xkYWJs ZSwgaXNfYmluYXJ5LCBpc19zY3JvbGxhYmxlIEZST00gcGdfY3Vyc29yczsKIC0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLQogKDAgcm93 cykKIAorLS0KKy0tIEN1cnNvciBvdmVyIGEgYnRyZWUgYXJyYXkta2V5IChTY2FsYXJBcnJheU9w KSBpbmRleCBzY2FuIHRoYXQgcmV2ZXJzZXMKKy0tIGRpcmVjdGlvbiBleGFjdGx5IGF0IGEgbGVh Zi1wYWdlIGJvdW5kYXJ5IG9uIHRoZSBmaXJzdCBwYWdlIHJlYWQKKy0tCitDUkVBVEUgVEVNUCBU QUJMRSBhcnJheV9jdXJzb3JfdGVzdCAoYSBpbnQ0LCBiIGludDQsIGMgaW50NCwgZCBpbnQ0KTsK K0NSRUFURSBJTkRFWCBPTiBhcnJheV9jdXJzb3JfdGVzdCAoYSwgYiwgYywgZCkgV0lUSCAoZmls bGZhY3RvciA9IDMwKTsKK0lOU0VSVCBJTlRPIGFycmF5X2N1cnNvcl90ZXN0CisgIFNFTEVDVCBh LCBiLCBjLCBkCisgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDIpIGEsIGdlbmVyYXRlX3Nlcmll cygxLCAyKSBiLAorICAgICAgIGdlbmVyYXRlX3NlcmllcygxLCAxMCkgYywgZ2VuZXJhdGVfc2Vy aWVzKDEsIDEwKSBkCisgIE9SREVSIEJZIGEsIGIsIGMsIGQ7CitBTkFMWVpFIGFycmF5X2N1cnNv cl90ZXN0OworLS0gVGhlIGluZGV4IGtlZXBzIChhPTEsIGI9MSwgKikgb24gYSBzaW5nbGUgbGVh ZiBwYWdlLiAgQmFja2luZyB1cCBhdCB0aGlzCistLSBsZWFmIHBhZ2UgYm91bmRhcnkgcmVsaWVz IG9uIGEgc2xvdy1wYXRoIGNhbGwgdG8gYnRwb3NyZXNldCB0byBhdm9pZAorLS0gc3B1cmlvdXNs eSByZXR1cm5pbmcgZXh0cmEgcm93cy4KK0JFR0lOOworU0VUIExPQ0FMIGVuYWJsZV9zZXFzY2Fu ID0gb2ZmOworU0VUIExPQ0FMIGVuYWJsZV9iaXRtYXBzY2FuID0gb2ZmOworU0VUIExPQ0FMIGVu YWJsZV9pbmRleG9ubHlzY2FuID0gb2ZmOworREVDTEFSRSBhcnJheV9jdXJzb3IgQ1VSU09SIEZP UgorICBTRUxFQ1QgKiBGUk9NIGFycmF5X2N1cnNvcl90ZXN0CisgIFdIRVJFIGEgSU4gKDEsIDIp IEFORCBiID0gMSBBTkQgYyA9IDkKKyAgT1JERVIgQlkgYSwgYiwgYywgZDsKKy0tIHJlYWQgdGhl IDEwIG1hdGNoaW5nIHJvd3Mgb24gdGhlIGZpcnN0IGxlYWYgcGFnZSwgbGVhdmluZyB0aGUgc2Nh biBhdCB0aGUKKy0tIHBhZ2UgYm91bmRhcnkKK0ZFVENIIEZPUldBUkQgMTAgRlJPTSBhcnJheV9j dXJzb3I7CisgYSB8IGIgfCBjIHwgZCAgCistLS0rLS0tKy0tLSstLS0tCisgMSB8IDEgfCA5IHwg IDEKKyAxIHwgMSB8IDkgfCAgMgorIDEgfCAxIHwgOSB8ICAzCisgMSB8IDEgfCA5IHwgIDQKKyAx IHwgMSB8IDkgfCAgNQorIDEgfCAxIHwgOSB8ICA2CisgMSB8IDEgfCA5IHwgIDcKKyAxIHwgMSB8 IDkgfCAgOAorIDEgfCAxIHwgOSB8ICA5CisgMSB8IDEgfCA5IHwgMTAKKygxMCByb3dzKQorCist LSByZXZlcnNlIGRpcmVjdGlvbiBhdCB0aGUgYm91bmRhcnk7IHNob3VsZCByZXR1cm4gdGhlIHBy aW9yIDkgcm93cyBvbmx5CitGRVRDSCBCQUNLV0FSRCAxMCBGUk9NIGFycmF5X2N1cnNvcjsKKyBh IHwgYiB8IGMgfCBkIAorLS0tKy0tLSstLS0rLS0tCisgMSB8IDEgfCA5IHwgOQorIDEgfCAxIHwg OSB8IDgKKyAxIHwgMSB8IDkgfCA3CisgMSB8IDEgfCA5IHwgNgorIDEgfCAxIHwgOSB8IDUKKyAx IHwgMSB8IDkgfCA0CisgMSB8IDEgfCA5IHwgMworIDEgfCAxIHwgOSB8IDIKKyAxIHwgMSB8IDkg fCAxCisoOSByb3dzKQorCitFTkQ7CitEUk9QIFRBQkxFIGFycmF5X2N1cnNvcl90ZXN0OwogLS0K IC0tIE5PIFNDUk9MTCBkaXNhbGxvd3MgYmFja3dhcmQgZmV0Y2hpbmcKIC0tCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pv aW4uc3FsCmluZGV4IDc4ZjdiNGY1NC4uZTQ3ZTAxMmNmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9qb2luLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbApA QCAtMzc3NiwxNSArMzc3Niw2IEBAIHNlbGVjdCAqIGZyb20gajEKIGlubmVyIGpvaW4gajIgb24g ajEuaWQxID0gajIuaWQxIGFuZCBqMS5pZDIgPSBqMi5pZDIKIHdoZXJlIGoxLmlkMSAlIDEwMDAg PSAxIGFuZCBqMi5pZDEgJSAxMDAwID0gMTsKIAotLS0gRXhlcmNpc2UgYXJyYXkga2V5cyBtYXJr L3Jlc3RvcmUgQi1UcmVlIGNvZGUKLWV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBq MQotaW5uZXIgam9pbiBqMiBvbiBqMS5pZDEgPSBqMi5pZDEgYW5kIGoxLmlkMiA9IGoyLmlkMgot d2hlcmUgajEuaWQxICUgMTAwMCA9IDEgYW5kIGoyLmlkMSAlIDEwMDAgPSAxIGFuZCBqMi5pZDEg PSBhbnkgKGFycmF5WzFdKTsKLQotc2VsZWN0ICogZnJvbSBqMQotaW5uZXIgam9pbiBqMiBvbiBq MS5pZDEgPSBqMi5pZDEgYW5kIGoxLmlkMiA9IGoyLmlkMgotd2hlcmUgajEuaWQxICUgMTAwMCA9 IDEgYW5kIGoyLmlkMSAlIDEwMDAgPSAxIGFuZCBqMi5pZDEgPSBhbnkgKGFycmF5WzFdKTsKLQog LS0gRXhlcmNpc2UgYXJyYXkga2V5cyAiZmluZCBleHRyZW1lIGVsZW1lbnQiIEItVHJlZSBjb2Rl CiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gajEKIGlubmVyIGpvaW4gajIgb24g ajEuaWQxID0gajIuaWQxIGFuZCBqMS5pZDIgPSBqMi5pZDIKQEAgLTM4MDIsNiArMzc5MywzNSBA QCBkcm9wIHRhYmxlIGoxOwogZHJvcCB0YWJsZSBqMjsKIGRyb3AgdGFibGUgajM7CiAKKy0tIEV4 ZXJjaXNlIGJ0cG9zcmVzZXQgd2hlbiBhIG1lcmdlIGpvaW4ncyBtYXJrL3Jlc3RvcmUgY3Jvc3Nl cyBhIGxlYWYtcGFnZS9iYXRjaAorLS0gYm91bmRhcnkgd2l0aCBTQU9QIGFycmF5IGtleXMgc2V0 CitjcmVhdGUgdGFibGUgYnRwb3NyZXNldF9vdXRlciAoaCBpbnQpOworaW5zZXJ0IGludG8gYnRw b3NyZXNldF9vdXRlciB2YWx1ZXMgKDApLCAoMCksICg5OSk7CitjcmVhdGUgaW5kZXggb24gYnRw b3NyZXNldF9vdXRlciAoaCk7CithbmFseXplIGJ0cG9zcmVzZXRfb3V0ZXI7CitzZXQgZW5hYmxl X2hhc2hqb2luIHRvIDA7CitzZXQgZW5hYmxlX25lc3Rsb29wIHRvIDA7CitzZXQgZW5hYmxlX21h dGVyaWFsIHRvIDA7CitzZXQgZW5hYmxlX3NvcnQgdG8gMDsKKworLS0gdGVuazFfaHVuZHJlZCBp cyBhIGxvdy1jYXJkaW5hbGl0eSBkZWR1cGxpY2F0ZWQgaW5kZXgsIHNvIGh1bmRyZWQgPSAwIGFu ZAorLS0gaHVuZHJlZCA9IDk5IGxhbmQgb24gZGlmZmVyZW50IGxlYWYgcGFnZXMuICBXaXRoIHRl bmsxIGFzIHRoZSBpbm5lciBpbnB1dCwKKy0tIHRoZSBzY2FuIG1hcmtzIGluIHRoZSBodW5kcmVk ID0gMCBncm91cCBhbmQgYWR2YW5jZXMgaXRzIGFycmF5IGtleSB0byA5OQorLS0gYmVmb3JlIHRo ZSByZXN0b3JlOyBidHBvc3Jlc2V0IG11c3QgcmVzZXQgdGhhdCBhcnJheS1rZXkgc3RhdGUsIG9y IHRoZQorLS0gc2Vjb25kIG91dGVyICIwIiByb3cgbG9zZXMgYWxsIG9mIGl0cyBtYXRjaGVzLiAg KFRoZSByZXNldCBpc24ndCByZXF1aXJlZAorLS0gaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHdl IHJlc3RvcmUgYSBtYXJrIHdpdGhpbiB0aGUgc2FtZSBiYXRjaC4pCitleHBsYWluIChjb3N0cyBv ZmYpIHNlbGVjdCBjb3VudCgqKSBmcm9tIGJ0cG9zcmVzZXRfb3V0ZXIgbworaW5uZXIgam9pbiB0 ZW5rMSBpIG9uIG8uaCA9IGkuaHVuZHJlZCB3aGVyZSBpLmh1bmRyZWQgPSBhbnkgKGFycmF5WzAs OTldKTsKKworc2VsZWN0IGNvdW50KCopIGZyb20gYnRwb3NyZXNldF9vdXRlciBvCitpbm5lciBq b2luIHRlbmsxIGkgb24gby5oID0gaS5odW5kcmVkIHdoZXJlIGkuaHVuZHJlZCA9IGFueSAoYXJy YXlbMCw5OV0pOworCityZXNldCBlbmFibGVfaGFzaGpvaW47CityZXNldCBlbmFibGVfbmVzdGxv b3A7CityZXNldCBlbmFibGVfbWF0ZXJpYWw7CityZXNldCBlbmFibGVfc29ydDsKK2Ryb3AgdGFi bGUgYnRwb3NyZXNldF9vdXRlcjsKKwogLS0gY2hlY2sgdGhhdCBzZW1pam9pbiBpbm5lciBpcyBu b3Qgc2VlbiBhcyB1bmlxdWUgZm9yIGEgcG9ydGlvbiBvZiB0aGUgb3V0ZXJyZWwKIGV4cGxhaW4g KHZlcmJvc2UsIGNvc3RzIG9mZikKIHNlbGVjdCB0MS51bmlxdWUxLCB0Mi5odW5kcmVkCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wb3J0YWxzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3BvcnRhbHMuc3FsCmluZGV4IDE5NmI4NjJjNy4uYmE0MjQ1MWJiIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wb3J0YWxzLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9wb3J0YWxzLnNxbApAQCAtMTc2LDYgKzE3Niw0MCBAQCBFTkQ7CiAKIFNFTEVDVCBuYW1l LCBzdGF0ZW1lbnQsIGlzX2hvbGRhYmxlLCBpc19iaW5hcnksIGlzX3Njcm9sbGFibGUgRlJPTSBw Z19jdXJzb3JzOwogCistLQorLS0gQ3Vyc29yIG92ZXIgYSBidHJlZSBhcnJheS1rZXkgKFNjYWxh ckFycmF5T3ApIGluZGV4IHNjYW4gdGhhdCByZXZlcnNlcworLS0gZGlyZWN0aW9uIGV4YWN0bHkg YXQgYSBsZWFmLXBhZ2UgYm91bmRhcnkgb24gdGhlIGZpcnN0IHBhZ2UgcmVhZAorLS0KKworQ1JF QVRFIFRFTVAgVEFCTEUgYXJyYXlfY3Vyc29yX3Rlc3QgKGEgaW50NCwgYiBpbnQ0LCBjIGludDQs IGQgaW50NCk7CitDUkVBVEUgSU5ERVggT04gYXJyYXlfY3Vyc29yX3Rlc3QgKGEsIGIsIGMsIGQp IFdJVEggKGZpbGxmYWN0b3IgPSAzMCk7CitJTlNFUlQgSU5UTyBhcnJheV9jdXJzb3JfdGVzdAor ICBTRUxFQ1QgYSwgYiwgYywgZAorICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAyKSBhLCBnZW5l cmF0ZV9zZXJpZXMoMSwgMikgYiwKKyAgICAgICBnZW5lcmF0ZV9zZXJpZXMoMSwgMTApIGMsIGdl bmVyYXRlX3NlcmllcygxLCAxMCkgZAorICBPUkRFUiBCWSBhLCBiLCBjLCBkOworQU5BTFlaRSBh cnJheV9jdXJzb3JfdGVzdDsKKworLS0gVGhlIGluZGV4IGtlZXBzIChhPTEsIGI9MSwgKikgb24g YSBzaW5nbGUgbGVhZiBwYWdlLiAgQmFja2luZyB1cCBhdCB0aGlzCistLSBsZWFmIHBhZ2UgYm91 bmRhcnkgcmVsaWVzIG9uIGEgc2xvdy1wYXRoIGNhbGwgdG8gYnRwb3NyZXNldCB0byBhdm9pZAor LS0gc3B1cmlvdXNseSByZXR1cm5pbmcgZXh0cmEgcm93cy4KK0JFR0lOOworU0VUIExPQ0FMIGVu YWJsZV9zZXFzY2FuID0gb2ZmOworU0VUIExPQ0FMIGVuYWJsZV9iaXRtYXBzY2FuID0gb2ZmOwor U0VUIExPQ0FMIGVuYWJsZV9pbmRleG9ubHlzY2FuID0gb2ZmOworREVDTEFSRSBhcnJheV9jdXJz b3IgQ1VSU09SIEZPUgorICBTRUxFQ1QgKiBGUk9NIGFycmF5X2N1cnNvcl90ZXN0CisgIFdIRVJF IGEgSU4gKDEsIDIpIEFORCBiID0gMSBBTkQgYyA9IDkKKyAgT1JERVIgQlkgYSwgYiwgYywgZDsK Ky0tIHJlYWQgdGhlIDEwIG1hdGNoaW5nIHJvd3Mgb24gdGhlIGZpcnN0IGxlYWYgcGFnZSwgbGVh dmluZyB0aGUgc2NhbiBhdCB0aGUKKy0tIHBhZ2UgYm91bmRhcnkKK0ZFVENIIEZPUldBUkQgMTAg RlJPTSBhcnJheV9jdXJzb3I7CistLSByZXZlcnNlIGRpcmVjdGlvbiBhdCB0aGUgYm91bmRhcnk7 IHNob3VsZCByZXR1cm4gdGhlIHByaW9yIDkgcm93cyBvbmx5CitGRVRDSCBCQUNLV0FSRCAxMCBG Uk9NIGFycmF5X2N1cnNvcjsKK0VORDsKKworRFJPUCBUQUJMRSBhcnJheV9jdXJzb3JfdGVzdDsK KwogLS0KIC0tIE5PIFNDUk9MTCBkaXNhbGxvd3MgYmFja3dhcmQgZmV0Y2hpbmcKIC0tCmRpZmYg LS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDY4MDE4OTRkNy4uODQ2NTliMTdhIDEwMDY0NAotLS0g YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdApAQCAtMjA5LDYgKzIwOSw3IEBAIEJPT0wKIEJPT0xFQU4KIEJPWAog QlRBcnJheUtleUluZm8KK0JUQmF0Y2hEYXRhCiBCVEJ1aWxkU3RhdGUKIEJUQ2FsbGJhY2tTdGF0 ZQogQlRDeWNsZUlkCkBAIC0yMzYsOCArMjM3LDYgQEAgQlRTY2FuSW5zZXJ0RGF0YQogQlRTY2Fu S2V5UHJlcHJvYwogQlRTY2FuT3BhcXVlCiBCVFNjYW5PcGFxdWVEYXRhCi1CVFNjYW5Qb3NEYXRh Ci1CVFNjYW5Qb3NJdGVtCiBCVFNoYXJlZAogQlRTb3J0QXJyYXlDb250ZXh0CiBCVFNwb29sCkBA IC0yNjYsNiArMjY1LDkgQEAgQmFzZUJhY2t1cENtZAogQmFzZUJhY2t1cFRhcmdldEhhbmRsZQog QmFzZUJhY2t1cFRhcmdldFR5cGUKIEJhdGNoTVZDQ1N0YXRlCitCYXRjaE1hdGNoaW5nSXRlbQor QmF0Y2hSaW5nQnVmZmVyCitCYXRjaFJpbmdJdGVtUG9zCiBCZWdpbkRpcmVjdE1vZGlmeV9mdW5j dGlvbgogQmVnaW5Gb3JlaWduSW5zZXJ0X2Z1bmN0aW9uCiBCZWdpbkZvcmVpZ25Nb2RpZnlfZnVu Y3Rpb24KQEAgLTEyNjEsNiArMTI2Myw3IEBAIEhiYUxpbmUKIEhlYWRsaW5lSnNvblN0YXRlCiBI ZWFkbGluZVBhcnNlZFRleHQKIEhlYWRsaW5lV29yZEVudHJ5CitIZWFwQmF0Y2hEYXRhCiBIZWFw Q2hlY2tDb250ZXh0CiBIZWFwQ2hlY2tSZWFkU3RyZWFtRGF0YQogSGVhcFBhZ2VGcmVlemUKQEAg LTEzNDEsNiArMTM0NCw4IEBAIEluZGV4T3JkZXJCeURpc3RhbmNlCiBJbmRleFBhdGgKIEluZGV4 UnVudGltZUtleUluZm8KIEluZGV4U2NhbgorSW5kZXhTY2FuQmF0Y2gKK0luZGV4U2NhbkJhdGNo RGF0YQogSW5kZXhTY2FuRGVzYwogSW5kZXhTY2FuRGVzY0RhdGEKIEluZGV4U2NhbkhlYXBEYXRh CkBAIC0zNTg1LDIwICszNTkwLDIyIEBAIGFtY2FucmV0dXJuX2Z1bmN0aW9uCiBhbWNvc3Rlc3Rp bWF0ZV9mdW5jdGlvbgogYW1lbmRzY2FuX2Z1bmN0aW9uCiBhbWVzdGltYXRlcGFyYWxsZWxzY2Fu X2Z1bmN0aW9uCithbWdldGJhdGNoX2Z1bmN0aW9uCiBhbWdldGJpdG1hcF9mdW5jdGlvbgogYW1n ZXR0cmVlaGVpZ2h0X2Z1bmN0aW9uCiBhbWdldHR1cGxlX2Z1bmN0aW9uCiBhbWluaXRwYXJhbGxl bHNjYW5fZnVuY3Rpb24KIGFtaW5zZXJ0X2Z1bmN0aW9uCiBhbWluc2VydGNsZWFudXBfZnVuY3Rp b24KLWFtbWFya3Bvc19mdW5jdGlvbgorYW1raWxsaXRlbXNiYXRjaF9mdW5jdGlvbgogYW1vcHRp b25zX2Z1bmN0aW9uCiBhbXBhcmFsbGVscmVzY2FuX2Z1bmN0aW9uCithbXBvc3Jlc2V0X2Z1bmN0 aW9uCiBhbXByb3BlcnR5X2Z1bmN0aW9uCiBhbXJlc2Nhbl9mdW5jdGlvbgotYW1yZXN0cnBvc19m dW5jdGlvbgogYW10cmFuc2xhdGVfY21wdHlwZV9mdW5jdGlvbgogYW10cmFuc2xhdGVfc3RyYXRl Z3lfZnVuY3Rpb24KK2FtdW5ndWFyZGJhdGNoX2Z1bmN0aW9uCiBhbXZhY3V1bWNsZWFudXBfZnVu Y3Rpb24KIGFtdmFsaWRhdGVfZnVuY3Rpb24KIGFycmF5X2l0ZXIKLS0gCjIuNTMuMAoK --0000000000004ffa5f0654ddc4ef--