[OpenAFS-devel] Patches for Openafs compression support Part II

Sven Oehme oehmes@de.ibm.com
Tue, 4 Jan 2005 20:43:58 +0100


--=_mixed 006C3A83C1256F7F_=
Content-Type: multipart/alternative; boundary="=_alternative 006C3A83C1256F7F_="


--=_alternative 006C3A83C1256F7F_=
Content-Type: text/plain; charset="US-ASCII"

Hi ,

here is an update to the compression support and some answers to questions 
:-) 

Purpose:
- patch for versions of openafs 1.2.13 and 1.3.77 to support gzip and bz2 
compression at "vos dump", "vos release", "vos restore" and "vos move".

we still haven't prepared the changes for WinNT (will come with next 
update
- haven't done any changes to libadmin (AFS API) yet.
- these patches are full patches, not upgrade. Has to be applied on the
original version (of src/volser directory).

Installation:
        cd openafs-1.2.13
(where the src folder and configure script is in openafs-1.2.13)
        patch -p1 <../openafs-1.2.13z.patch
        [recompile the source]

Modified binaries are: "vos" and "volserver"
The command "vos" has the new flag "-z [1..9]" and "-bz2 [1..9]", and 
volserver has the support with its modified interface.
The compression support is directly over the RPC call layer.
The modified binaries must work fully with the unpatched openafs versions.

Implementation: At some places [dumpstuff.c, vos.c] rx_Read and rx_Write 
has been replaced to the new wrapping functions which support compression. 
See "ziorx.[c,h]".



Sven

-------------------------------------------------------------------------------------------------------------------------
Dept. A141,  TG/SSG EMEA AIS Strategy and Architecture
Development Leader Stonehenge 
IBM intranet ---> http://w3.ais.mainz.de.ibm.com/stonehenge/
internet ---> http://www-5.ibm.com/services/de/its/filestore.html
Phone (+49)-6131-84-3151
Fax      (+49)-6131-84-6708
Mobil   (+49)-171-970-6664
E-Mail : oehmes@de.ibm.com



Mitch Collinsworth <mitch@ccmr.cornell.edu> 
Sent by: openafs-devel-admin@openafs.org
04/01/2005 19:31

To
Sven Oehme/Germany/IBM@IBMDE
cc
openafs-devel@openafs.org
Subject
Re: [OpenAFS-devel] Patches for Openafs compression support







On Wed, 22 Dec 2004, Sven Oehme wrote:

> we have started a new project to enhance the data transfer (first on
> volume level) to slow link connected sites.
> we implemented the gzip algorithm and will add bzip2 compression later.
>
> i have attached two patches for Openafs 1.2.13 and 1.3.77 to add gzip
> compression to vos dump , release and restore

Question:  How is it decided when to compress and when to not?  Does
the invoker have to request it, is it done by default, etc?

-Mitch
_______________________________________________
OpenAFS-devel mailing list
OpenAFS-devel@openafs.org
https://lists.openafs.org/mailman/listinfo/openafs-devel


--=_alternative 006C3A83C1256F7F_=
Content-Type: text/html; charset="US-ASCII"


<br><font size=2 face="sans-serif">Hi ,</font>
<br>
<br><font size=2 face="sans-serif">here is an update to the compression
support and some answers to questions :-) </font>
<br>
<div>
<br><font size=2 face="sans-serif">Purpose:<br>
- patch for versions of openafs 1.2.13 and 1.3.77 to support gzip and bz2
compression at &quot;vos dump&quot;, &quot;vos release&quot;, &quot;vos
restore&quot; and &quot;vos move&quot;.</font>
<br>
<br><font size=2 face="sans-serif">we still haven't prepared the changes
for WinNT (will come with next update<br>
- haven't done any changes to libadmin (AFS API) yet.<br>
- these patches are full patches, not upgrade. Has to be applied on the<br>
original version (of src/volser directory).</font>
<br>
<br><font size=2 face="sans-serif">Installation:<br>
 &nbsp; &nbsp; &nbsp; &nbsp;cd openafs-1.2.13<br>
(where the src folder and configure script is in openafs-1.2.13)<br>
 &nbsp; &nbsp; &nbsp; &nbsp;patch -p1 &lt;../openafs-1.2.13z.patch<br>
 &nbsp; &nbsp; &nbsp; &nbsp;[recompile the source]</font>
<br>
<br><font size=2 face="sans-serif">Modified binaries are: &quot;vos&quot;
and &quot;volserver&quot;<br>
The command &quot;vos&quot; has the new flag &quot;-z [1..9]&quot; and
&quot;-bz2 [1..9]&quot;, and volserver has the support with its modified
interface.<br>
The compression support is directly over the RPC call layer.<br>
The modified binaries must work fully with the unpatched openafs versions.</font>
<br>
<br><font size=2 face="sans-serif">Implementation: At some places [dumpstuff.c,
vos.c] rx_Read and rx_Write has been replaced to the new wrapping functions
which support compression. See &quot;ziorx.[c,h]&quot;.</font>
<br>
<br>
<br>
<br><font size=2 face="sans-serif">Sven</font>
<br><font size=2 face="sans-serif"><br>
-------------------------------------------------------------------------------------------------------------------------<br>
Dept. A141, &nbsp;TG/SSG EMEA AIS Strategy and Architecture<br>
Development Leader Stonehenge <br>
IBM intranet ---&gt; http://w3.ais.mainz.de.ibm.com/stonehenge/<br>
internet ---&gt; http://www-5.ibm.com/services/de/its/filestore.html<br>
Phone (+49)-6131-84-3151<br>
Fax &nbsp; &nbsp; &nbsp;(+49)-6131-84-6708<br>
Mobil &nbsp; (+49)-171-970-6664<br>
E-Mail : oehmes@de.ibm.com</font>
<br>
<br>
<br>
<table width=100%>
<tr valign=top>
<td width=40%><font size=1 face="sans-serif"><b>Mitch Collinsworth &lt;mitch@ccmr.cornell.edu&gt;</b>
</font>
<br><font size=1 face="sans-serif">Sent by: openafs-devel-admin@openafs.org</font>
<p><font size=1 face="sans-serif">04/01/2005 19:31</font>
<td width=59%>
<table width=100%>
<tr>
<td>
<div align=right><font size=1 face="sans-serif">To</font></div>
<td valign=top><font size=1 face="sans-serif">Sven Oehme/Germany/IBM@IBMDE</font>
<tr>
<td>
<div align=right><font size=1 face="sans-serif">cc</font></div>
<td valign=top><font size=1 face="sans-serif">openafs-devel@openafs.org</font>
<tr>
<td>
<div align=right><font size=1 face="sans-serif">Subject</font></div>
<td valign=top><font size=1 face="sans-serif">Re: [OpenAFS-devel] Patches
for Openafs compression support</font></table>
<br>
<table>
<tr valign=top>
<td>
<td></table>
<br></table>
<br>
<br>
<br><font size=2><tt><br>
On Wed, 22 Dec 2004, Sven Oehme wrote:<br>
<br>
&gt; we have started a new project to enhance the data transfer (first
on<br>
&gt; volume level) to slow link connected sites.<br>
&gt; we implemented the gzip algorithm and will add bzip2 compression later.<br>
&gt;<br>
&gt; i have attached two patches for Openafs 1.2.13 and 1.3.77 to add gzip<br>
&gt; compression to vos dump , release and restore<br>
<br>
Question: &nbsp;How is it decided when to compress and when to not? &nbsp;Does<br>
the invoker have to request it, is it done by default, etc?<br>
<br>
-Mitch<br>
_______________________________________________<br>
OpenAFS-devel mailing list<br>
OpenAFS-devel@openafs.org<br>
https://lists.openafs.org/mailman/listinfo/openafs-devel<br>
</tt></font>
<br></div>
--=_alternative 006C3A83C1256F7F_=--
--=_mixed 006C3A83C1256F7F_=
Content-Type: application/octet-stream; name="openafs-1.2.13z.patch"
Content-Disposition: attachment; filename="openafs-1.2.13z.patch"
Content-Transfer-Encoding: base64

ZGlmZiAtTmF1ciBvcGVuYWZzLTEuMi4xMy9zcmMvdm9sc2VyL2R1bXBzdHVmZi5jIG9wZW5hZnMt
MS4yLjEzei9zcmMvdm9sc2VyL2R1bXBzdHVmZi5jDQotLS0gb3BlbmFmcy0xLjIuMTMvc3JjL3Zv
bHNlci9kdW1wc3R1ZmYuYwkyMDAzLTA0LTA0IDEwOjI5OjQ3LjAwMDAwMDAwMCArMDIwMA0KKysr
IG9wZW5hZnMtMS4yLjEzei9zcmMvdm9sc2VyL2R1bXBzdHVmZi5jCTIwMDQtMTItMjIgMDA6MTk6
NDguMDAwMDAwMDAwICswMTAwDQpAQCAtNDMsOSArNDMsMTMgQEANCiAjaW5jbHVkZSA8YWZzL2Fj
bC5oPg0KICNpbmNsdWRlICJ2b2xzZXIuaCINCiAjaW5jbHVkZSAidm9saW50LmgiDQorI2luY2x1
ZGUgInppb3J4LmgiDQogDQogZXh0ZXJuIGludCBEb0xvZ2dpbmc7DQogDQorI2RlZmluZSBERUZf
VE9fV1JJVEUgMQ0KKyNkZWZpbmUgREVGX1RPX1JFQUQgMA0KKw0KIC8qIFRoaXMgaW9kIHN0dWZm
IGlzIGEgc2lsbHkgbGl0dGxlIHBhY2thZ2UgdG8gZW11bGF0ZSB0aGUgb2xkIHFpX2luIHN0dWZm
LCB3aGljaA0KICAgIGVtdWxhdGVkIHRoZSBzdGRpbyBzdHVmZi4gIFRoZXJlIGlzIGEgYmlnIGFz
c3VtcHRpb24gaGVyZSwgdGhhdCB0aGUNCiAgICByeF9SZWFkIHdpbGwgbmV2ZXIgYmUgY2FsbGVk
IGRpcmVjdGx5LCBieSBhIHJvdXRpbmUgbGlrZSByZWFkRmlsZSwgd2hlbg0KQEAgLTU1LDE1ICs1
OSwxNiBAQA0KICAgIHRoZSBwdXNoaW5nIGJhY2sgb2YgY2hhcmFjdGVycyAoaS5lLiBjaGFyYWN0
ZXJzIHNob3VsZCBub3QgZG91YmxlIGJvdGgNCiAgICBhcyBhbiBlbmQgbWFya2VyIGFuZCBhIGJl
Z2luIG1hcmtlcikgKi8NCiBzdHJ1Y3QgaW9kIHsNCi0gICAgc3RydWN0IHJ4X2NhbGwgKmNhbGw7
CS8qIGNhbGwgdG8gd2hpY2ggdG8gd3JpdGUsIG1pZ2h0IGJlIGFuIGFycmF5ICovDQorICAgIHN0
cnVjdCB6aW9yeF9jYWxsICpjYWxsOwkvKiBjYWxsIHRvIHdoaWNoIHRvIHdyaXRlLCBtaWdodCBi
ZSBhbiBhcnJheSAqLw0KICAgICBpbnQgZGV2aWNlOwkJCS8qIGR1bXAgZGV2aWNlIElEIGZvciB2
b2x1bWUgKi8NCiAgICAgaW50IHBhcmVudElkOwkJLyogZHVtcCBwYXJlbnQgSUQgZm9yIHZvbHVt
ZSAqLw0KICAgICBzdHJ1Y3QgRGlza1BhcnRpdGlvbiAqZHVtcFBhcnRpdGlvbjsgLyogRHVtcCBw
YXJ0aXRpb24uICovDQotICAgIHN0cnVjdCByeF9jYWxsICoqY2FsbHM7ICAgICAgLyogYXJyYXkg
b2YgcG9pbnRlcnMgdG8gY2FsbHMgKi8NCisgICAgc3RydWN0IHppb3J4X2NhbGwgKipjYWxsczsg
ICAgICAvKiBhcnJheSBvZiBwb2ludGVycyB0byBjYWxscyAqLw0KICAgICBpbnQgbmNhbGxzOyAg
ICAgICAgICAgICAgICAgLyogaG93IG1hbnkgY2FsbHMvY29kZXMgaW4gYXJyYXkgKi8NCiAgICAg
aW50ICpjb2RlczsgICAgICAgICAgICAgICAgIC8qIG9uZSByZXR1cm4gY29kZSBmb3IgZWFjaCBj
YWxsICovDQogICAgIGNoYXIgaGF2ZU9sZENoYXI7CQkvKiBzdGF0ZSBmb3IgcHVzaGluZyBiYWNr
IGEgY2hhcmFjdGVyICovDQogICAgIGNoYXIgb2xkQ2hhcjsNCisgICAgaW50IHRvX3dyaXRlOyAv
KiBvbmUgbW9yZSBhc3N1bXB0aW9uOiB0aGlzIGlvZCBtdXN0IGJlIHVzZWQgZXhjbHVzaXZlbHkg
Zm9yIHJlYWQgb3Igd3JpdGUgKi8NCiB9Ow0KIA0KIA0KQEAgLTgzLDI4ICs4OCwxNzggQEANCiBz
dGF0aWMgYml0MzIgdm9sc2VyX1dyaXRlRmlsZShpbnQgdm4sIHN0cnVjdCBpb2QgKmlvZHAsIEZk
SGFuZGxlX3QgKmhhbmRsZVAsDQogCQkJICAgICAgRXJyb3IgKnN0YXR1cyk7DQogDQorLy9yZXR1
cm4gMCBvbiBzdWNjZXNzLCAoLTEpIG9uIGZhaWwNCitzdGF0aWMgaW50IGlvZF9Jbml0KHJlZ2lz
dGVyIHN0cnVjdCBpb2QgKmlvZHAsIHJlZ2lzdGVyIHN0cnVjdCByeF9jYWxsICpjYWxsLA0KKwkJ
CWludCBjb21wcmVzcywgaW50IGxldmVsLCBpbnQgdG9fd3JpdGUpDQorew0KKyAgICBtZW1zZXQo
aW9kcCwgMCwgc2l6ZW9mKHN0cnVjdCBpb2QpKTsNCisgICAgaW9kcC0+dG9fd3JpdGUgPSB0b193
cml0ZTsNCisgICAgaW9kcC0+Y2FsbCA9IChzdHJ1Y3QgemlvcnhfY2FsbCAqKW1hbGxvYyhzaXpl
b2Yoc3RydWN0IHppb3J4X2NhbGwpKTsNCisgICAgaWYgKGlvZHAtPmNhbGw9PU5VTEwpDQorICAg
IHsNCisgICAgICAgIExvZygiaW9kX0luaXQ6IG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsN
CisgICAgICAgIHJldHVybiAoLTEpOw0KKyAgICB9DQorDQorICAgIGlmICh0b193cml0ZT09REVG
X1RPX1dSSVRFKQ0KKyAgICB7DQorICAgICAgICBpZiAoemlvcnhCZWdpbldyaXRlKGNhbGwsIGNv
bXByZXNzLCBsZXZlbCwgaW9kcC0+Y2FsbCkhPVpJT1JYX09LKQ0KKwl7DQorICAgICAgICAgICAg
TG9nKCJpb2RfSW5pdDogemlvcnhCZWdpbldyaXRlIGZhaWxlZDogJXNcbiIsIGlvZHAtPmNhbGwt
Pmxhc3RFcnJvck1zZyk7DQorCSAgICBmcmVlKGlvZHAtPmNhbGwpOw0KKwkgICAgaW9kcC0+Y2Fs
bCA9IE5VTEw7DQorCSAgICByZXR1cm4gKC0xKTsNCisJfQ0KKyAgICB9IGVsc2Ugew0KKyAgICAg
ICAgaWYgKHppb3J4QmVnaW5SZWFkKGNhbGwsIGNvbXByZXNzLCBsZXZlbCwgaW9kcC0+Y2FsbCkh
PVpJT1JYX09LKQ0KKwl7DQorICAgICAgICAgICAgTG9nKCJpb2RfSW5pdDogemlvcnhCZWdpblJl
YWQgZmFpbGVkOiAlc1xuIiwgaW9kcC0+Y2FsbC0+bGFzdEVycm9yTXNnKTsNCisJICAgIGZyZWUo
aW9kcC0+Y2FsbCk7DQorCSAgICBpb2RwLT5jYWxsID0gTlVMTDsNCisJICAgIHJldHVybiAoLTEp
Ow0KKwl9DQorICAgIH0NCiANCi1zdGF0aWMgdm9pZCBpb2RfSW5pdChyZWdpc3RlciBzdHJ1Y3Qg
aW9kICppb2RwLCByZWdpc3RlciBzdHJ1Y3QgcnhfY2FsbCAqY2FsbCkNCi17DQotICAgIGlvZHAt
PmNhbGwgPSBjYWxsOw0KICAgICBpb2RwLT5oYXZlT2xkQ2hhciA9IDA7DQogICAgIGlvZHAtPm5j
YWxscyA9IDE7DQotICAgIGlvZHAtPmNhbGxzID0gKHN0cnVjdCByeF9jYWxsICoqKSAwOw0KKyAg
ICBpb2RwLT5jYWxscyA9IChzdHJ1Y3QgemlvcnhfY2FsbCAqKikgMDsNCisNCisgICAgcmV0dXJu
IDA7DQogfQ0KIA0KLXN0YXRpYyB2b2lkIGlvZF9Jbml0TXVsdGkoc3RydWN0IGlvZCAqaW9kcCwg
c3RydWN0IHJ4X2NhbGwgKipjYWxscywgaW50IG5jYWxscywNCi0JCSAgIGludCAqY29kZXMpDQor
Ly9yZXR1cm4gMCBvbiBzdWNjZXNzLCAoLTEpIG9uIGZhaWwNCitzdGF0aWMgaW50IGlvZF9Eb25l
KHN0cnVjdCBpb2QgKmlvZHApDQogew0KKyAgICBpbnQgcmVzOw0KKw0KKyAgICByZXMgPSAwOw0K
KyAgICBpZiAoaW9kcC0+dG9fd3JpdGU9PURFRl9UT19XUklURSkNCisgICAgew0KKyAgICAgICAg
aWYgKHppb3J4RW5kV3JpdGUoaW9kcC0+Y2FsbCkhPVpJT1JYX09LKQ0KKwl7DQorCSAgICBMb2co
ImlvZF9Eb25lOiB6aW9yeEVuZFdyaXRlIGZhaWxlZDogJXNcbiIsIGlvZHAtPmNhbGwtPmxhc3RF
cnJvck1zZyk7DQorCSAgICByZXMgPSAoLTEpOw0KKwl9DQorICAgIH0gZWxzZSB7DQorICAgICAg
ICBpZiAoemlvcnhFbmRSZWFkKGlvZHAtPmNhbGwpIT1aSU9SWF9PSykNCisJew0KKwkgICAgTG9n
KCJpb2RfRG9uZTogemlvcnhFbmRSZWFkIGZhaWxlZDogJXNcbiIsIGlvZHAtPmNhbGwtPmxhc3RF
cnJvck1zZyk7DQorCSAgICByZXMgPSAoLTEpOw0KKwl9DQorICAgIH0NCisgICAgZnJlZShpb2Rw
LT5jYWxsKTsNCisgICAgaW9kcC0+Y2FsbCA9IE5VTEw7DQorICAgIHJldHVybiByZXM7DQorfQ0K
Kw0KKy8vcmV0dXJuOiAwIG9uIE9LLCAoLTEpIG9uIGZhaWx1cmUNCitzdGF0aWMgaW50IGlvZF9J
bml0TXVsdGkoc3RydWN0IGlvZCAqaW9kcCwgc3RydWN0IHJ4X2NhbGwgKipjYWxscywgaW50IG5j
YWxscywNCisJCSAgIGludCAqY29kZXMsIGludCBjb21wcmVzcywgaW50IGxldmVsLCBpbnQgdG9f
d3JpdGUpDQorew0KKyAgaW50IGksIGosIHJlc3VsdCwgcmM7DQorDQorICBtZW1zZXQoaW9kcCwg
MCwgc2l6ZW9mKHN0cnVjdCBpb2QpKTsNCisgIGlvZHAtPnRvX3dyaXRlID0gdG9fd3JpdGU7DQor
ICBpb2RwLT5jYWxscyA9IChzdHJ1Y3QgemlvcnhfY2FsbCAqKiltYWxsb2MobmNhbGxzKnNpemVv
ZihzdHJ1Y3QgemlvcnhfY2FsbCAqKSk7DQorICBpZiAoaW9kcC0+Y2FsbHM9PU5VTEwpDQorICB7
DQorICAgIExvZygiaW9kX0luaXRNdWx0aTogbWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOw0K
KyAgICByZXR1cm4gKC0xKTsNCisgIH0NCisNCisgIG1lbXNldChpb2RwLT5jYWxscywgMCwgbmNh
bGxzKnNpemVvZihzdHJ1Y3QgemlvcnhjYWxsICopKTsNCisgIGZvcihpPTA7IGk8bmNhbGxzOyBp
KyspDQorICB7DQorICAgIGlvZHAtPmNhbGxzW2ldID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgemlv
cnhfY2FsbCkpOw0KKyAgICBpZiAoaW9kcC0+Y2FsbHNbaV09PU5VTEwpDQorICAgIHsNCisgICAg
ICBMb2coImlvZF9Jbml0TXVsdGk6IG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yICMyXG4iKTsNCisg
ICAgICBnb3RvIGZhaWw7DQorICAgIH0NCisgIH0NCisNCisgIHJlc3VsdCA9IDA7DQorICBmb3Io
aT0wOyBpPG5jYWxsczsgaSsrKQ0KKyAgew0KKyAgICBpZiAodG9fd3JpdGU9PURFRl9UT19XUklU
RSkNCisgICAgICByYyA9IHppb3J4QmVnaW5Xcml0ZShjYWxsc1tpXSwgY29tcHJlc3MsIGxldmVs
LCBpb2RwLT5jYWxsc1tpXSk7DQorICAgIGVsc2UNCisgICAgICByYyA9IHppb3J4QmVnaW5SZWFk
KGNhbGxzW2ldLCBjb21wcmVzcywgbGV2ZWwsIGlvZHAtPmNhbGxzW2ldKTsNCisgICAgaWYgKHJj
IT1aSU9SWF9PSykNCisgICAgew0KKyAgICAgIExvZyhpb2RwLT5jYWxsc1tpXS0+bGFzdEVycm9y
TXNnKTsNCisgICAgICAvL2RyYXcgYmFjayBpbml0aWFsaXphdGlvbiBzbyBmYXI6DQorICAgICAg
Zm9yKGo9MDsgajxpOyBqKyspDQorICAgICAgew0KKyAgICAgICAgaWYgKHRvX3dyaXRlPT1ERUZf
VE9fV1JJVEUpDQorICAgICAgICAgIHppb3J4RW5kV3JpdGUoaW9kcC0+Y2FsbHNbal0pOw0KKwll
bHNlDQorICAgICAgICAgIHppb3J4RW5kUmVhZChpb2RwLT5jYWxsc1tqXSk7DQorICAgICAgfQ0K
KyAgICB9DQorICB9DQogDQotICBpb2RwLT5jYWxscyA9IGNhbGxzOw0KICAgaW9kcC0+aGF2ZU9s
ZENoYXIgPSAwOw0KICAgaW9kcC0+bmNhbGxzID0gbmNhbGxzOw0KICAgaW9kcC0+Y29kZXMgPSBj
b2RlczsNCi0gIGlvZHAtPmNhbGwgPSAoc3RydWN0IHJ4X2NhbGwgKikgMDsNCisgIGlvZHAtPmNh
bGwgPSAoc3RydWN0IHppb3J4X2NhbGwgKikgMDsNCisgIA0KKyAgcmV0dXJuIDA7DQorDQorZmFp
bDoNCisgIGlmIChpb2RwLT5jYWxscyE9TlVMTCkNCisgIHsNCisgICAgZm9yKGk9MDsgaTxuY2Fs
bHM7IGkrKykNCisgICAgew0KKyAgICAgIGlmIChpb2RwLT5jYWxsc1tpXSE9TlVMTCkNCisgICAg
ICAgIGZyZWUoaW9kcC0+Y2FsbHNbaV0pOw0KKyAgICB9DQorICAgIGZyZWUoaW9kcC0+Y2FsbHMp
Ow0KKyAgICBpb2RwLT5jYWxscyA9IE5VTEw7DQorICB9DQorICByZXR1cm4gKC0xKTsNCit9DQor
DQorLy9yZXR1cm46IDAgb24gT0ssICgtMSkgb24gZmFpbHVyZQ0KK3N0YXRpYyBpbnQgaW9kX0Rv
bmVNdWx0aShzdHJ1Y3QgaW9kICppb2RwKQ0KK3sNCisgIGludCBpLCByZXN1bHQsIHJjOw0KKyAg
aWYgKGlvZHA9PU5VTEwpDQorICAgIHJldHVybiAoLTEpOw0KKw0KKyAgaWYgKGlvZHAtPmNhbGxz
PT1OVUxMKQ0KKyAgICByZXR1cm4gKC0xKTsNCisNCisgIHJlc3VsdCA9IDA7DQorICBmb3IoaT0w
OyBpPGlvZHAtPm5jYWxsczsgaSsrKQ0KKyAgew0KKyAgICBpZiAoaW9kcC0+dG9fd3JpdGU9PURF
Rl9UT19XUklURSkNCisgICAgICByYyA9IHppb3J4RW5kV3JpdGUoaW9kcC0+Y2FsbHNbaV0pOw0K
KyAgICBlbHNlDQorICAgICAgcmMgPSB6aW9yeEVuZFJlYWQoaW9kcC0+Y2FsbHNbaV0pOw0KKyAg
ICBpZiAocmMhPVpJT1JYX09LKQ0KKyAgICB7DQorICAgICAgTG9nKGlvZHAtPmNhbGxzW2ldLT5s
YXN0RXJyb3JNc2cpOw0KKyAgICAgIHJlc3VsdCA9ICgtMSk7DQorICAgIH0NCisgIH0NCisNCisg
IGlmIChpb2RwLT5jYWxscyE9TlVMTCkNCisgIHsNCisgICAgZm9yKGk9MDsgaTxpb2RwLT5uY2Fs
bHM7IGkrKykNCisgICAgew0KKyAgICAgIGlmIChpb2RwLT5jYWxsc1tpXSE9TlVMTCkNCisgICAg
ICAgIGZyZWUoaW9kcC0+Y2FsbHNbaV0pOw0KKyAgICB9DQorICAgIGZyZWUoaW9kcC0+Y2FsbHMp
Ow0KKyAgICBpb2RwLT5jYWxscyA9IE5VTEw7DQorICB9DQorDQorICByZXR1cm4gcmVzdWx0Ow0K
IH0NCiANCiAvKiBOLkIuIGlvZF9SZWFkIGRvZXNuJ3QgY2hlY2sgZm9yIG9sZGNoYXIgKHNlZSBw
cmV2aW91cyBjb21tZW50KSAqLw0KLSNkZWZpbmUgaW9kX1JlYWQoaW9kcCwgYnVmLCBuYnl0ZXMp
IHJ4X1JlYWQoKGlvZHApLT5jYWxsLCBidWYsIG5ieXRlcykNCisjZGVmaW5lIGlvZF9SZWFkKGlv
ZHAsIGJ1ZiwgbmJ5dGVzKSB6aW9yeFJlYWQoKGlvZHApLT5jYWxsLCBidWYsIG5ieXRlcykNCiAN
CiAvKiBGb3IgdGhlIHNpbmdsZSBkdW1wIGNhc2UsIGl0J3Mgb2sgdG8ganVzdCByZXR1cm4gdGhl
ICJieXRlcyB3cml0dGVuIg0KICAqIHRoYXQgcnhfV3JpdGUgcmV0dXJucywgc2luY2UgYWxsIHRo
ZSBjYWxsZXJzIG9mIGlvZF9Xcml0ZSBhYm9ydCB3aGVuDQpAQCAtMTIxLDE1ICsyNzYsMjUgQEAN
CiAJICAoIWlvZHAtPmNhbGwgJiYgaW9kcC0+bmNhbGxzID49IDEgJiYgaW9kcC0+Y2FsbHMpKTsN
CiANCiAgIGlmIChpb2RwLT5jYWxsKSB7DQotICAgIGNvZGUgPSByeF9Xcml0ZShpb2RwLT5jYWxs
LCBidWYsIG5ieXRlcyk7IA0KLSAgICByZXR1cm4gY29kZTsgICAgIA0KKyAgICBjb2RlID0gemlv
cnhXcml0ZShpb2RwLT5jYWxsLCBidWYsIG5ieXRlcyk7DQorICAgIGlmIChjb2RlIT1uYnl0ZXMg
JiYgaW9kcC0+Y2FsbC0+bGFzdEVycm9yTXNnWzBdIT0nXDAnKQ0KKyAgICB7DQorICAgICAgICBM
b2coaW9kcC0+Y2FsbC0+bGFzdEVycm9yTXNnKTsNCisgICAgICAgIGlvZHAtPmNhbGwtPmxhc3RF
cnJvck1zZ1swXSA9ICdcMCc7DQorICAgIH0NCisgICAgcmV0dXJuIGNvZGU7DQogICB9DQogDQog
ICBmb3IgKGk9MDsgaSA8IGlvZHAtPm5jYWxsczsgaSsrKSB7DQogICAgIGlmIChpb2RwLT5jYWxs
c1tpXSAmJiAhaW9kcC0+Y29kZXNbaV0pIHsNCi0gICAgICBjb2RlID0gcnhfV3JpdGUoaW9kcC0+
Y2FsbHNbaV0sIGJ1ZiwgbmJ5dGVzKTsNCisgICAgICBjb2RlID0gemlvcnhXcml0ZShpb2RwLT5j
YWxsc1tpXSwgYnVmLCBuYnl0ZXMpOw0KICAgICAgIGlmIChjb2RlICE9IG5ieXRlcykgeyAvKiBl
dmVyeXRoaW5nIGdldHMgbWVyZ2VkIGludG8gYSBzaW5nbGUgZXJyb3IgKi8NCi0gICAgICAJaW9k
cC0+Y29kZXNbaV0gPSBWT0xTRVJEVU1QRVJST1I7ICAvKiBidXQgdGhhdCdzIGV4YWN0bHkgd2hh
dCB0aGUgKi8NCisgICAgICAgIGlvZHAtPmNvZGVzW2ldID0gVk9MU0VSRFVNUEVSUk9SOyAgLyog
YnV0IHRoYXQncyBleGFjdGx5IHdoYXQgdGhlICovDQorICAgICAgICBpZiAoaW9kcC0+Y2FsbHNb
aV0tPmxhc3RFcnJvck1zZ1swXSE9J1wwJykNCisgICAgICAgIHsNCisgICAgICAgICAgIExvZyhp
b2RwLT5jYWxsc1tpXS0+bGFzdEVycm9yTXNnKTsNCisgICAgICAgICAgIGlvZHAtPmNhbGxzW2ld
LT5sYXN0RXJyb3JNc2dbMF0gPSAnXDAnOw0KKyAgICAgICAgfQ0KICAgICAgIH0gICAgICAgCSAJ
CSAgICAgICAgICAgLyogc3RhbmRhcmQgZHVtcCBkb2VzLCBhbnl3YXlzICovDQogICAgICAgZWxz
ZSB7DQogICAgICAgCW9uZV9zdWNjZXNzID0gVFJVRTsNCkBAIC01ODIsMzggKzc0Nyw1MCBAQA0K
IA0KIC8qIER1bXAgYSB3aG9sZSB2b2x1bWUgKi8NCiBpbnQgRHVtcFZvbHVtZShyZWdpc3RlciBz
dHJ1Y3QgcnhfY2FsbCAqY2FsbCwgcmVnaXN0ZXIgVm9sdW1lICp2cCwNCi0JCSAgICAgIGFmc19p
bnQzMiBmcm9tdGltZSwgaW50IGR1bXBBbGxEaXJzKQ0KKwkJICAgICAgYWZzX2ludDMyIGZyb210
aW1lLCBpbnQgZHVtcEFsbERpcnMsDQorCQkgICAgICBpbnQgY29tcHJlc3MsIGludCBsZXZlbCkN
CiB7DQogICAgIHN0cnVjdCBpb2QgaW9kOw0KICAgICBpbnQgY29kZSA9IDA7DQogICAgIHJlZ2lz
dGVyIHN0cnVjdCBpb2QgKmlvZHAgPSAmaW9kOw0KLSAgICBpb2RfSW5pdChpb2RwLCBjYWxsKTsN
Ci0gICAgDQorDQorICAgIGlmIChpb2RfSW5pdChpb2RwLCBjYWxsLCBjb21wcmVzcywgbGV2ZWws
IERFRl9UT19XUklURSkhPTApDQorICAgICAgIHJldHVybiBWT0xTRVJEVU1QRVJST1I7IC8vZG9u
J3QgbmVlZCB0byBjYWxsIGlvZF9Eb25lIGluIHRoaXMgY2FzZQ0KKw0KICAgICBpZiAoIWNvZGUp
IGNvZGUgPSBEdW1wRHVtcEhlYWRlcihpb2RwLCB2cCwgZnJvbXRpbWUpOw0KLSAgICANCisNCiAg
ICAgaWYgKCFjb2RlKSBjb2RlID0gRHVtcFBhcnRpYWwoaW9kcCwgdnAsIGZyb210aW1lLCBkdW1w
QWxsRGlycyk7DQogICAgIA0KIC8qIGhhY2sgZm9sbG93cy4gIEVycm9ycyBzaG91bGQgYmUgaGFu
ZGxlZCBxdWl0ZSBkaWZmZXJlbnRseSBpbiB0aGlzIHZlcnNpb24gb2YgZHVtcCB0aGFuIHRoZXkg
dXNlZCB0byBiZS4qLw0KLSAgICBpZiAocnhfRXJyb3IoaW9kcC0+Y2FsbCkpIHsNCi0JTG9nKCIx
IFZvbHNlcjogRHVtcFZvbHVtZTogUnggY2FsbCBmYWlsZWQgZHVyaW5nIGR1bXAsIGVycm9yICVk
XG4iLCByeF9FcnJvcihpb2RwLT5jYWxsKSk7DQorICAgIGlmIChyeF9FcnJvcihpb2RwLT5jYWxs
LT5jYWxsKSkgew0KKwlMb2coIjEgVm9sc2VyOiBEdW1wVm9sdW1lOiBSeCBjYWxsIGZhaWxlZCBk
dXJpbmcgZHVtcCwgZXJyb3IgJWRcbiIsIHJ4X0Vycm9yKGlvZHAtPmNhbGwtPmNhbGwpKTsNCiAJ
cmV0dXJuIFZPTFNFUkRVTVBFUlJPUjsNCiAgICAgfQ0KICAgICBpZiAoIWNvZGUpIGNvZGUgPSBE
dW1wRW5kKGlvZHApOw0KKw0KKyAgICBpZiAoaW9kX0RvbmUoaW9kcCkhPTApDQorICAgICAgICBj
b2RlID0gVk9MU0VSRFVNUEVSUk9SOw0KICAgICANCiAgICAgcmV0dXJuIGNvZGU7DQogfQ0KIA0K
IC8qIER1bXAgYSB2b2x1bWUgdG8gbXVsdGlwbGUgcGxhY2VzKi8NCiBpbnQgRHVtcFZvbE11bHRp
KHN0cnVjdCByeF9jYWxsICoqY2FsbHMsIGludCBuY2FsbHMsIFZvbHVtZSAqdnAsDQotCQkgYWZz
X2ludDMyIGZyb210aW1lLCBpbnQgZHVtcEFsbERpcnMsIGludCAqY29kZXMpDQorCQkgYWZzX2lu
dDMyIGZyb210aW1lLCBpbnQgZHVtcEFsbERpcnMsIGludCAqY29kZXMsDQorCQkgaW50IGNvbXBy
ZXNzLCBpbnQgbGV2ZWwpDQogew0KICAgICBzdHJ1Y3QgaW9kIGlvZDsNCiAgICAgaW50IGNvZGUg
PSAwOw0KLSAgICBpb2RfSW5pdE11bHRpKCZpb2QsIGNhbGxzLCBuY2FsbHMsIGNvZGVzKTsNCisg
ICAgaWYgKGlvZF9Jbml0TXVsdGkoJmlvZCwgY2FsbHMsIG5jYWxscywgY29kZXMsIGNvbXByZXNz
LCBsZXZlbCwgREVGX1RPX1dSSVRFKSE9MCkNCisgICAgICByZXR1cm4gVk9MU0VSRFVNUEVSUk9S
OyAvL2Rvbid0IG5lZWQgdG8gY2FsbCBpb2RfRG9uZU11bHRpIGluIHRoaXMgY2FzZQ0KICAgICAN
CiAgICAgaWYgKCFjb2RlKSBjb2RlID0gRHVtcER1bXBIZWFkZXIoJmlvZCwgdnAsIGZyb210aW1l
KTsNCiAgICAgaWYgKCFjb2RlKSBjb2RlID0gRHVtcFBhcnRpYWwoJmlvZCwgdnAsIGZyb210aW1l
LCBkdW1wQWxsRGlycyk7DQogICAgIGlmICghY29kZSkgY29kZSA9IER1bXBFbmQoJmlvZCk7DQor
DQorICAgIGlmIChpb2RfRG9uZU11bHRpKCZpb2QpIT0wKQ0KKyAgICAgIGNvZGUgPSBWT0xTRVJE
VU1QRVJST1I7DQorDQogICAgIHJldHVybiBjb2RlOw0KIH0NCiANCkBAIC03NTgsNyArOTM1LDcg
QEANCiAJCSAgICBpZiAodm5vZGUtPnR5cGUgIT0gdk51bGwgJiYgVk5ESVNLX0dFVF9JTk8odm5v
ZGUpKSB7DQogCQkJY250MSsrOw0KIAkJCWlmIChEb0xvZ2dpbmcpIHsNCi0JCQkgICBMb2coIlJl
c3RvcmVWb2x1bWUgJWQgQ2xlYW51cDogUmVtb3Zpbmcgb2xkIHZub2RlPSVkIGlub2RlPSVkIHNp
emU9JWRcbiIsIA0KKwkJCSAgIExvZygiUmVzdG9yZVZvbHVtZSAlZCBDbGVhbnVwOiBSZW1vdmlu
ZyBvbGQgdm5vZGU9JWQgaW5vZGU9JWQgc2l6ZT0lZFxuIiwNCiAJCQkgICAgICAgVl9pZCh2cCks
IGJpdE51bWJlclRvVm5vZGVOdW1iZXIoaSxjbGFzcyksDQogCQkJICAgICAgIFZORElTS19HRVRf
SU5PKHZub2RlKSwgdm5vZGUtPmxlbmd0aCk7DQogCQkJfQ0KQEAgLTgxMCw3ICs5ODcsOCBAQA0K
IA0KIA0KIGludCBSZXN0b3JlVm9sdW1lKHJlZ2lzdGVyIHN0cnVjdCByeF9jYWxsICpjYWxsLCBW
b2x1bWUgKmF2cCwNCi0JCSAgaW50IGluY3JlbWVudGFsLCBzdHJ1Y3QgcmVzdG9yZUNvb2tpZSAq
Y29va2llKQ0KKwkJICBpbnQgaW5jcmVtZW50YWwsIHN0cnVjdCByZXN0b3JlQ29va2llICpjb29r
aWUsDQorCQkgIGludCBjb21wcmVzcywgaW50IGxldmVsKQ0KIHsNCiAgICAgVm9sdW1lRGlza0Rh
dGEgdm9sOw0KICAgICBzdHJ1Y3QgRHVtcEhlYWRlciBoZWFkZXI7DQpAQCAtODIzLDggKzEwMDEs
OSBAQA0KICAgICBpbnQgczE9MCwgczI9MCwgZGVsbz0wLCB0ZGVsbzsNCiAgICAgaW50IHRhZzsN
CiANCi0gICAgaW9kX0luaXQoaW9kcCwgY2FsbCk7DQotICAgIA0KKyAgICBpZiAoaW9kX0luaXQo
aW9kcCwgY2FsbCwgY29tcHJlc3MsIGxldmVsLCBERUZfVE9fUkVBRCkhPTApDQorICAgICAgIHJl
dHVybiBWT0xTRVJEVU1QRVJST1I7IC8vZG9uJ3QgbmVlZCB0byBjYWxsIGlvZF9Eb25lIGluIHRo
aXMgY2FzZQ0KKw0KICAgICB2cCA9IGF2cDsNCiAgICAgaWYgKCFSZWFkRHVtcEhlYWRlcihpb2Rw
LCAmaGVhZGVyKSl7DQogCUxvZygiMSBWb2xzZXI6IFJlc3RvcmVWb2x1bWU6IEVycm9yIHJlYWRp
bmcgaGVhZGVyIGZpbGUgZm9yIGR1bXA7IGFib3J0ZWRcbiIpOw0KQEAgLTg5Nyw2ICsxMDc2LDEw
IEBADQogICAgIC8qIEZyZWUgdGhlIG1hbGxvY2VkIHNwYWNlIGFib3ZlICovDQogICAgIGlmIChi
MSkgZnJlZSgoY2hhciAqKWIxKTsNCiAgICAgaWYgKGIyKSBmcmVlKChjaGFyICopYjIpOw0KKw0K
KyAgICBpZiAoaW9kX0RvbmUoaW9kcCkhPTApDQorICAgICAgICBlcnJvciA9IFZPTFNFUkRVTVBF
UlJPUjsNCisNCiAgICAgcmV0dXJuIGVycm9yOw0KIH0NCiANCmRpZmYgLU5hdXIgb3BlbmFmcy0x
LjIuMTMvc3JjL3ZvbHNlci9NYWtlZmlsZS5pbiBvcGVuYWZzLTEuMi4xM3ovc3JjL3ZvbHNlci9N
YWtlZmlsZS5pbg0KLS0tIG9wZW5hZnMtMS4yLjEzL3NyYy92b2xzZXIvTWFrZWZpbGUuaW4JMjAw
MS0wOS0xMCAyMjoyMToxMy4wMDAwMDAwMDAgKzAyMDANCisrKyBvcGVuYWZzLTEuMi4xM3ovc3Jj
L3ZvbHNlci9NYWtlZmlsZS5pbgkyMDA0LTEyLTI3IDE3OjAxOjE3LjAwMDAwMDAwMCArMDEwMA0K
QEAgLTM2LDEzICszNiwxMyBAQA0KIElOQ0xJQlM9LUwke1NSQ0RJUn0vbGliL2FmcyAtTCR7VE9Q
X0xJQkRJUn0NCiANCiBWSU5DTFM9JHtUT1BfSU5DRElSfS9hZnMvcGFydGl0aW9uLmggJHtUT1Bf
SU5DRElSfS9hZnMvdm9sdW1lLmggXA0KLQkke1RPUF9JTkNESVJ9L2Fmcy92bHNlcnZlci5oIHZv
bC5oIGR1bXAuaCB2b2xzZXIuaCAgbG9ja2RhdGEuaA0KKwkke1RPUF9JTkNESVJ9L2Fmcy92bHNl
cnZlci5oIHZvbC5oIGR1bXAuaCB2b2xzZXIuaCBsb2NrZGF0YS5oIHppb3J4LmgNCiANCiBSSU5D
TFM9JHtUT1BfSU5DRElSfS9yeC9yeC5oICR7VE9QX0lOQ0RJUn0vcngveGRyLmggXA0KICAgICAg
ICAke1RPUF9JTkNESVJ9L2Fmcy9rZXlzLmggJHtUT1BfSU5DRElSfS9hZnMvY2VsbGNvbmZpZy5o
IFwNCi0JJHtUT1BfSU5DRElSfS91YmlrLmggJHtUT1BfSU5DRElSfS9hZnMvY21kLmgNCisJJHtU
T1BfSU5DRElSfS91YmlrLmggJHtUT1BfSU5DRElSfS9hZnMvY21kLmggemlvcnguaA0KIA0KLUlO
VElOQ0xTPXZvbGludC5oIHZvbHNlci5oIA0KK0lOVElOQ0xTPXZvbGludC5oIHZvbHNlci5oIHpp
b3J4LmgNCiANCiBMSUJTPVwNCiAJJHtUT1BfTElCRElSfS9saWJhdWRpdC5hIFwNCkBAIC02Miwx
MSArNjIsMTQgQEANCiAJJHtUT1BfTElCRElSfS9saWJjb21fZXJyLmEgXA0KIAkke1RPUF9MSUJE
SVJ9L2xpYmthdXRoLmEgXA0KIAkke1RPUF9MSUJESVJ9L2xpYnVzZC5hIFwNCi0JJHtUT1BfTElC
RElSfS91dGlsLmENCisJJHtUT1BfTElCRElSfS91dGlsLmEgXA0KKwkvdXNyL2xpYi9saWJ6LmEg
XA0KKwkvdXNyL2xpYi9saWJiejIuYQ0KIA0KLVZTT0JKUz12c3Byb2NzLm8gdnN1dGlscy5vIGxv
Y2twcm9jcy5vIHZvbGludC54ZHIubyB2b2xlcnIubyANCisNCitWU09CSlM9dnNwcm9jcy5vIHZz
dXRpbHMubyBsb2NrcHJvY3MubyB2b2xpbnQueGRyLm8gdm9sZXJyLm8gemlvcngubw0KIFNPQkpT
PXZvbG1haW4ubyB2b2xwcm9jcy5vIHBoeXNpby5vIGNvbW1vbi5vIHZvbHRyYW5zLm8gdm9sZXJy
Lm8gXA0KLSB2b2xpbnQuY3MubyBkdW1wc3R1ZmYubyAgdm9saW50LnNzLm8gdm9saW50Lnhkci5v
DQorIHZvbGludC5jcy5vIGR1bXBzdHVmZi5vICB2b2xpbnQuc3MubyB2b2xpbnQueGRyLm8gemlv
cngubw0KIA0KIGFsbDogdm9sc2VydmVyIHZvcyByZXN0b3Jldm9sIFwNCiAJJHtUT1BfSU5DRElS
fS9hZnMvdm9sc2VyLmggXA0KQEAgLTExMiw2ICsxMTUsNyBAQA0KIHBoeXNpby5vOiBwaHlzaW8u
YyAke1ZJTkNMU30NCiBjb21tb24ubzogY29tbW9uLmMgJHtWSU5DTFN9DQogbG9ja3Byb2NzLm86
IGxvY2twcm9jcy5jICR7VklOQ0xTfSAke0lOVElOQ0xTfSAke1JJTkNMU30NCit6aW9yeC5vOiB6
aW9yeC5jIHppb3J4LmgNCiANCiAjDQogIyBJbnN0YWxsYXRpb24gdGFyZ2V0cw0KZGlmZiAtTmF1
ciBvcGVuYWZzLTEuMi4xMy9zcmMvdm9sc2VyL3ZvbGludC54ZyBvcGVuYWZzLTEuMi4xM3ovc3Jj
L3ZvbHNlci92b2xpbnQueGcNCi0tLSBvcGVuYWZzLTEuMi4xMy9zcmMvdm9sc2VyL3ZvbGludC54
ZwkyMDAwLTExLTA0IDExOjA2OjMzLjAwMDAwMDAwMCArMDEwMA0KKysrIG9wZW5hZnMtMS4yLjEz
ei9zcmMvdm9sc2VyL3ZvbGludC54ZwkyMDA0LTEyLTIxIDE1OjA0OjMzLjAwMDAwMDAwMCArMDEw
MA0KQEAgLTQ3LDYgKzQ3LDEwIEBADQogI2RlZmluZQkgICAgVk9MU0VUSU5GTwkJMTI2DQogI2Rl
ZmluZQkgICAgVk9MWExJU1RQQVJUSVRJT05TCTEyNw0KICNkZWZpbmUJICAgIFZPTEZPUldBUkRN
VUxUSVBMRSAgMTI4DQorI2RlZmluZQlWT0xSRVNUT1JFX1oJCTY1NTM1DQorI2RlZmluZSBWT0xG
T1JXQVJEX1oJCTY1NTM0DQorI2RlZmluZSBWT0xEVU1QX1oJCTY1NTMzDQorI2RlZmluZSBWT0xG
T1JXQVJETVVMVElQTEVfWgk2NTUzMg0KIA0KIGNvbnN0IFNJWkUgPSAxMDI0Ow0KIA0KQEAgLTM5
MCwzICszOTQsNDAgQEANCiAgIElOIHN0cnVjdCByZXN0b3JlQ29va2llICpjb29raWUsDQogICBP
VVQgbWFueVJlc3VsdHMgKnJlc3VsdHMNCiApID0gVk9MRk9SV0FSRE1VTFRJUExFOw0KKw0KK3By
b2MgUmVzdG9yZVooDQorICBJTiBhZnNfaW50MzIgdG9UcmFucywNCisgIElOIGFmc19pbnQzMiBm
bGFncywNCisgIElOIHN0cnVjdCByZXN0b3JlQ29va2llICpjb29raWUsDQorICBJTiBhZnNfaW50
MzIgY29tcHJlc3MsDQorICBJTiBhZnNfaW50MzIgbGV2ZWwNCispIHNwbGl0ID0gVk9MUkVTVE9S
RV9aOw0KKw0KK3Byb2MgRm9yd2FyZE11bHRpcGxlWigNCisgIElOIGFmc19pbnQzMiBmcm9tVHJh
bnMsDQorICBJTiBhZnNfaW50MzIgZnJvbURhdGUsDQorICBJTiBtYW55RGVzdHMgKmRlc3RpbmF0
aW9ucywNCisgIElOIGFmc19pbnQzMiBzcGFyZSwNCisgIElOIHN0cnVjdCByZXN0b3JlQ29va2ll
ICpjb29raWUsDQorICBPVVQgbWFueVJlc3VsdHMgKnJlc3VsdHMsDQorICBJTiBhZnNfaW50MzIg
Y29tcHJlc3MsDQorICBJTiBhZnNfaW50MzIgbGV2ZWwNCispID0gVk9MRk9SV0FSRE1VTFRJUExF
X1o7DQorDQorcHJvYyBGb3J3YXJkWigNCisgIElOIGFmc19pbnQzMiBmcm9tVHJhbnMsDQorICBJ
TiBhZnNfaW50MzIgZnJvbURhdGUsDQorICBJTiBzdHJ1Y3QgZGVzdFNlcnZlciAqZGVzdGluYXRp
b24sDQorICBJTiBhZnNfaW50MzIgZGVzdFRyYW5zLA0KKyAgSU4gc3RydWN0IHJlc3RvcmVDb29r
aWUgKmNvb2tpZSwNCisgIElOIGFmc19pbnQzMiBjb21wcmVzcywNCisgIElOIGFmc19pbnQzMiBs
ZXZlbA0KKykgPSBWT0xGT1JXQVJEX1o7DQorDQorcHJvYyBEdW1wWigNCisgIElOIGFmc19pbnQz
MiBmcm9tVHJhbnMsDQorICBJTiBhZnNfaW50MzIgZnJvbURhdGUsDQorICBJTiBhZnNfaW50MzIg
Y29tcHJlc3MsDQorICBJTiBhZnNfaW50MzIgbGV2ZWwNCispIHNwbGl0ID0gVk9MRFVNUF9aOw0K
Kw0KZGlmZiAtTmF1ciBvcGVuYWZzLTEuMi4xMy9zcmMvdm9sc2VyL3ZvbHByb2NzLmMgb3BlbmFm
cy0xLjIuMTN6L3NyYy92b2xzZXIvdm9scHJvY3MuYw0KLS0tIG9wZW5hZnMtMS4yLjEzL3NyYy92
b2xzZXIvdm9scHJvY3MuYwkyMDA0LTAxLTEwIDE4OjMwOjMwLjAwMDAwMDAwMCArMDEwMA0KKysr
IG9wZW5hZnMtMS4yLjEzei9zcmMvdm9sc2VyL3ZvbHByb2NzLmMJMjAwNC0xMi0yMSAxNToxMzoy
MS4wMDAwMDAwMDAgKzAxMDANCkBAIC0xMDM2LDIwICsxMDM2LDQzIEBADQogew0KICAgYWZzX2lu
dDMyIGNvZGU7DQogDQotICBjb2RlID0gVm9sRm9yd2FyZCAoYWNpZCwgZnJvbVRyYW5zLCBmcm9t
RGF0ZSwgZGVzdGluYXRpb24sIGRlc3RUcmFucyxjb29raWUpOw0KKyAgY29kZSA9IFZvbEZvcndh
cmQgKGFjaWQsIGZyb21UcmFucywgZnJvbURhdGUsIGRlc3RpbmF0aW9uLCBkZXN0VHJhbnMsIGNv
b2tpZSwNCisgIAkJMCwgMCk7DQorICBvc2lfYXVkaXRVKGFjaWQsIFZTX0ZvcndhcmRFdmVudCwg
Y29kZSwgQVVEX0xPTkcsIGZyb21UcmFucywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBVURfSE9TVCwgZGVzdGluYXRpb24tPmRlc3RIb3N0LA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVRF9MT05HLCBkZXN0VHJhbnMsIEFV
RF9FTkQpOw0KKyAgcmV0dXJuIGNvZGU7DQorfQ0KKw0KK2Fmc19pbnQzMiBTQUZTVm9sRm9yd2Fy
ZFogKGFjaWQsIGZyb21UcmFucywgZnJvbURhdGUsIGRlc3RpbmF0aW9uLCBkZXN0VHJhbnMsIGNv
b2tpZSwgY29tcHJlc3MsIGxldmVsKQ0KK3N0cnVjdCByeF9jYWxsICphY2lkOw0KK2Fmc19pbnQz
MiBmcm9tVHJhbnM7DQorYWZzX2ludDMyIGZyb21EYXRlOw0KK3N0cnVjdCBkZXN0U2VydmVyICpk
ZXN0aW5hdGlvbjsNCitzdHJ1Y3QgcmVzdG9yZUNvb2tpZSAqY29va2llOw0KK2Fmc19pbnQzMiBk
ZXN0VHJhbnM7DQorYWZzX2ludDMyIGNvbXByZXNzOw0KK2Fmc19pbnQzMiBsZXZlbDsNCit7DQor
ICBhZnNfaW50MzIgY29kZTsNCisNCisgIGNvZGUgPSBWb2xGb3J3YXJkIChhY2lkLCBmcm9tVHJh
bnMsIGZyb21EYXRlLCBkZXN0aW5hdGlvbiwgZGVzdFRyYW5zLGNvb2tpZSwNCisgIAkJKGludClj
b21wcmVzcywgKGludClsZXZlbCk7DQogICBvc2lfYXVkaXRVKGFjaWQsIFZTX0ZvcndhcmRFdmVu
dCwgY29kZSwgQVVEX0xPTkcsIGZyb21UcmFucywgDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQVVEX0hPU1QsIGRlc3RpbmF0aW9uLT5kZXN0SG9zdCwgDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVEX0xPTkcsIGRlc3RUcmFu
cywgQVVEX0VORCk7DQogICByZXR1cm4gY29kZTsNCiB9DQogDQotYWZzX2ludDMyIFZvbEZvcndh
cmQgKGFjaWQsIGZyb21UcmFucywgZnJvbURhdGUsIGRlc3RpbmF0aW9uLCBkZXN0VHJhbnMsY29v
a2llKQ0KK2Fmc19pbnQzMiBWb2xGb3J3YXJkIChhY2lkLCBmcm9tVHJhbnMsIGZyb21EYXRlLCBk
ZXN0aW5hdGlvbiwgZGVzdFRyYW5zLGNvb2tpZSxjb21wcmVzcyxsZXZlbCkNCiBzdHJ1Y3Qgcnhf
Y2FsbCAqYWNpZDsNCiBhZnNfaW50MzIgZnJvbVRyYW5zOw0KIGFmc19pbnQzMiBmcm9tRGF0ZTsN
CiBzdHJ1Y3QgZGVzdFNlcnZlciAqZGVzdGluYXRpb247DQogc3RydWN0IHJlc3RvcmVDb29raWUg
KmNvb2tpZTsNCi1hZnNfaW50MzIgZGVzdFRyYW5zOyANCithZnNfaW50MzIgZGVzdFRyYW5zOw0K
K2ludCBjb21wcmVzczsNCitpbnQgbGV2ZWw7DQogew0KICAgICByZWdpc3RlciBzdHJ1Y3Qgdm9s
c2VyX3RyYW5zICp0dDsNCiAgICAgcmVnaXN0ZXIgYWZzX2ludDMyIGNvZGU7DQpAQCAtMTA5Mywx
NSArMTExNiwyMyBAQA0KICAgICB0Y2FsbCA9IHJ4X05ld0NhbGwodGNvbik7DQogICAgIHR0LT5y
eENhbGxQdHIgPSB0Y2FsbDsNCiAgICAgLyogc3RhcnQgcmVzdG9yZSBnb2luZy4gIGZyb21kYXRl
ID09IDAgLS0+IGRvaW5nIGFuIGluY3JlbWVudGFsIGR1bXAvcmVzdG9yZSAqLw0KLSAgICBjb2Rl
ID0gU3RhcnRBRlNWb2xSZXN0b3JlKHRjYWxsLCBkZXN0VHJhbnMsIChmcm9tRGF0ZT8gMSA6IDAp
LGNvb2tpZSk7DQorICAgIGlmIChjb21wcmVzcykNCisJY29kZSA9IFN0YXJ0QUZTVm9sUmVzdG9y
ZVoodGNhbGwsIGRlc3RUcmFucywgKGZyb21EYXRlPyAxIDogMCksIGNvb2tpZSwgY29tcHJlc3Ms
IGxldmVsKTsNCisgICAgZWxzZQ0KKwljb2RlID0gU3RhcnRBRlNWb2xSZXN0b3JlKHRjYWxsLCBk
ZXN0VHJhbnMsIChmcm9tRGF0ZT8gMSA6IDApLCBjb29raWUpOw0KICAgICBpZiAoY29kZSkgew0K
IAlnb3RvIGZhaWw7DQogICAgIH0NCiANCiAgICAgLyogdGhlc2UgbmV4dCBjYWxscyBpbXBsaWN0
bHkgY2FsbCByeF9Xcml0ZSB3aGVuIHdyaXRpbmcgb3V0IGRhdGEgKi8NCi0gICAgY29kZSA9IER1
bXBWb2x1bWUodGNhbGwsIHZwLCBmcm9tRGF0ZSwgMCk7LyogbGFzdCBmaWVsZCA9IGRvbid0IGR1
bXAgYWxsIGRpcnMgKi8NCisgICAgY29kZSA9IER1bXBWb2x1bWUodGNhbGwsIHZwLCBmcm9tRGF0
ZSwgMCwgLyogbGFzdCBmaWVsZCA9IGRvbid0IGR1bXAgYWxsIGRpcnMgKi8NCisgICAgICAgIGNv
bXByZXNzLCBsZXZlbCk7DQogICAgIGlmIChjb2RlKSBnb3RvIGZhaWw7DQotICAgIEVuZEFGU1Zv
bFJlc3RvcmUodGNhbGwpOwkJICAgIC8qIHByb2JhYmx5IGRvZXNuJ3QgZG8gbXVjaCAqLw0KKyAg
ICBpZiAoY29tcHJlc3MpDQorCUVuZEFGU1ZvbFJlc3RvcmVaKHRjYWxsKTsNCisgICAgZWxzZQ0K
KwlFbmRBRlNWb2xSZXN0b3JlKHRjYWxsKTsJCSAgICAvKiBwcm9iYWJseSBkb2Vzbid0IGRvIG11
Y2ggKi8NCisNCiAgICAgdHQtPnJ4Q2FsbFB0ciA9IChzdHJ1Y3QgcnhfY2FsbCAqKTA7DQogICAg
IGNvZGUgPSByeF9FbmRDYWxsKHRjYWxsLCAwKTsNCiAgICAgcnhfRGVzdHJveUNvbm5lY3Rpb24o
dGNvbik7IC8qIGRvbmUgd2l0aCB0aGUgY29ubmVjdGlvbiAqLw0KQEAgLTExMzMsOCArMTE2NCw4
IEBADQogICogbmVlZCBqdXN0IGFuIGluY3JlbWVudGFsIChhbmQgZnJvbSB0aGUgc2FtZSB0aW1l
KSwgaWYgdGhhdCdzIA0KICAqIHdoYXQgd2UncmUgZG9pbmcuIA0KICAqLw0KLWFmc19pbnQzMiBT
QUZTVm9sRm9yd2FyZE11bHRpcGxlIChhY2lkLCBmcm9tVHJhbnMsIGZyb21EYXRlLCBkZXN0aW5h
dGlvbnMsIA0KLQkJCSAgICAgIHNwYXJlLCBjb29raWUsIHJlc3VsdHMpDQorYWZzX2ludDMyIFZv
bEZvcndhcmRNdWx0aXBsZUdlbmVyYWwgKGFjaWQsIGZyb21UcmFucywgZnJvbURhdGUsIGRlc3Rp
bmF0aW9ucywgDQorCQkJICAgICAgc3BhcmUsIGNvb2tpZSwgcmVzdWx0cywgY29tcHJlc3MsIGxl
dmVsKQ0KICAgICAgc3RydWN0IHJ4X2NhbGwgKmFjaWQ7DQogICAgICBhZnNfaW50MzIgZnJvbVRy
YW5zOw0KICAgICAgYWZzX2ludDMyIGZyb21EYXRlOw0KQEAgLTExNDIsNiArMTE3Myw4IEBADQog
ICAgICBtYW55RGVzdHMgKmRlc3RpbmF0aW9uczsNCiAgICAgIHN0cnVjdCByZXN0b3JlQ29va2ll
ICpjb29raWU7DQogICAgICBtYW55UmVzdWx0cyAqcmVzdWx0czsNCisgICAgIGludCBjb21wcmVz
czsNCisgICAgIGludCBsZXZlbDsNCiB7DQogICBhZnNfaW50MzIgc2VjdXJpdHlJbmRleDsNCiAg
IHN0cnVjdCByeF9zZWN1cml0eUNsYXNzICpzZWN1cml0eU9iamVjdDsNCkBAIC0xMTk2LDggKzEy
MjksMTIgQEANCiAgICAgICBpZiAoISh0Y2FsbHNbaV0gPSByeF9OZXdDYWxsKHRjb25zW2ldKSkp
DQogCWNvZGVzW2ldPUVOT1RDT05OOw0KICAgICAgIGVsc2Ugew0KLQljb2Rlc1tpXSA9IFN0YXJ0
QUZTVm9sUmVzdG9yZSh0Y2FsbHNbaV0sIGRlc3QtPnRyYW5zLA0KLQkJCQkgICAgICBpc19pbmNy
ZW1lbnRhbCxjb29raWUpOw0KKyAgICAgICAgaWYgKGNvbXByZXNzKQ0KKwkJY29kZXNbaV0gPSBT
dGFydEFGU1ZvbFJlc3RvcmVaKHRjYWxsc1tpXSwgZGVzdC0+dHJhbnMsDQorCQkJCQkJaXNfaW5j
cmVtZW50YWwsY29va2llLCBjb21wcmVzcywgbGV2ZWwpOw0KKwllbHNlDQorCQljb2Rlc1tpXSA9
IFN0YXJ0QUZTVm9sUmVzdG9yZSh0Y2FsbHNbaV0sIGRlc3QtPnRyYW5zLA0KKwkJCQkJCWlzX2lu
Y3JlbWVudGFsLGNvb2tpZSk7DQogCWlmIChjb2Rlc1tpXSkgew0KIAkgIHJ4X0VuZENhbGwgKHRj
YWxsc1tpXSwwKTsgdGNhbGxzW2ldID0gMDsNCiAJICByeF9EZXN0cm95Q29ubmVjdGlvbih0Y29u
c1tpXSk7IHRjb25zW2ldID0gMDsNCkBAIC0xMjA3LDcgKzEyNDQsNyBAQA0KICAgfQ0KICAgDQog
ICAvKiB0aGVzZSBuZXh0IGNhbGxzIGltcGxpY3RseSBjYWxsIHJ4X1dyaXRlIHdoZW4gd3JpdGlu
ZyBvdXQgZGF0YSAqLw0KLSAgY29kZSA9IER1bXBWb2xNdWx0aSh0Y2FsbHMsIGksIHZwLCBmcm9t
RGF0ZSwgMCwgY29kZXMpOw0KKyAgY29kZSA9IER1bXBWb2xNdWx0aSh0Y2FsbHMsIGksIHZwLCBm
cm9tRGF0ZSwgMCwgY29kZXMsIGNvbXByZXNzLCBsZXZlbCk7DQogICANCiANCiBmYWlsOg0KQEAg
LTEyMTUsNyArMTI1MiwxMCBAQA0KICAgICAgIHN0cnVjdCByZXBsaWNhICpkZXN0ID0gJihkZXN0
aW5hdGlvbnMtPm1hbnlEZXN0c192YWxbaV0pOw0KIA0KICAgICAgIGlmICghY29kZSAmJiB0Y2Fs
bHNbaV0gJiYgIWNvZGVzW2ldKSB7DQotICAgICAgICAgIEVuZEFGU1ZvbFJlc3RvcmUodGNhbGxz
W2ldKTsNCisgICAgICAgICAgaWYgKGNvbXByZXNzKQ0KKyAgICAgICAgICAgICAgRW5kQUZTVm9s
UmVzdG9yZVoodGNhbGxzW2ldKTsNCisgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgRW5k
QUZTVm9sUmVzdG9yZSh0Y2FsbHNbaV0pOw0KICAgICAgIH0NCiAgICAgICBpZiAodGNhbGxzW2ld
KSB7DQogICAgICAgICAgIGVjID0gcnhfRW5kQ2FsbCh0Y2FsbHNbaV0sIDApOw0KQEAgLTEyMzks
NiArMTI3OSwzNiBAQA0KICAgfQ0KICAgIA0KICAgcmV0dXJuIGNvZGU7DQorfSAvL1ZvbEZvcndh
cmRNdWx0aXBsZUdlbmVyYWwNCisNCithZnNfaW50MzIgU0FGU1ZvbEZvcndhcmRNdWx0aXBsZSAo
YWNpZCwgZnJvbVRyYW5zLCBmcm9tRGF0ZSwgZGVzdGluYXRpb25zLCANCisJCQkgICAgICBzcGFy
ZSwgY29va2llLCByZXN1bHRzKQ0KKyAgICAgc3RydWN0IHJ4X2NhbGwgKmFjaWQ7DQorICAgICBh
ZnNfaW50MzIgZnJvbVRyYW5zOw0KKyAgICAgYWZzX2ludDMyIGZyb21EYXRlOw0KKyAgICAgYWZz
X2ludDMyIHNwYXJlOw0KKyAgICAgbWFueURlc3RzICpkZXN0aW5hdGlvbnM7DQorICAgICBzdHJ1
Y3QgcmVzdG9yZUNvb2tpZSAqY29va2llOw0KKyAgICAgbWFueVJlc3VsdHMgKnJlc3VsdHM7DQor
ew0KKwlyZXR1cm4gVm9sRm9yd2FyZE11bHRpcGxlR2VuZXJhbChhY2lkLCBmcm9tVHJhbnMsIGZy
b21EYXRlLCBkZXN0aW5hdGlvbnMsDQorCQlzcGFyZSwgY29va2llLCByZXN1bHRzLCAwLCAwKTsN
Cit9DQorDQorYWZzX2ludDMyIFNBRlNWb2xGb3J3YXJkTXVsdGlwbGVaIChhY2lkLCBmcm9tVHJh
bnMsIGZyb21EYXRlLCBkZXN0aW5hdGlvbnMsDQorCQkJICAgICAgc3BhcmUsIGNvb2tpZSwgcmVz
dWx0cywgY29tcHJlc3MsIGxldmVsKQ0KKyAgICAgc3RydWN0IHJ4X2NhbGwgKmFjaWQ7DQorICAg
ICBhZnNfaW50MzIgZnJvbVRyYW5zOw0KKyAgICAgYWZzX2ludDMyIGZyb21EYXRlOw0KKyAgICAg
YWZzX2ludDMyIHNwYXJlOw0KKyAgICAgbWFueURlc3RzICpkZXN0aW5hdGlvbnM7DQorICAgICBz
dHJ1Y3QgcmVzdG9yZUNvb2tpZSAqY29va2llOw0KKyAgICAgbWFueVJlc3VsdHMgKnJlc3VsdHM7
DQorICAgICBhZnNfaW50MzIgY29tcHJlc3M7DQorICAgICBhZnNfaW50MzIgbGV2ZWw7DQorew0K
KwlyZXR1cm4gVm9sRm9yd2FyZE11bHRpcGxlR2VuZXJhbChhY2lkLCBmcm9tVHJhbnMsIGZyb21E
YXRlLCBkZXN0aW5hdGlvbnMsDQorCQlzcGFyZSwgY29va2llLCByZXN1bHRzLCAoaW50KWNvbXBy
ZXNzLCAoaW50KWxldmVsKTsNCiB9DQogDQogYWZzX2ludDMyIFNBRlNWb2xEdW1wIChhY2lkLCBm
cm9tVHJhbnMsIGZyb21EYXRlKQ0KQEAgLTEyNDgsMTUgKzEzMTgsMzEgQEANCiB7DQogICBhZnNf
aW50MzIgY29kZTsNCiANCi0gIGNvZGUgPSBWb2xEdW1wIChhY2lkLCBmcm9tVHJhbnMsIGZyb21E
YXRlKTsNCisgIGNvZGUgPSBWb2xEdW1wIChhY2lkLCBmcm9tVHJhbnMsIGZyb21EYXRlLCAwLCAw
KTsNCiAgIG9zaV9hdWRpdFUoYWNpZCwgVlNfRHVtcEV2ZW50LCBjb2RlLCBBVURfTE9ORywgZnJv
bVRyYW5zLCBBVURfRU5EKTsNCiAgIHJldHVybiBjb2RlOw0KIH0NCiANCi1hZnNfaW50MzIgVm9s
RHVtcCAoYWNpZCwgZnJvbVRyYW5zLCBmcm9tRGF0ZSkNCithZnNfaW50MzIgU0FGU1ZvbER1bXBa
IChhY2lkLCBmcm9tVHJhbnMsIGZyb21EYXRlLCBjb21wcmVzcywgbGV2ZWwpDQogc3RydWN0IHJ4
X2NhbGwgKmFjaWQ7DQogYWZzX2ludDMyIGZyb21UcmFuczsNCi1hZnNfaW50MzIgZnJvbURhdGU7
IA0KK2Fmc19pbnQzMiBmcm9tRGF0ZTsNCithZnNfaW50MzIgY29tcHJlc3M7DQorYWZzX2ludDMy
IGxldmVsOw0KK3sNCisgIGFmc19pbnQzMiBjb2RlOw0KKw0KKyAgY29kZSA9IFZvbER1bXAgKGFj
aWQsIGZyb21UcmFucywgZnJvbURhdGUsIChpbnQpY29tcHJlc3MsIChpbnQpbGV2ZWwpOw0KKyAg
b3NpX2F1ZGl0VShhY2lkLCBWU19EdW1wRXZlbnQsIGNvZGUsIEFVRF9MT05HLCBmcm9tVHJhbnMs
IEFVRF9FTkQpOw0KKyAgcmV0dXJuIGNvZGU7DQorfQ0KKw0KK2Fmc19pbnQzMiBWb2xEdW1wIChh
Y2lkLCBmcm9tVHJhbnMsIGZyb21EYXRlLCBjb21wcmVzcywgbGV2ZWwpDQorc3RydWN0IHJ4X2Nh
bGwgKmFjaWQ7DQorYWZzX2ludDMyIGZyb21UcmFuczsNCithZnNfaW50MzIgZnJvbURhdGU7DQor
aW50IGNvbXByZXNzOw0KK2ludCBsZXZlbDsNCiB7DQogICAgIGludCBjb2RlID0gMDsNCiAgICAg
cmVnaXN0ZXIgc3RydWN0IHZvbHNlcl90cmFucyAqdHQ7DQpAQCAtMTI3Miw3ICsxMzU4LDggQEAN
CiAgICAgfQ0KICAgICBzdHJjcHkodHQtPmxhc3RQcm9jTmFtZSwiRHVtcCIpOw0KICAgICB0dC0+
cnhDYWxsUHRyID0gYWNpZDsNCi0gICAgY29kZSA9IER1bXBWb2x1bWUoYWNpZCwgdHQtPnZvbHVt
ZSwgZnJvbURhdGUsIDEpOwkvKiBzcXVpcnQgb3V0IHRoZSB2b2x1bWUncyBkYXRhLCB0b28gKi8N
CisgICAgY29kZSA9IER1bXBWb2x1bWUoYWNpZCwgdHQtPnZvbHVtZSwgZnJvbURhdGUsIDEsCS8q
IHNxdWlydCBvdXQgdGhlIHZvbHVtZSdzIGRhdGEsIHRvbyAqLw0KKyAgICAJY29tcHJlc3MsIGxl
dmVsKTsNCiAgICAgaWYoY29kZSl7dHQtPnJ4Q2FsbFB0ciA9IChzdHJ1Y3QgcnhfY2FsbCAqKTA7
IFRSRUxFKHR0KTsgcmV0dXJuIGNvZGU7fQ0KICAgICB0dC0+cnhDYWxsUHRyID0gKHN0cnVjdCBy
eF9jYWxsICopMDsgDQogICAgIA0KQEAgLTEyOTIsMTYgKzEzNzksMzMgQEANCiB7DQogICBhZnNf
aW50MzIgY29kZTsNCiANCi0gIGNvZGUgPSBWb2xSZXN0b3JlIChhY2lkLCBhdHJhbnMsIGFmbGFn
cyxjb29raWUpOw0KKyAgY29kZSA9IFZvbFJlc3RvcmUgKGFjaWQsIGF0cmFucywgYWZsYWdzLGNv
b2tpZSwgMCwgMCk7DQogICBvc2lfYXVkaXRVKGFjaWQsIFZTX1Jlc3RvcmVFdmVudCwgY29kZSwg
QVVEX0xPTkcsIGF0cmFucywgQVVEX0VORCk7DQogICByZXR1cm4gY29kZTsNCiB9DQogDQotYWZz
X2ludDMyIFZvbFJlc3RvcmUgKGFjaWQsIGF0cmFucywgYWZsYWdzLGNvb2tpZSkNCithZnNfaW50
MzIgU0FGU1ZvbFJlc3RvcmVaIChhY2lkLCBhdHJhbnMsIGFmbGFncywgY29va2llLCBjb21wcmVz
cywgbGV2ZWwpDQogc3RydWN0IHJ4X2NhbGwgKmFjaWQ7DQogaW50IGFmbGFnczsNCi1hZnNfaW50
MzIgYXRyYW5zOyANCithZnNfaW50MzIgYXRyYW5zOw0KK3N0cnVjdCByZXN0b3JlQ29va2llICpj
b29raWU7DQorYWZzX2ludDMyIGNvbXByZXNzOw0KK2Fmc19pbnQzMiBsZXZlbDsNCit7DQorICBh
ZnNfaW50MzIgY29kZTsNCisNCisgIGNvZGUgPSBWb2xSZXN0b3JlIChhY2lkLCBhdHJhbnMsIGFm
bGFncyxjb29raWUsIChpbnQpY29tcHJlc3MsIChpbnQpbGV2ZWwpOw0KKyAgb3NpX2F1ZGl0VShh
Y2lkLCBWU19SZXN0b3JlRXZlbnQsIGNvZGUsIEFVRF9MT05HLCBhdHJhbnMsIEFVRF9FTkQpOw0K
KyAgcmV0dXJuIGNvZGU7DQorfQ0KKw0KK2Fmc19pbnQzMiBWb2xSZXN0b3JlIChhY2lkLCBhdHJh
bnMsIGFmbGFncyxjb29raWUsIGNvbXByZXNzLCBsZXZlbCkNCitzdHJ1Y3QgcnhfY2FsbCAqYWNp
ZDsNCitpbnQgYWZsYWdzOw0KK2Fmc19pbnQzMiBhdHJhbnM7DQogc3RydWN0IHJlc3RvcmVDb29r
aWUgKmNvb2tpZTsNCitpbnQgY29tcHJlc3M7DQoraW50IGxldmVsOw0KIHsNCiAgICAgcmVnaXN0
ZXIgc3RydWN0IHZvbHNlcl90cmFucyAqdHQ7DQogICAgIHJlZ2lzdGVyIGFmc19pbnQzMiBjb2Rl
LHRjb2RlOw0KQEAgLTEzMjAsNyArMTQyNCw4IEBADQogDQogICAgIERGbHVzaFZvbHVtZShWX3Bh
cmVudElkKHR0LT52b2x1bWUpKTsgLyogRW5zdXJlIGRpciBidWZmZXJzIGdldCBkcm9wcGVkICov
DQogDQotICAgIGNvZGUgPSBSZXN0b3JlVm9sdW1lKGFjaWQsIHR0LT52b2x1bWUsIChhZmxhZ3Mg
JiAxKSxjb29raWUpOyAgIC8qIGxhc3QgaXMgaW5jcmVtZW50YWxwICovDQorICAgIGNvZGUgPSBS
ZXN0b3JlVm9sdW1lKGFjaWQsIHR0LT52b2x1bWUsIChhZmxhZ3MgJiAxKSxjb29raWUsICAgLyog
bGFzdCBpcyBpbmNyZW1lbnRhbHAgKi8NCisJCWNvbXByZXNzLCBsZXZlbCk7DQogICAgIEZTWU5D
X2Fza2ZzKHR0LT52b2xpZCwgKGNoYXIgKikgMCwgRlNZTkNfUkVTVE9SRVZPTFVNRSwgMGwpOy8q
YnJlYWsgY2FsbCBiYWNrcyBvbiB0aGUNCiAJCQkJCQkgICAgIHJlc3RvcmVkIHZvbHVtZSAqLw0K
ICAgICB0dC0+cnhDYWxsUHRyID0gKHN0cnVjdCByeF9jYWxsICopMDsgDQpkaWZmIC1OYXVyIG9w
ZW5hZnMtMS4yLjEzL3NyYy92b2xzZXIvdm9zLmMgb3BlbmFmcy0xLjIuMTN6L3NyYy92b2xzZXIv
dm9zLmMNCi0tLSBvcGVuYWZzLTEuMi4xMy9zcmMvdm9sc2VyL3Zvcy5jCTIwMDItMTEtMTQgMjI6
NDA6NDMuMDAwMDAwMDAwICswMTAwDQorKysgb3BlbmFmcy0xLjIuMTN6L3NyYy92b2xzZXIvdm9z
LmMJMjAwNC0xMi0yNyAxNzoyNTo0Ny4wMDAwMDAwMDAgKzAxMDANCkBAIC01MSw2ICs1MSw4IEBA
DQogI2luY2x1ZGUgPHNpZ25hbC5oPg0KICNlbmRpZg0KIA0KKyNpbmNsdWRlICJ6aW9yeC5oIg0K
Kw0KIHN0cnVjdCB0cUVsZW0gew0KICAgICBhZnNfaW50MzIgdm9saWQ7DQogICAgIHN0cnVjdCB0
cUVsZW0gKm5leHQ7DQpAQCAtMjc0LDExICsyNzYsMTQgQEANCiANCiAgLypzZW5kcyB0aGUgY29u
dGVudHMgb2YgZmlsZSBhc3NvY2lhdGVkIHdpdGggPGZkPiBhbmQgPGJsa3NpemU+ICB0byBSeCBT
dHJlYW0gDQogKiBhc3NvY2lhdGVkICB3aXRoIDxjYWxsPiAqLw0KLVNlbmRGaWxlKHVmZCwgY2Fs
bCwgYmxrc2l6ZSkNCitTZW5kRmlsZSh1ZmQsIGNhbGwsIGJsa3NpemUsIGNvbXByZXNzLCBsZXZl
bCkNCiB1c2RfaGFuZGxlX3QgdWZkOw0KIHJlZ2lzdGVyIHN0cnVjdCByeF9jYWxsICpjYWxsOw0K
IGxvbmcgYmxrc2l6ZTsNCitpbnQgY29tcHJlc3M7DQoraW50IGxldmVsOw0KIHsNCisgICAgc3Ry
dWN0IHppb3J4X2NhbGwgemNhbGw7DQogICAgIGNoYXIgKmJ1ZmZlciA9IChjaGFyKikgMDsNCiAg
ICAgYWZzX2ludDMyIGVycm9yID0gMDsNCiAgICAgaW50IGRvbmUgPSAwOw0KQEAgLTI4OSw2ICsy
OTQsMTIgQEANCiAJZnByaW50ZihTVERFUlIsIm1hbGxvYyBmYWlsZWRcbiIpOw0KIAlyZXR1cm4g
LTE7DQogICAgIH0NCisgICAgDQorICAgIGlmICh6aW9yeEJlZ2luV3JpdGUoY2FsbCwgY29tcHJl
c3MsIGxldmVsLCAmemNhbGwpIT1aSU9SWF9PSykNCisgICAgew0KKyAgICAgICAgZnByaW50ZihT
VERFUlIsICJTZW5kRmlsZTogemlvcnhCZWdpblJlYWQgZmFpbGVkXG4iKTsNCisgICAgICAgIHJl
dHVybiAtMTsNCisgICAgfQ0KIA0KICAgICB3aGlsZSAoIWVycm9yICYmICFkb25lKSB7DQogI2lm
bmRlZiBBRlNfTlQ0MF9FTlYgIC8qIE5UIGNzbid0IHNlbGVjdCBvbiBub24tc29ja2V0IGZkJ3Mg
Ki8NCkBAIC0zMDcsMjAgKzMxOCwyOSBAQA0KIAkgICAgZG9uZSA9IDE7DQogCSAgICBicmVhazsN
CiAJfQ0KLQlpZiAocnhfV3JpdGUoY2FsbCwgYnVmZmVyLCBuYnl0ZXMpICE9IG5ieXRlcyl7DQor
CWlmICh6aW9yeFdyaXRlKCZ6Y2FsbCwgYnVmZmVyLCBuYnl0ZXMpICE9IG5ieXRlcyl7DQogCSAg
ICBlcnJvciA9IC0xOw0KIAkgICAgYnJlYWs7DQogCX0NCiAgICAgfQ0KKw0KKyAgICBpZiAoemlv
cnhFbmRXcml0ZSgmemNhbGwpIT1aSU9SWF9PSykNCisgICAgew0KKyAgICAgICAgZnByaW50ZihT
VERFUlIsICJTZW5kRmlsZTogemlvcnhFbmRXcml0ZSBmYWlsZWRcbiIpOw0KKyAgICAgICAgZXJy
b3IgPSAtMTsNCisgICAgfQ0KKw0KICAgICBpZiAoYnVmZmVyKSBmcmVlKGJ1ZmZlcik7DQogICAg
IHJldHVybiBlcnJvcjsNCiB9DQogDQogLyogZnVuY3Rpb24gaW52b2tlZCBieSBVVl9SZXN0b3Jl
Vm9sdW1lLCByZWFkcyB0aGUgZGF0YSBmcm9tIHJ4X3RyeF9zdHJlYW0gYW5kDQogICogd3JpdGVz
IGl0IG91dCB0byB0aGUgdm9sdW1lLiAqLw0KLWFmc19pbnQzMiBXcml0ZURhdGEoY2FsbCxyb2Nr
KQ0KK2Fmc19pbnQzMiBXcml0ZURhdGEoY2FsbCxyb2NrLGNvbXByZXNzLGxldmVsKQ0KIHN0cnVj
dCByeF9jYWxsICpjYWxsOw0KIGNoYXIgKnJvY2s7DQoraW50IGNvbXByZXNzOw0KK2ludCBsZXZl
bDsNCiB7DQogICAgIGNoYXIgKmZpbGVuYW1lOw0KICAgICB1c2RfaGFuZGxlX3QgdWZkOw0KQEAg
LTM0Nyw3ICszNjcsNyBAQA0KIAkgICAgZ290byB3ZmFpbDsNCiAgICAgICAgIH0NCiAgICAgfQ0K
LSAgICBjb2RlID0gU2VuZEZpbGUodWZkLGNhbGwsYmxrc2l6ZSk7DQorICAgIGNvZGUgPSBTZW5k
RmlsZSh1ZmQsY2FsbCxibGtzaXplLGNvbXByZXNzLGxldmVsKTsNCiAgICAgaWYoY29kZSkgew0K
IAllcnJvciA9IGNvZGU7DQogCWdvdG8gd2ZhaWw7DQpAQCAtMzY3LDExICszODcsMTQgQEANCiAv
KiBSZWNlaXZlIGRhdGEgZnJvbSA8Y2FsbD4gc3RyZWFtIGludG8gZmlsZSBhc3NvY2lhdGVkDQog
ICogd2l0aCA8ZmQ+IDxibGtzaXplPg0KICAqLw0KLWludCBSZWNlaXZlRmlsZSh1ZmQsIGNhbGws
IGJsa3NpemUpDQoraW50IFJlY2VpdmVGaWxlKHVmZCwgY2FsbCwgYmxrc2l6ZSwgY29tcHJlc3Ms
IGxldmVsKQ0KICAgICB1c2RfaGFuZGxlX3QgdWZkOw0KICAgICBzdHJ1Y3QgcnhfY2FsbCAqY2Fs
bDsNCiAgICAgbG9uZyBibGtzaXplOw0KKyAgICBpbnQgY29tcHJlc3M7DQorICAgIGludCBsZXZl
bDsNCiB7DQorICAgIHN0cnVjdCB6aW9yeF9jYWxsIHpjYWxsOw0KICAgICBjaGFyICpidWZmZXIg
PSAoY2hhciAqKSAwOw0KICAgICBhZnNfaW50MzIgIGJ5dGVzcmVhZDsNCiAgICAgYWZzX3VpbnQz
MiAgYnl0ZXNsZWZ0LCB3Ow0KQEAgLTM4MCwxMCArNDAzLDE3IEBADQogICAgIGJ1ZmZlciA9IChj
aGFyICopbWFsbG9jKGJsa3NpemUpOw0KICAgICBpZiAoIWJ1ZmZlcikgew0KICAgICAgICBmcHJp
bnRmKFNUREVSUiwibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsNCi0gICAgICAgRVJST1Jf
RVhJVCgtMSk7DQorICAgICAgIHJldHVybiAoLTEpOw0KKyAgICB9DQorDQorICAgIGlmICh6aW9y
eEJlZ2luUmVhZChjYWxsLCBjb21wcmVzcywgbGV2ZWwsICZ6Y2FsbCkhPVpJT1JYX09LKQ0KKyAg
ICB7DQorICAgICAgICBmcHJpbnRmKFNUREVSUiwgIlJlY2VpdmVGaWxlOiB6aW9yeEJlZ2luUmVh
ZCBmYWlsZWRcbiIpOw0KKwlmcmVlKGJ1ZmZlcik7DQorICAgICAgICByZXR1cm4gKC0xKTsNCiAg
ICAgfQ0KIA0KLSAgICB3aGlsZSAoKGJ5dGVzcmVhZD1yeF9SZWFkKGNhbGwsYnVmZmVyLGJsa3Np
emUpKSA+IDApIHsNCisgICAgd2hpbGUgKChieXRlc3JlYWQ9emlvcnhSZWFkKCZ6Y2FsbCxidWZm
ZXIsYmxrc2l6ZSkpID4gMCkgew0KICAgICAgICBmb3IgKGJ5dGVzbGVmdD1ieXRlc3JlYWQ7IGJ5
dGVzbGVmdDsgYnl0ZXNsZWZ0LT13KSB7DQogI2lmbmRlZiBBRlNfTlQ0MF9FTlYgIC8qIE5UIGNz
bid0IHNlbGVjdCBvbiBub24tc29ja2V0IGZkJ3MgKi8NCiAJICBmZF9zZXQgb3V0Ow0KQEAgLTQw
MCwxNCArNDMwLDI3IEBADQogICAgICAgIH0NCiAgICAgfQ0KIA0KKyAgICBpZiAoYnl0ZXNyZWFk
PDApDQorICAgIHsNCisJZnByaW50ZihzdGRlcnIsICJSZWFkIGVycm9yICglZClcbiIsIGJ5dGVz
cmVhZCk7DQorCUVSUk9SX0VYSVQoLTEpOw0KKyAgICB9DQorDQogICBlcnJvcl9leGl0Og0KKyAg
ICBpZiAoemlvcnhFbmRSZWFkKCZ6Y2FsbCkhPVpJT1JYX09LKQ0KKyAgICB7DQorICAgICAgICBm
cHJpbnRmKFNUREVSUiwgIlJlY2VpdmVGaWxlOiB6aW9yeEVuZFJlYWQgZmFpbGVkXG4iKTsNCisg
ICAgICAgIGVycm9yID0gLTE7DQorICAgIH0NCiAgICAgaWYgKGJ1ZmZlcikgZnJlZShidWZmZXIp
Ow0KICAgICByZXR1cm4oZXJyb3IpOw0KIH0NCiANCi1hZnNfaW50MzIgRHVtcEZ1bmN0aW9uKGNh
bGwsIGZpbGVuYW1lKQ0KK2Fmc19pbnQzMiBEdW1wRnVuY3Rpb24oY2FsbCwgZmlsZW5hbWUsIGNv
bXByZXNzLCBsZXZlbCkNCiAgICAgc3RydWN0IHJ4X2NhbGwgKmNhbGw7DQogICAgIGNoYXIgKmZp
bGVuYW1lOw0KKyAgICBpbnQgY29tcHJlc3M7DQorICAgIGludCBsZXZlbDsNCiB7DQogICAgIHVz
ZF9oYW5kbGVfdCB1ZmQ7ICAgICAgICAgICAgIC8qIGRlZmF1bHQgaXMgdG8gc3Rkb3V0ICovDQog
ICAgIGFmc19pbnQzMiBlcnJvcj0wLCBjb2RlOw0KQEAgLTQzNiw3ICs0NzksNyBAQA0KICAgICAg
ICAgfQ0KICAgICB9DQogDQotICAgIGNvZGUgPSBSZWNlaXZlRmlsZSh1ZmQsIGNhbGwsIGJsa3Np
emUpOw0KKyAgICBjb2RlID0gUmVjZWl2ZUZpbGUodWZkLCBjYWxsLCBibGtzaXplLCBjb21wcmVz
cywgbGV2ZWwpOw0KICAgICBpZiAoY29kZSkgRVJST1JfRVhJVChjb2RlKTsNCiANCiAgIGVycm9y
X2V4aXQ6DQpAQCAtMTY3OCwxMyArMTcyMSw0NCBAQA0KICAgICByZXR1cm4gMDsNCiB9DQogDQor
c3RhdGljIHZvaWQgUGFyc2VQYXJhbVoocGRaLCBwZEJaMiwgY29tcHJlc3MsIGxldmVsKQ0KKwkJ
c3RydWN0IGNtZF9wYXJtZGVzYyAqcGRaOw0KKwkJc3RydWN0IGNtZF9wYXJtZGVzYyAqcGRCWjI7
DQorCQlpbnQgKmNvbXByZXNzOw0KKwkJaW50ICpsZXZlbDsNCit7DQorCWlmIChwZFotPml0ZW1z
IT1OVUxMICYmIHBkQloyLT5pdGVtcz09TlVMTCkNCisJew0KKwkJKmNvbXByZXNzID0gWklPUlhf
Q09NUFJFU1NfWjsNCisJCSpsZXZlbCA9IHBkWi0+aXRlbXMtPmRhdGFbMF0gLSAnMCc7DQorCQlp
ZiAoKmxldmVsPDAgfHwgKmxldmVsPjkpDQorCQkJKmxldmVsID0gMDsNCisJfSBlbHNlDQorCWlm
IChwZEJaMi0+aXRlbXMhPU5VTEwpDQorCXsNCisJCSpjb21wcmVzcyA9IFpJT1JYX0NPTVBSRVNT
X0JaOw0KKwkJKmxldmVsID0gcGRCWjItPml0ZW1zLT5kYXRhWzBdIC0gJzAnOw0KKwkJaWYgKCps
ZXZlbDwxIHx8ICpsZXZlbD45KQ0KKwkJCSpsZXZlbCA9IDE7DQorCX0gZWxzZSB7DQorCQkqY29t
cHJlc3MgPSAwOw0KKwkJKmxldmVsID0gMDsNCisJfQ0KKw0KKwlpZiAoKmNvbXByZXNzIT1aSU9S
WF9DT01QUkVTU19OT05FKQ0KKwl7DQorCQlmcHJpbnRmKFNURE9VVCwgIlVzaW5nIGNvbXByZXNz
aW9uOiAlcywgbGV2ZWw6ICVkXG4iLA0KKwkJCSpjb21wcmVzcz09WklPUlhfQ09NUFJFU1NfWiA/
ICJ6IiA6ICJiejIiLCAqbGV2ZWwpOw0KKwl9DQorfQ0KKw0KICNkZWZpbmUgVEVTVE0JMAkvKiBz
ZXQgZm9yIG1vdmUgc3BhY2UgdGVzdHMsIGNsZWFyIGZvciBwcm9kdWN0aW9uICovDQogc3RhdGlj
IE1vdmVWb2x1bWUoYXMpDQogcmVnaXN0ZXIgc3RydWN0IGNtZF9zeW5kZXNjICphczsNCiB7DQot
ICAgIA0KICAgICBhZnNfaW50MzIgdm9saWQsIGZyb21zZXJ2ZXIsIHRvc2VydmVyLCBmcm9tcGFy
dCwgdG9wYXJ0LGNvZGUsIGVycjsNCiAgICAgY2hhciBmcm9tUGFydE5hbWVbMTBdLCB0b1BhcnRO
YW1lWzEwXTsNCisgICAgaW50IGNvbXByZXNzLCBsZXZlbDsNCiANCiAJc3RydWN0IGRpc2tQYXJ0
aXRpb24gcGFydGl0aW9uOwkJLyogZm9yIHNwYWNlIGNoZWNrICovDQogCXZvbGludEluZm8gKnA7
DQpAQCAtMTcyNiw3ICsxODAwLDcgQEANCiAJICAgIGVsc2UgZnByaW50ZihTVERFUlIsInZvcyA6
IHBhcnRpdGlvbiAlcyBkb2VzIG5vdCBleGlzdCBvbiB0aGUgc2VydmVyXG4iLGFzLT5wYXJtc1s0
XS5pdGVtcy0+ZGF0YSk7DQogCSAgICByZXR1cm4gRU5PRU5UOw0KIAl9DQotDQorCVBhcnNlUGFy
YW1aKCYoYXMtPnBhcm1zWzVdKSwgJihhcy0+cGFybXNbNl0pLCAmY29tcHJlc3MsICZsZXZlbCk7
DQogCS8qDQogCQljaGVjayBzb3VyY2UgcGFydGl0aW9uIGZvciBzcGFjZSB0byBjbG9uZSB2b2x1
bWUNCiAJKi8NCkBAIC0xNzc0LDggKzE4NDgsOCBAQA0KIAl9DQogDQogCS8qIHN1Y2Nlc3NmdWwg
bW92ZSBzdGlsbCBub3QgZ3VhcmFudGVlZCBidXQgc2hvb3QgZm9yIGl0ICovDQotDQotCWNvZGUg
PSBVVl9Nb3ZlVm9sdW1lKHZvbGlkLCBmcm9tc2VydmVyLCBmcm9tcGFydCwgdG9zZXJ2ZXIsIHRv
cGFydCk7DQorCWNvZGUgPSBVVl9Nb3ZlVm9sdW1lKHZvbGlkLCBmcm9tc2VydmVyLCBmcm9tcGFy
dCwgdG9zZXJ2ZXIsIHRvcGFydCwNCisJCWNvbXByZXNzLCBsZXZlbCk7DQogCWlmIChjb2RlKSB7
DQogCSAgICBQcmludERpYWdub3N0aWNzKCJtb3ZlIiwgY29kZSk7DQogCSAgICByZXR1cm4gY29k
ZTsNCkBAIC0xNzg2LDYgKzE4NjAsNyBAQA0KIA0KICAgICByZXR1cm4gMDsNCiB9DQorDQogc3Rh
dGljIEJhY2t1cFZvbHVtZShhcykNCiByZWdpc3RlciBzdHJ1Y3QgY21kX3N5bmRlc2MgKmFzOw0K
IHsNCkBAIC0xODUxLDEzICsxOTI2LDE0IEBADQogCWZwcmludGYoU1RET1VULCJDcmVhdGVkIGJh
Y2t1cCB2b2x1bWUgZm9yICVzIFxuIixhcy0+cGFybXNbMF0uaXRlbXMtPmRhdGEpOyANCiAgICBy
ZXR1cm4gMDsNCiB9DQorDQogc3RhdGljIFJlbGVhc2VWb2x1bWUoYXMpDQogcmVnaXN0ZXIgc3Ry
dWN0IGNtZF9zeW5kZXNjICphczsNCiB7DQotDQogICAgIHN0cnVjdCBudmxkYmVudHJ5IGVudHJ5
Ow0KICAgICBhZnNfaW50MzIgYXZvbGlkLCBhc2VydmVyLCBhcGFydCx2dHlwZSxjb2RlLCBlcnI7
DQogICAgIGludCBmb3JjZSA9IDA7DQorICAgIGludCBjb21wcmVzcywgbGV2ZWw7DQogDQogICAg
IGlmKGFzLT5wYXJtc1sxXS5pdGVtcykgZm9yY2UgPSAxOw0KICAgICBhdm9saWQgPSB2c3VfR2V0
Vm9sdW1lSUQoYXMtPnBhcm1zWzBdLml0ZW1zLT5kYXRhLCBjc3RydWN0LCAmZXJyKTsNCkBAIC0x
ODc5LDcgKzE5NTUsOSBAQA0KIAlyZXR1cm4gRTJCSUc7DQogICAgIH0NCiANCi0gICAgY29kZSA9
IFVWX1JlbGVhc2VWb2x1bWUoYXZvbGlkLCBhc2VydmVyLCBhcGFydCwgZm9yY2UpOw0KKyAgICBQ
YXJzZVBhcmFtWigmKGFzLT5wYXJtc1syXSksICYoYXMtPnBhcm1zWzNdKSwgJmNvbXByZXNzLCAm
bGV2ZWwpOw0KKw0KKyAgICBjb2RlID0gVVZfUmVsZWFzZVZvbHVtZShhdm9saWQsIGFzZXJ2ZXIs
IGFwYXJ0LCBmb3JjZSwgY29tcHJlc3MsIGxldmVsKTsNCiAgICAgaWYgKGNvZGUpIHsNCiAJUHJp
bnREaWFnbm9zdGljcygicmVsZWFzZSIsIGNvZGUpOw0KIAlyZXR1cm4gY29kZTsNCkBAIC0xODg3
LDEzICsxOTY1LDE0IEBADQogICAgIGZwcmludGYoU1RET1VULCJSZWxlYXNlZCB2b2x1bWUgJXMg
c3VjY2Vzc2Z1bGx5XG4iLGFzLT5wYXJtc1swXS5pdGVtcy0+ZGF0YSApOw0KICAgICByZXR1cm4g
MDsNCiB9DQorDQogc3RhdGljIER1bXBWb2x1bWUoYXMpDQogcmVnaXN0ZXIgc3RydWN0IGNtZF9z
eW5kZXNjICphczsNCi0NCiB7ICAgIA0KICAgICAgICAgYWZzX2ludDMyIGF2b2xpZCwgYXNlcnZl
ciwgYXBhcnQsdm9sdHlwZSxmcm9tZGF0ZT0wLGNvZGUsIGVyciwgaTsNCiAJY2hhciBmaWxlbmFt
ZVtOYW1lTGVuXTsNCiAJc3RydWN0IG52bGRiZW50cnkgZW50cnk7DQorCWludCBjb21wcmVzcywg
bGV2ZWw7DQogDQogCXJ4X1NldFJ4RGVhZFRpbWUoNjAgKiAxMCk7DQogCWZvciAoaSA9IDA7IGk8
TUFYU0VSVkVSUzsgaSsrKSB7DQpAQCAtMTk0NCw3ICsyMDIzLDExIEBADQogCWVsc2V7DQogCSAg
ICBzdHJjcHkoZmlsZW5hbWUsIiIpOw0KIAl9DQotCWNvZGUgPSBVVl9EdW1wVm9sdW1lKGF2b2xp
ZCwgYXNlcnZlciwgYXBhcnQsIGZyb21kYXRlLCBEdW1wRnVuY3Rpb24sIGZpbGVuYW1lKTsNCisJ
DQorCVBhcnNlUGFyYW1aKCYoYXMtPnBhcm1zWzVdKSwgJihhcy0+cGFybXNbNl0pLCAmY29tcHJl
c3MsICZsZXZlbCk7DQorCQ0KKwljb2RlID0gVVZfRHVtcFZvbHVtZShhdm9saWQsIGFzZXJ2ZXIs
IGFwYXJ0LCBmcm9tZGF0ZSwgRHVtcEZ1bmN0aW9uLCBmaWxlbmFtZSwNCisJCWNvbXByZXNzLCBs
ZXZlbCk7DQogCWlmIChjb2RlKSB7DQogCSAgICBQcmludERpYWdub3N0aWNzKCJkdW1wIiwgY29k
ZSk7DQogCSAgICByZXR1cm4gY29kZTsNCkBAIC0xOTcyLDYgKzIwNTUsNyBAQA0KIAljaGFyIGFm
aWxlbmFtZVtOYW1lTGVuXSwgYXZvbG5hbWVbVk9MU0VSX01BWFZPTE5BTUUgKzFdLGFwYXJ0TmFt
ZVsxMF07DQogCWNoYXIgdm9sbmFtZVtWT0xTRVJfTUFYVk9MTkFNRSArMV07DQogCXN0cnVjdCBu
dmxkYmVudHJ5IGVudHJ5Ow0KKwlpbnQgY29tcHJlc3MsIGxldmVsOw0KIA0KIAlwcm9tcHQgPSAn
bic7DQogDQpAQCAtMjE0NCw4ICsyMjI4LDExIEBADQogCX0NCiAJaWYgKG9mZmxpbmUpICByZXN0
b3JlZmxhZ3MgfD0gUlZfT0ZGTElORTsNCiAJaWYgKHJlYWRvbmx5KSByZXN0b3JlZmxhZ3MgfD0g
UlZfUkRPTkxZOw0KKwlQYXJzZVBhcmFtWigmKGFzLT5wYXJtc1s4XSksICYoYXMtPnBhcm1zWzld
KSwgJmNvbXByZXNzLCAmbGV2ZWwpOw0KKw0KIAljb2RlID0gVVZfUmVzdG9yZVZvbHVtZShhc2Vy
dmVyLCBhcGFydCwgYXZvbGlkLCBhdm9sbmFtZSwNCi0JCQkJcmVzdG9yZWZsYWdzLCBXcml0ZURh
dGEsIGFmaWxlbmFtZSk7DQorCQkJCXJlc3RvcmVmbGFncywgV3JpdGVEYXRhLCBhZmlsZW5hbWUs
DQorCQkJCWNvbXByZXNzLCBsZXZlbCk7DQogCWlmIChjb2RlKSB7DQogCSAgICBQcmludERpYWdu
b3N0aWNzKCJyZXN0b3JlIiwgY29kZSk7DQogCSAgICBleGl0KDEpOw0KQEAgLTQwOTQsNiArNDE4
MSw4IEBADQogICAgIGNtZF9BZGRQYXJtKHRzLCAiLWZyb21wYXJ0aXRpb24iLCBDTURfU0lOR0xF
LCAwLCAicGFydGl0aW9uIG5hbWUgb24gc291cmNlIik7DQogICAgIGNtZF9BZGRQYXJtKHRzLCAi
LXRvc2VydmVyIiwgQ01EX1NJTkdMRSwgMCwgIm1hY2hpbmUgbmFtZSBvbiBkZXN0aW5hdGlvbiIp
Ow0KICAgICBjbWRfQWRkUGFybSh0cywgIi10b3BhcnRpdGlvbiIsIENNRF9TSU5HTEUsIDAsICJw
YXJ0aXRpb24gbmFtZSBvbiBkZXN0aW5hdGlvbiIpOw0KKyAgICBjbWRfQWRkUGFybSh0cywgIi16
IiwgQ01EX1NJTkdMRSwgQ01EX09QVElPTkFMLCAiY29tcHJlc3Npb24gbGV2ZWwiKTsNCisgICAg
Y21kX0FkZFBhcm0odHMsICItYnoyIiwgQ01EX1NJTkdMRSwgQ01EX09QVElPTkFMLCAiY29tcHJl
c3Npb24gbGV2ZWwiKTsNCiAgICAgQ09NTU9OUEFSTVM7DQogDQogICAgIHRzID0gY21kX0NyZWF0
ZVN5bnRheCgiYmFja3VwIiwgQmFja3VwVm9sdW1lLCAwLCAibWFrZSBiYWNrdXAgb2YgYSB2b2x1
bWUiKTsNCkBAIC00MTAzLDYgKzQxOTIsOCBAQA0KICAgICB0cyA9IGNtZF9DcmVhdGVTeW50YXgo
InJlbGVhc2UiLCBSZWxlYXNlVm9sdW1lLCAwLCAicmVsZWFzZSBhIHZvbHVtZSIpOw0KICAgICBj
bWRfQWRkUGFybSh0cywgIi1pZCIsIENNRF9TSU5HTEUsIDAsICJ2b2x1bWUgbmFtZSBvciBJRCIp
Ow0KICAgICBjbWRfQWRkUGFybSh0cywgIi1mb3JjZSIsIENNRF9GTEFHLCBDTURfT1BUSU9OQUws
ICJmb3JjZSBhIGNvbXBsZXRlIHJlbGVhc2UiKTsNCisgICAgY21kX0FkZFBhcm0odHMsICIteiIs
IENNRF9TSU5HTEUsIENNRF9PUFRJT05BTCwgImNvbXByZXNzaW9uIGxldmVsIik7DQorICAgIGNt
ZF9BZGRQYXJtKHRzLCAiLWJ6MiIsIENNRF9TSU5HTEUsIENNRF9PUFRJT05BTCwgImNvbXByZXNz
aW9uIGxldmVsIik7DQogICAgIENPTU1PTlBBUk1TOw0KIA0KICAgICB0cyA9IGNtZF9DcmVhdGVT
eW50YXgoImR1bXAiLCBEdW1wVm9sdW1lLCAwLCAiZHVtcCBhIHZvbHVtZSIpOw0KQEAgLTQxMTEs
NiArNDIwMiw4IEBADQogICAgIGNtZF9BZGRQYXJtKHRzLCAiLWZpbGUiLCBDTURfU0lOR0xFLCBD
TURfT1BUSU9OQUwsICJkdW1wIGZpbGUiKTsNCiAgICAgY21kX0FkZFBhcm0odHMsICItc2VydmVy
IiwgQ01EX1NJTkdMRSwgQ01EX09QVElPTkFMLCAic2VydmVyIik7DQogICAgIGNtZF9BZGRQYXJt
KHRzLCAiLXBhcnRpdGlvbiIsIENNRF9TSU5HTEUsIENNRF9PUFRJT05BTCwgInBhcnRpdGlvbiIp
Ow0KKyAgICBjbWRfQWRkUGFybSh0cywgIi16IiwgQ01EX1NJTkdMRSwgQ01EX09QVElPTkFMLCAi
Y29tcHJlc3Npb24gbGV2ZWwiKTsNCisgICAgY21kX0FkZFBhcm0odHMsICItYnoyIiwgQ01EX1NJ
TkdMRSwgQ01EX09QVElPTkFMLCAiY29tcHJlc3Npb24gbGV2ZWwiKTsNCiAgICAgQ09NTU9OUEFS
TVM7DQogDQogICAgIHRzID0gY21kX0NyZWF0ZVN5bnRheCgicmVzdG9yZSIsIFJlc3RvcmVWb2x1
bWUsIDAsICJyZXN0b3JlIGEgdm9sdW1lIik7DQpAQCAtNDEyNCw2ICs0MjE3LDggQEANCiAJCSJs
ZWF2ZSByZXN0b3JlZCB2b2x1bWUgb2ZmbGluZSIpOw0KICAgICBjbWRfQWRkUGFybSh0cywgIi1y
ZWFkb25seSIsIENNRF9GTEFHLCBDTURfT1BUSU9OQUwsDQogCQkibWFrZSByZXN0b3JlZCB2b2x1
bWUgcmVhZC1vbmx5Iik7DQorICAgIGNtZF9BZGRQYXJtKHRzLCAiLXoiLCBDTURfU0lOR0xFLCBD
TURfT1BUSU9OQUwsICJjb21wcmVzc2lvbiBsZXZlbCIpOw0KKyAgICBjbWRfQWRkUGFybSh0cywg
Ii1iejIiLCBDTURfU0lOR0xFLCBDTURfT1BUSU9OQUwsICJjb21wcmVzc2lvbiBsZXZlbCIpOw0K
ICAgICBDT01NT05QQVJNUzsNCiANCiAgICAgdHMgPSBjbWRfQ3JlYXRlU3ludGF4KCJ1bmxvY2si
LCBMb2NrUmVsZWFzZUNtZCwgMCwgInJlbGVhc2UgbG9jayBvbiBWTERCIGVudHJ5IGZvciBhIHZv
bHVtZSIpOw0KZGlmZiAtTmF1ciBvcGVuYWZzLTEuMi4xMy9zcmMvdm9sc2VyL3ZzcHJvY3MuYyBv
cGVuYWZzLTEuMi4xM3ovc3JjL3ZvbHNlci92c3Byb2NzLmMNCi0tLSBvcGVuYWZzLTEuMi4xMy9z
cmMvdm9sc2VyL3ZzcHJvY3MuYwkyMDA0LTEwLTE4IDA3OjIzOjEzLjAwMDAwMDAwMCArMDIwMA0K
KysrIG9wZW5hZnMtMS4yLjEzei9zcmMvdm9sc2VyL3ZzcHJvY3MuYwkyMDA0LTEyLTIxIDE1OjEx
OjQ5LjAwMDAwMDAwMCArMDEwMA0KQEAgLTg0MywxMCArODQzLDEyIEBADQogICogPGF0b3BhcnQ+
LiBUaGUgb3BlcmF0aW9uIGlzIGFsbW9zdCBpZGVtcG90ZW50IA0KICAqLw0KIA0KLVVWX01vdmVW
b2x1bWUoYWZyb212b2wsIGFmcm9tc2VydmVyLCBhZnJvbXBhcnQsIGF0b3NlcnZlciwgYXRvcGFy
dCkNCitVVl9Nb3ZlVm9sdW1lKGFmcm9tdm9sLCBhZnJvbXNlcnZlciwgYWZyb21wYXJ0LCBhdG9z
ZXJ2ZXIsIGF0b3BhcnQsIGNvbXByZXNzLCBsZXZlbCkNCiAgICAgIGFmc19pbnQzMiBhZnJvbXZv
bDsgDQogICAgICBhZnNfaW50MzIgYWZyb21zZXJ2ZXIsIGF0b3NlcnZlcjsNCiAgICAgIGFmc19p
bnQzMiBhZnJvbXBhcnQsICAgYXRvcGFydDsNCisgICAgIGludCBjb21wcmVzczsNCisgICAgIGlu
dCBsZXZlbDsNCiB7DQogICAgIHN0cnVjdCByeF9jb25uZWN0aW9uICp0b2Nvbm4sICpmcm9tY29u
biA7DQogICAgIGFmc19pbnQzMiAgICAgICAgICAgICAgICBmcm9tdGlkLCB0b3RpZCwgY2xvbmV0
aWQ7DQpAQCAtMTE0OCw3ICsxMTUwLDEwIEBADQogICAgIGNvb2tpZS50eXBlICAgPSBSV1ZPTDsN
CiAgICAgY29va2llLnBhcmVudCA9IGVudHJ5LnZvbHVtZUlkW1JXVk9MXTsNCiAgICAgY29va2ll
LmNsb25lICA9IDA7DQotICAgIGNvZGUgPSBBRlNWb2xGb3J3YXJkKGZyb21jb25uLCBjbG9uZXRp
ZCwgMCwgJmRlc3RpbmF0aW9uLCB0b3RpZCwgJmNvb2tpZSk7DQorICAgIGlmIChjb21wcmVzcykN
CisgICAgICAgIGNvZGUgPSBBRlNWb2xGb3J3YXJkWihmcm9tY29ubiwgY2xvbmV0aWQsIDAsICZk
ZXN0aW5hdGlvbiwgdG90aWQsICZjb29raWUsIGNvbXByZXNzLCBsZXZlbCk7DQorICAgIGVsc2UN
CisgICAgICAgIGNvZGUgPSBBRlNWb2xGb3J3YXJkKGZyb21jb25uLCBjbG9uZXRpZCwgMCwgJmRl
c3RpbmF0aW9uLCB0b3RpZCwgJmNvb2tpZSk7DQogICAgIE9ORVJSIChjb2RlLCAiRmFpbGVkIHRv
IG1vdmUgZGF0YSBmb3IgdGhlIHZvbHVtZSAldVxuIiwgdm9saWQpOw0KICAgICBpZiAodmVyYm9z
ZSkgZnByaW50ZihTVERPVVQsIiBkb25lXG4iKTsNCiANCkBAIC0xMTcwLDcgKzExNzUsMTAgQEAN
CiAgICAgT05FUlIgKGNvZGUsICJGYWlsZWQgdG8gY3JlYXRlIGEgdHJhbnNhY3Rpb24gb24gdGhl
IHNvdXJjZSB2b2x1bWUgJXVcbiIsIGFmcm9tdm9sKTsNCiANCiAgICAgLyogbm93IGRvIHRoZSBp
bmNyZW1lbnRhbCAqLw0KLSAgICBjb2RlID0gQUZTVm9sRm9yd2FyZChmcm9tY29ubiwgZnJvbXRp
ZCwgZnJvbURhdGUsICZkZXN0aW5hdGlvbiwgdG90aWQsJmNvb2tpZSk7DQorICAgIGlmIChjb21w
cmVzcykNCisgICAgICAgIGNvZGUgPSBBRlNWb2xGb3J3YXJkWihmcm9tY29ubiwgZnJvbXRpZCwg
ZnJvbURhdGUsICZkZXN0aW5hdGlvbiwgdG90aWQsJmNvb2tpZSwgY29tcHJlc3MsIGxldmVsKTsN
CisgICAgZWxzZQ0KKyAgICAgICAgY29kZSA9IEFGU1ZvbEZvcndhcmQoZnJvbWNvbm4sIGZyb210
aWQsIGZyb21EYXRlLCAmZGVzdGluYXRpb24sIHRvdGlkLCZjb29raWUpOw0KICAgICBPTkVSUiAo
Y29kZSwgIkZhaWxlZCB0byBkbyB0aGUgaW5jcmVtZW50YWwgZHVtcCBmcm9tIHJ3IHZvbHVtZSBv
biBvbGQgc2l0ZSB0byBydyB2b2x1bWUgb24gbmV3c2l0ZVxuIiwgMCk7DQogICAgIGlmICh2ZXJi
b3NlKWZwcmludGYoU1RET1VULCIgZG9uZVxuIik7DQogDQpAQCAtMTg4NCwxOSArMTg5MiwyNyBA
QA0KIH0NCiANCiBzdGF0aWMgaW50IFNpbXVsYXRlRm9yd2FyZE11bHRpcGxlKGZyb21jb25uLCBm
cm9tdGlkLCBmcm9tZGF0ZSwgdHIsDQotCQkJCSAgIGZsYWdzLCBjb29raWUsIHJlc3VsdHMpDQor
CQkJCSAgIGZsYWdzLCBjb29raWUsIHJlc3VsdHMsIGNvbXByZXNzLCBsZXZlbCkNCiBzdHJ1Y3Qg
cnhfY29ubmVjdGlvbiAqZnJvbWNvbm47DQogYWZzX2ludDMyIGZyb210aWQsIGZyb21kYXRlLCBm
bGFnczsNCiBtYW55RGVzdHMgKnRyOw0KIHZvaWQgKmNvb2tpZTsNCiBtYW55UmVzdWx0cyAqcmVz
dWx0czsNCitpbnQgY29tcHJlc3M7DQoraW50IGxldmVsOw0KIHsNCiAgIGludCBpOw0KIA0KICAg
Zm9yIChpPTA7IGk8dHItPm1hbnlEZXN0c19sZW47IGkrKykgew0KLSAgICAgcmVzdWx0cy0+bWFu
eVJlc3VsdHNfdmFsW2ldID0gQUZTVm9sRm9yd2FyZChmcm9tY29ubiwgZnJvbXRpZCwNCi0JCQkJ
ICAgIGZyb21kYXRlLCAmKHRyLT5tYW55RGVzdHNfdmFsW2ldLnNlcnZlciksIA0KLQkJCQkgICAg
dHItPm1hbnlEZXN0c192YWxbaV0udHJhbnMsIGNvb2tpZSk7DQorICAgICBpZiAoY29tcHJlc3Mp
IHsNCisJcmVzdWx0cy0+bWFueVJlc3VsdHNfdmFsW2ldID0gQUZTVm9sRm9yd2FyZFooZnJvbWNv
bm4sIGZyb210aWQsDQorCQkJCQlmcm9tZGF0ZSwgJih0ci0+bWFueURlc3RzX3ZhbFtpXS5zZXJ2
ZXIpLCANCisJCQkJCXRyLT5tYW55RGVzdHNfdmFsW2ldLnRyYW5zLCBjb29raWUsIGNvbXByZXNz
LCBsZXZlbCk7DQorICAgICB9IGVsc2Ugew0KKwlyZXN1bHRzLT5tYW55UmVzdWx0c192YWxbaV0g
PSBBRlNWb2xGb3J3YXJkKGZyb21jb25uLCBmcm9tdGlkLA0KKwkJCQkJZnJvbWRhdGUsICYodHIt
Pm1hbnlEZXN0c192YWxbaV0uc2VydmVyKSwgDQorCQkJCQl0ci0+bWFueURlc3RzX3ZhbFtpXS50
cmFucywgY29va2llKTsNCisgICAgIH0NCiAgIH0NCiAgIHJldHVybiAwOw0KIH0NCkBAIC0xOTIy
LDExICsxOTM4LDEzIEBADQogICogICAgdGhlIHRpbWU6IEluZmx1ZW5jZXMgd2hlbiB3ZSB3cml0
ZSBiYWNrIHRoZSBWTERCIGVudHJ5Lg0KICAqLw0KIA0KLVVWX1JlbGVhc2VWb2x1bWUoYWZyb212
b2wsIGFmcm9tc2VydmVyLCBhZnJvbXBhcnQsIGZvcmNlZmxhZykNCitVVl9SZWxlYXNlVm9sdW1l
KGFmcm9tdm9sLCBhZnJvbXNlcnZlciwgYWZyb21wYXJ0LCBmb3JjZWZsYWcsIGNvbXByZXNzLCBs
ZXZlbCkNCiAgICAgIGFmc19pbnQzMiBhZnJvbXNlcnZlcjsNCiAgICAgIGFmc19pbnQzMiBhZnJv
bXBhcnQ7DQogICAgICBhZnNfaW50MzIgYWZyb212b2w7IA0KICAgICAgaW50IGZvcmNlZmxhZzsN
CisgICAgIGludCBjb21wcmVzczsNCisgICAgIGludCBsZXZlbDsNCiB7DQogICBjaGFyIHZuYW1l
WzY0XTsNCiAgIGFmc19pbnQzMiBjb2RlLCB2Y29kZSwgcmNvZGUsIHRjb2RlOw0KQEAgLTIyNjcs
OSArMjI4NSwxMyBAQA0KICAgICAgLyogUmVsZWFzZSB0aGUgb25lcyB3ZSBoYXZlIGNvbGxlY3Rl
ZCAqLw0KICAgICAgdHIubWFueURlc3RzX3ZhbCA9ICYocmVwbGljYXNbMF0pOw0KICAgICAgdHIu
bWFueURlc3RzX2xlbiA9IHJlc3VsdHMubWFueVJlc3VsdHNfbGVuID0gdm9sY291bnQ7DQotICAg
ICBjb2RlID0gQUZTVm9sRm9yd2FyZE11bHRpcGxlKGZyb21jb25uLCBmcm9tdGlkLCBmcm9tZGF0
ZSwgJnRyLCAwLypzcGFyZSovLCAmY29va2llLCAmcmVzdWx0cyk7DQorICAgICBpZiAoY29tcHJl
c3MpDQorCSBjb2RlID0gQUZTVm9sRm9yd2FyZE11bHRpcGxlWihmcm9tY29ubiwgZnJvbXRpZCwg
ZnJvbWRhdGUsICZ0ciwgMC8qc3BhcmUqLywgJmNvb2tpZSwgJnJlc3VsdHMsIGNvbXByZXNzLCBs
ZXZlbCk7DQorICAgICBlbHNlDQorCSBjb2RlID0gQUZTVm9sRm9yd2FyZE11bHRpcGxlKGZyb21j
b25uLCBmcm9tdGlkLCBmcm9tZGF0ZSwgJnRyLCAwLypzcGFyZSovLCAmY29va2llLCAmcmVzdWx0
cyk7DQogICAgICBpZiAoY29kZSA9PSBSWEdFTl9PUENPREUpIHsgICAgICAgICAgICAgICAvKiBS
UEMgSW50ZXJmYWNlIE1pc21hdGNoICovDQotICAgICAgICBjb2RlID0gU2ltdWxhdGVGb3J3YXJk
TXVsdGlwbGUoZnJvbWNvbm4sIGZyb210aWQsIGZyb21kYXRlLCAmdHIsIDAvKnNwYXJlKi8sICZj
b29raWUsICZyZXN1bHRzKTsNCisgICAgICAgIGNvZGUgPSBTaW11bGF0ZUZvcndhcmRNdWx0aXBs
ZShmcm9tY29ubiwgZnJvbXRpZCwgZnJvbWRhdGUsICZ0ciwgMC8qc3BhcmUqLywgJmNvb2tpZSwg
JnJlc3VsdHMsDQorCSAgICBjb21wcmVzcywgbGV2ZWwpOw0KIAluc2VydmVycyA9IDE7DQogICAg
ICB9DQogDQpAQCAtMjQ2NiwxMyArMjQ4OCwxNSBAQA0KICAqIER1bXBGdW5jdGlvbiBkb2VzIHRo
ZSByZWFsIHdvcmsgYmVoaW5kIHRoZSBzY2VuZXMgYWZ0ZXINCiAgKiBleHRyYWN0aW5nIHBhcmFt
ZXRlcnMgZnJvbSB0aGUgcm9jayANCiAgKi8NCi1VVl9EdW1wVm9sdW1lKGFmcm9tdm9sLCBhZnJv
bXNlcnZlciwgYWZyb21wYXJ0LCBmcm9tZGF0ZSwgRHVtcEZ1bmN0aW9uLCByb2NrKQ0KK1VWX0R1
bXBWb2x1bWUoYWZyb212b2wsIGFmcm9tc2VydmVyLCBhZnJvbXBhcnQsIGZyb21kYXRlLCBEdW1w
RnVuY3Rpb24sIHJvY2ssIGNvbXByZXNzLCBsZXZlbCkNCiAgICBhZnNfaW50MzIgYWZyb21zZXJ2
ZXI7DQogICAgYWZzX2ludDMyIGFmcm9tcGFydDsNCiAgICBhZnNfaW50MzIgYWZyb212b2w7DQog
ICAgYWZzX2ludDMyIGZyb21kYXRlOw0KICAgIGFmc19pbnQzMiAoKkR1bXBGdW5jdGlvbikoKTsN
CiAgICBjaGFyICpyb2NrOw0KKyAgIGludCBjb21wcmVzczsNCisgICBpbnQgbGV2ZWw7DQogew0K
ICAgIHN0cnVjdCByeF9jb25uZWN0aW9uICpmcm9tY29ubiA9IChzdHJ1Y3QgcnhfY29ubmVjdGlv
biAqKTA7DQogICAgc3RydWN0IHJ4X2NhbGwgICAgICAgKmZyb21jYWxsID0gKHN0cnVjdCByeF9j
YWxsICopMDsNCkBAIC0yNTAzLDEyICsyNTI3LDE1IEBADQogICAgfQ0KIA0KICAgIGZyb21jYWxs
ID0gcnhfTmV3Q2FsbChmcm9tY29ubik7DQotICAgY29kZSA9IFN0YXJ0QUZTVm9sRHVtcChmcm9t
Y2FsbCwgZnJvbXRpZCwgZnJvbWRhdGUpOw0KKyAgIGlmIChjb21wcmVzcykNCisJY29kZSA9IFN0
YXJ0QUZTVm9sRHVtcFooZnJvbWNhbGwsIGZyb210aWQsIGZyb21kYXRlLCBjb21wcmVzcywgbGV2
ZWwpOw0KKyAgIGVsc2UNCisJY29kZSA9IFN0YXJ0QUZTVm9sRHVtcChmcm9tY2FsbCwgZnJvbXRp
ZCwgZnJvbWRhdGUpOw0KICAgIGlmIChjb2RlKSB7DQogICAgICAgZnByaW50ZihTVERFUlIsIkNv
dWxkIG5vdCBzdGFydCB0aGUgZHVtcCBwcm9jZXNzIFxuIik7DQogICAgICAgRVJST1JfRVhJVChj
b2RlKTsNCiAgICB9DQotICAgaWYgKGNvZGUgPSBEdW1wRnVuY3Rpb24oZnJvbWNhbGwsIHJvY2sp
KSB7DQorICAgaWYgKGNvZGUgPSBEdW1wRnVuY3Rpb24oZnJvbWNhbGwsIHJvY2ssIGNvbXByZXNz
LCBsZXZlbCkpIHsNCiAgICAgICBmcHJpbnRmKFNUREVSUiwiRXJyb3Igd2hpbGUgZHVtcGluZyB2
b2x1bWUgXG4iKTsNCiAgICAgICBFUlJPUl9FWElUKGNvZGUpOw0KICAgIH0NCkBAIC0yNTQ0LDEy
ICsyNTcxLDE0IEBADQogICogdGhlIGR1bXAgZmlsZSA8YWZpbGVuYW1lPi4gV3JpdGVEYXRhIGRv
ZXMgYWxsIHRoZSByZWFsIHdvcmsNCiAgKiBhZnRlciBleHRyYWN0aW5nIHBhcmFtcyBmcm9tIHRo
ZSByb2NrIA0KICAqLw0KLVVWX1Jlc3RvcmVWb2x1bWUodG9zZXJ2ZXIsIHRvcGFydCwgdG92b2xp
ZCwgdG92b2xuYW1lLCBmbGFncywgV3JpdGVEYXRhLCByb2NrKQ0KK1VWX1Jlc3RvcmVWb2x1bWUo
dG9zZXJ2ZXIsIHRvcGFydCwgdG92b2xpZCwgdG92b2xuYW1lLCBmbGFncywgV3JpdGVEYXRhLCBy
b2NrLCBjb21wcmVzcywgbGV2ZWwpDQogICAgIGFmc19pbnQzMiB0b3NlcnZlciwgdG9wYXJ0LCB0
b3ZvbGlkOw0KICAgICBjaGFyIHRvdm9sbmFtZVtdOw0KICAgICBpbnQgZmxhZ3M7DQogICAgIGFm
c19pbnQzMiAoKldyaXRlRGF0YSkoKTsNCiAgICAgY2hhciAqcm9jazsNCisgICAgaW50IGNvbXBy
ZXNzOw0KKyAgICBpbnQgbGV2ZWw7DQogew0KICAgICBzdHJ1Y3QgcnhfY29ubmVjdGlvbiAqdG9j
b25uLCp0ZW1wY29ubjsNCiAgICAgc3RydWN0IHJ4X2NhbGwgKnRvY2FsbDsNCkBAIC0yNjgzLDEz
ICsyNzEyLDE2IEBADQogICAgIHN0cm5jcHkoY29va2llLm5hbWUsdG92b2xuYW1lLFZPTFNFUl9P
TERNQVhWT0xOQU1FKTsNCiANCiAgICAgdG9jYWxsID0gcnhfTmV3Q2FsbCh0b2Nvbm4pOw0KLSAg
ICB0ZXJyb3IgPSBTdGFydEFGU1ZvbFJlc3RvcmUodG9jYWxsLHRvdGlkLCAxLCZjb29raWUpOw0K
KyAgICBpZiAoY29tcHJlc3MpDQorCXRlcnJvciA9IFN0YXJ0QUZTVm9sUmVzdG9yZVoodG9jYWxs
LHRvdGlkLCAxLCZjb29raWUsIGNvbXByZXNzLCBsZXZlbCk7DQorICAgIGVsc2UNCisJdGVycm9y
ID0gU3RhcnRBRlNWb2xSZXN0b3JlKHRvY2FsbCx0b3RpZCwgMSwmY29va2llKTsNCiAgICAgaWYo
dGVycm9yKSB7DQogCWZwcmludGYoU1RERVJSLCJWb2x1bWUgcmVzdG9yZSBGYWlsZWQgXG4iKTsN
CiAJZXJyb3IgPSB0ZXJyb3I7DQogCWdvdG8gcmVmYWlsOw0KICAgICB9DQotICAgIGNvZGUgPSBX
cml0ZURhdGEodG9jYWxsLCByb2NrKTsNCisgICAgY29kZSA9IFdyaXRlRGF0YSh0b2NhbGwsIHJv
Y2ssIGNvbXByZXNzLCBsZXZlbCk7DQogICAgIGlmKGNvZGUpIHsNCiAJZnByaW50ZihTVERFUlIs
IkNvdWxkIG5vdCB0cmFuc21pdCBkYXRhXG4iKTsNCiAJZXJyb3IgPSBjb2RlOw0KZGlmZiAtTmF1
ciBvcGVuYWZzLTEuMi4xMy9zcmMvdm9sc2VyL3ppb3J4LmMgb3BlbmFmcy0xLjIuMTN6L3NyYy92
b2xzZXIvemlvcnguYw0KLS0tIG9wZW5hZnMtMS4yLjEzL3NyYy92b2xzZXIvemlvcnguYwkxOTcw
LTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMA0KKysrIG9wZW5hZnMtMS4yLjEzei9zcmMv
dm9sc2VyL3ppb3J4LmMJMjAwNC0xMi0yOCAxNTo0NjoxMS4wMDAwMDAwMDAgKzAxMDANCkBAIC0w
LDAgKzEsNzk5IEBADQorI2luY2x1ZGUgInppb3J4LmgiDQorI2luY2x1ZGUgPHJ4L3hkci5oPg0K
KyNpbmNsdWRlIDxyeC9yeC5oPg0KKyNpbmNsdWRlIDxzdGRpby5oPg0KKw0KKyNpbmNsdWRlICJ6
bGliLmgiDQorI2luY2x1ZGUgImJ6bGliLmgiDQorDQorI2RlZmluZSBaSU9SWF9UUlVFIDENCisj
ZGVmaW5lIFpJT1JYX0ZBTFNFIDANCisNCisvLyNkZWZpbmUgWklPUlhfREVCVUcNCisNCitzdGF0
aWMgdm9pZCBoYW5kbGVFcnJvcihzdHJ1Y3QgemlvcnhfY2FsbCAqemNhbGwsIGNvbnN0IGNoYXIg
Km1lc3NhZ2UsIGNvbnN0IGNoYXIgKnJlYXNvbikNCit7DQorCWludCBubGVuOw0KKwljaGFyICpw
IDsNCisNCisJaWYgKHpjYWxsIT1OVUxMKQ0KKwl7DQorCQlzdHJuY3B5KHpjYWxsLT5sYXN0RXJy
b3JNc2csIG1lc3NhZ2UsIFpJT1JYX0NBTExfRVJST1JfQlVGU0laRSk7DQorCQl6Y2FsbC0+bGFz
dEVycm9yTXNnW1pJT1JYX0NBTExfRVJST1JfQlVGU0laRS0xXSA9ICdcMCc7DQorDQorCQkvL2Fw
cGVuZCBzYWZlbHkgIjogIg0KKwkJbmxlbiA9IHN0cmxlbih6Y2FsbC0+bGFzdEVycm9yTXNnKTsJ
Ly9sZW5ndGggc28gZmFyDQorCQlwID0gemNhbGwtPmxhc3RFcnJvck1zZyArIG5sZW47DQorCQlz
dHJuY3B5KHAsICI6ICIsIFpJT1JYX0NBTExfRVJST1JfQlVGU0laRSAtIG5sZW4pOw0KKwkJemNh
bGwtPmxhc3RFcnJvck1zZ1taSU9SWF9DQUxMX0VSUk9SX0JVRlNJWkUtMV0gPSAnXDAnOw0KKw0K
KwkJaWYgKHJlYXNvbiE9TlVMTCkNCisJCXsNCisJCQlpZiAobmxlbjxaSU9SWF9DQUxMX0VSUk9S
X0JVRlNJWkUpDQorCQkJew0KKwkJCQlubGVuID0gc3RybGVuKHpjYWxsLT5sYXN0RXJyb3JNc2cp
OwkvL2xlbmd0aCBzbyBmYXINCisJCQkJcCA9IHpjYWxsLT5sYXN0RXJyb3JNc2cgKyBubGVuOwkv
L3doZXJlIHRvIGFwcGVuZCByZWFzb24NCisJCQkJc3RybmNweShwLCByZWFzb24sIFpJT1JYX0NB
TExfRVJST1JfQlVGU0laRSAtIG5sZW4pOw0KKwkJCQl6Y2FsbC0+bGFzdEVycm9yTXNnW1pJT1JY
X0NBTExfRVJST1JfQlVGU0laRS0xXSA9ICdcMCc7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8v
Zm9yIGFsbCB0aGUgY2FzZXM6DQorCWZwcmludGYoc3RkZXJyLCAiJXM6ICVzXG4iLCBtZXNzYWdl
LCByZWFzb24pOw0KK30NCisNCisvL3RoaXMgc2hvdWxkIGhhdmUgYmVlbiBwYXJ0IG9mIGJ6bGli
IGludGVyZmFjZS4uLg0KK3N0YXRpYyBjaGFyICp6aW9yeF9iekVycm9yKGludCBjb2RlKQ0KK3sN
CisJY2hhciAqYnVmID0gbWFsbG9jKFpJT1JYX0NBTExfRVJST1JfQlVGU0laRSk7DQorCWlmIChi
dWY9PU5VTEwpDQorCQlyZXR1cm4gIm1lbW9yeSBlcnJvciI7DQorCW1lbXNldChidWYsIDAsIFpJ
T1JYX0NBTExfRVJST1JfQlVGU0laRSk7DQorCXN3aXRjaChjb2RlKQ0KKwl7DQorCQljYXNlIEJa
X09LOg0KKwkJCXNwcmludGYoYnVmLCAiQlpfT0siKTsNCisJCQlicmVhazsNCisJCWNhc2UgQlpf
RkxVU0hfT0s6DQorCQkJc3ByaW50ZihidWYsICJCWl9GTFVTSF9PSyIpOw0KKwkJCWJyZWFrOw0K
KwkJY2FzZSBCWl9GSU5JU0hfT0s6DQorCQkJc3ByaW50ZihidWYsICJCWl9GSU5JU0hfT0siKTsN
CisJCQlicmVhazsNCisJCWNhc2UgQlpfU1RSRUFNX0VORDoNCisJCQlzcHJpbnRmKGJ1ZiwgIkJa
X1NUUkVBTV9FTkQiKTsNCisJCQlicmVhazsNCisJCWNhc2UgQlpfU0VRVUVOQ0VfRVJST1I6DQor
CQkJc3ByaW50ZihidWYsICJCWl9TRVFVRU5DRV9FUlJPUiIpOw0KKwkJCWJyZWFrOw0KKwkJY2Fz
ZSBCWl9QQVJBTV9FUlJPUjoNCisJCQlzcHJpbnRmKGJ1ZiwgIkJaX1BBUkFNX0VSUk9SIik7DQor
CQkJYnJlYWs7DQorCQljYXNlIEJaX01FTV9FUlJPUjoNCisJCQlzcHJpbnRmKGJ1ZiwgIkJaX01F
TV9FUlJPUiIpOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSBCWl9EQVRBX0VSUk9SOg0KKwkJCXNwcmlu
dGYoYnVmLCAiQlpfREFUQV9FUlJPUiIpOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSBCWl9EQVRBX0VS
Uk9SX01BR0lDOg0KKwkJCXNwcmludGYoYnVmLCAiQlpfREFUQV9FUlJPUl9NQUdJQyIpOw0KKwkJ
CWJyZWFrOw0KKwkJY2FzZSBCWl9JT19FUlJPUjoNCisJCQlzcHJpbnRmKGJ1ZiwgIkJaX0lPX0VS
Uk9SIik7DQorCQkJYnJlYWs7DQorCQljYXNlIEJaX1VORVhQRUNURURfRU9GOg0KKwkJCXNwcmlu
dGYoYnVmLCAiQlpfVU5FWFBFQ1RFRF9FT0YiKTsNCisJCQlicmVhazsNCisJCWNhc2UgQlpfT1VU
QlVGRl9GVUxMOg0KKwkJCXNwcmludGYoYnVmLCAiQlpfT1VUQlVGRl9GVUxMIik7DQorCQkJYnJl
YWs7DQorCQljYXNlIEJaX0NPTkZJR19FUlJPUjoNCisJCQlzcHJpbnRmKGJ1ZiwgIkJaX0NPTkZJ
R19FUlJPUiIpOw0KKwkJCWJyZWFrOw0KKwkJZGVmYXVsdDoNCisJCQlzcHJpbnRmKGJ1ZiwgImJ6
IHVua25vd24gKCVkKSIsIGNvZGUpOw0KKwkJCWJyZWFrOw0KKwl9DQorCXJldHVybiBidWY7DQor
fQ0KKw0KK3N0YXRpYyB2b2lkIGhhbmRsZUJaRXJyb3Ioc3RydWN0IHppb3J4X2NhbGwgKnpjYWxs
LCBjb25zdCBjaGFyICptZXNzYWdlLCBpbnQgY29kZSkNCit7DQorCWNoYXIgKmJ6RXJyb3I7DQor
DQorCWJ6RXJyb3I9emlvcnhfYnpFcnJvcihjb2RlKTsNCisJaWYgKGJ6RXJyb3IhPU5VTEwpDQor
CXsNCisJCWhhbmRsZUVycm9yKHpjYWxsLCBtZXNzYWdlLCBiekVycm9yKTsNCisJCWZyZWUoYnpF
cnJvcik7DQorCX0gZWxzZSB7DQorCQloYW5kbGVFcnJvcih6Y2FsbCwgbWVzc2FnZSwgIm1lbW9y
eSBhbGxvY2F0aW9uIGVycm9uIik7DQorCX0NCit9DQorDQorDQorc3RhdGljIGludCB6aW9yeEJl
Z2luKHN0cnVjdCByeF9jYWxsICpjYWxsLCBpbnQgY29tcHJlc3Npb24sIGludCBsZXZlbCwgc3Ry
dWN0IHppb3J4X2NhbGwgKnpjYWxsLCBpbnQgdG9Xcml0ZSkNCit7DQorCWludCBlcnI7DQorCWNo
YXIgKmJ6RXJyb3I7DQorDQorCWlmIChjYWxsPT1OVUxMIHx8IHpjYWxsPT1OVUxMKQ0KKwl7DQor
CQloYW5kbGVFcnJvcih6Y2FsbCwgInppb3J4QmVnaW4iLCAiTlVMTCBwYXJhbXMiKTsNCisJCXJl
dHVybiBaSU9SWF9GQUlMOw0KKwl9DQorDQorCWlmIChjb21wcmVzc2lvbjwwIHx8IGNvbXByZXNz
aW9uPjIpDQorCXsNCisJCWhhbmRsZUVycm9yKHpjYWxsLCAiemlvcnhCZWdpbiIsICJpbnZhbGlk
IHBhcmFtOiBjb21wcmVzc2lvbiB0eXBlIG5vdCBzdXBwb3J0ZWQgLSBvbmx5IHswLCAxLCAyfSIp
Ow0KKwkJcmV0dXJuIFpJT1JYX0ZBSUw7DQorCX0NCisNCisJbWVtc2V0KHpjYWxsLCAwLCBzaXpl
b2Yoc3RydWN0IHppb3J4X2NhbGwpKTsNCisNCisJemNhbGwtPmNvbXByZXNzaW9uID0gY29tcHJl
c3Npb247IC8vMD1kb24ndCBjb21wcmVzcywgMT1jb21wcmVzcw0KKwl6Y2FsbC0+Y2FsbCA9IGNh
bGw7DQorCWlmIChjb21wcmVzc2lvbiE9WklPUlhfQ09NUFJFU1NfTk9ORSkNCisJew0KKwkJaWYg
KGNvbXByZXNzaW9uPT1aSU9SWF9DT01QUkVTU19aKQ0KKwkJCXpjYWxsLT5zdHJlYW0gPSAodm9p
ZCAqKW1hbGxvYyhzaXplb2Yoel9zdHJlYW0pKTsNCisJCWVsc2UNCisJCQl6Y2FsbC0+c3RyZWFt
ID0gKHZvaWQgKiltYWxsb2Moc2l6ZW9mKGJ6X3N0cmVhbSkpOw0KKw0KKwkJaWYgKHpjYWxsLT5z
dHJlYW09PU5VTEwpDQorCQl7DQorCQkJaGFuZGxlRXJyb3IoemNhbGwsICJ6aW9yeEJlZ2luIiwg
Im1lbW9yeSBhbGxvY2F0aW9uIGVycm9uIik7DQorCQkJZ290byBmYWlsOw0KKwkJfQ0KKw0KKwkJ
aWYgKHRvV3JpdGUpDQorCQkJemNhbGwtPmJ1ZiA9IChjaGFyICopbWFsbG9jKFpJT1JYX09VVF9C
VUZTSVpFKTsNCisJCWVsc2UNCisJCQl6Y2FsbC0+YnVmID0gKGNoYXIgKiltYWxsb2MoWklPUlhf
SU5fQlVGU0laRSk7DQorCQlpZiAoemNhbGwtPmJ1Zj09TlVMTCkNCisJCXsNCisJCQloYW5kbGVF
cnJvcih6Y2FsbCwgInppb3J4QmVnaW4iLCAibWVtb3J5IGFsbG9jYXRpb24gZXJyb24iKTsNCisJ
CQlnb3RvIGZhaWw7DQorCQl9DQorDQorCQl6Y2FsbC0+bGV2ZWwgPSBsZXZlbDsJLy9jb21wcmVz
c2lvbiBsZXZlbA0KKw0KKwkJaWYgKGNvbXByZXNzaW9uPT1aSU9SWF9DT01QUkVTU19aKQ0KKwkJ
ew0KKwkJCSgoel9zdHJlYW0gKikoemNhbGwtPnN0cmVhbSkpLT56YWxsb2MgPSAoYWxsb2NfZnVu
YykwOw0KKwkJCSgoel9zdHJlYW0gKikoemNhbGwtPnN0cmVhbSkpLT56ZnJlZSA9IChmcmVlX2Z1
bmMpMDsNCisJCQkoKHpfc3RyZWFtICopKHpjYWxsLT5zdHJlYW0pKS0+b3BhcXVlID0gKHZvaWRw
ZikwOw0KKwkJfSBlbHNlIHsNCisJCQkoKGJ6X3N0cmVhbSAqKSh6Y2FsbC0+c3RyZWFtKSktPmJ6
YWxsb2MgPSBOVUxMOw0KKwkJCSgoYnpfc3RyZWFtICopKHpjYWxsLT5zdHJlYW0pKS0+YnpmcmVl
ID0gTlVMTDsNCisJCQkoKGJ6X3N0cmVhbSAqKSh6Y2FsbC0+c3RyZWFtKSktPm9wYXF1ZSA9IE5V
TEw7DQorCQl9DQorDQorCQlpZiAodG9Xcml0ZT09WklPUlhfVFJVRSkNCisJCXsNCisJCQlpZiAo
Y29tcHJlc3Npb249PVpJT1JYX0NPTVBSRVNTX1opDQorCQkJew0KKwkJCQllcnIgPSBkZWZsYXRl
SW5pdCgoel9zdHJlYW0gKikoemNhbGwtPnN0cmVhbSksIGxldmVsKTsNCisJCQkJaWYgKGVyciE9
Wl9PSykNCisJCQkJew0KKwkJCQkJaGFuZGxlRXJyb3IoemNhbGwsICJkZWZsYXRlSW5pdCBlcnJv
ciIsIHpFcnJvcihlcnIpKTsNCisJCQkJCWdvdG8gZmFpbDsNCisJCQkJfQ0KKwkJCQkoKHpfc3Ry
ZWFtICopKHpjYWxsLT5zdHJlYW0pKS0+bmV4dF9vdXQgPSAoQnl0ZWYgKil6Y2FsbC0+YnVmOw0K
KwkJCQkoKHpfc3RyZWFtICopKHpjYWxsLT5zdHJlYW0pKS0+YXZhaWxfb3V0ID0gWklPUlhfT1VU
X0JVRlNJWkU7DQorCQkJfSBlbHNlIHsNCisJCQkJZXJyID0gQloyX2J6Q29tcHJlc3NJbml0KChi
el9zdHJlYW0gKikoemNhbGwtPnN0cmVhbSksIGxldmVsLCAwLCAwKTsNCisJCQkJaWYgKGVyciE9
QlpfT0spDQorCQkJCXsNCisJCQkJCWhhbmRsZUJaRXJyb3IoemNhbGwsICJCWjJfYnpDb21wcmVz
c0luaXQgZXJyb3IiLCBlcnIpOw0KKwkJCQkJZ290byBmYWlsOw0KKwkJCQl9DQorCQkJCSgoYnpf
c3RyZWFtICopKHpjYWxsLT5zdHJlYW0pKS0+bmV4dF9vdXQgPSAoQnl0ZWYgKil6Y2FsbC0+YnVm
Ow0KKwkJCQkoKGJ6X3N0cmVhbSAqKSh6Y2FsbC0+c3RyZWFtKSktPmF2YWlsX291dCA9IFpJT1JY
X09VVF9CVUZTSVpFOw0KKwkJCX0NCisJCX0gZWxzZSB7IC8vdG8gcmVhZDoNCisJCQlpZiAoY29t
cHJlc3Npb249PVpJT1JYX0NPTVBSRVNTX1opDQorCQkJew0KKwkJCQllcnIgPSBpbmZsYXRlSW5p
dCgoel9zdHJlYW0gKikoemNhbGwtPnN0cmVhbSkpOw0KKwkJCQlpZiAoZXJyIT1aX09LKQ0KKwkJ
CQl7DQorCQkJCQloYW5kbGVFcnJvcih6Y2FsbCwgImluZmxhdGVJbml0IGVycm9yIiwgekVycm9y
KGVycikpOw0KKwkJCQkJZ290byBmYWlsOw0KKwkJCQl9DQorCQkJCSgoel9zdHJlYW0gKikoemNh
bGwtPnN0cmVhbSkpLT5uZXh0X2luID0gKEJ5dGVmICopemNhbGwtPmJ1ZjsNCisJCQkJKCh6X3N0
cmVhbSAqKSh6Y2FsbC0+c3RyZWFtKSktPmF2YWlsX2luID0gMDsNCisJCQl9IGVsc2Ugew0KKwkJ
CQllcnIgPSBCWjJfYnpEZWNvbXByZXNzSW5pdCgoYnpfc3RyZWFtICopKHpjYWxsLT5zdHJlYW0p
LCAwLCAwKTsNCisJCQkJaWYgKGVyciE9QlpfT0spDQorCQkJCXsNCisJCQkJCWhhbmRsZUJaRXJy
b3IoemNhbGwsICJCWjJfYnpEZWNvbXByZXNzSW5pdCBlcnJvciIsIGVycik7DQorCQkJCQlnb3Rv
IGZhaWw7DQorCQkJCX0NCisJCQkJKChiel9zdHJlYW0gKikoemNhbGwtPnN0cmVhbSkpLT5uZXh0
X2luID0gKGNoYXIgKil6Y2FsbC0+YnVmOw0KKwkJCQkoKGJ6X3N0cmVhbSAqKSh6Y2FsbC0+c3Ry
ZWFtKSktPmF2YWlsX2luID0gMDsNCisJCQl9DQorDQorCQkJemNhbGwtPmdvdF9yZWFkX3J4X2Vu
ZCA9IFpJT1JYX0ZBTFNFOw0KKwkJCXpjYWxsLT5nb3RfcmVhZF96c3RyZWFtX2VuZCA9IFpJT1JY
X0ZBTFNFOw0KKwkJfQ0KKwl9DQorDQorCXJldHVybiBaSU9SWF9PSzsNCisNCitmYWlsOg0KKwlp
ZiAoemNhbGwtPnN0cmVhbSE9TlVMTCkNCisJew0KKwkJZnJlZSh6Y2FsbC0+c3RyZWFtKTsNCisJ
CXpjYWxsLT5zdHJlYW0gPSBOVUxMOw0KKwl9DQorDQorCWlmICh6Y2FsbC0+YnVmIT1OVUxMKQ0K
Kwl7DQorCQlmcmVlKHpjYWxsLT5idWYpOw0KKwkJemNhbGwtPmJ1ZiA9IE5VTEw7DQorCX0NCisN
CisJcmV0dXJuIFpJT1JYX0ZBSUw7DQorfQ0KKw0KK2ludCB6aW9yeEJlZ2luV3JpdGUoc3RydWN0
IHJ4X2NhbGwgKmNhbGwsIGludCB1c2VfY29tcHJlc3Npb24sIGludCBsZXZlbCwgc3RydWN0IHpp
b3J4X2NhbGwgKnpjYWxsKQ0KK3sNCisJcmV0dXJuIHppb3J4QmVnaW4oY2FsbCwgdXNlX2NvbXBy
ZXNzaW9uLCBsZXZlbCwgemNhbGwsIFpJT1JYX1RSVUUpOw0KK30NCisNCitzdGF0aWMgaW50IHpp
b3J4V3JpdGVaKHN0cnVjdCB6aW9yeF9jYWxsICp6Y2FsbCwgY2hhciAqYnVmLCBpbnQgbmJ5dGVz
KQ0KK3sNCisJaW50IHJlczsNCisJel9zdHJlYW0gKnN0cmVhbTsNCisNCisJc3RyZWFtID0gKHpf
c3RyZWFtICopKHpjYWxsLT5zdHJlYW0pOw0KKw0KKwlzdHJlYW0tPm5leHRfaW4gPSAoQnl0ZWYg
KilidWY7DQorCXN0cmVhbS0+YXZhaWxfaW4gPSBuYnl0ZXM7DQorCXdoaWxlKHN0cmVhbS0+YXZh
aWxfaW4hPTApDQorCXsNCisJCWlmIChzdHJlYW0tPmF2YWlsX291dD09MCkNCisJCXsNCisJCQkj
aWZkZWYgWklPUlhfREVCVUcNCisJCQkJZnByaW50ZihzdGRlcnIsICJyeF9Xcml0ZSglZClcbiIs
IFpJT1JYX09VVF9CVUZTSVpFKTsNCisJCQkjZW5kaWYNCisJCQlyZXMgPSByeF9Xcml0ZSh6Y2Fs
bC0+Y2FsbCwgKGNoYXIgKikoemNhbGwtPmJ1ZiksIFpJT1JYX09VVF9CVUZTSVpFKTsNCisJCQlp
ZiAocmVzIT1aSU9SWF9PVVRfQlVGU0laRSkNCisJCQl7DQorCQkJCWhhbmRsZUVycm9yKHpjYWxs
LCAiemlvcnhXcml0ZSIsICJyeF9Xcml0ZSBmYWlsZWQiKTsNCisJCQkJcmV0dXJuIFpJT1JYX0ZB
SUw7DQorCQkJfQ0KKw0KKwkJCXN0cmVhbS0+bmV4dF9vdXQgPSAoQnl0ZWYgKikoemNhbGwtPmJ1
Zik7DQorCQkJc3RyZWFtLT5hdmFpbF9vdXQgPSBaSU9SWF9PVVRfQlVGU0laRTsNCisJCX0NCisJ
CSNpZmRlZiBaSU9SWF9ERUJVRw0KKwkJCWZwcmludGYoc3RkZXJyLCAiYXZhaWxfaW46JWQsIGF2
YWlsX291dDolZFxuIiwNCisJCQkJc3RyZWFtLT5hdmFpbF9pbiwgc3RyZWFtLT5hdmFpbF9vdXQp
Ow0KKwkJI2VuZGlmDQorCQlyZXMgPSBkZWZsYXRlKHN0cmVhbSwgWl9OT19GTFVTSCk7DQorCQlp
ZiAocmVzIT1aX09LKQ0KKwkJew0KKwkJCWhhbmRsZUVycm9yKHpjYWxsLCAiZGVmbGF0ZSBlcnJv
ciIsIHpFcnJvcihyZXMpKTsNCisJCQlyZXR1cm4gWklPUlhfRkFJTDsNCisJCX0NCisJfQ0KKwly
ZXR1cm4gbmJ5dGVzOw0KK30NCisNCitzdGF0aWMgaW50IHppb3J4V3JpdGVCWjIoc3RydWN0IHpp
b3J4X2NhbGwgKnpjYWxsLCBjaGFyICpidWYsIGludCBuYnl0ZXMpDQorew0KKwlpbnQgcmVzOw0K
Kwliel9zdHJlYW0gKnN0cmVhbTsNCisNCisJc3RyZWFtID0gKGJ6X3N0cmVhbSAqKSh6Y2FsbC0+
c3RyZWFtKTsNCisNCisJc3RyZWFtLT5uZXh0X2luID0gKGNoYXIgKilidWY7DQorCXN0cmVhbS0+
YXZhaWxfaW4gPSBuYnl0ZXM7DQorCXdoaWxlKHN0cmVhbS0+YXZhaWxfaW4hPTApDQorCXsNCisJ
CWlmIChzdHJlYW0tPmF2YWlsX291dD09MCkNCisJCXsNCisJCQkjaWZkZWYgWklPUlhfREVCVUcN
CisJCQkJZnByaW50ZihzdGRlcnIsICJyeF9Xcml0ZSglZClcbiIsIFpJT1JYX09VVF9CVUZTSVpF
KTsNCisJCQkjZW5kaWYNCisJCQlyZXMgPSByeF9Xcml0ZSh6Y2FsbC0+Y2FsbCwgKGNoYXIgKiko
emNhbGwtPmJ1ZiksIFpJT1JYX09VVF9CVUZTSVpFKTsNCisJCQlpZiAocmVzIT1aSU9SWF9PVVRf
QlVGU0laRSkNCisJCQl7DQorCQkJCWhhbmRsZUVycm9yKHpjYWxsLCAiemlvcnhXcml0ZSIsICJy
eF9Xcml0ZSBmYWlsZWQiKTsNCisJCQkJcmV0dXJuIFpJT1JYX0ZBSUw7DQorCQkJfQ0KKw0KKwkJ
CXN0cmVhbS0+bmV4dF9vdXQgPSAoY2hhciAqKSh6Y2FsbC0+YnVmKTsNCisJCQlzdHJlYW0tPmF2
YWlsX291dCA9IFpJT1JYX09VVF9CVUZTSVpFOw0KKwkJfQ0KKwkJI2lmZGVmIFpJT1JYX0RFQlVH
DQorCQkJZnByaW50ZihzdGRlcnIsICJhdmFpbF9pbjolZCwgYXZhaWxfb3V0OiVkXG4iLA0KKwkJ
CQlzdHJlYW0tPmF2YWlsX2luLCBzdHJlYW0tPmF2YWlsX291dCk7DQorCQkjZW5kaWYNCisJCXJl
cyA9IEJaMl9iekNvbXByZXNzKHN0cmVhbSwgQlpfUlVOKTsNCisJCWlmIChyZXMhPUJaX1JVTl9P
SykNCisJCXsNCisJCQloYW5kbGVCWkVycm9yKHpjYWxsLCAiQloyX2J6Q29tcHJlc3MgZXJyb3Ii
LCByZXMpOw0KKwkJCXJldHVybiBaSU9SWF9GQUlMOw0KKwkJfQ0KKwl9DQorCXJldHVybiBuYnl0
ZXM7DQorfQ0KKw0KK2ludCB6aW9yeFdyaXRlKHN0cnVjdCB6aW9yeF9jYWxsICp6Y2FsbCwgY2hh
ciAqYnVmLCBpbnQgbmJ5dGVzKQ0KK3sNCisJaW50IHJlczsNCisNCisJaWYgKHpjYWxsPT1OVUxM
KQ0KKwl7DQorCQloYW5kbGVFcnJvcih6Y2FsbCwgInppb3J4V3JpdGUiLCAiTlVMTCBlcnJvciIp
Ow0KKwkJcmV0dXJuIFpJT1JYX0ZBSUw7DQorCX0NCisNCisJI2lmZGVmIFpJT1JYX0RFQlVHDQor
CQlmcHJpbnRmKHN0ZGVyciwgInppb3J4V3JpdGUvbmJ5dGVzOiAlZFxuIiwgbmJ5dGVzKTsNCisJ
I2VuZGlmDQorDQorCXN3aXRjaCh6Y2FsbC0+Y29tcHJlc3Npb24pDQorCXsNCisJCWNhc2UgWklP
UlhfQ09NUFJFU1NfTk9ORToNCisJCQlyZXMgPSByeF9Xcml0ZSh6Y2FsbC0+Y2FsbCwgYnVmLCBu
Ynl0ZXMpOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSBaSU9SWF9DT01QUkVTU19aOg0KKwkJCXJlcyA9
IHppb3J4V3JpdGVaKHpjYWxsLCBidWYsIG5ieXRlcyk7DQorCQkJYnJlYWs7DQorCQljYXNlIFpJ
T1JYX0NPTVBSRVNTX0JaOg0KKwkJCXJlcyA9IHppb3J4V3JpdGVCWjIoemNhbGwsIGJ1ZiwgbmJ5
dGVzKTsNCisJCQlicmVhazsNCisJCWRlZmF1bHQ6DQorCQkJaGFuZGxlRXJyb3IoemNhbGwsICJ6
aW9yeFdyaXRlIiwgInVua25vd24gdHlwZSBvZiBjb21wcmVzc2lvbiIpOw0KKwkJCXJlcyA9IFpJ
T1JYX0ZBSUw7DQorCQkJYnJlYWs7DQorCX0NCisJcmV0dXJuIHJlczsNCit9DQorDQorc3RhdGlj
IGludCB6aW9yeEVuZFdyaXRlWihzdHJ1Y3QgemlvcnhfY2FsbCAqemNhbGwpDQorew0KKwlpbnQg
cmVzOw0KKwlpbnQgcmVtYWluaW5nOw0KKwl6X3N0cmVhbSAqc3RyZWFtOw0KKw0KKwlzdHJlYW0g
PSAoel9zdHJlYW0gKikoemNhbGwtPnN0cmVhbSk7DQorDQorCXJlcyA9IFpfT0s7DQorCXdoaWxl
KHJlcyE9Wl9TVFJFQU1fRU5EKQ0KKwl7DQorCQlpZiAoc3RyZWFtLT5hdmFpbF9vdXQ9PTApDQor
CQl7DQorCQkJI2lmZGVmIFpJT1JYX0RFQlVHDQorCQkJCWZwcmludGYoc3RkZXJyLCAicnhfV3Jp
dGUoJWQpXG4iLCBaSU9SWF9PVVRfQlVGU0laRSk7DQorCQkJI2VuZGlmDQorCQkJcmVzID0gcnhf
V3JpdGUoemNhbGwtPmNhbGwsIChjaGFyICopKHpjYWxsLT5idWYpLCBaSU9SWF9PVVRfQlVGU0la
RSk7DQorCQkJaWYgKHJlcyE9WklPUlhfT1VUX0JVRlNJWkUpDQorCQkJew0KKwkJCQloYW5kbGVF
cnJvcih6Y2FsbCwgInppb3J4RW5kV3JpdGUvemlvcnhXcml0ZSIsICJyeF9Xcml0ZSBmYWlsZWQi
KTsNCisJCQkJZGVmbGF0ZUVuZChzdHJlYW0pOw0KKwkJCQlyZXR1cm4gWklPUlhfRkFJTDsNCisJ
CQl9DQorCQkJc3RyZWFtLT5uZXh0X291dCA9IChCeXRlZiAqKSh6Y2FsbC0+YnVmKTsNCisJCQlz
dHJlYW0tPmF2YWlsX291dCA9IFpJT1JYX09VVF9CVUZTSVpFOw0KKwkJfQ0KKwkJI2lmZGVmIFpJ
T1JYX0RFQlVHDQorCQkJZnByaW50ZihzdGRlcnIsICJhdmFpbF9pbjolZCwgYXZhaWxfb3V0OiVk
XG4iLA0KKwkJCQlzdHJlYW0tPmF2YWlsX2luLCBzdHJlYW0tPmF2YWlsX291dCk7DQorCQkjZW5k
aWYNCisJCXJlcyA9IGRlZmxhdGUoc3RyZWFtLCBaX0ZJTklTSCk7DQorCQlpZiAocmVzIT1aX1NU
UkVBTV9FTkQgJiYgcmVzIT1aX09LKQ0KKwkJew0KKwkJCWhhbmRsZUVycm9yKHpjYWxsLCAiemlv
cnhFbmRXcml0ZS9kZWZsYXRlIGVycm9yIiwgekVycm9yKHJlcykpOw0KKwkJCWRlZmxhdGVFbmQo
c3RyZWFtKTsNCisJCQlyZXR1cm4gWklPUlhfRkFJTDsNCisJCX0NCisJfQ0KKw0KKwkvL3NlbmQg
dGhlIHJlbWFpbmluZyBidWZmZXIgaWYgaXQncyBub3QgZW1wdHkNCisJaWYgKHN0cmVhbS0+YXZh
aWxfb3V0PFpJT1JYX09VVF9CVUZTSVpFKQ0KKwl7DQorCQlyZW1haW5pbmcgPSBaSU9SWF9PVVRf
QlVGU0laRSAtIHN0cmVhbS0+YXZhaWxfb3V0Ow0KKwkJI2lmZGVmIFpJT1JYX0RFQlVHDQorCQkJ
ZnByaW50ZihzdGRlcnIsICJyeF9Xcml0ZSglZClcbiIsIHJlbWFpbmluZyk7DQorCQkjZW5kaWYN
CisJCXJlcyA9IHJ4X1dyaXRlKHpjYWxsLT5jYWxsLCAoY2hhciAqKSh6Y2FsbC0+YnVmKSwgcmVt
YWluaW5nKTsNCisJCWlmIChyZXMhPXJlbWFpbmluZykNCisJCXsNCisJCQloYW5kbGVFcnJvcih6
Y2FsbCwgInppb3J4RW5kV3JpdGUvcnhXcml0ZSIsICJyeF9Xcml0ZVsyXSBmYWlsZWQiKTsNCisJ
CQlkZWZsYXRlRW5kKHN0cmVhbSk7DQorCQkJcmV0dXJuIFpJT1JYX0ZBSUw7DQorCQl9DQorCX0N
CisNCisJcmVzID0gZGVmbGF0ZUVuZChzdHJlYW0pOw0KKwlpZiAocmVzIT1aX09LKQ0KKwl7DQor
CQloYW5kbGVFcnJvcih6Y2FsbCwgImRlZmxhdGVFbmQgZXJyb3IiLCB6RXJyb3IocmVzKSk7DQor
CQlyZXR1cm4gWklPUlhfRkFJTDsNCisJfQ0KKw0KKwlyZXR1cm4gWklPUlhfT0s7DQorfQ0KKw0K
K3N0YXRpYyBpbnQgemlvcnhFbmRXcml0ZUJaMihzdHJ1Y3QgemlvcnhfY2FsbCAqemNhbGwpDQor
ew0KKwlpbnQgcmVzOw0KKwlpbnQgcmVtYWluaW5nOw0KKwliel9zdHJlYW0gKnN0cmVhbTsNCisN
CisJc3RyZWFtID0gKGJ6X3N0cmVhbSAqKSh6Y2FsbC0+c3RyZWFtKTsNCisNCisJcmVzID0gQlpf
T0s7DQorCXdoaWxlKHJlcyE9QlpfU1RSRUFNX0VORCkNCisJew0KKwkJaWYgKHN0cmVhbS0+YXZh
aWxfb3V0PT0wKQ0KKwkJew0KKwkJCSNpZmRlZiBaSU9SWF9ERUJVRw0KKwkJCQlmcHJpbnRmKHN0
ZGVyciwgInJ4X1dyaXRlKCVkKVxuIiwgWklPUlhfT1VUX0JVRlNJWkUpOw0KKwkJCSNlbmRpZg0K
KwkJCXJlcyA9IHJ4X1dyaXRlKHpjYWxsLT5jYWxsLCAoY2hhciAqKSh6Y2FsbC0+YnVmKSwgWklP
UlhfT1VUX0JVRlNJWkUpOw0KKwkJCWlmIChyZXMhPVpJT1JYX09VVF9CVUZTSVpFKQ0KKwkJCXsN
CisJCQkJaGFuZGxlRXJyb3IoemNhbGwsICJ6aW9yeEVuZFdyaXRlL3ppb3J4V3JpdGUiLCAicnhf
V3JpdGUgZmFpbGVkIik7DQorCQkJCUJaMl9iekNvbXByZXNzRW5kKHN0cmVhbSk7DQorCQkJCXJl
dHVybiBaSU9SWF9GQUlMOw0KKwkJCX0NCisJCQlzdHJlYW0tPm5leHRfb3V0ID0gKGNoYXIgKiko
emNhbGwtPmJ1Zik7DQorCQkJc3RyZWFtLT5hdmFpbF9vdXQgPSBaSU9SWF9PVVRfQlVGU0laRTsN
CisJCX0NCisJCSNpZmRlZiBaSU9SWF9ERUJVRw0KKwkJCWZwcmludGYoc3RkZXJyLCAiYXZhaWxf
aW46JWQsIGF2YWlsX291dDolZFxuIiwNCisJCQkJc3RyZWFtLT5hdmFpbF9pbiwgc3RyZWFtLT5h
dmFpbF9vdXQpOw0KKwkJI2VuZGlmDQorCQlyZXMgPSBCWjJfYnpDb21wcmVzcyhzdHJlYW0sIEJa
X0ZJTklTSCk7DQorCQlpZiAocmVzIT1CWl9TVFJFQU1fRU5EICYmIHJlcyE9QlpfT0sgJiYgcmVz
IT1CWl9GSU5JU0hfT0spDQorCQl7DQorCQkJaGFuZGxlQlpFcnJvcih6Y2FsbCwgInppb3J4RW5k
V3JpdGUvQloyX2J6Q29tcHJlc3MgZXJyb3IiLCByZXMpOw0KKwkJCUJaMl9iekNvbXByZXNzRW5k
KHN0cmVhbSk7DQorCQkJcmV0dXJuIFpJT1JYX0ZBSUw7DQorCQl9DQorCX0NCisNCisJLy9zZW5k
IHRoZSByZW1haW5pbmcgYnVmZmVyIGlmIGl0J3Mgbm90IGVtcHR5DQorCWlmIChzdHJlYW0tPmF2
YWlsX291dDxaSU9SWF9PVVRfQlVGU0laRSkNCisJew0KKwkJcmVtYWluaW5nID0gWklPUlhfT1VU
X0JVRlNJWkUgLSBzdHJlYW0tPmF2YWlsX291dDsNCisJCSNpZmRlZiBaSU9SWF9ERUJVRw0KKwkJ
CWZwcmludGYoc3RkZXJyLCAicnhfV3JpdGUoJWQpXG4iLCByZW1haW5pbmcpOw0KKwkJI2VuZGlm
DQorCQlyZXMgPSByeF9Xcml0ZSh6Y2FsbC0+Y2FsbCwgKGNoYXIgKikoemNhbGwtPmJ1ZiksIHJl
bWFpbmluZyk7DQorCQlpZiAocmVzIT1yZW1haW5pbmcpDQorCQl7DQorCQkJaGFuZGxlRXJyb3Io
emNhbGwsICJ6aW9yeEVuZFdyaXRlL3J4V3JpdGUiLCAicnhfV3JpdGVbMl0gZmFpbGVkIik7DQor
CQkJQloyX2J6Q29tcHJlc3NFbmQoc3RyZWFtKTsNCisJCQlyZXR1cm4gWklPUlhfRkFJTDsNCisJ
CX0NCisJfQ0KKw0KKwlyZXMgPSBCWjJfYnpDb21wcmVzc0VuZChzdHJlYW0pOw0KKwlpZiAocmVz
IT1CWl9PSykNCisJew0KKwkJaGFuZGxlRXJyb3IoemNhbGwsICJkZWZsYXRlRW5kIGVycm9yIiwg
ekVycm9yKHJlcykpOw0KKwkJcmV0dXJuIFpJT1JYX0ZBSUw7DQorCX0NCisNCisJcmV0dXJuIFpJ
T1JYX09LOw0KK30NCisNCitpbnQgemlvcnhFbmRXcml0ZShzdHJ1Y3QgemlvcnhfY2FsbCAqemNh
bGwpDQorew0KKwlpbnQgcmVzOw0KKw0KKwlpZiAoemNhbGw9PU5VTEwpDQorCXsNCisJCWhhbmRs
ZUVycm9yKHpjYWxsLCAiemlvcnhFbmRXcml0ZSIsICJOVUxMIGVycm9yIik7DQorCQlyZXR1cm4g
WklPUlhfRkFJTDsNCisJfQ0KKw0KKwkjaWZkZWYgWklPUlhfREVCVUcNCisJCWZwcmludGYoc3Rk
ZXJyLCAiZW5kIHdyaXRlOlxuIik7DQorCSNlbmRpZg0KKw0KKwlzd2l0Y2goemNhbGwtPmNvbXBy
ZXNzaW9uKQ0KKwl7DQorCQljYXNlIFpJT1JYX0NPTVBSRVNTX05PTkU6DQorCQkJcmVzID0gWklP
UlhfT0s7DQorCQkJYnJlYWs7DQorCQljYXNlIFpJT1JYX0NPTVBSRVNTX1o6DQorCQkJcmVzID0g
emlvcnhFbmRXcml0ZVooemNhbGwpOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSBaSU9SWF9DT01QUkVT
U19CWjoNCisJCQlyZXMgPSB6aW9yeEVuZFdyaXRlQloyKHpjYWxsKTsNCisJCQlicmVhazsNCisJ
CWRlZmF1bHQ6DQorCQkJaGFuZGxlRXJyb3IoemNhbGwsICJ6aW9yeEVuZFdyaXRlIiwgInVua25v
d24gdHlwZSBvZiBjb21wcmVzc2lvbiIpOw0KKwkJCXJlcyA9IFpJT1JYX0ZBSUw7DQorCQkJYnJl
YWs7DQorCX0NCisNCisJaWYgKHpjYWxsLT5idWYhPU5VTEwpDQorCXsNCisJCWZyZWUoemNhbGwt
PmJ1Zik7DQorCQl6Y2FsbC0+YnVmID0gTlVMTDsNCisJfQ0KKw0KKwlpZiAoemNhbGwtPnN0cmVh
bSE9TlVMTCkNCisJew0KKwkJZnJlZSh6Y2FsbC0+c3RyZWFtKTsNCisJCXpjYWxsLT5zdHJlYW0g
PSBOVUxMOw0KKwl9DQorDQorCXJldHVybiBaSU9SWF9PSzsNCit9DQorDQoraW50IHppb3J4QmVn
aW5SZWFkKHN0cnVjdCByeF9jYWxsICpjYWxsLCBpbnQgY29tcHJlc3Npb24sIGludCBsZXZlbCwg
c3RydWN0IHppb3J4X2NhbGwgKnpjYWxsKQ0KK3sNCisJcmV0dXJuIHppb3J4QmVnaW4oY2FsbCwg
Y29tcHJlc3Npb24sIGxldmVsLCB6Y2FsbCwgWklPUlhfRkFMU0UpOw0KK30NCisNCitzdGF0aWMg
aW50IHppb3J4UmVhZFooc3RydWN0IHppb3J4X2NhbGwgKnpjYWxsLCBjaGFyICpidWYsIGludCBu
Ynl0ZXMpDQorew0KKwlpbnQgcmVzOw0KKwl6X3N0cmVhbSAqc3RyZWFtOw0KKw0KKwlzdHJlYW0g
PSAoel9zdHJlYW0gKikoemNhbGwtPnN0cmVhbSk7DQorDQorCXN0cmVhbS0+bmV4dF9vdXQgPSAo
Qnl0ZWYgKilidWY7DQorCXN0cmVhbS0+YXZhaWxfb3V0ID0gbmJ5dGVzOw0KKwl3aGlsZShzdHJl
YW0tPmF2YWlsX291dCE9MCkNCisJew0KKwkJaWYgKHN0cmVhbS0+YXZhaWxfaW49PTApDQorCQl7
DQorCQkJaWYgKHpjYWxsLT5nb3RfcmVhZF9yeF9lbmQ9PVpJT1JYX0ZBTFNFKQ0KKwkJCXsNCisJ
CQkJcmVzID0gcnhfUmVhZCh6Y2FsbC0+Y2FsbCwgemNhbGwtPmJ1ZiwgWklPUlhfSU5fQlVGU0la
RSk7DQorCQkJCWlmIChyZXM+MCkNCisJCQkJew0KKwkJCQkJc3RyZWFtLT5uZXh0X2luID0gKEJ5
dGVmICopemNhbGwtPmJ1ZjsNCisJCQkJCXN0cmVhbS0+YXZhaWxfaW4gPSByZXM7DQorCQkJCX0g
ZWxzZSB7DQorCQkJCQl6Y2FsbC0+Z290X3JlYWRfcnhfZW5kID0gWklPUlhfVFJVRTsNCisJCQkJ
CSNpZmRlZiBaSU9SWF9ERUJVRw0KKwkJCQkJCWZwcmludGYoc3RkZXJyLCAiZ290IHJ4IHN0cmVh
bSBlbmRcbiIpOw0KKwkJCQkJI2VuZGlmDQorCQkJCX0NCisJCQl9DQorDQorCQkJaWYgKHpjYWxs
LT5nb3RfcmVhZF9yeF9lbmQ9PVpJT1JYX1RSVUUpDQorCQkJew0KKwkJCQlpZiAoemNhbGwtPmdv
dF9yZWFkX3pzdHJlYW1fZW5kPT1aSU9SWF9UUlVFKQ0KKwkJCQkJYnJlYWs7DQorDQorCQkJCXJl
cyA9IFpfT0s7DQorCQkJCXdoaWxlKHJlcyE9Wl9TVFJFQU1fRU5EICYmIHN0cmVhbS0+YXZhaWxf
b3V0IT0wKQ0KKwkJCQl7DQorCQkJCQkjaWZkZWYgWklPUlhfREVCVUcNCisJCQkJCQlmcHJpbnRm
KHN0ZGVyciwgImF2YWlsX2luOiVkLCBhdmFpbF9vdXQ6JWRcbiIsDQorCQkJCQkJc3RyZWFtLT5h
dmFpbF9pbiwgc3RyZWFtLT5hdmFpbF9vdXQpOw0KKwkJCQkJI2VuZGlmDQorCQkJCQlyZXMgPSBp
bmZsYXRlKHN0cmVhbSwgWl9GSU5JU0gpOw0KKwkJCQkJaWYgKHJlcyE9Wl9PSyAmJiByZXMhPVpf
U1RSRUFNX0VORCkNCisJCQkJCXsNCisJCQkJCQloYW5kbGVFcnJvcih6Y2FsbCwgImluZmxhdGUg
ZmluaXNoIGVycm9yIiwgekVycm9yKHJlcykpOw0KKwkJCQkJCXJldHVybiAoLTExKTsNCisJCQkJ
CX0NCisJCQkJfQ0KKw0KKwkJCQlpZiAocmVzPT1aX1NUUkVBTV9FTkQpDQorCQkJCXsNCisJCQkJ
CXpjYWxsLT5nb3RfcmVhZF96c3RyZWFtX2VuZCA9IFpJT1JYX1RSVUU7DQorCQkJCQkjaWZkZWYg
WklPUlhfREVCVUcNCisJCQkJCQlmcHJpbnRmKHN0ZGVyciwgImdvdCB6LXN0cmVhbSBlbmRcbiIp
Ow0KKwkJCQkJI2VuZGlmDQorCQkJCX0NCisNCisJCQkJYnJlYWs7DQorCQkJfQ0KKwkJfQ0KKw0K
KwkJI2lmZGVmIFpJT1JYX0RFQlVHDQorCQkJZnByaW50ZihzdGRlcnIsICJhdmFpbF9pbjolZCwg
YXZhaWxfb3V0OiVkXG4iLA0KKwkJCQlzdHJlYW0tPmF2YWlsX2luLCBzdHJlYW0tPmF2YWlsX291
dCk7DQorCQkjZW5kaWYNCisJCXJlcyA9IGluZmxhdGUoc3RyZWFtLCBaX05PX0ZMVVNIKTsNCisN
CisJCWlmIChyZXM9PVpfU1RSRUFNX0VORCkNCisJCXsNCisJCQl6Y2FsbC0+Z290X3JlYWRfcnhf
ZW5kID1aSU9SWF9UUlVFOw0KKwkJCXpjYWxsLT5nb3RfcmVhZF96c3RyZWFtX2VuZCA9IFpJT1JY
X1RSVUU7DQorCQl9DQorCQllbHNlIGlmIChyZXMhPVpfT0spDQorCQl7DQorCQkJaGFuZGxlRXJy
b3IoemNhbGwsICJpbmZsYXRlIGVycm9yIiwgekVycm9yKHJlcykpOw0KKwkJCXJldHVybiBaSU9S
WF9GQUlMOw0KKwkJfQ0KKwl9DQorDQorCXJldHVybiBuYnl0ZXMgLSBzdHJlYW0tPmF2YWlsX291
dDsNCit9DQorDQorc3RhdGljIGludCB6aW9yeFJlYWRCWjIoc3RydWN0IHppb3J4X2NhbGwgKnpj
YWxsLCBjaGFyICpidWYsIGludCBuYnl0ZXMpDQorew0KKwlpbnQgcmVzOw0KKwliel9zdHJlYW0g
KnN0cmVhbTsNCisNCisJc3RyZWFtID0gKGJ6X3N0cmVhbSAqKSh6Y2FsbC0+c3RyZWFtKTsNCisN
CisJc3RyZWFtLT5uZXh0X291dCA9IChjaGFyICopYnVmOw0KKwlzdHJlYW0tPmF2YWlsX291dCA9
IG5ieXRlczsNCisJd2hpbGUoc3RyZWFtLT5hdmFpbF9vdXQhPTApDQorCXsNCisJCWlmIChzdHJl
YW0tPmF2YWlsX2luPT0wKQ0KKwkJew0KKwkJCWlmICh6Y2FsbC0+Z290X3JlYWRfcnhfZW5kPT1a
SU9SWF9GQUxTRSkNCisJCQl7DQorCQkJCXJlcyA9IHJ4X1JlYWQoemNhbGwtPmNhbGwsIHpjYWxs
LT5idWYsIFpJT1JYX0lOX0JVRlNJWkUpOw0KKwkJCQlpZiAocmVzPjApDQorCQkJCXsNCisJCQkJ
CXN0cmVhbS0+bmV4dF9pbiA9IHpjYWxsLT5idWY7DQorCQkJCQlzdHJlYW0tPmF2YWlsX2luID0g
cmVzOw0KKwkJCQl9IGVsc2Ugew0KKwkJCQkJemNhbGwtPmdvdF9yZWFkX3J4X2VuZCA9IFpJT1JY
X1RSVUU7DQorCQkJCQkjaWZkZWYgWklPUlhfREVCVUcNCisJCQkJCQlmcHJpbnRmKHN0ZGVyciwg
ImdvdCByeCBzdHJlYW0gZW5kXG4iKTsNCisJCQkJCSNlbmRpZg0KKwkJCQl9DQorCQkJfQ0KKw0K
KwkJCWlmICh6Y2FsbC0+Z290X3JlYWRfcnhfZW5kPT1aSU9SWF9UUlVFKQ0KKwkJCXsNCisJCQkJ
aWYgKHpjYWxsLT5nb3RfcmVhZF96c3RyZWFtX2VuZD09WklPUlhfVFJVRSkNCisJCQkJCWJyZWFr
Ow0KKw0KKwkJCQlyZXMgPSBCWl9PSzsNCisJCQkJd2hpbGUocmVzIT1CWl9TVFJFQU1fRU5EICYm
IHN0cmVhbS0+YXZhaWxfb3V0IT0wKQ0KKwkJCQl7DQorCQkJCQkjaWZkZWYgWklPUlhfREVCVUcN
CisJCQkJCQlmcHJpbnRmKHN0ZGVyciwgImF2YWlsX2luOiVkLCBhdmFpbF9vdXQ6JWRcbiIsDQor
CQkJCQkJCXN0cmVhbS0+YXZhaWxfaW4sIHN0cmVhbS0+YXZhaWxfb3V0KTsNCisJCQkJCSNlbmRp
Zg0KKwkJCQkJcmVzID0gQloyX2J6RGVjb21wcmVzcyhzdHJlYW0pOw0KKwkJCQkJaWYgKHJlcyE9
QlpfT0sgJiYgcmVzIT1CWl9TVFJFQU1fRU5EKQ0KKwkJCQkJew0KKwkJCQkJCWhhbmRsZUJaRXJy
b3IoemNhbGwsICJCWjJfYnpEZWNvbXByZXNzIGZpbmlzaCBlcnJvciIsIHJlcyk7DQorCQkJCQkJ
cmV0dXJuICgtMTEpOw0KKwkJCQkJfQ0KKwkJCQl9DQorDQorCQkJCWlmIChyZXM9PUJaX1NUUkVB
TV9FTkQpDQorCQkJCXsNCisJCQkJCXpjYWxsLT5nb3RfcmVhZF96c3RyZWFtX2VuZCA9IFpJT1JY
X1RSVUU7DQorCQkJCQkjaWZkZWYgWklPUlhfREVCVUcNCisJCQkJCQlmcHJpbnRmKHN0ZGVyciwg
ImdvdCBiejItc3RyZWFtIGVuZFxuIik7DQorCQkJCQkjZW5kaWYNCisJCQkJfQ0KKw0KKwkJCQli
cmVhazsNCisJCQl9DQorCQl9DQorDQorCQkjaWZkZWYgWklPUlhfREVCVUcNCisJCQlmcHJpbnRm
KHN0ZGVyciwgImF2YWlsX2luOiVkLCBhdmFpbF9vdXQ6JWRcbiIsDQorCQkJCXN0cmVhbS0+YXZh
aWxfaW4sIHN0cmVhbS0+YXZhaWxfb3V0KTsNCisJCSNlbmRpZg0KKwkJcmVzID0gQloyX2J6RGVj
b21wcmVzcyhzdHJlYW0pOw0KKwkJaWYgKHJlcz09QlpfU1RSRUFNX0VORCkNCisJCXsNCisJCQl6
Y2FsbC0+Z290X3JlYWRfcnhfZW5kID1aSU9SWF9UUlVFOw0KKwkJCXpjYWxsLT5nb3RfcmVhZF96
c3RyZWFtX2VuZCA9IFpJT1JYX1RSVUU7DQorCQl9DQorCQllbHNlIGlmIChyZXMhPUJaX09LKQ0K
KwkJew0KKwkJCWhhbmRsZUJaRXJyb3IoemNhbGwsICJCWjJfYnpEZWNvbXByZXNzWzJdIGVycm9y
IiwgcmVzKTsNCisJCQlyZXR1cm4gWklPUlhfRkFJTDsNCisJCX0NCisJfQ0KKw0KKwlyZXR1cm4g
bmJ5dGVzIC0gc3RyZWFtLT5hdmFpbF9vdXQ7DQorfQ0KKw0KK2ludCB6aW9yeFJlYWQoc3RydWN0
IHppb3J4X2NhbGwgKnpjYWxsLCBjaGFyICpidWYsIGludCBuYnl0ZXMpDQorew0KKwlpbnQgcmVz
Ow0KKw0KKwkjaWZkZWYgWklPUlhfREVCVUcNCisJCWZwcmludGYoc3RkZXJyLCAiemlvcnhSZWFk
L25ieXRlczolZFxuIiwgbmJ5dGVzKTsNCisJI2VuZGlmDQorDQorCWlmICh6Y2FsbD09TlVMTCB8
fCBidWY9PU5VTEwpDQorCXsNCisJCWhhbmRsZUVycm9yKHpjYWxsLCAiemlvcnhSZWFkIiwgIk5V
TEwgZXJyb3IiKTsNCisJCXJldHVybiAoLTEpOw0KKwl9DQorDQorCWlmIChuYnl0ZXM8PTApDQor
CXsNCisJCWhhbmRsZUVycm9yKHpjYWxsLCAiemlvcnhSZWFkIiwgIndyb25nIHBhcmFtZXRlcjog
bmJ5dGVzPD0wIik7DQorCQlyZXR1cm4gKC0yKTsNCisJfQ0KKw0KKwlzd2l0Y2goemNhbGwtPmNv
bXByZXNzaW9uKQ0KKwl7DQorCQljYXNlIFpJT1JYX0NPTVBSRVNTX05PTkU6DQorCQkJcmVzID0g
cnhfUmVhZCh6Y2FsbC0+Y2FsbCwgYnVmLCBuYnl0ZXMpOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSBa
SU9SWF9DT01QUkVTU19aOg0KKwkJCXJlcyA9IHppb3J4UmVhZFooemNhbGwsIGJ1ZiwgbmJ5dGVz
KTsNCisJCQlicmVhazsNCisJCWNhc2UgWklPUlhfQ09NUFJFU1NfQlo6DQorCQkJcmVzID0gemlv
cnhSZWFkQloyKHpjYWxsLCBidWYsIG5ieXRlcyk7DQorCQkJYnJlYWs7DQorCQlkZWZhdWx0Og0K
KwkJCWhhbmRsZUVycm9yKHpjYWxsLCAiemlvcnhSZWFkIiwgInVua25vd24gdHlwZSBvZiBjb21w
cmVzc2lvbiIpOw0KKwkJCXJlcyA9ICgtMyk7DQorCQkJYnJlYWs7DQorCX0NCisNCisJI2lmZGVm
IFpJT1JYX0RFQlVHDQorCQlmcHJpbnRmKHN0ZGVyciwgInppb3J4UmVhZC9yZWFkIHJlc3VsdDog
JWQuXG4iLCByZXMpOw0KKwkjZW5kaWYNCisNCisJcmV0dXJuIHJlczsNCit9DQorDQoraW50IHpp
b3J4RW5kUmVhZChzdHJ1Y3QgemlvcnhfY2FsbCAqemNhbGwpDQorew0KKwlpbnQgcmVzLCB6aW9y
eF9yZXM7DQorDQorCWlmICh6Y2FsbD09TlVMTCkNCisJew0KKwkJaGFuZGxlRXJyb3IoemNhbGws
ICJ6aW9yeEVuZFJlYWQiLCAiTlVMTCBlcnJvciIpOw0KKwkJcmV0dXJuIFpJT1JYX0ZBSUw7DQor
CX0NCisNCisJc3dpdGNoKHpjYWxsLT5jb21wcmVzc2lvbikNCisJew0KKwkJY2FzZSBaSU9SWF9D
T01QUkVTU19OT05FOg0KKwkJCXppb3J4X3JlcyA9IFpJT1JYX09LOw0KKwkJCWJyZWFrOw0KKwkJ
Y2FzZSBaSU9SWF9DT01QUkVTU19aOg0KKwkJCXJlcyA9IGluZmxhdGVFbmQoKHpfc3RyZWFtICop
KHpjYWxsLT5zdHJlYW0pKTsNCisJCQlpZiAocmVzIT1aX09LKQ0KKwkJCXsNCisJCQkJaGFuZGxl
RXJyb3IoemNhbGwsICJpbmZsYXRlRW5kIGVycm9yIiwgekVycm9yKHJlcykpOw0KKwkJCQl6aW9y
eF9yZXMgPSBaSU9SWF9GQUlMOw0KKwkJCX0gZWxzZSB7DQorCQkJCXppb3J4X3JlcyA9IFpJT1JY
X09LOw0KKwkJCX0NCisJCQlicmVhazsNCisJCWNhc2UgWklPUlhfQ09NUFJFU1NfQlo6DQorCQkJ
cmVzID0gQloyX2J6RGVjb21wcmVzc0VuZCgoYnpfc3RyZWFtICopKHpjYWxsLT5zdHJlYW0pKTsN
CisJCQlpZiAocmVzIT1CWl9PSykNCisJCQl7DQorCQkJCWhhbmRsZUVycm9yKHpjYWxsLCAiaW5m
bGF0ZUVuZCBlcnJvciIsIHpFcnJvcihyZXMpKTsNCisJCQkJemlvcnhfcmVzID0gWklPUlhfRkFJ
TDsNCisJCQl9IGVsc2Ugew0KKwkJCQl6aW9yeF9yZXMgPSBaSU9SWF9PSzsNCisJCQl9DQorCQkJ
YnJlYWs7DQorCQlkZWZhdWx0Og0KKwkJCWhhbmRsZUVycm9yKHpjYWxsLCAiemlvcnhSZWFkRW5k
IiwgInVua25vd24gdHlwZSBvZiBjb21wcmVzc2lvbiIpOw0KKwkJCXppb3J4X3JlcyA9IFpJT1JY
X0ZBSUw7DQorCQkJYnJlYWs7DQorCX0NCisNCisJaWYgKHpjYWxsLT5idWYhPU5VTEwpDQorCXsN
CisJCWZyZWUoemNhbGwtPmJ1Zik7DQorCQl6Y2FsbC0+YnVmID0gTlVMTDsNCisJfQ0KKw0KKwlp
ZiAoemNhbGwtPnN0cmVhbSE9TlVMTCkNCisJew0KKwkJZnJlZSh6Y2FsbC0+c3RyZWFtKTsNCisJ
CXpjYWxsLT5zdHJlYW0gPSBOVUxMOw0KKwl9DQorDQorCXJldHVybiB6aW9yeF9yZXM7DQorfQ0K
Kw0KZGlmZiAtTmF1ciBvcGVuYWZzLTEuMi4xMy9zcmMvdm9sc2VyL3ppb3J4Lmggb3BlbmFmcy0x
LjIuMTN6L3NyYy92b2xzZXIvemlvcnguaA0KLS0tIG9wZW5hZnMtMS4yLjEzL3NyYy92b2xzZXIv
emlvcnguaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMA0KKysrIG9wZW5hZnMt
MS4yLjEzei9zcmMvdm9sc2VyL3ppb3J4LmgJMjAwNC0xMi0yMyAxNjozNjoxMy4wMDAwMDAwMDAg
KzAxMDANCkBAIC0wLDAgKzEsNDUgQEANCisjaWZuZGVmIF9fWklPUlhfSF9fDQorI2RlZmluZSBf
X1pJT1JYX0hfXw0KKw0KKw0KKyNkZWZpbmUgWklPUlhfQ0FMTF9FUlJPUl9CVUZTSVpFIDEyOA0K
KyNkZWZpbmUgWklPUlhfSU5fQlVGU0laRSA0MDk2DQorI2RlZmluZSBaSU9SWF9PVVRfQlVGU0la
RSA0MDk2DQorDQorLy9hbGwgZnVuY3Rpb25zIG11c3QgcmV0dXJuIA0KKy8vb25lIG9mIHRoZSBm
b2xsb3dpbmcgMiByZXN1bHRzOg0KKyNkZWZpbmUgWklPUlhfT0sgMA0KKyNkZWZpbmUgWklPUlhf
RkFJTCAoLTEpDQorDQorLy9wb3NzaWJsZSB2YWx1ZXMgb2YgcGFyYW1ldGVyICJjb21wcmVzcyI6
DQorI2RlZmluZSBaSU9SWF9DT01QUkVTU19OT05FIDANCisjZGVmaW5lIFpJT1JYX0NPTVBSRVNT
X1ogMQ0KKyNkZWZpbmUgWklPUlhfQ09NUFJFU1NfQlogMg0KKw0KK3N0cnVjdCB6aW9yeF9jYWxs
DQorew0KKwlzdHJ1Y3QgcnhfY2FsbCAqY2FsbDsNCisJdm9pZCAqc3RyZWFtOwkvL3R5cGUgb2Yg
PHN0cnVjdCB6X3N0cmVhbT4gb3IgPHN0cnVjdCBiel9zdHJlYW0+DQorCWNoYXIgKmJ1ZjsJLy90
ZW1wb3JhcnkgYnVmZmVyIGZvciBtYXJzaGFsbGluZyB0byByeA0KKw0KKwlpbnQgY29tcHJlc3Np
b247IC8vMD1kb24ndCBjb21wcmVzcywgMT1jb21wcmVzcw0KKwlpbnQgbGV2ZWw7CS8vY29tcHJl
c3Npb24gbGV2ZWwNCisNCisJaW50IGdvdF9yZWFkX3J4X2VuZDsNCisJaW50IGdvdF9yZWFkX3pz
dHJlYW1fZW5kOw0KKw0KKwljaGFyIGxhc3RFcnJvck1zZ1taSU9SWF9DQUxMX0VSUk9SX0JVRlNJ
WkVdOw0KK307DQorDQorLy9sZXZlbDogWl9ERUZBVUxUX0NPTVBSRVNTSU9OLCBvciBiZXR3ZWVu
IDAgYW5kIDk6DQorLy8gMSBnaXZlcyBiZXN0IHNwZWVkLCA5IGdpdmVzIGJlc3QgY29tcHJlc3Np
b24sIDAgZ2l2ZXMgbm8gY29tcHJlc3Npb24gYXQNCisvLyBhbGwgKHRoZSBpbnB1dCBkYXRhIGlz
IHNpbXBseSBjb3BpZWQgYSBibG9jayBhdCBhIHRpbWUpDQorDQoraW50IHppb3J4QmVnaW5Xcml0
ZShzdHJ1Y3QgcnhfY2FsbCAqY2FsbCwgaW50IHVzZV9jb21wcmVzc2lvbiwgaW50IGxldmVsLCBz
dHJ1Y3QgemlvcnhfY2FsbCAqemNhbGwpOw0KK2ludCB6aW9yeFdyaXRlKHN0cnVjdCB6aW9yeF9j
YWxsICp6Y2FsbCwgY2hhciAqYnVmLCBpbnQgbmJ5dGVzKTsNCitpbnQgemlvcnhFbmRXcml0ZShz
dHJ1Y3QgemlvcnhfY2FsbCAqemNhbGwpOw0KK2ludCB6aW9yeEJlZ2luUmVhZChzdHJ1Y3Qgcnhf
Y2FsbCAqY2FsbCwgaW50IHVzZV9jb21wcmVzc2lvbiwgaW50IGxldmVsLCBzdHJ1Y3Qgemlvcnhf
Y2FsbCAqemNhbGwpOw0KK2ludCB6aW9yeFJlYWQoc3RydWN0IHppb3J4X2NhbGwgKnpjYWxsLCBj
aGFyICpidWYsIGludCBuYnl0ZXMpOw0KK2ludCB6aW9yeEVuZFJlYWQoc3RydWN0IHppb3J4X2Nh
bGwgKnpjYWxsKTsNCisNCisjZW5kaWYgLy8gX19aSU9SWF9IX18NCg==

--=_mixed 006C3A83C1256F7F_=
Content-Type: application/octet-stream; name="openafs-1.3.77z.patch"
Content-Disposition: attachment; filename="openafs-1.3.77z.patch"
Content-Transfer-Encoding: base64

ZGlmZiAtTmF1ciBvcGVuYWZzLTEuMy43Ny9zcmMvdHZvbHNlci9NYWtlZmlsZS5pbiBvcGVuYWZz
LTEuMy43N3ovc3JjL3R2b2xzZXIvTWFrZWZpbGUuaW4NCi0tLSBvcGVuYWZzLTEuMy43Ny9zcmMv
dHZvbHNlci9NYWtlZmlsZS5pbgkyMDAzLTExLTIyIDA0OjEzOjE5LjAwMDAwMDAwMCArMDEwMA0K
KysrIG9wZW5hZnMtMS4zLjc3ei9zcmMvdHZvbHNlci9NYWtlZmlsZS5pbgkyMDA0LTEyLTI4IDE2
OjQyOjIyLjAwMDAwMDAwMCArMDEwMA0KQEAgLTEsNiArMSw2IEBADQogIyBDb3B5cmlnaHQgMjAw
MCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJz
Lg0KICMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0jIA0KKyMNCiAjIFRoaXMgc29mdHdhcmUgaGFz
IGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBJQk0gUHVibGljDQogIyBMaWNl
bnNlLiAgRm9yIGRldGFpbHMsIHNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSB0b3AtbGV2ZWwg
c291cmNlDQogIyBkaXJlY3Rvcnkgb3Igb25saW5lIGF0IGh0dHA6Ly93d3cub3BlbmFmcy5vcmcv
ZGwvbGljZW5zZTEwLmh0bWwNCkBAIC0yNCw3ICsyNCw3IEBADQogRlNJTlQ9Li4vZnNpbnQNCiBW
T0xTRVI9Li4vdm9sc2VyDQogDQotVk9MU0VST0JKUz12b2xtYWluLm8gdm9scHJvY3MubyBwaHlz
aW8ubyB2b2x0cmFucy5vIHZvbGVyci5vIHZvbGludC5jcy5vIGR1bXBzdHVmZi5vICB2b2xpbnQu
c3MubyB2b2xpbnQueGRyLm8gdnNjb21tb24ubw0KK1ZPTFNFUk9CSlM9dm9sbWFpbi5vIHZvbHBy
b2NzLm8gcGh5c2lvLm8gdm9sdHJhbnMubyB2b2xlcnIubyB2b2xpbnQuY3MubyBkdW1wc3R1ZmYu
byAgdm9saW50LnNzLm8gdm9saW50Lnhkci5vIHZzY29tbW9uLm8gemlvcngubw0KIA0KIFZMU0VS
VkVST0JKUz0jdmxkYmludC5jcy5vIHZsZGJpbnQueGRyLm8NCiANCkBAIC00NCw3ICs0NCw3IEBA
DQogb2JqZWN0cz0gJHtWT0xTRVJPQkpTfSAke1ZMU0VSVkVST0JKU30gJHtMV1BPQkpTfSAke0xJ
QkFDTE9CSlN9IFwNCiAJICR7VVRJTE9CSlN9ICR7RElST0JKU30gJHtWT0xPQkpTfSAke0ZTSU5U
T0JKU30NCiANCi1MSUJTPSR7VE9QX0xJQkRJUn0vbGliYWZzYXV0aGVudC5hICR7VE9QX0xJQkRJ
Un0vbGliYWZzcnBjLmEgJHtUT1BfTElCRElSfS91dGlsLmENCitMSUJTPSR7VE9QX0xJQkRJUn0v
bGliYWZzYXV0aGVudC5hICR7VE9QX0xJQkRJUn0vbGliYWZzcnBjLmEgJHtUT1BfTElCRElSfS91
dGlsLmEgL3Vzci9saWIvbGliei5hIC91c3IvbGliL2xpYmJ6Mi5hDQogDQogYWxsOiB2b2xzZXJ2
ZXINCiANCkBAIC02NCw2ICs2NCw4IEBADQogCSR7Q09NUElMRX0NCiBkdW1wc3R1ZmYubzogJHtW
T0xTRVJ9L2R1bXBzdHVmZi5jDQogCSR7Q09NUElMRX0NCit6aW9yeC5vOiAke1ZPTFNFUn0vemlv
cnguYw0KKwkke0NPTVBJTEV9DQogdm9saW50LnNzLm86ICR7Vk9MU0VSfS92b2xpbnQuc3MuYw0K
IAkke0NPTVBJTEV9DQogdm9saW50Lnhkci5vOiAke1ZPTFNFUn0vdm9saW50Lnhkci5jDQpkaWZm
IC1OYXVyIG9wZW5hZnMtMS4zLjc3L3NyYy92b2xzZXIvZHVtcC5oIG9wZW5hZnMtMS4zLjc3ei9z
cmMvdm9sc2VyL2R1bXAuaA0KLS0tIG9wZW5hZnMtMS4zLjc3L3NyYy92b2xzZXIvZHVtcC5oCTIw
MDMtMDctMTYgMDE6MTc6NDguMDAwMDAwMDAwICswMjAwDQorKysgb3BlbmFmcy0xLjMuNzd6L3Ny
Yy92b2xzZXIvZHVtcC5oCTIwMDQtMTItMjIgMDE6NTY6NTMuMDAwMDAwMDAwICswMTAwDQpAQCAt
NTAsMyArNTAsNCBAQA0KICNkZWZpbmUgU0hBS0U0CSJQIg0KICNkZWZpbmUgU0hBS0U1CSJRIg0K
ICNkZWZpbmUgU0hBS0VfQUJPUlQJIiEiDQorDQpkaWZmIC1OYXVyIG9wZW5hZnMtMS4zLjc3L3Ny
Yy92b2xzZXIvZHVtcHN0dWZmLmMgb3BlbmFmcy0xLjMuNzd6L3NyYy92b2xzZXIvZHVtcHN0dWZm
LmMNCi0tLSBvcGVuYWZzLTEuMy43Ny9zcmMvdm9sc2VyL2R1bXBzdHVmZi5jCTIwMDMtMTEtMjMg
MDU6NTM6NDQuMDAwMDAwMDAwICswMTAwDQorKysgb3BlbmFmcy0xLjMuNzd6L3NyYy92b2xzZXIv
ZHVtcHN0dWZmLmMJMjAwNC0xMi0yMiAwNDozNjowNy4wMDAwMDAwMDAgKzAxMDANCkBAIC01NSw2
ICs1NSw3IEBADQogI2luY2x1ZGUgPGFmcy9hY2wuaD4NCiAjaW5jbHVkZSAidm9sc2VyLmgiDQog
I2luY2x1ZGUgInZvbGludC5oIg0KKyNpbmNsdWRlICJ6aW9yeC5oIg0KIA0KICNpZm5kZWYgQUZT
X05UNDBfRU5WDQogI2lmZGVmIE9fTEFSR0VGSUxFDQpAQCAtNzAsNiArNzEsOSBAQA0KIA0KIGV4
dGVybiBpbnQgRG9Mb2dnaW5nOw0KIA0KKyNkZWZpbmUgREVGX1RPX1dSSVRFIDENCisjZGVmaW5l
IERFRl9UT19SRUFEIDANCisNCiAvKiBUaGlzIGlvZCBzdHVmZiBpcyBhIHNpbGx5IGxpdHRsZSBw
YWNrYWdlIHRvIGVtdWxhdGUgdGhlIG9sZCBxaV9pbiBzdHVmZiwgd2hpY2gNCiAgICBlbXVsYXRl
ZCB0aGUgc3RkaW8gc3R1ZmYuICBUaGVyZSBpcyBhIGJpZyBhc3N1bXB0aW9uIGhlcmUsIHRoYXQg
dGhlDQogICAgcnhfUmVhZCB3aWxsIG5ldmVyIGJlIGNhbGxlZCBkaXJlY3RseSwgYnkgYSByb3V0
aW5lIGxpa2UgcmVhZEZpbGUsIHdoZW4NCkBAIC03OSwxNSArODMsMTYgQEANCiAgICB0aGUgcHVz
aGluZyBiYWNrIG9mIGNoYXJhY3RlcnMgKGkuZS4gY2hhcmFjdGVycyBzaG91bGQgbm90IGRvdWJs
ZSBib3RoDQogICAgYXMgYW4gZW5kIG1hcmtlciBhbmQgYSBiZWdpbiBtYXJrZXIpICovDQogc3Ry
dWN0IGlvZCB7DQotICAgIHN0cnVjdCByeF9jYWxsICpjYWxsOwkvKiBjYWxsIHRvIHdoaWNoIHRv
IHdyaXRlLCBtaWdodCBiZSBhbiBhcnJheSAqLw0KKyAgICBzdHJ1Y3QgemlvcnhfY2FsbCAqY2Fs
bDsJLyogY2FsbCB0byB3aGljaCB0byB3cml0ZSwgbWlnaHQgYmUgYW4gYXJyYXkgKi8NCiAgICAg
aW50IGRldmljZTsJCQkvKiBkdW1wIGRldmljZSBJRCBmb3Igdm9sdW1lICovDQogICAgIGludCBw
YXJlbnRJZDsJCS8qIGR1bXAgcGFyZW50IElEIGZvciB2b2x1bWUgKi8NCiAgICAgc3RydWN0IERp
c2tQYXJ0aXRpb24gKmR1bXBQYXJ0aXRpb247CS8qIER1bXAgcGFydGl0aW9uLiAqLw0KLSAgICBz
dHJ1Y3QgcnhfY2FsbCAqKmNhbGxzOwkvKiBhcnJheSBvZiBwb2ludGVycyB0byBjYWxscyAqLw0K
KyAgICBzdHJ1Y3QgemlvcnhfY2FsbCAqKmNhbGxzOwkvKiBhcnJheSBvZiBwb2ludGVycyB0byBj
YWxscyAqLw0KICAgICBpbnQgbmNhbGxzOwkJCS8qIGhvdyBtYW55IGNhbGxzL2NvZGVzIGluIGFy
cmF5ICovDQogICAgIGludCAqY29kZXM7CQkJLyogb25lIHJldHVybiBjb2RlIGZvciBlYWNoIGNh
bGwgKi8NCiAgICAgY2hhciBoYXZlT2xkQ2hhcjsJCS8qIHN0YXRlIGZvciBwdXNoaW5nIGJhY2sg
YSBjaGFyYWN0ZXIgKi8NCiAgICAgY2hhciBvbGRDaGFyOw0KKyAgICBpbnQgdG9fd3JpdGU7IC8q
IG9uZSBtb3JlIGFzc3VtcHRpb246IHRoaXMgaW9kIG11c3QgYmUgdXNlZCBleGNsdXNpdmVseSBm
b3IgcmVhZCBvciB3cml0ZSAqLw0KIH07DQogDQogDQpAQCAtMTIzLDI5ICsxMjgsMTc4IEBADQog
CQkJIGludCB2b2xpZCwgaW50IHZub2RlTnVtYmVyLCBpbnQgZHVtcEV2ZXJ5dGhpbmcsDQogCQkJ
IHJlZ2lzdGVyIHN0cnVjdCB2b2xpbnRTaXplICpzaXplKTsNCiANCi1zdGF0aWMgdm9pZA0KLWlv
ZF9Jbml0KHJlZ2lzdGVyIHN0cnVjdCBpb2QgKmlvZHAsIHJlZ2lzdGVyIHN0cnVjdCByeF9jYWxs
ICpjYWxsKQ0KLXsNCi0gICAgaW9kcC0+Y2FsbCA9IGNhbGw7DQorLy9yZXR1cm4gMCBvbiBzdWNj
ZXNzLCAoLTEpIG9uIGZhaWwNCitzdGF0aWMgaW50IGlvZF9Jbml0KHJlZ2lzdGVyIHN0cnVjdCBp
b2QgKmlvZHAsIHJlZ2lzdGVyIHN0cnVjdCByeF9jYWxsICpjYWxsLA0KKwkJCWludCBjb21wcmVz
cywgaW50IGxldmVsLCBpbnQgdG9fd3JpdGUpDQorew0KKyAgICBtZW1zZXQoaW9kcCwgMCwgc2l6
ZW9mKHN0cnVjdCBpb2QpKTsNCisgICAgaW9kcC0+dG9fd3JpdGUgPSB0b193cml0ZTsNCisgICAg
aW9kcC0+Y2FsbCA9IChzdHJ1Y3QgemlvcnhfY2FsbCAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IHpp
b3J4X2NhbGwpKTsNCisgICAgaWYgKGlvZHAtPmNhbGw9PU5VTEwpDQorICAgIHsNCisgICAgICAg
IExvZygiaW9kX0luaXQ6IG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsNCisgICAgICAgIHJl
dHVybiAoLTEpOw0KKyAgICB9DQorDQorICAgIGlmICh0b193cml0ZT09REVGX1RPX1dSSVRFKQ0K
KyAgICB7DQorICAgICAgICBpZiAoemlvcnhCZWdpbldyaXRlKGNhbGwsIGNvbXByZXNzLCBsZXZl
bCwgaW9kcC0+Y2FsbCkhPVpJT1JYX09LKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIExvZygi
aW9kX0luaXQ6IHppb3J4QmVnaW5Xcml0ZSBmYWlsZWQ6ICVzXG4iLCBpb2RwLT5jYWxsLT5sYXN0
RXJyb3JNc2cpOw0KKyAgICAgICAgICAgIGZyZWUoaW9kcC0+Y2FsbCk7DQorICAgICAgICAgICAg
aW9kcC0+Y2FsbCA9IE5VTEw7DQorICAgICAgICAgICAgcmV0dXJuICgtMSk7DQorICAgICAgICB9
DQorICAgIH0gZWxzZSB7DQorICAgICAgICBpZiAoemlvcnhCZWdpblJlYWQoY2FsbCwgY29tcHJl
c3MsIGxldmVsLCBpb2RwLT5jYWxsKSE9WklPUlhfT0spDQorICAgICAgICB7DQorICAgICAgICAg
ICAgTG9nKCJpb2RfSW5pdDogemlvcnhCZWdpblJlYWQgZmFpbGVkOiAlc1xuIiwgaW9kcC0+Y2Fs
bC0+bGFzdEVycm9yTXNnKTsNCisgICAgICAgICAgICBmcmVlKGlvZHAtPmNhbGwpOw0KKyAgICAg
ICAgICAgIGlvZHAtPmNhbGwgPSBOVUxMOw0KKyAgICAgICAgICAgIHJldHVybiAoLTEpOw0KKyAg
ICAgICAgfQ0KKyAgICB9DQorDQogICAgIGlvZHAtPmhhdmVPbGRDaGFyID0gMDsNCiAgICAgaW9k
cC0+bmNhbGxzID0gMTsNCi0gICAgaW9kcC0+Y2FsbHMgPSAoc3RydWN0IHJ4X2NhbGwgKiopMDsN
CisgICAgaW9kcC0+Y2FsbHMgPSAoc3RydWN0IHppb3J4X2NhbGwgKiopIDA7DQorDQorICAgIHJl
dHVybiAwOw0KIH0NCiANCi1zdGF0aWMgdm9pZA0KLWlvZF9Jbml0TXVsdGkoc3RydWN0IGlvZCAq
aW9kcCwgc3RydWN0IHJ4X2NhbGwgKipjYWxscywgaW50IG5jYWxscywNCi0JICAgICAgaW50ICpj
b2RlcykNCisvL3JldHVybiAwIG9uIHN1Y2Nlc3MsICgtMSkgb24gZmFpbA0KK3N0YXRpYyBpbnQg
aW9kX0RvbmUoc3RydWN0IGlvZCAqaW9kcCkNCiB7DQorICAgIGludCByZXM7DQogDQotICAgIGlv
ZHAtPmNhbGxzID0gY2FsbHM7DQotICAgIGlvZHAtPmhhdmVPbGRDaGFyID0gMDsNCi0gICAgaW9k
cC0+bmNhbGxzID0gbmNhbGxzOw0KLSAgICBpb2RwLT5jb2RlcyA9IGNvZGVzOw0KLSAgICBpb2Rw
LT5jYWxsID0gKHN0cnVjdCByeF9jYWxsICopMDsNCisgICAgcmVzID0gMDsNCisgICAgaWYgKGlv
ZHAtPnRvX3dyaXRlPT1ERUZfVE9fV1JJVEUpDQorICAgIHsNCisgICAgICAgIGlmICh6aW9yeEVu
ZFdyaXRlKGlvZHAtPmNhbGwpIT1aSU9SWF9PSykNCisJew0KKwkgICAgTG9nKCJpb2RfRG9uZTog
emlvcnhFbmRXcml0ZSBmYWlsZWQ6ICVzXG4iLCBpb2RwLT5jYWxsLT5sYXN0RXJyb3JNc2cpOw0K
KwkgICAgcmVzID0gKC0xKTsNCisJfQ0KKyAgICB9IGVsc2Ugew0KKyAgICAgICAgaWYgKHppb3J4
RW5kUmVhZChpb2RwLT5jYWxsKSE9WklPUlhfT0spDQorCXsNCisJICAgIExvZygiaW9kX0RvbmU6
IHppb3J4RW5kUmVhZCBmYWlsZWQ6ICVzXG4iLCBpb2RwLT5jYWxsLT5sYXN0RXJyb3JNc2cpOw0K
KwkgICAgcmVzID0gKC0xKTsNCisJfQ0KKyAgICB9DQorICAgIGZyZWUoaW9kcC0+Y2FsbCk7DQor
ICAgIGlvZHAtPmNhbGwgPSBOVUxMOw0KKyAgICByZXR1cm4gcmVzOw0KK30NCisNCisvL3JldHVy
bjogMCBvbiBPSywgKC0xKSBvbiBmYWlsdXJlDQorc3RhdGljIGludCBpb2RfSW5pdE11bHRpKHN0
cnVjdCBpb2QgKmlvZHAsIHN0cnVjdCByeF9jYWxsICoqY2FsbHMsIGludCBuY2FsbHMsDQorCQkg
ICBpbnQgKmNvZGVzLCBpbnQgY29tcHJlc3MsIGludCBsZXZlbCwgaW50IHRvX3dyaXRlKQ0KK3sN
CisgIGludCBpLCBqLCByZXN1bHQsIHJjOw0KKw0KKyAgbWVtc2V0KGlvZHAsIDAsIHNpemVvZihz
dHJ1Y3QgaW9kKSk7DQorICBpb2RwLT50b193cml0ZSA9IHRvX3dyaXRlOw0KKyAgaW9kcC0+Y2Fs
bHMgPSAoc3RydWN0IHppb3J4X2NhbGwgKiopbWFsbG9jKG5jYWxscypzaXplb2Yoc3RydWN0IHpp
b3J4X2NhbGwgKikpOw0KKyAgaWYgKGlvZHAtPmNhbGxzPT1OVUxMKQ0KKyAgew0KKyAgICBMb2co
ImlvZF9Jbml0TXVsdGk6IG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsNCisgICAgcmV0dXJu
ICgtMSk7DQorICB9DQorDQorICBtZW1zZXQoaW9kcC0+Y2FsbHMsIDAsIG5jYWxscypzaXplb2Yo
c3RydWN0IHppb3J4Y2FsbCAqKSk7DQorICBmb3IoaT0wOyBpPG5jYWxsczsgaSsrKQ0KKyAgew0K
KyAgICBpb2RwLT5jYWxsc1tpXSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHppb3J4X2NhbGwpKTsN
CisgICAgaWYgKGlvZHAtPmNhbGxzW2ldPT1OVUxMKQ0KKyAgICB7DQorICAgICAgTG9nKCJpb2Rf
SW5pdE11bHRpOiBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvciAjMlxuIik7DQorICAgICAgZ290byBm
YWlsOw0KKyAgICB9DQorICB9DQorDQorICByZXN1bHQgPSAwOw0KKyAgZm9yKGk9MDsgaTxuY2Fs
bHM7IGkrKykNCisgIHsNCisgICAgaWYgKHRvX3dyaXRlPT1ERUZfVE9fV1JJVEUpDQorICAgICAg
cmMgPSB6aW9yeEJlZ2luV3JpdGUoY2FsbHNbaV0sIGNvbXByZXNzLCBsZXZlbCwgaW9kcC0+Y2Fs
bHNbaV0pOw0KKyAgICBlbHNlDQorICAgICAgcmMgPSB6aW9yeEJlZ2luUmVhZChjYWxsc1tpXSwg
Y29tcHJlc3MsIGxldmVsLCBpb2RwLT5jYWxsc1tpXSk7DQorICAgIGlmIChyYyE9WklPUlhfT0sp
DQorICAgIHsNCisgICAgICBMb2coaW9kcC0+Y2FsbHNbaV0tPmxhc3RFcnJvck1zZyk7DQorICAg
ICAgLy9kcmF3IGJhY2sgaW5pdGlhbGl6YXRpb24gc28gZmFyOg0KKyAgICAgIGZvcihqPTA7IGo8
aTsgaisrKQ0KKyAgICAgIHsNCisgICAgICAgIGlmICh0b193cml0ZT09REVGX1RPX1dSSVRFKQ0K
KyAgICAgICAgICB6aW9yeEVuZFdyaXRlKGlvZHAtPmNhbGxzW2pdKTsNCisJZWxzZQ0KKyAgICAg
ICAgICB6aW9yeEVuZFJlYWQoaW9kcC0+Y2FsbHNbal0pOw0KKyAgICAgIH0NCisgICAgfQ0KKyAg
fQ0KKw0KKyAgaW9kcC0+aGF2ZU9sZENoYXIgPSAwOw0KKyAgaW9kcC0+bmNhbGxzID0gbmNhbGxz
Ow0KKyAgaW9kcC0+Y29kZXMgPSBjb2RlczsNCisgIGlvZHAtPmNhbGwgPSAoc3RydWN0IHppb3J4
X2NhbGwgKikgMDsNCisNCisgIHJldHVybiAwOw0KKw0KK2ZhaWw6DQorICBpZiAoaW9kcC0+Y2Fs
bHMhPU5VTEwpDQorICB7DQorICAgIGZvcihpPTA7IGk8bmNhbGxzOyBpKyspDQorICAgIHsNCisg
ICAgICBpZiAoaW9kcC0+Y2FsbHNbaV0hPU5VTEwpDQorICAgICAgICBmcmVlKGlvZHAtPmNhbGxz
W2ldKTsNCisgICAgfQ0KKyAgICBmcmVlKGlvZHAtPmNhbGxzKTsNCisgICAgaW9kcC0+Y2FsbHMg
PSBOVUxMOw0KKyAgfQ0KKyAgcmV0dXJuICgtMSk7DQorfQ0KKw0KKy8vcmV0dXJuOiAwIG9uIE9L
LCAoLTEpIG9uIGZhaWx1cmUNCitzdGF0aWMgaW50IGlvZF9Eb25lTXVsdGkoc3RydWN0IGlvZCAq
aW9kcCkNCit7DQorICBpbnQgaSwgcmVzdWx0LCByYzsNCisgIGlmIChpb2RwPT1OVUxMKQ0KKyAg
ICByZXR1cm4gKC0xKTsNCisNCisgIGlmIChpb2RwLT5jYWxscz09TlVMTCkNCisgICAgcmV0dXJu
ICgtMSk7DQorDQorICByZXN1bHQgPSAwOw0KKyAgZm9yKGk9MDsgaTxpb2RwLT5uY2FsbHM7IGkr
KykNCisgIHsNCisgICAgaWYgKGlvZHAtPnRvX3dyaXRlPT1ERUZfVE9fV1JJVEUpDQorICAgICAg
cmMgPSB6aW9yeEVuZFdyaXRlKGlvZHAtPmNhbGxzW2ldKTsNCisgICAgZWxzZQ0KKyAgICAgIHJj
ID0gemlvcnhFbmRSZWFkKGlvZHAtPmNhbGxzW2ldKTsNCisgICAgaWYgKHJjIT1aSU9SWF9PSykN
CisgICAgew0KKyAgICAgIExvZyhpb2RwLT5jYWxsc1tpXS0+bGFzdEVycm9yTXNnKTsNCisgICAg
ICByZXN1bHQgPSAoLTEpOw0KKyAgICB9DQorICB9DQorDQorICBpZiAoaW9kcC0+Y2FsbHMhPU5V
TEwpDQorICB7DQorICAgIGZvcihpPTA7IGk8aW9kcC0+bmNhbGxzOyBpKyspDQorICAgIHsNCisg
ICAgICBpZiAoaW9kcC0+Y2FsbHNbaV0hPU5VTEwpDQorICAgICAgICBmcmVlKGlvZHAtPmNhbGxz
W2ldKTsNCisgICAgfQ0KKyAgICBmcmVlKGlvZHAtPmNhbGxzKTsNCisgICAgaW9kcC0+Y2FsbHMg
PSBOVUxMOw0KKyAgfQ0KKw0KKyAgcmV0dXJuIHJlc3VsdDsNCiB9DQogDQogLyogTi5CLiBpb2Rf
UmVhZCBkb2Vzbid0IGNoZWNrIGZvciBvbGRjaGFyIChzZWUgcHJldmlvdXMgY29tbWVudCkgKi8N
Ci0jZGVmaW5lIGlvZF9SZWFkKGlvZHAsIGJ1ZiwgbmJ5dGVzKSByeF9SZWFkKChpb2RwKS0+Y2Fs
bCwgYnVmLCBuYnl0ZXMpDQorI2RlZmluZSBpb2RfUmVhZChpb2RwLCBidWYsIG5ieXRlcykgemlv
cnhSZWFkKChpb2RwKS0+Y2FsbCwgYnVmLCBuYnl0ZXMpDQogDQogLyogRm9yIHRoZSBzaW5nbGUg
ZHVtcCBjYXNlLCBpdCdzIG9rIHRvIGp1c3QgcmV0dXJuIHRoZSAiYnl0ZXMgd3JpdHRlbiINCiAg
KiB0aGF0IHJ4X1dyaXRlIHJldHVybnMsIHNpbmNlIGFsbCB0aGUgY2FsbGVycyBvZiBpb2RfV3Jp
dGUgYWJvcnQgd2hlbg0KQEAgLTE2MywxNSArMzE3LDI1IEBADQogCSAgIHx8ICghaW9kcC0+Y2Fs
bCAmJiBpb2RwLT5uY2FsbHMgPj0gMSAmJiBpb2RwLT5jYWxscykpOw0KIA0KICAgICBpZiAoaW9k
cC0+Y2FsbCkgew0KLQljb2RlID0gcnhfV3JpdGUoaW9kcC0+Y2FsbCwgYnVmLCBuYnl0ZXMpOw0K
LQlyZXR1cm4gY29kZTsNCisgICAgICAgIGNvZGUgPSB6aW9yeFdyaXRlKGlvZHAtPmNhbGwsIGJ1
ZiwgbmJ5dGVzKTsNCisgICAgICAgIGlmIChjb2RlIT1uYnl0ZXMgJiYgaW9kcC0+Y2FsbC0+bGFz
dEVycm9yTXNnWzBdIT0nXDAnKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIExvZygiaW9kX1dy
aXRlIGVycm9yOiAlc1xuIiwgaW9kcC0+Y2FsbC0+bGFzdEVycm9yTXNnKTsNCisgICAgICAgICAg
ICBpb2RwLT5jYWxsLT5sYXN0RXJyb3JNc2dbMF0gPSAnXDAnOw0KKyAgICAgICAgfQ0KKyAgICAg
ICAgcmV0dXJuIGNvZGU7DQogICAgIH0NCiANCiAgICAgZm9yIChpID0gMDsgaSA8IGlvZHAtPm5j
YWxsczsgaSsrKSB7DQogCWlmIChpb2RwLT5jYWxsc1tpXSAmJiAhaW9kcC0+Y29kZXNbaV0pIHsN
Ci0JICAgIGNvZGUgPSByeF9Xcml0ZShpb2RwLT5jYWxsc1tpXSwgYnVmLCBuYnl0ZXMpOw0KKyAg
ICAgICAgICAgIGNvZGUgPSB6aW9yeFdyaXRlKGlvZHAtPmNhbGxzW2ldLCBidWYsIG5ieXRlcyk7
DQogCSAgICBpZiAoY29kZSAhPSBuYnl0ZXMpIHsJLyogZXZlcnl0aGluZyBnZXRzIG1lcmdlZCBp
bnRvIGEgc2luZ2xlIGVycm9yICovDQotCQlpb2RwLT5jb2Rlc1tpXSA9IFZPTFNFUkRVTVBFUlJP
UjsJLyogYnV0IHRoYXQncyBleGFjdGx5IHdoYXQgdGhlICovDQorICAgICAgICAgICAgICAgIGlv
ZHAtPmNvZGVzW2ldID0gVk9MU0VSRFVNUEVSUk9SOyAgLyogYnV0IHRoYXQncyBleGFjdGx5IHdo
YXQgdGhlICovDQorICAgICAgICAgICAgICAgIGlmIChpb2RwLT5jYWxsc1tpXS0+bGFzdEVycm9y
TXNnWzBdIT0nXDAnKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAg
ICAgTG9nKCJpb2RfV3JpdGUgZXJyb3I6ICVzXG4iLCBpb2RwLT5jYWxsc1tpXS0+bGFzdEVycm9y
TXNnKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBpb2RwLT5jYWxsc1tpXS0+bGFzdEVycm9y
TXNnWzBdID0gJ1wwJzsNCisgICAgICAgICAgICAgICAgfQ0KIAkgICAgfSAvKiBzdGFuZGFyZCBk
dW1wIGRvZXMsIGFueXdheXMgKi8NCiAJICAgIGVsc2Ugew0KIAkJb25lX3N1Y2Nlc3MgPSBUUlVF
Ow0KQEAgLTcwOCwxMyArODcyLDE2IEBADQogDQogLyogRHVtcCBhIHdob2xlIHZvbHVtZSAqLw0K
IGludA0KLUR1bXBWb2x1bWUocmVnaXN0ZXIgc3RydWN0IHJ4X2NhbGwgKmNhbGwsIHJlZ2lzdGVy
IFZvbHVtZSAqIHZwLA0KLQkgICBhZnNfaW50MzIgZnJvbXRpbWUsIGludCBkdW1wQWxsRGlycykN
CitEdW1wVm9sdW1lKHJlZ2lzdGVyIHN0cnVjdCByeF9jYWxsICpjYWxsLCByZWdpc3RlciBzdHJ1
Y3QgVm9sdW1lICogdnAsDQorCQlhZnNfaW50MzIgZnJvbXRpbWUsIGFmc19pbnQzMiBkdW1wQWxs
RGlycywNCisgICAgICAgICAgICAgICAgYWZzX2ludDMyIGNvbXByZXNzLCBhZnNfaW50MzIgbGV2
ZWwpDQogew0KICAgICBzdHJ1Y3QgaW9kIGlvZDsNCiAgICAgaW50IGNvZGUgPSAwOw0KICAgICBy
ZWdpc3RlciBzdHJ1Y3QgaW9kICppb2RwID0gJmlvZDsNCi0gICAgaW9kX0luaXQoaW9kcCwgY2Fs
bCk7DQorDQorICAgIGlmIChpb2RfSW5pdChpb2RwLCBjYWxsLCBjb21wcmVzcywgbGV2ZWwsIERF
Rl9UT19XUklURSkhPTApDQorICAgICAgIHJldHVybiBWT0xTRVJEVU1QRVJST1I7IC8vZG9uJ3Qg
bmVlZCB0byBjYWxsIGlvZF9Eb25lIGluIHRoaXMgY2FzZQ0KIA0KICAgICBpZiAoIWNvZGUpDQog
CWNvZGUgPSBEdW1wRHVtcEhlYWRlcihpb2RwLCB2cCwgZnJvbXRpbWUpOw0KQEAgLTcyMywyNSAr
ODkwLDMxIEBADQogCWNvZGUgPSBEdW1wUGFydGlhbChpb2RwLCB2cCwgZnJvbXRpbWUsIGR1bXBB
bGxEaXJzKTsNCiANCiAvKiBoYWNrIGZvbGxvd3MuICBFcnJvcnMgc2hvdWxkIGJlIGhhbmRsZWQg
cXVpdGUgZGlmZmVyZW50bHkgaW4gdGhpcyB2ZXJzaW9uIG9mIGR1bXAgdGhhbiB0aGV5IHVzZWQg
dG8gYmUuKi8NCi0gICAgaWYgKHJ4X0Vycm9yKGlvZHAtPmNhbGwpKSB7DQorICAgIGlmIChyeF9F
cnJvcihpb2RwLT5jYWxsLT5jYWxsKSkgew0KIAlMb2coIjEgVm9sc2VyOiBEdW1wVm9sdW1lOiBS
eCBjYWxsIGZhaWxlZCBkdXJpbmcgZHVtcCwgZXJyb3IgJWRcbiIsDQotCSAgICByeF9FcnJvcihp
b2RwLT5jYWxsKSk7DQorCSAgICByeF9FcnJvcihpb2RwLT5jYWxsLT5jYWxsKSk7DQorCWlvZF9E
b25lKGlvZHApOw0KIAlyZXR1cm4gVk9MU0VSRFVNUEVSUk9SOw0KICAgICB9DQogICAgIGlmICgh
Y29kZSkNCiAJY29kZSA9IER1bXBFbmQoaW9kcCk7DQogDQorICAgIGlmIChpb2RfRG9uZShpb2Rw
KSE9MCkNCisgICAgICAgIGNvZGUgPSBWT0xTRVJEVU1QRVJST1I7DQorDQogICAgIHJldHVybiBj
b2RlOw0KIH0NCiANCiAvKiBEdW1wIGEgdm9sdW1lIHRvIG11bHRpcGxlIHBsYWNlcyovDQogaW50
DQogRHVtcFZvbE11bHRpKHN0cnVjdCByeF9jYWxsICoqY2FsbHMsIGludCBuY2FsbHMsIFZvbHVt
ZSAqIHZwLA0KLQkgICAgIGFmc19pbnQzMiBmcm9tdGltZSwgaW50IGR1bXBBbGxEaXJzLCBpbnQg
KmNvZGVzKQ0KKyAgICAgICAgICAgICAgICBhZnNfaW50MzIgZnJvbXRpbWUsIGludCBkdW1wQWxs
RGlycywgaW50ICpjb2RlcywNCisgICAgICAgICAgICAgICAgaW50IGNvbXByZXNzLCBpbnQgbGV2
ZWwpDQogew0KICAgICBzdHJ1Y3QgaW9kIGlvZDsNCiAgICAgaW50IGNvZGUgPSAwOw0KLSAgICBp
b2RfSW5pdE11bHRpKCZpb2QsIGNhbGxzLCBuY2FsbHMsIGNvZGVzKTsNCisgICAgaWYgKGlvZF9J
bml0TXVsdGkoJmlvZCwgY2FsbHMsIG5jYWxscywgY29kZXMsIGNvbXByZXNzLCBsZXZlbCwgREVG
X1RPX1dSSVRFKSE9MCkNCisgICAgICAgIHJldHVybiBWT0xTRVJEVU1QRVJST1I7IC8vZG9uJ3Qg
bmVlZCB0byBjYWxsIGlvZF9Eb25lTXVsdGkgaW4gdGhpcyBjYXNlDQogDQogICAgIGlmICghY29k
ZSkNCiAJY29kZSA9IER1bXBEdW1wSGVhZGVyKCZpb2QsIHZwLCBmcm9tdGltZSk7DQpAQCAtNzQ5
LDYgKzkyMiwxMCBAQA0KIAljb2RlID0gRHVtcFBhcnRpYWwoJmlvZCwgdnAsIGZyb210aW1lLCBk
dW1wQWxsRGlycyk7DQogICAgIGlmICghY29kZSkNCiAJY29kZSA9IER1bXBFbmQoJmlvZCk7DQor
DQorICAgIGlmIChpb2RfRG9uZU11bHRpKCZpb2QpIT0wKQ0KKyAgICAgIGNvZGUgPSBWT0xTRVJE
VU1QRVJST1I7DQorDQogICAgIHJldHVybiBjb2RlOw0KIH0NCiANCkBAIC05MjcsOCArMTEwNCw4
IEBADQogCQkgICAgaWYgKHZub2RlLT50eXBlICE9IHZOdWxsICYmIFZORElTS19HRVRfSU5PKHZu
b2RlKSkgew0KIAkJCWNudDErKzsNCiAJCQlpZiAoRG9Mb2dnaW5nKSB7DQotCQkJICAgIExvZygi
UmVzdG9yZVZvbHVtZSAldSBDbGVhbnVwOiBSZW1vdmluZyBvbGQgdm5vZGU9JXUgaW5vZGU9JWxs
dSBzaXplPXVua25vd25cbiIsIA0KLSAgICAgICAgICAgICAgICAgICAgIFZfaWQodnApLCBiaXRO
dW1iZXJUb1Zub2RlTnVtYmVyKGksIGNsYXNzKSwgDQorCQkJICAgIExvZygiUmVzdG9yZVZvbHVt
ZSAldSBDbGVhbnVwOiBSZW1vdmluZyBvbGQgdm5vZGU9JXUgaW5vZGU9JWxsdSBzaXplPXVua25v
d25cbiIsDQorICAgICAgICAgICAgICAgICAgICAgVl9pZCh2cCksIGJpdE51bWJlclRvVm5vZGVO
dW1iZXIoaSwgY2xhc3MpLA0KICAgICAgICAgICAgICAgICAgICAgIChhZnNfdWludG1heF90KSBW
TkRJU0tfR0VUX0lOTyh2bm9kZSkpOw0KIAkJCX0NCiAJCQlJSF9ERUMoVl9saW5rSGFuZGxlKHZw
KSwgVk5ESVNLX0dFVF9JTk8odm5vZGUpLA0KQEAgLTk4Miw3ICsxMTU5LDggQEANCiANCiBpbnQN
CiBSZXN0b3JlVm9sdW1lKHJlZ2lzdGVyIHN0cnVjdCByeF9jYWxsICpjYWxsLCBWb2x1bWUgKiBh
dnAsIGludCBpbmNyZW1lbnRhbCwNCi0JICAgICAgc3RydWN0IHJlc3RvcmVDb29raWUgKmNvb2tp
ZSkNCisgICAgICAgICAgICAgICAgc3RydWN0IHJlc3RvcmVDb29raWUgKmNvb2tpZSwNCisgICAg
ICAgICAgICAgICAgaW50IGNvbXByZXNzLCBpbnQgbGV2ZWwpDQogew0KICAgICBWb2x1bWVEaXNr
RGF0YSB2b2w7DQogICAgIHN0cnVjdCBEdW1wSGVhZGVyIGhlYWRlcjsNCkBAIC05OTUsNyArMTE3
Myw4IEBADQogICAgIGludCBzMSA9IDAsIHMyID0gMCwgZGVsbyA9IDAsIHRkZWxvOw0KICAgICBp
bnQgdGFnOw0KIA0KLSAgICBpb2RfSW5pdChpb2RwLCBjYWxsKTsNCisgICAgaWYgKGlvZF9Jbml0
KGlvZHAsIGNhbGwsIGNvbXByZXNzLCBsZXZlbCwgREVGX1RPX1JFQUQpIT0wKQ0KKyAgICAgICBy
ZXR1cm4gVk9MU0VSRFVNUEVSUk9SOyAvL2Rvbid0IG5lZWQgdG8gY2FsbCBpb2RfRG9uZSBpbiB0
aGlzIGNhc2UNCiANCiAgICAgdnAgPSBhdnA7DQogICAgIGlmICghUmVhZER1bXBIZWFkZXIoaW9k
cCwgJmhlYWRlcikpIHsNCkBAIC0xMDc2LDYgKzEyNTUsMTAgQEANCiAJZnJlZSgoY2hhciAqKWIx
KTsNCiAgICAgaWYgKGIyKQ0KIAlmcmVlKChjaGFyICopYjIpOw0KKw0KKyAgICBpZiAoaW9kX0Rv
bmUoaW9kcCkhPTApDQorICAgICAgICBlcnJvciA9IFZPTFNFUkRVTVBFUlJPUjsNCisNCiAgICAg
cmV0dXJuIGVycm9yOw0KIH0NCiANCmRpZmYgLU5hdXIgb3BlbmFmcy0xLjMuNzcvc3JjL3ZvbHNl
ci9NYWtlZmlsZS5pbiBvcGVuYWZzLTEuMy43N3ovc3JjL3ZvbHNlci9NYWtlZmlsZS5pbg0KLS0t
IG9wZW5hZnMtMS4zLjc3L3NyYy92b2xzZXIvTWFrZWZpbGUuaW4JMjAwNC0wOC0wOSAwNjozNTo1
NC4wMDAwMDAwMDAgKzAyMDANCisrKyBvcGVuYWZzLTEuMy43N3ovc3JjL3ZvbHNlci9NYWtlZmls
ZS5pbgkyMDA0LTEyLTI4IDE2OjI0OjM3LjAwMDAwMDAwMCArMDEwMA0KQEAgLTExLDEzICsxMSwx
MyBAQA0KIA0KIA0KIFZJTkNMUz0ke1RPUF9JTkNESVJ9L2Fmcy9wYXJ0aXRpb24uaCAke1RPUF9J
TkNESVJ9L2Fmcy92b2x1bWUuaCBcDQotCSR7VE9QX0lOQ0RJUn0vYWZzL3Zsc2VydmVyLmggdm9s
LmggZHVtcC5oIHZvbHNlci5oICBsb2NrZGF0YS5oDQorCSR7VE9QX0lOQ0RJUn0vYWZzL3Zsc2Vy
dmVyLmggdm9sLmggZHVtcC5oIHZvbHNlci5oIGxvY2tkYXRhLmggemlvcnguaA0KIA0KIFJJTkNM
Uz0ke1RPUF9JTkNESVJ9L3J4L3J4LmggJHtUT1BfSU5DRElSfS9yeC94ZHIuaCBcDQogICAgICAg
ICR7VE9QX0lOQ0RJUn0vYWZzL2tleXMuaCAke1RPUF9JTkNESVJ9L2Fmcy9jZWxsY29uZmlnLmgg
XA0KLQkke1RPUF9JTkNESVJ9L3ViaWsuaCAke1RPUF9JTkNESVJ9L2Fmcy9jbWQuaA0KKwkke1RP
UF9JTkNESVJ9L3ViaWsuaCAke1RPUF9JTkNESVJ9L2Fmcy9jbWQuaCB6aW9yeC5oDQogDQotSU5U
SU5DTFM9dm9saW50Lmggdm9sc2VyLmggDQorSU5USU5DTFM9dm9saW50Lmggdm9sc2VyLmggemlv
cnguaA0KIA0KIExJQlM9XA0KIAkke1RPUF9MSUJESVJ9L2xpYmF1ZGl0LmEgXA0KQEAgLTM3LDcg
KzM3LDkgQEANCiAJJHtUT1BfTElCRElSfS9saWJjb21fZXJyLmEgXA0KIAkke1RPUF9MSUJESVJ9
L2xpYmthdXRoLmEgXA0KIAkke1RPUF9MSUJESVJ9L2xpYnVzZC5hIFwNCi0JJHtUT1BfTElCRElS
fS91dGlsLmENCisJJHtUT1BfTElCRElSfS91dGlsLmEgXA0KKwkvdXNyL2xpYi9saWJ6LmEgXA0K
KwkvdXNyL2xpYi9saWJiejIuYQ0KIA0KIFZPTERVTVBfTElCUyA9IFwNCiAJLi4vdm9sL2loYW5k
bGUubyBcDQpAQCAtNTAsOSArNTIsOSBAQA0KIAkke1RPUF9MSUJESVJ9L2xpYmx3cC5hICBcDQog
CSR7VE9QX0xJQkRJUn0vbGliYWNsLmENCiANCi1WU09CSlM9dnNwcm9jcy5vIHZzdXRpbHMubyBs
b2NrcHJvY3MubyB2b2xpbnQueGRyLm8gdm9sZXJyLm8gDQorVlNPQkpTPXZzcHJvY3MubyB2c3V0
aWxzLm8gbG9ja3Byb2NzLm8gdm9saW50Lnhkci5vIHZvbGVyci5vIHppb3J4Lm8NCiBTT0JKUz12
b2xtYWluLm8gdm9scHJvY3MubyBwaHlzaW8ubyBjb21tb24ubyB2b2x0cmFucy5vIHZvbGVyci5v
IFwNCi0gdm9saW50LmNzLm8gZHVtcHN0dWZmLm8gdm9saW50LnNzLm8gdm9saW50Lnhkci5vDQor
IHZvbGludC5jcy5vIGR1bXBzdHVmZi5vIHZvbGludC5zcy5vIHZvbGludC54ZHIubyB6aW9yeC5v
DQogDQogYWxsOiB2b2xzZXJ2ZXIgdm9zIHJlc3RvcmV2b2wgdm9sZHVtcCBcDQogCSR7VE9QX0lO
Q0RJUn0vYWZzL3ZvbHNlci5oIFwNCkBAIC0xMTQsNiArMTE2LDcgQEANCiBwaHlzaW8ubzogcGh5
c2lvLmMgJHtWSU5DTFN9DQogY29tbW9uLm86IGNvbW1vbi5jICR7VklOQ0xTfQ0KIGxvY2twcm9j
cy5vOiBsb2NrcHJvY3MuYyAke1ZJTkNMU30gJHtJTlRJTkNMU30gJHtSSU5DTFN9DQoremlvcngu
bzogemlvcnguYyB6aW9yeC5oDQogDQogIw0KICMgSW5zdGFsbGF0aW9uIHRhcmdldHMNCmRpZmYg
LU5hdXIgb3BlbmFmcy0xLjMuNzcvc3JjL3ZvbHNlci9OVE1ha2VmaWxlIG9wZW5hZnMtMS4zLjc3
ei9zcmMvdm9sc2VyL05UTWFrZWZpbGUNCi0tLSBvcGVuYWZzLTEuMy43Ny9zcmMvdm9sc2VyL05U
TWFrZWZpbGUJMjAwNC0wOC0wNSAxODozMTo0My4wMDAwMDAwMDAgKzAyMDANCisrKyBvcGVuYWZz
LTEuMy43N3ovc3JjL3ZvbHNlci9OVE1ha2VmaWxlCTIwMDQtMTItMjEgMTg6NTM6MDYuMDAwMDAw
MDAwICswMTAwDQpAQCAtMTcsMTIgKzE3LDE0IEBADQogSU5DRklMRVMgPSBcDQogCSQoSU5DRklM
RURJUilcdm9sc2VyX3Byb3RvdHlwZXMuaCBcDQogCSQoSU5DRklMRURJUilcdm9sc2VyLmggXA0K
LQkkKElOQ0ZJTEVESVIpXHZvbGludC5oDQorCSQoSU5DRklMRURJUilcdm9saW50LmggXA0KKwkk
KElOQ0ZJTEVESVIpXHppb3J4LmgNCiANCiANCiBMT0NBTF9JTkNGSUxFUyA9IFwNCiAJdm9sc2Vy
LmggXA0KLQl2b2xpbnQuaA0KKwl2b2xpbnQuaCBcDQorCXppb3J4LmgNCiANCiAjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjDQogIyBCdWlsZCB2b2xzZXIgbGlicmFyeS4NCkBAIC0zNyw2ICszOSw3IEBADQog
CSQoT1VUKVx2b2xpbnQueGRyLm9iaiBcDQogCSQoT1VUKVx2c3Byb2NzLm9iaiBcDQogCSQoT1VU
KVx2c3V0aWxzLm9iaiBcDQorCSQoT1VUKVx6aW9yeC5vYmoNCiAJJChPVVQpXEFGU19jb21wb25l
bnRfdmVyc2lvbl9udW1iZXIub2JqIA0KIA0KICQoTElCRklMRSk6ICQoTElCT0JKUykNCkBAIC04
NSwxNiArODgsMTggQEANCiAJJChPVVQpXHZvbG1haW4ub2JqIFwNCiAJJChPVVQpXHZvbHByb2Nz
Lm9iaiBcDQogCSQoT1VUKVx2b2x0cmFucy5vYmogXA0KKwkkKE9VVClcemlvcngub2JqIFwNCiAJ
JChPVVQpXHZvbHNlcnZlci5yZXMNCiAJDQogDQogVk9MU0VSVkVSX0VYRUxJQlMgPSBcDQogCSQo
REVTVERJUilcbGliXGFmc1xhZnNkaXIubGliIFwNCi0JJChERVNURElSKVxsaWJcYWZzXGFmc3By
b2NtZ210LmxpYg0KKwkkKERFU1RESVIpXGxpYlxhZnNcYWZzcHJvY21nbXQubGliIFwNCisJJGxp
YnoubGliDQogDQogJChWT0xTRVJWRVJfRVhFRklMRSk6ICQoVk9MU0VSVkVSX0VYRU9CSlMpICQo
Vk9MU0VSVkVSX0VYRUxJQlMpICQoRVhFQ19MSUJTKQ0KIAkkKEVYRUNPTkxJTkspIGRuc2FwaS5s
aWIgbXByLmxpYg0KLQkkKEVYRVBSRVApIA0KKwkkKEVYRVBSRVApDQogDQogIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIw0KICMgQnVpbGQgdm9zDQpAQCAtMTA5LDE3ICsxMTQsMTkgQEANCiAJJChPVVQpXGxv
Y2twcm9jcy5vYmogXA0KIAkkKE9VVClcdm9saW50Lnhkci5vYmogXA0KIAkkKE9VVClcdm9sZXJy
Lm9iaiBcDQorCSQoT1VUKVx6aW9yeC5vYmoNCiAJJChPVVQpXHZvcy5yZXMNCiANCiBWT1NfRVhF
TElCUyA9IFwNCiAJJChERVNURElSKVxsaWJcYWZzdWJpay5saWIgXA0KIAkkKERFU1RESVIpXGxp
YlxhZnNcYWZzdm9sc2VyLmxpYiBcDQogCSQoREVTVERJUilcbGliXGFmc1xhZnNwcm9jbWdtdC5s
aWIgXA0KLQkkKERFU1RESVIpXGxpYlxhZnNcYWZzcGlvY3RsLmxpYg0KKwkkKERFU1RESVIpXGxp
YlxhZnNcYWZzcGlvY3RsLmxpYiBcDQorCSRsaWJ6LmxpYg0KIA0KICQoUlNfVk9TX0VYRUZJTEUp
OiAkKFZPU19FWEVPQkpTKSAkKFZPU19FWEVMSUJTKSAkKEVYRUNfTElCUykNCiAJJChFWEVDT05M
SU5LKSBkbnNhcGkubGliIG1wci5saWINCi0JJChFWEVQUkVQKSANCisJJChFWEVQUkVQKQ0KIA0K
ICQoQ0xfVk9TX0VYRUZJTEUpOiAkKFJTX1ZPU19FWEVGSUxFKQ0KIAkkKENPUFkpICAkKiogJEAN
CmRpZmYgLU5hdXIgb3BlbmFmcy0xLjMuNzcvc3JjL3ZvbHNlci92b2xpbnQueGcgb3BlbmFmcy0x
LjMuNzd6L3NyYy92b2xzZXIvdm9saW50LnhnDQotLS0gb3BlbmFmcy0xLjMuNzcvc3JjL3ZvbHNl
ci92b2xpbnQueGcJMjAwMy0wNi0xOSAxODowNjo1OC4wMDAwMDAwMDAgKzAyMDANCisrKyBvcGVu
YWZzLTEuMy43N3ovc3JjL3ZvbHNlci92b2xpbnQueGcJMjAwNC0xMi0yMSAxNjoyMzozNS4wMDAw
MDAwMDAgKzAxMDANCkBAIC00OSw2ICs0OSwxMCBAQA0KICNkZWZpbmUJICAgIFZPTEZPUldBUkRN
VUxUSVBMRSAgMTI4DQogI2RlZmluZSAgICAgVk9MQ09OVkVSVFJPICAgICAgICA2NTUzNg0KICNk
ZWZpbmUgICAgIFZPTEdFVFNJWkUgICAgICAgICAgNjU1MzcNCisjZGVmaW5lCVZPTFJFU1RPUkVf
WgkJNjU1MzUNCisjZGVmaW5lCVZPTEZPUldBUkRfWgkJNjU1MzQNCisjZGVmaW5lCVZPTERVTVBf
WgkJNjU1MzMNCisjZGVmaW5lCVZPTEZPUldBUkRNVUxUSVBMRV9aCTY1NTMyDQogDQogY29uc3Qg
U0laRSA9IDEwMjQ7DQogDQpAQCAtNDA4LDMgKzQxMiwzOSBAQA0KICAgSU4gYWZzX2ludDMyIGZy
b21EYXRlLA0KICAgT1VUIHN0cnVjdCB2b2xpbnRTaXplICpzaXplDQogKSA9IFZPTEdFVFNJWkU7
DQorDQorcHJvYyBSZXN0b3JlWigNCisgIElOIGFmc19pbnQzMiB0b1RyYW5zLA0KKyAgSU4gYWZz
X2ludDMyIGZsYWdzLA0KKyAgSU4gc3RydWN0IHJlc3RvcmVDb29raWUgKmNvb2tpZSwNCisgIElO
IGFmc19pbnQzMiBjb21wcmVzcywNCisgIElOIGFmc19pbnQzMiBsZXZlbA0KKykgc3BsaXQgPSBW
T0xSRVNUT1JFX1o7DQorDQorcHJvYyBGb3J3YXJkTXVsdGlwbGVaKA0KKyAgSU4gYWZzX2ludDMy
IGZyb21UcmFucywNCisgIElOIGFmc19pbnQzMiBmcm9tRGF0ZSwNCisgIElOIG1hbnlEZXN0cyAq
ZGVzdGluYXRpb25zLA0KKyAgSU4gYWZzX2ludDMyIHNwYXJlLA0KKyAgSU4gc3RydWN0IHJlc3Rv
cmVDb29raWUgKmNvb2tpZSwNCisgIE9VVCBtYW55UmVzdWx0cyAqcmVzdWx0cywNCisgIElOIGFm
c19pbnQzMiBjb21wcmVzcywNCisgIElOIGFmc19pbnQzMiBsZXZlbA0KKykgPSBWT0xGT1JXQVJE
TVVMVElQTEVfWjsNCisNCitwcm9jIEZvcndhcmRaKA0KKyAgSU4gYWZzX2ludDMyIGZyb21UcmFu
cywNCisgIElOIGFmc19pbnQzMiBmcm9tRGF0ZSwNCisgIElOIHN0cnVjdCBkZXN0U2VydmVyICpk
ZXN0aW5hdGlvbiwNCisgIElOIGFmc19pbnQzMiBkZXN0VHJhbnMsDQorICBJTiBzdHJ1Y3QgcmVz
dG9yZUNvb2tpZSAqY29va2llLA0KKyAgSU4gYWZzX2ludDMyIGNvbXByZXNzLA0KKyAgSU4gYWZz
X2ludDMyIGxldmVsDQorKSA9IFZPTEZPUldBUkRfWjsNCisNCitwcm9jIER1bXBaKA0KKyAgSU4g
YWZzX2ludDMyIGZyb21UcmFucywNCisgIElOIGFmc19pbnQzMiBmcm9tRGF0ZSwNCisgIElOIGFm
c19pbnQzMiBjb21wcmVzcywNCisgIElOIGFmc19pbnQzMiBsZXZlbA0KKykgc3BsaXQgPSBWT0xE
VU1QX1o7DQpkaWZmIC1OYXVyIG9wZW5hZnMtMS4zLjc3L3NyYy92b2xzZXIvdm9scHJvY3MuYyBv
cGVuYWZzLTEuMy43N3ovc3JjL3ZvbHNlci92b2xwcm9jcy5jDQotLS0gb3BlbmFmcy0xLjMuNzcv
c3JjL3ZvbHNlci92b2xwcm9jcy5jCTIwMDQtMTItMTMgMjA6NDE6MTMuMDAwMDAwMDAwICswMTAw
DQorKysgb3BlbmFmcy0xLjMuNzd6L3NyYy92b2xzZXIvdm9scHJvY3MuYwkyMDA0LTEyLTIyIDAy
OjQ2OjIyLjAwMDAwMDAwMCArMDEwMA0KQEAgLTEwMSw4ICsxMDEsOSBAQA0KIGFmc19pbnQzMiBW
b2xMaXN0Vm9sdW1lcygpLCBYVm9sTGlzdFBhcnRpdGlvbnMoKSwgVm9sTW9uaXRvcigpLA0KIFZv
bFNldElkc1R5cGVzKCksIFZvbFNldERhdGUoKSwgVm9sU2V0RmxhZ3MoKTsNCiANCisNCiAvKiB0
aGlzIGNhbGwgdW5sb2NrcyBhbGwgb2YgdGhlIHBhcnRpdGlvbiBsb2NrcyB3ZSd2ZSBzZXQgKi8N
Ci1pbnQgDQoraW50DQogVlBGdWxsVW5sb2NrKCkNCiB7DQogICAgIHJlZ2lzdGVyIHN0cnVjdCBE
aXNrUGFydGl0aW9uICp0cDsNCkBAIC0xMDU4LDEzICsxMDU5LDI5IEBADQogICovDQogYWZzX2lu
dDMyDQogU0FGU1ZvbEZvcndhcmQoc3RydWN0IHJ4X2NhbGwgKmFjaWQsIGFmc19pbnQzMiBmcm9t
VHJhbnMsIGFmc19pbnQzMiBmcm9tRGF0ZSwNCi0JICAgICAgIHN0cnVjdCBkZXN0U2VydmVyICpk
ZXN0aW5hdGlvbiwgYWZzX2ludDMyIGRlc3RUcmFucywgDQorCSAgICAgICBzdHJ1Y3QgZGVzdFNl
cnZlciAqZGVzdGluYXRpb24sIGFmc19pbnQzMiBkZXN0VHJhbnMsDQogCSAgICAgICBzdHJ1Y3Qg
cmVzdG9yZUNvb2tpZSAqY29va2llKQ0KIHsNCiAgICAgYWZzX2ludDMyIGNvZGU7DQogDQogICAg
IGNvZGUgPQ0KLQlWb2xGb3J3YXJkKGFjaWQsIGZyb21UcmFucywgZnJvbURhdGUsIGRlc3RpbmF0
aW9uLCBkZXN0VHJhbnMsIGNvb2tpZSk7DQorCVZvbEZvcndhcmQoYWNpZCwgZnJvbVRyYW5zLCBm
cm9tRGF0ZSwgZGVzdGluYXRpb24sIGRlc3RUcmFucywgY29va2llLA0KKyAgICAgICAgCTAsIDAp
Ow0KKyAgICBvc2lfYXVkaXRVKGFjaWQsIFZTX0ZvcndhcmRFdmVudCwgY29kZSwgQVVEX0xPTkcs
IGZyb21UcmFucywgQVVEX0hPU1QsDQorCSAgICAgICBkZXN0aW5hdGlvbi0+ZGVzdEhvc3QsIEFV
RF9MT05HLCBkZXN0VHJhbnMsIEFVRF9FTkQpOw0KKyAgICByZXR1cm4gY29kZTsNCit9DQorDQor
YWZzX2ludDMyDQorU0FGU1ZvbEZvcndhcmRaKHN0cnVjdCByeF9jYWxsICphY2lkLCBhZnNfaW50
MzIgZnJvbVRyYW5zLCBhZnNfaW50MzIgZnJvbURhdGUsDQorCSAgICAgICBzdHJ1Y3QgZGVzdFNl
cnZlciAqZGVzdGluYXRpb24sIGFmc19pbnQzMiBkZXN0VHJhbnMsDQorCSAgICAgICBzdHJ1Y3Qg
cmVzdG9yZUNvb2tpZSAqY29va2llLCBhZnNfaW50MzIgY29tcHJlc3MsIGFmc19pbnQzMiBsZXZl
bCkNCit7DQorICAgIGFmc19pbnQzMiBjb2RlOw0KKw0KKyAgICBjb2RlID0NCisJVm9sRm9yd2Fy
ZChhY2lkLCBmcm9tVHJhbnMsIGZyb21EYXRlLCBkZXN0aW5hdGlvbiwgZGVzdFRyYW5zLCBjb29r
aWUsDQorICAgICAgICAJKGludCljb21wcmVzcywgKGludClsZXZlbCk7DQogICAgIG9zaV9hdWRp
dFUoYWNpZCwgVlNfRm9yd2FyZEV2ZW50LCBjb2RlLCBBVURfTE9ORywgZnJvbVRyYW5zLCBBVURf
SE9TVCwNCiAJICAgICAgIGRlc3RpbmF0aW9uLT5kZXN0SG9zdCwgQVVEX0xPTkcsIGRlc3RUcmFu
cywgQVVEX0VORCk7DQogICAgIHJldHVybiBjb2RlOw0KQEAgLTEwNzMsNyArMTA5MCw4IEBADQog
YWZzX2ludDMyDQogVm9sRm9yd2FyZChzdHJ1Y3QgcnhfY2FsbCAqYWNpZCwgYWZzX2ludDMyIGZy
b21UcmFucywgYWZzX2ludDMyIGZyb21EYXRlLA0KIAkgICAgICAgc3RydWN0IGRlc3RTZXJ2ZXIg
KmRlc3RpbmF0aW9uLCBhZnNfaW50MzIgZGVzdFRyYW5zLCANCi0JICAgICAgIHN0cnVjdCByZXN0
b3JlQ29va2llICpjb29raWUpDQorCSAgICAgICBzdHJ1Y3QgcmVzdG9yZUNvb2tpZSAqY29va2ll
LA0KKyAgICAgICAgICAgICAgIGludCBjb21wcmVzcywgaW50IGxldmVsKQ0KIHsNCiAgICAgcmVn
aXN0ZXIgc3RydWN0IHZvbHNlcl90cmFucyAqdHQ7DQogICAgIHJlZ2lzdGVyIGFmc19pbnQzMiBj
b2RlOw0KQEAgLTExMjIsMTYgKzExNDAsMjMgQEANCiAgICAgdGNhbGwgPSByeF9OZXdDYWxsKHRj
b24pOw0KICAgICB0dC0+cnhDYWxsUHRyID0gdGNhbGw7DQogICAgIC8qIHN0YXJ0IHJlc3RvcmUg
Z29pbmcuICBmcm9tZGF0ZSA9PSAwIC0tPiBkb2luZyBhbiBpbmNyZW1lbnRhbCBkdW1wL3Jlc3Rv
cmUgKi8NCi0gICAgY29kZSA9IFN0YXJ0QUZTVm9sUmVzdG9yZSh0Y2FsbCwgZGVzdFRyYW5zLCAo
ZnJvbURhdGUgPyAxIDogMCksIGNvb2tpZSk7DQorICAgIGlmIChjb21wcmVzcykNCisJY29kZSA9
IFN0YXJ0QUZTVm9sUmVzdG9yZVoodGNhbGwsIGRlc3RUcmFucywgKGZyb21EYXRlPyAxIDogMCks
IGNvb2tpZSwgY29tcHJlc3MsIGxldmVsKTsNCisgICAgZWxzZQ0KKwljb2RlID0gU3RhcnRBRlNW
b2xSZXN0b3JlKHRjYWxsLCBkZXN0VHJhbnMsIChmcm9tRGF0ZT8gMSA6IDApLCBjb29raWUpOw0K
ICAgICBpZiAoY29kZSkgew0KIAlnb3RvIGZhaWw7DQogICAgIH0NCiANCiAgICAgLyogdGhlc2Ug
bmV4dCBjYWxscyBpbXBsaWN0bHkgY2FsbCByeF9Xcml0ZSB3aGVuIHdyaXRpbmcgb3V0IGRhdGEg
Ki8NCi0gICAgY29kZSA9IER1bXBWb2x1bWUodGNhbGwsIHZwLCBmcm9tRGF0ZSwgMCk7CS8qIGxh
c3QgZmllbGQgPSBkb24ndCBkdW1wIGFsbCBkaXJzICovDQorICAgIGNvZGUgPSBEdW1wVm9sdW1l
KHRjYWxsLCB2cCwgZnJvbURhdGUsIDAsIGNvbXByZXNzLCBsZXZlbCk7IC8qIDQuIGZpZWxkID0g
ZG9uJ3QgZHVtcCBhbGwgZGlycyAqLw0KICAgICBpZiAoY29kZSkNCiAJZ290byBmYWlsOw0KLSAg
ICBFbmRBRlNWb2xSZXN0b3JlKHRjYWxsKTsJLyogcHJvYmFibHkgZG9lc24ndCBkbyBtdWNoICov
DQorICAgIGlmIChjb21wcmVzcykNCisJRW5kQUZTVm9sUmVzdG9yZVoodGNhbGwpOw0KKyAgICBl
bHNlDQorCUVuZEFGU1ZvbFJlc3RvcmUodGNhbGwpOwkJICAgIC8qIHByb2JhYmx5IGRvZXNuJ3Qg
ZG8gbXVjaCAqLw0KKw0KICAgICB0dC0+cnhDYWxsUHRyID0gKHN0cnVjdCByeF9jYWxsICopMDsN
CiAgICAgY29kZSA9IHJ4X0VuZENhbGwodGNhbGwsIDApOw0KICAgICByeF9EZXN0cm95Q29ubmVj
dGlvbih0Y29uKTsJLyogZG9uZSB3aXRoIHRoZSBjb25uZWN0aW9uICovDQpAQCAtMTE1NSwyMCAr
MTE4MCwxMSBAQA0KICAgICByZXR1cm4gY29kZTsNCiB9DQogDQotLyogU3RhcnQgYSBkdW1wIGFu
ZCBzZW5kIGl0IHRvIG11bHRpcGxlIHBsYWNlcyBzaW11bHRhbmVvdXNseS4NCi0gKiBJZiB0aGlz
IHJldHVybnMgYW4gZXJyb3IgKGVnLCByZXR1cm4gRU5PRU5UKSwgaXQgbWVhbnMgdGhhdA0KLSAq
IG5vbmUgb2YgdGhlIHJlbGVhc2VzIHdvcmtlZC4gIElmIHRoaXMgcmV0dXJucyAwLCB0aGF0IG1l
YW5zIA0KLSAqIHRoYXQgb25lIG9yIG1vcmUgb2YgdGhlIHJlbGVhc2VzIHdvcmtlZCwgYW5kIHRo
ZSBjYWxsZXIgaGFzDQotICogdG8gZXhhbWluZSB0aGUgcmVzdWx0cyBhcnJheSB0byBzZWUgd2hp
Y2ggb25lKHMpLg0KLSAqIFRoaXMgd2lsbCBvbmx5IGRvIEVJVEhFUiBpbmNyZW1lbnRhbCBvciBm
dWxsLCBub3QgYm90aCwgc28gaXQncw0KLSAqIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0
byBiZSBzdXJlIHRoYXQgYWxsIHRoZSBkZXN0aW5hdGlvbnMNCi0gKiBuZWVkIGp1c3QgYW4gaW5j
cmVtZW50YWwgKGFuZCBmcm9tIHRoZSBzYW1lIHRpbWUpLCBpZiB0aGF0J3MgDQotICogd2hhdCB3
ZSdyZSBkb2luZy4gDQotICovDQogYWZzX2ludDMyDQotU0FGU1ZvbEZvcndhcmRNdWx0aXBsZShz
dHJ1Y3QgcnhfY2FsbCAqYWNpZCwgYWZzX2ludDMyIGZyb21UcmFucywgYWZzX2ludDMyIA0KK1Zv
bEZvcndhcmRNdWx0aXBsZUdlbmVyYWwoc3RydWN0IHJ4X2NhbGwgKmFjaWQsIGFmc19pbnQzMiBm
cm9tVHJhbnMsIGFmc19pbnQzMg0KIAkJICAgICAgIGZyb21EYXRlLCBtYW55RGVzdHMgKmRlc3Rp
bmF0aW9ucywgYWZzX2ludDMyIHNwYXJlLA0KLQkJICAgICAgIHN0cnVjdCByZXN0b3JlQ29va2ll
ICpjb29raWUsIG1hbnlSZXN1bHRzICpyZXN1bHRzKQ0KKwkJICAgICAgIHN0cnVjdCByZXN0b3Jl
Q29va2llICpjb29raWUsIG1hbnlSZXN1bHRzICpyZXN1bHRzLA0KKyAgICAgICAgICAgICAgICAg
ICAgICAgYWZzX2ludDMyIGNvbXByZXNzLCBhZnNfaW50MzIgbGV2ZWwpDQogew0KICAgICBhZnNf
aW50MzIgc2VjdXJpdHlJbmRleDsNCiAgICAgc3RydWN0IHJ4X3NlY3VyaXR5Q2xhc3MgKnNlY3Vy
aXR5T2JqZWN0Ow0KQEAgLTEyMjUsOSArMTI0MSwxMiBAQA0KIAkgICAgaWYgKCEodGNhbGxzW2ld
ID0gcnhfTmV3Q2FsbCh0Y29uc1tpXSkpKQ0KIAkJY29kZXNbaV0gPSBFTk9UQ09OTjsNCiAJICAg
IGVsc2Ugew0KLQkJY29kZXNbaV0gPQ0KLQkJICAgIFN0YXJ0QUZTVm9sUmVzdG9yZSh0Y2FsbHNb
aV0sIGRlc3QtPnRyYW5zLCBpc19pbmNyZW1lbnRhbCwNCi0JCQkJICAgICAgIGNvb2tpZSk7DQor
ICAgICAgICAgICAgICAgIGlmIChjb21wcmVzcykNCisgICAgICAgICAgICAgICAgICAgICAgICBj
b2Rlc1tpXSA9IFN0YXJ0QUZTVm9sUmVzdG9yZVoodGNhbGxzW2ldLCBkZXN0LT50cmFucywNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlz
X2luY3JlbWVudGFsLCBjb29raWUsIGNvbXByZXNzLCBsZXZlbCk7DQorICAgICAgICAgICAgICAg
IGVsc2UNCisgICAgICAgICAgICAgICAgICAgICAgICBjb2Rlc1tpXSA9IFN0YXJ0QUZTVm9sUmVz
dG9yZSh0Y2FsbHNbaV0sIGRlc3QtPnRyYW5zLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfaW5jcmVtZW50YWwsY29va2llKTsNCiAJ
CWlmIChjb2Rlc1tpXSkgew0KIAkJICAgICh2b2lkKXJ4X0VuZENhbGwodGNhbGxzW2ldLCAwKTsN
CiAJCSAgICB0Y2FsbHNbaV0gPSAwOw0KQEAgLTEyMzksNyArMTI1OCw3IEBADQogICAgIH0NCiAN
CiAgICAgLyogdGhlc2UgbmV4dCBjYWxscyBpbXBsaWN0bHkgY2FsbCByeF9Xcml0ZSB3aGVuIHdy
aXRpbmcgb3V0IGRhdGEgKi8NCi0gICAgY29kZSA9IER1bXBWb2xNdWx0aSh0Y2FsbHMsIGksIHZw
LCBmcm9tRGF0ZSwgMCwgY29kZXMpOw0KKyAgICBjb2RlID0gRHVtcFZvbE11bHRpKHRjYWxscywg
aSwgdnAsIGZyb21EYXRlLCAwLCBjb2RlcywgKGludCljb21wcmVzcywgKGludClsZXZlbCk7DQog
DQogDQogICBmYWlsOg0KQEAgLTEyNDcsNyArMTI2NiwxMCBAQA0KIAlzdHJ1Y3QgcmVwbGljYSAq
ZGVzdCA9ICYoZGVzdGluYXRpb25zLT5tYW55RGVzdHNfdmFsW2ldKTsNCiANCiAJaWYgKCFjb2Rl
ICYmIHRjYWxsc1tpXSAmJiAhY29kZXNbaV0pIHsNCi0JICAgIEVuZEFGU1ZvbFJlc3RvcmUodGNh
bGxzW2ldKTsNCisgICAgICAgICAgICAgICAgaWYgKGNvbXByZXNzKQ0KKwkgICAgICAgICAgICAg
ICAgRW5kQUZTVm9sUmVzdG9yZVoodGNhbGxzW2ldKTsNCisgICAgICAgICAgICAgICAgZWxzZQ0K
KwkJCUVuZEFGU1ZvbFJlc3RvcmUodGNhbGxzW2ldKTsNCiAJfQ0KIAlpZiAodGNhbGxzW2ldKSB7
DQogCSAgICBlYyA9IHJ4X0VuZENhbGwodGNhbGxzW2ldLCAwKTsNCkBAIC0xMjc0LDE4ICsxMjk2
LDYxIEBADQogICAgIHJldHVybiBjb2RlOw0KIH0NCiANCisvKiBTdGFydCBhIGR1bXAgYW5kIHNl
bmQgaXQgdG8gbXVsdGlwbGUgcGxhY2VzIHNpbXVsdGFuZW91c2x5Lg0KKyAqIElmIHRoaXMgcmV0
dXJucyBhbiBlcnJvciAoZWcsIHJldHVybiBFTk9FTlQpLCBpdCBtZWFucyB0aGF0DQorICogbm9u
ZSBvZiB0aGUgcmVsZWFzZXMgd29ya2VkLiAgSWYgdGhpcyByZXR1cm5zIDAsIHRoYXQgbWVhbnMN
CisgKiB0aGF0IG9uZSBvciBtb3JlIG9mIHRoZSByZWxlYXNlcyB3b3JrZWQsIGFuZCB0aGUgY2Fs
bGVyIGhhcw0KKyAqIHRvIGV4YW1pbmUgdGhlIHJlc3VsdHMgYXJyYXkgdG8gc2VlIHdoaWNoIG9u
ZShzKS4NCisgKiBUaGlzIHdpbGwgb25seSBkbyBFSVRIRVIgaW5jcmVtZW50YWwgb3IgZnVsbCwg
bm90IGJvdGgsIHNvIGl0J3MNCisgKiB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gYmUg
c3VyZSB0aGF0IGFsbCB0aGUgZGVzdGluYXRpb25zDQorICogbmVlZCBqdXN0IGFuIGluY3JlbWVu
dGFsIChhbmQgZnJvbSB0aGUgc2FtZSB0aW1lKSwgaWYgdGhhdCdzDQorICogd2hhdCB3ZSdyZSBk
b2luZy4NCisgKi8NCithZnNfaW50MzINCitTQUZTVm9sRm9yd2FyZE11bHRpcGxlKHN0cnVjdCBy
eF9jYWxsICphY2lkLCBhZnNfaW50MzIgZnJvbVRyYW5zLCBhZnNfaW50MzINCisJCSAgICAgICBm
cm9tRGF0ZSwgbWFueURlc3RzICpkZXN0aW5hdGlvbnMsIGFmc19pbnQzMiBzcGFyZSwNCisJCSAg
ICAgICBzdHJ1Y3QgcmVzdG9yZUNvb2tpZSAqY29va2llLCBtYW55UmVzdWx0cyAqcmVzdWx0cykN
Cit7DQorCXJldHVybiBWb2xGb3J3YXJkTXVsdGlwbGVHZW5lcmFsKGFjaWQsIGZyb21UcmFucywN
CisgICAgICAgIAlmcm9tRGF0ZSwgZGVzdGluYXRpb25zLCBzcGFyZSwNCisgICAgICAgICAgICAg
ICAgY29va2llLCByZXN1bHRzLA0KKyAgICAgICAgICAgICAgICAwLCAwKTsNCit9DQorDQorYWZz
X2ludDMyDQorU0FGU1ZvbEZvcndhcmRNdWx0aXBsZVooc3RydWN0IHJ4X2NhbGwgKmFjaWQsIGFm
c19pbnQzMiBmcm9tVHJhbnMsIGFmc19pbnQzMg0KKwkJICAgICAgIGZyb21EYXRlLCBtYW55RGVz
dHMgKmRlc3RpbmF0aW9ucywgYWZzX2ludDMyIHNwYXJlLA0KKwkJICAgICAgIHN0cnVjdCByZXN0
b3JlQ29va2llICpjb29raWUsIG1hbnlSZXN1bHRzICpyZXN1bHRzLA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgYWZzX2ludDMyIGNvbXByZXNzLCBhZnNfaW50MzIgbGV2ZWwpDQorew0KKwlyZXR1
cm4gVm9sRm9yd2FyZE11bHRpcGxlR2VuZXJhbChhY2lkLCBmcm9tVHJhbnMsDQorICAgICAgICAJ
ZnJvbURhdGUsIGRlc3RpbmF0aW9ucywgc3BhcmUsDQorICAgICAgICAgICAgICAgIGNvb2tpZSwg
cmVzdWx0cywNCisgICAgICAgICAgICAgICAgY29tcHJlc3MsIGxldmVsKTsNCit9DQorDQogYWZz
X2ludDMyDQogU0FGU1ZvbER1bXAoc3RydWN0IHJ4X2NhbGwgKmFjaWQsIGFmc19pbnQzMiBmcm9t
VHJhbnMsIGFmc19pbnQzMiBmcm9tRGF0ZSkNCiB7DQogICAgIGFmc19pbnQzMiBjb2RlOw0KIA0K
LSAgICBjb2RlID0gVm9sRHVtcChhY2lkLCBmcm9tVHJhbnMsIGZyb21EYXRlKTsNCisgICAgY29k
ZSA9IFZvbER1bXAoYWNpZCwgZnJvbVRyYW5zLCBmcm9tRGF0ZSwgMCwgMCk7DQogICAgIG9zaV9h
dWRpdFUoYWNpZCwgVlNfRHVtcEV2ZW50LCBjb2RlLCBBVURfTE9ORywgZnJvbVRyYW5zLCBBVURf
RU5EKTsNCiAgICAgcmV0dXJuIGNvZGU7DQogfQ0KIA0KIGFmc19pbnQzMg0KLVZvbER1bXAoc3Ry
dWN0IHJ4X2NhbGwgKmFjaWQsIGFmc19pbnQzMiBmcm9tVHJhbnMsIGFmc19pbnQzMiBmcm9tRGF0
ZSkNCitTQUZTVm9sRHVtcFooc3RydWN0IHJ4X2NhbGwgKmFjaWQsIGFmc19pbnQzMiBmcm9tVHJh
bnMsIGFmc19pbnQzMiBmcm9tRGF0ZSwgYWZzX2ludDMyIGNvbXByZXNzLCBhZnNfaW50MzIgbGV2
ZWwpDQorew0KKyAgICBhZnNfaW50MzIgY29kZTsNCisNCisgICAgY29kZSA9IFZvbER1bXAoYWNp
ZCwgZnJvbVRyYW5zLCBmcm9tRGF0ZSwgKGludCljb21wcmVzcywgKGludClsZXZlbCk7DQorICAg
IG9zaV9hdWRpdFUoYWNpZCwgVlNfRHVtcEV2ZW50LCBjb2RlLCBBVURfTE9ORywgZnJvbVRyYW5z
LCBBVURfRU5EKTsNCisgICAgcmV0dXJuIGNvZGU7DQorfQ0KKw0KK2Fmc19pbnQzMg0KK1ZvbER1
bXAoc3RydWN0IHJ4X2NhbGwgKmFjaWQsIGFmc19pbnQzMiBmcm9tVHJhbnMsIGFmc19pbnQzMiBm
cm9tRGF0ZSwgYWZzX2ludDMyIGNvbXByZXNzLCBhZnNfaW50MzIgbGV2ZWwpDQogew0KICAgICBp
bnQgY29kZSA9IDA7DQogICAgIHJlZ2lzdGVyIHN0cnVjdCB2b2xzZXJfdHJhbnMgKnR0Ow0KQEAg
LTEzMDMsNyArMTM2OCw4IEBADQogICAgIH0NCiAgICAgc3RyY3B5KHR0LT5sYXN0UHJvY05hbWUs
ICJEdW1wIik7DQogICAgIHR0LT5yeENhbGxQdHIgPSBhY2lkOw0KLSAgICBjb2RlID0gRHVtcFZv
bHVtZShhY2lkLCB0dC0+dm9sdW1lLCBmcm9tRGF0ZSwgMSk7CS8qIHNxdWlydCBvdXQgdGhlIHZv
bHVtZSdzIGRhdGEsIHRvbyAqLw0KKyAgICBjb2RlID0gRHVtcFZvbHVtZShhY2lkLCB0dC0+dm9s
dW1lLCBmcm9tRGF0ZSwgMSwNCisgICAgCWNvbXByZXNzLCBsZXZlbCk7IC8vc3F1aXJ0IG91dCB0
aGUgdm9sdW1lJ3MgZGF0YSwgdG9vDQogICAgIGlmIChjb2RlKSB7DQogCXR0LT5yeENhbGxQdHIg
PSAoc3RydWN0IHJ4X2NhbGwgKikwOw0KIAlUUkVMRSh0dCk7DQpAQCAtMTMxNywyMyArMTM4Mywz
NCBAQA0KICAgICByZXR1cm4gMDsNCiB9DQogDQotLyogDQorLyoNCiAgKiBIYSEgIE5vIG1vcmUg
aGVscGVyIHByb2Nlc3MhDQogICovDQogYWZzX2ludDMyDQotU0FGU1ZvbFJlc3RvcmUoc3RydWN0
IHJ4X2NhbGwgKmFjaWQsIGFmc19pbnQzMiBhdHJhbnMsIGFmc19pbnQzMiBhZmxhZ3MsIA0KK1NB
RlNWb2xSZXN0b3JlKHN0cnVjdCByeF9jYWxsICphY2lkLCBhZnNfaW50MzIgYXRyYW5zLCBhZnNf
aW50MzIgYWZsYWdzLA0KIAkgICAgICAgc3RydWN0IHJlc3RvcmVDb29raWUgKmNvb2tpZSkNCiB7
DQogICAgIGFmc19pbnQzMiBjb2RlOw0KIA0KLSAgICBjb2RlID0gVm9sUmVzdG9yZShhY2lkLCBh
dHJhbnMsIGFmbGFncywgY29va2llKTsNCisgICAgY29kZSA9IFZvbFJlc3RvcmUoYWNpZCwgYXRy
YW5zLCBhZmxhZ3MsIGNvb2tpZSwgMCwgMCk7DQogICAgIG9zaV9hdWRpdFUoYWNpZCwgVlNfUmVz
dG9yZUV2ZW50LCBjb2RlLCBBVURfTE9ORywgYXRyYW5zLCBBVURfRU5EKTsNCiAgICAgcmV0dXJu
IGNvZGU7DQogfQ0KIA0KIGFmc19pbnQzMg0KLVZvbFJlc3RvcmUoc3RydWN0IHJ4X2NhbGwgKmFj
aWQsIGFmc19pbnQzMiBhdHJhbnMsIGFmc19pbnQzMiBhZmxhZ3MsIA0KLQkgICAgICAgc3RydWN0
IHJlc3RvcmVDb29raWUgKmNvb2tpZSkNCitTQUZTVm9sUmVzdG9yZVooc3RydWN0IHJ4X2NhbGwg
KmFjaWQsIGFmc19pbnQzMiBhdHJhbnMsIGFmc19pbnQzMiBhZmxhZ3MsDQorCSAgICAgICBzdHJ1
Y3QgcmVzdG9yZUNvb2tpZSAqY29va2llLCBhZnNfaW50MzIgY29tcHJlc3MsIGFmc19pbnQzMiBs
ZXZlbCkNCit7DQorICAgIGFmc19pbnQzMiBjb2RlOw0KKw0KKyAgICBjb2RlID0gVm9sUmVzdG9y
ZShhY2lkLCBhdHJhbnMsIGFmbGFncywgY29va2llLCAoaW50KWNvbXByZXNzLCAoaW50KWxldmVs
KTsNCisgICAgb3NpX2F1ZGl0VShhY2lkLCBWU19SZXN0b3JlRXZlbnQsIGNvZGUsIEFVRF9MT05H
LCBhdHJhbnMsIEFVRF9FTkQpOw0KKyAgICByZXR1cm4gY29kZTsNCit9DQorDQorYWZzX2ludDMy
DQorVm9sUmVzdG9yZShzdHJ1Y3QgcnhfY2FsbCAqYWNpZCwgYWZzX2ludDMyIGF0cmFucywgYWZz
X2ludDMyIGFmbGFncywNCisJICAgICAgIHN0cnVjdCByZXN0b3JlQ29va2llICpjb29raWUsIGlu
dCBjb21wcmVzcywgaW50IGxldmVsKQ0KIHsNCiAgICAgcmVnaXN0ZXIgc3RydWN0IHZvbHNlcl90
cmFucyAqdHQ7DQogICAgIHJlZ2lzdGVyIGFmc19pbnQzMiBjb2RlLCB0Y29kZTsNCkBAIC0xMzU0
LDcgKzE0MzEsNyBAQA0KIA0KICAgICBERmx1c2hWb2x1bWUoVl9wYXJlbnRJZCh0dC0+dm9sdW1l
KSk7IC8qIEVuc3VyZSBkaXIgYnVmZmVycyBnZXQgZHJvcHBlZCAqLw0KIA0KLSAgICBjb2RlID0g
UmVzdG9yZVZvbHVtZShhY2lkLCB0dC0+dm9sdW1lLCAoYWZsYWdzICYgMSksIGNvb2tpZSk7CS8q
IGxhc3QgaXMgaW5jcmVtZW50YWxwICovDQorICAgIGNvZGUgPSBSZXN0b3JlVm9sdW1lKGFjaWQs
IHR0LT52b2x1bWUsIChhZmxhZ3MgJiAxKSwgY29va2llLCBjb21wcmVzcywgbGV2ZWwpOyAvKiAz
LiBpcyBpbmNyZW1lbnRhbHAgKi8NCiAgICAgRlNZTkNfYXNrZnModHQtPnZvbGlkLCBOVUxMLCBG
U1lOQ19SRVNUT1JFVk9MVU1FLCAwbCk7CS8qYnJlYWsgY2FsbCBiYWNrcyBvbiB0aGUNCiAJCQkJ
CQkJCSAqIHJlc3RvcmVkIHZvbHVtZSAqLw0KICAgICB0dC0+cnhDYWxsUHRyID0gKHN0cnVjdCBy
eF9jYWxsICopMDsNCmRpZmYgLU5hdXIgb3BlbmFmcy0xLjMuNzcvc3JjL3ZvbHNlci92b2xzZXJf
cHJvdG90eXBlcy5oIG9wZW5hZnMtMS4zLjc3ei9zcmMvdm9sc2VyL3ZvbHNlcl9wcm90b3R5cGVz
LmgNCi0tLSBvcGVuYWZzLTEuMy43Ny9zcmMvdm9sc2VyL3ZvbHNlcl9wcm90b3R5cGVzLmgJMjAw
NC0xMS0wOSAxODoxMzo0NS4wMDAwMDAwMDAgKzAxMDANCisrKyBvcGVuYWZzLTEuMy43N3ovc3Jj
L3ZvbHNlci92b2xzZXJfcHJvdG90eXBlcy5oCTIwMDQtMTItMjEgMTc6NTc6NDYuMDAwMDAwMDAw
ICswMTAwDQpAQCAtMzksMTggKzM5LDE4IEBADQogZXh0ZXJuIHZvaWQgc2lnaW50X2hhbmRsZXIo
aW50IHgpOw0KIGV4dGVybiBpbnQgVVZfTW92ZVZvbHVtZShhZnNfaW50MzIgYWZyb212b2wsIGFm
c19pbnQzMiBhZnJvbXNlcnZlciwNCiAJCQkgYWZzX2ludDMyIGFmcm9tcGFydCwgYWZzX2ludDMy
IGF0b3NlcnZlciwNCi0JCQkgYWZzX2ludDMyIGF0b3BhcnQpOw0KKwkJCSBhZnNfaW50MzIgYXRv
cGFydCwgaW50IGNvbXByZXNzLCBpbnQgbGV2ZWwpOw0KIGV4dGVybiBpbnQgVVZfQmFja3VwVm9s
dW1lKGFmc19pbnQzMiBhc2VydmVyLCBhZnNfaW50MzIgYXBhcnQsDQogCQkJICAgYWZzX2ludDMy
IGF2b2xpZCk7DQogZXh0ZXJuIGludCBVVl9SZWxlYXNlVm9sdW1lKGFmc19pbnQzMiBhZnJvbXZv
bCwgYWZzX2ludDMyIGFmcm9tc2VydmVyLA0KLQkJCSAgICBhZnNfaW50MzIgYWZyb21wYXJ0LCBp
bnQgZm9yY2VmbGFnKTsNCisJCQkgICAgYWZzX2ludDMyIGFmcm9tcGFydCwgaW50IGZvcmNlZmxh
ZywgaW50IGNvbXByZXNzLCBpbnQgbGV2ZWwpOw0KIGV4dGVybiB2b2lkIGR1bXBfc2lnX2hhbmRs
ZXIoaW50IHgpOw0KIGV4dGVybiBpbnQgVVZfRHVtcFZvbHVtZShhZnNfaW50MzIgYWZyb212b2ws
IGFmc19pbnQzMiBhZnJvbXNlcnZlciwNCiAJCQkgYWZzX2ludDMyIGFmcm9tcGFydCwgYWZzX2lu
dDMyIGZyb21kYXRlLA0KLQkJCSBhZnNfaW50MzIoKkR1bXBGdW5jdGlvbikgKCksIGNoYXIgKnJv
Y2spOw0KKwkJCSBhZnNfaW50MzIoKkR1bXBGdW5jdGlvbikgKCksIGNoYXIgKnJvY2ssIGludCBj
b21wcmVzcywgaW50IGxldmVsKTsNCiBleHRlcm4gaW50IFVWX1Jlc3RvcmVWb2x1bWUoYWZzX2lu
dDMyIHRvc2VydmVyLCBhZnNfaW50MzIgdG9wYXJ0LA0KIAkJCSAgICBhZnNfaW50MzIgdG92b2xp
ZCwgY2hhciB0b3ZvbG5hbWVbXSwgaW50IGZsYWdzLA0KLQkJCSAgICBhZnNfaW50MzIoKldyaXRl
RGF0YSkgKCksIGNoYXIgKnJvY2spOw0KKwkJCSAgICBhZnNfaW50MzIoKldyaXRlRGF0YSkgKCks
IGNoYXIgKnJvY2ssIGludCBjb21wcmVzcywgaW50IGxldmVsKTsNCiBleHRlcm4gaW50IFVWX0xv
Y2tSZWxlYXNlKGFmc19pbnQzMiB2b2xpZCk7DQogZXh0ZXJuIGludCBVVl9BZGRTaXRlKGFmc19p
bnQzMiBzZXJ2ZXIsIGFmc19pbnQzMiBwYXJ0LCBhZnNfaW50MzIgdm9saWQpOw0KIGV4dGVybiBp
bnQgVVZfUmVtb3ZlU2l0ZShhZnNfaW50MzIgc2VydmVyLCBhZnNfaW50MzIgcGFydCwgYWZzX2lu
dDMyIHZvbGlkKTsNCmRpZmYgLU5hdXIgb3BlbmFmcy0xLjMuNzcvc3JjL3ZvbHNlci92b3MuYyBv
cGVuYWZzLTEuMy43N3ovc3JjL3ZvbHNlci92b3MuYw0KLS0tIG9wZW5hZnMtMS4zLjc3L3NyYy92
b2xzZXIvdm9zLmMJMjAwNC0xMS0wOSAxODoxMzo0NS4wMDAwMDAwMDAgKzAxMDANCisrKyBvcGVu
YWZzLTEuMy43N3ovc3JjL3ZvbHNlci92b3MuYwkyMDA0LTEyLTI4IDE2OjM2OjUxLjAwMDAwMDAw
MCArMDEwMA0KQEAgLTYyLDYgKzYyLDcgQEANCiAjaW5jbHVkZSA8c2lnbmFsLmg+DQogI2VuZGlm
DQogI2luY2x1ZGUgInZvbHNlcl9wcm90b3R5cGVzLmgiDQorI2luY2x1ZGUgInppb3J4LmgiDQog
DQogI2lmZGVmIEhBVkVfUE9TSVhfUkVHRVgNCiAjaW5jbHVkZSA8cmVnZXguaD4NCkBAIC0yNjUs
OCArMjY2LDkgQEANCiAgLypzZW5kcyB0aGUgY29udGVudHMgb2YgZmlsZSBhc3NvY2lhdGVkIHdp
dGggPGZkPiBhbmQgPGJsa3NpemU+ICB0byBSeCBTdHJlYW0gDQogICAqIGFzc29jaWF0ZWQgIHdp
dGggPGNhbGw+ICovDQogaW50IA0KLVNlbmRGaWxlKHVzZF9oYW5kbGVfdCB1ZmQsIHJlZ2lzdGVy
IHN0cnVjdCByeF9jYWxsICpjYWxsLCBsb25nIGJsa3NpemUpDQorU2VuZEZpbGUodXNkX2hhbmRs
ZV90IHVmZCwgcmVnaXN0ZXIgc3RydWN0IHJ4X2NhbGwgKmNhbGwsIGxvbmcgYmxrc2l6ZSwgaW50
IGNvbXByZXNzLCBpbnQgbGV2ZWwpDQogew0KKyAgICBzdHJ1Y3QgemlvcnhfY2FsbCB6Y2FsbDsN
CiAgICAgY2hhciAqYnVmZmVyID0gKGNoYXIgKikwOw0KICAgICBhZnNfaW50MzIgZXJyb3IgPSAw
Ow0KICAgICBpbnQgZG9uZSA9IDA7DQpAQCAtMjc4LDYgKzI4MCwxMiBAQA0KIAlyZXR1cm4gLTE7
DQogICAgIH0NCiANCisgICAgaWYgKHppb3J4QmVnaW5Xcml0ZShjYWxsLCBjb21wcmVzcywgbGV2
ZWwsICZ6Y2FsbCkhPVpJT1JYX09LKQ0KKyAgICB7DQorICAgICAgICBmcHJpbnRmKFNUREVSUiwg
IlNlbmRGaWxlOiB6aW9yeEJlZ2luUmVhZCBmYWlsZWRcbiIpOw0KKyAgICAgICAgcmV0dXJuIC0x
Ow0KKyAgICB9DQorDQogICAgIHdoaWxlICghZXJyb3IgJiYgIWRvbmUpIHsNCiAjaWZuZGVmIEFG
U19OVDQwX0VOVgkJLyogTlQgY3NuJ3Qgc2VsZWN0IG9uIG5vbi1zb2NrZXQgZmQncyAqLw0KIAlm
ZF9zZXQgaW47DQpAQCAtMjk1LDExICszMDMsMTggQEANCiAJICAgIGRvbmUgPSAxOw0KIAkgICAg
YnJlYWs7DQogCX0NCi0JaWYgKHJ4X1dyaXRlKGNhbGwsIGJ1ZmZlciwgbmJ5dGVzKSAhPSBuYnl0
ZXMpIHsNCisJaWYgKHppb3J4V3JpdGUoJnpjYWxsLCBidWZmZXIsIG5ieXRlcykgIT0gbmJ5dGVz
KXsNCiAJICAgIGVycm9yID0gLTE7DQogCSAgICBicmVhazsNCiAJfQ0KICAgICB9DQorDQorICAg
IGlmICh6aW9yeEVuZFdyaXRlKCZ6Y2FsbCkhPVpJT1JYX09LKQ0KKyAgICB7DQorICAgICAgICBm
cHJpbnRmKFNUREVSUiwgIlNlbmRGaWxlOiB6aW9yeEVuZFdyaXRlIGZhaWxlZFxuIik7DQorICAg
ICAgICBlcnJvciA9IC0xOw0KKyAgICB9DQorDQogICAgIGlmIChidWZmZXIpDQogCWZyZWUoYnVm
ZmVyKTsNCiAgICAgcmV0dXJuIGVycm9yOw0KQEAgLTMwOCw3ICszMjMsNyBAQA0KIC8qIGZ1bmN0
aW9uIGludm9rZWQgYnkgVVZfUmVzdG9yZVZvbHVtZSwgcmVhZHMgdGhlIGRhdGEgZnJvbSByeF90
cnhfc3RyZWFtIGFuZA0KICAqIHdyaXRlcyBpdCBvdXQgdG8gdGhlIHZvbHVtZS4gKi8NCiBhZnNf
aW50MzINCi1Xcml0ZURhdGEoc3RydWN0IHJ4X2NhbGwgKmNhbGwsIGNoYXIgKnJvY2spDQorV3Jp
dGVEYXRhKHN0cnVjdCByeF9jYWxsICpjYWxsLCBjaGFyICpyb2NrLCBpbnQgY29tcHJlc3MsIGlu
dCBsZXZlbCkNCiB7DQogICAgIGNoYXIgKmZpbGVuYW1lOw0KICAgICB1c2RfaGFuZGxlX3QgdWZk
Ow0KQEAgLTMzNSw3ICszNTAsNyBAQA0KIAkgICAgZ290byB3ZmFpbDsNCiAJfQ0KICAgICB9DQot
ICAgIGNvZGUgPSBTZW5kRmlsZSh1ZmQsIGNhbGwsIGJsa3NpemUpOw0KKyAgICBjb2RlID0gU2Vu
ZEZpbGUodWZkLCBjYWxsLCBibGtzaXplLCBjb21wcmVzcywgbGV2ZWwpOw0KICAgICBpZiAoY29k
ZSkgew0KIAllcnJvciA9IGNvZGU7DQogCWdvdG8gd2ZhaWw7DQpAQCAtMzU3LDEyICszNzIsMTMg
QEANCiAgKiB3aXRoIDxmZD4gPGJsa3NpemU+DQogICovDQogaW50DQotUmVjZWl2ZUZpbGUodXNk
X2hhbmRsZV90IHVmZCwgc3RydWN0IHJ4X2NhbGwgKmNhbGwsIGxvbmcgYmxrc2l6ZSkNCitSZWNl
aXZlRmlsZSh1c2RfaGFuZGxlX3QgdWZkLCBzdHJ1Y3QgcnhfY2FsbCAqY2FsbCwgbG9uZyBibGtz
aXplLCBpbnQgY29tcHJlc3MsIGludCBsZXZlbCkNCiB7DQogICAgIGNoYXIgKmJ1ZmZlciA9IE5V
TEw7DQogICAgIGFmc19pbnQzMiBieXRlc3JlYWQ7DQogICAgIGFmc191aW50MzIgYnl0ZXNsZWZ0
LCB3Ow0KICAgICBhZnNfaW50MzIgZXJyb3IgPSAwOw0KKyAgICBzdHJ1Y3QgemlvcnhfY2FsbCB6
Y2FsbDsNCiANCiAgICAgYnVmZmVyID0gKGNoYXIgKiltYWxsb2MoYmxrc2l6ZSk7DQogICAgIGlm
ICghYnVmZmVyKSB7DQpAQCAtMzcwLDcgKzM4NiwxNCBAQA0KIAlFUlJPUl9FWElUKC0xKTsNCiAg
ICAgfQ0KIA0KLSAgICB3aGlsZSAoKGJ5dGVzcmVhZCA9IHJ4X1JlYWQoY2FsbCwgYnVmZmVyLCBi
bGtzaXplKSkgPiAwKSB7DQorICAgIGlmICh6aW9yeEJlZ2luUmVhZChjYWxsLCBjb21wcmVzcywg
bGV2ZWwsICZ6Y2FsbCkhPVpJT1JYX09LKQ0KKyAgICB7DQorCWZwcmludGYoU1RERVJSLCAiUmVj
ZWl2ZUZpbGU6IHppb3J4QmVnaW5SZWFkIGZhaWxlZFxuIik7DQorCWZyZWUoYnVmZmVyKTsNCisJ
cmV0dXJuICgtMSk7DQorICAgIH0NCisNCisgICAgd2hpbGUgKChieXRlc3JlYWQ9emlvcnhSZWFk
KCZ6Y2FsbCwgYnVmZmVyLCBibGtzaXplKSkgPiAwKSB7DQogCWZvciAoYnl0ZXNsZWZ0ID0gYnl0
ZXNyZWFkOyBieXRlc2xlZnQ7IGJ5dGVzbGVmdCAtPSB3KSB7DQogI2lmbmRlZiBBRlNfTlQ0MF9F
TlYJCS8qIE5UIGNzbid0IHNlbGVjdCBvbiBub24tc29ja2V0IGZkJ3MgKi8NCiAJICAgIGZkX3Nl
dCBvdXQ7DQpAQCAtMzg4LDE0ICs0MTEsMjUgQEANCiAJfQ0KICAgICB9DQogDQorICAgIGlmIChi
eXRlc3JlYWQ8MCkNCisgICAgew0KKwlmcHJpbnRmKHN0ZGVyciwgIlJlYWQgZXJyb3IgKCVkKVxu
IiwgYnl0ZXNyZWFkKTsNCisJRVJST1JfRVhJVCgtMSk7DQorICAgIH0NCisNCiAgIGVycm9yX2V4
aXQ6DQorICAgIGlmICh6aW9yeEVuZFJlYWQoJnpjYWxsKSE9WklPUlhfT0spDQorICAgIHsNCisg
ICAgICAgIGZwcmludGYoU1RERVJSLCAiUmVjZWl2ZUZpbGU6IHppb3J4RW5kUmVhZCBmYWlsZWRc
biIpOw0KKyAgICAgICAgZXJyb3IgPSAtMTsNCisgICAgfQ0KICAgICBpZiAoYnVmZmVyKQ0KIAlm
cmVlKGJ1ZmZlcik7DQogICAgIHJldHVybiAoZXJyb3IpOw0KIH0NCiANCiBhZnNfaW50MzINCi1E
dW1wRnVuY3Rpb24oc3RydWN0IHJ4X2NhbGwgKmNhbGwsIGNoYXIgKmZpbGVuYW1lKQ0KK0R1bXBG
dW5jdGlvbihzdHJ1Y3QgcnhfY2FsbCAqY2FsbCwgY2hhciAqZmlsZW5hbWUsIGludCBjb21wcmVz
cywgaW50IGxldmVsKQ0KIHsNCiAgICAgdXNkX2hhbmRsZV90IHVmZDsJCS8qIGRlZmF1bHQgaXMg
dG8gc3Rkb3V0ICovDQogICAgIGFmc19pbnQzMiBlcnJvciA9IDAsIGNvZGU7DQpAQCAtNDI1LDcg
KzQ1OSw3IEBADQogCX0NCiAgICAgfQ0KIA0KLSAgICBjb2RlID0gUmVjZWl2ZUZpbGUodWZkLCBj
YWxsLCBibGtzaXplKTsNCisgICAgY29kZSA9IFJlY2VpdmVGaWxlKHVmZCwgY2FsbCwgYmxrc2l6
ZSwgY29tcHJlc3MsIGxldmVsKTsNCiAgICAgaWYgKGNvZGUpDQogCUVSUk9SX0VYSVQoY29kZSk7
DQogDQpAQCAtMTc3OCw2ICsxODEyLDM3IEBADQogICAgIHJldHVybiAwOw0KIH0NCiANCitzdGF0
aWMgdm9pZCBQYXJzZVBhcmFtWihwZFosIHBkQloyLCBjb21wcmVzcywgbGV2ZWwpDQorCQlzdHJ1
Y3QgY21kX3Bhcm1kZXNjICpwZFo7DQorCQlzdHJ1Y3QgY21kX3Bhcm1kZXNjICpwZEJaMjsNCisJ
CWludCAqY29tcHJlc3M7DQorCQlpbnQgKmxldmVsOw0KK3sNCisJaWYgKHBkWi0+aXRlbXMhPU5V
TEwgJiYgcGRCWjItPml0ZW1zPT1OVUxMKQ0KKwl7DQorCQkqY29tcHJlc3MgPSBaSU9SWF9DT01Q
UkVTU19aOw0KKwkJKmxldmVsID0gcGRaLT5pdGVtcy0+ZGF0YVswXSAtICcwJzsNCisJCWlmICgq
bGV2ZWw8MCB8fCAqbGV2ZWw+OSkNCisJCQkqbGV2ZWwgPSAwOw0KKwl9IGVsc2UNCisJaWYgKHBk
QloyLT5pdGVtcyE9TlVMTCkNCisJew0KKwkJKmNvbXByZXNzID0gWklPUlhfQ09NUFJFU1NfQlo7
DQorCQkqbGV2ZWwgPSBwZEJaMi0+aXRlbXMtPmRhdGFbMF0gLSAnMCc7DQorCQlpZiAoKmxldmVs
PDEgfHwgKmxldmVsPjkpDQorCQkJKmxldmVsID0gMTsNCisJfSBlbHNlIHsNCisJCSpjb21wcmVz
cyA9IDA7DQorCQkqbGV2ZWwgPSAwOw0KKwl9DQorDQorCWlmICgqY29tcHJlc3MhPVpJT1JYX0NP
TVBSRVNTX05PTkUpDQorCXsNCisJCWZwcmludGYoU1RET1VULCAiVXNpbmcgY29tcHJlc3Npb246
ICVzLCBsZXZlbDogJWRcbiIsDQorCQkJKmNvbXByZXNzPT1aSU9SWF9DT01QUkVTU19aID8gInoi
IDogImJ6MiIsICpsZXZlbCk7DQorCX0NCit9DQorDQogI2RlZmluZSBURVNUTQkwCQkvKiBzZXQg
Zm9yIG1vdmUgc3BhY2UgdGVzdHMsIGNsZWFyIGZvciBwcm9kdWN0aW9uICovDQogc3RhdGljDQog
TW92ZVZvbHVtZShhcykNCkBAIC0xNzg3LDYgKzE4NTIsNyBAQA0KICAgICBhZnNfaW50MzIgdm9s
aWQsIGZyb21zZXJ2ZXIsIHRvc2VydmVyLCBmcm9tcGFydCwgdG9wYXJ0Ow0KICAgICBhZnNfaW50
MzIgZmxhZ3MsIGNvZGUsIGVycjsNCiAgICAgY2hhciBmcm9tUGFydE5hbWVbMTBdLCB0b1BhcnRO
YW1lWzEwXTsNCisgICAgaW50IGNvbXByZXNzLCBsZXZlbDsNCiANCiAgICAgc3RydWN0IGRpc2tQ
YXJ0aXRpb24gcGFydGl0aW9uOwkvKiBmb3Igc3BhY2UgY2hlY2sgKi8NCiAgICAgdm9saW50SW5m
byAqcDsNCkBAIC0xODQ2LDYgKzE5MTIsOCBAQA0KICAgICBmbGFncyA9IDA7DQogICAgIGlmIChh
cy0+cGFybXNbNV0uaXRlbXMpIGZsYWdzIHw9IFJWX05PQ0xPTkU7DQogDQorICAgIFBhcnNlUGFy
YW1aKCYoYXMtPnBhcm1zWzZdKSwgJihhcy0+cGFybXNbN10pLCAmY29tcHJlc3MsICZsZXZlbCk7
DQorDQogICAgIC8qDQogICAgICAqIGNoZWNrIHNvdXJjZSBwYXJ0aXRpb24gZm9yIHNwYWNlIHRv
IGNsb25lIHZvbHVtZQ0KICAgICAgKi8NCkBAIC0xODk0LDcgKzE5NjIsNyBAQA0KICAgICAvKiBz
dWNjZXNzZnVsIG1vdmUgc3RpbGwgbm90IGd1YXJhbnRlZWQgYnV0IHNob290IGZvciBpdCAqLw0K
IA0KICAgICBjb2RlID0NCi0JVVZfTW92ZVZvbHVtZTIodm9saWQsIGZyb21zZXJ2ZXIsIGZyb21w
YXJ0LCB0b3NlcnZlciwgdG9wYXJ0LCBmbGFncyk7DQorCVVWX01vdmVWb2x1bWUyKHZvbGlkLCBm
cm9tc2VydmVyLCBmcm9tcGFydCwgdG9zZXJ2ZXIsIHRvcGFydCwgZmxhZ3MsIGNvbXByZXNzLCBs
ZXZlbCk7DQogICAgIGlmIChjb2RlKSB7DQogCVByaW50RGlhZ25vc3RpY3MoIm1vdmUiLCBjb2Rl
KTsNCiAJcmV0dXJuIGNvZGU7DQpAQCAtMTkxNyw2ICsxOTg1LDcgQEANCiAgICAgc3RydWN0IG52
bGRiZW50cnkgZW50cnk7DQogICAgIHN0cnVjdCBkaXNrUGFydGl0aW9uIHBhcnRpdGlvbjsJLyog
Zm9yIHNwYWNlIGNoZWNrICovDQogICAgIHZvbGludEluZm8gKnA7DQorICAgIGludCBjb21wcmVz
cywgbGV2ZWw7DQogDQogICAgIHZvbGlkID0gdnN1X0dldFZvbHVtZUlEKGFzLT5wYXJtc1swXS5p
dGVtcy0+ZGF0YSwgY3N0cnVjdCwgJmVycik7DQogICAgIGlmICh2b2xpZCA9PSAwKSB7DQpAQCAt
MjAwMyw2ICsyMDcyLDggQEANCiAgICAgaWYgKGFzLT5wYXJtc1s3XS5pdGVtcykgZmxhZ3MgfD0g
UlZfUkRPTkxZOw0KICAgICBpZiAoYXMtPnBhcm1zWzhdLml0ZW1zKSBmbGFncyB8PSBSVl9OT0NM
T05FOw0KIA0KKyAgICBQYXJzZVBhcmFtWigmKGFzLT5wYXJtc1s5XSksICYoYXMtPnBhcm1zWzEw
XSksICZjb21wcmVzcywgJmxldmVsKTsNCisNCiAgICAgTWFwUGFydElkSW50b05hbWUodG9wYXJ0
LCB0b1BhcnROYW1lKTsNCiAgICAgTWFwUGFydElkSW50b05hbWUoZnJvbXBhcnQsIGZyb21QYXJ0
TmFtZSk7DQogDQpAQCAtMjA0MSw3ICsyMTEyLDcgQEANCiANCiAgICAgY29kZSA9DQogCVVWX0Nv
cHlWb2x1bWUyKHZvbGlkLCBmcm9tc2VydmVyLCBmcm9tcGFydCwgdG92b2x1bWUsIHRvc2VydmVy
LA0KLQkJICAgICAgIHRvcGFydCwgMCwgZmxhZ3MpOw0KKwkJICAgICAgIHRvcGFydCwgMCwgZmxh
Z3MsIGNvbXByZXNzLCBsZXZlbCk7DQogICAgIGlmIChjb2RlKSB7DQogCVByaW50RGlhZ25vc3Rp
Y3MoImNvcHkiLCBjb2RlKTsNCiAJcmV0dXJuIGNvZGU7DQpAQCAtMjA2Niw2ICsyMTM3LDcgQEAN
CiAgICAgc3RydWN0IG52bGRiZW50cnkgZW50cnk7DQogICAgIHN0cnVjdCBkaXNrUGFydGl0aW9u
IHBhcnRpdGlvbjsJLyogZm9yIHNwYWNlIGNoZWNrICovDQogICAgIHZvbGludEluZm8gKnAsICpx
Ow0KKyAgICBpbnQgY29tcHJlc3MsIGxldmVsOw0KIA0KICAgICBwID0gKHZvbGludEluZm8gKikg
MDsNCiAgICAgcSA9ICh2b2xpbnRJbmZvICopIDA7DQpAQCAtMjE5MCw2ICsyMjYyLDggQEANCiAg
ICAgaWYgKGFzLT5wYXJtc1s5XS5pdGVtcykgZmxhZ3MgfD0gUlZfTk9DTE9ORTsNCiAgICAgaWYg
KGFzLT5wYXJtc1sxMF0uaXRlbXMpIGZsYWdzIHw9IFJWX0NQSU5DUjsNCiANCisgICAgUGFyc2VQ
YXJhbVooJihhcy0+cGFybXNbMTFdKSwgJihhcy0+cGFybXNbMTJdKSwgJmNvbXByZXNzLCAmbGV2
ZWwpOw0KKw0KICAgICBNYXBQYXJ0SWRJbnRvTmFtZSh0b3BhcnQsIHRvUGFydE5hbWUpOw0KICAg
ICBNYXBQYXJ0SWRJbnRvTmFtZShmcm9tcGFydCwgZnJvbVBhcnROYW1lKTsNCiANCkBAIC0yMjM4
LDcgKzIzMTIsNyBAQA0KIA0KICAgICBjb2RlID0NCiAJVVZfQ29weVZvbHVtZTIodm9saWQsIGZy
b21zZXJ2ZXIsIGZyb21wYXJ0LCB0b3ZvbHVtZSwgdG9zZXJ2ZXIsDQotCQkgICAgICAgdG9wYXJ0
LCB0b3ZvbGlkLCBmbGFncyk7DQorCQkgICAgICAgdG9wYXJ0LCB0b3ZvbGlkLCBmbGFncywgY29t
cHJlc3MsIGxldmVsKTsNCiAgICAgaWYgKGNvZGUpIHsNCiAJUHJpbnREaWFnbm9zdGljcygic2hh
ZG93IiwgY29kZSk7DQogCXJldHVybiBjb2RlOw0KQEAgLTI0MzgsNiArMjUxMiw3IEBADQogICAg
IHN0cnVjdCBudmxkYmVudHJ5IGVudHJ5Ow0KICAgICBhZnNfaW50MzIgYXZvbGlkLCBhc2VydmVy
LCBhcGFydCwgdnR5cGUsIGNvZGUsIGVycjsNCiAgICAgaW50IGZvcmNlID0gMDsNCisgICAgaW50
IGNvbXByZXNzLCBsZXZlbDsNCiANCiAgICAgaWYgKGFzLT5wYXJtc1sxXS5pdGVtcykNCiAJZm9y
Y2UgPSAxOw0KQEAgLTI0NjYsNyArMjU0MSw5IEBADQogCXJldHVybiBFMkJJRzsNCiAgICAgfQ0K
IA0KLSAgICBjb2RlID0gVVZfUmVsZWFzZVZvbHVtZShhdm9saWQsIGFzZXJ2ZXIsIGFwYXJ0LCBm
b3JjZSk7DQorICAgIFBhcnNlUGFyYW1aKCYoYXMtPnBhcm1zWzJdKSwgJihhcy0+cGFybXNbM10p
LCAmY29tcHJlc3MsICZsZXZlbCk7DQorDQorICAgIGNvZGUgPSBVVl9SZWxlYXNlVm9sdW1lKGF2
b2xpZCwgYXNlcnZlciwgYXBhcnQsIGZvcmNlLCBjb21wcmVzcywgbGV2ZWwpOw0KICAgICBpZiAo
Y29kZSkgew0KIAlQcmludERpYWdub3N0aWNzKCJyZWxlYXNlIiwgY29kZSk7DQogCXJldHVybiBj
b2RlOw0KQEAgLTI0ODQsNiArMjU2MSw3IEBADQogICAgIGFmc19pbnQzMiBhdm9saWQsIGFzZXJ2
ZXIsIGFwYXJ0LCB2b2x0eXBlLCBmcm9tZGF0ZSA9IDAsIGNvZGUsIGVyciwgaTsNCiAgICAgY2hh
ciBmaWxlbmFtZVtOYW1lTGVuXTsNCiAgICAgc3RydWN0IG52bGRiZW50cnkgZW50cnk7DQorICAg
IGludCBjb21wcmVzcywgbGV2ZWw7DQogDQogICAgIHJ4X1NldFJ4RGVhZFRpbWUoNjAgKiAxMCk7
DQogICAgIGZvciAoaSA9IDA7IGkgPCBNQVhTRVJWRVJTOyBpKyspIHsNCkBAIC0yNTQxLDE0ICsy
NjE5LDE2IEBADQogCXN0cmNweShmaWxlbmFtZSwgIiIpOw0KICAgICB9DQogDQorICAgIFBhcnNl
UGFyYW1aKCYoYXMtPnBhcm1zWzZdKSwgJihhcy0+cGFybXNbN10pLCAmY29tcHJlc3MsICZsZXZl
bCk7DQorDQogICAgIGlmIChhcy0+cGFybXNbNV0uaXRlbXMpIHsNCiAJY29kZSA9DQogCSAgICBV
Vl9EdW1wQ2xvbmVkVm9sdW1lKGF2b2xpZCwgYXNlcnZlciwgYXBhcnQsIGZyb21kYXRlLA0KLQkJ
CQlEdW1wRnVuY3Rpb24sIGZpbGVuYW1lKTsNCisJCQkJRHVtcEZ1bmN0aW9uLCBmaWxlbmFtZSwg
Y29tcHJlc3MsIGxldmVsKTsNCiAgICAgfSBlbHNlIHsNCiAJY29kZSA9DQogCSAgICBVVl9EdW1w
Vm9sdW1lKGF2b2xpZCwgYXNlcnZlciwgYXBhcnQsIGZyb21kYXRlLCBEdW1wRnVuY3Rpb24sDQot
CQkJICBmaWxlbmFtZSk7DQorCQkJICBmaWxlbmFtZSwgY29tcHJlc3MsIGxldmVsKTsNCiAgICAg
fQ0KICAgICBpZiAoY29kZSkgew0KIAlQcmludERpYWdub3N0aWNzKCJkdW1wIiwgY29kZSk7DQpA
QCAtMjU4NSw2ICsyNjY1LDcgQEANCiAgICAgY2hhciBhZmlsZW5hbWVbTmFtZUxlbl0sIGF2b2xu
YW1lW1ZPTFNFUl9NQVhWT0xOQU1FICsgMV0sIGFwYXJ0TmFtZVsxMF07DQogICAgIGNoYXIgdm9s
bmFtZVtWT0xTRVJfTUFYVk9MTkFNRSArIDFdOw0KICAgICBzdHJ1Y3QgbnZsZGJlbnRyeSBlbnRy
eTsNCisgICAgaW50IGNvbXByZXNzLCBsZXZlbDsNCiANCiAgICAgcHJvbXB0ID0gJ24nOw0KIA0K
QEAgLTI4NDMsOSArMjkyNCwxMSBAQA0KIAkgICAgcmVzdG9yZWZsYWdzIHw9IFJWX0xVS0VFUDsN
CiAgICAgfQ0KIA0KKyAgICBQYXJzZVBhcmFtWigmKGFzLT5wYXJtc1sxMF0pLCAmKGFzLT5wYXJt
c1sxMV0pLCAmY29tcHJlc3MsICZsZXZlbCk7DQorDQogICAgIGNvZGUgPQ0KIAlVVl9SZXN0b3Jl
Vm9sdW1lKGFzZXJ2ZXIsIGFwYXJ0LCBhdm9saWQsIGF2b2xuYW1lLCByZXN0b3JlZmxhZ3MsDQot
CQkJIFdyaXRlRGF0YSwgYWZpbGVuYW1lKTsNCisJCQkgV3JpdGVEYXRhLCBhZmlsZW5hbWUsIGNv
bXByZXNzLCBsZXZlbCk7DQogICAgIGlmIChjb2RlKSB7DQogCVByaW50RGlhZ25vc3RpY3MoInJl
c3RvcmUiLCBjb2RlKTsNCiAJZXhpdCgxKTsNCkBAIC01MzQ1LDYgKzU0MjgsOCBAQA0KIAkJInBh
cnRpdGlvbiBuYW1lIG9uIGRlc3RpbmF0aW9uIik7DQogICAgIGNtZF9BZGRQYXJtKHRzLCAiLWxp
dmUiLCBDTURfRkxBRywgQ01EX09QVElPTkFMLA0KIAkJImNvcHkgbGl2ZSB2b2x1bWUgd2l0aG91
dCBjbG9uaW5nIik7DQorICAgIGNtZF9BZGRQYXJtKHRzLCAiLXoiLCBDTURfU0lOR0xFLCBDTURf
T1BUSU9OQUwsICJjb21wcmVzc2lvbiBsZXZlbCIpOw0KKyAgICBjbWRfQWRkUGFybSh0cywgIi1i
ejIiLCBDTURfU0lOR0xFLCBDTURfT1BUSU9OQUwsICJjb21wcmVzc2lvbiBsZXZlbCIpOw0KICAg
ICBDT01NT05QQVJNUzsNCiANCiAgICAgdHMgPSBjbWRfQ3JlYXRlU3ludGF4KCJjb3B5IiwgQ29w
eVZvbHVtZSwgMCwgImNvcHkgYSB2b2x1bWUiKTsNCkBAIC01MzYzLDYgKzU0NDgsOCBAQA0KIAkJ
Im1ha2UgbmV3IHZvbHVtZSByZWFkLW9ubHkiKTsNCiAgICAgY21kX0FkZFBhcm0odHMsICItbGl2
ZSIsIENNRF9GTEFHLCBDTURfT1BUSU9OQUwsDQogCQkiY29weSBsaXZlIHZvbHVtZSB3aXRob3V0
IGNsb25pbmciKTsNCisgICAgY21kX0FkZFBhcm0odHMsICIteiIsIENNRF9TSU5HTEUsIENNRF9P
UFRJT05BTCwgImNvbXByZXNzaW9uIGxldmVsIik7DQorICAgIGNtZF9BZGRQYXJtKHRzLCAiLWJ6
MiIsIENNRF9TSU5HTEUsIENNRF9PUFRJT05BTCwgImNvbXByZXNzaW9uIGxldmVsIik7DQogICAg
IENPTU1PTlBBUk1TOw0KIA0KICAgICB0cyA9IGNtZF9DcmVhdGVTeW50YXgoInNoYWRvdyIsIFNo
YWRvd1ZvbHVtZSwgMCwNCkBAIC01Mzg3LDYgKzU0NzQsOCBAQA0KIAkJImNvcHkgbGl2ZSB2b2x1
bWUgd2l0aG91dCBjbG9uaW5nIik7DQogICAgIGNtZF9BZGRQYXJtKHRzLCAiLWluY3JlbWVudGFs
IiwgQ01EX0ZMQUcsIENNRF9PUFRJT05BTCwNCiAJCSJkbyBpbmNyZW1lbnRhbCB1cGRhdGUgaWYg
dGFyZ2V0IGV4aXN0cyIpOw0KKyAgICBjbWRfQWRkUGFybSh0cywgIi16IiwgQ01EX1NJTkdMRSwg
Q01EX09QVElPTkFMLCAiY29tcHJlc3Npb24gbGV2ZWwiKTsNCisgICAgY21kX0FkZFBhcm0odHMs
ICItYnoyIiwgQ01EX1NJTkdMRSwgQ01EX09QVElPTkFMLCAiY29tcHJlc3Npb24gbGV2ZWwiKTsN
CiAgICAgQ09NTU9OUEFSTVM7DQogDQogICAgIHRzID0gY21kX0NyZWF0ZVN5bnRheCgiYmFja3Vw
IiwgQmFja3VwVm9sdW1lLCAwLA0KQEAgLTU0MTMsNiArNTUwMiw4IEBADQogICAgIGNtZF9BZGRQ
YXJtKHRzLCAiLWlkIiwgQ01EX1NJTkdMRSwgMCwgInZvbHVtZSBuYW1lIG9yIElEIik7DQogICAg
IGNtZF9BZGRQYXJtKHRzLCAiLWZvcmNlIiwgQ01EX0ZMQUcsIENNRF9PUFRJT05BTCwNCiAJCSJm
b3JjZSBhIGNvbXBsZXRlIHJlbGVhc2UiKTsNCisgICAgY21kX0FkZFBhcm0odHMsICIteiIsIENN
RF9TSU5HTEUsIENNRF9PUFRJT05BTCwgImNvbXByZXNzaW9uIGxldmVsIik7DQorICAgIGNtZF9B
ZGRQYXJtKHRzLCAiLWJ6MiIsIENNRF9TSU5HTEUsIENNRF9PUFRJT05BTCwgImNvbXByZXNzaW9u
IGxldmVsIik7DQogICAgIENPTU1PTlBBUk1TOw0KIA0KICAgICB0cyA9IGNtZF9DcmVhdGVTeW50
YXgoImR1bXAiLCBEdW1wVm9sdW1lLCAwLCAiZHVtcCBhIHZvbHVtZSIpOw0KQEAgLTU0MjMsNiAr
NTUxNCw4IEBADQogICAgIGNtZF9BZGRQYXJtKHRzLCAiLXBhcnRpdGlvbiIsIENNRF9TSU5HTEUs
IENNRF9PUFRJT05BTCwgInBhcnRpdGlvbiIpOw0KICAgICBjbWRfQWRkUGFybSh0cywgIi1jbG9u
ZSIsIENNRF9GTEFHLCBDTURfT1BUSU9OQUwsDQogCQkiZHVtcCBhIGNsb25lIG9mIHRoZSB2b2x1
bWUiKTsNCisgICAgY21kX0FkZFBhcm0odHMsICIteiIsIENNRF9TSU5HTEUsIENNRF9PUFRJT05B
TCwgImNvbXByZXNzaW9uIGxldmVsIik7DQorICAgIGNtZF9BZGRQYXJtKHRzLCAiLWJ6MiIsIENN
RF9TSU5HTEUsIENNRF9PUFRJT05BTCwgImNvbXByZXNzaW9uIGxldmVsIik7DQogICAgIENPTU1P
TlBBUk1TOw0KIA0KICAgICB0cyA9IGNtZF9DcmVhdGVTeW50YXgoInJlc3RvcmUiLCBSZXN0b3Jl
Vm9sdW1lLCAwLCAicmVzdG9yZSBhIHZvbHVtZSIpOw0KQEAgLTU0NDEsNiArNTUzNCw4IEBADQog
CQkiZHVtcCB8IGtlZXAgfCBuZXciKTsNCiAgICAgY21kX0FkZFBhcm0odHMsICItbGFzdHVwZGF0
ZSIsIENNRF9TSU5HTEUsIENNRF9PUFRJT05BTCwNCiAJCSJkdW1wIHwga2VlcCB8IG5ldyIpOw0K
KyAgICBjbWRfQWRkUGFybSh0cywgIi16IiwgQ01EX1NJTkdMRSwgQ01EX09QVElPTkFMLCAiY29t
cHJlc3Npb24gbGV2ZWwiKTsNCisgICAgY21kX0FkZFBhcm0odHMsICItYnoyIiwgQ01EX1NJTkdM
RSwgQ01EX09QVElPTkFMLCAiY29tcHJlc3Npb24gbGV2ZWwiKTsNCiAgICAgQ09NTU9OUEFSTVM7
DQogDQogICAgIHRzID0gY21kX0NyZWF0ZVN5bnRheCgidW5sb2NrIiwgTG9ja1JlbGVhc2VDbWQs
IDAsDQpkaWZmIC1OYXVyIG9wZW5hZnMtMS4zLjc3L3NyYy92b2xzZXIvdnNwcm9jcy5jIG9wZW5h
ZnMtMS4zLjc3ei9zcmMvdm9sc2VyL3ZzcHJvY3MuYw0KLS0tIG9wZW5hZnMtMS4zLjc3L3NyYy92
b2xzZXIvdnNwcm9jcy5jCTIwMDQtMTEtMDkgMTg6MTM6NDUuMDAwMDAwMDAwICswMTAwDQorKysg
b3BlbmFmcy0xLjMuNzd6L3NyYy92b2xzZXIvdnNwcm9jcy5jCTIwMDQtMTItMjEgMjA6MzE6MDUu
MDAwMDAwMDAwICswMTAwDQpAQCAtMTY2LDcgKzE2Niw3IEBADQogc3RhdGljIGludCBTaW11bGF0
ZUZvcndhcmRNdWx0aXBsZShzdHJ1Y3QgcnhfY29ubmVjdGlvbiAqZnJvbWNvbm4sDQogCQkJCSAg
IGFmc19pbnQzMiBmcm9tdGlkLCBhZnNfaW50MzIgZnJvbWRhdGUsDQogCQkJCSAgIG1hbnlEZXN0
cyAqIHRyLCBhZnNfaW50MzIgZmxhZ3MsDQotCQkJCSAgIHZvaWQgKmNvb2tpZSwgbWFueVJlc3Vs
dHMgKiByZXN1bHRzKTsNCisJCQkJICAgdm9pZCAqY29va2llLCBtYW55UmVzdWx0cyAqIHJlc3Vs
dHMsIGludCBjb21wcmVzcywgaW50IGxldmVsKTsNCiBzdGF0aWMgaW50IHJlbF9jb21wYXIoc3Ry
dWN0IHJlbGVhc2UgKnIxLCBzdHJ1Y3QgcmVsZWFzZSAqcjIpOw0KIHN0YXRpYyBhZnNfaW50MzIg
Q2hlY2tWb2x1bWUodm9saW50SW5mbyAqIHZvbHVtZWluZm8sIGFmc19pbnQzMiBhc2VydmVyLA0K
IAkJCSAgICAgYWZzX2ludDMyIGFwYXJ0LCBhZnNfaW50MzIgKiBtb2RlbnRyeSwNCkBAIC0xMDM2
LDcgKzEwMzYsNyBAQA0KIA0KIGludA0KIFVWX01vdmVWb2x1bWUyKGFmc19pbnQzMiBhZnJvbXZv
bCwgYWZzX2ludDMyIGFmcm9tc2VydmVyLCBhZnNfaW50MzIgYWZyb21wYXJ0LA0KLQkgICAgICAg
YWZzX2ludDMyIGF0b3NlcnZlciwgYWZzX2ludDMyIGF0b3BhcnQsIGludCBmbGFncykNCisJICAg
ICAgIGFmc19pbnQzMiBhdG9zZXJ2ZXIsIGFmc19pbnQzMiBhdG9wYXJ0LCBpbnQgZmxhZ3MsIGlu
dCBjb21wcmVzcywgaW50IGxldmVsKQ0KIHsNCiAgICAgc3RydWN0IHJ4X2Nvbm5lY3Rpb24gKnRv
Y29ubiwgKmZyb21jb25uOw0KICAgICBhZnNfaW50MzIgZnJvbXRpZCwgdG90aWQsIGNsb25ldGlk
Ow0KQEAgLTE0MjAsOSArMTQyMCwxMiBAQA0KIAkvKiBDb3B5IHRoZSBjbG9uZSB0byB0aGUgbmV3
IHZvbHVtZSAqLw0KIAlWUFJJTlQyKCJEdW1waW5nIGZyb20gY2xvbmUgJXUgb24gc291cmNlIHRv
IHZvbHVtZSAldSBvbiBkZXN0aW5hdGlvbiAuLi4iLA0KIAkJbmV3Vm9sLCBhZnJvbXZvbCk7DQot
CWNvZGUgPQ0KLQkgICAgQUZTVm9sRm9yd2FyZChmcm9tY29ubiwgY2xvbmV0aWQsIDAsICZkZXN0
aW5hdGlvbiwgdG90aWQsDQotCQkJICAmY29va2llKTsNCisNCisJaWYgKGNvbXByZXNzKQ0KKwkJ
Y29kZSA9IEFGU1ZvbEZvcndhcmRaKGZyb21jb25uLCBjbG9uZXRpZCwgMCwgJmRlc3RpbmF0aW9u
LCB0b3RpZCwgJmNvb2tpZSwgY29tcHJlc3MsIGxldmVsKTsNCisJZWxzZQ0KKwkJY29kZSA9IEFG
U1ZvbEZvcndhcmQoZnJvbWNvbm4sIGNsb25ldGlkLCAwLCAmZGVzdGluYXRpb24sIHRvdGlkLCAm
Y29va2llKTsNCisNCiAJRUdPVE8xKG1mYWlsLCBjb2RlLCAiRmFpbGVkIHRvIG1vdmUgZGF0YSBm
b3IgdGhlIHZvbHVtZSAldVxuIiwgdm9saWQpOw0KIAlWRE9ORTsNCiANCkBAIC0xNDUzLDkgKzE0
NTYsMTIgQEANCiAJKCJEb2luZyB0aGUlcyBkdW1wIGZyb20gc291cmNlIHRvIGRlc3RpbmF0aW9u
IGZvciB2b2x1bWUgJXUgLi4uICIsDQogCSAoZmxhZ3MgJiBSVl9OT0NMT05FKSA/ICIiIDogIiBp
bmNyZW1lbnRhbCIsDQogCSBhZnJvbXZvbCk7DQotICAgIGNvZGUgPQ0KLQlBRlNWb2xGb3J3YXJk
KGZyb21jb25uLCBmcm9tdGlkLCBmcm9tRGF0ZSwgJmRlc3RpbmF0aW9uLCB0b3RpZCwNCi0JCSAg
ICAgICZjb29raWUpOw0KKw0KKyAgICBpZiAoY29tcHJlc3MpDQorCWNvZGUgPSBBRlNWb2xGb3J3
YXJkWihmcm9tY29ubiwgZnJvbXRpZCwgZnJvbURhdGUsICZkZXN0aW5hdGlvbiwgdG90aWQsJmNv
b2tpZSwgY29tcHJlc3MsIGxldmVsKTsNCisgICAgZWxzZQ0KKwljb2RlID0gQUZTVm9sRm9yd2Fy
ZChmcm9tY29ubiwgZnJvbXRpZCwgZnJvbURhdGUsICZkZXN0aW5hdGlvbiwgdG90aWQsJmNvb2tp
ZSk7DQorDQogICAgIEVHT1RPMShtZmFpbCwgY29kZSwNCiAJICAgIkZhaWxlZCB0byBkbyB0aGUl
cyBkdW1wIGZyb20gcncgdm9sdW1lIG9uIG9sZCBzaXRlIHRvIHJ3IHZvbHVtZSBvbiBuZXdzaXRl
XG4iLA0KIAkgIChmbGFncyAmIFJWX05PQ0xPTkUpID8gIiIgOiAiIGluY3JlbWVudGFsIik7DQpA
QCAtMjAwMSwxMCArMjAwNywxMCBAQA0KIA0KIGludA0KIFVWX01vdmVWb2x1bWUoYWZzX2ludDMy
IGFmcm9tdm9sLCBhZnNfaW50MzIgYWZyb21zZXJ2ZXIsIGFmc19pbnQzMiBhZnJvbXBhcnQsDQot
CSAgICAgIGFmc19pbnQzMiBhdG9zZXJ2ZXIsIGFmc19pbnQzMiBhdG9wYXJ0KQ0KKwkgICAgICBh
ZnNfaW50MzIgYXRvc2VydmVyLCBhZnNfaW50MzIgYXRvcGFydCwgaW50IGNvbXByZXNzLCBpbnQg
bGV2ZWwpDQogew0KICAgICByZXR1cm4gVVZfTW92ZVZvbHVtZTIoYWZyb212b2wsIGFmcm9tc2Vy
dmVyLCBhZnJvbXBhcnQsDQotCQkJICBhdG9zZXJ2ZXIsIGF0b3BhcnQsIDApOw0KKwkJCSAgYXRv
c2VydmVyLCBhdG9wYXJ0LCAwLCBjb21wcmVzcywgbGV2ZWwpOw0KIH0NCiANCiANCkBAIC0yMDIy
LDcgKzIwMjgsNyBAQA0KIGludA0KIFVWX0NvcHlWb2x1bWUyKGFmc19pbnQzMiBhZnJvbXZvbCwg
YWZzX2ludDMyIGFmcm9tc2VydmVyLCBhZnNfaW50MzIgYWZyb21wYXJ0LA0KIAkgICAgICAgY2hh
ciAqYXRvdm9sbmFtZSwgYWZzX2ludDMyIGF0b3NlcnZlciwgYWZzX2ludDMyIGF0b3BhcnQsDQot
CSAgICAgICBhZnNfaW50MzIgYXRvdm9saWQsIGludCBmbGFncykNCisJICAgICAgIGFmc19pbnQz
MiBhdG92b2xpZCwgaW50IGZsYWdzLCBpbnQgY29tcHJlc3MsIGludCBsZXZlbCkNCiB7DQogICAg
IHN0cnVjdCByeF9jb25uZWN0aW9uICp0b2Nvbm4sICpmcm9tY29ubjsNCiAgICAgYWZzX2ludDMy
IGZyb210aWQsIHRvdGlkLCBjbG9uZXRpZDsNCkBAIC0yMjU1LDkgKzIyNjEsMTQgQEANCiAJLyog
Q29weSB0aGUgY2xvbmUgdG8gdGhlIG5ldyB2b2x1bWUgKi8NCiAJVlBSSU5UMigiRHVtcGluZyBm
cm9tIGNsb25lICV1IG9uIHNvdXJjZSB0byB2b2x1bWUgJXUgb24gZGVzdGluYXRpb24gLi4uIiwN
CiAJICAgIGNsb25lVm9sLCBuZXdWb2wpOw0KLQljb2RlID0NCi0JICAgIEFGU1ZvbEZvcndhcmQo
ZnJvbWNvbm4sIGNsb25ldGlkLCBjbG9uZUZyb21EYXRlLCAmZGVzdGluYXRpb24sDQotCQkJICB0
b3RpZCwgJmNvb2tpZSk7DQorCWlmIChjb21wcmVzcykNCisJCWNvZGUgPQ0KKwkJQUZTVm9sRm9y
d2FyZFooZnJvbWNvbm4sIGNsb25ldGlkLCBjbG9uZUZyb21EYXRlLCAmZGVzdGluYXRpb24sDQor
CQkJCXRvdGlkLCAmY29va2llLCBjb21wcmVzcywgbGV2ZWwpOw0KKwllbHNlDQorCQljb2RlID0N
CisJCUFGU1ZvbEZvcndhcmQoZnJvbWNvbm4sIGNsb25ldGlkLCBjbG9uZUZyb21EYXRlLCAmZGVz
dGluYXRpb24sDQorCQkJCXRvdGlkLCAmY29va2llKTsNCiAJRUdPVE8xKG1mYWlsLCBjb2RlLCAi
RmFpbGVkIHRvIG1vdmUgZGF0YSBmb3IgdGhlIHZvbHVtZSAldVxuIiwNCiAJICAgICAgIG5ld1Zv
bCk7DQogCVZET05FOw0KQEAgLTIyODksOSArMjMwMCwxNCBAQA0KIAkoIkRvaW5nIHRoZSVzIGR1
bXAgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24gZm9yIHZvbHVtZSAldSAuLi4gIiwNCiAJIChm
bGFncyAmIFJWX05PQ0xPTkUpID8gIiIgOiAiIGluY3JlbWVudGFsIiwNCiAJIGFmcm9tdm9sKTsN
Ci0gICAgY29kZSA9DQotCUFGU1ZvbEZvcndhcmQoZnJvbWNvbm4sIGZyb210aWQsIGZyb21EYXRl
LCAmZGVzdGluYXRpb24sIHRvdGlkLA0KLQkJICAgICAgJmNvb2tpZSk7DQorICAgIGlmIChjb21w
cmVzcykNCisJY29kZSA9DQorCQlBRlNWb2xGb3J3YXJkWihmcm9tY29ubiwgZnJvbXRpZCwgZnJv
bURhdGUsICZkZXN0aW5hdGlvbiwgdG90aWQsDQorCQkJJmNvb2tpZSwgY29tcHJlc3MsIGxldmVs
KTsNCisgICAgZWxzZQ0KKwljb2RlID0NCisJCUFGU1ZvbEZvcndhcmQoZnJvbWNvbm4sIGZyb210
aWQsIGZyb21EYXRlLCAmZGVzdGluYXRpb24sIHRvdGlkLA0KKwkJCSZjb29raWUpOw0KICAgICBF
R09UTzEobWZhaWwsIGNvZGUsDQogCSAgICJGYWlsZWQgdG8gZG8gdGhlJXMgZHVtcCBmcm9tIG9s
ZCBzaXRlIHRvIG5ldyBzaXRlXG4iLA0KIAkgICBhZnJvbXZvbCk7DQpAQCAtMjUxNSwxMCArMjUz
MSwxMSBAQA0KIA0KIGludA0KIFVWX0NvcHlWb2x1bWUoYWZzX2ludDMyIGFmcm9tdm9sLCBhZnNf
aW50MzIgYWZyb21zZXJ2ZXIsIGFmc19pbnQzMiBhZnJvbXBhcnQsDQotCSAgICAgIGNoYXIgKmF0
b3ZvbG5hbWUsIGFmc19pbnQzMiBhdG9zZXJ2ZXIsIGFmc19pbnQzMiBhdG9wYXJ0KQ0KKwkgICAg
ICBjaGFyICphdG92b2xuYW1lLCBhZnNfaW50MzIgYXRvc2VydmVyLCBhZnNfaW50MzIgYXRvcGFy
dCwgaW50IGNvbXByZXNzLCBpbnQgbGV2ZWwpDQogew0KICAgICByZXR1cm4gVVZfQ29weVZvbHVt
ZTIoYWZyb212b2wsIGFmcm9tc2VydmVyLCBhZnJvbXBhcnQsDQotICAgICAgICAgICAgICAgICAg
ICAgICAgICBhdG92b2xuYW1lLCBhdG9zZXJ2ZXIsIGF0b3BhcnQsIDAsIDApOw0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXRvdm9sbmFtZSwgYXRvc2VydmVyLCBhdG9wYXJ0LCAwLCAwLA0K
KwkJCSAgY29tcHJlc3MsIGxldmVsKTsNCiB9DQogDQogDQpAQCAtMzEwNywxNSArMzEyNCwyNCBA
QA0KIHN0YXRpYyBpbnQNCiBTaW11bGF0ZUZvcndhcmRNdWx0aXBsZShzdHJ1Y3QgcnhfY29ubmVj
dGlvbiAqZnJvbWNvbm4sIGFmc19pbnQzMiBmcm9tdGlkLA0KIAkJCWFmc19pbnQzMiBmcm9tZGF0
ZSwgbWFueURlc3RzICogdHIsIGFmc19pbnQzMiBmbGFncywNCi0JCQl2b2lkICpjb29raWUsIG1h
bnlSZXN1bHRzICogcmVzdWx0cykNCisJCQl2b2lkICpjb29raWUsIG1hbnlSZXN1bHRzICogcmVz
dWx0cywNCisJCQlpbnQgY29tcHJlc3MsIGludCBsZXZlbCkNCiB7DQogICAgIGludCBpOw0KIA0K
ICAgICBmb3IgKGkgPSAwOyBpIDwgdHItPm1hbnlEZXN0c19sZW47IGkrKykgew0KLQlyZXN1bHRz
LT5tYW55UmVzdWx0c192YWxbaV0gPQ0KLQkgICAgQUZTVm9sRm9yd2FyZChmcm9tY29ubiwgZnJv
bXRpZCwgZnJvbWRhdGUsDQotCQkJICAmKHRyLT5tYW55RGVzdHNfdmFsW2ldLnNlcnZlciksDQot
CQkJICB0ci0+bWFueURlc3RzX3ZhbFtpXS50cmFucywgY29va2llKTsNCisJaWYgKGNvbXByZXNz
KQ0KKwl7DQorCQlyZXN1bHRzLT5tYW55UmVzdWx0c192YWxbaV0gPQ0KKwkJQUZTVm9sRm9yd2Fy
ZFooZnJvbWNvbm4sIGZyb210aWQsIGZyb21kYXRlLA0KKwkJCQkmKHRyLT5tYW55RGVzdHNfdmFs
W2ldLnNlcnZlciksDQorCQkJCXRyLT5tYW55RGVzdHNfdmFsW2ldLnRyYW5zLCBjb29raWUsIGNv
bXByZXNzLCBsZXZlbCk7DQorCX0gZWxzZSB7DQorCQlyZXN1bHRzLT5tYW55UmVzdWx0c192YWxb
aV0gPQ0KKwkJQUZTVm9sRm9yd2FyZChmcm9tY29ubiwgZnJvbXRpZCwgZnJvbWRhdGUsDQorCQkJ
CSYodHItPm1hbnlEZXN0c192YWxbaV0uc2VydmVyKSwNCisJCQkJdHItPm1hbnlEZXN0c192YWxb
aV0udHJhbnMsIGNvb2tpZSk7DQorCX0NCiAgICAgfQ0KICAgICByZXR1cm4gMDsNCiB9DQpAQCAt
MzE0Myw3ICszMTY5LDggQEANCiANCiBpbnQNCiBVVl9SZWxlYXNlVm9sdW1lKGFmc19pbnQzMiBh
ZnJvbXZvbCwgYWZzX2ludDMyIGFmcm9tc2VydmVyLA0KLQkJIGFmc19pbnQzMiBhZnJvbXBhcnQs
IGludCBmb3JjZWZsYWcpDQorCQkgYWZzX2ludDMyIGFmcm9tcGFydCwgaW50IGZvcmNlZmxhZywN
CisJCSBpbnQgY29tcHJlc3MsIGludCBsZXZlbCkNCiB7DQogICAgIGNoYXIgdm5hbWVbNjRdOw0K
ICAgICBhZnNfaW50MzIgY29kZSwgdmNvZGUsIHJjb2RlLCB0Y29kZTsNCkBAIC0zNTkzLDEzICsz
NjIwLDIyIEBADQogCS8qIFJlbGVhc2UgdGhlIG9uZXMgd2UgaGF2ZSBjb2xsZWN0ZWQgKi8NCiAJ
dHIubWFueURlc3RzX3ZhbCA9ICYocmVwbGljYXNbMF0pOw0KIAl0ci5tYW55RGVzdHNfbGVuID0g
cmVzdWx0cy5tYW55UmVzdWx0c19sZW4gPSB2b2xjb3VudDsNCi0JY29kZSA9DQotCSAgICBBRlNW
b2xGb3J3YXJkTXVsdGlwbGUoZnJvbWNvbm4sIGZyb210aWQsIGZyb21kYXRlLCAmdHIsDQotCQkJ
CSAgMCAvKnNwYXJlICovICwgJmNvb2tpZSwgJnJlc3VsdHMpOw0KKwlpZiAoY29tcHJlc3MpDQor
CXsNCisJCWNvZGUgPQ0KKwkJQUZTVm9sRm9yd2FyZE11bHRpcGxlWihmcm9tY29ubiwgZnJvbXRp
ZCwgZnJvbWRhdGUsICZ0ciwNCisJCQkJCTAgLypzcGFyZSAqLyAsICZjb29raWUsICZyZXN1bHRz
LA0KKwkJCQkJY29tcHJlc3MsIGxldmVsKTsNCisJfSBlbHNlIHsNCisJCWNvZGUgPQ0KKwkJQUZT
Vm9sRm9yd2FyZE11bHRpcGxlKGZyb21jb25uLCBmcm9tdGlkLCBmcm9tZGF0ZSwgJnRyLA0KKwkJ
CQkJMCAvKnNwYXJlICovICwgJmNvb2tpZSwgJnJlc3VsdHMpOw0KKwl9DQogCWlmIChjb2RlID09
IFJYR0VOX09QQ09ERSkgewkvKiBSUEMgSW50ZXJmYWNlIE1pc21hdGNoICovDQogCSAgICBjb2Rl
ID0NCiAJCVNpbXVsYXRlRm9yd2FyZE11bHRpcGxlKGZyb21jb25uLCBmcm9tdGlkLCBmcm9tZGF0
ZSwgJnRyLA0KLQkJCQkJMCAvKnNwYXJlICovICwgJmNvb2tpZSwgJnJlc3VsdHMpOw0KKwkJCQkJ
MCAvKnNwYXJlICovICwgJmNvb2tpZSwgJnJlc3VsdHMsDQorCQkJCQljb21wcmVzcywgbGV2ZWwp
Ow0KIAkgICAgbnNlcnZlcnMgPSAxOw0KIAl9DQogDQpAQCAtMzgzMCw3ICszODY2LDggQEANCiAg
Ki8NCiBpbnQNCiBVVl9EdW1wVm9sdW1lKGFmc19pbnQzMiBhZnJvbXZvbCwgYWZzX2ludDMyIGFm
cm9tc2VydmVyLCBhZnNfaW50MzIgYWZyb21wYXJ0LA0KLQkgICAgICBhZnNfaW50MzIgZnJvbWRh
dGUsIGFmc19pbnQzMigqRHVtcEZ1bmN0aW9uKSAoKSwgY2hhciAqcm9jaykNCisJICAgICAgYWZz
X2ludDMyIGZyb21kYXRlLCBhZnNfaW50MzIoKkR1bXBGdW5jdGlvbikgKCksIGNoYXIgKnJvY2ss
DQorCSAgICAgIGludCBjb21wcmVzcywgaW50IGxldmVsKQ0KIHsNCiAgICAgc3RydWN0IHJ4X2Nv
bm5lY3Rpb24gKmZyb21jb25uID0gKHN0cnVjdCByeF9jb25uZWN0aW9uICopMDsNCiAgICAgc3Ry
dWN0IHJ4X2NhbGwgKmZyb21jYWxsID0gKHN0cnVjdCByeF9jYWxsICopMDsNCkBAIC0zODY0LDEy
ICszOTAxLDE3IEBADQogICAgIGZyb21jYWxsID0gcnhfTmV3Q2FsbChmcm9tY29ubik7DQogDQog
ICAgIFZQUklOVDEoIlN0YXJ0aW5nIHZvbHVtZSBkdW1wIG9uIHZvbHVtZSAldS4uLiIsIGFmcm9t
dm9sKTsNCi0gICAgY29kZSA9IFN0YXJ0QUZTVm9sRHVtcChmcm9tY2FsbCwgZnJvbXRpZCwgZnJv
bWRhdGUpOw0KKyAgICBpZiAoY29tcHJlc3MpDQorICAgIHsNCisJY29kZSA9IFN0YXJ0QUZTVm9s
RHVtcFooZnJvbWNhbGwsIGZyb210aWQsIGZyb21kYXRlLCBjb21wcmVzcywgbGV2ZWwpOw0KKyAg
ICB9IGVsc2Ugew0KKwljb2RlID0gU3RhcnRBRlNWb2xEdW1wKGZyb21jYWxsLCBmcm9tdGlkLCBm
cm9tZGF0ZSk7DQorICAgIH0NCiAgICAgRUdPVE8oZXJyb3JfZXhpdCwgY29kZSwgIkNvdWxkIG5v
dCBzdGFydCB0aGUgZHVtcCBwcm9jZXNzIFxuIik7DQogICAgIFZET05FOw0KIA0KICAgICBWUFJJ
TlQxKCJEdW1waW5nIHZvbHVtZSAldS4uLiIsIGFmcm9tdm9sKTsNCi0gICAgY29kZSA9IER1bXBG
dW5jdGlvbihmcm9tY2FsbCwgcm9jayk7DQorICAgIGNvZGUgPSBEdW1wRnVuY3Rpb24oZnJvbWNh
bGwsIHJvY2ssIGNvbXByZXNzLCBsZXZlbCk7DQogICAgIEVHT1RPKGVycm9yX2V4aXQsIGNvZGUs
ICJFcnJvciB3aGlsZSBkdW1waW5nIHZvbHVtZSBcbiIpOw0KICAgICBWRE9ORTsNCiANCkBAIC0z
ODc3LDcgKzM5MTksNyBAQA0KICAgICBpZiAoZnJvbWNhbGwpIHsNCiAJY29kZSA9IHJ4X0VuZENh
bGwoZnJvbWNhbGwsIHJ4RXJyb3IpOw0KIAlpZiAoY29kZSkgew0KLQkgICAgZnByaW50ZihTVERF
UlIsICJFcnJvciBpbiByeF9FbmRDYWxsXG4iKTsNCisJICAgIGZwcmludGYoU1RERVJSLCAiRXJy
b3IgaW4gcnhfRW5kQ2FsbCAoY29kZTogJWQpXG4iLCBjb2RlKTsNCiAJICAgIGlmICghZXJyb3Ip
DQogCQllcnJvciA9IGNvZGU7DQogCX0NCkBAIC0zOTA5LDcgKzM5NTEsOCBAQA0KIGludA0KIFVW
X0R1bXBDbG9uZWRWb2x1bWUoYWZzX2ludDMyIGFmcm9tdm9sLCBhZnNfaW50MzIgYWZyb21zZXJ2
ZXIsDQogCQkgICAgYWZzX2ludDMyIGFmcm9tcGFydCwgYWZzX2ludDMyIGZyb21kYXRlLA0KLQkJ
ICAgIGFmc19pbnQzMigqRHVtcEZ1bmN0aW9uKSAoKSwgY2hhciAqcm9jaykNCisJCSAgICBhZnNf
aW50MzIoKkR1bXBGdW5jdGlvbikgKCksIGNoYXIgKnJvY2ssDQorCQkgICAgaW50IGNvbXByZXNz
LCBpbnQgbGV2ZWwpDQogew0KICAgICBzdHJ1Y3QgcnhfY29ubmVjdGlvbiAqZnJvbWNvbm4gPSAo
c3RydWN0IHJ4X2Nvbm5lY3Rpb24gKikwOw0KICAgICBzdHJ1Y3QgcnhfY2FsbCAqZnJvbWNhbGwg
PSAoc3RydWN0IHJ4X2NhbGwgKikwOw0KQEAgLTM5OTEsMTIgKzQwMzQsMTUgQEANCiAgICAgZnJv
bWNhbGwgPSByeF9OZXdDYWxsKGZyb21jb25uKTsNCiANCiAgICAgVlBSSU5UMSgiU3RhcnRpbmcg
dm9sdW1lIGR1bXAgZnJvbSBjbG9uZWQgdm9sdW1lICV1Li4uIiwgY2xvbmV2b2wpOw0KLSAgICBj
b2RlID0gU3RhcnRBRlNWb2xEdW1wKGZyb21jYWxsLCBjbG9uZXRpZCwgZnJvbWRhdGUpOw0KKyAg
ICBpZiAoY29tcHJlc3MpDQorCWNvZGUgPSBTdGFydEFGU1ZvbER1bXBaKGZyb21jYWxsLCBjbG9u
ZXRpZCwgZnJvbWRhdGUsIGNvbXByZXNzLCBsZXZlbCk7DQorICAgIGVsc2UNCisJY29kZSA9IFN0
YXJ0QUZTVm9sRHVtcChmcm9tY2FsbCwgY2xvbmV0aWQsIGZyb21kYXRlKTsNCiAgICAgRUdPVE8o
ZXJyb3JfZXhpdCwgY29kZSwgIkNvdWxkIG5vdCBzdGFydCB0aGUgZHVtcCBwcm9jZXNzIFxuIik7
DQogICAgIFZET05FOw0KIA0KICAgICBWUFJJTlQxKCJEdW1waW5nIHZvbHVtZSAldS4uLiIsIGFm
cm9tdm9sKTsNCi0gICAgY29kZSA9IER1bXBGdW5jdGlvbihmcm9tY2FsbCwgcm9jayk7DQorICAg
IGNvZGUgPSBEdW1wRnVuY3Rpb24oZnJvbWNhbGwsIHJvY2ssIGNvbXByZXNzLCBsZXZlbCk7DQog
ICAgIEVHT1RPKGVycm9yX2V4aXQsIGNvZGUsICJFcnJvciB3aGlsZSBkdW1waW5nIHZvbHVtZSBc
biIpOw0KICAgICBWRE9ORTsNCiANCkBAIC00MDQ4LDcgKzQwOTQsNyBAQA0KIGludA0KIFVWX1Jl
c3RvcmVWb2x1bWUoYWZzX2ludDMyIHRvc2VydmVyLCBhZnNfaW50MzIgdG9wYXJ0LCBhZnNfaW50
MzIgdG92b2xpZCwNCiAJCSBjaGFyIHRvdm9sbmFtZVtdLCBpbnQgZmxhZ3MsIGFmc19pbnQzMigq
V3JpdGVEYXRhKSAoKSwNCi0JCSBjaGFyICpyb2NrKQ0KKwkJIGNoYXIgKnJvY2ssIGludCBjb21w
cmVzcywgaW50IGxldmVsKQ0KIHsNCiAgICAgc3RydWN0IHJ4X2Nvbm5lY3Rpb24gKnRvY29ubiwg
KnRlbXBjb25uOw0KICAgICBzdHJ1Y3QgcnhfY2FsbCAqdG9jYWxsOw0KQEAgLTQxOTgsMTMgKzQy
NDQsMTYgQEANCiAgICAgc3RybmNweShjb29raWUubmFtZSwgdG92b2xuYW1lLCBWT0xTRVJfT0xE
TUFYVk9MTkFNRSk7DQogDQogICAgIHRvY2FsbCA9IHJ4X05ld0NhbGwodG9jb25uKTsNCi0gICAg
dGVycm9yID0gU3RhcnRBRlNWb2xSZXN0b3JlKHRvY2FsbCwgdG90aWQsIDEsICZjb29raWUpOw0K
KyAgICBpZiAoY29tcHJlc3MpDQorCXRlcnJvciA9IFN0YXJ0QUZTVm9sUmVzdG9yZVoodG9jYWxs
LCB0b3RpZCwgMSwgJmNvb2tpZSwgY29tcHJlc3MsIGxldmVsKTsNCisgICAgZWxzZQ0KKwl0ZXJy
b3IgPSBTdGFydEFGU1ZvbFJlc3RvcmUodG9jYWxsLCB0b3RpZCwgMSwgJmNvb2tpZSk7DQogICAg
IGlmICh0ZXJyb3IpIHsNCiAJZnByaW50ZihTVERFUlIsICJWb2x1bWUgcmVzdG9yZSBGYWlsZWQg
XG4iKTsNCiAJZXJyb3IgPSB0ZXJyb3I7DQogCWdvdG8gcmVmYWlsOw0KICAgICB9DQotICAgIGNv
ZGUgPSBXcml0ZURhdGEodG9jYWxsLCByb2NrKTsNCisgICAgY29kZSA9IFdyaXRlRGF0YSh0b2Nh
bGwsIHJvY2ssIGNvbXByZXNzLCBsZXZlbCk7DQogICAgIGlmIChjb2RlKSB7DQogCWZwcmludGYo
U1RERVJSLCAiQ291bGQgbm90IHRyYW5zbWl0IGRhdGFcbiIpOw0KIAllcnJvciA9IGNvZGU7DQpk
aWZmIC1OYXVyIG9wZW5hZnMtMS4zLjc3L3NyYy92b2xzZXIvemlvcnguYyBvcGVuYWZzLTEuMy43
N3ovc3JjL3ZvbHNlci96aW9yeC5jDQotLS0gb3BlbmFmcy0xLjMuNzcvc3JjL3ZvbHNlci96aW9y
eC5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwDQorKysgb3BlbmFmcy0xLjMu
Nzd6L3NyYy92b2xzZXIvemlvcnguYwkyMDA0LTEyLTI4IDE1OjQ2OjExLjAwMDAwMDAwMCArMDEw
MA0KQEAgLTAsMCArMSw3OTkgQEANCisjaW5jbHVkZSAiemlvcnguaCINCisjaW5jbHVkZSA8cngv
eGRyLmg+DQorI2luY2x1ZGUgPHJ4L3J4Lmg+DQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorDQorI2lu
Y2x1ZGUgInpsaWIuaCINCisjaW5jbHVkZSAiYnpsaWIuaCINCisNCisjZGVmaW5lIFpJT1JYX1RS
VUUgMQ0KKyNkZWZpbmUgWklPUlhfRkFMU0UgMA0KKw0KKy8vI2RlZmluZSBaSU9SWF9ERUJVRw0K
Kw0KK3N0YXRpYyB2b2lkIGhhbmRsZUVycm9yKHN0cnVjdCB6aW9yeF9jYWxsICp6Y2FsbCwgY29u
c3QgY2hhciAqbWVzc2FnZSwgY29uc3QgY2hhciAqcmVhc29uKQ0KK3sNCisJaW50IG5sZW47DQor
CWNoYXIgKnAgOw0KKw0KKwlpZiAoemNhbGwhPU5VTEwpDQorCXsNCisJCXN0cm5jcHkoemNhbGwt
Pmxhc3RFcnJvck1zZywgbWVzc2FnZSwgWklPUlhfQ0FMTF9FUlJPUl9CVUZTSVpFKTsNCisJCXpj
YWxsLT5sYXN0RXJyb3JNc2dbWklPUlhfQ0FMTF9FUlJPUl9CVUZTSVpFLTFdID0gJ1wwJzsNCisN
CisJCS8vYXBwZW5kIHNhZmVseSAiOiAiDQorCQlubGVuID0gc3RybGVuKHpjYWxsLT5sYXN0RXJy
b3JNc2cpOwkvL2xlbmd0aCBzbyBmYXINCisJCXAgPSB6Y2FsbC0+bGFzdEVycm9yTXNnICsgbmxl
bjsNCisJCXN0cm5jcHkocCwgIjogIiwgWklPUlhfQ0FMTF9FUlJPUl9CVUZTSVpFIC0gbmxlbik7
DQorCQl6Y2FsbC0+bGFzdEVycm9yTXNnW1pJT1JYX0NBTExfRVJST1JfQlVGU0laRS0xXSA9ICdc
MCc7DQorDQorCQlpZiAocmVhc29uIT1OVUxMKQ0KKwkJew0KKwkJCWlmIChubGVuPFpJT1JYX0NB
TExfRVJST1JfQlVGU0laRSkNCisJCQl7DQorCQkJCW5sZW4gPSBzdHJsZW4oemNhbGwtPmxhc3RF
cnJvck1zZyk7CS8vbGVuZ3RoIHNvIGZhcg0KKwkJCQlwID0gemNhbGwtPmxhc3RFcnJvck1zZyAr
IG5sZW47CS8vd2hlcmUgdG8gYXBwZW5kIHJlYXNvbg0KKwkJCQlzdHJuY3B5KHAsIHJlYXNvbiwg
WklPUlhfQ0FMTF9FUlJPUl9CVUZTSVpFIC0gbmxlbik7DQorCQkJCXpjYWxsLT5sYXN0RXJyb3JN
c2dbWklPUlhfQ0FMTF9FUlJPUl9CVUZTSVpFLTFdID0gJ1wwJzsNCisJCQl9DQorCQl9DQorCX0N
CisNCisJLy9mb3IgYWxsIHRoZSBjYXNlczoNCisJZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIs
IG1lc3NhZ2UsIHJlYXNvbik7DQorfQ0KKw0KKy8vdGhpcyBzaG91bGQgaGF2ZSBiZWVuIHBhcnQg
b2YgYnpsaWIgaW50ZXJmYWNlLi4uDQorc3RhdGljIGNoYXIgKnppb3J4X2J6RXJyb3IoaW50IGNv
ZGUpDQorew0KKwljaGFyICpidWYgPSBtYWxsb2MoWklPUlhfQ0FMTF9FUlJPUl9CVUZTSVpFKTsN
CisJaWYgKGJ1Zj09TlVMTCkNCisJCXJldHVybiAibWVtb3J5IGVycm9yIjsNCisJbWVtc2V0KGJ1
ZiwgMCwgWklPUlhfQ0FMTF9FUlJPUl9CVUZTSVpFKTsNCisJc3dpdGNoKGNvZGUpDQorCXsNCisJ
CWNhc2UgQlpfT0s6DQorCQkJc3ByaW50ZihidWYsICJCWl9PSyIpOw0KKwkJCWJyZWFrOw0KKwkJ
Y2FzZSBCWl9GTFVTSF9PSzoNCisJCQlzcHJpbnRmKGJ1ZiwgIkJaX0ZMVVNIX09LIik7DQorCQkJ
YnJlYWs7DQorCQljYXNlIEJaX0ZJTklTSF9PSzoNCisJCQlzcHJpbnRmKGJ1ZiwgIkJaX0ZJTklT
SF9PSyIpOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSBCWl9TVFJFQU1fRU5EOg0KKwkJCXNwcmludGYo
YnVmLCAiQlpfU1RSRUFNX0VORCIpOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSBCWl9TRVFVRU5DRV9F
UlJPUjoNCisJCQlzcHJpbnRmKGJ1ZiwgIkJaX1NFUVVFTkNFX0VSUk9SIik7DQorCQkJYnJlYWs7
DQorCQljYXNlIEJaX1BBUkFNX0VSUk9SOg0KKwkJCXNwcmludGYoYnVmLCAiQlpfUEFSQU1fRVJS
T1IiKTsNCisJCQlicmVhazsNCisJCWNhc2UgQlpfTUVNX0VSUk9SOg0KKwkJCXNwcmludGYoYnVm
LCAiQlpfTUVNX0VSUk9SIik7DQorCQkJYnJlYWs7DQorCQljYXNlIEJaX0RBVEFfRVJST1I6DQor
CQkJc3ByaW50ZihidWYsICJCWl9EQVRBX0VSUk9SIik7DQorCQkJYnJlYWs7DQorCQljYXNlIEJa
X0RBVEFfRVJST1JfTUFHSUM6DQorCQkJc3ByaW50ZihidWYsICJCWl9EQVRBX0VSUk9SX01BR0lD
Iik7DQorCQkJYnJlYWs7DQorCQljYXNlIEJaX0lPX0VSUk9SOg0KKwkJCXNwcmludGYoYnVmLCAi
QlpfSU9fRVJST1IiKTsNCisJCQlicmVhazsNCisJCWNhc2UgQlpfVU5FWFBFQ1RFRF9FT0Y6DQor
CQkJc3ByaW50ZihidWYsICJCWl9VTkVYUEVDVEVEX0VPRiIpOw0KKwkJCWJyZWFrOw0KKwkJY2Fz
ZSBCWl9PVVRCVUZGX0ZVTEw6DQorCQkJc3ByaW50ZihidWYsICJCWl9PVVRCVUZGX0ZVTEwiKTsN
CisJCQlicmVhazsNCisJCWNhc2UgQlpfQ09ORklHX0VSUk9SOg0KKwkJCXNwcmludGYoYnVmLCAi
QlpfQ09ORklHX0VSUk9SIik7DQorCQkJYnJlYWs7DQorCQlkZWZhdWx0Og0KKwkJCXNwcmludGYo
YnVmLCAiYnogdW5rbm93biAoJWQpIiwgY29kZSk7DQorCQkJYnJlYWs7DQorCX0NCisJcmV0dXJu
IGJ1ZjsNCit9DQorDQorc3RhdGljIHZvaWQgaGFuZGxlQlpFcnJvcihzdHJ1Y3QgemlvcnhfY2Fs
bCAqemNhbGwsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIGludCBjb2RlKQ0KK3sNCisJY2hhciAqYnpF
cnJvcjsNCisNCisJYnpFcnJvcj16aW9yeF9iekVycm9yKGNvZGUpOw0KKwlpZiAoYnpFcnJvciE9
TlVMTCkNCisJew0KKwkJaGFuZGxlRXJyb3IoemNhbGwsIG1lc3NhZ2UsIGJ6RXJyb3IpOw0KKwkJ
ZnJlZShiekVycm9yKTsNCisJfSBlbHNlIHsNCisJCWhhbmRsZUVycm9yKHpjYWxsLCBtZXNzYWdl
LCAibWVtb3J5IGFsbG9jYXRpb24gZXJyb24iKTsNCisJfQ0KK30NCisNCisNCitzdGF0aWMgaW50
IHppb3J4QmVnaW4oc3RydWN0IHJ4X2NhbGwgKmNhbGwsIGludCBjb21wcmVzc2lvbiwgaW50IGxl
dmVsLCBzdHJ1Y3QgemlvcnhfY2FsbCAqemNhbGwsIGludCB0b1dyaXRlKQ0KK3sNCisJaW50IGVy
cjsNCisJY2hhciAqYnpFcnJvcjsNCisNCisJaWYgKGNhbGw9PU5VTEwgfHwgemNhbGw9PU5VTEwp
DQorCXsNCisJCWhhbmRsZUVycm9yKHpjYWxsLCAiemlvcnhCZWdpbiIsICJOVUxMIHBhcmFtcyIp
Ow0KKwkJcmV0dXJuIFpJT1JYX0ZBSUw7DQorCX0NCisNCisJaWYgKGNvbXByZXNzaW9uPDAgfHwg
Y29tcHJlc3Npb24+MikNCisJew0KKwkJaGFuZGxlRXJyb3IoemNhbGwsICJ6aW9yeEJlZ2luIiwg
ImludmFsaWQgcGFyYW06IGNvbXByZXNzaW9uIHR5cGUgbm90IHN1cHBvcnRlZCAtIG9ubHkgezAs
IDEsIDJ9Iik7DQorCQlyZXR1cm4gWklPUlhfRkFJTDsNCisJfQ0KKw0KKwltZW1zZXQoemNhbGws
IDAsIHNpemVvZihzdHJ1Y3QgemlvcnhfY2FsbCkpOw0KKw0KKwl6Y2FsbC0+Y29tcHJlc3Npb24g
PSBjb21wcmVzc2lvbjsgLy8wPWRvbid0IGNvbXByZXNzLCAxPWNvbXByZXNzDQorCXpjYWxsLT5j
YWxsID0gY2FsbDsNCisJaWYgKGNvbXByZXNzaW9uIT1aSU9SWF9DT01QUkVTU19OT05FKQ0KKwl7
DQorCQlpZiAoY29tcHJlc3Npb249PVpJT1JYX0NPTVBSRVNTX1opDQorCQkJemNhbGwtPnN0cmVh
bSA9ICh2b2lkICopbWFsbG9jKHNpemVvZih6X3N0cmVhbSkpOw0KKwkJZWxzZQ0KKwkJCXpjYWxs
LT5zdHJlYW0gPSAodm9pZCAqKW1hbGxvYyhzaXplb2YoYnpfc3RyZWFtKSk7DQorDQorCQlpZiAo
emNhbGwtPnN0cmVhbT09TlVMTCkNCisJCXsNCisJCQloYW5kbGVFcnJvcih6Y2FsbCwgInppb3J4
QmVnaW4iLCAibWVtb3J5IGFsbG9jYXRpb24gZXJyb24iKTsNCisJCQlnb3RvIGZhaWw7DQorCQl9
DQorDQorCQlpZiAodG9Xcml0ZSkNCisJCQl6Y2FsbC0+YnVmID0gKGNoYXIgKiltYWxsb2MoWklP
UlhfT1VUX0JVRlNJWkUpOw0KKwkJZWxzZQ0KKwkJCXpjYWxsLT5idWYgPSAoY2hhciAqKW1hbGxv
YyhaSU9SWF9JTl9CVUZTSVpFKTsNCisJCWlmICh6Y2FsbC0+YnVmPT1OVUxMKQ0KKwkJew0KKwkJ
CWhhbmRsZUVycm9yKHpjYWxsLCAiemlvcnhCZWdpbiIsICJtZW1vcnkgYWxsb2NhdGlvbiBlcnJv
biIpOw0KKwkJCWdvdG8gZmFpbDsNCisJCX0NCisNCisJCXpjYWxsLT5sZXZlbCA9IGxldmVsOwkv
L2NvbXByZXNzaW9uIGxldmVsDQorDQorCQlpZiAoY29tcHJlc3Npb249PVpJT1JYX0NPTVBSRVNT
X1opDQorCQl7DQorCQkJKCh6X3N0cmVhbSAqKSh6Y2FsbC0+c3RyZWFtKSktPnphbGxvYyA9IChh
bGxvY19mdW5jKTA7DQorCQkJKCh6X3N0cmVhbSAqKSh6Y2FsbC0+c3RyZWFtKSktPnpmcmVlID0g
KGZyZWVfZnVuYykwOw0KKwkJCSgoel9zdHJlYW0gKikoemNhbGwtPnN0cmVhbSkpLT5vcGFxdWUg
PSAodm9pZHBmKTA7DQorCQl9IGVsc2Ugew0KKwkJCSgoYnpfc3RyZWFtICopKHpjYWxsLT5zdHJl
YW0pKS0+YnphbGxvYyA9IE5VTEw7DQorCQkJKChiel9zdHJlYW0gKikoemNhbGwtPnN0cmVhbSkp
LT5iemZyZWUgPSBOVUxMOw0KKwkJCSgoYnpfc3RyZWFtICopKHpjYWxsLT5zdHJlYW0pKS0+b3Bh
cXVlID0gTlVMTDsNCisJCX0NCisNCisJCWlmICh0b1dyaXRlPT1aSU9SWF9UUlVFKQ0KKwkJew0K
KwkJCWlmIChjb21wcmVzc2lvbj09WklPUlhfQ09NUFJFU1NfWikNCisJCQl7DQorCQkJCWVyciA9
IGRlZmxhdGVJbml0KCh6X3N0cmVhbSAqKSh6Y2FsbC0+c3RyZWFtKSwgbGV2ZWwpOw0KKwkJCQlp
ZiAoZXJyIT1aX09LKQ0KKwkJCQl7DQorCQkJCQloYW5kbGVFcnJvcih6Y2FsbCwgImRlZmxhdGVJ
bml0IGVycm9yIiwgekVycm9yKGVycikpOw0KKwkJCQkJZ290byBmYWlsOw0KKwkJCQl9DQorCQkJ
CSgoel9zdHJlYW0gKikoemNhbGwtPnN0cmVhbSkpLT5uZXh0X291dCA9IChCeXRlZiAqKXpjYWxs
LT5idWY7DQorCQkJCSgoel9zdHJlYW0gKikoemNhbGwtPnN0cmVhbSkpLT5hdmFpbF9vdXQgPSBa
SU9SWF9PVVRfQlVGU0laRTsNCisJCQl9IGVsc2Ugew0KKwkJCQllcnIgPSBCWjJfYnpDb21wcmVz
c0luaXQoKGJ6X3N0cmVhbSAqKSh6Y2FsbC0+c3RyZWFtKSwgbGV2ZWwsIDAsIDApOw0KKwkJCQlp
ZiAoZXJyIT1CWl9PSykNCisJCQkJew0KKwkJCQkJaGFuZGxlQlpFcnJvcih6Y2FsbCwgIkJaMl9i
ekNvbXByZXNzSW5pdCBlcnJvciIsIGVycik7DQorCQkJCQlnb3RvIGZhaWw7DQorCQkJCX0NCisJ
CQkJKChiel9zdHJlYW0gKikoemNhbGwtPnN0cmVhbSkpLT5uZXh0X291dCA9IChCeXRlZiAqKXpj
YWxsLT5idWY7DQorCQkJCSgoYnpfc3RyZWFtICopKHpjYWxsLT5zdHJlYW0pKS0+YXZhaWxfb3V0
ID0gWklPUlhfT1VUX0JVRlNJWkU7DQorCQkJfQ0KKwkJfSBlbHNlIHsgLy90byByZWFkOg0KKwkJ
CWlmIChjb21wcmVzc2lvbj09WklPUlhfQ09NUFJFU1NfWikNCisJCQl7DQorCQkJCWVyciA9IGlu
ZmxhdGVJbml0KCh6X3N0cmVhbSAqKSh6Y2FsbC0+c3RyZWFtKSk7DQorCQkJCWlmIChlcnIhPVpf
T0spDQorCQkJCXsNCisJCQkJCWhhbmRsZUVycm9yKHpjYWxsLCAiaW5mbGF0ZUluaXQgZXJyb3Ii
LCB6RXJyb3IoZXJyKSk7DQorCQkJCQlnb3RvIGZhaWw7DQorCQkJCX0NCisJCQkJKCh6X3N0cmVh
bSAqKSh6Y2FsbC0+c3RyZWFtKSktPm5leHRfaW4gPSAoQnl0ZWYgKil6Y2FsbC0+YnVmOw0KKwkJ
CQkoKHpfc3RyZWFtICopKHpjYWxsLT5zdHJlYW0pKS0+YXZhaWxfaW4gPSAwOw0KKwkJCX0gZWxz
ZSB7DQorCQkJCWVyciA9IEJaMl9iekRlY29tcHJlc3NJbml0KChiel9zdHJlYW0gKikoemNhbGwt
PnN0cmVhbSksIDAsIDApOw0KKwkJCQlpZiAoZXJyIT1CWl9PSykNCisJCQkJew0KKwkJCQkJaGFu
ZGxlQlpFcnJvcih6Y2FsbCwgIkJaMl9iekRlY29tcHJlc3NJbml0IGVycm9yIiwgZXJyKTsNCisJ
CQkJCWdvdG8gZmFpbDsNCisJCQkJfQ0KKwkJCQkoKGJ6X3N0cmVhbSAqKSh6Y2FsbC0+c3RyZWFt
KSktPm5leHRfaW4gPSAoY2hhciAqKXpjYWxsLT5idWY7DQorCQkJCSgoYnpfc3RyZWFtICopKHpj
YWxsLT5zdHJlYW0pKS0+YXZhaWxfaW4gPSAwOw0KKwkJCX0NCisNCisJCQl6Y2FsbC0+Z290X3Jl
YWRfcnhfZW5kID0gWklPUlhfRkFMU0U7DQorCQkJemNhbGwtPmdvdF9yZWFkX3pzdHJlYW1fZW5k
ID0gWklPUlhfRkFMU0U7DQorCQl9DQorCX0NCisNCisJcmV0dXJuIFpJT1JYX09LOw0KKw0KK2Zh
aWw6DQorCWlmICh6Y2FsbC0+c3RyZWFtIT1OVUxMKQ0KKwl7DQorCQlmcmVlKHpjYWxsLT5zdHJl
YW0pOw0KKwkJemNhbGwtPnN0cmVhbSA9IE5VTEw7DQorCX0NCisNCisJaWYgKHpjYWxsLT5idWYh
PU5VTEwpDQorCXsNCisJCWZyZWUoemNhbGwtPmJ1Zik7DQorCQl6Y2FsbC0+YnVmID0gTlVMTDsN
CisJfQ0KKw0KKwlyZXR1cm4gWklPUlhfRkFJTDsNCit9DQorDQoraW50IHppb3J4QmVnaW5Xcml0
ZShzdHJ1Y3QgcnhfY2FsbCAqY2FsbCwgaW50IHVzZV9jb21wcmVzc2lvbiwgaW50IGxldmVsLCBz
dHJ1Y3QgemlvcnhfY2FsbCAqemNhbGwpDQorew0KKwlyZXR1cm4gemlvcnhCZWdpbihjYWxsLCB1
c2VfY29tcHJlc3Npb24sIGxldmVsLCB6Y2FsbCwgWklPUlhfVFJVRSk7DQorfQ0KKw0KK3N0YXRp
YyBpbnQgemlvcnhXcml0ZVooc3RydWN0IHppb3J4X2NhbGwgKnpjYWxsLCBjaGFyICpidWYsIGlu
dCBuYnl0ZXMpDQorew0KKwlpbnQgcmVzOw0KKwl6X3N0cmVhbSAqc3RyZWFtOw0KKw0KKwlzdHJl
YW0gPSAoel9zdHJlYW0gKikoemNhbGwtPnN0cmVhbSk7DQorDQorCXN0cmVhbS0+bmV4dF9pbiA9
IChCeXRlZiAqKWJ1ZjsNCisJc3RyZWFtLT5hdmFpbF9pbiA9IG5ieXRlczsNCisJd2hpbGUoc3Ry
ZWFtLT5hdmFpbF9pbiE9MCkNCisJew0KKwkJaWYgKHN0cmVhbS0+YXZhaWxfb3V0PT0wKQ0KKwkJ
ew0KKwkJCSNpZmRlZiBaSU9SWF9ERUJVRw0KKwkJCQlmcHJpbnRmKHN0ZGVyciwgInJ4X1dyaXRl
KCVkKVxuIiwgWklPUlhfT1VUX0JVRlNJWkUpOw0KKwkJCSNlbmRpZg0KKwkJCXJlcyA9IHJ4X1dy
aXRlKHpjYWxsLT5jYWxsLCAoY2hhciAqKSh6Y2FsbC0+YnVmKSwgWklPUlhfT1VUX0JVRlNJWkUp
Ow0KKwkJCWlmIChyZXMhPVpJT1JYX09VVF9CVUZTSVpFKQ0KKwkJCXsNCisJCQkJaGFuZGxlRXJy
b3IoemNhbGwsICJ6aW9yeFdyaXRlIiwgInJ4X1dyaXRlIGZhaWxlZCIpOw0KKwkJCQlyZXR1cm4g
WklPUlhfRkFJTDsNCisJCQl9DQorDQorCQkJc3RyZWFtLT5uZXh0X291dCA9IChCeXRlZiAqKSh6
Y2FsbC0+YnVmKTsNCisJCQlzdHJlYW0tPmF2YWlsX291dCA9IFpJT1JYX09VVF9CVUZTSVpFOw0K
KwkJfQ0KKwkJI2lmZGVmIFpJT1JYX0RFQlVHDQorCQkJZnByaW50ZihzdGRlcnIsICJhdmFpbF9p
bjolZCwgYXZhaWxfb3V0OiVkXG4iLA0KKwkJCQlzdHJlYW0tPmF2YWlsX2luLCBzdHJlYW0tPmF2
YWlsX291dCk7DQorCQkjZW5kaWYNCisJCXJlcyA9IGRlZmxhdGUoc3RyZWFtLCBaX05PX0ZMVVNI
KTsNCisJCWlmIChyZXMhPVpfT0spDQorCQl7DQorCQkJaGFuZGxlRXJyb3IoemNhbGwsICJkZWZs
YXRlIGVycm9yIiwgekVycm9yKHJlcykpOw0KKwkJCXJldHVybiBaSU9SWF9GQUlMOw0KKwkJfQ0K
Kwl9DQorCXJldHVybiBuYnl0ZXM7DQorfQ0KKw0KK3N0YXRpYyBpbnQgemlvcnhXcml0ZUJaMihz
dHJ1Y3QgemlvcnhfY2FsbCAqemNhbGwsIGNoYXIgKmJ1ZiwgaW50IG5ieXRlcykNCit7DQorCWlu
dCByZXM7DQorCWJ6X3N0cmVhbSAqc3RyZWFtOw0KKw0KKwlzdHJlYW0gPSAoYnpfc3RyZWFtICop
KHpjYWxsLT5zdHJlYW0pOw0KKw0KKwlzdHJlYW0tPm5leHRfaW4gPSAoY2hhciAqKWJ1ZjsNCisJ
c3RyZWFtLT5hdmFpbF9pbiA9IG5ieXRlczsNCisJd2hpbGUoc3RyZWFtLT5hdmFpbF9pbiE9MCkN
CisJew0KKwkJaWYgKHN0cmVhbS0+YXZhaWxfb3V0PT0wKQ0KKwkJew0KKwkJCSNpZmRlZiBaSU9S
WF9ERUJVRw0KKwkJCQlmcHJpbnRmKHN0ZGVyciwgInJ4X1dyaXRlKCVkKVxuIiwgWklPUlhfT1VU
X0JVRlNJWkUpOw0KKwkJCSNlbmRpZg0KKwkJCXJlcyA9IHJ4X1dyaXRlKHpjYWxsLT5jYWxsLCAo
Y2hhciAqKSh6Y2FsbC0+YnVmKSwgWklPUlhfT1VUX0JVRlNJWkUpOw0KKwkJCWlmIChyZXMhPVpJ
T1JYX09VVF9CVUZTSVpFKQ0KKwkJCXsNCisJCQkJaGFuZGxlRXJyb3IoemNhbGwsICJ6aW9yeFdy
aXRlIiwgInJ4X1dyaXRlIGZhaWxlZCIpOw0KKwkJCQlyZXR1cm4gWklPUlhfRkFJTDsNCisJCQl9
DQorDQorCQkJc3RyZWFtLT5uZXh0X291dCA9IChjaGFyICopKHpjYWxsLT5idWYpOw0KKwkJCXN0
cmVhbS0+YXZhaWxfb3V0ID0gWklPUlhfT1VUX0JVRlNJWkU7DQorCQl9DQorCQkjaWZkZWYgWklP
UlhfREVCVUcNCisJCQlmcHJpbnRmKHN0ZGVyciwgImF2YWlsX2luOiVkLCBhdmFpbF9vdXQ6JWRc
biIsDQorCQkJCXN0cmVhbS0+YXZhaWxfaW4sIHN0cmVhbS0+YXZhaWxfb3V0KTsNCisJCSNlbmRp
Zg0KKwkJcmVzID0gQloyX2J6Q29tcHJlc3Moc3RyZWFtLCBCWl9SVU4pOw0KKwkJaWYgKHJlcyE9
QlpfUlVOX09LKQ0KKwkJew0KKwkJCWhhbmRsZUJaRXJyb3IoemNhbGwsICJCWjJfYnpDb21wcmVz
cyBlcnJvciIsIHJlcyk7DQorCQkJcmV0dXJuIFpJT1JYX0ZBSUw7DQorCQl9DQorCX0NCisJcmV0
dXJuIG5ieXRlczsNCit9DQorDQoraW50IHppb3J4V3JpdGUoc3RydWN0IHppb3J4X2NhbGwgKnpj
YWxsLCBjaGFyICpidWYsIGludCBuYnl0ZXMpDQorew0KKwlpbnQgcmVzOw0KKw0KKwlpZiAoemNh
bGw9PU5VTEwpDQorCXsNCisJCWhhbmRsZUVycm9yKHpjYWxsLCAiemlvcnhXcml0ZSIsICJOVUxM
IGVycm9yIik7DQorCQlyZXR1cm4gWklPUlhfRkFJTDsNCisJfQ0KKw0KKwkjaWZkZWYgWklPUlhf
REVCVUcNCisJCWZwcmludGYoc3RkZXJyLCAiemlvcnhXcml0ZS9uYnl0ZXM6ICVkXG4iLCBuYnl0
ZXMpOw0KKwkjZW5kaWYNCisNCisJc3dpdGNoKHpjYWxsLT5jb21wcmVzc2lvbikNCisJew0KKwkJ
Y2FzZSBaSU9SWF9DT01QUkVTU19OT05FOg0KKwkJCXJlcyA9IHJ4X1dyaXRlKHpjYWxsLT5jYWxs
LCBidWYsIG5ieXRlcyk7DQorCQkJYnJlYWs7DQorCQljYXNlIFpJT1JYX0NPTVBSRVNTX1o6DQor
CQkJcmVzID0gemlvcnhXcml0ZVooemNhbGwsIGJ1ZiwgbmJ5dGVzKTsNCisJCQlicmVhazsNCisJ
CWNhc2UgWklPUlhfQ09NUFJFU1NfQlo6DQorCQkJcmVzID0gemlvcnhXcml0ZUJaMih6Y2FsbCwg
YnVmLCBuYnl0ZXMpOw0KKwkJCWJyZWFrOw0KKwkJZGVmYXVsdDoNCisJCQloYW5kbGVFcnJvcih6
Y2FsbCwgInppb3J4V3JpdGUiLCAidW5rbm93biB0eXBlIG9mIGNvbXByZXNzaW9uIik7DQorCQkJ
cmVzID0gWklPUlhfRkFJTDsNCisJCQlicmVhazsNCisJfQ0KKwlyZXR1cm4gcmVzOw0KK30NCisN
CitzdGF0aWMgaW50IHppb3J4RW5kV3JpdGVaKHN0cnVjdCB6aW9yeF9jYWxsICp6Y2FsbCkNCit7
DQorCWludCByZXM7DQorCWludCByZW1haW5pbmc7DQorCXpfc3RyZWFtICpzdHJlYW07DQorDQor
CXN0cmVhbSA9ICh6X3N0cmVhbSAqKSh6Y2FsbC0+c3RyZWFtKTsNCisNCisJcmVzID0gWl9PSzsN
CisJd2hpbGUocmVzIT1aX1NUUkVBTV9FTkQpDQorCXsNCisJCWlmIChzdHJlYW0tPmF2YWlsX291
dD09MCkNCisJCXsNCisJCQkjaWZkZWYgWklPUlhfREVCVUcNCisJCQkJZnByaW50ZihzdGRlcnIs
ICJyeF9Xcml0ZSglZClcbiIsIFpJT1JYX09VVF9CVUZTSVpFKTsNCisJCQkjZW5kaWYNCisJCQly
ZXMgPSByeF9Xcml0ZSh6Y2FsbC0+Y2FsbCwgKGNoYXIgKikoemNhbGwtPmJ1ZiksIFpJT1JYX09V
VF9CVUZTSVpFKTsNCisJCQlpZiAocmVzIT1aSU9SWF9PVVRfQlVGU0laRSkNCisJCQl7DQorCQkJ
CWhhbmRsZUVycm9yKHpjYWxsLCAiemlvcnhFbmRXcml0ZS96aW9yeFdyaXRlIiwgInJ4X1dyaXRl
IGZhaWxlZCIpOw0KKwkJCQlkZWZsYXRlRW5kKHN0cmVhbSk7DQorCQkJCXJldHVybiBaSU9SWF9G
QUlMOw0KKwkJCX0NCisJCQlzdHJlYW0tPm5leHRfb3V0ID0gKEJ5dGVmICopKHpjYWxsLT5idWYp
Ow0KKwkJCXN0cmVhbS0+YXZhaWxfb3V0ID0gWklPUlhfT1VUX0JVRlNJWkU7DQorCQl9DQorCQkj
aWZkZWYgWklPUlhfREVCVUcNCisJCQlmcHJpbnRmKHN0ZGVyciwgImF2YWlsX2luOiVkLCBhdmFp
bF9vdXQ6JWRcbiIsDQorCQkJCXN0cmVhbS0+YXZhaWxfaW4sIHN0cmVhbS0+YXZhaWxfb3V0KTsN
CisJCSNlbmRpZg0KKwkJcmVzID0gZGVmbGF0ZShzdHJlYW0sIFpfRklOSVNIKTsNCisJCWlmIChy
ZXMhPVpfU1RSRUFNX0VORCAmJiByZXMhPVpfT0spDQorCQl7DQorCQkJaGFuZGxlRXJyb3IoemNh
bGwsICJ6aW9yeEVuZFdyaXRlL2RlZmxhdGUgZXJyb3IiLCB6RXJyb3IocmVzKSk7DQorCQkJZGVm
bGF0ZUVuZChzdHJlYW0pOw0KKwkJCXJldHVybiBaSU9SWF9GQUlMOw0KKwkJfQ0KKwl9DQorDQor
CS8vc2VuZCB0aGUgcmVtYWluaW5nIGJ1ZmZlciBpZiBpdCdzIG5vdCBlbXB0eQ0KKwlpZiAoc3Ry
ZWFtLT5hdmFpbF9vdXQ8WklPUlhfT1VUX0JVRlNJWkUpDQorCXsNCisJCXJlbWFpbmluZyA9IFpJ
T1JYX09VVF9CVUZTSVpFIC0gc3RyZWFtLT5hdmFpbF9vdXQ7DQorCQkjaWZkZWYgWklPUlhfREVC
VUcNCisJCQlmcHJpbnRmKHN0ZGVyciwgInJ4X1dyaXRlKCVkKVxuIiwgcmVtYWluaW5nKTsNCisJ
CSNlbmRpZg0KKwkJcmVzID0gcnhfV3JpdGUoemNhbGwtPmNhbGwsIChjaGFyICopKHpjYWxsLT5i
dWYpLCByZW1haW5pbmcpOw0KKwkJaWYgKHJlcyE9cmVtYWluaW5nKQ0KKwkJew0KKwkJCWhhbmRs
ZUVycm9yKHpjYWxsLCAiemlvcnhFbmRXcml0ZS9yeFdyaXRlIiwgInJ4X1dyaXRlWzJdIGZhaWxl
ZCIpOw0KKwkJCWRlZmxhdGVFbmQoc3RyZWFtKTsNCisJCQlyZXR1cm4gWklPUlhfRkFJTDsNCisJ
CX0NCisJfQ0KKw0KKwlyZXMgPSBkZWZsYXRlRW5kKHN0cmVhbSk7DQorCWlmIChyZXMhPVpfT0sp
DQorCXsNCisJCWhhbmRsZUVycm9yKHpjYWxsLCAiZGVmbGF0ZUVuZCBlcnJvciIsIHpFcnJvcihy
ZXMpKTsNCisJCXJldHVybiBaSU9SWF9GQUlMOw0KKwl9DQorDQorCXJldHVybiBaSU9SWF9PSzsN
Cit9DQorDQorc3RhdGljIGludCB6aW9yeEVuZFdyaXRlQloyKHN0cnVjdCB6aW9yeF9jYWxsICp6
Y2FsbCkNCit7DQorCWludCByZXM7DQorCWludCByZW1haW5pbmc7DQorCWJ6X3N0cmVhbSAqc3Ry
ZWFtOw0KKw0KKwlzdHJlYW0gPSAoYnpfc3RyZWFtICopKHpjYWxsLT5zdHJlYW0pOw0KKw0KKwly
ZXMgPSBCWl9PSzsNCisJd2hpbGUocmVzIT1CWl9TVFJFQU1fRU5EKQ0KKwl7DQorCQlpZiAoc3Ry
ZWFtLT5hdmFpbF9vdXQ9PTApDQorCQl7DQorCQkJI2lmZGVmIFpJT1JYX0RFQlVHDQorCQkJCWZw
cmludGYoc3RkZXJyLCAicnhfV3JpdGUoJWQpXG4iLCBaSU9SWF9PVVRfQlVGU0laRSk7DQorCQkJ
I2VuZGlmDQorCQkJcmVzID0gcnhfV3JpdGUoemNhbGwtPmNhbGwsIChjaGFyICopKHpjYWxsLT5i
dWYpLCBaSU9SWF9PVVRfQlVGU0laRSk7DQorCQkJaWYgKHJlcyE9WklPUlhfT1VUX0JVRlNJWkUp
DQorCQkJew0KKwkJCQloYW5kbGVFcnJvcih6Y2FsbCwgInppb3J4RW5kV3JpdGUvemlvcnhXcml0
ZSIsICJyeF9Xcml0ZSBmYWlsZWQiKTsNCisJCQkJQloyX2J6Q29tcHJlc3NFbmQoc3RyZWFtKTsN
CisJCQkJcmV0dXJuIFpJT1JYX0ZBSUw7DQorCQkJfQ0KKwkJCXN0cmVhbS0+bmV4dF9vdXQgPSAo
Y2hhciAqKSh6Y2FsbC0+YnVmKTsNCisJCQlzdHJlYW0tPmF2YWlsX291dCA9IFpJT1JYX09VVF9C
VUZTSVpFOw0KKwkJfQ0KKwkJI2lmZGVmIFpJT1JYX0RFQlVHDQorCQkJZnByaW50ZihzdGRlcnIs
ICJhdmFpbF9pbjolZCwgYXZhaWxfb3V0OiVkXG4iLA0KKwkJCQlzdHJlYW0tPmF2YWlsX2luLCBz
dHJlYW0tPmF2YWlsX291dCk7DQorCQkjZW5kaWYNCisJCXJlcyA9IEJaMl9iekNvbXByZXNzKHN0
cmVhbSwgQlpfRklOSVNIKTsNCisJCWlmIChyZXMhPUJaX1NUUkVBTV9FTkQgJiYgcmVzIT1CWl9P
SyAmJiByZXMhPUJaX0ZJTklTSF9PSykNCisJCXsNCisJCQloYW5kbGVCWkVycm9yKHpjYWxsLCAi
emlvcnhFbmRXcml0ZS9CWjJfYnpDb21wcmVzcyBlcnJvciIsIHJlcyk7DQorCQkJQloyX2J6Q29t
cHJlc3NFbmQoc3RyZWFtKTsNCisJCQlyZXR1cm4gWklPUlhfRkFJTDsNCisJCX0NCisJfQ0KKw0K
KwkvL3NlbmQgdGhlIHJlbWFpbmluZyBidWZmZXIgaWYgaXQncyBub3QgZW1wdHkNCisJaWYgKHN0
cmVhbS0+YXZhaWxfb3V0PFpJT1JYX09VVF9CVUZTSVpFKQ0KKwl7DQorCQlyZW1haW5pbmcgPSBa
SU9SWF9PVVRfQlVGU0laRSAtIHN0cmVhbS0+YXZhaWxfb3V0Ow0KKwkJI2lmZGVmIFpJT1JYX0RF
QlVHDQorCQkJZnByaW50ZihzdGRlcnIsICJyeF9Xcml0ZSglZClcbiIsIHJlbWFpbmluZyk7DQor
CQkjZW5kaWYNCisJCXJlcyA9IHJ4X1dyaXRlKHpjYWxsLT5jYWxsLCAoY2hhciAqKSh6Y2FsbC0+
YnVmKSwgcmVtYWluaW5nKTsNCisJCWlmIChyZXMhPXJlbWFpbmluZykNCisJCXsNCisJCQloYW5k
bGVFcnJvcih6Y2FsbCwgInppb3J4RW5kV3JpdGUvcnhXcml0ZSIsICJyeF9Xcml0ZVsyXSBmYWls
ZWQiKTsNCisJCQlCWjJfYnpDb21wcmVzc0VuZChzdHJlYW0pOw0KKwkJCXJldHVybiBaSU9SWF9G
QUlMOw0KKwkJfQ0KKwl9DQorDQorCXJlcyA9IEJaMl9iekNvbXByZXNzRW5kKHN0cmVhbSk7DQor
CWlmIChyZXMhPUJaX09LKQ0KKwl7DQorCQloYW5kbGVFcnJvcih6Y2FsbCwgImRlZmxhdGVFbmQg
ZXJyb3IiLCB6RXJyb3IocmVzKSk7DQorCQlyZXR1cm4gWklPUlhfRkFJTDsNCisJfQ0KKw0KKwly
ZXR1cm4gWklPUlhfT0s7DQorfQ0KKw0KK2ludCB6aW9yeEVuZFdyaXRlKHN0cnVjdCB6aW9yeF9j
YWxsICp6Y2FsbCkNCit7DQorCWludCByZXM7DQorDQorCWlmICh6Y2FsbD09TlVMTCkNCisJew0K
KwkJaGFuZGxlRXJyb3IoemNhbGwsICJ6aW9yeEVuZFdyaXRlIiwgIk5VTEwgZXJyb3IiKTsNCisJ
CXJldHVybiBaSU9SWF9GQUlMOw0KKwl9DQorDQorCSNpZmRlZiBaSU9SWF9ERUJVRw0KKwkJZnBy
aW50ZihzdGRlcnIsICJlbmQgd3JpdGU6XG4iKTsNCisJI2VuZGlmDQorDQorCXN3aXRjaCh6Y2Fs
bC0+Y29tcHJlc3Npb24pDQorCXsNCisJCWNhc2UgWklPUlhfQ09NUFJFU1NfTk9ORToNCisJCQly
ZXMgPSBaSU9SWF9PSzsNCisJCQlicmVhazsNCisJCWNhc2UgWklPUlhfQ09NUFJFU1NfWjoNCisJ
CQlyZXMgPSB6aW9yeEVuZFdyaXRlWih6Y2FsbCk7DQorCQkJYnJlYWs7DQorCQljYXNlIFpJT1JY
X0NPTVBSRVNTX0JaOg0KKwkJCXJlcyA9IHppb3J4RW5kV3JpdGVCWjIoemNhbGwpOw0KKwkJCWJy
ZWFrOw0KKwkJZGVmYXVsdDoNCisJCQloYW5kbGVFcnJvcih6Y2FsbCwgInppb3J4RW5kV3JpdGUi
LCAidW5rbm93biB0eXBlIG9mIGNvbXByZXNzaW9uIik7DQorCQkJcmVzID0gWklPUlhfRkFJTDsN
CisJCQlicmVhazsNCisJfQ0KKw0KKwlpZiAoemNhbGwtPmJ1ZiE9TlVMTCkNCisJew0KKwkJZnJl
ZSh6Y2FsbC0+YnVmKTsNCisJCXpjYWxsLT5idWYgPSBOVUxMOw0KKwl9DQorDQorCWlmICh6Y2Fs
bC0+c3RyZWFtIT1OVUxMKQ0KKwl7DQorCQlmcmVlKHpjYWxsLT5zdHJlYW0pOw0KKwkJemNhbGwt
PnN0cmVhbSA9IE5VTEw7DQorCX0NCisNCisJcmV0dXJuIFpJT1JYX09LOw0KK30NCisNCitpbnQg
emlvcnhCZWdpblJlYWQoc3RydWN0IHJ4X2NhbGwgKmNhbGwsIGludCBjb21wcmVzc2lvbiwgaW50
IGxldmVsLCBzdHJ1Y3QgemlvcnhfY2FsbCAqemNhbGwpDQorew0KKwlyZXR1cm4gemlvcnhCZWdp
bihjYWxsLCBjb21wcmVzc2lvbiwgbGV2ZWwsIHpjYWxsLCBaSU9SWF9GQUxTRSk7DQorfQ0KKw0K
K3N0YXRpYyBpbnQgemlvcnhSZWFkWihzdHJ1Y3QgemlvcnhfY2FsbCAqemNhbGwsIGNoYXIgKmJ1
ZiwgaW50IG5ieXRlcykNCit7DQorCWludCByZXM7DQorCXpfc3RyZWFtICpzdHJlYW07DQorDQor
CXN0cmVhbSA9ICh6X3N0cmVhbSAqKSh6Y2FsbC0+c3RyZWFtKTsNCisNCisJc3RyZWFtLT5uZXh0
X291dCA9IChCeXRlZiAqKWJ1ZjsNCisJc3RyZWFtLT5hdmFpbF9vdXQgPSBuYnl0ZXM7DQorCXdo
aWxlKHN0cmVhbS0+YXZhaWxfb3V0IT0wKQ0KKwl7DQorCQlpZiAoc3RyZWFtLT5hdmFpbF9pbj09
MCkNCisJCXsNCisJCQlpZiAoemNhbGwtPmdvdF9yZWFkX3J4X2VuZD09WklPUlhfRkFMU0UpDQor
CQkJew0KKwkJCQlyZXMgPSByeF9SZWFkKHpjYWxsLT5jYWxsLCB6Y2FsbC0+YnVmLCBaSU9SWF9J
Tl9CVUZTSVpFKTsNCisJCQkJaWYgKHJlcz4wKQ0KKwkJCQl7DQorCQkJCQlzdHJlYW0tPm5leHRf
aW4gPSAoQnl0ZWYgKil6Y2FsbC0+YnVmOw0KKwkJCQkJc3RyZWFtLT5hdmFpbF9pbiA9IHJlczsN
CisJCQkJfSBlbHNlIHsNCisJCQkJCXpjYWxsLT5nb3RfcmVhZF9yeF9lbmQgPSBaSU9SWF9UUlVF
Ow0KKwkJCQkJI2lmZGVmIFpJT1JYX0RFQlVHDQorCQkJCQkJZnByaW50ZihzdGRlcnIsICJnb3Qg
cnggc3RyZWFtIGVuZFxuIik7DQorCQkJCQkjZW5kaWYNCisJCQkJfQ0KKwkJCX0NCisNCisJCQlp
ZiAoemNhbGwtPmdvdF9yZWFkX3J4X2VuZD09WklPUlhfVFJVRSkNCisJCQl7DQorCQkJCWlmICh6
Y2FsbC0+Z290X3JlYWRfenN0cmVhbV9lbmQ9PVpJT1JYX1RSVUUpDQorCQkJCQlicmVhazsNCisN
CisJCQkJcmVzID0gWl9PSzsNCisJCQkJd2hpbGUocmVzIT1aX1NUUkVBTV9FTkQgJiYgc3RyZWFt
LT5hdmFpbF9vdXQhPTApDQorCQkJCXsNCisJCQkJCSNpZmRlZiBaSU9SWF9ERUJVRw0KKwkJCQkJ
CWZwcmludGYoc3RkZXJyLCAiYXZhaWxfaW46JWQsIGF2YWlsX291dDolZFxuIiwNCisJCQkJCQlz
dHJlYW0tPmF2YWlsX2luLCBzdHJlYW0tPmF2YWlsX291dCk7DQorCQkJCQkjZW5kaWYNCisJCQkJ
CXJlcyA9IGluZmxhdGUoc3RyZWFtLCBaX0ZJTklTSCk7DQorCQkJCQlpZiAocmVzIT1aX09LICYm
IHJlcyE9Wl9TVFJFQU1fRU5EKQ0KKwkJCQkJew0KKwkJCQkJCWhhbmRsZUVycm9yKHpjYWxsLCAi
aW5mbGF0ZSBmaW5pc2ggZXJyb3IiLCB6RXJyb3IocmVzKSk7DQorCQkJCQkJcmV0dXJuICgtMTEp
Ow0KKwkJCQkJfQ0KKwkJCQl9DQorDQorCQkJCWlmIChyZXM9PVpfU1RSRUFNX0VORCkNCisJCQkJ
ew0KKwkJCQkJemNhbGwtPmdvdF9yZWFkX3pzdHJlYW1fZW5kID0gWklPUlhfVFJVRTsNCisJCQkJ
CSNpZmRlZiBaSU9SWF9ERUJVRw0KKwkJCQkJCWZwcmludGYoc3RkZXJyLCAiZ290IHotc3RyZWFt
IGVuZFxuIik7DQorCQkJCQkjZW5kaWYNCisJCQkJfQ0KKw0KKwkJCQlicmVhazsNCisJCQl9DQor
CQl9DQorDQorCQkjaWZkZWYgWklPUlhfREVCVUcNCisJCQlmcHJpbnRmKHN0ZGVyciwgImF2YWls
X2luOiVkLCBhdmFpbF9vdXQ6JWRcbiIsDQorCQkJCXN0cmVhbS0+YXZhaWxfaW4sIHN0cmVhbS0+
YXZhaWxfb3V0KTsNCisJCSNlbmRpZg0KKwkJcmVzID0gaW5mbGF0ZShzdHJlYW0sIFpfTk9fRkxV
U0gpOw0KKw0KKwkJaWYgKHJlcz09Wl9TVFJFQU1fRU5EKQ0KKwkJew0KKwkJCXpjYWxsLT5nb3Rf
cmVhZF9yeF9lbmQgPVpJT1JYX1RSVUU7DQorCQkJemNhbGwtPmdvdF9yZWFkX3pzdHJlYW1fZW5k
ID0gWklPUlhfVFJVRTsNCisJCX0NCisJCWVsc2UgaWYgKHJlcyE9Wl9PSykNCisJCXsNCisJCQlo
YW5kbGVFcnJvcih6Y2FsbCwgImluZmxhdGUgZXJyb3IiLCB6RXJyb3IocmVzKSk7DQorCQkJcmV0
dXJuIFpJT1JYX0ZBSUw7DQorCQl9DQorCX0NCisNCisJcmV0dXJuIG5ieXRlcyAtIHN0cmVhbS0+
YXZhaWxfb3V0Ow0KK30NCisNCitzdGF0aWMgaW50IHppb3J4UmVhZEJaMihzdHJ1Y3Qgemlvcnhf
Y2FsbCAqemNhbGwsIGNoYXIgKmJ1ZiwgaW50IG5ieXRlcykNCit7DQorCWludCByZXM7DQorCWJ6
X3N0cmVhbSAqc3RyZWFtOw0KKw0KKwlzdHJlYW0gPSAoYnpfc3RyZWFtICopKHpjYWxsLT5zdHJl
YW0pOw0KKw0KKwlzdHJlYW0tPm5leHRfb3V0ID0gKGNoYXIgKilidWY7DQorCXN0cmVhbS0+YXZh
aWxfb3V0ID0gbmJ5dGVzOw0KKwl3aGlsZShzdHJlYW0tPmF2YWlsX291dCE9MCkNCisJew0KKwkJ
aWYgKHN0cmVhbS0+YXZhaWxfaW49PTApDQorCQl7DQorCQkJaWYgKHpjYWxsLT5nb3RfcmVhZF9y
eF9lbmQ9PVpJT1JYX0ZBTFNFKQ0KKwkJCXsNCisJCQkJcmVzID0gcnhfUmVhZCh6Y2FsbC0+Y2Fs
bCwgemNhbGwtPmJ1ZiwgWklPUlhfSU5fQlVGU0laRSk7DQorCQkJCWlmIChyZXM+MCkNCisJCQkJ
ew0KKwkJCQkJc3RyZWFtLT5uZXh0X2luID0gemNhbGwtPmJ1ZjsNCisJCQkJCXN0cmVhbS0+YXZh
aWxfaW4gPSByZXM7DQorCQkJCX0gZWxzZSB7DQorCQkJCQl6Y2FsbC0+Z290X3JlYWRfcnhfZW5k
ID0gWklPUlhfVFJVRTsNCisJCQkJCSNpZmRlZiBaSU9SWF9ERUJVRw0KKwkJCQkJCWZwcmludGYo
c3RkZXJyLCAiZ290IHJ4IHN0cmVhbSBlbmRcbiIpOw0KKwkJCQkJI2VuZGlmDQorCQkJCX0NCisJ
CQl9DQorDQorCQkJaWYgKHpjYWxsLT5nb3RfcmVhZF9yeF9lbmQ9PVpJT1JYX1RSVUUpDQorCQkJ
ew0KKwkJCQlpZiAoemNhbGwtPmdvdF9yZWFkX3pzdHJlYW1fZW5kPT1aSU9SWF9UUlVFKQ0KKwkJ
CQkJYnJlYWs7DQorDQorCQkJCXJlcyA9IEJaX09LOw0KKwkJCQl3aGlsZShyZXMhPUJaX1NUUkVB
TV9FTkQgJiYgc3RyZWFtLT5hdmFpbF9vdXQhPTApDQorCQkJCXsNCisJCQkJCSNpZmRlZiBaSU9S
WF9ERUJVRw0KKwkJCQkJCWZwcmludGYoc3RkZXJyLCAiYXZhaWxfaW46JWQsIGF2YWlsX291dDol
ZFxuIiwNCisJCQkJCQkJc3RyZWFtLT5hdmFpbF9pbiwgc3RyZWFtLT5hdmFpbF9vdXQpOw0KKwkJ
CQkJI2VuZGlmDQorCQkJCQlyZXMgPSBCWjJfYnpEZWNvbXByZXNzKHN0cmVhbSk7DQorCQkJCQlp
ZiAocmVzIT1CWl9PSyAmJiByZXMhPUJaX1NUUkVBTV9FTkQpDQorCQkJCQl7DQorCQkJCQkJaGFu
ZGxlQlpFcnJvcih6Y2FsbCwgIkJaMl9iekRlY29tcHJlc3MgZmluaXNoIGVycm9yIiwgcmVzKTsN
CisJCQkJCQlyZXR1cm4gKC0xMSk7DQorCQkJCQl9DQorCQkJCX0NCisNCisJCQkJaWYgKHJlcz09
QlpfU1RSRUFNX0VORCkNCisJCQkJew0KKwkJCQkJemNhbGwtPmdvdF9yZWFkX3pzdHJlYW1fZW5k
ID0gWklPUlhfVFJVRTsNCisJCQkJCSNpZmRlZiBaSU9SWF9ERUJVRw0KKwkJCQkJCWZwcmludGYo
c3RkZXJyLCAiZ290IGJ6Mi1zdHJlYW0gZW5kXG4iKTsNCisJCQkJCSNlbmRpZg0KKwkJCQl9DQor
DQorCQkJCWJyZWFrOw0KKwkJCX0NCisJCX0NCisNCisJCSNpZmRlZiBaSU9SWF9ERUJVRw0KKwkJ
CWZwcmludGYoc3RkZXJyLCAiYXZhaWxfaW46JWQsIGF2YWlsX291dDolZFxuIiwNCisJCQkJc3Ry
ZWFtLT5hdmFpbF9pbiwgc3RyZWFtLT5hdmFpbF9vdXQpOw0KKwkJI2VuZGlmDQorCQlyZXMgPSBC
WjJfYnpEZWNvbXByZXNzKHN0cmVhbSk7DQorCQlpZiAocmVzPT1CWl9TVFJFQU1fRU5EKQ0KKwkJ
ew0KKwkJCXpjYWxsLT5nb3RfcmVhZF9yeF9lbmQgPVpJT1JYX1RSVUU7DQorCQkJemNhbGwtPmdv
dF9yZWFkX3pzdHJlYW1fZW5kID0gWklPUlhfVFJVRTsNCisJCX0NCisJCWVsc2UgaWYgKHJlcyE9
QlpfT0spDQorCQl7DQorCQkJaGFuZGxlQlpFcnJvcih6Y2FsbCwgIkJaMl9iekRlY29tcHJlc3Nb
Ml0gZXJyb3IiLCByZXMpOw0KKwkJCXJldHVybiBaSU9SWF9GQUlMOw0KKwkJfQ0KKwl9DQorDQor
CXJldHVybiBuYnl0ZXMgLSBzdHJlYW0tPmF2YWlsX291dDsNCit9DQorDQoraW50IHppb3J4UmVh
ZChzdHJ1Y3QgemlvcnhfY2FsbCAqemNhbGwsIGNoYXIgKmJ1ZiwgaW50IG5ieXRlcykNCit7DQor
CWludCByZXM7DQorDQorCSNpZmRlZiBaSU9SWF9ERUJVRw0KKwkJZnByaW50ZihzdGRlcnIsICJ6
aW9yeFJlYWQvbmJ5dGVzOiVkXG4iLCBuYnl0ZXMpOw0KKwkjZW5kaWYNCisNCisJaWYgKHpjYWxs
PT1OVUxMIHx8IGJ1Zj09TlVMTCkNCisJew0KKwkJaGFuZGxlRXJyb3IoemNhbGwsICJ6aW9yeFJl
YWQiLCAiTlVMTCBlcnJvciIpOw0KKwkJcmV0dXJuICgtMSk7DQorCX0NCisNCisJaWYgKG5ieXRl
czw9MCkNCisJew0KKwkJaGFuZGxlRXJyb3IoemNhbGwsICJ6aW9yeFJlYWQiLCAid3JvbmcgcGFy
YW1ldGVyOiBuYnl0ZXM8PTAiKTsNCisJCXJldHVybiAoLTIpOw0KKwl9DQorDQorCXN3aXRjaCh6
Y2FsbC0+Y29tcHJlc3Npb24pDQorCXsNCisJCWNhc2UgWklPUlhfQ09NUFJFU1NfTk9ORToNCisJ
CQlyZXMgPSByeF9SZWFkKHpjYWxsLT5jYWxsLCBidWYsIG5ieXRlcyk7DQorCQkJYnJlYWs7DQor
CQljYXNlIFpJT1JYX0NPTVBSRVNTX1o6DQorCQkJcmVzID0gemlvcnhSZWFkWih6Y2FsbCwgYnVm
LCBuYnl0ZXMpOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSBaSU9SWF9DT01QUkVTU19CWjoNCisJCQly
ZXMgPSB6aW9yeFJlYWRCWjIoemNhbGwsIGJ1ZiwgbmJ5dGVzKTsNCisJCQlicmVhazsNCisJCWRl
ZmF1bHQ6DQorCQkJaGFuZGxlRXJyb3IoemNhbGwsICJ6aW9yeFJlYWQiLCAidW5rbm93biB0eXBl
IG9mIGNvbXByZXNzaW9uIik7DQorCQkJcmVzID0gKC0zKTsNCisJCQlicmVhazsNCisJfQ0KKw0K
KwkjaWZkZWYgWklPUlhfREVCVUcNCisJCWZwcmludGYoc3RkZXJyLCAiemlvcnhSZWFkL3JlYWQg
cmVzdWx0OiAlZC5cbiIsIHJlcyk7DQorCSNlbmRpZg0KKw0KKwlyZXR1cm4gcmVzOw0KK30NCisN
CitpbnQgemlvcnhFbmRSZWFkKHN0cnVjdCB6aW9yeF9jYWxsICp6Y2FsbCkNCit7DQorCWludCBy
ZXMsIHppb3J4X3JlczsNCisNCisJaWYgKHpjYWxsPT1OVUxMKQ0KKwl7DQorCQloYW5kbGVFcnJv
cih6Y2FsbCwgInppb3J4RW5kUmVhZCIsICJOVUxMIGVycm9yIik7DQorCQlyZXR1cm4gWklPUlhf
RkFJTDsNCisJfQ0KKw0KKwlzd2l0Y2goemNhbGwtPmNvbXByZXNzaW9uKQ0KKwl7DQorCQljYXNl
IFpJT1JYX0NPTVBSRVNTX05PTkU6DQorCQkJemlvcnhfcmVzID0gWklPUlhfT0s7DQorCQkJYnJl
YWs7DQorCQljYXNlIFpJT1JYX0NPTVBSRVNTX1o6DQorCQkJcmVzID0gaW5mbGF0ZUVuZCgoel9z
dHJlYW0gKikoemNhbGwtPnN0cmVhbSkpOw0KKwkJCWlmIChyZXMhPVpfT0spDQorCQkJew0KKwkJ
CQloYW5kbGVFcnJvcih6Y2FsbCwgImluZmxhdGVFbmQgZXJyb3IiLCB6RXJyb3IocmVzKSk7DQor
CQkJCXppb3J4X3JlcyA9IFpJT1JYX0ZBSUw7DQorCQkJfSBlbHNlIHsNCisJCQkJemlvcnhfcmVz
ID0gWklPUlhfT0s7DQorCQkJfQ0KKwkJCWJyZWFrOw0KKwkJY2FzZSBaSU9SWF9DT01QUkVTU19C
WjoNCisJCQlyZXMgPSBCWjJfYnpEZWNvbXByZXNzRW5kKChiel9zdHJlYW0gKikoemNhbGwtPnN0
cmVhbSkpOw0KKwkJCWlmIChyZXMhPUJaX09LKQ0KKwkJCXsNCisJCQkJaGFuZGxlRXJyb3IoemNh
bGwsICJpbmZsYXRlRW5kIGVycm9yIiwgekVycm9yKHJlcykpOw0KKwkJCQl6aW9yeF9yZXMgPSBa
SU9SWF9GQUlMOw0KKwkJCX0gZWxzZSB7DQorCQkJCXppb3J4X3JlcyA9IFpJT1JYX09LOw0KKwkJ
CX0NCisJCQlicmVhazsNCisJCWRlZmF1bHQ6DQorCQkJaGFuZGxlRXJyb3IoemNhbGwsICJ6aW9y
eFJlYWRFbmQiLCAidW5rbm93biB0eXBlIG9mIGNvbXByZXNzaW9uIik7DQorCQkJemlvcnhfcmVz
ID0gWklPUlhfRkFJTDsNCisJCQlicmVhazsNCisJfQ0KKw0KKwlpZiAoemNhbGwtPmJ1ZiE9TlVM
TCkNCisJew0KKwkJZnJlZSh6Y2FsbC0+YnVmKTsNCisJCXpjYWxsLT5idWYgPSBOVUxMOw0KKwl9
DQorDQorCWlmICh6Y2FsbC0+c3RyZWFtIT1OVUxMKQ0KKwl7DQorCQlmcmVlKHpjYWxsLT5zdHJl
YW0pOw0KKwkJemNhbGwtPnN0cmVhbSA9IE5VTEw7DQorCX0NCisNCisJcmV0dXJuIHppb3J4X3Jl
czsNCit9DQorDQpkaWZmIC1OYXVyIG9wZW5hZnMtMS4zLjc3L3NyYy92b2xzZXIvemlvcnguaCBv
cGVuYWZzLTEuMy43N3ovc3JjL3ZvbHNlci96aW9yeC5oDQotLS0gb3BlbmFmcy0xLjMuNzcvc3Jj
L3ZvbHNlci96aW9yeC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwDQorKysg
b3BlbmFmcy0xLjMuNzd6L3NyYy92b2xzZXIvemlvcnguaAkyMDA0LTEyLTIzIDE2OjM2OjEzLjAw
MDAwMDAwMCArMDEwMA0KQEAgLTAsMCArMSw0NSBAQA0KKyNpZm5kZWYgX19aSU9SWF9IX18NCisj
ZGVmaW5lIF9fWklPUlhfSF9fDQorDQorDQorI2RlZmluZSBaSU9SWF9DQUxMX0VSUk9SX0JVRlNJ
WkUgMTI4DQorI2RlZmluZSBaSU9SWF9JTl9CVUZTSVpFIDQwOTYNCisjZGVmaW5lIFpJT1JYX09V
VF9CVUZTSVpFIDQwOTYNCisNCisvL2FsbCBmdW5jdGlvbnMgbXVzdCByZXR1cm4gDQorLy9vbmUg
b2YgdGhlIGZvbGxvd2luZyAyIHJlc3VsdHM6DQorI2RlZmluZSBaSU9SWF9PSyAwDQorI2RlZmlu
ZSBaSU9SWF9GQUlMICgtMSkNCisNCisvL3Bvc3NpYmxlIHZhbHVlcyBvZiBwYXJhbWV0ZXIgImNv
bXByZXNzIjoNCisjZGVmaW5lIFpJT1JYX0NPTVBSRVNTX05PTkUgMA0KKyNkZWZpbmUgWklPUlhf
Q09NUFJFU1NfWiAxDQorI2RlZmluZSBaSU9SWF9DT01QUkVTU19CWiAyDQorDQorc3RydWN0IHpp
b3J4X2NhbGwNCit7DQorCXN0cnVjdCByeF9jYWxsICpjYWxsOw0KKwl2b2lkICpzdHJlYW07CS8v
dHlwZSBvZiA8c3RydWN0IHpfc3RyZWFtPiBvciA8c3RydWN0IGJ6X3N0cmVhbT4NCisJY2hhciAq
YnVmOwkvL3RlbXBvcmFyeSBidWZmZXIgZm9yIG1hcnNoYWxsaW5nIHRvIHJ4DQorDQorCWludCBj
b21wcmVzc2lvbjsgLy8wPWRvbid0IGNvbXByZXNzLCAxPWNvbXByZXNzDQorCWludCBsZXZlbDsJ
Ly9jb21wcmVzc2lvbiBsZXZlbA0KKw0KKwlpbnQgZ290X3JlYWRfcnhfZW5kOw0KKwlpbnQgZ290
X3JlYWRfenN0cmVhbV9lbmQ7DQorDQorCWNoYXIgbGFzdEVycm9yTXNnW1pJT1JYX0NBTExfRVJS
T1JfQlVGU0laRV07DQorfTsNCisNCisvL2xldmVsOiBaX0RFRkFVTFRfQ09NUFJFU1NJT04sIG9y
IGJldHdlZW4gMCBhbmQgOToNCisvLyAxIGdpdmVzIGJlc3Qgc3BlZWQsIDkgZ2l2ZXMgYmVzdCBj
b21wcmVzc2lvbiwgMCBnaXZlcyBubyBjb21wcmVzc2lvbiBhdA0KKy8vIGFsbCAodGhlIGlucHV0
IGRhdGEgaXMgc2ltcGx5IGNvcGllZCBhIGJsb2NrIGF0IGEgdGltZSkNCisNCitpbnQgemlvcnhC
ZWdpbldyaXRlKHN0cnVjdCByeF9jYWxsICpjYWxsLCBpbnQgdXNlX2NvbXByZXNzaW9uLCBpbnQg
bGV2ZWwsIHN0cnVjdCB6aW9yeF9jYWxsICp6Y2FsbCk7DQoraW50IHppb3J4V3JpdGUoc3RydWN0
IHppb3J4X2NhbGwgKnpjYWxsLCBjaGFyICpidWYsIGludCBuYnl0ZXMpOw0KK2ludCB6aW9yeEVu
ZFdyaXRlKHN0cnVjdCB6aW9yeF9jYWxsICp6Y2FsbCk7DQoraW50IHppb3J4QmVnaW5SZWFkKHN0
cnVjdCByeF9jYWxsICpjYWxsLCBpbnQgdXNlX2NvbXByZXNzaW9uLCBpbnQgbGV2ZWwsIHN0cnVj
dCB6aW9yeF9jYWxsICp6Y2FsbCk7DQoraW50IHppb3J4UmVhZChzdHJ1Y3QgemlvcnhfY2FsbCAq
emNhbGwsIGNoYXIgKmJ1ZiwgaW50IG5ieXRlcyk7DQoraW50IHppb3J4RW5kUmVhZChzdHJ1Y3Qg
emlvcnhfY2FsbCAqemNhbGwpOw0KKw0KKyNlbmRpZiAvLyBfX1pJT1JYX0hfXw0K

--=_mixed 006C3A83C1256F7F_=--