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.98.2) (envelope-from ) id 1xMoWz-00000002DKc-0ivY for pgsql-hackers@arkaria.postgresql.org; Fri, 30 Oct 2026 15:28:39 +0000 Received: from localhost ([127.0.0.1]:52952 helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.98.2) (envelope-from ) id 1xMoWy-0000000AeaJ-2xet for pgsql-hackers@arkaria.postgresql.org; Fri, 30 Oct 2026 15:28:36 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]:49466) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1xMoWx-0000000Aea8-25fD for pgsql-hackers@lists.postgresql.org; Fri, 30 Oct 2026 15:28:36 +0000 Received: from mail-10627.protonmail.ch ([79.135.106.27]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1xMoWq-00000001iOH-1lvw for pgsql-hackers@lists.postgresql.org; Fri, 30 Oct 2026 15:28:34 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; s=protonmail; t=1793374103; x=1793633303; bh=ykvyJcAatJlIiQALnz5BW2/Y13q3SkrbzC5BtsiEkoU=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=JCZvxsM1Kd3IwNmr/ECrHM2TxhbIngB4+7Vp5tfNvfvVpWK1blxsCzFyrUE6sCPV2 TEHwfK9G3P+RA9Di72ABavjf4B1QiMfdUZ3TiDtK6pY6jww/6So12OsGXH1qQ4Mcxh d4c0jbxpcIPMXMpMzMoxUc9Ov8hOZW4H/YCrQ1X+9SJIhSJphlKWlSQPABcJ3bLuo5 hQuKu3b2iLMrv3lnbOWTU/+Z7zZOVLgy2vTyRxjTKBhlojVlXSB7AB93jHsGJ4jmQw 6amwSZ6w+U0w8qNs8Exdyz2l/8EX22qadbbDUJ76ho9Je05X6s/lMMwQDUmEiPro6K hcxWFcg3z3y1A== Date: Fri, 30 Oct 2026 15:28:19 +0000 To: fengyao0087@gmail.com From: Greg Burd Cc: pgsql-hackers@lists.postgresql.org, pg@bowt.ie Subject: Re: nbtree: opt-in leaf key prefix compression Message-ID: In-Reply-To: References: Feedback-ID: 2668248:user:proton X-Pm-Message-ID: 1afe1d014432480dd5048c874e400747e2865870 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1=_gbQ1O3OfExNP0d6lOwCSFTeR6wOdO1O9VO9eHjTY" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --b1=_gbQ1O3OfExNP0d6lOwCSFTeR6wOdO1O9VO9eHjTY Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On Fri, 30 Oct 2026 19:52:00 +0800, Yao Feng wrote: > Hi Greg, Hey Yao, Quick list-etiquette note, don't top post. Add your reply within the content of the message or after it. :) > Thanks for working on this, took a look at the v4 patch. Thanks for taking the time to read and review it! :) > I think this is very worthwhile work. Thanks, so do I. > FWIW, a recent SIGMOD paper on > B-tree compression (https://dl.acm.org/doi/10.1145/3654972) noted that > while front-coding saves a lot of space for strings, decompression CPU co= st > tends to be the main bottleneck for queries on modern hardware. Looking a= t > the v4 benchmarks, they mostly cover index size and write throughput -- d= id > you have a chance to measure read-side performance (e.g. index scans, poi= nt > lookups)? Thanks for the careful read, and for the SIGMOD pointer. That decompression-CPU-dominates finding matches what I see below, and it's exactly the right thing to point out, these kinds of changes are trade-offs. Rarely is there a free win. Yep, you're right that v4 only reported size and write throughput, I should have considered CPU overhead as an important metric earlier in my process. So, I went and measured the read side to see where it bites. Read-side numbers: Release build, c7i.4xlarge, shared_buffers=3D4GB, everything warm, 3M distinct URL keys (37-byte shared prefix, 10-digit distinct suffix), prefix_compression off vs on in the same binary so this isolates the decode cost, nothing else: index size off 24855 pages on 22630 pages (-9%) point lookup (IOS) off 180.3k tps on 178.3k tps (~1%, noise) COUNT(*) index-only off 341 ms on 360 ms (+6%) range scan, 100k keys off 10.9 ms on 11.7 ms (+7%) So: a point lookup decodes one tuple and the cost vanishes into the noise, but a scan that walks many tuples pays a real ~6-7%. That lines up with the paper and with your instinct (that, the cost is proportional to how many tuples you decode) so it shows up on traversal, not on seeks. This is also with a fairly short 37-byte prefix; a longer shared prefix decodes more bytes per tuple and would cost a bit more, which I I'll guess grows with the size of the prefix, but I should measure and not = guess. Which leads straight into your question 1. 1. Skipping decode when the tuple isn't returned This is the right instinct, and the optimization makes sense. The heap TID lives in t_tid, which is never coded, so a scan that only needs the TID (e.g. a plain IndexScan, BitmapIndexScan, COUNT(*)) genuinely does not need the decoded key to *return* anything. Two honest caveats on how far it reaches, though. The tuple copy is already skipped: _bt_saveitem() only materializes into so->currTuples when the scan asked for the index tuple (IndexOnlyScan), so a plain IndexScan already doesn't pay the copy. What my eager _bt_getitem() in _bt_readpage() still pays for is the *key check*, _bt_checkkeys() needs the real key to decide whether a tuple satisfies the scan keys, and that's true coded or not. So the win is specifically only when a tuple is in the interior of a matching range (the scan keys are already known-satisfied and we're not returning the tuple), the decode feeds nothing. That's exactly the COUNT(*) / full-range case above, which is where the 6% sits, so it's worth doing. I just don't want to claim it makes all scans free, only the "walking a known-matching run without returning it" ones. I'll prototype and measure it as a follow-up in this thread. The "do I need the key here?" signal (roughly, so->currTuples !=3D NULL, or key-check still required) into _bt_readpage() and keep the item coded when neither holds. 2. Multi-column indexes First-column-only was a deliberate line, not a fundamental limit. The coding is defined on the leading key column's bytes; extending it to a shared prefix that spans into later columns is possible but means the per-page prefix has to describe a column boundary and the decode has to reassemble a multi-attribute tuple, which is more format and more decode CPU for (I suspect) a smaller marginal win than the first column already captures. For (tenant_id int, url text) specifically the leading int is fixed-width and usually low-cardinality, so you'd want to prefix-code the *second* column within each leading-value run, which is really a different feature (per-run prefixes, see 3). I'd rather land the first-column case, which is the common shape (a single text/jsonb key, or a leading key that's the long one), and treat multi-column as a follow-on proposal when/if this lands. But I'm adding it to my list because I'm optimistic on this patch. 3. Prefix boundaries within a page Yes, this is the real limitation of one-prefix-per-page, and you have hit on the right worst case: a page spanning example.com and sample.org only gets to factor out "http://". _bt_prefix_choose() picks the single longest prefix common to all data items on the page, so a page straddling two groups keeps only what both share. Two things soften it in practice but don't remove it: the keys are sorted, so a straddling page is the boundary page between two runs. Most pages sit entirely inside one run and get the full prefix. Also a page that compresses poorly is simply left uncompressed (the int control in the v4 numbers), so a bad straddle costs nothing rather than bloating. The actual fix is multiple prefixes per page (a small prefix directory, each data item pointing at its group's prefix), which is a natural v2 of the on-disk format and also what would make the multi-column case in (2) fall out. I deliberately kept v4 to one prefix to get the format and the WAL/replay story reviewed before adding that complexity. I think it's the right thing to consider building next if the basic version is judged commit-worthy, at minimum to benchmark it and see if it makes a difference or not. Here's a wild idea for another day: if the zstd-dict thread [1] lands or the work from the thread started by Hannu [2] I might give adding dictionary-based compression to the prefix compression algorithm and measure that. Who knows... I'll fold the read-side numbers into the next revision and prototype the skip-decode path. Thanks again, these were the right questions. best. -greg [1] https://postgr.es/m/CAMT0RQQ+7bhiM9FtrZ7cdWxxFR=3DjtQCq6poDPs75oJuGMDdP= Kg@mail.gmail.com [2] https://postgr.es/m/CAMT0RQQtJprWKdK4L_wsD++aQaQ972kRdGfGA+su3JfFdYuEmA= @mail.gmail.com --b1=_gbQ1O3OfExNP0d6lOwCSFTeR6wOdO1O9VO9eHjTY Content-Type: text/plain; charset=us-ascii; name=v5-0001-nbtree-opt-in-leaf-key-prefix-compression.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v5-0001-nbtree-opt-in-leaf-key-prefix-compression.patch RnJvbSBiNDc1MDk0MmU1ZWNkZDhmN2M2MjViMGFiMTY3MDZlMzIyZDdjZWEwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQ0KRnJvbTogR3JlZyBCdXJkIDxncmVnQGJ1cmQubWU+DQpEYXRlOiBNb24s IDI2IE9jdCAyMDI2IDE1OjI1OjU4IC0wNDAwDQpTdWJqZWN0OiBbUEFUQ0ggdjVdIG5idHJlZTog b3B0LWluIGxlYWYga2V5IHByZWZpeCBjb21wcmVzc2lvbg0KDQpBZGQgbGVhZiBrZXkgcHJlZml4 IGNvbXByZXNzaW9uIHRvIG5idHJlZSwgY29udHJvbGxlZCBieSBhIG5ldw0KcGVyLWluZGV4IHN0 b3JhZ2UgcGFyYW1ldGVyLCBwcmVmaXhfY29tcHJlc3Npb24sIHRoYXQgaXMgb2ZmIGJ5IGRlZmF1 bHQuDQoNCldoZW4gYSBsZWFmIHBhZ2UgaXMgd3JpdHRlbiBhcyBhIHdob2xlIC0tIGR1cmluZyBh biBpbmRleCBidWlsZCwgYXMgYQ0Kc3BsaXQgaGFsZiwgb3IgYXMgdGhlIHJlc3VsdCBvZiBhIGRl ZHVwbGljYXRpb24gcGFzcyAtLSBhbmQgaXRzIGRhdGENCml0ZW1zIHNoYXJlIGEgbGVhZGluZyBi eXRlLXByZWZpeCBvZiB0aGVpciBmaXJzdCBrZXkgY29sdW1uLCB0aGUgcGFnZSBpcw0KcmVidWls dCBpbiB0aGUgQlRQX1BSRUZJWCBmb3JtYXQ6IGEgc2luZ2xlIFBSRUZJWCBpdGVtIGFmdGVyIHRo ZSBoaWdoDQprZXkgaG9sZHMgdGhlIHNoYXJlZCBieXRlcywgYW5kIGVhY2ggZGF0YSBpdGVtIGlz IHN0b3JlZCAiY29kZWQiIChpdHMNCmNvcHkgb2YgdGhlIHNoYXJlZCBwcmVmaXggcmVwbGFjZWQg YnkgYSBvbmUtYnl0ZSBsZW5ndGgpLiAgUmVhZHMgb2YgYQ0KbGVhZiBkYXRhIGl0ZW0gZnVubmVs IHRocm91Z2ggX2J0X2dldGl0ZW0oKSwgd2hpY2ggZGVjb2RlcyBvbiBkZW1hbmQ7DQpoaWdoIGtl eXMgYW5kIGludGVybmFsLXBhZ2UgZG93bmxpbmtzIGFyZSBuZXZlciBjb2RlZCBhbmQgYXJlIHJl YWQgd2l0aA0KdGhlIGV4aXN0aW5nIFBhZ2VHZXRJdGVtKCkuDQoNClRoZSBmZWF0dXJlIGlzIGRl bGliZXJhdGVseSBhIHBlci1wYWdlIG9wdC1pbiB3aXRoIG5vIG9uLWRpc2sgdmVyc2lvbg0KY2hh bmdlOiBCVFJFRV9WRVJTSU9OIGFuZCB0aGUgY2F0YWxvZyB2ZXJzaW9uIGFyZSB1bnRvdWNoZWQu ICBBIHBhZ2UgaXMNCmNvbnZlcnRlZCBvbmx5IHdoZW4gaXQgaXMgbmV4dCB3cml0dGVuIHdob2xl LCBuZXZlciBieSBhbiBpbnNlcnQsIFZBQ1VVTQ0Kb3Iga2V5LXJhbmdlIGNoYW5nZSwgc28gY29t cHJlc3Npb24gImZhdWx0cyBmb3J3YXJkIiBvbiBhbiBleGlzdGluZw0KaW5kZXguICBPbGQtZm9y bWF0IGFuZCBuZXctZm9ybWF0IHBhZ2VzIGNvZXhpc3QgaW4gdGhlIHNhbWUgaW5kZXgsIHdoaWNo DQprZWVwcyBwZ191cGdyYWRlLCBwaHlzaWNhbCByZXBsaWNhdGlvbiwgYW5kIHN0YW5kYnlzIHdv cmtpbmcgd2l0aCBubw0KUkVJTkRFWDogYSByZXBsaWNhIHRoYXQgaGFzIG5vdCB5ZXQgc2VlbiBh IHBhZ2UncyBjb252ZXJzaW9uIHN0aWxsIHJlYWRzDQppdCBjb3JyZWN0bHksIGFuZCB0dXJuaW5n IHRoZSBwYXJhbWV0ZXIgb2ZmIChBTFRFUiBJTkRFWCAuLi4gU0VUKSBzdG9wcw0KbmV3IGNvbnZl cnNpb25zIHdoaWxlIGxlYXZpbmcgZXhpc3RpbmcgY29kZWQgcGFnZXMgcmVhZGFibGUuDQoNClBy ZWZpeCBjb21wcmVzc2lvbiBpcyBhIHNlcGFyYXRlIG1lY2hhbmlzbSBmcm9tIGRlZHVwbGljYXRp b24sIG5vdCBhbg0KZXh0ZW5zaW9uIG9mIGl0OiBkZWR1cGxpY2F0aW9uIGNvbGxhcHNlcyB0dXBs ZXMgd2hvc2Ugd2hvbGUga2V5IGlzDQplcXVhbCwgd2hpbGUgcHJlZml4IGNvbXByZXNzaW9uIGZh Y3RvcnMgb3V0IGEgbGVhZGluZyBydW4gc2hhcmVkIGJ5DQpkaXN0aW5jdCBrZXlzIChhIFVSTCBv ciBqc29uYi1wYXRoIGNvbHVtbiBpcyB0aGUgbW90aXZhdGluZyBjYXNlLCB3aGVyZQ0KZGVkdXBs aWNhdGlvbiBkb2VzIG5vdCBoZWxwKS4gIFRoZSB0d28gY29tcG9zZSBvbiBvbmUgcGFnZSAtLSBh IGJ1aWxkDQpkZWR1cGxpY2F0ZXMgZmlyc3QgYW5kIHRoZW4gY29kZXMgdGhlIHN1cnZpdm9ycywg c28gYSBkdXBsaWNhdGUtaGVhdnkNCnByZWZpeCBpbmRleCBpcyBubyBsYXJnZXIgdGhhbiBhIHBs YWluIG9uZS4gIEJvdHRvbS11cCBpbmRleCBkZWxldGlvbg0KcnVucyBvbiBjb2RlZCBwYWdlcyB1 bmNoYW5nZWQsIHNpbmNlIGl0IG9ubHkgcmVtb3ZlcyBpdGVtcy4gIEEgcnVudGltZQ0KZGVkdXBs aWNhdGlvbiBwYXNzIG9uIGEgY29kZWQgcGFnZSBkZWNvZGVzIGZpcnN0LCBhbmQgYmVjYXVzZSBh IGNvZGVkDQpwYWdlIGNhbiBob2xkIG1vcmUgbG9naWNhbCBkYXRhIHRoYW4gZml0cyBwbGFpbiwg dGhlIHBhc3MgYWJvcnRzIGNsZWFubHkNCmFuZCB0aGUgcGFnZSBzcGxpdHMgaW5zdGVhZCB3aGVu IHRoZSBkZWNvZGVkIHNldCB3b3VsZCBvdmVyZmxvdy4NCg0KV0FMIHJlcGxheSByZXByb2R1Y2Vz IHRoZSBjb2RlZCBieXRlcyB3aXRob3V0IHJlc29ydGluZyB0byBmdWxsLXBhZ2UNCmltYWdlcyBp biB0aGUgY29tbW9uIHBhdGhzLiAgQSBSZWxhdGlvbi1mcmVlIGxheW91dCByb3V0aW5lLA0KX2J0 X3NwbGl0X2xlYWZfbGF5b3V0KCksIHRvZ2V0aGVyIHdpdGggYSBzaW5nbGUgaXRlbS1jb2xsZWN0 aW9uIHJvdXRpbmUsDQpfYnRfc3BsaXRfbGVhZl9jb2xsZWN0KCksIGFyZSBzaGFyZWQgYnkgdGhl IHByaW1hcnkgKF9idF9zcGxpdCkgYW5kIHJlZG8NCihidHJlZV94bG9nX3NwbGl0KSBzbyBib3Ro IGRlcml2ZSB0aGUgc2FtZSBwbGFpbiBpdGVtIHNlcXVlbmNlIGFuZCBjb2RlDQppdCBhZ2FpbnN0 IHRoZSBzYW1lIGxvZ2dlZCBwcmVmaXgsIGVtaXR0aW5nIGlkZW50aWNhbCBieXRlcy4gIEFuDQpp bi1wbGFjZSBpbnNlcnQgbG9ncyB0aGUgY29kZWQgdHVwbGU7IGEgc3BsaXQgbG9ncyBlYWNoIGhh bGYncyBjaG9zZW4NCnByZWZpeCBwbHVzIHRoZSByaWdodCBoYWxmJ3MgcGxhaW4gaXRlbXM7IGEg cHJlZml4IGRlZHVwbGljYXRpb24gbG9ncw0KdGhlIGNob3NlbiBwcmVmaXggcGx1cyB0aGUgZGVk dXBlZCBwbGFpbiBpdGVtcy4gIEEgYm91bmRlZCBmYWxsYmFjaw0KY2FycmllcyB0aGUgcGFnZSBh cyBhIGZvcmNlZCBmdWxsLXBhZ2UgaW1hZ2Ugb25seSB3aGVuIGEgcGF0aG9sb2dpY2FsbHkNCmNv bXByZXNzaWJsZSBwYWdlJ3MgcGxhaW4gcGF5bG9hZCB3b3VsZCBleGNlZWQgb25lIGJsb2NrOyBy ZWFsaXN0aWMgZGF0YQ0KbmV2ZXIgcmVhY2hlcyB0aGF0IHRocmVzaG9sZCwgc28gdGhlIG5idHJl ZS1wcmVmaXgtZm9yY2UtcmZwaSBpbmplY3Rpb24NCnBvaW50IGFuZCBhIGRlZGljYXRlZCB0ZXN0 IGluIHNyYy90ZXN0L21vZHVsZXMvbmJ0cmVlIGV4ZXJjaXNlIHRoZQ0KZmFsbGJhY2sgZGV0ZXJt aW5pc3RpY2FsbHkuDQoNCmFtY2hlY2sgZGVjb2RlcyBldmVyeSBsZWFmIGRhdGEgaXRlbSwgaW5j bHVkaW5nIHVuZGVyIGhlYXBhbGxpbmRleGVkLA0KYW5kIGNoZWNrcyB0aGUgQlRQX1BSRUZJWCBz dHJ1Y3R1cmFsIGludmFyaWFudHMgKGZsYWcgb25seSBvbiBsZWFmDQpwYWdlcywgYSB3ZWxsLWZv cm1lZCBQUkVGSVggaXRlbSBhdCB0aGUgZXhwZWN0ZWQgb2Zmc2V0KTsgaXRzIHRlc3Qgc3VpdGUN CmNvdmVycyBhIHByZWZpeC1jb21wcmVzc2VkIGluZGV4LiAgVGhlIGNyZWF0ZV9pbmRleCBkb2N1 bWVudGF0aW9uIGFuZA0KdGhlIG5idHJlZSBSRUFETUUgZGVzY3JpYmUgdGhlIHBhcmFtZXRlciwg dGhlIG9uLWRpc2sgZm9ybWF0LCBhbmQgdGhlDQpyZWxhdGlvbnNoaXAgdG8gZGVkdXBsaWNhdGlv bi4gIFRlc3RlZCB3aXRoIHdhbF9jb25zaXN0ZW5jeV9jaGVja2luZz1hbGwNCm9uIGEgcHJpbWFy eSBhbmQgYSBzdHJlYW1pbmcgc3RhbmRieSBhY3Jvc3MgaW5zZXJ0LCBzcGxpdCwgZGVkdXBsaWNh dGlvbg0KKGluY2x1ZGluZyB0aGUgZm9yY2VkLWltYWdlIGZhbGxiYWNrKSwgZGVsZXRlIGFuZCB2 YWN1dW0gd29ya2xvYWRzLA0KdGhyb3VnaCBjcmFzaCByZWNvdmVyeSwgYW5kIGFjcm9zcyBhIHBn X3VwZ3JhZGUgdGhhdCBjYXJyaWVzIGJvdGggcGFnZQ0KZm9ybWF0cy4NCi0tLQ0KIGNvbnRyaWIv YW1jaGVjay9leHBlY3RlZC9jaGVja19idHJlZS5vdXQgICAgICB8ICAyNyArDQogY29udHJpYi9h bWNoZWNrL3NxbC9jaGVja19idHJlZS5zcWwgICAgICAgICAgIHwgIDE4ICsNCiBjb250cmliL2Ft Y2hlY2svdmVyaWZ5X25idHJlZS5jICAgICAgICAgICAgICAgfCAxMjAgKystDQogZG9jL3NyYy9z Z21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbCAgICAgICAgICAgIHwgIDM1ICsNCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYyAgICAgICAgfCAgMTAgKw0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvTWFrZWZpbGUgICAgICAgICAgICB8ICAgMSArDQogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9SRUFETUUgICAgICAgICAgICAgIHwgIDk3ICsrKw0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbWVzb24uYnVpbGQgICAgICAgICB8ICAgMSArDQogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRkZWR1cC5jICAgICAgICAgIHwgMjY2ICsrKysrLQ0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMgICAgICAgICB8IDM3NSArKysrKystLQ0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jICAgICAgICAgICB8ICAzMSArLQ0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cHJlZml4LmMgICAgICAgICB8IDgxNCArKysrKysr KysrKysrKysrKysNCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMgICAg ICAgfCAgMjMgKy0NCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jICAgICAgICAg ICAgfCAgIDYgKy0NCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jICAgICAg ICAgfCAgIDMgKy0NCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNvcnQuYyAgICAgICAg ICAgfCAgNTQgKy0NCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNwbGl0bG9jLmMgICAg ICAgfCAgODQgKy0NCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMgICAgICAg ICAgfCAgIDQgKy0NCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHhsb2cuYyAgICAgICAg ICAgfCAzMTMgKysrKysrLQ0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCAgICAgICAgICAg ICAgICAgICB8IDE0NyArKystDQogc3JjL2luY2x1ZGUvYWNjZXNzL25idHhsb2cuaCAgICAgICAg ICAgICAgICAgIHwgIDQ0ICstDQogc3JjL3Rlc3QvbW9kdWxlcy9uYnRyZWUvTWFrZWZpbGUgICAg ICAgICAgICAgIHwgICAzICstDQogLi4uL25idHJlZS9leHBlY3RlZC9uYnRyZWVfcHJlZml4X3Jm cGkub3V0ICAgIHwgIDc3ICsrDQogc3JjL3Rlc3QvbW9kdWxlcy9uYnRyZWUvbWVzb24uYnVpbGQg ICAgICAgICAgIHwgICAxICsNCiAuLi4vbW9kdWxlcy9uYnRyZWUvc3FsL25idHJlZV9wcmVmaXhf cmZwaS5zcWwgfCAgNTkgKysNCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2J0cmVlX2luZGV4 Lm91dCAgICAgfCAyNTYgKysrKysrDQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvYnRyZWVfaW5kZXgu c3FsICAgICAgICAgIHwgMTY3ICsrKysNCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCAgICAgICAgICAgICAgfCAgIDIgKw0KIDI4IGZpbGVzIGNoYW5nZWQsIDI5MjMgaW5zZXJ0aW9u cygrKSwgMTE1IGRlbGV0aW9ucygtKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHByZWZpeC5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21v ZHVsZXMvbmJ0cmVlL2V4cGVjdGVkL25idHJlZV9wcmVmaXhfcmZwaS5vdXQNCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy9uYnRyZWUvc3FsL25idHJlZV9wcmVmaXhfcmZwaS5z cWwNCg0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19idHJlZS5v dXQgYi9jb250cmliL2FtY2hlY2svZXhwZWN0ZWQvY2hlY2tfYnRyZWUub3V0DQppbmRleCA0ZmNl ZTVkYTQ2My4uODk2ZDhiZmJiMGUgMTAwNjQ0DQotLS0gYS9jb250cmliL2FtY2hlY2svZXhwZWN0 ZWQvY2hlY2tfYnRyZWUub3V0DQorKysgYi9jb250cmliL2FtY2hlY2svZXhwZWN0ZWQvY2hlY2tf YnRyZWUub3V0DQpAQCAtMjgzLDYgKzI4MywzMiBAQCBTRUxFQ1QgYnRfaW5kZXhfY2hlY2soJ3Zh cmxlbmFfYnVnX2lkeCcsIHRydWUpOw0KICANCiAoMSByb3cpDQogDQorLS0gQ2hlY2sgYSBwcmVm aXgtY29tcHJlc3NlZCAocHJlZml4X2NvbXByZXNzaW9uPW9uKSBpbmRleDogdGhlIGRhdGEgaXRl bXMgYXJlDQorLS0gc3RvcmVkIGNvZGVkIGFnYWluc3QgYSBwZXItcGFnZSBQUkVGSVggaXRlbSwg c28gYW1jaGVjayBtdXN0IGRlY29kZSB0aGVtIGFuZA0KKy0tIHZhbGlkYXRlIHRoZSBCVFBfUFJF RklYIHN0cnVjdHVyYWwgaW52YXJpYW50cy4gIFVzZSBrZXlzIHdpdGggYSBsb25nIHNoYXJlZA0K Ky0tIGxlYWRpbmcgcHJlZml4IChzbyBwYWdlcyBhY3R1YWxseSBjb21wcmVzcykgcGx1cyBzb21l IHRoYXQgc2hhcmUgbm90aGluZyBhbmQNCistLSBhIE5VTEwgKHN0b3JlZCB1bmNvZGVkKSwgYW5k IGVub3VnaCByb3dzIHRvIGZvcmNlIHNwbGl0cyBhbmQgZGVkdXBsaWNhdGlvbi4NCitDUkVBVEUg VEFCTEUgcHJlZml4X2J1ZyAodiB0ZXh0IENPTExBVEUgIkMiKTsNCitJTlNFUlQgSU5UTyBwcmVm aXhfYnVnDQorICBTRUxFQ1QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8n IHx8IGxwYWQoZzo6dGV4dCwgOCwgJzAnKQ0KKyAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAw MDApIGc7DQorSU5TRVJUIElOVE8gcHJlZml4X2J1Zw0KKyAgU0VMRUNUICdodHRwczovL2V4YW1w bGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvJyB8fCBscGFkKChnICUgMTAwKTo6dGV4dCwgOCwgJzAn KQ0KKyAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwMDApIGc7DQorSU5TRVJUIElOVE8gcHJl Zml4X2J1ZyBWQUxVRVMgKCd6enotbm8tc2hhcmVkLXByZWZpeCcpLCAoTlVMTCk7DQorQ1JFQVRF IElOREVYIHByZWZpeF9idWdfaWR4IE9OIHByZWZpeF9idWcgKHYpIFdJVEggKHByZWZpeF9jb21w cmVzc2lvbiA9IG9uKTsNCitTRUxFQ1QgYnRfaW5kZXhfY2hlY2soJ3ByZWZpeF9idWdfaWR4Jywg aGVhcGFsbGluZGV4ZWQgPT4gdHJ1ZSk7DQorIGJ0X2luZGV4X2NoZWNrIA0KKy0tLS0tLS0tLS0t LS0tLS0NCisgDQorKDEgcm93KQ0KKw0KK1NFTEVDVCBidF9pbmRleF9wYXJlbnRfY2hlY2soJ3By ZWZpeF9idWdfaWR4JywgaGVhcGFsbGluZGV4ZWQgPT4gdHJ1ZSwgcm9vdGRlc2NlbmQgPT4gdHJ1 ZSk7DQorIGJ0X2luZGV4X3BhcmVudF9jaGVjayANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K KyANCisoMSByb3cpDQorDQogLS0gY2xlYW51cA0KIERST1AgVEFCTEUgYnR0ZXN0X2E7DQogRFJP UCBUQUJMRSBidHRlc3RfYjsNCkBAIC0yOTQsMyArMzIwLDQgQEAgRFJPUCBUQUJMRSBidHRlc3Rf dW5pcXVlX251bGxzOw0KIERST1AgT1dORUQgQlkgcmVncmVzc19idHRlc3Rfcm9sZTsgLS0gcGVy bWlzc2lvbnMNCiBEUk9QIFJPTEUgcmVncmVzc19idHRlc3Rfcm9sZTsNCiBEUk9QIFRBQkxFIHZh cmxlbmFfYnVnOw0KK0RST1AgVEFCTEUgcHJlZml4X2J1ZzsNCmRpZmYgLS1naXQgYS9jb250cmli L2FtY2hlY2svc3FsL2NoZWNrX2J0cmVlLnNxbCBiL2NvbnRyaWIvYW1jaGVjay9zcWwvY2hlY2tf YnRyZWUuc3FsDQppbmRleCBhNTU4NTA4NWZhZC4uN2QyYzZhOGU4ZmYgMTAwNjQ0DQotLS0gYS9j b250cmliL2FtY2hlY2svc3FsL2NoZWNrX2J0cmVlLnNxbA0KKysrIGIvY29udHJpYi9hbWNoZWNr L3NxbC9jaGVja19idHJlZS5zcWwNCkBAIC0xODMsNiArMTgzLDIzIEBAIElOU0VSVCBJTlRPIHZh cmxlbmFfYnVnIFZBTFVFUyAocmVwZWF0KCdUZXN0JywgMjUwKSk7DQogQUxURVIgVEFCTEUgdmFy bGVuYV9idWcgQUxURVIgQ09MVU1OIHYgU0VUIFNUT1JBR0UgZXh0ZW5kZWQ7DQogU0VMRUNUIGJ0 X2luZGV4X2NoZWNrKCd2YXJsZW5hX2J1Z19pZHgnLCB0cnVlKTsNCiANCistLSBDaGVjayBhIHBy ZWZpeC1jb21wcmVzc2VkIChwcmVmaXhfY29tcHJlc3Npb249b24pIGluZGV4OiB0aGUgZGF0YSBp dGVtcyBhcmUNCistLSBzdG9yZWQgY29kZWQgYWdhaW5zdCBhIHBlci1wYWdlIFBSRUZJWCBpdGVt LCBzbyBhbWNoZWNrIG11c3QgZGVjb2RlIHRoZW0gYW5kDQorLS0gdmFsaWRhdGUgdGhlIEJUUF9Q UkVGSVggc3RydWN0dXJhbCBpbnZhcmlhbnRzLiAgVXNlIGtleXMgd2l0aCBhIGxvbmcgc2hhcmVk DQorLS0gbGVhZGluZyBwcmVmaXggKHNvIHBhZ2VzIGFjdHVhbGx5IGNvbXByZXNzKSBwbHVzIHNv bWUgdGhhdCBzaGFyZSBub3RoaW5nIGFuZA0KKy0tIGEgTlVMTCAoc3RvcmVkIHVuY29kZWQpLCBh bmQgZW5vdWdoIHJvd3MgdG8gZm9yY2Ugc3BsaXRzIGFuZCBkZWR1cGxpY2F0aW9uLg0KK0NSRUFU RSBUQUJMRSBwcmVmaXhfYnVnICh2IHRleHQgQ09MTEFURSAiQyIpOw0KK0lOU0VSVCBJTlRPIHBy ZWZpeF9idWcNCisgIFNFTEVDVCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNl LycgfHwgbHBhZChnOjp0ZXh0LCA4LCAnMCcpDQorICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAy MDAwMCkgZzsNCitJTlNFUlQgSU5UTyBwcmVmaXhfYnVnDQorICBTRUxFQ1QgJ2h0dHBzOi8vZXhh bXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxwYWQoKGcgJSAxMDApOjp0ZXh0LCA4LCAn MCcpDQorICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAyMDAwMCkgZzsNCitJTlNFUlQgSU5UTyBw cmVmaXhfYnVnIFZBTFVFUyAoJ3p6ei1uby1zaGFyZWQtcHJlZml4JyksIChOVUxMKTsNCitDUkVB VEUgSU5ERVggcHJlZml4X2J1Z19pZHggT04gcHJlZml4X2J1ZyAodikgV0lUSCAocHJlZml4X2Nv bXByZXNzaW9uID0gb24pOw0KK1NFTEVDVCBidF9pbmRleF9jaGVjaygncHJlZml4X2J1Z19pZHgn LCBoZWFwYWxsaW5kZXhlZCA9PiB0cnVlKTsNCitTRUxFQ1QgYnRfaW5kZXhfcGFyZW50X2NoZWNr KCdwcmVmaXhfYnVnX2lkeCcsIGhlYXBhbGxpbmRleGVkID0+IHRydWUsIHJvb3RkZXNjZW5kID0+ IHRydWUpOw0KKw0KIC0tIGNsZWFudXANCiBEUk9QIFRBQkxFIGJ0dGVzdF9hOw0KIERST1AgVEFC TEUgYnR0ZXN0X2I7DQpAQCAtMTk0LDMgKzIxMSw0IEBAIERST1AgVEFCTEUgYnR0ZXN0X3VuaXF1 ZV9udWxsczsNCiBEUk9QIE9XTkVEIEJZIHJlZ3Jlc3NfYnR0ZXN0X3JvbGU7IC0tIHBlcm1pc3Np b25zDQogRFJPUCBST0xFIHJlZ3Jlc3NfYnR0ZXN0X3JvbGU7DQogRFJPUCBUQUJMRSB2YXJsZW5h X2J1ZzsNCitEUk9QIFRBQkxFIHByZWZpeF9idWc7DQpkaWZmIC0tZ2l0IGEvY29udHJpYi9hbWNo ZWNrL3ZlcmlmeV9uYnRyZWUuYyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMNCmlu ZGV4IDk3YzUxOWI0N2Y1Li4xODU1MTQ4M2U4OCAxMDA2NDQNCi0tLSBhL2NvbnRyaWIvYW1jaGVj ay92ZXJpZnlfbmJ0cmVlLmMNCisrKyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMN CkBAIC0xNTgsNyArMTU4LDEyIEBAIHR5cGVkZWYgc3RydWN0IEJ0cmVlTGFzdFZpc2libGVFbnRy eQ0KIAlPZmZzZXROdW1iZXIgb2Zmc2V0OwkJLyogT2Zmc2V0IG9uIGluZGV4IGJsb2NrICovDQog CWludAkJCXBvc3RpbmdJbmRleDsJLyogTnVtYmVyIGluIHRoZSBwb3N0aW5nIGxpc3QgKC0xIGZv cg0KIAkJCQkJCQkJICogbm9uLWRlZHVwbGljYXRlZCB0dXBsZXMpICovDQotCUl0ZW1Qb2ludGVy IHRpZDsJCQkvKiBIZWFwIHRpZCAqLw0KKwlJdGVtUG9pbnRlciB0aWQ7CQkJLyogSGVhcCB0aWQs IG9yIE5VTEw7IHBvaW50cyBhdCB0aWRkYXRhICovDQorCUl0ZW1Qb2ludGVyRGF0YSB0aWRkYXRh OwkvKiBPd24gc3RvcmFnZSBmb3IgKnRpZDogYSBwcmVmaXgtY29kZWQgbGVhZg0KKwkJCQkJCQkJ ICogdHVwbGUgaXMgZGVjb2RlZCBpbnRvIGEgc2NyYXRjaCBidWZmZXIgdGhhdA0KKwkJCQkJCQkJ ICogaXMgcmV1c2VkIG9uIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uLCBzbyB3ZQ0KKwkJCQkJCQkJ ICogbXVzdCBrZWVwIHRoZSBoZWFwIFRJRCBieSB2YWx1ZSwgbm90IHBvaW50DQorCQkJCQkJCQkg KiBpbnRvIHRoZSAodHJhbnNpZW50KSBkZWNvZGVkIHR1cGxlICovDQogfSBCdHJlZUxhc3RWaXNp YmxlRW50cnk7DQogDQogLyoNCkBAIC05MzUsNyArOTQwLDggQEAgYnRfZW50cnlfdW5pcXVlX2No ZWNrKEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUsIEluZGV4VHVwbGUgaXR1cCwNCiAJCQkJbFZpcy0+ Ymxrbm8gPSB0YXJnZXRibG9jazsNCiAJCQkJbFZpcy0+b2Zmc2V0ID0gb2Zmc2V0Ow0KIAkJCQls VmlzLT5wb3N0aW5nSW5kZXggPSBpOw0KLQkJCQlsVmlzLT50aWQgPSB0aWQ7DQorCQkJCUl0ZW1Q b2ludGVyQ29weSh0aWQsICZsVmlzLT50aWRkYXRhKTsNCisJCQkJbFZpcy0+dGlkID0gJmxWaXMt PnRpZGRhdGE7DQogCQkJfQ0KIAkJfQ0KIAl9DQpAQCAtOTYxLDcgKzk2Nyw4IEBAIGJ0X2VudHJ5 X3VuaXF1ZV9jaGVjayhCdHJlZUNoZWNrU3RhdGUgKnN0YXRlLCBJbmRleFR1cGxlIGl0dXAsDQog DQogCQkJbFZpcy0+Ymxrbm8gPSB0YXJnZXRibG9jazsNCiAJCQlsVmlzLT5vZmZzZXQgPSBvZmZz ZXQ7DQotCQkJbFZpcy0+dGlkID0gdGlkOw0KKwkJCUl0ZW1Qb2ludGVyQ29weSh0aWQsICZsVmlz LT50aWRkYXRhKTsNCisJCQlsVmlzLT50aWQgPSAmbFZpcy0+dGlkZGF0YTsNCiAJCQlsVmlzLT5w b3N0aW5nSW5kZXggPSAtMTsNCiAJCX0NCiAJfQ0KQEAgLTEyMjksNiArMTIzNiwxNiBAQCBidF90 YXJnZXRfcGFnZV9jaGVjayhCdHJlZUNoZWNrU3RhdGUgKnN0YXRlKQ0KIAlPZmZzZXROdW1iZXIg bWF4Ow0KIAlCVFBhZ2VPcGFxdWUgdG9wYXF1ZTsNCiANCisJLyoNCisJICogU2NyYXRjaCBzcGFj ZSBmb3IgZGVjb2RpbmcgcHJlZml4LWNvZGVkIGxlYWYgdHVwbGVzIChfYnRfZ2V0aXRlbSkuDQor CSAqIGl0dXBidWYgYmFja3MgdGhlIGN1cnJlbnQgbG9vcCBpdGVtOyBjcm9zc2J1ZiBiYWNrcyB0 aGUgcmlnaHQgc2libGluZydzDQorCSAqIGZpcnN0IGl0ZW0gaW4gdGhlIGNyb3NzLXBhZ2UgdW5p cXVlIGNoZWNrLCB3aGljaCBtdXN0IGNvZXhpc3Qgd2l0aCB0aGUNCisJICogY3VycmVudCBpdGVt J3Mgc3RhdGUuICBBIHBpdm90LCBoaWdoIGtleSBvciBub24tcHJlZml4IGxlYWYgaXRlbSBpcw0K KwkgKiByZXR1cm5lZCBieSBfYnRfZ2V0aXRlbSB1bmNoYW5nZWQgKGJ1ZmZlciB1bnVzZWQpLg0K KwkgKi8NCisJQlRJdGVtQnVmCWl0dXBidWY7DQorCUJUSXRlbUJ1Zgljcm9zc2J1ZjsNCisNCiAJ LyogTGFzdCB2aXNpYmxlIGVudHJ5IGluZm8gZm9yIGNoZWNraW5nIGluZGV4ZXMgd2l0aCB1bmlx dWUgY29uc3RyYWludCAqLw0KIAlCdHJlZUxhc3RWaXNpYmxlRW50cnkgbFZpcyA9IHtJbnZhbGlk QmxvY2tOdW1iZXIsIEludmFsaWRPZmZzZXROdW1iZXIsIC0xLCBOVUxMfTsNCiANCkBAIC0xMjY2 LDYgKzEyODMsNTQgQEAgYnRfdGFyZ2V0X3BhZ2VfY2hlY2soQnRyZWVDaGVja1N0YXRlICpzdGF0 ZSkNCiAJCX0NCiAJfQ0KIA0KKwkvKg0KKwkgKiBTdHJ1Y3R1cmFsIGNoZWNrcyBmb3IgYSBwcmVm aXgtY29tcHJlc3NlZCAoQlRQX1BSRUZJWCkgbGVhZi4gIEEgcmVhZGVyDQorCSAqIHRydXN0cyB0 aGlzIGZvcm1hdCBpbXBsaWNpdGx5LCBzbyB2YWxpZGF0ZSB0aGUgcGFydHMgdGhhdCBhbiBvdXQt b2YtDQorCSAqIHBsYWNlIGRlY29kZSB3b3VsZCBvdGhlcndpc2UgcmVhZCBhcyBnYXJiYWdlOiB0 aGUgZmxhZyBhcHBlYXJzIG9ubHkgb24NCisJICogbGVhZiBwYWdlcywgYW5kIHRoZSBQUkVGSVgg aXRlbSBzaXRzIGF0IHRoZSBleHBlY3RlZCBvZmZzZXQgd2l0aCBhDQorCSAqIGxlbmd0aCBpbiB0 aGUgbGVnYWwgcmFuZ2UuICBUaGUgcGVyLWl0ZW0ga2V5L2NvbnRlbnQgY2hlY2tzIGJlbG93IHJ1 bg0KKwkgKiBvbiB0aGUgZGVjb2RlZCB0dXBsZSBmcm9tIF9idF9nZXRpdGVtLCB3aGljaCBmYWls cyBvbiBhIG1hbGZvcm1lZCBjb2RlZA0KKwkgKiBpdGVtLCBzbyBpdGVtLWxldmVsIGNvZGluZyBp cyBjb3ZlcmVkIHRoZXJlLg0KKwkgKi8NCisJaWYgKFBfSEFTUFJFRklYKHRvcGFxdWUpKQ0KKwl7 DQorCQlJdGVtSWQJCXBpdGVtaWQ7DQorCQlJbmRleFR1cGxlCXBpdHVwOw0KKwkJU2l6ZQkJcHJl Zml4bGVuOw0KKwkJT2Zmc2V0TnVtYmVyIHByZWZpeG9mZiA9IEJUUGFnZUdldFByZWZpeE9mZih0 b3BhcXVlKTsNCisNCisJCWlmICghUF9JU0xFQUYodG9wYXF1ZSkpDQorCQkJZXJlcG9ydChFUlJP UiwNCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5ERVhfQ09SUlVQVEVEKSwNCisJCQkJCSBlcnJt c2coInByZWZpeCBjb21wcmVzc2lvbiBmbGFnIHNldCBvbiBub24tbGVhZiBwYWdlIGluIGluZGV4 IFwiJXNcIiIsDQorCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRlLT5yZWwpKSwN CisJCQkJCSBlcnJkZXRhaWxfaW50ZXJuYWwoIkluZGV4IGJsb2NrPSV1IHBhZ2UgbHNuPSVYLyUw OFguIiwNCisJCQkJCQkJCQkJc3RhdGUtPnRhcmdldGJsb2NrLA0KKwkJCQkJCQkJCQlMU05fRk9S TUFUX0FSR1Moc3RhdGUtPnRhcmdldGxzbikpKSk7DQorDQorCQlpZiAocHJlZml4b2ZmID4gbWF4 KQ0KKwkJCWVyZXBvcnQoRVJST1IsDQorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOREVYX0NPUlJV UFRFRCksDQorCQkJCQkgZXJybXNnKCJwcmVmaXgtY29tcHJlc3NlZCBwYWdlIGhhcyBubyBQUkVG SVggaXRlbSBpbiBpbmRleCBcIiVzXCIiLA0KKwkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShzdGF0ZS0+cmVsKSksDQorCQkJCQkgZXJyZGV0YWlsX2ludGVybmFsKCJJbmRleCBibG9jaz0l dSBwcmVmaXggb2Zmc2V0PSV1IG1heCBvZmZzZXQ9JXUgcGFnZSBsc249JVgvJTA4WC4iLA0KKwkJ CQkJCQkJCQlzdGF0ZS0+dGFyZ2V0YmxvY2ssIHByZWZpeG9mZiwgbWF4LA0KKwkJCQkJCQkJCQlM U05fRk9STUFUX0FSR1Moc3RhdGUtPnRhcmdldGxzbikpKSk7DQorDQorCQlwaXRlbWlkID0gUGFn ZUdldEl0ZW1JZENhcmVmdWwoc3RhdGUsIHN0YXRlLT50YXJnZXRibG9jaywNCisJCQkJCQkJCQkg ICBzdGF0ZS0+dGFyZ2V0LCBwcmVmaXhvZmYpOw0KKwkJcGl0dXAgPSAoSW5kZXhUdXBsZSkgUGFn ZUdldEl0ZW0oc3RhdGUtPnRhcmdldCwgcGl0ZW1pZCk7DQorCQlwcmVmaXhsZW4gPSBJbmRleFR1 cGxlU2l6ZShwaXR1cCkgLSBzaXplb2YoSW5kZXhUdXBsZURhdGEpOw0KKwkJaWYgKHByZWZpeGxl biA8IDEgfHwgcHJlZml4bGVuID4gQlRSRUVfUFJFRklYX01BWCkNCisJCQllcmVwb3J0KEVSUk9S LA0KKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTkRFWF9DT1JSVVBURUQpLA0KKwkJCQkJIGVycm1z ZygiUFJFRklYIGl0ZW0gaGFzIGludmFsaWQgbGVuZ3RoIGluIGluZGV4IFwiJXNcIiIsDQorCQkJ CQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRlLT5yZWwpKSwNCisJCQkJCSBlcnJkZXRh aWxfaW50ZXJuYWwoIkluZGV4IGJsb2NrPSV1IHByZWZpeCBsZW5ndGg9JXp1IHBhZ2UgbHNuPSVY LyUwOFguIiwNCisJCQkJCQkJCQkJc3RhdGUtPnRhcmdldGJsb2NrLCBwcmVmaXhsZW4sDQorCQkJ CQkJCQkJCUxTTl9GT1JNQVRfQVJHUyhzdGF0ZS0+dGFyZ2V0bHNuKSkpKTsNCisJfQ0KKw0KIAkv Kg0KIAkgKiBMb29wIG92ZXIgcGFnZSBpdGVtcywgc3RhcnRpbmcgZnJvbSBmaXJzdCBub24taGln aGtleSBpdGVtLCBub3QgaGlnaA0KIAkgKiBrZXkgKGlmIGFueSkuICBNb3N0IHRlc3RzIGFyZSBu b3QgcGVyZm9ybWVkIGZvciB0aGUgIm5lZ2F0aXZlIGluZmluaXR5Ig0KQEAgLTEyOTMsOCArMTM1 OCwxNSBAQCBidF90YXJnZXRfcGFnZV9jaGVjayhCdHJlZUNoZWNrU3RhdGUgKnN0YXRlKQ0KIA0K IAkJaXRlbWlkID0gUGFnZUdldEl0ZW1JZENhcmVmdWwoc3RhdGUsIHN0YXRlLT50YXJnZXRibG9j aywNCiAJCQkJCQkJCQkgIHN0YXRlLT50YXJnZXQsIG9mZnNldCk7DQotCQlpdHVwID0gKEluZGV4 VHVwbGUpIFBhZ2VHZXRJdGVtKHN0YXRlLT50YXJnZXQsIGl0ZW1pZCk7DQotCQl0dXBzaXplID0g SW5kZXhUdXBsZVNpemUoaXR1cCk7DQorDQorCQkvKg0KKwkJICogbHBfbGVuIGFuZCB0aGUgdHVw bGUgc2l6ZSBsaW1pdCBhcmUgcGh5c2ljYWwgcHJvcGVydGllcyBvZiB0aGUgaXRlbQ0KKwkJICog YXMgc3RvcmVkLCBzbyB0aGV5IGFyZSBjaGVja2VkIGFnYWluc3QgdGhlIHJhdyBvbi1wYWdlIHR1 cGxlIChjb2RlZCwNCisJCSAqIG9uIGEgQlRQX1BSRUZJWCBsZWFmKS4gIEV2ZXJ5IGtleS9jb250 ZW50IGNoZWNrIGJlbG93IGluc3RlYWQgdXNlcw0KKwkJICogdGhlIGRlY29kZWQgdHVwbGUgcmV0 dXJuZWQgYnkgX2J0X2dldGl0ZW0uDQorCQkgKi8NCisJCXR1cHNpemUgPSBJbmRleFR1cGxlU2l6 ZSgoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0oc3RhdGUtPnRhcmdldCwgaXRlbWlkKSk7DQorCQlp dHVwID0gX2J0X2dldGl0ZW0oc3RhdGUtPnRhcmdldCwgb2Zmc2V0LCAmaXR1cGJ1Zik7DQogDQog CQkvKg0KIAkJICogbHBfbGVuIHNob3VsZCBtYXRjaCB0aGUgSW5kZXhUdXBsZSByZXBvcnRlZCBs ZW5ndGggZXhhY3RseSwgc2luY2UNCkBAIC0xNjA2LDcgKzE2NzgsNyBAQCBidF90YXJnZXRfcGFn ZV9jaGVjayhCdHJlZUNoZWNrU3RhdGUgKnN0YXRlKQ0KIAkJCWl0ZW1pZCA9IFBhZ2VHZXRJdGVt SWRDYXJlZnVsKHN0YXRlLCBzdGF0ZS0+dGFyZ2V0YmxvY2ssDQogCQkJCQkJCQkJCSAgc3RhdGUt PnRhcmdldCwNCiAJCQkJCQkJCQkJICBPZmZzZXROdW1iZXJOZXh0KG9mZnNldCkpOw0KLQkJCWl0 dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0oc3RhdGUtPnRhcmdldCwgaXRlbWlkKTsNCisJ CQlpdHVwID0gX2J0X2dldGl0ZW0oc3RhdGUtPnRhcmdldCwgT2Zmc2V0TnVtYmVyTmV4dChvZmZz ZXQpLCAmaXR1cGJ1Zik7DQogCQkJdGlkID0gQlRyZWVUdXBsZUdldFBvaW50c1RvVElEKGl0dXAp Ow0KIAkJCW5odGlkID0gcHNwcmludGYoIigldSwldSkiLA0KIAkJCQkJCQkgSXRlbVBvaW50ZXJH ZXRCbG9ja051bWJlck5vQ2hlY2sodGlkKSwNCkBAIC0xNzkzLDcgKzE4NjUsNyBAQCBidF90YXJn ZXRfcGFnZV9jaGVjayhCdHJlZUNoZWNrU3RhdGUgKnN0YXRlKQ0KIAkJCQkJaXRlbWlkID0gUGFn ZUdldEl0ZW1JZENhcmVmdWwoc3RhdGUsIHJpZ2h0YmxvY2tfbnVtYmVyLA0KIAkJCQkJCQkJCQkJ CSAgcmlnaHRwYWdlLA0KIAkJCQkJCQkJCQkJCSAgcmlnaHRmaXJzdG9mZnNldCk7DQotCQkJCQlp dHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHJpZ2h0cGFnZSwgaXRlbWlkKTsNCisJCQkJ CWl0dXAgPSBfYnRfZ2V0aXRlbShyaWdodHBhZ2UsIHJpZ2h0Zmlyc3RvZmZzZXQsICZjcm9zc2J1 Zik7DQogDQogCQkJCQlidF9lbnRyeV91bmlxdWVfY2hlY2soc3RhdGUsIGl0dXAsIHJpZ2h0Ymxv Y2tfbnVtYmVyLCByaWdodGZpcnN0b2Zmc2V0LCAmbFZpcyk7DQogDQpAQCAtMTg1Nyw2ICsxOTI5 LDggQEAgYnRfcmlnaHRfcGFnZV9jaGVja19zY2Fua2V5KEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUs IE9mZnNldE51bWJlciAqcmlnaHRmaXJzdG9mZnMNCiAJQmxvY2tOdW1iZXIgdGFyZ2V0bmV4dDsN CiAJUGFnZQkJcmlnaHRwYWdlOw0KIAlPZmZzZXROdW1iZXIgbmxpbmU7DQorCU9mZnNldE51bWJl ciByaWdodG9mZnNldDsNCisJQlRJdGVtQnVmCWZpcnN0YnVmOw0KIA0KIAkvKiBEZXRlcm1pbmUg dGFyZ2V0J3MgbmV4dCBibG9jayBudW1iZXIgKi8NCiAJb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVl KHN0YXRlLT50YXJnZXQpOw0KQEAgLTIwMTYsNiArMjA5MCw3IEBAIGJ0X3JpZ2h0X3BhZ2VfY2hl Y2tfc2NhbmtleShCdHJlZUNoZWNrU3RhdGUgKnN0YXRlLCBPZmZzZXROdW1iZXIgKnJpZ2h0Zmly c3RvZmZzDQogCQkvKiBSZXR1cm4gZmlyc3QgZGF0YSBpdGVtIChpZiBhbnkpICovDQogCQlyaWdo dGl0ZW0gPSBQYWdlR2V0SXRlbUlkQ2FyZWZ1bChzdGF0ZSwgdGFyZ2V0bmV4dCwgcmlnaHRwYWdl LA0KIAkJCQkJCQkJCQkgUF9GSVJTVERBVEFLRVkob3BhcXVlKSk7DQorCQlyaWdodG9mZnNldCA9 IFBfRklSU1REQVRBS0VZKG9wYXF1ZSk7DQogCQkqcmlnaHRmaXJzdG9mZnNldCA9IFBfRklSU1RE QVRBS0VZKG9wYXF1ZSk7DQogCX0NCiAJZWxzZSBpZiAoIVBfSVNMRUFGKG9wYXF1ZSkgJiYNCkBA IC0yMDI3LDYgKzIxMDIsNyBAQCBidF9yaWdodF9wYWdlX2NoZWNrX3NjYW5rZXkoQnRyZWVDaGVj a1N0YXRlICpzdGF0ZSwgT2Zmc2V0TnVtYmVyICpyaWdodGZpcnN0b2Zmcw0KIAkJICovDQogCQly aWdodGl0ZW0gPSBQYWdlR2V0SXRlbUlkQ2FyZWZ1bChzdGF0ZSwgdGFyZ2V0bmV4dCwgcmlnaHRw YWdlLA0KIAkJCQkJCQkJCQkgT2Zmc2V0TnVtYmVyTmV4dChQX0ZJUlNUREFUQUtFWShvcGFxdWUp KSk7DQorCQlyaWdodG9mZnNldCA9IE9mZnNldE51bWJlck5leHQoUF9GSVJTVERBVEFLRVkob3Bh cXVlKSk7DQogCX0NCiAJZWxzZQ0KIAl7DQpAQCAtMjA0Niw5ICsyMTIyLDE5IEBAIGJ0X3JpZ2h0 X3BhZ2VfY2hlY2tfc2NhbmtleShCdHJlZUNoZWNrU3RhdGUgKnN0YXRlLCBPZmZzZXROdW1iZXIg KnJpZ2h0Zmlyc3RvZmZzDQogCS8qDQogCSAqIFJldHVybiBmaXJzdCByZWFsIGl0ZW0gc2Nhbmtl eS4gIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiByaWdodCBwYWdlDQogCSAqIG1lbW9yeSByZW1h aW5pbmcgYWxsb2NhdGVkLg0KKwkgKg0KKwkgKiBPbiBhIEJUUF9QUkVGSVggbGVhZiB0aGUgZmly c3QgZGF0YSBpdGVtIGlzIHByZWZpeC1jb2RlZCwgc28gZGVjb2RlIGl0Ow0KKwkgKiBiZWNhdXNl IHRoZSByZXR1cm5lZCBzY2Fua2V5IChidWlsdCBieSBfYnRfbWtzY2Fua2V5KSByZWZlcmVuY2Vz IHRoZQ0KKwkgKiB0dXBsZSdzIG93biBzdG9yYWdlLCBhbmQgX2J0X2dldGl0ZW0gZGVjb2RlcyBp bnRvIGEgYnVmZmVyIGxvY2FsIHRvDQorCSAqIHRoaXMgZnVuY3Rpb24sIGNvcHkgdGhlIGRlY29k ZWQgdHVwbGUgaW50byB0aGUgY2FsbGVyLXJlc2V0IG1lbW9yeQ0KKwkgKiBjb250ZXh0IHNvIGl0 IG91dGxpdmVzIHRoZSBjYWxsLiAgQSBwaXZvdCBvciBub24tcHJlZml4IGl0ZW0gaXMNCisJICog cmV0dXJuZWQgYnkgX2J0X2dldGl0ZW0gdW5jaGFuZ2VkIChpdCBsaXZlcyBpbiB0aGUgcmlnaHQg cGFnZSwgd2hpY2gNCisJICogcmVtYWlucyBhbGxvY2F0ZWQpLCBzbyBubyBjb3B5IGlzIG5lZWRl ZCB0aGVuLg0KIAkgKi8NCi0JZmlyc3RpdHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHJp Z2h0cGFnZSwgcmlnaHRpdGVtKTsNCi0JcmV0dXJuIGJ0X21rc2NhbmtleV9waXZvdHNlYXJjaChz dGF0ZS0+cmVsLCBmaXJzdGl0dXApOw0KKwlmaXJzdGl0dXAgPSBfYnRfZ2V0aXRlbShyaWdodHBh Z2UsIHJpZ2h0b2Zmc2V0LCAmZmlyc3RidWYpOw0KKwlpZiAoZmlyc3RpdHVwID09IChJbmRleFR1 cGxlKSBQYWdlR2V0SXRlbShyaWdodHBhZ2UsIHJpZ2h0aXRlbSkpDQorCQlyZXR1cm4gYnRfbWtz Y2Fua2V5X3Bpdm90c2VhcmNoKHN0YXRlLT5yZWwsIGZpcnN0aXR1cCk7DQorCXJldHVybiBidF9t a3NjYW5rZXlfcGl2b3RzZWFyY2goc3RhdGUtPnJlbCwgQ29weUluZGV4VHVwbGUoZmlyc3RpdHVw KSk7DQogfQ0KIA0KIC8qDQpAQCAtMzA5NSwxNCArMzE4MSwxMyBAQCBzdGF0aWMgaW5saW5lIGJv b2wNCiBpbnZhcmlhbnRfbF9vZmZzZXQoQnRyZWVDaGVja1N0YXRlICpzdGF0ZSwgQlRTY2FuSW5z ZXJ0IGtleSwNCiAJCQkJICAgT2Zmc2V0TnVtYmVyIHVwcGVyYm91bmQpDQogew0KLQlJdGVtSWQJ CWl0ZW1pZDsNCiAJaW50MzIJCWNtcDsNCiANCiAJQXNzZXJ0KCFrZXktPm5leHRrZXkgJiYga2V5 LT5iYWNrd2FyZCk7DQogDQogCS8qIFZlcmlmeSBsaW5lIHBvaW50ZXIgYmVmb3JlIGNoZWNraW5n IHR1cGxlICovDQotCWl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWRDYXJlZnVsKHN0YXRlLCBzdGF0ZS0+ dGFyZ2V0YmxvY2ssIHN0YXRlLT50YXJnZXQsDQotCQkJCQkJCQkgIHVwcGVyYm91bmQpOw0KKwko dm9pZCkgUGFnZUdldEl0ZW1JZENhcmVmdWwoc3RhdGUsIHN0YXRlLT50YXJnZXRibG9jaywgc3Rh dGUtPnRhcmdldCwNCisJCQkJCQkJCXVwcGVyYm91bmQpOw0KIAkvKiBwZ191cGdyYWRlJ2QgaW5k ZXhlcyBtYXkgbGVnYWxseSBoYXZlIGVxdWFsIHNpYmxpbmcgdHVwbGVzICovDQogCWlmICgha2V5 LT5oZWFwa2V5c3BhY2UpDQogCQlyZXR1cm4gaW52YXJpYW50X2xlcV9vZmZzZXQoc3RhdGUsIGtl eSwgdXBwZXJib3VuZCk7DQpAQCAtMzEyMiwxMSArMzIwNywxMiBAQCBpbnZhcmlhbnRfbF9vZmZz ZXQoQnRyZWVDaGVja1N0YXRlICpzdGF0ZSwgQlRTY2FuSW5zZXJ0IGtleSwNCiAJew0KIAkJQlRQ YWdlT3BhcXVlIHRvcGFxdWU7DQogCQlJbmRleFR1cGxlCXJpdHVwOw0KKwkJQlRJdGVtQnVmCXJp dHVwYnVmOw0KIAkJaW50CQkJdXBwbmtleWF0dHM7DQogCQlJdGVtUG9pbnRlciByaGVhcHRpZDsN CiAJCWJvb2wJCW5vbnBpdm90Ow0KIA0KLQkJcml0dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0 ZW0oc3RhdGUtPnRhcmdldCwgaXRlbWlkKTsNCisJCXJpdHVwID0gX2J0X2dldGl0ZW0oc3RhdGUt PnRhcmdldCwgdXBwZXJib3VuZCwgJnJpdHVwYnVmKTsNCiAJCXRvcGFxdWUgPSBCVFBhZ2VHZXRP cGFxdWUoc3RhdGUtPnRhcmdldCk7DQogCQlub25waXZvdCA9IFBfSVNMRUFGKHRvcGFxdWUpICYm IHVwcGVyYm91bmQgPj0gUF9GSVJTVERBVEFLRVkodG9wYXF1ZSk7DQogDQpAQCAtMzIxOCwxNCAr MzMwNCwxMyBAQCBpbnZhcmlhbnRfbF9ub250YXJnZXRfb2Zmc2V0KEJ0cmVlQ2hlY2tTdGF0ZSAq c3RhdGUsIEJUU2Nhbkluc2VydCBrZXksDQogCQkJCQkJCSBCbG9ja051bWJlciBub250YXJnZXRi bG9jaywgUGFnZSBub250YXJnZXQsDQogCQkJCQkJCSBPZmZzZXROdW1iZXIgdXBwZXJib3VuZCkN CiB7DQotCUl0ZW1JZAkJaXRlbWlkOw0KIAlpbnQzMgkJY21wOw0KIA0KIAlBc3NlcnQoIWtleS0+ bmV4dGtleSAmJiBrZXktPmJhY2t3YXJkKTsNCiANCiAJLyogVmVyaWZ5IGxpbmUgcG9pbnRlciBi ZWZvcmUgY2hlY2tpbmcgdHVwbGUgKi8NCi0JaXRlbWlkID0gUGFnZUdldEl0ZW1JZENhcmVmdWwo c3RhdGUsIG5vbnRhcmdldGJsb2NrLCBub250YXJnZXQsDQotCQkJCQkJCQkgIHVwcGVyYm91bmQp Ow0KKwkodm9pZCkgUGFnZUdldEl0ZW1JZENhcmVmdWwoc3RhdGUsIG5vbnRhcmdldGJsb2NrLCBu b250YXJnZXQsDQorCQkJCQkJCQl1cHBlcmJvdW5kKTsNCiAJY21wID0gX2J0X2NvbXBhcmUoc3Rh dGUtPnJlbCwga2V5LCBub250YXJnZXQsIHVwcGVyYm91bmQpOw0KIA0KIAkvKiBwZ191cGdyYWRl J2QgaW5kZXhlcyBtYXkgbGVnYWxseSBoYXZlIGVxdWFsIHNpYmxpbmcgdHVwbGVzICovDQpAQCAt MzIzNiwxMiArMzMyMSwxMyBAQCBpbnZhcmlhbnRfbF9ub250YXJnZXRfb2Zmc2V0KEJ0cmVlQ2hl Y2tTdGF0ZSAqc3RhdGUsIEJUU2Nhbkluc2VydCBrZXksDQogCWlmIChjbXAgPT0gMCkNCiAJew0K IAkJSW5kZXhUdXBsZQljaGlsZDsNCisJCUJUSXRlbUJ1ZgljaGlsZGJ1ZjsNCiAJCWludAkJCXVw cG5rZXlhdHRzOw0KIAkJSXRlbVBvaW50ZXIgY2hpbGRoZWFwdGlkOw0KIAkJQlRQYWdlT3BhcXVl IGNvcGFxdWU7DQogCQlib29sCQlub25waXZvdDsNCiANCi0JCWNoaWxkID0gKEluZGV4VHVwbGUp IFBhZ2VHZXRJdGVtKG5vbnRhcmdldCwgaXRlbWlkKTsNCisJCWNoaWxkID0gX2J0X2dldGl0ZW0o bm9udGFyZ2V0LCB1cHBlcmJvdW5kLCAmY2hpbGRidWYpOw0KIAkJY29wYXF1ZSA9IEJUUGFnZUdl dE9wYXF1ZShub250YXJnZXQpOw0KIAkJbm9ucGl2b3QgPSBQX0lTTEVBRihjb3BhcXVlKSAmJiB1 cHBlcmJvdW5kID49IFBfRklSU1REQVRBS0VZKGNvcGFxdWUpOw0KIA0KZGlmZiAtLWdpdCBhL2Rv Yy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0 ZV9pbmRleC5zZ21sDQppbmRleCBiYjc1MDVkMTcxYi4uN2U2Njc2NWMzZDMgMTAwNjQ0DQotLS0g YS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sDQorKysgYi9kb2Mvc3JjL3NnbWwv cmVmL2NyZWF0ZV9pbmRleC5zZ21sDQpAQCAtNDc3LDYgKzQ3Nyw0MSBAQCBDUkVBVEUgWyBVTklR VUUgXSBJTkRFWCBbIENPTkNVUlJFTlRMWSBdIFsgWyBJRiBOT1QgRVhJU1RTIF0gPHJlcGxhY2Vh YmxlIGNsYXNzPQ0KICAgICA8L25vdGU+DQogICAgIDwvbGlzdGl0ZW0+DQogICAgPC92YXJsaXN0 ZW50cnk+DQorDQorICAgPHZhcmxpc3RlbnRyeSBpZD0iaW5kZXgtcmVsb3B0aW9uLXByZWZpeC1j b21wcmVzc2lvbiIgeHJlZmxhYmVsPSJwcmVmaXhfY29tcHJlc3Npb24iPg0KKyAgICA8dGVybT48 bGl0ZXJhbD5wcmVmaXhfY29tcHJlc3Npb248L2xpdGVyYWw+ICg8dHlwZT5ib29sZWFuPC90eXBl PikNCisgICAgIDxpbmRleHRlcm0+DQorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cHJlZml4X2Nv bXByZXNzaW9uPC92YXJuYW1lPiBzdG9yYWdlIHBhcmFtZXRlcjwvcHJpbWFyeT4NCisgICAgIDwv aW5kZXh0ZXJtPg0KKyAgICA8L3Rlcm0+DQorICAgIDxsaXN0aXRlbT4NCisgICAgPHBhcmE+DQor ICAgICAgQ29udHJvbHMgbGVhZiBrZXkgcHJlZml4IGNvbXByZXNzaW9uLiAgV2hlbiBzZXQgdG8N CisgICAgICA8bGl0ZXJhbD5PTjwvbGl0ZXJhbD4sIGFuZCB0aGUgaW5kZXgncyBmaXJzdCBrZXkg Y29sdW1uIGlzIG9mIGENCisgICAgICB2YXJpYWJsZS1sZW5ndGggdHlwZSwgYSBsZWFmIHBhZ2Ug bWF5IHN0b3JlIGEgc2hhcmVkIHByZWZpeCBvZiB0aGF0DQorICAgICAgY29sdW1uIG9uY2UgYW5k IHJlY29yZCBvbmx5IGVhY2ggdHVwbGUncyB1bnNoYXJlZCByZW1haW5kZXIsIHdoaWNoIGNhbg0K KyAgICAgIHN1YnN0YW50aWFsbHkgc2hyaW5rIGluZGV4ZXMgb24ga2V5cyB0aGF0IHNoYXJlIGxv bmcgbGVhZGluZyBieXRlcw0KKyAgICAgIChmb3IgZXhhbXBsZSBVUkxzIG9yIDx0eXBlPmpzb25i PC90eXBlPiBrZXlzIHdpdGggY29tbW9uIHBhdGhzKS4gIFNldA0KKyAgICAgIHRvIDxsaXRlcmFs Pk9OPC9saXRlcmFsPiBvciA8bGl0ZXJhbD5PRkY8L2xpdGVyYWw+IHRvIGVuYWJsZSBvciBkaXNh YmxlDQorICAgICAgdGhlIG9wdGltaXphdGlvbi4gIFRoZSBkZWZhdWx0IGlzIDxsaXRlcmFsPk9G RjwvbGl0ZXJhbD4uDQorICAgIDwvcGFyYT4NCisNCisgICAgPG5vdGU+DQorICAgICA8cGFyYT4N CisgICAgICBQcmVmaXggY29tcHJlc3Npb24gb25seSBjaGFuZ2VzIGhvdyBrZXlzIGFyZSBzdG9y ZWQ7IGNvbXBhcmlzb25zIGFsd2F5cw0KKyAgICAgIHNlZSB0aGUgb3JpZ2luYWwga2V5IHZhbHVl cywgc28gZXZlcnkgY29sbGF0aW9uIGFuZCBvcGVyYXRvciBjbGFzcw0KKyAgICAgIGJlaGF2ZXMg aWRlbnRpY2FsbHkgd2l0aCBpdCBvbiBvciBvZmYuICBBIGxlYWYgYWRvcHRzIGEgcHJlZml4IG9u bHkgd2hlbg0KKyAgICAgIGl0IGlzIHdyaXR0ZW4gYXMgYSB3aG9sZSAoZHVyaW5nIGFuIGluZGV4 IGJ1aWxkLCBvciBlaXRoZXIgaGFsZiBvZiBhDQorICAgICAgcGFnZSBzcGxpdCksIHNvIHR1cm5p bmcgPGxpdGVyYWw+cHJlZml4X2NvbXByZXNzaW9uPC9saXRlcmFsPiBvbiBvciBvZmYNCisgICAg ICB2aWEgPGNvbW1hbmQ+QUxURVIgSU5ERVg8L2NvbW1hbmQ+IGRvZXMgbm90IHJld3JpdGUgdGhl IGluZGV4OiBleGlzdGluZw0KKyAgICAgIHBhZ2VzIGFyZSBsZWZ0IGFzIHRoZXkgYXJlIGFuZCBh cmUgY29udmVydGVkIHRoZSBuZXh0IHRpbWUgdGhleSBhcmUNCisgICAgICB3cml0dGVuIHdob2xl LiAgTm8gPGNvbW1hbmQ+UkVJTkRFWDwvY29tbWFuZD4gaXMgcmVxdWlyZWQsIGFuZCBpbmRleGVz DQorICAgICAgdXBncmFkZWQgd2l0aCA8YXBwbGljYXRpb24+cGdfdXBncmFkZTwvYXBwbGljYXRp b24+IGtlZXAgd29ya2luZw0KKyAgICAgIHVuY2hhbmdlZC4NCisgICAgIDwvcGFyYT4NCisgICAg PC9ub3RlPg0KKyAgICA8L2xpc3RpdGVtPg0KKyAgIDwvdmFybGlzdGVudHJ5Pg0KICAgIDwvdmFy aWFibGVsaXN0Pg0KIA0KICAgIDxwYXJhPg0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9jb21tb24vcmVsb3B0aW9ucy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRp b25zLmMNCmluZGV4IGVhOWEwNDE3OTA5Li5iZTFmY2Q5YTE1YiAxMDA2NDQNCi0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jDQorKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvY29tbW9uL3JlbG9wdGlvbnMuYw0KQEAgLTE1Myw2ICsxNTMsMTYgQEAgc3RhdGljIHJlbG9w dF9ib29sIGJvb2xSZWxPcHRzW10gPQ0KIAkJfSwNCiAJCXRydWUNCiAJfSwNCisJew0KKwkJew0K KwkJCSJwcmVmaXhfY29tcHJlc3Npb24iLA0KKwkJCSJFbmFibGVzIGxlYWYga2V5IHByZWZpeCBj b21wcmVzc2lvbiBmb3IgdGhpcyBidHJlZSBpbmRleCIsDQorCQkJUkVMT1BUX0tJTkRfQlRSRUUs DQorCQkJU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrCS8qIHNpbmNlIGl0IGFwcGxpZXMgb25seSB0 byBsYXRlcg0KKwkJCQkJCQkJCQkgKiB3aG9sZS1wYWdlIHdyaXRlcyAqLw0KKwkJfSwNCisJCWZh bHNlDQorCX0sDQogCS8qIGxpc3QgdGVybWluYXRvciAqLw0KIAl7e05VTEx9fQ0KIH07DQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9NYWtlZmlsZSBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvTWFrZWZpbGUNCmluZGV4IDBkYWY2NDBhZjk2Li4wMDQ0ZDc3ZjU0OCAx MDA2NDQNCi0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvTWFrZWZpbGUNCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvTWFrZWZpbGUNCkBAIC0xOCw2ICsxOCw3IEBAIE9CSlMg PSBcDQogCW5idGluc2VydC5vIFwNCiAJbmJ0cGFnZS5vIFwNCiAJbmJ0cHJlcHJvY2Vzc2tleXMu byBcDQorCW5idHByZWZpeC5vIFwNCiAJbmJ0cmVhZHBhZ2UubyBcDQogCW5idHJlZS5vIFwNCiAJ bmJ0c2VhcmNoLm8gXA0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVB RE1FIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUNCmluZGV4IGYzODY3NTQ3Njkx Li41OTZlNTk1ZjIwYiAxMDA2NDQNCi0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVB RE1FDQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRQ0KQEAgLTEwODEsMyAr MTA4MSwxMDAgQEAgaXRlbSBpcyBpcnJlbGV2YW50LCBhbmQgbmVlZCBub3QgYmUgc3RvcmVkIGF0 IGFsbC4gIFRoaXMgYXJyYW5nZW1lbnQNCiBjb3JyZXNwb25kcyB0byB0aGUgZmFjdCB0aGF0IGFu IEwmWSBub24tbGVhZiBwYWdlIGhhcyBvbmUgbW9yZSBwb2ludGVyDQogdGhhbiBrZXkuICBTdWZm aXggdHJ1bmNhdGlvbidzIG5lZ2F0aXZlIGluZmluaXR5IGF0dHJpYnV0ZXMgYmVoYXZlIGluDQog dGhlIHNhbWUgd2F5Lg0KKw0KK05vdGVzIGFib3V0IGxlYWYga2V5IHByZWZpeCBjb21wcmVzc2lv bg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCitXaXRoIHRo ZSBwcmVmaXhfY29tcHJlc3Npb24gc3RvcmFnZSBwYXJhbWV0ZXIgKGRlZmF1bHQgb2ZmKSBhIGxl YWYgcGFnZSBtYXkNCitmcm9udC1jb2RlIHRoZSBmaXJzdCBrZXkgY29sdW1uIG9mIGVhY2ggb2Yg aXRzIGRhdGEgdHVwbGVzIGFnYWluc3QgYSBwZXItcGFnZQ0KK3ByZWZpeCwgd2hpY2ggc2hyaW5r cyBpbmRleGVzIG9uIGtleXMgdGhhdCBzaGFyZSBsb25nIGxlYWRpbmcgYnl0ZXMgKFVSTHMsDQor anNvbmIga2V5cyB3aXRoIGNvbW1vbiBwYXRocywgemVyby1wYWRkZWQgY29kZXMpLiAgTGlrZSBk ZWR1cGxpY2F0aW9uLCB0aGlzDQorYWx0ZXJzIHRoZSBwaHlzaWNhbCByZXByZXNlbnRhdGlvbiBv ZiB0dXBsZXMgd2l0aG91dCBjaGFuZ2luZyB0aGUgbG9naWNhbA0KK2NvbnRlbnRzIG9mIHRoZSBp bmRleCwgYW5kIGNvbXBhcmlzb25zIGFsd2F5cyBvcGVyYXRlIG9uIHRoZSByZWNvbnN0cnVjdGVk DQorb3JpZ2luYWwgdmFsdWVzLCBzbyBldmVyeSBjb2xsYXRpb24gYW5kIG9wZXJhdG9yIGNsYXNz IGlzIHVuYWZmZWN0ZWQuDQorDQorQSBsZWFmIHRoYXQgdXNlcyB0aGUgdGVjaG5pcXVlIGNhcnJp ZXMgdGhlIEJUUF9QUkVGSVggcGFnZSBmbGFnIGFuZCBvbmUgZXh0cmENCitpdGVtLCB0aGUgUFJF RklYIGl0ZW0sIGF0IHRoZSBvZmZzZXQgd2hlcmUgaXRzIGZpcnN0IGRhdGEgaXRlbSB3b3VsZCBv dGhlcndpc2UNCitiZSAoUF9ISUtFWSBvbiBhIHJpZ2h0bW9zdCBwYWdlLCBQX0ZJUlNUS0VZIG90 aGVyd2lzZSk7IGRhdGEgaXRlbXMgYmVnaW4gb25lDQorb2Zmc2V0IGxhdGVyLCB3aGljaCBQX0ZJ UlNUREFUQUtFWSgpIGFjY291bnRzIGZvci4gIFRoZSBQUkVGSVggaXRlbSBpcyBhbg0KK0luZGV4 VHVwbGVEYXRhIGhlYWRlciBmb2xsb3dlZCBieSAxLi5CVFJFRV9QUkVGSVhfTUFYIHByZWZpeCBi eXRlcywgc2hhcGVkIHNvDQordGhhdCBjb2RlIHdoaWNoIHdhbGtzIGEgcGFnZSdzIGl0ZW1zIGJ5 IEluZGV4VHVwbGVTaXplIChzdWNoIGFzDQorX2J0X3Jlc3RvcmVfcGFnZSkgc3RlcHMgb3ZlciBp dC4gIE9uIHN1Y2ggYSBwYWdlIGV2ZXJ5IG5vbi1waXZvdCB0dXBsZSAocGxhaW4NCitvciBwb3N0 aW5nKSB3aG9zZSBmaXJzdCBrZXkgY29sdW1uIGlzIG5vdCBOVUxMIHN0b3JlcyB0aGF0IGNvbHVt biBhcyBhIHZhcmxlbmENCit3aG9zZSBwYXlsb2FkIGJlZ2lucyB3aXRoIGEgb25lLWJ5dGUgY291 bnQgb2YgaG93IG1hbnkgbGVhZGluZyBieXRlcyBpdCBzaGFyZXMNCit3aXRoIHRoZSBwYWdlIHBy ZWZpeCwgZm9sbG93ZWQgYnkgdGhlIHVuc2hhcmVkIHJlbWFpbmRlciAob3IsIGZvciBhIHZhbHVl IHdob3NlDQoraGVhZGVyIGlzIG5vdCB0aGUgZm9ybSBpbmRleF9mb3JtX3R1cGxlIHdvdWxkIHJl cHJvZHVjZSwgdGhlIHdob2xlIHZhbHVlIGFmdGVyDQorYSBzZW50aW5lbCBjb3VudCkuICBUcmFp bGluZyBrZXkgY29sdW1ucywgSU5DTFVERSBjb2x1bW5zLCBhIHBvc3RpbmcgbGlzdCBhbmQNCith bGlnbm1lbnQgcGFkZGluZyBmb2xsb3csIG1vdmVkIHRvIHByZXNlcnZlIGFsaWdubWVudDsgcGFk ZGluZyB0aGF0IGlzIG9ubHkgdGhlDQora2V5J3MgY2xvc2luZyB6ZXJvcyBpcyBkcm9wcGVkIGFu ZCByZXN0b3JlZCBvbiBkZWNvZGUuICBQaXZvdHMsIE5VTEwgZmlyc3QNCitjb2x1bW5zIGFuZCB0 aGUgaGlnaCBrZXkgYXJlIGFsd2F5cyBzdG9yZWQgdW5jb21wcmVzc2VkLiAgQ29kaW5nIGFuZCBk ZWNvZGluZw0KK2RlcGVuZCBvbmx5IG9uIHRoZSBwYWdlIHByZWZpeCBhbmQgdGhlIHR1cGxlLCBu ZXZlciB0aGUgY2F0YWxvZywgc28gV0FMIHJlZG8NCityZXByb2R1Y2VzIHRoZW0gYW5kIGRlY29k aW5nIHlpZWxkcyB0aGUgb3JpZ2luYWwgdHVwbGUgYnl0ZSBmb3IgYnl0ZS4gIEFsbCBvZg0KK25i dHByZWZpeC5jIGltcGxlbWVudHMgdGhpczsgX2J0X2dldGl0ZW0oKSBpcyB0aGUgb25lIGFjY2Vz c29yIHRocm91Z2ggd2hpY2gNCityZWFkZXJzIG9idGFpbiBhIGRlY29kZWQgbGVhZiBkYXRhIHR1 cGxlLg0KKw0KK0EgcGFnZSBhZG9wdHMgYSBwcmVmaXggb25seSB3aGVuIGl0IGlzIHdyaXR0ZW4g YXMgYSB3aG9sZTogYSBmaW5pc2hlZCBsZWFmDQorZHVyaW5nIGFuIGluZGV4IGJ1aWxkLCBvciBl aXRoZXIgaGFsZiBvZiBhIGxlYWYgcGFnZSBzcGxpdCAoYnVpbHQgY29kZWQgZnJvbQ0KK3RoZSBz dGFydCBieSBfYnRfc3BsaXRfbGVhZl9oYWxmLCBzaW5jZSBhIGNvbXByZXNzZWQgbGVhZiBjYW4g aG9sZCBtb3JlIGxvZ2ljYWwNCitkYXRhIHRoYW4gZml0cyBvbiBhIHBsYWluIHBhZ2UsIGNob29z aW5nIGVhY2ggaGFsZidzIG93biBwcmVmaXggYW5kIGZhbGxpbmcNCitiYWNrIHRvIGEgcGxhaW4g bGF5b3V0IG9yIHRoZSBvcmlnaW5hbCBwYWdlJ3MgcHJlZml4IGlmIGl0cyBvd24gZG9lcyBub3Qg Zml0KS4NCitDcnVjaWFsbHksIG5vIGluc2VydCwgVkFDVVVNLCBkZWR1cGxpY2F0aW9uIG9yIGNo YW5nZSBvZiBhIHBhZ2UncyBrZXkgcmFuZ2UNCitldmVyIHJld3JpdGVzIGEgcGFnZSB0byBrZWVw IGl0cyBwcmVmaXggdmFsaWQ6IGEgdHVwbGUgdGhhdCBoYXBwZW5zIHRvIHNoYXJlDQorZmV3ZXIg Ynl0ZXMgc2ltcGx5IHJlY29yZHMgYSBzbWFsbGVyIHNoYXJlZCBjb3VudC4gIEJlY2F1c2UgdGhl IGZvcm1hdCBpcyBhDQorcGVyLXBhZ2Ugb3B0LWluIGZsYWcgd2l0aCBubyBidHJlZSB2ZXJzaW9u IGNoYW5nZSwgcGFnZXMgd2l0aG91dCB0aGUgZmxhZyBhcmUNCityZWFkIGV4YWN0bHkgYXMgYmVm b3JlLCBzbyBwZ191cGdyYWRlIGFuZCBwaHlzaWNhbC9sb2dpY2FsIHJlcGxpY2F0aW9uIGtlZXAN Cit3b3JraW5nIGFuZCBleGlzdGluZyBpbmRleGVzIGNvbnRpbnVlIHRvIHdvcmsgd2l0aCBubyBS RUlOREVYLiAgVHVybmluZyB0aGUNCitwYXJhbWV0ZXIgb24gd2l0aCBBTFRFUiBJTkRFWCBkb2Vz IG5vdCByZXdyaXRlIGFueXRoaW5nOyBlYWNoIGxlYWYgaXMgY29udmVydGVkDQordGhlIG5leHQg dGltZSBpdCBpcyB3cml0dGVuIHdob2xlLCBhbmQgY29tcHJlc3NlZCBhbmQgdW5jb21wcmVzc2Vk IGxlYXZlcw0KK2NvZXhpc3QgaW4gdGhlIHNhbWUgaW5kZXggaW5kZWZpbml0ZWx5LiAgVHVybmlu ZyBpdCBvZmYgbGlrZXdpc2UgcmV3cml0ZXMNCitub3RoaW5nOiBleGlzdGluZyBCVFBfUFJFRklY IGxlYXZlcyBrZWVwIHRoZWlyIGNvZGVkIGZvcm0gKHRoZSBmbGFnIGlzIGNsZWFyZWQNCitvbmx5 IHdoZW4gYSBwYWdlIGlzIHNwbGl0LCBlbXB0aWVkIG9yIGRlZHVwLXJld3JpdHRlbikgYW5kIGFy ZSBzdGlsbCByZWFkIGJhY2sNCitjb3JyZWN0bHkgd2l0aCB0aGUgcGFyYW1ldGVyIG9mZiwgc2lu Y2UgZXZlcnkgcmVhZGVyIGRlY29kZXMgYmFzZWQgb24gdGhlIHBhZ2UNCitmbGFnLCBub3Qgb24g dGhlIGN1cnJlbnQgcmVsb3B0aW9uLiAgU2Nhbi10aW1lIHdvcmtzcGFjZSB0aGF0IG11c3QgaG9s ZCBkZWNvZGVkDQordHVwbGVzICh0aGUgaW5kZXgtb25seS1zY2FuIGN1cnJUdXBsZXMvbWFya1R1 cGxlcyBidWZmZXJzLCBzZWUNCitCVFR1cGxlU3RvcmFnZVNpemUpIGlzIHRoZXJlZm9yZSBzaXpl ZCBmb3IgYSBkZWNvZGVkIHBhZ2Ugb24gZXZlcnkgYnRyZWUgaW5kZXgsDQorbm90IGp1c3QgdGhv c2Ugd2hvc2UgcGFyYW1ldGVyIGlzIGN1cnJlbnRseSBvbi4NCisNCitMZWFmIGNoYW5nZXMgdG8g YSBwcmVmaXggcGFnZSBhcmUgcmVwbGF5ZWQgd2l0aG91dCBhIGZ1bGwtcGFnZSBpbWFnZSBpbiB0 aGUNCitjb21tb24gY2FzZS4gIFJlZG8gY2Fubm90IHJ1biB0aGUgcHJlZml4LWNob29zaW5nIGhl dXJpc3RpYyAoaXQgaGFzIG5vDQorcmVsY2FjaGUpLCBzbyB0aGUgcHJpbWFyeSBsb2dzIHRoZSBw cmVmaXggaXQgY2hvc2UgYW5kIGJvdGggc2lkZXMgbGF5IHRoZQ0KK3BhZ2Ugb3V0IHRocm91Z2gg b25lIFJlbGF0aW9uLWZyZWUgcm91dGluZSwgX2J0X3NwbGl0X2xlYWZfbGF5b3V0KCksIGZlZCBi eQ0KK29uZSBpdGVtLWNvbGxlY3Rpb24gcm91dGluZSwgX2J0X3NwbGl0X2xlYWZfY29sbGVjdCgp LCB0aGF0IHRoZSBwcmltYXJ5DQorKF9idF9zcGxpdCkgYW5kIHJlZG8gKGJ0cmVlX3hsb2dfc3Bs aXQpIGJvdGggY2FsbC4gIEJlY2F1c2UgdGhlIHR3byBkZXJpdmUNCit0aGUgcGxhaW4gaXRlbSBz ZXF1ZW5jZSB0aGUgc2FtZSB3YXkgYW5kIGNvZGUgaXQgYWdhaW5zdCB0aGUgc2FtZSBsb2dnZWQN CitwcmVmaXgsIHRoZXkgcHJvZHVjZSBieXRlLWlkZW50aWNhbCBwYWdlcy4gIEFuIGluLXBsYWNl IGluc2VydCBsb2dzIHRoZSBjb2RlZA0KK3R1cGxlIChzdGFuZGFyZCBpbnNlcnQgcmVkbyBhZGRz IGl0IHZlcmJhdGltKTsgYSBzcGxpdCBsb2dzIGVhY2ggaGFsZidzDQorY2hvc2VuIHByZWZpeCBw bHVzIHRoZSByaWdodCBoYWxmJ3MgcGxhaW4gaXRlbXM7IGEgZGVkdXBsaWNhdGlvbiBsb2dzIHRo ZQ0KK2Nob3NlbiBwcmVmaXggcGx1cyB0aGUgZGVkdXBlZCBwbGFpbiBpdGVtcy4gIEEgYm91bmRl ZCBmYWxsYmFjayBmb3JjZXMgYQ0KK2Z1bGwtcGFnZSBpbWFnZSBvbmx5IHdoZW4gYSBwYXRob2xv Z2ljYWxseSBjb21wcmVzc2libGUgcGFnZSdzIHBsYWluIHBheWxvYWQNCit3b3VsZCBleGNlZWQg QkxDS1NaIChzbyB0aGUgbG9nZ2VkIHBheWxvYWQgY2FuIG5ldmVyIGV4Y2VlZCBvbmUgYmxvY2sp OyByZWRvDQordGhlbiByZXN0b3JlcyB0aGUgaW1hZ2UgdmlhIEJMS19SRVNUT1JFRC4gIFdoZW4g VkFDVVVNIG9yIHBhZ2UgZGVsZXRpb24NCitlbXB0aWVzIGEgcHJlZml4IGxlYWYsIHRoZSBQUkVG SVggaXRlbSBpcyByZW1vdmVkIGFuZCB0aGUgZmxhZyBjbGVhcmVkIHNvIHRoYXQNCit0aGUgaW52 YXJpYW50IHRoYXQgYW4gZW1wdGllZCBsZWFmIGhvbGRzIG9ubHkgaXRzIGhpZ2gga2V5IChyZWxp ZWQgb24gYnkgcGFnZQ0KK2RlbGV0aW9uKSBzdGlsbCBob2xkcy4NCisNCitEZWR1cGxpY2F0aW9u IGFuZCBib3R0b20tdXAgaW5kZXggZGVsZXRpb24gYm90aCBydW4gb24gQlRQX1BSRUZJWCBwYWdl cy4NCitCb3R0b20tdXAgZGVsZXRpb24gb25seSByZW1vdmVzIGl0ZW1zIGFuZCBuZXZlciByZXdy aXRlcyBzdXJ2aXZvcnMsIHNvIGl0IGlzDQorc2FmZSBvbiBjb2RlZCBwYWdlcyB1bmNoYW5nZWQu ICBBIGRlZHVwbGljYXRpb24gcGFzcyBkZWNvZGVzIHRoZSBwYWdlJ3MgaXRlbXMsDQorbWVyZ2Vz IGR1cGxpY2F0ZXMgaW50byBwb3N0aW5nIGxpc3RzIGFuZCByZS1jb21wcmVzc2VzIHRoZSByZXN1 bHQgYXMgYSB3aG9sZTsNCitiZWNhdXNlIGEgY29kZWQgcGFnZSBjYW4gaG9sZCBtb3JlIGxvZ2lj YWwgZGF0YSB0aGFuIGZpdHMgcGxhaW4sIGlmIHRoZQ0KK2RlY29kZWQgc2V0IHdvdWxkIG92ZXJm bG93IGEgcGxhaW4gcGFnZSB0aGUgcGFzcyBhYm9ydHMgY2xlYW5seSBhbmQgdGhlIHBhZ2UNCitz cGxpdHMgaW5zdGVhZCwgc28gbm8gaW4tcGxhY2UgcmV3cml0ZSBpcyBldmVyIGZvcmNlZCB0byBm YWlsLiAgQW4gaW5kZXggYnVpbGQNCitkZWR1cGxpY2F0ZXMgYmVmb3JlIGNvZGluZyB0aGUgZmlu aXNoZWQgcGFnZSwgc28gYSBkdXBsaWNhdGUtaGVhdnkgcHJlZml4DQoraW5kZXggaXMgbm8gbGFy Z2VyIHRoYW4gYSBwbGFpbiBvbmUuDQorDQorUHJlZml4IGNvbXByZXNzaW9uIGlzIGEgc2VwYXJh dGUgbWVjaGFuaXNtIGZyb20gZGVkdXBsaWNhdGlvbiByYXRoZXIgdGhhbiBhbg0KK2V4dGVuc2lv biBvZiBpdCBiZWNhdXNlIHRoZSB0d28gYXR0YWNrIGRpZmZlcmVudCByZWR1bmRhbmN5LiAgRGVk dXBsaWNhdGlvbg0KK2NvbGxhcHNlcyB0dXBsZXMgd2hvc2Ugd2hvbGUga2V5IGlzICplcXVhbCog aW50byBvbmUgcG9zdGluZyBsaXN0IHR1cGxlOyBpdA0KK2RvZXMgbm90aGluZyBmb3Iga2V5cyB0 aGF0IGFyZSBhbGwgZGlzdGluY3QuICBQcmVmaXggY29tcHJlc3Npb24gZmFjdG9ycyBvdXQgYQ0K K2xlYWRpbmcgYnl0ZSBydW4gc2hhcmVkIGJ5ICpkaXN0aW5jdCoga2V5cyBhbmQgbGVhdmVzIHRo ZWlyIGRpZmZlcmluZyBzdWZmaXhlcw0KK2Fsb25lOyBpdCBkb2VzIG5vdGhpbmcgZm9yIGV4YWN0 IGR1cGxpY2F0ZXMgdGhhdCBhIHBvc3RpbmcgbGlzdCBhbHJlYWR5DQorY29sbGFwc2VzLiAgVGhl IGNvbW1vbiBjYXNlIHRoaXMgdGFyZ2V0cyAtLSBhIFVSTCBvciBqc29uYi1wYXRoIGNvbHVtbiB3 aG9zZQ0KK3ZhbHVlcyBhcmUgZGlzdGluY3QgYnV0IHNoYXJlIGEgbG9uZyBwcmVmaXggLS0gaXMg ZXhhY3RseSB3aGVyZSBkZWR1cGxpY2F0aW9uDQorZG9lcyBub3QgaGVscC4gIFRoZSB0d28gY29t cG9zZSBvbiBvbmUgcGFnZSAoZGVkdXBsaWNhdGUgZmlyc3QsIHRoZW4gY29kZSB0aGUNCitzdXJ2 aXZvcnMpLCB3aGljaCBpcyB3aHkgYSBidWlsZCBhcHBsaWVzIGJvdGguICBSZXVzaW5nIHRoZSBw b3N0aW5nLWxpc3QNCitmb3JtYXQgdG8gY2FycnkgYSBzaGFyZWQgcHJlZml4IHdhcyBjb25zaWRl cmVkIGFuZCByZWplY3RlZDogYSBwb3N0aW5nIGxpc3QNCitzdG9yZXMgb25lIGtleSBwbHVzIG1h bnkgVElEcywgd2hlcmVhcyBwcmVmaXggY29kaW5nIHN0b3JlcyBtYW55IGtleXMgdGhhdA0KK3No YXJlIGEgcHJlZml4LCBzbyB0aGUgdHdvIHdvdWxkIG5lZWQgZGlmZmVyZW50IHBlci1pdGVtIGxh eW91dHMgYW55d2F5LCBhbmQNCitvdmVybG9hZGluZyBwb3N0aW5nIGxpc3RzIHdvdWxkIGVudGFu Z2xlIHRoZSBkZWR1cGxpY2F0aW9uIGFuZCBjb21wcmVzc2lvbg0KK3BhdGhzIHRoYXQgYXJlIGtl cHQgc2VwYXJhdGUgaGVyZSBvbiBwdXJwb3NlLg0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL21lc29u LmJ1aWxkDQppbmRleCA4MTJmMDY3ZTcxMC4uY2JkMzQyMDEzMjggMTAwNjQ0DQotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL21lc29uLmJ1aWxkDQorKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL21lc29uLmJ1aWxkDQpAQCAtNiw2ICs2LDcgQEAgYmFja2VuZF9zb3VyY2VzICs9 IGZpbGVzKA0KICAgJ25idGluc2VydC5jJywNCiAgICduYnRwYWdlLmMnLA0KICAgJ25idHByZXBy b2Nlc3NrZXlzLmMnLA0KKyAgJ25idHByZWZpeC5jJywNCiAgICduYnRyZWFkcGFnZS5jJywNCiAg ICduYnRyZWUuYycsDQogICAnbmJ0c2VhcmNoLmMnLA0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0ZGVkdXAuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 ZGVkdXAuYw0KaW5kZXggYWY3YWZmZGY0MDkuLjEyYWEyNTJhYTA1IDEwMDY0NA0KLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRkZWR1cC5jDQorKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idGRlZHVwLmMNCkBAIC0xOSw2ICsxOSw3IEBADQogI2luY2x1ZGUgImFjY2Vz cy90YWJsZWFtLmgiDQogI2luY2x1ZGUgImFjY2Vzcy94bG9naW5zZXJ0LmgiDQogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIg0KKyNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCINCiAjaW5j bHVkZSAidXRpbHMvcmVsLmgiDQogDQogc3RhdGljIHZvaWQgX2J0X2JvdHRvbXVwZGVsX2Zpbmlz aF9wZW5kaW5nKFBhZ2UgcGFnZSwgQlREZWR1cFN0YXRlIHN0YXRlLA0KQEAgLTY5LDcgKzcwLDE5 IEBAIF9idF9kZWR1cF9wYXNzKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5kZXhUdXBsZSBu ZXdpdGVtLCBTaXplIG5ld2l0ZW1zeiwNCiAJU2l6ZQkJcGFnZXNhdmluZyBQR19VU0VEX0ZPUl9B U1NFUlRTX09OTFkgPSAwOw0KIAlib29sCQlzaW5nbGV2YWxzdHJhdCA9IGZhbHNlOw0KIAlpbnQJ CQlua2V5YXR0cyA9IEluZGV4UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMocmVsKTsN CisJYm9vbAkJcGFnZXByZWZpeCA9IFBfSEFTUFJFRklYKG9wYXF1ZSk7DQorCUJUSXRlbUJ1Zglj dXJidWY7CQkJLyogZGVjb2RlIHNjcmF0Y2ggZm9yIHRoZSBsb29wJ3MgY3VycmVudCBpdGVtICov DQorCUJUSXRlbUJ1ZgliYXNlYnVmOwkJLyogZGVjb2RlIHNjcmF0Y2gga2VwdCBmb3IgdGhlIHBl bmRpbmcgYmFzZSAqLw0KIAlYTG9nUmVjUHRyCXJlY3B0cjsNCisJSW5kZXhUdXBsZSAqZGVkdXBf cGxhaW4gPSBOVUxMOwkvKiBkZWR1cGVkIHBsYWluIGl0ZW1zLCBmb3IgcHJlZml4IFdBTCAqLw0K KwlpbnQJCQlkZWR1cF9ucGxhaW4gPSAwOw0KKwlJbmRleFR1cGxlCWRlZHVwX2hpa2V5ID0gTlVM TDsNCisJY2hhcgkJZGVkdXBfcHJlZml4W0JUUkVFX1BSRUZJWF9NQVhdOw0KKwlTaXplCQlkZWR1 cF9wcmVmaXhsZW4gPSAwOw0KKwlib29sCQlkZWR1cF9pc2xvZ3ByZWZpeCA9IGZhbHNlOwkvKiBw YWdlIGVuZGVkIHVwIHByZWZpeC1jb2RlZCAqLw0KKwljaGFyCSAgICpkZWR1cF93YWxidWYgPSBO VUxMOwkvKiBwYWNrZWQgcHJlZml4LWRlZHVwIFdBTCBwYXlsb2FkICovDQorCVNpemUJCWRlZHVw X3dhbGJ1ZmxlbiA9IDA7DQorCWJvb2wJCWRlZHVwX3JmcGkgPSBmYWxzZTsJLyogZmFsbCBiYWNr IHRvIGEgZm9yY2VkIGZ1bGwtcGFnZSBpbWFnZSAqLw0KIA0KIAkvKiBQYXNzZWQtaW4gbmV3aXRl bXN6IGlzIE1BWEFMSUdORUQgYnV0IGRvZXMgbm90IGluY2x1ZGUgbGluZSBwb2ludGVyICovDQog CW5ld2l0ZW1zeiArPSBzaXplb2YoSXRlbUlkRGF0YSk7DQpAQCAtMTIwLDcgKzEzMywxNiBAQCBf YnRfZGVkdXBfcGFzcyhSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsIEluZGV4VHVwbGUgbmV3aXRl bSwgU2l6ZSBuZXdpdGVtc3osDQogCW5ld3BhZ2UgPSBQYWdlR2V0VGVtcFBhZ2VDb3B5U3BlY2lh bChwYWdlKTsNCiAJUGFnZVNldExTTihuZXdwYWdlLCBQYWdlR2V0TFNOKHBhZ2UpKTsNCiANCi0J LyogQ29weSBoaWdoIGtleSwgaWYgYW55ICovDQorCS8qDQorCSAqIFRoZSByZWJ1aWx0IHBhZ2Ug aXMgbGFpZCBvdXQgcGxhaW4gaGVyZSAoY2xlYXIgYW55IGluaGVyaXRlZCBCVFBfUFJFRklYOw0K KwkgKiBQYWdlR2V0VGVtcFBhZ2VDb3B5U3BlY2lhbCBjb3BpZXMgdGhlIHNwZWNpYWwgYXJlYSBi dXQgbm90IHRoZSBQUkVGSVgNCisJICogaXRlbSkuICBJZiB0aGUgcGFnZSB3YXMgcHJlZml4LWNv bXByZXNzZWQgaXQgaXMgcmUtY29tcHJlc3NlZCBhcyBhIHdob2xlDQorCSAqIGJlbG93LCBhZnRl ciBkZWR1cGxpY2F0aW9uLCBob25vdXJpbmcgU3RyYXRlZ3kgMS4NCisJICovDQorCWlmIChwYWdl cHJlZml4KQ0KKwkJQlRQYWdlR2V0T3BhcXVlKG5ld3BhZ2UpLT5idHBvX2ZsYWdzICY9IH5CVFBf UFJFRklYOw0KKw0KKwkvKiBDb3B5IGhpZ2gga2V5LCBpZiBhbnkgKGEgcGl2b3QsIHN0b3JlZCBw bGFpbiBvbiBhbnkgcGFnZSkgKi8NCiAJaWYgKCFQX1JJR0hUTU9TVChvcGFxdWUpKQ0KIAl7DQog CQlJdGVtSWQJCWhpdGVtaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIFBfSElLRVkpOw0KQEAgLTE0 MCwxMiArMTYyLDIyIEBAIF9idF9kZWR1cF9wYXNzKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Ziwg SW5kZXhUdXBsZSBuZXdpdGVtLCBTaXplIG5ld2l0ZW1zeiwNCiANCiAJCUFzc2VydCghSXRlbUlk SXNEZWFkKGl0ZW1pZCkpOw0KIA0KKwkJLyogRGVjb2RlIG9uIGEgcHJlZml4IHBhZ2Ugc28ga2V5 cy9wb3N0aW5nIGxpc3RzIGFyZSB0aGUgcmVhbCBvbmVzLiAqLw0KKwkJaWYgKHBhZ2VwcmVmaXgp DQorCQkJaXR1cCA9IF9idF9wcmVmaXhfZGVjb2RlKHBhZ2UsIGl0dXAsICZjdXJidWYpOw0KKw0K IAkJaWYgKG9mZm51bSA9PSBtaW5vZmYpDQogCQl7DQogCQkJLyoNCiAJCQkgKiBObyBwcmV2aW91 cy9iYXNlIHR1cGxlIGZvciB0aGUgZGF0YSBpdGVtIC0tIHVzZSB0aGUgZGF0YSBpdGVtDQotCQkJ ICogYXMgYmFzZSB0dXBsZSBvZiBwZW5kaW5nIHBvc3RpbmcgbGlzdA0KKwkJCSAqIGFzIGJhc2Ug dHVwbGUgb2YgcGVuZGluZyBwb3N0aW5nIGxpc3QuICBPbiBhIHByZWZpeCBwYWdlIHRoZQ0KKwkJ CSAqIGJhc2UgbXVzdCBzdXJ2aXZlIHRoZSB3aG9sZSBtZXJnZSBydW4gKGl0IGlzIGtlcHQgYXMg YSBwb2ludGVyDQorCQkJICogaW4gc3RhdGUgYW5kIHJlYWQgYnkgX2J0X2RlZHVwX2ZpbmlzaF9w ZW5kaW5nKSwgc28ga2VlcCBpdCBpbiBhDQorCQkJICogZGVkaWNhdGVkIGJ1ZmZlciByYXRoZXIg dGhhbiB0aGUgcGVyLWl0ZXJhdGlvbiBjdXJidWYuDQogCQkJICovDQorCQkJaWYgKHBhZ2VwcmVm aXgpDQorCQkJCWl0dXAgPSBfYnRfcHJlZml4X2RlY29kZShwYWdlLCAoSW5kZXhUdXBsZSkgUGFn ZUdldEl0ZW0ocGFnZSwgaXRlbWlkKSwNCisJCQkJCQkJCQkJICZiYXNlYnVmKTsNCiAJCQlfYnRf ZGVkdXBfc3RhcnRfcGVuZGluZyhzdGF0ZSwgaXR1cCwgb2ZmbnVtKTsNCiAJCX0NCiAJCWVsc2Ug aWYgKHN0YXRlLT5kZWR1cGxpY2F0ZSAmJg0KQEAgLTE3MCw3ICsyMDIsMjAgQEAgX2J0X2RlZHVw X3Bhc3MoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLCBJbmRleFR1cGxlIG5ld2l0ZW0sIFNpemUg bmV3aXRlbXN6LA0KIAkJCSAqIGZvcm0gbmV3IHBvc3RpbmcgdHVwbGUgYW5kIGFkZCBpdCB0byBv dXIgdGVtcCBwYWdlIChuZXdwYWdlKS4NCiAJCQkgKiBFbHNlIGFkZCBwZW5kaW5nIGludGVydmFs J3MgYmFzZSB0dXBsZSB0byB0aGUgdGVtcCBwYWdlIGFzLWlzLg0KIAkJCSAqLw0KLQkJCXBhZ2Vz YXZpbmcgKz0gX2J0X2RlZHVwX2ZpbmlzaF9wZW5kaW5nKG5ld3BhZ2UsIHN0YXRlKTsNCisJCQkv Kg0KKwkJCSAqIE9uIGEgcHJlZml4IHBhZ2UgdGhlIGRlZHVwZWQgaXRlbXMgYXJlIGxhaWQgb3V0 IHBsYWluIGhlcmU7IHRoZQ0KKwkJCSAqIGRlY29kZWQgc2V0IGNhbiBleGNlZWQgb25lIHBhZ2Ug ZXZlbiB3aGVuIHRoZSBjb2RlZCBmb3JtIGZpdCwgc28NCisJCQkgKiB0b2xlcmF0ZSBhbiBvdmVy ZmxvdyBhbmQgYWJvcnQgdGhlIHdob2xlIHBhc3MgKHRoZSBjYWxsZXIgdGhlbg0KKwkJCSAqIHNw bGl0cyB0aGUgcGFnZSBpbnN0ZWFkIG9mIGRlZHVwbGljYXRpbmcgaXQpLg0KKwkJCSAqLw0KKwkJ CXsNCisJCQkJU2l6ZQkJc2F2ZWQgPSBfYnRfZGVkdXBfZmluaXNoX3BlbmRpbmcobmV3cGFnZSwg c3RhdGUsDQorCQkJCQkJCQkJCQkJCQkJCXBhZ2VwcmVmaXgpOw0KKw0KKwkJCQlpZiAocGFnZXBy ZWZpeCAmJiBzYXZlZCA9PSAoU2l6ZSkgLTEpDQorCQkJCQlnb3RvIGRlZHVwX292ZXJmbG93Ow0K KwkJCQlwYWdlc2F2aW5nICs9IHNhdmVkOw0KKwkJCX0NCiANCiAJCQlpZiAoc2luZ2xldmFsc3Ry YXQpDQogCQkJew0KQEAgLTE5OCwxMiArMjQzLDIyIEBAIF9idF9kZWR1cF9wYXNzKFJlbGF0aW9u IHJlbCwgQnVmZmVyIGJ1ZiwgSW5kZXhUdXBsZSBuZXdpdGVtLCBTaXplIG5ld2l0ZW1zeiwNCiAJ CQl9DQogDQogCQkJLyogaXR1cCBzdGFydHMgbmV3IHBlbmRpbmcgcG9zdGluZyBsaXN0ICovDQor CQkJaWYgKHBhZ2VwcmVmaXgpDQorCQkJCWl0dXAgPSBfYnRfcHJlZml4X2RlY29kZShwYWdlLA0K KwkJCQkJCQkJCQkgKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIFBhZ2VHZXRJdGVtSWQo cGFnZSwgb2ZmbnVtKSksDQorCQkJCQkJCQkJCSAmYmFzZWJ1Zik7DQogCQkJX2J0X2RlZHVwX3N0 YXJ0X3BlbmRpbmcoc3RhdGUsIGl0dXAsIG9mZm51bSk7DQogCQl9DQogCX0NCiANCiAJLyogSGFu ZGxlIHRoZSBsYXN0IGl0ZW0gKi8NCi0JcGFnZXNhdmluZyArPSBfYnRfZGVkdXBfZmluaXNoX3Bl bmRpbmcobmV3cGFnZSwgc3RhdGUpOw0KKwl7DQorCQlTaXplCQlzYXZlZCA9IF9idF9kZWR1cF9m aW5pc2hfcGVuZGluZyhuZXdwYWdlLCBzdGF0ZSwgcGFnZXByZWZpeCk7DQorDQorCQlpZiAocGFn ZXByZWZpeCAmJiBzYXZlZCA9PSAoU2l6ZSkgLTEpDQorCQkJZ290byBkZWR1cF9vdmVyZmxvdzsN CisJCXBhZ2VzYXZpbmcgKz0gc2F2ZWQ7DQorCX0NCiANCiAJLyoNCiAJICogSWYgbm8gaXRlbXMg c3VpdGFibGUgZm9yIGRlZHVwbGljYXRpb24gd2VyZSBmb3VuZCwgbmV3cGFnZSBtdXN0IGJlDQpA QCAtMjM4LDYgKzI5MywxMTAgQEAgX2J0X2RlZHVwX3Bhc3MoUmVsYXRpb24gcmVsLCBCdWZmZXIg YnVmLCBJbmRleFR1cGxlIG5ld2l0ZW0sIFNpemUgbmV3aXRlbXN6LA0KIAkJbm9wYXF1ZS0+YnRw b19mbGFncyAmPSB+QlRQX0hBU19HQVJCQUdFOw0KIAl9DQogDQorCS8qDQorCSAqIFJlLWFwcGx5 IHByZWZpeCBjb21wcmVzc2lvbiB0byB0aGUgcmVidWlsdCAocGxhaW4pIHBhZ2UgYXMgYSB3aG9s ZQ0KKwkgKiAoU3RyYXRlZ3kgMSksIGJlZm9yZSB0aGUgY3JpdGljYWwgc2VjdGlvbiBzaW5jZSBp dCBhbGxvY2F0ZXMgYSBzY3JhdGNoDQorCSAqIHBhZ2UuICBGaXJzdCBjYXB0dXJlIHRoZSBkZWR1 cGVkIHBsYWluIGl0ZW1zIGFuZCBoaWdoIGtleTogaWYgdGhlIHBhZ2UNCisJICogZG9lcyBiZWNv bWUgcHJlZml4LWNvbXByZXNzZWQsIHJlZG8gcmVidWlsZHMgaXRzIGNvZGVkIGJ5dGVzIGZyb20g dGhlc2UNCisJICogcGx1cyB0aGUgY2hvc2VuIHByZWZpeCAodmlhIF9idF9zcGxpdF9sZWFmX2xh eW91dCksIHRoZSBzYW1lIHdheSBhIHByZWZpeA0KKwkgKiBsZWFmIHNwbGl0IGlzIHJlcGxheWVk IC0tIG5vIGZ1bGwtcGFnZSBpbWFnZSBuZWVkZWQuDQorCSAqLw0KKwlpZiAocGFnZXByZWZpeCkN CisJew0KKwkJQlRQYWdlT3BhcXVlIG5vcHEgPSBCVFBhZ2VHZXRPcGFxdWUobmV3cGFnZSk7DQor CQlPZmZzZXROdW1iZXIgbm1pbiA9IFBfRklSU1REQVRBS0VZKG5vcHEpOw0KKwkJT2Zmc2V0TnVt YmVyIG5tYXggPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKG5ld3BhZ2UpOw0KKw0KKwkJZGVkdXBf bnBsYWluID0gKG5tYXggPj0gbm1pbikgPyAoaW50KSBubWF4IC0gKGludCkgbm1pbiArIDEgOiAw Ow0KKwkJaWYgKGRlZHVwX25wbGFpbiA+IDApDQorCQl7DQorCQkJZGVkdXBfcGxhaW4gPSBwYWxs b2MoZGVkdXBfbnBsYWluICogc2l6ZW9mKEluZGV4VHVwbGUpKTsNCisJCQlmb3IgKGludCBpID0g MDsgaSA8IGRlZHVwX25wbGFpbjsgaSsrKQ0KKwkJCQlkZWR1cF9wbGFpbltpXSA9IENvcHlJbmRl eFR1cGxlKChJbmRleFR1cGxlKQ0KKwkJCQkJCQkJCQkJCVBhZ2VHZXRJdGVtKG5ld3BhZ2UsDQor CQkJCQkJCQkJCQkJCQkJUGFnZUdldEl0ZW1JZChuZXdwYWdlLCBubWluICsgaSkpKTsNCisJCX0N CisJCWlmICghUF9SSUdIVE1PU1Qobm9wcSkpDQorCQl7DQorCQkJSXRlbUlkCQloaWkgPSBQYWdl R2V0SXRlbUlkKG5ld3BhZ2UsIFBfSElLRVkpOw0KKw0KKwkJCWRlZHVwX2hpa2V5ID0gQ29weUlu ZGV4VHVwbGUoKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKG5ld3BhZ2UsIGhpaSkpOw0KKwkJfQ0K Kw0KKwkJX2J0X3ByZWZpeF9jb21wcmVzc19wYWdlKHJlbCwgbmV3cGFnZSk7DQorDQorCQkvKiBE aWQgaXQgYWN0dWFsbHkgY29tcHJlc3M/ICAoSXQgZ2l2ZXMgdXAgaWYgYSBjb2RlZCBpdGVtIHdv bid0IGZpdC4pICovDQorCQlpZiAoUF9IQVNQUkVGSVgoQlRQYWdlR2V0T3BhcXVlKG5ld3BhZ2Up KSkNCisJCXsNCisJCQljb25zdCBjaGFyICpwZnggPSBfYnRfcGFnZV9nZXRfcHJlZml4KG5ld3Bh Z2UsICZkZWR1cF9wcmVmaXhsZW4pOw0KKw0KKwkJCWlmIChkZWR1cF9wcmVmaXhsZW4gPiAwKQ0K KwkJCQltZW1jcHkoZGVkdXBfcHJlZml4LCBwZngsIGRlZHVwX3ByZWZpeGxlbik7DQorCQkJZGVk dXBfaXNsb2dwcmVmaXggPSB0cnVlOw0KKwkJfQ0KKwl9DQorDQorCS8qDQorCSAqIFBhY2sgdGhl IHByZWZpeC1kZWR1cCBXQUwgcGF5bG9hZCBub3csIGJlZm9yZSB0aGUgY3JpdGljYWwgc2VjdGlv bg0KKwkgKiAocGFsbG9jIGlzIGRpc2FsbG93ZWQgaW5zaWRlIGl0KTogdGhlIGNob3NlbiBwcmVm aXggYnl0ZXMsIHRoZW4gdGhlIGhpZ2gNCisJICoga2V5ICh1bmxlc3MgcmlnaHRtb3N0KSwgdGhl biB0aGUgZGVkdXBlZCBwbGFpbiBpdGVtcywgZWFjaCBNQVhBTElHTidkLA0KKwkgKiBpbiBvbmUg Y29udGlndW91cyBidWZmZXIgbG9nZ2VkIHdpdGggYSBzaW5nbGUgcmRhdGEgc2xvdC4NCisJICov DQorCWlmIChkZWR1cF9pc2xvZ3ByZWZpeCkNCisJew0KKwkJU2l6ZQkJb2ZmID0gZGVkdXBfcHJl Zml4bGVuOw0KKw0KKwkJaWYgKGRlZHVwX2hpa2V5ICE9IE5VTEwpDQorCQkJb2ZmICs9IE1BWEFM SUdOKEluZGV4VHVwbGVTaXplKGRlZHVwX2hpa2V5KSk7DQorCQlmb3IgKGludCBpID0gMDsgaSA8 IGRlZHVwX25wbGFpbjsgaSsrKQ0KKwkJCW9mZiArPSBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShk ZWR1cF9wbGFpbltpXSkpOw0KKw0KKwkJLyoNCisJCSAqIEEgcGF0aG9sb2dpY2FsbHkgY29tcHJl c3NpYmxlIHBhZ2UgY2FuIGhvbGQgbW9yZSBwbGFpbiBkYXRhIHRoYW4NCisJCSAqIGZpdHMgaW4g b25lIHBhZ2U7IGlmIHRoZSBwYXlsb2FkIHdvdWxkIGJlIHRoYXQgbGFyZ2UsIGZhbGwgYmFjayB0 bw0KKwkJICogYSBmb3JjZWQgZnVsbC1wYWdlIGltYWdlIG9mIHRoZSBjb2RlZCBwYWdlIChib3Vu ZGVkIGF0IEJMQ0tTWikuDQorCQkgKi8NCisJCWlmIChvZmYgPiBCTENLU1opDQorCQkJZGVkdXBf cmZwaSA9IHRydWU7DQorI2lmZGVmIFVTRV9JTkpFQ1RJT05fUE9JTlRTDQorCQkvKiBMZXQgYSB0 ZXN0IGZvcmNlIHRoZSBvdGhlcndpc2UtcmFyZSBmdWxsLXBhZ2UtaW1hZ2UgZmFsbGJhY2suICov DQorCQlpZiAoSVNfSU5KRUNUSU9OX1BPSU5UX0FUVEFDSEVEKCJuYnRyZWUtcHJlZml4LWZvcmNl LXJmcGkiKSkNCisJCQlkZWR1cF9yZnBpID0gdHJ1ZTsNCisjZW5kaWYNCisJCWlmIChkZWR1cF9y ZnBpKQ0KKwkJCSA7CQkJCQkvKiBpbWFnZSBmb3JjZWQ7IG5vIHBheWxvYWQgYnVmZmVyIGJ1aWx0 ICovDQorCQllbHNlDQorCQl7DQorCQkJZGVkdXBfd2FsYnVmbGVuID0gb2ZmOw0KKwkJCWRlZHVw X3dhbGJ1ZiA9IHBhbGxvYyhNYXgob2ZmLCAxKSk7DQorDQorCQkJb2ZmID0gMDsNCisJCQlpZiAo ZGVkdXBfcHJlZml4bGVuID4gMCkNCisJCQl7DQorCQkJCW1lbWNweShkZWR1cF93YWxidWYsIGRl ZHVwX3ByZWZpeCwgZGVkdXBfcHJlZml4bGVuKTsNCisJCQkJb2ZmICs9IGRlZHVwX3ByZWZpeGxl bjsNCisJCQl9DQorCQkJaWYgKGRlZHVwX2hpa2V5ICE9IE5VTEwpDQorCQkJew0KKwkJCQlTaXpl CQloc3ogPSBJbmRleFR1cGxlU2l6ZShkZWR1cF9oaWtleSk7DQorDQorCQkJCW1lbWNweShkZWR1 cF93YWxidWYgKyBvZmYsIGRlZHVwX2hpa2V5LCBoc3opOw0KKwkJCQlpZiAoTUFYQUxJR04oaHN6 KSAhPSBoc3opDQorCQkJCQltZW1zZXQoZGVkdXBfd2FsYnVmICsgb2ZmICsgaHN6LCAwLCBNQVhB TElHTihoc3opIC0gaHN6KTsNCisJCQkJb2ZmICs9IE1BWEFMSUdOKGhzeik7DQorCQkJfQ0KKwkJ CWZvciAoaW50IGkgPSAwOyBpIDwgZGVkdXBfbnBsYWluOyBpKyspDQorCQkJew0KKwkJCQlTaXpl CQlzeiA9IEluZGV4VHVwbGVTaXplKGRlZHVwX3BsYWluW2ldKTsNCisNCisJCQkJbWVtY3B5KGRl ZHVwX3dhbGJ1ZiArIG9mZiwgZGVkdXBfcGxhaW5baV0sIHN6KTsNCisJCQkJaWYgKE1BWEFMSUdO KHN6KSAhPSBzeikNCisJCQkJCW1lbXNldChkZWR1cF93YWxidWYgKyBvZmYgKyBzeiwgMCwgTUFY QUxJR04oc3opIC0gc3opOw0KKwkJCQlvZmYgKz0gTUFYQUxJR04oc3opOw0KKwkJCX0NCisJCX0N CisJfQ0KKw0KIAlTVEFSVF9DUklUX1NFQ1RJT04oKTsNCiANCiAJUGFnZVJlc3RvcmVUZW1wUGFn ZShuZXdwYWdlLCBwYWdlKTsNCkBAIC0yNDgsMTkgKzQwNywzOCBAQCBfYnRfZGVkdXBfcGFzcyhS ZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsIEluZGV4VHVwbGUgbmV3aXRlbSwgU2l6ZSBuZXdpdGVt c3osDQogCXsNCiAJCXhsX2J0cmVlX2RlZHVwIHhscmVjX2RlZHVwOw0KIA0KLQkJeGxyZWNfZGVk dXAubmludGVydmFscyA9IHN0YXRlLT5uaW50ZXJ2YWxzOw0KKwkJeGxyZWNfZGVkdXAubmludGVy dmFscyA9IGRlZHVwX2lzbG9ncHJlZml4ID8gMCA6IHN0YXRlLT5uaW50ZXJ2YWxzOw0KKwkJeGxy ZWNfZGVkdXAucHJlZml4bGVuID0gKHVpbnQ4KSBkZWR1cF9wcmVmaXhsZW47DQorCQl4bHJlY19k ZWR1cC5mbGFncyA9IChkZWR1cF9oaWtleSAhPSBOVUxMKSA/IFhMSF9ERURVUF9OT1RfUklHSFRN T1NUIDogMDsNCisJCWlmIChkZWR1cF9yZnBpKQ0KKwkJCXhscmVjX2RlZHVwLmZsYWdzIHw9IFhM SF9ERURVUF9SRlBJOw0KIA0KIAkJWExvZ0JlZ2luSW5zZXJ0KCk7DQotCQlYTG9nUmVnaXN0ZXJC dWZmZXIoMCwgYnVmLCBSRUdCVUZfU1RBTkRBUkQpOw0KKwkJWExvZ1JlZ2lzdGVyQnVmZmVyKDAs IGJ1ZiwNCisJCQkJCQkgICBSRUdCVUZfU1RBTkRBUkQgfA0KKwkJCQkJCSAgIChkZWR1cF9yZnBp ID8gUkVHQlVGX0ZPUkNFX0lNQUdFIDogMCkpOw0KIAkJWExvZ1JlZ2lzdGVyRGF0YSgmeGxyZWNf ZGVkdXAsIFNpemVPZkJ0cmVlRGVkdXApOw0KIA0KLQkJLyoNCi0JCSAqIFRoZSBpbnRlcnZhbHMg YXJyYXkgaXMgbm90IGluIHRoZSBidWZmZXIsIGJ1dCBwcmV0ZW5kIHRoYXQgaXQgaXMuDQotCQkg KiBXaGVuIFhMb2dJbnNlcnQgc3RvcmVzIHRoZSB3aG9sZSBidWZmZXIsIHRoZSBhcnJheSBuZWVk IG5vdCBiZQ0KLQkJICogc3RvcmVkIHRvby4NCi0JCSAqLw0KLQkJWExvZ1JlZ2lzdGVyQnVmRGF0 YSgwLCBzdGF0ZS0+aW50ZXJ2YWxzLA0KLQkJCQkJCQlzdGF0ZS0+bmludGVydmFscyAqIHNpemVv ZihCVERlZHVwSW50ZXJ2YWwpKTsNCisJCWlmIChkZWR1cF9pc2xvZ3ByZWZpeCkNCisJCXsNCisJ CQkvKg0KKwkJCSAqIFByZWZpeC1kZWR1cDogY2FycnkgdGhlIGNob3NlbiBwcmVmaXggYW5kIHRo ZSBkZWR1cGVkIHBsYWluDQorCQkJICogaXRlbXMgc28gcmVkbyBjYW4gbGF5IG91dCB0aGUgY29k ZWQgcGFnZTsgbm8gZnVsbC1wYWdlIGltYWdlDQorCQkJICogKHVubGVzcyB0aGUgcGF5bG9hZCB3 YXMgdG9vIGxhcmdlLCBoYW5kbGVkIGJ5IHRoZSBmb3JjZWQgaW1hZ2UpLg0KKwkJCSAqLw0KKwkJ CWlmICghZGVkdXBfcmZwaSAmJiBkZWR1cF93YWxidWZsZW4gPiAwKQ0KKwkJCQlYTG9nUmVnaXN0 ZXJCdWZEYXRhKDAsIGRlZHVwX3dhbGJ1ZiwgZGVkdXBfd2FsYnVmbGVuKTsNCisJCX0NCisJCWVs c2UNCisJCXsNCisJCQkvKg0KKwkJCSAqIFRoZSBpbnRlcnZhbHMgYXJyYXkgaXMgbm90IGluIHRo ZSBidWZmZXIsIGJ1dCBwcmV0ZW5kIHRoYXQgaXQNCisJCQkgKiBpcy4gIFdoZW4gWExvZ0luc2Vy dCBzdG9yZXMgdGhlIHdob2xlIGJ1ZmZlciwgdGhlIGFycmF5IG5lZWQgbm90DQorCQkJICogYmUg c3RvcmVkIHRvby4NCisJCQkgKi8NCisJCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsIHN0YXRlLT5p bnRlcnZhbHMsDQorCQkJCQkJCQlzdGF0ZS0+bmludGVydmFscyAqIHNpemVvZihCVERlZHVwSW50 ZXJ2YWwpKTsNCisJCX0NCiANCiAJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fQlRSRUVfSUQsIFhM T0dfQlRSRUVfREVEVVApOw0KIAl9DQpAQCAtMjc3LDYgKzQ1NSwyMCBAQCBfYnRfZGVkdXBfcGFz cyhSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsIEluZGV4VHVwbGUgbmV3aXRlbSwgU2l6ZSBuZXdp dGVtc3osDQogCS8qIGNhbm5vdCBsZWFrIG1lbW9yeSBoZXJlICovDQogCXBmcmVlKHN0YXRlLT5o dGlkcyk7DQogCXBmcmVlKHN0YXRlKTsNCisJcmV0dXJuOw0KKw0KK2RlZHVwX292ZXJmbG93Og0K Kw0KKwkvKg0KKwkgKiBBIHByZWZpeCBwYWdlJ3MgZGVkdXBlZCBpdGVtcyBkaWQgbm90IGZpdCB3 aGVuIGxhaWQgb3V0IHBsYWluLiAgTGVhdmUNCisJICogdGhlIG9yaWdpbmFsIHBhZ2UgdW50b3Vj aGVkIGFuZCByZXR1cm4gd2l0aG91dCB3cml0aW5nIGFueXRoaW5nOyB0aGUNCisJICogY2FsbGVy IGZhbGxzIHRocm91Z2ggdG8gc3BsaXQgdGhlIHBhZ2UuICBObyBjcml0aWNhbCBzZWN0aW9uIHdh cw0KKwkgKiBlbnRlcmVkIGFuZCB0aGUgYnVmZmVyIHdhcyBub3QgbWFya2VkIGRpcnR5LCBzbyB0 aGUgcGFnZSBpcyB1bmNoYW5nZWQuDQorCSAqLw0KKwlBc3NlcnQocGFnZXByZWZpeCk7DQorCXBm cmVlKG5ld3BhZ2UpOw0KKwlwZnJlZShzdGF0ZS0+aHRpZHMpOw0KKwlwZnJlZShzdGF0ZSk7DQog fQ0KIA0KIC8qDQpAQCAtMzE4LDYgKzUxMCw5IEBAIF9idF9ib3R0b211cGRlbF9wYXNzKFJlbGF0 aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgUmVsYXRpb24gaGVhcFJlbCwNCiAJVE1fSW5kZXhEZWxldGVP cCBkZWxzdGF0ZTsNCiAJYm9vbAkJbmV2ZXJkZWR1cDsNCiAJaW50CQkJbmtleWF0dHMgPSBJbmRl eFJlbGF0aW9uR2V0TnVtYmVyT2ZLZXlBdHRyaWJ1dGVzKHJlbCk7DQorCWJvb2wJCXBhZ2VwcmVm aXggPSBQX0hBU1BSRUZJWChvcGFxdWUpOw0KKwlCVEl0ZW1CdWYJY3VyYnVmOwkJCS8qIGRlY29k ZSBzY3JhdGNoIGZvciB0aGUgbG9vcCdzIGN1cnJlbnQgaXRlbSAqLw0KKwlCVEl0ZW1CdWYJYmFz ZWJ1ZjsJCS8qIGRlY29kZSBzY3JhdGNoIGtlcHQgZm9yIHRoZSBwZW5kaW5nIGJhc2UgKi8NCiAN CiAJLyogUGFzc2VkLWluIG5ld2l0ZW1zeiBpcyBNQVhBTElHTkVEIGJ1dCBkb2VzIG5vdCBpbmNs dWRlIGxpbmUgcG9pbnRlciAqLw0KIAluZXdpdGVtc3ogKz0gc2l6ZW9mKEl0ZW1JZERhdGEpOw0K QEAgLTM3MSw5ICs1NjYsMjQgQEAgX2J0X2JvdHRvbXVwZGVsX3Bhc3MoUmVsYXRpb24gcmVsLCBC dWZmZXIgYnVmLCBSZWxhdGlvbiBoZWFwUmVsLA0KIA0KIAkJQXNzZXJ0KCFJdGVtSWRJc0RlYWQo aXRlbWlkKSk7DQogDQorCQkvKg0KKwkJICogT24gYSBwcmVmaXgtY29tcHJlc3NlZCBwYWdlIGRl Y29kZSB0aGUgaXRlbSBzbyBfYnRfa2VlcF9uYXR0c19mYXN0DQorCQkgKiBzZWVzIHRoZSByZWFs IGtleS4gIFRoZSBiYXNlIG9mIGEgcGVuZGluZyBpbnRlcnZhbCBtdXN0IHN1cnZpdmUgdGhlDQor CQkgKiB3aG9sZSBydW4gKGl0IGlzIGNvbXBhcmVkIGFnYWluc3QgZWFjaCBmb2xsb3dpbmcgaXRl bSksIHNvIGtlZXAgaXQNCisJCSAqIGluIGl0cyBvd24gYnVmZmVyOyB0aGUgY3VycmVudCBpdGVt IHVzZXMgYSByZXVzZWQgYnVmZmVyLiAgSGVhcCBUSURzDQorCQkgKiBhbmQgcG9zdGluZyBsaXN0 cyBhcmUgcHJlc2VydmVkIGJ5IGNvZGluZywgc28gX2J0X2RlZHVwX3N0YXJ0X3BlbmRpbmcNCisJ CSAqIGFuZCBfYnRfYm90dG9tdXBkZWxfZmluaXNoX3BlbmRpbmcgKHdoaWNoIHJlYWQgb25seSBU SURzL3NpemVzLCBieQ0KKwkJICogcGFnZSBvZmZzZXQpIG5lZWQgbm8gZGVjb2RlLg0KKwkJICov DQorCQlpZiAocGFnZXByZWZpeCkNCisJCQlpdHVwID0gX2J0X3ByZWZpeF9kZWNvZGUocGFnZSwg aXR1cCwgJmN1cmJ1Zik7DQorDQogCQlpZiAob2ZmbnVtID09IG1pbm9mZikNCiAJCXsNCiAJCQkv KiBpdHVwIHN0YXJ0cyBmaXJzdCBwZW5kaW5nIGludGVydmFsICovDQorCQkJaWYgKHBhZ2VwcmVm aXgpDQorCQkJCWl0dXAgPSBfYnRfcHJlZml4X2RlY29kZShwYWdlLCAoSW5kZXhUdXBsZSkgUGFn ZUdldEl0ZW0ocGFnZSwgaXRlbWlkKSwNCisJCQkJCQkJCQkJICZiYXNlYnVmKTsNCiAJCQlfYnRf ZGVkdXBfc3RhcnRfcGVuZGluZyhzdGF0ZSwgaXR1cCwgb2ZmbnVtKTsNCiAJCX0NCiAJCWVsc2Ug aWYgKF9idF9rZWVwX25hdHRzX2Zhc3QocmVsLCBzdGF0ZS0+YmFzZSwgaXR1cCkgPiBua2V5YXR0 cyAmJg0KQEAgLTM4Nyw2ICs1OTcsOSBAQCBfYnRfYm90dG9tdXBkZWxfcGFzcyhSZWxhdGlvbiBy ZWwsIEJ1ZmZlciBidWYsIFJlbGF0aW9uIGhlYXBSZWwsDQogCQkJX2J0X2JvdHRvbXVwZGVsX2Zp bmlzaF9wZW5kaW5nKHBhZ2UsIHN0YXRlLCAmZGVsc3RhdGUpOw0KIA0KIAkJCS8qIGl0dXAgc3Rh cnRzIG5ldyBwZW5kaW5nIGludGVydmFsICovDQorCQkJaWYgKHBhZ2VwcmVmaXgpDQorCQkJCWl0 dXAgPSBfYnRfcHJlZml4X2RlY29kZShwYWdlLCAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFn ZSwgaXRlbWlkKSwNCisJCQkJCQkJCQkJICZiYXNlYnVmKTsNCiAJCQlfYnRfZGVkdXBfc3RhcnRf cGVuZGluZyhzdGF0ZSwgaXR1cCwgb2ZmbnVtKTsNCiAJCX0NCiAJfQ0KQEAgLTU1NCw3ICs3Njcs NyBAQCBfYnRfZGVkdXBfc2F2ZV9odGlkKEJURGVkdXBTdGF0ZSBzdGF0ZSwgSW5kZXhUdXBsZSBp dHVwKQ0KICAqIHdoZXJlIG5vIGRlZHVwbGljYXRpb24gd2FzIHBvc3NpYmxlLg0KICAqLw0KIFNp emUNCi1fYnRfZGVkdXBfZmluaXNoX3BlbmRpbmcoUGFnZSBuZXdwYWdlLCBCVERlZHVwU3RhdGUg c3RhdGUpDQorX2J0X2RlZHVwX2ZpbmlzaF9wZW5kaW5nKFBhZ2UgbmV3cGFnZSwgQlREZWR1cFN0 YXRlIHN0YXRlLCBib29sIG92ZXJmbG93b2spDQogew0KIAlPZmZzZXROdW1iZXIgdHVwb2ZmOw0K IAlTaXplCQl0dXBsZXN6Ow0KQEAgLTU3Miw3ICs3ODUsMTEgQEAgX2J0X2RlZHVwX2ZpbmlzaF9w ZW5kaW5nKFBhZ2UgbmV3cGFnZSwgQlREZWR1cFN0YXRlIHN0YXRlKQ0KIAkJQXNzZXJ0KHR1cGxl c3ogPT0gTUFYQUxJR04oSW5kZXhUdXBsZVNpemUoc3RhdGUtPmJhc2UpKSk7DQogCQlBc3NlcnQo dHVwbGVzeiA8PSBCVE1heEl0ZW1TaXplKTsNCiAJCWlmIChQYWdlQWRkSXRlbShuZXdwYWdlLCBz dGF0ZS0+YmFzZSwgdHVwbGVzeiwgdHVwb2ZmLCBmYWxzZSwgZmFsc2UpID09IEludmFsaWRPZmZz ZXROdW1iZXIpDQorCQl7DQorCQkJaWYgKG92ZXJmbG93b2spDQorCQkJCXJldHVybiAoU2l6ZSkg LTE7DQogCQkJZWxvZyhFUlJPUiwgImRlZHVwbGljYXRpb24gZmFpbGVkIHRvIGFkZCB0dXBsZSB0 byBwYWdlIik7DQorCQl9DQogDQogCQlzcGFjZXNhdmluZyA9IDA7DQogCX0NCkBAIC01OTEsMTMg KzgwOCwyNiBAQCBfYnRfZGVkdXBfZmluaXNoX3BlbmRpbmcoUGFnZSBuZXdwYWdlLCBCVERlZHVw U3RhdGUgc3RhdGUpDQogCQlBc3NlcnQodHVwbGVzeiA9PSBNQVhBTElHTihJbmRleFR1cGxlU2l6 ZShmaW5hbCkpKTsNCiAJCUFzc2VydCh0dXBsZXN6IDw9IEJUTWF4SXRlbVNpemUpOw0KIAkJaWYg KFBhZ2VBZGRJdGVtKG5ld3BhZ2UsIGZpbmFsLCB0dXBsZXN6LCB0dXBvZmYsIGZhbHNlLCBmYWxz ZSkgPT0gSW52YWxpZE9mZnNldE51bWJlcikNCisJCXsNCisJCQlwZnJlZShmaW5hbCk7DQorCQkJ aWYgKG92ZXJmbG93b2spDQorCQkJCXJldHVybiAoU2l6ZSkgLTE7DQogCQkJZWxvZyhFUlJPUiwg ImRlZHVwbGljYXRpb24gZmFpbGVkIHRvIGFkZCB0dXBsZSB0byBwYWdlIik7DQorCQl9DQogDQog CQlwZnJlZShmaW5hbCk7DQogCQlzcGFjZXNhdmluZyA9IHN0YXRlLT5waHlzdHVwc2l6ZSAtICh0 dXBsZXN6ICsgc2l6ZW9mKEl0ZW1JZERhdGEpKTsNCiAJCS8qIEluY3JlbWVudCBuaW50ZXJ2YWxz LCBzaW5jZSB3ZSB3cm90ZSBhIG5ldyBwb3N0aW5nIGxpc3QgdHVwbGUgKi8NCiAJCXN0YXRlLT5u aW50ZXJ2YWxzKys7DQotCQlBc3NlcnQoc3BhY2VzYXZpbmcgPiAwICYmIHNwYWNlc2F2aW5nIDwg QkxDS1NaKTsNCisNCisJCS8qDQorCQkgKiBPbiBhbiBvcmRpbmFyeSBwYWdlIHRoZSBtZXJnZWQg aW50ZXJ2YWwncyB0dXBsZXMgd2VyZSBhbGwgcGh5c2ljYWxseQ0KKwkJICogcHJlc2VudCBvbiBv bmUgcGFnZSwgc28gdGhlIHNhdmluZyBpcyBib3VuZGVkIGJ5IEJMQ0tTWi4gIE9uIGEgcHJlZml4 DQorCQkgKiBwYWdlIChvdmVyZmxvd29rKSBwaHlzdHVwc2l6ZSBpcyB0aGUgREVDT0RFRCBzaXpl IG9mIHRob3NlIHR1cGxlcywNCisJCSAqIHdoaWNoIGNhbiBleGNlZWQgYSBwYWdlIChhIGNvZGVk IHBhZ2UgaG9sZHMgbW9yZSBsb2dpY2FsIGRhdGEgdGhhbg0KKwkJICogZml0cyBwbGFpbiksIHNv IG9ubHkgcmVxdWlyZSB0aGUgc2F2aW5nIHRvIGJlIHBvc2l0aXZlIHRoZXJlLg0KKwkJICovDQor CQlBc3NlcnQoc3BhY2VzYXZpbmcgPiAwICYmIChvdmVyZmxvd29rIHx8IHNwYWNlc2F2aW5nIDwg QkxDS1NaKSk7DQogCX0NCiANCiAJLyogUmVzZXQgc3RhdGUgZm9yIG5leHQgcGVuZGluZyBwb3N0 aW5nIGxpc3QgKi8NCkBAIC03ODMsMTYgKzEwMTMsMjIgQEAgX2J0X2RvX3NpbmdsZXZhbChSZWxh dGlvbiByZWwsIFBhZ2UgcGFnZSwgQlREZWR1cFN0YXRlIHN0YXRlLA0KIAkJCQkgT2Zmc2V0TnVt YmVyIG1pbm9mZiwgSW5kZXhUdXBsZSBuZXdpdGVtKQ0KIHsNCiAJaW50CQkJbmtleWF0dHMgPSBJ bmRleFJlbGF0aW9uR2V0TnVtYmVyT2ZLZXlBdHRyaWJ1dGVzKHJlbCk7DQorCWJvb2wJCXBhZ2Vw cmVmaXggPSBQX0hBU1BSRUZJWChCVFBhZ2VHZXRPcGFxdWUocGFnZSkpOw0KIAlJdGVtSWQJCWl0 ZW1pZDsNCiAJSW5kZXhUdXBsZQlpdHVwOw0KKwlCVEl0ZW1CdWYJYnVmOw0KIA0KIAlpdGVtaWQg PSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG1pbm9mZik7DQogCWl0dXAgPSAoSW5kZXhUdXBsZSkgUGFn ZUdldEl0ZW0ocGFnZSwgaXRlbWlkKTsNCisJaWYgKHBhZ2VwcmVmaXgpDQorCQlpdHVwID0gX2J0 X3ByZWZpeF9kZWNvZGUocGFnZSwgaXR1cCwgJmJ1Zik7DQogDQogCWlmIChfYnRfa2VlcF9uYXR0 c19mYXN0KHJlbCwgbmV3aXRlbSwgaXR1cCkgPiBua2V5YXR0cykNCiAJew0KIAkJaXRlbWlkID0g UGFnZUdldEl0ZW1JZChwYWdlLCBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpKTsNCiAJCWl0 dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaXRlbWlkKTsNCisJCWlmIChwYWdl cHJlZml4KQ0KKwkJCWl0dXAgPSBfYnRfcHJlZml4X2RlY29kZShwYWdlLCBpdHVwLCAmYnVmKTsN CiANCiAJCWlmIChfYnRfa2VlcF9uYXR0c19mYXN0KHJlbCwgbmV3aXRlbSwgaXR1cCkgPiBua2V5 YXR0cykNCiAJCQlyZXR1cm4gdHJ1ZTsNCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idGluc2VydC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQu Yw0KaW5kZXggZDVkOTY0MzAxYzEuLmRmZDk4MGE2YTJhIDEwMDY0NA0KLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYw0KKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnRpbnNlcnQuYw0KQEAgLTM0OCw4ICszNDgsOCBAQCBfYnRfc2VhcmNoX2luc2VydChS ZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUSW5zZXJ0U3RhdGUgaW5zZXJ0c3RhdGUp DQogCQkJCVBfSVNMRUFGKG9wYXF1ZSkgJiYNCiAJCQkJIVBfSUdOT1JFKG9wYXF1ZSkgJiYNCiAJ CQkJUGFnZUdldEZyZWVTcGFjZShwYWdlKSA+IGluc2VydHN0YXRlLT5pdGVtc3ogJiYNCi0JCQkJ UGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSA+PSBQX0hJS0VZICYmDQotCQkJCV9idF9jb21w YXJlKHJlbCwgaW5zZXJ0c3RhdGUtPml0dXBfa2V5LCBwYWdlLCBQX0hJS0VZKSA+IDApDQorCQkJ CVBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSkgPj0gUF9GSVJTVERBVEFLRVkob3BhcXVlKSAm Jg0KKwkJCQlfYnRfY29tcGFyZShyZWwsIGluc2VydHN0YXRlLT5pdHVwX2tleSwgcGFnZSwgUF9G SVJTVERBVEFLRVkob3BhcXVlKSkgPiAwKQ0KIAkJCXsNCiAJCQkJLyoNCiAJCQkJICogQ2FsbGVy IGNhbiB1c2UgdGhlIGZhc3RwYXRoIG9wdGltaXphdGlvbiBiZWNhdXNlIGNhY2hlZA0KQEAgLTEx MzUsNiArMTEzNSwxMSBAQCBfYnRfaW5zZXJ0b25wZyhSZWxhdGlvbiByZWwsDQogCUluZGV4VHVw bGUJb3Bvc3RpbmcgPSBOVUxMOw0KIAlJbmRleFR1cGxlCW9yaWdpdHVwID0gTlVMTDsNCiAJSW5k ZXhUdXBsZQlucG9zdGluZyA9IE5VTEw7DQorCUluZGV4VHVwbGUJY29kZWRpdHVwOwkJLyogaXR1 cCBjb2RlZCBmb3IgdGhlIHBhZ2UsIG9yIGl0dXAgKi8NCisJU2l6ZQkJY29kZWRpdGVtc3o7CS8q IGl0cyBNQVhBTElHTmVkIHNpemUgKi8NCisJSW5kZXhUdXBsZQljb2RlZG5wb3N0aW5nID0gTlVM TDsJLyogbnBvc3RpbmcgY29kZWQgZm9yIHRoZSBwYWdlICovDQorCUJUSXRlbUJ1ZglvcG9zdGJ1 ZjsJCS8qIGRlY29kZSB3b3Jrc3BhY2UgZm9yIGFuIGV4aXN0aW5nIHBvc3RpbmcgKi8NCisJYm9v bAkJcGFnZXByZWZpeDsJCS8qIHRhcmdldCBwYWdlIGlzIEJUUF9QUkVGSVggKi8NCiAJWExvZ1Jl Y1B0cglyZWNwdHI7DQogDQogCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7DQpAQCAtMTE0Myw2 ICsxMTQ4LDcgQEAgX2J0X2luc2VydG9ucGcoUmVsYXRpb24gcmVsLA0KIAlpc3Jvb3QgPSBQX0lT Uk9PVChvcGFxdWUpOw0KIAlpc3JpZ2h0bW9zdCA9IFBfUklHSFRNT1NUKG9wYXF1ZSk7DQogCWlz b25seSA9IFBfTEVGVE1PU1Qob3BhcXVlKSAmJiBQX1JJR0hUTU9TVChvcGFxdWUpOw0KKwlwYWdl cHJlZml4ID0gUF9IQVNQUkVGSVgob3BhcXVlKTsNCiANCiAJLyogY2hpbGQgYnVmZmVyIG11c3Qg YmUgZ2l2ZW4gaWZmIGluc2VydGluZyBvbiBhbiBpbnRlcm5hbCBwYWdlICovDQogCUFzc2VydChp c2xlYWYgPT0gIUJ1ZmZlcklzVmFsaWQoY2J1ZikpOw0KQEAgLTExODIsNiArMTE4OCw5IEBAIF9i dF9pbnNlcnRvbnBnKFJlbGF0aW9uIHJlbCwNCiAJCSAqLw0KIAkJQXNzZXJ0KGlzbGVhZiAmJiBp dHVwX2tleS0+aGVhcGtleXNwYWNlICYmIGl0dXBfa2V5LT5hbGxlcXVhbGltYWdlKTsNCiAJCW9w b3N0aW5nID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGl0ZW1pZCk7DQorCQkvKiBP biBhIHByZWZpeCBwYWdlIHRoZSBleGlzdGluZyBwb3N0aW5nIGlzIGNvZGVkOyBkZWNvZGUgZm9y IHRoZSBzd2FwLiAqLw0KKwkJaWYgKHBhZ2VwcmVmaXgpDQorCQkJb3Bvc3RpbmcgPSBfYnRfcHJl Zml4X2RlY29kZShwYWdlLCBvcG9zdGluZywgJm9wb3N0YnVmKTsNCiANCiAJCS8qDQogCQkgKiBw b3N0aW5nb2ZmIHZhbHVlIGNvbWVzIGZyb20gZWFybGllciBjYWxsIHRvIF9idF9iaW5zcmNoX3Bv c3RpbmcoKS4NCkBAIC0xMjEzLDE5ICsxMjIyLDUwIEBAIF9idF9pbnNlcnRvbnBnKFJlbGF0aW9u IHJlbCwNCiAJCW5ld2l0ZW1vZmYgPSBPZmZzZXROdW1iZXJOZXh0KG5ld2l0ZW1vZmYpOw0KIAl9 DQogDQorCS8qDQorCSAqIE9uIGEgcHJlZml4LWNvbXByZXNzZWQgcGFnZSB0aGUgbmV3IGl0ZW0g aXMgc3RvcmVkIGNvZGVkLCB3aGljaCBpcyBhdA0KKwkgKiBtb3N0IE1BWEFMSUdOIGxhcmdlciB0 aGFuIHBsYWluIGFuZCB1c3VhbGx5IG11Y2ggc21hbGxlci4gIFNpemUgdGhlIGZpdA0KKwkgKiB0 ZXN0IGFuZCB0aGUgcGxhY2VtZW50IGJ5IHRoZSBjb2RlZCBzaXplLiAgKFNwbGl0IGlzIGhhbmRs ZWQgb24gcGxhaW4NCisJICogdHVwbGVzOyBfYnRfc3BsaXQgcmUtY29tcHJlc3NlcyBlYWNoIGhh bGYgaXRzZWxmLikNCisJICovDQorCWlmIChwYWdlcHJlZml4KQ0KKwl7DQorCQljb2RlZGl0dXAg PSBfYnRfcHJlZml4X2VuY29kZShwYWdlLCBpdHVwKTsNCisJCWNvZGVkaXRlbXN6ID0gTUFYQUxJ R04oSW5kZXhUdXBsZVNpemUoY29kZWRpdHVwKSk7DQorCQkvKg0KKwkJICogQSBwb3N0aW5nLWxp c3Qgc3BsaXQgcmVwbGFjZXMgdGhlIGV4aXN0aW5nIGNvZGVkIHBvc3Rpbmcgd2l0aCBhDQorCQkg KiByZS1jb2RlZCBvbmU7IGVuY29kZSBpdCBoZXJlLCBiZWZvcmUgdGhlIGNyaXRpY2FsIHNlY3Rp b24sIHNpbmNlDQorCQkgKiBfYnRfcHJlZml4X2VuY29kZSgpIGFsbG9jYXRlcy4NCisJCSAqLw0K KwkJaWYgKG5wb3N0aW5nICE9IE5VTEwpDQorCQkJY29kZWRucG9zdGluZyA9IF9idF9wcmVmaXhf ZW5jb2RlKHBhZ2UsIG5wb3N0aW5nKTsNCisJfQ0KKwllbHNlDQorCXsNCisJCWNvZGVkaXR1cCA9 IGl0dXA7DQorCQljb2RlZGl0ZW1zeiA9IGl0ZW1zejsNCisJfQ0KKw0KIAkvKg0KIAkgKiBEbyB3 ZSBuZWVkIHRvIHNwbGl0IHRoZSBwYWdlIHRvIGZpdCB0aGUgaXRlbSBvbiBpdD8NCiAJICoNCiAJ ICogTm90ZTogUGFnZUdldEZyZWVTcGFjZSgpIHN1YnRyYWN0cyBzaXplb2YoSXRlbUlkRGF0YSkg ZnJvbSBpdHMgcmVzdWx0LA0KIAkgKiBzbyB0aGlzIGNvbXBhcmlzb24gaXMgY29ycmVjdCBldmVu IHRob3VnaCB3ZSBhcHBlYXIgdG8gYmUgYWNjb3VudGluZw0KLQkgKiBvbmx5IGZvciB0aGUgaXRl bSBhbmQgbm90IGZvciBpdHMgbGluZSBwb2ludGVyLg0KKwkgKiBvbmx5IGZvciB0aGUgaXRlbSBh bmQgbm90IGZvciBpdHMgbGluZSBwb2ludGVyLiAgVGhlIGNvZGVkIGl0ZW0gc2l6ZSBpcw0KKwkg KiB1c2VkOyBhIHBvc3RpbmctbGlzdCBzcGxpdCBhZGRpdGlvbmFsbHkgY2hhbmdlcyB0aGUgcG9z dGluZyB0dXBsZSdzDQorCSAqIHNpemUsIGJ1dCB0aGF0IGNhbiBvbmx5IHNocmluayBvciBrZWVw IGZyZWUgc3BhY2UgKHRoZSBuZXcgcG9zdGluZyBoYXMNCisJICogb25lIGZld2VyIFRJRCdzIHdv cnRoIG9mIHJvb20gcmV1c2VkIGJ5IG5ld2l0ZW0pLCBzbyB0aGUgaXRlbSBmaXQgdGVzdA0KKwkg KiByZW1haW5zIGEgc2FmZSB1cHBlciBib3VuZC4NCiAJICovDQotCWlmIChQYWdlR2V0RnJlZVNw YWNlKHBhZ2UpIDwgaXRlbXN6KQ0KKwlpZiAoUGFnZUdldEZyZWVTcGFjZShwYWdlKSA8IGNvZGVk aXRlbXN6KQ0KIAl7DQogCQlCdWZmZXIJCXJidWY7DQogDQogCQlBc3NlcnQoIXNwbGl0X29ubHlf cGFnZSk7DQogDQorCQlpZiAoY29kZWRpdHVwICE9IGl0dXApDQorCQkJcGZyZWUoY29kZWRpdHVw KTsNCisNCiAJCS8qIHNwbGl0IHRoZSBidWZmZXIgaW50byBsZWZ0IGFuZCByaWdodCBoYWx2ZXMg Ki8NCiAJCXJidWYgPSBfYnRfc3BsaXQocmVsLCBoZWFwcmVsLCBpdHVwX2tleSwgYnVmLCBjYnVm LCBuZXdpdGVtb2ZmLCBpdGVtc3osDQogCQkJCQkJIGl0dXAsIG9yaWdpdHVwLCBucG9zdGluZywg cG9zdGluZ29mZik7DQpAQCAtMTI5NSw5ICsxMzM1LDI1IEBAIF9idF9pbnNlcnRvbnBnKFJlbGF0 aW9uIHJlbCwNCiAJCVNUQVJUX0NSSVRfU0VDVElPTigpOw0KIA0KIAkJaWYgKHBvc3RpbmdvZmYg IT0gMCkNCi0JCQltZW1jcHkob3Bvc3RpbmcsIG5wb3N0aW5nLCBNQVhBTElHTihJbmRleFR1cGxl U2l6ZShucG9zdGluZykpKTsNCisJCXsNCisJCQlpZiAocGFnZXByZWZpeCkNCisJCQl7DQorCQkJ CS8qDQorCQkJCSAqIFRoZSBleGlzdGluZyBwb3N0aW5nIGlzIHN0b3JlZCBjb2RlZDsgcmVwbGFj ZSBpdHMgc2xvdCAoYXQNCisJCQkJICogdGhlIG9mZnNldCBqdXN0IGJlZm9yZSBuZXdpdGVtb2Zm LCBzaW5jZSBuZXdpdGVtb2ZmIHdhcw0KKwkJCQkgKiBhZHZhbmNlZCBwYXN0IGl0IGFib3ZlKSB3 aXRoIHRoZSBjb2RlZCBuZXcgcG9zdGluZyAoZW5jb2RlZA0KKwkJCQkgKiBiZWZvcmUgdGhlIGNy aXRpY2FsIHNlY3Rpb24pLCB3aG9zZSBzaXplIG1heSBkaWZmZXIuDQorCQkJCSAqLw0KKwkJCQlp ZiAoIVBhZ2VJbmRleFR1cGxlT3ZlcndyaXRlKHBhZ2UsIE9mZnNldE51bWJlclByZXYobmV3aXRl bW9mZiksDQorCQkJCQkJCQkJCQkgY29kZWRucG9zdGluZywgSW5kZXhUdXBsZVNpemUoY29kZWRu cG9zdGluZykpKQ0KKwkJCQkJZWxvZyhQQU5JQywgImZhaWxlZCB0byBvdmVyd3JpdGUgcG9zdGlu ZyBsaXN0IGluIGJsb2NrICV1IGluIGluZGV4IFwiJXNcIiIsDQorCQkJCQkJIEJ1ZmZlckdldEJs b2NrTnVtYmVyKGJ1ZiksIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOw0KKwkJCX0NCisJ CQllbHNlDQorCQkJCW1lbWNweShvcG9zdGluZywgbnBvc3RpbmcsIE1BWEFMSUdOKEluZGV4VHVw bGVTaXplKG5wb3N0aW5nKSkpOw0KKwkJfQ0KIA0KLQkJaWYgKFBhZ2VBZGRJdGVtKHBhZ2UsIGl0 dXAsIGl0ZW1zeiwgbmV3aXRlbW9mZiwgZmFsc2UsIGZhbHNlKSA9PSBJbnZhbGlkT2Zmc2V0TnVt YmVyKQ0KKwkJaWYgKFBhZ2VBZGRJdGVtKHBhZ2UsIGNvZGVkaXR1cCwgY29kZWRpdGVtc3osIG5l d2l0ZW1vZmYsIGZhbHNlLCBmYWxzZSkgPT0gSW52YWxpZE9mZnNldE51bWJlcikNCiAJCQllbG9n KFBBTklDLCAiZmFpbGVkIHRvIGFkZCBuZXcgaXRlbSB0byBibG9jayAldSBpbiBpbmRleCBcIiVz XCIiLA0KIAkJCQkgQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKSwgUmVsYXRpb25HZXRSZWxhdGlv bk5hbWUocmVsKSk7DQogDQpAQCAtMTM4MSw4ICsxNDM3LDMwIEBAIF9idF9pbnNlcnRvbnBnKFJl bGF0aW9uIHJlbCwNCiAJCQkJfQ0KIAkJCX0NCiANCi0JCQlYTG9nUmVnaXN0ZXJCdWZmZXIoMCwg YnVmLCBSRUdCVUZfU1RBTkRBUkQpOw0KLQkJCWlmIChwb3N0aW5nb2ZmID09IDApDQorCQkJWExv Z1JlZ2lzdGVyQnVmZmVyKDAsIGJ1ZiwNCisJCQkJCQkJICAgUkVHQlVGX1NUQU5EQVJEIHwNCisJ CQkJCQkJICAgKChwYWdlcHJlZml4ICYmIHBvc3RpbmdvZmYgIT0gMCkgPyBSRUdCVUZfRk9SQ0Vf SU1BR0UgOiAwKSk7DQorCQkJaWYgKHBhZ2VwcmVmaXggJiYgcG9zdGluZ29mZiAhPSAwKQ0KKwkJ CXsNCisJCQkJLyoNCisJCQkJICogQSBwb3N0aW5nLWxpc3Qgc3BsaXQgb24gYSBwcmVmaXggcGFn ZSByZXdyaXRlcyBhbiBleGlzdGluZw0KKwkJCQkgKiBjb2RlZCBwb3N0aW5nIGFuZCBhZGRzIGEg Y29kZWQgaXRlbTsgcmF0aGVyIHRoYW4gdGVhY2ggcmVkbyB0bw0KKwkJCQkgKiByZS1jb2RlIGJv dGgsIGZvcmNlIGEgZnVsbC1wYWdlIGltYWdlICh0aGlzIGlzIGEgcmFyZSBjYXNlKS4NCisJCQkJ ICogcG9zdGluZ29mZiBpcyBzdGlsbCByZWNvcmRlZCBmb3IgdGhlIHJlY29yZCBmb3JtYXQuDQor CQkJCSAqLw0KKwkJCQl1cG9zdGluZ29mZiA9IHBvc3RpbmdvZmY7DQorCQkJCVhMb2dSZWdpc3Rl ckJ1ZkRhdGEoMCwgJnVwb3N0aW5nb2ZmLCBzaXplb2YodWludDE2KSk7DQorCQkJfQ0KKwkJCWVs c2UgaWYgKHBhZ2VwcmVmaXgpDQorCQkJew0KKwkJCQkvKg0KKwkJCQkgKiBTaW1wbGUgaW5zZXJ0 IG9uIGEgcHJlZml4IHBhZ2U6IGxvZyB0aGUgQ09ERUQgaXRlbSBieXRlcyBhcw0KKwkJCQkgKiB0 aGV5IHdlcmUgcGxhY2VkIG9uIHRoZSBwYWdlLCBzbyByZWRvIGFkZHMgdGhlbSB2ZXJiYXRpbSBh dA0KKwkJCQkgKiBuZXdpdGVtb2ZmIC0tIG5vIGZ1bGwtcGFnZSBpbWFnZSBuZWVkZWQsIGFuZCBi eXRlLWlkZW50aWNhbC4NCisJCQkJICovDQorCQkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgKGNo YXIgKikgY29kZWRpdHVwLCBJbmRleFR1cGxlU2l6ZShjb2RlZGl0dXApKTsNCisJCQl9DQorCQkJ ZWxzZSBpZiAocG9zdGluZ29mZiA9PSAwKQ0KIAkJCXsNCiAJCQkJLyogSnVzdCBsb2cgaXR1cCBm cm9tIGNhbGxlciAqLw0KIAkJCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsIGl0dXAsIEluZGV4VHVw bGVTaXplKGl0dXApKTsNCkBAIC0xNDE4LDYgKzE0OTYsMTEgQEAgX2J0X2luc2VydG9ucGcoUmVs YXRpb24gcmVsLA0KIA0KIAkJRU5EX0NSSVRfU0VDVElPTigpOw0KIA0KKwkJaWYgKGNvZGVkaXR1 cCAhPSBpdHVwKQ0KKwkJCXBmcmVlKGNvZGVkaXR1cCk7DQorCQlpZiAoY29kZWRucG9zdGluZyAh PSBOVUxMICYmIGNvZGVkbnBvc3RpbmcgIT0gbnBvc3RpbmcpDQorCQkJcGZyZWUoY29kZWRucG9z dGluZyk7DQorDQogCQkvKiBSZWxlYXNlIHN1YnNpZGlhcnkgYnVmZmVycyAqLw0KIAkJaWYgKEJ1 ZmZlcklzVmFsaWQobWV0YWJ1ZikpDQogCQkJX2J0X3JlbGJ1ZihyZWwsIG1ldGFidWYpOw0KQEAg LTE1MDYsNiArMTU4OSwyMiBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFw cmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZlciBidWYsDQogCUl0ZW1JZAkJaXRlbWlk Ow0KIAlJbmRleFR1cGxlCWZpcnN0cmlnaHQsDQogCQkJCWxlZnRoaWdoa2V5Ow0KKwlCVEl0ZW1C dWYJZnJidWY7CQkJLyogZGVjb2RlIHNjcmF0Y2ggZm9yIGZpcnN0cmlnaHQgKi8NCisJQlRJdGVt QnVmCWxsYnVmOwkJCS8qIGRlY29kZSBzY3JhdGNoIGZvciBsYXN0bGVmdCAqLw0KKwlJbmRleFR1 cGxlICpsZWZ0aXRlbXMgPSBOVUxMOwkvKiBsZWFmOiBwbGFpbiBpdGVtcyBmb3IgdGhlIGxlZnQg aGFsZiAqLw0KKwlJbmRleFR1cGxlICpyaWdodGl0ZW1zID0gTlVMTDsJLyogbGVhZjogcGxhaW4g aXRlbXMgZm9yIHRoZSByaWdodCBoYWxmICovDQorCWludAkJCW5sZWZ0ID0gMDsNCisJaW50CQkJ bnJpZ2h0ID0gMDsNCisJSW5kZXhUdXBsZQlyaWdodGhpZ2hrZXkgPSBOVUxMOwkvKiBsZWFmIHJp Z2h0IGhhbGYncyBoaWdoIGtleSAoTlVMTD1yaWdodG1vc3QpICovDQorCWNvbnN0IGNoYXIgKm9y aWdwcmVmaXggPSBOVUxMOw0KKwlTaXplCQlvcmlncHJlZml4bGVuID0gMDsNCisJY2hhcgkJbGVm dHByZWZpeFtCVFJFRV9QUkVGSVhfTUFYXTsJLyogY2hvc2VuIHByZWZpeCBvZiBlYWNoIGxlYWYg aGFsZiAqLw0KKwljaGFyCQlyaWdodHByZWZpeFtCVFJFRV9QUkVGSVhfTUFYXTsNCisJU2l6ZQkJ bGVmdHByZWZpeGxlbiA9IDA7DQorCVNpemUJCXJpZ2h0cHJlZml4bGVuID0gMDsNCisJY2hhcgkg ICAqcmlnaHR3YWxidWYgPSBOVUxMOwkvKiBwYWNrZWQgcmlnaHQtcGFnZSBXQUwgcGF5bG9hZCAq Lw0KKwlTaXplCQlyaWdodHdhbGJ1ZmxlbiA9IDA7DQorCWJvb2wJCWZvcmNlX3JmcGkgPSBmYWxz ZTsJLyogY2FycnkgdGhlIHJpZ2h0IHBhZ2UgYXMgYSBmb3JjZWQgaW1hZ2UgKi8NCiAJT2Zmc2V0 TnVtYmVyIGZpcnN0cmlnaHRvZmY7DQogCU9mZnNldE51bWJlciBhZnRlcmxlZnRvZmYsDQogCQkJ CWFmdGVycmlnaHRvZmYsDQpAQCAtMTU3NSw3ICsxNjc0LDcgQEAgX2J0X3NwbGl0KFJlbGF0aW9u IHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVm LA0KIAkgKiBhbmQgSEFTX0dBUkJBR0UgZmxhZ3MuDQogCSAqLw0KIAlsb3BhcXVlLT5idHBvX2Zs YWdzID0gb29wYXF1ZS0+YnRwb19mbGFnczsNCi0JbG9wYXF1ZS0+YnRwb19mbGFncyAmPSB+KEJU UF9ST09UIHwgQlRQX1NQTElUX0VORCB8IEJUUF9IQVNfR0FSQkFHRSk7DQorCWxvcGFxdWUtPmJ0 cG9fZmxhZ3MgJj0gfihCVFBfUk9PVCB8IEJUUF9TUExJVF9FTkQgfCBCVFBfSEFTX0dBUkJBR0Ug fCBCVFBfUFJFRklYKTsNCiAJLyogc2V0IGZsYWcgaW4gbGVmdHBhZ2UgaW5kaWNhdGluZyB0aGF0 IHJpZ2h0cGFnZSBoYXMgbm8gZG93bmxpbmsgeWV0ICovDQogCWxvcGFxdWUtPmJ0cG9fZmxhZ3Mg fD0gQlRQX0lOQ09NUExFVEVfU1BMSVQ7DQogCWxvcGFxdWUtPmJ0cG9fcHJldiA9IG9vcGFxdWUt PmJ0cG9fcHJldjsNCkBAIC0xNjUwLDYgKzE3NDksOCBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVs LCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZlciBidWYsDQog CQlpdGVtaWQgPSBQYWdlR2V0SXRlbUlkKG9yaWdwYWdlLCBmaXJzdHJpZ2h0b2ZmKTsNCiAJCWl0 ZW1zeiA9IEl0ZW1JZEdldExlbmd0aChpdGVtaWQpOw0KIAkJZmlyc3RyaWdodCA9IChJbmRleFR1 cGxlKSBQYWdlR2V0SXRlbShvcmlncGFnZSwgaXRlbWlkKTsNCisJCWlmIChQX0hBU1BSRUZJWChv b3BhcXVlKSkNCisJCQlmaXJzdHJpZ2h0ID0gX2J0X3ByZWZpeF9kZWNvZGUob3JpZ3BhZ2UsIGZp cnN0cmlnaHQsICZmcmJ1Zik7DQogCQlpZiAoZmlyc3RyaWdodG9mZiA9PSBvcmlncGFnZXBvc3Rp bmdvZmYpDQogCQkJZmlyc3RyaWdodCA9IG5wb3N0aW5nOw0KIAl9DQpAQCAtMTY3Myw2ICsxNzc0 LDggQEAgX2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5z ZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVmLA0KIAkJCUFzc2VydChsYXN0bGVmdG9mZiA+PSBQX0ZJ UlNUREFUQUtFWShvb3BhcXVlKSk7DQogCQkJaXRlbWlkID0gUGFnZUdldEl0ZW1JZChvcmlncGFn ZSwgbGFzdGxlZnRvZmYpOw0KIAkJCWxhc3RsZWZ0ID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVt KG9yaWdwYWdlLCBpdGVtaWQpOw0KKwkJCWlmIChQX0hBU1BSRUZJWChvb3BhcXVlKSkNCisJCQkJ bGFzdGxlZnQgPSBfYnRfcHJlZml4X2RlY29kZShvcmlncGFnZSwgbGFzdGxlZnQsICZsbGJ1Zik7 DQogCQkJaWYgKGxhc3RsZWZ0b2ZmID09IG9yaWdwYWdlcG9zdGluZ29mZikNCiAJCQkJbGFzdGxl ZnQgPSBucG9zdGluZzsNCiAJCX0NCkBAIC0xNzEyLDcgKzE4MTUsMTEgQEAgX2J0X3NwbGl0KFJl bGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5LCBCdWZm ZXIgYnVmLA0KIAl9DQogDQogCS8qDQotCSAqIEFkZCBuZXcgaGlnaCBrZXkgdG8gbGVmdHBhZ2UN CisJICogQWRkIG5ldyBoaWdoIGtleSB0byBsZWZ0cGFnZS4gIEZvciBhIGxlYWYgc3BsaXQgdGhl IGxlZnQgaGFsZiBpcyBidWlsdA0KKwkgKiBhcyBhIHdob2xlIGJlbG93IChzbyBpdCBjYW4gYmUg cHJlZml4LWNvbXByZXNzZWQgZnJvbSB0aGUgc3RhcnQsIHdoaWNoDQorCSAqIGEgcGxhaW4gaW5j cmVtZW50YWwgYnVpbGQgY2Fubm90IHJlcHJlc2VudCB3aGVuIHRoZSBwYWdlIGhvbGRzIG1vcmUN CisJICogbG9naWNhbCBkYXRhIHRoYW4gZml0cyBwbGFpbik7IHRoZSBoaWdoIGtleSBpcyBwYXNz ZWQgdG8gdGhlIGJ1aWxkZXINCisJICogdGhlbi4gIEludGVybmFsIGhhbHZlcyBhcmUgYnVpbHQg aW5jcmVtZW50YWxseSBoZXJlIGFzIGJlZm9yZS4NCiAJICovDQogCWFmdGVybGVmdG9mZiA9IFBf SElLRVk7DQogDQpAQCAtMTcyMCwxMSArMTgyNywyMyBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVs LCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZlciBidWYsDQog CUFzc2VydChCVHJlZVR1cGxlR2V0TkF0dHMobGVmdGhpZ2hrZXksIHJlbCkgPD0NCiAJCSAgIElu ZGV4UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMocmVsKSk7DQogCUFzc2VydChpdGVt c3ogPT0gTUFYQUxJR04oSW5kZXhUdXBsZVNpemUobGVmdGhpZ2hrZXkpKSk7DQotCWlmIChQYWdl QWRkSXRlbShsZWZ0cGFnZSwgbGVmdGhpZ2hrZXksIGl0ZW1zeiwgYWZ0ZXJsZWZ0b2ZmLCBmYWxz ZSwgZmFsc2UpID09IEludmFsaWRPZmZzZXROdW1iZXIpDQotCQllbG9nKEVSUk9SLCAiZmFpbGVk IHRvIGFkZCBoaWdoIGtleSB0byB0aGUgbGVmdCBzaWJsaW5nIg0KLQkJCSAiIHdoaWxlIHNwbGl0 dGluZyBibG9jayAldSBvZiBpbmRleCBcIiVzXCIiLA0KLQkJCSBvcmlncGFnZW51bWJlciwgUmVs YXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7DQotCWFmdGVybGVmdG9mZiA9IE9mZnNldE51bWJl ck5leHQoYWZ0ZXJsZWZ0b2ZmKTsNCisJaWYgKGlzbGVhZikNCisJew0KKwkJLyogVGhlIGJ1aWxk ZXIgbmVlZHMgYSBzdGFibGUgY29weTsgbGVmdGhpZ2hrZXkgcG9pbnRzIGludG8gd29ya3NwYWNl LiAqLw0KKwkJbGVmdGhpZ2hrZXkgPSBDb3B5SW5kZXhUdXBsZShsZWZ0aGlnaGtleSk7DQorCQls ZWZ0aXRlbXMgPSBwYWxsb2NfYXJyYXkoSW5kZXhUdXBsZSwgbWF4b2ZmICsgMik7DQorCQlyaWdo dGl0ZW1zID0gcGFsbG9jX2FycmF5KEluZGV4VHVwbGUsIG1heG9mZiArIDIpOw0KKwkJaWYgKFBf SEFTUFJFRklYKG9vcGFxdWUpKQ0KKwkJCW9yaWdwcmVmaXggPSBfYnRfcGFnZV9nZXRfcHJlZml4 KG9yaWdwYWdlLCAmb3JpZ3ByZWZpeGxlbik7DQorCX0NCisJZWxzZQ0KKwl7DQorCQlpZiAoUGFn ZUFkZEl0ZW0obGVmdHBhZ2UsIGxlZnRoaWdoa2V5LCBpdGVtc3osIGFmdGVybGVmdG9mZiwgZmFs c2UsIGZhbHNlKSA9PSBJbnZhbGlkT2Zmc2V0TnVtYmVyKQ0KKwkJCWVsb2coRVJST1IsICJmYWls ZWQgdG8gYWRkIGhpZ2gga2V5IHRvIHRoZSBsZWZ0IHNpYmxpbmciDQorCQkJCSAiIHdoaWxlIHNw bGl0dGluZyBibG9jayAldSBvZiBpbmRleCBcIiVzXCIiLA0KKwkJCQkgb3JpZ3BhZ2VudW1iZXIs IFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOw0KKwkJYWZ0ZXJsZWZ0b2ZmID0gT2Zmc2V0 TnVtYmVyTmV4dChhZnRlcmxlZnRvZmYpOw0KKwl9DQogDQogCS8qDQogCSAqIEFjcXVpcmUgYSBu ZXcgcmlnaHQgcGFnZSB0byBzcGxpdCBpbnRvLCBub3cgdGhhdCBsZWZ0IHBhZ2UgaGFzIGEgbmV3 DQpAQCAtMTc2NSw3ICsxODg0LDcgQEAgX2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24g aGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVmLA0KIAkgKiBhbmQgSEFT X0dBUkJBR0UgZmxhZ3MuDQogCSAqLw0KIAlyb3BhcXVlLT5idHBvX2ZsYWdzID0gb29wYXF1ZS0+ YnRwb19mbGFnczsNCi0Jcm9wYXF1ZS0+YnRwb19mbGFncyAmPSB+KEJUUF9ST09UIHwgQlRQX1NQ TElUX0VORCB8IEJUUF9IQVNfR0FSQkFHRSk7DQorCXJvcGFxdWUtPmJ0cG9fZmxhZ3MgJj0gfihC VFBfUk9PVCB8IEJUUF9TUExJVF9FTkQgfCBCVFBfSEFTX0dBUkJBR0UgfCBCVFBfUFJFRklYKTsN CiAJcm9wYXF1ZS0+YnRwb19wcmV2ID0gb3JpZ3BhZ2VudW1iZXI7DQogCXJvcGFxdWUtPmJ0cG9f bmV4dCA9IG9vcGFxdWUtPmJ0cG9fbmV4dDsNCiAJcm9wYXF1ZS0+YnRwb19sZXZlbCA9IG9vcGFx dWUtPmJ0cG9fbGV2ZWw7DQpAQCAtMTc4MiwyMSArMTkwMSwyNSBAQCBfYnRfc3BsaXQoUmVsYXRp b24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZlciBi dWYsDQogDQogCWlmICghaXNyaWdodG1vc3QpDQogCXsNCi0JCUluZGV4VHVwbGUJcmlnaHRoaWdo a2V5Ow0KKwkJSXRlbUlkCQloaWl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWQob3JpZ3BhZ2UsIFBfSElL RVkpOw0KKwkJU2l6ZQkJaGlpdGVtc3ogPSBJdGVtSWRHZXRMZW5ndGgoaGlpdGVtaWQpOw0KKwkJ SW5kZXhUdXBsZQloaWtleSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShvcmlncGFnZSwgaGlp dGVtaWQpOw0KIA0KLQkJaXRlbWlkID0gUGFnZUdldEl0ZW1JZChvcmlncGFnZSwgUF9ISUtFWSk7 DQotCQlpdGVtc3ogPSBJdGVtSWRHZXRMZW5ndGgoaXRlbWlkKTsNCi0JCXJpZ2h0aGlnaGtleSA9 IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShvcmlncGFnZSwgaXRlbWlkKTsNCi0JCUFzc2VydChC VHJlZVR1cGxlR2V0TkF0dHMocmlnaHRoaWdoa2V5LCByZWwpID4gMCk7DQotCQlBc3NlcnQoQlRy ZWVUdXBsZUdldE5BdHRzKHJpZ2h0aGlnaGtleSwgcmVsKSA8PQ0KKwkJQXNzZXJ0KEJUcmVlVHVw bGVHZXROQXR0cyhoaWtleSwgcmVsKSA+IDApOw0KKwkJQXNzZXJ0KEJUcmVlVHVwbGVHZXROQXR0 cyhoaWtleSwgcmVsKSA8PQ0KIAkJCSAgIEluZGV4UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJp YnV0ZXMocmVsKSk7DQotCQlpZiAoUGFnZUFkZEl0ZW0ocmlnaHRwYWdlLCByaWdodGhpZ2hrZXks IGl0ZW1zeiwgYWZ0ZXJyaWdodG9mZiwgZmFsc2UsIGZhbHNlKSA9PSBJbnZhbGlkT2Zmc2V0TnVt YmVyKQ0KKwkJaWYgKGlzbGVhZikNCisJCQlyaWdodGhpZ2hrZXkgPSBDb3B5SW5kZXhUdXBsZSho aWtleSk7CS8qIHN0YWJsZTogb3JpZ3BhZ2UgaXMNCisJCQkJCQkJCQkJCQkJCSAqIG92ZXJ3cml0 dGVuIGJ5IHRoZSBsZWZ0DQorCQkJCQkJCQkJCQkJCQkgKiBoYWxmIGJlZm9yZSBXQUwgbG9nZ2lu ZyAqLw0KKwkJZWxzZQ0KIAkJew0KLQkJCWVsb2coRVJST1IsICJmYWlsZWQgdG8gYWRkIGhpZ2gg a2V5IHRvIHRoZSByaWdodCBzaWJsaW5nIg0KLQkJCQkgIiB3aGlsZSBzcGxpdHRpbmcgYmxvY2sg JXUgb2YgaW5kZXggXCIlc1wiIiwNCi0JCQkJIG9yaWdwYWdlbnVtYmVyLCBSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShyZWwpKTsNCisJCQlpZiAoUGFnZUFkZEl0ZW0ocmlnaHRwYWdlLCBoaWtleSwg aGlpdGVtc3osIGFmdGVycmlnaHRvZmYsIGZhbHNlLCBmYWxzZSkgPT0gSW52YWxpZE9mZnNldE51 bWJlcikNCisJCQkJZWxvZyhFUlJPUiwgImZhaWxlZCB0byBhZGQgaGlnaCBrZXkgdG8gdGhlIHJp Z2h0IHNpYmxpbmciDQorCQkJCQkgIiB3aGlsZSBzcGxpdHRpbmcgYmxvY2sgJXUgb2YgaW5kZXgg XCIlc1wiIiwNCisJCQkJCSBvcmlncGFnZW51bWJlciwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo cmVsKSk7DQorCQkJYWZ0ZXJyaWdodG9mZiA9IE9mZnNldE51bWJlck5leHQoYWZ0ZXJyaWdodG9m Zik7DQogCQl9DQotCQlhZnRlcnJpZ2h0b2ZmID0gT2Zmc2V0TnVtYmVyTmV4dChhZnRlcnJpZ2h0 b2ZmKTsNCiAJfQ0KIA0KIAkvKg0KQEAgLTE4MTMsNyArMTkzNiwyMSBAQCBfYnRfc3BsaXQoUmVs YXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZl ciBidWYsDQogCSAqDQogCSAqIE5vdGU6IHdlICptdXN0KiBpbnNlcnQgYXQgbGVhc3QgdGhlIHJp Z2h0IHBhZ2UncyBpdGVtcyBpbiBpdGVtLW51bWJlcg0KIAkgKiBvcmRlciwgZm9yIHRoZSBiZW5l Zml0IG9mIF9idF9yZXN0b3JlX3BhZ2UoKS4NCisJICoNCisJICogQSBsZWFmIHNwbGl0IGJ1aWxk cyBlYWNoIGhhbGYgYXMgYSB3aG9sZSBwYWdlIGJlbG93IChzbyBpdCBjYW4gYmUNCisJICogcHJl Zml4LWNvbXByZXNzZWQgZnJvbSB0aGUgc3RhcnQpLCB3aGljaCByZWRvIG11c3QgcmVwcm9kdWNl IGJ5dGUgZm9yDQorCSAqIGJ5dGUuICBUbyBrZWVwIHRoZSBwcmltYXJ5IGFuZCByZWRvIGluIGxv Y2sgc3RlcCwgYm90aCBkZXJpdmUgdGhlDQorCSAqIHNwbGl0J3MgcGxhaW4gaXRlbSBhcnJheXMg ZnJvbSB0aGUgb3JpZ2luYWwgcGFnZSB0aHJvdWdoIHRoZSBzaW5nbGUNCisJICogc2hhcmVkIHJv dXRpbmUgX2J0X3NwbGl0X2xlYWZfY29sbGVjdCgpOyB0aGUgaW5jcmVtZW50YWwgbG9vcCBoZXJl DQorCSAqIGhhbmRsZXMgb25seSB0aGUgaW50ZXJuYWwgKCFpc2xlYWYpIGNhc2UuDQogCSAqLw0K KwlpZiAoaXNsZWFmKQ0KKwl7DQorCQlfYnRfc3BsaXRfbGVhZl9jb2xsZWN0KG9yaWdwYWdlLCBm aXJzdHJpZ2h0b2ZmLCBuZXdpdGVtb2ZmLCBuZXdpdGVtLA0KKwkJCQkJCQkgICBuZXdpdGVtb25s ZWZ0LCBvcmlncGFnZXBvc3RpbmdvZmYsIG5wb3N0aW5nLA0KKwkJCQkJCQkgICBsZWZ0aXRlbXMs ICZubGVmdCwgcmlnaHRpdGVtcywgJm5yaWdodCk7DQorCX0NCisJZWxzZQ0KIAlmb3IgKGkgPSBQ X0ZJUlNUREFUQUtFWShvb3BhcXVlKTsgaSA8PSBtYXhvZmY7IGkgPSBPZmZzZXROdW1iZXJOZXh0 KGkpKQ0KIAl7DQogCQlJbmRleFR1cGxlCWRhdGFpdGVtOw0KQEAgLTE4MzcsMjQgKzE5NzQsMjAg QEAgX2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0 IGl0dXBfa2V5LCBCdWZmZXIgYnVmLA0KIAkJCXsNCiAJCQkJQXNzZXJ0KG5ld2l0ZW1vZmYgPD0g Zmlyc3RyaWdodG9mZik7DQogCQkJCWlmICghX2J0X3BnYWRkdHVwKGxlZnRwYWdlLCBuZXdpdGVt c3osIG5ld2l0ZW0sIGFmdGVybGVmdG9mZiwNCi0JCQkJCQkJCSAgZmFsc2UpKQ0KLQkJCQl7DQor CQkJCQkJCQkJICAgZmFsc2UpKQ0KIAkJCQkJZWxvZyhFUlJPUiwgImZhaWxlZCB0byBhZGQgbmV3 IGl0ZW0gdG8gdGhlIGxlZnQgc2libGluZyINCiAJCQkJCQkgIiB3aGlsZSBzcGxpdHRpbmcgYmxv Y2sgJXUgb2YgaW5kZXggXCIlc1wiIiwNCiAJCQkJCQkgb3JpZ3BhZ2VudW1iZXIsIFJlbGF0aW9u R2V0UmVsYXRpb25OYW1lKHJlbCkpOw0KLQkJCQl9DQogCQkJCWFmdGVybGVmdG9mZiA9IE9mZnNl dE51bWJlck5leHQoYWZ0ZXJsZWZ0b2ZmKTsNCiAJCQl9DQogCQkJZWxzZQ0KIAkJCXsNCiAJCQkJ QXNzZXJ0KG5ld2l0ZW1vZmYgPj0gZmlyc3RyaWdodG9mZik7DQogCQkJCWlmICghX2J0X3BnYWRk dHVwKHJpZ2h0cGFnZSwgbmV3aXRlbXN6LCBuZXdpdGVtLCBhZnRlcnJpZ2h0b2ZmLA0KLQkJCQkJ CQkJICBhZnRlcnJpZ2h0b2ZmID09IG1pbnVzaW5mb2ZmKSkNCi0JCQkJew0KKwkJCQkJCQkJCSAg IGFmdGVycmlnaHRvZmYgPT0gbWludXNpbmZvZmYpKQ0KIAkJCQkJZWxvZyhFUlJPUiwgImZhaWxl ZCB0byBhZGQgbmV3IGl0ZW0gdG8gdGhlIHJpZ2h0IHNpYmxpbmciDQogCQkJCQkJICIgd2hpbGUg c3BsaXR0aW5nIGJsb2NrICV1IG9mIGluZGV4IFwiJXNcIiIsDQogCQkJCQkJIG9yaWdwYWdlbnVt YmVyLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsNCi0JCQkJfQ0KIAkJCQlhZnRlcnJp Z2h0b2ZmID0gT2Zmc2V0TnVtYmVyTmV4dChhZnRlcnJpZ2h0b2ZmKTsNCiAJCQl9DQogCQl9DQpA QCAtMTg2MywyOCArMTk5NiwyNCBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBo ZWFwcmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZlciBidWYsDQogCQlpZiAoaSA8IGZp cnN0cmlnaHRvZmYpDQogCQl7DQogCQkJaWYgKCFfYnRfcGdhZGR0dXAobGVmdHBhZ2UsIGl0ZW1z eiwgZGF0YWl0ZW0sIGFmdGVybGVmdG9mZiwgZmFsc2UpKQ0KLQkJCXsNCiAJCQkJZWxvZyhFUlJP UiwgImZhaWxlZCB0byBhZGQgb2xkIGl0ZW0gdG8gdGhlIGxlZnQgc2libGluZyINCiAJCQkJCSAi IHdoaWxlIHNwbGl0dGluZyBibG9jayAldSBvZiBpbmRleCBcIiVzXCIiLA0KIAkJCQkJIG9yaWdw YWdlbnVtYmVyLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsNCi0JCQl9DQogCQkJYWZ0 ZXJsZWZ0b2ZmID0gT2Zmc2V0TnVtYmVyTmV4dChhZnRlcmxlZnRvZmYpOw0KIAkJfQ0KIAkJZWxz ZQ0KIAkJew0KIAkJCWlmICghX2J0X3BnYWRkdHVwKHJpZ2h0cGFnZSwgaXRlbXN6LCBkYXRhaXRl bSwgYWZ0ZXJyaWdodG9mZiwNCi0JCQkJCQkJICBhZnRlcnJpZ2h0b2ZmID09IG1pbnVzaW5mb2Zm KSkNCi0JCQl7DQorCQkJCQkJCQkgICBhZnRlcnJpZ2h0b2ZmID09IG1pbnVzaW5mb2ZmKSkNCiAJ CQkJZWxvZyhFUlJPUiwgImZhaWxlZCB0byBhZGQgb2xkIGl0ZW0gdG8gdGhlIHJpZ2h0IHNpYmxp bmciDQogCQkJCQkgIiB3aGlsZSBzcGxpdHRpbmcgYmxvY2sgJXUgb2YgaW5kZXggXCIlc1wiIiwN CiAJCQkJCSBvcmlncGFnZW51bWJlciwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7DQot CQkJfQ0KIAkJCWFmdGVycmlnaHRvZmYgPSBPZmZzZXROdW1iZXJOZXh0KGFmdGVycmlnaHRvZmYp Ow0KIAkJfQ0KIAl9DQogDQotCS8qIEhhbmRsZSBjYXNlIHdoZXJlIG5ld2l0ZW0gZ29lcyBhdCB0 aGUgZW5kIG9mIHJpZ2h0cGFnZSAqLw0KLQlpZiAoaSA8PSBuZXdpdGVtb2ZmKQ0KKwkvKiBIYW5k bGUgY2FzZSB3aGVyZSBuZXdpdGVtIGdvZXMgYXQgdGhlIGVuZCBvZiByaWdodHBhZ2UgKGludGVy bmFsIG9ubHkpICovDQorCWlmICghaXNsZWFmICYmIGkgPD0gbmV3aXRlbW9mZikNCiAJew0KIAkJ LyoNCiAJCSAqIENhbid0IGhhdmUgbmV3aXRlbW9ubGVmdCBoZXJlOyB0aGF0IHdvdWxkIGltcGx5 IHdlIHdlcmUgdG9sZCB0byBwdXQNCkBAIC0xODkzLDE1ICsyMDIyLDkwIEBAIF9idF9zcGxpdChS ZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tleSwgQnVm ZmVyIGJ1ZiwNCiAJCSAqLw0KIAkJQXNzZXJ0KCFuZXdpdGVtb25sZWZ0ICYmIG5ld2l0ZW1vZmYg PT0gbWF4b2ZmICsgMSk7DQogCQlpZiAoIV9idF9wZ2FkZHR1cChyaWdodHBhZ2UsIG5ld2l0ZW1z eiwgbmV3aXRlbSwgYWZ0ZXJyaWdodG9mZiwNCi0JCQkJCQkgIGFmdGVycmlnaHRvZmYgPT0gbWlu dXNpbmZvZmYpKQ0KLQkJew0KKwkJCQkJCQkgICBhZnRlcnJpZ2h0b2ZmID09IG1pbnVzaW5mb2Zm KSkNCiAJCQllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIGFkZCBuZXcgaXRlbSB0byB0aGUgcmlnaHQg c2libGluZyINCiAJCQkJICIgd2hpbGUgc3BsaXR0aW5nIGJsb2NrICV1IG9mIGluZGV4IFwiJXNc IiIsDQogCQkJCSBvcmlncGFnZW51bWJlciwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7 DQotCQl9DQogCQlhZnRlcnJpZ2h0b2ZmID0gT2Zmc2V0TnVtYmVyTmV4dChhZnRlcnJpZ2h0b2Zm KTsNCiAJfQ0KIA0KKwkvKg0KKwkgKiBMZWFmIGhhbHZlcyBhcmUgYnVpbHQgYXMgd2hvbGUgcGFn ZXMgbm93LCBzbyB0aGV5IGNhbiBiZSBwcmVmaXgtDQorCSAqIGNvbXByZXNzZWQgZnJvbSB0aGUg c3RhcnQgKFN0cmF0ZWd5IDE6IGEgcGFnZSBpcyBmYXVsdGVkIGludG8gdGhlDQorCSAqIEJUUF9Q UkVGSVggZm9ybWF0IG9ubHkgd2hlbiBpdCBpcyB3cml0dGVuIHdob2xlKS4gIFRoZSBwbGFpbiBp dGVtIGFycmF5cw0KKwkgKiB3ZXJlIGNvbGxlY3RlZCBhYm92ZSBieSBfYnRfc3BsaXRfbGVhZl9j b2xsZWN0KCksIHRoZSBzYW1lIHJvdXRpbmUgcmVkbw0KKwkgKiB1c2VzLCBzbyB0aGUgcHJpbWFy eSBhbmQgcmVkbyBsYXkgb3V0IGlkZW50aWNhbCBieXRlcy4NCisJICovDQorCWlmIChpc2xlYWYp DQorCXsNCisJCV9idF9zcGxpdF9sZWFmX2hhbGYocmVsLCBsZWZ0cGFnZSwgbGVmdGhpZ2hrZXks IGxlZnRpdGVtcywgbmxlZnQsDQorCQkJCQkJCW9yaWdwcmVmaXgsIG9yaWdwcmVmaXhsZW4sDQor CQkJCQkJCWxlZnRwcmVmaXgsICZsZWZ0cHJlZml4bGVuKTsNCisJCV9idF9zcGxpdF9sZWFmX2hh bGYocmVsLCByaWdodHBhZ2UsIHJpZ2h0aGlnaGtleSwgcmlnaHRpdGVtcywgbnJpZ2h0LA0KKwkJ CQkJCQlvcmlncHJlZml4LCBvcmlncHJlZml4bGVuLA0KKwkJCQkJCQlyaWdodHByZWZpeCwgJnJp Z2h0cHJlZml4bGVuKTsNCisNCisJCS8qDQorCQkgKiBCdWlsZCB0aGUgcmlnaHQgcGFnZSdzIFdB TCBwYXlsb2FkIG5vdywgYmVmb3JlIHRoZSBjcml0aWNhbCBzZWN0aW9uDQorCQkgKiAocGFsbG9j IGlzIGRpc2FsbG93ZWQgaW5zaWRlIGl0KTogdGhlIHJpZ2h0IHByZWZpeCBieXRlcywgdGhlbiB0 aGUNCisJCSAqIHJpZ2h0IGhpZ2gga2V5ICh1bmxlc3MgcmlnaHRtb3N0KSwgdGhlbiB0aGUgcmln aHQgaGFsZidzIHBsYWluIGl0ZW1zLA0KKwkJICogZWFjaCBNQVhBTElHTidkLCBpbiBvbmUgY29u dGlndW91cyBidWZmZXIgbG9nZ2VkIHdpdGggYSBzaW5nbGUgcmRhdGENCisJCSAqIHNsb3QuICBB IHZlcnkgY29tcHJlc3NpYmxlIHJpZ2h0IGhhbGYgd2hvc2UgcGxhaW4gaXRlbXMgd291bGQgZXhj ZWVkDQorCQkgKiBhIHBhZ2UgaXMgaW5zdGVhZCBjYXJyaWVkIGFzIGEgZnVsbC1wYWdlIGltYWdl IChzZXQgYmVsb3cpLCBzbyB0aGlzDQorCQkgKiBidWZmZXIgaXMgYm91bmRlZC4NCisJCSAqLw0K KwkJaWYgKGxlZnRwcmVmaXhsZW4gPiAwIHx8IHJpZ2h0cHJlZml4bGVuID4gMCB8fCBvcmlncHJl Zml4bGVuID4gMCkNCisJCXsNCisJCQlTaXplCQlyb2ZmID0gcmlnaHRwcmVmaXhsZW47DQorDQor CQkJaWYgKHJpZ2h0aGlnaGtleSAhPSBOVUxMKQ0KKwkJCQlyb2ZmICs9IE1BWEFMSUdOKEluZGV4 VHVwbGVTaXplKHJpZ2h0aGlnaGtleSkpOw0KKwkJCWZvciAoaW50IHJpID0gMDsgcmkgPCBucmln aHQ7IHJpKyspDQorCQkJCXJvZmYgKz0gTUFYQUxJR04oSW5kZXhUdXBsZVNpemUocmlnaHRpdGVt c1tyaV0pKTsNCisJCQlyaWdodHdhbGJ1ZiA9IHBhbGxvYyhNYXgocm9mZiwgMSkpOw0KKwkJCXJp Z2h0d2FsYnVmbGVuID0gcm9mZjsNCisNCisJCQkvKg0KKwkJCSAqIERlY2lkZSAoYmVmb3JlIHRo ZSBjcml0aWNhbCBzZWN0aW9uLCBzaW5jZSB0aGUgaW5qZWN0aW9uLXBvaW50DQorCQkJICogY2Fj aGUgbG9hZCBjYW4gYWxsb2NhdGUpIHdoZXRoZXIgdG8gY2FycnkgdGhlIHJpZ2h0IHBhZ2UgYXMg YQ0KKwkJCSAqIGZvcmNlZCBmdWxsLXBhZ2UgaW1hZ2U6IG5vcm1hbGx5IG9ubHkgd2hlbiBpdHMg cGxhaW4gcGF5bG9hZA0KKwkJCSAqIHdvdWxkIGV4Y2VlZCBhIGJsb2NrLCBidXQgYSB0ZXN0IGNh biBmb3JjZSB0aGUgb3RoZXJ3aXNlLXJhcmUNCisJCQkgKiBwYXRoIHdpdGggdGhlIG5idHJlZS1w cmVmaXgtZm9yY2UtcmZwaSBpbmplY3Rpb24gcG9pbnQuDQorCQkJICovDQorCQkJaWYgKHJpZ2h0 d2FsYnVmbGVuID4gQkxDS1NaKQ0KKwkJCQlmb3JjZV9yZnBpID0gdHJ1ZTsNCisjaWZkZWYgVVNF X0lOSkVDVElPTl9QT0lOVFMNCisJCQllbHNlIGlmIChJU19JTkpFQ1RJT05fUE9JTlRfQVRUQUNI RUQoIm5idHJlZS1wcmVmaXgtZm9yY2UtcmZwaSIpKQ0KKwkJCQlmb3JjZV9yZnBpID0gdHJ1ZTsN CisjZW5kaWYNCisNCisJCQlyb2ZmID0gMDsNCisJCQlpZiAocmlnaHRwcmVmaXhsZW4gPiAwKQ0K KwkJCXsNCisJCQkJbWVtY3B5KHJpZ2h0d2FsYnVmLCByaWdodHByZWZpeCwgcmlnaHRwcmVmaXhs ZW4pOw0KKwkJCQlyb2ZmICs9IHJpZ2h0cHJlZml4bGVuOw0KKwkJCX0NCisJCQlpZiAocmlnaHRo aWdoa2V5ICE9IE5VTEwpDQorCQkJew0KKwkJCQlTaXplCQloc3ogPSBJbmRleFR1cGxlU2l6ZShy aWdodGhpZ2hrZXkpOw0KKw0KKwkJCQltZW1jcHkocmlnaHR3YWxidWYgKyByb2ZmLCByaWdodGhp Z2hrZXksIGhzeik7DQorCQkJCWlmIChNQVhBTElHTihoc3opICE9IGhzeikNCisJCQkJCW1lbXNl dChyaWdodHdhbGJ1ZiArIHJvZmYgKyBoc3osIDAsIE1BWEFMSUdOKGhzeikgLSBoc3opOw0KKwkJ CQlyb2ZmICs9IE1BWEFMSUdOKGhzeik7DQorCQkJfQ0KKwkJCWZvciAoaW50IHJpID0gMDsgcmkg PCBucmlnaHQ7IHJpKyspDQorCQkJew0KKwkJCQlTaXplCQlyc3ogPSBJbmRleFR1cGxlU2l6ZShy aWdodGl0ZW1zW3JpXSk7DQorDQorCQkJCW1lbWNweShyaWdodHdhbGJ1ZiArIHJvZmYsIHJpZ2h0 aXRlbXNbcmldLCByc3opOw0KKwkJCQlpZiAoTUFYQUxJR04ocnN6KSAhPSByc3opDQorCQkJCQlt ZW1zZXQocmlnaHR3YWxidWYgKyByb2ZmICsgcnN6LCAwLCBNQVhBTElHTihyc3opIC0gcnN6KTsN CisJCQkJcm9mZiArPSBNQVhBTElHTihyc3opOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KIAkvKg0K IAkgKiBXZSBoYXZlIHRvIGdyYWIgdGhlIG9yaWdpbmFsIHJpZ2h0IHNpYmxpbmcgKGlmIGFueSkg YW5kIHVwZGF0ZSBpdHMgcHJldg0KIAkgKiBsaW5rLiAgV2UgYXJlIGd1YXJhbnRlZWQgdGhhdCB0 aGlzIGlzIGRlYWRsb2NrLWZyZWUsIHNpbmNlIHdlIGNvdXBsZQ0KQEAgLTIwMDUsMTcgKzIyMDks NzEgQEAgX2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5z ZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVmLA0KIAkJaWYgKHBvc3RpbmdvZmYgIT0gMCAmJiBvcmln cGFnZXBvc3RpbmdvZmYgPCBmaXJzdHJpZ2h0b2ZmKQ0KIAkJCXhscmVjLnBvc3RpbmdvZmYgPSBw b3N0aW5nb2ZmOw0KIA0KKwkJLyoNCisJCSAqIEEgbGVhZiBzcGxpdCB0aGF0IGludm9sdmVzIHBy ZWZpeCBjb21wcmVzc2lvbiAoZWl0aGVyIGhhbGYgZW5kcyB1cA0KKwkJICogY29tcHJlc3NlZCwg b3IgdGhlIHByZS1zcGxpdCBwYWdlIHdhcyBjb21wcmVzc2VkIHNvIGl0cyBpdGVtcyBhcmUNCisJ CSAqIGNvZGVkKSBpcyByZXBsYXllZCBieSByZWJ1aWxkaW5nIGJvdGggaGFsdmVzIGZyb20gdGhl IHByZS1zcGxpdCBwYWdlLA0KKwkJICogZXhhY3RseSBhcyB0aGUgcHJpbWFyeSBkaWQsIHJhdGhl ciB0aGFuIGJ5IHJlcGxheWluZyBsb2dnZWQgdHVwbGVzIC0tDQorCQkgKiB0aGUgY29kZWQgcGh5 c2ljYWwgbGF5b3V0IHdvdWxkIG5vdCBtYXRjaCBfYnRfcmVzdG9yZV9wYWdlLiAgTm8NCisJCSAq IGZ1bGwtcGFnZSBpbWFnZSBpcyBuZWVkZWQ7IHJlZG8gcmVjb25zdHJ1Y3RzIHRoZSBwbGFpbiBp dGVtcyBmcm9tIHRoZQ0KKwkJICogb3JpZ2luYWwgcGFnZSAoYmxvY2sgMCkgYW5kIGxheXMgZWFj aCBoYWxmIG91dCBjb2RlZCBhZ2FpbnN0IHRoZQ0KKwkJICogY2hvc2VuIHByZWZpeCwgd2hvc2Ug bGVuZ3RoIGFuZCBieXRlcyBhcmUgY2FycmllZCBpbiB0aGUgcmVjb3JkLg0KKwkJICovDQorCQl4 bHJlYy5mbGFncyA9IDA7DQorCQl4bHJlYy5sZWZ0cHJlZml4bGVuID0gMDsNCisJCXhscmVjLnJp Z2h0cHJlZml4bGVuID0gMDsNCisJCWlmIChpc2xlYWYgJiYgKGxlZnRwcmVmaXhsZW4gPiAwIHx8 IHJpZ2h0cHJlZml4bGVuID4gMCB8fCBvcmlncHJlZml4bGVuID4gMCkpDQorCQl7DQorCQkJeGxy ZWMuZmxhZ3MgfD0gWExIX1NQTElUX0xFQUZQUkVGSVg7DQorCQkJeGxyZWMubGVmdHByZWZpeGxl biA9ICh1aW50OCkgbGVmdHByZWZpeGxlbjsNCisJCQl4bHJlYy5yaWdodHByZWZpeGxlbiA9ICh1 aW50OCkgcmlnaHRwcmVmaXhsZW47DQorDQorCQkJLyoNCisJCQkgKiBUaGUgcmlnaHQgaGFsZiBp cyBub3JtYWxseSBjYXJyaWVkIGFzIGl0cyBwYWNrZWQgcGxhaW4gcGF5bG9hZA0KKwkJCSAqIChy ZWRvIGxheXMgaXQgb3V0IGNvZGVkKSwgZmFyIGNoZWFwZXIgdGhhbiBhIGZ1bGwtcGFnZSBpbWFn ZS4NCisJCQkgKiBCdXQgYSB2ZXJ5IGNvbXByZXNzaWJsZSBwYWdlIGNhbiBob2xkIG1vcmUgcGxh aW4gZGF0YSB0aGFuIGZpdHMNCisJCQkgKiBpbiBvbmUgcGFnZTsgZm9yY2VfcmZwaSAoZGVjaWRl ZCBiZWZvcmUgdGhlIGNyaXRpY2FsIHNlY3Rpb24pDQorCQkJICogY2FycmllcyB0aGUgY29kZWQg cmlnaHQgcGFnZSBhcyBhIGJvdW5kZWQgZnVsbC1wYWdlIGltYWdlIGluc3RlYWQuDQorCQkJICov DQorCQkJaWYgKGZvcmNlX3JmcGkpDQorCQkJCXhscmVjLmZsYWdzIHw9IFhMSF9TUExJVF9SRlBJ Ow0KKwkJfQ0KKw0KIAkJWExvZ0JlZ2luSW5zZXJ0KCk7DQogCQlYTG9nUmVnaXN0ZXJEYXRhKCZ4 bHJlYywgU2l6ZU9mQnRyZWVTcGxpdCk7DQogDQogCQlYTG9nUmVnaXN0ZXJCdWZmZXIoMCwgYnVm LCBSRUdCVUZfU1RBTkRBUkQpOw0KLQkJWExvZ1JlZ2lzdGVyQnVmZmVyKDEsIHJidWYsIFJFR0JV Rl9XSUxMX0lOSVQpOw0KKwkJLyoNCisJCSAqIFRoZSByaWdodCBwYWdlIGlzIHJlYnVpbHQgZnJv bSBzY3JhdGNoIGluIHJlZG8uICBPcmRpbmFyaWx5IHRoYXQgaXMNCisJCSAqIGZyb20gdGhlIGxv Z2dlZCB0dXBsZSByZWdpb24gKFJFR0JVRl9XSUxMX0lOSVQpLiAgQSBwcmVmaXgtbGVhZiBzcGxp dA0KKwkJICogaW5zdGVhZCByZWJ1aWxkcyBpdCBmcm9tIGl0cyBsb2dnZWQgcGxhaW4gaXRlbXMs IHVubGVzcyB0aG9zZSB3b3VsZA0KKwkJICogb3ZlcmZsb3cgdGhlIHJlY29yZCAoWExIX1NQTElU X1JGUEkpLCBpbiB3aGljaCBjYXNlIHRoZSBjb2RlZCBwYWdlIGlzDQorCQkgKiBjYXJyaWVkIGFz IGEgZm9yY2VkIGZ1bGwtcGFnZSBpbWFnZS4NCisJCSAqLw0KKwkJWExvZ1JlZ2lzdGVyQnVmZmVy KDEsIHJidWYsDQorCQkJCQkJICAgKHhscmVjLmZsYWdzICYgWExIX1NQTElUX1JGUEkpID8NCisJ CQkJCQkgICAoUkVHQlVGX1NUQU5EQVJEIHwgUkVHQlVGX0ZPUkNFX0lNQUdFKSA6IFJFR0JVRl9X SUxMX0lOSVQpOw0KIAkJLyogTG9nIG9yaWdpbmFsIHJpZ2h0IHNpYmxpbmcsIHNpbmNlIHdlJ3Zl IGNoYW5nZWQgaXRzIHByZXYtcG9pbnRlciAqLw0KIAkJaWYgKCFpc3JpZ2h0bW9zdCkNCiAJCQlY TG9nUmVnaXN0ZXJCdWZmZXIoMiwgc2J1ZiwgUkVHQlVGX1NUQU5EQVJEKTsNCiAJCWlmICghaXNs ZWFmKQ0KIAkJCVhMb2dSZWdpc3RlckJ1ZmZlcigzLCBjYnVmLCBSRUdCVUZfU1RBTkRBUkQpOw0K IA0KKwkJLyoNCisJCSAqIEZvciBhIHByZWZpeCBsZWFmIHNwbGl0LCBjYXJyeSBlYWNoIGhhbGYn cyBjaG9zZW4gcHJlZml4IGJ5dGVzLCBhbmQNCisJCSAqICh1bmxlc3MgdGhlIHJpZ2h0IHBhZ2Ug aXMgY2FycmllZCBhcyBhIGZ1bGwtcGFnZSBpbWFnZSkgdGhlIHJpZ2h0DQorCQkgKiBoaWdoIGtl eSBhbmQgdGhlIHJpZ2h0IGhhbGYncyBQTEFJTiBpdGVtcyBvbiBibG9jayAxLCBzbyByZWRvIGNh biBsYXkNCisJCSAqIHRoZSByaWdodCBwYWdlIG91dCBjb2RlZCB3aXRob3V0IGRlcGVuZGluZyBv biBibG9jayAwJ3Mgc3RhdGUgKGJsb2NrDQorCQkgKiAwIG1heSBiZSByZXN0b3JlZCBmcm9tIGFu IGF1dG9tYXRpYyBmdWxsLXBhZ2UgaW1hZ2UpLiAgVGhlIGxlZnQgaGFsZg0KKwkJICogaXMgcmVi dWlsdCBpbiByZWRvIGZyb20gdGhlIG9yaWdpbmFsIHBhZ2UgKGJsb2NrIDApIHdoZW4gaXQgbmVl ZHMNCisJCSAqIHJlZG8sIG9yIGZyb20gaXRzIG93biBGUEkgb3RoZXJ3aXNlLCBzbyB0aGUgbGVm dCBpdGVtcyBhcmUgbm90IGxvZ2dlZC4NCisJCSAqLw0KKwkJaWYgKHhscmVjLmZsYWdzICYgWExI X1NQTElUX0xFQUZQUkVGSVgpDQorCQl7DQorCQkJaWYgKCEoeGxyZWMuZmxhZ3MgJiBYTEhfU1BM SVRfUkZQSSkgJiYgcmlnaHR3YWxidWZsZW4gPiAwKQ0KKwkJCQlYTG9nUmVnaXN0ZXJCdWZEYXRh KDEsIHJpZ2h0d2FsYnVmLCByaWdodHdhbGJ1Zmxlbik7DQorCQl9DQorDQogCQkvKg0KIAkJICog TG9nIHRoZSBuZXcgaXRlbSwgaWYgaXQgd2FzIGluc2VydGVkIG9uIHRoZSBsZWZ0IHBhZ2UuIChJ ZiBpdCB3YXMNCiAJCSAqIHB1dCBvbiB0aGUgcmlnaHQgcGFnZSwgd2UgZG9uJ3QgbmVlZCB0byBl eHBsaWNpdGx5IFdBTCBsb2cgaXQNCkBAIC0yMDYzLDYgKzIzMjEsMTQgQEAgX2J0X3NwbGl0KFJl bGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5LCBCdWZm ZXIgYnVmLA0KIAkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgwLCBsZWZ0aGlnaGtleSwNCiAJCQkJCQkJ TUFYQUxJR04oSW5kZXhUdXBsZVNpemUobGVmdGhpZ2hrZXkpKSk7DQogDQorCQkvKg0KKwkJICog Rm9yIGEgcHJlZml4IGxlYWYgc3BsaXQsIHRoZSBsZWZ0IGhhbGYncyBjaG9zZW4gcHJlZml4IGJ5 dGVzIGZvbGxvdw0KKwkJICogdGhlIGhpZ2gga2V5IG9uIGJsb2NrIDAgKHJlZG8gcmVhZHMgbmV3 aXRlbS9vcmlnbmV3aXRlbSwgdGhlbiB0aGUNCisJCSAqIGhpZ2gga2V5LCB0aGVuIHRoaXMgcHJl Zml4KS4NCisJCSAqLw0KKwkJaWYgKCh4bHJlYy5mbGFncyAmIFhMSF9TUExJVF9MRUFGUFJFRklY KSAmJiBsZWZ0cHJlZml4bGVuID4gMCkNCisJCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsIGxlZnRw cmVmaXgsIGxlZnRwcmVmaXhsZW4pOw0KKw0KIAkJLyoNCiAJCSAqIExvZyB0aGUgY29udGVudHMg b2YgdGhlIHJpZ2h0IHBhZ2UgaW4gdGhlIGZvcm1hdCB1bmRlcnN0b29kIGJ5DQogCQkgKiBfYnRf cmVzdG9yZV9wYWdlKCkuICBUaGUgd2hvbGUgcmlnaHQgcGFnZSB3aWxsIGJlIHJlY3JlYXRlZC4N CkBAIC0yMDcxLDExICsyMzM3LDE0IEBAIF9idF9zcGxpdChSZWxhdGlvbiByZWwsIFJlbGF0aW9u IGhlYXByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tleSwgQnVmZmVyIGJ1ZiwNCiAJCSAqIHNvbWUg bmV3IGZ1bmMgaW4gcGFnZSBBUEkuICBOb3RlIHdlIG9ubHkgc3RvcmUgdGhlIHR1cGxlcw0KIAkJ ICogdGhlbXNlbHZlcywga25vd2luZyB0aGF0IHRoZXkgd2VyZSBpbnNlcnRlZCBpbiBpdGVtLW51 bWJlciBvcmRlcg0KIAkJICogYW5kIHNvIHRoZSBsaW5lIHBvaW50ZXJzIGNhbiBiZSByZWNvbnN0 cnVjdGVkLiAgU2VlIGNvbW1lbnRzIGZvcg0KLQkJICogX2J0X3Jlc3RvcmVfcGFnZSgpLg0KKwkJ ICogX2J0X3Jlc3RvcmVfcGFnZSgpLiAgQSBwcmVmaXgtY29tcHJlc3NlZCBsZWFmIHNwbGl0IGlu c3RlYWQgcmVidWlsZHMNCisJCSAqIHRoZSByaWdodCBwYWdlIGZyb20gdGhlIG9yaWdpbmFsIHBh Z2UgaW4gcmVkbyAoc2VlIFhMSF9TUExJVF9MRUFGUFJFRklYKSwNCisJCSAqIHNvIGl0cyB0dXBs ZSByZWdpb24gaXMgbm90IGxvZ2dlZC4NCiAJCSAqLw0KLQkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgx LA0KLQkJCQkJCQkoY2hhciAqKSByaWdodHBhZ2UgKyAoKFBhZ2VIZWFkZXIpIHJpZ2h0cGFnZSkt PnBkX3VwcGVyLA0KLQkJCQkJCQkoKFBhZ2VIZWFkZXIpIHJpZ2h0cGFnZSktPnBkX3NwZWNpYWwg LSAoKFBhZ2VIZWFkZXIpIHJpZ2h0cGFnZSktPnBkX3VwcGVyKTsNCisJCWlmICghKHhscmVjLmZs YWdzICYgWExIX1NQTElUX0xFQUZQUkVGSVgpKQ0KKwkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMSwN CisJCQkJCQkJCShjaGFyICopIHJpZ2h0cGFnZSArICgoUGFnZUhlYWRlcikgcmlnaHRwYWdlKS0+ cGRfdXBwZXIsDQorCQkJCQkJCQkoKFBhZ2VIZWFkZXIpIHJpZ2h0cGFnZSktPnBkX3NwZWNpYWwg LSAoKFBhZ2VIZWFkZXIpIHJpZ2h0cGFnZSktPnBkX3VwcGVyKTsNCiANCiAJCXhsaW5mbyA9IG5l d2l0ZW1vbmxlZnQgPyBYTE9HX0JUUkVFX1NQTElUX0wgOiBYTE9HX0JUUkVFX1NQTElUX1I7DQog CQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0JUUkVFX0lELCB4bGluZm8pOw0KQEAgLTI4MjAsNyAr MzA4OSwxNSBAQCBfYnRfZGVsZXRlX29yX2RlZHVwX29uZV9wYWdlKFJlbGF0aW9uIHJlbCwgUmVs YXRpb24gaGVhcFJlbCwNCiAJCV9idF9ib3R0b211cGRlbF9wYXNzKHJlbCwgYnVmZmVyLCBoZWFw UmVsLCBpbnNlcnRzdGF0ZS0+aXRlbXN6KSkNCiAJCXJldHVybjsNCiANCi0JLyogUGVyZm9ybSBk ZWR1cGxpY2F0aW9uIHBhc3MgKHdoZW4gZW5hYmxlZCBhbmQgaW5kZXgtaXMtYWxsZXF1YWxpbWFn ZSkgKi8NCisJLyoNCisJICogUGVyZm9ybSBkZWR1cGxpY2F0aW9uIHBhc3MgKHdoZW4gZW5hYmxl ZCBhbmQgaW5kZXgtaXMtYWxsZXF1YWxpbWFnZSkuDQorCSAqDQorCSAqIE9uIGEgcHJlZml4LWNv bXByZXNzZWQgcGFnZSB0aGUgcGFzcyBkZWNvZGVzIGl0ZW1zIGFuZCBsYXlzIHRoZSBkZWR1cGVk DQorCSAqIHJlc3VsdCBvdXQgcGxhaW4gYmVmb3JlIHJlLWNvZGluZyBpdDsgdGhlIGRlY29kZWQg c2V0IGNhbiBleGNlZWQgb25lDQorCSAqIHBhZ2UgZXZlbiB3aGVuIHRoZSBjb2RlZCBmb3JtIGZp dCwgaW4gd2hpY2ggY2FzZSB0aGUgcGFzcyBhYm9ydHMgd2l0aG91dA0KKwkgKiB0b3VjaGluZyB0 aGUgcGFnZSBhbmQgd2UgZmFsbCB0aHJvdWdoIHRvIHNwbGl0IGl0LiAgV2hlbiBpdCBkb2VzIGZp dCwgdGhlDQorCSAqIHJlY29tcHJlc3NlZCBwYWdlJ3MgV0FMIHJlcGxheXMgd2l0aG91dCBhIGZ1 bGwtcGFnZSBpbWFnZS4NCisJICovDQogCWlmIChCVEdldERlZHVwbGljYXRlSXRlbXMocmVsKSAm JiBpdHVwX2tleS0+YWxsZXF1YWxpbWFnZSkNCiAJCV9idF9kZWR1cF9wYXNzKHJlbCwgYnVmZmVy LCBpbnNlcnRzdGF0ZS0+aXR1cCwgaW5zZXJ0c3RhdGUtPml0ZW1zeiwNCiAJCQkJCSAgIChpbmRl eFVuY2hhbmdlZCB8fCB1bmlxdWVkdXApKTsNCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5j DQppbmRleCA4M2Q2ZDM2N2Y4MS4uYzc1NWVmYzgxYjAgMTAwNjQ0DQotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYw0KKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRwYWdlLmMNCkBAIC0xMjEyLDExICsxMjEyLDI2IEBAIF9idF9kZWxpdGVtc192YWN1dW0o UmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLA0KIAlpZiAobmRlbGV0YWJsZSA+IDApDQogCQlQYWdl SW5kZXhNdWx0aURlbGV0ZShwYWdlLCBkZWxldGFibGUsIG5kZWxldGFibGUpOw0KIA0KKwlvcGFx dWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7DQorDQorCS8qDQorCSAqIElmIFZBQ1VVTSBlbXB0 aWVkIGEgcHJlZml4LWNvbXByZXNzZWQgbGVhZiBvZiBhbGwgaXRzIGRhdGEgaXRlbXMsIGRyb3AN CisJICogdGhlIFBSRUZJWCBpdGVtIHRvbyBhbmQgY2xlYXIgQlRQX1BSRUZJWDogYW4gZW1wdHkg cGFnZSBjYXJyaWVzIG5vDQorCSAqIHByZWZpeCwgYW5kIHBhZ2UgZGVsZXRpb24gcmVsaWVzIG9u IGFuIGVtcHRpZWQgbGVhZiBob2xkaW5nIG9ubHkgaXRzDQorCSAqIGhpZ2gga2V5IChuYnRwYWdl LmMncyBfYnRfbWFya19wYWdlX2hhbGZkZWFkKS4gIFJlY29yZGVkIGluIHRoZSB2YWN1dW0NCisJ ICogcmVjb3JkIHNvIHJlZG8gZG9lcyB0aGUgc2FtZS4NCisJICovDQorCWlmIChQX0hBU1BSRUZJ WChvcGFxdWUpICYmDQorCQlQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpID09IEJUUGFnZUdl dFByZWZpeE9mZihvcGFxdWUpKQ0KKwl7DQorCQlQYWdlSW5kZXhUdXBsZURlbGV0ZShwYWdlLCBC VFBhZ2VHZXRQcmVmaXhPZmYob3BhcXVlKSk7DQorCQlvcGFxdWUtPmJ0cG9fZmxhZ3MgJj0gfkJU UF9QUkVGSVg7DQorCX0NCisNCiAJLyoNCiAJICogV2UgY2FuIGNsZWFyIHRoZSB2YWN1dW0gY3lj bGUgSUQgc2luY2UgdGhpcyBwYWdlIGhhcyBjZXJ0YWlubHkgYmVlbg0KIAkgKiBwcm9jZXNzZWQg YnkgdGhlIGN1cnJlbnQgdmFjdXVtIHNjYW4uDQogCSAqLw0KLQlvcGFxdWUgPSBCVFBhZ2VHZXRP cGFxdWUocGFnZSk7DQogCW9wYXF1ZS0+YnRwb19jeWNsZWlkID0gMDsNCiANCiAJLyoNCkBAIC0y MjQ1LDYgKzIyNjAsMjAgQEAgX2J0X21hcmtfcGFnZV9oYWxmZGVhZChSZWxhdGlvbiByZWwsIFJl bGF0aW9uIGhlYXByZWwsIEJ1ZmZlciBsZWFmYnVmLA0KIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFx dWUocGFnZSk7DQogCW9wYXF1ZS0+YnRwb19mbGFncyB8PSBCVFBfSEFMRl9ERUFEOw0KIA0KKwkv Kg0KKwkgKiBBIHByZWZpeC1jb21wcmVzc2VkIGxlYWYgYmVpbmcgZGVsZXRlZCBtYXkgc3RpbGwg Y2FycnkgaXRzIFBSRUZJWCBpdGVtDQorCSAqIChlLmcuIGVtcHRpZWQgYnkgc2ltcGxlIGRlbGV0 aW9uLCB3aGljaCBkb2VzIG5vdCBkcm9wIGl0KS4gIFJlbW92ZSBpdA0KKwkgKiBhbmQgY2xlYXIg QlRQX1BSRUZJWCBzbyB0aGUgcGFnZSBob2xkcyBvbmx5IGl0cyBoaWdoIGtleSwgYXMgdGhlDQor CSAqIGhhbGYtZGVhZCB0cmFuc2l0aW9uIGJlbG93IHJlcXVpcmVzLiAgUmVkbyAoYnRyZWVfeGxv Z19tYXJrX3BhZ2VfaGFsZmRlYWQpDQorCSAqIHJlaW5pdGlhbGl6ZXMgdGhlIHBhZ2UsIHNvIGl0 IG5lZWRzIG5vIHNlcGFyYXRlIGhhbmRsaW5nLg0KKwkgKi8NCisJaWYgKFBfSEFTUFJFRklYKG9w YXF1ZSkgJiYNCisJCVBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSkgPT0gQlRQYWdlR2V0UHJl Zml4T2ZmKG9wYXF1ZSkpDQorCXsNCisJCVBhZ2VJbmRleFR1cGxlRGVsZXRlKHBhZ2UsIEJUUGFn ZUdldFByZWZpeE9mZihvcGFxdWUpKTsNCisJCW9wYXF1ZS0+YnRwb19mbGFncyAmPSB+QlRQX1BS RUZJWDsNCisJfQ0KKw0KIAlBc3NlcnQoUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSA9PSBQ X0hJS0VZKTsNCiAJTWVtU2V0KCZ0cnVuY3R1cGxlLCAwLCBzaXplb2YoSW5kZXhUdXBsZURhdGEp KTsNCiAJdHJ1bmN0dXBsZS50X2luZm8gPSBzaXplb2YoSW5kZXhUdXBsZURhdGEpOw0KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cHJlZml4LmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHByZWZpeC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMDAwMDAuLmM3MjVmNzVjZDkyDQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHByZWZpeC5jDQpAQCAtMCwwICsxLDgxNCBAQA0KKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KKyAqDQorICogbmJ0cHJlZml4LmMNCisgKgkgIExlYWYga2V5IHByZWZpeCBj b21wcmVzc2lvbiBmb3IgUG9zdGdyZXMgYnRyZWVzLg0KKyAqDQorICogQSBsZWFmIHBhZ2Ugb2Yg YW4gaW5kZXggd2hvc2UgcHJlZml4X2NvbXByZXNzaW9uIHJlbG9wdGlvbiBpcyBvbiwgYW5kIHdo b3NlDQorICogZmlyc3Qga2V5IGNvbHVtbiBpcyBvZiBhIHZhcmxlbmEgdHlwZSwgbWF5IGJlIGZs YWdnZWQgQlRQX1BSRUZJWC4gIFN1Y2ggYQ0KKyAqIHBhZ2UgZnJvbnQtY29kZXMgdGhlIGZpcnN0 IGtleSBjb2x1bW4gb2YgZWFjaCBub24tcGl2b3QgdHVwbGUgYWdhaW5zdCBhDQorICogcGVyLXBh Z2UgUFJFRklYIGl0ZW0sIHNvIHRoYXQgYSBsb25nIGtleSB0aGF0IHJlcGVhdHMgb24gYSBwYWdl IGNvc3RzDQorICogbGl0dGxlIG1vcmUgdGhhbiBpdHMgdW5zaGFyZWQgdGFpbC4gIFRoZSBvbi1k aXNrIGZvcm1hdCBpcyBkb2N1bWVudGVkIGF0DQorICogQlRQX1BSRUZJWCBpbiBuYnRyZWUuaDsg dGhpcyBmaWxlIGlzIHRoZSBlbmNvZGVyLCBkZWNvZGVyLCBhbmQgdGhlIHBvbGljeQ0KKyAqIHRo YXQgY2hvb3NlcyBhIHBhZ2UncyBwcmVmaXguDQorICoNCisgKiBDb2RpbmcgYW5kIGRlY29kaW5n IGRlcGVuZCBvbmx5IG9uIHRoZSBwYWdlJ3MgcHJlZml4IGFuZCB0aGUgdHVwbGUsIG5vdCBvbg0K KyAqIHRoZSBjYXRhbG9nLCBzbyBXQUwgcmVkbyByZXBlYXRzIHRoZW0sIGFuZCBkZWNvZGluZyBy ZXByb2R1Y2VzIHRoZSBwbGFpbg0KKyAqIHR1cGxlIGJ5dGUgZm9yIGJ5dGUuICBBIHR1cGxlIGlu c2VydGVkIGxhdGVyIHRoYXQgc2hhcmVzIGxlc3Mgb2YgdGhlIHByZWZpeA0KKyAqIGp1c3Qgc3Rv cmVzIGEgc21hbGxlciBgc2hhcmVkJyBjb3VudCwgc28gbm8gaW5zZXJ0LCBWQUNVVU0sIGRlZHVw bGljYXRpb24NCisgKiBvciBjaGFuZ2Ugb2YgdGhlIHBhZ2UncyBrZXkgcmFuZ2UgZXZlciBoYXMg dG8gcmV3cml0ZSB0aGUgcGFnZSB0byBrZWVwIHRoZQ0KKyAqIHByZWZpeCB2YWxpZC4gIFRoZSBw cmVmaXggaXMgY2hvc2VuIG9ubHkgd2hlbiBhIHBhZ2UgaXMgd3JpdHRlbiBhcyBhIHdob2xlDQor ICogKENSRUFURSBJTkRFWCwgb3IgYSBoYWxmIG9mIGEgc3BsaXQpLg0KKyAqDQorICogVGhpcyBp cyBtb2RlbGVkIG9uIHRoZSBsZWFmIHByZWZpeCBjb21wcmVzc2lvbiBvZiB0aGUgQkFSSyBhY2Nl c3MgbWV0aG9kDQorICogKHNyYy9iYWNrZW5kL2FjY2Vzcy9iYXJrL2Jhcmt1dGlscy5jKS4NCisg Kg0KKyAqDQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwDQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0 LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWENCisgKg0KKyAqIElERU5U SUZJQ0FUSU9ODQorICoJICBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHByZWZpeC5jDQor ICoNCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisjaW5jbHVkZSAicG9zdGdyZXMuaCINCisN CisjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCINCisjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5oIg0K KyNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2UuaCINCisjaW5jbHVkZSAidXRpbHMvcmVsLmgiDQor DQorLyoNCisgKiBXaGVyZSBlYWNoIHBhcnQgb2YgYSB0dXBsZSBnb2VzIGluIGl0cyBjb2RlZCBm b3JtLiAgQ29kaW5nIGFuZCBkZWNvZGluZw0KKyAqIGJvdGggbGF5IHRoZSB0dXBsZSBvdXQgZnJv bSB0aGlzLCBzbyB0aGUgdHdvIGNhbm5vdCBkaXNhZ3JlZS4NCisgKi8NCit0eXBlZGVmIHN0cnVj dCBCVFByZWZpeFBsYW4NCit7DQorCVNpemUJCWhvZmY7CQkJLyogZGF0YSBvZmZzZXQ6IGhlYWRl ciBhbmQgbnVsbCBiaXRtYXAgKi8NCisJU2l6ZQkJYzE7CQkJCS8qIHBsYWluIGZpcnN0IGNvbHVt bidzIHNpemUsIHdpdGggaGVhZGVyICovDQorCVNpemUJCWtleWVuZDsJCQkvKiBlbmQgb2YgdGhl IHBsYWluIGtleSAocG9zdGluZyBvZmZzZXQpICovDQorCXVpbnQ4CQljb2RlOwkJCS8qIGZpcnN0 IHBheWxvYWQgYnl0ZSBvZiB0aGUgY29kZWQgY29sdW1uICovDQorCWNvbnN0IGNoYXIgKnN1ZmZp eDsJCQkvKiBieXRlcyBzdG9yZWQgYWZ0ZXIgaXQgKi8NCisJU2l6ZQkJc3VmZml4bGVuOw0KKwlT aXplCQl2c2l6ZTsJCQkvKiBjb2RlZCBjb2x1bW4ncyBzaXplLCB3aXRoIGhlYWRlciAqLw0KKwlT aXplCQljb2RlZGtleWVuZDsJLyogZW5kIG9mIHRoZSBjb2RlZCBrZXkgKi8NCisJU2l6ZQkJdG90 YWw7CQkJLyogc2l6ZSBvZiB0aGUgY29kZWQgdHVwbGUgKi8NCit9IEJUUHJlZml4UGxhbjsNCisN CisvKg0KKyAqIElzIGBpdHVwJyBzdG9yZWQgY29kZWQgb24gYSBCVFBfUFJFRklYIHBhZ2U/ICBP bmx5IGEgbm9uLXBpdm90IHR1cGxlIChwbGFpbg0KKyAqIG9yIHBvc3RpbmcpIHdob3NlIGZpcnN0 IGNvbHVtbiBpcyBub3QgTlVMTDsgYSBwaXZvdCAoaGlnaCBrZXksIGRvd25saW5rKQ0KKyAqIGlz IHN0b3JlZCBhcyBpdCBpcy4NCisgKi8NCitzdGF0aWMgYm9vbA0KK19idF9wcmVmaXhfY29kYWJs ZShJbmRleFR1cGxlIGl0dXApDQorew0KKwlpZiAoQlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkpDQor CQlyZXR1cm4gZmFsc2U7DQorCXJldHVybiAhSW5kZXhUdXBsZUhhc051bGxzKGl0dXApIHx8DQor CQkhYXR0X2lzbnVsbCgwLCAodWludDggKikgaXR1cCArIHNpemVvZihJbmRleFR1cGxlRGF0YSkp Ow0KK30NCisNCisvKg0KKyAqIERvZXMgdGhlIHZhcmxlbmEgYHZhbCcgaGF2ZSB0aGUgaGVhZGVy IGRlY29kaW5nIHdvdWxkIGdpdmUgaXQgYmFjazogdGhlDQorICogMS1ieXRlIGhlYWRlciBpZiBp dHMgZGF0YSBmaXQgb25lLCBlbHNlIGFuIHVuY29tcHJlc3NlZCA0LWJ5dGUgaGVhZGVyPw0KKyAq Lw0KK3N0YXRpYyBib29sDQorX2J0X3ByZWZpeF9jYW5vbmljYWwoY29uc3QgY2hhciAqdmFsKQ0K K3sNCisJaWYgKFZBUkFUVF9JU19TSE9SVCh2YWwpKQ0KKwkJcmV0dXJuICFWQVJBVFRfSVNfRVhU RVJOQUwodmFsKTsNCisJcmV0dXJuICFWQVJBVFRfSVNfRVhURU5ERUQodmFsKSAmJg0KKwkJVkFS U0laRSh2YWwpIC0gVkFSSERSU1ogKyBWQVJIRFJTWl9TSE9SVCA+IFZBUkFUVF9TSE9SVF9NQVg7 DQorfQ0KKw0KKy8qDQorICogRW5kIG9mIGEgbGVhZiB0dXBsZSdzIGtleTogdGhlIHBvc3Rpbmct bGlzdCBvZmZzZXQgZm9yIGEgcG9zdGluZyB0dXBsZSwgdGhlDQorICogd2hvbGUgdHVwbGUgc2l6 ZSBvdGhlcndpc2UuICBUaGUgYnl0ZXMgYWZ0ZXIgdGhlIGtleSAoYSBwb3N0aW5nIGxpc3QpIGFy ZQ0KKyAqIG1vdmVkIGFzIHRoZXkgYXJlLg0KKyAqLw0KK3N0YXRpYyBTaXplDQorX2J0X3ByZWZp eF9rZXllbmQoSW5kZXhUdXBsZSBpdHVwKQ0KK3sNCisJaWYgKEJUcmVlVHVwbGVJc1Bvc3Rpbmco aXR1cCkpDQorCQlyZXR1cm4gQlRyZWVUdXBsZUdldFBvc3RpbmdPZmZzZXQoaXR1cCk7DQorCXJl dHVybiBJbmRleFR1cGxlU2l6ZShpdHVwKTsNCit9DQorDQorLyoNCisgKiBUaGUgc2l6ZSBvZiBh IGNvZGVkIGZpcnN0IGNvbHVtbiB3aG9zZSBwYXlsb2FkIGlzIGBwYXlsb2FkJyBieXRlczogYQ0K KyAqIHZhcmxlbmEgd2l0aCBhIDEtYnl0ZSBoZWFkZXIgd2hlbiBpdCBmaXRzIG9uZS4NCisgKi8N CitzdGF0aWMgaW5saW5lIFNpemUNCitfYnRfcHJlZml4X3ZzaXplKFNpemUgcGF5bG9hZCkNCit7 DQorCWlmIChwYXlsb2FkICsgVkFSSERSU1pfU0hPUlQgPD0gVkFSQVRUX1NIT1JUX01BWCkNCisJ CXJldHVybiBwYXlsb2FkICsgVkFSSERSU1pfU0hPUlQ7DQorCXJldHVybiBwYXlsb2FkICsgVkFS SERSU1o7DQorfQ0KKw0KKy8qDQorICogT2Zmc2V0IGF0IHdoaWNoIHRoZSBieXRlcyBhZnRlciB0 aGUgZmlyc3QgY29sdW1uIGdvIGluIGEgY29kZWQgdHVwbGUgd2hvc2UNCisgKiBjb2RlZCBjb2x1 bW4gZW5kcyBhdCBgdmVuZCcsIHdoZW4gaW4gdGhlIHBsYWluIHR1cGxlIHRoZXkgc3RhcnQgYXQN CisgKiBgcmVzdG9yaWcnOiB0aGUgZmlyc3Qgb2Zmc2V0IGF0IG9yIGFmdGVyIGB2ZW5kJyB0aGF0 IGlzIHRoZSBzYW1lIGRpc3RhbmNlDQorICogcGFzdCBhIE1BWEFMSUdOIGJvdW5kYXJ5Lg0KKyAq Lw0KK3N0YXRpYyBpbmxpbmUgU2l6ZQ0KK19idF9wcmVmaXhfcmVzdG9mZihTaXplIHZlbmQsIFNp emUgcmVzdG9yaWcpDQorew0KKwlyZXR1cm4gdmVuZCArIChNQVhJTVVNX0FMSUdOT0YgKyByZXN0 b3JpZyAlIE1BWElNVU1fQUxJR05PRiAtDQorCQkJCSAgIHZlbmQgJSBNQVhJTVVNX0FMSUdOT0Yp ICUgTUFYSU1VTV9BTElHTk9GOw0KK30NCisNCisvKiBQbGFuIHRoZSBjb2Rpbmcgb2YgdGhlIGNv ZGFibGUgdHVwbGUgYGl0dXAnIGFnYWluc3QgYHByZWZpeCcuICovDQorc3RhdGljIHZvaWQNCitf YnRfcHJlZml4X3BsYW4oY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHByZWZpeGxlbiwgSW5kZXhU dXBsZSBpdHVwLA0KKwkJCQlCVFByZWZpeFBsYW4gKnBsYW4pDQorew0KKwljb25zdCBjaGFyICp2 YWw7DQorCVNpemUJCXJlc3RvcmlnOw0KKwlib29sCQlzdG9yZXJlc3Q7DQorDQorCXBsYW4tPmhv ZmYgPSBJbmRleEluZm9GaW5kRGF0YU9mZnNldChpdHVwLT50X2luZm8pOw0KKwl2YWwgPSAoY29u c3QgY2hhciAqKSBpdHVwICsgcGxhbi0+aG9mZjsNCisJcGxhbi0+YzEgPSBWQVJTSVpFX0FOWSh2 YWwpOw0KKwlwbGFuLT5rZXllbmQgPSBfYnRfcHJlZml4X2tleWVuZChpdHVwKTsNCisNCisJaWYg KF9idF9wcmVmaXhfY2Fub25pY2FsKHZhbCkpDQorCXsNCisJCWNvbnN0IGNoYXIgKmRhdGEgPSBW QVJEQVRBX0FOWSh2YWwpOw0KKwkJU2l6ZQkJZGF0YWxlbiA9IFZBUlNJWkVfQU5ZX0VYSERSKHZh bCk7DQorCQlTaXplCQlsaW1pdCA9IE1pbihwcmVmaXhsZW4sIGRhdGFsZW4pOw0KKwkJU2l6ZQkJ c2hhcmVkID0gMDsNCisNCisJCXdoaWxlIChzaGFyZWQgPCBsaW1pdCAmJiBwcmVmaXhbc2hhcmVk XSA9PSBkYXRhW3NoYXJlZF0pDQorCQkJc2hhcmVkKys7DQorCQlwbGFuLT5jb2RlID0gKHVpbnQ4 KSBzaGFyZWQ7DQorCQlwbGFuLT5zdWZmaXggPSBkYXRhICsgc2hhcmVkOw0KKwkJcGxhbi0+c3Vm Zml4bGVuID0gZGF0YWxlbiAtIHNoYXJlZDsNCisJfQ0KKwllbHNlDQorCXsNCisJCXBsYW4tPmNv ZGUgPSBCVFJFRV9QUkVGSVhfUkFXOw0KKwkJcGxhbi0+c3VmZml4ID0gdmFsOw0KKwkJcGxhbi0+ c3VmZml4bGVuID0gcGxhbi0+YzE7DQorCX0NCisJcGxhbi0+dnNpemUgPSBfYnRfcHJlZml4X3Zz aXplKDEgKyBwbGFuLT5zdWZmaXhsZW4pOw0KKw0KKwkvKg0KKwkgKiBUaGUgYnl0ZXMgYWZ0ZXIg dGhlIGZpcnN0IGNvbHVtbiBjYW4gYmUgbGVmdCBvdXQgd2hlbiB0aGV5IGFyZSBqdXN0IHRoZQ0K KwkgKiB6ZXJvIHBhZGRpbmcgdGhhdCBlbmRzIHRoZSBrZXkuDQorCSAqLw0KKwlyZXN0b3JpZyA9 IHBsYW4tPmhvZmYgKyBwbGFuLT5jMTsNCisJc3RvcmVyZXN0ID0gcGxhbi0+a2V5ZW5kICE9IE1B WEFMSUdOKHJlc3RvcmlnKTsNCisJZm9yIChTaXplIGkgPSByZXN0b3JpZzsgIXN0b3JlcmVzdCAm JiBpIDwgcGxhbi0+a2V5ZW5kOyBpKyspDQorCQlzdG9yZXJlc3QgPSAoKGNvbnN0IGNoYXIgKikg aXR1cClbaV0gIT0gMDsNCisNCisJaWYgKHN0b3JlcmVzdCkNCisJew0KKwkJcGxhbi0+Y29kZSB8 PSBCVFJFRV9QUkVGSVhfUkVTVDsNCisJCXBsYW4tPmNvZGVka2V5ZW5kID0gX2J0X3ByZWZpeF9y ZXN0b2ZmKHBsYW4tPmhvZmYgKyBwbGFuLT52c2l6ZSwNCisJCQkJCQkJCQkJCSAgIHJlc3Rvcmln KSArDQorCQkJKHBsYW4tPmtleWVuZCAtIHJlc3RvcmlnKTsNCisJfQ0KKwllbHNlDQorCQlwbGFu LT5jb2RlZGtleWVuZCA9IE1BWEFMSUdOKHBsYW4tPmhvZmYgKyBwbGFuLT52c2l6ZSk7DQorCXBs YW4tPnRvdGFsID0gcGxhbi0+Y29kZWRrZXllbmQgKyAoSW5kZXhUdXBsZVNpemUoaXR1cCkgLSBw bGFuLT5rZXllbmQpOw0KK30NCisNCisvKg0KKyAqIENvcHkgbiBieXRlcywgYXMgbWVtY3B5LiAg RGVjb2RpbmcgbW92ZXMgYSBmZXcgc2hvcnQgcnVucyBvZiBieXRlcyBwZXINCisgKiB0dXBsZTsg ZWlnaHQgYnl0ZXMgYXQgYSB0aW1lIGlzIHNldmVyYWwgdGltZXMgZmFzdGVyIHRoYW4gYSBsaWJj IG1lbWNweQ0KKyAqIGZvciBydW5zIHRoaXMgc2hvcnQgKHRoZSBzdHJpbmctbW92ZSBzdGFydHVw IGNvc3QgZG9taW5hdGVzIG90aGVyd2lzZSkuDQorICovDQorc3RhdGljIGlubGluZSB2b2lkDQor X2J0X3ByZWZpeF9jb3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBTaXplIG4pDQorew0K Kwl3aGlsZSAobiA+PSBzaXplb2YodWludDY0KSkNCisJew0KKwkJbWVtY3B5KGRzdCwgc3JjLCBz aXplb2YodWludDY0KSk7DQorCQlkc3QgKz0gc2l6ZW9mKHVpbnQ2NCk7DQorCQlzcmMgKz0gc2l6 ZW9mKHVpbnQ2NCk7DQorCQluIC09IHNpemVvZih1aW50NjQpOw0KKwl9DQorCXdoaWxlIChuLS0g PiAwKQ0KKwkJKmRzdCsrID0gKnNyYysrOw0KK30NCisNCisvKiBUaGUgcHJlZml4IG9mIGEgQlRQ X1BSRUZJWCBwYWdlLCBhbmQgaXRzIGxlbmd0aCBpbiAqbGVuLiAqLw0KK2NvbnN0IGNoYXIgKg0K K19idF9wYWdlX2dldF9wcmVmaXgoUGFnZSBwYWdlLCBTaXplICpsZW4pDQorew0KKwlCVFBhZ2VP cGFxdWUgb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOw0KKwlJbmRleFR1cGxlCWl0ZW07 DQorDQorCUFzc2VydChQX0hBU1BSRUZJWChvcGFxdWUpKTsNCisJaXRlbSA9IChJbmRleFR1cGxl KSBQYWdlR2V0SXRlbShwYWdlLA0KKwkJCQkJCQkJCVBhZ2VHZXRJdGVtSWQocGFnZSwNCisJCQkJ CQkJCQkJCQkgIEJUUGFnZUdldFByZWZpeE9mZihvcGFxdWUpKSk7DQorCSpsZW4gPSBJbmRleFR1 cGxlU2l6ZShpdGVtKSAtIHNpemVvZihJbmRleFR1cGxlRGF0YSk7DQorCXJldHVybiAoY29uc3Qg Y2hhciAqKSBpdGVtICsgc2l6ZW9mKEluZGV4VHVwbGVEYXRhKTsNCit9DQorDQorLyoNCisgKiBH aXZlIGBwYWdlJywgYSBsZWFmIGhvbGRpbmcgbm90aGluZyB5ZXQgYnV0IGl0cyBoaWdoIGtleSAo aWYgaXQgaGFzIG9uZSksDQorICogdGhlIHByZWZpeCBgcHJlZml4JyBvZiBgbGVuJyBieXRlczog YWRkIHRoZSBQUkVGSVggaXRlbSBhbmQgc2V0IEJUUF9QUkVGSVguDQorICogSXRzIHBhZGRpbmcg Y29tZXMgZnJvbSB0aGUgcGFnZSdzIGZyZWUgc3BhY2UsIHdoaWNoIF9idF9wYWdlaW5pdCB6ZXJv ZWQsIHNvDQorICogYSBwYWdlIHJlYnVpbHQgaW4gcmVkbyBpcyB0aGUgc2FtZS4NCisgKi8NCit2 b2lkDQorX2J0X3BhZ2Vfc2V0X3ByZWZpeChQYWdlIHBhZ2UsIGNvbnN0IGNoYXIgKnByZWZpeCwg U2l6ZSBsZW4pDQorew0KKwlCVFBhZ2VPcGFxdWUgb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBh Z2UpOw0KKwl1bmlvbg0KKwl7DQorCQlJbmRleFR1cGxlRGF0YSBoZHI7DQorCQljaGFyCQlkYXRh W3NpemVvZihJbmRleFR1cGxlRGF0YSkgKyBCVFJFRV9QUkVGSVhfTUFYXTsNCisJfQkJCWl0ZW07 DQorDQorCUFzc2VydChQX0lTTEVBRihvcGFxdWUpICYmICFQX0hBU1BSRUZJWChvcGFxdWUpKTsN CisJQXNzZXJ0KGxlbiA+PSAxICYmIGxlbiA8PSBCVFJFRV9QUkVGSVhfTUFYKTsNCisJQXNzZXJ0 KFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSkgPT0gQlRQYWdlR2V0UHJlZml4T2ZmKG9wYXF1 ZSkgLSAxKTsNCisNCisJbWVtc2V0KCZpdGVtLmhkciwgMCwgc2l6ZW9mKEluZGV4VHVwbGVEYXRh KSk7DQorCWl0ZW0uaGRyLnRfaW5mbyA9ICh1bnNpZ25lZCBzaG9ydCkgKHNpemVvZihJbmRleFR1 cGxlRGF0YSkgKyBsZW4pOw0KKwltZW1jcHkoaXRlbS5kYXRhICsgc2l6ZW9mKEluZGV4VHVwbGVE YXRhKSwgcHJlZml4LCBsZW4pOw0KKwlpZiAoUGFnZUFkZEl0ZW0ocGFnZSwgaXRlbS5kYXRhLCBz aXplb2YoSW5kZXhUdXBsZURhdGEpICsgbGVuLA0KKwkJCQkJQlRQYWdlR2V0UHJlZml4T2ZmKG9w YXF1ZSksIGZhbHNlLCBmYWxzZSkgPT0NCisJCUludmFsaWRPZmZzZXROdW1iZXIpDQorCQllbG9n KEVSUk9SLCAiZmFpbGVkIHRvIGFkZCBwcmVmaXggaXRlbSB0byBidHJlZSBwYWdlIik7DQorCW9w YXF1ZS0+YnRwb19mbGFncyB8PSBCVFBfUFJFRklYOw0KK30NCisNCisvKg0KKyAqIFRoZSBjb2Rl ZCBmb3JtIG9mIHRoZSBsZWFmIHR1cGxlIGBpdHVwJyBmb3IgYHBhZ2UnLCBwYWxsb2MnZDsgYGl0 dXAnIGl0c2VsZg0KKyAqIHdoZW4gdGhlIHBhZ2UgaGFzIG5vIHByZWZpeCBvciB0aGUgdHVwbGUg aXMgc3RvcmVkIHBsYWluLg0KKyAqLw0KK0luZGV4VHVwbGUNCitfYnRfcHJlZml4X2VuY29kZShQ YWdlIHBhZ2UsIEluZGV4VHVwbGUgaXR1cCkNCit7DQorCWNvbnN0IGNoYXIgKnByZWZpeDsNCisJ U2l6ZQkJcHJlZml4bGVuOw0KKwlCVFByZWZpeFBsYW4gcGxhbjsNCisJY2hhcgkgICAqY29kZWQ7 DQorCWNoYXIJICAgKnY7DQorCWNoYXIJICAgKnBheWxvYWQ7DQorDQorCWlmICghUF9IQVNQUkVG SVgoQlRQYWdlR2V0T3BhcXVlKHBhZ2UpKSB8fA0KKwkJIV9idF9wcmVmaXhfY29kYWJsZShpdHVw KSkNCisJCXJldHVybiBpdHVwOw0KKw0KKwlwcmVmaXggPSBfYnRfcGFnZV9nZXRfcHJlZml4KHBh Z2UsICZwcmVmaXhsZW4pOw0KKwlfYnRfcHJlZml4X3BsYW4ocHJlZml4LCBwcmVmaXhsZW4sIGl0 dXAsICZwbGFuKTsNCisJQXNzZXJ0KHBsYW4udG90YWwgPD0gSU5ERVhfU0laRV9NQVNLKTsNCisN CisJY29kZWQgPSBwYWxsb2MwKHBsYW4udG90YWwpOw0KKwltZW1jcHkoY29kZWQsIGl0dXAsIHBs YW4uaG9mZik7DQorCXYgPSBjb2RlZCArIHBsYW4uaG9mZjsNCisJaWYgKHBsYW4udnNpemUgPD0g VkFSQVRUX1NIT1JUX01BWCkNCisJew0KKwkJU0VUX1ZBUlNJWkVfU0hPUlQodiwgcGxhbi52c2l6 ZSk7DQorCQlwYXlsb2FkID0gdiArIFZBUkhEUlNaX1NIT1JUOw0KKwl9DQorCWVsc2UNCisJew0K KwkJU0VUX1ZBUlNJWkUodiwgcGxhbi52c2l6ZSk7DQorCQlwYXlsb2FkID0gdiArIFZBUkhEUlNa Ow0KKwl9DQorCXBheWxvYWRbMF0gPSAoY2hhcikgcGxhbi5jb2RlOw0KKwltZW1jcHkocGF5bG9h ZCArIDEsIHBsYW4uc3VmZml4LCBwbGFuLnN1ZmZpeGxlbik7DQorCWlmIChwbGFuLmNvZGUgJiBC VFJFRV9QUkVGSVhfUkVTVCkNCisJew0KKwkJU2l6ZQkJcmVzdG9yaWcgPSBwbGFuLmhvZmYgKyBw bGFuLmMxOw0KKw0KKwkJbWVtY3B5KGNvZGVkICsgX2J0X3ByZWZpeF9yZXN0b2ZmKHBsYW4uaG9m ZiArIHBsYW4udnNpemUsIHJlc3RvcmlnKSwNCisJCQkgICAoY2hhciAqKSBpdHVwICsgcmVzdG9y aWcsIHBsYW4ua2V5ZW5kIC0gcmVzdG9yaWcpOw0KKwl9DQorCW1lbWNweShjb2RlZCArIHBsYW4u Y29kZWRrZXllbmQsIChjaGFyICopIGl0dXAgKyBwbGFuLmtleWVuZCwNCisJCSAgIEluZGV4VHVw bGVTaXplKGl0dXApIC0gcGxhbi5rZXllbmQpOw0KKw0KKwkoKEluZGV4VHVwbGUpIGNvZGVkKS0+ dF9pbmZvID0NCisJCShpdHVwLT50X2luZm8gJiB+SU5ERVhfU0laRV9NQVNLKSB8ICh1bnNpZ25l ZCBzaG9ydCkgcGxhbi50b3RhbDsNCisJaWYgKEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpDQor CQlCVHJlZVR1cGxlU2V0UG9zdGluZygoSW5kZXhUdXBsZSkgY29kZWQsIEJUcmVlVHVwbGVHZXRO UG9zdGluZyhpdHVwKSwNCisJCQkJCQkJIHBsYW4uY29kZWRrZXllbmQpOw0KKw0KKyNpZmRlZiBV U0VfQVNTRVJUX0NIRUNLSU5HDQorCXsNCisJCUJUSXRlbUJ1ZgljaGVjazsNCisJCUluZGV4VHVw bGUJZGVjb2RlZCA9IF9idF9wcmVmaXhfZGVjb2RlKHBhZ2UsIChJbmRleFR1cGxlKSBjb2RlZCwN CisJCQkJCQkJCQkJCQkmY2hlY2spOw0KKw0KKwkJQXNzZXJ0KEluZGV4VHVwbGVTaXplKGRlY29k ZWQpID09IEluZGV4VHVwbGVTaXplKGl0dXApICYmDQorCQkJICAgbWVtY21wKGRlY29kZWQsIGl0 dXAsIEluZGV4VHVwbGVTaXplKGl0dXApKSA9PSAwKTsNCisJfQ0KKyNlbmRpZg0KKw0KKwlyZXR1 cm4gKEluZGV4VHVwbGUpIGNvZGVkOw0KK30NCisNCisvKiBUaGUgTUFYQUxJR05lZCBzaXplIGBp dHVwJyB0YWtlcyBvbiBgcGFnZScsIGNvZGVkIGlmIHRoZSBwYWdlIGNvZGVzIGl0LiAqLw0KK1Np emUNCitfYnRfcHJlZml4X2NvZGVkX3NpemUoUGFnZSBwYWdlLCBJbmRleFR1cGxlIGl0dXApDQor ew0KKwljb25zdCBjaGFyICpwcmVmaXg7DQorCVNpemUJCXByZWZpeGxlbjsNCisJQlRQcmVmaXhQ bGFuIHBsYW47DQorDQorCWlmICghUF9IQVNQUkVGSVgoQlRQYWdlR2V0T3BhcXVlKHBhZ2UpKSB8 fA0KKwkJIV9idF9wcmVmaXhfY29kYWJsZShpdHVwKSkNCisJCXJldHVybiBNQVhBTElHTihJbmRl eFR1cGxlU2l6ZShpdHVwKSk7DQorDQorCXByZWZpeCA9IF9idF9wYWdlX2dldF9wcmVmaXgocGFn ZSwgJnByZWZpeGxlbik7DQorCV9idF9wcmVmaXhfcGxhbihwcmVmaXgsIHByZWZpeGxlbiwgaXR1 cCwgJnBsYW4pOw0KKwlyZXR1cm4gTUFYQUxJR04ocGxhbi50b3RhbCk7DQorfQ0KKw0KKy8qDQor ICogRGVjb2RlIHRoZSBpdGVtIGBpdHVwJyBvZiB0aGUgQlRQX1BSRUZJWCBwYWdlIGBwYWdlJyBp bnRvIGBidWYnLCBhbmQgcmV0dXJuDQorICogaXQ7IGFuIGl0ZW0gc3RvcmVkIHBsYWluIGlzIHJl dHVybmVkIGFzIGl0IGlzLiAgVGhlIGludmVyc2Ugb2YNCisgKiBfYnRfcHJlZml4X2VuY29kZSwg Ynl0ZSBmb3IgYnl0ZS4gIEFuIGl0ZW0gdGhhdCBkb2VzIG5vdCBkZWNvZGUgd2l0aGluIGl0cw0K KyAqIG93biBib3VuZHMsIG9yIGNsYWltcyBtb3JlIG9mIHRoZSBwcmVmaXggdGhhbiB0aGUgcGFn ZSBoYXMsIGlzIHJlcG9ydGVkIGFzDQorICogY29ycnVwdGlvbi4NCisgKi8NCitJbmRleFR1cGxl DQorX2J0X3ByZWZpeF9kZWNvZGUoUGFnZSBwYWdlLCBJbmRleFR1cGxlIGl0dXAsIEJUSXRlbUJ1 ZiAqYnVmKQ0KK3sNCisJY29uc3QgY2hhciAqcHJlZml4Ow0KKwlTaXplCQlwcmVmaXhsZW47DQor CVNpemUJCXNpemUgPSBJbmRleFR1cGxlU2l6ZShpdHVwKTsNCisJU2l6ZQkJaG9mZjsNCisJU2l6 ZQkJY29kZWRrZXllbmQ7DQorCWNvbnN0IGNoYXIgKnY7DQorCVNpemUJCXZzaXplID0gMDsNCisJ Y29uc3QgY2hhciAqcGF5bG9hZDsNCisJU2l6ZQkJcGF5bGVuID0gMDsNCisJdWludDgJCWNvZGU7 DQorCVNpemUJCXNoYXJlZDsNCisJY2hhcgkgICAqb3V0ID0gYnVmLT5kYXRhOw0KKwljaGFyCSAg ICp2YWwgPSBOVUxMOw0KKwlTaXplCQljMTsNCisJU2l6ZQkJcmVzdG9yaWc7DQorCVNpemUJCWtl eWVuZDsNCisNCisJaWYgKCFfYnRfcHJlZml4X2NvZGFibGUoaXR1cCkpDQorCQlyZXR1cm4gaXR1 cDsNCisNCisJcHJlZml4ID0gX2J0X3BhZ2VfZ2V0X3ByZWZpeChwYWdlLCAmcHJlZml4bGVuKTsN CisJaG9mZiA9IEluZGV4SW5mb0ZpbmREYXRhT2Zmc2V0KGl0dXAtPnRfaW5mbyk7DQorCWNvZGVk a2V5ZW5kID0gX2J0X3ByZWZpeF9rZXllbmQoaXR1cCk7DQorCXYgPSAoY29uc3QgY2hhciAqKSBp dHVwICsgaG9mZjsNCisJaWYgKGhvZmYgPj0gY29kZWRrZXllbmQgfHwgY29kZWRrZXllbmQgPiBz aXplIHx8DQorCQkodnNpemUgPSBWQVJTSVpFX0FOWSh2KSkgPiBjb2RlZGtleWVuZCAtIGhvZmYg fHwNCisJCShwYXlsZW4gPSBWQVJTSVpFX0FOWV9FWEhEUih2KSkgPCAxKQ0KKwkJZ290byBjb3Jy dXB0Ow0KKwlwYXlsb2FkID0gVkFSREFUQV9BTlkodik7DQorCWNvZGUgPSAodWludDgpIHBheWxv YWRbMF07DQorCXNoYXJlZCA9IGNvZGUgJiBCVFJFRV9QUkVGSVhfU0hBUkVEX01BU0s7DQorDQor CV9idF9wcmVmaXhfY29weShvdXQsIChjb25zdCBjaGFyICopIGl0dXAsIGhvZmYpOw0KKwl2YWwg PSBvdXQgKyBob2ZmOw0KKwlpZiAoc2hhcmVkID09IEJUUkVFX1BSRUZJWF9SQVcpDQorCXsNCisJ CWMxID0gcGF5bGVuIC0gMTsNCisJCV9idF9wcmVmaXhfY29weSh2YWwsIHBheWxvYWQgKyAxLCBj MSk7DQorCQlpZiAoYzEgPCBWQVJIRFJTWl9TSE9SVCB8fCBWQVJTSVpFX0FOWSh2YWwpICE9IGMx KQ0KKwkJCWdvdG8gY29ycnVwdDsNCisJfQ0KKwllbHNlDQorCXsNCisJCVNpemUJCWRhdGFsZW4g PSBzaGFyZWQgKyBwYXlsZW4gLSAxOw0KKwkJY2hhcgkgICAqZGF0YTsNCisNCisJCWlmIChob2Zm ICsgVkFSSERSU1ogKyBkYXRhbGVuID4gc2l6ZW9mKEJUSXRlbUJ1ZikpDQorCQkJZ290byBjb3Jy dXB0Ow0KKwkJaWYgKHNoYXJlZCA+IHByZWZpeGxlbikNCisJCQllcmVwb3J0KEVSUk9SLA0KKwkJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTkRFWF9DT1JSVVBURUQpLA0KKwkJCQkJIGVycm1zZ19pbnRl cm5hbCgiYnRyZWUgbGVhZiB0dXBsZSBzaGFyZXMgJXp1IGJ5dGVzIG9mIGEgJXp1LWJ5dGUgcGFn ZSBwcmVmaXgiLA0KKwkJCQkJCQkJCSBzaGFyZWQsIHByZWZpeGxlbikpKTsNCisJCWlmIChkYXRh bGVuICsgVkFSSERSU1pfU0hPUlQgPD0gVkFSQVRUX1NIT1JUX01BWCkNCisJCXsNCisJCQljMSA9 IGRhdGFsZW4gKyBWQVJIRFJTWl9TSE9SVDsNCisJCQlTRVRfVkFSU0laRV9TSE9SVCh2YWwsIGMx KTsNCisJCQlkYXRhID0gdmFsICsgVkFSSERSU1pfU0hPUlQ7DQorCQl9DQorCQllbHNlDQorCQl7 DQorCQkJYzEgPSBkYXRhbGVuICsgVkFSSERSU1o7DQorCQkJU0VUX1ZBUlNJWkUodmFsLCBjMSk7 DQorCQkJZGF0YSA9IHZhbCArIFZBUkhEUlNaOw0KKwkJfQ0KKwkJX2J0X3ByZWZpeF9jb3B5KGRh dGEsIHByZWZpeCwgc2hhcmVkKTsNCisJCV9idF9wcmVmaXhfY29weShkYXRhICsgc2hhcmVkLCBw YXlsb2FkICsgMSwgcGF5bGVuIC0gMSk7DQorCX0NCisNCisJcmVzdG9yaWcgPSBob2ZmICsgYzE7 DQorCWlmIChjb2RlICYgQlRSRUVfUFJFRklYX1JFU1QpDQorCXsNCisJCVNpemUJCXJlc3RvZmYg PSBfYnRfcHJlZml4X3Jlc3RvZmYoaG9mZiArIHZzaXplLCByZXN0b3JpZyk7DQorDQorCQlpZiAo cmVzdG9mZiA+IGNvZGVka2V5ZW5kKQ0KKwkJCWdvdG8gY29ycnVwdDsNCisJCWtleWVuZCA9IHJl c3RvcmlnICsgKGNvZGVka2V5ZW5kIC0gcmVzdG9mZik7DQorCQlpZiAoa2V5ZW5kICsgKHNpemUg LSBjb2RlZGtleWVuZCkgPiBzaXplb2YoQlRJdGVtQnVmKSkNCisJCQlnb3RvIGNvcnJ1cHQ7DQor CQlfYnRfcHJlZml4X2NvcHkob3V0ICsgcmVzdG9yaWcsIChjb25zdCBjaGFyICopIGl0dXAgKyBy ZXN0b2ZmLA0KKwkJCQkJCWNvZGVka2V5ZW5kIC0gcmVzdG9mZik7DQorCX0NCisJZWxzZQ0KKwl7 DQorCQlrZXllbmQgPSBNQVhBTElHTihyZXN0b3JpZyk7DQorCQlpZiAoa2V5ZW5kICsgKHNpemUg LSBjb2RlZGtleWVuZCkgPiBzaXplb2YoQlRJdGVtQnVmKSkNCisJCQlnb3RvIGNvcnJ1cHQ7DQor CQltZW1zZXQob3V0ICsgcmVzdG9yaWcsIDAsIGtleWVuZCAtIHJlc3RvcmlnKTsNCisJfQ0KKwlf YnRfcHJlZml4X2NvcHkob3V0ICsga2V5ZW5kLCAoY29uc3QgY2hhciAqKSBpdHVwICsgY29kZWRr ZXllbmQsDQorCQkJCQlzaXplIC0gY29kZWRrZXllbmQpOw0KKw0KKwkoKEluZGV4VHVwbGUpIG91 dCktPnRfaW5mbyA9IChpdHVwLT50X2luZm8gJiB+SU5ERVhfU0laRV9NQVNLKSB8DQorCQkodW5z aWduZWQgc2hvcnQpIChrZXllbmQgKyAoc2l6ZSAtIGNvZGVka2V5ZW5kKSk7DQorCWlmIChCVHJl ZVR1cGxlSXNQb3N0aW5nKGl0dXApKQ0KKwkJQlRyZWVUdXBsZVNldFBvc3RpbmcoKEluZGV4VHVw bGUpIG91dCwgQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApLA0KKwkJCQkJCQkga2V5ZW5kKTsN CisJcmV0dXJuIChJbmRleFR1cGxlKSBvdXQ7DQorDQorY29ycnVwdDoNCisJZXJlcG9ydChFUlJP UiwNCisJCQkoZXJyY29kZShFUlJDT0RFX0lOREVYX0NPUlJVUFRFRCksDQorCQkJIGVycm1zZ19p bnRlcm5hbCgiYnRyZWUgbGVhZiB0dXBsZSBpcyBub3QgYSB2YWxpZCBwcmVmaXgtY29kZWQgdHVw bGUiKSkpOw0KKwlyZXR1cm4gTlVMTDsJCQkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLw0KK30N CisNCisvKg0KKyAqIFRoZSBieXRlcyBvZiBgaXR1cCcncyBmaXJzdCBjb2x1bW4gYSBwYWdlIHBy ZWZpeCBtYXkgYmUgdGFrZW4gZnJvbSwgYW5kIGhvdw0KKyAqIG1hbnkgKGF0IG1vc3QgQlRSRUVf UFJFRklYX01BWCkgaW4gKmxlbjsgTlVMTCB3aGVuIHRoZSB0dXBsZSBoYXMgbm9uZTogaXQNCisg KiBpcyBub3QgY29kYWJsZSwgaXRzIHZhbHVlIGlzIGVtcHR5LCBvciBpdCB3b3VsZCBiZSBzdG9y ZWQgcmF3Lg0KKyAqLw0KK2NvbnN0IGNoYXIgKg0KK19idF9wcmVmaXhfY2FuZGlkYXRlKEluZGV4 VHVwbGUgaXR1cCwgU2l6ZSAqbGVuKQ0KK3sNCisJY29uc3QgY2hhciAqdmFsOw0KKw0KKwlpZiAo IV9idF9wcmVmaXhfY29kYWJsZShpdHVwKSkNCisJCXJldHVybiBOVUxMOw0KKwl2YWwgPSAoY29u c3QgY2hhciAqKSBpdHVwICsgSW5kZXhJbmZvRmluZERhdGFPZmZzZXQoaXR1cC0+dF9pbmZvKTsN CisJaWYgKCFfYnRfcHJlZml4X2Nhbm9uaWNhbCh2YWwpIHx8IFZBUlNJWkVfQU5ZX0VYSERSKHZh bCkgPT0gMCkNCisJCXJldHVybiBOVUxMOw0KKwkqbGVuID0gTWluKFZBUlNJWkVfQU5ZX0VYSERS KHZhbCksIEJUUkVFX1BSRUZJWF9NQVgpOw0KKwlyZXR1cm4gVkFSREFUQV9BTlkodmFsKTsNCit9 DQorDQorLyoNCisgKiBIb3cgbWFueSBieXRlcyBvZiBgcHJlZml4JyB0aGUgZmlyc3QgY29sdW1u IG9mIGBpdHVwJyB3b3VsZCBzaGFyZSBvbiBhIHBhZ2UNCisgKiB3aXRoIHRoYXQgcHJlZml4OiAt MSB3aGVuIHRoZSB0dXBsZSB3b3VsZCBub3QgYmUgY29kZWQsIDAgd2hlbiBpdCB3b3VsZCBiZQ0K KyAqIHN0b3JlZCByYXcuDQorICovDQoraW50DQorX2J0X3ByZWZpeF9zaGFyZWQoY29uc3QgY2hh ciAqcHJlZml4LCBTaXplIHByZWZpeGxlbiwgSW5kZXhUdXBsZSBpdHVwKQ0KK3sNCisJQlRQcmVm aXhQbGFuIHBsYW47DQorDQorCWlmICghX2J0X3ByZWZpeF9jb2RhYmxlKGl0dXApKQ0KKwkJcmV0 dXJuIC0xOw0KKwlfYnRfcHJlZml4X3BsYW4ocHJlZml4LCBwcmVmaXhsZW4sIGl0dXAsICZwbGFu KTsNCisJaWYgKChwbGFuLmNvZGUgJiBCVFJFRV9QUkVGSVhfU0hBUkVEX01BU0spID09IEJUUkVF X1BSRUZJWF9SQVcpDQorCQlyZXR1cm4gMDsNCisJcmV0dXJuIHBsYW4uY29kZSAmIEJUUkVFX1BS RUZJWF9TSEFSRURfTUFTSzsNCit9DQorDQorLyoNCisgKiBNYXkgdGhlIGxlYXZlcyBvZiBgaW5k ZXgnIGhhdmUgYSBwcmVmaXg/ICBPbmx5IHdoZW4gdGhlIHByZWZpeF9jb21wcmVzc2lvbg0KKyAq IHJlbG9wdGlvbiBpcyBvbiBhbmQgdGhlIGZpcnN0IGtleSBjb2x1bW4gaXMgb2YgYSB2YXJsZW5h IHR5cGUuDQorICovDQorYm9vbA0KK19idF9wcmVmaXhfZW5hYmxlZChSZWxhdGlvbiBpbmRleCkN Cit7DQorCXJldHVybiBCVEdldFByZWZpeENvbXByZXNzaW9uKGluZGV4KSAmJg0KKwkJVHVwbGVE ZXNjQXR0cihSZWxhdGlvbkdldERlc2NyKGluZGV4KSwgMCktPmF0dGxlbiA9PSAtMTsNCit9DQor DQorLyoNCisgKiBDaG9vc2UgdGhlIHByZWZpeCBmb3IgYSBsZWFmIGFib3V0IHRvIGJlIGJ1aWx0 IGZyb20gdGhlIGBuJyB0dXBsZXMgYGl0ZW1zJywNCisgKiBpbiBrZXkgb3JkZXI6IHRoZSBmaXJz dCB0dXBsZSdzIGZpcnN0LWNvbHVtbiBieXRlcywgY3V0IHRvIHRoZSBsb25nZXN0IHJ1bg0KKyAq IGFueSBsYXRlciB0dXBsZSBzaGFyZXMsIHByb3ZpZGVkIHRoZSB0dXBsZXMgc2hhcmUgYXQgbGVh c3QNCisgKiBCVFJFRV9QUkVGSVhfTUlOX1NIQVJFRCBieXRlcyBvZiBpdCBvbiBhdmVyYWdlLiAg UmV0dXJucyB0aGUgcHJlZml4J3MNCisgKiBsZW5ndGgsIHdpdGggKnByZWZpeCBwb2ludGluZyBp bnRvIGl0ZW1zWzBdLCBvciAwIGZvciBubyBwcmVmaXguDQorICovDQorU2l6ZQ0KK19idF9wcmVm aXhfY2hvb3NlKFJlbGF0aW9uIGluZGV4LCBJbmRleFR1cGxlICppdGVtcywgaW50IG4sDQorCQkJ CSAgY29uc3QgY2hhciAqKnByZWZpeCkNCit7DQorCWNvbnN0IGNoYXIgKmNhbmQ7DQorCVNpemUJ CWNhbmRsZW47DQorCVNpemUJCWxvbmdlc3QgPSAwOw0KKwlTaXplCQl0b3RhbCA9IDA7DQorCWlu dAkJCW5jb2RlZCA9IDA7DQorDQorCWlmICghX2J0X3ByZWZpeF9lbmFibGVkKGluZGV4KSB8fA0K KwkJKGNhbmQgPSBfYnRfcHJlZml4X2NhbmRpZGF0ZShpdGVtc1swXSwgJmNhbmRsZW4pKSA9PSBO VUxMKQ0KKwkJcmV0dXJuIDA7DQorCWlmIChuID09IDEpDQorCXsNCisJCSpwcmVmaXggPSBjYW5k Ow0KKwkJcmV0dXJuIGNhbmRsZW47DQorCX0NCisJZm9yIChpbnQgaSA9IDE7IGkgPCBuOyBpKysp DQorCXsNCisJCWludAkJCXNoYXJlZCA9IF9idF9wcmVmaXhfc2hhcmVkKGNhbmQsIGNhbmRsZW4s IGl0ZW1zW2ldKTsNCisNCisJCWlmIChzaGFyZWQgPCAwKQ0KKwkJCWNvbnRpbnVlOw0KKwkJdG90 YWwgKz0gc2hhcmVkOw0KKwkJbmNvZGVkKys7DQorCQlsb25nZXN0ID0gTWF4KGxvbmdlc3QsIChT aXplKSBzaGFyZWQpOw0KKwl9DQorCWlmIChsb25nZXN0ID09IDAgfHwgdG90YWwgPCAoU2l6ZSkg QlRSRUVfUFJFRklYX01JTl9TSEFSRUQgKiBuY29kZWQpDQorCQlyZXR1cm4gMDsNCisJKnByZWZp eCA9IGNhbmQ7DQorCXJldHVybiBsb25nZXN0Ow0KK30NCisNCisvKg0KKyAqIEZhdWx0IGEgZnJl c2hseSBmaW5pc2hlZCBsZWFmIGBwYWdlJyBmb3J3YXJkIGludG8gdGhlIEJUUF9QUkVGSVggZm9y bWF0IGlmDQorICogYSBwcmVmaXggcGF5cyBvZmYgKFN0cmF0ZWd5IDE6IGNvbXByZXNzIGEgcGFn ZSBvbmx5IHdoZW4gaXQgaXMgd3JpdHRlbiBhcyBhDQorICogd2hvbGUgLS0gQ1JFQVRFIElOREVY IHBhZ2UgZmluaXNoLCBhIHNwbGl0IGhhbGYsIGEgZGVkdXAgcmV3cml0ZSAtLSBzbyB0aGF0DQor ICogbm8gaW5zZXJ0LCBWQUNVVU0gb3Iga2V5LXJhbmdlIGNoYW5nZSBldmVyIGZvcmNlcyBhIHBh Z2UgcmV3cml0ZSwgYW5kIGFuDQorICogb2xkLWZvcm1hdCBwYWdlIGlzIGNvbnZlcnRlZCBvbmx5 IHdoZW4gaXQgaXMgbmV4dCB3cml0dGVuIHdob2xlKS4NCisgKg0KKyAqIE9uIGVudHJ5IGBwYWdl JyBpcyBhIGNvbXBsZXRlIGxlYWY6IGl0cyBoaWdoIGtleSBhdCBQX0hJS0VZIGlmIGl0IGlzIG5v dA0KKyAqIHJpZ2h0bW9zdCwgdGhlbiBpdHMgZGF0YSBpdGVtcywgbm9uZSBvZiB0aGVtIGNvZGVk ICh0aGUgcGFnZSBkb2VzIG5vdCB5ZXQNCisgKiBoYXZlIEJUUF9QUkVGSVgpLiAgSWYgdGhlIGRh dGEgaXRlbXMgc2hhcmUgZW5vdWdoIG9mIGEgY29tbW9uIGZpcnN0LWNvbHVtbg0KKyAqIHByZWZp eCwgdGhlIHBhZ2UgaXMgcmVidWlsdCBpbiBwbGFjZSB3aXRoIHRoZSBQUkVGSVggaXRlbSBpbnNl cnRlZCBhZnRlcg0KKyAqIHRoZSBoaWdoIGtleSBhbmQgZXZlcnkgZGF0YSBpdGVtIGNvZGVkIGFn YWluc3QgaXQ7IG90aGVyd2lzZSB0aGUgcGFnZSBpcw0KKyAqIGxlZnQgdW5jaGFuZ2VkLiAgSXRl bSBvcmRlciBhbmQgdGhlIGhpZ2gga2V5IGFyZSBwcmVzZXJ2ZWQuDQorICoNCisgKiBDYWxsZXIg bXVzdCBob2xkIHRoZSBwYWdlJ3MgYnVmZmVyIGV4Y2x1c2l2ZWx5IChvciBvd24gdGhlIHBhZ2Ug b3V0cmlnaHQsDQorICogYXMgdGhlIGJ1aWxkIGFuZCBzcGxpdCBwYXRocyBkbyB3aXRoIGEgdGVt cCBwYWdlKS4gIE5vIFdBTCBpcyB3cml0dGVuIGhlcmU6DQorICogY2FsbGVycyBsb2cgdGhlIHJl c3VsdGluZyBwYWdlIChhIGJ1aWxkIHdyaXRlcyBpdCB3aG9sZTsgYSBzcGxpdCBsb2dzIGVhY2gN CisgKiBoYWxmIHdob2xlIG9yIGJ5IGZ1bGwtcGFnZSBpbWFnZSksIGFuZCByZWRvIHJlYWNoZXMg dGhlIHNhbWUgYnl0ZXMgYnkNCisgKiBydW5uaW5nIF9idF9wcmVmaXhfZW5jb2RlIGFnYWluc3Qg dGhlIHNhbWUgcHJlZml4Lg0KKyAqLw0KK3ZvaWQNCitfYnRfcHJlZml4X2NvbXByZXNzX3BhZ2Uo UmVsYXRpb24gaW5kZXgsIFBhZ2UgcGFnZSkNCit7DQorCUJUUGFnZU9wYXF1ZSBvcGFxdWUgPSBC VFBhZ2VHZXRPcGFxdWUocGFnZSk7DQorCU9mZnNldE51bWJlciBtaW5vZmY7DQorCU9mZnNldE51 bWJlciBtYXhvZmY7DQorCWludAkJCW47DQorCUluZGV4VHVwbGUgKml0ZW1zOw0KKwlTaXplCQlw cmVmaXhsZW47DQorCWNvbnN0IGNoYXIgKnByZWZpeDsNCisJUGFnZQkJdG1wOw0KKwlPZmZzZXRO dW1iZXIgbzsNCisJSW5kZXhUdXBsZQloaWtleSA9IE5VTEw7DQorCVNpemUJCWhpa2V5c3ogPSAw Ow0KKw0KKwlBc3NlcnQoUF9JU0xFQUYob3BhcXVlKSAmJiAhUF9IQVNQUkVGSVgob3BhcXVlKSk7 DQorDQorCWlmICghX2J0X3ByZWZpeF9lbmFibGVkKGluZGV4KSkNCisJCXJldHVybjsNCisNCisJ bWlub2ZmID0gUF9GSVJTVERBVEFLRVkob3BhcXVlKTsNCisJbWF4b2ZmID0gUGFnZUdldE1heE9m ZnNldE51bWJlcihwYWdlKTsNCisJbiA9IChpbnQpIG1heG9mZiAtIChpbnQpIG1pbm9mZiArIDE7 DQorCWlmIChuIDw9IDApDQorCQlyZXR1cm47DQorDQorCWl0ZW1zID0gKEluZGV4VHVwbGUgKikg cGFsbG9jKG4gKiBzaXplb2YoSW5kZXhUdXBsZSkpOw0KKwlmb3IgKGludCBpID0gMDsgaSA8IG47 IGkrKykNCisJCWl0ZW1zW2ldID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsDQorCQkJ CQkJCQkJCQlQYWdlR2V0SXRlbUlkKHBhZ2UsIG1pbm9mZiArIGkpKTsNCisNCisJcHJlZml4bGVu ID0gX2J0X3ByZWZpeF9jaG9vc2UoaW5kZXgsIGl0ZW1zLCBuLCAmcHJlZml4KTsNCisJaWYgKHBy ZWZpeGxlbiA9PSAwKQ0KKwl7DQorCQlwZnJlZShpdGVtcyk7DQorCQlyZXR1cm47DQorCX0NCisN CisJLyogVGhlIGhpZ2gga2V5IChpZiBhbnkpIHN0YXlzIGF0IFBfSElLRVksIHVuY29kZWQuICov DQorCWlmICghUF9SSUdIVE1PU1Qob3BhcXVlKSkNCisJew0KKwkJSXRlbUlkCQloaWkgPSBQYWdl R2V0SXRlbUlkKHBhZ2UsIFBfSElLRVkpOw0KKw0KKwkJaGlrZXlzeiA9IEl0ZW1JZEdldExlbmd0 aChoaWkpOw0KKwkJaGlrZXkgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaGlpKTsN CisJfQ0KKw0KKwkvKg0KKwkgKiBSZWJ1aWxkIGludG8gYSB0ZW1wIHBhZ2U6IGhpZ2gga2V5IChp ZiBhbnkpLCBQUkVGSVggaXRlbSwgdGhlbiBlYWNoDQorCSAqIGRhdGEgaXRlbSBjb2RlZC4gIFRo ZSBjb2RlZCBmb3JtIGNhbiBiZSB1cCB0byBNQVhBTElHTiBsYXJnZXIgdGhhbiB0aGUNCisJICog cGxhaW4gb25lLCBidXQgdGhlIFBSRUZJWCBpdGVtIHJlcGxhY2VzIGZhciBtb3JlIHNoYXJlZCBi eXRlcyB0aGFuIGl0DQorCSAqIGFkZHMsIHNvIGEgcGFnZSB0aGF0IHdhcyBub3Qgb3ZlcmZ1bGwg c3RheXMgd2l0aGluIGJvdW5kczsgaWYgYSBjb2RlZA0KKwkgKiBpdGVtIHNvbWVob3cgZG9lcyBu b3QgZml0LCBsZWF2ZSB0aGUgcGFnZSB1bmNvbXByZXNzZWQgKGFsd2F5cyB2YWxpZCkuDQorCSAq Lw0KKwl0bXAgPSBQYWdlR2V0VGVtcFBhZ2VDb3B5U3BlY2lhbChwYWdlKTsNCisJQlRQYWdlR2V0 T3BhcXVlKHRtcCktPmJ0cG9fZmxhZ3MgJj0gfkJUUF9QUkVGSVg7DQorCWlmIChoaWtleSAhPSBO VUxMICYmDQorCQlQYWdlQWRkSXRlbSh0bXAsIChjaGFyICopIGhpa2V5LCBoaWtleXN6LCBQX0hJ S0VZLCBmYWxzZSwgZmFsc2UpID09DQorCQlJbnZhbGlkT2Zmc2V0TnVtYmVyKQ0KKwkJZ290byBn aXZldXA7DQorCV9idF9wYWdlX3NldF9wcmVmaXgodG1wLCBwcmVmaXgsIHByZWZpeGxlbik7DQor CW8gPSBPZmZzZXROdW1iZXJOZXh0KFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIodG1wKSk7DQorCWZv ciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQ0KKwl7DQorCQlJbmRleFR1cGxlCWNvZGVkID0gX2J0 X3ByZWZpeF9lbmNvZGUodG1wLCBpdGVtc1tpXSk7DQorCQlib29sCQlvazsNCisNCisJCW9rID0g UGFnZUFkZEl0ZW0odG1wLCAoY2hhciAqKSBjb2RlZCwgSW5kZXhUdXBsZVNpemUoY29kZWQpLCBv KyssDQorCQkJCQkJIGZhbHNlLCBmYWxzZSkgIT0gSW52YWxpZE9mZnNldE51bWJlcjsNCisJCWlm IChjb2RlZCAhPSBpdGVtc1tpXSkNCisJCQlwZnJlZShjb2RlZCk7DQorCQlpZiAoIW9rKQ0KKwkJ CWdvdG8gZ2l2ZXVwOw0KKwl9DQorDQorCW1lbWNweShwYWdlLCB0bXAsIEJMQ0tTWik7DQorCXBm cmVlKHRtcCk7DQorCXBmcmVlKGl0ZW1zKTsNCisJcmV0dXJuOw0KKw0KK2dpdmV1cDoNCisJcGZy ZWUodG1wKTsNCisJcGZyZWUoaXRlbXMpOw0KK30NCisNCisvKg0KKyAqIExheSBvdXQgb25lIGhh bGYgb2YgYSBsZWFmIHNwbGl0IG9uIGBwYWdlJywgd2hpY2ggdGhlIGNhbGxlciBoYXMNCisgKiBp bml0aWFsaXplZCAoZmxhZ3MsIGxpbmtzKSBhbmQgbGVmdCBlbXB0eTogdGhlIGhpZ2gga2V5IGBo aWtleScgKE5VTEwgZm9yDQorICogYSByaWdodG1vc3QgaGFsZiksIHRoZW4gdGhlIGBuJyBwbGFp biB0dXBsZXMgYGl0ZW1zJyBpbiBrZXkgb3JkZXIuDQorICoNCisgKiBUaGUgaGFsZiBpcyBmb3Jt ZWQgYXMgYSB3aG9sZSwgc28gaXQgbWF5IHRha2UgYSBwcmVmaXggb2YgaXRzIG93bjogaXRzDQor ICogZmlyc3QgaXRlbSdzIGxlYWRpbmcgYnl0ZXMsIGlmIHRoZSBpdGVtcyBzaGFyZSBlbm91Z2gg KF9idF9wcmVmaXhfY2hvb3NlKS4NCisgKiBCZWNhdXNlIGEgcHJlZml4LWNvbXByZXNzZWQgbGVh ZiBjYW4gaG9sZCBtb3JlIGxvZ2ljYWwgZGF0YSB0aGFuIGZpdHMgaW4gYQ0KKyAqIHBsYWluIHBh Z2UsIHRoZSBoYWxmIGlzIGxhaWQgb3V0IGNvZGVkIGZyb20gdGhlIHN0YXJ0IHJhdGhlciB0aGFu IGJ1aWx0DQorICogcGxhaW4gYW5kIGNvbXByZXNzZWQgYWZ0ZXJ3YXJkcy4gIFdoZW4gdGhlIGhh bGYgZG9lcyBub3QgZml0IHdpdGggaXRzIG93bg0KKyAqIHByZWZpeCAob3Igc2hhcmVzIHRvbyBs aXR0bGUgdG8gdGFrZSBvbmUpIGl0IGlzIGxhaWQgb3V0IHBsYWluLCBhbmQgaWYgdGhhdA0KKyAq IGRvZXMgbm90IGZpdCBlaXRoZXIsIHdpdGggYG9yaWdwcmVmaXgnICh0aGUgc3BsaXR0aW5nIHBh Z2UncyBwcmVmaXgsIHplcm8NCisgKiBsZW5ndGggd2hlbiBpdCBoYWQgbm9uZSksIGFnYWluc3Qg d2hpY2ggaXQgZml0cyBieSBjb25zdHJ1Y3Rpb246IHRoZSBpdGVtcw0KKyAqIGtlZXAgdGhlIHNo YXJlcyB0aGV5IGhhZCBvbiB0aGUgb3JpZ2luYWwgcGFnZS4NCisgKg0KKyAqIE1pcnJvcnMgQkFS SydzIGJhcmtfc3BsaXRfbGVhZl9oYWxmLiAgQ2FsbGVyczogX2J0X3NwbGl0IChib3RoIGhhbHZl cykuDQorICovDQordm9pZA0KK19idF9zcGxpdF9sZWFmX2hhbGYoUmVsYXRpb24gaW5kZXgsIFBh Z2UgcGFnZSwgSW5kZXhUdXBsZSBoaWtleSwNCisJCQkJCUluZGV4VHVwbGUgKml0ZW1zLCBpbnQg biwNCisJCQkJCWNvbnN0IGNoYXIgKm9yaWdwcmVmaXgsIFNpemUgb3JpZ3ByZWZpeGxlbiwNCisJ CQkJCWNoYXIgKmNob3NlbnByZWZpeCwgU2l6ZSAqY2hvc2VucHJlZml4bGVuKQ0KK3sNCisJQlRQ YWdlT3BhcXVlRGF0YSBzYXZlZCA9ICpCVFBhZ2VHZXRPcGFxdWUocGFnZSk7DQorCWNvbnN0IGNo YXIgKnByZWZpeFszXTsNCisJU2l6ZQkJcHJlZml4bGVuWzNdOw0KKwlpbnQJCQludHJpZXMgPSAw Ow0KKw0KKwlBc3NlcnQoUF9JU0xFQUYoJnNhdmVkKSAmJiAhUF9IQVNQUkVGSVgoJnNhdmVkKSk7 DQorDQorCS8qIENhbmRpZGF0ZSBwcmVmaXhlcyB0byB0cnksIGluIG9yZGVyOiBvd24sIG5vbmUs IHRoZSBvcmlnIHBhZ2Uncy4gKi8NCisJaWYgKF9idF9wcmVmaXhfZW5hYmxlZChpbmRleCkpDQor CXsNCisJCXByZWZpeGxlbltudHJpZXNdID0gX2J0X3ByZWZpeF9jaG9vc2UoaW5kZXgsIGl0ZW1z LCBuLCAmcHJlZml4W250cmllc10pOw0KKwkJaWYgKHByZWZpeGxlbltudHJpZXNdID4gMCkNCisJ CQludHJpZXMrKzsNCisJfQ0KKwlwcmVmaXhbbnRyaWVzXSA9IE5VTEw7DQorCXByZWZpeGxlbltu dHJpZXMrK10gPSAwOw0KKwlpZiAob3JpZ3ByZWZpeGxlbiA+IDApDQorCXsNCisJCXByZWZpeFtu dHJpZXNdID0gb3JpZ3ByZWZpeDsNCisJCXByZWZpeGxlbltudHJpZXMrK10gPSBvcmlncHJlZml4 bGVuOw0KKwl9DQorDQorCWZvciAoaW50IHQgPSAwOyB0IDwgbnRyaWVzOyB0KyspDQorCXsNCisJ CWlmIChfYnRfc3BsaXRfbGVhZl9sYXlvdXQocGFnZSwgaGlrZXksIGl0ZW1zLCBuLCBwcmVmaXhb dF0sIHByZWZpeGxlblt0XSkpDQorCQl7DQorCQkJLyogUmVwb3J0IHRoZSBwcmVmaXggdGhhdCB3 b24sIHNvIHRoZSBzcGxpdCBjYW4gbG9nIGl0IGZvciByZWRvLiAqLw0KKwkJCWlmIChjaG9zZW5w cmVmaXhsZW4gIT0gTlVMTCkNCisJCQl7DQorCQkJCSpjaG9zZW5wcmVmaXhsZW4gPSBwcmVmaXhs ZW5bdF07DQorCQkJCWlmIChwcmVmaXhsZW5bdF0gPiAwKQ0KKwkJCQkJbWVtY3B5KGNob3NlbnBy ZWZpeCwgcHJlZml4W3RdLCBwcmVmaXhsZW5bdF0pOw0KKwkJCX0NCisJCQlyZXR1cm47DQorCQl9 DQorCQkvKiByZXN0b3JlIHRoZSBlbXB0eS1wYWdlIHN0YXRlIGZvciB0aGUgbmV4dCBhdHRlbXB0 ICovDQorCQlfYnRfcGFnZWluaXQocGFnZSwgQkxDS1NaKTsNCisJCSpCVFBhZ2VHZXRPcGFxdWUo cGFnZSkgPSBzYXZlZDsNCisJfQ0KKwllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIGxheSBvdXQgYSBz cGxpdCBoYWxmIG9mIGluZGV4IFwiJXNcIiIsDQorCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo aW5kZXgpKTsNCit9DQorDQorLyoNCisgKiBMYXkgb3V0IG9uZSBsZWFmIHNwbGl0IGhhbGYgb24g dGhlIGNhbGxlci1pbml0aWFsaXplZCBlbXB0eSBgcGFnZScgdXNpbmcgYQ0KKyAqIEdJVkVOIHBy ZWZpeCAoYHByZWZpeGxlbicgMCBmb3Igbm9uZSk6IHRoZSBoaWdoIGtleSBgaGlrZXknIChOVUxM IGZvciBhDQorICogcmlnaHRtb3N0IGhhbGYpLCB0aGUgUFJFRklYIGl0ZW0sIHRoZW4gdGhlIGBu JyBwbGFpbiB0dXBsZXMgYGl0ZW1zJyBjb2RlZA0KKyAqIGFnYWluc3QgdGhlIHByZWZpeC4gIFJl dHVybnMgZmFsc2UgaWYgdGhleSBkbyBub3QgZml0IChjYWxsZXIgdHJpZXMgYW5vdGhlcg0KKyAq IHByZWZpeCkuICBUaGlzIGlzIFJlbGF0aW9uLWZyZWUgYW5kIGRldGVybWluaXN0aWMgaW4gKGhp a2V5LCBpdGVtcywgcHJlZml4KSwNCisgKiBzbyBXQUwgcmVkbyBjYWxscyBpdCB3aXRoIHRoZSBs b2dnZWQgcHJlZml4IHRvIHJlcHJvZHVjZSB0aGUgcHJpbWFyeSdzIHBhZ2UNCisgKiBieXRlIGZv ciBieXRlLg0KKyAqLw0KK2Jvb2wNCitfYnRfc3BsaXRfbGVhZl9sYXlvdXQoUGFnZSBwYWdlLCBJ bmRleFR1cGxlIGhpa2V5LCBJbmRleFR1cGxlICppdGVtcywgaW50IG4sDQorCQkJCQkgIGNvbnN0 IGNoYXIgKnByZWZpeCwgU2l6ZSBwcmVmaXhsZW4pDQorew0KKwlPZmZzZXROdW1iZXIgbyA9IFBf SElLRVk7DQorCWJvb2wJCWZpdCA9IHRydWU7DQorDQorCUFzc2VydChQX0lTTEVBRihCVFBhZ2VH ZXRPcGFxdWUocGFnZSkpICYmICFQX0hBU1BSRUZJWChCVFBhZ2VHZXRPcGFxdWUocGFnZSkpKTsN CisJaWYgKGhpa2V5ICE9IE5VTEwgJiYNCisJCVBhZ2VBZGRJdGVtKHBhZ2UsIChjaGFyICopIGhp a2V5LCBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShoaWtleSkpLA0KKwkJCQkJbysrLCBmYWxzZSwg ZmFsc2UpID09IEludmFsaWRPZmZzZXROdW1iZXIpDQorCQlyZXR1cm4gZmFsc2U7DQorCWlmIChw cmVmaXhsZW4gPiAwKQ0KKwl7DQorCQlfYnRfcGFnZV9zZXRfcHJlZml4KHBhZ2UsIHByZWZpeCwg cHJlZml4bGVuKTsNCisJCW8rKzsNCisJfQ0KKwlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykN CisJew0KKwkJSW5kZXhUdXBsZQljb2RlZCA9IF9idF9wcmVmaXhfZW5jb2RlKHBhZ2UsIGl0ZW1z W2ldKTsNCisNCisJCWlmIChQYWdlQWRkSXRlbShwYWdlLCAoY2hhciAqKSBjb2RlZCwgSW5kZXhU dXBsZVNpemUoY29kZWQpLA0KKwkJCQkJCW8rKywgZmFsc2UsIGZhbHNlKSA9PSBJbnZhbGlkT2Zm c2V0TnVtYmVyKQ0KKwkJCWZpdCA9IGZhbHNlOw0KKwkJaWYgKGNvZGVkICE9IGl0ZW1zW2ldKQ0K KwkJCXBmcmVlKGNvZGVkKTsNCisJCWlmICghZml0KQ0KKwkJCXJldHVybiBmYWxzZTsNCisJfQ0K KyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HDQorCWlmIChQX0hBU1BSRUZJWChCVFBhZ2VHZXRP cGFxdWUocGFnZSkpKQ0KKwl7DQorCQlPZmZzZXROdW1iZXIgbXggPSBQYWdlR2V0TWF4T2Zmc2V0 TnVtYmVyKHBhZ2UpOw0KKwkJT2Zmc2V0TnVtYmVyIG9mZjsNCisNCisJCWZvciAob2ZmID0gUF9G SVJTVERBVEFLRVkoQlRQYWdlR2V0T3BhcXVlKHBhZ2UpKTsgb2ZmIDw9IG14OyBvZmYrKykNCisJ CXsNCisJCQlCVEl0ZW1CdWYJdmI7DQorDQorCQkJKHZvaWQpIF9idF9nZXRpdGVtKHBhZ2UsIG9m ZiwgJnZiKTsNCisJCX0NCisJfQ0KKyNlbmRpZg0KKwlyZXR1cm4gdHJ1ZTsNCit9DQorDQorLyoN CisgKiBDb2xsZWN0IHRoZSBwbGFpbiAoZGVjb2RlZCkgZGF0YSBpdGVtcyBvZiBhIGxlYWYgc3Bs aXQgaW50byB0aGUgbGVmdCBhbmQNCisgKiByaWdodCBhcnJheXMsIGluIHRoZSBleGFjdCBvcmRl ciBhbmQgd2l0aCB0aGUgZXhhY3Qgc3Vic3RpdHV0aW9ucyB0aGF0IHRoZQ0KKyAqIHNwbGl0IHBl cmZvcm1zOiB0aGUgb3JpZ2luYWwgcGFnZSdzIGRhdGEgaXRlbXMgc3BsaXQgYXQgYGZpcnN0cmln aHRvZmYnLA0KKyAqIHdpdGggYG5ld2l0ZW0nIGluc2VydGVkIGF0IGBuZXdpdGVtb2ZmJyBvbiB0 aGUgc2lkZSBnaXZlbiBieSBgbmV3aXRlbW9ubGVmdCcNCisgKiBhbmQsIGZvciBhIHBvc3Rpbmct bGlzdCBzcGxpdCwgdGhlIHBvc3RpbmcgYXQgYG9yaWdwYWdlcG9zdGluZ29mZicgcmVwbGFjZWQN CisgKiBieSBgbnBvc3RpbmcnLiAgYG9yaWdwYWdlJyBpcyB0aGUgcHJlLXNwbGl0IHBhZ2UgKGl0 cyBpdGVtcyBhcmUgZGVjb2RlZCB3aGVuDQorICogaXQgaXMgYSBCVFBfUFJFRklYIHBhZ2UpLiAg VGhlIGFycmF5cyByZWNlaXZlIHBvaW50ZXJzIHRoYXQgYXJlIHZhbGlkIHVudGlsDQorICogdGhl IGNhbGxlciBpcyBkb25lIGxheWluZyBvdXQgdGhlIGhhbHZlczsgaXRlbXMgdGFrZW4gZnJvbSB0 aGUgcGFnZSBhcmUNCisgKiBjb3BpZWQsIHNvIHRoZSBjYWxsZXIgb3ducyBhbmQgc2hvdWxkIHJl c2V0IHRoZSBzdXJyb3VuZGluZyBtZW1vcnkgY29udGV4dC4NCisgKg0KKyAqIEJvdGggdGhlIHBy aW1hcnkgKF9idF9zcGxpdCkgYW5kIFdBTCByZWRvIChidHJlZV94bG9nX3NwbGl0KSBjb2xsZWN0 IGl0ZW1zDQorICogdGhpcyB3YXkgYW5kIHRoZW4gbGF5IG91dCBlYWNoIGhhbGYgd2l0aCBfYnRf c3BsaXRfbGVhZl9oYWxmLCBzbyB0aGUgdHdvDQorICogcHJvZHVjZSBieXRlLWlkZW50aWNhbCBj b2RlZCBwYWdlcyB3aXRob3V0IGxvZ2dpbmcgYSBmdWxsLXBhZ2UgaW1hZ2UuDQorICovDQordm9p ZA0KK19idF9zcGxpdF9sZWFmX2NvbGxlY3QoUGFnZSBvcmlncGFnZSwgT2Zmc2V0TnVtYmVyIGZp cnN0cmlnaHRvZmYsDQorCQkJCQkgICBPZmZzZXROdW1iZXIgbmV3aXRlbW9mZiwgSW5kZXhUdXBs ZSBuZXdpdGVtLA0KKwkJCQkJICAgYm9vbCBuZXdpdGVtb25sZWZ0LCBPZmZzZXROdW1iZXIgb3Jp Z3BhZ2Vwb3N0aW5nb2ZmLA0KKwkJCQkJICAgSW5kZXhUdXBsZSBucG9zdGluZywNCisJCQkJCSAg IEluZGV4VHVwbGUgKmxlZnRpdGVtcywgaW50ICpubGVmdCwNCisJCQkJCSAgIEluZGV4VHVwbGUg KnJpZ2h0aXRlbXMsIGludCAqbnJpZ2h0KQ0KK3sNCisJQlRQYWdlT3BhcXVlIG9vcGFxdWUgPSBC VFBhZ2VHZXRPcGFxdWUob3JpZ3BhZ2UpOw0KKwlPZmZzZXROdW1iZXIgbWF4b2ZmID0gUGFnZUdl dE1heE9mZnNldE51bWJlcihvcmlncGFnZSk7DQorCWJvb2wJCWhhc3ByZWZpeCA9IFBfSEFTUFJF RklYKG9vcGFxdWUpOw0KKwlPZmZzZXROdW1iZXIgaTsNCisNCisJKm5sZWZ0ID0gMDsNCisJKm5y aWdodCA9IDA7DQorCWZvciAoaSA9IFBfRklSU1REQVRBS0VZKG9vcGFxdWUpOyBpIDw9IG1heG9m ZjsgaSA9IE9mZnNldE51bWJlck5leHQoaSkpDQorCXsNCisJCUl0ZW1JZAkJaXRlbWlkID0gUGFn ZUdldEl0ZW1JZChvcmlncGFnZSwgaSk7DQorCQlJbmRleFR1cGxlCWRhdGFpdGVtID0gKEluZGV4 VHVwbGUpIFBhZ2VHZXRJdGVtKG9yaWdwYWdlLCBpdGVtaWQpOw0KKwkJQlRJdGVtQnVmCWRpYnVm Ow0KKw0KKwkJaWYgKGhhc3ByZWZpeCkNCisJCQlkYXRhaXRlbSA9IF9idF9wcmVmaXhfZGVjb2Rl KG9yaWdwYWdlLCBkYXRhaXRlbSwgJmRpYnVmKTsNCisNCisJCWlmIChpID09IG9yaWdwYWdlcG9z dGluZ29mZikNCisJCQlkYXRhaXRlbSA9IG5wb3N0aW5nOw0KKwkJZWxzZSBpZiAoaSA9PSBuZXdp dGVtb2ZmKQ0KKwkJew0KKwkJCWlmIChuZXdpdGVtb25sZWZ0KQ0KKwkJCQlsZWZ0aXRlbXNbKCpu bGVmdCkrK10gPSBuZXdpdGVtOw0KKwkJCWVsc2UNCisJCQkJcmlnaHRpdGVtc1soKm5yaWdodCkr K10gPSBuZXdpdGVtOw0KKwkJfQ0KKw0KKwkJaWYgKGkgPCBmaXJzdHJpZ2h0b2ZmKQ0KKwkJCWxl ZnRpdGVtc1soKm5sZWZ0KSsrXSA9IENvcHlJbmRleFR1cGxlKGRhdGFpdGVtKTsNCisJCWVsc2UN CisJCQlyaWdodGl0ZW1zWygqbnJpZ2h0KSsrXSA9IENvcHlJbmRleFR1cGxlKGRhdGFpdGVtKTsN CisJfQ0KKwlpZiAoaSA8PSBuZXdpdGVtb2ZmKQ0KKwkJcmlnaHRpdGVtc1soKm5yaWdodCkrK10g PSBuZXdpdGVtOw0KK30NCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHJlYWRwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMNCmlu ZGV4IDU1NzIyZmQ4NzkxLi5mZmM1ODQ2ZTRjOSAxMDA2NDQNCi0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYw0KKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRyZWFkcGFnZS5jDQpAQCAtMTQ1LDYgKzE0NSw4IEBAIF9idF9yZWFkcGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLA0KIAkJ CQlpZ25vcmVfa2lsbGVkX3R1cGxlcyA9IHNjYW4tPmlnbm9yZV9raWxsZWRfdHVwbGVzOw0KIAlp bnQJCQlpdGVtSW5kZXgsDQogCQkJCWluZG5hdHRzOw0KKwlCVEl0ZW1CdWYJaXR1cGJ1ZjsJCQkv KiBkZWNvZGUgd29ya3NwYWNlIGZvciBhIGxvb3AncyBjdXJyZW50IGl0ZW0gKi8NCisJQlRJdGVt QnVmCWZpbmFsYnVmOwkJLyogZGVjb2RlIHdvcmtzcGFjZSBmb3IgYSBiYWNrd2FyZCBmaW5hbHR1 cCAqLw0KIA0KIAkvKiBzYXZlIHRoZSBwYWdlL2J1ZmZlciBibG9jayBudW1iZXIsIGFsb25nIHdp dGggaXRzIHNpYmxpbmcgbGlua3MgKi8NCiAJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQ b3MuYnVmKTsNCkBAIC0yNTIsNyArMjU0LDcgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sDQogCQkJCWNvbnRp bnVlOw0KIAkJCX0NCiANCi0JCQlpdHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2Us IGlpZCk7DQorCQkJaXR1cCA9IF9idF9nZXRpdGVtKHBhZ2UsIG9mZm51bSwgJml0dXBidWYpOw0K IAkJCUFzc2VydCghQlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkpOw0KIA0KIAkJCXBzdGF0ZS5vZmZu dW0gPSBvZmZudW07DQpAQCAtMzUzLDkgKzM1NSw3IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLA0KIAkJew0K IAkJCWlmIChtaW5vZmYgPD0gbWF4b2ZmICYmICFQX0xFRlRNT1NUKG9wYXF1ZSkpDQogCQkJew0K LQkJCQlJdGVtSWQJCWlpZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgbWlub2ZmKTsNCi0NCi0JCQkJ cHN0YXRlLmZpbmFsdHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGlpZCk7DQor CQkJCXBzdGF0ZS5maW5hbHR1cCA9IF9idF9nZXRpdGVtKHBhZ2UsIG1pbm9mZiwgJmZpbmFsYnVm KTsNCiANCiAJCQkJaWYgKHVubGlrZWx5KHNvLT5zY2FuQmVoaW5kKSAmJg0KIAkJCQkJIV9idF9z Y2FuYmVoaW5kX2NoZWNra2V5cyhzY2FuLCBkaXIsIHBzdGF0ZS5maW5hbHR1cCkpDQpAQCAtNDE1 LDcgKzQxNSw3IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLA0KIAkJCWVsc2UNCiAJCQkJdHVwbGVfYWxpdmUg PSB0cnVlOw0KIA0KLQkJCWl0dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaWlk KTsNCisJCQlpdHVwID0gX2J0X2dldGl0ZW0ocGFnZSwgb2ZmbnVtLCAmaXR1cGJ1Zik7DQogCQkJ QXNzZXJ0KCFCVHJlZVR1cGxlSXNQaXZvdChpdHVwKSk7DQogDQogCQkJcHN0YXRlLm9mZm51bSA9 IG9mZm51bTsNCkBAIC01OTYsOSArNTk2LDEwIEBAIF9idF9zZXRfc3RhcnRpa2V5KEluZGV4U2Nh bkRlc2Mgc2NhbiwgQlRSZWFkUGFnZVN0YXRlICpwc3RhdGUpDQogCUJUU2Nhbk9wYXF1ZSBzbyA9 IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsNCiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5k ZXhSZWxhdGlvbjsNCiAJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7 DQotCUl0ZW1JZAkJaWlkOw0KIAlJbmRleFR1cGxlCWZpcnN0dHVwLA0KIAkJCQlsYXN0dHVwOw0K KwlCVEl0ZW1CdWYJZmlyc3RidWYsDQorCQkJCWxhc3RidWY7DQogCWludAkJCXN0YXJ0aWtleSA9 IDAsDQogCQkJCWFycmF5aWR4ID0gMCwNCiAJCQkJZmlyc3RjaGFuZ2luZ2F0dG51bTsNCkBAIC02 MTYsMTIgKzYxNywxMCBAQCBfYnRfc2V0X3N0YXJ0aWtleShJbmRleFNjYW5EZXNjIHNjYW4sIEJU UmVhZFBhZ2VTdGF0ZSAqcHN0YXRlKQ0KIAkJcmV0dXJuOw0KIA0KIAkvKiBtaW5vZmYgaXMgYW4g b2Zmc2V0IHRvIHRoZSBsb3dlc3Qgbm9uLXBpdm90IHR1cGxlIG9uIHRoZSBwYWdlICovDQotCWlp ZCA9IFBhZ2VHZXRJdGVtSWQocHN0YXRlLT5wYWdlLCBwc3RhdGUtPm1pbm9mZik7DQotCWZpcnN0 dHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBzdGF0ZS0+cGFnZSwgaWlkKTsNCisJZmly c3R0dXAgPSBfYnRfZ2V0aXRlbShwc3RhdGUtPnBhZ2UsIHBzdGF0ZS0+bWlub2ZmLCAmZmlyc3Ri dWYpOw0KIA0KIAkvKiBtYXhvZmYgaXMgYW4gb2Zmc2V0IHRvIHRoZSBoaWdoZXN0IG5vbi1waXZv dCB0dXBsZSBvbiB0aGUgcGFnZSAqLw0KLQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBzdGF0ZS0+cGFn ZSwgcHN0YXRlLT5tYXhvZmYpOw0KLQlsYXN0dHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVt KHBzdGF0ZS0+cGFnZSwgaWlkKTsNCisJbGFzdHR1cCA9IF9idF9nZXRpdGVtKHBzdGF0ZS0+cGFn ZSwgcHN0YXRlLT5tYXhvZmYsICZsYXN0YnVmKTsNCiANCiAJLyogRGV0ZXJtaW5lIHRoZSBmaXJz dCBhdHRyaWJ1dGUgd2hvc2UgdmFsdWVzIGNoYW5nZSBvbiBjYWxsZXIncyBwYWdlICovDQogCWZp cnN0Y2hhbmdpbmdhdHRudW0gPSBfYnRfa2VlcF9uYXR0c19mYXN0KHJlbCwgZmlyc3R0dXAsIGxh c3R0dXApOw0KQEAgLTIwNTMsNiArMjA1Miw3IEBAIF9idF9jaGVja2tleXNfbG9va19haGVhZChJ bmRleFNjYW5EZXNjIHNjYW4sIEJUUmVhZFBhZ2VTdGF0ZSAqcHN0YXRlLA0KIAlTY2FuRGlyZWN0 aW9uIGRpciA9IHBzdGF0ZS0+ZGlyOw0KIAlPZmZzZXROdW1iZXIgYWhlYWRvZmZudW07DQogCUlu ZGV4VHVwbGUJYWhlYWQ7DQorCUJUSXRlbUJ1ZglhaGVhZGJ1ZjsJCS8qIGRlY29kZSB3b3Jrc3Bh Y2UgZm9yIHRoZSBsb29rLWFoZWFkIHR1cGxlICovDQogDQogCUFzc2VydCghcHN0YXRlLT5mb3Jj ZW5vbnJlcXVpcmVkKTsNCiANCkBAIC0yMDg4LDggKzIwODgsNyBAQCBfYnRfY2hlY2trZXlzX2xv b2tfYWhlYWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFJlYWRQYWdlU3RhdGUgKnBzdGF0ZSwNCiAJ CWFoZWFkb2ZmbnVtID0gTWF4KChpbnQpIHBzdGF0ZS0+bWlub2ZmLA0KIAkJCQkJCSAgKGludCkg cHN0YXRlLT5vZmZudW0gLSBwc3RhdGUtPnRhcmdldGRpc3RhbmNlKTsNCiANCi0JYWhlYWQgPSAo SW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocHN0YXRlLT5wYWdlLA0KLQkJCQkJCQkJCSBQYWdlR2V0 SXRlbUlkKHBzdGF0ZS0+cGFnZSwgYWhlYWRvZmZudW0pKTsNCisJYWhlYWQgPSBfYnRfZ2V0aXRl bShwc3RhdGUtPnBhZ2UsIGFoZWFkb2ZmbnVtLCAmYWhlYWRidWYpOw0KIAlpZiAoX2J0X3R1cGxl X2JlZm9yZV9hcnJheV9za2V5cyhzY2FuLCBkaXIsIGFoZWFkLCB0dXBkZXNjLCB0dXBuYXR0cywN CiAJCQkJCQkJCQkgZmFsc2UsIDAsIE5VTEwpKQ0KIAl7DQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 cmVlLmMNCmluZGV4IDBhYmRkN2I0OWY1Li5iOGI4ZWMwMThmMyAxMDA2NDQNCi0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMNCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0cmVlLmMNCkBAIC00MzUsOCArNDM1LDEwIEBAIGJ0cmVzY2FuKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLA0KIAkgKi8NCiAJaWYgKHNj YW4tPnhzX3dhbnRfaXR1cCAmJiBzby0+Y3VyclR1cGxlcyA9PSBOVUxMKQ0KIAl7DQotCQlzby0+ Y3VyclR1cGxlcyA9IChjaGFyICopIHBhbGxvYyhCTENLU1ogKiAyKTsNCi0JCXNvLT5tYXJrVHVw bGVzID0gc28tPmN1cnJUdXBsZXMgKyBCTENLU1o7DQorCQlTaXplCQloYWxmID0gQlRUdXBsZVN0 b3JhZ2VTaXplKHNjYW4tPmluZGV4UmVsYXRpb24pOw0KKw0KKwkJc28tPmN1cnJUdXBsZXMgPSAo Y2hhciAqKSBwYWxsb2MoaGFsZiAqIDIpOw0KKwkJc28tPm1hcmtUdXBsZXMgPSBzby0+Y3VyclR1 cGxlcyArIGhhbGY7DQogCX0NCiANCiAJLyoNCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFy Y2guYw0KaW5kZXggNjFmNjMyNTFjNmYuLmY5MzJjYTMzYzNhIDEwMDY0NA0KLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYw0KKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRzZWFyY2guYw0KQEAgLTY5Niw2ICs2OTYsNyBAQCBfYnRfY29tcGFyZShSZWxh dGlvbiByZWwsDQogCVR1cGxlRGVzYwlpdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsN CiAJQlRQYWdlT3BhcXVlIG9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsNCiAJSW5kZXhU dXBsZQlpdHVwOw0KKwlCVEl0ZW1CdWYJaXR1cGJ1ZjsNCiAJSXRlbVBvaW50ZXIgaGVhcFRpZDsN CiAJU2NhbktleQkJc2NhbmtleTsNCiAJaW50CQkJbmNtcGtleTsNCkBAIC03MTMsNyArNzE0LDcg QEAgX2J0X2NvbXBhcmUoUmVsYXRpb24gcmVsLA0KIAlpZiAoIVBfSVNMRUFGKG9wYXF1ZSkgJiYg b2ZmbnVtID09IFBfRklSU1REQVRBS0VZKG9wYXF1ZSkpDQogCQlyZXR1cm4gMTsNCiANCi0JaXR1 cCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9m Zm51bSkpOw0KKwlpdHVwID0gX2J0X2dldGl0ZW0ocGFnZSwgb2ZmbnVtLCAmaXR1cGJ1Zik7DQog CW50dXBhdHRzID0gQlRyZWVUdXBsZUdldE5BdHRzKGl0dXAsIHJlbCk7DQogDQogCS8qDQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHNvcnQuYw0KaW5kZXggNzU2ZGZhM2RjZjQuLjlhOGIzNzIwMzNl IDEwMDY0NA0KLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMNCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c29ydC5jDQpAQCAtMjQxLDYgKzI0MSwxMCBA QCB0eXBlZGVmIHN0cnVjdCBCVFBhZ2VTdGF0ZQ0KIAlTaXplCQlidHBzX2xhc3RleHRyYTsgLyog bGFzdCBpdGVtJ3MgZXh0cmEgcG9zdGluZyBsaXN0IHNwYWNlICovDQogCXVpbnQzMgkJYnRwc19s ZXZlbDsJCS8qIHRyZWUgbGV2ZWwgKDAgPSBsZWFmKSAqLw0KIAlTaXplCQlidHBzX2Z1bGw7CQkv KiAiZnVsbCIgaWYgbGVzcyB0aGFuIHRoaXMgbXVjaCBmcmVlIHNwYWNlICovDQorCS8qIExlYWYg cHJlZml4IGNvbXByZXNzaW9uOiB0aGUgY2FuZGlkYXRlIHByZWZpeCBvZiB0aGUgcGFnZSBiZWlu ZyBmaWxsZWQgKi8NCisJY29uc3QgY2hhciAqYnRwc19wcmVmaXg7CS8qIGludG8gdGhlIHBhZ2Un cyBmaXJzdCBkYXRhIGl0ZW0sIG9yIE5VTEwgKi8NCisJU2l6ZQkJYnRwc19wcmVmaXhsZW47IC8q IGl0cyBsZW5ndGggKDAgPSBubyBjYW5kaWRhdGUpICovDQorCVNpemUJCWJ0cHNfY29kZWRzYXZl ZDsJLyogYnl0ZXMgdGhlIHBhZ2UncyBpdGVtcyB3b3VsZCBzYXZlIGNvZGVkICovDQogCXN0cnVj dCBCVFBhZ2VTdGF0ZSAqYnRwc19uZXh0OwkvKiBsaW5rIHRvIHBhcmVudCBsZXZlbCwgaWYgYW55 ICovDQogfSBCVFBhZ2VTdGF0ZTsNCiANCkBAIC04NTYsNyArODYwLDggQEAgX2J0X2J1aWxkYWRk KEJUV3JpdGVTdGF0ZSAqd3N0YXRlLCBCVFBhZ2VTdGF0ZSAqc3RhdGUsIEluZGV4VHVwbGUgaXR1 cCwNCiAJICovDQogCUFzc2VydChsYXN0X3RydW5jZXh0cmEgPT0gMCB8fCBpc2xlYWYpOw0KIAlp ZiAocGdzcGMgPCBpdHVwc3ogKyAoaXNsZWFmID8gTUFYQUxJR04oc2l6ZW9mKEl0ZW1Qb2ludGVy RGF0YSkpIDogMCkgfHwNCi0JCShwZ3NwYyArIGxhc3RfdHJ1bmNleHRyYSA8IHN0YXRlLT5idHBz X2Z1bGwgJiYgbGFzdF9vZmYgPiBQX0ZJUlNUS0VZKSkNCisJCShwZ3NwYyArIGxhc3RfdHJ1bmNl eHRyYSArIHN0YXRlLT5idHBzX2NvZGVkc2F2ZWQgPCBzdGF0ZS0+YnRwc19mdWxsICYmDQorCQkg bGFzdF9vZmYgPiBQX0ZJUlNUS0VZKSkNCiAJew0KIAkJLyoNCiAJCSAqIEZpbmlzaCBvZmYgdGhl IHBhZ2UgYW5kIHdyaXRlIGl0IG91dC4NCkBAIC05ODAsNiArOTg1LDE1IEBAIF9idF9idWlsZGFk ZChCVFdyaXRlU3RhdGUgKndzdGF0ZSwgQlRQYWdlU3RhdGUgKnN0YXRlLCBJbmRleFR1cGxlIGl0 dXAsDQogCQkJbm9wYXF1ZS0+YnRwb19uZXh0ID0gUF9OT05FOwkvKiByZWR1bmRhbnQgKi8NCiAJ CX0NCiANCisJCS8qDQorCQkgKiBUaGUgb2xkIGxlYWYgcGFnZSBpcyBjb21wbGV0ZTogZmF1bHQg aXQgZm9yd2FyZCBpbnRvIHRoZQ0KKwkJICogQlRQX1BSRUZJWCBmb3JtYXQgaWYgYSBwcmVmaXgg cGF5cyBvZmYuICBEb25lIGFmdGVyIGJ0cHNfbG93a2V5DQorCQkgKiAodGhlIGRvd25saW5rLCBh IGNvcHkgb2YgdGhlIHVuY29kZWQgaGlnaCBrZXkpIGlzIHNhdmVkLCBzaW5jZQ0KKwkJICogY29t cHJlc3Npb24gcmV3cml0ZXMgb3BhZ2UgaW4gcGxhY2UuDQorCQkgKi8NCisJCWlmIChpc2xlYWYp DQorCQkJX2J0X3ByZWZpeF9jb21wcmVzc19wYWdlKHdzdGF0ZS0+aW5kZXgsIG9wYWdlKTsNCisN CiAJCS8qDQogCQkgKiBXcml0ZSBvdXQgdGhlIG9sZCBwYWdlLiBfYnRfYmx3cml0ZXBhZ2UgdGFr ZXMgb3duZXJzaGlwIG9mIHRoZQ0KIAkJICogJ29wYWdlJyBidWZmZXIuDQpAQCAtOTkwLDYgKzEw MDQsMTEgQEAgX2J0X2J1aWxkYWRkKEJUV3JpdGVTdGF0ZSAqd3N0YXRlLCBCVFBhZ2VTdGF0ZSAq c3RhdGUsIEluZGV4VHVwbGUgaXR1cCwNCiAJCSAqIFJlc2V0IGxhc3Rfb2ZmIHRvIHBvaW50IHRv IG5ldyBwYWdlDQogCQkgKi8NCiAJCWxhc3Rfb2ZmID0gUF9GSVJTVEtFWTsNCisNCisJCS8qIFRo ZSBuZXcgcGFnZSBzdGFydHMgd2l0aCBubyBwcmVmaXggY2FuZGlkYXRlIGFuZCBubyBzYXZpbmdz IHlldC4gKi8NCisJCXN0YXRlLT5idHBzX3ByZWZpeCA9IE5VTEw7DQorCQlzdGF0ZS0+YnRwc19w cmVmaXhsZW4gPSAwOw0KKwkJc3RhdGUtPmJ0cHNfY29kZWRzYXZlZCA9IDA7DQogCX0NCiANCiAJ LyoNCkBAIC0xMDE3LDYgKzEwMzYsMzQgQEAgX2J0X2J1aWxkYWRkKEJUV3JpdGVTdGF0ZSAqd3N0 YXRlLCBCVFBhZ2VTdGF0ZSAqc3RhdGUsIEluZGV4VHVwbGUgaXR1cCwNCiAJX2J0X3NvcnRhZGR0 dXAobnBhZ2UsIGl0dXBzeiwgaXR1cCwgbGFzdF9vZmYsDQogCQkJCSAgICFpc2xlYWYgJiYgbGFz dF9vZmYgPT0gUF9GSVJTVEtFWSk7DQogDQorCS8qDQorCSAqIExlYWYgcHJlZml4IGNvbXByZXNz aW9uIGFjY291bnRpbmcgKFN0cmF0ZWd5IDEpOiB0aGUgcGFnZSdzIGV2ZW50dWFsDQorCSAqIHBy ZWZpeCBpcyBpdHMgZmlyc3QgZGF0YSBpdGVtJ3MgZmlyc3QtY29sdW1uIGJ5dGVzOyBlc3RpbWF0 ZSBob3cgbXVjaA0KKwkgKiByb29tIGNvZGluZyB0aGlzIHBhZ2UncyBpdGVtcyB3b3VsZCBmcmVl LCBzbyB0aGUgZmlsbGZhY3RvciB0ZXN0IGFib3ZlDQorCSAqIGNhbiBwYWNrIG1vcmUgcGxhaW4g aXRlbXMgb250byBhIHBhZ2UgdGhhdCB3aWxsIHNocmluayB3aGVuIGl0IGlzDQorCSAqIGNvbXBy ZXNzZWQgYXQgZmluaXNoLiAgSXRlbXMgYXJlIHN0aWxsIHBsYWNlZCBwbGFpbiBoZXJlOyB0aGUg ZXN0aW1hdGUNCisJICogb25seSByZWxheGVzIHRoZSBzb2Z0IGxpbWl0LCBuZXZlciB0aGUgaGFy ZCBmaXQgY2hlY2suDQorCSAqLw0KKwlpZiAoaXNsZWFmICYmIF9idF9wcmVmaXhfZW5hYmxlZCh3 c3RhdGUtPmluZGV4KSkNCisJew0KKwkJaWYgKHN0YXRlLT5idHBzX3ByZWZpeCA9PSBOVUxMKQ0K KwkJCXN0YXRlLT5idHBzX3ByZWZpeCA9IF9idF9wcmVmaXhfY2FuZGlkYXRlKGl0dXAsDQorCQkJ CQkJCQkJCQkJCSAgJnN0YXRlLT5idHBzX3ByZWZpeGxlbik7DQorCQllbHNlDQorCQl7DQorCQkJ aW50CQkJc2hhcmVkID0gX2J0X3ByZWZpeF9zaGFyZWQoc3RhdGUtPmJ0cHNfcHJlZml4LA0KKwkJ CQkJCQkJCQkJICAgc3RhdGUtPmJ0cHNfcHJlZml4bGVuLCBpdHVwKTsNCisNCisJCQkvKg0KKwkJ CSAqIEEgY29kZWQgaXRlbSBkcm9wcyBgc2hhcmVkJyB2YWx1ZSBieXRlcyBidXQga2VlcHMgYSAx LWJ5dGUNCisJCQkgKiBzaGFyZSBjb3VudDsgY291bnQgdGhlIG5ldCBNQVhBTElHTi1yb3VuZGVk IHNhdmluZy4NCisJCQkgKi8NCisJCQlpZiAoc2hhcmVkID4gMSkNCisJCQkJc3RhdGUtPmJ0cHNf Y29kZWRzYXZlZCArPQ0KKwkJCQkJTUFYQUxJR04oaXR1cHN6KSAtIE1BWEFMSUdOKGl0dXBzeiAt IChzaGFyZWQgLSAxKSk7DQorCQl9DQorCX0NCisNCiAJc3RhdGUtPmJ0cHNfYnVmID0gbmJ1ZjsN CiAJc3RhdGUtPmJ0cHNfYmxrbm8gPSBuYmxrbm87DQogCXN0YXRlLT5idHBzX2xhc3RvZmYgPSBs YXN0X29mZjsNCkBAIC0xMTE1LDYgKzExNjIsMTEgQEAgX2J0X3VwcGVyc2h1dGRvd24oQlRXcml0 ZVN0YXRlICp3c3RhdGUsIEJUUGFnZVN0YXRlICpzdGF0ZSkNCiAJCSAqIGJhY2sgb25lIHNsb3Qu ICBUaGVuIHdlIGNhbiBkdW1wIG91dCB0aGUgcGFnZS4NCiAJCSAqLw0KIAkJX2J0X3NsaWRlbGVm dCgoUGFnZSkgcy0+YnRwc19idWYpOw0KKw0KKwkJLyogRmF1bHQgdGhlIGZpbmlzaGVkIHJpZ2h0 bW9zdCBsZWFmIGZvcndhcmQgaW50byBCVFBfUFJFRklYIGlmIGl0IHBheXMuICovDQorCQlpZiAo cy0+YnRwc19sZXZlbCA9PSAwKQ0KKwkJCV9idF9wcmVmaXhfY29tcHJlc3NfcGFnZSh3c3RhdGUt PmluZGV4LCAoUGFnZSkgcy0+YnRwc19idWYpOw0KKw0KIAkJX2J0X2Jsd3JpdGVwYWdlKHdzdGF0 ZSwgcy0+YnRwc19idWYsIHMtPmJ0cHNfYmxrbm8pOw0KIAkJcy0+YnRwc19idWYgPSBOVUxMOwkJ Lyogd3JpdGVwYWdlIHRvb2sgb3duZXJzaGlwIG9mIHRoZSBidWZmZXIgKi8NCiAJfQ0KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c3BsaXRsb2MuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c3BsaXRsb2MuYw0KaW5kZXggZGU5ZWNhM2M4YjIuLjE0YmVl NTY4ZTQ1IDEwMDY0NA0KLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzcGxpdGxv Yy5jDQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNwbGl0bG9jLmMNCkBAIC01 Miw2ICs1Miw5IEBAIHR5cGVkZWYgc3RydWN0DQogCWludAkJCXJpZ2h0c3BhY2U7CQkvKiBzcGFj ZSBhdmFpbGFibGUgZm9yIGl0ZW1zIG9uIHJpZ2h0IHBhZ2UgKi8NCiAJaW50CQkJb2xkZGF0YWl0 ZW1zdG90YWw7CS8qIHNwYWNlIHRha2VuIGJ5IG9sZCBpdGVtcyAqLw0KIAlTaXplCQltaW5maXJz dHJpZ2h0c3o7CS8qIHNtYWxsZXN0IGZpcnN0cmlnaHQgc2l6ZSAqLw0KKwlib29sCQloYXNwcmVm aXg7CQkvKiBvcmlncGFnZSBpcyBwcmVmaXgtY29tcHJlc3NlZCAoQlRQX1BSRUZJWCkgKi8NCisJ QlRJdGVtQnVmCWxidWY7CQkJLyogZGVjb2RlIHNjcmF0Y2ggZm9yIF9idF9zcGxpdF9sYXN0bGVm dCAqLw0KKwlCVEl0ZW1CdWYJcmJ1ZjsJCQkvKiBkZWNvZGUgc2NyYXRjaCBmb3IgX2J0X3NwbGl0 X2ZpcnN0cmlnaHQgKi8NCiANCiAJLyogY2FuZGlkYXRlIHNwbGl0IHBvaW50IGRhdGEgKi8NCiAJ aW50CQkJbWF4c3BsaXRzOwkJLyogbWF4aW11bSBudW1iZXIgb2Ygc3BsaXRzICovDQpAQCAtMTcy LDYgKzE3NSwyMyBAQCBfYnRfZmluZHNwbGl0bG9jKFJlbGF0aW9uIHJlbCwNCiAJb2xkZGF0YWl0 ZW1zdG90YWwgPSByaWdodHNwYWNlIC0gKGludCkgUGFnZUdldEV4YWN0RnJlZVNwYWNlKG9yaWdw YWdlKTsNCiAJbGVhZmZpbGxmYWN0b3IgPSBCVEdldEZpbGxGYWN0b3IocmVsKTsNCiANCisJLyoN CisJICogT24gYSBwcmVmaXgtY29tcHJlc3NlZCBsZWFmIHRoZSBwYWdlIGNhcnJpZXMgYW4gZXh0 cmEgUFJFRklYIGl0ZW0gdGhhdA0KKwkgKiBpcyBub3QgYSBkYXRhIGl0ZW0uICBUaGUgc3BsaXQg aXMgcmVhc29uZWQgYWJvdXQgaW4gQ09ERUQgKG9uLXBhZ2UpDQorCSAqIGJ5dGVzIC0tIHRoZSBw aHlzaWNhbCByZWFsaXR5IG9mIHRoZSBwYWdlIGFuZCBvZiBlYWNoIHJlY29tcHJlc3NlZCBoYWxm DQorCSAqIC0tIHNvIHN1YnRyYWN0IG9ubHkgdGhlIFBSRUZJWCBpdGVtJ3Mgc3BhY2UgZnJvbSBv bGRkYXRhaXRlbXN0b3RhbCBhbmQNCisJICogdXNlIHRoZSBvbi1wYWdlIChjb2RlZCkgaXRlbSBz aXplcyBpbiB0aGUgc2NhbiBiZWxvdy4gIChQbGFpbi1zaXplDQorCSAqIGFjY291bnRpbmcgaXMg bm90IHVzYWJsZSBoZXJlOiBhIGNvbXByZXNzZWQgbGVhZiBjYW4gaG9sZCBmYXIgbW9yZQ0KKwkg KiBsb2dpY2FsIGRhdGEgdGhhbiB0d28gcGxhaW4gcGFnZXMsIHNvIGEgcGxhaW4gc3BsaXQgY2Fu IGJlIGluZmVhc2libGUuKQ0KKwkgKi8NCisJaWYgKFBfSEFTUFJFRklYKG9wYXF1ZSkpDQorCXsN CisJCUl0ZW1JZAkJcGlpID0gUGFnZUdldEl0ZW1JZChvcmlncGFnZSwgQlRQYWdlR2V0UHJlZml4 T2ZmKG9wYXF1ZSkpOw0KKw0KKwkJb2xkZGF0YWl0ZW1zdG90YWwgLT0gKGludCkgKE1BWEFMSUdO KEl0ZW1JZEdldExlbmd0aChwaWkpKSArDQorCQkJCQkJCQkJc2l6ZW9mKEl0ZW1JZERhdGEpKTsN CisJfQ0KKw0KIAkvKiBQYXNzZWQtaW4gbmV3aXRlbXN6IGlzIE1BWEFMSUdORUQgYnV0IGRvZXMg bm90IGluY2x1ZGUgbGluZSBwb2ludGVyICovDQogCW5ld2l0ZW1zeiArPSBzaXplb2YoSXRlbUlk RGF0YSk7DQogCXN0YXRlLnJlbCA9IHJlbDsNCkBAIC0xODUsNiArMjA1LDcgQEAgX2J0X2ZpbmRz cGxpdGxvYyhSZWxhdGlvbiByZWwsDQogCXN0YXRlLm9sZGRhdGFpdGVtc3RvdGFsID0gb2xkZGF0 YWl0ZW1zdG90YWw7DQogCXN0YXRlLm1pbmZpcnN0cmlnaHRzeiA9IFNJWkVfTUFYOw0KIAlzdGF0 ZS5uZXdpdGVtb2ZmID0gbmV3aXRlbW9mZjsNCisJc3RhdGUuaGFzcHJlZml4ID0gUF9IQVNQUkVG SVgob3BhcXVlKTsNCiANCiAJLyogbmV3aXRlbSBjYW5ub3QgYmUgYSBwb3N0aW5nIGxpc3QgaXRl bSAqLw0KIAlBc3NlcnQoIUJUcmVlVHVwbGVJc1Bvc3RpbmcobmV3aXRlbSkpOw0KQEAgLTQ2Myw2 ICs0ODQsMTkgQEAgX2J0X3JlY3NwbGl0bG9jKEZpbmRTcGxpdERhdGEgKnN0YXRlLA0KIAluZXdp dGVtaXNmaXJzdHJpZ2h0ID0gKGZpcnN0cmlnaHRvZmYgPT0gc3RhdGUtPm5ld2l0ZW1vZmYgJiYN CiAJCQkJCQkgICAhbmV3aXRlbW9ubGVmdCk7DQogDQorCS8qDQorCSAqIFJlamVjdCBhIHNwbGl0 IHRoYXQgd291bGQgbGVhdmUgdGhlIGxlZnQgcGFnZSB3aXRoIG5vIGRhdGEgaXRlbXMgYXQgYWxs DQorCSAqIChmaXJzdHJpZ2h0b2ZmIGF0IHRoZSBmaXJzdCBkYXRhIGtleSwgd2l0aCBuZXdpdGVt IG5vdCBvbiB0aGUgbGVmdCkuDQorCSAqIFVwc3RyZWFtJ3Mgc3BsaXQtcG9pbnQgaGV1cmlzdGlj cyBuZXZlciBjaG9vc2Ugc3VjaCBhIHBvaW50IGZvciBhIHBsYWluDQorCSAqIHBhZ2U7IG9uIGEg cHJlZml4LWNvbXByZXNzZWQgcGFnZSB0aGUgY29kZWQtc2l6ZSBhY2NvdW50aW5nIGNhbiBtYWtl IGl0DQorCSAqIGxvb2sgYXR0cmFjdGl2ZSwgYW5kIF9idF9zcGxpdCBjYW5ub3QgZm9ybSBhIGxl ZnQgaGlnaCBrZXkgZnJvbSBhDQorCSAqIG5vbmV4aXN0ZW50IGxhc3RsZWZ0Lg0KKwkgKi8NCisJ aWYgKHN0YXRlLT5oYXNwcmVmaXggJiYNCisJCWZpcnN0cmlnaHRvZmYgPT0gUF9GSVJTVERBVEFL RVkoQlRQYWdlR2V0T3BhcXVlKHN0YXRlLT5vcmlncGFnZSkpICYmDQorCQkhbmV3aXRlbW9ubGVm dCkNCisJCXJldHVybjsNCisNCiAJaWYgKG5ld2l0ZW1pc2ZpcnN0cmlnaHQpDQogCQlmaXJzdHJp Z2h0c3ogPSBzdGF0ZS0+bmV3aXRlbXN6Ow0KIAllbHNlDQpAQCAtNjg2LDggKzcyMCwxMiBAQCBf YnRfYWZ0ZXJuZXdpdGVtb2ZmKEZpbmRTcGxpdERhdGEgKnN0YXRlLCBPZmZzZXROdW1iZXIgbWF4 b2ZmLA0KIAkgKi8NCiAJaWYgKHN0YXRlLT5uZXdpdGVtb2ZmID4gbWF4b2ZmKQ0KIAl7DQorCQlC VEl0ZW1CdWYJdGJ1ZjsNCisNCiAJCWl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWQoc3RhdGUtPm9yaWdw YWdlLCBtYXhvZmYpOw0KIAkJdHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHN0YXRlLT5v cmlncGFnZSwgaXRlbWlkKTsNCisJCWlmIChzdGF0ZS0+aGFzcHJlZml4KQ0KKwkJCXR1cCA9IF9i dF9wcmVmaXhfZGVjb2RlKHN0YXRlLT5vcmlncGFnZSwgdHVwLCAmdGJ1Zik7DQogCQlrZWVwbmF0 dHMgPSBfYnRfa2VlcF9uYXR0c19mYXN0KHN0YXRlLT5yZWwsIHR1cCwgc3RhdGUtPm5ld2l0ZW0p Ow0KIA0KIAkJaWYgKGtlZXBuYXR0cyA+IDEgJiYga2VlcG5hdHRzIDw9IG5rZXlhdHRzKQ0KQEAg LTcxNCwxMiArNzUyLDIwIEBAIF9idF9hZnRlcm5ld2l0ZW1vZmYoRmluZFNwbGl0RGF0YSAqc3Rh dGUsIE9mZnNldE51bWJlciBtYXhvZmYsDQogCSAqLw0KIAlpdGVtaWQgPSBQYWdlR2V0SXRlbUlk KHN0YXRlLT5vcmlncGFnZSwgT2Zmc2V0TnVtYmVyUHJldihzdGF0ZS0+bmV3aXRlbW9mZikpOw0K IAl0dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0oc3RhdGUtPm9yaWdwYWdlLCBpdGVtaWQp Ow0KLQkvKiBEbyBjaGVhcGVyIHRlc3QgZmlyc3QgKi8NCisJLyogRG8gY2hlYXBlciB0ZXN0IGZp cnN0ICh0X3RpZCBhbmQgdGhlIHBvc3RpbmcgYml0IHN1cnZpdmUgY29kaW5nKSAqLw0KIAlpZiAo QlRyZWVUdXBsZUlzUG9zdGluZyh0dXApIHx8DQogCQkhX2J0X2FkamFjZW50aHRpZCgmdHVwLT50 X3RpZCwgJnN0YXRlLT5uZXdpdGVtLT50X3RpZCkpDQogCQlyZXR1cm4gZmFsc2U7DQogCS8qIENo ZWNrIHNhbWUgY29uZGl0aW9ucyBhcyByaWdodG1vc3QgaXRlbSBjYXNlLCB0b28gKi8NCi0Ja2Vl cG5hdHRzID0gX2J0X2tlZXBfbmF0dHNfZmFzdChzdGF0ZS0+cmVsLCB0dXAsIHN0YXRlLT5uZXdp dGVtKTsNCisJaWYgKHN0YXRlLT5oYXNwcmVmaXgpDQorCXsNCisJCUJUSXRlbUJ1Zgl0YnVmOw0K Kw0KKwkJdHVwID0gX2J0X3ByZWZpeF9kZWNvZGUoc3RhdGUtPm9yaWdwYWdlLCB0dXAsICZ0YnVm KTsNCisJCWtlZXBuYXR0cyA9IF9idF9rZWVwX25hdHRzX2Zhc3Qoc3RhdGUtPnJlbCwgdHVwLCBz dGF0ZS0+bmV3aXRlbSk7DQorCX0NCisJZWxzZQ0KKwkJa2VlcG5hdHRzID0gX2J0X2tlZXBfbmF0 dHNfZmFzdChzdGF0ZS0+cmVsLCB0dXAsIHN0YXRlLT5uZXdpdGVtKTsNCiANCiAJaWYgKGtlZXBu YXR0cyA+IDEgJiYga2VlcG5hdHRzIDw9IG5rZXlhdHRzKQ0KIAl7DQpAQCAtMTE2MCwxMiArMTIw NiwzOCBAQCBzdGF0aWMgaW5saW5lIEluZGV4VHVwbGUNCiBfYnRfc3BsaXRfbGFzdGxlZnQoRmlu ZFNwbGl0RGF0YSAqc3RhdGUsIFNwbGl0UG9pbnQgKnNwbGl0KQ0KIHsNCiAJSXRlbUlkCQlpdGVt aWQ7DQorCU9mZnNldE51bWJlciBvZmY7DQogDQogCWlmIChzcGxpdC0+bmV3aXRlbW9ubGVmdCAm JiBzcGxpdC0+Zmlyc3RyaWdodG9mZiA9PSBzdGF0ZS0+bmV3aXRlbW9mZikNCiAJCXJldHVybiBz dGF0ZS0+bmV3aXRlbTsNCiANCi0JaXRlbWlkID0gUGFnZUdldEl0ZW1JZChzdGF0ZS0+b3JpZ3Bh Z2UsDQotCQkJCQkJICAgT2Zmc2V0TnVtYmVyUHJldihzcGxpdC0+Zmlyc3RyaWdodG9mZikpOw0K KwlvZmYgPSBPZmZzZXROdW1iZXJQcmV2KHNwbGl0LT5maXJzdHJpZ2h0b2ZmKTsNCisNCisJLyoN CisJICogT24gYSBwcmVmaXgtY29tcHJlc3NlZCBsZWFmIHRoZSBQUkVGSVggaXRlbSBzaXRzIGp1 c3QgYmVmb3JlIHRoZSBmaXJzdA0KKwkgKiBkYXRhIGl0ZW0uICBXaGVuIHRoZSBzcGxpdCBib3Vu ZGFyeSBpcyBhdCB0aGUgZmlyc3QgZGF0YSBrZXksIHRoZSBkYXRhDQorCSAqIHByZWRlY2Vzc29y IGlzIHRoZSBoaWdoIGtleSBvbiBhIHBsYWluIHBhZ2UgKGEgcGl2b3QsIHJlYWQgcGxhaW4pOyBh DQorCSAqIHJpZ2h0bW9zdCBwYWdlIGhhcyBub25lLCBzbyBmYWxsIGJhY2sgdG8gdGhlIGZpcnN0 IGRhdGEgaXRlbSAodGhpcyBvbmx5DQorCSAqIGZlZWRzIHBlbmFsdHkgZXN0aW1hdGlvbiwgbmV2 ZXIgcGxhY2VtZW50KS4gIE5ldmVyIHJlYWQgdGhlIFBSRUZJWCBpdGVtDQorCSAqIGFzIGEgZGF0 YSB0dXBsZS4NCisJICovDQorCWlmIChzdGF0ZS0+aGFzcHJlZml4KQ0KKwl7DQorCQlCVFBhZ2VP cGFxdWUgb3AgPSBCVFBhZ2VHZXRPcGFxdWUoc3RhdGUtPm9yaWdwYWdlKTsNCisNCisJCWlmIChv ZmYgPT0gQlRQYWdlR2V0UHJlZml4T2ZmKG9wKSkNCisJCXsNCisJCQlpZiAoIVBfUklHSFRNT1NU KG9wKSkNCisJCQkJcmV0dXJuIChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShzdGF0ZS0+b3JpZ3Bh Z2UsDQorCQkJCQkJCQkJCQkJUGFnZUdldEl0ZW1JZChzdGF0ZS0+b3JpZ3BhZ2UsIFBfSElLRVkp KTsNCisJCQlvZmYgPSBQX0ZJUlNUREFUQUtFWShvcCk7DQorCQl9DQorCQlpdGVtaWQgPSBQYWdl R2V0SXRlbUlkKHN0YXRlLT5vcmlncGFnZSwgb2ZmKTsNCisJCXJldHVybiBfYnRfcHJlZml4X2Rl Y29kZShzdGF0ZS0+b3JpZ3BhZ2UsDQorCQkJCQkJCQkgKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVt KHN0YXRlLT5vcmlncGFnZSwgaXRlbWlkKSwNCisJCQkJCQkJCSAmc3RhdGUtPmxidWYpOw0KKwl9 DQorCWl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWQoc3RhdGUtPm9yaWdwYWdlLCBvZmYpOw0KIAlyZXR1 cm4gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHN0YXRlLT5vcmlncGFnZSwgaXRlbWlkKTsNCiB9 DQogDQpAQCAtMTE4MSw1ICsxMjUzLDkgQEAgX2J0X3NwbGl0X2ZpcnN0cmlnaHQoRmluZFNwbGl0 RGF0YSAqc3RhdGUsIFNwbGl0UG9pbnQgKnNwbGl0KQ0KIAkJcmV0dXJuIHN0YXRlLT5uZXdpdGVt Ow0KIA0KIAlpdGVtaWQgPSBQYWdlR2V0SXRlbUlkKHN0YXRlLT5vcmlncGFnZSwgc3BsaXQtPmZp cnN0cmlnaHRvZmYpOw0KKwlpZiAoc3RhdGUtPmhhc3ByZWZpeCkNCisJCXJldHVybiBfYnRfcHJl Zml4X2RlY29kZShzdGF0ZS0+b3JpZ3BhZ2UsDQorCQkJCQkJCQkgKEluZGV4VHVwbGUpIFBhZ2VH ZXRJdGVtKHN0YXRlLT5vcmlncGFnZSwgaXRlbWlkKSwNCisJCQkJCQkJCSAmc3RhdGUtPnJidWYp Ow0KIAlyZXR1cm4gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHN0YXRlLT5vcmlncGFnZSwgaXRl bWlkKTsNCiB9DQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGls cy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jDQppbmRleCA4NWMxYjYz MjUyMi4uNWRjMmIyZjMwNTAgMTAwNjQ0DQotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHV0aWxzLmMNCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYw0K QEAgLTYwMiw3ICs2MDIsOSBAQCBidG9wdGlvbnMoRGF0dW0gcmVsb3B0aW9ucywgYm9vbCB2YWxp ZGF0ZSkNCiAJCXsidmFjdXVtX2NsZWFudXBfaW5kZXhfc2NhbGVfZmFjdG9yIiwgUkVMT1BUX1RZ UEVfUkVBTCwNCiAJCW9mZnNldG9mKEJUT3B0aW9ucywgdmFjdXVtX2NsZWFudXBfaW5kZXhfc2Nh bGVfZmFjdG9yKX0sDQogCQl7ImRlZHVwbGljYXRlX2l0ZW1zIiwgUkVMT1BUX1RZUEVfQk9PTCwN Ci0JCW9mZnNldG9mKEJUT3B0aW9ucywgZGVkdXBsaWNhdGVfaXRlbXMpfQ0KKwkJb2Zmc2V0b2Yo QlRPcHRpb25zLCBkZWR1cGxpY2F0ZV9pdGVtcyl9LA0KKwkJeyJwcmVmaXhfY29tcHJlc3Npb24i LCBSRUxPUFRfVFlQRV9CT09MLA0KKwkJb2Zmc2V0b2YoQlRPcHRpb25zLCBwcmVmaXhfY29tcHJl c3Npb24pfQ0KIAl9Ow0KIA0KIAlyZXR1cm4gKGJ5dGVhICopIGJ1aWxkX3JlbG9wdGlvbnMocmVs b3B0aW9ucywgdmFsaWRhdGUsDQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnR4bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHhsb2cuYw0KaW5kZXgg ZGZmN2QyODZmYzguLjQxYmRhNmFiYTA2IDEwMDY0NA0KLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnR4bG9nLmMNCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxv Zy5jDQpAQCAtMjQzLDYgKzI0MywyMTEgQEAgYnRyZWVfeGxvZ19pbnNlcnQoYm9vbCBpc2xlYWYs IGJvb2wgaXNtZXRhLCBib29sIHBvc3RpbmcsDQogCQlfYnRfcmVzdG9yZV9tZXRhKHJlY29yZCwg Mik7DQogfQ0KIA0KKy8qDQorICogUmVwbGF5IGEgcHJlZml4LWNvbXByZXNzZWQgbGVhZiBwYWdl IHNwbGl0Lg0KKyAqDQorICogUmF0aGVyIHRoYW4gcmVwbGF5IGxvZ2dlZCB0dXBsZXMgKHdob3Nl IGNvZGVkIHBoeXNpY2FsIGxheW91dA0KKyAqIF9idF9yZXN0b3JlX3BhZ2UgY291bGQgbm90IHJl cHJvZHVjZSksIHJlYnVpbGQgYm90aCBoYWx2ZXMgdGhlIHdheSB0aGUNCisgKiBwcmltYXJ5IGRp ZDogY29sbGVjdCB0aGUgc3BsaXQncyBwbGFpbiBpdGVtcyBmcm9tIHRoZSBwcmUtc3BsaXQgb3Jp Z2luYWwNCisgKiBwYWdlIChibG9jayAwKSB3aXRoIF9idF9zcGxpdF9sZWFmX2NvbGxlY3QsIHRo ZW4gbGF5IGVhY2ggaGFsZiBvdXQgY29kZWQNCisgKiBhZ2FpbnN0IGl0cyBjaG9zZW4gcHJlZml4 IChjYXJyaWVkIGluIHRoZSByZWNvcmQpIHdpdGggX2J0X3NwbGl0X2xlYWZfbGF5b3V0Lg0KKyAq IFRoZSByZXN1bHQgaXMgYnl0ZS1pZGVudGljYWwgdG8gdGhlIHByaW1hcnksIHNvIG5vIGZ1bGwt cGFnZSBpbWFnZSBpcw0KKyAqIG5lZWRlZC4gIFRoZSByZWNvcmQncyBibG9jay0wIGRhdGEgY2Fy cmllcywgaW4gb3JkZXI6IG5ld2l0ZW0gKHdoZW4gaXQgd2VudA0KKyAqIG9uIHRoZSBsZWZ0LCBv ciBmb3IgYSBwb3N0aW5nIHNwbGl0KSwgdGhlIGxlZnQgaGlnaCBrZXksIGFuZCB0aGUgbGVmdCBo YWxmJ3MNCisgKiBwcmVmaXggYnl0ZXM7IGJsb2NrLTEgZGF0YSBjYXJyaWVzIHRoZSByaWdodCBo YWxmJ3MgcHJlZml4IGJ5dGVzLg0KKyAqLw0KK3N0YXRpYyB2b2lkDQorYnRyZWVfeGxvZ19zcGxp dF9wcmVmaXgoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQsIEJsb2NrTnVtYmVyIG9yaWdwYWdlbnVt YmVyLA0KKwkJCQkJCUJsb2NrTnVtYmVyIHJpZ2h0cGFnZW51bWJlciwgQmxvY2tOdW1iZXIgc3Bh Z2VudW1iZXIsDQorCQkJCQkJYm9vbCBuZXdpdGVtb25sZWZ0KQ0KK3sNCisJWExvZ1JlY1B0cgls c24gPSByZWNvcmQtPkVuZFJlY1B0cjsNCisJeGxfYnRyZWVfc3BsaXQgKnhscmVjID0gKHhsX2J0 cmVlX3NwbGl0ICopIFhMb2dSZWNHZXREYXRhKHJlY29yZCk7DQorCUJ1ZmZlcgkJcmJ1ZjsNCisJ QnVmZmVyCQlvcmlnYnVmOw0KKwlQYWdlCQlvcmlncGFnZTsNCisJQlRQYWdlT3BhcXVlIG9vcGFx dWU7DQorCWNoYXIJICAgKmRhdGFwb3M7DQorCVNpemUJCWRhdGFsZW47DQorCUluZGV4VHVwbGUJ bmV3aXRlbSA9IE5VTEw7DQorCUluZGV4VHVwbGUJbGVmdF9oaWtleTsNCisJSW5kZXhUdXBsZQly aWdodF9oaWtleSA9IE5VTEw7DQorCUluZGV4VHVwbGUJbnBvc3RpbmcgPSBOVUxMOw0KKwlTaXpl CQluZXdpdGVtc3ogPSAwOw0KKwljb25zdCBjaGFyICpsZWZ0cHJlZml4ID0gTlVMTDsNCisJY29u c3QgY2hhciAqcmlnaHRwcmVmaXggPSBOVUxMOw0KKwlJbmRleFR1cGxlCXJpZ2h0aXRlbXNbTWF4 SW5kZXhUdXBsZXNQZXJQYWdlXTsNCisJaW50CQkJbnJpZ2h0ID0gMDsNCisJUGFnZQkJcmlnaHRw YWdlOw0KKwlCVFBhZ2VPcGFxdWUgcm9wYXF1ZTsNCisJWExvZ1JlZG9BY3Rpb24gb3JpZ2FjdGlv bjsNCisNCisJLyoNCisJICogVGhlIHJpZ2h0IChuZXcpIHBhZ2UgaXMgcmVidWlsdCBlbnRpcmVs eSBmcm9tIGRhdGEgbG9nZ2VkIHdpdGggdGhlDQorCSAqIHJlY29yZCwgaW5kZXBlbmRlbnQgb2Yg YmxvY2sgMCwgYmVjYXVzZSBibG9jayAwIG1heSBiZSByZXN0b3JlZCBmcm9tIGFuDQorCSAqIGF1 dG9tYXRpYyBmdWxsLXBhZ2UgaW1hZ2UgKHNvIGl0cyBsaXZlIGNvbnRlbnRzIGFmdGVyIHJlZG8g YXJlIHRoZSBsZWZ0DQorCSAqIGhhbGYsIG5vdCB0aGUgcHJlLXNwbGl0IHBhZ2UpLiAgQmxvY2st MSBkYXRhIGlzLCBpbiBvcmRlcjogdGhlIHJpZ2h0DQorCSAqIGhhbGYncyBjaG9zZW4gcHJlZml4 IGJ5dGVzIChyaWdodHByZWZpeGxlbiksIHRoZSByaWdodCBoaWdoIGtleSB3aGVuIHRoZQ0KKwkg KiBzcGxpdCBpcyBub3QgcmlnaHRtb3N0IChzcGFnZW51bWJlciAhPSBQX05PTkUpLCB0aGVuIHRo ZSByaWdodCBoYWxmJ3MNCisJICogcGxhaW4gZGF0YSBpdGVtcyBpbiBvZmZzZXQgb3JkZXIgKHNl bGYtZGVzY3JpYmluZyBieSBJbmRleFR1cGxlU2l6ZSkuDQorCSAqLw0KKwlkYXRhcG9zID0gWExv Z1JlY0dldEJsb2NrRGF0YShyZWNvcmQsIDEsICZkYXRhbGVuKTsNCisJaWYgKHhscmVjLT5mbGFn cyAmIFhMSF9TUExJVF9SRlBJKQ0KKwl7DQorCQkvKg0KKwkJICogVGhlIHJpZ2h0IGhhbGYncyBw bGFpbiBpdGVtcyB3b3VsZCBoYXZlIG92ZXJmbG93ZWQgdGhlIFdBTCByZWNvcmQsDQorCQkgKiBz byB0aGUgcHJpbWFyeSBjYXJyaWVkIHRoZSBjb2RlZCByaWdodCBwYWdlIGFzIGEgZm9yY2VkIGZ1 bGwtcGFnZQ0KKwkJICogaW1hZ2UuICBSZXN0b3JlIGl0IGZyb20gdGhhdCBpbWFnZS4NCisJCSAq Lw0KKwkJaWYgKFhMb2dSZWFkQnVmZmVyRm9yUmVkbyhyZWNvcmQsIDEsICZyYnVmKSAhPSBCTEtf UkVTVE9SRUQpDQorCQkJZWxvZyhFUlJPUiwgInByZWZpeCBsZWFmIHNwbGl0IHJpZ2h0IHBhZ2Ug bGFja3MgaXRzIGZ1bGwtcGFnZSBpbWFnZSIpOw0KKwl9DQorCWVsc2UNCisJew0KKwkJaWYgKHhs cmVjLT5yaWdodHByZWZpeGxlbiA+IDApDQorCQl7DQorCQkJcmlnaHRwcmVmaXggPSBkYXRhcG9z Ow0KKwkJCWRhdGFwb3MgKz0geGxyZWMtPnJpZ2h0cHJlZml4bGVuOw0KKwkJCWRhdGFsZW4gLT0g eGxyZWMtPnJpZ2h0cHJlZml4bGVuOw0KKwkJfQ0KKwkJaWYgKHNwYWdlbnVtYmVyICE9IFBfTk9O RSkNCisJCXsNCisJCQlyaWdodF9oaWtleSA9IChJbmRleFR1cGxlKSBkYXRhcG9zOw0KKwkJCWRh dGFwb3MgKz0gTUFYQUxJR04oSW5kZXhUdXBsZVNpemUocmlnaHRfaGlrZXkpKTsNCisJCQlkYXRh bGVuIC09IE1BWEFMSUdOKEluZGV4VHVwbGVTaXplKHJpZ2h0X2hpa2V5KSk7DQorCQl9DQorCQl3 aGlsZSAoZGF0YWxlbiA+IDApDQorCQl7DQorCQkJSW5kZXhUdXBsZQlpdCA9IChJbmRleFR1cGxl KSBkYXRhcG9zOw0KKwkJCVNpemUJCXN6ID0gTUFYQUxJR04oSW5kZXhUdXBsZVNpemUoaXQpKTsN CisNCisJCQlBc3NlcnQobnJpZ2h0IDwgTWF4SW5kZXhUdXBsZXNQZXJQYWdlKTsNCisJCQlyaWdo dGl0ZW1zW25yaWdodCsrXSA9IGl0Ow0KKwkJCWRhdGFwb3MgKz0gc3o7DQorCQkJZGF0YWxlbiAt PSBzejsNCisJCX0NCisJCUFzc2VydChkYXRhbGVuID09IDApOw0KKw0KKwkJcmJ1ZiA9IFhMb2dJ bml0QnVmZmVyRm9yUmVkbyhyZWNvcmQsIDEpOw0KKwkJcmlnaHRwYWdlID0gQnVmZmVyR2V0UGFn ZShyYnVmKTsNCisJCV9idF9wYWdlaW5pdChyaWdodHBhZ2UsIEJ1ZmZlckdldFBhZ2VTaXplKHJi dWYpKTsNCisJCXJvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocmlnaHRwYWdlKTsNCisJCXJvcGFx dWUtPmJ0cG9fcHJldiA9IG9yaWdwYWdlbnVtYmVyOw0KKwkJcm9wYXF1ZS0+YnRwb19uZXh0ID0g c3BhZ2VudW1iZXI7DQorCQlyb3BhcXVlLT5idHBvX2xldmVsID0geGxyZWMtPmxldmVsOw0KKwkJ cm9wYXF1ZS0+YnRwb19mbGFncyA9IEJUUF9MRUFGOw0KKwkJcm9wYXF1ZS0+YnRwb19jeWNsZWlk ID0gMDsNCisJCWlmICghX2J0X3NwbGl0X2xlYWZfbGF5b3V0KHJpZ2h0cGFnZSwgcmlnaHRfaGlr ZXksIHJpZ2h0aXRlbXMsIG5yaWdodCwNCisJCQkJCQkJCSAgIHJpZ2h0cHJlZml4LCB4bHJlYy0+ cmlnaHRwcmVmaXhsZW4pKQ0KKwkJCWVsb2coRVJST1IsICJmYWlsZWQgdG8gcmVwbGF5IHJpZ2h0 IGhhbGYgb2YgYSBwcmVmaXggbGVhZiBzcGxpdCIpOw0KKwkJUGFnZVNldExTTihyaWdodHBhZ2Us IGxzbik7DQorCX0NCisJTWFya0J1ZmZlckRpcnR5KHJidWYpOw0KKw0KKwkvKg0KKwkgKiBSZWJ1 aWxkIHRoZSBsZWZ0IChvcmlnaW5hbCkgcGFnZSBmcm9tIHRoZSBwcmUtc3BsaXQgcGFnZSwgdW5s ZXNzIGl0IHdhcw0KKwkgKiByZXN0b3JlZCBmcm9tIGEgZnVsbC1wYWdlIGltYWdlICh0aGVuIGl0 IGlzIGFscmVhZHkgdGhlIGZpbmFsIGxlZnQNCisJICogaGFsZikuICBCbG9jay0wIGRhdGEgaXM6 IFtuZXdpdGVtIChsZWZ0L3Bvc3RpbmcpXSBbbGVmdCBoaWdoIGtleV0NCisJICogW2xlZnQgcHJl Zml4XS4gIFRoZSBsZWZ0IHBsYWluIGl0ZW1zIGNvbWUgZnJvbSB0aGUgcHJlLXNwbGl0IHBhZ2Uu DQorCSAqLw0KKwlvcmlnYWN0aW9uID0gWExvZ1JlYWRCdWZmZXJGb3JSZWRvKHJlY29yZCwgMCwg Jm9yaWdidWYpOw0KKwlvcmlncGFnZSA9IEJ1ZmZlckdldFBhZ2Uob3JpZ2J1Zik7DQorDQorCWlm IChvcmlnYWN0aW9uID09IEJMS19ORUVEU19SRURPKQ0KKwl7DQorCQlJbmRleFR1cGxlICpsZWZ0 aXRlbXM7DQorCQlpbnQJCQlubGVmdDsNCisJCU9mZnNldE51bWJlciBvcmlncGFnZXBvc3Rpbmdv ZmYgPSBJbnZhbGlkT2Zmc2V0TnVtYmVyOw0KKwkJUGFnZQkJbGVmdHBhZ2U7DQorCQlCVFBhZ2VP cGFxdWUgbG9wYXF1ZTsNCisNCisJCW9vcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUob3JpZ3BhZ2Up Ow0KKw0KKwkJZGF0YXBvcyA9IFhMb2dSZWNHZXRCbG9ja0RhdGEocmVjb3JkLCAwLCAmZGF0YWxl bik7DQorCQlpZiAobmV3aXRlbW9ubGVmdCB8fCB4bHJlYy0+cG9zdGluZ29mZiAhPSAwKQ0KKwkJ ew0KKwkJCW5ld2l0ZW0gPSAoSW5kZXhUdXBsZSkgZGF0YXBvczsNCisJCQluZXdpdGVtc3ogPSBN QVhBTElHTihJbmRleFR1cGxlU2l6ZShuZXdpdGVtKSk7DQorCQkJZGF0YXBvcyArPSBuZXdpdGVt c3o7DQorCQkJZGF0YWxlbiAtPSBuZXdpdGVtc3o7DQorCQl9DQorCQlsZWZ0X2hpa2V5ID0gKElu ZGV4VHVwbGUpIGRhdGFwb3M7DQorCQlkYXRhcG9zICs9IE1BWEFMSUdOKEluZGV4VHVwbGVTaXpl KGxlZnRfaGlrZXkpKTsNCisJCWRhdGFsZW4gLT0gTUFYQUxJR04oSW5kZXhUdXBsZVNpemUobGVm dF9oaWtleSkpOw0KKwkJaWYgKHhscmVjLT5sZWZ0cHJlZml4bGVuID4gMCkNCisJCXsNCisJCQls ZWZ0cHJlZml4ID0gZGF0YXBvczsNCisJCQlkYXRhcG9zICs9IHhscmVjLT5sZWZ0cHJlZml4bGVu Ow0KKwkJCWRhdGFsZW4gLT0geGxyZWMtPmxlZnRwcmVmaXhsZW47DQorCQl9DQorCQlBc3NlcnQo ZGF0YWxlbiA9PSAwKTsNCisNCisJCWlmICh4bHJlYy0+cG9zdGluZ29mZiAhPSAwKQ0KKwkJew0K KwkJCUl0ZW1JZAkJaXRlbWlkOw0KKwkJCUluZGV4VHVwbGUJb3Bvc3Rpbmc7DQorCQkJQlRJdGVt QnVmCW9idWY7DQorDQorCQkJb3JpZ3BhZ2Vwb3N0aW5nb2ZmID0gT2Zmc2V0TnVtYmVyUHJldih4 bHJlYy0+bmV3aXRlbW9mZik7DQorCQkJbmV3aXRlbSA9IENvcHlJbmRleFR1cGxlKG5ld2l0ZW0p Ow0KKwkJCWl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWQob3JpZ3BhZ2UsIG9yaWdwYWdlcG9zdGluZ29m Zik7DQorCQkJb3Bvc3RpbmcgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ob3JpZ3BhZ2UsIGl0 ZW1pZCk7DQorCQkJaWYgKFBfSEFTUFJFRklYKG9vcGFxdWUpKQ0KKwkJCQlvcG9zdGluZyA9IF9i dF9wcmVmaXhfZGVjb2RlKG9yaWdwYWdlLCBvcG9zdGluZywgJm9idWYpOw0KKwkJCW5wb3N0aW5n ID0gX2J0X3N3YXBfcG9zdGluZyhuZXdpdGVtLCBvcG9zdGluZywgeGxyZWMtPnBvc3RpbmdvZmYp Ow0KKwkJfQ0KKw0KKwkJbGVmdGl0ZW1zID0gcGFsbG9jX2FycmF5KEluZGV4VHVwbGUsIFBhZ2VH ZXRNYXhPZmZzZXROdW1iZXIob3JpZ3BhZ2UpICsgMik7DQorCQlyaWdodGl0ZW1zWzBdID0gTlVM TDsJLyogbm90IHJldXNlZCBiZWxvdyAqLw0KKwkJew0KKwkJCUluZGV4VHVwbGUJZHVtbXlyaWdo dFtNYXhJbmRleFR1cGxlc1BlclBhZ2VdOw0KKwkJCWludAkJCWR1bW15bnI7DQorDQorCQkJX2J0 X3NwbGl0X2xlYWZfY29sbGVjdChvcmlncGFnZSwgeGxyZWMtPmZpcnN0cmlnaHRvZmYsDQorCQkJ CQkJCQkgICB4bHJlYy0+bmV3aXRlbW9mZiwgbmV3aXRlbSwgbmV3aXRlbW9ubGVmdCwNCisJCQkJ CQkJCSAgIG9yaWdwYWdlcG9zdGluZ29mZiwgbnBvc3RpbmcsDQorCQkJCQkJCQkgICBsZWZ0aXRl bXMsICZubGVmdCwgZHVtbXlyaWdodCwgJmR1bW15bnIpOw0KKwkJfQ0KKw0KKwkJbGVmdHBhZ2Ug PSBQYWdlR2V0VGVtcFBhZ2VDb3B5U3BlY2lhbChvcmlncGFnZSk7DQorCQlsb3BhcXVlID0gQlRQ YWdlR2V0T3BhcXVlKGxlZnRwYWdlKTsNCisJCWxvcGFxdWUtPmJ0cG9fZmxhZ3MgPSBCVFBfTEVB RiB8IEJUUF9JTkNPTVBMRVRFX1NQTElUOw0KKwkJbG9wYXF1ZS0+YnRwb19wcmV2ID0gb29wYXF1 ZS0+YnRwb19wcmV2Ow0KKwkJbG9wYXF1ZS0+YnRwb19uZXh0ID0gcmlnaHRwYWdlbnVtYmVyOw0K KwkJbG9wYXF1ZS0+YnRwb19sZXZlbCA9IHhscmVjLT5sZXZlbDsNCisJCWxvcGFxdWUtPmJ0cG9f Y3ljbGVpZCA9IDA7DQorCQlpZiAoIV9idF9zcGxpdF9sZWFmX2xheW91dChsZWZ0cGFnZSwgbGVm dF9oaWtleSwgbGVmdGl0ZW1zLCBubGVmdCwNCisJCQkJCQkJCSAgIGxlZnRwcmVmaXgsIHhscmVj LT5sZWZ0cHJlZml4bGVuKSkNCisJCQllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIHJlcGxheSBsZWZ0 IGhhbGYgb2YgYSBwcmVmaXggbGVhZiBzcGxpdCIpOw0KKwkJUGFnZVJlc3RvcmVUZW1wUGFnZShs ZWZ0cGFnZSwgb3JpZ3BhZ2UpOw0KKwkJUGFnZVNldExTTihvcmlncGFnZSwgbHNuKTsNCisJCU1h cmtCdWZmZXJEaXJ0eShvcmlnYnVmKTsNCisJCXBmcmVlKGxlZnRpdGVtcyk7DQorCX0NCisNCisJ LyogRml4IGxlZnQtbGluayBvZiB0aGUgcGFnZSB0byB0aGUgcmlnaHQgb2YgdGhlIG5ldyByaWdo dCBzaWJsaW5nLiAqLw0KKwlpZiAoc3BhZ2VudW1iZXIgIT0gUF9OT05FKQ0KKwl7DQorCQlCdWZm ZXIJCXNidWY7DQorDQorCQlpZiAoWExvZ1JlYWRCdWZmZXJGb3JSZWRvKHJlY29yZCwgMiwgJnNi dWYpID09IEJMS19ORUVEU19SRURPKQ0KKwkJew0KKwkJCVBhZ2UJCXNwYWdlID0gQnVmZmVyR2V0 UGFnZShzYnVmKTsNCisJCQlCVFBhZ2VPcGFxdWUgc3BhZ2VvcCA9IEJUUGFnZUdldE9wYXF1ZShz cGFnZSk7DQorDQorCQkJc3BhZ2VvcC0+YnRwb19wcmV2ID0gcmlnaHRwYWdlbnVtYmVyOw0KKwkJ CVBhZ2VTZXRMU04oc3BhZ2UsIGxzbik7DQorCQkJTWFya0J1ZmZlckRpcnR5KHNidWYpOw0KKwkJ fQ0KKwkJaWYgKEJ1ZmZlcklzVmFsaWQoc2J1ZikpDQorCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihz YnVmKTsNCisJfQ0KKw0KKwlVbmxvY2tSZWxlYXNlQnVmZmVyKHJidWYpOw0KKwlpZiAoQnVmZmVy SXNWYWxpZChvcmlnYnVmKSkNCisJCVVubG9ja1JlbGVhc2VCdWZmZXIob3JpZ2J1Zik7DQorfQ0K Kw0KIHN0YXRpYyB2b2lkDQogYnRyZWVfeGxvZ19zcGxpdChib29sIG5ld2l0ZW1vbmxlZnQsIFhM b2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQ0KIHsNCkBAIC0yNjQsNiArNDY5LDE4IEBAIGJ0cmVlX3hs b2dfc3BsaXQoYm9vbCBuZXdpdGVtb25sZWZ0LCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkNCiAJ aWYgKCFYTG9nUmVjR2V0QmxvY2tUYWdFeHRlbmRlZChyZWNvcmQsIDIsIE5VTEwsIE5VTEwsICZz cGFnZW51bWJlciwgTlVMTCkpDQogCQlzcGFnZW51bWJlciA9IFBfTk9ORTsNCiANCisJLyoNCisJ ICogQSBwcmVmaXgtY29tcHJlc3NlZCBsZWFmIHNwbGl0IGlzIHJlcGxheWVkIGJ5IHJlYnVpbGRp bmcgYm90aCBoYWx2ZXMNCisJICogZnJvbSB0aGUgcHJlLXNwbGl0IG9yaWdpbmFsIHBhZ2UsIGV4 YWN0bHkgYXMgdGhlIHByaW1hcnkgZGlkLCBzbyB0aGUNCisJICogY29kZWQgcGFnZXMgY29tZSBv dXQgYnl0ZS1pZGVudGljYWwgd2l0aG91dCBhIGZ1bGwtcGFnZSBpbWFnZS4NCisJICovDQorCWlm ICh4bHJlYy0+ZmxhZ3MgJiBYTEhfU1BMSVRfTEVBRlBSRUZJWCkNCisJew0KKwkJYnRyZWVfeGxv Z19zcGxpdF9wcmVmaXgocmVjb3JkLCBvcmlncGFnZW51bWJlciwgcmlnaHRwYWdlbnVtYmVyLA0K KwkJCQkJCQkJc3BhZ2VudW1iZXIsIG5ld2l0ZW1vbmxlZnQpOw0KKwkJcmV0dXJuOw0KKwl9DQor DQogCS8qDQogCSAqIENsZWFyIHRoZSBpbmNvbXBsZXRlIHNwbGl0IGZsYWcgb24gdGhlIGFwcHJv cHJpYXRlIGNoaWxkIHBhZ2Ugb25lIGxldmVsDQogCSAqIGRvd24gd2hlbiBvcmlncGFnZS9idWYg aXMgYW4gaW50ZXJuYWwgcGFnZSAodGhlcmUgbXVzdCBoYXZlIGJlZW4NCkBAIC0yODAsNyArNDk3 LDcgQEAgYnRyZWVfeGxvZ19zcGxpdChib29sIG5ld2l0ZW1vbmxlZnQsIFhMb2dSZWFkZXJTdGF0 ZSAqcmVjb3JkKQ0KIAlpZiAoIWlzbGVhZikNCiAJCV9idF9jbGVhcl9pbmNvbXBsZXRlX3NwbGl0 KHJlY29yZCwgMyk7DQogDQotCS8qIFJlY29uc3RydWN0IHJpZ2h0IChuZXcpIHNpYmxpbmcgcGFn ZSBmcm9tIHNjcmF0Y2ggKi8NCisJLyogUmVjb25zdHJ1Y3QgcmlnaHQgKG5ldykgc2libGluZyBw YWdlIGZyb20gdGhlIGxvZ2dlZCB0dXBsZXMuICovDQogCXJidWYgPSBYTG9nSW5pdEJ1ZmZlckZv clJlZG8ocmVjb3JkLCAxKTsNCiAJZGF0YXBvcyA9IFhMb2dSZWNHZXRCbG9ja0RhdGEocmVjb3Jk LCAxLCAmZGF0YWxlbik7DQogCXJwYWdlID0gQnVmZmVyR2V0UGFnZShyYnVmKTsNCkBAIC00Njgs NiArNjg1LDU2IEBAIGJ0cmVlX3hsb2dfZGVkdXAoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpDQog CQlCVERlZHVwU3RhdGUgc3RhdGU7DQogCQlCVERlZHVwSW50ZXJ2YWwgKmludGVydmFsczsNCiAJ CVBhZ2UJCW5ld3BhZ2U7DQorCQlib29sCQlwYWdlcHJlZml4OwkJLyogc291cmNlIHBhZ2UgaXMg QlRQX1BSRUZJWCAqLw0KKwkJQlRJdGVtQnVmCWN1cmJ1ZjsJCQkvKiBkZWNvZGUgc2NyYXRjaCBm b3IgdGhlIGN1cnJlbnQgaXRlbSAqLw0KKwkJQlRJdGVtQnVmCWJhc2VidWY7CQkvKiBkZWNvZGUg c2NyYXRjaCBrZXB0IGZvciB0aGUgcGVuZGluZyBiYXNlICovDQorDQorCQlpZiAoeGxyZWMtPnBy ZWZpeGxlbiA+IDApDQorCQl7DQorCQkJLyoNCisJCQkgKiBQcmVmaXgtZGVkdXA6IHRoZSBkZWR1 cGVkIHJlc3VsdCB3YXMgY2FycmllZCBhcyB0aGUgY2hvc2VuIHByZWZpeA0KKwkJCSAqIGJ5dGVz LCB0aGVuICh1bmxlc3MgcmlnaHRtb3N0KSB0aGUgaGlnaCBrZXksIHRoZW4gdGhlIGRlZHVwZWQN CisJCQkgKiBwbGFpbiBpdGVtcy4gIFJlYnVpbGQgdGhlIGNvZGVkIHBhZ2UgYnl0ZS1mb3ItYnl0 ZSB0aGUgd2F5IHRoZQ0KKwkJCSAqIHByaW1hcnkgZGlkLCB1c2luZyB0aGUgc2FtZSBsYXlvdXQg cm91dGluZSBhcyBhIHByZWZpeCBsZWFmIHNwbGl0Lg0KKwkJCSAqLw0KKwkJCVNpemUJCWRhdGFs ZW47DQorCQkJY2hhcgkgICAqZGF0YXBvcyA9IFhMb2dSZWNHZXRCbG9ja0RhdGEocmVjb3JkLCAw LCAmZGF0YWxlbik7DQorCQkJY29uc3QgY2hhciAqcHJlZml4ID0gZGF0YXBvczsNCisJCQlJbmRl eFR1cGxlCWhpa2V5ID0gTlVMTDsNCisJCQlJbmRleFR1cGxlCWl0ZW1zW01heEluZGV4VHVwbGVz UGVyUGFnZV07DQorCQkJaW50CQkJbml0ZW1zID0gMDsNCisNCisJCQlkYXRhcG9zICs9IHhscmVj LT5wcmVmaXhsZW47DQorCQkJZGF0YWxlbiAtPSB4bHJlYy0+cHJlZml4bGVuOw0KKwkJCWlmICh4 bHJlYy0+ZmxhZ3MgJiBYTEhfREVEVVBfTk9UX1JJR0hUTU9TVCkNCisJCQl7DQorCQkJCWhpa2V5 ID0gKEluZGV4VHVwbGUpIGRhdGFwb3M7DQorCQkJCWRhdGFwb3MgKz0gTUFYQUxJR04oSW5kZXhU dXBsZVNpemUoaGlrZXkpKTsNCisJCQkJZGF0YWxlbiAtPSBNQVhBTElHTihJbmRleFR1cGxlU2l6 ZShoaWtleSkpOw0KKwkJCX0NCisJCQl3aGlsZSAoZGF0YWxlbiA+IDApDQorCQkJew0KKwkJCQlJ bmRleFR1cGxlCWl0ID0gKEluZGV4VHVwbGUpIGRhdGFwb3M7DQorCQkJCVNpemUJCXN6ID0gTUFY QUxJR04oSW5kZXhUdXBsZVNpemUoaXQpKTsNCisNCisJCQkJQXNzZXJ0KG5pdGVtcyA8IE1heElu ZGV4VHVwbGVzUGVyUGFnZSk7DQorCQkJCWl0ZW1zW25pdGVtcysrXSA9IGl0Ow0KKwkJCQlkYXRh cG9zICs9IHN6Ow0KKwkJCQlkYXRhbGVuIC09IHN6Ow0KKwkJCX0NCisJCQlBc3NlcnQoZGF0YWxl biA9PSAwKTsNCisNCisJCQluZXdwYWdlID0gUGFnZUdldFRlbXBQYWdlQ29weVNwZWNpYWwocGFn ZSk7DQorCQkJQlRQYWdlR2V0T3BhcXVlKG5ld3BhZ2UpLT5idHBvX2ZsYWdzICY9IH4oQlRQX1BS RUZJWCB8IEJUUF9IQVNfR0FSQkFHRSk7DQorCQkJaWYgKCFfYnRfc3BsaXRfbGVhZl9sYXlvdXQo bmV3cGFnZSwgaGlrZXksIGl0ZW1zLCBuaXRlbXMsDQorCQkJCQkJCQkJICAgcHJlZml4LCB4bHJl Yy0+cHJlZml4bGVuKSkNCisJCQkJZWxvZyhFUlJPUiwgImZhaWxlZCB0byByZXBsYXkgcHJlZml4 IGRlZHVwbGljYXRpb24iKTsNCisJCQlQYWdlUmVzdG9yZVRlbXBQYWdlKG5ld3BhZ2UsIHBhZ2Up Ow0KKwkJCVBhZ2VTZXRMU04ocGFnZSwgbHNuKTsNCisJCQlNYXJrQnVmZmVyRGlydHkoYnVmKTsN CisJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1Zik7DQorCQkJcmV0dXJuOw0KKwkJfQ0KIA0KIAkJ c3RhdGUgPSBwYWxsb2Nfb2JqZWN0KEJURGVkdXBTdGF0ZURhdGEpOw0KIAkJc3RhdGUtPmRlZHVw bGljYXRlID0gdHJ1ZTsJLyogdW51c2VkICovDQpAQCAtNDg3LDYgKzc1NCwxOSBAQCBidHJlZV94 bG9nX2RlZHVwKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQ0KIAkJbWF4b2ZmID0gUGFnZUdldE1h eE9mZnNldE51bWJlcihwYWdlKTsNCiAJCW5ld3BhZ2UgPSBQYWdlR2V0VGVtcFBhZ2VDb3B5U3Bl Y2lhbChwYWdlKTsNCiANCisJCS8qDQorCQkgKiBUaGUgc291cmNlIHBhZ2UgbWF5IGJlIHByZWZp eC1jb21wcmVzc2VkIGV2ZW4gb24gdGhlIG9yZGluYXJ5DQorCQkgKiAobm9uLXByZWZpeCkgZGVk dXAgcGF0aDogdGhhdCBoYXBwZW5zIHdoZW4gdGhlIHByaW1hcnkgZGVkdXBsaWNhdGVkDQorCQkg KiBhIHByZWZpeCBwYWdlIGJ1dCByZS1jb21wcmVzc2lvbiBvZiB0aGUgcmVzdWx0IGRlY2xpbmVk LCBsZWF2aW5nIGENCisJCSAqIHBsYWluIHBhZ2UgKHByZWZpeGxlbiA9PSAwLCBubyBmdWxsLXBh Z2UgaW1hZ2UpLiAgUmVwcm9kdWNlIHRoZQ0KKwkJICogcHJpbWFyeTogbGF5IHRoZSByZXN1bHQg b3V0IHBsYWluIGFuZCBkZWNvZGUgZWFjaCBjb2RlZCBkYXRhIGl0ZW0NCisJCSAqIGJlZm9yZSBm ZWVkaW5nIGl0IHRvIHRoZSBkZWR1cCBzdGF0ZSBtYWNoaW5lLiAgVGhlIGhpZ2gga2V5IGlzIGEN CisJCSAqIHBpdm90IGFuZCBpcyBuZXZlciBjb2RlZC4NCisJCSAqLw0KKwkJcGFnZXByZWZpeCA9 IFBfSEFTUFJFRklYKG9wYXF1ZSk7DQorCQlpZiAocGFnZXByZWZpeCkNCisJCQlCVFBhZ2VHZXRP cGFxdWUobmV3cGFnZSktPmJ0cG9fZmxhZ3MgJj0gfkJUUF9QUkVGSVg7DQorDQogCQlpZiAoIVBf UklHSFRNT1NUKG9wYXF1ZSkpDQogCQl7DQogCQkJSXRlbUlkCQlpdGVtaWQgPSBQYWdlR2V0SXRl bUlkKHBhZ2UsIFBfSElLRVkpOw0KQEAgLTUwNSw4ICs3ODUsMTggQEAgYnRyZWVfeGxvZ19kZWR1 cChYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkNCiAJCQlJdGVtSWQJCWl0ZW1pZCA9IFBhZ2VHZXRJ dGVtSWQocGFnZSwgb2ZmbnVtKTsNCiAJCQlJbmRleFR1cGxlCWl0dXAgPSAoSW5kZXhUdXBsZSkg UGFnZUdldEl0ZW0ocGFnZSwgaXRlbWlkKTsNCiANCisJCQkvKiBEZWNvZGUgb24gYSBwcmVmaXgg c291cmNlIHNvIGtleXMvcG9zdGluZyBsaXN0cyBhcmUgcmVhbC4gKi8NCisJCQlpZiAocGFnZXBy ZWZpeCkNCisJCQkJaXR1cCA9IF9idF9wcmVmaXhfZGVjb2RlKHBhZ2UsIGl0dXAsICZjdXJidWYp Ow0KKw0KIAkJCWlmIChvZmZudW0gPT0gbWlub2ZmKQ0KKwkJCXsNCisJCQkJLyogYmFzZSBtdXN0 IHN1cnZpdmUgdGhlIHdob2xlIHJ1bjsga2VlcCBpdCBpbiBpdHMgb3duIGJ1ZmZlciAqLw0KKwkJ CQlpZiAocGFnZXByZWZpeCkNCisJCQkJCWl0dXAgPSBfYnRfcHJlZml4X2RlY29kZShwYWdlLCAo SW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaXRlbWlkKSwNCisJCQkJCQkJCQkJCSAmYmFz ZWJ1Zik7DQogCQkJCV9idF9kZWR1cF9zdGFydF9wZW5kaW5nKHN0YXRlLCBpdHVwLCBvZmZudW0p Ow0KKwkJCX0NCiAJCQllbHNlIGlmIChzdGF0ZS0+bmludGVydmFscyA8IHhscmVjLT5uaW50ZXJ2 YWxzICYmDQogCQkJCQkgc3RhdGUtPmJhc2VvZmYgPT0gaW50ZXJ2YWxzW3N0YXRlLT5uaW50ZXJ2 YWxzXS5iYXNlb2ZmICYmDQogCQkJCQkgc3RhdGUtPm5pdGVtcyA8IGludGVydmFsc1tzdGF0ZS0+ bmludGVydmFsc10ubml0ZW1zKQ0KQEAgLTUxNiwxMiArODA2LDE1IEBAIGJ0cmVlX3hsb2dfZGVk dXAoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpDQogCQkJfQ0KIAkJCWVsc2UNCiAJCQl7DQotCQkJ CV9idF9kZWR1cF9maW5pc2hfcGVuZGluZyhuZXdwYWdlLCBzdGF0ZSk7DQorCQkJCV9idF9kZWR1 cF9maW5pc2hfcGVuZGluZyhuZXdwYWdlLCBzdGF0ZSwgZmFsc2UpOw0KKwkJCQlpZiAocGFnZXBy ZWZpeCkNCisJCQkJCWl0dXAgPSBfYnRfcHJlZml4X2RlY29kZShwYWdlLCAoSW5kZXhUdXBsZSkg UGFnZUdldEl0ZW0ocGFnZSwgaXRlbWlkKSwNCisJCQkJCQkJCQkJCSAmYmFzZWJ1Zik7DQogCQkJ CV9idF9kZWR1cF9zdGFydF9wZW5kaW5nKHN0YXRlLCBpdHVwLCBvZmZudW0pOw0KIAkJCX0NCiAJ CX0NCiANCi0JCV9idF9kZWR1cF9maW5pc2hfcGVuZGluZyhuZXdwYWdlLCBzdGF0ZSk7DQorCQlf YnRfZGVkdXBfZmluaXNoX3BlbmRpbmcobmV3cGFnZSwgc3RhdGUsIGZhbHNlKTsNCiAJCUFzc2Vy dChzdGF0ZS0+bmludGVydmFscyA9PSB4bHJlYy0+bmludGVydmFscyk7DQogCQlBc3NlcnQobWVt Y21wKHN0YXRlLT5pbnRlcnZhbHMsIGludGVydmFscywNCiAJCQkJCSAgc3RhdGUtPm5pbnRlcnZh bHMgKiBzaXplb2YoQlREZWR1cEludGVydmFsKSkgPT0gMCk7DQpAQCAtNjIxLDExICs5MTQsMjMg QEAgYnRyZWVfeGxvZ192YWN1dW0oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpDQogCQlpZiAoeGxy ZWMtPm5kZWxldGVkID4gMCkNCiAJCQlQYWdlSW5kZXhNdWx0aURlbGV0ZShwYWdlLCAoT2Zmc2V0 TnVtYmVyICopIHB0ciwgeGxyZWMtPm5kZWxldGVkKTsNCiANCisJCW9wYXF1ZSA9IEJUUGFnZUdl dE9wYXF1ZShwYWdlKTsNCisNCisJCS8qDQorCQkgKiBNaXJyb3IgdGhlIHByaW1hcnk6IGFuIGVt cHRpZWQgcHJlZml4LWNvbXByZXNzZWQgbGVhZiBkcm9wcyBpdHMNCisJCSAqIFBSRUZJWCBpdGVt IGFuZCB0aGUgQlRQX1BSRUZJWCBmbGFnIChzZWUgX2J0X2RlbGl0ZW1zX3ZhY3V1bSkuDQorCQkg Ki8NCisJCWlmIChQX0hBU1BSRUZJWChvcGFxdWUpICYmDQorCQkJUGFnZUdldE1heE9mZnNldE51 bWJlcihwYWdlKSA9PSBCVFBhZ2VHZXRQcmVmaXhPZmYob3BhcXVlKSkNCisJCXsNCisJCQlQYWdl SW5kZXhUdXBsZURlbGV0ZShwYWdlLCBCVFBhZ2VHZXRQcmVmaXhPZmYob3BhcXVlKSk7DQorCQkJ b3BhcXVlLT5idHBvX2ZsYWdzICY9IH5CVFBfUFJFRklYOw0KKwkJfQ0KKw0KIAkJLyoNCiAJCSAq IENsZWFyIHRoZSB2YWN1dW0gY3ljbGUgSUQsIGFuZCBtYXJrIHRoZSBwYWdlIGFzIG5vdCBjb250 YWluaW5nIGFueQ0KIAkJICogTFBfREVBRCBpdGVtcw0KIAkJICovDQotCQlvcGFxdWUgPSBCVFBh Z2VHZXRPcGFxdWUocGFnZSk7DQogCQlvcGFxdWUtPmJ0cG9fY3ljbGVpZCA9IDA7DQogCQlvcGFx dWUtPmJ0cG9fZmxhZ3MgJj0gfkJUUF9IQVNfR0FSQkFHRTsNCiANCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgNCmlu ZGV4IDMwOTdlOWJiMWFmLi5jYTdlNjg1MjU0MiAxMDA2NDQNCi0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9uYnRyZWUuaA0KKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oDQpAQCAtODMs NiArODMsOCBAQCB0eXBlZGVmIEJUUGFnZU9wYXF1ZURhdGEgKkJUUGFnZU9wYXF1ZTsNCiAjZGVm aW5lIEJUUF9IQVNfR0FSQkFHRSAoMSA8PCA2KQkvKiBwYWdlIGhhcyBMUF9ERUFEIHR1cGxlcyAo ZGVwcmVjYXRlZCkgKi8NCiAjZGVmaW5lIEJUUF9JTkNPTVBMRVRFX1NQTElUICgxIDw8IDcpCS8q IHJpZ2h0IHNpYmxpbmcncyBkb3dubGluayBpcyBtaXNzaW5nICovDQogI2RlZmluZSBCVFBfSEFT X0ZVTExYSUQJKDEgPDwgOCkJLyogY29udGFpbnMgQlREZWxldGVkUGFnZURhdGEgKi8NCisjZGVm aW5lIEJUUF9QUkVGSVgJCSgxIDw8IDkpCS8qIGxlYWYga2V5cyBjb2RlZCBhZ2FpbnN0IGEgcGFn ZSBwcmVmaXgNCisJCQkJCQkJCQkgKiAoc2VlIG5idHByZWZpeC5jKSAqLw0KIA0KIC8qDQogICog VGhlIG1heCBhbGxvd2VkIHZhbHVlIG9mIGEgY3ljbGUgSUQgaXMgYSBiaXQgbGVzcyB0aGFuIDY0 Sy4gIFRoaXMgaXMNCkBAIC0zNjcsNyArMzY5LDYxIEBAIHR5cGVkZWYgc3RydWN0IEJUVmFjU3Rh dGUNCiANCiAjZGVmaW5lIFBfSElLRVkJCQkJKChPZmZzZXROdW1iZXIpIDEpDQogI2RlZmluZSBQ X0ZJUlNUS0VZCQkJKChPZmZzZXROdW1iZXIpIDIpDQotI2RlZmluZSBQX0ZJUlNUREFUQUtFWShv cGFxdWUpCShQX1JJR0hUTU9TVChvcGFxdWUpID8gUF9ISUtFWSA6IFBfRklSU1RLRVkpDQorDQor LyoNCisgKiBMZWFmIGtleSBwcmVmaXggY29tcHJlc3Npb24gKHNlZSBuYnRwcmVmaXguYyBmb3Ig dGhlIGZvcm1hdCBhbmQgY29kZSkuDQorICoNCisgKiBBIGxlYWYgb2YgYW4gaW5kZXggd2hvc2Ug cHJlZml4X2NvbXByZXNzaW9uIHJlbG9wdGlvbiBpcyBvbiwgYW5kIHdob3NlDQorICogZmlyc3Qg a2V5IGNvbHVtbiBpcyBvZiBhIHZhcmxlbmEgdHlwZSwgbWF5IGJlIGZsYWdnZWQgQlRQX1BSRUZJ WC4gIFN1Y2ggYQ0KKyAqIHBhZ2UgaG9sZHMgb25lIGV4dHJhIGl0ZW0sIHRoZSBQUkVGSVggaXRl bSwgYXQgQlRQYWdlR2V0UHJlZml4T2ZmICh3aGVyZQ0KKyAqIGl0cyBmaXJzdCBkYXRhIGl0ZW0g d291bGQgb3RoZXJ3aXNlIGJlKTsgaXRzIGRhdGEgaXRlbXMgc3RhcnQgb25lIG9mZnNldA0KKyAq IGxhdGVyLCBzbyBQX0ZJUlNUREFUQUtFWSAtLSB3aGljaCBldmVyeSBsb29wIG92ZXIgYSBwYWdl J3MgZGF0YSBpdGVtcw0KKyAqIHN0YXJ0cyBmcm9tIC0tIGFjY291bnRzIGZvciB0aGUgZmxhZy4g IFRoZSBQUkVGSVggaXRlbSBpcyBhbg0KKyAqIEluZGV4VHVwbGVEYXRhIGhlYWRlciAodF90aWQg emVybywgdF9pbmZvIGl0cyBzaXplIGFuZCBub3RoaW5nIGVsc2UsIHNvDQorICogdGhhdCBjb2Rl IHdhbGtpbmcgYSBwYWdlJ3MgaXRlbXMgYnkgSW5kZXhUdXBsZVNpemUsIHN1Y2ggYXMgc3BsaXQg cmVkbywNCisgKiBzdGVwcyBvdmVyIGl0KSBmb2xsb3dlZCBieSAxLi5CVFJFRV9QUkVGSVhfTUFY IHByZWZpeCBieXRlcy4gIFRoZSBwcmVmaXggaXMNCisgKiBjaG9zZW4gb25seSB3aGVuIGEgcGFn ZSBpcyB3cml0dGVuIHdob2xlIChDUkVBVEUgSU5ERVgsIG9yIGEgaGFsZiBvZiBhDQorICogc3Bs aXQpIGFuZCBuZXZlciBjaGFuZ2VzIGFmdGVyIHRoYXQ7IGEgcGFnZSdzIGhpZ2gga2V5LCB3aGlj aCBmaXhlcyB0aGUNCisgKiBwcmVmaXggaXRlbSdzIG9mZnNldCwgYWxzbyBjaGFuZ2VzIG9ubHkg aW4gYSBzcGxpdC4NCisgKg0KKyAqIE9uIGEgQlRQX1BSRUZJWCBwYWdlLCBldmVyeSBub24tcGl2 b3QgdHVwbGUgKHBsYWluIG9yIHBvc3RpbmcpIHdob3NlIGZpcnN0DQorICoga2V5IGNvbHVtbiBp cyBub3QgTlVMTCBzdG9yZXMgdGhhdCBjb2x1bW4gY29kZWQsIGFzIGEgdmFybGVuYSAoMS1ieXRl DQorICogaGVhZGVyIHdoZW4gaXQgZml0cyBvbmUsIGVsc2UgNC1ieXRlKSB3aG9zZSBwYXlsb2Fk IHN0YXJ0cyB3aXRoIGEgdWludDgNCisgKiBgc2hhcmVkJzoNCisgKg0KKyAqICAgc2hhcmVkIDw9 IEJUUkVFX1BSRUZJWF9NQVg6IHRoZSB2YWx1ZSdzIGRhdGEgYnl0ZXMgYXJlIHRoZSBwYWdlIHBy ZWZpeCdzDQorICoJCQkJZmlyc3QgYHNoYXJlZCcgYnl0ZXMgZm9sbG93ZWQgYnkgdGhlIHJlc3Qg b2YgdGhlIHBheWxvYWQuDQorICoJCQkJVGhlIHZhbHVlJ3Mgb3duIHZhcmxlbmEgaGVhZGVyIGlz IHJlY29tcHV0ZWQgb24gZGVjb2RlICh0aGUNCisgKgkJCQlmb3JtIGluZGV4X2Zvcm1fdHVwbGUg Z2l2ZXMgaXQ6IDEtYnl0ZSB3aGVuIGl0IGZpdHMsIGVsc2UNCisgKgkJCQk0LWJ5dGUgdW5jb21w cmVzc2VkKS4NCisgKiAgIHNoYXJlZCA9PSBCVFJFRV9QUkVGSVhfUkFXOiB0aGUgcmVzdCBvZiB0 aGUgcGF5bG9hZCBpcyB0aGUgdmFsdWUgZXhhY3RseQ0KKyAqCQkJCWFzIHN0b3JlZCwgaGVhZGVy IGluY2x1ZGVkLiAgVXNlZCBmb3IgYSB2YWx1ZSBjb21wcmVzc2VkDQorICoJCQkJaW5saW5lLCBv ciB3aG9zZSBoZWFkZXIgaXMgbm90IHRoZSBjYW5vbmljYWwgZm9ybSBhYm92ZS4NCisgKg0KKyAq IFRoZSBieXRlcyBhZnRlciB0aGUgZmlyc3QgY29sdW1uIChsYXRlciBrZXkgY29sdW1ucywgSU5D TFVERSBjb2x1bW5zLCB0aGUNCisgKiBwb3N0aW5nIGxpc3QsIGFuZCBhbGlnbm1lbnQgcGFkZGlu ZykgYXJlIGtlcHQgYXMgdGhleSBhcmUsIG1vdmVkIHRvIGtlZXANCisgKiB0aGVpciBhbGlnbm1l bnQsIG9yIGxlZnQgb3V0IHdoZW4gdGhleSBhcmUgb25seSB0aGUga2V5J3MgY2xvc2luZyB6ZXJv DQorICogcGFkZGluZyAoZGVjb2RlIHB1dHMgdGhlbSBiYWNrKS4gIEEgcG9zdGluZyBsaXN0IGZv bGxvd3MgdGhlIGtleSBhdCB0aGUgbmV3DQorICoga2V5IGVuZCwgYW5kIHRoZSBwb3N0aW5nIG9m ZnNldCBpbiB0X3RpZCBpcyBjaGFuZ2VkIHRvIG1hdGNoLiAgUGl2b3RzLCBOVUxMDQorICogZmly c3QgY29sdW1ucywgYW5kIHRoZSBoaWdoIGtleSBhcmUgc3RvcmVkIGFzIG9uIGFueSBvdGhlciBw YWdlLg0KKyAqDQorICogQ29kaW5nIGFuZCBkZWNvZGluZyBkZXBlbmQgb25seSBvbiB0aGUgcGFn ZSdzIHByZWZpeCBhbmQgdGhlIHR1cGxlLCBub3Qgb24NCisgKiB0aGUgY2F0YWxvZywgc28gV0FM IHJlZG8gY2FuIHJlcGVhdCB0aGVtLCBhbmQgZGVjb2RpbmcgZ2l2ZXMgYmFjayB0aGUgcGxhaW4N CisgKiB0dXBsZSBieXRlIGZvciBieXRlLg0KKyAqLw0KKyNkZWZpbmUgQlRSRUVfUFJFRklYX01B WAkJMTI2DQorI2RlZmluZSBCVFJFRV9QUkVGSVhfUkFXCQkxMjcJLyogc2hhcmVkIGNvdW50IG9m IGEgcmF3IHZhbHVlICovDQorI2RlZmluZSBCVFJFRV9QUkVGSVhfU0hBUkVEX01BU0sgMHg3Rgkv KiBzaGFyZWQgY291bnQgYml0cyAqLw0KKyNkZWZpbmUgQlRSRUVfUFJFRklYX1JFU1QJCTB4ODAJ LyogYnl0ZXMgYWZ0ZXIgdGhlIGNvbHVtbiBmb2xsb3cgKi8NCisNCisvKiBBIGxlYWYgd2hvc2Ug dHVwbGVzIHNoYXJlIGxlc3Mgb2YgaXRzIHByZWZpeCB0aGFuIHRoaXMsIG9uIGF2ZXJhZ2UsIGhh cyBub25lLiAqLw0KKyNkZWZpbmUgQlRSRUVfUFJFRklYX01JTl9TSEFSRUQJNA0KKw0KKyNkZWZp bmUgUF9IQVNQUkVGSVgob3BhcXVlKQkJKCgob3BhcXVlKS0+YnRwb19mbGFncyAmIEJUUF9QUkVG SVgpICE9IDApDQorI2RlZmluZSBCVFBhZ2VHZXRQcmVmaXhPZmYob3BhcXVlKSBcDQorCShQX1JJ R0hUTU9TVChvcGFxdWUpID8gUF9ISUtFWSA6IFBfRklSU1RLRVkpDQorI2RlZmluZSBQX0ZJUlNU REFUQUtFWShvcGFxdWUpIFwNCisJKEJUUGFnZUdldFByZWZpeE9mZihvcGFxdWUpICsgKFBfSEFT UFJFRklYKG9wYXF1ZSkgPyAxIDogMCkpDQogDQogLyoNCiAgKiBOb3RlcyBvbiBCLVRyZWUgdHVw bGUgZm9ybWF0LCBhbmQga2V5IGFuZCBub24ta2V5IGF0dHJpYnV0ZXM6DQpAQCAtNjc2LDYgKzcz MiwzNiBAQCBCVHJlZVR1cGxlR2V0TWF4SGVhcFRJRChJbmRleFR1cGxlIGl0dXApDQogCXJldHVy biAmaXR1cC0+dF90aWQ7DQogfQ0KIA0KKy8qDQorICogTGVhZiBrZXkgcHJlZml4IGNvbXByZXNz aW9uIChzZWUgbmJ0cHJlZml4LmMgZm9yIHRoZSBmb3JtYXQpLg0KKyAqDQorICogV29ya3NwYWNl IGZvciBfYnRfZ2V0aXRlbS4gIEV2ZXJ5IHJlYWQgb2YgYSBsZWFmIERBVEEgaXRlbSAoYW55IGl0 ZW0gYnV0DQorICogdGhlIGhpZ2gga2V5IG9yIGEgcGl2b3QpIHRoYXQgY291bGQgYmUgb24gYSBC VFBfUFJFRklYIHBhZ2UgZ29lcyB0aHJvdWdoDQorICogdGhhdCBmdW5jdGlvbiByYXRoZXIgdGhh biBiYXJlIFBhZ2VHZXRJdGVtLCBzbyBkZWNvZGluZyBoYXMgb25lIGhvbWUuICBUaGUNCisgKiB3 b3Jrc3BhY2UgaG9sZHMgYSBkZWNvZGVkIGNvcHk7IHRoZSByZXR1cm5lZCB0dXBsZSBpcyB2YWxp ZCB1bnRpbCB0aGUNCisgKiB3b3Jrc3BhY2UgaXMgcmV1c2VkIG9yIHRoZSBwYWdlIGlzIHVubG9j a2VkLiAgSGlnaCBrZXlzIGFuZCBwaXZvdHMsIGFuZA0KKyAqIGl0ZW1zIGEgY2FsbGVyIGNoYW5n ZXMgaW4gcGxhY2UsIGFyZSByZWFkIHdpdGggUGFnZUdldEl0ZW0uDQorICovDQordHlwZWRlZiBQ R0FsaWduZWRCbG9jayBCVEl0ZW1CdWY7DQorDQorZXh0ZXJuIEluZGV4VHVwbGUgX2J0X3ByZWZp eF9kZWNvZGUoUGFnZSBwYWdlLCBJbmRleFR1cGxlIGl0dXAsIEJUSXRlbUJ1ZiAqYnVmKTsNCisN CisvKg0KKyAqIFJldHVybiB0aGUgZGF0YSBpdGVtIGF0IGBvZmZudW0nIG9uIGBwYWdlJyBhcyBh IHBsYWluIEluZGV4VHVwbGU6IG9uIGENCisgKiBCVFBfUFJFRklYIHBhZ2UsIHRoZSB0dXBsZSBk ZWNvZGVkIGludG8gYGJ1Zic7IG90aGVyd2lzZSB0aGUgb24tcGFnZSB0dXBsZSwNCisgKiBhbmQg YGJ1ZicgaXMgbm90IHVzZWQuICBDYWxsZXJzIG11c3Qgbm90IHdyaXRlIHRocm91Z2ggdGhlIHJl c3VsdC4NCisgKi8NCitzdGF0aWMgaW5saW5lIEluZGV4VHVwbGUNCitfYnRfZ2V0aXRlbShQYWdl IHBhZ2UsIE9mZnNldE51bWJlciBvZmZudW0sIEJUSXRlbUJ1ZiAqYnVmKQ0KK3sNCisJSW5kZXhU dXBsZQlpdHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIFBhZ2VHZXRJdGVtSWQo cGFnZSwgb2ZmbnVtKSk7DQorCUJUUGFnZU9wYXF1ZSBvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUo cGFnZSk7DQorDQorCWlmICh1bmxpa2VseShQX0hBU1BSRUZJWChvcGFxdWUpKSAmJiBvZmZudW0g PiBCVFBhZ2VHZXRQcmVmaXhPZmYob3BhcXVlKSkNCisJCXJldHVybiBfYnRfcHJlZml4X2RlY29k ZShwYWdlLCBpdHVwLCBidWYpOw0KKwlyZXR1cm4gaXR1cDsNCit9DQorDQogLyoNCiAgKglPcGVy YXRvciBzdHJhdGVneSBudW1iZXJzIGZvciBCLXRyZWUgaGF2ZSBiZWVuIG1vdmVkIHRvIGFjY2Vz cy9zdHJhdG51bS5oLA0KICAqCWJlY2F1c2UgbWFueSBwbGFjZXMgbmVlZCB0byB1c2UgdGhlbSBp biBTY2FuS2V5SW5pdCgpIGNhbGxzLg0KQEAgLTExMjIsNiArMTIwOCw3IEBAIHR5cGVkZWYgc3Ry dWN0IEJUT3B0aW9ucw0KIAlpbnQJCQlmaWxsZmFjdG9yOwkJLyogcGFnZSBmaWxsIGZhY3RvciBp biBwZXJjZW50ICgwLi4xMDApICovDQogCWZsb2F0OAkJdmFjdXVtX2NsZWFudXBfaW5kZXhfc2Nh bGVfZmFjdG9yOwkvKiBkZXByZWNhdGVkICovDQogCWJvb2wJCWRlZHVwbGljYXRlX2l0ZW1zOwkv KiBUcnkgdG8gZGVkdXBsaWNhdGUgaXRlbXM/ICovDQorCWJvb2wJCXByZWZpeF9jb21wcmVzc2lv bjsgLyogQ29kZSBsZWFmIGtleXMgYWdhaW5zdCBhIHBhZ2UgcHJlZml4PyAqLw0KIH0gQlRPcHRp b25zOw0KIA0KICNkZWZpbmUgQlRHZXRGaWxsRmFjdG9yKHJlbGF0aW9uKSBcDQpAQCAtMTEzNyw2 ICsxMjI0LDMzIEBAIHR5cGVkZWYgc3RydWN0IEJUT3B0aW9ucw0KIAkJCQkgcmVsYXRpb24tPnJk X3JlbC0+cmVsYW0gPT0gQlRSRUVfQU1fT0lEKSwgXA0KIAkoKHJlbGF0aW9uKS0+cmRfb3B0aW9u cyA/IFwNCiAJICgoQlRPcHRpb25zICopIChyZWxhdGlvbiktPnJkX29wdGlvbnMpLT5kZWR1cGxp Y2F0ZV9pdGVtcyA6IHRydWUpKQ0KKyNkZWZpbmUgQlRHZXRQcmVmaXhDb21wcmVzc2lvbihyZWxh dGlvbikgXA0KKwkoQXNzZXJ0TWFjcm8ocmVsYXRpb24tPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxL SU5EX0lOREVYICYmIFwNCisJCQkJIHJlbGF0aW9uLT5yZF9yZWwtPnJlbGFtID09IEJUUkVFX0FN X09JRCksIFwNCisJKChyZWxhdGlvbiktPnJkX29wdGlvbnMgPyBcDQorCSAoKEJUT3B0aW9ucyAq KSAocmVsYXRpb24pLT5yZF9vcHRpb25zKS0+cHJlZml4X2NvbXByZXNzaW9uIDogZmFsc2UpKQ0K Kw0KKy8qDQorICogU2l6ZSBvZiBvbmUgaGFsZiAoY3VyclR1cGxlcyBvciBtYXJrVHVwbGVzKSBv ZiBhbiBpbmRleC1vbmx5IHNjYW4ncyB0dXBsZQ0KKyAqIHN0b3JhZ2UuICBBIHBsYWluIGxlYWYn cyBsaXZlIG5vbi1waXZvdCB0dXBsZXMgZml0IGluIG9uZSBwYWdlLCBzbyBCTENLU1oNCisgKiB3 b3VsZCBzdWZmaWNlIGZvciB0aGVtLiAgQSBwcmVmaXgtY29tcHJlc3NlZCAoQlRQX1BSRUZJWCkg bGVhZiBjYW4gaG9sZCBtb3JlDQorICogbG9naWNhbCBkYXRhIHRoYW4gZml0cyBwbGFpbjogd2hl biBpdHMgdHVwbGVzIGFyZSBkZWNvZGVkIGZvciB0aGUgc2NhbiB0aGV5DQorICogY2FuIGV4Y2Vl ZCBCTENLU1ouICBCZWNhdXNlIF9idF9nZXRpdGVtKCkgZGVjb2RlcyBiYXNlZCBvbiB0aGUgcGFn ZSBmbGFnLA0KKyAqIG5vdCBvbiB0aGUgY3VycmVudCByZWxvcHRpb24sIGFuZCBhIEJUUF9QUkVG SVggcGFnZSBjYW4gcGVyc2lzdCBhZnRlcg0KKyAqIHByZWZpeF9jb21wcmVzc2lvbiBpcyB0dXJu ZWQgb2ZmICh0aGUgZmxhZyBpcyBjbGVhcmVkIG9ubHkgd2hlbiBhIHBhZ2UgaXMNCisgKiBzcGxp dCwgZW1wdGllZCBvciBkZWR1cC1yZXdyaXR0ZW4gLS0gbmV2ZXIgYnkgQUxURVIgSU5ERVgpLCBB TlkgYnRyZWUgaW5kZXgNCisgKiBtYXkgY29udGFpbiBzdWNoIGEgcGFnZS4gIFRoZSBidWZmZXIg bXVzdCB0aGVyZWZvcmUgYWx3YXlzIHJlc2VydmUgdGhlIHNsYWNrDQorICogZm9yIGEgZGVjb2Rl ZCBwYWdlLCBpbmRlcGVuZGVudCBvZiB0aGUgbGl2ZSByZWxvcHRpb247IHNpemluZyBpdCBvbiB0 aGUNCisgKiBvcHRpb24gd291bGQgb3ZlcmZsb3cgY3VyclR1cGxlcy9tYXJrVHVwbGVzIG9uIGEg c3Vydml2aW5nIHByZWZpeCBsZWFmLg0KKyAqDQorICogVGhlIGJvdW5kIGlzIHRoZSBtb3N0IGRp c3RpbmN0IGluZGV4IHR1cGxlcyBhIGxlYWYgY2FuIGhvbGQgKGVhY2ggYXQgbGVhc3QgYQ0KKyAq IGxpbmUgcG9pbnRlciBwbHVzIGEgbWluaW1hbGx5IGNvZGVkIHR1cGxlKSB0aW1lcyB0aGUgbW9z dCBhIHNpbmdsZSBmaXJzdA0KKyAqIGNvbHVtbiBjYW4gcmVnYWluIG9uIGRlY29kZSAodGhlIHBh Z2UgcHJlZml4LCBhdCBtb3N0IEJUUkVFX1BSRUZJWF9NQVgNCisgKiBieXRlcywgTUFYQUxJR05l ZCkuDQorICovDQorI2RlZmluZSBCVFR1cGxlU3RvcmFnZVNpemUocmVsYXRpb24pIFwNCisJKEJM Q0tTWiArIChCTENLU1ogLyAoaW50KSBNQVhBTElHTihzaXplb2YoSW5kZXhUdXBsZURhdGEpICsg MikpICogXA0KKwkgKGludCkgTUFYQUxJR04oQlRSRUVfUFJFRklYX01BWCkpDQogDQogLyoNCiAg KiBDb25zdGFudCBkZWZpbml0aW9uIGZvciBwcm9ncmVzcyByZXBvcnRpbmcuICBQaGFzZSBudW1i ZXJzIG11c3QgbWF0Y2gNCkBAIC0xMjAyLDcgKzEzMTYsOCBAQCBleHRlcm4gYm9vbCBfYnRfYm90 dG9tdXBkZWxfcGFzcyhSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsIFJlbGF0aW9uIGhlYXBSZWws DQogZXh0ZXJuIHZvaWQgX2J0X2RlZHVwX3N0YXJ0X3BlbmRpbmcoQlREZWR1cFN0YXRlIHN0YXRl LCBJbmRleFR1cGxlIGJhc2UsDQogCQkJCQkJCQkJT2Zmc2V0TnVtYmVyIGJhc2VvZmYpOw0KIGV4 dGVybiBib29sIF9idF9kZWR1cF9zYXZlX2h0aWQoQlREZWR1cFN0YXRlIHN0YXRlLCBJbmRleFR1 cGxlIGl0dXApOw0KLWV4dGVybiBTaXplIF9idF9kZWR1cF9maW5pc2hfcGVuZGluZyhQYWdlIG5l d3BhZ2UsIEJURGVkdXBTdGF0ZSBzdGF0ZSk7DQorZXh0ZXJuIFNpemUgX2J0X2RlZHVwX2Zpbmlz aF9wZW5kaW5nKFBhZ2UgbmV3cGFnZSwgQlREZWR1cFN0YXRlIHN0YXRlLA0KKwkJCQkJCQkJCWJv b2wgb3ZlcmZsb3dvayk7DQogZXh0ZXJuIEluZGV4VHVwbGUgX2J0X2Zvcm1fcG9zdGluZyhJbmRl eFR1cGxlIGJhc2UsIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqaHRpZHMsDQogCQkJCQkJCQkgICBp bnQgbmh0aWRzKTsNCiBleHRlcm4gdm9pZCBfYnRfdXBkYXRlX3Bvc3RpbmcoQlRWYWN1dW1Qb3N0 aW5nIHZhY3Bvc3RpbmcpOw0KQEAgLTEzMTUsNiArMTQzMCwzNCBAQCBleHRlcm4gdm9pZCBfYnRf Y2hlY2tfdGhpcmRfcGFnZShSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXAsDQogCQkJCQkJCQkg Ym9vbCBuZWVkaGVhcHRpZHNwYWNlLCBQYWdlIHBhZ2UsIEluZGV4VHVwbGUgbmV3dHVwKTsNCiBl eHRlcm4gYm9vbCBfYnRfYWxsZXF1YWxpbWFnZShSZWxhdGlvbiByZWwsIGJvb2wgZGVidWdtZXNz YWdlKTsNCiANCisvKg0KKyAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBuYnRwcmVmaXgu Yw0KKyAqLw0KK2V4dGVybiBjb25zdCBjaGFyICpfYnRfcGFnZV9nZXRfcHJlZml4KFBhZ2UgcGFn ZSwgU2l6ZSAqbGVuKTsNCitleHRlcm4gdm9pZCBfYnRfcGFnZV9zZXRfcHJlZml4KFBhZ2UgcGFn ZSwgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIGxlbik7DQorZXh0ZXJuIEluZGV4VHVwbGUgX2J0 X3ByZWZpeF9lbmNvZGUoUGFnZSBwYWdlLCBJbmRleFR1cGxlIGl0dXApOw0KK2V4dGVybiBTaXpl IF9idF9wcmVmaXhfY29kZWRfc2l6ZShQYWdlIHBhZ2UsIEluZGV4VHVwbGUgaXR1cCk7DQorZXh0 ZXJuIGJvb2wgX2J0X3ByZWZpeF9lbmFibGVkKFJlbGF0aW9uIGluZGV4KTsNCitleHRlcm4gY29u c3QgY2hhciAqX2J0X3ByZWZpeF9jYW5kaWRhdGUoSW5kZXhUdXBsZSBpdHVwLCBTaXplICpsZW4p Ow0KK2V4dGVybiBpbnQJX2J0X3ByZWZpeF9zaGFyZWQoY29uc3QgY2hhciAqcHJlZml4LCBTaXpl IHByZWZpeGxlbiwgSW5kZXhUdXBsZSBpdHVwKTsNCitleHRlcm4gU2l6ZSBfYnRfcHJlZml4X2No b29zZShSZWxhdGlvbiBpbmRleCwgSW5kZXhUdXBsZSAqaXRlbXMsIGludCBuLA0KKwkJCQkJCQkg IGNvbnN0IGNoYXIgKipwcmVmaXgpOw0KK2V4dGVybiB2b2lkIF9idF9wcmVmaXhfY29tcHJlc3Nf cGFnZShSZWxhdGlvbiBpbmRleCwgUGFnZSBwYWdlKTsNCitleHRlcm4gdm9pZCBfYnRfc3BsaXRf bGVhZl9oYWxmKFJlbGF0aW9uIGluZGV4LCBQYWdlIHBhZ2UsIEluZGV4VHVwbGUgaGlrZXksDQor CQkJCQkJCQlJbmRleFR1cGxlICppdGVtcywgaW50IG4sDQorCQkJCQkJCQljb25zdCBjaGFyICpv cmlncHJlZml4LCBTaXplIG9yaWdwcmVmaXhsZW4sDQorCQkJCQkJCQljaGFyICpjaG9zZW5wcmVm aXgsIFNpemUgKmNob3NlbnByZWZpeGxlbik7DQorZXh0ZXJuIGJvb2wgX2J0X3NwbGl0X2xlYWZf bGF5b3V0KFBhZ2UgcGFnZSwgSW5kZXhUdXBsZSBoaWtleSwNCisJCQkJCQkJCSAgSW5kZXhUdXBs ZSAqaXRlbXMsIGludCBuLA0KKwkJCQkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgcHJl Zml4bGVuKTsNCitleHRlcm4gdm9pZCBfYnRfc3BsaXRfbGVhZl9jb2xsZWN0KFBhZ2Ugb3JpZ3Bh Z2UsIE9mZnNldE51bWJlciBmaXJzdHJpZ2h0b2ZmLA0KKwkJCQkJCQkJICAgT2Zmc2V0TnVtYmVy IG5ld2l0ZW1vZmYsIEluZGV4VHVwbGUgbmV3aXRlbSwNCisJCQkJCQkJCSAgIGJvb2wgbmV3aXRl bW9ubGVmdCwNCisJCQkJCQkJCSAgIE9mZnNldE51bWJlciBvcmlncGFnZXBvc3RpbmdvZmYsDQor CQkJCQkJCQkgICBJbmRleFR1cGxlIG5wb3N0aW5nLA0KKwkJCQkJCQkJICAgSW5kZXhUdXBsZSAq bGVmdGl0ZW1zLCBpbnQgKm5sZWZ0LA0KKwkJCQkJCQkJICAgSW5kZXhUdXBsZSAqcmlnaHRpdGVt cywgaW50ICpucmlnaHQpOw0KKw0KIC8qDQogICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGlu IG5idHZhbGlkYXRlLmMNCiAgKi8NCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0 eGxvZy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHhsb2cuaA0KaW5kZXggM2E3OGVjMjdmZTgu LjI4NWVhYzZmMWFhIDEwMDY0NA0KLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHhsb2cuaA0K KysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHhsb2cuaA0KQEAgLTE1NiwyNSArMTU2LDU5IEBA IHR5cGVkZWYgc3RydWN0IHhsX2J0cmVlX3NwbGl0DQogCU9mZnNldE51bWJlciBmaXJzdHJpZ2h0 b2ZmOyAvKiBmaXJzdCBvcmlncGFnZSBpdGVtIG9uIHJpZ2h0cGFnZSAqLw0KIAlPZmZzZXROdW1i ZXIgbmV3aXRlbW9mZjsJLyogbmV3IGl0ZW0ncyBvZmZzZXQgKi8NCiAJdWludDE2CQlwb3N0aW5n b2ZmOwkJLyogb2Zmc2V0IGluc2lkZSBvcmlnIHBvc3RpbmcgdHVwbGUgKi8NCisJdWludDE2CQlm bGFnczsJCQkvKiBYTEhfU1BMSVRfKiBiZWxvdyAqLw0KKwl1aW50OAkJbGVmdHByZWZpeGxlbjsJ LyogbGVhZjogbGVmdCBoYWxmJ3MgcHJlZml4IGxlbmd0aCAoMCBub25lKSAqLw0KKwl1aW50OAkJ cmlnaHRwcmVmaXhsZW47IC8qIGxlYWY6IHJpZ2h0IGhhbGYncyBwcmVmaXggbGVuZ3RoICgwIG5v bmUpICovDQogfSB4bF9idHJlZV9zcGxpdDsNCiANCi0jZGVmaW5lIFNpemVPZkJ0cmVlU3BsaXQJ KG9mZnNldG9mKHhsX2J0cmVlX3NwbGl0LCBwb3N0aW5nb2ZmKSArIHNpemVvZih1aW50MTYpKQ0K KyNkZWZpbmUgU2l6ZU9mQnRyZWVTcGxpdAkob2Zmc2V0b2YoeGxfYnRyZWVfc3BsaXQsIHJpZ2h0 cHJlZml4bGVuKSArIHNpemVvZih1aW50OCkpDQorDQorLyoNCisgKiB4bF9idHJlZV9zcGxpdCBm bGFnIGJpdHMuDQorICoNCisgKiBBIHByZWZpeC1jb21wcmVzc2VkIGxlYWYgc3BsaXQgbG9ncyBu byBmdWxsLXBhZ2UgaW1hZ2UgaW4gdGhlIGNvbW1vbiBjYXNlOg0KKyAqIHJlZG8gcmVidWlsZHMg ZWFjaCBoYWxmIHRoZSB3YXkgdGhlIHByaW1hcnkgZGlkLiAgVGhlIGxlZnQgaGFsZiBpcw0KKyAq IHJlY29uc3RydWN0ZWQgZnJvbSB0aGUgcHJlLXNwbGl0IG9yaWdpbmFsIHBhZ2UgKGJsb2NrIDAp IHRvZ2V0aGVyIHdpdGggdGhlDQorICogbG9nZ2VkIG5ldyBpdGVtIGFuZCBoaWdoIGtleTsgdGhl IHJpZ2h0IGhhbGYgaXMgcmVjb25zdHJ1Y3RlZCBmcm9tIGl0cyBwbGFpbg0KKyAqIGRhdGEgaXRl bXMsIHdoaWNoIGFyZSBsb2dnZWQgYXMgYmxvY2stMSBkYXRhLiAgRWFjaCBoYWxmJ3MgY2hvc2Vu IHByZWZpeA0KKyAqIGJ5dGVzIGFyZSBsb2dnZWQgdG9vIChibG9jayAwIGZvciB0aGUgbGVmdCBo YWxmLCBibG9jayAxIGZvciB0aGUgcmlnaHQpLCBhbmQNCisgKiBhcHBsaWVkIHdpdGggX2J0X3Nw bGl0X2xlYWZfbGF5b3V0KCk7IHJlZG8gY2Fubm90IHJ1biB0aGUgcHJlZml4LWNob29zaW5nDQor ICogaGV1cmlzdGljIGl0c2VsZiwgc28gdGhlIHByaW1hcnkgbG9ncyB0aGUgcHJlZml4IGl0IGNo b3NlLg0KKyAqIGxlZnRwcmVmaXhsZW4vcmlnaHRwcmVmaXhsZW4gZ2l2ZSB0aGUgbGVuZ3RocyAo MCBtZWFucyB0aGUgaGFsZiBpcyBub3QNCisgKiBwcmVmaXgtY29tcHJlc3NlZCkuICBYTEhfU1BM SVRfTEVBRlBSRUZJWCBtYXJrcyBhIGxlYWYgc3BsaXQgdGhhdCB1c2VzIHRoaXMNCisgKiBwYXRo IGF0IGFsbCAoc28gcmVkbyByZWJ1aWxkcyBjb2RlZCByYXRoZXIgdGhhbiByZXBsYXlpbmcgaXRl bXMpLg0KKyAqLw0KKyNkZWZpbmUgWExIX1NQTElUX0xFQUZQUkVGSVgJMHgwMQkvKiBsZWFmIHNw bGl0LCByZWJ1aWxkIGhhbHZlcyBjb2RlZCAqLw0KKyNkZWZpbmUgWExIX1NQTElUX1JGUEkJCQkw eDA4CS8qIHJpZ2h0IGhhbGYgY2FycmllZCBieSBhIGZ1bGwtcGFnZSBpbWFnZQ0KKwkJCQkJCQkJ CQkgKiAoaXRzIHBsYWluIGl0ZW1zIHdvdWxkIG92ZXJmbG93IHRoZSBXQUwNCisJCQkJCQkJCQkJ ICogcmVjb3JkKTsgcmVkbyByZXN0b3JlcyBpdCBmcm9tIHRoZSBpbWFnZSAqLw0KIA0KIC8qDQog ICogV2hlbiBwYWdlIGlzIGRlZHVwbGljYXRlZCwgY29uc2VjdXRpdmUgZ3JvdXBzIG9mIHR1cGxl cyB3aXRoIGVxdWFsIGtleXMgYXJlDQogICogbWVyZ2VkIHRvZ2V0aGVyIGludG8gcG9zdGluZyBs aXN0IHR1cGxlcy4NCiAgKg0KLSAqIFRoZSBXQUwgcmVjb3JkIHJlcHJlc2VudHMgYSBkZWR1cGxp Y2F0aW9uIHBhc3MgZm9yIGEgbGVhZiBwYWdlLiAgQW4gYXJyYXkNCi0gKiBvZiBCVERlZHVwSW50 ZXJ2YWwgc3RydWN0cyBmb2xsb3dzLg0KKyAqIFRoZSBXQUwgcmVjb3JkIHJlcHJlc2VudHMgYSBk ZWR1cGxpY2F0aW9uIHBhc3MgZm9yIGEgbGVhZiBwYWdlLiAgTm9ybWFsbHkNCisgKiAocHJlZml4 bGVuID09IDApIGFuIGFycmF5IG9mIEJURGVkdXBJbnRlcnZhbCBzdHJ1Y3RzIGZvbGxvd3MgYW5k IHJlZG8NCisgKiByZXBsYXlzIHRoZW0gYWdhaW5zdCB0aGUgb2xkIHBhZ2UuICBXaGVuIHRoZSBw YWdlIGlzIHByZWZpeC1jb21wcmVzc2VkDQorICogKHByZWZpeGxlbiA+IDApIHRoZSBkZWR1cGVk IHJlc3VsdCBpcyBpbnN0ZWFkIGNhcnJpZWQgYXMgdGhlIGNob3NlbiBwcmVmaXgNCisgKiBieXRl cyAocHJlZml4bGVuKSBmb2xsb3dlZCBieSwgd2hlbiBub3QgcmlnaHRtb3N0LCB0aGUgaGlnaCBr ZXksIHRoZW4gdGhlDQorICogZGVkdXBlZCBwbGFpbiBkYXRhIGl0ZW1zIC0tIGVhY2ggTUFYQUxJ R04nZCAtLSBhbmQgcmVkbyBsYXlzIHRoZW0gb3V0IGNvZGVkDQorICogd2l0aCBfYnRfc3BsaXRf bGVhZl9sYXlvdXQoKSwgYXZvaWRpbmcgYSBmdWxsLXBhZ2UgaW1hZ2UuDQogICovDQogdHlwZWRl ZiBzdHJ1Y3QgeGxfYnRyZWVfZGVkdXANCiB7DQogCXVpbnQxNgkJbmludGVydmFsczsNCisJdWlu dDgJCXByZWZpeGxlbjsJCS8qID4wOiBwcmVmaXgtZGVkdXAgcGF5bG9hZCwgc2VlIGFib3ZlICov DQorCXVpbnQ4CQlmbGFnczsJCQkvKiBYTEhfREVEVVBfKiAqLw0KIA0KLQkvKiBERURVUExJQ0FU SU9OIElOVEVSVkFMUyBGT0xMT1cgKi8NCisJLyogREVEVVBMSUNBVElPTiBJTlRFUlZBTFMgb3Ig UFJFRklYIFBBWUxPQUQgRk9MTE9XICovDQogfSB4bF9idHJlZV9kZWR1cDsNCiANCi0jZGVmaW5l IFNpemVPZkJ0cmVlRGVkdXAgCShvZmZzZXRvZih4bF9idHJlZV9kZWR1cCwgbmludGVydmFscykg KyBzaXplb2YodWludDE2KSkNCisjZGVmaW5lIFNpemVPZkJ0cmVlRGVkdXAgCShvZmZzZXRvZih4 bF9idHJlZV9kZWR1cCwgZmxhZ3MpICsgc2l6ZW9mKHVpbnQ4KSkNCisNCisvKiB4bF9idHJlZV9k ZWR1cCBmbGFnIGJpdHMgKi8NCisjZGVmaW5lIFhMSF9ERURVUF9OT1RfUklHSFRNT1NUCTB4MDEJ LyogcHJlZml4IHBheWxvYWQgaW5jbHVkZXMgYSBoaWdoIGtleSAqLw0KKyNkZWZpbmUgWExIX0RF RFVQX1JGUEkJCQkweDAyCS8qIHByZWZpeCBwYWdlIGNhcnJpZWQgYXMgYSBmb3JjZWQgaW1hZ2Ug Ki8NCiANCiAvKg0KICAqIFRoaXMgaXMgd2hhdCB3ZSBuZWVkIHRvIGtub3cgYWJvdXQgcGFnZSBy ZXVzZSB3aXRoaW4gYnRyZWUuICBUaGlzIHJlY29yZA0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvbmJ0cmVlL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy9uYnRyZWUvTWFrZWZpbGUN CmluZGV4IDIwYTFjYTZhOTJiLi5jYTA3NzllOWI1NyAxMDA2NDQNCi0tLSBhL3NyYy90ZXN0L21v ZHVsZXMvbmJ0cmVlL01ha2VmaWxlDQorKysgYi9zcmMvdGVzdC9tb2R1bGVzL25idHJlZS9NYWtl ZmlsZQ0KQEAgLTMsNyArMyw4IEBADQogRVhUUkFfSU5TVEFMTCA9IHNyYy90ZXN0L21vZHVsZXMv aW5qZWN0aW9uX3BvaW50cyBjb250cmliL2FtY2hlY2sNCiANCiBSRUdSRVNTID0gbmJ0cmVlX2hh bGZfZGVhZF9wYWdlcyBcDQotCW5idHJlZV9pbmNvbXBsZXRlX3NwbGl0cw0KKwluYnRyZWVfaW5j b21wbGV0ZV9zcGxpdHMgXA0KKwluYnRyZWVfcHJlZml4X3JmcGkNCiANCiBJU09MQVRJT04gPSBi YWNrd2FyZHMtc2Nhbi1jb25jdXJyZW50LXNwbGl0cyBcDQogCXByZWRpY2F0ZS1lbXB0eS1pbmRl eA0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbmJ0cmVlL2V4cGVjdGVkL25idHJlZV9w cmVmaXhfcmZwaS5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL25idHJlZS9leHBlY3RlZC9uYnRyZWVf cHJlZml4X3JmcGkub3V0DQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAu LjE2MTRhZDAxODZiDQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGVzdC9tb2R1bGVzL25idHJl ZS9leHBlY3RlZC9uYnRyZWVfcHJlZml4X3JmcGkub3V0DQpAQCAtMCwwICsxLDc3IEBADQorLS0N CistLSBUZXN0IHRoZSBmb3JjZWQgZnVsbC1wYWdlLWltYWdlIGZhbGxiYWNrIGZvciBwcmVmaXgt Y29tcHJlc3NlZCBsZWF2ZXMuDQorLS0NCistLSBBIHByZWZpeC1jb21wcmVzc2VkIGxlYWYgY2Fu LCBpbiBwcmluY2lwbGUsIGhvbGQgbW9yZSBsb2dpY2FsIChkZWNvZGVkKQ0KKy0tIGRhdGEgdGhh biBmaXRzIG9uIGEgcGxhaW4gcGFnZS4gIFdoZW4gYSBzcGxpdCdzIHJpZ2h0IGhhbGYgb3IgYQ0K Ky0tIGRlZHVwbGljYXRpb24gcmV3cml0ZSB3b3VsZCBoYXZlIHRvIGxvZyBtb3JlIHRoYW4gb25l IHBhZ2Ugb2YgcGxhaW4NCistLSBpdGVtcywgdGhlIFdBTCByZWNvcmQgaW5zdGVhZCBjYXJyaWVz IHRoZSBjb2RlZCBwYWdlIGFzIGEgZm9yY2VkDQorLS0gZnVsbC1wYWdlIGltYWdlIChYTEhfU1BM SVRfUkZQSSAvIFhMSF9ERURVUF9SRlBJKS4gIFJlYWxpc3RpYyBkYXRhIG5ldmVyDQorLS0gcmVh Y2hlcyB0aGF0IHRocmVzaG9sZCAtLSB0aGUgc3BsaXQtcG9pbnQgYmFsYW5jZSBrZWVwcyBhIGhh bGYgd2VsbCB1bmRlcg0KKy0tIGEgcGFnZSAtLSBzbyB0aGUgb25seSB3YXkgdG8gZXhlcmNpc2Ug dGhlIHBhdGggZGV0ZXJtaW5pc3RpY2FsbHkgaXMgdGhlDQorLS0gbmJ0cmVlLXByZWZpeC1mb3Jj ZS1yZnBpIGluamVjdGlvbiBwb2ludCwgd2hpY2ggZm9yY2VzIHRoZSBmYWxsYmFjayBmb3INCist LSBldmVyeSBwcmVmaXggc3BsaXQgYW5kIGRlZHVwbGljYXRpb24gcmVnYXJkbGVzcyBvZiBzaXpl Lg0KKy0tDQorLS0gVGhpcyB2ZXJpZmllcyB0aGUgcHJpbWFyeSBwcm9kdWNlcyBhIHZhbGlkIGlu ZGV4IG9uIHRoYXQgcGF0aDsgYnl0ZS1mb3ItDQorLS0gYnl0ZSByZWRvIG9mIHRoZSBmb3JjZWQg aW1hZ2UgaXMgY292ZXJlZCBieSB0aGUgcmVjb3Zlcnkvc3RyZWFtaW5nIHRlc3RzDQorLS0gcnVu IHdpdGggd2FsX2NvbnNpc3RlbmN5X2NoZWNraW5nLg0KKy0tDQorc2V0IGNsaWVudF9taW5fbWVz c2FnZXMgVE8gJ3dhcm5pbmcnOw0KK2NyZWF0ZSBleHRlbnNpb24gaWYgbm90IGV4aXN0cyBpbmpl Y3Rpb25fcG9pbnRzOw0KK2NyZWF0ZSBleHRlbnNpb24gaWYgbm90IGV4aXN0cyBhbWNoZWNrOw0K K3Jlc2V0IGNsaWVudF9taW5fbWVzc2FnZXM7DQorLS0gTG9jYWwgdG8gdGhpcyBwcm9jZXNzLCBz byBhIGNvbmN1cnJlbnQgYmFja2VuZCBpcyB1bmFmZmVjdGVkLg0KK1NFTEVDVCBpbmplY3Rpb25f cG9pbnRzX3NldF9sb2NhbCgpOw0KKyBpbmplY3Rpb25fcG9pbnRzX3NldF9sb2NhbCANCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIA0KKygxIHJvdykNCisNCitTRUxFQ1QgaW5qZWN0 aW9uX3BvaW50c19hdHRhY2goJ25idHJlZS1wcmVmaXgtZm9yY2UtcmZwaScsICdub3RpY2UnKTsN CisgaW5qZWN0aW9uX3BvaW50c19hdHRhY2ggDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K KyANCisoMSByb3cpDQorDQorLS0gS2V5cyB3aXRoIGEgbG9uZyBzaGFyZWQgbGVhZGluZyBwcmVm aXggc28gdGhlIGxlYXZlcyBjb21wcmVzcyBhbmQgc3BsaXQuDQorY3JlYXRlIHRhYmxlIG5idHJl ZV9wcmVmaXhfcmZwaSh1IHRleHQgY29sbGF0ZSAiQyIpIHdpdGggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IG9mZik7DQorY3JlYXRlIGluZGV4IG5idHJlZV9wcmVmaXhfcmZwaV91X2lkeCBvbiBuYnRy ZWVfcHJlZml4X3JmcGkgKHUpDQorICB3aXRoIChwcmVmaXhfY29tcHJlc3Npb24gPSBvbik7DQor LS0gRGlzdGluY3Qga2V5czogbWFueSBzcGxpdHMsIGVhY2ggcmlnaHQgaGFsZiBjYXJyaWVkIGFz IGEgZm9yY2VkIGltYWdlLg0KK2luc2VydCBpbnRvIG5idHJlZV9wcmVmaXhfcmZwaQ0KKyAgc2Vs ZWN0ICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvJyB8fCBscGFkKGc6OnRl eHQsIDgsICcwJykNCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMDAwKSBnOw0KKy0tIER1 cGxpY2F0ZS1oZWF2eSBrZXlzOiBydW50aW1lIGRlZHVwbGljYXRpb24sIHJlLWNvZGVkIHBhZ2Ug YXMgYSBmb3JjZWQgaW1hZ2UuDQoraW5zZXJ0IGludG8gbmJ0cmVlX3ByZWZpeF9yZnBpDQorICBz ZWxlY3QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxwYWQoKGcg JSAyMDApOjp0ZXh0LCA4LCAnMCcpDQorICBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCAyMDAwMCkg ZzsNCistLSBUaGUgaW5kZXggbXVzdCBiZSBzdHJ1Y3R1cmFsbHkgdmFsaWQgYW5kIGFncmVlIHdp dGggdGhlIGhlYXAuDQorU0VMRUNUIGJ0X2luZGV4X3BhcmVudF9jaGVjaygnbmJ0cmVlX3ByZWZp eF9yZnBpX3VfaWR4Jzo6cmVnY2xhc3MsIHRydWUsIHRydWUpOw0KKyBidF9pbmRleF9wYXJlbnRf Y2hlY2sgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgDQorKDEgcm93KQ0KKw0KKy0tIEFu IGluZGV4LW9ubHkgc2NhbiBvZiB0aGUga2V5IGNvbHVtbiBtdXN0IGVxdWFsIHRoZSBpbmRlcGVu ZGVudCBvcmFjbGUuDQorc2V0IGVuYWJsZV9zZXFzY2FuID0gb2ZmOw0KK1NFTEVDVCAoU0VMRUNU IG1kNShzdHJpbmdfYWdnKHUsICd8JyBPUkRFUiBCWSB1KSkgRlJPTSBuYnRyZWVfcHJlZml4X3Jm cGkpID0NCisgICAgICAgbWQ1KHN0cmluZ19hZ2coeCwgJ3wnIE9SREVSIEJZIHgpKSBBUyBmb3Jj ZWRfcmZwaV9vaw0KKyAgRlJPTSAoU0VMRUNUICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8v cmVzb3VyY2UvJyB8fCBscGFkKGc6OnRleHQsIDgsICcwJykgQVMgeA0KKyAgICAgICAgICBGUk9N IGdlbmVyYXRlX3NlcmllcygxLCAyMDAwMCkgZw0KKyAgICAgICAgVU5JT04gQUxMDQorICAgICAg ICBTRUxFQ1QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxwYWQo KGcgJSAyMDApOjp0ZXh0LCA4LCAnMCcpDQorICAgICAgICAgIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsIDIwMDAwKSBnKSBvcmFjbGU7DQorIGZvcmNlZF9yZnBpX29rIA0KKy0tLS0tLS0tLS0tLS0t LS0NCisgdA0KKygxIHJvdykNCisNCityZXNldCBlbmFibGVfc2Vxc2NhbjsNCitTRUxFQ1QgaW5q ZWN0aW9uX3BvaW50c19kZXRhY2goJ25idHJlZS1wcmVmaXgtZm9yY2UtcmZwaScpOw0KKyBpbmpl Y3Rpb25fcG9pbnRzX2RldGFjaCANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIA0KKygx IHJvdykNCisNCitkcm9wIHRhYmxlIG5idHJlZV9wcmVmaXhfcmZwaTsNCitkcm9wIGV4dGVuc2lv biBhbWNoZWNrOw0KK2Ryb3AgZXh0ZW5zaW9uIGluamVjdGlvbl9wb2ludHM7DQpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvbW9kdWxlcy9uYnRyZWUvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVz L25idHJlZS9tZXNvbi5idWlsZA0KaW5kZXggYjVkYzAyNjM5MmUuLmQ2YTM0ZTI2NWJlIDEwMDY0 NA0KLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9uYnRyZWUvbWVzb24uYnVpbGQNCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvbmJ0cmVlL21lc29uLmJ1aWxkDQpAQCAtMTIsNiArMTIsNyBAQCB0ZXN0cyAr PSB7DQogICAgICdzcWwnOiBbDQogICAgICAgJ25idHJlZV9oYWxmX2RlYWRfcGFnZXMnLA0KICAg ICAgICduYnRyZWVfaW5jb21wbGV0ZV9zcGxpdHMnLA0KKyAgICAgICduYnRyZWVfcHJlZml4X3Jm cGknLA0KICAgICBdLA0KICAgfSwNCiAgICdpc29sYXRpb24nOiB7DQpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy9uYnRyZWUvc3FsL25idHJlZV9wcmVmaXhfcmZwaS5zcWwgYi9zcmMvdGVz dC9tb2R1bGVzL25idHJlZS9zcWwvbmJ0cmVlX3ByZWZpeF9yZnBpLnNxbA0KbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwLi40NTg5OWU1Nzk2Zg0KLS0tIC9kZXYvbnVsbA0K KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9uYnRyZWUvc3FsL25idHJlZV9wcmVmaXhfcmZwaS5zcWwN CkBAIC0wLDAgKzEsNTkgQEANCistLQ0KKy0tIFRlc3QgdGhlIGZvcmNlZCBmdWxsLXBhZ2UtaW1h Z2UgZmFsbGJhY2sgZm9yIHByZWZpeC1jb21wcmVzc2VkIGxlYXZlcy4NCistLQ0KKy0tIEEgcHJl Zml4LWNvbXByZXNzZWQgbGVhZiBjYW4sIGluIHByaW5jaXBsZSwgaG9sZCBtb3JlIGxvZ2ljYWwg KGRlY29kZWQpDQorLS0gZGF0YSB0aGFuIGZpdHMgb24gYSBwbGFpbiBwYWdlLiAgV2hlbiBhIHNw bGl0J3MgcmlnaHQgaGFsZiBvciBhDQorLS0gZGVkdXBsaWNhdGlvbiByZXdyaXRlIHdvdWxkIGhh dmUgdG8gbG9nIG1vcmUgdGhhbiBvbmUgcGFnZSBvZiBwbGFpbg0KKy0tIGl0ZW1zLCB0aGUgV0FM IHJlY29yZCBpbnN0ZWFkIGNhcnJpZXMgdGhlIGNvZGVkIHBhZ2UgYXMgYSBmb3JjZWQNCistLSBm dWxsLXBhZ2UgaW1hZ2UgKFhMSF9TUExJVF9SRlBJIC8gWExIX0RFRFVQX1JGUEkpLiAgUmVhbGlz dGljIGRhdGEgbmV2ZXINCistLSByZWFjaGVzIHRoYXQgdGhyZXNob2xkIC0tIHRoZSBzcGxpdC1w b2ludCBiYWxhbmNlIGtlZXBzIGEgaGFsZiB3ZWxsIHVuZGVyDQorLS0gYSBwYWdlIC0tIHNvIHRo ZSBvbmx5IHdheSB0byBleGVyY2lzZSB0aGUgcGF0aCBkZXRlcm1pbmlzdGljYWxseSBpcyB0aGUN CistLSBuYnRyZWUtcHJlZml4LWZvcmNlLXJmcGkgaW5qZWN0aW9uIHBvaW50LCB3aGljaCBmb3Jj ZXMgdGhlIGZhbGxiYWNrIGZvcg0KKy0tIGV2ZXJ5IHByZWZpeCBzcGxpdCBhbmQgZGVkdXBsaWNh dGlvbiByZWdhcmRsZXNzIG9mIHNpemUuDQorLS0NCistLSBUaGlzIHZlcmlmaWVzIHRoZSBwcmlt YXJ5IHByb2R1Y2VzIGEgdmFsaWQgaW5kZXggb24gdGhhdCBwYXRoOyBieXRlLWZvci0NCistLSBi eXRlIHJlZG8gb2YgdGhlIGZvcmNlZCBpbWFnZSBpcyBjb3ZlcmVkIGJ5IHRoZSByZWNvdmVyeS9z dHJlYW1pbmcgdGVzdHMNCistLSBydW4gd2l0aCB3YWxfY29uc2lzdGVuY3lfY2hlY2tpbmcuDQor LS0NCitzZXQgY2xpZW50X21pbl9tZXNzYWdlcyBUTyAnd2FybmluZyc7DQorY3JlYXRlIGV4dGVu c2lvbiBpZiBub3QgZXhpc3RzIGluamVjdGlvbl9wb2ludHM7DQorY3JlYXRlIGV4dGVuc2lvbiBp ZiBub3QgZXhpc3RzIGFtY2hlY2s7DQorcmVzZXQgY2xpZW50X21pbl9tZXNzYWdlczsNCisNCist LSBMb2NhbCB0byB0aGlzIHByb2Nlc3MsIHNvIGEgY29uY3VycmVudCBiYWNrZW5kIGlzIHVuYWZm ZWN0ZWQuDQorU0VMRUNUIGluamVjdGlvbl9wb2ludHNfc2V0X2xvY2FsKCk7DQorU0VMRUNUIGlu amVjdGlvbl9wb2ludHNfYXR0YWNoKCduYnRyZWUtcHJlZml4LWZvcmNlLXJmcGknLCAnbm90aWNl Jyk7DQorDQorLS0gS2V5cyB3aXRoIGEgbG9uZyBzaGFyZWQgbGVhZGluZyBwcmVmaXggc28gdGhl IGxlYXZlcyBjb21wcmVzcyBhbmQgc3BsaXQuDQorY3JlYXRlIHRhYmxlIG5idHJlZV9wcmVmaXhf cmZwaSh1IHRleHQgY29sbGF0ZSAiQyIpIHdpdGggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZik7 DQorY3JlYXRlIGluZGV4IG5idHJlZV9wcmVmaXhfcmZwaV91X2lkeCBvbiBuYnRyZWVfcHJlZml4 X3JmcGkgKHUpDQorICB3aXRoIChwcmVmaXhfY29tcHJlc3Npb24gPSBvbik7DQorDQorLS0gRGlz dGluY3Qga2V5czogbWFueSBzcGxpdHMsIGVhY2ggcmlnaHQgaGFsZiBjYXJyaWVkIGFzIGEgZm9y Y2VkIGltYWdlLg0KK2luc2VydCBpbnRvIG5idHJlZV9wcmVmaXhfcmZwaQ0KKyAgc2VsZWN0ICdo dHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvJyB8fCBscGFkKGc6OnRleHQsIDgs ICcwJykNCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMDAwKSBnOw0KKw0KKy0tIER1cGxp Y2F0ZS1oZWF2eSBrZXlzOiBydW50aW1lIGRlZHVwbGljYXRpb24sIHJlLWNvZGVkIHBhZ2UgYXMg YSBmb3JjZWQgaW1hZ2UuDQoraW5zZXJ0IGludG8gbmJ0cmVlX3ByZWZpeF9yZnBpDQorICBzZWxl Y3QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxwYWQoKGcgJSAy MDApOjp0ZXh0LCA4LCAnMCcpDQorICBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCAyMDAwMCkgZzsN CisNCistLSBUaGUgaW5kZXggbXVzdCBiZSBzdHJ1Y3R1cmFsbHkgdmFsaWQgYW5kIGFncmVlIHdp dGggdGhlIGhlYXAuDQorU0VMRUNUIGJ0X2luZGV4X3BhcmVudF9jaGVjaygnbmJ0cmVlX3ByZWZp eF9yZnBpX3VfaWR4Jzo6cmVnY2xhc3MsIHRydWUsIHRydWUpOw0KKw0KKy0tIEFuIGluZGV4LW9u bHkgc2NhbiBvZiB0aGUga2V5IGNvbHVtbiBtdXN0IGVxdWFsIHRoZSBpbmRlcGVuZGVudCBvcmFj bGUuDQorc2V0IGVuYWJsZV9zZXFzY2FuID0gb2ZmOw0KK1NFTEVDVCAoU0VMRUNUIG1kNShzdHJp bmdfYWdnKHUsICd8JyBPUkRFUiBCWSB1KSkgRlJPTSBuYnRyZWVfcHJlZml4X3JmcGkpID0NCisg ICAgICAgbWQ1KHN0cmluZ19hZ2coeCwgJ3wnIE9SREVSIEJZIHgpKSBBUyBmb3JjZWRfcmZwaV9v aw0KKyAgRlJPTSAoU0VMRUNUICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2Uv JyB8fCBscGFkKGc6OnRleHQsIDgsICcwJykgQVMgeA0KKyAgICAgICAgICBGUk9NIGdlbmVyYXRl X3NlcmllcygxLCAyMDAwMCkgZw0KKyAgICAgICAgVU5JT04gQUxMDQorICAgICAgICBTRUxFQ1Qg J2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxwYWQoKGcgJSAyMDAp Ojp0ZXh0LCA4LCAnMCcpDQorICAgICAgICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMDAw KSBnKSBvcmFjbGU7DQorcmVzZXQgZW5hYmxlX3NlcXNjYW47DQorDQorU0VMRUNUIGluamVjdGlv bl9wb2ludHNfZGV0YWNoKCduYnRyZWUtcHJlZml4LWZvcmNlLXJmcGknKTsNCitkcm9wIHRhYmxl IG5idHJlZV9wcmVmaXhfcmZwaTsNCitkcm9wIGV4dGVuc2lvbiBhbWNoZWNrOw0KK2Ryb3AgZXh0 ZW5zaW9uIGluamVjdGlvbl9wb2ludHM7DQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9idHJlZV9pbmRleC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2J0cmVl X2luZGV4Lm91dA0KaW5kZXggN2M1M2Q1OTg2NDkuLmMxZGFlNGI1NWFkIDEwMDY0NA0KLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9idHJlZV9pbmRleC5vdXQNCisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvYnRyZWVfaW5kZXgub3V0DQpAQCAtODkxLDMgKzg5MSwyNTkgQEAg QUxURVIgSU5ERVggYnRyZWVfcGFydF9pZHggQUxURVIgQ09MVU1OIGlkIFNFVCAobl9kaXN0aW5j dD0xMDApOw0KIEVSUk9SOiAgQUxURVIgYWN0aW9uIEFMVEVSIENPTFVNTiAuLi4gU0VUIGNhbm5v dCBiZSBwZXJmb3JtZWQgb24gcmVsYXRpb24gImJ0cmVlX3BhcnRfaWR4Ig0KIERFVEFJTDogIFRo aXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHBhcnRpdGlvbmVkIGluZGV4ZXMuDQog RFJPUCBUQUJMRSBidHJlZV9wYXJ0Ow0KKy0tDQorLS0gTGVhZiBrZXkgcHJlZml4IGNvbXByZXNz aW9uIChwcmVmaXhfY29tcHJlc3Npb24gcmVsb3B0aW9uKS4NCistLQ0KKy0tIENvcnJlY3RuZXNz IGlzIGNoZWNrZWQgYWdhaW5zdCBhbiBpbmRlcGVuZGVudCBvcmFjbGU6IGEgZm9yY2VkIGluZGV4 IHNjYW4NCistLSBvdmVyIGEgcHJlZml4LWNvbXByZXNzZWQgaW5kZXggbXVzdCByZXR1cm4gZXhh Y3RseSB0aGUgcm93cyBhIHNlcXVlbnRpYWwNCistLSBzY2FuIG9mIHRoZSBzYW1lIGRhdGEgcmV0 dXJucywgYWNyb3NzIGJ1aWxkLCByZXRhaWwgaW5zZXJ0L3NwbGl0LCBkZWxldGUNCistLSBhbmQg VkFDVVVNLCBmb3IgZXF1YWxpdHksIHJhbmdlLCBiYWNrd2FyZCwgaW5kZXgtb25seSBhbmQgTlVM TCBxdWVyaWVzLg0KKy0tIFRoZSBrZXkgY29sdW1uIHVzZXMgdGhlIEMgY29sbGF0aW9uIHNvIHRo ZSByZWNvcmRlZCBvdXRwdXQgaXMgZGV0ZXJtaW5pc3RpYw0KKy0tIGFjcm9zcyBwbGF0Zm9ybXMu ICBUaGUgcGFnZSBmb3JtYXQgaXMgZXhlcmNpc2VkIGJ5IGtleXMgdGhhdCBzaGFyZSBhIGxvbmcN CistLSBwcmVmaXggKFVSTC1saWtlKSwgYnkga2V5cyBzaGFyaW5nIGV4YWN0bHkgMTI1LzEyNi8x MjcgYnl0ZXMgKHRoZSBib3VuZGFyeQ0KKy0tIHdoZXJlIHRoZSBvbmUtYnl0ZSBzaGFyZWQgY291 bnQgc2F0dXJhdGVzOiBCVFJFRV9QUkVGSVhfTUFYIGlzIDEyNiwNCistLSBCVFJFRV9QUkVGSVhf UkFXIGlzIDEyNyksIGJ5IGtleXMgdGhhdCBzaGFyZSBub3RoaW5nLCBhbmQgYnkgYSBOVUxMIGtl eS4NCistLQ0KK0NSRUFURSBUQUJMRSBidHJlZV9wcmVmaXggKHUgdGV4dCBDT0xMQVRFICJDIik7 DQorLS0gQnVpbGQtcGF0aCBwYWdlcyAoQ1JFQVRFIElOREVYIHdyaXRlcyB3aG9sZSBsZWF2ZXMp LiAgQSBzaGFyZWQgNDAtYnl0ZQ0KKy0tIHByZWZpeCwgcGx1cyBleHBsaWNpdCByb3dzIGF0IHRo ZSAxMjUvMTI2LzEyNyBzaGFyZWQtYnl0ZSBib3VuZGFyeS4NCitJTlNFUlQgSU5UTyBidHJlZV9w cmVmaXgNCisgIFNFTEVDVCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLycg fHwgbHBhZCgoZyAlIDIwMDAwKTo6dGV4dCwgOCwgJzAnKQ0KKyAgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwgMjAwMDApIGc7DQorSU5TRVJUIElOVE8gYnRyZWVfcHJlZml4DQorICBTRUxFQ1QgcmVw ZWF0KCdhJywgNDApIHx8IHJlcGVhdCgnYicsIG4pIEZST00gZ2VuZXJhdGVfc2VyaWVzKDg1LCA5 MCkgbjsNCitJTlNFUlQgSU5UTyBidHJlZV9wcmVmaXggVkFMVUVTDQorICAocmVwZWF0KCdhJywg MTI1KSksIChyZXBlYXQoJ2EnLCAxMjYpKSwgKHJlcGVhdCgnYScsIDEyNykpLCAocmVwZWF0KCdh JywgMzAwKSksDQorICAoJ3p6ei1uby1zaGFyZWQtcHJlZml4JyksIChOVUxMKTsNCitDUkVBVEUg SU5ERVggYnRyZWVfcHJlZml4X29uIE9OIGJ0cmVlX3ByZWZpeCAodSkgV0lUSCAocHJlZml4X2Nv bXByZXNzaW9uID0gb24pOw0KKy0tIENvbmZpcm0gdGhlIGluZGV4IHJlYWxseSBpcyB1c2VkIChh bmQgaXMgcHJlZml4LWNvbXByZXNzZWQpLCBzbyB0aGUgcXVlcmllcw0KKy0tIGJlbG93IGV4ZXJj aXNlIHRoZSBjb2RlZCBwYWdlIGZvcm1hdCByYXRoZXIgdGhhbiBzaWxlbnRseSBmYWxsaW5nIGJh Y2suDQorU0VUIGVuYWJsZV9zZXFzY2FuID0gb2ZmOw0KK1NFVCBlbmFibGVfYml0bWFwc2NhbiA9 IG9mZjsNCitFWFBMQUlOIChjb3N0cyBvZmYpDQorICBTRUxFQ1QgdSBGUk9NIGJ0cmVlX3ByZWZp eCBXSEVSRSB1ID0gJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8wMDAxMjM0 NSc7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIEluZGV4IE9u bHkgU2NhbiB1c2luZyBidHJlZV9wcmVmaXhfb24gb24gYnRyZWVfcHJlZml4DQorICAgSW5kZXgg Q29uZDogKHUgPSAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLzAwMDEyMzQ1 Jzo6dGV4dCkNCisoMiByb3dzKQ0KKw0KKy0tIEVxdWFsaXR5LCByYW5nZSBhbmQgYmFja3dhcmQg c2NhbnMgZm9yY2VkIHRocm91Z2ggdGhlIHByZWZpeCBpbmRleC4gIFRoZWlyDQorLS0gcmVzdWx0 cyBhcmUgcmVjb3JkZWQgaW4gdGhlIGV4cGVjdGVkIG91dHB1dCwgd2hpY2ggaXMgaXRzZWxmIHRo ZSBvcmFjbGU6IGENCistLSBkZWNvZGUgcmVncmVzc2lvbiBjaGFuZ2VzIHRoZXNlIHJvd3MuICAo VGhlIGluZGV4LW9ubHkgZGlnZXN0IGJlbG93IGFkZHMgYW4NCistLSBvcmFjbGUgdGhhdCBkb2Vz IG5vdCByZWFkIHRoZSBpbmRleCBhdCBhbGwuKQ0KK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0cmVl X3ByZWZpeA0KKyAgV0hFUkUgdSA9ICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3Vy Y2UvMDAwMTIzNDUnOw0KKyBjb3VudCANCistLS0tLS0tDQorICAgICAxDQorKDEgcm93KQ0KKw0K K1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0cmVlX3ByZWZpeA0KKyAgV0hFUkUgdSBCRVRXRUVOICdo dHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvMDAwMDAxMDAnDQorICAgICAgICAg ICAgIEFORCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLzAwMDAwOTAwJzsN CisgY291bnQgDQorLS0tLS0tLQ0KKyAgIDgwMQ0KKygxIHJvdykNCisNCitTRUxFQ1QgdSBGUk9N IGJ0cmVlX3ByZWZpeA0KKyAgV0hFUkUgdSA+ICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8v cmVzb3VyY2UvMDAwMTk5OTYnIE9SREVSIEJZIHUgREVTQzsNCisgICAgICAgICAgICAgICAgICAg ICAgIHUgICAgICAgICAgICAgICAgICAgICAgIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIHp6ei1uby1zaGFyZWQtcHJlZml4DQorIGh0dHBzOi8v ZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8wMDAxOTk5OQ0KKyBodHRwczovL2V4YW1wbGUu Y29tL3BhdGgvdG8vcmVzb3VyY2UvMDAwMTk5OTgNCisgaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRo L3RvL3Jlc291cmNlLzAwMDE5OTk3DQorKDQgcm93cykNCisNCistLSBCb3VuZGFyeSBhbmQgb3Zl cnNpemVkIGtleXMgcm91bmQtdHJpcCB0byB0aGVpciBleGFjdCBzdG9yZWQgdmFsdWVzLg0KK1NF TEVDVCB1IEZST00gYnRyZWVfcHJlZml4IFdIRVJFIHUgTElLRSAnYWFhYSUnIE9SREVSIEJZIHU7 DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyBhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQ0K KyBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWENCisgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQ0KKyBhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWENCisgYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmINCisgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiDQorIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmINCisgYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmINCisgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiDQorIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmINCisoMTAgcm93cykNCisN CitTRUxFQ1QgY291bnQoKikgRlJPTSBidHJlZV9wcmVmaXggV0hFUkUgdSA9IHJlcGVhdCgnYScs IDMwMCk7DQorIGNvdW50IA0KKy0tLS0tLS0NCisgICAgIDENCisoMSByb3cpDQorDQorU0VMRUNU IGNvdW50KCopIEZST00gYnRyZWVfcHJlZml4IFdIRVJFIHUgSVMgTlVMTDsNCisgY291bnQgDQor LS0tLS0tLQ0KKyAgICAgMQ0KKygxIHJvdykNCisNCistLSBJbmRleC1vbmx5IHNjYW4gb3ZlciB0 aGUgcHJlZml4IGluZGV4LCBjb21wYXJlZCB0byB0aGUgbGl0ZXJhbCB2YWx1ZXMgdGhhdA0KKy0t IHdlcmUgaW5zZXJ0ZWQgKGFuIG9yYWNsZSB0aGF0IGRvZXMgbm90IGl0c2VsZiByZWFkIHRoZSBp bmRleCkuDQorU0VMRUNUIChTRUxFQ1QgbWQ1KHN0cmluZ19hZ2codSwgJ3wnIE9SREVSIEJZIHUp KQ0KKyAgICAgICAgICBGUk9NIGJ0cmVlX3ByZWZpeCBXSEVSRSB1IElTIE5PVCBOVUxMKSA9DQor ICAgICAgIG1kNShzdHJpbmdfYWdnKHgsICd8JyBPUkRFUiBCWSB4KSkgQVMgaW9zX29rDQorICBG Uk9NICgNCisgICAgU0VMRUNUICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2Uv JyB8fCBscGFkKChnICUgMjAwMDApOjp0ZXh0LCA4LCAnMCcpIEFTIHgNCisgICAgICBGUk9NIGdl bmVyYXRlX3NlcmllcygxLCAyMDAwMCkgZw0KKyAgICBVTklPTiBBTEwgU0VMRUNUIHJlcGVhdCgn YScsIDQwKSB8fCByZXBlYXQoJ2InLCBuKSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg4NSwgOTApIG4N CisgICAgVU5JT04gQUxMIFNFTEVDVCB2IEZST00gKFZBTFVFUyAocmVwZWF0KCdhJywxMjUpKSwo cmVwZWF0KCdhJywxMjYpKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo cmVwZWF0KCdhJywxMjcpKSwocmVwZWF0KCdhJywzMDApKSwNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoJ3p6ei1uby1zaGFyZWQtcHJlZml4JykpIHQodikNCisgICkgb3Jh Y2xlOw0KKyBpb3Nfb2sgDQorLS0tLS0tLS0NCisgdA0KKygxIHJvdykNCisNCistLSBSZXRhaWwg aW5zZXJ0cyBjYXVzZSBzcGxpdHMgdGhhdCBmYXVsdCBwYWdlcyBmb3J3YXJkIGludG8gdGhlIGNv ZGVkIGZvcm1hdDsNCistLSBhbiBpbmRleC1vbmx5IHNjYW4gbXVzdCBzdGlsbCBhZ3JlZSB3aXRo IHRoZSBpbmRlcGVuZGVudCBvcmFjbGUgYWZ0ZXJ3YXJkcy4NCitJTlNFUlQgSU5UTyBidHJlZV9w cmVmaXgNCisgIFNFTEVDVCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9vdGhlci8nIHx8IGxwYWQoZzo6 dGV4dCwgOCwgJzAnKQ0KKyAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDApIGc7DQorLS0g RGVsZXRlIHRoZW4gVkFDVVVNLCB0aGVuIHJlLWluc2VydCBpbnRvIGZyZWVkIHNwYWNlLiAgVGhl IGRlbGV0ZSB0YXJnZXRzDQorLS0gb25seSBwYXJ0IG9mIHRoZSBVUkwgbmFtZXNwYWNlIHNvIHRo ZSBib3VuZGFyeSBrZXlzIChhYWFhLi4uL3p6ei4uLikgc3Vydml2ZQ0KKy0tIGZvciB0aGUgY2hl Y2tzIGJlbG93Lg0KK0RFTEVURSBGUk9NIGJ0cmVlX3ByZWZpeA0KKyAgV0hFUkUgdSA+PSAnaHR0 cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLzAwMDAwMDAwJw0KKyAgICBBTkQgdSA8 ICAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLzAwMDA1MDAwJzsNCitWQUNV VU0gYnRyZWVfcHJlZml4Ow0KK0lOU0VSVCBJTlRPIGJ0cmVlX3ByZWZpeA0KKyAgU0VMRUNUICdo dHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvJyB8fCBscGFkKChnICUgNTAwMCk6 OnRleHQsIDgsICcwJykNCisgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApIGc7DQorLS0g QWZ0ZXIgdGhlIGNodXJuLCBhbiBpbmRleC1vbmx5IHNjYW4gb2YgdGhlIGxpdmUga2V5cyBtdXN0 IGVxdWFsIHRoZSBzYW1lDQorLS0ga2V5cyBmZXRjaGVkIGZyb20gdGhlIGhlYXAgYnkgYSBzZXF1 ZW50aWFsIHNjYW4gKGFuIGluZGVwZW5kZW50IHBhdGgpOiBpZg0KKy0tIGRlY29kaW5nIHRoZSBj b2RlZCBsZWF2ZXMgd2VyZSB3cm9uZywgdGhlIHR3byBkaWdlc3RzIHdvdWxkIGRpZmZlci4NCitT RVQgZW5hYmxlX2luZGV4b25seXNjYW4gPSBvbjsNCitTRUxFQ1QgbWQ1KHN0cmluZ19hZ2codSwg J3wnIE9SREVSIEJZIHUpKSBBUyBpb3NfZGlnZXN0DQorICBGUk9NIGJ0cmVlX3ByZWZpeCBXSEVS RSB1IElTIE5PVCBOVUxMIFxnc2V0DQorU0VUIGVuYWJsZV9pbmRleHNjYW4gPSBvZmY7DQorU0VU IGVuYWJsZV9pbmRleG9ubHlzY2FuID0gb2ZmOw0KK1NFVCBlbmFibGVfc2Vxc2NhbiA9IG9uOw0K K1NFTEVDVCA6J2lvc19kaWdlc3QnID0NCisgICAgICAgKFNFTEVDVCBtZDUoc3RyaW5nX2FnZyh1 LCAnfCcgT1JERVIgQlkgdSkpIEZST00gYnRyZWVfcHJlZml4IFdIRVJFIHUgSVMgTk9UIE5VTEwp DQorICAgICAgIEFTIHBvc3RfY2h1cm5fb2s7DQorIHBvc3RfY2h1cm5fb2sgDQorLS0tLS0tLS0t LS0tLS0tDQorIHQNCisoMSByb3cpDQorDQorU0VUIGVuYWJsZV9pbmRleHNjYW4gPSBvbjsNCitS RVNFVCBlbmFibGVfc2Vxc2NhbjsNCitSRVNFVCBlbmFibGVfYml0bWFwc2NhbjsNCistLSBUaGUg cmVsb3B0aW9uIHJvdW5kLXRyaXBzIGFuZCBjYW4gYmUgdG9nZ2xlZCB3aXRob3V0IGEgcmV3cml0 ZS4NCitTRUxFQ1QgcmVsb3B0aW9ucyBGUk9NIHBnX2NsYXNzIFdIRVJFIHJlbG5hbWUgPSAnYnRy ZWVfcHJlZml4X29uJzsNCisgICAgICAgcmVsb3B0aW9ucyAgICAgICAgDQorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KKyB7cHJlZml4X2NvbXByZXNzaW9uPW9ufQ0KKygxIHJvdykNCisNCitB TFRFUiBJTkRFWCBidHJlZV9wcmVmaXhfb24gU0VUIChwcmVmaXhfY29tcHJlc3Npb24gPSBvZmYp Ow0KK1NFTEVDVCByZWxvcHRpb25zIEZST00gcGdfY2xhc3MgV0hFUkUgcmVsbmFtZSA9ICdidHJl ZV9wcmVmaXhfb24nOw0KKyAgICAgICAgcmVsb3B0aW9ucyAgICAgICAgDQorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCisge3ByZWZpeF9jb21wcmVzc2lvbj1vZmZ9DQorKDEgcm93KQ0KKw0K Ky0tIFJlYWRpbmcgYmFjayB3aXRoIHRoZSBvcHRpb24gb2ZmIHN0aWxsIHJldHVybnMgY29ycmVj dCByb3dzOiBleGlzdGluZw0KKy0tIEJUUF9QUkVGSVggbGVhdmVzIGtlZXAgdGhlaXIgY29kZWQg Zm9ybSBhbmQgZGVjb2RlIG9uIHRoZSBwYWdlIGZsYWcuDQorU0VUIGVuYWJsZV9zZXFzY2FuID0g b2ZmOw0KK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0cmVlX3ByZWZpeCBXSEVSRSB1ID0gcmVwZWF0 KCdhJywgMTI2KTsNCisgY291bnQgDQorLS0tLS0tLQ0KKyAgICAgMQ0KKygxIHJvdykNCisNCitS RVNFVCBlbmFibGVfc2Vxc2NhbjsNCistLSBBIG5vbi12YXJsZW5hIGZpcnN0IGNvbHVtbiBpcyBs ZWdhbCBhbmQgc2lsZW50bHkgc3RvcmVzIG5vIHByZWZpeDsgdmVyaWZ5IGENCistLSBzY2FuIG92 ZXIgc3VjaCBhbiBpbmRleCByZXR1cm5zIGNvcnJlY3Qgcm93cy4NCitDUkVBVEUgSU5ERVggYnRy ZWVfcHJlZml4X2ludCBPTiBidHJlZV9wcmVmaXggKChsZW5ndGgodSkpKSBXSVRIIChwcmVmaXhf Y29tcHJlc3Npb24gPSBvbik7DQorU0VUIGVuYWJsZV9zZXFzY2FuID0gb2ZmOw0KK1NFTEVDVCBs ZW5ndGgodSkgRlJPTSBidHJlZV9wcmVmaXggV0hFUkUgbGVuZ3RoKHUpID0gMzAwOw0KKyBsZW5n dGggDQorLS0tLS0tLS0NCisgICAgMzAwDQorKDEgcm93KQ0KKw0KK1JFU0VUIGVuYWJsZV9zZXFz Y2FuOw0KK0RST1AgVEFCTEUgYnRyZWVfcHJlZml4Ow0KKy0tDQorLS0gQm90dG9tLXVwIGluZGV4 IGRlbGV0aW9uIG9uIHByZWZpeC1jb21wcmVzc2VkIHBhZ2VzLg0KKy0tDQorLS0gQW4gVVBEQVRF IHRoYXQgZG9lcyBub3QgY2hhbmdlIHRoZSBpbmRleGVkIGNvbHVtbiBtYXJrcyB0aGUgcmVzdWx0 aW5nIGluZGV4DQorLS0gaW5zZXJ0ICJsb2dpY2FsbHkgdW5jaGFuZ2VkIiwgd2hpY2ggbGV0cyBu YnRyZWUgcnVuIGEgYm90dG9tLXVwIGRlbGV0aW9uDQorLS0gcGFzcyBiZWZvcmUgc3BsaXR0aW5n IGEgbGVhZi4gIFRoYXQgcGFzcyByZWFkcyBhbmQgKG9ubHkpIHJlbW92ZXMgaXRlbXM7IGl0DQor LS0gbXVzdCB3b3JrIG9uIGNvZGVkIHBhZ2VzIHRvby4gIEhlcmUgd2UgZXhlcmNpc2UgdGhlIHBh dGggYW5kIHZlcmlmeSB0aGUNCistLSBpbmRleCBzdGF5cyBjb3JyZWN0OyBjb21taXR0ZWQgdXBk YXRlIGJhdGNoZXMgYmV0d2VlbiBWQUNVVU1zIGxlYXZlDQorLS0gcmVtb3ZhYmxlIGR1cGxpY2F0 ZXMgZm9yIHRoZSBwYXNzIHRvIGZpbmQuICAoQmxvYXQgaXMgcXVhbnRpZmllZCBpbiB0aGUNCist LSBwZXJmb3JtYW5jZSBiZW5jaG1hcmssIG5vdCBoZXJlLCBzaW5jZSByZW1vdmFiaWxpdHkgaXMg dGltaW5nLWRlcGVuZGVudC4pDQorLS0NCitDUkVBVEUgVEFCTEUgYnRyZWVfcHJlZml4X2J1IChp ZCBpbnQgUFJJTUFSWSBLRVksIHUgdGV4dCBDT0xMQVRFICJDIiwgZmlsbGVyIHRleHQpOw0KK0lO U0VSVCBJTlRPIGJ0cmVlX3ByZWZpeF9idQ0KKyAgU0VMRUNUIGcsICdodHRwczovL2V4YW1wbGUu Y29tL3BhdGgvJyB8fCBscGFkKChnICUgNTAwKTo6dGV4dCwgOCwgJzAnKSwgcmVwZWF0KCd4Jywg NDApDQorICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA0MDAwKSBnOw0KK0NSRUFURSBJTkRFWCBi dHJlZV9wcmVmaXhfYnVfdSBPTiBidHJlZV9wcmVmaXhfYnUgKHUpIFdJVEggKHByZWZpeF9jb21w cmVzc2lvbiA9IG9uKTsNCistLSBTZXZlcmFsIGNvbW1pdHRlZCBub24ta2V5IFVQREFURSBiYXRj aGVzICh2ZXJzaW9uIGNodXJuIG9uIHRoZSBwcmVmaXggaW5kZXgpLg0KK1VQREFURSBidHJlZV9w cmVmaXhfYnUgU0VUIGZpbGxlciA9IHJlcGVhdCgneScsIDQwKTsNCitVUERBVEUgYnRyZWVfcHJl Zml4X2J1IFNFVCBmaWxsZXIgPSByZXBlYXQoJ3onLCA0MCk7DQorVVBEQVRFIGJ0cmVlX3ByZWZp eF9idSBTRVQgZmlsbGVyID0gcmVwZWF0KCd3JywgNDApOw0KKy0tIENvcnJlY3RuZXNzIGFmdGVy IHRoZSBjaHVybjogYW4gaW5kZXgtb25seSBzY2FuIG9mIHRoZSBrZXkgY29sdW1uIG11c3QgZXF1 YWwNCistLSB0aGUgaW5kZXBlbmRlbnQgb3JhY2xlICh0aGUgbGl0ZXJhbCBrZXlzKSwgcHJvdmlu ZyBubyBkZWNvZGUvZGVsZXRpb24gZGFtYWdlLg0KK1NFVCBlbmFibGVfc2Vxc2NhbiA9IG9mZjsN CitTRUxFQ1QgKFNFTEVDVCBtZDUoc3RyaW5nX2FnZyh1LCAnfCcgT1JERVIgQlkgdSkpIEZST00g YnRyZWVfcHJlZml4X2J1KSA9DQorICAgICAgIG1kNShzdHJpbmdfYWdnKHgsICd8JyBPUkRFUiBC WSB4KSkgQVMgYm90dG9tdXBfb2sNCisgIEZST00gKFNFTEVDVCAnaHR0cHM6Ly9leGFtcGxlLmNv bS9wYXRoLycgfHwgbHBhZCgoZyAlIDUwMCk6OnRleHQsIDgsICcwJykgQVMgeA0KKyAgICAgICAg ICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA0MDAwKSBnKSBvcmFjbGU7DQorIGJvdHRvbXVwX29r IA0KKy0tLS0tLS0tLS0tLS0NCisgdA0KKygxIHJvdykNCisNCitTRUxFQ1QgY291bnQoKikgRlJP TSBidHJlZV9wcmVmaXhfYnUNCisgIFdIRVJFIHUgPSAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRo LycgfHwgbHBhZCgnNycsIDgsICcwJyk7DQorIGNvdW50IA0KKy0tLS0tLS0NCisgICAgIDgNCiso MSByb3cpDQorDQorUkVTRVQgZW5hYmxlX3NlcXNjYW47DQorRFJPUCBUQUJMRSBidHJlZV9wcmVm aXhfYnU7DQorLS0NCistLSBSdW50aW1lIGRlZHVwbGljYXRpb24gb24gYSBwcmVmaXgtY29tcHJl c3NlZCBwYWdlLiAgRHVwbGljYXRlIGtleXMgaW5zZXJ0ZWQNCistLSBvbmUgYXQgYSB0aW1lIGlu dG8gYW4gZXhpc3RpbmcgcHJlZml4IGluZGV4IGZpbGwgYSBsZWFmOyBiZWZvcmUgaXQgc3BsaXRz LA0KKy0tIHRoZSBkZWR1cGxpY2F0aW9uIHBhc3MgZGVjb2RlcyB0aGUgY29kZWQgaXRlbXMsIG1l cmdlcyB0aGUgZHVwbGljYXRlIFRJRHMNCistLSBpbnRvIHBvc3RpbmcgbGlzdHMgYW5kIHJlLWNv ZGVzIHRoZSBwYWdlLiAgVGhlIGRlY29kZWQgc2V0IGNhbiBleGNlZWQgb25lDQorLS0gcGFnZSBl dmVuIHdoZW4gdGhlIGNvZGVkIGZvcm0gZml0LCBpbiB3aGljaCBjYXNlIHRoZSBwYXNzIGFib3J0 cyBhbmQgdGhlDQorLS0gcGFnZSBzcGxpdHMgaW5zdGVhZDsgZWl0aGVyIHdheSB0aGUgcmVzdWx0 IG11c3QgYmUgY29ycmVjdC4NCistLQ0KK0NSRUFURSBUQUJMRSBidHJlZV9wcmVmaXhfZGQgKHUg dGV4dCBDT0xMQVRFICJDIik7DQorQ1JFQVRFIElOREVYIGJ0cmVlX3ByZWZpeF9kZF91IE9OIGJ0 cmVlX3ByZWZpeF9kZCAodSkgV0lUSCAocHJlZml4X2NvbXByZXNzaW9uID0gb24pOw0KK0lOU0VS VCBJTlRPIGJ0cmVlX3ByZWZpeF9kZA0KKyAgU0VMRUNUICdodHRwczovL2V4YW1wbGUuY29tL3Bh dGgvdG8vcmVzb3VyY2UvJyB8fCBscGFkKChnICUgMjAwKTo6dGV4dCwgOCwgJzAnKQ0KKyAgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwgNDAwMDApIGc7DQorU0VUIGVuYWJsZV9zZXFzY2FuID0gb2Zm Ow0KK1NFTEVDVCAoU0VMRUNUIG1kNShzdHJpbmdfYWdnKHUsICd8JyBPUkRFUiBCWSB1KSkgRlJP TSBidHJlZV9wcmVmaXhfZGQpID0NCisgICAgICAgbWQ1KHN0cmluZ19hZ2coeCwgJ3wnIE9SREVS IEJZIHgpKSBBUyBydW50aW1lX2RlZHVwX29rDQorICBGUk9NIChTRUxFQ1QgJ2h0dHBzOi8vZXhh bXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxwYWQoKGcgJSAyMDApOjp0ZXh0LCA4LCAn MCcpIEFTIHgNCisgICAgICAgICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNDAwMDApIGcpIG9y YWNsZTsNCisgcnVudGltZV9kZWR1cF9vayANCistLS0tLS0tLS0tLS0tLS0tLS0NCisgdA0KKygx IHJvdykNCisNCitTRUxFQ1QgY291bnQoKikgRlJPTSBidHJlZV9wcmVmaXhfZGQNCisgIFdIRVJF IHUgPSAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLycgfHwgbHBhZCgnNDIn LCA4LCAnMCcpOw0KKyBjb3VudCANCistLS0tLS0tDQorICAgMjAwDQorKDEgcm93KQ0KKw0KK1JF U0VUIGVuYWJsZV9zZXFzY2FuOw0KK0RST1AgVEFCTEUgYnRyZWVfcHJlZml4X2RkOw0KZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2J0cmVlX2luZGV4LnNxbCBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2J0cmVlX2luZGV4LnNxbA0KaW5kZXggNjk5MGQ3ODE4ZGEuLjZjZDA1M2ExNTk2 IDEwMDY0NA0KLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYnRyZWVfaW5kZXguc3FsDQorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9idHJlZV9pbmRleC5zcWwNCkBAIC01MjAsMyArNTIwLDE3 MCBAQCBDUkVBVEUgVEFCTEUgYnRyZWVfcGFydCAoaWQgaW50NCkgUEFSVElUSU9OIEJZIFJBTkdF IChpZCk7DQogQ1JFQVRFIElOREVYIGJ0cmVlX3BhcnRfaWR4IE9OIGJ0cmVlX3BhcnQoaWQpOw0K IEFMVEVSIElOREVYIGJ0cmVlX3BhcnRfaWR4IEFMVEVSIENPTFVNTiBpZCBTRVQgKG5fZGlzdGlu Y3Q9MTAwKTsNCiBEUk9QIFRBQkxFIGJ0cmVlX3BhcnQ7DQorDQorLS0NCistLSBMZWFmIGtleSBw cmVmaXggY29tcHJlc3Npb24gKHByZWZpeF9jb21wcmVzc2lvbiByZWxvcHRpb24pLg0KKy0tDQor LS0gQ29ycmVjdG5lc3MgaXMgY2hlY2tlZCBhZ2FpbnN0IGFuIGluZGVwZW5kZW50IG9yYWNsZTog YSBmb3JjZWQgaW5kZXggc2Nhbg0KKy0tIG92ZXIgYSBwcmVmaXgtY29tcHJlc3NlZCBpbmRleCBt dXN0IHJldHVybiBleGFjdGx5IHRoZSByb3dzIGEgc2VxdWVudGlhbA0KKy0tIHNjYW4gb2YgdGhl IHNhbWUgZGF0YSByZXR1cm5zLCBhY3Jvc3MgYnVpbGQsIHJldGFpbCBpbnNlcnQvc3BsaXQsIGRl bGV0ZQ0KKy0tIGFuZCBWQUNVVU0sIGZvciBlcXVhbGl0eSwgcmFuZ2UsIGJhY2t3YXJkLCBpbmRl eC1vbmx5IGFuZCBOVUxMIHF1ZXJpZXMuDQorLS0gVGhlIGtleSBjb2x1bW4gdXNlcyB0aGUgQyBj b2xsYXRpb24gc28gdGhlIHJlY29yZGVkIG91dHB1dCBpcyBkZXRlcm1pbmlzdGljDQorLS0gYWNy b3NzIHBsYXRmb3Jtcy4gIFRoZSBwYWdlIGZvcm1hdCBpcyBleGVyY2lzZWQgYnkga2V5cyB0aGF0 IHNoYXJlIGEgbG9uZw0KKy0tIHByZWZpeCAoVVJMLWxpa2UpLCBieSBrZXlzIHNoYXJpbmcgZXhh Y3RseSAxMjUvMTI2LzEyNyBieXRlcyAodGhlIGJvdW5kYXJ5DQorLS0gd2hlcmUgdGhlIG9uZS1i eXRlIHNoYXJlZCBjb3VudCBzYXR1cmF0ZXM6IEJUUkVFX1BSRUZJWF9NQVggaXMgMTI2LA0KKy0t IEJUUkVFX1BSRUZJWF9SQVcgaXMgMTI3KSwgYnkga2V5cyB0aGF0IHNoYXJlIG5vdGhpbmcsIGFu ZCBieSBhIE5VTEwga2V5Lg0KKy0tDQorQ1JFQVRFIFRBQkxFIGJ0cmVlX3ByZWZpeCAodSB0ZXh0 IENPTExBVEUgIkMiKTsNCistLSBCdWlsZC1wYXRoIHBhZ2VzIChDUkVBVEUgSU5ERVggd3JpdGVz IHdob2xlIGxlYXZlcykuICBBIHNoYXJlZCA0MC1ieXRlDQorLS0gcHJlZml4LCBwbHVzIGV4cGxp Y2l0IHJvd3MgYXQgdGhlIDEyNS8xMjYvMTI3IHNoYXJlZC1ieXRlIGJvdW5kYXJ5Lg0KK0lOU0VS VCBJTlRPIGJ0cmVlX3ByZWZpeA0KKyAgU0VMRUNUICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgv dG8vcmVzb3VyY2UvJyB8fCBscGFkKChnICUgMjAwMDApOjp0ZXh0LCA4LCAnMCcpDQorICBGUk9N IGdlbmVyYXRlX3NlcmllcygxLCAyMDAwMCkgZzsNCitJTlNFUlQgSU5UTyBidHJlZV9wcmVmaXgN CisgIFNFTEVDVCByZXBlYXQoJ2EnLCA0MCkgfHwgcmVwZWF0KCdiJywgbikgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoODUsIDkwKSBuOw0KK0lOU0VSVCBJTlRPIGJ0cmVlX3ByZWZpeCBWQUxVRVMNCisg IChyZXBlYXQoJ2EnLCAxMjUpKSwgKHJlcGVhdCgnYScsIDEyNikpLCAocmVwZWF0KCdhJywgMTI3 KSksIChyZXBlYXQoJ2EnLCAzMDApKSwNCisgICgnenp6LW5vLXNoYXJlZC1wcmVmaXgnKSwgKE5V TEwpOw0KK0NSRUFURSBJTkRFWCBidHJlZV9wcmVmaXhfb24gT04gYnRyZWVfcHJlZml4ICh1KSBX SVRIIChwcmVmaXhfY29tcHJlc3Npb24gPSBvbik7DQorDQorLS0gQ29uZmlybSB0aGUgaW5kZXgg cmVhbGx5IGlzIHVzZWQgKGFuZCBpcyBwcmVmaXgtY29tcHJlc3NlZCksIHNvIHRoZSBxdWVyaWVz DQorLS0gYmVsb3cgZXhlcmNpc2UgdGhlIGNvZGVkIHBhZ2UgZm9ybWF0IHJhdGhlciB0aGFuIHNp bGVudGx5IGZhbGxpbmcgYmFjay4NCitTRVQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7DQorU0VUIGVu YWJsZV9iaXRtYXBzY2FuID0gb2ZmOw0KK0VYUExBSU4gKGNvc3RzIG9mZikNCisgIFNFTEVDVCB1 IEZST00gYnRyZWVfcHJlZml4IFdIRVJFIHUgPSAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3Rv L3Jlc291cmNlLzAwMDEyMzQ1JzsNCisNCistLSBFcXVhbGl0eSwgcmFuZ2UgYW5kIGJhY2t3YXJk IHNjYW5zIGZvcmNlZCB0aHJvdWdoIHRoZSBwcmVmaXggaW5kZXguICBUaGVpcg0KKy0tIHJlc3Vs dHMgYXJlIHJlY29yZGVkIGluIHRoZSBleHBlY3RlZCBvdXRwdXQsIHdoaWNoIGlzIGl0c2VsZiB0 aGUgb3JhY2xlOiBhDQorLS0gZGVjb2RlIHJlZ3Jlc3Npb24gY2hhbmdlcyB0aGVzZSByb3dzLiAg KFRoZSBpbmRleC1vbmx5IGRpZ2VzdCBiZWxvdyBhZGRzIGFuDQorLS0gb3JhY2xlIHRoYXQgZG9l cyBub3QgcmVhZCB0aGUgaW5kZXggYXQgYWxsLikNCitTRUxFQ1QgY291bnQoKikgRlJPTSBidHJl ZV9wcmVmaXgNCisgIFdIRVJFIHUgPSAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291 cmNlLzAwMDEyMzQ1JzsNCitTRUxFQ1QgY291bnQoKikgRlJPTSBidHJlZV9wcmVmaXgNCisgIFdI RVJFIHUgQkVUV0VFTiAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLzAwMDAw MTAwJw0KKyAgICAgICAgICAgICBBTkQgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNv dXJjZS8wMDAwMDkwMCc7DQorU0VMRUNUIHUgRlJPTSBidHJlZV9wcmVmaXgNCisgIFdIRVJFIHUg PiAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLzAwMDE5OTk2JyBPUkRFUiBC WSB1IERFU0M7DQorLS0gQm91bmRhcnkgYW5kIG92ZXJzaXplZCBrZXlzIHJvdW5kLXRyaXAgdG8g dGhlaXIgZXhhY3Qgc3RvcmVkIHZhbHVlcy4NCitTRUxFQ1QgdSBGUk9NIGJ0cmVlX3ByZWZpeCBX SEVSRSB1IExJS0UgJ2FhYWElJyBPUkRFUiBCWSB1Ow0KK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0 cmVlX3ByZWZpeCBXSEVSRSB1ID0gcmVwZWF0KCdhJywgMzAwKTsNCitTRUxFQ1QgY291bnQoKikg RlJPTSBidHJlZV9wcmVmaXggV0hFUkUgdSBJUyBOVUxMOw0KKw0KKy0tIEluZGV4LW9ubHkgc2Nh biBvdmVyIHRoZSBwcmVmaXggaW5kZXgsIGNvbXBhcmVkIHRvIHRoZSBsaXRlcmFsIHZhbHVlcyB0 aGF0DQorLS0gd2VyZSBpbnNlcnRlZCAoYW4gb3JhY2xlIHRoYXQgZG9lcyBub3QgaXRzZWxmIHJl YWQgdGhlIGluZGV4KS4NCitTRUxFQ1QgKFNFTEVDVCBtZDUoc3RyaW5nX2FnZyh1LCAnfCcgT1JE RVIgQlkgdSkpDQorICAgICAgICAgIEZST00gYnRyZWVfcHJlZml4IFdIRVJFIHUgSVMgTk9UIE5V TEwpID0NCisgICAgICAgbWQ1KHN0cmluZ19hZ2coeCwgJ3wnIE9SREVSIEJZIHgpKSBBUyBpb3Nf b2sNCisgIEZST00gKA0KKyAgICBTRUxFQ1QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9y ZXNvdXJjZS8nIHx8IGxwYWQoKGcgJSAyMDAwMCk6OnRleHQsIDgsICcwJykgQVMgeA0KKyAgICAg IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMDAwKSBnDQorICAgIFVOSU9OIEFMTCBTRUxFQ1Qg cmVwZWF0KCdhJywgNDApIHx8IHJlcGVhdCgnYicsIG4pIEZST00gZ2VuZXJhdGVfc2VyaWVzKDg1 LCA5MCkgbg0KKyAgICBVTklPTiBBTEwgU0VMRUNUIHYgRlJPTSAoVkFMVUVTIChyZXBlYXQoJ2En LDEyNSkpLChyZXBlYXQoJ2EnLDEyNikpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChyZXBlYXQoJ2EnLDEyNykpLChyZXBlYXQoJ2EnLDMwMCkpLA0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgnenp6LW5vLXNoYXJlZC1wcmVmaXgnKSkgdCh2KQ0K KyAgKSBvcmFjbGU7DQorDQorLS0gUmV0YWlsIGluc2VydHMgY2F1c2Ugc3BsaXRzIHRoYXQgZmF1 bHQgcGFnZXMgZm9yd2FyZCBpbnRvIHRoZSBjb2RlZCBmb3JtYXQ7DQorLS0gYW4gaW5kZXgtb25s eSBzY2FuIG11c3Qgc3RpbGwgYWdyZWUgd2l0aCB0aGUgaW5kZXBlbmRlbnQgb3JhY2xlIGFmdGVy d2FyZHMuDQorSU5TRVJUIElOVE8gYnRyZWVfcHJlZml4DQorICBTRUxFQ1QgJ2h0dHBzOi8vZXhh bXBsZS5jb20vb3RoZXIvJyB8fCBscGFkKGc6OnRleHQsIDgsICcwJykNCisgIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDEwMDAwKSBnOw0KKy0tIERlbGV0ZSB0aGVuIFZBQ1VVTSwgdGhlbiByZS1p bnNlcnQgaW50byBmcmVlZCBzcGFjZS4gIFRoZSBkZWxldGUgdGFyZ2V0cw0KKy0tIG9ubHkgcGFy dCBvZiB0aGUgVVJMIG5hbWVzcGFjZSBzbyB0aGUgYm91bmRhcnkga2V5cyAoYWFhYS4uLi96enou Li4pIHN1cnZpdmUNCistLSBmb3IgdGhlIGNoZWNrcyBiZWxvdy4NCitERUxFVEUgRlJPTSBidHJl ZV9wcmVmaXgNCisgIFdIRVJFIHUgPj0gJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNv dXJjZS8wMDAwMDAwMCcNCisgICAgQU5EIHUgPCAgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90 by9yZXNvdXJjZS8wMDAwNTAwMCc7DQorVkFDVVVNIGJ0cmVlX3ByZWZpeDsNCitJTlNFUlQgSU5U TyBidHJlZV9wcmVmaXgNCisgIFNFTEVDVCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jl c291cmNlLycgfHwgbHBhZCgoZyAlIDUwMDApOjp0ZXh0LCA4LCAnMCcpDQorICBGUk9NIGdlbmVy YXRlX3NlcmllcygxLCA1MDAwKSBnOw0KKy0tIEFmdGVyIHRoZSBjaHVybiwgYW4gaW5kZXgtb25s eSBzY2FuIG9mIHRoZSBsaXZlIGtleXMgbXVzdCBlcXVhbCB0aGUgc2FtZQ0KKy0tIGtleXMgZmV0 Y2hlZCBmcm9tIHRoZSBoZWFwIGJ5IGEgc2VxdWVudGlhbCBzY2FuIChhbiBpbmRlcGVuZGVudCBw YXRoKTogaWYNCistLSBkZWNvZGluZyB0aGUgY29kZWQgbGVhdmVzIHdlcmUgd3JvbmcsIHRoZSB0 d28gZGlnZXN0cyB3b3VsZCBkaWZmZXIuDQorU0VUIGVuYWJsZV9pbmRleG9ubHlzY2FuID0gb247 DQorU0VMRUNUIG1kNShzdHJpbmdfYWdnKHUsICd8JyBPUkRFUiBCWSB1KSkgQVMgaW9zX2RpZ2Vz dA0KKyAgRlJPTSBidHJlZV9wcmVmaXggV0hFUkUgdSBJUyBOT1QgTlVMTCBcZ3NldA0KK1NFVCBl bmFibGVfaW5kZXhzY2FuID0gb2ZmOw0KK1NFVCBlbmFibGVfaW5kZXhvbmx5c2NhbiA9IG9mZjsN CitTRVQgZW5hYmxlX3NlcXNjYW4gPSBvbjsNCitTRUxFQ1QgOidpb3NfZGlnZXN0JyA9DQorICAg ICAgIChTRUxFQ1QgbWQ1KHN0cmluZ19hZ2codSwgJ3wnIE9SREVSIEJZIHUpKSBGUk9NIGJ0cmVl X3ByZWZpeCBXSEVSRSB1IElTIE5PVCBOVUxMKQ0KKyAgICAgICBBUyBwb3N0X2NodXJuX29rOw0K K1NFVCBlbmFibGVfaW5kZXhzY2FuID0gb247DQorUkVTRVQgZW5hYmxlX3NlcXNjYW47DQorUkVT RVQgZW5hYmxlX2JpdG1hcHNjYW47DQorDQorLS0gVGhlIHJlbG9wdGlvbiByb3VuZC10cmlwcyBh bmQgY2FuIGJlIHRvZ2dsZWQgd2l0aG91dCBhIHJld3JpdGUuDQorU0VMRUNUIHJlbG9wdGlvbnMg RlJPTSBwZ19jbGFzcyBXSEVSRSByZWxuYW1lID0gJ2J0cmVlX3ByZWZpeF9vbic7DQorQUxURVIg SU5ERVggYnRyZWVfcHJlZml4X29uIFNFVCAocHJlZml4X2NvbXByZXNzaW9uID0gb2ZmKTsNCitT RUxFQ1QgcmVsb3B0aW9ucyBGUk9NIHBnX2NsYXNzIFdIRVJFIHJlbG5hbWUgPSAnYnRyZWVfcHJl Zml4X29uJzsNCistLSBSZWFkaW5nIGJhY2sgd2l0aCB0aGUgb3B0aW9uIG9mZiBzdGlsbCByZXR1 cm5zIGNvcnJlY3Qgcm93czogZXhpc3RpbmcNCistLSBCVFBfUFJFRklYIGxlYXZlcyBrZWVwIHRo ZWlyIGNvZGVkIGZvcm0gYW5kIGRlY29kZSBvbiB0aGUgcGFnZSBmbGFnLg0KK1NFVCBlbmFibGVf c2Vxc2NhbiA9IG9mZjsNCitTRUxFQ1QgY291bnQoKikgRlJPTSBidHJlZV9wcmVmaXggV0hFUkUg dSA9IHJlcGVhdCgnYScsIDEyNik7DQorUkVTRVQgZW5hYmxlX3NlcXNjYW47DQorDQorLS0gQSBu b24tdmFybGVuYSBmaXJzdCBjb2x1bW4gaXMgbGVnYWwgYW5kIHNpbGVudGx5IHN0b3JlcyBubyBw cmVmaXg7IHZlcmlmeSBhDQorLS0gc2NhbiBvdmVyIHN1Y2ggYW4gaW5kZXggcmV0dXJucyBjb3Jy ZWN0IHJvd3MuDQorQ1JFQVRFIElOREVYIGJ0cmVlX3ByZWZpeF9pbnQgT04gYnRyZWVfcHJlZml4 ICgobGVuZ3RoKHUpKSkgV0lUSCAocHJlZml4X2NvbXByZXNzaW9uID0gb24pOw0KK1NFVCBlbmFi bGVfc2Vxc2NhbiA9IG9mZjsNCitTRUxFQ1QgbGVuZ3RoKHUpIEZST00gYnRyZWVfcHJlZml4IFdI RVJFIGxlbmd0aCh1KSA9IDMwMDsNCitSRVNFVCBlbmFibGVfc2Vxc2NhbjsNCitEUk9QIFRBQkxF IGJ0cmVlX3ByZWZpeDsNCisNCistLQ0KKy0tIEJvdHRvbS11cCBpbmRleCBkZWxldGlvbiBvbiBw cmVmaXgtY29tcHJlc3NlZCBwYWdlcy4NCistLQ0KKy0tIEFuIFVQREFURSB0aGF0IGRvZXMgbm90 IGNoYW5nZSB0aGUgaW5kZXhlZCBjb2x1bW4gbWFya3MgdGhlIHJlc3VsdGluZyBpbmRleA0KKy0t IGluc2VydCAibG9naWNhbGx5IHVuY2hhbmdlZCIsIHdoaWNoIGxldHMgbmJ0cmVlIHJ1biBhIGJv dHRvbS11cCBkZWxldGlvbg0KKy0tIHBhc3MgYmVmb3JlIHNwbGl0dGluZyBhIGxlYWYuICBUaGF0 IHBhc3MgcmVhZHMgYW5kIChvbmx5KSByZW1vdmVzIGl0ZW1zOyBpdA0KKy0tIG11c3Qgd29yayBv biBjb2RlZCBwYWdlcyB0b28uICBIZXJlIHdlIGV4ZXJjaXNlIHRoZSBwYXRoIGFuZCB2ZXJpZnkg dGhlDQorLS0gaW5kZXggc3RheXMgY29ycmVjdDsgY29tbWl0dGVkIHVwZGF0ZSBiYXRjaGVzIGJl dHdlZW4gVkFDVVVNcyBsZWF2ZQ0KKy0tIHJlbW92YWJsZSBkdXBsaWNhdGVzIGZvciB0aGUgcGFz cyB0byBmaW5kLiAgKEJsb2F0IGlzIHF1YW50aWZpZWQgaW4gdGhlDQorLS0gcGVyZm9ybWFuY2Ug YmVuY2htYXJrLCBub3QgaGVyZSwgc2luY2UgcmVtb3ZhYmlsaXR5IGlzIHRpbWluZy1kZXBlbmRl bnQuKQ0KKy0tDQorQ1JFQVRFIFRBQkxFIGJ0cmVlX3ByZWZpeF9idSAoaWQgaW50IFBSSU1BUlkg S0VZLCB1IHRleHQgQ09MTEFURSAiQyIsIGZpbGxlciB0ZXh0KTsNCitJTlNFUlQgSU5UTyBidHJl ZV9wcmVmaXhfYnUNCisgIFNFTEVDVCBnLCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoLycgfHwg bHBhZCgoZyAlIDUwMCk6OnRleHQsIDgsICcwJyksIHJlcGVhdCgneCcsIDQwKQ0KKyAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgNDAwMCkgZzsNCitDUkVBVEUgSU5ERVggYnRyZWVfcHJlZml4X2J1 X3UgT04gYnRyZWVfcHJlZml4X2J1ICh1KSBXSVRIIChwcmVmaXhfY29tcHJlc3Npb24gPSBvbik7 DQorLS0gU2V2ZXJhbCBjb21taXR0ZWQgbm9uLWtleSBVUERBVEUgYmF0Y2hlcyAodmVyc2lvbiBj aHVybiBvbiB0aGUgcHJlZml4IGluZGV4KS4NCitVUERBVEUgYnRyZWVfcHJlZml4X2J1IFNFVCBm aWxsZXIgPSByZXBlYXQoJ3knLCA0MCk7DQorVVBEQVRFIGJ0cmVlX3ByZWZpeF9idSBTRVQgZmls bGVyID0gcmVwZWF0KCd6JywgNDApOw0KK1VQREFURSBidHJlZV9wcmVmaXhfYnUgU0VUIGZpbGxl ciA9IHJlcGVhdCgndycsIDQwKTsNCistLSBDb3JyZWN0bmVzcyBhZnRlciB0aGUgY2h1cm46IGFu IGluZGV4LW9ubHkgc2NhbiBvZiB0aGUga2V5IGNvbHVtbiBtdXN0IGVxdWFsDQorLS0gdGhlIGlu ZGVwZW5kZW50IG9yYWNsZSAodGhlIGxpdGVyYWwga2V5cyksIHByb3Zpbmcgbm8gZGVjb2RlL2Rl bGV0aW9uIGRhbWFnZS4NCitTRVQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7DQorU0VMRUNUIChTRUxF Q1QgbWQ1KHN0cmluZ19hZ2codSwgJ3wnIE9SREVSIEJZIHUpKSBGUk9NIGJ0cmVlX3ByZWZpeF9i dSkgPQ0KKyAgICAgICBtZDUoc3RyaW5nX2FnZyh4LCAnfCcgT1JERVIgQlkgeCkpIEFTIGJvdHRv bXVwX29rDQorICBGUk9NIChTRUxFQ1QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC8nIHx8IGxw YWQoKGcgJSA1MDApOjp0ZXh0LCA4LCAnMCcpIEFTIHgNCisgICAgICAgICAgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwgNDAwMCkgZykgb3JhY2xlOw0KK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0cmVl X3ByZWZpeF9idQ0KKyAgV0hFUkUgdSA9ICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvJyB8fCBs cGFkKCc3JywgOCwgJzAnKTsNCitSRVNFVCBlbmFibGVfc2Vxc2NhbjsNCitEUk9QIFRBQkxFIGJ0 cmVlX3ByZWZpeF9idTsNCisNCistLQ0KKy0tIFJ1bnRpbWUgZGVkdXBsaWNhdGlvbiBvbiBhIHBy ZWZpeC1jb21wcmVzc2VkIHBhZ2UuICBEdXBsaWNhdGUga2V5cyBpbnNlcnRlZA0KKy0tIG9uZSBh dCBhIHRpbWUgaW50byBhbiBleGlzdGluZyBwcmVmaXggaW5kZXggZmlsbCBhIGxlYWY7IGJlZm9y ZSBpdCBzcGxpdHMsDQorLS0gdGhlIGRlZHVwbGljYXRpb24gcGFzcyBkZWNvZGVzIHRoZSBjb2Rl ZCBpdGVtcywgbWVyZ2VzIHRoZSBkdXBsaWNhdGUgVElEcw0KKy0tIGludG8gcG9zdGluZyBsaXN0 cyBhbmQgcmUtY29kZXMgdGhlIHBhZ2UuICBUaGUgZGVjb2RlZCBzZXQgY2FuIGV4Y2VlZCBvbmUN CistLSBwYWdlIGV2ZW4gd2hlbiB0aGUgY29kZWQgZm9ybSBmaXQsIGluIHdoaWNoIGNhc2UgdGhl IHBhc3MgYWJvcnRzIGFuZCB0aGUNCistLSBwYWdlIHNwbGl0cyBpbnN0ZWFkOyBlaXRoZXIgd2F5 IHRoZSByZXN1bHQgbXVzdCBiZSBjb3JyZWN0Lg0KKy0tDQorQ1JFQVRFIFRBQkxFIGJ0cmVlX3By ZWZpeF9kZCAodSB0ZXh0IENPTExBVEUgIkMiKTsNCitDUkVBVEUgSU5ERVggYnRyZWVfcHJlZml4 X2RkX3UgT04gYnRyZWVfcHJlZml4X2RkICh1KSBXSVRIIChwcmVmaXhfY29tcHJlc3Npb24gPSBv bik7DQorSU5TRVJUIElOVE8gYnRyZWVfcHJlZml4X2RkDQorICBTRUxFQ1QgJ2h0dHBzOi8vZXhh bXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxwYWQoKGcgJSAyMDApOjp0ZXh0LCA4LCAn MCcpDQorICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA0MDAwMCkgZzsNCitTRVQgZW5hYmxlX3Nl cXNjYW4gPSBvZmY7DQorU0VMRUNUIChTRUxFQ1QgbWQ1KHN0cmluZ19hZ2codSwgJ3wnIE9SREVS IEJZIHUpKSBGUk9NIGJ0cmVlX3ByZWZpeF9kZCkgPQ0KKyAgICAgICBtZDUoc3RyaW5nX2FnZyh4 LCAnfCcgT1JERVIgQlkgeCkpIEFTIHJ1bnRpbWVfZGVkdXBfb2sNCisgIEZST00gKFNFTEVDVCAn aHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLycgfHwgbHBhZCgoZyAlIDIwMCk6 OnRleHQsIDgsICcwJykgQVMgeA0KKyAgICAgICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA0 MDAwMCkgZykgb3JhY2xlOw0KK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0cmVlX3ByZWZpeF9kZA0K KyAgV0hFUkUgdSA9ICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvJyB8fCBs cGFkKCc0MicsIDgsICcwJyk7DQorUkVTRVQgZW5hYmxlX3NlcXNjYW47DQorRFJPUCBUQUJMRSBi dHJlZV9wcmVmaXhfZGQ7DQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdA0KaW5kZXggYjk2NGU1ZWU5 MDcuLmMzZmI1NjgwMmY2IDEwMDY0NA0KLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QNCisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0DQpAQCAtMjE1LDYg KzIxNSw3IEBAIEJURGVsZXRlZFBhZ2VEYXRhDQogQlRJbmRleFN0YXQNCiBCVEluc2VydFN0YXRl DQogQlRJbnNlcnRTdGF0ZURhdGENCitCVEl0ZW1CdWYNCiBCVExlYWRlcg0KIEJUTWV0YVBhZ2VE YXRhDQogQlRPbmVWYWNJbmZvDQpAQCAtMjI2LDYgKzIyNyw3IEBAIEJUUGFnZVN0YXQNCiBCVFBh Z2VTdGF0ZQ0KIEJUUGFyYWxsZWxTY2FuRGVzYw0KIEJUUGVuZGluZ0ZTTQ0KK0JUUHJlZml4UGxh bg0KIEJUUmVhZFBhZ2VTdGF0ZQ0KIEJUU2Nhbkluc2VydA0KIEJUU2Nhbkluc2VydERhdGENCi0t IA0KMi41MC4xDQoNCg== --b1=_gbQ1O3OfExNP0d6lOwCSFTeR6wOdO1O9VO9eHjTY--