Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 2 Dec 2016 14:22:47 +0000
From:      Steven Crangle <Steven@stream-technologies.com>
To:        Vincenzo Maffione <v.maffione@gmail.com>
Cc:        FreeBSD Net <freebsd-net@freebsd.org>
Subject:   Re: Looking for some help with netmap/bhyve
Message-ID:  <DB5PR07MB16857B8F7A2B4783640074979B8E0@DB5PR07MB1685.eurprd07.prod.outlook.com>
In-Reply-To: <CA%2B_eA9jfQc2B18fktgSt_JB4cRqsVLKA_11eWPfsbAKBMiJmUA@mail.gmail.com>
References:  <DB5PR07MB1685DAA40193595950A464FB9BB40@DB5PR07MB1685.eurprd07.prod.outlook.com> <CA%2B_eA9gggyo_ncSZDribOr%2BsWoFELbPKEeLdaZ8AZwgHAYjcRA@mail.gmail.com> <DB5PR07MB168582129D05D52878D3DCE59B8D0@DB5PR07MB1685.eurprd07.prod.outlook.com> <CA%2B_eA9jW_O_a5uRBAA9XSPspnwATrGhXM3NYusyXxemftn3uZw@mail.gmail.com> <DB5PR07MB1685470E0EB0B93A48E7AA229B8D0@DB5PR07MB1685.eurprd07.prod.outlook.com>, <CA%2B_eA9jfQc2B18fktgSt_JB4cRqsVLKA_11eWPfsbAKBMiJmUA@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--_006_DB5PR07MB16857B8F7A2B4783640074979B8E0DB5PR07MB1685eurp_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Hi Vincenzo,


Figured I would reply to give you some more testing feedback! Ptnetmap is s=
uccessfully working for us now on 11.0 RELEASE (stock src.txz from FreeBSD.=
org) with the help of your patch! There were a few files missing from the p=
atch though, so I've attached a revised one which should work incase it's o=
f use to you! (might be a bit messy)

I've attached a txt file with some testing results too , but in summary:


1) netmap with no ptnet or vale: between 65-70Kpps.


2) netmap with vale but no ptnet: between 121-160Kpps.


3) ptnetmap with vale: seems to vary quite alot between 7-15Mpps.


All the tests were performed using pkt-gen with 60 byte packets. It's worth=
 noting that currently we're running the tests on a very old tired Sun Micr=
o server(Sun Fire X2200 M2 with Quad Core Processor). Currently in the proc=
ess of testing out our patch file on a clean 11.0 source on a much faster b=
ox, so can run more detailed testing there using iperf etc if it's useful t=
o you!


I have also attached a few kernel traces, I tried to turn symbols on, but i=
'm not sure it worked 100% Will try and fix it for the next install so that=
 I can provide better crash dumps if we run into any bugs!  The crashes att=
ached only ever occured in setup number 2 above.


Thanks again for your help!


Kind Regards


Steven













________________________________



[Stream Logo]








Steven Crangle


Systems Developer | Stream Technologies | Glasgow, UK


[http://www.stream-technologies.com/img/phone.png]


+44 (0)844 800 8520


|


[http://www.stream-technologies.com/img/mouse.png]


www.stream-technologies.com<http://www.stream-technologies.com/>;






________________________________
From: Vincenzo Maffione <v.maffione@gmail.com>
Sent: 29 November 2016 18:42:04
To: Steven Crangle
Cc: FreeBSD Net
Subject: Re: Looking for some help with netmap/bhyve

Hi Steven,

2016-11-29 16:44 GMT+01:00 Steven Crangle <Steven@stream-technologies.com<m=
ailto:Steven@stream-technologies.com>>:


Hi Vincenzo,


No problem! We've decided that we will try testing with 11.0 too, as it wou=
ld help us to have our test system locked to a specific version like 11.0 a=
nd can hopefully help you with testing too. We'll compile netmap from sourc=
e as advised, but I was wondering what steps we would take in order to port=
 the changes to bhyve/ptnetmap from HEAD into 11.0?

I think you can get the patch containing my modifications to HEAD for bhyve=
+vmm.ko+libvmmapi, that you can extract with the following command in my fr=
eebsd git repository

$ git diff 9e10acc0303003d8733a546bca60f242b7b0aa64 ptnet-head lib/libvmmap=
i/ sys/amd64/ sys/modules/vmm/ usr.sbin/bhyve

and apply that patch in your 11.0 FreeBSD tree.



I've currently only tested with pkt-gen as our bhyve instances are pretty m=
inimal right now, below are a few samples of the speeds seen in each of the=
 different configurations:

which configurations?


Using netmap on top of standard tap devices with no vale:


vm1:
    197.259100 main_thread [2325] 30.977 Kpps (32.435 Kpkts 15.569 Mbps in =
1047062 usec) 1.93 avg_batch 826 min_space
    203.306126 main_thread [2325] 32.149 Kpps (32.411 Kpkts 15.557 Mbps in =
1008156 usec) 1.88 avg_batch 866 min_space
    204.313055 main_thread [2325] 33.095 Kpps (33.324 Kpkts 15.996 Mbps in =
1006929 usec) 1.98 avg_batch 911 min_space
vm2:
    245.397418 main_thread [2325] 31.422 Kpps (33.262 Kpkts 15.966 Mbps in =
1058559 usec) 313.79 avg_batch 99999 min_space
    246.429810 main_thread [2325] 31.254 Kpps (32.266 Kpkts 15.488 Mbps in =
1032392 usec) 319.47 avg_batch 99999 min_space
    251.621436 main_thread [2325] 31.606 Kpps (33.329 Kpkts 15.998 Mbps in =
1054531 usec) 314.42 avg_batch 99999 min_space

Be aware that you typically want to use netmap both in the VM and in the ho=
st (to use VALE and ptnet). Here you are probably using netmap just in the =
VM. Performance are however extremely low.
When using netmap in both guest and host, with ptnet, you should be able to=
 get at least 10-30 Mpps from vm1 to vm2.


After then trying to switch to the netmap in userspace/netmap in kernel spa=
ce with ptnetmap, I realised I made a silly mistake and built from head ins=
tead of the branch ptnet-head... haha So I'm currently doing a quick rebuil=
d on the correct branch and will report back with the results from pkt-gen =
using just vale, and also with the new ptnetmap changes!

Ok, also consider that you can use the patch I indicated above against HEAD=
.

Cheers,
  Vincenzo



Kind Regards








________________________________



[Stream Logo]








Steven Crangle


Systems Developer | Stream Technologies | Glasgow, UK


[http://www.stream-technologies.com/img/phone.png]


+44 (0)844 800 8520<tel:%2B44%20%280%29844%20800%208520>


|


[http://www.stream-technologies.com/img/mouse.png]


www.stream-technologies.com<http://www.stream-technologies.com/>;






________________________________
From: Vincenzo Maffione <v.maffione@gmail.com<mailto:v.maffione@gmail.com>>
Sent: 29 November 2016 11:52:18

To: Steven Crangle
Cc: FreeBSD Net
Subject: Re: Looking for some help with netmap/bhyve

Hi Steven,
  Thanks for your testing this in HEAD, good news to know that it works ok!

I think there is not going to be much difference between HEAD and 11.0, bec=
ause in the end bhyve code didn't really change (for the parts I touched), =
and you need to use the latest netmap version (github) anyway, irrespective=
 of whether you are testing on 10.3, 11.0, head, etc. In other words, you w=
ould be testing approximately the same code. Anyway, if you happen to test =
11.0 by chance please let me know.

What kind of tests did you perform? netmap applications (e.g. pkt-gen), or =
netperf/iperf standard TCP/IP tools?
Could you please share the performance number you got for configurations (A=
) and (B) (or just the one you tried)?

I think it is useful to compare your results with the ones I collected here=
 (see the performance evaluation section):

https://wiki.freebsd.org/DevSummit/201609?action=3DAttachFile&do=3Dview&tar=
get=3D20160923-freebsd-summit-ptnet.pdf

Regarding the crashes, thanks for reporting, I would be nice if you could d=
escribe in more detail how you trigger them (with some higher likelyhood); =
also, compiling the kernel with debug symbols should help in understanding =
which part of the code is involved in the crash.

Cheers,
  Vincenzo


2016-11-29 12:26 GMT+01:00 Steven Crangle <Steven@stream-technologies.com<m=
ailto:Steven@stream-technologies.com>>:

 Hi Vincenzo!


Thank you so much for your help! With your instructions I've managed to get=
 a set of bhyves up and running with netmap working properly within them! I=
 chose to go with the recent version of head instead of 10.3.  I will also =
try and build a version on 11.0 if I get chance!


I will make sure and ask any further questions on the github page for netma=
p, but while I'm emailing, I've attached a text file containing a few kerne=
l page fault errors I've ran into. They don't happen repeatedly. They seem =
to just happen randomly if I try to shut the process down and possibly catc=
h netmap in an incorrect state! Figured they might be useful to you. If I f=
igure out what the error is myself I will try and help out!


And thanks again for your help!


Kind Regards









________________________________



[Stream Logo]








Steven Crangle


Systems Developer | Stream Technologies | Glasgow, UK


[http://www.stream-technologies.com/img/phone.png]


+44 (0)844 800 8520<tel:%2B44%20%280%29844%20800%208520>


|


[http://www.stream-technologies.com/img/mouse.png]


www.stream-technologies.com<http://www.stream-technologies.com/>;






________________________________
From: Vincenzo Maffione <v.maffione@gmail.com<mailto:v.maffione@gmail.com>>
Sent: 23 November 2016 08:33:11
To: Steven Crangle
Cc: FreeBSD Net
Subject: Re: Looking for some help with netmap/bhyve



2016-11-22 11:31 GMT+01:00 Steven Crangle <Steven@stream-technologies.com<m=
ailto:Steven@stream-technologies.com>>:

Hi,


I've recently been trying to boot up several bhyves so that I can test netm=
ap communication between instances. The problem is, no matter what configur=
ation I try, the guest vm running in bhyve completely hangs and becomes unu=
sable as soon as a packet hits the netmap interface. When testing with pkt-=
gen, the TX side successfully starts sending packets, but the RX side will =
reliable freeze with the only option being killing the bhyve process.


The bhyve command used for the above test was:


    bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 2,virtio-blk,/dev/zvol/zroot/vip=
er1vol    -s 3,virtio-net,tap0,mac=3D00:01:23:45:67:83 -s 4,virtio-net,tap4=
 -l com1,/dev/nmdm0A -A -H -P -m 6g viper1 &
    bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 2,virtio-blk,/dev/zvol/zroot/vip=
er2vol    -s 3,virtio-net,tap1,mac=3D00:01:23:45:67:84 -s 4,virtio-net,tap5=
 -l com1,/dev/nmdm1A -A -H -P -m 6g viper2

For this test the host OS was FreeBSD-11.0-p3 and the guest OS was FreeBSD-=
11.0-p3.

After failing to get this solution working, I pulled down the source from t=
he following url and installed it on the host box:

https://svnweb.freebsd.org/socsvn/soc2016/vincenzo/head/

I then ran the following commands to try and bring up the machines using th=
e ptnetmap interface (the guest still running 11.0p3) :

    bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 1:1,virtio-blk,/dev/zvol/zroot/v=
iper1vol    -s 2:0,virtio-net,tap0,mac=3D00:01:23:45:67:83 -s 2:1,ptnetmap-=
memdev -s 2:2,ptnet,vale0:0 -l com1,/dev/nmdm0A -A -H -P -m 6g viper1 &
    bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 1:1,virtio-blk,/dev/zvol/zroot/v=
iper2vol    -s 2:0,virtio-net,tap1,mac=3D00:01:23:45:67:84 -s 2:1,ptnetmap-=
memdev -s 2:2,ptnet,vale0:1 -l com1,/dev/nmdm1A -A -H -P -m 6g viper2

With the above commands the vm's fail to boot with the following message:

ptnet_init: failed to get ptnetmap

Output in /var/log/messages seems to just show the ptnetmap driver allocati=
ng one RX/TX ring for each vm, while bringing the device up, the device the=
n goes down and the above error is seen in the console.

Is there something I'm doing wrong with regards to running netmap or ptnetm=
ap within a bhyve? Any pointers in the right direction will be much appreci=
ated!

Kind Regards

Steven


Hi Steven,

  The code you are looking at is the final code released by my gsoc 2016 pr=
oject at the end of August 2016. However, I've been working on that for a w=
hile after the gsoc, so that code is not updated anymore. My modification b=
asically involves two subsystems: netmap and bhyve.

The updates to netmap are already available in HEAD. The updates to bhyve a=
re not yet upstream, as we are in the process to review that with the bhyve=
 maintainers.

Anyway, you need two sources to get the latest code:
1) https://github.com/luigirizzo/netmap for the latest netmap code, that yo=
u could also compile as an external kernel module.
2) https://github.com/vmaffione/freebsd to get the updates to bhyve (and vm=
m.ko). You can use this as the host system. There are two branches here: pt=
net-10.3, and ptnet-head. My original code was developed under FreeBSD 10.3=
, so a first possibility is to try this as the host system (using the ptnet=
-10.3 branch). The other branch (ptnet-head) contains a porting of the work=
 to a recent version of HEAD. I would be very glad if you could test the co=
de also on FreeBSD 11.

We support two combinations of bhyve networking with netmap:

  (A) virtio-net + netmap: that is something like "-s 2:0,virtio-net,vale0:=
0" in the bhyve command line.
  (B) ptnet + ptnetmap: that is something like "-s 2:1,ptnetmap-memdev -s 2=
:2,ptnet,vale0:0" in the bhyve command line.

so you may want to try A first (netmap backend in user-space, slower) and t=
hen B (netmap backend in kernel-space, faster).

Sorry about the confusion on the code repositories, I'll try also to update=
 the wiki page (and/or the gsoc svn repo) to reflect these updates. It's pe=
rfectly ok for me to discuss these issues here in the ML, however for more =
detailed/low-level discussion and support about problems you are running in=
to, feel free to open Github issues here https://github.com/luigirizzo/netm=
ap.

Cheers,
  Vincenzo









________________________________



[Stream Logo]








Steven Crangle


Systems Developer | Stream Technologies | Glasgow, UK


[http://www.stream-technologies.com/img/phone.png]


+44 (0)844 800 8520<tel:%2B44%20%280%29844%20800%208520>


|


[http://www.stream-technologies.com/img/mouse.png]


www.stream-technologies.com<http://www.stream-technologies.com><http://www.=
stream-technologies.com/>






_______________________________________________
freebsd-net@freebsd.org<mailto:freebsd-net@freebsd.org> mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org<mailt=
o:freebsd-net-unsubscribe@freebsd.org>"



--
Vincenzo Maffione



--
Vincenzo Maffione



--
Vincenzo Maffione

--_006_DB5PR07MB16857B8F7A2B4783640074979B8E0DB5PR07MB1685eurp_
Content-Type: text/x-patch; name="ptnetmap-11.0.patch"
Content-Description: ptnetmap-11.0.patch
Content-Disposition: attachment; filename="ptnetmap-11.0.patch"; size=1559319;
	creation-date="Fri, 02 Dec 2016 14:17:48 GMT";
	modification-date="Fri, 02 Dec 2016 14:17:48 GMT"
Content-Transfer-Encoding: base64

ZGlmZiAtdSAtciAtTiB1c3Ivc3JjLy5hcmNjb25maWcgL3Vzci9zcmMvLmFyY2NvbmZpZwotLS0g
dXNyL3NyYy8uYXJjY29uZmlnCTIwMTYtMDktMjkgMDA6MjY6MzYuMDAwMDAwMDAwICswMTAwCisr
KyAvdXNyL3NyYy8uYXJjY29uZmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw
CkBAIC0xLDUgKzAsMCBAQAotewotCSJyZXBvc2l0b3J5LmNhbGxzaWduIiA6ICJTIiwKLQkicGhh
YnJpY2F0b3IudXJpIiA6ICJodHRwczovL3Jldmlld3MuZnJlZWJzZC5vcmcvIiwKLQkiaGlzdG9y
eS5pbW11dGFibGUiIDogdHJ1ZQotfQpkaWZmIC11IC1yIC1OIHVzci9zcmMvLmFyY2xpbnQgL3Vz
ci9zcmMvLmFyY2xpbnQKLS0tIHVzci9zcmMvLmFyY2xpbnQJMjAxNi0wOS0yOSAwMDoyNjozNi4w
MDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjLy5hcmNsaW50CTE5NzAtMDEtMDEgMDE6MDA6MDAu
MDAwMDAwMDAwICswMTAwCkBAIC0xLDI1ICswLDAgQEAKLXsKLSAgImV4Y2x1ZGUiOiAiKGNvbnRy
aWJ8Y3J5cHRvKSIsCi0gICJsaW50ZXJzIjogewotICAgICJweXRob24iOiB7Ci0gICAgICAidHlw
ZSI6ICJwZXA4IiwKLSAgICAgICJpbmNsdWRlIjogIihcXC5weSQpIgotICAgIH0sCi0gICAgInNw
ZWxsaW5nIjogewotICAgICAgInR5cGUiOiAic3BlbGxpbmciCi0gICAgfSwKLSAgICAiY2htb2Qi
OiB7Ci0gICAgICAidHlwZSI6ICJjaG1vZCIKLSAgICB9LAotICAgICJtZXJnZS1jb25mbGljdCI6
IHsKLSAgICAgICJ0eXBlIjogIm1lcmdlLWNvbmZsaWN0IgotICAgIH0sCi0gICAgImZpbGVuYW1l
IjogewotICAgICAgInR5cGUiOiAiZmlsZW5hbWUiCi0gICAgfSwKLSAgICAianNvbiI6IHsKLSAg
ICAgICJ0eXBlIjogImpzb24iLAotICAgICAgImluY2x1ZGUiOiAiKFxcLmFyY2xpbnR8XFwuanNv
biQpIgotICAgIH0KLSAgfQotfQpkaWZmIC11IC1yIC1OIHVzci9zcmMvT29wcy5yZWogL3Vzci9z
cmMvT29wcy5yZWoKLS0tIHVzci9zcmMvT29wcy5yZWoJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAw
MDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL09vcHMucmVqCTIwMTYtMTEtMzAgMTA6NTY6MTAuNDM0
MDMyMDAwICswMDAwCkBAIC0wLDAgKzEsMjkyIEBACitAQCAtMzcsNiArMzcsNyBAQAorICNpbmNs
dWRlIDxuZXQvZXRoZXJuZXQuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRl
IDxuZXRpbmV0L3RjcC5oPgorKyNpbmNsdWRlIDxuZXQvaWYuaD4gLyogSUZOQU1TSVogKi8KKyAK
KyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KK0BAIC01NSw2ICs1Niw4
IEBACisgI2luY2x1ZGUgImJoeXZlcnVuLmgiCisgI2luY2x1ZGUgInBjaV9lbXVsLmgiCisgI2lu
Y2x1ZGUgIm1ldmVudC5oIgorKyNpbmNsdWRlICJuZXRfdXRpbHMuaCIgICAgLyogTUFDIGFkZHJl
c3MgZ2VuZXJhdGlvbiAqLworKyNpbmNsdWRlICJuZXRfYmFja2VuZHMuaCIKKyAKKyAvKiBIYXJk
d2FyZS9yZWdpc3RlciBkZWZpbml0aW9ucyBYWFg6IG1vdmUgc29tZSB0byBjb21tb24gY29kZS4g
Ki8KKyAjZGVmaW5lIEU4MjU0NV9WRU5ET1JfSURfSU5URUwJCQkweDgwODYKK0BAIC0yMzQsMTEg
KzIzNywxMCBAQAorIHN0cnVjdCBlODI1NDVfc29mdGMgeworIAlzdHJ1Y3QgcGNpX2Rldmluc3Qg
KmVzY19waTsKKyAJc3RydWN0IHZtY3R4CSplc2NfY3R4OworLQlzdHJ1Y3QgbWV2ZW50ICAgKmVz
Y19tZXZwOworIAlzdHJ1Y3QgbWV2ZW50ICAgKmVzY19tZXZwaXRyOworIAlwdGhyZWFkX211dGV4
X3QJZXNjX210eDsKKyAJc3RydWN0IGV0aGVyX2FkZHIgZXNjX21hYzsKKy0JaW50CQllc2NfdGFw
ZmQ7CisrCXN0cnVjdCBuZXRfYmFja2VuZCAqZXNjX2JlOworIAorIAkvKiBHZW5lcmFsICovCisg
CXVpbnQzMl90CWVzY19DVFJMOwkvKiB4MDAwMCBkZXZpY2UgY3RsICovCitAQCAtMzQ0LDcgKzM0
Niw3IEBACisgc3RhdGljIHZvaWQgZTgyNTQ1X3Jlc2V0KHN0cnVjdCBlODI1NDVfc29mdGMgKnNj
LCBpbnQgZGV2KTsKKyBzdGF0aWMgdm9pZCBlODI1NDVfcnhfZW5hYmxlKHN0cnVjdCBlODI1NDVf
c29mdGMgKnNjKTsKKyBzdGF0aWMgdm9pZCBlODI1NDVfcnhfZGlzYWJsZShzdHJ1Y3QgZTgyNTQ1
X3NvZnRjICpzYyk7Cistc3RhdGljIHZvaWQgZTgyNTQ1X3RhcF9jYWxsYmFjayhpbnQgZmQsIGVu
dW0gZXZfdHlwZSB0eXBlLCB2b2lkICpwYXJhbSk7Cisrc3RhdGljIHZvaWQgZTgyNTQ1X3J4X2Nh
bGxiYWNrKGludCBmZCwgZW51bSBldl90eXBlIHR5cGUsIHZvaWQgKnBhcmFtKTsKKyBzdGF0aWMg
dm9pZCBlODI1NDVfdHhfc3RhcnQoc3RydWN0IGU4MjU0NV9zb2Z0YyAqc2MpOworIHN0YXRpYyB2
b2lkIGU4MjU0NV90eF9lbmFibGUoc3RydWN0IGU4MjU0NV9zb2Z0YyAqc2MpOworIHN0YXRpYyB2
b2lkIGU4MjU0NV90eF9kaXNhYmxlKHN0cnVjdCBlODI1NDVfc29mdGMgKnNjKTsKK0BAIC04MTMs
MTEgKzgxNSw5IEBACisgCXJldHVybiAoMjU2KTsJLyogRm9yYmlkZGVuIHZhbHVlLiAqLworIH0K
KyAKKy1zdGF0aWMgdWludDhfdCBkdW1teWJ1ZlsyMDQ4XTsKKy0KKyAvKiBYWFggb25lIHBhY2tl
dCBhdCBhIHRpbWUgdW50aWwgdGhpcyBpcyBkZWJ1Z2dlZCAqLworIHN0YXRpYyB2b2lkCistZTgy
NTQ1X3RhcF9jYWxsYmFjayhpbnQgZmQsIGVudW0gZXZfdHlwZSB0eXBlLCB2b2lkICpwYXJhbSkK
KytlODI1NDVfcnhfY2FsbGJhY2soaW50IGZkLCBlbnVtIGV2X3R5cGUgdHlwZSwgdm9pZCAqcGFy
YW0pCisgeworIAlzdHJ1Y3QgZTgyNTQ1X3NvZnRjICpzYyA9IHBhcmFtOworIAlzdHJ1Y3QgZTEw
MDBfcnhfZGVzYyAqcnhkOworQEAgLTgzMiw3ICs4MzIsNyBAQAorIAlpZiAoIXNjLT5lc2Nfcnhf
ZW5hYmxlZCB8fCBzYy0+ZXNjX3J4X2xvb3BiYWNrKSB7CisgCQlEUFJJTlRGKCJyeCBkaXNhYmxl
ZCAoISVkIHx8ICVkKSAtLSBwYWNrZXQocykgZHJvcHBlZFxyXG4iLAorIAkJICAgIHNjLT5lc2Nf
cnhfZW5hYmxlZCwgc2MtPmVzY19yeF9sb29wYmFjayk7CistCQl3aGlsZSAocmVhZChzYy0+ZXNj
X3RhcGZkLCBkdW1teWJ1Ziwgc2l6ZW9mKGR1bW15YnVmKSkgPiAwKSB7CisrCQl3aGlsZSAobmV0
YmVfcnhfZGlzY2FyZChzYy0+ZXNjX2JlKSA+IDApIHsKKyAJCX0KKyAJCWdvdG8gZG9uZTE7Cisg
CX0KK0BAIC04NDUsNyArODQ1LDcgQEAKKyAJaWYgKGxlZnQgPCBtYXhwa3RkZXNjKSB7CisgCQlE
UFJJTlRGKCJyeCBvdmVyZmxvdyAoJWQgPCAlZCkgLS0gcGFja2V0KHMpIGRyb3BwZWRcclxuIiwK
KyAJCSAgICBsZWZ0LCBtYXhwa3RkZXNjKTsKKy0JCXdoaWxlIChyZWFkKHNjLT5lc2NfdGFwZmQs
IGR1bW15YnVmLCBzaXplb2YoZHVtbXlidWYpKSA+IDApIHsKKysJCXdoaWxlIChuZXRiZV9yeF9k
aXNjYXJkKHNjLT5lc2NfYmUpID4gMCkgeworIAkJfQorIAkJZ290byBkb25lMTsKKyAJfQorQEAg
LTg2Miw5ICs4NjIsOSBAQAorIAkJCSAgICByeGQtPmJ1ZmZlcl9hZGRyLCBidWZzeik7CisgCQkJ
dmVjW2ldLmlvdl9sZW4gPSBidWZzejsKKyAJCX0KKy0JCWxlbiA9IHJlYWR2KHNjLT5lc2NfdGFw
ZmQsIHZlYywgbWF4cGt0ZGVzYyk7CisrCQlsZW4gPSBuZXRiZV9yZWN2KHNjLT5lc2NfYmUsIHZl
YywgbWF4cGt0ZGVzYyk7CisgCQlpZiAobGVuIDw9IDApIHsKKy0JCQlEUFJJTlRGKCJ0YXA6IHJl
YWR2KCkgcmV0dXJuZWQgJWRcbiIsIGxlbik7CisrCQkJRFBSSU5URigiYmU6IHJlY3YoKSByZXR1
cm5lZCAlZFxuIiwgbGVuKTsKKyAJCQlnb3RvIGRvbmU7CisgCQl9CisgCitAQCAtMTAzNiwxMyAr
MTAzNiwxMCBAQAorIH0KKyAKKyBzdGF0aWMgdm9pZAorLWU4MjU0NV90cmFuc21pdF9iYWNrZW5k
KHN0cnVjdCBlODI1NDVfc29mdGMgKnNjLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCkK
KytlODI1NDVfdHJhbnNtaXRfYmFja2VuZChzdHJ1Y3QgZTgyNTQ1X3NvZnRjICpzYywgc3RydWN0
IGlvdmVjICppb3YsIGludCBpb3ZjbnQsCisrCQkJdWludDMyX3QgbGVuKQorIHsKKy0KKy0JaWYg
KHNjLT5lc2NfdGFwZmQgPT0gLTEpCistCQlyZXR1cm47CistCistCSh2b2lkKSB3cml0ZXYoc2Mt
PmVzY190YXBmZCwgaW92LCBpb3ZjbnQpOworKwluZXRiZV9zZW5kKHNjLT5lc2NfYmUsIGlvdiwg
aW92Y250LCBsZW4sIDApOworIH0KKyAKKyBzdGF0aWMgdm9pZAorQEAgLTEwNzgsNyArMTA3NSw3
IEBACisgCisgCWNraW5mb1swXS5ja192YWxpZCA9IGNraW5mb1sxXS5ja192YWxpZCA9IDA7Cisg
CWlvdmNudCA9IDA7CistCXRsZW4gPSAwOworKwl0bGVuID0gMDsgLyogdG90YWwgbGVuZ3RoICov
CisgCW50eXBlID0gMDsKKyAJdHNvID0gMDsKKyAJb2hlYWQgPSBoZWFkOworQEAgLTEyMDMsNiAr
MTIwMCw3IEBACisgCQloZHJsZW4gPSBFVEhFUl9BRERSX0xFTioyOworIAkJdmxlbiA9IEVUSEVS
X1ZMQU5fRU5DQVBfTEVOOworIAl9CisrCXRsZW4gKz0gdmxlbjsKKyAJaWYgKCF0c28pIHsKKyAJ
CS8qIEVzdGltYXRlIHJlcXVpcmVkIHdyaXRhYmxlIHNwYWNlIGZvciBjaGVja3N1bXMuICovCisg
CQlpZiAoY2tpbmZvWzBdLmNrX3ZhbGlkKQorQEAgLTEyNjgsNyArMTI2Niw3IEBACisgCQkJZTgy
NTQ1X3RyYW5zbWl0X2NoZWNrc3VtKGlvdiwgaW92Y250LCAmY2tpbmZvWzBdKTsKKyAJCWlmIChj
a2luZm9bMV0uY2tfdmFsaWQpCisgCQkJZTgyNTQ1X3RyYW5zbWl0X2NoZWNrc3VtKGlvdiwgaW92
Y250LCAmY2tpbmZvWzFdKTsKKy0JCWU4MjU0NV90cmFuc21pdF9iYWNrZW5kKHNjLCBpb3YsIGlv
dmNudCk7CisrCQllODI1NDVfdHJhbnNtaXRfYmFja2VuZChzYywgaW92LCBpb3ZjbnQsIHRsZW4p
OworIAkJZ290byBkb25lOworIAl9CisgCitAQCAtMTI5MiwxMyArMTI5MCwxNCBAQAorIAkJLyog
Q29uc3RydWN0IElPVnMgZm9yIHRoZSBzZWdtZW50LiAqLworIAkJLyogSW5jbHVkZSB3aG9sZSBv
cmlnaW5hbCBoZWFkZXIuICovCisgCQl0aW92WzBdLmlvdl9iYXNlID0gaGRyOworLQkJdGlvdlsw
XS5pb3ZfbGVuID0gaGRybGVuOworKwkJdGlvdlswXS5pb3ZfbGVuID0gdGxlbiA9IGhkcmxlbjsK
KyAJCXRpb3ZjbnQgPSAxOworIAkJLyogSW5jbHVkZSByZXNwZWN0aXZlIHBhcnQgb2YgcGF5bG9h
ZCBJT1YuICovCisgCQlmb3IgKG5sZWZ0ID0gbm93OyBwdiA8IGlvdmNudCAmJiBubGVmdCA+IDA7
IG5sZWZ0IC09IG5ub3cpIHsKKyAJCQlubm93ID0gTUlOKG5sZWZ0LCBpb3ZbcHZdLmlvdl9sZW4g
LSBwdm9mZik7CisgCQkJdGlvdlt0aW92Y250XS5pb3ZfYmFzZSA9IGlvdltwdl0uaW92X2Jhc2Ug
KyBwdm9mZjsKKyAJCQl0aW92W3Rpb3ZjbnQrK10uaW92X2xlbiA9IG5ub3c7CisrCQkJdGxlbiAr
PSBubm93OworIAkJCWlmIChwdm9mZiArIG5ub3cgPT0gaW92W3B2XS5pb3ZfbGVuKSB7CisgCQkJ
CXB2Kys7CisgCQkJCXB2b2ZmID0gMDsKK0BAIC0xMzUxLDcgKzEzNTAsNyBAQAorIAkJCSAgICBl
ODI1NDVfY2FycnkodGNwc3VtKTsKKyAJCQllODI1NDVfdHJhbnNtaXRfY2hlY2tzdW0odGlvdiwg
dGlvdmNudCwgJmNraW5mb1sxXSk7CisgCQl9CistCQllODI1NDVfdHJhbnNtaXRfYmFja2VuZChz
YywgdGlvdiwgdGlvdmNudCk7CisrCQllODI1NDVfdHJhbnNtaXRfYmFja2VuZChzYywgdGlvdiwg
dGlvdmNudCwgdGxlbik7CisgCX0KKyAKKyBkb25lOgorQEAgLTIxOTgsODAgKzIxOTcsMTcgQEAK
KyAJc2MtPmVzY19UWERDVEwgPSAwOworIH0KKyAKKy1zdGF0aWMgdm9pZAorLWU4MjU0NV9vcGVu
X3RhcChzdHJ1Y3QgZTgyNTQ1X3NvZnRjICpzYywgY2hhciAqb3B0cykKKy17CistCWNoYXIgdGJ1
Zls4MF07CistCQorLQlpZiAob3B0cyA9PSBOVUxMKSB7CistCQlzYy0+ZXNjX3RhcGZkID0gLTE7
CistCQlyZXR1cm47CistCX0KKy0KKy0Jc3RyY3B5KHRidWYsICIvZGV2LyIpOworLQlzdHJsY2F0
KHRidWYsIG9wdHMsIHNpemVvZih0YnVmKSk7CistCistCXNjLT5lc2NfdGFwZmQgPSBvcGVuKHRi
dWYsIE9fUkRXUik7CistCWlmIChzYy0+ZXNjX3RhcGZkID09IC0xKSB7CistCQlEUFJJTlRGKCJ1
bmFibGUgdG8gb3BlbiB0YXAgZGV2aWNlICVzXG4iLCBvcHRzKTsKKy0JCWV4aXQoMSk7CistCX0K
Ky0KKy0JLyoKKy0JICogU2V0IG5vbi1ibG9ja2luZyBhbmQgcmVnaXN0ZXIgZm9yIHJlYWQKKy0J
ICogbm90aWZpY2F0aW9ucyB3aXRoIHRoZSBldmVudCBsb29wCistCSAqLworLQlpbnQgb3B0ID0g
MTsKKy0JaWYgKGlvY3RsKHNjLT5lc2NfdGFwZmQsIEZJT05CSU8sICZvcHQpIDwgMCkgeworLQkJ
V1BSSU5URigidGFwIGRldmljZSBPX05PTkJMT0NLIGZhaWxlZDogJWRcbiIsIGVycm5vKTsKKy0J
CWNsb3NlKHNjLT5lc2NfdGFwZmQpOworLQkJc2MtPmVzY190YXBmZCA9IC0xOworLQl9CistCist
CXNjLT5lc2NfbWV2cCA9IG1ldmVudF9hZGQoc2MtPmVzY190YXBmZCwKKy0JCQkJICBFVkZfUkVB
RCwKKy0JCQkJICBlODI1NDVfdGFwX2NhbGxiYWNrLAorLQkJCQkgIHNjKTsKKy0JaWYgKHNjLT5l
c2NfbWV2cCA9PSBOVUxMKSB7CistCQlEUFJJTlRGKCJDb3VsZCBub3QgcmVnaXN0ZXIgbWV2ZW50
ICVkXG4iLCBFVkZfUkVBRCk7CistCQljbG9zZShzYy0+ZXNjX3RhcGZkKTsKKy0JCXNjLT5lc2Nf
dGFwZmQgPSAtMTsKKy0JfQorLX0KKy0KKy1zdGF0aWMgaW50CistZTgyNTQ1X3BhcnNlbWFjKGNo
YXIgKm1hY19zdHIsIHVpbnQ4X3QgKm1hY19hZGRyKQorLXsKKy0Jc3RydWN0IGV0aGVyX2FkZHIg
KmVhOworLQljaGFyICp0bXBzdHI7CistCWNoYXIgemVyb19hZGRyW0VUSEVSX0FERFJfTEVOXSA9
IHsgMCwgMCwgMCwgMCwgMCwgMCB9OworLQorLQl0bXBzdHIgPSBzdHJzZXAoJm1hY19zdHIsIj0i
KTsKKy0JaWYgKChtYWNfc3RyICE9IE5VTEwpICYmICghc3RyY21wKHRtcHN0ciwibWFjIikpKSB7
CistCQllYSA9IGV0aGVyX2F0b24obWFjX3N0cik7CistCQlpZiAoZWEgPT0gTlVMTCB8fCBFVEhF
Ul9JU19NVUxUSUNBU1QoZWEtPm9jdGV0KSB8fAorLQkJICAgIG1lbWNtcChlYS0+b2N0ZXQsIHpl
cm9fYWRkciwgRVRIRVJfQUREUl9MRU4pID09IDApIHsKKy0JCQlmcHJpbnRmKHN0ZGVyciwgIklu
dmFsaWQgTUFDICVzXG4iLCBtYWNfc3RyKTsKKy0JCQlyZXR1cm4gKDEpOworLQkJfSBlbHNlCist
CQkJbWVtY3B5KG1hY19hZGRyLCBlYS0+b2N0ZXQsIEVUSEVSX0FERFJfTEVOKTsKKy0JfQorLQly
ZXR1cm4gKDApOworLX0KKy0KKyBzdGF0aWMgaW50CisgZTgyNTQ1X2luaXQoc3RydWN0IHZtY3R4
ICpjdHgsIHN0cnVjdCBwY2lfZGV2aW5zdCAqcGksIGNoYXIgKm9wdHMpCisgeworLQlEUFJJTlRG
KCJMb2FkaW5nIHdpdGggb3B0aW9uczogJXNcclxuIiwgb3B0cyk7CistCistCU1ENV9DVFggbWRj
dHg7CistCXVuc2lnbmVkIGNoYXIgZGlnZXN0WzE2XTsKKyAJY2hhciBuc3RyWzgwXTsKKyAJc3Ry
dWN0IGU4MjU0NV9zb2Z0YyAqc2M7CisgCWNoYXIgKmRldm5hbWU7CisgCWNoYXIgKnZ0b3B0czsK
KyAJaW50IG1hY19wcm92aWRlZDsKKyAKKysJRFBSSU5URigiTG9hZGluZyB3aXRoIG9wdGlvbnM6
ICVzXHJcbiIsIG9wdHMpOworKworIAkvKiBTZXR1cCBvdXIgc29mdGMgKi8KKyAJc2MgPSBjYWxs
b2Moc2l6ZW9mKCpzYyksIDEpOworIAorQEAgLTIzMDksMTEgKzIyNDUsMTAgQEAKKyAJCUU4MjU0
NV9CQVJfSU9fTEVOKTsKKyAKKyAJLyoKKy0JICogQXR0ZW1wdCB0byBvcGVuIHRoZSB0YXAgZGV2
aWNlIGFuZCByZWFkIHRoZSBNQUMgYWRkcmVzcworLQkgKiBpZiBzcGVjaWZpZWQuICBDb3BpZWQg
ZnJvbSB2aXJ0aW8tbmV0LCBzbGlnaHRseSBtb2RpZmllZC4KKysJICogQXR0ZW1wdCB0byBvcGVu
IHRoZSBiYWNrZW5kIGRldmljZSBhbmQgcmVhZCB0aGUgTUFDIGFkZHJlc3MKKysJICogaWYgc3Bl
Y2lmaWVkLiBDb3BpZWQgZnJvbSB2aXJ0aW8tbmV0LCBzbGlnaHRseSBtb2RpZmllZC4KKyAJICov
CisgCW1hY19wcm92aWRlZCA9IDA7CistCXNjLT5lc2NfdGFwZmQgPSAtMTsKKyAJaWYgKG9wdHMg
IT0gTlVMTCkgeworIAkJaW50IGVycjsKKyAKK0BAIC0yMzIxLDcgKzIyNTYsNyBAQAorIAkJKHZv
aWQpIHN0cnNlcCgmdnRvcHRzLCAiLCIpOworIAorIAkJaWYgKHZ0b3B0cyAhPSBOVUxMKSB7Cist
CQkJZXJyID0gZTgyNTQ1X3BhcnNlbWFjKHZ0b3B0cywgc2MtPmVzY19tYWMub2N0ZXQpOworKwkJ
CWVyciA9IG5ldF9wYXJzZW1hYyh2dG9wdHMsIHNjLT5lc2NfbWFjLm9jdGV0KTsKKyAJCQlpZiAo
ZXJyICE9IDApIHsKKyAJCQkJZnJlZShkZXZuYW1lKTsKKyAJCQkJcmV0dXJuIChlcnIpOworQEAg
LTIzMjksOSArMjI2NCwxMSBAQAorIAkJCW1hY19wcm92aWRlZCA9IDE7CisgCQl9CisgCistCQlp
ZiAoc3RybmNtcChkZXZuYW1lLCAidGFwIiwgMykgPT0gMCB8fAorLQkJICAgIHN0cm5jbXAoZGV2
bmFtZSwgInZtbmV0IiwgNSkgPT0gMCkKKy0JCQllODI1NDVfb3Blbl90YXAoc2MsIGRldm5hbWUp
OworKwkJc2MtPmVzY19iZSA9IG5ldGJlX2luaXQoZGV2bmFtZSwgZTgyNTQ1X3J4X2NhbGxiYWNr
LCBzYyk7CisrCQlpZiAoIXNjLT5lc2NfYmUpIHsKKysJCQlXUFJJTlRGKCJuZXQgYmFja2VuZCAn
JXMnIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKKysJCQkJZGV2bmFtZSk7CisrCQl9CisgCisg
CQlmcmVlKGRldm5hbWUpOworIAl9CitAQCAtMjM0MSwxOSArMjI3OCw3IEBACisgCSAqIGZvbGxv
d2VkIGJ5IGFuIE1ENSBvZiB0aGUgUENJIHNsb3QvZnVuYyBudW1iZXIgYW5kIGRldiBuYW1lCisg
CSAqLworIAlpZiAoIW1hY19wcm92aWRlZCkgeworLQkJc25wcmludGYobnN0ciwgc2l6ZW9mKG5z
dHIpLCAiJWQtJWQtJXMiLCBwaS0+cGlfc2xvdCwKKy0JCSAgICBwaS0+cGlfZnVuYywgdm1uYW1l
KTsKKy0KKy0JCU1ENUluaXQoJm1kY3R4KTsKKy0JCU1ENVVwZGF0ZSgmbWRjdHgsIG5zdHIsIHN0
cmxlbihuc3RyKSk7CistCQlNRDVGaW5hbChkaWdlc3QsICZtZGN0eCk7CistCistCQlzYy0+ZXNj
X21hYy5vY3RldFswXSA9IDB4MDA7CistCQlzYy0+ZXNjX21hYy5vY3RldFsxXSA9IDB4YTA7Cist
CQlzYy0+ZXNjX21hYy5vY3RldFsyXSA9IDB4OTg7CistCQlzYy0+ZXNjX21hYy5vY3RldFszXSA9
IGRpZ2VzdFswXTsKKy0JCXNjLT5lc2NfbWFjLm9jdGV0WzRdID0gZGlnZXN0WzFdOworLQkJc2Mt
PmVzY19tYWMub2N0ZXRbNV0gPSBkaWdlc3RbMl07CisrCQluZXRfZ2VubWFjKHBpLCBzYy0+ZXNj
X21hYy5vY3RldCk7CisgCX0KKyAKKyAJLyogSC93IGluaXRpYXRlZCByZXNldCAqLwpkaWZmIC11
IC1yIC1OIHVzci9zcmMvZXRjL3NyYy5jb25mIC91c3Ivc3JjL2V0Yy9zcmMuY29uZgotLS0gdXNy
L3NyYy9ldGMvc3JjLmNvbmYJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysr
IC91c3Ivc3JjL2V0Yy9zcmMuY29uZgkyMDE2LTEyLTAxIDEwOjA2OjE4LjAxMTQ2MzAwMCArMDAw
MApAQCAtMCwwICsxLDUgQEAKK1dJVEhfQ0xBTkc9IHllcworV0lUSF9DTEFOR19FWFRSQVM9IHll
cyAjIEJ1aWxkIGFkZGl0aW9uYWwgY2xhbmcgYW5kIGxsdm0gdG9vbHMsIHN1Y2ggYXMgYnVncG9p
bnQuCitXSVRIX0NMQU5HX0lTX0NDPSB5ZXMgICMgVXNlZnVsIGZvciBzb21lIGJ1aWxkd29ybGQg
ZXJyb3JzCisjIFdJVEhPVVRfR0NDPSB5ZXMKKwpkaWZmIC11IC1yIC1OIHVzci9zcmMvbGliL2xp
YnZtbWFwaS92bW1hcGkuYyAvdXNyL3NyYy9saWIvbGlidm1tYXBpL3ZtbWFwaS5jCi0tLSB1c3Iv
c3JjL2xpYi9saWJ2bW1hcGkvdm1tYXBpLmMJMjAxNi0wOS0yOSAwMDoyNjowMi4wMDAwMDAwMDAg
KzAxMDAKKysrIC91c3Ivc3JjL2xpYi9saWJ2bW1hcGkvdm1tYXBpLmMJMjAxNi0xMS0zMCAxMDo1
NjowNS43ODE2MTYwMDAgKzAwMDAKQEAgLTg4Miw2ICs4ODIsNTUgQEAKIAlyZXR1cm4gKGlvY3Rs
KGN0eC0+ZmQsIFZNX01BUF9QUFRERVZfTU1JTywgJnBwdG1taW8pKTsKIH0KIAorLyoKKyAqIEV4
cG9ydCB0aGUgZmlsZSBkZXNjcmlwdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFZNLCB1c2VyZnVs
IGZvciBleHRlcm5hbAorICogcHJvZ3JhbXMgKGUuZy4gdG8gaXNzdWUgaW9jdGwoKSkuCisgKi8K
K2ludAordm1fZ2V0X2ZkKHN0cnVjdCB2bWN0eCAqY3R4KQoreworCXJldHVybiAoY3R4LT5mZCk7
Cit9CisKKy8qCisgKiBNYXAgYW4gdXNlci1zcGFjZSBidWZmZXIgaW50byB0aGUgVk0gYXQgYSBn
aXZlbiBwaHlzaWNhbCBhZGRyZXNzLgorICogVG8gYmUgdXNlZCBmb3IgZGV2aWNlcyB0aGF0IGV4
cG9zZSBpbnRlcm5hbCBtZW1vcnkuCisgKi8KK2ludAordm1fbWFwX3VzZXJfYnVmKHN0cnVjdCB2
bWN0eCAqY3R4LCB2bV9wYWRkcl90IGdwYSwgc2l6ZV90IGxlbiwgdm9pZCAqaG9zdF9idWYpCit7
CisJc3RydWN0IHZtX3VzZXJfYnVmIHVzZXJfYnVmOworCisJYnplcm8oJnVzZXJfYnVmLCBzaXpl
b2YodXNlcl9idWYpKTsKKwl1c2VyX2J1Zi5ncGEgPSBncGE7CisJdXNlcl9idWYubGVuID0gbGVu
OworCXVzZXJfYnVmLmFkZHIgPSBob3N0X2J1ZjsKKworCXJldHVybiAoaW9jdGwoY3R4LT5mZCwg
Vk1fTUFQX1VTRVJfQlVGLCAmdXNlcl9idWYpKTsKK30KKworLyoKKyAqIFJlZ2lzdGVyIGhhbmRs
ZXIgZm9yIGd1ZXN0IEkvTyBhY2Nlc3NlcyBvbiBhIGdpdmVuIEkvTyBwb3J0LCBvcHRpb25hbGx5
CisgKiBmaWx0ZXJpbmcgb24gdGhlIGRhdGEuIFFFTVUvS1ZNIGltcGxlbWVudCBhIHNpbWlsYXIg
ZnVuY3Rpb25hbGl0eS4KKyAqLworaW50Cit2bV9pb19yZWdfaGFuZGxlcihzdHJ1Y3Qgdm1jdHgg
KmN0eCwgdWludDE2X3QgcG9ydCwgdWludDE2X3QgaW4sCisJCSAgdWludDMyX3QgbWFza19kYXRh
LCB1aW50MzJfdCBkYXRhLAorCQkgIGVudW0gdm1faW9fcmVnaF90eXBlIHR5cGUsIHZvaWQgKmFy
ZykKK3sKKwlzdHJ1Y3Qgdm1faW9fcmVnX2hhbmRsZXIgaW9yZWdoOworCisJYnplcm8oJmlvcmVn
aCwgc2l6ZW9mKGlvcmVnaCkpOworCWlvcmVnaC5wb3J0ID0gcG9ydDsKKwlpb3JlZ2guaW4gPSBp
bjsKKwlpb3JlZ2gubWFza19kYXRhID0gbWFza19kYXRhOworCWlvcmVnaC5kYXRhID0gZGF0YTsK
Kwlpb3JlZ2gudHlwZSA9IHR5cGU7CisJaW9yZWdoLmFyZyA9IGFyZzsKKworCXJldHVybiAoaW9j
dGwoY3R4LT5mZCwgVk1fSU9fUkVHX0hBTkRMRVIsICZpb3JlZ2gpKTsKK30KKwogaW50CiB2bV9z
ZXR1cF9wcHRkZXZfbXNpKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgaW50IGJ1cywgaW50
IHNsb3QsIGludCBmdW5jLAogICAgIHVpbnQ2NF90IGFkZHIsIHVpbnQ2NF90IG1zZywgaW50IG51
bXZlYykKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL2xpYi9saWJ2bW1hcGkvdm1tYXBpLmMub3JpZyAv
dXNyL3NyYy9saWIvbGlidm1tYXBpL3ZtbWFwaS5jLm9yaWcKLS0tIHVzci9zcmMvbGliL2xpYnZt
bWFwaS92bW1hcGkuYy5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisr
KyAvdXNyL3NyYy9saWIvbGlidm1tYXBpL3ZtbWFwaS5jLm9yaWcJMjAxNi0xMS0zMCAxMDo1Mjo1
MS43MDI2MjkwMDAgKzAwMDAKQEAgLTAsMCArMSwxNDEzIEBACisvKi0KKyAqIENvcHlyaWdodCAo
YykgMjAxMSBOZXRBcHAsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBORVRBUFAsIElOQyBgYEFTIElTJycg
QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIE5FVEFQUCwgSU5DIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4w
L2xpYi9saWJ2bW1hcGkvdm1tYXBpLmMgMjk1ODgxIDIwMTYtMDItMjIgMDk6MDQ6MzZaIHNrcmEg
JAorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogcmVs
ZW5nLzExLjAvbGliL2xpYnZtbWFwaS92bW1hcGkuYyAyOTU4ODEgMjAxNi0wMi0yMiAwOTowNDoz
Nlogc2tyYSAkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lz
Y3RsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNp
bmNsdWRlIDxzeXMvX2lvdmVjLmg+CisjaW5jbHVkZSA8c3lzL2NwdXNldC5oPgorCisjaW5jbHVk
ZSA8eDg2L3NlZ21lbnRzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9zcGVjaWFscmVnLmg+CisKKyNp
bmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+
CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmNu
dGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPGxpYnV0aWwuaD4KKworI2lu
Y2x1ZGUgPG1hY2hpbmUvdm1tLmg+CisjaW5jbHVkZSA8bWFjaGluZS92bW1fZGV2Lmg+CisKKyNp
bmNsdWRlICJ2bW1hcGkuaCIKKworI2RlZmluZQlNQgkoMTAyNCAqIDEwMjRVTCkKKyNkZWZpbmUJ
R0IJKDEwMjQgKiAxMDI0ICogMTAyNFVMKQorCisvKgorICogU2l6ZSBvZiB0aGUgZ3VhcmQgcmVn
aW9uIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZQorICogbWFwcGlu
ZyB0aGUgZ3Vlc3QgcGh5c2ljYWwgbWVtb3J5LiBUaGlzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0
aGUKKyAqIHN1cGVycGFnZSBzaXplIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgorICovCisjZGVm
aW5lCVZNX01NQVBfR1VBUkRfU0laRQkoNCAqIE1CKQorCisjZGVmaW5lCVBST1RfUlcJCShQUk9U
X1JFQUQgfCBQUk9UX1dSSVRFKQorI2RlZmluZQlQUk9UX0FMTAkoUFJPVF9SRUFEIHwgUFJPVF9X
UklURSB8IFBST1RfRVhFQykKKworc3RydWN0IHZtY3R4IHsKKwlpbnQJZmQ7CisJdWludDMyX3Qg
bG93bWVtX2xpbWl0OworCWludAltZW1mbGFnczsKKwlzaXplX3QJbG93bWVtOworCXNpemVfdAlo
aWdobWVtOworCWNoYXIJKmJhc2VhZGRyOworCWNoYXIJKm5hbWU7Cit9OworCisjZGVmaW5lCUNS
RUFURSh4KSAgc3lzY3RsYnluYW1lKCJody52bW0uY3JlYXRlIiwgTlVMTCwgTlVMTCwgKHgpLCBz
dHJsZW4oKHgpKSkKKyNkZWZpbmUJREVTVFJPWSh4KSBzeXNjdGxieW5hbWUoImh3LnZtbS5kZXN0
cm95IiwgTlVMTCwgTlVMTCwgKHgpLCBzdHJsZW4oKHgpKSkKKworc3RhdGljIGludAordm1fZGV2
aWNlX29wZW4oY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICAgICAgaW50IGZkLCBsZW47CisgICAg
ICAgIGNoYXIgKnZtZmlsZTsKKworCWxlbiA9IHN0cmxlbigiL2Rldi92bW0vIikgKyBzdHJsZW4o
bmFtZSkgKyAxOworCXZtZmlsZSA9IG1hbGxvYyhsZW4pOworCWFzc2VydCh2bWZpbGUgIT0gTlVM
TCk7CisJc25wcmludGYodm1maWxlLCBsZW4sICIvZGV2L3ZtbS8lcyIsIG5hbWUpOworCisgICAg
ICAgIC8qIE9wZW4gdGhlIGRldmljZSBmaWxlICovCisgICAgICAgIGZkID0gb3Blbih2bWZpbGUs
IE9fUkRXUiwgMCk7CisKKwlmcmVlKHZtZmlsZSk7CisgICAgICAgIHJldHVybiAoZmQpOworfQor
CitpbnQKK3ZtX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lKQoreworCisJcmV0dXJuIChDUkVBVEUo
KGNoYXIgKiluYW1lKSk7Cit9CisKK3N0cnVjdCB2bWN0eCAqCit2bV9vcGVuKGNvbnN0IGNoYXIg
Km5hbWUpCit7CisJc3RydWN0IHZtY3R4ICp2bTsKKworCXZtID0gbWFsbG9jKHNpemVvZihzdHJ1
Y3Qgdm1jdHgpICsgc3RybGVuKG5hbWUpICsgMSk7CisJYXNzZXJ0KHZtICE9IE5VTEwpOworCisJ
dm0tPmZkID0gLTE7CisJdm0tPm1lbWZsYWdzID0gMDsKKwl2bS0+bG93bWVtX2xpbWl0ID0gMyAq
IEdCOworCXZtLT5uYW1lID0gKGNoYXIgKikodm0gKyAxKTsKKwlzdHJjcHkodm0tPm5hbWUsIG5h
bWUpOworCisJaWYgKCh2bS0+ZmQgPSB2bV9kZXZpY2Vfb3Blbih2bS0+bmFtZSkpIDwgMCkKKwkJ
Z290byBlcnI7CisKKwlyZXR1cm4gKHZtKTsKK2VycjoKKwl2bV9kZXN0cm95KHZtKTsKKwlyZXR1
cm4gKE5VTEwpOworfQorCit2b2lkCit2bV9kZXN0cm95KHN0cnVjdCB2bWN0eCAqdm0pCit7CisJ
YXNzZXJ0KHZtICE9IE5VTEwpOworCisJaWYgKHZtLT5mZCA+PSAwKQorCQljbG9zZSh2bS0+ZmQp
OworCURFU1RST1kodm0tPm5hbWUpOworCisJZnJlZSh2bSk7Cit9CisKK2ludAordm1fcGFyc2Vf
bWVtc2l6ZShjb25zdCBjaGFyICpvcHRhcmcsIHNpemVfdCAqcmV0X21lbXNpemUpCit7CisJY2hh
ciAqZW5kcHRyOworCXNpemVfdCBvcHR2YWw7CisJaW50IGVycm9yOworCisJb3B0dmFsID0gc3Ry
dG91bChvcHRhcmcsICZlbmRwdHIsIDApOworCWlmICgqb3B0YXJnICE9ICdcMCcgJiYgKmVuZHB0
ciA9PSAnXDAnKSB7CisJCS8qCisJCSAqIEZvciB0aGUgc2FrZSBvZiBiYWNrd2FyZCBjb21wYXRp
YmlsaXR5IGlmIHRoZSBtZW1vcnkgc2l6ZQorCQkgKiBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQg
bGluZSBpcyBsZXNzIHRoYW4gYSBtZWdhYnl0ZSB0aGVuCisJCSAqIGl0IGlzIGludGVycHJldGVk
IGFzIGJlaW5nIGluIHVuaXRzIG9mIE1CLgorCQkgKi8KKwkJaWYgKG9wdHZhbCA8IE1CKQorCQkJ
b3B0dmFsICo9IE1COworCQkqcmV0X21lbXNpemUgPSBvcHR2YWw7CisJCWVycm9yID0gMDsKKwl9
IGVsc2UKKwkJZXJyb3IgPSBleHBhbmRfbnVtYmVyKG9wdGFyZywgcmV0X21lbXNpemUpOworCisJ
cmV0dXJuIChlcnJvcik7Cit9CisKK3VpbnQzMl90Cit2bV9nZXRfbG93bWVtX2xpbWl0KHN0cnVj
dCB2bWN0eCAqY3R4KQoreworCisJcmV0dXJuIChjdHgtPmxvd21lbV9saW1pdCk7Cit9CisKK3Zv
aWQKK3ZtX3NldF9sb3dtZW1fbGltaXQoc3RydWN0IHZtY3R4ICpjdHgsIHVpbnQzMl90IGxpbWl0
KQoreworCisJY3R4LT5sb3dtZW1fbGltaXQgPSBsaW1pdDsKK30KKwordm9pZAordm1fc2V0X21l
bWZsYWdzKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgZmxhZ3MpCit7CisKKwljdHgtPm1lbWZsYWdz
ID0gZmxhZ3M7Cit9CisKK2ludAordm1fZ2V0X21lbWZsYWdzKHN0cnVjdCB2bWN0eCAqY3R4KQor
eworCisJcmV0dXJuIChjdHgtPm1lbWZsYWdzKTsKK30KKworLyoKKyAqIE1hcCBzZWdtZW50ICdz
ZWdpZCcgc3RhcnRpbmcgYXQgJ29mZicgaW50byBndWVzdCBhZGRyZXNzIHJhbmdlIFtncGEsZ3Bh
K2xlbikuCisgKi8KK2ludAordm1fbW1hcF9tZW1zZWcoc3RydWN0IHZtY3R4ICpjdHgsIHZtX3Bh
ZGRyX3QgZ3BhLCBpbnQgc2VnaWQsIHZtX29vZmZzZXRfdCBvZmYsCisgICAgc2l6ZV90IGxlbiwg
aW50IHByb3QpCit7CisJc3RydWN0IHZtX21lbW1hcCBtZW1tYXA7CisJaW50IGVycm9yLCBmbGFn
czsKKworCW1lbW1hcC5ncGEgPSBncGE7CisJbWVtbWFwLnNlZ2lkID0gc2VnaWQ7CisJbWVtbWFw
LnNlZ29mZiA9IG9mZjsKKwltZW1tYXAubGVuID0gbGVuOworCW1lbW1hcC5wcm90ID0gcHJvdDsK
KwltZW1tYXAuZmxhZ3MgPSAwOworCisJaWYgKGN0eC0+bWVtZmxhZ3MgJiBWTV9NRU1fRl9XSVJF
RCkKKwkJbWVtbWFwLmZsYWdzIHw9IFZNX01FTU1BUF9GX1dJUkVEOworCisJLyoKKwkgKiBJZiB0
aGlzIG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgdGhlbiBkb24ndCBjcmVhdGUgaXQgYWdhaW4uIFRo
aXMKKwkgKiBpcyB0aGUgY29tbW9uIGNhc2UgZm9yIFNZU01FTSBtYXBwaW5ncyBjcmVhdGVkIGJ5
IGJoeXZlbG9hZCg4KS4KKwkgKi8KKwllcnJvciA9IHZtX21tYXBfZ2V0bmV4dChjdHgsICZncGEs
ICZzZWdpZCwgJm9mZiwgJmxlbiwgJnByb3QsICZmbGFncyk7CisJaWYgKGVycm9yID09IDAgJiYg
Z3BhID09IG1lbW1hcC5ncGEpIHsKKwkJaWYgKHNlZ2lkICE9IG1lbW1hcC5zZWdpZCB8fCBvZmYg
IT0gbWVtbWFwLnNlZ29mZiB8fAorCQkgICAgcHJvdCAhPSBtZW1tYXAucHJvdCB8fCBmbGFncyAh
PSBtZW1tYXAuZmxhZ3MpIHsKKwkJCWVycm5vID0gRUVYSVNUOworCQkJcmV0dXJuICgtMSk7CisJ
CX0gZWxzZSB7CisJCQlyZXR1cm4gKDApOworCQl9CisJfQorCisJZXJyb3IgPSBpb2N0bChjdHgt
PmZkLCBWTV9NTUFQX01FTVNFRywgJm1lbW1hcCk7CisJcmV0dXJuIChlcnJvcik7Cit9CisKK2lu
dAordm1fbW1hcF9nZXRuZXh0KHN0cnVjdCB2bWN0eCAqY3R4LCB2bV9wYWRkcl90ICpncGEsIGlu
dCAqc2VnaWQsCisgICAgdm1fb29mZnNldF90ICpzZWdvZmYsIHNpemVfdCAqbGVuLCBpbnQgKnBy
b3QsIGludCAqZmxhZ3MpCit7CisJc3RydWN0IHZtX21lbW1hcCBtZW1tYXA7CisJaW50IGVycm9y
OworCisJYnplcm8oJm1lbW1hcCwgc2l6ZW9mKHN0cnVjdCB2bV9tZW1tYXApKTsKKwltZW1tYXAu
Z3BhID0gKmdwYTsKKwllcnJvciA9IGlvY3RsKGN0eC0+ZmQsIFZNX01NQVBfR0VUTkVYVCwgJm1l
bW1hcCk7CisJaWYgKGVycm9yID09IDApIHsKKwkJKmdwYSA9IG1lbW1hcC5ncGE7CisJCSpzZWdp
ZCA9IG1lbW1hcC5zZWdpZDsKKwkJKnNlZ29mZiA9IG1lbW1hcC5zZWdvZmY7CisJCSpsZW4gPSBt
ZW1tYXAubGVuOworCQkqcHJvdCA9IG1lbW1hcC5wcm90OworCQkqZmxhZ3MgPSBtZW1tYXAuZmxh
Z3M7CisJfQorCXJldHVybiAoZXJyb3IpOworfQorCisvKgorICogUmV0dXJuIDAgaWYgdGhlIHNl
Z21lbnRzIGFyZSBpZGVudGljYWwgYW5kIG5vbi16ZXJvIG90aGVyd2lzZS4KKyAqCisgKiBUaGlz
IGlzIHNsaWdodGx5IGNvbXBsaWNhdGVkIGJ5IHRoZSBmYWN0IHRoYXQgb25seSBkZXZpY2UgbWVt
b3J5IHNlZ21lbnRzCisgKiBhcmUgbmFtZWQuCisgKi8KK3N0YXRpYyBpbnQKK2NtcHNlZyhzaXpl
X3QgbGVuLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4yLCBjb25zdCBjaGFyICpzdHIyKQor
eworCisJaWYgKGxlbiA9PSBsZW4yKSB7CisJCWlmICgoIXN0ciAmJiAhc3RyMikgfHwgKHN0ciAm
JiBzdHIyICYmICFzdHJjbXAoc3RyLCBzdHIyKSkpCisJCQlyZXR1cm4gKDApOworCX0KKwlyZXR1
cm4gKC0xKTsKK30KKworc3RhdGljIGludAordm1fYWxsb2NfbWVtc2VnKHN0cnVjdCB2bWN0eCAq
Y3R4LCBpbnQgc2VnaWQsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0
IHZtX21lbXNlZyBtZW1zZWc7CisJc2l6ZV90IG47CisJaW50IGVycm9yOworCisJLyoKKwkgKiBJ
ZiB0aGUgbWVtb3J5IHNlZ21lbnQgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIHRoZW4ganVzdCBy
ZXR1cm4uCisJICogVGhpcyBpcyB0aGUgdXN1YWwgY2FzZSBmb3IgdGhlIFNZU01FTSBzZWdtZW50
IGNyZWF0ZWQgYnkgdXNlcnNwYWNlCisJICogbG9hZGVycyBsaWtlIGJoeXZlbG9hZCg4KS4KKwkg
Ki8KKwllcnJvciA9IHZtX2dldF9tZW1zZWcoY3R4LCBzZWdpZCwgJm1lbXNlZy5sZW4sIG1lbXNl
Zy5uYW1lLAorCSAgICBzaXplb2YobWVtc2VnLm5hbWUpKTsKKwlpZiAoZXJyb3IpCisJCXJldHVy
biAoZXJyb3IpOworCisJaWYgKG1lbXNlZy5sZW4gIT0gMCkgeworCQlpZiAoY21wc2VnKGxlbiwg
bmFtZSwgbWVtc2VnLmxlbiwgVk1fTUVNU0VHX05BTUUoJm1lbXNlZykpKSB7CisJCQllcnJubyA9
IEVJTlZBTDsKKwkJCXJldHVybiAoLTEpOworCQl9IGVsc2UgeworCQkJcmV0dXJuICgwKTsKKwkJ
fQorCX0KKworCWJ6ZXJvKCZtZW1zZWcsIHNpemVvZihzdHJ1Y3Qgdm1fbWVtc2VnKSk7CisJbWVt
c2VnLnNlZ2lkID0gc2VnaWQ7CisJbWVtc2VnLmxlbiA9IGxlbjsKKwlpZiAobmFtZSAhPSBOVUxM
KSB7CisJCW4gPSBzdHJsY3B5KG1lbXNlZy5uYW1lLCBuYW1lLCBzaXplb2YobWVtc2VnLm5hbWUp
KTsKKwkJaWYgKG4gPj0gc2l6ZW9mKG1lbXNlZy5uYW1lKSkgeworCQkJZXJybm8gPSBFTkFNRVRP
T0xPTkc7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCX0KKworCWVycm9yID0gaW9jdGwoY3R4LT5m
ZCwgVk1fQUxMT0NfTUVNU0VHLCAmbWVtc2VnKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50
Cit2bV9nZXRfbWVtc2VnKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgc2VnaWQsIHNpemVfdCAqbGVu
cCwgY2hhciAqbmFtZWJ1ZiwKKyAgICBzaXplX3QgYnVmc2l6ZSkKK3sKKwlzdHJ1Y3Qgdm1fbWVt
c2VnIG1lbXNlZzsKKwlzaXplX3QgbjsKKwlpbnQgZXJyb3I7CisKKwltZW1zZWcuc2VnaWQgPSBz
ZWdpZDsKKwllcnJvciA9IGlvY3RsKGN0eC0+ZmQsIFZNX0dFVF9NRU1TRUcsICZtZW1zZWcpOwor
CWlmIChlcnJvciA9PSAwKSB7CisJCSpsZW5wID0gbWVtc2VnLmxlbjsKKwkJbiA9IHN0cmxjcHko
bmFtZWJ1ZiwgbWVtc2VnLm5hbWUsIGJ1ZnNpemUpOworCQlpZiAobiA+PSBidWZzaXplKSB7CisJ
CQllcnJubyA9IEVOQU1FVE9PTE9ORzsKKwkJCWVycm9yID0gLTE7CisJCX0KKwl9CisJcmV0dXJu
IChlcnJvcik7Cit9CisKK3N0YXRpYyBpbnQKK3NldHVwX21lbW9yeV9zZWdtZW50KHN0cnVjdCB2
bWN0eCAqY3R4LCB2bV9wYWRkcl90IGdwYSwgc2l6ZV90IGxlbiwgY2hhciAqYmFzZSkKK3sKKwlj
aGFyICpwdHI7CisJaW50IGVycm9yLCBmbGFnczsKKworCS8qIE1hcCAnbGVuJyBieXRlcyBzdGFy
dGluZyBhdCAnZ3BhJyBpbiB0aGUgZ3Vlc3QgYWRkcmVzcyBzcGFjZSAqLworCWVycm9yID0gdm1f
bW1hcF9tZW1zZWcoY3R4LCBncGEsIFZNX1NZU01FTSwgZ3BhLCBsZW4sIFBST1RfQUxMKTsKKwlp
ZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3IpOworCisJZmxhZ3MgPSBNQVBfU0hBUkVEIHwgTUFQ
X0ZJWEVEOworCWlmICgoY3R4LT5tZW1mbGFncyAmIFZNX01FTV9GX0lOQ09SRSkgPT0gMCkKKwkJ
ZmxhZ3MgfD0gTUFQX05PQ09SRTsKKworCS8qIG1tYXAgaW50byB0aGUgcHJvY2VzcyBhZGRyZXNz
IHNwYWNlIG9uIHRoZSBob3N0ICovCisJcHRyID0gbW1hcChiYXNlICsgZ3BhLCBsZW4sIFBST1Rf
UlcsIGZsYWdzLCBjdHgtPmZkLCBncGEpOworCWlmIChwdHIgPT0gTUFQX0ZBSUxFRCkKKwkJcmV0
dXJuICgtMSk7CisKKwlyZXR1cm4gKDApOworfQorCitpbnQKK3ZtX3NldHVwX21lbW9yeShzdHJ1
Y3Qgdm1jdHggKmN0eCwgc2l6ZV90IG1lbXNpemUsIGVudW0gdm1fbW1hcF9zdHlsZSB2bXMpCit7
CisJc2l6ZV90IG9ianNpemUsIGxlbjsKKwl2bV9wYWRkcl90IGdwYTsKKwljaGFyICpiYXNlYWRk
ciwgKnB0cjsKKwlpbnQgZXJyb3IsIGZsYWdzOworCisJYXNzZXJ0KHZtcyA9PSBWTV9NTUFQX0FM
TCk7CisKKwkvKgorCSAqIElmICdtZW1zaXplJyBjYW5ub3QgZml0IGVudGlyZWx5IGluIHRoZSAn
bG93bWVtJyBzZWdtZW50IHRoZW4KKwkgKiBjcmVhdGUgYW5vdGhlciAnaGlnaG1lbScgc2VnbWVu
dCBhYm92ZSA0R0IgZm9yIHRoZSByZW1haW5kZXIuCisJICovCisJaWYgKG1lbXNpemUgPiBjdHgt
Pmxvd21lbV9saW1pdCkgeworCQljdHgtPmxvd21lbSA9IGN0eC0+bG93bWVtX2xpbWl0OworCQlj
dHgtPmhpZ2htZW0gPSBtZW1zaXplIC0gY3R4LT5sb3dtZW1fbGltaXQ7CisJCW9ianNpemUgPSA0
KkdCICsgY3R4LT5oaWdobWVtOworCX0gZWxzZSB7CisJCWN0eC0+bG93bWVtID0gbWVtc2l6ZTsK
KwkJY3R4LT5oaWdobWVtID0gMDsKKwkJb2Jqc2l6ZSA9IGN0eC0+bG93bWVtOworCX0KKworCWVy
cm9yID0gdm1fYWxsb2NfbWVtc2VnKGN0eCwgVk1fU1lTTUVNLCBvYmpzaXplLCBOVUxMKTsKKwlp
ZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3IpOworCisJLyoKKwkgKiBTdGFrZSBvdXQgYSBjb250
aWd1b3VzIHJlZ2lvbiBjb3ZlcmluZyB0aGUgZ3Vlc3QgcGh5c2ljYWwgbWVtb3J5CisJICogYW5k
IHRoZSBhZGpvaW5pbmcgZ3VhcmQgcmVnaW9ucy4KKwkgKi8KKwlsZW4gPSBWTV9NTUFQX0dVQVJE
X1NJWkUgKyBvYmpzaXplICsgVk1fTU1BUF9HVUFSRF9TSVpFOworCWZsYWdzID0gTUFQX1BSSVZB
VEUgfCBNQVBfQU5PTiB8IE1BUF9OT0NPUkUgfCBNQVBfQUxJR05FRF9TVVBFUjsKKwlwdHIgPSBt
bWFwKE5VTEwsIGxlbiwgUFJPVF9OT05FLCBmbGFncywgLTEsIDApOworCWlmIChwdHIgPT0gTUFQ
X0ZBSUxFRCkKKwkJcmV0dXJuICgtMSk7CisKKwliYXNlYWRkciA9IHB0ciArIFZNX01NQVBfR1VB
UkRfU0laRTsKKwlpZiAoY3R4LT5oaWdobWVtID4gMCkgeworCQlncGEgPSA0KkdCOworCQlsZW4g
PSBjdHgtPmhpZ2htZW07CisJCWVycm9yID0gc2V0dXBfbWVtb3J5X3NlZ21lbnQoY3R4LCBncGEs
IGxlbiwgYmFzZWFkZHIpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gKGVycm9yKTsKKwl9CisK
KwlpZiAoY3R4LT5sb3dtZW0gPiAwKSB7CisJCWdwYSA9IDA7CisJCWxlbiA9IGN0eC0+bG93bWVt
OworCQllcnJvciA9IHNldHVwX21lbW9yeV9zZWdtZW50KGN0eCwgZ3BhLCBsZW4sIGJhc2VhZGRy
KTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIChlcnJvcik7CisJfQorCisJY3R4LT5iYXNlYWRk
ciA9IGJhc2VhZGRyOworCisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIFJldHVybnMgYSBub24t
TlVMTCBwb2ludGVyIGlmIFtnYWRkciwgZ2FkZHIrbGVuKSBpcyBlbnRpcmVseSBjb250YWluZWQg
aW4KKyAqIHRoZSBsb3dtZW0gb3IgaGlnaG1lbSByZWdpb25zLgorICoKKyAqIEluIHBhcnRpY3Vs
YXIgcmV0dXJuIE5VTEwgaWYgW2dhZGRyLCBnYWRkcitsZW4pIGZhbGxzIGluIGd1ZXN0IE1NSU8g
cmVnaW9uLgorICogVGhlIGluc3RydWN0aW9uIGVtdWxhdGlvbiBjb2RlIGRlcGVuZHMgb24gdGhp
cyBiZWhhdmlvci4KKyAqLwordm9pZCAqCit2bV9tYXBfZ3BhKHN0cnVjdCB2bWN0eCAqY3R4LCB2
bV9wYWRkcl90IGdhZGRyLCBzaXplX3QgbGVuKQoreworCisJaWYgKGN0eC0+bG93bWVtID4gMCkg
eworCQlpZiAoZ2FkZHIgPCBjdHgtPmxvd21lbSAmJiBnYWRkciArIGxlbiA8PSBjdHgtPmxvd21l
bSkKKwkJCXJldHVybiAoY3R4LT5iYXNlYWRkciArIGdhZGRyKTsKKwl9CisKKwlpZiAoY3R4LT5o
aWdobWVtID4gMCkgeworCQlpZiAoZ2FkZHIgPj0gNCpHQiAmJiBnYWRkciArIGxlbiA8PSA0KkdC
ICsgY3R4LT5oaWdobWVtKQorCQkJcmV0dXJuIChjdHgtPmJhc2VhZGRyICsgZ2FkZHIpOworCX0K
KworCXJldHVybiAoTlVMTCk7Cit9CisKK3NpemVfdAordm1fZ2V0X2xvd21lbV9zaXplKHN0cnVj
dCB2bWN0eCAqY3R4KQoreworCisJcmV0dXJuIChjdHgtPmxvd21lbSk7Cit9CisKK3NpemVfdAor
dm1fZ2V0X2hpZ2htZW1fc2l6ZShzdHJ1Y3Qgdm1jdHggKmN0eCkKK3sKKworCXJldHVybiAoY3R4
LT5oaWdobWVtKTsKK30KKwordm9pZCAqCit2bV9jcmVhdGVfZGV2bWVtKHN0cnVjdCB2bWN0eCAq
Y3R4LCBpbnQgc2VnaWQsIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pCit7CisJY2hhciBw
YXRobmFtZVtNQVhQQVRITEVOXTsKKwlzaXplX3QgbGVuMjsKKwljaGFyICpiYXNlLCAqcHRyOwor
CWludCBmZCwgZXJyb3IsIGZsYWdzOworCisJZmQgPSAtMTsKKwlwdHIgPSBNQVBfRkFJTEVEOwor
CWlmIChuYW1lID09IE5VTEwgfHwgc3RybGVuKG5hbWUpID09IDApIHsKKwkJZXJybm8gPSBFSU5W
QUw7CisJCWdvdG8gZG9uZTsKKwl9CisKKwllcnJvciA9IHZtX2FsbG9jX21lbXNlZyhjdHgsIHNl
Z2lkLCBsZW4sIG5hbWUpOworCWlmIChlcnJvcikKKwkJZ290byBkb25lOworCisJc3RybGNweShw
YXRobmFtZSwgIi9kZXYvdm1tLmlvLyIsIHNpemVvZihwYXRobmFtZSkpOworCXN0cmxjYXQocGF0
aG5hbWUsIGN0eC0+bmFtZSwgc2l6ZW9mKHBhdGhuYW1lKSk7CisJc3RybGNhdChwYXRobmFtZSwg
Ii4iLCBzaXplb2YocGF0aG5hbWUpKTsKKwlzdHJsY2F0KHBhdGhuYW1lLCBuYW1lLCBzaXplb2Yo
cGF0aG5hbWUpKTsKKworCWZkID0gb3BlbihwYXRobmFtZSwgT19SRFdSKTsKKwlpZiAoZmQgPCAw
KQorCQlnb3RvIGRvbmU7CisKKwkvKgorCSAqIFN0YWtlIG91dCBhIGNvbnRpZ3VvdXMgcmVnaW9u
IGNvdmVyaW5nIHRoZSBkZXZpY2UgbWVtb3J5IGFuZCB0aGUKKwkgKiBhZGpvaW5pbmcgZ3VhcmQg
cmVnaW9ucy4KKwkgKi8KKwlsZW4yID0gVk1fTU1BUF9HVUFSRF9TSVpFICsgbGVuICsgVk1fTU1B
UF9HVUFSRF9TSVpFOworCWZsYWdzID0gTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiB8IE1BUF9OT0NP
UkUgfCBNQVBfQUxJR05FRF9TVVBFUjsKKwliYXNlID0gbW1hcChOVUxMLCBsZW4yLCBQUk9UX05P
TkUsIGZsYWdzLCAtMSwgMCk7CisJaWYgKGJhc2UgPT0gTUFQX0ZBSUxFRCkKKwkJZ290byBkb25l
OworCisJZmxhZ3MgPSBNQVBfU0hBUkVEIHwgTUFQX0ZJWEVEOworCWlmICgoY3R4LT5tZW1mbGFn
cyAmIFZNX01FTV9GX0lOQ09SRSkgPT0gMCkKKwkJZmxhZ3MgfD0gTUFQX05PQ09SRTsKKworCS8q
IG1tYXAgdGhlIGRldm1lbSByZWdpb24gaW4gdGhlIGhvc3QgYWRkcmVzcyBzcGFjZSAqLworCXB0
ciA9IG1tYXAoYmFzZSArIFZNX01NQVBfR1VBUkRfU0laRSwgbGVuLCBQUk9UX1JXLCBmbGFncywg
ZmQsIDApOworZG9uZToKKwlpZiAoZmQgPj0gMCkKKwkJY2xvc2UoZmQpOworCXJldHVybiAocHRy
KTsKK30KKworaW50Cit2bV9zZXRfZGVzYyhzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGlu
dCByZWcsCisJICAgIHVpbnQ2NF90IGJhc2UsIHVpbnQzMl90IGxpbWl0LCB1aW50MzJfdCBhY2Nl
c3MpCit7CisJaW50IGVycm9yOworCXN0cnVjdCB2bV9zZWdfZGVzYyB2bXNlZ2Rlc2M7CisKKwli
emVybygmdm1zZWdkZXNjLCBzaXplb2Yodm1zZWdkZXNjKSk7CisJdm1zZWdkZXNjLmNwdWlkID0g
dmNwdTsKKwl2bXNlZ2Rlc2MucmVnbnVtID0gcmVnOworCXZtc2VnZGVzYy5kZXNjLmJhc2UgPSBi
YXNlOworCXZtc2VnZGVzYy5kZXNjLmxpbWl0ID0gbGltaXQ7CisJdm1zZWdkZXNjLmRlc2MuYWNj
ZXNzID0gYWNjZXNzOworCisJZXJyb3IgPSBpb2N0bChjdHgtPmZkLCBWTV9TRVRfU0VHTUVOVF9E
RVNDUklQVE9SLCAmdm1zZWdkZXNjKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50Cit2bV9n
ZXRfZGVzYyhzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGludCByZWcsCisJICAgIHVpbnQ2
NF90ICpiYXNlLCB1aW50MzJfdCAqbGltaXQsIHVpbnQzMl90ICphY2Nlc3MpCit7CisJaW50IGVy
cm9yOworCXN0cnVjdCB2bV9zZWdfZGVzYyB2bXNlZ2Rlc2M7CisKKwliemVybygmdm1zZWdkZXNj
LCBzaXplb2Yodm1zZWdkZXNjKSk7CisJdm1zZWdkZXNjLmNwdWlkID0gdmNwdTsKKwl2bXNlZ2Rl
c2MucmVnbnVtID0gcmVnOworCisJZXJyb3IgPSBpb2N0bChjdHgtPmZkLCBWTV9HRVRfU0VHTUVO
VF9ERVNDUklQVE9SLCAmdm1zZWdkZXNjKTsKKwlpZiAoZXJyb3IgPT0gMCkgeworCQkqYmFzZSA9
IHZtc2VnZGVzYy5kZXNjLmJhc2U7CisJCSpsaW1pdCA9IHZtc2VnZGVzYy5kZXNjLmxpbWl0Owor
CQkqYWNjZXNzID0gdm1zZWdkZXNjLmRlc2MuYWNjZXNzOworCX0KKwlyZXR1cm4gKGVycm9yKTsK
K30KKworaW50Cit2bV9nZXRfc2VnX2Rlc2Moc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBp
bnQgcmVnLCBzdHJ1Y3Qgc2VnX2Rlc2MgKnNlZ19kZXNjKQoreworCWludCBlcnJvcjsKKworCWVy
cm9yID0gdm1fZ2V0X2Rlc2MoY3R4LCB2Y3B1LCByZWcsICZzZWdfZGVzYy0+YmFzZSwgJnNlZ19k
ZXNjLT5saW1pdCwKKwkgICAgJnNlZ19kZXNjLT5hY2Nlc3MpOworCXJldHVybiAoZXJyb3IpOwor
fQorCitpbnQKK3ZtX3NldF9yZWdpc3RlcihzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGlu
dCByZWcsIHVpbnQ2NF90IHZhbCkKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0IHZtX3JlZ2lzdGVy
IHZtcmVnOworCisJYnplcm8oJnZtcmVnLCBzaXplb2Yodm1yZWcpKTsKKwl2bXJlZy5jcHVpZCA9
IHZjcHU7CisJdm1yZWcucmVnbnVtID0gcmVnOworCXZtcmVnLnJlZ3ZhbCA9IHZhbDsKKworCWVy
cm9yID0gaW9jdGwoY3R4LT5mZCwgVk1fU0VUX1JFR0lTVEVSLCAmdm1yZWcpOworCXJldHVybiAo
ZXJyb3IpOworfQorCitpbnQKK3ZtX2dldF9yZWdpc3RlcihzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50
IHZjcHUsIGludCByZWcsIHVpbnQ2NF90ICpyZXRfdmFsKQoreworCWludCBlcnJvcjsKKwlzdHJ1
Y3Qgdm1fcmVnaXN0ZXIgdm1yZWc7CisKKwliemVybygmdm1yZWcsIHNpemVvZih2bXJlZykpOwor
CXZtcmVnLmNwdWlkID0gdmNwdTsKKwl2bXJlZy5yZWdudW0gPSByZWc7CisKKwllcnJvciA9IGlv
Y3RsKGN0eC0+ZmQsIFZNX0dFVF9SRUdJU1RFUiwgJnZtcmVnKTsKKwkqcmV0X3ZhbCA9IHZtcmVn
LnJlZ3ZhbDsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50Cit2bV9ydW4oc3RydWN0IHZtY3R4
ICpjdHgsIGludCB2Y3B1LCBzdHJ1Y3Qgdm1fZXhpdCAqdm1leGl0KQoreworCWludCBlcnJvcjsK
KwlzdHJ1Y3Qgdm1fcnVuIHZtcnVuOworCisJYnplcm8oJnZtcnVuLCBzaXplb2Yodm1ydW4pKTsK
Kwl2bXJ1bi5jcHVpZCA9IHZjcHU7CisKKwllcnJvciA9IGlvY3RsKGN0eC0+ZmQsIFZNX1JVTiwg
JnZtcnVuKTsKKwliY29weSgmdm1ydW4udm1fZXhpdCwgdm1leGl0LCBzaXplb2Yoc3RydWN0IHZt
X2V4aXQpKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50Cit2bV9zdXNwZW5kKHN0cnVjdCB2
bWN0eCAqY3R4LCBlbnVtIHZtX3N1c3BlbmRfaG93IGhvdykKK3sKKwlzdHJ1Y3Qgdm1fc3VzcGVu
ZCB2bXN1c3BlbmQ7CisKKwliemVybygmdm1zdXNwZW5kLCBzaXplb2Yodm1zdXNwZW5kKSk7CisJ
dm1zdXNwZW5kLmhvdyA9IGhvdzsKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ZmQsIFZNX1NVU1BFTkQs
ICZ2bXN1c3BlbmQpKTsKK30KKworaW50Cit2bV9yZWluaXQoc3RydWN0IHZtY3R4ICpjdHgpCit7
CisKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ZmQsIFZNX1JFSU5JVCwgMCkpOworfQorCitpbnQKK3Zt
X2luamVjdF9leGNlcHRpb24oc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBpbnQgdmVjdG9y
LCBpbnQgZXJyY29kZV92YWxpZCwKKyAgICB1aW50MzJfdCBlcnJjb2RlLCBpbnQgcmVzdGFydF9p
bnN0cnVjdGlvbikKK3sKKwlzdHJ1Y3Qgdm1fZXhjZXB0aW9uIGV4YzsKKworCWV4Yy5jcHVpZCA9
IHZjcHU7CisJZXhjLnZlY3RvciA9IHZlY3RvcjsKKwlleGMuZXJyb3JfY29kZSA9IGVycmNvZGU7
CisJZXhjLmVycm9yX2NvZGVfdmFsaWQgPSBlcnJjb2RlX3ZhbGlkOworCWV4Yy5yZXN0YXJ0X2lu
c3RydWN0aW9uID0gcmVzdGFydF9pbnN0cnVjdGlvbjsKKworCXJldHVybiAoaW9jdGwoY3R4LT5m
ZCwgVk1fSU5KRUNUX0VYQ0VQVElPTiwgJmV4YykpOworfQorCitpbnQKK3ZtX2FwaWNpZDJ2Y3B1
KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgYXBpY2lkKQoreworCS8qCisJICogVGhlIGFwaWMgaWQg
YXNzb2NpYXRlZCB3aXRoIHRoZSAndmNwdScgaGFzIHRoZSBzYW1lIG51bWVyaWNhbCB2YWx1ZQor
CSAqIGFzIHRoZSAndmNwdScgaXRzZWxmLgorCSAqLworCXJldHVybiAoYXBpY2lkKTsKK30KKwor
aW50Cit2bV9sYXBpY19pcnEoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBpbnQgdmVjdG9y
KQoreworCXN0cnVjdCB2bV9sYXBpY19pcnEgdm1pcnE7CisKKwliemVybygmdm1pcnEsIHNpemVv
Zih2bWlycSkpOworCXZtaXJxLmNwdWlkID0gdmNwdTsKKwl2bWlycS52ZWN0b3IgPSB2ZWN0b3I7
CisKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ZmQsIFZNX0xBUElDX0lSUSwgJnZtaXJxKSk7Cit9CisK
K2ludAordm1fbGFwaWNfbG9jYWxfaXJxKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgaW50
IHZlY3RvcikKK3sKKwlzdHJ1Y3Qgdm1fbGFwaWNfaXJxIHZtaXJxOworCisJYnplcm8oJnZtaXJx
LCBzaXplb2Yodm1pcnEpKTsKKwl2bWlycS5jcHVpZCA9IHZjcHU7CisJdm1pcnEudmVjdG9yID0g
dmVjdG9yOworCisJcmV0dXJuIChpb2N0bChjdHgtPmZkLCBWTV9MQVBJQ19MT0NBTF9JUlEsICZ2
bWlycSkpOworfQorCitpbnQKK3ZtX2xhcGljX21zaShzdHJ1Y3Qgdm1jdHggKmN0eCwgdWludDY0
X3QgYWRkciwgdWludDY0X3QgbXNnKQoreworCXN0cnVjdCB2bV9sYXBpY19tc2kgdm1tc2k7CisK
KwliemVybygmdm1tc2ksIHNpemVvZih2bW1zaSkpOworCXZtbXNpLmFkZHIgPSBhZGRyOworCXZt
bXNpLm1zZyA9IG1zZzsKKworCXJldHVybiAoaW9jdGwoY3R4LT5mZCwgVk1fTEFQSUNfTVNJLCAm
dm1tc2kpKTsKK30KKworaW50Cit2bV9pb2FwaWNfYXNzZXJ0X2lycShzdHJ1Y3Qgdm1jdHggKmN0
eCwgaW50IGlycSkKK3sKKwlzdHJ1Y3Qgdm1faW9hcGljX2lycSBpb2FwaWNfaXJxOworCisJYnpl
cm8oJmlvYXBpY19pcnEsIHNpemVvZihzdHJ1Y3Qgdm1faW9hcGljX2lycSkpOworCWlvYXBpY19p
cnEuaXJxID0gaXJxOworCisJcmV0dXJuIChpb2N0bChjdHgtPmZkLCBWTV9JT0FQSUNfQVNTRVJU
X0lSUSwgJmlvYXBpY19pcnEpKTsKK30KKworaW50Cit2bV9pb2FwaWNfZGVhc3NlcnRfaXJxKHN0
cnVjdCB2bWN0eCAqY3R4LCBpbnQgaXJxKQoreworCXN0cnVjdCB2bV9pb2FwaWNfaXJxIGlvYXBp
Y19pcnE7CisKKwliemVybygmaW9hcGljX2lycSwgc2l6ZW9mKHN0cnVjdCB2bV9pb2FwaWNfaXJx
KSk7CisJaW9hcGljX2lycS5pcnEgPSBpcnE7CisKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ZmQsIFZN
X0lPQVBJQ19ERUFTU0VSVF9JUlEsICZpb2FwaWNfaXJxKSk7Cit9CisKK2ludAordm1faW9hcGlj
X3B1bHNlX2lycShzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IGlycSkKK3sKKwlzdHJ1Y3Qgdm1faW9h
cGljX2lycSBpb2FwaWNfaXJxOworCisJYnplcm8oJmlvYXBpY19pcnEsIHNpemVvZihzdHJ1Y3Qg
dm1faW9hcGljX2lycSkpOworCWlvYXBpY19pcnEuaXJxID0gaXJxOworCisJcmV0dXJuIChpb2N0
bChjdHgtPmZkLCBWTV9JT0FQSUNfUFVMU0VfSVJRLCAmaW9hcGljX2lycSkpOworfQorCitpbnQK
K3ZtX2lvYXBpY19waW5jb3VudChzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50ICpwaW5jb3VudCkKK3sK
KworCXJldHVybiAoaW9jdGwoY3R4LT5mZCwgVk1fSU9BUElDX1BJTkNPVU5ULCBwaW5jb3VudCkp
OworfQorCitpbnQKK3ZtX2lzYV9hc3NlcnRfaXJxKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgYXRw
aWNfaXJxLCBpbnQgaW9hcGljX2lycSkKK3sKKwlzdHJ1Y3Qgdm1faXNhX2lycSBpc2FfaXJxOwor
CisJYnplcm8oJmlzYV9pcnEsIHNpemVvZihzdHJ1Y3Qgdm1faXNhX2lycSkpOworCWlzYV9pcnEu
YXRwaWNfaXJxID0gYXRwaWNfaXJxOworCWlzYV9pcnEuaW9hcGljX2lycSA9IGlvYXBpY19pcnE7
CisKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ZmQsIFZNX0lTQV9BU1NFUlRfSVJRLCAmaXNhX2lycSkp
OworfQorCitpbnQKK3ZtX2lzYV9kZWFzc2VydF9pcnEoc3RydWN0IHZtY3R4ICpjdHgsIGludCBh
dHBpY19pcnEsIGludCBpb2FwaWNfaXJxKQoreworCXN0cnVjdCB2bV9pc2FfaXJxIGlzYV9pcnE7
CisKKwliemVybygmaXNhX2lycSwgc2l6ZW9mKHN0cnVjdCB2bV9pc2FfaXJxKSk7CisJaXNhX2ly
cS5hdHBpY19pcnEgPSBhdHBpY19pcnE7CisJaXNhX2lycS5pb2FwaWNfaXJxID0gaW9hcGljX2ly
cTsKKworCXJldHVybiAoaW9jdGwoY3R4LT5mZCwgVk1fSVNBX0RFQVNTRVJUX0lSUSwgJmlzYV9p
cnEpKTsKK30KKworaW50Cit2bV9pc2FfcHVsc2VfaXJxKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQg
YXRwaWNfaXJxLCBpbnQgaW9hcGljX2lycSkKK3sKKwlzdHJ1Y3Qgdm1faXNhX2lycSBpc2FfaXJx
OworCisJYnplcm8oJmlzYV9pcnEsIHNpemVvZihzdHJ1Y3Qgdm1faXNhX2lycSkpOworCWlzYV9p
cnEuYXRwaWNfaXJxID0gYXRwaWNfaXJxOworCWlzYV9pcnEuaW9hcGljX2lycSA9IGlvYXBpY19p
cnE7CisKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ZmQsIFZNX0lTQV9QVUxTRV9JUlEsICZpc2FfaXJx
KSk7Cit9CisKK2ludAordm1faXNhX3NldF9pcnFfdHJpZ2dlcihzdHJ1Y3Qgdm1jdHggKmN0eCwg
aW50IGF0cGljX2lycSwKKyAgICBlbnVtIHZtX2ludHJfdHJpZ2dlciB0cmlnZ2VyKQoreworCXN0
cnVjdCB2bV9pc2FfaXJxX3RyaWdnZXIgaXNhX2lycV90cmlnZ2VyOworCisJYnplcm8oJmlzYV9p
cnFfdHJpZ2dlciwgc2l6ZW9mKHN0cnVjdCB2bV9pc2FfaXJxX3RyaWdnZXIpKTsKKwlpc2FfaXJx
X3RyaWdnZXIuYXRwaWNfaXJxID0gYXRwaWNfaXJxOworCWlzYV9pcnFfdHJpZ2dlci50cmlnZ2Vy
ID0gdHJpZ2dlcjsKKworCXJldHVybiAoaW9jdGwoY3R4LT5mZCwgVk1fSVNBX1NFVF9JUlFfVFJJ
R0dFUiwgJmlzYV9pcnFfdHJpZ2dlcikpOworfQorCitpbnQKK3ZtX2luamVjdF9ubWkoc3RydWN0
IHZtY3R4ICpjdHgsIGludCB2Y3B1KQoreworCXN0cnVjdCB2bV9ubWkgdm1ubWk7CisKKwliemVy
bygmdm1ubWksIHNpemVvZih2bW5taSkpOworCXZtbm1pLmNwdWlkID0gdmNwdTsKKworCXJldHVy
biAoaW9jdGwoY3R4LT5mZCwgVk1fSU5KRUNUX05NSSwgJnZtbm1pKSk7Cit9CisKK3N0YXRpYyBz
dHJ1Y3QgeworCWNvbnN0IGNoYXIJKm5hbWU7CisJaW50CQl0eXBlOworfSBjYXBzdHJtYXBbXSA9
IHsKKwl7ICJobHRfZXhpdCIsCQlWTV9DQVBfSEFMVF9FWElUIH0sCisJeyAibXRyYXBfZXhpdCIs
CQlWTV9DQVBfTVRSQVBfRVhJVCB9LAorCXsgInBhdXNlX2V4aXQiLAkJVk1fQ0FQX1BBVVNFX0VY
SVQgfSwKKwl7ICJ1bnJlc3RyaWN0ZWRfZ3Vlc3QiLAlWTV9DQVBfVU5SRVNUUklDVEVEX0dVRVNU
IH0sCisJeyAiZW5hYmxlX2ludnBjaWQiLAlWTV9DQVBfRU5BQkxFX0lOVlBDSUQgfSwKKwl7IDAg
fQorfTsKKworaW50Cit2bV9jYXBhYmlsaXR5X25hbWUydHlwZShjb25zdCBjaGFyICpjYXBuYW1l
KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgY2Fwc3RybWFwW2ldLm5hbWUgIT0gTlVMTCAm
JiBjYXBuYW1lICE9IE5VTEw7IGkrKykgeworCQlpZiAoc3RyY21wKGNhcHN0cm1hcFtpXS5uYW1l
LCBjYXBuYW1lKSA9PSAwKQorCQkJcmV0dXJuIChjYXBzdHJtYXBbaV0udHlwZSk7CisJfQorCisJ
cmV0dXJuICgtMSk7Cit9CisKK2NvbnN0IGNoYXIgKgordm1fY2FwYWJpbGl0eV90eXBlMm5hbWUo
aW50IHR5cGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBjYXBzdHJtYXBbaV0ubmFtZSAh
PSBOVUxMOyBpKyspIHsKKwkJaWYgKGNhcHN0cm1hcFtpXS50eXBlID09IHR5cGUpCisJCQlyZXR1
cm4gKGNhcHN0cm1hcFtpXS5uYW1lKTsKKwl9CisKKwlyZXR1cm4gKE5VTEwpOworfQorCitpbnQK
K3ZtX2dldF9jYXBhYmlsaXR5KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgZW51bSB2bV9j
YXBfdHlwZSBjYXAsCisJCSAgaW50ICpyZXR2YWwpCit7CisJaW50IGVycm9yOworCXN0cnVjdCB2
bV9jYXBhYmlsaXR5IHZtY2FwOworCisJYnplcm8oJnZtY2FwLCBzaXplb2Yodm1jYXApKTsKKwl2
bWNhcC5jcHVpZCA9IHZjcHU7CisJdm1jYXAuY2FwdHlwZSA9IGNhcDsKKworCWVycm9yID0gaW9j
dGwoY3R4LT5mZCwgVk1fR0VUX0NBUEFCSUxJVFksICZ2bWNhcCk7CisJKnJldHZhbCA9IHZtY2Fw
LmNhcHZhbDsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50Cit2bV9zZXRfY2FwYWJpbGl0eShz
dHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGVudW0gdm1fY2FwX3R5cGUgY2FwLCBpbnQgdmFs
KQoreworCXN0cnVjdCB2bV9jYXBhYmlsaXR5IHZtY2FwOworCisJYnplcm8oJnZtY2FwLCBzaXpl
b2Yodm1jYXApKTsKKwl2bWNhcC5jcHVpZCA9IHZjcHU7CisJdm1jYXAuY2FwdHlwZSA9IGNhcDsK
Kwl2bWNhcC5jYXB2YWwgPSB2YWw7CisJCisJcmV0dXJuIChpb2N0bChjdHgtPmZkLCBWTV9TRVRf
Q0FQQUJJTElUWSwgJnZtY2FwKSk7Cit9CisKK2ludAordm1fYXNzaWduX3BwdGRldihzdHJ1Y3Qg
dm1jdHggKmN0eCwgaW50IGJ1cywgaW50IHNsb3QsIGludCBmdW5jKQoreworCXN0cnVjdCB2bV9w
cHRkZXYgcHB0ZGV2OworCisJYnplcm8oJnBwdGRldiwgc2l6ZW9mKHBwdGRldikpOworCXBwdGRl
di5idXMgPSBidXM7CisJcHB0ZGV2LnNsb3QgPSBzbG90OworCXBwdGRldi5mdW5jID0gZnVuYzsK
KworCXJldHVybiAoaW9jdGwoY3R4LT5mZCwgVk1fQklORF9QUFRERVYsICZwcHRkZXYpKTsKK30K
KworaW50Cit2bV91bmFzc2lnbl9wcHRkZXYoc3RydWN0IHZtY3R4ICpjdHgsIGludCBidXMsIGlu
dCBzbG90LCBpbnQgZnVuYykKK3sKKwlzdHJ1Y3Qgdm1fcHB0ZGV2IHBwdGRldjsKKworCWJ6ZXJv
KCZwcHRkZXYsIHNpemVvZihwcHRkZXYpKTsKKwlwcHRkZXYuYnVzID0gYnVzOworCXBwdGRldi5z
bG90ID0gc2xvdDsKKwlwcHRkZXYuZnVuYyA9IGZ1bmM7CisKKwlyZXR1cm4gKGlvY3RsKGN0eC0+
ZmQsIFZNX1VOQklORF9QUFRERVYsICZwcHRkZXYpKTsKK30KKworaW50Cit2bV9tYXBfcHB0ZGV2
X21taW8oc3RydWN0IHZtY3R4ICpjdHgsIGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYywKKwkJ
ICAgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4sIHZtX3BhZGRyX3QgaHBhKQoreworCXN0cnVj
dCB2bV9wcHRkZXZfbW1pbyBwcHRtbWlvOworCisJYnplcm8oJnBwdG1taW8sIHNpemVvZihwcHRt
bWlvKSk7CisJcHB0bW1pby5idXMgPSBidXM7CisJcHB0bW1pby5zbG90ID0gc2xvdDsKKwlwcHRt
bWlvLmZ1bmMgPSBmdW5jOworCXBwdG1taW8uZ3BhID0gZ3BhOworCXBwdG1taW8ubGVuID0gbGVu
OworCXBwdG1taW8uaHBhID0gaHBhOworCisJcmV0dXJuIChpb2N0bChjdHgtPmZkLCBWTV9NQVBf
UFBUREVWX01NSU8sICZwcHRtbWlvKSk7Cit9CisKK2ludAordm1fc2V0dXBfcHB0ZGV2X21zaShz
dHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYywK
KyAgICB1aW50NjRfdCBhZGRyLCB1aW50NjRfdCBtc2csIGludCBudW12ZWMpCit7CisJc3RydWN0
IHZtX3BwdGRldl9tc2kgcHB0bXNpOworCisJYnplcm8oJnBwdG1zaSwgc2l6ZW9mKHBwdG1zaSkp
OworCXBwdG1zaS52Y3B1ID0gdmNwdTsKKwlwcHRtc2kuYnVzID0gYnVzOworCXBwdG1zaS5zbG90
ID0gc2xvdDsKKwlwcHRtc2kuZnVuYyA9IGZ1bmM7CisJcHB0bXNpLm1zZyA9IG1zZzsKKwlwcHRt
c2kuYWRkciA9IGFkZHI7CisJcHB0bXNpLm51bXZlYyA9IG51bXZlYzsKKworCXJldHVybiAoaW9j
dGwoY3R4LT5mZCwgVk1fUFBUREVWX01TSSwgJnBwdG1zaSkpOworfQorCitpbnQJCit2bV9zZXR1
cF9wcHRkZXZfbXNpeChzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGludCBidXMsIGludCBz
bG90LCBpbnQgZnVuYywKKyAgICBpbnQgaWR4LCB1aW50NjRfdCBhZGRyLCB1aW50NjRfdCBtc2cs
IHVpbnQzMl90IHZlY3Rvcl9jb250cm9sKQoreworCXN0cnVjdCB2bV9wcHRkZXZfbXNpeCBwcHRt
c2l4OworCisJYnplcm8oJnBwdG1zaXgsIHNpemVvZihwcHRtc2l4KSk7CisJcHB0bXNpeC52Y3B1
ID0gdmNwdTsKKwlwcHRtc2l4LmJ1cyA9IGJ1czsKKwlwcHRtc2l4LnNsb3QgPSBzbG90OworCXBw
dG1zaXguZnVuYyA9IGZ1bmM7CisJcHB0bXNpeC5pZHggPSBpZHg7CisJcHB0bXNpeC5tc2cgPSBt
c2c7CisJcHB0bXNpeC5hZGRyID0gYWRkcjsKKwlwcHRtc2l4LnZlY3Rvcl9jb250cm9sID0gdmVj
dG9yX2NvbnRyb2w7CisKKwlyZXR1cm4gaW9jdGwoY3R4LT5mZCwgVk1fUFBUREVWX01TSVgsICZw
cHRtc2l4KTsKK30KKwordWludDY0X3QgKgordm1fZ2V0X3N0YXRzKHN0cnVjdCB2bWN0eCAqY3R4
LCBpbnQgdmNwdSwgc3RydWN0IHRpbWV2YWwgKnJldF90diwKKwkgICAgIGludCAqcmV0X2VudHJp
ZXMpCit7CisJaW50IGVycm9yOworCisJc3RhdGljIHN0cnVjdCB2bV9zdGF0cyB2bXN0YXRzOwor
CisJdm1zdGF0cy5jcHVpZCA9IHZjcHU7CisKKwllcnJvciA9IGlvY3RsKGN0eC0+ZmQsIFZNX1NU
QVRTLCAmdm1zdGF0cyk7CisJaWYgKGVycm9yID09IDApIHsKKwkJaWYgKHJldF9lbnRyaWVzKQor
CQkJKnJldF9lbnRyaWVzID0gdm1zdGF0cy5udW1fZW50cmllczsKKwkJaWYgKHJldF90dikKKwkJ
CSpyZXRfdHYgPSB2bXN0YXRzLnR2OworCQlyZXR1cm4gKHZtc3RhdHMuc3RhdGJ1Zik7CisJfSBl
bHNlCisJCXJldHVybiAoTlVMTCk7Cit9CisKK2NvbnN0IGNoYXIgKgordm1fZ2V0X3N0YXRfZGVz
YyhzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IGluZGV4KQoreworCXN0YXRpYyBzdHJ1Y3Qgdm1fc3Rh
dF9kZXNjIHN0YXRkZXNjOworCisJc3RhdGRlc2MuaW5kZXggPSBpbmRleDsKKwlpZiAoaW9jdGwo
Y3R4LT5mZCwgVk1fU1RBVF9ERVNDLCAmc3RhdGRlc2MpID09IDApCisJCXJldHVybiAoc3RhdGRl
c2MuZGVzYyk7CisJZWxzZQorCQlyZXR1cm4gKE5VTEwpOworfQorCitpbnQKK3ZtX2dldF94MmFw
aWNfc3RhdGUoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBlbnVtIHgyYXBpY19zdGF0ZSAq
c3RhdGUpCit7CisJaW50IGVycm9yOworCXN0cnVjdCB2bV94MmFwaWMgeDJhcGljOworCisJYnpl
cm8oJngyYXBpYywgc2l6ZW9mKHgyYXBpYykpOworCXgyYXBpYy5jcHVpZCA9IHZjcHU7CisKKwll
cnJvciA9IGlvY3RsKGN0eC0+ZmQsIFZNX0dFVF9YMkFQSUNfU1RBVEUsICZ4MmFwaWMpOworCSpz
dGF0ZSA9IHgyYXBpYy5zdGF0ZTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50Cit2bV9zZXRf
eDJhcGljX3N0YXRlKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgZW51bSB4MmFwaWNfc3Rh
dGUgc3RhdGUpCit7CisJaW50IGVycm9yOworCXN0cnVjdCB2bV94MmFwaWMgeDJhcGljOworCisJ
Ynplcm8oJngyYXBpYywgc2l6ZW9mKHgyYXBpYykpOworCXgyYXBpYy5jcHVpZCA9IHZjcHU7CisJ
eDJhcGljLnN0YXRlID0gc3RhdGU7CisKKwllcnJvciA9IGlvY3RsKGN0eC0+ZmQsIFZNX1NFVF9Y
MkFQSUNfU1RBVEUsICZ4MmFwaWMpOworCisJcmV0dXJuIChlcnJvcik7Cit9CisKKy8qCisgKiBG
cm9tIEludGVsIFZvbCAzYToKKyAqIFRhYmxlIDktMS4gSUEtMzIgUHJvY2Vzc29yIFN0YXRlcyBG
b2xsb3dpbmcgUG93ZXItdXAsIFJlc2V0IG9yIElOSVQKKyAqLworaW50Cit2Y3B1X3Jlc2V0KHN0
cnVjdCB2bWN0eCAqdm1jdHgsIGludCB2Y3B1KQoreworCWludCBlcnJvcjsKKwl1aW50NjRfdCBy
ZmxhZ3MsIHJpcCwgY3IwLCBjcjQsIHplcm8sIGRlc2NfYmFzZSwgcmR4OworCXVpbnQzMl90IGRl
c2NfYWNjZXNzLCBkZXNjX2xpbWl0OworCXVpbnQxNl90IHNlbDsKKworCXplcm8gPSAwOworCisJ
cmZsYWdzID0gMHgyOworCWVycm9yID0gdm1fc2V0X3JlZ2lzdGVyKHZtY3R4LCB2Y3B1LCBWTV9S
RUdfR1VFU1RfUkZMQUdTLCByZmxhZ3MpOworCWlmIChlcnJvcikKKwkJZ290byBkb25lOworCisJ
cmlwID0gMHhmZmYwOworCWlmICgoZXJyb3IgPSB2bV9zZXRfcmVnaXN0ZXIodm1jdHgsIHZjcHUs
IFZNX1JFR19HVUVTVF9SSVAsIHJpcCkpICE9IDApCisJCWdvdG8gZG9uZTsKKworCWNyMCA9IENS
MF9ORTsKKwlpZiAoKGVycm9yID0gdm1fc2V0X3JlZ2lzdGVyKHZtY3R4LCB2Y3B1LCBWTV9SRUdf
R1VFU1RfQ1IwLCBjcjApKSAhPSAwKQorCQlnb3RvIGRvbmU7CisKKwlpZiAoKGVycm9yID0gdm1f
c2V0X3JlZ2lzdGVyKHZtY3R4LCB2Y3B1LCBWTV9SRUdfR1VFU1RfQ1IzLCB6ZXJvKSkgIT0gMCkK
KwkJZ290byBkb25lOworCQorCWNyNCA9IDA7CisJaWYgKChlcnJvciA9IHZtX3NldF9yZWdpc3Rl
cih2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX0NSNCwgY3I0KSkgIT0gMCkKKwkJZ290byBkb25l
OworCisJLyoKKwkgKiBDUzogcHJlc2VudCwgci93LCBhY2Nlc3NlZCwgMTYtYml0LCBieXRlIGdy
YW51bGFyaXR5LCB1c2FibGUKKwkgKi8KKwlkZXNjX2Jhc2UgPSAweGZmZmYwMDAwOworCWRlc2Nf
bGltaXQgPSAweGZmZmY7CisJZGVzY19hY2Nlc3MgPSAweDAwOTM7CisJZXJyb3IgPSB2bV9zZXRf
ZGVzYyh2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX0NTLAorCQkJICAgIGRlc2NfYmFzZSwgZGVz
Y19saW1pdCwgZGVzY19hY2Nlc3MpOworCWlmIChlcnJvcikKKwkJZ290byBkb25lOworCisJc2Vs
ID0gMHhmMDAwOworCWlmICgoZXJyb3IgPSB2bV9zZXRfcmVnaXN0ZXIodm1jdHgsIHZjcHUsIFZN
X1JFR19HVUVTVF9DUywgc2VsKSkgIT0gMCkKKwkJZ290byBkb25lOworCisJLyoKKwkgKiBTUyxE
UyxFUyxGUyxHUzogcHJlc2VudCwgci93LCBhY2Nlc3NlZCwgMTYtYml0LCBieXRlIGdyYW51bGFy
aXR5CisJICovCisJZGVzY19iYXNlID0gMDsKKwlkZXNjX2xpbWl0ID0gMHhmZmZmOworCWRlc2Nf
YWNjZXNzID0gMHgwMDkzOworCWVycm9yID0gdm1fc2V0X2Rlc2Modm1jdHgsIHZjcHUsIFZNX1JF
R19HVUVTVF9TUywKKwkJCSAgICBkZXNjX2Jhc2UsIGRlc2NfbGltaXQsIGRlc2NfYWNjZXNzKTsK
KwlpZiAoZXJyb3IpCisJCWdvdG8gZG9uZTsKKworCWVycm9yID0gdm1fc2V0X2Rlc2Modm1jdHgs
IHZjcHUsIFZNX1JFR19HVUVTVF9EUywKKwkJCSAgICBkZXNjX2Jhc2UsIGRlc2NfbGltaXQsIGRl
c2NfYWNjZXNzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZG9uZTsKKworCWVycm9yID0gdm1fc2V0
X2Rlc2Modm1jdHgsIHZjcHUsIFZNX1JFR19HVUVTVF9FUywKKwkJCSAgICBkZXNjX2Jhc2UsIGRl
c2NfbGltaXQsIGRlc2NfYWNjZXNzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZG9uZTsKKworCWVy
cm9yID0gdm1fc2V0X2Rlc2Modm1jdHgsIHZjcHUsIFZNX1JFR19HVUVTVF9GUywKKwkJCSAgICBk
ZXNjX2Jhc2UsIGRlc2NfbGltaXQsIGRlc2NfYWNjZXNzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8g
ZG9uZTsKKworCWVycm9yID0gdm1fc2V0X2Rlc2Modm1jdHgsIHZjcHUsIFZNX1JFR19HVUVTVF9H
UywKKwkJCSAgICBkZXNjX2Jhc2UsIGRlc2NfbGltaXQsIGRlc2NfYWNjZXNzKTsKKwlpZiAoZXJy
b3IpCisJCWdvdG8gZG9uZTsKKworCXNlbCA9IDA7CisJaWYgKChlcnJvciA9IHZtX3NldF9yZWdp
c3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX1NTLCBzZWwpKSAhPSAwKQorCQlnb3RvIGRv
bmU7CisJaWYgKChlcnJvciA9IHZtX3NldF9yZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dV
RVNUX0RTLCBzZWwpKSAhPSAwKQorCQlnb3RvIGRvbmU7CisJaWYgKChlcnJvciA9IHZtX3NldF9y
ZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX0VTLCBzZWwpKSAhPSAwKQorCQlnb3Rv
IGRvbmU7CisJaWYgKChlcnJvciA9IHZtX3NldF9yZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVH
X0dVRVNUX0ZTLCBzZWwpKSAhPSAwKQorCQlnb3RvIGRvbmU7CisJaWYgKChlcnJvciA9IHZtX3Nl
dF9yZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX0dTLCBzZWwpKSAhPSAwKQorCQln
b3RvIGRvbmU7CisKKwkvKiBHZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzICovCisJcmR4ID0gMHhm
MDA7CisJaWYgKChlcnJvciA9IHZtX3NldF9yZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dV
RVNUX1JBWCwgemVybykpICE9IDApCisJCWdvdG8gZG9uZTsKKwlpZiAoKGVycm9yID0gdm1fc2V0
X3JlZ2lzdGVyKHZtY3R4LCB2Y3B1LCBWTV9SRUdfR1VFU1RfUkJYLCB6ZXJvKSkgIT0gMCkKKwkJ
Z290byBkb25lOworCWlmICgoZXJyb3IgPSB2bV9zZXRfcmVnaXN0ZXIodm1jdHgsIHZjcHUsIFZN
X1JFR19HVUVTVF9SQ1gsIHplcm8pKSAhPSAwKQorCQlnb3RvIGRvbmU7CisJaWYgKChlcnJvciA9
IHZtX3NldF9yZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX1JEWCwgcmR4KSkgIT0g
MCkKKwkJZ290byBkb25lOworCWlmICgoZXJyb3IgPSB2bV9zZXRfcmVnaXN0ZXIodm1jdHgsIHZj
cHUsIFZNX1JFR19HVUVTVF9SU0ksIHplcm8pKSAhPSAwKQorCQlnb3RvIGRvbmU7CisJaWYgKChl
cnJvciA9IHZtX3NldF9yZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX1JESSwgemVy
bykpICE9IDApCisJCWdvdG8gZG9uZTsKKwlpZiAoKGVycm9yID0gdm1fc2V0X3JlZ2lzdGVyKHZt
Y3R4LCB2Y3B1LCBWTV9SRUdfR1VFU1RfUkJQLCB6ZXJvKSkgIT0gMCkKKwkJZ290byBkb25lOwor
CWlmICgoZXJyb3IgPSB2bV9zZXRfcmVnaXN0ZXIodm1jdHgsIHZjcHUsIFZNX1JFR19HVUVTVF9S
U1AsIHplcm8pKSAhPSAwKQorCQlnb3RvIGRvbmU7CisKKwkvKiBHRFRSLCBJRFRSICovCisJZGVz
Y19iYXNlID0gMDsKKwlkZXNjX2xpbWl0ID0gMHhmZmZmOworCWRlc2NfYWNjZXNzID0gMDsKKwll
cnJvciA9IHZtX3NldF9kZXNjKHZtY3R4LCB2Y3B1LCBWTV9SRUdfR1VFU1RfR0RUUiwKKwkJCSAg
ICBkZXNjX2Jhc2UsIGRlc2NfbGltaXQsIGRlc2NfYWNjZXNzKTsKKwlpZiAoZXJyb3IgIT0gMCkK
KwkJZ290byBkb25lOworCisJZXJyb3IgPSB2bV9zZXRfZGVzYyh2bWN0eCwgdmNwdSwgVk1fUkVH
X0dVRVNUX0lEVFIsCisJCQkgICAgZGVzY19iYXNlLCBkZXNjX2xpbWl0LCBkZXNjX2FjY2Vzcyk7
CisJaWYgKGVycm9yICE9IDApCisJCWdvdG8gZG9uZTsKKworCS8qIFRSICovCisJZGVzY19iYXNl
ID0gMDsKKwlkZXNjX2xpbWl0ID0gMHhmZmZmOworCWRlc2NfYWNjZXNzID0gMHgwMDAwMDA4YjsK
KwllcnJvciA9IHZtX3NldF9kZXNjKHZtY3R4LCB2Y3B1LCBWTV9SRUdfR1VFU1RfVFIsIDAsIDAs
IGRlc2NfYWNjZXNzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZG9uZTsKKworCXNlbCA9IDA7CisJ
aWYgKChlcnJvciA9IHZtX3NldF9yZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX1RS
LCBzZWwpKSAhPSAwKQorCQlnb3RvIGRvbmU7CisKKwkvKiBMRFRSICovCisJZGVzY19iYXNlID0g
MDsKKwlkZXNjX2xpbWl0ID0gMHhmZmZmOworCWRlc2NfYWNjZXNzID0gMHgwMDAwMDA4MjsKKwll
cnJvciA9IHZtX3NldF9kZXNjKHZtY3R4LCB2Y3B1LCBWTV9SRUdfR1VFU1RfTERUUiwgZGVzY19i
YXNlLAorCQkJICAgIGRlc2NfbGltaXQsIGRlc2NfYWNjZXNzKTsKKwlpZiAoZXJyb3IpCisJCWdv
dG8gZG9uZTsKKworCXNlbCA9IDA7CisJaWYgKChlcnJvciA9IHZtX3NldF9yZWdpc3Rlcih2bWN0
eCwgdmNwdSwgVk1fUkVHX0dVRVNUX0xEVFIsIDApKSAhPSAwKQorCQlnb3RvIGRvbmU7CisKKwkv
KiBYWFggY3IyLCBkZWJ1ZyByZWdpc3RlcnMgKi8KKworCWVycm9yID0gMDsKK2RvbmU6CisJcmV0
dXJuIChlcnJvcik7Cit9CisKK2ludAordm1fZ2V0X2dwYV9wbWFwKHN0cnVjdCB2bWN0eCAqY3R4
LCB1aW50NjRfdCBncGEsIHVpbnQ2NF90ICpwdGUsIGludCAqbnVtKQoreworCWludCBlcnJvciwg
aTsKKwlzdHJ1Y3Qgdm1fZ3BhX3B0ZSBncGFwdGU7CisKKwliemVybygmZ3BhcHRlLCBzaXplb2Yo
Z3BhcHRlKSk7CisJZ3BhcHRlLmdwYSA9IGdwYTsKKworCWVycm9yID0gaW9jdGwoY3R4LT5mZCwg
Vk1fR0VUX0dQQV9QTUFQLCAmZ3BhcHRlKTsKKworCWlmIChlcnJvciA9PSAwKSB7CisJCSpudW0g
PSBncGFwdGUucHRlbnVtOworCQlmb3IgKGkgPSAwOyBpIDwgZ3BhcHRlLnB0ZW51bTsgaSsrKQor
CQkJcHRlW2ldID0gZ3BhcHRlLnB0ZVtpXTsKKwl9CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKwor
aW50Cit2bV9nZXRfaHBldF9jYXBhYmlsaXRpZXMoc3RydWN0IHZtY3R4ICpjdHgsIHVpbnQzMl90
ICpjYXBhYmlsaXRpZXMpCit7CisJaW50IGVycm9yOworCXN0cnVjdCB2bV9ocGV0X2NhcCBjYXA7
CisKKwliemVybygmY2FwLCBzaXplb2Yoc3RydWN0IHZtX2hwZXRfY2FwKSk7CisJZXJyb3IgPSBp
b2N0bChjdHgtPmZkLCBWTV9HRVRfSFBFVF9DQVBBQklMSVRJRVMsICZjYXApOworCWlmIChjYXBh
YmlsaXRpZXMgIT0gTlVMTCkKKwkJKmNhcGFiaWxpdGllcyA9IGNhcC5jYXBhYmlsaXRpZXM7CisJ
cmV0dXJuIChlcnJvcik7Cit9CisKK2ludAordm1fZ2xhMmdwYShzdHJ1Y3Qgdm1jdHggKmN0eCwg
aW50IHZjcHUsIHN0cnVjdCB2bV9ndWVzdF9wYWdpbmcgKnBhZ2luZywKKyAgICB1aW50NjRfdCBn
bGEsIGludCBwcm90LCB1aW50NjRfdCAqZ3BhLCBpbnQgKmZhdWx0KQoreworCXN0cnVjdCB2bV9n
bGEyZ3BhIGdnOworCWludCBlcnJvcjsKKworCWJ6ZXJvKCZnZywgc2l6ZW9mKHN0cnVjdCB2bV9n
bGEyZ3BhKSk7CisJZ2cudmNwdWlkID0gdmNwdTsKKwlnZy5wcm90ID0gcHJvdDsKKwlnZy5nbGEg
PSBnbGE7CisJZ2cucGFnaW5nID0gKnBhZ2luZzsKKworCWVycm9yID0gaW9jdGwoY3R4LT5mZCwg
Vk1fR0xBMkdQQSwgJmdnKTsKKwlpZiAoZXJyb3IgPT0gMCkgeworCQkqZmF1bHQgPSBnZy5mYXVs
dDsKKwkJKmdwYSA9IGdnLmdwYTsKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisKKyNpZm5kZWYg
bWluCisjZGVmaW5lCW1pbihhLGIpCSgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKKyNlbmRpZgor
CitpbnQKK3ZtX2NvcHlfc2V0dXAoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBzdHJ1Y3Qg
dm1fZ3Vlc3RfcGFnaW5nICpwYWdpbmcsCisgICAgdWludDY0X3QgZ2xhLCBzaXplX3QgbGVuLCBp
bnQgcHJvdCwgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQsCisgICAgaW50ICpmYXVsdCkK
K3sKKwl2b2lkICp2YTsKKwl1aW50NjRfdCBncGE7CisJaW50IGVycm9yLCBpLCBuLCBvZmY7CisK
Kwlmb3IgKGkgPSAwOyBpIDwgaW92Y250OyBpKyspIHsKKwkJaW92W2ldLmlvdl9iYXNlID0gMDsK
KwkJaW92W2ldLmlvdl9sZW4gPSAwOworCX0KKworCXdoaWxlIChsZW4pIHsKKwkJYXNzZXJ0KGlv
dmNudCA+IDApOworCQllcnJvciA9IHZtX2dsYTJncGEoY3R4LCB2Y3B1LCBwYWdpbmcsIGdsYSwg
cHJvdCwgJmdwYSwgZmF1bHQpOworCQlpZiAoZXJyb3IgfHwgKmZhdWx0KQorCQkJcmV0dXJuIChl
cnJvcik7CisKKwkJb2ZmID0gZ3BhICYgUEFHRV9NQVNLOworCQluID0gbWluKGxlbiwgUEFHRV9T
SVpFIC0gb2ZmKTsKKworCQl2YSA9IHZtX21hcF9ncGEoY3R4LCBncGEsIG4pOworCQlpZiAodmEg
PT0gTlVMTCkKKwkJCXJldHVybiAoRUZBVUxUKTsKKworCQlpb3YtPmlvdl9iYXNlID0gdmE7CisJ
CWlvdi0+aW92X2xlbiA9IG47CisJCWlvdisrOworCQlpb3ZjbnQtLTsKKworCQlnbGEgKz0gbjsK
KwkJbGVuIC09IG47CisJfQorCXJldHVybiAoMCk7Cit9CisKK3ZvaWQKK3ZtX2NvcHlfdGVhcmRv
d24oc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlv
dmNudCkKK3sKKworCXJldHVybjsKK30KKwordm9pZAordm1fY29weWluKHN0cnVjdCB2bWN0eCAq
Y3R4LCBpbnQgdmNwdSwgc3RydWN0IGlvdmVjICppb3YsIHZvaWQgKnZwLCBzaXplX3QgbGVuKQor
eworCWNvbnN0IGNoYXIgKnNyYzsKKwljaGFyICpkc3Q7CisJc2l6ZV90IG47CisKKwlkc3QgPSB2
cDsKKwl3aGlsZSAobGVuKSB7CisJCWFzc2VydChpb3YtPmlvdl9sZW4pOworCQluID0gbWluKGxl
biwgaW92LT5pb3ZfbGVuKTsKKwkJc3JjID0gaW92LT5pb3ZfYmFzZTsKKwkJYmNvcHkoc3JjLCBk
c3QsIG4pOworCisJCWlvdisrOworCQlkc3QgKz0gbjsKKwkJbGVuIC09IG47CisJfQorfQorCit2
b2lkCit2bV9jb3B5b3V0KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgY29uc3Qgdm9pZCAq
dnAsIHN0cnVjdCBpb3ZlYyAqaW92LAorICAgIHNpemVfdCBsZW4pCit7CisJY29uc3QgY2hhciAq
c3JjOworCWNoYXIgKmRzdDsKKwlzaXplX3QgbjsKKworCXNyYyA9IHZwOworCXdoaWxlIChsZW4p
IHsKKwkJYXNzZXJ0KGlvdi0+aW92X2xlbik7CisJCW4gPSBtaW4obGVuLCBpb3YtPmlvdl9sZW4p
OworCQlkc3QgPSBpb3YtPmlvdl9iYXNlOworCQliY29weShzcmMsIGRzdCwgbik7CisKKwkJaW92
Kys7CisJCXNyYyArPSBuOworCQlsZW4gLT0gbjsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3ZtX2dl
dF9jcHVzKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgd2hpY2gsIGNwdXNldF90ICpjcHVzKQorewor
CXN0cnVjdCB2bV9jcHVzZXQgdm1fY3B1c2V0OworCWludCBlcnJvcjsKKworCWJ6ZXJvKCZ2bV9j
cHVzZXQsIHNpemVvZihzdHJ1Y3Qgdm1fY3B1c2V0KSk7CisJdm1fY3B1c2V0LndoaWNoID0gd2hp
Y2g7CisJdm1fY3B1c2V0LmNwdXNldHNpemUgPSBzaXplb2YoY3B1c2V0X3QpOworCXZtX2NwdXNl
dC5jcHVzID0gY3B1czsKKworCWVycm9yID0gaW9jdGwoY3R4LT5mZCwgVk1fR0VUX0NQVVMsICZ2
bV9jcHVzZXQpOworCXJldHVybiAoZXJyb3IpOworfQorCitpbnQKK3ZtX2FjdGl2ZV9jcHVzKHN0
cnVjdCB2bWN0eCAqY3R4LCBjcHVzZXRfdCAqY3B1cykKK3sKKworCXJldHVybiAodm1fZ2V0X2Nw
dXMoY3R4LCBWTV9BQ1RJVkVfQ1BVUywgY3B1cykpOworfQorCitpbnQKK3ZtX3N1c3BlbmRlZF9j
cHVzKHN0cnVjdCB2bWN0eCAqY3R4LCBjcHVzZXRfdCAqY3B1cykKK3sKKworCXJldHVybiAodm1f
Z2V0X2NwdXMoY3R4LCBWTV9TVVNQRU5ERURfQ1BVUywgY3B1cykpOworfQorCitpbnQKK3ZtX2Fj
dGl2YXRlX2NwdShzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUpCit7CisJc3RydWN0IHZtX2Fj
dGl2YXRlX2NwdSBhYzsKKwlpbnQgZXJyb3I7CisKKwliemVybygmYWMsIHNpemVvZihzdHJ1Y3Qg
dm1fYWN0aXZhdGVfY3B1KSk7CisJYWMudmNwdWlkID0gdmNwdTsKKwllcnJvciA9IGlvY3RsKGN0
eC0+ZmQsIFZNX0FDVElWQVRFX0NQVSwgJmFjKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50
Cit2bV9nZXRfaW50aW5mbyhzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIHVpbnQ2NF90ICpp
bmZvMSwgdWludDY0X3QgKmluZm8yKQoreworCXN0cnVjdCB2bV9pbnRpbmZvIHZtaWk7CisJaW50
IGVycm9yOworCisJYnplcm8oJnZtaWksIHNpemVvZihzdHJ1Y3Qgdm1faW50aW5mbykpOworCXZt
aWkudmNwdWlkID0gdmNwdTsKKwllcnJvciA9IGlvY3RsKGN0eC0+ZmQsIFZNX0dFVF9JTlRJTkZP
LCAmdm1paSk7CisJaWYgKGVycm9yID09IDApIHsKKwkJKmluZm8xID0gdm1paS5pbmZvMTsKKwkJ
KmluZm8yID0gdm1paS5pbmZvMjsKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisKK2ludAordm1f
c2V0X2ludGluZm8oc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCB1aW50NjRfdCBpbmZvMSkK
K3sKKwlzdHJ1Y3Qgdm1faW50aW5mbyB2bWlpOworCWludCBlcnJvcjsKKworCWJ6ZXJvKCZ2bWlp
LCBzaXplb2Yoc3RydWN0IHZtX2ludGluZm8pKTsKKwl2bWlpLnZjcHVpZCA9IHZjcHU7CisJdm1p
aS5pbmZvMSA9IGluZm8xOworCWVycm9yID0gaW9jdGwoY3R4LT5mZCwgVk1fU0VUX0lOVElORk8s
ICZ2bWlpKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50Cit2bV9ydGNfd3JpdGUoc3RydWN0
IHZtY3R4ICpjdHgsIGludCBvZmZzZXQsIHVpbnQ4X3QgdmFsdWUpCit7CisJc3RydWN0IHZtX3J0
Y19kYXRhIHJ0Y2RhdGE7CisJaW50IGVycm9yOworCisJYnplcm8oJnJ0Y2RhdGEsIHNpemVvZihz
dHJ1Y3Qgdm1fcnRjX2RhdGEpKTsKKwlydGNkYXRhLm9mZnNldCA9IG9mZnNldDsKKwlydGNkYXRh
LnZhbHVlID0gdmFsdWU7CisJZXJyb3IgPSBpb2N0bChjdHgtPmZkLCBWTV9SVENfV1JJVEUsICZy
dGNkYXRhKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50Cit2bV9ydGNfcmVhZChzdHJ1Y3Qg
dm1jdHggKmN0eCwgaW50IG9mZnNldCwgdWludDhfdCAqcmV0dmFsKQoreworCXN0cnVjdCB2bV9y
dGNfZGF0YSBydGNkYXRhOworCWludCBlcnJvcjsKKworCWJ6ZXJvKCZydGNkYXRhLCBzaXplb2Yo
c3RydWN0IHZtX3J0Y19kYXRhKSk7CisJcnRjZGF0YS5vZmZzZXQgPSBvZmZzZXQ7CisJZXJyb3Ig
PSBpb2N0bChjdHgtPmZkLCBWTV9SVENfUkVBRCwgJnJ0Y2RhdGEpOworCWlmIChlcnJvciA9PSAw
KQorCQkqcmV0dmFsID0gcnRjZGF0YS52YWx1ZTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50
Cit2bV9ydGNfc2V0dGltZShzdHJ1Y3Qgdm1jdHggKmN0eCwgdGltZV90IHNlY3MpCit7CisJc3Ry
dWN0IHZtX3J0Y190aW1lIHJ0Y3RpbWU7CisJaW50IGVycm9yOworCisJYnplcm8oJnJ0Y3RpbWUs
IHNpemVvZihzdHJ1Y3Qgdm1fcnRjX3RpbWUpKTsKKwlydGN0aW1lLnNlY3MgPSBzZWNzOworCWVy
cm9yID0gaW9jdGwoY3R4LT5mZCwgVk1fUlRDX1NFVFRJTUUsICZydGN0aW1lKTsKKwlyZXR1cm4g
KGVycm9yKTsKK30KKworaW50Cit2bV9ydGNfZ2V0dGltZShzdHJ1Y3Qgdm1jdHggKmN0eCwgdGlt
ZV90ICpzZWNzKQoreworCXN0cnVjdCB2bV9ydGNfdGltZSBydGN0aW1lOworCWludCBlcnJvcjsK
KworCWJ6ZXJvKCZydGN0aW1lLCBzaXplb2Yoc3RydWN0IHZtX3J0Y190aW1lKSk7CisJZXJyb3Ig
PSBpb2N0bChjdHgtPmZkLCBWTV9SVENfR0VUVElNRSwgJnJ0Y3RpbWUpOworCWlmIChlcnJvciA9
PSAwKQorCQkqc2VjcyA9IHJ0Y3RpbWUuc2VjczsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50
Cit2bV9yZXN0YXJ0X2luc3RydWN0aW9uKHZvaWQgKmFyZywgaW50IHZjcHUpCit7CisJc3RydWN0
IHZtY3R4ICpjdHggPSBhcmc7CisKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ZmQsIFZNX1JFU1RBUlRf
SU5TVFJVQ1RJT04sICZ2Y3B1KSk7Cit9CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9saWIvbGlidm1t
YXBpL3ZtbWFwaS5oIC91c3Ivc3JjL2xpYi9saWJ2bW1hcGkvdm1tYXBpLmgKLS0tIHVzci9zcmMv
bGliL2xpYnZtbWFwaS92bW1hcGkuaAkyMDE2LTA5LTI5IDAwOjI2OjAyLjAwMDAwMDAwMCArMDEw
MAorKysgL3Vzci9zcmMvbGliL2xpYnZtbWFwaS92bW1hcGkuaAkyMDE2LTExLTMwIDEwOjU2OjA1
Ljc4MzAzNjAwMCArMDAwMApAQCAtMTYyLDYgKzE2MiwxMSBAQAogaW50CXZtX2dldF9pbnRpbmZv
KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgdWludDY0X3QgKmkxLCB1aW50NjRfdCAqaTIp
OwogaW50CXZtX3NldF9pbnRpbmZvKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgdWludDY0
X3QgZXhpdF9pbnRpbmZvKTsKIAorLyogVGhlIG5leHQgdGhyZWUgZnVuY3Rpb25zIGFyZSBkb2N1
bWVudGVkIGluIHZtbWFwaS5jICovCitpbnQJdm1fZ2V0X2ZkKHN0cnVjdCB2bWN0eCAqY3R4KTsK
K2ludAl2bV9tYXBfdXNlcl9idWYoc3RydWN0IHZtY3R4ICpjdHgsIHZtX3BhZGRyX3QgZ3BhLCBz
aXplX3QgbGVuLCB2b2lkICpob3N0X2J1Zik7CitpbnQJdm1faW9fcmVnX2hhbmRsZXIoc3RydWN0
IHZtY3R4ICpjdHgsIHVpbnQxNl90IHBvcnQsIHVpbnQxNl90IGluLAorCSAgICB1aW50MzJfdCBt
YXNrX2RhdGEsIHVpbnQzMl90IGRhdGEsIGVudW0gdm1faW9fcmVnaF90eXBlIHR5cGUsIHZvaWQg
KmFyZyk7CiAvKgogICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc3RhdGlzdGljcyBidWZmZXIu
IE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBNVC1zYWZlLgogICovCmRpZmYgLXUgLXIgLU4gdXNyL3Ny
Yy9saWIvbGlidm1tYXBpL3ZtbWFwaS5oLm9yaWcgL3Vzci9zcmMvbGliL2xpYnZtbWFwaS92bW1h
cGkuaC5vcmlnCi0tLSB1c3Ivc3JjL2xpYi9saWJ2bW1hcGkvdm1tYXBpLmgub3JpZwkxOTcwLTAx
LTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvbGliL2xpYnZtbWFwaS92
bW1hcGkuaC5vcmlnCTIwMTYtMTEtMzAgMTA6NTI6NTMuMTI0MzIxMDAwICswMDAwCkBAIC0wLDAg
KzEsMjE5IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBOZXRBcHAsIEluYy4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBORVRBUFAsIElOQyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIE5F
VEFQUCwgSU5DIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0Uu
CisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL2xpYi9saWJ2bW1hcGkvdm1tYXBpLmggMjk4
ODk2IDIwMTYtMDUtMDEgMTk6Mzc6MzNaIHBmZyAkCisgKi8KKworI2lmbmRlZiBfVk1NQVBJX0hf
CisjZGVmaW5lCV9WTU1BUElfSF8KKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUg
PHN5cy9jcHVzZXQuaD4KKworLyoKKyAqIEFQSSB2ZXJzaW9uIGZvciBvdXQtb2YtdHJlZSBjb25z
dW1lcnMgbGlrZSBncnViLWJoeXZlIGZvciBtYWtpbmcgY29tcGlsZQorICogdGltZSBkZWNpc2lv
bnMuCisgKi8KKyNkZWZpbmUJVk1NQVBJX1ZFUlNJT04JMDEwMgkvKiAyIGRpZ2l0IG1ham9yIGZv
bGxvd2VkIGJ5IDIgZGlnaXQgbWlub3IgKi8KKworc3RydWN0IGlvdmVjOworc3RydWN0IHZtY3R4
OworZW51bSB4MmFwaWNfc3RhdGU7CisKKy8qCisgKiBEaWZmZXJlbnQgc3R5bGVzIG9mIG1hcHBp
bmcgdGhlIG1lbW9yeSBhc3NpZ25lZCB0byBhIFZNIGludG8gdGhlIGFkZHJlc3MKKyAqIHNwYWNl
IG9mIHRoZSBjb250cm9sbGluZyBwcm9jZXNzLgorICovCitlbnVtIHZtX21tYXBfc3R5bGUgewor
CVZNX01NQVBfTk9ORSwJCS8qIG5vIG1hcHBpbmcgKi8KKwlWTV9NTUFQX0FMTCwJCS8qIGZ1bGx5
IGFuZCBzdGF0aWNhbGx5IG1hcHBlZCAqLworCVZNX01NQVBfU1BBUlNFLAkJLyogbWFwcGluZ3Mg
Y3JlYXRlZCBvbi1kZW1hbmQgKi8KK307CisKKy8qCisgKiAnZmxhZ3MnIHZhbHVlIHBhc3NlZCB0
byAndm1fc2V0X21lbWZsYWdzKCknLgorICovCisjZGVmaW5lCVZNX01FTV9GX0lOQ09SRQkweDAx
CS8qIGluY2x1ZGUgZ3Vlc3QgbWVtb3J5IGluIGNvcmUgZmlsZSAqLworI2RlZmluZQlWTV9NRU1f
Rl9XSVJFRAkweDAyCS8qIGd1ZXN0IG1lbW9yeSBpcyB3aXJlZCAqLworCisvKgorICogSWRlbnRp
ZmllcnMgZm9yIG1lbW9yeSBzZWdtZW50czoKKyAqIC0gdm1fc2V0dXBfbWVtb3J5KCkgdXNlcyBW
TV9TWVNNRU0gZm9yIHRoZSBzeXN0ZW0gbWVtb3J5IHNlZ21lbnQuCisgKiAtIHRoZSByZW1haW5p
bmcgaWRlbnRpZmllcnMgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGRldm1lbSBzZWdtZW50cy4KKyAq
LworZW51bSB7CisJVk1fU1lTTUVNLAorCVZNX0JPT1RST00sCisJVk1fRlJBTUVCVUZGRVIsCit9
OworCisvKgorICogR2V0IHRoZSBsZW5ndGggYW5kIG5hbWUgb2YgdGhlIG1lbW9yeSBzZWdtZW50
IGlkZW50aWZpZWQgYnkgJ3NlZ2lkJy4KKyAqIE5vdGUgdGhhdCBzeXN0ZW0gbWVtb3J5IHNlZ21l
bnRzIGFyZSBpZGVudGlmaWVkIHdpdGggYSBudWwgbmFtZS4KKyAqCisgKiBSZXR1cm5zIDAgb24g
c3VjY2VzcyBhbmQgbm9uLXplcm8gb3RoZXJ3aXNlLgorICovCitpbnQJdm1fZ2V0X21lbXNlZyhz
dHJ1Y3Qgdm1jdHggKmN0eCwgaW50IGlkZW50LCBzaXplX3QgKmxlbnAsIGNoYXIgKm5hbWUsCisJ
ICAgIHNpemVfdCBuYW1lc2l6KTsKKworLyoKKyAqIEl0ZXJhdGUgb3ZlciB0aGUgZ3Vlc3QgYWRk
cmVzcyBzcGFjZS4gVGhpcyBmdW5jdGlvbiBmaW5kcyBhbiBhZGRyZXNzIHJhbmdlCisgKiB0aGF0
IHN0YXJ0cyBhdCBhbiBhZGRyZXNzID49ICpncGEuCisgKgorICogUmV0dXJucyAwIGlmIHRoZSBu
ZXh0IGFkZHJlc3MgcmFuZ2Ugd2FzIGZvdW5kIGFuZCBub24temVybyBvdGhlcndpc2UuCisgKi8K
K2ludAl2bV9tbWFwX2dldG5leHQoc3RydWN0IHZtY3R4ICpjdHgsIHZtX3BhZGRyX3QgKmdwYSwg
aW50ICpzZWdpZCwKKwkgICAgdm1fb29mZnNldF90ICpzZWdvZmYsIHNpemVfdCAqbGVuLCBpbnQg
KnByb3QsIGludCAqZmxhZ3MpOworLyoKKyAqIENyZWF0ZSBhIGRldmljZSBtZW1vcnkgc2VnbWVu
dCBpZGVudGlmaWVkIGJ5ICdzZWdpZCcuCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhl
IG1lbW9yeSBzZWdtZW50IG9uIHN1Y2Nlc3MgYW5kIE1BUF9GQUlMRUQgb3RoZXJ3aXNlLgorICov
Cit2b2lkCSp2bV9jcmVhdGVfZGV2bWVtKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgc2VnaWQsIGNv
bnN0IGNoYXIgKm5hbWUsCisJICAgIHNpemVfdCBsZW4pOworCisvKgorICogTWFwIHRoZSBtZW1v
cnkgc2VnbWVudCBpZGVudGlmaWVkIGJ5ICdzZWdpZCcgaW50byB0aGUgZ3Vlc3QgYWRkcmVzcyBz
cGFjZQorICogYXQgW2dwYSxncGErbGVuKSB3aXRoIHByb3RlY3Rpb24gJ3Byb3QnLgorICovCitp
bnQJdm1fbW1hcF9tZW1zZWcoc3RydWN0IHZtY3R4ICpjdHgsIHZtX3BhZGRyX3QgZ3BhLCBpbnQg
c2VnaWQsCisJICAgIHZtX29vZmZzZXRfdCBzZWdvZmYsIHNpemVfdCBsZW4sIGludCBwcm90KTsK
KworaW50CXZtX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lKTsKK3N0cnVjdCB2bWN0eCAqdm1fb3Bl
bihjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQJdm1fZGVzdHJveShzdHJ1Y3Qgdm1jdHggKmN0eCk7
CitpbnQJdm1fcGFyc2VfbWVtc2l6ZShjb25zdCBjaGFyICpvcHRhcmcsIHNpemVfdCAqbWVtc2l6
ZSk7CitpbnQJdm1fc2V0dXBfbWVtb3J5KHN0cnVjdCB2bWN0eCAqY3R4LCBzaXplX3QgbGVuLCBl
bnVtIHZtX21tYXBfc3R5bGUgcyk7Cit2b2lkCSp2bV9tYXBfZ3BhKHN0cnVjdCB2bWN0eCAqY3R4
LCB2bV9wYWRkcl90IGdhZGRyLCBzaXplX3QgbGVuKTsKK2ludAl2bV9nZXRfZ3BhX3BtYXAoc3Ry
dWN0IHZtY3R4ICosIHVpbnQ2NF90IGdwYSwgdWludDY0X3QgKnB0ZSwgaW50ICpudW0pOworaW50
CXZtX2dsYTJncGEoc3RydWN0IHZtY3R4ICosIGludCB2Y3B1aWQsIHN0cnVjdCB2bV9ndWVzdF9w
YWdpbmcgKnBhZ2luZywKKwkJICAgdWludDY0X3QgZ2xhLCBpbnQgcHJvdCwgdWludDY0X3QgKmdw
YSwgaW50ICpmYXVsdCk7Cit1aW50MzJfdCB2bV9nZXRfbG93bWVtX2xpbWl0KHN0cnVjdCB2bWN0
eCAqY3R4KTsKK3ZvaWQJdm1fc2V0X2xvd21lbV9saW1pdChzdHJ1Y3Qgdm1jdHggKmN0eCwgdWlu
dDMyX3QgbGltaXQpOwordm9pZAl2bV9zZXRfbWVtZmxhZ3Moc3RydWN0IHZtY3R4ICpjdHgsIGlu
dCBmbGFncyk7CitpbnQJdm1fZ2V0X21lbWZsYWdzKHN0cnVjdCB2bWN0eCAqY3R4KTsKK3NpemVf
dAl2bV9nZXRfbG93bWVtX3NpemUoc3RydWN0IHZtY3R4ICpjdHgpOworc2l6ZV90CXZtX2dldF9o
aWdobWVtX3NpemUoc3RydWN0IHZtY3R4ICpjdHgpOworaW50CXZtX3NldF9kZXNjKHN0cnVjdCB2
bWN0eCAqY3R4LCBpbnQgdmNwdSwgaW50IHJlZywKKwkJICAgIHVpbnQ2NF90IGJhc2UsIHVpbnQz
Ml90IGxpbWl0LCB1aW50MzJfdCBhY2Nlc3MpOworaW50CXZtX2dldF9kZXNjKHN0cnVjdCB2bWN0
eCAqY3R4LCBpbnQgdmNwdSwgaW50IHJlZywKKwkJICAgIHVpbnQ2NF90ICpiYXNlLCB1aW50MzJf
dCAqbGltaXQsIHVpbnQzMl90ICphY2Nlc3MpOworaW50CXZtX2dldF9zZWdfZGVzYyhzdHJ1Y3Qg
dm1jdHggKmN0eCwgaW50IHZjcHUsIGludCByZWcsCisJCQlzdHJ1Y3Qgc2VnX2Rlc2MgKnNlZ19k
ZXNjKTsKK2ludAl2bV9zZXRfcmVnaXN0ZXIoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBp
bnQgcmVnLCB1aW50NjRfdCB2YWwpOworaW50CXZtX2dldF9yZWdpc3RlcihzdHJ1Y3Qgdm1jdHgg
KmN0eCwgaW50IHZjcHUsIGludCByZWcsIHVpbnQ2NF90ICpyZXR2YWwpOworaW50CXZtX3J1bihz
dHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIHN0cnVjdCB2bV9leGl0ICpyZXRfdm1leGl0KTsK
K2ludAl2bV9zdXNwZW5kKHN0cnVjdCB2bWN0eCAqY3R4LCBlbnVtIHZtX3N1c3BlbmRfaG93IGhv
dyk7CitpbnQJdm1fcmVpbml0KHN0cnVjdCB2bWN0eCAqY3R4KTsKK2ludAl2bV9hcGljaWQydmNw
dShzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IGFwaWNpZCk7CitpbnQJdm1faW5qZWN0X2V4Y2VwdGlv
bihzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGludCB2ZWN0b3IsCisgICAgaW50IGVycmNv
ZGVfdmFsaWQsIHVpbnQzMl90IGVycmNvZGUsIGludCByZXN0YXJ0X2luc3RydWN0aW9uKTsKK2lu
dAl2bV9sYXBpY19pcnEoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBpbnQgdmVjdG9yKTsK
K2ludAl2bV9sYXBpY19sb2NhbF9pcnEoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBpbnQg
dmVjdG9yKTsKK2ludAl2bV9sYXBpY19tc2koc3RydWN0IHZtY3R4ICpjdHgsIHVpbnQ2NF90IGFk
ZHIsIHVpbnQ2NF90IG1zZyk7CitpbnQJdm1faW9hcGljX2Fzc2VydF9pcnEoc3RydWN0IHZtY3R4
ICpjdHgsIGludCBpcnEpOworaW50CXZtX2lvYXBpY19kZWFzc2VydF9pcnEoc3RydWN0IHZtY3R4
ICpjdHgsIGludCBpcnEpOworaW50CXZtX2lvYXBpY19wdWxzZV9pcnEoc3RydWN0IHZtY3R4ICpj
dHgsIGludCBpcnEpOworaW50CXZtX2lvYXBpY19waW5jb3VudChzdHJ1Y3Qgdm1jdHggKmN0eCwg
aW50ICpwaW5jb3VudCk7CitpbnQJdm1faXNhX2Fzc2VydF9pcnEoc3RydWN0IHZtY3R4ICpjdHgs
IGludCBhdHBpY19pcnEsIGludCBpb2FwaWNfaXJxKTsKK2ludAl2bV9pc2FfZGVhc3NlcnRfaXJx
KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgYXRwaWNfaXJxLCBpbnQgaW9hcGljX2lycSk7CitpbnQJ
dm1faXNhX3B1bHNlX2lycShzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IGF0cGljX2lycSwgaW50IGlv
YXBpY19pcnEpOworaW50CXZtX2lzYV9zZXRfaXJxX3RyaWdnZXIoc3RydWN0IHZtY3R4ICpjdHgs
IGludCBhdHBpY19pcnEsCisJICAgIGVudW0gdm1faW50cl90cmlnZ2VyIHRyaWdnZXIpOworaW50
CXZtX2luamVjdF9ubWkoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1KTsKK2ludAl2bV9jYXBh
YmlsaXR5X25hbWUydHlwZShjb25zdCBjaGFyICpjYXBuYW1lKTsKK2NvbnN0IGNoYXIgKnZtX2Nh
cGFiaWxpdHlfdHlwZTJuYW1lKGludCB0eXBlKTsKK2ludAl2bV9nZXRfY2FwYWJpbGl0eShzdHJ1
Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGVudW0gdm1fY2FwX3R5cGUgY2FwLAorCQkJICBpbnQg
KnJldHZhbCk7CitpbnQJdm1fc2V0X2NhcGFiaWxpdHkoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2
Y3B1LCBlbnVtIHZtX2NhcF90eXBlIGNhcCwKKwkJCSAgaW50IHZhbCk7CitpbnQJdm1fYXNzaWdu
X3BwdGRldihzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IGJ1cywgaW50IHNsb3QsIGludCBmdW5jKTsK
K2ludAl2bV91bmFzc2lnbl9wcHRkZXYoc3RydWN0IHZtY3R4ICpjdHgsIGludCBidXMsIGludCBz
bG90LCBpbnQgZnVuYyk7CitpbnQJdm1fbWFwX3BwdGRldl9tbWlvKHN0cnVjdCB2bWN0eCAqY3R4
LCBpbnQgYnVzLCBpbnQgc2xvdCwgaW50IGZ1bmMsCisJCQkgICB2bV9wYWRkcl90IGdwYSwgc2l6
ZV90IGxlbiwgdm1fcGFkZHJfdCBocGEpOworaW50CXZtX3NldHVwX3BwdGRldl9tc2koc3RydWN0
IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBpbnQgYnVzLCBpbnQgc2xvdCwKKwkgICAgaW50IGZ1bmMs
IHVpbnQ2NF90IGFkZHIsIHVpbnQ2NF90IG1zZywgaW50IG51bXZlYyk7CitpbnQJdm1fc2V0dXBf
cHB0ZGV2X21zaXgoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBpbnQgYnVzLCBpbnQgc2xv
dCwKKwkgICAgaW50IGZ1bmMsIGludCBpZHgsIHVpbnQ2NF90IGFkZHIsIHVpbnQ2NF90IG1zZywK
KwkgICAgdWludDMyX3QgdmVjdG9yX2NvbnRyb2wpOworCitpbnQJdm1fZ2V0X2ludGluZm8oc3Ry
dWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCB1aW50NjRfdCAqaTEsIHVpbnQ2NF90ICppMik7Citp
bnQJdm1fc2V0X2ludGluZm8oc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCB1aW50NjRfdCBl
eGl0X2ludGluZm8pOworCisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc3RhdGlzdGlj
cyBidWZmZXIuIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBNVC1zYWZlLgorICovCit1aW50NjRfdCAq
dm1fZ2V0X3N0YXRzKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgc3RydWN0IHRpbWV2YWwg
KnJldF90diwKKwkJICAgICAgIGludCAqcmV0X2VudHJpZXMpOworY29uc3QgY2hhciAqdm1fZ2V0
X3N0YXRfZGVzYyhzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IGluZGV4KTsKKworaW50CXZtX2dldF94
MmFwaWNfc3RhdGUoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBlbnVtIHgyYXBpY19zdGF0
ZSAqcyk7CitpbnQJdm1fc2V0X3gyYXBpY19zdGF0ZShzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZj
cHUsIGVudW0geDJhcGljX3N0YXRlIHMpOworCitpbnQJdm1fZ2V0X2hwZXRfY2FwYWJpbGl0aWVz
KHN0cnVjdCB2bWN0eCAqY3R4LCB1aW50MzJfdCAqY2FwYWJpbGl0aWVzKTsKKworLyoKKyAqIFRy
YW5zbGF0ZSB0aGUgR0xBIHJhbmdlIFtnbGEsZ2xhK2xlbikgaW50byBHUEEgc2VnbWVudHMgaW4g
J2lvdicuCisgKiBUaGUgJ2lvdmNudCcgc2hvdWxkIGJlIGJpZyBlbm91Z2ggdG8gYWNjb21tb2Rh
dGUgYWxsIEdQQSBzZWdtZW50cy4KKyAqCisgKiByZXR2YWwJZmF1bHQJCUludGVycHJldGF0aW9u
CisgKiAgIDAJCSAgMAkJU3VjY2VzcworICogICAwCQkgIDEJCUFuIGV4Y2VwdGlvbiB3YXMgaW5q
ZWN0ZWQgaW50byB0aGUgZ3Vlc3QKKyAqIEVGQVVMVAkgTi9BCQlFcnJvcgorICovCitpbnQJdm1f
Y29weV9zZXR1cChzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIHN0cnVjdCB2bV9ndWVzdF9w
YWdpbmcgKnBnLAorCSAgICB1aW50NjRfdCBnbGEsIHNpemVfdCBsZW4sIGludCBwcm90LCBzdHJ1
Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCwKKwkgICAgaW50ICpmYXVsdCk7Cit2b2lkCXZtX2Nv
cHlpbihzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIHN0cnVjdCBpb3ZlYyAqZ3Vlc3RfaW92
LAorCSAgICB2b2lkICpob3N0X2RzdCwgc2l6ZV90IGxlbik7Cit2b2lkCXZtX2NvcHlvdXQoc3Ry
dWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBjb25zdCB2b2lkICpob3N0X3NyYywKKwkgICAgc3Ry
dWN0IGlvdmVjICpndWVzdF9pb3YsIHNpemVfdCBsZW4pOwordm9pZAl2bV9jb3B5X3RlYXJkb3du
KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgc3RydWN0IGlvdmVjICppb3YsCisJICAgIGlu
dCBpb3ZjbnQpOworCisvKiBSVEMgKi8KK2ludAl2bV9ydGNfd3JpdGUoc3RydWN0IHZtY3R4ICpj
dHgsIGludCBvZmZzZXQsIHVpbnQ4X3QgdmFsdWUpOworaW50CXZtX3J0Y19yZWFkKHN0cnVjdCB2
bWN0eCAqY3R4LCBpbnQgb2Zmc2V0LCB1aW50OF90ICpyZXR2YWwpOworaW50CXZtX3J0Y19zZXR0
aW1lKHN0cnVjdCB2bWN0eCAqY3R4LCB0aW1lX3Qgc2Vjcyk7CitpbnQJdm1fcnRjX2dldHRpbWUo
c3RydWN0IHZtY3R4ICpjdHgsIHRpbWVfdCAqc2Vjcyk7CisKKy8qIFJlc2V0IHZjcHUgcmVnaXN0
ZXIgc3RhdGUgKi8KK2ludAl2Y3B1X3Jlc2V0KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSk7
CisKK2ludAl2bV9hY3RpdmVfY3B1cyhzdHJ1Y3Qgdm1jdHggKmN0eCwgY3B1c2V0X3QgKmNwdXMp
OworaW50CXZtX3N1c3BlbmRlZF9jcHVzKHN0cnVjdCB2bWN0eCAqY3R4LCBjcHVzZXRfdCAqY3B1
cyk7CitpbnQJdm1fYWN0aXZhdGVfY3B1KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSk7CisK
Ky8qCisgKiBGcmVlQlNEIHNwZWNpZmljIEFQSXMKKyAqLworaW50CXZtX3NldHVwX2ZyZWVic2Rf
cmVnaXN0ZXJzKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwKKwkJCQl1aW50NjRfdCByaXAs
IHVpbnQ2NF90IGNyMywgdWludDY0X3QgZ2R0YmFzZSwKKwkJCQl1aW50NjRfdCByc3ApOworaW50
CXZtX3NldHVwX2ZyZWVic2RfcmVnaXN0ZXJzX2kzODYoc3RydWN0IHZtY3R4ICp2bWN0eCwgaW50
IHZjcHUsCisJCQkJCXVpbnQzMl90IGVpcCwgdWludDMyX3QgZ2R0YmFzZSwKKwkJCQkJdWludDMy
X3QgZXNwKTsKK3ZvaWQJdm1fc2V0dXBfZnJlZWJzZF9nZHQodWludDY0X3QgKmdkdHIpOworI2Vu
ZGlmCS8qIF9WTU1BUElfSF8gKi8KRmlsZXMgdXNyL3NyYy9zcmMudHh6IGFuZCAvdXNyL3NyYy9z
cmMudHh6IGRpZmZlcgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2FtZDY0L2NvbmYvR0VORVJJ
QyAvdXNyL3NyYy9zeXMvYW1kNjQvY29uZi9HRU5FUklDCi0tLSB1c3Ivc3JjL3N5cy9hbWQ2NC9j
b25mL0dFTkVSSUMJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Iv
c3JjL3N5cy9hbWQ2NC9jb25mL0dFTkVSSUMJMjAxNi0xMS0zMCAxMDo1ODowMi41OTE5MzMwMDAg
KzAwMDAKQEAgLTM1Myw3ICszNTMsNyBAQAogZGV2aWNlCQl2bXgJCQkjIFZNd2FyZSBWTVhORVQz
IEV0aGVybmV0CiAKICMgTmV0bWFwIHByb3ZpZGVzIGRpcmVjdCBhY2Nlc3MgdG8gVFgvUlggcmlu
Z3Mgb24gc3VwcG9ydGVkIE5JQ3MKLWRldmljZQkJbmV0bWFwCQkJIyBuZXRtYXAoNCkgc3VwcG9y
dAorI2RldmljZQkJbmV0bWFwCQkJIyBuZXRtYXAoNCkgc3VwcG9ydAogCiAjIFRoZSBjcnlwdG8g
ZnJhbWV3b3JrIGlzIHJlcXVpcmVkIGJ5IElQU0VDCiBkZXZpY2UJCWNyeXB0bwkJCSMgUmVxdWly
ZWQgYnkgSVBTRUMKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9hbWQ2NC9pbmNsdWRlL3ZtbS5o
IC91c3Ivc3JjL3N5cy9hbWQ2NC9pbmNsdWRlL3ZtbS5oCi0tLSB1c3Ivc3JjL3N5cy9hbWQ2NC9p
bmNsdWRlL3ZtbS5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCisrKyAvdXNy
L3NyYy9zeXMvYW1kNjQvaW5jbHVkZS92bW0uaAkyMDE2LTExLTMwIDEwOjU2OjA1Ljc4NDk5OTAw
MCArMDAwMApAQCAtMTgzLDYgKzE4Myw3IEBACiBpbnQgdm1fYWxsb2NfbWVtc2VnKHN0cnVjdCB2
bSAqdm0sIGludCBpZGVudCwgc2l6ZV90IGxlbiwgYm9vbCBzeXNtZW0pOwogdm9pZCB2bV9mcmVl
X21lbXNlZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgaWRlbnQpOwogaW50IHZtX21hcF9tbWlvKHN0cnVj
dCB2bSAqdm0sIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuLCB2bV9wYWRkcl90IGhwYSk7Citp
bnQgdm1fbWFwX3VzZXJtZW0oc3RydWN0IHZtICp2bSwgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBs
ZW4sIHZvaWQgKmJ1Ziwgc3RydWN0IHRocmVhZCAqdGQpOwogaW50IHZtX3VubWFwX21taW8oc3Ry
dWN0IHZtICp2bSwgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4pOwogaW50IHZtX2Fzc2lnbl9w
cHRkZXYoc3RydWN0IHZtICp2bSwgaW50IGJ1cywgaW50IHNsb3QsIGludCBmdW5jKTsKIGludCB2
bV91bmFzc2lnbl9wcHRkZXYoc3RydWN0IHZtICp2bSwgaW50IGJ1cywgaW50IHNsb3QsIGludCBm
dW5jKTsKQEAgLTMyMSw2ICszMjIsNyBAQAogc3RydWN0IHZhdHBpdCAqdm1fYXRwaXQoc3RydWN0
IHZtICp2bSk7CiBzdHJ1Y3QgdnBtdG1yICp2bV9wbXRtcihzdHJ1Y3Qgdm0gKnZtKTsKIHN0cnVj
dCB2cnRjICp2bV9ydGMoc3RydWN0IHZtICp2bSk7CitzdHJ1Y3QgaW9yZWdoICp2bV9pb3JlZ2go
c3RydWN0IHZtICp2bSk7CiAKIC8qCiAgKiBJbmplY3QgZXhjZXB0aW9uICd2ZWN0b3InIGludG8g
dGhlIGd1ZXN0IHZjcHUuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIG9uCkBAIC00MTcsNyArNDE5
LDE0IEBACiAJRURHRV9UUklHR0VSLAogCUxFVkVMX1RSSUdHRVIKIH07Ci0JCisKKy8qIE9wZXJh
dGlvbnMgc3VwcG9ydGVkIG9uIFZNX0lPX1JFR19IQU5ETEVSIGlvY3RsLiAqLworZW51bSB2bV9p
b19yZWdoX3R5cGUgeworCVZNX0lPX1JFR0hfREVMRVRFLAorCVZNX0lPX1JFR0hfS1dFVkVOVFMs
CS8qIGtlcm5lbCB3YWl0IGV2ZW50cyAqLworCVZNX0lPX1JFR0hfTUFYCit9OworCiAvKgogICog
VGhlICdhY2Nlc3MnIGZpZWxkIGhhcyB0aGUgZm9ybWF0IHNwZWNpZmllZCBpbiBUYWJsZSAyMS0y
IG9mIHRoZSBJbnRlbAogICogQXJjaGl0ZWN0dXJlIE1hbnVhbCB2b2wgM2IuCmRpZmYgLXUgLXIg
LU4gdXNyL3NyYy9zeXMvYW1kNjQvaW5jbHVkZS92bW0uaC5vcmlnIC91c3Ivc3JjL3N5cy9hbWQ2
NC9pbmNsdWRlL3ZtbS5oLm9yaWcKLS0tIHVzci9zcmMvc3lzL2FtZDY0L2luY2x1ZGUvdm1tLmgu
b3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lz
L2FtZDY0L2luY2x1ZGUvdm1tLmgub3JpZwkyMDE2LTExLTMwIDEwOjUyOjUzLjgyMjk1OTAwMCAr
MDAwMApAQCAtMCwwICsxLDY3NSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgTmV0QXBw
LCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgTkVUQVBQLCBJTkMgYGBBUyBJUycnIEFORAorICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBORVRBUFAsIElOQyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq
IFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5j
bHVkZS92bW0uaCAyOTkwMTAgMjAxNi0wNS0wMyAyMjoxMzowNFogcGZnICQKKyAqLworCisjaWZu
ZGVmIF9WTU1fSF8KKyNkZWZpbmUJX1ZNTV9IXworCisjaW5jbHVkZSA8eDg2L3NlZ21lbnRzLmg+
CisKK2VudW0gdm1fc3VzcGVuZF9ob3cgeworCVZNX1NVU1BFTkRfTk9ORSwKKwlWTV9TVVNQRU5E
X1JFU0VULAorCVZNX1NVU1BFTkRfUE9XRVJPRkYsCisJVk1fU1VTUEVORF9IQUxULAorCVZNX1NV
U1BFTkRfVFJJUExFRkFVTFQsCisJVk1fU1VTUEVORF9MQVNUCit9OworCisvKgorICogSWRlbnRp
ZmllcnMgZm9yIGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkIHJlZ2lzdGVycy4KKyAqLworZW51bSB2
bV9yZWdfbmFtZSB7CisJVk1fUkVHX0dVRVNUX1JBWCwKKwlWTV9SRUdfR1VFU1RfUkJYLAorCVZN
X1JFR19HVUVTVF9SQ1gsCisJVk1fUkVHX0dVRVNUX1JEWCwKKwlWTV9SRUdfR1VFU1RfUlNJLAor
CVZNX1JFR19HVUVTVF9SREksCisJVk1fUkVHX0dVRVNUX1JCUCwKKwlWTV9SRUdfR1VFU1RfUjgs
CisJVk1fUkVHX0dVRVNUX1I5LAorCVZNX1JFR19HVUVTVF9SMTAsCisJVk1fUkVHX0dVRVNUX1Ix
MSwKKwlWTV9SRUdfR1VFU1RfUjEyLAorCVZNX1JFR19HVUVTVF9SMTMsCisJVk1fUkVHX0dVRVNU
X1IxNCwKKwlWTV9SRUdfR1VFU1RfUjE1LAorCVZNX1JFR19HVUVTVF9DUjAsCisJVk1fUkVHX0dV
RVNUX0NSMywKKwlWTV9SRUdfR1VFU1RfQ1I0LAorCVZNX1JFR19HVUVTVF9EUjcsCisJVk1fUkVH
X0dVRVNUX1JTUCwKKwlWTV9SRUdfR1VFU1RfUklQLAorCVZNX1JFR19HVUVTVF9SRkxBR1MsCisJ
Vk1fUkVHX0dVRVNUX0VTLAorCVZNX1JFR19HVUVTVF9DUywKKwlWTV9SRUdfR1VFU1RfU1MsCisJ
Vk1fUkVHX0dVRVNUX0RTLAorCVZNX1JFR19HVUVTVF9GUywKKwlWTV9SRUdfR1VFU1RfR1MsCisJ
Vk1fUkVHX0dVRVNUX0xEVFIsCisJVk1fUkVHX0dVRVNUX1RSLAorCVZNX1JFR19HVUVTVF9JRFRS
LAorCVZNX1JFR19HVUVTVF9HRFRSLAorCVZNX1JFR19HVUVTVF9FRkVSLAorCVZNX1JFR19HVUVT
VF9DUjIsCisJVk1fUkVHX0dVRVNUX1BEUFRFMCwKKwlWTV9SRUdfR1VFU1RfUERQVEUxLAorCVZN
X1JFR19HVUVTVF9QRFBURTIsCisJVk1fUkVHX0dVRVNUX1BEUFRFMywKKwlWTV9SRUdfR1VFU1Rf
SU5UUl9TSEFET1csCisJVk1fUkVHX0xBU1QKK307CisKK2VudW0geDJhcGljX3N0YXRlIHsKKwlY
MkFQSUNfRElTQUJMRUQsCisJWDJBUElDX0VOQUJMRUQsCisJWDJBUElDX1NUQVRFX0xBU1QKK307
CisKKyNkZWZpbmUJVk1fSU5USU5GT19WRUNUT1IoaW5mbykJKChpbmZvKSAmIDB4ZmYpCisjZGVm
aW5lCVZNX0lOVElORk9fREVMX0VSUkNPREUJMHg4MDAKKyNkZWZpbmUJVk1fSU5USU5GT19SU1ZE
CQkweDdmZmZmMDAwCisjZGVmaW5lCVZNX0lOVElORk9fVkFMSUQJMHg4MDAwMDAwMAorI2RlZmlu
ZQlWTV9JTlRJTkZPX1RZUEUJCTB4NzAwCisjZGVmaW5lCVZNX0lOVElORk9fSFdJTlRSCSgwIDw8
IDgpCisjZGVmaW5lCVZNX0lOVElORk9fTk1JCQkoMiA8PCA4KQorI2RlZmluZQlWTV9JTlRJTkZP
X0hXRVhDRVBUSU9OCSgzIDw8IDgpCisjZGVmaW5lCVZNX0lOVElORk9fU1dJTlRSCSg0IDw8IDgp
CisKKyNpZmRlZiBfS0VSTkVMCisKKyNkZWZpbmUJVk1fTUFYX05BTUVMRU4JMzIKKworc3RydWN0
IHZtOworc3RydWN0IHZtX2V4Y2VwdGlvbjsKK3N0cnVjdCBzZWdfZGVzYzsKK3N0cnVjdCB2bV9l
eGl0Oworc3RydWN0IHZtX3J1bjsKK3N0cnVjdCB2aHBldDsKK3N0cnVjdCB2aW9hcGljOworc3Ry
dWN0IHZsYXBpYzsKK3N0cnVjdCB2bXNwYWNlOworc3RydWN0IHZtX29iamVjdDsKK3N0cnVjdCB2
bV9ndWVzdF9wYWdpbmc7CitzdHJ1Y3QgcG1hcDsKKworc3RydWN0IHZtX2V2ZW50aW5mbyB7CisJ
dm9pZAkqcnB0cjsJCS8qIHJlbmRlenZvdXMgY29va2llICovCisJaW50CSpzcHRyOwkJLyogc3Vz
cGVuZCBjb29raWUgKi8KKwlpbnQJKmlwdHI7CQkvKiByZXFpZGxlIGNvb2tpZSAqLworfTsKKwor
dHlwZWRlZiBpbnQJKCp2bW1faW5pdF9mdW5jX3QpKGludCBpcGludW0pOwordHlwZWRlZiBpbnQJ
KCp2bW1fY2xlYW51cF9mdW5jX3QpKHZvaWQpOwordHlwZWRlZiB2b2lkCSgqdm1tX3Jlc3VtZV9m
dW5jX3QpKHZvaWQpOwordHlwZWRlZiB2b2lkICoJKCp2bWlfaW5pdF9mdW5jX3QpKHN0cnVjdCB2
bSAqdm0sIHN0cnVjdCBwbWFwICpwbWFwKTsKK3R5cGVkZWYgaW50CSgqdm1pX3J1bl9mdW5jX3Qp
KHZvaWQgKnZtaSwgaW50IHZjcHUsIHJlZ2lzdGVyX3QgcmlwLAorCQkgICAgc3RydWN0IHBtYXAg
KnBtYXAsIHN0cnVjdCB2bV9ldmVudGluZm8gKmluZm8pOwordHlwZWRlZiB2b2lkCSgqdm1pX2Ns
ZWFudXBfZnVuY190KSh2b2lkICp2bWkpOwordHlwZWRlZiBpbnQJKCp2bWlfZ2V0X3JlZ2lzdGVy
X3QpKHZvaWQgKnZtaSwgaW50IHZjcHUsIGludCBudW0sCisJCQkJICAgICAgdWludDY0X3QgKnJl
dHZhbCk7Cit0eXBlZGVmIGludAkoKnZtaV9zZXRfcmVnaXN0ZXJfdCkodm9pZCAqdm1pLCBpbnQg
dmNwdSwgaW50IG51bSwKKwkJCQkgICAgICB1aW50NjRfdCB2YWwpOwordHlwZWRlZiBpbnQJKCp2
bWlfZ2V0X2Rlc2NfdCkodm9pZCAqdm1pLCBpbnQgdmNwdSwgaW50IG51bSwKKwkJCQkgIHN0cnVj
dCBzZWdfZGVzYyAqZGVzYyk7Cit0eXBlZGVmIGludAkoKnZtaV9zZXRfZGVzY190KSh2b2lkICp2
bWksIGludCB2Y3B1LCBpbnQgbnVtLAorCQkJCSAgc3RydWN0IHNlZ19kZXNjICpkZXNjKTsKK3R5
cGVkZWYgaW50CSgqdm1pX2dldF9jYXBfdCkodm9pZCAqdm1pLCBpbnQgdmNwdSwgaW50IG51bSwg
aW50ICpyZXR2YWwpOwordHlwZWRlZiBpbnQJKCp2bWlfc2V0X2NhcF90KSh2b2lkICp2bWksIGlu
dCB2Y3B1LCBpbnQgbnVtLCBpbnQgdmFsKTsKK3R5cGVkZWYgc3RydWN0IHZtc3BhY2UgKiAoKnZt
aV92bXNwYWNlX2FsbG9jKSh2bV9vZmZzZXRfdCBtaW4sIHZtX29mZnNldF90IG1heCk7Cit0eXBl
ZGVmIHZvaWQJKCp2bWlfdm1zcGFjZV9mcmVlKShzdHJ1Y3Qgdm1zcGFjZSAqdm1zcGFjZSk7Cit0
eXBlZGVmIHN0cnVjdCB2bGFwaWMgKiAoKnZtaV92bGFwaWNfaW5pdCkodm9pZCAqdm1pLCBpbnQg
dmNwdSk7Cit0eXBlZGVmIHZvaWQJKCp2bWlfdmxhcGljX2NsZWFudXApKHZvaWQgKnZtaSwgc3Ry
dWN0IHZsYXBpYyAqdmxhcGljKTsKKworc3RydWN0IHZtbV9vcHMgeworCXZtbV9pbml0X2Z1bmNf
dAkJaW5pdDsJCS8qIG1vZHVsZSB3aWRlIGluaXRpYWxpemF0aW9uICovCisJdm1tX2NsZWFudXBf
ZnVuY190CWNsZWFudXA7CisJdm1tX3Jlc3VtZV9mdW5jX3QJcmVzdW1lOworCisJdm1pX2luaXRf
ZnVuY190CQl2bWluaXQ7CQkvKiB2bS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiAqLworCXZtaV9y
dW5fZnVuY190CQl2bXJ1bjsKKwl2bWlfY2xlYW51cF9mdW5jX3QJdm1jbGVhbnVwOworCXZtaV9n
ZXRfcmVnaXN0ZXJfdAl2bWdldHJlZzsKKwl2bWlfc2V0X3JlZ2lzdGVyX3QJdm1zZXRyZWc7CisJ
dm1pX2dldF9kZXNjX3QJCXZtZ2V0ZGVzYzsKKwl2bWlfc2V0X2Rlc2NfdAkJdm1zZXRkZXNjOwor
CXZtaV9nZXRfY2FwX3QJCXZtZ2V0Y2FwOworCXZtaV9zZXRfY2FwX3QJCXZtc2V0Y2FwOworCXZt
aV92bXNwYWNlX2FsbG9jCXZtc3BhY2VfYWxsb2M7CisJdm1pX3Ztc3BhY2VfZnJlZQl2bXNwYWNl
X2ZyZWU7CisJdm1pX3ZsYXBpY19pbml0CQl2bGFwaWNfaW5pdDsKKwl2bWlfdmxhcGljX2NsZWFu
dXAJdmxhcGljX2NsZWFudXA7Cit9OworCitleHRlcm4gc3RydWN0IHZtbV9vcHMgdm1tX29wc19p
bnRlbDsKK2V4dGVybiBzdHJ1Y3Qgdm1tX29wcyB2bW1fb3BzX2FtZDsKKworaW50IHZtX2NyZWF0
ZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgdm0gKipyZXR2bSk7Cit2b2lkIHZtX2Rlc3Ryb3ko
c3RydWN0IHZtICp2bSk7CitpbnQgdm1fcmVpbml0KHN0cnVjdCB2bSAqdm0pOworY29uc3QgY2hh
ciAqdm1fbmFtZShzdHJ1Y3Qgdm0gKnZtKTsKKworLyoKKyAqIEFQSXMgdGhhdCBtb2RpZnkgdGhl
IGd1ZXN0IG1lbW9yeSBtYXAgcmVxdWlyZSBhbGwgdmNwdXMgdG8gYmUgZnJvemVuLgorICovCitp
bnQgdm1fbW1hcF9tZW1zZWcoc3RydWN0IHZtICp2bSwgdm1fcGFkZHJfdCBncGEsIGludCBzZWdp
ZCwgdm1fb29mZnNldF90IG9mZiwKKyAgICBzaXplX3QgbGVuLCBpbnQgcHJvdCwgaW50IGZsYWdz
KTsKK2ludCB2bV9hbGxvY19tZW1zZWcoc3RydWN0IHZtICp2bSwgaW50IGlkZW50LCBzaXplX3Qg
bGVuLCBib29sIHN5c21lbSk7Cit2b2lkIHZtX2ZyZWVfbWVtc2VnKHN0cnVjdCB2bSAqdm0sIGlu
dCBpZGVudCk7CitpbnQgdm1fbWFwX21taW8oc3RydWN0IHZtICp2bSwgdm1fcGFkZHJfdCBncGEs
IHNpemVfdCBsZW4sIHZtX3BhZGRyX3QgaHBhKTsKK2ludCB2bV91bm1hcF9tbWlvKHN0cnVjdCB2
bSAqdm0sIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuKTsKK2ludCB2bV9hc3NpZ25fcHB0ZGV2
KHN0cnVjdCB2bSAqdm0sIGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYyk7CitpbnQgdm1fdW5h
c3NpZ25fcHB0ZGV2KHN0cnVjdCB2bSAqdm0sIGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYyk7
CisKKy8qCisgKiBBUElzIHRoYXQgaW5zcGVjdCB0aGUgZ3Vlc3QgbWVtb3J5IG1hcCByZXF1aXJl
IG9ubHkgYSAqc2luZ2xlKiB2Y3B1IHRvCisgKiBiZSBmcm96ZW4uIFRoaXMgYWN0cyBsaWtlIGEg
cmVhZCBsb2NrIG9uIHRoZSBndWVzdCBtZW1vcnkgbWFwIHNpbmNlIGFueQorICogbW9kaWZpY2F0
aW9uIHJlcXVpcmVzICphbGwqIHZjcHVzIHRvIGJlIGZyb3plbi4KKyAqLworaW50IHZtX21tYXBf
Z2V0bmV4dChzdHJ1Y3Qgdm0gKnZtLCB2bV9wYWRkcl90ICpncGEsIGludCAqc2VnaWQsCisgICAg
dm1fb29mZnNldF90ICpzZWdvZmYsIHNpemVfdCAqbGVuLCBpbnQgKnByb3QsIGludCAqZmxhZ3Mp
OworaW50IHZtX2dldF9tZW1zZWcoc3RydWN0IHZtICp2bSwgaW50IGlkZW50LCBzaXplX3QgKmxl
biwgYm9vbCAqc3lzbWVtLAorICAgIHN0cnVjdCB2bV9vYmplY3QgKipvYmpwdHIpOwordm9pZCAq
dm1fZ3BhX2hvbGQoc3RydWN0IHZtICosIGludCB2Y3B1aWQsIHZtX3BhZGRyX3QgZ3BhLCBzaXpl
X3QgbGVuLAorICAgIGludCBwcm90LCB2b2lkICoqY29va2llKTsKK3ZvaWQgdm1fZ3BhX3JlbGVh
c2Uodm9pZCAqY29va2llKTsKK2Jvb2wgdm1fbWVtX2FsbG9jYXRlZChzdHJ1Y3Qgdm0gKnZtLCBp
bnQgdmNwdWlkLCB2bV9wYWRkcl90IGdwYSk7CisKK2ludCB2bV9nZXRfcmVnaXN0ZXIoc3RydWN0
IHZtICp2bSwgaW50IHZjcHUsIGludCByZWcsIHVpbnQ2NF90ICpyZXR2YWwpOworaW50IHZtX3Nl
dF9yZWdpc3RlcihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSwgaW50IHJlZywgdWludDY0X3QgdmFs
KTsKK2ludCB2bV9nZXRfc2VnX2Rlc2Moc3RydWN0IHZtICp2bSwgaW50IHZjcHUsIGludCByZWcs
CisJCSAgICBzdHJ1Y3Qgc2VnX2Rlc2MgKnJldF9kZXNjKTsKK2ludCB2bV9zZXRfc2VnX2Rlc2Mo
c3RydWN0IHZtICp2bSwgaW50IHZjcHUsIGludCByZWcsCisJCSAgICBzdHJ1Y3Qgc2VnX2Rlc2Mg
KmRlc2MpOworaW50IHZtX3J1bihzdHJ1Y3Qgdm0gKnZtLCBzdHJ1Y3Qgdm1fcnVuICp2bXJ1bik7
CitpbnQgdm1fc3VzcGVuZChzdHJ1Y3Qgdm0gKnZtLCBlbnVtIHZtX3N1c3BlbmRfaG93IGhvdyk7
CitpbnQgdm1faW5qZWN0X25taShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSk7CitpbnQgdm1fbm1p
X3BlbmRpbmcoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCk7Cit2b2lkIHZtX25taV9jbGVhcihz
dHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkKTsKK2ludCB2bV9pbmplY3RfZXh0aW50KHN0cnVjdCB2
bSAqdm0sIGludCB2Y3B1KTsKK2ludCB2bV9leHRpbnRfcGVuZGluZyhzdHJ1Y3Qgdm0gKnZtLCBp
bnQgdmNwdWlkKTsKK3ZvaWQgdm1fZXh0aW50X2NsZWFyKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1
aWQpOworc3RydWN0IHZsYXBpYyAqdm1fbGFwaWMoc3RydWN0IHZtICp2bSwgaW50IGNwdSk7Citz
dHJ1Y3QgdmlvYXBpYyAqdm1faW9hcGljKHN0cnVjdCB2bSAqdm0pOworc3RydWN0IHZocGV0ICp2
bV9ocGV0KHN0cnVjdCB2bSAqdm0pOworaW50IHZtX2dldF9jYXBhYmlsaXR5KHN0cnVjdCB2bSAq
dm0sIGludCB2Y3B1LCBpbnQgdHlwZSwgaW50ICp2YWwpOworaW50IHZtX3NldF9jYXBhYmlsaXR5
KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQgdHlwZSwgaW50IHZhbCk7CitpbnQgdm1fZ2V0
X3gyYXBpY19zdGF0ZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSwgZW51bSB4MmFwaWNfc3RhdGUg
KnN0YXRlKTsKK2ludCB2bV9zZXRfeDJhcGljX3N0YXRlKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1
LCBlbnVtIHgyYXBpY19zdGF0ZSBzdGF0ZSk7CitpbnQgdm1fYXBpY2lkMnZjcHVpZChzdHJ1Y3Qg
dm0gKnZtLCBpbnQgYXBpY2lkKTsKK2ludCB2bV9hY3RpdmF0ZV9jcHUoc3RydWN0IHZtICp2bSwg
aW50IHZjcHUpOworc3RydWN0IHZtX2V4aXQgKnZtX2V4aXRpbmZvKHN0cnVjdCB2bSAqdm0sIGlu
dCB2Y3B1aWQpOwordm9pZCB2bV9leGl0X3N1c3BlbmRlZChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw
dWlkLCB1aW50NjRfdCByaXApOwordm9pZCB2bV9leGl0X3JlbmRlenZvdXMoc3RydWN0IHZtICp2
bSwgaW50IHZjcHVpZCwgdWludDY0X3QgcmlwKTsKK3ZvaWQgdm1fZXhpdF9hc3RwZW5kaW5nKHN0
cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIHVpbnQ2NF90IHJpcCk7Cit2b2lkIHZtX2V4aXRfcmVx
aWRsZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCByaXApOworCisjaWZkZWYg
X1NZU19fQ1BVU0VUX0hfCisvKgorICogUmVuZGV6dm91cyBhbGwgdmNwdXMgc3BlY2lmaWVkIGlu
ICdkZXN0JyBhbmQgZXhlY3V0ZSAnZnVuYyhhcmcpJy4KKyAqIFRoZSByZW5kZXp2b3VzICdmdW5j
KGFyZyknIGlzIG5vdCBhbGxvd2VkIHRvIGRvIGFueXRoaW5nIHRoYXQgd2lsbAorICogY2F1c2Ug
dGhlIHRocmVhZCB0byBiZSBwdXQgdG8gc2xlZXAuCisgKgorICogSWYgdGhlIHJlbmRlenZvdXMg
aXMgYmVpbmcgaW5pdGlhdGVkIGZyb20gYSB2Y3B1IGNvbnRleHQgdGhlbiB0aGUKKyAqICd2Y3B1
aWQnIG11c3QgcmVmZXIgdG8gdGhhdCB2Y3B1LCBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHNldCB0
byAtMS4KKyAqCisgKiBUaGUgY2FsbGVyIGNhbm5vdCBob2xkIGFueSBsb2NrcyB3aGVuIGluaXRp
YXRpbmcgdGhlIHJlbmRlenZvdXMuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMg
QVBJIG1heSBjYXVzZSB2Y3B1cyBvdGhlciB0aGFuIHRob3NlIHNwZWNpZmllZAorICogYnkgJ2Rl
c3QnIHRvIGJlIHN0YWxsZWQuIFRoZSBjYWxsZXIgc2hvdWxkIG5vdCByZWx5IG9uIGFueSB2Y3B1
cyBtYWtpbmcKKyAqIGZvcndhcmQgcHJvZ3Jlc3Mgd2hlbiB0aGUgcmVuZGV6dm91cyBpcyBpbiBw
cm9ncmVzcy4KKyAqLwordHlwZWRlZiB2b2lkICgqdm1fcmVuZGV6dm91c19mdW5jX3QpKHN0cnVj
dCB2bSAqdm0sIGludCB2Y3B1aWQsIHZvaWQgKmFyZyk7Cit2b2lkIHZtX3NtcF9yZW5kZXp2b3Vz
KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIGNwdXNldF90IGRlc3QsCisgICAgdm1fcmVuZGV6
dm91c19mdW5jX3QgZnVuYywgdm9pZCAqYXJnKTsKK2NwdXNldF90IHZtX2FjdGl2ZV9jcHVzKHN0
cnVjdCB2bSAqdm0pOworY3B1c2V0X3Qgdm1fc3VzcGVuZGVkX2NwdXMoc3RydWN0IHZtICp2bSk7
CisjZW5kaWYJLyogX1NZU19fQ1BVU0VUX0hfICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQKK3Zj
cHVfcmVuZGV6dm91c19wZW5kaW5nKHN0cnVjdCB2bV9ldmVudGluZm8gKmluZm8pCit7CisKKwly
ZXR1cm4gKCooKHVpbnRwdHJfdCAqKShpbmZvLT5ycHRyKSkgIT0gMCk7Cit9CisKK3N0YXRpYyBf
X2lubGluZSBpbnQKK3ZjcHVfc3VzcGVuZGVkKHN0cnVjdCB2bV9ldmVudGluZm8gKmluZm8pCit7
CisKKwlyZXR1cm4gKCppbmZvLT5zcHRyKTsKK30KKworc3RhdGljIF9faW5saW5lIGludAordmNw
dV9yZXFpZGxlKHN0cnVjdCB2bV9ldmVudGluZm8gKmluZm8pCit7CisKKwlyZXR1cm4gKCppbmZv
LT5pcHRyKTsKK30KKworLyoKKyAqIFJldHVybiAxIGlmIGRldmljZSBpbmRpY2F0ZWQgYnkgYnVz
L3Nsb3QvZnVuYyBpcyBzdXBwb3NlZCB0byBiZSBhCisgKiBwY2kgcGFzc3Rocm91Z2ggZGV2aWNl
LgorICoKKyAqIFJldHVybiAwIG90aGVyd2lzZS4KKyAqLworaW50IHZtbV9pc19wcHRkZXYoaW50
IGJ1cywgaW50IHNsb3QsIGludCBmdW5jKTsKKwordm9pZCAqdm1faW9tbXVfZG9tYWluKHN0cnVj
dCB2bSAqdm0pOworCitlbnVtIHZjcHVfc3RhdGUgeworCVZDUFVfSURMRSwKKwlWQ1BVX0ZST1pF
TiwKKwlWQ1BVX1JVTk5JTkcsCisJVkNQVV9TTEVFUElORywKK307CisKK2ludCB2Y3B1X3NldF9z
dGF0ZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSwgZW51bSB2Y3B1X3N0YXRlIHN0YXRlLAorICAg
IGJvb2wgZnJvbV9pZGxlKTsKK2VudW0gdmNwdV9zdGF0ZSB2Y3B1X2dldF9zdGF0ZShzdHJ1Y3Qg
dm0gKnZtLCBpbnQgdmNwdSwgaW50ICpob3N0Y3B1KTsKKworc3RhdGljIGludCBfX2lubGluZQor
dmNwdV9pc19ydW5uaW5nKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQgKmhvc3RjcHUpCit7
CisJcmV0dXJuICh2Y3B1X2dldF9zdGF0ZSh2bSwgdmNwdSwgaG9zdGNwdSkgPT0gVkNQVV9SVU5O
SU5HKTsKK30KKworI2lmZGVmIF9TWVNfUFJPQ19IXworc3RhdGljIGludCBfX2lubGluZQordmNw
dV9zaG91bGRfeWllbGQoc3RydWN0IHZtICp2bSwgaW50IHZjcHUpCit7CisKKwlpZiAoY3VydGhy
ZWFkLT50ZF9mbGFncyAmIChUREZfQVNUUEVORElORyB8IFRERl9ORUVEUkVTQ0hFRCkpCisJCXJl
dHVybiAoMSk7CisJZWxzZSBpZiAoY3VydGhyZWFkLT50ZF9vd2VwcmVlbXB0KQorCQlyZXR1cm4g
KDEpOworCWVsc2UKKwkJcmV0dXJuICgwKTsKK30KKyNlbmRpZgorCit2b2lkICp2Y3B1X3N0YXRz
KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1KTsKK3ZvaWQgdmNwdV9ub3RpZnlfZXZlbnQoc3RydWN0
IHZtICp2bSwgaW50IHZjcHVpZCwgYm9vbCBsYXBpY19pbnRyKTsKK3N0cnVjdCB2bXNwYWNlICp2
bV9nZXRfdm1zcGFjZShzdHJ1Y3Qgdm0gKnZtKTsKK3N0cnVjdCB2YXRwaWMgKnZtX2F0cGljKHN0
cnVjdCB2bSAqdm0pOworc3RydWN0IHZhdHBpdCAqdm1fYXRwaXQoc3RydWN0IHZtICp2bSk7Citz
dHJ1Y3QgdnBtdG1yICp2bV9wbXRtcihzdHJ1Y3Qgdm0gKnZtKTsKK3N0cnVjdCB2cnRjICp2bV9y
dGMoc3RydWN0IHZtICp2bSk7CisKKy8qCisgKiBJbmplY3QgZXhjZXB0aW9uICd2ZWN0b3InIGlu
dG8gdGhlIGd1ZXN0IHZjcHUuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIG9uCisgKiBzdWNjZXNz
IGFuZCBub24temVybyBvbiBmYWlsdXJlLgorICoKKyAqIFdyYXBwZXIgZnVuY3Rpb25zIGxpa2Ug
J3ZtX2luamVjdF9ncCgpJyBzaG91bGQgYmUgcHJlZmVycmVkIHRvIGNhbGxpbmcKKyAqIHRoaXMg
ZnVuY3Rpb24gZGlyZWN0bHkgYmVjYXVzZSB0aGV5IGVuZm9yY2UgdGhlIHRyYXAtbGlrZSBvciBm
YXVsdC1saWtlCisgKiBiZWhhdmlvciBvZiBhbiBleGNlcHRpb24uCisgKgorICogVGhpcyBmdW5j
dGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHRocmVhZCB0
aGF0IGlzCisgKiBleGVjdXRpbmcgdGhpcyB2Y3B1LgorICovCitpbnQgdm1faW5qZWN0X2V4Y2Vw
dGlvbihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBpbnQgdmVjdG9yLCBpbnQgZXJyX3ZhbGlk
LAorICAgIHVpbnQzMl90IGVycmNvZGUsIGludCByZXN0YXJ0X2luc3RydWN0aW9uKTsKKworLyoK
KyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgVk0tZXhpdCB0aGF0IG9jY3VycmVk
IGR1cmluZyBleGNlcHRpb24gb3IKKyAqIGludGVycnVwdCBkZWxpdmVyeSB0aHJvdWdoIHRoZSBJ
RFQuIFRoZSBmb3JtYXQgb2YgJ2ludGluZm8nIGlzIGRlc2NyaWJlZAorICogaW4gRmlndXJlIDE1
LTEsICJFWElUSU5USU5GTyBmb3IgQWxsIEludGVyY2VwdHMiLCBBUE0sIFZvbCAyLgorICoKKyAq
IElmIGEgVk0tZXhpdCBoYW5kbGVyIGNvbXBsZXRlcyB0aGUgZXZlbnQgZGVsaXZlcnkgc3VjY2Vz
c2Z1bGx5IHRoZW4gaXQKKyAqIHNob3VsZCBjYWxsIHZtX2V4aXRfaW50aW5mbygpIHRvIGV4dGlu
Z3Vpc2ggdGhlIHBlbmRpbmcgZXZlbnQuIEZvciBlLmcuLAorICogaWYgdGhlIHRhc2sgc3dpdGNo
IGVtdWxhdGlvbiBpcyB0cmlnZ2VyZWQgdmlhIGEgdGFzayBnYXRlIHRoZW4gaXQgc2hvdWxkCisg
KiBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCAnaW50aW5mbz0wJyB0byBpbmRpY2F0ZSB0aGF0IHRo
ZSBleHRlcm5hbCBldmVudAorICogaXMgbm90IHBlbmRpbmcgYW55bW9yZS4KKyAqCisgKiBSZXR1
cm4gdmFsdWUgaXMgMCBvbiBzdWNjZXNzIGFuZCBub24temVybyBvbiBmYWlsdXJlLgorICovCitp
bnQgdm1fZXhpdF9pbnRpbmZvKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIHVpbnQ2NF90IGlu
dGluZm8pOworCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIGV2ZXJ5IFZN
LWVudHJ5IHRvIHJldHJpZXZlIGEgcGVuZGluZworICogZXZlbnQgdGhhdCBzaG91bGQgYmUgaW5q
ZWN0ZWQgaW50byB0aGUgZ3Vlc3QuIFRoaXMgZnVuY3Rpb24gY29tYmluZXMKKyAqIG5lc3RlZCBl
dmVudHMgaW50byBhIGRvdWJsZSBvciB0cmlwbGUgZmF1bHQuCisgKgorICogUmV0dXJucyAwIGlm
IHRoZXJlIGFyZSBubyBldmVudHMgdGhhdCBuZWVkIHRvIGJlIGluamVjdGVkIGludG8gdGhlIGd1
ZXN0CisgKiBhbmQgbm9uLXplcm8gb3RoZXJ3aXNlLgorICovCitpbnQgdm1fZW50cnlfaW50aW5m
byhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCAqaW5mbyk7CisKK2ludCB2bV9n
ZXRfaW50aW5mbyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCAqaW5mbzEsIHVp
bnQ2NF90ICppbmZvMik7CisKK2VudW0gdm1fcmVnX25hbWUgdm1fc2VnbWVudF9uYW1lKGludCBz
ZWdfZW5jb2RpbmcpOworCitzdHJ1Y3Qgdm1fY29weWluZm8geworCXVpbnQ2NF90CWdwYTsKKwlz
aXplX3QJCWxlbjsKKwl2b2lkCQkqaHZhOworCXZvaWQJCSpjb29raWU7Cit9OworCisvKgorICog
U2V0IHVwICdjb3B5aW5mb1tdJyB0byBjb3B5IHRvL2Zyb20gZ3Vlc3QgbGluZWFyIGFkZHJlc3Mg
c3BhY2Ugc3RhcnRpbmcKKyAqIGF0ICdnbGEnIGFuZCAnbGVuJyBieXRlcyBsb25nLiBUaGUgJ3By
b3QnIHNob3VsZCBiZSBzZXQgdG8gUFJPVF9SRUFEIGZvcgorICogYSBjb3B5aW4gb3IgUFJPVF9X
UklURSBmb3IgYSBjb3B5b3V0LiAKKyAqCisgKiByZXR2YWwJaXNfZmF1bHQJSW50ZXJwcmV0YXRp
b24KKyAqICAgMAkJICAgMAkJU3VjY2VzcworICogICAwCQkgICAxCQlBbiBleGNlcHRpb24gd2Fz
IGluamVjdGVkIGludG8gdGhlIGd1ZXN0CisgKiBFRkFVTFQJICBOL0EJCVVucmVjb3ZlcmFibGUg
ZXJyb3IKKyAqCisgKiBUaGUgJ2NvcHlpbmZvW10nIGNhbiBiZSBwYXNzZWQgdG8gJ3ZtX2NvcHlp
bigpJyBvciAndm1fY29weW91dCgpJyBvbmx5IGlmCisgKiB0aGUgcmV0dXJuIHZhbHVlIGlzIDAu
IFRoZSAnY29weWluZm9bXScgcmVzb3VyY2VzIHNob3VsZCBiZSBmcmVlZCBieSBjYWxsaW5nCisg
KiAndm1fY29weV90ZWFyZG93bigpJyBhZnRlciB0aGUgY29weSBpcyBkb25lLgorICovCitpbnQg
dm1fY29weV9zZXR1cChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qgdm1fZ3Vlc3Rf
cGFnaW5nICpwYWdpbmcsCisgICAgdWludDY0X3QgZ2xhLCBzaXplX3QgbGVuLCBpbnQgcHJvdCwg
c3RydWN0IHZtX2NvcHlpbmZvICpjb3B5aW5mbywKKyAgICBpbnQgbnVtX2NvcHlpbmZvLCBpbnQg
KmlzX2ZhdWx0KTsKK3ZvaWQgdm1fY29weV90ZWFyZG93bihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw
dWlkLCBzdHJ1Y3Qgdm1fY29weWluZm8gKmNvcHlpbmZvLAorICAgIGludCBudW1fY29weWluZm8p
Owordm9pZCB2bV9jb3B5aW4oc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgc3RydWN0IHZtX2Nv
cHlpbmZvICpjb3B5aW5mbywKKyAgICB2b2lkICprYWRkciwgc2l6ZV90IGxlbik7Cit2b2lkIHZt
X2NvcHlvdXQoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgY29uc3Qgdm9pZCAqa2FkZHIsCisg
ICAgc3RydWN0IHZtX2NvcHlpbmZvICpjb3B5aW5mbywgc2l6ZV90IGxlbik7CisKK2ludCB2Y3B1
X3RyYWNlX2V4Y2VwdGlvbnMoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCk7CisjZW5kaWYJLyog
S0VSTkVMICovCisKKyNkZWZpbmUJVk1fTUFYQ1BVCTE2CQkJLyogbWF4aW11bSB2aXJ0dWFsIGNw
dXMgKi8KKworLyoKKyAqIElkZW50aWZpZXJzIGZvciBvcHRpb25hbCB2bW0gY2FwYWJpbGl0aWVz
CisgKi8KK2VudW0gdm1fY2FwX3R5cGUgeworCVZNX0NBUF9IQUxUX0VYSVQsCisJVk1fQ0FQX01U
UkFQX0VYSVQsCisJVk1fQ0FQX1BBVVNFX0VYSVQsCisJVk1fQ0FQX1VOUkVTVFJJQ1RFRF9HVUVT
VCwKKwlWTV9DQVBfRU5BQkxFX0lOVlBDSUQsCisJVk1fQ0FQX01BWAorfTsKKworZW51bSB2bV9p
bnRyX3RyaWdnZXIgeworCUVER0VfVFJJR0dFUiwKKwlMRVZFTF9UUklHR0VSCit9OworCQorLyoK
KyAqIFRoZSAnYWNjZXNzJyBmaWVsZCBoYXMgdGhlIGZvcm1hdCBzcGVjaWZpZWQgaW4gVGFibGUg
MjEtMiBvZiB0aGUgSW50ZWwKKyAqIEFyY2hpdGVjdHVyZSBNYW51YWwgdm9sIDNiLgorICoKKyAq
IFhYWCBUaGUgY29udGVudHMgb2YgdGhlICdhY2Nlc3MnIGZpZWxkIGFyZSBhcmNoaXRlY3R1cmFs
bHkgZGVmaW5lZCBleGNlcHQKKyAqIGJpdCAxNiAtIFNlZ21lbnQgVW51c2FibGUuCisgKi8KK3N0
cnVjdCBzZWdfZGVzYyB7CisJdWludDY0X3QJYmFzZTsKKwl1aW50MzJfdAlsaW1pdDsKKwl1aW50
MzJfdAlhY2Nlc3M7Cit9OworI2RlZmluZQlTRUdfREVTQ19UWVBFKGFjY2VzcykJCSgoYWNjZXNz
KSAmIDB4MDAxZikKKyNkZWZpbmUJU0VHX0RFU0NfRFBMKGFjY2VzcykJCSgoKGFjY2VzcykgPj4g
NSkgJiAweDMpCisjZGVmaW5lCVNFR19ERVNDX1BSRVNFTlQoYWNjZXNzKQkoKChhY2Nlc3MpICYg
MHgwMDgwKSA/IDEgOiAwKQorI2RlZmluZQlTRUdfREVTQ19ERUYzMihhY2Nlc3MpCQkoKChhY2Nl
c3MpICYgMHg0MDAwKSA/IDEgOiAwKQorI2RlZmluZQlTRUdfREVTQ19HUkFOVUxBUklUWShhY2Nl
c3MpCSgoKGFjY2VzcykgJiAweDgwMDApID8gMSA6IDApCisjZGVmaW5lCVNFR19ERVNDX1VOVVNB
QkxFKGFjY2VzcykJKCgoYWNjZXNzKSAmIDB4MTAwMDApID8gMSA6IDApCisKK2VudW0gdm1fY3B1
X21vZGUgeworCUNQVV9NT0RFX1JFQUwsCisJQ1BVX01PREVfUFJPVEVDVEVELAorCUNQVV9NT0RF
X0NPTVBBVElCSUxJVFksCQkvKiBJQS0zMkUgbW9kZSAoQ1MuTCA9IDApICovCisJQ1BVX01PREVf
NjRCSVQsCQkJLyogSUEtMzJFIG1vZGUgKENTLkwgPSAxKSAqLworfTsKKworZW51bSB2bV9wYWdp
bmdfbW9kZSB7CisJUEFHSU5HX01PREVfRkxBVCwKKwlQQUdJTkdfTU9ERV8zMiwKKwlQQUdJTkdf
TU9ERV9QQUUsCisJUEFHSU5HX01PREVfNjQsCit9OworCitzdHJ1Y3Qgdm1fZ3Vlc3RfcGFnaW5n
IHsKKwl1aW50NjRfdAljcjM7CisJaW50CQljcGw7CisJZW51bSB2bV9jcHVfbW9kZSBjcHVfbW9k
ZTsKKwllbnVtIHZtX3BhZ2luZ19tb2RlIHBhZ2luZ19tb2RlOworfTsKKworLyoKKyAqIFRoZSBk
YXRhIHN0cnVjdHVyZXMgJ3ZpZScgYW5kICd2aWVfb3AnIGFyZSBtZWFudCB0byBiZSBvcGFxdWUg
dG8gdGhlCisgKiBjb25zdW1lcnMgb2YgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcuIFRoZSBvbmx5IHJl
YXNvbiB3aHkgdGhlaXIgY29udGVudHMKKyAqIG5lZWQgdG8gYmUgZXhwb3NlZCBpcyBiZWNhdXNl
IHRoZXkgYXJlIHBhcnQgb2YgdGhlICd2bV9leGl0JyBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCB2
aWVfb3AgeworCXVpbnQ4X3QJCW9wX2J5dGU7CS8qIGFjdHVhbCBvcGNvZGUgYnl0ZSAqLworCXVp
bnQ4X3QJCW9wX3R5cGU7CS8qIHR5cGUgb2Ygb3BlcmF0aW9uIChlLmcuIE1PVikgKi8KKwl1aW50
MTZfdAlvcF9mbGFnczsKK307CisKKyNkZWZpbmUJVklFX0lOU1RfU0laRQkxNQorc3RydWN0IHZp
ZSB7CisJdWludDhfdAkJaW5zdFtWSUVfSU5TVF9TSVpFXTsJLyogaW5zdHJ1Y3Rpb24gYnl0ZXMg
Ki8KKwl1aW50OF90CQludW1fdmFsaWQ7CQkvKiBzaXplIG9mIHRoZSBpbnN0cnVjdGlvbiAqLwor
CXVpbnQ4X3QJCW51bV9wcm9jZXNzZWQ7CisKKwl1aW50OF90CQlhZGRyc2l6ZTo0LCBvcHNpemU6
NDsJLyogYWRkcmVzcyBhbmQgb3BlcmFuZCBzaXplcyAqLworCXVpbnQ4X3QJCXJleF93OjEsCQkv
KiBSRVggcHJlZml4ICovCisJCQlyZXhfcjoxLAorCQkJcmV4X3g6MSwKKwkJCXJleF9iOjEsCisJ
CQlyZXhfcHJlc2VudDoxLAorCQkJcmVwel9wcmVzZW50OjEsCQkvKiBSRVAvUkVQRS9SRVBaIHBy
ZWZpeCAqLworCQkJcmVwbnpfcHJlc2VudDoxLAkvKiBSRVBORS9SRVBOWiBwcmVmaXggKi8KKwkJ
CW9wc2l6ZV9vdmVycmlkZToxLAkvKiBPcGVyYW5kIHNpemUgb3ZlcnJpZGUgKi8KKwkJCWFkZHJz
aXplX292ZXJyaWRlOjEsCS8qIEFkZHJlc3Mgc2l6ZSBvdmVycmlkZSAqLworCQkJc2VnbWVudF9v
dmVycmlkZToxOwkvKiBTZWdtZW50IG92ZXJyaWRlICovCisKKwl1aW50OF90CQltb2Q6MiwJCQkv
KiBNb2RSTSBieXRlICovCisJCQlyZWc6NCwKKwkJCXJtOjQ7CisKKwl1aW50OF90CQlzczoyLAkJ
CS8qIFNJQiBieXRlICovCisJCQlpbmRleDo0LAorCQkJYmFzZTo0OworCisJdWludDhfdAkJZGlz
cF9ieXRlczsKKwl1aW50OF90CQlpbW1fYnl0ZXM7CisKKwl1aW50OF90CQlzY2FsZTsKKwlpbnQJ
CWJhc2VfcmVnaXN0ZXI7CQkvKiBWTV9SRUdfR1VFU1RfeHl6ICovCisJaW50CQlpbmRleF9yZWdp
c3RlcjsJCS8qIFZNX1JFR19HVUVTVF94eXogKi8KKwlpbnQJCXNlZ21lbnRfcmVnaXN0ZXI7CS8q
IFZNX1JFR19HVUVTVF94eXogKi8KKworCWludDY0X3QJCWRpc3BsYWNlbWVudDsJCS8qIG9wdGlv
bmFsIGFkZHIgZGlzcGxhY2VtZW50ICovCisJaW50NjRfdAkJaW1tZWRpYXRlOwkJLyogb3B0aW9u
YWwgaW1tZWRpYXRlIG9wZXJhbmQgKi8KKworCXVpbnQ4X3QJCWRlY29kZWQ7CS8qIHNldCB0byAx
IGlmIHN1Y2Nlc3NmdWxseSBkZWNvZGVkICovCisKKwlzdHJ1Y3QgdmllX29wCW9wOwkJCS8qIG9w
Y29kZSBkZXNjcmlwdGlvbiAqLworfTsKKworZW51bSB2bV9leGl0Y29kZSB7CisJVk1fRVhJVENP
REVfSU5PVVQsCisJVk1fRVhJVENPREVfVk1YLAorCVZNX0VYSVRDT0RFX0JPR1VTLAorCVZNX0VY
SVRDT0RFX1JETVNSLAorCVZNX0VYSVRDT0RFX1dSTVNSLAorCVZNX0VYSVRDT0RFX0hMVCwKKwlW
TV9FWElUQ09ERV9NVFJBUCwKKwlWTV9FWElUQ09ERV9QQVVTRSwKKwlWTV9FWElUQ09ERV9QQUdJ
TkcsCisJVk1fRVhJVENPREVfSU5TVF9FTVVMLAorCVZNX0VYSVRDT0RFX1NQSU5VUF9BUCwKKwlW
TV9FWElUQ09ERV9ERVBSRUNBVEVEMSwJLyogdXNlZCB0byBiZSBTUElORE9XTl9DUFUgKi8KKwlW
TV9FWElUQ09ERV9SRU5ERVpWT1VTLAorCVZNX0VYSVRDT0RFX0lPQVBJQ19FT0ksCisJVk1fRVhJ
VENPREVfU1VTUEVOREVELAorCVZNX0VYSVRDT0RFX0lOT1VUX1NUUiwKKwlWTV9FWElUQ09ERV9U
QVNLX1NXSVRDSCwKKwlWTV9FWElUQ09ERV9NT05JVE9SLAorCVZNX0VYSVRDT0RFX01XQUlULAor
CVZNX0VYSVRDT0RFX1NWTSwKKwlWTV9FWElUQ09ERV9SRVFJRExFLAorCVZNX0VYSVRDT0RFX01B
WAorfTsKKworc3RydWN0IHZtX2lub3V0IHsKKwl1aW50MTZfdAlieXRlczozOwkvKiAxIG9yIDIg
b3IgNCAqLworCXVpbnQxNl90CWluOjE7CisJdWludDE2X3QJc3RyaW5nOjE7CisJdWludDE2X3QJ
cmVwOjE7CisJdWludDE2X3QJcG9ydDsKKwl1aW50MzJfdAllYXg7CQkvKiB2YWxpZCBmb3Igb3V0
ICovCit9OworCitzdHJ1Y3Qgdm1faW5vdXRfc3RyIHsKKwlzdHJ1Y3Qgdm1faW5vdXQJaW5vdXQ7
CQkvKiBtdXN0IGJlIHRoZSBmaXJzdCBlbGVtZW50ICovCisJc3RydWN0IHZtX2d1ZXN0X3BhZ2lu
ZyBwYWdpbmc7CisJdWludDY0X3QJcmZsYWdzOworCXVpbnQ2NF90CWNyMDsKKwl1aW50NjRfdAlp
bmRleDsKKwl1aW50NjRfdAljb3VudDsJCS8qIHJlcD0xICglcmN4KSwgcmVwPTAgKDEpICovCisJ
aW50CQlhZGRyc2l6ZTsKKwllbnVtIHZtX3JlZ19uYW1lIHNlZ19uYW1lOworCXN0cnVjdCBzZWdf
ZGVzYyBzZWdfZGVzYzsKK307CisKK2VudW0gdGFza19zd2l0Y2hfcmVhc29uIHsKKwlUU1JfQ0FM
TCwKKwlUU1JfSVJFVCwKKwlUU1JfSk1QLAorCVRTUl9JRFRfR0FURSwJLyogdGFzayBnYXRlIGlu
IElEVCAqLworfTsKKworc3RydWN0IHZtX3Rhc2tfc3dpdGNoIHsKKwl1aW50MTZfdAl0c3NzZWw7
CQkvKiBuZXcgVFNTIHNlbGVjdG9yICovCisJaW50CQlleHQ7CQkvKiB0YXNrIHN3aXRjaCBkdWUg
dG8gZXh0ZXJuYWwgZXZlbnQgKi8KKwl1aW50MzJfdAllcnJjb2RlOworCWludAkJZXJyY29kZV92
YWxpZDsJLyogcHVzaCAnZXJyY29kZScgb24gdGhlIG5ldyBzdGFjayAqLworCWVudW0gdGFza19z
d2l0Y2hfcmVhc29uIHJlYXNvbjsKKwlzdHJ1Y3Qgdm1fZ3Vlc3RfcGFnaW5nIHBhZ2luZzsKK307
CisKK3N0cnVjdCB2bV9leGl0IHsKKwllbnVtIHZtX2V4aXRjb2RlCWV4aXRjb2RlOworCWludAkJ
CWluc3RfbGVuZ3RoOwkvKiAwIG1lYW5zIHVua25vd24gKi8KKwl1aW50NjRfdAkJcmlwOworCXVu
aW9uIHsKKwkJc3RydWN0IHZtX2lub3V0CWlub3V0OworCQlzdHJ1Y3Qgdm1faW5vdXRfc3RyIGlu
b3V0X3N0cjsKKwkJc3RydWN0IHsKKwkJCXVpbnQ2NF90CWdwYTsKKwkJCWludAkJZmF1bHRfdHlw
ZTsKKwkJfSBwYWdpbmc7CisJCXN0cnVjdCB7CisJCQl1aW50NjRfdAlncGE7CisJCQl1aW50NjRf
dAlnbGE7CisJCQl1aW50NjRfdAljc19iYXNlOworCQkJaW50CQljc19kOwkJLyogQ1MuRCAqLwor
CQkJc3RydWN0IHZtX2d1ZXN0X3BhZ2luZyBwYWdpbmc7CisJCQlzdHJ1Y3QgdmllCXZpZTsKKwkJ
fSBpbnN0X2VtdWw7CisJCS8qCisJCSAqIFZNWCBzcGVjaWZpYyBwYXlsb2FkLiBVc2VkIHdoZW4g
dGhlcmUgaXMgbm8gImJldHRlciIKKwkJICogZXhpdGNvZGUgdG8gcmVwcmVzZW50IHRoZSBWTS1l
eGl0LgorCQkgKi8KKwkJc3RydWN0IHsKKwkJCWludAkJc3RhdHVzOwkJLyogdm14IGluc3Qgc3Rh
dHVzICovCisJCQkvKgorCQkJICogJ2V4aXRfcmVhc29uJyBhbmQgJ2V4aXRfcXVhbGlmaWNhdGlv
bicgYXJlIHZhbGlkCisJCQkgKiBvbmx5IGlmICdzdGF0dXMnIGlzIHplcm8uCisJCQkgKi8KKwkJ
CXVpbnQzMl90CWV4aXRfcmVhc29uOworCQkJdWludDY0X3QJZXhpdF9xdWFsaWZpY2F0aW9uOwor
CQkJLyoKKwkJCSAqICdpbnN0X2Vycm9yJyBhbmQgJ2luc3RfdHlwZScgYXJlIHZhbGlkCisJCQkg
KiBvbmx5IGlmICdzdGF0dXMnIGlzIG5vbi16ZXJvLgorCQkJICovCisJCQlpbnQJCWluc3RfdHlw
ZTsKKwkJCWludAkJaW5zdF9lcnJvcjsKKwkJfSB2bXg7CisJCS8qCisJCSAqIFNWTSBzcGVjaWZp
YyBwYXlsb2FkLgorCQkgKi8KKwkJc3RydWN0IHsKKwkJCXVpbnQ2NF90CWV4aXRjb2RlOworCQkJ
dWludDY0X3QJZXhpdGluZm8xOworCQkJdWludDY0X3QJZXhpdGluZm8yOworCQl9IHN2bTsKKwkJ
c3RydWN0IHsKKwkJCXVpbnQzMl90CWNvZGU7CQkvKiBlY3ggdmFsdWUgKi8KKwkJCXVpbnQ2NF90
CXd2YWw7CisJCX0gbXNyOworCQlzdHJ1Y3QgeworCQkJaW50CQl2Y3B1OworCQkJdWludDY0X3QJ
cmlwOworCQl9IHNwaW51cF9hcDsKKwkJc3RydWN0IHsKKwkJCXVpbnQ2NF90CXJmbGFnczsKKwkJ
fSBobHQ7CisJCXN0cnVjdCB7CisJCQlpbnQJCXZlY3RvcjsKKwkJfSBpb2FwaWNfZW9pOworCQlz
dHJ1Y3QgeworCQkJZW51bSB2bV9zdXNwZW5kX2hvdyBob3c7CisJCX0gc3VzcGVuZGVkOworCQlz
dHJ1Y3Qgdm1fdGFza19zd2l0Y2ggdGFza19zd2l0Y2g7CisJfSB1OworfTsKKworLyogQVBJcyB0
byBpbmplY3QgZmF1bHRzIGludG8gdGhlIGd1ZXN0ICovCit2b2lkIHZtX2luamVjdF9mYXVsdCh2
b2lkICp2bSwgaW50IHZjcHVpZCwgaW50IHZlY3RvciwgaW50IGVycmNvZGVfdmFsaWQsCisgICAg
aW50IGVycmNvZGUpOworCitzdGF0aWMgX19pbmxpbmUgdm9pZAordm1faW5qZWN0X3VkKHZvaWQg
KnZtLCBpbnQgdmNwdWlkKQoreworCXZtX2luamVjdF9mYXVsdCh2bSwgdmNwdWlkLCBJRFRfVUQs
IDAsIDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAordm1faW5qZWN0X2dwKHZvaWQgKnZt
LCBpbnQgdmNwdWlkKQoreworCXZtX2luamVjdF9mYXVsdCh2bSwgdmNwdWlkLCBJRFRfR1AsIDEs
IDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAordm1faW5qZWN0X2FjKHZvaWQgKnZtLCBp
bnQgdmNwdWlkLCBpbnQgZXJyY29kZSkKK3sKKwl2bV9pbmplY3RfZmF1bHQodm0sIHZjcHVpZCwg
SURUX0FDLCAxLCBlcnJjb2RlKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK3ZtX2luamVj
dF9zcyh2b2lkICp2bSwgaW50IHZjcHVpZCwgaW50IGVycmNvZGUpCit7CisJdm1faW5qZWN0X2Zh
dWx0KHZtLCB2Y3B1aWQsIElEVF9TUywgMSwgZXJyY29kZSk7Cit9CisKK3ZvaWQgdm1faW5qZWN0
X3BmKHZvaWQgKnZtLCBpbnQgdmNwdWlkLCBpbnQgZXJyb3JfY29kZSwgdWludDY0X3QgY3IyKTsK
KworaW50IHZtX3Jlc3RhcnRfaW5zdHJ1Y3Rpb24odm9pZCAqdm0sIGludCB2Y3B1aWQpOworCisj
ZW5kaWYJLyogX1ZNTV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2FtZDY0L2luY2x1
ZGUvdm1tX2Rldi5oIC91c3Ivc3JjL3N5cy9hbWQ2NC9pbmNsdWRlL3ZtbV9kZXYuaAotLS0gdXNy
L3NyYy9zeXMvYW1kNjQvaW5jbHVkZS92bW1fZGV2LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAw
MDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9hbWQ2NC9pbmNsdWRlL3ZtbV9kZXYuaAkyMDE2
LTExLTMwIDEwOjU2OjA1Ljc4NjU4MzAwMCArMDAwMApAQCAtMTIzLDYgKzEyMywyMyBAQAogCXNp
emVfdAkJbGVuOwogfTsKIAorLyogQXJndW1lbnQgZm9yIFZNX01BUF9VU0VSX0JVRiBpb2N0bCBp
biB2bW1hcGkuYyAqLworc3RydWN0IHZtX3VzZXJfYnVmIHsKKwl2bV9wYWRkcl90CWdwYTsKKwl2
b2lkIAkJKmFkZHI7CisJc2l6ZV90CQlsZW47Cit9OworCisvKiBBcmd1bWVudCBmb3IgVk1fSU9f
UkVHX0hBTkRMRVIgaW9jdGwgaW4gdm1tYXBpLmMgKi8KK3N0cnVjdCB2bV9pb19yZWdfaGFuZGxl
ciB7CisJdWludDE2X3QJCXBvcnQ7CQkvKiBJL08gYWRkcmVzcyAqLworCXVpbnQxNl90CQlpbjsJ
CS8qIDAgb3V0LCAxIGluICovCisJdWludDMyX3QJCW1hc2tfZGF0YTsJLyogMCBtZWFucyBtYXRj
aCBhbnl0aGluZyAqLworCXVpbnQzMl90CQlkYXRhOwkJLyogZGF0YSB0byBtYXRjaCAqLworCWVu
dW0gdm1faW9fcmVnaF90eXBlCXR5cGU7CQkvKiBoYW5kbGVyIHR5cGUgKi8KKwl2b2lkCQkJKmFy
ZzsJCS8qIGhhbmRsZXIgYXJndW1lbnQgKi8KK307CisKIHN0cnVjdCB2bV9wcHRkZXZfbXNpIHsK
IAlpbnQJCXZjcHU7CiAJaW50CQlidXM7CkBAIC0yODYsNiArMzAzLDEwIEBACiAJSU9DTlVNX1JU
Q19XUklURSA9IDEwMSwKIAlJT0NOVU1fUlRDX1NFVFRJTUUgPSAxMDIsCiAJSU9DTlVNX1JUQ19H
RVRUSU1FID0gMTAzLAorCisJLyogaG9zdCBtbWFwIGFuZCBJTyBoYW5kbGVyICovCisJSU9DTlVN
X01BUF9VU0VSX0JVRiA9IDEwNCwKKwlJT0NOVU1fSU9fUkVHX0hBTkRMRVIgPSAxMDUsCiB9Owog
CiAjZGVmaW5lCVZNX1JVTgkJXApAQCAtMzQ0LDYgKzM2NSwxMCBAQAogCV9JT1coJ3YnLCBJT0NO
VU1fVU5CSU5EX1BQVERFViwgc3RydWN0IHZtX3BwdGRldikKICNkZWZpbmUJVk1fTUFQX1BQVERF
Vl9NTUlPIFwKIAlfSU9XKCd2JywgSU9DTlVNX01BUF9QUFRERVZfTU1JTywgc3RydWN0IHZtX3Bw
dGRldl9tbWlvKQorI2RlZmluZQlWTV9NQVBfVVNFUl9CVUYgXAorCV9JT1coJ3YnLCBJT0NOVU1f
TUFQX1VTRVJfQlVGLCBzdHJ1Y3Qgdm1fdXNlcl9idWYpCisjZGVmaW5lCVZNX0lPX1JFR19IQU5E
TEVSIFwKKwlfSU9XKCd2JywgSU9DTlVNX0lPX1JFR19IQU5ETEVSLCBzdHJ1Y3Qgdm1faW9fcmVn
X2hhbmRsZXIpCiAjZGVmaW5lCVZNX1BQVERFVl9NU0kgXAogCV9JT1coJ3YnLCBJT0NOVU1fUFBU
REVWX01TSSwgc3RydWN0IHZtX3BwdGRldl9tc2kpCiAjZGVmaW5lCVZNX1BQVERFVl9NU0lYIFwK
ZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9hbWQ2NC9pbmNsdWRlL3ZtbV9kZXYuaC5vcmlnIC91
c3Ivc3JjL3N5cy9hbWQ2NC9pbmNsdWRlL3ZtbV9kZXYuaC5vcmlnCi0tLSB1c3Ivc3JjL3N5cy9h
bWQ2NC9pbmNsdWRlL3ZtbV9kZXYuaC5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw
ICswMTAwCisrKyAvdXNyL3NyYy9zeXMvYW1kNjQvaW5jbHVkZS92bW1fZGV2Lmgub3JpZwkyMDE2
LTExLTMwIDEwOjUyOjU0LjM3MDQ0MDAwMCArMDAwMApAQCAtMCwwICsxLDM4NSBAQAorLyotCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTEgTmV0QXBwLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkVUQVBQLCBJ
TkMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor
ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBORVRBUFAsIElOQyBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNE
OiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS92bW1fZGV2LmggMjk4MDk0IDIwMTYtMDQt
MTYgMDM6NDQ6NTBaIGdqYiAkCisgKi8KKworI2lmbmRlZglfVk1NX0RFVl9IXworI2RlZmluZQlf
Vk1NX0RFVl9IXworCisjaWZkZWYgX0tFUk5FTAordm9pZAl2bW1kZXZfaW5pdCh2b2lkKTsKK2lu
dAl2bW1kZXZfY2xlYW51cCh2b2lkKTsKKyNlbmRpZgorCitzdHJ1Y3Qgdm1fbWVtbWFwIHsKKwl2
bV9wYWRkcl90CWdwYTsKKwlpbnQJCXNlZ2lkOwkJLyogbWVtb3J5IHNlZ21lbnQgKi8KKwl2bV9v
b2Zmc2V0X3QJc2Vnb2ZmOwkJLyogb2Zmc2V0IGludG8gbWVtb3J5IHNlZ21lbnQgKi8KKwlzaXpl
X3QJCWxlbjsJCS8qIG1tYXAgbGVuZ3RoICovCisJaW50CQlwcm90OwkJLyogUldYICovCisJaW50
CQlmbGFnczsKK307CisjZGVmaW5lCVZNX01FTU1BUF9GX1dJUkVECTB4MDEKKyNkZWZpbmUJVk1f
TUVNTUFQX0ZfSU9NTVUJMHgwMgorCisjZGVmaW5lCVZNX01FTVNFR19OQU1FKG0pCSgobSktPm5h
bWVbMF0gIT0gJ1wwJyA/IChtKS0+bmFtZSA6IE5VTEwpCitzdHJ1Y3Qgdm1fbWVtc2VnIHsKKwlp
bnQJCXNlZ2lkOworCXNpemVfdAkJbGVuOworCWNoYXIJCW5hbWVbU1BFQ05BTUVMRU4gKyAxXTsK
K307CisKK3N0cnVjdCB2bV9yZWdpc3RlciB7CisJaW50CQljcHVpZDsKKwlpbnQJCXJlZ251bTsJ
CS8qIGVudW0gdm1fcmVnX25hbWUgKi8KKwl1aW50NjRfdAlyZWd2YWw7Cit9OworCitzdHJ1Y3Qg
dm1fc2VnX2Rlc2MgewkJCS8qIGRhdGEgb3IgY29kZSBzZWdtZW50ICovCisJaW50CQljcHVpZDsK
KwlpbnQJCXJlZ251bTsJCS8qIGVudW0gdm1fcmVnX25hbWUgKi8KKwlzdHJ1Y3Qgc2VnX2Rlc2Mg
ZGVzYzsKK307CisKK3N0cnVjdCB2bV9ydW4geworCWludAkJY3B1aWQ7CisJc3RydWN0IHZtX2V4
aXQJdm1fZXhpdDsKK307CisKK3N0cnVjdCB2bV9leGNlcHRpb24geworCWludAkJY3B1aWQ7CisJ
aW50CQl2ZWN0b3I7CisJdWludDMyX3QJZXJyb3JfY29kZTsKKwlpbnQJCWVycm9yX2NvZGVfdmFs
aWQ7CisJaW50CQlyZXN0YXJ0X2luc3RydWN0aW9uOworfTsKKworc3RydWN0IHZtX2xhcGljX21z
aSB7CisJdWludDY0X3QJbXNnOworCXVpbnQ2NF90CWFkZHI7Cit9OworCitzdHJ1Y3Qgdm1fbGFw
aWNfaXJxIHsKKwlpbnQJCWNwdWlkOworCWludAkJdmVjdG9yOworfTsKKworc3RydWN0IHZtX2lv
YXBpY19pcnEgeworCWludAkJaXJxOworfTsKKworc3RydWN0IHZtX2lzYV9pcnEgeworCWludAkJ
YXRwaWNfaXJxOworCWludAkJaW9hcGljX2lycTsKK307CisKK3N0cnVjdCB2bV9pc2FfaXJxX3Ry
aWdnZXIgeworCWludAkJYXRwaWNfaXJxOworCWVudW0gdm1faW50cl90cmlnZ2VyIHRyaWdnZXI7
Cit9OworCitzdHJ1Y3Qgdm1fY2FwYWJpbGl0eSB7CisJaW50CQljcHVpZDsKKwllbnVtIHZtX2Nh
cF90eXBlIGNhcHR5cGU7CisJaW50CQljYXB2YWw7CisJaW50CQlhbGxjcHVzOworfTsKKworc3Ry
dWN0IHZtX3BwdGRldiB7CisJaW50CQlidXM7CisJaW50CQlzbG90OworCWludAkJZnVuYzsKK307
CisKK3N0cnVjdCB2bV9wcHRkZXZfbW1pbyB7CisJaW50CQlidXM7CisJaW50CQlzbG90OworCWlu
dAkJZnVuYzsKKwl2bV9wYWRkcl90CWdwYTsKKwl2bV9wYWRkcl90CWhwYTsKKwlzaXplX3QJCWxl
bjsKK307CisKK3N0cnVjdCB2bV9wcHRkZXZfbXNpIHsKKwlpbnQJCXZjcHU7CisJaW50CQlidXM7
CisJaW50CQlzbG90OworCWludAkJZnVuYzsKKwlpbnQJCW51bXZlYzsJCS8qIDAgbWVhbnMgZGlz
YWJsZWQgKi8KKwl1aW50NjRfdAltc2c7CisJdWludDY0X3QJYWRkcjsKK307CisKK3N0cnVjdCB2
bV9wcHRkZXZfbXNpeCB7CisJaW50CQl2Y3B1OworCWludAkJYnVzOworCWludAkJc2xvdDsKKwlp
bnQJCWZ1bmM7CisJaW50CQlpZHg7CisJdWludDY0X3QJbXNnOworCXVpbnQzMl90CXZlY3Rvcl9j
b250cm9sOworCXVpbnQ2NF90CWFkZHI7Cit9OworCitzdHJ1Y3Qgdm1fbm1pIHsKKwlpbnQJCWNw
dWlkOworfTsKKworI2RlZmluZQlNQVhfVk1fU1RBVFMJNjQKK3N0cnVjdCB2bV9zdGF0cyB7CisJ
aW50CQljcHVpZDsJCQkJLyogaW4gKi8KKwlpbnQJCW51bV9lbnRyaWVzOwkJCS8qIG91dCAqLwor
CXN0cnVjdCB0aW1ldmFsCXR2OworCXVpbnQ2NF90CXN0YXRidWZbTUFYX1ZNX1NUQVRTXTsKK307
CisKK3N0cnVjdCB2bV9zdGF0X2Rlc2MgeworCWludAkJaW5kZXg7CQkJCS8qIGluICovCisJY2hh
cgkJZGVzY1sxMjhdOwkJCS8qIG91dCAqLworfTsKKworc3RydWN0IHZtX3gyYXBpYyB7CisJaW50
CQkJY3B1aWQ7CisJZW51bSB4MmFwaWNfc3RhdGUJc3RhdGU7Cit9OworCitzdHJ1Y3Qgdm1fZ3Bh
X3B0ZSB7CisJdWludDY0X3QJZ3BhOwkJCQkvKiBpbiAqLworCXVpbnQ2NF90CXB0ZVs0XTsJCQkJ
Lyogb3V0ICovCisJaW50CQlwdGVudW07Cit9OworCitzdHJ1Y3Qgdm1faHBldF9jYXAgeworCXVp
bnQzMl90CWNhcGFiaWxpdGllczsJLyogbG93ZXIgMzIgYml0cyBvZiBIUEVUIGNhcGFiaWxpdGll
cyAqLworfTsKKworc3RydWN0IHZtX3N1c3BlbmQgeworCWVudW0gdm1fc3VzcGVuZF9ob3cgaG93
OworfTsKKworc3RydWN0IHZtX2dsYTJncGEgeworCWludAkJdmNwdWlkOwkJLyogaW5wdXRzICov
CisJaW50IAkJcHJvdDsJCS8qIFBST1RfUkVBRCBvciBQUk9UX1dSSVRFICovCisJdWludDY0X3QJ
Z2xhOworCXN0cnVjdCB2bV9ndWVzdF9wYWdpbmcgcGFnaW5nOworCWludAkJZmF1bHQ7CQkvKiBv
dXRwdXRzICovCisJdWludDY0X3QJZ3BhOworfTsKKworc3RydWN0IHZtX2FjdGl2YXRlX2NwdSB7
CisJaW50CQl2Y3B1aWQ7Cit9OworCitzdHJ1Y3Qgdm1fY3B1c2V0IHsKKwlpbnQJCXdoaWNoOwor
CWludAkJY3B1c2V0c2l6ZTsKKwljcHVzZXRfdAkqY3B1czsKK307CisjZGVmaW5lCVZNX0FDVElW
RV9DUFVTCQkwCisjZGVmaW5lCVZNX1NVU1BFTkRFRF9DUFVTCTEKKworc3RydWN0IHZtX2ludGlu
Zm8geworCWludAkJdmNwdWlkOworCXVpbnQ2NF90CWluZm8xOworCXVpbnQ2NF90CWluZm8yOwor
fTsKKworc3RydWN0IHZtX3J0Y190aW1lIHsKKwl0aW1lX3QJCXNlY3M7Cit9OworCitzdHJ1Y3Qg
dm1fcnRjX2RhdGEgeworCWludAkJb2Zmc2V0OworCXVpbnQ4X3QJCXZhbHVlOworfTsKKworZW51
bSB7CisJLyogZ2VuZXJhbCByb3V0aW5lcyAqLworCUlPQ05VTV9BQklWRVJTID0gMCwKKwlJT0NO
VU1fUlVOID0gMSwKKwlJT0NOVU1fU0VUX0NBUEFCSUxJVFkgPSAyLAorCUlPQ05VTV9HRVRfQ0FQ
QUJJTElUWSA9IDMsCisJSU9DTlVNX1NVU1BFTkQgPSA0LAorCUlPQ05VTV9SRUlOSVQgPSA1LAor
CisJLyogbWVtb3J5IGFwaXMgKi8KKwlJT0NOVU1fTUFQX01FTU9SWSA9IDEwLAkJCS8qIGRlcHJl
Y2F0ZWQgKi8KKwlJT0NOVU1fR0VUX01FTU9SWV9TRUcgPSAxMSwJCS8qIGRlcHJlY2F0ZWQgKi8K
KwlJT0NOVU1fR0VUX0dQQV9QTUFQID0gMTIsCisJSU9DTlVNX0dMQTJHUEEgPSAxMywKKwlJT0NO
VU1fQUxMT0NfTUVNU0VHID0gMTQsCisJSU9DTlVNX0dFVF9NRU1TRUcgPSAxNSwKKwlJT0NOVU1f
TU1BUF9NRU1TRUcgPSAxNiwKKwlJT0NOVU1fTU1BUF9HRVRORVhUID0gMTcsCisKKwkvKiByZWdp
c3Rlci9zdGF0ZSBhY2Nlc3NvcnMgKi8KKwlJT0NOVU1fU0VUX1JFR0lTVEVSID0gMjAsCisJSU9D
TlVNX0dFVF9SRUdJU1RFUiA9IDIxLAorCUlPQ05VTV9TRVRfU0VHTUVOVF9ERVNDUklQVE9SID0g
MjIsCisJSU9DTlVNX0dFVF9TRUdNRU5UX0RFU0NSSVBUT1IgPSAyMywKKworCS8qIGludGVycnVw
dCBpbmplY3Rpb24gKi8KKwlJT0NOVU1fR0VUX0lOVElORk8gPSAyOCwKKwlJT0NOVU1fU0VUX0lO
VElORk8gPSAyOSwKKwlJT0NOVU1fSU5KRUNUX0VYQ0VQVElPTiA9IDMwLAorCUlPQ05VTV9MQVBJ
Q19JUlEgPSAzMSwKKwlJT0NOVU1fSU5KRUNUX05NSSA9IDMyLAorCUlPQ05VTV9JT0FQSUNfQVNT
RVJUX0lSUSA9IDMzLAorCUlPQ05VTV9JT0FQSUNfREVBU1NFUlRfSVJRID0gMzQsCisJSU9DTlVN
X0lPQVBJQ19QVUxTRV9JUlEgPSAzNSwKKwlJT0NOVU1fTEFQSUNfTVNJID0gMzYsCisJSU9DTlVN
X0xBUElDX0xPQ0FMX0lSUSA9IDM3LAorCUlPQ05VTV9JT0FQSUNfUElOQ09VTlQgPSAzOCwKKwlJ
T0NOVU1fUkVTVEFSVF9JTlNUUlVDVElPTiA9IDM5LAorCisJLyogUENJIHBhc3MtdGhydSAqLwor
CUlPQ05VTV9CSU5EX1BQVERFViA9IDQwLAorCUlPQ05VTV9VTkJJTkRfUFBUREVWID0gNDEsCisJ
SU9DTlVNX01BUF9QUFRERVZfTU1JTyA9IDQyLAorCUlPQ05VTV9QUFRERVZfTVNJID0gNDMsCisJ
SU9DTlVNX1BQVERFVl9NU0lYID0gNDQsCisKKwkvKiBzdGF0aXN0aWNzICovCisJSU9DTlVNX1ZN
X1NUQVRTID0gNTAsIAorCUlPQ05VTV9WTV9TVEFUX0RFU0MgPSA1MSwKKworCS8qIGtlcm5lbCBk
ZXZpY2Ugc3RhdGUgKi8KKwlJT0NOVU1fU0VUX1gyQVBJQ19TVEFURSA9IDYwLAorCUlPQ05VTV9H
RVRfWDJBUElDX1NUQVRFID0gNjEsCisJSU9DTlVNX0dFVF9IUEVUX0NBUEFCSUxJVElFUyA9IDYy
LAorCisJLyogbGVnYWN5IGludGVycnVwdCBpbmplY3Rpb24gKi8KKwlJT0NOVU1fSVNBX0FTU0VS
VF9JUlEgPSA4MCwKKwlJT0NOVU1fSVNBX0RFQVNTRVJUX0lSUSA9IDgxLAorCUlPQ05VTV9JU0Ff
UFVMU0VfSVJRID0gODIsCisJSU9DTlVNX0lTQV9TRVRfSVJRX1RSSUdHRVIgPSA4MywKKworCS8q
IHZtX2NwdXNldCAqLworCUlPQ05VTV9BQ1RJVkFURV9DUFUgPSA5MCwKKwlJT0NOVU1fR0VUX0NQ
VVNFVCA9IDkxLAorCisJLyogUlRDICovCisJSU9DTlVNX1JUQ19SRUFEID0gMTAwLAorCUlPQ05V
TV9SVENfV1JJVEUgPSAxMDEsCisJSU9DTlVNX1JUQ19TRVRUSU1FID0gMTAyLAorCUlPQ05VTV9S
VENfR0VUVElNRSA9IDEwMywKK307CisKKyNkZWZpbmUJVk1fUlVOCQlcCisJX0lPV1IoJ3YnLCBJ
T0NOVU1fUlVOLCBzdHJ1Y3Qgdm1fcnVuKQorI2RlZmluZQlWTV9TVVNQRU5ECVwKKwlfSU9XKCd2
JywgSU9DTlVNX1NVU1BFTkQsIHN0cnVjdCB2bV9zdXNwZW5kKQorI2RlZmluZQlWTV9SRUlOSVQJ
XAorCV9JTygndicsIElPQ05VTV9SRUlOSVQpCisjZGVmaW5lCVZNX0FMTE9DX01FTVNFRwlcCisJ
X0lPVygndicsIElPQ05VTV9BTExPQ19NRU1TRUcsIHN0cnVjdCB2bV9tZW1zZWcpCisjZGVmaW5l
CVZNX0dFVF9NRU1TRUcJXAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9NRU1TRUcsIHN0cnVjdCB2
bV9tZW1zZWcpCisjZGVmaW5lCVZNX01NQVBfTUVNU0VHCVwKKwlfSU9XKCd2JywgSU9DTlVNX01N
QVBfTUVNU0VHLCBzdHJ1Y3Qgdm1fbWVtbWFwKQorI2RlZmluZQlWTV9NTUFQX0dFVE5FWFQJXAor
CV9JT1dSKCd2JywgSU9DTlVNX01NQVBfR0VUTkVYVCwgc3RydWN0IHZtX21lbW1hcCkKKyNkZWZp
bmUJVk1fU0VUX1JFR0lTVEVSIFwKKwlfSU9XKCd2JywgSU9DTlVNX1NFVF9SRUdJU1RFUiwgc3Ry
dWN0IHZtX3JlZ2lzdGVyKQorI2RlZmluZQlWTV9HRVRfUkVHSVNURVIgXAorCV9JT1dSKCd2Jywg
SU9DTlVNX0dFVF9SRUdJU1RFUiwgc3RydWN0IHZtX3JlZ2lzdGVyKQorI2RlZmluZQlWTV9TRVRf
U0VHTUVOVF9ERVNDUklQVE9SIFwKKwlfSU9XKCd2JywgSU9DTlVNX1NFVF9TRUdNRU5UX0RFU0NS
SVBUT1IsIHN0cnVjdCB2bV9zZWdfZGVzYykKKyNkZWZpbmUJVk1fR0VUX1NFR01FTlRfREVTQ1JJ
UFRPUiBcCisJX0lPV1IoJ3YnLCBJT0NOVU1fR0VUX1NFR01FTlRfREVTQ1JJUFRPUiwgc3RydWN0
IHZtX3NlZ19kZXNjKQorI2RlZmluZQlWTV9JTkpFQ1RfRVhDRVBUSU9OCVwKKwlfSU9XKCd2Jywg
SU9DTlVNX0lOSkVDVF9FWENFUFRJT04sIHN0cnVjdCB2bV9leGNlcHRpb24pCisjZGVmaW5lCVZN
X0xBUElDX0lSUSAJCVwKKwlfSU9XKCd2JywgSU9DTlVNX0xBUElDX0lSUSwgc3RydWN0IHZtX2xh
cGljX2lycSkKKyNkZWZpbmUJVk1fTEFQSUNfTE9DQUxfSVJRIAlcCisJX0lPVygndicsIElPQ05V
TV9MQVBJQ19MT0NBTF9JUlEsIHN0cnVjdCB2bV9sYXBpY19pcnEpCisjZGVmaW5lCVZNX0xBUElD
X01TSQkJXAorCV9JT1coJ3YnLCBJT0NOVU1fTEFQSUNfTVNJLCBzdHJ1Y3Qgdm1fbGFwaWNfbXNp
KQorI2RlZmluZQlWTV9JT0FQSUNfQVNTRVJUX0lSUQlcCisJX0lPVygndicsIElPQ05VTV9JT0FQ
SUNfQVNTRVJUX0lSUSwgc3RydWN0IHZtX2lvYXBpY19pcnEpCisjZGVmaW5lCVZNX0lPQVBJQ19E
RUFTU0VSVF9JUlEJXAorCV9JT1coJ3YnLCBJT0NOVU1fSU9BUElDX0RFQVNTRVJUX0lSUSwgc3Ry
dWN0IHZtX2lvYXBpY19pcnEpCisjZGVmaW5lCVZNX0lPQVBJQ19QVUxTRV9JUlEJXAorCV9JT1co
J3YnLCBJT0NOVU1fSU9BUElDX1BVTFNFX0lSUSwgc3RydWN0IHZtX2lvYXBpY19pcnEpCisjZGVm
aW5lCVZNX0lPQVBJQ19QSU5DT1VOVAlcCisJX0lPUigndicsIElPQ05VTV9JT0FQSUNfUElOQ09V
TlQsIGludCkKKyNkZWZpbmUJVk1fSVNBX0FTU0VSVF9JUlEJXAorCV9JT1coJ3YnLCBJT0NOVU1f
SVNBX0FTU0VSVF9JUlEsIHN0cnVjdCB2bV9pc2FfaXJxKQorI2RlZmluZQlWTV9JU0FfREVBU1NF
UlRfSVJRCVwKKwlfSU9XKCd2JywgSU9DTlVNX0lTQV9ERUFTU0VSVF9JUlEsIHN0cnVjdCB2bV9p
c2FfaXJxKQorI2RlZmluZQlWTV9JU0FfUFVMU0VfSVJRCVwKKwlfSU9XKCd2JywgSU9DTlVNX0lT
QV9QVUxTRV9JUlEsIHN0cnVjdCB2bV9pc2FfaXJxKQorI2RlZmluZQlWTV9JU0FfU0VUX0lSUV9U
UklHR0VSCVwKKwlfSU9XKCd2JywgSU9DTlVNX0lTQV9TRVRfSVJRX1RSSUdHRVIsIHN0cnVjdCB2
bV9pc2FfaXJxX3RyaWdnZXIpCisjZGVmaW5lCVZNX1NFVF9DQVBBQklMSVRZIFwKKwlfSU9XKCd2
JywgSU9DTlVNX1NFVF9DQVBBQklMSVRZLCBzdHJ1Y3Qgdm1fY2FwYWJpbGl0eSkKKyNkZWZpbmUJ
Vk1fR0VUX0NBUEFCSUxJVFkgXAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9DQVBBQklMSVRZLCBz
dHJ1Y3Qgdm1fY2FwYWJpbGl0eSkKKyNkZWZpbmUJVk1fQklORF9QUFRERVYgXAorCV9JT1coJ3Yn
LCBJT0NOVU1fQklORF9QUFRERVYsIHN0cnVjdCB2bV9wcHRkZXYpCisjZGVmaW5lCVZNX1VOQklO
RF9QUFRERVYgXAorCV9JT1coJ3YnLCBJT0NOVU1fVU5CSU5EX1BQVERFViwgc3RydWN0IHZtX3Bw
dGRldikKKyNkZWZpbmUJVk1fTUFQX1BQVERFVl9NTUlPIFwKKwlfSU9XKCd2JywgSU9DTlVNX01B
UF9QUFRERVZfTU1JTywgc3RydWN0IHZtX3BwdGRldl9tbWlvKQorI2RlZmluZQlWTV9QUFRERVZf
TVNJIFwKKwlfSU9XKCd2JywgSU9DTlVNX1BQVERFVl9NU0ksIHN0cnVjdCB2bV9wcHRkZXZfbXNp
KQorI2RlZmluZQlWTV9QUFRERVZfTVNJWCBcCisJX0lPVygndicsIElPQ05VTV9QUFRERVZfTVNJ
WCwgc3RydWN0IHZtX3BwdGRldl9tc2l4KQorI2RlZmluZSBWTV9JTkpFQ1RfTk1JIFwKKwlfSU9X
KCd2JywgSU9DTlVNX0lOSkVDVF9OTUksIHN0cnVjdCB2bV9ubWkpCisjZGVmaW5lCVZNX1NUQVRT
IFwKKwlfSU9XUigndicsIElPQ05VTV9WTV9TVEFUUywgc3RydWN0IHZtX3N0YXRzKQorI2RlZmlu
ZQlWTV9TVEFUX0RFU0MgXAorCV9JT1dSKCd2JywgSU9DTlVNX1ZNX1NUQVRfREVTQywgc3RydWN0
IHZtX3N0YXRfZGVzYykKKyNkZWZpbmUJVk1fU0VUX1gyQVBJQ19TVEFURSBcCisJX0lPVygndics
IElPQ05VTV9TRVRfWDJBUElDX1NUQVRFLCBzdHJ1Y3Qgdm1feDJhcGljKQorI2RlZmluZQlWTV9H
RVRfWDJBUElDX1NUQVRFIFwKKwlfSU9XUigndicsIElPQ05VTV9HRVRfWDJBUElDX1NUQVRFLCBz
dHJ1Y3Qgdm1feDJhcGljKQorI2RlZmluZQlWTV9HRVRfSFBFVF9DQVBBQklMSVRJRVMgXAorCV9J
T1IoJ3YnLCBJT0NOVU1fR0VUX0hQRVRfQ0FQQUJJTElUSUVTLCBzdHJ1Y3Qgdm1faHBldF9jYXAp
CisjZGVmaW5lCVZNX0dFVF9HUEFfUE1BUCBcCisJX0lPV1IoJ3YnLCBJT0NOVU1fR0VUX0dQQV9Q
TUFQLCBzdHJ1Y3Qgdm1fZ3BhX3B0ZSkKKyNkZWZpbmUJVk1fR0xBMkdQQQlcCisJX0lPV1IoJ3Yn
LCBJT0NOVU1fR0xBMkdQQSwgc3RydWN0IHZtX2dsYTJncGEpCisjZGVmaW5lCVZNX0FDVElWQVRF
X0NQVQlcCisJX0lPVygndicsIElPQ05VTV9BQ1RJVkFURV9DUFUsIHN0cnVjdCB2bV9hY3RpdmF0
ZV9jcHUpCisjZGVmaW5lCVZNX0dFVF9DUFVTCVwKKwlfSU9XKCd2JywgSU9DTlVNX0dFVF9DUFVT
RVQsIHN0cnVjdCB2bV9jcHVzZXQpCisjZGVmaW5lCVZNX1NFVF9JTlRJTkZPCVwKKwlfSU9XKCd2
JywgSU9DTlVNX1NFVF9JTlRJTkZPLCBzdHJ1Y3Qgdm1faW50aW5mbykKKyNkZWZpbmUJVk1fR0VU
X0lOVElORk8JXAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9JTlRJTkZPLCBzdHJ1Y3Qgdm1faW50
aW5mbykKKyNkZWZpbmUgVk1fUlRDX1dSSVRFIFwKKwlfSU9XKCd2JywgSU9DTlVNX1JUQ19XUklU
RSwgc3RydWN0IHZtX3J0Y19kYXRhKQorI2RlZmluZSBWTV9SVENfUkVBRCBcCisJX0lPV1IoJ3Yn
LCBJT0NOVU1fUlRDX1JFQUQsIHN0cnVjdCB2bV9ydGNfZGF0YSkKKyNkZWZpbmUgVk1fUlRDX1NF
VFRJTUUJXAorCV9JT1coJ3YnLCBJT0NOVU1fUlRDX1NFVFRJTUUsIHN0cnVjdCB2bV9ydGNfdGlt
ZSkKKyNkZWZpbmUgVk1fUlRDX0dFVFRJTUUJXAorCV9JT1IoJ3YnLCBJT0NOVU1fUlRDX0dFVFRJ
TUUsIHN0cnVjdCB2bV9ydGNfdGltZSkKKyNkZWZpbmUJVk1fUkVTVEFSVF9JTlNUUlVDVElPTiBc
CisJX0lPVygndicsIElPQ05VTV9SRVNUQVJUX0lOU1RSVUNUSU9OLCBpbnQpCisjZW5kaWYKZGlm
ZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tLmMgL3Vzci9zcmMvc3lzL2FtZDY0
L3ZtbS92bW0uYwotLS0gdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbS5jCTIwMTYtMDktMjkgMDA6
MjQ6NTQuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbS5jCTIw
MTYtMTEtMzAgMTA6NTY6MDUuNzkwMzczMDAwICswMDAwCkBAIC02Niw2ICs2Niw3IEBACiAjaW5j
bHVkZSAidm1tX2t0ci5oIgogI2luY2x1ZGUgInZtbV9ob3N0LmgiCiAjaW5jbHVkZSAidm1tX21l
bS5oIgorI2luY2x1ZGUgInZtbV91c2VybWVtLmgiCiAjaW5jbHVkZSAidm1tX3V0aWwuaCIKICNp
bmNsdWRlICJ2YXRwaWMuaCIKICNpbmNsdWRlICJ2YXRwaXQuaCIKQEAgLTE0OCw2ICsxNDksNyBA
QAogCXN0cnVjdCB2YXRwaXQJKnZhdHBpdDsJCS8qIChpKSB2aXJ0dWFsIGF0cGl0ICovCiAJc3Ry
dWN0IHZwbXRtcgkqdnBtdG1yOwkJLyogKGkpIHZpcnR1YWwgQUNQSSBQTSB0aW1lciAqLwogCXN0
cnVjdCB2cnRjCSp2cnRjOwkJCS8qIChvKSB2aXJ0dWFsIFJUQyAqLworCXN0cnVjdCBpb3JlZ2gJ
KmlvcmVnaDsJCS8qICgpIEkvTyByZWcgaGFuZGxlciAqLwogCXZvbGF0aWxlIGNwdXNldF90IGFj
dGl2ZV9jcHVzOwkJLyogKGkpIGFjdGl2ZSB2Y3B1cyAqLwogCWludAkJc3VzcGVuZDsJCS8qIChp
KSBzdG9wIFZNIGV4ZWN1dGlvbiAqLwogCXZvbGF0aWxlIGNwdXNldF90IHN1c3BlbmRlZF9jcHVz
OyAJLyogKGkpIHN1c3BlbmRlZCB2Y3B1cyAqLwpAQCAtNDE5LDYgKzQyMSw3IEBACiAJdm0tPnZw
bXRtciA9IHZwbXRtcl9pbml0KHZtKTsKIAlpZiAoY3JlYXRlKQogCQl2bS0+dnJ0YyA9IHZydGNf
aW5pdCh2bSk7CisJdm0tPmlvcmVnaCA9IGlvcmVnaF9pbml0KHZtKTsKIAogCUNQVV9aRVJPKCZ2
bS0+YWN0aXZlX2NwdXMpOwogCkBAIC00NzUsMTEgKzQ3OCwxMyBAQAogCQl2cnRjX2NsZWFudXAo
dm0tPnZydGMpOwogCWVsc2UKIAkJdnJ0Y19yZXNldCh2bS0+dnJ0Yyk7CisJaW9yZWdoX2NsZWFu
dXAodm0tPmlvcmVnaCk7CiAJdnBtdG1yX2NsZWFudXAodm0tPnZwbXRtcik7CiAJdmF0cGl0X2Ns
ZWFudXAodm0tPnZhdHBpdCk7CiAJdmhwZXRfY2xlYW51cCh2bS0+dmhwZXQpOwogCXZhdHBpY19j
bGVhbnVwKHZtLT52YXRwaWMpOwogCXZpb2FwaWNfY2xlYW51cCh2bS0+dmlvYXBpYyk7CisJdm1t
X3VzZXJtZW1fY2xlYW51cCh2bS0+dm1zcGFjZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVk1fTUFY
Q1BVOyBpKyspCiAJCXZjcHVfY2xlYW51cCh2bSwgaSwgZGVzdHJveSk7CkBAIC01NTIsNiArNTU3
LDE4IEBACiAJCXJldHVybiAoMCk7CiB9CiAKKy8qIEhhbmRsZXIgZnVuY3Rpb24gZm9yIFZNX01B
UF9VU0VSX0JVRiBpb2N0bC4gKi8KK2ludAordm1fbWFwX3VzZXJtZW0oc3RydWN0IHZtICp2bSwg
dm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4sIHZvaWQgKmJ1Ziwgc3RydWN0IHRocmVhZCAqdGQp
Cit7CisJdm1fb2JqZWN0X3Qgb2JqOworCisJaWYgKChvYmogPSB2bW1fdXNlcm1lbV9hbGxvYyh2
bS0+dm1zcGFjZSwgZ3BhLCBsZW4sIGJ1ZiwgdGQpKSA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT01F
TSk7CisKKwlyZXR1cm4gKDApOworfQorCiBpbnQKIHZtX3VubWFwX21taW8oc3RydWN0IHZtICp2
bSwgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4pCiB7CkBAIC01ODgsNiArNjA1LDkgQEAKIAlp
ZiAocHB0X2lzX21taW8odm0sIGdwYSkpCiAJCXJldHVybiAodHJ1ZSk7CQkJLyogJ2dwYScgaXMg
cGNpIHBhc3N0aHJ1IG1taW8gKi8KIAorCWlmICh1c2VybWVtX21hcHBlZCh2bS0+dm1zcGFjZSwg
Z3BhKSkKKwkJcmV0dXJuICh0cnVlKTsJCQkvKiAnZ3BhJyBpcyB1c2VyLXNwYWNlIGJ1ZmZlciBt
YXBwZWQgKi8KKwogCXJldHVybiAoZmFsc2UpOwogfQogCkBAIC0yNDU3LDYgKzI0NzcsMTIgQEAK
IAlyZXR1cm4gKHZtLT52cnRjKTsKIH0KIAorc3RydWN0IGlvcmVnaCAqCit2bV9pb3JlZ2goc3Ry
dWN0IHZtICp2bSkKK3sKKwlyZXR1cm4gKHZtLT5pb3JlZ2gpOworfQorCiBlbnVtIHZtX3JlZ19u
YW1lCiB2bV9zZWdtZW50X25hbWUoaW50IHNlZykKIHsKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5
cy9hbWQ2NC92bW0vdm1tLmMub3JpZyAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbS5jLm9yaWcK
LS0tIHVzci9zcmMvc3lzL2FtZDY0L3ZtbS92bW0uYy5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAu
MDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbS5jLm9yaWcJMjAx
Ni0xMS0zMCAxMDo1Mjo1Ny4xODA1MjgwMDAgKzAwMDAKQEAgLTAsMCArMSwyNTk4IEBACisvKi0K
KyAqIENvcHlyaWdodCAoYykgMjAxMSBOZXRBcHAsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBORVRBUFAs
IElOQyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIE5FVEFQUCwgSU5DIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVC
U0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC92bW0vdm1tLmMgMjk2MTAzIDIwMTYtMDItMjYgMTY6
MTg6NDdaIG1hcmNlbCAkCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQo
IiRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvdm1tL3ZtbS5jIDI5NjEwMyAyMDE2LTAy
LTI2IDE2OjE4OjQ3WiBtYXJjZWwgJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5j
bHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5
cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3lzL21hbGxv
Yy5oPgorI2luY2x1ZGUgPHN5cy9wY3B1Lmg+CisjaW5jbHVkZSA8c3lzL2xvY2suaD4KKyNpbmNs
dWRlIDxzeXMvbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvcHJvYy5oPgorI2luY2x1ZGUgPHN5cy9y
d2xvY2suaD4KKyNpbmNsdWRlIDxzeXMvc2NoZWQuaD4KKyNpbmNsdWRlIDxzeXMvc21wLmg+Cisj
aW5jbHVkZSA8c3lzL3N5c3RtLmg+CisKKyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZt
L3ZtX29iamVjdC5oPgorI2luY2x1ZGUgPHZtL3ZtX3BhZ2UuaD4KKyNpbmNsdWRlIDx2bS9wbWFw
Lmg+CisjaW5jbHVkZSA8dm0vdm1fbWFwLmg+CisjaW5jbHVkZSA8dm0vdm1fZXh0ZXJuLmg+Cisj
aW5jbHVkZSA8dm0vdm1fcGFyYW0uaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvY3B1Lmg+CisjaW5j
bHVkZSA8bWFjaGluZS9wY2IuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3NtcC5oPgorI2luY2x1ZGUg
PHg4Ni9wc2wuaD4KKyNpbmNsdWRlIDx4ODYvYXBpY3JlZy5oPgorCisjaW5jbHVkZSA8bWFjaGlu
ZS92bW0uaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3ZtbV9kZXYuaD4KKyNpbmNsdWRlIDxtYWNoaW5l
L3ZtbV9pbnN0cnVjdGlvbl9lbXVsLmg+CisKKyNpbmNsdWRlICJ2bW1faW9wb3J0LmgiCisjaW5j
bHVkZSAidm1tX2t0ci5oIgorI2luY2x1ZGUgInZtbV9ob3N0LmgiCisjaW5jbHVkZSAidm1tX21l
bS5oIgorI2luY2x1ZGUgInZtbV91dGlsLmgiCisjaW5jbHVkZSAidmF0cGljLmgiCisjaW5jbHVk
ZSAidmF0cGl0LmgiCisjaW5jbHVkZSAidmhwZXQuaCIKKyNpbmNsdWRlICJ2aW9hcGljLmgiCisj
aW5jbHVkZSAidmxhcGljLmgiCisjaW5jbHVkZSAidnBtdG1yLmgiCisjaW5jbHVkZSAidnJ0Yy5o
IgorI2luY2x1ZGUgInZtbV9zdGF0LmgiCisjaW5jbHVkZSAidm1tX2xhcGljLmgiCisKKyNpbmNs
dWRlICJpby9wcHQuaCIKKyNpbmNsdWRlICJpby9pb21tdS5oIgorCitzdHJ1Y3QgdmxhcGljOwor
CisvKgorICogSW5pdGlhbGl6YXRpb246CisgKiAoYSkgYWxsb2NhdGVkIHdoZW4gdmNwdSBpcyBj
cmVhdGVkCisgKiAoaSkgaW5pdGlhbGl6ZWQgd2hlbiB2Y3B1IGlzIGNyZWF0ZWQgYW5kIHdoZW4g
aXQgaXMgcmVpbml0aWFsaXplZAorICogKG8pIGluaXRpYWxpemVkIHRoZSBmaXJzdCB0aW1lIHRo
ZSB2Y3B1IGlzIGNyZWF0ZWQKKyAqICh4KSBpbml0aWFsaXplZCBiZWZvcmUgdXNlCisgKi8KK3N0
cnVjdCB2Y3B1IHsKKwlzdHJ1Y3QgbXR4IAltdHg7CQkvKiAobykgcHJvdGVjdHMgJ3N0YXRlJyBh
bmQgJ2hvc3RjcHUnICovCisJZW51bSB2Y3B1X3N0YXRlCXN0YXRlOwkJLyogKG8pIHZjcHUgc3Rh
dGUgKi8KKwlpbnQJCWhvc3RjcHU7CS8qIChvKSB2Y3B1J3MgaG9zdCBjcHUgKi8KKwlpbnQJCXJl
cWlkbGU7CS8qIChpKSByZXF1ZXN0IHZjcHUgdG8gaWRsZSAqLworCXN0cnVjdCB2bGFwaWMJKnZs
YXBpYzsJLyogKGkpIEFQSUMgZGV2aWNlIG1vZGVsICovCisJZW51bSB4MmFwaWNfc3RhdGUgeDJh
cGljX3N0YXRlOwkvKiAoaSkgQVBJQyBtb2RlICovCisJdWludDY0X3QJZXhpdGludGluZm87CS8q
IChpKSBldmVudHMgcGVuZGluZyBhdCBWTSBleGl0ICovCisJaW50CQlubWlfcGVuZGluZzsJLyog
KGkpIE5NSSBwZW5kaW5nICovCisJaW50CQlleHRpbnRfcGVuZGluZzsJLyogKGkpIElOVFIgcGVu
ZGluZyAqLworCWludAlleGNlcHRpb25fcGVuZGluZzsJLyogKGkpIGV4Y2VwdGlvbiBwZW5kaW5n
ICovCisJaW50CWV4Y192ZWN0b3I7CQkvKiAoeCkgZXhjZXB0aW9uIGNvbGxhdGVyYWwgKi8KKwlp
bnQJZXhjX2VycmNvZGVfdmFsaWQ7CisJdWludDMyX3QgZXhjX2VycmNvZGU7CisJc3RydWN0IHNh
dmVmcHUJKmd1ZXN0ZnB1OwkvKiAoYSxpKSBndWVzdCBmcHUgc3RhdGUgKi8KKwl1aW50NjRfdAln
dWVzdF94Y3IwOwkvKiAoaSkgZ3Vlc3QgJXhjcjAgcmVnaXN0ZXIgKi8KKwl2b2lkCQkqc3RhdHM7
CQkvKiAoYSxpKSBzdGF0aXN0aWNzICovCisJc3RydWN0IHZtX2V4aXQJZXhpdGluZm87CS8qICh4
KSBleGl0IHJlYXNvbiBhbmQgY29sbGF0ZXJhbCAqLworCXVpbnQ2NF90CW5leHRyaXA7CS8qICh4
KSBuZXh0IGluc3RydWN0aW9uIHRvIGV4ZWN1dGUgKi8KK307CisKKyNkZWZpbmUJdmNwdV9sb2Nr
X2luaXRpYWxpemVkKHYpIG10eF9pbml0aWFsaXplZCgmKCh2KS0+bXR4KSkKKyNkZWZpbmUJdmNw
dV9sb2NrX2luaXQodikJbXR4X2luaXQoJigodiktPm10eCksICJ2Y3B1IGxvY2siLCAwLCBNVFhf
U1BJTikKKyNkZWZpbmUJdmNwdV9sb2NrKHYpCQltdHhfbG9ja19zcGluKCYoKHYpLT5tdHgpKQor
I2RlZmluZQl2Y3B1X3VubG9jayh2KQkJbXR4X3VubG9ja19zcGluKCYoKHYpLT5tdHgpKQorI2Rl
ZmluZQl2Y3B1X2Fzc2VydF9sb2NrZWQodikJbXR4X2Fzc2VydCgmKCh2KS0+bXR4KSwgTUFfT1dO
RUQpCisKK3N0cnVjdCBtZW1fc2VnIHsKKwlzaXplX3QJbGVuOworCWJvb2wJc3lzbWVtOworCXN0
cnVjdCB2bV9vYmplY3QgKm9iamVjdDsKK307CisjZGVmaW5lCVZNX01BWF9NRU1TRUdTCTMKKwor
c3RydWN0IG1lbV9tYXAgeworCXZtX3BhZGRyX3QJZ3BhOworCXNpemVfdAkJbGVuOworCXZtX29v
ZmZzZXRfdAlzZWdvZmY7CisJaW50CQlzZWdpZDsKKwlpbnQJCXByb3Q7CisJaW50CQlmbGFnczsK
K307CisjZGVmaW5lCVZNX01BWF9NRU1NQVBTCTQKKworLyoKKyAqIEluaXRpYWxpemF0aW9uOgor
ICogKG8pIGluaXRpYWxpemVkIHRoZSBmaXJzdCB0aW1lIHRoZSBWTSBpcyBjcmVhdGVkCisgKiAo
aSkgaW5pdGlhbGl6ZWQgd2hlbiBWTSBpcyBjcmVhdGVkIGFuZCB3aGVuIGl0IGlzIHJlaW5pdGlh
bGl6ZWQKKyAqICh4KSBpbml0aWFsaXplZCBiZWZvcmUgdXNlCisgKi8KK3N0cnVjdCB2bSB7CisJ
dm9pZAkJKmNvb2tpZTsJCS8qIChpKSBjcHUtc3BlY2lmaWMgZGF0YSAqLworCXZvaWQJCSppb21t
dTsJCQkvKiAoeCkgaW9tbXUtc3BlY2lmaWMgZGF0YSAqLworCXN0cnVjdCB2aHBldAkqdmhwZXQ7
CQkJLyogKGkpIHZpcnR1YWwgSFBFVCAqLworCXN0cnVjdCB2aW9hcGljCSp2aW9hcGljOwkJLyog
KGkpIHZpcnR1YWwgaW9hcGljICovCisJc3RydWN0IHZhdHBpYwkqdmF0cGljOwkJLyogKGkpIHZp
cnR1YWwgYXRwaWMgKi8KKwlzdHJ1Y3QgdmF0cGl0CSp2YXRwaXQ7CQkvKiAoaSkgdmlydHVhbCBh
dHBpdCAqLworCXN0cnVjdCB2cG10bXIJKnZwbXRtcjsJCS8qIChpKSB2aXJ0dWFsIEFDUEkgUE0g
dGltZXIgKi8KKwlzdHJ1Y3QgdnJ0YwkqdnJ0YzsJCQkvKiAobykgdmlydHVhbCBSVEMgKi8KKwl2
b2xhdGlsZSBjcHVzZXRfdCBhY3RpdmVfY3B1czsJCS8qIChpKSBhY3RpdmUgdmNwdXMgKi8KKwlp
bnQJCXN1c3BlbmQ7CQkvKiAoaSkgc3RvcCBWTSBleGVjdXRpb24gKi8KKwl2b2xhdGlsZSBjcHVz
ZXRfdCBzdXNwZW5kZWRfY3B1czsgCS8qIChpKSBzdXNwZW5kZWQgdmNwdXMgKi8KKwl2b2xhdGls
ZSBjcHVzZXRfdCBoYWx0ZWRfY3B1czsJCS8qICh4KSBjcHVzIGluIGEgaGFyZCBoYWx0ICovCisJ
Y3B1c2V0X3QJcmVuZGV6dm91c19yZXFfY3B1czsJLyogKHgpIHJlbmRlenZvdXMgcmVxdWVzdGVk
ICovCisJY3B1c2V0X3QJcmVuZGV6dm91c19kb25lX2NwdXM7CS8qICh4KSByZW5kZXp2b3VzIGZp
bmlzaGVkICovCisJdm9pZAkJKnJlbmRlenZvdXNfYXJnOwkvKiAoeCkgcmVuZGV6dm91cyBmdW5j
L2FyZyAqLworCXZtX3JlbmRlenZvdXNfZnVuY190IHJlbmRlenZvdXNfZnVuYzsKKwlzdHJ1Y3Qg
bXR4CXJlbmRlenZvdXNfbXR4OwkJLyogKG8pIHJlbmRlenZvdXMgbG9jayAqLworCXN0cnVjdCBt
ZW1fbWFwCW1lbV9tYXBzW1ZNX01BWF9NRU1NQVBTXTsgLyogKGkpIGd1ZXN0IGFkZHJlc3Mgc3Bh
Y2UgKi8KKwlzdHJ1Y3QgbWVtX3NlZwltZW1fc2Vnc1tWTV9NQVhfTUVNU0VHU107IC8qIChvKSBn
dWVzdCBtZW1vcnkgcmVnaW9ucyAqLworCXN0cnVjdCB2bXNwYWNlCSp2bXNwYWNlOwkJLyogKG8p
IGd1ZXN0J3MgYWRkcmVzcyBzcGFjZSAqLworCWNoYXIJCW5hbWVbVk1fTUFYX05BTUVMRU5dOwkv
KiAobykgdmlydHVhbCBtYWNoaW5lIG5hbWUgKi8KKwlzdHJ1Y3QgdmNwdQl2Y3B1W1ZNX01BWENQ
VV07CS8qIChpKSBndWVzdCB2Y3B1cyAqLworfTsKKworc3RhdGljIGludCB2bW1faW5pdGlhbGl6
ZWQ7CisKK3N0YXRpYyBzdHJ1Y3Qgdm1tX29wcyAqb3BzOworI2RlZmluZQlWTU1fSU5JVChudW0p
CShvcHMgIT0gTlVMTCA/ICgqb3BzLT5pbml0KShudW0pIDogMCkKKyNkZWZpbmUJVk1NX0NMRUFO
VVAoKQkob3BzICE9IE5VTEwgPyAoKm9wcy0+Y2xlYW51cCkoKSA6IDApCisjZGVmaW5lCVZNTV9S
RVNVTUUoKQkob3BzICE9IE5VTEwgPyAoKm9wcy0+cmVzdW1lKSgpIDogMCkKKworI2RlZmluZQlW
TUlOSVQodm0sIHBtYXApIChvcHMgIT0gTlVMTCA/ICgqb3BzLT52bWluaXQpKHZtLCBwbWFwKTog
TlVMTCkKKyNkZWZpbmUJVk1SVU4odm1pLCB2Y3B1LCByaXAsIHBtYXAsIGV2aW5mbykgXAorCShv
cHMgIT0gTlVMTCA/ICgqb3BzLT52bXJ1bikodm1pLCB2Y3B1LCByaXAsIHBtYXAsIGV2aW5mbykg
OiBFTlhJTykKKyNkZWZpbmUJVk1DTEVBTlVQKHZtaSkJKG9wcyAhPSBOVUxMID8gKCpvcHMtPnZt
Y2xlYW51cCkodm1pKSA6IE5VTEwpCisjZGVmaW5lCVZNU1BBQ0VfQUxMT0MobWluLCBtYXgpIFwK
Kwkob3BzICE9IE5VTEwgPyAoKm9wcy0+dm1zcGFjZV9hbGxvYykobWluLCBtYXgpIDogTlVMTCkK
KyNkZWZpbmUJVk1TUEFDRV9GUkVFKHZtc3BhY2UpIFwKKwkob3BzICE9IE5VTEwgPyAoKm9wcy0+
dm1zcGFjZV9mcmVlKSh2bXNwYWNlKSA6IEVOWElPKQorI2RlZmluZQlWTUdFVFJFRyh2bWksIHZj
cHUsIG51bSwgcmV0dmFsKQkJXAorCShvcHMgIT0gTlVMTCA/ICgqb3BzLT52bWdldHJlZykodm1p
LCB2Y3B1LCBudW0sIHJldHZhbCkgOiBFTlhJTykKKyNkZWZpbmUJVk1TRVRSRUcodm1pLCB2Y3B1
LCBudW0sIHZhbCkJCVwKKwkob3BzICE9IE5VTEwgPyAoKm9wcy0+dm1zZXRyZWcpKHZtaSwgdmNw
dSwgbnVtLCB2YWwpIDogRU5YSU8pCisjZGVmaW5lCVZNR0VUREVTQyh2bWksIHZjcHUsIG51bSwg
ZGVzYykJCVwKKwkob3BzICE9IE5VTEwgPyAoKm9wcy0+dm1nZXRkZXNjKSh2bWksIHZjcHUsIG51
bSwgZGVzYykgOiBFTlhJTykKKyNkZWZpbmUJVk1TRVRERVNDKHZtaSwgdmNwdSwgbnVtLCBkZXNj
KQkJXAorCShvcHMgIT0gTlVMTCA/ICgqb3BzLT52bXNldGRlc2MpKHZtaSwgdmNwdSwgbnVtLCBk
ZXNjKSA6IEVOWElPKQorI2RlZmluZQlWTUdFVENBUCh2bWksIHZjcHUsIG51bSwgcmV0dmFsKQlc
CisJKG9wcyAhPSBOVUxMID8gKCpvcHMtPnZtZ2V0Y2FwKSh2bWksIHZjcHUsIG51bSwgcmV0dmFs
KSA6IEVOWElPKQorI2RlZmluZQlWTVNFVENBUCh2bWksIHZjcHUsIG51bSwgdmFsKQkJXAorCShv
cHMgIT0gTlVMTCA/ICgqb3BzLT52bXNldGNhcCkodm1pLCB2Y3B1LCBudW0sIHZhbCkgOiBFTlhJ
TykKKyNkZWZpbmUJVkxBUElDX0lOSVQodm1pLCB2Y3B1KQkJCVwKKwkob3BzICE9IE5VTEwgPyAo
Km9wcy0+dmxhcGljX2luaXQpKHZtaSwgdmNwdSkgOiBOVUxMKQorI2RlZmluZQlWTEFQSUNfQ0xF
QU5VUCh2bWksIHZsYXBpYykJCVwKKwkob3BzICE9IE5VTEwgPyAoKm9wcy0+dmxhcGljX2NsZWFu
dXApKHZtaSwgdmxhcGljKSA6IE5VTEwpCisKKyNkZWZpbmUJZnB1X3N0YXJ0X2VtdWxhdGluZygp
CWxvYWRfY3IwKHJjcjAoKSB8IENSMF9UUykKKyNkZWZpbmUJZnB1X3N0b3BfZW11bGF0aW5nKCkJ
Y2x0cygpCisKK3N0YXRpYyBNQUxMT0NfREVGSU5FKE1fVk0sICJ2bSIsICJ2bSIpOworCisvKiBz
dGF0aXN0aWNzICovCitzdGF0aWMgVk1NX1NUQVQoVkNQVV9UT1RBTF9SVU5USU1FLCAidmNwdSB0
b3RhbCBydW50aW1lIik7CisKK1NZU0NUTF9OT0RFKF9odywgT0lEX0FVVE8sIHZtbSwgQ1RMRkxB
R19SVywgTlVMTCwgTlVMTCk7CisKKy8qCisgKiBIYWx0IHRoZSBndWVzdCBpZiBhbGwgdmNwdXMg
YXJlIGV4ZWN1dGluZyBhIEhMVCBpbnN0cnVjdGlvbiB3aXRoCisgKiBpbnRlcnJ1cHRzIGRpc2Fi
bGVkLgorICovCitzdGF0aWMgaW50IGhhbHRfZGV0ZWN0aW9uX2VuYWJsZWQgPSAxOworU1lTQ1RM
X0lOVChfaHdfdm1tLCBPSURfQVVUTywgaGFsdF9kZXRlY3Rpb24sIENUTEZMQUdfUkRUVU4sCisg
ICAgJmhhbHRfZGV0ZWN0aW9uX2VuYWJsZWQsIDAsCisgICAgIkhhbHQgVk0gaWYgYWxsIHZjcHVz
IGV4ZWN1dGUgSExUIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCIpOworCitzdGF0aWMgaW50IHZt
bV9pcGludW07CitTWVNDVExfSU5UKF9od192bW0sIE9JRF9BVVRPLCBpcGludW0sIENUTEZMQUdf
UkQsICZ2bW1faXBpbnVtLCAwLAorICAgICJJUEkgdmVjdG9yIHVzZWQgZm9yIHZjcHUgbm90aWZp
Y2F0aW9ucyIpOworCitzdGF0aWMgaW50IHRyYWNlX2d1ZXN0X2V4Y2VwdGlvbnM7CitTWVNDVExf
SU5UKF9od192bW0sIE9JRF9BVVRPLCB0cmFjZV9ndWVzdF9leGNlcHRpb25zLCBDVExGTEFHX1JE
VFVOLAorICAgICZ0cmFjZV9ndWVzdF9leGNlcHRpb25zLCAwLAorICAgICJUcmFwIGludG8gaHlw
ZXJ2aXNvciBvbiBhbGwgZ3Vlc3QgZXhjZXB0aW9ucyBhbmQgcmVmbGVjdCB0aGVtIGJhY2siKTsK
Kworc3RhdGljIGludCB2bW1fZm9yY2VfaW9tbXUgPSAwOworVFVOQUJMRV9JTlQoImh3LnZtbS5m
b3JjZV9pb21tdSIsICZ2bW1fZm9yY2VfaW9tbXUpOworU1lTQ1RMX0lOVChfaHdfdm1tLCBPSURf
QVVUTywgZm9yY2VfaW9tbXUsIENUTEZMQUdfUkRUVU4sICZ2bW1fZm9yY2VfaW9tbXUsIDAsCisg
ICAgIkZvcmNlIHVzZSBvZiBJL08gTU1VIGV2ZW4gaWYgbm8gcGFzc3Rocm91Z2ggZGV2aWNlcyB3
ZXJlIGZvdW5kLiIpOworCitzdGF0aWMgdm9pZCB2bV9mcmVlX21lbW1hcChzdHJ1Y3Qgdm0gKnZt
LCBpbnQgaWRlbnQpOworc3RhdGljIGJvb2wgc3lzbWVtX21hcHBpbmcoc3RydWN0IHZtICp2bSwg
c3RydWN0IG1lbV9tYXAgKm1tKTsKK3N0YXRpYyB2b2lkIHZjcHVfbm90aWZ5X2V2ZW50X2xvY2tl
ZChzdHJ1Y3QgdmNwdSAqdmNwdSwgYm9vbCBsYXBpY19pbnRyKTsKKworI2lmZGVmIEtUUgorc3Rh
dGljIGNvbnN0IGNoYXIgKgordmNwdV9zdGF0ZTJzdHIoZW51bSB2Y3B1X3N0YXRlIHN0YXRlKQor
eworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgVkNQVV9JRExFOgorCQlyZXR1cm4gKCJpZGxl
Iik7CisJY2FzZSBWQ1BVX0ZST1pFTjoKKwkJcmV0dXJuICgiZnJvemVuIik7CisJY2FzZSBWQ1BV
X1JVTk5JTkc6CisJCXJldHVybiAoInJ1bm5pbmciKTsKKwljYXNlIFZDUFVfU0xFRVBJTkc6CisJ
CXJldHVybiAoInNsZWVwaW5nIik7CisJZGVmYXVsdDoKKwkJcmV0dXJuICgidW5rbm93biIpOwor
CX0KK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZAordmNwdV9jbGVhbnVwKHN0cnVjdCB2bSAqdm0s
IGludCBpLCBib29sIGRlc3Ryb3kpCit7CisJc3RydWN0IHZjcHUgKnZjcHUgPSAmdm0tPnZjcHVb
aV07CisKKwlWTEFQSUNfQ0xFQU5VUCh2bS0+Y29va2llLCB2Y3B1LT52bGFwaWMpOworCWlmIChk
ZXN0cm95KSB7CisJCXZtbV9zdGF0X2ZyZWUodmNwdS0+c3RhdHMpOwkKKwkJZnB1X3NhdmVfYXJl
YV9mcmVlKHZjcHUtPmd1ZXN0ZnB1KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit2Y3B1X2luaXQo
c3RydWN0IHZtICp2bSwgaW50IHZjcHVfaWQsIGJvb2wgY3JlYXRlKQoreworCXN0cnVjdCB2Y3B1
ICp2Y3B1OworCisJS0FTU0VSVCh2Y3B1X2lkID49IDAgJiYgdmNwdV9pZCA8IFZNX01BWENQVSwK
KwkgICAgKCJ2Y3B1X2luaXQ6IGludmFsaWQgdmNwdSAlZCIsIHZjcHVfaWQpKTsKKwkgIAorCXZj
cHUgPSAmdm0tPnZjcHVbdmNwdV9pZF07CisKKwlpZiAoY3JlYXRlKSB7CisJCUtBU1NFUlQoIXZj
cHVfbG9ja19pbml0aWFsaXplZCh2Y3B1KSwgKCJ2Y3B1ICVkIGFscmVhZHkgIgorCQkgICAgImlu
aXRpYWxpemVkIiwgdmNwdV9pZCkpOworCQl2Y3B1X2xvY2tfaW5pdCh2Y3B1KTsKKwkJdmNwdS0+
c3RhdGUgPSBWQ1BVX0lETEU7CisJCXZjcHUtPmhvc3RjcHUgPSBOT0NQVTsKKwkJdmNwdS0+Z3Vl
c3RmcHUgPSBmcHVfc2F2ZV9hcmVhX2FsbG9jKCk7CisJCXZjcHUtPnN0YXRzID0gdm1tX3N0YXRf
YWxsb2MoKTsKKwl9CisKKwl2Y3B1LT52bGFwaWMgPSBWTEFQSUNfSU5JVCh2bS0+Y29va2llLCB2
Y3B1X2lkKTsKKwl2bV9zZXRfeDJhcGljX3N0YXRlKHZtLCB2Y3B1X2lkLCBYMkFQSUNfRElTQUJM
RUQpOworCXZjcHUtPnJlcWlkbGUgPSAwOworCXZjcHUtPmV4aXRpbnRpbmZvID0gMDsKKwl2Y3B1
LT5ubWlfcGVuZGluZyA9IDA7CisJdmNwdS0+ZXh0aW50X3BlbmRpbmcgPSAwOworCXZjcHUtPmV4
Y2VwdGlvbl9wZW5kaW5nID0gMDsKKwl2Y3B1LT5ndWVzdF94Y3IwID0gWEZFQVRVUkVfRU5BQkxF
RF9YODc7CisJZnB1X3NhdmVfYXJlYV9yZXNldCh2Y3B1LT5ndWVzdGZwdSk7CisJdm1tX3N0YXRf
aW5pdCh2Y3B1LT5zdGF0cyk7Cit9CisKK2ludAordmNwdV90cmFjZV9leGNlcHRpb25zKHN0cnVj
dCB2bSAqdm0sIGludCB2Y3B1aWQpCit7CisKKwlyZXR1cm4gKHRyYWNlX2d1ZXN0X2V4Y2VwdGlv
bnMpOworfQorCitzdHJ1Y3Qgdm1fZXhpdCAqCit2bV9leGl0aW5mbyhzdHJ1Y3Qgdm0gKnZtLCBp
bnQgY3B1aWQpCit7CisJc3RydWN0IHZjcHUgKnZjcHU7CisKKwlpZiAoY3B1aWQgPCAwIHx8IGNw
dWlkID49IFZNX01BWENQVSkKKwkJcGFuaWMoInZtX2V4aXRpbmZvOiBpbnZhbGlkIGNwdWlkICVk
IiwgY3B1aWQpOworCisJdmNwdSA9ICZ2bS0+dmNwdVtjcHVpZF07CisKKwlyZXR1cm4gKCZ2Y3B1
LT5leGl0aW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkCit2bW1fcmVzdW1lKHZvaWQpCit7CisJVk1N
X1JFU1VNRSgpOworfQorCitzdGF0aWMgaW50Cit2bW1faW5pdCh2b2lkKQoreworCWludCBlcnJv
cjsKKworCXZtbV9ob3N0X3N0YXRlX2luaXQoKTsKKworCXZtbV9pcGludW0gPSBsYXBpY19pcGlf
YWxsb2MoJklEVFZFQyhqdXN0cmV0dXJuKSk7CisJaWYgKHZtbV9pcGludW0gPCAwKQorCQl2bW1f
aXBpbnVtID0gSVBJX0FTVDsKKworCWVycm9yID0gdm1tX21lbV9pbml0KCk7CisJaWYgKGVycm9y
KQorCQlyZXR1cm4gKGVycm9yKTsKKwkKKwlpZiAodm1tX2lzX2ludGVsKCkpCisJCW9wcyA9ICZ2
bW1fb3BzX2ludGVsOworCWVsc2UgaWYgKHZtbV9pc19hbWQoKSkKKwkJb3BzID0gJnZtbV9vcHNf
YW1kOworCWVsc2UKKwkJcmV0dXJuIChFTlhJTyk7CisKKwl2bW1fcmVzdW1lX3AgPSB2bW1fcmVz
dW1lOworCisJcmV0dXJuIChWTU1fSU5JVCh2bW1faXBpbnVtKSk7Cit9CisKK3N0YXRpYyBpbnQK
K3ZtbV9oYW5kbGVyKG1vZHVsZV90IG1vZCwgaW50IHdoYXQsIHZvaWQgKmFyZykKK3sKKwlpbnQg
ZXJyb3I7CisKKwlzd2l0Y2ggKHdoYXQpIHsKKwljYXNlIE1PRF9MT0FEOgorCQl2bW1kZXZfaW5p
dCgpOworCQlpZiAodm1tX2ZvcmNlX2lvbW11IHx8IHBwdF9hdmFpbF9kZXZpY2VzKCkgPiAwKQor
CQkJaW9tbXVfaW5pdCgpOworCQllcnJvciA9IHZtbV9pbml0KCk7CisJCWlmIChlcnJvciA9PSAw
KQorCQkJdm1tX2luaXRpYWxpemVkID0gMTsKKwkJYnJlYWs7CisJY2FzZSBNT0RfVU5MT0FEOgor
CQllcnJvciA9IHZtbWRldl9jbGVhbnVwKCk7CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQl2bW1f
cmVzdW1lX3AgPSBOVUxMOworCQkJaW9tbXVfY2xlYW51cCgpOworCQkJaWYgKHZtbV9pcGludW0g
IT0gSVBJX0FTVCkKKwkJCQlsYXBpY19pcGlfZnJlZSh2bW1faXBpbnVtKTsKKwkJCWVycm9yID0g
Vk1NX0NMRUFOVVAoKTsKKwkJCS8qCisJCQkgKiBTb21ldGhpbmcgYmFkIGhhcHBlbmVkIC0gcHJl
dmVudCBuZXcKKwkJCSAqIFZNcyBmcm9tIGJlaW5nIGNyZWF0ZWQKKwkJCSAqLworCQkJaWYgKGVy
cm9yKQorCQkJCXZtbV9pbml0aWFsaXplZCA9IDA7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoK
KwkJZXJyb3IgPSAwOworCQlicmVhazsKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRp
YyBtb2R1bGVkYXRhX3Qgdm1tX2ttb2QgPSB7CisJInZtbSIsCisJdm1tX2hhbmRsZXIsCisJTlVM
TAorfTsKKworLyoKKyAqIHZtbSBpbml0aWFsaXphdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBkZXBl
bmRlbmNpZXM6CisgKgorICogLSBpb21tdSBpbml0aWFsaXphdGlvbiBtdXN0IGhhcHBlbiBhZnRl
ciB0aGUgcGNpIHBhc3N0aHJ1IGRyaXZlciBoYXMgaGFkCisgKiAgIGEgY2hhbmNlIHRvIGF0dGFj
aCB0byBhbnkgcGFzc3RocnUgZGV2aWNlcyAoYWZ0ZXIgU0lfU1VCX0NPTkZJR1VSRSkuCisgKgor
ICogLSBWVC14IGluaXRpYWxpemF0aW9uIHJlcXVpcmVzIHNtcF9yZW5kZXp2b3VzKCkgYW5kIHRo
ZXJlZm9yZSBtdXN0IGhhcHBlbgorICogICBhZnRlciBTTVAgaXMgZnVsbHkgZnVuY3Rpb25hbCAo
YWZ0ZXIgU0lfU1VCX1NNUCkuCisgKi8KK0RFQ0xBUkVfTU9EVUxFKHZtbSwgdm1tX2ttb2QsIFNJ
X1NVQl9TTVAgKyAxLCBTSV9PUkRFUl9BTlkpOworTU9EVUxFX1ZFUlNJT04odm1tLCAxKTsKKwor
c3RhdGljIHZvaWQKK3ZtX2luaXQoc3RydWN0IHZtICp2bSwgYm9vbCBjcmVhdGUpCit7CisJaW50
IGk7CisKKwl2bS0+Y29va2llID0gVk1JTklUKHZtLCB2bXNwYWNlX3BtYXAodm0tPnZtc3BhY2Up
KTsKKwl2bS0+aW9tbXUgPSBOVUxMOworCXZtLT52aW9hcGljID0gdmlvYXBpY19pbml0KHZtKTsK
Kwl2bS0+dmhwZXQgPSB2aHBldF9pbml0KHZtKTsKKwl2bS0+dmF0cGljID0gdmF0cGljX2luaXQo
dm0pOworCXZtLT52YXRwaXQgPSB2YXRwaXRfaW5pdCh2bSk7CisJdm0tPnZwbXRtciA9IHZwbXRt
cl9pbml0KHZtKTsKKwlpZiAoY3JlYXRlKQorCQl2bS0+dnJ0YyA9IHZydGNfaW5pdCh2bSk7CisK
KwlDUFVfWkVSTygmdm0tPmFjdGl2ZV9jcHVzKTsKKworCXZtLT5zdXNwZW5kID0gMDsKKwlDUFVf
WkVSTygmdm0tPnN1c3BlbmRlZF9jcHVzKTsKKworCWZvciAoaSA9IDA7IGkgPCBWTV9NQVhDUFU7
IGkrKykKKwkJdmNwdV9pbml0KHZtLCBpLCBjcmVhdGUpOworfQorCitpbnQKK3ZtX2NyZWF0ZShj
b25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgdm0gKipyZXR2bSkKK3sKKwlzdHJ1Y3Qgdm0gKnZtOwor
CXN0cnVjdCB2bXNwYWNlICp2bXNwYWNlOworCisJLyoKKwkgKiBJZiB2bW0ua28gY291bGQgbm90
IGJlIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCB0aGVuIGRvbid0IGF0dGVtcHQKKwkgKiB0byBj
cmVhdGUgdGhlIHZpcnR1YWwgbWFjaGluZS4KKwkgKi8KKwlpZiAoIXZtbV9pbml0aWFsaXplZCkK
KwkJcmV0dXJuIChFTlhJTyk7CisKKwlpZiAobmFtZSA9PSBOVUxMIHx8IHN0cmxlbihuYW1lKSA+
PSBWTV9NQVhfTkFNRUxFTikKKwkJcmV0dXJuIChFSU5WQUwpOworCisJdm1zcGFjZSA9IFZNU1BB
Q0VfQUxMT0MoMCwgVk1fTUFYVVNFUl9BRERSRVNTKTsKKwlpZiAodm1zcGFjZSA9PSBOVUxMKQor
CQlyZXR1cm4gKEVOT01FTSk7CisKKwl2bSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHZtKSwgTV9W
TSwgTV9XQUlUT0sgfCBNX1pFUk8pOworCXN0cmNweSh2bS0+bmFtZSwgbmFtZSk7CisJdm0tPnZt
c3BhY2UgPSB2bXNwYWNlOworCW10eF9pbml0KCZ2bS0+cmVuZGV6dm91c19tdHgsICJ2bSByZW5k
ZXp2b3VzIGxvY2siLCAwLCBNVFhfREVGKTsKKworCXZtX2luaXQodm0sIHRydWUpOworCisJKnJl
dHZtID0gdm07CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHZvaWQKK3ZtX2NsZWFudXAoc3Ry
dWN0IHZtICp2bSwgYm9vbCBkZXN0cm95KQoreworCXN0cnVjdCBtZW1fbWFwICptbTsKKwlpbnQg
aTsKKworCXBwdF91bmFzc2lnbl9hbGwodm0pOworCisJaWYgKHZtLT5pb21tdSAhPSBOVUxMKQor
CQlpb21tdV9kZXN0cm95X2RvbWFpbih2bS0+aW9tbXUpOworCisJaWYgKGRlc3Ryb3kpCisJCXZy
dGNfY2xlYW51cCh2bS0+dnJ0Yyk7CisJZWxzZQorCQl2cnRjX3Jlc2V0KHZtLT52cnRjKTsKKwl2
cG10bXJfY2xlYW51cCh2bS0+dnBtdG1yKTsKKwl2YXRwaXRfY2xlYW51cCh2bS0+dmF0cGl0KTsK
Kwl2aHBldF9jbGVhbnVwKHZtLT52aHBldCk7CisJdmF0cGljX2NsZWFudXAodm0tPnZhdHBpYyk7
CisJdmlvYXBpY19jbGVhbnVwKHZtLT52aW9hcGljKTsKKworCWZvciAoaSA9IDA7IGkgPCBWTV9N
QVhDUFU7IGkrKykKKwkJdmNwdV9jbGVhbnVwKHZtLCBpLCBkZXN0cm95KTsKKworCVZNQ0xFQU5V
UCh2bS0+Y29va2llKTsKKworCS8qCisJICogU3lzdGVtIG1lbW9yeSBpcyByZW1vdmVkIGZyb20g
dGhlIGd1ZXN0IGFkZHJlc3Mgc3BhY2Ugb25seSB3aGVuCisJICogdGhlIFZNIGlzIGRlc3Ryb3ll
ZC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBtYXBwaW5nIHJlbWFpbnMgdGhlIHNhbWUKKwkgKiBhY3Jv
c3MgVk0gcmVzZXQuCisJICoKKwkgKiBEZXZpY2UgbWVtb3J5IGNhbiBiZSByZWxvY2F0ZWQgYnkg
dGhlIGd1ZXN0IChlLmcuIHVzaW5nIFBDSSBCQVJzKQorCSAqIHNvIHRob3NlIG1hcHBpbmdzIGFy
ZSByZW1vdmVkIG9uIGEgVk0gcmVzZXQuCisJICovCisJZm9yIChpID0gMDsgaSA8IFZNX01BWF9N
RU1NQVBTOyBpKyspIHsKKwkJbW0gPSAmdm0tPm1lbV9tYXBzW2ldOworCQlpZiAoZGVzdHJveSB8
fCAhc3lzbWVtX21hcHBpbmcodm0sIG1tKSkKKwkJCXZtX2ZyZWVfbWVtbWFwKHZtLCBpKTsKKwl9
CisKKwlpZiAoZGVzdHJveSkgeworCQlmb3IgKGkgPSAwOyBpIDwgVk1fTUFYX01FTVNFR1M7IGkr
KykKKwkJCXZtX2ZyZWVfbWVtc2VnKHZtLCBpKTsKKworCQlWTVNQQUNFX0ZSRUUodm0tPnZtc3Bh
Y2UpOworCQl2bS0+dm1zcGFjZSA9IE5VTEw7CisJfQorfQorCit2b2lkCit2bV9kZXN0cm95KHN0
cnVjdCB2bSAqdm0pCit7CisJdm1fY2xlYW51cCh2bSwgdHJ1ZSk7CisJZnJlZSh2bSwgTV9WTSk7
Cit9CisKK2ludAordm1fcmVpbml0KHN0cnVjdCB2bSAqdm0pCit7CisJaW50IGVycm9yOworCisJ
LyoKKwkgKiBBIHZpcnR1YWwgbWFjaGluZSBjYW4gYmUgcmVzZXQgb25seSBpZiBhbGwgdmNwdXMg
YXJlIHN1c3BlbmRlZC4KKwkgKi8KKwlpZiAoQ1BVX0NNUCgmdm0tPnN1c3BlbmRlZF9jcHVzLCAm
dm0tPmFjdGl2ZV9jcHVzKSA9PSAwKSB7CisJCXZtX2NsZWFudXAodm0sIGZhbHNlKTsKKwkJdm1f
aW5pdCh2bSwgZmFsc2UpOworCQllcnJvciA9IDA7CisJfSBlbHNlIHsKKwkJZXJyb3IgPSBFQlVT
WTsKKwl9CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKworY29uc3QgY2hhciAqCit2bV9uYW1lKHN0
cnVjdCB2bSAqdm0pCit7CisJcmV0dXJuICh2bS0+bmFtZSk7Cit9CisKK2ludAordm1fbWFwX21t
aW8oc3RydWN0IHZtICp2bSwgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4sIHZtX3BhZGRyX3Qg
aHBhKQoreworCXZtX29iamVjdF90IG9iajsKKworCWlmICgob2JqID0gdm1tX21taW9fYWxsb2Mo
dm0tPnZtc3BhY2UsIGdwYSwgbGVuLCBocGEpKSA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT01FTSk7
CisJZWxzZQorCQlyZXR1cm4gKDApOworfQorCitpbnQKK3ZtX3VubWFwX21taW8oc3RydWN0IHZt
ICp2bSwgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4pCit7CisKKwl2bW1fbW1pb19mcmVlKHZt
LT52bXNwYWNlLCBncGEsIGxlbik7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIFJldHVybiAn
dHJ1ZScgaWYgJ2dwYScgaXMgYWxsb2NhdGVkIGluIHRoZSBndWVzdCBhZGRyZXNzIHNwYWNlLgor
ICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIGEgcnVubmlu
ZyB2Y3B1IHdoaWNoIGFjdHMgYXMKKyAqIGFuIGltcGxpY2l0IGxvY2sgb24gJ3ZtLT5tZW1fbWFw
c1tdJy4KKyAqLworYm9vbAordm1fbWVtX2FsbG9jYXRlZChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw
dWlkLCB2bV9wYWRkcl90IGdwYSkKK3sKKwlzdHJ1Y3QgbWVtX21hcCAqbW07CisJaW50IGk7CisK
KyNpZmRlZiBJTlZBUklBTlRTCisJaW50IGhvc3RjcHUsIHN0YXRlOworCXN0YXRlID0gdmNwdV9n
ZXRfc3RhdGUodm0sIHZjcHVpZCwgJmhvc3RjcHUpOworCUtBU1NFUlQoc3RhdGUgPT0gVkNQVV9S
VU5OSU5HICYmIGhvc3RjcHUgPT0gY3VyY3B1LAorCSAgICAoIiVzOiBpbnZhbGlkIHZjcHUgc3Rh
dGUgJWQvJWQiLCBfX2Z1bmNfXywgc3RhdGUsIGhvc3RjcHUpKTsKKyNlbmRpZgorCisJZm9yIChp
ID0gMDsgaSA8IFZNX01BWF9NRU1NQVBTOyBpKyspIHsKKwkJbW0gPSAmdm0tPm1lbV9tYXBzW2ld
OworCQlpZiAobW0tPmxlbiAhPSAwICYmIGdwYSA+PSBtbS0+Z3BhICYmIGdwYSA8IG1tLT5ncGEg
KyBtbS0+bGVuKQorCQkJcmV0dXJuICh0cnVlKTsJCS8qICdncGEnIGlzIHN5c21lbSBvciBkZXZt
ZW0gKi8KKwl9CisKKwlpZiAocHB0X2lzX21taW8odm0sIGdwYSkpCisJCXJldHVybiAodHJ1ZSk7
CQkJLyogJ2dwYScgaXMgcGNpIHBhc3N0aHJ1IG1taW8gKi8KKworCXJldHVybiAoZmFsc2UpOwor
fQorCitpbnQKK3ZtX2FsbG9jX21lbXNlZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgaWRlbnQsIHNpemVf
dCBsZW4sIGJvb2wgc3lzbWVtKQoreworCXN0cnVjdCBtZW1fc2VnICpzZWc7CisJdm1fb2JqZWN0
X3Qgb2JqOworCisJaWYgKGlkZW50IDwgMCB8fCBpZGVudCA+PSBWTV9NQVhfTUVNU0VHUykKKwkJ
cmV0dXJuIChFSU5WQUwpOworCisJaWYgKGxlbiA9PSAwIHx8IChsZW4gJiBQQUdFX01BU0spKQor
CQlyZXR1cm4gKEVJTlZBTCk7CisKKwlzZWcgPSAmdm0tPm1lbV9zZWdzW2lkZW50XTsKKwlpZiAo
c2VnLT5vYmplY3QgIT0gTlVMTCkgeworCQlpZiAoc2VnLT5sZW4gPT0gbGVuICYmIHNlZy0+c3lz
bWVtID09IHN5c21lbSkKKwkJCXJldHVybiAoRUVYSVNUKTsKKwkJZWxzZQorCQkJcmV0dXJuIChF
SU5WQUwpOworCX0KKworCW9iaiA9IHZtX29iamVjdF9hbGxvY2F0ZShPQkpUX0RFRkFVTFQsIGxl
biA+PiBQQUdFX1NISUZUKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAoRU5PTUVNKTsK
KworCXNlZy0+bGVuID0gbGVuOworCXNlZy0+b2JqZWN0ID0gb2JqOworCXNlZy0+c3lzbWVtID0g
c3lzbWVtOworCXJldHVybiAoMCk7Cit9CisKK2ludAordm1fZ2V0X21lbXNlZyhzdHJ1Y3Qgdm0g
KnZtLCBpbnQgaWRlbnQsIHNpemVfdCAqbGVuLCBib29sICpzeXNtZW0sCisgICAgdm1fb2JqZWN0
X3QgKm9ianB0cikKK3sKKwlzdHJ1Y3QgbWVtX3NlZyAqc2VnOworCisJaWYgKGlkZW50IDwgMCB8
fCBpZGVudCA+PSBWTV9NQVhfTUVNU0VHUykKKwkJcmV0dXJuIChFSU5WQUwpOworCisJc2VnID0g
JnZtLT5tZW1fc2Vnc1tpZGVudF07CisJaWYgKGxlbikKKwkJKmxlbiA9IHNlZy0+bGVuOworCWlm
IChzeXNtZW0pCisJCSpzeXNtZW0gPSBzZWctPnN5c21lbTsKKwlpZiAob2JqcHRyKQorCQkqb2Jq
cHRyID0gc2VnLT5vYmplY3Q7CisJcmV0dXJuICgwKTsKK30KKwordm9pZAordm1fZnJlZV9tZW1z
ZWcoc3RydWN0IHZtICp2bSwgaW50IGlkZW50KQoreworCXN0cnVjdCBtZW1fc2VnICpzZWc7CisK
KwlLQVNTRVJUKGlkZW50ID49IDAgJiYgaWRlbnQgPCBWTV9NQVhfTUVNU0VHUywKKwkgICAgKCIl
czogaW52YWxpZCBtZW1zZWcgaWRlbnQgJWQiLCBfX2Z1bmNfXywgaWRlbnQpKTsKKworCXNlZyA9
ICZ2bS0+bWVtX3NlZ3NbaWRlbnRdOworCWlmIChzZWctPm9iamVjdCAhPSBOVUxMKSB7CisJCXZt
X29iamVjdF9kZWFsbG9jYXRlKHNlZy0+b2JqZWN0KTsKKwkJYnplcm8oc2VnLCBzaXplb2Yoc3Ry
dWN0IG1lbV9zZWcpKTsKKwl9Cit9CisKK2ludAordm1fbW1hcF9tZW1zZWcoc3RydWN0IHZtICp2
bSwgdm1fcGFkZHJfdCBncGEsIGludCBzZWdpZCwgdm1fb29mZnNldF90IGZpcnN0LAorICAgIHNp
emVfdCBsZW4sIGludCBwcm90LCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IG1lbV9zZWcgKnNlZzsK
KwlzdHJ1Y3QgbWVtX21hcCAqbSwgKm1hcDsKKwl2bV9vb2Zmc2V0X3QgbGFzdDsKKwlpbnQgaSwg
ZXJyb3I7CisKKwlpZiAocHJvdCA9PSAwIHx8IChwcm90ICYgfihWTV9QUk9UX0FMTCkpICE9IDAp
CisJCXJldHVybiAoRUlOVkFMKTsKKworCWlmIChmbGFncyAmIH5WTV9NRU1NQVBfRl9XSVJFRCkK
KwkJcmV0dXJuIChFSU5WQUwpOworCisJaWYgKHNlZ2lkIDwgMCB8fCBzZWdpZCA+PSBWTV9NQVhf
TUVNU0VHUykKKwkJcmV0dXJuIChFSU5WQUwpOworCisJc2VnID0gJnZtLT5tZW1fc2Vnc1tzZWdp
ZF07CisJaWYgKHNlZy0+b2JqZWN0ID09IE5VTEwpCisJCXJldHVybiAoRUlOVkFMKTsKKworCWxh
c3QgPSBmaXJzdCArIGxlbjsKKwlpZiAoZmlyc3QgPCAwIHx8IGZpcnN0ID49IGxhc3QgfHwgbGFz
dCA+IHNlZy0+bGVuKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlpZiAoKGdwYSB8IGZpcnN0IHwg
bGFzdCkgJiBQQUdFX01BU0spCisJCXJldHVybiAoRUlOVkFMKTsKKworCW1hcCA9IE5VTEw7CisJ
Zm9yIChpID0gMDsgaSA8IFZNX01BWF9NRU1NQVBTOyBpKyspIHsKKwkJbSA9ICZ2bS0+bWVtX21h
cHNbaV07CisJCWlmIChtLT5sZW4gPT0gMCkgeworCQkJbWFwID0gbTsKKwkJCWJyZWFrOworCQl9
CisJfQorCisJaWYgKG1hcCA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT1NQQyk7CisKKwllcnJvciA9
IHZtX21hcF9maW5kKCZ2bS0+dm1zcGFjZS0+dm1fbWFwLCBzZWctPm9iamVjdCwgZmlyc3QsICZn
cGEsCisJICAgIGxlbiwgMCwgVk1GU19OT19TUEFDRSwgcHJvdCwgcHJvdCwgMCk7CisJaWYgKGVy
cm9yICE9IEtFUk5fU1VDQ0VTUykKKwkJcmV0dXJuIChFRkFVTFQpOworCisJdm1fb2JqZWN0X3Jl
ZmVyZW5jZShzZWctPm9iamVjdCk7CisKKwlpZiAoZmxhZ3MgJiBWTV9NRU1NQVBfRl9XSVJFRCkg
eworCQllcnJvciA9IHZtX21hcF93aXJlKCZ2bS0+dm1zcGFjZS0+dm1fbWFwLCBncGEsIGdwYSAr
IGxlbiwKKwkJICAgIFZNX01BUF9XSVJFX1VTRVIgfCBWTV9NQVBfV0lSRV9OT0hPTEVTKTsKKwkJ
aWYgKGVycm9yICE9IEtFUk5fU1VDQ0VTUykgeworCQkJdm1fbWFwX3JlbW92ZSgmdm0tPnZtc3Bh
Y2UtPnZtX21hcCwgZ3BhLCBncGEgKyBsZW4pOworCQkJcmV0dXJuIChFRkFVTFQpOworCQl9CisJ
fQorCisJbWFwLT5ncGEgPSBncGE7CisJbWFwLT5sZW4gPSBsZW47CisJbWFwLT5zZWdvZmYgPSBm
aXJzdDsKKwltYXAtPnNlZ2lkID0gc2VnaWQ7CisJbWFwLT5wcm90ID0gcHJvdDsKKwltYXAtPmZs
YWdzID0gZmxhZ3M7CisJcmV0dXJuICgwKTsKK30KKworaW50Cit2bV9tbWFwX2dldG5leHQoc3Ry
dWN0IHZtICp2bSwgdm1fcGFkZHJfdCAqZ3BhLCBpbnQgKnNlZ2lkLAorICAgIHZtX29vZmZzZXRf
dCAqc2Vnb2ZmLCBzaXplX3QgKmxlbiwgaW50ICpwcm90LCBpbnQgKmZsYWdzKQoreworCXN0cnVj
dCBtZW1fbWFwICptbSwgKm1tbmV4dDsKKwlpbnQgaTsKKworCW1tbmV4dCA9IE5VTEw7CisJZm9y
IChpID0gMDsgaSA8IFZNX01BWF9NRU1NQVBTOyBpKyspIHsKKwkJbW0gPSAmdm0tPm1lbV9tYXBz
W2ldOworCQlpZiAobW0tPmxlbiA9PSAwIHx8IG1tLT5ncGEgPCAqZ3BhKQorCQkJY29udGludWU7
CisJCWlmIChtbW5leHQgPT0gTlVMTCB8fCBtbS0+Z3BhIDwgbW1uZXh0LT5ncGEpCisJCQltbW5l
eHQgPSBtbTsKKwl9CisKKwlpZiAobW1uZXh0ICE9IE5VTEwpIHsKKwkJKmdwYSA9IG1tbmV4dC0+
Z3BhOworCQlpZiAoc2VnaWQpCisJCQkqc2VnaWQgPSBtbW5leHQtPnNlZ2lkOworCQlpZiAoc2Vn
b2ZmKQorCQkJKnNlZ29mZiA9IG1tbmV4dC0+c2Vnb2ZmOworCQlpZiAobGVuKQorCQkJKmxlbiA9
IG1tbmV4dC0+bGVuOworCQlpZiAocHJvdCkKKwkJCSpwcm90ID0gbW1uZXh0LT5wcm90OworCQlp
ZiAoZmxhZ3MpCisJCQkqZmxhZ3MgPSBtbW5leHQtPmZsYWdzOworCQlyZXR1cm4gKDApOworCX0g
ZWxzZSB7CisJCXJldHVybiAoRU5PRU5UKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit2bV9mcmVl
X21lbW1hcChzdHJ1Y3Qgdm0gKnZtLCBpbnQgaWRlbnQpCit7CisJc3RydWN0IG1lbV9tYXAgKm1t
OworCWludCBlcnJvcjsKKworCW1tID0gJnZtLT5tZW1fbWFwc1tpZGVudF07CisJaWYgKG1tLT5s
ZW4pIHsKKwkJZXJyb3IgPSB2bV9tYXBfcmVtb3ZlKCZ2bS0+dm1zcGFjZS0+dm1fbWFwLCBtbS0+
Z3BhLAorCQkgICAgbW0tPmdwYSArIG1tLT5sZW4pOworCQlLQVNTRVJUKGVycm9yID09IEtFUk5f
U1VDQ0VTUywgKCIlczogdm1fbWFwX3JlbW92ZSBlcnJvciAlZCIsCisJCSAgICBfX2Z1bmNfXywg
ZXJyb3IpKTsKKwkJYnplcm8obW0sIHNpemVvZihzdHJ1Y3QgbWVtX21hcCkpOworCX0KK30KKwor
c3RhdGljIF9faW5saW5lIGJvb2wKK3N5c21lbV9tYXBwaW5nKHN0cnVjdCB2bSAqdm0sIHN0cnVj
dCBtZW1fbWFwICptbSkKK3sKKworCWlmIChtbS0+bGVuICE9IDAgJiYgdm0tPm1lbV9zZWdzW21t
LT5zZWdpZF0uc3lzbWVtKQorCQlyZXR1cm4gKHRydWUpOworCWVsc2UKKwkJcmV0dXJuIChmYWxz
ZSk7Cit9CisKK3N0YXRpYyB2bV9wYWRkcl90CitzeXNtZW1fbWF4YWRkcihzdHJ1Y3Qgdm0gKnZt
KQoreworCXN0cnVjdCBtZW1fbWFwICptbTsKKwl2bV9wYWRkcl90IG1heGFkZHI7CisJaW50IGk7
CisKKwltYXhhZGRyID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgVk1fTUFYX01FTU1BUFM7IGkrKykg
eworCQltbSA9ICZ2bS0+bWVtX21hcHNbaV07CisJCWlmIChzeXNtZW1fbWFwcGluZyh2bSwgbW0p
KSB7CisJCQlpZiAobWF4YWRkciA8IG1tLT5ncGEgKyBtbS0+bGVuKQorCQkJCW1heGFkZHIgPSBt
bS0+Z3BhICsgbW0tPmxlbjsKKwkJfQorCX0KKwlyZXR1cm4gKG1heGFkZHIpOworfQorCitzdGF0
aWMgdm9pZAordm1faW9tbXVfbW9kaWZ5KHN0cnVjdCB2bSAqdm0sIGJvb2xlYW5fdCBtYXApCit7
CisJaW50IGksIHN6OworCXZtX3BhZGRyX3QgZ3BhLCBocGE7CisJc3RydWN0IG1lbV9tYXAgKm1t
OworCXZvaWQgKnZwLCAqY29va2llLCAqaG9zdF9kb21haW47CisKKwlzeiA9IFBBR0VfU0laRTsK
Kwlob3N0X2RvbWFpbiA9IGlvbW11X2hvc3RfZG9tYWluKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwg
Vk1fTUFYX01FTU1BUFM7IGkrKykgeworCQltbSA9ICZ2bS0+bWVtX21hcHNbaV07CisJCWlmICgh
c3lzbWVtX21hcHBpbmcodm0sIG1tKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChtYXApIHsKKwkJ
CUtBU1NFUlQoKG1tLT5mbGFncyAmIFZNX01FTU1BUF9GX0lPTU1VKSA9PSAwLAorCQkJICAgICgi
aW9tbXUgbWFwIGZvdW5kIGludmFsaWQgbWVtbWFwICUjbHgvJSNseC8lI3giLAorCQkJICAgIG1t
LT5ncGEsIG1tLT5sZW4sIG1tLT5mbGFncykpOworCQkJaWYgKChtbS0+ZmxhZ3MgJiBWTV9NRU1N
QVBfRl9XSVJFRCkgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJCW1tLT5mbGFncyB8PSBWTV9NRU1N
QVBfRl9JT01NVTsKKwkJfSBlbHNlIHsKKwkJCWlmICgobW0tPmZsYWdzICYgVk1fTUVNTUFQX0Zf
SU9NTVUpID09IDApCisJCQkJY29udGludWU7CisJCQltbS0+ZmxhZ3MgJj0gflZNX01FTU1BUF9G
X0lPTU1VOworCQkJS0FTU0VSVCgobW0tPmZsYWdzICYgVk1fTUVNTUFQX0ZfV0lSRUQpICE9IDAs
CisJCQkgICAgKCJpb21tdSB1bm1hcCBmb3VuZCBpbnZhbGlkIG1lbW1hcCAlI2x4LyUjbHgvJSN4
IiwKKwkJCSAgICBtbS0+Z3BhLCBtbS0+bGVuLCBtbS0+ZmxhZ3MpKTsKKwkJfQorCisJCWdwYSA9
IG1tLT5ncGE7CisJCXdoaWxlIChncGEgPCBtbS0+Z3BhICsgbW0tPmxlbikgeworCQkJdnAgPSB2
bV9ncGFfaG9sZCh2bSwgLTEsIGdwYSwgUEFHRV9TSVpFLCBWTV9QUk9UX1dSSVRFLAorCQkJCQkg
JmNvb2tpZSk7CisJCQlLQVNTRVJUKHZwICE9IE5VTEwsICgidm0oJXMpIGNvdWxkIG5vdCBtYXAg
Z3BhICUjbHgiLAorCQkJICAgIHZtX25hbWUodm0pLCBncGEpKTsKKworCQkJdm1fZ3BhX3JlbGVh
c2UoY29va2llKTsKKworCQkJaHBhID0gRE1BUF9UT19QSFlTKCh1aW50cHRyX3QpdnApOworCQkJ
aWYgKG1hcCkgeworCQkJCWlvbW11X2NyZWF0ZV9tYXBwaW5nKHZtLT5pb21tdSwgZ3BhLCBocGEs
IHN6KTsKKwkJCQlpb21tdV9yZW1vdmVfbWFwcGluZyhob3N0X2RvbWFpbiwgaHBhLCBzeik7CisJ
CQl9IGVsc2UgeworCQkJCWlvbW11X3JlbW92ZV9tYXBwaW5nKHZtLT5pb21tdSwgZ3BhLCBzeik7
CisJCQkJaW9tbXVfY3JlYXRlX21hcHBpbmcoaG9zdF9kb21haW4sIGhwYSwgaHBhLCBzeik7CisJ
CQl9CisKKwkJCWdwYSArPSBQQUdFX1NJWkU7CisJCX0KKwl9CisKKwkvKgorCSAqIEludmFsaWRh
dGUgdGhlIGNhY2hlZCB0cmFuc2xhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkb21haW4KKwkg
KiBmcm9tIHdoaWNoIHBhZ2VzIHdlcmUgcmVtb3ZlZC4KKwkgKi8KKwlpZiAobWFwKQorCQlpb21t
dV9pbnZhbGlkYXRlX3RsYihob3N0X2RvbWFpbik7CisJZWxzZQorCQlpb21tdV9pbnZhbGlkYXRl
X3RsYih2bS0+aW9tbXUpOworfQorCisjZGVmaW5lCXZtX2lvbW11X3VubWFwKHZtKQl2bV9pb21t
dV9tb2RpZnkoKHZtKSwgRkFMU0UpCisjZGVmaW5lCXZtX2lvbW11X21hcCh2bSkJdm1faW9tbXVf
bW9kaWZ5KCh2bSksIFRSVUUpCisKK2ludAordm1fdW5hc3NpZ25fcHB0ZGV2KHN0cnVjdCB2bSAq
dm0sIGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYykKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJv
ciA9IHBwdF91bmFzc2lnbl9kZXZpY2Uodm0sIGJ1cywgc2xvdCwgZnVuYyk7CisJaWYgKGVycm9y
KQorCQlyZXR1cm4gKGVycm9yKTsKKworCWlmIChwcHRfYXNzaWduZWRfZGV2aWNlcyh2bSkgPT0g
MCkKKwkJdm1faW9tbXVfdW5tYXAodm0pOworCisJcmV0dXJuICgwKTsKK30KKworaW50Cit2bV9h
c3NpZ25fcHB0ZGV2KHN0cnVjdCB2bSAqdm0sIGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYykK
K3sKKwlpbnQgZXJyb3I7CisJdm1fcGFkZHJfdCBtYXhhZGRyOworCisJLyogU2V0IHVwIHRoZSBJ
T01NVSB0byBkbyB0aGUgJ2dwYScgdG8gJ2hwYScgdHJhbnNsYXRpb24gKi8KKwlpZiAocHB0X2Fz
c2lnbmVkX2RldmljZXModm0pID09IDApIHsKKwkJS0FTU0VSVCh2bS0+aW9tbXUgPT0gTlVMTCwK
KwkJICAgICgidm1fYXNzaWduX3BwdGRldjogaW9tbXUgbXVzdCBiZSBOVUxMIikpOworCQltYXhh
ZGRyID0gc3lzbWVtX21heGFkZHIodm0pOworCQl2bS0+aW9tbXUgPSBpb21tdV9jcmVhdGVfZG9t
YWluKG1heGFkZHIpOworCQl2bV9pb21tdV9tYXAodm0pOworCX0KKworCWVycm9yID0gcHB0X2Fz
c2lnbl9kZXZpY2Uodm0sIGJ1cywgc2xvdCwgZnVuYyk7CisJcmV0dXJuIChlcnJvcik7Cit9CisK
K3ZvaWQgKgordm1fZ3BhX2hvbGQoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgdm1fcGFkZHJf
dCBncGEsIHNpemVfdCBsZW4sIGludCByZXFwcm90LAorCSAgICB2b2lkICoqY29va2llKQorewor
CWludCBpLCBjb3VudCwgcGFnZW9mZjsKKwlzdHJ1Y3QgbWVtX21hcCAqbW07CisJdm1fcGFnZV90
IG07CisjaWZkZWYgSU5WQVJJQU5UUworCS8qCisJICogQWxsIHZjcHVzIGFyZSBmcm96ZW4gYnkg
aW9jdGxzIHRoYXQgbW9kaWZ5IHRoZSBtZW1vcnkgbWFwCisJICogKGUuZy4gVk1fTU1BUF9NRU1T
RUcpLiBUaGVyZWZvcmUgJ3ZtLT5tZW1tYXBbXScgc3RhYmlsaXR5IGlzCisJICogZ3VhcmFudGVl
ZCBpZiBhdCBsZWFzdCBvbmUgdmNwdSBpcyBpbiB0aGUgVkNQVV9GUk9aRU4gc3RhdGUuCisJICov
CisJaW50IHN0YXRlOworCUtBU1NFUlQodmNwdWlkID49IC0xIHx8IHZjcHVpZCA8IFZNX01BWENQ
VSwgKCIlczogaW52YWxpZCB2Y3B1aWQgJWQiLAorCSAgICBfX2Z1bmNfXywgdmNwdWlkKSk7CisJ
Zm9yIChpID0gMDsgaSA8IFZNX01BWENQVTsgaSsrKSB7CisJCWlmICh2Y3B1aWQgIT0gLTEgJiYg
dmNwdWlkICE9IGkpCisJCQljb250aW51ZTsKKwkJc3RhdGUgPSB2Y3B1X2dldF9zdGF0ZSh2bSwg
aSwgTlVMTCk7CisJCUtBU1NFUlQoc3RhdGUgPT0gVkNQVV9GUk9aRU4sICgiJXM6IGludmFsaWQg
dmNwdSBzdGF0ZSAlZCIsCisJCSAgICBfX2Z1bmNfXywgc3RhdGUpKTsKKwl9CisjZW5kaWYKKwlw
YWdlb2ZmID0gZ3BhICYgUEFHRV9NQVNLOworCWlmIChsZW4gPiBQQUdFX1NJWkUgLSBwYWdlb2Zm
KQorCQlwYW5pYygidm1fZ3BhX2hvbGQ6IGludmFsaWQgZ3BhL2xlbjogMHglMDE2bHgvJWx1Iiwg
Z3BhLCBsZW4pOworCisJY291bnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBWTV9NQVhfTUVNTUFQ
UzsgaSsrKSB7CisJCW1tID0gJnZtLT5tZW1fbWFwc1tpXTsKKwkJaWYgKHN5c21lbV9tYXBwaW5n
KHZtLCBtbSkgJiYgZ3BhID49IG1tLT5ncGEgJiYKKwkJICAgIGdwYSA8IG1tLT5ncGEgKyBtbS0+
bGVuKSB7CisJCQljb3VudCA9IHZtX2ZhdWx0X3F1aWNrX2hvbGRfcGFnZXMoJnZtLT52bXNwYWNl
LT52bV9tYXAsCisJCQkgICAgdHJ1bmNfcGFnZShncGEpLCBQQUdFX1NJWkUsIHJlcXByb3QsICZt
LCAxKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGNvdW50ID09IDEpIHsKKwkJKmNvb2tp
ZSA9IG07CisJCXJldHVybiAoKHZvaWQgKikoUEhZU19UT19ETUFQKFZNX1BBR0VfVE9fUEhZUyht
KSkgKyBwYWdlb2ZmKSk7CisJfSBlbHNlIHsKKwkJKmNvb2tpZSA9IE5VTEw7CisJCXJldHVybiAo
TlVMTCk7CisJfQorfQorCit2b2lkCit2bV9ncGFfcmVsZWFzZSh2b2lkICpjb29raWUpCit7CisJ
dm1fcGFnZV90IG0gPSBjb29raWU7CisKKwl2bV9wYWdlX2xvY2sobSk7CisJdm1fcGFnZV91bmhv
bGQobSk7CisJdm1fcGFnZV91bmxvY2sobSk7Cit9CisKK2ludAordm1fZ2V0X3JlZ2lzdGVyKHN0
cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQgcmVnLCB1aW50NjRfdCAqcmV0dmFsKQoreworCisJ
aWYgKHZjcHUgPCAwIHx8IHZjcHUgPj0gVk1fTUFYQ1BVKQorCQlyZXR1cm4gKEVJTlZBTCk7CisK
KwlpZiAocmVnID49IFZNX1JFR19MQVNUKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlyZXR1cm4g
KFZNR0VUUkVHKHZtLT5jb29raWUsIHZjcHUsIHJlZywgcmV0dmFsKSk7Cit9CisKK2ludAordm1f
c2V0X3JlZ2lzdGVyKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIGludCByZWcsIHVpbnQ2NF90
IHZhbCkKK3sKKwlzdHJ1Y3QgdmNwdSAqdmNwdTsKKwlpbnQgZXJyb3I7CisKKwlpZiAodmNwdWlk
IDwgMCB8fCB2Y3B1aWQgPj0gVk1fTUFYQ1BVKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlpZiAo
cmVnID49IFZNX1JFR19MQVNUKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwllcnJvciA9IFZNU0VU
UkVHKHZtLT5jb29raWUsIHZjcHVpZCwgcmVnLCB2YWwpOworCWlmIChlcnJvciB8fCByZWcgIT0g
Vk1fUkVHX0dVRVNUX1JJUCkKKwkJcmV0dXJuIChlcnJvcik7CisKKwkvKiBTZXQgJ25leHRyaXAn
IHRvIG1hdGNoIHRoZSB2YWx1ZSBvZiAlcmlwICovCisJVkNQVV9DVFIxKHZtLCB2Y3B1aWQsICJT
ZXR0aW5nIG5leHRyaXAgdG8gJSNseCIsIHZhbCk7CisJdmNwdSA9ICZ2bS0+dmNwdVt2Y3B1aWRd
OworCXZjcHUtPm5leHRyaXAgPSB2YWw7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGJvb2xl
YW5fdAoraXNfZGVzY3JpcHRvcl90YWJsZShpbnQgcmVnKQoreworCisJc3dpdGNoIChyZWcpIHsK
KwljYXNlIFZNX1JFR19HVUVTVF9JRFRSOgorCWNhc2UgVk1fUkVHX0dVRVNUX0dEVFI6CisJCXJl
dHVybiAoVFJVRSk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIChGQUxTRSk7CisJfQorfQorCitzdGF0
aWMgYm9vbGVhbl90Citpc19zZWdtZW50X3JlZ2lzdGVyKGludCByZWcpCit7CisJCisJc3dpdGNo
IChyZWcpIHsKKwljYXNlIFZNX1JFR19HVUVTVF9FUzoKKwljYXNlIFZNX1JFR19HVUVTVF9DUzoK
KwljYXNlIFZNX1JFR19HVUVTVF9TUzoKKwljYXNlIFZNX1JFR19HVUVTVF9EUzoKKwljYXNlIFZN
X1JFR19HVUVTVF9GUzoKKwljYXNlIFZNX1JFR19HVUVTVF9HUzoKKwljYXNlIFZNX1JFR19HVUVT
VF9UUjoKKwljYXNlIFZNX1JFR19HVUVTVF9MRFRSOgorCQlyZXR1cm4gKFRSVUUpOworCWRlZmF1
bHQ6CisJCXJldHVybiAoRkFMU0UpOworCX0KK30KKworaW50Cit2bV9nZXRfc2VnX2Rlc2Moc3Ry
dWN0IHZtICp2bSwgaW50IHZjcHUsIGludCByZWcsCisJCXN0cnVjdCBzZWdfZGVzYyAqZGVzYykK
K3sKKworCWlmICh2Y3B1IDwgMCB8fCB2Y3B1ID49IFZNX01BWENQVSkKKwkJcmV0dXJuIChFSU5W
QUwpOworCisJaWYgKCFpc19zZWdtZW50X3JlZ2lzdGVyKHJlZykgJiYgIWlzX2Rlc2NyaXB0b3Jf
dGFibGUocmVnKSkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJcmV0dXJuIChWTUdFVERFU0Modm0t
PmNvb2tpZSwgdmNwdSwgcmVnLCBkZXNjKSk7Cit9CisKK2ludAordm1fc2V0X3NlZ19kZXNjKHN0
cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQgcmVnLAorCQlzdHJ1Y3Qgc2VnX2Rlc2MgKmRlc2Mp
Cit7CisJaWYgKHZjcHUgPCAwIHx8IHZjcHUgPj0gVk1fTUFYQ1BVKQorCQlyZXR1cm4gKEVJTlZB
TCk7CisKKwlpZiAoIWlzX3NlZ21lbnRfcmVnaXN0ZXIocmVnKSAmJiAhaXNfZGVzY3JpcHRvcl90
YWJsZShyZWcpKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlyZXR1cm4gKFZNU0VUREVTQyh2bS0+
Y29va2llLCB2Y3B1LCByZWcsIGRlc2MpKTsKK30KKworc3RhdGljIHZvaWQKK3Jlc3RvcmVfZ3Vl
c3RfZnB1c3RhdGUoc3RydWN0IHZjcHUgKnZjcHUpCit7CisKKwkvKiBmbHVzaCBob3N0IHN0YXRl
IHRvIHRoZSBwY2IgKi8KKwlmcHVleGl0KGN1cnRocmVhZCk7CisKKwkvKiByZXN0b3JlIGd1ZXN0
IEZQVSBzdGF0ZSAqLworCWZwdV9zdG9wX2VtdWxhdGluZygpOworCWZwdXJlc3RvcmUodmNwdS0+
Z3Vlc3RmcHUpOworCisJLyogcmVzdG9yZSBndWVzdCBYQ1IwIGlmIFhTQVZFIGlzIGVuYWJsZWQg
aW4gdGhlIGhvc3QgKi8KKwlpZiAocmNyNCgpICYgQ1I0X1hTQVZFKQorCQlsb2FkX3hjcigwLCB2
Y3B1LT5ndWVzdF94Y3IwKTsKKworCS8qCisJICogVGhlIEZQVSBpcyBub3cgImRpcnR5IiB3aXRo
IHRoZSBndWVzdCdzIHN0YXRlIHNvIHR1cm4gb24gZW11bGF0aW9uCisJICogdG8gdHJhcCBhbnkg
YWNjZXNzIHRvIHRoZSBGUFUgYnkgdGhlIGhvc3QuCisJICovCisJZnB1X3N0YXJ0X2VtdWxhdGlu
ZygpOworfQorCitzdGF0aWMgdm9pZAorc2F2ZV9ndWVzdF9mcHVzdGF0ZShzdHJ1Y3QgdmNwdSAq
dmNwdSkKK3sKKworCWlmICgocmNyMCgpICYgQ1IwX1RTKSA9PSAwKQorCQlwYW5pYygiZnB1IGVt
dWxhdGlvbiBub3QgZW5hYmxlZCBpbiBob3N0ISIpOworCisJLyogc2F2ZSBndWVzdCBYQ1IwIGFu
ZCByZXN0b3JlIGhvc3QgWENSMCAqLworCWlmIChyY3I0KCkgJiBDUjRfWFNBVkUpIHsKKwkJdmNw
dS0+Z3Vlc3RfeGNyMCA9IHJ4Y3IoMCk7CisJCWxvYWRfeGNyKDAsIHZtbV9nZXRfaG9zdF94Y3Iw
KCkpOworCX0KKworCS8qIHNhdmUgZ3Vlc3QgRlBVIHN0YXRlICovCisJZnB1X3N0b3BfZW11bGF0
aW5nKCk7CisJZnB1c2F2ZSh2Y3B1LT5ndWVzdGZwdSk7CisJZnB1X3N0YXJ0X2VtdWxhdGluZygp
OworfQorCitzdGF0aWMgVk1NX1NUQVQoVkNQVV9JRExFX1RJQ0tTLCAibnVtYmVyIG9mIHRpY2tz
IHZjcHUgd2FzIGlkbGUiKTsKKworc3RhdGljIGludAordmNwdV9zZXRfc3RhdGVfbG9ja2VkKHN0
cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIGVudW0gdmNwdV9zdGF0ZSBuZXdzdGF0ZSwKKyAgICBi
b29sIGZyb21faWRsZSkKK3sKKwlzdHJ1Y3QgdmNwdSAqdmNwdTsKKwlpbnQgZXJyb3I7CisKKwl2
Y3B1ID0gJnZtLT52Y3B1W3ZjcHVpZF07CisJdmNwdV9hc3NlcnRfbG9ja2VkKHZjcHUpOworCisJ
LyoKKwkgKiBTdGF0ZSB0cmFuc2l0aW9ucyBmcm9tIHRoZSB2bW1kZXZfaW9jdGwoKSBtdXN0IGFs
d2F5cyBiZWdpbiBmcm9tCisJICogdGhlIFZDUFVfSURMRSBzdGF0ZS4gVGhpcyBndWFyYW50ZWVz
IHRoYXQgdGhlcmUgaXMgb25seSBhIHNpbmdsZQorCSAqIGlvY3RsKCkgb3BlcmF0aW5nIG9uIGEg
dmNwdSBhdCBhbnkgcG9pbnQuCisJICovCisJaWYgKGZyb21faWRsZSkgeworCQl3aGlsZSAodmNw
dS0+c3RhdGUgIT0gVkNQVV9JRExFKSB7CisJCQl2Y3B1LT5yZXFpZGxlID0gMTsKKwkJCXZjcHVf
bm90aWZ5X2V2ZW50X2xvY2tlZCh2Y3B1LCBmYWxzZSk7CisJCQlWQ1BVX0NUUjEodm0sIHZjcHVp
ZCwgInZjcHUgc3RhdGUgY2hhbmdlIGZyb20gJXMgdG8gIgorCQkJICAgICJpZGxlIHJlcXVlc3Rl
ZCIsIHZjcHVfc3RhdGUyc3RyKHZjcHUtPnN0YXRlKSk7CisJCQltc2xlZXBfc3BpbigmdmNwdS0+
c3RhdGUsICZ2Y3B1LT5tdHgsICJ2bXN0YXQiLCBoeik7CisJCX0KKwl9IGVsc2UgeworCQlLQVNT
RVJUKHZjcHUtPnN0YXRlICE9IFZDUFVfSURMRSwgKCJpbnZhbGlkIHRyYW5zaXRpb24gZnJvbSAi
CisJCSAgICAidmNwdSBpZGxlIHN0YXRlIikpOworCX0KKworCWlmICh2Y3B1LT5zdGF0ZSA9PSBW
Q1BVX1JVTk5JTkcpIHsKKwkJS0FTU0VSVCh2Y3B1LT5ob3N0Y3B1ID09IGN1cmNwdSwgKCJjdXJj
cHUgJWQgYW5kIGhvc3RjcHUgJWQgIgorCQkgICAgIm1pc21hdGNoIGZvciBydW5uaW5nIHZjcHUi
LCBjdXJjcHUsIHZjcHUtPmhvc3RjcHUpKTsKKwl9IGVsc2UgeworCQlLQVNTRVJUKHZjcHUtPmhv
c3RjcHUgPT0gTk9DUFUsICgiSW52YWxpZCBob3N0Y3B1ICVkIGZvciBhICIKKwkJICAgICJ2Y3B1
IHRoYXQgaXMgbm90IHJ1bm5pbmciLCB2Y3B1LT5ob3N0Y3B1KSk7CisJfQorCisJLyoKKwkgKiBU
aGUgZm9sbG93aW5nIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBhbGxvd2VkOgorCSAqIElETEUgLT4g
RlJPWkVOIC0+IElETEUKKwkgKiBGUk9aRU4gLT4gUlVOTklORyAtPiBGUk9aRU4KKwkgKiBGUk9a
RU4gLT4gU0xFRVBJTkcgLT4gRlJPWkVOCisJICovCisJc3dpdGNoICh2Y3B1LT5zdGF0ZSkgewor
CWNhc2UgVkNQVV9JRExFOgorCWNhc2UgVkNQVV9SVU5OSU5HOgorCWNhc2UgVkNQVV9TTEVFUElO
RzoKKwkJZXJyb3IgPSAobmV3c3RhdGUgIT0gVkNQVV9GUk9aRU4pOworCQlicmVhazsKKwljYXNl
IFZDUFVfRlJPWkVOOgorCQllcnJvciA9IChuZXdzdGF0ZSA9PSBWQ1BVX0ZST1pFTik7CisJCWJy
ZWFrOworCWRlZmF1bHQ6CisJCWVycm9yID0gMTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGVycm9y
KQorCQlyZXR1cm4gKEVCVVNZKTsKKworCVZDUFVfQ1RSMih2bSwgdmNwdWlkLCAidmNwdSBzdGF0
ZSBjaGFuZ2VkIGZyb20gJXMgdG8gJXMiLAorCSAgICB2Y3B1X3N0YXRlMnN0cih2Y3B1LT5zdGF0
ZSksIHZjcHVfc3RhdGUyc3RyKG5ld3N0YXRlKSk7CisKKwl2Y3B1LT5zdGF0ZSA9IG5ld3N0YXRl
OworCWlmIChuZXdzdGF0ZSA9PSBWQ1BVX1JVTk5JTkcpCisJCXZjcHUtPmhvc3RjcHUgPSBjdXJj
cHU7CisJZWxzZQorCQl2Y3B1LT5ob3N0Y3B1ID0gTk9DUFU7CisKKwlpZiAobmV3c3RhdGUgPT0g
VkNQVV9JRExFKQorCQl3YWtldXAoJnZjcHUtPnN0YXRlKTsKKworCXJldHVybiAoMCk7Cit9CisK
K3N0YXRpYyB2b2lkCit2Y3B1X3JlcXVpcmVfc3RhdGUoc3RydWN0IHZtICp2bSwgaW50IHZjcHVp
ZCwgZW51bSB2Y3B1X3N0YXRlIG5ld3N0YXRlKQoreworCWludCBlcnJvcjsKKworCWlmICgoZXJy
b3IgPSB2Y3B1X3NldF9zdGF0ZSh2bSwgdmNwdWlkLCBuZXdzdGF0ZSwgZmFsc2UpKSAhPSAwKQor
CQlwYW5pYygiRXJyb3IgJWQgc2V0dGluZyBzdGF0ZSB0byAlZFxuIiwgZXJyb3IsIG5ld3N0YXRl
KTsKK30KKworc3RhdGljIHZvaWQKK3ZjcHVfcmVxdWlyZV9zdGF0ZV9sb2NrZWQoc3RydWN0IHZt
ICp2bSwgaW50IHZjcHVpZCwgZW51bSB2Y3B1X3N0YXRlIG5ld3N0YXRlKQoreworCWludCBlcnJv
cjsKKworCWlmICgoZXJyb3IgPSB2Y3B1X3NldF9zdGF0ZV9sb2NrZWQodm0sIHZjcHVpZCwgbmV3
c3RhdGUsIGZhbHNlKSkgIT0gMCkKKwkJcGFuaWMoIkVycm9yICVkIHNldHRpbmcgc3RhdGUgdG8g
JWQiLCBlcnJvciwgbmV3c3RhdGUpOworfQorCitzdGF0aWMgdm9pZAordm1fc2V0X3JlbmRlenZv
dXNfZnVuYyhzdHJ1Y3Qgdm0gKnZtLCB2bV9yZW5kZXp2b3VzX2Z1bmNfdCBmdW5jKQoreworCisJ
S0FTU0VSVChtdHhfb3duZWQoJnZtLT5yZW5kZXp2b3VzX210eCksICgicmVuZGV6dm91c19tdHgg
bm90IGxvY2tlZCIpKTsKKworCS8qCisJICogVXBkYXRlICdyZW5kZXp2b3VzX2Z1bmMnIGFuZCBl
eGVjdXRlIGEgd3JpdGUgbWVtb3J5IGJhcnJpZXIgdG8KKwkgKiBlbnN1cmUgdGhhdCBpdCBpcyB2
aXNpYmxlIGFjcm9zcyBhbGwgaG9zdCBjcHVzLiBUaGlzIGlzIG5vdCBuZWVkZWQKKwkgKiBmb3Ig
Y29ycmVjdG5lc3MgYnV0IGl0IGRvZXMgZW5zdXJlIHRoYXQgYWxsIHRoZSB2Y3B1cyB3aWxsIG5v
dGljZQorCSAqIHRoYXQgdGhlIHJlbmRlenZvdXMgaXMgcmVxdWVzdGVkIGltbWVkaWF0ZWx5Lgor
CSAqLworCXZtLT5yZW5kZXp2b3VzX2Z1bmMgPSBmdW5jOworCXdtYigpOworfQorCisjZGVmaW5l
CVJFTkRFWlZPVVNfQ1RSMCh2bSwgdmNwdWlkLCBmbXQpCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJ
CWlmICh2Y3B1aWQgPj0gMCkJCQkJCVwKKwkJCVZDUFVfQ1RSMCh2bSwgdmNwdWlkLCBmbXQpOwkJ
CVwKKwkJZWxzZQkJCQkJCQlcCisJCQlWTV9DVFIwKHZtLCBmbXQpOwkJCQlcCisJfSB3aGlsZSAo
MCkKKworc3RhdGljIHZvaWQKK3ZtX2hhbmRsZV9yZW5kZXp2b3VzKHN0cnVjdCB2bSAqdm0sIGlu
dCB2Y3B1aWQpCit7CisKKwlLQVNTRVJUKHZjcHVpZCA9PSAtMSB8fCAodmNwdWlkID49IDAgJiYg
dmNwdWlkIDwgVk1fTUFYQ1BVKSwKKwkgICAgKCJ2bV9oYW5kbGVfcmVuZGV6dm91czogaW52YWxp
ZCB2Y3B1aWQgJWQiLCB2Y3B1aWQpKTsKKworCW10eF9sb2NrKCZ2bS0+cmVuZGV6dm91c19tdHgp
OworCXdoaWxlICh2bS0+cmVuZGV6dm91c19mdW5jICE9IE5VTEwpIHsKKwkJLyogJ3JlbmRlenZv
dXNfcmVxX2NwdXMnIG11c3QgYmUgYSBzdWJzZXQgb2YgJ2FjdGl2ZV9jcHVzJyAqLworCQlDUFVf
QU5EKCZ2bS0+cmVuZGV6dm91c19yZXFfY3B1cywgJnZtLT5hY3RpdmVfY3B1cyk7CisKKwkJaWYg
KHZjcHVpZCAhPSAtMSAmJgorCQkgICAgQ1BVX0lTU0VUKHZjcHVpZCwgJnZtLT5yZW5kZXp2b3Vz
X3JlcV9jcHVzKSAmJgorCQkgICAgIUNQVV9JU1NFVCh2Y3B1aWQsICZ2bS0+cmVuZGV6dm91c19k
b25lX2NwdXMpKSB7CisJCQlWQ1BVX0NUUjAodm0sIHZjcHVpZCwgIkNhbGxpbmcgcmVuZGV6dm91
cyBmdW5jIik7CisJCQkoKnZtLT5yZW5kZXp2b3VzX2Z1bmMpKHZtLCB2Y3B1aWQsIHZtLT5yZW5k
ZXp2b3VzX2FyZyk7CisJCQlDUFVfU0VUKHZjcHVpZCwgJnZtLT5yZW5kZXp2b3VzX2RvbmVfY3B1
cyk7CisJCX0KKwkJaWYgKENQVV9DTVAoJnZtLT5yZW5kZXp2b3VzX3JlcV9jcHVzLAorCQkgICAg
JnZtLT5yZW5kZXp2b3VzX2RvbmVfY3B1cykgPT0gMCkgeworCQkJVkNQVV9DVFIwKHZtLCB2Y3B1
aWQsICJSZW5kZXp2b3VzIGNvbXBsZXRlZCIpOworCQkJdm1fc2V0X3JlbmRlenZvdXNfZnVuYyh2
bSwgTlVMTCk7CisJCQl3YWtldXAoJnZtLT5yZW5kZXp2b3VzX2Z1bmMpOworCQkJYnJlYWs7CisJ
CX0KKwkJUkVOREVaVk9VU19DVFIwKHZtLCB2Y3B1aWQsICJXYWl0IGZvciByZW5kZXp2b3VzIGNv
bXBsZXRpb24iKTsKKwkJbXR4X3NsZWVwKCZ2bS0+cmVuZGV6dm91c19mdW5jLCAmdm0tPnJlbmRl
enZvdXNfbXR4LCAwLAorCQkgICAgInZtcm5kdiIsIDApOworCX0KKwltdHhfdW5sb2NrKCZ2bS0+
cmVuZGV6dm91c19tdHgpOworfQorCisvKgorICogRW11bGF0ZSBhIGd1ZXN0ICdobHQnIGJ5IHNs
ZWVwaW5nIHVudGlsIHRoZSB2Y3B1IGlzIHJlYWR5IHRvIHJ1bi4KKyAqLworc3RhdGljIGludAor
dm1faGFuZGxlX2hsdChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBib29sIGludHJfZGlzYWJs
ZWQsIGJvb2wgKnJldHUpCit7CisJc3RydWN0IHZjcHUgKnZjcHU7CisJY29uc3QgY2hhciAqd21l
c2c7CisJaW50IHQsIHZjcHVfaGFsdGVkLCB2bV9oYWx0ZWQ7CisKKwlLQVNTRVJUKCFDUFVfSVNT
RVQodmNwdWlkLCAmdm0tPmhhbHRlZF9jcHVzKSwgKCJ2Y3B1IGFscmVhZHkgaGFsdGVkIikpOwor
CisJdmNwdSA9ICZ2bS0+dmNwdVt2Y3B1aWRdOworCXZjcHVfaGFsdGVkID0gMDsKKwl2bV9oYWx0
ZWQgPSAwOworCisJdmNwdV9sb2NrKHZjcHUpOworCXdoaWxlICgxKSB7CisJCS8qCisJCSAqIERv
IGEgZmluYWwgY2hlY2sgZm9yIHBlbmRpbmcgTk1JIG9yIGludGVycnVwdHMgYmVmb3JlCisJCSAq
IHJlYWxseSBwdXR0aW5nIHRoaXMgdGhyZWFkIHRvIHNsZWVwLiBBbHNvIGNoZWNrIGZvcgorCQkg
KiBzb2Z0d2FyZSBldmVudHMgdGhhdCB3b3VsZCBjYXVzZSB0aGlzIHZjcHUgdG8gd2FrZXVwLgor
CQkgKgorCQkgKiBUaGVzZSBpbnRlcnJ1cHRzL2V2ZW50cyBjb3VsZCBoYXZlIGhhcHBlbmVkIGFm
dGVyIHRoZQorCQkgKiB2Y3B1IHJldHVybmVkIGZyb20gVk1SVU4oKSBhbmQgYmVmb3JlIGl0IGFj
cXVpcmVkIHRoZQorCQkgKiB2Y3B1IGxvY2sgYWJvdmUuCisJCSAqLworCQlpZiAodm0tPnJlbmRl
enZvdXNfZnVuYyAhPSBOVUxMIHx8IHZtLT5zdXNwZW5kIHx8IHZjcHUtPnJlcWlkbGUpCisJCQli
cmVhazsKKwkJaWYgKHZtX25taV9wZW5kaW5nKHZtLCB2Y3B1aWQpKQorCQkJYnJlYWs7CisJCWlm
ICghaW50cl9kaXNhYmxlZCkgeworCQkJaWYgKHZtX2V4dGludF9wZW5kaW5nKHZtLCB2Y3B1aWQp
IHx8CisJCQkgICAgdmxhcGljX3BlbmRpbmdfaW50cih2Y3B1LT52bGFwaWMsIE5VTEwpKSB7CisJ
CQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKiBEb24ndCBnbyB0byBzbGVlcCBpZiB0aGUgdmNw
dSB0aHJlYWQgbmVlZHMgdG8geWllbGQgKi8KKwkJaWYgKHZjcHVfc2hvdWxkX3lpZWxkKHZtLCB2
Y3B1aWQpKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogU29tZSBMaW51eCBndWVzdHMgaW1wbGVt
ZW50ICJoYWx0IiBieSBoYXZpbmcgYWxsIHZjcHVzCisJCSAqIGV4ZWN1dGUgSExUIHdpdGggaW50
ZXJydXB0cyBkaXNhYmxlZC4gJ2hhbHRlZF9jcHVzJyBrZWVwcworCQkgKiB0cmFjayBvZiB0aGUg
dmNwdXMgdGhhdCBoYXZlIGVudGVyZWQgdGhpcyBzdGF0ZS4gV2hlbiBhbGwKKwkJICogdmNwdXMg
ZW50ZXIgdGhlIGhhbHRlZCBzdGF0ZSB0aGUgdmlydHVhbCBtYWNoaW5lIGlzIGhhbHRlZC4KKwkJ
ICovCisJCWlmIChpbnRyX2Rpc2FibGVkKSB7CisJCQl3bWVzZyA9ICJ2bWhhbHQiOworCQkJVkNQ
VV9DVFIwKHZtLCB2Y3B1aWQsICJIYWx0ZWQiKTsKKwkJCWlmICghdmNwdV9oYWx0ZWQgJiYgaGFs
dF9kZXRlY3Rpb25fZW5hYmxlZCkgeworCQkJCXZjcHVfaGFsdGVkID0gMTsKKwkJCQlDUFVfU0VU
X0FUT01JQyh2Y3B1aWQsICZ2bS0+aGFsdGVkX2NwdXMpOworCQkJfQorCQkJaWYgKENQVV9DTVAo
JnZtLT5oYWx0ZWRfY3B1cywgJnZtLT5hY3RpdmVfY3B1cykgPT0gMCkgeworCQkJCXZtX2hhbHRl
ZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQl3bWVzZyA9ICJ2bWlkbGUi
OworCQl9CisKKwkJdCA9IHRpY2tzOworCQl2Y3B1X3JlcXVpcmVfc3RhdGVfbG9ja2VkKHZtLCB2
Y3B1aWQsIFZDUFVfU0xFRVBJTkcpOworCQkvKgorCQkgKiBYWFggbXNsZWVwX3NwaW4oKSBjYW5u
b3QgYmUgaW50ZXJydXB0ZWQgYnkgc2lnbmFscyBzbworCQkgKiB3YWtlIHVwIHBlcmlvZGljYWxs
eSB0byBjaGVjayBwZW5kaW5nIHNpZ25hbHMuCisJCSAqLworCQltc2xlZXBfc3Bpbih2Y3B1LCAm
dmNwdS0+bXR4LCB3bWVzZywgaHopOworCQl2Y3B1X3JlcXVpcmVfc3RhdGVfbG9ja2VkKHZtLCB2
Y3B1aWQsIFZDUFVfRlJPWkVOKTsKKwkJdm1tX3N0YXRfaW5jcih2bSwgdmNwdWlkLCBWQ1BVX0lE
TEVfVElDS1MsIHRpY2tzIC0gdCk7CisJfQorCisJaWYgKHZjcHVfaGFsdGVkKQorCQlDUFVfQ0xS
X0FUT01JQyh2Y3B1aWQsICZ2bS0+aGFsdGVkX2NwdXMpOworCisJdmNwdV91bmxvY2sodmNwdSk7
CisKKwlpZiAodm1faGFsdGVkKQorCQl2bV9zdXNwZW5kKHZtLCBWTV9TVVNQRU5EX0hBTFQpOwor
CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAordm1faGFuZGxlX3BhZ2luZyhzdHJ1Y3Qg
dm0gKnZtLCBpbnQgdmNwdWlkLCBib29sICpyZXR1KQoreworCWludCBydiwgZnR5cGU7CisJc3Ry
dWN0IHZtX21hcCAqbWFwOworCXN0cnVjdCB2Y3B1ICp2Y3B1OworCXN0cnVjdCB2bV9leGl0ICp2
bWU7CisKKwl2Y3B1ID0gJnZtLT52Y3B1W3ZjcHVpZF07CisJdm1lID0gJnZjcHUtPmV4aXRpbmZv
OworCisJS0FTU0VSVCh2bWUtPmluc3RfbGVuZ3RoID09IDAsICgiJXM6IGludmFsaWQgaW5zdF9s
ZW5ndGggJWQiLAorCSAgICBfX2Z1bmNfXywgdm1lLT5pbnN0X2xlbmd0aCkpOworCisJZnR5cGUg
PSB2bWUtPnUucGFnaW5nLmZhdWx0X3R5cGU7CisJS0FTU0VSVChmdHlwZSA9PSBWTV9QUk9UX1JF
QUQgfHwKKwkgICAgZnR5cGUgPT0gVk1fUFJPVF9XUklURSB8fCBmdHlwZSA9PSBWTV9QUk9UX0VY
RUNVVEUsCisJICAgICgidm1faGFuZGxlX3BhZ2luZzogaW52YWxpZCBmYXVsdF90eXBlICVkIiwg
ZnR5cGUpKTsKKworCWlmIChmdHlwZSA9PSBWTV9QUk9UX1JFQUQgfHwgZnR5cGUgPT0gVk1fUFJP
VF9XUklURSkgeworCQlydiA9IHBtYXBfZW11bGF0ZV9hY2Nlc3NlZF9kaXJ0eSh2bXNwYWNlX3Bt
YXAodm0tPnZtc3BhY2UpLAorCQkgICAgdm1lLT51LnBhZ2luZy5ncGEsIGZ0eXBlKTsKKwkJaWYg
KHJ2ID09IDApIHsKKwkJCVZDUFVfQ1RSMih2bSwgdmNwdWlkLCAiJXMgYml0IGVtdWxhdGlvbiBm
b3IgZ3BhICUjbHgiLAorCQkJICAgIGZ0eXBlID09IFZNX1BST1RfUkVBRCA/ICJhY2Nlc3NlZCIg
OiAiZGlydHkiLAorCQkJICAgIHZtZS0+dS5wYWdpbmcuZ3BhKTsKKwkJCWdvdG8gZG9uZTsKKwkJ
fQorCX0KKworCW1hcCA9ICZ2bS0+dm1zcGFjZS0+dm1fbWFwOworCXJ2ID0gdm1fZmF1bHQobWFw
LCB2bWUtPnUucGFnaW5nLmdwYSwgZnR5cGUsIFZNX0ZBVUxUX05PUk1BTCk7CisKKwlWQ1BVX0NU
UjModm0sIHZjcHVpZCwgInZtX2hhbmRsZV9wYWdpbmcgcnYgPSAlZCwgZ3BhID0gJSNseCwgIgor
CSAgICAiZnR5cGUgPSAlZCIsIHJ2LCB2bWUtPnUucGFnaW5nLmdwYSwgZnR5cGUpOworCisJaWYg
KHJ2ICE9IEtFUk5fU1VDQ0VTUykKKwkJcmV0dXJuIChFRkFVTFQpOworZG9uZToKKwlyZXR1cm4g
KDApOworfQorCitzdGF0aWMgaW50Cit2bV9oYW5kbGVfaW5zdF9lbXVsKHN0cnVjdCB2bSAqdm0s
IGludCB2Y3B1aWQsIGJvb2wgKnJldHUpCit7CisJc3RydWN0IHZpZSAqdmllOworCXN0cnVjdCB2
Y3B1ICp2Y3B1OworCXN0cnVjdCB2bV9leGl0ICp2bWU7CisJdWludDY0X3QgZ2xhLCBncGEsIGNz
X2Jhc2U7CisJc3RydWN0IHZtX2d1ZXN0X3BhZ2luZyAqcGFnaW5nOworCW1lbV9yZWdpb25fcmVh
ZF90IG1yZWFkOworCW1lbV9yZWdpb25fd3JpdGVfdCBtd3JpdGU7CisJZW51bSB2bV9jcHVfbW9k
ZSBjcHVfbW9kZTsKKwlpbnQgY3NfZCwgZXJyb3IsIGZhdWx0OworCisJdmNwdSA9ICZ2bS0+dmNw
dVt2Y3B1aWRdOworCXZtZSA9ICZ2Y3B1LT5leGl0aW5mbzsKKworCUtBU1NFUlQodm1lLT5pbnN0
X2xlbmd0aCA9PSAwLCAoIiVzOiBpbnZhbGlkIGluc3RfbGVuZ3RoICVkIiwKKwkgICAgX19mdW5j
X18sIHZtZS0+aW5zdF9sZW5ndGgpKTsKKworCWdsYSA9IHZtZS0+dS5pbnN0X2VtdWwuZ2xhOwor
CWdwYSA9IHZtZS0+dS5pbnN0X2VtdWwuZ3BhOworCWNzX2Jhc2UgPSB2bWUtPnUuaW5zdF9lbXVs
LmNzX2Jhc2U7CisJY3NfZCA9IHZtZS0+dS5pbnN0X2VtdWwuY3NfZDsKKwl2aWUgPSAmdm1lLT51
Lmluc3RfZW11bC52aWU7CisJcGFnaW5nID0gJnZtZS0+dS5pbnN0X2VtdWwucGFnaW5nOworCWNw
dV9tb2RlID0gcGFnaW5nLT5jcHVfbW9kZTsKKworCVZDUFVfQ1RSMSh2bSwgdmNwdWlkLCAiaW5z
dF9lbXVsIGZhdWx0IGFjY2Vzc2luZyBncGEgJSNseCIsIGdwYSk7CisKKwkvKiBGZXRjaCwgZGVj
b2RlIGFuZCBlbXVsYXRlIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiAqLworCWlmICh2aWUtPm51
bV92YWxpZCA9PSAwKSB7CisJCWVycm9yID0gdm1tX2ZldGNoX2luc3RydWN0aW9uKHZtLCB2Y3B1
aWQsIHBhZ2luZywgdm1lLT5yaXAgKworCQkgICAgY3NfYmFzZSwgVklFX0lOU1RfU0laRSwgdmll
LCAmZmF1bHQpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFRoZSBpbnN0cnVjdGlvbiBieXRlcyBo
YXZlIGFscmVhZHkgYmVlbiBjb3BpZWQgaW50byAndmllJworCQkgKi8KKwkJZXJyb3IgPSBmYXVs
dCA9IDA7CisJfQorCWlmIChlcnJvciB8fCBmYXVsdCkKKwkJcmV0dXJuIChlcnJvcik7CisKKwlp
ZiAodm1tX2RlY29kZV9pbnN0cnVjdGlvbih2bSwgdmNwdWlkLCBnbGEsIGNwdV9tb2RlLCBjc19k
LCB2aWUpICE9IDApIHsKKwkJVkNQVV9DVFIxKHZtLCB2Y3B1aWQsICJFcnJvciBkZWNvZGluZyBp
bnN0cnVjdGlvbiBhdCAlI2x4IiwKKwkJICAgIHZtZS0+cmlwICsgY3NfYmFzZSk7CisJCSpyZXR1
ID0gdHJ1ZTsJICAgIC8qIGR1bXAgaW5zdHJ1Y3Rpb24gYnl0ZXMgaW4gdXNlcnNwYWNlICovCisJ
CXJldHVybiAoMCk7CisJfQorCisJLyoKKwkgKiBVcGRhdGUgJ25leHRyaXAnIGJhc2VkIG9uIHRo
ZSBsZW5ndGggb2YgdGhlIGVtdWxhdGVkIGluc3RydWN0aW9uLgorCSAqLworCXZtZS0+aW5zdF9s
ZW5ndGggPSB2aWUtPm51bV9wcm9jZXNzZWQ7CisJdmNwdS0+bmV4dHJpcCArPSB2aWUtPm51bV9w
cm9jZXNzZWQ7CisJVkNQVV9DVFIxKHZtLCB2Y3B1aWQsICJuZXh0cmlwIHVwZGF0ZWQgdG8gJSNs
eCBhZnRlciBpbnN0cnVjdGlvbiAiCisJICAgICJkZWNvZGluZyIsIHZjcHUtPm5leHRyaXApOwor
IAorCS8qIHJldHVybiB0byB1c2VybGFuZCB1bmxlc3MgdGhpcyBpcyBhbiBpbi1rZXJuZWwgZW11
bGF0ZWQgZGV2aWNlICovCisJaWYgKGdwYSA+PSBERUZBVUxUX0FQSUNfQkFTRSAmJiBncGEgPCBE
RUZBVUxUX0FQSUNfQkFTRSArIFBBR0VfU0laRSkgeworCQltcmVhZCA9IGxhcGljX21taW9fcmVh
ZDsKKwkJbXdyaXRlID0gbGFwaWNfbW1pb193cml0ZTsKKwl9IGVsc2UgaWYgKGdwYSA+PSBWSU9B
UElDX0JBU0UgJiYgZ3BhIDwgVklPQVBJQ19CQVNFICsgVklPQVBJQ19TSVpFKSB7CisJCW1yZWFk
ID0gdmlvYXBpY19tbWlvX3JlYWQ7CisJCW13cml0ZSA9IHZpb2FwaWNfbW1pb193cml0ZTsKKwl9
IGVsc2UgaWYgKGdwYSA+PSBWSFBFVF9CQVNFICYmIGdwYSA8IFZIUEVUX0JBU0UgKyBWSFBFVF9T
SVpFKSB7CisJCW1yZWFkID0gdmhwZXRfbW1pb19yZWFkOworCQltd3JpdGUgPSB2aHBldF9tbWlv
X3dyaXRlOworCX0gZWxzZSB7CisJCSpyZXR1ID0gdHJ1ZTsKKwkJcmV0dXJuICgwKTsKKwl9CisK
KwllcnJvciA9IHZtbV9lbXVsYXRlX2luc3RydWN0aW9uKHZtLCB2Y3B1aWQsIGdwYSwgdmllLCBw
YWdpbmcsCisJICAgIG1yZWFkLCBtd3JpdGUsIHJldHUpOworCisJcmV0dXJuIChlcnJvcik7Cit9
CisKK3N0YXRpYyBpbnQKK3ZtX2hhbmRsZV9zdXNwZW5kKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1
aWQsIGJvb2wgKnJldHUpCit7CisJaW50IGksIGRvbmU7CisJc3RydWN0IHZjcHUgKnZjcHU7CisK
Kwlkb25lID0gMDsKKwl2Y3B1ID0gJnZtLT52Y3B1W3ZjcHVpZF07CisKKwlDUFVfU0VUX0FUT01J
Qyh2Y3B1aWQsICZ2bS0+c3VzcGVuZGVkX2NwdXMpOworCisJLyoKKwkgKiBXYWl0IHVudGlsIGFs
bCAnYWN0aXZlX2NwdXMnIGhhdmUgc3VzcGVuZGVkIHRoZW1zZWx2ZXMuCisJICoKKwkgKiBTaW5j
ZSBhIFZNIG1heSBiZSBzdXNwZW5kZWQgYXQgYW55IHRpbWUgaW5jbHVkaW5nIHdoZW4gb25lIG9y
CisJICogbW9yZSB2Y3B1cyBhcmUgZG9pbmcgYSByZW5kZXp2b3VzIHdlIG5lZWQgdG8gY2FsbCB0
aGUgcmVuZGV6dm91cworCSAqIGhhbmRsZXIgd2hpbGUgd2UgYXJlIHdhaXRpbmcgdG8gcHJldmVu
dCBhIGRlYWRsb2NrLgorCSAqLworCXZjcHVfbG9jayh2Y3B1KTsKKwl3aGlsZSAoMSkgeworCQlp
ZiAoQ1BVX0NNUCgmdm0tPnN1c3BlbmRlZF9jcHVzLCAmdm0tPmFjdGl2ZV9jcHVzKSA9PSAwKSB7
CisJCQlWQ1BVX0NUUjAodm0sIHZjcHVpZCwgIkFsbCB2Y3B1cyBzdXNwZW5kZWQiKTsKKwkJCWJy
ZWFrOworCQl9CisKKwkJaWYgKHZtLT5yZW5kZXp2b3VzX2Z1bmMgPT0gTlVMTCkgeworCQkJVkNQ
VV9DVFIwKHZtLCB2Y3B1aWQsICJTbGVlcGluZyBkdXJpbmcgc3VzcGVuZCIpOworCQkJdmNwdV9y
ZXF1aXJlX3N0YXRlX2xvY2tlZCh2bSwgdmNwdWlkLCBWQ1BVX1NMRUVQSU5HKTsKKwkJCW1zbGVl
cF9zcGluKHZjcHUsICZ2Y3B1LT5tdHgsICJ2bXN1c3AiLCBoeik7CisJCQl2Y3B1X3JlcXVpcmVf
c3RhdGVfbG9ja2VkKHZtLCB2Y3B1aWQsIFZDUFVfRlJPWkVOKTsKKwkJfSBlbHNlIHsKKwkJCVZD
UFVfQ1RSMCh2bSwgdmNwdWlkLCAiUmVuZGV6dm91cyBkdXJpbmcgc3VzcGVuZCIpOworCQkJdmNw
dV91bmxvY2sodmNwdSk7CisJCQl2bV9oYW5kbGVfcmVuZGV6dm91cyh2bSwgdmNwdWlkKTsKKwkJ
CXZjcHVfbG9jayh2Y3B1KTsKKwkJfQorCX0KKwl2Y3B1X3VubG9jayh2Y3B1KTsKKworCS8qCisJ
ICogV2FrZXVwIHRoZSBvdGhlciBzbGVlcGluZyB2Y3B1cyBhbmQgcmV0dXJuIHRvIHVzZXJzcGFj
ZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVk1fTUFYQ1BVOyBpKyspIHsKKwkJaWYgKENQVV9J
U1NFVChpLCAmdm0tPnN1c3BlbmRlZF9jcHVzKSkgeworCQkJdmNwdV9ub3RpZnlfZXZlbnQodm0s
IGksIGZhbHNlKTsKKwkJfQorCX0KKworCSpyZXR1ID0gdHJ1ZTsKKwlyZXR1cm4gKDApOworfQor
CitzdGF0aWMgaW50Cit2bV9oYW5kbGVfcmVxaWRsZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlk
LCBib29sICpyZXR1KQoreworCXN0cnVjdCB2Y3B1ICp2Y3B1ID0gJnZtLT52Y3B1W3ZjcHVpZF07
CisKKwl2Y3B1X2xvY2sodmNwdSk7CisJS0FTU0VSVCh2Y3B1LT5yZXFpZGxlLCAoImludmFsaWQg
dmNwdSByZXFpZGxlICVkIiwgdmNwdS0+cmVxaWRsZSkpOworCXZjcHUtPnJlcWlkbGUgPSAwOwor
CXZjcHVfdW5sb2NrKHZjcHUpOworCSpyZXR1ID0gdHJ1ZTsKKwlyZXR1cm4gKDApOworfQorCitp
bnQKK3ZtX3N1c3BlbmQoc3RydWN0IHZtICp2bSwgZW51bSB2bV9zdXNwZW5kX2hvdyBob3cpCit7
CisJaW50IGk7CisKKwlpZiAoaG93IDw9IFZNX1NVU1BFTkRfTk9ORSB8fCBob3cgPj0gVk1fU1VT
UEVORF9MQVNUKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlpZiAoYXRvbWljX2NtcHNldF9pbnQo
JnZtLT5zdXNwZW5kLCAwLCBob3cpID09IDApIHsKKwkJVk1fQ1RSMih2bSwgInZpcnR1YWwgbWFj
aGluZSBhbHJlYWR5IHN1c3BlbmRlZCAlZC8lZCIsCisJCSAgICB2bS0+c3VzcGVuZCwgaG93KTsK
KwkJcmV0dXJuIChFQUxSRUFEWSk7CisJfQorCisJVk1fQ1RSMSh2bSwgInZpcnR1YWwgbWFjaGlu
ZSBzdWNjZXNzZnVsbHkgc3VzcGVuZGVkICVkIiwgaG93KTsKKworCS8qCisJICogTm90aWZ5IGFs
bCBhY3RpdmUgdmNwdXMgdGhhdCB0aGV5IGFyZSBub3cgc3VzcGVuZGVkLgorCSAqLworCWZvciAo
aSA9IDA7IGkgPCBWTV9NQVhDUFU7IGkrKykgeworCQlpZiAoQ1BVX0lTU0VUKGksICZ2bS0+YWN0
aXZlX2NwdXMpKQorCQkJdmNwdV9ub3RpZnlfZXZlbnQodm0sIGksIGZhbHNlKTsKKwl9CisKKwly
ZXR1cm4gKDApOworfQorCit2b2lkCit2bV9leGl0X3N1c3BlbmRlZChzdHJ1Y3Qgdm0gKnZtLCBp
bnQgdmNwdWlkLCB1aW50NjRfdCByaXApCit7CisJc3RydWN0IHZtX2V4aXQgKnZtZXhpdDsKKwor
CUtBU1NFUlQodm0tPnN1c3BlbmQgPiBWTV9TVVNQRU5EX05PTkUgJiYgdm0tPnN1c3BlbmQgPCBW
TV9TVVNQRU5EX0xBU1QsCisJICAgICgidm1fZXhpdF9zdXNwZW5kZWQ6IGludmFsaWQgc3VzcGVu
ZCB0eXBlICVkIiwgdm0tPnN1c3BlbmQpKTsKKworCXZtZXhpdCA9IHZtX2V4aXRpbmZvKHZtLCB2
Y3B1aWQpOworCXZtZXhpdC0+cmlwID0gcmlwOworCXZtZXhpdC0+aW5zdF9sZW5ndGggPSAwOwor
CXZtZXhpdC0+ZXhpdGNvZGUgPSBWTV9FWElUQ09ERV9TVVNQRU5ERUQ7CisJdm1leGl0LT51LnN1
c3BlbmRlZC5ob3cgPSB2bS0+c3VzcGVuZDsKK30KKwordm9pZAordm1fZXhpdF9yZW5kZXp2b3Vz
KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIHVpbnQ2NF90IHJpcCkKK3sKKwlzdHJ1Y3Qgdm1f
ZXhpdCAqdm1leGl0OworCisJS0FTU0VSVCh2bS0+cmVuZGV6dm91c19mdW5jICE9IE5VTEwsICgi
cmVuZGV6dm91cyBub3QgaW4gcHJvZ3Jlc3MiKSk7CisKKwl2bWV4aXQgPSB2bV9leGl0aW5mbyh2
bSwgdmNwdWlkKTsKKwl2bWV4aXQtPnJpcCA9IHJpcDsKKwl2bWV4aXQtPmluc3RfbGVuZ3RoID0g
MDsKKwl2bWV4aXQtPmV4aXRjb2RlID0gVk1fRVhJVENPREVfUkVOREVaVk9VUzsKKwl2bW1fc3Rh
dF9pbmNyKHZtLCB2Y3B1aWQsIFZNRVhJVF9SRU5ERVpWT1VTLCAxKTsKK30KKwordm9pZAordm1f
ZXhpdF9yZXFpZGxlKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIHVpbnQ2NF90IHJpcCkKK3sK
KwlzdHJ1Y3Qgdm1fZXhpdCAqdm1leGl0OworCisJdm1leGl0ID0gdm1fZXhpdGluZm8odm0sIHZj
cHVpZCk7CisJdm1leGl0LT5yaXAgPSByaXA7CisJdm1leGl0LT5pbnN0X2xlbmd0aCA9IDA7CisJ
dm1leGl0LT5leGl0Y29kZSA9IFZNX0VYSVRDT0RFX1JFUUlETEU7CisJdm1tX3N0YXRfaW5jcih2
bSwgdmNwdWlkLCBWTUVYSVRfUkVRSURMRSwgMSk7Cit9CisKK3ZvaWQKK3ZtX2V4aXRfYXN0cGVu
ZGluZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCByaXApCit7CisJc3RydWN0
IHZtX2V4aXQgKnZtZXhpdDsKKworCXZtZXhpdCA9IHZtX2V4aXRpbmZvKHZtLCB2Y3B1aWQpOwor
CXZtZXhpdC0+cmlwID0gcmlwOworCXZtZXhpdC0+aW5zdF9sZW5ndGggPSAwOworCXZtZXhpdC0+
ZXhpdGNvZGUgPSBWTV9FWElUQ09ERV9CT0dVUzsKKwl2bW1fc3RhdF9pbmNyKHZtLCB2Y3B1aWQs
IFZNRVhJVF9BU1RQRU5ESU5HLCAxKTsKK30KKworaW50Cit2bV9ydW4oc3RydWN0IHZtICp2bSwg
c3RydWN0IHZtX3J1biAqdm1ydW4pCit7CisJc3RydWN0IHZtX2V2ZW50aW5mbyBldmluZm87CisJ
aW50IGVycm9yLCB2Y3B1aWQ7CisJc3RydWN0IHZjcHUgKnZjcHU7CisJc3RydWN0IHBjYiAqcGNi
OworCXVpbnQ2NF90IHRzY3ZhbDsKKwlzdHJ1Y3Qgdm1fZXhpdCAqdm1lOworCWJvb2wgcmV0dSwg
aW50cl9kaXNhYmxlZDsKKwlwbWFwX3QgcG1hcDsKKworCXZjcHVpZCA9IHZtcnVuLT5jcHVpZDsK
KworCWlmICh2Y3B1aWQgPCAwIHx8IHZjcHVpZCA+PSBWTV9NQVhDUFUpCisJCXJldHVybiAoRUlO
VkFMKTsKKworCWlmICghQ1BVX0lTU0VUKHZjcHVpZCwgJnZtLT5hY3RpdmVfY3B1cykpCisJCXJl
dHVybiAoRUlOVkFMKTsKKworCWlmIChDUFVfSVNTRVQodmNwdWlkLCAmdm0tPnN1c3BlbmRlZF9j
cHVzKSkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJcG1hcCA9IHZtc3BhY2VfcG1hcCh2bS0+dm1z
cGFjZSk7CisJdmNwdSA9ICZ2bS0+dmNwdVt2Y3B1aWRdOworCXZtZSA9ICZ2Y3B1LT5leGl0aW5m
bzsKKwlldmluZm8ucnB0ciA9ICZ2bS0+cmVuZGV6dm91c19mdW5jOworCWV2aW5mby5zcHRyID0g
JnZtLT5zdXNwZW5kOworCWV2aW5mby5pcHRyID0gJnZjcHUtPnJlcWlkbGU7CityZXN0YXJ0Ogor
CWNyaXRpY2FsX2VudGVyKCk7CisKKwlLQVNTRVJUKCFDUFVfSVNTRVQoY3VyY3B1LCAmcG1hcC0+
cG1fYWN0aXZlKSwKKwkgICAgKCJ2bV9ydW46IGFic3VyZCBwbV9hY3RpdmUiKSk7CisKKwl0c2N2
YWwgPSByZHRzYygpOworCisJcGNiID0gUENQVV9HRVQoY3VycGNiKTsKKwlzZXRfcGNiX2ZsYWdz
KHBjYiwgUENCX0ZVTExfSVJFVCk7CisKKwlyZXN0b3JlX2d1ZXN0X2ZwdXN0YXRlKHZjcHUpOwor
CisJdmNwdV9yZXF1aXJlX3N0YXRlKHZtLCB2Y3B1aWQsIFZDUFVfUlVOTklORyk7CisJZXJyb3Ig
PSBWTVJVTih2bS0+Y29va2llLCB2Y3B1aWQsIHZjcHUtPm5leHRyaXAsIHBtYXAsICZldmluZm8p
OworCXZjcHVfcmVxdWlyZV9zdGF0ZSh2bSwgdmNwdWlkLCBWQ1BVX0ZST1pFTik7CisKKwlzYXZl
X2d1ZXN0X2ZwdXN0YXRlKHZjcHUpOworCisJdm1tX3N0YXRfaW5jcih2bSwgdmNwdWlkLCBWQ1BV
X1RPVEFMX1JVTlRJTUUsIHJkdHNjKCkgLSB0c2N2YWwpOworCisJY3JpdGljYWxfZXhpdCgpOwor
CisJaWYgKGVycm9yID09IDApIHsKKwkJcmV0dSA9IGZhbHNlOworCQl2Y3B1LT5uZXh0cmlwID0g
dm1lLT5yaXAgKyB2bWUtPmluc3RfbGVuZ3RoOworCQlzd2l0Y2ggKHZtZS0+ZXhpdGNvZGUpIHsK
KwkJY2FzZSBWTV9FWElUQ09ERV9SRVFJRExFOgorCQkJZXJyb3IgPSB2bV9oYW5kbGVfcmVxaWRs
ZSh2bSwgdmNwdWlkLCAmcmV0dSk7CisJCQlicmVhazsKKwkJY2FzZSBWTV9FWElUQ09ERV9TVVNQ
RU5ERUQ6CisJCQllcnJvciA9IHZtX2hhbmRsZV9zdXNwZW5kKHZtLCB2Y3B1aWQsICZyZXR1KTsK
KwkJCWJyZWFrOworCQljYXNlIFZNX0VYSVRDT0RFX0lPQVBJQ19FT0k6CisJCQl2aW9hcGljX3By
b2Nlc3NfZW9pKHZtLCB2Y3B1aWQsCisJCQkgICAgdm1lLT51LmlvYXBpY19lb2kudmVjdG9yKTsK
KwkJCWJyZWFrOworCQljYXNlIFZNX0VYSVRDT0RFX1JFTkRFWlZPVVM6CisJCQl2bV9oYW5kbGVf
cmVuZGV6dm91cyh2bSwgdmNwdWlkKTsKKwkJCWVycm9yID0gMDsKKwkJCWJyZWFrOworCQljYXNl
IFZNX0VYSVRDT0RFX0hMVDoKKwkJCWludHJfZGlzYWJsZWQgPSAoKHZtZS0+dS5obHQucmZsYWdz
ICYgUFNMX0kpID09IDApOworCQkJZXJyb3IgPSB2bV9oYW5kbGVfaGx0KHZtLCB2Y3B1aWQsIGlu
dHJfZGlzYWJsZWQsICZyZXR1KTsKKwkJCWJyZWFrOworCQljYXNlIFZNX0VYSVRDT0RFX1BBR0lO
RzoKKwkJCWVycm9yID0gdm1faGFuZGxlX3BhZ2luZyh2bSwgdmNwdWlkLCAmcmV0dSk7CisJCQli
cmVhazsKKwkJY2FzZSBWTV9FWElUQ09ERV9JTlNUX0VNVUw6CisJCQllcnJvciA9IHZtX2hhbmRs
ZV9pbnN0X2VtdWwodm0sIHZjcHVpZCwgJnJldHUpOworCQkJYnJlYWs7CisJCWNhc2UgVk1fRVhJ
VENPREVfSU5PVVQ6CisJCWNhc2UgVk1fRVhJVENPREVfSU5PVVRfU1RSOgorCQkJZXJyb3IgPSB2
bV9oYW5kbGVfaW5vdXQodm0sIHZjcHVpZCwgdm1lLCAmcmV0dSk7CisJCQlicmVhazsKKwkJY2Fz
ZSBWTV9FWElUQ09ERV9NT05JVE9SOgorCQljYXNlIFZNX0VYSVRDT0RFX01XQUlUOgorCQkJdm1f
aW5qZWN0X3VkKHZtLCB2Y3B1aWQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1ID0g
dHJ1ZTsJLyogaGFuZGxlZCBpbiB1c2VybGFuZCAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlp
ZiAoZXJyb3IgPT0gMCAmJiByZXR1ID09IGZhbHNlKQorCQlnb3RvIHJlc3RhcnQ7CisKKwlWQ1BV
X0NUUjIodm0sIHZjcHVpZCwgInJldHUgJWQvJWQiLCBlcnJvciwgdm1lLT5leGl0Y29kZSk7CisK
KwkvKiBjb3B5IHRoZSBleGl0IGluZm9ybWF0aW9uICovCisJYmNvcHkodm1lLCAmdm1ydW4tPnZt
X2V4aXQsIHNpemVvZihzdHJ1Y3Qgdm1fZXhpdCkpOworCXJldHVybiAoZXJyb3IpOworfQorCitp
bnQKK3ZtX3Jlc3RhcnRfaW5zdHJ1Y3Rpb24odm9pZCAqYXJnLCBpbnQgdmNwdWlkKQoreworCXN0
cnVjdCB2bSAqdm07CisJc3RydWN0IHZjcHUgKnZjcHU7CisJZW51bSB2Y3B1X3N0YXRlIHN0YXRl
OworCXVpbnQ2NF90IHJpcDsKKwlpbnQgZXJyb3I7CisKKwl2bSA9IGFyZzsKKwlpZiAodmNwdWlk
IDwgMCB8fCB2Y3B1aWQgPj0gVk1fTUFYQ1BVKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwl2Y3B1
ID0gJnZtLT52Y3B1W3ZjcHVpZF07CisJc3RhdGUgPSB2Y3B1X2dldF9zdGF0ZSh2bSwgdmNwdWlk
LCBOVUxMKTsKKwlpZiAoc3RhdGUgPT0gVkNQVV9SVU5OSU5HKSB7CisJCS8qCisJCSAqIFdoZW4g
YSB2Y3B1IGlzICJydW5uaW5nIiB0aGUgbmV4dCBpbnN0cnVjdGlvbiBpcyBkZXRlcm1pbmVkCisJ
CSAqIGJ5IGFkZGluZyAncmlwJyBhbmQgJ2luc3RfbGVuZ3RoJyBpbiB0aGUgdmNwdSdzICdleGl0
aW5mbycuCisJCSAqIFRodXMgc2V0dGluZyAnaW5zdF9sZW5ndGgnIHRvIHplcm8gd2lsbCBjYXVz
ZSB0aGUgY3VycmVudAorCQkgKiBpbnN0cnVjdGlvbiB0byBiZSByZXN0YXJ0ZWQuCisJCSAqLwor
CQl2Y3B1LT5leGl0aW5mby5pbnN0X2xlbmd0aCA9IDA7CisJCVZDUFVfQ1RSMSh2bSwgdmNwdWlk
LCAicmVzdGFydGluZyBpbnN0cnVjdGlvbiBhdCAlI2x4IGJ5ICIKKwkJICAgICJzZXR0aW5nIGlu
c3RfbGVuZ3RoIHRvIHplcm8iLCB2Y3B1LT5leGl0aW5mby5yaXApOworCX0gZWxzZSBpZiAoc3Rh
dGUgPT0gVkNQVV9GUk9aRU4pIHsKKwkJLyoKKwkJICogV2hlbiBhIHZjcHUgaXMgImZyb3plbiIg
aXQgaXMgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbgorCQkgKiBhcm91bmQgVk1SVU4oKSBh
bmQgJ25leHRyaXAnIHBvaW50cyB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbi4KKwkJICogVGh1cyBp
bnN0cnVjdGlvbiByZXN0YXJ0IGlzIGFjaGlldmVkIGJ5IHNldHRpbmcgJ25leHRyaXAnCisJCSAq
IHRvIHRoZSB2Y3B1J3MgJXJpcC4KKwkJICovCisJCWVycm9yID0gdm1fZ2V0X3JlZ2lzdGVyKHZt
LCB2Y3B1aWQsIFZNX1JFR19HVUVTVF9SSVAsICZyaXApOworCQlLQVNTRVJUKCFlcnJvciwgKCIl
czogZXJyb3IgJWQgZ2V0dGluZyByaXAiLCBfX2Z1bmNfXywgZXJyb3IpKTsKKwkJVkNQVV9DVFIy
KHZtLCB2Y3B1aWQsICJyZXN0YXJ0aW5nIGluc3RydWN0aW9uIGJ5IHVwZGF0aW5nICIKKwkJICAg
ICJuZXh0cmlwIGZyb20gJSNseCB0byAlI2x4IiwgdmNwdS0+bmV4dHJpcCwgcmlwKTsKKwkJdmNw
dS0+bmV4dHJpcCA9IHJpcDsKKwl9IGVsc2UgeworCQlwYW5pYygiJXM6IGludmFsaWQgc3RhdGUg
JWQiLCBfX2Z1bmNfXywgc3RhdGUpOworCX0KKwlyZXR1cm4gKDApOworfQorCitpbnQKK3ZtX2V4
aXRfaW50aW5mbyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCBpbmZvKQorewor
CXN0cnVjdCB2Y3B1ICp2Y3B1OworCWludCB0eXBlLCB2ZWN0b3I7CisKKwlpZiAodmNwdWlkIDwg
MCB8fCB2Y3B1aWQgPj0gVk1fTUFYQ1BVKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwl2Y3B1ID0g
JnZtLT52Y3B1W3ZjcHVpZF07CisKKwlpZiAoaW5mbyAmIFZNX0lOVElORk9fVkFMSUQpIHsKKwkJ
dHlwZSA9IGluZm8gJiBWTV9JTlRJTkZPX1RZUEU7CisJCXZlY3RvciA9IGluZm8gJiAweGZmOwor
CQlpZiAodHlwZSA9PSBWTV9JTlRJTkZPX05NSSAmJiB2ZWN0b3IgIT0gSURUX05NSSkKKwkJCXJl
dHVybiAoRUlOVkFMKTsKKwkJaWYgKHR5cGUgPT0gVk1fSU5USU5GT19IV0VYQ0VQVElPTiAmJiB2
ZWN0b3IgPj0gMzIpCisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCWlmIChpbmZvICYgVk1fSU5USU5G
T19SU1ZEKQorCQkJcmV0dXJuIChFSU5WQUwpOworCX0gZWxzZSB7CisJCWluZm8gPSAwOworCX0K
KwlWQ1BVX0NUUjIodm0sIHZjcHVpZCwgIiVzOiBpbmZvMSglI2x4KSIsIF9fZnVuY19fLCBpbmZv
KTsKKwl2Y3B1LT5leGl0aW50aW5mbyA9IGluZm87CisJcmV0dXJuICgwKTsKK30KKworZW51bSBl
eGNfY2xhc3MgeworCUVYQ19CRU5JR04sCisJRVhDX0NPTlRSSUJVVE9SWSwKKwlFWENfUEFHRUZB
VUxUCit9OworCisjZGVmaW5lCUlEVF9WRQkyMAkvKiBWaXJ0dWFsaXphdGlvbiBFeGNlcHRpb24g
KEludGVsIHNwZWNpZmljKSAqLworCitzdGF0aWMgZW51bSBleGNfY2xhc3MKK2V4Y2VwdGlvbl9j
bGFzcyh1aW50NjRfdCBpbmZvKQoreworCWludCB0eXBlLCB2ZWN0b3I7CisKKwlLQVNTRVJUKGlu
Zm8gJiBWTV9JTlRJTkZPX1ZBTElELCAoImludGluZm8gbXVzdCBiZSB2YWxpZDogJSNseCIsIGlu
Zm8pKTsKKwl0eXBlID0gaW5mbyAmIFZNX0lOVElORk9fVFlQRTsKKwl2ZWN0b3IgPSBpbmZvICYg
MHhmZjsKKworCS8qIFRhYmxlIDYtNCwgIkludGVycnVwdCBhbmQgRXhjZXB0aW9uIENsYXNzZXMi
LCBJbnRlbCBTRE0sIFZvbCAzICovCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBWTV9JTlRJTkZP
X0hXSU5UUjoKKwljYXNlIFZNX0lOVElORk9fU1dJTlRSOgorCWNhc2UgVk1fSU5USU5GT19OTUk6
CisJCXJldHVybiAoRVhDX0JFTklHTik7CisJZGVmYXVsdDoKKwkJLyoKKwkJICogSGFyZHdhcmUg
ZXhjZXB0aW9uLgorCQkgKgorCQkgKiBTVk0gYW5kIFZULXggdXNlIGlkZW50aWNhbCB0eXBlIHZh
bHVlcyB0byByZXByZXNlbnQgTk1JLAorCQkgKiBoYXJkd2FyZSBpbnRlcnJ1cHQgYW5kIHNvZnR3
YXJlIGludGVycnVwdC4KKwkJICoKKwkJICogU1ZNIHVzZXMgdHlwZSAnMycgZm9yIGFsbCBleGNl
cHRpb25zLiBWVC14IHVzZXMgdHlwZSAnMycKKwkJICogZm9yIGV4Y2VwdGlvbnMgZXhjZXB0ICNC
UCBhbmQgI09GLiAjQlAgYW5kICNPRiB1c2UgYSB0eXBlCisJCSAqIHZhbHVlIG9mICc1JyBvciAn
NicuIFRoZXJlZm9yZSB3ZSBkb24ndCBjaGVjayBmb3IgZXhwbGljaXQKKwkJICogdmFsdWVzIG9m
ICd0eXBlJyB0byBjbGFzc2lmeSAnaW50aW5mbycgaW50byBhIGhhcmR3YXJlCisJCSAqIGV4Y2Vw
dGlvbi4KKwkJICovCisJCWJyZWFrOworCX0KKworCXN3aXRjaCAodmVjdG9yKSB7CisJY2FzZSBJ
RFRfUEY6CisJY2FzZSBJRFRfVkU6CisJCXJldHVybiAoRVhDX1BBR0VGQVVMVCk7CisJY2FzZSBJ
RFRfREU6CisJY2FzZSBJRFRfVFM6CisJY2FzZSBJRFRfTlA6CisJY2FzZSBJRFRfU1M6CisJY2Fz
ZSBJRFRfR1A6CisJCXJldHVybiAoRVhDX0NPTlRSSUJVVE9SWSk7CisJZGVmYXVsdDoKKwkJcmV0
dXJuIChFWENfQkVOSUdOKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK25lc3RlZF9mYXVsdChzdHJ1
Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCBpbmZvMSwgdWludDY0X3QgaW5mbzIsCisg
ICAgdWludDY0X3QgKnJldGluZm8pCit7CisJZW51bSBleGNfY2xhc3MgZXhjMSwgZXhjMjsKKwlp
bnQgdHlwZTEsIHZlY3RvcjE7CisKKwlLQVNTRVJUKGluZm8xICYgVk1fSU5USU5GT19WQUxJRCwg
KCJpbmZvMSAlI2x4IGlzIG5vdCB2YWxpZCIsIGluZm8xKSk7CisJS0FTU0VSVChpbmZvMiAmIFZN
X0lOVElORk9fVkFMSUQsICgiaW5mbzIgJSNseCBpcyBub3QgdmFsaWQiLCBpbmZvMikpOworCisJ
LyoKKwkgKiBJZiBhbiBleGNlcHRpb24gb2NjdXJzIHdoaWxlIGF0dGVtcHRpbmcgdG8gY2FsbCB0
aGUgZG91YmxlLWZhdWx0CisJICogaGFuZGxlciB0aGUgcHJvY2Vzc29yIGVudGVycyBzaHV0ZG93
biBtb2RlIChha2EgdHJpcGxlIGZhdWx0KS4KKwkgKi8KKwl0eXBlMSA9IGluZm8xICYgVk1fSU5U
SU5GT19UWVBFOworCXZlY3RvcjEgPSBpbmZvMSAmIDB4ZmY7CisJaWYgKHR5cGUxID09IFZNX0lO
VElORk9fSFdFWENFUFRJT04gJiYgdmVjdG9yMSA9PSBJRFRfREYpIHsKKwkJVkNQVV9DVFIyKHZt
LCB2Y3B1aWQsICJ0cmlwbGUgZmF1bHQ6IGluZm8xKCUjbHgpLCBpbmZvMiglI2x4KSIsCisJCSAg
ICBpbmZvMSwgaW5mbzIpOworCQl2bV9zdXNwZW5kKHZtLCBWTV9TVVNQRU5EX1RSSVBMRUZBVUxU
KTsKKwkJKnJldGluZm8gPSAwOworCQlyZXR1cm4gKDApOworCX0KKworCS8qCisJICogVGFibGUg
Ni01ICJDb25kaXRpb25zIGZvciBHZW5lcmF0aW5nIGEgRG91YmxlIEZhdWx0IiwgSW50ZWwgU0RN
LCBWb2wzCisJICovCisJZXhjMSA9IGV4Y2VwdGlvbl9jbGFzcyhpbmZvMSk7CisJZXhjMiA9IGV4
Y2VwdGlvbl9jbGFzcyhpbmZvMik7CisJaWYgKChleGMxID09IEVYQ19DT05UUklCVVRPUlkgJiYg
ZXhjMiA9PSBFWENfQ09OVFJJQlVUT1JZKSB8fAorCSAgICAoZXhjMSA9PSBFWENfUEFHRUZBVUxU
ICYmIGV4YzIgIT0gRVhDX0JFTklHTikpIHsKKwkJLyogQ29udmVydCBuZXN0ZWQgZmF1bHQgaW50
byBhIGRvdWJsZSBmYXVsdC4gKi8KKwkJKnJldGluZm8gPSBJRFRfREY7CisJCSpyZXRpbmZvIHw9
IFZNX0lOVElORk9fVkFMSUQgfCBWTV9JTlRJTkZPX0hXRVhDRVBUSU9OOworCQkqcmV0aW5mbyB8
PSBWTV9JTlRJTkZPX0RFTF9FUlJDT0RFOworCX0gZWxzZSB7CisJCS8qIEhhbmRsZSBleGNlcHRp
b25zIHNlcmlhbGx5ICovCisJCSpyZXRpbmZvID0gaW5mbzI7CisJfQorCXJldHVybiAoMSk7Cit9
CisKK3N0YXRpYyB1aW50NjRfdAordmNwdV9leGNlcHRpb25faW50aW5mbyhzdHJ1Y3QgdmNwdSAq
dmNwdSkKK3sKKwl1aW50NjRfdCBpbmZvID0gMDsKKworCWlmICh2Y3B1LT5leGNlcHRpb25fcGVu
ZGluZykgeworCQlpbmZvID0gdmNwdS0+ZXhjX3ZlY3RvciAmIDB4ZmY7CisJCWluZm8gfD0gVk1f
SU5USU5GT19WQUxJRCB8IFZNX0lOVElORk9fSFdFWENFUFRJT047CisJCWlmICh2Y3B1LT5leGNf
ZXJyY29kZV92YWxpZCkgeworCQkJaW5mbyB8PSBWTV9JTlRJTkZPX0RFTF9FUlJDT0RFOworCQkJ
aW5mbyB8PSAodWludDY0X3QpdmNwdS0+ZXhjX2VycmNvZGUgPDwgMzI7CisJCX0KKwl9CisJcmV0
dXJuIChpbmZvKTsKK30KKworaW50Cit2bV9lbnRyeV9pbnRpbmZvKHN0cnVjdCB2bSAqdm0sIGlu
dCB2Y3B1aWQsIHVpbnQ2NF90ICpyZXRpbmZvKQoreworCXN0cnVjdCB2Y3B1ICp2Y3B1OworCXVp
bnQ2NF90IGluZm8xLCBpbmZvMjsKKwlpbnQgdmFsaWQ7CisKKwlLQVNTRVJUKHZjcHVpZCA+PSAw
ICYmIHZjcHVpZCA8IFZNX01BWENQVSwgKCJpbnZhbGlkIHZjcHUgJWQiLCB2Y3B1aWQpKTsKKwor
CXZjcHUgPSAmdm0tPnZjcHVbdmNwdWlkXTsKKworCWluZm8xID0gdmNwdS0+ZXhpdGludGluZm87
CisJdmNwdS0+ZXhpdGludGluZm8gPSAwOworCisJaW5mbzIgPSAwOworCWlmICh2Y3B1LT5leGNl
cHRpb25fcGVuZGluZykgeworCQlpbmZvMiA9IHZjcHVfZXhjZXB0aW9uX2ludGluZm8odmNwdSk7
CisJCXZjcHUtPmV4Y2VwdGlvbl9wZW5kaW5nID0gMDsKKwkJVkNQVV9DVFIyKHZtLCB2Y3B1aWQs
ICJFeGNlcHRpb24gJWQgZGVsaXZlcmVkOiAlI2x4IiwKKwkJICAgIHZjcHUtPmV4Y192ZWN0b3Is
IGluZm8yKTsKKwl9CisKKwlpZiAoKGluZm8xICYgVk1fSU5USU5GT19WQUxJRCkgJiYgKGluZm8y
ICYgVk1fSU5USU5GT19WQUxJRCkpIHsKKwkJdmFsaWQgPSBuZXN0ZWRfZmF1bHQodm0sIHZjcHVp
ZCwgaW5mbzEsIGluZm8yLCByZXRpbmZvKTsKKwl9IGVsc2UgaWYgKGluZm8xICYgVk1fSU5USU5G
T19WQUxJRCkgeworCQkqcmV0aW5mbyA9IGluZm8xOworCQl2YWxpZCA9IDE7CisJfSBlbHNlIGlm
IChpbmZvMiAmIFZNX0lOVElORk9fVkFMSUQpIHsKKwkJKnJldGluZm8gPSBpbmZvMjsKKwkJdmFs
aWQgPSAxOworCX0gZWxzZSB7CisJCXZhbGlkID0gMDsKKwl9CisKKwlpZiAodmFsaWQpIHsKKwkJ
VkNQVV9DVFI0KHZtLCB2Y3B1aWQsICIlczogaW5mbzEoJSNseCksIGluZm8yKCUjbHgpLCAiCisJ
CSAgICAicmV0aW5mbyglI2x4KSIsIF9fZnVuY19fLCBpbmZvMSwgaW5mbzIsICpyZXRpbmZvKTsK
Kwl9CisKKwlyZXR1cm4gKHZhbGlkKTsKK30KKworaW50Cit2bV9nZXRfaW50aW5mbyhzdHJ1Y3Qg
dm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCAqaW5mbzEsIHVpbnQ2NF90ICppbmZvMikKK3sK
KwlzdHJ1Y3QgdmNwdSAqdmNwdTsKKworCWlmICh2Y3B1aWQgPCAwIHx8IHZjcHVpZCA+PSBWTV9N
QVhDUFUpCisJCXJldHVybiAoRUlOVkFMKTsKKworCXZjcHUgPSAmdm0tPnZjcHVbdmNwdWlkXTsK
KwkqaW5mbzEgPSB2Y3B1LT5leGl0aW50aW5mbzsKKwkqaW5mbzIgPSB2Y3B1X2V4Y2VwdGlvbl9p
bnRpbmZvKHZjcHUpOworCXJldHVybiAoMCk7Cit9CisKK2ludAordm1faW5qZWN0X2V4Y2VwdGlv
bihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBpbnQgdmVjdG9yLCBpbnQgZXJyY29kZV92YWxp
ZCwKKyAgICB1aW50MzJfdCBlcnJjb2RlLCBpbnQgcmVzdGFydF9pbnN0cnVjdGlvbikKK3sKKwlz
dHJ1Y3QgdmNwdSAqdmNwdTsKKwl1aW50NjRfdCByZWd2YWw7CisJaW50IGVycm9yOworCisJaWYg
KHZjcHVpZCA8IDAgfHwgdmNwdWlkID49IFZNX01BWENQVSkKKwkJcmV0dXJuIChFSU5WQUwpOwor
CisJaWYgKHZlY3RvciA8IDAgfHwgdmVjdG9yID49IDMyKQorCQlyZXR1cm4gKEVJTlZBTCk7CisK
KwkvKgorCSAqIEEgZG91YmxlIGZhdWx0IGV4Y2VwdGlvbiBzaG91bGQgbmV2ZXIgYmUgaW5qZWN0
ZWQgZGlyZWN0bHkgaW50bworCSAqIHRoZSBndWVzdC4gSXQgaXMgYSBkZXJpdmVkIGV4Y2VwdGlv
biB0aGF0IHJlc3VsdHMgZnJvbSBzcGVjaWZpYworCSAqIGNvbWJpbmF0aW9ucyBvZiBuZXN0ZWQg
ZmF1bHRzLgorCSAqLworCWlmICh2ZWN0b3IgPT0gSURUX0RGKQorCQlyZXR1cm4gKEVJTlZBTCk7
CisKKwl2Y3B1ID0gJnZtLT52Y3B1W3ZjcHVpZF07CisKKwlpZiAodmNwdS0+ZXhjZXB0aW9uX3Bl
bmRpbmcpIHsKKwkJVkNQVV9DVFIyKHZtLCB2Y3B1aWQsICJVbmFibGUgdG8gaW5qZWN0IGV4Y2Vw
dGlvbiAlZCBkdWUgdG8gIgorCQkgICAgInBlbmRpbmcgZXhjZXB0aW9uICVkIiwgdmVjdG9yLCB2
Y3B1LT5leGNfdmVjdG9yKTsKKwkJcmV0dXJuIChFQlVTWSk7CisJfQorCisJaWYgKGVycmNvZGVf
dmFsaWQpIHsKKwkJLyoKKwkJICogRXhjZXB0aW9ucyBkb24ndCBkZWxpdmVyIGFuIGVycm9yIGNv
ZGUgaW4gcmVhbCBtb2RlLgorCQkgKi8KKwkJZXJyb3IgPSB2bV9nZXRfcmVnaXN0ZXIodm0sIHZj
cHVpZCwgVk1fUkVHX0dVRVNUX0NSMCwgJnJlZ3ZhbCk7CisJCUtBU1NFUlQoIWVycm9yLCAoIiVz
OiBlcnJvciAlZCBnZXR0aW5nIENSMCIsIF9fZnVuY19fLCBlcnJvcikpOworCQlpZiAoIShyZWd2
YWwgJiBDUjBfUEUpKQorCQkJZXJyY29kZV92YWxpZCA9IDA7CisJfQorCisJLyoKKwkgKiBGcm9t
IHNlY3Rpb24gMjYuNi4xICJJbnRlcnJ1cHRpYmlsaXR5IFN0YXRlIiBpbiBJbnRlbCBTRE06CisJ
ICoKKwkgKiBFdmVudCBibG9ja2luZyBieSAiU1RJIiBvciAiTU9WIFNTIiBpcyBjbGVhcmVkIGFm
dGVyIGd1ZXN0IGV4ZWN1dGVzCisJICogb25lIGluc3RydWN0aW9uIG9yIGluY3VycyBhbiBleGNl
cHRpb24uCisJICovCisJZXJyb3IgPSB2bV9zZXRfcmVnaXN0ZXIodm0sIHZjcHVpZCwgVk1fUkVH
X0dVRVNUX0lOVFJfU0hBRE9XLCAwKTsKKwlLQVNTRVJUKGVycm9yID09IDAsICgiJXM6IGVycm9y
ICVkIGNsZWFyaW5nIGludGVycnVwdCBzaGFkb3ciLAorCSAgICBfX2Z1bmNfXywgZXJyb3IpKTsK
KworCWlmIChyZXN0YXJ0X2luc3RydWN0aW9uKQorCQl2bV9yZXN0YXJ0X2luc3RydWN0aW9uKHZt
LCB2Y3B1aWQpOworCisJdmNwdS0+ZXhjZXB0aW9uX3BlbmRpbmcgPSAxOworCXZjcHUtPmV4Y192
ZWN0b3IgPSB2ZWN0b3I7CisJdmNwdS0+ZXhjX2VycmNvZGUgPSBlcnJjb2RlOworCXZjcHUtPmV4
Y19lcnJjb2RlX3ZhbGlkID0gZXJyY29kZV92YWxpZDsKKwlWQ1BVX0NUUjEodm0sIHZjcHVpZCwg
IkV4Y2VwdGlvbiAlZCBwZW5kaW5nIiwgdmVjdG9yKTsKKwlyZXR1cm4gKDApOworfQorCit2b2lk
Cit2bV9pbmplY3RfZmF1bHQodm9pZCAqdm1hcmcsIGludCB2Y3B1aWQsIGludCB2ZWN0b3IsIGlu
dCBlcnJjb2RlX3ZhbGlkLAorICAgIGludCBlcnJjb2RlKQoreworCXN0cnVjdCB2bSAqdm07CisJ
aW50IGVycm9yLCByZXN0YXJ0X2luc3RydWN0aW9uOworCisJdm0gPSB2bWFyZzsKKwlyZXN0YXJ0
X2luc3RydWN0aW9uID0gMTsKKworCWVycm9yID0gdm1faW5qZWN0X2V4Y2VwdGlvbih2bSwgdmNw
dWlkLCB2ZWN0b3IsIGVycmNvZGVfdmFsaWQsCisJICAgIGVycmNvZGUsIHJlc3RhcnRfaW5zdHJ1
Y3Rpb24pOworCUtBU1NFUlQoZXJyb3IgPT0gMCwgKCJ2bV9pbmplY3RfZXhjZXB0aW9uIGVycm9y
ICVkIiwgZXJyb3IpKTsKK30KKwordm9pZAordm1faW5qZWN0X3BmKHZvaWQgKnZtYXJnLCBpbnQg
dmNwdWlkLCBpbnQgZXJyb3JfY29kZSwgdWludDY0X3QgY3IyKQoreworCXN0cnVjdCB2bSAqdm07
CisJaW50IGVycm9yOworCisJdm0gPSB2bWFyZzsKKwlWQ1BVX0NUUjIodm0sIHZjcHVpZCwgIklu
amVjdGluZyBwYWdlIGZhdWx0OiBlcnJvcl9jb2RlICUjeCwgY3IyICUjbHgiLAorCSAgICBlcnJv
cl9jb2RlLCBjcjIpOworCisJZXJyb3IgPSB2bV9zZXRfcmVnaXN0ZXIodm0sIHZjcHVpZCwgVk1f
UkVHX0dVRVNUX0NSMiwgY3IyKTsKKwlLQVNTRVJUKGVycm9yID09IDAsICgidm1fc2V0X3JlZ2lz
dGVyKGNyMikgZXJyb3IgJWQiLCBlcnJvcikpOworCisJdm1faW5qZWN0X2ZhdWx0KHZtLCB2Y3B1
aWQsIElEVF9QRiwgMSwgZXJyb3JfY29kZSk7Cit9CisKK3N0YXRpYyBWTU1fU1RBVChWQ1BVX05N
SV9DT1VOVCwgIm51bWJlciBvZiBOTUlzIGRlbGl2ZXJlZCB0byB2Y3B1Iik7CisKK2ludAordm1f
aW5qZWN0X25taShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkKQoreworCXN0cnVjdCB2Y3B1ICp2
Y3B1OworCisJaWYgKHZjcHVpZCA8IDAgfHwgdmNwdWlkID49IFZNX01BWENQVSkKKwkJcmV0dXJu
IChFSU5WQUwpOworCisJdmNwdSA9ICZ2bS0+dmNwdVt2Y3B1aWRdOworCisJdmNwdS0+bm1pX3Bl
bmRpbmcgPSAxOworCXZjcHVfbm90aWZ5X2V2ZW50KHZtLCB2Y3B1aWQsIGZhbHNlKTsKKwlyZXR1
cm4gKDApOworfQorCitpbnQKK3ZtX25taV9wZW5kaW5nKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1
aWQpCit7CisJc3RydWN0IHZjcHUgKnZjcHU7CisKKwlpZiAodmNwdWlkIDwgMCB8fCB2Y3B1aWQg
Pj0gVk1fTUFYQ1BVKQorCQlwYW5pYygidm1fbm1pX3BlbmRpbmc6IGludmFsaWQgdmNwdWlkICVk
IiwgdmNwdWlkKTsKKworCXZjcHUgPSAmdm0tPnZjcHVbdmNwdWlkXTsKKworCXJldHVybiAodmNw
dS0+bm1pX3BlbmRpbmcpOworfQorCit2b2lkCit2bV9ubWlfY2xlYXIoc3RydWN0IHZtICp2bSwg
aW50IHZjcHVpZCkKK3sKKwlzdHJ1Y3QgdmNwdSAqdmNwdTsKKworCWlmICh2Y3B1aWQgPCAwIHx8
IHZjcHVpZCA+PSBWTV9NQVhDUFUpCisJCXBhbmljKCJ2bV9ubWlfcGVuZGluZzogaW52YWxpZCB2
Y3B1aWQgJWQiLCB2Y3B1aWQpOworCisJdmNwdSA9ICZ2bS0+dmNwdVt2Y3B1aWRdOworCisJaWYg
KHZjcHUtPm5taV9wZW5kaW5nID09IDApCisJCXBhbmljKCJ2bV9ubWlfY2xlYXI6IGluY29uc2lz
dGVudCBubWlfcGVuZGluZyBzdGF0ZSIpOworCisJdmNwdS0+bm1pX3BlbmRpbmcgPSAwOworCXZt
bV9zdGF0X2luY3Iodm0sIHZjcHVpZCwgVkNQVV9OTUlfQ09VTlQsIDEpOworfQorCitzdGF0aWMg
Vk1NX1NUQVQoVkNQVV9FWFRJTlRfQ09VTlQsICJudW1iZXIgb2YgRXh0SU5UcyBkZWxpdmVyZWQg
dG8gdmNwdSIpOworCitpbnQKK3ZtX2luamVjdF9leHRpbnQoc3RydWN0IHZtICp2bSwgaW50IHZj
cHVpZCkKK3sKKwlzdHJ1Y3QgdmNwdSAqdmNwdTsKKworCWlmICh2Y3B1aWQgPCAwIHx8IHZjcHVp
ZCA+PSBWTV9NQVhDUFUpCisJCXJldHVybiAoRUlOVkFMKTsKKworCXZjcHUgPSAmdm0tPnZjcHVb
dmNwdWlkXTsKKworCXZjcHUtPmV4dGludF9wZW5kaW5nID0gMTsKKwl2Y3B1X25vdGlmeV9ldmVu
dCh2bSwgdmNwdWlkLCBmYWxzZSk7CisJcmV0dXJuICgwKTsKK30KKworaW50Cit2bV9leHRpbnRf
cGVuZGluZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkKQoreworCXN0cnVjdCB2Y3B1ICp2Y3B1
OworCisJaWYgKHZjcHVpZCA8IDAgfHwgdmNwdWlkID49IFZNX01BWENQVSkKKwkJcGFuaWMoInZt
X2V4dGludF9wZW5kaW5nOiBpbnZhbGlkIHZjcHVpZCAlZCIsIHZjcHVpZCk7CisKKwl2Y3B1ID0g
JnZtLT52Y3B1W3ZjcHVpZF07CisKKwlyZXR1cm4gKHZjcHUtPmV4dGludF9wZW5kaW5nKTsKK30K
Kwordm9pZAordm1fZXh0aW50X2NsZWFyKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQpCit7CisJ
c3RydWN0IHZjcHUgKnZjcHU7CisKKwlpZiAodmNwdWlkIDwgMCB8fCB2Y3B1aWQgPj0gVk1fTUFY
Q1BVKQorCQlwYW5pYygidm1fZXh0aW50X3BlbmRpbmc6IGludmFsaWQgdmNwdWlkICVkIiwgdmNw
dWlkKTsKKworCXZjcHUgPSAmdm0tPnZjcHVbdmNwdWlkXTsKKworCWlmICh2Y3B1LT5leHRpbnRf
cGVuZGluZyA9PSAwKQorCQlwYW5pYygidm1fZXh0aW50X2NsZWFyOiBpbmNvbnNpc3RlbnQgZXh0
aW50X3BlbmRpbmcgc3RhdGUiKTsKKworCXZjcHUtPmV4dGludF9wZW5kaW5nID0gMDsKKwl2bW1f
c3RhdF9pbmNyKHZtLCB2Y3B1aWQsIFZDUFVfRVhUSU5UX0NPVU5ULCAxKTsKK30KKworaW50Cit2
bV9nZXRfY2FwYWJpbGl0eShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSwgaW50IHR5cGUsIGludCAq
cmV0dmFsKQoreworCWlmICh2Y3B1IDwgMCB8fCB2Y3B1ID49IFZNX01BWENQVSkKKwkJcmV0dXJu
IChFSU5WQUwpOworCisJaWYgKHR5cGUgPCAwIHx8IHR5cGUgPj0gVk1fQ0FQX01BWCkKKwkJcmV0
dXJuIChFSU5WQUwpOworCisJcmV0dXJuIChWTUdFVENBUCh2bS0+Y29va2llLCB2Y3B1LCB0eXBl
LCByZXR2YWwpKTsKK30KKworaW50Cit2bV9zZXRfY2FwYWJpbGl0eShzdHJ1Y3Qgdm0gKnZtLCBp
bnQgdmNwdSwgaW50IHR5cGUsIGludCB2YWwpCit7CisJaWYgKHZjcHUgPCAwIHx8IHZjcHUgPj0g
Vk1fTUFYQ1BVKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlpZiAodHlwZSA8IDAgfHwgdHlwZSA+
PSBWTV9DQVBfTUFYKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlyZXR1cm4gKFZNU0VUQ0FQKHZt
LT5jb29raWUsIHZjcHUsIHR5cGUsIHZhbCkpOworfQorCitzdHJ1Y3QgdmxhcGljICoKK3ZtX2xh
cGljKHN0cnVjdCB2bSAqdm0sIGludCBjcHUpCit7CisJcmV0dXJuICh2bS0+dmNwdVtjcHVdLnZs
YXBpYyk7Cit9CisKK3N0cnVjdCB2aW9hcGljICoKK3ZtX2lvYXBpYyhzdHJ1Y3Qgdm0gKnZtKQor
eworCisJcmV0dXJuICh2bS0+dmlvYXBpYyk7Cit9CisKK3N0cnVjdCB2aHBldCAqCit2bV9ocGV0
KHN0cnVjdCB2bSAqdm0pCit7CisKKwlyZXR1cm4gKHZtLT52aHBldCk7Cit9CisKK2Jvb2xlYW5f
dAordm1tX2lzX3BwdGRldihpbnQgYnVzLCBpbnQgc2xvdCwgaW50IGZ1bmMpCit7CisJaW50IGZv
dW5kLCBpLCBuOworCWludCBiLCBzLCBmOworCWNoYXIgKnZhbCwgKmNwLCAqY3AyOworCisJLyoK
KwkgKiBYWFgKKwkgKiBUaGUgbGVuZ3RoIG9mIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGxp
bWl0ZWQgdG8gMTI4IGJ5dGVzIHdoaWNoCisJICogcHV0cyBhbiB1cHBlciBsaW1pdCBvbiB0aGUg
bnVtYmVyIG9mIHBhc3N0aHJ1IGRldmljZXMgdGhhdCBtYXkgYmUKKwkgKiBzcGVjaWZpZWQgdXNp
bmcgYSBzaW5nbGUgZW52aXJvbm1lbnQgdmFyaWFibGUuCisJICoKKwkgKiBXb3JrIGFyb3VuZCB0
aGlzIGJ5IHNjYW5uaW5nIG11bHRpcGxlIGVudmlyb25tZW50IHZhcmlhYmxlCisJICogbmFtZXMg
aW5zdGVhZCBvZiBhIHNpbmdsZSBvbmUgLSB5dWNrIQorCSAqLworCWNvbnN0IGNoYXIgKm5hbWVz
W10gPSB7ICJwcHRkZXZzIiwgInBwdGRldnMyIiwgInBwdGRldnMzIiwgTlVMTCB9OworCisJLyog
c2V0IHBwdGRldnM9IjEvMi8zIDQvNS82IDcvOC85IDEwLzExLzEyIiAqLworCWZvdW5kID0gMDsK
Kwlmb3IgKGkgPSAwOyBuYW1lc1tpXSAhPSBOVUxMICYmICFmb3VuZDsgaSsrKSB7CisJCWNwID0g
dmFsID0ga2Vybl9nZXRlbnYobmFtZXNbaV0pOworCQl3aGlsZSAoY3AgIT0gTlVMTCAmJiAqY3Ag
IT0gJ1wwJykgeworCQkJaWYgKChjcDIgPSBzdHJjaHIoY3AsICcgJykpICE9IE5VTEwpCisJCQkJ
KmNwMiA9ICdcMCc7CisKKwkJCW4gPSBzc2NhbmYoY3AsICIlZC8lZC8lZCIsICZiLCAmcywgJmYp
OworCQkJaWYgKG4gPT0gMyAmJiBidXMgPT0gYiAmJiBzbG90ID09IHMgJiYgZnVuYyA9PSBmKSB7
CisJCQkJZm91bmQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQkKKwkJCWlmIChjcDIgIT0gTlVM
TCkKKwkJCQkqY3AyKysgPSAnICc7CisKKwkJCWNwID0gY3AyOworCQl9CisJCWZyZWVlbnYodmFs
KTsKKwl9CisJcmV0dXJuIChmb3VuZCk7Cit9CisKK3ZvaWQgKgordm1faW9tbXVfZG9tYWluKHN0
cnVjdCB2bSAqdm0pCit7CisKKwlyZXR1cm4gKHZtLT5pb21tdSk7Cit9CisKK2ludAordmNwdV9z
ZXRfc3RhdGUoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgZW51bSB2Y3B1X3N0YXRlIG5ld3N0
YXRlLAorICAgIGJvb2wgZnJvbV9pZGxlKQoreworCWludCBlcnJvcjsKKwlzdHJ1Y3QgdmNwdSAq
dmNwdTsKKworCWlmICh2Y3B1aWQgPCAwIHx8IHZjcHVpZCA+PSBWTV9NQVhDUFUpCisJCXBhbmlj
KCJ2bV9zZXRfcnVuX3N0YXRlOiBpbnZhbGlkIHZjcHVpZCAlZCIsIHZjcHVpZCk7CisKKwl2Y3B1
ID0gJnZtLT52Y3B1W3ZjcHVpZF07CisKKwl2Y3B1X2xvY2sodmNwdSk7CisJZXJyb3IgPSB2Y3B1
X3NldF9zdGF0ZV9sb2NrZWQodm0sIHZjcHVpZCwgbmV3c3RhdGUsIGZyb21faWRsZSk7CisJdmNw
dV91bmxvY2sodmNwdSk7CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKworZW51bSB2Y3B1X3N0YXRl
Cit2Y3B1X2dldF9zdGF0ZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBpbnQgKmhvc3RjcHUp
Cit7CisJc3RydWN0IHZjcHUgKnZjcHU7CisJZW51bSB2Y3B1X3N0YXRlIHN0YXRlOworCisJaWYg
KHZjcHVpZCA8IDAgfHwgdmNwdWlkID49IFZNX01BWENQVSkKKwkJcGFuaWMoInZtX2dldF9ydW5f
c3RhdGU6IGludmFsaWQgdmNwdWlkICVkIiwgdmNwdWlkKTsKKworCXZjcHUgPSAmdm0tPnZjcHVb
dmNwdWlkXTsKKworCXZjcHVfbG9jayh2Y3B1KTsKKwlzdGF0ZSA9IHZjcHUtPnN0YXRlOworCWlm
IChob3N0Y3B1ICE9IE5VTEwpCisJCSpob3N0Y3B1ID0gdmNwdS0+aG9zdGNwdTsKKwl2Y3B1X3Vu
bG9jayh2Y3B1KTsKKworCXJldHVybiAoc3RhdGUpOworfQorCitpbnQKK3ZtX2FjdGl2YXRlX2Nw
dShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkKQoreworCisJaWYgKHZjcHVpZCA8IDAgfHwgdmNw
dWlkID49IFZNX01BWENQVSkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJaWYgKENQVV9JU1NFVCh2
Y3B1aWQsICZ2bS0+YWN0aXZlX2NwdXMpKQorCQlyZXR1cm4gKEVCVVNZKTsKKworCVZDUFVfQ1RS
MCh2bSwgdmNwdWlkLCAiYWN0aXZhdGVkIik7CisJQ1BVX1NFVF9BVE9NSUModmNwdWlkLCAmdm0t
PmFjdGl2ZV9jcHVzKTsKKwlyZXR1cm4gKDApOworfQorCitjcHVzZXRfdAordm1fYWN0aXZlX2Nw
dXMoc3RydWN0IHZtICp2bSkKK3sKKworCXJldHVybiAodm0tPmFjdGl2ZV9jcHVzKTsKK30KKwor
Y3B1c2V0X3QKK3ZtX3N1c3BlbmRlZF9jcHVzKHN0cnVjdCB2bSAqdm0pCit7CisKKwlyZXR1cm4g
KHZtLT5zdXNwZW5kZWRfY3B1cyk7Cit9CisKK3ZvaWQgKgordmNwdV9zdGF0cyhzdHJ1Y3Qgdm0g
KnZtLCBpbnQgdmNwdWlkKQoreworCisJcmV0dXJuICh2bS0+dmNwdVt2Y3B1aWRdLnN0YXRzKTsK
K30KKworaW50Cit2bV9nZXRfeDJhcGljX3N0YXRlKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQs
IGVudW0geDJhcGljX3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAodmNwdWlkIDwgMCB8fCB2Y3B1aWQg
Pj0gVk1fTUFYQ1BVKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwkqc3RhdGUgPSB2bS0+dmNwdVt2
Y3B1aWRdLngyYXBpY19zdGF0ZTsKKworCXJldHVybiAoMCk7Cit9CisKK2ludAordm1fc2V0X3gy
YXBpY19zdGF0ZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBlbnVtIHgyYXBpY19zdGF0ZSBz
dGF0ZSkKK3sKKwlpZiAodmNwdWlkIDwgMCB8fCB2Y3B1aWQgPj0gVk1fTUFYQ1BVKQorCQlyZXR1
cm4gKEVJTlZBTCk7CisKKwlpZiAoc3RhdGUgPj0gWDJBUElDX1NUQVRFX0xBU1QpCisJCXJldHVy
biAoRUlOVkFMKTsKKworCXZtLT52Y3B1W3ZjcHVpZF0ueDJhcGljX3N0YXRlID0gc3RhdGU7CisK
Kwl2bGFwaWNfc2V0X3gyYXBpY19zdGF0ZSh2bSwgdmNwdWlkLCBzdGF0ZSk7CisKKwlyZXR1cm4g
KDApOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZW5zdXJlIHRoYXQg
YSB2Y3B1ICJzZWVzIiBhIHBlbmRpbmcgZXZlbnQKKyAqIGFzIHNvb24gYXMgcG9zc2libGU6Cisg
KiAtIElmIHRoZSB2Y3B1IHRocmVhZCBpcyBzbGVlcGluZyB0aGVuIGl0IGlzIHdva2VuIHVwLgor
ICogLSBJZiB0aGUgdmNwdSBpcyBydW5uaW5nIG9uIGEgZGlmZmVyZW50IGhvc3RfY3B1IHRoZW4g
YW4gSVBJIHdpbGwgYmUgZGlyZWN0ZWQKKyAqICAgdG8gdGhlIGhvc3RfY3B1IHRvIGNhdXNlIHRo
ZSB2Y3B1IHRvIHRyYXAgaW50byB0aGUgaHlwZXJ2aXNvci4KKyAqLworc3RhdGljIHZvaWQKK3Zj
cHVfbm90aWZ5X2V2ZW50X2xvY2tlZChzdHJ1Y3QgdmNwdSAqdmNwdSwgYm9vbCBsYXBpY19pbnRy
KQoreworCWludCBob3N0Y3B1OworCisJaG9zdGNwdSA9IHZjcHUtPmhvc3RjcHU7CisJaWYgKHZj
cHUtPnN0YXRlID09IFZDUFVfUlVOTklORykgeworCQlLQVNTRVJUKGhvc3RjcHUgIT0gTk9DUFUs
ICgidmNwdSBydW5uaW5nIG9uIGludmFsaWQgaG9zdGNwdSIpKTsKKwkJaWYgKGhvc3RjcHUgIT0g
Y3VyY3B1KSB7CisJCQlpZiAobGFwaWNfaW50cikgeworCQkJCXZsYXBpY19wb3N0X2ludHIodmNw
dS0+dmxhcGljLCBob3N0Y3B1LAorCQkJCSAgICB2bW1faXBpbnVtKTsKKwkJCX0gZWxzZSB7CisJ
CQkJaXBpX2NwdShob3N0Y3B1LCB2bW1faXBpbnVtKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8q
CisJCQkgKiBJZiB0aGUgJ3ZjcHUnIGlzIHJ1bm5pbmcgb24gJ2N1cmNwdScgdGhlbiBpdCBtdXN0
CisJCQkgKiBiZSBzZW5kaW5nIGEgbm90aWZpY2F0aW9uIHRvIGl0c2VsZiAoZS5nLiBTRUxGX0lQ
SSkuCisJCQkgKiBUaGUgcGVuZGluZyBldmVudCB3aWxsIGJlIHBpY2tlZCB1cCB3aGVuIHRoZSB2
Y3B1CisJCQkgKiB0cmFuc2l0aW9ucyBiYWNrIHRvIGd1ZXN0IGNvbnRleHQuCisJCQkgKi8KKwkJ
fQorCX0gZWxzZSB7CisJCUtBU1NFUlQoaG9zdGNwdSA9PSBOT0NQVSwgKCJ2Y3B1IHN0YXRlICVk
IG5vdCBjb25zaXN0ZW50ICIKKwkJICAgICJ3aXRoIGhvc3RjcHUgJWQiLCB2Y3B1LT5zdGF0ZSwg
aG9zdGNwdSkpOworCQlpZiAodmNwdS0+c3RhdGUgPT0gVkNQVV9TTEVFUElORykKKwkJCXdha2V1
cF9vbmUodmNwdSk7CisJfQorfQorCit2b2lkCit2Y3B1X25vdGlmeV9ldmVudChzdHJ1Y3Qgdm0g
KnZtLCBpbnQgdmNwdWlkLCBib29sIGxhcGljX2ludHIpCit7CisJc3RydWN0IHZjcHUgKnZjcHUg
PSAmdm0tPnZjcHVbdmNwdWlkXTsKKworCXZjcHVfbG9jayh2Y3B1KTsKKwl2Y3B1X25vdGlmeV9l
dmVudF9sb2NrZWQodmNwdSwgbGFwaWNfaW50cik7CisJdmNwdV91bmxvY2sodmNwdSk7Cit9CisK
K3N0cnVjdCB2bXNwYWNlICoKK3ZtX2dldF92bXNwYWNlKHN0cnVjdCB2bSAqdm0pCit7CisKKwly
ZXR1cm4gKHZtLT52bXNwYWNlKTsKK30KKworaW50Cit2bV9hcGljaWQydmNwdWlkKHN0cnVjdCB2
bSAqdm0sIGludCBhcGljaWQpCit7CisJLyoKKwkgKiBYWFggYXBpYyBpZCBpcyBhc3N1bWVkIHRv
IGJlIG51bWVyaWNhbGx5IGlkZW50aWNhbCB0byB2Y3B1IGlkCisJICovCisJcmV0dXJuIChhcGlj
aWQpOworfQorCit2b2lkCit2bV9zbXBfcmVuZGV6dm91cyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw
dWlkLCBjcHVzZXRfdCBkZXN0LAorICAgIHZtX3JlbmRlenZvdXNfZnVuY190IGZ1bmMsIHZvaWQg
KmFyZykKK3sKKwlpbnQgaTsKKworCS8qCisJICogRW5mb3JjZSB0aGF0IHRoaXMgZnVuY3Rpb24g
aXMgY2FsbGVkIHdpdGhvdXQgYW55IGxvY2tzCisJICovCisJV0lUTkVTU19XQVJOKFdBUk5fUEFO
SUMsIE5VTEwsICJ2bV9zbXBfcmVuZGV6dm91cyIpOworCUtBU1NFUlQodmNwdWlkID09IC0xIHx8
ICh2Y3B1aWQgPj0gMCAmJiB2Y3B1aWQgPCBWTV9NQVhDUFUpLAorCSAgICAoInZtX3NtcF9yZW5k
ZXp2b3VzOiBpbnZhbGlkIHZjcHVpZCAlZCIsIHZjcHVpZCkpOworCityZXN0YXJ0OgorCW10eF9s
b2NrKCZ2bS0+cmVuZGV6dm91c19tdHgpOworCWlmICh2bS0+cmVuZGV6dm91c19mdW5jICE9IE5V
TEwpIHsKKwkJLyoKKwkJICogSWYgYSByZW5kZXp2b3VzIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3Mg
dGhlbiB3ZSBuZWVkIHRvCisJCSAqIGNhbGwgdGhlIHJlbmRlenZvdXMgaGFuZGxlciBpbiBjYXNl
IHRoaXMgJ3ZjcHVpZCcgaXMgb25lCisJCSAqIG9mIHRoZSB0YXJnZXRzIG9mIHRoZSByZW5kZXp2
b3VzLgorCQkgKi8KKwkJUkVOREVaVk9VU19DVFIwKHZtLCB2Y3B1aWQsICJSZW5kZXp2b3VzIGFs
cmVhZHkgaW4gcHJvZ3Jlc3MiKTsKKwkJbXR4X3VubG9jaygmdm0tPnJlbmRlenZvdXNfbXR4KTsK
KwkJdm1faGFuZGxlX3JlbmRlenZvdXModm0sIHZjcHVpZCk7CisJCWdvdG8gcmVzdGFydDsKKwl9
CisJS0FTU0VSVCh2bS0+cmVuZGV6dm91c19mdW5jID09IE5VTEwsICgidm1fc21wX3JlbmRlenZv
dXM6IHByZXZpb3VzICIKKwkgICAgInJlbmRlenZvdXMgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MiKSk7
CisKKwlSRU5ERVpWT1VTX0NUUjAodm0sIHZjcHVpZCwgIkluaXRpYXRpbmcgcmVuZGV6dm91cyIp
OworCXZtLT5yZW5kZXp2b3VzX3JlcV9jcHVzID0gZGVzdDsKKwlDUFVfWkVSTygmdm0tPnJlbmRl
enZvdXNfZG9uZV9jcHVzKTsKKwl2bS0+cmVuZGV6dm91c19hcmcgPSBhcmc7CisJdm1fc2V0X3Jl
bmRlenZvdXNfZnVuYyh2bSwgZnVuYyk7CisJbXR4X3VubG9jaygmdm0tPnJlbmRlenZvdXNfbXR4
KTsKKworCS8qCisJICogV2FrZSB1cCBhbnkgc2xlZXBpbmcgdmNwdXMgYW5kIHRyaWdnZXIgYSBW
TS1leGl0IGluIGFueSBydW5uaW5nCisJICogdmNwdXMgc28gdGhleSBoYW5kbGUgdGhlIHJlbmRl
enZvdXMgYXMgc29vbiBhcyBwb3NzaWJsZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVk1fTUFY
Q1BVOyBpKyspIHsKKwkJaWYgKENQVV9JU1NFVChpLCAmZGVzdCkpCisJCQl2Y3B1X25vdGlmeV9l
dmVudCh2bSwgaSwgZmFsc2UpOworCX0KKworCXZtX2hhbmRsZV9yZW5kZXp2b3VzKHZtLCB2Y3B1
aWQpOworfQorCitzdHJ1Y3QgdmF0cGljICoKK3ZtX2F0cGljKHN0cnVjdCB2bSAqdm0pCit7CisJ
cmV0dXJuICh2bS0+dmF0cGljKTsKK30KKworc3RydWN0IHZhdHBpdCAqCit2bV9hdHBpdChzdHJ1
Y3Qgdm0gKnZtKQoreworCXJldHVybiAodm0tPnZhdHBpdCk7Cit9CisKK3N0cnVjdCB2cG10bXIg
Kgordm1fcG10bXIoc3RydWN0IHZtICp2bSkKK3sKKworCXJldHVybiAodm0tPnZwbXRtcik7Cit9
CisKK3N0cnVjdCB2cnRjICoKK3ZtX3J0YyhzdHJ1Y3Qgdm0gKnZtKQoreworCisJcmV0dXJuICh2
bS0+dnJ0Yyk7Cit9CisKK2VudW0gdm1fcmVnX25hbWUKK3ZtX3NlZ21lbnRfbmFtZShpbnQgc2Vn
KQoreworCXN0YXRpYyBlbnVtIHZtX3JlZ19uYW1lIHNlZ19uYW1lc1tdID0geworCQlWTV9SRUdf
R1VFU1RfRVMsCisJCVZNX1JFR19HVUVTVF9DUywKKwkJVk1fUkVHX0dVRVNUX1NTLAorCQlWTV9S
RUdfR1VFU1RfRFMsCisJCVZNX1JFR19HVUVTVF9GUywKKwkJVk1fUkVHX0dVRVNUX0dTCisJfTsK
KworCUtBU1NFUlQoc2VnID49IDAgJiYgc2VnIDwgbml0ZW1zKHNlZ19uYW1lcyksCisJICAgICgi
JXM6IGludmFsaWQgc2VnbWVudCBlbmNvZGluZyAlZCIsIF9fZnVuY19fLCBzZWcpKTsKKwlyZXR1
cm4gKHNlZ19uYW1lc1tzZWddKTsKK30KKwordm9pZAordm1fY29weV90ZWFyZG93bihzdHJ1Y3Qg
dm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qgdm1fY29weWluZm8gKmNvcHlpbmZvLAorICAgIGlu
dCBudW1fY29weWluZm8pCit7CisJaW50IGlkeDsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgbnVt
X2NvcHlpbmZvOyBpZHgrKykgeworCQlpZiAoY29weWluZm9baWR4XS5jb29raWUgIT0gTlVMTCkK
KwkJCXZtX2dwYV9yZWxlYXNlKGNvcHlpbmZvW2lkeF0uY29va2llKTsKKwl9CisJYnplcm8oY29w
eWluZm8sIG51bV9jb3B5aW5mbyAqIHNpemVvZihzdHJ1Y3Qgdm1fY29weWluZm8pKTsKK30KKwor
aW50Cit2bV9jb3B5X3NldHVwKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIHN0cnVjdCB2bV9n
dWVzdF9wYWdpbmcgKnBhZ2luZywKKyAgICB1aW50NjRfdCBnbGEsIHNpemVfdCBsZW4sIGludCBw
cm90LCBzdHJ1Y3Qgdm1fY29weWluZm8gKmNvcHlpbmZvLAorICAgIGludCBudW1fY29weWluZm8s
IGludCAqZmF1bHQpCit7CisJaW50IGVycm9yLCBpZHgsIG51c2VkOworCXNpemVfdCBuLCBvZmYs
IHJlbWFpbmluZzsKKwl2b2lkICpodmEsICpjb29raWU7CisJdWludDY0X3QgZ3BhOworCisJYnpl
cm8oY29weWluZm8sIHNpemVvZihzdHJ1Y3Qgdm1fY29weWluZm8pICogbnVtX2NvcHlpbmZvKTsK
KworCW51c2VkID0gMDsKKwlyZW1haW5pbmcgPSBsZW47CisJd2hpbGUgKHJlbWFpbmluZyA+IDAp
IHsKKwkJS0FTU0VSVChudXNlZCA8IG51bV9jb3B5aW5mbywgKCJpbnN1ZmZpY2llbnQgdm1fY29w
eWluZm8iKSk7CisJCWVycm9yID0gdm1fZ2xhMmdwYSh2bSwgdmNwdWlkLCBwYWdpbmcsIGdsYSwg
cHJvdCwgJmdwYSwgZmF1bHQpOworCQlpZiAoZXJyb3IgfHwgKmZhdWx0KQorCQkJcmV0dXJuIChl
cnJvcik7CisJCW9mZiA9IGdwYSAmIFBBR0VfTUFTSzsKKwkJbiA9IG1pbihyZW1haW5pbmcsIFBB
R0VfU0laRSAtIG9mZik7CisJCWNvcHlpbmZvW251c2VkXS5ncGEgPSBncGE7CisJCWNvcHlpbmZv
W251c2VkXS5sZW4gPSBuOworCQlyZW1haW5pbmcgLT0gbjsKKwkJZ2xhICs9IG47CisJCW51c2Vk
Kys7CisJfQorCisJZm9yIChpZHggPSAwOyBpZHggPCBudXNlZDsgaWR4KyspIHsKKwkJaHZhID0g
dm1fZ3BhX2hvbGQodm0sIHZjcHVpZCwgY29weWluZm9baWR4XS5ncGEsCisJCSAgICBjb3B5aW5m
b1tpZHhdLmxlbiwgcHJvdCwgJmNvb2tpZSk7CisJCWlmIChodmEgPT0gTlVMTCkKKwkJCWJyZWFr
OworCQljb3B5aW5mb1tpZHhdLmh2YSA9IGh2YTsKKwkJY29weWluZm9baWR4XS5jb29raWUgPSBj
b29raWU7CisJfQorCisJaWYgKGlkeCAhPSBudXNlZCkgeworCQl2bV9jb3B5X3RlYXJkb3duKHZt
LCB2Y3B1aWQsIGNvcHlpbmZvLCBudW1fY29weWluZm8pOworCQlyZXR1cm4gKEVGQVVMVCk7CisJ
fSBlbHNlIHsKKwkJKmZhdWx0ID0gMDsKKwkJcmV0dXJuICgwKTsKKwl9Cit9CisKK3ZvaWQKK3Zt
X2NvcHlpbihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qgdm1fY29weWluZm8gKmNv
cHlpbmZvLCB2b2lkICprYWRkciwKKyAgICBzaXplX3QgbGVuKQoreworCWNoYXIgKmRzdDsKKwlp
bnQgaWR4OworCQorCWRzdCA9IGthZGRyOworCWlkeCA9IDA7CisJd2hpbGUgKGxlbiA+IDApIHsK
KwkJYmNvcHkoY29weWluZm9baWR4XS5odmEsIGRzdCwgY29weWluZm9baWR4XS5sZW4pOworCQls
ZW4gLT0gY29weWluZm9baWR4XS5sZW47CisJCWRzdCArPSBjb3B5aW5mb1tpZHhdLmxlbjsKKwkJ
aWR4Kys7CisJfQorfQorCit2b2lkCit2bV9jb3B5b3V0KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1
aWQsIGNvbnN0IHZvaWQgKmthZGRyLAorICAgIHN0cnVjdCB2bV9jb3B5aW5mbyAqY29weWluZm8s
IHNpemVfdCBsZW4pCit7CisJY29uc3QgY2hhciAqc3JjOworCWludCBpZHg7CisKKwlzcmMgPSBr
YWRkcjsKKwlpZHggPSAwOworCXdoaWxlIChsZW4gPiAwKSB7CisJCWJjb3B5KHNyYywgY29weWlu
Zm9baWR4XS5odmEsIGNvcHlpbmZvW2lkeF0ubGVuKTsKKwkJbGVuIC09IGNvcHlpbmZvW2lkeF0u
bGVuOworCQlzcmMgKz0gY29weWluZm9baWR4XS5sZW47CisJCWlkeCsrOworCX0KK30KKworLyoK
KyAqIFJldHVybiB0aGUgYW1vdW50IG9mIGluLXVzZSBhbmQgd2lyZWQgbWVtb3J5IGZvciB0aGUg
Vk0uIFNpbmNlCisgKiB0aGVzZSBhcmUgZ2xvYmFsIHN0YXRzLCBvbmx5IHJldHVybiB0aGUgdmFs
dWVzIHdpdGggZm9yIHZDUFUgMAorICovCitWTU1fU1RBVF9ERUNMQVJFKFZNTV9NRU1fUkVTSURF
TlQpOworVk1NX1NUQVRfREVDTEFSRShWTU1fTUVNX1dJUkVEKTsKKworc3RhdGljIHZvaWQKK3Zt
X2dldF9yZXNjbnQoc3RydWN0IHZtICp2bSwgaW50IHZjcHUsIHN0cnVjdCB2bW1fc3RhdF90eXBl
ICpzdGF0KQoreworCisJaWYgKHZjcHUgPT0gMCkgeworCQl2bW1fc3RhdF9zZXQodm0sIHZjcHUs
IFZNTV9NRU1fUkVTSURFTlQsCisJICAgICAgIAkgICAgUEFHRV9TSVpFICogdm1zcGFjZV9yZXNp
ZGVudF9jb3VudCh2bS0+dm1zcGFjZSkpOworCX0JCit9CisKK3N0YXRpYyB2b2lkCit2bV9nZXRf
d2lyZWRjbnQoc3RydWN0IHZtICp2bSwgaW50IHZjcHUsIHN0cnVjdCB2bW1fc3RhdF90eXBlICpz
dGF0KQoreworCisJaWYgKHZjcHUgPT0gMCkgeworCQl2bW1fc3RhdF9zZXQodm0sIHZjcHUsIFZN
TV9NRU1fV0lSRUQsCisJICAgICAgCSAgICBQQUdFX1NJWkUgKiBwbWFwX3dpcmVkX2NvdW50KHZt
c3BhY2VfcG1hcCh2bS0+dm1zcGFjZSkpKTsKKwl9CQorfQorCitWTU1fU1RBVF9GVU5DKFZNTV9N
RU1fUkVTSURFTlQsICJSZXNpZGVudCBtZW1vcnkiLCB2bV9nZXRfcmVzY250KTsKK1ZNTV9TVEFU
X0ZVTkMoVk1NX01FTV9XSVJFRCwgIldpcmVkIG1lbW9yeSIsIHZtX2dldF93aXJlZGNudCk7CmRp
ZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV9kZXYuYyAvdXNyL3NyYy9zeXMv
YW1kNjQvdm1tL3ZtbV9kZXYuYwotLS0gdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV9kZXYuYwky
MDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2FtZDY0
L3ZtbS92bW1fZGV2LmMJMjAxNi0xMS0zMCAxMDo1NjowNS43OTI3NDUwMDAgKzAwMDAKQEAgLTU1
LDYgKzU1LDcgQEAKICNpbmNsdWRlICJ2bW1fbGFwaWMuaCIKICNpbmNsdWRlICJ2bW1fc3RhdC5o
IgogI2luY2x1ZGUgInZtbV9tZW0uaCIKKyNpbmNsdWRlICJ2bW1faW9wb3J0LmgiCiAjaW5jbHVk
ZSAiaW8vcHB0LmgiCiAjaW5jbHVkZSAiaW8vdmF0cGljLmgiCiAjaW5jbHVkZSAiaW8vdmlvYXBp
Yy5oIgpAQCAtMzAwLDYgKzMwMSw4IEBACiAJc3RydWN0IHZtX3BwdGRldl9tbWlvICpwcHRtbWlv
OwogCXN0cnVjdCB2bV9wcHRkZXZfbXNpICpwcHRtc2k7CiAJc3RydWN0IHZtX3BwdGRldl9tc2l4
ICpwcHRtc2l4OworCXN0cnVjdCB2bV91c2VyX2J1ZiAqdXNlcm1lbTsKKwlzdHJ1Y3Qgdm1faW9f
cmVnX2hhbmRsZXIgKmlvcmVnaDsKIAlzdHJ1Y3Qgdm1fbm1pICp2bW5taTsKIAlzdHJ1Y3Qgdm1f
c3RhdHMgKnZtc3RhdHM7CiAJc3RydWN0IHZtX3N0YXRfZGVzYyAqc3RhdGRlc2M7CkBAIC0zNTgs
NiArMzYxLDcgQEAKIAljYXNlIFZNX1VOQklORF9QUFRERVY6CiAJY2FzZSBWTV9BTExPQ19NRU1T
RUc6CiAJY2FzZSBWTV9NTUFQX01FTVNFRzoKKwljYXNlIFZNX01BUF9VU0VSX0JVRjoKIAljYXNl
IFZNX1JFSU5JVDoKIAkJLyoKIAkJICogaW9jdGxzIHRoYXQgb3BlcmF0ZSBvbiB0aGUgZW50aXJl
IHZpcnR1YWwgbWFjaGluZSBtdXN0CkBAIC00MzMsNiArNDM3LDE2IEBACiAJCQkJICAgICBwcHRt
bWlvLT5mdW5jLCBwcHRtbWlvLT5ncGEsIHBwdG1taW8tPmxlbiwKIAkJCQkgICAgIHBwdG1taW8t
PmhwYSk7CiAJCWJyZWFrOworCWNhc2UgVk1fTUFQX1VTRVJfQlVGOgorCQl1c2VybWVtID0gKHN0
cnVjdCB2bV91c2VyX2J1ZiAqKWRhdGE7CisJCWVycm9yID0gdm1fbWFwX3VzZXJtZW0oc2MtPnZt
LCB1c2VybWVtLT5ncGEsIHVzZXJtZW0tPmxlbiwKKwkJCQkJdXNlcm1lbS0+YWRkciwgdGQpOwor
CQlicmVhazsKKwljYXNlIFZNX0lPX1JFR19IQU5ETEVSOgorCQlpb3JlZ2ggPSAoc3RydWN0IHZt
X2lvX3JlZ19oYW5kbGVyICopZGF0YTsKKwkJZXJyb3IgPSB2bW1faW9wb3J0X3JlZ19oYW5kbGVy
KHNjLT52bSwgaW9yZWdoLT5wb3J0LCBpb3JlZ2gtPmluLCBpb3JlZ2gtPm1hc2tfZGF0YSwKKwkJ
CQkJaW9yZWdoLT5kYXRhLCBpb3JlZ2gtPnR5cGUsIGlvcmVnaC0+YXJnKTsKKwkJYnJlYWs7CiAJ
Y2FzZSBWTV9CSU5EX1BQVERFVjoKIAkJcHB0ZGV2ID0gKHN0cnVjdCB2bV9wcHRkZXYgKilkYXRh
OwogCQllcnJvciA9IHZtX2Fzc2lnbl9wcHRkZXYoc2MtPnZtLCBwcHRkZXYtPmJ1cywgcHB0ZGV2
LT5zbG90LApkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2FtZDY0L3ZtbS92bW1fZGV2LmMub3Jp
ZyAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV9kZXYuYy5vcmlnCi0tLSB1c3Ivc3JjL3N5cy9h
bWQ2NC92bW0vdm1tX2Rldi5jLm9yaWcJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx
MDAKKysrIC91c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX2Rldi5jLm9yaWcJMjAxNi0xMS0zMCAx
MDo1Mjo1OC40NTkwMTYwMDAgKzAwMDAKQEAgLTAsMCArMSw5ODMgQEAKKy8qLQorICogQ29weXJp
Z2h0IChjKSAyMDExIE5ldEFwcCwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE5FVEFQUCwgSU5DIGBgQVMg
SVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgTkVUQVBQLCBJTkMgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisg
KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5n
LzExLjAvc3lzL2FtZDY0L3ZtbS92bW1fZGV2LmMgMjg1MjE4IDIwMTUtMDctMDYgMTk6NDE6NDNa
IG5lZWwgJAorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJT
RDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L3ZtbS92bW1fZGV2LmMgMjg1MjE4IDIwMTUtMDctMDYg
MTk6NDE6NDNaIG5lZWwgJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8
c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2luY2x1ZGUgPHN5cy9sb2Nr
Lmg+CisjaW5jbHVkZSA8c3lzL211dGV4Lmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2lu
Y2x1ZGUgPHN5cy9jb25mLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPHN5
cy9saWJrZXJuLmg+CisjaW5jbHVkZSA8c3lzL2lvY2NvbS5oPgorI2luY2x1ZGUgPHN5cy9tbWFu
Lmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgorCisjaW5jbHVkZSA8dm0vdm0uaD4KKyNpbmNsdWRl
IDx2bS9wbWFwLmg+CisjaW5jbHVkZSA8dm0vdm1fbWFwLmg+CisjaW5jbHVkZSA8dm0vdm1fb2Jq
ZWN0Lmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL3ZtcGFyYW0uaD4KKyNpbmNsdWRlIDxtYWNoaW5l
L3ZtbS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvdm1tX2luc3RydWN0aW9uX2VtdWwuaD4KKyNpbmNs
dWRlIDxtYWNoaW5lL3ZtbV9kZXYuaD4KKworI2luY2x1ZGUgInZtbV9sYXBpYy5oIgorI2luY2x1
ZGUgInZtbV9zdGF0LmgiCisjaW5jbHVkZSAidm1tX21lbS5oIgorI2luY2x1ZGUgImlvL3BwdC5o
IgorI2luY2x1ZGUgImlvL3ZhdHBpYy5oIgorI2luY2x1ZGUgImlvL3Zpb2FwaWMuaCIKKyNpbmNs
dWRlICJpby92aHBldC5oIgorI2luY2x1ZGUgImlvL3ZydGMuaCIKKworc3RydWN0IGRldm1lbV9z
b2Z0YyB7CisJaW50CXNlZ2lkOworCWNoYXIJKm5hbWU7CisJc3RydWN0IGNkZXYgKmNkZXY7CisJ
c3RydWN0IHZtbWRldl9zb2Z0YyAqc2M7CisJU0xJU1RfRU5UUlkoZGV2bWVtX3NvZnRjKSBsaW5r
OworfTsKKworc3RydWN0IHZtbWRldl9zb2Z0YyB7CisJc3RydWN0IHZtCSp2bTsJCS8qIHZtIGlu
c3RhbmNlIGNvb2tpZSAqLworCXN0cnVjdCBjZGV2CSpjZGV2OworCVNMSVNUX0VOVFJZKHZtbWRl
dl9zb2Z0YykgbGluazsKKwlTTElTVF9IRUFEKCwgZGV2bWVtX3NvZnRjKSBkZXZtZW07CisJaW50
CQlmbGFnczsKK307CisjZGVmaW5lCVZTQ19MSU5LRUQJCTB4MDEKKworc3RhdGljIFNMSVNUX0hF
QUQoLCB2bW1kZXZfc29mdGMpIGhlYWQ7CisKK3N0YXRpYyBzdHJ1Y3QgbXR4IHZtbWRldl9tdHg7
CisKK3N0YXRpYyBNQUxMT0NfREVGSU5FKE1fVk1NREVWLCAidm1tZGV2IiwgInZtbWRldiIpOwor
CitTWVNDVExfREVDTChfaHdfdm1tKTsKKworc3RhdGljIGludCBkZXZtZW1fY3JlYXRlX2NkZXYo
Y29uc3QgY2hhciAqdm1uYW1lLCBpbnQgaWQsIGNoYXIgKmRldm1lbSk7CitzdGF0aWMgdm9pZCBk
ZXZtZW1fZGVzdHJveSh2b2lkICphcmcpOworCitzdGF0aWMgaW50Cit2Y3B1X2xvY2tfb25lKHN0
cnVjdCB2bW1kZXZfc29mdGMgKnNjLCBpbnQgdmNwdSkKK3sKKwlpbnQgZXJyb3I7CisKKwlpZiAo
dmNwdSA8IDAgfHwgdmNwdSA+PSBWTV9NQVhDUFUpCisJCXJldHVybiAoRUlOVkFMKTsKKworCWVy
cm9yID0gdmNwdV9zZXRfc3RhdGUoc2MtPnZtLCB2Y3B1LCBWQ1BVX0ZST1pFTiwgdHJ1ZSk7CisJ
cmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkCit2Y3B1X3VubG9ja19vbmUoc3RydWN0
IHZtbWRldl9zb2Z0YyAqc2MsIGludCB2Y3B1KQoreworCWVudW0gdmNwdV9zdGF0ZSBzdGF0ZTsK
KworCXN0YXRlID0gdmNwdV9nZXRfc3RhdGUoc2MtPnZtLCB2Y3B1LCBOVUxMKTsKKwlpZiAoc3Rh
dGUgIT0gVkNQVV9GUk9aRU4pIHsKKwkJcGFuaWMoInZjcHUgJXMoJWQpIGhhcyBpbnZhbGlkIHN0
YXRlICVkIiwgdm1fbmFtZShzYy0+dm0pLAorCQkgICAgdmNwdSwgc3RhdGUpOworCX0KKworCXZj
cHVfc2V0X3N0YXRlKHNjLT52bSwgdmNwdSwgVkNQVV9JRExFLCBmYWxzZSk7Cit9CisKK3N0YXRp
YyBpbnQKK3ZjcHVfbG9ja19hbGwoc3RydWN0IHZtbWRldl9zb2Z0YyAqc2MpCit7CisJaW50IGVy
cm9yLCB2Y3B1OworCisJZm9yICh2Y3B1ID0gMDsgdmNwdSA8IFZNX01BWENQVTsgdmNwdSsrKSB7
CisJCWVycm9yID0gdmNwdV9sb2NrX29uZShzYywgdmNwdSk7CisJCWlmIChlcnJvcikKKwkJCWJy
ZWFrOworCX0KKworCWlmIChlcnJvcikgeworCQl3aGlsZSAoLS12Y3B1ID49IDApCisJCQl2Y3B1
X3VubG9ja19vbmUoc2MsIHZjcHUpOworCX0KKworCXJldHVybiAoZXJyb3IpOworfQorCitzdGF0
aWMgdm9pZAordmNwdV91bmxvY2tfYWxsKHN0cnVjdCB2bW1kZXZfc29mdGMgKnNjKQoreworCWlu
dCB2Y3B1OworCisJZm9yICh2Y3B1ID0gMDsgdmNwdSA8IFZNX01BWENQVTsgdmNwdSsrKQorCQl2
Y3B1X3VubG9ja19vbmUoc2MsIHZjcHUpOworfQorCitzdGF0aWMgc3RydWN0IHZtbWRldl9zb2Z0
YyAqCit2bW1kZXZfbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHZtbWRldl9z
b2Z0YyAqc2M7CisKKyNpZmRlZiBub3R5ZXQJLyogWFhYIGtlcm5lbCBpcyBub3QgY29tcGlsZWQg
d2l0aCBpbnZhcmlhbnRzICovCisJbXR4X2Fzc2VydCgmdm1tZGV2X210eCwgTUFfT1dORUQpOwor
I2VuZGlmCisKKwlTTElTVF9GT1JFQUNIKHNjLCAmaGVhZCwgbGluaykgeworCQlpZiAoc3RyY21w
KG5hbWUsIHZtX25hbWUoc2MtPnZtKSkgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiAo
c2MpOworfQorCitzdGF0aWMgc3RydWN0IHZtbWRldl9zb2Z0YyAqCit2bW1kZXZfbG9va3VwMihz
dHJ1Y3QgY2RldiAqY2RldikKK3sKKworCXJldHVybiAoY2Rldi0+c2lfZHJ2MSk7Cit9CisKK3N0
YXRpYyBpbnQKK3ZtbWRldl9ydyhzdHJ1Y3QgY2RldiAqY2Rldiwgc3RydWN0IHVpbyAqdWlvLCBp
bnQgZmxhZ3MpCit7CisJaW50IGVycm9yLCBvZmYsIGMsIHByb3Q7CisJdm1fcGFkZHJfdCBncGE7
CisJdm9pZCAqaHBhLCAqY29va2llOworCXN0cnVjdCB2bW1kZXZfc29mdGMgKnNjOworCisJc2Mg
PSB2bW1kZXZfbG9va3VwMihjZGV2KTsKKwlpZiAoc2MgPT0gTlVMTCkKKwkJcmV0dXJuIChFTlhJ
Tyk7CisKKwkvKgorCSAqIEdldCBhIHJlYWQgbG9jayBvbiB0aGUgZ3Vlc3QgbWVtb3J5IG1hcCBi
eSBmcmVlemluZyBhbnkgdmNwdS4KKwkgKi8KKwllcnJvciA9IHZjcHVfbG9ja19vbmUoc2MsIFZN
X01BWENQVSAtIDEpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIChlcnJvcik7CisKKwlwcm90ID0g
KHVpby0+dWlvX3J3ID09IFVJT19XUklURSA/IFZNX1BST1RfV1JJVEUgOiBWTV9QUk9UX1JFQUQp
OworCXdoaWxlICh1aW8tPnVpb19yZXNpZCA+IDAgJiYgZXJyb3IgPT0gMCkgeworCQlncGEgPSB1
aW8tPnVpb19vZmZzZXQ7CisJCW9mZiA9IGdwYSAmIFBBR0VfTUFTSzsKKwkJYyA9IG1pbih1aW8t
PnVpb19yZXNpZCwgUEFHRV9TSVpFIC0gb2ZmKTsKKworCQkvKgorCQkgKiBUaGUgVk0gaGFzIGEg
aG9sZSBpbiBpdHMgcGh5c2ljYWwgbWVtb3J5IG1hcC4gSWYgd2Ugd2FudCB0bworCQkgKiB1c2Ug
J2RkJyB0byBpbnNwZWN0IG1lbW9yeSBiZXlvbmQgdGhlIGhvbGUgd2UgbmVlZCB0bworCQkgKiBw
cm92aWRlIGJvZ3VzIGRhdGEgZm9yIG1lbW9yeSB0aGF0IGxpZXMgaW4gdGhlIGhvbGUuCisJCSAq
CisJCSAqIFNpbmNlIHRoaXMgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgbHNlZWsoMiksIGRkKDEp
IHdpbGwKKwkJICogcmVhZCgyKSBibG9ja3Mgb2YgZGF0YSB0byBzaW11bGF0ZSB0aGUgbHNlZWso
MikuCisJCSAqLworCQlocGEgPSB2bV9ncGFfaG9sZChzYy0+dm0sIFZNX01BWENQVSAtIDEsIGdw
YSwgYywgcHJvdCwgJmNvb2tpZSk7CisJCWlmIChocGEgPT0gTlVMTCkgeworCQkJaWYgKHVpby0+
dWlvX3J3ID09IFVJT19SRUFEKQorCQkJCWVycm9yID0gdWlvbW92ZShfX0RFQ09OU1Qodm9pZCAq
LCB6ZXJvX3JlZ2lvbiksCisJCQkJICAgIGMsIHVpbyk7CisJCQllbHNlCisJCQkJZXJyb3IgPSBF
RkFVTFQ7CisJCX0gZWxzZSB7CisJCQllcnJvciA9IHVpb21vdmUoaHBhLCBjLCB1aW8pOworCQkJ
dm1fZ3BhX3JlbGVhc2UoY29va2llKTsKKwkJfQorCX0KKwl2Y3B1X3VubG9ja19vbmUoc2MsIFZN
X01BWENQVSAtIDEpOworCXJldHVybiAoZXJyb3IpOworfQorCitDVEFTU0VSVChzaXplb2YoKChz
dHJ1Y3Qgdm1fbWVtc2VnICopMCktPm5hbWUpID49IFNQRUNOQU1FTEVOICsgMSk7CisKK3N0YXRp
YyBpbnQKK2dldF9tZW1zZWcoc3RydWN0IHZtbWRldl9zb2Z0YyAqc2MsIHN0cnVjdCB2bV9tZW1z
ZWcgKm1zZWcpCit7CisJc3RydWN0IGRldm1lbV9zb2Z0YyAqZHNjOworCWludCBlcnJvcjsKKwli
b29sIHN5c21lbTsKKworCWVycm9yID0gdm1fZ2V0X21lbXNlZyhzYy0+dm0sIG1zZWctPnNlZ2lk
LCAmbXNlZy0+bGVuLCAmc3lzbWVtLCBOVUxMKTsKKwlpZiAoZXJyb3IgfHwgbXNlZy0+bGVuID09
IDApCisJCXJldHVybiAoZXJyb3IpOworCisJaWYgKCFzeXNtZW0pIHsKKwkJU0xJU1RfRk9SRUFD
SChkc2MsICZzYy0+ZGV2bWVtLCBsaW5rKSB7CisJCQlpZiAoZHNjLT5zZWdpZCA9PSBtc2VnLT5z
ZWdpZCkKKwkJCQlicmVhazsKKwkJfQorCQlLQVNTRVJUKGRzYyAhPSBOVUxMLCAoIiVzOiBkZXZt
ZW0gc2VnbWVudCAlZCBub3QgZm91bmQiLAorCQkgICAgX19mdW5jX18sIG1zZWctPnNlZ2lkKSk7
CisJCWVycm9yID0gY29weXN0cihkc2MtPm5hbWUsIG1zZWctPm5hbWUsIFNQRUNOQU1FTEVOICsg
MSwgTlVMTCk7CisJfSBlbHNlIHsKKwkJYnplcm8obXNlZy0+bmFtZSwgc2l6ZW9mKG1zZWctPm5h
bWUpKTsKKwl9CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGljIGludAorYWxsb2NfbWVt
c2VnKHN0cnVjdCB2bW1kZXZfc29mdGMgKnNjLCBzdHJ1Y3Qgdm1fbWVtc2VnICptc2VnKQorewor
CWNoYXIgKm5hbWU7CisJaW50IGVycm9yOworCWJvb2wgc3lzbWVtOworCisJZXJyb3IgPSAwOwor
CW5hbWUgPSBOVUxMOworCXN5c21lbSA9IHRydWU7CisKKwlpZiAoVk1fTUVNU0VHX05BTUUobXNl
ZykpIHsKKwkJc3lzbWVtID0gZmFsc2U7CisJCW5hbWUgPSBtYWxsb2MoU1BFQ05BTUVMRU4gKyAx
LCBNX1ZNTURFViwgTV9XQUlUT0spOworCQllcnJvciA9IGNvcHlzdHIoVk1fTUVNU0VHX05BTUUo
bXNlZyksIG5hbWUsIFNQRUNOQU1FTEVOICsgMSwgMCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8g
ZG9uZTsKKwl9CisKKwllcnJvciA9IHZtX2FsbG9jX21lbXNlZyhzYy0+dm0sIG1zZWctPnNlZ2lk
LCBtc2VnLT5sZW4sIHN5c21lbSk7CisJaWYgKGVycm9yKQorCQlnb3RvIGRvbmU7CisKKwlpZiAo
Vk1fTUVNU0VHX05BTUUobXNlZykpIHsKKwkJZXJyb3IgPSBkZXZtZW1fY3JlYXRlX2NkZXYodm1f
bmFtZShzYy0+dm0pLCBtc2VnLT5zZWdpZCwgbmFtZSk7CisJCWlmIChlcnJvcikKKwkJCXZtX2Zy
ZWVfbWVtc2VnKHNjLT52bSwgbXNlZy0+c2VnaWQpOworCQllbHNlCisJCQluYW1lID0gTlVMTDsJ
LyogZnJlZWQgd2hlbiAnY2RldicgaXMgZGVzdHJveWVkICovCisJfQorZG9uZToKKwlmcmVlKG5h
bWUsIE1fVk1NREVWKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGljIGludAordm1tZGV2
X2lvY3RsKHN0cnVjdCBjZGV2ICpjZGV2LCB1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEsIGludCBm
ZmxhZywKKwkgICAgIHN0cnVjdCB0aHJlYWQgKnRkKQoreworCWludCBlcnJvciwgdmNwdSwgc3Rh
dGVfY2hhbmdlZCwgc2l6ZTsKKwljcHVzZXRfdCAqY3B1c2V0OworCXN0cnVjdCB2bW1kZXZfc29m
dGMgKnNjOworCXN0cnVjdCB2bV9yZWdpc3RlciAqdm1yZWc7CisJc3RydWN0IHZtX3NlZ19kZXNj
ICp2bXNlZ2Rlc2M7CisJc3RydWN0IHZtX3J1biAqdm1ydW47CisJc3RydWN0IHZtX2V4Y2VwdGlv
biAqdm1leGM7CisJc3RydWN0IHZtX2xhcGljX2lycSAqdm1pcnE7CisJc3RydWN0IHZtX2xhcGlj
X21zaSAqdm1tc2k7CisJc3RydWN0IHZtX2lvYXBpY19pcnEgKmlvYXBpY19pcnE7CisJc3RydWN0
IHZtX2lzYV9pcnEgKmlzYV9pcnE7CisJc3RydWN0IHZtX2lzYV9pcnFfdHJpZ2dlciAqaXNhX2ly
cV90cmlnZ2VyOworCXN0cnVjdCB2bV9jYXBhYmlsaXR5ICp2bWNhcDsKKwlzdHJ1Y3Qgdm1fcHB0
ZGV2ICpwcHRkZXY7CisJc3RydWN0IHZtX3BwdGRldl9tbWlvICpwcHRtbWlvOworCXN0cnVjdCB2
bV9wcHRkZXZfbXNpICpwcHRtc2k7CisJc3RydWN0IHZtX3BwdGRldl9tc2l4ICpwcHRtc2l4Owor
CXN0cnVjdCB2bV9ubWkgKnZtbm1pOworCXN0cnVjdCB2bV9zdGF0cyAqdm1zdGF0czsKKwlzdHJ1
Y3Qgdm1fc3RhdF9kZXNjICpzdGF0ZGVzYzsKKwlzdHJ1Y3Qgdm1feDJhcGljICp4MmFwaWM7CisJ
c3RydWN0IHZtX2dwYV9wdGUgKmdwYXB0ZTsKKwlzdHJ1Y3Qgdm1fc3VzcGVuZCAqdm1zdXNwZW5k
OworCXN0cnVjdCB2bV9nbGEyZ3BhICpnZzsKKwlzdHJ1Y3Qgdm1fYWN0aXZhdGVfY3B1ICp2YWM7
CisJc3RydWN0IHZtX2NwdXNldCAqdm1fY3B1c2V0OworCXN0cnVjdCB2bV9pbnRpbmZvICp2bWlp
OworCXN0cnVjdCB2bV9ydGNfdGltZSAqcnRjdGltZTsKKwlzdHJ1Y3Qgdm1fcnRjX2RhdGEgKnJ0
Y2RhdGE7CisJc3RydWN0IHZtX21lbW1hcCAqbW07CisKKwlzYyA9IHZtbWRldl9sb29rdXAyKGNk
ZXYpOworCWlmIChzYyA9PSBOVUxMKQorCQlyZXR1cm4gKEVOWElPKTsKKworCWVycm9yID0gMDsK
Kwl2Y3B1ID0gLTE7CisJc3RhdGVfY2hhbmdlZCA9IDA7CisKKwkvKgorCSAqIFNvbWUgVk1NIGlv
Y3RscyBjYW4gb3BlcmF0ZSBvbmx5IG9uIHZjcHVzIHRoYXQgYXJlIG5vdCBydW5uaW5nLgorCSAq
LworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWTV9SVU46CisJY2FzZSBWTV9HRVRfUkVHSVNURVI6
CisJY2FzZSBWTV9TRVRfUkVHSVNURVI6CisJY2FzZSBWTV9HRVRfU0VHTUVOVF9ERVNDUklQVE9S
OgorCWNhc2UgVk1fU0VUX1NFR01FTlRfREVTQ1JJUFRPUjoKKwljYXNlIFZNX0lOSkVDVF9FWENF
UFRJT046CisJY2FzZSBWTV9HRVRfQ0FQQUJJTElUWToKKwljYXNlIFZNX1NFVF9DQVBBQklMSVRZ
OgorCWNhc2UgVk1fUFBUREVWX01TSToKKwljYXNlIFZNX1BQVERFVl9NU0lYOgorCWNhc2UgVk1f
U0VUX1gyQVBJQ19TVEFURToKKwljYXNlIFZNX0dMQTJHUEE6CisJY2FzZSBWTV9BQ1RJVkFURV9D
UFU6CisJY2FzZSBWTV9TRVRfSU5USU5GTzoKKwljYXNlIFZNX0dFVF9JTlRJTkZPOgorCWNhc2Ug
Vk1fUkVTVEFSVF9JTlNUUlVDVElPTjoKKwkJLyoKKwkJICogWFhYIGZyYWdpbGUsIGhhbmRsZSB3
aXRoIGNhcmUKKwkJICogQXNzdW1lcyB0aGF0IHRoZSBmaXJzdCBmaWVsZCBvZiB0aGUgaW9jdGwg
ZGF0YSBpcyB0aGUgdmNwdS4KKwkJICovCisJCXZjcHUgPSAqKGludCAqKWRhdGE7CisJCWVycm9y
ID0gdmNwdV9sb2NrX29uZShzYywgdmNwdSk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gZG9uZTsK
KwkJc3RhdGVfY2hhbmdlZCA9IDE7CisJCWJyZWFrOworCisJY2FzZSBWTV9NQVBfUFBUREVWX01N
SU86CisJY2FzZSBWTV9CSU5EX1BQVERFVjoKKwljYXNlIFZNX1VOQklORF9QUFRERVY6CisJY2Fz
ZSBWTV9BTExPQ19NRU1TRUc6CisJY2FzZSBWTV9NTUFQX01FTVNFRzoKKwljYXNlIFZNX1JFSU5J
VDoKKwkJLyoKKwkJICogaW9jdGxzIHRoYXQgb3BlcmF0ZSBvbiB0aGUgZW50aXJlIHZpcnR1YWwg
bWFjaGluZSBtdXN0CisJCSAqIHByZXZlbnQgYWxsIHZjcHVzIGZyb20gcnVubmluZy4KKwkJICov
CisJCWVycm9yID0gdmNwdV9sb2NrX2FsbChzYyk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gZG9u
ZTsKKwkJc3RhdGVfY2hhbmdlZCA9IDI7CisJCWJyZWFrOworCisJY2FzZSBWTV9HRVRfTUVNU0VH
OgorCWNhc2UgVk1fTU1BUF9HRVRORVhUOgorCQkvKgorCQkgKiBMb2NrIGEgdmNwdSB0byBtYWtl
IHN1cmUgdGhhdCB0aGUgbWVtb3J5IG1hcCBjYW5ub3QgYmUKKwkJICogbW9kaWZpZWQgd2hpbGUg
aXQgaXMgYmVpbmcgaW5zcGVjdGVkLgorCQkgKi8KKwkJdmNwdSA9IFZNX01BWENQVSAtIDE7CisJ
CWVycm9yID0gdmNwdV9sb2NrX29uZShzYywgdmNwdSk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8g
ZG9uZTsKKwkJc3RhdGVfY2hhbmdlZCA9IDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJl
YWs7CisJfQorCisJc3dpdGNoKGNtZCkgeworCWNhc2UgVk1fUlVOOgorCQl2bXJ1biA9IChzdHJ1
Y3Qgdm1fcnVuICopZGF0YTsKKwkJZXJyb3IgPSB2bV9ydW4oc2MtPnZtLCB2bXJ1bik7CisJCWJy
ZWFrOworCWNhc2UgVk1fU1VTUEVORDoKKwkJdm1zdXNwZW5kID0gKHN0cnVjdCB2bV9zdXNwZW5k
ICopZGF0YTsKKwkJZXJyb3IgPSB2bV9zdXNwZW5kKHNjLT52bSwgdm1zdXNwZW5kLT5ob3cpOwor
CQlicmVhazsKKwljYXNlIFZNX1JFSU5JVDoKKwkJZXJyb3IgPSB2bV9yZWluaXQoc2MtPnZtKTsK
KwkJYnJlYWs7CisJY2FzZSBWTV9TVEFUX0RFU0M6IHsKKwkJc3RhdGRlc2MgPSAoc3RydWN0IHZt
X3N0YXRfZGVzYyAqKWRhdGE7CisJCWVycm9yID0gdm1tX3N0YXRfZGVzY19jb3B5KHN0YXRkZXNj
LT5pbmRleCwKKwkJCQkJc3RhdGRlc2MtPmRlc2MsIHNpemVvZihzdGF0ZGVzYy0+ZGVzYykpOwor
CQlicmVhazsKKwl9CisJY2FzZSBWTV9TVEFUUzogeworCQlDVEFTU0VSVChNQVhfVk1fU1RBVFMg
Pj0gTUFYX1ZNTV9TVEFUX0VMRU1TKTsKKwkJdm1zdGF0cyA9IChzdHJ1Y3Qgdm1fc3RhdHMgKilk
YXRhOworCQlnZXRtaWNyb3RpbWUoJnZtc3RhdHMtPnR2KTsKKwkJZXJyb3IgPSB2bW1fc3RhdF9j
b3B5KHNjLT52bSwgdm1zdGF0cy0+Y3B1aWQsCisJCQkJICAgICAgJnZtc3RhdHMtPm51bV9lbnRy
aWVzLCB2bXN0YXRzLT5zdGF0YnVmKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVk1fUFBUREVWX01T
SToKKwkJcHB0bXNpID0gKHN0cnVjdCB2bV9wcHRkZXZfbXNpICopZGF0YTsKKwkJZXJyb3IgPSBw
cHRfc2V0dXBfbXNpKHNjLT52bSwgcHB0bXNpLT52Y3B1LAorCQkJCSAgICAgIHBwdG1zaS0+YnVz
LCBwcHRtc2ktPnNsb3QsIHBwdG1zaS0+ZnVuYywKKwkJCQkgICAgICBwcHRtc2ktPmFkZHIsIHBw
dG1zaS0+bXNnLAorCQkJCSAgICAgIHBwdG1zaS0+bnVtdmVjKTsKKwkJYnJlYWs7CisJY2FzZSBW
TV9QUFRERVZfTVNJWDoKKwkJcHB0bXNpeCA9IChzdHJ1Y3Qgdm1fcHB0ZGV2X21zaXggKilkYXRh
OworCQllcnJvciA9IHBwdF9zZXR1cF9tc2l4KHNjLT52bSwgcHB0bXNpeC0+dmNwdSwKKwkJCQkg
ICAgICAgcHB0bXNpeC0+YnVzLCBwcHRtc2l4LT5zbG90LCAKKwkJCQkgICAgICAgcHB0bXNpeC0+
ZnVuYywgcHB0bXNpeC0+aWR4LAorCQkJCSAgICAgICBwcHRtc2l4LT5hZGRyLCBwcHRtc2l4LT5t
c2csCisJCQkJICAgICAgIHBwdG1zaXgtPnZlY3Rvcl9jb250cm9sKTsKKwkJYnJlYWs7CisJY2Fz
ZSBWTV9NQVBfUFBUREVWX01NSU86CisJCXBwdG1taW8gPSAoc3RydWN0IHZtX3BwdGRldl9tbWlv
ICopZGF0YTsKKwkJZXJyb3IgPSBwcHRfbWFwX21taW8oc2MtPnZtLCBwcHRtbWlvLT5idXMsIHBw
dG1taW8tPnNsb3QsCisJCQkJICAgICBwcHRtbWlvLT5mdW5jLCBwcHRtbWlvLT5ncGEsIHBwdG1t
aW8tPmxlbiwKKwkJCQkgICAgIHBwdG1taW8tPmhwYSk7CisJCWJyZWFrOworCWNhc2UgVk1fQklO
RF9QUFRERVY6CisJCXBwdGRldiA9IChzdHJ1Y3Qgdm1fcHB0ZGV2ICopZGF0YTsKKwkJZXJyb3Ig
PSB2bV9hc3NpZ25fcHB0ZGV2KHNjLT52bSwgcHB0ZGV2LT5idXMsIHBwdGRldi0+c2xvdCwKKwkJ
CQkJIHBwdGRldi0+ZnVuYyk7CisJCWJyZWFrOworCWNhc2UgVk1fVU5CSU5EX1BQVERFVjoKKwkJ
cHB0ZGV2ID0gKHN0cnVjdCB2bV9wcHRkZXYgKilkYXRhOworCQllcnJvciA9IHZtX3VuYXNzaWdu
X3BwdGRldihzYy0+dm0sIHBwdGRldi0+YnVzLCBwcHRkZXYtPnNsb3QsCisJCQkJCSAgIHBwdGRl
di0+ZnVuYyk7CisJCWJyZWFrOworCWNhc2UgVk1fSU5KRUNUX0VYQ0VQVElPTjoKKwkJdm1leGMg
PSAoc3RydWN0IHZtX2V4Y2VwdGlvbiAqKWRhdGE7CisJCWVycm9yID0gdm1faW5qZWN0X2V4Y2Vw
dGlvbihzYy0+dm0sIHZtZXhjLT5jcHVpZCwKKwkJICAgIHZtZXhjLT52ZWN0b3IsIHZtZXhjLT5l
cnJvcl9jb2RlX3ZhbGlkLCB2bWV4Yy0+ZXJyb3JfY29kZSwKKwkJICAgIHZtZXhjLT5yZXN0YXJ0
X2luc3RydWN0aW9uKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9JTkpFQ1RfTk1JOgorCQl2bW5taSA9
IChzdHJ1Y3Qgdm1fbm1pICopZGF0YTsKKwkJZXJyb3IgPSB2bV9pbmplY3Rfbm1pKHNjLT52bSwg
dm1ubWktPmNwdWlkKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9MQVBJQ19JUlE6CisJCXZtaXJxID0g
KHN0cnVjdCB2bV9sYXBpY19pcnEgKilkYXRhOworCQllcnJvciA9IGxhcGljX2ludHJfZWRnZShz
Yy0+dm0sIHZtaXJxLT5jcHVpZCwgdm1pcnEtPnZlY3Rvcik7CisJCWJyZWFrOworCWNhc2UgVk1f
TEFQSUNfTE9DQUxfSVJROgorCQl2bWlycSA9IChzdHJ1Y3Qgdm1fbGFwaWNfaXJxICopZGF0YTsK
KwkJZXJyb3IgPSBsYXBpY19zZXRfbG9jYWxfaW50cihzYy0+dm0sIHZtaXJxLT5jcHVpZCwKKwkJ
ICAgIHZtaXJxLT52ZWN0b3IpOworCQlicmVhazsKKwljYXNlIFZNX0xBUElDX01TSToKKwkJdm1t
c2kgPSAoc3RydWN0IHZtX2xhcGljX21zaSAqKWRhdGE7CisJCWVycm9yID0gbGFwaWNfaW50cl9t
c2koc2MtPnZtLCB2bW1zaS0+YWRkciwgdm1tc2ktPm1zZyk7CisJCWJyZWFrOworCWNhc2UgVk1f
SU9BUElDX0FTU0VSVF9JUlE6CisJCWlvYXBpY19pcnEgPSAoc3RydWN0IHZtX2lvYXBpY19pcnEg
KilkYXRhOworCQllcnJvciA9IHZpb2FwaWNfYXNzZXJ0X2lycShzYy0+dm0sIGlvYXBpY19pcnEt
PmlycSk7CisJCWJyZWFrOworCWNhc2UgVk1fSU9BUElDX0RFQVNTRVJUX0lSUToKKwkJaW9hcGlj
X2lycSA9IChzdHJ1Y3Qgdm1faW9hcGljX2lycSAqKWRhdGE7CisJCWVycm9yID0gdmlvYXBpY19k
ZWFzc2VydF9pcnEoc2MtPnZtLCBpb2FwaWNfaXJxLT5pcnEpOworCQlicmVhazsKKwljYXNlIFZN
X0lPQVBJQ19QVUxTRV9JUlE6CisJCWlvYXBpY19pcnEgPSAoc3RydWN0IHZtX2lvYXBpY19pcnEg
KilkYXRhOworCQllcnJvciA9IHZpb2FwaWNfcHVsc2VfaXJxKHNjLT52bSwgaW9hcGljX2lycS0+
aXJxKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9JT0FQSUNfUElOQ09VTlQ6CisJCSooaW50ICopZGF0
YSA9IHZpb2FwaWNfcGluY291bnQoc2MtPnZtKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9JU0FfQVNT
RVJUX0lSUToKKwkJaXNhX2lycSA9IChzdHJ1Y3Qgdm1faXNhX2lycSAqKWRhdGE7CisJCWVycm9y
ID0gdmF0cGljX2Fzc2VydF9pcnEoc2MtPnZtLCBpc2FfaXJxLT5hdHBpY19pcnEpOworCQlpZiAo
ZXJyb3IgPT0gMCAmJiBpc2FfaXJxLT5pb2FwaWNfaXJxICE9IC0xKQorCQkJZXJyb3IgPSB2aW9h
cGljX2Fzc2VydF9pcnEoc2MtPnZtLAorCQkJICAgIGlzYV9pcnEtPmlvYXBpY19pcnEpOworCQli
cmVhazsKKwljYXNlIFZNX0lTQV9ERUFTU0VSVF9JUlE6CisJCWlzYV9pcnEgPSAoc3RydWN0IHZt
X2lzYV9pcnEgKilkYXRhOworCQllcnJvciA9IHZhdHBpY19kZWFzc2VydF9pcnEoc2MtPnZtLCBp
c2FfaXJxLT5hdHBpY19pcnEpOworCQlpZiAoZXJyb3IgPT0gMCAmJiBpc2FfaXJxLT5pb2FwaWNf
aXJxICE9IC0xKQorCQkJZXJyb3IgPSB2aW9hcGljX2RlYXNzZXJ0X2lycShzYy0+dm0sCisJCQkg
ICAgaXNhX2lycS0+aW9hcGljX2lycSk7CisJCWJyZWFrOworCWNhc2UgVk1fSVNBX1BVTFNFX0lS
UToKKwkJaXNhX2lycSA9IChzdHJ1Y3Qgdm1faXNhX2lycSAqKWRhdGE7CisJCWVycm9yID0gdmF0
cGljX3B1bHNlX2lycShzYy0+dm0sIGlzYV9pcnEtPmF0cGljX2lycSk7CisJCWlmIChlcnJvciA9
PSAwICYmIGlzYV9pcnEtPmlvYXBpY19pcnEgIT0gLTEpCisJCQllcnJvciA9IHZpb2FwaWNfcHVs
c2VfaXJxKHNjLT52bSwgaXNhX2lycS0+aW9hcGljX2lycSk7CisJCWJyZWFrOworCWNhc2UgVk1f
SVNBX1NFVF9JUlFfVFJJR0dFUjoKKwkJaXNhX2lycV90cmlnZ2VyID0gKHN0cnVjdCB2bV9pc2Ff
aXJxX3RyaWdnZXIgKilkYXRhOworCQllcnJvciA9IHZhdHBpY19zZXRfaXJxX3RyaWdnZXIoc2Mt
PnZtLAorCQkgICAgaXNhX2lycV90cmlnZ2VyLT5hdHBpY19pcnEsIGlzYV9pcnFfdHJpZ2dlci0+
dHJpZ2dlcik7CisJCWJyZWFrOworCWNhc2UgVk1fTU1BUF9HRVRORVhUOgorCQltbSA9IChzdHJ1
Y3Qgdm1fbWVtbWFwICopZGF0YTsKKwkJZXJyb3IgPSB2bV9tbWFwX2dldG5leHQoc2MtPnZtLCAm
bW0tPmdwYSwgJm1tLT5zZWdpZCwKKwkJICAgICZtbS0+c2Vnb2ZmLCAmbW0tPmxlbiwgJm1tLT5w
cm90LCAmbW0tPmZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9NTUFQX01FTVNFRzoKKwkJbW0g
PSAoc3RydWN0IHZtX21lbW1hcCAqKWRhdGE7CisJCWVycm9yID0gdm1fbW1hcF9tZW1zZWcoc2Mt
PnZtLCBtbS0+Z3BhLCBtbS0+c2VnaWQsIG1tLT5zZWdvZmYsCisJCSAgICBtbS0+bGVuLCBtbS0+
cHJvdCwgbW0tPmZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9BTExPQ19NRU1TRUc6CisJCWVy
cm9yID0gYWxsb2NfbWVtc2VnKHNjLCAoc3RydWN0IHZtX21lbXNlZyAqKWRhdGEpOworCQlicmVh
azsKKwljYXNlIFZNX0dFVF9NRU1TRUc6CisJCWVycm9yID0gZ2V0X21lbXNlZyhzYywgKHN0cnVj
dCB2bV9tZW1zZWcgKilkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9HRVRfUkVHSVNURVI6CisJ
CXZtcmVnID0gKHN0cnVjdCB2bV9yZWdpc3RlciAqKWRhdGE7CisJCWVycm9yID0gdm1fZ2V0X3Jl
Z2lzdGVyKHNjLT52bSwgdm1yZWctPmNwdWlkLCB2bXJlZy0+cmVnbnVtLAorCQkJCQkmdm1yZWct
PnJlZ3ZhbCk7CisJCWJyZWFrOworCWNhc2UgVk1fU0VUX1JFR0lTVEVSOgorCQl2bXJlZyA9IChz
dHJ1Y3Qgdm1fcmVnaXN0ZXIgKilkYXRhOworCQllcnJvciA9IHZtX3NldF9yZWdpc3RlcihzYy0+
dm0sIHZtcmVnLT5jcHVpZCwgdm1yZWctPnJlZ251bSwKKwkJCQkJdm1yZWctPnJlZ3ZhbCk7CisJ
CWJyZWFrOworCWNhc2UgVk1fU0VUX1NFR01FTlRfREVTQ1JJUFRPUjoKKwkJdm1zZWdkZXNjID0g
KHN0cnVjdCB2bV9zZWdfZGVzYyAqKWRhdGE7CisJCWVycm9yID0gdm1fc2V0X3NlZ19kZXNjKHNj
LT52bSwgdm1zZWdkZXNjLT5jcHVpZCwKKwkJCQkJdm1zZWdkZXNjLT5yZWdudW0sCisJCQkJCSZ2
bXNlZ2Rlc2MtPmRlc2MpOworCQlicmVhazsKKwljYXNlIFZNX0dFVF9TRUdNRU5UX0RFU0NSSVBU
T1I6CisJCXZtc2VnZGVzYyA9IChzdHJ1Y3Qgdm1fc2VnX2Rlc2MgKilkYXRhOworCQllcnJvciA9
IHZtX2dldF9zZWdfZGVzYyhzYy0+dm0sIHZtc2VnZGVzYy0+Y3B1aWQsCisJCQkJCXZtc2VnZGVz
Yy0+cmVnbnVtLAorCQkJCQkmdm1zZWdkZXNjLT5kZXNjKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9H
RVRfQ0FQQUJJTElUWToKKwkJdm1jYXAgPSAoc3RydWN0IHZtX2NhcGFiaWxpdHkgKilkYXRhOwor
CQllcnJvciA9IHZtX2dldF9jYXBhYmlsaXR5KHNjLT52bSwgdm1jYXAtPmNwdWlkLAorCQkJCQkg
IHZtY2FwLT5jYXB0eXBlLAorCQkJCQkgICZ2bWNhcC0+Y2FwdmFsKTsKKwkJYnJlYWs7CisJY2Fz
ZSBWTV9TRVRfQ0FQQUJJTElUWToKKwkJdm1jYXAgPSAoc3RydWN0IHZtX2NhcGFiaWxpdHkgKilk
YXRhOworCQllcnJvciA9IHZtX3NldF9jYXBhYmlsaXR5KHNjLT52bSwgdm1jYXAtPmNwdWlkLAor
CQkJCQkgIHZtY2FwLT5jYXB0eXBlLAorCQkJCQkgIHZtY2FwLT5jYXB2YWwpOworCQlicmVhazsK
KwljYXNlIFZNX1NFVF9YMkFQSUNfU1RBVEU6CisJCXgyYXBpYyA9IChzdHJ1Y3Qgdm1feDJhcGlj
ICopZGF0YTsKKwkJZXJyb3IgPSB2bV9zZXRfeDJhcGljX3N0YXRlKHNjLT52bSwKKwkJCQkJICAg
IHgyYXBpYy0+Y3B1aWQsIHgyYXBpYy0+c3RhdGUpOworCQlicmVhazsKKwljYXNlIFZNX0dFVF9Y
MkFQSUNfU1RBVEU6CisJCXgyYXBpYyA9IChzdHJ1Y3Qgdm1feDJhcGljICopZGF0YTsKKwkJZXJy
b3IgPSB2bV9nZXRfeDJhcGljX3N0YXRlKHNjLT52bSwKKwkJCQkJICAgIHgyYXBpYy0+Y3B1aWQs
ICZ4MmFwaWMtPnN0YXRlKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9HRVRfR1BBX1BNQVA6CisJCWdw
YXB0ZSA9IChzdHJ1Y3Qgdm1fZ3BhX3B0ZSAqKWRhdGE7CisJCXBtYXBfZ2V0X21hcHBpbmcodm1z
cGFjZV9wbWFwKHZtX2dldF92bXNwYWNlKHNjLT52bSkpLAorCQkJCSBncGFwdGUtPmdwYSwgZ3Bh
cHRlLT5wdGUsICZncGFwdGUtPnB0ZW51bSk7CisJCWVycm9yID0gMDsKKwkJYnJlYWs7CisJY2Fz
ZSBWTV9HRVRfSFBFVF9DQVBBQklMSVRJRVM6CisJCWVycm9yID0gdmhwZXRfZ2V0Y2FwKChzdHJ1
Y3Qgdm1faHBldF9jYXAgKilkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9HTEEyR1BBOiB7CisJ
CUNUQVNTRVJUKFBST1RfUkVBRCA9PSBWTV9QUk9UX1JFQUQpOworCQlDVEFTU0VSVChQUk9UX1dS
SVRFID09IFZNX1BST1RfV1JJVEUpOworCQlDVEFTU0VSVChQUk9UX0VYRUMgPT0gVk1fUFJPVF9F
WEVDVVRFKTsKKwkJZ2cgPSAoc3RydWN0IHZtX2dsYTJncGEgKilkYXRhOworCQllcnJvciA9IHZt
X2dsYTJncGEoc2MtPnZtLCBnZy0+dmNwdWlkLCAmZ2ctPnBhZ2luZywgZ2ctPmdsYSwKKwkJICAg
IGdnLT5wcm90LCAmZ2ctPmdwYSwgJmdnLT5mYXVsdCk7CisJCUtBU1NFUlQoZXJyb3IgPT0gMCB8
fCBlcnJvciA9PSBFRkFVTFQsCisJCSAgICAoIiVzOiB2bV9nbGEyZ3BhIHVua25vd24gZXJyb3Ig
JWQiLCBfX2Z1bmNfXywgZXJyb3IpKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVk1fQUNUSVZBVEVf
Q1BVOgorCQl2YWMgPSAoc3RydWN0IHZtX2FjdGl2YXRlX2NwdSAqKWRhdGE7CisJCWVycm9yID0g
dm1fYWN0aXZhdGVfY3B1KHNjLT52bSwgdmFjLT52Y3B1aWQpOworCQlicmVhazsKKwljYXNlIFZN
X0dFVF9DUFVTOgorCQllcnJvciA9IDA7CisJCXZtX2NwdXNldCA9IChzdHJ1Y3Qgdm1fY3B1c2V0
ICopZGF0YTsKKwkJc2l6ZSA9IHZtX2NwdXNldC0+Y3B1c2V0c2l6ZTsKKwkJaWYgKHNpemUgPCBz
aXplb2YoY3B1c2V0X3QpIHx8IHNpemUgPiBDUFVfTUFYU0laRSAvIE5CQlkpIHsKKwkJCWVycm9y
ID0gRVJBTkdFOworCQkJYnJlYWs7CisJCX0KKwkJY3B1c2V0ID0gbWFsbG9jKHNpemUsIE1fVEVN
UCwgTV9XQUlUT0sgfCBNX1pFUk8pOworCQlpZiAodm1fY3B1c2V0LT53aGljaCA9PSBWTV9BQ1RJ
VkVfQ1BVUykKKwkJCSpjcHVzZXQgPSB2bV9hY3RpdmVfY3B1cyhzYy0+dm0pOworCQllbHNlIGlm
ICh2bV9jcHVzZXQtPndoaWNoID09IFZNX1NVU1BFTkRFRF9DUFVTKQorCQkJKmNwdXNldCA9IHZt
X3N1c3BlbmRlZF9jcHVzKHNjLT52bSk7CisJCWVsc2UKKwkJCWVycm9yID0gRUlOVkFMOworCQlp
ZiAoZXJyb3IgPT0gMCkKKwkJCWVycm9yID0gY29weW91dChjcHVzZXQsIHZtX2NwdXNldC0+Y3B1
cywgc2l6ZSk7CisJCWZyZWUoY3B1c2V0LCBNX1RFTVApOworCQlicmVhazsKKwljYXNlIFZNX1NF
VF9JTlRJTkZPOgorCQl2bWlpID0gKHN0cnVjdCB2bV9pbnRpbmZvICopZGF0YTsKKwkJZXJyb3Ig
PSB2bV9leGl0X2ludGluZm8oc2MtPnZtLCB2bWlpLT52Y3B1aWQsIHZtaWktPmluZm8xKTsKKwkJ
YnJlYWs7CisJY2FzZSBWTV9HRVRfSU5USU5GTzoKKwkJdm1paSA9IChzdHJ1Y3Qgdm1faW50aW5m
byAqKWRhdGE7CisJCWVycm9yID0gdm1fZ2V0X2ludGluZm8oc2MtPnZtLCB2bWlpLT52Y3B1aWQs
ICZ2bWlpLT5pbmZvMSwKKwkJICAgICZ2bWlpLT5pbmZvMik7CisJCWJyZWFrOworCWNhc2UgVk1f
UlRDX1dSSVRFOgorCQlydGNkYXRhID0gKHN0cnVjdCB2bV9ydGNfZGF0YSAqKWRhdGE7CisJCWVy
cm9yID0gdnJ0Y19udnJhbV93cml0ZShzYy0+dm0sIHJ0Y2RhdGEtPm9mZnNldCwKKwkJICAgIHJ0
Y2RhdGEtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9SVENfUkVBRDoKKwkJcnRjZGF0YSA9
IChzdHJ1Y3Qgdm1fcnRjX2RhdGEgKilkYXRhOworCQllcnJvciA9IHZydGNfbnZyYW1fcmVhZChz
Yy0+dm0sIHJ0Y2RhdGEtPm9mZnNldCwKKwkJICAgICZydGNkYXRhLT52YWx1ZSk7CisJCWJyZWFr
OworCWNhc2UgVk1fUlRDX1NFVFRJTUU6CisJCXJ0Y3RpbWUgPSAoc3RydWN0IHZtX3J0Y190aW1l
ICopZGF0YTsKKwkJZXJyb3IgPSB2cnRjX3NldF90aW1lKHNjLT52bSwgcnRjdGltZS0+c2Vjcyk7
CisJCWJyZWFrOworCWNhc2UgVk1fUlRDX0dFVFRJTUU6CisJCWVycm9yID0gMDsKKwkJcnRjdGlt
ZSA9IChzdHJ1Y3Qgdm1fcnRjX3RpbWUgKilkYXRhOworCQlydGN0aW1lLT5zZWNzID0gdnJ0Y19n
ZXRfdGltZShzYy0+dm0pOworCQlicmVhazsKKwljYXNlIFZNX1JFU1RBUlRfSU5TVFJVQ1RJT046
CisJCWVycm9yID0gdm1fcmVzdGFydF9pbnN0cnVjdGlvbihzYy0+dm0sIHZjcHUpOworCQlicmVh
azsKKwlkZWZhdWx0OgorCQllcnJvciA9IEVOT1RUWTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHN0
YXRlX2NoYW5nZWQgPT0gMSkKKwkJdmNwdV91bmxvY2tfb25lKHNjLCB2Y3B1KTsKKwllbHNlIGlm
IChzdGF0ZV9jaGFuZ2VkID09IDIpCisJCXZjcHVfdW5sb2NrX2FsbChzYyk7CisKK2RvbmU6CisJ
LyogTWFrZSBzdXJlIHRoYXQgbm8gaGFuZGxlciByZXR1cm5zIGEgYm9ndXMgdmFsdWUgbGlrZSBF
UkVTVEFSVCAqLworCUtBU1NFUlQoZXJyb3IgPj0gMCwgKCJ2bW1kZXZfaW9jdGw6IGludmFsaWQg
ZXJyb3IgcmV0dXJuICVkIiwgZXJyb3IpKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGlj
IGludAordm1tZGV2X21tYXBfc2luZ2xlKHN0cnVjdCBjZGV2ICpjZGV2LCB2bV9vb2Zmc2V0X3Qg
Km9mZnNldCwgdm1fc2l6ZV90IG1hcHNpemUsCisgICAgc3RydWN0IHZtX29iamVjdCAqKm9ianAs
IGludCBucHJvdCkKK3sKKwlzdHJ1Y3Qgdm1tZGV2X3NvZnRjICpzYzsKKwl2bV9wYWRkcl90IGdw
YTsKKwlzaXplX3QgbGVuOworCXZtX29vZmZzZXRfdCBzZWdvZmYsIGZpcnN0LCBsYXN0OworCWlu
dCBlcnJvciwgZm91bmQsIHNlZ2lkOworCWJvb2wgc3lzbWVtOworCisJZmlyc3QgPSAqb2Zmc2V0
OworCWxhc3QgPSBmaXJzdCArIG1hcHNpemU7CisJaWYgKChucHJvdCAmIFBST1RfRVhFQykgfHwg
Zmlyc3QgPCAwIHx8IGZpcnN0ID49IGxhc3QpCisJCXJldHVybiAoRUlOVkFMKTsKKworCXNjID0g
dm1tZGV2X2xvb2t1cDIoY2Rldik7CisJaWYgKHNjID09IE5VTEwpIHsKKwkJLyogdmlydHVhbCBt
YWNoaW5lIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGNyZWF0ZWQgKi8KKwkJcmV0dXJuIChF
SU5WQUwpOworCX0KKworCS8qCisJICogR2V0IGEgcmVhZCBsb2NrIG9uIHRoZSBndWVzdCBtZW1v
cnkgbWFwIGJ5IGZyZWV6aW5nIGFueSB2Y3B1LgorCSAqLworCWVycm9yID0gdmNwdV9sb2NrX29u
ZShzYywgVk1fTUFYQ1BVIC0gMSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gKGVycm9yKTsKKwor
CWdwYSA9IDA7CisJZm91bmQgPSAwOworCXdoaWxlICghZm91bmQpIHsKKwkJZXJyb3IgPSB2bV9t
bWFwX2dldG5leHQoc2MtPnZtLCAmZ3BhLCAmc2VnaWQsICZzZWdvZmYsICZsZW4sCisJCSAgICBO
VUxMLCBOVUxMKTsKKwkJaWYgKGVycm9yKQorCQkJYnJlYWs7CisKKwkJaWYgKGZpcnN0ID49IGdw
YSAmJiBsYXN0IDw9IGdwYSArIGxlbikKKwkJCWZvdW5kID0gMTsKKwkJZWxzZQorCQkJZ3BhICs9
IGxlbjsKKwl9CisKKwlpZiAoZm91bmQpIHsKKwkJZXJyb3IgPSB2bV9nZXRfbWVtc2VnKHNjLT52
bSwgc2VnaWQsICZsZW4sICZzeXNtZW0sIG9ianApOworCQlLQVNTRVJUKGVycm9yID09IDAgJiYg
Km9ianAgIT0gTlVMTCwKKwkJICAgICgiJXM6IGludmFsaWQgbWVtb3J5IHNlZ21lbnQgJWQiLCBf
X2Z1bmNfXywgc2VnaWQpKTsKKwkJaWYgKHN5c21lbSkgeworCQkJdm1fb2JqZWN0X3JlZmVyZW5j
ZSgqb2JqcCk7CisJCQkqb2Zmc2V0ID0gc2Vnb2ZmICsgKGZpcnN0IC0gZ3BhKTsKKwkJfSBlbHNl
IHsKKwkJCWVycm9yID0gRUlOVkFMOworCQl9CisJfQorCXZjcHVfdW5sb2NrX29uZShzYywgVk1f
TUFYQ1BVIC0gMSk7CisJcmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkCit2bW1kZXZf
ZGVzdHJveSh2b2lkICphcmcpCit7CisJc3RydWN0IHZtbWRldl9zb2Z0YyAqc2MgPSBhcmc7CisJ
c3RydWN0IGRldm1lbV9zb2Z0YyAqZHNjOworCWludCBlcnJvcjsKKworCWVycm9yID0gdmNwdV9s
b2NrX2FsbChzYyk7CisJS0FTU0VSVChlcnJvciA9PSAwLCAoIiVzOiBlcnJvciAlZCBmcmVlemlu
ZyB2Y3B1cyIsIF9fZnVuY19fLCBlcnJvcikpOworCisJd2hpbGUgKChkc2MgPSBTTElTVF9GSVJT
VCgmc2MtPmRldm1lbSkpICE9IE5VTEwpIHsKKwkJS0FTU0VSVChkc2MtPmNkZXYgPT0gTlVMTCwg
KCIlczogZGV2bWVtIG5vdCBmcmVlIiwgX19mdW5jX18pKTsKKwkJU0xJU1RfUkVNT1ZFX0hFQUQo
JnNjLT5kZXZtZW0sIGxpbmspOworCQlmcmVlKGRzYy0+bmFtZSwgTV9WTU1ERVYpOworCQlmcmVl
KGRzYywgTV9WTU1ERVYpOworCX0KKworCWlmIChzYy0+Y2RldiAhPSBOVUxMKQorCQlkZXN0cm95
X2RldihzYy0+Y2Rldik7CisKKwlpZiAoc2MtPnZtICE9IE5VTEwpCisJCXZtX2Rlc3Ryb3koc2Mt
PnZtKTsKKworCWlmICgoc2MtPmZsYWdzICYgVlNDX0xJTktFRCkgIT0gMCkgeworCQltdHhfbG9j
aygmdm1tZGV2X210eCk7CisJCVNMSVNUX1JFTU9WRSgmaGVhZCwgc2MsIHZtbWRldl9zb2Z0Yywg
bGluayk7CisJCW10eF91bmxvY2soJnZtbWRldl9tdHgpOworCX0KKworCWZyZWUoc2MsIE1fVk1N
REVWKTsKK30KKworc3RhdGljIGludAorc3lzY3RsX3ZtbV9kZXN0cm95KFNZU0NUTF9IQU5ETEVS
X0FSR1MpCit7CisJaW50IGVycm9yOworCWNoYXIgYnVmW1ZNX01BWF9OQU1FTEVOXTsKKwlzdHJ1
Y3QgZGV2bWVtX3NvZnRjICpkc2M7CisJc3RydWN0IHZtbWRldl9zb2Z0YyAqc2M7CisJc3RydWN0
IGNkZXYgKmNkZXY7CisKKwlzdHJsY3B5KGJ1ZiwgImJlYXZpcyIsIHNpemVvZihidWYpKTsKKwll
cnJvciA9IHN5c2N0bF9oYW5kbGVfc3RyaW5nKG9pZHAsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIHJlcSk7
CisJaWYgKGVycm9yICE9IDAgfHwgcmVxLT5uZXdwdHIgPT0gTlVMTCkKKwkJcmV0dXJuIChlcnJv
cik7CisKKwltdHhfbG9jaygmdm1tZGV2X210eCk7CisJc2MgPSB2bW1kZXZfbG9va3VwKGJ1Zik7
CisJaWYgKHNjID09IE5VTEwgfHwgc2MtPmNkZXYgPT0gTlVMTCkgeworCQltdHhfdW5sb2NrKCZ2
bW1kZXZfbXR4KTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKworCS8qCisJICogVGhlICdjZGV2
JyB3aWxsIGJlIGRlc3Ryb3llZCBhc3luY2hyb25vdXNseSB3aGVuICdzaV90aHJlYWRjb3VudCcK
KwkgKiBnb2VzIGRvd24gdG8gMCBzbyB3ZSBzaG91bGQgbm90IGRvIGl0IGFnYWluIGluIHRoZSBj
YWxsYmFjay4KKwkgKgorCSAqIFNldHRpbmcgJ3NjLT5jZGV2JyB0byBOVUxMIGlzIGFsc28gdXNl
ZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBWTQorCSAqIGlzIHNjaGVkdWxlZCBmb3IgZGVzdHJ1Y3Rp
b24uCisJICovCisJY2RldiA9IHNjLT5jZGV2OworCXNjLT5jZGV2ID0gTlVMTDsJCQorCW10eF91
bmxvY2soJnZtbWRldl9tdHgpOworCisJLyoKKwkgKiBTY2hlZHVsZSBhbGwgY2RldnMgdG8gYmUg
ZGVzdHJveWVkOgorCSAqCisJICogLSBhbnkgbmV3IG9wZXJhdGlvbnMgb24gdGhlICdjZGV2JyB3
aWxsIHJldHVybiBhbiBlcnJvciAoRU5YSU8pLgorCSAqCisJICogLSB3aGVuIHRoZSAnc2lfdGhy
ZWFkY291bnQnIGR3aW5kbGVzIGRvd24gdG8gemVybyB0aGUgJ2NkZXYnIHdpbGwKKwkgKiAgIGJl
IGRlc3Ryb3llZCBhbmQgdGhlIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCBpbiBhIHRhc2txdWV1
ZQorCSAqICAgY29udGV4dC4KKwkgKgorCSAqIC0gdGhlICdkZXZtZW0nIGNkZXZzIGFyZSBkZXN0
cm95ZWQgYmVmb3JlIHRoZSB2aXJ0dWFsIG1hY2hpbmUgJ2NkZXYnCisJICovCisJU0xJU1RfRk9S
RUFDSChkc2MsICZzYy0+ZGV2bWVtLCBsaW5rKSB7CisJCUtBU1NFUlQoZHNjLT5jZGV2ICE9IE5V
TEwsICgiZGV2bWVtIGNkZXYgYWxyZWFkeSBkZXN0cm95ZWQiKSk7CisJCWRlc3Ryb3lfZGV2X3Nj
aGVkX2NiKGRzYy0+Y2RldiwgZGV2bWVtX2Rlc3Ryb3ksIGRzYyk7CisJfQorCWRlc3Ryb3lfZGV2
X3NjaGVkX2NiKGNkZXYsIHZtbWRldl9kZXN0cm95LCBzYyk7CisJcmV0dXJuICgwKTsKK30KK1NZ
U0NUTF9QUk9DKF9od192bW0sIE9JRF9BVVRPLCBkZXN0cm95LCBDVExUWVBFX1NUUklORyB8IENU
TEZMQUdfUlcsCisJICAgIE5VTEwsIDAsIHN5c2N0bF92bW1fZGVzdHJveSwgIkEiLCBOVUxMKTsK
Kworc3RhdGljIHN0cnVjdCBjZGV2c3cgdm1tZGV2c3cgPSB7CisJLmRfbmFtZQkJPSAidm1tZGV2
IiwKKwkuZF92ZXJzaW9uCT0gRF9WRVJTSU9OLAorCS5kX2lvY3RsCT0gdm1tZGV2X2lvY3RsLAor
CS5kX21tYXBfc2luZ2xlCT0gdm1tZGV2X21tYXBfc2luZ2xlLAorCS5kX3JlYWQJCT0gdm1tZGV2
X3J3LAorCS5kX3dyaXRlCT0gdm1tZGV2X3J3LAorfTsKKworc3RhdGljIGludAorc3lzY3RsX3Zt
bV9jcmVhdGUoU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0IHZt
ICp2bTsKKwlzdHJ1Y3QgY2RldiAqY2RldjsKKwlzdHJ1Y3Qgdm1tZGV2X3NvZnRjICpzYywgKnNj
MjsKKwljaGFyIGJ1ZltWTV9NQVhfTkFNRUxFTl07CisKKwlzdHJsY3B5KGJ1ZiwgImJlYXZpcyIs
IHNpemVvZihidWYpKTsKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfc3RyaW5nKG9pZHAsIGJ1Ziwg
c2l6ZW9mKGJ1ZiksIHJlcSk7CisJaWYgKGVycm9yICE9IDAgfHwgcmVxLT5uZXdwdHIgPT0gTlVM
TCkKKwkJcmV0dXJuIChlcnJvcik7CisKKwltdHhfbG9jaygmdm1tZGV2X210eCk7CisJc2MgPSB2
bW1kZXZfbG9va3VwKGJ1Zik7CisJbXR4X3VubG9jaygmdm1tZGV2X210eCk7CisJaWYgKHNjICE9
IE5VTEwpCisJCXJldHVybiAoRUVYSVNUKTsKKworCWVycm9yID0gdm1fY3JlYXRlKGJ1ZiwgJnZt
KTsKKwlpZiAoZXJyb3IgIT0gMCkKKwkJcmV0dXJuIChlcnJvcik7CisKKwlzYyA9IG1hbGxvYyhz
aXplb2Yoc3RydWN0IHZtbWRldl9zb2Z0YyksIE1fVk1NREVWLCBNX1dBSVRPSyB8IE1fWkVSTyk7
CisJc2MtPnZtID0gdm07CisJU0xJU1RfSU5JVCgmc2MtPmRldm1lbSk7CisKKwkvKgorCSAqIExv
b2t1cCB0aGUgbmFtZSBhZ2FpbiBqdXN0IGluIGNhc2Ugc29tZWJvZHkgc25lYWtlZCBpbiB3aGVu
IHdlCisJICogZHJvcHBlZCB0aGUgbG9jay4KKwkgKi8KKwltdHhfbG9jaygmdm1tZGV2X210eCk7
CisJc2MyID0gdm1tZGV2X2xvb2t1cChidWYpOworCWlmIChzYzIgPT0gTlVMTCkgeworCQlTTElT
VF9JTlNFUlRfSEVBRCgmaGVhZCwgc2MsIGxpbmspOworCQlzYy0+ZmxhZ3MgfD0gVlNDX0xJTktF
RDsKKwl9CisJbXR4X3VubG9jaygmdm1tZGV2X210eCk7CisKKwlpZiAoc2MyICE9IE5VTEwpIHsK
KwkJdm1tZGV2X2Rlc3Ryb3koc2MpOworCQlyZXR1cm4gKEVFWElTVCk7CisJfQorCisJZXJyb3Ig
PSBtYWtlX2Rldl9wKE1BS0VERVZfQ0hFQ0tOQU1FLCAmY2RldiwgJnZtbWRldnN3LCBOVUxMLAor
CQkJICAgVUlEX1JPT1QsIEdJRF9XSEVFTCwgMDYwMCwgInZtbS8lcyIsIGJ1Zik7CisJaWYgKGVy
cm9yICE9IDApIHsKKwkJdm1tZGV2X2Rlc3Ryb3koc2MpOworCQlyZXR1cm4gKGVycm9yKTsKKwl9
CisKKwltdHhfbG9jaygmdm1tZGV2X210eCk7CisJc2MtPmNkZXYgPSBjZGV2OworCXNjLT5jZGV2
LT5zaV9kcnYxID0gc2M7CisJbXR4X3VubG9jaygmdm1tZGV2X210eCk7CisKKwlyZXR1cm4gKDAp
OworfQorU1lTQ1RMX1BST0MoX2h3X3ZtbSwgT0lEX0FVVE8sIGNyZWF0ZSwgQ1RMVFlQRV9TVFJJ
TkcgfCBDVExGTEFHX1JXLAorCSAgICBOVUxMLCAwLCBzeXNjdGxfdm1tX2NyZWF0ZSwgIkEiLCBO
VUxMKTsKKwordm9pZAordm1tZGV2X2luaXQodm9pZCkKK3sKKwltdHhfaW5pdCgmdm1tZGV2X210
eCwgInZtbSBkZXZpY2UgbXV0ZXgiLCBOVUxMLCBNVFhfREVGKTsKK30KKworaW50Cit2bW1kZXZf
Y2xlYW51cCh2b2lkKQoreworCWludCBlcnJvcjsKKworCWlmIChTTElTVF9FTVBUWSgmaGVhZCkp
CisJCWVycm9yID0gMDsKKwllbHNlCisJCWVycm9yID0gRUJVU1k7CisKKwlyZXR1cm4gKGVycm9y
KTsKK30KKworc3RhdGljIGludAorZGV2bWVtX21tYXBfc2luZ2xlKHN0cnVjdCBjZGV2ICpjZGV2
LCB2bV9vb2Zmc2V0X3QgKm9mZnNldCwgdm1fc2l6ZV90IGxlbiwKKyAgICBzdHJ1Y3Qgdm1fb2Jq
ZWN0ICoqb2JqcCwgaW50IG5wcm90KQoreworCXN0cnVjdCBkZXZtZW1fc29mdGMgKmRzYzsKKwl2
bV9vb2Zmc2V0X3QgZmlyc3QsIGxhc3Q7CisJc2l6ZV90IHNlZ2xlbjsKKwlpbnQgZXJyb3I7CisJ
Ym9vbCBzeXNtZW07CisKKwlkc2MgPSBjZGV2LT5zaV9kcnYxOworCWlmIChkc2MgPT0gTlVMTCkg
eworCQkvKiAnY2RldicgaGFzIGJlZW4gY3JlYXRlZCBidXQgaXMgbm90IHJlYWR5IGZvciB1c2Ug
Ki8KKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJZmlyc3QgPSAqb2Zmc2V0OworCWxhc3QgPSAq
b2Zmc2V0ICsgbGVuOworCWlmICgobnByb3QgJiBQUk9UX0VYRUMpIHx8IGZpcnN0IDwgMCB8fCBm
aXJzdCA+PSBsYXN0KQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwllcnJvciA9IHZjcHVfbG9ja19v
bmUoZHNjLT5zYywgVk1fTUFYQ1BVIC0gMSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gKGVycm9y
KTsKKworCWVycm9yID0gdm1fZ2V0X21lbXNlZyhkc2MtPnNjLT52bSwgZHNjLT5zZWdpZCwgJnNl
Z2xlbiwgJnN5c21lbSwgb2JqcCk7CisJS0FTU0VSVChlcnJvciA9PSAwICYmICFzeXNtZW0gJiYg
Km9ianAgIT0gTlVMTCwKKwkgICAgKCIlczogaW52YWxpZCBkZXZtZW0gc2VnbWVudCAlZCIsIF9f
ZnVuY19fLCBkc2MtPnNlZ2lkKSk7CisKKwl2Y3B1X3VubG9ja19vbmUoZHNjLT5zYywgVk1fTUFY
Q1BVIC0gMSk7CisKKwlpZiAoc2VnbGVuID49IGxhc3QpIHsKKwkJdm1fb2JqZWN0X3JlZmVyZW5j
ZSgqb2JqcCk7CisJCXJldHVybiAoMCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIChFSU5WQUwpOwor
CX0KK30KKworc3RhdGljIHN0cnVjdCBjZGV2c3cgZGV2bWVtc3cgPSB7CisJLmRfbmFtZQkJPSAi
ZGV2bWVtIiwKKwkuZF92ZXJzaW9uCT0gRF9WRVJTSU9OLAorCS5kX21tYXBfc2luZ2xlCT0gZGV2
bWVtX21tYXBfc2luZ2xlLAorfTsKKworc3RhdGljIGludAorZGV2bWVtX2NyZWF0ZV9jZGV2KGNv
bnN0IGNoYXIgKnZtbmFtZSwgaW50IHNlZ2lkLCBjaGFyICpkZXZuYW1lKQoreworCXN0cnVjdCBk
ZXZtZW1fc29mdGMgKmRzYzsKKwlzdHJ1Y3Qgdm1tZGV2X3NvZnRjICpzYzsKKwlzdHJ1Y3QgY2Rl
diAqY2RldjsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IG1ha2VfZGV2X3AoTUFLRURFVl9DSEVD
S05BTUUsICZjZGV2LCAmZGV2bWVtc3csIE5VTEwsCisJICAgIFVJRF9ST09ULCBHSURfV0hFRUws
IDA2MDAsICJ2bW0uaW8vJXMuJXMiLCB2bW5hbWUsIGRldm5hbWUpOworCWlmIChlcnJvcikKKwkJ
cmV0dXJuIChlcnJvcik7CisKKwlkc2MgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZtZW1fc29m
dGMpLCBNX1ZNTURFViwgTV9XQUlUT0sgfCBNX1pFUk8pOworCisJbXR4X2xvY2soJnZtbWRldl9t
dHgpOworCXNjID0gdm1tZGV2X2xvb2t1cCh2bW5hbWUpOworCUtBU1NFUlQoc2MgIT0gTlVMTCwg
KCIlczogdm0gJXMgc29mdGMgbm90IGZvdW5kIiwgX19mdW5jX18sIHZtbmFtZSkpOworCWlmIChz
Yy0+Y2RldiA9PSBOVUxMKSB7CisJCS8qIHZpcnR1YWwgbWFjaGluZSBpcyBiZWluZyBjcmVhdGVk
IG9yIGRlc3Ryb3llZCAqLworCQltdHhfdW5sb2NrKCZ2bW1kZXZfbXR4KTsKKwkJZnJlZShkc2Ms
IE1fVk1NREVWKTsKKwkJZGVzdHJveV9kZXZfc2NoZWRfY2IoY2RldiwgTlVMTCwgMCk7CisJCXJl
dHVybiAoRU5PREVWKTsKKwl9CisKKwlkc2MtPnNlZ2lkID0gc2VnaWQ7CisJZHNjLT5uYW1lID0g
ZGV2bmFtZTsKKwlkc2MtPmNkZXYgPSBjZGV2OworCWRzYy0+c2MgPSBzYzsKKwlTTElTVF9JTlNF
UlRfSEVBRCgmc2MtPmRldm1lbSwgZHNjLCBsaW5rKTsKKwltdHhfdW5sb2NrKCZ2bW1kZXZfbXR4
KTsKKworCS8qIFRoZSAnY2RldicgaXMgcmVhZHkgZm9yIHVzZSBhZnRlciAnc2lfZHJ2MScgaXMg
aW5pdGlhbGl6ZWQgKi8KKwljZGV2LT5zaV9kcnYxID0gZHNjOworCXJldHVybiAoMCk7Cit9CisK
K3N0YXRpYyB2b2lkCitkZXZtZW1fZGVzdHJveSh2b2lkICphcmcpCit7CisJc3RydWN0IGRldm1l
bV9zb2Z0YyAqZHNjID0gYXJnOworCisJS0FTU0VSVChkc2MtPmNkZXYsICgiJXM6IGRldm1lbSBj
ZGV2IGFscmVhZHkgZGVzdHJveWVkIiwgX19mdW5jX18pKTsKKwlkc2MtPmNkZXYgPSBOVUxMOwor
CWRzYy0+c2MgPSBOVUxMOworfQpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2FtZDY0L3ZtbS92
bW1faW9wb3J0LmMgL3Vzci9zcmMvc3lzL2FtZDY0L3ZtbS92bW1faW9wb3J0LmMKLS0tIHVzci9z
cmMvc3lzL2FtZDY0L3ZtbS92bW1faW9wb3J0LmMJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAw
MDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX2lvcG9ydC5jCTIwMTYtMTEt
MzAgMTA6NTY6MDUuNzk0NTYzMDAwICswMDAwCkBAIC05NywzMSArOTcsMjc0IEBACiB9CiAjZW5k
aWYJLyogS1RSICovCiAKKyNpZmRlZiBWTU1fSU9QT1JUX1JFR19IQU5ETEVSCisjaW5jbHVkZSA8
c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9sb2Nr
Lmg+CisjaW5jbHVkZSA8c3lzL3N4Lmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1
ZGUgPHN5cy9zeXN0bS5oPgorCitzdGF0aWMgTUFMTE9DX0RFRklORShNX0lPUkVHSCwgImlvcmVn
aCIsICJiaHl2ZSBpb3BvcnQgcmVnIGhhbmRsZXJzIik7CisKKyNkZWZpbmUgSU9QT1JUX01BWF9S
RUdfSEFORExFUgkxNgorCisvKgorICogaW9wb3J0X3JlZ19oYW5kbGVyIGZ1bmN0aW9ucyBhbGxv
d3MgdXMgdG8gdG8gY2F0Y2ggVk0gd3JpdGUvcmVhZAorICogb24gc3BlY2lmaWMgSS9PIGFkZHJl
c3MgYW5kIHNlbmQgbm90aWZpY2F0aW9uLgorICoKKyAqIFdoZW4gdGhlIFZNIHdyaXRlcyBvciBy
ZWFkcyBhIHNwZWNpZmljIHZhbHVlIG9uIEkvTyBhZGRyZXNzLCBpZiB0aGUgYWRkcmVzcworICog
YW5kIHRoZSB2YWx1ZSBtYXRjaGVzIHdpdGggdGhlIGluZm8gc3RvcmVkIGR1cmlnbiB0aGUgaGFu
ZGxlciByZWdpc3RyYXRpb24sCisgKiB0aGVuIHdlIHNlbmQgYSBub3RpZmljYXRpb24gKHdlIGNh
biBoYXZlIG11bHRpcGxlIHR5cGUgb2Ygbm90aWZpY2F0aW9uLAorICogYnV0IGZvciBub3cgaXMg
aW1wbGVtZW50ZWQgb25seSB0aGUgVk1fSU9fUkVHSF9LV0VWRU5UUyBoYW5kbGVyLgorICovCisK
K3R5cGVkZWYgaW50ICgqaW9wb3J0X3JlZ19oYW5kbGVyX2Z1bmNfdCkoc3RydWN0IHZtICp2bSwK
KwkJc3RydWN0IGlvcG9ydF9yZWdfaGFuZGxlciAqcmVnaCwgdWludDMyX3QgKnZhbCk7CisKK3N0
cnVjdCBpb3BvcnRfcmVnX2hhbmRsZXIgeworCXVpbnQxNl90IHBvcnQ7CQkJCS8qIEkvTyBhZGRy
ZXNzICovCisJdWludDE2X3QgaW47CQkJCS8qIDAgb3V0LCAxIGluICovCisJdWludDMyX3QgbWFz
a19kYXRhOwkJCS8qIDAgbWVhbnMgbWF0Y2ggYW55dGhpbmcgKi8KKwl1aW50MzJfdCBkYXRhOwkJ
CQkvKiBkYXRhIHRvIG1hdGNoICovCisJaW9wb3J0X3JlZ19oYW5kbGVyX2Z1bmNfdCBoYW5kbGVy
OwkvKiBoYW5kbGVyIHBvaW50ZXIgKi8KKwl2b2lkICpoYW5kbGVyX2FyZzsJCQkvKiBoYW5kbGVy
IGFyZ3VtZW50ICovCit9OworCitzdHJ1Y3QgaW9yZWdoIHsKKwlzdHJ1Y3Qgc3ggbG9jazsKKwkv
KiBUT0RPOiB1c2UgaGFzaCB0YWJsZSAqLworCXN0cnVjdCBpb3BvcnRfcmVnX2hhbmRsZXIgaGFu
ZGxlcnNbSU9QT1JUX01BWF9SRUdfSEFORExFUl07Cit9OworCisvKiAtLS0tLSBJL08gcmVnIGhh
bmRsZXJzIC0tLS0tICovCisKKy8qCisgKiBWTV9JT19SRUdIX0tXRVZFTlRTIGhhbmRsZXIKKyAq
CisgKiB3YWtldXAoKSBvbiBzcGVjaWZpZWQgYWRkcmVzcyB0aGF0IHVuaXF1ZWx5IGlkZW50aWZp
ZXMgdGhlIGV2ZW50CisgKgorICovCitzdGF0aWMgaW50Cit2bW1faW9wb3J0X3JlZ193YWtldXAo
c3RydWN0IHZtICp2bSwgc3RydWN0IGlvcG9ydF9yZWdfaGFuZGxlciAqcmVnaCwgdWludDMyX3Qg
KnZhbCkKK3sKKwl3YWtldXAocmVnaC0+aGFuZGxlcl9hcmcpOworCXJldHVybiAoMCk7Cit9CisK
Ky8qCisgKiBUT0RPOgorICogLSBWTV9JT19SRUdIX0NPTkRTSUdOQUw6CXB0aHJlYWRfY29uZF9z
aWduYWwKKyAqIC0gVk1fSU9fUkVHSF9XUklURUZEOgl3cml0ZSBvbiBmZAorICogLSBWTV9JT19S
RUdIX0lPQ1RMOgkJaW9jdGwgb24gZmQKKyAqLworCisvKiBjYWxsIHdpdGggaW9yZWdoLT5sb2Nr
IGhlbGQgKi8KK3N0YXRpYyBzdHJ1Y3QgaW9wb3J0X3JlZ19oYW5kbGVyICoKK3ZtbV9pb3BvcnRf
ZmluZF9oYW5kbGVyKHN0cnVjdCBpb3JlZ2ggKmlvcmVnaCwgdWludDE2X3QgcG9ydCwgdWludDE2
X3QgaW4sCisJCXVpbnQzMl90IG1hc2tfZGF0YSwgdWludDMyX3QgZGF0YSkKK3sKKwlzdHJ1Y3Qg
aW9wb3J0X3JlZ19oYW5kbGVyICpyZWdoOworCXVpbnQzMl90IG1hc2s7CisJaW50IGk7CisKKwly
ZWdoID0gaW9yZWdoLT5oYW5kbGVyczsKKwlmb3IgKGkgPSAwOyBpIDwgSU9QT1JUX01BWF9SRUdf
SEFORExFUjsgaSsrKSB7CisJCWlmIChyZWdoW2ldLmhhbmRsZXIgIT0gTlVMTCkgeworCQkJbWFz
ayA9IHJlZ2hbaV0ubWFza19kYXRhICYgbWFza19kYXRhOworCQkJaWYgKChyZWdoW2ldLnBvcnQg
PT0gcG9ydCkgJiYgKHJlZ2hbaV0uaW4gPT0gaW4pCisJCQkJJiYgKChtYXNrICYgcmVnaFtpXS5k
YXRhKSA9PSAobWFzayAmIGRhdGEpKSkgeworCQkJCXJldHVybiAmcmVnaFtpXTsKKwkJCX0KKwkJ
fQorCX0KKworCXJldHVybiAoTlVMTCk7Cit9CisKKy8qIGNhbGwgd2l0aCBpb3JlZ2gtPmxvY2sg
aGVsZCAqLworc3RhdGljIHN0cnVjdCBpb3BvcnRfcmVnX2hhbmRsZXIgKgordm1tX2lvcG9ydF9l
bXB0eV9oYW5kbGVyKHN0cnVjdCBpb3JlZ2ggKmlvcmVnaCkKK3sKKwlzdHJ1Y3QgaW9wb3J0X3Jl
Z19oYW5kbGVyICpyZWdoOworCWludCBpOworCisJcmVnaCA9IGlvcmVnaC0+aGFuZGxlcnM7CisJ
Zm9yIChpID0gMDsgaSA8IElPUE9SVF9NQVhfUkVHX0hBTkRMRVI7IGkrKykgeworCQlpZiAocmVn
aFtpXS5oYW5kbGVyID09IE5VTEwpIHsKKwkJCXJldHVybiAmcmVnaFtpXTsKKwkJfQorCX0KKwor
CXJldHVybiAoTlVMTCk7Cit9CisKKworc3RhdGljIGludAordm1tX2lvcG9ydF9hZGRfaGFuZGxl
cihzdHJ1Y3Qgdm0gKnZtLCB1aW50MTZfdCBwb3J0LCB1aW50MTZfdCBpbiwgdWludDMyX3QgbWFz
a19kYXRhLAorCXVpbnQzMl90IGRhdGEsIGlvcG9ydF9yZWdfaGFuZGxlcl9mdW5jX3QgaGFuZGxl
ciwgdm9pZCAqaGFuZGxlcl9hcmcpCit7CisJc3RydWN0IGlvcG9ydF9yZWdfaGFuZGxlciAqcmVn
aDsKKwlzdHJ1Y3QgaW9yZWdoICppb3JlZ2g7CisJaW50IHJldCA9IDA7CisKKwlpb3JlZ2ggPSB2
bV9pb3JlZ2godm0pOworCisJc3hfeGxvY2soJmlvcmVnaC0+bG9jayk7CisKKwlyZWdoID0gdm1t
X2lvcG9ydF9maW5kX2hhbmRsZXIoaW9yZWdoLCBwb3J0LCBpbiwgbWFza19kYXRhLCBkYXRhKTsK
KwlpZiAocmVnaCAhPSBOVUxMKSB7CisJCXByaW50ZigiJXM6IGhhbmRsZXIgZm9yIHBvcnQgJWQg
aW4gJWQgbWFza19kYXRhICVkIGRhdGEgJWQgXAorCQkJCWFscmVhZHkgcmVnaXN0ZXJlZFxuIiwK
KwkJCQlfX0ZVTkNUSU9OX18sIHBvcnQsIGluLCAgbWFza19kYXRhLCBkYXRhKTsKKwkJcmV0ID0g
RUVYSVNUOworCQlnb3RvIGVycjsKKwl9CisKKwlyZWdoID0gdm1tX2lvcG9ydF9lbXB0eV9oYW5k
bGVyKGlvcmVnaCk7CisJaWYgKHJlZ2ggPT0gTlVMTCkgeworCQlwcmludGYoIiVzOiBlbXB0eSBy
ZWdfaGFuZGxlciBzbG90IG5vdCBmb3VuZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gRU5P
TUVNOworCQlnb3RvIGVycjsKKwl9CisKKwlyZWdoLT5wb3J0ID0gcG9ydDsKKwlyZWdoLT5pbiA9
IGluOworCXJlZ2gtPm1hc2tfZGF0YSA9IG1hc2tfZGF0YTsKKwlyZWdoLT5kYXRhID0gZGF0YTsK
KwlyZWdoLT5oYW5kbGVyID0gaGFuZGxlcjsKKwlyZWdoLT5oYW5kbGVyX2FyZyA9IGhhbmRsZXJf
YXJnOworCitlcnI6CisJc3hfeHVubG9jaygmaW9yZWdoLT5sb2NrKTsKKwlyZXR1cm4gKHJldCk7
Cit9CisKK3N0YXRpYyBpbnQKK3ZtbV9pb3BvcnRfZGVsX2hhbmRsZXIoc3RydWN0IHZtICp2bSwg
dWludDE2X3QgcG9ydCwgdWludDE2X3QgaW4sCisJdWludDMyX3QgbWFza19kYXRhLCB1aW50MzJf
dCBkYXRhKQoreworCXN0cnVjdCBpb3BvcnRfcmVnX2hhbmRsZXIgKnJlZ2g7CisJc3RydWN0IGlv
cmVnaCAqaW9yZWdoOworCWludCByZXQgPSAwOworCisJaW9yZWdoID0gdm1faW9yZWdoKHZtKTsK
KworCXN4X3hsb2NrKCZpb3JlZ2gtPmxvY2spOworCisJcmVnaCA9IHZtbV9pb3BvcnRfZmluZF9o
YW5kbGVyKGlvcmVnaCwgcG9ydCwgaW4sIG1hc2tfZGF0YSwgZGF0YSk7CisKKwlpZiAocmVnaCA9
PSBOVUxMKSB7CisJCXJldCA9IEVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJYnplcm8ocmVn
aCwgc2l6ZW9mKHN0cnVjdCBpb3BvcnRfcmVnX2hhbmRsZXIpKTsKK2VycjoKKwlzeF94dW5sb2Nr
KCZpb3JlZ2gtPmxvY2spOworCXJldHVybiAocmV0KTsKK30KKworLyoKKyAqIHJlZ2lzdGVyIG9y
IGRlbGV0ZSBhIG5ldyBJL08gZXZlbnQgaGFuZGxlci4KKyAqLworaW50Cit2bW1faW9wb3J0X3Jl
Z19oYW5kbGVyKHN0cnVjdCB2bSAqdm0sIHVpbnQxNl90IHBvcnQsIHVpbnQxNl90IGluLAorCXVp
bnQzMl90IG1hc2tfZGF0YSwgdWludDMyX3QgZGF0YSwgZW51bSB2bV9pb19yZWdoX3R5cGUgdHlw
ZSwgdm9pZCAqYXJnKQoreworCWludCByZXQgPSAwOworCisJc3dpdGNoICh0eXBlKSB7CisJY2Fz
ZSBWTV9JT19SRUdIX0RFTEVURToKKwkJcmV0ID0gdm1tX2lvcG9ydF9kZWxfaGFuZGxlcih2bSwg
cG9ydCwgaW4sIG1hc2tfZGF0YSwgZGF0YSk7CisJCWJyZWFrOworCWNhc2UgVk1fSU9fUkVHSF9L
V0VWRU5UUzoKKwkJcmV0ID0gdm1tX2lvcG9ydF9hZGRfaGFuZGxlcih2bSwgcG9ydCwgaW4sIG1h
c2tfZGF0YSwgZGF0YSwKKwkJCQl2bW1faW9wb3J0X3JlZ193YWtldXAsIGFyZyk7CisJCWJyZWFr
OworCWRlZmF1bHQ6CisJCXByaW50ZigiJXM6IHVua25vd24gcmVnX2hhbmRsZXIgdHlwZVxuIiwg
X19GVU5DVElPTl9fKTsKKwkJcmV0ID0gRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4g
KHJldCk7Cit9CisKKy8qCisgKiBJbnZva2UgYW4gaGFuZGxlciwgaWYgdGhlIGRhdGEgbWF0Y2hl
cy4KKyAqLworc3RhdGljIGludAoraW52b2tlX3JlZ19oYW5kbGVyKHN0cnVjdCB2bSAqdm0sIGlu
dCB2Y3B1aWQsIHN0cnVjdCB2bV9leGl0ICp2bWV4aXQsCisJCSAgIHVpbnQzMl90ICp2YWwsIGlu
dCAqZXJyb3IpCit7CisJc3RydWN0IGlvcG9ydF9yZWdfaGFuZGxlciAqcmVnaDsKKwlzdHJ1Y3Qg
aW9yZWdoICppb3JlZ2g7CisJdWludDMyX3QgbWFza19kYXRhOworCisJbWFza19kYXRhID0gdmll
X3NpemUybWFzayh2bWV4aXQtPnUuaW5vdXQuYnl0ZXMpOworCWlvcmVnaCA9IHZtX2lvcmVnaCh2
bSk7CisKKwlzeF9zbG9jaygmaW9yZWdoLT5sb2NrKTsKKwlyZWdoID0gdm1tX2lvcG9ydF9maW5k
X2hhbmRsZXIoaW9yZWdoLCB2bWV4aXQtPnUuaW5vdXQucG9ydCwKKwkJCXZtZXhpdC0+dS5pbm91
dC5pbiwgbWFza19kYXRhLCB2bWV4aXQtPnUuaW5vdXQuZWF4KTsKKwlpZiAocmVnaCAhPSBOVUxM
KSB7CisJCSplcnJvciA9ICgqKHJlZ2gtPmhhbmRsZXIpKSh2bSwgcmVnaCwgdmFsKTsKKwl9CisJ
c3hfc3VubG9jaygmaW9yZWdoLT5sb2NrKTsKKwlyZXR1cm4gKHJlZ2ggIT0gTlVMTCk7Cit9CisK
K3N0cnVjdCBpb3JlZ2ggKgoraW9yZWdoX2luaXQoc3RydWN0IHZtICp2bSkKK3sKKwlzdHJ1Y3Qg
aW9yZWdoICppb3JlZ2g7CisKKwlpb3JlZ2ggPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpb3JlZ2gp
LCBNX0lPUkVHSCwgTV9XQUlUT0sgfCBNX1pFUk8pOworCXN4X2luaXQoJmlvcmVnaC0+bG9jaywg
ImlvcmVnaCBsb2NrIik7CisKKwlyZXR1cm4gKGlvcmVnaCk7Cit9CisKK3ZvaWQKK2lvcmVnaF9j
bGVhbnVwKHN0cnVjdCBpb3JlZ2ggKmlvcmVnaCkKK3sKKwlzeF9kZXN0cm95KCZpb3JlZ2gtPmxv
Y2spOworCWZyZWUoaW9yZWdoLCBNX0lPUkVHSCk7Cit9CisjZWxzZSAvKiAhVk1NX0lPUE9SVF9S
RUdfSEFORExFUiAqLworI2RlZmluZSBpbnZva2VfcmVnX2hhbmRsZXIoXzEsIF8yLCBfMywgXzQs
IF81KSAoMCkKKyNlbmRpZiAvKiBWTU1fSU9QT1JUX1JFR19IQU5ETEVSICovCisKIHN0YXRpYyBp
bnQKIGVtdWxhdGVfaW5vdXRfcG9ydChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qg
dm1fZXhpdCAqdm1leGl0LAogICAgIGJvb2wgKnJldHUpCiB7CiAJaW9wb3J0X2hhbmRsZXJfZnVu
Y190IGhhbmRsZXI7CiAJdWludDMyX3QgbWFzaywgdmFsOwotCWludCBlcnJvcjsKKwlpbnQgcmVn
aCA9IDAsIGVycm9yID0gMDsKIAogCS8qCiAJICogSWYgdGhlcmUgaXMgbm8gaGFuZGxlciBmb3Ig
dGhlIEkvTyBwb3J0IHRoZW4gcHVudCB0byB1c2Vyc3BhY2UuCiAJICovCi0JaWYgKHZtZXhpdC0+
dS5pbm91dC5wb3J0ID49IE1BWF9JT1BPUlRTIHx8Ci0JICAgIChoYW5kbGVyID0gaW9wb3J0X2hh
bmRsZXJbdm1leGl0LT51Lmlub3V0LnBvcnRdKSA9PSBOVUxMKSB7CisJaWYgKCh2bWV4aXQtPnUu
aW5vdXQucG9ydCA+PSBNQVhfSU9QT1JUUyB8fAorCSAgICAoaGFuZGxlciA9IGlvcG9ydF9oYW5k
bGVyW3ZtZXhpdC0+dS5pbm91dC5wb3J0XSkgPT0gTlVMTCkgJiYKKwkgICAgKHJlZ2ggPSBpbnZv
a2VfcmVnX2hhbmRsZXIodm0sIHZjcHVpZCwgdm1leGl0LCAmdmFsLCAmZXJyb3IpKSA9PSAwKSB7
CiAJCSpyZXR1ID0gdHJ1ZTsKIAkJcmV0dXJuICgwKTsKIAl9CiAKLQltYXNrID0gdmllX3NpemUy
bWFzayh2bWV4aXQtPnUuaW5vdXQuYnl0ZXMpOworCWlmICghcmVnaCkgeworCQltYXNrID0gdmll
X3NpemUybWFzayh2bWV4aXQtPnUuaW5vdXQuYnl0ZXMpOworCisJCWlmICghdm1leGl0LT51Lmlu
b3V0LmluKSB7CisJCQl2YWwgPSB2bWV4aXQtPnUuaW5vdXQuZWF4ICYgbWFzazsKKwkJfQogCi0J
aWYgKCF2bWV4aXQtPnUuaW5vdXQuaW4pIHsKLQkJdmFsID0gdm1leGl0LT51Lmlub3V0LmVheCAm
IG1hc2s7CisJCWVycm9yID0gKCpoYW5kbGVyKSh2bSwgdmNwdWlkLCB2bWV4aXQtPnUuaW5vdXQu
aW4sCisJCQl2bWV4aXQtPnUuaW5vdXQucG9ydCwgdm1leGl0LT51Lmlub3V0LmJ5dGVzLCAmdmFs
KTsKIAl9CiAKLQllcnJvciA9ICgqaGFuZGxlcikodm0sIHZjcHVpZCwgdm1leGl0LT51Lmlub3V0
LmluLAotCSAgICB2bWV4aXQtPnUuaW5vdXQucG9ydCwgdm1leGl0LT51Lmlub3V0LmJ5dGVzLCAm
dmFsKTsKIAlpZiAoZXJyb3IpIHsKIAkJLyoKIAkJICogVGhlIHZhbHVlIHJldHVybmVkIGJ5IHRo
aXMgZnVuY3Rpb24gaXMgYWxzbyB0aGUgcmV0dXJuIHZhbHVlCmRpZmYgLXUgLXIgLU4gdXNyL3Ny
Yy9zeXMvYW1kNjQvdm1tL3ZtbV9pb3BvcnQuYy5vcmlnIC91c3Ivc3JjL3N5cy9hbWQ2NC92bW0v
dm1tX2lvcG9ydC5jLm9yaWcKLS0tIHVzci9zcmMvc3lzL2FtZDY0L3ZtbS92bW1faW9wb3J0LmMu
b3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lz
L2FtZDY0L3ZtbS92bW1faW9wb3J0LmMub3JpZwkyMDE2LTExLTMwIDEwOjUyOjU5LjAzNzA2NTAw
MCArMDAwMApAQCAtMCwwICsxLDE3NiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgVHlj
aG8gTmlnaHRpbmdhbGUgPHR5Y2hvLm5pZ2h0aW5nYWxlQHBsdXJpYnVzbmV0d29ya3MuY29tPgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBy
ZWxlbmcvMTEuMC9zeXMvYW1kNjQvdm1tL3ZtbV9pb3BvcnQuYyAyODIyODcgMjAxNS0wNC0zMCAy
MjoyMzoyMlogbmVlbCAkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxz
eXMvc3lzdG0uaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvdm1tLmg+CisjaW5jbHVkZSA8bWFjaGlu
ZS92bW1faW5zdHJ1Y3Rpb25fZW11bC5oPgorCisjaW5jbHVkZSAidmF0cGljLmgiCisjaW5jbHVk
ZSAidmF0cGl0LmgiCisjaW5jbHVkZSAidnBtdG1yLmgiCisjaW5jbHVkZSAidnJ0Yy5oIgorI2lu
Y2x1ZGUgInZtbV9pb3BvcnQuaCIKKyNpbmNsdWRlICJ2bW1fa3RyLmgiCisKKyNkZWZpbmUJTUFY
X0lPUE9SVFMJCTEyODAKKworaW9wb3J0X2hhbmRsZXJfZnVuY190IGlvcG9ydF9oYW5kbGVyW01B
WF9JT1BPUlRTXSA9IHsKKwlbVElNRVJfTU9ERV0gPSB2YXRwaXRfaGFuZGxlciwKKwlbVElNRVJf
Q05UUjBdID0gdmF0cGl0X2hhbmRsZXIsCisJW1RJTUVSX0NOVFIxXSA9IHZhdHBpdF9oYW5kbGVy
LAorCVtUSU1FUl9DTlRSMl0gPSB2YXRwaXRfaGFuZGxlciwKKwlbTk1JU0NfUE9SVF0gPSB2YXRw
aXRfbm1pc2NfaGFuZGxlciwKKwlbSU9fSUNVMV0gPSB2YXRwaWNfbWFzdGVyX2hhbmRsZXIsCisJ
W0lPX0lDVTEgKyBJQ1VfSU1SX09GRlNFVF0gPSB2YXRwaWNfbWFzdGVyX2hhbmRsZXIsCisJW0lP
X0lDVTJdID0gdmF0cGljX3NsYXZlX2hhbmRsZXIsCisJW0lPX0lDVTIgKyBJQ1VfSU1SX09GRlNF
VF0gPSB2YXRwaWNfc2xhdmVfaGFuZGxlciwKKwlbSU9fRUxDUjFdID0gdmF0cGljX2VsY19oYW5k
bGVyLAorCVtJT19FTENSMl0gPSB2YXRwaWNfZWxjX2hhbmRsZXIsCisJW0lPX1BNVE1SXSA9IHZw
bXRtcl9oYW5kbGVyLAorCVtJT19SVENdID0gdnJ0Y19hZGRyX2hhbmRsZXIsCisJW0lPX1JUQyAr
IDFdID0gdnJ0Y19kYXRhX2hhbmRsZXIsCit9OworCisjaWZkZWYgS1RSCitzdGF0aWMgY29uc3Qg
Y2hhciAqCitpbm91dF9pbnN0cnVjdGlvbihzdHJ1Y3Qgdm1fZXhpdCAqdm1leGl0KQoreworCWlu
dCBpbmRleDsKKworCXN0YXRpYyBjb25zdCBjaGFyICppb2Rlc2NbXSA9IHsKKwkJIm91dGIiLCAi
b3V0dyIsICJvdXRsIiwKKwkJImluYiIsICJpbnciLCAiaW5sIiwKKwkJIm91dHNiIiwgIm91dHN3
IiwgIm91dHNkIiwKKwkJImluc2IiLCAiaW5zdyIsICJpbnNkIiwKKwl9OworCisJc3dpdGNoICh2
bWV4aXQtPnUuaW5vdXQuYnl0ZXMpIHsKKwljYXNlIDE6CisJCWluZGV4ID0gMDsKKwkJYnJlYWs7
CisJY2FzZSAyOgorCQlpbmRleCA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWluZGV4ID0g
MjsKKwkJYnJlYWs7CisJfQorCisJaWYgKHZtZXhpdC0+dS5pbm91dC5pbikKKwkJaW5kZXggKz0g
MzsKKworCWlmICh2bWV4aXQtPnUuaW5vdXQuc3RyaW5nKQorCQlpbmRleCArPSA2OworCisJS0FT
U0VSVChpbmRleCA8IG5pdGVtcyhpb2Rlc2MpLCAoIiVzOiBpbnZhbGlkIGluZGV4ICVkIiwKKwkg
ICAgX19mdW5jX18sIGluZGV4KSk7CisKKwlyZXR1cm4gKGlvZGVzY1tpbmRleF0pOworfQorI2Vu
ZGlmCS8qIEtUUiAqLworCitzdGF0aWMgaW50CitlbXVsYXRlX2lub3V0X3BvcnQoc3RydWN0IHZt
ICp2bSwgaW50IHZjcHVpZCwgc3RydWN0IHZtX2V4aXQgKnZtZXhpdCwKKyAgICBib29sICpyZXR1
KQoreworCWlvcG9ydF9oYW5kbGVyX2Z1bmNfdCBoYW5kbGVyOworCXVpbnQzMl90IG1hc2ssIHZh
bDsKKwlpbnQgZXJyb3I7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIGhhbmRsZXIgZm9yIHRo
ZSBJL08gcG9ydCB0aGVuIHB1bnQgdG8gdXNlcnNwYWNlLgorCSAqLworCWlmICh2bWV4aXQtPnUu
aW5vdXQucG9ydCA+PSBNQVhfSU9QT1JUUyB8fAorCSAgICAoaGFuZGxlciA9IGlvcG9ydF9oYW5k
bGVyW3ZtZXhpdC0+dS5pbm91dC5wb3J0XSkgPT0gTlVMTCkgeworCQkqcmV0dSA9IHRydWU7CisJ
CXJldHVybiAoMCk7CisJfQorCisJbWFzayA9IHZpZV9zaXplMm1hc2sodm1leGl0LT51Lmlub3V0
LmJ5dGVzKTsKKworCWlmICghdm1leGl0LT51Lmlub3V0LmluKSB7CisJCXZhbCA9IHZtZXhpdC0+
dS5pbm91dC5lYXggJiBtYXNrOworCX0KKworCWVycm9yID0gKCpoYW5kbGVyKSh2bSwgdmNwdWlk
LCB2bWV4aXQtPnUuaW5vdXQuaW4sCisJICAgIHZtZXhpdC0+dS5pbm91dC5wb3J0LCB2bWV4aXQt
PnUuaW5vdXQuYnl0ZXMsICZ2YWwpOworCWlmIChlcnJvcikgeworCQkvKgorCQkgKiBUaGUgdmFs
dWUgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBpcyBhbHNvIHRoZSByZXR1cm4gdmFsdWUKKwkJ
ICogb2Ygdm1fcnVuKCkuIFRoaXMgbmVlZHMgdG8gYmUgYSBwb3NpdGl2ZSBudW1iZXIgb3RoZXJ3
aXNlIGl0CisJCSAqIGNhbiBiZSBpbnRlcnByZXRlZCBhcyBhICJwc2V1ZG8tZXJyb3IiIGxpa2Ug
RVJFU1RBUlQuCisJCSAqCisJCSAqIEVuZm9yY2UgdGhpcyBieSBtYXBwaW5nIGFsbCBlcnJvcnMg
dG8gRUlPLgorCQkgKi8KKwkJcmV0dXJuIChFSU8pOworCX0KKworCWlmICh2bWV4aXQtPnUuaW5v
dXQuaW4pIHsKKwkJdm1leGl0LT51Lmlub3V0LmVheCAmPSB+bWFzazsKKwkJdm1leGl0LT51Lmlu
b3V0LmVheCB8PSB2YWwgJiBtYXNrOworCQllcnJvciA9IHZtX3NldF9yZWdpc3Rlcih2bSwgdmNw
dWlkLCBWTV9SRUdfR1VFU1RfUkFYLAorCQkgICAgdm1leGl0LT51Lmlub3V0LmVheCk7CisJCUtB
U1NFUlQoZXJyb3IgPT0gMCwgKCJlbXVsYXRlX2lvcG9ydDogZXJyb3IgJWQgc2V0dGluZyBndWVz
dCAiCisJCSAgICAicmF4IHJlZ2lzdGVyIiwgZXJyb3IpKTsKKwl9CisJKnJldHUgPSBmYWxzZTsK
KwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitlbXVsYXRlX2lub3V0X3N0cihzdHJ1Y3Qg
dm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qgdm1fZXhpdCAqdm1leGl0LCBib29sICpyZXR1KQor
eworCSpyZXR1ID0gdHJ1ZTsKKwlyZXR1cm4gKDApOwkvKiBSZXR1cm4gdG8gdXNlcnNwYWNlIHRv
IGZpbmlzaCBlbXVsYXRpb24gKi8KK30KKworaW50Cit2bV9oYW5kbGVfaW5vdXQoc3RydWN0IHZt
ICp2bSwgaW50IHZjcHVpZCwgc3RydWN0IHZtX2V4aXQgKnZtZXhpdCwgYm9vbCAqcmV0dSkKK3sK
KwlpbnQgYnl0ZXMsIGVycm9yOworCisJYnl0ZXMgPSB2bWV4aXQtPnUuaW5vdXQuYnl0ZXM7CisJ
S0FTU0VSVChieXRlcyA9PSAxIHx8IGJ5dGVzID09IDIgfHwgYnl0ZXMgPT0gNCwKKwkgICAgKCJ2
bV9oYW5kbGVfaW5vdXQ6IGludmFsaWQgb3BlcmFuZCBzaXplICVkIiwgYnl0ZXMpKTsKKworCWlm
ICh2bWV4aXQtPnUuaW5vdXQuc3RyaW5nKQorCQllcnJvciA9IGVtdWxhdGVfaW5vdXRfc3RyKHZt
LCB2Y3B1aWQsIHZtZXhpdCwgcmV0dSk7CisJZWxzZQorCQllcnJvciA9IGVtdWxhdGVfaW5vdXRf
cG9ydCh2bSwgdmNwdWlkLCB2bWV4aXQsIHJldHUpOworCisJVkNQVV9DVFI0KHZtLCB2Y3B1aWQs
ICIlcyVzIDB4JTA0eDogJXMiLAorCSAgICB2bWV4aXQtPnUuaW5vdXQucmVwID8gInJlcCAiIDog
IiIsCisJICAgIGlub3V0X2luc3RydWN0aW9uKHZtZXhpdCksCisJICAgIHZtZXhpdC0+dS5pbm91
dC5wb3J0LAorCSAgICBlcnJvciA/ICJlcnJvciIgOiAoKnJldHUgPyAidXNlcnNwYWNlIiA6ICJo
YW5kbGVkIikpOworCisJcmV0dXJuIChlcnJvcik7Cit9CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9z
eXMvYW1kNjQvdm1tL3ZtbV9pb3BvcnQuaCAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV9pb3Bv
cnQuaAotLS0gdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV9pb3BvcnQuaAkyMDE2LTA5LTI5IDAw
OjI0OjU0LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2FtZDY0L3ZtbS92bW1faW9w
b3J0LmgJMjAxNi0xMS0zMCAxMDo1NjowNS43OTU5NDAwMDAgKzAwMDAKQEAgLTI5LDYgKzI5LDIy
IEBACiAjaWZuZGVmCV9WTU1fSU9QT1JUX0hfCiAjZGVmaW5lCV9WTU1fSU9QT1JUX0hfCiAKKyNk
ZWZpbmUgVk1NX0lPUE9SVF9SRUdfSEFORExFUgorI2lmZGVmIFZNTV9JT1BPUlRfUkVHX0hBTkRM
RVIKK3N0cnVjdCBpb3BvcnRfcmVnX2hhbmRsZXI7CitzdHJ1Y3QgaW9yZWdoOworCitzdHJ1Y3Qg
aW9yZWdoICppb3JlZ2hfaW5pdChzdHJ1Y3Qgdm0gKnZtKTsKK3ZvaWQgaW9yZWdoX2NsZWFudXAo
c3RydWN0IGlvcmVnaCAqaW9yZWdoKTsKKworaW50IHZtbV9pb3BvcnRfcmVnX2hhbmRsZXIoc3Ry
dWN0IHZtICp2bSwgdWludDE2X3QgcG9ydCwgdWludDE2X3QgaW4sCisJdWludDMyX3QgbWFza19k
YXRhLCB1aW50MzJfdCBkYXRhLCBlbnVtIHZtX2lvX3JlZ2hfdHlwZSB0eXBlLCB2b2lkICphcmcp
OworI2Vsc2UgLyogIVZNTV9JT1BPUlRfUkVHX0hBTkRMRVIgKi8KKyNkZWZpbmUgaW9yZWdoX2lu
aXQoXzEpCShOVUxMKQorI2RlZmluZSBpb3JlZ2hfY2xlYW51cChfMSkKKyNkZWZpbmUgdm1tX2lv
cG9ydF9yZWdfaGFuZGxlcihfMSwgXzIsIF8zLCBfNCxfNSwgXzYsIF83KSAoRUlOVkFMKQorI2Vu
ZGlmIC8qIFZNTV9JT1BPUlRfUkVHX0hBTkRMRVIgKi8KKwogdHlwZWRlZiBpbnQgKCppb3BvcnRf
aGFuZGxlcl9mdW5jX3QpKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsCiAgICAgYm9vbCBpbiwg
aW50IHBvcnQsIGludCBieXRlcywgdWludDMyX3QgKnZhbCk7CiAKZGlmZiAtdSAtciAtTiB1c3Iv
c3JjL3N5cy9hbWQ2NC92bW0vdm1tX2lvcG9ydC5oLm9yaWcgL3Vzci9zcmMvc3lzL2FtZDY0L3Zt
bS92bW1faW9wb3J0Lmgub3JpZwotLS0gdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV9pb3BvcnQu
aC5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9z
eXMvYW1kNjQvdm1tL3ZtbV9pb3BvcnQuaC5vcmlnCTIwMTYtMTEtMzAgMTA6NTI6NTkuNDA5MDYw
MDAwICswMDAwCkBAIC0wLDAgKzEsMzcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE0IFR5
Y2hvIE5pZ2h0aW5nYWxlIDx0eWNoby5uaWdodGluZ2FsZUBwbHVyaWJ1c25ldHdvcmtzLmNvbT4K
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFN
QUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvdm1tL3ZtbV9pb3Bv
cnQuaCAyNzM3MDYgMjAxNC0xMC0yNiAxOTowMzowNlogbmVlbCAkCisgKi8KKworI2lmbmRlZglf
Vk1NX0lPUE9SVF9IXworI2RlZmluZQlfVk1NX0lPUE9SVF9IXworCit0eXBlZGVmIGludCAoKmlv
cG9ydF9oYW5kbGVyX2Z1bmNfdCkoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwKKyAgICBib29s
IGluLCBpbnQgcG9ydCwgaW50IGJ5dGVzLCB1aW50MzJfdCAqdmFsKTsKKworaW50IHZtX2hhbmRs
ZV9pbm91dChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qgdm1fZXhpdCAqdm1lLCBi
b29sICpyZXR1KTsKKworI2VuZGlmCS8qIF9WTU1fSU9QT1JUX0hfICovCmRpZmYgLXUgLXIgLU4g
dXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV91c2VybWVtLmMgL3Vzci9zcmMvc3lzL2FtZDY0L3Zt
bS92bW1fdXNlcm1lbS5jCi0tLSB1c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3VzZXJtZW0uYwkx
OTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2FtZDY0
L3ZtbS92bW1fdXNlcm1lbS5jCTIwMTYtMTItMDEgMTQ6NDI6MzguNDEwNTk2MDAwICswMDAwCkBA
IC0wLDAgKzEsMTg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFN0ZWZhbm8gR2FyemFy
ZWxsYSAoc3RlZmFuby5nYXJ6YXJlbGxhQGdtYWlsLmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNI
IERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+
CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNs
dWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lz
L3NnbGlzdC5oPgorI2luY2x1ZGUgPHN5cy9sb2NrLmg+CisjaW5jbHVkZSA8c3lzL3J3bG9jay5o
PgorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisKKyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUg
PHZtL3ZtX3BhcmFtLmg+CisjaW5jbHVkZSA8dm0vcG1hcC5oPgorI2luY2x1ZGUgPHZtL3ZtX21h
cC5oPgorI2luY2x1ZGUgPHZtL3ZtX29iamVjdC5oPgorI2luY2x1ZGUgPHZtL3ZtX3BhZ2UuaD4K
KyNpbmNsdWRlIDx2bS92bV9wYWdlci5oPgorCisjaW5jbHVkZSA8bWFjaGluZS9tZF92YXIuaD4K
KworI2luY2x1ZGUgInZtbV9tZW0uaCIKKyNpbmNsdWRlICJ2bW1fdXNlcm1lbS5oIgorCisvKgor
ICogdXNlcm1lbSBmdW5jdGlvbnMgYWxsb3cgdXMgdG8gbWFwIGFuIGhvc3QgdXNlcnNwYWNlIGJ1
ZmZlciAoZWcuIGZyb20gYmh5dmUpCisgKiBpbiB0aGUgZ3Vlc3QgVk0uCisgKgorICogVGhpcyBm
ZWF0dXJlIGlzIHVzZWQgdG8gaW1wbGVtZW50IHB0bmV0bWFwIG9uIGJoeXZlLCBtYXBwaW5nIHRo
ZSBuZXRtYXAgbWVtb3J5CisgKiAocmV0dXJuZWQgYnkgdGhlIG1tYXAoKSBpbiB0aGUgYnl2aGUg
dXNlcnNwYWNlIGFwcGxpY2F0aW9uKSBpbiB0aGUgZ3Vlc3QgVk0uCisgKi8KKworLyogVE9ETzog
d2UgY2FuIGNyZWF0ZSBhIGR5bmFtaWNhbCBsaXN0IG9mIHVzZXJtZW0gKi8KKyNkZWZpbmUgTUFY
X1VTRVJNRU1TCTY0CisKK3N0YXRpYyBzdHJ1Y3QgdXNlcm1lbSB7CisJc3RydWN0IHZtc3BhY2Ug
ICAqdm1zcGFjZTsJLyogZ3Vlc3QgYWRkcmVzcyBzcGFjZSAqLworCXZtX3BhZGRyX3QJZ3BhOwkJ
LyogZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyAqLworCXNpemVfdAkJbGVuOworfSB1c2VybWVtc1tN
QVhfVVNFUk1FTVNdOworCitzdGF0aWMgaW50Cit2bW1fdXNlcm1lbV9hZGQoc3RydWN0IHZtc3Bh
Y2UgKnZtc3BhY2UsIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuKQoreworCWludCBpOworCisJ
Zm9yIChpID0gMDsgaSA8IE1BWF9VU0VSTUVNUzsgaSsrKSB7CisJCWlmICh1c2VybWVtc1tpXS5s
ZW4gPT0gMCkgeworCQkJdXNlcm1lbXNbaV0udm1zcGFjZSA9IHZtc3BhY2U7CisJCQl1c2VybWVt
c1tpXS5ncGEgPSBncGE7CisJCQl1c2VybWVtc1tpXS5sZW4gPSBsZW47CisJCQlicmVhazsKKwkJ
fQorCX0KKworCWlmIChpID09IE1BWF9VU0VSTUVNUykgeworCQlwcmludGYoInZtbV91c2VybWVt
X2FkZDogZW1wdHkgdXNlcm1lbSBzbG90IG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAoRU5PTUVN
KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordm1tX3VzZXJtZW1fZGVsKHN0
cnVjdCB2bXNwYWNlICp2bXNwYWNlLCB2bV9wYWRkcl90IGdwYSwgc2l6ZV90IGxlbikKK3sKKwlp
bnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfVVNFUk1FTVM7IGkrKykgeworCQlpZiAodXNl
cm1lbXNbaV0udm1zcGFjZSA9PSB2bXNwYWNlICYmIHVzZXJtZW1zW2ldLmdwYSA9PSBncGEKKwkJ
CQkmJiB1c2VybWVtc1tpXS5sZW4gPT0gbGVuKSB7CisJCQliemVybygmdXNlcm1lbXNbaV0sIHNp
emVvZihzdHJ1Y3QgdXNlcm1lbSkpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4g
MDsKK30KKworYm9vbGVhbl90Cit1c2VybWVtX21hcHBlZChzdHJ1Y3Qgdm1zcGFjZSAqdm1zcGFj
ZSwgdm1fcGFkZHJfdCBncGEpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1VT
RVJNRU1TOyBpKyspIHsKKwkJaWYgKHVzZXJtZW1zW2ldLnZtc3BhY2UgIT0gdm1zcGFjZSB8fCB1
c2VybWVtc1tpXS5sZW4gPT0gMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZ3BhID49IHVzZXJtZW1z
W2ldLmdwYSAmJgorCQkJCWdwYSA8IHVzZXJtZW1zW2ldLmdwYSArIHVzZXJtZW1zW2ldLmxlbikK
KwkJCXJldHVybiAoVFJVRSk7CisJfQorCXJldHVybiAoRkFMU0UpOworfQorCit2bV9vYmplY3Rf
dAordm1tX3VzZXJtZW1fYWxsb2Moc3RydWN0IHZtc3BhY2UgKnZtc3BhY2UsIHZtX3BhZGRyX3Qg
Z3BhLCBzaXplX3QgbGVuLAorCSAgICAgICB2b2lkICpidWYsIHN0cnVjdCB0aHJlYWQgKnRkKQor
eworCWludCBlcnJvcjsKKwl2bV9vYmplY3RfdCBvYmo7CisJdm1fbWFwX3QgbWFwOworCXZtX21h
cF9lbnRyeV90IGVudHJ5OworCXZtX3BpbmRleF90IGluZGV4OworCXZtX3Byb3RfdCBwcm90Owor
CWJvb2xlYW5fdCB3aXJlZDsKKworCW1hcCA9ICZ0ZC0+dGRfcHJvYy0+cF92bXNwYWNlLT52bV9t
YXA7CisJLyogbG9va3VwIHRoZSB2bV9vYmplY3QgdGhhdCBkZXNjcmliZSB1c2VyIGFkZHIgKi8K
KwllcnJvciA9IHZtX21hcF9sb29rdXAoJm1hcCwgKHVuc2lnbmVkIGxvbmcpYnVmLCBWTV9QUk9U
X1JXLCAmZW50cnksCisJCSZvYmosICZpbmRleCwgJnByb3QsICZ3aXJlZCk7CisKKwkvKiBtYXAg
dGggdm1fb2JqZWN0IGluIHRoZSB2bXNwYWNlICovCisJaWYgKG9iaiAhPSBOVUxMKSB7CisJCWVy
cm9yID0gdm1fbWFwX2ZpbmQoJnZtc3BhY2UtPnZtX21hcCwgb2JqLCBpbmRleCwgJmdwYSwgbGVu
LCAwLAorCQkJCSAgICBWTUZTX05PX1NQQUNFLCBWTV9QUk9UX1JXLCBWTV9QUk9UX1JXLCAwKTsK
KwkJaWYgKGVycm9yICE9IEtFUk5fU1VDQ0VTUykgeworCQkJdm1fb2JqZWN0X2RlYWxsb2NhdGUo
b2JqKTsKKwkJCW9iaiA9IE5VTEw7CisJCX0KKwl9CisJdm1fbWFwX2xvb2t1cF9kb25lKG1hcCwg
ZW50cnkpOworCisJLyogYWNxdWlyZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSB2bV9vYmplY3QgKi8K
KwlpZiAob2JqICE9IE5VTEwpIHsKKwkJdm1fb2JqZWN0X3JlZmVyZW5jZShvYmopOworCQl2bW1f
dXNlcm1lbV9hZGQodm1zcGFjZSwgZ3BhLCBsZW4pOworCX0KKworCXJldHVybiAob2JqKTsKK30K
Kwordm9pZAordm1tX3VzZXJtZW1fZnJlZShzdHJ1Y3Qgdm1zcGFjZSAqdm1zcGFjZSwgdm1fcGFk
ZHJfdCBncGEsIHNpemVfdCBsZW4pCit7CisJaW50IHJldDsKKworCXJldCAgPSB2bW1fdXNlcm1l
bV9kZWwodm1zcGFjZSwgZ3BhLCBsZW4pOworCWlmIChyZXQpIHsKKwkJLy9UT0RPIGNoZWNrIHJl
dHVybiB2YWx1ZSBvZiB2bV9tYXBfcmVtb3ZlID8KKwkJdm1fbWFwX3JlbW92ZSgmdm1zcGFjZS0+
dm1fbWFwLCBncGEsIGdwYSArIGxlbik7CisJCS8vVE9ETyBzaG91bGQgd2UgY2FsbCB2bV9vYmpl
Y3RfZGVhbGxvY2F0ZSA/CisJfQorfQorCit2b2lkCit2bW1fdXNlcm1lbV9jbGVhbnVwKHN0cnVj
dCB2bXNwYWNlICp2bXNwYWNlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9V
U0VSTUVNUzsgaSsrKSB7CisJCWlmICh1c2VybWVtc1tpXS52bXNwYWNlID09IHZtc3BhY2UpIHsK
KwkJCS8vVE9ETyBzYW1lIGFzIGFib3ZlCisJCQl2bV9tYXBfcmVtb3ZlKCZ2bXNwYWNlLT52bV9t
YXAsIHVzZXJtZW1zW2ldLmdwYSwKKwkJCQkgICAgICB1c2VybWVtc1tpXS5ncGEgKyB1c2VybWVt
c1tpXS5sZW4pOworCQkJYnplcm8oJnVzZXJtZW1zW2ldLCBzaXplb2Yoc3RydWN0IHVzZXJtZW0p
KTsKKwkJfQorCX0KK30KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3Vz
ZXJtZW0uYy5vcmlnIC91c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3VzZXJtZW0uYy5vcmlnCi0t
LSB1c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3VzZXJtZW0uYy5vcmlnCTE5NzAtMDEtMDEgMDE6
MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV91c2Vy
bWVtLmMub3JpZwkyMDE2LTExLTMwIDEwOjUyOjU5LjQxNTI1MDAwMCArMDAwMApAQCAtMCwwICsx
LDM3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBTdGVmYW5vIEdhcnphcmVsbGEgKHN0
ZWZhbm8uZ2FyemFyZWxsYUBnbWFpbC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVU
SE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0Uu
CisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNE
SUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lz
L3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9zZ2xpc3Qu
aD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9yd2xvY2suaD4KKyNpbmNs
dWRlIDxzeXMvcHJvYy5oPgorCisjaW5jbHVkZSA8dm0vdm0uaD4KKyNpbmNsdWRlIDx2bS92bV9w
YXJhbS5oPgorI2luY2x1ZGUgPHZtL3BtYXAuaD4KKyNpbmNsdWRlIDx2bS92bV9tYXAuaD4KKyNp
bmNsdWRlIDx2bS92bV9vYmplY3QuaD4KKyNpbmNsdWRlIDx2bS92bV9wYWdlLmg+CisjaW5jbHVk
ZSA8dm0vdm1fcGFnZXIuaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvbWRfdmFyLmg+CisKKyNpbmNs
dWRlICJ2bW1fbWVtLmgiCisjaW5jbHVkZSAidm1tX3VzZXJtZW0uaCIKKworLyoKKyAqIHVzZXJt
ZW0gZnVuY3Rpb25zIGFsbG93IHVzIHRvIG1hcCBhbiBob3N0IHVzZXJzcGFjZSBidWZmZXIgKGVn
LiBmcm9tIGJoeXZlKQorICogaW4gdGhlIGd1ZXN0IFZNLgorICoKKyAqIFRoaXMgZmVhdHVyZSBp
cyB1c2VkIHRvIGltcGxlbWVudCBwdG5ldG1hcCBvbiBiaHl2ZSwgbWFwcGluZyB0aGUgbmV0bWFw
IG1lbW9yeQorICogKHJldHVybmVkIGJ5IHRoZSBtbWFwKCkgaW4gdGhlIGJ5dmhlIHVzZXJzcGFj
ZSBhcHBsaWNhdGlvbikgaW4gdGhlIGd1ZXN0IFZNLgorICovCisKKy8qIFRPRE86IHdlIGNhbiBj
cmVhdGUgYSBkeW5hbWljYWwgbGlzdCBvZiB1c2VybWVtICovCisjZGVmaW5lIE1BWF9VU0VSTUVN
Uwk2NAorCitzdGF0aWMgc3RydWN0IHVzZXJtZW0geworCXN0cnVjdCB2bXNwYWNlICAgKnZtc3Bh
Y2U7CS8qIGd1ZXN0IGFkZHJlc3Mgc3BhY2UgKi8KKwl2bV9wYWRkcl90CWdwYTsJCS8qIGd1ZXN0
IHBoeXNpY2FsIGFkZHJlc3MgKi8KKwlzaXplX3QJCWxlbjsKK30gdXNlcm1lbXNbTUFYX1VTRVJN
RU1TXTsKKworc3RhdGljIGludAordm1tX3VzZXJtZW1fYWRkKHN0cnVjdCB2bXNwYWNlICp2bXNw
YWNlLCB2bV9wYWRkcl90IGdwYSwgc2l6ZV90IGxlbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9
IDA7IGkgPCBNQVhfVVNFUk1FTVM7IGkrKykgeworCQlpZiAodXNlcm1lbXNbaV0ubGVuID09IDAp
IHsKKwkJCXVzZXJtZW1zW2ldLnZtc3BhY2UgPSB2bXNwYWNlOworCQkJdXNlcm1lbXNbaV0uZ3Bh
ID0gZ3BhOworCQkJdXNlcm1lbXNbaV0ubGVuID0gbGVuOworCQkJYnJlYWs7CisJCX0KKwl9CisK
KwlpZiAoaSA9PSBNQVhfVVNFUk1FTVMpIHsKKwkJcHJpbnRmKCJ2bW1fdXNlcm1lbV9hZGQ6IGVt
cHR5IHVzZXJtZW0gc2xvdCBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQor
CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3ZtbV91c2VybWVtX2RlbChzdHJ1Y3Qgdm1z
cGFjZSAqdm1zcGFjZSwgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4pCit7CisJaW50IGk7CisK
Kwlmb3IgKGkgPSAwOyBpIDwgTUFYX1VTRVJNRU1TOyBpKyspIHsKKwkJaWYgKHVzZXJtZW1zW2ld
LnZtc3BhY2UgPT0gdm1zcGFjZSAmJiB1c2VybWVtc1tpXS5ncGEgPT0gZ3BhCisJCQkJJiYgdXNl
cm1lbXNbaV0ubGVuID09IGxlbikgeworCQkJYnplcm8oJnVzZXJtZW1zW2ldLCBzaXplb2Yoc3Ry
dWN0IHVzZXJtZW0pKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisK
K2Jvb2xlYW5fdAordXNlcm1lbV9tYXBwZWQoc3RydWN0IHZtc3BhY2UgKnZtc3BhY2UsIHZtX3Bh
ZGRyX3QgZ3BhKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9VU0VSTUVNUzsg
aSsrKSB7CisJCWlmICh1c2VybWVtc1tpXS52bXNwYWNlICE9IHZtc3BhY2UgfHwgdXNlcm1lbXNb
aV0ubGVuID09IDApCisJCQljb250aW51ZTsKKwkJaWYgKGdwYSA+PSB1c2VybWVtc1tpXS5ncGEg
JiYKKwkJCQlncGEgPCB1c2VybWVtc1tpXS5ncGEgKyB1c2VybWVtc1tpXS5sZW4pCisJCQlyZXR1
cm4gKFRSVUUpOworCX0KKwlyZXR1cm4gKEZBTFNFKTsKK30KKwordm1fb2JqZWN0X3QKK3ZtbV91
c2VybWVtX2FsbG9jKHN0cnVjdCB2bXNwYWNlICp2bXNwYWNlLCB2bV9wYWRkcl90IGdwYSwgc2l6
ZV90IGxlbiwKKwkgICAgICAgdm9pZCAqYnVmLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sKKwlpbnQg
ZXJyb3I7CisJdm1fb2JqZWN0X3Qgb2JqOworCXZtX21hcF90IG1hcDsKKwl2bV9tYXBfZW50cnlf
dCBlbnRyeTsKKwl2bV9waW5kZXhfdCBpbmRleDsKKwl2bV9wcm90X3QgcHJvdDsKKwlib29sZWFu
X3Qgd2lyZWQ7CisKKwltYXAgPSAmdGQtPnRkX3Byb2MtPnBfdm1zcGFjZS0+dm1fbWFwOworCS8q
IGxvb2t1cCB0aGUgdm1fb2JqZWN0IHRoYXQgZGVzY3JpYmUgdXNlciBhZGRyICovCisJZXJyb3Ig
PSB2bV9tYXBfbG9va3VwKCZtYXAsICh1bnNpZ25lZCBsb25nKWJ1ZiwgVk1fUFJPVF9SVywgJmVu
dHJ5LAorCQkmb2JqLCAmaW5kZXgsICZwcm90LCAmd2lyZWQpOworCisJLyogbWFwIHRoIHZtX29i
amVjdCBpbiB0aGUgdm1zcGFjZSAqLworCWlmIChvYmogIT0gTlVMTCkgeworCQllcnJvciA9IHZt
X21hcF9maW5kKCZ2bXNwYWNlLT52bV9tYXAsIG9iaiwgaW5kZXgsICZncGEsIGxlbiwgMCwKKwkJ
CQkgICAgVk1GU19OT19TUEFDRSwgVk1fUFJPVF9SVywgVk1fUFJPVF9SVywgMCk7CisJCWlmIChl
cnJvciAhPSBLRVJOX1NVQ0NFU1MpIHsKKwkJCXZtX29iamVjdF9kZWFsbG9jYXRlKG9iaik7CisJ
CQlvYmogPSBOVUxMOworCQl9CisJfQorCXZtX21hcF9sb29rdXBfZG9uZShtYXAsIGVudHJ5KTsK
KworCS8qIGFjcXVpcmUgdGhlIHJlZmVyZW5jZSB0byB0aGUgdm1fb2JqZWN0ICovCisJaWYgKG9i
aiAhPSBOVUxMKSB7CisJCXZtX29iamVjdF9yZWZlcmVuY2Uob2JqKTsKKwkJdm1tX3VzZXJtZW1f
YWRkKHZtc3BhY2UsIGdwYSwgbGVuKTsKKwl9CisKKwlyZXR1cm4gKG9iaik7Cit9CisKK3ZvaWQK
K3ZtbV91c2VybWVtX2ZyZWUoc3RydWN0IHZtc3BhY2UgKnZtc3BhY2UsIHZtX3BhZGRyX3QgZ3Bh
LCBzaXplX3QgbGVuKQoreworCWludCByZXQ7CisKKwlyZXQgID0gdm1tX3VzZXJtZW1fZGVsKHZt
c3BhY2UsIGdwYSwgbGVuKTsKKwlpZiAocmV0KSB7CisJCS8vVE9ETyBjaGVjayByZXR1cm4gdmFs
dWUgb2Ygdm1fbWFwX3JlbW92ZSA/CisJCXZtX21hcF9yZW1vdmUoJnZtc3BhY2UtPnZtX21hcCwg
Z3BhLCBncGEgKyBsZW4pOworCQkvL1RPRE8gc2hvdWxkIHdlIGNhbGwgdm1fb2JqZWN0X2RlYWxs
b2NhdGUgPworCX0KK30KKwordm9pZAordm1tX3VzZXJtZW1fY2xlYW51cChzdHJ1Y3Qgdm1zcGFj
ZSAqdm1zcGFjZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfVVNFUk1FTVM7
IGkrKykgeworCQlpZiAodXNlcm1lbXNbaV0udm1zcGFjZSA9PSB2bXNwYWNlKSB7CisJCQkvL1RP
RE8gc2FtZSBhcyBhYm92ZQorCQkJdm1fbWFwX3JlbW92ZSgmdm1zcGFjZS0+dm1fbWFwLCB1c2Vy
bWVtc1tpXS5ncGEsCisJCQkJICAgICAgdXNlcm1lbXNbaV0uZ3BhICsgdXNlcm1lbXNbaV0ubGVu
KTsKKwkJCWJ6ZXJvKCZ1c2VybWVtc1tpXSwgc2l6ZW9mKHN0cnVjdCB1c2VybWVtKSk7CisJCX0K
Kwl9Cit9CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFN0ZWZhbm8gR2FyemFyZWxsYSAoc3Rl
ZmFuby5nYXJ6YXJlbGxhQGdtYWlsLmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRI
T1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
CisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4K
KyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJ
RCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMv
c3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lzL3NnbGlzdC5o
PgorI2luY2x1ZGUgPHN5cy9sb2NrLmg+CisjaW5jbHVkZSA8c3lzL3J3bG9jay5oPgorI2luY2x1
ZGUgPHN5cy9wcm9jLmg+CisKKyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZtL3ZtX3Bh
cmFtLmg+CisjaW5jbHVkZSA8dm0vcG1hcC5oPgorI2luY2x1ZGUgPHZtL3ZtX21hcC5oPgorI2lu
Y2x1ZGUgPHZtL3ZtX29iamVjdC5oPgorI2luY2x1ZGUgPHZtL3ZtX3BhZ2UuaD4KKyNpbmNsdWRl
IDx2bS92bV9wYWdlci5oPgorCisjaW5jbHVkZSA8bWFjaGluZS9tZF92YXIuaD4KKworI2luY2x1
ZGUgInZtbV9tZW0uaCIKKyNpbmNsdWRlICJ2bW1fdXNlcm1lbS5oIgorCisvKgorICogdXNlcm1l
bSBmdW5jdGlvbnMgYWxsb3cgdXMgdG8gbWFwIGFuIGhvc3QgdXNlcnNwYWNlIGJ1ZmZlciAoZWcu
IGZyb20gYmh5dmUpCisgKiBpbiB0aGUgZ3Vlc3QgVk0uCisgKgorICogVGhpcyBmZWF0dXJlIGlz
IHVzZWQgdG8gaW1wbGVtZW50IHB0bmV0bWFwIG9uIGJoeXZlLCBtYXBwaW5nIHRoZSBuZXRtYXAg
bWVtb3J5CisgKiAocmV0dXJuZWQgYnkgdGhlIG1tYXAoKSBpbiB0aGUgYnl2aGUgdXNlcnNwYWNl
IGFwcGxpY2F0aW9uKSBpbiB0aGUgZ3Vlc3QgVk0uCisgKi8KKworLyogVE9ETzogd2UgY2FuIGNy
ZWF0ZSBhIGR5bmFtaWNhbCBsaXN0IG9mIHVzZXJtZW0gKi8KKyNkZWZpbmUgTUFYX1VTRVJNRU1T
CTY0CisKK3N0YXRpYyBzdHJ1Y3QgdXNlcm1lbSB7CisJc3RydWN0IHZtc3BhY2UgICAqdm1zcGFj
ZTsJLyogZ3Vlc3QgYWRkcmVzcyBzcGFjZSAqLworCXZtX3BhZGRyX3QJZ3BhOwkJLyogZ3Vlc3Qg
cGh5c2ljYWwgYWRkcmVzcyAqLworCXNpemVfdAkJbGVuOworfSB1c2VybWVtc1tNQVhfVVNFUk1F
TVNdOworCitzdGF0aWMgaW50Cit2bW1fdXNlcm1lbV9hZGQoc3RydWN0IHZtc3BhY2UgKnZtc3Bh
Y2UsIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuKQoreworCWludCBpOworCisJZm9yIChpID0g
MDsgaSA8IE1BWF9VU0VSTUVNUzsgaSsrKSB7CisJCWlmICh1c2VybWVtc1tpXS5sZW4gPT0gMCkg
eworCQkJdXNlcm1lbXNbaV0udm1zcGFjZSA9IHZtc3BhY2U7CisJCQl1c2VybWVtc1tpXS5ncGEg
PSBncGE7CisJCQl1c2VybWVtc1tpXS5sZW4gPSBsZW47CisJCQlicmVhazsKKwkJfQorCX0KKwor
CWlmIChpID09IE1BWF9VU0VSTUVNUykgeworCQlwcmludGYoInZtbV91c2VybWVtX2FkZDogZW1w
dHkgdXNlcm1lbSBzbG90IG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAoRU5PTUVNKTsKKwl9CisK
KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordm1tX3VzZXJtZW1fZGVsKHN0cnVjdCB2bXNw
YWNlICp2bXNwYWNlLCB2bV9wYWRkcl90IGdwYSwgc2l6ZV90IGxlbikKK3sKKwlpbnQgaTsKKwor
CWZvciAoaSA9IDA7IGkgPCBNQVhfVVNFUk1FTVM7IGkrKykgeworCQlpZiAodXNlcm1lbXNbaV0u
dm1zcGFjZSA9PSB2bXNwYWNlICYmIHVzZXJtZW1zW2ldLmdwYSA9PSBncGEKKwkJCQkmJiB1c2Vy
bWVtc1tpXS5sZW4gPT0gbGVuKSB7CisJCQliemVybygmdXNlcm1lbXNbaV0sIHNpemVvZihzdHJ1
Y3QgdXNlcm1lbSkpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwor
Ym9vbGVhbl90Cit1c2VybWVtX21hcHBlZChzdHJ1Y3Qgdm1zcGFjZSAqdm1zcGFjZSwgdm1fcGFk
ZHJfdCBncGEpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1VTRVJNRU1TOyBp
KyspIHsKKwkJaWYgKHVzZXJtZW1zW2ldLnZtc3BhY2UgIT0gdm1zcGFjZSB8fCB1c2VybWVtc1tp
XS5sZW4gPT0gMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZ3BhID49IHVzZXJtZW1zW2ldLmdwYSAm
JgorCQkJCWdwYSA8IHVzZXJtZW1zW2ldLmdwYSArIHVzZXJtZW1zW2ldLmxlbikKKwkJCXJldHVy
biAoVFJVRSk7CisJfQorCXJldHVybiAoRkFMU0UpOworfQorCit2bV9vYmplY3RfdAordm1tX3Vz
ZXJtZW1fYWxsb2Moc3RydWN0IHZtc3BhY2UgKnZtc3BhY2UsIHZtX3BhZGRyX3QgZ3BhLCBzaXpl
X3QgbGVuLAorCSAgICAgICB2b2lkICpidWYsIHN0cnVjdCB0aHJlYWQgKnRkKQoreworCWludCBl
cnJvcjsKKwl2bV9vYmplY3RfdCBvYmo7CisJdm1fbWFwX3QgbWFwOworCXZtX21hcF9lbnRyeV90
IGVudHJ5OworCXZtX3BpbmRleF90IGluZGV4OworCXZtX3Byb3RfdCBwcm90OworCWJvb2xlYW5f
dCB3aXJlZDsKKworCW1hcCA9ICZ0ZC0+dGRfcHJvYy0+cF92bXNwYWNlLT52bV9tYXA7CisJLyog
bG9va3VwIHRoZSB2bV9vYmplY3QgdGhhdCBkZXNjcmliZSB1c2VyIGFkZHIgKi8KKwllcnJvciA9
IHZtX21hcF9sb29rdXAoJm1hcCwgKHVuc2lnbmVkIGxvbmcpYnVmLCBWTV9QUk9UX1JXLCAmZW50
cnksCisJCSZvYmosICZpbmRleCwgJnByb3QsICZ3aXJlZCk7CisKKwkvKiBtYXAgdGggdm1fb2Jq
ZWN0IGluIHRoZSB2bXNwYWNlICovCisJaWYgKG9iaiAhPSBOVUxMKSB7CisJCWVycm9yID0gdm1f
bWFwX2ZpbmQoJnZtc3BhY2UtPnZtX21hcCwgb2JqLCBpbmRleCwgJmdwYSwgbGVuLCAwLAorCQkJ
CSAgICBWTUZTX05PX1NQQUNFLCBWTV9QUk9UX1JXLCBWTV9QUk9UX1JXLCAwKTsKKwkJaWYgKGVy
cm9yICE9IEtFUk5fU1VDQ0VTUykgeworCQkJdm1fb2JqZWN0X2RlYWxsb2NhdGUob2JqKTsKKwkJ
CW9iaiA9IE5VTEw7CisJCX0KKwl9CisJdm1fbWFwX2xvb2t1cF9kb25lKG1hcCwgZW50cnkpOwor
CisJLyogYWNxdWlyZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSB2bV9vYmplY3QgKi8KKwlpZiAob2Jq
ICE9IE5VTEwpIHsKKwkJdm1fb2JqZWN0X3JlZmVyZW5jZShvYmopOworCQl2bW1fdXNlcm1lbV9h
ZGQodm1zcGFjZSwgZ3BhLCBsZW4pOworCX0KKworCXJldHVybiAob2JqKTsKK30KKwordm9pZAor
dm1tX3VzZXJtZW1fZnJlZShzdHJ1Y3Qgdm1zcGFjZSAqdm1zcGFjZSwgdm1fcGFkZHJfdCBncGEs
IHNpemVfdCBsZW4pCit7CisJaW50IHJldDsKKworCXJldCAgPSB2bW1fdXNlcm1lbV9kZWwodm1z
cGFjZSwgZ3BhLCBsZW4pOworCWlmIChyZXQpIHsKKwkJLy9UT0RPIGNoZWNrIHJldHVybiB2YWx1
ZSBvZiB2bV9tYXBfcmVtb3ZlID8KKwkJdm1fbWFwX3JlbW92ZSgmdm1zcGFjZS0+dm1fbWFwLCBn
cGEsIGdwYSArIGxlbik7CisJCS8vVE9ETyBzaG91bGQgd2UgY2FsbCB2bV9vYmplY3RfZGVhbGxv
Y2F0ZSA/CisJfQorfQorCit2b2lkCit2bW1fdXNlcm1lbV9jbGVhbnVwKHN0cnVjdCB2bXNwYWNl
ICp2bXNwYWNlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9VU0VSTUVNUzsg
aSsrKSB7CisJCWlmICh1c2VybWVtc1tpXS52bXNwYWNlID09IHZtc3BhY2UpIHsKKwkJCS8vVE9E
TyBzYW1lIGFzIGFib3ZlCisJCQl2bV9tYXBfcmVtb3ZlKCZ2bXNwYWNlLT52bV9tYXAsIHVzZXJt
ZW1zW2ldLmdwYSwKKwkJCQkgICAgICB1c2VybWVtc1tpXS5ncGEgKyB1c2VybWVtc1tpXS5sZW4p
OworCQkJYnplcm8oJnVzZXJtZW1zW2ldLCBzaXplb2Yoc3RydWN0IHVzZXJtZW0pKTsKKwkJfQor
CX0KK30KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3VzZXJtZW0uaCAv
dXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV91c2VybWVtLmgKLS0tIHVzci9zcmMvc3lzL2FtZDY0
L3ZtbS92bW1fdXNlcm1lbS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisr
KyAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV91c2VybWVtLmgJMjAxNi0xMS0zMCAxMDo1Njow
NS44MDQyNDEwMDAgKzAwMDAKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgU3RlZmFubyBHYXJ6YXJlbGxhIChzdGVmYW5vLmdhcnphcmVsbGFAZ21haWwuY29tKQor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNp
Zm5kZWYJX1ZNTV9VU0VSTUVNX0hfCisjZGVmaW5lCV9WTU1fVVNFUk1FTV9IXworCitzdHJ1Y3Qg
dm07CisKK3N0cnVjdCB2bV9vYmplY3QgKnZtbV91c2VybWVtX2FsbG9jKHN0cnVjdCB2bXNwYWNl
ICosIHZtX3BhZGRyX3QgZ3BhLAorCQkJCSBzaXplX3QgbGVuLCB2b2lkICpidWYsIHN0cnVjdCB0
aHJlYWQgKnRkKTsKK3ZvaWQJCXZtbV91c2VybWVtX2ZyZWUoc3RydWN0IHZtc3BhY2UgKiwgdm1f
cGFkZHJfdCBncGEsIHNpemVfdCBsZW4pOwordm9pZAkJdm1tX3VzZXJtZW1fY2xlYW51cChzdHJ1
Y3Qgdm1zcGFjZSAqKTsKK2Jvb2xlYW5fdAl1c2VybWVtX21hcHBlZChzdHJ1Y3Qgdm1zcGFjZSAq
LCB2bV9wYWRkcl90IGdwYSk7CisKKyNlbmRpZgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBT
dGVmYW5vIEdhcnphcmVsbGEgKHN0ZWZhbm8uZ2FyemFyZWxsYUBnbWFpbC5jb20pCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAor
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK
KyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
CisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2lmbmRlZglf
Vk1NX1VTRVJNRU1fSF8KKyNkZWZpbmUJX1ZNTV9VU0VSTUVNX0hfCisKK3N0cnVjdCB2bTsKKwor
c3RydWN0IHZtX29iamVjdCAqdm1tX3VzZXJtZW1fYWxsb2Moc3RydWN0IHZtc3BhY2UgKiwgdm1f
cGFkZHJfdCBncGEsCisJCQkJIHNpemVfdCBsZW4sIHZvaWQgKmJ1Ziwgc3RydWN0IHRocmVhZCAq
dGQpOwordm9pZAkJdm1tX3VzZXJtZW1fZnJlZShzdHJ1Y3Qgdm1zcGFjZSAqLCB2bV9wYWRkcl90
IGdwYSwgc2l6ZV90IGxlbik7Cit2b2lkCQl2bW1fdXNlcm1lbV9jbGVhbnVwKHN0cnVjdCB2bXNw
YWNlICopOworYm9vbGVhbl90CXVzZXJtZW1fbWFwcGVkKHN0cnVjdCB2bXNwYWNlICosIHZtX3Bh
ZGRyX3QgZ3BhKTsKKworI2VuZGlmCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFN0ZWZhbm8g
R2FyemFyZWxsYSAoc3RlZmFuby5nYXJ6YXJlbGxhQGdtYWlsLmNvbSkKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisg
KiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaWZuZGVmCV9WTU1fVVNF
Uk1FTV9IXworI2RlZmluZQlfVk1NX1VTRVJNRU1fSF8KKworc3RydWN0IHZtOworCitzdHJ1Y3Qg
dm1fb2JqZWN0ICp2bW1fdXNlcm1lbV9hbGxvYyhzdHJ1Y3Qgdm1zcGFjZSAqLCB2bV9wYWRkcl90
IGdwYSwKKwkJCQkgc2l6ZV90IGxlbiwgdm9pZCAqYnVmLCBzdHJ1Y3QgdGhyZWFkICp0ZCk7Cit2
b2lkCQl2bW1fdXNlcm1lbV9mcmVlKHN0cnVjdCB2bXNwYWNlICosIHZtX3BhZGRyX3QgZ3BhLCBz
aXplX3QgbGVuKTsKK3ZvaWQJCXZtbV91c2VybWVtX2NsZWFudXAoc3RydWN0IHZtc3BhY2UgKik7
Citib29sZWFuX3QJdXNlcm1lbV9tYXBwZWQoc3RydWN0IHZtc3BhY2UgKiwgdm1fcGFkZHJfdCBn
cGEpOworCisjZW5kaWYKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3Vz
ZXJtZW0uaC5vcmlnIC91c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3VzZXJtZW0uaC5vcmlnCi0t
LSB1c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3VzZXJtZW0uaC5vcmlnCTE5NzAtMDEtMDEgMDE6
MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV91c2Vy
bWVtLmgub3JpZwkyMDE2LTExLTMwIDEwOjUyOjU5LjQxNzQzOTAwMCArMDAwMApAQCAtMCwwICsx
LDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFN0ZWZhbm8gR2FyemFyZWxsYSAoc3Rl
ZmFuby5nYXJ6YXJlbGxhQGdtYWlsLmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRI
T1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
CisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4K
KyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaWZuZGVmCV9WTU1fVVNFUk1FTV9IXworI2RlZmlu
ZQlfVk1NX1VTRVJNRU1fSF8KKworc3RydWN0IHZtOworCitzdHJ1Y3Qgdm1fb2JqZWN0ICp2bW1f
dXNlcm1lbV9hbGxvYyhzdHJ1Y3Qgdm1zcGFjZSAqLCB2bV9wYWRkcl90IGdwYSwKKwkJCQkgc2l6
ZV90IGxlbiwgdm9pZCAqYnVmLCBzdHJ1Y3QgdGhyZWFkICp0ZCk7Cit2b2lkCQl2bW1fdXNlcm1l
bV9mcmVlKHN0cnVjdCB2bXNwYWNlICosIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuKTsKK3Zv
aWQJCXZtbV91c2VybWVtX2NsZWFudXAoc3RydWN0IHZtc3BhY2UgKik7Citib29sZWFuX3QJdXNl
cm1lbV9tYXBwZWQoc3RydWN0IHZtc3BhY2UgKiwgdm1fcGFkZHJfdCBncGEpOworCisjZW5kaWYK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgU3RlZmFubyBHYXJ6YXJlbGxhIChzdGVmYW5vLmdh
cnphcmVsbGFAZ21haWwuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAq
ICRGcmVlQlNEJAorICovCisKKyNpZm5kZWYJX1ZNTV9VU0VSTUVNX0hfCisjZGVmaW5lCV9WTU1f
VVNFUk1FTV9IXworCitzdHJ1Y3Qgdm07CisKK3N0cnVjdCB2bV9vYmplY3QgKnZtbV91c2VybWVt
X2FsbG9jKHN0cnVjdCB2bXNwYWNlICosIHZtX3BhZGRyX3QgZ3BhLAorCQkJCSBzaXplX3QgbGVu
LCB2b2lkICpidWYsIHN0cnVjdCB0aHJlYWQgKnRkKTsKK3ZvaWQJCXZtbV91c2VybWVtX2ZyZWUo
c3RydWN0IHZtc3BhY2UgKiwgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4pOwordm9pZAkJdm1t
X3VzZXJtZW1fY2xlYW51cChzdHJ1Y3Qgdm1zcGFjZSAqKTsKK2Jvb2xlYW5fdAl1c2VybWVtX21h
cHBlZChzdHJ1Y3Qgdm1zcGFjZSAqLCB2bV9wYWRkcl90IGdwYSk7CisKKyNlbmRpZgpkaWZmIC11
IC1yIC1OIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfZW1fbmV0bWFwLmggL3Vzci9zcmMvc3lz
L2Rldi9uZXRtYXAvaWZfZW1fbmV0bWFwLmgKLS0tIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZf
ZW1fbmV0bWFwLmgJMjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Iv
c3JjL3N5cy9kZXYvbmV0bWFwL2lmX2VtX25ldG1hcC5oCTIwMTYtMTEtMjMgMTY6NTc6NTcuODQx
ODIyMDAwICswMDAwCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogLyoKLSAqICRGcmVlQlNEOiBy
ZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9pZl9lbV9uZXRtYXAuaCAyOTMzMzEgMjAxNi0wMS0w
NyAxNjo0Mjo0OFogc2JydW5vICQKKyAqICRGcmVlQlNEOiBoZWFkL3N5cy9kZXYvbmV0bWFwL2lm
X2VtX25ldG1hcC5oIDIzODk4NSAyMDEyLTA4LTAyIDExOjU5OjQzWiBsdWlnaSAkCiAgKgogICog
bmV0bWFwIHN1cHBvcnQgZm9yOiBlbS4KICAqCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvZGV2
L25ldG1hcC9pZl9pZ2JfbmV0bWFwLmggL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfaWdiX25l
dG1hcC5oCi0tLSB1c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2lmX2lnYl9uZXRtYXAuaAkyMDE2LTA5
LTI5IDAwOjI0OjQ3LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAv
aWZfaWdiX25ldG1hcC5oCTIwMTYtMTEtMjMgMTY6NTc6NTcuODQyNTQyMDAwICswMDAwCkBAIC0y
NCw3ICsyNCw3IEBACiAgKi8KIAogLyoKLSAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2
L25ldG1hcC9pZl9pZ2JfbmV0bWFwLmggMjg1MzQ5IDIwMTUtMDctMTAgMDU6NTE6MzZaIGx1aWdp
ICQKKyAqICRGcmVlQlNEOiBoZWFkL3N5cy9kZXYvbmV0bWFwL2lmX2lnYl9uZXRtYXAuaCAyNTYy
MDAgMjAxMy0xMC0wOSAxNzozMjo1MlogamZ2ICQKICAqCiAgKiBOZXRtYXAgc3VwcG9ydCBmb3Ig
aWdiLCBwYXJ0bHkgY29udHJpYnV0ZWQgYnkgQWhtZWQgS29vbGkKICAqIEZvciBkZXRhaWxzIG9u
IG5ldG1hcCBzdXBwb3J0IHBsZWFzZSBzZWUgaXhnYmVfbmV0bWFwLmgKZGlmZiAtdSAtciAtTiB1
c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2lmX2l4bF9uZXRtYXAuaCAvdXNyL3NyYy9zeXMvZGV2L25l
dG1hcC9pZl9peGxfbmV0bWFwLmgKLS0tIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfaXhsX25l
dG1hcC5oCTIwMTYtMDktMjkgMDA6MjQ6NDcuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9z
eXMvZGV2L25ldG1hcC9pZl9peGxfbmV0bWFwLmgJMjAxNi0xMS0yMyAxNjo1Nzo1Ny44NDI5Nzkw
MDAgKzAwMDAKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAvKgotICogJEZyZWVCU0Q6IHJlbGVu
Zy8xMS4wL3N5cy9kZXYvbmV0bWFwL2lmX2l4bF9uZXRtYXAuaCAyODUzNDkgMjAxNS0wNy0xMCAw
NTo1MTozNlogbHVpZ2kgJAorICogJEZyZWVCU0Q6IGhlYWQvc3lzL2Rldi9uZXRtYXAvaWZfaXhs
X25ldG1hcC5oIDI3OTIzMiAyMDE1LTAyLTI0IDA2OjIwOjUwWiBsdWlnaSAkCiAgKgogICogbmV0
bWFwIHN1cHBvcnQgZm9yOiBpeGwKICAqCkBAIC01OSw3ICs1OSw3IEBACiAvKgogICogZGV2aWNl
LXNwZWNpZmljIHN5c2N0bCB2YXJpYWJsZXM6CiAgKgotICogaXhsX2NyY3N0cmlwOiAwOiBrZWVw
IENSQyBpbiByeCBmcmFtZXMgKGRlZmF1bHQpLCAxOiBzdHJpcCBpdC4KKyAqIGl4bF9jcmNzdHJp
cDogMDogTklDIGtlZXBzIENSQyBpbiByeCBmcmFtZXMsIDE6IE5JQyBzdHJpcHMgaXQgKGRlZmF1
bHQpLgogICoJRHVyaW5nIHJlZ3VsYXIgb3BlcmF0aW9ucyB0aGUgQ1JDIGlzIHN0cmlwcGVkLCBi
dXQgb24gc29tZQogICoJaGFyZHdhcmUgcmVjZXB0aW9uIG9mIGZyYW1lcyBub3QgbXVsdGlwbGUg
b2YgNjQgaXMgc2xvd2VyLAogICoJc28gdXNpbmcgY3Jjc3RyaXA9MCBoZWxwcyBpbiBiZW5jaG1h
cmtzLgpAQCAtNzEsMTAgKzcxLDkgQEAKIC8qCiAgKiBUaGUgeGwgZHJpdmVyIGJ5IGRlZmF1bHQg
c3RyaXBzIENSQ3MgYW5kIHdlIGRvIG5vdCBvdmVycmlkZSBpdC4KICAqLwotaW50IGl4bF9yeF9t
aXNzLCBpeGxfcnhfbWlzc19idWZzLCBpeGxfY3Jjc3RyaXAgPSAxOwogI2lmIDAKIFNZU0NUTF9J
TlQoX2Rldl9uZXRtYXAsIE9JRF9BVVRPLCBpeGxfY3Jjc3RyaXAsCi0gICAgQ1RMRkxBR19SVywg
Jml4bF9jcmNzdHJpcCwgMSwgInN0cmlwIENSQyBvbiByeCBmcmFtZXMiKTsKKyAgICBDVExGTEFH
X1JXLCAmaXhsX2NyY3N0cmlwLCAxLCAiTklDIHN0cmlwcyBDUkMgb24gcnggZnJhbWVzIik7CiAj
ZW5kaWYKIFNZU0NUTF9JTlQoX2Rldl9uZXRtYXAsIE9JRF9BVVRPLCBpeGxfcnhfbWlzcywKICAg
ICBDVExGTEFHX1JXLCAmaXhsX3J4X21pc3MsIDAsICJwb3RlbnRpYWxseSBtaXNzZWQgcnggaW50
ciIpOwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfbGVtX25ldG1hcC5o
IC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2lmX2xlbV9uZXRtYXAuaAotLS0gdXNyL3NyYy9zeXMv
ZGV2L25ldG1hcC9pZl9sZW1fbmV0bWFwLmgJMjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAg
KzAxMDAKKysrIC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2lmX2xlbV9uZXRtYXAuaAkyMDE2LTEx
LTIzIDE2OjU3OjU3Ljg0MzMyNzAwMCArMDAwMApAQCAtMjUsNyArMjUsNyBAQAogCiAKIC8qCi0g
KiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2Rldi9uZXRtYXAvaWZfbGVtX25ldG1hcC5oIDI4
NTM0OSAyMDE1LTA3LTEwIDA1OjUxOjM2WiBsdWlnaSAkCisgKiAkRnJlZUJTRDogaGVhZC9zeXMv
ZGV2L25ldG1hcC9pZl9sZW1fbmV0bWFwLmggMjcxODQ5IDIwMTQtMDktMTkgMDM6NTE6MjZaIGds
ZWJpdXMgJAogICoKICAqIG5ldG1hcCBzdXBwb3J0IGZvcjogbGVtCiAgKgpAQCAtMzUsMTIgKzM1
LDggQEAKIAogI2luY2x1ZGUgPG5ldC9uZXRtYXAuaD4KICNpbmNsdWRlIDxzeXMvc2VsaW5mby5o
PgotI2luY2x1ZGUgPHZtL3ZtLmg+Ci0jaW5jbHVkZSA8dm0vcG1hcC5oPiAgICAvKiB2dG9waHlz
ID8gKi8KICNpbmNsdWRlIDxkZXYvbmV0bWFwL25ldG1hcF9rZXJuLmg+CiAKLWV4dGVybiBpbnQg
bmV0bWFwX2FkYXB0aXZlX2lvOwotCiAvKgogICogUmVnaXN0ZXIvdW5yZWdpc3Rlci4gV2UgYXJl
IGFscmVhZHkgdW5kZXIgbmV0bWFwIGxvY2suCiAgKi8KQEAgLTgxLDYgKzc3LDIyIEBACiB9CiAK
IAorc3RhdGljIHZvaWQKK2xlbV9uZXRtYXBfaW50cihzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5h
LCBpbnQgb25vZmYpCit7CisJc3RydWN0IGlmbmV0ICppZnAgPSBuYS0+aWZwOworCXN0cnVjdCBh
ZGFwdGVyICphZGFwdGVyID0gaWZwLT5pZl9zb2Z0YzsKKworCUVNX0NPUkVfTE9DSyhhZGFwdGVy
KTsKKwlpZiAob25vZmYpIHsKKwkJbGVtX2VuYWJsZV9pbnRyKGFkYXB0ZXIpOworCX0gZWxzZSB7
CisJCWxlbV9kaXNhYmxlX2ludHIoYWRhcHRlcik7CisJfQorCUVNX0NPUkVfVU5MT0NLKGFkYXB0
ZXIpOworfQorCisKIC8qCiAgKiBSZWNvbmNpbGUga2VybmVsIGFuZCB1c2VyIHZpZXcgb2YgdGhl
IHRyYW5zbWl0IHJpbmcuCiAgKi8KQEAgLTk5LDEwICsxMTEsNiBAQAogCiAJLyogZGV2aWNlLXNw
ZWNpZmljICovCiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBpZnAtPmlmX3NvZnRjOwotI2lm
ZGVmIE5JQ19QQVJBVklSVAotCXN0cnVjdCBwYXJhdmlydF9jc2IgKmNzYiA9IGFkYXB0ZXItPmNz
YjsKLQl1aW50NjRfdCAqY3NiZCA9ICh1aW50NjRfdCAqKShjc2IgKyAxKTsKLSNlbmRpZiAvKiBO
SUNfUEFSQVZJUlQgKi8KIAogCWJ1c19kbWFtYXBfc3luYyhhZGFwdGVyLT50eGRtYS5kbWFfdGFn
LCBhZGFwdGVyLT50eGRtYS5kbWFfbWFwLAogCQkJQlVTX0RNQVNZTkNfUE9TVFJFQUQpOwpAQCAt
MTEzLDE5ICsxMjEsNiBAQAogCiAJbm1faSA9IGtyaW5nLT5ucl9od2N1cjsKIAlpZiAobm1faSAh
PSBoZWFkKSB7CS8qIHdlIGhhdmUgbmV3IHBhY2tldHMgdG8gc2VuZCAqLwotI2lmZGVmIE5JQ19Q
QVJBVklSVAotCQlpbnQgZG9fa2ljayA9IDA7Ci0JCXVpbnQ2NF90IHQgPSAwOyAvLyB0aW1lc3Rh
bXAKLQkJaW50IG4gPSBoZWFkIC0gbm1faTsKLQkJaWYgKG4gPCAwKQotCQkJbiArPSBsaW0gKyAx
OwotCQlpZiAoY3NiKSB7Ci0JCQl0ID0gcmR0c2MoKTsgLyogbGFzdCB0aW1lc3RhbXAgKi8KLQkJ
CWNzYmRbMTZdICs9IHQgLSBjc2JkWzBdOyAvKiB0b3RhbCBXZyAqLwotCQkJY3NiZFsxN10gKz0g
bjsJCS8qIFdnIGNvdW50ICovCi0JCQljc2JkWzBdID0gdDsKLQkJfQotI2VuZGlmIC8qIE5JQ19Q
QVJBVklSVCAqLwogCQluaWNfaSA9IG5ldG1hcF9pZHhfazJuKGtyaW5nLCBubV9pKTsKIAkJd2hp
bGUgKG5tX2kgIT0gaGVhZCkgewogCQkJc3RydWN0IG5ldG1hcF9zbG90ICpzbG90ID0gJnJpbmct
PnNsb3Rbbm1faV07CkBAIC0xNjYsMzggKzE2MSw4IEBACiAJCWJ1c19kbWFtYXBfc3luYyhhZGFw
dGVyLT50eGRtYS5kbWFfdGFnLCBhZGFwdGVyLT50eGRtYS5kbWFfbWFwLAogCQkJQlVTX0RNQVNZ
TkNfUFJFUkVBRCB8IEJVU19ETUFTWU5DX1BSRVdSSVRFKTsKIAotI2lmZGVmIE5JQ19QQVJBVklS
VAotCQkvKiBzZXQgdW5jb25kaXRpb25hbGx5LCB0aGVuIGFsc28ga2ljayBpZiBuZWVkZWQgKi8K
LQkJaWYgKGNzYikgewotCQkJdCA9IHJkdHNjKCk7Ci0JCQlpZiAoY3NiLT5ob3N0X25lZWRfdHhr
aWNrID09IDIpIHsKLQkJCQkvKiBjYW4gY29tcHV0ZSBhbiB1cGRhdGUgb2YgZGVsdGEgKi8KLQkJ
CQlpbnQ2NF90IGRlbHRhID0gdCAtIGNzYmRbM107Ci0JCQkJaWYgKGRlbHRhIDwgMCkKLQkJCQkJ
ZGVsdGEgPSAtZGVsdGE7Ci0JCQkJaWYgKGNzYmRbOF0gPT0gMCB8fCBkZWx0YSA8IGNzYmRbOF0p
IHsKLQkJCQkJY3NiZFs4XSA9IGRlbHRhOwotCQkJCQljc2JkWzldKys7Ci0JCQkJfQotCQkJCWNz
YmRbMTBdKys7Ci0JCQl9Ci0JCQljc2ItPmd1ZXN0X3RkdCA9IG5pY19pOwotCQkJY3NiZFsxOF0g
Kz0gdCAtIGNzYmRbMF07IC8vIHRvdGFsIHdwCi0JCQljc2JkWzE5XSArPSBuOwotCQl9Ci0JCWlm
ICghY3NiIHx8ICFjc2ItPmd1ZXN0X2NzYl9vbiB8fCAoY3NiLT5ob3N0X25lZWRfdHhraWNrICYg
MSkpCi0JCQlkb19raWNrID0gMTsKLQkJaWYgKGRvX2tpY2spCi0jZW5kaWYgLyogTklDX1BBUkFW
SVJUICovCiAJCS8qIChyZSlzdGFydCB0aGUgdHggdW5pdCB1cCB0byBzbG90IG5pY19pIChleGNs
dWRlZCkgKi8KIAkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgRTEwMDBfVERUKDApLCBu
aWNfaSk7Ci0jaWZkZWYgTklDX1BBUkFWSVJUCi0JCWlmIChkb19raWNrKSB7Ci0JCQl1aW50NjRf
dCB0MSA9IHJkdHNjKCk7Ci0JCQljc2JkWzIwXSArPSB0MSAtIHQ7IC8vIHRvdGFsIE5wCi0JCQlj
c2JkWzIxXSsrOwotCQl9Ci0jZW5kaWYgLyogTklDX1BBUkFWSVJUICovCiAJfQogCiAJLyoKQEAg
LTIwNiw5MyArMTcxLDYgQEAKIAlpZiAodGlja3MgIT0ga3JpbmctPmxhc3RfcmVjbGFpbSB8fCBm
bGFncyAmIE5BRl9GT1JDRV9SRUNMQUlNIHx8IG5tX2tyX3R4ZW1wdHkoa3JpbmcpKSB7CiAJCWty
aW5nLT5sYXN0X3JlY2xhaW0gPSB0aWNrczsKIAkJLyogcmVjb3JkIGNvbXBsZXRlZCB0cmFuc21p
c3Npb25zIHVzaW5nIFRESCAqLwotI2lmZGVmIE5JQ19QQVJBVklSVAotCQkvKiBob3N0IHVwZGF0
ZXMgdGRoIHVuY29uZGl0aW9uYWxseSwgYW5kIHdlIGhhdmUKLQkJICogbm8gc2lkZSBlZmZlY3Rz
IG9uIHJlYWRzLCBzbyB3ZSBjYW4gcmVhZCBmcm9tIHRoZXJlCi0JCSAqIGluc3RlYWQgb2YgZXhp
dGluZy4KLQkJICovCi0JCWlmIChjc2IpIHsKLQkJICAgIHN0YXRpYyBpbnQgZHJhaW4gPSAwLCBu
b2RyYWluPTAsIGdvb2QgPSAwLCBiYWQgPSAwLCBmYWlsID0gMDsKLQkJICAgIHVfaW50IHggPSBh
ZGFwdGVyLT5uZXh0X3R4X3RvX2NsZWFuOwotCQkgICAgY3NiZFsxOV0rKzsgLy8gWFhYIGNvdW50
IHJlY2xhaW1zCi0JCSAgICBuaWNfaSA9IGNzYi0+aG9zdF90ZGg7Ci0JCSAgICBpZiAoY3NiLT5n
dWVzdF9jc2Jfb24pIHsKLQkJCWlmIChuaWNfaSA9PSB4KSB7Ci0JCQkgICAgYmFkKys7Ci0JCSAg
ICAJICAgIGNzYmRbMjRdKys7IC8vIGZhaWxlZCByZWNsYWltcwotCQkJICAgIC8qIG5vIHByb2dy
ZXNzLCByZXF1ZXN0IGtpY2sgYW5kIHJldHJ5ICovCi0JCQkgICAgY3NiLT5ndWVzdF9uZWVkX3R4
a2ljayA9IDE7Ci0JCQkgICAgbWIoKTsgLy8gWFhYIGJhcnJpZXIKLQkJICAgIAkgICAgbmljX2kg
PSBjc2ItPmhvc3RfdGRoOwotCQkJfSBlbHNlIHsKLQkJCSAgICBnb29kKys7Ci0JCQl9Ci0JCQlp
ZiAobmljX2kgIT0geCkgewotCQkJICAgIGNzYi0+Z3Vlc3RfbmVlZF90eGtpY2sgPSAyOwotCQkJ
ICAgIGlmIChuaWNfaSA9PSBjc2ItPmd1ZXN0X3RkdCkKLQkJCQlkcmFpbisrOwotCQkJICAgIGVs
c2UKLQkJCQlub2RyYWluKys7Ci0jaWYgMQotCQkJaWYgKG5ldG1hcF9hZGFwdGl2ZV9pbykgewot
CQkJICAgIC8qIG5ldyBtZWNoYW5pc206IGxhc3QgaGFsZiByaW5nIChvciBzbykKLQkJCSAgICAg
KiByZWxlYXNlZCBvbmUgc2xvdCBhdCBhIHRpbWUuCi0JCQkgICAgICogVGhpcyBlZmZlY3RpdmVs
eSBtYWtlcyB0aGUgc3lzdGVtIHNwaW4uCi0JCQkgICAgICoKLQkJCSAgICAgKiBUYWtlIG5leHRf
dG9fY2xlYW4gKyAxIGFzIGEgcmVmZXJlbmNlLgotCQkJICAgICAqIHRkaCBtdXN0IGJlIGFoZWFk
IG9yIGVxdWFsCi0JCQkgICAgICogT24gZW50cnksIHRoZSBsb2dpY2FsIG9yZGVyIGlzCi0JCQkg
ICAgICoJCXggPCB0ZGggPSBuaWNfaQotCQkJICAgICAqIFdlIGZpcnN0IHB1c2ggdGRoIHVwIHRv
IGF2b2lkIHdyYXBzLgotCQkJICAgICAqIFRoZSBsaW1pdCBpcyB0ZGgtbGwgKGhhbGYgcmluZyku
Ci0JCQkgICAgICogaWYgdGRoLTI1NiA8IHggd2UgcmVwb3J0IHg7Ci0JCQkgICAgICogZWxzZSB3
ZSByZXBvcnQgdGRoLTI1NgotCQkJICAgICAqLwotCQkJICAgIHVfaW50IHRkaCA9IG5pY19pOwot
CQkJICAgIHVfaW50IGxsID0gY3NiZFsxNV07Ci0JCQkgICAgdV9pbnQgZGVsdGEgPSBsaW0vODsK
LQkJCSAgICBpZiAobmV0bWFwX2FkYXB0aXZlX2lvID09IDIgfHwgbGwgPiBkZWx0YSkKLQkJCQlj
c2JkWzE1XSA9IGxsID0gZGVsdGE7Ci0JCQkgICAgZWxzZSBpZiAobmV0bWFwX2FkYXB0aXZlX2lv
ID09IDEgJiYgbGwgPiAxKSB7Ci0JCQkJY3NiZFsxNV0tLTsKLQkJCSAgICB9Ci0KLQkJCSAgICBp
ZiAobmljX2kgPj0ga3JpbmctPm5rcl9udW1fc2xvdHMpIHsKLQkJCQlSRCg1LCAiYmFkIG5pY19p
ICVkIG9uIGlucHV0IiwgbmljX2kpOwotCQkJICAgIH0KLQkJCSAgICB4ID0gbm1fbmV4dCh4LCBs
aW0pOwotCQkJICAgIGlmICh0ZGggPCB4KQotCQkJCXRkaCArPSBsaW0gKyAxOwotCQkJICAgIGlm
ICh0ZGggPD0geCArIGxsKSB7Ci0JCQkJbmljX2kgPSB4OwotCQkJCWNzYmRbMjVdKys7IC8vcmVw
b3J0IG4gKyAxOwotCQkJICAgIH0gZWxzZSB7Ci0JCQkJdGRoID0gbmljX2k7Ci0JCQkJaWYgKHRk
aCA8IGxsKQotCQkJCSAgICB0ZGggKz0gbGltICsgMTsKLQkJCQluaWNfaSA9IHRkaCAtIGxsOwot
CQkJCWNzYmRbMjZdKys7IC8vIHJlcG9ydCB0ZGggLSBsbAotCQkJICAgIH0KLQkJCX0KLSNlbmRp
ZgotCQkJfSBlbHNlIHsKLQkJCSAgICAvKiB3ZSBzdG9wLCBjb3VudCB3aGV0aGVyIHdlIGFyZSBp
ZGxlIG9yIG5vdCAqLwotCQkJICAgIGludCBiaF9hY3RpdmUgPSBjc2ItPmhvc3RfbmVlZF90eGtp
Y2sgJiAyID8gNCA6IDA7Ci0JCQkgICAgY3NiZFsyNysgY3NiLT5ob3N0X25lZWRfdHhraWNrXSsr
OwotCQkJICAgIGlmIChuZXRtYXBfYWRhcHRpdmVfaW8gPT0gMSkgewotCQkJCWlmIChiaF9hY3Rp
dmUgJiYgY3NiZFsxNV0gPiAxKQotCQkJCSAgICBjc2JkWzE1XS0tOwotCQkJCWVsc2UgaWYgKCFi
aF9hY3RpdmUgJiYgY3NiZFsxNV0gPCBsaW0vMikKLQkJCQkgICAgY3NiZFsxNV0rKzsKLQkJCSAg
ICB9Ci0JCQkgICAgYmFkLS07Ci0JCQkgICAgZmFpbCsrOwotCQkJfQotCQkgICAgfQotCQkgICAg
UkQoMSwgImRyYWluICVkIG5vZHJhaW4gJWQgZ29vZCAlZCByZXRyeSAlZCBmYWlsICVkIiwKLQkJ
CWRyYWluLCBub2RyYWluLCBnb29kLCBiYWQsIGZhaWwpOwotCQl9IGVsc2UKLSNlbmRpZiAvKiAh
TklDX1BBUkFWSVJUICovCiAJCW5pY19pID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBF
MTAwMF9UREgoMCkpOwogCQlpZiAobmljX2kgPj0ga3JpbmctPm5rcl9udW1fc2xvdHMpIHsgLyog
WFhYIGNhbiBpdCBoYXBwZW4gPyAqLwogCQkJRCgiVERIIHdyYXAgJWQiLCBuaWNfaSk7CkBAIC0z
MjQsMjEgKzIwMiwxMCBAQAogCiAJLyogZGV2aWNlLXNwZWNpZmljICovCiAJc3RydWN0IGFkYXB0
ZXIgKmFkYXB0ZXIgPSBpZnAtPmlmX3NvZnRjOwotI2lmZGVmIE5JQ19QQVJBVklSVAotCXN0cnVj
dCBwYXJhdmlydF9jc2IgKmNzYiA9IGFkYXB0ZXItPmNzYjsKLQl1aW50MzJfdCBjc2JfbW9kZSA9
IGNzYiAmJiBjc2ItPmd1ZXN0X2NzYl9vbjsKLQl1aW50MzJfdCBkb19ob3N0X3J4a2ljayA9IDA7
Ci0jZW5kaWYgLyogTklDX1BBUkFWSVJUICovCiAKIAlpZiAoaGVhZCA+IGxpbSkKIAkJcmV0dXJu
IG5ldG1hcF9yaW5nX3JlaW5pdChrcmluZyk7CiAKLSNpZmRlZiBOSUNfUEFSQVZJUlQKLQlpZiAo
Y3NiX21vZGUpIHsKLQkJZm9yY2VfdXBkYXRlID0gMTsKLQkJY3NiLT5ndWVzdF9uZWVkX3J4a2lj
ayA9IDA7Ci0JfQotI2VuZGlmIC8qIE5JQ19QQVJBVklSVCAqLwogCS8qIFhYWCBjaGVjayBzeW5j
IG1vZGVzICovCiAJYnVzX2RtYW1hcF9zeW5jKGFkYXB0ZXItPnJ4ZG1hLmRtYV90YWcsIGFkYXB0
ZXItPnJ4ZG1hLmRtYV9tYXAsCiAJCQlCVVNfRE1BU1lOQ19QT1NUUkVBRCB8IEJVU19ETUFTWU5D
X1BPU1RXUklURSk7CkBAIC0zNTcsMjMgKzIyNCw2IEBACiAJCQl1aW50MzJfdCBzdGF0ZXJyID0g
bGUzMnRvaChjdXJyLT5zdGF0dXMpOwogCQkJaW50IGxlbjsKIAotI2lmZGVmIE5JQ19QQVJBVklS
VAotCQkJaWYgKGNzYl9tb2RlKSB7Ci0JCQkgICAgaWYgKChzdGF0ZXJyICYgRTEwMDBfUlhEX1NU
QVRfREQpID09IDApIHsKLQkJCQkvKiBkb24ndCBib3RoZXIgdG8gcmV0cnkgaWYgbW9yZSB0aGFu
IDEgcGt0ICovCi0JCQkJaWYgKG4gPiAxKQotCQkJCSAgICBicmVhazsKLQkJCQljc2ItPmd1ZXN0
X25lZWRfcnhraWNrID0gMTsKLQkJCQl3bWIoKTsKLQkJCQlzdGF0ZXJyID0gbGUzMnRvaChjdXJy
LT5zdGF0dXMpOwotCQkJCWlmICgoc3RhdGVyciAmIEUxMDAwX1JYRF9TVEFUX0REKSA9PSAwKSB7
Ci0JCQkJICAgIGJyZWFrOwotCQkJCX0gZWxzZSB7IC8qIHdlIGFyZSBnb29kICovCi0JCQkJICAg
Y3NiLT5ndWVzdF9uZWVkX3J4a2ljayA9IDA7Ci0JCQkJfQotCQkJICAgIH0KLQkJCX0gZWxzZQot
I2VuZGlmIC8qIE5JQ19QQVJBVklSVCAqLwogCQkJaWYgKChzdGF0ZXJyICYgRTEwMDBfUlhEX1NU
QVRfREQpID09IDApCiAJCQkJYnJlYWs7CiAJCQlsZW4gPSBsZTE2dG9oKGN1cnItPmxlbmd0aCkg
LSA0OyAvLyBDUkMKQEAgLTM5MCwxOCArMjQwLDYgQEAKIAkJCW5pY19pID0gbm1fbmV4dChuaWNf
aSwgbGltKTsKIAkJfQogCQlpZiAobikgeyAvKiB1cGRhdGUgdGhlIHN0YXRlIHZhcmlhYmxlcyAq
LwotI2lmZGVmIE5JQ19QQVJBVklSVAotCQkJaWYgKGNzYl9tb2RlKSB7Ci0JCQkgICAgaWYgKG4g
PiAxKSB7Ci0JCQkJLyogbGVhdmUgb25lIHNwYXJlIGJ1ZmZlciBzbyB3ZSBhdm9pZCByeGtpY2tz
ICovCi0JCQkJbm1faSA9IG5tX3ByZXYobm1faSwgbGltKTsKLQkJCQluaWNfaSA9IG5tX3ByZXYo
bmljX2ksIGxpbSk7Ci0JCQkJbi0tOwotCQkJICAgIH0gZWxzZSB7Ci0JCQkJY3NiLT5ndWVzdF9u
ZWVkX3J4a2ljayA9IDE7Ci0JCQkgICAgfQotCQkJfQotI2VuZGlmIC8qIE5JQ19QQVJBVklSVCAq
LwogCQkJTkQoIiVkIG5ldyBwYWNrZXRzIGF0IG5pYyAlZCBubSAlZCB0YWlsICVkIiwKIAkJCQlu
LAogCQkJCWFkYXB0ZXItPm5leHRfcnhfZGVzY190b19jaGVjaywKQEAgLTQ0MCwxMCArMjc4LDYg
QEAKIAkJCWN1cnItPnN0YXR1cyA9IDA7CiAJCQlidXNfZG1hbWFwX3N5bmMoYWRhcHRlci0+cnh0
YWcsIHJ4YnVmLT5tYXAsCiAJCQkgICAgQlVTX0RNQVNZTkNfUFJFUkVBRCk7Ci0jaWZkZWYgTklD
X1BBUkFWSVJUCi0JCQlpZiAoY3NiX21vZGUgJiYgY3NiLT5ob3N0X3J4a2lja19hdCA9PSBuaWNf
aSkKLQkJCQlkb19ob3N0X3J4a2ljayA9IDE7Ci0jZW5kaWYgLyogTklDX1BBUkFWSVJUICovCiAJ
CQlubV9pID0gbm1fbmV4dChubV9pLCBsaW0pOwogCQkJbmljX2kgPSBubV9uZXh0KG5pY19pLCBs
aW0pOwogCQl9CkBAIC00NTUsMTIgKzI4OSw2IEBACiAJCSAqIHNvIG1vdmUgbmljX2kgYmFjayBi
eSBvbmUgdW5pdAogCQkgKi8KIAkJbmljX2kgPSBubV9wcmV2KG5pY19pLCBsaW0pOwotI2lmZGVm
IE5JQ19QQVJBVklSVAotCQkvKiBzZXQgdW5jb25kaXRpb25hbGx5LCB0aGVuIGFsc28ga2ljayBp
ZiBuZWVkZWQgKi8KLQkJaWYgKGNzYikKLQkJCWNzYi0+Z3Vlc3RfcmR0ID0gbmljX2k7Ci0JCWlm
ICghY3NiX21vZGUgfHwgZG9faG9zdF9yeGtpY2spCi0jZW5kaWYgLyogTklDX1BBUkFWSVJUICov
CiAJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIEUxMDAwX1JEVCgwKSwgbmljX2kpOwog
CX0KIApAQCAtNDg2LDYgKzMxNCw3IEBACiAJbmEubm1fcnhzeW5jID0gbGVtX25ldG1hcF9yeHN5
bmM7CiAJbmEubm1fcmVnaXN0ZXIgPSBsZW1fbmV0bWFwX3JlZzsKIAluYS5udW1fdHhfcmluZ3Mg
PSBuYS5udW1fcnhfcmluZ3MgPSAxOworCW5hLm5tX2ludHIgPSBsZW1fbmV0bWFwX2ludHI7CiAJ
bmV0bWFwX2F0dGFjaCgmbmEpOwogfQogCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvZGV2L25l
dG1hcC9pZl9wdG5ldC5jIC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2lmX3B0bmV0LmMKLS0tIHVz
ci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfcHRuZXQuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw
MDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfcHRuZXQuYwkyMDE2LTEx
LTIzIDE2OjU3OjU3Ljg0NDYyODAwMCArMDAwMApAQCAtMCwwICsxLDIyNzYgQEAKKy8qLQorICog
Q29weXJpZ2h0IChjKSAyMDE2LCBWaW5jZW56byBNYWZmaW9uZQorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMs
IGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAq
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNE
JAorICovCisKKy8qIERyaXZlciBmb3IgcHRuZXQgcGFyYXZpcnR1YWxpemVkIG5ldHdvcmsgZGV2
aWNlLiAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMu
aD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNs
dWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tpby5oPgorI2luY2x1ZGUgPHN5
cy9tYnVmLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUu
aD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2lu
Y2x1ZGUgPHN5cy9sb2NrLmg+CisjaW5jbHVkZSA8c3lzL211dGV4Lmg+CisjaW5jbHVkZSA8c3lz
L3Rhc2txdWV1ZS5oPgorI2luY2x1ZGUgPHN5cy9zbXAuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5o
PgorI2luY2x1ZGUgPG1hY2hpbmUvc21wLmg+CisKKyNpbmNsdWRlIDx2bS91bWEuaD4KKyNpbmNs
dWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZtL3BtYXAuaD4KKworI2luY2x1ZGUgPG5ldC9ldGhl
cm5ldC5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNp
bmNsdWRlIDxuZXQvaWZfYXJwLmg+CisjaW5jbHVkZSA8bmV0L2lmX2RsLmg+CisjaW5jbHVkZSA8
bmV0L2lmX3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0L2lmX21lZGlhLmg+CisjaW5jbHVkZSA8bmV0
L2lmX3ZsYW5fdmFyLmg+CisjaW5jbHVkZSA8bmV0L2JwZi5oPgorCisjaW5jbHVkZSA8bmV0aW5l
dC9pbl9zeXN0bS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0
L2lwLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pcDYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0Ni9pcDZf
dmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3RjcC5o
PgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cC5oPgorCisjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4K
KyNpbmNsdWRlIDxtYWNoaW5lL3Jlc291cmNlLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2lu
Y2x1ZGUgPHN5cy9ybWFuLmg+CisKKyNpbmNsdWRlIDxkZXYvcGNpL3BjaXZhci5oPgorI2luY2x1
ZGUgPGRldi9wY2kvcGNpcmVnLmg+CisKKyNpbmNsdWRlICJvcHRfaW5ldC5oIgorI2luY2x1ZGUg
Im9wdF9pbmV0Ni5oIgorCisjaW5jbHVkZSA8c3lzL3NlbGluZm8uaD4KKyNpbmNsdWRlIDxuZXQv
bmV0bWFwLmg+CisjaW5jbHVkZSA8ZGV2L25ldG1hcC9uZXRtYXBfa2Vybi5oPgorI2luY2x1ZGUg
PG5ldC9uZXRtYXBfdmlydC5oPgorI2luY2x1ZGUgPGRldi9uZXRtYXAvbmV0bWFwX21lbTIuaD4K
KyNpbmNsdWRlIDxkZXYvdmlydGlvL25ldHdvcmsvdmlydGlvX25ldC5oPgorCisjaWZuZGVmIFBU
TkVUX0NTQl9BTExPQworI2Vycm9yICJObyBzdXBwb3J0IGZvciBvbi1kZXZpY2UgQ1NCIgorI2Vu
ZGlmCisKKyNpZm5kZWYgSU5FVAorI2Vycm9yICJJTkVUIG5vdCBkZWZpbmVkLCBjYW5ub3Qgc3Vw
cG9ydCBvZmZsb2FkaW5ncyIKKyNlbmRpZgorCisjaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gMTEw
MDAwMAorc3RhdGljIHVpbnQ2NF90CXB0bmV0X2dldF9jb3VudGVyKGlmX3QsIGlmdF9jb3VudGVy
KTsKKyNlbHNlCit0eXBlZGVmIHN0cnVjdCBpZm5ldCAqaWZfdDsKKyNkZWZpbmUgaWZfZ2V0c29m
dGMoX2lmcCkgICAoX2lmcCktPmlmX3NvZnRjCisjZW5kaWYKKworLy8jZGVmaW5lIFBUTkVUTUFQ
X1NUQVRTCisvLyNkZWZpbmUgREVCVUcKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkcoeCkgeAor
I2Vsc2UgICAvKiAhREVCVUcgKi8KKyNkZWZpbmUgREJHKHgpCisjZW5kaWYgIC8qICFERUJVRyAq
LworCitleHRlcm4gaW50IHB0bmV0X3ZuZXRfaGRyOyAvKiBUdW5hYmxlIHBhcmFtZXRlciAqLwor
CitzdHJ1Y3QgcHRuZXRfc29mdGM7CisKK3N0cnVjdCBwdG5ldF9xdWV1ZV9zdGF0cyB7CisJdWlu
dDY0X3QJcGFja2V0czsgLyogaWZfW2lvXXBhY2tldHMgKi8KKwl1aW50NjRfdAlieXRlczsJIC8q
IGlmX1tpb11ieXRlcyAqLworCXVpbnQ2NF90CWVycm9yczsJIC8qIGlmX1tpb11lcnJvcnMgKi8K
Kwl1aW50NjRfdAlpcWRyb3BzOyAvKiBpZl9pcWRyb3BzICovCisJdWludDY0X3QJbWNhc3RzOyAg
LyogaWZfW2lvXW1jYXN0cyAqLworI2lmZGVmIFBUTkVUTUFQX1NUQVRTCisJdWludDY0X3QJaW50
cnM7CisJdWludDY0X3QJa2lja3M7CisjZW5kaWYgLyogUFRORVRNQVBfU1RBVFMgKi8KK307CisK
K3N0cnVjdCBwdG5ldF9xdWV1ZSB7CisJc3RydWN0IHB0bmV0X3NvZnRjCQkqc2M7CisJc3RydWN0
CQkJCXJlc291cmNlICppcnE7CisJdm9pZAkJCQkqY29va2llOworCWludAkJCQlrcmluZ19pZDsK
KwlzdHJ1Y3QgcHRuZXRfcmluZwkJKnB0cmluZzsKKwl1bnNpZ25lZCBpbnQJCQlraWNrOworCXN0
cnVjdCBtdHgJCQlsb2NrOworCXN0cnVjdCBidWZfcmluZwkJCSpidWZyaW5nOyAvKiBmb3IgVFgg
cXVldWVzICovCisJc3RydWN0IHB0bmV0X3F1ZXVlX3N0YXRzCXN0YXRzOworI2lmZGVmIFBUTkVU
TUFQX1NUQVRTCisJc3RydWN0IHB0bmV0X3F1ZXVlX3N0YXRzCWxhc3Rfc3RhdHM7CisjZW5kaWYg
LyogUFRORVRNQVBfU1RBVFMgKi8KKwlzdHJ1Y3QgdGFza3F1ZXVlCQkqdGFza3E7CisJc3RydWN0
IHRhc2sJCQl0YXNrOworCWNoYXIJCQkJbG9ja19uYW1lWzE2XTsKK307CisKKyNkZWZpbmUgUFRO
RVRfUV9MT0NLKF9wcSkJbXR4X2xvY2soJihfcHEpLT5sb2NrKQorI2RlZmluZSBQVE5FVF9RX1RS
WUxPQ0soX3BxKQltdHhfdHJ5bG9jaygmKF9wcSktPmxvY2spCisjZGVmaW5lIFBUTkVUX1FfVU5M
T0NLKF9wcSkJbXR4X3VubG9jaygmKF9wcSktPmxvY2spCisKK3N0cnVjdCBwdG5ldF9zb2Z0YyB7
CisJZGV2aWNlX3QJCWRldjsKKwlpZl90CQkJaWZwOworCXN0cnVjdCBpZm1lZGlhCQltZWRpYTsK
KwlzdHJ1Y3QgbXR4CQlsb2NrOworCWNoYXIJCQlsb2NrX25hbWVbMTZdOworCWNoYXIJCQlod2Fk
ZHJbRVRIRVJfQUREUl9MRU5dOworCisJLyogTWlycm9yIG9mIFBURkVBVCByZWdpc3Rlci4gKi8K
Kwl1aW50MzJfdAkJcHRmZWF0dXJlczsKKwl1bnNpZ25lZCBpbnQJCXZuZXRfaGRyX2xlbjsKKwor
CS8qIFBDSSBCQVJzIHN1cHBvcnQuICovCisJc3RydWN0IHJlc291cmNlCQkqaW9tZW07CisJc3Ry
dWN0IHJlc291cmNlCQkqbXNpeF9tZW07CisKKwl1bnNpZ25lZCBpbnQJCW51bV9yaW5nczsKKwl1
bnNpZ25lZCBpbnQJCW51bV90eF9yaW5nczsKKwlzdHJ1Y3QgcHRuZXRfcXVldWUJKnF1ZXVlczsK
KwlzdHJ1Y3QgcHRuZXRfcXVldWUJKnJ4cXVldWVzOworCXN0cnVjdCBwdG5ldF9jc2IJKmNzYjsK
KworCXVuc2lnbmVkIGludAkJbWluX3R4X3NwYWNlOworCisJc3RydWN0IG5ldG1hcF9wdF9ndWVz
dF9hZGFwdGVyICpwdG5hOworCisJc3RydWN0IGNhbGxvdXQJCXRpY2s7CisjaWZkZWYgUFRORVRN
QVBfU1RBVFMKKwlzdHJ1Y3QgdGltZXZhbAkJbGFzdF90czsKKyNlbmRpZiAvKiBQVE5FVE1BUF9T
VEFUUyAqLworfTsKKworI2RlZmluZSBQVE5FVF9DT1JFX0xPQ0soX3NjKQltdHhfbG9jaygmKF9z
YyktPmxvY2spCisjZGVmaW5lIFBUTkVUX0NPUkVfVU5MT0NLKF9zYykJbXR4X3VubG9jaygmKF9z
YyktPmxvY2spCisKK3N0YXRpYyBpbnQJcHRuZXRfcHJvYmUoZGV2aWNlX3QpOworc3RhdGljIGlu
dAlwdG5ldF9hdHRhY2goZGV2aWNlX3QpOworc3RhdGljIGludAlwdG5ldF9kZXRhY2goZGV2aWNl
X3QpOworc3RhdGljIGludAlwdG5ldF9zdXNwZW5kKGRldmljZV90KTsKK3N0YXRpYyBpbnQJcHRu
ZXRfcmVzdW1lKGRldmljZV90KTsKK3N0YXRpYyBpbnQJcHRuZXRfc2h1dGRvd24oZGV2aWNlX3Qp
OworCitzdGF0aWMgdm9pZAlwdG5ldF9pbml0KHZvaWQgKm9wYXF1ZSk7CitzdGF0aWMgaW50CXB0
bmV0X2lvY3RsKGlmX3QgaWZwLCB1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEpOworc3RhdGljIGlu
dAlwdG5ldF9pbml0X2xvY2tlZChzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjKTsKK3N0YXRpYyBpbnQJ
cHRuZXRfc3RvcChzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjKTsKK3N0YXRpYyBpbnQJcHRuZXRfdHJh
bnNtaXQoaWZfdCBpZnAsIHN0cnVjdCBtYnVmICptKTsKK3N0YXRpYyBpbnQJcHRuZXRfZHJhaW5f
dHJhbnNtaXRfcXVldWUoc3RydWN0IHB0bmV0X3F1ZXVlICpwcSwKKwkJCQkJICAgdW5zaWduZWQg
aW50IGJ1ZGdldCwKKwkJCQkJICAgYm9vbCBtYXlfcmVzY2hlZCk7CitzdGF0aWMgdm9pZAlwdG5l
dF9xZmx1c2goaWZfdCBpZnApOworc3RhdGljIHZvaWQJcHRuZXRfdHhfdGFzayh2b2lkICpjb250
ZXh0LCBpbnQgcGVuZGluZyk7CisKK3N0YXRpYyBpbnQJcHRuZXRfbWVkaWFfY2hhbmdlKGlmX3Qg
aWZwKTsKK3N0YXRpYyB2b2lkCXB0bmV0X21lZGlhX3N0YXR1cyhpZl90IGlmcCwgc3RydWN0IGlm
bWVkaWFyZXEgKmlmbXIpOworI2lmZGVmIFBUTkVUTUFQX1NUQVRTCitzdGF0aWMgdm9pZAlwdG5l
dF90aWNrKHZvaWQgKm9wYXF1ZSk7CisjZW5kaWYKKworc3RhdGljIGludAlwdG5ldF9pcnFzX2lu
aXQoc3RydWN0IHB0bmV0X3NvZnRjICpzYyk7CitzdGF0aWMgdm9pZAlwdG5ldF9pcnFzX2Zpbmko
c3RydWN0IHB0bmV0X3NvZnRjICpzYyk7CisKK3N0YXRpYyB1aW50MzJfdCBwdG5ldF9ubV9wdGN0
bChpZl90IGlmcCwgdWludDMyX3QgY21kKTsKK3N0YXRpYyBpbnQJcHRuZXRfbm1fY29uZmlnKHN0
cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIHVuc2lnbmVkICp0eHIsCisJCQkJdW5zaWduZWQgKnR4
ZCwgdW5zaWduZWQgKnJ4ciwgdW5zaWduZWQgKnJ4ZCk7CitzdGF0aWMgdm9pZAlwdG5ldF91cGRh
dGVfdm5ldF9oZHIoc3RydWN0IHB0bmV0X3NvZnRjICpzYyk7CitzdGF0aWMgaW50CXB0bmV0X25t
X3JlZ2lzdGVyKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIGludCBvbm9mZik7CitzdGF0aWMg
aW50CXB0bmV0X25tX3R4c3luYyhzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywgaW50IGZsYWdz
KTsKK3N0YXRpYyBpbnQJcHRuZXRfbm1fcnhzeW5jKHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5n
LCBpbnQgZmxhZ3MpOworCitzdGF0aWMgdm9pZAlwdG5ldF90eF9pbnRyKHZvaWQgKm9wYXF1ZSk7
CitzdGF0aWMgdm9pZAlwdG5ldF9yeF9pbnRyKHZvaWQgKm9wYXF1ZSk7CisKK3N0YXRpYyB1bnNp
Z25lZAlwdG5ldF9yeF9kaXNjYXJkKHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLAorCQkJCSB1
bnNpZ25lZCBpbnQgaGVhZCk7CitzdGF0aWMgaW50CXB0bmV0X3J4X2VvZihzdHJ1Y3QgcHRuZXRf
cXVldWUgKnBxLCB1bnNpZ25lZCBpbnQgYnVkZ2V0LAorCQkJICAgICBib29sIG1heV9yZXNjaGVk
KTsKK3N0YXRpYyB2b2lkCXB0bmV0X3J4X3Rhc2sodm9pZCAqY29udGV4dCwgaW50IHBlbmRpbmcp
OworCisjaWZkZWYgREVWSUNFX1BPTExJTkcKK3N0YXRpYyBwb2xsX2hhbmRsZXJfdCBwdG5ldF9w
b2xsOworI2VuZGlmCisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgcHRuZXRfbWV0aG9kc1tdID0g
eworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCQkJcHRuZXRfcHJvYmUpLAorCURFVk1FVEhPRChk
ZXZpY2VfYXR0YWNoLAkJcHRuZXRfYXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwJ
CXB0bmV0X2RldGFjaCksCisJREVWTUVUSE9EKGRldmljZV9zdXNwZW5kLAkJcHRuZXRfc3VzcGVu
ZCksCisJREVWTUVUSE9EKGRldmljZV9yZXN1bWUsCQlwdG5ldF9yZXN1bWUpLAorCURFVk1FVEhP
RChkZXZpY2Vfc2h1dGRvd24sCQlwdG5ldF9zaHV0ZG93biksCisJREVWTUVUSE9EX0VORAorfTsK
Kworc3RhdGljIGRyaXZlcl90IHB0bmV0X2RyaXZlciA9IHsKKwkicHRuZXQiLAorCXB0bmV0X21l
dGhvZHMsCisJc2l6ZW9mKHN0cnVjdCBwdG5ldF9zb2Z0YykKK307CisKKy8qIFdlIHVzZSAoU0lf
T1JERVJfTUlERExFKzIpIGhlcmUsIHNlZSBERVZfTU9EVUxFX09SREVSRUQoKSBpbnZvY2F0aW9u
LiAqLworc3RhdGljIGRldmNsYXNzX3QgcHRuZXRfZGV2Y2xhc3M7CitEUklWRVJfTU9EVUxFX09S
REVSRUQocHRuZXQsIHBjaSwgcHRuZXRfZHJpdmVyLCBwdG5ldF9kZXZjbGFzcywKKwkJICAgICAg
TlVMTCwgTlVMTCwgU0lfT1JERVJfTUlERExFICsgMik7CisKK3N0YXRpYyBpbnQKK3B0bmV0X3By
b2JlKGRldmljZV90IGRldikKK3sKKwlpZiAocGNpX2dldF92ZW5kb3IoZGV2KSAhPSBQVE5FVE1B
UF9QQ0lfVkVORE9SX0lEIHx8CisJCXBjaV9nZXRfZGV2aWNlKGRldikgIT0gUFRORVRNQVBfUENJ
X05FVElGX0lEKSB7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCWRldmljZV9zZXRfZGVzYyhk
ZXYsICJwdG5ldCBuZXR3b3JrIGFkYXB0ZXIiKTsKKworCXJldHVybiAoQlVTX1BST0JFX0RFRkFV
TFQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHRuZXRfa2ljayhzdHJ1Y3QgcHRuZXRfcXVl
dWUgKnBxKQoreworI2lmZGVmIFBUTkVUTUFQX1NUQVRTCisJcHEtPnN0YXRzLmtpY2tzICsrOwor
I2VuZGlmIC8qIFBUTkVUTUFQX1NUQVRTICovCisJYnVzX3dyaXRlXzQocHEtPnNjLT5pb21lbSwg
cHEtPmtpY2ssIDApOworfQorCisjZGVmaW5lIFBUTkVUX0JVRl9SSU5HX1NJWkUJNDA5NgorI2Rl
ZmluZSBQVE5FVF9SWF9CVURHRVQJCTUxMgorI2RlZmluZSBQVE5FVF9SWF9CQVRDSAkJMQorI2Rl
ZmluZSBQVE5FVF9UWF9CVURHRVQJCTUxMgorI2RlZmluZSBQVE5FVF9UWF9CQVRDSAkJNjQKKyNk
ZWZpbmUgUFRORVRfSERSX1NJWkUJCXNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9oZHJfbXJnX3J4
YnVmKQorI2RlZmluZSBQVE5FVF9NQVhfUEtUX1NJWkUJNjU1MzYKKworI2RlZmluZSBQVE5FVF9D
U1VNX09GRkxPQUQJKENTVU1fVENQIHwgQ1NVTV9VRFAgfCBDU1VNX1NDVFApCisjZGVmaW5lIFBU
TkVUX0NTVU1fT0ZGTE9BRF9JUFY2CShDU1VNX1RDUF9JUFY2IHwgQ1NVTV9VRFBfSVBWNiB8XAor
CQkJCSBDU1VNX1NDVFBfSVBWNikKKyNkZWZpbmUgUFRORVRfQUxMX09GRkxPQUQJKENTVU1fVFNP
IHwgUFRORVRfQ1NVTV9PRkZMT0FEIHxcCisJCQkJIFBUTkVUX0NTVU1fT0ZGTE9BRF9JUFY2KQor
CitzdGF0aWMgaW50CitwdG5ldF9hdHRhY2goZGV2aWNlX3QgZGV2KQoreworCXVpbnQzMl90IHB0
ZmVhdHVyZXMgPSAwOworCXVuc2lnbmVkIGludCBudW1fcnhfcmluZ3MsIG51bV90eF9yaW5nczsK
KwlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgbmFfYXJnOworCXVuc2lnbmVkIGludCBuaWZwX29mZnNl
dDsKKwlzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjOworCWlmX3QgaWZwOworCXVpbnQzMl90IG1hY3Jl
ZzsKKwlpbnQgZXJyLCByaWQ7CisJaW50IGk7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2
KTsKKwlzYy0+ZGV2ID0gZGV2OworCisJLyogU2V0dXAgUENJIHJlc291cmNlcy4gKi8KKwlwY2lf
ZW5hYmxlX2J1c21hc3RlcihkZXYpOworCisJcmlkID0gUENJUl9CQVIoUFRORVRNQVBfSU9fUENJ
X0JBUik7CisJc2MtPmlvbWVtID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYsIFNZU19SRVNf
SU9QT1JULCAmcmlkLAorCQkJCQkgICBSRl9BQ1RJVkUpOworCWlmIChzYy0+aW9tZW0gPT0gTlVM
TCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgIkZhaWxlZCB0byBtYXAgSS9PIEJBUlxuIik7CisJ
CXJldHVybiAoRU5YSU8pOworCX0KKworCS8qIE5lZ290aWF0ZSBmZWF0dXJlcyB3aXRoIHRoZSBo
eXBlcnZpc29yLiAqLworCWlmIChwdG5ldF92bmV0X2hkcikgeworCQlwdGZlYXR1cmVzIHw9IFBU
TkVUTUFQX0ZfVk5FVF9IRFI7CisJfQorCWJ1c193cml0ZV80KHNjLT5pb21lbSwgUFRORVRfSU9f
UFRGRUFULCBwdGZlYXR1cmVzKTsgLyogd2FudGVkICovCisJcHRmZWF0dXJlcyA9IGJ1c19yZWFk
XzQoc2MtPmlvbWVtLCBQVE5FVF9JT19QVEZFQVQpOyAvKiBhY2tlZCAqLworCXNjLT5wdGZlYXR1
cmVzID0gcHRmZWF0dXJlczsKKworCS8qIEFsbG9jYXRlIENTQiBhbmQgY2Fycnkgb3V0IENTQiBh
bGxvY2F0aW9uIHByb3RvY29sIChDU0JCQUggZmlyc3QsCisJICogdGhlbiBDU0JCQUwpLiAqLwor
CXNjLT5jc2IgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwdG5ldF9jc2IpLCBNX0RFVkJVRiwKKwkJ
CSBNX05PV0FJVCB8IE1fWkVSTyk7CisJaWYgKHNjLT5jc2IgPT0gTlVMTCkgeworCQlkZXZpY2Vf
cHJpbnRmKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBDU0JcbiIpOworCQllcnIgPSBFTk9NRU07
CisJCWdvdG8gZXJyX3BhdGg7CisJfQorCisJeworCQkvKgorCQkgKiBXZSB1c2UgdWludDY0X3Qg
cmF0aGVyIHRoYW4gdm1fcGFkZHJfdCBzaW5jZSB3ZQorCQkgKiBuZWVkIDY0IGJpdCBhZGRyZXNz
ZXMgZXZlbiBvbiAzMiBiaXQgcGxhdGZvcm1zLgorCQkgKi8KKwkJdWludDY0X3QgcGFkZHIgPSB2
dG9waHlzKHNjLT5jc2IpOworCisJCWJ1c193cml0ZV80KHNjLT5pb21lbSwgUFRORVRfSU9fQ1NC
QkFILAorCQkJICAgIChwYWRkciA+PiAzMikgJiAweGZmZmZmZmZmKTsKKwkJYnVzX3dyaXRlXzQo
c2MtPmlvbWVtLCBQVE5FVF9JT19DU0JCQUwsIHBhZGRyICYgMHhmZmZmZmZmZik7CisJfQorCisJ
bnVtX3R4X3JpbmdzID0gYnVzX3JlYWRfNChzYy0+aW9tZW0sIFBUTkVUX0lPX05VTV9UWF9SSU5H
Uyk7CisJbnVtX3J4X3JpbmdzID0gYnVzX3JlYWRfNChzYy0+aW9tZW0sIFBUTkVUX0lPX05VTV9S
WF9SSU5HUyk7CisJc2MtPm51bV9yaW5ncyA9IG51bV90eF9yaW5ncyArIG51bV9yeF9yaW5nczsK
KwlzYy0+bnVtX3R4X3JpbmdzID0gbnVtX3R4X3JpbmdzOworCisJLyogQWxsb2NhdGUgYW5kIGlu
aXRpYWxpemUgcGVyLXF1ZXVlIGRhdGEgc3RydWN0dXJlcy4gKi8KKwlzYy0+cXVldWVzID0gbWFs
bG9jKHNpemVvZihzdHJ1Y3QgcHRuZXRfcXVldWUpICogc2MtPm51bV9yaW5ncywKKwkJCSAgICBN
X0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8pOworCWlmIChzYy0+cXVldWVzID09IE5VTEwpIHsK
KwkJZXJyID0gRU5PTUVNOworCQlnb3RvIGVycl9wYXRoOworCX0KKwlzYy0+cnhxdWV1ZXMgPSBz
Yy0+cXVldWVzICsgbnVtX3R4X3JpbmdzOworCisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fcmlu
Z3M7IGkrKykgeworCQlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0gc2MtPnF1ZXVlcyArIGk7CisK
KwkJcHEtPnNjID0gc2M7CisJCXBxLT5rcmluZ19pZCA9IGk7CisJCXBxLT5raWNrID0gUFRORVRf
SU9fS0lDS19CQVNFICsgNCAqIGk7CisJCXBxLT5wdHJpbmcgPSBzYy0+Y3NiLT5yaW5ncyArIGk7
CisJCXNucHJpbnRmKHBxLT5sb2NrX25hbWUsIHNpemVvZihwcS0+bG9ja19uYW1lKSwgIiVzLSVk
IiwKKwkJCSBkZXZpY2VfZ2V0X25hbWV1bml0KGRldiksIGkpOworCQltdHhfaW5pdCgmcHEtPmxv
Y2ssIHBxLT5sb2NrX25hbWUsIE5VTEwsIE1UWF9ERUYpOworCQlpZiAoaSA+PSBudW1fdHhfcmlu
Z3MpIHsKKwkJCS8qIFJYIHF1ZXVlOiBmaXgga3JpbmdfaWQuICovCisJCQlwcS0+a3JpbmdfaWQg
LT0gbnVtX3R4X3JpbmdzOworCQl9IGVsc2UgeworCQkJLyogVFggcXVldWU6IGFsbG9jYXRlIGJ1
Zl9yaW5nLiAqLworCQkJcHEtPmJ1ZnJpbmcgPSBidWZfcmluZ19hbGxvYyhQVE5FVF9CVUZfUklO
R19TSVpFLAorCQkJCQkJTV9ERVZCVUYsIE1fTk9XQUlULCAmcHEtPmxvY2spOworCQkJaWYgKHBx
LT5idWZyaW5nID09IE5VTEwpIHsKKwkJCQllcnIgPSBFTk9NRU07CisJCQkJZ290byBlcnJfcGF0
aDsKKwkJCX0KKwkJfQorCX0KKworCXNjLT5taW5fdHhfc3BhY2UgPSA2NDsgLyogU2FmZSBpbml0
aWFsIHZhbHVlLiAqLworCisJZXJyID0gcHRuZXRfaXJxc19pbml0KHNjKTsKKwlpZiAoZXJyKSB7
CisJCWdvdG8gZXJyX3BhdGg7CisJfQorCisJLyogU2V0dXAgRXRoZXJuZXQgaW50ZXJmYWNlLiAq
LworCXNjLT5pZnAgPSBpZnAgPSBpZl9hbGxvYyhJRlRfRVRIRVIpOworCWlmIChpZnAgPT0gTlVM
TCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBpZm5ldFxuIik7
CisJCWVyciA9IEVOT01FTTsKKwkJZ290byBlcnJfcGF0aDsKKwl9CisKKwlpZl9pbml0bmFtZShp
ZnAsIGRldmljZV9nZXRfbmFtZShkZXYpLCBkZXZpY2VfZ2V0X3VuaXQoZGV2KSk7CisJaWZwLT5p
Zl9iYXVkcmF0ZSA9IElGX0dicHMoMTApOworCWlmcC0+aWZfc29mdGMgPSBzYzsKKwlpZnAtPmlm
X2ZsYWdzID0gSUZGX0JST0FEQ0FTVCB8IElGRl9NVUxUSUNBU1QgfCBJRkZfU0lNUExFWDsKKwlp
ZnAtPmlmX2luaXQgPSBwdG5ldF9pbml0OworCWlmcC0+aWZfaW9jdGwgPSBwdG5ldF9pb2N0bDsK
KyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDAwCisJaWZwLT5pZl9nZXRfY291bnRlciA9
IHB0bmV0X2dldF9jb3VudGVyOworI2VuZGlmCisJaWZwLT5pZl90cmFuc21pdCA9IHB0bmV0X3Ry
YW5zbWl0OworCWlmcC0+aWZfcWZsdXNoID0gcHRuZXRfcWZsdXNoOworCisJaWZtZWRpYV9pbml0
KCZzYy0+bWVkaWEsIElGTV9JTUFTSywgcHRuZXRfbWVkaWFfY2hhbmdlLAorCQkgICAgIHB0bmV0
X21lZGlhX3N0YXR1cyk7CisJaWZtZWRpYV9hZGQoJnNjLT5tZWRpYSwgSUZNX0VUSEVSIHwgSUZN
XzEwR19UIHwgSUZNX0ZEWCwgMCwgTlVMTCk7CisJaWZtZWRpYV9zZXQoJnNjLT5tZWRpYSwgSUZN
X0VUSEVSIHwgSUZNXzEwR19UIHwgSUZNX0ZEWCk7CisKKwltYWNyZWcgPSBidXNfcmVhZF80KHNj
LT5pb21lbSwgUFRORVRfSU9fTUFDX0hJKTsKKwlzYy0+aHdhZGRyWzBdID0gKG1hY3JlZyA+PiA4
KSAmIDB4ZmY7CisJc2MtPmh3YWRkclsxXSA9IG1hY3JlZyAmIDB4ZmY7CisJbWFjcmVnID0gYnVz
X3JlYWRfNChzYy0+aW9tZW0sIFBUTkVUX0lPX01BQ19MTyk7CisJc2MtPmh3YWRkclsyXSA9ICht
YWNyZWcgPj4gMjQpICYgMHhmZjsKKwlzYy0+aHdhZGRyWzNdID0gKG1hY3JlZyA+PiAxNikgJiAw
eGZmOworCXNjLT5od2FkZHJbNF0gPSAobWFjcmVnID4+IDgpICYgMHhmZjsKKwlzYy0+aHdhZGRy
WzVdID0gbWFjcmVnICYgMHhmZjsKKworCWV0aGVyX2lmYXR0YWNoKGlmcCwgc2MtPmh3YWRkcik7
CisKKwlpZnAtPmlmX2hkcmxlbiA9IHNpemVvZihzdHJ1Y3QgZXRoZXJfdmxhbl9oZWFkZXIpOwor
CWlmcC0+aWZfY2FwYWJpbGl0aWVzIHw9IElGQ0FQX0pVTUJPX01UVSB8IElGQ0FQX1ZMQU5fTVRV
OworCisJaWYgKHNjLT5wdGZlYXR1cmVzICYgUFRORVRNQVBfRl9WTkVUX0hEUikgeworCQkvKiBT
aW1pbGFybHkgdG8gd2hhdCB0aGUgdnRuZXQgZHJpdmVyIGRvZXMsIHdlIGNhbiBlbXVsYXRlCisJ
CSAqIFZMQU4gb2ZmbG9hZGluZ3MgYnkgaW5zZXJ0aW5nIGFuZCByZW1vdmluZyB0aGUgODAyLjFR
CisJCSAqIGhlYWRlciBkdXJpbmcgdHJhbnNtaXQgYW5kIHJlY2VpdmUuIFdlIGFyZSB0aGVuIGFi
bGUKKwkJICogdG8gZG8gY2hlY2tzdW0gb2ZmbG9hZGluZyBvZiBWTEFOIGZyYW1lcy4gKi8KKwkJ
aWZwLT5pZl9jYXBhYmlsaXRpZXMgfD0gSUZDQVBfSFdDU1VNIHwgSUZDQVBfSFdDU1VNX0lQVjYK
KwkJCQkJfCBJRkNBUF9WTEFOX0hXQ1NVTQorCQkJCQl8IElGQ0FQX1RTTyB8IElGQ0FQX0xSTwor
CQkJCQl8IElGQ0FQX1ZMQU5fSFdUU08KKwkJCQkJfCBJRkNBUF9WTEFOX0hXVEFHR0lORzsKKwl9
CisKKwlpZnAtPmlmX2NhcGVuYWJsZSA9IGlmcC0+aWZfY2FwYWJpbGl0aWVzOworI2lmZGVmIERF
VklDRV9QT0xMSU5HCisJLyogRG9uJ3QgZW5hYmxlIHBvbGxpbmcgYnkgZGVmYXVsdC4gKi8KKwlp
ZnAtPmlmX2NhcGFiaWxpdGllcyB8PSBJRkNBUF9QT0xMSU5HOworI2VuZGlmCisJc25wcmludGYo
c2MtPmxvY2tfbmFtZSwgc2l6ZW9mKHNjLT5sb2NrX25hbWUpLAorCQkgIiVzIiwgZGV2aWNlX2dl
dF9uYW1ldW5pdChkZXYpKTsKKwltdHhfaW5pdCgmc2MtPmxvY2ssIHNjLT5sb2NrX25hbWUsICJw
dG5ldCBjb3JlIGxvY2siLCBNVFhfREVGKTsKKwljYWxsb3V0X2luaXRfbXR4KCZzYy0+dGljaywg
JnNjLT5sb2NrLCAwKTsKKworCS8qIFByZXBhcmUgYSBuZXRtYXBfYWRhcHRlciBzdHJ1Y3QgaW5z
dGFuY2UgdG8gZG8gbmV0bWFwX2F0dGFjaCgpLiAqLworCW5pZnBfb2Zmc2V0ID0gYnVzX3JlYWRf
NChzYy0+aW9tZW0sIFBUTkVUX0lPX05JRlBfT0ZTKTsKKwltZW1zZXQoJm5hX2FyZywgMCwgc2l6
ZW9mKG5hX2FyZykpOworCW5hX2FyZy5pZnAgPSBpZnA7CisJbmFfYXJnLm51bV90eF9kZXNjID0g
YnVzX3JlYWRfNChzYy0+aW9tZW0sIFBUTkVUX0lPX05VTV9UWF9TTE9UUyk7CisJbmFfYXJnLm51
bV9yeF9kZXNjID0gYnVzX3JlYWRfNChzYy0+aW9tZW0sIFBUTkVUX0lPX05VTV9SWF9TTE9UUyk7
CisJbmFfYXJnLm51bV90eF9yaW5ncyA9IG51bV90eF9yaW5nczsKKwluYV9hcmcubnVtX3J4X3Jp
bmdzID0gbnVtX3J4X3JpbmdzOworCW5hX2FyZy5ubV9jb25maWcgPSBwdG5ldF9ubV9jb25maWc7
CisJbmFfYXJnLm5tX2tyaW5nc19jcmVhdGUgPSBwdG5ldF9ubV9rcmluZ3NfY3JlYXRlOworCW5h
X2FyZy5ubV9rcmluZ3NfZGVsZXRlID0gcHRuZXRfbm1fa3JpbmdzX2RlbGV0ZTsKKwluYV9hcmcu
bm1fZHRvciA9IHB0bmV0X25tX2R0b3I7CisJbmFfYXJnLm5tX3JlZ2lzdGVyID0gcHRuZXRfbm1f
cmVnaXN0ZXI7CisJbmFfYXJnLm5tX3R4c3luYyA9IHB0bmV0X25tX3R4c3luYzsKKwluYV9hcmcu
bm1fcnhzeW5jID0gcHRuZXRfbm1fcnhzeW5jOworCisJbmV0bWFwX3B0X2d1ZXN0X2F0dGFjaCgm
bmFfYXJnLCBzYy0+Y3NiLCBuaWZwX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnVzX3JlYWRfNChzYy0+aW9tZW0sIFBUTkVUX0lPX0hPU1RNRU1JRCkpOworCisJLyog
Tm93IGEgbmV0bWFwIGFkYXB0ZXIgZm9yIHRoaXMgaWZwIGhhcyBiZWVuIGFsbG9jYXRlZCwgYW5k
IGl0CisJICogY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggTkEoaWZwKS4gV2UgYWxzbyBoYXZlIHRv
IGluaXRpYWxpemUgdGhlIENTQgorCSAqIHBvaW50ZXIuICovCisJc2MtPnB0bmEgPSAoc3RydWN0
IG5ldG1hcF9wdF9ndWVzdF9hZGFwdGVyICopTkEoaWZwKTsKKworCS8qIElmIHZpcnRpby1uZXQg
aGVhZGVyIHdhcyBuZWdvdGlhdGVkLCBzZXQgdGhlIHZpcnRfaGRyX2xlbiBmaWVsZCBpbgorCSAq
IHRoZSBuZXRtYXAgYWRhcHRlciwgdG8gaW5mb3JtIHVzZXJzIHRoYXQgdGhpcyBuZXRtYXAgYWRh
cHRlciByZXF1aXJlcworCSAqIHRoZSBhcHBsaWNhdGlvbiB0byBkZWFsIHdpdGggdGhlIGhlYWRl
cnMuICovCisJcHRuZXRfdXBkYXRlX3ZuZXRfaGRyKHNjKTsKKworCWRldmljZV9wcmludGYoZGV2
LCAiJXMoKSBjb21wbGV0ZWRcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiAoMCk7CisKK2Vycl9w
YXRoOgorCXB0bmV0X2RldGFjaChkZXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQK
K3B0bmV0X2RldGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IHB0bmV0X3NvZnRjICpzYyA9
IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlpbnQgaTsKKworI2lmZGVmIERFVklDRV9QT0xMSU5H
CisJaWYgKHNjLT5pZnAtPmlmX2NhcGVuYWJsZSAmIElGQ0FQX1BPTExJTkcpIHsKKwkJZXRoZXJf
cG9sbF9kZXJlZ2lzdGVyKHNjLT5pZnApOworCX0KKyNlbmRpZgorCWNhbGxvdXRfZHJhaW4oJnNj
LT50aWNrKTsKKworCWlmIChzYy0+cXVldWVzKSB7CisJCS8qIERyYWluIHRhc2txdWV1ZXMgYmVm
b3JlIGNhbGxpbmcgaWZfZGV0YWNoLiAqLworCQlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9yaW5n
czsgaSsrKSB7CisJCQlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0gc2MtPnF1ZXVlcyArIGk7CisK
KwkJCWlmIChwcS0+dGFza3EpIHsKKwkJCQl0YXNrcXVldWVfZHJhaW4ocHEtPnRhc2txLCAmcHEt
PnRhc2spOworCQkJfQorCQl9CisJfQorCisJaWYgKHNjLT5pZnApIHsKKwkJZXRoZXJfaWZkZXRh
Y2goc2MtPmlmcCk7CisKKwkJLyogVW5pbml0aWFsaXplIG5ldG1hcCBhZGFwdGVycyBmb3IgdGhp
cyBkZXZpY2UuICovCisJCW5ldG1hcF9kZXRhY2goc2MtPmlmcCk7CisKKwkJaWZtZWRpYV9yZW1v
dmVhbGwoJnNjLT5tZWRpYSk7CisJCWlmX2ZyZWUoc2MtPmlmcCk7CisJCXNjLT5pZnAgPSBOVUxM
OworCX0KKworCXB0bmV0X2lycXNfZmluaShzYyk7CisKKwlpZiAoc2MtPmNzYikgeworCQlidXNf
d3JpdGVfNChzYy0+aW9tZW0sIFBUTkVUX0lPX0NTQkJBSCwgMCk7CisJCWJ1c193cml0ZV80KHNj
LT5pb21lbSwgUFRORVRfSU9fQ1NCQkFMLCAwKTsKKwkJZnJlZShzYy0+Y3NiLCBNX0RFVkJVRik7
CisJCXNjLT5jc2IgPSBOVUxMOworCX0KKworCWlmIChzYy0+cXVldWVzKSB7CisJCWZvciAoaSA9
IDA7IGkgPCBzYy0+bnVtX3JpbmdzOyBpKyspIHsKKwkJCXN0cnVjdCBwdG5ldF9xdWV1ZSAqcHEg
PSBzYy0+cXVldWVzICsgaTsKKworCQkJaWYgKG10eF9pbml0aWFsaXplZCgmcHEtPmxvY2spKSB7
CisJCQkJbXR4X2Rlc3Ryb3koJnBxLT5sb2NrKTsKKwkJCX0KKwkJCWlmIChwcS0+YnVmcmluZyAh
PSBOVUxMKSB7CisJCQkJYnVmX3JpbmdfZnJlZShwcS0+YnVmcmluZywgTV9ERVZCVUYpOworCQkJ
fQorCQl9CisJCWZyZWUoc2MtPnF1ZXVlcywgTV9ERVZCVUYpOworCQlzYy0+cXVldWVzID0gTlVM
TDsKKwl9CisKKwlpZiAoc2MtPmlvbWVtKSB7CisJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwg
U1lTX1JFU19JT1BPUlQsCisJCQkJICAgICBQQ0lSX0JBUihQVE5FVE1BUF9JT19QQ0lfQkFSKSwg
c2MtPmlvbWVtKTsKKwkJc2MtPmlvbWVtID0gTlVMTDsKKwl9CisKKwltdHhfZGVzdHJveSgmc2Mt
PmxvY2spOworCisJZGV2aWNlX3ByaW50ZihkZXYsICIlcygpIGNvbXBsZXRlZFxuIiwgX19mdW5j
X18pOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorcHRuZXRfc3VzcGVuZChkZXZp
Y2VfdCBkZXYpCit7CisJc3RydWN0IHB0bmV0X3NvZnRjICpzYzsKKworCXNjID0gZGV2aWNlX2dl
dF9zb2Z0YyhkZXYpOworCSh2b2lkKXNjOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGlu
dAorcHRuZXRfcmVzdW1lKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgcHRuZXRfc29mdGMgKnNj
OworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJKHZvaWQpc2M7CisKKwlyZXR1cm4g
KDApOworfQorCitzdGF0aWMgaW50CitwdG5ldF9zaHV0ZG93bihkZXZpY2VfdCBkZXYpCit7CisJ
LyoKKwkgKiBTdXNwZW5kIGFscmVhZHkgZG9lcyBhbGwgb2Ygd2hhdCB3ZSBuZWVkIHRvCisJICog
ZG8gaGVyZTsgd2UganVzdCBuZXZlciBleHBlY3QgdG8gYmUgcmVzdW1lZC4KKwkgKi8KKwlyZXR1
cm4gKHB0bmV0X3N1c3BlbmQoZGV2KSk7Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0X2lycXNfaW5p
dChzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjKQoreworCWludCByaWQgPSBQQ0lSX0JBUihQVE5FVE1B
UF9NU0lYX1BDSV9CQVIpOworCWludCBudmVjcyA9IHNjLT5udW1fcmluZ3M7CisJZGV2aWNlX3Qg
ZGV2ID0gc2MtPmRldjsKKwlpbnQgZXJyID0gRU5PU1BDOworCWludCBjcHVfY3VyOworCWludCBp
OworCisJaWYgKHBjaV9maW5kX2NhcChkZXYsIFBDSVlfTVNJWCwgTlVMTCkgIT0gMCkgIHsKKwkJ
ZGV2aWNlX3ByaW50ZihkZXYsICJDb3VsZCBub3QgZmluZCBNU0ktWCBjYXBhYmlsaXR5XG4iKTsK
KwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJc2MtPm1zaXhfbWVtID0gYnVzX2FsbG9jX3Jlc291
cmNlX2FueShkZXYsIFNZU19SRVNfTUVNT1JZLAorCQkJCQkgICAgICAmcmlkLCBSRl9BQ1RJVkUp
OworCWlmIChzYy0+bXNpeF9tZW0gPT0gTlVMTCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgIkZh
aWxlZCB0byBhbGxvY2F0ZSBNU0lYIFBDSSBCQVJcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9
CisKKwlpZiAocGNpX21zaXhfY291bnQoZGV2KSA8IG52ZWNzKSB7CisJCWRldmljZV9wcmludGYo
ZGV2LCAiTm90IGVub3VnaCBNU0ktWCB2ZWN0b3JzXG4iKTsKKwkJZ290byBlcnJfcGF0aDsKKwl9
CisKKwllcnIgPSBwY2lfYWxsb2NfbXNpeChkZXYsICZudmVjcyk7CisJaWYgKGVycikgeworCQlk
ZXZpY2VfcHJpbnRmKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBNU0ktWCB2ZWN0b3JzXG4iKTsK
KwkJZ290byBlcnJfcGF0aDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnZlY3M7IGkrKykgewor
CQlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0gc2MtPnF1ZXVlcyArIGk7CisKKwkJcmlkID0gaSAr
IDE7CisJCXBxLT5pcnEgPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgU1lTX1JFU19JUlEs
ICZyaWQsCisJCQkJCQkgUkZfQUNUSVZFKTsKKwkJaWYgKHBxLT5pcnEgPT0gTlVMTCkgeworCQkJ
ZGV2aWNlX3ByaW50ZihkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgaW50ZXJydXB0ICIKKwkJCQkJ
ICAgImZvciBxdWV1ZSAjJWRcbiIsIGkpOworCQkJZXJyID0gRU5PU1BDOworCQkJZ290byBlcnJf
cGF0aDsKKwkJfQorCX0KKworCWNwdV9jdXIgPSBDUFVfRklSU1QoKTsKKwlmb3IgKGkgPSAwOyBp
IDwgbnZlY3M7IGkrKykgeworCQlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0gc2MtPnF1ZXVlcyAr
IGk7CisJCXZvaWQgKCpoYW5kbGVyKSh2b2lkICopID0gcHRuZXRfdHhfaW50cjsKKworCQlpZiAo
aSA+PSBzYy0+bnVtX3R4X3JpbmdzKSB7CisJCQloYW5kbGVyID0gcHRuZXRfcnhfaW50cjsKKwkJ
fQorCQllcnIgPSBidXNfc2V0dXBfaW50cihkZXYsIHBxLT5pcnEsIElOVFJfVFlQRV9ORVQgfCBJ
TlRSX01QU0FGRSwKKwkJCQkgICAgIE5VTEwgLyogaW50cl9maWx0ZXIgKi8sIGhhbmRsZXIsCisJ
CQkJICAgICBwcSwgJnBxLT5jb29raWUpOworCQlpZiAoZXJyKSB7CisJCQlkZXZpY2VfcHJpbnRm
KGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBpbnRyIGhhbmRsZXIgIgorCQkJCQkgICAiZm9yIHF1
ZXVlICMlZFxuIiwgaSk7CisJCQlnb3RvIGVycl9wYXRoOworCQl9CisKKwkJYnVzX2Rlc2NyaWJl
X2ludHIoZGV2LCBwcS0+aXJxLCBwcS0+Y29va2llLCAicSVkIiwgaSk7CisjaWYgMAorCQlidXNf
YmluZF9pbnRyKHNjLT5kZXYsIHBxLT5pcnEsIGNwdV9jdXIpOworI2VuZGlmCisJCWNwdV9jdXIg
PSBDUFVfTkVYVChjcHVfY3VyKTsKKwl9CisKKwlkZXZpY2VfcHJpbnRmKGRldiwgIkFsbG9jYXRl
ZCAlZCBNU0ktWCB2ZWN0b3JzXG4iLCBudmVjcyk7CisKKwljcHVfY3VyID0gQ1BVX0ZJUlNUKCk7
CisJZm9yIChpID0gMDsgaSA8IG52ZWNzOyBpKyspIHsKKwkJc3RydWN0IHB0bmV0X3F1ZXVlICpw
cSA9IHNjLT5xdWV1ZXMgKyBpOworCQlzdGF0aWMgdm9pZCAoKmhhbmRsZXIpKHZvaWQgKmNvbnRl
eHQsIGludCBwZW5kaW5nKTsKKworCQloYW5kbGVyID0gKGkgPCBzYy0+bnVtX3R4X3JpbmdzKSA/
IHB0bmV0X3R4X3Rhc2sgOiBwdG5ldF9yeF90YXNrOworCisJCVRBU0tfSU5JVCgmcHEtPnRhc2ss
IDAsIGhhbmRsZXIsIHBxKTsKKwkJcHEtPnRhc2txID0gdGFza3F1ZXVlX2NyZWF0ZV9mYXN0KCJw
dG5ldF9xdWV1ZSIsIE1fTk9XQUlULAorCQkJCQl0YXNrcXVldWVfdGhyZWFkX2VucXVldWUsICZw
cS0+dGFza3EpOworCQl0YXNrcXVldWVfc3RhcnRfdGhyZWFkcygmcHEtPnRhc2txLCAxLCBQSV9O
RVQsICIlcy1wcS0lZCIsCisJCQkJCWRldmljZV9nZXRfbmFtZXVuaXQoc2MtPmRldiksIGNwdV9j
dXIpOworCQljcHVfY3VyID0gQ1BVX05FWFQoY3B1X2N1cik7CisJfQorCisJcmV0dXJuIDA7Citl
cnJfcGF0aDoKKwlwdG5ldF9pcnFzX2Zpbmkoc2MpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRp
YyB2b2lkCitwdG5ldF9pcnFzX2Zpbmkoc3RydWN0IHB0bmV0X3NvZnRjICpzYykKK3sKKwlkZXZp
Y2VfdCBkZXYgPSBzYy0+ZGV2OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1f
cmluZ3M7IGkrKykgeworCQlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0gc2MtPnF1ZXVlcyArIGk7
CisKKwkJaWYgKHBxLT50YXNrcSkgeworCQkJdGFza3F1ZXVlX2ZyZWUocHEtPnRhc2txKTsKKwkJ
CXBxLT50YXNrcSA9IE5VTEw7CisJCX0KKworCQlpZiAocHEtPmNvb2tpZSkgeworCQkJYnVzX3Rl
YXJkb3duX2ludHIoZGV2LCBwcS0+aXJxLCBwcS0+Y29va2llKTsKKwkJCXBxLT5jb29raWUgPSBO
VUxMOworCQl9CisKKwkJaWYgKHBxLT5pcnEpIHsKKwkJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRl
diwgU1lTX1JFU19JUlEsIGkgKyAxLCBwcS0+aXJxKTsKKwkJCXBxLT5pcnEgPSBOVUxMOworCQl9
CisJfQorCisJaWYgKHNjLT5tc2l4X21lbSkgeworCQlwY2lfcmVsZWFzZV9tc2koZGV2KTsKKwor
CQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfTUVNT1JZLAorCQkJCSAgICAgUENJ
Ul9CQVIoUFRORVRNQVBfTVNJWF9QQ0lfQkFSKSwKKwkJCQkgICAgIHNjLT5tc2l4X21lbSk7CisJ
CXNjLT5tc2l4X21lbSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZAorcHRuZXRfaW5pdCh2
b2lkICpvcGFxdWUpCit7CisJc3RydWN0IHB0bmV0X3NvZnRjICpzYyA9IG9wYXF1ZTsKKworCVBU
TkVUX0NPUkVfTE9DSyhzYyk7CisJcHRuZXRfaW5pdF9sb2NrZWQoc2MpOworCVBUTkVUX0NPUkVf
VU5MT0NLKHNjKTsKK30KKworc3RhdGljIGludAorcHRuZXRfaW9jdGwoaWZfdCBpZnAsIHVfbG9u
ZyBjbWQsIGNhZGRyX3QgZGF0YSkKK3sKKwlzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjID0gaWZfZ2V0
c29mdGMoaWZwKTsKKwlkZXZpY2VfdCBkZXYgPSBzYy0+ZGV2OworCXN0cnVjdCBpZnJlcSAqaWZy
ID0gKHN0cnVjdCBpZnJlcSAqKWRhdGE7CisJaW50IG1hc2ssIGVyciA9IDA7CisKKwlzd2l0Y2gg
KGNtZCkgeworCWNhc2UgU0lPQ1NJRkZMQUdTOgorCQlkZXZpY2VfcHJpbnRmKGRldiwgIlNJT0NT
SUZGTEFHUyAleFxuIiwgaWZwLT5pZl9mbGFncyk7CisJCVBUTkVUX0NPUkVfTE9DSyhzYyk7CisJ
CWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX1VQKSB7CisJCQkvKiBOZXR3b3JrIHN0YWNrIHdhbnRz
IHRoZSBpZmYgdG8gYmUgdXAuICovCisJCQllcnIgPSBwdG5ldF9pbml0X2xvY2tlZChzYyk7CisJ
CX0gZWxzZSB7CisJCQkvKiBOZXR3b3JrIHN0YWNrIHdhbnRzIHRoZSBpZmYgdG8gYmUgZG93bi4g
Ki8KKwkJCWVyciA9IHB0bmV0X3N0b3Aoc2MpOworCQl9CisJCS8qIFdlIGRvbid0IG5lZWQgdG8g
ZG8gbm90aGluZyB0byBzdXBwb3J0IElGRl9QUk9NSVNDLAorCQkgKiBzaW5jZSB0aGF0IGlzIG1h
bmFnZWQgYnkgdGhlIGJhY2tlbmQgcG9ydC4gKi8KKwkJUFRORVRfQ09SRV9VTkxPQ0soc2MpOwor
CQlicmVhazsKKworCWNhc2UgU0lPQ1NJRkNBUDoKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJTSU9D
U0lGQ0FQICV4ICV4XG4iLAorCQkJICAgICAgaWZyLT5pZnJfcmVxY2FwLCBpZnAtPmlmX2NhcGVu
YWJsZSk7CisJCW1hc2sgPSBpZnItPmlmcl9yZXFjYXAgXiBpZnAtPmlmX2NhcGVuYWJsZTsKKyNp
ZmRlZiBERVZJQ0VfUE9MTElORworCQlpZiAobWFzayAmIElGQ0FQX1BPTExJTkcpIHsKKwkJCXN0
cnVjdCBwdG5ldF9xdWV1ZSAqcHE7CisJCQlpbnQgaTsKKworCQkJaWYgKGlmci0+aWZyX3JlcWNh
cCAmIElGQ0FQX1BPTExJTkcpIHsKKwkJCQllcnIgPSBldGhlcl9wb2xsX3JlZ2lzdGVyKHB0bmV0
X3BvbGwsIGlmcCk7CisJCQkJaWYgKGVycikgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLyog
U3RvcCBxdWV1ZXMgYW5kIHN5bmMgd2l0aCB0YXNrcXVldWVzLiAqLworCQkJCWlmcC0+aWZfZHJ2
X2ZsYWdzICY9IH5JRkZfRFJWX1JVTk5JTkc7CisJCQkJZm9yIChpID0gMDsgaSA8IHNjLT5udW1f
cmluZ3M7IGkrKykgeworCQkJCQlwcSA9IHNjLT4gcXVldWVzICsgaTsKKwkJCQkJLyogTWFrZSBz
dXJlIHRoZSB3b3JrZXIgc2VlcyB0aGUKKwkJCQkJICogSUZGX0RSVl9SVU5OSU5HIGRvd24uICov
CisJCQkJCVBUTkVUX1FfTE9DSyhwcSk7CisJCQkJCXBxLT5wdHJpbmctPmd1ZXN0X25lZWRfa2lj
ayA9IDA7CisJCQkJCVBUTkVUX1FfVU5MT0NLKHBxKTsKKwkJCQkJLyogV2FpdCBmb3IgcmVzY2hl
ZHVsaW5nIHRvIGZpbmlzaC4gKi8KKwkJCQkJaWYgKHBxLT50YXNrcSkgeworCQkJCQkJdGFza3F1
ZXVlX2RyYWluKHBxLT50YXNrcSwKKwkJCQkJCQkJJnBxLT50YXNrKTsKKwkJCQkJfQorCQkJCX0K
KwkJCQlpZnAtPmlmX2Rydl9mbGFncyB8PSBJRkZfRFJWX1JVTk5JTkc7CisJCQl9IGVsc2Ugewor
CQkJCWVyciA9IGV0aGVyX3BvbGxfZGVyZWdpc3RlcihpZnApOworCQkJCWZvciAoaSA9IDA7IGkg
PCBzYy0+bnVtX3JpbmdzOyBpKyspIHsKKwkJCQkJcHEgPSBzYy0+IHF1ZXVlcyArIGk7CisJCQkJ
CVBUTkVUX1FfTE9DSyhwcSk7CisJCQkJCXBxLT5wdHJpbmctPmd1ZXN0X25lZWRfa2ljayA9IDE7
CisJCQkJCVBUTkVUX1FfVU5MT0NLKHBxKTsKKwkJCQl9CisJCQl9CisJCX0KKyNlbmRpZiAgLyog
REVWSUNFX1BPTExJTkcgKi8KKwkJaWZwLT5pZl9jYXBlbmFibGUgPSBpZnItPmlmcl9yZXFjYXA7
CisJCWJyZWFrOworCisJY2FzZSBTSU9DU0lGTVRVOgorCQkvKiBXZSBzdXBwb3J0IGFueSByZWFz
b25hYmxlIE1UVS4gKi8KKwkJaWYgKGlmci0+aWZyX210dSA8IEVUSEVSTUlOIHx8CisJCQkJaWZy
LT5pZnJfbXR1ID4gUFRORVRfTUFYX1BLVF9TSVpFKSB7CisJCQllcnIgPSBFSU5WQUw7CisJCX0g
ZWxzZSB7CisJCQlQVE5FVF9DT1JFX0xPQ0soc2MpOworCQkJaWZwLT5pZl9tdHUgPSBpZnItPmlm
cl9tdHU7CisJCQlQVE5FVF9DT1JFX1VOTE9DSyhzYyk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNl
IFNJT0NTSUZNRURJQToKKwljYXNlIFNJT0NHSUZNRURJQToKKwkJZXJyID0gaWZtZWRpYV9pb2N0
bChpZnAsIGlmciwgJnNjLT5tZWRpYSwgY21kKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQll
cnIgPSBldGhlcl9pb2N0bChpZnAsIGNtZCwgZGF0YSk7CisJCWJyZWFrOworCX0KKworCXJldHVy
biBlcnI7Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0X2luaXRfbG9ja2VkKHN0cnVjdCBwdG5ldF9z
b2Z0YyAqc2MpCit7CisJaWZfdCBpZnAgPSBzYy0+aWZwOworCXN0cnVjdCBuZXRtYXBfYWRhcHRl
ciAqbmFfZHIgPSAmc2MtPnB0bmEtPmRyLnVwOworCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmFf
bm0gPSAmc2MtPnB0bmEtPmh3dXAudXA7CisJdW5zaWduZWQgaW50IG5tX2J1Zl9zaXplOworCWlu
dCByZXQ7CisKKwlpZiAoaWZwLT5pZl9kcnZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcpIHsKKwkJ
cmV0dXJuIDA7IC8qIG5vdGhpbmcgdG8gZG8gKi8KKwl9CisKKwlkZXZpY2VfcHJpbnRmKHNjLT5k
ZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJLyogVHJhbnNsYXRlIG9mZmxvYWQgY2FwYWJpbGl0
aWVzIGFjY29yZGluZyB0byBpZl9jYXBlbmFibGUuICovCisJaWZwLT5pZl9od2Fzc2lzdCA9IDA7
CisJaWYgKGlmcC0+aWZfY2FwZW5hYmxlICYgSUZDQVBfVFhDU1VNKQorCQlpZnAtPmlmX2h3YXNz
aXN0IHw9IFBUTkVUX0NTVU1fT0ZGTE9BRDsKKwlpZiAoaWZwLT5pZl9jYXBlbmFibGUgJiBJRkNB
UF9UWENTVU1fSVBWNikKKwkJaWZwLT5pZl9od2Fzc2lzdCB8PSBQVE5FVF9DU1VNX09GRkxPQURf
SVBWNjsKKwlpZiAoaWZwLT5pZl9jYXBlbmFibGUgJiBJRkNBUF9UU080KQorCQlpZnAtPmlmX2h3
YXNzaXN0IHw9IENTVU1fSVBfVFNPOworCWlmIChpZnAtPmlmX2NhcGVuYWJsZSAmIElGQ0FQX1RT
TzYpCisJCWlmcC0+aWZfaHdhc3Npc3QgfD0gQ1NVTV9JUDZfVFNPOworCisJLyoKKwkgKiBQcmVw
YXJlIHRoZSBpbnRlcmZhY2UgZm9yIG5ldG1hcCBtb2RlIGFjY2Vzcy4KKwkgKi8KKwluZXRtYXBf
dXBkYXRlX2NvbmZpZyhuYV9kcik7CisKKwlyZXQgPSBuZXRtYXBfbWVtX2ZpbmFsaXplKG5hX2Ry
LT5ubV9tZW0sIG5hX2RyKTsKKwlpZiAocmV0KSB7CisJCWRldmljZV9wcmludGYoc2MtPmRldiwg
Im5ldG1hcF9tZW1fZmluYWxpemUoKSBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwor
CWlmIChzYy0+cHRuYS0+YmFja2VuZF9yZWdpZnMgPT0gMCkgeworCQlyZXQgPSBwdG5ldF9ubV9r
cmluZ3NfY3JlYXRlKG5hX25tKTsKKwkJaWYgKHJldCkgeworCQkJZGV2aWNlX3ByaW50ZihzYy0+
ZGV2LCAicHRuZXRfbm1fa3JpbmdzX2NyZWF0ZSgpICIKKwkJCQkJICAgICAgICJmYWlsZWRcbiIp
OworCQkJZ290byBlcnJfbWVtX2ZpbmFsaXplOworCQl9CisKKwkJcmV0ID0gbmV0bWFwX21lbV9y
aW5nc19jcmVhdGUobmFfZHIpOworCQlpZiAocmV0KSB7CisJCQlkZXZpY2VfcHJpbnRmKHNjLT5k
ZXYsICJuZXRtYXBfbWVtX3JpbmdzX2NyZWF0ZSgpICIKKwkJCQkJICAgICAgICJmYWlsZWRcbiIp
OworCQkJZ290byBlcnJfcmluZ3NfY3JlYXRlOworCQl9CisKKwkJcmV0ID0gbmV0bWFwX21lbV9n
ZXRfbHV0KG5hX2RyLT5ubV9tZW0sICZuYV9kci0+bmFfbHV0KTsKKwkJaWYgKHJldCkgeworCQkJ
ZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAibmV0bWFwX21lbV9nZXRfbHV0KCkgIgorCQkJCQkgICAg
ICAgImZhaWxlZFxuIik7CisJCQlnb3RvIGVycl9nZXRfbHV0OworCQl9CisJfQorCisJcmV0ID0g
cHRuZXRfbm1fcmVnaXN0ZXIobmFfZHIsIDEgLyogb24gKi8pOworCWlmIChyZXQpIHsKKwkJZ290
byBlcnJfcmVnaXN0ZXI7CisJfQorCisJbm1fYnVmX3NpemUgPSBORVRNQVBfQlVGX1NJWkUobmFf
ZHIpOworCisJS0FTU0VSVChubV9idWZfc2l6ZSA+IDAsICgiSW52YWxpZCBuZXRtYXAgYnVmZmVy
IHNpemUiKSk7CisJc2MtPm1pbl90eF9zcGFjZSA9IFBUTkVUX01BWF9QS1RfU0laRSAvIG5tX2J1
Zl9zaXplICsgMjsKKwlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICIlczogbWluX3R4X3NwYWNlID0g
JXVcbiIsIF9fZnVuY19fLAorCQkgICAgICBzYy0+bWluX3R4X3NwYWNlKTsKKyNpZmRlZiBQVE5F
VE1BUF9TVEFUUworCWNhbGxvdXRfcmVzZXQoJnNjLT50aWNrLCBoeiwgcHRuZXRfdGljaywgc2Mp
OworI2VuZGlmCisKKwlpZnAtPmlmX2Rydl9mbGFncyB8PSBJRkZfRFJWX1JVTk5JTkc7CisKKwly
ZXR1cm4gMDsKKworZXJyX3JlZ2lzdGVyOgorCW1lbXNldCgmbmFfZHItPm5hX2x1dCwgMCwgc2l6
ZW9mKG5hX2RyLT5uYV9sdXQpKTsKK2Vycl9nZXRfbHV0OgorCW5ldG1hcF9tZW1fcmluZ3NfZGVs
ZXRlKG5hX2RyKTsKK2Vycl9yaW5nc19jcmVhdGU6CisJcHRuZXRfbm1fa3JpbmdzX2RlbGV0ZShu
YV9ubSk7CitlcnJfbWVtX2ZpbmFsaXplOgorCW5ldG1hcF9tZW1fZGVyZWYobmFfZHItPm5tX21l
bSwgbmFfZHIpOworCisJcmV0dXJuIHJldDsKK30KKworLyogVG8gYmUgY2FsbGVkIHVuZGVyIGNv
cmUgbG9jay4gKi8KK3N0YXRpYyBpbnQKK3B0bmV0X3N0b3Aoc3RydWN0IHB0bmV0X3NvZnRjICpz
YykKK3sKKwlpZl90IGlmcCA9IHNjLT5pZnA7CisJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYV9k
ciA9ICZzYy0+cHRuYS0+ZHIudXA7CisJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYV9ubSA9ICZz
Yy0+cHRuYS0+aHd1cC51cDsKKwlpbnQgaTsKKworCWRldmljZV9wcmludGYoc2MtPmRldiwgIiVz
XG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoIShpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVO
TklORykpIHsKKwkJcmV0dXJuIDA7IC8qIG5vdGhpbmcgdG8gZG8gKi8KKwl9CisKKwkvKiBDbGVh
ciB0aGUgZHJpdmVyLXJlYWR5IGZsYWcsIGFuZCBzeW5jaHJvbml6ZSB3aXRoIGFsbCB0aGUgcXVl
dWVzLAorCSAqIHNvIHRoYXQgYWZ0ZXIgdGhpcyBsb29wIHdlIGFyZSBzdXJlIG5vYm9keSBpcyB3
b3JraW5nIGFueW1vcmUgd2l0aAorCSAqIHRoZSBkZXZpY2UuIFRoaXMgc2NoZW1lIGlzIHRha2Vu
IGZyb20gdGhlIHZ0bmV0IGRyaXZlci4gKi8KKwlpZnAtPmlmX2Rydl9mbGFncyAmPSB+SUZGX0RS
Vl9SVU5OSU5HOworCWNhbGxvdXRfc3RvcCgmc2MtPnRpY2spOworCWZvciAoaSA9IDA7IGkgPCBz
Yy0+bnVtX3JpbmdzOyBpKyspIHsKKwkJUFRORVRfUV9MT0NLKHNjLT5xdWV1ZXMgKyBpKTsKKwkJ
UFRORVRfUV9VTkxPQ0soc2MtPnF1ZXVlcyArIGkpOworCX0KKworCXB0bmV0X25tX3JlZ2lzdGVy
KG5hX2RyLCAwIC8qIG9mZiAqLyk7CisKKwlpZiAoc2MtPnB0bmEtPmJhY2tlbmRfcmVnaWZzID09
IDApIHsKKwkJbmV0bWFwX21lbV9yaW5nc19kZWxldGUobmFfZHIpOworCQlwdG5ldF9ubV9rcmlu
Z3NfZGVsZXRlKG5hX25tKTsKKwl9CisJbmV0bWFwX21lbV9kZXJlZihuYV9kci0+bm1fbWVtLCBu
YV9kcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3B0bmV0X3FmbHVzaChpZl90
IGlmcCkKK3sKKwlzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjID0gaWZfZ2V0c29mdGMoaWZwKTsKKwlp
bnQgaTsKKworCS8qIEZsdXNoIGFsbCB0aGUgYnVmcmluZ3MgYW5kIGRvIHRoZSBpbnRlcmZhY2Ug
Zmx1c2guICovCisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fcmluZ3M7IGkrKykgeworCQlzdHJ1
Y3QgcHRuZXRfcXVldWUgKnBxID0gc2MtPnF1ZXVlcyArIGk7CisJCXN0cnVjdCBtYnVmICptOwor
CisJCVBUTkVUX1FfTE9DSyhwcSk7CisJCWlmIChwcS0+YnVmcmluZykgeworCQkJd2hpbGUgKCht
ID0gYnVmX3JpbmdfZGVxdWV1ZV9zYyhwcS0+YnVmcmluZykpKSB7CisJCQkJbV9mcmVlbShtKTsK
KwkJCX0KKwkJfQorCQlQVE5FVF9RX1VOTE9DSyhwcSk7CisJfQorCisJaWZfcWZsdXNoKGlmcCk7
Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0X21lZGlhX2NoYW5nZShpZl90IGlmcCkKK3sKKwlzdHJ1
Y3QgcHRuZXRfc29mdGMgKnNjID0gaWZfZ2V0c29mdGMoaWZwKTsKKwlzdHJ1Y3QgaWZtZWRpYSAq
aWZtID0gJnNjLT5tZWRpYTsKKworCWlmIChJRk1fVFlQRShpZm0tPmlmbV9tZWRpYSkgIT0gSUZN
X0VUSEVSKSB7CisJCXJldHVybiBFSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNpZiBf
X0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDAwCitzdGF0aWMgdWludDY0X3QKK3B0bmV0X2dldF9j
b3VudGVyKGlmX3QgaWZwLCBpZnRfY291bnRlciBjbnQpCit7CisJc3RydWN0IHB0bmV0X3NvZnRj
ICpzYyA9IGlmX2dldHNvZnRjKGlmcCk7CisJc3RydWN0IHB0bmV0X3F1ZXVlX3N0YXRzIHN0YXRz
WzJdOworCWludCBpOworCisJLyogQWNjdW11bGF0ZSBzdGF0aXN0aWNzIG92ZXIgdGhlIHF1ZXVl
cy4gKi8KKwltZW1zZXQoc3RhdHMsIDAsIHNpemVvZihzdGF0cykpOworCWZvciAoaSA9IDA7IGkg
PCBzYy0+bnVtX3JpbmdzOyBpKyspIHsKKwkJc3RydWN0IHB0bmV0X3F1ZXVlICpwcSA9IHNjLT5x
dWV1ZXMgKyBpOworCQlpbnQgaWR4ID0gKGkgPCBzYy0+bnVtX3R4X3JpbmdzKSA/IDAgOiAxOwor
CisJCXN0YXRzW2lkeF0ucGFja2V0cwkrPSBwcS0+c3RhdHMucGFja2V0czsKKwkJc3RhdHNbaWR4
XS5ieXRlcwkrPSBwcS0+c3RhdHMuYnl0ZXM7CisJCXN0YXRzW2lkeF0uZXJyb3JzCSs9IHBxLT5z
dGF0cy5lcnJvcnM7CisJCXN0YXRzW2lkeF0uaXFkcm9wcwkrPSBwcS0+c3RhdHMuaXFkcm9wczsK
KwkJc3RhdHNbaWR4XS5tY2FzdHMJKz0gcHEtPnN0YXRzLm1jYXN0czsKKwl9CisKKwlzd2l0Y2gg
KGNudCkgeworCWNhc2UgSUZDT1VOVEVSX0lQQUNLRVRTOgorCQlyZXR1cm4gKHN0YXRzWzFdLnBh
Y2tldHMpOworCWNhc2UgSUZDT1VOVEVSX0lRRFJPUFM6CisJCXJldHVybiAoc3RhdHNbMV0uaXFk
cm9wcyk7CisJY2FzZSBJRkNPVU5URVJfSUVSUk9SUzoKKwkJcmV0dXJuIChzdGF0c1sxXS5lcnJv
cnMpOworCWNhc2UgSUZDT1VOVEVSX09QQUNLRVRTOgorCQlyZXR1cm4gKHN0YXRzWzBdLnBhY2tl
dHMpOworCWNhc2UgSUZDT1VOVEVSX09CWVRFUzoKKwkJcmV0dXJuIChzdGF0c1swXS5ieXRlcyk7
CisJY2FzZSBJRkNPVU5URVJfT01DQVNUUzoKKwkJcmV0dXJuIChzdGF0c1swXS5tY2FzdHMpOwor
CWRlZmF1bHQ6CisJCXJldHVybiAoaWZfZ2V0X2NvdW50ZXJfZGVmYXVsdChpZnAsIGNudCkpOwor
CX0KK30KKyNlbmRpZgorCisKKyNpZmRlZiBQVE5FVE1BUF9TVEFUUworLyogQ2FsbGVkIHVuZGVy
IGNvcmUgbG9jay4gKi8KK3N0YXRpYyB2b2lkCitwdG5ldF90aWNrKHZvaWQgKm9wYXF1ZSkKK3sK
KwlzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjID0gb3BhcXVlOworCWludCBpOworCisJZm9yIChpID0g
MDsgaSA8IHNjLT5udW1fcmluZ3M7IGkrKykgeworCQlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0g
c2MtPnF1ZXVlcyArIGk7CisJCXN0cnVjdCBwdG5ldF9xdWV1ZV9zdGF0cyBjdXIgPSBwcS0+c3Rh
dHM7CisJCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwkJdW5zaWduZWQgaW50IGRlbHRhOworCisJCW1p
Y3JvdGltZSgmbm93KTsKKwkJZGVsdGEgPSBub3cudHZfdXNlYyAtIHNjLT5sYXN0X3RzLnR2X3Vz
ZWMgKworCQkJKG5vdy50dl9zZWMgLSBzYy0+bGFzdF90cy50dl9zZWMpICogMTAwMDAwMDsKKwkJ
ZGVsdGEgLz0gMTAwMDsgLyogaW4gbWlsbGlzZWNvbmRzICovCisKKwkJaWYgKGRlbHRhID09IDAp
CisJCQljb250aW51ZTsKKworCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICIjJWRbJXUgbXNdOnBr
dHMgJWx1LCBraWNrcyAlbHUsICIKKwkJCSAgICAgICJpbnRyICVsdVxuIiwgaSwgZGVsdGEsCisJ
CQkgICAgICAoY3VyLnBhY2tldHMgLSBwcS0+bGFzdF9zdGF0cy5wYWNrZXRzKSwKKwkJCSAgICAg
IChjdXIua2lja3MgLSBwcS0+bGFzdF9zdGF0cy5raWNrcyksCisJCQkgICAgICAoY3VyLmludHJz
IC0gcHEtPmxhc3Rfc3RhdHMuaW50cnMpKTsKKwkJcHEtPmxhc3Rfc3RhdHMgPSBjdXI7CisJfQor
CW1pY3JvdGltZSgmc2MtPmxhc3RfdHMpOworCWNhbGxvdXRfc2NoZWR1bGUoJnNjLT50aWNrLCBo
eik7Cit9CisjZW5kaWYgLyogUFRORVRNQVBfU1RBVFMgKi8KKworc3RhdGljIHZvaWQKK3B0bmV0
X21lZGlhX3N0YXR1cyhpZl90IGlmcCwgc3RydWN0IGlmbWVkaWFyZXEgKmlmbXIpCit7CisJLyog
V2UgYXJlIGFsd2F5cyBhY3RpdmUsIGFzIHRoZSBiYWNrZW5kIG5ldG1hcCBwb3J0IGlzCisJICog
YWx3YXlzIG9wZW4gaW4gbmV0bWFwIG1vZGUuICovCisJaWZtci0+aWZtX3N0YXR1cyA9IElGTV9B
VkFMSUQgfCBJRk1fQUNUSVZFOworCWlmbXItPmlmbV9hY3RpdmUgPSBJRk1fRVRIRVIgfCBJRk1f
MTBHX1QgfCBJRk1fRkRYOworfQorCitzdGF0aWMgdWludDMyX3QKK3B0bmV0X25tX3B0Y3RsKGlm
X3QgaWZwLCB1aW50MzJfdCBjbWQpCit7CisJc3RydWN0IHB0bmV0X3NvZnRjICpzYyA9IGlmX2dl
dHNvZnRjKGlmcCk7CisJLyoKKwkgKiBXcml0ZSBhIGNvbW1hbmQgYW5kIHJlYWQgYmFjayBlcnJv
ciBzdGF0dXMsCisJICogd2l0aCB6ZXJvIG1lYW5pbmcgc3VjY2Vzcy4KKwkgKi8KKwlidXNfd3Jp
dGVfNChzYy0+aW9tZW0sIFBUTkVUX0lPX1BUQ1RMLCBjbWQpOworCXJldHVybiBidXNfcmVhZF80
KHNjLT5pb21lbSwgUFRORVRfSU9fUFRDVEwpOworfQorCitzdGF0aWMgaW50CitwdG5ldF9ubV9j
b25maWcoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSwgdW5zaWduZWQgKnR4ciwgdW5zaWduZWQg
KnR4ZCwKKwkJdW5zaWduZWQgKnJ4ciwgdW5zaWduZWQgKnJ4ZCkKK3sKKwlzdHJ1Y3QgcHRuZXRf
c29mdGMgKnNjID0gaWZfZ2V0c29mdGMobmEtPmlmcCk7CisKKwkqdHhyID0gYnVzX3JlYWRfNChz
Yy0+aW9tZW0sIFBUTkVUX0lPX05VTV9UWF9SSU5HUyk7CisJKnJ4ciA9IGJ1c19yZWFkXzQoc2Mt
PmlvbWVtLCBQVE5FVF9JT19OVU1fUlhfUklOR1MpOworCSp0eGQgPSBidXNfcmVhZF80KHNjLT5p
b21lbSwgUFRORVRfSU9fTlVNX1RYX1NMT1RTKTsKKwkqcnhkID0gYnVzX3JlYWRfNChzYy0+aW9t
ZW0sIFBUTkVUX0lPX05VTV9SWF9TTE9UUyk7CisKKwlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJ0
eHIgJXUsIHJ4ciAldSwgdHhkICV1LCByeGQgJXVcbiIsCisJCSAgICAgICp0eHIsICpyeHIsICp0
eGQsICpyeGQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitwdG5ldF9zeW5jX2Zy
b21fY3NiKHN0cnVjdCBwdG5ldF9zb2Z0YyAqc2MsIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEp
Cit7CisJaW50IGk7CisKKwkvKiBTeW5jIGtyaW5ncyBmcm9tIHRoZSBob3N0LCByZWFkaW5nIGZy
b20KKwkgKiBDU0IuICovCisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fcmluZ3M7IGkrKykgewor
CQlzdHJ1Y3QgcHRuZXRfcmluZyAqcHRyaW5nID0gc2MtPnF1ZXVlc1tpXS5wdHJpbmc7CisJCXN0
cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nOworCisJCWlmIChpIDwgbmEtPm51bV90eF9yaW5ncykg
eworCQkJa3JpbmcgPSBuYS0+dHhfcmluZ3MgKyBpOworCQl9IGVsc2UgeworCQkJa3JpbmcgPSBu
YS0+cnhfcmluZ3MgKyBpIC0gbmEtPm51bV90eF9yaW5nczsKKwkJfQorCQlrcmluZy0+cmhlYWQg
PSBrcmluZy0+cmluZy0+aGVhZCA9IHB0cmluZy0+aGVhZDsKKwkJa3JpbmctPnJjdXIgPSBrcmlu
Zy0+cmluZy0+Y3VyID0gcHRyaW5nLT5jdXI7CisJCWtyaW5nLT5ucl9od2N1ciA9IHB0cmluZy0+
aHdjdXI7CisJCWtyaW5nLT5ucl9od3RhaWwgPSBrcmluZy0+cnRhaWwgPQorCQkJa3JpbmctPnJp
bmctPnRhaWwgPSBwdHJpbmctPmh3dGFpbDsKKworCQlORCgiJWQsJWQ6IGNzYiB7aGMgJXUgaCAl
dSBjICV1IGh0ICV1fSIsIHQsIGksCisJCSAgIHB0cmluZy0+aHdjdXIsIHB0cmluZy0+aGVhZCwg
cHRyaW5nLT5jdXIsCisJCSAgIHB0cmluZy0+aHd0YWlsKTsKKwkJTkQoIiVkLCVkOiBrcmluZyB7
aGMgJXUgcmggJXUgcmMgJXUgaCAldSBjICV1IGh0ICV1IHJ0ICV1IHQgJXV9IiwKKwkJICAgdCwg
aSwga3JpbmctPm5yX2h3Y3VyLCBrcmluZy0+cmhlYWQsIGtyaW5nLT5yY3VyLAorCQkgICBrcmlu
Zy0+cmluZy0+aGVhZCwga3JpbmctPnJpbmctPmN1ciwga3JpbmctPm5yX2h3dGFpbCwKKwkJICAg
a3JpbmctPnJ0YWlsLCBrcmluZy0+cmluZy0+dGFpbCk7CisJfQorfQorCitzdGF0aWMgdm9pZAor
cHRuZXRfdXBkYXRlX3ZuZXRfaGRyKHN0cnVjdCBwdG5ldF9zb2Z0YyAqc2MpCit7CisJdW5zaWdu
ZWQgaW50IHdhbnRlZF9oZHJfbGVuID0gcHRuZXRfdm5ldF9oZHIgPyBQVE5FVF9IRFJfU0laRSA6
IDA7CisKKwlidXNfd3JpdGVfNChzYy0+aW9tZW0sIFBUTkVUX0lPX1ZORVRfSERSX0xFTiwgd2Fu
dGVkX2hkcl9sZW4pOworCXNjLT52bmV0X2hkcl9sZW4gPSBidXNfcmVhZF80KHNjLT5pb21lbSwg
UFRORVRfSU9fVk5FVF9IRFJfTEVOKTsKKwlzYy0+cHRuYS0+aHd1cC51cC52aXJ0X2hkcl9sZW4g
PSBzYy0+dm5ldF9oZHJfbGVuOworfQorCitzdGF0aWMgaW50CitwdG5ldF9ubV9yZWdpc3Rlcihz
dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCBpbnQgb25vZmYpCit7CisJLyogZGV2aWNlLXNwZWNp
ZmljICovCisJaWZfdCBpZnAgPSBuYS0+aWZwOworCXN0cnVjdCBwdG5ldF9zb2Z0YyAqc2MgPSBp
Zl9nZXRzb2Z0YyhpZnApOworCWludCBuYXRpdmUgPSAobmEgPT0gJnNjLT5wdG5hLT5od3VwLnVw
KTsKKwlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxOworCWVudW0gdHhyeCB0OworCWludCByZXQgPSAw
OworCWludCBpOworCisJaWYgKCFvbm9mZikgeworCQlzYy0+cHRuYS0+YmFja2VuZF9yZWdpZnMt
LTsKKwl9CisKKwkvKiBJZiB0aGlzIGlzIHRoZSBsYXN0IG5ldG1hcCBjbGllbnQsIGd1ZXN0IGlu
dGVycnVwdCBlbmFibGUgZmxhZ3MgbWF5CisJICogYmUgaW4gYXJiaXRyYXJ5IHN0YXRlLiBTaW5j
ZSB0aGVzZSBmbGFncyBhcmUgZ29pbmcgdG8gYmUgdXNlZCBhbHNvCisJICogYnkgdGhlIG5ldGRl
dmljZSBkcml2ZXIsIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRvIHN0YXJ0IHdpdGgKKwkgKiBub3Rp
ZmljYXRpb25zIGVuYWJsZWQuIEFsc28sIHNjaGVkdWxlIE5BUEkgdG8gZmx1c2ggcGVuZGluZyBw
YWNrZXRzCisJICogaW4gdGhlIFJYIHJpbmdzLCBzaW5jZSB3ZSB3aWxsIG5vdCByZWNlaXZlIGZ1
cnRoZXIgaW50ZXJydXB0cworCSAqIHVudGlsIHRoZXNlIHdpbGwgYmUgcHJvY2Vzc2VkLiAqLwor
CWlmIChuYXRpdmUgJiYgIW9ub2ZmICYmIG5hLT5hY3RpdmVfZmRzID09IDApIHsKKwkJRCgiRXhp
dCBuZXRtYXAgbW9kZSwgcmUtZW5hYmxlIGludGVycnVwdHMiKTsKKwkJZm9yIChpID0gMDsgaSA8
IHNjLT5udW1fcmluZ3M7IGkrKykgeworCQkJcHEgPSBzYy0+cXVldWVzICsgaTsKKwkJCXBxLT5w
dHJpbmctPmd1ZXN0X25lZWRfa2ljayA9IDE7CisJCX0KKwl9CisKKwlpZiAob25vZmYpIHsKKwkJ
aWYgKHNjLT5wdG5hLT5iYWNrZW5kX3JlZ2lmcyA9PSAwKSB7CisJCQkvKiBJbml0aWFsaXplIG5v
dGlmaWNhdGlvbiBlbmFibGUgZmllbGRzIGluIHRoZSBDU0IuICovCisJCQlmb3IgKGkgPSAwOyBp
IDwgc2MtPm51bV9yaW5nczsgaSsrKSB7CisJCQkJcHEgPSBzYy0+cXVldWVzICsgaTsKKwkJCQlw
cS0+cHRyaW5nLT5ob3N0X25lZWRfa2ljayA9IDE7CisJCQkJcHEtPnB0cmluZy0+Z3Vlc3RfbmVl
ZF9raWNrID0KKwkJCQkJKCEoaWZwLT5pZl9jYXBlbmFibGUgJiBJRkNBUF9QT0xMSU5HKQorCQkJ
CQkJJiYgaSA+PSBzYy0+bnVtX3R4X3JpbmdzKTsKKwkJCX0KKworCQkJLyogU2V0IHRoZSB2aXJ0
aW8tbmV0IGhlYWRlciBsZW5ndGguICovCisJCQlwdG5ldF91cGRhdGVfdm5ldF9oZHIoc2MpOwor
CisJCQkvKiBNYWtlIHN1cmUgdGhlIGhvc3QgYWRhcHRlciBwYXNzZWQgdGhyb3VnaCBpcyByZWFk
eQorCQkJICogZm9yIHR4c3luYy9yeHN5bmMuICovCisJCQlyZXQgPSBwdG5ldF9ubV9wdGN0bChp
ZnAsIFBUTkVUTUFQX1BUQ1RMX0NSRUFURSk7CisJCQlpZiAocmV0KSB7CisJCQkJcmV0dXJuIHJl
dDsKKwkJCX0KKwkJfQorCisJCS8qIFN5bmMgZnJvbSBDU0IgbXVzdCBiZSBkb25lIGFmdGVyIFJF
R0lGIFBUQ1RMLiBTa2lwIHRoaXMKKwkJICogc3RlcCBvbmx5IGlmIHRoaXMgaXMgYSBuZXRtYXAg
Y2xpZW50IGFuZCBpdCBpcyBub3QgdGhlCisJCSAqIGZpcnN0IG9uZS4gKi8KKwkJaWYgKCghbmF0
aXZlICYmIHNjLT5wdG5hLT5iYWNrZW5kX3JlZ2lmcyA9PSAwKSB8fAorCQkJCShuYXRpdmUgJiYg
bmEtPmFjdGl2ZV9mZHMgPT0gMCkpIHsKKwkJCXB0bmV0X3N5bmNfZnJvbV9jc2Ioc2MsIG5hKTsK
KwkJfQorCisJCS8qIElmIG5vdCBuYXRpdmUsIGRvbid0IGNhbGwgbm1fc2V0X25hdGl2ZV9mbGFn
cywgc2luY2Ugd2UgZG9uJ3Qgd2FudAorCQkgKiB0byByZXBsYWNlIGlmX3RyYW5zbWl0IG1ldGhv
ZCwgbm9yIHNldCBOQUZfTkVUTUFQX09OICovCisJCWlmIChuYXRpdmUpIHsKKwkJCWZvcl9yeF90
eCh0KSB7CisJCQkJZm9yIChpID0gMDsgaSA8PSBubWFfZ2V0X25yaW5ncyhuYSwgdCk7IGkrKykg
eworCQkJCQlzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZyA9ICZOTVIobmEsIHQpW2ldOworCisJ
CQkJCWlmIChubV9rcmluZ19wZW5kaW5nX29uKGtyaW5nKSkgeworCQkJCQkJa3JpbmctPm5yX21v
ZGUgPSBOS1JfTkVUTUFQX09OOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJbm1fc2V0X25hdGl2
ZV9mbGFncyhuYSk7CisJCX0KKworCX0gZWxzZSB7CisJCWlmIChuYXRpdmUpIHsKKwkJCW5tX2Ns
ZWFyX25hdGl2ZV9mbGFncyhuYSk7CisJCQlmb3JfcnhfdHgodCkgeworCQkJCWZvciAoaSA9IDA7
IGkgPD0gbm1hX2dldF9ucmluZ3MobmEsIHQpOyBpKyspIHsKKwkJCQkJc3RydWN0IG5ldG1hcF9r
cmluZyAqa3JpbmcgPSAmTk1SKG5hLCB0KVtpXTsKKworCQkJCQlpZiAobm1fa3JpbmdfcGVuZGlu
Z19vZmYoa3JpbmcpKSB7CisJCQkJCQlrcmluZy0+bnJfbW9kZSA9IE5LUl9ORVRNQVBfT0ZGOwor
CQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogU3luYyBmcm9tIENTQiBtdXN0IGJlIGRv
bmUgYmVmb3JlIFVOUkVHSUYgUFRDVEwsIG9uIHRoZSBsYXN0CisJCSAqIG5ldG1hcCBjbGllbnQu
ICovCisJCWlmIChuYXRpdmUgJiYgbmEtPmFjdGl2ZV9mZHMgPT0gMCkgeworCQkJcHRuZXRfc3lu
Y19mcm9tX2NzYihzYywgbmEpOworCQl9CisKKwkJaWYgKHNjLT5wdG5hLT5iYWNrZW5kX3JlZ2lm
cyA9PSAwKSB7CisJCQlyZXQgPSBwdG5ldF9ubV9wdGN0bChpZnAsIFBUTkVUTUFQX1BUQ1RMX0RF
TEVURSk7CisJCX0KKwl9CisKKwlpZiAob25vZmYpIHsKKwkJc2MtPnB0bmEtPmJhY2tlbmRfcmVn
aWZzKys7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorcHRuZXRfbm1fdHhz
eW5jKHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHB0
bmV0X3NvZnRjICpzYyA9IGlmX2dldHNvZnRjKGtyaW5nLT5uYS0+aWZwKTsKKwlzdHJ1Y3QgcHRu
ZXRfcXVldWUgKnBxID0gc2MtPnF1ZXVlcyArIGtyaW5nLT5yaW5nX2lkOworCWJvb2wgbm90aWZ5
OworCisJbm90aWZ5ID0gbmV0bWFwX3B0X2d1ZXN0X3R4c3luYyhwcS0+cHRyaW5nLCBrcmluZywg
ZmxhZ3MpOworCWlmIChub3RpZnkpIHsKKwkJcHRuZXRfa2ljayhwcSk7CisJfQorCisJcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0X25tX3J4c3luYyhzdHJ1Y3QgbmV0bWFwX2tyaW5n
ICprcmluZywgaW50IGZsYWdzKQoreworCXN0cnVjdCBwdG5ldF9zb2Z0YyAqc2MgPSBpZl9nZXRz
b2Z0YyhrcmluZy0+bmEtPmlmcCk7CisJc3RydWN0IHB0bmV0X3F1ZXVlICpwcSA9IHNjLT5yeHF1
ZXVlcyArIGtyaW5nLT5yaW5nX2lkOworCWJvb2wgbm90aWZ5OworCisJbm90aWZ5ID0gbmV0bWFw
X3B0X2d1ZXN0X3J4c3luYyhwcS0+cHRyaW5nLCBrcmluZywgZmxhZ3MpOworCWlmIChub3RpZnkp
IHsKKwkJcHRuZXRfa2ljayhwcSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk
CitwdG5ldF90eF9pbnRyKHZvaWQgKm9wYXF1ZSkKK3sKKwlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBx
ID0gb3BhcXVlOworCXN0cnVjdCBwdG5ldF9zb2Z0YyAqc2MgPSBwcS0+c2M7CisKKwlEQkcoZGV2
aWNlX3ByaW50ZihzYy0+ZGV2LCAiVHggaW50ZXJydXB0ICMlZFxuIiwgcHEtPmtyaW5nX2lkKSk7
CisjaWZkZWYgUFRORVRNQVBfU1RBVFMKKwlwcS0+c3RhdHMuaW50cnMgKys7CisjZW5kaWYgLyog
UFRORVRNQVBfU1RBVFMgKi8KKworCWlmIChuZXRtYXBfdHhfaXJxKHNjLT5pZnAsIHBxLT5rcmlu
Z19pZCkgIT0gTk1fSVJRX1BBU1MpIHsKKwkJcmV0dXJuOworCX0KKworCS8qIFNjaGVkdWxlIHRo
ZSB0YXNxdWV1ZSB0byBmbHVzaCBwcm9jZXNzIHRyYW5zbWlzc2lvbnMgcmVxdWVzdHMuCisJICog
SG93ZXZlciwgdnRuZXQsIGlmX2VtIGFuZCBpZl9pZ2IganVzdCBjYWxsIHB0bmV0X3RyYW5zbWl0
KCkgaGVyZSwKKwkgKiBhdCBsZWFzdCB3aGVuIHVzaW5nIE1TSS1YIGludGVycnVwdHMuIFRoZSBp
Zl9lbSBkcml2ZXIsIGluc3RlYWQKKwkgKiBzY2hlZHVsZSB0YXNrcXVldWUgd2hlbiB1c2luZyBs
ZWdhY3kgaW50ZXJydXB0cy4gKi8KKwl0YXNrcXVldWVfZW5xdWV1ZShwcS0+dGFza3EsICZwcS0+
dGFzayk7Cit9CisKK3N0YXRpYyB2b2lkCitwdG5ldF9yeF9pbnRyKHZvaWQgKm9wYXF1ZSkKK3sK
KwlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0gb3BhcXVlOworCXN0cnVjdCBwdG5ldF9zb2Z0YyAq
c2MgPSBwcS0+c2M7CisJdW5zaWduZWQgaW50IHVudXNlZDsKKworCURCRyhkZXZpY2VfcHJpbnRm
KHNjLT5kZXYsICJSeCBpbnRlcnJ1cHQgIyVkXG4iLCBwcS0+a3JpbmdfaWQpKTsKKyNpZmRlZiBQ
VE5FVE1BUF9TVEFUUworCXBxLT5zdGF0cy5pbnRycyArKzsKKyNlbmRpZiAvKiBQVE5FVE1BUF9T
VEFUUyAqLworCisJaWYgKG5ldG1hcF9yeF9pcnEoc2MtPmlmcCwgcHEtPmtyaW5nX2lkLCAmdW51
c2VkKSAhPSBOTV9JUlFfUEFTUykgeworCQlyZXR1cm47CisJfQorCisJLyogTGlrZSB2dG5ldCwg
aWZfaWdiIGFuZCBpZl9lbSBkcml2ZXJzIHdoZW4gdXNpbmcgTVNJLVggaW50ZXJydXB0cywKKwkg
KiByZWNlaXZlLXNpZGUgcHJvY2Vzc2luZyBpcyBleGVjdXRlZCBkaXJlY3RseSBpbiB0aGUgaW50
ZXJydXB0CisJICogc2VydmljZSByb3V0aW5lLiBBbHRlcm5hdGl2ZWx5LCB3ZSBtYXkgc2NoZWR1
bGUgdGhlIHRhc2txdWV1ZS4gKi8KKwlwdG5ldF9yeF9lb2YocHEsIFBUTkVUX1JYX0JVREdFVCwg
dHJ1ZSk7Cit9CisKKy8qIFRoZSBmb2xsb3dpbmcgb2ZmbG9hZGluZ3MtcmVsYXRlZCBmdW5jdGlv
bnMgYXJlIHRha2VuIGZyb20gdGhlIHZ0bmV0CisgKiBkcml2ZXIsIGJ1dCB0aGUgc2FtZSBmdW5j
dGlvbmFsaXR5IGlzIHJlcXVpcmVkIGZvciB0aGUgcHRuZXQgZHJpdmVyLgorICogQXMgYSB0ZW1w
b3Jhcnkgc29sdXRpb24sIEkgY29waWVkIHRoaXMgY29kZSBmcm9tIHZ0bmV0IGFuZCBJIHN0YXJ0
ZWQKKyAqIHRvIGdlbmVyYWxpemUgaXQgKHRha2luZyBhd2F5IGRyaXZlci1zcGVjaWZpYyBzdGF0
aXN0aWMgYWNjb3VudGluZyksCisgKiBtYWtpbmcgYXMgbGl0dGxlIG1vZGlmaWNhdGlvbnMgYXMg
cG9zc2libGUuCisgKiBJbiB0aGUgZnV0dXJlIHdlIG5lZWQgdG8gc2hhcmUgdGhlc2UgZnVuY3Rp
b25zIGJldHdlZW4gdnRuZXQgYW5kIHB0bmV0LgorICovCitzdGF0aWMgaW50CitwdG5ldF90eF9v
ZmZsb2FkX2N0eChzdHJ1Y3QgbWJ1ZiAqbSwgaW50ICpldHlwZSwgaW50ICpwcm90bywgaW50ICpz
dGFydCkKK3sKKwlzdHJ1Y3QgZXRoZXJfdmxhbl9oZWFkZXIgKmV2aDsKKwlpbnQgb2Zmc2V0Owor
CisJZXZoID0gbXRvZChtLCBzdHJ1Y3QgZXRoZXJfdmxhbl9oZWFkZXIgKik7CisJaWYgKGV2aC0+
ZXZsX2VuY2FwX3Byb3RvID09IGh0b25zKEVUSEVSVFlQRV9WTEFOKSkgeworCQkvKiBCTVY6IFdl
IHNob3VsZCBoYW5kbGUgbmVzdGVkIFZMQU4gdGFncyB0b28uICovCisJCSpldHlwZSA9IG50b2hz
KGV2aC0+ZXZsX3Byb3RvKTsKKwkJb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBldGhlcl92bGFuX2hl
YWRlcik7CisJfSBlbHNlIHsKKwkJKmV0eXBlID0gbnRvaHMoZXZoLT5ldmxfZW5jYXBfcHJvdG8p
OworCQlvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGV0aGVyX2hlYWRlcik7CisJfQorCisJc3dpdGNo
ICgqZXR5cGUpIHsKKyNpZiBkZWZpbmVkKElORVQpCisJY2FzZSBFVEhFUlRZUEVfSVA6IHsKKwkJ
c3RydWN0IGlwICppcCwgaXBoZHI7CisJCWlmIChfX3ByZWRpY3RfZmFsc2UobS0+bV9sZW4gPCBv
ZmZzZXQgKyBzaXplb2Yoc3RydWN0IGlwKSkpIHsKKwkJCW1fY29weWRhdGEobSwgb2Zmc2V0LCBz
aXplb2Yoc3RydWN0IGlwKSwKKwkJCSAgICAoY2FkZHJfdCkgJmlwaGRyKTsKKwkJCWlwID0gJmlw
aGRyOworCQl9IGVsc2UKKwkJCWlwID0gKHN0cnVjdCBpcCAqKShtLT5tX2RhdGEgKyBvZmZzZXQp
OworCQkqcHJvdG8gPSBpcC0+aXBfcDsKKwkJKnN0YXJ0ID0gb2Zmc2V0ICsgKGlwLT5pcF9obCA8
PCAyKTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUNikKKwljYXNlIEVU
SEVSVFlQRV9JUFY2OgorCQkqcHJvdG8gPSAtMTsKKwkJKnN0YXJ0ID0gaXA2X2xhc3RoZHIobSwg
b2Zmc2V0LCBJUFBST1RPX0lQVjYsIHByb3RvKTsKKwkJLyogQXNzZXJ0IHRoZSBuZXR3b3JrIHN0
YWNrIHNlbnQgdXMgYSB2YWxpZCBwYWNrZXQuICovCisJCUtBU1NFUlQoKnN0YXJ0ID4gb2Zmc2V0
LAorCQkgICAgKCIlczogbWJ1ZiAlcCBzdGFydCAlZCBvZmZzZXQgJWQgcHJvdG8gJWQiLCBfX2Z1
bmNfXywgbSwKKwkJICAgICpzdGFydCwgb2Zmc2V0LCAqcHJvdG8pKTsKKwkJYnJlYWs7CisjZW5k
aWYKKwlkZWZhdWx0OgorCQkvKiBIZXJlIHdlIHNob3VsZCBpbmNyZW1lbnQgdGhlIHR4X2NzdW1f
YmFkX2V0aHR5cGUgY291bnRlci4gKi8KKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKworCXJldHVy
biAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0X3R4X29mZmxvYWRfdHNvKGlmX3QgaWZwLCBz
dHJ1Y3QgbWJ1ZiAqbSwgaW50IGV0aF90eXBlLAorCQkgICAgIGludCBvZmZzZXQsIGJvb2wgYWxs
b3dfZWNuLCBzdHJ1Y3QgdmlydGlvX25ldF9oZHIgKmhkcikKK3sKKwlzdGF0aWMgc3RydWN0IHRp
bWV2YWwgbGFzdGVjbjsKKwlzdGF0aWMgaW50IGN1cmVjbjsKKwlzdHJ1Y3QgdGNwaGRyICp0Y3As
IHRjcGhkcjsKKworCWlmIChfX3ByZWRpY3RfZmFsc2UobS0+bV9sZW4gPCBvZmZzZXQgKyBzaXpl
b2Yoc3RydWN0IHRjcGhkcikpKSB7CisJCW1fY29weWRhdGEobSwgb2Zmc2V0LCBzaXplb2Yoc3Ry
dWN0IHRjcGhkciksIChjYWRkcl90KSAmdGNwaGRyKTsKKwkJdGNwID0gJnRjcGhkcjsKKwl9IGVs
c2UKKwkJdGNwID0gKHN0cnVjdCB0Y3BoZHIgKikobS0+bV9kYXRhICsgb2Zmc2V0KTsKKworCWhk
ci0+aGRyX2xlbiA9IG9mZnNldCArICh0Y3AtPnRoX29mZiA8PCAyKTsKKwloZHItPmdzb19zaXpl
ID0gbS0+bV9wa3RoZHIudHNvX3NlZ3N6OworCWhkci0+Z3NvX3R5cGUgPSBldGhfdHlwZSA9PSBF
VEhFUlRZUEVfSVAgPyBWSVJUSU9fTkVUX0hEUl9HU09fVENQVjQgOgorCSAgICBWSVJUSU9fTkVU
X0hEUl9HU09fVENQVjY7CisKKwlpZiAodGNwLT50aF9mbGFncyAmIFRIX0NXUikgeworCQkvKgor
CQkgKiBEcm9wIGlmIFZJUlRJT19ORVRfRl9IT1NUX0VDTiB3YXMgbm90IG5lZ290aWF0ZWQuIElu
IEZyZWVCU0QsCisJCSAqIEVDTiBzdXBwb3J0IGlzIG5vdCBvbiBhIHBlci1pbnRlcmZhY2UgYmFz
aXMsIGJ1dCBnbG9iYWxseSB2aWEKKwkJICogdGhlIG5ldC5pbmV0LnRjcC5lY24uZW5hYmxlIHN5
c2N0bCBrbm9iLiBUaGUgZGVmYXVsdCBpcyBvZmYuCisJCSAqLworCQlpZiAoIWFsbG93X2Vjbikg
eworCQkJaWYgKHBwc3JhdGVjaGVjaygmbGFzdGVjbiwgJmN1cmVjbiwgMSkpCisJCQkJaWZfcHJp
bnRmKGlmcCwKKwkJCQkgICAgIlRTTyB3aXRoIEVDTiBub3QgbmVnb3RpYXRlZCB3aXRoIGhvc3Rc
biIpOworCQkJcmV0dXJuIChFTk9UU1VQKTsKKwkJfQorCQloZHItPmdzb190eXBlIHw9IFZJUlRJ
T19ORVRfSERSX0dTT19FQ047CisJfQorCisJLyogSGVyZSB3ZSBzaG91bGQgaW5jcmVtZW50IHR4
X3RzbyBjb3VudGVyLiAqLworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHN0cnVjdCBtYnVm
ICoKK3B0bmV0X3R4X29mZmxvYWQoaWZfdCBpZnAsIHN0cnVjdCBtYnVmICptLCBib29sIGFsbG93
X2VjbiwKKwkJIHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqaGRyKQoreworCWludCBmbGFncywgZXR5
cGUsIGNzdW1fc3RhcnQsIHByb3RvLCBlcnJvcjsKKworCWZsYWdzID0gbS0+bV9wa3RoZHIuY3N1
bV9mbGFnczsKKworCWVycm9yID0gcHRuZXRfdHhfb2ZmbG9hZF9jdHgobSwgJmV0eXBlLCAmcHJv
dG8sICZjc3VtX3N0YXJ0KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZHJvcDsKKworCWlmICgoZXR5
cGUgPT0gRVRIRVJUWVBFX0lQICYmIGZsYWdzICYgUFRORVRfQ1NVTV9PRkZMT0FEKSB8fAorCSAg
ICAoZXR5cGUgPT0gRVRIRVJUWVBFX0lQVjYgJiYgZmxhZ3MgJiBQVE5FVF9DU1VNX09GRkxPQURf
SVBWNikpIHsKKwkJLyoKKwkJICogV2UgY291bGQgY29tcGFyZSB0aGUgSVAgcHJvdG9jb2wgdnMg
dGhlIENTVU1fIGZsYWcgdG9vLAorCQkgKiBidXQgdGhhdCByZWFsbHkgc2hvdWxkIG5vdCBiZSBu
ZWNlc3NhcnkuCisJCSAqLworCQloZHItPmZsYWdzIHw9IFZJUlRJT19ORVRfSERSX0ZfTkVFRFNf
Q1NVTTsKKwkJaGRyLT5jc3VtX3N0YXJ0ID0gY3N1bV9zdGFydDsKKwkJaGRyLT5jc3VtX29mZnNl
dCA9IG0tPm1fcGt0aGRyLmNzdW1fZGF0YTsKKwkJLyogSGVyZSB3ZSBzaG91bGQgaW5jcmVtZW50
IHRoZSB0eF9jc3VtIGNvdW50ZXIuICovCisJfQorCisJaWYgKGZsYWdzICYgQ1NVTV9UU08pIHsK
KwkJaWYgKF9fcHJlZGljdF9mYWxzZShwcm90byAhPSBJUFBST1RPX1RDUCkpIHsKKwkJCS8qIExp
a2VseSBmYWlsZWQgdG8gY29ycmVjdGx5IHBhcnNlIHRoZSBtYnVmLgorCQkJICogSGVyZSB3ZSBz
aG91bGQgaW5jcmVtZW50IHRoZSB0eF90c29fbm90X3RjcAorCQkJICogY291bnRlci4gKi8KKwkJ
CWdvdG8gZHJvcDsKKwkJfQorCisJCUtBU1NFUlQoaGRyLT5mbGFncyAmIFZJUlRJT19ORVRfSERS
X0ZfTkVFRFNfQ1NVTSwKKwkJICAgICgiJXM6IG1idWYgJXAgVFNPIHdpdGhvdXQgY2hlY2tzdW0g
b2ZmbG9hZCAlI3giLAorCQkgICAgX19mdW5jX18sIG0sIGZsYWdzKSk7CisKKwkJZXJyb3IgPSBw
dG5ldF90eF9vZmZsb2FkX3RzbyhpZnAsIG0sIGV0eXBlLCBjc3VtX3N0YXJ0LAorCQkJCQkgICAg
IGFsbG93X2VjbiwgaGRyKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBkcm9wOworCX0KKworCXJl
dHVybiAobSk7CisKK2Ryb3A6CisJbV9mcmVlbShtKTsKKwlyZXR1cm4gKE5VTEwpOworfQorCitz
dGF0aWMgdm9pZAorcHRuZXRfdmxhbl90YWdfcmVtb3ZlKHN0cnVjdCBtYnVmICptKQoreworCXN0
cnVjdCBldGhlcl92bGFuX2hlYWRlciAqZXZoOworCisJZXZoID0gbXRvZChtLCBzdHJ1Y3QgZXRo
ZXJfdmxhbl9oZWFkZXIgKik7CisJbS0+bV9wa3RoZHIuZXRoZXJfdnRhZyA9IG50b2hzKGV2aC0+
ZXZsX3RhZyk7CisJbS0+bV9mbGFncyB8PSBNX1ZMQU5UQUc7CisKKwkvKiBTdHJpcCB0aGUgODAy
LjFRIGhlYWRlci4gKi8KKwliY29weSgoY2hhciAqKSBldmgsIChjaGFyICopIGV2aCArIEVUSEVS
X1ZMQU5fRU5DQVBfTEVOLAorCSAgICBFVEhFUl9IRFJfTEVOIC0gRVRIRVJfVFlQRV9MRU4pOwor
CW1fYWRqKG0sIEVUSEVSX1ZMQU5fRU5DQVBfTEVOKTsKK30KKworLyoKKyAqIFVzZSB0aGUgY2hl
Y2tzdW0gb2Zmc2V0IGluIHRoZSBWaXJ0SU8gaGVhZGVyIHRvIHNldCB0aGUKKyAqIGNvcnJlY3Qg
Q1NVTV8qIGZsYWdzLgorICovCitzdGF0aWMgaW50CitwdG5ldF9yeF9jc3VtX2J5X29mZnNldChz
dHJ1Y3QgbWJ1ZiAqbSwgdWludDE2X3QgZXRoX3R5cGUsIGludCBpcF9zdGFydCwKKwkJCXN0cnVj
dCB2aXJ0aW9fbmV0X2hkciAqaGRyKQoreworI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJ
TkVUNikKKwlpbnQgb2Zmc2V0ID0gaGRyLT5jc3VtX3N0YXJ0ICsgaGRyLT5jc3VtX29mZnNldDsK
KyNlbmRpZgorCisJLyogT25seSBkbyBhIGJhc2ljIHNhbml0eSBjaGVjayBvbiB0aGUgb2Zmc2V0
LiAqLworCXN3aXRjaCAoZXRoX3R5cGUpIHsKKyNpZiBkZWZpbmVkKElORVQpCisJY2FzZSBFVEhF
UlRZUEVfSVA6CisJCWlmIChfX3ByZWRpY3RfZmFsc2Uob2Zmc2V0IDwgaXBfc3RhcnQgKyBzaXpl
b2Yoc3RydWN0IGlwKSkpCisJCQlyZXR1cm4gKDEpOworCQlicmVhazsKKyNlbmRpZgorI2lmIGRl
ZmluZWQoSU5FVDYpCisJY2FzZSBFVEhFUlRZUEVfSVBWNjoKKwkJaWYgKF9fcHJlZGljdF9mYWxz
ZShvZmZzZXQgPCBpcF9zdGFydCArIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpKQorCQkJcmV0dXJu
ICgxKTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQkvKiBIZXJlIHdlIHNob3VsZCBp
bmNyZW1lbnQgdGhlIHJ4X2NzdW1fYmFkX2V0aHR5cGUgY291bnRlci4gKi8KKwkJcmV0dXJuICgx
KTsKKwl9CisKKwkvKgorCSAqIFVzZSB0aGUgb2Zmc2V0IHRvIGRldGVybWluZSB0aGUgYXBwcm9w
cmlhdGUgQ1NVTV8qIGZsYWdzLiBUaGlzIGlzCisJICogYSBiaXQgZGlydHksIGJ1dCB3ZSBjYW4g
Z2V0IGJ5IHdpdGggaXQgc2luY2UgdGhlIGNoZWNrc3VtIG9mZnNldHMKKwkgKiBoYXBwZW4gdG8g
YmUgZGlmZmVyZW50LiBXZSBhc3N1bWUgdGhlIGhvc3QgaG9zdCBkb2VzIG5vdCBkbyBJUHY0CisJ
ICogaGVhZGVyIGNoZWNrc3VtIG9mZmxvYWRpbmcuCisJICovCisJc3dpdGNoIChoZHItPmNzdW1f
b2Zmc2V0KSB7CisJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCB1aF9zdW0pOgorCWNhc2Ug
b2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgdGhfc3VtKToKKwkJbS0+bV9wa3RoZHIuY3N1bV9mbGFn
cyB8PSBDU1VNX0RBVEFfVkFMSUQgfCBDU1VNX1BTRVVET19IRFI7CisJCW0tPm1fcGt0aGRyLmNz
dW1fZGF0YSA9IDB4RkZGRjsKKwkJYnJlYWs7CisJY2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2N0cGhk
ciwgY2hlY2tzdW0pOgorCQltLT5tX3BrdGhkci5jc3VtX2ZsYWdzIHw9IENTVU1fU0NUUF9WQUxJ
RDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogSGVyZSB3ZSBzaG91bGQgaW5jcmVtZW50IHRo
ZSByeF9jc3VtX2JhZF9vZmZzZXQgY291bnRlci4gKi8KKwkJcmV0dXJuICgxKTsKKwl9CisKKwly
ZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitwdG5ldF9yeF9jc3VtX2J5X3BhcnNlKHN0cnVj
dCBtYnVmICptLCB1aW50MTZfdCBldGhfdHlwZSwgaW50IGlwX3N0YXJ0LAorCQkgICAgICAgc3Ry
dWN0IHZpcnRpb19uZXRfaGRyICpoZHIpCit7CisJaW50IG9mZnNldCwgcHJvdG87CisKKwlzd2l0
Y2ggKGV0aF90eXBlKSB7CisjaWYgZGVmaW5lZChJTkVUKQorCWNhc2UgRVRIRVJUWVBFX0lQOiB7
CisJCXN0cnVjdCBpcCAqaXA7CisJCWlmIChfX3ByZWRpY3RfZmFsc2UobS0+bV9sZW4gPCBpcF9z
dGFydCArIHNpemVvZihzdHJ1Y3QgaXApKSkKKwkJCXJldHVybiAoMSk7CisJCWlwID0gKHN0cnVj
dCBpcCAqKShtLT5tX2RhdGEgKyBpcF9zdGFydCk7CisJCXByb3RvID0gaXAtPmlwX3A7CisJCW9m
ZnNldCA9IGlwX3N0YXJ0ICsgKGlwLT5pcF9obCA8PCAyKTsKKwkJYnJlYWs7CisJfQorI2VuZGlm
CisjaWYgZGVmaW5lZChJTkVUNikKKwljYXNlIEVUSEVSVFlQRV9JUFY2OgorCQlpZiAoX19wcmVk
aWN0X2ZhbHNlKG0tPm1fbGVuIDwgaXBfc3RhcnQgKworCQkgICAgc2l6ZW9mKHN0cnVjdCBpcDZf
aGRyKSkpCisJCQlyZXR1cm4gKDEpOworCQlvZmZzZXQgPSBpcDZfbGFzdGhkcihtLCBpcF9zdGFy
dCwgSVBQUk9UT19JUFY2LCAmcHJvdG8pOworCQlpZiAoX19wcmVkaWN0X2ZhbHNlKG9mZnNldCA8
IDApKQorCQkJcmV0dXJuICgxKTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQkvKiBI
ZXJlIHdlIHNob3VsZCBpbmNyZW1lbnQgdGhlIHJ4X2NzdW1fYmFkX2V0aHR5cGUgY291bnRlci4g
Ki8KKwkJcmV0dXJuICgxKTsKKwl9CisKKwlzd2l0Y2ggKHByb3RvKSB7CisJY2FzZSBJUFBST1RP
X1RDUDoKKwkJaWYgKF9fcHJlZGljdF9mYWxzZShtLT5tX2xlbiA8IG9mZnNldCArIHNpemVvZihz
dHJ1Y3QgdGNwaGRyKSkpCisJCQlyZXR1cm4gKDEpOworCQltLT5tX3BrdGhkci5jc3VtX2ZsYWdz
IHw9IENTVU1fREFUQV9WQUxJRCB8IENTVU1fUFNFVURPX0hEUjsKKwkJbS0+bV9wa3RoZHIuY3N1
bV9kYXRhID0gMHhGRkZGOworCQlicmVhazsKKwljYXNlIElQUFJPVE9fVURQOgorCQlpZiAoX19w
cmVkaWN0X2ZhbHNlKG0tPm1fbGVuIDwgb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKSkK
KwkJCXJldHVybiAoMSk7CisJCW0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MgfD0gQ1NVTV9EQVRBX1ZB
TElEIHwgQ1NVTV9QU0VVRE9fSERSOworCQltLT5tX3BrdGhkci5jc3VtX2RhdGEgPSAweEZGRkY7
CisJCWJyZWFrOworCWNhc2UgSVBQUk9UT19TQ1RQOgorCQlpZiAoX19wcmVkaWN0X2ZhbHNlKG0t
Pm1fbGVuIDwgb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkpCisJCQlyZXR1cm4gKDEp
OworCQltLT5tX3BrdGhkci5jc3VtX2ZsYWdzIHw9IENTVU1fU0NUUF9WQUxJRDsKKwkJYnJlYWs7
CisJZGVmYXVsdDoKKwkJLyoKKwkJICogRm9yIHRoZSByZW1haW5pbmcgcHJvdG9jb2xzLCBGcmVl
QlNEIGRvZXMgbm90IHN1cHBvcnQKKwkJICogY2hlY2tzdW0gb2ZmbG9hZGluZywgc28gdGhlIGNo
ZWNrc3VtIHdpbGwgYmUgcmVjb21wdXRlZC4KKwkJICovCisjaWYgMAorCQlpZl9wcmludGYoaWZw
LCAiY2tzdW0gb2ZmbG9hZCBvZiB1bnN1cHBvcnRlZCAiCisJCSAgICAicHJvdG9jb2wgZXRoX3R5
cGU9JSN4IHByb3RvPSVkIGNzdW1fc3RhcnQ9JWQgIgorCQkgICAgImNzdW1fb2Zmc2V0PSVkXG4i
LCBfX2Z1bmNfXywgZXRoX3R5cGUsIHByb3RvLAorCQkgICAgaGRyLT5jc3VtX3N0YXJ0LCBoZHIt
PmNzdW1fb2Zmc2V0KTsKKyNlbmRpZgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gKDApOworfQor
CisvKgorICogU2V0IHRoZSBhcHByb3ByaWF0ZSBDU1VNXyogZmxhZ3MuIFVuZm9ydHVuYXRlbHks
IHRoZSBpbmZvcm1hdGlvbgorICogcHJvdmlkZWQgaXMgbm90IGRpcmVjdGx5IHVzZWZ1bCB0byB1
cy4gVGhlIFZpcnRJTyBoZWFkZXIgZ2l2ZXMgdGhlCisgKiBvZmZzZXQgb2YgdGhlIGNoZWNrc3Vt
LCB3aGljaCBpcyBhbGwgTGludXggbmVlZHMsIGJ1dCB0aGlzIGlzIG5vdAorICogaG93IEZyZWVC
U0QgZG9lcyB0aGluZ3MuIFdlIGFyZSBmb3JjZWQgdG8gcGVlayBpbnNpZGUgdGhlIHBhY2tldAor
ICogYSBiaXQuCisgKgorICogSXQgd291bGQgYmUgbmljZSBpZiBWaXJ0SU8gZ2F2ZSB1cyB0aGUg
TDQgcHJvdG9jb2wgb3IgaWYgRnJlZUJTRAorICogY291bGQgYWNjZXB0IHRoZSBvZmZzZXRzIGFu
ZCBsZXQgdGhlIHN0YWNrIGZpZ3VyZSBpdCBvdXQuCisgKi8KK3N0YXRpYyBpbnQKK3B0bmV0X3J4
X2NzdW0oc3RydWN0IG1idWYgKm0sIHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqaGRyKQoreworCXN0
cnVjdCBldGhlcl9oZWFkZXIgKmVoOworCXN0cnVjdCBldGhlcl92bGFuX2hlYWRlciAqZXZoOwor
CXVpbnQxNl90IGV0aF90eXBlOworCWludCBvZmZzZXQsIGVycm9yOworCisJZWggPSBtdG9kKG0s
IHN0cnVjdCBldGhlcl9oZWFkZXIgKik7CisJZXRoX3R5cGUgPSBudG9ocyhlaC0+ZXRoZXJfdHlw
ZSk7CisJaWYgKGV0aF90eXBlID09IEVUSEVSVFlQRV9WTEFOKSB7CisJCS8qIEJNVjogV2Ugc2hv
dWxkIGhhbmRsZSBuZXN0ZWQgVkxBTiB0YWdzIHRvby4gKi8KKwkJZXZoID0gbXRvZChtLCBzdHJ1
Y3QgZXRoZXJfdmxhbl9oZWFkZXIgKik7CisJCWV0aF90eXBlID0gbnRvaHMoZXZoLT5ldmxfcHJv
dG8pOworCQlvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGV0aGVyX3ZsYW5faGVhZGVyKTsKKwl9IGVs
c2UKKwkJb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBldGhlcl9oZWFkZXIpOworCisJaWYgKGhkci0+
ZmxhZ3MgJiBWSVJUSU9fTkVUX0hEUl9GX05FRURTX0NTVU0pCisJCWVycm9yID0gcHRuZXRfcnhf
Y3N1bV9ieV9vZmZzZXQobSwgZXRoX3R5cGUsIG9mZnNldCwgaGRyKTsKKwllbHNlCisJCWVycm9y
ID0gcHRuZXRfcnhfY3N1bV9ieV9wYXJzZShtLCBldGhfdHlwZSwgb2Zmc2V0LCBoZHIpOworCisJ
cmV0dXJuIChlcnJvcik7Cit9CisvKiBFbmQgb2Ygb2ZmbG9hZGluZy1yZWxhdGVkIGZ1bmN0aW9u
cyB0byBiZSBzaGFyZWQgd2l0aCB2dG5ldC4gKi8KKworc3RhdGljIGlubGluZSB2b2lkCitwdG5l
dF9zeW5jX3RhaWwoc3RydWN0IHB0bmV0X3JpbmcgKnB0cmluZywgc3RydWN0IG5ldG1hcF9rcmlu
ZyAqa3JpbmcpCit7CisJc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nID0ga3JpbmctPnJpbmc7CisK
KwkvKiBVcGRhdGUgaHdjdXIgYW5kIGh3dGFpbCBhcyBrbm93biBieSB0aGUgaG9zdC4gKi8KKyAg
ICAgICAgcHRuZXRtYXBfZ3Vlc3RfcmVhZF9rcmluZ19jc2IocHRyaW5nLCBrcmluZyk7CisKKwkv
KiBubV9zeW5jX2ZpbmFsaXplICovCisJcmluZy0+dGFpbCA9IGtyaW5nLT5ydGFpbCA9IGtyaW5n
LT5ucl9od3RhaWw7Cit9CisKK3N0YXRpYyB2b2lkCitwdG5ldF9yaW5nX3VwZGF0ZShzdHJ1Y3Qg
cHRuZXRfcXVldWUgKnBxLCBzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywKKwkJICB1bnNpZ25l
ZCBpbnQgaGVhZCwgdW5zaWduZWQgaW50IHN5bmNfZmxhZ3MpCit7CisJc3RydWN0IG5ldG1hcF9y
aW5nICpyaW5nID0ga3JpbmctPnJpbmc7CisJc3RydWN0IHB0bmV0X3JpbmcgKnB0cmluZyA9IHBx
LT5wdHJpbmc7CisKKwkvKiBTb21lIHBhY2tldHMgaGF2ZSBiZWVuIHB1c2hlZCB0byB0aGUgbmV0
bWFwIHJpbmcuIFdlIGhhdmUKKwkgKiB0byB0ZWxsIHRoZSBob3N0IHRvIHByb2Nlc3MgdGhlIG5l
dyBwYWNrZXRzLCB1cGRhdGluZyBjdXIKKwkgKiBhbmQgaGVhZCBpbiB0aGUgQ1NCLiAqLworCXJp
bmctPmhlYWQgPSByaW5nLT5jdXIgPSBoZWFkOworCisJLyogTWltaWMgbm1fdHhzeW5jX3Byb2xv
Z3VlL25tX3J4c3luY19wcm9sb2d1ZS4gKi8KKwlrcmluZy0+cmN1ciA9IGtyaW5nLT5yaGVhZCA9
IGhlYWQ7CisKKwlwdG5ldG1hcF9ndWVzdF93cml0ZV9rcmluZ19jc2IocHRyaW5nLCBrcmluZy0+
cmN1ciwga3JpbmctPnJoZWFkKTsKKworCS8qIEtpY2sgdGhlIGhvc3QgaWYgbmVlZGVkLiAqLwor
CWlmIChOTV9BQ0NFU1NfT05DRShwdHJpbmctPmhvc3RfbmVlZF9raWNrKSkgeworCQlwdHJpbmct
PnN5bmNfZmxhZ3MgPSBzeW5jX2ZsYWdzOworCQlwdG5ldF9raWNrKHBxKTsKKwl9Cit9CisKKyNk
ZWZpbmUgUFRORVRfVFhfTk9TUEFDRShfaCwgX2ssIF9taW4pCVwKKwkoKCgoX2gpIDwgKF9rKS0+
cnRhaWwpID8gMCA6IChfayktPm5rcl9udW1fc2xvdHMpICsgXAorCQkoX2spLT5ydGFpbCAtIChf
aCkpIDwgKF9taW4pCisKKy8qIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBieSB0aGUgbmV0
d29yayBzdGFjaywgb3IgYnkKKyAqIGJ5IHRoZSB0YXNrcXVldWUgdGhyZWFkLiAqLworc3RhdGlj
IGludAorcHRuZXRfZHJhaW5fdHJhbnNtaXRfcXVldWUoc3RydWN0IHB0bmV0X3F1ZXVlICpwcSwg
dW5zaWduZWQgaW50IGJ1ZGdldCwKKwkJCSAgIGJvb2wgbWF5X3Jlc2NoZWQpCit7CisJc3RydWN0
IHB0bmV0X3NvZnRjICpzYyA9IHBxLT5zYzsKKwlib29sIGhhdmVfdm5ldF9oZHIgPSBzYy0+dm5l
dF9oZHJfbGVuOworCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEgPSAmc2MtPnB0bmEtPmRyLnVw
OworCWlmX3QgaWZwID0gc2MtPmlmcDsKKwl1bnNpZ25lZCBpbnQgYmF0Y2hfY291bnQgPSAwOwor
CXN0cnVjdCBwdG5ldF9yaW5nICpwdHJpbmc7CisJc3RydWN0IG5ldG1hcF9rcmluZyAqa3Jpbmc7
CisJc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nOworCXN0cnVjdCBuZXRtYXBfc2xvdCAqc2xvdDsK
Kwl1bnNpZ25lZCBpbnQgY291bnQgPSAwOworCXVuc2lnbmVkIGludCBtaW5zcGFjZTsKKwl1bnNp
Z25lZCBpbnQgaGVhZDsKKwl1bnNpZ25lZCBpbnQgbGltOworCXN0cnVjdCBtYnVmICptaGVhZDsK
KwlzdHJ1Y3QgbWJ1ZiAqbWY7CisJaW50IG5tYnVmX2J5dGVzOworCXVpbnQ4X3QgKm5tYnVmOwor
CisJaWYgKCFQVE5FVF9RX1RSWUxPQ0socHEpKSB7CisJCS8qIFdlIGZhaWxlZCB0byBhY3F1aXJl
IHRoZSBsb2NrLCBzY2hlZHVsZSB0aGUgdGFza3F1ZXVlLiAqLworCQlSRCgxLCAiRGVmZXJyaW5n
IFRYIHdvcmsiKTsKKwkJaWYgKG1heV9yZXNjaGVkKSB7CisJCQl0YXNrcXVldWVfZW5xdWV1ZShw
cS0+dGFza3EsICZwcS0+dGFzayk7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAodW5s
aWtlbHkoIShpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykpKSB7CisJCVBUTkVU
X1FfVU5MT0NLKHBxKTsKKwkJUkQoMSwgIkludGVyZmFjZSBpcyBkb3duIik7CisJCXJldHVybiBF
TkVURE9XTjsKKwl9CisKKwlwdHJpbmcgPSBwcS0+cHRyaW5nOworCWtyaW5nID0gbmEtPnR4X3Jp
bmdzICsgcHEtPmtyaW5nX2lkOworCXJpbmcgPSBrcmluZy0+cmluZzsKKwlsaW0gPSBrcmluZy0+
bmtyX251bV9zbG90cyAtIDE7CisJaGVhZCA9IHJpbmctPmhlYWQ7CisJbWluc3BhY2UgPSBzYy0+
bWluX3R4X3NwYWNlOworCisJd2hpbGUgKGNvdW50IDwgYnVkZ2V0KSB7CisJCWlmIChQVE5FVF9U
WF9OT1NQQUNFKGhlYWQsIGtyaW5nLCBtaW5zcGFjZSkpIHsKKwkJCS8qIFdlIHJhbiBvdXQgb2Yg
c2xvdCwgbGV0J3Mgc2VlIGlmIHRoZSBob3N0IGhhcworCQkJICogZnJlZWQgdXAgc29tZSwgYnkg
cmVhZGluZyBod2N1ciBhbmQgaHd0YWlsIGZyb20KKwkJCSAqIHRoZSBDU0IuICovCisJCQlwdG5l
dF9zeW5jX3RhaWwocHRyaW5nLCBrcmluZyk7CisKKwkJCWlmIChQVE5FVF9UWF9OT1NQQUNFKGhl
YWQsIGtyaW5nLCBtaW5zcGFjZSkpIHsKKwkJCQkvKiBTdGlsbCBubyBzbG90cyBhdmFpbGFibGUu
IFJlYWN0aXZhdGUgdGhlCisJCQkJICogaW50ZXJydXB0cyBzbyB0aGF0IHdlIGNhbiBiZSBub3Rp
ZmllZAorCQkJCSAqIHdoZW4gc29tZSBmcmVlIHNsb3RzIGFyZSBtYWRlIGF2YWlsYWJsZSBieQor
CQkJCSAqIHRoZSBob3N0LiAqLworCQkJCXB0cmluZy0+Z3Vlc3RfbmVlZF9raWNrID0gMTsKKwor
CQkJCS8qIERvdWJsZS1jaGVjay4gKi8KKwkJCQlwdG5ldF9zeW5jX3RhaWwocHRyaW5nLCBrcmlu
Zyk7CisJCQkJaWYgKGxpa2VseShQVE5FVF9UWF9OT1NQQUNFKGhlYWQsIGtyaW5nLAorCQkJCQkJ
CSAgICBtaW5zcGFjZSkpKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCVJEKDEsICJGb3Vu
ZCBtb3JlIHNsb3RzIGJ5IGRvdWJsZWNoZWNrIik7CisJCQkJLyogTW9yZSBzbG90cyB3ZXJlIGZy
ZWVkIGJlZm9yZSByZWFjdGl2YXRpbmcKKwkJCQkgKiB0aGUgaW50ZXJydXB0cy4gKi8KKwkJCQlw
dHJpbmctPmd1ZXN0X25lZWRfa2ljayA9IDA7CisJCQl9CisJCX0KKworCQltaGVhZCA9IGRyYnJf
cGVlayhpZnAsIHBxLT5idWZyaW5nKTsKKwkJaWYgKCFtaGVhZCkgeworCQkJYnJlYWs7CisJCX0K
KworCQkvKiBJbml0aWFsaXplIHRyYW5zbWlzc2lvbiBzdGF0ZSB2YXJpYWJsZXMuICovCisJCXNs
b3QgPSByaW5nLT5zbG90ICsgaGVhZDsKKwkJbm1idWYgPSBOTUIobmEsIHNsb3QpOworCQlubWJ1
Zl9ieXRlcyA9IDA7CisKKwkJLyogSWYgbmVlZGVkLCBwcmVwYXJlIHRoZSB2aXJ0aW8tbmV0IGhl
YWRlciBhdCB0aGUgYmVnaW5uaW5nCisJCSAqIG9mIHRoZSBmaXJzdCBzbG90LiAqLworCQlpZiAo
aGF2ZV92bmV0X2hkcikgeworCQkJc3RydWN0IHZpcnRpb19uZXRfaGRyICp2aCA9CisJCQkJCShz
dHJ1Y3QgdmlydGlvX25ldF9oZHIgKilubWJ1ZjsKKworCQkJLyogRm9yIHBlcmZvcm1hbmNlLCB3
ZSBjb3VsZCByZXBsYWNlIHRoaXMgbWVtc2V0KCkgd2l0aAorCQkJICogdHdvIDgtYnl0ZXMtd2lk
ZSB3cml0ZXMuICovCisJCQltZW1zZXQobm1idWYsIDAsIFBUTkVUX0hEUl9TSVpFKTsKKwkJCWlm
IChtaGVhZC0+bV9wa3RoZHIuY3N1bV9mbGFncyAmIFBUTkVUX0FMTF9PRkZMT0FEKSB7CisJCQkJ
bWhlYWQgPSBwdG5ldF90eF9vZmZsb2FkKGlmcCwgbWhlYWQsIGZhbHNlLAorCQkJCQkJCSB2aCk7
CisJCQkJaWYgKHVubGlrZWx5KCFtaGVhZCkpIHsKKwkJCQkJLyogUGFja2V0IGRyb3BwZWQgYmVj
YXVzZSBlcnJvcnMKKwkJCQkJICogb2NjdXJyZWQgd2hpbGUgcHJlcGFyaW5nIHRoZSB2bmV0CisJ
CQkJCSAqIGhlYWRlci4gTGV0J3MgZ28gYWhlYWQgd2l0aCB0aGUgbmV4dAorCQkJCQkgKiBwYWNr
ZXQuICovCisJCQkJCXBxLT5zdGF0cy5lcnJvcnMgKys7CisJCQkJCWRyYnJfYWR2YW5jZShpZnAs
IHBxLT5idWZyaW5nKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJTkQoMSwgIiVz
OiBbY3N1bV9mbGFncyAlbFhdIHZuZXQgaGRyOiBmbGFncyAleCAiCisJCQkgICAgICAiY3N1bV9z
dGFydCAldSBjc3VtX29mcyAldSBoZHJfbGVuID0gJXUgIgorCQkJICAgICAgImdzb19zaXplICV1
IGdzb190eXBlICV4IiwgX19mdW5jX18sCisJCQkgICAgICBtaGVhZC0+bV9wa3RoZHIuY3N1bV9m
bGFncywgdmgtPmZsYWdzLAorCQkJICAgICAgdmgtPmNzdW1fc3RhcnQsIHZoLT5jc3VtX29mZnNl
dCwgdmgtPmhkcl9sZW4sCisJCQkgICAgICB2aC0+Z3NvX3NpemUsIHZoLT5nc29fdHlwZSk7CisK
KwkJCW5tYnVmICs9IFBUTkVUX0hEUl9TSVpFOworCQkJbm1idWZfYnl0ZXMgKz0gUFRORVRfSERS
X1NJWkU7CisJCX0KKworCQlmb3IgKG1mID0gbWhlYWQ7IG1mOyBtZiA9IG1mLT5tX25leHQpIHsK
KwkJCXVpbnQ4X3QgKm1kYXRhID0gbWYtPm1fZGF0YTsKKwkJCWludCBtbGVuID0gbWYtPm1fbGVu
OworCisJCQlmb3IgKDs7KSB7CisJCQkJaW50IGNvcHkgPSBORVRNQVBfQlVGX1NJWkUobmEpIC0g
bm1idWZfYnl0ZXM7CisKKwkJCQlpZiAobWxlbiA8IGNvcHkpIHsKKwkJCQkJY29weSA9IG1sZW47
CisJCQkJfQorCQkJCW1lbWNweShubWJ1ZiwgbWRhdGEsIGNvcHkpOworCisJCQkJbWRhdGEgKz0g
Y29weTsKKwkJCQltbGVuIC09IGNvcHk7CisJCQkJbm1idWYgKz0gY29weTsKKwkJCQlubWJ1Zl9i
eXRlcyArPSBjb3B5OworCisJCQkJaWYgKCFtbGVuKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwor
CQkJCXNsb3QtPmxlbiA9IG5tYnVmX2J5dGVzOworCQkJCXNsb3QtPmZsYWdzID0gTlNfTU9SRUZS
QUc7CisKKwkJCQloZWFkID0gbm1fbmV4dChoZWFkLCBsaW0pOworCQkJCUtBU1NFUlQoaGVhZCAh
PSByaW5nLT50YWlsLAorCQkJCQkoIlVuZXhwZWN0ZWRseSBydW4gb3V0IG9mIFRYIHNwYWNlIikp
OworCQkJCXNsb3QgPSByaW5nLT5zbG90ICsgaGVhZDsKKwkJCQlubWJ1ZiA9IE5NQihuYSwgc2xv
dCk7CisJCQkJbm1idWZfYnl0ZXMgPSAwOworCQkJfQorCQl9CisKKwkJLyogQ29tcGxldGUgbGFz
dCBzbG90IGFuZCB1cGRhdGUgaGVhZC4gKi8KKwkJc2xvdC0+bGVuID0gbm1idWZfYnl0ZXM7CisJ
CXNsb3QtPmZsYWdzID0gMDsKKwkJaGVhZCA9IG5tX25leHQoaGVhZCwgbGltKTsKKworCQkvKiBD
b25zdW1lIHRoZSBwYWNrZXQganVzdCBwcm9jZXNzZWQuICovCisJCWRyYnJfYWR2YW5jZShpZnAs
IHBxLT5idWZyaW5nKTsKKworCQkvKiBDb3B5IHRoZSBwYWNrZXQgdG8gbGlzdGVuZXJzLiAqLwor
CQlFVEhFUl9CUEZfTVRBUChpZnAsIG1oZWFkKTsKKworCQlwcS0+c3RhdHMucGFja2V0cyArKzsK
KwkJcHEtPnN0YXRzLmJ5dGVzICs9IG1oZWFkLT5tX3BrdGhkci5sZW47CisJCWlmIChtaGVhZC0+
bV9mbGFncyAmIE1fTUNBU1QpIHsKKwkJCXBxLT5zdGF0cy5tY2FzdHMgKys7CisJCX0KKworCQlt
X2ZyZWVtKG1oZWFkKTsKKworCQljb3VudCArKzsKKwkJaWYgKCsrYmF0Y2hfY291bnQgPT0gUFRO
RVRfVFhfQkFUQ0gpIHsKKwkJCXB0bmV0X3JpbmdfdXBkYXRlKHBxLCBrcmluZywgaGVhZCwgTkFG
X0ZPUkNFX1JFQ0xBSU0pOworCQkJYmF0Y2hfY291bnQgPSAwOworCQl9CisJfQorCisJaWYgKGJh
dGNoX2NvdW50KSB7CisJCXB0bmV0X3JpbmdfdXBkYXRlKHBxLCBrcmluZywgaGVhZCwgTkFGX0ZP
UkNFX1JFQ0xBSU0pOworCX0KKworCWlmIChjb3VudCA+PSBidWRnZXQgJiYgbWF5X3Jlc2NoZWQp
IHsKKwkJREJHKFJEKDEsICJvdXQgb2YgYnVkZ2V0OiByZXNjaGVkLCAlZCBtYnVmcyBwZW5kaW5n
XG4iLAorCQkJCQlkcmJyX2ludXNlKGlmcCwgcHEtPmJ1ZnJpbmcpKSk7CisJCXRhc2txdWV1ZV9l
bnF1ZXVlKHBxLT50YXNrcSwgJnBxLT50YXNrKTsKKwl9CisKKwlQVE5FVF9RX1VOTE9DSyhwcSk7
CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0X3RyYW5zbWl0KGlmX3Qg
aWZwLCBzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKwlzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjID0gaWZfZ2V0
c29mdGMoaWZwKTsKKwlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxOworCXVuc2lnbmVkIGludCBxdWV1
ZV9pZHg7CisJaW50IGVycjsKKworCURCRyhkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJ0cmFuc21p
dCAlcFxuIiwgbSkpOworCisJLyogSW5zZXJ0IDgwMi4xUSBoZWFkZXIgaWYgbmVlZGVkLiAqLwor
CWlmIChtLT5tX2ZsYWdzICYgTV9WTEFOVEFHKSB7CisJCW0gPSBldGhlcl92bGFuZW5jYXAobSwg
bS0+bV9wa3RoZHIuZXRoZXJfdnRhZyk7CisJCWlmIChtID09IE5VTEwpIHsKKwkJCXJldHVybiBF
Tk9CVUZTOworCQl9CisJCW0tPm1fZmxhZ3MgJj0gfk1fVkxBTlRBRzsKKwl9CisKKwkvKiBHZXQg
dGhlIGZsb3ctaWQgaWYgYXZhaWxhYmxlLiAqLworCXF1ZXVlX2lkeCA9IChNX0hBU0hUWVBFX0dF
VChtKSAhPSBNX0hBU0hUWVBFX05PTkUpID8KKwkJICAgIG0tPm1fcGt0aGRyLmZsb3dpZCA6IGN1
cmNwdTsKKworCWlmICh1bmxpa2VseShxdWV1ZV9pZHggPj0gc2MtPm51bV90eF9yaW5ncykpIHsK
KwkJcXVldWVfaWR4ICU9IHNjLT5udW1fdHhfcmluZ3M7CisJfQorCisJcHEgPSBzYy0+cXVldWVz
ICsgcXVldWVfaWR4OworCisJZXJyID0gZHJicl9lbnF1ZXVlKGlmcCwgcHEtPmJ1ZnJpbmcsIG0p
OworCWlmIChlcnIpIHsKKwkJLyogRU5PQlVGUyB3aGVuIHRoZSBidWZyaW5nIGlzIGZ1bGwgKi8K
KwkJUkQoMSwgIiVzOiBkcmJyX2VucXVldWUoKSBmYWlsZWQgJWRcbiIsCisJCQlfX2Z1bmNfXywg
ZXJyKTsKKwkJcHEtPnN0YXRzLmVycm9ycyArKzsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAo
aWZwLT5pZl9jYXBlbmFibGUgJiBJRkNBUF9QT0xMSU5HKSB7CisJCS8qIElmIHBvbGxpbmcgaXMg
b24sIHRoZSB0cmFuc21pdCBxdWV1ZXMgd2lsbCBiZQorCQkgKiBkcmFpbmVkIGJ5IHRoZSBwb2xs
ZXIuICovCisJCXJldHVybiAwOworCX0KKworCWVyciA9IHB0bmV0X2RyYWluX3RyYW5zbWl0X3F1
ZXVlKHBxLCBQVE5FVF9UWF9CVURHRVQsIHRydWUpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVy
ciA6IDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3B0bmV0X3J4X2Rpc2NhcmQoc3RydWN0
IG5ldG1hcF9rcmluZyAqa3JpbmcsIHVuc2lnbmVkIGludCBoZWFkKQoreworCXN0cnVjdCBuZXRt
YXBfcmluZyAqcmluZyA9IGtyaW5nLT5yaW5nOworCXN0cnVjdCBuZXRtYXBfc2xvdCAqc2xvdCA9
IHJpbmctPnNsb3QgKyBoZWFkOworCisJZm9yICg7OykgeworCQloZWFkID0gbm1fbmV4dChoZWFk
LCBrcmluZy0+bmtyX251bV9zbG90cyAtIDEpOworCQlpZiAoIShzbG90LT5mbGFncyAmIE5TX01P
UkVGUkFHKSB8fCBoZWFkID09IHJpbmctPnRhaWwpIHsKKwkJCWJyZWFrOworCQl9CisJCXNsb3Qg
PSByaW5nLT5zbG90ICsgaGVhZDsKKwl9CisKKwlyZXR1cm4gaGVhZDsKK30KKworc3RhdGljIGlu
bGluZSBzdHJ1Y3QgbWJ1ZiAqCitwdG5ldF9yeF9zbG90KHN0cnVjdCBtYnVmICptdGFpbCwgdWlu
dDhfdCAqbm1idWYsIHVuc2lnbmVkIGludCBubWJ1Zl9sZW4pCit7CisJdWludDhfdCAqbWRhdGEg
PSBtdG9kKG10YWlsLCB1aW50OF90ICopICsgbXRhaWwtPm1fbGVuOworCisJZG8geworCQl1bnNp
Z25lZCBpbnQgY29weTsKKworCQlpZiAobXRhaWwtPm1fbGVuID09IE1DTEJZVEVTKSB7CisJCQlz
dHJ1Y3QgbWJ1ZiAqbWY7CisKKwkJCW1mID0gbV9nZXRjbChNX05PV0FJVCwgTVRfREFUQSwgMCk7
CisJCQlpZiAodW5saWtlbHkoIW1mKSkgeworCQkJCXJldHVybiBOVUxMOworCQkJfQorCisJCQlt
dGFpbC0+bV9uZXh0ID0gbWY7CisJCQltdGFpbCA9IG1mOworCQkJbWRhdGEgPSBtdG9kKG10YWls
LCB1aW50OF90ICopOworCQkJbXRhaWwtPm1fbGVuID0gMDsKKwkJfQorCisJCWNvcHkgPSBNQ0xC
WVRFUyAtIG10YWlsLT5tX2xlbjsKKwkJaWYgKG5tYnVmX2xlbiA8IGNvcHkpIHsKKwkJCWNvcHkg
PSBubWJ1Zl9sZW47CisJCX0KKworCQltZW1jcHkobWRhdGEsIG5tYnVmLCBjb3B5KTsKKworCQlu
bWJ1ZiArPSBjb3B5OworCQlubWJ1Zl9sZW4gLT0gY29weTsKKwkJbWRhdGEgKz0gY29weTsKKwkJ
bXRhaWwtPm1fbGVuICs9IGNvcHk7CisJfSB3aGlsZSAobm1idWZfbGVuKTsKKworCXJldHVybiBt
dGFpbDsKK30KKworc3RhdGljIGludAorcHRuZXRfcnhfZW9mKHN0cnVjdCBwdG5ldF9xdWV1ZSAq
cHEsIHVuc2lnbmVkIGludCBidWRnZXQsIGJvb2wgbWF5X3Jlc2NoZWQpCit7CisJc3RydWN0IHB0
bmV0X3NvZnRjICpzYyA9IHBxLT5zYzsKKwlib29sIGhhdmVfdm5ldF9oZHIgPSBzYy0+dm5ldF9o
ZHJfbGVuOworCXN0cnVjdCBwdG5ldF9yaW5nICpwdHJpbmcgPSBwcS0+cHRyaW5nOworCXN0cnVj
dCBuZXRtYXBfYWRhcHRlciAqbmEgPSAmc2MtPnB0bmEtPmRyLnVwOworCXN0cnVjdCBuZXRtYXBf
a3JpbmcgKmtyaW5nID0gbmEtPnJ4X3JpbmdzICsgcHEtPmtyaW5nX2lkOworCXN0cnVjdCBuZXRt
YXBfcmluZyAqcmluZyA9IGtyaW5nLT5yaW5nOworCXVuc2lnbmVkIGludCBjb25zdCBsaW0gPSBr
cmluZy0+bmtyX251bV9zbG90cyAtIDE7CisJdW5zaWduZWQgaW50IGhlYWQgPSByaW5nLT5oZWFk
OworCXVuc2lnbmVkIGludCBiYXRjaF9jb3VudCA9IDA7CisJaWZfdCBpZnAgPSBzYy0+aWZwOwor
CXVuc2lnbmVkIGludCBjb3VudCA9IDA7CisKKwlQVE5FVF9RX0xPQ0socHEpOworCisJaWYgKHVu
bGlrZWx5KCEoaWZwLT5pZl9kcnZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcpKSkgeworCQlnb3Rv
IHVubG9jazsKKwl9CisKKwlrcmluZy0+bnJfa2ZsYWdzICY9IH5OS1JfUEVORElOVFI7CisKKwl3
aGlsZSAoY291bnQgPCBidWRnZXQpIHsKKwkJdW5zaWduZWQgaW50IHByZXZfaGVhZCA9IGhlYWQ7
CisJCXN0cnVjdCBtYnVmICptaGVhZCwgKm10YWlsOworCQlzdHJ1Y3QgdmlydGlvX25ldF9oZHIg
KnZoOworCQlzdHJ1Y3QgbmV0bWFwX3Nsb3QgKnNsb3Q7CisJCXVuc2lnbmVkIGludCBubWJ1Zl9s
ZW47CisJCXVpbnQ4X3QgKm5tYnVmOworaG9zdF9zeW5jOgorCQlpZiAoaGVhZCA9PSByaW5nLT50
YWlsKSB7CisJCQkvKiBXZSByYW4gb3V0IG9mIHNsb3QsIGxldCdzIHNlZSBpZiB0aGUgaG9zdCBo
YXMKKwkJCSAqIGFkZGVkIHNvbWUsIGJ5IHJlYWRpbmcgaHdjdXIgYW5kIGh3dGFpbCBmcm9tCisJ
CQkgKiB0aGUgQ1NCLiAqLworCQkJcHRuZXRfc3luY190YWlsKHB0cmluZywga3JpbmcpOworCisJ
CQlpZiAoaGVhZCA9PSByaW5nLT50YWlsKSB7CisJCQkJLyogU3RpbGwgbm8gc2xvdHMgYXZhaWxh
YmxlLiBSZWFjdGl2YXRlCisJCQkJICogaW50ZXJydXB0cyBhcyB0aGV5IHdlcmUgZGlzYWJsZWQg
YnkgdGhlCisJCQkJICogaG9zdCB0aHJlYWQgcmlnaHQgYmVmb3JlIGlzc3VpbmcgdGhlCisJCQkJ
ICogbGFzdCBpbnRlcnJ1cHQuICovCisJCQkJcHRyaW5nLT5ndWVzdF9uZWVkX2tpY2sgPSAxOwor
CisJCQkJLyogRG91YmxlLWNoZWNrLiAqLworCQkJCXB0bmV0X3N5bmNfdGFpbChwdHJpbmcsIGty
aW5nKTsKKwkJCQlpZiAobGlrZWx5KGhlYWQgPT0gcmluZy0+dGFpbCkpIHsKKwkJCQkJYnJlYWs7
CisJCQkJfQorCQkJCXB0cmluZy0+Z3Vlc3RfbmVlZF9raWNrID0gMDsKKwkJCX0KKwkJfQorCisJ
CS8qIEluaXRpYWxpemUgcmluZyBzdGF0ZSB2YXJpYWJsZXMsIHBvc3NpYmx5IGdyYWJiaW5nIHRo
ZQorCQkgKiB2aXJ0aW8tbmV0IGhlYWRlci4gKi8KKwkJc2xvdCA9IHJpbmctPnNsb3QgKyBoZWFk
OworCQlubWJ1ZiA9IE5NQihuYSwgc2xvdCk7CisJCW5tYnVmX2xlbiA9IHNsb3QtPmxlbjsKKwor
CQl2aCA9IChzdHJ1Y3QgdmlydGlvX25ldF9oZHIgKilubWJ1ZjsKKwkJaWYgKGhhdmVfdm5ldF9o
ZHIpIHsKKwkJCWlmICh1bmxpa2VseShubWJ1Zl9sZW4gPCBQVE5FVF9IRFJfU0laRSkpIHsKKwkJ
CQkvKiBUaGVyZSBpcyBubyBnb29kIHJlYXNvbiB3aHkgaG9zdCBzaG91bGQKKwkJCQkgKiBwdXQg
dGhlIGhlYWRlciBpbiBtdWx0aXBsZSBuZXRtYXAgc2xvdHMuCisJCQkJICogSWYgdGhpcyBpcyB0
aGUgY2FzZSwgZGlzY2FyZC4gKi8KKwkJCQlSRCgxLCAiRnJhZ21lbnRlZCB2bmV0LWhkcjogZHJv
cHBpbmciKTsKKwkJCQloZWFkID0gcHRuZXRfcnhfZGlzY2FyZChrcmluZywgaGVhZCk7CisJCQkJ
cHEtPnN0YXRzLmlxZHJvcHMgKys7CisJCQkJZ290byBza2lwOworCQkJfQorCQkJTkQoMSwgIiVz
OiB2bmV0IGhkcjogZmxhZ3MgJXggY3N1bV9zdGFydCAldSAiCisJCQkgICAgICAiY3N1bV9vZnMg
JXUgaGRyX2xlbiA9ICV1IGdzb19zaXplICV1ICIKKwkJCSAgICAgICJnc29fdHlwZSAleCIsIF9f
ZnVuY19fLCB2aC0+ZmxhZ3MsCisJCQkgICAgICB2aC0+Y3N1bV9zdGFydCwgdmgtPmNzdW1fb2Zm
c2V0LCB2aC0+aGRyX2xlbiwKKwkJCSAgICAgIHZoLT5nc29fc2l6ZSwgdmgtPmdzb190eXBlKTsK
KwkJCW5tYnVmICs9IFBUTkVUX0hEUl9TSVpFOworCQkJbm1idWZfbGVuIC09IFBUTkVUX0hEUl9T
SVpFOworCQl9CisKKwkJLyogQWxsb2NhdGUgdGhlIGhlYWQgb2YgYSBuZXcgbWJ1ZiBjaGFpbi4K
KwkJICogV2UgdXNlIG1fZ2V0Y2woKSB0byBhbGxvY2F0ZSBhbiBtYnVmIHdpdGggc3RhbmRhcmQg
Y2x1c3RlcgorCQkgKiBzaXplIChNQ0xCWVRFUykuIEluIHRoZSBmdXR1cmUgd2UgY291bGQgdXNl
IG1fZ2V0amNsKCkKKwkJICogdG8gY2hvb3NlIGRpZmZlcmVudCBzaXplcy4gKi8KKwkJbWhlYWQg
PSBtdGFpbCA9IG1fZ2V0Y2woTV9OT1dBSVQsIE1UX0RBVEEsIE1fUEtUSERSKTsKKwkJaWYgKHVu
bGlrZWx5KG1oZWFkID09IE5VTEwpKSB7CisJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICIlczog
ZmFpbGVkIHRvIGFsbG9jYXRlIG1idWYgIgorCQkJCSAgICAgICJoZWFkXG4iLCBfX2Z1bmNfXyk7
CisJCQlwcS0+c3RhdHMuZXJyb3JzICsrOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBJbml0aWFs
aXplIHRoZSBtYnVmIHN0YXRlIHZhcmlhYmxlcy4gKi8KKwkJbWhlYWQtPm1fcGt0aGRyLmxlbiA9
IG5tYnVmX2xlbjsKKwkJbXRhaWwtPm1fbGVuID0gMDsKKworCQkvKiBTY2FuIGFsbCB0aGUgbmV0
bWFwIHNsb3RzIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgcGFja2V0LiAqLworCQlmb3IgKDs7KSB7
CisJCQlEQkcoZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAiJXM6IGggJXUgdCAldSByY3YgZnJhZyAi
CisJCQkJCSAgImxlbiAldSwgZmxhZ3MgJXVcbiIsIF9fZnVuY19fLAorCQkJCQkgIGhlYWQsIHJp
bmctPnRhaWwsIHNsb3QtPmxlbiwKKwkJCQkJICBzbG90LT5mbGFncykpOworCisJCQltdGFpbCA9
IHB0bmV0X3J4X3Nsb3QobXRhaWwsIG5tYnVmLCBubWJ1Zl9sZW4pOworCQkJaWYgKHVubGlrZWx5
KCFtdGFpbCkpIHsKKwkJCQkvKiBPdWNoLiBXZSByYW4gb3V0IG9mIG1lbW9yeSB3aGlsZSBwcm9j
ZXNzaW5nCisJCQkJICogYSBwYWNrZXQuIFdlIGhhdmUgdG8gcmVzdG9yZSB0aGUgcHJldmlvdXMK
KwkJCQkgKiBoZWFkIHBvc2l0aW9uLCBmcmVlIHRoZSBtYnVmIGNoYWluLCBhbmQKKwkJCQkgKiBz
Y2hlZHVsZSB0aGUgdGFza3F1ZXVlIHRvIGdpdmUgdGhlIHBhY2tldAorCQkJCSAqIGFub3RoZXIg
Y2hhbmNlLiAqLworCQkJCWRldmljZV9wcmludGYoc2MtPmRldiwgIiVzOiBmYWlsZWQgdG8gYWxs
b2NhdGUiCisJCQkJCSIgbWJ1ZiBmcmFnLCByZXNldCBoZWFkICV1IC0tPiAldVxuIiwKKwkJCQkJ
X19mdW5jX18sIGhlYWQsIHByZXZfaGVhZCk7CisJCQkJaGVhZCA9IHByZXZfaGVhZDsKKwkJCQlt
X2ZyZWVtKG1oZWFkKTsKKwkJCQlwcS0+c3RhdHMuZXJyb3JzICsrOworCQkJCWlmIChtYXlfcmVz
Y2hlZCkgeworCQkJCQl0YXNrcXVldWVfZW5xdWV1ZShwcS0+dGFza3EsCisJCQkJCQkJICAmcHEt
PnRhc2spOworCQkJCX0KKwkJCQlnb3RvIGVzY2FwZTsKKwkJCX0KKworCQkJLyogV2UgaGF2ZSB0
byBpbmNyZW1lbnQgaGVhZCBpcnJlc3BlY3RpdmUgb2YgdGhlCisJCQkgKiBOU19NT1JFRlJBRyBi
ZWluZyBzZXQgb3Igbm90LiAqLworCQkJaGVhZCA9IG5tX25leHQoaGVhZCwgbGltKTsKKworCQkJ
aWYgKCEoc2xvdC0+ZmxhZ3MgJiBOU19NT1JFRlJBRykpIHsKKwkJCQlicmVhazsKKwkJCX0KKwor
CQkJaWYgKHVubGlrZWx5KGhlYWQgPT0gcmluZy0+dGFpbCkpIHsKKwkJCQkvKiBUaGUgdmVyeSBs
YXN0IHNsb3QgcHJlcGFyZWQgYnkgdGhlIGhvc3QgaGFzCisJCQkJICogdGhlIE5TX01PUkVGUkFH
IHNldC4gRHJvcCBpdCBhbmQgY29udGludWUKKwkJCQkgKiB0aGUgb3V0ZXIgY3ljbGUgKHRvIGRv
IHRoZSBkb3VibGUtY2hlY2spLiAqLworCQkJCVJEKDEsICJJbmNvbXBsZXRlIHBhY2tldDogZHJv
cHBpbmciKTsKKwkJCQltX2ZyZWVtKG1oZWFkKTsKKwkJCQlwcS0+c3RhdHMuaXFkcm9wcyArKzsK
KwkJCQlnb3RvIGhvc3Rfc3luYzsKKwkJCX0KKworCQkJc2xvdCA9IHJpbmctPnNsb3QgKyBoZWFk
OworCQkJbm1idWYgPSBOTUIobmEsIHNsb3QpOworCQkJbm1idWZfbGVuID0gc2xvdC0+bGVuOwor
CQkJbWhlYWQtPm1fcGt0aGRyLmxlbiArPSBubWJ1Zl9sZW47CisJCX0KKworCQltaGVhZC0+bV9w
a3RoZHIucmN2aWYgPSBpZnA7CisJCW1oZWFkLT5tX3BrdGhkci5jc3VtX2ZsYWdzID0gMDsKKwor
CQkvKiBTdG9yZSB0aGUgcXVldWUgaWR4IGluIHRoZSBwYWNrZXQgaGVhZGVyLiAqLworCQltaGVh
ZC0+bV9wa3RoZHIuZmxvd2lkID0gcHEtPmtyaW5nX2lkOworCQlNX0hBU0hUWVBFX1NFVChtaGVh
ZCwgTV9IQVNIVFlQRV9PUEFRVUUpOworCisJCWlmIChpZnAtPmlmX2NhcGVuYWJsZSAmIElGQ0FQ
X1ZMQU5fSFdUQUdHSU5HKSB7CisJCQlzdHJ1Y3QgZXRoZXJfaGVhZGVyICplaDsKKworCQkJZWgg
PSBtdG9kKG1oZWFkLCBzdHJ1Y3QgZXRoZXJfaGVhZGVyICopOworCQkJaWYgKGVoLT5ldGhlcl90
eXBlID09IGh0b25zKEVUSEVSVFlQRV9WTEFOKSkgeworCQkJCXB0bmV0X3ZsYW5fdGFnX3JlbW92
ZShtaGVhZCk7CisJCQkJLyoKKwkJCQkgKiBXaXRoIHRoZSA4MDIuMVEgaGVhZGVyIHJlbW92ZWQs
IHVwZGF0ZSB0aGUKKwkJCQkgKiBjaGVja3N1bSBzdGFydGluZyBsb2NhdGlvbiBhY2NvcmRpbmds
eS4KKwkJCQkgKi8KKwkJCQlpZiAodmgtPmZsYWdzICYgVklSVElPX05FVF9IRFJfRl9ORUVEU19D
U1VNKQorCQkJCQl2aC0+Y3N1bV9zdGFydCAtPSBFVEhFUl9WTEFOX0VOQ0FQX0xFTjsKKwkJCX0K
KwkJfQorCisJCWlmIChoYXZlX3ZuZXRfaGRyICYmICh2aC0+ZmxhZ3MgJiAoVklSVElPX05FVF9I
RFJfRl9ORUVEU19DU1VNCisJCQkJCXwgVklSVElPX05FVF9IRFJfRl9EQVRBX1ZBTElEKSkpIHsK
KwkJCWlmICh1bmxpa2VseShwdG5ldF9yeF9jc3VtKG1oZWFkLCB2aCkpKSB7CisJCQkJbV9mcmVl
bShtaGVhZCk7CisJCQkJUkQoMSwgIkNzdW0gb2ZmbG9hZCBlcnJvcjogZHJvcHBpbmciKTsKKwkJ
CQlwcS0+c3RhdHMuaXFkcm9wcyArKzsKKwkJCQlnb3RvIHNraXA7CisJCQl9CisJCX0KKworCQlw
cS0+c3RhdHMucGFja2V0cyArKzsKKwkJcHEtPnN0YXRzLmJ5dGVzICs9IG1oZWFkLT5tX3BrdGhk
ci5sZW47CisKKwkJUFRORVRfUV9VTkxPQ0socHEpOworCQkoKmlmcC0+aWZfaW5wdXQpKGlmcCwg
bWhlYWQpOworCQlQVE5FVF9RX0xPQ0socHEpOworCisJCWlmICh1bmxpa2VseSghKGlmcC0+aWZf
ZHJ2X2ZsYWdzICYgSUZGX0RSVl9SVU5OSU5HKSkpIHsKKwkJCS8qIFRoZSBpbnRlcmZhY2UgaGFz
IGdvbmUgZG93biB3aGlsZSB3ZSBkaWRuJ3QKKwkJCSAqIGhhdmUgdGhlIGxvY2suIFN0b3AgYW55
IHByb2Nlc3NpbmcgYW5kIGV4aXQuICovCisJCQlnb3RvIHVubG9jazsKKwkJfQorc2tpcDoKKwkJ
Y291bnQgKys7CisJCWlmICgrK2JhdGNoX2NvdW50ID09IFBUTkVUX1JYX0JBVENIKSB7CisJCQkv
KiBTb21lIHBhY2tldHMgaGF2ZSBiZWVuIHB1c2hlZCB0byB0aGUgbmV0d29yayBzdGFjay4KKwkJ
CSAqIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBDU0IgdG8gdGVsbCB0aGUgaG9zdCBhYm91dCB0aGUg
bmV3CisJCQkgKiByaW5nLT5jdXIgYW5kIHJpbmctPmhlYWQgKFJYIGJ1ZmZlciByZWZpbGwpLiAq
LworCQkJcHRuZXRfcmluZ191cGRhdGUocHEsIGtyaW5nLCBoZWFkLCBOQUZfRk9SQ0VfUkVBRCk7
CisJCQliYXRjaF9jb3VudCA9IDA7CisJCX0KKwl9Citlc2NhcGU6CisJaWYgKGJhdGNoX2NvdW50
KSB7CisJCXB0bmV0X3JpbmdfdXBkYXRlKHBxLCBrcmluZywgaGVhZCwgTkFGX0ZPUkNFX1JFQUQp
OworCisJfQorCisJaWYgKGNvdW50ID49IGJ1ZGdldCAmJiBtYXlfcmVzY2hlZCkgeworCQkvKiBJ
ZiB3ZSByYW4gb3V0IG9mIGJ1ZGdldCBvciB0aGUgZG91YmxlLWNoZWNrIGZvdW5kIG5ldworCQkg
KiBzbG90cyB0byBwcm9jZXNzLCBzY2hlZHVsZSB0aGUgdGFza3F1ZXVlLiAqLworCQlEQkcoUkQo
MSwgIm91dCBvZiBidWRnZXQ6IHJlc2NoZWQgaCAldSB0ICV1XG4iLAorCQkJCQloZWFkLCByaW5n
LT50YWlsKSk7CisJCXRhc2txdWV1ZV9lbnF1ZXVlKHBxLT50YXNrcSwgJnBxLT50YXNrKTsKKwl9
Cit1bmxvY2s6CisJUFRORVRfUV9VTkxPQ0socHEpOworCisJcmV0dXJuIGNvdW50OworfQorCitz
dGF0aWMgdm9pZAorcHRuZXRfcnhfdGFzayh2b2lkICpjb250ZXh0LCBpbnQgcGVuZGluZykKK3sK
KwlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0gY29udGV4dDsKKworCURCRyhSRCgxLCAiJXM6IHBx
ICMldVxuIiwgX19mdW5jX18sIHBxLT5rcmluZ19pZCkpOworCXB0bmV0X3J4X2VvZihwcSwgUFRO
RVRfUlhfQlVER0VULCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQKK3B0bmV0X3R4X3Rhc2sodm9p
ZCAqY29udGV4dCwgaW50IHBlbmRpbmcpCit7CisJc3RydWN0IHB0bmV0X3F1ZXVlICpwcSA9IGNv
bnRleHQ7CisKKwlEQkcoUkQoMSwgIiVzOiBwcSAjJXVcbiIsIF9fZnVuY19fLCBwcS0+a3Jpbmdf
aWQpKTsKKwlwdG5ldF9kcmFpbl90cmFuc21pdF9xdWV1ZShwcSwgUFRORVRfVFhfQlVER0VULCB0
cnVlKTsKK30KKworI2lmZGVmIERFVklDRV9QT0xMSU5HCisvKiBXZSBkb24ndCBuZWVkIHRvIGhh
bmRsZSBkaWZmZXJlbnRseSBQT0xMX0FORF9DSEVDS19TVEFUVVMgYW5kCisgKiBQT0xMX09OTFks
IHNpbmNlIHdlIGRvbid0IGhhdmUgYW4gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlci4gKi8KK3N0
YXRpYyBpbnQKK3B0bmV0X3BvbGwoaWZfdCBpZnAsIGVudW0gcG9sbF9jbWQgY21kLCBpbnQgYnVk
Z2V0KQoreworCXN0cnVjdCBwdG5ldF9zb2Z0YyAqc2MgPSBpZl9nZXRzb2Z0YyhpZnApOworCXVu
c2lnbmVkIGludCBxdWV1ZV9idWRnZXQ7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKwlib29s
IGJvcnJvdyA9IGZhbHNlOworCWludCBpOworCisJS0FTU0VSVChzYy0+bnVtX3JpbmdzID4gMCwg
KCJGb3VuZCBubyBxdWV1ZXMgaW4gd2hpbGUgcG9sbGluZyBwdG5ldCIpKTsKKwlxdWV1ZV9idWRn
ZXQgPSBNQVgoYnVkZ2V0IC8gc2MtPm51bV9yaW5ncywgMSk7CisJUkQoMSwgIlBlci1xdWV1ZSBi
dWRnZXQgaXMgJWQiLCBxdWV1ZV9idWRnZXQpOworCisJd2hpbGUgKGJ1ZGdldCkgeworCQl1bnNp
Z25lZCBpbnQgcmNudCA9IDA7CisKKwkJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fcmluZ3M7IGkr
KykgeworCQkJc3RydWN0IHB0bmV0X3F1ZXVlICpwcSA9IHNjLT5xdWV1ZXMgKyBpOworCisJCQlp
ZiAoYm9ycm93KSB7CisJCQkJcXVldWVfYnVkZ2V0ID0gTUlOKHF1ZXVlX2J1ZGdldCwgYnVkZ2V0
KTsKKwkJCQlpZiAocXVldWVfYnVkZ2V0ID09IDApIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJ
fQorCisJCQlpZiAoaSA8IHNjLT5udW1fdHhfcmluZ3MpIHsKKwkJCQlyY250ICs9IHB0bmV0X2Ry
YWluX3RyYW5zbWl0X3F1ZXVlKHBxLAorCQkJCQkJICAgcXVldWVfYnVkZ2V0LCBmYWxzZSk7CisJ
CQl9IGVsc2UgeworCQkJCXJjbnQgKz0gcHRuZXRfcnhfZW9mKHBxLCBxdWV1ZV9idWRnZXQsCisJ
CQkJCQkgICAgICBmYWxzZSk7CisJCQl9CisJCX0KKworCQlpZiAoIXJjbnQpIHsKKwkJCS8qIEEg
c2NhbiBvZiB0aGUgcXVldWVzIGdhdmUgbm8gcmVzdWx0LCB3ZSBjYW4KKwkJCSAqIHN0b3AgaGVy
ZS4gKi8KKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJjbnQgPiBidWRnZXQpIHsKKwkJCS8qIFRo
aXMgbWF5IGhhcHBlbiB3aGVuIGluaXRpYWwgYnVkZ2V0IDwgc2MtPm51bV9yaW5ncywKKwkJCSAq
IHNpbmNlIG9uZSBwYWNrZXQgYnVkZ2V0IGlzIGdpdmVuIHRvIGVhY2ggcXVldWUKKwkJCSAqIGFu
eXdheS4gSnVzdCBwcmV0ZW5kIHdlIGRpZG4ndCBlYXQgInNvIG11Y2giLiAqLworCQkJcmNudCA9
IGJ1ZGdldDsKKwkJfQorCQljb3VudCArPSByY250OworCQlidWRnZXQgLT0gcmNudDsKKwkJYm9y
cm93ID0gdHJ1ZTsKKwl9CisKKworCXJldHVybiBjb3VudDsKK30KKyNlbmRpZiAvKiBERVZJQ0Vf
UE9MTElORyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfcmVfbmV0
bWFwLmggL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfcmVfbmV0bWFwLmgKLS0tIHVzci9zcmMv
c3lzL2Rldi9uZXRtYXAvaWZfcmVfbmV0bWFwLmgJMjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAw
MDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2lmX3JlX25ldG1hcC5oCTIwMTYt
MTEtMjMgMTY6NTc6NTcuODQ1MTU2MDAwICswMDAwCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAog
LyoKLSAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9pZl9yZV9uZXRtYXAu
aCAyODUzNDkgMjAxNS0wNy0xMCAwNTo1MTozNlogbHVpZ2kgJAorICogJEZyZWVCU0Q6IGhlYWQv
c3lzL2Rldi9uZXRtYXAvaWZfcmVfbmV0bWFwLmggMjM0MjI1IDIwMTItMDQtMTMgMTU6MzM6MTJa
IGx1aWdpICQKICAqCiAgKiBuZXRtYXAgc3VwcG9ydCBmb3I6IHJlCiAgKgpkaWZmIC11IC1yIC1O
IHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfdnRuZXRfbmV0bWFwLmggL3Vzci9zcmMvc3lzL2Rl
di9uZXRtYXAvaWZfdnRuZXRfbmV0bWFwLmgKLS0tIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZf
dnRuZXRfbmV0bWFwLmgJMjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrIC91
c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2lmX3Z0bmV0X25ldG1hcC5oCTIwMTYtMTEtMjMgMTY6NTc6
NTcuODQ1NTQzMDAwICswMDAwCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogLyoKLSAqICRGcmVl
QlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9pZl92dG5ldF9uZXRtYXAuaCAyODUzNDkg
MjAxNS0wNy0xMCAwNTo1MTozNlogbHVpZ2kgJAorICogJEZyZWVCU0Q6IGhlYWQvc3lzL2Rldi9u
ZXRtYXAvaWZfdnRuZXRfbmV0bWFwLmggMjcwMDk3IDIwMTQtMDgtMTcgMTA6MjU6MjdaIGx1aWdp
ICQKICAqLwogCiAjaW5jbHVkZSA8bmV0L25ldG1hcC5oPgpAQCAtMTI3LDcgKzEyNyw3IEBACiAJ
ICogRmlyc3QgcGFydDogcHJvY2VzcyBuZXcgcGFja2V0cyB0byBzZW5kLgogCSAqLwogCXJtYigp
OwotCQorCiAJbm1faSA9IGtyaW5nLT5ucl9od2N1cjsKIAlpZiAobm1faSAhPSBoZWFkKSB7CS8q
IHdlIGhhdmUgbmV3IHBhY2tldHMgdG8gc2VuZCAqLwogCQlzdHJ1Y3Qgc2dsaXN0ICpzZyA9IHR4
cS0+dnRudHhfc2c7CkBAIC0xODIsNyArMTgyLDcgQEAKIAkJdmlydHF1ZXVlX2VuYWJsZV9pbnRy
KHZxKTsgLy8gbGlrZSBwb3N0cG9uZSB3aXRoIDAKIAl9CiAKLQkKKwogICAgICAgICAvKiBGcmVl
IHVzZWQgc2xvdHMuIFdlIG9ubHkgY29uc2lkZXIgb3VyIG93biB1c2VkIGJ1ZmZlcnMsIHJlY29n
bml6ZWQKIAkgKiBieSB0aGUgdG9rZW4gd2UgcGFzc2VkIHRvIHZpcnRxdWV1ZV9hZGRfb3V0YnVm
LgogCSAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaXhnYmVfbmV0bWFw
LmggL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvaXhnYmVfbmV0bWFwLmgKLS0tIHVzci9zcmMvc3lz
L2Rldi9uZXRtYXAvaXhnYmVfbmV0bWFwLmgJMjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAg
KzAxMDAKKysrIC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2l4Z2JlX25ldG1hcC5oCTIwMTYtMTEt
MjMgMTY6NTc6NTcuODQ2MDU3MDAwICswMDAwCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogLyoK
LSAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9peGdiZV9uZXRtYXAuaCAy
ODU1OTIgMjAxNS0wNy0xNSAwMTowMjowMVogcGtlbHNleSAkCisgKiAkRnJlZUJTRDogaGVhZC9z
eXMvZGV2L25ldG1hcC9peGdiZV9uZXRtYXAuaCAyNDQ1MTQgMjAxMi0xMi0yMCAyMjoyNjowM1og
bHVpZ2kgJAogICoKICAqIG5ldG1hcCBzdXBwb3J0IGZvcjogaXhnYmUgKGJvdGggaXggYW5kIGl4
dikKICAqCkBAIC01Myw3ICs1Myw3IEBACiAvKgogICogZGV2aWNlLXNwZWNpZmljIHN5c2N0bCB2
YXJpYWJsZXM6CiAgKgotICogaXhfY3Jjc3RyaXA6IDA6IGtlZXAgQ1JDIGluIHJ4IGZyYW1lcyAo
ZGVmYXVsdCksIDE6IHN0cmlwIGl0LgorICogaXhfY3Jjc3RyaXA6IDA6IE5JQyBrZWVwcyBDUkMg
aW4gcnggZnJhbWVzIChkZWZhdWx0KSwgMTogTklDIHN0cmlwcyBpdC4KICAqCUR1cmluZyByZWd1
bGFyIG9wZXJhdGlvbnMgdGhlIENSQyBpcyBzdHJpcHBlZCwgYnV0IG9uIHNvbWUKICAqCWhhcmR3
YXJlIHJlY2VwdGlvbiBvZiBmcmFtZXMgbm90IG11bHRpcGxlIG9mIDY0IGlzIHNsb3dlciwKICAq
CXNvIHVzaW5nIGNyY3N0cmlwPTAgaGVscHMgaW4gYmVuY2htYXJrcy4KQEAgLTY1LDcgKzY1LDcg
QEAKIHN0YXRpYyBpbnQgaXhfcnhfbWlzcywgaXhfcnhfbWlzc19idWZzOwogaW50IGl4X2NyY3N0
cmlwOwogU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIGl4X2NyY3N0cmlwLAotICAg
IENUTEZMQUdfUlcsICZpeF9jcmNzdHJpcCwgMCwgInN0cmlwIENSQyBvbiByeCBmcmFtZXMiKTsK
KyAgICBDVExGTEFHX1JXLCAmaXhfY3Jjc3RyaXAsIDAsICJOSUMgc3RyaXBzIENSQyBvbiByeCBm
cmFtZXMiKTsKIFNZU0NUTF9JTlQoX2Rldl9uZXRtYXAsIE9JRF9BVVRPLCBpeF9yeF9taXNzLAog
ICAgIENUTEZMQUdfUlcsICZpeF9yeF9taXNzLCAwLCAicG90ZW50aWFsbHkgbWlzc2VkIHJ4IGlu
dHIiKTsKIFNZU0NUTF9JTlQoX2Rldl9uZXRtYXAsIE9JRF9BVVRPLCBpeF9yeF9taXNzX2J1ZnMs
CkBAIC0xMDksNiArMTA5LDIwIEBACiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SRFJYQ1RM
LCByeGMpOwogfQogCitzdGF0aWMgdm9pZAoraXhnYmVfbmV0bWFwX2ludHIoc3RydWN0IG5ldG1h
cF9hZGFwdGVyICpuYSwgaW50IG9ub2ZmKQoreworCXN0cnVjdCBpZm5ldCAqaWZwID0gbmEtPmlm
cDsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGlmcC0+aWZfc29mdGM7CisKKwlJWEdCRV9D
T1JFX0xPQ0soYWRhcHRlcik7CisJaWYgKG9ub2ZmKSB7CisJCWl4Z2JlX2VuYWJsZV9pbnRyKGFk
YXB0ZXIpOyAvLyBYWFggbWF5YmUgaXhnYmVfc3RvcCA/CisJfSBlbHNlIHsKKwkJaXhnYmVfZGlz
YWJsZV9pbnRyKGFkYXB0ZXIpOyAvLyBYWFggbWF5YmUgaXhnYmVfc3RvcCA/CisJfQorCUlYR0JF
X0NPUkVfVU5MT0NLKGFkYXB0ZXIpOworfQogCiAvKgogICogUmVnaXN0ZXIvdW5yZWdpc3Rlci4g
V2UgYXJlIGFscmVhZHkgdW5kZXIgbmV0bWFwIGxvY2suCkBAIC0zMTEsNyArMzI1LDcgQEAKIAkJ
ICogZ29vZCB3YXkuCiAJCSAqLwogCQluaWNfaSA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5o
dywgSVhHQkVfSVNfVkYoYWRhcHRlcikgPwotCQkJCSAgICAgICBJWEdCRV9WRlRESChrcmluZy0+
cmluZ19pZCkgOiBJWEdCRV9UREgoa3JpbmctPnJpbmdfaWQpKTsKKwkJCQlJWEdCRV9WRlRESChr
cmluZy0+cmluZ19pZCkgOiBJWEdCRV9UREgoa3JpbmctPnJpbmdfaWQpKTsKIAkJaWYgKG5pY19p
ID49IGtyaW5nLT5ua3JfbnVtX3Nsb3RzKSB7IC8qIFhYWCBjYW4gaXQgaGFwcGVuID8gKi8KIAkJ
CUQoIlRESCB3cmFwICVkIiwgbmljX2kpOwogCQkJbmljX2kgLT0ga3JpbmctPm5rcl9udW1fc2xv
dHM7CkBAIC00ODYsNiArNTAwLDcgQEAKIAluYS5ubV9yeHN5bmMgPSBpeGdiZV9uZXRtYXBfcnhz
eW5jOwogCW5hLm5tX3JlZ2lzdGVyID0gaXhnYmVfbmV0bWFwX3JlZzsKIAluYS5udW1fdHhfcmlu
Z3MgPSBuYS5udW1fcnhfcmluZ3MgPSBhZGFwdGVyLT5udW1fcXVldWVzOworCW5hLm5tX2ludHIg
PSBpeGdiZV9uZXRtYXBfaW50cjsKIAluZXRtYXBfYXR0YWNoKCZuYSk7CiB9CiAKZGlmZiAtdSAt
ciAtTiB1c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcC5jIC91c3Ivc3JjL3N5cy9kZXYvbmV0
bWFwL25ldG1hcC5jCi0tLSB1c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcC5jCTIwMTYtMDkt
MjkgMDA6MjQ6NDcuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9u
ZXRtYXAuYwkyMDE2LTExLTIzIDE2OjU3OjU3Ljg0Nzk3NTAwMCArMDAwMApAQCAtMSw1ICsxLDkg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBNYXR0ZW8gTGFuZGksIEx1aWdpIFJp
enpvLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTQgTWF0
dGVvIExhbmRpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNiBMdWlnaSBSaXp6bworICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMTYgR2l1c2VwcGUgTGV0dGllcmkKKyAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDE2IFZpbmNlbnpvIE1hZmZpb25lCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw3ICsyOSw3IEBACiAKIAogLyoKLSAq
ICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9uZXRtYXAuYyAzMDAwNTAgMjAx
Ni0wNS0xNyAxMjo1MjozMVogZWFkbGVyICQKKyAqICRGcmVlQlNEJAogICoKICAqIFRoaXMgbW9k
dWxlIHN1cHBvcnRzIG1lbW9yeSBtYXBwZWQgYWNjZXNzIHRvIG5ldHdvcmsgZGV2aWNlcywKICAq
IHNlZSBuZXRtYXAoNCkuCkBAIC0xMzMsMTMgKzEzNywxMiBAQAogICogPiAgICBzZWxlY3QoKWFi
bGUgZmlsZSBkZXNjcmlwdG9yIG9uIHdoaWNoIGV2ZW50cyBhcmUgcmVwb3J0ZWQuCiAgKgogICog
IAlJbnRlcm5hbGx5LCB3ZSBhbGxvY2F0ZSBhIG5ldG1hcF9wcml2X2Qgc3RydWN0dXJlLCB0aGF0
IHdpbGwgYmUKLSAqICAJaW5pdGlhbGl6ZWQgb24gaW9jdGwoTklPQ1JFR0lGKS4KKyAqICAJaW5p
dGlhbGl6ZWQgb24gaW9jdGwoTklPQ1JFR0lGKS4gVGhlcmUgaXMgb25lIG5ldG1hcF9wcml2X2QK
KyAqICAJc3RydWN0dXJlIGZvciBlYWNoIG9wZW4oKS4KICAqCiAgKiAgICAgIG9zLXNwZWNpZmlj
OgotICogIAkgICAgRnJlZUJTRDogbmV0bWFwX29wZW4gKG5ldG1hcF9mcmVlYnNkLmMpLiBUaGUg
cHJpdiBpcwotICogIAkJICAgICBwZXItdGhyZWFkLgotICogIAkgICAgbGludXg6ICAgbGludXhf
bmV0bWFwX29wZW4gKG5ldG1hcF9saW51eC5jKS4gVGhlIHByaXYgaXMKLSAqICAJCSAgICAgcGVy
LW9wZW4uCisgKiAgCSAgICBGcmVlQlNEOiBzZWUgbmV0bWFwX29wZW4oKSAobmV0bWFwX2ZyZWVi
c2QuYykKKyAqICAJICAgIGxpbnV4OiAgIHNlZSBsaW51eF9uZXRtYXBfb3BlbigpIChuZXRtYXBf
bGludXguYykKICAqCiAgKiA+IDIuIG9uIGVhY2ggZGVzY3JpcHRvciwgdGhlIHByb2Nlc3MgaXNz
dWVzIGFuIGlvY3RsKCkgdG8gaWRlbnRpZnkKICAqID4gICAgdGhlIGludGVyZmFjZSB0aGF0IHNo
b3VsZCByZXBvcnQgZXZlbnRzIHRvIHRoZSBmaWxlIGRlc2NyaXB0b3IuCkBAIC0yOTksMTggKzMw
MiwxNyBAQAogICogICAgICAgICAgICAgICAgbmV0bWFwX3RyYW5zbWl0KCkKICAqICAgICAgICAg
ICAgICAgICAgbmEtPm5tX25vdGlmeSAgPT0gbmV0bWFwX25vdGlmeSgpCiAgKiAgICAgICAgICAg
MikgaW9jdGwoTklPQ1JYU1lOQykvbmV0bWFwX3BvbGwoKSBpbiBwcm9jZXNzIGNvbnRleHQKLSAq
ICAgICAgICAgICAgICAgIGtyaW5nLT5ubV9zeW5jKCkgPT0gbmV0bWFwX3J4c3luY19mcm9tX2hv
c3RfY29tcGF0CisgKiAgICAgICAgICAgICAgICBrcmluZy0+bm1fc3luYygpID09IG5ldG1hcF9y
eHN5bmNfZnJvbV9ob3N0CiAgKiAgICAgICAgICAgICAgICAgIG5ldG1hcF9yeHN5bmNfZnJvbV9o
b3N0KG5hLCBOVUxMLCBOVUxMKQogICogICAgLSB0eCB0byBob3N0IHN0YWNrCiAgKiAgICAgICAg
ICAgaW9jdGwoTklPQ1RYU1lOQykvbmV0bWFwX3BvbGwoKSBpbiBwcm9jZXNzIGNvbnRleHQKLSAq
ICAgICAgICAgICAgIGtyaW5nLT5ubV9zeW5jKCkgPT0gbmV0bWFwX3R4c3luY190b19ob3N0X2Nv
bXBhdAorICogICAgICAgICAgICAga3JpbmctPm5tX3N5bmMoKSA9PSBuZXRtYXBfdHhzeW5jX3Rv
X2hvc3QKICAqICAgICAgICAgICAgICAgbmV0bWFwX3R4c3luY190b19ob3N0KG5hKQotICogICAg
ICAgICAgICAgICAgIE5NX1NFTkRfVVAoKQotICogICAgICAgICAgICAgICAgICAgRnJlZUJTRDog
bmEtPmlmX2lucHV0KCkgPT0gPz8gWFhYCisgKiAgICAgICAgICAgICAgICAgbm1fb3Nfc2VuZF91
cCgpCisgKiAgICAgICAgICAgICAgICAgICBGcmVlQlNEOiBuYS0+aWZfaW5wdXQoKSA9PSBldGhl
cl9pbnB1dCgpCiAgKiAgICAgICAgICAgICAgICAgICBsaW51eDogbmV0aWZfcngoKSB3aXRoIE5N
X01BR0lDX1BSSU9SSVRZX1JYCiAgKgogICoKLSAqCiAgKiAgICAgICAgICAgICAgIC09IFNZU1RF
TSBERVZJQ0UgV0lUSCBHRU5FUklDIFNVUFBPUlQgPS0KICAqCiAgKiAgICBuYSA9PSBOQShpZnAp
ID09IGdlbmVyaWNfbmV0bWFwX2FkYXB0ZXIgY3JlYXRlZCBpbiBnZW5lcmljX25ldG1hcF9hdHRh
Y2goKQpAQCAtMzE5LDEwICszMjEsMTEgQEAKICAqICAgICAgIGNvbmN1cnJlbnRseToKICAqICAg
ICAgICAgICAxKSBpb2N0bChOSU9DVFhTWU5DKS9uZXRtYXBfcG9sbCgpIGluIHByb2Nlc3MgY29u
dGV4dAogICogICAgICAgICAgICAgICBrcmluZy0+bm1fc3luYygpID09IGdlbmVyaWNfbmV0bWFw
X3R4c3luYygpCi0gKiAgICAgICAgICAgICAgICAgICBsaW51eDogICBkZXZfcXVldWVfeG1pdCgp
IHdpdGggTk1fTUFHSUNfUFJJT1JJVFlfVFgKLSAqICAgICAgICAgICAgICAgICAgICAgICBnZW5l
cmljX25kb19zdGFydF94bWl0KCkKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZy4g
ZGV2LiBzdGFydF94bWl0Ci0gKiAgICAgICAgICAgICAgICAgICBGcmVlQlNEOiBuYS0+aWZfdHJh
bnNtaXQoKSA9PSBvcmlnLiBkZXYgaWZfdHJhbnNtaXQKKyAqICAgICAgICAgICAgICAgICAgIG5t
X29zX2dlbmVyaWNfeG1pdF9mcmFtZSgpCisgKiAgICAgICAgICAgICAgICAgICAgICAgbGludXg6
ICAgZGV2X3F1ZXVlX3htaXQoKSB3aXRoIE5NX01BR0lDX1BSSU9SSVRZX1RYCisgKiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmcC0+bmRvX3N0YXJ0X3htaXQgPT0gZ2VuZXJpY19uZG9fc3Rh
cnRfeG1pdCgpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbmEtPnNhdmVfc3Rh
cnRfeG1pdCA9PSBvcmlnLiBkZXYuIHN0YXJ0X3htaXQKKyAqICAgICAgICAgICAgICAgICAgICAg
ICBGcmVlQlNEOiBuYS0+aWZfdHJhbnNtaXQoKSA9PSBvcmlnLiBkZXYgaWZfdHJhbnNtaXQKICAq
ICAgICAgICAgICAyKSBnZW5lcmljX21idWZfZGVzdHJ1Y3RvcigpCiAgKiAgICAgICAgICAgICAg
ICAgICBuYS0+bm1fbm90aWZ5KCkgPT0gbmV0bWFwX25vdGlmeSgpCiAgKiAgICAtIHJ4IGZyb20g
bmV0bWFwIHVzZXJzcGFjZToKQEAgLTMzMywyNCArMzM2LDE1IEBACiAgKiAgICAgICAgICAgICAg
IGdlbmVyaWNfcnhfaGFuZGxlcigpCiAgKiAgICAgICAgICAgICAgICAgICBtYnFfc2FmZV9lbnF1
ZXVlKCkKICAqICAgICAgICAgICAgICAgICAgIG5hLT5ubV9ub3RpZnkoKSA9PSBuZXRtYXBfbm90
aWZ5KCkKLSAqICAgIC0gcnggZnJvbSBob3N0IHN0YWNrOgotICogICAgICAgIGNvbmN1cnJlbnRs
eToKKyAqICAgIC0gcnggZnJvbSBob3N0IHN0YWNrCisgKiAgICAgICAgRnJlZUJTRDogc2FtZSBh
cyBuYXRpdmUKKyAqICAgICAgICBMaW51eDogc2FtZSBhcyBuYXRpdmUgZXhjZXB0OgogICogICAg
ICAgICAgIDEpIGhvc3Qgc3RhY2sKLSAqICAgICAgICAgICAgICAgbGludXg6IGdlbmVyaWNfbmRv
X3N0YXJ0X3htaXQoKQotICogICAgICAgICAgICAgICAgICAgbmV0bWFwX3RyYW5zbWl0KCkKLSAq
ICAgICAgICAgICAgICAgRnJlZUJTRDogaWZwLT5pZl9pbnB1dCgpID09IG5ldG1hcF90cmFuc21p
dAotICogICAgICAgICAgICAgICBib3RoOgotICogICAgICAgICAgICAgICAgICAgICAgIG5hLT5u
bV9ub3RpZnkoKSA9PSBuZXRtYXBfbm90aWZ5KCkKLSAqICAgICAgICAgICAyKSBpb2N0bChOSU9D
UlhTWU5DKS9uZXRtYXBfcG9sbCgpIGluIHByb2Nlc3MgY29udGV4dAotICogICAgICAgICAgICAg
ICAga3JpbmctPm5tX3N5bmMoKSA9PSBuZXRtYXBfcnhzeW5jX2Zyb21faG9zdF9jb21wYXQKLSAq
ICAgICAgICAgICAgICAgICAgbmV0bWFwX3J4c3luY19mcm9tX2hvc3QobmEsIE5VTEwsIE5VTEwp
Ci0gKiAgICAtIHR4IHRvIGhvc3Qgc3RhY2s6Ci0gKiAgICAgICAgICAgaW9jdGwoTklPQ1RYU1lO
QykvbmV0bWFwX3BvbGwoKSBpbiBwcm9jZXNzIGNvbnRleHQKLSAqICAgICAgICAgICAgIGtyaW5n
LT5ubV9zeW5jKCkgPT0gbmV0bWFwX3R4c3luY190b19ob3N0X2NvbXBhdAotICogICAgICAgICAg
ICAgICBuZXRtYXBfdHhzeW5jX3RvX2hvc3QobmEpCi0gKiAgICAgICAgICAgICAgICAgTk1fU0VO
RF9VUCgpCi0gKiAgICAgICAgICAgICAgICAgICBGcmVlQlNEOiBuYS0+aWZfaW5wdXQoKSA9PSA/
Pz8gWFhYCi0gKiAgICAgICAgICAgICAgICAgICBsaW51eDogbmV0aWZfcngoKSB3aXRoIE5NX01B
R0lDX1BSSU9SSVRZX1JYCisgKiAgICAgICAgICAgICAgIGRldl9xdWV1ZV94bWl0KCkgd2l0aG91
dCBOTV9NQUdJQ19QUklPUklUWV9UWAorICogICAgICAgICAgICAgICAgICAgaWZwLT5uZG9fc3Rh
cnRfeG1pdCA9PSBnZW5lcmljX25kb19zdGFydF94bWl0KCkKKyAqICAgICAgICAgICAgICAgICAg
ICAgICBuZXRtYXBfdHJhbnNtaXQoKQorICogICAgICAgICAgICAgICAgICAgICAgICAgICBuYS0+
bm1fbm90aWZ5KCkgPT0gbmV0bWFwX25vdGlmeSgpCisgKiAgICAtIHR4IHRvIGhvc3Qgc3RhY2sg
KHNhbWUgYXMgbmF0aXZlKToKICAqCiAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAt
PSBWQUxFID0tCkBAIC0zNzEsNyArMzY1LDcgQEAKICAqICAgICAgICAgZnJvbSBob3N0IHN0YWNr
OgogICogICAgICAgICAgICAgbmV0bWFwX3RyYW5zbWl0KCkKICAqICAgICAgICAgICAgICAgIG5h
LT5ubV9ub3RpZnkoKSA9PSBuZXRtYXBfYndyYXBfaW50cl9ub3RpZnkocmluZ19uciA9PSBob3N0
IHJpbmcpCi0gKiAgICAgICAgICAgICAgICAgICAgIGtyaW5nLT5ubV9zeW5jKCkgPT0gbmV0bWFw
X3J4c3luY19mcm9tX2hvc3RfY29tcGF0KCkKKyAqICAgICAgICAgICAgICAgICAgICAga3Jpbmct
Pm5tX3N5bmMoKSA9PSBuZXRtYXBfcnhzeW5jX2Zyb21faG9zdCgpCiAgKiAgICAgICAgICAgICAg
ICAgICAgIG5ldG1hcF92cF90eHN5bmMoKQogICoKICAqICAgICAgLSBzeXN0ZW0gZGV2aWNlIHdp
dGggZ2VuZXJpYyBzdXBwb3J0OgpAQCAtMzg0LDcgKzM3OCw3IEBACiAgKiAgICAgICAgIGZyb20g
aG9zdCBzdGFjazoKICAqICAgICAgICAgICAgbmV0bWFwX3RyYW5zbWl0KCkKICAqICAgICAgICAg
ICAgICAgIG5hLT5ubV9ub3RpZnkoKSA9PSBuZXRtYXBfYndyYXBfaW50cl9ub3RpZnkocmluZ19u
ciA9PSBob3N0IHJpbmcpCi0gKiAgICAgICAgICAgICAgICAgICAgIGtyaW5nLT5ubV9zeW5jKCkg
PT0gbmV0bWFwX3J4c3luY19mcm9tX2hvc3RfY29tcGF0KCkKKyAqICAgICAgICAgICAgICAgICAg
ICAga3JpbmctPm5tX3N5bmMoKSA9PSBuZXRtYXBfcnhzeW5jX2Zyb21faG9zdCgpCiAgKiAgICAg
ICAgICAgICAgICAgICAgIG5ldG1hcF92cF90eHN5bmMoKQogICoKICAqICAgKGFsbCBjYXNlcykg
LS0+IG5tX2JkZ19mbHVzaCgpCkBAIC00MDcsNyArNDAxLDcgQEAKICAqICAgICAgICAgICAgICAg
ICBuZXRtYXBfdnBfcnhzeW5jKCkKICAqICAgICAgICAgIHRvIGhvc3Qgc3RhY2s6CiAgKiAgICAg
ICAgICAgICAgICAgbmV0bWFwX3ZwX3J4c3luYygpCi0gKiAgICAgICAgICAgICAgICAga3Jpbmct
Pm5tX3N5bmMoKSA9PSBuZXRtYXBfdHhzeW5jX3RvX2hvc3RfY29tcGF0CisgKiAgICAgICAgICAg
ICAgICAga3JpbmctPm5tX3N5bmMoKSA9PSBuZXRtYXBfdHhzeW5jX3RvX2hvc3QKICAqICAgICAg
ICAgICAgICAgICBuZXRtYXBfdnBfcnhzeW5jX2xvY2tlZCgpCiAgKgogICogICAgICAtIHN5c3Rl
bSBkZXZpY2Ugd2l0aCBnZW5lcmljIGFkYXB0ZXI6CkBAIC00MTgsNyArNDEyLDcgQEAKICAqICAg
ICAgICAgICAgICAgICBuZXRtYXBfdnBfcnhzeW5jKCkKICAqICAgICAgICAgIHRvIGhvc3Qgc3Rh
Y2s6CiAgKiAgICAgICAgICAgICAgICAgbmV0bWFwX3ZwX3J4c3luYygpCi0gKiAgICAgICAgICAg
ICAgICAga3JpbmctPm5tX3N5bmMoKSA9PSBuZXRtYXBfdHhzeW5jX3RvX2hvc3RfY29tcGF0Cisg
KiAgICAgICAgICAgICAgICAga3JpbmctPm5tX3N5bmMoKSA9PSBuZXRtYXBfdHhzeW5jX3RvX2hv
c3QKICAqICAgICAgICAgICAgICAgICBuZXRtYXBfdnBfcnhzeW5jKCkKICAqCiAgKi8KQEAgLTQ1
NSwyOSArNDQ5LDE5IEBACiAjaW5jbHVkZSA8c3lzL3JlZmNvdW50Lmg+CiAKIAotLyogcmVkdWNl
IGNvbmRpdGlvbmFsIGNvZGUgKi8KLS8vIGxpbnV4IEFQSSwgdXNlIGZvciB0aGUga25saXN0IGlu
IEZyZWVCU0QKLS8qIHVzZSBhIHByaXZhdGUgbXV0ZXggZm9yIHRoZSBrbmxpc3QgKi8KLSNkZWZp
bmUgaW5pdF93YWl0cXVldWVfaGVhZCh4KSBkbyB7CQkJXAotCXN0cnVjdCBtdHggKm0gPSAmKHgp
LT5tOwkJCVwKLQltdHhfaW5pdChtLCAibm1fa25fbG9jayIsIE5VTEwsIE1UWF9ERUYpOwlcCi0J
a25saXN0X2luaXRfbXR4KCYoeCktPnNpLnNpX25vdGUsIG0pOwkJXAotICAgIH0gd2hpbGUgKDAp
Ci0KLSNkZWZpbmUgT1Nfc2VscmVjb3JkKGEsIGIpCXNlbHJlY29yZChhLCAmKChiKS0+c2kpKQot
I2RlZmluZSBPU19zZWx3YWtldXAoYSwgYikJZnJlZWJzZF9zZWx3YWtldXAoYSwgYikKLQogI2Vs
aWYgZGVmaW5lZChsaW51eCkKIAogI2luY2x1ZGUgImJzZF9nbHVlLmgiCiAKLQotCiAjZWxpZiBk
ZWZpbmVkKF9fQVBQTEVfXykKIAogI3dhcm5pbmcgT1NYIHN1cHBvcnQgaXMgb25seSBwYXJ0aWFs
CiAjaW5jbHVkZSAib3N4X2dsdWUuaCIKIAorI2VsaWYgZGVmaW5lZCAoX1dJTjMyKQorCisjaW5j
bHVkZSAid2luX2dsdWUuaCIKKwogI2Vsc2UKIAogI2Vycm9yCVVuc3VwcG9ydGVkIHBsYXRmb3Jt
CkBAIC00OTIsNDcgKzQ3Niw2OSBAQAogI2luY2x1ZGUgPGRldi9uZXRtYXAvbmV0bWFwX21lbTIu
aD4KIAogCi1NQUxMT0NfREVGSU5FKE1fTkVUTUFQLCAibmV0bWFwIiwgIk5ldHdvcmsgbWVtb3J5
IG1hcCIpOwotCiAvKiB1c2VyLWNvbnRyb2xsZWQgdmFyaWFibGVzICovCiBpbnQgbmV0bWFwX3Zl
cmJvc2U7CiAKIHN0YXRpYyBpbnQgbmV0bWFwX25vX3RpbWVzdGFtcDsgLyogZG9uJ3QgdGltZXN0
YW1wIG9uIHJ4c3luYyAqLwotCi1TWVNDVExfTk9ERShfZGV2LCBPSURfQVVUTywgbmV0bWFwLCBD
VExGTEFHX1JXLCAwLCAiTmV0bWFwIGFyZ3MiKTsKLVNZU0NUTF9JTlQoX2Rldl9uZXRtYXAsIE9J
RF9BVVRPLCB2ZXJib3NlLAotICAgIENUTEZMQUdfUlcsICZuZXRtYXBfdmVyYm9zZSwgMCwgIlZl
cmJvc2UgbW9kZSIpOwotU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIG5vX3RpbWVz
dGFtcCwKLSAgICBDVExGTEFHX1JXLCAmbmV0bWFwX25vX3RpbWVzdGFtcCwgMCwgIm5vX3RpbWVz
dGFtcCIpOwogaW50IG5ldG1hcF9taXRpZ2F0ZSA9IDE7Ci1TWVNDVExfSU5UKF9kZXZfbmV0bWFw
LCBPSURfQVVUTywgbWl0aWdhdGUsIENUTEZMQUdfUlcsICZuZXRtYXBfbWl0aWdhdGUsIDAsICIi
KTsKIGludCBuZXRtYXBfbm9fcGVuZGludHIgPSAxOwotU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwg
T0lEX0FVVE8sIG5vX3BlbmRpbnRyLAotICAgIENUTEZMQUdfUlcsICZuZXRtYXBfbm9fcGVuZGlu
dHIsIDAsICJBbHdheXMgbG9vayBmb3IgbmV3IHJlY2VpdmVkIHBhY2tldHMuIik7CiBpbnQgbmV0
bWFwX3R4c3luY19yZXRyeSA9IDI7Ci1TWVNDVExfSU5UKF9kZXZfbmV0bWFwLCBPSURfQVVUTywg
dHhzeW5jX3JldHJ5LCBDVExGTEFHX1JXLAotICAgICZuZXRtYXBfdHhzeW5jX3JldHJ5LCAwICwg
Ik51bWJlciBvZiB0eHN5bmMgbG9vcHMgaW4gYnJpZGdlJ3MgZmx1c2guIik7Ci0KLWludCBuZXRt
YXBfYWRhcHRpdmVfaW8gPSAwOwotU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIGFk
YXB0aXZlX2lvLCBDVExGTEFHX1JXLAotICAgICZuZXRtYXBfYWRhcHRpdmVfaW8sIDAgLCAiQWRh
cHRpdmUgSS9PIG9uIHBhcmF2aXJ0Iik7Ci0KIGludCBuZXRtYXBfZmxhZ3MgPSAwOwkvKiBkZWJ1
ZyBmbGFncyAqLwotaW50IG5ldG1hcF9md2QgPSAwOwkvKiBmb3JjZSB0cmFuc3BhcmVudCBtb2Rl
ICovCitzdGF0aWMgaW50IG5ldG1hcF9md2QgPSAwOwkvKiBmb3JjZSB0cmFuc3BhcmVudCBtb2Rl
ICovCiAKIC8qCiAgKiBuZXRtYXBfYWRtb2RlIHNlbGVjdHMgdGhlIG5ldG1hcCBtb2RlIHRvIHVz
ZS4KICAqIEludmFsaWQgdmFsdWVzIGFyZSByZXNldCB0byBORVRNQVBfQURNT0RFX0JFU1QKICAq
LwotZW51bSB7IE5FVE1BUF9BRE1PREVfQkVTVCA9IDAsCS8qIHVzZSBuYXRpdmUsIGZhbGxiYWNr
IHRvIGdlbmVyaWMgKi8KK2VudW0gewlORVRNQVBfQURNT0RFX0JFU1QgPSAwLAkvKiB1c2UgbmF0
aXZlLCBmYWxsYmFjayB0byBnZW5lcmljICovCiAJTkVUTUFQX0FETU9ERV9OQVRJVkUsCS8qIGVp
dGhlciBuYXRpdmUgb3Igbm9uZSAqLwogCU5FVE1BUF9BRE1PREVfR0VORVJJQywJLyogZm9yY2Ug
Z2VuZXJpYyAqLwogCU5FVE1BUF9BRE1PREVfTEFTVCB9Owogc3RhdGljIGludCBuZXRtYXBfYWRt
b2RlID0gTkVUTUFQX0FETU9ERV9CRVNUOwogCi1pbnQgbmV0bWFwX2dlbmVyaWNfbWl0ID0gMTAw
KjEwMDA7ICAgLyogR2VuZXJpYyBtaXRpZ2F0aW9uIGludGVydmFsIGluIG5hbm9zZWNvbmRzLiAq
LwotaW50IG5ldG1hcF9nZW5lcmljX3JpbmdzaXplID0gMTAyNDsgICAvKiBHZW5lcmljIHJpbmdz
aXplLiAqLwotaW50IG5ldG1hcF9nZW5lcmljX3JpbmdzID0gMTsgICAvKiBudW1iZXIgb2YgcXVl
dWVzIGluIGdlbmVyaWMuICovCisvKiBuZXRtYXBfZ2VuZXJpY19taXQgY29udHJvbHMgbWl0aWdh
dGlvbiBvZiBSWCBub3RpZmljYXRpb25zIGZvcgorICogdGhlIGdlbmVyaWMgbmV0bWFwIGFkYXB0
ZXIuIFRoZSB2YWx1ZSBpcyBhIHRpbWUgaW50ZXJ2YWwgaW4KKyAqIG5hbm9zZWNvbmRzLiAqLwor
aW50IG5ldG1hcF9nZW5lcmljX21pdCA9IDEwMCoxMDAwOworCisvKiBXZSB1c2UgYnkgZGVmYXVs
dCBuZXRtYXAtYXdhcmUgcWRpc2NzIHdpdGggZ2VuZXJpYyBuZXRtYXAgYWRhcHRlcnMsCisgKiBl
dmVuIGlmIHRoZXJlIGNhbiBiZSBhIGxpdHRsZSBwZXJmb3JtYW5jZSBoaXQgd2l0aCBoYXJkd2Fy
ZSBOSUNzLgorICogSG93ZXZlciwgdXNpbmcgdGhlIHFkaXNjIGlzIHRoZSBzYWZlciBhcHByb2Fj
aCwgZm9yIHR3byByZWFzb25zOgorICogMSkgaXQgcHJldmVudHMgbm9uLWZpZm8gcWRpc2NzIHRv
IGJyZWFrIHRoZSBUWCBub3RpZmljYXRpb24KKyAqICAgIHNjaGVtZSwgd2hpY2ggaXMgYmFzZWQg
b24gbWJ1ZiBkZXN0cnVjdG9ycyB3aGVuIHR4cWRpc2MgaXMKKyAqICAgIG5vdCB1c2VkLgorICog
MikgaXQgbWFrZXMgaXQgcG9zc2libGUgdG8gdHJhbnNtaXQgb3ZlciBzb2Z0d2FyZSBkZXZpY2Vz
IHRoYXQKKyAqICAgIGNoYW5nZSBza2ItPmRldiwgbGlrZSBicmlkZ2UsIHZldGgsIC4uLgorICoK
KyAqIEFueXdheSB1c2VycyBsb29raW5nIGZvciB0aGUgYmVzdCBwZXJmb3JtYW5jZSBzaG91bGQK
KyAqIHVzZSBuYXRpdmUgYWRhcHRlcnMuCisgKi8KK2ludCBuZXRtYXBfZ2VuZXJpY190eHFkaXNj
ID0gMTsKKworLyogRGVmYXVsdCBudW1iZXIgb2Ygc2xvdHMgYW5kIHF1ZXVlcyBmb3IgZ2VuZXJp
YyBhZGFwdGVycy4gKi8KK2ludCBuZXRtYXBfZ2VuZXJpY19yaW5nc2l6ZSA9IDEwMjQ7CitpbnQg
bmV0bWFwX2dlbmVyaWNfcmluZ3MgPSAxOworCisvKiBOb24temVybyBpZiBwdG5ldCBkZXZpY2Vz
IGFyZSBhbGxvd2VkIHRvIHVzZSB2aXJ0aW8tbmV0IGhlYWRlcnMuICovCitpbnQgcHRuZXRfdm5l
dF9oZHIgPSAxOworCisvKgorICogU1lTQ1RMIGNhbGxzIGFyZSBncm91cGVkIGJldHdlZW4gU1lT
QkVHSU4gYW5kIFNZU0VORCB0byBiZSBlbXVsYXRlZAorICogaW4gc29tZSBvdGhlciBvcGVyYXRp
bmcgc3lzdGVtcworICovCitTWVNCRUdJTihtYWluX2luaXQpOworCitTWVNDVExfREVDTChfZGV2
X25ldG1hcCk7CitTWVNDVExfTk9ERShfZGV2LCBPSURfQVVUTywgbmV0bWFwLCBDVExGTEFHX1JX
LCAwLCAiTmV0bWFwIGFyZ3MiKTsKK1NZU0NUTF9JTlQoX2Rldl9uZXRtYXAsIE9JRF9BVVRPLCB2
ZXJib3NlLAorICAgIENUTEZMQUdfUlcsICZuZXRtYXBfdmVyYm9zZSwgMCwgIlZlcmJvc2UgbW9k
ZSIpOworU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIG5vX3RpbWVzdGFtcCwKKyAg
ICBDVExGTEFHX1JXLCAmbmV0bWFwX25vX3RpbWVzdGFtcCwgMCwgIm5vX3RpbWVzdGFtcCIpOwor
U1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIG1pdGlnYXRlLCBDVExGTEFHX1JXLCAm
bmV0bWFwX21pdGlnYXRlLCAwLCAiIik7CitTWVNDVExfSU5UKF9kZXZfbmV0bWFwLCBPSURfQVVU
Tywgbm9fcGVuZGludHIsCisgICAgQ1RMRkxBR19SVywgJm5ldG1hcF9ub19wZW5kaW50ciwgMCwg
IkFsd2F5cyBsb29rIGZvciBuZXcgcmVjZWl2ZWQgcGFja2V0cy4iKTsKK1NZU0NUTF9JTlQoX2Rl
dl9uZXRtYXAsIE9JRF9BVVRPLCB0eHN5bmNfcmV0cnksIENUTEZMQUdfUlcsCisgICAgJm5ldG1h
cF90eHN5bmNfcmV0cnksIDAgLCAiTnVtYmVyIG9mIHR4c3luYyBsb29wcyBpbiBicmlkZ2UncyBm
bHVzaC4iKTsKIAogU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIGZsYWdzLCBDVExG
TEFHX1JXLCAmbmV0bWFwX2ZsYWdzLCAwICwgIiIpOwogU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwg
T0lEX0FVVE8sIGZ3ZCwgQ1RMRkxBR19SVywgJm5ldG1hcF9md2QsIDAgLCAiIik7CkBAIC01NDAs
MTkgKzU0NiwyNCBAQAogU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIGdlbmVyaWNf
bWl0LCBDVExGTEFHX1JXLCAmbmV0bWFwX2dlbmVyaWNfbWl0LCAwICwgIiIpOwogU1lTQ1RMX0lO
VChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIGdlbmVyaWNfcmluZ3NpemUsIENUTEZMQUdfUlcsICZu
ZXRtYXBfZ2VuZXJpY19yaW5nc2l6ZSwgMCAsICIiKTsKIFNZU0NUTF9JTlQoX2Rldl9uZXRtYXAs
IE9JRF9BVVRPLCBnZW5lcmljX3JpbmdzLCBDVExGTEFHX1JXLCAmbmV0bWFwX2dlbmVyaWNfcmlu
Z3MsIDAgLCAiIik7CitTWVNDVExfSU5UKF9kZXZfbmV0bWFwLCBPSURfQVVUTywgZ2VuZXJpY190
eHFkaXNjLCBDVExGTEFHX1JXLCAmbmV0bWFwX2dlbmVyaWNfdHhxZGlzYywgMCAsICIiKTsKK1NZ
U0NUTF9JTlQoX2Rldl9uZXRtYXAsIE9JRF9BVVRPLCBwdG5ldF92bmV0X2hkciwgQ1RMRkxBR19S
VywgJnB0bmV0X3ZuZXRfaGRyLCAwICwgIiIpOworCitTWVNFTkQ7CiAKIE5NR19MT0NLX1QJbmV0
bWFwX2dsb2JhbF9sb2NrOwotaW50IG5ldG1hcF91c2VfY291bnQgPSAwOyAvKiBudW1iZXIgb2Yg
YWN0aXZlIG5ldG1hcCBpbnN0YW5jZXMgKi8KIAogLyoKICAqIG1hcmsgdGhlIHJpbmcgYXMgc3Rv
cHBlZCwgYW5kIHJ1biB0aHJvdWdoIHRoZSBsb2NrcwogICogdG8gbWFrZSBzdXJlIG90aGVyIHVz
ZXJzIGdldCB0byBzZWUgaXQuCisgKiBzdG9wcGVkIG11c3QgYmUgZWl0aGVyIE5SX0tSX1NUT1BQ
RUQgKGZvciB1bmJvdW5kZWQgc3RvcCkKKyAqIG9mIE5SX0tSX0xPQ0tFRCAoYnJpZWYgc3RvcCBm
b3IgbXV0dWFsIGV4Y2x1c2lvbiBwdXJwb3NlcykKICAqLwogc3RhdGljIHZvaWQKLW5ldG1hcF9k
aXNhYmxlX3Jpbmcoc3RydWN0IG5ldG1hcF9rcmluZyAqa3IpCituZXRtYXBfZGlzYWJsZV9yaW5n
KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyLCBpbnQgc3RvcHBlZCkKIHsKLQlrci0+bmtyX3N0b3Bw
ZWQgPSAxOwotCW5tX2tyX2dldChrcik7CisJbm1fa3Jfc3RvcChrciwgc3RvcHBlZCk7CisJLy8g
WFhYIGNoZWNrIGlmIG5tX2tyX3N0b3AgaXMgc3VmZmljaWVudAogCW10eF9sb2NrKCZrci0+cV9s
b2NrKTsKIAltdHhfdW5sb2NrKCZrci0+cV9sb2NrKTsKIAlubV9rcl9wdXQoa3IpOwpAQCAtNTYz
LDcgKzU3NCw3IEBACiBuZXRtYXBfc2V0X3Jpbmcoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSwg
dV9pbnQgcmluZ19pZCwgZW51bSB0eHJ4IHQsIGludCBzdG9wcGVkKQogewogCWlmIChzdG9wcGVk
KQotCQluZXRtYXBfZGlzYWJsZV9yaW5nKE5NUihuYSwgdCkgKyByaW5nX2lkKTsKKwkJbmV0bWFw
X2Rpc2FibGVfcmluZyhOTVIobmEsIHQpICsgcmluZ19pZCwgc3RvcHBlZCk7CiAJZWxzZQogCQlO
TVIobmEsIHQpW3JpbmdfaWRdLm5rcl9zdG9wcGVkID0gMDsKIH0KQEAgLTU5MCwxMyArNjAxLDE0
IEBACiAgKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB1c2VkIGluIGRyaXZlcnMuICBXYWl0cyBmb3Ig
Y3VycmVudCB0eHN5bmMoKXMvcnhzeW5jKClzCiAgKiB0byBmaW5pc2ggYW5kIHByZXZlbnRzIGFu
eSBuZXcgb25lIGZyb20gc3RhcnRpbmcuICBDYWxsIHRoaXMgYmVmb3JlIHR1cm5pbmcKICAqIG5l
dG1hcCBtb2RlIG9mZiwgb3IgYmVmb3JlIHJlbW92aW5nIHRoZSBoYXJkd2FyZSByaW5ncyAoZS5n
Liwgb24gbW9kdWxlCi0gKiBvbmxvYWQpLiAgQXMgYSBydWxlIG9mIHRodW1iIGZvciBsaW51eCBk
cml2ZXJzLCB0aGlzIHNob3VsZCBiZSBwbGFjZWQgbmVhcgotICogZWFjaCBuYXBpX2Rpc2FibGUo
KS4KKyAqIG9ubG9hZCkuCiAgKi8KIHZvaWQKIG5ldG1hcF9kaXNhYmxlX2FsbF9yaW5ncyhzdHJ1
Y3QgaWZuZXQgKmlmcCkKIHsKLQluZXRtYXBfc2V0X2FsbF9yaW5ncyhOQShpZnApLCAxIC8qIHN0
b3BwZWQgKi8pOworCWlmIChOTV9OQV9WQUxJRChpZnApKSB7CisJCW5ldG1hcF9zZXRfYWxsX3Jp
bmdzKE5BKGlmcCksIE5NX0tSX1NUT1BQRUQpOworCX0KIH0KIAogLyoKQEAgLTYwNyw5ICs2MTks
MzQgQEAKIHZvaWQKIG5ldG1hcF9lbmFibGVfYWxsX3JpbmdzKHN0cnVjdCBpZm5ldCAqaWZwKQog
ewotCW5ldG1hcF9zZXRfYWxsX3JpbmdzKE5BKGlmcCksIDAgLyogZW5hYmxlZCAqLyk7CisJaWYg
KE5NX05BX1ZBTElEKGlmcCkpIHsKKwkJbmV0bWFwX3NldF9hbGxfcmluZ3MoTkEoaWZwKSwgMCAv
KiBlbmFibGVkICovKTsKKwl9Cit9CisKK3ZvaWQKK25ldG1hcF9tYWtlX3pvbWJpZShzdHJ1Y3Qg
aWZuZXQgKmlmcCkKK3sKKwlpZiAoTk1fTkFfVkFMSUQoaWZwKSkgeworCQlzdHJ1Y3QgbmV0bWFw
X2FkYXB0ZXIgKm5hID0gTkEoaWZwKTsKKwkJbmV0bWFwX3NldF9hbGxfcmluZ3MobmEsIE5NX0tS
X0xPQ0tFRCk7CisJCW5hLT5uYV9mbGFncyB8PSBOQUZfWk9NQklFOworCQluZXRtYXBfc2V0X2Fs
bF9yaW5ncyhuYSwgMCk7CisJfQogfQogCit2b2lkCituZXRtYXBfdW5kb196b21iaWUoc3RydWN0
IGlmbmV0ICppZnApCit7CisJaWYgKE5NX05BX1ZBTElEKGlmcCkpIHsKKwkJc3RydWN0IG5ldG1h
cF9hZGFwdGVyICpuYSA9IE5BKGlmcCk7CisJCWlmIChuYS0+bmFfZmxhZ3MgJiBOQUZfWk9NQklF
KSB7CisJCQluZXRtYXBfc2V0X2FsbF9yaW5ncyhuYSwgTk1fS1JfTE9DS0VEKTsKKwkJCW5hLT5u
YV9mbGFncyAmPSB+TkFGX1pPTUJJRTsKKwkJCW5ldG1hcF9zZXRfYWxsX3JpbmdzKG5hLCAwKTsK
KwkJfQorCX0KK30KIAogLyoKICAqIGdlbmVyaWMgYm91bmRfY2hlY2tpbmcgZnVuY3Rpb24KQEAg
LTcyNywyOCArNzY0LDkgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgbmV0bWFwX3R4
c3luY190b19ob3N0KHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEpOwotc3RhdGljIGludCBuZXRt
YXBfcnhzeW5jX2Zyb21faG9zdChzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCBzdHJ1Y3QgdGhy
ZWFkICp0ZCwgdm9pZCAqcHdhaXQpOwotCi0vKiBrcmluZy0+bm1fc3luYyBjYWxsYmFjayBmb3Ig
dGhlIGhvc3QgdHggcmluZyAqLwotc3RhdGljIGludAotbmV0bWFwX3R4c3luY190b19ob3N0X2Nv
bXBhdChzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywgaW50IGZsYWdzKQotewotCSh2b2lkKWZs
YWdzOyAvKiB1bnVzZWQgKi8KLQluZXRtYXBfdHhzeW5jX3RvX2hvc3Qoa3JpbmctPm5hKTsKLQly
ZXR1cm4gMDsKLX0KLQotLyoga3JpbmctPm5tX3N5bmMgY2FsbGJhY2sgZm9yIHRoZSBob3N0IHJ4
IHJpbmcgKi8KLXN0YXRpYyBpbnQKLW5ldG1hcF9yeHN5bmNfZnJvbV9ob3N0X2NvbXBhdChzdHJ1
Y3QgbmV0bWFwX2tyaW5nICprcmluZywgaW50IGZsYWdzKQotewotCSh2b2lkKWZsYWdzOyAvKiB1
bnVzZWQgKi8KLQluZXRtYXBfcnhzeW5jX2Zyb21faG9zdChrcmluZy0+bmEsIE5VTEwsIE5VTEwp
OwotCXJldHVybiAwOwotfQotCi0KKy8qIG5tX3N5bmMgY2FsbGJhY2tzIGZvciB0aGUgaG9zdCBy
aW5ncyAqLworc3RhdGljIGludCBuZXRtYXBfdHhzeW5jX3RvX2hvc3Qoc3RydWN0IG5ldG1hcF9r
cmluZyAqa3JpbmcsIGludCBmbGFncyk7CitzdGF0aWMgaW50IG5ldG1hcF9yeHN5bmNfZnJvbV9o
b3N0KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCBpbnQgZmxhZ3MpOwogCiAvKiBjcmVhdGUg
dGhlIGtyaW5ncyBhcnJheSBhbmQgaW5pdGlhbGl6ZSB0aGUgZmllbGRzIGNvbW1vbiB0byBhbGwg
YWRhcHRlcnMuCiAgKiBUaGUgYXJyYXkgbGF5b3V0IGlzIHRoaXM6CkBAIC03ODksNyArODA3LDcg
QEAKIAogCWxlbiA9IChuW05SX1RYXSArIG5bTlJfUlhdKSAqIHNpemVvZihzdHJ1Y3QgbmV0bWFw
X2tyaW5nKSArIHRhaWxyb29tOwogCi0JbmEtPnR4X3JpbmdzID0gbWFsbG9jKChzaXplX3QpbGVu
LCBNX0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8pOworCW5hLT50eF9yaW5ncyA9IG5tX29zX21h
bGxvYygoc2l6ZV90KWxlbik7CiAJaWYgKG5hLT50eF9yaW5ncyA9PSBOVUxMKSB7CiAJCUQoIkNh
bm5vdCBhbGxvY2F0ZSBrcmluZ3MiKTsKIAkJcmV0dXJuIEVOT01FTTsKQEAgLTgwOSwxMiArODI3
LDE0IEBACiAJCQlrcmluZy0+cmluZ19pZCA9IGk7CiAJCQlrcmluZy0+dHggPSB0OwogCQkJa3Jp
bmctPm5rcl9udW1fc2xvdHMgPSBuZGVzYzsKKwkJCWtyaW5nLT5ucl9tb2RlID0gTktSX05FVE1B
UF9PRkY7CisJCQlrcmluZy0+bnJfcGVuZGluZ19tb2RlID0gTktSX05FVE1BUF9PRkY7CiAJCQlp
ZiAoaSA8IG5tYV9nZXRfbnJpbmdzKG5hLCB0KSkgewogCQkJCWtyaW5nLT5ubV9zeW5jID0gKHQg
PT0gTlJfVFggPyBuYS0+bm1fdHhzeW5jIDogbmEtPm5tX3J4c3luYyk7Ci0JCQl9IGVsc2UgaWYg
KGkgPT0gbmEtPm51bV90eF9yaW5ncykgeworCQkJfSBlbHNlIHsKIAkJCQlrcmluZy0+bm1fc3lu
YyA9ICh0ID09IE5SX1RYID8KLQkJCQkJCW5ldG1hcF90eHN5bmNfdG9faG9zdF9jb21wYXQgOgot
CQkJCQkJbmV0bWFwX3J4c3luY19mcm9tX2hvc3RfY29tcGF0KTsKKwkJCQkJCW5ldG1hcF90eHN5
bmNfdG9faG9zdDoKKwkJCQkJCW5ldG1hcF9yeHN5bmNfZnJvbV9ob3N0KTsKIAkJCX0KIAkJCWty
aW5nLT5ubV9ub3RpZnkgPSBuYS0+bm1fbm90aWZ5OwogCQkJa3JpbmctPnJoZWFkID0ga3Jpbmct
PnJjdXIgPSBrcmluZy0+bnJfaHdjdXIgPSAwOwpAQCAtODIyLDE0ICs4NDIsMTQgQEAKIAkJCSAq
IElNUE9SVEFOVDogQWx3YXlzIGtlZXAgb25lIHNsb3QgZW1wdHkuCiAJCQkgKi8KIAkJCWtyaW5n
LT5ydGFpbCA9IGtyaW5nLT5ucl9od3RhaWwgPSAodCA9PSBOUl9UWCA/IG5kZXNjIC0gMSA6IDAp
OwotCQkJc25wcmludGYoa3JpbmctPm5hbWUsIHNpemVvZihrcmluZy0+bmFtZSkgLSAxLCAiJXMg
JXMlZCIsIG5hLT5uYW1lLCAKKwkJCXNucHJpbnRmKGtyaW5nLT5uYW1lLCBzaXplb2Yoa3Jpbmct
Pm5hbWUpIC0gMSwgIiVzICVzJWQiLCBuYS0+bmFtZSwKIAkJCQkJbm1fdHhyeDJzdHIodCksIGkp
OwogCQkJTkQoImt0eCAlcyBoICVkIGMgJWQgdCAlZCIsCiAJCQkJa3JpbmctPm5hbWUsIGtyaW5n
LT5yaGVhZCwga3JpbmctPnJjdXIsIGtyaW5nLT5ydGFpbCk7CiAJCQltdHhfaW5pdCgma3Jpbmct
PnFfbG9jaywgKHQgPT0gTlJfVFggPyAibm1fdHhxX2xvY2siIDogIm5tX3J4cV9sb2NrIiksIE5V
TEwsIE1UWF9ERUYpOwotCQkJaW5pdF93YWl0cXVldWVfaGVhZCgma3JpbmctPnNpKTsKKwkJCW5t
X29zX3NlbGluZm9faW5pdCgma3JpbmctPnNpKTsKIAkJfQotCQlpbml0X3dhaXRxdWV1ZV9oZWFk
KCZuYS0+c2lbdF0pOworCQlubV9vc19zZWxpbmZvX2luaXQoJm5hLT5zaVt0XSk7CiAJfQogCiAJ
bmEtPnRhaWxyb29tID0gbmEtPnJ4X3JpbmdzICsgbltOUl9SWF07CkBAIC04MzgsMTkgKzg1OCw2
IEBACiB9CiAKIAotI2lmZGVmIF9fRnJlZUJTRF9fCi1zdGF0aWMgdm9pZAotbmV0bWFwX2tubGlz
dF9kZXN0cm95KE5NX1NFTElORk9fVCAqc2kpCi17Ci0JLyogWFhYIGtxdWV1ZSg5KSBuZWVkZWQ7
IHRoZXNlIHdpbGwgbWlycm9yIGtubGlzdF9pbml0LiAqLwotCWtubGlzdF9kZWxldGUoJnNpLT5z
aS5zaV9ub3RlLCBjdXJ0aHJlYWQsIDAgLyogbm90IGxvY2tlZCAqLyApOwotCWtubGlzdF9kZXN0
cm95KCZzaS0+c2kuc2lfbm90ZSk7Ci0JLyogbm93IHdlIGRvbid0IG5lZWQgdGhlIG11dGV4IGFu
eW1vcmUgKi8KLQltdHhfZGVzdHJveSgmc2ktPm0pOwotfQotI2VuZGlmIC8qIF9fRnJlZUJTRF9f
ICovCi0KLQogLyogdW5kbyB0aGUgYWN0aW9ucyBwZXJmb3JtZWQgYnkgbmV0bWFwX2tyaW5nc19j
cmVhdGUgKi8KIC8qIGNhbGwgd2l0aCBOTUdfTE9DSyBoZWxkICovCiB2b2lkCkBAIC04NjAsMTQg
Kzg2NywxNCBAQAogCWVudW0gdHhyeCB0OwogCiAJZm9yX3J4X3R4KHQpCi0JCW5ldG1hcF9rbmxp
c3RfZGVzdHJveSgmbmEtPnNpW3RdKTsKKwkJbm1fb3Nfc2VsaW5mb191bmluaXQoJm5hLT5zaVt0
XSk7CiAKIAkvKiB3ZSByZWx5IG9uIHRoZSBrcmluZ3MgbGF5b3V0IGRlc2NyaWJlZCBhYm92ZSAq
LwogCWZvciAoIDsga3JpbmcgIT0gbmEtPnRhaWxyb29tOyBrcmluZysrKSB7CiAJCW10eF9kZXN0
cm95KCZrcmluZy0+cV9sb2NrKTsKLQkJbmV0bWFwX2tubGlzdF9kZXN0cm95KCZrcmluZy0+c2kp
OworCQlubV9vc19zZWxpbmZvX3VuaW5pdCgma3JpbmctPnNpKTsKIAl9Ci0JZnJlZShuYS0+dHhf
cmluZ3MsIE1fREVWQlVGKTsKKwlubV9vc19mcmVlKG5hLT50eF9yaW5ncyk7CiAJbmEtPnR4X3Jp
bmdzID0gbmEtPnJ4X3JpbmdzID0gbmEtPnRhaWxyb29tID0gTlVMTDsKIH0KIApAQCAtODc4LDE0
ICs4ODUsMTQgQEAKICAqIHRoZW0gZmlyc3QuCiAgKi8KIC8qIGNhbGwgd2l0aCBOTUdfTE9DSyBo
ZWxkICovCi1zdGF0aWMgdm9pZAordm9pZAogbmV0bWFwX2h3X2tyaW5nc19kZWxldGUoc3RydWN0
IG5ldG1hcF9hZGFwdGVyICpuYSkKIHsKIAlzdHJ1Y3QgbWJxICpxID0gJm5hLT5yeF9yaW5nc1tu
YS0+bnVtX3J4X3JpbmdzXS5yeF9xdWV1ZTsKIAogCU5EKCJkZXN0cm95IHN3IG1icSB3aXRoIGxl
biAlZCIsIG1icV9sZW4ocSkpOwogCW1icV9wdXJnZShxKTsKLQltYnFfc2FmZV9kZXN0cm95KHEp
OworCW1icV9zYWZlX2ZpbmkocSk7CiAJbmV0bWFwX2tyaW5nc19kZWxldGUobmEpOwogfQogCkBA
IC04OTgsMjkgKzkwNSwzOCBAQAogICovCiAvKiBjYWxsIHdpdGggTk1HX0xPQ0sgaGVsZCAqLwog
c3RhdGljIHZvaWQgbmV0bWFwX3Vuc2V0X3JpbmdpZChzdHJ1Y3QgbmV0bWFwX3ByaXZfZCAqKTsK
LXN0YXRpYyB2b2lkIG5ldG1hcF9yZWxfZXhjbHVzaXZlKHN0cnVjdCBuZXRtYXBfcHJpdl9kICop
Owotc3RhdGljIHZvaWQKK3N0YXRpYyB2b2lkIG5ldG1hcF9rcmluZ3NfcHV0KHN0cnVjdCBuZXRt
YXBfcHJpdl9kICopOwordm9pZAogbmV0bWFwX2RvX3VucmVnaWYoc3RydWN0IG5ldG1hcF9wcml2
X2QgKnByaXYpCiB7CiAJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSA9IHByaXYtPm5wX25hOwog
CiAJTk1HX0xPQ0tfQVNTRVJUKCk7CiAJbmEtPmFjdGl2ZV9mZHMtLTsKLQkvKiByZWxlYXNlIGV4
Y2x1c2l2ZSB1c2UgaWYgaXQgd2FzIHJlcXVlc3RlZCBvbiByZWdpZiAqLwotCW5ldG1hcF9yZWxf
ZXhjbHVzaXZlKHByaXYpOwotCWlmIChuYS0+YWN0aXZlX2ZkcyA8PSAwKSB7CS8qIGxhc3QgaW5z
dGFuY2UgKi8KLQotCQlpZiAobmV0bWFwX3ZlcmJvc2UpCi0JCQlEKCJkZWxldGluZyBsYXN0IGlu
c3RhbmNlIGZvciAlcyIsIG5hLT5uYW1lKTsKKwkvKiB1bnNldCBucl9wZW5kaW5nX21vZGUgYW5k
IHBvc3NpYmx5IHJlbGVhc2UgZXhjbHVzaXZlIG1vZGUgKi8KKwluZXRtYXBfa3JpbmdzX3B1dChw
cml2KTsKIAogI2lmZGVmCVdJVEhfTU9OSVRPUgorCS8qIFhYWCBjaGVjayB3aGV0aGVyIHdlIGhh
dmUgdG8gZG8gc29tZXRoaW5nIHdpdGggbW9uaXRvcgorCSAqIHdoZW4gcmluZ3MgY2hhbmdlIG5y
X21vZGUuICovCisJaWYgKG5hLT5hY3RpdmVfZmRzIDw9IDApIHsKIAkJLyogd2FsayB0aHJvdWdo
IGFsbCB0aGUgcmluZ3MgYW5kIHRlbGwgYW55IG1vbml0b3IKIAkJICogdGhhdCB0aGUgcG9ydCBp
cyBnb2luZyB0byBleGl0IG5ldG1hcCBtb2RlCiAJCSAqLwogCQluZXRtYXBfbW9uaXRvcl9zdG9w
KG5hKTsKKwl9CiAjZW5kaWYKKworCWlmIChuYS0+YWN0aXZlX2ZkcyA8PSAwIHx8IG5tX2tyaW5n
X3BlbmRpbmcocHJpdikpIHsKKwkJbmEtPm5tX3JlZ2lzdGVyKG5hLCAwKTsKKwl9CisKKwkvKiBk
ZWxldGUgcmluZ3MgYW5kIGJ1ZmZlcnMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZCAqLworCW5l
dG1hcF9tZW1fcmluZ3NfZGVsZXRlKG5hKTsKKworCWlmIChuYS0+YWN0aXZlX2ZkcyA8PSAwKSB7
CS8qIGxhc3QgaW5zdGFuY2UgKi8KIAkJLyoKLQkJICogKFRPIENIRUNLKSBUaGlzIGZ1bmN0aW9u
IGlzIG9ubHkgY2FsbGVkCisJCSAqIChUTyBDSEVDSykgV2UgZW50ZXIgaGVyZQogCQkgKiB3aGVu
IHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIGZpbGUgZGVzY3JpcHRvciBnb2VzCiAJCSAqIGF3
YXkuIFRoaXMgbWVhbnMgd2UgY2Fubm90IGhhdmUgYW55IHBlbmRpbmcgcG9sbCgpCiAJCSAqIG9y
IGludGVycnVwdCByb3V0aW5lIG9wZXJhdGluZyBvbiB0aGUgc3RydWN0dXJlLgpAQCAtOTMzLDE2
ICs5NDksMTYgQEAKIAkJICogaGFwcGVucyBpZiB0aGUgY2xvc2UoKSBvY2N1cnMgd2hpbGUgYSBj
b25jdXJyZW50CiAJCSAqIHN5c2NhbGwgaXMgcnVubmluZy4KIAkJICovCi0JCW5hLT5ubV9yZWdp
c3RlcihuYSwgMCk7IC8qIG9mZiwgY2xlYXIgZmxhZ3MgKi8KLQkJLyogV2FrZSB1cCBhbnkgc2xl
ZXBpbmcgdGhyZWFkcy4gbmV0bWFwX3BvbGwgd2lsbAotCQkgKiB0aGVuIHJldHVybiBQT0xMRVJS
Ci0JCSAqIFhYWCBUaGUgd2FrZSB1cCBub3cgbXVzdCBoYXBwZW4gZHVyaW5nICpfZG93bigpLCB3
aGVuCi0JCSAqIHdlIG9yZGVyIGFsbCBhY3Rpdml0aWVzIHRvIHN0b3AuIC1nbAotCQkgKi8KLQkJ
LyogZGVsZXRlIHJpbmdzIGFuZCBidWZmZXJzICovCi0JCW5ldG1hcF9tZW1fcmluZ3NfZGVsZXRl
KG5hKTsKKwkJaWYgKG5ldG1hcF92ZXJib3NlKQorCQkJRCgiZGVsZXRpbmcgbGFzdCBpbnN0YW5j
ZSBmb3IgJXMiLCBuYS0+bmFtZSk7CisKKyAgICAgICAgICAgICAgICBpZiAobm1fbmV0bWFwX29u
KG5hKSkgeworICAgICAgICAgICAgICAgICAgICBEKCJCVUc6IG5ldG1hcCBvbiB3aGlsZSBnb2lu
ZyB0byBkZWxldGUgdGhlIGtyaW5ncyIpOworICAgICAgICAgICAgICAgIH0KKwogCQluYS0+bm1f
a3JpbmdzX2RlbGV0ZShuYSk7CiAJfQorCiAJLyogcG9zc2liaWx5IGRlY3JlbWVudCBjb3VudGVy
IG9mIHR4X3NpL3J4X3NpIHVzZXJzICovCiAJbmV0bWFwX3Vuc2V0X3JpbmdpZChwcml2KTsKIAkv
KiBkZWxldGUgdGhlIG5pZnAgKi8KQEAgLTk2Miw2ICs5NzgsMTkgQEAKIAkJKHByaXYtPm5wX3Fs
YXN0W3RdIC0gcHJpdi0+bnBfcWZpcnN0W3RdID4gMSkpOwogfQogCitzdHJ1Y3QgbmV0bWFwX3By
aXZfZCoKK25ldG1hcF9wcml2X25ldyh2b2lkKQoreworCXN0cnVjdCBuZXRtYXBfcHJpdl9kICpw
cml2OworCisJcHJpdiA9IG5tX29zX21hbGxvYyhzaXplb2Yoc3RydWN0IG5ldG1hcF9wcml2X2Qp
KTsKKwlpZiAocHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlwcml2LT5ucF9yZWZzID0g
MTsKKwlubV9vc19nZXRfbW9kdWxlKCk7CisJcmV0dXJuIHByaXY7Cit9CisKIC8qCiAgKiBEZXN0
cnVjdG9yIG9mIHRoZSBuZXRtYXBfcHJpdl9kLCBjYWxsZWQgd2hlbiB0aGUgZmQgaXMgY2xvc2Vk
CiAgKiBBY3Rpb246IHVuZG8gYWxsIHRoZSB0aGluZ3MgZG9uZSBieSBOSU9DUkVHSUYsCkBAIC05
NzEsMjIgKzEwMDAsMjIgQEAKICAqCiAgKi8KIC8qIGNhbGwgd2l0aCBOTUdfTE9DSyBoZWxkICov
Ci1pbnQKLW5ldG1hcF9kdG9yX2xvY2tlZChzdHJ1Y3QgbmV0bWFwX3ByaXZfZCAqcHJpdikKK3Zv
aWQKK25ldG1hcF9wcml2X2RlbGV0ZShzdHJ1Y3QgbmV0bWFwX3ByaXZfZCAqcHJpdikKIHsKIAlz
dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hID0gcHJpdi0+bnBfbmE7CiAKIAkvKiBudW1iZXIgb2Yg
YWN0aXZlIHJlZmVyZW5jZXMgdG8gdGhpcyBmZCAqLwogCWlmICgtLXByaXYtPm5wX3JlZnMgPiAw
KSB7Ci0JCXJldHVybiAwOwotCX0KLQluZXRtYXBfdXNlX2NvdW50LS07Ci0JaWYgKCFuYSkgewot
CQlyZXR1cm4gMTsgLy9YWFggaXMgaXQgY29ycmVjdD8KKwkJcmV0dXJuOwogCX0KLQluZXRtYXBf
ZG9fdW5yZWdpZihwcml2KTsKLQluZXRtYXBfYWRhcHRlcl9wdXQobmEpOwotCXJldHVybiAxOwor
CW5tX29zX3B1dF9tb2R1bGUoKTsKKwlpZiAobmEpIHsKKwkJbmV0bWFwX2RvX3VucmVnaWYocHJp
dik7CisJfQorCW5ldG1hcF91bmdldF9uYShuYSwgcHJpdi0+bnBfaWZwKTsKKwliemVybyhwcml2
LCBzaXplb2YoKnByaXYpKTsJLyogZm9yIHNhZmV0eSAqLworCW5tX29zX2ZyZWUocHJpdik7CiB9
CiAKIApAQCAtOTk1LDE1ICsxMDI0LDEwIEBACiBuZXRtYXBfZHRvcih2b2lkICpkYXRhKQogewog
CXN0cnVjdCBuZXRtYXBfcHJpdl9kICpwcml2ID0gZGF0YTsKLQlpbnQgbGFzdF9pbnN0YW5jZTsK
IAogCU5NR19MT0NLKCk7Ci0JbGFzdF9pbnN0YW5jZSA9IG5ldG1hcF9kdG9yX2xvY2tlZChwcml2
KTsKKwluZXRtYXBfcHJpdl9kZWxldGUocHJpdik7CiAJTk1HX1VOTE9DSygpOwotCWlmIChsYXN0
X2luc3RhbmNlKSB7Ci0JCWJ6ZXJvKHByaXYsIHNpemVvZigqcHJpdikpOwkvKiBmb3Igc2FmZXR5
ICovCi0JCWZyZWUocHJpdiwgTV9ERVZCVUYpOwotCX0KIH0KIAogCkBAIC0xMDM2LDE0ICsxMDYw
LDE5IEBACiBuZXRtYXBfc2VuZF91cChzdHJ1Y3QgaWZuZXQgKmRzdCwgc3RydWN0IG1icSAqcSkK
IHsKIAlzdHJ1Y3QgbWJ1ZiAqbTsKKwlzdHJ1Y3QgbWJ1ZiAqaGVhZCA9IE5VTEwsICpwcmV2ID0g
TlVMTDsKIAogCS8qIHNlbmQgcGFja2V0cyB1cCwgb3V0c2lkZSB0aGUgbG9jayAqLwogCXdoaWxl
ICgobSA9IG1icV9kZXF1ZXVlKHEpKSAhPSBOVUxMKSB7CiAJCWlmIChuZXRtYXBfdmVyYm9zZSAm
IE5NX1ZFUkJfSE9TVCkKIAkJCUQoInNlbmRpbmcgdXAgcGt0ICVwIHNpemUgJWQiLCBtLCBNQlVG
X0xFTihtKSk7Ci0JCU5NX1NFTkRfVVAoZHN0LCBtKTsKLQl9Ci0JbWJxX2Rlc3Ryb3kocSk7CisJ
CXByZXYgPSBubV9vc19zZW5kX3VwKGRzdCwgbSwgcHJldik7CisJCWlmIChoZWFkID09IE5VTEwp
CisJCQloZWFkID0gcHJldjsKKwl9CisJaWYgKGhlYWQpCisJCW5tX29zX3NlbmRfdXAoZHN0LCBO
VUxMLCBoZWFkKTsKKwltYnFfZmluaShxKTsKIH0KIAogCkBAIC0xMDgxLDYgKzExMTAsMjcgQEAK
IAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50Citfbm1fbWF5X2ZvcndhcmQoc3RydWN0IG5ldG1h
cF9rcmluZyAqa3JpbmcpCit7CisJcmV0dXJuCSgobmV0bWFwX2Z3ZCB8fCBrcmluZy0+cmluZy0+
ZmxhZ3MgJiBOUl9GT1JXQVJEKSAmJgorCQkga3JpbmctPm5hLT5uYV9mbGFncyAmIE5BRl9IT1NU
X1JJTkdTICYmCisJCSBrcmluZy0+dHggPT0gTlJfUlgpOworfQorCitzdGF0aWMgaW5saW5lIGlu
dAorbm1fbWF5X2ZvcndhcmRfdXAoc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcpCit7CisJcmV0
dXJuCV9ubV9tYXlfZm9yd2FyZChrcmluZykgJiYKKwkJIGtyaW5nLT5yaW5nX2lkICE9IGtyaW5n
LT5uYS0+bnVtX3J4X3JpbmdzOworfQorCitzdGF0aWMgaW5saW5lIGludAorbm1fbWF5X2Zvcndh
cmRfZG93bihzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZykKK3sKKwlyZXR1cm4JX25tX21heV9m
b3J3YXJkKGtyaW5nKSAmJgorCQkga3JpbmctPnJpbmdfaWQgPT0ga3JpbmctPm5hLT5udW1fcnhf
cmluZ3M7Cit9CiAKIC8qCiAgKiBTZW5kIHRvIHRoZSBOSUMgcmluZ3MgcGFja2V0cyBtYXJrZWQg
TlNfRk9SV0FSRCBiZXR3ZWVuCkBAIC0xMTA3LDcgKzExNTcsNyBAQAogCQlmb3IgKDsgcnhjdXIg
IT0gaGVhZCAmJiAhbm1fcmluZ19lbXB0eShyZHN0KTsKIAkJICAgICByeGN1ciA9IG5tX25leHQo
cnhjdXIsIHNyY19saW0pICkgewogCQkJc3RydWN0IG5ldG1hcF9zbG90ICpzcmMsICpkc3QsIHRt
cDsKLQkJCXVfaW50IGRzdF9jdXIgPSByZHN0LT5jdXI7CisJCQl1X2ludCBkc3RfaGVhZCA9IHJk
c3QtPmhlYWQ7CiAKIAkJCXNyYyA9ICZyeHNsb3RbcnhjdXJdOwogCQkJaWYgKChzcmMtPmZsYWdz
ICYgTlNfRk9SV0FSRCkgPT0gMCAmJiAhbmV0bWFwX2Z3ZCkKQEAgLTExMTUsNyArMTE2NSw3IEBA
CiAKIAkJCXNlbnQrKzsKIAotCQkJZHN0ID0gJnJkc3QtPnNsb3RbZHN0X2N1cl07CisJCQlkc3Qg
PSAmcmRzdC0+c2xvdFtkc3RfaGVhZF07CiAKIAkJCXRtcCA9ICpzcmM7CiAKQEAgLTExMjYsNyAr
MTE3Niw3IEBACiAJCQlkc3QtPmxlbiA9IHRtcC5sZW47CiAJCQlkc3QtPmZsYWdzID0gTlNfQlVG
X0NIQU5HRUQ7CiAKLQkJCXJkc3QtPmN1ciA9IG5tX25leHQoZHN0X2N1ciwgZHN0X2xpbSk7CisJ
CQlyZHN0LT5oZWFkID0gcmRzdC0+Y3VyID0gbm1fbmV4dChkc3RfaGVhZCwgZHN0X2xpbSk7CiAJ
CX0KIAkJLyogaWYgKHNlbnQpIFhYWCB0eHN5bmMgPyAqLwogCX0KQEAgLTExNDAsMTAgKzExOTAs
MTAgQEAKICAqIGNhbiBiZSBhbW9uZyBtdWx0aXBsZSB1c2VyIHRocmVhZHMgZXJyb25lb3VzbHkg
Y2FsbGluZwogICogdGhpcyByb3V0aW5lIGNvbmN1cnJlbnRseS4KICAqLwotc3RhdGljIHZvaWQK
LW5ldG1hcF90eHN5bmNfdG9faG9zdChzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKQorc3RhdGlj
IGludAorbmV0bWFwX3R4c3luY190b19ob3N0KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCBp
bnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcgPSAmbmEtPnR4X3Jpbmdz
W25hLT5udW1fdHhfcmluZ3NdOworCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEgPSBrcmluZy0+
bmE7CiAJdV9pbnQgY29uc3QgbGltID0ga3JpbmctPm5rcl9udW1fc2xvdHMgLSAxOwogCXVfaW50
IGNvbnN0IGhlYWQgPSBrcmluZy0+cmhlYWQ7CiAJc3RydWN0IG1icSBxOwpAQCAtMTE2Miw2ICsx
MjEyLDcgQEAKIAkJa3JpbmctPm5yX2h3dGFpbCAtPSBsaW0gKyAxOwogCiAJbmV0bWFwX3NlbmRf
dXAobmEtPmlmcCwgJnEpOworCXJldHVybiAwOwogfQogCiAKQEAgLTExNzEsMTcgKzEyMjIsMTUg
QEAKICAqIFdlIHByb3RlY3QgYWNjZXNzIHRvIHRoZSBrcmluZyB1c2luZyBrcmluZy0+cnhfcXVl
dWUubG9jawogICoKICAqIFRoaXMgcm91dGluZSBhbHNvIGRvZXMgdGhlIHNlbHJlY29yZCBpZiBj
YWxsZWQgZnJvbSB0aGUgcG9sbCBoYW5kbGVyCi0gKiAod2Uga25vdyBiZWNhdXNlIHRkICE9IE5V
TEwpLgorICogKHdlIGtub3cgYmVjYXVzZSBzciAhPSBOVUxMKS4KICAqCi0gKiBOT1RFOiBvbiBs
aW51eCwgc2VscmVjb3JkKCkgaXMgZGVmaW5lZCBhcyBhIG1hY3JvIGFuZCB1c2VzIHB3YWl0Ci0g
KiAgICAgYXMgYW4gYWRkaXRpb25hbCBoaWRkZW4gYXJndW1lbnQuCiAgKiByZXR1cm5zIHRoZSBu
dW1iZXIgb2YgcGFja2V0cyBkZWxpdmVyZWQgdG8gdHggcXVldWVzIGluCiAgKiB0cmFuc3BhcmVu
dCBtb2RlLCBvciBhIG5lZ2F0aXZlIHZhbHVlIGlmIGVycm9yCiAgKi8KIHN0YXRpYyBpbnQKLW5l
dG1hcF9yeHN5bmNfZnJvbV9ob3N0KHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIHN0cnVjdCB0
aHJlYWQgKnRkLCB2b2lkICpwd2FpdCkKK25ldG1hcF9yeHN5bmNfZnJvbV9ob3N0KHN0cnVjdCBu
ZXRtYXBfa3JpbmcgKmtyaW5nLCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IG5ldG1hcF9rcmluZyAq
a3JpbmcgPSAmbmEtPnJ4X3JpbmdzW25hLT5udW1fcnhfcmluZ3NdOworCXN0cnVjdCBuZXRtYXBf
YWRhcHRlciAqbmEgPSBrcmluZy0+bmE7CiAJc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nID0ga3Jp
bmctPnJpbmc7CiAJdV9pbnQgbm1faSwgbjsKIAl1X2ludCBjb25zdCBsaW0gPSBrcmluZy0+bmty
X251bV9zbG90cyAtIDE7CkBAIC0xMTg5LDkgKzEyMzgsNiBAQAogCWludCByZXQgPSAwOwogCXN0
cnVjdCBtYnEgKnEgPSAma3JpbmctPnJ4X3F1ZXVlLCBmcTsKIAotCSh2b2lkKXB3YWl0OwkvKiBk
aXNhYmxlIHVudXNlZCB3YXJuaW5ncyAqLwotCSh2b2lkKXRkOwotCiAJbWJxX2luaXQoJmZxKTsg
LyogZnEgaG9sZHMgcGFja2V0cyB0byBiZSBmcmVlZCAqLwogCiAJbWJxX2xvY2socSk7CkBAIC0x
MjI2LDE5ICsxMjcyLDIwIEBACiAJICovCiAJbm1faSA9IGtyaW5nLT5ucl9od2N1cjsKIAlpZiAo
bm1faSAhPSBoZWFkKSB7IC8qIHNvbWV0aGluZyB3YXMgcmVsZWFzZWQgKi8KLQkJaWYgKG5ldG1h
cF9md2QgfHwga3JpbmctPnJpbmctPmZsYWdzICYgTlJfRk9SV0FSRCkKKwkJaWYgKG5tX21heV9m
b3J3YXJkX2Rvd24oa3JpbmcpKSB7CiAJCQlyZXQgPSBuZXRtYXBfc3dfdG9fbmljKG5hKTsKKwkJ
CWlmIChyZXQgPiAwKSB7CisJCQkJa3JpbmctPm5yX2tmbGFncyB8PSBOUl9GT1JXQVJEOworCQkJ
CXJldCA9IDA7CisJCQl9CisJCX0KIAkJa3JpbmctPm5yX2h3Y3VyID0gaGVhZDsKIAl9CiAKLQkv
KiBhY2Nlc3MgY29waWVzIG9mIGN1cix0YWlsIGluIHRoZSBrcmluZyAqLwotCWlmIChrcmluZy0+
cmN1ciA9PSBrcmluZy0+cnRhaWwgJiYgdGQpIC8qIG5vIGJ1ZnMgYXZhaWxhYmxlICovCi0JCU9T
X3NlbHJlY29yZCh0ZCwgJmtyaW5nLT5zaSk7Ci0KIAltYnFfdW5sb2NrKHEpOwogCiAJbWJxX3B1
cmdlKCZmcSk7Ci0JbWJxX2Rlc3Ryb3koJmZxKTsKKwltYnFfZmluaSgmZnEpOwogCiAJcmV0dXJu
IHJldDsKIH0KQEAgLTEyNjcsMTcgKzEzMTQsMTQgQEAKICAqICAgICAwICAgICAgICBORVRNQVBf
QURNT0RFX0dFTkVSSUMgICBHRU5FUklDIEdFTkVSSUMKICAqCiAgKi8KLQorc3RhdGljIHZvaWQg
bmV0bWFwX2h3X2R0b3Ioc3RydWN0IG5ldG1hcF9hZGFwdGVyICopOyAvKiBuZWVkZWQgYnkgTk1f
SVNfTkFUSVZFKCkgKi8KIGludAogbmV0bWFwX2dldF9od19uYShzdHJ1Y3QgaWZuZXQgKmlmcCwg
c3RydWN0IG5ldG1hcF9hZGFwdGVyICoqbmEpCiB7CiAJLyogZ2VuZXJpYyBzdXBwb3J0ICovCiAJ
aW50IGkgPSBuZXRtYXBfYWRtb2RlOwkvKiBUYWtlIGEgc25hcHNob3QuICovCiAJc3RydWN0IG5l
dG1hcF9hZGFwdGVyICpwcmV2X25hOwotI2lmZGVmIFdJVEhfR0VORVJJQwotCXN0cnVjdCBuZXRt
YXBfZ2VuZXJpY19hZGFwdGVyICpnbmE7CiAJaW50IGVycm9yID0gMDsKLSNlbmRpZgogCiAJKm5h
ID0gTlVMTDsgLyogZGVmYXVsdCAqLwogCkBAIC0xMjg1LDcgKzEzMjksNyBAQAogCWlmIChpIDwg
TkVUTUFQX0FETU9ERV9CRVNUIHx8IGkgPj0gTkVUTUFQX0FETU9ERV9MQVNUKQogCQlpID0gbmV0
bWFwX2FkbW9kZSA9IE5FVE1BUF9BRE1PREVfQkVTVDsKIAotCWlmIChORVRNQVBfQ0FQQUJMRShp
ZnApKSB7CisJaWYgKE5NX05BX1ZBTElEKGlmcCkpIHsKIAkJcHJldl9uYSA9IE5BKGlmcCk7CiAJ
CS8qIElmIGFuIGFkYXB0ZXIgYWxyZWFkeSBleGlzdHMsIHJldHVybiBpdCBpZgogCQkgKiB0aGVy
ZSBhcmUgYWN0aXZlIGZpbGUgZGVzY3JpcHRvcnMgb3IgaWYKQEAgLTEzMTAsMTAgKzEzNTQsOSBA
QAogCS8qIElmIHRoZXJlIGlzbid0IG5hdGl2ZSBzdXBwb3J0IGFuZCBuZXRtYXAgaXMgbm90IGFs
bG93ZWQKIAkgKiB0byB1c2UgZ2VuZXJpYyBhZGFwdGVycywgd2UgY2Fubm90IHNhdGlzZnkgdGhl
IHJlcXVlc3QuCiAJICovCi0JaWYgKCFORVRNQVBfQ0FQQUJMRShpZnApICYmIGkgPT0gTkVUTUFQ
X0FETU9ERV9OQVRJVkUpCisJaWYgKCFOTV9JU19OQVRJVkUoaWZwKSAmJiBpID09IE5FVE1BUF9B
RE1PREVfTkFUSVZFKQogCQlyZXR1cm4gRU9QTk9UU1VQUDsKIAotI2lmZGVmIFdJVEhfR0VORVJJ
QwogCS8qIE90aGVyd2lzZSwgY3JlYXRlIGEgZ2VuZXJpYyBhZGFwdGVyIGFuZCByZXR1cm4gaXQs
CiAJICogc2F2aW5nIHRoZSBwcmV2aW91c2x5IHVzZWQgbmV0bWFwIGFkYXB0ZXIsIGlmIGFueS4K
IAkgKgpAQCAtMTMyOCwyNSArMTM3MSwxMiBAQAogCSAqIHRoZSBicmFuY2hlcyBhYm92ZS4gVGhp
cyBlbnN1cmVzIHRoYXQgd2UgbmV2ZXIgb3ZlcnJpZGUKIAkgKiBhIGdlbmVyaWMgYWRhcHRlciB3
aXRoIGFub3RoZXIgZ2VuZXJpYyBhZGFwdGVyLgogCSAqLwotCXByZXZfbmEgPSBOQShpZnApOwog
CWVycm9yID0gZ2VuZXJpY19uZXRtYXBfYXR0YWNoKGlmcCk7CiAJaWYgKGVycm9yKQogCQlyZXR1
cm4gZXJyb3I7CiAKIAkqbmEgPSBOQShpZnApOwotCWduYSA9IChzdHJ1Y3QgbmV0bWFwX2dlbmVy
aWNfYWRhcHRlciopTkEoaWZwKTsKLQlnbmEtPnByZXYgPSBwcmV2X25hOyAvKiBzYXZlIG9sZCBu
YSAqLwotCWlmIChwcmV2X25hICE9IE5VTEwpIHsKLQkJaWZ1bml0X3JlZihpZnAtPmlmX3huYW1l
KTsKLQkJLy8gWFhYIGFkZCBhIHJlZmNvdW50ID8KLQkJbmV0bWFwX2FkYXB0ZXJfZ2V0KHByZXZf
bmEpOwotCX0KLQlORCgiQ3JlYXRlZCBnZW5lcmljIE5BICVwIChwcmV2ICVwKSIsIGduYSwgZ25h
LT5wcmV2KTsKLQogCXJldHVybiAwOwotI2Vsc2UgLyogIVdJVEhfR0VORVJJQyAqLwotCXJldHVy
biBFT1BOT1RTVVBQOwotI2VuZGlmCiB9CiAKIApAQCAtMTM2NCwyMSArMTM5NCwyMiBAQAogICog
Y291bGQgbm90IGJlIGFsbG9jYXRlZC4KICAqIElmIHN1Y2Nlc3NmdWwsIGhvbGQgYSByZWZlcmVu
Y2UgdG8gdGhlIG5ldG1hcCBhZGFwdGVyLgogICoKLSAqIE5vIHJlZmVyZW5jZSBpcyBrZXB0IG9u
IHRoZSByZWFsIGludGVyZmFjZSwgd2hpY2ggbWF5IHRoZW4KLSAqIGRpc2FwcGVhciBhdCBhbnkg
dGltZS4KKyAqIElmIHRoZSBpbnRlcmZhY2Ugc3BlY2lmaWVkIGJ5IG5tciBpcyBhIHN5c3RlbSBv
bmUsIGFsc28ga2VlcAorICogYSByZWZlcmVuY2UgdG8gaXQgYW5kIHJldHVybiBhIHZhbGlkICpp
ZnAuCiAgKi8KIGludAotbmV0bWFwX2dldF9uYShzdHJ1Y3Qgbm1yZXEgKm5tciwgc3RydWN0IG5l
dG1hcF9hZGFwdGVyICoqbmEsIGludCBjcmVhdGUpCituZXRtYXBfZ2V0X25hKHN0cnVjdCBubXJl
cSAqbm1yLCBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKipuYSwKKwkgICAgICBzdHJ1Y3QgaWZuZXQg
KippZnAsIGludCBjcmVhdGUpCiB7Ci0Jc3RydWN0IGlmbmV0ICppZnAgPSBOVUxMOwogCWludCBl
cnJvciA9IDA7CiAJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpyZXQgPSBOVUxMOwogCiAJKm5hID0g
TlVMTDsgICAgIC8qIGRlZmF1bHQgcmV0dXJuIHZhbHVlICovCisJKmlmcCA9IE5VTEw7CiAKIAlO
TUdfTE9DS19BU1NFUlQoKTsKIAotCS8qIHdlIGNhc2NhZGUgdGhyb3VnaCBhbGwgcG9zc2libGUg
dHlwZXMgb2YgbmV0bWFwIGFkYXB0ZXIuCisJLyogV2UgY2FzY2FkZSB0aHJvdWdoIGFsbCBwb3Nz
aWJsZSB0eXBlcyBvZiBuZXRtYXAgYWRhcHRlci4KIAkgKiBBbGwgbmV0bWFwX2dldF8qX25hKCkg
ZnVuY3Rpb25zIHJldHVybiBhbiBlcnJvciBhbmQgYW4gbmEsCiAJICogd2l0aCB0aGUgZm9sbG93
aW5nIGNvbWJpbmF0aW9uczoKIAkgKgpAQCAtMTM4OSw2ICsxNDIwLDExIEBACiAJICogICEwICAg
ICFOVUxMCQlpbXBvc3NpYmxlCiAJICovCiAKKwkvKiB0cnkgdG8gc2VlIGlmIHRoaXMgaXMgYSBw
dG5ldG1hcCBwb3J0ICovCisJZXJyb3IgPSBuZXRtYXBfZ2V0X3B0X2hvc3RfbmEobm1yLCBuYSwg
Y3JlYXRlKTsKKwlpZiAoZXJyb3IgfHwgKm5hICE9IE5VTEwpCisJCXJldHVybiBlcnJvcjsKKwog
CS8qIHRyeSB0byBzZWUgaWYgdGhpcyBpcyBhIG1vbml0b3IgcG9ydCAqLwogCWVycm9yID0gbmV0
bWFwX2dldF9tb25pdG9yX25hKG5tciwgbmEsIGNyZWF0ZSk7CiAJaWYgKGVycm9yIHx8ICpuYSAh
PSBOVUxMKQpAQCAtMTQxMywxMiArMTQ0OSwxMiBAQAogCSAqIFRoaXMgbWF5IHN0aWxsIGJlIGEg
dGFwLCBhIHZldGgvZXBhaXIsIG9yIGV2ZW4gYQogCSAqIHBlcnNpc3RlbnQgVkFMRSBwb3J0Lgog
CSAqLwotCWlmcCA9IGlmdW5pdF9yZWYobm1yLT5ucl9uYW1lKTsKLQlpZiAoaWZwID09IE5VTEwp
IHsKKwkqaWZwID0gaWZ1bml0X3JlZihubXItPm5yX25hbWUpOworCWlmICgqaWZwID09IE5VTEwp
IHsKIAkgICAgICAgIHJldHVybiBFTlhJTzsKIAl9CiAKLQllcnJvciA9IG5ldG1hcF9nZXRfaHdf
bmEoaWZwLCAmcmV0KTsKKwllcnJvciA9IG5ldG1hcF9nZXRfaHdfbmEoKmlmcCwgJnJldCk7CiAJ
aWYgKGVycm9yKQogCQlnb3RvIG91dDsKIApAQCAtMTQyNiwxNSArMTQ2Miw0MiBAQAogCW5ldG1h
cF9hZGFwdGVyX2dldChyZXQpOwogCiBvdXQ6Ci0JaWYgKGVycm9yICYmIHJldCAhPSBOVUxMKQot
CQluZXRtYXBfYWRhcHRlcl9wdXQocmV0KTsKLQotCWlmIChpZnApCi0JCWlmX3JlbGUoaWZwKTsg
LyogYWxsb3cgbGl2ZSB1bmxvYWRpbmcgb2YgZHJpdmVycyBtb2R1bGVzICovCisJaWYgKGVycm9y
KSB7CisJCWlmIChyZXQpCisJCQluZXRtYXBfYWRhcHRlcl9wdXQocmV0KTsKKwkJaWYgKCppZnAp
IHsKKwkJCWlmX3JlbGUoKmlmcCk7CisJCQkqaWZwID0gTlVMTDsKKwkJfQorCX0KIAogCXJldHVy
biBlcnJvcjsKIH0KIAorLyogdW5kbyBuZXRtYXBfZ2V0X25hKCkgKi8KK3ZvaWQKK25ldG1hcF91
bmdldF9uYShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCBzdHJ1Y3QgaWZuZXQgKmlmcCkKK3sK
KwlpZiAoaWZwKQorCQlpZl9yZWxlKGlmcCk7CisJaWYgKG5hKQorCQluZXRtYXBfYWRhcHRlcl9w
dXQobmEpOworfQorCisKKyNkZWZpbmUgTk1fRkFJTF9PTih0KSBkbyB7CQkJCQkJXAorCWlmICh1
bmxpa2VseSh0KSkgewkJCQkJCVwKKwkJUkQoNSwgIiVzOiBmYWlsICciICN0ICInICIJCQkJXAor
CQkJImggJWQgYyAlZCB0ICVkICIJCQkJXAorCQkJInJoICVkIHJjICVkIHJ0ICVkICIJCQkJXAor
CQkJImhjICVkIGh0ICVkIiwJCQkJCVwKKwkJCWtyaW5nLT5uYW1lLAkJCQkJXAorCQkJaGVhZCwg
Y3VyLCByaW5nLT50YWlsLAkJCQlcCisJCQlrcmluZy0+cmhlYWQsIGtyaW5nLT5yY3VyLCBrcmlu
Zy0+cnRhaWwsCVwKKwkJCWtyaW5nLT5ucl9od2N1ciwga3JpbmctPm5yX2h3dGFpbCk7CQlcCisJ
CXJldHVybiBrcmluZy0+bmtyX251bV9zbG90czsJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUg
KDApCiAKIC8qCiAgKiB2YWxpZGF0ZSBwYXJhbWV0ZXJzIG9uIGVudHJ5IGZvciAqX3R4c3luYygp
CkBAIC0xNDQ5LDExICsxNTEyLDkgQEAKICAqCiAgKiBod2N1ciwgcmhlYWQsIHJ0YWlsIGFuZCBo
d3RhaWwgYXJlIHJlbGlhYmxlCiAgKi8KLXN0YXRpYyB1X2ludAotbm1fdHhzeW5jX3Byb2xvZ3Vl
KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nKQordV9pbnQKK25tX3R4c3luY19wcm9sb2d1ZShz
dHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywgc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nKQogewot
I2RlZmluZSBOTV9BU1NFUlQodCkgaWYgKHQpIHsgRCgiZmFpbCAiICN0KTsgZ290byBlcnJvcjsg
fQotCXN0cnVjdCBuZXRtYXBfcmluZyAqcmluZyA9IGtyaW5nLT5yaW5nOwogCXVfaW50IGhlYWQg
PSByaW5nLT5oZWFkOyAvKiByZWFkIG9ubHkgb25jZSAqLwogCXVfaW50IGN1ciA9IHJpbmctPmN1
cjsgLyogcmVhZCBvbmx5IG9uY2UgKi8KIAl1X2ludCBuID0ga3JpbmctPm5rcl9udW1fc2xvdHM7
CkBAIC0xNDYzLDU0ICsxNTI0LDQ0IEBACiAJCWtyaW5nLT5ucl9od2N1ciwga3JpbmctPm5yX2h3
dGFpbCwKIAkJcmluZy0+aGVhZCwgcmluZy0+Y3VyLCByaW5nLT50YWlsKTsKICNpZiAxIC8qIGtl
cm5lbCBzYW5pdHkgY2hlY2tzOyBidXQgd2UgY2FuIHRydXN0IHRoZSBrcmluZy4gKi8KLQlpZiAo
a3JpbmctPm5yX2h3Y3VyID49IG4gfHwga3JpbmctPnJoZWFkID49IG4gfHwKLQkgICAga3Jpbmct
PnJ0YWlsID49IG4gfHwgIGtyaW5nLT5ucl9od3RhaWwgPj0gbikKLQkJZ290byBlcnJvcjsKKwlO
TV9GQUlMX09OKGtyaW5nLT5ucl9od2N1ciA+PSBuIHx8IGtyaW5nLT5yaGVhZCA+PSBuIHx8CisJ
ICAgIGtyaW5nLT5ydGFpbCA+PSBuIHx8ICBrcmluZy0+bnJfaHd0YWlsID49IG4pOwogI2VuZGlm
IC8qIGtlcm5lbCBzYW5pdHkgY2hlY2tzICovCiAJLyoKLQkgKiB1c2VyIHNhbml0eSBjaGVja3Mu
IFdlIG9ubHkgdXNlICdjdXInLAotCSAqIEEsIEIsIC4uLiBhcmUgcG9zc2libGUgcG9zaXRpb25z
IGZvciBjdXI6CisJICogdXNlciBzYW5pdHkgY2hlY2tzLiBXZSBvbmx5IHVzZSBoZWFkLAorCSAq
IEEsIEIsIC4uLiBhcmUgcG9zc2libGUgcG9zaXRpb25zIGZvciBoZWFkOgogCSAqCi0JICogIDAg
ICAgQSAgY3VyICAgQiAgdGFpbCAgQyAgbi0xCi0JICogIDAgICAgRCAgdGFpbCAgRSAgY3VyICAg
RiAgbi0xCisJICogIDAgICAgQSAgcmhlYWQgICBCICBydGFpbCAgIEMgIG4tMQorCSAqICAwICAg
IEQgIHJ0YWlsICAgRSAgcmhlYWQgICBGICBuLTEKIAkgKgogCSAqIEIsIEYsIEQgYXJlIHZhbGlk
LiBBLCBDLCBFIGFyZSB3cm9uZwogCSAqLwogCWlmIChrcmluZy0+cnRhaWwgPj0ga3JpbmctPnJo
ZWFkKSB7CiAJCS8qIHdhbnQgcmhlYWQgPD0gaGVhZCA8PSBydGFpbCAqLwotCQlOTV9BU1NFUlQo
aGVhZCA8IGtyaW5nLT5yaGVhZCB8fCBoZWFkID4ga3JpbmctPnJ0YWlsKTsKKwkJTk1fRkFJTF9P
TihoZWFkIDwga3JpbmctPnJoZWFkIHx8IGhlYWQgPiBrcmluZy0+cnRhaWwpOwogCQkvKiBhbmQg
YWxzbyBoZWFkIDw9IGN1ciA8PSBydGFpbCAqLwotCQlOTV9BU1NFUlQoY3VyIDwgaGVhZCB8fCBj
dXIgPiBrcmluZy0+cnRhaWwpOworCQlOTV9GQUlMX09OKGN1ciA8IGhlYWQgfHwgY3VyID4ga3Jp
bmctPnJ0YWlsKTsKIAl9IGVsc2UgeyAvKiBoZXJlIHJ0YWlsIDwgcmhlYWQgKi8KIAkJLyogd2Ug
bmVlZCBoZWFkIG91dHNpZGUgcnRhaWwgLi4gcmhlYWQgKi8KLQkJTk1fQVNTRVJUKGhlYWQgPiBr
cmluZy0+cnRhaWwgJiYgaGVhZCA8IGtyaW5nLT5yaGVhZCk7CisJCU5NX0ZBSUxfT04oaGVhZCA+
IGtyaW5nLT5ydGFpbCAmJiBoZWFkIDwga3JpbmctPnJoZWFkKTsKIAogCQkvKiB0d28gY2FzZXMg
bm93OiBoZWFkIDw9IHJ0YWlsIG9yIGhlYWQgPj0gcmhlYWQgICovCiAJCWlmIChoZWFkIDw9IGty
aW5nLT5ydGFpbCkgewogCQkJLyogd2FudCBoZWFkIDw9IGN1ciA8PSBydGFpbCAqLwotCQkJTk1f
QVNTRVJUKGN1ciA8IGhlYWQgfHwgY3VyID4ga3JpbmctPnJ0YWlsKTsKKwkJCU5NX0ZBSUxfT04o
Y3VyIDwgaGVhZCB8fCBjdXIgPiBrcmluZy0+cnRhaWwpOwogCQl9IGVsc2UgeyAvKiBoZWFkID49
IHJoZWFkICovCiAJCQkvKiBjdXIgbXVzdCBiZSBvdXRzaWRlIHJ0YWlsLi5oZWFkICovCi0JCQlO
TV9BU1NFUlQoY3VyID4ga3JpbmctPnJ0YWlsICYmIGN1ciA8IGhlYWQpOworCQkJTk1fRkFJTF9P
TihjdXIgPiBrcmluZy0+cnRhaWwgJiYgY3VyIDwgaGVhZCk7CiAJCX0KIAl9CiAJaWYgKHJpbmct
PnRhaWwgIT0ga3JpbmctPnJ0YWlsKSB7Ci0JCVJEKDUsICJ0YWlsIG92ZXJ3cml0dGVuIHdhcyAl
ZCBuZWVkICVkIiwKKwkJUkQoNSwgIiVzIHRhaWwgb3ZlcndyaXR0ZW4gd2FzICVkIG5lZWQgJWQi
LCBrcmluZy0+bmFtZSwKIAkJCXJpbmctPnRhaWwsIGtyaW5nLT5ydGFpbCk7CiAJCXJpbmctPnRh
aWwgPSBrcmluZy0+cnRhaWw7CiAJfQogCWtyaW5nLT5yaGVhZCA9IGhlYWQ7CiAJa3JpbmctPnJj
dXIgPSBjdXI7CiAJcmV0dXJuIGhlYWQ7Ci0KLWVycm9yOgotCVJEKDUsICIlcyBrcmluZyBlcnJv
cjogaGVhZCAlZCBjdXIgJWQgdGFpbCAlZCByaGVhZCAlZCByY3VyICVkIHJ0YWlsICVkIGh3Y3Vy
ICVkIGh3dGFpbCAlZCIsCi0JCWtyaW5nLT5uYW1lLAotCQloZWFkLCBjdXIsIHJpbmctPnRhaWws
Ci0JCWtyaW5nLT5yaGVhZCwga3JpbmctPnJjdXIsIGtyaW5nLT5ydGFpbCwKLQkJa3JpbmctPm5y
X2h3Y3VyLCBrcmluZy0+bnJfaHd0YWlsKTsKLQlyZXR1cm4gbjsKLSN1bmRlZiBOTV9BU1NFUlQK
IH0KIAogCkBAIC0xNTI1LDEwICsxNTc2LDkgQEAKICAqIGh3Y3VyIGFuZCBod3RhaWwgYXJlIHJl
bGlhYmxlLgogICoKICAqLwotc3RhdGljIHVfaW50Ci1ubV9yeHN5bmNfcHJvbG9ndWUoc3RydWN0
IG5ldG1hcF9rcmluZyAqa3JpbmcpCit1X2ludAorbm1fcnhzeW5jX3Byb2xvZ3VlKHN0cnVjdCBu
ZXRtYXBfa3JpbmcgKmtyaW5nLCBzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJpbmcpCiB7Ci0Jc3RydWN0
IG5ldG1hcF9yaW5nICpyaW5nID0ga3JpbmctPnJpbmc7CiAJdWludDMyX3QgY29uc3QgbiA9IGty
aW5nLT5ua3JfbnVtX3Nsb3RzOwogCXVpbnQzMl90IGhlYWQsIGN1cjsKIApAQCAtMTU0NiwzMCAr
MTU5NiwyNCBAQAogCWN1ciA9IGtyaW5nLT5yY3VyID0gcmluZy0+Y3VyOwkvKiByZWFkIG9ubHkg
b25jZSAqLwogCWhlYWQgPSBrcmluZy0+cmhlYWQgPSByaW5nLT5oZWFkOwkvKiByZWFkIG9ubHkg
b25jZSAqLwogI2lmIDEgLyoga2VybmVsIHNhbml0eSBjaGVja3MgKi8KLQlpZiAoa3JpbmctPm5y
X2h3Y3VyID49IG4gfHwga3JpbmctPm5yX2h3dGFpbCA+PSBuKQotCQlnb3RvIGVycm9yOworCU5N
X0ZBSUxfT04oa3JpbmctPm5yX2h3Y3VyID49IG4gfHwga3JpbmctPm5yX2h3dGFpbCA+PSBuKTsK
ICNlbmRpZiAvKiBrZXJuZWwgc2FuaXR5IGNoZWNrcyAqLwogCS8qIHVzZXIgc2FuaXR5IGNoZWNr
cyAqLwogCWlmIChrcmluZy0+bnJfaHd0YWlsID49IGtyaW5nLT5ucl9od2N1cikgewogCQkvKiB3
YW50IGh3Y3VyIDw9IHJoZWFkIDw9IGh3dGFpbCAqLwotCQlpZiAoaGVhZCA8IGtyaW5nLT5ucl9o
d2N1ciB8fCBoZWFkID4ga3JpbmctPm5yX2h3dGFpbCkKLQkJCWdvdG8gZXJyb3I7CisJCU5NX0ZB
SUxfT04oaGVhZCA8IGtyaW5nLT5ucl9od2N1ciB8fCBoZWFkID4ga3JpbmctPm5yX2h3dGFpbCk7
CiAJCS8qIGFuZCBhbHNvIHJoZWFkIDw9IHJjdXIgPD0gaHd0YWlsICovCi0JCWlmIChjdXIgPCBo
ZWFkIHx8IGN1ciA+IGtyaW5nLT5ucl9od3RhaWwpCi0JCQlnb3RvIGVycm9yOworCQlOTV9GQUlM
X09OKGN1ciA8IGhlYWQgfHwgY3VyID4ga3JpbmctPm5yX2h3dGFpbCk7CiAJfSBlbHNlIHsKIAkJ
Lyogd2UgbmVlZCByaGVhZCBvdXRzaWRlIGh3dGFpbC4uaHdjdXIgKi8KLQkJaWYgKGhlYWQgPCBr
cmluZy0+bnJfaHdjdXIgJiYgaGVhZCA+IGtyaW5nLT5ucl9od3RhaWwpCi0JCQlnb3RvIGVycm9y
OworCQlOTV9GQUlMX09OKGhlYWQgPCBrcmluZy0+bnJfaHdjdXIgJiYgaGVhZCA+IGtyaW5nLT5u
cl9od3RhaWwpOwogCQkvKiB0d28gY2FzZXMgbm93OiBoZWFkIDw9IGh3dGFpbCBvciBoZWFkID49
IGh3Y3VyICAqLwogCQlpZiAoaGVhZCA8PSBrcmluZy0+bnJfaHd0YWlsKSB7CiAJCQkvKiB3YW50
IGhlYWQgPD0gY3VyIDw9IGh3dGFpbCAqLwotCQkJaWYgKGN1ciA8IGhlYWQgfHwgY3VyID4ga3Jp
bmctPm5yX2h3dGFpbCkKLQkJCQlnb3RvIGVycm9yOworCQkJTk1fRkFJTF9PTihjdXIgPCBoZWFk
IHx8IGN1ciA+IGtyaW5nLT5ucl9od3RhaWwpOwogCQl9IGVsc2UgewogCQkJLyogY3VyIG11c3Qg
YmUgb3V0c2lkZSBod3RhaWwuLmhlYWQgKi8KLQkJCWlmIChjdXIgPCBoZWFkICYmIGN1ciA+IGty
aW5nLT5ucl9od3RhaWwpCi0JCQkJZ290byBlcnJvcjsKKwkJCU5NX0ZBSUxfT04oY3VyIDwgaGVh
ZCAmJiBjdXIgPiBrcmluZy0+bnJfaHd0YWlsKTsKIAkJfQogCX0KIAlpZiAocmluZy0+dGFpbCAh
PSBrcmluZy0+cnRhaWwpIHsKQEAgLTE1NzksMTMgKzE2MjMsNiBAQAogCQlyaW5nLT50YWlsID0g
a3JpbmctPnJ0YWlsOwogCX0KIAlyZXR1cm4gaGVhZDsKLQotZXJyb3I6Ci0JUkQoNSwgImtyaW5n
IGVycm9yOiBod2N1ciAlZCByY3VyICVkIGh3dGFpbCAlZCBoZWFkICVkIGN1ciAlZCB0YWlsICVk
IiwKLQkJa3JpbmctPm5yX2h3Y3VyLAotCQlrcmluZy0+cmN1ciwga3JpbmctPm5yX2h3dGFpbCwK
LQkJa3JpbmctPnJoZWFkLCBrcmluZy0+cmN1ciwgcmluZy0+dGFpbCk7Ci0JcmV0dXJuIG47CiB9
CiAKIApAQCAtMTY1OSw2ICsxNjk2LDcgQEAKIAlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hID0g
cHJpdi0+bnBfbmE7CiAJdV9pbnQgaiwgaSA9IHJpbmdpZCAmIE5FVE1BUF9SSU5HX01BU0s7CiAJ
dV9pbnQgcmVnID0gZmxhZ3MgJiBOUl9SRUdfTUFTSzsKKwlpbnQgZXhjbHVkZWRfZGlyZWN0aW9u
W10gPSB7IE5SX1RYX1JJTkdTX09OTFksIE5SX1JYX1JJTkdTX09OTFkgfTsKIAllbnVtIHR4cngg
dDsKIAogCWlmIChyZWcgPT0gTlJfUkVHX0RFRkFVTFQpIHsKQEAgLTE2NzIsNDggKzE3MTAsNTgg
QEAKIAkJfQogCQlEKCJkZXByZWNhdGVkIEFQSSwgb2xkIHJpbmdpZCAweCV4IC0+IHJpbmdpZCAl
eCByZWcgJWQiLCByaW5naWQsIGksIHJlZyk7CiAJfQotCXN3aXRjaCAocmVnKSB7Ci0JY2FzZSBO
Ul9SRUdfQUxMX05JQzoKLQljYXNlIE5SX1JFR19QSVBFX01BU1RFUjoKLQljYXNlIE5SX1JFR19Q
SVBFX1NMQVZFOgotCQlmb3JfcnhfdHgodCkgeworCisJaWYgKChmbGFncyAmIE5SX1BUTkVUTUFQ
X0hPU1QpICYmIChyZWcgIT0gTlJfUkVHX0FMTF9OSUMgfHwKKwkJCWZsYWdzICYgKE5SX1JYX1JJ
TkdTX09OTFl8TlJfVFhfUklOR1NfT05MWSkpKSB7CisJCUQoIkVycm9yOiBvbmx5IE5SX1JFR19B
TExfTklDIHN1cHBvcnRlZCB3aXRoIG5ldG1hcCBwYXNzdGhyb3VnaCIpOworCQlyZXR1cm4gRUlO
VkFMOworCX0KKworCWZvcl9yeF90eCh0KSB7CisJCWlmIChmbGFncyAmIGV4Y2x1ZGVkX2RpcmVj
dGlvblt0XSkgeworCQkJcHJpdi0+bnBfcWZpcnN0W3RdID0gcHJpdi0+bnBfcWxhc3RbdF0gPSAw
OworCQkJY29udGludWU7CisJCX0KKwkJc3dpdGNoIChyZWcpIHsKKwkJY2FzZSBOUl9SRUdfQUxM
X05JQzoKKwkJY2FzZSBOUl9SRUdfUElQRV9NQVNURVI6CisJCWNhc2UgTlJfUkVHX1BJUEVfU0xB
VkU6CiAJCQlwcml2LT5ucF9xZmlyc3RbdF0gPSAwOwogCQkJcHJpdi0+bnBfcWxhc3RbdF0gPSBu
bWFfZ2V0X25yaW5ncyhuYSwgdCk7Ci0JCX0KLQkJTkQoIiVzICVkICVkIiwgIkFMTC9QSVBFIiwK
LQkJCXByaXYtPm5wX3FmaXJzdFtOUl9SWF0sIHByaXYtPm5wX3FsYXN0W05SX1JYXSk7Ci0JCWJy
ZWFrOwotCWNhc2UgTlJfUkVHX1NXOgotCWNhc2UgTlJfUkVHX05JQ19TVzoKLQkJaWYgKCEobmEt
Pm5hX2ZsYWdzICYgTkFGX0hPU1RfUklOR1MpKSB7Ci0JCQlEKCJob3N0IHJpbmdzIG5vdCBzdXBw
b3J0ZWQiKTsKLQkJCXJldHVybiBFSU5WQUw7Ci0JCX0KLQkJZm9yX3J4X3R4KHQpIHsKKwkJCU5E
KCJBTEwvUElQRTogJXMgJWQgJWQiLCBubV90eHJ4MnN0cih0KSwKKwkJCQlwcml2LT5ucF9xZmly
c3RbdF0sIHByaXYtPm5wX3FsYXN0W3RdKTsKKwkJCWJyZWFrOworCQljYXNlIE5SX1JFR19TVzoK
KwkJY2FzZSBOUl9SRUdfTklDX1NXOgorCQkJaWYgKCEobmEtPm5hX2ZsYWdzICYgTkFGX0hPU1Rf
UklOR1MpKSB7CisJCQkJRCgiaG9zdCByaW5ncyBub3Qgc3VwcG9ydGVkIik7CisJCQkJcmV0dXJu
IEVJTlZBTDsKKwkJCX0KIAkJCXByaXYtPm5wX3FmaXJzdFt0XSA9IChyZWcgPT0gTlJfUkVHX1NX
ID8KIAkJCQlubWFfZ2V0X25yaW5ncyhuYSwgdCkgOiAwKTsKIAkJCXByaXYtPm5wX3FsYXN0W3Rd
ID0gbm1hX2dldF9ucmluZ3MobmEsIHQpICsgMTsKLQkJfQotCQlORCgiJXMgJWQgJWQiLCByZWcg
PT0gTlJfUkVHX1NXID8gIlNXIiA6ICJOSUMrU1ciLAotCQkJcHJpdi0+bnBfcWZpcnN0W05SX1JY
XSwgcHJpdi0+bnBfcWxhc3RbTlJfUlhdKTsKLQkJYnJlYWs7Ci0JY2FzZSBOUl9SRUdfT05FX05J
QzoKLQkJaWYgKGkgPj0gbmEtPm51bV90eF9yaW5ncyAmJiBpID49IG5hLT5udW1fcnhfcmluZ3Mp
IHsKLQkJCUQoImludmFsaWQgcmluZyBpZCAlZCIsIGkpOwotCQkJcmV0dXJuIEVJTlZBTDsKLQkJ
fQotCQlmb3JfcnhfdHgodCkgeworCQkJTkQoIiVzOiAlcyAlZCAlZCIsIHJlZyA9PSBOUl9SRUdf
U1cgPyAiU1ciIDogIk5JQytTVyIsCisJCQkJbm1fdHhyeDJzdHIodCksCisJCQkJcHJpdi0+bnBf
cWZpcnN0W3RdLCBwcml2LT5ucF9xbGFzdFt0XSk7CisJCQlicmVhazsKKwkJY2FzZSBOUl9SRUdf
T05FX05JQzoKKwkJCWlmIChpID49IG5hLT5udW1fdHhfcmluZ3MgJiYgaSA+PSBuYS0+bnVtX3J4
X3JpbmdzKSB7CisJCQkJRCgiaW52YWxpZCByaW5nIGlkICVkIiwgaSk7CisJCQkJcmV0dXJuIEVJ
TlZBTDsKKwkJCX0KIAkJCS8qIGlmIG5vdCBlbm91Z2ggcmluZ3MsIHVzZSB0aGUgZmlyc3Qgb25l
ICovCiAJCQlqID0gaTsKIAkJCWlmIChqID49IG5tYV9nZXRfbnJpbmdzKG5hLCB0KSkKIAkJCQlq
ID0gMDsKIAkJCXByaXYtPm5wX3FmaXJzdFt0XSA9IGo7CiAJCQlwcml2LT5ucF9xbGFzdFt0XSA9
IGogKyAxOworCQkJTkQoIk9ORV9OSUM6ICVzICVkICVkIiwgbm1fdHhyeDJzdHIodCksCisJCQkJ
cHJpdi0+bnBfcWZpcnN0W3RdLCBwcml2LT5ucF9xbGFzdFt0XSk7CisJCQlicmVhazsKKwkJZGVm
YXVsdDoKKwkJCUQoImludmFsaWQgcmVnaWYgdHlwZSAlZCIsIHJlZyk7CisJCQlyZXR1cm4gRUlO
VkFMOwogCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUQoImludmFsaWQgcmVnaWYgdHlwZSAl
ZCIsIHJlZyk7Ci0JCXJldHVybiBFSU5WQUw7CiAJfQogCXByaXYtPm5wX2ZsYWdzID0gKGZsYWdz
ICYgfk5SX1JFR19NQVNLKSB8IHJlZzsKIApAQCAtMTc3NiwxMSArMTgyNCwxMiBAQAogfQogCiAK
LS8qIGNoZWNrIHRoYXQgdGhlIHJpbmdzIHdlIHdhbnQgdG8gYmluZCBhcmUgbm90IGV4Y2x1c2l2
ZWx5IG93bmVkIGJ5IGEgcHJldmlvdXMKLSAqIGJpbmQuICBJZiBleGNsdXNpdmUgb3duZXJzaGlw
IGhhcyBiZWVuIHJlcXVlc3RlZCwgd2UgYWxzbyBtYXJrIHRoZSByaW5ncy4KKy8qIFNldCB0aGUg
bnJfcGVuZGluZ19tb2RlIGZvciB0aGUgcmVxdWVzdGVkIHJpbmdzLgorICogSWYgcmVxdWVzdGVk
LCBhbHNvIHRyeSB0byBnZXQgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgcmluZ3MsIHByb3ZpZGVk
CisgKiB0aGUgcmluZ3Mgd2Ugd2FudCB0byBiaW5kIGFyZSBub3QgZXhjbHVzaXZlbHkgb3duZWQg
YnkgYSBwcmV2aW91cyBiaW5kLgogICovCiBzdGF0aWMgaW50Ci1uZXRtYXBfZ2V0X2V4Y2x1c2l2
ZShzdHJ1Y3QgbmV0bWFwX3ByaXZfZCAqcHJpdikKK25ldG1hcF9rcmluZ3NfZ2V0KHN0cnVjdCBu
ZXRtYXBfcHJpdl9kICpwcml2KQogewogCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEgPSBwcml2
LT5ucF9uYTsKIAl1X2ludCBpOwpAQCAtMTgxMSwxNiArMTg2MCwxNiBAQAogCQl9CiAJfQogCi0J
Lyogc2Vjb25kIHJvdW5kOiBpbmNyZW1lbnQgdXNhZ2UgY291bmQgYW5kIHBvc3NpYmx5Ci0JICog
bWFyayBhcyBleGNsdXNpdmUKKwkvKiBzZWNvbmQgcm91bmQ6IGluY3JlbWVudCB1c2FnZSBjb3Vu
dCAocG9zc2libHkgbWFya2luZyB0aGVtCisJICogYXMgZXhjbHVzaXZlKSBhbmQgc2V0IHRoZSBu
cl9wZW5kaW5nX21vZGUKIAkgKi8KLQogCWZvcl9yeF90eCh0KSB7CiAJCWZvciAoaSA9IHByaXYt
Pm5wX3FmaXJzdFt0XTsgaSA8IHByaXYtPm5wX3FsYXN0W3RdOyBpKyspIHsKIAkJCWtyaW5nID0g
Jk5NUihuYSwgdClbaV07CiAJCQlrcmluZy0+dXNlcnMrKzsKIAkJCWlmIChleGNsKQogCQkJCWty
aW5nLT5ucl9rZmxhZ3MgfD0gTktSX0VYQ0xVU0lWRTsKKwkgICAgICAgICAgICAgICAga3Jpbmct
Pm5yX3BlbmRpbmdfbW9kZSA9IE5LUl9ORVRNQVBfT047CiAJCX0KIAl9CiAKQEAgLTE4MjgsOSAr
MTg3NywxMSBAQAogCiB9CiAKLS8qIHVuZG8gbmV0bWFwX2dldF9vd25lcnNoaXAoKSAqLworLyog
VW5kbyBuZXRtYXBfa3JpbmdzX2dldCgpLiBUaGlzIGlzIGRvbmUgYnkgY2xlYXJpbmcgdGhlIGV4
Y2x1c2l2ZSBtb2RlCisgKiBpZiB3YXMgYXNrZWQgb24gcmVnaWYsIGFuZCB1bnNldCB0aGUgbnJf
cGVuZGluZ19tb2RlIGlmIHdlIGFyZSB0aGUKKyAqIGxhc3QgdXNlcnMgb2YgdGhlIGludm9sdmVk
IHJpbmdzLiAqLwogc3RhdGljIHZvaWQKLW5ldG1hcF9yZWxfZXhjbHVzaXZlKHN0cnVjdCBuZXRt
YXBfcHJpdl9kICpwcml2KQorbmV0bWFwX2tyaW5nc19wdXQoc3RydWN0IG5ldG1hcF9wcml2X2Qg
KnByaXYpCiB7CiAJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSA9IHByaXYtPm5wX25hOwogCXVf
aW50IGk7CkBAIC0xODUyLDYgKzE5MDMsOCBAQAogCQkJaWYgKGV4Y2wpCiAJCQkJa3JpbmctPm5y
X2tmbGFncyAmPSB+TktSX0VYQ0xVU0lWRTsKIAkJCWtyaW5nLT51c2Vycy0tOworCQkJaWYgKGty
aW5nLT51c2VycyA9PSAwKQorCQkJCWtyaW5nLT5ucl9wZW5kaW5nX21vZGUgPSBOS1JfTkVUTUFQ
X09GRjsKIAkJfQogCX0KIH0KQEAgLTE4OTksOSArMTk1Miw4IEBACiAgKiAocHV0IHRoZSBhZGFw
dGVyIGluIG5ldG1hcCBtb2RlKQogICoKICAqIAlUaGlzIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxv
d2luZzoKLSAqIAkoWFhYIHRoZXNlIHNob3VsZCBiZSBlaXRoZXIgYWxsICpfcmVnaXN0ZXIgb3Ig
YWxsICpfcmVnIDIwMTQtMDMtMTUpCiAgKgotICogCSogbmV0bWFwX2h3X3JlZ2lzdGVyCQkJCSho
dyBwb3J0cykKKyAqIAkqIG5ldG1hcF9od19yZWcJCQkJICAgICAgICAoaHcgcG9ydHMpCiAgKiAJ
CWNoZWNrcyB0aGF0IHRoZSBpZnAgaXMgc3RpbGwgdGhlcmUsIHRoZW4gY2FsbHMKICAqIAkJdGhl
IGhhcmR3YXJlIHNwZWNpZmljIGNhbGxiYWNrOwogICoKQEAgLTE5MTksNyArMTk3MSw3IEBACiAg
KgkJaW50ZXJjZXB0IHRoZSBzeW5jIGNhbGxiYWNrcyBvZiB0aGUgbW9uaXRvcmVkCiAgKgkJcmlu
Z3MKICAqCi0gKgkqIG5ldG1hcF9id3JhcF9yZWdpc3RlcgkJCQkoYndyYXBzKQorICoJKiBuZXRt
YXBfYndyYXBfcmVnCQkJCShid3JhcHMpCiAgKgkJY3Jvc3MtbGluayB0aGUgYndyYXAgYW5kIGh3
bmEgcmluZ3MsCiAgKgkJZm9yd2FyZCB0aGUgcmVxdWVzdCB0byB0aGUgaHduYSwgb3ZlcnJpZGUK
ICAqCQl0aGUgaHduYSBub3RpZnkgY2FsbGJhY2sgKHRvIGdldCB0aGUgZnJhbWVzCkBAIC0xOTQ4
LDcgKzIwMDAsNyBAQAogCWlmIChuYS0+YWN0aXZlX2ZkcyA9PSAwKSB7CiAJCS8qCiAJCSAqIElm
IHRoaXMgaXMgdGhlIGZpcnN0IHJlZ2lzdHJhdGlvbiBvZiB0aGUgYWRhcHRlciwKLQkJICogYWxz
byBjcmVhdGUgdGhlIG5ldG1hcCByaW5ncyBhbmQgdGhlaXIgaW4ta2VybmVsIHZpZXcsCisJCSAq
IGNyZWF0ZSB0aGUgIGluLWtlcm5lbCB2aWV3IG9mIHRoZSBuZXRtYXAgcmluZ3MsCiAJCSAqIHRo
ZSBuZXRtYXAga3JpbmdzLgogCQkgKi8KIApAQCAtMTk2MCwzOSArMjAxMiw0OCBAQAogCQlpZiAo
ZXJyb3IpCiAJCQlnb3RvIGVycl9kcm9wX21lbTsKIAotCQkvKiBjcmVhdGUgYWxsIG1pc3Npbmcg
bmV0bWFwIHJpbmdzICovCi0JCWVycm9yID0gbmV0bWFwX21lbV9yaW5nc19jcmVhdGUobmEpOwot
CQlpZiAoZXJyb3IpCi0JCQlnb3RvIGVycl9kZWxfa3JpbmdzOwogCX0KIAotCS8qIG5vdyB0aGUg
a3JpbmcgbXVzdCBleGlzdCBhbmQgd2UgY2FuIGNoZWNrIHdoZXRoZXIgc29tZQotCSAqIHByZXZp
b3VzIGJpbmQgaGFzIGV4Y2x1c2l2ZSBvd25lcnNoaXAgb24gdGhlbQorCS8qIG5vdyB0aGUga3Jp
bmdzIG11c3QgZXhpc3QgYW5kIHdlIGNhbiBjaGVjayB3aGV0aGVyIHNvbWUKKwkgKiBwcmV2aW91
cyBiaW5kIGhhcyBleGNsdXNpdmUgb3duZXJzaGlwIG9uIHRoZW0sIGFuZCBzZXQKKwkgKiBucl9w
ZW5kaW5nX21vZGUKIAkgKi8KLQllcnJvciA9IG5ldG1hcF9nZXRfZXhjbHVzaXZlKHByaXYpOwor
CWVycm9yID0gbmV0bWFwX2tyaW5nc19nZXQocHJpdik7CiAJaWYgKGVycm9yKQotCQlnb3RvIGVy
cl9kZWxfcmluZ3M7CisJCWdvdG8gZXJyX2RlbF9rcmluZ3M7CisKKwkvKiBjcmVhdGUgYWxsIG5l
ZWRlZCBtaXNzaW5nIG5ldG1hcCByaW5ncyAqLworCWVycm9yID0gbmV0bWFwX21lbV9yaW5nc19j
cmVhdGUobmEpOworCWlmIChlcnJvcikKKwkJZ290byBlcnJfcmVsX2V4Y2w7CiAKIAkvKiBpbiBh
bGwgY2FzZXMsIGNyZWF0ZSBhIG5ldyBuZXRtYXAgaWYgKi8KIAluaWZwID0gbmV0bWFwX21lbV9p
Zl9uZXcobmEpOwogCWlmIChuaWZwID09IE5VTEwpIHsKIAkJZXJyb3IgPSBFTk9NRU07Ci0JCWdv
dG8gZXJyX3JlbF9leGNsOworCQlnb3RvIGVycl9kZWxfcmluZ3M7CiAJfQogCi0JbmEtPmFjdGl2
ZV9mZHMrKzsKLQlpZiAoIW5tX25ldG1hcF9vbihuYSkpIHsKLQkJLyogTmV0bWFwIG5vdCBhY3Rp
dmUsIHNldCB0aGUgY2FyZCBpbiBuZXRtYXAgbW9kZQotCQkgKiBhbmQgbWFrZSBpdCB1c2UgdGhl
IHNoYXJlZCBidWZmZXJzLgotCQkgKi8KKwlpZiAobmEtPmFjdGl2ZV9mZHMgPT0gMCkgewogCQkv
KiBjYWNoZSB0aGUgYWxsb2NhdG9yIGluZm8gaW4gdGhlIG5hICovCi0JCW5ldG1hcF9tZW1fZ2V0
X2x1dChuYS0+bm1fbWVtLCAmbmEtPm5hX2x1dCk7Ci0JCU5EKCIlcC0+bmFfbHV0ID09ICVwIiwg
bmEsIG5hLT5uYV9sdXQubHV0KTsKLQkJZXJyb3IgPSBuYS0+bm1fcmVnaXN0ZXIobmEsIDEpOyAv
KiBtb2RlIG9uICovCi0JCWlmIChlcnJvcikgCisJCWVycm9yID0gbmV0bWFwX21lbV9nZXRfbHV0
KG5hLT5ubV9tZW0sICZuYS0+bmFfbHV0KTsKKwkJaWYgKGVycm9yKQogCQkJZ290byBlcnJfZGVs
X2lmOworCQlORCgibHV0ICVwIGJ1ZnMgJXUgc2l6ZSAldSIsIG5hLT5uYV9sdXQubHV0LCBuYS0+
bmFfbHV0Lm9ianRvdGFsLAorCQkJCQkgICAgbmEtPm5hX2x1dC5vYmpzaXplKTsKKwl9CisKKwlp
ZiAobm1fa3JpbmdfcGVuZGluZyhwcml2KSkgeworCQkvKiBTb21lIGtyaW5nIGlzIHN3aXRjaGlu
ZyBtb2RlLCB0ZWxsIHRoZSBhZGFwdGVyIHRvCisJCSAqIHJlYWN0IG9uIHRoaXMuICovCisJCWVy
cm9yID0gbmEtPm5tX3JlZ2lzdGVyKG5hLCAxKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBlcnJf
cHV0X2x1dDsKIAl9CiAKKwkvKiBDb21taXQgdGhlIHJlZmVyZW5jZS4gKi8KKwluYS0+YWN0aXZl
X2ZkcysrOworCiAJLyoKIAkgKiBhZHZlcnRpc2UgdGhhdCB0aGUgaW50ZXJmYWNlIGlzIHJlYWR5
IGJ5IHNldHRpbmcgbnBfbmlmcC4KIAkgKiBUaGUgYmFycmllciBpcyBuZWVkZWQgYmVjYXVzZSBy
ZWFkZXJzIChwb2xsLCAqU1lOQyBhbmQgbW1hcCkKQEAgLTIwMDMsMTUgKzIwNjQsMTUgQEAKIAog
CXJldHVybiAwOwogCitlcnJfcHV0X2x1dDoKKwlpZiAobmEtPmFjdGl2ZV9mZHMgPT0gMCkKKwkJ
bWVtc2V0KCZuYS0+bmFfbHV0LCAwLCBzaXplb2YobmEtPm5hX2x1dCkpOwogZXJyX2RlbF9pZjoK
LQltZW1zZXQoJm5hLT5uYV9sdXQsIDAsIHNpemVvZihuYS0+bmFfbHV0KSk7Ci0JbmEtPmFjdGl2
ZV9mZHMtLTsKIAluZXRtYXBfbWVtX2lmX2RlbGV0ZShuYSwgbmlmcCk7CiBlcnJfcmVsX2V4Y2w6
Ci0JbmV0bWFwX3JlbF9leGNsdXNpdmUocHJpdik7CisJbmV0bWFwX2tyaW5nc19wdXQocHJpdik7
CiBlcnJfZGVsX3JpbmdzOgotCWlmIChuYS0+YWN0aXZlX2ZkcyA9PSAwKQotCQluZXRtYXBfbWVt
X3JpbmdzX2RlbGV0ZShuYSk7CisJbmV0bWFwX21lbV9yaW5nc19kZWxldGUobmEpOwogZXJyX2Rl
bF9rcmluZ3M6CiAJaWYgKG5hLT5hY3RpdmVfZmRzID09IDApCiAJCW5hLT5ubV9rcmluZ3NfZGVs
ZXRlKG5hKTsKQEAgLTIwMjQsNDAgKzIwODUsNDUgQEAKIAogCiAvKgotICogdXBkYXRlIGtyaW5n
IGFuZCByaW5nIGF0IHRoZSBlbmQgb2YgdHhzeW5jLgorICogdXBkYXRlIGtyaW5nIGFuZCByaW5n
IGF0IHRoZSBlbmQgb2YgcnhzeW5jL3R4c3luYy4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCi1u
bV90eHN5bmNfZmluYWxpemUoc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcpCitubV9zeW5jX2Zp
bmFsaXplKHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nKQogewotCS8qIHVwZGF0ZSByaW5nIHRh
aWwgdG8gd2hhdCB0aGUga2VybmVsIGtub3dzICovCisJLyoKKwkgKiBVcGRhdGUgcmluZyB0YWls
IHRvIHdoYXQgdGhlIGtlcm5lbCBrbm93cworCSAqIEFmdGVyIHR4c3luYzogaGVhZC9yaGVhZC9o
d2N1ciBtaWdodCBiZSBiZWhpbmQgY3VyL3JjdXIKKwkgKiBpZiBubyBjYXJyaWVyLgorCSAqLwog
CWtyaW5nLT5yaW5nLT50YWlsID0ga3JpbmctPnJ0YWlsID0ga3JpbmctPm5yX2h3dGFpbDsKIAot
CS8qIG5vdGUsIGhlYWQvcmhlYWQvaHdjdXIgbWlnaHQgYmUgYmVoaW5kIGN1ci9yY3VyCi0JICog
aWYgbm8gY2FycmllcgotCSAqLwogCU5EKDUsICIlcyBub3cgaHdjdXIgJWQgaHd0YWlsICVkIGhl
YWQgJWQgY3VyICVkIHRhaWwgJWQiLAogCQlrcmluZy0+bmFtZSwga3JpbmctPm5yX2h3Y3VyLCBr
cmluZy0+bnJfaHd0YWlsLAogCQlrcmluZy0+cmhlYWQsIGtyaW5nLT5yY3VyLCBrcmluZy0+cnRh
aWwpOwogfQogCi0KLS8qCi0gKiB1cGRhdGUga3JpbmcgYW5kIHJpbmcgYXQgdGhlIGVuZCBvZiBy
eHN5bmMKLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1ubV9yeHN5bmNfZmluYWxpemUoc3RydWN0
IG5ldG1hcF9rcmluZyAqa3JpbmcpCitzdGF0aWMgaW50CitubV9vdmVycmlkZV9tZW0oc3RydWN0
IG5ldG1hcF9hZGFwdGVyICpuYSwgbm1fbWVtaWRfdCBpZCkKIHsKLQkvKiB0ZWxsIHVzZXJzcGFj
ZSB0aGF0IHRoZXJlIG1pZ2h0IGJlIG5ldyBwYWNrZXRzICovCi0JLy9zdHJ1Y3QgbmV0bWFwX3Jp
bmcgKnJpbmcgPSBrcmluZy0+cmluZzsKLQlORCgiaGVhZCAlZCBjdXIgJWQgdGFpbCAlZCAtPiAl
ZCIsIHJpbmctPmhlYWQsIHJpbmctPmN1ciwgcmluZy0+dGFpbCwKLQkJa3JpbmctPm5yX2h3dGFp
bCk7Ci0Ja3JpbmctPnJpbmctPnRhaWwgPSBrcmluZy0+cnRhaWwgPSBrcmluZy0+bnJfaHd0YWls
OwotCS8qIG1ha2UgYSBjb3B5IG9mIHRoZSBzdGF0ZSBmb3IgbmV4dCByb3VuZCAqLwotCWtyaW5n
LT5yaGVhZCA9IGtyaW5nLT5yaW5nLT5oZWFkOwotCWtyaW5nLT5yY3VyID0ga3JpbmctPnJpbmct
PmN1cjsKLX0KKwlzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQ7CisKKwlpZiAoaWQgPT0gMCB8fCBu
ZXRtYXBfbWVtX2dldF9pZChuYS0+bm1fbWVtKSA9PSBpZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAo
bmEtPm5hX2ZsYWdzICYgTkFGX01FTV9PV05FUikKKwkJcmV0dXJuIEVJTlZBTDsKIAorCWlmIChu
YS0+YWN0aXZlX2ZkcyA+IDApCisJCXJldHVybiBFQlVTWTsKIAorCW5tZCA9IG5ldG1hcF9tZW1f
ZmluZChpZCk7CisJaWYgKG5tZCA9PSBOVUxMKQorCQlyZXR1cm4gRU5PRU5UOworCisJbmV0bWFw
X21lbV9wdXQobmEtPm5tX21lbSk7CisJbmEtPm5tX21lbSA9IG5tZDsKKwlyZXR1cm4gMDsKK30K
IAogLyoKICAqIGlvY3RsKDIpIHN1cHBvcnQgZm9yIHRoZSAibmV0bWFwIiBkZXZpY2UuCkBAIC0y
MDcyLDIxICsyMTM4LDE3IEBACiAgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBlcnJubyBvdGhlcndp
c2UuCiAgKi8KIGludAotbmV0bWFwX2lvY3RsKHN0cnVjdCBjZGV2ICpkZXYsIHVfbG9uZyBjbWQs
IGNhZGRyX3QgZGF0YSwKLQlpbnQgZmZsYWcsIHN0cnVjdCB0aHJlYWQgKnRkKQorbmV0bWFwX2lv
Y3RsKHN0cnVjdCBuZXRtYXBfcHJpdl9kICpwcml2LCB1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEs
IHN0cnVjdCB0aHJlYWQgKnRkKQogewotCXN0cnVjdCBuZXRtYXBfcHJpdl9kICpwcml2ID0gTlVM
TDsKIAlzdHJ1Y3Qgbm1yZXEgKm5tciA9IChzdHJ1Y3Qgbm1yZXEgKikgZGF0YTsKIAlzdHJ1Y3Qg
bmV0bWFwX2FkYXB0ZXIgKm5hID0gTlVMTDsKLQlpbnQgZXJyb3I7CisJc3RydWN0IGlmbmV0ICpp
ZnAgPSBOVUxMOworCWludCBlcnJvciA9IDA7CiAJdV9pbnQgaSwgcWZpcnN0LCBxbGFzdDsKIAlz
dHJ1Y3QgbmV0bWFwX2lmICpuaWZwOwogCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nczsKIAll
bnVtIHR4cnggdDsKIAotCSh2b2lkKWRldjsJLyogVU5VU0VEICovCi0JKHZvaWQpZmZsYWc7CS8q
IFVOVVNFRCAqLwotCiAJaWYgKGNtZCA9PSBOSU9DR0lORk8gfHwgY21kID09IE5JT0NSRUdJRikg
ewogCQkvKiB0cnVuY2F0ZSBuYW1lICovCiAJCW5tci0+bnJfbmFtZVtzaXplb2Yobm1yLT5ucl9u
YW1lKSAtIDFdID0gJ1wwJzsKQEAgLTIxMDEsMTUgKzIxNjMsNiBAQAogCQkJcmV0dXJuIEVJTlZB
TDsKIAkJfQogCX0KLQlDVVJWTkVUX1NFVChURF9UT19WTkVUKHRkKSk7Ci0KLQllcnJvciA9IGRl
dmZzX2dldF9jZGV2cHJpdigodm9pZCAqKikmcHJpdik7Ci0JaWYgKGVycm9yKSB7Ci0JCUNVUlZO
RVRfUkVTVE9SRSgpOwotCQkvKiBYWFggRU5PRU5UIHNob3VsZCBiZSBpbXBvc3NpYmxlLCBzaW5j
ZSB0aGUgcHJpdgotCQkgKiBpcyBub3cgY3JlYXRlZCBpbiB0aGUgb3BlbiAqLwotCQlyZXR1cm4g
KGVycm9yID09IEVOT0VOVCA/IEVOWElPIDogZXJyb3IpOwotCX0KIAogCXN3aXRjaCAoY21kKSB7
CiAJY2FzZSBOSU9DR0lORk86CQkvKiByZXR1cm4gY2FwYWJpbGl0aWVzIGV0YyAqLwpAQCAtMjEy
NSwxMyArMjE3OCwyMyBAQAogCQkJdV9pbnQgbWVtZmxhZ3M7CiAKIAkJCWlmIChubXItPm5yX25h
bWVbMF0gIT0gJ1wwJykgeworCiAJCQkJLyogZ2V0IGEgcmVmY291bnQgKi8KLQkJCQllcnJvciA9
IG5ldG1hcF9nZXRfbmEobm1yLCAmbmEsIDEgLyogY3JlYXRlICovKTsKLQkJCQlpZiAoZXJyb3Ip
CisJCQkJZXJyb3IgPSBuZXRtYXBfZ2V0X25hKG5tciwgJm5hLCAmaWZwLCAxIC8qIGNyZWF0ZSAq
Lyk7CisJCQkJaWYgKGVycm9yKSB7CisJCQkJCW5hID0gTlVMTDsKKwkJCQkJaWZwID0gTlVMTDsK
IAkJCQkJYnJlYWs7CisJCQkJfQogCQkJCW5tZCA9IG5hLT5ubV9tZW07IC8qIGdldCBtZW1vcnkg
YWxsb2NhdG9yICovCiAJCQl9CiAKKwkJCWVycm9yID0gbm1fb3ZlcnJpZGVfbWVtKG5hLCBubXIt
Pm5yX2FyZzIpOworCQkJaWYgKGVycm9yKSB7CisJCQkJbmV0bWFwX3VuZ2V0X25hKG5hLCBpZnAp
OworCQkJCWJyZWFrOworCQkJfQorCiAJCQllcnJvciA9IG5ldG1hcF9tZW1fZ2V0X2luZm8obm1k
LCAmbm1yLT5ucl9tZW1zaXplLCAmbWVtZmxhZ3MsCiAJCQkJJm5tci0+bnJfYXJnMik7CiAJCQlp
ZiAoZXJyb3IpCkBAIC0yMTQ1LDIwICsyMjA4LDQ3IEBACiAJCQlubXItPm5yX3R4X3JpbmdzID0g
bmEtPm51bV90eF9yaW5nczsKIAkJCW5tci0+bnJfcnhfc2xvdHMgPSBuYS0+bnVtX3J4X2Rlc2M7
CiAJCQlubXItPm5yX3R4X3Nsb3RzID0gbmEtPm51bV90eF9kZXNjOwotCQkJbmV0bWFwX2FkYXB0
ZXJfcHV0KG5hKTsKIAkJfSB3aGlsZSAoMCk7CisJCW5ldG1hcF91bmdldF9uYShuYSwgaWZwKTsK
IAkJTk1HX1VOTE9DSygpOwogCQlicmVhazsKIAogCWNhc2UgTklPQ1JFR0lGOgotCQkvKiBwb3Nz
aWJseSBhdHRhY2gvZGV0YWNoIE5JQyBhbmQgVkFMRSBzd2l0Y2ggKi8KKwkJLyoKKwkJICogSWYg
bm1yLT5ucl9jbWQgaXMgbm90IHplcm8sIHRoaXMgTklPQ1JFR0lGIGlzIG5vdCByZWFsbHkKKwkJ
ICogYSByZWdpZiBvcGVyYXRpb24sIGJ1dCBhIGRpZmZlcmVudCBvbmUsIHNwZWNpZmllZCBieSB0
aGUKKwkJICogdmFsdWUgb2Ygbm1yLT5ucl9jbWQuCisJCSAqLwogCQlpID0gbm1yLT5ucl9jbWQ7
CiAJCWlmIChpID09IE5FVE1BUF9CREdfQVRUQUNIIHx8IGkgPT0gTkVUTUFQX0JER19ERVRBQ0gK
IAkJCQl8fCBpID09IE5FVE1BUF9CREdfVk5FVF9IRFIKIAkJCQl8fCBpID09IE5FVE1BUF9CREdf
TkVXSUYKLQkJCQl8fCBpID09IE5FVE1BUF9CREdfREVMSUYpIHsKKwkJCQl8fCBpID09IE5FVE1B
UF9CREdfREVMSUYKKwkJCQl8fCBpID09IE5FVE1BUF9CREdfUE9MTElOR19PTgorCQkJCXx8IGkg
PT0gTkVUTUFQX0JER19QT0xMSU5HX09GRikgeworCQkJLyogcG9zc2libHkgYXR0YWNoL2RldGFj
aCBOSUMgYW5kIFZBTEUgc3dpdGNoICovCiAJCQllcnJvciA9IG5ldG1hcF9iZGdfY3RsKG5tciwg
TlVMTCk7CiAJCQlicmVhazsKKwkJfSBlbHNlIGlmIChpID09IE5FVE1BUF9QVF9IT1NUX0NSRUFU
RSB8fCBpID09IE5FVE1BUF9QVF9IT1NUX0RFTEVURSkgeworCQkJLyogZm9yd2FyZCB0aGUgY29t
bWFuZCB0byB0aGUgcHRuZXRtYXAgc3Vic3lzdGVtICovCisJCQllcnJvciA9IHB0bmV0bWFwX2N0
bChubXIsIHByaXYtPm5wX25hKTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGkgPT0gTkVUTUFQ
X1ZORVRfSERSX0dFVCkgeworCQkJLyogZ2V0IHZuZXQtaGVhZGVyIGxlbmd0aCBmb3IgdGhpcyBu
ZXRtYXAgcG9ydCAqLworCQkJc3RydWN0IGlmbmV0ICppZnA7CisKKwkJCU5NR19MT0NLKCk7CisJ
CQllcnJvciA9IG5ldG1hcF9nZXRfbmEobm1yLCAmbmEsICZpZnAsIDApOworCQkJaWYgKG5hICYm
ICFlcnJvcikgeworCQkJCW5tci0+bnJfYXJnMSA9IG5hLT52aXJ0X2hkcl9sZW47CisJCQl9CisJ
CQluZXRtYXBfdW5nZXRfbmEobmEsIGlmcCk7CisJCQlOTUdfVU5MT0NLKCk7CisJCQlicmVhazsK
KwkJfSBlbHNlIGlmIChpID09IE5FVE1BUF9QT09MU19JTkZPX0dFVCkgeworCQkJLyogZ2V0IGlu
Zm9ybWF0aW9uIGZyb20gdGhlIG1lbW9yeSBhbGxvY2F0b3IgKi8KKwkJCWVycm9yID0gbmV0bWFw
X21lbV9wb29sc19pbmZvX2dldChubXIsIHByaXYtPm5wX25hKTsKKwkJCWJyZWFrOwogCQl9IGVs
c2UgaWYgKGkgIT0gMCkgewogCQkJRCgibnJfY21kIG11c3QgYmUgMCBub3QgJWQiLCBpKTsKIAkJ
CWVycm9yID0gRUlOVkFMOwpAQCAtMjE2OSwyMyArMjI1OSwzOCBAQAogCQlOTUdfTE9DSygpOwog
CQlkbyB7CiAJCQl1X2ludCBtZW1mbGFnczsKKwkJCXN0cnVjdCBpZm5ldCAqaWZwOwogCiAJCQlp
ZiAocHJpdi0+bnBfbmlmcCAhPSBOVUxMKSB7CS8qIHRocmVhZCBhbHJlYWR5IHJlZ2lzdGVyZWQg
Ki8KIAkJCQllcnJvciA9IEVCVVNZOwogCQkJCWJyZWFrOwogCQkJfQogCQkJLyogZmluZCB0aGUg
aW50ZXJmYWNlIGFuZCBhIHJlZmVyZW5jZSAqLwotCQkJZXJyb3IgPSBuZXRtYXBfZ2V0X25hKG5t
ciwgJm5hLCAxIC8qIGNyZWF0ZSAqLyk7IC8qIGtlZXAgcmVmZXJlbmNlICovCisJCQllcnJvciA9
IG5ldG1hcF9nZXRfbmEobm1yLCAmbmEsICZpZnAsCisJCQkJCSAgICAgIDEgLyogY3JlYXRlICov
KTsgLyoga2VlcCByZWZlcmVuY2UgKi8KIAkJCWlmIChlcnJvcikKIAkJCQlicmVhazsKIAkJCWlm
IChORVRNQVBfT1dORURfQllfS0VSTihuYSkpIHsKLQkJCQluZXRtYXBfYWRhcHRlcl9wdXQobmEp
OworCQkJCW5ldG1hcF91bmdldF9uYShuYSwgaWZwKTsKIAkJCQllcnJvciA9IEVCVVNZOwogCQkJ
CWJyZWFrOwogCQkJfQorCisJCQlpZiAobmEtPnZpcnRfaGRyX2xlbiAmJiAhKG5tci0+bnJfZmxh
Z3MgJiBOUl9BQ0NFUFRfVk5FVF9IRFIpKSB7CisJCQkJbmV0bWFwX3VuZ2V0X25hKG5hLCBpZnAp
OworCQkJCWVycm9yID0gRUlPOworCQkJCWJyZWFrOworCQkJfQorCisJCQllcnJvciA9IG5tX292
ZXJyaWRlX21lbShuYSwgbm1yLT5ucl9hcmcyKTsKKwkJCWlmIChlcnJvcikgeworCQkJCW5ldG1h
cF91bmdldF9uYShuYSwgaWZwKTsKKwkJCQlicmVhazsKKwkJCX0KKwogCQkJZXJyb3IgPSBuZXRt
YXBfZG9fcmVnaWYocHJpdiwgbmEsIG5tci0+bnJfcmluZ2lkLCBubXItPm5yX2ZsYWdzKTsKIAkJ
CWlmIChlcnJvcikgeyAgICAvKiByZWcuIGZhaWxlZCwgcmVsZWFzZSBwcml2IGFuZCByZWYgKi8K
LQkJCQluZXRtYXBfYWRhcHRlcl9wdXQobmEpOworCQkJCW5ldG1hcF91bmdldF9uYShuYSwgaWZw
KTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCW5pZnAgPSBwcml2LT5ucF9uaWZwOwpAQCAtMjIwMCw3
ICsyMzA1LDcgQEAKIAkJCQkmbm1yLT5ucl9hcmcyKTsKIAkJCWlmIChlcnJvcikgewogCQkJCW5l
dG1hcF9kb191bnJlZ2lmKHByaXYpOwotCQkJCW5ldG1hcF9hZGFwdGVyX3B1dChuYSk7CisJCQkJ
bmV0bWFwX3VuZ2V0X25hKG5hLCBpZnApOwogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKG1lbWZs
YWdzICYgTkVUTUFQX01FTV9QUklWQVRFKSB7CkBAIC0yMjEyLDEyICsyMzE3LDE3IEBACiAJCQl9
CiAKIAkJCWlmIChubXItPm5yX2FyZzMpIHsKLQkJCQlEKCJyZXF1ZXN0ZWQgJWQgZXh0cmEgYnVm
ZmVycyIsIG5tci0+bnJfYXJnMyk7CisJCQkJaWYgKG5ldG1hcF92ZXJib3NlKQorCQkJCQlEKCJy
ZXF1ZXN0ZWQgJWQgZXh0cmEgYnVmZmVycyIsIG5tci0+bnJfYXJnMyk7CiAJCQkJbm1yLT5ucl9h
cmczID0gbmV0bWFwX2V4dHJhX2FsbG9jKG5hLAogCQkJCQkmbmlmcC0+bmlfYnVmc19oZWFkLCBu
bXItPm5yX2FyZzMpOwotCQkJCUQoImdvdCAlZCBleHRyYSBidWZmZXJzIiwgbm1yLT5ucl9hcmcz
KTsKKwkJCQlpZiAobmV0bWFwX3ZlcmJvc2UpCisJCQkJCUQoImdvdCAlZCBleHRyYSBidWZmZXJz
Iiwgbm1yLT5ucl9hcmczKTsKIAkJCX0KIAkJCW5tci0+bnJfb2Zmc2V0ID0gbmV0bWFwX21lbV9p
Zl9vZmZzZXQobmEtPm5tX21lbSwgbmlmcCk7CisKKwkJCS8qIHN0b3JlIGlmcCByZWZlcmVuY2Ug
c28gdGhhdCBwcml2IGRlc3RydWN0b3IgbWF5IHJlbGVhc2UgaXQgKi8KKwkJCXByaXYtPm5wX2lm
cCA9IGlmcDsKIAkJfSB3aGlsZSAoMCk7CiAJCU5NR19VTkxPQ0soKTsKIAkJYnJlYWs7CkBAIC0y
MjQwLDExICsyMzUwLDYgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKCFubV9uZXRtYXBfb24o
bmEpKSB7Ci0JCQllcnJvciA9IEVOWElPOwotCQkJYnJlYWs7Ci0JCX0KLQogCQl0ID0gKGNtZCA9
PSBOSU9DVFhTWU5DID8gTlJfVFggOiBOUl9SWCk7CiAJCWtyaW5ncyA9IE5NUihuYSwgdCk7CiAJ
CXFmaXJzdCA9IHByaXYtPm5wX3FmaXJzdFt0XTsKQEAgLTIyNTIsMzEgKzIzNTcsMzQgQEAKIAog
CQlmb3IgKGkgPSBxZmlyc3Q7IGkgPCBxbGFzdDsgaSsrKSB7CiAJCQlzdHJ1Y3QgbmV0bWFwX2ty
aW5nICprcmluZyA9IGtyaW5ncyArIGk7Ci0JCQlpZiAobm1fa3JfdHJ5Z2V0KGtyaW5nKSkgewot
CQkJCWVycm9yID0gRUJVU1k7Ci0JCQkJZ290byBvdXQ7CisJCQlzdHJ1Y3QgbmV0bWFwX3Jpbmcg
KnJpbmcgPSBrcmluZy0+cmluZzsKKworCQkJaWYgKHVubGlrZWx5KG5tX2tyX3RyeWdldChrcmlu
ZywgMSwgJmVycm9yKSkpIHsKKwkJCQllcnJvciA9IChlcnJvciA/IEVJTyA6IDApOworCQkJCWNv
bnRpbnVlOwogCQkJfQorCiAJCQlpZiAoY21kID09IE5JT0NUWFNZTkMpIHsKIAkJCQlpZiAobmV0
bWFwX3ZlcmJvc2UgJiBOTV9WRVJCX1RYU1lOQykKIAkJCQkJRCgicHJlIHR4c3luYyByaW5nICVk
IGN1ciAlZCBod2N1ciAlZCIsCi0JCQkJCSAgICBpLCBrcmluZy0+cmluZy0+Y3VyLAorCQkJCQkg
ICAgaSwgcmluZy0+Y3VyLAogCQkJCQkgICAga3JpbmctPm5yX2h3Y3VyKTsKLQkJCQlpZiAobm1f
dHhzeW5jX3Byb2xvZ3VlKGtyaW5nKSA+PSBrcmluZy0+bmtyX251bV9zbG90cykgeworCQkJCWlm
IChubV90eHN5bmNfcHJvbG9ndWUoa3JpbmcsIHJpbmcpID49IGtyaW5nLT5ua3JfbnVtX3Nsb3Rz
KSB7CiAJCQkJCW5ldG1hcF9yaW5nX3JlaW5pdChrcmluZyk7CiAJCQkJfSBlbHNlIGlmIChrcmlu
Zy0+bm1fc3luYyhrcmluZywgTkFGX0ZPUkNFX1JFQ0xBSU0pID09IDApIHsKLQkJCQkJbm1fdHhz
eW5jX2ZpbmFsaXplKGtyaW5nKTsKKwkJCQkJbm1fc3luY19maW5hbGl6ZShrcmluZyk7CiAJCQkJ
fQogCQkJCWlmIChuZXRtYXBfdmVyYm9zZSAmIE5NX1ZFUkJfVFhTWU5DKQogCQkJCQlEKCJwb3N0
IHR4c3luYyByaW5nICVkIGN1ciAlZCBod2N1ciAlZCIsCi0JCQkJCSAgICBpLCBrcmluZy0+cmlu
Zy0+Y3VyLAorCQkJCQkgICAgaSwgcmluZy0+Y3VyLAogCQkJCQkgICAga3JpbmctPm5yX2h3Y3Vy
KTsKIAkJCX0gZWxzZSB7Ci0JCQkJaWYgKG5tX3J4c3luY19wcm9sb2d1ZShrcmluZykgPj0ga3Jp
bmctPm5rcl9udW1fc2xvdHMpIHsKKwkJCQlpZiAobm1fcnhzeW5jX3Byb2xvZ3VlKGtyaW5nLCBy
aW5nKSA+PSBrcmluZy0+bmtyX251bV9zbG90cykgewogCQkJCQluZXRtYXBfcmluZ19yZWluaXQo
a3JpbmcpOwogCQkJCX0gZWxzZSBpZiAoa3JpbmctPm5tX3N5bmMoa3JpbmcsIE5BRl9GT1JDRV9S
RUFEKSA9PSAwKSB7Ci0JCQkJCW5tX3J4c3luY19maW5hbGl6ZShrcmluZyk7CisJCQkJCW5tX3N5
bmNfZmluYWxpemUoa3JpbmcpOwogCQkJCX0KLQkJCQltaWNyb3RpbWUoJm5hLT5yeF9yaW5nc1tp
XS5yaW5nLT50cyk7CisJCQkJbWljcm90aW1lKCZyaW5nLT50cyk7CiAJCQl9CiAJCQlubV9rcl9w
dXQoa3JpbmcpOwogCQl9CkBAIC0yMzIzLDkgKzI0MzEsNyBAQAogCQllcnJvciA9IEVPUE5PVFNV
UFA7CiAjZW5kaWYgLyogbGludXggKi8KIAl9Ci1vdXQ6CiAKLQlDVVJWTkVUX1JFU1RPUkUoKTsK
IAlyZXR1cm4gKGVycm9yKTsKIH0KIApAQCAtMjM0NSwxNyArMjQ1MSwxNSBAQAogICogaGlkZGVu
IGFyZ3VtZW50LgogICovCiBpbnQKLW5ldG1hcF9wb2xsKHN0cnVjdCBjZGV2ICpkZXYsIGludCBl
dmVudHMsIHN0cnVjdCB0aHJlYWQgKnRkKQorbmV0bWFwX3BvbGwoc3RydWN0IG5ldG1hcF9wcml2
X2QgKnByaXYsIGludCBldmVudHMsIE5NX1NFTFJFQ09SRF9UICpzcikKIHsKLQlzdHJ1Y3QgbmV0
bWFwX3ByaXZfZCAqcHJpdiA9IE5VTEw7CiAJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYTsKIAlz
dHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZzsKKwlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJpbmc7CiAJ
dV9pbnQgaSwgY2hlY2tfYWxsX3R4LCBjaGVja19hbGxfcngsIHdhbnRbTlJfVFhSWF0sIHJldmVu
dHMgPSAwOwogI2RlZmluZSB3YW50X3R4IHdhbnRbTlJfVFhdCiAjZGVmaW5lIHdhbnRfcnggd2Fu
dFtOUl9SWF0KIAlzdHJ1Y3QgbWJxIHE7CQkvKiBwYWNrZXRzIGZyb20gaHcgcXVldWVzIHRvIGhv
c3Qgc3RhY2sgKi8KLQl2b2lkICpwd2FpdCA9IGRldjsJLyogbGludXggY29tcGF0aWJpbGl0eSAq
LwotCWludCBpc19rZXZlbnQgPSAwOwogCWVudW0gdHhyeCB0OwogCiAJLyoKQEAgLTIzNjUsMjMg
KzI0NjksMTMgQEAKIAkgKi8KIAlpbnQgcmV0cnlfdHggPSAxLCByZXRyeV9yeCA9IDE7CiAKLQko
dm9pZClwd2FpdDsKLQltYnFfaW5pdCgmcSk7Ci0KLQkvKgotCSAqIFhYWCBrZXZlbnQgaGFzIGN1
cnRocmVhZC0+dHBfZm9wID09IE5VTEwsCi0JICogc28gZGV2ZnNfZ2V0X2NkZXZwcml2KCkgZmFp
bHMuIFdlIGNpcmN1bXZlbnQgdGhpcyBieSBwYXNzaW5nCi0JICogcHJpdiBhcyB0aGUgZmlyc3Qg
YXJndW1lbnQsIHdoaWNoIGlzIGFsc28gdXNlZnVsIHRvIGF2b2lkCi0JICogdGhlIHNlbHJlY29y
ZCgpIHdoaWNoIGFyZSBub3QgbmVjZXNzYXJ5IGluIHRoYXQgY2FzZS4KKwkvKiB0cmFuc3BhcmVu
dCBtb2RlOiBzZW5kX2Rvd24gaXMgMSBpZiB3ZSBoYXZlIGZvdW5kIHNvbWUKKwkgKiBwYWNrZXRz
IHRvIGZvcndhcmQgZHVyaW5nIHRoZSByeCBzY2FuIGFuZCB3ZSBoYXZlIG5vdAorCSAqIHNlbnQg
dGhlbSBkb3duIHRvIHRoZSBuaWMgeWV0CiAJICovCi0JaWYgKGRldmZzX2dldF9jZGV2cHJpdigo
dm9pZCAqKikmcHJpdikgIT0gMCkgewotCQlpc19rZXZlbnQgPSAxOwotCQlpZiAobmV0bWFwX3Zl
cmJvc2UpCi0JCQlEKCJjYWxsZWQgZnJvbSBrZXZlbnQiKTsKLQkJcHJpdiA9IChzdHJ1Y3QgbmV0
bWFwX3ByaXZfZCAqKWRldjsKLQl9Ci0JaWYgKHByaXYgPT0gTlVMTCkKLQkJcmV0dXJuIFBPTExF
UlI7CisJaW50IHNlbmRfZG93biA9IDA7CisKKwltYnFfaW5pdCgmcSk7CiAKIAlpZiAocHJpdi0+
bnBfbmlmcCA9PSBOVUxMKSB7CiAJCUQoIk5vIGlmIHJlZ2lzdGVyZWQiKTsKQEAgLTIzOTksNyAr
MjQ5Myw2IEBACiAJd2FudF90eCA9IGV2ZW50cyAmIChQT0xMT1VUIHwgUE9MTFdSTk9STSk7CiAJ
d2FudF9yeCA9IGV2ZW50cyAmIChQT0xMSU4gfCBQT0xMUkROT1JNKTsKIAotCiAJLyoKIAkgKiBj
aGVja19hbGxfe3R4fHJ4fSBhcmUgc2V0IGlmIHRoZSBjYXJkIGhhcyBtb3JlIHRoYW4gb25lIHF1
ZXVlIEFORAogCSAqIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgYm91bmQgdG8gYWxsIG9mIHRoZW0u
IElmIHNvLCB3ZSBzbGVlcCBvbgpAQCAtMjQyMSw2ICsyNTE0LDMyIEBACiAJICogc2xvdHMgYXZh
aWxhYmxlLiBJZiB0aGlzIGZhaWxzLCB0aGVuIGxvY2sgYW5kIGNhbGwgdGhlIHN5bmMKIAkgKiBy
b3V0aW5lcy4KIAkgKi8KKyNpZiAxIC8qIG5ldyBjb2RlLSBjYWxsIHJ4IGlmIGFueSBvZiB0aGUg
cmluZyBuZWVkcyB0byByZWxlYXNlIG9yIHJlYWQgYnVmZmVycyAqLworCWlmICh3YW50X3R4KSB7
CisJCXQgPSBOUl9UWDsKKwkJZm9yIChpID0gcHJpdi0+bnBfcWZpcnN0W3RdOyB3YW50W3RdICYm
IGkgPCBwcml2LT5ucF9xbGFzdFt0XTsgaSsrKSB7CisJCQlrcmluZyA9ICZOTVIobmEsIHQpW2ld
OworCQkJLyogWFhYIGNvbXBhcmUgcmluZy0+Y3VyIGFuZCBrcmluZy0+dGFpbCAqLworCQkJaWYg
KCFubV9yaW5nX2VtcHR5KGtyaW5nLT5yaW5nKSkgeworCQkJCXJldmVudHMgfD0gd2FudFt0XTsK
KwkJCQl3YW50W3RdID0gMDsJLyogYWxzbyBicmVha3MgdGhlIGxvb3AgKi8KKwkJCX0KKwkJfQor
CX0KKwlpZiAod2FudF9yeCkgeworCQl3YW50X3J4ID0gMDsgLyogbG9vayBmb3IgYSByZWFzb24g
dG8gcnVuIHRoZSBoYW5kbGVycyAqLworCQl0ID0gTlJfUlg7CisJCWZvciAoaSA9IHByaXYtPm5w
X3FmaXJzdFt0XTsgaSA8IHByaXYtPm5wX3FsYXN0W3RdOyBpKyspIHsKKwkJCWtyaW5nID0gJk5N
UihuYSwgdClbaV07CisJCQlpZiAoa3JpbmctPnJpbmctPmN1ciA9PSBrcmluZy0+cmluZy0+dGFp
bCAvKiB0cnkgZmV0Y2ggbmV3IGJ1ZmZlcnMgKi8KKwkJCSAgICB8fCBrcmluZy0+cmhlYWQgIT0g
a3JpbmctPnJpbmctPmhlYWQgLyogcmVsZWFzZSBidWZmZXJzICovKSB7CisJCQkJd2FudF9yeCA9
IDE7CisJCQl9CisJCX0KKwkJaWYgKCF3YW50X3J4KQorCQkJcmV2ZW50cyB8PSBldmVudHMgJiAo
UE9MTElOIHwgUE9MTFJETk9STSk7IC8qIHdlIGhhdmUgZGF0YSAqLworCX0KKyNlbHNlIC8qIG9s
ZCBjb2RlICovCiAJZm9yX3J4X3R4KHQpIHsKIAkJZm9yIChpID0gcHJpdi0+bnBfcWZpcnN0W3Rd
OyB3YW50W3RdICYmIGkgPCBwcml2LT5ucF9xbGFzdFt0XTsgaSsrKSB7CiAJCQlrcmluZyA9ICZO
TVIobmEsIHQpW2ldOwpAQCAtMjQzMSw2ICsyNTUwLDcgQEAKIAkJCX0KIAkJfQogCX0KKyNlbmRp
ZiAvKiBvbGQgY29kZSAqLwogCiAJLyoKIAkgKiBJZiB3ZSB3YW50IHRvIHB1c2ggcGFja2V0cyBv
dXQgKHByaXYtPm5wX3R4cG9sbCkgb3IKQEAgLTI0NDcsMzIgKzI1NjcsMjYgQEAKIAkJICogdXNl
ZCB0byBza2lwIHJpbmdzIHdpdGggbm8gcGVuZGluZyB0cmFuc21pc3Npb25zLgogCQkgKi8KIGZs
dXNoX3R4OgotCQlmb3IgKGkgPSBwcml2LT5ucF9xZmlyc3RbTlJfVFhdOyBpIDwgcHJpdi0+bnBf
cWxhc3RbTlJfUlhdOyBpKyspIHsKKwkJZm9yIChpID0gcHJpdi0+bnBfcWZpcnN0W05SX1RYXTsg
aSA8IHByaXYtPm5wX3FsYXN0W05SX1RYXTsgaSsrKSB7CiAJCQlpbnQgZm91bmQgPSAwOwogCiAJ
CQlrcmluZyA9ICZuYS0+dHhfcmluZ3NbaV07Ci0JCQlpZiAoIXdhbnRfdHggJiYga3JpbmctPnJp
bmctPmN1ciA9PSBrcmluZy0+bnJfaHdjdXIpCisJCQlyaW5nID0ga3JpbmctPnJpbmc7CisKKwkJ
CWlmICghc2VuZF9kb3duICYmICF3YW50X3R4ICYmIHJpbmctPmN1ciA9PSBrcmluZy0+bnJfaHdj
dXIpCiAJCQkJY29udGludWU7Ci0JCQkvKiBvbmx5IG9uZSB0aHJlYWQgZG9lcyB0eHN5bmMgKi8K
LQkJCWlmIChubV9rcl90cnlnZXQoa3JpbmcpKSB7Ci0JCQkJLyogZWl0aGVyIGJ1c3kgb3Igc3Rv
cHBlZAotCQkJCSAqIFhYWCBpZiB0aGUgcmluZyBpcyBzdG9wcGVkLCBzbGVlcGluZyB3b3VsZAot
CQkJCSAqIGJlIGJldHRlci4gSW4gY3VycmVudCBjb2RlLCBob3dldmVyLCB3ZSBvbmx5Ci0JCQkJ
ICogc3RvcCB0aGUgcmluZ3MgZm9yIGJyaWVmIGludGVydmFscyAoMjAxNC0wMy0xNCkKLQkJCQkg
Ki8KLQkJCQlpZiAobmV0bWFwX3ZlcmJvc2UpCi0JCQkJCVJEKDIsICIlcCBsb3N0IHJhY2Ugb24g
dHhyaW5nICVkLCBvayIsCi0JCQkJCSAgICBwcml2LCBpKTsKKworCQkJaWYgKG5tX2tyX3RyeWdl
dChrcmluZywgMSwgJnJldmVudHMpKQogCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKG5tX3R4
c3luY19wcm9sb2d1ZShrcmluZykgPj0ga3JpbmctPm5rcl9udW1fc2xvdHMpIHsKKworCQkJaWYg
KG5tX3R4c3luY19wcm9sb2d1ZShrcmluZywgcmluZykgPj0ga3JpbmctPm5rcl9udW1fc2xvdHMp
IHsKIAkJCQluZXRtYXBfcmluZ19yZWluaXQoa3JpbmcpOwogCQkJCXJldmVudHMgfD0gUE9MTEVS
UjsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGtyaW5nLT5ubV9zeW5jKGtyaW5nLCAwKSkKIAkJCQkJ
cmV2ZW50cyB8PSBQT0xMRVJSOwogCQkJCWVsc2UKLQkJCQkJbm1fdHhzeW5jX2ZpbmFsaXplKGty
aW5nKTsKKwkJCQkJbm1fc3luY19maW5hbGl6ZShrcmluZyk7CiAJCQl9CiAKIAkJCS8qCkBAIC0y
NDg5LDggKzI2MDMsMTAgQEAKIAkJCQlrcmluZy0+bm1fbm90aWZ5KGtyaW5nLCAwKTsKIAkJCX0K
IAkJfQotCQlpZiAod2FudF90eCAmJiByZXRyeV90eCAmJiAhaXNfa2V2ZW50KSB7Ci0JCQlPU19z
ZWxyZWNvcmQodGQsIGNoZWNrX2FsbF90eCA/CisJCS8qIGlmIHRoZXJlIHdlcmUgYW55IHBhY2tl
dCB0byBmb3J3YXJkIHdlIG11c3QgaGF2ZSBoYW5kbGVkIHRoZW0gYnkgbm93ICovCisJCXNlbmRf
ZG93biA9IDA7CisJCWlmICh3YW50X3R4ICYmIHJldHJ5X3R4ICYmIHNyKSB7CisJCQlubV9vc19z
ZWxyZWNvcmQoc3IsIGNoZWNrX2FsbF90eCA/CiAJCQkgICAgJm5hLT5zaVtOUl9UWF0gOiAmbmEt
PnR4X3JpbmdzW3ByaXYtPm5wX3FmaXJzdFtOUl9UWF1dLnNpKTsKIAkJCXJldHJ5X3R4ID0gMDsK
IAkJCWdvdG8gZmx1c2hfdHg7CkBAIC0yNTAyLDIyICsyNjE4LDE4IEBACiAJICogRG8gaXQgb24g
YWxsIHJpbmdzIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHN0YXJ2ZS4KIAkgKi8KIAlpZiAod2FudF9y
eCkgewotCQlpbnQgc2VuZF9kb3duID0gMDsgLyogdHJhbnNwYXJlbnQgbW9kZSAqLwogCQkvKiB0
d28gcm91bmRzIGhlcmUgZm9yIHJhY2UgYXZvaWRhbmNlICovCiBkb19yZXRyeV9yeDoKIAkJZm9y
IChpID0gcHJpdi0+bnBfcWZpcnN0W05SX1JYXTsgaSA8IHByaXYtPm5wX3FsYXN0W05SX1JYXTsg
aSsrKSB7CiAJCQlpbnQgZm91bmQgPSAwOwogCiAJCQlrcmluZyA9ICZuYS0+cnhfcmluZ3NbaV07
CisJCQlyaW5nID0ga3JpbmctPnJpbmc7CiAKLQkJCWlmIChubV9rcl90cnlnZXQoa3JpbmcpKSB7
Ci0JCQkJaWYgKG5ldG1hcF92ZXJib3NlKQotCQkJCQlSRCgyLCAiJXAgbG9zdCByYWNlIG9uIHJ4
cmluZyAlZCwgb2siLAotCQkJCQkgICAgcHJpdiwgaSk7CisJCQlpZiAodW5saWtlbHkobm1fa3Jf
dHJ5Z2V0KGtyaW5nLCAxLCAmcmV2ZW50cykpKQogCQkJCWNvbnRpbnVlOwotCQkJfQogCi0JCQlp
ZiAobm1fcnhzeW5jX3Byb2xvZ3VlKGtyaW5nKSA+PSBrcmluZy0+bmtyX251bV9zbG90cykgewor
CQkJaWYgKG5tX3J4c3luY19wcm9sb2d1ZShrcmluZywgcmluZykgPj0ga3JpbmctPm5rcl9udW1f
c2xvdHMpIHsKIAkJCQluZXRtYXBfcmluZ19yZWluaXQoa3JpbmcpOwogCQkJCXJldmVudHMgfD0g
UE9MTEVSUjsKIAkJCX0KQEAgLTI1MjYsMjIgKzI2MzgsMjIgQEAKIAkJCS8qCiAJCQkgKiB0cmFu
c3BhcmVudCBtb2RlIHN1cHBvcnQ6IGNvbGxlY3QgcGFja2V0cwogCQkJICogZnJvbSB0aGUgcnhy
aW5nKHMpLgotCQkJICogWFhYIE5SX0ZPUldBUkQgc2hvdWxkIG9ubHkgYmUgcmVhZCBvbgotCQkJ
ICogcGh5c2ljYWwgb3IgTklDIHBvcnRzCiAJCQkgKi8KLQkJCWlmIChuZXRtYXBfZndkIHx8a3Jp
bmctPnJpbmctPmZsYWdzICYgTlJfRk9SV0FSRCkgeworCQkJaWYgKG5tX21heV9mb3J3YXJkX3Vw
KGtyaW5nKSkgewogCQkJCU5EKDEwLCAiZm9yd2FyZGluZyBzb21lIGJ1ZmZlcnMgdXAgJWQgdG8g
JWQiLAotCQkJCSAgICBrcmluZy0+bnJfaHdjdXIsIGtyaW5nLT5yaW5nLT5jdXIpOworCQkJCSAg
ICBrcmluZy0+bnJfaHdjdXIsIHJpbmctPmN1cik7CiAJCQkJbmV0bWFwX2dyYWJfcGFja2V0cyhr
cmluZywgJnEsIG5ldG1hcF9md2QpOwogCQkJfQogCisJCQlrcmluZy0+bnJfa2ZsYWdzICY9IH5O
Ul9GT1JXQVJEOwogCQkJaWYgKGtyaW5nLT5ubV9zeW5jKGtyaW5nLCAwKSkKIAkJCQlyZXZlbnRz
IHw9IFBPTExFUlI7CiAJCQllbHNlCi0JCQkJbm1fcnhzeW5jX2ZpbmFsaXplKGtyaW5nKTsKKwkJ
CQlubV9zeW5jX2ZpbmFsaXplKGtyaW5nKTsKKwkJCXNlbmRfZG93biB8PSAoa3JpbmctPm5yX2tm
bGFncyAmIE5SX0ZPUldBUkQpOyAvKiBob3N0IHJpbmcgb25seSAqLwogCQkJaWYgKG5ldG1hcF9u
b190aW1lc3RhbXAgPT0gMCB8fAotCQkJCQlrcmluZy0+cmluZy0+ZmxhZ3MgJiBOUl9USU1FU1RB
TVApIHsKLQkJCQltaWNyb3RpbWUoJmtyaW5nLT5yaW5nLT50cyk7CisJCQkJCXJpbmctPmZsYWdz
ICYgTlJfVElNRVNUQU1QKSB7CisJCQkJbWljcm90aW1lKCZyaW5nLT50cyk7CiAJCQl9CiAJCQlm
b3VuZCA9IGtyaW5nLT5yY3VyICE9IGtyaW5nLT5ydGFpbDsKIAkJCW5tX2tyX3B1dChrcmluZyk7
CkBAIC0yNTUyLDIyICsyNjY0LDEwIEBACiAJCQl9CiAJCX0KIAotCQkvKiB0cmFuc3BhcmVudCBt
b2RlIFhYWCBvbmx5IGR1cmluZyBmaXJzdCBwYXNzID8gKi8KLQkJaWYgKG5hLT5uYV9mbGFncyAm
IE5BRl9IT1NUX1JJTkdTKSB7Ci0JCQlrcmluZyA9ICZuYS0+cnhfcmluZ3NbbmEtPm51bV9yeF9y
aW5nc107Ci0JCQlpZiAoY2hlY2tfYWxsX3J4Ci0JCQkgICAgJiYgKG5ldG1hcF9md2QgfHwga3Jp
bmctPnJpbmctPmZsYWdzICYgTlJfRk9SV0FSRCkpIHsKLQkJCQkvKiBYWFggZml4IHRvIHVzZSBr
cmluZyBmaWVsZHMgKi8KLQkJCQlpZiAobm1fcmluZ19lbXB0eShrcmluZy0+cmluZykpCi0JCQkJ
CXNlbmRfZG93biA9IG5ldG1hcF9yeHN5bmNfZnJvbV9ob3N0KG5hLCB0ZCwgZGV2KTsKLQkJCQlp
ZiAoIW5tX3JpbmdfZW1wdHkoa3JpbmctPnJpbmcpKQotCQkJCQlyZXZlbnRzIHw9IHdhbnRfcng7
Ci0JCQl9Ci0JCX0KLQotCQlpZiAocmV0cnlfcnggJiYgIWlzX2tldmVudCkKLQkJCU9TX3NlbHJl
Y29yZCh0ZCwgY2hlY2tfYWxsX3J4ID8KKwkJaWYgKHJldHJ5X3J4ICYmIHNyKSB7CisJCQlubV9v
c19zZWxyZWNvcmQoc3IsIGNoZWNrX2FsbF9yeCA/CiAJCQkgICAgJm5hLT5zaVtOUl9SWF0gOiAm
bmEtPnJ4X3JpbmdzW3ByaXYtPm5wX3FmaXJzdFtOUl9SWF1dLnNpKTsKKwkJfQogCQlpZiAoc2Vu
ZF9kb3duID4gMCB8fCByZXRyeV9yeCkgewogCQkJcmV0cnlfcnggPSAwOwogCQkJaWYgKHNlbmRf
ZG93bikKQEAgLTI1ODIsMTUgKzI2ODIsMTQgQEAKIAkgKiBrcmluZy0+bnJfaHdjdXIgYW5kIHJp
bmctPmhlYWQKIAkgKiBhcmUgcGFzc2VkIHRvIHRoZSBvdGhlciBlbmRwb2ludC4KIAkgKgotCSAq
IEluIHRoaXMgbW9kZSB3ZSBhbHNvIHNjYW4gdGhlIHN3IHJ4cmluZywgd2hpY2ggaW4KLQkgKiB0
dXJuIHBhc3NlcyBwYWNrZXRzIHVwLgotCSAqCi0JICogWFhYIFRyYW5zcGFyZW50IG1vZGUgYXQg
dGhlIG1vbWVudCByZXF1aXJlcyB0byBiaW5kIGFsbAorCSAqIFRyYW5zcGFyZW50IG1vZGUgcmVx
dWlyZXMgdG8gYmluZCBhbGwKICAJICogcmluZ3MgdG8gYSBzaW5nbGUgZmlsZSBkZXNjcmlwdG9y
LgogCSAqLwogCi0JaWYgKHEuaGVhZCAmJiBuYS0+aWZwICE9IE5VTEwpCisJaWYgKHEuaGVhZCAm
JiAhbm1fa3JfdHJ5Z2V0KCZuYS0+dHhfcmluZ3NbbmEtPm51bV90eF9yaW5nc10sIDEsICZyZXZl
bnRzKSkgewogCQluZXRtYXBfc2VuZF91cChuYS0+aWZwLCAmcSk7CisJCW5tX2tyX3B1dCgmbmEt
PnR4X3JpbmdzW25hLT5udW1fdHhfcmluZ3NdKTsKKwl9CiAKIAlyZXR1cm4gKHJldmVudHMpOwog
I3VuZGVmIHdhbnRfdHgKQEAgLTI2MDAsOCArMjY5OSw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0gZHJpdmVyIHN1cHBvcnQgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0
YXRpYyBpbnQgbmV0bWFwX2h3X2tyaW5nc19jcmVhdGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICop
OwotCiAvKiBkZWZhdWx0IG5vdGlmeSBjYWxsYmFjayAqLwogc3RhdGljIGludAogbmV0bWFwX25v
dGlmeShzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywgaW50IGZsYWdzKQpAQCAtMjYwOSw1MSAr
MjcwNiw1MSBAQAogCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEgPSBrcmluZy0+bmE7CiAJZW51
bSB0eHJ4IHQgPSBrcmluZy0+dHg7CiAKLQlPU19zZWx3YWtldXAoJmtyaW5nLT5zaSwgUElfTkVU
KTsKKwlubV9vc19zZWx3YWtldXAoJmtyaW5nLT5zaSk7CiAJLyogb3B0aW1pemF0aW9uOiBhdm9p
ZCBhIHdha2UgdXAgb24gdGhlIGdsb2JhbAogCSAqIHF1ZXVlIGlmIG5vYm9keSBoYXMgcmVnaXN0
ZXJlZCBmb3IgbW9yZQogCSAqIHRoYW4gb25lIHJpbmcKIAkgKi8KIAlpZiAobmEtPnNpX3VzZXJz
W3RdID4gMCkKLQkJT1Nfc2Vsd2FrZXVwKCZuYS0+c2lbdF0sIFBJX05FVCk7CisJCW5tX29zX3Nl
bHdha2V1cCgmbmEtPnNpW3RdKTsKIAotCXJldHVybiAwOworCXJldHVybiBOTV9JUlFfQ09NUExF
VEVEOwogfQogCisjaWYgMAorc3RhdGljIGludAorbmV0bWFwX25vdGlmeShzdHJ1Y3QgbmV0bWFw
X2FkYXB0ZXIgKm5hLCB1X2ludCBuX3JpbmcsCitlbnVtIHR4cnggdHgsIGludCBmbGFncykKK3sK
KwlpZiAodHggPT0gTlJfVFgpIHsKKwkJS2VTZXRFdmVudChub3Rlcy0+VFhfRVZFTlQsIDAsIEZB
TFNFKTsKKwl9CisJZWxzZQorCXsKKwkJS2VTZXRFdmVudChub3Rlcy0+UlhfRVZFTlQsIDAsIEZB
TFNFKTsKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKIAogLyogY2FsbGVkIGJ5IGFsbCByb3V0
aW5lcyB0aGF0IGNyZWF0ZSBuZXRtYXBfYWRhcHRlcnMuCi0gKiBBdHRhY2ggbmEgdG8gdGhlIGlm
cCAoaWYgYW55KSBhbmQgcHJvdmlkZSBkZWZhdWx0cwotICogZm9yIG9wdGlvbmFsIGNhbGxiYWNr
cy4gRGVmYXVsdHMgYXNzdW1lIHRoYXQgd2UKLSAqIGFyZSBjcmVhdGluZyBhbiBoYXJkd2FyZSBu
ZXRtYXBfYWRhcHRlci4KKyAqIHByb3ZpZGUgc29tZSBkZWZhdWx0cyBhbmQgZ2V0IGEgcmVmZXJl
bmNlIHRvIHRoZQorICogbWVtb3J5IGFsbG9jYXRvcgogICovCiBpbnQKIG5ldG1hcF9hdHRhY2hf
Y29tbW9uKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEpCiB7Ci0Jc3RydWN0IGlmbmV0ICppZnAg
PSBuYS0+aWZwOwotCiAJaWYgKG5hLT5udW1fdHhfcmluZ3MgPT0gMCB8fCBuYS0+bnVtX3J4X3Jp
bmdzID09IDApIHsKIAkJRCgiJXM6IGludmFsaWQgcmluZ3MgdHggJWQgcnggJWQiLAogCQkJbmEt
Pm5hbWUsIG5hLT5udW1fdHhfcmluZ3MsIG5hLT5udW1fcnhfcmluZ3MpOwogCQlyZXR1cm4gRUlO
VkFMOwogCX0KLQkvKiBpZnAgaXMgTlVMTCBmb3IgdmlydHVhbCBhZGFwdGVycyAoYndyYXAsIG5v
bi1wZXJzaXN0ZW50IFZBTEUgcG9ydHMsCi0JICogcGlwZXMsIG1vbml0b3JzKS4gRm9yIGJ3cmFw
IHdlIGFjdHVhbGx5IGhhdmUgYSBub24tbnVsbCBpZnAgZm9yCi0JICogdXNlIGJ5IHRoZSBleHRl
cm5hbCBtb2R1bGVzLCBidXQgdGhhdCBpcyBzZXQgYWZ0ZXIgdGhpcwotCSAqIGZ1bmN0aW9uIGhh
cyBiZWVuIGNhbGxlZC4KLQkgKiBYWFggdGhpcyBpcyB1Z2x5LCBtYXliZSBzcGxpdCB0aGlzIGZ1
bmN0aW9uIGluIHR3byAoMjAxNC0wMy0xNCkKLQkgKi8KLQlpZiAoaWZwICE9IE5VTEwpIHsKLQkJ
V05BKGlmcCkgPSBuYTsKIAotCS8qIHRoZSBmb2xsb3dpbmcgaXMgb25seSBuZWVkZWQgZm9yIG5h
IHRoYXQgdXNlIHRoZSBob3N0IHBvcnQuCi0JICogWFhYIGRvIHdlIGhhdmUgc29tZXRoaW5nIHNp
bWlsYXIgZm9yIGxpbnV4ID8KLQkgKi8KICNpZmRlZiBfX0ZyZWVCU0RfXwotCQluYS0+aWZfaW5w
dXQgPSBpZnAtPmlmX2lucHV0OyAvKiBmb3IgbmV0bWFwX3NlbmRfdXAgKi8KLSNlbmRpZiAvKiBf
X0ZyZWVCU0RfXyAqLwotCi0JCU5FVE1BUF9TRVRfQ0FQQUJMRShpZnApOworCWlmIChuYS0+bmFf
ZmxhZ3MgJiBOQUZfSE9TVF9SSU5HUyAmJiBuYS0+aWZwKSB7CisJCW5hLT5pZl9pbnB1dCA9IG5h
LT5pZnAtPmlmX2lucHV0OyAvKiBmb3IgbmV0bWFwX3NlbmRfdXAgKi8KIAl9CisjZW5kaWYgLyog
X19GcmVlQlNEX18gKi8KIAlpZiAobmEtPm5tX2tyaW5nc19jcmVhdGUgPT0gTlVMTCkgewogCQkv
KiB3ZSBhc3N1bWUgdGhhdCB3ZSBoYXZlIGJlZW4gY2FsbGVkIGJ5IGEgZHJpdmVyLAogCQkgKiBz
aW5jZSBvdGhlciBwb3J0IHR5cGVzIGFsbCBwcm92aWRlIHRoZWlyIG93bgpAQCAtMjY2NiwxMCAr
Mjc2MywxMCBAQAogCQluYS0+bm1fbm90aWZ5ID0gbmV0bWFwX25vdGlmeTsKIAluYS0+YWN0aXZl
X2ZkcyA9IDA7CiAKLQlpZiAobmEtPm5tX21lbSA9PSBOVUxMKQorCWlmIChuYS0+bm1fbWVtID09
IE5VTEwpIHsKIAkJLyogdXNlIHRoZSBnbG9iYWwgYWxsb2NhdG9yICovCi0JCW5hLT5ubV9tZW0g
PSAmbm1fbWVtOwotCW5ldG1hcF9tZW1fZ2V0KG5hLT5ubV9tZW0pOworCQluYS0+bm1fbWVtID0g
bmV0bWFwX21lbV9nZXQoJm5tX21lbSk7CisJfQogI2lmZGVmIFdJVEhfVkFMRQogCWlmIChuYS0+
bm1fYmRnX2F0dGFjaCA9PSBOVUxMKQogCQkvKiBubyBzcGVjaWFsIG5tX2JkZ19hdHRhY2ggY2Fs
bGJhY2suIE9uIFZBTEUKQEAgLTI2NzcsNiArMjc3NCw3IEBACiAJCSAqLwogCQluYS0+bm1fYmRn
X2F0dGFjaCA9IG5ldG1hcF9id3JhcF9hdHRhY2g7CiAjZW5kaWYKKwogCXJldHVybiAwOwogfQog
CkBAIC0yNjg1LDkgKzI3ODMsNiBAQAogdm9pZAogbmV0bWFwX2RldGFjaF9jb21tb24oc3RydWN0
IG5ldG1hcF9hZGFwdGVyICpuYSkKIHsKLQlpZiAobmEtPmlmcCAhPSBOVUxMKQotCQlXTkEobmEt
PmlmcCkgPSBOVUxMOyAvKiBYWFggZG8gd2UgbmVlZCB0aGlzPyAqLwotCiAJaWYgKG5hLT50eF9y
aW5ncykgeyAvKiBYWFggc2hvdWxkIG5vdCBoYXBwZW4gKi8KIAkJRCgiZnJlZWluZyBsZWZ0b3Zl
ciB0eF9yaW5ncyIpOwogCQluYS0+bm1fa3JpbmdzX2RlbGV0ZShuYSk7CkBAIC0yNjk2LDM0ICsy
NzkxLDU1IEBACiAJaWYgKG5hLT5ubV9tZW0pCiAJCW5ldG1hcF9tZW1fcHV0KG5hLT5ubV9tZW0p
OwogCWJ6ZXJvKG5hLCBzaXplb2YoKm5hKSk7Ci0JZnJlZShuYSwgTV9ERVZCVUYpOworCW5tX29z
X2ZyZWUobmEpOwogfQogCi0vKiBXcmFwcGVyIGZvciB0aGUgcmVnaXN0ZXIgY2FsbGJhY2sgcHJv
dmlkZWQgaGFyZHdhcmUgZHJpdmVycy4KLSAqIG5hLT5pZnAgPT0gTlVMTCBtZWFucyB0aGUgZHJp
dmVyIG1vZHVsZSBoYXMgYmVlbgorLyogV3JhcHBlciBmb3IgdGhlIHJlZ2lzdGVyIGNhbGxiYWNr
IHByb3ZpZGVkIG5ldG1hcC1lbmFibGVkCisgKiBoYXJkd2FyZSBkcml2ZXJzLgorICogbm1faXN6
b21iaWUobmEpIG1lYW5zIHRoYXQgdGhlIGRyaXZlciBtb2R1bGUgaGFzIGJlZW4KICAqIHVubG9h
ZGVkLCBzbyB3ZSBjYW5ub3QgY2FsbCBpbnRvIGl0LgotICogTm90ZSB0aGF0IG1vZHVsZSB1bmxv
YWRpbmcsIGluIG91ciBwYXRjaGVkIGxpbnV4IGRyaXZlcnMsCi0gKiBoYXBwZW5zIHVuZGVyIE5N
R19MT0NLIGFuZCBhZnRlciBoYXZpbmcgc3RvcHBlZCBhbGwgdGhlCi0gKiBuaWMgcmluZ3MgKHNl
ZSBuZXRtYXBfZGV0YWNoKS4gVGhpcyBwcm92aWRlcyBzdWZmaWNpZW50Ci0gKiBwcm90ZWN0aW9u
IGZvciB0aGUgb3RoZXIgZHJpdmVyLXByb3ZpZWQgY2FsbGJhY2tzCi0gKiAoaS5lLiwgbm1fY29u
ZmlnIGFuZCBubV8qeHN5bmMpLCB0aGF0IHRoZXJlZm9yZSBkb24ndCBuZWVkCi0gKiB0byB3cmFw
cGVkLgorICogbm1fb3NfaWZuZXRfbG9jaygpIG11c3QgZ3VhcmFudGVlIG11dHVhbCBleGNsdXNp
b24gd2l0aAorICogbW9kdWxlIHVubG9hZGluZy4KICAqLwogc3RhdGljIGludAotbmV0bWFwX2h3
X3JlZ2lzdGVyKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIGludCBvbm9mZikKK25ldG1hcF9o
d19yZWcoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSwgaW50IG9ub2ZmKQogewogCXN0cnVjdCBu
ZXRtYXBfaHdfYWRhcHRlciAqaHduYSA9CiAJCShzdHJ1Y3QgbmV0bWFwX2h3X2FkYXB0ZXIqKW5h
OworCWludCBlcnJvciA9IDA7CisKKwlubV9vc19pZm5ldF9sb2NrKCk7CisKKwlpZiAobm1faXN6
b21iaWUobmEpKSB7CisJCWlmIChvbm9mZikgeworCQkJZXJyb3IgPSBFTlhJTzsKKwkJfSBlbHNl
IGlmIChuYSAhPSBOVUxMKSB7CisJCQluYS0+bmFfZmxhZ3MgJj0gfk5BRl9ORVRNQVBfT047CisJ
CX0KKwkJZ290byBvdXQ7CisJfQogCi0JaWYgKG5hLT5pZnAgPT0gTlVMTCkKLQkJcmV0dXJuIG9u
b2ZmID8gRU5YSU8gOiAwOworCWVycm9yID0gaHduYS0+bm1faHdfcmVnaXN0ZXIobmEsIG9ub2Zm
KTsKKworb3V0OgorCW5tX29zX2lmbmV0X3VubG9jaygpOwogCi0JcmV0dXJuIGh3bmEtPm5tX2h3
X3JlZ2lzdGVyKG5hLCBvbm9mZik7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZAor
bmV0bWFwX2h3X2R0b3Ioc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSkKK3sKKwlpZiAobm1faXN6
b21iaWUobmEpIHx8IG5hLT5pZnAgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJV05BKG5hLT5pZnAp
ID0gTlVMTDsKIH0KIAogCiAvKgotICogSW5pdGlhbGl6ZSBhIGBgbmV0bWFwX2FkYXB0ZXJgYCBv
YmplY3QgY3JlYXRlZCBieSBkcml2ZXIgb24gYXR0YWNoLgorICogQWxsb2NhdGUgYSBgYG5ldG1h
cF9hZGFwdGVyYGAgb2JqZWN0LCBhbmQgaW5pdGlhbGl6ZSBpdCBmcm9tIHRoZQorICogJ2FyZycg
cGFzc2VkIGJ5IHRoZSBkcml2ZXIgb24gYXR0YWNoLgogICogV2UgYWxsb2NhdGUgYSBibG9jayBv
ZiBtZW1vcnkgd2l0aCByb29tIGZvciBhIHN0cnVjdCBuZXRtYXBfYWRhcHRlcgogICogcGx1cyB0
d28gc2V0cyBvZiBOKzIgc3RydWN0IG5ldG1hcF9rcmluZyAod2hlcmUgTiBpcyB0aGUgbnVtYmVy
CiAgKiBvZiBoYXJkd2FyZSByaW5ncyk6CkBAIC0yNzMyLDI5ICsyODQ4LDMxIEBACiAgKiBrcmlu
ZwlOKzEJaXMgb25seSB1c2VkIGZvciB0aGUgc2VsaW5mbyBmb3IgYWxsIHF1ZXVlcy4gLy8gWFhY
IHN0aWxsIHRydWUgPwogICogUmV0dXJuIDAgb24gc3VjY2VzcywgRU5PTUVNIG90aGVyd2lzZS4K
ICAqLwotaW50Ci1uZXRtYXBfYXR0YWNoKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqYXJnKQorc3Rh
dGljIGludAorX25ldG1hcF9hdHRhY2goc3RydWN0IG5ldG1hcF9hZGFwdGVyICphcmcsIHNpemVf
dCBzaXplKQogewogCXN0cnVjdCBuZXRtYXBfaHdfYWRhcHRlciAqaHduYSA9IE5VTEw7Ci0JLy8g
WFhYIHdoZW4gaXMgYXJnID09IE5VTEwgPwotCXN0cnVjdCBpZm5ldCAqaWZwID0gYXJnID8gYXJn
LT5pZnAgOiBOVUxMOworCXN0cnVjdCBpZm5ldCAqaWZwID0gTlVMTDsKIAotCWlmIChhcmcgPT0g
TlVMTCB8fCBpZnAgPT0gTlVMTCkKKwlpZiAoYXJnID09IE5VTEwgfHwgYXJnLT5pZnAgPT0gTlVM
TCkKIAkJZ290byBmYWlsOwotCWh3bmEgPSBtYWxsb2Moc2l6ZW9mKCpod25hKSwgTV9ERVZCVUYs
IE1fTk9XQUlUIHwgTV9aRVJPKTsKKwlpZnAgPSBhcmctPmlmcDsKKwlod25hID0gbm1fb3NfbWFs
bG9jKHNpemUpOwogCWlmIChod25hID09IE5VTEwpCiAJCWdvdG8gZmFpbDsKIAlod25hLT51cCA9
ICphcmc7CiAJaHduYS0+dXAubmFfZmxhZ3MgfD0gTkFGX0hPU1RfUklOR1MgfCBOQUZfTkFUSVZF
OwogCXN0cm5jcHkoaHduYS0+dXAubmFtZSwgaWZwLT5pZl94bmFtZSwgc2l6ZW9mKGh3bmEtPnVw
Lm5hbWUpKTsKIAlod25hLT5ubV9od19yZWdpc3RlciA9IGh3bmEtPnVwLm5tX3JlZ2lzdGVyOwot
CWh3bmEtPnVwLm5tX3JlZ2lzdGVyID0gbmV0bWFwX2h3X3JlZ2lzdGVyOworCWh3bmEtPnVwLm5t
X3JlZ2lzdGVyID0gbmV0bWFwX2h3X3JlZzsKIAlpZiAobmV0bWFwX2F0dGFjaF9jb21tb24oJmh3
bmEtPnVwKSkgewotCQlmcmVlKGh3bmEsIE1fREVWQlVGKTsKKwkJbm1fb3NfZnJlZShod25hKTsK
IAkJZ290byBmYWlsOwogCX0KIAluZXRtYXBfYWRhcHRlcl9nZXQoJmh3bmEtPnVwKTsKIAorCU5N
X0FUVEFDSF9OQShpZnAsICZod25hLT51cCk7CisKICNpZmRlZiBsaW51eAogCWlmIChpZnAtPm5l
dGRldl9vcHMpIHsKIAkJLyogcHJlcGFyZSBhIGNsb25lIG9mIHRoZSBuZXRkZXYgb3BzICovCkBA
IC0yNzYyLDcgKzI4ODAsNyBAQAogCQlod25hLT5ubV9uZG8ubmRvX3N0YXJ0X3htaXQgPSBpZnAt
Pm5ldGRldl9vcHM7CiAjZWxzZQogCQlod25hLT5ubV9uZG8gPSAqaWZwLT5uZXRkZXZfb3BzOwot
I2VuZGlmCisjZW5kaWYgLyogTkVUTUFQX0xJTlVYX0hBVkVfTkVUREVWX09QUyAqLwogCX0KIAlo
d25hLT5ubV9uZG8ubmRvX3N0YXJ0X3htaXQgPSBsaW51eF9uZXRtYXBfc3RhcnRfeG1pdDsKIAlp
ZiAoaWZwLT5ldGh0b29sX29wcykgewpAQCAtMjc3MSwxMSArMjg4OSwxNCBAQAogCWh3bmEtPm5t
X2V0by5zZXRfcmluZ3BhcmFtID0gbGludXhfbmV0bWFwX3NldF9yaW5ncGFyYW07CiAjaWZkZWYg
TkVUTUFQX0xJTlVYX0hBVkVfU0VUX0NIQU5ORUxTCiAJaHduYS0+bm1fZXRvLnNldF9jaGFubmVs
cyA9IGxpbnV4X25ldG1hcF9zZXRfY2hhbm5lbHM7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRNQVBf
TElOVVhfSEFWRV9TRVRfQ0hBTk5FTFMgKi8KIAlpZiAoYXJnLT5ubV9jb25maWcgPT0gTlVMTCkg
ewogCQlod25hLT51cC5ubV9jb25maWcgPSBuZXRtYXBfbGludXhfY29uZmlnOwogCX0KICNlbmRp
ZiAvKiBsaW51eCAqLworCWlmIChhcmctPm5tX2R0b3IgPT0gTlVMTCkgeworCQlod25hLT51cC5u
bV9kdG9yID0gbmV0bWFwX2h3X2R0b3I7CisJfQogCiAJaWZfcHJpbnRmKGlmcCwgIm5ldG1hcCBx
dWV1ZXMvc2xvdHM6IFRYICVkLyVkLCBSWCAlZC8lZFxuIiwKIAkgICAgaHduYS0+dXAubnVtX3R4
X3JpbmdzLCBod25hLT51cC5udW1fdHhfZGVzYywKQEAgLTI3ODQsMTIgKzI5MDUsNTQgQEAKIAog
ZmFpbDoKIAlEKCJmYWlsLCBhcmcgJXAgaWZwICVwIG5hICVwIiwgYXJnLCBpZnAsIGh3bmEpOwot
CWlmIChpZnApCi0JCW5ldG1hcF9kZXRhY2goaWZwKTsKIAlyZXR1cm4gKGh3bmEgPyBFSU5WQUwg
OiBFTk9NRU0pOwogfQogCiAKK2ludAorbmV0bWFwX2F0dGFjaChzdHJ1Y3QgbmV0bWFwX2FkYXB0
ZXIgKmFyZykKK3sKKwlyZXR1cm4gX25ldG1hcF9hdHRhY2goYXJnLCBzaXplb2Yoc3RydWN0IG5l
dG1hcF9od19hZGFwdGVyKSk7Cit9CisKKworI2lmZGVmIFdJVEhfUFRORVRNQVBfR1VFU1QKK2lu
dAorbmV0bWFwX3B0X2d1ZXN0X2F0dGFjaChzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKmFyZywgdm9p
ZCAqY3NiLAorCQkgICAgICAgdW5zaWduZWQgaW50IG5pZnBfb2Zmc2V0LCB1bnNpZ25lZCBpbnQg
bWVtaWQpCit7CisJc3RydWN0IG5ldG1hcF9wdF9ndWVzdF9hZGFwdGVyICpwdG5hOworCXN0cnVj
dCBpZm5ldCAqaWZwID0gYXJnID8gYXJnLT5pZnAgOiBOVUxMOworCWludCBlcnJvcjsKKworCS8q
IGdldCBhbGxvY2F0b3IgKi8KKwlhcmctPm5tX21lbSA9IG5ldG1hcF9tZW1fcHRfZ3Vlc3RfbmV3
KGlmcCwgbmlmcF9vZmZzZXQsIG1lbWlkKTsKKwlpZiAoYXJnLT5ubV9tZW0gPT0gTlVMTCkKKwkJ
cmV0dXJuIEVOT01FTTsKKwlhcmctPm5hX2ZsYWdzIHw9IE5BRl9NRU1fT1dORVI7CisJZXJyb3Ig
PSBfbmV0bWFwX2F0dGFjaChhcmcsIHNpemVvZihzdHJ1Y3QgbmV0bWFwX3B0X2d1ZXN0X2FkYXB0
ZXIpKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCS8qIGdldCB0aGUgbmV0bWFw
X3B0X2d1ZXN0X2FkYXB0ZXIgKi8KKwlwdG5hID0gKHN0cnVjdCBuZXRtYXBfcHRfZ3Vlc3RfYWRh
cHRlciAqKSBOQShpZnApOworCXB0bmEtPmNzYiA9IGNzYjsKKworCS8qIEluaXRpYWxpemUgYSBz
ZXBhcmF0ZSBwYXNzLXRocm91Z2ggbmV0bWFwIGFkYXB0ZXIgdGhhdCBpcyBnb2luZyB0bworCSAq
IGJlIHVzZWQgYnkgdGhlIHB0bmV0IGRyaXZlciBvbmx5LCBhbmQgc28gbmV2ZXIgZXhwb3NlZCB0
byBuZXRtYXAKKyAgICAgICAgICogYXBwbGljYXRpb25zLiBXZSBvbmx5IG5lZWQgYSBzdWJzZXQg
b2YgdGhlIGF2YWlsYWJsZSBmaWVsZHMuICovCisJbWVtc2V0KCZwdG5hLT5kciwgMCwgc2l6ZW9m
KHB0bmEtPmRyKSk7CisJcHRuYS0+ZHIudXAuaWZwID0gaWZwOworCXB0bmEtPmRyLnVwLm5tX21l
bSA9IG5ldG1hcF9tZW1fZ2V0KHB0bmEtPmh3dXAudXAubm1fbWVtKTsKKyAgICAgICAgcHRuYS0+
ZHIudXAubm1fY29uZmlnID0gcHRuYS0+aHd1cC51cC5ubV9jb25maWc7CisKKwlwdG5hLT5iYWNr
ZW5kX3JlZ2lmcyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBXSVRIX1BUTkVUTUFQ
X0dVRVNUICovCisKKwogdm9pZAogTk1fREJHKG5ldG1hcF9hZGFwdGVyX2dldCkoc3RydWN0IG5l
dG1hcF9hZGFwdGVyICpuYSkKIHsKQEAgLTI4NDEsMjggKzMwMDQsMjkgQEAKIG5ldG1hcF9kZXRh
Y2goc3RydWN0IGlmbmV0ICppZnApCiB7CiAJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSA9IE5B
KGlmcCk7Ci0JaW50IHNraXA7CiAKIAlpZiAoIW5hKQogCQlyZXR1cm47CiAKLQlza2lwID0gMDsK
IAlOTUdfTE9DSygpOwotCW5ldG1hcF9kaXNhYmxlX2FsbF9yaW5ncyhpZnApOwotCW5hLT5pZnAg
PSBOVUxMOwotCW5hLT5uYV9mbGFncyAmPSB+TkFGX05FVE1BUF9PTjsKKwluZXRtYXBfc2V0X2Fs
bF9yaW5ncyhuYSwgTk1fS1JfTE9DS0VEKTsKKwluYS0+bmFfZmxhZ3MgfD0gTkFGX1pPTUJJRTsK
IAkvKgogCSAqIGlmIHRoZSBuZXRtYXAgYWRhcHRlciBpcyBub3QgbmF0aXZlLCBzb21lYm9keQog
CSAqIGNoYW5nZWQgaXQsIHNvIHdlIGNhbiBub3QgcmVsZWFzZSBpdCBoZXJlLgotCSAqIFRoZSBO
VUxMIG5hLT5pZnAgd2lsbCBub3RpZnkgdGhlIG5ldyBvd25lciB0aGF0CisJICogVGhlIE5BRl9a
T01CSUUgZmxhZyB3aWxsIG5vdGlmeSB0aGUgbmV3IG93bmVyIHRoYXQKIAkgKiB0aGUgZHJpdmVy
IGlzIGdvbmUuCiAJICovCiAJaWYgKG5hLT5uYV9mbGFncyAmIE5BRl9OQVRJVkUpIHsKLQkJc2tp
cCA9IG5ldG1hcF9hZGFwdGVyX3B1dChuYSk7CisJICAgICAgICBuZXRtYXBfYWRhcHRlcl9wdXQo
bmEpOwogCX0KLQkvKiBnaXZlIHRoZW0gYSBjaGFuY2UgdG8gbm90aWNlICovCi0JaWYgKHNraXAg
PT0gMCkKLQkJbmV0bWFwX2VuYWJsZV9hbGxfcmluZ3MoaWZwKTsKKwkvKiBnaXZlIGFjdGl2ZSB1
c2VycyBhIGNoYW5jZSB0byBub3RpY2UgdGhhdCBOQUZfWk9NQklFIGhhcyBiZWVuCisJICogdHVy
bmVkIG9uLCBzbyB0aGF0IHRoZXkgY2FuIHN0b3AgYW5kIHJldHVybiBhbiBlcnJvciB0byB1c2Vy
c3BhY2UuCisJICogTm90ZSB0aGF0IHRoaXMgYmVjb21lcyBhIE5PUCBpZiB0aGVyZSBhcmUgbm8g
YWN0aXZlIHVzZXJzIGFuZCwKKwkgKiB0aGVyZWZvcmUsIHRoZSBwdXQoKSBhYm92ZSBoYXMgZGVs
ZXRlZCB0aGUgbmEsIHNpbmNlIG5vdyBOQShpZnApIGlzCisJICogTlVMTC4KKwkgKi8KKwluZXRt
YXBfZW5hYmxlX2FsbF9yaW5ncyhpZnApOwogCU5NR19VTkxPQ0soKTsKIH0KIApAQCAtMjg4Myw5
ICszMDQ3LDEwIEBACiBuZXRtYXBfdHJhbnNtaXQoc3RydWN0IGlmbmV0ICppZnAsIHN0cnVjdCBt
YnVmICptKQogewogCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEgPSBOQShpZnApOwotCXN0cnVj
dCBuZXRtYXBfa3JpbmcgKmtyaW5nOworCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCAqdHhf
a3Jpbmc7CiAJdV9pbnQgbGVuID0gTUJVRl9MRU4obSk7CiAJdV9pbnQgZXJyb3IgPSBFTk9CVUZT
OworCXVuc2lnbmVkIGludCB0eHI7CiAJc3RydWN0IG1icSAqcTsKIAlpbnQgc3BhY2U7CiAKQEAg
LTI5MDAsNiArMzA2NSwxNiBAQAogCQlnb3RvIGRvbmU7CiAJfQogCisJdHhyID0gTUJVRl9UWFEo
bSk7CisJaWYgKHR4ciA+PSBuYS0+bnVtX3R4X3JpbmdzKSB7CisJCXR4ciAlPSBuYS0+bnVtX3R4
X3JpbmdzOworCX0KKwl0eF9rcmluZyA9ICZOTVIobmEsIE5SX1RYKVt0eHJdOworCisJaWYgKHR4
X2tyaW5nLT5ucl9tb2RlID09IE5LUl9ORVRNQVBfT0ZGKSB7CisJCXJldHVybiBNQlVGX1RSQU5T
TUlUKG5hLCBpZnAsIG0pOworCX0KKwogCXEgPSAma3JpbmctPnJ4X3F1ZXVlOwogCiAJLy8gWFhY
IHJlY29uc2lkZXIgbG9uZyBwYWNrZXRzIGlmIHdlIGhhbmRsZSBmcmFnbWVudHMKQEAgLTI5MDks
NiArMzA4NCwxMSBAQAogCQlnb3RvIGRvbmU7CiAJfQogCisJaWYgKG5tX29zX21idWZfaGFzX29m
ZmxkKG0pKSB7CisJCVJEKDEsICIlcyBkcm9wIG1idWYgcmVxdWlyaW5nIG9mZmxvYWRpbmdzIiwg
bmEtPm5hbWUpOworCQlnb3RvIGRvbmU7CisJfQorCiAJLyogcHJvdGVjdCBhZ2FpbnN0IHJ4c3lu
Y19mcm9tX2hvc3QoKSwgbmV0bWFwX3N3X3RvX25pYygpCiAJICogYW5kIG1heWJlIG90aGVyIGlu
c3RhbmNlcyBvZiBuZXRtYXBfdHJhbnNtaXQgKHRoZSBsYXR0ZXIKIAkgKiBub3QgcG9zc2libGUg
b24gTGludXgpLgpAQCAtMjk1MSw2ICszMTMxLDggQEAKICAqIG5ldG1hcF9yZXNldCgpIGlzIGNh
bGxlZCBieSB0aGUgZHJpdmVyIHJvdXRpbmVzIHdoZW4gcmVpbml0aWFsaXppbmcKICAqIGEgcmlu
Zy4gVGhlIGRyaXZlciBpcyBpbiBjaGFyZ2Ugb2YgbG9ja2luZyB0byBwcm90ZWN0IHRoZSBrcmlu
Zy4KICAqIElmIG5hdGl2ZSBuZXRtYXAgbW9kZSBpcyBub3Qgc2V0IGp1c3QgcmV0dXJuIE5VTEwu
CisgKiBJZiBuYXRpdmUgbmV0bWFwIG1vZGUgaXMgc2V0LCBpbiBwYXJ0aWN1bGFyLCB3ZSBoYXZl
IHRvIHNldCBucl9tb2RlIHRvCisgKiBOS1JfTkVUTUFQX09OLgogICovCiBzdHJ1Y3QgbmV0bWFw
X3Nsb3QgKgogbmV0bWFwX3Jlc2V0KHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIGVudW0gdHhy
eCB0eCwgdV9pbnQgbiwKQEAgLTI5NzUsMTMgKzMxNTcsMjYgQEAKIAlpZiAodHggPT0gTlJfVFgp
IHsKIAkJaWYgKG4gPj0gbmEtPm51bV90eF9yaW5ncykKIAkJCXJldHVybiBOVUxMOworCiAJCWty
aW5nID0gbmEtPnR4X3JpbmdzICsgbjsKKworCQlpZiAoa3JpbmctPm5yX3BlbmRpbmdfbW9kZSA9
PSBOS1JfTkVUTUFQX09GRikgeworCQkJa3JpbmctPm5yX21vZGUgPSBOS1JfTkVUTUFQX09GRjsK
KwkJCXJldHVybiBOVUxMOworCQl9CisKIAkJLy8gWFhYIGNoZWNrIHdoZXRoZXIgd2Ugc2hvdWxk
IHVzZSBod2N1ciBvciByY3VyCiAJCW5ld19od29mcyA9IGtyaW5nLT5ucl9od2N1ciAtIG5ld19j
dXI7CiAJfSBlbHNlIHsKIAkJaWYgKG4gPj0gbmEtPm51bV9yeF9yaW5ncykKIAkJCXJldHVybiBO
VUxMOwogCQlrcmluZyA9IG5hLT5yeF9yaW5ncyArIG47CisKKwkJaWYgKGtyaW5nLT5ucl9wZW5k
aW5nX21vZGUgPT0gTktSX05FVE1BUF9PRkYpIHsKKwkJCWtyaW5nLT5ucl9tb2RlID0gTktSX05F
VE1BUF9PRkY7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCiAJCW5ld19od29mcyA9IGtyaW5nLT5u
cl9od3RhaWwgLSBuZXdfY3VyOwogCX0KIAlsaW0gPSBrcmluZy0+bmtyX251bV9zbG90cyAtIDE7
CkBAIC0zMDE4LDYgKzMyMTMsNyBAQAogCSAqIFdlIGRvIHRoZSB3YWtldXAgaGVyZSwgYnV0IHRo
ZSByaW5nIGlzIG5vdCB5ZXQgcmVjb25maWd1cmVkLgogCSAqIEhvd2V2ZXIsIHdlIGFyZSB1bmRl
ciBsb2NrIHNvIHRoZXJlIGFyZSBubyByYWNlcy4KIAkgKi8KKwlrcmluZy0+bnJfbW9kZSA9IE5L
Ul9ORVRNQVBfT047CiAJa3JpbmctPm5tX25vdGlmeShrcmluZywgMCk7CiAJcmV0dXJuIGtyaW5n
LT5yaW5nLT5zbG90OwogfQpAQCAtMzAzNywxMCArMzIzMyw5IEBACiAgKiAtIGZvciBhIG5pYyBj
b25uZWN0ZWQgdG8gYSBzd2l0Y2gsIGNhbGwgdGhlIHByb3BlciBmb3J3YXJkaW5nIHJvdXRpbmUK
ICAqICAgKHNlZSBuZXRtYXBfYndyYXBfaW50cl9ub3RpZnkpCiAgKi8KLXZvaWQKLW5ldG1hcF9j
b21tb25faXJxKHN0cnVjdCBpZm5ldCAqaWZwLCB1X2ludCBxLCB1X2ludCAqd29ya19kb25lKQor
aW50CituZXRtYXBfY29tbW9uX2lycShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCB1X2ludCBx
LCB1X2ludCAqd29ya19kb25lKQogewotCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEgPSBOQShp
ZnApOwogCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nOwogCWVudW0gdHhyeCB0ID0gKHdvcmtf
ZG9uZSA/IE5SX1JYIDogTlJfVFgpOwogCkBAIC0zMDUxLDE1ICszMjQ2LDIwIEBACiAJfQogCiAJ
aWYgKHEgPj0gbm1hX2dldF9ucmluZ3MobmEsIHQpKQotCQlyZXR1cm47CS8vIG5vdCBhIHBoeXNp
Y2FsIHF1ZXVlCisJCXJldHVybiBOTV9JUlFfUEFTUzsgLy8gbm90IGEgcGh5c2ljYWwgcXVldWUK
IAogCWtyaW5nID0gTk1SKG5hLCB0KSArIHE7CiAKKwlpZiAoa3JpbmctPm5yX21vZGUgPT0gTktS
X05FVE1BUF9PRkYpIHsKKwkJcmV0dXJuIE5NX0lSUV9QQVNTOworCX0KKwogCWlmICh0ID09IE5S
X1JYKSB7CiAJCWtyaW5nLT5ucl9rZmxhZ3MgfD0gTktSX1BFTkRJTlRSOwkvLyBYWFggYXRvbWlj
ID8KIAkJKndvcmtfZG9uZSA9IDE7IC8qIGRvIG5vdCBmaXJlIG5hcGkgYWdhaW4gKi8KIAl9Ci0J
a3JpbmctPm5tX25vdGlmeShrcmluZywgMCk7CisKKwlyZXR1cm4ga3JpbmctPm5tX25vdGlmeShr
cmluZywgMCk7CiB9CiAKIApAQCAtMzA2NywxNyArMzI2NywxNyBAQAogICogRGVmYXVsdCBmdW5j
dGlvbnMgdG8gaGFuZGxlIHJ4L3R4IGludGVycnVwdHMgZnJvbSBhIHBoeXNpY2FsIGRldmljZS4K
ICAqICJ3b3JrX2RvbmUiIGlzIG5vbi1udWxsIG9uIHRoZSBSWCBwYXRoLCBOVUxMIGZvciB0aGUg
VFggcGF0aC4KICAqCi0gKiBJZiB0aGUgY2FyZCBpcyBub3QgaW4gbmV0bWFwIG1vZGUsIHNpbXBs
eSByZXR1cm4gMCwKKyAqIElmIHRoZSBjYXJkIGlzIG5vdCBpbiBuZXRtYXAgbW9kZSwgc2ltcGx5
IHJldHVybiBOTV9JUlFfUEFTUywKICAqIHNvIHRoYXQgdGhlIGNhbGxlciBwcm9jZWVkcyB3aXRo
IHJlZ3VsYXIgcHJvY2Vzc2luZy4KLSAqIE90aGVyd2lzZSBjYWxsIG5ldG1hcF9jb21tb25faXJx
KCkgYW5kIHJldHVybiAxLgorICogT3RoZXJ3aXNlIGNhbGwgbmV0bWFwX2NvbW1vbl9pcnEoKS4K
ICAqCiAgKiBJZiB0aGUgY2FyZCBpcyBjb25uZWN0ZWQgdG8gYSBuZXRtYXAgZmlsZSBkZXNjcmlw
dG9yLAogICogZG8gYSBzZWx3YWtldXAgb24gdGhlIGluZGl2aWR1YWwgcXVldWUsIHBsdXMgb25l
IG9uIHRoZSBnbG9iYWwgb25lCiAgKiBpZiBuZWVkZWQgKG11bHRpcXVldWUgY2FyZCBfYW5kXyB0
aGVyZSBhcmUgbXVsdGlxdWV1ZSBsaXN0ZW5lcnMpLAotICogYW5kIHJldHVybiAxLgorICogYW5k
IHJldHVybiBOUl9JUlFfQ09NUExFVEVELgogICoKICAqIEZpbmFsbHksIGlmIGNhbGxlZCBvbiBy
eCBmcm9tIGFuIGludGVyZmFjZSBjb25uZWN0ZWQgdG8gYSBzd2l0Y2gsCi0gKiBjYWxscyB0aGUg
cHJvcGVyIGZvcndhcmRpbmcgcm91dGluZSwgYW5kIHJldHVybiAxLgorICogY2FsbHMgdGhlIHBy
b3BlciBmb3J3YXJkaW5nIHJvdXRpbmUuCiAgKi8KIGludAogbmV0bWFwX3J4X2lycShzdHJ1Y3Qg
aWZuZXQgKmlmcCwgdV9pbnQgcSwgdV9pbnQgKndvcmtfZG9uZSkKQEAgLTMwOTEsMTUgKzMyOTEs
MTQgQEAKIAkgKiBubV9uYXRpdmVfb24oKSBoZXJlLgogCSAqLwogCWlmICghbm1fbmV0bWFwX29u
KG5hKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBOTV9JUlFfUEFTUzsKIAogCWlmIChuYS0+bmFf
ZmxhZ3MgJiBOQUZfU0tJUF9JTlRSKSB7CiAJCU5EKCJ1c2UgcmVndWxhciBpbnRlcnJ1cHQiKTsK
LQkJcmV0dXJuIDA7CisJCXJldHVybiBOTV9JUlFfUEFTUzsKIAl9CiAKLQluZXRtYXBfY29tbW9u
X2lycShpZnAsIHEsIHdvcmtfZG9uZSk7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIG5ldG1hcF9jb21t
b25faXJxKG5hLCBxLCB3b3JrX2RvbmUpOwogfQogCiAKQEAgLTMxMjAsOSArMzMxOSwxMSBAQAog
dm9pZAogbmV0bWFwX2Zpbmkodm9pZCkKIHsKLQluZXRtYXBfdW5pbml0X2JyaWRnZXMoKTsKIAlp
ZiAobmV0bWFwX2RldikKIAkJZGVzdHJveV9kZXYobmV0bWFwX2Rldik7CisJLyogd2UgYXNzdW1l
IHRoYXQgdGhlcmUgYXJlIG5vIGxvbmdlciBuZXRtYXAgdXNlcnMgKi8KKwlubV9vc19pZm5ldF9m
aW5pKCk7CisJbmV0bWFwX3VuaW5pdF9icmlkZ2VzKCk7CiAJbmV0bWFwX21lbV9maW5pKCk7CiAJ
Tk1HX0xPQ0tfREVTVFJPWSgpOwogCXByaW50ZigibmV0bWFwOiB1bmxvYWRlZCBtb2R1bGUuXG4i
KTsKQEAgLTMxNTUsOSArMzM1NiwxMyBAQAogCQlnb3RvIGZhaWw7CiAKICNpZmRlZiBfX0ZyZWVC
U0RfXwotCW5tX3ZpX2luaXRfaW5kZXgoKTsKKwlubV9vc192aV9pbml0X2luZGV4KCk7CiAjZW5k
aWYKIAorCWVycm9yID0gbm1fb3NfaWZuZXRfaW5pdCgpOworCWlmIChlcnJvcikKKwkJZ290byBm
YWlsOworCiAJcHJpbnRmKCJuZXRtYXA6IGxvYWRlZCBtb2R1bGVcbiIpOwogCXJldHVybiAoMCk7
CiBmYWlsOgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX2ZyZWVi
c2QuYyAvdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfZnJlZWJzZC5jCi0tLSB1c3Ivc3Jj
L3N5cy9kZXYvbmV0bWFwL25ldG1hcF9mcmVlYnNkLmMJMjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAw
MDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9mcmVlYnNkLmMJ
MjAxNi0xMS0yMyAxNjo1Nzo1Ny44NDg3MTAwMDAgKzAwMDAKQEAgLTIzLDE4ICsyMywxOSBAQAog
ICogU1VDSCBEQU1BR0UuCiAgKi8KIAotLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9kZXYv
bmV0bWFwL25ldG1hcF9mcmVlYnNkLmMgMjg1Njk5IDIwMTUtMDctMTkgMTg6MDc6MjVaIGx1aWdp
ICQgKi8KKy8qICRGcmVlQlNEOiBoZWFkL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9mcmVlYnNkLmMg
MzA3NzA2IDIwMTYtMTAtMjEgMDY6MzI6NDVaIHNlcGhlICQgKi8KICNpbmNsdWRlICJvcHRfaW5l
dC5oIgogI2luY2x1ZGUgIm9wdF9pbmV0Ni5oIgogCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cisj
aW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgogI2luY2x1ZGUg
PHN5cy9lcnJuby5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPiAgLyogZGVmaW5lcyB1c2VkIGlu
IGtlcm5lbC5oICovCisjaW5jbHVkZSA8c3lzL2phaWwuaD4KICNpbmNsdWRlIDxzeXMvcG9sbC5o
PiAgLyogUE9MTElOLCBQT0xMT1VUICovCiAjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPiAvKiB0eXBl
cyB1c2VkIGluIG1vZHVsZSBpbml0aWFsaXphdGlvbiAqLwotI2luY2x1ZGUgPHN5cy9jb25mLmg+
CS8qIERFVl9NT0RVTEUgKi8KKyNpbmNsdWRlIDxzeXMvY29uZi5oPgkvKiBERVZfTU9EVUxFX09S
REVSRUQgKi8KICNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CisjaW5jbHVkZSA8c3lzL3N5c2NhbGxz
dWJyLmg+IC8qIGtlcm5faW9jdGwoKSAqLwogCiAjaW5jbHVkZSA8c3lzL3J3bG9jay5oPgogCkBA
IC01MCw2ICs1MSwxMSBAQAogI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KICNpbmNsdWRlIDxzeXMv
c29ja2V0Lmg+IC8qIHNvY2thZGRycyAqLwogI2luY2x1ZGUgPHN5cy9zZWxpbmZvLmg+CisjaW5j
bHVkZSA8c3lzL2t0aHJlYWQuaD4gLyoga3RocmVhZF9hZGQoKSAqLworI2luY2x1ZGUgPHN5cy9w
cm9jLmg+IC8qIFBST0NfTE9DSygpICovCisjaW5jbHVkZSA8c3lzL3VuaXN0ZC5oPiAvKiBSRk5P
V0FJVCAqLworI2luY2x1ZGUgPHN5cy9zY2hlZC5oPiAvKiBzY2hlZF9iaW5kKCkgKi8KKyNpbmNs
dWRlIDxzeXMvc21wLmg+IC8qIG1wX21heGlkICovCiAjaW5jbHVkZSA8bmV0L2lmLmg+CiAjaW5j
bHVkZSA8bmV0L2lmX3Zhci5oPgogI2luY2x1ZGUgPG5ldC9pZl90eXBlcy5oPiAvKiBJRlRfRVRI
RVIgKi8KQEAgLTYxLDEzICs2NywxMTIgQEAKIAogI2luY2x1ZGUgPG5ldC9uZXRtYXAuaD4KICNp
bmNsdWRlIDxkZXYvbmV0bWFwL25ldG1hcF9rZXJuLmg+CisjaW5jbHVkZSA8bmV0L25ldG1hcF92
aXJ0Lmg+CiAjaW5jbHVkZSA8ZGV2L25ldG1hcC9uZXRtYXBfbWVtMi5oPgogCiAKIC8qID09PT09
PT09PT09PT09PT09PT09PT09PSBGUkVFQlNELVNQRUNJRklDIFJPVVRJTkVTID09PT09PT09PT09
PT09PT09PSAqLwogCit2b2lkIG5tX29zX3NlbGluZm9faW5pdChOTV9TRUxJTkZPX1QgKnNpKSB7
CisJc3RydWN0IG10eCAqbSA9ICZzaS0+bTsKKwltdHhfaW5pdChtLCAibm1fa25fbG9jayIsIE5V
TEwsIE1UWF9ERUYpOworCWtubGlzdF9pbml0X210eCgmc2ktPnNpLnNpX25vdGUsIG0pOworfQor
Cit2b2lkCitubV9vc19zZWxpbmZvX3VuaW5pdChOTV9TRUxJTkZPX1QgKnNpKQoreworCS8qIFhY
WCBrcXVldWUoOSkgbmVlZGVkOyB0aGVzZSB3aWxsIG1pcnJvciBrbmxpc3RfaW5pdC4gKi8KKwlr
bmxpc3RfZGVsZXRlKCZzaS0+c2kuc2lfbm90ZSwgY3VydGhyZWFkLCAwIC8qIG5vdCBsb2NrZWQg
Ki8gKTsKKwlrbmxpc3RfZGVzdHJveSgmc2ktPnNpLnNpX25vdGUpOworCS8qIG5vdyB3ZSBkb24n
dCBuZWVkIHRoZSBtdXRleCBhbnltb3JlICovCisJbXR4X2Rlc3Ryb3koJnNpLT5tKTsKK30KKwor
dm9pZCAqCitubV9vc19tYWxsb2Moc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIG1hbGxvYyhzaXpl
LCBNX0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8pOworfQorCit2b2lkICoKK25tX29zX3JlYWxs
b2Modm9pZCAqYWRkciwgc2l6ZV90IG5ld19zaXplLCBzaXplX3Qgb2xkX3NpemUgX191bnVzZWQp
Cit7CisJcmV0dXJuIHJlYWxsb2MoYWRkciwgbmV3X3NpemUsIE1fREVWQlVGLCBNX05PV0FJVCB8
IE1fWkVSTyk7CQorfQorCit2b2lkCitubV9vc19mcmVlKHZvaWQgKmFkZHIpCit7CisJZnJlZShh
ZGRyLCBNX0RFVkJVRik7Cit9CisKK3ZvaWQKK25tX29zX2lmbmV0X2xvY2sodm9pZCkKK3sKKwlJ
Rk5FVF9XTE9DSygpOworfQorCit2b2lkCitubV9vc19pZm5ldF91bmxvY2sodm9pZCkKK3sKKwlJ
Rk5FVF9XVU5MT0NLKCk7Cit9CisKK3N0YXRpYyBpbnQgbmV0bWFwX3VzZV9jb3VudCA9IDA7CisK
K3ZvaWQKK25tX29zX2dldF9tb2R1bGUodm9pZCkKK3sKKwluZXRtYXBfdXNlX2NvdW50Kys7Cit9
CisKK3ZvaWQKK25tX29zX3B1dF9tb2R1bGUodm9pZCkKK3sKKwluZXRtYXBfdXNlX2NvdW50LS07
Cit9CisKK3N0YXRpYyB2b2lkCituZXRtYXBfaWZuZXRfYXJyaXZhbF9oYW5kbGVyKHZvaWQgKmFy
ZyBfX3VudXNlZCwgc3RydWN0IGlmbmV0ICppZnApCit7CisgICAgICAgIG5ldG1hcF91bmRvX3pv
bWJpZShpZnApOworfQorCitzdGF0aWMgdm9pZAorbmV0bWFwX2lmbmV0X2RlcGFydHVyZV9oYW5k
bGVyKHZvaWQgKmFyZyBfX3VudXNlZCwgc3RydWN0IGlmbmV0ICppZnApCit7CisgICAgICAgIG5l
dG1hcF9tYWtlX3pvbWJpZShpZnApOworfQorCitzdGF0aWMgZXZlbnRoYW5kbGVyX3RhZyBubV9p
Zm5ldF9haF90YWc7CitzdGF0aWMgZXZlbnRoYW5kbGVyX3RhZyBubV9pZm5ldF9kaF90YWc7CisK
K2ludAorbm1fb3NfaWZuZXRfaW5pdCh2b2lkKQoreworICAgICAgICBubV9pZm5ldF9haF90YWcg
PQorICAgICAgICAgICAgICAgIEVWRU5USEFORExFUl9SRUdJU1RFUihpZm5ldF9hcnJpdmFsX2V2
ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgbmV0bWFwX2lmbmV0X2Fycml2YWxfaGFuZGxl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIEVWRU5USEFORExFUl9QUklfQU5ZKTsK
KyAgICAgICAgbm1faWZuZXRfZGhfdGFnID0KKyAgICAgICAgICAgICAgICBFVkVOVEhBTkRMRVJf
UkVHSVNURVIoaWZuZXRfZGVwYXJ0dXJlX2V2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
bmV0bWFwX2lmbmV0X2RlcGFydHVyZV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
TlVMTCwgRVZFTlRIQU5ETEVSX1BSSV9BTlkpOworICAgICAgICByZXR1cm4gMDsKK30KKwordm9p
ZAorbm1fb3NfaWZuZXRfZmluaSh2b2lkKQoreworICAgICAgICBFVkVOVEhBTkRMRVJfREVSRUdJ
U1RFUihpZm5ldF9hcnJpdmFsX2V2ZW50LAorICAgICAgICAgICAgICAgIG5tX2lmbmV0X2FoX3Rh
Zyk7CisgICAgICAgIEVWRU5USEFORExFUl9ERVJFR0lTVEVSKGlmbmV0X2RlcGFydHVyZV9ldmVu
dCwKKyAgICAgICAgICAgICAgICBubV9pZm5ldF9kaF90YWcpOworfQorCiByYXdzdW1fdAotbm1f
Y3N1bV9yYXcodWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbiwgcmF3c3VtX3QgY3VyX3N1bSkKK25t
X29zX2NzdW1fcmF3KHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBsZW4sIHJhd3N1bV90IGN1cl9zdW0p
CiB7CiAJLyogVE9ETyBYWFggcGxlYXNlIHVzZSB0aGUgRnJlZUJTRCBpbXBsZW1lbnRhdGlvbiBm
b3IgdGhpcy4gKi8KIAl1aW50MTZfdCAqd29yZHMgPSAodWludDE2X3QgKilkYXRhOwpAQCAtODcs
NyArMTkyLDcgQEAKICAqIHJldHVybiB2YWx1ZSBpcyBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCiAg
Ki8KIHVpbnQxNl90Ci1ubV9jc3VtX2ZvbGQocmF3c3VtX3QgY3VyX3N1bSkKK25tX29zX2NzdW1f
Zm9sZChyYXdzdW1fdCBjdXJfc3VtKQogewogCS8qIFRPRE8gWFhYIHBsZWFzZSB1c2UgdGhlIEZy
ZWVCU0QgaW1wbGVtZW50YXRpb24gZm9yIHRoaXMuICovCiAJd2hpbGUgKGN1cl9zdW0gPj4gMTYp
CkBAIC05NiwxNyArMjAxLDE3IEBACiAJcmV0dXJuIGh0b2JlMTYoKH5jdXJfc3VtKSAmIDB4RkZG
Rik7CiB9CiAKLXVpbnQxNl90IG5tX2NzdW1faXB2NChzdHJ1Y3Qgbm1faXBoZHIgKmlwaCkKK3Vp
bnQxNl90IG5tX29zX2NzdW1faXB2NChzdHJ1Y3Qgbm1faXBoZHIgKmlwaCkKIHsKICNpZiAwCiAJ
cmV0dXJuIGluX2Nrc3VtX2hkcigodm9pZCAqKWlwaCk7CiAjZWxzZQotCXJldHVybiBubV9jc3Vt
X2ZvbGQobm1fY3N1bV9yYXcoKHVpbnQ4X3QqKWlwaCwgc2l6ZW9mKHN0cnVjdCBubV9pcGhkciks
IDApKTsKKwlyZXR1cm4gbm1fb3NfY3N1bV9mb2xkKG5tX29zX2NzdW1fcmF3KCh1aW50OF90Kilp
cGgsIHNpemVvZihzdHJ1Y3Qgbm1faXBoZHIpLCAwKSk7CiAjZW5kaWYKIH0KIAogdm9pZAotbm1f
Y3N1bV90Y3B1ZHBfaXB2NChzdHJ1Y3Qgbm1faXBoZHIgKmlwaCwgdm9pZCAqZGF0YSwKK25tX29z
X2NzdW1fdGNwdWRwX2lwdjQoc3RydWN0IG5tX2lwaGRyICppcGgsIHZvaWQgKmRhdGEsCiAJCQkJ
CXNpemVfdCBkYXRhbGVuLCB1aW50MTZfdCAqY2hlY2spCiB7CiAjaWZkZWYgSU5FVApAQCAtMTE4
LDcgKzIyMyw3IEBACiAJLyogQ29tcHV0ZSB0aGUgY2hlY2tzdW0gb24gVENQL1VEUCBoZWFkZXIg
KyBwYXlsb2FkCiAJICogKGluY2x1ZGVzIHRoZSBwc2V1ZG8taGVhZGVyKS4KIAkgKi8KLQkqY2hl
Y2sgPSBubV9jc3VtX2ZvbGQobm1fY3N1bV9yYXcoZGF0YSwgZGF0YWxlbiwgMCkpOworCSpjaGVj
ayA9IG5tX29zX2NzdW1fZm9sZChubV9vc19jc3VtX3JhdyhkYXRhLCBkYXRhbGVuLCAwKSk7CiAj
ZWxzZQogCXN0YXRpYyBpbnQgbm90c3VwcG9ydGVkID0gMDsKIAlpZiAoIW5vdHN1cHBvcnRlZCkg
ewpAQCAtMTI5LDEyICsyMzQsMTIgQEAKIH0KIAogdm9pZAotbm1fY3N1bV90Y3B1ZHBfaXB2Nihz
dHJ1Y3Qgbm1faXB2NmhkciAqaXA2aCwgdm9pZCAqZGF0YSwKK25tX29zX2NzdW1fdGNwdWRwX2lw
djYoc3RydWN0IG5tX2lwdjZoZHIgKmlwNmgsIHZvaWQgKmRhdGEsCiAJCQkJCXNpemVfdCBkYXRh
bGVuLCB1aW50MTZfdCAqY2hlY2spCiB7CiAjaWZkZWYgSU5FVDYKIAkqY2hlY2sgPSBpbjZfY2tz
dW1fcHNldWRvKCh2b2lkKilpcDZoLCBkYXRhbGVuLCBpcDZoLT5uZXh0aGRyLCAwKTsKLQkqY2hl
Y2sgPSBubV9jc3VtX2ZvbGQobm1fY3N1bV9yYXcoZGF0YSwgZGF0YWxlbiwgMCkpOworCSpjaGVj
ayA9IG5tX29zX2NzdW1fZm9sZChubV9vc19jc3VtX3JhdyhkYXRhLCBkYXRhbGVuLCAwKSk7CiAj
ZWxzZQogCXN0YXRpYyBpbnQgbm90c3VwcG9ydGVkID0gMDsKIAlpZiAoIW5vdHN1cHBvcnRlZCkg
ewpAQCAtMTQ0LDEzICsyNDksNDEgQEAKICNlbmRpZgogfQogCisvKiBvbiBGcmVlQlNEIHdlIHNl
bmQgdXAgb25lIHBhY2tldCBhdCBhIHRpbWUgKi8KK3ZvaWQgKgorbm1fb3Nfc2VuZF91cChzdHJ1
Y3QgaWZuZXQgKmlmcCwgc3RydWN0IG1idWYgKm0sIHN0cnVjdCBtYnVmICpwcmV2KQoreworCisJ
TkEoaWZwKS0+aWZfaW5wdXQoaWZwLCBtKTsKKwlyZXR1cm4gTlVMTDsKK30KKworaW50CitubV9v
c19tYnVmX2hhc19vZmZsZChzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKwlyZXR1cm4gbS0+bV9wa3RoZHIu
Y3N1bV9mbGFncyAmIChDU1VNX1RDUCB8IENTVU1fVURQIHwgQ1NVTV9TQ1RQIHwKKwkJCQkJIENT
VU1fVENQX0lQVjYgfCBDU1VNX1VEUF9JUFY2IHwKKwkJCQkJIENTVU1fU0NUUF9JUFY2IHwgQ1NV
TV9UU08pOworfQorCitzdGF0aWMgdm9pZAorZnJlZWJzZF9nZW5lcmljX3J4X2hhbmRsZXIoc3Ry
dWN0IGlmbmV0ICppZnAsIHN0cnVjdCBtYnVmICptKQoreworCXN0cnVjdCBuZXRtYXBfZ2VuZXJp
Y19hZGFwdGVyICpnbmEgPQorCQkJKHN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICopTkEo
aWZwKTsKKwlpbnQgc3RvbGVuID0gZ2VuZXJpY19yeF9oYW5kbGVyKGlmcCwgbSk7CisKKwlpZiAo
IXN0b2xlbikgeworCQlnbmEtPnNhdmVfaWZfaW5wdXQoaWZwLCBtKTsKKwl9Cit9CiAKIC8qCiAg
KiBJbnRlcmNlcHQgdGhlIHJ4IHJvdXRpbmUgaW4gdGhlIHN0YW5kYXJkIGRldmljZSBkcml2ZXIu
CiAgKiBTZWNvbmQgYXJndW1lbnQgaXMgbm9uLXplcm8gdG8gaW50ZXJjZXB0LCAwIHRvIHJlc3Rv
cmUKICAqLwogaW50Ci1uZXRtYXBfY2F0Y2hfcngoc3RydWN0IG5ldG1hcF9nZW5lcmljX2FkYXB0
ZXIgKmduYSwgaW50IGludGVyY2VwdCkKK25tX29zX2NhdGNoX3J4KHN0cnVjdCBuZXRtYXBfZ2Vu
ZXJpY19hZGFwdGVyICpnbmEsIGludCBpbnRlcmNlcHQpCiB7CiAJc3RydWN0IG5ldG1hcF9hZGFw
dGVyICpuYSA9ICZnbmEtPnVwLnVwOwogCXN0cnVjdCBpZm5ldCAqaWZwID0gbmEtPmlmcDsKQEAg
LTE2MSw3ICsyOTQsNyBAQAogCQkJcmV0dXJuIEVJTlZBTDsgLyogYWxyZWFkeSBzZXQgKi8KIAkJ
fQogCQlnbmEtPnNhdmVfaWZfaW5wdXQgPSBpZnAtPmlmX2lucHV0OwotCQlpZnAtPmlmX2lucHV0
ID0gZ2VuZXJpY19yeF9oYW5kbGVyOworCQlpZnAtPmlmX2lucHV0ID0gZnJlZWJzZF9nZW5lcmlj
X3J4X2hhbmRsZXI7CiAJfSBlbHNlIHsKIAkJaWYgKCFnbmEtPnNhdmVfaWZfaW5wdXQpewogCQkJ
RCgiY2Fubm90IHJlc3RvcmUiKTsKQEAgLTE4MSwxOCArMzE0LDIwIEBACiAgKiBTZWNvbmQgYXJn
dW1lbnQgaXMgbm9uLXplcm8gdG8gaW50ZXJjZXB0LCAwIHRvIHJlc3RvcmUuCiAgKiBPbiBmcmVl
YnNkIHdlIGp1c3QgaW50ZXJjZXB0IGlmX3RyYW5zbWl0LgogICovCi12b2lkCi1uZXRtYXBfY2F0
Y2hfdHgoc3RydWN0IG5ldG1hcF9nZW5lcmljX2FkYXB0ZXIgKmduYSwgaW50IGVuYWJsZSkKK2lu
dAorbm1fb3NfY2F0Y2hfdHgoc3RydWN0IG5ldG1hcF9nZW5lcmljX2FkYXB0ZXIgKmduYSwgaW50
IGludGVyY2VwdCkKIHsKIAlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hID0gJmduYS0+dXAudXA7
CiAJc3RydWN0IGlmbmV0ICppZnAgPSBuZXRtYXBfZ2VuZXJpY19nZXRpZnAoZ25hKTsKIAotCWlm
IChlbmFibGUpIHsKKwlpZiAoaW50ZXJjZXB0KSB7CiAJCW5hLT5pZl90cmFuc21pdCA9IGlmcC0+
aWZfdHJhbnNtaXQ7CiAJCWlmcC0+aWZfdHJhbnNtaXQgPSBuZXRtYXBfdHJhbnNtaXQ7CiAJfSBl
bHNlIHsKIAkJaWZwLT5pZl90cmFuc21pdCA9IG5hLT5pZl90cmFuc21pdDsKIAl9CisKKwlyZXR1
cm4gMDsKIH0KIAogCkBAIC0yMTMsNDAgKzM0OCw0NCBAQAogICoKICAqLwogaW50Ci1nZW5lcmlj
X3htaXRfZnJhbWUoc3RydWN0IGlmbmV0ICppZnAsIHN0cnVjdCBtYnVmICptLAotCXZvaWQgKmFk
ZHIsIHVfaW50IGxlbiwgdV9pbnQgcmluZ19ucikKK25tX29zX2dlbmVyaWNfeG1pdF9mcmFtZShz
dHJ1Y3Qgbm1fb3NfZ2VuX2FyZyAqYSkKIHsKIAlpbnQgcmV0OworCXVfaW50IGxlbiA9IGEtPmxl
bjsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IGEtPmlmcDsKKwlzdHJ1Y3QgbWJ1ZiAqbSA9IGEtPm07
CiAKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDExMDAwMDAKIAkvKgotCSAqIFRoZSBtYnVmIHNo
b3VsZCBiZSBhIGNsdXN0ZXIgZnJvbSBvdXIgc3BlY2lhbCBwb29sLAotCSAqIHNvIHdlIGRvIG5v
dCBuZWVkIHRvIGRvIGFuIG1fY29weWJhY2sgYnV0IGp1c3QgY29weQotCSAqIChhbmQgZXZlbnR1
YWxseSwganVzdCByZWZlcmVuY2UgdGhlIG5ldG1hcCBidWZmZXIpCisJICogT2xkIEZyZWVCU0Qg
dmVyc2lvbnMuIFRoZSBtYnVmIGhhcyBhIGNsdXN0ZXIgYXR0YWNoZWQsCisJICogd2UgbmVlZCB0
byBjb3B5IGZyb20gdGhlIGNsdXN0ZXIgdG8gdGhlIG5ldG1hcCBidWZmZXIuCiAJICovCi0KLQlp
ZiAoR0VUX01CVUZfUkVGQ05UKG0pICE9IDEpIHsKLQkJRCgiaW52YWxpZCByZWZjbnQgJWQgZm9y
ICVwIiwKLQkJCUdFVF9NQlVGX1JFRkNOVChtKSwgbSk7CisJaWYgKE1CVUZfUkVGQ05UKG0pICE9
IDEpIHsKKwkJRCgiaW52YWxpZCByZWZjbnQgJWQgZm9yICVwIiwgTUJVRl9SRUZDTlQobSksIG0p
OwogCQlwYW5pYygiaW4gZ2VuZXJpY194bWl0X2ZyYW1lIik7CiAJfQotCS8vIFhYWCB0aGUgZXh0
X3NpemUgY2hlY2sgaXMgdW5uZWNlc3NhcnkgaWYgd2UgbGluayB0aGUgbmV0bWFwIGJ1ZgogCWlm
IChtLT5tX2V4dC5leHRfc2l6ZSA8IGxlbikgewogCQlSRCg1LCAic2l6ZSAlZCA8IGxlbiAlZCIs
IG0tPm1fZXh0LmV4dF9zaXplLCBsZW4pOwogCQlsZW4gPSBtLT5tX2V4dC5leHRfc2l6ZTsKIAl9
Ci0JaWYgKDApIHsgLyogWFhYIHNlZW1zIHRvIGhhdmUgbmVnbGlnaWJsZSBiZW5lZml0cyAqLwot
CQltLT5tX2V4dC5leHRfYnVmID0gbS0+bV9kYXRhID0gYWRkcjsKLQl9IGVsc2UgewotCQliY29w
eShhZGRyLCBtLT5tX2RhdGEsIGxlbik7Ci0JfQorCWJjb3B5KGEtPmFkZHIsIG0tPm1fZGF0YSwg
bGVuKTsKKyNlbHNlICAvKiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDAwICovCisJLyogTmV3
IEZyZWVCU0QgdmVyc2lvbnMuIExpbmsgdGhlIGV4dGVybmFsIHN0b3JhZ2UgdG8KKwkgKiB0aGUg
bmV0bWFwIGJ1ZmZlciwgc28gdGhhdCBubyBjb3B5IGlzIG5lY2Vzc2FyeS4gKi8KKwltLT5tX2V4
dC5leHRfYnVmID0gbS0+bV9kYXRhID0gYS0+YWRkcjsKKwltLT5tX2V4dC5leHRfc2l6ZSA9IGxl
bjsKKyNlbmRpZiAvKiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDAwICovCisKIAltLT5tX2xl
biA9IG0tPm1fcGt0aGRyLmxlbiA9IGxlbjsKLQkvLyBpbmMgcmVmY291bnQuIEFsbCBvdXJzLCB3
ZSBjb3VsZCBza2lwIHRoZSBhdG9taWMKLQlhdG9taWNfZmV0Y2hhZGRfaW50KFBOVF9NQlVGX1JF
RkNOVChtKSwgMSk7CisKKwkvKiBtYnVmIHJlZmNudCBpcyBub3QgY29udGVuZGVkLCBubyBuZWVk
IHRvIHVzZSBhdG9taWMKKwkgKiAoYSBtZW1vcnkgYmFycmllciBpcyBlbm91Z2gpLiAqLworCVNF
VF9NQlVGX1JFRkNOVChtLCAyKTsKIAlNX0hBU0hUWVBFX1NFVChtLCBNX0hBU0hUWVBFX09QQVFV
RSk7Ci0JbS0+bV9wa3RoZHIuZmxvd2lkID0gcmluZ19ucjsKKwltLT5tX3BrdGhkci5mbG93aWQg
PSBhLT5yaW5nX25yOwogCW0tPm1fcGt0aGRyLnJjdmlmID0gaWZwOyAvKiB1c2VkIGZvciB0eCBu
b3RpZmljYXRpb24gKi8KIAlyZXQgPSBOQShpZnApLT5pZl90cmFuc21pdChpZnAsIG0pOwotCXJl
dHVybiByZXQ7CisJcmV0dXJuIHJldCA/IC0xIDogMDsKIH0KIAogCkBAIC0yNjMsNyArNDAyLDcg
QEAKICAqIHdheSB0byBleHRyYWN0IHRoZSBpbmZvIGZyb20gdGhlIGlmcAogICovCiBpbnQKLWdl
bmVyaWNfZmluZF9udW1fZGVzYyhzdHJ1Y3QgaWZuZXQgKmlmcCwgdW5zaWduZWQgaW50ICp0eCwg
dW5zaWduZWQgaW50ICpyeCkKK25tX29zX2dlbmVyaWNfZmluZF9udW1fZGVzYyhzdHJ1Y3QgaWZu
ZXQgKmlmcCwgdW5zaWduZWQgaW50ICp0eCwgdW5zaWduZWQgaW50ICpyeCkKIHsKIAlEKCJjYWxs
ZWQsIGluIHR4ICVkIHJ4ICVkIiwgKnR4LCAqcngpOwogCXJldHVybiAwOwpAQCAtMjcxLDE2ICs0
MTAsMjMgQEAKIAogCiB2b2lkCi1nZW5lcmljX2ZpbmRfbnVtX3F1ZXVlcyhzdHJ1Y3QgaWZuZXQg
KmlmcCwgdV9pbnQgKnR4cSwgdV9pbnQgKnJ4cSkKK25tX29zX2dlbmVyaWNfZmluZF9udW1fcXVl
dWVzKHN0cnVjdCBpZm5ldCAqaWZwLCB1X2ludCAqdHhxLCB1X2ludCAqcnhxKQogewogCUQoImNh
bGxlZCwgaW4gdHhxICVkIHJ4cSAlZCIsICp0eHEsICpyeHEpOwogCSp0eHEgPSBuZXRtYXBfZ2Vu
ZXJpY19yaW5nczsKIAkqcnhxID0gbmV0bWFwX2dlbmVyaWNfcmluZ3M7CiB9CiAKK3ZvaWQKK25t
X29zX2dlbmVyaWNfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICpn
bmEpCit7CisKKwlnbmEtPnJ4c2cgPSAxOyAvKiBTdXBwb3J0ZWQgdGhyb3VnaCBtX2NvcHlkYXRh
LiAqLworCWduYS0+dHhxZGlzYyA9IDA7IC8qIE5vdCBzdXBwb3J0ZWQuICovCit9CiAKIHZvaWQK
LW5ldG1hcF9taXRpZ2F0aW9uX2luaXQoc3RydWN0IG5tX2dlbmVyaWNfbWl0ICptaXQsIGludCBp
ZHgsIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEpCitubV9vc19taXRpZ2F0aW9uX2luaXQoc3Ry
dWN0IG5tX2dlbmVyaWNfbWl0ICptaXQsIGludCBpZHgsIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAq
bmEpCiB7CiAJTkQoImNhbGxlZCIpOwogCW1pdC0+bWl0X3BlbmRpbmcgPSAwOwpAQCAtMjkwLDIx
ICs0MzYsMjEgQEAKIAogCiB2b2lkCi1uZXRtYXBfbWl0aWdhdGlvbl9zdGFydChzdHJ1Y3Qgbm1f
Z2VuZXJpY19taXQgKm1pdCkKK25tX29zX21pdGlnYXRpb25fc3RhcnQoc3RydWN0IG5tX2dlbmVy
aWNfbWl0ICptaXQpCiB7CiAJTkQoImNhbGxlZCIpOwogfQogCiAKIHZvaWQKLW5ldG1hcF9taXRp
Z2F0aW9uX3Jlc3RhcnQoc3RydWN0IG5tX2dlbmVyaWNfbWl0ICptaXQpCitubV9vc19taXRpZ2F0
aW9uX3Jlc3RhcnQoc3RydWN0IG5tX2dlbmVyaWNfbWl0ICptaXQpCiB7CiAJTkQoImNhbGxlZCIp
OwogfQogCiAKIGludAotbmV0bWFwX21pdGlnYXRpb25fYWN0aXZlKHN0cnVjdCBubV9nZW5lcmlj
X21pdCAqbWl0KQorbm1fb3NfbWl0aWdhdGlvbl9hY3RpdmUoc3RydWN0IG5tX2dlbmVyaWNfbWl0
ICptaXQpCiB7CiAJTkQoImNhbGxlZCIpOwogCXJldHVybiAwOwpAQCAtMzEyLDcgKzQ1OCw3IEBA
CiAKIAogdm9pZAotbmV0bWFwX21pdGlnYXRpb25fY2xlYW51cChzdHJ1Y3Qgbm1fZ2VuZXJpY19t
aXQgKm1pdCkKK25tX29zX21pdGlnYXRpb25fY2xlYW51cChzdHJ1Y3Qgbm1fZ2VuZXJpY19taXQg
Km1pdCkKIHsKIAlORCgiY2FsbGVkIik7CiB9CkBAIC0zNDIsNyArNDg4LDcgQEAKIH0gbm1fdmlf
aW5kaWNlczsKIAogdm9pZAotbm1fdmlfaW5pdF9pbmRleCh2b2lkKQorbm1fb3NfdmlfaW5pdF9p
bmRleCh2b2lkKQogewogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBOTV9WSV9NQVg7IGkrKykK
QEAgLTM5OCw3ICs1NDQsNyBAQAogICogaW5jcmVtZW50IHRoaXMgcmVmY291bnQgb24gaWZfYXR0
YWNoKCkuCiAgKi8KIGludAotbm1fdmlfcGVyc2lzdChjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qg
aWZuZXQgKipyZXQpCitubV9vc192aV9wZXJzaXN0KGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBp
Zm5ldCAqKnJldCkKIHsKIAlzdHJ1Y3QgaWZuZXQgKmlmcDsKIAl1X3Nob3J0IG1hY2FkZHJfaGk7
CkBAIC00MzgsMTUgKzU4NCwyMTUgQEAKIAkqcmV0ID0gaWZwOwogCXJldHVybiAwOwogfQorCiAv
KiB1bnJlZ2lzdGVyIGZyb20gdGhlIHN5c3RlbSBhbmQgZHJvcCB0aGUgZmluYWwgcmVmY291bnQg
Ki8KIHZvaWQKLW5tX3ZpX2RldGFjaChzdHJ1Y3QgaWZuZXQgKmlmcCkKK25tX29zX3ZpX2RldGFj
aChzdHJ1Y3QgaWZuZXQgKmlmcCkKIHsKIAlubV92aV9mcmVlX2luZGV4KCgoY2hhciAqKUlGX0xM
QUREUihpZnApKVs1XSk7CiAJZXRoZXJfaWZkZXRhY2goaWZwKTsKIAlpZl9mcmVlKGlmcCk7CiB9
CiAKKy8qID09PT09PT09PT09PT09PT09PT09PT09PSBQVE5FVE1BUCBTVVBQT1JUID09PT09PT09
PT09PT09PT09PT09PT09PT09ICovCisKKyNpZmRlZiBXSVRIX1BUTkVUTUFQX0dVRVNUCisjaW5j
bHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8bWFjaGlu
ZS9idXMuaD4gICAgICAgIC8qIGJ1c19kbWFtYXBfKiAqLworI2luY2x1ZGUgPG1hY2hpbmUvcmVz
b3VyY2UuaD4KKyNpbmNsdWRlIDxkZXYvcGNpL3BjaXZhci5oPgorI2luY2x1ZGUgPGRldi9wY2kv
cGNpcmVnLmg+CisvKgorICogcHRuZXRtYXAgbWVtb3J5IGRldmljZSAobWVtZGV2KSBmb3IgZnJl
ZWJzZCBndWVzdCwKKyAqIHNzZWQgdG8gZXhwb3NlIGhvc3QgbmV0bWFwIG1lbW9yeSB0byB0aGUg
Z3Vlc3QgdGhyb3VnaCBhIFBDSSBCQVIuCisgKi8KKworLyoKKyAqIHB0bmV0bWFwIG1lbWRldiBw
cml2YXRlIGRhdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBwdG5ldG1hcF9tZW1kZXYgeworCWRl
dmljZV90IGRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnBjaV9pbzsKKwlzdHJ1Y3QgcmVzb3VyY2Ug
KnBjaV9tZW07CisJc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1fbWVtOworfTsKKworc3RhdGljIGlu
dAlwdG5fbWVtZGV2X3Byb2JlKGRldmljZV90KTsKK3N0YXRpYyBpbnQJcHRuX21lbWRldl9hdHRh
Y2goZGV2aWNlX3QpOworc3RhdGljIGludAlwdG5fbWVtZGV2X2RldGFjaChkZXZpY2VfdCk7Citz
dGF0aWMgaW50CXB0bl9tZW1kZXZfc2h1dGRvd24oZGV2aWNlX3QpOworCitzdGF0aWMgZGV2aWNl
X21ldGhvZF90IHB0bl9tZW1kZXZfbWV0aG9kc1tdID0geworCURFVk1FVEhPRChkZXZpY2VfcHJv
YmUsIHB0bl9tZW1kZXZfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCBwdG5fbWVt
ZGV2X2F0dGFjaCksCisJREVWTUVUSE9EKGRldmljZV9kZXRhY2gsIHB0bl9tZW1kZXZfZGV0YWNo
KSwKKwlERVZNRVRIT0QoZGV2aWNlX3NodXRkb3duLCBwdG5fbWVtZGV2X3NodXRkb3duKSwKKwlE
RVZNRVRIT0RfRU5ECit9OworCitzdGF0aWMgZHJpdmVyX3QgcHRuX21lbWRldl9kcml2ZXIgPSB7
CisJUFRORVRNQVBfTUVNREVWX05BTUUsCisJcHRuX21lbWRldl9tZXRob2RzLAorCXNpemVvZihz
dHJ1Y3QgcHRuZXRtYXBfbWVtZGV2KSwKK307CisKKy8qIFdlIHVzZSAoU0lfT1JERVJfTUlERExF
KzEpIGhlcmUsIHNlZSBERVZfTU9EVUxFX09SREVSRUQoKSBpbnZvY2F0aW9uCisgKiBiZWxvdy4g
Ki8KK3N0YXRpYyBkZXZjbGFzc190IHB0bmV0bWFwX2RldmNsYXNzOworRFJJVkVSX01PRFVMRV9P
UkRFUkVEKHB0bl9tZW1kZXYsIHBjaSwgcHRuX21lbWRldl9kcml2ZXIsIHB0bmV0bWFwX2RldmNs
YXNzLAorCQkgICAgICBOVUxMLCBOVUxMLCBTSV9PUkRFUl9NSURETEUgKyAxKTsKKworLyoKKyAq
IE1hcCBob3N0IG5ldG1hcCBtZW1vcnkgdGhyb3VnaCBQQ0ktQkFSIGluIHRoZSBndWVzdCBPUywK
KyAqIHJldHVybmluZyBwaHlzaWNhbCAobm1fcGFkZHIpIGFuZCB2aXJ0dWFsIChubV9hZGRyKSBh
ZGRyZXNzZXMKKyAqIG9mIHRoZSBuZXRtYXAgbWVtb3J5IG1hcHBlZCBpbiB0aGUgZ3Vlc3QuCisg
Ki8KK2ludAorbm1fb3NfcHRfbWVtZGV2X2lvbWFwKHN0cnVjdCBwdG5ldG1hcF9tZW1kZXYgKnB0
bl9kZXYsIHZtX3BhZGRyX3QgKm5tX3BhZGRyLAorCQkgICAgICB2b2lkICoqbm1fYWRkciwgdWlu
dDY0X3QgKm1lbV9zaXplKQoreworCWludCByaWQ7CisKKwlEKCJwdG5fbWVtZGV2X2RyaXZlciBp
b21hcCIpOworCisJcmlkID0gUENJUl9CQVIoUFRORVRNQVBfTUVNX1BDSV9CQVIpOworCSptZW1f
c2l6ZSA9IGJ1c19yZWFkXzQocHRuX2Rldi0+cGNpX2lvLCBQVE5FVF9NREVWX0lPX01FTVNJWkVf
SEkpOworCSptZW1fc2l6ZSA9IGJ1c19yZWFkXzQocHRuX2Rldi0+cGNpX2lvLCBQVE5FVF9NREVW
X0lPX01FTVNJWkVfTE8pIHwKKwkJCSgqbWVtX3NpemUgPDwgMzIpOworCisJLyogbWFwIG1lbW9y
eSBhbGxvY2F0b3IgKi8KKwlwdG5fZGV2LT5wY2lfbWVtID0gYnVzX2FsbG9jX3Jlc291cmNlKHB0
bl9kZXYtPmRldiwgU1lTX1JFU19NRU1PUlksCisJCQkmcmlkLCAwLCB+MCwgKm1lbV9zaXplLCBS
Rl9BQ1RJVkUpOworCWlmIChwdG5fZGV2LT5wY2lfbWVtID09IE5VTEwpIHsKKwkJKm5tX3BhZGRy
ID0gMDsKKwkJKm5tX2FkZHIgPSAwOworCQlyZXR1cm4gRU5PTUVNOworCX0KKworCSpubV9wYWRk
ciA9IHJtYW5fZ2V0X3N0YXJ0KHB0bl9kZXYtPnBjaV9tZW0pOworCSpubV9hZGRyID0gcm1hbl9n
ZXRfdmlydHVhbChwdG5fZGV2LT5wY2lfbWVtKTsKKworCUQoIj09PSBCQVIgJWQgc3RhcnQgJWx4
IGxlbiAlbHggbWVtX3NpemUgJWx4ID09PSIsCisJCQlQVE5FVE1BUF9NRU1fUENJX0JBUiwKKwkJ
CSh1bnNpZ25lZCBsb25nKSgqbm1fcGFkZHIpLAorCQkJKHVuc2lnbmVkIGxvbmcpcm1hbl9nZXRf
c2l6ZShwdG5fZGV2LT5wY2lfbWVtKSwKKwkJCSh1bnNpZ25lZCBsb25nKSptZW1fc2l6ZSk7CisJ
cmV0dXJuICgwKTsKK30KKwordWludDMyX3QKK25tX29zX3B0X21lbWRldl9pb3JlYWQoc3RydWN0
IHB0bmV0bWFwX21lbWRldiAqcHRuX2RldiwgdW5zaWduZWQgaW50IHJlZykKK3sKKwlyZXR1cm4g
YnVzX3JlYWRfNChwdG5fZGV2LT5wY2lfaW8sIHJlZyk7Cit9CisKKy8qIFVubWFwIGhvc3QgbmV0
bWFwIG1lbW9yeS4gKi8KK3ZvaWQKK25tX29zX3B0X21lbWRldl9pb3VubWFwKHN0cnVjdCBwdG5l
dG1hcF9tZW1kZXYgKnB0bl9kZXYpCit7CisJRCgicHRuX21lbWRldl9kcml2ZXIgaW91bm1hcCIp
OworCisJaWYgKHB0bl9kZXYtPnBjaV9tZW0pIHsKKwkJYnVzX3JlbGVhc2VfcmVzb3VyY2UocHRu
X2Rldi0+ZGV2LCBTWVNfUkVTX01FTU9SWSwKKwkJCVBDSVJfQkFSKFBUTkVUTUFQX01FTV9QQ0lf
QkFSKSwgcHRuX2Rldi0+cGNpX21lbSk7CisJCXB0bl9kZXYtPnBjaV9tZW0gPSBOVUxMOworCX0K
K30KKworLyogRGV2aWNlIGlkZW50aWZpY2F0aW9uIHJvdXRpbmUsIHJldHVybiBCVVNfUFJPQkVf
REVGQVVMVCBvbiBzdWNjZXNzLAorICogcG9zaXRpdmUgb24gZmFpbHVyZSAqLworc3RhdGljIGlu
dAorcHRuX21lbWRldl9wcm9iZShkZXZpY2VfdCBkZXYpCit7CisJY2hhciBkZXNjWzI1Nl07CisK
KwlpZiAocGNpX2dldF92ZW5kb3IoZGV2KSAhPSBQVE5FVE1BUF9QQ0lfVkVORE9SX0lEKQorCQly
ZXR1cm4gKEVOWElPKTsKKwlpZiAocGNpX2dldF9kZXZpY2UoZGV2KSAhPSBQVE5FVE1BUF9QQ0lf
REVWSUNFX0lEKQorCQlyZXR1cm4gKEVOWElPKTsKKworCXNucHJpbnRmKGRlc2MsIHNpemVvZihk
ZXNjKSwgIiVzIFBDSSBhZGFwdGVyIiwKKwkJCVBUTkVUTUFQX01FTURFVl9OQU1FKTsKKwlkZXZp
Y2Vfc2V0X2Rlc2NfY29weShkZXYsIGRlc2MpOworCisJcmV0dXJuIChCVVNfUFJPQkVfREVGQVVM
VCk7Cit9CisKKy8qIERldmljZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLiAqLworc3RhdGljIGlu
dAorcHRuX21lbWRldl9hdHRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCBwdG5ldG1hcF9t
ZW1kZXYgKnB0bl9kZXY7CisJaW50IHJpZDsKKwl1aW50MTZfdCBtZW1faWQ7CisKKwlEKCJwdG5f
bWVtZGV2X2RyaXZlciBhdHRhY2giKTsKKworCXB0bl9kZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl
dik7CisJcHRuX2Rldi0+ZGV2ID0gZGV2OworCisJcGNpX2VuYWJsZV9idXNtYXN0ZXIoZGV2KTsK
KworCXJpZCA9IFBDSVJfQkFSKFBUTkVUTUFQX0lPX1BDSV9CQVIpOworCXB0bl9kZXYtPnBjaV9p
byA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lPUE9SVCwgJnJpZCwKKwkJ
CQkJCSBSRl9BQ1RJVkUpOworCWlmIChwdG5fZGV2LT5wY2lfaW8gPT0gTlVMTCkgeworCSAgICAg
ICAgZGV2aWNlX3ByaW50ZihkZXYsICJjYW5ub3QgbWFwIEkvTyBzcGFjZVxuIik7CisJICAgICAg
ICByZXR1cm4gKEVOWElPKTsKKwl9CisKKwltZW1faWQgPSBidXNfcmVhZF80KHB0bl9kZXYtPnBj
aV9pbywgUFRORVRfTURFVl9JT19NRU1JRCk7CisKKwkvKiBjcmVhdGUgZ3Vlc3QgYWxsb2NhdG9y
ICovCisJcHRuX2Rldi0+bm1fbWVtID0gbmV0bWFwX21lbV9wdF9ndWVzdF9hdHRhY2gocHRuX2Rl
diwgbWVtX2lkKTsKKwlpZiAocHRuX2Rldi0+bm1fbWVtID09IE5VTEwpIHsKKwkJcHRuX21lbWRl
dl9kZXRhY2goZGV2KTsKKwkgICAgICAgIHJldHVybiAoRU5PTUVNKTsKKwl9CisJbmV0bWFwX21l
bV9nZXQocHRuX2Rldi0+bm1fbWVtKTsKKworCUQoInB0bl9tZW1kZXZfZHJpdmVyIHByb2JlIE9L
IC0gaG9zdF9tZW1faWQ6ICVkIiwgbWVtX2lkKTsKKworCXJldHVybiAoMCk7Cit9CisKKy8qIERl
dmljZSByZW1vdmFsIHJvdXRpbmUuICovCitzdGF0aWMgaW50CitwdG5fbWVtZGV2X2RldGFjaChk
ZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IHB0bmV0bWFwX21lbWRldiAqcHRuX2RldjsKKworCUQo
InB0bl9tZW1kZXZfZHJpdmVyIGRldGFjaCIpOworCXB0bl9kZXYgPSBkZXZpY2VfZ2V0X3NvZnRj
KGRldik7CisKKwlpZiAocHRuX2Rldi0+bm1fbWVtKSB7CisJCW5ldG1hcF9tZW1fcHV0KHB0bl9k
ZXYtPm5tX21lbSk7CisJCXB0bl9kZXYtPm5tX21lbSA9IE5VTEw7CisJfQorCWlmIChwdG5fZGV2
LT5wY2lfbWVtKSB7CisJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19NRU1PUlks
CisJCQlQQ0lSX0JBUihQVE5FVE1BUF9NRU1fUENJX0JBUiksIHB0bl9kZXYtPnBjaV9tZW0pOwor
CQlwdG5fZGV2LT5wY2lfbWVtID0gTlVMTDsKKwl9CisJaWYgKHB0bl9kZXYtPnBjaV9pbykgewor
CQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfSU9QT1JULAorCQkJUENJUl9CQVIo
UFRORVRNQVBfSU9fUENJX0JBUiksIHB0bl9kZXYtPnBjaV9pbyk7CisJCXB0bl9kZXYtPnBjaV9p
byA9IE5VTEw7CisJfQorCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorcHRuX21lbWRl
dl9zaHV0ZG93bihkZXZpY2VfdCBkZXYpCit7CisJRCgicHRuX21lbWRldl9kcml2ZXIgc2h1dGRv
d24iKTsKKwlyZXR1cm4gYnVzX2dlbmVyaWNfc2h1dGRvd24oZGV2KTsKK30KKworI2VuZGlmIC8q
IFdJVEhfUFRORVRNQVBfR1VFU1QgKi8KKwogLyoKICAqIEluIG9yZGVyIHRvIHRyYWNrIHdoZXRo
ZXIgcGFnZXMgYXJlIHN0aWxsIG1hcHBlZCwgd2UgaG9vayBpbnRvCiAgKiB0aGUgc3RhbmRhcmQg
Y2Rldl9wYWdlciBhbmQgaW50ZXJjZXB0IHRoZSBjb25zdHJ1Y3RvciBhbmQKQEAgLTYwNiw3ICs5
NTIsNyBAQAogICogdGhlIGRldmljZSAoL2Rldi9uZXRtYXApIHNvIHdlIGNhbm5vdCBkbyBhbnl0
aGluZyB1c2VmdWwuCiAgKiBUbyB0cmFjayBjbG9zZSgpIG9uIGluZGl2aWR1YWwgZmlsZSBkZXNj
cmlwdG9ycyB3ZSBwYXNzIG5ldG1hcF9kdG9yKCkgdG8KICAqIGRldmZzX3NldF9jZGV2cHJpdigp
IG9uIG9wZW4oKS4gVGhlIEZyZWVCU0Qga2VybmVsIHdpbGwgY2FsbCB0aGUgZGVzdHJ1Y3Rvcgot
ICogd2hlbiB0aGUgbGFzdCBmZCBwb2ludGluZyB0byB0aGUgZGV2aWNlIGlzIGNsb3NlZC4gCisg
KiB3aGVuIHRoZSBsYXN0IGZkIHBvaW50aW5nIHRvIHRoZSBkZXZpY2UgaXMgY2xvc2VkLgogICoK
ICAqIE5vdGUgdGhhdCBGcmVlQlNEIGRvZXMgbm90IGV2ZW4gbXVubWFwKCkgb24gY2xvc2UoKSBz
byB3ZSBhbHNvIGhhdmUKICAqIHRvIHRyYWNrIG1tYXAoKSBvdXJzZWx2ZXMsIGFuZCBwb3N0cG9u
ZSB0aGUgY2FsbCB0bwpAQCAtNjM0LDI2ICs5ODAsMjUxIEBACiAJKHZvaWQpZGV2dHlwZTsKIAko
dm9pZCl0ZDsKIAotCXByaXYgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRtYXBfcHJpdl9kKSwg
TV9ERVZCVUYsCi0JCQkgICAgICBNX05PV0FJVCB8IE1fWkVSTyk7Ci0JaWYgKHByaXYgPT0gTlVM
TCkKLQkJcmV0dXJuIEVOT01FTTsKLQlwcml2LT5ucF9yZWZzID0gMTsKKwlOTUdfTE9DSygpOwor
CXByaXYgPSBuZXRtYXBfcHJpdl9uZXcoKTsKKwlpZiAocHJpdiA9PSBOVUxMKSB7CisJCWVycm9y
ID0gRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CiAJZXJyb3IgPSBkZXZmc19zZXRfY2RldnByaXYo
cHJpdiwgbmV0bWFwX2R0b3IpOwogCWlmIChlcnJvcikgewotCQlmcmVlKHByaXYsIE1fREVWQlVG
KTsKLQl9IGVsc2UgewotCQlOTUdfTE9DSygpOwotCQluZXRtYXBfdXNlX2NvdW50Kys7Ci0JCU5N
R19VTkxPQ0soKTsKKwkJbmV0bWFwX3ByaXZfZGVsZXRlKHByaXYpOwogCX0KK291dDoKKwlOTUdf
VU5MT0NLKCk7CiAJcmV0dXJuIGVycm9yOwogfQogCisvKioqKioqKioqKioqKioqKioqKioga3Ro
cmVhZCB3cmFwcGVyICoqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8c3lzL3N5c3Byb3RvLmg+
Cit1X2ludAorbm1fb3NfbmNwdXModm9pZCkKK3sKKwlyZXR1cm4gbXBfbWF4aWQgKyAxOworfQor
CitzdHJ1Y3Qgbm1fa3RocmVhZF9jdHggeworCXN0cnVjdCB0aHJlYWQgKnVzZXJfdGQ7CQkvKiB0
aHJlYWQgdXNlci1zcGFjZSAoa3RocmVhZCBjcmVhdG9yKSB0byBzZW5kIGlvY3RsICovCisJc3Ry
dWN0IHB0bmV0bWFwX2NmZ2VudHJ5X2JoeXZlCWNmZzsKKworCS8qIHdvcmtlciBmdW5jdGlvbiBh
bmQgcGFyYW1ldGVyICovCisJbm1fa3RocmVhZF93b3JrZXJfZm5fdCB3b3JrZXJfZm47CisJdm9p
ZCAqd29ya2VyX3ByaXZhdGU7CisKKwlzdHJ1Y3Qgbm1fa3RocmVhZCAqbm1rOworCisJLyogaW50
ZWdlciB0byBtYW5hZ2UgbXVsdGlwbGUgd29ya2VyIGNvbnRleHRzIChlLmcuLCBSWCBvciBUWCBv
biBwdG5ldG1hcCkgKi8KKwlsb25nIHR5cGU7Cit9OworCitzdHJ1Y3Qgbm1fa3RocmVhZCB7CisJ
c3RydWN0IHRocmVhZCAqd29ya2VyOworCXN0cnVjdCBtdHggd29ya2VyX2xvY2s7CisJdWludDY0
X3Qgc2NoZWR1bGVkOyAJCS8qIHBlbmRpbmcgd2FrZV91cCByZXF1ZXN0ICovCisJc3RydWN0IG5t
X2t0aHJlYWRfY3R4IHdvcmtlcl9jdHg7CisJaW50IHJ1bjsJCQkvKiB1c2VkIHRvIHN0b3Aga3Ro
cmVhZCAqLworCWludCBhdHRhY2hfdXNlcjsJCS8qIGt0aHJlYWQgYXR0YWNoZWQgdG8gdXNlcl9w
cm9jZXNzICovCisJaW50IGFmZmluaXR5OworfTsKKwordm9pZCBpbmxpbmUKK25tX29zX2t0aHJl
YWRfd2FrZXVwX3dvcmtlcihzdHJ1Y3Qgbm1fa3RocmVhZCAqbm1rKQoreworCS8qCisJICogVGhl
cmUgbWF5IGJlIGEgcmFjZSBiZXR3ZWVuIEZFIGFuZCBCRSwKKwkgKiB3aGljaCBjYWxsIGJvdGgg
dGhpcyBmdW5jdGlvbiwgYW5kIHdvcmtlciBrdGhyZWFkLAorCSAqIHRoYXQgcmVhZHMgbm1rLT5z
Y2hlZHVsZWQuCisJICoKKwkgKiBGb3IgdXMgaXQgaXMgbm90IGltcG9ydGFudCB0aGUgY291bnRl
ciB2YWx1ZSwKKwkgKiBidXQgc2ltcGx5IHRoYXQgaXQgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxh
c3QKKwkgKiB0aW1lIHRoZSBrdGhyZWFkIHNhdyBpdC4KKwkgKi8KKwltdHhfbG9jaygmbm1rLT53
b3JrZXJfbG9jayk7CisJbm1rLT5zY2hlZHVsZWQrKzsKKwlpZiAobm1rLT53b3JrZXJfY3R4LmNm
Zy53Y2hhbikgeworCQl3YWtldXAoKHZvaWQgKilubWstPndvcmtlcl9jdHguY2ZnLndjaGFuKTsK
Kwl9CisJbXR4X3VubG9jaygmbm1rLT53b3JrZXJfbG9jayk7Cit9CisKK3ZvaWQgaW5saW5lCitu
bV9vc19rdGhyZWFkX3NlbmRfaXJxKHN0cnVjdCBubV9rdGhyZWFkICpubWspCit7CisJc3RydWN0
IG5tX2t0aHJlYWRfY3R4ICpjdHggPSAmbm1rLT53b3JrZXJfY3R4OworCWludCBlcnI7CisKKwlp
ZiAoY3R4LT51c2VyX3RkICYmIGN0eC0+Y2ZnLmlvY3RsX2ZkID4gMCkgeworCQllcnIgPSBrZXJu
X2lvY3RsKGN0eC0+dXNlcl90ZCwgY3R4LT5jZmcuaW9jdGxfZmQsIGN0eC0+Y2ZnLmlvY3RsX2Nt
ZCwKKwkJCQkgKGNhZGRyX3QpJmN0eC0+Y2ZnLmlvY3RsX2RhdGEpOworCQlpZiAoZXJyKSB7CisJ
CQlEKCJrZXJuX2lvY3RsIGVycm9yOiAlZCBpb2N0bCBwYXJhbWV0ZXJzOiBmZCAlZCBjb20gJWx1
IGRhdGEgJXAiLAorCQkJCWVyciwgY3R4LT5jZmcuaW9jdGxfZmQsICh1bnNpZ25lZCBsb25nKWN0
eC0+Y2ZnLmlvY3RsX2NtZCwKKwkJCQkmY3R4LT5jZmcuaW9jdGxfZGF0YSk7CisJCX0KKwl9Cit9
CisKK3N0YXRpYyB2b2lkCitubV9rdGhyZWFkX3dvcmtlcih2b2lkICpkYXRhKQoreworCXN0cnVj
dCBubV9rdGhyZWFkICpubWsgPSBkYXRhOworCXN0cnVjdCBubV9rdGhyZWFkX2N0eCAqY3R4ID0g
Jm5tay0+d29ya2VyX2N0eDsKKwl1aW50NjRfdCBvbGRfc2NoZWR1bGVkID0gbm1rLT5zY2hlZHVs
ZWQ7CisKKwlpZiAobm1rLT5hZmZpbml0eSA+PSAwKSB7CisJCXRocmVhZF9sb2NrKGN1cnRocmVh
ZCk7CisJCXNjaGVkX2JpbmQoY3VydGhyZWFkLCBubWstPmFmZmluaXR5KTsKKwkJdGhyZWFkX3Vu
bG9jayhjdXJ0aHJlYWQpOworCX0KKworCXdoaWxlIChubWstPnJ1bikgeworCQkvKgorCQkgKiBj
aGVjayBpZiB0aGUgcGFyZW50IHByb2Nlc3MgZGllcworCQkgKiAod2hlbiBrdGhyZWFkIGlzIGF0
dGFjaGVkIHRvIHVzZXIgcHJvY2VzcykKKwkJICovCisJCWlmIChjdHgtPnVzZXJfdGQpIHsKKwkJ
CVBST0NfTE9DSyhjdXJwcm9jKTsKKwkJCXRocmVhZF9zdXNwZW5kX2NoZWNrKDApOworCQkJUFJP
Q19VTkxPQ0soY3VycHJvYyk7CisJCX0gZWxzZSB7CisJCQlrdGhyZWFkX3N1c3BlbmRfY2hlY2so
KTsKKwkJfQorCisJCS8qCisJCSAqIGlmIHdjaGFuIGlzIG5vdCBkZWZpbmVkLCB3ZSBkb24ndCBo
YXZlIG5vdGlmaWNhdGlvbgorCQkgKiBtZWNoYW5pc20gYW5kIHdlIGNvbnRpbnVhbGx5IGV4ZWN1
dGUgd29ya2VyX2ZuKCkKKwkJICovCisJCWlmICghY3R4LT5jZmcud2NoYW4pIHsKKwkJCWN0eC0+
d29ya2VyX2ZuKGN0eC0+d29ya2VyX3ByaXZhdGUpOyAvKiB3b3JrZXIgYm9keSAqLworCQl9IGVs
c2UgeworCQkJLyogY2hlY2tzIGlmIHRoZXJlIGlzIGEgcGVuZGluZyBub3RpZmljYXRpb24gKi8K
KwkJCW10eF9sb2NrKCZubWstPndvcmtlcl9sb2NrKTsKKwkJCWlmIChsaWtlbHkobm1rLT5zY2hl
ZHVsZWQgIT0gb2xkX3NjaGVkdWxlZCkpIHsKKwkJCQlvbGRfc2NoZWR1bGVkID0gbm1rLT5zY2hl
ZHVsZWQ7CisJCQkJbXR4X3VubG9jaygmbm1rLT53b3JrZXJfbG9jayk7CisKKwkJCQljdHgtPndv
cmtlcl9mbihjdHgtPndvcmtlcl9wcml2YXRlKTsgLyogd29ya2VyIGJvZHkgKi8KKworCQkJCWNv
bnRpbnVlOworCQkJfSBlbHNlIGlmIChubWstPnJ1bikgeworCQkJCS8qIHdhaXQgb24gZXZlbnQg
d2l0aCBvbmUgc2Vjb25kIHRpbWVvdXQgKi8KKwkJCQltc2xlZXBfc3Bpbigodm9pZCAqKWN0eC0+
Y2ZnLndjaGFuLCAmbm1rLT53b3JrZXJfbG9jaywKKwkJCQkJICAgICJubWtfZXYiLCBoeik7CisJ
CQkJbm1rLT5zY2hlZHVsZWQrKzsKKwkJCX0KKwkJCW10eF91bmxvY2soJm5tay0+d29ya2VyX2xv
Y2spOworCQl9CisJfQorCisJa3RocmVhZF9leGl0KCk7Cit9CisKK3ZvaWQKK25tX29zX2t0aHJl
YWRfc2V0X2FmZmluaXR5KHN0cnVjdCBubV9rdGhyZWFkICpubWssIGludCBhZmZpbml0eSkKK3sK
KwlubWstPmFmZmluaXR5ID0gYWZmaW5pdHk7Cit9CisKK3N0cnVjdCBubV9rdGhyZWFkICoKK25t
X29zX2t0aHJlYWRfY3JlYXRlKHN0cnVjdCBubV9rdGhyZWFkX2NmZyAqY2ZnLCB1bnNpZ25lZCBp
bnQgY2ZndHlwZSwKKwkJICAgICB2b2lkICpvcGFxdWUpCit7CisJc3RydWN0IG5tX2t0aHJlYWQg
Km5tayA9IE5VTEw7CisKKwlpZiAoY2ZndHlwZSAhPSBQVE5FVE1BUF9DRkdUWVBFX0JIWVZFKSB7
CisJCUQoIlVuc3VwcG9ydGVkIGNmZ3R5cGUgJXUiLCBjZmd0eXBlKTsKKwkJcmV0dXJuIE5VTEw7
CisJfQorCisJbm1rID0gbWFsbG9jKHNpemVvZigqbm1rKSwgIE1fREVWQlVGLCBNX05PV0FJVCB8
IE1fWkVSTyk7CisJaWYgKCFubWspCisJCXJldHVybiBOVUxMOworCisJbXR4X2luaXQoJm5tay0+
d29ya2VyX2xvY2ssICJubV9rdGhyZWFkIGxvY2siLCBOVUxMLCBNVFhfU1BJTik7CisJbm1rLT53
b3JrZXJfY3R4Lndvcmtlcl9mbiA9IGNmZy0+d29ya2VyX2ZuOworCW5tay0+d29ya2VyX2N0eC53
b3JrZXJfcHJpdmF0ZSA9IGNmZy0+d29ya2VyX3ByaXZhdGU7CisJbm1rLT53b3JrZXJfY3R4LnR5
cGUgPSBjZmctPnR5cGU7CisJbm1rLT5hZmZpbml0eSA9IC0xOworCisJLyogYXR0YWNoIGt0aHJl
YWQgdG8gdXNlciBwcm9jZXNzIChwdG5ldG1hcCkgKi8KKwlubWstPmF0dGFjaF91c2VyID0gY2Zn
LT5hdHRhY2hfdXNlcjsKKworCS8qIHN0b3JlIGtpY2svaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24g
Ki8KKwlpZiAob3BhcXVlKSB7CisJCW5tay0+d29ya2VyX2N0eC5jZmcgPSAqKChzdHJ1Y3QgcHRu
ZXRtYXBfY2ZnZW50cnlfYmh5dmUgKilvcGFxdWUpOworCX0KKworCXJldHVybiBubWs7Cit9CisK
K2ludAorbm1fb3Nfa3RocmVhZF9zdGFydChzdHJ1Y3Qgbm1fa3RocmVhZCAqbm1rKQoreworCXN0
cnVjdCBwcm9jICpwID0gTlVMTDsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKG5tay0+d29ya2Vy
KSB7CisJCXJldHVybiBFQlVTWTsKKwl9CisKKwkvKiBjaGVjayBpZiB3ZSB3YW50IHRvIGF0dGFj
aCBrdGhyZWFkIHRvIHVzZXIgcHJvY2VzcyAqLworCWlmIChubWstPmF0dGFjaF91c2VyKSB7CisJ
CW5tay0+d29ya2VyX2N0eC51c2VyX3RkID0gY3VydGhyZWFkOworCQlwID0gY3VydGhyZWFkLT50
ZF9wcm9jOworCX0KKworCS8qIGVuYWJsZSBrdGhyZWFkIG1haW4gbG9vcCAqLworCW5tay0+cnVu
ID0gMTsKKwkvKiBjcmVhdGUga3RocmVhZCAqLworCWlmKChlcnJvciA9IGt0aHJlYWRfYWRkKG5t
X2t0aHJlYWRfd29ya2VyLCBubWssIHAsCisJCQkmbm1rLT53b3JrZXIsIFJGTk9XQUlUIC8qIHRv
IGJlIGNoZWNrZWQgKi8sIDAsICJubS1rdGhyZWFkLSVsZCIsCisJCQlubWstPndvcmtlcl9jdHgu
dHlwZSkpKSB7CisJCWdvdG8gZXJyOworCX0KKworCUQoIm5tX2t0aHJlYWQgc3RhcnRlZCB0ZCAl
cCIsIG5tay0+d29ya2VyKTsKKworCXJldHVybiAwOworZXJyOgorCUQoIm5tX2t0aHJlYWQgc3Rh
cnQgZmFpbGVkIGVyciAlZCIsIGVycm9yKTsKKwlubWstPndvcmtlciA9IE5VTEw7CisJcmV0dXJu
IGVycm9yOworfQorCit2b2lkCitubV9vc19rdGhyZWFkX3N0b3Aoc3RydWN0IG5tX2t0aHJlYWQg
Km5taykKK3sKKwlpZiAoIW5tay0+d29ya2VyKSB7CisJCXJldHVybjsKKwl9CisJLyogdGVsbCB0
byBrdGhyZWFkIHRvIGV4aXQgZnJvbSBtYWluIGxvb3AgKi8KKwlubWstPnJ1biA9IDA7CisKKwkv
KiB3YWtlIHVwIGt0aHJlYWQgaWYgaXQgc2xlZXBzICovCisJa3RocmVhZF9yZXN1bWUobm1rLT53
b3JrZXIpOworCW5tX29zX2t0aHJlYWRfd2FrZXVwX3dvcmtlcihubWspOworCisJbm1rLT53b3Jr
ZXIgPSBOVUxMOworfQorCit2b2lkCitubV9vc19rdGhyZWFkX2RlbGV0ZShzdHJ1Y3Qgbm1fa3Ro
cmVhZCAqbm1rKQoreworCWlmICghbm1rKQorCQlyZXR1cm47CisJaWYgKG5tay0+d29ya2VyKSB7
CisJCW5tX29zX2t0aHJlYWRfc3RvcChubWspOworCX0KKworCW1lbXNldCgmbm1rLT53b3JrZXJf
Y3R4LmNmZywgMCwgc2l6ZW9mKG5tay0+d29ya2VyX2N0eC5jZmcpKTsKKworCWZyZWUobm1rLCBN
X0RFVkJVRik7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKiBrcXVldWUgc3VwcG9ydCAqKioq
KioqKioqKioqKioqLwogCiAvKgotICogVGhlIE9TX3NlbHdha2V1cCBhbHNvIG5lZWRzIHRvIGlz
c3VlIGEgS05PVEVfVU5MT0NLRUQuCisgKiBubV9vc19zZWx3YWtldXAgYWxzbyBuZWVkcyB0byBp
c3N1ZSBhIEtOT1RFX1VOTE9DS0VELgogICogV2UgdXNlIGEgbm9uLXplcm8gYXJndW1lbnQgdG8g
ZGlzdGluZ3Vpc2ggdGhlIGNhbGwgZnJvbSB0aGUgb25lCiAgKiBpbiBrZXZlbnRfc2NhbigpIHdo
aWNoIGluc3RlYWQgYWxzbyBuZWVkcyB0byBydW4gbmV0bWFwX3BvbGwoKS4KICAqIFRoZSBrbm90
ZSB1c2VzIGEgZ2xvYmFsIG11dGV4IGZvciB0aGUgdGltZSBiZWluZy4gV2UgbWlnaHQKQEAgLTY3
MiwxNyArMTI0MywyMyBAQAogCiAKIHZvaWQKLWZyZWVic2Rfc2Vsd2FrZXVwKHN0cnVjdCBubV9z
ZWxpbmZvICpzaSwgaW50IHByaSkKK25tX29zX3NlbHdha2V1cChzdHJ1Y3Qgbm1fc2VsaW5mbyAq
c2kpCiB7CiAJaWYgKG5ldG1hcF92ZXJib3NlKQogCQlEKCJvbiBrbm90ZSAlcCIsICZzaS0+c2ku
c2lfbm90ZSk7Ci0Jc2Vsd2FrZXVwcHJpKCZzaS0+c2ksIHByaSk7CisJc2Vsd2FrZXVwcHJpKCZz
aS0+c2ksIFBJX05FVCk7CiAJLyogdXNlIGEgbm9uLXplcm8gaGludCB0byB0ZWxsIHRoZSBub3Rp
ZmljYXRpb24gZnJvbSB0aGUKIAkgKiBjYWxsIGRvbmUgaW4ga3F1ZXVlX3NjYW4oKSB3aGljaCB1
c2VzIDAKIAkgKi8KIAlLTk9URV9VTkxPQ0tFRCgmc2ktPnNpLnNpX25vdGUsIDB4MTAwIC8qIG5v
dGlmaWNhdGlvbiAqLyk7CiB9CiAKK3ZvaWQKK25tX29zX3NlbHJlY29yZChzdHJ1Y3QgdGhyZWFk
ICp0ZCwgc3RydWN0IG5tX3NlbGluZm8gKnNpKQoreworCXNlbHJlY29yZCh0ZCwgJnNpLT5zaSk7
Cit9CisKIHN0YXRpYyB2b2lkCiBuZXRtYXBfa25yZGV0YWNoKHN0cnVjdCBrbm90ZSAqa24pCiB7
CkBAIC03MjgsNyArMTMwNSw3IEBACiAJCVJEKDUsICJjdXJ0aHJlYWQgY2hhbmdlZCAlcCAlcCIs
IGN1cnRocmVhZCwgcHJpdi0+bnBfdGQpOwogCQlyZXR1cm4gMTsKIAl9IGVsc2UgewotCQlyZXZl
bnRzID0gbmV0bWFwX3BvbGwoKHZvaWQgKilwcml2LCBldmVudHMsIGN1cnRocmVhZCk7CisJCXJl
dmVudHMgPSBuZXRtYXBfcG9sbChwcml2LCBldmVudHMsIE5VTEwpOwogCQlyZXR1cm4gKGV2ZW50
cyAmIHJldmVudHMpID8gMSA6IDA7CiAJfQogfQpAQCAtODAxLDEzICsxMzc4LDQ3IEBACiAJcmV0
dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK2ZyZWVic2RfbmV0bWFwX3BvbGwoc3RydWN0IGNkZXYg
KmNkZXZpIF9fdW51c2VkLCBpbnQgZXZlbnRzLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sKKwlzdHJ1
Y3QgbmV0bWFwX3ByaXZfZCAqcHJpdjsKKwlpZiAoZGV2ZnNfZ2V0X2NkZXZwcml2KCh2b2lkICoq
KSZwcml2KSkgeworCQlyZXR1cm4gUE9MTEVSUjsKKwl9CisJcmV0dXJuIG5ldG1hcF9wb2xsKHBy
aXYsIGV2ZW50cywgdGQpOworfQorCitzdGF0aWMgaW50CitmcmVlYnNkX25ldG1hcF9pb2N0bChz
dHJ1Y3QgY2RldiAqZGV2IF9fdW51c2VkLCB1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEsCisgICAg
ICAgIGludCBmZmxhIF9fdW51c2VkLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sKKwlpbnQgZXJyb3I7
CisJc3RydWN0IG5ldG1hcF9wcml2X2QgKnByaXY7CisKKwlDVVJWTkVUX1NFVChURF9UT19WTkVU
KHRkKSk7CisJZXJyb3IgPSBkZXZmc19nZXRfY2RldnByaXYoKHZvaWQgKiopJnByaXYpOworCWlm
IChlcnJvcikgeworCQkvKiBYWFggRU5PRU5UIHNob3VsZCBiZSBpbXBvc3NpYmxlLCBzaW5jZSB0
aGUgcHJpdgorCQkgKiBpcyBub3cgY3JlYXRlZCBpbiB0aGUgb3BlbiAqLworCQlpZiAoZXJyb3Ig
PT0gRU5PRU5UKQorCQkJZXJyb3IgPSBFTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCWVycm9yID0g
bmV0bWFwX2lvY3RsKHByaXYsIGNtZCwgZGF0YSwgdGQpOworb3V0OgorCUNVUlZORVRfUkVTVE9S
RSgpOworCisJcmV0dXJuIGVycm9yOworfQorCitleHRlcm4gc3RydWN0IGNkZXZzdyBuZXRtYXBf
Y2RldnN3OyAvKiBYWFggdXNlZCBpbiBuZXRtYXAuYywgc2hvdWxkIGdvIGVsc2V3aGVyZSAqLwog
c3RydWN0IGNkZXZzdyBuZXRtYXBfY2RldnN3ID0gewogCS5kX3ZlcnNpb24gPSBEX1ZFUlNJT04s
CiAJLmRfbmFtZSA9ICJuZXRtYXAiLAogCS5kX29wZW4gPSBuZXRtYXBfb3BlbiwKIAkuZF9tbWFw
X3NpbmdsZSA9IG5ldG1hcF9tbWFwX3NpbmdsZSwKLQkuZF9pb2N0bCA9IG5ldG1hcF9pb2N0bCwK
LQkuZF9wb2xsID0gbmV0bWFwX3BvbGwsCisJLmRfaW9jdGwgPSBmcmVlYnNkX25ldG1hcF9pb2N0
bCwKKwkuZF9wb2xsID0gZnJlZWJzZF9uZXRtYXBfcG9sbCwKIAkuZF9rcWZpbHRlciA9IG5ldG1h
cF9rcWZpbHRlciwKIAkuZF9jbG9zZSA9IG5ldG1hcF9jbG9zZSwKIH07CkBAIC04NTIsNiArMTQ2
MywyNCBAQAogCXJldHVybiAoZXJyb3IpOwogfQogCi0KKyNpZmRlZiBERVZfTU9EVUxFX09SREVS
RUQKKy8qCisgKiBUaGUgbmV0bWFwIG1vZHVsZSBjb250YWlucyB0aHJlZSBkcml2ZXJzOiAoaSkg
dGhlIG5ldG1hcCBjaGFyYWN0ZXIgZGV2aWNlCisgKiBkcml2ZXI7IChpaSkgdGhlIHB0bmV0bWFw
IG1lbWRldiBQQ0kgZGV2aWNlIGRyaXZlciwgKGlpaSkgdGhlIHB0bmV0IFBDSQorICogZGV2aWNl
IGRyaXZlci4gVGhlIGF0dGFjaCgpIHJvdXRpbmVzIG9mIGJvdGggKGlpKSBhbmQgKGlpaSkgbmVl
ZCB0aGUKKyAqIGxvY2sgb2YgdGhlIGdsb2JhbCBhbGxvY2F0b3IsIGFuZCBzdWNoIGxvY2sgaXMg
aW5pdGlhbGl6ZWQgaW4gbmV0bWFwX2luaXQoKSwKKyAqIHdoaWNoIGlzIHBhcnQgb2YgKGkpLgor
ICogVGhlcmVmb3JlLCB3ZSBtYWtlIHN1cmUgdGhhdCAoaSkgaXMgbG9hZGVkIGJlZm9yZSAoaWkp
IGFuZCAoaWlpKSwgdXNpbmcKKyAqIHRoZSAnb3JkZXInIHBhcmFtZXRlciBvZiBkcml2ZXIgZGVj
bGFyYXRpb24gbWFjcm9zLiBGb3IgKGkpLCB3ZSBzcGVjaWZ5CisgKiBTSV9PUkRFUl9NSURETEUs
IHdoaWxlIGhpZ2hlciBvcmRlcnMgYXJlIHVzZWQgd2l0aCB0aGUgRFJJVkVSX01PRFVMRV9PUkRF
UkVECisgKiBtYWNyb3MgZm9yIChpaSkgYW5kIChpaWkpLgorICovCitERVZfTU9EVUxFX09SREVS
RUQobmV0bWFwLCBuZXRtYXBfbG9hZGVyLCBOVUxMLCBTSV9PUkRFUl9NSURETEUpOworI2Vsc2Ug
LyogIURFVl9NT0RVTEVfT1JERVJFRCAqLwogREVWX01PRFVMRShuZXRtYXAsIG5ldG1hcF9sb2Fk
ZXIsIE5VTEwpOworI2VuZGlmIC8qIERFVl9NT0RVTEVfT1JERVJFRCAgKi8KK01PRFVMRV9ERVBF
TkQobmV0bWFwLCBwY2ksIDEsIDEsIDEpOwogTU9EVUxFX1ZFUlNJT04obmV0bWFwLCAxKTsKKy8q
IHJlZHVjZSBjb25kaXRpb25hbCBjb2RlICovCisvLyBsaW51eCBBUEksIHVzZSBmb3IgdGhlIGtu
bGlzdCBpbiBGcmVlQlNECisvKiB1c2UgYSBwcml2YXRlIG11dGV4IGZvciB0aGUga25saXN0ICov
CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfZ2VuZXJpYy5jIC91
c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9nZW5lcmljLmMKLS0tIHVzci9zcmMvc3lzL2Rl
di9uZXRtYXAvbmV0bWFwX2dlbmVyaWMuYwkyMDE2LTA5LTI5IDAwOjI0OjQ3LjAwMDAwMDAwMCAr
MDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX2dlbmVyaWMuYwkyMDE2LTEx
LTIzIDE2OjU3OjU3Ljg0OTQyNzAwMCArMDAwMApAQCAtMSw1ICsxLDcgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNCBVbml2ZXJzaXRhYCBkaSBQaXNhLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgVmluY2Vuem8gTWFmZmlvbmUKKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEx1aWdpIFJpenpvCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Myw3ICs2NSw3IEBACiAjaWZk
ZWYgX19GcmVlQlNEX18KIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPiAvKiBwcmVyZXF1aXNpdGUg
Ki8KLV9fRkJTRElEKCIkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2Rldi9uZXRtYXAvbmV0bWFw
X2dlbmVyaWMuYyAyOTg5NTUgMjAxNi0wNS0wMyAwMzo0MToyNVogcGZnICQiKTsKK19fRkJTRElE
KCIkRnJlZUJTRDogaGVhZC9zeXMvZGV2L25ldG1hcC9uZXRtYXBfZ2VuZXJpYy5jIDI3NDM1MyAy
MDE0LTExLTEwIDIwOjE5OjU4WiBsdWlnaSAkIik7CiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4K
ICNpbmNsdWRlIDxzeXMvZXJybm8uaD4KQEAgLTgzLDI1ICs4NSwyNSBAQAogCiAjZGVmaW5lIHJ0
bmxfbG9jaygpCU5EKCJydG5sX2xvY2sgY2FsbGVkIikKICNkZWZpbmUgcnRubF91bmxvY2soKQlO
RCgicnRubF91bmxvY2sgY2FsbGVkIikKLSNkZWZpbmUgTUJVRl9UWFEobSkJKChtKS0+bV9wa3Ro
ZHIuZmxvd2lkKQogI2RlZmluZSBNQlVGX1JYUShtKQkoKG0pLT5tX3BrdGhkci5mbG93aWQpCiAj
ZGVmaW5lIHNtcF9tYigpCiAKIC8qCiAgKiBGcmVlQlNEIG1idWYgYWxsb2NhdG9yL2RlYWxsb2Nh
dG9yIGluIGVtdWxhdGlvbiBtb2RlOgorICovCisjaWYgX19GcmVlQlNEX3ZlcnNpb24gPCAxMTAw
MDAwCisKKy8qCisgKiBGb3Igb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRDoKICAqCiAgKiBXZSBh
bGxvY2F0ZSBFWFRfUEFDS0VUIG1idWYrY2x1c3RlcnMsIGJ1dCBuZWVkIHRvIHNldCBNX05PRlJF
RQogICogc28gdGhhdCB0aGUgZGVzdHJ1Y3RvciwgaWYgaW52b2tlZCwgd2lsbCBub3QgZnJlZSB0
aGUgcGFja2V0LgotICogICAgSW4gcHJpbmNpcGxlIHdlIHNob3VsZCBzZXQgdGhlIGRlc3RydWN0
b3Igb25seSBvbiBkZW1hbmQsCisgKiBJbiBwcmluY2lwbGUgd2Ugc2hvdWxkIHNldCB0aGUgZGVz
dHJ1Y3RvciBvbmx5IG9uIGRlbWFuZCwKICAqIGJ1dCBzaW5jZSB0aGVyZSBtaWdodCBiZSBhIHJh
Y2Ugd2UgYmV0dGVyIGRvIGl0IG9uIGFsbG9jYXRpb24uCiAgKiBBcyBhIGNvbnNlcXVlbmNlLCB3
ZSBhbHNvIG5lZWQgdG8gc2V0IHRoZSBkZXN0cnVjdG9yIG9yIHdlCiAgKiB3b3VsZCBsZWFrIGJ1
ZmZlcnMuCiAgKi8KIAotLyoKLSAqIG1idWYgd3JhcHBlcnMKLSAqLwotCiAvKiBtYnVmIGRlc3Ry
dWN0b3IsIGFsc28gbmVlZCB0byBjaGFuZ2UgdGhlIHR5cGUgdG8gRVhUX0VYVFJFRiwKICAqIGFk
ZCBhbiBNX05PRlJFRSBmbGFnLCBhbmQgdGhlbiBjbGVhciB0aGUgZmxhZyBhbmQKICAqIGNoYWlu
IGludG8gdW1hX3pmcmVlKHpvbmVfcGFjaywgbWYpCkBAIC0xMTIsMzUgKzExNCw5MyBAQAogCSht
KS0+bV9leHQuZXh0X3R5cGUgPSBFWFRfRVhUUkVGOwlcCiB9IHdoaWxlICgwKQogCi1zdGF0aWMg
dm9pZAotbmV0bWFwX2RlZmF1bHRfbWJ1Zl9kZXN0cnVjdG9yKHN0cnVjdCBtYnVmICptKQorc3Rh
dGljIGludAordm9pZF9tYnVmX2R0b3Ioc3RydWN0IG1idWYgKm0sIHZvaWQgKmFyZzEsIHZvaWQg
KmFyZzIpCiB7CiAJLyogcmVzdG9yZSBvcmlnaW5hbCBtYnVmICovCiAJbS0+bV9leHQuZXh0X2J1
ZiA9IG0tPm1fZGF0YSA9IG0tPm1fZXh0LmV4dF9hcmcxOwogCW0tPm1fZXh0LmV4dF9hcmcxID0g
TlVMTDsKIAltLT5tX2V4dC5leHRfdHlwZSA9IEVYVF9QQUNLRVQ7CiAJbS0+bV9leHQuZXh0X2Zy
ZWUgPSBOVUxMOwotCWlmIChHRVRfTUJVRl9SRUZDTlQobSkgPT0gMCkKKwlpZiAoTUJVRl9SRUZD
TlQobSkgPT0gMCkKIAkJU0VUX01CVUZfUkVGQ05UKG0sIDEpOwogCXVtYV96ZnJlZSh6b25lX3Bh
Y2ssIG0pOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1idWYgKgot
bmV0bWFwX2dldF9tYnVmKGludCBsZW4pCitubV9vc19nZXRfbWJ1ZihzdHJ1Y3QgaWZuZXQgKmlm
cCwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgbWJ1ZiAqbTsKKworCSh2b2lkKWlmcDsKIAltID0gbV9n
ZXRjbChNX05PV0FJVCwgTVRfREFUQSwgTV9QS1RIRFIpOwogCWlmIChtKSB7Ci0JCW0tPm1fZmxh
Z3MgfD0gTV9OT0ZSRUU7CS8qIFhYWE5QOiBBbG1vc3QgY2VydGFpbmx5IGluY29ycmVjdC4gKi8K
KwkJLyogbV9nZXRjbCgpIChtYl9jdG9yX21idWYpIGhhcyBhbiBhc3NlcnQgdGhhdCBjaGVja3Mg
dGhhdAorCQkgKiBNX05PRlJFRSBmbGFnIGlzIG5vdCBzcGVjaWZpZWQgYXMgdGhpcmQgYXJndW1l
bnQsCisJCSAqIHNvIHdlIGhhdmUgdG8gc2V0IE1fTk9GUkVFIGFmdGVyIG1fZ2V0Y2woKS4gKi8K
KwkJbS0+bV9mbGFncyB8PSBNX05PRlJFRTsKIAkJbS0+bV9leHQuZXh0X2FyZzEgPSBtLT5tX2V4
dC5leHRfYnVmOyAvLyBYWFggc2F2ZQotCQltLT5tX2V4dC5leHRfZnJlZSA9ICh2b2lkICopbmV0
bWFwX2RlZmF1bHRfbWJ1Zl9kZXN0cnVjdG9yOworCQltLT5tX2V4dC5leHRfZnJlZSA9ICh2b2lk
ICopdm9pZF9tYnVmX2R0b3I7CiAJCW0tPm1fZXh0LmV4dF90eXBlID0gRVhUX0VYVFJFRjsKLQkJ
TkQoNSwgImNyZWF0ZSBtICVwIHJlZmNudCAlZCIsIG0sIEdFVF9NQlVGX1JFRkNOVChtKSk7CisJ
CU5EKDUsICJjcmVhdGUgbSAlcCByZWZjbnQgJWQiLCBtLCBNQlVGX1JFRkNOVChtKSk7CiAJfQog
CXJldHVybiBtOwogfQogCisjZWxzZSAvKiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDAwICov
CisKKy8qCisgKiBOZXdlciB2ZXJzaW9ucyBvZiBGcmVlQlNELCB1c2luZyBhIHN0cmFpZ2h0Zm9y
d2FyZCBzY2hlbWUuCisgKgorICogV2UgYWxsb2NhdGUgbWJ1ZnMgd2l0aCBtX2dldGhkcigpLCBz
aW5jZSB0aGUgbWJ1ZiBoZWFkZXIgaXMgbmVlZGVkCisgKiBieSB0aGUgZHJpdmVyLiBXZSBhbHNv
IGF0dGFjaCBhIGN1c3RvbWx5LXByb3ZpZGVkIGV4dGVybmFsIHN0b3JhZ2UsCisgKiB3aGljaCBp
biB0aGlzIGNhc2UgaXMgYSBuZXRtYXAgYnVmZmVyLiBXaGVuIGNhbGxpbmcgbV9leHRhZGQoKSwg
aG93ZXZlcgorICogd2UgcGFzcyBhIE5VTEwgYWRkcmVzcywgc2luY2UgdGhlIHJlYWwgYWRkcmVz
cyAoYW5kIGxlbmd0aCkgd2lsbCBiZQorICogZmlsbGVkIGluIGJ5IG5tX29zX2dlbmVyaWNfeG1p
dF9mcmFtZSgpIHJpZ2h0IGJlZm9yZSBjYWxsaW5nCisgKiBpZl90cmFuc21pdCgpLgorICoKKyAq
IFRoZSBkdG9yIGZ1bmN0aW9uIGRvZXMgbm90aGluZywgaG93ZXZlciB3ZSBuZWVkIGl0IHNpbmNl
IG1iX2ZyZWVfZXh0KCkKKyAqIGhhcyBhIEtBU1NFUlQoKSwgY2hlY2tpbmcgdGhhdCB0aGUgbWJ1
ZiBkdG9yIGZ1bmN0aW9uIGlzIG5vdCBOVUxMLgorICovCisKKyNkZWZpbmUgU0VUX01CVUZfREVT
VFJVQ1RPUihtLCBmbikJZG8gewkJXAorCShtKS0+bV9leHQuZXh0X2ZyZWUgPSAodm9pZCAqKWZu
OwlcCit9IHdoaWxlICgwKQorCitzdGF0aWMgdm9pZCB2b2lkX21idWZfZHRvcihzdHJ1Y3QgbWJ1
ZiAqbSwgdm9pZCAqYXJnMSwgdm9pZCAqYXJnMikgeyB9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0
IG1idWYgKgorbm1fb3NfZ2V0X21idWYoc3RydWN0IGlmbmV0ICppZnAsIGludCBsZW4pCit7CisJ
c3RydWN0IG1idWYgKm07CisKKwkodm9pZClpZnA7CisJKHZvaWQpbGVuOworCisJbSA9IG1fZ2V0
aGRyKE1fTk9XQUlULCBNVF9EQVRBKTsKKwlpZiAobSA9PSBOVUxMKSB7CisJCXJldHVybiBtOwor
CX0KKworCW1fZXh0YWRkKG0sIE5VTEwgLyogYnVmICovLCAwIC8qIHNpemUgKi8sIHZvaWRfbWJ1
Zl9kdG9yLAorCQkgTlVMTCwgTlVMTCwgMCwgRVhUX05FVF9EUlYpOworCisJcmV0dXJuIG07Cit9
CisKKyNlbmRpZiAvKiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDAwICovCisKKyNlbGlmIGRl
ZmluZWQgX1dJTjMyCiAKKyNpbmNsdWRlICJ3aW5fZ2x1ZS5oIgorCisjZGVmaW5lIHJ0bmxfbG9j
aygpCU5EKCJydG5sX2xvY2sgY2FsbGVkIikKKyNkZWZpbmUgcnRubF91bmxvY2soKQlORCgicnRu
bF91bmxvY2sgY2FsbGVkIikKKyNkZWZpbmUgTUJVRl9UWFEobSkgCTAvLygobSktPm1fcGt0aGRy
LmZsb3dpZCkKKyNkZWZpbmUgTUJVRl9SWFEobSkJICAgIDAvLygobSktPm1fcGt0aGRyLmZsb3dp
ZCkKKyNkZWZpbmUgc21wX21iKCkJCS8vWFhYOiB0byBiZSBjb3JyZWN0bHkgZGVmaW5lZAogCiAj
ZWxzZSAvKiBsaW51eCAqLwogCkBAIC0xNTAsNyArMjEwLDEyIEBACiAjaW5jbHVkZSA8bGludXgv
ZXRodG9vbC5oPiAgICAgIC8qIHN0cnVjdCBldGh0b29sX29wcywgZ2V0X3JpbmdwYXJhbSAqLwog
I2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KIAotLy8jZGVmaW5lIFJFR19SRVNFVAorc3RhdGlj
IGlubGluZSBzdHJ1Y3QgbWJ1ZiAqCitubV9vc19nZXRfbWJ1ZihzdHJ1Y3QgaWZuZXQgKmlmcCwg
aW50IGxlbikKK3sKKwlyZXR1cm4gYWxsb2Nfc2tiKGlmcC0+bmVlZGVkX2hlYWRyb29tICsgbGVu
ICsKKwkJCSBpZnAtPm5lZWRlZF90YWlscm9vbSwgR0ZQX0FUT01JQyk7Cit9CiAKICNlbmRpZiAv
KiBsaW51eCAqLwogCkBAIC0xNjEsOCArMjI2LDIxIEBACiAjaW5jbHVkZSA8ZGV2L25ldG1hcC9u
ZXRtYXBfbWVtMi5oPgogCiAKKyNkZWZpbmUgZm9yX2VhY2hfa3JpbmdfbihfaSwgX2ssIF9rYXJy
LCBfbikgXAorCWZvciAoX2s9X2thcnIsIF9pID0gMDsgX2kgPCBfbjsgKF9rKSsrLCAoX2kpKysp
CisKKyNkZWZpbmUgZm9yX2VhY2hfdHhfa3JpbmcoX2ksIF9rLCBfbmEpIFwKKyAgICAgICAgICAg
IGZvcl9lYWNoX2tyaW5nX24oX2ksIF9rLCAoX25hKS0+dHhfcmluZ3MsIChfbmEpLT5udW1fdHhf
cmluZ3MpCisjZGVmaW5lIGZvcl9lYWNoX3R4X2tyaW5nX2goX2ksIF9rLCBfbmEpIFwKKyAgICAg
ICAgICAgIGZvcl9lYWNoX2tyaW5nX24oX2ksIF9rLCAoX25hKS0+dHhfcmluZ3MsIChfbmEpLT5u
dW1fdHhfcmluZ3MgKyAxKQorCisjZGVmaW5lIGZvcl9lYWNoX3J4X2tyaW5nKF9pLCBfaywgX25h
KSBcCisgICAgICAgICAgICBmb3JfZWFjaF9rcmluZ19uKF9pLCBfaywgKF9uYSktPnJ4X3Jpbmdz
LCAoX25hKS0+bnVtX3J4X3JpbmdzKQorI2RlZmluZSBmb3JfZWFjaF9yeF9rcmluZ19oKF9pLCBf
aywgX25hKSBcCisgICAgICAgICAgICBmb3JfZWFjaF9rcmluZ19uKF9pLCBfaywgKF9uYSktPnJ4
X3JpbmdzLCAoX25hKS0+bnVtX3J4X3JpbmdzICsgMSkKKwogCi0vKiA9PT09PT09PT09PT09PT09
PT09PT09PT0gdXNhZ2Ugc3RhdHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9
PT09PT09PT09PT09PT09PT09PT09PT0gUEVSRk9STUFOQ0UgU1RBVElTVElDUyA9PT09PT09PT09
PT09PT09PT09PT09PT09PT0gKi8KIAogI2lmZGVmIFJBVEVfR0VORVJJQwogI2RlZmluZSBJRlJB
VEUoeCkgeApAQCAtMTcwLDYgKzI0OCw4IEBACiAJdW5zaWduZWQgbG9uZyB0eHBrdDsKIAl1bnNp
Z25lZCBsb25nIHR4c3luYzsKIAl1bnNpZ25lZCBsb25nIHR4aXJxOworCXVuc2lnbmVkIGxvbmcg
dHhyZXBsOworCXVuc2lnbmVkIGxvbmcgdHhkcm9wOwogCXVuc2lnbmVkIGxvbmcgcnhwa3Q7CiAJ
dW5zaWduZWQgbG9uZyByeGlycTsKIAl1bnNpZ25lZCBsb25nIHJ4c3luYzsKQEAgLTE5NCw2ICsy
NzQsOCBAQAogCVJBVEVfUFJJTlRLKHR4cGt0KTsKIAlSQVRFX1BSSU5USyh0eHN5bmMpOwogCVJB
VEVfUFJJTlRLKHR4aXJxKTsKKwlSQVRFX1BSSU5USyh0eHJlcGwpOworCVJBVEVfUFJJTlRLKHR4
ZHJvcCk7CiAJUkFURV9QUklOVEsocnhwa3QpOwogCVJBVEVfUFJJTlRLKHJ4c3luYyk7CiAJUkFU
RV9QUklOVEsocnhpcnEpOwpAQCAtMjMwLDk0ICszMTIsMjIwIEBACiAgKiB0aGUgcG9sbGVyIHRo
cmVhZHMuIERpZmZlcmVudGx5IGZyb20gbmV0bWFwX3J4X2lycSgpLCB3ZSBjaGVjawogICogb25s
eSBOQUZfTkVUTUFQX09OIGluc3RlYWQgb2YgTkFGX05BVElWRV9PTiB0byBlbmFibGUgdGhlIGly
cS4KICAqLwotc3RhdGljIHZvaWQKLW5ldG1hcF9nZW5lcmljX2lycShzdHJ1Y3QgaWZuZXQgKmlm
cCwgdV9pbnQgcSwgdV9pbnQgKndvcmtfZG9uZSkKK3ZvaWQKK25ldG1hcF9nZW5lcmljX2lycShz
dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCB1X2ludCBxLCB1X2ludCAqd29ya19kb25lKQogewot
CXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEgPSBOQShpZnApOwogCWlmICh1bmxpa2VseSghbm1f
bmV0bWFwX29uKG5hKSkpCiAJCXJldHVybjsKIAotCW5ldG1hcF9jb21tb25faXJxKGlmcCwgcSwg
d29ya19kb25lKTsKKwluZXRtYXBfY29tbW9uX2lycShuYSwgcSwgd29ya19kb25lKTsKKyNpZmRl
ZiBSQVRFX0dFTkVSSUMKKwlpZiAod29ya19kb25lKQorCQlyYXRlX2N0eC5uZXcucnhpcnErKzsK
KwllbHNlCisJCXJhdGVfY3R4Lm5ldy50eGlycSsrOworI2VuZGlmICAvKiBSQVRFX0dFTkVSSUMg
Ki8KIH0KIAorc3RhdGljIGludAorZ2VuZXJpY19uZXRtYXBfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0
bWFwX2FkYXB0ZXIgKm5hKQoreworCXN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICpnbmEg
PSAoc3RydWN0IG5ldG1hcF9nZW5lcmljX2FkYXB0ZXIgKiluYTsKKwlzdHJ1Y3QgbmV0bWFwX2ty
aW5nICprcmluZyA9IE5VTEw7CisJaW50IGksIHI7CisKKwlpZiAobmEtPmFjdGl2ZV9mZHMgPT0g
MCkgeworCQlEKCJHZW5lcmljIGFkYXB0ZXIgJXAgZ29lcyBvZmYiLCBuYSk7CisJCXJ0bmxfbG9j
aygpOworCisJCW5hLT5uYV9mbGFncyAmPSB+TkFGX05FVE1BUF9PTjsKKworCQkvKiBSZWxlYXNl
IHBhY2tldCBzdGVlcmluZyBjb250cm9sLiAqLworCQlubV9vc19jYXRjaF90eChnbmEsIDApOwor
CisJCS8qIFN0b3AgaW50ZXJjZXB0aW5nIHBhY2tldHMgb24gdGhlIFJYIHBhdGguICovCisJCW5t
X29zX2NhdGNoX3J4KGduYSwgMCk7CisKKwkJcnRubF91bmxvY2soKTsKKwl9CisKKwlmb3JfZWFj
aF9yeF9rcmluZ19oKHIsIGtyaW5nLCBuYSkgeworCQlpZiAobm1fa3JpbmdfcGVuZGluZ19vZmYo
a3JpbmcpKSB7CisJCQlEKCJSWCByaW5nICVkIG9mIGdlbmVyaWMgYWRhcHRlciAlcCBnb2VzIG9m
ZiIsIHIsIG5hKTsKKwkJCWtyaW5nLT5ucl9tb2RlID0gTktSX05FVE1BUF9PRkY7CisJCX0KKwl9
CisJZm9yX2VhY2hfdHhfa3JpbmdfaChyLCBrcmluZywgbmEpIHsKKwkJaWYgKG5tX2tyaW5nX3Bl
bmRpbmdfb2ZmKGtyaW5nKSkgeworCQkJa3JpbmctPm5yX21vZGUgPSBOS1JfTkVUTUFQX09GRjsK
KwkJCUQoIlRYIHJpbmcgJWQgb2YgZ2VuZXJpYyBhZGFwdGVyICVwIGdvZXMgb2ZmIiwgciwgbmEp
OworCQl9CisJfQorCisJZm9yX2VhY2hfcnhfa3Jpbmcociwga3JpbmcsIG5hKSB7CisJCS8qIEZy
ZWUgdGhlIG1idWZzIHN0aWxsIHBlbmRpbmcgaW4gdGhlIFJYIHF1ZXVlcywKKwkJICogdGhhdCBk
aWQgbm90IGVuZCB1cCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIG5ldG1hcAorCQkgKiBSWCByaW5n
cy4gKi8KKwkJbWJxX3NhZmVfcHVyZ2UoJmtyaW5nLT5yeF9xdWV1ZSk7CisJCW5tX29zX21pdGln
YXRpb25fY2xlYW51cCgmZ25hLT5taXRbcl0pOworCX0KKworCS8qIERlY3JlbWVudCByZWZlcmVu
Y2UgY291bnRlciBmb3IgdGhlIG1idWZzIGluIHRoZQorCSAqIFRYIHBvb2xzLiBUaGVzZSBtYnVm
cyBjYW4gYmUgc3RpbGwgcGVuZGluZyBpbiBkcml2ZXJzLAorCSAqIChlLmcuIHRoaXMgaGFwcGVu
cyB3aXRoIHZpcnRpby1uZXQgZHJpdmVyLCB3aGljaAorCSAqIGRvZXMgbGF6eSByZWNsYWltaW5n
IG9mIHRyYW5zbWl0dGVkIG1idWZzKS4gKi8KKwlmb3JfZWFjaF90eF9rcmluZyhyLCBrcmluZywg
bmEpIHsKKwkJLyogV2UgbXVzdCByZW1vdmUgdGhlIGRlc3RydWN0b3Igb24gdGhlIFRYIGV2ZW50
LAorCQkgKiBiZWNhdXNlIHRoZSBkZXN0cnVjdG9yIGludm9rZXMgbmV0bWFwIGNvZGUsIGFuZAor
CQkgKiB0aGUgbmV0bWFwIG1vZHVsZSBtYXkgZGlzYXBwZWFyIGJlZm9yZSB0aGUKKwkJICogVFgg
ZXZlbnQgaXMgY29uc3VtZWQuICovCisJCW10eF9sb2NrX3NwaW4oJmtyaW5nLT50eF9ldmVudF9s
b2NrKTsKKwkJaWYgKGtyaW5nLT50eF9ldmVudCkgeworCQkJU0VUX01CVUZfREVTVFJVQ1RPUihr
cmluZy0+dHhfZXZlbnQsIE5VTEwpOworCQl9CisJCWtyaW5nLT50eF9ldmVudCA9IE5VTEw7CisJ
CW10eF91bmxvY2tfc3Bpbigma3JpbmctPnR4X2V2ZW50X2xvY2spOworCX0KKworCWlmIChuYS0+
YWN0aXZlX2ZkcyA9PSAwKSB7CisJCW5tX29zX2ZyZWUoZ25hLT5taXQpOworCisJCWZvcl9lYWNo
X3J4X2tyaW5nKHIsIGtyaW5nLCBuYSkgeworCQkJbWJxX3NhZmVfZmluaSgma3JpbmctPnJ4X3F1
ZXVlKTsKKwkJfQorCisJCWZvcl9lYWNoX3R4X2tyaW5nKHIsIGtyaW5nLCBuYSkgeworCQkJbXR4
X2Rlc3Ryb3koJmtyaW5nLT50eF9ldmVudF9sb2NrKTsKKwkJCWlmIChrcmluZy0+dHhfcG9vbCA9
PSBOVUxMKSB7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWZvciAoaT0wOyBpPG5hLT5udW1f
dHhfZGVzYzsgaSsrKSB7CisJCQkJaWYgKGtyaW5nLT50eF9wb29sW2ldKSB7CisJCQkJCW1fZnJl
ZW0oa3JpbmctPnR4X3Bvb2xbaV0pOworCQkJCX0KKwkJCX0KKwkJCW5tX29zX2ZyZWUoa3Jpbmct
PnR4X3Bvb2wpOworCQkJa3JpbmctPnR4X3Bvb2wgPSBOVUxMOworCQl9CisKKyNpZmRlZiBSQVRF
X0dFTkVSSUMKKwkJaWYgKC0tcmF0ZV9jdHgucmVmY291bnQgPT0gMCkgeworCQkJRCgiZGVsX3Rp
bWVyKCkiKTsKKwkJCWRlbF90aW1lcigmcmF0ZV9jdHgudGltZXIpOworCQl9CisjZW5kaWYKKwl9
CisKKwlyZXR1cm4gMDsKK30KIAogLyogRW5hYmxlL2Rpc2FibGUgbmV0bWFwIG1vZGUgZm9yIGEg
Z2VuZXJpYyBuZXR3b3JrIGludGVyZmFjZS4gKi8KIHN0YXRpYyBpbnQKIGdlbmVyaWNfbmV0bWFw
X3JlZ2lzdGVyKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIGludCBlbmFibGUpCiB7CiAJc3Ry
dWN0IG5ldG1hcF9nZW5lcmljX2FkYXB0ZXIgKmduYSA9IChzdHJ1Y3QgbmV0bWFwX2dlbmVyaWNf
YWRhcHRlciAqKW5hOwotCXN0cnVjdCBtYnVmICptOworCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmty
aW5nID0gTlVMTDsKIAlpbnQgZXJyb3I7CiAJaW50IGksIHI7CiAKLQlpZiAoIW5hKQorCWlmICgh
bmEpIHsKIAkJcmV0dXJuIEVJTlZBTDsKKwl9CiAKLSNpZmRlZiBSRUdfUkVTRVQKLQllcnJvciA9
IGlmcC0+bmV0ZGV2X29wcy0+bmRvX3N0b3AoaWZwKTsKLQlpZiAoZXJyb3IpIHsKLQkJcmV0dXJu
IGVycm9yOwotCX0KLSNlbmRpZiAvKiBSRUdfUkVTRVQgKi8KLQotCWlmIChlbmFibGUpIHsgLyog
RW5hYmxlIG5ldG1hcCBtb2RlLiAqLwotCQkvKiBJbml0IHRoZSBtaXRpZ2F0aW9uIHN1cHBvcnQg
b24gYWxsIHRoZSByeCBxdWV1ZXMuICovCi0JCWduYS0+bWl0ID0gbWFsbG9jKG5hLT5udW1fcnhf
cmluZ3MgKiBzaXplb2Yoc3RydWN0IG5tX2dlbmVyaWNfbWl0KSwKLQkJCQkJTV9ERVZCVUYsIE1f
Tk9XQUlUIHwgTV9aRVJPKTsKKwlpZiAoIWVuYWJsZSkgeworCQkvKiBUaGlzIGlzIGFjdHVhbGx5
IGFuIHVucmVnaWYuICovCisJCXJldHVybiBnZW5lcmljX25ldG1hcF91bnJlZ2lzdGVyKG5hKTsK
Kwl9CisKKwlpZiAobmEtPmFjdGl2ZV9mZHMgPT0gMCkgeworCQlEKCJHZW5lcmljIGFkYXB0ZXIg
JXAgZ29lcyBvbiIsIG5hKTsKKwkJLyogRG8gYWxsIG1lbW9yeSBhbGxvY2F0aW9ucyB3aGVuIChu
YS0+YWN0aXZlX2ZkcyA9PSAwKSwgdG8KKwkJICogc2ltcGxpZnkgZXJyb3IgbWFuYWdlbWVudC4g
Ki8KKworCQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIG1pdGlnYXRpb24gc3VwcG9ydCBvbiBhbGwg
dGhlIHJ4IHF1ZXVlcy4gKi8KKwkJZ25hLT5taXQgPSBubV9vc19tYWxsb2MobmEtPm51bV9yeF9y
aW5ncyAqIHNpemVvZihzdHJ1Y3Qgbm1fZ2VuZXJpY19taXQpKTsKIAkJaWYgKCFnbmEtPm1pdCkg
ewogCQkJRCgibWl0aWdhdGlvbiBhbGxvY2F0aW9uIGZhaWxlZCIpOwogCQkJZXJyb3IgPSBFTk9N
RU07CiAJCQlnb3RvIG91dDsKIAkJfQotCQlmb3IgKHI9MDsgcjxuYS0+bnVtX3J4X3JpbmdzOyBy
KyspCi0JCQluZXRtYXBfbWl0aWdhdGlvbl9pbml0KCZnbmEtPm1pdFtyXSwgciwgbmEpOwogCi0J
CS8qIEluaXRpYWxpemUgdGhlIHJ4IHF1ZXVlLCBhcyBnZW5lcmljX3J4X2hhbmRsZXIoKSBjYW4K
LQkJICogYmUgY2FsbGVkIGFzIHNvb24gYXMgbmV0bWFwX2NhdGNoX3J4KCkgcmV0dXJucy4KLQkJ
ICovCi0JCWZvciAocj0wOyByPG5hLT5udW1fcnhfcmluZ3M7IHIrKykgewotCQkJbWJxX3NhZmVf
aW5pdCgmbmEtPnJ4X3JpbmdzW3JdLnJ4X3F1ZXVlKTsKKwkJZm9yX2VhY2hfcnhfa3Jpbmcociwg
a3JpbmcsIG5hKSB7CisJCQkvKiBJbml0IG1pdGlnYXRpb24gc3VwcG9ydC4gKi8KKwkJCW5tX29z
X21pdGlnYXRpb25faW5pdCgmZ25hLT5taXRbcl0sIHIsIG5hKTsKKworCQkJLyogSW5pdGlhbGl6
ZSB0aGUgcnggcXVldWUsIGFzIGdlbmVyaWNfcnhfaGFuZGxlcigpIGNhbgorCQkJICogYmUgY2Fs
bGVkIGFzIHNvb24gYXMgbm1fb3NfY2F0Y2hfcngoKSByZXR1cm5zLgorCQkJICovCisJCQltYnFf
c2FmZV9pbml0KCZrcmluZy0+cnhfcXVldWUpOwogCQl9CiAKIAkJLyoKLQkJICogUHJlYWxsb2Nh
dGUgcGFja2V0IGJ1ZmZlcnMgZm9yIHRoZSB0eCByaW5ncy4KKwkJICogUHJlcGFyZSBtYnVmIHBv
b2xzIChwYXJhbGxlbCB0byB0aGUgdHggcmluZ3MpLCBmb3IgcGFja2V0CisJCSAqIHRyYW5zbWlz
c2lvbi4gRG9uJ3QgcHJlYWxsb2NhdGUgdGhlIG1idWZzIGhlcmUsIGl0J3Mgc2ltcGxlcgorCQkg
KiB0byBsZWF2ZSB0aGlzIHRhc2sgdG8gdHhzeW5jLgogCQkgKi8KLQkJZm9yIChyPTA7IHI8bmEt
Pm51bV90eF9yaW5nczsgcisrKQotCQkJbmEtPnR4X3JpbmdzW3JdLnR4X3Bvb2wgPSBOVUxMOwot
CQlmb3IgKHI9MDsgcjxuYS0+bnVtX3R4X3JpbmdzOyByKyspIHsKLQkJCW5hLT50eF9yaW5nc1ty
XS50eF9wb29sID0gbWFsbG9jKG5hLT5udW1fdHhfZGVzYyAqIHNpemVvZihzdHJ1Y3QgbWJ1ZiAq
KSwKLQkJCQkJTV9ERVZCVUYsIE1fTk9XQUlUIHwgTV9aRVJPKTsKLQkJCWlmICghbmEtPnR4X3Jp
bmdzW3JdLnR4X3Bvb2wpIHsKKwkJZm9yX2VhY2hfdHhfa3Jpbmcociwga3JpbmcsIG5hKSB7CisJ
CQlrcmluZy0+dHhfcG9vbCA9IE5VTEw7CisJCX0KKwkJZm9yX2VhY2hfdHhfa3Jpbmcociwga3Jp
bmcsIG5hKSB7CisJCQlrcmluZy0+dHhfcG9vbCA9CisJCQkJbm1fb3NfbWFsbG9jKG5hLT5udW1f
dHhfZGVzYyAqIHNpemVvZihzdHJ1Y3QgbWJ1ZiAqKSk7CisJCQlpZiAoIWtyaW5nLT50eF9wb29s
KSB7CiAJCQkJRCgidHhfcG9vbCBhbGxvY2F0aW9uIGZhaWxlZCIpOwogCQkJCWVycm9yID0gRU5P
TUVNOwogCQkJCWdvdG8gZnJlZV90eF9wb29sczsKIAkJCX0KLQkJCWZvciAoaT0wOyBpPG5hLT5u
dW1fdHhfZGVzYzsgaSsrKQotCQkJCW5hLT50eF9yaW5nc1tyXS50eF9wb29sW2ldID0gTlVMTDsK
LQkJCWZvciAoaT0wOyBpPG5hLT5udW1fdHhfZGVzYzsgaSsrKSB7Ci0JCQkJbSA9IG5ldG1hcF9n
ZXRfbWJ1ZihORVRNQVBfQlVGX1NJWkUobmEpKTsKLQkJCQlpZiAoIW0pIHsKLQkJCQkJRCgidHhf
cG9vbFslZF0gYWxsb2NhdGlvbiBmYWlsZWQiLCBpKTsKLQkJCQkJZXJyb3IgPSBFTk9NRU07Ci0J
CQkJCWdvdG8gZnJlZV90eF9wb29sczsKLQkJCQl9Ci0JCQkJbmEtPnR4X3JpbmdzW3JdLnR4X3Bv
b2xbaV0gPSBtOwotCQkJfQorCQkJbXR4X2luaXQoJmtyaW5nLT50eF9ldmVudF9sb2NrLCAidHhf
ZXZlbnRfbG9jayIsCisJCQkJIE5VTEwsIE1UWF9TUElOKTsKIAkJfQorCX0KKworCWZvcl9lYWNo
X3J4X2tyaW5nX2gociwga3JpbmcsIG5hKSB7CisJCWlmIChubV9rcmluZ19wZW5kaW5nX29uKGty
aW5nKSkgeworCQkJRCgiUlggcmluZyAlZCBvZiBnZW5lcmljIGFkYXB0ZXIgJXAgZ29lcyBvbiIs
IHIsIG5hKTsKKwkJCWtyaW5nLT5ucl9tb2RlID0gTktSX05FVE1BUF9PTjsKKwkJfQorCisJfQor
CWZvcl9lYWNoX3R4X2tyaW5nX2gociwga3JpbmcsIG5hKSB7CisJCWlmIChubV9rcmluZ19wZW5k
aW5nX29uKGtyaW5nKSkgeworCQkJRCgiVFggcmluZyAlZCBvZiBnZW5lcmljIGFkYXB0ZXIgJXAg
Z29lcyBvbiIsIHIsIG5hKTsKKwkJCWtyaW5nLT5ucl9tb2RlID0gTktSX05FVE1BUF9PTjsKKwkJ
fQorCX0KKworCWZvcl9lYWNoX3R4X2tyaW5nKHIsIGtyaW5nLCBuYSkgeworCQkvKiBJbml0aWFs
aXplIHR4X3Bvb2wgYW5kIHR4X2V2ZW50LiAqLworCQlmb3IgKGk9MDsgaTxuYS0+bnVtX3R4X2Rl
c2M7IGkrKykgeworCQkJa3JpbmctPnR4X3Bvb2xbaV0gPSBOVUxMOworCQl9CisKKwkJa3Jpbmct
PnR4X2V2ZW50ID0gTlVMTDsKKwl9CisKKwlpZiAobmEtPmFjdGl2ZV9mZHMgPT0gMCkgewogCQly
dG5sX2xvY2soKTsKKwogCQkvKiBQcmVwYXJlIHRvIGludGVyY2VwdCBpbmNvbWluZyB0cmFmZmlj
LiAqLwotCQllcnJvciA9IG5ldG1hcF9jYXRjaF9yeChnbmEsIDEpOworCQllcnJvciA9IG5tX29z
X2NhdGNoX3J4KGduYSwgMSk7CiAJCWlmIChlcnJvcikgewotCQkJRCgibmV0ZGV2X3J4X2hhbmRs
ZXJfcmVnaXN0ZXIoKSBmYWlsZWQgKCVkKSIsIGVycm9yKTsKKwkJCUQoIm5tX29zX2NhdGNoX3J4
KDEpIGZhaWxlZCAoJWQpIiwgZXJyb3IpOwogCQkJZ290byByZWdpc3Rlcl9oYW5kbGVyOwogCQl9
Ci0JCW5hLT5uYV9mbGFncyB8PSBOQUZfTkVUTUFQX09OOwogCiAJCS8qIE1ha2UgbmV0bWFwIGNv
bnRyb2wgdGhlIHBhY2tldCBzdGVlcmluZy4gKi8KLQkJbmV0bWFwX2NhdGNoX3R4KGduYSwgMSk7
CisJCWVycm9yID0gbm1fb3NfY2F0Y2hfdHgoZ25hLCAxKTsKKwkJaWYgKGVycm9yKSB7CisJCQlE
KCJubV9vc19jYXRjaF90eCgxKSBmYWlsZWQgKCVkKSIsIGVycm9yKTsKKwkJCWdvdG8gY2F0Y2hf
cng7CisJCX0KIAogCQlydG5sX3VubG9jaygpOwogCisJCW5hLT5uYV9mbGFncyB8PSBOQUZfTkVU
TUFQX09OOworCiAjaWZkZWYgUkFURV9HRU5FUklDCiAJCWlmIChyYXRlX2N0eC5yZWZjb3VudCA9
PSAwKSB7CiAJCQlEKCJzZXR1cF90aW1lcigpIik7CkBAIC0zMjksNzUgKzUzNywyOCBAQAogCQl9
CiAJCXJhdGVfY3R4LnJlZmNvdW50Kys7CiAjZW5kaWYgLyogUkFURSAqLwotCi0JfSBlbHNlIGlm
IChuYS0+dHhfcmluZ3NbMF0udHhfcG9vbCkgewotCQkvKiBEaXNhYmxlIG5ldG1hcCBtb2RlLiBX
ZSBlbnRlciBoZXJlIG9ubHkgaWYgdGhlIHByZXZpb3VzCi0JCSAgIGdlbmVyaWNfbmV0bWFwX3Jl
Z2lzdGVyKG5hLCAxKSB3YXMgc3VjY2Vzc2Z1bC4KLQkJICAgSWYgaXQgd2FzIG5vdCwgbmEtPnR4
X3JpbmdzWzBdLnR4X3Bvb2wgd2FzIHNldCB0byBOVUxMIGJ5IHRoZQotCQkgICBlcnJvciBoYW5k
bGluZyBjb2RlIGJlbG93LiAqLwotCQlydG5sX2xvY2soKTsKLQotCQluYS0+bmFfZmxhZ3MgJj0g
fk5BRl9ORVRNQVBfT047Ci0KLQkJLyogUmVsZWFzZSBwYWNrZXQgc3RlZXJpbmcgY29udHJvbC4g
Ki8KLQkJbmV0bWFwX2NhdGNoX3R4KGduYSwgMCk7Ci0KLQkJLyogRG8gbm90IGludGVyY2VwdCBw
YWNrZXRzIG9uIHRoZSByeCBwYXRoLiAqLwotCQluZXRtYXBfY2F0Y2hfcngoZ25hLCAwKTsKLQot
CQlydG5sX3VubG9jaygpOwotCi0JCS8qIEZyZWUgdGhlIG1idWZzIGdvaW5nIHRvIHRoZSBuZXRt
YXAgcmluZ3MgKi8KLQkJZm9yIChyPTA7IHI8bmEtPm51bV9yeF9yaW5nczsgcisrKSB7Ci0JCQlt
YnFfc2FmZV9wdXJnZSgmbmEtPnJ4X3JpbmdzW3JdLnJ4X3F1ZXVlKTsKLQkJCW1icV9zYWZlX2Rl
c3Ryb3koJm5hLT5yeF9yaW5nc1tyXS5yeF9xdWV1ZSk7Ci0JCX0KLQotCQlmb3IgKHI9MDsgcjxu
YS0+bnVtX3J4X3JpbmdzOyByKyspCi0JCQluZXRtYXBfbWl0aWdhdGlvbl9jbGVhbnVwKCZnbmEt
Pm1pdFtyXSk7Ci0JCWZyZWUoZ25hLT5taXQsIE1fREVWQlVGKTsKLQotCQlmb3IgKHI9MDsgcjxu
YS0+bnVtX3R4X3JpbmdzOyByKyspIHsKLQkJCWZvciAoaT0wOyBpPG5hLT5udW1fdHhfZGVzYzsg
aSsrKSB7Ci0JCQkJbV9mcmVlbShuYS0+dHhfcmluZ3Nbcl0udHhfcG9vbFtpXSk7Ci0JCQl9Ci0J
CQlmcmVlKG5hLT50eF9yaW5nc1tyXS50eF9wb29sLCBNX0RFVkJVRik7Ci0JCX0KLQotI2lmZGVm
IFJBVEVfR0VORVJJQwotCQlpZiAoLS1yYXRlX2N0eC5yZWZjb3VudCA9PSAwKSB7Ci0JCQlEKCJk
ZWxfdGltZXIoKSIpOwotCQkJZGVsX3RpbWVyKCZyYXRlX2N0eC50aW1lcik7Ci0JCX0KLSNlbmRp
ZgogCX0KIAotI2lmZGVmIFJFR19SRVNFVAotCWVycm9yID0gaWZwLT5uZXRkZXZfb3BzLT5uZG9f
b3BlbihpZnApOwotCWlmIChlcnJvcikgewotCQlnb3RvIGZyZWVfdHhfcG9vbHM7Ci0JfQotI2Vu
ZGlmCi0KIAlyZXR1cm4gMDsKIAorCS8qIEhlcmUgKG5hLT5hY3RpdmVfZmRzID09IDApIGhvbGRz
LiAqLworY2F0Y2hfcng6CisJbm1fb3NfY2F0Y2hfcngoZ25hLCAwKTsKIHJlZ2lzdGVyX2hhbmRs
ZXI6CiAJcnRubF91bmxvY2soKTsKIGZyZWVfdHhfcG9vbHM6Ci0JZm9yIChyPTA7IHI8bmEtPm51
bV90eF9yaW5nczsgcisrKSB7Ci0JCWlmIChuYS0+dHhfcmluZ3Nbcl0udHhfcG9vbCA9PSBOVUxM
KQorCWZvcl9lYWNoX3R4X2tyaW5nKHIsIGtyaW5nLCBuYSkgeworCQltdHhfZGVzdHJveSgma3Jp
bmctPnR4X2V2ZW50X2xvY2spOworCQlpZiAoa3JpbmctPnR4X3Bvb2wgPT0gTlVMTCkgewogCQkJ
Y29udGludWU7Ci0JCWZvciAoaT0wOyBpPG5hLT5udW1fdHhfZGVzYzsgaSsrKQotCQkJaWYgKG5h
LT50eF9yaW5nc1tyXS50eF9wb29sW2ldKQotCQkJCW1fZnJlZW0obmEtPnR4X3JpbmdzW3JdLnR4
X3Bvb2xbaV0pOwotCQlmcmVlKG5hLT50eF9yaW5nc1tyXS50eF9wb29sLCBNX0RFVkJVRik7Ci0J
CW5hLT50eF9yaW5nc1tyXS50eF9wb29sID0gTlVMTDsKLQl9Ci0JZm9yIChyPTA7IHI8bmEtPm51
bV9yeF9yaW5nczsgcisrKSB7Ci0JCW5ldG1hcF9taXRpZ2F0aW9uX2NsZWFudXAoJmduYS0+bWl0
W3JdKTsKLQkJbWJxX3NhZmVfZGVzdHJveSgmbmEtPnJ4X3JpbmdzW3JdLnJ4X3F1ZXVlKTsKKwkJ
fQorCQlubV9vc19mcmVlKGtyaW5nLT50eF9wb29sKTsKKwkJa3JpbmctPnR4X3Bvb2wgPSBOVUxM
OwogCX0KLQlmcmVlKGduYS0+bWl0LCBNX0RFVkJVRik7CisJZm9yX2VhY2hfcnhfa3Jpbmcociwg
a3JpbmcsIG5hKSB7CisJCW1icV9zYWZlX2ZpbmkoJmtyaW5nLT5yeF9xdWV1ZSk7CisJfQorCW5t
X29zX2ZyZWUoZ25hLT5taXQpOwogb3V0OgogCiAJcmV0dXJuIGVycm9yOwpAQCAtNDExLDI0ICs1
NzIsNjcgQEAKIHN0YXRpYyB2b2lkCiBnZW5lcmljX21idWZfZGVzdHJ1Y3RvcihzdHJ1Y3QgbWJ1
ZiAqbSkKIHsKLQluZXRtYXBfZ2VuZXJpY19pcnEoTUJVRl9JRlAobSksIE1CVUZfVFhRKG0pLCBO
VUxMKTsKKwlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hID0gTkEoR0VOX1RYX01CVUZfSUZQKG0p
KTsKKwlzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZzsKKwl1bnNpZ25lZCBpbnQgciA9IE1CVUZf
VFhRKG0pOworCXVuc2lnbmVkIGludCByX29yaWcgPSByOworCisJaWYgKHVubGlrZWx5KCFubV9u
ZXRtYXBfb24obmEpIHx8IHIgPj0gbmEtPm51bV90eF9yaW5ncykpIHsKKwkJRCgiRXJyb3I6IG5v
IG5ldG1hcCBhZGFwdGVyIG9uIGRldmljZSAlcCIsCisJCSAgR0VOX1RYX01CVUZfSUZQKG0pKTsK
KwkJcmV0dXJuOworCX0KKworCS8qCisJICogRmlyc3QsIGNsZWFyIHRoZSBldmVudCBtYnVmLgor
CSAqIEluIHByaW5jaXBsZSwgdGhlIGV2ZW50ICdtJyBzaG91bGQgbWF0Y2ggdGhlIG9uZSBzdG9y
ZWQKKwkgKiBvbiByaW5nICdyJy4gSG93ZXZlciB3ZSBjaGVjayBpdCBleHBsaWNpdGVseSB0byBz
dGF5CisJICogc2FmZSBhZ2FpbnN0IGxvd2VyIGxheWVycyAocWRpc2MsIGRyaXZlciwgZXRjLikg
Y2hhbmdpbmcKKwkgKiBNQlVGX1RYUShtKSB1bmRlciBvdXIgZmVldC4gSWYgdGhlIG1hdGNoIGlz
IG5vdCBmb3VuZAorCSAqIG9uICdyJywgd2UgdHJ5IHRvIHNlZSBpZiBpdCBiZWxvbmdzIHRvIHNv
bWUgb3RoZXIgcmluZy4KKwkgKi8KKyAgICAgICAgZm9yICg7OykgeworCQlib29sIG1hdGNoID0g
ZmFsc2U7CisKKwkJa3JpbmcgPSAmbmEtPnR4X3JpbmdzW3JdOworCQltdHhfbG9ja19zcGluKCZr
cmluZy0+dHhfZXZlbnRfbG9jayk7CisJCWlmIChrcmluZy0+dHhfZXZlbnQgPT0gbSkgeworCQkJ
a3JpbmctPnR4X2V2ZW50ID0gTlVMTDsKKwkJCW1hdGNoID0gdHJ1ZTsKKwkJfQorCQltdHhfdW5s
b2NrX3NwaW4oJmtyaW5nLT50eF9ldmVudF9sb2NrKTsKKworCQlpZiAobWF0Y2gpIHsKKwkJCWlm
IChyICE9IHJfb3JpZykgeworCQkJCVJEKDEsICJldmVudCAlcCBtaWdyYXRlZDogcmluZyAldSAt
LT4gJXUiLAorCQkJCSAgICAgIG0sIHJfb3JpZywgcik7CisJCQl9CisJCQlicmVhazsKKwkJfQor
CisJCWlmICgrK3IgPT0gbmEtPm51bV90eF9yaW5ncykgciA9IDA7CisKKwkJaWYgKHIgPT0gcl9v
cmlnKSB7CisJCQlSRCgxLCAiQ2Fubm90IG1hdGNoIGV2ZW50ICVwIiwgbSk7CisJCQlyZXR1cm47
CisJCX0KKwl9CisKKwkvKiBTZWNvbmQsIHdha2UgdXAgY2xpZW50cy4gVGhleSB3aWxsIHJlY2xh
aW0gdGhlIGV2ZW50IHRocm91Z2gKKwkgKiB0eHN5bmMuICovCisJbmV0bWFwX2dlbmVyaWNfaXJx
KG5hLCByLCBOVUxMKTsKICNpZmRlZiBfX0ZyZWVCU0RfXwotCWlmIChuZXRtYXBfdmVyYm9zZSkK
LQkJUkQoNSwgIlR4IGlycSAoJXApIHF1ZXVlICVkIGluZGV4ICVkIiAsIG0sIE1CVUZfVFhRKG0p
LCAoaW50KSh1aW50cHRyX3QpbS0+bV9leHQuZXh0X2FyZzEpOwotCW5ldG1hcF9kZWZhdWx0X21i
dWZfZGVzdHJ1Y3RvcihtKTsKLSNlbmRpZiAvKiBfX0ZyZWVCU0RfXyAqLwotCUlGUkFURShyYXRl
X2N0eC5uZXcudHhpcnErKyk7CisJdm9pZF9tYnVmX2R0b3IobSwgTlVMTCwgTlVMTCk7CisjZW5k
aWYKIH0KIAotZXh0ZXJuIGludCBuZXRtYXBfYWRhcHRpdmVfaW87Ci0KIC8qIFJlY29yZCBjb21w
bGV0ZWQgdHJhbnNtaXNzaW9ucyBhbmQgdXBkYXRlIGh3dGFpbC4KICAqCiAgKiBUaGUgb2xkZXN0
IHR4IGJ1ZmZlciBub3QgeWV0IGNvbXBsZXRlZCBpcyBhdCBucl9od3RhaWwgKyAxLAogICogbnJf
aHdjdXIgaXMgdGhlIGZpcnN0IHVuc2VudCBidWZmZXIuCiAgKi8KIHN0YXRpYyB1X2ludAotZ2Vu
ZXJpY19uZXRtYXBfdHhfY2xlYW4oc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcpCitnZW5lcmlj
X25ldG1hcF90eF9jbGVhbihzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywgaW50IHR4cWRpc2Mp
CiB7CiAJdV9pbnQgY29uc3QgbGltID0ga3JpbmctPm5rcl9udW1fc2xvdHMgLSAxOwogCXVfaW50
IG5tX2kgPSBubV9uZXh0KGtyaW5nLT5ucl9od3RhaWwsIGxpbSk7CkBAIC00MzYsMzkgKzY0MCw1
MiBAQAogCXVfaW50IG4gPSAwOwogCXN0cnVjdCBtYnVmICoqdHhfcG9vbCA9IGtyaW5nLT50eF9w
b29sOwogCisJTkQoImh3Y3VyID0gJWQsIGh3dGFpbCA9ICVkIiwga3JpbmctPm5yX2h3Y3VyLCBr
cmluZy0+bnJfaHd0YWlsKTsKKwogCXdoaWxlIChubV9pICE9IGh3Y3VyKSB7IC8qIGJ1ZmZlcnMg
bm90IGNvbXBsZXRlZCAqLwogCQlzdHJ1Y3QgbWJ1ZiAqbSA9IHR4X3Bvb2xbbm1faV07CiAKLQkJ
aWYgKHVubGlrZWx5KG0gPT0gTlVMTCkpIHsKLQkJCS8qIHRoaXMgaXMgZG9uZSwgdHJ5IHRvIHJl
cGxlbmlzaCB0aGUgZW50cnkgKi8KLQkJCXR4X3Bvb2xbbm1faV0gPSBtID0gbmV0bWFwX2dldF9t
YnVmKE5FVE1BUF9CVUZfU0laRShrcmluZy0+bmEpKTsKKwkJaWYgKHR4cWRpc2MpIHsKKwkJCWlm
IChtID09IE5VTEwpIHsKKwkJCQkvKiBOb3RoaW5nIHRvIGRvLCB0aGlzIGlzIGdvaW5nCisJCQkJ
ICogdG8gYmUgcmVwbGVuaXNoZWQuICovCisJCQkJUkQoMywgIklzIHRoaXMgaGFwcGVuaW5nPyIp
OworCisJCQl9IGVsc2UgaWYgKE1CVUZfUVVFVUVEKG0pKSB7CisJCQkJYnJlYWs7IC8qIE5vdCBk
ZXF1ZXVlZCB5ZXQuICovCisKKwkJCX0gZWxzZSBpZiAoTUJVRl9SRUZDTlQobSkgIT0gMSkgewor
CQkJCS8qIFRoaXMgbWJ1ZiBoYXMgYmVlbiBkZXF1ZXVlZCBidXQgaXMgc3RpbGwgYnVzeQorCQkJ
CSAqIChyZWZjb3VudCBpcyAyKS4KKwkJCQkgKiBMZWF2ZSBpdCB0byB0aGUgZHJpdmVyIGFuZCBy
ZXBsZW5pc2guICovCisJCQkJbV9mcmVlbShtKTsKKwkJCQl0eF9wb29sW25tX2ldID0gTlVMTDsK
KwkJCX0KKworCQl9IGVsc2UgewogCQkJaWYgKHVubGlrZWx5KG0gPT0gTlVMTCkpIHsKLQkJCQlE
KCJtYnVmIGFsbG9jYXRpb24gZmFpbGVkLCBYWFggZXJyb3IiKTsKLQkJCQkvLyBYWFggaG93IGRv
IHdlIHByb2NlZWQgPyBicmVhayA/Ci0JCQkJcmV0dXJuIC1FTk9NRU07CisJCQkJaW50IGV2ZW50
X2NvbnN1bWVkOworCisJCQkJLyogVGhpcyBzbG90IHdhcyB1c2VkIHRvIHBsYWNlIGFuIGV2ZW50
LiAqLworCQkJCW10eF9sb2NrX3NwaW4oJmtyaW5nLT50eF9ldmVudF9sb2NrKTsKKwkJCQlldmVu
dF9jb25zdW1lZCA9IChrcmluZy0+dHhfZXZlbnQgPT0gTlVMTCk7CisJCQkJbXR4X3VubG9ja19z
cGluKCZrcmluZy0+dHhfZXZlbnRfbG9jayk7CisJCQkJaWYgKCFldmVudF9jb25zdW1lZCkgewor
CQkJCQkvKiBUaGUgZXZlbnQgaGFzIG5vdCBiZWVuIGNvbnN1bWVkIHlldCwKKwkJCQkJICogc3Rp
bGwgYnVzeSBpbiB0aGUgZHJpdmVyLiAqLworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLyogVGhl
IGV2ZW50IGhhcyBiZWVuIGNvbnN1bWVkLCB3ZSBjYW4gZ28KKwkJCQkgKiBhaGVhZC4gKi8KKwor
CQkJfSBlbHNlIGlmIChNQlVGX1JFRkNOVChtKSAhPSAxKSB7CisJCQkJLyogVGhpcyBtYnVmIGlz
IHN0aWxsIGJ1c3k6IGl0cyByZWZjbnQgaXMgMi4gKi8KKwkJCQlicmVhazsKIAkJCX0KLQkJfSBl
bHNlIGlmIChHRVRfTUJVRl9SRUZDTlQobSkgIT0gMSkgewotCQkJYnJlYWs7IC8qIFRoaXMgbWJ1
ZiBpcyBzdGlsbCBidXN5OiBpdHMgcmVmY250IGlzIDIuICovCiAJCX0KKwogCQluKys7CiAJCW5t
X2kgPSBubV9uZXh0KG5tX2ksIGxpbSk7Ci0jaWYgMCAvKiByYXRlIGFkYXB0YXRpb24gKi8KLQkJ
aWYgKG5ldG1hcF9hZGFwdGl2ZV9pbyA+IDEpIHsKLQkJCWlmIChuID49IG5ldG1hcF9hZGFwdGl2
ZV9pbykKLQkJCQlicmVhazsKLQkJfSBlbHNlIGlmIChuZXRtYXBfYWRhcHRpdmVfaW8pIHsKLQkJ
CS8qIGlmIGh3Y3VyIC0gbm1faSA8IGxpbS84IGRvIGFuIGVhcmx5IGJyZWFrCi0JCQkgKiBzbyB3
ZSBwcmV2ZW50IHRoZSBzZW5kZXIgZnJvbSBzdGFsbGluZy4gU2VlIENWVC4KLQkJCSAqLwotCQkJ
aWYgKGh3Y3VyID49IG5tX2kpIHsKLQkJCQlpZiAoaHdjdXIgLSBubV9pIDwgbGltLzIpCi0JCQkJ
CWJyZWFrOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoaHdjdXIgKyBsaW0gKyAxIC0gbm1faSA8IGxp
bS8yKQotCQkJCQlicmVhazsKLQkJCX0KLQkJfQotI2VuZGlmCiAJfQogCWtyaW5nLT5ucl9od3Rh
aWwgPSBubV9wcmV2KG5tX2ksIGxpbSk7CiAJTkQoInR4IGNvbXBsZXRlZCBbJWRdIC0+IGh3dGFp
bCAlZCIsIG4sIGtyaW5nLT5ucl9od3RhaWwpOwpAQCAtNDc2LDIzICs2OTMsMTcgQEAKIAlyZXR1
cm4gbjsKIH0KIAotCi0vKgotICogV2UgaGF2ZSBwZW5kaW5nIHBhY2tldHMgaW4gdGhlIGRyaXZl
ciBiZXR3ZWVuIG5yX2h3dGFpbCArMSBhbmQgaHdjdXIuCi0gKiBDb21wdXRlIGEgcG9zaXRpb24g
aW4gdGhlIG1pZGRsZSwgdG8gYmUgdXNlZCB0byBnZW5lcmF0ZQotICogYSBub3RpZmljYXRpb24u
Ci0gKi8KKy8qIENvbXB1dGUgYSBzbG90IGluZGV4IGluIHRoZSBtaWRkbGUgYmV0d2VlbiBpbmYg
YW5kIHN1cC4gKi8KIHN0YXRpYyBpbmxpbmUgdV9pbnQKLWdlbmVyaWNfdHhfZXZlbnRfbWlkZGxl
KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCB1X2ludCBod2N1cikKK3JpbmdfbWlkZGxlKHVf
aW50IGluZiwgdV9pbnQgc3VwLCB1X2ludCBsaW0pCiB7Ci0JdV9pbnQgbiA9IGtyaW5nLT5ua3Jf
bnVtX3Nsb3RzOwotCXVfaW50IG50YyA9IG5tX25leHQoa3JpbmctPm5yX2h3dGFpbCwgbi0xKTsK
Kwl1X2ludCBuID0gbGltICsgMTsKIAl1X2ludCBlOwogCi0JaWYgKGh3Y3VyID49IG50Yykgewot
CQllID0gKGh3Y3VyICsgbnRjKSAvIDI7CisJaWYgKHN1cCA+PSBpbmYpIHsKKwkJZSA9IChzdXAg
KyBpbmYpIC8gMjsKIAl9IGVsc2UgeyAvKiB3cmFwIGFyb3VuZCAqLwotCQllID0gKGh3Y3VyICsg
biArIG50YykgLyAyOworCQllID0gKHN1cCArIG4gKyBpbmYpIC8gMjsKIAkJaWYgKGUgPj0gbikg
ewogCQkJZSAtPSBuOwogCQl9CkBAIC01MDYsMzUgKzcxNyw1OSBAQAogCXJldHVybiBlOwogfQog
Ci0vKgotICogV2UgaGF2ZSBwZW5kaW5nIHBhY2tldHMgaW4gdGhlIGRyaXZlciBiZXR3ZWVuIG5y
X2h3dGFpbCsxIGFuZCBod2N1ci4KLSAqIFNjaGVkdWxlIGEgbm90aWZpY2F0aW9uIGFwcHJveGlt
YXRlbHkgaW4gdGhlIG1pZGRsZSBvZiB0aGUgdHdvLgotICogVGhlcmUgaXMgYSByYWNlIGJ1dCB0
aGlzIGlzIG9ubHkgY2FsbGVkIHdpdGhpbiB0eHN5bmMgd2hpY2ggZG9lcwotICogYSBkb3VibGUg
Y2hlY2suCi0gKi8KIHN0YXRpYyB2b2lkCiBnZW5lcmljX3NldF90eF9ldmVudChzdHJ1Y3QgbmV0
bWFwX2tyaW5nICprcmluZywgdV9pbnQgaHdjdXIpCiB7CisJdV9pbnQgbGltID0ga3JpbmctPm5r
cl9udW1fc2xvdHMgLSAxOwogCXN0cnVjdCBtYnVmICptOwogCXVfaW50IGU7CisJdV9pbnQgbnRj
ID0gbm1fbmV4dChrcmluZy0+bnJfaHd0YWlsLCBsaW0pOyAvKiBuZXh0IHRvIGNsZWFuICovCiAK
LQlpZiAobm1fbmV4dChrcmluZy0+bnJfaHd0YWlsLCBrcmluZy0+bmtyX251bV9zbG90cyAtMSkg
PT0gaHdjdXIpIHsKKwlpZiAobnRjID09IGh3Y3VyKSB7CiAJCXJldHVybjsgLyogYWxsIGJ1ZmZl
cnMgYXJlIGZyZWUgKi8KIAl9Ci0JZSA9IGdlbmVyaWNfdHhfZXZlbnRfbWlkZGxlKGtyaW5nLCBo
d2N1cik7CisKKwkvKgorCSAqIFdlIGhhdmUgcGVuZGluZyBwYWNrZXRzIGluIHRoZSBkcml2ZXIg
YmV0d2VlbiBod3RhaWwrMQorCSAqIGFuZCBod2N1ciwgYW5kIHdlIGhhdmUgdG8gY2hvc2Ugb25l
IG9mIHRoZXNlIHNsb3QgdG8KKwkgKiBnZW5lcmF0ZSBhIG5vdGlmaWNhdGlvbi4KKwkgKiBUaGVy
ZSBpcyBhIHJhY2UgYnV0IHRoaXMgaXMgb25seSBjYWxsZWQgd2l0aGluIHR4c3luYyB3aGljaAor
CSAqIGRvZXMgYSBkb3VibGUgY2hlY2suCisJICovCisjaWYgMAorCS8qIENob29zZSBhIHNsb3Qg
aW4gdGhlIG1pZGRsZSwgc28gdGhhdCB3ZSBkb24ndCByaXNrIGVuZGluZworCSAqIHVwIGluIGEg
c2l0dWF0aW9uIHdoZXJlIHRoZSBjbGllbnQgY29udGludW91c2x5IHdha2UgdXAsCisJICogZmls
bHMgb25lIG9yIGEgZmV3IFRYIHNsb3RzIGFuZCBnbyB0byBzbGVlcCBhZ2Fpbi4gKi8KKwllID0g
cmluZ19taWRkbGUobnRjLCBod2N1ciwgbGltKTsKKyNlbHNlCisJLyogQ2hvb3NlIHRoZSBmaXJz
dCBwZW5kaW5nIHNsb3QsIHRvIGJlIHNhZmUgYWdhaW5zdCBkcml2ZXIKKwkgKiByZW9yZGVyaW5n
IG1idWYgdHJhbnNtaXNzaW9ucy4gKi8KKwllID0gbnRjOworI2VuZGlmCiAKIAltID0ga3Jpbmct
PnR4X3Bvb2xbZV07Ci0JTkQoNSwgIlJlcXVlc3QgRXZlbnQgYXQgJWQgbWJ1ZiAlcCByZWZjbnQg
JWQiLCBlLCBtLCBtID8gR0VUX01CVUZfUkVGQ05UKG0pIDogLTIgKTsKIAlpZiAobSA9PSBOVUxM
KSB7Ci0JCS8qIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIGV2ZW50IG9u
IHRoZSBuZXRtYXAKLQkJICAgc2xvdCAnZSc6IFRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uICovCisJ
CS8qIEFuIGV2ZW50IGlzIGFscmVhZHkgaW4gcGxhY2UuICovCiAJCXJldHVybjsKIAl9Ci0Ja3Jp
bmctPnR4X3Bvb2xbZV0gPSBOVUxMOworCisJbXR4X2xvY2tfc3Bpbigma3JpbmctPnR4X2V2ZW50
X2xvY2spOworCWlmIChrcmluZy0+dHhfZXZlbnQpIHsKKwkJLyogQW4gZXZlbnQgaXMgYWxyZWFk
eSBpbiBwbGFjZS4gKi8KKwkJbXR4X3VubG9ja19zcGluKCZrcmluZy0+dHhfZXZlbnRfbG9jayk7
CisJCXJldHVybjsKKwl9CisKIAlTRVRfTUJVRl9ERVNUUlVDVE9SKG0sIGdlbmVyaWNfbWJ1Zl9k
ZXN0cnVjdG9yKTsKKwlrcmluZy0+dHhfZXZlbnQgPSBtOworCW10eF91bmxvY2tfc3Bpbigma3Jp
bmctPnR4X2V2ZW50X2xvY2spOworCisJa3JpbmctPnR4X3Bvb2xbZV0gPSBOVUxMOworCisJTkQo
NSwgIlJlcXVlc3QgRXZlbnQgYXQgJWQgbWJ1ZiAlcCByZWZjbnQgJWQiLCBlLCBtLCBtID8gTUJV
Rl9SRUZDTlQobSkgOiAtMiApOwogCi0JLy8gWFhYIHdtYigpID8KLQkvKiBEZWNyZW1lbnQgdGhl
IHJlZmNvdW50IGFuIGZyZWUgaXQgaWYgd2UgaGF2ZSB0aGUgbGFzdCBvbmUuICovCisJLyogRGVj
cmVtZW50IHRoZSByZWZjb3VudC4gVGhpcyB3aWxsIGZyZWUgaXQgaWYgd2UgbG9zZSB0aGUgcmFj
ZQorCSAqIHdpdGggdGhlIGRyaXZlci4gKi8KIAltX2ZyZWVtKG0pOwogCXNtcF9tYigpOwogfQpA
QCAtNTUxLDYgKzc4Niw3IEBACiBnZW5lcmljX25ldG1hcF90eHN5bmMoc3RydWN0IG5ldG1hcF9r
cmluZyAqa3JpbmcsIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hID0g
a3JpbmctPm5hOworCXN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICpnbmEgPSAoc3RydWN0
IG5ldG1hcF9nZW5lcmljX2FkYXB0ZXIgKiluYTsKIAlzdHJ1Y3QgaWZuZXQgKmlmcCA9IG5hLT5p
ZnA7CiAJc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nID0ga3JpbmctPnJpbmc7CiAJdV9pbnQgbm1f
aTsJLyogaW5kZXggaW50byB0aGUgbmV0bWFwIHJpbmcgKi8gLy8gagpAQCAtNTYwLDggKzc5Niw2
IEBACiAKIAlJRlJBVEUocmF0ZV9jdHgubmV3LnR4c3luYysrKTsKIAotCS8vIFRPRE86IGhhbmRs
ZSB0aGUgY2FzZSBvZiBtYnVmIGFsbG9jYXRpb24gZmFpbHVyZQotCiAJcm1iKCk7CiAKIAkvKgpA
QCAtNTY5LDcyICs4MDMsMTIxIEBACiAJICovCiAJbm1faSA9IGtyaW5nLT5ucl9od2N1cjsKIAlp
ZiAobm1faSAhPSBoZWFkKSB7CS8qIHdlIGhhdmUgbmV3IHBhY2tldHMgdG8gc2VuZCAqLworCQlz
dHJ1Y3Qgbm1fb3NfZ2VuX2FyZyBhOworCQl1X2ludCBldmVudCA9IC0xOworCisJCWlmIChnbmEt
PnR4cWRpc2MgJiYgbm1fa3JfdHhlbXB0eShrcmluZykpIHsKKwkJCS8qIEluIHR4cWRpc2MgbW9k
ZSwgd2UgYXNrIGZvciBhIGRlbGF5ZWQgbm90aWZpY2F0aW9uLAorCQkJICogYnV0IG9ubHkgd2hl
biBjdXIgPT0gaHd0YWlsLCB3aGljaCBtZWFucyB0aGF0IHRoZQorCQkJICogY2xpZW50IGlzIGdv
aW5nIHRvIGJsb2NrLiAqLworCQkJZXZlbnQgPSByaW5nX21pZGRsZShubV9pLCBoZWFkLCBsaW0p
OworCQkJTkQoMywgIlBsYWNlIHR4cWRpc2MgZXZlbnQgKGh3Y3VyPSV1LGV2ZW50PSV1LCIKKwkJ
CSAgICAgICJoZWFkPSV1LGh3dGFpbD0ldSkiLCBubV9pLCBldmVudCwgaGVhZCwKKwkJCSAgICAg
IGtyaW5nLT5ucl9od3RhaWwpOworCQl9CisKKwkJYS5pZnAgPSBpZnA7CisJCWEucmluZ19uciA9
IHJpbmdfbnI7CisJCWEuaGVhZCA9IGEudGFpbCA9IE5VTEw7CisKIAkJd2hpbGUgKG5tX2kgIT0g
aGVhZCkgewogCQkJc3RydWN0IG5ldG1hcF9zbG90ICpzbG90ID0gJnJpbmctPnNsb3Rbbm1faV07
CiAJCQl1X2ludCBsZW4gPSBzbG90LT5sZW47CiAJCQl2b2lkICphZGRyID0gTk1CKG5hLCBzbG90
KTsKLQogCQkJLyogZGV2aWNlLXNwZWNpZmljICovCiAJCQlzdHJ1Y3QgbWJ1ZiAqbTsKIAkJCWlu
dCB0eF9yZXQ7CiAKIAkJCU5NX0NIRUNLX0FERFJfTEVOKG5hLCBhZGRyLCBsZW4pOwogCi0JCQkv
KiBUYWxlIGEgbWJ1ZiBmcm9tIHRoZSB0eCBwb29sIGFuZCBjb3B5IGluIHRoZSB1c2VyIHBhY2tl
dC4gKi8KKwkJCS8qIFRhbGUgYSBtYnVmIGZyb20gdGhlIHR4IHBvb2wgKHJlcGxlbmlzaGluZyB0
aGUgcG9vbAorCQkJICogZW50cnkgaWYgbmVjZXNzYXJ5KSBhbmQgY29weSBpbiB0aGUgdXNlciBw
YWNrZXQuICovCiAJCQltID0ga3JpbmctPnR4X3Bvb2xbbm1faV07Ci0JCQlpZiAodW5saWtlbHko
IW0pKSB7Ci0JCQkJUkQoNSwgIlRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiIpOwotCQkJCWtyaW5n
LT50eF9wb29sW25tX2ldID0gbSA9IG5ldG1hcF9nZXRfbWJ1ZihORVRNQVBfQlVGX1NJWkUobmEp
KTsKLQkJCQlpZiAodW5saWtlbHkobSA9PSBOVUxMKSkgewotCQkJCQlEKCJtYnVmIGFsbG9jYXRp
b24gZmFpbGVkIik7CisJCQlpZiAodW5saWtlbHkobSA9PSBOVUxMKSkgeworCQkJCWtyaW5nLT50
eF9wb29sW25tX2ldID0gbSA9CisJCQkJCW5tX29zX2dldF9tYnVmKGlmcCwgTkVUTUFQX0JVRl9T
SVpFKG5hKSk7CisJCQkJaWYgKG0gPT0gTlVMTCkgeworCQkJCQlSRCgyLCAiRmFpbGVkIHRvIHJl
cGxlbmlzaCBtYnVmIik7CisJCQkJCS8qIEhlcmUgd2UgY291bGQgc2NoZWR1bGUgYSB0aW1lciB3
aGljaAorCQkJCQkgKiByZXRyaWVzIHRvIHJlcGxlbmlzaCBhZnRlciBhIHdoaWxlLAorCQkJCQkg
KiBhbmQgbm90aWZpZXMgdGhlIGNsaWVudCB3aGVuIGl0CisJCQkJCSAqIG1hbmFnZXMgdG8gcmVw
bGVuaXNoIHNvbWUgc2xvdHMuIEluCisJCQkJCSAqIGFueSBjYXNlIHdlIGJyZWFrIGVhcmx5IHRv
IGF2b2lkCisJCQkJCSAqIGNyYXNoZXMuICovCiAJCQkJCWJyZWFrOwogCQkJCX0KKwkJCQlJRlJB
VEUocmF0ZV9jdHgubmV3LnR4cmVwbCsrKTsKIAkJCX0KLQkJCS8qIFhYWCB3ZSBzaG91bGQgYXNr
IG5vdGlmaWNhdGlvbnMgd2hlbiBOU19SRVBPUlQgaXMgc2V0LAotCQkJICogb3Igcm91Z2hseSBl
dmVyeSBoYWxmIGZyYW1lLiBXZSBjYW4gb3B0aW1pemUgdGhpcwotCQkJICogYnkgbGF6aWx5IHJl
cXVlc3Rpbmcgbm90aWZpY2F0aW9ucyBvbmx5IHdoZW4gYQotCQkJICogdHJhbnNtaXNzaW9uIGZh
aWxzLiBQcm9iYWJseSB0aGUgYmVzdCB3YXkgaXMgdG8KLQkJCSAqIGJyZWFrIG9uIGZhaWx1cmVz
IGFuZCBzZXQgbm90aWZpY2F0aW9ucyB3aGVuCi0JCQkgKiByaW5nLT5jdXIgPT0gcmluZy0+dGFp
bCB8fCBubV9pICE9IGN1cgorCisJCQlhLm0gPSBtOworCQkJYS5hZGRyID0gYWRkcjsKKwkJCWEu
bGVuID0gbGVuOworCQkJYS5xZXZlbnQgPSAobm1faSA9PSBldmVudCk7CisJCQkvKiBXaGVuIG5v
dCBpbiB0eHFkaXNjIG1vZGUsIHdlIHNob3VsZCBhc2sKKwkJCSAqIG5vdGlmaWNhdGlvbnMgd2hl
biBOU19SRVBPUlQgaXMgc2V0LCBvciByb3VnaGx5CisJCQkgKiBldmVyeSBoYWxmIHJpbmcuIFRv
IG9wdGltaXplIHRoaXMsIHdlIHNldCBhCisJCQkgKiBub3RpZmljYXRpb24gZXZlbnQgd2hlbiB0
aGUgY2xpZW50IHJ1bnMgb3V0IG9mCisJCQkgKiBUWCByaW5nIHNwYWNlLCBvciB3aGVuIHRyYW5z
bWlzc2lvbiBmYWlscy4gSW4KKwkJCSAqIHRoZSBsYXR0ZXIgY2FzZSB3ZSBhbHNvIGJyZWFrIGVh
cmx5LgogCQkJICovCi0JCQl0eF9yZXQgPSBnZW5lcmljX3htaXRfZnJhbWUoaWZwLCBtLCBhZGRy
LCBsZW4sIHJpbmdfbnIpOworCQkJdHhfcmV0ID0gbm1fb3NfZ2VuZXJpY194bWl0X2ZyYW1lKCZh
KTsKIAkJCWlmICh1bmxpa2VseSh0eF9yZXQpKSB7Ci0JCQkJTkQoNSwgInN0YXJ0X3htaXQgZmFp
bGVkOiBlcnIgJWQgW25tX2kgJXUsIGhlYWQgJXUsIGh3dGFpbCAldV0iLAotCQkJCQkJdHhfcmV0
LCBubV9pLCBoZWFkLCBrcmluZy0+bnJfaHd0YWlsKTsKLQkJCQkvKgotCQkJCSAqIE5vIHJvb20g
Zm9yIHRoaXMgbWJ1ZiBpbiB0aGUgZGV2aWNlIGRyaXZlci4KLQkJCQkgKiBSZXF1ZXN0IGEgbm90
aWZpY2F0aW9uIEZPUiBBIFBSRVZJT1VTIE1CVUYsCi0JCQkJICogdGhlbiBjYWxsIGdlbmVyaWNf
bmV0bWFwX3R4X2NsZWFuKGtyaW5nKSB0byBkbyB0aGUKLQkJCQkgKiBkb3VibGUgY2hlY2sgYW5k
IHNlZSBpZiB3ZSBjYW4gZnJlZSBtb3JlIGJ1ZmZlcnMuCi0JCQkJICogSWYgdGhlcmUgaXMgc3Bh
Y2UgY29udGludWUsIGVsc2UgYnJlYWs7Ci0JCQkJICogTk9URTogdGhlIGRvdWJsZSBjaGVjayBp
cyBuZWNlc3NhcnkgaWYgdGhlIHByb2JsZW0KLQkJCQkgKiBvY2N1cnMgaW4gdGhlIHR4c3luYyBj
YWxsIGFmdGVyIHNlbHJlY29yZCgpLgotCQkJCSAqIEFsc28sIHdlIG5lZWQgc29tZSB3YXkgdG8g
dGVsbCB0aGUgY2FsbGVyIHRoYXQgbm90Ci0JCQkJICogYWxsIGJ1ZmZlcnMgd2VyZSBxdWV1ZWQg
b250byB0aGUgZGV2aWNlICh0aGlzIHdhcwotCQkJCSAqIG5vdCBhIHByb2JsZW0gd2l0aCBuYXRp
dmUgbmV0bWFwIGRyaXZlciB3aGVyZSBzcGFjZQotCQkJCSAqIGlzIHByZWFsbG9jYXRlZCkuIFRo
ZSBicmlkZ2UgaGFzIGEgc2ltaWxhciBwcm9ibGVtCi0JCQkJICogYW5kIHdlIHNvbHZlIGl0IHRo
ZXJlIGJ5IGRyb3BwaW5nIHRoZSBleGNlc3MgcGFja2V0cy4KLQkJCQkgKi8KLQkJCQlnZW5lcmlj
X3NldF90eF9ldmVudChrcmluZywgbm1faSk7Ci0JCQkJaWYgKGdlbmVyaWNfbmV0bWFwX3R4X2Ns
ZWFuKGtyaW5nKSkgeyAvKiBzcGFjZSBub3cgYXZhaWxhYmxlICovCi0JCQkJCWNvbnRpbnVlOwot
CQkJCX0gZWxzZSB7Ci0JCQkJCWJyZWFrOworCQkJCWlmICghZ25hLT50eHFkaXNjKSB7CisJCQkJ
CS8qCisJCQkJCSAqIE5vIHJvb20gZm9yIHRoaXMgbWJ1ZiBpbiB0aGUgZGV2aWNlIGRyaXZlci4K
KwkJCQkJICogUmVxdWVzdCBhIG5vdGlmaWNhdGlvbiBGT1IgQSBQUkVWSU9VUyBNQlVGLAorCQkJ
CQkgKiB0aGVuIGNhbGwgZ2VuZXJpY19uZXRtYXBfdHhfY2xlYW4oa3JpbmcpIHRvIGRvIHRoZQor
CQkJCQkgKiBkb3VibGUgY2hlY2sgYW5kIHNlZSBpZiB3ZSBjYW4gZnJlZSBtb3JlIGJ1ZmZlcnMu
CisJCQkJCSAqIElmIHRoZXJlIGlzIHNwYWNlIGNvbnRpbnVlLCBlbHNlIGJyZWFrOworCQkJCQkg
KiBOT1RFOiB0aGUgZG91YmxlIGNoZWNrIGlzIG5lY2Vzc2FyeSBpZiB0aGUgcHJvYmxlbQorCQkJ
CQkgKiBvY2N1cnMgaW4gdGhlIHR4c3luYyBjYWxsIGFmdGVyIHNlbHJlY29yZCgpLgorCQkJCQkg
KiBBbHNvLCB3ZSBuZWVkIHNvbWUgd2F5IHRvIHRlbGwgdGhlIGNhbGxlciB0aGF0IG5vdAorCQkJ
CQkgKiBhbGwgYnVmZmVycyB3ZXJlIHF1ZXVlZCBvbnRvIHRoZSBkZXZpY2UgKHRoaXMgd2FzCisJ
CQkJCSAqIG5vdCBhIHByb2JsZW0gd2l0aCBuYXRpdmUgbmV0bWFwIGRyaXZlciB3aGVyZSBzcGFj
ZQorCQkJCQkgKiBpcyBwcmVhbGxvY2F0ZWQpLiBUaGUgYnJpZGdlIGhhcyBhIHNpbWlsYXIgcHJv
YmxlbQorCQkJCQkgKiBhbmQgd2Ugc29sdmUgaXQgdGhlcmUgYnkgZHJvcHBpbmcgdGhlIGV4Y2Vz
cyBwYWNrZXRzLgorCQkJCQkgKi8KKwkJCQkJZ2VuZXJpY19zZXRfdHhfZXZlbnQoa3JpbmcsIG5t
X2kpOworCQkJCQlpZiAoZ2VuZXJpY19uZXRtYXBfdHhfY2xlYW4oa3JpbmcsIGduYS0+dHhxZGlz
YykpIHsKKwkJCQkJCS8qIHNwYWNlIG5vdyBhdmFpbGFibGUgKi8KKwkJCQkJCWNvbnRpbnVlOwor
CQkJCQl9IGVsc2UgeworCQkJCQkJYnJlYWs7CisJCQkJCX0KIAkJCQl9CisKKwkJCQkvKiBJbiB0
eHFkaXNjIG1vZGUsIHRoZSBuZXRtYXAtYXdhcmUgcWRpc2MKKwkJCQkgKiBxdWV1ZSBoYXMgdGhl
IHNhbWUgbGVuZ3RoIGFzIHRoZSBudW1iZXIgb2YKKwkJCQkgKiBuZXRtYXAgc2xvdHMgKE4pLiBT
aW5jZSB0YWlsIGlzIGFkdmFuY2VkCisJCQkJICogb25seSB3aGVuIHBhY2tldHMgYXJlIGRlcXVl
dWVkLCBxZGlzYworCQkJCSAqIHF1ZXVlIG92ZXJydW4gY2Fubm90IGhhcHBlbiwgc28KKwkJCQkg
KiBubV9vc19nZW5lcmljX3htaXRfZnJhbWUoKSBkaWQgbm90IGZhaWwKKwkJCQkgKiBiZWNhdXNl
IG9mIHRoYXQuCisJCQkJICogSG93ZXZlciwgcGFja2V0cyBjYW4gYmUgZHJvcHBlZCBiZWNhdXNl
CisJCQkJICogY2FycmllciBpcyBvZmYsIG9yIGJlY2F1c2Ugb3VyIHFkaXNjIGlzCisJCQkJICog
YmVpbmcgZGVhY3RpdmF0ZWQsIG9yIHBvc3NpYmx5IGZvciBvdGhlcgorCQkJCSAqIHJlYXNvbnMu
IEluIHRoZXNlIGNhc2VzLCB3ZSBqdXN0IGxldCB0aGUKKwkJCQkgKiBwYWNrZXQgdG8gYmUgZHJv
cHBlZC4gKi8KKwkJCQlJRlJBVEUocmF0ZV9jdHgubmV3LnR4ZHJvcCsrKTsKIAkJCX0KKwogCQkJ
c2xvdC0+ZmxhZ3MgJj0gfihOU19SRVBPUlQgfCBOU19CVUZfQ0hBTkdFRCk7CiAJCQlubV9pID0g
bm1fbmV4dChubV9pLCBsaW0pOwotCQkJSUZSQVRFKHJhdGVfY3R4Lm5ldy50eHBrdCArKyk7CisJ
CQlJRlJBVEUocmF0ZV9jdHgubmV3LnR4cGt0KyspOwogCQl9Ci0KLQkJLyogVXBkYXRlIGh3Y3Vy
IHRvIHRoZSBuZXh0IHNsb3QgdG8gdHJhbnNtaXQuICovCi0JCWtyaW5nLT5ucl9od2N1ciA9IG5t
X2k7IC8qIG5vdCBoZWFkLCB3ZSBjb3VsZCBicmVhayBlYXJseSAqLworCQlpZiAoYS5oZWFkICE9
IE5VTEwpIHsKKwkJCWEuYWRkciA9IE5VTEw7CisJCQlubV9vc19nZW5lcmljX3htaXRfZnJhbWUo
JmEpOworCQl9CisJCS8qIFVwZGF0ZSBod2N1ciB0byB0aGUgbmV4dCBzbG90IHRvIHRyYW5zbWl0
LiBIZXJlIG5tX2kKKwkJICogaXMgbm90IG5lY2Vzc2FyaWx5IGhlYWQsIHdlIGNvdWxkIGJyZWFr
IGVhcmx5LiAqLworCQlrcmluZy0+bnJfaHdjdXIgPSBubV9pOwogCX0KIAogCS8qCiAJICogU2Vj
b25kLCByZWNsYWltIGNvbXBsZXRlZCBidWZmZXJzCiAJICovCi0JaWYgKGZsYWdzICYgTkFGX0ZP
UkNFX1JFQ0xBSU0gfHwgbm1fa3JfdHhlbXB0eShrcmluZykpIHsKKwlpZiAoIWduYS0+dHhxZGlz
YyAmJiAoZmxhZ3MgJiBOQUZfRk9SQ0VfUkVDTEFJTSB8fCBubV9rcl90eGVtcHR5KGtyaW5nKSkp
IHsKIAkJLyogTm8gbW9yZSBhdmFpbGFibGUgc2xvdHM/IFNldCBhIG5vdGlmaWNhdGlvbiBldmVu
dAogCQkgKiBvbiBhIG5ldG1hcCBzbG90IHRoYXQgd2lsbCBiZSBjbGVhbmVkIGluIHRoZSBmdXR1
cmUuCiAJCSAqIE5vIGRvdWJsZWNoZWNrIGlzIHBlcmZvcm1lZCwgc2luY2UgdHhzeW5jKCkgd2ls
bCBiZQpAQCAtNjQyLDU4ICs5MjUsNzQgQEAKIAkJICovCiAJCWdlbmVyaWNfc2V0X3R4X2V2ZW50
KGtyaW5nLCBubV9pKTsKIAl9Ci0JTkQoInR4ICMlZCwgaHd0YWlsID0gJWQiLCBuLCBrcmluZy0+
bnJfaHd0YWlsKTsKIAotCWdlbmVyaWNfbmV0bWFwX3R4X2NsZWFuKGtyaW5nKTsKKwlnZW5lcmlj
X25ldG1hcF90eF9jbGVhbihrcmluZywgZ25hLT50eHFkaXNjKTsKIAogCXJldHVybiAwOwogfQog
CiAKIC8qCi0gKiBUaGlzIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCAodGhyb3VnaCBuZXRtYXBfY2F0
Y2hfcngoKSkKKyAqIFRoaXMgaGFuZGxlciBpcyByZWdpc3RlcmVkICh0aHJvdWdoIG5tX29zX2Nh
dGNoX3J4KCkpCiAgKiB3aXRoaW4gdGhlIGF0dGFjaGVkIG5ldHdvcmsgaW50ZXJmYWNlCiAgKiBp
biB0aGUgUlggc3Vic3lzdGVtLCBzbyB0aGF0IGV2ZXJ5IG1idWYgcGFzc2VkIHVwIGJ5CiAgKiB0
aGUgZHJpdmVyIGNhbiBiZSBzdG9sZW4gdG8gdGhlIG5ldHdvcmsgc3RhY2suCiAgKiBTdG9sZW4g
cGFja2V0cyBhcmUgcHV0IGluIGEgcXVldWUgd2hlcmUgdGhlCiAgKiBnZW5lcmljX25ldG1hcF9y
eHN5bmMoKSBjYWxsYmFjayBjYW4gZXh0cmFjdCB0aGVtLgorICogUmV0dXJucyAxIGlmIHRoZSBw
YWNrZXQgd2FzIHN0b2xlbiwgMCBvdGhlcndpc2UuCiAgKi8KLXZvaWQKK2ludAogZ2VuZXJpY19y
eF9oYW5kbGVyKHN0cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3QgbWJ1ZiAqbSkKIHsKIAlzdHJ1Y3Qg
bmV0bWFwX2FkYXB0ZXIgKm5hID0gTkEoaWZwKTsKIAlzdHJ1Y3QgbmV0bWFwX2dlbmVyaWNfYWRh
cHRlciAqZ25hID0gKHN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICopbmE7CisJc3RydWN0
IG5ldG1hcF9rcmluZyAqa3Jpbmc7CiAJdV9pbnQgd29ya19kb25lOwotCXVfaW50IHJyID0gTUJV
Rl9SWFEobSk7IC8vIHJlY2VpdmUgcmluZyBudW1iZXIKKwl1X2ludCByID0gTUJVRl9SWFEobSk7
IC8qIHJlY2VpdmUgcmluZyBudW1iZXIgKi8KKworCWlmIChyID49IG5hLT5udW1fcnhfcmluZ3Mp
IHsKKwkJciA9IHIgJSBuYS0+bnVtX3J4X3JpbmdzOworCX0KKworCWtyaW5nID0gJm5hLT5yeF9y
aW5nc1tyXTsKIAotCWlmIChyciA+PSBuYS0+bnVtX3J4X3JpbmdzKSB7Ci0JCXJyID0gcnIgJSBu
YS0+bnVtX3J4X3JpbmdzOyAvLyBYWFggZXhwZW5zaXZlLi4uCisJaWYgKGtyaW5nLT5ucl9tb2Rl
ID09IE5LUl9ORVRNQVBfT0ZGKSB7CisJCS8qIFdlIG11c3Qgbm90IGludGVyY2VwdCB0aGlzIG1i
dWYuICovCisJCXJldHVybiAwOwogCX0KIAogCS8qIGxpbWl0IHRoZSBzaXplIG9mIHRoZSBxdWV1
ZSAqLwotCWlmICh1bmxpa2VseShtYnFfbGVuKCZuYS0+cnhfcmluZ3NbcnJdLnJ4X3F1ZXVlKSA+
IDEwMjQpKSB7CisJaWYgKHVubGlrZWx5KCFnbmEtPnJ4c2cgJiYgTUJVRl9MRU4obSkgPiBORVRN
QVBfQlVGX1NJWkUobmEpKSkgeworCQkvKiBUaGlzIG1heSBoYXBwZW4gd2hlbiBHUk8vTFJPIGZl
YXR1cmVzIGFyZSBlbmFibGVkIGZvcgorCQkgKiB0aGUgTklDIGRyaXZlciB3aGVuIHRoZSBnZW5l
cmljIGFkYXB0ZXIgZG9lcyBub3QKKwkJICogc3VwcG9ydCBSWCBzY2F0dGVyLWdhdGhlci4gKi8K
KwkJUkQoMiwgIldhcm5pbmc6IGRyaXZlciBwdXNoZWQgdXAgYmlnIHBhY2tldCAiCisJCQkJIihz
aXplPSVkKSIsIChpbnQpTUJVRl9MRU4obSkpOworCQltX2ZyZWVtKG0pOworCX0gZWxzZSBpZiAo
dW5saWtlbHkobWJxX2xlbigma3JpbmctPnJ4X3F1ZXVlKSA+IDEwMjQpKSB7CiAJCW1fZnJlZW0o
bSk7CiAJfSBlbHNlIHsKLQkJbWJxX3NhZmVfZW5xdWV1ZSgmbmEtPnJ4X3JpbmdzW3JyXS5yeF9x
dWV1ZSwgbSk7CisJCW1icV9zYWZlX2VucXVldWUoJmtyaW5nLT5yeF9xdWV1ZSwgbSk7CiAJfQog
CiAJaWYgKG5ldG1hcF9nZW5lcmljX21pdCA8IDMyNzY4KSB7CiAJCS8qIG5vIHJ4IG1pdGlnYXRp
b24sIHBhc3Mgbm90aWZpY2F0aW9uIHVwICovCi0JCW5ldG1hcF9nZW5lcmljX2lycShuYS0+aWZw
LCByciwgJndvcmtfZG9uZSk7Ci0JCUlGUkFURShyYXRlX2N0eC5uZXcucnhpcnErKyk7CisJCW5l
dG1hcF9nZW5lcmljX2lycShuYSwgciwgJndvcmtfZG9uZSk7CiAJfSBlbHNlIHsKIAkJLyogc2Ft
ZSBhcyBzZW5kIGNvbWJpbmluZywgZmlsdGVyIG5vdGlmaWNhdGlvbiBpZiB0aGVyZSBpcyBhCiAJ
CSAqIHBlbmRpbmcgdGltZXIsIG90aGVyd2lzZSBwYXNzIGl0IHVwIGFuZCBzdGFydCBhIHRpbWVy
LgogCQkgKi8KLQkJaWYgKGxpa2VseShuZXRtYXBfbWl0aWdhdGlvbl9hY3RpdmUoJmduYS0+bWl0
W3JyXSkpKSB7CisJCWlmIChsaWtlbHkobm1fb3NfbWl0aWdhdGlvbl9hY3RpdmUoJmduYS0+bWl0
W3JdKSkpIHsKIAkJCS8qIFJlY29yZCB0aGF0IHRoZXJlIGlzIHNvbWUgcGVuZGluZyB3b3JrLiAq
LwotCQkJZ25hLT5taXRbcnJdLm1pdF9wZW5kaW5nID0gMTsKKwkJCWduYS0+bWl0W3JdLm1pdF9w
ZW5kaW5nID0gMTsKIAkJfSBlbHNlIHsKLQkJCW5ldG1hcF9nZW5lcmljX2lycShuYS0+aWZwLCBy
ciwgJndvcmtfZG9uZSk7Ci0JCQlJRlJBVEUocmF0ZV9jdHgubmV3LnJ4aXJxKyspOwotCQkJbmV0
bWFwX21pdGlnYXRpb25fc3RhcnQoJmduYS0+bWl0W3JyXSk7CisJCQluZXRtYXBfZ2VuZXJpY19p
cnEobmEsIHIsICZ3b3JrX2RvbmUpOworCQkJbm1fb3NfbWl0aWdhdGlvbl9zdGFydCgmZ25hLT5t
aXRbcl0pOwogCQl9CiAJfQorCisJLyogV2UgaGF2ZSBpbnRlcmNlcHRlZCB0aGUgbWJ1Zi4gKi8K
KwlyZXR1cm4gMTsKIH0KIAogLyoKQEAgLTcxMyw1NCArMTAxMiwyMyBAQAogCXVfaW50IGNvbnN0
IGhlYWQgPSBrcmluZy0+cmhlYWQ7CiAJaW50IGZvcmNlX3VwZGF0ZSA9IChmbGFncyAmIE5BRl9G
T1JDRV9SRUFEKSB8fCBrcmluZy0+bnJfa2ZsYWdzICYgTktSX1BFTkRJTlRSOwogCisJLyogQWRh
cHRlci1zcGVjaWZpYyB2YXJpYWJsZXMuICovCisJdWludDE2X3Qgc2xvdF9mbGFncyA9IGtyaW5n
LT5ua3Jfc2xvdF9mbGFnczsKKwl1X2ludCBubV9idWZfbGVuID0gTkVUTUFQX0JVRl9TSVpFKG5h
KTsKKwlzdHJ1Y3QgbWJxIHRtcHE7CisJc3RydWN0IG1idWYgKm07CisJaW50IGF2YWlsOyAvKiBp
biBieXRlcyAqLworCWludCBtbGVuOworCWludCBjb3B5OworCiAJaWYgKGhlYWQgPiBsaW0pCiAJ
CXJldHVybiBuZXRtYXBfcmluZ19yZWluaXQoa3JpbmcpOwogCi0JLyoKLQkgKiBGaXJzdCBwYXJ0
OiBpbXBvcnQgbmV3bHkgcmVjZWl2ZWQgcGFja2V0cy4KLQkgKi8KLQlpZiAobmV0bWFwX25vX3Bl
bmRpbnRyIHx8IGZvcmNlX3VwZGF0ZSkgewotCQkvKiBleHRyYWN0IGJ1ZmZlcnMgZnJvbSB0aGUg
cnggcXVldWUsIHN0b3AgYXQgbW9zdCBvbmUKLQkJICogc2xvdCBiZWZvcmUgbnJfaHdjdXIgKHN0
b3BfaSkKLQkJICovCi0JCXVpbnQxNl90IHNsb3RfZmxhZ3MgPSBrcmluZy0+bmtyX3Nsb3RfZmxh
Z3M7Ci0JCXVfaW50IHN0b3BfaSA9IG5tX3ByZXYoa3JpbmctPm5yX2h3Y3VyLCBsaW0pOwotCi0J
CW5tX2kgPSBrcmluZy0+bnJfaHd0YWlsOyAvKiBmaXJzdCBlbXB0eSBzbG90IGluIHRoZSByZWNl
aXZlIHJpbmcgKi8KLQkJZm9yIChuID0gMDsgbm1faSAhPSBzdG9wX2k7IG4rKykgewotCQkJaW50
IGxlbjsKLQkJCXZvaWQgKmFkZHIgPSBOTUIobmEsICZyaW5nLT5zbG90W25tX2ldKTsKLQkJCXN0
cnVjdCBtYnVmICptOwotCi0JCQkvKiB3ZSBvbmx5IGNoZWNrIHRoZSBhZGRyZXNzIGhlcmUgb24g
Z2VuZXJpYyByeCByaW5ncyAqLwotCQkJaWYgKGFkZHIgPT0gTkVUTUFQX0JVRl9CQVNFKG5hKSkg
eyAvKiBCYWQgYnVmZmVyICovCi0JCQkJcmV0dXJuIG5ldG1hcF9yaW5nX3JlaW5pdChrcmluZyk7
Ci0JCQl9Ci0JCQkvKgotCQkJICogQ2FsbCB0aGUgbG9ja2VkIHZlcnNpb24gb2YgdGhlIGZ1bmN0
aW9uLgotCQkJICogWFhYIElkZWFsbHkgd2UgY291bGQgZ3JhYiBhIGJhdGNoIG9mIG1idWZzIGF0
IG9uY2UKLQkJCSAqIGFuZCBzYXZlIHNvbWUgbG9ja2luZyBvdmVyaGVhZC4KLQkJCSAqLwotCQkJ
bSA9IG1icV9zYWZlX2RlcXVldWUoJmtyaW5nLT5yeF9xdWV1ZSk7Ci0JCQlpZiAoIW0pCS8qIG5v
IG1vcmUgZGF0YSAqLwotCQkJCWJyZWFrOwotCQkJbGVuID0gTUJVRl9MRU4obSk7Ci0JCQltX2Nv
cHlkYXRhKG0sIDAsIGxlbiwgYWRkcik7Ci0JCQlyaW5nLT5zbG90W25tX2ldLmxlbiA9IGxlbjsK
LQkJCXJpbmctPnNsb3Rbbm1faV0uZmxhZ3MgPSBzbG90X2ZsYWdzOwotCQkJbV9mcmVlbShtKTsK
LQkJCW5tX2kgPSBubV9uZXh0KG5tX2ksIGxpbSk7Ci0JCX0KLQkJaWYgKG4pIHsKLQkJCWtyaW5n
LT5ucl9od3RhaWwgPSBubV9pOwotCQkJSUZSQVRFKHJhdGVfY3R4Lm5ldy5yeHBrdCArPSBuKTsK
LQkJfQotCQlrcmluZy0+bnJfa2ZsYWdzICY9IH5OS1JfUEVORElOVFI7Ci0JfQorCUlGUkFURShy
YXRlX2N0eC5uZXcucnhzeW5jKyspOwogCi0JLy8gWFhYIHNob3VsZCB3ZSBpbnZlcnQgdGhlIG9y
ZGVyID8KIAkvKgotCSAqIFNlY29uZCBwYXJ0OiBza2lwIHBhc3QgcGFja2V0cyB0aGF0IHVzZXJz
cGFjZSBoYXMgcmVsZWFzZWQuCisJICogRmlyc3QgcGFydDogc2tpcCBwYXN0IHBhY2tldHMgdGhh
dCB1c2Vyc3BhY2UgaGFzIHJlbGVhc2VkLgorCSAqIFRoaXMgY2FuIHBvc3NpYmx5IG1ha2Ugcm9v
bSBmb3IgdGhlIHNlY29uZCBwYXJ0LgogCSAqLwogCW5tX2kgPSBrcmluZy0+bnJfaHdjdXI7CiAJ
aWYgKG5tX2kgIT0gaGVhZCkgewpAQCAtNzczLDcgKzEwNDEsMTA2IEBACiAJCX0KIAkJa3Jpbmct
Pm5yX2h3Y3VyID0gaGVhZDsKIAl9Ci0JSUZSQVRFKHJhdGVfY3R4Lm5ldy5yeHN5bmMrKyk7CisK
KwkvKgorCSAqIFNlY29uZCBwYXJ0OiBpbXBvcnQgbmV3bHkgcmVjZWl2ZWQgcGFja2V0cy4KKwkg
Ki8KKwlpZiAoIW5ldG1hcF9ub19wZW5kaW50ciAmJiAhZm9yY2VfdXBkYXRlKSB7CisJCXJldHVy
biAwOworCX0KKworCW5tX2kgPSBrcmluZy0+bnJfaHd0YWlsOyAvKiBGaXJzdCBlbXB0eSBzbG90
IGluIHRoZSByZWNlaXZlIHJpbmcuICovCisKKwkvKiBDb21wdXRlIHRoZSBhdmFpbGFibGUgc3Bh
Y2UgKGluIGJ5dGVzKSBpbiB0aGlzIG5ldG1hcCByaW5nLgorCSAqIFRoZSBmaXJzdCBzbG90IHRo
YXQgaXMgbm90IGNvbnNpZGVyZWQgaW4gaXMgdGhlIG9uZSBiZWZvcmUKKwkgKiBucl9od2N1ci4g
Ki8KKworCWF2YWlsID0gbm1fcHJldihrcmluZy0+bnJfaHdjdXIsIGxpbSkgLSBubV9pOworCWlm
IChhdmFpbCA8IDApCisJCWF2YWlsICs9IGxpbSArIDE7CisJYXZhaWwgKj0gbm1fYnVmX2xlbjsK
KworCS8qIEZpcnN0IHBhc3M6IFdoaWxlIGhvbGRpbmcgdGhlIGxvY2sgb24gdGhlIFJYIG1idWYg
cXVldWUsCisJICogZXh0cmFjdCBhcyBtYW55IG1idWZzIGFzIHRoZXkgZml0IHRoZSBhdmFpbGFi
bGUgc3BhY2UsCisJICogYW5kIHB1dCB0aGVtIGluIGEgdGVtcG9yYXJ5IHF1ZXVlLgorCSAqIFRv
IGF2b2lkIHBlcmZvcm1pbmcgYSBwZXItbWJ1ZiBkaXZpc2lvbiAobWxlbiAvIG5tX2J1Zl9sZW4p
IHRvCisJICogdG8gdXBkYXRlIGF2YWlsLCB3ZSBkbyB0aGUgdXBkYXRlIGluIGEgd2hpbGUgbG9v
cCB0aGF0IHdlCisJICogYWxzbyB1c2UgdG8gc2V0IHRoZSBSWCBzbG90cywgYnV0IHdpdGhvdXQg
cGVyZm9ybWluZyB0aGUgY29weS4gKi8KKwltYnFfaW5pdCgmdG1wcSk7CisJbWJxX2xvY2soJmty
aW5nLT5yeF9xdWV1ZSk7CisJZm9yIChuID0gMDs7IG4rKykgeworCQltID0gbWJxX3BlZWsoJmty
aW5nLT5yeF9xdWV1ZSk7CisJCWlmICghbSkgeworCQkJLyogTm8gbW9yZSBwYWNrZXRzIGZyb20g
dGhlIGRyaXZlci4gKi8KKwkJCWJyZWFrOworCQl9CisKKwkJbWxlbiA9IE1CVUZfTEVOKG0pOwor
CQlpZiAobWxlbiA+IGF2YWlsKSB7CisJCQkvKiBObyBtb3JlIHNwYWNlIGluIHRoZSByaW5nLiAq
LworCQkJYnJlYWs7CisJCX0KKworCQltYnFfZGVxdWV1ZSgma3JpbmctPnJ4X3F1ZXVlKTsKKwor
CQl3aGlsZSAobWxlbikgeworCQkJY29weSA9IG5tX2J1Zl9sZW47CisJCQlpZiAobWxlbiA8IGNv
cHkpIHsKKwkJCQljb3B5ID0gbWxlbjsKKwkJCX0KKwkJCW1sZW4gLT0gY29weTsKKwkJCWF2YWls
IC09IG5tX2J1Zl9sZW47CisKKwkJCXJpbmctPnNsb3Rbbm1faV0ubGVuID0gY29weTsKKwkJCXJp
bmctPnNsb3Rbbm1faV0uZmxhZ3MgPSBzbG90X2ZsYWdzIHwgKG1sZW4gPyBOU19NT1JFRlJBRyA6
IDApOworCQkJbm1faSA9IG5tX25leHQobm1faSwgbGltKTsKKwkJfQorCisJCW1icV9lbnF1ZXVl
KCZ0bXBxLCBtKTsKKwl9CisJbWJxX3VubG9jaygma3JpbmctPnJ4X3F1ZXVlKTsKKworCS8qIFNl
Y29uZCBwYXNzOiBEcmFpbiB0aGUgdGVtcG9yYXJ5IHF1ZXVlLCBnb2luZyBvdmVyIHRoZSB1c2Vk
IFJYIHNsb3RzLAorCSAqIGFuZCBwZXJmb3JtIHRoZSBjb3B5IG91dCBvZiB0aGUgUlggcXVldWUg
bG9jay4gKi8KKwlubV9pID0ga3JpbmctPm5yX2h3dGFpbDsKKworCWZvciAoOzspIHsKKwkJdm9p
ZCAqbm1hZGRyOworCQlpbnQgb2ZzID0gMDsKKwkJaW50IG1vcmVmcmFnOworCisJCW0gPSBtYnFf
ZGVxdWV1ZSgmdG1wcSk7CisJCWlmICghbSkJeworCQkJYnJlYWs7CisJCX0KKworCQlkbyB7CisJ
CQlubWFkZHIgPSBOTUIobmEsICZyaW5nLT5zbG90W25tX2ldKTsKKwkJCS8qIFdlIG9ubHkgY2hl
Y2sgdGhlIGFkZHJlc3MgaGVyZSBvbiBnZW5lcmljIHJ4IHJpbmdzLiAqLworCQkJaWYgKG5tYWRk
ciA9PSBORVRNQVBfQlVGX0JBU0UobmEpKSB7IC8qIEJhZCBidWZmZXIgKi8KKwkJCQltX2ZyZWVt
KG0pOworCQkJCW1icV9wdXJnZSgmdG1wcSk7CisJCQkJbWJxX2ZpbmkoJnRtcHEpOworCQkJCXJl
dHVybiBuZXRtYXBfcmluZ19yZWluaXQoa3JpbmcpOworCQkJfQorCisJCQljb3B5ID0gcmluZy0+
c2xvdFtubV9pXS5sZW47CisJCQltX2NvcHlkYXRhKG0sIG9mcywgY29weSwgbm1hZGRyKTsKKwkJ
CW9mcyArPSBjb3B5OworCQkJbW9yZWZyYWcgPSByaW5nLT5zbG90W25tX2ldLmZsYWdzICYgTlNf
TU9SRUZSQUc7CisJCQlubV9pID0gbm1fbmV4dChubV9pLCBsaW0pOworCQl9IHdoaWxlIChtb3Jl
ZnJhZyk7CisKKwkJbV9mcmVlbShtKTsKKwl9CisKKwltYnFfZmluaSgmdG1wcSk7CisKKwlpZiAo
bikgeworCQlrcmluZy0+bnJfaHd0YWlsID0gbm1faTsKKwkJSUZSQVRFKHJhdGVfY3R4Lm5ldy5y
eHBrdCArPSBuKTsKKwl9CisJa3JpbmctPm5yX2tmbGFncyAmPSB+TktSX1BFTkRJTlRSOwogCiAJ
cmV0dXJuIDA7CiB9CkBAIC03ODcsOSArMTE1NCw4IEBACiAKIAlpZiAocHJldl9uYSAhPSBOVUxM
KSB7CiAJCUQoIlJlbGVhc2VkIGdlbmVyaWMgTkEgJXAiLCBnbmEpOwotCQlpZl9yZWxlKGlmcCk7
CiAJCW5ldG1hcF9hZGFwdGVyX3B1dChwcmV2X25hKTsKLQkJaWYgKG5hLT5pZnAgPT0gTlVMTCkg
eworCQlpZiAobm1faXN6b21iaWUobmEpKSB7CiAJCSAgICAgICAgLyoKIAkJICAgICAgICAgKiBU
aGUgZHJpdmVyIGhhcyBiZWVuIHJlbW92ZWQgd2l0aG91dCByZWxlYXNpbmcKIAkJICAgICAgICAg
KiB0aGUgcmVmZXJlbmNlIHNvIHdlIG5lZWQgdG8gZG8gaXQgaGVyZS4KQEAgLTc5Nyw5ICsxMTYz
LDEzIEBACiAJCSAgICAgICAgbmV0bWFwX2FkYXB0ZXJfcHV0KHByZXZfbmEpOwogCQl9CiAJfQot
CVdOQShpZnApID0gcHJldl9uYTsKLQlEKCJSZXN0b3JlZCBuYXRpdmUgTkEgJXAiLCBwcmV2X25h
KTsKKwlOTV9BVFRBQ0hfTkEoaWZwLCBwcmV2X25hKTsKKwkvKgorCSAqIG5ldG1hcF9kZXRhY2hf
Y29tbW9uKCksIHRoYXQgaXQncyBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiwKKwkgKiBvdmVy
cmlkZXMgV05BKGlmcCkgaWYgbmEtPmlmcCBpcyBub3QgTlVMTC4KKwkgKi8KIAluYS0+aWZwID0g
TlVMTDsKKwlEKCJSZXN0b3JlZCBuYXRpdmUgTkEgJXAiLCBwcmV2X25hKTsKIH0KIAogLyoKQEAg
LTgyMywxNCArMTE5MywxNCBAQAogCiAJbnVtX3R4X2Rlc2MgPSBudW1fcnhfZGVzYyA9IG5ldG1h
cF9nZW5lcmljX3JpbmdzaXplOyAvKiBzdGFydGluZyBwb2ludCAqLwogCi0JZ2VuZXJpY19maW5k
X251bV9kZXNjKGlmcCwgJm51bV90eF9kZXNjLCAmbnVtX3J4X2Rlc2MpOyAvKiBpZ25vcmUgZXJy
b3JzICovCisJbm1fb3NfZ2VuZXJpY19maW5kX251bV9kZXNjKGlmcCwgJm51bV90eF9kZXNjLCAm
bnVtX3J4X2Rlc2MpOyAvKiBpZ25vcmUgZXJyb3JzICovCiAJTkQoIk5ldG1hcCByaW5nIHNpemU6
IFRYID0gJWQsIFJYID0gJWQiLCBudW1fdHhfZGVzYywgbnVtX3J4X2Rlc2MpOwogCWlmIChudW1f
dHhfZGVzYyA9PSAwIHx8IG51bV9yeF9kZXNjID09IDApIHsKIAkJRCgiRGV2aWNlIGhhcyBubyBo
dyBzbG90cyAodHggJXUsIHJ4ICV1KSIsIG51bV90eF9kZXNjLCBudW1fcnhfZGVzYyk7CiAJCXJl
dHVybiBFSU5WQUw7CiAJfQogCi0JZ25hID0gbWFsbG9jKHNpemVvZigqZ25hKSwgTV9ERVZCVUYs
IE1fTk9XQUlUIHwgTV9aRVJPKTsKKwlnbmEgPSBubV9vc19tYWxsb2Moc2l6ZW9mKCpnbmEpKTsK
IAlpZiAoZ25hID09IE5VTEwpIHsKIAkJRCgibm8gbWVtb3J5IG9uIGF0dGFjaCwgZ2l2ZSB1cCIp
OwogCQlyZXR1cm4gRU5PTUVNOwpAQCAtODU1LDEyICsxMjI1LDIzIEBACiAJTkQoIltHTkFdIG51
bV9yeF9xdWV1ZXMoJWQpLCByZWFsX251bV9yeF9xdWV1ZXMoJWQpIiwKIAkJCWlmcC0+bnVtX3J4
X3F1ZXVlcywgaWZwLT5yZWFsX251bV9yeF9xdWV1ZXMpOwogCi0JZ2VuZXJpY19maW5kX251bV9x
dWV1ZXMoaWZwLCAmbmEtPm51bV90eF9yaW5ncywgJm5hLT5udW1fcnhfcmluZ3MpOworCW5tX29z
X2dlbmVyaWNfZmluZF9udW1fcXVldWVzKGlmcCwgJm5hLT5udW1fdHhfcmluZ3MsICZuYS0+bnVt
X3J4X3JpbmdzKTsKIAogCXJldHZhbCA9IG5ldG1hcF9hdHRhY2hfY29tbW9uKG5hKTsKIAlpZiAo
cmV0dmFsKSB7Ci0JCWZyZWUoZ25hLCBNX0RFVkJVRik7CisJCW5tX29zX2ZyZWUoZ25hKTsKKwkJ
cmV0dXJuIHJldHZhbDsKIAl9CiAKKwlnbmEtPnByZXYgPSBOQShpZnApOyAvKiBzYXZlIG9sZCBu
YSAqLworCWlmIChnbmEtPnByZXYgIT0gTlVMTCkgeworCQluZXRtYXBfYWRhcHRlcl9nZXQoZ25h
LT5wcmV2KTsKKwl9CisJTk1fQVRUQUNIX05BKGlmcCwgbmEpOworCisJbm1fb3NfZ2VuZXJpY19z
ZXRfZmVhdHVyZXMoZ25hKTsKKworCUQoIkNyZWF0ZWQgZ2VuZXJpYyBOQSAlcCAocHJldiAlcCki
LCBnbmEsIGduYS0+cHJldik7CisKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC11IC1yIC1OIHVz
ci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX2tlcm4uaCAvdXNyL3NyYy9zeXMvZGV2L25ldG1h
cC9uZXRtYXBfa2Vybi5oCi0tLSB1c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9rZXJuLmgJ
MjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9kZXYv
bmV0bWFwL25ldG1hcF9rZXJuLmgJMjAxNi0xMi0wMSAwOTo1MToyOC43MTQzMTQwMDAgKzAwMDAK
QEAgLTEsNiArMSw3IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTQgTWF0dGVvIExh
bmRpLCBMdWlnaSBSaXp6by4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE0IFVuaXZlcnNpdGFgIGRpIFBpc2EuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBNYXR0ZW8gTGFuZGksIEx1aWdpIFJpenpvCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBVbml2ZXJzaXRhYCBkaSBQaXNhCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw3ICsyNiw3IEBA
CiAgKi8KIAogLyoKLSAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9uZXRt
YXBfa2Vybi5oIDI4NTY5OSAyMDE1LTA3LTE5IDE4OjA3OjI1WiBsdWlnaSAkCisgKiAkRnJlZUJT
RDogaGVhZC9zeXMvZGV2L25ldG1hcC9uZXRtYXBfa2Vybi5oIDIzODk4NSAyMDEyLTA4LTAyIDEx
OjU5OjQzWiBsdWlnaSAkCiAgKgogICogVGhlIGhlYWRlciBjb250YWlucyB0aGUgZGVmaW5pdGlv
bnMgb2YgY29uc3RhbnRzIGFuZCBmdW5jdGlvbgogICogcHJvdG90eXBlcyB1c2VkIG9ubHkgaW4g
a2VybmVsc3BhY2UuCkBAIC00OCwyMyArNDksMzggQEAKICNpZiBkZWZpbmVkKENPTkZJR19ORVRN
QVBfR0VORVJJQykKICNkZWZpbmUgV0lUSF9HRU5FUklDCiAjZW5kaWYKLSNpZiBkZWZpbmVkKENP
TkZJR19ORVRNQVBfVjEwMDApCi0jZGVmaW5lIFdJVEhfVjEwMDAKKyNpZiBkZWZpbmVkKENPTkZJ
R19ORVRNQVBfUFRORVRNQVBfR1VFU1QpCisjZGVmaW5lIFdJVEhfUFRORVRNQVBfR1VFU1QKKyNl
bmRpZgorI2lmIGRlZmluZWQoQ09ORklHX05FVE1BUF9QVE5FVE1BUF9IT1NUKQorI2RlZmluZSBX
SVRIX1BUTkVUTUFQX0hPU1QKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX05FVE1BUF9TSU5L
KQorI2RlZmluZSBXSVRIX1NJTksKICNlbmRpZgogCi0jZWxzZSAvKiBub3QgbGludXggKi8KKyNl
bGlmIGRlZmluZWQgKF9XSU4zMikKKyNkZWZpbmUgV0lUSF9WQUxFCS8vIGNvbW1lbnQgb3V0IHRv
IGRpc2FibGUgVkFMRSBzdXBwb3J0CisjZGVmaW5lIFdJVEhfUElQRVMKKyNkZWZpbmUgV0lUSF9N
T05JVE9SCisjZGVmaW5lIFdJVEhfR0VORVJJQwogCisjZWxzZQkvKiBuZWl0aGVyIGxpbnV4IG5v
ciB3aW5kb3dzICovCiAjZGVmaW5lIFdJVEhfVkFMRQkvLyBjb21tZW50IG91dCB0byBkaXNhYmxl
IFZBTEUgc3VwcG9ydAogI2RlZmluZSBXSVRIX1BJUEVTCiAjZGVmaW5lIFdJVEhfTU9OSVRPUgog
I2RlZmluZSBXSVRIX0dFTkVSSUMKKyNkZWZpbmUgV0lUSF9QVE5FVE1BUF9IT1NUCS8qIHB0bmV0
bWFwIGhvc3Qgc3VwcG9ydCAqLworI2RlZmluZSBXSVRIX1BUTkVUTUFQX0dVRVNUCS8qIHB0bmV0
bWFwIGd1ZXN0IHN1cHBvcnQgKi8KIAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KQorI2luY2x1ZGUgPHN5cy9zZWxpbmZvLmg+CiAKICNkZWZpbmUgbGlrZWx5KHgpCV9fYnVpbHRp
bl9leHBlY3QoKGxvbmcpISEoeCksIDFMKQogI2RlZmluZSB1bmxpa2VseSh4KQlfX2J1aWx0aW5f
ZXhwZWN0KChsb25nKSEhKHgpLCAwTCkKKyNkZWZpbmUgX191c2VyCiAKICNkZWZpbmUJTk1fTE9D
S19UCXN0cnVjdCBtdHgJLyogbG93IGxldmVsIHNwaW5sb2NrLCB1c2VkIHRvIHByb3RlY3QgcXVl
dWVzICovCiAKQEAgLTc2LDkgKzkyLDExIEBACiAjZGVmaW5lIE5NX01UWF9BU1NFUlQobSkJc3hf
YXNzZXJ0KCYobSksIFNBX1hMT0NLRUQpCiAKICNkZWZpbmUJTk1fU0VMSU5GT19UCXN0cnVjdCBu
bV9zZWxpbmZvCisjZGVmaW5lIE5NX1NFTFJFQ09SRF9UCXN0cnVjdCB0aHJlYWQKICNkZWZpbmUJ
TUJVRl9MRU4obSkJKChtKS0+bV9wa3RoZHIubGVuKQotI2RlZmluZQlNQlVGX0lGUChtKQkoKG0p
LT5tX3BrdGhkci5yY3ZpZikKLSNkZWZpbmUJTk1fU0VORF9VUChpZnAsIG0pCSgoTkEoaWZwKSkt
PmlmX2lucHV0KShpZnAsIG0pCisjZGVmaW5lIE1CVUZfVFhRKG0pCSgobSktPm1fcGt0aGRyLmZs
b3dpZCkKKyNkZWZpbmUgTUJVRl9UUkFOU01JVChuYSwgaWZwLCBtKQkoKG5hKS0+aWZfdHJhbnNt
aXQoaWZwLCBtKSkKKyNkZWZpbmUJR0VOX1RYX01CVUZfSUZQKG0pCSgobSktPm1fcGt0aGRyLnJj
dmlmKQogCiAjZGVmaW5lIE5NX0FUT01JQ19UCXZvbGF0aWxlIGludAkvLyBYWFggPwogLyogYXRv
bWljIG9wZXJhdGlvbnMgKi8KQEAgLTk3LDIzICsxMTUsMjAgQEAKICNlbmRpZgogCiAjaWYgX19G
cmVlQlNEX3ZlcnNpb24gPj0gMTEwMDAyNwotI2RlZmluZSBHRVRfTUJVRl9SRUZDTlQobSkgICAg
ICAoKG0pLT5tX2V4dC5leHRfY250ID8gKigobSktPm1fZXh0LmV4dF9jbnQpIDogLTEpCi0jZGVm
aW5lIFNFVF9NQlVGX1JFRkNOVChtLCB4KSAgICooKG0pLT5tX2V4dC5leHRfY250KSA9IHgKLSNk
ZWZpbmUgUE5UX01CVUZfUkVGQ05UKG0pICAgICAgKChtKS0+bV9leHQuZXh0X2NudCkKKyNkZWZp
bmUgTUJVRl9SRUZDTlQobSkJCSgobSktPm1fZXh0LmV4dF9jb3VudCkKKyNkZWZpbmUgU0VUX01C
VUZfUkVGQ05UKG0sIHgpICAgKG0pLT5tX2V4dC5leHRfY291bnQgPSB4CiAjZWxzZQotI2RlZmlu
ZSBHRVRfTUJVRl9SRUZDTlQobSkgICAgICAoKG0pLT5tX2V4dC5yZWZfY250ID8gKigobSktPm1f
ZXh0LnJlZl9jbnQpIDogLTEpCisjZGVmaW5lIE1CVUZfUkVGQ05UKG0pCQkoKG0pLT5tX2V4dC5y
ZWZfY250ID8gKigobSktPm1fZXh0LnJlZl9jbnQpIDogLTEpCiAjZGVmaW5lIFNFVF9NQlVGX1JF
RkNOVChtLCB4KSAgICooKG0pLT5tX2V4dC5yZWZfY250KSA9IHgKLSNkZWZpbmUgUE5UX01CVUZf
UkVGQ05UKG0pICAgICAgKChtKS0+bV9leHQucmVmX2NudCkKICNlbmRpZgogCi1NQUxMT0NfREVD
TEFSRShNX05FVE1BUCk7CisjZGVmaW5lIE1CVUZfUVVFVUVEKG0pCQkxCiAKIHN0cnVjdCBubV9z
ZWxpbmZvIHsKIAlzdHJ1Y3Qgc2VsaW5mbyBzaTsKIAlzdHJ1Y3QgbXR4IG07CiB9OwogCi12b2lk
IGZyZWVic2Rfc2Vsd2FrZXVwKHN0cnVjdCBubV9zZWxpbmZvICpzaSwgaW50IHByaSk7CiAKIC8v
IFhYWCBsaW51eCBzdHJ1Y3QsIG5vdCB1c2VkIGluIEZyZWVCU0QKIHN0cnVjdCBuZXRfZGV2aWNl
X29wcyB7CkBAIC0xMzAsMTIgKzE0NSwxNiBAQAogI2RlZmluZQlOTV9MT0NLX1QJc2FmZV9zcGlu
bG9ja190CS8vIHNlZSBic2RfZ2x1ZS5oCiAjZGVmaW5lCU5NX1NFTElORk9fVAl3YWl0X3F1ZXVl
X2hlYWRfdAogI2RlZmluZQlNQlVGX0xFTihtKQkoKG0pLT5sZW4pCi0jZGVmaW5lCU1CVUZfSUZQ
KG0pCSgobSktPmRldikKLSNkZWZpbmUJTk1fU0VORF9VUChpZnAsIG0pICBcCi0gICAgICAgICAg
ICAgICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLT5wcmlv
cml0eSA9IE5NX01BR0lDX1BSSU9SSVRZX1JYOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmV0aWZfcngobSk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApCisj
ZGVmaW5lIE1CVUZfVFJBTlNNSVQobmEsIGlmcCwgbSkJCQkJCQkJXAorCSh7CQkJCQkJCQkJCVwK
KwkJLyogQXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIHdpdGggZ2VuZXJpYy4gKi8JCQkJXAorCQlt
LT5wcmlvcml0eSA9IE5NX01BR0lDX1BSSU9SSVRZX1RYOwkJCQkJXAorCQkoKChzdHJ1Y3QgbmV0
X2RldmljZV9vcHMgKikobmEpLT5pZl90cmFuc21pdCktPm5kb19zdGFydF94bWl0KG0sIGlmcCkp
OwlcCisJCTA7CQkJCQkJCQkJXAorCX0pCisKKy8qIFNlZSBleHBsYW5hdGlvbiBpbiBubV9vc19n
ZW5lcmljX3htaXRfZnJhbWUuICovCisjZGVmaW5lCUdFTl9UWF9NQlVGX0lGUChtKQkoKHN0cnVj
dCBpZm5ldCAqKXNrYl9zaGluZm8obSktPmRlc3RydWN0b3JfYXJnKQogCiAjZGVmaW5lIE5NX0FU
T01JQ19UCXZvbGF0aWxlIGxvbmcgdW5zaWduZWQgaW50CiAKQEAgLTE1OCw3ICsxNzcsNTEgQEAK
ICNkZWZpbmUJTk1fTE9DS19UCUlPTG9jayAqCiAjZGVmaW5lCU5NX1NFTElORk9fVAlzdHJ1Y3Qg
c2VsaW5mbwogI2RlZmluZQlNQlVGX0xFTihtKQkoKG0pLT5tX3BrdGhkci5sZW4pCi0jZGVmaW5l
CU5NX1NFTkRfVVAoaWZwLCBtKQkoKGlmcCktPmlmX2lucHV0KShpZnAsIG0pCisKKyNlbGlmIGRl
ZmluZWQgKF9XSU4zMikKKyNpbmNsdWRlICIuLi8uLi8uLi9XSU5ET1dTL3dpbl9nbHVlLmgiCisK
KyNkZWZpbmUgTk1fU0VMUkVDT1JEX1QJCUlPX1NUQUNLX0xPQ0FUSU9OCisjZGVmaW5lIE5NX1NF
TElORk9fVAkJd2luX1NFTElORk8JCS8vIHNlZSB3aW5fZ2x1ZS5oCisjZGVmaW5lIE5NX0xPQ0tf
VAkJd2luX3NwaW5sb2NrX3QJLy8gc2VlIHdpbl9nbHVlLmgKKyNkZWZpbmUgTk1fTVRYX1QJCUtH
VUFSREVEX01VVEVYCS8qIE9TLXNwZWNpZmljIG11dGV4IChzbGVlcGFibGUpICovCisKKyNkZWZp
bmUgTk1fTVRYX0lOSVQobSkJCUtlSW5pdGlhbGl6ZUd1YXJkZWRNdXRleCgmbSk7CisjZGVmaW5l
IE5NX01UWF9ERVNUUk9ZKG0pCWRvIHsgKHZvaWQpKG0pOyB9IHdoaWxlICgwKQorI2RlZmluZSBO
TV9NVFhfTE9DSyhtKQkJS2VBY3F1aXJlR3VhcmRlZE11dGV4KCYobSkpCisjZGVmaW5lIE5NX01U
WF9VTkxPQ0sobSkJS2VSZWxlYXNlR3VhcmRlZE11dGV4KCYobSkpCisjZGVmaW5lIE5NX01UWF9B
U1NFUlQobSkJYXNzZXJ0KCZtLkNvdW50PjApCisKKy8vVGhlc2UgbGlua25hbWVzIGFyZSBmb3Ig
dGhlIE5ESVMgZHJpdmVyCisjZGVmaW5lIE5FVE1BUF9ORElTX0xJTktOQU1FX1NUUklORyAgICAg
ICAgICAgICBMIlxcRG9zRGV2aWNlc1xcTk1BUE5ESVMiCisjZGVmaW5lIE5FVE1BUF9ORElTX05U
REVWSUNFX1NUUklORyAgICAgICAgICAgICBMIlxcRGV2aWNlXFxOTUFQTkRJUyIKKworLy9EZWZp
bml0aW9uIG9mIGludGVybmFsIGRyaXZlci10by1kcml2ZXIgaW9jdGwgY29kZXMKKyNkZWZpbmUg
TkVUTUFQX0tFUk5FTF9YQ0hBTkdFX1BPSU5URVJTCQlfSU8oJ2knLCAxODApCisjZGVmaW5lIE5F
VE1BUF9LRVJORUxfU0VORF9TSFVURE9XTl9TSUdOQUwJX0lPX2RpcmVjdCgnaScsIDE5NSkKKwor
Ly9FbXB0eSBkYXRhIHN0cnVjdHVyZXMgYXJlIG5vdCBwZXJtaXR0ZWQgYnkgTVNWQyBjb21waWxl
cgorLy9YWFhfYWxlLCB0cnkgdG8gc29sdmUgdGhpcyBwcm9ibGVtCitzdHJ1Y3QgbmV0X2Rldmlj
ZV9vcHN7CisJY2hhciBkYXRhWzFdOworfTsKK3R5cGVkZWYgc3RydWN0IGV0aHRvb2xfb3Bzewor
CWNoYXIgZGF0YVsxXTsKK307Cit0eXBlZGVmIHN0cnVjdCBocnRpbWVyeworCUtUSU1FUiB0aW1l
cjsKKwlCT09MRUFOIGFjdGl2ZTsKKwlLRFBDIGRlZmVycmVkX3Byb2M7Cit9OworCisvKiBNU1ZD
IGRvZXMgbm90IGhhdmUgbGlrZWx5L3VubGlrZWx5IHN1cHBvcnQgKi8KKyNpZmRlZiBfTVNDX1ZF
UgorI2RlZmluZSBsaWtlbHkoeCkJKHgpCisjZGVmaW5lIHVubGlrZWx5KHgpCSh4KQorI2Vsc2UK
KyNkZWZpbmUgbGlrZWx5KHgpCV9fYnVpbHRpbl9leHBlY3QoKGxvbmcpISEoeCksIDFMKQorI2Rl
ZmluZSB1bmxpa2VseSh4KQlfX2J1aWx0aW5fZXhwZWN0KChsb25nKSEhKHgpLCAwTCkKKyNlbmRp
ZiAvL19NU0NfVkVSCiAKICNlbHNlCiAKQEAgLTE2Niw2ICsyMjksMTMgQEAKIAogI2VuZGlmIC8q
IGVuZCAtIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUgKi8KIAorI2lmbmRlZiBfV0lOMzIgLyogc3Vw
cG9ydCBmb3IgZW11bGF0ZWQgc3lzY3RsICovCisjZGVmaW5lIFNZU0JFR0lOKHgpCisjZGVmaW5l
IFNZU0VORAorI2VuZGlmIC8qIF9XSU4zMiAqLworCisjZGVmaW5lIE5NX0FDQ0VTU19PTkNFKHgp
CSgqKHZvbGF0aWxlIF9fdHlwZW9mX18oeCkgKikmKHgpKQorCiAjZGVmaW5lCU5NR19MT0NLX1QJ
CU5NX01UWF9UCiAjZGVmaW5lCU5NR19MT0NLX0lOSVQoKQkJTk1fTVRYX0lOSVQobmV0bWFwX2ds
b2JhbF9sb2NrKQogI2RlZmluZQlOTUdfTE9DS19ERVNUUk9ZKCkJTk1fTVRYX0RFU1RST1kobmV0
bWFwX2dsb2JhbF9sb2NrKQpAQCAtMjAwLDggKzI3MCw0MSBAQAogc3RydWN0IG5tX2JyaWRnZTsK
IHN0cnVjdCBuZXRtYXBfcHJpdl9kOwogCisvKiBvcy1zcGVjaWZpYyBOTV9TRUxJTkZPX1QgaW5p
dGlhbHphdGlvbi9kZXN0cnVjdGlvbiBmdW5jdGlvbnMgKi8KK3ZvaWQgbm1fb3Nfc2VsaW5mb19p
bml0KE5NX1NFTElORk9fVCAqKTsKK3ZvaWQgbm1fb3Nfc2VsaW5mb191bmluaXQoTk1fU0VMSU5G
T19UICopOworCiBjb25zdCBjaGFyICpubV9kdW1wX2J1ZihjaGFyICpwLCBpbnQgbGVuLCBpbnQg
bGltLCBjaGFyICpkc3QpOwogCit2b2lkIG5tX29zX3NlbHdha2V1cChOTV9TRUxJTkZPX1QgKnNp
KTsKK3ZvaWQgbm1fb3Nfc2VscmVjb3JkKE5NX1NFTFJFQ09SRF9UICpzciwgTk1fU0VMSU5GT19U
ICpzaSk7CisKK2ludCBubV9vc19pZm5ldF9pbml0KHZvaWQpOwordm9pZCBubV9vc19pZm5ldF9m
aW5pKHZvaWQpOwordm9pZCBubV9vc19pZm5ldF9sb2NrKHZvaWQpOwordm9pZCBubV9vc19pZm5l
dF91bmxvY2sodm9pZCk7CisKK3ZvaWQgbm1fb3NfZ2V0X21vZHVsZSh2b2lkKTsKK3ZvaWQgbm1f
b3NfcHV0X21vZHVsZSh2b2lkKTsKKwordm9pZCBuZXRtYXBfbWFrZV96b21iaWUoc3RydWN0IGlm
bmV0ICopOwordm9pZCBuZXRtYXBfdW5kb196b21iaWUoc3RydWN0IGlmbmV0ICopOworCisvKiBv
cyBpbmRlcGVuZGVudCBhbGxvYy9yZWFsbG9jL2ZyZWUgKi8KK3ZvaWQgKm5tX29zX21hbGxvYyhz
aXplX3QpOwordm9pZCAqbm1fb3NfcmVhbGxvYyh2b2lkICosIHNpemVfdCBuZXdfc2l6ZSwgc2l6
ZV90IG9sZF9zaXplKTsKK3ZvaWQgbm1fb3NfZnJlZSh2b2lkICopOworCisvKiBwYXNzZXMgYSBw
YWNrZXQgdXAgdG8gdGhlIGhvc3Qgc3RhY2suCisgKiBJZiB0aGUgcGFja2V0IGlzIHNlbnQgKG9y
IGRyb3BwZWQpIGltbWVkaWF0ZWx5IGl0IHJldHVybnMgTlVMTCwKKyAqIG90aGVyd2lzZSBpdCBs
aW5rcyB0aGUgcGFja2V0IHRvIHByZXYgYW5kIHJldHVybnMgbS4KKyAqIEluIHRoaXMgY2FzZSwg
YSBmaW5hbCBjYWxsIHdpdGggbT1OVUxMIGFuZCBwcmV2ICE9IE5VTEwgd2lsbCBzZW5kIHVwCisg
KiB0aGUgZW50aXJlIGNoYWluIHRvIHRoZSBob3N0IHN0YWNrLgorICovCit2b2lkICpubV9vc19z
ZW5kX3VwKHN0cnVjdCBpZm5ldCAqLCBzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IG1idWYgKnByZXYp
OworCitpbnQgbm1fb3NfbWJ1Zl9oYXNfb2ZmbGQoc3RydWN0IG1idWYgKm0pOworCiAjaW5jbHVk
ZSAibmV0bWFwX21icS5oIgogCiBleHRlcm4gTk1HX0xPQ0tfVAluZXRtYXBfZ2xvYmFsX2xvY2s7
CkBAIC0yOTgsNiArNDAxLDE5IEBACiAJdWludDMyX3QJbnJfa2ZsYWdzOwkvKiBwcml2YXRlIGRy
aXZlciBmbGFncyAqLwogI2RlZmluZSBOS1JfUEVORElOVFIJMHgxCQkvLyBQZW5kaW5nIGludGVy
cnVwdC4KICNkZWZpbmUgTktSX0VYQ0xVU0lWRQkweDIJCS8qIGV4Y2x1c2l2ZSBiaW5kaW5nICov
CisjZGVmaW5lIE5LUl9GT1JXQVJECTB4NAkJLyogKGhvc3QgcmluZyBvbmx5KSB0aGVyZSBhcmUK
KwkJCQkJICAgcGFja2V0cyB0byBmb3J3YXJkCisJCQkJCSAqLworI2RlZmluZSBOS1JfTkVFRFJJ
TkcJMHg4CQkvKiByaW5nIG5lZWRlZCBldmVuIGlmIHVzZXJzPT0wCisJCQkJCSAqICh1c2VkIGlu
dGVybmFsbHkgYnkgcGlwZXMgYW5kCisJCQkJCSAqICBieSBwdG5ldG1hcCBob3N0IHBvcnRzKQor
CQkJCQkgKi8KKworCXVpbnQzMl90CW5yX21vZGU7CisJdWludDMyX3QJbnJfcGVuZGluZ19tb2Rl
OworI2RlZmluZSBOS1JfTkVUTUFQX09GRgkweDAKKyNkZWZpbmUgTktSX05FVE1BUF9PTgkweDEK
KwogCXVpbnQzMl90CW5rcl9udW1fc2xvdHM7CiAKIAkvKgpAQCAtMzQzLDEzICs0NTksMTQgQEAK
IAkgKiBzdG9yZSBpbmNvbWluZyBtYnVmcyBpbiBhIHF1ZXVlIHRoYXQgaXMgZHJhaW5lZCBieQog
CSAqIGEgcnhzeW5jLgogCSAqLwotCXN0cnVjdCBtYnVmICoqdHhfcG9vbDsKLQkvLyB1X2ludCBu
cl9udGM7CQkvKiBFbXVsYXRpb24gb2YgYSBuZXh0LXRvLWNsZWFuIFJYIHJpbmcgcG9pbnRlci4g
Ki8KLQlzdHJ1Y3QgbWJxIHJ4X3F1ZXVlOyAgICAgICAgICAgIC8qIGludGVyY2VwdGVkIHJ4IG1i
dWZzLiAqLworCXN0cnVjdCBtYnVmCSoqdHhfcG9vbDsKKwlzdHJ1Y3QgbWJ1ZgkqdHhfZXZlbnQ7
CS8qIFRYIGV2ZW50IHVzZWQgYXMgYSBub3RpZmljYXRpb24gKi8KKwlOTV9MT0NLX1QJdHhfZXZl
bnRfbG9jazsJLyogcHJvdGVjdHMgdGhlIHR4X2V2ZW50IG1idWYgKi8KKwlzdHJ1Y3QgbWJxCXJ4
X3F1ZXVlOyAgICAgICAvKiBpbnRlcmNlcHRlZCByeCBtYnVmcy4gKi8KIAogCXVpbnQzMl90CXVz
ZXJzOwkJLyogZXhpc3RpbmcgYmluZGluZ3MgZm9yIHRoaXMgcmluZyAqLwogCi0JdWludDMyX3QJ
cmluZ19pZDsJLyogZGVidWdnaW5nICovCisJdWludDMyX3QJcmluZ19pZDsJLyoga3JpbmcgaWRl
bnRpZmllciAqLwogCWVudW0gdHhyeAl0eDsJCS8qIGtpbmQgb2YgcmluZyAodHggb3IgcngpICov
CiAJY2hhciBuYW1lWzY0XTsJCQkvKiBkaWFnbm9zdGljICovCiAKQEAgLTM3MSw5ICs0ODgsNiBA
QAogCXN0cnVjdCBuZXRtYXBfa3JpbmcgKnBpcGU7CS8qIGlmIHRoaXMgaXMgYSBwaXBlIHJpbmcs
CiAJCQkJCSAqIHBvaW50ZXIgdG8gdGhlIG90aGVyIGVuZAogCQkJCQkgKi8KLQlzdHJ1Y3QgbmV0
bWFwX3JpbmcgKnNhdmVfcmluZzsJLyogcG9pbnRlciB0byBoaWRkZW4gcmluZ3MKLSAgICAgICAJ
CQkJCSAqIChzZWUgbmV0bWFwX3BpcGUuYyBmb3IgZGV0YWlscykKLQkJCQkJICovCiAjZW5kaWYg
LyogV0lUSF9QSVBFUyAqLwogCiAjaWZkZWYgV0lUSF9WQUxFCkBAIC0zOTQsMTAgKzUwOCwzMCBA
QAogCWludCAoKm1vbl9ub3RpZnkpKHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCBpbnQgZmxh
Z3MpOwogCiAJdWludDMyX3QgbW9uX3RhaWw7ICAvKiBsYXN0IHNlZW4gc2xvdCBvbiByeCAqLwot
CXVpbnQzMl90IG1vbl9wb3M7ICAgLyogaW5kZXggb2YgdGhpcyByaW5nIGluIHRoZSBtb25pdG9y
ZWQgcmluZyBhcnJheSAqLworCXVpbnQzMl90IG1vbl9wb3NbTlJfVFhSWF07ICAvKiBpbmRleCBv
ZiB0aGlzIHJpbmcgaW4gdGhlIG1vbml0b3JlZCByaW5nIGFycmF5ICovCisjZW5kaWYKK30KKyNp
ZmRlZiBfV0lOMzIKK19fZGVjbHNwZWMoYWxpZ24oNjQpKTsKKyNlbHNlCitfX2F0dHJpYnV0ZV9f
KChfX2FsaWduZWRfXyg2NCkpKTsKICNlbmRpZgotfSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRf
Xyg2NCkpKTsKIAorLyogcmV0dXJuIDEgaWZmIHRoZSBrcmluZyBuZWVkcyB0byBiZSB0dXJuZWQg
b24gKi8KK3N0YXRpYyBpbmxpbmUgaW50CitubV9rcmluZ19wZW5kaW5nX29uKHN0cnVjdCBuZXRt
YXBfa3JpbmcgKmtyaW5nKQoreworCXJldHVybiBrcmluZy0+bnJfcGVuZGluZ19tb2RlID09IE5L
Ul9ORVRNQVBfT04gJiYKKwkgICAgICAga3JpbmctPm5yX21vZGUgPT0gTktSX05FVE1BUF9PRkY7
Cit9CisKKy8qIHJldHVybiAxIGlmZiB0aGUga3JpbmcgbmVlZHMgdG8gYmUgdHVybmVkIG9mZiAq
Lworc3RhdGljIGlubGluZSBpbnQKK25tX2tyaW5nX3BlbmRpbmdfb2ZmKHN0cnVjdCBuZXRtYXBf
a3JpbmcgKmtyaW5nKQoreworCXJldHVybiBrcmluZy0+bnJfcGVuZGluZ19tb2RlID09IE5LUl9O
RVRNQVBfT0ZGICYmCisJICAgICAgIGtyaW5nLT5ucl9tb2RlID09IE5LUl9ORVRNQVBfT047Cit9
CiAKIC8qIHJldHVybiB0aGUgbmV4dCBpbmRleCwgd2l0aCB3cmFwYXJvdW5kICovCiBzdGF0aWMg
aW5saW5lIHVpbnQzMl90CkBAIC01MTMsNiArNjQ3LDggQEAKIAkJCQkgKi8KICNkZWZpbmUgTkFG
X0hPU1RfUklOR1MgIDY0CS8qIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBob3N0IHJpbmdzICov
CiAjZGVmaW5lIE5BRl9GT1JDRV9OQVRJVkUgMTI4CS8qIHRoZSBhZGFwdGVyIGlzIGFsd2F5cyBO
QVRJVkUgKi8KKyNkZWZpbmUgTkFGX1BUTkVUTUFQX0hPU1QgMjU2CS8qIHRoZSBhZGFwdGVyIHN1
cHBvcnRzIHB0bmV0bWFwIGluIHRoZSBob3N0ICovCisjZGVmaW5lIE5BRl9aT01CSUUJKDFVPDwz
MCkgLyogdGhlIG5pYyBkcml2ZXIgaGFzIGJlZW4gdW5sb2FkZWQgKi8KICNkZWZpbmUJTkFGX0JV
U1kJKDFVPDwzMSkgLyogdGhlIGFkYXB0ZXIgaXMgdXNlZCBpbnRlcm5hbGx5IGFuZAogCQkJCSAg
KiBjYW5ub3QgYmUgcmVnaXN0ZXJlZCBmcm9tIHVzZXJzcGFjZQogCQkJCSAgKi8KQEAgLTU5MSwx
MCArNzI3LDE0IEBACiAJICoJRm9yIGh3IGRldmljZXMgdGhpcyBpcyB0eXBpY2FsbHkgYSBzZWx3
YWtldXAoKSwKIAkgKglidXQgZm9yIE5JQy9ob3N0IHBvcnRzIGF0dGFjaGVkIHRvIGEgc3dpdGNo
IChvciB2aWNlLXZlcnNhKQogCSAqCXdlIGFsc28gbmVlZCB0byBpbnZva2UgdGhlICd0eHN5bmMn
IGNvZGUgZG93bnN0cmVhbS4KKwkgKiAgICAgIFRoaXMgY2FsbGJhY2sgcG9pbnRlciBpcyBhY3R1
YWxseSB1c2VkIG9ubHkgdG8gaW5pdGlhbGl6ZQorCSAqICAgICAga3JpbmctPm5tX25vdGlmeS4K
KwkgKiAgICAgIFJldHVybiB2YWx1ZXMgYXJlIHRoZSBzYW1lIGFzIGZvciBuZXRtYXBfcnhfaXJx
KCkuCiAJICovCiAJdm9pZCAoKm5tX2R0b3IpKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqKTsKIAog
CWludCAoKm5tX3JlZ2lzdGVyKShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKiwgaW50IG9ub2ZmKTsK
Kwl2b2lkICgqbm1faW50cikoc3RydWN0IG5ldG1hcF9hZGFwdGVyICosIGludCBvbm9mZik7CiAK
IAlpbnQgKCpubV90eHN5bmMpKHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCBpbnQgZmxhZ3Mp
OwogCWludCAoKm5tX3J4c3luYykoc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcsIGludCBmbGFn
cyk7CkBAIC02MzksMTQgKzc3OSwxNCBAQAogCiAJLyogbWVtb3J5IGFsbG9jYXRvciAob3BhcXVl
KQogCSAqIFdlIGFsc28gY2FjaGUgYSBwb2ludGVyIHRvIHRoZSBsdXRfZW50cnkgZm9yIHRyYW5z
bGF0aW5nCi0JICogYnVmZmVyIGFkZHJlc3NlcywgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgYnVm
ZmVycy4KKwkgKiBidWZmZXIgYWRkcmVzc2VzLCB0aGUgdG90YWwgbnVtYmVyIG9mIGJ1ZmZlcnMg
YW5kIHRoZSBidWZmZXIgc2l6ZS4KIAkgKi8KICAJc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1fbWVt
OwogCXN0cnVjdCBuZXRtYXBfbHV0IG5hX2x1dDsKIAogCS8qIGFkZGl0aW9uYWwgaW5mb3JtYXRp
b24gYXR0YWNoZWQgdG8gdGhpcyBhZGFwdGVyCiAJICogYnkgb3RoZXIgbmV0bWFwIHN1YnN5c3Rl
bXMuIEN1cnJlbnRseSB1c2VkIGJ5Ci0JICogYndyYXAgYW5kIExJTlVYL3YxMDAwLgorCSAqIGJ3
cmFwLCBMSU5VWC92MTAwMCBhbmQgcHRuZXRtYXAKIAkgKi8KIAl2b2lkICpuYV9wcml2YXRlOwog
CkBAIC02NTUsNiArNzk1LDkgQEAKIAlpbnQgbmFfbmV4dF9waXBlOwkvKiBuZXh0IGZyZWUgc2xv
dCBpbiB0aGUgYXJyYXkgKi8KIAlpbnQgbmFfbWF4X3BpcGVzOwkvKiBzaXplIG9mIHRoZSBhcnJh
eSAqLwogCisJLyogT2Zmc2V0IG9mIGV0aGVybmV0IGhlYWRlciBmb3IgZWFjaCBwYWNrZXQuICov
CisJdV9pbnQgdmlydF9oZHJfbGVuOworCiAJY2hhciBuYW1lWzY0XTsKIH07CiAKQEAgLTcyMCw4
ICs4NjMsNiBAQAogCXN0cnVjdCBubV9icmlkZ2UgKm5hX2JkZzsKIAlpbnQgcmV0cnk7CiAKLQkv
KiBPZmZzZXQgb2YgZXRoZXJuZXQgaGVhZGVyIGZvciBlYWNoIHBhY2tldC4gKi8KLQl1X2ludCB2
aXJ0X2hkcl9sZW47CiAJLyogTWF4aW11bSBGcmFtZSBTaXplLCB1c2VkIGluIGJkZ19taXNtYXRj
aF9kYXRhcGF0aCgpICovCiAJdV9pbnQgbWZzOwogCS8qIExhc3Qgc291cmNlIE1BQyBvbiB0aGlz
IHBvcnQgKi8KQEAgLTc2Niw2ICs5MDcsMTMgQEAKICNpZmRlZiBsaW51eAogICAgICAgICBuZXRk
ZXZfdHhfdCAoKnNhdmVfc3RhcnRfeG1pdCkoc3RydWN0IG1idWYgKiwgc3RydWN0IGlmbmV0ICop
OwogI2VuZGlmCisJLyogSXMgdGhlIGFkYXB0ZXIgYWJsZSB0byB1c2UgbXVsdGlwbGUgUlggc2xv
dHMgdG8gc2NhdHRlcgorCSAqIGVhY2ggcGFja2V0IHB1c2hlZCB1cCBieSB0aGUgZHJpdmVyPyAq
LworCWludCByeHNnOworCisJLyogSXMgdGhlIHRyYW5zbWlzc2lvbiBwYXRoIGNvbnRyb2xsZWQg
YnkgYSBuZXRtYXAtYXdhcmUKKwkgKiBkZXZpY2UgcXVldWUgKGkuZS4gcWRpc2Mgb24gbGludXgp
PyAqLworCWludCB0eHFkaXNjOwogfTsKICNlbmRpZiAgLyogV0lUSF9HRU5FUklDICovCiAKQEAg
LTc3Niw3ICs5MjQsNyBAQAogfQogCiAjaWZkZWYgV0lUSF9WQUxFCi0KK3N0cnVjdCBubV9iZGdf
cG9sbGluZ19zdGF0ZTsKIC8qCiAgKiBCcmlkZ2Ugd3JhcHBlciBmb3Igbm9uIFZBTEUgcG9ydHMg
YXR0YWNoZWQgdG8gYSBWQUxFIHN3aXRjaC4KICAqCkBAIC04MjYsOSArOTc0LDYgQEAKIAlzdHJ1
Y3QgbmV0bWFwX3ZwX2FkYXB0ZXIgaG9zdDsgIC8qIGZvciBob3N0IHJpbmdzICovCiAJc3RydWN0
IG5ldG1hcF9hZGFwdGVyICpod25hOwkvKiB0aGUgdW5kZXJseWluZyBkZXZpY2UgKi8KIAotCS8q
IGJhY2t1cCBvZiB0aGUgaHduYSBtZW1vcnkgYWxsb2NhdG9yICovCi0Jc3RydWN0IG5ldG1hcF9t
ZW1fZCAqc2F2ZV9ubWQ7Ci0KIAkvKgogCSAqIFdoZW4gd2UgYXR0YWNoIGEgcGh5c2ljYWwgaW50
ZXJmYWNlIHRvIHRoZSBicmlkZ2UsIHdlCiAJICogYWxsb3cgdGhlIGNvbnRyb2xsaW5nIHByb2Nl
c3MgdG8gdGVybWluYXRlLCBzbyB3ZSBuZWVkCkBAIC04MzcsMTAgKzk4MiwxMCBAQAogCSAqIGFy
ZSBhdHRhY2hlZCB0byBhIGJyaWRnZS4KIAkgKi8KIAlzdHJ1Y3QgbmV0bWFwX3ByaXZfZCAqbmFf
a3ByaXY7CisJc3RydWN0IG5tX2JkZ19wb2xsaW5nX3N0YXRlICpuYV9wb2xsaW5nX3N0YXRlOwog
fTsKIGludCBuZXRtYXBfYndyYXBfYXR0YWNoKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBuZXRt
YXBfYWRhcHRlciAqKTsKIAotCiAjZW5kaWYgLyogV0lUSF9WQUxFICovCiAKICNpZmRlZiBXSVRI
X1BJUEVTCkBAIC04NzUsNTYgKzEwMjAsMTIyIEBACiAJcmV0dXJuIHNwYWNlOwogfQogCisvKiBy
ZXR1cm4gc2xvdHMgcmVzZXJ2ZWQgdG8gdHggY2xpZW50cyAqLworI2RlZmluZSBubV9rcl90eHNw
YWNlKF9rKSBubV9rcl9yeHNwYWNlKF9rKQogCi0vKiBUcnVlIGlmIG5vIHNwYWNlIGluIHRoZSB0
eCByaW5nLiBvbmx5IHZhbGlkIGFmdGVyIHR4c3luY19wcm9sb2d1ZSAqLworCisvKiBUcnVlIGlm
IG5vIHNwYWNlIGluIHRoZSB0eCByaW5nLCBvbmx5IHZhbGlkIGFmdGVyIHR4c3luY19wcm9sb2d1
ZSAqLwogc3RhdGljIGlubGluZSBpbnQKIG5tX2tyX3R4ZW1wdHkoc3RydWN0IG5ldG1hcF9rcmlu
ZyAqa3JpbmcpCiB7CiAJcmV0dXJuIGtyaW5nLT5yY3VyID09IGtyaW5nLT5ucl9od3RhaWw7CiB9
CiAKKy8qIFRydWUgaWYgbm8gbW9yZSBjb21wbGV0ZWQgc2xvdHMgaW4gdGhlIHJ4IHJpbmcsIG9u
bHkgdmFsaWQgYWZ0ZXIKKyAqIHJ4c3luY19wcm9sb2d1ZSAqLworI2RlZmluZSBubV9rcl9yeGVt
cHR5KF9rKQlubV9rcl90eGVtcHR5KF9rKQogCiAvKgogICogcHJvdGVjdCBhZ2FpbnN0IG11bHRp
cGxlIHRocmVhZHMgdXNpbmcgdGhlIHNhbWUgcmluZy4KLSAqIGFsc28gY2hlY2sgdGhhdCB0aGUg
cmluZyBoYXMgbm90IGJlZW4gc3RvcHBlZC4KLSAqIFdlIG9ubHkgY2FyZSBmb3IgMCBvciAhPTAg
YXMgYSByZXR1cm4gY29kZS4KKyAqIGFsc28gY2hlY2sgdGhhdCB0aGUgcmluZyBoYXMgbm90IGJl
ZW4gc3RvcHBlZCBvciBsb2NrZWQKICAqLwotI2RlZmluZSBOTV9LUl9CVVNZCTEKLSNkZWZpbmUg
Tk1fS1JfU1RPUFBFRAkyCisjZGVmaW5lIE5NX0tSX0JVU1kJMQkvKiBzb21lIG90aGVyIHRocmVh
ZCBpcyBzeW5jaW5nIHRoZSByaW5nICovCisjZGVmaW5lIE5NX0tSX1NUT1BQRUQJMgkvKiB1bmJv
dW5kZWQgc3RvcCAoaWZjb25maWcgZG93biBvciBkcml2ZXIgdW5sb2FkKSAqLworI2RlZmluZSBO
TV9LUl9MT0NLRUQJMwkvKiBib3VuZGVkLCBicmllZiBzdG9wIGZvciBtdXR1YWwgZXhjbHVzaW9u
ICovCiAKIAorLyogcmVsZWFzZSB0aGUgcHJldmlvdXNseSBhY3F1aXJlZCByaWdodCB0byB1c2Ug
dGhlICpzeW5jKCkgbWV0aG9kcyBvZiB0aGUgcmluZyAqLwogc3RhdGljIF9faW5saW5lIHZvaWQg
bm1fa3JfcHV0KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyKQogewogCU5NX0FUT01JQ19DTEVBUigm
a3ItPm5yX2J1c3kpOwogfQogCiAKLXN0YXRpYyBfX2lubGluZSBpbnQgbm1fa3JfdHJ5Z2V0KHN0
cnVjdCBuZXRtYXBfa3JpbmcgKmtyKQorLyogdHJ1ZSBpZiB0aGUgaWZwIHRoYXQgYmFja2VkIHRo
ZSBhZGFwdGVyIGhhcyBkaXNhcHBlYXJlZCAoZS5nLiwgdGhlCisgKiBkcml2ZXIgaGFzIGJlZW4g
dW5sb2FkZWQpCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5tX2lzem9tYmllKHN0cnVjdCBuZXRt
YXBfYWRhcHRlciAqbmEpOworCisvKiB0cnkgdG8gb2J0YWluIGV4Y2x1c2l2ZSByaWdodCB0byBp
c3N1ZSB0aGUgKnN5bmMoKSBvcGVyYXRpb25zIG9uIHRoZSByaW5nLgorICogVGhlIHJpZ2h0IGlz
IG9idGFpbmVkIGFuZCBtdXN0IGJlIGxhdGVyIHJlbGlucXVpc2hlZCB2aWEgbm1fa3JfcHV0KCkg
aWYgYW5kCisgKiBvbmx5IGlmIG5tX2tyX3RyeWdldCgpIHJldHVybnMgMC4KKyAqIElmIGNhbl9z
bGVlcCBpcyAxIHRoZXJlIGFyZSBvbmx5IHR3byBvdGhlciBwb3NzaWJsZSBvdXRjb21lczoKKyAq
IC0gdGhlIGZ1bmN0aW9uIHJldHVybnMgTk1fS1JfQlVTWQorICogLSB0aGUgZnVuY3Rpb24gcmV0
dXJucyBOTV9LUl9TVE9QUEVEIGFuZCBzZXRzIHRoZSBQT0xMRVJSIGJpdCBpbiAqcGVycgorICog
ICAoaWYgbm9uLW51bGwpCisgKiBJbiBib3RoIGNhc2VzIHRoZSBjYWxsZXIgd2lsbCB0eXBpY2Fs
bHkgc2tpcCB0aGUgcmluZywgcG9zc2libHkgY29sbGVjdGluZworICogZXJyb3JzIGFsb25nIHRo
ZSB3YXkuCisgKiBJZiB0aGUgY2FsbGluZyBjb250ZXh0IGRvZXMgbm90IGFsbG93IHNsZWVwaW5n
LCB0aGUgY2FsbGVyIG11c3QgcGFzcyAwIGluIGNhbl9zbGVlcC4KKyAqIEluIHRoZSBsYXR0ZXIg
Y2FzZSwgdGhlIGZ1bmN0aW9uIG1heSBhbHNvIHJldHVybiBOTV9LUl9MT0NLRUQgYW5kIGxlYXZl
ICpwZXJyCisgKiB1bnRvdWNoZWQ6IGlkZWFsbHksIHRoZSBjYWxsZXIgc2hvdWxkIHRyeSBhZ2Fp
biBhdCBhIGxhdGVyIHRpbWUuCisgKi8KK3N0YXRpYyBfX2lubGluZSBpbnQgbm1fa3JfdHJ5Z2V0
KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyLCBpbnQgY2FuX3NsZWVwLCBpbnQgKnBlcnIpCiB7CisJ
aW50IGJ1c3kgPSAxLCBzdG9wcGVkOwogCS8qIGNoZWNrIGEgZmlyc3QgdGltZSB3aXRob3V0IHRh
a2luZyB0aGUgbG9jawogCSAqIHRvIGF2b2lkIHN0YXJ2YXRpb24gZm9yIG5tX2tyX2dldCgpCiAJ
ICovCi0JaWYgKHVubGlrZWx5KGtyLT5ua3Jfc3RvcHBlZCkpIHsKLQkJTkQoInJpbmcgJXAgc3Rv
cHBlZCAoJWQpIiwga3IsIGtyLT5ua3Jfc3RvcHBlZCk7Ci0JCXJldHVybiBOTV9LUl9TVE9QUEVE
OworcmV0cnk6CisJc3RvcHBlZCA9IGtyLT5ua3Jfc3RvcHBlZDsKKwlpZiAodW5saWtlbHkoc3Rv
cHBlZCkpIHsKKwkJZ290byBzdG9wOworCX0KKwlidXN5ID0gTk1fQVRPTUlDX1RFU1RfQU5EX1NF
VCgma3ItPm5yX2J1c3kpOworCS8qIHdlIHNob3VsZCBub3QgcmV0dXJuIE5NX0tSX0JVU1kgaWYg
dGhlIHJpbmcgd2FzCisJICogYWN0dWFsbHkgc3RvcHBlZCwgc28gY2hlY2sgYW5vdGhlciB0aW1l
IGFmdGVyCisJICogdGhlIGJhcnJpZXIgcHJvdmlkZWQgYnkgdGhlIGF0b21pYyBvcGVyYXRpb24K
KwkgKi8KKwlzdG9wcGVkID0ga3ItPm5rcl9zdG9wcGVkOworCWlmICh1bmxpa2VseShzdG9wcGVk
KSkgeworCQlnb3RvIHN0b3A7CisJfQorCisJaWYgKHVubGlrZWx5KG5tX2lzem9tYmllKGtyLT5u
YSkpKSB7CisJCXN0b3BwZWQgPSBOTV9LUl9TVE9QUEVEOworCQlnb3RvIHN0b3A7CiAJfQotCWlm
ICh1bmxpa2VseShOTV9BVE9NSUNfVEVTVF9BTkRfU0VUKCZrci0+bnJfYnVzeSkpKQotCQlyZXR1
cm4gTk1fS1JfQlVTWTsKLQkvKiBjaGVjayBhIHNlY29uZCB0aW1lIHdpdGggbG9jayBoZWxkICov
Ci0JaWYgKHVubGlrZWx5KGtyLT5ua3Jfc3RvcHBlZCkpIHsKLQkJTkQoInJpbmcgJXAgc3RvcHBl
ZCAoJWQpIiwga3IsIGtyLT5ua3Jfc3RvcHBlZCk7CisKKwlyZXR1cm4gdW5saWtlbHkoYnVzeSkg
PyBOTV9LUl9CVVNZIDogMDsKKworc3RvcDoKKwlpZiAoIWJ1c3kpCiAJCW5tX2tyX3B1dChrcik7
Ci0JCXJldHVybiBOTV9LUl9TVE9QUEVEOworCWlmIChzdG9wcGVkID09IE5NX0tSX1NUT1BQRUQp
IHsKKy8qIGlmIFBPTExFUlIgaXMgZGVmaW5lZCB3ZSB3YW50IHRvIHVzZSBpdCB0byBzaW1wbGlm
eSBuZXRtYXBfcG9sbCgpLgorICogT3RoZXJ3aXNlLCBhbnkgbm9uLXplcm8gdmFsdWUgd2lsbCBk
by4KKyAqLworI2lmZGVmIFBPTExFUlIKKyNkZWZpbmUgTk1fUE9MTEVSUiBQT0xMRVJSCisjZWxz
ZQorI2RlZmluZSBOTV9QT0xMRVJSIDEKKyNlbmRpZiAvKiBQT0xMRVJSICovCisJCWlmIChwZXJy
KQorCQkJKnBlcnIgfD0gTk1fUE9MTEVSUjsKKyN1bmRlZiBOTV9QT0xMRVJSCisJfSBlbHNlIGlm
IChjYW5fc2xlZXApIHsKKwkJdHNsZWVwKGtyLCAwLCAiTk1fS1JfVFJZR0VUIiwgNCk7CisJCWdv
dG8gcmV0cnk7CiAJfQotCXJldHVybiAwOworCXJldHVybiBzdG9wcGVkOwogfQogCi1zdGF0aWMg
X19pbmxpbmUgdm9pZCBubV9rcl9nZXQoc3RydWN0IG5ldG1hcF9rcmluZyAqa3IpCisvKiBwdXQg
dGhlIHJpbmcgaW4gdGhlICdzdG9wcGVkJyBzdGF0ZSBhbmQgd2FpdCBmb3IgdGhlIGN1cnJlbnQg
dXNlciAoaWYgYW55KSB0bworICogbm90aWNlLiBzdG9wcGVkIG11c3QgYmUgZWl0aGVyIE5NX0tS
X1NUT1BQRUQgb3IgTk1fS1JfTE9DS0VECisgKi8KK3N0YXRpYyBfX2lubGluZSB2b2lkIG5tX2ty
X3N0b3Aoc3RydWN0IG5ldG1hcF9rcmluZyAqa3IsIGludCBzdG9wcGVkKQogeworCWtyLT5ua3Jf
c3RvcHBlZCA9IHN0b3BwZWQ7CiAJd2hpbGUgKE5NX0FUT01JQ19URVNUX0FORF9TRVQoJmtyLT5u
cl9idXN5KSkKIAkJdHNsZWVwKGtyLCAwLCAiTk1fS1JfR0VUIiwgNCk7CiB9CiAKKy8qIHJlc3Rh
cnQgYSByaW5nIGFmdGVyIGEgc3RvcCAqLworc3RhdGljIF9faW5saW5lIHZvaWQgbm1fa3Jfc3Rh
cnQoc3RydWN0IG5ldG1hcF9rcmluZyAqa3IpCit7CisJa3ItPm5rcl9zdG9wcGVkID0gMDsKKwlu
bV9rcl9wdXQoa3IpOworfQorCiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUg
dXNlZCBieSBpbmRpdmlkdWFsIGRyaXZlcnMgdG8KQEAgLTk1MiwxMCArMTE2MywyNiBAQAogCWVu
dW0gdHhyeCB0eCwgdV9pbnQgbiwgdV9pbnQgbmV3X2N1cik7CiBpbnQgbmV0bWFwX3JpbmdfcmVp
bml0KHN0cnVjdCBuZXRtYXBfa3JpbmcgKik7CiAKKy8qIFJldHVybiBjb2RlcyBmb3IgbmV0bWFw
Xyp4X2lycS4gKi8KK2VudW0geworCS8qIERyaXZlciBzaG91bGQgZG8gbm9ybWFsIGludGVycnVw
dCBwcm9jZXNzaW5nLCBlLmcuIGJlY2F1c2UKKwkgKiB0aGUgaW50ZXJmYWNlIGlzIG5vdCBpbiBu
ZXRtYXAgbW9kZS4gKi8KKwlOTV9JUlFfUEFTUyA9IDAsCisJLyogUG9ydCBpcyBpbiBuZXRtYXAg
bW9kZSwgYW5kIHRoZSBpbnRlcnJ1cHQgd29yayBoYXMgYmVlbgorCSAqIGNvbXBsZXRlZC4gVGhl
IGRyaXZlciBkb2VzIG5vdCBoYXZlIHRvIG5vdGlmeSBuZXRtYXAKKwkgKiBhZ2FpbiBiZWZvcmUg
dGhlIG5leHQgaW50ZXJydXB0LiAqLworCU5NX0lSUV9DT01QTEVURUQgPSAtMSwKKwkvKiBQb3J0
IGlzIGluIG5ldG1hcCBtb2RlLCBidXQgdGhlIGludGVycnVwdCB3b3JrIGhhcyBub3QgYmVlbgor
CSAqIGNvbXBsZXRlZC4gVGhlIGRyaXZlciBoYXMgdG8gbWFrZSBzdXJlIG5ldG1hcCB3aWxsIGJl
CisJICogbm90aWZpZWQgYWdhaW4gc29vbiwgZXZlbiBpZiBubyBtb3JlIGludGVycnVwdHMgY29t
ZSAoZS5nLgorCSAqIG9uIExpbnV4IHRoZSBkcml2ZXIgc2hvdWxkIG5vdCBjYWxsIG5hcGlfY29t
cGxldGUoKSkuICovCisJTk1fSVJRX1JFU0NIRUQgPSAtMiwKK307CisKIC8qIGRlZmF1bHQgZnVu
Y3Rpb25zIHRvIGhhbmRsZSByeC90eCBpbnRlcnJ1cHRzICovCiBpbnQgbmV0bWFwX3J4X2lycShz
dHJ1Y3QgaWZuZXQgKiwgdV9pbnQsIHVfaW50ICopOwogI2RlZmluZSBuZXRtYXBfdHhfaXJxKF9u
LCBfcSkgbmV0bWFwX3J4X2lycShfbiwgX3EsIE5VTEwpCi12b2lkIG5ldG1hcF9jb21tb25faXJx
KHN0cnVjdCBpZm5ldCAqLCB1X2ludCwgdV9pbnQgKndvcmtfZG9uZSk7CitpbnQgbmV0bWFwX2Nv
bW1vbl9pcnEoc3RydWN0IG5ldG1hcF9hZGFwdGVyICosIHVfaW50LCB1X2ludCAqd29ya19kb25l
KTsKIAogCiAjaWZkZWYgV0lUSF9WQUxFCkBAIC05ODUsMzUgKzEyMTIsNzQgQEAKIAlyZXR1cm4g
bm1fbmV0bWFwX29uKG5hKSAmJiAobmEtPm5hX2ZsYWdzICYgTkFGX05BVElWRSk7CiB9CiAKK3N0
YXRpYyBpbmxpbmUgaW50CitubV9pc3pvbWJpZShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKQor
eworCXJldHVybiBuYSA9PSBOVUxMIHx8IChuYS0+bmFfZmxhZ3MgJiBOQUZfWk9NQklFKTsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkCitubV91cGRhdGVfaG9zdHJpbmdzX21vZGUoc3RydWN0IG5l
dG1hcF9hZGFwdGVyICpuYSkKK3sKKwkvKiBQcm9jZXNzIG5yX21vZGUgYW5kIG5yX3BlbmRpbmdf
bW9kZSBmb3IgaG9zdCByaW5ncy4gKi8KKwluYS0+dHhfcmluZ3NbbmEtPm51bV90eF9yaW5nc10u
bnJfbW9kZSA9CisJCW5hLT50eF9yaW5nc1tuYS0+bnVtX3R4X3JpbmdzXS5ucl9wZW5kaW5nX21v
ZGU7CisJbmEtPnJ4X3JpbmdzW25hLT5udW1fcnhfcmluZ3NdLm5yX21vZGUgPQorCQluYS0+cnhf
cmluZ3NbbmEtPm51bV9yeF9yaW5nc10ubnJfcGVuZGluZ19tb2RlOworfQorCiAvKiBzZXQvY2xl
YXIgbmF0aXZlIGZsYWdzIGFuZCBpZl90cmFuc21pdC9uZXRkZXZfb3BzICovCiBzdGF0aWMgaW5s
aW5lIHZvaWQKIG5tX3NldF9uYXRpdmVfZmxhZ3Moc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSkK
IHsKIAlzdHJ1Y3QgaWZuZXQgKmlmcCA9IG5hLT5pZnA7CiAKKwkvKiBXZSBkbyB0aGUgc2V0dXAg
Zm9yIGludGVyY2VwdGluZyBwYWNrZXRzIG9ubHkgaWYgd2UgYXJlIHRoZQorCSAqIGZpcnN0IHVz
ZXIgb2YgdGhpcyBhZGFwYXB0ZXIuICovCisJaWYgKG5hLT5hY3RpdmVfZmRzID4gMCkgeworCQly
ZXR1cm47CisJfQorCiAJbmEtPm5hX2ZsYWdzIHw9IE5BRl9ORVRNQVBfT047CiAjaWZkZWYgSUZD
QVBfTkVUTUFQIC8qIG9yIEZyZWVCU0QgPyAqLwogCWlmcC0+aWZfY2FwZW5hYmxlIHw9IElGQ0FQ
X05FVE1BUDsKICNlbmRpZgotI2lmZGVmIF9fRnJlZUJTRF9fCisjaWYgZGVmaW5lZCAoX19GcmVl
QlNEX18pCiAJbmEtPmlmX3RyYW5zbWl0ID0gaWZwLT5pZl90cmFuc21pdDsKIAlpZnAtPmlmX3Ry
YW5zbWl0ID0gbmV0bWFwX3RyYW5zbWl0OworI2VsaWYgZGVmaW5lZCAoX1dJTjMyKQorCSh2b2lk
KWlmcDsgLyogcHJldmVudCBhIHdhcm5pbmcgKi8KKwkvL1hYWF9hbGUgY2FuIHdlIGp1c3QgY29t
bWVudCB0aG9zZT8KKwkvL25hLT5pZl90cmFuc21pdCA9IGlmcC0+aWZfdHJhbnNtaXQ7CisJLy9p
ZnAtPmlmX3RyYW5zbWl0ID0gbmV0bWFwX3RyYW5zbWl0OwogI2Vsc2UKIAluYS0+aWZfdHJhbnNt
aXQgPSAodm9pZCAqKWlmcC0+bmV0ZGV2X29wczsKIAlpZnAtPm5ldGRldl9vcHMgPSAmKChzdHJ1
Y3QgbmV0bWFwX2h3X2FkYXB0ZXIgKiluYSktPm5tX25kbzsKIAkoKHN0cnVjdCBuZXRtYXBfaHdf
YWRhcHRlciAqKW5hKS0+c2F2ZV9ldGh0b29sID0gaWZwLT5ldGh0b29sX29wczsKIAlpZnAtPmV0
aHRvb2xfb3BzID0gJigoc3RydWN0IG5ldG1hcF9od19hZGFwdGVyKiluYSktPm5tX2V0bzsKICNl
bmRpZgorCW5tX3VwZGF0ZV9ob3N0cmluZ3NfbW9kZShuYSk7CiB9CiAKLQogc3RhdGljIGlubGlu
ZSB2b2lkCiBubV9jbGVhcl9uYXRpdmVfZmxhZ3Moc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSkK
IHsKIAlzdHJ1Y3QgaWZuZXQgKmlmcCA9IG5hLT5pZnA7CiAKLSNpZmRlZiBfX0ZyZWVCU0RfXwor
CS8qIFdlIHVuZG8gdGhlIHNldHVwIGZvciBpbnRlcmNlcHRpbmcgcGFja2V0cyBvbmx5IGlmIHdl
IGFyZSB0aGUKKwkgKiBsYXN0IHVzZXIgb2YgdGhpcyBhZGFwYXB0ZXIuICovCisJaWYgKG5hLT5h
Y3RpdmVfZmRzID4gMCkgeworCQlyZXR1cm47CisJfQorCisJbm1fdXBkYXRlX2hvc3RyaW5nc19t
b2RlKG5hKTsKKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCiAJaWZwLT5pZl90cmFuc21pdCA9
IG5hLT5pZl90cmFuc21pdDsKKyNlbGlmIGRlZmluZWQoX1dJTjMyKQorCSh2b2lkKWlmcDsgLyog
cHJldmVudCBhIHdhcm5pbmcgKi8KKwkvL1hYWF9hbGUgY2FuIHdlIGp1c3QgY29tbWVudCB0aG9z
ZT8KKwkvL2lmcC0+aWZfdHJhbnNtaXQgPSBuYS0+aWZfdHJhbnNtaXQ7CiAjZWxzZQogCWlmcC0+
bmV0ZGV2X29wcyA9ICh2b2lkICopbmEtPmlmX3RyYW5zbWl0OwogCWlmcC0+ZXRodG9vbF9vcHMg
PSAoKHN0cnVjdCBuZXRtYXBfaHdfYWRhcHRlciopbmEpLT5zYXZlX2V0aHRvb2w7CkBAIC0xMDI0
LDYgKzEyOTAsMjggQEAKICNlbmRpZgogfQogCisvKgorICogbm1fKnN5bmNfcHJvbG9ndWUoKSBm
dW5jdGlvbnMgYXJlIHVzZWQgaW4gaW9jdGwvcG9sbCBhbmQgcHRuZXRtYXAKKyAqIGt0aHJlYWRz
LgorICogV2UgbmVlZCBuZXRtYXBfcmluZyogcGFyYW1ldGVyLCBiZWNhdXNlIGluIHB0bmV0bWFw
IGl0IGlzIGRlY291cGxlZAorICogZnJvbSBob3N0IGtyaW5nLgorICogVGhlIHVzZXItc3BhY2Ug
cmluZyBwb2ludGVycyAoaGVhZC9jdXIvdGFpbCkgYXJlIHNoYXJlZCB0aHJvdWdoCisgKiBDU0Ig
YmV0d2VlbiBob3N0IGFuZCBndWVzdC4KKyAqLworCisvKgorICogdmFsaWRhdGVzIHBhcmFtZXRl
cnMgaW4gdGhlIHJpbmcva3JpbmcsIHJldHVybnMgYSB2YWx1ZSBmb3IgaGVhZAorICogSWYgYW55
IGVycm9yLCByZXR1cm5zIHJpbmdfc2l6ZSB0byBmb3JjZSBhIHJlaW5pdC4KKyAqLwordWludDMy
X3Qgbm1fdHhzeW5jX3Byb2xvZ3VlKHN0cnVjdCBuZXRtYXBfa3JpbmcgKiwgc3RydWN0IG5ldG1h
cF9yaW5nICopOworCisKKy8qCisgKiB2YWxpZGF0ZXMgcGFyYW1ldGVycyBpbiB0aGUgcmluZy9r
cmluZywgcmV0dXJucyBhIHZhbHVlIGZvciBoZWFkCisgKiBJZiBhbnkgZXJyb3IsIHJldHVybnMg
cmluZ19zaXplIGxpbSB0byBmb3JjZSBhIHJlaW5pdC4KKyAqLwordWludDMyX3Qgbm1fcnhzeW5j
X3Byb2xvZ3VlKHN0cnVjdCBuZXRtYXBfa3JpbmcgKiwgc3RydWN0IG5ldG1hcF9yaW5nICopOwor
CiAKIC8qIGNoZWNrL2ZpeCBhZGRyZXNzIGFuZCBsZW4gaW4gdHggcmluZ3MgKi8KICNpZiAxIC8q
IGRlYnVnIHZlcnNpb24gKi8KQEAgLTEwNzksNiArMTM2Nyw5IEBACiAgKi8KIHZvaWQgbmV0bWFw
X2tyaW5nc19kZWxldGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSk7CiAKK2ludCBuZXRtYXBf
aHdfa3JpbmdzX2NyZWF0ZShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKTsKK3ZvaWQgbmV0bWFw
X2h3X2tyaW5nc19kZWxldGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSk7CisKIC8qIHNldCB0
aGUgc3RvcHBlZC9lbmFibGVkIHN0YXR1cyBvZiByaW5nCiAgKiBXaGVuIHN0b3BwaW5nLCB0aGV5
IGFsc28gd2FpdCBmb3IgYWxsIGN1cnJlbnQgYWN0aXZpdHkgb24gdGhlIHJpbmcgdG8KICAqIHRl
cm1pbmF0ZS4gVGhlIHN0YXR1cyBjaGFuZ2UgaXMgdGhlbiBub3RpZmllZCB1c2luZyB0aGUgbmEg
bm1fbm90aWZ5CkBAIC0xMDg3LDE2ICsxMzc4LDE4IEBACiB2b2lkIG5ldG1hcF9zZXRfcmluZyhz
dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKiwgdV9pbnQgcmluZ19pZCwgZW51bSB0eHJ4LCBpbnQgc3Rv
cHBlZCk7CiAvKiBzZXQgdGhlIHN0b3BwZWQvZW5hYmxlZCBzdGF0dXMgb2YgYWxsIHJpbmdzIG9m
IHRoZSBhZGFwdGVyLiAqLwogdm9pZCBuZXRtYXBfc2V0X2FsbF9yaW5ncyhzdHJ1Y3QgbmV0bWFw
X2FkYXB0ZXIgKiwgaW50IHN0b3BwZWQpOwotLyogY29udmVuaWVuY2Ugd3JhcHBlcnMgZm9yIG5l
dG1hcF9zZXRfYWxsX3JpbmdzLCB1c2VkIGluIGRyaXZlcnMgKi8KKy8qIGNvbnZlbmllbmNlIHdy
YXBwZXJzIGZvciBuZXRtYXBfc2V0X2FsbF9yaW5ncyAqLwogdm9pZCBuZXRtYXBfZGlzYWJsZV9h
bGxfcmluZ3Moc3RydWN0IGlmbmV0ICopOwogdm9pZCBuZXRtYXBfZW5hYmxlX2FsbF9yaW5ncyhz
dHJ1Y3QgaWZuZXQgKik7CiAKIGludCBuZXRtYXBfZG9fcmVnaWYoc3RydWN0IG5ldG1hcF9wcml2
X2QgKnByaXYsIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsCiAJdWludDE2X3QgcmluZ2lkLCB1
aW50MzJfdCBmbGFncyk7Ci0KK3ZvaWQgbmV0bWFwX2RvX3VucmVnaWYoc3RydWN0IG5ldG1hcF9w
cml2X2QgKnByaXYpOwogCiB1X2ludCBubV9ib3VuZF92YXIodV9pbnQgKnYsIHVfaW50IGRmbHQs
IHVfaW50IGxvLCB1X2ludCBoaSwgY29uc3QgY2hhciAqbXNnKTsKLWludCBuZXRtYXBfZ2V0X25h
KHN0cnVjdCBubXJlcSAqbm1yLCBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKipuYSwgaW50IGNyZWF0
ZSk7CitpbnQgbmV0bWFwX2dldF9uYShzdHJ1Y3Qgbm1yZXEgKm5tciwgc3RydWN0IG5ldG1hcF9h
ZGFwdGVyICoqbmEsCisJCSAgc3RydWN0IGlmbmV0ICoqaWZwLCBpbnQgY3JlYXRlKTsKK3ZvaWQg
bmV0bWFwX3VuZ2V0X25hKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIHN0cnVjdCBpZm5ldCAq
aWZwKTsKIGludCBuZXRtYXBfZ2V0X2h3X25hKHN0cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3QgbmV0
bWFwX2FkYXB0ZXIgKipuYSk7CiAKIApAQCAtMTEyMywxMiArMTQxNiwxMSBAQAogdV9pbnQgbmV0
bWFwX2JkZ19sZWFybmluZyhzdHJ1Y3Qgbm1fYmRnX2Z3ZCAqZnQsIHVpbnQ4X3QgKmRzdF9yaW5n
LAogCQlzdHJ1Y3QgbmV0bWFwX3ZwX2FkYXB0ZXIgKik7CiAKKyNkZWZpbmUJTk1fQlJJREdFUwkJ
OAkvKiBudW1iZXIgb2YgYnJpZGdlcyAqLwogI2RlZmluZQlOTV9CREdfTUFYUE9SVFMJCTI1NAkv
KiB1cCB0byAyNTQgKi8KICNkZWZpbmUJTk1fQkRHX0JST0FEQ0FTVAlOTV9CREdfTUFYUE9SVFMK
ICNkZWZpbmUJTk1fQkRHX05PUE9SVAkJKE5NX0JER19NQVhQT1JUUysxKQogCi0jZGVmaW5lCU5N
X05BTUUJCQkidmFsZSIJLyogcHJlZml4IGZvciBicmlkZ2UgcG9ydCBuYW1lICovCi0KIC8qIHRo
ZXNlIGFyZSByZWRlZmluZWQgaW4gY2FzZSBvZiBubyBWQUxFIHN1cHBvcnQgKi8KIGludCBuZXRt
YXBfZ2V0X2JkZ19uYShzdHJ1Y3Qgbm1yZXEgKm5tciwgc3RydWN0IG5ldG1hcF9hZGFwdGVyICoq
bmEsIGludCBjcmVhdGUpOwogc3RydWN0IG5tX2JyaWRnZSAqbmV0bWFwX2luaXRfYnJpZGdlczIo
dV9pbnQpOwpAQCAtMTE4MCwxNCArMTQ3MiwxMyBAQAogI2VuZGlmCiAKIC8qIFZhcmlvdXMgcHJv
dG90eXBlcyAqLwotaW50IG5ldG1hcF9wb2xsKHN0cnVjdCBjZGV2ICpkZXYsIGludCBldmVudHMs
IHN0cnVjdCB0aHJlYWQgKnRkKTsKK2ludCBuZXRtYXBfcG9sbChzdHJ1Y3QgbmV0bWFwX3ByaXZf
ZCAqLCBpbnQgZXZlbnRzLCBOTV9TRUxSRUNPUkRfVCAqdGQpOwogaW50IG5ldG1hcF9pbml0KHZv
aWQpOwogdm9pZCBuZXRtYXBfZmluaSh2b2lkKTsKIGludCBuZXRtYXBfZ2V0X21lbW9yeShzdHJ1
Y3QgbmV0bWFwX3ByaXZfZCogcCk7CiB2b2lkIG5ldG1hcF9kdG9yKHZvaWQgKmRhdGEpOwotaW50
IG5ldG1hcF9kdG9yX2xvY2tlZChzdHJ1Y3QgbmV0bWFwX3ByaXZfZCAqcHJpdik7CiAKLWludCBu
ZXRtYXBfaW9jdGwoc3RydWN0IGNkZXYgKmRldiwgdV9sb25nIGNtZCwgY2FkZHJfdCBkYXRhLCBp
bnQgZmZsYWcsIHN0cnVjdCB0aHJlYWQgKnRkKTsKK2ludCBuZXRtYXBfaW9jdGwoc3RydWN0IG5l
dG1hcF9wcml2X2QgKnByaXYsIHVfbG9uZyBjbWQsIGNhZGRyX3QgZGF0YSwgc3RydWN0IHRocmVh
ZCAqKTsKIAogLyogbmV0bWFwX2FkYXB0ZXIgY3JlYXRpb24vZGVzdHJ1Y3Rpb24gKi8KIApAQCAt
MTIyNywxMSArMTUxOCwxMSBAQAogLyoKICAqIG1vZHVsZSB2YXJpYWJsZXMKICAqLwotI2RlZmlu
ZSBORVRNQVBfQlVGX0JBU0UobmEpCSgobmEpLT5uYV9sdXQubHV0WzBdLnZhZGRyKQotI2RlZmlu
ZSBORVRNQVBfQlVGX1NJWkUobmEpCSgobmEpLT5uYV9sdXQub2Jqc2l6ZSkKLWV4dGVybiBpbnQg
bmV0bWFwX21pdGlnYXRlOwkvLyBYWFggbm90IHJlYWxseSB1c2VkCisjZGVmaW5lIE5FVE1BUF9C
VUZfQkFTRShfbmEpCSgoX25hKS0+bmFfbHV0Lmx1dFswXS52YWRkcikKKyNkZWZpbmUgTkVUTUFQ
X0JVRl9TSVpFKF9uYSkJKChfbmEpLT5uYV9sdXQub2Jqc2l6ZSkKIGV4dGVybiBpbnQgbmV0bWFw
X25vX3BlbmRpbnRyOwotZXh0ZXJuIGludCBuZXRtYXBfdmVyYm9zZTsJLy8gWFhYIGRlYnVnZ2lu
ZworZXh0ZXJuIGludCBuZXRtYXBfbWl0aWdhdGU7CitleHRlcm4gaW50IG5ldG1hcF92ZXJib3Nl
OwkJLyogZm9yIGRlYnVnZ2luZyAqLwogZW51bSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8qIHZlcmJvc2UgZmxhZ3MgKi8KIAlOTV9WRVJCX09OID0gMSwgICAgICAgICAgICAg
ICAgIC8qIGdlbmVyaWMgdmVyYm9zZSAqLwogCU5NX1ZFUkJfSE9TVCA9IDB4MiwgICAgICAgICAg
ICAgLyogdmVyYm9zZSBob3N0IHN0YWNrICovCkBAIC0xMjQ0LDEwICsxNTM1LDExIEBACiB9Owog
CiBleHRlcm4gaW50IG5ldG1hcF90eHN5bmNfcmV0cnk7CitleHRlcm4gaW50IG5ldG1hcF9mbGFn
czsKIGV4dGVybiBpbnQgbmV0bWFwX2dlbmVyaWNfbWl0OwogZXh0ZXJuIGludCBuZXRtYXBfZ2Vu
ZXJpY19yaW5nc2l6ZTsKIGV4dGVybiBpbnQgbmV0bWFwX2dlbmVyaWNfcmluZ3M7Ci1leHRlcm4g
aW50IG5ldG1hcF91c2VfY291bnQ7CitleHRlcm4gaW50IG5ldG1hcF9nZW5lcmljX3R4cWRpc2M7
CiAKIC8qCiAgKiBOQSByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc3RydWN0IG5ldG1hcCBhZGFw
dGVyIGZyb20gdGhlIGlmcCwKQEAgLTEyNTYsMzcgKzE1NDgsMjcgQEAKICNkZWZpbmUJTkEoX2lm
cCkJKChzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKilXTkEoX2lmcCkpCiAKIC8qCi0gKiBNYWNyb3Mg
dG8gZGV0ZXJtaW5lIGlmIGFuIGludGVyZmFjZSBpcyBuZXRtYXAgY2FwYWJsZSBvciBuZXRtYXAg
ZW5hYmxlZC4KLSAqIFNlZSB0aGUgbWFnaWMgZmllbGQgaW4gc3RydWN0IG5ldG1hcF9hZGFwdGVy
LgotICovCi0jaWZkZWYgX19GcmVlQlNEX18KLS8qCi0gKiBvbiBGcmVlQlNEIGp1c3QgdXNlIGlm
X2NhcGFiaWxpdGllcyBhbmQgaWZfY2FwZW5hYmxlLgotICovCi0jZGVmaW5lIE5FVE1BUF9DQVBB
QkxFKGlmcCkJKE5BKGlmcCkgJiYJCVwKLQkoaWZwKS0+aWZfY2FwYWJpbGl0aWVzICYgSUZDQVBf
TkVUTUFQICkKLQotI2RlZmluZQlORVRNQVBfU0VUX0NBUEFCTEUoaWZwKQkJCQlcCi0JKGlmcCkt
PmlmX2NhcGFiaWxpdGllcyB8PSBJRkNBUF9ORVRNQVAKLQotI2Vsc2UJLyogbGludXggKi8KLQot
LyoKLSAqIG9uIGxpbnV4OgotICogd2UgY2hlY2sgaWYgTkEoaWZwKSBpcyBzZXQgYW5kIGl0cyBm
aXJzdCBlbGVtZW50IGhhcyBhIHJlbGF0ZWQKKyAqIE9uIG9sZCB2ZXJzaW9ucyBvZiBGcmVlQlNE
LCBOQShpZnApIGlzIGEgcHNwYXJlLiBPbiBsaW51eCB3ZQorICogb3ZlcmxvYWQgYW5vdGhlciBw
b2ludGVyIGluIHRoZSBuZXRkZXYuCisgKgorICogV2UgY2hlY2sgaWYgTkEoaWZwKSBpcyBzZXQg
YW5kIGl0cyBmaXJzdCBlbGVtZW50IGhhcyBhIHJlbGF0ZWQKICAqIG1hZ2ljIHZhbHVlLiBUaGUg
Y2FwZW5hYmxlIGlzIHdpdGhpbiB0aGUgc3RydWN0IG5ldG1hcF9hZGFwdGVyLgogICovCiAjZGVm
aW5lCU5FVE1BUF9NQUdJQwkweDUyNjk3YTdhCiAKLSNkZWZpbmUgTkVUTUFQX0NBUEFCTEUoaWZw
KQkoTkEoaWZwKSAmJgkJXAorI2RlZmluZSBOTV9OQV9WQUxJRChpZnApCShOQShpZnApICYmCQlc
CiAJKCh1aW50MzJfdCkodWludHB0cl90KU5BKGlmcCkgXiBOQShpZnApLT5tYWdpYykgPT0gTkVU
TUFQX01BR0lDICkKIAotI2RlZmluZQlORVRNQVBfU0VUX0NBUEFCTEUoaWZwKQkJCQlcCi0JTkEo
aWZwKS0+bWFnaWMgPSAoKHVpbnQzMl90KSh1aW50cHRyX3QpTkEoaWZwKSkgXiBORVRNQVBfTUFH
SUMKKyNkZWZpbmUJTk1fQVRUQUNIX05BKGlmcCwgbmEpIGRvIHsJCQkJCVwKKwlXTkEoaWZwKSA9
IG5hOwkJCQkJCQlcCisJaWYgKE5BKGlmcCkpCQkJCQkJCVwKKwkJTkEoaWZwKS0+bWFnaWMgPSAJ
CQkJCVwKKwkJCSgodWludDMyX3QpKHVpbnRwdHJfdClOQShpZnApKSBeIE5FVE1BUF9NQUdJQzsJ
XAorfSB3aGlsZSgwKQogCi0jZW5kaWYJLyogbGludXggKi8KKyNkZWZpbmUgTk1fSVNfTkFUSVZF
KGlmcCkJKE5NX05BX1ZBTElEKGlmcCkgJiYgTkEoaWZwKS0+bm1fZHRvciA9PSBuZXRtYXBfaHdf
ZHRvcikKIAotI2lmZGVmIF9fRnJlZUJTRF9fCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKIAog
LyogQXNzaWducyB0aGUgZGV2aWNlIElPTU1VIGRvbWFpbiB0byBhbiBhbGxvY2F0b3IuCiAgKiBS
ZXR1cm5zIC1FTk9NRU0gaW4gY2FzZSB0aGUgZG9tYWluIGlzIGRpZmZlcmVudCAqLwpAQCAtMTMz
MCw2ICsxNjEyLDggQEAKIAl9CiB9CiAKKyNlbGlmIGRlZmluZWQoX1dJTjMyKQorCiAjZWxzZSAv
KiBsaW51eCAqLwogCiBpbnQgbm1faW9tbXVfZ3JvdXBfaWQoYnVzX2RtYV90YWdfdCBkZXYpOwpA
QCAtMTM0MCw4ICsxNjI0LDggQEAKIAlidXNfZG1hX3RhZ190IHRhZywgYnVzX2RtYW1hcF90IG1h
cCwgdm9pZCAqYnVmKQogewogCWlmICgwICYmIG1hcCkgewotCQkqbWFwID0gZG1hX21hcF9zaW5n
bGUobmEtPnBkZXYsIGJ1ZiwgbmEtPm5hX2x1dC5vYmpzaXplLAotCQkJCURNQV9CSURJUkVDVElP
TkFMKTsKKwkJKm1hcCA9IGRtYV9tYXBfc2luZ2xlKG5hLT5wZGV2LCBidWYsIE5FVE1BUF9CVUZf
U0laRShuYSksCisJCQkJICAgICAgRE1BX0JJRElSRUNUSU9OQUwpOwogCX0KIH0KIApAQCAtMTM0
OSwxMSArMTYzMywxMSBAQAogbmV0bWFwX3VubG9hZF9tYXAoc3RydWN0IG5ldG1hcF9hZGFwdGVy
ICpuYSwKIAlidXNfZG1hX3RhZ190IHRhZywgYnVzX2RtYW1hcF90IG1hcCkKIHsKLQl1X2ludCBz
eiA9IG5hLT5uYV9sdXQub2Jqc2l6ZTsKKwl1X2ludCBzeiA9IE5FVE1BUF9CVUZfU0laRShuYSk7
CiAKIAlpZiAoKm1hcCkgewogCQlkbWFfdW5tYXBfc2luZ2xlKG5hLT5wZGV2LCAqbWFwLCBzeiwK
LQkJCQlETUFfQklESVJFQ1RJT05BTCk7CisJCQkJIERNQV9CSURJUkVDVElPTkFMKTsKIAl9CiB9
CiAKQEAgLTEzNjEsNyArMTY0NSw3IEBACiBuZXRtYXBfcmVsb2FkX21hcChzdHJ1Y3QgbmV0bWFw
X2FkYXB0ZXIgKm5hLAogCWJ1c19kbWFfdGFnX3QgdGFnLCBidXNfZG1hbWFwX3QgbWFwLCB2b2lk
ICpidWYpCiB7Ci0JdV9pbnQgc3ogPSBuYS0+bmFfbHV0Lm9ianNpemU7CisJdV9pbnQgc3ogPSBO
RVRNQVBfQlVGX1NJWkUobmEpOwogCiAJaWYgKCptYXApIHsKIAkJZG1hX3VubWFwX3NpbmdsZShu
YS0+cGRldiwgKm1hcCwgc3osCkBAIC0xNDcyLDcgKzE3NTYsMTEgQEAKIAlzdHJ1Y3QgbHV0X2Vu
dHJ5ICpsdXQgPSBuYS0+bmFfbHV0Lmx1dDsKIAl2b2lkICpyZXQgPSAoaSA+PSBuYS0+bmFfbHV0
Lm9ianRvdGFsKSA/IGx1dFswXS52YWRkciA6IGx1dFtpXS52YWRkcjsKIAorI2lmbmRlZiBfV0lO
MzIKIAkqcHAgPSAoaSA+PSBuYS0+bmFfbHV0Lm9ianRvdGFsKSA/IGx1dFswXS5wYWRkciA6IGx1
dFtpXS5wYWRkcjsKKyNlbHNlCisJKnBwID0gKGkgPj0gbmEtPm5hX2x1dC5vYmp0b3RhbCkgPyAo
dWludDY0X3QpbHV0WzBdLnBhZGRyLlF1YWRQYXJ0IDogKHVpbnQ2NF90KWx1dFtpXS5wYWRkci5R
dWFkUGFydDsKKyNlbmRpZgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE0OTYsOCArMTc4NCw5IEBA
CiAJc3RydWN0IG5ldG1hcF9pZiAqIHZvbGF0aWxlIG5wX25pZnA7CS8qIG5ldG1hcCBpZiBkZXNj
cmlwdG9yLiAqLwogCiAJc3RydWN0IG5ldG1hcF9hZGFwdGVyCSpucF9uYTsKKwlzdHJ1Y3QgaWZu
ZXQJKm5wX2lmcDsKIAl1aW50MzJfdAlucF9mbGFnczsJLyogZnJvbSB0aGUgaW9jdGwgKi8KLQl1
X2ludAkJbnBfcWZpcnN0W05SX1RYUlhdLCAKKwl1X2ludAkJbnBfcWZpcnN0W05SX1RYUlhdLAog
CQkJbnBfcWxhc3RbTlJfVFhSWF07IC8qIHJhbmdlIG9mIHR4L3J4IHJpbmdzIHRvIHNjYW4gKi8K
IAl1aW50MTZfdAlucF90eHBvbGw7CS8qIFhYWCBhbmQgYWxzbyBucF9yeHBvbGwgPyAqLwogCkBA
IC0xNTExLDYgKzE4MDAsMjYgQEAKIAlzdHJ1Y3QgdGhyZWFkCSpucF90ZDsJCS8qIGtxdWV1ZSwg
anVzdCBkZWJ1Z2dpbmcgKi8KIH07CiAKK3N0cnVjdCBuZXRtYXBfcHJpdl9kICpuZXRtYXBfcHJp
dl9uZXcodm9pZCk7Cit2b2lkIG5ldG1hcF9wcml2X2RlbGV0ZShzdHJ1Y3QgbmV0bWFwX3ByaXZf
ZCAqKTsKKworc3RhdGljIGlubGluZSBpbnQgbm1fa3JpbmdfcGVuZGluZyhzdHJ1Y3QgbmV0bWFw
X3ByaXZfZCAqbnApCit7CisJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSA9IG5wLT5ucF9uYTsK
KwllbnVtIHR4cnggdDsKKwlpbnQgaTsKKworCWZvcl9yeF90eCh0KSB7CisJCWZvciAoaSA9IG5w
LT5ucF9xZmlyc3RbdF07IGkgPCBucC0+bnBfcWxhc3RbdF07IGkrKykgeworCQkJc3RydWN0IG5l
dG1hcF9rcmluZyAqa3JpbmcgPSAmTk1SKG5hLCB0KVtpXTsKKwkJCWlmIChrcmluZy0+bnJfbW9k
ZSAhPSBrcmluZy0+bnJfcGVuZGluZ19tb2RlKSB7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCX0K
Kwl9CisJcmV0dXJuIDA7Cit9CisKICNpZmRlZiBXSVRIX01PTklUT1IKIAogc3RydWN0IG5ldG1h
cF9tb25pdG9yX2FkYXB0ZXIgewpAQCAtMTUyOSwxMyArMTgzOCwzNiBAQAogICogbmF0aXZlIG5l
dG1hcCBzdXBwb3J0LgogICovCiBpbnQgZ2VuZXJpY19uZXRtYXBfYXR0YWNoKHN0cnVjdCBpZm5l
dCAqaWZwKTsKK2ludCBnZW5lcmljX3J4X2hhbmRsZXIoc3RydWN0IGlmbmV0ICppZnAsIHN0cnVj
dCBtYnVmICptKTs7CisKK2ludCBubV9vc19jYXRjaF9yeChzdHJ1Y3QgbmV0bWFwX2dlbmVyaWNf
YWRhcHRlciAqZ25hLCBpbnQgaW50ZXJjZXB0KTsKK2ludCBubV9vc19jYXRjaF90eChzdHJ1Y3Qg
bmV0bWFwX2dlbmVyaWNfYWRhcHRlciAqZ25hLCBpbnQgaW50ZXJjZXB0KTsKKworLyoKKyAqIHRo
ZSBnZW5lcmljIHRyYW5zbWl0IHJvdXRpbmUgaXMgcGFzc2VkIGEgc3RydWN0dXJlIHRvIG9wdGlv
bmFsbHkKKyAqIGJ1aWxkIGEgcXVldWUgb2YgZGVzY3JpcHRvcnMsIGluIGFuIE9TLXNwZWNpZmlj
IHdheS4KKyAqIFRoZSBwYXlsb2FkIGlzIGF0IGFkZHIsIGlmIG5vbi1udWxsLCBhbmQgdGhlIHJv
dXRpbmUgc2hvdWxkIHNlbmQgb3IgcXVldWUKKyAqIHRoZSBwYWNrZXQsIHJldHVybmluZyAwIGlm
IHN1Y2Nlc3NmdWwsIDEgb24gZmFpbHVyZS4KKyAqCisgKiBBdCB0aGUgZW5kLCBpZiBoZWFkIGlz
IG5vbi1udWxsLCB0aGVyZSB3aWxsIGJlIGFuIGFkZGl0aW9uYWwgY2FsbAorICogdG8gdGhlIGZ1
bmN0aW9uIHdpdGggYWRkciA9IE5VTEw7IHRoaXMgc2hvdWxkIHRlbGwgdGhlIE9TLXNwZWNpZmlj
CisgKiByb3V0aW5lIHRvIHNlbmQgdGhlIHF1ZXVlIGFuZCBmcmVlIGFueSByZXNvdXJjZXMuIEZh
aWx1cmUgaXMgaWdub3JlZC4KKyAqLworc3RydWN0IG5tX29zX2dlbl9hcmcgeworCXN0cnVjdCBp
Zm5ldCAqaWZwOworCXZvaWQgKm07CS8qIG9zLXNwZWNpZmljIG1idWYtbGlrZSBvYmplY3QgKi8K
Kwl2b2lkICpoZWFkLCAqdGFpbDsgLyogdGFpbHEsIGlmIHRoZSBPUy1zcGVjaWZpYyByb3V0aW5l
IG5lZWRzIHRvIGJ1aWxkIG9uZSAqLworCXZvaWQgKmFkZHI7CS8qIHBheWxvYWQgb2YgY3VycmVu
dCBwYWNrZXQgKi8KKwl1X2ludCBsZW47CS8qIHBhY2tldCBsZW5ndGggKi8KKwl1X2ludCByaW5n
X25yOwkvKiBwYWNrZXQgbGVuZ3RoICovCisJdV9pbnQgcWV2ZW50OyAgIC8qIGluIHR4cWRpc2Mg
bW9kZSwgcGxhY2UgYW4gZXZlbnQgb24gdGhpcyBtYnVmICovCit9OworCitpbnQgbm1fb3NfZ2Vu
ZXJpY194bWl0X2ZyYW1lKHN0cnVjdCBubV9vc19nZW5fYXJnICopOworaW50IG5tX29zX2dlbmVy
aWNfZmluZF9udW1fZGVzYyhzdHJ1Y3QgaWZuZXQgKmlmcCwgdV9pbnQgKnR4LCB1X2ludCAqcngp
Owordm9pZCBubV9vc19nZW5lcmljX2ZpbmRfbnVtX3F1ZXVlcyhzdHJ1Y3QgaWZuZXQgKmlmcCwg
dV9pbnQgKnR4cSwgdV9pbnQgKnJ4cSk7Cit2b2lkIG5tX29zX2dlbmVyaWNfc2V0X2ZlYXR1cmVz
KHN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICpnbmEpOwogCi1pbnQgbmV0bWFwX2NhdGNo
X3J4KHN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICpuYSwgaW50IGludGVyY2VwdCk7Ci12
b2lkIGdlbmVyaWNfcnhfaGFuZGxlcihzdHJ1Y3QgaWZuZXQgKmlmcCwgc3RydWN0IG1idWYgKm0p
OzsKLXZvaWQgbmV0bWFwX2NhdGNoX3R4KHN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICpu
YSwgaW50IGVuYWJsZSk7Ci1pbnQgZ2VuZXJpY194bWl0X2ZyYW1lKHN0cnVjdCBpZm5ldCAqaWZw
LCBzdHJ1Y3QgbWJ1ZiAqbSwgdm9pZCAqYWRkciwgdV9pbnQgbGVuLCB1X2ludCByaW5nX25yKTsK
LWludCBnZW5lcmljX2ZpbmRfbnVtX2Rlc2Moc3RydWN0IGlmbmV0ICppZnAsIHVfaW50ICp0eCwg
dV9pbnQgKnJ4KTsKLXZvaWQgZ2VuZXJpY19maW5kX251bV9xdWV1ZXMoc3RydWN0IGlmbmV0ICpp
ZnAsIHVfaW50ICp0eHEsIHVfaW50ICpyeHEpOwogc3RhdGljIGlubGluZSBzdHJ1Y3QgaWZuZXQq
CiBuZXRtYXBfZ2VuZXJpY19nZXRpZnAoc3RydWN0IG5ldG1hcF9nZW5lcmljX2FkYXB0ZXIgKmdu
YSkKIHsKQEAgLTE1NDUsNiArMTg3Nyw4IEBACiAgICAgICAgIHJldHVybiBnbmEtPnVwLnVwLmlm
cDsKIH0KIAordm9pZCBuZXRtYXBfZ2VuZXJpY19pcnEoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpu
YSwgdV9pbnQgcSwgdV9pbnQgKndvcmtfZG9uZSk7CisKIC8vI2RlZmluZSBSQVRFX0dFTkVSSUMg
IC8qIEVuYWJsZXMgY29tbXVuaWNhdGlvbiBzdGF0aXN0aWNzIGZvciBnZW5lcmljLiAqLwogI2lm
ZGVmIFJBVEVfR0VORVJJQwogdm9pZCBnZW5lcmljX3JhdGUoaW50IHR4cCwgaW50IHR4cywgaW50
IHR4aSwgaW50IHJ4cCwgaW50IHJ4cywgaW50IHJ4aSk7CkBAIC0xNTU3LDE2ICsxODkxLDE2IEBA
CiAgKiB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBpbnRlcnJ1cHQgcmVxdWVzdHMvc2Vsd2FrZXVw
CiAgKiB0byBjbGllbnRzIG9uIGluY29taW5nIHBhY2tldHMuCiAgKi8KLXZvaWQgbmV0bWFwX21p
dGlnYXRpb25faW5pdChzdHJ1Y3Qgbm1fZ2VuZXJpY19taXQgKm1pdCwgaW50IGlkeCwKK3ZvaWQg
bm1fb3NfbWl0aWdhdGlvbl9pbml0KHN0cnVjdCBubV9nZW5lcmljX21pdCAqbWl0LCBpbnQgaWR4
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIg
Km5hKTsKLXZvaWQgbmV0bWFwX21pdGlnYXRpb25fc3RhcnQoc3RydWN0IG5tX2dlbmVyaWNfbWl0
ICptaXQpOwotdm9pZCBuZXRtYXBfbWl0aWdhdGlvbl9yZXN0YXJ0KHN0cnVjdCBubV9nZW5lcmlj
X21pdCAqbWl0KTsKLWludCBuZXRtYXBfbWl0aWdhdGlvbl9hY3RpdmUoc3RydWN0IG5tX2dlbmVy
aWNfbWl0ICptaXQpOwotdm9pZCBuZXRtYXBfbWl0aWdhdGlvbl9jbGVhbnVwKHN0cnVjdCBubV9n
ZW5lcmljX21pdCAqbWl0KTsKK3ZvaWQgbm1fb3NfbWl0aWdhdGlvbl9zdGFydChzdHJ1Y3Qgbm1f
Z2VuZXJpY19taXQgKm1pdCk7Cit2b2lkIG5tX29zX21pdGlnYXRpb25fcmVzdGFydChzdHJ1Y3Qg
bm1fZ2VuZXJpY19taXQgKm1pdCk7CitpbnQgbm1fb3NfbWl0aWdhdGlvbl9hY3RpdmUoc3RydWN0
IG5tX2dlbmVyaWNfbWl0ICptaXQpOwordm9pZCBubV9vc19taXRpZ2F0aW9uX2NsZWFudXAoc3Ry
dWN0IG5tX2dlbmVyaWNfbWl0ICptaXQpOworI2Vsc2UgLyogIVdJVEhfR0VORVJJQyAqLworI2Rl
ZmluZSBnZW5lcmljX25ldG1hcF9hdHRhY2goaWZwKQkoRU9QTk9UU1VQUCkKICNlbmRpZiAvKiBX
SVRIX0dFTkVSSUMgKi8KIAotCi0KIC8qIFNoYXJlZCBkZWNsYXJhdGlvbnMgZm9yIHRoZSBWQUxF
IHN3aXRjaC4gKi8KIAogLyoKQEAgLTE2NTUsMjIgKzE5ODksMTEwIEBACiAgKi8KICNkZWZpbmUg
cmF3c3VtX3QgdWludDMyX3QKIAotcmF3c3VtX3Qgbm1fY3N1bV9yYXcodWludDhfdCAqZGF0YSwg
c2l6ZV90IGxlbiwgcmF3c3VtX3QgY3VyX3N1bSk7Ci11aW50MTZfdCBubV9jc3VtX2lwdjQoc3Ry
dWN0IG5tX2lwaGRyICppcGgpOwotdm9pZCBubV9jc3VtX3RjcHVkcF9pcHY0KHN0cnVjdCBubV9p
cGhkciAqaXBoLCB2b2lkICpkYXRhLAorcmF3c3VtX3Qgbm1fb3NfY3N1bV9yYXcodWludDhfdCAq
ZGF0YSwgc2l6ZV90IGxlbiwgcmF3c3VtX3QgY3VyX3N1bSk7Cit1aW50MTZfdCBubV9vc19jc3Vt
X2lwdjQoc3RydWN0IG5tX2lwaGRyICppcGgpOwordm9pZCBubV9vc19jc3VtX3RjcHVkcF9pcHY0
KHN0cnVjdCBubV9pcGhkciAqaXBoLCB2b2lkICpkYXRhLAogCQkgICAgICBzaXplX3QgZGF0YWxl
biwgdWludDE2X3QgKmNoZWNrKTsKLXZvaWQgbm1fY3N1bV90Y3B1ZHBfaXB2NihzdHJ1Y3Qgbm1f
aXB2NmhkciAqaXA2aCwgdm9pZCAqZGF0YSwKK3ZvaWQgbm1fb3NfY3N1bV90Y3B1ZHBfaXB2Nihz
dHJ1Y3Qgbm1faXB2NmhkciAqaXA2aCwgdm9pZCAqZGF0YSwKIAkJICAgICAgc2l6ZV90IGRhdGFs
ZW4sIHVpbnQxNl90ICpjaGVjayk7Ci11aW50MTZfdCBubV9jc3VtX2ZvbGQocmF3c3VtX3QgY3Vy
X3N1bSk7Cit1aW50MTZfdCBubV9vc19jc3VtX2ZvbGQocmF3c3VtX3QgY3VyX3N1bSk7CiAKIHZv
aWQgYmRnX21pc21hdGNoX2RhdGFwYXRoKHN0cnVjdCBuZXRtYXBfdnBfYWRhcHRlciAqbmEsCiAJ
CQkgICBzdHJ1Y3QgbmV0bWFwX3ZwX2FkYXB0ZXIgKmRzdF9uYSwKLQkJCSAgIHN0cnVjdCBubV9i
ZGdfZndkICpmdF9wLCBzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJpbmcsCisJCQkgICBjb25zdCBzdHJ1
Y3Qgbm1fYmRnX2Z3ZCAqZnRfcCwKKwkJCSAgIHN0cnVjdCBuZXRtYXBfcmluZyAqZHN0X3Jpbmcs
CiAJCQkgICB1X2ludCAqaiwgdV9pbnQgbGltLCB1X2ludCAqaG93bWFueSk7CiAKIC8qIHBlcnNp
c3RlbnQgdmlydHVhbCBwb3J0IHJvdXRpbmVzICovCi1pbnQgbm1fdmlfcGVyc2lzdChjb25zdCBj
aGFyICosIHN0cnVjdCBpZm5ldCAqKik7Ci12b2lkIG5tX3ZpX2RldGFjaChzdHJ1Y3QgaWZuZXQg
Kik7Ci12b2lkIG5tX3ZpX2luaXRfaW5kZXgodm9pZCk7CitpbnQgbm1fb3NfdmlfcGVyc2lzdChj
b25zdCBjaGFyICosIHN0cnVjdCBpZm5ldCAqKik7Cit2b2lkIG5tX29zX3ZpX2RldGFjaChzdHJ1
Y3QgaWZuZXQgKik7Cit2b2lkIG5tX29zX3ZpX2luaXRfaW5kZXgodm9pZCk7CisKKy8qCisgKiBr
ZXJuZWwgdGhyZWFkIHJvdXRpbmVzCisgKi8KK3N0cnVjdCBubV9rdGhyZWFkOyAvKiBPUy1zcGVj
aWZpYyBrdGhyZWFkIC0gb3BhcXVlICovCit0eXBlZGVmIHZvaWQgKCpubV9rdGhyZWFkX3dvcmtl
cl9mbl90KSh2b2lkICpkYXRhKTsKKworLyoga3RocmVhZCBjb25maWd1cmF0aW9uICovCitzdHJ1
Y3Qgbm1fa3RocmVhZF9jZmcgeworCWxvbmcJCQkJdHlwZTsJCS8qIGt0aHJlYWQgdHlwZS9pZGVu
dGlmaWVyICovCisJbm1fa3RocmVhZF93b3JrZXJfZm5fdAkJd29ya2VyX2ZuOwkvKiB3b3JrZXIg
ZnVuY3Rpb24gKi8KKwl2b2lkCQkJCSp3b3JrZXJfcHJpdmF0ZTsvKiB3b3JrZXIgcGFyYW1ldGVy
ICovCisJaW50CQkJCWF0dGFjaF91c2VyOwkvKiBhdHRhY2gga3RocmVhZCB0byB1c2VyIHByb2Nl
c3MgKi8KK307CisvKiBrdGhyZWFkIGNvbmZpZ3VyYXRpb24gKi8KK3N0cnVjdCBubV9rdGhyZWFk
ICpubV9vc19rdGhyZWFkX2NyZWF0ZShzdHJ1Y3Qgbm1fa3RocmVhZF9jZmcgKmNmZywKKwkJCQkJ
dW5zaWduZWQgaW50IGNmZ3R5cGUsCisJCQkJCXZvaWQgKm9wYXF1ZSk7CitpbnQgbm1fb3Nfa3Ro
cmVhZF9zdGFydChzdHJ1Y3Qgbm1fa3RocmVhZCAqKTsKK3ZvaWQgbm1fb3Nfa3RocmVhZF9zdG9w
KHN0cnVjdCBubV9rdGhyZWFkICopOwordm9pZCBubV9vc19rdGhyZWFkX2RlbGV0ZShzdHJ1Y3Qg
bm1fa3RocmVhZCAqKTsKK3ZvaWQgbm1fb3Nfa3RocmVhZF93YWtldXBfd29ya2VyKHN0cnVjdCBu
bV9rdGhyZWFkICpubWspOwordm9pZCBubV9vc19rdGhyZWFkX3NlbmRfaXJxKHN0cnVjdCBubV9r
dGhyZWFkICopOwordm9pZCBubV9vc19rdGhyZWFkX3NldF9hZmZpbml0eShzdHJ1Y3Qgbm1fa3Ro
cmVhZCAqLCBpbnQpOwordV9pbnQgbm1fb3NfbmNwdXModm9pZCk7CisKKyNpZmRlZiBXSVRIX1BU
TkVUTUFQX0hPU1QKKy8qCisgKiBuZXRtYXAgYWRhcHRlciBmb3IgaG9zdCBwdG5ldG1hcCBwb3J0
cworICovCitzdHJ1Y3QgbmV0bWFwX3B0X2hvc3RfYWRhcHRlciB7CisJc3RydWN0IG5ldG1hcF9h
ZGFwdGVyIHVwOworCisJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpwYXJlbnQ7CisJaW50ICgqcGFy
ZW50X25tX25vdGlmeSkoc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcsIGludCBmbGFncyk7CisJ
dm9pZCAqcHRuczsKK307CisvKiBwdG5ldG1hcCBIT1NUIHJvdXRpbmVzICovCitpbnQgbmV0bWFw
X2dldF9wdF9ob3N0X25hKHN0cnVjdCBubXJlcSAqbm1yLCBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIg
KipuYSwgaW50IGNyZWF0ZSk7CitpbnQgcHRuZXRtYXBfY3RsKHN0cnVjdCBubXJlcSAqbm1yLCBz
dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKTsKK3N0YXRpYyBpbmxpbmUgaW50CitubV9wdG5ldG1h
cF9ob3N0X29uKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEpCit7CisJcmV0dXJuIG5hICYmIG5h
LT5uYV9mbGFncyAmIE5BRl9QVE5FVE1BUF9IT1NUOworfQorI2Vsc2UgLyogIVdJVEhfUFRORVRN
QVBfSE9TVCAqLworI2RlZmluZSBuZXRtYXBfZ2V0X3B0X2hvc3RfbmEobm1yLCBfMiwgXzMpIFwK
KwkoKG5tciktPm5yX2ZsYWdzICYgKE5SX1BUTkVUTUFQX0hPU1QpID8gRU9QTk9UU1VQUCA6IDAp
CisjZGVmaW5lIHB0bmV0bWFwX2N0bChfMSwgXzIpICAgRUlOVkFMCisjZGVmaW5lIG5tX3B0bmV0
bWFwX2hvc3Rfb24oXzEpICAgRUlOVkFMCisjZW5kaWYgLyogIVdJVEhfUFRORVRNQVBfSE9TVCAq
LworCisjaWZkZWYgV0lUSF9QVE5FVE1BUF9HVUVTVAorLyogcHRuZXRtYXAgR1VFU1Qgcm91dGlu
ZXMgKi8KKworLyoKKyAqIG5ldG1hcCBhZGFwdGVyIGZvciBndWVzdCBwdG5ldG1hcCBwb3J0cwor
ICovCitzdHJ1Y3QgbmV0bWFwX3B0X2d1ZXN0X2FkYXB0ZXIgeworICAgICAgICAvKiBUaGUgbmV0
bWFwIGFkYXB0ZXIgdG8gYmUgdXNlZCBieSBuZXRtYXAgYXBwbGljYXRpb25zLgorCSAqIFRoaXMg
ZmllbGQgbXVzdCBiZSB0aGUgZmlyc3QsIHRvIGFsbG93IHVwY2FzdC4gKi8KKwlzdHJ1Y3QgbmV0
bWFwX2h3X2FkYXB0ZXIgaHd1cDsKKworICAgICAgICAvKiBUaGUgbmV0bWFwIGFkYXB0ZXIgdG8g
YmUgdXNlZCBieSB0aGUgZHJpdmVyLiAqLworICAgICAgICBzdHJ1Y3QgbmV0bWFwX2h3X2FkYXB0
ZXIgZHI7CisKKwl2b2lkICpjc2I7CisKKwkvKiBSZWZlcmVuY2UgY291bnRlciB0byB0cmFjayB1
c2VycyBvZiBiYWNrZW5kIG5ldG1hcCBwb3J0OiB0aGUKKwkgKiBuZXR3b3JrIHN0YWNrIGFuZCBu
ZXRtYXAgY2xpZW50cy4KKwkgKiBVc2VkIHRvIGRlY2lkZSB3aGVuIHdlIG5lZWQgKGRlKWFsbG9j
YXRlIGtyaW5ncy9yaW5ncyBhbmQKKwkgKiBzdGFydCAoc3RvcCkgcHRuZXRtYXAga3RocmVhZHMu
ICovCisJaW50IGJhY2tlbmRfcmVnaWZzOworCit9OworCitpbnQgbmV0bWFwX3B0X2d1ZXN0X2F0
dGFjaChzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCB2b2lkICpjc2IsCisJCQkgICB1bnNpZ25l
ZCBpbnQgbmlmcF9vZmZzZXQsIHVuc2lnbmVkIGludCBtZW1pZCk7CitzdHJ1Y3QgcHRuZXRfcmlu
ZzsKK2Jvb2wgbmV0bWFwX3B0X2d1ZXN0X3R4c3luYyhzdHJ1Y3QgcHRuZXRfcmluZyAqcHRyaW5n
LCBzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywKKwkJCSAgICBpbnQgZmxhZ3MpOworYm9vbCBu
ZXRtYXBfcHRfZ3Vlc3RfcnhzeW5jKHN0cnVjdCBwdG5ldF9yaW5nICpwdHJpbmcsIHN0cnVjdCBu
ZXRtYXBfa3JpbmcgKmtyaW5nLAorCQkJICAgIGludCBmbGFncyk7CitpbnQgcHRuZXRfbm1fa3Jp
bmdzX2NyZWF0ZShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKTsKK3ZvaWQgcHRuZXRfbm1fa3Jp
bmdzX2RlbGV0ZShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKTsKK3ZvaWQgcHRuZXRfbm1fZHRv
cihzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKTsKKyNlbmRpZiAvKiBXSVRIX1BUTkVUTUFQX0dV
RVNUICovCiAKICNlbmRpZiAvKiBfTkVUX05FVE1BUF9LRVJOX0hfICovCmRpZmYgLXUgLXIgLU4g
dXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfbWJxLmMgL3Vzci9zcmMvc3lzL2Rldi9uZXRt
YXAvbmV0bWFwX21icS5jCi0tLSB1c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9tYnEuYwky
MDE2LTA5LTI5IDAwOjI0OjQ3LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9u
ZXRtYXAvbmV0bWFwX21icS5jCTIwMTYtMTEtMjMgMTY6NTc6NTcuODUwOTQ1MDAwICswMDAwCkBA
IC0xLDUgKzEsNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IFZpbmNlbnpvIE1h
ZmZpb25lLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQg
VmluY2Vuem8gTWFmZmlvbmUKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDEyICsyNSwxNCBAQAogICovCiAKIC8qCi0gKiAkRnJl
ZUJTRDogcmVsZW5nLzExLjAvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21icS5jIDI2NzE3NyAyMDE0
LTA2LTA2IDE4OjAyOjMyWiBsdWlnaSAkCisgKiAkRnJlZUJTRCQKICAqLwogCiAKICNpZmRlZiBs
aW51eAogI2luY2x1ZGUgImJzZF9nbHVlLmgiCisjZWxpZiBkZWZpbmVkIChfV0lOMzIpCisjaW5j
bHVkZSAid2luX2dsdWUuaCIKICNlbHNlICAgLyogX19GcmVlQlNEX18gKi8KICNpbmNsdWRlIDxz
eXMvcGFyYW0uaD4KICNpbmNsdWRlIDxzeXMvbG9jay5oPgpAQCAtMTUyLDEyICsxNTUsMTIgQEAK
IH0KIAogCi12b2lkIG1icV9zYWZlX2Rlc3Ryb3koc3RydWN0IG1icSAqcSkKK3ZvaWQgbWJxX3Nh
ZmVfZmluaShzdHJ1Y3QgbWJxICpxKQogewogICAgIG10eF9kZXN0cm95KCZxLT5sb2NrKTsKIH0K
IAogCi12b2lkIG1icV9kZXN0cm95KHN0cnVjdCBtYnEgKnEpCit2b2lkIG1icV9maW5pKHN0cnVj
dCBtYnEgKnEpCiB7CiB9CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRt
YXBfbWJxLmggL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21icS5oCi0tLSB1c3Ivc3Jj
L3N5cy9kZXYvbmV0bWFwL25ldG1hcF9tYnEuaAkyMDE2LTA5LTI5IDAwOjI0OjQ3LjAwMDAwMDAw
MCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21icS5oCTIwMTYtMTEt
MjMgMTY6NTc6NTcuODUxMjQ1MDAwICswMDAwCkBAIC0xLDUgKzEsNiBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE0IFZpbmNlbnpvIE1hZmZpb25lLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgVmluY2Vuem8gTWFmZmlvbmUKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDcg
KzI1LDcgQEAKICAqLwogCiAvKgotICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9kZXYvbmV0
bWFwL25ldG1hcF9tYnEuaCAyNzAwNjMgMjAxNC0wOC0xNiAxNTowMDowMVogbHVpZ2kgJAorICog
JEZyZWVCU0QkCiAgKi8KIAogCkBAIC00MCw2ICs0MSw4IEBACiAvKiBYWFggcHJvYmFibHkgcmVs
eSBvbiBhIHByZXZpb3VzIGRlZmluaXRpb24gb2YgU1BJTkxPQ0tfVCAqLwogI2lmZGVmIGxpbnV4
CiAjZGVmaW5lIFNQSU5MT0NLX1QgIHNhZmVfc3BpbmxvY2tfdAorI2VsaWYgZGVmaW5lZCAoX1dJ
TjMyKQorI2RlZmluZSBTUElOTE9DS19UIAl3aW5fc3BpbmxvY2tfdAogI2Vsc2UKICNkZWZpbmUg
U1BJTkxPQ0tfVCAgc3RydWN0IG10eAogI2VuZGlmCkBAIC01MiwxNiArNTUsMjEgQEAKICAgICBT
UElOTE9DS19UIGxvY2s7CiB9OwogCi0vKiBYWFggImRlc3Ryb3kiIGRvZXMgbm90IG1hdGNoICJp
bml0IiBhcyBhIG5hbWUuCi0gKiBXZSBzaG91bGQgYWxzbyBjbGFyaWZ5IHdoZXRoZXIgaW5pdCBj
YW4gYmUgdXNlZCB3aGlsZQorLyogV2Ugc2hvdWxkIGNsYXJpZnkgd2hldGhlciBpbml0IGNhbiBi
ZSB1c2VkIHdoaWxlCiAgKiBob2xkaW5nIGEgbG9jaywgYW5kIHdoZXRoZXIgbWJxX3NhZmVfZGVz
dHJveSgpIGlzIGEgTk9QLgogICovCiB2b2lkIG1icV9pbml0KHN0cnVjdCBtYnEgKnEpOwotdm9p
ZCBtYnFfZGVzdHJveShzdHJ1Y3QgbWJxICpxKTsKK3ZvaWQgbWJxX2Zpbmkoc3RydWN0IG1icSAq
cSk7CiB2b2lkIG1icV9lbnF1ZXVlKHN0cnVjdCBtYnEgKnEsIHN0cnVjdCBtYnVmICptKTsKIHN0
cnVjdCBtYnVmICptYnFfZGVxdWV1ZShzdHJ1Y3QgbWJxICpxKTsKIHZvaWQgbWJxX3B1cmdlKHN0
cnVjdCBtYnEgKnEpOwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtYnVmICoKK21icV9wZWVrKHN0
cnVjdCBtYnEgKnEpCit7CisJcmV0dXJuIHEtPmhlYWQgPyBxLT5oZWFkIDogTlVMTDsKK30KKwog
c3RhdGljIGlubGluZSB2b2lkCiBtYnFfbG9jayhzdHJ1Y3QgbWJxICpxKQogewpAQCAtNzYsNyAr
ODQsNyBAQAogCiAKIHZvaWQgbWJxX3NhZmVfaW5pdChzdHJ1Y3QgbWJxICpxKTsKLXZvaWQgbWJx
X3NhZmVfZGVzdHJveShzdHJ1Y3QgbWJxICpxKTsKK3ZvaWQgbWJxX3NhZmVfZmluaShzdHJ1Y3Qg
bWJxICpxKTsKIHZvaWQgbWJxX3NhZmVfZW5xdWV1ZShzdHJ1Y3QgbWJxICpxLCBzdHJ1Y3QgbWJ1
ZiAqbSk7CiBzdHJ1Y3QgbWJ1ZiAqbWJxX3NhZmVfZGVxdWV1ZShzdHJ1Y3QgbWJxICpxKTsKIHZv
aWQgbWJxX3NhZmVfcHVyZ2Uoc3RydWN0IG1icSAqcSk7CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9z
eXMvZGV2L25ldG1hcC9uZXRtYXBfbWVtMi5jIC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1h
cF9tZW0yLmMKLS0tIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIuYwkyMDE2LTA5
LTI5IDAwOjI0OjQ3LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAv
bmV0bWFwX21lbTIuYwkyMDE2LTExLTIzIDE2OjU3OjU3Ljg1MjE0NDAwMCArMDAwMApAQCAtMSw1
ICsxLDggQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBNYXR0ZW8gTGFuZGksIEx1
aWdpIFJpenpvLCBHaXVzZXBwZSBMZXR0aWVyaS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDE0IE1hdHRlbyBMYW5kaQorICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTYgTHVpZ2kgUml6em8KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEdpdXNlcHBlIExl
dHRpZXJpCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMywxMCArMzYsMTEgQEAKIAogI2lmZGVmIF9fRnJlZUJTRF9fCiAjaW5jbHVk
ZSA8c3lzL2NkZWZzLmg+IC8qIHByZXJlcXVpc2l0ZSAqLwotX19GQlNESUQoIiRGcmVlQlNEOiBy
ZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9uZXRtYXBfbWVtMi5jIDI4NTM0OSAyMDE1LTA3LTEw
IDA1OjUxOjM2WiBsdWlnaSAkIik7CitfX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL2Rldi9u
ZXRtYXAvbmV0bWFwLmMgMjQxNzIzIDIwMTItMTAtMTkgMDk6NDE6NDVaIGdsZWJpdXMgJCIpOwog
CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1
ZGUgPHN5cy9rZXJuZWwuaD4JCS8qIE1BTExPQ19ERUZJTkUgKi8KICNpbmNsdWRlIDxzeXMvcHJv
Yy5oPgogI2luY2x1ZGUgPHZtL3ZtLmg+CS8qIHZ0b3BoeXMgKi8KICNpbmNsdWRlIDx2bS9wbWFw
Lmg+CS8qIHZ0b3BoeXMgKi8KQEAgLTQ4LDEzICs1MiwyNiBAQAogI2luY2x1ZGUgPG5ldC92bmV0
Lmg+CiAjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4JLyogYnVzX2RtYW1hcF8qICovCiAKKy8qIE1f
TkVUTUFQIG9ubHkgdXNlZCBpbiBoZXJlICovCitNQUxMT0NfREVDTEFSRShNX05FVE1BUCk7CitN
QUxMT0NfREVGSU5FKE1fTkVUTUFQLCAibmV0bWFwIiwgIk5ldHdvcmsgbWVtb3J5IG1hcCIpOwor
CiAjZW5kaWYgLyogX19GcmVlQlNEX18gKi8KIAorI2lmZGVmIF9XSU4zMgorI2luY2x1ZGUgPHdp
bl9nbHVlLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPG5ldC9uZXRtYXAuaD4KICNpbmNsdWRlIDxk
ZXYvbmV0bWFwL25ldG1hcF9rZXJuLmg+CisjaW5jbHVkZSA8bmV0L25ldG1hcF92aXJ0Lmg+CiAj
aW5jbHVkZSAibmV0bWFwX21lbTIuaCIKIAotI2RlZmluZSBORVRNQVBfQlVGX01BWF9OVU0JMjAq
NDA5NioyCS8qIGxhcmdlIG1hY2hpbmUgKi8KKyNpZmRlZiBfV0lOMzJfVVNFX1NNQUxMX0dFTkVS
SUNfREVWSUNFU19NRU1PUlkKKyNkZWZpbmUgTkVUTUFQX0JVRl9NQVhfTlVNICA4KjQwOTYgICAg
ICAvKiBpZiB0b28gYmlnIHRha2VzIHRvbyBtdWNoIHRpbWUgdG8gYWxsb2NhdGUgKi8KKyNlbHNl
CisjZGVmaW5lIE5FVE1BUF9CVUZfTUFYX05VTSAyMCo0MDk2KjIJLyogbGFyZ2UgbWFjaGluZSAq
LworI2VuZGlmCiAKICNkZWZpbmUgTkVUTUFQX1BPT0xfTUFYX05BTVNaCTMyCiAKQEAgLTcwLDYg
Kzg3LDkgQEAKIHN0cnVjdCBuZXRtYXBfb2JqX3BhcmFtcyB7CiAJdV9pbnQgc2l6ZTsKIAl1X2lu
dCBudW07CisKKwl1X2ludCBsYXN0X3NpemU7CisJdV9pbnQgbGFzdF9udW07CiB9OwogCiBzdHJ1
Y3QgbmV0bWFwX29ial9wb29sIHsKQEAgLTExMSw3ICsxMzEsNyBAQAogCiAKIHN0cnVjdCBuZXRt
YXBfbWVtX29wcyB7Ci0Jdm9pZCAoKm5tZF9nZXRfbHV0KShzdHJ1Y3QgbmV0bWFwX21lbV9kICos
IHN0cnVjdCBuZXRtYXBfbHV0Kik7CisJaW50ICgqbm1kX2dldF9sdXQpKHN0cnVjdCBuZXRtYXBf
bWVtX2QgKiwgc3RydWN0IG5ldG1hcF9sdXQqKTsKIAlpbnQgICgqbm1kX2dldF9pbmZvKShzdHJ1
Y3QgbmV0bWFwX21lbV9kICosIHVfaW50ICpzaXplLAogCQkJdV9pbnQgKm1lbWZsYWdzLCB1aW50
MTZfdCAqaWQpOwogCkBAIC0xMjgsMTQgKzE0OCwxMyBAQAogCXZvaWQgKCpubWRfcmluZ3NfZGVs
ZXRlKShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKik7CiB9OwogCi10eXBlZGVmIHVpbnQxNl90IG5t
X21lbWlkX3Q7Ci0KIHN0cnVjdCBuZXRtYXBfbWVtX2QgewogCU5NQV9MT0NLX1Qgbm1fbXR4OyAg
LyogcHJvdGVjdCB0aGUgYWxsb2NhdG9yICovCiAJdV9pbnQgbm1fdG90YWxzaXplOyAvKiBzaG9y
dGhhbmQgKi8KIAogCXVfaW50IGZsYWdzOwogI2RlZmluZSBORVRNQVBfTUVNX0ZJTkFMSVpFRAkw
eDEJLyogcHJlYWxsb2NhdGlvbiBkb25lICovCisjZGVmaW5lIE5FVE1BUF9NRU1fSElEREVOCTB4
OAkvKiBiZWVpbmcgcHJlcGFyZWQgKi8KIAlpbnQgbGFzdGVycjsJCS8qIGxhc3QgZXJyb3IgZm9y
IGN1cnIgY29uZmlnICovCiAJaW50IGFjdGl2ZTsJCS8qIGFjdGl2ZSB1c2VycyAqLwogCWludCBy
ZWZjb3VudDsKQEAgLTE0OSw4ICsxNjgsMTYgQEAKIAlzdHJ1Y3QgbmV0bWFwX21lbV9kICpwcmV2
LCAqbmV4dDsKIAogCXN0cnVjdCBuZXRtYXBfbWVtX29wcyAqb3BzOworCisJc3RydWN0IG5ldG1h
cF9vYmpfcGFyYW1zIHBhcmFtc1tORVRNQVBfUE9PTFNfTlJdOworCisjZGVmaW5lIE5NX01FTV9O
QU1FU1oJMTYKKwljaGFyIG5hbWVbTk1fTUVNX05BTUVTWl07CiB9OwogCisvKgorICogWFhYIG5l
ZWQgdG8gZml4IHRoZSBjYXNlIG9mIHQwID09IHZvaWQKKyAqLwogI2RlZmluZSBOTURfREVGQ0Io
dDAsIG5hbWUpIFwKIHQwIFwKIG5ldG1hcF9tZW1fIyNuYW1lKHN0cnVjdCBuZXRtYXBfbWVtX2Qg
Km5tZCkgXApAQCAtMTg2LDcgKzIxMyw3IEBACiAJcmV0dXJuIG5hLT5ubV9tZW0tPm9wcy0+bm1k
XyMjbmFtZShuYSwgYTEpOyBcCiB9CiAKLU5NRF9ERUZDQjEodm9pZCwgZ2V0X2x1dCwgc3RydWN0
IG5ldG1hcF9sdXQgKik7CitOTURfREVGQ0IxKGludCwgZ2V0X2x1dCwgc3RydWN0IG5ldG1hcF9s
dXQgKik7CiBOTURfREVGQ0IzKGludCwgZ2V0X2luZm8sIHVfaW50ICosIHVfaW50ICosIHVpbnQx
Nl90ICopOwogTk1EX0RFRkNCMSh2bV9wYWRkcl90LCBvZnN0b3BoeXMsIHZtX29vZmZzZXRfdCk7
CiBzdGF0aWMgaW50IG5ldG1hcF9tZW1fY29uZmlnKHN0cnVjdCBuZXRtYXBfbWVtX2QgKik7CkBA
IC0yMDIsNiArMjI5LDEzIEBACiBzdGF0aWMgaW50IG5ldG1hcF9tZW1fbWFwKHN0cnVjdCBuZXRt
YXBfb2JqX3Bvb2wgKiwgc3RydWN0IG5ldG1hcF9hZGFwdGVyICopOwogc3RhdGljIGludCBuZXRt
YXBfbWVtX3VubWFwKHN0cnVjdCBuZXRtYXBfb2JqX3Bvb2wgKiwgc3RydWN0IG5ldG1hcF9hZGFw
dGVyICopOwogc3RhdGljIGludCBubV9tZW1fYXNzaWduX2dyb3VwKHN0cnVjdCBuZXRtYXBfbWVt
X2QgKiwgc3RydWN0IGRldmljZSAqKTsKK3N0YXRpYyB2b2lkIG5tX21lbV9yZWxlYXNlX2lkKHN0
cnVjdCBuZXRtYXBfbWVtX2QgKik7CisKK25tX21lbWlkX3QKK25ldG1hcF9tZW1fZ2V0X2lkKHN0
cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCkKK3sKKwlyZXR1cm4gbm1kLT5ubV9pZDsKK30KIAogI2Rl
ZmluZSBOTUFfTE9DS19JTklUKG4pCU5NX01UWF9JTklUKChuKS0+bm1fbXR4KQogI2RlZmluZSBO
TUFfTE9DS19ERVNUUk9ZKG4pCU5NX01UWF9ERVNUUk9ZKChuKS0+bm1fbXR4KQpAQCAtMjE1LDI5
ICsyNDksMzAgQEAKICNkZWZpbmUgTk1fREJHX1JFRkMobm1kLCBmdW5jLCBsaW5lKQogI2VuZGlm
CiAKLSNpZmRlZiBOTV9ERUJVR19NRU1fUFVUR0VUCi12b2lkIF9fbmV0bWFwX21lbV9nZXQoc3Ry
dWN0IG5ldG1hcF9tZW1fZCAqbm1kLCBjb25zdCBjaGFyICpmdW5jLCBpbnQgbGluZSkKLSNlbHNl
Ci12b2lkIG5ldG1hcF9tZW1fZ2V0KHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCkKLSNlbmRpZgor
LyogY2lyY3VsYXIgbGlzdCBvZiBhbGwgZXhpc3RpbmcgYWxsb2NhdG9ycyAqLworc3RhdGljIHN0
cnVjdCBuZXRtYXBfbWVtX2QgKm5ldG1hcF9sYXN0X21lbV9kID0gJm5tX21lbTsKK05NX01UWF9U
IG5tX21lbV9saXN0X2xvY2s7CisKK3N0cnVjdCBuZXRtYXBfbWVtX2QgKgorbmV0bWFwX21lbV9n
ZXQoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kKQogewotCU5NQV9MT0NLKG5tZCk7CisJTk1fTVRY
X0xPQ0sobm1fbWVtX2xpc3RfbG9jayk7CiAJbm1kLT5yZWZjb3VudCsrOwogCU5NX0RCR19SRUZD
KG5tZCwgZnVuYywgbGluZSk7Ci0JTk1BX1VOTE9DSyhubWQpOworCU5NX01UWF9VTkxPQ0sobm1f
bWVtX2xpc3RfbG9jayk7CisJcmV0dXJuIG5tZDsKIH0KIAotI2lmZGVmIE5NX0RFQlVHX01FTV9Q
VVRHRVQKLXZvaWQgX19uZXRtYXBfbWVtX3B1dChzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQsIGNv
bnN0IGNoYXIgKmZ1bmMsIGludCBsaW5lKQotI2Vsc2UKLXZvaWQgbmV0bWFwX21lbV9wdXQoc3Ry
dWN0IG5ldG1hcF9tZW1fZCAqbm1kKQotI2VuZGlmCit2b2lkCituZXRtYXBfbWVtX3B1dChzdHJ1
Y3QgbmV0bWFwX21lbV9kICpubWQpCiB7CiAJaW50IGxhc3Q7Ci0JTk1BX0xPQ0sobm1kKTsKKwlO
TV9NVFhfTE9DSyhubV9tZW1fbGlzdF9sb2NrKTsKIAlsYXN0ID0gKC0tbm1kLT5yZWZjb3VudCA9
PSAwKTsKKwlpZiAobGFzdCkKKwkJbm1fbWVtX3JlbGVhc2VfaWQobm1kKTsKIAlOTV9EQkdfUkVG
QyhubWQsIGZ1bmMsIGxpbmUpOwotCU5NQV9VTkxPQ0sobm1kKTsKKwlOTV9NVFhfVU5MT0NLKG5t
X21lbV9saXN0X2xvY2spOwogCWlmIChsYXN0KQogCQluZXRtYXBfbWVtX2RlbGV0ZShubWQpOwog
fQpAQCAtMjQ4LDcgKzI4Myw5IEBACiAJaWYgKG5tX21lbV9hc3NpZ25fZ3JvdXAobm1kLCBuYS0+
cGRldikgPCAwKSB7CiAJCXJldHVybiBFTk9NRU07CiAJfSBlbHNlIHsKLQkJbm1kLT5vcHMtPm5t
ZF9maW5hbGl6ZShubWQpOworCQlOTUFfTE9DSyhubWQpOworCQlubWQtPmxhc3RlcnIgPSBubWQt
Pm9wcy0+bm1kX2ZpbmFsaXplKG5tZCk7CisJCU5NQV9VTkxPQ0sobm1kKTsKIAl9CiAKIAlpZiAo
IW5tZC0+bGFzdGVyciAmJiBuYS0+cGRldikKQEAgLTI2MiwyMSArMjk5LDcyIEBACiB7CiAJTk1B
X0xPQ0sobm1kKTsKIAluZXRtYXBfbWVtX3VubWFwKCZubWQtPnBvb2xzW05FVE1BUF9CVUZfUE9P
TF0sIG5hKTsKKwlpZiAobm1kLT5hY3RpdmUgPT0gMSkgeworCQl1X2ludCBpOworCisJCS8qCisJ
CSAqIFJlc2V0IHRoZSBhbGxvY2F0b3Igd2hlbiBpdCBmYWxscyBvdXQgb2YgdXNlIHNvIHRoYXQg
YW55CisJCSAqIHBvb2wgcmVzb3VyY2VzIGxlYWtlZCBieSB1bmNsZWFuIGFwcGxpY2F0aW9uIGV4
aXRzIGFyZQorCQkgKiByZWNsYWltZWQuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgTkVUTUFQ
X1BPT0xTX05SOyBpKyspIHsKKwkJCXN0cnVjdCBuZXRtYXBfb2JqX3Bvb2wgKnA7CisJCQl1X2lu
dCBqOworCisJCQlwID0gJm5tZC0+cG9vbHNbaV07CisJCQlwLT5vYmpmcmVlID0gcC0+b2JqdG90
YWw7CisJCQkvKgorCQkJICogUmVwcm9kdWNlIHRoZSBuZXQgZWZmZWN0IG9mIHRoZSBNX1pFUk8g
bWFsbG9jKCkKKwkJCSAqIGFuZCBtYXJraW5nIG9mIGZyZWUgZW50cmllcyBpbiB0aGUgYml0bWFw
IHRoYXQKKwkJCSAqIG9jY3VyIGluIGZpbmFsaXplX29ial9hbGxvY2F0b3IoKQorCQkJICovCisJ
CQltZW1zZXQocC0+Yml0bWFwLAorCQkJICAgICdcMCcsCisJCQkgICAgc2l6ZW9mKHVpbnQzMl90
KSAqICgocC0+b2JqdG90YWwgKyAzMSkgLyAzMikpOworCisJCQkvKgorCQkJICogU2V0IGFsbCB0
aGUgYml0cyBpbiB0aGUgYml0bWFwIHRoYXQgaGF2ZQorCQkJICogY29ycmVzcG9uZGluZyBidWZm
ZXJzIHRvIDEgdG8gaW5kaWNhdGUgdGhleSBhcmUKKwkJCSAqIGZyZWUuCisJCQkgKi8KKwkJCWZv
ciAoaiA9IDA7IGogPCBwLT5vYmp0b3RhbDsgaisrKSB7CisJCQkJaWYgKHAtPmx1dFtqXS52YWRk
ciAhPSBOVUxMKSB7CisJCQkJCXAtPmJpdG1hcFsgKGo+PjUpIF0gfD0gICggMSA8PCAoaiAmIDMx
KSApOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIFBlciBuZXRtYXBfbWVtX2ZpbmFs
aXplX2FsbCgpLAorCQkgKiBidWZmZXJzIDAgYW5kIDEgYXJlIHJlc2VydmVkCisJCSAqLworCQlu
bWQtPnBvb2xzW05FVE1BUF9CVUZfUE9PTF0ub2JqZnJlZSAtPSAyOworCQlpZiAobm1kLT5wb29s
c1tORVRNQVBfQlVGX1BPT0xdLmJpdG1hcCkgeworCQkJLyogWFhYIFRoaXMgY2hlY2sgaXMgYSB3
b3JrYXJvdW5kIHRoYXQgcHJldmVudHMgYQorCQkJICogTlVMTCBwb2ludGVyIGNyYXNoIHdoaWNo
IGN1cnJlbnRseSBoYXBwZW5zIG9ubHkKKwkJCSAqIHdpdGggcHRuZXRtYXAgZ3Vlc3RzLgorCQkJ
ICogUmVtb3ZlZCBzaGFyZWQtaW5mbyAtLT4gaXMgdGhlIGJ1ZyBzdGlsbCB0aGVyZT8gKi8KKwkJ
CW5tZC0+cG9vbHNbTkVUTUFQX0JVRl9QT09MXS5iaXRtYXBbMF0gPSB+MzsKKwkJfQorCX0KKwlu
bWQtPm9wcy0+bm1kX2RlcmVmKG5tZCk7CisKIAlOTUFfVU5MT0NLKG5tZCk7Ci0JcmV0dXJuIG5t
ZC0+b3BzLT5ubWRfZGVyZWYobm1kKTsKIH0KIAogCiAvKiBhY2Nlc3NvciBmdW5jdGlvbnMgKi8K
LXN0YXRpYyB2b2lkCitzdGF0aWMgaW50CiBuZXRtYXBfbWVtMl9nZXRfbHV0KHN0cnVjdCBuZXRt
YXBfbWVtX2QgKm5tZCwgc3RydWN0IG5ldG1hcF9sdXQgKmx1dCkKIHsKIAlsdXQtPmx1dCA9IG5t
ZC0+cG9vbHNbTkVUTUFQX0JVRl9QT09MXS5sdXQ7CiAJbHV0LT5vYmp0b3RhbCA9IG5tZC0+cG9v
bHNbTkVUTUFQX0JVRl9QT09MXS5vYmp0b3RhbDsKIAlsdXQtPm9ianNpemUgPSBubWQtPnBvb2xz
W05FVE1BUF9CVUZfUE9PTF0uX29ianNpemU7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RydWN0IG5l
dG1hcF9vYmpfcGFyYW1zIG5ldG1hcF9wYXJhbXNbTkVUTUFQX1BPT0xTX05SXSA9IHsKK3N0YXRp
YyBzdHJ1Y3QgbmV0bWFwX29ial9wYXJhbXMgbmV0bWFwX3BhcmFtc1tORVRNQVBfUE9PTFNfTlJd
ID0gewogCVtORVRNQVBfSUZfUE9PTF0gPSB7CiAJCS5zaXplID0gMTAyNCwKIAkJLm51bSAgPSAx
MDAsCkBAIC0yOTEsMTAgKzM3OSwxMCBAQAogCX0sCiB9OwogCi1zdHJ1Y3QgbmV0bWFwX29ial9w
YXJhbXMgbmV0bWFwX21pbl9wcml2X3BhcmFtc1tORVRNQVBfUE9PTFNfTlJdID0geworc3RhdGlj
IHN0cnVjdCBuZXRtYXBfb2JqX3BhcmFtcyBuZXRtYXBfbWluX3ByaXZfcGFyYW1zW05FVE1BUF9Q
T09MU19OUl0gPSB7CiAJW05FVE1BUF9JRl9QT09MXSA9IHsKIAkJLnNpemUgPSAxMDI0LAotCQku
bnVtICA9IDEsCisJCS5udW0gID0gMiwKIAl9LAogCVtORVRNQVBfUklOR19QT09MXSA9IHsKIAkJ
LnNpemUgPSA1KlBBR0VfU0laRSwKQEAgLTMzOCwyMSArNDI2LDM3IEBACiAJCX0sCiAJfSwKIAor
CS5wYXJhbXMgPSB7CisJCVtORVRNQVBfSUZfUE9PTF0gPSB7CisJCQkuc2l6ZSA9IDEwMjQsCisJ
CQkubnVtICA9IDEwMCwKKwkJfSwKKwkJW05FVE1BUF9SSU5HX1BPT0xdID0geworCQkJLnNpemUg
PSA5KlBBR0VfU0laRSwKKwkJCS5udW0gID0gMjAwLAorCQl9LAorCQlbTkVUTUFQX0JVRl9QT09M
XSA9IHsKKwkJCS5zaXplID0gMjA0OCwKKwkJCS5udW0gID0gTkVUTUFQX0JVRl9NQVhfTlVNLAor
CQl9LAorCX0sCisKIAkubm1faWQgPSAxLAogCS5ubV9ncnAgPSAtMSwKIAogCS5wcmV2ID0gJm5t
X21lbSwKIAkubmV4dCA9ICZubV9tZW0sCiAKLQkub3BzID0gJm5ldG1hcF9tZW1fZ2xvYmFsX29w
cwotfTsKKwkub3BzID0gJm5ldG1hcF9tZW1fZ2xvYmFsX29wcywKIAorCS5uYW1lID0gIjEiCit9
OwogCi1zdHJ1Y3QgbmV0bWFwX21lbV9kICpuZXRtYXBfbGFzdF9tZW1fZCA9ICZubV9tZW07CiAK
IC8qIGJsdWVwcmludCBmb3IgdGhlIHByaXZhdGUgbWVtb3J5IGFsbG9jYXRvcnMgKi8KIGV4dGVy
biBzdHJ1Y3QgbmV0bWFwX21lbV9vcHMgbmV0bWFwX21lbV9wcml2YXRlX29wczsgLyogZm9yd2Fy
ZCAqLwotY29uc3Qgc3RydWN0IG5ldG1hcF9tZW1fZCBubV9ibHVlcHJpbnQgPSB7CisvKiBYWFgg
Y2xhbmcgaXMgbm90IGhhcHB5IGFib3V0IHVzaW5nIG5hbWUgYXMgYSBwcmludCBmb3JtYXQgKi8K
K3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bWFwX21lbV9kIG5tX2JsdWVwcmludCA9IHsKIAkucG9v
bHMgPSB7CiAJCVtORVRNQVBfSUZfUE9PTF0gPSB7CiAJCQkubmFtZSAJPSAiJXNfaWYiLApAQCAt
Mzc3LDkgKzQ4MSwxMSBAQAogCQl9LAogCX0sCiAKKwkubm1fZ3JwID0gLTEsCisKIAkuZmxhZ3Mg
PSBORVRNQVBfTUVNX1BSSVZBVEUsCiAKLQkub3BzID0gJm5ldG1hcF9tZW1fcHJpdmF0ZV9vcHMK
Kwkub3BzID0gJm5ldG1hcF9tZW1fZ2xvYmFsX29wcywKIH07CiAKIC8qIG1lbW9yeSBhbGxvY2F0
b3IgcmVsYXRlZCBzeXNjdGxzICovCkBAIC0zODgsNiArNDk0LDcgQEAKIAogCiAjZGVmaW5lIERF
Q0xBUkVfU1lTQ1RMUyhpZCwgbmFtZSkgXAorCVNZU0JFR0lOKG1lbTJfICMjIG5hbWUpOyBcCiAJ
U1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIG5hbWUjI19zaXplLCBcCiAJICAgIENU
TEZMQUdfUlcsICZuZXRtYXBfcGFyYW1zW2lkXS5zaXplLCAwLCAiUmVxdWVzdGVkIHNpemUgb2Yg
bmV0bWFwICIgU1RSSU5HSUZZKG5hbWUpICJzIik7IFwKIAlTWVNDVExfSU5UKF9kZXZfbmV0bWFw
LCBPSURfQVVUTywgbmFtZSMjX2N1cnJfc2l6ZSwgXApAQCAtNDAxLDIyICs1MDgsMjIgQEAKIAkg
ICAgIkRlZmF1bHQgc2l6ZSBvZiBwcml2YXRlIG5ldG1hcCAiIFNUUklOR0lGWShuYW1lKSAicyIp
OyBcCiAJU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIHByaXZfIyNuYW1lIyNfbnVt
LCBcCiAJICAgIENUTEZMQUdfUlcsICZuZXRtYXBfbWluX3ByaXZfcGFyYW1zW2lkXS5udW0sIDAs
IFwKLQkgICAgIkRlZmF1bHQgbnVtYmVyIG9mIHByaXZhdGUgbmV0bWFwICIgU1RSSU5HSUZZKG5h
bWUpICJzIikKKwkgICAgIkRlZmF1bHQgbnVtYmVyIG9mIHByaXZhdGUgbmV0bWFwICIgU1RSSU5H
SUZZKG5hbWUpICJzIik7CVwKKwlTWVNFTkQKIAogU1lTQ1RMX0RFQ0woX2Rldl9uZXRtYXApOwog
REVDTEFSRV9TWVNDVExTKE5FVE1BUF9JRl9QT09MLCBpZik7CiBERUNMQVJFX1NZU0NUTFMoTkVU
TUFQX1JJTkdfUE9PTCwgcmluZyk7CiBERUNMQVJFX1NZU0NUTFMoTkVUTUFQX0JVRl9QT09MLCBi
dWYpOwogCisvKiBjYWxsIHdpdGggbm1fbWVtX2xpc3RfbG9jayBoZWxkICovCiBzdGF0aWMgaW50
Ci1ubV9tZW1fYXNzaWduX2lkKHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCkKK25tX21lbV9hc3Np
Z25faWRfbG9ja2VkKHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCkKIHsKIAlubV9tZW1pZF90IGlk
OwogCXN0cnVjdCBuZXRtYXBfbWVtX2QgKnNjYW4gPSBuZXRtYXBfbGFzdF9tZW1fZDsKIAlpbnQg
ZXJyb3IgPSBFTk9NRU07CiAKLQlOTUFfTE9DSygmbm1fbWVtKTsKLQogCWRvIHsKIAkJLyogd2Ug
cmVseSBvbiB1bnNpZ25lZCB3cmFwIGFyb3VuZCAqLwogCQlpZCA9IHNjYW4tPm5tX2lkICsgMTsK
QEAgLTQzMCwyMCArNTM3LDMyIEBACiAJCQlzY2FuLT5wcmV2LT5uZXh0ID0gbm1kOwogCQkJc2Nh
bi0+cHJldiA9IG5tZDsKIAkJCW5ldG1hcF9sYXN0X21lbV9kID0gbm1kOworCQkJbm1kLT5yZWZj
b3VudCA9IDE7CiAJCQllcnJvciA9IDA7CiAJCQlicmVhazsKIAkJfQogCX0gd2hpbGUgKHNjYW4g
IT0gbmV0bWFwX2xhc3RfbWVtX2QpOwogCi0JTk1BX1VOTE9DSygmbm1fbWVtKTsKIAlyZXR1cm4g
ZXJyb3I7CiB9CiAKKy8qIGNhbGwgd2l0aCBubV9tZW1fbGlzdF9sb2NrICpub3QqIGhlbGQgKi8K
K3N0YXRpYyBpbnQKK25tX21lbV9hc3NpZ25faWQoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kKQor
eworICAgICAgICBpbnQgcmV0OworCisJTk1fTVRYX0xPQ0sobm1fbWVtX2xpc3RfbG9jayk7Cisg
ICAgICAgIHJldCA9IG5tX21lbV9hc3NpZ25faWRfbG9ja2VkKG5tZCk7CisJTk1fTVRYX1VOTE9D
SyhubV9tZW1fbGlzdF9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIGNhbGwgd2l0aCBu
bV9tZW1fbGlzdF9sb2NrIGhlbGQgKi8KIHN0YXRpYyB2b2lkCiBubV9tZW1fcmVsZWFzZV9pZChz
dHJ1Y3QgbmV0bWFwX21lbV9kICpubWQpCiB7Ci0JTk1BX0xPQ0soJm5tX21lbSk7Ci0KIAlubWQt
PnByZXYtPm5leHQgPSBubWQtPm5leHQ7CiAJbm1kLT5uZXh0LT5wcmV2ID0gbm1kLT5wcmV2Owog
CkBAIC00NTEsOCArNTcwLDI1IEBACiAJCW5ldG1hcF9sYXN0X21lbV9kID0gbm1kLT5wcmV2Owog
CiAJbm1kLT5wcmV2ID0gbm1kLT5uZXh0ID0gTlVMTDsKK30KKworc3RydWN0IG5ldG1hcF9tZW1f
ZCAqCituZXRtYXBfbWVtX2ZpbmQobm1fbWVtaWRfdCBpZCkKK3sKKwlzdHJ1Y3QgbmV0bWFwX21l
bV9kICpubWQ7CiAKLQlOTUFfVU5MT0NLKCZubV9tZW0pOworCU5NX01UWF9MT0NLKG5tX21lbV9s
aXN0X2xvY2spOworCW5tZCA9IG5ldG1hcF9sYXN0X21lbV9kOworCWRvIHsKKwkJaWYgKCEobm1k
LT5mbGFncyAmIE5FVE1BUF9NRU1fSElEREVOKSAmJiBubWQtPm5tX2lkID09IGlkKSB7CisJCQlu
bWQtPnJlZmNvdW50Kys7CisJCQlOTV9NVFhfVU5MT0NLKG5tX21lbV9saXN0X2xvY2spOworCQkJ
cmV0dXJuIG5tZDsKKwkJfQorCQlubWQgPSBubWQtPm5leHQ7CisJfSB3aGlsZSAobm1kICE9IG5l
dG1hcF9sYXN0X21lbV9kKTsKKwlOTV9NVFhfVU5MT0NLKG5tX21lbV9saXN0X2xvY2spOworCXJl
dHVybiBOVUxMOwogfQogCiBzdGF0aWMgaW50CkBAIC00OTQsOCArNjMwLDEzIEBACiAJCWlmIChv
ZmZzZXQgPj0gcFtpXS5tZW10b3RhbCkKIAkJCWNvbnRpbnVlOwogCQkvLyBub3cgbG9va3VwIHRo
ZSBjbHVzdGVyJ3MgYWRkcmVzcworI2lmbmRlZiBfV0lOMzIKIAkJcGEgPSB2dG9waHlzKHBbaV0u
bHV0W29mZnNldCAvIHBbaV0uX29ianNpemVdLnZhZGRyKSArCiAJCQlvZmZzZXQgJSBwW2ldLl9v
YmpzaXplOworI2Vsc2UKKwkJcGEgPSB2dG9waHlzKHBbaV0ubHV0W29mZnNldCAvIHBbaV0uX29i
anNpemVdLnZhZGRyKTsKKwkJcGEuUXVhZFBhcnQgKz0gb2Zmc2V0ICUgcFtpXS5fb2Jqc2l6ZTsK
KyNlbmRpZgogCQlOTUFfVU5MT0NLKG5tZCk7CiAJCXJldHVybiBwYTsKIAl9CkBAIC01MDgsNyAr
NjQ5LDExMCBAQAogCQkJKyBwW05FVE1BUF9SSU5HX1BPT0xdLm1lbXRvdGFsCiAJCQkrIHBbTkVU
TUFQX0JVRl9QT09MXS5tZW10b3RhbCk7CiAJTk1BX1VOTE9DSyhubWQpOworI2lmbmRlZiBfV0lO
MzIKIAlyZXR1cm4gMDsJLy8gWFhYIGJhZCBhZGRyZXNzCisjZWxzZQorCXZtX3BhZGRyX3QgcmVz
OworCXJlcy5RdWFkUGFydCA9IDA7CisJcmV0dXJuIHJlczsKKyNlbmRpZgorfQorCisjaWZkZWYg
X1dJTjMyCisKKy8qCisgKiB3aW4zMl9idWlsZF92aXJ0dWFsX21lbW9yeV9mb3JfdXNlcnNwYWNl
CisgKgorICogVGhpcyBmdW5jdGlvbiBnZXQgYWxsIHRoZSBvYmplY3QgbWFraW5nIHBhcnQgb2Yg
dGhlIHBvb2xzIGFuZCBtYXBzCisgKiBhIGNvbnRpZ3VvdXMgdmlydHVhbCBtZW1vcnkgc3BhY2Ug
Zm9yIHRoZSB1c2Vyc3BhY2UKKyAqIEl0IHdvcmtzIHRoaXMgd2F5CisgKiAxIC0gYWxsb2NhdGUg
YSBNZW1vcnkgRGVzY3JpcHRvciBMaXN0IHdpZGUgYXMgdGhlIHN1bQorICoJCW9mIHRoZSBtZW1v
cnkgbmVlZGVkIGZvciB0aGUgcG9vbHMKKyAqIDIgLSBjeWNsZSBhbGwgdGhlIG9iamVjdHMgaW4g
ZXZlcnkgcG9vbCBhbmQgZm9yIGV2ZXJ5IG9iamVjdCBkbworICoKKyAqCQkyYSAtIGN5Y2xlIGFs
bCB0aGUgb2JqZWN0cyBpbiBldmVyeSBwb29sLCBnZXQgdGhlIGxpc3QKKyAqCQkJCW9mIHRoZSBw
aHlzaWNhbCBhZGRyZXNzIGRlc2NyaXB0b3JzCisgKgkJMmIgLSBjYWxjdWxhdGUgdGhlIG9mZnNl
dCBpbiB0aGUgYXJyYXkgb2YgcGFnZXMgZGVzY2lwdG9yIGluIHRoZQorICoJCQkJbWFpbiBNREwK
KyAqCQkyYyAtIGNvcHkgdGhlIGRlc2NyaXB0b3JzIG9mIHRoZSBvYmplY3QgaW4gdGhlIG1haW4g
TURMCisgKgorICogMyAtIHJldHVybiB0aGUgcmVzdWx0aW5nIE1ETCB0aGF0IG5lZWRzIHRvIGJl
IG1hcHBlZCBpbiB1c2VybGFuZAorICoKKyAqIEluIHRoaXMgd2F5IHdlIHdpbGwgaGF2ZSBhbiBN
REwgdGhhdCBkZXNjcmliZXMgYWxsIHRoZSBtZW1vcnkgZm9yIHRoZQorICogb2JqZWN0cyBpbiBh
IHNpbmdsZSBvYmplY3QKKyovCisKK1BNREwKK3dpbjMyX2J1aWxkX3VzZXJfdm1fbWFwKHN0cnVj
dCBuZXRtYXBfbWVtX2QqIG5tZCkKK3sKKwlpbnQgaSwgajsKKwl1X2ludCBtZW1zaXplLCBtZW1m
bGFncywgb2ZzID0gMDsKKwlQTURMIG1haW5NZGwsIHRlbXBNZGw7CisKKwlpZiAobmV0bWFwX21l
bV9nZXRfaW5mbyhubWQsICZtZW1zaXplLCAmbWVtZmxhZ3MsIE5VTEwpKSB7CisJCUQoIm1lbW9y
eSBub3QgZmluYWxpc2VkIHlldCIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwltYWluTWRsID0g
SW9BbGxvY2F0ZU1kbChOVUxMLCBtZW1zaXplLCBGQUxTRSwgRkFMU0UsIE5VTEwpOworCWlmICht
YWluTWRsID09IE5VTEwpIHsKKwkJRCgiZmFpbGVkIHRvIGFsbG9jYXRlIG1kbCIpOworCQlyZXR1
cm4gTlVMTDsKKwl9CisKKwlOTUFfTE9DSyhubWQpOworCWZvciAoaSA9IDA7IGkgPCBORVRNQVBf
UE9PTFNfTlI7IGkrKykgeworCQlzdHJ1Y3QgbmV0bWFwX29ial9wb29sICpwID0gJm5tZC0+cG9v
bHNbaV07CisJCWludCBjbHN6ID0gcC0+X2NsdXN0c2l6ZTsKKwkJaW50IGNsb2JqcyA9IHAtPl9j
bHVzdGVudHJpZXM7IC8qIG9iamVjdHMgcGVyIGNsdXN0ZXIgKi8KKwkJaW50IG1kbF9sZW4gPSBz
aXplb2YoUEZOX05VTUJFUikgKiBCWVRFU19UT19QQUdFUyhjbHN6KTsKKwkJUFBGTl9OVU1CRVIg
cFNyYywgcERzdDsKKworCQkvKiBlYWNoIHBvb2wgaGFzIGEgZGlmZmVyZW50IGNsdXN0ZXIgc2l6
ZSBzbyB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUgKi8KKwkJdGVtcE1kbCA9IElvQWxsb2NhdGVNZGwo
cC0+bHV0WzBdLnZhZGRyLCBjbHN6LCBGQUxTRSwgRkFMU0UsIE5VTEwpOworCQlpZiAodGVtcE1k
bCA9PSBOVUxMKSB7CisJCQlOTUFfVU5MT0NLKG5tZCk7CisJCQlEKCJmYWlsIHRvIGFsbG9jYXRl
IHRlbXBNZGwiKTsKKwkJCUlvRnJlZU1kbChtYWluTWRsKTsKKwkJCXJldHVybiBOVUxMOworCQl9
CisJCXBTcmMgPSBNbUdldE1kbFBmbkFycmF5KHRlbXBNZGwpOworCQkvKiBjcmVhdGUgb25lIGVu
dHJ5IHBlciBjbHVzdGVyLCB0aGUgbHV0W10gaGFzIG9uZSBlbnRyeSBwZXIgb2JqZWN0ICovCisJ
CWZvciAoaiA9IDA7IGogPCBwLT5udW1jbHVzdGVyczsgaisrLCBvZnMgKz0gY2xzeikgeworCQkJ
cERzdCA9ICZNbUdldE1kbFBmbkFycmF5KG1haW5NZGwpW0JZVEVTX1RPX1BBR0VTKG9mcyldOwor
CQkJTW1Jbml0aWFsaXplTWRsKHRlbXBNZGwsIHAtPmx1dFtqKmNsb2Jqc10udmFkZHIsIGNsc3op
OworCQkJTW1CdWlsZE1kbEZvck5vblBhZ2VkUG9vbCh0ZW1wTWRsKTsgLyogY29tcHV0ZSBwaHlz
aWNhbCBwYWdlIGFkZHJlc3NlcyAqLworCQkJUnRsQ29weU1lbW9yeShwRHN0LCBwU3JjLCBtZGxf
bGVuKTsgLyogY29weSB0aGUgcGFnZSBkZXNjcmlwdG9ycyAqLworCQkJbWFpbk1kbC0+TWRsRmxh
Z3MgPSB0ZW1wTWRsLT5NZGxGbGFnczsgLyogWFhYIHdoYXQgaXMgaW4gaGVyZSA/ICovCisJCX0K
KwkJSW9GcmVlTWRsKHRlbXBNZGwpOworCX0KKwlOTUFfVU5MT0NLKG5tZCk7CisJcmV0dXJuIG1h
aW5NZGw7Cit9CisKKyNlbmRpZiAvKiBfV0lOMzIgKi8KKworLyoKKyAqIGhlbHBlciBmdW5jdGlv
biBmb3IgT1Mtc3BlY2lmaWMgbW1hcCByb3V0aW5lcyAoY3VycmVudGx5IG9ubHkgd2luZG93cyku
CisgKiBHaXZlbiBhbiBubWQgYW5kIGEgcG9vbCBpbmRleCwgcmV0dXJucyB0aGUgY2x1c3RlciBz
aXplIGFuZCBudW1iZXIgb2YgY2x1c3RlcnMuCisgKiBSZXR1cm5zIDAgaWYgbWVtb3J5IGlzIGZp
bmFsaXNlZCBhbmQgdGhlIHBvb2wgaXMgdmFsaWQsIG90aGVyd2lzZSAxLgorICogSXQgc2hvdWxk
IGJlIGNhbGxlZCB1bmRlciBOTUFfTE9DSyhubWQpIG90aGVyd2lzZSB0aGUgdW5kZXJseWluZyBp
bmZvIGNhbiBjaGFuZ2UuCisgKi8KKworaW50CituZXRtYXBfbWVtMl9nZXRfcG9vbF9pbmZvKHN0
cnVjdCBuZXRtYXBfbWVtX2QqIG5tZCwgdV9pbnQgcG9vbCwgdV9pbnQgKmNsdXN0c2l6ZSwgdV9p
bnQgKm51bWNsdXN0ZXJzKQoreworCWlmICghbm1kIHx8ICFjbHVzdHNpemUgfHwgIW51bWNsdXN0
ZXJzIHx8IHBvb2wgPj0gTkVUTUFQX1BPT0xTX05SKQorCQlyZXR1cm4gMTsgLyogaW52YWxpZCBh
cmd1bWVudHMgKi8KKwkvLyBOTUFfTE9DS19BU1NFUlQobm1kKTsKKwlpZiAoIShubWQtPmZsYWdz
ICYgTkVUTUFQX01FTV9GSU5BTElaRUQpKSB7CisJCSpjbHVzdHNpemUgPSAqbnVtY2x1c3RlcnMg
PSAwOworCQlyZXR1cm4gMTsgLyogbm90IHJlYWR5IHlldCAqLworCX0KKwkqY2x1c3RzaXplID0g
bm1kLT5wb29sc1twb29sXS5fY2x1c3RzaXplOworCSpudW1jbHVzdGVycyA9IG5tZC0+cG9vbHNb
cG9vbF0ubnVtY2x1c3RlcnM7CisJcmV0dXJuIDA7IC8qIHN1Y2Nlc3MgKi8KIH0KIAogc3RhdGlj
IGludApAQCAtNTc4LDEyICs4MjIsNiBAQAogICAgICgobiktPnBvb2xzW05FVE1BUF9JRl9QT09M
XS5tZW10b3RhbCArIAkJCVwKIAluZXRtYXBfb2JqX29mZnNldCgmKG4pLT5wb29sc1tORVRNQVBf
UklOR19QT09MXSwgKHYpKSkKIAotI2RlZmluZSBuZXRtYXBfYnVmX29mZnNldChuLCB2KQkJCQkJ
XAotICAgICgobiktPnBvb2xzW05FVE1BUF9JRl9QT09MXS5tZW10b3RhbCArCQkJXAotCShuKS0+
cG9vbHNbTkVUTUFQX1JJTkdfUE9PTF0ubWVtdG90YWwgKwkJXAotCW5ldG1hcF9vYmpfb2Zmc2V0
KCYobiktPnBvb2xzW05FVE1BUF9CVUZfUE9PTF0sICh2KSkpCi0KLQogc3RhdGljIHNzaXplX3QK
IG5ldG1hcF9tZW0yX2lmX29mZnNldChzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQsIGNvbnN0IHZv
aWQgKmFkZHIpCiB7CkBAIC02MDIsNyArODQwLDcgQEAKIG5ldG1hcF9vYmpfbWFsbG9jKHN0cnVj
dCBuZXRtYXBfb2JqX3Bvb2wgKnAsIHVfaW50IGxlbiwgdWludDMyX3QgKnN0YXJ0LCB1aW50MzJf
dCAqaW5kZXgpCiB7CiAJdWludDMyX3QgaSA9IDA7CQkJLyogaW5kZXggaW4gdGhlIGJpdG1hcCAq
LwotCXVpbnQzMl90IG1hc2ssIGo7CQkvKiBzbG90IGNvdW50ZXIgKi8KKwl1aW50MzJfdCBtYXNr
LCBqID0gMDsJCS8qIHNsb3QgY291bnRlciAqLwogCXZvaWQgKnZhZGRyID0gTlVMTDsKIAogCWlm
IChsZW4gPiBwLT5fb2Jqc2l6ZSkgewpAQCAtNjM2LDcgKzg3NCw3IEBACiAJCWlmIChpbmRleCkK
IAkJCSppbmRleCA9IGkgKiAzMiArIGo7CiAJfQotCU5EKCIlcyBhbGxvY2F0b3I6IGFsbG9jYXRl
ZCBvYmplY3QgQCBbJWRdWyVkXTogdmFkZHIgJXAiLCBpLCBqLCB2YWRkcik7CisJTkQoIiVzIGFs
bG9jYXRvcjogYWxsb2NhdGVkIG9iamVjdCBAIFslZF1bJWRdOiB2YWRkciAlcCIscC0+bmFtZSwg
aSwgaiwgdmFkZHIpOwogCiAJaWYgKHN0YXJ0KQogCQkqc3RhcnQgPSBpOwpAQCAtNzMzLDcgKzk3
MSw3IEBACiAJCQkqaGVhZCA9IGN1cjsgLyogcmVzdG9yZSAqLwogCQkJYnJlYWs7CiAJCX0KLQkJ
UkQoNSwgImFsbG9jYXRlIGJ1ZmZlciAlZCAtPiAlZCIsICpoZWFkLCBjdXIpOworCQlORCg1LCAi
YWxsb2NhdGUgYnVmZmVyICVkIC0+ICVkIiwgKmhlYWQsIGN1cik7CiAJCSpwID0gY3VyOyAvKiBs
aW5rIHRvIHByZXZpb3VzIGhlYWQgKi8KIAl9CiAKQEAgLTc1MCw3ICs5ODgsNyBAQAogCXN0cnVj
dCBuZXRtYXBfb2JqX3Bvb2wgKnAgPSAmbm1kLT5wb29sc1tORVRNQVBfQlVGX1BPT0xdOwogCXVp
bnQzMl90IGksIGN1ciwgKmJ1ZjsKIAotCUQoImZyZWVpbmcgdGhlIGV4dHJhIGxpc3QiKTsKKwlO
RCgiZnJlZWluZyB0aGUgZXh0cmEgbGlzdCIpOwogCWZvciAoaSA9IDA7IGhlYWQgPj0yICYmIGhl
YWQgPCBwLT5vYmp0b3RhbDsgaSsrKSB7CiAJCWN1ciA9IGhlYWQ7CiAJCWJ1ZiA9IGx1dFtoZWFk
XS52YWRkcjsKQEAgLTc2MSw3ICs5OTksOCBAQAogCX0KIAlpZiAoaGVhZCAhPSAwKQogCQlEKCJi
cmVha2luZyB3aXRoIGhlYWQgJWQiLCBoZWFkKTsKLQlEKCJmcmVlZCAlZCBidWZmZXJzIiwgaSk7
CisJaWYgKG5ldG1hcF92ZXJib3NlKQorCQlEKCJmcmVlZCAlZCBidWZmZXJzIiwgaSk7CiB9CiAK
IApAQCAtODQyLDExICsxMDgxLDEwIEBACiAJaWYgKHAgPT0gTlVMTCkKIAkJcmV0dXJuOwogCWlm
IChwLT5iaXRtYXApCi0JCWZyZWUocC0+Yml0bWFwLCBNX05FVE1BUCk7CisJCW5tX29zX2ZyZWUo
cC0+Yml0bWFwKTsKIAlwLT5iaXRtYXAgPSBOVUxMOwogCWlmIChwLT5sdXQpIHsKIAkJdV9pbnQg
aTsKLQkJc2l6ZV90IHN6ID0gcC0+X2NsdXN0c2l6ZTsKIAogCQkvKgogCQkgKiBGcmVlIGVhY2gg
Y2x1c3RlciBhbGxvY2F0ZWQgaW4KQEAgLTg1NiwxMyArMTA5NCwxMyBAQAogCQkgKi8KIAkJZm9y
IChpID0gMDsgaSA8IHAtPm9ianRvdGFsOyBpICs9IHAtPl9jbHVzdGVudHJpZXMpIHsKIAkJCWlm
IChwLT5sdXRbaV0udmFkZHIpCi0JCQkJY29udGlnZnJlZShwLT5sdXRbaV0udmFkZHIsIHN6LCBN
X05FVE1BUCk7CisJCQkJY29udGlnZnJlZShwLT5sdXRbaV0udmFkZHIsIHAtPl9jbHVzdHNpemUs
IE1fTkVUTUFQKTsKIAkJfQogCQliemVybyhwLT5sdXQsIHNpemVvZihzdHJ1Y3QgbHV0X2VudHJ5
KSAqIHAtPm9ianRvdGFsKTsKICNpZmRlZiBsaW51eAogCQl2ZnJlZShwLT5sdXQpOwogI2Vsc2UK
LQkJZnJlZShwLT5sdXQsIE1fTkVUTUFQKTsKKwkJbm1fb3NfZnJlZShwLT5sdXQpOwogI2VuZGlm
CiAJfQogCXAtPmx1dCA9IE5VTEw7CkBAIC05NzMsNiArMTIxMSwxOCBAQAogCXJldHVybiAwOwog
fQogCitzdGF0aWMgc3RydWN0IGx1dF9lbnRyeSAqCitubV9hbGxvY19sdXQodV9pbnQgbm9iaikK
K3sKKwlzaXplX3QgbiA9IHNpemVvZihzdHJ1Y3QgbHV0X2VudHJ5KSAqIG5vYmo7CisJc3RydWN0
IGx1dF9lbnRyeSAqbHV0OworI2lmZGVmIGxpbnV4CisJbHV0ID0gdm1hbGxvYyhuKTsKKyNlbHNl
CisJbHV0ID0gbm1fb3NfbWFsbG9jKG4pOworI2VuZGlmCisJcmV0dXJuIGx1dDsKK30KIAogLyog
Y2FsbCB3aXRoIE5NQV9MT0NLIGhlbGQgKi8KIHN0YXRpYyBpbnQKQEAgLTk4NSwyMCArMTIzNSwx
NSBAQAogCXAtPm51bWNsdXN0ZXJzID0gcC0+X251bWNsdXN0ZXJzOwogCXAtPm9ianRvdGFsID0g
cC0+X29ianRvdGFsOwogCi0JbiA9IHNpemVvZihzdHJ1Y3QgbHV0X2VudHJ5KSAqIHAtPm9ianRv
dGFsOwotI2lmZGVmIGxpbnV4Ci0JcC0+bHV0ID0gdm1hbGxvYyhuKTsKLSNlbHNlCi0JcC0+bHV0
ID0gbWFsbG9jKG4sIE1fTkVUTUFQLCBNX05PV0FJVCB8IE1fWkVSTyk7Ci0jZW5kaWYKKwlwLT5s
dXQgPSBubV9hbGxvY19sdXQocC0+b2JqdG90YWwpOwogCWlmIChwLT5sdXQgPT0gTlVMTCkgewot
CQlEKCJVbmFibGUgdG8gY3JlYXRlIGxvb2t1cCB0YWJsZSAoJWQgYnl0ZXMpIGZvciAnJXMnIiwg
KGludCluLCBwLT5uYW1lKTsKKwkJRCgiVW5hYmxlIHRvIGNyZWF0ZSBsb29rdXAgdGFibGUgZm9y
ICclcyciLCBwLT5uYW1lKTsKIAkJZ290byBjbGVhbjsKIAl9CiAKIAkvKiBBbGxvY2F0ZSB0aGUg
Yml0bWFwICovCiAJbiA9IChwLT5vYmp0b3RhbCArIDMxKSAvIDMyOwotCXAtPmJpdG1hcCA9IG1h
bGxvYyhzaXplb2YodWludDMyX3QpICogbiwgTV9ORVRNQVAsIE1fTk9XQUlUIHwgTV9aRVJPKTsK
KwlwLT5iaXRtYXAgPSBubV9vc19tYWxsb2Moc2l6ZW9mKHVpbnQzMl90KSAqIG4pOwogCWlmIChw
LT5iaXRtYXAgPT0gTlVMTCkgewogCQlEKCJVbmFibGUgdG8gY3JlYXRlIGJpdG1hcCAoJWQgZW50
cmllcykgZm9yIGFsbG9jYXRvciAnJXMnIiwgKGludCluLAogCQkgICAgcC0+bmFtZSk7CkBAIC0x
MDE1LDYgKzEyNjAsMTMgQEAKIAkJaW50IGxpbSA9IGkgKyBwLT5fY2x1c3RlbnRyaWVzOwogCQlj
aGFyICpjbHVzdDsKIAorCQkvKgorCQkgKiBYWFggTm90ZSwgd2Ugb25seSBuZWVkIGNvbnRpZ21h
bGxvYygpIGZvciBidWZmZXJzIGF0dGFjaGVkCisJCSAqIHRvIG5hdGl2ZSBpbnRlcmZhY2VzLiBJ
biBhbGwgb3RoZXIgY2FzZXMgKG5pZnAsIG5ldG1hcCByaW5ncworCQkgKiBhbmQgZXZlbiBidWZm
ZXJzIGZvciBWQUxFIHBvcnRzIG9yIGVtdWxhdGVkIGludGVyZmFjZXMpIHdlCisJCSAqIGNhbiBs
aXZlIHdpdGggc3RhbmRhcmQgbWFsbG9jLCBiZWNhdXNlIHRoZSBoYXJkd2FyZSB3aWxsIG5vdAor
CQkgKiBhY2Nlc3MgdGhlIHBhZ2VzIGRpcmVjdGx5LgorCQkgKi8KIAkJY2x1c3QgPSBjb250aWdt
YWxsb2MobiwgTV9ORVRNQVAsIE1fTk9XQUlUIHwgTV9aRVJPLAogCQkgICAgKHNpemVfdCkwLCAt
MVVMLCBQQUdFX1NJWkUsIDApOwogCQlpZiAoY2x1c3QgPT0gTlVMTCkgewpAQCAtMTA3NSwxNiAr
MTMyNywxOCBAQAogCiAvKiBjYWxsIHdpdGggbG9jayBoZWxkICovCiBzdGF0aWMgaW50Ci1uZXRt
YXBfbWVtb3J5X2NvbmZpZ19jaGFuZ2VkKHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCkKK25ldG1h
cF9tZW1fcGFyYW1zX2NoYW5nZWQoc3RydWN0IG5ldG1hcF9vYmpfcGFyYW1zKiBwKQogewotCWlu
dCBpOworCWludCBpLCBydiA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTkVUTUFQX1BPT0xTX05S
OyBpKyspIHsKLQkJaWYgKG5tZC0+cG9vbHNbaV0ucl9vYmpzaXplICE9IG5ldG1hcF9wYXJhbXNb
aV0uc2l6ZSB8fAotCQkgICAgbm1kLT5wb29sc1tpXS5yX29ianRvdGFsICE9IG5ldG1hcF9wYXJh
bXNbaV0ubnVtKQotCQkgICAgcmV0dXJuIDE7CisJCWlmIChwW2ldLmxhc3Rfc2l6ZSAhPSBwW2ld
LnNpemUgfHwgcFtpXS5sYXN0X251bSAhPSBwW2ldLm51bSkgeworCQkJcFtpXS5sYXN0X3NpemUg
PSBwW2ldLnNpemU7CisJCQlwW2ldLmxhc3RfbnVtID0gcFtpXS5udW07CisJCQlydiA9IDE7CisJ
CX0KIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTEw
NSwxMyArMTM1OSwxOCBAQAogewogCWludCBpLCBsaW0gPSBwLT5fb2JqdG90YWw7CiAKLQlpZiAo
bmEtPnBkZXYgPT0gTlVMTCkKKwlpZiAobmEgPT0gTlVMTCB8fCBuYS0+cGRldiA9PSBOVUxMKQog
CQlyZXR1cm4gMDsKIAotI2lmZGVmIF9fRnJlZUJTRF9fCisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykKIAkodm9pZClpOwogCSh2b2lkKWxpbTsKIAlEKCJ1bnN1cHBvcnRlZCBvbiBGcmVlQlNEIik7
CisKKyNlbGlmIGRlZmluZWQoX1dJTjMyKQorCSh2b2lkKWk7CisJKHZvaWQpbGltOworCUQoInVu
c3VwcG9ydGVkIG9uIFdpbmRvd3MiKTsJLy9YWFhfYWxlLCByZWFsbHk/CiAjZWxzZSAvKiBsaW51
eCAqLwogCWZvciAoaSA9IDI7IGkgPCBsaW07IGkrKykgewogCQluZXRtYXBfdW5sb2FkX21hcChu
YSwgKGJ1c19kbWFfdGFnX3QpIG5hLT5wZGV2LCAmcC0+bHV0W2ldLnBhZGRyKTsKQEAgLTExMjQs
OCArMTM4MywxMCBAQAogc3RhdGljIGludAogbmV0bWFwX21lbV9tYXAoc3RydWN0IG5ldG1hcF9v
YmpfcG9vbCAqcCwgc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSkKIHsKLSNpZmRlZiBfX0ZyZWVC
U0RfXworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCiAJRCgidW5zdXBwb3J0ZWQgb24gRnJlZUJT
RCIpOworI2VsaWYgZGVmaW5lZChfV0lOMzIpCisJRCgidW5zdXBwb3J0ZWQgb24gV2luZG93cyIp
OwkvL1hYWF9hbGUsIHJlYWxseT8KICNlbHNlIC8qIGxpbnV4ICovCiAJaW50IGksIGxpbSA9IHAt
Pl9vYmp0b3RhbDsKIApAQCAtMTE3Niw2OSArMTQzNywxNiBAQAogCXJldHVybiBubWQtPmxhc3Rl
cnI7CiB9CiAKLQotCi1zdGF0aWMgdm9pZAotbmV0bWFwX21lbV9wcml2YXRlX2RlbGV0ZShzdHJ1
Y3QgbmV0bWFwX21lbV9kICpubWQpCi17Ci0JaWYgKG5tZCA9PSBOVUxMKQotCQlyZXR1cm47Ci0J
aWYgKG5ldG1hcF92ZXJib3NlKQotCQlEKCJkZWxldGluZyAlcCIsIG5tZCk7Ci0JaWYgKG5tZC0+
YWN0aXZlID4gMCkKLQkJRCgiYnVnOiBkZWxldGluZyBtZW0gYWxsb2NhdG9yIHdpdGggYWN0aXZl
PSVkISIsIG5tZC0+YWN0aXZlKTsKLQlubV9tZW1fcmVsZWFzZV9pZChubWQpOwotCWlmIChuZXRt
YXBfdmVyYm9zZSkKLQkJRCgiZG9uZSBkZWxldGluZyAlcCIsIG5tZCk7Ci0JTk1BX0xPQ0tfREVT
VFJPWShubWQpOwotCWZyZWUobm1kLCBNX0RFVkJVRik7Ci19Ci0KLXN0YXRpYyBpbnQKLW5ldG1h
cF9tZW1fcHJpdmF0ZV9jb25maWcoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kKQotewotCS8qIG5v
dGhpbmcgdG8gZG8sIHdlIGFyZSBjb25maWd1cmVkIG9uIGNyZWF0aW9uCi0gCSAqIGFuZCBjb25m
aWd1cmF0aW9uIG5ldmVyIGNoYW5nZXMgdGhlcmVhZnRlcgotIAkgKi8KLQlyZXR1cm4gMDsKLX0K
LQotc3RhdGljIGludAotbmV0bWFwX21lbV9wcml2YXRlX2ZpbmFsaXplKHN0cnVjdCBuZXRtYXBf
bWVtX2QgKm5tZCkKLXsKLQlpbnQgZXJyOwotCU5NQV9MT0NLKG5tZCk7Ci0Jbm1kLT5hY3RpdmUr
KzsKLQllcnIgPSBuZXRtYXBfbWVtX2ZpbmFsaXplX2FsbChubWQpOwotCU5NQV9VTkxPQ0sobm1k
KTsKLQlyZXR1cm4gZXJyOwotCi19Ci0KLXN0YXRpYyB2b2lkCi1uZXRtYXBfbWVtX3ByaXZhdGVf
ZGVyZWYoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kKQotewotCU5NQV9MT0NLKG5tZCk7Ci0JaWYg
KC0tbm1kLT5hY3RpdmUgPD0gMCkKLQkJbmV0bWFwX21lbV9yZXNldF9hbGwobm1kKTsKLQlOTUFf
VU5MT0NLKG5tZCk7Ci19Ci0KLQogLyoKICAqIGFsbG9jYXRvciBmb3IgcHJpdmF0ZSBtZW1vcnkK
ICAqLwotc3RydWN0IG5ldG1hcF9tZW1fZCAqCi1uZXRtYXBfbWVtX3ByaXZhdGVfbmV3KGNvbnN0
IGNoYXIgKm5hbWUsIHVfaW50IHR4ciwgdV9pbnQgdHhkLAotCXVfaW50IHJ4ciwgdV9pbnQgcnhk
LCB1X2ludCBleHRyYV9idWZzLCB1X2ludCBucGlwZXMsIGludCAqcGVycikKK3N0YXRpYyBzdHJ1
Y3QgbmV0bWFwX21lbV9kICoKK19uZXRtYXBfbWVtX3ByaXZhdGVfbmV3KHN0cnVjdCBuZXRtYXBf
b2JqX3BhcmFtcyAqcCwgaW50ICpwZXJyKQogewogCXN0cnVjdCBuZXRtYXBfbWVtX2QgKmQgPSBO
VUxMOwotCXN0cnVjdCBuZXRtYXBfb2JqX3BhcmFtcyBwW05FVE1BUF9QT09MU19OUl07Ci0JaW50
IGksIGVycjsKLQl1X2ludCB2LCBtYXhkOworCWludCBpLCBlcnIgPSAwOwogCi0JZCA9IG1hbGxv
YyhzaXplb2Yoc3RydWN0IG5ldG1hcF9tZW1fZCksCi0JCQlNX0RFVkJVRiwgTV9OT1dBSVQgfCBN
X1pFUk8pOworCWQgPSBubV9vc19tYWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRtYXBfbWVtX2QpKTsK
IAlpZiAoZCA9PSBOVUxMKSB7CiAJCWVyciA9IEVOT01FTTsKIAkJZ290byBlcnJvcjsKQEAgLTEy
NDksNyArMTQ1Nyw0MSBAQAogCWVyciA9IG5tX21lbV9hc3NpZ25faWQoZCk7CiAJaWYgKGVycikK
IAkJZ290byBlcnJvcjsKKwlzbnByaW50ZihkLT5uYW1lLCBOTV9NRU1fTkFNRVNaLCAiJWQiLCBk
LT5ubV9pZCk7CiAKKwlmb3IgKGkgPSAwOyBpIDwgTkVUTUFQX1BPT0xTX05SOyBpKyspIHsKKwkJ
c25wcmludGYoZC0+cG9vbHNbaV0ubmFtZSwgTkVUTUFQX1BPT0xfTUFYX05BTVNaLAorCQkJCW5t
X2JsdWVwcmludC5wb29sc1tpXS5uYW1lLAorCQkJCWQtPm5hbWUpOworCQlkLT5wYXJhbXNbaV0u
bnVtID0gcFtpXS5udW07CisJCWQtPnBhcmFtc1tpXS5zaXplID0gcFtpXS5zaXplOworCX0KKwor
CU5NQV9MT0NLX0lOSVQoZCk7CisKKwllcnIgPSBuZXRtYXBfbWVtX2NvbmZpZyhkKTsKKwlpZiAo
ZXJyKQorCQlnb3RvIGVycm9yOworCisJZC0+ZmxhZ3MgJj0gfk5FVE1BUF9NRU1fRklOQUxJWkVE
OworCisJcmV0dXJuIGQ7CisKK2Vycm9yOgorCW5ldG1hcF9tZW1fZGVsZXRlKGQpOworCWlmIChw
ZXJyKQorCQkqcGVyciA9IGVycjsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IG5ldG1hcF9t
ZW1fZCAqCituZXRtYXBfbWVtX3ByaXZhdGVfbmV3KHVfaW50IHR4ciwgdV9pbnQgdHhkLCB1X2lu
dCByeHIsIHVfaW50IHJ4ZCwKKwkJdV9pbnQgZXh0cmFfYnVmcywgdV9pbnQgbnBpcGVzLCBpbnQg
KnBlcnIpCit7CisJc3RydWN0IG5ldG1hcF9tZW1fZCAqZCA9IE5VTEw7CisJc3RydWN0IG5ldG1h
cF9vYmpfcGFyYW1zIHBbTkVUTUFQX1BPT0xTX05SXTsKKwlpbnQgaSwgZXJyID0gMDsKKwl1X2lu
dCB2LCBtYXhkOwogCS8qIGFjY291bnQgZm9yIHRoZSBmYWtlIGhvc3QgcmluZ3MgKi8KIAl0eHIr
KzsKIAlyeHIrKzsKQEAgLTEyOTUsMjMgKzE1MzcsMTMgQEAKIAkJCXBbTkVUTUFQX0JVRl9QT09M
XS5udW0sCiAJCQlwW05FVE1BUF9CVUZfUE9PTF0uc2l6ZSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwg
TkVUTUFQX1BPT0xTX05SOyBpKyspIHsKLQkJc25wcmludGYoZC0+cG9vbHNbaV0ubmFtZSwgTkVU
TUFQX1BPT0xfTUFYX05BTVNaLAotCQkJCW5tX2JsdWVwcmludC5wb29sc1tpXS5uYW1lLAotCQkJ
CW5hbWUpOwotCQllcnIgPSBuZXRtYXBfY29uZmlnX29ial9hbGxvY2F0b3IoJmQtPnBvb2xzW2ld
LAotCQkJCXBbaV0ubnVtLCBwW2ldLnNpemUpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJvcjsK
LQl9Ci0KLQlkLT5mbGFncyAmPSB+TkVUTUFQX01FTV9GSU5BTElaRUQ7Ci0KLQlOTUFfTE9DS19J
TklUKGQpOworCWQgPSBfbmV0bWFwX21lbV9wcml2YXRlX25ldyhwLCBwZXJyKTsKKwlpZiAoZCA9
PSBOVUxMKQorCQlnb3RvIGVycm9yOwogCiAJcmV0dXJuIGQ7CiBlcnJvcjoKLQluZXRtYXBfbWVt
X3ByaXZhdGVfZGVsZXRlKGQpOworCW5ldG1hcF9tZW1fZGVsZXRlKGQpOwogCWlmIChwZXJyKQog
CQkqcGVyciA9IGVycjsKIAlyZXR1cm4gTlVMTDsKQEAgLTEzMjAsNyArMTU1Miw3IEBACiAKIC8q
IGNhbGwgd2l0aCBsb2NrIGhlbGQgKi8KIHN0YXRpYyBpbnQKLW5ldG1hcF9tZW1fZ2xvYmFsX2Nv
bmZpZyhzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQpCituZXRtYXBfbWVtMl9jb25maWcoc3RydWN0
IG5ldG1hcF9tZW1fZCAqbm1kKQogewogCWludCBpOwogCkBAIC0xMzI4LDcgKzE1NjAsNyBAQAog
CQkvKiBhbHJlYWR5IGluIHVzZSwgd2UgY2Fubm90IGNoYW5nZSB0aGUgY29uZmlndXJhdGlvbiAq
LwogCQlnb3RvIG91dDsKIAotCWlmICghbmV0bWFwX21lbW9yeV9jb25maWdfY2hhbmdlZChubWQp
KQorCWlmICghbmV0bWFwX21lbV9wYXJhbXNfY2hhbmdlZChubWQtPnBhcmFtcykpCiAJCWdvdG8g
b3V0OwogCiAJTkQoInJlY29uZmlndXJpbmciKTsKQEAgLTEzNDMsNyArMTU3NSw3IEBACiAKIAlm
b3IgKGkgPSAwOyBpIDwgTkVUTUFQX1BPT0xTX05SOyBpKyspIHsKIAkJbm1kLT5sYXN0ZXJyID0g
bmV0bWFwX2NvbmZpZ19vYmpfYWxsb2NhdG9yKCZubWQtPnBvb2xzW2ldLAotCQkJCW5ldG1hcF9w
YXJhbXNbaV0ubnVtLCBuZXRtYXBfcGFyYW1zW2ldLnNpemUpOworCQkJCW5tZC0+cGFyYW1zW2ld
Lm51bSwgbm1kLT5wYXJhbXNbaV0uc2l6ZSk7CiAJCWlmIChubWQtPmxhc3RlcnIpCiAJCQlnb3Rv
IG91dDsKIAl9CkBAIC0xMzU0LDEzICsxNTg2LDEzIEBACiB9CiAKIHN0YXRpYyBpbnQKLW5ldG1h
cF9tZW1fZ2xvYmFsX2ZpbmFsaXplKHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCkKK25ldG1hcF9t
ZW0yX2ZpbmFsaXplKHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCkKIHsKIAlpbnQgZXJyOwotCQkK
KwogCS8qIHVwZGF0ZSBjb25maWd1cmF0aW9uIGlmIGNoYW5nZWQgKi8KLQlpZiAobmV0bWFwX21l
bV9nbG9iYWxfY29uZmlnKG5tZCkpCi0JCWdvdG8gb3V0OworCWlmIChuZXRtYXBfbWVtMl9jb25m
aWcobm1kKSkKKwkJZ290byBvdXQxOwogCiAJbm1kLT5hY3RpdmUrKzsKIApAQCAtMTM3OCw2ICsx
NjEwLDcgQEAKIG91dDoKIAlpZiAobm1kLT5sYXN0ZXJyKQogCQlubWQtPmFjdGl2ZS0tOworb3V0
MToKIAllcnIgPSBubWQtPmxhc3RlcnI7CiAKIAlyZXR1cm4gZXJyOwpAQCAtMTM4NSwyMCArMTYx
OCwyMyBAQAogfQogCiBzdGF0aWMgdm9pZAotbmV0bWFwX21lbV9nbG9iYWxfZGVsZXRlKHN0cnVj
dCBuZXRtYXBfbWVtX2QgKm5tZCkKK25ldG1hcF9tZW0yX2RlbGV0ZShzdHJ1Y3QgbmV0bWFwX21l
bV9kICpubWQpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTkVUTUFQX1BPT0xTX05S
OyBpKyspIHsKLQkgICAgbmV0bWFwX2Rlc3Ryb3lfb2JqX2FsbG9jYXRvcigmbm1fbWVtLnBvb2xz
W2ldKTsKKwkgICAgbmV0bWFwX2Rlc3Ryb3lfb2JqX2FsbG9jYXRvcigmbm1kLT5wb29sc1tpXSk7
CiAJfQogCi0JTk1BX0xPQ0tfREVTVFJPWSgmbm1fbWVtKTsKKwlOTUFfTE9DS19ERVNUUk9ZKG5t
ZCk7CisJaWYgKG5tZCAhPSAmbm1fbWVtKQorCQlubV9vc19mcmVlKG5tZCk7CiB9CiAKIGludAog
bmV0bWFwX21lbV9pbml0KHZvaWQpCiB7CisJTk1fTVRYX0lOSVQobm1fbWVtX2xpc3RfbG9jayk7
CiAJTk1BX0xPQ0tfSU5JVCgmbm1fbWVtKTsKIAluZXRtYXBfbWVtX2dldCgmbm1fbWVtKTsKIAly
ZXR1cm4gKDApOwpAQCAtMTQxNywxMyArMTY1MywxNyBAQAogCiAJZm9yX3J4X3R4KHQpIHsKIAkJ
dV9pbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IG5ldG1hcF9yZWFsX3JpbmdzKG5hLCB0KTsgaSsr
KSB7CisJCWZvciAoaSA9IDA7IGkgPCBubWFfZ2V0X25yaW5ncyhuYSwgdCkgKyAxOyBpKyspIHsK
IAkJCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nID0gJk5NUihuYSwgdClbaV07CiAJCQlzdHJ1
Y3QgbmV0bWFwX3JpbmcgKnJpbmcgPSBrcmluZy0+cmluZzsKIAotCQkJaWYgKHJpbmcgPT0gTlVM
TCkKKwkJCWlmIChyaW5nID09IE5VTEwgfHwga3JpbmctPnVzZXJzID4gMCB8fCAoa3JpbmctPm5y
X2tmbGFncyAmIE5LUl9ORUVEUklORykpIHsKKwkJCQlORCgic2tpcHBpbmcgcmluZyAlcyAocmlu
ZyAlcCwgdXNlcnMgJWQpIiwKKwkJCQkJCWtyaW5nLT5uYW1lLCByaW5nLCBrcmluZy0+dXNlcnMp
OwogCQkJCWNvbnRpbnVlOwotCQkJbmV0bWFwX2ZyZWVfYnVmcyhuYS0+bm1fbWVtLCByaW5nLT5z
bG90LCBrcmluZy0+bmtyX251bV9zbG90cyk7CisJCQl9CisJCQlpZiAoaSAhPSBubWFfZ2V0X25y
aW5ncyhuYSwgdCkgfHwgbmEtPm5hX2ZsYWdzICYgTkFGX0hPU1RfUklOR1MpCisJCQkJbmV0bWFw
X2ZyZWVfYnVmcyhuYS0+bm1fbWVtLCByaW5nLT5zbG90LCBrcmluZy0+bmtyX251bV9zbG90cyk7
CiAJCQluZXRtYXBfcmluZ19mcmVlKG5hLT5ubV9tZW0sIHJpbmcpOwogCQkJa3JpbmctPnJpbmcg
PSBOVUxMOwogCQl9CkBAIC0xNDUyLDkgKzE2OTIsMTAgQEAKIAkJCXN0cnVjdCBuZXRtYXBfcmlu
ZyAqcmluZyA9IGtyaW5nLT5yaW5nOwogCQkJdV9pbnQgbGVuLCBuZGVzYzsKIAotCQkJaWYgKHJp
bmcpIHsKLQkJCQlORCgiJXMgYWxyZWFkeSBjcmVhdGVkIiwga3JpbmctPm5hbWUpOwotCQkJCWNv
bnRpbnVlOyAvKiBhbHJlYWR5IGNyZWF0ZWQgYnkgc29tZWJvZHkgZWxzZSAqLworCQkJaWYgKHJp
bmcgfHwgKCFrcmluZy0+dXNlcnMgJiYgIShrcmluZy0+bnJfa2ZsYWdzICYgTktSX05FRURSSU5H
KSkpIHsKKwkJCQkvKiB1bmVlZGVkLCBvciBhbHJlYWR5IGNyZWF0ZWQgYnkgc29tZWJvZHkgZWxz
ZSAqLworCQkJCU5EKCJza2lwcGluZyByaW5nICVzIiwga3JpbmctPm5hbWUpOworCQkJCWNvbnRp
bnVlOwogCQkJfQogCQkJbmRlc2MgPSBrcmluZy0+bmtyX251bV9zbG90czsKIAkJCWxlbiA9IHNp
emVvZihzdHJ1Y3QgbmV0bWFwX3JpbmcpICsKQEAgLTE1NjksMTAgKzE4MTAsMjIgQEAKIAkgKi8K
IAliYXNlID0gbmV0bWFwX2lmX29mZnNldChuYS0+bm1fbWVtLCBuaWZwKTsKIAlmb3IgKGkgPSAw
OyBpIDwgbltOUl9UWF07IGkrKykgeworCQlpZiAobmEtPnR4X3JpbmdzW2ldLnJpbmcgPT0gTlVM
TCkgeworCQkJLy8gWFhYIG1heWJlIHVzZSB0aGUgb2Zmc2V0IG9mIGFuIGVycm9yIHJpbmcsCisJ
CQkvLyBsaWtlIHdlIGRvIGZvciBidWZmZXJzPworCQkJKihzc2l6ZV90ICopKHVpbnRwdHJfdCkm
bmlmcC0+cmluZ19vZnNbaV0gPSAwOworCQkJY29udGludWU7CisJCX0KIAkJKihzc2l6ZV90ICop
KHVpbnRwdHJfdCkmbmlmcC0+cmluZ19vZnNbaV0gPQogCQkJbmV0bWFwX3Jpbmdfb2Zmc2V0KG5h
LT5ubV9tZW0sIG5hLT50eF9yaW5nc1tpXS5yaW5nKSAtIGJhc2U7CiAJfQogCWZvciAoaSA9IDA7
IGkgPCBuW05SX1JYXTsgaSsrKSB7CisJCWlmIChuYS0+cnhfcmluZ3NbaV0ucmluZyA9PSBOVUxM
KSB7CisJCQkvLyBYWFggbWF5YmUgdXNlIHRoZSBvZmZzZXQgb2YgYW4gZXJyb3IgcmluZywKKwkJ
CS8vIGxpa2Ugd2UgZG8gZm9yIGJ1ZmZlcnM/CisJCQkqKHNzaXplX3QgKikodWludHB0cl90KSZu
aWZwLT5yaW5nX29mc1tpK25bTlJfVFhdXSA9IDA7CisJCQljb250aW51ZTsKKwkJfQogCQkqKHNz
aXplX3QgKikodWludHB0cl90KSZuaWZwLT5yaW5nX29mc1tpK25bTlJfVFhdXSA9CiAJCQluZXRt
YXBfcmluZ19vZmZzZXQobmEtPm5tX21lbSwgbmEtPnJ4X3JpbmdzW2ldLnJpbmcpIC0gYmFzZTsK
IAl9CkBAIC0xNTk3LDcgKzE4NTAsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotbmV0bWFwX21lbV9n
bG9iYWxfZGVyZWYoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kKQorbmV0bWFwX21lbTJfZGVyZWYo
c3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kKQogewogCiAJbm1kLT5hY3RpdmUtLTsKQEAgLTE2MTIs
MjcgKzE4NjUsNTUxIEBACiAJLm5tZF9nZXRfbHV0ID0gbmV0bWFwX21lbTJfZ2V0X2x1dCwKIAku
bm1kX2dldF9pbmZvID0gbmV0bWFwX21lbTJfZ2V0X2luZm8sCiAJLm5tZF9vZnN0b3BoeXMgPSBu
ZXRtYXBfbWVtMl9vZnN0b3BoeXMsCi0JLm5tZF9jb25maWcgPSBuZXRtYXBfbWVtX2dsb2JhbF9j
b25maWcsCi0JLm5tZF9maW5hbGl6ZSA9IG5ldG1hcF9tZW1fZ2xvYmFsX2ZpbmFsaXplLAotCS5u
bWRfZGVyZWYgPSBuZXRtYXBfbWVtX2dsb2JhbF9kZXJlZiwKLQkubm1kX2RlbGV0ZSA9IG5ldG1h
cF9tZW1fZ2xvYmFsX2RlbGV0ZSwKKwkubm1kX2NvbmZpZyA9IG5ldG1hcF9tZW0yX2NvbmZpZywK
Kwkubm1kX2ZpbmFsaXplID0gbmV0bWFwX21lbTJfZmluYWxpemUsCisJLm5tZF9kZXJlZiA9IG5l
dG1hcF9tZW0yX2RlcmVmLAorCS5ubWRfZGVsZXRlID0gbmV0bWFwX21lbTJfZGVsZXRlLAogCS5u
bWRfaWZfb2Zmc2V0ID0gbmV0bWFwX21lbTJfaWZfb2Zmc2V0LAogCS5ubWRfaWZfbmV3ID0gbmV0
bWFwX21lbTJfaWZfbmV3LAogCS5ubWRfaWZfZGVsZXRlID0gbmV0bWFwX21lbTJfaWZfZGVsZXRl
LAogCS5ubWRfcmluZ3NfY3JlYXRlID0gbmV0bWFwX21lbTJfcmluZ3NfY3JlYXRlLAogCS5ubWRf
cmluZ3NfZGVsZXRlID0gbmV0bWFwX21lbTJfcmluZ3NfZGVsZXRlCiB9Owotc3RydWN0IG5ldG1h
cF9tZW1fb3BzIG5ldG1hcF9tZW1fcHJpdmF0ZV9vcHMgPSB7Ci0JLm5tZF9nZXRfbHV0ID0gbmV0
bWFwX21lbTJfZ2V0X2x1dCwKLQkubm1kX2dldF9pbmZvID0gbmV0bWFwX21lbTJfZ2V0X2luZm8s
Ci0JLm5tZF9vZnN0b3BoeXMgPSBuZXRtYXBfbWVtMl9vZnN0b3BoeXMsCi0JLm5tZF9jb25maWcg
PSBuZXRtYXBfbWVtX3ByaXZhdGVfY29uZmlnLAotCS5ubWRfZmluYWxpemUgPSBuZXRtYXBfbWVt
X3ByaXZhdGVfZmluYWxpemUsCi0JLm5tZF9kZXJlZiA9IG5ldG1hcF9tZW1fcHJpdmF0ZV9kZXJl
ZiwKLQkubm1kX2lmX29mZnNldCA9IG5ldG1hcF9tZW0yX2lmX29mZnNldCwKLQkubm1kX2RlbGV0
ZSA9IG5ldG1hcF9tZW1fcHJpdmF0ZV9kZWxldGUsCi0JLm5tZF9pZl9uZXcgPSBuZXRtYXBfbWVt
Ml9pZl9uZXcsCi0JLm5tZF9pZl9kZWxldGUgPSBuZXRtYXBfbWVtMl9pZl9kZWxldGUsCi0JLm5t
ZF9yaW5nc19jcmVhdGUgPSBuZXRtYXBfbWVtMl9yaW5nc19jcmVhdGUsCi0JLm5tZF9yaW5nc19k
ZWxldGUgPSBuZXRtYXBfbWVtMl9yaW5nc19kZWxldGUKKworaW50CituZXRtYXBfbWVtX3Bvb2xz
X2luZm9fZ2V0KHN0cnVjdCBubXJlcSAqbm1yLCBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKQor
eworCXVpbnRwdHJfdCAqcHAgPSAodWludHB0cl90ICopJm5tci0+bnJfYXJnMTsKKwlzdHJ1Y3Qg
bmV0bWFwX3Bvb2xzX2luZm8gKnVwaSA9IChzdHJ1Y3QgbmV0bWFwX3Bvb2xzX2luZm8gKikoKnBw
KTsKKwlzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQgPSBuYS0+bm1fbWVtOworCXN0cnVjdCBuZXRt
YXBfcG9vbHNfaW5mbyBwaTsKKwl1bnNpZ25lZCBpbnQgbWVtc2l6ZTsKKwl1aW50MTZfdCBtZW1p
ZDsKKwlpbnQgcmV0OworCisJaWYgKCFubWQpIHsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldCA9
IG5ldG1hcF9tZW1fZ2V0X2luZm8obm1kLCAmbWVtc2l6ZSwgTlVMTCwgJm1lbWlkKTsKKwlpZiAo
cmV0KSB7CisJCXJldHVybiByZXQ7CisJfQorCisJcGkubWVtc2l6ZSA9IG1lbXNpemU7CisJcGku
bWVtaWQgPSBtZW1pZDsKKwlwaS5pZl9wb29sX29mZnNldCA9IDA7CisJcGkuaWZfcG9vbF9vYmp0
b3RhbCA9IG5tZC0+cG9vbHNbTkVUTUFQX0lGX1BPT0xdLm9ianRvdGFsOworCXBpLmlmX3Bvb2xf
b2Jqc2l6ZSA9IG5tZC0+cG9vbHNbTkVUTUFQX0lGX1BPT0xdLl9vYmpzaXplOworCisJcGkucmlu
Z19wb29sX29mZnNldCA9IG5tZC0+cG9vbHNbTkVUTUFQX0lGX1BPT0xdLm1lbXRvdGFsOworCXBp
LnJpbmdfcG9vbF9vYmp0b3RhbCA9IG5tZC0+cG9vbHNbTkVUTUFQX1JJTkdfUE9PTF0ub2JqdG90
YWw7CisJcGkucmluZ19wb29sX29ianNpemUgPSBubWQtPnBvb2xzW05FVE1BUF9SSU5HX1BPT0xd
Ll9vYmpzaXplOworCisJcGkuYnVmX3Bvb2xfb2Zmc2V0ID0gbm1kLT5wb29sc1tORVRNQVBfSUZf
UE9PTF0ubWVtdG90YWwgKworCQkJICAgICBubWQtPnBvb2xzW05FVE1BUF9SSU5HX1BPT0xdLm1l
bXRvdGFsOworCXBpLmJ1Zl9wb29sX29ianRvdGFsID0gbm1kLT5wb29sc1tORVRNQVBfQlVGX1BP
T0xdLm9ianRvdGFsOworCXBpLmJ1Zl9wb29sX29ianNpemUgPSBubWQtPnBvb2xzW05FVE1BUF9C
VUZfUE9PTF0uX29ianNpemU7CisKKwlyZXQgPSBjb3B5b3V0KCZwaSwgdXBpLCBzaXplb2YocGkp
KTsKKwlpZiAocmV0KSB7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNp
ZmRlZiBXSVRIX1BUTkVUTUFQX0dVRVNUCitzdHJ1Y3QgbWVtX3B0X2lmIHsKKwlzdHJ1Y3QgbWVt
X3B0X2lmICpuZXh0OworCXN0cnVjdCBpZm5ldCAqaWZwOworCXVuc2lnbmVkIGludCBuaWZwX29m
ZnNldDsKK307CisKKy8qIE5ldG1hcCBhbGxvY2F0b3IgZm9yIHB0bmV0bWFwIGd1ZXN0cy4gKi8K
K3N0cnVjdCBuZXRtYXBfbWVtX3B0ZyB7CisJc3RydWN0IG5ldG1hcF9tZW1fZCB1cDsKKworCXZt
X3BhZGRyX3Qgbm1fcGFkZHI7ICAgICAgICAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBpbiB0aGUg
Z3Vlc3QgKi8KKwl2b2lkICpubV9hZGRyOyAgICAgICAgICAgICAgICAgIC8qIHZpcnR1YWwgYWRk
cmVzcyBpbiB0aGUgZ3Vlc3QgKi8KKwlzdHJ1Y3QgbmV0bWFwX2x1dCBidWZfbHV0OyAgICAgIC8q
IGxvb2t1cCB0YWJsZSBmb3IgQlVGIHBvb2wgaW4gdGhlIGd1ZXN0ICovCisJbm1fbWVtaWRfdCBo
b3N0X21lbV9pZDsgICAgICAgICAvKiBhbGxvY2F0b3IgaWRlbnRpZmllciBpbiB0aGUgaG9zdCAq
LworCXN0cnVjdCBwdG5ldG1hcF9tZW1kZXYgKnB0bl9kZXY7LyogcHRuZXRtYXAgbWVtZGV2ICov
CisJc3RydWN0IG1lbV9wdF9pZiAqcHRfaWZzOwkvKiBsaXN0IG9mIGludGVyZmFjZXMgaW4gcGFz
c3Rocm91Z2ggKi8KK307CisKKy8qIExpbmsgYSBwYXNzdGhyb3VnaCBpbnRlcmZhY2UgdG8gYSBw
YXNzdGhyb3VnaCBuZXRtYXAgYWxsb2NhdG9yLiAqLworc3RhdGljIGludAorbmV0bWFwX21lbV9w
dF9ndWVzdF9pZnBfYWRkKHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCwgc3RydWN0IGlmbmV0ICpp
ZnAsCisJCQkgICAgdW5zaWduZWQgaW50IG5pZnBfb2Zmc2V0KQoreworCXN0cnVjdCBuZXRtYXBf
bWVtX3B0ZyAqcHRubWQgPSAoc3RydWN0IG5ldG1hcF9tZW1fcHRnICopbm1kOworCXN0cnVjdCBt
ZW1fcHRfaWYgKnB0aWYgPSBubV9vc19tYWxsb2Moc2l6ZW9mKCpwdGlmKSk7CisKKwlpZiAoIXB0
aWYpIHsKKwkJcmV0dXJuIEVOT01FTTsKKwl9CisKKwlOTUFfTE9DSyhubWQpOworCisJcHRpZi0+
aWZwID0gaWZwOworCXB0aWYtPm5pZnBfb2Zmc2V0ID0gbmlmcF9vZmZzZXQ7CisKKwlpZiAocHRu
bWQtPnB0X2lmcykgeworCQlwdGlmLT5uZXh0ID0gcHRubWQtPnB0X2lmczsKKwl9CisJcHRubWQt
PnB0X2lmcyA9IHB0aWY7CisKKwlOTUFfVU5MT0NLKG5tZCk7CisKKwlEKCJhZGRlZCAoaWZwPSVw
LG5pZnBfb2Zmc2V0PSV1KSIsIHB0aWYtPmlmcCwgcHRpZi0+bmlmcF9vZmZzZXQpOworCisJcmV0
dXJuIDA7Cit9CisKKy8qIENhbGxlZCB3aXRoIE5NQV9MT0NLKG5tZCkgaGVsZC4gKi8KK3N0YXRp
YyBzdHJ1Y3QgbWVtX3B0X2lmICoKK25ldG1hcF9tZW1fcHRfZ3Vlc3RfaWZwX2xvb2t1cChzdHJ1
Y3QgbmV0bWFwX21lbV9kICpubWQsIHN0cnVjdCBpZm5ldCAqaWZwKQoreworCXN0cnVjdCBuZXRt
YXBfbWVtX3B0ZyAqcHRubWQgPSAoc3RydWN0IG5ldG1hcF9tZW1fcHRnICopbm1kOworCXN0cnVj
dCBtZW1fcHRfaWYgKmN1cnI7CisKKwlmb3IgKGN1cnIgPSBwdG5tZC0+cHRfaWZzOyBjdXJyOyBj
dXJyID0gY3Vyci0+bmV4dCkgeworCQlpZiAoY3Vyci0+aWZwID09IGlmcCkgeworCQkJcmV0dXJu
IGN1cnI7CisJCX0KKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyogVW5saW5rIGEgcGFzc3Ro
cm91Z2ggaW50ZXJmYWNlIGZyb20gYSBwYXNzdGhyb3VnaCBuZXRtYXAgYWxsb2NhdG9yLiAqLwor
aW50CituZXRtYXBfbWVtX3B0X2d1ZXN0X2lmcF9kZWwoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1k
LCBzdHJ1Y3QgaWZuZXQgKmlmcCkKK3sKKwlzdHJ1Y3QgbmV0bWFwX21lbV9wdGcgKnB0bm1kID0g
KHN0cnVjdCBuZXRtYXBfbWVtX3B0ZyAqKW5tZDsKKwlzdHJ1Y3QgbWVtX3B0X2lmICpwcmV2ID0g
TlVMTDsKKwlzdHJ1Y3QgbWVtX3B0X2lmICpjdXJyOworCWludCByZXQgPSAtMTsKKworCU5NQV9M
T0NLKG5tZCk7CisKKwlmb3IgKGN1cnIgPSBwdG5tZC0+cHRfaWZzOyBjdXJyOyBjdXJyID0gY3Vy
ci0+bmV4dCkgeworCQlpZiAoY3Vyci0+aWZwID09IGlmcCkgeworCQkJaWYgKHByZXYpIHsKKwkJ
CQlwcmV2LT5uZXh0ID0gY3Vyci0+bmV4dDsKKwkJCX0gZWxzZSB7CisJCQkJcHRubWQtPnB0X2lm
cyA9IGN1cnItPm5leHQ7CisJCQl9CisJCQlEKCJyZW1vdmVkIChpZnA9JXAsbmlmcF9vZmZzZXQ9
JXUpIiwKKwkJCSAgY3Vyci0+aWZwLCBjdXJyLT5uaWZwX29mZnNldCk7CisJCQlubV9vc19mcmVl
KGN1cnIpOworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisJCXByZXYgPSBjdXJyOworCX0K
KworCU5NQV9VTkxPQ0sobm1kKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK25l
dG1hcF9tZW1fcHRfZ3Vlc3RfZ2V0X2x1dChzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQsIHN0cnVj
dCBuZXRtYXBfbHV0ICpsdXQpCit7CisJc3RydWN0IG5ldG1hcF9tZW1fcHRnICpwdG5tZCA9IChz
dHJ1Y3QgbmV0bWFwX21lbV9wdGcgKilubWQ7CisKKwlpZiAoIShubWQtPmZsYWdzICYgTkVUTUFQ
X01FTV9GSU5BTElaRUQpKSB7CisJCXJldHVybiBFSU5WQUw7CisJfQorCisJKmx1dCA9IHB0bm1k
LT5idWZfbHV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZXRtYXBfbWVtX3B0X2d1
ZXN0X2dldF9pbmZvKHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCwgdV9pbnQgKnNpemUsCisJCQkg
ICAgIHVfaW50ICptZW1mbGFncywgdWludDE2X3QgKmlkKQoreworCWludCBlcnJvciA9IDA7CisK
KwlOTUFfTE9DSyhubWQpOworCisJZXJyb3IgPSBubWQtPm9wcy0+bm1kX2NvbmZpZyhubWQpOwor
CWlmIChlcnJvcikKKwkJZ290byBvdXQ7CisKKwlpZiAoc2l6ZSkKKwkJKnNpemUgPSBubWQtPm5t
X3RvdGFsc2l6ZTsKKwlpZiAobWVtZmxhZ3MpCisJCSptZW1mbGFncyA9IG5tZC0+ZmxhZ3M7CisJ
aWYgKGlkKQorCQkqaWQgPSBubWQtPm5tX2lkOworCitvdXQ6CisJTk1BX1VOTE9DSyhubWQpOwor
CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm1fcGFkZHJfdAorbmV0bWFwX21lbV9wdF9n
dWVzdF9vZnN0b3BoeXMoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kLCB2bV9vb2Zmc2V0X3Qgb2Zm
KQoreworCXN0cnVjdCBuZXRtYXBfbWVtX3B0ZyAqcHRubWQgPSAoc3RydWN0IG5ldG1hcF9tZW1f
cHRnICopbm1kOworCXZtX3BhZGRyX3QgcGFkZHI7CisJLyogaWYgdGhlIG9mZnNldCBpcyB2YWxp
ZCwganVzdCByZXR1cm4gY3NiLT5iYXNlX2FkZHIgKyBvZmYgKi8KKwlwYWRkciA9ICh2bV9wYWRk
cl90KShwdG5tZC0+bm1fcGFkZHIgKyBvZmYpOworCU5EKCJvZmYgJWx4IHBhZHIgJWx4Iiwgb2Zm
LCAodW5zaWduZWQgbG9uZylwYWRkcik7CisJcmV0dXJuIHBhZGRyOworfQorCitzdGF0aWMgaW50
CituZXRtYXBfbWVtX3B0X2d1ZXN0X2NvbmZpZyhzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQpCit7
CisJLyogbm90aGluZyB0byBkbywgd2UgYXJlIGNvbmZpZ3VyZWQgb24gY3JlYXRpb24KKwkgKiBh
bmQgY29uZmlndXJhdGlvbiBuZXZlciBjaGFuZ2VzIHRoZXJlYWZ0ZXIKKwkgKi8KKwlyZXR1cm4g
MDsKK30KKworc3RhdGljIGludAorbmV0bWFwX21lbV9wdF9ndWVzdF9maW5hbGl6ZShzdHJ1Y3Qg
bmV0bWFwX21lbV9kICpubWQpCit7CisJc3RydWN0IG5ldG1hcF9tZW1fcHRnICpwdG5tZCA9IChz
dHJ1Y3QgbmV0bWFwX21lbV9wdGcgKilubWQ7CisJdWludDY0X3QgbWVtX3NpemU7CisJdWludDMy
X3QgYnVmc2l6ZTsKKwl1aW50MzJfdCBuYnVmZmVyczsKKwl1aW50MzJfdCBwb29sb2ZzOworCXZt
X3BhZGRyX3QgcGFkZHI7CisJY2hhciAqdmFkZHI7CisJaW50IGk7CisJaW50IGVycm9yID0gMDsK
KworCW5tZC0+YWN0aXZlKys7CisKKwlpZiAobm1kLT5mbGFncyAmIE5FVE1BUF9NRU1fRklOQUxJ
WkVEKQorCQlnb3RvIG91dDsKKworCWlmIChwdG5tZC0+cHRuX2RldiA9PSBOVUxMKSB7CisJCUQo
InB0bmV0bWFwIG1lbWRldiBub3QgYXR0YWNoZWQiKTsKKwkJZXJyb3IgPSBFTk9NRU07CisJCWdv
dG8gZXJyOworCX0KKwkvKiBNYXAgbWVtb3J5IHRocm91Z2ggcHRuZXRtYXAtbWVtZGV2IEJBUi4g
Ki8KKwllcnJvciA9IG5tX29zX3B0X21lbWRldl9pb21hcChwdG5tZC0+cHRuX2RldiwgJnB0bm1k
LT5ubV9wYWRkciwKKwkJCQkgICAgICAmcHRubWQtPm5tX2FkZHIsICZtZW1fc2l6ZSk7CisJaWYg
KGVycm9yKQorCQlnb3RvIGVycjsKKworICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBsdXQgdXNp
bmcgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGUKKwkgKiBwdG5ldG1hcCBtZW1vcnkg
ZGV2aWNlLiAqLworICAgICAgICBidWZzaXplID0gbm1fb3NfcHRfbWVtZGV2X2lvcmVhZChwdG5t
ZC0+cHRuX2RldiwKKwkJCQkJIFBUTkVUX01ERVZfSU9fQlVGX1BPT0xfT0JKU1opOworICAgICAg
ICBuYnVmZmVycyA9IG5tX29zX3B0X21lbWRldl9pb3JlYWQocHRubWQtPnB0bl9kZXYsCisJCQkJ
CSBQVE5FVF9NREVWX0lPX0JVRl9QT09MX09CSk5VTSk7CisKKwkvKiBhbGxvY2F0ZSB0aGUgbHV0
ICovCisJaWYgKHB0bm1kLT5idWZfbHV0Lmx1dCA9PSBOVUxMKSB7CisJCUQoImFsbG9jYXRpbmcg
bHV0Iik7CisJCXB0bm1kLT5idWZfbHV0Lmx1dCA9IG5tX2FsbG9jX2x1dChuYnVmZmVycyk7CisJ
CWlmIChwdG5tZC0+YnVmX2x1dC5sdXQgPT0gTlVMTCkgeworCQkJRCgibHV0IGFsbG9jYXRpb24g
ZmFpbGVkIik7CisJCQlyZXR1cm4gRU5PTUVNOworCQl9CisJfQorCisJLyogd2UgaGF2ZSBwaHlz
aWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IG1hcHBlZCB0aHJvdWdoIFBDSSBCQVIgKi8KKwlwb29s
b2ZzID0gbm1fb3NfcHRfbWVtZGV2X2lvcmVhZChwdG5tZC0+cHRuX2RldiwKKwkJCQkJIFBUTkVU
X01ERVZfSU9fQlVGX1BPT0xfT0ZTKTsKKwl2YWRkciA9IChjaGFyICopKHB0bm1kLT5ubV9hZGRy
KSArIHBvb2xvZnM7CisJcGFkZHIgPSBwdG5tZC0+bm1fcGFkZHIgKyBwb29sb2ZzOworCisJZm9y
IChpID0gMDsgaSA8IG5idWZmZXJzOyBpKyspIHsKKwkJcHRubWQtPmJ1Zl9sdXQubHV0W2ldLnZh
ZGRyID0gdmFkZHI7CisJCXB0bm1kLT5idWZfbHV0Lmx1dFtpXS5wYWRkciA9IHBhZGRyOworCQl2
YWRkciArPSBidWZzaXplOworCQlwYWRkciArPSBidWZzaXplOworCX0KKworCXB0bm1kLT5idWZf
bHV0Lm9ianRvdGFsID0gbmJ1ZmZlcnM7CisJcHRubWQtPmJ1Zl9sdXQub2Jqc2l6ZSA9IGJ1ZnNp
emU7CisJbm1kLT5ubV90b3RhbHNpemUgPSAodW5zaWduZWQgaW50KW1lbV9zaXplOworCisJbm1k
LT5mbGFncyB8PSBORVRNQVBfTUVNX0ZJTkFMSVpFRDsKK291dDoKKwlyZXR1cm4gMDsKK2VycjoK
KwlubWQtPmFjdGl2ZS0tOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQKK25ldG1h
cF9tZW1fcHRfZ3Vlc3RfZGVyZWYoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kKQoreworCXN0cnVj
dCBuZXRtYXBfbWVtX3B0ZyAqcHRubWQgPSAoc3RydWN0IG5ldG1hcF9tZW1fcHRnICopbm1kOwor
CisJbm1kLT5hY3RpdmUtLTsKKwlpZiAobm1kLT5hY3RpdmUgPD0gMCAmJgorCQkobm1kLT5mbGFn
cyAmIE5FVE1BUF9NRU1fRklOQUxJWkVEKSkgeworCSAgICBubWQtPmZsYWdzICAmPSB+TkVUTUFQ
X01FTV9GSU5BTElaRUQ7CisJICAgIC8qIHVubWFwIHB0bmV0bWFwLW1lbWRldiBtZW1vcnkgKi8K
KwkgICAgaWYgKHB0bm1kLT5wdG5fZGV2KSB7CisJCW5tX29zX3B0X21lbWRldl9pb3VubWFwKHB0
bm1kLT5wdG5fZGV2KTsKKwkgICAgfQorCSAgICBwdG5tZC0+bm1fYWRkciA9IDA7CisJICAgIHB0
bm1kLT5ubV9wYWRkciA9IDA7CisJfQorfQorCitzdGF0aWMgc3NpemVfdAorbmV0bWFwX21lbV9w
dF9ndWVzdF9pZl9vZmZzZXQoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kLCBjb25zdCB2b2lkICp2
YWRkcikKK3sKKwlzdHJ1Y3QgbmV0bWFwX21lbV9wdGcgKnB0bm1kID0gKHN0cnVjdCBuZXRtYXBf
bWVtX3B0ZyAqKW5tZDsKKworCXJldHVybiAoY29uc3QgY2hhciAqKSh2YWRkcikgLSAoY2hhciAq
KShwdG5tZC0+bm1fYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkCituZXRtYXBfbWVtX3B0X2d1ZXN0
X2RlbGV0ZShzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQpCit7CisJaWYgKG5tZCA9PSBOVUxMKQor
CQlyZXR1cm47CisJaWYgKG5ldG1hcF92ZXJib3NlKQorCQlEKCJkZWxldGluZyAlcCIsIG5tZCk7
CisJaWYgKG5tZC0+YWN0aXZlID4gMCkKKwkJRCgiYnVnOiBkZWxldGluZyBtZW0gYWxsb2NhdG9y
IHdpdGggYWN0aXZlPSVkISIsIG5tZC0+YWN0aXZlKTsKKwlpZiAobmV0bWFwX3ZlcmJvc2UpCisJ
CUQoImRvbmUgZGVsZXRpbmcgJXAiLCBubWQpOworCU5NQV9MT0NLX0RFU1RST1kobm1kKTsKKwlu
bV9vc19mcmVlKG5tZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0bWFwX2lmICoKK25ldG1hcF9t
ZW1fcHRfZ3Vlc3RfaWZfbmV3KHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEpCit7CisJc3RydWN0
IG5ldG1hcF9tZW1fcHRnICpwdG5tZCA9IChzdHJ1Y3QgbmV0bWFwX21lbV9wdGcgKiluYS0+bm1f
bWVtOworCXN0cnVjdCBtZW1fcHRfaWYgKnB0aWY7CisJc3RydWN0IG5ldG1hcF9pZiAqbmlmcCA9
IE5VTEw7CisKKwlOTUFfTE9DSyhuYS0+bm1fbWVtKTsKKworCXB0aWYgPSBuZXRtYXBfbWVtX3B0
X2d1ZXN0X2lmcF9sb29rdXAobmEtPm5tX21lbSwgbmEtPmlmcCk7CisJaWYgKHB0aWYgPT0gTlVM
TCkgeworCQlEKCJFcnJvcjogaW50ZXJmYWNlICVwIGlzIG5vdCBpbiBwYXNzdGhyb3VnaCIsIG5h
LT5pZnApOworCQlnb3RvIG91dDsKKwl9CisKKwluaWZwID0gKHN0cnVjdCBuZXRtYXBfaWYgKiko
KGNoYXIgKikocHRubWQtPm5tX2FkZHIpICsKKwkJCQkgICAgcHRpZi0+bmlmcF9vZmZzZXQpOwor
CU5NQV9VTkxPQ0sobmEtPm5tX21lbSk7CitvdXQ6CisJcmV0dXJuIG5pZnA7Cit9CisKK3N0YXRp
YyB2b2lkCituZXRtYXBfbWVtX3B0X2d1ZXN0X2lmX2RlbGV0ZShzdHJ1Y3QgbmV0bWFwX2FkYXB0
ZXIgKm5hLCBzdHJ1Y3QgbmV0bWFwX2lmICpuaWZwKQoreworCXN0cnVjdCBtZW1fcHRfaWYgKnB0
aWY7CisKKwlOTUFfTE9DSyhuYS0+bm1fbWVtKTsKKwlwdGlmID0gbmV0bWFwX21lbV9wdF9ndWVz
dF9pZnBfbG9va3VwKG5hLT5ubV9tZW0sIG5hLT5pZnApOworCWlmIChwdGlmID09IE5VTEwpIHsK
KwkJRCgiRXJyb3I6IGludGVyZmFjZSAlcCBpcyBub3QgaW4gcGFzc3Rocm91Z2giLCBuYS0+aWZw
KTsKKwl9CisJTk1BX1VOTE9DSyhuYS0+bm1fbWVtKTsKK30KKworc3RhdGljIGludAorbmV0bWFw
X21lbV9wdF9ndWVzdF9yaW5nc19jcmVhdGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSkKK3sK
KwlzdHJ1Y3QgbmV0bWFwX21lbV9wdGcgKnB0bm1kID0gKHN0cnVjdCBuZXRtYXBfbWVtX3B0ZyAq
KW5hLT5ubV9tZW07CisJc3RydWN0IG1lbV9wdF9pZiAqcHRpZjsKKwlzdHJ1Y3QgbmV0bWFwX2lm
ICpuaWZwOworCWludCBpLCBlcnJvciA9IC0xOworCisJTk1BX0xPQ0sobmEtPm5tX21lbSk7CisK
KwlwdGlmID0gbmV0bWFwX21lbV9wdF9ndWVzdF9pZnBfbG9va3VwKG5hLT5ubV9tZW0sIG5hLT5p
ZnApOworCWlmIChwdGlmID09IE5VTEwpIHsKKwkJRCgiRXJyb3I6IGludGVyZmFjZSAlcCBpcyBu
b3QgaW4gcGFzc3Rocm91Z2giLCBuYS0+aWZwKTsKKwkJZ290byBvdXQ7CisJfQorCisKKwkvKiBw
b2ludCBlYWNoIGtyaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIGJhY2tlbmQgcmluZyAqLworCW5p
ZnAgPSAoc3RydWN0IG5ldG1hcF9pZiAqKSgoY2hhciAqKXB0bm1kLT5ubV9hZGRyICsgcHRpZi0+
bmlmcF9vZmZzZXQpOworCWZvciAoaSA9IDA7IGkgPD0gbmEtPm51bV90eF9yaW5nczsgaSsrKSB7
CisJCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nID0gbmEtPnR4X3JpbmdzICsgaTsKKwkJaWYg
KGtyaW5nLT5yaW5nKQorCQkJY29udGludWU7CisJCWtyaW5nLT5yaW5nID0gKHN0cnVjdCBuZXRt
YXBfcmluZyAqKQorCQkJKChjaGFyICopbmlmcCArIG5pZnAtPnJpbmdfb2ZzW2ldKTsKKwl9CisJ
Zm9yIChpID0gMDsgaSA8PSBuYS0+bnVtX3J4X3JpbmdzOyBpKyspIHsKKwkJc3RydWN0IG5ldG1h
cF9rcmluZyAqa3JpbmcgPSBuYS0+cnhfcmluZ3MgKyBpOworCQlpZiAoa3JpbmctPnJpbmcpCisJ
CQljb250aW51ZTsKKwkJa3JpbmctPnJpbmcgPSAoc3RydWN0IG5ldG1hcF9yaW5nICopCisJCQko
KGNoYXIgKiluaWZwICsKKwkJCSBuaWZwLT5yaW5nX29mc1tpICsgbmEtPm51bV90eF9yaW5ncyAr
IDFdKTsKKwl9CisKKwllcnJvciA9IDA7CitvdXQ6CisJTk1BX1VOTE9DSyhuYS0+bm1fbWVtKTsK
KworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQKK25ldG1hcF9tZW1fcHRfZ3Vlc3Rf
cmluZ3NfZGVsZXRlKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEpCit7CisJLyogVE9ETzogcmVt
b3ZlPz8gKi8KKyNpZiAwCisJc3RydWN0IG5ldG1hcF9tZW1fcHRnICpwdG5tZCA9IChzdHJ1Y3Qg
bmV0bWFwX21lbV9wdGcgKiluYS0+bm1fbWVtOworCXN0cnVjdCBtZW1fcHRfaWYgKnB0aWYgPSBu
ZXRtYXBfbWVtX3B0X2d1ZXN0X2lmcF9sb29rdXAobmEtPm5tX21lbSwKKwkJCQkJCQkJbmEtPmlm
cCk7CisjZW5kaWYKK30KKworc3RhdGljIHN0cnVjdCBuZXRtYXBfbWVtX29wcyBuZXRtYXBfbWVt
X3B0X2d1ZXN0X29wcyA9IHsKKwkubm1kX2dldF9sdXQgPSBuZXRtYXBfbWVtX3B0X2d1ZXN0X2dl
dF9sdXQsCisJLm5tZF9nZXRfaW5mbyA9IG5ldG1hcF9tZW1fcHRfZ3Vlc3RfZ2V0X2luZm8sCisJ
Lm5tZF9vZnN0b3BoeXMgPSBuZXRtYXBfbWVtX3B0X2d1ZXN0X29mc3RvcGh5cywKKwkubm1kX2Nv
bmZpZyA9IG5ldG1hcF9tZW1fcHRfZ3Vlc3RfY29uZmlnLAorCS5ubWRfZmluYWxpemUgPSBuZXRt
YXBfbWVtX3B0X2d1ZXN0X2ZpbmFsaXplLAorCS5ubWRfZGVyZWYgPSBuZXRtYXBfbWVtX3B0X2d1
ZXN0X2RlcmVmLAorCS5ubWRfaWZfb2Zmc2V0ID0gbmV0bWFwX21lbV9wdF9ndWVzdF9pZl9vZmZz
ZXQsCisJLm5tZF9kZWxldGUgPSBuZXRtYXBfbWVtX3B0X2d1ZXN0X2RlbGV0ZSwKKwkubm1kX2lm
X25ldyA9IG5ldG1hcF9tZW1fcHRfZ3Vlc3RfaWZfbmV3LAorCS5ubWRfaWZfZGVsZXRlID0gbmV0
bWFwX21lbV9wdF9ndWVzdF9pZl9kZWxldGUsCisJLm5tZF9yaW5nc19jcmVhdGUgPSBuZXRtYXBf
bWVtX3B0X2d1ZXN0X3JpbmdzX2NyZWF0ZSwKKwkubm1kX3JpbmdzX2RlbGV0ZSA9IG5ldG1hcF9t
ZW1fcHRfZ3Vlc3RfcmluZ3NfZGVsZXRlCiB9OworCisvKiBDYWxsZWQgd2l0aCBubV9tZW1fbGlz
dF9sb2NrIGhlbGQuICovCitzdGF0aWMgc3RydWN0IG5ldG1hcF9tZW1fZCAqCituZXRtYXBfbWVt
X3B0X2d1ZXN0X2ZpbmRfbWVtaWQobm1fbWVtaWRfdCBtZW1faWQpCit7CisJc3RydWN0IG5ldG1h
cF9tZW1fZCAqbWVtID0gTlVMTDsKKwlzdHJ1Y3QgbmV0bWFwX21lbV9kICpzY2FuID0gbmV0bWFw
X2xhc3RfbWVtX2Q7CisKKwlkbyB7CisJCS8qIGZpbmQgcHRuZXRtYXAgYWxsb2NhdG9yIHRocm91
Z2ggaG9zdCBJRCAqLworCQlpZiAoc2Nhbi0+b3BzLT5ubWRfZGVyZWYgPT0gbmV0bWFwX21lbV9w
dF9ndWVzdF9kZXJlZiAmJgorCQkJKChzdHJ1Y3QgbmV0bWFwX21lbV9wdGcgKikoc2NhbikpLT5o
b3N0X21lbV9pZCA9PSBtZW1faWQpIHsKKwkJCW1lbSA9IHNjYW47CisJCQltZW0tPnJlZmNvdW50
Kys7CisJCQlicmVhazsKKwkJfQorCQlzY2FuID0gc2Nhbi0+bmV4dDsKKwl9IHdoaWxlIChzY2Fu
ICE9IG5ldG1hcF9sYXN0X21lbV9kKTsKKworCXJldHVybiBtZW07Cit9CisKKy8qIENhbGxlZCB3
aXRoIG5tX21lbV9saXN0X2xvY2sgaGVsZC4gKi8KK3N0YXRpYyBzdHJ1Y3QgbmV0bWFwX21lbV9k
ICoKK25ldG1hcF9tZW1fcHRfZ3Vlc3RfY3JlYXRlKG5tX21lbWlkX3QgbWVtX2lkKQoreworCXN0
cnVjdCBuZXRtYXBfbWVtX3B0ZyAqcHRubWQ7CisJaW50IGVyciA9IDA7CisKKwlwdG5tZCA9IG5t
X29zX21hbGxvYyhzaXplb2Yoc3RydWN0IG5ldG1hcF9tZW1fcHRnKSk7CisJaWYgKHB0bm1kID09
IE5VTEwpIHsKKwkJZXJyID0gRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCXB0bm1kLT51
cC5vcHMgPSAmbmV0bWFwX21lbV9wdF9ndWVzdF9vcHM7CisJcHRubWQtPmhvc3RfbWVtX2lkID0g
bWVtX2lkOworCXB0bm1kLT5wdF9pZnMgPSBOVUxMOworCisgICAgICAgIC8qIEFzc2lnbiBuZXcg
aWQgaW4gdGhlIGd1ZXN0IChXZSBoYXZlIHRoZSBsb2NrKSAqLworCWVyciA9IG5tX21lbV9hc3Np
Z25faWRfbG9ja2VkKCZwdG5tZC0+dXApOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisKKwlw
dG5tZC0+dXAuZmxhZ3MgJj0gfk5FVE1BUF9NRU1fRklOQUxJWkVEOworCXB0bm1kLT51cC5mbGFn
cyB8PSBORVRNQVBfTUVNX0lPOworCisJTk1BX0xPQ0tfSU5JVCgmcHRubWQtPnVwKTsKKworCXNu
cHJpbnRmKHB0bm1kLT51cC5uYW1lLCBOTV9NRU1fTkFNRVNaLCAiJWQiLCBwdG5tZC0+dXAubm1f
aWQpOworCisKKwlyZXR1cm4gJnB0bm1kLT51cDsKK2Vycm9yOgorCW5ldG1hcF9tZW1fcHRfZ3Vl
c3RfZGVsZXRlKCZwdG5tZC0+dXApOworCXJldHVybiBOVUxMOworfQorCisvKgorICogZmluZCBo
b3N0IGlkIGluIGd1ZXN0IGFsbG9jYXRvcnMgYW5kIGNyZWF0ZSBndWVzdCBhbGxvY2F0b3IKKyAq
IGlmIGl0IGlzIG5vdCB0aGVyZQorICovCitzdGF0aWMgc3RydWN0IG5ldG1hcF9tZW1fZCAqCitu
ZXRtYXBfbWVtX3B0X2d1ZXN0X2dldChubV9tZW1pZF90IG1lbV9pZCkKK3sKKwlzdHJ1Y3QgbmV0
bWFwX21lbV9kICpubWQ7CisKKwlOTV9NVFhfTE9DSyhubV9tZW1fbGlzdF9sb2NrKTsKKwlubWQg
PSBuZXRtYXBfbWVtX3B0X2d1ZXN0X2ZpbmRfbWVtaWQobWVtX2lkKTsKKwlpZiAobm1kID09IE5V
TEwpIHsKKwkJbm1kID0gbmV0bWFwX21lbV9wdF9ndWVzdF9jcmVhdGUobWVtX2lkKTsKKwl9CisJ
Tk1fTVRYX1VOTE9DSyhubV9tZW1fbGlzdF9sb2NrKTsKKworCXJldHVybiBubWQ7Cit9CisKKy8q
CisgKiBUaGUgZ3Vlc3QgYWxsb2NhdG9yIGNhbiBiZSBjcmVhdGVkIGJ5IHB0bmV0bWFwX21lbWRl
diAoZHVyaW5nIHRoZSBkZXZpY2UKKyAqIGF0dGFjaCkgb3IgYnkgcHRuZXRtYXAgZGV2aWNlIChw
dG5ldCksIGR1cmluZyB0aGUgbmV0bWFwX2F0dGFjaC4KKyAqCisgKiBUaGUgb3JkZXIgaXMgbm90
IGltcG9ydGFudCAod2UgaGF2ZSBkaWZmZXJlbnQgb3JkZXIgaW4gTElOVVggYW5kIEZyZWVCU0Qp
LgorICogVGhlIGZpcnN0IG9uZSwgY3JlYXRlcyB0aGUgZGV2aWNlLCBhbmQgdGhlIHNlY29uZCBv
bmUgc2ltcGx5IGF0dGFjaGVzIGl0LgorICovCisKKy8qIENhbGxlZCB3aGVuIHB0bmV0bWFwX21l
bWRldiBpcyBhdHRhY2hpbmcsIHRvIGF0dGFjaCBhIG5ldyBhbGxvY2F0b3IgaW4KKyAqIHRoZSBn
dWVzdCAqLworc3RydWN0IG5ldG1hcF9tZW1fZCAqCituZXRtYXBfbWVtX3B0X2d1ZXN0X2F0dGFj
aChzdHJ1Y3QgcHRuZXRtYXBfbWVtZGV2ICpwdG5fZGV2LCBubV9tZW1pZF90IG1lbV9pZCkKK3sK
KwlzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQ7CisJc3RydWN0IG5ldG1hcF9tZW1fcHRnICpwdG5t
ZDsKKworCW5tZCA9IG5ldG1hcF9tZW1fcHRfZ3Vlc3RfZ2V0KG1lbV9pZCk7CisKKwkvKiBhc3Np
Z24gdGhpcyBkZXZpY2UgdG8gdGhlIGd1ZXN0IGFsbG9jYXRvciAqLworCWlmIChubWQpIHsKKwkJ
cHRubWQgPSAoc3RydWN0IG5ldG1hcF9tZW1fcHRnICopbm1kOworCQlwdG5tZC0+cHRuX2RldiA9
IHB0bl9kZXY7CisJfQorCisJcmV0dXJuIG5tZDsKK30KKworLyogQ2FsbGVkIHdoZW4gcHRuZXQg
ZGV2aWNlIGlzIGF0dGFjaGluZyAqLworc3RydWN0IG5ldG1hcF9tZW1fZCAqCituZXRtYXBfbWVt
X3B0X2d1ZXN0X25ldyhzdHJ1Y3QgaWZuZXQgKmlmcCwKKwkJCXVuc2lnbmVkIGludCBuaWZwX29m
ZnNldCwKKwkJCXVuc2lnbmVkIGludCBtZW1pZCkKK3sKKwlzdHJ1Y3QgbmV0bWFwX21lbV9kICpu
bWQ7CisKKwlpZiAoaWZwID09IE5VTEwpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbm1kID0g
bmV0bWFwX21lbV9wdF9ndWVzdF9nZXQoKG5tX21lbWlkX3QpbWVtaWQpOworCisJaWYgKG5tZCkg
eworCQluZXRtYXBfbWVtX3B0X2d1ZXN0X2lmcF9hZGQobm1kLCBpZnAsIG5pZnBfb2Zmc2V0KTsK
Kwl9CisKKwlyZXR1cm4gbm1kOworfQorCisjZW5kaWYgLyogV0lUSF9QVE5FVE1BUF9HVUVTVCAq
LwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIuaCAvdXNy
L3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfbWVtMi5oCi0tLSB1c3Ivc3JjL3N5cy9kZXYvbmV0
bWFwL25ldG1hcF9tZW0yLmgJMjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAgKzAxMDAKKysr
IC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9tZW0yLmgJMjAxNi0xMS0yMyAxNjo1Nzo1
Ny44NTI1MTgwMDAgKzAwMDAKQEAgLTEsNSArMSw4IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTQgTWF0dGVvIExhbmRpLCBMdWlnaSBSaXp6bywgR2l1c2VwcGUgTGV0dGllcmkuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBNYXR0ZW8gTGFu
ZGkKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEx1aWdpIFJpenpvCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxNiBHaXVzZXBwZSBMZXR0aWVyaQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsNyArMjcsNyBAQAogICovCiAK
IC8qCi0gKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIu
aCAyODUzNDkgMjAxNS0wNy0xMCAwNTo1MTozNlogbHVpZ2kgJAorICogJEZyZWVCU0Q6IGhlYWQv
c3lzL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIuYyAyMzQyOTAgMjAxMi0wNC0xNCAxNjo0NDoxOFog
bHVpZ2kgJAogICoKICAqIChOZXcpIG1lbW9yeSBhbGxvY2F0b3IgZm9yIG5ldG1hcAogICovCkBA
IC0xMTYsOSArMTE5LDE0IEBACiAgKi8KIAogZXh0ZXJuIHN0cnVjdCBuZXRtYXBfbWVtX2Qgbm1f
bWVtOwordHlwZWRlZiB1aW50MTZfdCBubV9tZW1pZF90OwogCi12b2lkCSAgIG5ldG1hcF9tZW1f
Z2V0X2x1dChzdHJ1Y3QgbmV0bWFwX21lbV9kICosIHN0cnVjdCBuZXRtYXBfbHV0ICopOworaW50
CSAgIG5ldG1hcF9tZW1fZ2V0X2x1dChzdHJ1Y3QgbmV0bWFwX21lbV9kICosIHN0cnVjdCBuZXRt
YXBfbHV0ICopOworbm1fbWVtaWRfdCBuZXRtYXBfbWVtX2dldF9pZChzdHJ1Y3QgbmV0bWFwX21l
bV9kICopOwogdm1fcGFkZHJfdCBuZXRtYXBfbWVtX29mc3RvcGh5cyhzdHJ1Y3QgbmV0bWFwX21l
bV9kICosIHZtX29vZmZzZXRfdCk7CisjaWZkZWYgX1dJTjMyCitQTURMIHdpbjMyX2J1aWxkX3Vz
ZXJfdm1fbWFwKHN0cnVjdCBuZXRtYXBfbWVtX2QqIG5tZCk7CisjZW5kaWYKIGludAkgICBuZXRt
YXBfbWVtX2ZpbmFsaXplKHN0cnVjdCBuZXRtYXBfbWVtX2QgKiwgc3RydWN0IG5ldG1hcF9hZGFw
dGVyICopOwogaW50IAkgICBuZXRtYXBfbWVtX2luaXQodm9pZCk7CiB2b2lkIAkgICBuZXRtYXBf
bWVtX2Zpbmkodm9pZCk7CkBAIC0xMjcsMzUgKzEzNSwyNyBAQAogaW50CSAgIG5ldG1hcF9tZW1f
cmluZ3NfY3JlYXRlKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqKTsKIHZvaWQJICAgbmV0bWFwX21l
bV9yaW5nc19kZWxldGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICopOwogdm9pZCAJICAgbmV0bWFw
X21lbV9kZXJlZihzdHJ1Y3QgbmV0bWFwX21lbV9kICosIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAq
KTsKK2ludAluZXRtYXBfbWVtMl9nZXRfcG9vbF9pbmZvKHN0cnVjdCBuZXRtYXBfbWVtX2QgKiwg
dV9pbnQsIHVfaW50ICosIHVfaW50ICopOwogaW50CSAgIG5ldG1hcF9tZW1fZ2V0X2luZm8oc3Ry
dWN0IG5ldG1hcF9tZW1fZCAqLCB1X2ludCAqc2l6ZSwgdV9pbnQgKm1lbWZsYWdzLCB1aW50MTZf
dCAqaWQpOwogc3NpemVfdCAgICBuZXRtYXBfbWVtX2lmX29mZnNldChzdHJ1Y3QgbmV0bWFwX21l
bV9kICosIGNvbnN0IHZvaWQgKnZhZGRyKTsKLXN0cnVjdCBuZXRtYXBfbWVtX2QqIG5ldG1hcF9t
ZW1fcHJpdmF0ZV9uZXcoY29uc3QgY2hhciAqbmFtZSwKLQl1X2ludCB0eHIsIHVfaW50IHR4ZCwg
dV9pbnQgcnhyLCB1X2ludCByeGQsIHVfaW50IGV4dHJhX2J1ZnMsIHVfaW50IG5waXBlcywKLQlp
bnQqIGVycm9yKTsKK3N0cnVjdCBuZXRtYXBfbWVtX2QqIG5ldG1hcF9tZW1fcHJpdmF0ZV9uZXco
IHVfaW50IHR4ciwgdV9pbnQgdHhkLCB1X2ludCByeHIsIHVfaW50IHJ4ZCwKKwkJdV9pbnQgZXh0
cmFfYnVmcywgdV9pbnQgbnBpcGVzLCBpbnQqIGVycm9yKTsKIHZvaWQJICAgbmV0bWFwX21lbV9k
ZWxldGUoc3RydWN0IG5ldG1hcF9tZW1fZCAqKTsKIAotLy8jZGVmaW5lIE5NX0RFQlVHX01FTV9Q
VVRHRVQgMQotCi0jaWZkZWYgTk1fREVCVUdfTUVNX1BVVEdFVAotCi0jZGVmaW5lIG5ldG1hcF9t
ZW1fZ2V0KG5tZCkgCQkJCVwKLQlkbyB7CQkJCQkJXAotCQlfX25ldG1hcF9tZW1fZ2V0KG5tZCwg
X19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIG5ldG1h
cF9tZW1fcHV0KG5tZCkJCQkJXAotCWRvIHsJCQkJCQlcCi0JCV9fbmV0bWFwX21lbV9wdXQobm1k
LCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsJXAotCX0gd2hpbGUgKDApCi0KLXZvaWQgX19uZXRt
YXBfbWVtX2dldChzdHJ1Y3QgbmV0bWFwX21lbV9kICosIGNvbnN0IGNoYXIgKiwgaW50KTsKLXZv
aWQgX19uZXRtYXBfbWVtX3B1dChzdHJ1Y3QgbmV0bWFwX21lbV9kICosIGNvbnN0IGNoYXIgKiwg
aW50KTsKLSNlbHNlIC8qICFOTV9ERUJVR19NRU1fUFVUR0VUICovCi0KLXZvaWQgbmV0bWFwX21l
bV9nZXQoc3RydWN0IG5ldG1hcF9tZW1fZCAqKTsKK3N0cnVjdCBuZXRtYXBfbWVtX2QqIG5ldG1h
cF9tZW1fZ2V0KHN0cnVjdCBuZXRtYXBfbWVtX2QgKik7CiB2b2lkIG5ldG1hcF9tZW1fcHV0KHN0
cnVjdCBuZXRtYXBfbWVtX2QgKik7CitzdHJ1Y3QgbmV0bWFwX21lbV9kKiBuZXRtYXBfbWVtX2Zp
bmQobm1fbWVtaWRfdCk7CisKKyNpZmRlZiBXSVRIX1BUTkVUTUFQX0dVRVNUCitzdHJ1Y3QgbmV0
bWFwX21lbV9kKiBuZXRtYXBfbWVtX3B0X2d1ZXN0X25ldyhzdHJ1Y3QgaWZuZXQgKiwKKwkJCQkJ
ICAgICB1bnNpZ25lZCBpbnQgbmlmcF9vZmZzZXQsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IG1l
bWlkKTsKK3N0cnVjdCBwdG5ldG1hcF9tZW1kZXY7CitzdHJ1Y3QgbmV0bWFwX21lbV9kKiBuZXRt
YXBfbWVtX3B0X2d1ZXN0X2F0dGFjaChzdHJ1Y3QgcHRuZXRtYXBfbWVtZGV2ICosIHVpbnQxNl90
KTsKK2ludCBuZXRtYXBfbWVtX3B0X2d1ZXN0X2lmcF9kZWwoc3RydWN0IG5ldG1hcF9tZW1fZCAq
LCBzdHJ1Y3QgaWZuZXQgKik7CisjZW5kaWYgLyogV0lUSF9QVE5FVE1BUF9HVUVTVCAqLwogCi0j
ZW5kaWYgLyogIU5NX0RFQlVHX1BVVEdFVCAqLworaW50IG5ldG1hcF9tZW1fcG9vbHNfaW5mb19n
ZXQoc3RydWN0IG5tcmVxICosIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqKTsKIAogI2RlZmluZSBO
RVRNQVBfTUVNX1BSSVZBVEUJMHgyCS8qIGFsbG9jYXRvciB1c2VzIHByaXZhdGUgYWRkcmVzcyBz
cGFjZSAqLwogI2RlZmluZSBORVRNQVBfTUVNX0lPCQkweDQJLyogdGhlIHVuZGVybHlpbmcgbWVt
b3J5IGlzIG1tYXBwZWQgSS9PICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvZGV2L25ldG1h
cC9uZXRtYXBfbW9uaXRvci5jIC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9tb25pdG9y
LmMKLS0tIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21vbml0b3IuYwkyMDE2LTA5LTI5
IDAwOjI0OjQ3LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0
bWFwX21vbml0b3IuYwkyMDE2LTEyLTAxIDA5OjUxOjI4LjcxNTEzODAwMCArMDAwMApAQCAtMSw1
ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgR2l1c2VwcGUgTGV0dGllcmkuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBHaXVzZXBwZSBM
ZXR0aWVyaQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjQsNyArMjUsNyBAQAogICovCiAKIC8qCi0gKiAkRnJlZUJTRDogcmVsZW5n
LzExLjAvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21vbml0b3IuYyAyODU2OTYgMjAxNS0wNy0xOSAx
ODowNDo1MVogbHVpZ2kgJAorICogJEZyZWVCU0Q6IGhlYWQvc3lzL2Rldi9uZXRtYXAvbmV0bWFw
X3ptb24uYyAyNzAwNjMgMjAxNC0wOC0xNiAxNTowMDowMVogbHVpZ2kgJAogICoKICAqIE1vbml0
b3JzCiAgKgpAQCAtMTAxLDYgKzEwMiw4IEBACiAjd2FybmluZyBPU1ggc3VwcG9ydCBpcyBvbmx5
IHBhcnRpYWwKICNpbmNsdWRlICJvc3hfZ2x1ZS5oIgogCisjZWxpZiBkZWZpbmVkKF9XSU4zMikK
KyNpbmNsdWRlICJ3aW5fZ2x1ZS5oIgogI2Vsc2UKIAogI2Vycm9yCVVuc3VwcG9ydGVkIHBsYXRm
b3JtCkBAIC0xNDUsMTkgKzE0OCwyMyBAQAogbmV0bWFwX21vbml0b3JfcnhzeW5jKHN0cnVjdCBu
ZXRtYXBfa3JpbmcgKmtyaW5nLCBpbnQgZmxhZ3MpCiB7CiAgICAgICAgIE5EKCIlcyAleCIsIGty
aW5nLT5uYW1lLCBmbGFncyk7Ci0Ja3JpbmctPm5yX2h3Y3VyID0ga3JpbmctPnJjdXI7CisJa3Jp
bmctPm5yX2h3Y3VyID0ga3JpbmctPnJoZWFkOwogCW1iKCk7CiAgICAgICAgIHJldHVybiAwOwog
fQogCiAvKiBubV9rcmluZ3NfY3JlYXRlIGNhbGxiYWNrcyBmb3IgbW9uaXRvcnMuCi0gKiBXZSBj
b3VsZCB1c2UgdGhlIGRlZmF1bHQgbmV0bWFwX2h3X2tyaW5nc196bW9uLCBidXQKLSAqIHdlIGRv
bid0IG5lZWQgdGhlIG1icS4KICAqLwogc3RhdGljIGludAogbmV0bWFwX21vbml0b3Jfa3Jpbmdz
X2NyZWF0ZShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKQogewotCXJldHVybiBuZXRtYXBfa3Jp
bmdzX2NyZWF0ZShuYSwgMCk7CisJaW50IGVycm9yID0gbmV0bWFwX2tyaW5nc19jcmVhdGUobmEs
IDApOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCS8qIG92ZXJyaWRlIHRoZSBob3N0
IHJpbmdzIGNhbGxiYWNrcyAqLworCW5hLT50eF9yaW5nc1tuYS0+bnVtX3R4X3JpbmdzXS5ubV9z
eW5jID0gbmV0bWFwX21vbml0b3JfdHhzeW5jOworCW5hLT5yeF9yaW5nc1tuYS0+bnVtX3J4X3Jp
bmdzXS5ubV9zeW5jID0gbmV0bWFwX21vbml0b3JfcnhzeW5jOworCXJldHVybiAwOwogfQogCiAv
KiBubV9rcmluZ3NfZGVsZXRlIGNhbGxiYWNrIGZvciBtb25pdG9ycyAqLwpAQCAtMTc4LDE1ICsx
ODUsMTYgQEAKIHN0YXRpYyBpbnQKIG5tX21vbml0b3JfYWxsb2Moc3RydWN0IG5ldG1hcF9rcmlu
ZyAqa3JpbmcsIHVfaW50IG4pCiB7Ci0Jc2l6ZV90IGxlbjsKKwlzaXplX3Qgb2xkX2xlbiwgbGVu
OwogCXN0cnVjdCBuZXRtYXBfa3JpbmcgKipubTsKIAogCWlmIChuIDw9IGtyaW5nLT5tYXhfbW9u
aXRvcnMpCiAJCS8qIHdlIGFscmVhZHkgaGF2ZSBtb3JlIGVudHJpZXMgdGhhdCByZXF1ZXN0ZWQg
Ki8KIAkJcmV0dXJuIDA7CiAJCisJb2xkX2xlbiA9IHNpemVvZihzdHJ1Y3QgbmV0bWFwX2tyaW5n
ICopKmtyaW5nLT5tYXhfbW9uaXRvcnM7CiAgICAgICAgIGxlbiA9IHNpemVvZihzdHJ1Y3QgbmV0
bWFwX2tyaW5nICopICogbjsKLQlubSA9IHJlYWxsb2Moa3JpbmctPm1vbml0b3JzLCBsZW4sIE1f
REVWQlVGLCBNX05PV0FJVCB8IE1fWkVSTyk7CisJbm0gPSBubV9vc19yZWFsbG9jKGtyaW5nLT5t
b25pdG9ycywgbGVuLCBvbGRfbGVuKTsKIAlpZiAobm0gPT0gTlVMTCkKIAkJcmV0dXJuIEVOT01F
TTsKIApAQCAtMjA1LDcgKzIxMyw3IEBACiAJCQlEKCJmcmVlaW5nIG5vdCBlbXB0eSBtb25pdG9y
IGFycmF5IGZvciAlcyAoJWQgZGFuZ2xpbmcgbW9uaXRvcnMpISIsIGtyaW5nLT5uYW1lLAogCQkJ
CQlrcmluZy0+bl9tb25pdG9ycyk7CiAJCX0KLQkJZnJlZShrcmluZy0+bW9uaXRvcnMsIE1fREVW
QlVGKTsKKwkJbm1fb3NfZnJlZShrcmluZy0+bW9uaXRvcnMpOwogCQlrcmluZy0+bW9uaXRvcnMg
PSBOVUxMOwogCQlrcmluZy0+bWF4X21vbml0b3JzID0gMDsKIAkJa3JpbmctPm5fbW9uaXRvcnMg
PSAwOwpAQCAtMjI5LDIwICsyMzcsMjAgQEAKIHN0YXRpYyBpbnQKIG5ldG1hcF9tb25pdG9yX2Fk
ZChzdHJ1Y3QgbmV0bWFwX2tyaW5nICpta3JpbmcsIHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5n
LCBpbnQgemNvcHkpCiB7Ci0JaW50IGVycm9yID0gMDsKKwlpbnQgZXJyb3IgPSBOTV9JUlFfQ09N
UExFVEVEOwogCiAJLyogc2luY2hyb25pemUgd2l0aCBjb25jdXJyZW50bHkgcnVubmluZyBubV9z
eW5jKClzICovCi0Jbm1fa3JfZ2V0KGtyaW5nKTsKKwlubV9rcl9zdG9wKGtyaW5nLCBOTV9LUl9M
T0NLRUQpOwogCS8qIG1ha2Ugc3VyZSB0aGUgbW9uaXRvciBhcnJheSBleGlzdHMgYW5kIGlzIGJp
ZyBlbm91Z2ggKi8KIAllcnJvciA9IG5tX21vbml0b3JfYWxsb2Moa3JpbmcsIGtyaW5nLT5uX21v
bml0b3JzICsgMSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKIAlrcmluZy0+bW9uaXRvcnNb
a3JpbmctPm5fbW9uaXRvcnNdID0gbWtyaW5nOwotCW1rcmluZy0+bW9uX3BvcyA9IGtyaW5nLT5u
X21vbml0b3JzOworCW1rcmluZy0+bW9uX3Bvc1trcmluZy0+dHhdID0ga3JpbmctPm5fbW9uaXRv
cnM7CiAJa3JpbmctPm5fbW9uaXRvcnMrKzsKIAlpZiAoa3JpbmctPm5fbW9uaXRvcnMgPT0gMSkg
ewogCQkvKiB0aGlzIGlzIHRoZSBmaXJzdCBtb25pdG9yLCBpbnRlcmNlcHQgY2FsbGJhY2tzICov
Ci0JCUQoIiVzOiBpbnRlcmNlcHQgY2FsbGJhY2tzIG9uICVzIiwgbWtyaW5nLT5uYW1lLCBrcmlu
Zy0+bmFtZSk7CisJCU5EKCIlczogaW50ZXJjZXB0IGNhbGxiYWNrcyBvbiAlcyIsIG1rcmluZy0+
bmFtZSwga3JpbmctPm5hbWUpOwogCQlrcmluZy0+bW9uX3N5bmMgPSBrcmluZy0+bm1fc3luYzsK
IAkJLyogemNvcHkgbW9uaXRvcnMgZG8gbm90IG92ZXJyaWRlIG5tX25vdGlmeSgpLCBidXQKIAkJ
ICogd2Ugc2F2ZSB0aGUgb3JpZ2luYWwgb25lIHJlZ2FyZGxlc3MsIHNvIHRoYXQKQEAgLTI2NSw3
ICsyNzMsNyBAQAogCX0KIAogb3V0OgotCW5tX2tyX3B1dChrcmluZyk7CisJbm1fa3Jfc3RhcnQo
a3JpbmcpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMjc2LDI4ICsyODQsMzAgQEAKIHN0YXRp
YyB2b2lkCiBuZXRtYXBfbW9uaXRvcl9kZWwoc3RydWN0IG5ldG1hcF9rcmluZyAqbWtyaW5nLCBz
dHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZykKIHsKKwl1aW50MzJfdCBtb25fcG9zOwogCS8qIHNp
bmNocm9uaXplIHdpdGggY29uY3VycmVudGx5IHJ1bm5pbmcgbm1fc3luYygpcyAqLwotCW5tX2ty
X2dldChrcmluZyk7CisJbm1fa3Jfc3RvcChrcmluZywgTk1fS1JfTE9DS0VEKTsKIAlrcmluZy0+
bl9tb25pdG9ycy0tOwotCWlmIChta3JpbmctPm1vbl9wb3MgIT0ga3JpbmctPm5fbW9uaXRvcnMp
IHsKLQkJa3JpbmctPm1vbml0b3JzW21rcmluZy0+bW9uX3Bvc10gPSBrcmluZy0+bW9uaXRvcnNb
a3JpbmctPm5fbW9uaXRvcnNdOwotCQlrcmluZy0+bW9uaXRvcnNbbWtyaW5nLT5tb25fcG9zXS0+
bW9uX3BvcyA9IG1rcmluZy0+bW9uX3BvczsKKwltb25fcG9zID0gbWtyaW5nLT5tb25fcG9zW2ty
aW5nLT50eF07CisJaWYgKG1vbl9wb3MgIT0ga3JpbmctPm5fbW9uaXRvcnMpIHsKKwkJa3Jpbmct
Pm1vbml0b3JzW21vbl9wb3NdID0ga3JpbmctPm1vbml0b3JzW2tyaW5nLT5uX21vbml0b3JzXTsK
KwkJa3JpbmctPm1vbml0b3JzW21vbl9wb3NdLT5tb25fcG9zW2tyaW5nLT50eF0gPSBtb25fcG9z
OwogCX0KIAlrcmluZy0+bW9uaXRvcnNba3JpbmctPm5fbW9uaXRvcnNdID0gTlVMTDsKIAlpZiAo
a3JpbmctPm5fbW9uaXRvcnMgPT0gMCkgewogCQkvKiB0aGlzIHdhcyB0aGUgbGFzdCBtb25pdG9y
LCByZXN0b3JlIGNhbGxiYWNrcyAgYW5kIGRlbGV0ZSBtb25pdG9yIGFycmF5ICovCi0JCUQoIiVz
OiByZXN0b3Jpbmcgc3luYyBvbiAlczogJXAiLCBta3JpbmctPm5hbWUsIGtyaW5nLT5uYW1lLCBr
cmluZy0+bW9uX3N5bmMpOworCQlORCgiJXM6IHJlc3RvcmluZyBzeW5jIG9uICVzOiAlcCIsIG1r
cmluZy0+bmFtZSwga3JpbmctPm5hbWUsIGtyaW5nLT5tb25fc3luYyk7CiAJCWtyaW5nLT5ubV9z
eW5jID0ga3JpbmctPm1vbl9zeW5jOwogCQlrcmluZy0+bW9uX3N5bmMgPSBOVUxMOwogCQlpZiAo
a3JpbmctPnR4ID09IE5SX1JYKSB7Ci0JCQlEKCIlczogcmVzdG9yaW5nIG5vdGlmeSBvbiAlczog
JXAiLCAKKwkJCU5EKCIlczogcmVzdG9yaW5nIG5vdGlmeSBvbiAlczogJXAiLAogCQkJCQlta3Jp
bmctPm5hbWUsIGtyaW5nLT5uYW1lLCBrcmluZy0+bW9uX25vdGlmeSk7CiAJCQlrcmluZy0+bm1f
bm90aWZ5ID0ga3JpbmctPm1vbl9ub3RpZnk7CiAJCQlrcmluZy0+bW9uX25vdGlmeSA9IE5VTEw7
CiAJCX0KIAkJbm1fbW9uaXRvcl9kZWFsbG9jKGtyaW5nKTsKIAl9Ci0Jbm1fa3JfcHV0KGtyaW5n
KTsKKwlubV9rcl9zdGFydChrcmluZyk7CiB9CiAKIApAQCAtMzE2LDcgKzMyNiw3IEBACiAJZm9y
X3J4X3R4KHQpIHsKIAkJdV9pbnQgaTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgbm1hX2dldF9ucmlu
Z3MobmEsIHQpOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IG5tYV9nZXRfbnJpbmdzKG5hLCB0
KSArIDE7IGkrKykgewogCQkJc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcgPSAmTk1SKG5hLCB0
KVtpXTsKIAkJCXVfaW50IGo7CiAKQEAgLTMyNiw4ICszMzYsMTAgQEAKIAkJCQlzdHJ1Y3QgbmV0
bWFwX21vbml0b3JfYWRhcHRlciAqbW5hID0KIAkJCQkJKHN0cnVjdCBuZXRtYXBfbW9uaXRvcl9h
ZGFwdGVyICopbWtyaW5nLT5uYTsKIAkJCQkvKiBmb3JnZXQgYWJvdXQgdGhpcyBhZGFwdGVyICov
Ci0JCQkJbmV0bWFwX2FkYXB0ZXJfcHV0KG1uYS0+cHJpdi5ucF9uYSk7Ci0JCQkJbW5hLT5wcml2
Lm5wX25hID0gTlVMTDsKKwkJCQlpZiAobW5hLT5wcml2Lm5wX25hICE9IE5VTEwpIHsKKwkJCQkJ
bmV0bWFwX2FkYXB0ZXJfcHV0KG1uYS0+cHJpdi5ucF9uYSk7CisJCQkJCW1uYS0+cHJpdi5ucF9u
YSA9IE5VTEw7CisJCQkJfQogCQkJfQogCQl9CiAJfQpAQCAtMzQ2LDcgKzM1OCw3IEBACiAJc3Ry
dWN0IG5ldG1hcF9hZGFwdGVyICpwbmEgPSBwcml2LT5ucF9uYTsKIAlzdHJ1Y3QgbmV0bWFwX2ty
aW5nICprcmluZywgKm1rcmluZzsKIAlpbnQgaTsKLQllbnVtIHR4cnggdDsKKwllbnVtIHR4cngg
dCwgczsKIAogCU5EKCIlcDogb25vZmYgJWQiLCBuYSwgb25vZmYpOwogCWlmIChvbm9mZikgewpA
QCAtMzU2LDI3ICszNjgsNDggQEAKIAkJCXJldHVybiBFTlhJTzsKIAkJfQogCQlmb3JfcnhfdHgo
dCkgewotCQkJaWYgKG1uYS0+ZmxhZ3MgJiBubV90eHJ4MmZsYWcodCkpIHsKLQkJCQlmb3IgKGkg
PSBwcml2LT5ucF9xZmlyc3RbdF07IGkgPCBwcml2LT5ucF9xbGFzdFt0XTsgaSsrKSB7Ci0JCQkJ
CWtyaW5nID0gJk5NUihwbmEsIHQpW2ldOwotCQkJCQlta3JpbmcgPSAmbmEtPnJ4X3JpbmdzW2ld
OwotCQkJCQluZXRtYXBfbW9uaXRvcl9hZGQobWtyaW5nLCBrcmluZywgem1vbik7CisJCQlmb3Ig
KGkgPSAwOyBpIDwgbm1hX2dldF9ucmluZ3MobmEsIHQpICsgMTsgaSsrKSB7CisJCQkJbWtyaW5n
ID0gJk5NUihuYSwgdClbaV07CisJCQkJaWYgKCFubV9rcmluZ19wZW5kaW5nX29uKG1rcmluZykp
CisJCQkJCWNvbnRpbnVlOworCQkJCW1rcmluZy0+bnJfbW9kZSA9IE5LUl9ORVRNQVBfT047CisJ
CQkJaWYgKHQgPT0gTlJfVFgpCisJCQkJCWNvbnRpbnVlOworCQkJCWZvcl9yeF90eChzKSB7CisJ
CQkJCWlmIChpID4gbm1hX2dldF9ucmluZ3MocG5hLCBzKSkKKwkJCQkJCWNvbnRpbnVlOworCQkJ
CQlpZiAobW5hLT5mbGFncyAmIG5tX3R4cngyZmxhZyhzKSkgeworCQkJCQkJa3JpbmcgPSAmTk1S
KHBuYSwgcylbaV07CisJCQkJCQluZXRtYXBfbW9uaXRvcl9hZGQobWtyaW5nLCBrcmluZywgem1v
bik7CisJCQkJCX0KIAkJCQl9CiAJCQl9CiAJCX0KIAkJbmEtPm5hX2ZsYWdzIHw9IE5BRl9ORVRN
QVBfT047CiAJfSBlbHNlIHsKLQkJaWYgKHBuYSA9PSBOVUxMKSB7Ci0JCQlEKCIlczogcGFyZW50
IGxlZnQgbmV0bWFwIG1vZGUsIG5vdGhpbmcgdG8gcmVzdG9yZSIsIG5hLT5uYW1lKTsKLQkJCXJl
dHVybiAwOwotCQl9Ci0JCW5hLT5uYV9mbGFncyAmPSB+TkFGX05FVE1BUF9PTjsKKwkJaWYgKG5h
LT5hY3RpdmVfZmRzID09IDApCisJCQluYS0+bmFfZmxhZ3MgJj0gfk5BRl9ORVRNQVBfT047CiAJ
CWZvcl9yeF90eCh0KSB7Ci0JCQlpZiAobW5hLT5mbGFncyAmIG5tX3R4cngyZmxhZyh0KSkgewot
CQkJCWZvciAoaSA9IHByaXYtPm5wX3FmaXJzdFt0XTsgaSA8IHByaXYtPm5wX3FsYXN0W3RdOyBp
KyspIHsKLQkJCQkJa3JpbmcgPSAmTk1SKHBuYSwgdClbaV07Ci0JCQkJCW1rcmluZyA9ICZuYS0+
cnhfcmluZ3NbaV07Ci0JCQkJCW5ldG1hcF9tb25pdG9yX2RlbChta3JpbmcsIGtyaW5nKTsKKwkJ
CWZvciAoaSA9IDA7IGkgPCBubWFfZ2V0X25yaW5ncyhuYSwgdCkgKyAxOyBpKyspIHsKKwkJCQlt
a3JpbmcgPSAmTk1SKG5hLCB0KVtpXTsKKwkJCQlpZiAoIW5tX2tyaW5nX3BlbmRpbmdfb2ZmKG1r
cmluZykpCisJCQkJCWNvbnRpbnVlOworCQkJCW1rcmluZy0+bnJfbW9kZSA9IE5LUl9ORVRNQVBf
T0ZGOworCQkJCWlmICh0ID09IE5SX1RYKQorCQkJCQljb250aW51ZTsKKwkJCQkvKiB3ZSBjYW5u
b3QgYWNjZXNzIHRoZSBwYXJlbnQga3JpbmdzIGlmIHRoZSBwYXJlbnQKKwkJCQkgKiBoYXMgbGVm
dCBuZXRtYXAgbW9kZS4gVGhpcyBpcyBzaWduYWxlZCBieSBhIE5VTEwKKwkJCQkgKiBwbmEgcG9p
bnRlcgorCQkJCSAqLworCQkJCWlmIChwbmEgPT0gTlVMTCkKKwkJCQkJY29udGludWU7CisJCQkJ
Zm9yX3J4X3R4KHMpIHsKKwkJCQkJaWYgKGkgPiBubWFfZ2V0X25yaW5ncyhwbmEsIHMpKQorCQkJ
CQkJY29udGludWU7CisJCQkJCWlmIChtbmEtPmZsYWdzICYgbm1fdHhyeDJmbGFnKHMpKSB7CisJ
CQkJCQlrcmluZyA9ICZOTVIocG5hLCBzKVtpXTsKKwkJCQkJCW5ldG1hcF9tb25pdG9yX2RlbCht
a3JpbmcsIGtyaW5nKTsKKwkJCQkJfQogCQkJCX0KIAkJCX0KIAkJfQpAQCAtMzg2LDcgKzQxOSw3
IEBACiAKIC8qCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKgotICogZnVuY3Rpb25zIHNwZWNpZmljIGZvciB6ZXJvLWNvcHkg
bW9uaXRvcnMgICAgICAgICAgICAgICAgICAgIAorICogZnVuY3Rpb25zIHNwZWNpZmljIGZvciB6
ZXJvLWNvcHkgbW9uaXRvcnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIApAQCAtNDE0LDExICs0NDcsMTEgQEAK
IAogCS8qIGdldCB0aGUgcmVsYXNlZCBzbG90cyAocmVsX3Nsb3RzKSAqLwogCWlmICh0eCA9PSBO
Ul9UWCkgewotCQliZWcgPSBrcmluZy0+bnJfaHd0YWlsOworCQliZWcgPSBrcmluZy0+bnJfaHd0
YWlsICsgMTsKIAkJZXJyb3IgPSBrcmluZy0+bW9uX3N5bmMoa3JpbmcsIGZsYWdzKTsKIAkJaWYg
KGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwotCQllbmQgPSBrcmluZy0+bnJfaHd0YWlsOworCQll
bmQgPSBrcmluZy0+bnJfaHd0YWlsICsgMTsKIAl9IGVsc2UgeyAvKiBOUl9SWCAqLwogCQliZWcg
PSBrcmluZy0+bnJfaHdjdXI7CiAJCWVuZCA9IGtyaW5nLT5yaGVhZDsKQEAgLTQ1MywxMCArNDg2
LDEwIEBACiAJLyogc3dhcCBtaW4oZnJlZV9zbG90cywgcmVsX3Nsb3RzKSBzbG90cyAqLwogCWlm
IChmcmVlX3Nsb3RzIDwgcmVsX3Nsb3RzKSB7CiAJCWJlZyArPSAocmVsX3Nsb3RzIC0gZnJlZV9z
bG90cyk7Ci0JCWlmIChiZWcgPj0ga3JpbmctPm5rcl9udW1fc2xvdHMpCi0JCQliZWcgLT0ga3Jp
bmctPm5rcl9udW1fc2xvdHM7CiAJCXJlbF9zbG90cyA9IGZyZWVfc2xvdHM7CiAJfQorCWlmICh1
bmxpa2VseShiZWcgPj0ga3JpbmctPm5rcl9udW1fc2xvdHMpKQorCQliZWcgLT0ga3JpbmctPm5r
cl9udW1fc2xvdHM7CiAKIAlzZW50ID0gcmVsX3Nsb3RzOwogCWZvciAoIDsgcmVsX3Nsb3RzOyBy
ZWxfc2xvdHMtLSkgewpAQCAtNTM0LDcgKzU2Nyw3IEBACiAKIC8qCiAgKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZnVu
Y3Rpb25zIHNwZWNpZmljIGZvciBjb3B5IG1vbml0b3JzICAgICAgICAgICAgICAgICAgICAKKyAq
IGZ1bmN0aW9ucyBzcGVjaWZpYyBmb3IgY29weSBtb25pdG9ycwogICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwogCkBA
IC02NTIsMTcgKzY4NSwyNyBAQAogc3RhdGljIGludAogbmV0bWFwX21vbml0b3JfcGFyZW50X25v
dGlmeShzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywgaW50IGZsYWdzKQogeworCWludCAoKm5v
dGlmeSkoc3RydWN0IG5ldG1hcF9rcmluZyosIGludCk7CiAJTkQoNSwgIiVzICV4Iiwga3Jpbmct
Pm5hbWUsIGZsYWdzKTsKIAkvKiA/eHN5bmMgY2FsbGJhY2tzIGhhdmUgdHJ5Z2V0IGNhbGxlZCBi
eSB0aGVpciBjYWxsZXJzCiAJICogKE5JT0NSRUdJRiBhbmQgcG9sbCgpKSwgYnV0IGhlcmUgd2Ug
aGF2ZSB0byBjYWxsIGl0CiAJICogYnkgb3Vyc2VsZgogCSAqLwotCWlmIChubV9rcl90cnlnZXQo
a3JpbmcpKQotCQlnb3RvIG91dDsKLQluZXRtYXBfbW9uaXRvcl9wYXJlbnRfcnhzeW5jKGtyaW5n
LCBOQUZfRk9SQ0VfUkVBRCk7CisJaWYgKG5tX2tyX3RyeWdldChrcmluZywgMCwgTlVMTCkpIHsK
KwkJLyogaW4gYWxsIGNhc2VzLCBqdXN0IHNraXAgdGhlIHN5bmMgKi8KKwkJcmV0dXJuIE5NX0lS
UV9DT01QTEVURUQ7CisJfQorCWlmIChrcmluZy0+bl9tb25pdG9ycyA+IDApIHsKKwkJbmV0bWFw
X21vbml0b3JfcGFyZW50X3J4c3luYyhrcmluZywgTkFGX0ZPUkNFX1JFQUQpOworCQlub3RpZnkg
PSBrcmluZy0+bW9uX25vdGlmeTsKKwl9IGVsc2UgeworCQkvKiB3ZSBhcmUgbm8gbG9uZ2VyIG1v
bml0b3JpbmcgdGhpcyByaW5nLCBzbyBib3RoCisJCSAqIG1vbl9zeW5jIGFuZCBtb25fbm90aWZ5
IGFyZSBOVUxMCisJCSAqLworCQlub3RpZnkgPSBrcmluZy0+bm1fbm90aWZ5OworCX0KIAlubV9r
cl9wdXQoa3JpbmcpOwotb3V0OgotICAgICAgICByZXR1cm4ga3JpbmctPm1vbl9ub3RpZnkoa3Jp
bmcsIGZsYWdzKTsKKyAgICAgICAgcmV0dXJuIG5vdGlmeShrcmluZywgZmxhZ3MpOwogfQogCiAK
QEAgLTY5MSwyMCArNzM0LDI3IEBACiAJc3RydWN0IG5tcmVxIHBubXI7CiAJc3RydWN0IG5ldG1h
cF9hZGFwdGVyICpwbmE7IC8qIHBhcmVudCBhZGFwdGVyICovCiAJc3RydWN0IG5ldG1hcF9tb25p
dG9yX2FkYXB0ZXIgKm1uYTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IE5VTEw7CiAJaW50IGksIGVy
cm9yOwogCWVudW0gdHhyeCB0OwogCWludCB6Y29weSA9IChubXItPm5yX2ZsYWdzICYgTlJfWkNP
UFlfTU9OKTsKIAljaGFyIG1vbnN1ZmZbMTBdID0gIiI7CiAKIAlpZiAoKG5tci0+bnJfZmxhZ3Mg
JiAoTlJfTU9OSVRPUl9UWCB8IE5SX01PTklUT1JfUlgpKSA9PSAwKSB7CisJCWlmIChubXItPm5y
X2ZsYWdzICYgTlJfWkNPUFlfTU9OKSB7CisJCQkvKiB0aGUgZmxhZyBtYWtlcyBubyBzZW5zZSB1
bmxlc3MgeW91IGFyZQorCQkJICogY3JlYXRpbmcgYSBtb25pdG9yCisJCQkgKi8KKwkJCXJldHVy
biBFSU5WQUw7CisJCX0KIAkJTkQoIm5vdCBhIG1vbml0b3IiKTsKIAkJcmV0dXJuIDA7CiAJfQog
CS8qIHRoaXMgaXMgYSByZXF1ZXN0IGZvciBhIG1vbml0b3IgYWRhcHRlciAqLwogCi0JRCgiZmxh
Z3MgJXgiLCBubXItPm5yX2ZsYWdzKTsKKwlORCgiZmxhZ3MgJXgiLCBubXItPm5yX2ZsYWdzKTsK
IAotCW1uYSA9IG1hbGxvYyhzaXplb2YoKm1uYSksIE1fREVWQlVGLCBNX05PV0FJVCB8IE1fWkVS
Tyk7CisJbW5hID0gbm1fb3NfbWFsbG9jKHNpemVvZigqbW5hKSk7CiAJaWYgKG1uYSA9PSBOVUxM
KSB7CiAJCUQoIm1lbW9yeSBlcnJvciIpOwogCQlyZXR1cm4gRU5PTUVNOwpAQCAtNzE2LDEzICs3
NjYsMTQgQEAKIAkgKiBleGNlcHQgb3RoZXIgbW9uaXRvcnMuCiAJICovCiAJbWVtY3B5KCZwbm1y
LCBubXIsIHNpemVvZihwbm1yKSk7Ci0JcG5tci5ucl9mbGFncyAmPSB+KE5SX01PTklUT1JfVFgg
fCBOUl9NT05JVE9SX1JYKTsKLQllcnJvciA9IG5ldG1hcF9nZXRfbmEoJnBubXIsICZwbmEsIGNy
ZWF0ZSk7CisJcG5tci5ucl9mbGFncyAmPSB+KE5SX01PTklUT1JfVFggfCBOUl9NT05JVE9SX1JY
IHwgTlJfWkNPUFlfTU9OKTsKKwllcnJvciA9IG5ldG1hcF9nZXRfbmEoJnBubXIsICZwbmEsICZp
ZnAsIGNyZWF0ZSk7CiAJaWYgKGVycm9yKSB7CiAJCUQoInBhcmVudCBsb29rdXAgZmFpbGVkOiAl
ZCIsIGVycm9yKTsKKwkJbm1fb3NfZnJlZShtbmEpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQotCUQo
ImZvdW5kIHBhcmVudDogJXMiLCBwbmEtPm5hbWUpOworCU5EKCJmb3VuZCBwYXJlbnQ6ICVzIiwg
cG5hLT5uYW1lKTsKIAogCWlmICghbm1fbmV0bWFwX29uKHBuYSkpIHsKIAkJLyogcGFyZW50IG5v
dCBpbiBuZXRtYXAgbW9kZSAqLwpAQCAtNzcwLDggKzgyMSwxMCBAQAogCQkvKiB0byBoYXZlIHpl
cm8gY29weSwgd2UgbmVlZCB0byB1c2UgdGhlIHNhbWUgbWVtb3J5IGFsbG9jYXRvcgogCQkgKiBh
cyB0aGUgbW9uaXRvcmVkIHBvcnQKIAkJICovCi0JCW1uYS0+dXAubm1fbWVtID0gcG5hLT5ubV9t
ZW07CisJCW1uYS0+dXAubm1fbWVtID0gbmV0bWFwX21lbV9nZXQocG5hLT5ubV9tZW0pOwogCQlt
bmEtPnVwLm5hX2x1dCA9IHBuYS0+bmFfbHV0OworCQkvKiBhbmQgdGhlIGFsbG9jYXRvciBjYW5u
b3QgYmUgY2hhbmdlZCAqLworCQltbmEtPnVwLm5hX2ZsYWdzIHw9IE5BRl9NRU1fT1dORVI7CiAJ
fSBlbHNlIHsKIAkJLyogbm9ybWFsIG1vbml0b3JzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB6ZXJv
IGNvcHkgb25lcyAqLwogCQlmb3JfcnhfdHgodCkgewpAQCAtNzk0LDcgKzg0Nyw3IEBACiAJfQog
CiAJLyogdGhlIG1vbml0b3Igc3VwcG9ydHMgdGhlIGhvc3QgcmluZ3MgaWZmIHRoZSBwYXJlbnQg
ZG9lcyAqLwotCW1uYS0+dXAubmFfZmxhZ3MgPSAocG5hLT5uYV9mbGFncyAmIE5BRl9IT1NUX1JJ
TkdTKTsKKwltbmEtPnVwLm5hX2ZsYWdzIHw9IChwbmEtPm5hX2ZsYWdzICYgTkFGX0hPU1RfUklO
R1MpOwogCS8qIGEgZG8tbm90aGluZyB0eHN5bmM6IG1vbml0b3JzIGNhbm5vdCBiZSB1c2VkIHRv
IGluamVjdCBwYWNrZXRzICovCiAJbW5hLT51cC5ubV90eHN5bmMgPSBuZXRtYXBfbW9uaXRvcl90
eHN5bmM7CiAJbW5hLT51cC5ubV9yeHN5bmMgPSBuZXRtYXBfbW9uaXRvcl9yeHN5bmM7CkBAIC04
MjksMjAgKzg4MiwxOCBAQAogCSpuYSA9ICZtbmEtPnVwOwogCW5ldG1hcF9hZGFwdGVyX2dldCgq
bmEpOwogCi0JLyogd3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gYmFjayAqLwotCW5tci0+bnJfdHhf
cmluZ3MgPSBtbmEtPnVwLm51bV90eF9yaW5nczsKLQlubXItPm5yX3J4X3JpbmdzID0gbW5hLT51
cC5udW1fcnhfcmluZ3M7Ci0Jbm1yLT5ucl90eF9zbG90cyA9IG1uYS0+dXAubnVtX3R4X2Rlc2M7
Ci0Jbm1yLT5ucl9yeF9zbG90cyA9IG1uYS0+dXAubnVtX3J4X2Rlc2M7Ci0KIAkvKiBrZWVwIHRo
ZSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCAqLwotCUQoIm1vbml0b3Igb2siKTsKKwlORCgibW9u
aXRvciBvayIpOworCisJLyogZHJvcCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBpZnAsIGlmIGFueSAq
LworCWlmIChpZnApCisJCWlmX3JlbGUoaWZwKTsKIAogCXJldHVybiAwOwogCiBwdXRfb3V0Ogot
CW5ldG1hcF9hZGFwdGVyX3B1dChwbmEpOwotCWZyZWUobW5hLCBNX0RFVkJVRik7CisJbmV0bWFw
X3VuZ2V0X25hKHBuYSwgaWZwKTsKKwlubV9vc19mcmVlKG1uYSk7CiAJcmV0dXJuIGVycm9yOwog
fQogCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfb2ZmbG9hZGlu
Z3MuYyAvdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfb2ZmbG9hZGluZ3MuYwotLS0gdXNy
L3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfb2ZmbG9hZGluZ3MuYwkyMDE2LTA5LTI5IDAwOjI0
OjQ3LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX29m
ZmxvYWRpbmdzLmMJMjAxNi0xMS0yMyAxNjo1Nzo1Ny44NTM1MTMwMDAgKzAwMDAKQEAgLTEsNSAr
MSw2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IFZpbmNlbnpvIE1hZmZpb25lLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVmluY2Vuem8gTWFm
ZmlvbmUKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTIzLDcgKzI0LDcgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLS8qICRGcmVl
QlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9uZXRtYXBfb2ZmbG9hZGluZ3MuYyAyOTg5
NTUgMjAxNi0wNS0wMyAwMzo0MToyNVogcGZnICQgKi8KKy8qICRGcmVlQlNEOiBoZWFkL3N5cy9k
ZXYvbmV0bWFwL25ldG1hcF9vZmZsb2FkaW5ncy5jIDI2MTkwOSAyMDE0LTAyLTE1IDA0OjUzOjA0
WiBsdWlnaSAkICovCiAKICNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQogI2luY2x1ZGUgPHN5cy9j
ZGVmcy5oPiAvKiBwcmVyZXF1aXNpdGUgKi8KQEAgLTMxLDkgKzMyLDkgQEAKICNpbmNsdWRlIDxz
eXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvZXJybm8uaD4KICNpbmNsdWRlIDxzeXMvcGFyYW0u
aD4JLyogZGVmaW5lcyB1c2VkIGluIGtlcm5lbC5oICovCi0jaW5jbHVkZSA8c3lzL21hbGxvYy5o
PgkvKiB0eXBlcyB1c2VkIGluIG1vZHVsZSBpbml0aWFsaXphdGlvbiAqLwogI2luY2x1ZGUgPHN5
cy9rZXJuZWwuaD4JLyogdHlwZXMgdXNlZCBpbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gKi8KICNp
bmNsdWRlIDxzeXMvc29ja2lvLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgogI2luY2x1ZGUg
PHN5cy9zb2NrZXR2YXIuaD4JLyogc3RydWN0IHNvY2tldCAqLwogI2luY2x1ZGUgPHN5cy9zb2Nr
ZXQuaD4gLyogc29ja2FkZHJzICovCiAjaW5jbHVkZSA8bmV0L2lmLmg+CkBAIC02NCwyMSArNjUs
MjEgQEAKIC8qIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgYmRnX21pc21hdGNoX2RhdGFwYXRo
KCkgd2hlbiBpdCBmaW5pc2hlcwogICogYWNjdW11bGF0aW5nIGJ5dGVzIGZvciBhIHNlZ21lbnQs
IGluIG9yZGVyIHRvIGZpeCBzb21lIGZpZWxkcyBpbiB0aGUKICAqIHNlZ21lbnQgaGVhZGVycyAo
d2hpY2ggc3RpbGwgY29udGFpbiB0aGUgc2FtZSBjb250ZW50IGFzIHRoZSBoZWFkZXIKLSAqIG9m
IHRoZSBvcmlnaW5hbCBHU08gcGFja2V0KS4gJ2J1ZicgcG9pbnRzIHRvIHRoZSBiZWdpbm5pbmcg
KGUuZy4KLSAqIHRoZSBldGhlcm5ldCBoZWFkZXIpIG9mIHRoZSBzZWdtZW50LCBhbmQgJ2xlbicg
aXMgaXRzIGxlbmd0aC4KKyAqIG9mIHRoZSBvcmlnaW5hbCBHU08gcGFja2V0KS4gJ3BrdCcgcG9p
bnRzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIElQCisgKiBoZWFkZXIgb2YgdGhlIHNlZ21lbnQs
IHdoaWxlICdsZW4nIGlzIHRoZSBsZW5ndGggb2YgdGhlIElQIHBhY2tldC4KICAqLwotc3RhdGlj
IHZvaWQgZ3NvX2ZpeF9zZWdtZW50KHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IGxlbiwgdV9pbnQgaWR4
LAotCQkJICAgIHVfaW50IHNlZ21lbnRlZF9ieXRlcywgdV9pbnQgbGFzdF9zZWdtZW50LAotCQkJ
ICAgIHVfaW50IHRjcCwgdV9pbnQgaXBobGVuKQorc3RhdGljIHZvaWQKK2dzb19maXhfc2VnbWVu
dCh1aW50OF90ICpwa3QsIHNpemVfdCBsZW4sIHVfaW50IGlwdjQsIHVfaW50IGlwaGxlbiwgdV9p
bnQgdGNwLAorCQl1X2ludCBpZHgsIHVfaW50IHNlZ21lbnRlZF9ieXRlcywgdV9pbnQgbGFzdF9z
ZWdtZW50KQogewotCXN0cnVjdCBubV9pcGhkciAqaXBoID0gKHN0cnVjdCBubV9pcGhkciAqKShi
dWYgKyAxNCk7Ci0Jc3RydWN0IG5tX2lwdjZoZHIgKmlwNmggPSAoc3RydWN0IG5tX2lwdjZoZHIg
KikoYnVmICsgMTQpOworCXN0cnVjdCBubV9pcGhkciAqaXBoID0gKHN0cnVjdCBubV9pcGhkciAq
KShwa3QpOworCXN0cnVjdCBubV9pcHY2aGRyICppcDZoID0gKHN0cnVjdCBubV9pcHY2aGRyICop
KHBrdCk7CiAJdWludDE2X3QgKmNoZWNrID0gTlVMTDsKIAl1aW50OF90ICpjaGVja19kYXRhID0g
TlVMTDsKIAotCWlmIChpcGhsZW4gPT0gMjApIHsKKwlpZiAoaXB2NCkgewogCQkvKiBTZXQgdGhl
IElQdjQgIlRvdGFsIExlbmd0aCIgZmllbGQuICovCi0JCWlwaC0+dG90X2xlbiA9IGh0b2JlMTYo
bGVuLTE0KTsKKwkJaXBoLT50b3RfbGVuID0gaHRvYmUxNihsZW4pOwogCQlORCgiaXAgdG90YWwg
bGVuZ3RoICV1IiwgYmUxNnRvaChpcC0+dG90X2xlbikpOwogCiAJCS8qIFNldCB0aGUgSVB2NCAi
SWRlbnRpZmljYXRpb24iIGZpZWxkLiAqLwpAQCAtODcsMTUgKzg4LDE1IEBACiAKIAkJLyogQ29t
cHV0ZSBhbmQgaW5zZXJ0IHRoZSBJUHY0IGhlYWRlciBjaGVja3N1bS4gKi8KIAkJaXBoLT5jaGVj
ayA9IDA7Ci0JCWlwaC0+Y2hlY2sgPSBubV9jc3VtX2lwdjQoaXBoKTsKKwkJaXBoLT5jaGVjayA9
IG5tX29zX2NzdW1faXB2NChpcGgpOwogCQlORCgiSVAgY3N1bSAleCIsIGJlMTZ0b2goaXBoLT5j
aGVjaykpOwotCX0gZWxzZSB7LyogaWYgKGlwaGxlbiA9PSA0MCkgKi8KKwl9IGVsc2UgewogCQkv
KiBTZXQgdGhlIElQdjYgIlBheWxvYWQgTGVuIiBmaWVsZC4gKi8KLQkJaXA2aC0+cGF5bG9hZF9s
ZW4gPSBodG9iZTE2KGxlbi0xNC1pcGhsZW4pOworCQlpcDZoLT5wYXlsb2FkX2xlbiA9IGh0b2Jl
MTYobGVuLWlwaGxlbik7CiAJfQogCiAJaWYgKHRjcCkgewotCQlzdHJ1Y3Qgbm1fdGNwaGRyICp0
Y3BoID0gKHN0cnVjdCBubV90Y3BoZHIgKikoYnVmICsgMTQgKyBpcGhsZW4pOworCQlzdHJ1Y3Qg
bm1fdGNwaGRyICp0Y3BoID0gKHN0cnVjdCBubV90Y3BoZHIgKikocGt0ICsgaXBobGVuKTsKIAog
CQkvKiBTZXQgdGhlIFRDUCBzZXF1ZW5jZSBudW1iZXIuICovCiAJCXRjcGgtPnNlcSA9IGh0b2Jl
MzIoYmUzMnRvaCh0Y3BoLT5zZXEpICsgc2VnbWVudGVkX2J5dGVzKTsKQEAgLTExMCwxMCArMTEx
LDEwIEBACiAJCWNoZWNrID0gJnRjcGgtPmNoZWNrOwogCQljaGVja19kYXRhID0gKHVpbnQ4X3Qg
Kil0Y3BoOwogCX0gZWxzZSB7IC8qIFVEUCAqLwotCQlzdHJ1Y3Qgbm1fdWRwaGRyICp1ZHBoID0g
KHN0cnVjdCBubV91ZHBoZHIgKikoYnVmICsgMTQgKyBpcGhsZW4pOworCQlzdHJ1Y3Qgbm1fdWRw
aGRyICp1ZHBoID0gKHN0cnVjdCBubV91ZHBoZHIgKikocGt0ICsgaXBobGVuKTsKIAogCQkvKiBT
ZXQgdGhlIFVEUCAnTGVuZ3RoJyBmaWVsZC4gKi8KLQkJdWRwaC0+bGVuID0gaHRvYmUxNihsZW4t
MTQtaXBobGVuKTsKKwkJdWRwaC0+bGVuID0gaHRvYmUxNihsZW4taXBobGVuKTsKIAogCQljaGVj
ayA9ICZ1ZHBoLT5jaGVjazsKIAkJY2hlY2tfZGF0YSA9ICh1aW50OF90ICopdWRwaDsKQEAgLTEy
MSw0OCArMTIyLDgwIEBACiAKIAkvKiBDb21wdXRlIGFuZCBpbnNlcnQgVENQL1VEUCBjaGVja3N1
bS4gKi8KIAkqY2hlY2sgPSAwOwotCWlmIChpcGhsZW4gPT0gMjApCi0JCW5tX2NzdW1fdGNwdWRw
X2lwdjQoaXBoLCBjaGVja19kYXRhLCBsZW4tMTQtaXBobGVuLCBjaGVjayk7CisJaWYgKGlwdjQp
CisJCW5tX29zX2NzdW1fdGNwdWRwX2lwdjQoaXBoLCBjaGVja19kYXRhLCBsZW4taXBobGVuLCBj
aGVjayk7CiAJZWxzZQotCQlubV9jc3VtX3RjcHVkcF9pcHY2KGlwNmgsIGNoZWNrX2RhdGEsIGxl
bi0xNC1pcGhsZW4sIGNoZWNrKTsKKwkJbm1fb3NfY3N1bV90Y3B1ZHBfaXB2NihpcDZoLCBjaGVj
a19kYXRhLCBsZW4taXBobGVuLCBjaGVjayk7CiAKIAlORCgiVENQL1VEUCBjc3VtICV4IiwgYmUx
NnRvaCgqY2hlY2spKTsKIH0KIAorc3RhdGljIGludAordm5ldF9oZHJfaXNfYmFkKHN0cnVjdCBu
bV92bmV0X2hkciAqdmgpCit7CisJdWludDhfdCBnc29fdHlwZSA9IHZoLT5nc29fdHlwZSAmIH5W
SVJUSU9fTkVUX0hEUl9HU09fRUNOOworCisJcmV0dXJuICgKKwkJKGdzb190eXBlICE9IFZJUlRJ
T19ORVRfSERSX0dTT19OT05FICYmCisJCSBnc29fdHlwZSAhPSBWSVJUSU9fTkVUX0hEUl9HU09f
VENQVjQgJiYKKwkJIGdzb190eXBlICE9IFZJUlRJT19ORVRfSERSX0dTT19VRFAgJiYKKwkJIGdz
b190eXBlICE9IFZJUlRJT19ORVRfSERSX0dTT19UQ1BWNikKKwkJfHwKKwkJICh2aC0+ZmxhZ3Mg
JiB+KFZJUlRJT19ORVRfSERSX0ZfTkVFRFNfQ1NVTQorCQkJICAgICAgIHwgVklSVElPX05FVF9I
RFJfRl9EQVRBX1ZBTElEKSkKKwkgICAgICAgKTsKK30KIAogLyogVGhlIFZBTEUgbWlzbWF0Y2gg
ZGF0YXBhdGggaW1wbGVtZW50YXRpb24uICovCi12b2lkIGJkZ19taXNtYXRjaF9kYXRhcGF0aChz
dHJ1Y3QgbmV0bWFwX3ZwX2FkYXB0ZXIgKm5hLAotCQkJICAgc3RydWN0IG5ldG1hcF92cF9hZGFw
dGVyICpkc3RfbmEsCi0JCQkgICBzdHJ1Y3Qgbm1fYmRnX2Z3ZCAqZnRfcCwgc3RydWN0IG5ldG1h
cF9yaW5nICpyaW5nLAotCQkJICAgdV9pbnQgKmosIHVfaW50IGxpbSwgdV9pbnQgKmhvd21hbnkp
Cit2b2lkCitiZGdfbWlzbWF0Y2hfZGF0YXBhdGgoc3RydWN0IG5ldG1hcF92cF9hZGFwdGVyICpu
YSwKKwkJICAgICAgc3RydWN0IG5ldG1hcF92cF9hZGFwdGVyICpkc3RfbmEsCisJCSAgICAgIGNv
bnN0IHN0cnVjdCBubV9iZGdfZndkICpmdF9wLAorCQkgICAgICBzdHJ1Y3QgbmV0bWFwX3Jpbmcg
KmRzdF9yaW5nLAorCQkgICAgICB1X2ludCAqaiwgdV9pbnQgbGltLCB1X2ludCAqaG93bWFueSkK
IHsKLQlzdHJ1Y3QgbmV0bWFwX3Nsb3QgKnNsb3QgPSBOVUxMOworCXN0cnVjdCBuZXRtYXBfc2xv
dCAqZHN0X3Nsb3QgPSBOVUxMOwogCXN0cnVjdCBubV92bmV0X2hkciAqdmggPSBOVUxMOwotCS8q
IE51bWJlciBvZiBzb3VyY2Ugc2xvdHMgdG8gcHJvY2Vzcy4gKi8KLQl1X2ludCBmcmFncyA9IGZ0
X3AtPmZ0X2ZyYWdzOwotCXN0cnVjdCBubV9iZGdfZndkICpmdF9lbmQgPSBmdF9wICsgZnJhZ3M7
CisJY29uc3Qgc3RydWN0IG5tX2JkZ19md2QgKmZ0X2VuZCA9IGZ0X3AgKyBmdF9wLT5mdF9mcmFn
czsKIAogCS8qIFNvdXJjZSBhbmQgZGVzdGluYXRpb24gcG9pbnRlcnMuICovCiAJdWludDhfdCAq
ZHN0LCAqc3JjOwogCXNpemVfdCBzcmNfbGVuLCBkc3RfbGVuOwogCisJLyogSW5kaWNlcyBhbmQg
Y291bnRlcnMgZm9yIHRoZSBkZXN0aW5hdGlvbiByaW5nLiAqLwogCXVfaW50IGpfc3RhcnQgPSAq
ajsKKwl1X2ludCBqX2N1ciA9IGpfc3RhcnQ7CiAJdV9pbnQgZHN0X3Nsb3RzID0gMDsKIAotCS8q
IElmIHRoZSBzb3VyY2UgcG9ydCB1c2VzIHRoZSBvZmZsb2FkaW5ncywgd2hpbGUgZGVzdGluYXRp
b24gZG9lc24ndCwKLQkgKiB3ZSBncmFiIHRoZSBzb3VyY2UgdmlydGlvLW5ldCBoZWFkZXIgYW5k
IGRvIHRoZSBvZmZsb2FkaW5ncyBoZXJlLgotCSAqLwotCWlmIChuYS0+dmlydF9oZHJfbGVuICYm
ICFkc3RfbmEtPnZpcnRfaGRyX2xlbikgewotCQl2aCA9IChzdHJ1Y3Qgbm1fdm5ldF9oZHIgKilm
dF9wLT5mdF9idWY7CisJaWYgKHVubGlrZWx5KGZ0X3AgPT0gZnRfZW5kKSkgeworCQlSRCgzLCAi
Tm8gc291cmNlIHNsb3RzIHRvIHByb2Nlc3MiKTsKKwkJcmV0dXJuOwogCX0KIAogCS8qIEluaXQg
c291cmNlIGFuZCBkZXN0IHBvaW50ZXJzLiAqLwogCXNyYyA9IGZ0X3AtPmZ0X2J1ZjsKIAlzcmNf
bGVuID0gZnRfcC0+ZnRfbGVuOwotCXNsb3QgPSAmcmluZy0+c2xvdFsqal07Ci0JZHN0ID0gTk1C
KCZkc3RfbmEtPnVwLCBzbG90KTsKKwlkc3Rfc2xvdCA9ICZkc3RfcmluZy0+c2xvdFtqX2N1cl07
CisJZHN0ID0gTk1CKCZkc3RfbmEtPnVwLCBkc3Rfc2xvdCk7CiAJZHN0X2xlbiA9IHNyY19sZW47
CiAKKwkvKiBJZiB0aGUgc291cmNlIHBvcnQgdXNlcyB0aGUgb2ZmbG9hZGluZ3MsIHdoaWxlIGRl
c3RpbmF0aW9uIGRvZXNuJ3QsCisJICogd2UgZ3JhYiB0aGUgc291cmNlIHZpcnRpby1uZXQgaGVh
ZGVyIGFuZCBkbyB0aGUgb2ZmbG9hZGluZ3MgaGVyZS4KKwkgKi8KKwlpZiAobmEtPnVwLnZpcnRf
aGRyX2xlbiAmJiAhZHN0X25hLT51cC52aXJ0X2hkcl9sZW4pIHsKKwkJdmggPSAoc3RydWN0IG5t
X3ZuZXRfaGRyICopc3JjOworCQkvKiBJbml0aWFsIHNhbml0eSBjaGVjayBvbiB0aGUgc291cmNl
IHZpcnRpby1uZXQgaGVhZGVyLiBJZgorCQkgKiBzb21ldGhpbmcgc2VlbXMgd3JvbmcsIGp1c3Qg
ZHJvcCB0aGUgcGFja2V0LiAqLworCQlpZiAoc3JjX2xlbiA8IG5hLT51cC52aXJ0X2hkcl9sZW4p
IHsKKwkJCVJEKDMsICJTaG9ydCBzcmMgdm5ldCBoZWFkZXIsIGRyb3BwaW5nIik7CisJCQlyZXR1
cm47CisJCX0KKwkJaWYgKHZuZXRfaGRyX2lzX2JhZCh2aCkpIHsKKwkJCVJEKDMsICJCYWQgc3Jj
IHZuZXQgaGVhZGVyLCBkcm9wcGluZyIpOworCQkJcmV0dXJuOworCQl9CisJfQorCiAJLyogV2Ug
YXJlIHByb2Nlc3NpbmcgdGhlIGZpcnN0IGlucHV0IHNsb3QgYW5kIHRoZXJlIGlzIGEgbWlzbWF0
Y2gKIAkgKiBiZXR3ZWVuIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gdmlydF9oZHJfbGVuIChTSEwg
YW5kIERITCkuCiAJICogV2hlbiB0aGUgYSBjbGllbnQgaXMgdXNpbmcgdmlydGlvLW5ldCBoZWFk
ZXJzLCB0aGUgaGVhZGVyIGxlbmd0aApAQCAtMTg1LDE0ICsyMTgsMTQgQEAKIAkgKiAgMTIgfCAg
IDAgfCBkb2Vzbid0IGV4aXN0CiAJICogIDEyIHwgIDEwIHwgY29waWVkIGZyb20gdGhlIGZpcnN0
IDEwIGJ5dGVzIG9mIHNvdXJjZSBoZWFkZXIKIAkgKi8KLQliemVybyhkc3QsIGRzdF9uYS0+dmly
dF9oZHJfbGVuKTsKLQlpZiAobmEtPnZpcnRfaGRyX2xlbiAmJiBkc3RfbmEtPnZpcnRfaGRyX2xl
bikKKwliemVybyhkc3QsIGRzdF9uYS0+dXAudmlydF9oZHJfbGVuKTsKKwlpZiAobmEtPnVwLnZp
cnRfaGRyX2xlbiAmJiBkc3RfbmEtPnVwLnZpcnRfaGRyX2xlbikKIAkJbWVtY3B5KGRzdCwgc3Jj
LCBzaXplb2Yoc3RydWN0IG5tX3ZuZXRfaGRyKSk7CiAJLyogU2tpcCB0aGUgdmlydGlvLW5ldCBo
ZWFkZXJzLiAqLwotCXNyYyArPSBuYS0+dmlydF9oZHJfbGVuOwotCXNyY19sZW4gLT0gbmEtPnZp
cnRfaGRyX2xlbjsKLQlkc3QgKz0gZHN0X25hLT52aXJ0X2hkcl9sZW47Ci0JZHN0X2xlbiA9IGRz
dF9uYS0+dmlydF9oZHJfbGVuICsgc3JjX2xlbjsKKwlzcmMgKz0gbmEtPnVwLnZpcnRfaGRyX2xl
bjsKKwlzcmNfbGVuIC09IG5hLT51cC52aXJ0X2hkcl9sZW47CisJZHN0ICs9IGRzdF9uYS0+dXAu
dmlydF9oZHJfbGVuOworCWRzdF9sZW4gPSBkc3RfbmEtPnVwLnZpcnRfaGRyX2xlbiArIHNyY19s
ZW47CiAKIAkvKiBIZXJlIGl0IGNvdWxkIGJlIGRzdF9sZW4gPT0gMCAod2hpY2ggaW1wbGllcyBz
cmNfbGVuID09IDApLAogCSAqIHNvIHdlIGF2b2lkIHBhc3NpbmcgYSB6ZXJvIGxlbmd0aCBmcmFn
bWVudC4KQEAgLTIxNCwxNiArMjQ3LDI3IEBACiAJCXVfaW50IGdzb19pZHggPSAwOwogCQkvKiBQ
YXlsb2FkIGRhdGEgYnl0ZXMgc2VnbWVudGVkIHNvIGZhciAoZS5nLiBUQ1AgZGF0YSBieXRlcyku
ICovCiAJCXVfaW50IHNlZ21lbnRlZF9ieXRlcyA9IDA7CisJCS8qIElzIHRoaXMgYW4gSVB2NCBv
ciBJUHY2IEdTTyBwYWNrZXQ/ICovCisJCXVfaW50IGlwdjQgPSAwOwogCQkvKiBMZW5ndGggb2Yg
dGhlIElQIGhlYWRlciAoMjAgaWYgSVB2NCwgNDAgaWYgSVB2NikuICovCiAJCXVfaW50IGlwaGxl
biA9IDA7CisJCS8qIExlbmd0aCBvZiB0aGUgRXRoZXJuZXQgaGVhZGVyICgxOCBpZiA4MDIuMXEs
IG90aGVyd2lzZSAxNCkuICovCisJCXVfaW50IGV0aGhsZW4gPSAxNDsKIAkJLyogSXMgdGhpcyBh
IFRDUCBvciBhbiBVRFAgR1NPIHBhY2tldD8gKi8KIAkJdV9pbnQgdGNwID0gKCh2aC0+Z3NvX3R5
cGUgJiB+VklSVElPX05FVF9IRFJfR1NPX0VDTikKIAkJCQk9PSBWSVJUSU9fTkVUX0hEUl9HU09f
VURQKSA/IDAgOiAxOwogCiAJCS8qIFNlZ21lbnQgdGhlIEdTTyBwYWNrZXQgY29udGFpbmVkIGlu
dG8gdGhlIGlucHV0IHNsb3RzIChmcmFncykuICovCi0JCXdoaWxlIChmdF9wICE9IGZ0X2VuZCkg
eworCQlmb3IgKDs7KSB7CiAJCQlzaXplX3QgY29weTsKIAorCQkJaWYgKGRzdF9zbG90cyA+PSAq
aG93bWFueSkgeworCQkJCS8qIFdlIHN0aWxsIGhhdmUgd29yayB0byBkbywgYnV0IHdlJ3ZlIHJ1
biBvdXQgb2YKKwkJCQkgKiBkc3Qgc2xvdHMsIHNvIHdlIGhhdmUgdG8gZHJvcCB0aGUgcGFja2V0
LiAqLworCQkJCVJEKDMsICJOb3QgZW5vdWdoIHNsb3RzLCBkcm9wcGluZyBHU08gcGFja2V0Iik7
CisJCQkJcmV0dXJuOworCQkJfQorCiAJCQkvKiBHcmFiIHRoZSBHU08gaGVhZGVyIGlmIHdlIGRv
bid0IGhhdmUgaXQuICovCiAJCQlpZiAoIWdzb19oZHIpIHsKIAkJCQl1aW50MTZfdCBldGhlcnR5
cGU7CkBAIC0yMzEsMjggKzI3NSw3NSBAQAogCQkJCWdzb19oZHIgPSBzcmM7CiAKIAkJCQkvKiBM
b29rIGF0IHRoZSAnRXRoZXJ0eXBlJyBmaWVsZCB0byBzZWUgaWYgdGhpcyBwYWNrZXQKLQkJCQkg
KiBpcyBJUHY0IG9yIElQdjYuCi0JCQkJICovCi0JCQkJZXRoZXJ0eXBlID0gYmUxNnRvaCgqKCh1
aW50MTZfdCAqKShnc29faGRyICArIDEyKSkpOwotCQkJCWlmIChldGhlcnR5cGUgPT0gMHgwODAw
KQotCQkJCQlpcGhsZW4gPSAyMDsKLQkJCQllbHNlIC8qIGlmIChldGhlcnR5cGUgPT0gMHg4NkRE
KSAqLwotCQkJCQlpcGhsZW4gPSA0MDsKKwkJCQkgKiBpcyBJUHY0IG9yIElQdjYsIHRha2luZyBp
bnRvIGFjY291bnQgVkxBTgorCQkJCSAqIGVuY2Fwc3VsYXRpb24uICovCisJCQkJZm9yICg7Oykg
eworCQkJCQlpZiAoc3JjX2xlbiA8IGV0aGhsZW4pIHsKKwkJCQkJCVJEKDMsICJTaG9ydCBHU08g
ZnJhZ21lbnQgW2V0aF0sIGRyb3BwaW5nIik7CisJCQkJCQlyZXR1cm47CisJCQkJCX0KKwkJCQkJ
ZXRoZXJ0eXBlID0gYmUxNnRvaCgqKCh1aW50MTZfdCAqKQorCQkJCQkJCSAgICAoZ3NvX2hkciAr
IGV0aGhsZW4gLSAyKSkpOworCQkJCQlpZiAoZXRoZXJ0eXBlICE9IDB4ODEwMCkgLyogbm90IDgw
Mi4xcSAqLworCQkJCQkJYnJlYWs7CisJCQkJCWV0aGhsZW4gKz0gNDsKKwkJCQl9CisJCQkJc3dp
dGNoIChldGhlcnR5cGUpIHsKKwkJCQkJY2FzZSAweDA4MDA6ICAvKiBJUHY0ICovCisJCQkJCXsK
KwkJCQkJCXN0cnVjdCBubV9pcGhkciAqaXBoID0gKHN0cnVjdCBubV9pcGhkciAqKQorCQkJCQkJ
CQkJKGdzb19oZHIgKyBldGhobGVuKTsKKworCQkJCQkJaWYgKHNyY19sZW4gPCBldGhobGVuICsg
MjApIHsKKwkJCQkJCQlSRCgzLCAiU2hvcnQgR1NPIGZyYWdtZW50ICIKKwkJCQkJCQkgICAgICAi
W0lQdjRdLCBkcm9wcGluZyIpOworCQkJCQkJCXJldHVybjsKKwkJCQkJCX0KKwkJCQkJCWlwdjQg
PSAxOworCQkJCQkJaXBobGVuID0gNCAqIChpcGgtPnZlcnNpb25faWhsICYgMHgwRik7CisJCQkJ
CQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIDB4ODZERDogIC8qIElQdjYgKi8KKwkJCQkJCWlw
djQgPSAwOworCQkJCQkJaXBobGVuID0gNDA7CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoK
KwkJCQkJCVJEKDMsICJVbnN1cHBvcnRlZCBldGhlcnR5cGUsICIKKwkJCQkJCSAgICAgICJkcm9w
cGluZyBHU08gcGFja2V0Iik7CisJCQkJCQlyZXR1cm47CisJCQkJfQogCQkJCU5EKDMsICJ0eXBl
PSUwNHgiLCBldGhlcnR5cGUpOwogCisJCQkJaWYgKHNyY19sZW4gPCBldGhobGVuICsgaXBobGVu
KSB7CisJCQkJCVJEKDMsICJTaG9ydCBHU08gZnJhZ21lbnQgW0lQXSwgZHJvcHBpbmciKTsKKwkJ
CQkJcmV0dXJuOworCQkJCX0KKwogCQkJCS8qIENvbXB1dGUgZ3NvX2hkcl9sZW4uIEZvciBUQ1Ag
d2UgbmVlZCB0byByZWFkIHRoZQogCQkJCSAqIGNvbnRlbnQgb2YgdGhlICdEYXRhIE9mZnNldCcg
ZmllbGQuCiAJCQkJICovCiAJCQkJaWYgKHRjcCkgewotCQkJCQlzdHJ1Y3Qgbm1fdGNwaGRyICp0
Y3BoID0KLQkJCQkJCShzdHJ1Y3Qgbm1fdGNwaGRyICopJmdzb19oZHJbMTQraXBobGVuXTsKKwkJ
CQkJc3RydWN0IG5tX3RjcGhkciAqdGNwaCA9IChzdHJ1Y3Qgbm1fdGNwaGRyICopCisJCQkJCQkJ
CShnc29faGRyICsgZXRoaGxlbiArIGlwaGxlbik7CisKKwkJCQkJaWYgKHNyY19sZW4gPCBldGho
bGVuICsgaXBobGVuICsgMjApIHsKKwkJCQkJCVJEKDMsICJTaG9ydCBHU08gZnJhZ21lbnQgIgor
CQkJCQkJCQkiW1RDUF0sIGRyb3BwaW5nIik7CisJCQkJCQlyZXR1cm47CisJCQkJCX0KKwkJCQkJ
Z3NvX2hkcl9sZW4gPSBldGhobGVuICsgaXBobGVuICsKKwkJCQkJCSAgICAgIDQgKiAodGNwaC0+
ZG9mZiA+PiA0KTsKKwkJCQl9IGVsc2UgeworCQkJCQlnc29faGRyX2xlbiA9IGV0aGhsZW4gKyBp
cGhsZW4gKyA4OyAvKiBVRFAgKi8KKwkJCQl9CiAKLQkJCQkJZ3NvX2hkcl9sZW4gPSAxNCArIGlw
aGxlbiArIDQqKHRjcGgtPmRvZmYgPj4gNCk7Ci0JCQkJfSBlbHNlCi0JCQkJCWdzb19oZHJfbGVu
ID0gMTQgKyBpcGhsZW4gKyA4OyAvKiBVRFAgKi8KKwkJCQlpZiAoc3JjX2xlbiA8IGdzb19oZHJf
bGVuKSB7CisJCQkJCVJEKDMsICJTaG9ydCBHU08gZnJhZ21lbnQgW1RDUC9VRFBdLCBkcm9wcGlu
ZyIpOworCQkJCQlyZXR1cm47CisJCQkJfQogCiAJCQkJTkQoMywgImdzb19oZHJfbGVuICV1IGdz
b19tdHUgJWQiLCBnc29faGRyX2xlbiwKLQkJCQkJCQkJZHN0X25hLT5tZnMpOworCQkJCQkJCQkg
ICBkc3RfbmEtPm1mcyk7CiAKIAkJCQkvKiBBZHZhbmNlIHNvdXJjZSBwb2ludGVycy4gKi8KIAkJ
CQlzcmMgKz0gZ3NvX2hkcl9sZW47CkBAIC0yNjMsNyArMzU0LDYgQEAKIAkJCQkJCWJyZWFrOwog
CQkJCQlzcmMgPSBmdF9wLT5mdF9idWY7CiAJCQkJCXNyY19sZW4gPSBmdF9wLT5mdF9sZW47Ci0J
CQkJCWNvbnRpbnVlOwogCQkJCX0KIAkJCX0KIApAQCAtMjg5LDI1ICszNzksMjQgQEAKIAkJCQkv
KiBBZnRlciByYXcgc2VnbWVudGF0aW9uLCB3ZSBtdXN0IGZpeCBzb21lIGhlYWRlcgogCQkJCSAq
IGZpZWxkcyBhbmQgY29tcHV0ZSBjaGVja3N1bXMsIGluIGEgcHJvdG9jb2wgZGVwZW5kZW50CiAJ
CQkJICogd2F5LiAqLwotCQkJCWdzb19maXhfc2VnbWVudChkc3QsIGdzb19ieXRlcywgZ3NvX2lk
eCwKLQkJCQkJCXNlZ21lbnRlZF9ieXRlcywKLQkJCQkJCXNyY19sZW4gPT0gMCAmJiBmdF9wICsg
MSA9PSBmdF9lbmQsCi0JCQkJCQl0Y3AsIGlwaGxlbik7CisJCQkJZ3NvX2ZpeF9zZWdtZW50KGRz
dCArIGV0aGhsZW4sIGdzb19ieXRlcyAtIGV0aGhsZW4sCisJCQkJCQlpcHY0LCBpcGhsZW4sIHRj
cCwKKwkJCQkJCWdzb19pZHgsIHNlZ21lbnRlZF9ieXRlcywKKwkJCQkJCXNyY19sZW4gPT0gMCAm
JiBmdF9wICsgMSA9PSBmdF9lbmQpOwogCiAJCQkJTkQoImZyYW1lICV1IGNvbXBsZXRlZCB3aXRo
ICVkIGJ5dGVzIiwgZ3NvX2lkeCwgKGludClnc29fYnl0ZXMpOwotCQkJCXNsb3QtPmxlbiA9IGdz
b19ieXRlczsKLQkJCQlzbG90LT5mbGFncyA9IDA7Ci0JCQkJc2VnbWVudGVkX2J5dGVzICs9IGdz
b19ieXRlcyAtIGdzb19oZHJfbGVuOwotCisJCQkJZHN0X3Nsb3QtPmxlbiA9IGdzb19ieXRlczsK
KwkJCQlkc3Rfc2xvdC0+ZmxhZ3MgPSAwOwogCQkJCWRzdF9zbG90cysrOwotCi0JCQkJLyogTmV4
dCBkZXN0aW5hdGlvbiBzbG90LiAqLwotCQkJCSpqID0gbm1fbmV4dCgqaiwgbGltKTsKLQkJCQlz
bG90ID0gJnJpbmctPnNsb3RbKmpdOwotCQkJCWRzdCA9IE5NQigmZHN0X25hLT51cCwgc2xvdCk7
CisJCQkJc2VnbWVudGVkX2J5dGVzICs9IGdzb19ieXRlcyAtIGdzb19oZHJfbGVuOwogCiAJCQkJ
Z3NvX2J5dGVzID0gMDsKIAkJCQlnc29faWR4Kys7CisKKwkJCQkvKiBOZXh0IGRlc3RpbmF0aW9u
IHNsb3QuICovCisJCQkJal9jdXIgPSBubV9uZXh0KGpfY3VyLCBsaW0pOworCQkJCWRzdF9zbG90
ID0gJmRzdF9yaW5nLT5zbG90W2pfY3VyXTsKKwkJCQlkc3QgPSBOTUIoJmRzdF9uYS0+dXAsIGRz
dF9zbG90KTsKIAkJCX0KIAogCQkJLyogTmV4dCBpbnB1dCBzbG90LiAqLwpAQCAtMzQyLDEwICs0
MzEsMTAgQEAKIAkJCS8qIEluaXQvdXBkYXRlIHRoZSBwYWNrZXQgY2hlY2tzdW0gaWYgbmVlZGVk
LiAqLwogCQkJaWYgKHZoICYmICh2aC0+ZmxhZ3MgJiBWSVJUSU9fTkVUX0hEUl9GX05FRURTX0NT
VU0pKSB7CiAJCQkJaWYgKCFkc3Rfc2xvdHMpCi0JCQkJCWNzdW0gPSBubV9jc3VtX3JhdyhzcmMg
KyB2aC0+Y3N1bV9zdGFydCwKKwkJCQkJY3N1bSA9IG5tX29zX2NzdW1fcmF3KHNyYyArIHZoLT5j
c3VtX3N0YXJ0LAogCQkJCQkJCQlzcmNfbGVuIC0gdmgtPmNzdW1fc3RhcnQsIDApOwogCQkJCWVs
c2UKLQkJCQkJY3N1bSA9IG5tX2NzdW1fcmF3KHNyYywgc3JjX2xlbiwgY3N1bSk7CisJCQkJCWNz
dW0gPSBubV9vc19jc3VtX3JhdyhzcmMsIHNyY19sZW4sIGNzdW0pOwogCQkJfQogCiAJCQkvKiBS
b3VuZCB0byBhIG11bHRpcGxlIG9mIDY0ICovCkBAIC0zNTksNDQgKzQ0OCw0MyBAQAogCQkJfSBl
bHNlIHsKIAkJCQltZW1jcHkoZHN0LCBzcmMsIChpbnQpc3JjX2xlbik7CiAJCQl9Ci0JCQlzbG90
LT5sZW4gPSBkc3RfbGVuOwotCisJCQlkc3Rfc2xvdC0+bGVuID0gZHN0X2xlbjsKIAkJCWRzdF9z
bG90cysrOwogCiAJCQkvKiBOZXh0IGRlc3RpbmF0aW9uIHNsb3QuICovCi0JCQkqaiA9IG5tX25l
eHQoKmosIGxpbSk7Ci0JCQlzbG90ID0gJnJpbmctPnNsb3RbKmpdOwotCQkJZHN0ID0gTk1CKCZk
c3RfbmEtPnVwLCBzbG90KTsKKwkJCWpfY3VyID0gbm1fbmV4dChqX2N1ciwgbGltKTsKKwkJCWRz
dF9zbG90ID0gJmRzdF9yaW5nLT5zbG90W2pfY3VyXTsKKwkJCWRzdCA9IE5NQigmZHN0X25hLT51
cCwgZHN0X3Nsb3QpOwogCiAJCQkvKiBOZXh0IHNvdXJjZSBzbG90LiAqLwogCQkJZnRfcCsrOwog
CQkJc3JjID0gZnRfcC0+ZnRfYnVmOwogCQkJZHN0X2xlbiA9IHNyY19sZW4gPSBmdF9wLT5mdF9s
ZW47Ci0KIAkJfQogCiAJCS8qIEZpbmFsaXplIChmb2xkKSB0aGUgY2hlY2tzdW0gaWYgbmVlZGVk
LiAqLwogCQlpZiAoY2hlY2sgJiYgdmggJiYgKHZoLT5mbGFncyAmIFZJUlRJT19ORVRfSERSX0Zf
TkVFRFNfQ1NVTSkpIHsKLQkJCSpjaGVjayA9IG5tX2NzdW1fZm9sZChjc3VtKTsKKwkJCSpjaGVj
ayA9IG5tX29zX2NzdW1fZm9sZChjc3VtKTsKIAkJfQogCQlORCgzLCAidXNpbmcgJXUgZHN0X3Ns
b3RzIiwgZHN0X3Nsb3RzKTsKIAotCQkvKiBBIHNlY29uZCBwYXNzIG9uIHRoZSBkZXNpdGF0aW9u
cyBzbG90cyB0byBzZXQgdGhlIHNsb3QgZmxhZ3MsCisJCS8qIEEgc2Vjb25kIHBhc3Mgb24gdGhl
IGRlc3RpbmF0aW9uIHNsb3RzIHRvIHNldCB0aGUgc2xvdCBmbGFncywKIAkJICogdXNpbmcgdGhl
IHJpZ2h0IG51bWJlciBvZiBkZXN0aW5hdGlvbiBzbG90cy4KIAkJICovCi0JCXdoaWxlIChqX3N0
YXJ0ICE9ICpqKSB7Ci0JCQlzbG90ID0gJnJpbmctPnNsb3Rbal9zdGFydF07Ci0JCQlzbG90LT5m
bGFncyA9IChkc3Rfc2xvdHMgPDwgOCl8IE5TX01PUkVGUkFHOworCQl3aGlsZSAoal9zdGFydCAh
PSBqX2N1cikgeworCQkJZHN0X3Nsb3QgPSAmZHN0X3JpbmctPnNsb3Rbal9zdGFydF07CisJCQlk
c3Rfc2xvdC0+ZmxhZ3MgPSAoZHN0X3Nsb3RzIDw8IDgpfCBOU19NT1JFRlJBRzsKIAkJCWpfc3Rh
cnQgPSBubV9uZXh0KGpfc3RhcnQsIGxpbSk7CiAJCX0KIAkJLyogQ2xlYXIgTlNfTU9SRUZSQUcg
ZmxhZyBvbiBsYXN0IGVudHJ5LiAqLwotCQlzbG90LT5mbGFncyA9IChkc3Rfc2xvdHMgPDwgOCk7
CisJCWRzdF9zbG90LT5mbGFncyA9IChkc3Rfc2xvdHMgPDwgOCk7CiAJfQogCi0JLyogVXBkYXRl
IGhvd21hbnkuICovCisJLyogVXBkYXRlIGhvd21hbnkgYW5kIGouIFRoaXMgaXMgdG8gY29tbWl0
IHRoZSB1c2Ugb2YKKwkgKiB0aG9zZSBzbG90cyBpbiB0aGUgZGVzdGluYXRpb24gcmluZy4gKi8K
IAlpZiAodW5saWtlbHkoZHN0X3Nsb3RzID4gKmhvd21hbnkpKSB7Ci0JCWRzdF9zbG90cyA9ICpo
b3dtYW55OwotCQlEKCJTbG90IGFsbG9jYXRpb24gZXJyb3I6IFNob3VsZCBuZXZlciBoYXBwZW4i
KTsKKwkJRCgiU2xvdCBhbGxvY2F0aW9uIGVycm9yOiBUaGlzIGlzIGEgYnVnIik7CiAJfQorCSpq
ID0gal9jdXI7CiAJKmhvd21hbnkgLT0gZHN0X3Nsb3RzOwogfQpkaWZmIC11IC1yIC1OIHVzci9z
cmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX3BpcGUuYyAvdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9u
ZXRtYXBfcGlwZS5jCi0tLSB1c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9waXBlLmMJMjAx
Ni0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9kZXYvbmV0
bWFwL25ldG1hcF9waXBlLmMJMjAxNi0xMS0yMyAxNjo1Nzo1Ny44NTM5NjcwMDAgKzAwMDAKQEAg
LTEsNSArMSw2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEdpdXNlcHBlIExldHRpZXJp
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgR2l1c2Vw
cGUgTGV0dGllcmkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTIzLDcgKzI0LDcgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLS8q
ICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9uZXRtYXBfcGlwZS5jIDI4NTY5
NyAyMDE1LTA3LTE5IDE4OjA1OjQ5WiBsdWlnaSAkICovCisvKiAkRnJlZUJTRDogaGVhZC9zeXMv
ZGV2L25ldG1hcC9uZXRtYXBfcGlwZS5jIDI2MTkwOSAyMDE0LTAyLTE1IDA0OjUzOjA0WiBsdWln
aSAkICovCiAKICNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQogI2luY2x1ZGUgPHN5cy9jZGVmcy5o
PiAvKiBwcmVyZXF1aXNpdGUgKi8KQEAgLTU0LDYgKzU1LDkgQEAKICN3YXJuaW5nIE9TWCBzdXBw
b3J0IGlzIG9ubHkgcGFydGlhbAogI2luY2x1ZGUgIm9zeF9nbHVlLmgiCiAKKyNlbGlmIGRlZmlu
ZWQoX1dJTjMyKQorI2luY2x1ZGUgIndpbl9nbHVlLmgiCisKICNlbHNlCiAKICNlcnJvcglVbnN1
cHBvcnRlZCBwbGF0Zm9ybQpAQCAtNzIsMjYgKzc2LDI5IEBACiAKICNkZWZpbmUgTk1fUElQRV9N
QVhTTE9UUwk0MDk2CiAKLWludCBuZXRtYXBfZGVmYXVsdF9waXBlcyA9IDA7IC8qIGlnbm9yZWQs
IGtlcHQgZm9yIGNvbXBhdGliaWxpdHkgKi8KK3N0YXRpYyBpbnQgbmV0bWFwX2RlZmF1bHRfcGlw
ZXMgPSAwOyAvKiBpZ25vcmVkLCBrZXB0IGZvciBjb21wYXRpYmlsaXR5ICovCitTWVNCRUdJTih2
YXJzX3BpcGVzKTsKIFNZU0NUTF9ERUNMKF9kZXZfbmV0bWFwKTsKIFNZU0NUTF9JTlQoX2Rldl9u
ZXRtYXAsIE9JRF9BVVRPLCBkZWZhdWx0X3BpcGVzLCBDVExGTEFHX1JXLCAmbmV0bWFwX2RlZmF1
bHRfcGlwZXMsIDAgLCAiIik7CitTWVNFTkQ7CiAKIC8qIGFsbG9jYXRlIHRoZSBwaXBlIGFycmF5
IGluIHRoZSBwYXJlbnQgYWRhcHRlciAqLwogc3RhdGljIGludAogbm1fcGlwZV9hbGxvYyhzdHJ1
Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCB1X2ludCBucGlwZXMpCiB7Ci0Jc2l6ZV90IGxlbjsKKwlz
aXplX3Qgb2xkX2xlbiwgbGVuOwogCXN0cnVjdCBuZXRtYXBfcGlwZV9hZGFwdGVyICoqbnBhOwog
CiAJaWYgKG5waXBlcyA8PSBuYS0+bmFfbWF4X3BpcGVzKQogCQkvKiB3ZSBhbHJlYWR5IGhhdmUg
bW9yZSBlbnRyaWVzIHRoYXQgcmVxdWVzdGVkICovCiAJCXJldHVybiAwOwotCQorCiAJaWYgKG5w
aXBlcyA8IG5hLT5uYV9uZXh0X3BpcGUgfHwgbnBpcGVzID4gTk1fTUFYUElQRVMpCiAJCXJldHVy
biBFSU5WQUw7CiAKKwlvbGRfbGVuID0gc2l6ZW9mKHN0cnVjdCBuZXRtYXBfcGlwZV9hZGFwdGVy
ICopKm5hLT5uYV9tYXhfcGlwZXM7CiAgICAgICAgIGxlbiA9IHNpemVvZihzdHJ1Y3QgbmV0bWFw
X3BpcGVfYWRhcHRlciAqKSAqIG5waXBlczsKLQlucGEgPSByZWFsbG9jKG5hLT5uYV9waXBlcywg
bGVuLCBNX0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8pOworCW5wYSA9IG5tX29zX3JlYWxsb2Mo
bmEtPm5hX3BpcGVzLCBsZW4sIG9sZF9sZW4pOwogCWlmIChucGEgPT0gTlVMTCkKIAkJcmV0dXJu
IEVOT01FTTsKIApAQCAtMTEwLDcgKzExNyw3IEBACiAJCQlEKCJmcmVlaW5nIG5vdCBlbXB0eSBw
aXBlIGFycmF5IGZvciAlcyAoJWQgZGFuZ2xpbmcgcGlwZXMpISIsIG5hLT5uYW1lLAogCQkJCQlu
YS0+bmFfbmV4dF9waXBlKTsKIAkJfQotCQlmcmVlKG5hLT5uYV9waXBlcywgTV9ERVZCVUYpOwor
CQlubV9vc19mcmVlKG5hLT5uYV9waXBlcyk7CiAJCW5hLT5uYV9waXBlcyA9IE5VTEw7CiAJCW5h
LT5uYV9tYXhfcGlwZXMgPSAwOwogCQluYS0+bmFfbmV4dF9waXBlID0gMDsKQEAgLTE5OSw3ICsy
MDYsNyBAQAogCX0KIAogICAgICAgICB3aGlsZSAobGltaXQtLSA+IDApIHsKLSAgICAgICAgICAg
ICAgICBzdHJ1Y3QgbmV0bWFwX3Nsb3QgKnJzID0gJnJ4a3JpbmctPnNhdmVfcmluZy0+c2xvdFtq
XTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0bWFwX3Nsb3QgKnJzID0gJnJ4a3JpbmctPnJp
bmctPnNsb3Rbal07CiAgICAgICAgICAgICAgICAgc3RydWN0IG5ldG1hcF9zbG90ICp0cyA9ICZ0
eGtyaW5nLT5yaW5nLT5zbG90W2tdOwogICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRtYXBfc2xv
dCB0bXA7CiAKQEAgLTI5NSw3ICszMDIsNyBAQAogICogICAgICAgIHVzcjEgLS0+IGUxIC0tPiBl
MgogICoKICAqICAgIGFuZCB3ZSBhcmUgZTIuIGUxIGlzIGNlcnRhaW5seSByZWdpc3RlcmVkIGFu
ZCBvdXIKLSAqICAgIGtyaW5ncyBhbHJlYWR5IGV4aXN0LCBidXQgdGhleSBtYXkgYmUgaGlkZGVu
LgorICogICAga3JpbmdzIGFscmVhZHkgZXhpc3QuIE5vdGhpbmcgdG8gZG8uCiAgKi8KIHN0YXRp
YyBpbnQKIG5ldG1hcF9waXBlX2tyaW5nc19jcmVhdGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpu
YSkKQEAgLTMxMCw2NSArMzE3LDI4IEBACiAJCWludCBpOwogCiAJCS8qIGNhc2UgMSkgYWJvdmUg
Ki8KLQkJTkQoIiVwOiBjYXNlIDEsIGNyZWF0ZSBldmVyeXRoaW5nIiwgbmEpOworCQlEKCIlcDog
Y2FzZSAxLCBjcmVhdGUgYm90aCBlbmRzIiwgbmEpOwogCQllcnJvciA9IG5ldG1hcF9rcmluZ3Nf
Y3JlYXRlKG5hLCAwKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBlcnI7CiAKLQkJLyogd2UgYWxz
byBjcmVhdGUgYWxsIHRoZSByaW5ncywgc2luY2Ugd2UgbmVlZCB0bwotICAgICAgICAgICAgICAg
ICAqIHVwZGF0ZSB0aGUgc2F2ZV9yaW5nIHBvaW50ZXJzLgotICAgICAgICAgICAgICAgICAqIG5l
dG1hcF9tZW1fcmluZ3NfY3JlYXRlIChjYWxsZWQgYnkgb3VyIGNhbGxlcikKLSAgICAgICAgICAg
ICAgICAgKiB3aWxsIG5vdCBjcmVhdGUgdGhlIHJpbmdzIGFnYWluCi0gICAgICAgICAgICAgICAg
ICovCi0KLQkJZXJyb3IgPSBuZXRtYXBfbWVtX3JpbmdzX2NyZWF0ZShuYSk7Ci0JCWlmIChlcnJv
cikKLQkJCWdvdG8gZGVsX2tyaW5nczE7Ci0KLQkJLyogdXBkYXRlIG91ciBoaWRkZW4gcmluZyBw
b2ludGVycyAqLwotCQlmb3JfcnhfdHgodCkgewotCQkJZm9yIChpID0gMDsgaSA8IG5tYV9nZXRf
bnJpbmdzKG5hLCB0KSArIDE7IGkrKykKLQkJCQlOTVIobmEsIHQpW2ldLnNhdmVfcmluZyA9IE5N
UihuYSwgdClbaV0ucmluZzsKLQkJfQotCi0JCS8qIG5vdywgY3JlYXRlIGtyaW5ncyBhbmQgcmlu
Z3Mgb2YgdGhlIG90aGVyIGVuZCAqLworCQkvKiBjcmVhdGUgdGhlIGtyaW5ncyBvZiB0aGUgb3Ro
ZXIgZW5kICovCiAJCWVycm9yID0gbmV0bWFwX2tyaW5nc19jcmVhdGUob25hLCAwKTsKIAkJaWYg
KGVycm9yKQotCQkJZ290byBkZWxfcmluZ3MxOwotCi0JCWVycm9yID0gbmV0bWFwX21lbV9yaW5n
c19jcmVhdGUob25hKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBkZWxfa3JpbmdzMjsKLQotCQlm
b3JfcnhfdHgodCkgewotCQkJZm9yIChpID0gMDsgaSA8IG5tYV9nZXRfbnJpbmdzKG9uYSwgdCkg
KyAxOyBpKyspCi0JCQkJTk1SKG9uYSwgdClbaV0uc2F2ZV9yaW5nID0gTk1SKG9uYSwgdClbaV0u
cmluZzsKLQkJfQorCQkJZ290byBkZWxfa3JpbmdzMTsKIAogCQkvKiBjcm9zcyBsaW5rIHRoZSBr
cmluZ3MgKi8KIAkJZm9yX3J4X3R4KHQpIHsKLQkJCWVudW0gdHhyeCByPSBubV90eHJ4X3N3YXAo
dCk7IC8qIHN3YXAgTlJfVFggPC0+IE5SX1JYICovCisJCQllbnVtIHR4cnggciA9IG5tX3R4cnhf
c3dhcCh0KTsgLyogc3dhcCBOUl9UWCA8LT4gTlJfUlggKi8KIAkJCWZvciAoaSA9IDA7IGkgPCBu
bWFfZ2V0X25yaW5ncyhuYSwgdCk7IGkrKykgewogCQkJCU5NUihuYSwgdClbaV0ucGlwZSA9IE5N
UigmcG5hLT5wZWVyLT51cCwgcikgKyBpOwogCQkJCU5NUigmcG5hLT5wZWVyLT51cCwgcilbaV0u
cGlwZSA9IE5NUihuYSwgdCkgKyBpOwogCQkJfQogCQl9Ci0JfSBlbHNlIHsKLQkJaW50IGk7Ci0J
CS8qIGNhc2UgMikgYWJvdmUgKi8KLQkJLyogcmVjb3ZlciB0aGUgaGlkZGVuIHJpbmdzICovCi0J
CU5EKCIlcDogY2FzZSAyLCBoaWRkZW4gcmluZ3MiLCBuYSk7Ci0JCWZvcl9yeF90eCh0KSB7Ci0J
CQlmb3IgKGkgPSAwOyBpIDwgbm1hX2dldF9ucmluZ3MobmEsIHQpICsgMTsgaSsrKQotCQkJCU5N
UihuYSwgdClbaV0ucmluZyA9IE5NUihuYSwgdClbaV0uc2F2ZV9yaW5nOwotCQl9CisKIAl9CiAJ
cmV0dXJuIDA7CiAKLWRlbF9rcmluZ3MyOgotCW5ldG1hcF9rcmluZ3NfZGVsZXRlKG9uYSk7Ci1k
ZWxfcmluZ3MxOgotCW5ldG1hcF9tZW1fcmluZ3NfZGVsZXRlKG5hKTsKIGRlbF9rcmluZ3MxOgog
CW5ldG1hcF9rcmluZ3NfZGVsZXRlKG5hKTsKIGVycjoKQEAgLTM4Myw3ICszNTMsOCBAQAogICoK
ICAqICAgICAgICB1c3IxIC0tPiBlMSAtLT4gZTIKICAqCi0gKiAgICAgIGFuZCB3ZSBhcmUgZTEu
IE5vdGhpbmcgc3BlY2lhbCB0byBkby4KKyAqICAgICAgYW5kIHdlIGFyZSBlMS4gQ3JlYXRlIHRo
ZSBuZWVkZWQgcmluZ3Mgb2YgdGhlCisgKiAgICAgIG90aGVyIGVuZC4KICAqCiAgKiAxLmIpIHN0
YXRlIGlzCiAgKgpAQCAtNDEyLDE0ICszODMsNjUgQEAKIHsKIAlzdHJ1Y3QgbmV0bWFwX3BpcGVf
YWRhcHRlciAqcG5hID0KIAkJKHN0cnVjdCBuZXRtYXBfcGlwZV9hZGFwdGVyICopbmE7CisJc3Ry
dWN0IG5ldG1hcF9hZGFwdGVyICpvbmEgPSAmcG5hLT5wZWVyLT51cDsKKwlpbnQgaSwgZXJyb3Ig
PSAwOwogCWVudW0gdHhyeCB0OwogCiAJTkQoIiVwOiBvbm9mZiAlZCIsIG5hLCBvbm9mZik7CiAJ
aWYgKG9ub2ZmKSB7Ci0JCW5hLT5uYV9mbGFncyB8PSBOQUZfTkVUTUFQX09OOworCQlmb3Jfcnhf
dHgodCkgeworCQkJZm9yIChpID0gMDsgaSA8IG5tYV9nZXRfbnJpbmdzKG5hLCB0KSArIDE7IGkr
KykgeworCQkJCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nID0gJk5NUihuYSwgdClbaV07CisK
KwkJCQlpZiAobm1fa3JpbmdfcGVuZGluZ19vbihrcmluZykpIHsKKwkJCQkJLyogbWFyayB0aGUg
cGFydG5lciByaW5nIGFzIG5lZWRlZCAqLworCQkJCQlrcmluZy0+cGlwZS0+bnJfa2ZsYWdzIHw9
IE5LUl9ORUVEUklORzsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBjcmVhdGUgYWxsIG1pc3Np
bmcgbmVlZGVkIHJpbmdzIG9uIHRoZSBvdGhlciBlbmQgKi8KKwkJZXJyb3IgPSBuZXRtYXBfbWVt
X3JpbmdzX2NyZWF0ZShvbmEpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisKKwkJ
LyogSW4gY2FzZSBvZiBubyBlcnJvciB3ZSBwdXQgb3VyIHJpbmdzIGluIG5ldG1hcCBtb2RlICov
CisJCWZvcl9yeF90eCh0KSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgbm1hX2dldF9ucmluZ3MobmEs
IHQpICsgMTsgaSsrKSB7CisJCQkJc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcgPSAmTk1SKG5h
LCB0KVtpXTsKKworCQkJCWlmIChubV9rcmluZ19wZW5kaW5nX29uKGtyaW5nKSkgeworCQkJCQlr
cmluZy0+bnJfbW9kZSA9IE5LUl9ORVRNQVBfT047CisJCQkJfQorCQkJfQorCQl9CisJCWlmIChu
YS0+YWN0aXZlX2ZkcyA9PSAwKQorCQkJbmEtPm5hX2ZsYWdzIHw9IE5BRl9ORVRNQVBfT047CiAJ
fSBlbHNlIHsKLQkJbmEtPm5hX2ZsYWdzICY9IH5OQUZfTkVUTUFQX09OOworCQlpZiAobmEtPmFj
dGl2ZV9mZHMgPT0gMCkKKwkJCW5hLT5uYV9mbGFncyAmPSB+TkFGX05FVE1BUF9PTjsKKwkJZm9y
X3J4X3R4KHQpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBubWFfZ2V0X25yaW5ncyhuYSwgdCkgKyAx
OyBpKyspIHsKKwkJCQlzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZyA9ICZOTVIobmEsIHQpW2ld
OworCisJCQkJaWYgKG5tX2tyaW5nX3BlbmRpbmdfb2ZmKGtyaW5nKSkgeworCQkJCQlrcmluZy0+
bnJfbW9kZSA9IE5LUl9ORVRNQVBfT0ZGOworCQkJCQkvKiBtYXJrIHRoZSBwZWVyIHJpbmcgYXMg
bm8gbG9uZ2VyIG5lZWRlZCBieSB1cworCQkJCQkgKiAoaXQgbWF5IHN0aWxsIGJlIGtlcHQgaWYg
c29tYm9keSBlbHNlIGlzIHVzaW5nIGl0KQorCQkJCQkgKi8KKwkJCQkJa3JpbmctPnBpcGUtPm5y
X2tmbGFncyAmPSB+TktSX05FRURSSU5HOworCQkJCX0KKwkJCX0KKwkJfQorCQkvKiBkZWxldGUg
YWxsIHRoZSBwZWVyIHJpbmdzIHRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQgKi8KKwkJbmV0bWFw
X21lbV9yaW5nc19kZWxldGUob25hKTsKKwl9CisKKwlpZiAobmEtPmFjdGl2ZV9mZHMpIHsKKwkJ
RCgiYWN0aXZlX2ZkcyAlZCIsIG5hLT5hY3RpdmVfZmRzKTsKKwkJcmV0dXJuIDA7CiAJfQorCiAJ
aWYgKHBuYS0+cGVlcl9yZWYpIHsKIAkJTkQoIiVwOiBjYXNlIDEuYSBvciAyLmEsIG5vdGhpbmcg
dG8gZG8iLCBuYSk7CiAJCXJldHVybiAwOwpAQCAtNDI5LDE4ICs0NTEsMTEgQEAKIAkJcG5hLT5w
ZWVyLT5wZWVyX3JlZiA9IDA7CiAJCW5ldG1hcF9hZGFwdGVyX3B1dChuYSk7CiAJfSBlbHNlIHsK
LQkJaW50IGk7CiAJCU5EKCIlcDogY2FzZSAyLmIsIGdyYWIgcGVlciIsIG5hKTsKIAkJbmV0bWFw
X2FkYXB0ZXJfZ2V0KG5hKTsKIAkJcG5hLT5wZWVyLT5wZWVyX3JlZiA9IDE7Ci0JCS8qIGhpZGUg
b3VyIHJpbmdzIGZyb20gbmV0bWFwX21lbV9yaW5nc19kZWxldGUgKi8KLQkJZm9yX3J4X3R4KHQp
IHsKLQkJCWZvciAoaSA9IDA7IGkgPCBubWFfZ2V0X25yaW5ncyhuYSwgdCkgKyAxOyBpKyspIHsK
LQkJCQlOTVIobmEsIHQpW2ldLnJpbmcgPSBOVUxMOwotCQkJfQotCQl9CiAJfQotCXJldHVybiAw
OworCXJldHVybiBlcnJvcjsKIH0KIAogLyogbmV0bWFwX3BpcGVfa3JpbmdzX2RlbGV0ZS4KQEAg
LTQ3MCw4ICs0ODUsNiBAQAogCXN0cnVjdCBuZXRtYXBfcGlwZV9hZGFwdGVyICpwbmEgPQogCQko
c3RydWN0IG5ldG1hcF9waXBlX2FkYXB0ZXIgKiluYTsKIAlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIg
Km9uYTsgLyogbmEgb2YgdGhlIG90aGVyIGVuZCAqLwotCWludCBpOwotCWVudW0gdHhyeCB0Owog
CiAJaWYgKCFwbmEtPnBlZXJfcmVmKSB7CiAJCU5EKCIlcDogY2FzZSAyLCBrZXB0IGFsaXZlIGJ5
IHBlZXIiLCAgbmEpOwpAQCAtNDgwLDE4ICs0OTMsMTIgQEAKIAkvKiBjYXNlIDEpIGFib3ZlICov
CiAJTkQoIiVwOiBjYXNlIDEsIGRlbGV0aW5nIGV2ZXJ5aGluZyIsIG5hKTsKIAluZXRtYXBfa3Jp
bmdzX2RlbGV0ZShuYSk7IC8qIGFsc28gemVyb2VzIHR4X3JpbmdzIGV0Yy4gKi8KLQkvKiByZXN0
b3JlIHRoZSByaW5nIHRvIGJlIGRlbGV0ZWQgb24gdGhlIHBlZXIgKi8KIAlvbmEgPSAmcG5hLT5w
ZWVyLT51cDsKIAlpZiAob25hLT50eF9yaW5ncyA9PSBOVUxMKSB7CiAJCS8qIGFscmVhZHkgZGVs
ZXRlZCwgd2UgbXVzdCBiZSBvbiBhbgogICAgICAgICAgICAgICAgICAqIGNsZWFudXAtYWZ0ZXIt
ZXJyb3IgcGF0aCAqLwogCQlyZXR1cm47CiAJfQotCWZvcl9yeF90eCh0KSB7Ci0JCWZvciAoaSA9
IDA7IGkgPCBubWFfZ2V0X25yaW5ncyhvbmEsIHQpICsgMTsgaSsrKQotCQkJTk1SKG9uYSwgdClb
aV0ucmluZyA9IE5NUihvbmEsIHQpW2ldLnNhdmVfcmluZzsKLQl9Ci0JbmV0bWFwX21lbV9yaW5n
c19kZWxldGUob25hKTsKIAluZXRtYXBfa3JpbmdzX2RlbGV0ZShvbmEpOwogfQogCkBAIC01MTks
NiArNTI2LDcgQEAKIAlzdHJ1Y3Qgbm1yZXEgcG5tcjsKIAlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIg
KnBuYTsgLyogcGFyZW50IGFkYXB0ZXIgKi8KIAlzdHJ1Y3QgbmV0bWFwX3BpcGVfYWRhcHRlciAq
bW5hLCAqc25hLCAqcmVxOworCXN0cnVjdCBpZm5ldCAqaWZwID0gTlVMTDsKIAl1X2ludCBwaXBl
X2lkOwogCWludCByb2xlID0gbm1yLT5ucl9mbGFncyAmIE5SX1JFR19NQVNLOwogCWludCBlcnJv
cjsKQEAgLTUzNiw3ICs1NDQsNyBAQAogCW1lbWNweSgmcG5tci5ucl9uYW1lLCBubXItPm5yX25h
bWUsIElGTkFNU0laKTsKIAkvKiBwYXNzIHRvIHBhcmVudCB0aGUgcmVxdWVzdGVkIG51bWJlciBv
ZiBwaXBlcyAqLwogCXBubXIubnJfYXJnMSA9IG5tci0+bnJfYXJnMTsKLQllcnJvciA9IG5ldG1h
cF9nZXRfbmEoJnBubXIsICZwbmEsIGNyZWF0ZSk7CisJZXJyb3IgPSBuZXRtYXBfZ2V0X25hKCZw
bm1yLCAmcG5hLCAmaWZwLCBjcmVhdGUpOwogCWlmIChlcnJvcikgewogCQlORCgicGFyZW50IGxv
b2t1cCBmYWlsZWQ6ICVkIiwgZXJyb3IpOwogCQlyZXR1cm4gZXJyb3I7CkBAIC01NzYsNyArNTg0
LDcgQEAKICAgICAgICAgICogVGhlIGVuZHBvaW50IHdlIHdlcmUgYXNrZWQgZm9yIGhvbGRzIGEg
cmVmZXJlbmNlIHRvCiAgICAgICAgICAqIHRoZSBvdGhlciBvbmUuCiAgICAgICAgICAqLwotCW1u
YSA9IG1hbGxvYyhzaXplb2YoKm1uYSksIE1fREVWQlVGLCBNX05PV0FJVCB8IE1fWkVSTyk7CisJ
bW5hID0gbm1fb3NfbWFsbG9jKHNpemVvZigqbW5hKSk7CiAJaWYgKG1uYSA9PSBOVUxMKSB7CiAJ
CWVycm9yID0gRU5PTUVNOwogCQlnb3RvIHB1dF9vdXQ7CkBAIC01OTMsNyArNjAxLDggQEAKIAlt
bmEtPnVwLm5tX2R0b3IgPSBuZXRtYXBfcGlwZV9kdG9yOwogCW1uYS0+dXAubm1fa3JpbmdzX2Ny
ZWF0ZSA9IG5ldG1hcF9waXBlX2tyaW5nc19jcmVhdGU7CiAJbW5hLT51cC5ubV9rcmluZ3NfZGVs
ZXRlID0gbmV0bWFwX3BpcGVfa3JpbmdzX2RlbGV0ZTsKLQltbmEtPnVwLm5tX21lbSA9IHBuYS0+
bm1fbWVtOworCW1uYS0+dXAubm1fbWVtID0gbmV0bWFwX21lbV9nZXQocG5hLT5ubV9tZW0pOwor
CW1uYS0+dXAubmFfZmxhZ3MgfD0gTkFGX01FTV9PV05FUjsKIAltbmEtPnVwLm5hX2x1dCA9IHBu
YS0+bmFfbHV0OwogCiAJbW5hLT51cC5udW1fdHhfcmluZ3MgPSAxOwpAQCAtNjEzLDEzICs2MjIs
MTQgQEAKIAkJZ290byBmcmVlX21uYTsKIAogCS8qIGNyZWF0ZSB0aGUgc2xhdmUgKi8KLQlzbmEg
PSBtYWxsb2Moc2l6ZW9mKCptbmEpLCBNX0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8pOworCXNu
YSA9IG5tX29zX21hbGxvYyhzaXplb2YoKm1uYSkpOwogCWlmIChzbmEgPT0gTlVMTCkgewogCQll
cnJvciA9IEVOT01FTTsKIAkJZ290byB1bnJlZ2lzdGVyX21uYTsKIAl9CiAJLyogbW9zdCBmaWVs
ZHMgYXJlIHRoZSBzYW1lLCBjb3B5IGZyb20gbWFzdGVyIGFuZCB0aGVuIGZpeCAqLwogCSpzbmEg
PSAqbW5hOworCXNuYS0+dXAubm1fbWVtID0gbmV0bWFwX21lbV9nZXQobW5hLT51cC5ubV9tZW0p
OwogCXNucHJpbnRmKHNuYS0+dXAubmFtZSwgc2l6ZW9mKHNuYS0+dXAubmFtZSksICIlc30lZCIs
IHBuYS0+bmFtZSwgcGlwZV9pZCk7CiAJc25hLT5yb2xlID0gTlJfUkVHX1BJUEVfU0xBVkU7CiAJ
ZXJyb3IgPSBuZXRtYXBfYXR0YWNoX2NvbW1vbigmc25hLT51cCk7CkBAIC02NTIsMjYgKzY2Miwy
NSBAQAogCSpuYSA9ICZyZXEtPnVwOwogCW5ldG1hcF9hZGFwdGVyX2dldCgqbmEpOwogCi0JLyog
d3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gYmFjayAqLwotCW5tci0+bnJfdHhfcmluZ3MgPSByZXEt
PnVwLm51bV90eF9yaW5nczsKLQlubXItPm5yX3J4X3JpbmdzID0gcmVxLT51cC5udW1fcnhfcmlu
Z3M7Ci0Jbm1yLT5ucl90eF9zbG90cyA9IHJlcS0+dXAubnVtX3R4X2Rlc2M7Ci0Jbm1yLT5ucl9y
eF9zbG90cyA9IHJlcS0+dXAubnVtX3J4X2Rlc2M7Ci0KIAkvKiBrZWVwIHRoZSByZWZlcmVuY2Ug
dG8gdGhlIHBhcmVudC4KICAgICAgICAgICogSXQgd2lsbCBiZSByZWxlYXNlZCBieSB0aGUgcmVx
IGRlc3RydWN0b3IKICAgICAgICAgICovCiAKKwkvKiBkcm9wIHRoZSBpZnAgcmVmZXJlbmNlLCBp
ZiBhbnkgKi8KKwlpZiAoaWZwKSB7CisJCWlmX3JlbGUoaWZwKTsKKwl9CisKIAlyZXR1cm4gMDsK
IAogZnJlZV9zbmE6Ci0JZnJlZShzbmEsIE1fREVWQlVGKTsKKwlubV9vc19mcmVlKHNuYSk7CiB1
bnJlZ2lzdGVyX21uYToKIAluZXRtYXBfcGlwZV9yZW1vdmUocG5hLCBtbmEpOwogZnJlZV9tbmE6
Ci0JZnJlZShtbmEsIE1fREVWQlVGKTsKKwlubV9vc19mcmVlKG1uYSk7CiBwdXRfb3V0OgotCW5l
dG1hcF9hZGFwdGVyX3B1dChwbmEpOworCW5ldG1hcF91bmdldF9uYShwbmEsIGlmcCk7CiAJcmV0
dXJuIGVycm9yOwogfQogCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRt
YXBfcHQuYyAvdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfcHQuYwotLS0gdXNyL3NyYy9z
eXMvZGV2L25ldG1hcC9uZXRtYXBfcHQuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCAr
MDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX3B0LmMJMjAxNi0xMS0yMyAx
Njo1Nzo1Ny44NTQ2NjcwMDAgKzAwMDAKQEAgLTAsMCArMSwxNDUyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IFN0ZWZhbm8gR2FyemFyZWxsYQorICogQ29weXJpZ2h0IChDKSAyMDE2IFZp
bmNlbnpvIE1hZmZpb25lCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAk
RnJlZUJTRCQKKyAqLworCisvKgorICogY29tbW9uIGhlYWRlcnMKKyAqLworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFt
Lmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lu
Y2x1ZGUgPHN5cy9zZWxpbmZvLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUg
PG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2J1
cy5oPgorCisvLyNkZWZpbmUgdXNsZWVwX3JhbmdlKF8xLCBfMikKKyNkZWZpbmUgdXNsZWVwX3Jh
bmdlKF8xLCBfMikgXAorCXBhdXNlX3NidCgicHRuZXRtYXAtc2xlZXAiLCBTQlRfMVVTICogXzEs
IFNCVF8xVVMgKiAxLCBDX0FCU09MVVRFKQorCisjZWxpZiBkZWZpbmVkKGxpbnV4KQorI2luY2x1
ZGUgPGJzZF9nbHVlLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC9uZXRtYXAuaD4KKyNpbmNs
dWRlIDxkZXYvbmV0bWFwL25ldG1hcF9rZXJuLmg+CisjaW5jbHVkZSA8bmV0L25ldG1hcF92aXJ0
Lmg+CisjaW5jbHVkZSA8ZGV2L25ldG1hcC9uZXRtYXBfbWVtMi5oPgorCisjaWZkZWYgV0lUSF9Q
VE5FVE1BUF9IT1NUCisKKy8qIFJYIGN5Y2xlIHdpdGhvdXQgcmVjZWl2ZSBhbnkgcGFja2V0cyAq
LworI2RlZmluZSBQVE5fUlhfRFJZX0NZQ0xFU19NQVgJMTAKKworLyogTGltaXQgQmF0Y2ggVFgg
dG8gaGFsZiByaW5nLgorICogQ3VycmVudGx5IGRpc2FibGVkLCBzaW5jZSBpdCBkb2VzIG5vdCBt
YW5hZ2UgTlNfTU9SRUZSQUcsIHdoaWNoCisgKiByZXN1bHRzIGluIHJhbmRvbSBkcm9wcyBpbiB0
aGUgVkFMRSB0eHN5bmMuICovCisvLyNkZWZpbmUgUFROX1RYX0JBVENIX0xJTShfbikJKChfbiA+
PiAxKSkKKworLy8jZGVmaW5lIEJVU1lfV0FJVAorCisjZGVmaW5lIE5FVE1BUF9QVF9ERUJVRyAg
LyogRW5hYmxlcyBjb21tdW5pY2F0aW9uIGRlYnVnZ2luZy4gKi8KKyNpZmRlZiBORVRNQVBfUFRf
REVCVUcKKyNkZWZpbmUgREJHKHgpIHgKKyNlbHNlCisjZGVmaW5lIERCRyh4KQorI2VuZGlmCisK
KworI3VuZGVmIFJBVEUKKy8vI2RlZmluZSBSQVRFICAvKiBFbmFibGVzIGNvbW11bmljYXRpb24g
c3RhdGlzdGljcy4gKi8KKyNpZmRlZiBSQVRFCisjZGVmaW5lIElGUkFURSh4KSB4CitzdHJ1Y3Qg
cmF0ZV9iYXRjaF9zdGF0cyB7CisgICAgdW5zaWduZWQgbG9uZyBzeW5jOworICAgIHVuc2lnbmVk
IGxvbmcgc3luY19kcnk7CisgICAgdW5zaWduZWQgbG9uZyBwa3Q7Cit9OworCitzdHJ1Y3QgcmF0
ZV9zdGF0cyB7CisgICAgdW5zaWduZWQgbG9uZyBndHhrOyAgICAgLyogR3Vlc3QgLS0+IEhvc3Qg
VHgga2lja3MuICovCisgICAgdW5zaWduZWQgbG9uZyBncnhrOyAgICAgLyogR3Vlc3QgLS0+IEhv
c3QgUngga2lja3MuICovCisgICAgdW5zaWduZWQgbG9uZyBodHhrOyAgICAgLyogSG9zdCAtLT4g
R3Vlc3QgVHgga2lja3MuICovCisgICAgdW5zaWduZWQgbG9uZyBocnhrOyAgICAgLyogSG9zdCAt
LT4gR3Vlc3QgUnggS2lja3MuICovCisgICAgdW5zaWduZWQgbG9uZyBidHh3dTsgICAgLyogQmFj
a2VuZCBUeCB3YWtlLXVwLiAqLworICAgIHVuc2lnbmVkIGxvbmcgYnJ4d3U7ICAgIC8qIEJhY2tl
bmQgUnggd2FrZS11cC4gKi8KKyAgICBzdHJ1Y3QgcmF0ZV9iYXRjaF9zdGF0cyB0eGJzOworICAg
IHN0cnVjdCByYXRlX2JhdGNoX3N0YXRzIHJ4YnM7Cit9OworCitzdHJ1Y3QgcmF0ZV9jb250ZXh0
IHsKKyAgICBzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKyAgICBzdHJ1Y3QgcmF0ZV9zdGF0cyBu
ZXc7CisgICAgc3RydWN0IHJhdGVfc3RhdHMgb2xkOworfTsKKworI2RlZmluZSBSQVRFX1BFUklP
RCAgMgorc3RhdGljIHZvaWQKK3JhdGVfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBhcmcpCit7Cisg
ICAgc3RydWN0IHJhdGVfY29udGV4dCAqIGN0eCA9IChzdHJ1Y3QgcmF0ZV9jb250ZXh0ICopYXJn
OworICAgIHN0cnVjdCByYXRlX3N0YXRzIGN1ciA9IGN0eC0+bmV3OworICAgIHN0cnVjdCByYXRl
X2JhdGNoX3N0YXRzICp0eGJzID0gJmN1ci50eGJzOworICAgIHN0cnVjdCByYXRlX2JhdGNoX3N0
YXRzICpyeGJzID0gJmN1ci5yeGJzOworICAgIHN0cnVjdCByYXRlX2JhdGNoX3N0YXRzICp0eGJz
X29sZCA9ICZjdHgtPm9sZC50eGJzOworICAgIHN0cnVjdCByYXRlX2JhdGNoX3N0YXRzICpyeGJz
X29sZCA9ICZjdHgtPm9sZC5yeGJzOworICAgIHVpbnQ2NF90IHR4X2JhdGNoLCByeF9iYXRjaDsK
KyAgICB1bnNpZ25lZCBsb25nIHR4cGt0cywgcnhwa3RzOworICAgIHVuc2lnbmVkIGxvbmcgZ3R4
aywgZ3J4azsKKyAgICBpbnQgcjsKKworICAgIHR4cGt0cyA9IHR4YnMtPnBrdCAtIHR4YnNfb2xk
LT5wa3Q7CisgICAgcnhwa3RzID0gcnhicy0+cGt0IC0gcnhic19vbGQtPnBrdDsKKworICAgIHR4
X2JhdGNoID0gKCh0eGJzLT5zeW5jIC0gdHhic19vbGQtPnN5bmMpID4gMCkgPworCSAgICAgICB0
eHBrdHMgLyAodHhicy0+c3luYyAtIHR4YnNfb2xkLT5zeW5jKTogMDsKKyAgICByeF9iYXRjaCA9
ICgocnhicy0+c3luYyAtIHJ4YnNfb2xkLT5zeW5jKSA+IDApID8KKwkgICAgICAgcnhwa3RzIC8g
KHJ4YnMtPnN5bmMgLSByeGJzX29sZC0+c3luYyk6IDA7CisKKyAgICAvKiBGaXgtdXAgZ3R4ayBh
bmQgZ3J4ayBlc3RpbWF0ZXMuICovCisgICAgZ3R4ayA9IChjdXIuZ3R4ayAtIGN0eC0+b2xkLmd0
eGspIC0gKGN1ci5idHh3dSAtIGN0eC0+b2xkLmJ0eHd1KTsKKyAgICBncnhrID0gKGN1ci5ncnhr
IC0gY3R4LT5vbGQuZ3J4aykgLSAoY3VyLmJyeHd1IC0gY3R4LT5vbGQuYnJ4d3UpOworCisgICAg
cHJpbnRrKCJ0eHBrdHMgID0gJWx1IEh6XG4iLCB0eHBrdHMvUkFURV9QRVJJT0QpOworICAgIHBy
aW50aygiZ3R4ayAgICA9ICVsdSBIelxuIiwgZ3R4ay9SQVRFX1BFUklPRCk7CisgICAgcHJpbnRr
KCJodHhrICAgID0gJWx1IEh6XG4iLCAoY3VyLmh0eGsgLSBjdHgtPm9sZC5odHhrKS9SQVRFX1BF
UklPRCk7CisgICAgcHJpbnRrKCJidHh3ICAgID0gJWx1IEh6XG4iLCAoY3VyLmJ0eHd1IC0gY3R4
LT5vbGQuYnR4d3UpL1JBVEVfUEVSSU9EKTsKKyAgICBwcmludGsoInJ4cGt0cyAgPSAlbHUgSHpc
biIsIHJ4cGt0cy9SQVRFX1BFUklPRCk7CisgICAgcHJpbnRrKCJncnhrICAgID0gJWx1IEh6XG4i
LCBncnhrL1JBVEVfUEVSSU9EKTsKKyAgICBwcmludGsoImhyeGsgICAgPSAlbHUgSHpcbiIsIChj
dXIuaHJ4ayAtIGN0eC0+b2xkLmhyeGspL1JBVEVfUEVSSU9EKTsKKyAgICBwcmludGsoImJyeHcg
ICAgPSAlbHUgSHpcbiIsIChjdXIuYnJ4d3UgLSBjdHgtPm9sZC5icnh3dSkvUkFURV9QRVJJT0Qp
OworICAgIHByaW50aygidHhiYXRjaCA9ICVsbHUgYXZnXG4iLCB0eF9iYXRjaCk7CisgICAgcHJp
bnRrKCJyeGJhdGNoID0gJWxsdSBhdmdcbiIsIHJ4X2JhdGNoKTsKKyAgICBwcmludGsoIlxuIik7
CisKKyAgICBjdHgtPm9sZCA9IGN1cjsKKyAgICByID0gbW9kX3RpbWVyKCZjdHgtPnRpbWVyLCBq
aWZmaWVzICsKKyAgICAgICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoUkFURV9QRVJJT0QgKiAxMDAw
KSk7CisgICAgaWYgKHVubGlrZWx5KHIpKQorICAgICAgICBEKCJbcHRuZXRtYXBdIEVycm9yOiBt
b2RfdGltZXIoKVxuIik7Cit9CisKK3N0YXRpYyB2b2lkCityYXRlX2JhdGNoX3N0YXRzX3VwZGF0
ZShzdHJ1Y3QgcmF0ZV9iYXRjaF9zdGF0cyAqYmYsIHVpbnQzMl90IHByZV90YWlsLAorCQkgICAg
ICAgIHVpbnQzMl90IGFjdF90YWlsLCB1aW50MzJfdCBudW1fc2xvdHMpCit7CisgICAgaW50IG4g
PSAoaW50KWFjdF90YWlsIC0gcHJlX3RhaWw7CisKKyAgICBpZiAobikgeworICAgICAgICBpZiAo
biA8IDApCisgICAgICAgICAgICBuICs9IG51bV9zbG90czsKKworICAgICAgICBiZi0+c3luYysr
OworICAgICAgICBiZi0+cGt0ICs9IG47CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmYtPnN5bmNf
ZHJ5Kys7CisgICAgfQorfQorCisjZWxzZSAvKiAhUkFURSAqLworI2RlZmluZSBJRlJBVEUoeCkK
KyNlbmRpZiAvKiBSQVRFICovCisKK3N0cnVjdCBwdG5ldG1hcF9zdGF0ZSB7CisgICAgLyogS3Ro
cmVhZHMuICovCisgICAgc3RydWN0IG5tX2t0aHJlYWQgKiprdGhyZWFkczsKKworICAgIC8qIFNo
YXJlZCBtZW1vcnkgd2l0aCB0aGUgZ3Vlc3QgKFRYL1JYKSAqLworICAgIHN0cnVjdCBwdG5ldF9y
aW5nIF9fdXNlciAqcHRyaW5nczsKKworICAgIGJvb2wgc3RvcHBlZDsKKworICAgIC8qIE5ldG1h
cCBhZGFwdGVyIHdyYXBwaW5nIHRoZSBiYWNrZW5kLiAqLworICAgIHN0cnVjdCBuZXRtYXBfcHRf
aG9zdF9hZGFwdGVyICpwdGhfbmE7CisKKyAgICBJRlJBVEUoc3RydWN0IHJhdGVfY29udGV4dCBy
YXRlX2N0eDspCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQKK3B0bmV0bWFwX2tyaW5nX2R1bXAo
Y29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nKQorewor
ICAgIFJEKDEsICIlcyAtIG5hbWU6ICVzIGh3Y3VyOiAlZCBod3RhaWw6ICVkIHJoZWFkOiAlZCBy
Y3VyOiAlZCBcCisgICAgCQkgICAgcnRhaWw6ICVkIGhlYWQ6ICVkIGN1cjogJWQgdGFpbDogJWQi
LAorICAgICAgICAgICAgdGl0bGUsIGtyaW5nLT5uYW1lLCBrcmluZy0+bnJfaHdjdXIsCisgICAg
ICAgICAgICBrcmluZy0+bnJfaHd0YWlsLCBrcmluZy0+cmhlYWQsIGtyaW5nLT5yY3VyLCBrcmlu
Zy0+cnRhaWwsCisgICAgICAgICAgICBrcmluZy0+cmluZy0+aGVhZCwga3JpbmctPnJpbmctPmN1
ciwga3JpbmctPnJpbmctPnRhaWwpOworfQorCisvKgorICogVFggZnVuY3Rpb25zIHRvIHNldC9n
ZXQgYW5kIHRvIGhhbmRsZSBob3N0L2d1ZXN0IGtpY2suCisgKi8KKworCisvKiBFbmFibGUgb3Ig
ZGlzYWJsZSBndWVzdCAtLT4gaG9zdCBraWNrcy4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorcHRy
aW5nX2tpY2tfZW5hYmxlKHN0cnVjdCBwdG5ldF9yaW5nIF9fdXNlciAqcHRyaW5nLCB1aW50MzJf
dCB2YWwpCit7CisgICAgQ1NCX1dSSVRFKHB0cmluZywgaG9zdF9uZWVkX2tpY2ssIHZhbCk7Cit9
CisKKy8qIEFyZSBndWVzdCBpbnRlcnJ1cHQgZW5hYmxlZCBvciBkaXNhYmxlZD8gKi8KK3N0YXRp
YyBpbmxpbmUgdWludDMyX3QKK3B0cmluZ19pbnRyX2VuYWJsZWQoc3RydWN0IHB0bmV0X3Jpbmcg
X191c2VyICpwdHJpbmcpCit7CisgICAgdWludDMyX3QgdjsKKworICAgIENTQl9SRUFEKHB0cmlu
ZywgZ3Vlc3RfbmVlZF9raWNrLCB2KTsKKworICAgIHJldHVybiB2OworfQorCisvKiBFbmFibGUg
b3IgZGlzYWJsZSBndWVzdCBpbnRlcnJ1cHRzLiAqLworc3RhdGljIGlubGluZSB2b2lkCitwdHJp
bmdfaW50cl9lbmFibGUoc3RydWN0IHB0bmV0X3JpbmcgX191c2VyICpwdHJpbmcsIHVpbnQzMl90
IHZhbCkKK3sKKyAgICBDU0JfV1JJVEUocHRyaW5nLCBndWVzdF9uZWVkX2tpY2ssIHZhbCk7Cit9
CisKKy8qIEhhbmRsZSBUWCBldmVudHM6IGZyb20gdGhlIGd1ZXN0IG9yIGZyb20gdGhlIGJhY2tl
bmQgKi8KK3N0YXRpYyB2b2lkCitwdG5ldG1hcF90eF9oYW5kbGVyKHZvaWQgKmRhdGEpCit7Cisg
ICAgc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcgPSBkYXRhOworICAgIHN0cnVjdCBuZXRtYXBf
cHRfaG9zdF9hZGFwdGVyICpwdGhfbmEgPQorCQkoc3RydWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0
ZXIgKilrcmluZy0+bmEtPm5hX3ByaXZhdGU7CisgICAgc3RydWN0IHB0bmV0bWFwX3N0YXRlICpw
dG5zID0gcHRoX25hLT5wdG5zOworICAgIHN0cnVjdCBwdG5ldF9yaW5nIF9fdXNlciAqcHRyaW5n
OworICAgIHN0cnVjdCBuZXRtYXBfcmluZyBzaGFkb3dfcmluZzsgLyogc2hhZG93IGNvcHkgb2Yg
dGhlIG5ldG1hcF9yaW5nICovCisgICAgYm9vbCBtb3JlX3R4c3BhY2UgPSBmYWxzZTsKKyAgICBz
dHJ1Y3Qgbm1fa3RocmVhZCAqa3RoOworICAgIHVpbnQzMl90IG51bV9zbG90czsKKyAgICBpbnQg
YmF0Y2g7CisgICAgSUZSQVRFKHVpbnQzMl90IHByZV90YWlsKTsKKworICAgIGlmICh1bmxpa2Vs
eSghcHRucykpIHsKKyAgICAgICAgRCgiRVJST1IgcHRuZXRtYXAgc3RhdGUgaXMgTlVMTCIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHVubGlrZWx5KHB0bnMtPnN0b3BwZWQp
KSB7CisgICAgICAgIFJEKDEsICJiYWNrZW5kIG5ldG1hcCBpcyBiZWluZyBzdG9wcGVkIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodW5saWtlbHkobm1fa3JfdHJ5Z2V0KGty
aW5nLCAxLCBOVUxMKSkpIHsKKyAgICAgICAgRCgiRVJST1Igbm1fa3JfdHJ5Z2V0KCkiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIFRoaXMgaXMgYSBndWVzcywgdG8gYmUgZml4
ZWQgaW4gdGhlIHJhdGUgY2FsbGJhY2suICovCisgICAgSUZSQVRFKHB0bnMtPnJhdGVfY3R4Lm5l
dy5ndHhrKyspOworCisgICAgLyogR2V0IFRYIHB0cmluZyBwb2ludGVyIGZyb20gdGhlIENTQi4g
Ki8KKyAgICBwdHJpbmcgPSBwdG5zLT5wdHJpbmdzICsga3JpbmctPnJpbmdfaWQ7CisgICAga3Ro
ID0gcHRucy0+a3RocmVhZHNba3JpbmctPnJpbmdfaWRdOworCisgICAgbnVtX3Nsb3RzID0ga3Jp
bmctPm5rcl9udW1fc2xvdHM7CisgICAgc2hhZG93X3JpbmcuaGVhZCA9IGtyaW5nLT5yaGVhZDsK
KyAgICBzaGFkb3dfcmluZy5jdXIgPSBrcmluZy0+cmN1cjsKKworICAgIC8qIERpc2FibGUgZ3Vl
c3QgLS0+IGhvc3Qgbm90aWZpY2F0aW9ucy4gKi8KKyAgICBwdHJpbmdfa2lja19lbmFibGUocHRy
aW5nLCAwKTsKKyAgICAvKiBDb3B5IHRoZSBndWVzdCBrcmluZyBwb2ludGVycyBmcm9tIHRoZSBD
U0IgKi8KKyAgICBwdG5ldG1hcF9ob3N0X3JlYWRfa3JpbmdfY3NiKHB0cmluZywgJnNoYWRvd19y
aW5nLCBudW1fc2xvdHMpOworCisgICAgZm9yICg7OykgeworCS8qIElmIGd1ZXN0IG1vdmVzIGFo
ZWFkIHRvbyBmYXN0LCBsZXQncyBjdXQgdGhlIG1vdmUgc28KKwkgKiB0aGF0IHdlIGRvbid0IGV4
Y2VlZCBvdXIgYmF0Y2ggbGltaXQuICovCisgICAgICAgIGJhdGNoID0gc2hhZG93X3JpbmcuaGVh
ZCAtIGtyaW5nLT5ucl9od2N1cjsKKyAgICAgICAgaWYgKGJhdGNoIDwgMCkKKyAgICAgICAgICAg
IGJhdGNoICs9IG51bV9zbG90czsKKworI2lmZGVmIFBUTl9UWF9CQVRDSF9MSU0KKyAgICAgICAg
aWYgKGJhdGNoID4gUFROX1RYX0JBVENIX0xJTShudW1fc2xvdHMpKSB7CisgICAgICAgICAgICB1
aW50MzJfdCBoZWFkX2xpbSA9IGtyaW5nLT5ucl9od2N1ciArIFBUTl9UWF9CQVRDSF9MSU0obnVt
X3Nsb3RzKTsKKworICAgICAgICAgICAgaWYgKGhlYWRfbGltID49IG51bV9zbG90cykKKyAgICAg
ICAgICAgICAgICBoZWFkX2xpbSAtPSBudW1fc2xvdHM7CisgICAgICAgICAgICBORCgxLCAiYmF0
Y2g6ICVkIGhlYWQ6ICVkIGhlYWRfbGltOiAlZCIsIGJhdGNoLCBzaGFkb3dfcmluZy5oZWFkLAor
CQkJCQkJICAgICBoZWFkX2xpbSk7CisgICAgICAgICAgICBzaGFkb3dfcmluZy5oZWFkID0gaGVh
ZF9saW07CisJICAgIGJhdGNoID0gUFROX1RYX0JBVENIX0xJTShudW1fc2xvdHMpOworICAgICAg
ICB9CisjZW5kaWYgLyogUFROX1RYX0JBVENIX0xJTSAqLworCisgICAgICAgIGlmIChubV9rcl90
eHNwYWNlKGtyaW5nKSA8PSAobnVtX3Nsb3RzID4+IDEpKSB7CisgICAgICAgICAgICBzaGFkb3df
cmluZy5mbGFncyB8PSBOQUZfRk9SQ0VfUkVDTEFJTTsKKyAgICAgICAgfQorCisgICAgICAgIC8q
IE5ldG1hcCBwcm9sb2d1ZSAqLworCXNoYWRvd19yaW5nLnRhaWwgPSBrcmluZy0+cnRhaWw7Cisg
ICAgICAgIGlmICh1bmxpa2VseShubV90eHN5bmNfcHJvbG9ndWUoa3JpbmcsICZzaGFkb3dfcmlu
ZykgPj0gbnVtX3Nsb3RzKSkgeworICAgICAgICAgICAgLyogUmVpbml0IHJpbmcgYW5kIGVuYWJs
ZSBub3RpZmljYXRpb25zLiAqLworICAgICAgICAgICAgbmV0bWFwX3JpbmdfcmVpbml0KGtyaW5n
KTsKKyAgICAgICAgICAgIHB0cmluZ19raWNrX2VuYWJsZShwdHJpbmcsIDEpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAodW5saWtlbHkobmV0bWFwX3ZlcmJv
c2UgJiBOTV9WRVJCX1RYU1lOQykpIHsKKyAgICAgICAgICAgIHB0bmV0bWFwX2tyaW5nX2R1bXAo
InByZSB0eHN5bmMiLCBrcmluZyk7CisJfQorCisgICAgICAgIElGUkFURShwcmVfdGFpbCA9IGty
aW5nLT5ydGFpbCk7CisgICAgICAgIGlmICh1bmxpa2VseShrcmluZy0+bm1fc3luYyhrcmluZywg
c2hhZG93X3JpbmcuZmxhZ3MpKSkgeworICAgICAgICAgICAgLyogUmVlbmFibGUgbm90aWZpY2F0
aW9ucy4gKi8KKyAgICAgICAgICAgIHB0cmluZ19raWNrX2VuYWJsZShwdHJpbmcsIDEpOworICAg
ICAgICAgICAgRCgiRVJST1IgdHhzeW5jKCkiKTsKKwkgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICAvKgorICAgICAgICAgKiBGaW5hbGl6ZQorICAgICAgICAgKiBDb3B5IGhvc3QgaHdj
dXIgYW5kIGh3dGFpbCBpbnRvIHRoZSBDU0IgZm9yIHRoZSBndWVzdCBzeW5jKCksIGFuZAorCSAq
IGRvIHRoZSBubV9zeW5jX2ZpbmFsaXplLgorICAgICAgICAgKi8KKyAgICAgICAgcHRuZXRtYXBf
aG9zdF93cml0ZV9rcmluZ19jc2IocHRyaW5nLCBrcmluZy0+bnJfaHdjdXIsCisJCQkJICAgICAg
a3JpbmctPm5yX2h3dGFpbCk7CisgICAgICAgIGlmIChrcmluZy0+cnRhaWwgIT0ga3JpbmctPm5y
X2h3dGFpbCkgeworCSAgICAvKiBTb21lIG1vcmUgcm9vbSBhdmFpbGFibGUgaW4gdGhlIHBhcmVu
dCBhZGFwdGVyLiAqLworCSAgICBrcmluZy0+cnRhaWwgPSBrcmluZy0+bnJfaHd0YWlsOworCSAg
ICBtb3JlX3R4c3BhY2UgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgSUZSQVRFKHJhdGVf
YmF0Y2hfc3RhdHNfdXBkYXRlKCZwdG5zLT5yYXRlX2N0eC5uZXcudHhicywgcHJlX3RhaWwsCisJ
CQkJICAgICAgIGtyaW5nLT5ydGFpbCwgbnVtX3Nsb3RzKSk7CisKKyAgICAgICAgaWYgKHVubGlr
ZWx5KG5ldG1hcF92ZXJib3NlICYgTk1fVkVSQl9UWFNZTkMpKSB7CisgICAgICAgICAgICBwdG5l
dG1hcF9rcmluZ19kdW1wKCJwb3N0IHR4c3luYyIsIGtyaW5nKTsKKwl9CisKKyNpZm5kZWYgQlVT
WV9XQUlUCisgICAgICAgIC8qIEludGVycnVwdCB0aGUgZ3Vlc3QgaWYgbmVlZGVkLiAqLworICAg
ICAgICBpZiAobW9yZV90eHNwYWNlICYmIHB0cmluZ19pbnRyX2VuYWJsZWQocHRyaW5nKSkgewor
ICAgICAgICAgICAgLyogRGlzYWJsZSBndWVzdCBraWNrIHRvIGF2b2lkIHNlbmRpbmcgdW5uZWNl
c3Nhcnkga2lja3MgKi8KKyAgICAgICAgICAgIHB0cmluZ19pbnRyX2VuYWJsZShwdHJpbmcsIDAp
OworICAgICAgICAgICAgbm1fb3Nfa3RocmVhZF9zZW5kX2lycShrdGgpOworICAgICAgICAgICAg
SUZSQVRFKHB0bnMtPnJhdGVfY3R4Lm5ldy5odHhrKyspOworICAgICAgICAgICAgbW9yZV90eHNw
YWNlID0gZmFsc2U7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAvKiBSZWFkIENTQiB0byBz
ZWUgaWYgdGhlcmUgaXMgbW9yZSB3b3JrIHRvIGRvLiAqLworICAgICAgICBwdG5ldG1hcF9ob3N0
X3JlYWRfa3JpbmdfY3NiKHB0cmluZywgJnNoYWRvd19yaW5nLCBudW1fc2xvdHMpOworI2lmbmRl
ZiBCVVNZX1dBSVQKKyAgICAgICAgaWYgKHNoYWRvd19yaW5nLmhlYWQgPT0ga3JpbmctPnJoZWFk
KSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogTm8gbW9yZSBwYWNrZXRzIHRvIHRy
YW5zbWl0LiBXZSBlbmFibGUgbm90aWZpY2F0aW9ucyBhbmQKKyAgICAgICAgICAgICAqIGdvIHRv
IHNsZWVwLCB3YWl0aW5nIGZvciBhIGtpY2sgZnJvbSB0aGUgZ3Vlc3Qgd2hlbiBuZXcKKyAgICAg
ICAgICAgICAqIG5ldyBzbG90cyBhcmUgcmVhZHkgZm9yIHRyYW5zbWlzc2lvbi4KKyAgICAgICAg
ICAgICAqLworICAgICAgICAgICAgdXNsZWVwX3JhbmdlKDEsMSk7CisgICAgICAgICAgICAvKiBS
ZWVuYWJsZSBub3RpZmljYXRpb25zLiAqLworICAgICAgICAgICAgcHRyaW5nX2tpY2tfZW5hYmxl
KHB0cmluZywgMSk7CisgICAgICAgICAgICAvKiBEb3VibGVjaGVjay4gKi8KKyAgICAgICAgICAg
IHB0bmV0bWFwX2hvc3RfcmVhZF9rcmluZ19jc2IocHRyaW5nLCAmc2hhZG93X3JpbmcsIG51bV9z
bG90cyk7CisgICAgICAgICAgICBpZiAoc2hhZG93X3JpbmcuaGVhZCAhPSBrcmluZy0+cmhlYWQp
IHsKKwkJLyogV2Ugd29uIHRoZSByYWNlIGNvbmRpdGlvbiwgdGhlcmUgYXJlIG1vcmUgcGFja2V0
cyB0bworCQkgKiB0cmFuc21pdC4gRGlzYWJsZSBub3RpZmljYXRpb25zIGFuZCBkbyBhbm90aGVy
IGN5Y2xlICovCisJCXB0cmluZ19raWNrX2VuYWJsZShwdHJpbmcsIDApOworCQljb250aW51ZTsK
KwkgICAgfQorCSAgICBicmVhazsKKyAgICAgICAgfQorCisJaWYgKG5tX2tyX3R4ZW1wdHkoa3Jp
bmcpKSB7CisJICAgIC8qIE5vIG1vcmUgYXZhaWxhYmxlIFRYIHNsb3RzLiBXZSBzdG9wIHdhaXRp
bmcgZm9yIGEgbm90aWZpY2F0aW9uCisJICAgICAqIGZyb20gdGhlIGJhY2tlbmQgKG5ldG1hcF90
eF9pcnEpLiAqLworICAgICAgICAgICAgTkQoMSwgIlRYIHJpbmciKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgaWYgKHVubGlrZWx5KHB0bnMtPnN0b3Bw
ZWQpKSB7CisgICAgICAgICAgICBEKCJiYWNrZW5kIG5ldG1hcCBpcyBiZWluZyBzdG9wcGVkIik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIG5tX2tyX3B1dChr
cmluZyk7CisKKyAgICBpZiAobW9yZV90eHNwYWNlICYmIHB0cmluZ19pbnRyX2VuYWJsZWQocHRy
aW5nKSkgeworICAgICAgICBwdHJpbmdfaW50cl9lbmFibGUocHRyaW5nLCAwKTsKKyAgICAgICAg
bm1fb3Nfa3RocmVhZF9zZW5kX2lycShrdGgpOworICAgICAgICBJRlJBVEUocHRucy0+cmF0ZV9j
dHgubmV3Lmh0eGsrKyk7CisgICAgfQorfQorCisvKgorICogV2UgbmVlZCBSWCBraWNrcyBmcm9t
IHRoZSBndWVzdCB3aGVuICh0YWlsID09IGhlYWQtMSksIHdoZXJlIHdlIHdhaXQKKyAqIGZvciB0
aGUgZ3Vlc3QgdG8gcmVmaWxsLgorICovCisjaWZuZGVmIEJVU1lfV0FJVAorc3RhdGljIGlubGlu
ZSBpbnQKK3B0bmV0bWFwX25vcnhzbG90cyhzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywgdWlu
dDMyX3QgZ19oZWFkKQoreworICAgIHJldHVybiAoTk1fQUNDRVNTX09OQ0Uoa3JpbmctPm5yX2h3
dGFpbCkgPT0gbm1fcHJldihnX2hlYWQsCisgICAgCQkJICAgIGtyaW5nLT5ua3JfbnVtX3Nsb3Rz
IC0gMSkpOworfQorI2VuZGlmIC8qICFCVVNZX1dBSVQgKi8KKworLyogSGFuZGxlIFJYIGV2ZW50
czogZnJvbSB0aGUgZ3Vlc3Qgb3IgZnJvbSB0aGUgYmFja2VuZCAqLworc3RhdGljIHZvaWQKK3B0
bmV0bWFwX3J4X2hhbmRsZXIodm9pZCAqZGF0YSkKK3sKKyAgICBzdHJ1Y3QgbmV0bWFwX2tyaW5n
ICprcmluZyA9IGRhdGE7CisgICAgc3RydWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0ZXIgKnB0aF9u
YSA9CisJCShzdHJ1Y3QgbmV0bWFwX3B0X2hvc3RfYWRhcHRlciAqKWtyaW5nLT5uYS0+bmFfcHJp
dmF0ZTsKKyAgICBzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0bnMgPSBwdGhfbmEtPnB0bnM7Cisg
ICAgc3RydWN0IHB0bmV0X3JpbmcgX191c2VyICpwdHJpbmc7CisgICAgc3RydWN0IG5ldG1hcF9y
aW5nIHNoYWRvd19yaW5nOyAvKiBzaGFkb3cgY29weSBvZiB0aGUgbmV0bWFwX3JpbmcgKi8KKyAg
ICBzdHJ1Y3Qgbm1fa3RocmVhZCAqa3RoOworICAgIHVpbnQzMl90IG51bV9zbG90czsKKyAgICBp
bnQgZHJ5X2N5Y2xlcyA9IDA7CisgICAgYm9vbCBzb21lX3JlY3ZkID0gZmFsc2U7CisgICAgSUZS
QVRFKHVpbnQzMl90IHByZV90YWlsKTsKKworICAgIGlmICh1bmxpa2VseSghcHRucyB8fCAhcHRu
cy0+cHRoX25hKSkgeworICAgICAgICBEKCJFUlJPUiBwdG5ldG1hcCBzdGF0ZSAlcCwgcHRuZXRt
YXAgaG9zdCBhZGFwdGVyICVwIiwgcHRucywKKwkgIHB0bnMgPyBwdG5zLT5wdGhfbmEgOiBOVUxM
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh1bmxpa2VseShwdG5zLT5zdG9w
cGVkKSkgeworICAgICAgICBSRCgxLCAiYmFja2VuZCBuZXRtYXAgaXMgYmVpbmcgc3RvcHBlZCIp
OworCXJldHVybjsKKyAgICB9CisKKyAgICBpZiAodW5saWtlbHkobm1fa3JfdHJ5Z2V0KGtyaW5n
LCAxLCBOVUxMKSkpIHsKKyAgICAgICAgRCgiRVJST1Igbm1fa3JfdHJ5Z2V0KCkiKTsKKwlyZXR1
cm47CisgICAgfQorCisgICAgLyogVGhpcyBpcyBhIGd1ZXNzLCB0byBiZSBmaXhlZCBpbiB0aGUg
cmF0ZSBjYWxsYmFjay4gKi8KKyAgICBJRlJBVEUocHRucy0+cmF0ZV9jdHgubmV3LmdyeGsrKyk7
CisKKyAgICAvKiBHZXQgUlggcHRyaW5nIHBvaW50ZXIgZnJvbSB0aGUgQ1NCLiAqLworICAgIHB0
cmluZyA9IHB0bnMtPnB0cmluZ3MgKyAocHRoX25hLT51cC5udW1fdHhfcmluZ3MgKyBrcmluZy0+
cmluZ19pZCk7CisgICAga3RoID0gcHRucy0+a3RocmVhZHNbcHRoX25hLT51cC5udW1fdHhfcmlu
Z3MgKyBrcmluZy0+cmluZ19pZF07CisKKyAgICBudW1fc2xvdHMgPSBrcmluZy0+bmtyX251bV9z
bG90czsKKyAgICBzaGFkb3dfcmluZy5oZWFkID0ga3JpbmctPnJoZWFkOworICAgIHNoYWRvd19y
aW5nLmN1ciA9IGtyaW5nLT5yY3VyOworCisgICAgLyogRGlzYWJsZSBub3RpZmljYXRpb25zLiAq
LworICAgIHB0cmluZ19raWNrX2VuYWJsZShwdHJpbmcsIDApOworICAgIC8qIENvcHkgdGhlIGd1
ZXN0IGtyaW5nIHBvaW50ZXJzIGZyb20gdGhlIENTQiAqLworICAgIHB0bmV0bWFwX2hvc3RfcmVh
ZF9rcmluZ19jc2IocHRyaW5nLCAmc2hhZG93X3JpbmcsIG51bV9zbG90cyk7CisKKyAgICBmb3Ig
KDs7KSB7CisJdWludDMyX3QgaHd0YWlsOworCisgICAgICAgIC8qIE5ldG1hcCBwcm9sb2d1ZSAq
LworCXNoYWRvd19yaW5nLnRhaWwgPSBrcmluZy0+cnRhaWw7CisgICAgICAgIGlmICh1bmxpa2Vs
eShubV9yeHN5bmNfcHJvbG9ndWUoa3JpbmcsICZzaGFkb3dfcmluZykgPj0gbnVtX3Nsb3RzKSkg
eworICAgICAgICAgICAgLyogUmVpbml0IHJpbmcgYW5kIGVuYWJsZSBub3RpZmljYXRpb25zLiAq
LworICAgICAgICAgICAgbmV0bWFwX3JpbmdfcmVpbml0KGtyaW5nKTsKKyAgICAgICAgICAgIHB0
cmluZ19raWNrX2VuYWJsZShwdHJpbmcsIDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBpZiAodW5saWtlbHkobmV0bWFwX3ZlcmJvc2UgJiBOTV9WRVJCX1JYU1lO
QykpIHsKKyAgICAgICAgICAgIHB0bmV0bWFwX2tyaW5nX2R1bXAoInByZSByeHN5bmMiLCBrcmlu
Zyk7CisJfQorCisgICAgICAgIElGUkFURShwcmVfdGFpbCA9IGtyaW5nLT5ydGFpbCk7CisgICAg
ICAgIGlmICh1bmxpa2VseShrcmluZy0+bm1fc3luYyhrcmluZywgc2hhZG93X3JpbmcuZmxhZ3Mp
KSkgeworICAgICAgICAgICAgLyogUmVlbmFibGUgbm90aWZpY2F0aW9ucy4gKi8KKyAgICAgICAg
ICAgIHB0cmluZ19raWNrX2VuYWJsZShwdHJpbmcsIDEpOworICAgICAgICAgICAgRCgiRVJST1Ig
cnhzeW5jKCkiKTsKKwkgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLyoKKyAgICAgICAg
ICogRmluYWxpemUKKyAgICAgICAgICogQ29weSBob3N0IGh3Y3VyIGFuZCBod3RhaWwgaW50byB0
aGUgQ1NCIGZvciB0aGUgZ3Vlc3Qgc3luYygpCisgICAgICAgICAqLworCWh3dGFpbCA9IE5NX0FD
Q0VTU19PTkNFKGtyaW5nLT5ucl9od3RhaWwpOworICAgICAgICBwdG5ldG1hcF9ob3N0X3dyaXRl
X2tyaW5nX2NzYihwdHJpbmcsIGtyaW5nLT5ucl9od2N1ciwgaHd0YWlsKTsKKyAgICAgICAgaWYg
KGtyaW5nLT5ydGFpbCAhPSBod3RhaWwpIHsKKwkgICAga3JpbmctPnJ0YWlsID0gaHd0YWlsOwor
ICAgICAgICAgICAgc29tZV9yZWN2ZCA9IHRydWU7CisgICAgICAgICAgICBkcnlfY3ljbGVzID0g
MDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRyeV9jeWNsZXMrKzsKKyAgICAgICAg
fQorCisgICAgICAgIElGUkFURShyYXRlX2JhdGNoX3N0YXRzX3VwZGF0ZSgmcHRucy0+cmF0ZV9j
dHgubmV3LnJ4YnMsIHByZV90YWlsLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
cmluZy0+cnRhaWwsIG51bV9zbG90cykpOworCisgICAgICAgIGlmICh1bmxpa2VseShuZXRtYXBf
dmVyYm9zZSAmIE5NX1ZFUkJfUlhTWU5DKSkgeworICAgICAgICAgICAgcHRuZXRtYXBfa3Jpbmdf
ZHVtcCgicG9zdCByeHN5bmMiLCBrcmluZyk7CisJfQorCisjaWZuZGVmIEJVU1lfV0FJVAorCS8q
IEludGVycnVwdCB0aGUgZ3Vlc3QgaWYgbmVlZGVkLiAqLworICAgICAgICBpZiAoc29tZV9yZWN2
ZCAmJiBwdHJpbmdfaW50cl9lbmFibGVkKHB0cmluZykpIHsKKyAgICAgICAgICAgIC8qIERpc2Fi
bGUgZ3Vlc3Qga2ljayB0byBhdm9pZCBzZW5kaW5nIHVubmVjZXNzYXJ5IGtpY2tzICovCisgICAg
ICAgICAgICBwdHJpbmdfaW50cl9lbmFibGUocHRyaW5nLCAwKTsKKyAgICAgICAgICAgIG5tX29z
X2t0aHJlYWRfc2VuZF9pcnEoa3RoKTsKKyAgICAgICAgICAgIElGUkFURShwdG5zLT5yYXRlX2N0
eC5uZXcuaHJ4aysrKTsKKyAgICAgICAgICAgIHNvbWVfcmVjdmQgPSBmYWxzZTsKKyAgICAgICAg
fQorI2VuZGlmCisgICAgICAgIC8qIFJlYWQgQ1NCIHRvIHNlZSBpZiB0aGVyZSBpcyBtb3JlIHdv
cmsgdG8gZG8uICovCisgICAgICAgIHB0bmV0bWFwX2hvc3RfcmVhZF9rcmluZ19jc2IocHRyaW5n
LCAmc2hhZG93X3JpbmcsIG51bV9zbG90cyk7CisjaWZuZGVmIEJVU1lfV0FJVAorICAgICAgICBp
ZiAocHRuZXRtYXBfbm9yeHNsb3RzKGtyaW5nLCBzaGFkb3dfcmluZy5oZWFkKSkgeworICAgICAg
ICAgICAgLyoKKyAgICAgICAgICAgICAqIE5vIG1vcmUgc2xvdHMgYXZhaWxhYmxlIGZvciByZWNl
cHRpb24uIFdlIGVuYWJsZSBub3RpZmljYXRpb24gYW5kCisgICAgICAgICAgICAgKiBnbyB0byBz
bGVlcCwgd2FpdGluZyBmb3IgYSBraWNrIGZyb20gdGhlIGd1ZXN0IHdoZW4gbmV3IHJlY2VpdmUK
KwkgICAgICogc2xvdHMgYXJlIGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAg
ICAgdXNsZWVwX3JhbmdlKDEsMSk7CisgICAgICAgICAgICAvKiBSZWVuYWJsZSBub3RpZmljYXRp
b25zLiAqLworICAgICAgICAgICAgcHRyaW5nX2tpY2tfZW5hYmxlKHB0cmluZywgMSk7CisgICAg
ICAgICAgICAvKiBEb3VibGVjaGVjay4gKi8KKyAgICAgICAgICAgIHB0bmV0bWFwX2hvc3RfcmVh
ZF9rcmluZ19jc2IocHRyaW5nLCAmc2hhZG93X3JpbmcsIG51bV9zbG90cyk7CisgICAgICAgICAg
ICBpZiAoIXB0bmV0bWFwX25vcnhzbG90cyhrcmluZywgc2hhZG93X3JpbmcuaGVhZCkpIHsKKwkJ
LyogV2Ugd29uIHRoZSByYWNlIGNvbmRpdGlvbiwgbW9yZSBzbG90cyBhcmUgYXZhaWxhYmxlLiBE
aXNhYmxlCisJCSAqIG5vdGlmaWNhdGlvbnMgYW5kIGRvIGFub3RoZXIgY3ljbGUuICovCisgICAg
ICAgICAgICAgICAgcHRyaW5nX2tpY2tfZW5hYmxlKHB0cmluZywgMCk7CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisJICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKwlo
d3RhaWwgPSBOTV9BQ0NFU1NfT05DRShrcmluZy0+bnJfaHd0YWlsKTsKKyAgICAgICAgaWYgKHVu
bGlrZWx5KGh3dGFpbCA9PSBrcmluZy0+cmhlYWQgfHwKKwkJICAgICBkcnlfY3ljbGVzID49IFBU
Tl9SWF9EUllfQ1lDTEVTX01BWCkpIHsKKwkgICAgLyogTm8gbW9yZSBwYWNrZXRzIHRvIGJlIHJl
YWQgZnJvbSB0aGUgYmFja2VuZC4gV2Ugc3RvcCBhbmQKKwkgICAgICogd2FpdCBmb3IgYSBub3Rp
ZmljYXRpb24gZnJvbSB0aGUgYmFja2VuZCAobmV0bWFwX3J4X2lycSkuICovCisgICAgICAgICAg
ICBORCgxLCAibnJfaHd0YWlsOiAlZCByaGVhZDogJWQgZHJ5X2N5Y2xlczogJWQiLAorCSAgICAg
ICBod3RhaWwsIGtyaW5nLT5yaGVhZCwgZHJ5X2N5Y2xlcyk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmICh1bmxpa2VseShwdG5zLT5zdG9wcGVkKSkg
eworICAgICAgICAgICAgRCgiYmFja2VuZCBuZXRtYXAgaXMgYmVpbmcgc3RvcHBlZCIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBubV9rcl9wdXQoa3Jpbmcp
OworCisgICAgLyogSW50ZXJydXB0IHRoZSBndWVzdCBpZiBuZWVkZWQuICovCisgICAgaWYgKHNv
bWVfcmVjdmQgJiYgcHRyaW5nX2ludHJfZW5hYmxlZChwdHJpbmcpKSB7CisgICAgICAgIHB0cmlu
Z19pbnRyX2VuYWJsZShwdHJpbmcsIDApOworICAgICAgICBubV9vc19rdGhyZWFkX3NlbmRfaXJx
KGt0aCk7CisgICAgICAgIElGUkFURShwdG5zLT5yYXRlX2N0eC5uZXcuaHJ4aysrKTsKKyAgICB9
Cit9CisKKyNpZmRlZiBORVRNQVBfUFRfREVCVUcKK3N0YXRpYyB2b2lkCitwdG5ldG1hcF9wcmlu
dF9jb25maWd1cmF0aW9uKHN0cnVjdCBwdG5ldG1hcF9jZmcgKmNmZykKK3sKKwlpbnQgazsKKwor
CUQoInB0bmV0bWFwIGNvbmZpZ3VyYXRpb246Iik7CisJRCgiICBDU0IgcHRyaW5ncyBAJXAsIG51
bV9yaW5ncz0ldSwgY2ZndHlwZSAlMDh4IiwgY2ZnLT5wdHJpbmdzLAorCSAgY2ZnLT5udW1fcmlu
Z3MsIGNmZy0+Y2ZndHlwZSk7CisJZm9yIChrID0gMDsgayA8IGNmZy0+bnVtX3JpbmdzOyBrKysp
IHsKKwkJc3dpdGNoIChjZmctPmNmZ3R5cGUpIHsKKwkJY2FzZSBQVE5FVE1BUF9DRkdUWVBFX1FF
TVU6IHsKKwkJCXN0cnVjdCBwdG5ldG1hcF9jZmdlbnRyeV9xZW11ICplID0KKwkJCQkoc3RydWN0
IHB0bmV0bWFwX2NmZ2VudHJ5X3FlbXUgKikoY2ZnKzEpICsgazsKKwkJCUQoIiAgICByaW5nICMl
ZDogaW9ldmVudGZkPSVsdSwgaXJxZmQ9JWx1IiwgaywKKwkJCQkodW5zaWduZWQgbG9uZyllLT5p
b2V2ZW50ZmQsCisJCQkJKHVuc2lnbmVkIGxvbmcpZS0+aXJxZmQpOworCQkJYnJlYWs7CisJCX0K
KworCQljYXNlIFBUTkVUTUFQX0NGR1RZUEVfQkhZVkU6CisJCXsKKwkJCXN0cnVjdCBwdG5ldG1h
cF9jZmdlbnRyeV9iaHl2ZSAqZSA9CisJCQkJKHN0cnVjdCBwdG5ldG1hcF9jZmdlbnRyeV9iaHl2
ZSAqKShjZmcrMSkgKyBrOworCQkJRCgiICAgIHJpbmcgIyVkOiB3Y2hhbj0lbHUsIGlvY3RsX2Zk
PSVsdSwgIgorCQkJICAiaW9jdGxfY21kPSVsdSwgbXNpeF9tc2dfZGF0YT0lbHUsIG1zaXhfYWRk
cj0lbHUiLAorCQkJCWssICh1bnNpZ25lZCBsb25nKWUtPndjaGFuLAorCQkJCSh1bnNpZ25lZCBs
b25nKWUtPmlvY3RsX2ZkLAorCQkJCSh1bnNpZ25lZCBsb25nKWUtPmlvY3RsX2NtZCwKKwkJCQko
dW5zaWduZWQgbG9uZyllLT5pb2N0bF9kYXRhLm1zZ19kYXRhLAorCQkJCSh1bnNpZ25lZCBsb25n
KWUtPmlvY3RsX2RhdGEuYWRkcik7CisJCQlicmVhazsKKwkJfQorCQl9CisJfQorCit9CisjZW5k
aWYgLyogTkVUTUFQX1BUX0RFQlVHICovCisKKy8qIENvcHkgYWN0dWFsIHN0YXRlIG9mIHRoZSBo
b3N0IHJpbmcgaW50byB0aGUgQ1NCIGZvciB0aGUgZ3Vlc3QgaW5pdCAqLworc3RhdGljIGludAor
cHRuZXRtYXBfa3Jpbmdfc25hcHNob3Qoc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcsIHN0cnVj
dCBwdG5ldF9yaW5nIF9fdXNlciAqcHRyaW5nKQoreworICAgIGlmKENTQl9XUklURShwdHJpbmcs
IGhlYWQsIGtyaW5nLT5yaGVhZCkpCisgICAgICAgIGdvdG8gZXJyOworICAgIGlmKENTQl9XUklU
RShwdHJpbmcsIGN1ciwga3JpbmctPnJjdXIpKQorICAgICAgICBnb3RvIGVycjsKKworICAgIGlm
KENTQl9XUklURShwdHJpbmcsIGh3Y3VyLCBrcmluZy0+bnJfaHdjdXIpKQorICAgICAgICBnb3Rv
IGVycjsKKyAgICBpZihDU0JfV1JJVEUocHRyaW5nLCBod3RhaWwsIE5NX0FDQ0VTU19PTkNFKGty
aW5nLT5ucl9od3RhaWwpKSkKKyAgICAgICAgZ290byBlcnI7CisKKyAgICBEQkcocHRuZXRtYXBf
a3JpbmdfZHVtcCgicHRuZXRtYXBfa3Jpbmdfc25hcHNob3QiLCBrcmluZyk7KQorCisgICAgcmV0
dXJuIDA7CitlcnI6CisgICAgcmV0dXJuIEVGQVVMVDsKK30KKworc3RhdGljIHN0cnVjdCBuZXRt
YXBfa3JpbmcgKgorcHRuZXRtYXBfa3Jpbmcoc3RydWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0ZXIg
KnB0aF9uYSwgaW50IGspCit7CisJaWYgKGsgPCBwdGhfbmEtPnVwLm51bV90eF9yaW5ncykgewor
CQlyZXR1cm4gcHRoX25hLT51cC50eF9yaW5ncyArIGs7CisJfQorCXJldHVybiBwdGhfbmEtPnVw
LnJ4X3JpbmdzICsgayAtIHB0aF9uYS0+dXAubnVtX3R4X3JpbmdzOworfQorCitzdGF0aWMgaW50
CitwdG5ldG1hcF9rcmluZ3Nfc25hcHNob3Qoc3RydWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0ZXIg
KnB0aF9uYSkKK3sKKwlzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0bnMgPSBwdGhfbmEtPnB0bnM7
CisJc3RydWN0IG5ldG1hcF9rcmluZyAqa3Jpbmc7CisJdW5zaWduZWQgaW50IG51bV9yaW5nczsK
KwlpbnQgZXJyID0gMCwgazsKKworCW51bV9yaW5ncyA9IHB0aF9uYS0+dXAubnVtX3R4X3Jpbmdz
ICsKKwkJICAgIHB0aF9uYS0+dXAubnVtX3J4X3JpbmdzOworCisJZm9yIChrID0gMDsgayA8IG51
bV9yaW5nczsgaysrKSB7CisJCWtyaW5nID0gcHRuZXRtYXBfa3JpbmcocHRoX25hLCBrKTsKKwkJ
ZXJyIHw9IHB0bmV0bWFwX2tyaW5nX3NuYXBzaG90KGtyaW5nLCBwdG5zLT5wdHJpbmdzICsgayk7
CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIEZ1bmN0aW9ucyB0byBjcmVhdGUsIHN0
YXJ0IGFuZCBzdG9wIHRoZSBrdGhyZWFkcworICovCisKK3N0YXRpYyBpbnQKK3B0bmV0bWFwX2Ny
ZWF0ZV9rdGhyZWFkcyhzdHJ1Y3QgbmV0bWFwX3B0X2hvc3RfYWRhcHRlciAqcHRoX25hLAorCQkJ
IHN0cnVjdCBwdG5ldG1hcF9jZmcgKmNmZykKK3sKKwlzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0
bnMgPSBwdGhfbmEtPnB0bnM7CisJc3RydWN0IG5tX2t0aHJlYWRfY2ZnIG5ta19jZmc7CisJdW5z
aWduZWQgaW50IG51bV9yaW5nczsKKwl1aW50OF90ICpjZmdfZW50cmllcyA9ICh1aW50OF90ICop
KGNmZyArIDEpOworCWludCBrOworCisJbnVtX3JpbmdzID0gcHRoX25hLT51cC5udW1fdHhfcmlu
Z3MgKworCQkgICAgcHRoX25hLT51cC5udW1fcnhfcmluZ3M7CisKKwlmb3IgKGsgPSAwOyBrIDwg
bnVtX3JpbmdzOyBrKyspIHsKKwkJbm1rX2NmZy5hdHRhY2hfdXNlciA9IDE7IC8qIGF0dGFjaCBr
dGhyZWFkIHRvIHVzZXIgcHJvY2VzcyAqLworCQlubWtfY2ZnLndvcmtlcl9wcml2YXRlID0gcHRu
ZXRtYXBfa3JpbmcocHRoX25hLCBrKTsKKwkJbm1rX2NmZy50eXBlID0gazsKKwkJaWYgKGsgPCBw
dGhfbmEtPnVwLm51bV90eF9yaW5ncykgeworCQkJbm1rX2NmZy53b3JrZXJfZm4gPSBwdG5ldG1h
cF90eF9oYW5kbGVyOworCQl9IGVsc2UgeworCQkJbm1rX2NmZy53b3JrZXJfZm4gPSBwdG5ldG1h
cF9yeF9oYW5kbGVyOworCQl9CisKKwkJcHRucy0+a3RocmVhZHNba10gPSBubV9vc19rdGhyZWFk
X2NyZWF0ZSgmbm1rX2NmZywKKwkJCWNmZy0+Y2ZndHlwZSwgY2ZnX2VudHJpZXMgKyBrICogY2Zn
LT5lbnRyeV9zaXplKTsKKwkJaWYgKHB0bnMtPmt0aHJlYWRzW2tdID09IE5VTEwpIHsKKwkJCWdv
dG8gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7CitlcnI6CisJZm9yIChrID0gMDsgayA8IG51
bV9yaW5nczsgaysrKSB7CisJCWlmIChwdG5zLT5rdGhyZWFkc1trXSkgeworCQkJbm1fb3Nfa3Ro
cmVhZF9kZWxldGUocHRucy0+a3RocmVhZHNba10pOworCQkJcHRucy0+a3RocmVhZHNba10gPSBO
VUxMOworCQl9CisJfQorCXJldHVybiBFRkFVTFQ7Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0bWFw
X3N0YXJ0X2t0aHJlYWRzKHN0cnVjdCBuZXRtYXBfcHRfaG9zdF9hZGFwdGVyICpwdGhfbmEpCit7
CisJc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG5zID0gcHRoX25hLT5wdG5zOworCWludCBudW1f
cmluZ3M7CisJaW50IGVycm9yOworCWludCBrOworCisJaWYgKCFwdG5zKSB7CisJCUQoIkJVRyBw
dG5zIGlzIE5VTEwiKTsKKwkJcmV0dXJuIEVGQVVMVDsKKwl9CisKKwlwdG5zLT5zdG9wcGVkID0g
ZmFsc2U7CisKKwludW1fcmluZ3MgPSBwdG5zLT5wdGhfbmEtPnVwLm51bV90eF9yaW5ncyArCisJ
CSAgICBwdG5zLT5wdGhfbmEtPnVwLm51bV9yeF9yaW5nczsKKwlmb3IgKGsgPSAwOyBrIDwgbnVt
X3JpbmdzOyBrKyspIHsKKwkJLy9ubV9vc19rdGhyZWFkX3NldF9hZmZpbml0eShwdG5zLT5rdGhy
ZWFkc1trXSwgeHh4KTsKKwkJZXJyb3IgPSBubV9vc19rdGhyZWFkX3N0YXJ0KHB0bnMtPmt0aHJl
YWRzW2tdKTsKKwkJaWYgKGVycm9yKSB7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKwl9CisKKwly
ZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3B0bmV0bWFwX3N0b3Bfa3RocmVhZHMoc3RydWN0
IG5ldG1hcF9wdF9ob3N0X2FkYXB0ZXIgKnB0aF9uYSkKK3sKKwlzdHJ1Y3QgcHRuZXRtYXBfc3Rh
dGUgKnB0bnMgPSBwdGhfbmEtPnB0bnM7CisJaW50IG51bV9yaW5nczsKKwlpbnQgazsKKworCWlm
ICghcHRucykgeworCQkvKiBOb3RoaW5nIHRvIGRvLiAqLworCQlyZXR1cm47CisJfQorCisJcHRu
cy0+c3RvcHBlZCA9IHRydWU7CisKKwludW1fcmluZ3MgPSBwdG5zLT5wdGhfbmEtPnVwLm51bV90
eF9yaW5ncyArCisJCSAgICBwdG5zLT5wdGhfbmEtPnVwLm51bV9yeF9yaW5nczsKKwlmb3IgKGsg
PSAwOyBrIDwgbnVtX3JpbmdzOyBrKyspIHsKKwkJbm1fb3Nfa3RocmVhZF9zdG9wKHB0bnMtPmt0
aHJlYWRzW2tdKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHRuZXRtYXBfY2ZnICoKK3B0bmV0
bWFwX3JlYWRfY2ZnKHN0cnVjdCBubXJlcSAqbm1yKQoreworCXVpbnRwdHJfdCAqbm1yX3B0bmNm
ZyA9ICh1aW50cHRyX3QgKikmbm1yLT5ucl9hcmcxOworCXN0cnVjdCBwdG5ldG1hcF9jZmcgKmNm
ZzsKKwlzdHJ1Y3QgcHRuZXRtYXBfY2ZnIHRtcDsKKwlzaXplX3QgY2ZnbGVuOworCisJaWYgKGNv
cHlpbigoY29uc3Qgdm9pZCAqKSpubXJfcHRuY2ZnLCAmdG1wLCBzaXplb2YodG1wKSkpIHsKKwkJ
RCgiUGFydGlhbCBjb3B5aW4oKSBmYWlsZWQiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJY2Zn
bGVuID0gc2l6ZW9mKHRtcCkgKyB0bXAubnVtX3JpbmdzICogdG1wLmVudHJ5X3NpemU7CisJY2Zn
ID0gbm1fb3NfbWFsbG9jKGNmZ2xlbik7CisJaWYgKCFjZmcpIHsKKwkJcmV0dXJuIE5VTEw7CisJ
fQorCisJaWYgKGNvcHlpbigoY29uc3Qgdm9pZCAqKSpubXJfcHRuY2ZnLCBjZmcsIGNmZ2xlbikp
IHsKKwkJRCgiRnVsbCBjb3B5aW4oKSBmYWlsZWQiKTsKKwkJbm1fb3NfZnJlZShjZmcpOworCQly
ZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gY2ZnOworfQorCitzdGF0aWMgaW50IG5tX3VudXNl
ZF9ub3RpZnkoc3RydWN0IG5ldG1hcF9rcmluZyAqLCBpbnQpOworc3RhdGljIGludCBubV9wdF9o
b3N0X25vdGlmeShzdHJ1Y3QgbmV0bWFwX2tyaW5nICosIGludCk7CisKKy8qIENyZWF0ZSBwdG5l
dG1hcCBzdGF0ZSBhbmQgc3dpdGNoIHBhcmVudCBhZGFwdGVyIHRvIHB0bmV0bWFwIG1vZGUuICov
CitzdGF0aWMgaW50CitwdG5ldG1hcF9jcmVhdGUoc3RydWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0
ZXIgKnB0aF9uYSwKKwkJc3RydWN0IHB0bmV0bWFwX2NmZyAqY2ZnKQoreworICAgIHN0cnVjdCBw
dG5ldG1hcF9zdGF0ZSAqcHRuczsKKyAgICB1bnNpZ25lZCBpbnQgbnVtX3JpbmdzOworICAgIGlu
dCByZXQsIGk7CisKKyAgICAvKiBDaGVjayBpZiBwdG5ldG1hcCBzdGF0ZSBpcyBhbHJlYWR5IHRo
ZXJlLiAqLworICAgIGlmIChwdGhfbmEtPnB0bnMpIHsKKyAgICAgICAgRCgiRVJST1IgYWRhcHRl
ciAlcCBhbHJlYWR5IGluIHB0bmV0bWFwIG1vZGUiLCBwdGhfbmEtPnBhcmVudCk7CisgICAgICAg
IHJldHVybiBFSU5WQUw7CisgICAgfQorCisgICAgbnVtX3JpbmdzID0gcHRoX25hLT51cC5udW1f
dHhfcmluZ3MgKyBwdGhfbmEtPnVwLm51bV9yeF9yaW5nczsKKworICAgIGlmIChudW1fcmluZ3Mg
IT0gY2ZnLT5udW1fcmluZ3MpIHsKKyAgICAgICAgRCgiRVJST1IgY29uZmlndXJhdGlvbiBtaXNt
YXRjaCwgZXhwZWN0ZWQgJXUgcmluZ3MsIGZvdW5kICV1IiwKKyAgICAgICAgICAgbnVtX3Jpbmdz
LCBjZmctPm51bV9yaW5ncyk7CisgICAgICAgIHJldHVybiBFSU5WQUw7CisgICAgfQorCisgICAg
cHRucyA9IG5tX29zX21hbGxvYyhzaXplb2YoKnB0bnMpICsgbnVtX3JpbmdzICogc2l6ZW9mKCpw
dG5zLT5rdGhyZWFkcykpOworICAgIGlmICghcHRucykgeworICAgICAgICByZXR1cm4gRU5PTUVN
OworICAgIH0KKworICAgIHB0bnMtPmt0aHJlYWRzID0gKHN0cnVjdCBubV9rdGhyZWFkICoqKShw
dG5zICsgMSk7CisgICAgcHRucy0+c3RvcHBlZCA9IHRydWU7CisKKyAgICAvKiBDcm9zcy1saW5r
IGRhdGEgc3RydWN0dXJlcy4gKi8KKyAgICBwdGhfbmEtPnB0bnMgPSBwdG5zOworICAgIHB0bnMt
PnB0aF9uYSA9IHB0aF9uYTsKKworICAgIC8qIFN0b3JlIHRoZSBDU0IgYWRkcmVzcyBwcm92aWRl
ZCBieSB0aGUgaHlwZXJ2aXNvci4gKi8KKyAgICBwdG5zLT5wdHJpbmdzID0gY2ZnLT5wdHJpbmdz
OworCisgICAgREJHKHB0bmV0bWFwX3ByaW50X2NvbmZpZ3VyYXRpb24oY2ZnKSk7CisKKyAgICAv
KiBDcmVhdGUga3RocmVhZHMgKi8KKyAgICBpZiAoKHJldCA9IHB0bmV0bWFwX2NyZWF0ZV9rdGhy
ZWFkcyhwdGhfbmEsIGNmZykpKSB7CisgICAgICAgIEQoIkVSUk9SIHB0bmV0bWFwX2NyZWF0ZV9r
dGhyZWFkcygpIik7CisgICAgICAgIGdvdG8gZXJyOworICAgIH0KKyAgICAvKiBDb3B5IGtyaW5n
cyBzdGF0ZSBpbnRvIHRoZSBDU0IgZm9yIHRoZSBndWVzdCBpbml0aWFsaXphdGlvbiAqLworICAg
IGlmICgocmV0ID0gcHRuZXRtYXBfa3JpbmdzX3NuYXBzaG90KHB0aF9uYSkpKSB7CisgICAgICAg
IEQoIkVSUk9SIHB0bmV0bWFwX2tyaW5nc19zbmFwc2hvdCgpIik7CisgICAgICAgIGdvdG8gZXJy
OworICAgIH0KKworICAgIC8qIE92ZXJ3cml0ZSBwYXJlbnQgbm1fbm90aWZ5IGtyaW5ncyBjYWxs
YmFjay4gKi8KKyAgICBwdGhfbmEtPnBhcmVudC0+bmFfcHJpdmF0ZSA9IHB0aF9uYTsKKyAgICBw
dGhfbmEtPnBhcmVudF9ubV9ub3RpZnkgPSBwdGhfbmEtPnBhcmVudC0+bm1fbm90aWZ5OworICAg
IHB0aF9uYS0+cGFyZW50LT5ubV9ub3RpZnkgPSBubV91bnVzZWRfbm90aWZ5OworCisgICAgZm9y
IChpID0gMDsgaSA8IHB0aF9uYS0+cGFyZW50LT5udW1fcnhfcmluZ3M7IGkrKykgeworICAgICAg
ICBwdGhfbmEtPnVwLnJ4X3JpbmdzW2ldLnNhdmVfbm90aWZ5ID0KKyAgICAgICAgCXB0aF9uYS0+
dXAucnhfcmluZ3NbaV0ubm1fbm90aWZ5OworICAgICAgICBwdGhfbmEtPnVwLnJ4X3JpbmdzW2ld
Lm5tX25vdGlmeSA9IG5tX3B0X2hvc3Rfbm90aWZ5OworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBp
IDwgcHRoX25hLT5wYXJlbnQtPm51bV90eF9yaW5nczsgaSsrKSB7CisgICAgICAgIHB0aF9uYS0+
dXAudHhfcmluZ3NbaV0uc2F2ZV9ub3RpZnkgPQorICAgICAgICAJcHRoX25hLT51cC50eF9yaW5n
c1tpXS5ubV9ub3RpZnk7CisgICAgICAgIHB0aF9uYS0+dXAudHhfcmluZ3NbaV0ubm1fbm90aWZ5
ID0gbm1fcHRfaG9zdF9ub3RpZnk7CisgICAgfQorCisjaWZkZWYgUkFURQorICAgIG1lbXNldCgm
cHRucy0+cmF0ZV9jdHgsIDAsIHNpemVvZihwdG5zLT5yYXRlX2N0eCkpOworICAgIHNldHVwX3Rp
bWVyKCZwdG5zLT5yYXRlX2N0eC50aW1lciwgJnJhdGVfY2FsbGJhY2ssCisgICAgICAgICAgICAo
dW5zaWduZWQgbG9uZykmcHRucy0+cmF0ZV9jdHgpOworICAgIGlmIChtb2RfdGltZXIoJnB0bnMt
PnJhdGVfY3R4LnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxNTAwKSkpCisgICAg
ICAgIEQoIltwdG5dIEVycm9yOiBtb2RfdGltZXIoKVxuIik7CisjZW5kaWYKKworICAgIERCRyhE
KCJbJXNdIHB0bmV0bWFwIGNvbmZpZ3VyYXRpb24gRE9ORSIsIHB0aF9uYS0+dXAubmFtZSkpOwor
CisgICAgcmV0dXJuIDA7CisKK2VycjoKKyAgICBwdGhfbmEtPnB0bnMgPSBOVUxMOworICAgIG5t
X29zX2ZyZWUocHRucyk7CisgICAgcmV0dXJuIHJldDsKK30KKworLyogU3dpdGNoIHBhcmVudCBh
ZGFwdGVyIGJhY2sgdG8gbm9ybWFsIG1vZGUgYW5kIGRlc3Ryb3kKKyAqIHB0bmV0bWFwIHN0YXRl
LiAqLworc3RhdGljIHZvaWQKK3B0bmV0bWFwX2RlbGV0ZShzdHJ1Y3QgbmV0bWFwX3B0X2hvc3Rf
YWRhcHRlciAqcHRoX25hKQoreworICAgIHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRucyA9IHB0
aF9uYS0+cHRuczsKKyAgICBpbnQgbnVtX3JpbmdzOworICAgIGludCBpOworCisgICAgaWYgKCFw
dG5zKSB7CisJLyogTm90aGluZyB0byBkby4gKi8KKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8qIFJlc3RvcmUgcGFyZW50IGFkYXB0ZXIgY2FsbGJhY2tzLiAqLworICAgIHB0aF9uYS0+
cGFyZW50LT5ubV9ub3RpZnkgPSBwdGhfbmEtPnBhcmVudF9ubV9ub3RpZnk7CisgICAgcHRoX25h
LT5wYXJlbnQtPm5hX3ByaXZhdGUgPSBOVUxMOworCisgICAgZm9yIChpID0gMDsgaSA8IHB0aF9u
YS0+cGFyZW50LT5udW1fcnhfcmluZ3M7IGkrKykgeworICAgICAgICBwdGhfbmEtPnVwLnJ4X3Jp
bmdzW2ldLm5tX25vdGlmeSA9CisgICAgICAgIAlwdGhfbmEtPnVwLnJ4X3JpbmdzW2ldLnNhdmVf
bm90aWZ5OworICAgICAgICBwdGhfbmEtPnVwLnJ4X3JpbmdzW2ldLnNhdmVfbm90aWZ5ID0gTlVM
TDsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IHB0aF9uYS0+cGFyZW50LT5udW1fdHhfcmlu
Z3M7IGkrKykgeworICAgICAgICBwdGhfbmEtPnVwLnR4X3JpbmdzW2ldLm5tX25vdGlmeSA9Cisg
ICAgICAgIAlwdGhfbmEtPnVwLnR4X3JpbmdzW2ldLnNhdmVfbm90aWZ5OworICAgICAgICBwdGhf
bmEtPnVwLnR4X3JpbmdzW2ldLnNhdmVfbm90aWZ5ID0gTlVMTDsKKyAgICB9CisKKyAgICAvKiBE
ZWxldGUga3RocmVhZHMuICovCisgICAgbnVtX3JpbmdzID0gcHRucy0+cHRoX25hLT51cC5udW1f
dHhfcmluZ3MgKworICAgICAgICAgICAgICAgIHB0bnMtPnB0aF9uYS0+dXAubnVtX3J4X3Jpbmdz
OworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fcmluZ3M7IGkrKykgeworICAgICAgICBubV9vc19r
dGhyZWFkX2RlbGV0ZShwdG5zLT5rdGhyZWFkc1tpXSk7CisJcHRucy0+a3RocmVhZHNbaV0gPSBO
VUxMOworICAgIH0KKworICAgIElGUkFURShkZWxfdGltZXIoJnB0bnMtPnJhdGVfY3R4LnRpbWVy
KSk7CisKKyAgICBubV9vc19mcmVlKHB0bnMpOworCisgICAgcHRoX25hLT5wdG5zID0gTlVMTDsK
KworICAgIERCRyhEKCJbJXNdIHB0bmV0bWFwIGRlbGV0ZWQiLCBwdGhfbmEtPnVwLm5hbWUpKTsK
K30KKworLyoKKyAqIENhbGxlZCBieSBuZXRtYXBfaW9jdGwoKS4KKyAqIE9wZXJhdGlvbiBpcyBp
bmRpY2F0ZWQgaW4gbm1yLT5ucl9jbWQuCisgKgorICogQ2FsbGVkIHdpdGhvdXQgTk1HX0xPQ0su
CisgKi8KK2ludAorcHRuZXRtYXBfY3RsKHN0cnVjdCBubXJlcSAqbm1yLCBzdHJ1Y3QgbmV0bWFw
X2FkYXB0ZXIgKm5hKQoreworICAgIHN0cnVjdCBuZXRtYXBfcHRfaG9zdF9hZGFwdGVyICpwdGhf
bmE7CisgICAgc3RydWN0IHB0bmV0bWFwX2NmZyAqY2ZnOworICAgIGNoYXIgKm5hbWU7CisgICAg
aW50IGNtZCwgZXJyb3IgPSAwOworCisgICAgbmFtZSA9IG5tci0+bnJfbmFtZTsKKyAgICBjbWQg
PSBubXItPm5yX2NtZDsKKworICAgIERCRyhEKCJuYW1lOiAlcyIsIG5hbWUpKTsKKworICAgIGlm
ICghbm1fcHRuZXRtYXBfaG9zdF9vbihuYSkpIHsKKyAgICAgICAgRCgiRVJST1IgTmV0bWFwIGFk
YXB0ZXIgJXAgaXMgbm90IGEgcHRuZXRtYXAgaG9zdCBhZGFwdGVyIiwgbmEpOworICAgICAgICBl
cnJvciA9IEVOWElPOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIHB0aF9uYSA9IChz
dHJ1Y3QgbmV0bWFwX3B0X2hvc3RfYWRhcHRlciAqKW5hOworCisgICAgTk1HX0xPQ0soKTsKKyAg
ICBzd2l0Y2ggKGNtZCkgeworICAgIGNhc2UgTkVUTUFQX1BUX0hPU1RfQ1JFQVRFOgorCS8qIFJl
YWQgaHlwZXJ2aXNvciBjb25maWd1cmF0aW9uIGZyb20gdXNlcnNwYWNlLiAqLworICAgICAgICBj
ZmcgPSBwdG5ldG1hcF9yZWFkX2NmZyhubXIpOworICAgICAgICBpZiAoIWNmZykKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAvKiBDcmVhdGUgcHRuZXRtYXAgc3RhdGUgKGt0aHJlYWRzLCAu
Li4pIGFuZCBzd2l0Y2ggcGFyZW50CisJICogYWRhcHRlciB0byBwdG5ldG1hcCBtb2RlLiAqLwor
ICAgICAgICBlcnJvciA9IHB0bmV0bWFwX2NyZWF0ZShwdGhfbmEsIGNmZyk7CisJbm1fb3NfZnJl
ZShjZmcpOworICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
LyogU3RhcnQga3RocmVhZHMuICovCisgICAgICAgIGVycm9yID0gcHRuZXRtYXBfc3RhcnRfa3Ro
cmVhZHMocHRoX25hKTsKKyAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgcHRuZXRtYXBf
ZGVsZXRlKHB0aF9uYSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBORVRNQVBfUFRfSE9T
VF9ERUxFVEU6CisgICAgICAgIC8qIFN0b3Aga3RocmVhZHMuICovCisgICAgICAgIHB0bmV0bWFw
X3N0b3Bfa3RocmVhZHMocHRoX25hKTsKKyAgICAgICAgLyogU3dpdGNoIHBhcmVudCBhZGFwdGVy
IGJhY2sgdG8gbm9ybWFsIG1vZGUgYW5kIGRlc3Ryb3kKKwkgKiBwdG5ldG1hcCBzdGF0ZSAoa3Ro
cmVhZHMsIC4uLikuICovCisgICAgICAgIHB0bmV0bWFwX2RlbGV0ZShwdGhfbmEpOworICAgICAg
ICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEQoIkVSUk9SIGludmFsaWQgY21kIChu
bXItPm5yX2NtZCkgKDB4JXgpIiwgY21kKTsKKyAgICAgICAgZXJyb3IgPSBFSU5WQUw7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBOTUdfVU5MT0NLKCk7CisKK2RvbmU6CisgICAgcmV0dXJu
IGVycm9yOworfQorCisvKiBubV9ub3RpZnkgY2FsbGJhY2tzIGZvciBwdG5ldG1hcCAqLworc3Rh
dGljIGludAorbm1fcHRfaG9zdF9ub3RpZnkoc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcsIGlu
dCBmbGFncykKK3sKKwlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hID0ga3JpbmctPm5hOworCXN0
cnVjdCBuZXRtYXBfcHRfaG9zdF9hZGFwdGVyICpwdGhfbmEgPQorCQkoc3RydWN0IG5ldG1hcF9w
dF9ob3N0X2FkYXB0ZXIgKiluYS0+bmFfcHJpdmF0ZTsKKwlzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUg
KnB0bnM7CisJaW50IGs7CisKKwkvKiBGaXJzdCBjaGVjayB0aGF0IHRoZSBwYXNzdGhyb3VnaCBw
b3J0IGlzIG5vdCBiZWluZyBkZXN0cm95ZWQuICovCisJaWYgKHVubGlrZWx5KCFwdGhfbmEpKSB7
CisJCXJldHVybiBOTV9JUlFfQ09NUExFVEVEOworCX0KKworCXB0bnMgPSBwdGhfbmEtPnB0bnM7
CisJaWYgKHVubGlrZWx5KCFwdG5zIHx8IHB0bnMtPnN0b3BwZWQpKSB7CisJCXJldHVybiBOTV9J
UlFfQ09NUExFVEVEOworCX0KKworCWsgPSBrcmluZy0+cmluZ19pZDsKKworCS8qIE5vdGlmeSBr
dGhyZWFkcyAod2FrZSB1cCBpZiBuZWVkZWQpICovCisJaWYgKGtyaW5nLT50eCA9PSBOUl9UWCkg
eworCQlORCgxLCAiVFggYmFja2VuZCBpcnEiKTsKKwkJSUZSQVRFKHB0bnMtPnJhdGVfY3R4Lm5l
dy5idHh3dSsrKTsKKwl9IGVsc2UgeworCQlrICs9IHB0aF9uYS0+dXAubnVtX3R4X3JpbmdzOwor
CQlORCgxLCAiUlggYmFja2VuZCBpcnEiKTsKKwkJSUZSQVRFKHB0bnMtPnJhdGVfY3R4Lm5ldy5i
cnh3dSsrKTsKKwl9CisJbm1fb3Nfa3RocmVhZF93YWtldXBfd29ya2VyKHB0bnMtPmt0aHJlYWRz
W2tdKTsKKworCXJldHVybiBOTV9JUlFfQ09NUExFVEVEOworfQorCitzdGF0aWMgaW50CitubV91
bnVzZWRfbm90aWZ5KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCBpbnQgZmxhZ3MpCit7Cisg
ICAgRCgiQlVHIHRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCIpOworICAgIHJldHVybiBFTlhJ
TzsKK30KKworLyogbm1fY29uZmlnIGNhbGxiYWNrIGZvciBid3JhcCAqLworc3RhdGljIGludAor
bm1fcHRfaG9zdF9jb25maWcoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSwgdV9pbnQgKnR4ciwg
dV9pbnQgKnR4ZCwKKyAgICAgICAgdV9pbnQgKnJ4ciwgdV9pbnQgKnJ4ZCkKK3sKKyAgICBzdHJ1
Y3QgbmV0bWFwX3B0X2hvc3RfYWRhcHRlciAqcHRoX25hID0KKyAgICAgICAgKHN0cnVjdCBuZXRt
YXBfcHRfaG9zdF9hZGFwdGVyICopbmE7CisgICAgc3RydWN0IG5ldG1hcF9hZGFwdGVyICpwYXJl
bnQgPSBwdGhfbmEtPnBhcmVudDsKKyAgICBpbnQgZXJyb3I7CisKKyAgICAvL1hYWDogbWF5YmUg
Y2FsbGluZyBwYXJlbnQtPm5tX2NvbmZpZyBpcyBiZXR0ZXIKKworICAgIC8qIGZvcndhcmQgdGhl
IHJlcXVlc3QgKi8KKyAgICBlcnJvciA9IG5ldG1hcF91cGRhdGVfY29uZmlnKHBhcmVudCk7CisK
KyAgICAqcnhyID0gbmEtPm51bV9yeF9yaW5ncyA9IHBhcmVudC0+bnVtX3J4X3JpbmdzOworICAg
ICp0eHIgPSBuYS0+bnVtX3R4X3JpbmdzID0gcGFyZW50LT5udW1fdHhfcmluZ3M7CisgICAgKnR4
ZCA9IG5hLT5udW1fdHhfZGVzYyA9IHBhcmVudC0+bnVtX3R4X2Rlc2M7CisgICAgKnJ4ZCA9IG5h
LT5udW1fcnhfZGVzYyA9IHBhcmVudC0+bnVtX3J4X2Rlc2M7CisKKyAgICBEQkcoRCgicnhyOiAl
ZCB0eHI6ICVkIHR4ZDogJWQgcnhkOiAlZCIsICpyeHIsICp0eHIsICp0eGQsICpyeGQpKTsKKwor
ICAgIHJldHVybiBlcnJvcjsKK30KKworLyogbm1fa3JpbmdzX2NyZWF0ZSBjYWxsYmFjayBmb3Ig
cHRuZXRtYXAgKi8KK3N0YXRpYyBpbnQKK25tX3B0X2hvc3Rfa3JpbmdzX2NyZWF0ZShzdHJ1Y3Qg
bmV0bWFwX2FkYXB0ZXIgKm5hKQoreworICAgIHN0cnVjdCBuZXRtYXBfcHRfaG9zdF9hZGFwdGVy
ICpwdGhfbmEgPQorICAgICAgICAoc3RydWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0ZXIgKiluYTsK
KyAgICBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKnBhcmVudCA9IHB0aF9uYS0+cGFyZW50OworICAg
IGVudW0gdHhyeCB0OworICAgIGludCBlcnJvcjsKKworICAgIERCRyhEKCIlcyIsIHB0aF9uYS0+
dXAubmFtZSkpOworCisgICAgLyogY3JlYXRlIHRoZSBwYXJlbnQga3JpbmdzICovCisgICAgZXJy
b3IgPSBwYXJlbnQtPm5tX2tyaW5nc19jcmVhdGUocGFyZW50KTsKKyAgICBpZiAoZXJyb3IpIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKworICAgIC8qIEEgcHRuZXRtYXAgaG9zdCBh
ZGFwdGVyIHBvaW50cyB0aGUgdmVyeSBzYW1lIGtyaW5ncworICAgICAqIGFzIGl0cyBwYXJlbnQg
YWRhcHRlci4gVGhlc2UgcG9pbnRlciBhcmUgdXNlZCBpbiB0aGUKKyAgICAgKiBUWC9SWCB3b3Jr
ZXIgZnVuY3Rpb25zLiAqLworICAgIG5hLT50eF9yaW5ncyA9IHBhcmVudC0+dHhfcmluZ3M7Cisg
ICAgbmEtPnJ4X3JpbmdzID0gcGFyZW50LT5yeF9yaW5nczsKKyAgICBuYS0+dGFpbHJvb20gPSBw
YXJlbnQtPnRhaWxyb29tOworCisgICAgZm9yX3J4X3R4KHQpIHsKKwlzdHJ1Y3QgbmV0bWFwX2ty
aW5nICprcmluZzsKKworCS8qIFBhcmVudCdzIGtyaW5nX2NyZWF0ZSBmdW5jdGlvbiB3aWxsIGlu
aXRpYWxpemUKKwkgKiBpdHMgb3duIG5hLT5zaS4gV2UgaGF2ZSB0byBpbml0IG91ciBuYS0+c2kg
aGVyZS4gKi8KKwlubV9vc19zZWxpbmZvX2luaXQoJm5hLT5zaVt0XSk7CisKKwkvKiBGb3JjZSB0
aGUgbWVtX3JpbmdzX2NyZWF0ZSgpIG1ldGhvZCB0byBjcmVhdGUgdGhlCisJICogaG9zdCByaW5n
cyBpbmRlcGVuZGVudGx5IG9uIHdoYXQgdGhlIHJlZ2lmIGFza2VkIGZvcjoKKwkgKiB0aGVzZSBy
aW5ncyBhcmUgbmVlZGVkIGJ5IHRoZSBndWVzdCBwdG5ldG1hcCBhZGFwdGVyCisJICogYW55d2F5
LiAqLworCWtyaW5nID0gJk5NUihuYSwgdClbbm1hX2dldF9ucmluZ3MobmEsIHQpXTsKKwlrcmlu
Zy0+bnJfa2ZsYWdzIHw9IE5LUl9ORUVEUklORzsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K
KworLyogbm1fa3JpbmdzX2RlbGV0ZSBjYWxsYmFjayBmb3IgcHRuZXRtYXAgKi8KK3N0YXRpYyB2
b2lkCitubV9wdF9ob3N0X2tyaW5nc19kZWxldGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSkK
K3sKKyAgICBzdHJ1Y3QgbmV0bWFwX3B0X2hvc3RfYWRhcHRlciAqcHRoX25hID0KKyAgICAgICAg
KHN0cnVjdCBuZXRtYXBfcHRfaG9zdF9hZGFwdGVyICopbmE7CisgICAgc3RydWN0IG5ldG1hcF9h
ZGFwdGVyICpwYXJlbnQgPSBwdGhfbmEtPnBhcmVudDsKKworICAgIERCRyhEKCIlcyIsIHB0aF9u
YS0+dXAubmFtZSkpOworCisgICAgcGFyZW50LT5ubV9rcmluZ3NfZGVsZXRlKHBhcmVudCk7CisK
KyAgICBuYS0+dHhfcmluZ3MgPSBuYS0+cnhfcmluZ3MgPSBuYS0+dGFpbHJvb20gPSBOVUxMOwor
fQorCisvKiBubV9yZWdpc3RlciBjYWxsYmFjayAqLworc3RhdGljIGludAorbm1fcHRfaG9zdF9y
ZWdpc3RlcihzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCBpbnQgb25vZmYpCit7CisgICAgc3Ry
dWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0ZXIgKnB0aF9uYSA9CisgICAgICAgIChzdHJ1Y3QgbmV0
bWFwX3B0X2hvc3RfYWRhcHRlciAqKW5hOworICAgIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqcGFy
ZW50ID0gcHRoX25hLT5wYXJlbnQ7CisgICAgaW50IGVycm9yOworICAgIERCRyhEKCIlcyBvbm9m
ZiAlZCIsIHB0aF9uYS0+dXAubmFtZSwgb25vZmYpKTsKKworICAgIGlmIChvbm9mZikgeworICAg
ICAgICAvKiBuZXRtYXBfZG9fcmVnaWYgaGFzIGJlZW4gY2FsbGVkIG9uIHRoZSBwdG5ldG1hcCBu
YS4KKyAgICAgICAgICogV2UgbmVlZCB0byBwYXNzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUK
KyAgICAgICAgICogbWVtb3J5IGFsbG9jYXRvciB0byB0aGUgcGFyZW50IGJlZm9yZQorICAgICAg
ICAgKiBwdXR0aW5nIGl0IGluIG5ldG1hcCBtb2RlCisgICAgICAgICAqLworICAgICAgICBwYXJl
bnQtPm5hX2x1dCA9IG5hLT5uYV9sdXQ7CisgICAgfQorCisgICAgLyogZm9yd2FyZCB0aGUgcmVx
dWVzdCB0byB0aGUgcGFyZW50ICovCisgICAgZXJyb3IgPSBwYXJlbnQtPm5tX3JlZ2lzdGVyKHBh
cmVudCwgb25vZmYpOworICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIGVycm9yOworCisK
KyAgICBpZiAob25vZmYpIHsKKyAgICAgICAgbmEtPm5hX2ZsYWdzIHw9IE5BRl9ORVRNQVBfT04g
fCBOQUZfUFRORVRNQVBfSE9TVDsKKyAgICB9IGVsc2UgeworICAgICAgICBwdG5ldG1hcF9kZWxl
dGUocHRoX25hKTsKKyAgICAgICAgbmEtPm5hX2ZsYWdzICY9IH4oTkFGX05FVE1BUF9PTiB8IE5B
Rl9QVE5FVE1BUF9IT1NUKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyogbm1fZHRv
ciBjYWxsYmFjayAqLworc3RhdGljIHZvaWQKK25tX3B0X2hvc3RfZHRvcihzdHJ1Y3QgbmV0bWFw
X2FkYXB0ZXIgKm5hKQoreworICAgIHN0cnVjdCBuZXRtYXBfcHRfaG9zdF9hZGFwdGVyICpwdGhf
bmEgPQorICAgICAgICAoc3RydWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0ZXIgKiluYTsKKyAgICBz
dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKnBhcmVudCA9IHB0aF9uYS0+cGFyZW50OworCisgICAgREJH
KEQoIiVzIiwgcHRoX25hLT51cC5uYW1lKSk7CisKKyAgICAvKiBUaGUgZXF1aXZhbGVudCBvZiBO
RVRNQVBfUFRfSE9TVF9ERUxFVEUgaWYgdGhlIGh5cGVydmlzb3IKKyAgICAgKiBkaWRuJ3QgZG8g
aXQuICovCisgICAgcHRuZXRtYXBfc3RvcF9rdGhyZWFkcyhwdGhfbmEpOworICAgIHB0bmV0bWFw
X2RlbGV0ZShwdGhfbmEpOworCisgICAgcGFyZW50LT5uYV9mbGFncyAmPSB+TkFGX0JVU1k7CisK
KyAgICBuZXRtYXBfYWRhcHRlcl9wdXQocHRoX25hLT5wYXJlbnQpOworICAgIHB0aF9uYS0+cGFy
ZW50ID0gTlVMTDsKK30KKworLyogY2hlY2sgaWYgbm1yIGlzIGEgcmVxdWVzdCBmb3IgYSBwdG5l
dG1hcCBhZGFwdGVyIHRoYXQgd2UgY2FuIHNhdGlzZnkgKi8KK2ludAorbmV0bWFwX2dldF9wdF9o
b3N0X25hKHN0cnVjdCBubXJlcSAqbm1yLCBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKipuYSwgaW50
IGNyZWF0ZSkKK3sKKyAgICBzdHJ1Y3Qgbm1yZXEgcGFyZW50X25tcjsKKyAgICBzdHJ1Y3QgbmV0
bWFwX2FkYXB0ZXIgKnBhcmVudDsgLyogdGFyZ2V0IGFkYXB0ZXIgKi8KKyAgICBzdHJ1Y3QgbmV0
bWFwX3B0X2hvc3RfYWRhcHRlciAqcHRoX25hOworICAgIHN0cnVjdCBpZm5ldCAqaWZwID0gTlVM
TDsKKyAgICBpbnQgZXJyb3I7CisKKyAgICAvKiBDaGVjayBpZiBpdCBpcyBhIHJlcXVlc3QgZm9y
IGEgcHRuZXRtYXAgYWRhcHRlciAqLworICAgIGlmICgobm1yLT5ucl9mbGFncyAmIChOUl9QVE5F
VE1BUF9IT1NUKSkgPT0gMCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBEKCJS
ZXF1ZXN0aW5nIGEgcHRuZXRtYXAgaG9zdCBhZGFwdGVyIik7CisKKyAgICBwdGhfbmEgPSBubV9v
c19tYWxsb2Moc2l6ZW9mKCpwdGhfbmEpKTsKKyAgICBpZiAocHRoX25hID09IE5VTEwpIHsKKyAg
ICAgICAgRCgiRVJST1IgbWFsbG9jIik7CisgICAgICAgIHJldHVybiBFTk9NRU07CisgICAgfQor
CisgICAgLyogZmlyc3QsIHRyeSB0byBmaW5kIHRoZSBhZGFwdGVyIHRoYXQgd2Ugd2FudCB0byBw
YXNzdGhyb3VnaAorICAgICAqIFdlIHVzZSB0aGUgc2FtZSBubXIsIGFmdGVyIHdlIGhhdmUgdHVy
bmVkIG9mZiB0aGUgcHRuZXRtYXAgZmxhZy4KKyAgICAgKiBJbiB0aGlzIHdheSB3ZSBjYW4gcG90
ZW50aWFsbHkgcGFzc3Rocm91Z2ggZXZlcnl0aGluZyBuZXRtYXAgdW5kZXJzdGFuZHMuCisgICAg
ICovCisgICAgbWVtY3B5KCZwYXJlbnRfbm1yLCBubXIsIHNpemVvZihwYXJlbnRfbm1yKSk7Cisg
ICAgcGFyZW50X25tci5ucl9mbGFncyAmPSB+KE5SX1BUTkVUTUFQX0hPU1QpOworICAgIGVycm9y
ID0gbmV0bWFwX2dldF9uYSgmcGFyZW50X25tciwgJnBhcmVudCwgJmlmcCwgY3JlYXRlKTsKKyAg
ICBpZiAoZXJyb3IpIHsKKyAgICAgICAgRCgicGFyZW50IGxvb2t1cCBmYWlsZWQ6ICVkIiwgZXJy
b3IpOworICAgICAgICBnb3RvIHB1dF9vdXRfbm9wdXRwYXJlbnQ7CisgICAgfQorICAgIERCRyhE
KCJmb3VuZCBwYXJlbnQ6ICVzIiwgcGFyZW50LT5uYW1lKSk7CisKKyAgICAvKiBtYWtlIHN1cmUg
dGhlIGludGVyZmFjZSBpcyBub3QgYWxyZWFkeSBpbiB1c2UgKi8KKyAgICBpZiAoTkVUTUFQX09X
TkVEX0JZX0FOWShwYXJlbnQpKSB7CisgICAgICAgIEQoIk5JQyAlcyBidXN5LCBjYW5ub3QgcHRu
ZXRtYXAiLCBwYXJlbnQtPm5hbWUpOworICAgICAgICBlcnJvciA9IEVCVVNZOworICAgICAgICBn
b3RvIHB1dF9vdXQ7CisgICAgfQorCisgICAgcHRoX25hLT5wYXJlbnQgPSBwYXJlbnQ7CisKKyAg
ICAvKiBGb2xsb3cgbmV0bWFwX2F0dGFjaCgpLWxpa2Ugb3BlcmF0aW9ucyBmb3IgdGhlIGhvc3QK
KyAgICAgKiBwdG5ldG1hcCBhZGFwdGVyLiAqLworCisgICAgLy9YWFggcHRoX25hLT51cC5uYV9m
bGFncyA9IHBhcmVudC0+bmFfZmxhZ3M7CisgICAgcHRoX25hLT51cC5udW1fcnhfcmluZ3MgPSBw
YXJlbnQtPm51bV9yeF9yaW5nczsKKyAgICBwdGhfbmEtPnVwLm51bV90eF9yaW5ncyA9IHBhcmVu
dC0+bnVtX3R4X3JpbmdzOworICAgIHB0aF9uYS0+dXAubnVtX3R4X2Rlc2MgPSBwYXJlbnQtPm51
bV90eF9kZXNjOworICAgIHB0aF9uYS0+dXAubnVtX3J4X2Rlc2MgPSBwYXJlbnQtPm51bV9yeF9k
ZXNjOworCisgICAgcHRoX25hLT51cC5ubV9kdG9yID0gbm1fcHRfaG9zdF9kdG9yOworICAgIHB0
aF9uYS0+dXAubm1fcmVnaXN0ZXIgPSBubV9wdF9ob3N0X3JlZ2lzdGVyOworCisgICAgLyogUmV1
c2UgcGFyZW50J3MgYWRhcHRlciB0eHN5bmMgYW5kIHJ4c3luYyBtZXRob2RzLiAqLworICAgIHB0
aF9uYS0+dXAubm1fdHhzeW5jID0gcGFyZW50LT5ubV90eHN5bmM7CisgICAgcHRoX25hLT51cC5u
bV9yeHN5bmMgPSBwYXJlbnQtPm5tX3J4c3luYzsKKworICAgIHB0aF9uYS0+dXAubm1fa3Jpbmdz
X2NyZWF0ZSA9IG5tX3B0X2hvc3Rfa3JpbmdzX2NyZWF0ZTsKKyAgICBwdGhfbmEtPnVwLm5tX2ty
aW5nc19kZWxldGUgPSBubV9wdF9ob3N0X2tyaW5nc19kZWxldGU7CisgICAgcHRoX25hLT51cC5u
bV9jb25maWcgPSBubV9wdF9ob3N0X2NvbmZpZzsKKworICAgIC8qIFNldCB0aGUgbm90aWZ5IG1l
dGhvZCBvbmx5IG9yIGNvbnZlbmllbmNlLCBpdCB3aWxsIG5ldmVyCisgICAgICogYmUgdXNlZCwg
c2luY2UgLSBkaWZmZXJlbnRseSBmcm9tIGRlZmF1bHQga3JpbmdzX2NyZWF0ZSAtIHdlCisgICAg
ICogcHRuZXRtYXAga3JpbmdzX2NyZWF0ZSBjYWxsYmFjayBpbml0cyBrcmluZy0+bm1fbm90aWZ5
CisgICAgICogZGlyZWN0bHkuICovCisgICAgcHRoX25hLT51cC5ubV9ub3RpZnkgPSBubV91bnVz
ZWRfbm90aWZ5OworCisgICAgcHRoX25hLT51cC5ubV9tZW0gPSBuZXRtYXBfbWVtX2dldChwYXJl
bnQtPm5tX21lbSk7CisKKyAgICBwdGhfbmEtPnVwLm5hX2ZsYWdzIHw9IE5BRl9IT1NUX1JJTkdT
OworCisgICAgZXJyb3IgPSBuZXRtYXBfYXR0YWNoX2NvbW1vbigmcHRoX25hLT51cCk7CisgICAg
aWYgKGVycm9yKSB7CisgICAgICAgIEQoIkVSUk9SIG5ldG1hcF9hdHRhY2hfY29tbW9uKCkiKTsK
KyAgICAgICAgZ290byBwdXRfb3V0OworICAgIH0KKworICAgICpuYSA9ICZwdGhfbmEtPnVwOwor
ICAgIG5ldG1hcF9hZGFwdGVyX2dldCgqbmEpOworCisgICAgLyogc2V0IHBhcmVudCBidXN5LCBi
ZWNhdXNlIGF0dGFjaGVkIGZvciBwdG5ldG1hcCAqLworICAgIHBhcmVudC0+bmFfZmxhZ3MgfD0g
TkFGX0JVU1k7CisKKyAgICBzdHJuY3B5KHB0aF9uYS0+dXAubmFtZSwgcGFyZW50LT5uYW1lLCBz
aXplb2YocHRoX25hLT51cC5uYW1lKSk7CisgICAgc3RyY2F0KHB0aF9uYS0+dXAubmFtZSwgIi1Q
VE4iKTsKKworICAgIERCRyhEKCIlcyBwdG5ldG1hcCByZXF1ZXN0IERPTkUiLCBwdGhfbmEtPnVw
Lm5hbWUpKTsKKworICAgIC8qIGRyb3AgdGhlIHJlZmVyZW5jZSB0byB0aGUgaWZwLCBpZiBhbnkg
Ki8KKyAgICBpZiAoaWZwKQorICAgICAgICBpZl9yZWxlKGlmcCk7CisKKyAgICByZXR1cm4gMDsK
KworcHV0X291dDoKKyAgICBuZXRtYXBfYWRhcHRlcl9wdXQocGFyZW50KTsKKyAgICBpZiAoaWZw
KQorCWlmX3JlbGUoaWZwKTsKK3B1dF9vdXRfbm9wdXRwYXJlbnQ6CisgICAgbm1fb3NfZnJlZShw
dGhfbmEpOworICAgIHJldHVybiBlcnJvcjsKK30KKyNlbmRpZiAvKiBXSVRIX1BUTkVUTUFQX0hP
U1QgKi8KKworI2lmZGVmIFdJVEhfUFRORVRNQVBfR1VFU1QKKy8qCisgKiBHdWVzdCBwdG5ldG1h
cCB0eHN5bmMoKS9yeHN5bmMoKSByb3V0aW5lcywgdXNlZCBpbiBwdG5ldCBkZXZpY2UgZHJpdmVy
cy4KKyAqIFRoZXNlIHJvdXRpbmVzIGFyZSByZXVzZWQgYWNyb3NzIHRoZSBkaWZmZXJlbnQgb3Bl
cmF0aW5nIHN5c3RlbXMgc3VwcG9ydGVkCisgKiBieSBuZXRtYXAuCisgKi8KKworLyoKKyAqIFJl
Y29uY2lsZSBob3N0IGFuZCBndWVzdCB2aWV3cyBvZiB0aGUgdHJhbnNtaXQgcmluZy4KKyAqCisg
KiBHdWVzdCB1c2VyIHdhbnRzIHRvIHRyYW5zbWl0IHBhY2tldHMgdXAgdG8gdGhlIG9uZSBiZWZv
cmUgcmluZy0+aGVhZCwKKyAqIGFuZCBndWVzdCBrZXJuZWwga25vd3MgdHhfcmluZy0+aHdjdXIg
aXMgdGhlIGZpcnN0IHBhY2tldCB1bnNlbnQKKyAqIGJ5IHRoZSBob3N0IGtlcm5lbC4KKyAqCisg
KiBXZSBwdXNoIG91dCBhcyBtYW55IHBhY2tldHMgYXMgcG9zc2libGUsIGFuZCBwb3NzaWJseQor
ICogcmVjbGFpbSBidWZmZXJzIGZyb20gcHJldmlvdXNseSBjb21wbGV0ZWQgdHJhbnNtaXNzaW9u
LgorICoKKyAqIE5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgaG9zdCBhcmUgZW5hYmxlZCBvbmx5IGlm
IHRoZSB1c2VyIGd1ZXN0IHdvdWxkCisgKiBibG9jayAobm8gc3BhY2UgaW4gdGhlIHJpbmcpLgor
ICovCitib29sCituZXRtYXBfcHRfZ3Vlc3RfdHhzeW5jKHN0cnVjdCBwdG5ldF9yaW5nICpwdHJp
bmcsIHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLAorCQkgICAgICAgaW50IGZsYWdzKQorewor
CWJvb2wgbm90aWZ5ID0gZmFsc2U7CisKKwkvKiBEaXNhYmxlIG5vdGlmaWNhdGlvbnMgKi8KKwlw
dHJpbmctPmd1ZXN0X25lZWRfa2ljayA9IDA7CisKKwkvKgorCSAqIEZpcnN0IHBhcnQ6IHRlbGwg
dGhlIGhvc3QgKHVwZGF0aW5nIHRoZSBDU0IpIHRvIHByb2Nlc3MgdGhlIG5ldworCSAqIHBhY2tl
dHMuCisJICovCisJa3JpbmctPm5yX2h3Y3VyID0gcHRyaW5nLT5od2N1cjsKKwlwdG5ldG1hcF9n
dWVzdF93cml0ZV9rcmluZ19jc2IocHRyaW5nLCBrcmluZy0+cmN1ciwga3JpbmctPnJoZWFkKTsK
KworICAgICAgICAvKiBBc2sgZm9yIGEga2ljayBmcm9tIGEgZ3Vlc3QgdG8gdGhlIGhvc3QgaWYg
bmVlZGVkLiAqLworCWlmICgoa3JpbmctPnJoZWFkICE9IGtyaW5nLT5ucl9od2N1ciAmJgorCQlO
TV9BQ0NFU1NfT05DRShwdHJpbmctPmhvc3RfbmVlZF9raWNrKSkgfHwKKwkJCShmbGFncyAmIE5B
Rl9GT1JDRV9SRUNMQUlNKSkgeworCQlwdHJpbmctPnN5bmNfZmxhZ3MgPSBmbGFnczsKKwkJbm90
aWZ5ID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIFNlY29uZCBwYXJ0OiByZWNsYWltIGJ1ZmZlcnMg
Zm9yIGNvbXBsZXRlZCB0cmFuc21pc3Npb25zLgorCSAqLworCWlmIChubV9rcl90eGVtcHR5KGty
aW5nKSB8fCAoZmxhZ3MgJiBOQUZfRk9SQ0VfUkVDTEFJTSkpIHsKKyAgICAgICAgICAgICAgICBw
dG5ldG1hcF9ndWVzdF9yZWFkX2tyaW5nX2NzYihwdHJpbmcsIGtyaW5nKTsKKwl9CisKKyAgICAg
ICAgLyoKKyAgICAgICAgICogTm8gbW9yZSByb29tIGluIHRoZSByaW5nIGZvciBuZXcgdHJhbnNt
aXNzaW9ucy4gVGhlIHVzZXIgdGhyZWFkIHdpbGwKKwkgKiBnbyB0byBzbGVlcCBhbmQgd2UgbmVl
ZCB0byBiZSBub3RpZmllZCBieSB0aGUgaG9zdCB3aGVuIG1vcmUgZnJlZQorCSAqIHNwYWNlIGlz
IGF2YWlsYWJsZS4KKyAgICAgICAgICovCisJaWYgKG5tX2tyX3R4ZW1wdHkoa3JpbmcpKSB7CisJ
CS8qIFJlZW5hYmxlIG5vdGlmaWNhdGlvbnMuICovCisJCXB0cmluZy0+Z3Vlc3RfbmVlZF9raWNr
ID0gMTsKKyAgICAgICAgICAgICAgICAvKiBEb3VibGUgY2hlY2sgKi8KKyAgICAgICAgICAgICAg
ICBwdG5ldG1hcF9ndWVzdF9yZWFkX2tyaW5nX2NzYihwdHJpbmcsIGtyaW5nKTsKKyAgICAgICAg
ICAgICAgICAvKiBJZiB0aGVyZSBpcyBuZXcgZnJlZSBzcGFjZSwgZGlzYWJsZSBub3RpZmljYXRp
b25zICovCisJCWlmICh1bmxpa2VseSghbm1fa3JfdHhlbXB0eShrcmluZykpKSB7CisJCQlwdHJp
bmctPmd1ZXN0X25lZWRfa2ljayA9IDA7CisJCX0KKwl9CisKKwlORCgxLCAiVFggLSBDU0I6IGhl
YWQ6JXUgY3VyOiV1IGh3dGFpbDoldSAtIEtSSU5HOiBoZWFkOiV1IGN1cjoldSB0YWlsOiAldSIs
CisJCQlwdHJpbmctPmhlYWQsIHB0cmluZy0+Y3VyLCBwdHJpbmctPmh3dGFpbCwKKwkJCWtyaW5n
LT5yaGVhZCwga3JpbmctPnJjdXIsIGtyaW5nLT5ucl9od3RhaWwpOworCisJcmV0dXJuIG5vdGlm
eTsKK30KKworLyoKKyAqIFJlY29uY2lsZSBob3N0IGFuZCBndWVzdCB2aWV3IG9mIHRoZSByZWNl
aXZlIHJpbmcuCisgKgorICogVXBkYXRlIGh3Y3VyL2h3dGFpbCBmcm9tIGhvc3QgKHJlYWRpbmcg
ZnJvbSBDU0IpLgorICoKKyAqIElmIGd1ZXN0IHVzZXIgaGFzIHJlbGVhc2VkIGJ1ZmZlcnMgdXAg
dG8gdGhlIG9uZSBiZWZvcmUgcmluZy0+aGVhZCwgd2UKKyAqIGFsc28gZ2l2ZSB0aGVtIHRvIHRo
ZSBob3N0LgorICoKKyAqIE5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgaG9zdCBhcmUgZW5hYmxlZCBv
bmx5IGlmIHRoZSB1c2VyIGd1ZXN0IHdvdWxkCisgKiBibG9jayAobm8gbW9yZSBjb21wbGV0ZWQg
c2xvdHMgaW4gdGhlIHJpbmcpLgorICovCitib29sCituZXRtYXBfcHRfZ3Vlc3RfcnhzeW5jKHN0
cnVjdCBwdG5ldF9yaW5nICpwdHJpbmcsIHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLAorCQkg
ICAgICAgaW50IGZsYWdzKQoreworCWJvb2wgbm90aWZ5ID0gZmFsc2U7CisKKyAgICAgICAgLyog
RGlzYWJsZSBub3RpZmljYXRpb25zICovCisJcHRyaW5nLT5ndWVzdF9uZWVkX2tpY2sgPSAwOwor
CisJLyoKKwkgKiBGaXJzdCBwYXJ0OiBpbXBvcnQgbmV3bHkgcmVjZWl2ZWQgcGFja2V0cywgYnkg
dXBkYXRpbmcgdGhlIGtyaW5nCisJICogaHd0YWlsIHRvIHRoZSBod3RhaWwga25vd24gZnJvbSB0
aGUgaG9zdCAocmVhZCBmcm9tIHRoZSBDU0IpLgorCSAqIFRoaXMgYWxzbyB1cGRhdGVzIHRoZSBr
cmluZyBod2N1ci4KKwkgKi8KKyAgICAgICAgcHRuZXRtYXBfZ3Vlc3RfcmVhZF9rcmluZ19jc2Io
cHRyaW5nLCBrcmluZyk7CisJa3JpbmctPm5yX2tmbGFncyAmPSB+TktSX1BFTkRJTlRSOworCisJ
LyoKKwkgKiBTZWNvbmQgcGFydDogdGVsbCB0aGUgaG9zdCBhYm91dCB0aGUgc2xvdHMgdGhhdCBn
dWVzdCB1c2VyIGhhcworCSAqIHJlbGVhc2VkLCBieSB1cGRhdGluZyBjdXIgYW5kIGhlYWQgaW4g
dGhlIENTQi4KKwkgKi8KKwlpZiAoa3JpbmctPnJoZWFkICE9IGtyaW5nLT5ucl9od2N1cikgewor
CQlwdG5ldG1hcF9ndWVzdF93cml0ZV9rcmluZ19jc2IocHRyaW5nLCBrcmluZy0+cmN1ciwKKwkJ
CQkJICAgICAgIGtyaW5nLT5yaGVhZCk7CisgICAgICAgICAgICAgICAgLyogQXNrIGZvciBhIGtp
Y2sgZnJvbSB0aGUgZ3Vlc3QgdG8gdGhlIGhvc3QgaWYgbmVlZGVkLiAqLworCQlpZiAoTk1fQUND
RVNTX09OQ0UocHRyaW5nLT5ob3N0X25lZWRfa2ljaykpIHsKKwkJCXB0cmluZy0+c3luY19mbGFn
cyA9IGZsYWdzOworCQkJbm90aWZ5ID0gdHJ1ZTsKKwkJfQorCX0KKworICAgICAgICAvKgorICAg
ICAgICAgKiBObyBtb3JlIGNvbXBsZXRlZCBSWCBzbG90cy4gVGhlIHVzZXIgdGhyZWFkIHdpbGwg
Z28gdG8gc2xlZXAgYW5kCisJICogd2UgbmVlZCB0byBiZSBub3RpZmllZCBieSB0aGUgaG9zdCB3
aGVuIG1vcmUgUlggc2xvdHMgaGF2ZSBiZWVuCisJICogY29tcGxldGVkLgorICAgICAgICAgKi8K
KwlpZiAobm1fa3JfcnhlbXB0eShrcmluZykpIHsKKwkJLyogUmVlbmFibGUgbm90aWZpY2F0aW9u
cy4gKi8KKyAgICAgICAgICAgICAgICBwdHJpbmctPmd1ZXN0X25lZWRfa2ljayA9IDE7CisgICAg
ICAgICAgICAgICAgLyogRG91YmxlIGNoZWNrICovCisgICAgICAgICAgICAgICAgcHRuZXRtYXBf
Z3Vlc3RfcmVhZF9rcmluZ19jc2IocHRyaW5nLCBrcmluZyk7CisgICAgICAgICAgICAgICAgLyog
SWYgdGhlcmUgYXJlIG5ldyBzbG90cywgZGlzYWJsZSBub3RpZmljYXRpb25zLiAqLworCQlpZiAo
IW5tX2tyX3J4ZW1wdHkoa3JpbmcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdHJpbmct
Pmd1ZXN0X25lZWRfa2ljayA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKwlO
RCgxLCAiUlggLSBDU0I6IGhlYWQ6JXUgY3VyOiV1IGh3dGFpbDoldSAtIEtSSU5HOiBoZWFkOiV1
IGN1cjoldSIsCisJCXB0cmluZy0+aGVhZCwgcHRyaW5nLT5jdXIsIHB0cmluZy0+aHd0YWlsLAor
CQlrcmluZy0+cmhlYWQsIGtyaW5nLT5yY3VyKTsKKworCXJldHVybiBub3RpZnk7Cit9CisKKy8q
CisgKiBDYWxsYmFja3MgZm9yIHB0bmV0IGRyaXZlcnM6IG5tX2tyaW5nc19jcmVhdGUsIG5tX2ty
aW5nc19kZWxldGUsIG5tX2R0b3IuCisgKi8KK2ludAorcHRuZXRfbm1fa3JpbmdzX2NyZWF0ZShz
dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKQoreworCXN0cnVjdCBuZXRtYXBfcHRfZ3Vlc3RfYWRh
cHRlciAqcHRuYSA9CisJCQkoc3RydWN0IG5ldG1hcF9wdF9ndWVzdF9hZGFwdGVyICopbmE7IC8q
IFVwY2FzdC4gKi8KKwlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hX25tID0gJnB0bmEtPmh3dXAu
dXA7CisJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYV9kciA9ICZwdG5hLT5kci51cDsKKwlpbnQg
cmV0OworCisJaWYgKHB0bmEtPmJhY2tlbmRfcmVnaWZzKSB7CisJCXJldHVybiAwOworCX0KKwor
CS8qIENyZWF0ZSBrcmluZ3Mgb24gdGhlIHB1YmxpYyBuZXRtYXAgYWRhcHRlci4gKi8KKwlyZXQg
PSBuZXRtYXBfaHdfa3JpbmdzX2NyZWF0ZShuYV9ubSk7CisJaWYgKHJldCkgeworCQlyZXR1cm4g
cmV0OworCX0KKworCS8qIENvcHkga3JpbmdzIGludG8gdGhlIG5ldG1hcCBhZGFwdGVyIHByaXZh
dGUgdG8gdGhlIGRyaXZlci4gKi8KKwluYV9kci0+dHhfcmluZ3MgPSBuYV9ubS0+dHhfcmluZ3M7
CisJbmFfZHItPnJ4X3JpbmdzID0gbmFfbm0tPnJ4X3JpbmdzOworCisJcmV0dXJuIDA7Cit9CisK
K3ZvaWQKK3B0bmV0X25tX2tyaW5nc19kZWxldGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSkK
K3sKKwlzdHJ1Y3QgbmV0bWFwX3B0X2d1ZXN0X2FkYXB0ZXIgKnB0bmEgPQorCQkJKHN0cnVjdCBu
ZXRtYXBfcHRfZ3Vlc3RfYWRhcHRlciAqKW5hOyAvKiBVcGNhc3QuICovCisJc3RydWN0IG5ldG1h
cF9hZGFwdGVyICpuYV9ubSA9ICZwdG5hLT5od3VwLnVwOworCXN0cnVjdCBuZXRtYXBfYWRhcHRl
ciAqbmFfZHIgPSAmcHRuYS0+ZHIudXA7CisKKwlpZiAocHRuYS0+YmFja2VuZF9yZWdpZnMpIHsK
KwkJcmV0dXJuOworCX0KKworCW5hX2RyLT50eF9yaW5ncyA9IE5VTEw7CisJbmFfZHItPnJ4X3Jp
bmdzID0gTlVMTDsKKworCW5ldG1hcF9od19rcmluZ3NfZGVsZXRlKG5hX25tKTsKK30KKwordm9p
ZAorcHRuZXRfbm1fZHRvcihzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKQoreworCXN0cnVjdCBu
ZXRtYXBfcHRfZ3Vlc3RfYWRhcHRlciAqcHRuYSA9CisJCQkoc3RydWN0IG5ldG1hcF9wdF9ndWVz
dF9hZGFwdGVyICopbmE7CisKKwluZXRtYXBfbWVtX3B1dChwdG5hLT5kci51cC5ubV9tZW0pOyAv
LyBYWFggaXMgdGhpcyBuZWVkZWQ/CisJbWVtc2V0KCZwdG5hLT5kciwgMCwgc2l6ZW9mKHB0bmEt
PmRyKSk7CisJbmV0bWFwX21lbV9wdF9ndWVzdF9pZnBfZGVsKG5hLT5ubV9tZW0sIG5hLT5pZnAp
OworfQorCisjZW5kaWYgLyogV0lUSF9QVE5FVE1BUF9HVUVTVCAqLwpkaWZmIC11IC1yIC1OIHVz
ci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX3ZhbGUuYyAvdXNyL3NyYy9zeXMvZGV2L25ldG1h
cC9uZXRtYXBfdmFsZS5jCi0tLSB1c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF92YWxlLmMJ
MjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9kZXYv
bmV0bWFwL25ldG1hcF92YWxlLmMJMjAxNi0xMS0yMyAxNjo1Nzo1Ny44NTYwNDIwMDAgKzAwMDAK
QEAgLTEsNSArMSw2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgVW5pdmVyc2l0
YWAgZGkgUGlzYS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IFVuaXZlcnNpdGFgIGRpIFBpc2EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU4LDcgQEAKIAogI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+IC8qIHByZXJlcXVpc2l0ZSAqLwot
X19GQlNESUQoIiRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9uZXRtYXBfdmFs
ZS5jIDI4NTY5OCAyMDE1LTA3LTE5IDE4OjA2OjMwWiBsdWlnaSAkIik7CitfX0ZCU0RJRCgiJEZy
ZWVCU0Q6IGhlYWQvc3lzL2Rldi9uZXRtYXAvbmV0bWFwLmMgMjU3MTc2IDIwMTMtMTAtMjYgMTc6
NTg6MzZaIGdsZWJpdXMgJCIpOwogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8
c3lzL2Vycm5vLmg+CkBAIC0xMDEsNiArMTAyLDkgQEAKICN3YXJuaW5nIE9TWCBzdXBwb3J0IGlz
IG9ubHkgcGFydGlhbAogI2luY2x1ZGUgIm9zeF9nbHVlLmgiCiAKKyNlbGlmIGRlZmluZWQoX1dJ
TjMyKQorI2luY2x1ZGUgIndpbl9nbHVlLmgiCisKICNlbHNlCiAKICNlcnJvcglVbnN1cHBvcnRl
ZCBwbGF0Zm9ybQpAQCAtMTE5LDcgKzEyMyw3IEBACiAKIC8qCiAgKiBzeXN0ZW0gcGFyYW1ldGVy
cyAobW9zdCBvZiB0aGVtIGluIG5ldG1hcF9rZXJuLmgpCi0gKiBOTV9OQU1FCXByZWZpeCBmb3Ig
c3dpdGNoIHBvcnQgbmFtZXMsIGRlZmF1bHQgInZhbGUiCisgKiBOTV9CREdfTkFNRQlwcmVmaXgg
Zm9yIHN3aXRjaCBwb3J0IG5hbWVzLCBkZWZhdWx0ICJ2YWxlIgogICogTk1fQkRHX01BWFBPUlRT
CW51bWJlciBvZiBwb3J0cwogICogTk1fQlJJREdFUwltYXggbnVtYmVyIG9mIHN3aXRjaGVzIGlu
IHRoZSBzeXN0ZW0uCiAgKglYWFggc2hvdWxkIGJlY29tZSBhIHN5c2N0bCBvciB0dW5hYmxlCkBA
IC0xNDQsNyArMTQ4LDYgQEAKICNkZWZpbmUgTk1fQkRHX0JBVENIX01BWAkoTk1fQkRHX0JBVENI
ICsgTk1fTVVMVElTRUcpCiAvKiBOTV9GVF9OVUxMIHRlcm1pbmF0ZXMgYSBsaXN0IG9mIHNsb3Rz
IGluIHRoZSBmdCAqLwogI2RlZmluZSBOTV9GVF9OVUxMCQlOTV9CREdfQkFUQ0hfTUFYCi0jZGVm
aW5lCU5NX0JSSURHRVMJCTgJLyogbnVtYmVyIG9mIGJyaWRnZXMgKi8KIAogCiAvKgpAQCAtMTUy
LDE0ICsxNTUsMTUgQEAKICAqIHVzZWQgaW4gdGhlIGJyaWRnZS4gVGhlIGFjdHVhbCB2YWx1ZSBt
YXkgYmUgbGFyZ2VyIGFzIHRoZQogICogbGFzdCBwYWNrZXQgaW4gdGhlIGJsb2NrIG1heSBvdmVy
ZmxvdyB0aGUgc2l6ZS4KICAqLwotaW50IGJyaWRnZV9iYXRjaCA9IE5NX0JER19CQVRDSDsgLyog
YnJpZGdlIGJhdGNoIHNpemUgKi8KK3N0YXRpYyBpbnQgYnJpZGdlX2JhdGNoID0gTk1fQkRHX0JB
VENIOyAvKiBicmlkZ2UgYmF0Y2ggc2l6ZSAqLworU1lTQkVHSU4odmFyc192YWxlKTsKIFNZU0NU
TF9ERUNMKF9kZXZfbmV0bWFwKTsKIFNZU0NUTF9JTlQoX2Rldl9uZXRtYXAsIE9JRF9BVVRPLCBi
cmlkZ2VfYmF0Y2gsIENUTEZMQUdfUlcsICZicmlkZ2VfYmF0Y2gsIDAgLCAiIik7Ci0KK1NZU0VO
RDsKIAogc3RhdGljIGludCBuZXRtYXBfdnBfY3JlYXRlKHN0cnVjdCBubXJlcSAqLCBzdHJ1Y3Qg
aWZuZXQgKiwgc3RydWN0IG5ldG1hcF92cF9hZGFwdGVyICoqKTsKIHN0YXRpYyBpbnQgbmV0bWFw
X3ZwX3JlZyhzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCBpbnQgb25vZmYpOwotc3RhdGljIGlu
dCBuZXRtYXBfYndyYXBfcmVnaXN0ZXIoc3RydWN0IG5ldG1hcF9hZGFwdGVyICosIGludCBvbm9m
Zik7CitzdGF0aWMgaW50IG5ldG1hcF9id3JhcF9yZWcoc3RydWN0IG5ldG1hcF9hZGFwdGVyICos
IGludCBvbm9mZik7CiAKIC8qCiAgKiBGb3IgZWFjaCBvdXRwdXQgaW50ZXJmYWNlLCBubV9iZGdf
cSBpcyB1c2VkIHRvIGNvbnN0cnVjdCBhIGxpc3QuCkBAIC0yMTMsNyArMjE3LDcgQEAKIAkgKiBm
b3J3YXJkIHRoaXMgcGFja2V0LiAgcmluZ19uciBpcyB0aGUgc291cmNlIHJpbmcgaW5kZXgsIGFu
ZCB0aGUKIAkgKiBmdW5jdGlvbiBtYXkgb3ZlcndyaXRlIHRoaXMgdmFsdWUgdG8gZm9yd2FyZCB0
aGlzIHBhY2tldCB0byBhCiAJICogZGlmZmVyZW50IHJpbmcgaW5kZXguCi0JICogVGhpcyBmdW5j
dGlvbiBtdXN0IGJlIHNldCBieSBuZXRtYXBfYmRnY3RsKCkuCisJICogVGhpcyBmdW5jdGlvbiBt
dXN0IGJlIHNldCBieSBuZXRtYXBfYmRnX2N0bCgpLgogCSAqLwogCXN0cnVjdCBuZXRtYXBfYmRn
X29wcyBiZGdfb3BzOwogCkBAIC0yNDQsNyArMjQ4LDcgQEAKICAqIFJpZ2h0IG5vdyB3ZSBoYXZl
IGEgc3RhdGljIGFycmF5IGFuZCBkZWxldGlvbnMgYXJlIHByb3RlY3RlZAogICogYnkgYW4gZXhj
bHVzaXZlIGxvY2suCiAgKi8KLXN0cnVjdCBubV9icmlkZ2UgKm5tX2JyaWRnZXM7CitzdGF0aWMg
c3RydWN0IG5tX2JyaWRnZSAqbm1fYnJpZGdlczsKICNlbmRpZiAvKiAhQ09ORklHX05FVF9OUyAq
LwogCiAKQEAgLTI3OCw2ICsyODIsNDUgQEAKIH0KIAogCitzdGF0aWMgaW50CitubV9pc19pZF9j
aGFyKGNvbnN0IGNoYXIgYykKK3sKKwlyZXR1cm4gKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSB8fAor
CSAgICAgICAoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8CisJICAgICAgIChjID49ICcwJyAmJiBj
IDw9ICc5JykgfHwKKwkgICAgICAgKGMgPT0gJ18nKTsKK30KKworLyogVmFsaWRhdGUgdGhlIG5h
bWUgb2YgYSBWQUxFIGJyaWRnZSBwb3J0IGFuZCByZXR1cm4gdGhlCisgKiBwb3NpdGlvbiBvZiB0
aGUgIjoiIGNoYXJhY3Rlci4gKi8KK3N0YXRpYyBpbnQKK25tX3ZhbGVfbmFtZV92YWxpZGF0ZShj
b25zdCBjaGFyICpuYW1lKQoreworCWludCBjb2xvbl9wb3MgPSAtMTsKKwlpbnQgaTsKKworCWlm
ICghbmFtZSB8fCBzdHJsZW4obmFtZSkgPCBzdHJsZW4oTk1fQkRHX05BTUUpKSB7CisJCXJldHVy
biAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBuYW1lW2ldOyBpKyspIHsKKwkJaWYgKG5hbWVbaV0g
PT0gJzonKSB7CisJCQlpZiAoY29sb25fcG9zICE9IC0xKSB7CisJCQkJcmV0dXJuIC0xOworCQkJ
fQorCQkJY29sb25fcG9zID0gaTsKKwkJfSBlbHNlIGlmICghbm1faXNfaWRfY2hhcihuYW1lW2ld
KSkgeworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJaWYgKGkgPj0gSUZOQU1TSVopIHsKKwkJ
cmV0dXJuIC0xOworCX0KKworCXJldHVybiBjb2xvbl9wb3M7Cit9CisKIC8qCiAgKiBsb2NhdGUg
YSBicmlkZ2UgYW1vbmcgdGhlIGV4aXN0aW5nIG9uZXMuCiAgKiBNVVNUIEJFIENBTExFRCBXSVRI
IE5NR19MT0NLKCkKQEAgLTI4OCw3ICszMzEsNyBAQAogc3RhdGljIHN0cnVjdCBubV9icmlkZ2Ug
Kgogbm1fZmluZF9icmlkZ2UoY29uc3QgY2hhciAqbmFtZSwgaW50IGNyZWF0ZSkKIHsKLQlpbnQg
aSwgbCwgbmFtZWxlbjsKKwlpbnQgaSwgbmFtZWxlbjsKIAlzdHJ1Y3Qgbm1fYnJpZGdlICpiID0g
TlVMTCwgKmJyaWRnZXM7CiAJdV9pbnQgbnVtX2JyaWRnZXM7CiAKQEAgLTI5NiwyMSArMzM5LDEx
IEBACiAKIAluZXRtYXBfYm5zX2dldGJyaWRnZXMoJmJyaWRnZXMsICZudW1fYnJpZGdlcyk7CiAK
LQluYW1lbGVuID0gc3RybGVuKE5NX05BTUUpOwkvKiBiYXNlIGxlbmd0aCAqLwotCWwgPSBuYW1l
ID8gc3RybGVuKG5hbWUpIDogMDsJCS8qIGFjdHVhbCBsZW5ndGggKi8KLQlpZiAobCA8IG5hbWVs
ZW4pIHsKKwluYW1lbGVuID0gbm1fdmFsZV9uYW1lX3ZhbGlkYXRlKG5hbWUpOworCWlmIChuYW1l
bGVuIDwgMCkgewogCQlEKCJpbnZhbGlkIGJyaWRnZSBuYW1lICVzIiwgbmFtZSA/IG5hbWUgOiBO
VUxMKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCWZvciAoaSA9IG5hbWVsZW4gKyAxOyBpIDwgbDsg
aSsrKSB7Ci0JCWlmIChuYW1lW2ldID09ICc6JykgewotCQkJbmFtZWxlbiA9IGk7Ci0JCQlicmVh
azsKLQkJfQotCX0KLQlpZiAobmFtZWxlbiA+PSBJRk5BTVNJWikKLQkJbmFtZWxlbiA9IElGTkFN
U0laOwotCU5EKCItLS0gcHJlZml4IGlzICclLipzJyAtLS0iLCBuYW1lbGVuLCBuYW1lKTsKIAog
CS8qIGxvb2t1cCB0aGUgbmFtZSwgcmVtZW1iZXIgZW1wdHkgc2xvdCBpZiB0aGVyZSBpcyBvbmUg
Ki8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2JyaWRnZXM7IGkrKykgewpAQCAtMzYwLDcgKzM5Myw3
IEBACiAJa3JpbmcgPSBuYS0+dHhfcmluZ3M7CiAJZm9yIChpID0gMDsgaSA8IG5yaW5nczsgaSsr
KSB7CiAJCWlmIChrcmluZ1tpXS5ua3JfZnQpIHsKLQkJCWZyZWUoa3JpbmdbaV0ubmtyX2Z0LCBN
X0RFVkJVRik7CisJCQlubV9vc19mcmVlKGtyaW5nW2ldLm5rcl9mdCk7CiAJCQlrcmluZ1tpXS5u
a3JfZnQgPSBOVUxMOyAvKiBwcm90ZWN0IGZyb20gZnJlZWluZyB0d2ljZSAqLwogCQl9CiAJfQpA
QCAtMzkwLDcgKzQyMyw3IEBACiAJCXN0cnVjdCBubV9iZGdfcSAqZHN0cTsKIAkJaW50IGo7CiAK
LQkJZnQgPSBtYWxsb2MobCwgTV9ERVZCVUYsIE1fTk9XQUlUIHwgTV9aRVJPKTsKKwkJZnQgPSBu
bV9vc19tYWxsb2MobCk7CiAJCWlmICghZnQpIHsKIAkJCW5tX2ZyZWVfYmRnZndkKG5hKTsKIAkJ
CXJldHVybiBFTk9NRU07CkBAIC00NzksNiArNTEyLDcgQEAKIAlzdHJ1Y3QgbmV0bWFwX3ZwX2Fk
YXB0ZXIgKnZwbmEgPSAoc3RydWN0IG5ldG1hcF92cF9hZGFwdGVyICopbmE7CiAJc3RydWN0IG5t
X2JyaWRnZSAqYiA9IHZwbmEtPm5hX2JkZzsKIAorCSh2b2lkKW5tcjsJLy8gWFhYIG1lcmdlID8K
IAlpZiAoYXR0YWNoKQogCQlyZXR1cm4gMDsgLyogbm90aGluZyB0byBkbyAqLwogCWlmIChiKSB7
CkBAIC01MTgsNyArNTUyLDcgQEAKIAkJcmV0dXJuIEVOWElPOwogCU5NR19MT0NLKCk7CiAJLyog
bWFrZSBzdXJlIHRoaXMgaXMgYWN0dWFsbHkgYSBWQUxFIHBvcnQgKi8KLQlpZiAoIU5FVE1BUF9D
QVBBQkxFKGlmcCkgfHwgTkEoaWZwKS0+bm1fcmVnaXN0ZXIgIT0gbmV0bWFwX3ZwX3JlZykgewor
CWlmICghTk1fTkFfVkFMSUQoaWZwKSB8fCBOQShpZnApLT5ubV9yZWdpc3RlciAhPSBuZXRtYXBf
dnBfcmVnKSB7CiAJCWVycm9yID0gRUlOVkFMOwogCQlnb3RvIGVycjsKIAl9CkBAIC01MzUsNyAr
NTY5LDcgQEAKIAkgKi8KIAlpZl9yZWxlKGlmcCk7CiAJbmV0bWFwX2RldGFjaChpZnApOwotCW5t
X3ZpX2RldGFjaChpZnApOworCW5tX29zX3ZpX2RldGFjaChpZnApOwogCXJldHVybiAwOwogCiBl
cnI6CkBAIC01NDQsNiArNTc4LDE2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgaW50
CitubV91cGRhdGVfaW5mbyhzdHJ1Y3Qgbm1yZXEgKm5tciwgc3RydWN0IG5ldG1hcF9hZGFwdGVy
ICpuYSkKK3sKKwlubXItPm5yX3J4X3JpbmdzID0gbmEtPm51bV9yeF9yaW5nczsKKwlubXItPm5y
X3R4X3JpbmdzID0gbmEtPm51bV90eF9yaW5nczsKKwlubXItPm5yX3J4X3Nsb3RzID0gbmEtPm51
bV9yeF9kZXNjOworCW5tci0+bnJfdHhfc2xvdHMgPSBuYS0+bnVtX3R4X2Rlc2M7CisJcmV0dXJu
IG5ldG1hcF9tZW1fZ2V0X2luZm8obmEtPm5tX21lbSwgJm5tci0+bnJfbWVtc2l6ZSwgTlVMTCwg
Jm5tci0+bnJfYXJnMik7Cit9CisKIC8qCiAgKiBDcmVhdGUgYSB2aXJ0dWFsIGludGVyZmFjZSBy
ZWdpc3RlcmVkIHRvIHRoZSBzeXN0ZW0uCiAgKiBUaGUgaW50ZXJmYWNlIHdpbGwgYmUgYXR0YWNo
ZWQgdG8gYSBicmlkZ2UgbGF0ZXIuCkBAIC01NTYsMTQgKzYwMCwyMiBAQAogCWludCBlcnJvcjsK
IAogCS8qIGRvbid0IGluY2x1ZGUgVkFMRSBwcmVmaXggKi8KLQlpZiAoIXN0cm5jbXAobm1yLT5u
cl9uYW1lLCBOTV9OQU1FLCBzdHJsZW4oTk1fTkFNRSkpKQorCWlmICghc3RybmNtcChubXItPm5y
X25hbWUsIE5NX0JER19OQU1FLCBzdHJsZW4oTk1fQkRHX05BTUUpKSkKIAkJcmV0dXJuIEVJTlZB
TDsKIAlpZnAgPSBpZnVuaXRfcmVmKG5tci0+bnJfbmFtZSk7CiAJaWYgKGlmcCkgeyAvKiBhbHJl
YWR5IGV4aXN0LCBjYW5ub3QgY3JlYXRlIG5ldyBvbmUgKi8KKwkJZXJyb3IgPSBFRVhJU1Q7CisJ
CU5NR19MT0NLKCk7CisJCWlmIChOTV9OQV9WQUxJRChpZnApKSB7CisJCQlpbnQgdXBkYXRlX2Vy
ciA9IG5tX3VwZGF0ZV9pbmZvKG5tciwgTkEoaWZwKSk7CisJCQlpZiAodXBkYXRlX2VycikKKwkJ
CQllcnJvciA9IHVwZGF0ZV9lcnI7CisJCX0KKwkJTk1HX1VOTE9DSygpOwogCQlpZl9yZWxlKGlm
cCk7Ci0JCXJldHVybiBFRVhJU1Q7CisJCXJldHVybiBlcnJvcjsKIAl9Ci0JZXJyb3IgPSBubV92
aV9wZXJzaXN0KG5tci0+bnJfbmFtZSwgJmlmcCk7CisJZXJyb3IgPSBubV9vc192aV9wZXJzaXN0
KG5tci0+bnJfbmFtZSwgJmlmcCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAg
LTU3MiwxNSArNjI0LDI5IEBACiAJZXJyb3IgPSBuZXRtYXBfdnBfY3JlYXRlKG5tciwgaWZwLCAm
dnBuYSk7CiAJaWYgKGVycm9yKSB7CiAJCUQoImVycm9yICVkIiwgZXJyb3IpOwotCQlubV92aV9k
ZXRhY2goaWZwKTsKLQkJcmV0dXJuIGVycm9yOworCQlnb3RvIGVycl8xOwogCX0KIAkvKiBwZXJz
aXN0LXNwZWNpZmljIHJvdXRpbmVzICovCiAJdnBuYS0+dXAubm1fYmRnX2N0bCA9IG5ldG1hcF92
cF9iZGdfY3RsOwogCW5ldG1hcF9hZGFwdGVyX2dldCgmdnBuYS0+dXApOworCU5NX0FUVEFDSF9O
QShpZnAsICZ2cG5hLT51cCk7CisJLyogcmV0dXJuIHRoZSB1cGRhdGVkIGluZm8gKi8KKwllcnJv
ciA9IG5tX3VwZGF0ZV9pbmZvKG5tciwgJnZwbmEtPnVwKTsKKwlpZiAoZXJyb3IpIHsKKwkJZ290
byBlcnJfMjsKKwl9CisJRCgicmV0dXJuaW5nIG5yX2FyZzIgJWQiLCBubXItPm5yX2FyZzIpOwog
CU5NR19VTkxPQ0soKTsKIAlEKCJjcmVhdGVkICVzIiwgaWZwLT5pZl94bmFtZSk7CiAJcmV0dXJu
IDA7CisKK2Vycl8yOgorCW5ldG1hcF9kZXRhY2goaWZwKTsKK2Vycl8xOgorCU5NR19VTkxPQ0so
KTsKKwlubV9vc192aV9kZXRhY2goaWZwKTsKKworCXJldHVybiBlcnJvcjsKIH0KIAogLyogVHJ5
IHRvIGdldCBhIHJlZmVyZW5jZSB0byBhIG5ldG1hcCBhZGFwdGVyIGF0dGFjaGVkIHRvIGEgVkFM
RSBzd2l0Y2guCkBAIC02MDgsNyArNjc0LDcgQEAKIAogCS8qIGZpcnN0IHRyeSB0byBzZWUgaWYg
dGhpcyBpcyBhIGJyaWRnZSBwb3J0LiAqLwogCU5NR19MT0NLX0FTU0VSVCgpOwotCWlmIChzdHJu
Y21wKG5yX25hbWUsIE5NX05BTUUsIHNpemVvZihOTV9OQU1FKSAtIDEpKSB7CisJaWYgKHN0cm5j
bXAobnJfbmFtZSwgTk1fQkRHX05BTUUsIHNpemVvZihOTV9CREdfTkFNRSkgLSAxKSkgewogCQly
ZXR1cm4gMDsgIC8qIG5vIGVycm9yLCBidXQgbm8gVkFMRSBwcmVmaXggKi8KIAl9CiAKQEAgLTY3
NCw3ICs3NDAsNyBAQAogCQllcnJvciA9IG5ldG1hcF92cF9jcmVhdGUobm1yLCBOVUxMLCAmdnBu
YSk7CiAJCWlmIChlcnJvcikgewogCQkJRCgiZXJyb3IgJWQiLCBlcnJvcik7Ci0JCQlmcmVlKGlm
cCwgTV9ERVZCVUYpOworCQkJbm1fb3NfZnJlZShpZnApOwogCQkJcmV0dXJuIGVycm9yOwogCQl9
CiAJCS8qIHNob3J0Y3V0IC0gd2UgY2FuIHNraXAgZ2V0X2h3X25hKCksCkBAIC02OTMsNyArNzU5
LDYgQEAKIAkJCWdvdG8gb3V0OwogCQl2cG5hID0gaHctPm5hX3ZwOwogCQlob3N0bmEgPSBody0+
bmFfaG9zdHZwOwotCQlpZl9yZWxlKGlmcCk7CiAJCWlmIChubXItPm5yX2FyZzEgIT0gTkVUTUFQ
X0JER19IT1NUKQogCQkJaG9zdG5hID0gTlVMTDsKIAl9CkBAIC03NjgsNiArODMzLDExIEBACiAJ
cmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgaW5saW5lIGludAorbm1faXNfYndyYXAoc3RydWN0
IG5ldG1hcF9hZGFwdGVyICpuYSkKK3sKKwlyZXR1cm4gbmEtPm5tX3JlZ2lzdGVyID09IG5ldG1h
cF9id3JhcF9yZWc7Cit9CiAKIC8qIHByb2Nlc3MgTkVUTUFQX0JER19ERVRBQ0ggKi8KIHN0YXRp
YyBpbnQKQEAgLTc4NSw4ICs4NTUsMTMgQEAKIAlpZiAobmEgPT0gTlVMTCkgeyAvKiBWQUxFIHBy
ZWZpeCBtaXNzaW5nICovCiAJCWVycm9yID0gRUlOVkFMOwogCQlnb3RvIHVubG9ja19leGl0Owor
CX0gZWxzZSBpZiAobm1faXNfYndyYXAobmEpICYmCisJCSAgICgoc3RydWN0IG5ldG1hcF9id3Jh
cF9hZGFwdGVyICopbmEpLT5uYV9wb2xsaW5nX3N0YXRlKSB7CisJCS8qIERvbid0IGRldGFjaCBh
IE5JQyB3aXRoIHBvbGxpbmcgKi8KKwkJZXJyb3IgPSBFQlVTWTsKKwkJbmV0bWFwX2FkYXB0ZXJf
cHV0KG5hKTsKKwkJZ290byB1bmxvY2tfZXhpdDsKIAl9Ci0KIAlpZiAobmEtPm5tX2JkZ19jdGwp
IHsKIAkJLyogcmVtb3ZlIHRoZSBwb3J0IGZyb20gYnJpZGdlLiBUaGUgYndyYXAKIAkJICogYWxz
byBuZWVkcyB0byBwdXQgdGhlIGh3bmEgaW4gbm9ybWFsIG1vZGUKQEAgLTgwMSw2ICs4NzYsMjY2
IEBACiAKIH0KIAorc3RydWN0IG5tX2JkZ19wb2xsaW5nX3N0YXRlOworc3RydWN0CitubV9iZGdf
a3RocmVhZCB7CisJc3RydWN0IG5tX2t0aHJlYWQgKm5tazsKKwl1X2ludCBxZmlyc3Q7CisJdV9p
bnQgcWxhc3Q7CisJc3RydWN0IG5tX2JkZ19wb2xsaW5nX3N0YXRlICpicHM7Cit9OworCitzdHJ1
Y3Qgbm1fYmRnX3BvbGxpbmdfc3RhdGUgeworCWJvb2wgY29uZmlndXJlZDsKKwlib29sIHN0b3Bw
ZWQ7CisJc3RydWN0IG5ldG1hcF9id3JhcF9hZGFwdGVyICpibmE7CisJdV9pbnQgcmVnOworCXVf
aW50IHFmaXJzdDsKKwl1X2ludCBxbGFzdDsKKwl1X2ludCBjcHVfZnJvbTsKKwl1X2ludCBuY3B1
czsKKwlzdHJ1Y3Qgbm1fYmRnX2t0aHJlYWQgKmt0aHJlYWRzOworfTsKKworc3RhdGljIHZvaWQK
K25ldG1hcF9id3JhcF9wb2xsaW5nKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG5tX2JkZ19rdGhy
ZWFkICpuYmsgPSBkYXRhOworCXN0cnVjdCBuZXRtYXBfYndyYXBfYWRhcHRlciAqYm5hOworCXVf
aW50IHFmaXJzdCwgcWxhc3QsIGk7CisJc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcwLCAqa3Jp
bmc7CisKKwlpZiAoIW5iaykKKwkJcmV0dXJuOworCXFmaXJzdCA9IG5iay0+cWZpcnN0OworCXFs
YXN0ID0gbmJrLT5xbGFzdDsKKwlibmEgPSBuYmstPmJwcy0+Ym5hOworCWtyaW5nMCA9IE5NUihi
bmEtPmh3bmEsIE5SX1JYKTsKKworCWZvciAoaSA9IHFmaXJzdDsgaSA8IHFsYXN0OyBpKyspIHsK
KwkJa3JpbmcgPSBrcmluZzAgKyBpOworCQlrcmluZy0+bm1fbm90aWZ5KGtyaW5nLCAwKTsKKwl9
Cit9CisKK3N0YXRpYyBpbnQKK25tX2JkZ19jcmVhdGVfa3RocmVhZHMoc3RydWN0IG5tX2JkZ19w
b2xsaW5nX3N0YXRlICpicHMpCit7CisJc3RydWN0IG5tX2t0aHJlYWRfY2ZnIGtjZmc7CisJaW50
IGksIGo7CisKKwlicHMtPmt0aHJlYWRzID0gbm1fb3NfbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm1f
YmRnX2t0aHJlYWQpICogYnBzLT5uY3B1cyk7CisJaWYgKGJwcy0+a3RocmVhZHMgPT0gTlVMTCkK
KwkJcmV0dXJuIEVOT01FTTsKKworCWJ6ZXJvKCZrY2ZnLCBzaXplb2Yoa2NmZykpOworCWtjZmcu
d29ya2VyX2ZuID0gbmV0bWFwX2J3cmFwX3BvbGxpbmc7CisJZm9yIChpID0gMDsgaSA8IGJwcy0+
bmNwdXM7IGkrKykgeworCQlzdHJ1Y3Qgbm1fYmRnX2t0aHJlYWQgKnQgPSBicHMtPmt0aHJlYWRz
ICsgaTsKKwkJaW50IGFsbCA9IChicHMtPm5jcHVzID09IDEgJiYgYnBzLT5yZWcgPT0gTlJfUkVH
X0FMTF9OSUMpOworCQlpbnQgYWZmaW5pdHkgPSBicHMtPmNwdV9mcm9tICsgaTsKKworCQl0LT5i
cHMgPSBicHM7CisJCXQtPnFmaXJzdCA9IGFsbCA/IGJwcy0+cWZpcnN0IC8qIG11c3QgYmUgMCAq
LzogYWZmaW5pdHk7CisJCXQtPnFsYXN0ID0gYWxsID8gYnBzLT5xbGFzdCA6IHQtPnFmaXJzdCAr
IDE7CisJCUQoImt0aHJlYWQgJWQgYToldSBxZjoldSBxbDoldSIsIGksIGFmZmluaXR5LCB0LT5x
Zmlyc3QsCisJCQl0LT5xbGFzdCk7CisKKwkJa2NmZy50eXBlID0gaTsKKwkJa2NmZy53b3JrZXJf
cHJpdmF0ZSA9IHQ7CisJCXQtPm5tayA9IG5tX29zX2t0aHJlYWRfY3JlYXRlKCZrY2ZnLCAwLCBO
VUxMKTsKKwkJaWYgKHQtPm5tayA9PSBOVUxMKSB7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJ
bm1fb3Nfa3RocmVhZF9zZXRfYWZmaW5pdHkodC0+bm1rLCBhZmZpbml0eSk7CisJfQorCXJldHVy
biAwOworCitjbGVhbnVwOgorCWZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKKwkJc3RydWN0IG5t
X2JkZ19rdGhyZWFkICp0ID0gYnBzLT5rdGhyZWFkcyArIGk7CisJCW5tX29zX2t0aHJlYWRfZGVs
ZXRlKHQtPm5tayk7CisJfQorCW5tX29zX2ZyZWUoYnBzLT5rdGhyZWFkcyk7CisJcmV0dXJuIEVG
QVVMVDsKK30KKworLyogYSB2ZXJzaW9uIG9mIHB0bmV0bWFwX3N0YXJ0X2t0aHJlYWRzKCkgKi8K
K3N0YXRpYyBpbnQKK25tX2JkZ19wb2xsaW5nX3N0YXJ0X2t0aHJlYWRzKHN0cnVjdCBubV9iZGdf
cG9sbGluZ19zdGF0ZSAqYnBzKQoreworCWludCBlcnJvciwgaSwgajsKKworCWlmICghYnBzKSB7
CisJCUQoInBvbGxpbmcgaXMgbm90IGNvbmZpZ3VyZWQiKTsKKwkJcmV0dXJuIEVGQVVMVDsKKwl9
CisJYnBzLT5zdG9wcGVkID0gZmFsc2U7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnBzLT5uY3B1czsg
aSsrKSB7CisJCXN0cnVjdCBubV9iZGdfa3RocmVhZCAqdCA9IGJwcy0+a3RocmVhZHMgKyBpOwor
CQllcnJvciA9IG5tX29zX2t0aHJlYWRfc3RhcnQodC0+bm1rKTsKKwkJaWYgKGVycm9yKSB7CisJ
CQlEKCJlcnJvciBpbiBubV9rdGhyZWFkX3N0YXJ0KCkiKTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJ
fQorCX0KKwlyZXR1cm4gMDsKKworY2xlYW51cDoKKwlmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7
CisJCXN0cnVjdCBubV9iZGdfa3RocmVhZCAqdCA9IGJwcy0+a3RocmVhZHMgKyBpOworCQlubV9v
c19rdGhyZWFkX3N0b3AodC0+bm1rKTsKKwl9CisJYnBzLT5zdG9wcGVkID0gdHJ1ZTsKKwlyZXR1
cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkCitubV9iZGdfcG9sbGluZ19zdG9wX2RlbGV0ZV9r
dGhyZWFkcyhzdHJ1Y3Qgbm1fYmRnX3BvbGxpbmdfc3RhdGUgKmJwcykKK3sKKwlpbnQgaTsKKwor
CWlmICghYnBzKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgYnBzLT5uY3B1czsgaSsr
KSB7CisJCXN0cnVjdCBubV9iZGdfa3RocmVhZCAqdCA9IGJwcy0+a3RocmVhZHMgKyBpOworCQlu
bV9vc19rdGhyZWFkX3N0b3AodC0+bm1rKTsKKwkJbm1fb3Nfa3RocmVhZF9kZWxldGUodC0+bm1r
KTsKKwl9CisJYnBzLT5zdG9wcGVkID0gdHJ1ZTsKK30KKworc3RhdGljIGludAorZ2V0X3BvbGxp
bmdfY2ZnKHN0cnVjdCBubXJlcSAqbm1yLCBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLAorCQkJ
c3RydWN0IG5tX2JkZ19wb2xsaW5nX3N0YXRlICpicHMpCit7CisJaW50IHJlcV9jcHVzLCBhdmFp
bF9jcHVzLCBjb3JlX2Zyb207CisJdV9pbnQgcmVnLCBpLCBxZmlyc3QsIHFsYXN0OworCisJYXZh
aWxfY3B1cyA9IG5tX29zX25jcHVzKCk7CisJcmVxX2NwdXMgPSBubXItPm5yX2FyZzE7CisKKwlp
ZiAocmVxX2NwdXMgPT0gMCkgeworCQlEKCJyZXFfY3B1cyBtdXN0IGJlID4gMCIpOworCQlyZXR1
cm4gRUlOVkFMOworCX0gZWxzZSBpZiAocmVxX2NwdXMgPj0gYXZhaWxfY3B1cykgeworCQlEKCJm
b3Igc2FmZXR5LCB3ZSBuZWVkIGF0IGxlYXN0IG9uZSBjb3JlIGxlZnQgaW4gdGhlIHN5c3RlbSIp
OworCQlyZXR1cm4gRUlOVkFMOworCX0KKwlyZWcgPSBubXItPm5yX2ZsYWdzICYgTlJfUkVHX01B
U0s7CisJaSA9IG5tci0+bnJfcmluZ2lkICYgTkVUTUFQX1JJTkdfTUFTSzsKKwkvKgorCSAqIE9O
RV9OSUM6IGRlZGljYXRlIG9uZSBjb3JlIHRvIG9uZSByaW5nLiBJZiBtdWx0aXBsZSBjb3Jlcwor
CSAqICAgICAgICAgIGFyZSBzcGVjaWZpZWQsIGNvbnNlY3V0aXZlIHJpbmdzIGFyZSBhbHNvIHBv
bGxlZC4KKwkgKiAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgcmluZ2lkPTIgYW5kIDIgY29yZXMg
YXJlIGdpdmVuLAorCSAqICAgICAgICAgIHJpbmcgMiBhbmQgMyBhcmUgcG9sbGVkIGJ5IGNvcmUg
MiBhbmQgMywgcmVzcGVjdGl2ZWx5LgorCSAqIEFMTF9OSUM6IHBvbGwgYWxsIHRoZSByaW5ncyB1
c2luZyBhIGNvcmUgc3BlY2lmaWVkIGJ5IHJpbmdpZC4KKwkgKiAgICAgICAgICB0aGUgbnVtYmVy
IG9mIGNvcmVzIG11c3QgYmUgMS4KKwkgKi8KKwlpZiAocmVnID09IE5SX1JFR19PTkVfTklDKSB7
CisJCWlmIChpICsgcmVxX2NwdXMgPiBubWFfZ2V0X25yaW5ncyhuYSwgTlJfUlgpKSB7CisJCQlE
KCJvbmx5ICVkIHJpbmdzIGV4aXN0IChyaW5nICV1LSV1IGlzIGdpdmVuKSIsCisJCQkJbm1hX2dl
dF9ucmluZ3MobmEsIE5SX1JYKSwgaSwgaStyZXFfY3B1cyk7CisJCQlyZXR1cm4gRUlOVkFMOwor
CQl9CisJCXFmaXJzdCA9IGk7CisJCXFsYXN0ID0gcWZpcnN0ICsgcmVxX2NwdXM7CisJCWNvcmVf
ZnJvbSA9IHFmaXJzdDsKKwl9IGVsc2UgaWYgKHJlZyA9PSBOUl9SRUdfQUxMX05JQykgeworCQlp
ZiAocmVxX2NwdXMgIT0gMSkgeworCQkJRCgibmNwdXMgbXVzdCBiZSAxIG5vdCAlZCBmb3IgUkVH
X0FMTF9OSUMiLCByZXFfY3B1cyk7CisJCQlyZXR1cm4gRUlOVkFMOworCQl9CisJCXFmaXJzdCA9
IDA7CisJCXFsYXN0ID0gbm1hX2dldF9ucmluZ3MobmEsIE5SX1JYKTsKKwkJY29yZV9mcm9tID0g
aTsKKwl9IGVsc2UgeworCQlEKCJyZWcgbXVzdCBiZSBBTExfTklDIG9yIE9ORV9OSUMiKTsKKwkJ
cmV0dXJuIEVJTlZBTDsKKwl9CisKKwlicHMtPnJlZyA9IHJlZzsKKwlicHMtPnFmaXJzdCA9IHFm
aXJzdDsKKwlicHMtPnFsYXN0ID0gcWxhc3Q7CisJYnBzLT5jcHVfZnJvbSA9IGNvcmVfZnJvbTsK
KwlicHMtPm5jcHVzID0gcmVxX2NwdXM7CisJRCgiJXMgcWZpcnN0ICV1IHFsYXN0ICV1IGNwdV9m
cm9tICV1IG5jcHVzICV1IiwKKwkJcmVnID09IE5SX1JFR19BTExfTklDID8gIlJFR19BTExfTklD
IiA6ICJSRUdfT05FX05JQyIsCisJCXFmaXJzdCwgcWxhc3QsIGNvcmVfZnJvbSwgcmVxX2NwdXMp
OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitubV9iZGdfY3RsX3BvbGxpbmdfc3RhcnQo
c3RydWN0IG5tcmVxICpubXIsIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEpCit7CisJc3RydWN0
IG5tX2JkZ19wb2xsaW5nX3N0YXRlICpicHM7CisJc3RydWN0IG5ldG1hcF9id3JhcF9hZGFwdGVy
ICpibmE7CisJaW50IGVycm9yOworCisJYm5hID0gKHN0cnVjdCBuZXRtYXBfYndyYXBfYWRhcHRl
ciAqKW5hOworCWlmIChibmEtPm5hX3BvbGxpbmdfc3RhdGUpIHsKKwkJRCgiRVJST1IgYWRhcHRl
ciBhbHJlYWR5IGluIHBvbGxpbmcgbW9kZSIpOworCQlyZXR1cm4gRUZBVUxUOworCX0KKworCWJw
cyA9IG5tX29zX21hbGxvYyhzaXplb2YoKmJwcykpOworCWlmICghYnBzKQorCQlyZXR1cm4gRU5P
TUVNOworCWJwcy0+Y29uZmlndXJlZCA9IGZhbHNlOworCWJwcy0+c3RvcHBlZCA9IHRydWU7CisK
KwlpZiAoZ2V0X3BvbGxpbmdfY2ZnKG5tciwgbmEsIGJwcykpIHsKKwkJbm1fb3NfZnJlZShicHMp
OworCQlyZXR1cm4gRUlOVkFMOworCX0KKworCWlmIChubV9iZGdfY3JlYXRlX2t0aHJlYWRzKGJw
cykpIHsKKwkJbm1fb3NfZnJlZShicHMpOworCQlyZXR1cm4gRUZBVUxUOworCX0KKworCWJwcy0+
Y29uZmlndXJlZCA9IHRydWU7CisJYm5hLT5uYV9wb2xsaW5nX3N0YXRlID0gYnBzOworCWJwcy0+
Ym5hID0gYm5hOworCisJLyogZGlzYWJsZSBpbnRlcnJ1cHQgaWYgcG9zc2libGUgKi8KKwlpZiAo
Ym5hLT5od25hLT5ubV9pbnRyKQorCQlibmEtPmh3bmEtPm5tX2ludHIoYm5hLT5od25hLCAwKTsK
KwkvKiBzdGFydCBrdGhyZWFkIG5vdyAqLworCWVycm9yID0gbm1fYmRnX3BvbGxpbmdfc3RhcnRf
a3RocmVhZHMoYnBzKTsKKwlpZiAoZXJyb3IpIHsKKwkJRCgiRVJST1Igbm1fYmRnX3BvbGxpbmdf
c3RhcnRfa3RocmVhZCgpIik7CisJCW5tX29zX2ZyZWUoYnBzLT5rdGhyZWFkcyk7CisJCW5tX29z
X2ZyZWUoYnBzKTsKKwkJYm5hLT5uYV9wb2xsaW5nX3N0YXRlID0gTlVMTDsKKwkJaWYgKGJuYS0+
aHduYS0+bm1faW50cikKKwkJCWJuYS0+aHduYS0+bm1faW50cihibmEtPmh3bmEsIDEpOworCX0K
KwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQKK25tX2JkZ19jdGxfcG9sbGluZ19zdG9w
KHN0cnVjdCBubXJlcSAqbm1yLCBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKQoreworCXN0cnVj
dCBuZXRtYXBfYndyYXBfYWRhcHRlciAqYm5hID0gKHN0cnVjdCBuZXRtYXBfYndyYXBfYWRhcHRl
ciAqKW5hOworCXN0cnVjdCBubV9iZGdfcG9sbGluZ19zdGF0ZSAqYnBzOworCisJaWYgKCFibmEt
Pm5hX3BvbGxpbmdfc3RhdGUpIHsKKwkJRCgiRVJST1IgYWRhcHRlciBpcyBub3QgaW4gcG9sbGlu
ZyBtb2RlIik7CisJCXJldHVybiBFRkFVTFQ7CisJfQorCWJwcyA9IGJuYS0+bmFfcG9sbGluZ19z
dGF0ZTsKKwlubV9iZGdfcG9sbGluZ19zdG9wX2RlbGV0ZV9rdGhyZWFkcyhibmEtPm5hX3BvbGxp
bmdfc3RhdGUpOworCWJwcy0+Y29uZmlndXJlZCA9IGZhbHNlOworCW5tX29zX2ZyZWUoYnBzKTsK
KwlibmEtPm5hX3BvbGxpbmdfc3RhdGUgPSBOVUxMOworCS8qIHJlZW5hYmxlIGludGVycnVwdCAq
LworCWlmIChibmEtPmh3bmEtPm5tX2ludHIpCisJCWJuYS0+aHduYS0+bm1faW50cihibmEtPmh3
bmEsIDEpOworCXJldHVybiAwOworfQogCiAvKiBDYWxsZWQgYnkgZWl0aGVyIHVzZXIncyBjb250
ZXh0IChuZXRtYXBfaW9jdGwoKSkKICAqIG9yIGV4dGVybmFsIGtlcm5lbCBtb2R1bGVzIChlLmcu
LCBPcGVudnN3aXRjaCkuCkBAIC04NDMsNyArMTE3OCw3IEBACiAJY2FzZSBORVRNQVBfQkRHX0xJ
U1Q6CiAJCS8qIHRoaXMgaXMgdXNlZCB0byBlbnVtZXJhdGUgYnJpZGdlcyBhbmQgcG9ydHMgKi8K
IAkJaWYgKG5hbWVsZW4pIHsgLyogbG9vayB1cCBpbmRleGVzIG9mIGJyaWRnZSBhbmQgcG9ydCAq
LwotCQkJaWYgKHN0cm5jbXAobmFtZSwgTk1fTkFNRSwgc3RybGVuKE5NX05BTUUpKSkgeworCQkJ
aWYgKHN0cm5jbXAobmFtZSwgTk1fQkRHX05BTUUsIHN0cmxlbihOTV9CREdfTkFNRSkpKSB7CiAJ
CQkJZXJyb3IgPSBFSU5WQUw7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC04NTUsNyArMTE5MCw5IEBA
CiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCWVycm9yID0gRU5PRU5UOworCQkJZXJyb3IgPSAwOwor
CQkJbm1yLT5ucl9hcmcxID0gYiAtIGJyaWRnZXM7IC8qIGJyaWRnZSBpbmRleCAqLworCQkJbm1y
LT5ucl9hcmcyID0gTk1fQkRHX05PUE9SVDsKIAkJCWZvciAoaiA9IDA7IGogPCBiLT5iZGdfYWN0
aXZlX3BvcnRzOyBqKyspIHsKIAkJCQlpID0gYi0+YmRnX3BvcnRfaW5kZXhbal07CiAJCQkJdnBu
YSA9IGItPmJkZ19wb3J0c1tpXTsKQEAgLTg2NywxMCArMTIwNCw3IEBACiAJCQkJICogdmlydHVh
bCBwb3J0IGFuZCBhIE5JQywgcmVzcGVjdGl2ZWx5CiAJCQkJICovCiAJCQkJaWYgKCFzdHJjbXAo
dnBuYS0+dXAubmFtZSwgbmFtZSkpIHsKLQkJCQkJLyogYnJpZGdlIGluZGV4ICovCi0JCQkJCW5t
ci0+bnJfYXJnMSA9IGIgLSBicmlkZ2VzOwogCQkJCQlubXItPm5yX2FyZzIgPSBpOyAvKiBwb3J0
IGluZGV4ICovCi0JCQkJCWVycm9yID0gMDsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQpAQCAt
OTM3LDEwICsxMjcxLDM0IEBACiAJCWVycm9yID0gbmV0bWFwX2dldF9iZGdfbmEobm1yLCAmbmEs
IDApOwogCQlpZiAobmEgJiYgIWVycm9yKSB7CiAJCQl2cG5hID0gKHN0cnVjdCBuZXRtYXBfdnBf
YWRhcHRlciAqKW5hOwotCQkJdnBuYS0+dmlydF9oZHJfbGVuID0gbm1yLT5ucl9hcmcxOwotCQkJ
aWYgKHZwbmEtPnZpcnRfaGRyX2xlbikKKwkJCW5hLT52aXJ0X2hkcl9sZW4gPSBubXItPm5yX2Fy
ZzE7CisJCQlpZiAobmEtPnZpcnRfaGRyX2xlbikgewogCQkJCXZwbmEtPm1mcyA9IE5FVE1BUF9C
VUZfU0laRShuYSk7Ci0JCQlEKCJVc2luZyB2bmV0X2hkcl9sZW4gJWQgZm9yICVwIiwgdnBuYS0+
dmlydF9oZHJfbGVuLCB2cG5hKTsKKwkJCX0KKwkJCUQoIlVzaW5nIHZuZXRfaGRyX2xlbiAlZCBm
b3IgJXAiLCBuYS0+dmlydF9oZHJfbGVuLCBuYSk7CisJCQluZXRtYXBfYWRhcHRlcl9wdXQobmEp
OworCQl9IGVsc2UgaWYgKCFuYSkgeworCQkJZXJyb3IgPSBFTlhJTzsKKwkJfQorCQlOTUdfVU5M
T0NLKCk7CisJCWJyZWFrOworCisJY2FzZSBORVRNQVBfQkRHX1BPTExJTkdfT046CisJY2FzZSBO
RVRNQVBfQkRHX1BPTExJTkdfT0ZGOgorCQlOTUdfTE9DSygpOworCQllcnJvciA9IG5ldG1hcF9n
ZXRfYmRnX25hKG5tciwgJm5hLCAwKTsKKwkJaWYgKG5hICYmICFlcnJvcikgeworCQkJaWYgKCFu
bV9pc19id3JhcChuYSkpIHsKKwkJCQllcnJvciA9IEVPUE5PVFNVUFA7CisJCQl9IGVsc2UgaWYg
KGNtZCA9PSBORVRNQVBfQkRHX1BPTExJTkdfT04pIHsKKwkJCQllcnJvciA9IG5tX2JkZ19jdGxf
cG9sbGluZ19zdGFydChubXIsIG5hKTsKKwkJCQlpZiAoIWVycm9yKQorCQkJCQluZXRtYXBfYWRh
cHRlcl9nZXQobmEpOworCQkJfSBlbHNlIHsKKwkJCQllcnJvciA9IG5tX2JkZ19jdGxfcG9sbGlu
Z19zdG9wKG5tciwgbmEpOworCQkJCWlmICghZXJyb3IpCisJCQkJCW5ldG1hcF9hZGFwdGVyX3B1
dChuYSk7CisJCQl9CiAJCQluZXRtYXBfYWRhcHRlcl9wdXQobmEpOwogCQl9CiAJCU5NR19VTkxP
Q0soKTsKQEAgLTEwOTcsMTAgKzE0NTUsMTIgQEAKIAkJCWZ0X2kgPSBubV9iZGdfZmx1c2goZnQs
IGZ0X2ksIG5hLCByaW5nX25yKTsKIAl9CiAJaWYgKGZyYWdzID4gMSkgewotCQlEKCJ0cnVuY2F0
ZSBpbmNvbXBsZXRlIGZyYWdtZW50IGF0ICVkICglZCBmcmFncykiLCBmdF9pLCBmcmFncyk7Ci0J
CS8vIGZ0X2kgPiAwLCBmdFtmdF9pLTFdLmZsYWdzIGhhcyBOU19NT1JFRlJBRwotCQlmdFtmdF9p
IC0gMV0uZnRfZnJhZ3MgJj0gfk5TX01PUkVGUkFHOwotCQlmdFtmdF9pIC0gZnJhZ3NdLmZ0X2Zy
YWdzID0gZnJhZ3MgLSAxOworCQkvKiBIZXJlIGZ0X2kgPiAwLCBmdFtmdF9pLTFdLmZsYWdzIGhh
cyBOU19NT1JFRlJBRywgYW5kIHdlCisJCSAqIGhhdmUgdG8gZml4IGZyYWdzIGNvdW50LiAqLwor
CQlmcmFncy0tOworCQlmdFtmdF9pIC0gMV0uZnRfZmxhZ3MgJj0gfk5TX01PUkVGUkFHOworCQlm
dFtmdF9pIC0gZnJhZ3NdLmZ0X2ZyYWdzID0gZnJhZ3M7CisJCUQoIlRydW5jYXRlIGluY29tcGxl
dGUgZnJhZ21lbnQgYXQgJWQgKCVkIGZyYWdzKSIsIGZ0X2ksIGZyYWdzKTsKIAl9CiAJaWYgKGZ0
X2kpCiAJCWZ0X2kgPSBubV9iZGdfZmx1c2goZnQsIGZ0X2ksIG5hLCByaW5nX25yKTsKQEAgLTEx
NTcsNiArMTUxNyw4IEBACiB7CiAJc3RydWN0IG5ldG1hcF92cF9hZGFwdGVyICp2cG5hID0KIAkJ
KHN0cnVjdCBuZXRtYXBfdnBfYWRhcHRlciopbmE7CisJZW51bSB0eHJ4IHQ7CisJaW50IGk7CiAK
IAkvKiBwZXJzaXN0ZW50IHBvcnRzIG1heSBiZSBwdXQgaW4gbmV0bWFwIG1vZGUKIAkgKiBiZWZv
cmUgYmVpbmcgYXR0YWNoZWQgdG8gYSBicmlkZ2UKQEAgLTExNjQsMTIgKzE1MjYsMzAgQEAKIAlp
ZiAodnBuYS0+bmFfYmRnKQogCQlCREdfV0xPQ0sodnBuYS0+bmFfYmRnKTsKIAlpZiAob25vZmYp
IHsKLQkJbmEtPm5hX2ZsYWdzIHw9IE5BRl9ORVRNQVBfT047CisJCWZvcl9yeF90eCh0KSB7CisJ
CQlmb3IgKGkgPSAwOyBpIDwgbm1hX2dldF9ucmluZ3MobmEsIHQpICsgMTsgaSsrKSB7CisJCQkJ
c3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcgPSAmTk1SKG5hLCB0KVtpXTsKKworCQkJCWlmIChu
bV9rcmluZ19wZW5kaW5nX29uKGtyaW5nKSkKKwkJCQkJa3JpbmctPm5yX21vZGUgPSBOS1JfTkVU
TUFQX09OOworCQkJfQorCQl9CisJCWlmIChuYS0+YWN0aXZlX2ZkcyA9PSAwKQorCQkJbmEtPm5h
X2ZsYWdzIHw9IE5BRl9ORVRNQVBfT047CiAJCSAvKiBYWFggb24gRnJlZUJTRCwgcGVyc2lzdGVu
dCBWQUxFIHBvcnRzIHNob3VsZCBhbHNvCiAJCSAqIHRvZ2dsZSBJRkNBUF9ORVRNQVAgaW4gbmEt
PmlmcCAoMjAxNC0wMy0xNikKIAkJICovCiAJfSBlbHNlIHsKLQkJbmEtPm5hX2ZsYWdzICY9IH5O
QUZfTkVUTUFQX09OOworCQlpZiAobmEtPmFjdGl2ZV9mZHMgPT0gMCkKKwkJCW5hLT5uYV9mbGFn
cyAmPSB+TkFGX05FVE1BUF9PTjsKKwkJZm9yX3J4X3R4KHQpIHsKKwkJCWZvciAoaSA9IDA7IGkg
PCBubWFfZ2V0X25yaW5ncyhuYSwgdCkgKyAxOyBpKyspIHsKKwkJCQlzdHJ1Y3QgbmV0bWFwX2ty
aW5nICprcmluZyA9ICZOTVIobmEsIHQpW2ldOworCisJCQkJaWYgKG5tX2tyaW5nX3BlbmRpbmdf
b2ZmKGtyaW5nKSkKKwkJCQkJa3JpbmctPm5yX21vZGUgPSBOS1JfTkVUTUFQX09GRjsKKwkJCX0K
KwkJfQogCX0KIAlpZiAodnBuYS0+bmFfYmRnKQogCQlCREdfV1VOTE9DSyh2cG5hLT5uYV9iZGcp
OwpAQCAtMTE5MywxMyArMTU3MywxNCBAQAogCXVpbnQzMl90IHNoLCBkaDsKIAl1X2ludCBkc3Qs
IG15c3JjID0gbmEtPmJkZ19wb3J0OwogCXVpbnQ2NF90IHNtYWMsIGRtYWM7CisJdWludDhfdCBp
bmRidWZbMTJdOwogCiAJLyogc2FmZXR5IGNoZWNrLCB1bmZvcnR1bmF0ZWx5IHdlIGhhdmUgbWFu
eSBjYXNlcyAqLwotCWlmIChidWZfbGVuID49IDE0ICsgbmEtPnZpcnRfaGRyX2xlbikgeworCWlm
IChidWZfbGVuID49IDE0ICsgbmEtPnVwLnZpcnRfaGRyX2xlbikgewogCQkvKiB2aXJ0aGRyICsg
bWFjX2hkciBpbiB0aGUgc2FtZSBzbG90ICovCi0JCWJ1ZiArPSBuYS0+dmlydF9oZHJfbGVuOwot
CQlidWZfbGVuIC09IG5hLT52aXJ0X2hkcl9sZW47Ci0JfSBlbHNlIGlmIChidWZfbGVuID09IG5h
LT52aXJ0X2hkcl9sZW4gJiYgZnQtPmZ0X2ZsYWdzICYgTlNfTU9SRUZSQUcpIHsKKwkJYnVmICs9
IG5hLT51cC52aXJ0X2hkcl9sZW47CisJCWJ1Zl9sZW4gLT0gbmEtPnVwLnZpcnRfaGRyX2xlbjsK
Kwl9IGVsc2UgaWYgKGJ1Zl9sZW4gPT0gbmEtPnVwLnZpcnRfaGRyX2xlbiAmJiBmdC0+ZnRfZmxh
Z3MgJiBOU19NT1JFRlJBRykgewogCQkvKiBvbmx5IGhlYWRlciBpbiBmaXJzdCBmcmFnbWVudCAq
LwogCQlmdCsrOwogCQlidWYgPSBmdC0+ZnRfYnVmOwpAQCAtMTIwOCw2ICsxNTg5LDE0IEBACiAJ
CVJEKDUsICJpbnZhbGlkIGJ1ZiBmb3JtYXQsIGxlbmd0aCAlZCIsIGJ1Zl9sZW4pOwogCQlyZXR1
cm4gTk1fQkRHX05PUE9SVDsKIAl9CisKKwlpZiAoZnQtPmZ0X2ZsYWdzICYgTlNfSU5ESVJFQ1Qp
IHsKKwkJaWYgKGNvcHlpbihidWYsIGluZGJ1Ziwgc2l6ZW9mKGluZGJ1ZikpKSB7CisJCQlyZXR1
cm4gTk1fQkRHX05PUE9SVDsKKwkJfQorCQlidWYgPSBpbmRidWY7CisJfQorCiAJZG1hYyA9IGxl
NjR0b2goKih1aW50NjRfdCAqKShidWYpKSAmIDB4ZmZmZmZmZmZmZmZmOwogCXNtYWMgPSBsZTY0
dG9oKCoodWludDY0X3QgKikoYnVmICsgNCkpOwogCXNtYWMgPj49IDE2OwpAQCAtMTMyMSw3ICsx
NzEwLDcgQEAKIAlzdHJ1Y3Qgbm1fYmRnX3EgKmRzdF9lbnRzLCAqYnJkZHN0OwogCXVpbnQxNl90
IG51bV9kc3RzID0gMCwgKmRzdHM7CiAJc3RydWN0IG5tX2JyaWRnZSAqYiA9IG5hLT5uYV9iZGc7
Ci0JdV9pbnQgaSwgaiwgbWUgPSBuYS0+YmRnX3BvcnQ7CisJdV9pbnQgaSwgbWUgPSBuYS0+YmRn
X3BvcnQ7CiAKIAkvKgogCSAqIFRoZSB3b3JrIGFyZWEgKHBvaW50ZWQgYnkgZnQpIGlzIGZvbGxv
d2VkIGJ5IGFuIGFycmF5IG9mCkBAIC0xMzQxLDcgKzE3MzAsNyBAQAogCQlORCgic2xvdCAlZCBm
cmFncyAlZCIsIGksIGZ0W2ldLmZ0X2ZyYWdzKTsKIAkJLyogRHJvcCB0aGUgcGFja2V0IGlmIHRo
ZSB2aXJ0aW8tbmV0IGhlYWRlciBpcyBub3QgaW50byB0aGUgZmlyc3QKIAkJICAgZnJhZ21lbnQg
bm9yIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiB0aGUgc2Vjb25kLiAqLwotCQlpZiAodW5saWtl
bHkobmEtPnZpcnRfaGRyX2xlbiA+IGZ0W2ldLmZ0X2xlbikpCisJCWlmICh1bmxpa2VseShuYS0+
dXAudmlydF9oZHJfbGVuID4gZnRbaV0uZnRfbGVuKSkKIAkJCWNvbnRpbnVlOwogCQlkc3RfcG9y
dCA9IGItPmJkZ19vcHMubG9va3VwKCZmdFtpXSwgJmRzdF9yaW5nLCBuYSk7CiAJCWlmIChuZXRt
YXBfdmVyYm9zZSA+IDI1NSkKQEAgLTEzODIsNiArMTc3MSw3IEBACiAJICovCiAJYnJkZHN0ID0g
ZHN0X2VudHMgKyBOTV9CREdfQlJPQURDQVNUICogTk1fQkRHX01BWFJJTkdTOwogCWlmIChicmRk
c3QtPmJxX2hlYWQgIT0gTk1fRlRfTlVMTCkgeworCQl1X2ludCBqOwogCQlmb3IgKGogPSAwOyBs
aWtlbHkoaiA8IGItPmJkZ19hY3RpdmVfcG9ydHMpOyBqKyspIHsKIAkJCXVpbnQxNl90IGRfaTsK
IAkJCWkgPSBiLT5iZGdfcG9ydF9pbmRleFtqXTsKQEAgLTE0NDEsOCArMTgzMSw5IEBACiAJCSAq
LwogCQluZWVkZWQgPSBkLT5icV9sZW4gKyBicmRkc3QtPmJxX2xlbjsKIAotCQlpZiAodW5saWtl
bHkoZHN0X25hLT52aXJ0X2hkcl9sZW4gIT0gbmEtPnZpcnRfaGRyX2xlbikpIHsKLQkJCVJEKDMs
ICJ2aXJ0X2hkcl9taXNtYXRjaCwgc3JjICVkIGRzdCAlZCIsIG5hLT52aXJ0X2hkcl9sZW4sIGRz
dF9uYS0+dmlydF9oZHJfbGVuKTsKKwkJaWYgKHVubGlrZWx5KGRzdF9uYS0+dXAudmlydF9oZHJf
bGVuICE9IG5hLT51cC52aXJ0X2hkcl9sZW4pKSB7CisJCQlSRCgzLCAidmlydF9oZHJfbWlzbWF0
Y2gsIHNyYyAlZCBkc3QgJWQiLCBuYS0+dXAudmlydF9oZHJfbGVuLAorCQkJICAgICAgZHN0X25h
LT51cC52aXJ0X2hkcl9sZW4pOwogCQkJLyogVGhlcmUgaXMgYSB2aXJ0aW8tbmV0IGhlYWRlci9v
ZmZsb2FkaW5ncyBtaXNtYXRjaCBiZXR3ZWVuCiAJCQkgKiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9u
LiBUaGUgc2xvd2VyIG1pc21hdGNoIGRhdGFwYXRoIHdpbGwKIAkJCSAqIGJlIHVzZWQgdG8gY29w
ZSB3aXRoIGFsbCB0aGUgbWlzbWF0Y2hlcy4KQEAgLTE3NjgsMTAgKzIxNTksMTAgQEAKIHsKIAlz
dHJ1Y3QgbmV0bWFwX3ZwX2FkYXB0ZXIgKnZwbmE7CiAJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpu
YTsKLQlpbnQgZXJyb3I7CisJaW50IGVycm9yID0gMDsKIAl1X2ludCBucGlwZXMgPSAwOwogCi0J
dnBuYSA9IG1hbGxvYyhzaXplb2YoKnZwbmEpLCBNX0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8p
OworCXZwbmEgPSBubV9vc19tYWxsb2Moc2l6ZW9mKCp2cG5hKSk7CiAJaWYgKHZwbmEgPT0gTlVM
TCkKIAkJcmV0dXJuIEVOT01FTTsKIApAQCAtMTgwMyw3ICsyMTk0LDYgQEAKIAlubV9ib3VuZF92
YXIoJm5tci0+bnJfYXJnMywgMCwgMCwKIAkJCTEyOCpOTV9CREdfTUFYU0xPVFMsIE5VTEwpOwog
CW5hLT5udW1fcnhfZGVzYyA9IG5tci0+bnJfcnhfc2xvdHM7Ci0JdnBuYS0+dmlydF9oZHJfbGVu
ID0gMDsKIAl2cG5hLT5tZnMgPSAxNTE0OwogCXZwbmEtPmxhc3Rfc21hYyA9IH4wbGx1OwogCS8q
aWYgKHZwbmEtPm1mcyA+IG5ldG1hcF9idWZfc2l6ZSkgIFRPRE8gbmV0bWFwX2J1Zl9zaXplIGlz
IHplcm8/PwpAQCAtMTgyMyw3ICsyMjEzLDEwIEBACiAJbmEtPm5tX2tyaW5nc19jcmVhdGUgPSBu
ZXRtYXBfdnBfa3JpbmdzX2NyZWF0ZTsKIAluYS0+bm1fa3JpbmdzX2RlbGV0ZSA9IG5ldG1hcF92
cF9rcmluZ3NfZGVsZXRlOwogCW5hLT5ubV9kdG9yID0gbmV0bWFwX3ZwX2R0b3I7Ci0JbmEtPm5t
X21lbSA9IG5ldG1hcF9tZW1fcHJpdmF0ZV9uZXcobmEtPm5hbWUsCisJRCgibnJfYXJnMiAlZCIs
IG5tci0+bnJfYXJnMik7CisJbmEtPm5tX21lbSA9IChubXItPm5yX2FyZzIgPiAwKSA/CisJCW5l
dG1hcF9tZW1fZmluZChubXItPm5yX2FyZzIpOgorCQluZXRtYXBfbWVtX3ByaXZhdGVfbmV3KAog
CQkJbmEtPm51bV90eF9yaW5ncywgbmEtPm51bV90eF9kZXNjLAogCQkJbmEtPm51bV9yeF9yaW5n
cywgbmEtPm51bV9yeF9kZXNjLAogCQkJbm1yLT5ucl9hcmczLCBucGlwZXMsICZlcnJvcik7CkBA
IC0xODM5LDggKzIyMzIsOCBAQAogCiBlcnI6CiAJaWYgKG5hLT5ubV9tZW0gIT0gTlVMTCkKLQkJ
bmV0bWFwX21lbV9kZWxldGUobmEtPm5tX21lbSk7Ci0JZnJlZSh2cG5hLCBNX0RFVkJVRik7CisJ
CW5ldG1hcF9tZW1fcHV0KG5hLT5ubV9tZW0pOworCW5tX29zX2ZyZWUodnBuYSk7CiAJcmV0dXJu
IGVycm9yOwogfQogCkBAIC0xODgwLDE5ICsyMjczLDE5IEBACiB7CiAJc3RydWN0IG5ldG1hcF9i
d3JhcF9hZGFwdGVyICpibmEgPSAoc3RydWN0IG5ldG1hcF9id3JhcF9hZGFwdGVyKiluYTsKIAlz
dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKmh3bmEgPSBibmEtPmh3bmE7CisJc3RydWN0IG5tX2JyaWRn
ZSAqYiA9IGJuYS0+dXAubmFfYmRnLAorCQkqYmggPSBibmEtPmhvc3QubmFfYmRnOworCisJbmV0
bWFwX21lbV9wdXQoYm5hLT5ob3N0LnVwLm5tX21lbSk7CisKKwlpZiAoYikgeworCQluZXRtYXBf
YmRnX2RldGFjaF9jb21tb24oYiwgYm5hLT51cC5iZGdfcG9ydCwKKwkJCSAgICAoYmggPyBibmEt
Pmhvc3QuYmRnX3BvcnQgOiAtMSkpOworCX0KIAogCU5EKCJuYSAlcCIsIG5hKTsKLQkvKiBkcm9w
IHJlZmVyZW5jZSB0byBod25hLT5pZnAuCi0JICogSWYgd2UgZG9uJ3QgZG8gdGhpcywgbmV0bWFw
X2RldGFjaF9jb21tb24obmEpCi0JICogd2lsbCB0aGluayBpdCBoYXMgc2V0IE5BKG5hLT5pZnAp
IHRvIE5VTEwKLQkgKi8KIAluYS0+aWZwID0gTlVMTDsKLQkvKiBmb3Igc2FmZXR5LCBhbHNvIGRy
b3AgdGhlIHBvc3NpYmxlIHJlZmVyZW5jZQotCSAqIGluIHRoZSBob3N0bmEKLQkgKi8KIAlibmEt
Pmhvc3QudXAuaWZwID0gTlVMTDsKLQotCWh3bmEtPm5tX21lbSA9IGJuYS0+c2F2ZV9ubWQ7CiAJ
aHduYS0+bmFfcHJpdmF0ZSA9IE5VTEw7CiAJaHduYS0+bmFfdnAgPSBod25hLT5uYV9ob3N0dnAg
PSBOVUxMOwogCWh3bmEtPm5hX2ZsYWdzICY9IH5OQUZfQlVTWTsKQEAgLTE5MTYsNyArMjMwOSw4
IEBACiAgKiAocGFydCBhcyBhIHJlY2VpdmUgcmluZywgcGFydCBhcyBhIHRyYW5zbWl0IHJpbmcp
LgogICoKICAqIGNhbGxiYWNrIHRoYXQgb3ZlcndyaXRlcyB0aGUgaHduYSBub3RpZnkgY2FsbGJh
Y2suCi0gKiBQYWNrZXRzIGNvbWUgZnJvbSB0aGUgb3V0c2lkZSBvciBmcm9tIHRoZSBob3N0IHN0
YWNrIGFuZCBhcmUgcHV0IG9uIGFuIGh3bmEgcnggcmluZy4KKyAqIFBhY2tldHMgY29tZSBmcm9t
IHRoZSBvdXRzaWRlIG9yIGZyb20gdGhlIGhvc3Qgc3RhY2sgYW5kIGFyZSBwdXQgb24gYW4KKyAq
IGh3bmEgcnggcmluZy4KICAqIFRoZSBicmlkZ2Ugd3JhcHBlciB0aGVuIHNlbmRzIHRoZSBwYWNr
ZXRzIHRocm91Z2ggdGhlIGJyaWRnZS4KICAqLwogc3RhdGljIGludApAQCAtMTkyNywxOSArMjMy
MSwxOCBAQAogCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmJrcmluZzsKIAlzdHJ1Y3QgbmV0bWFwX3Zw
X2FkYXB0ZXIgKnZwbmEgPSAmYm5hLT51cDsKIAl1X2ludCByaW5nX25yID0ga3JpbmctPnJpbmdf
aWQ7Ci0JaW50IGVycm9yID0gMDsKKwlpbnQgcmV0ID0gTk1fSVJRX0NPTVBMRVRFRDsKKwlpbnQg
ZXJyb3I7CiAKIAlpZiAobmV0bWFwX3ZlcmJvc2UpCiAJICAgIEQoIiVzICVzIDB4JXgiLCBuYS0+
bmFtZSwga3JpbmctPm5hbWUsIGZsYWdzKTsKIAotCWlmICghbm1fbmV0bWFwX29uKG5hKSkKLQkJ
cmV0dXJuIDA7Ci0KIAlia3JpbmcgPSAmdnBuYS0+dXAudHhfcmluZ3NbcmluZ19ucl07CiAKIAkv
KiBtYWtlIHN1cmUgdGhlIHJpbmcgaXMgbm90IGRpc2FibGVkICovCi0JaWYgKG5tX2tyX3RyeWdl
dChrcmluZykpCi0JCXJldHVybiAwOworCWlmIChubV9rcl90cnlnZXQoa3JpbmcsIDAgLyogY2Fu
J3Qgc2xlZXAgKi8sIE5VTEwpKSB7CisJCXJldHVybiBFSU87CisJfQogCiAJaWYgKG5ldG1hcF92
ZXJib3NlKQogCSAgICBEKCIlcyBoZWFkICVkIGN1ciAlZCB0YWlsICVkIiwgIG5hLT5uYW1lLApA
QCAtMTk1MSw5ICsyMzQ0LDEwIEBACiAJZXJyb3IgPSBrcmluZy0+bm1fc3luYyhrcmluZywgMCk7
CiAJaWYgKGVycm9yKQogCQlnb3RvIHB1dF9vdXQ7Ci0JaWYgKGtyaW5nLT5ucl9od2N1ciA9PSBr
cmluZy0+bnJfaHd0YWlsICYmIG5ldG1hcF92ZXJib3NlKSB7Ci0JCUQoImhvdyBzdHJhbmdlLCBp
bnRlcnJ1cHQgd2l0aCBubyBwYWNrZXRzIG9uICVzIiwKLQkJCW5hLT5uYW1lKTsKKwlpZiAoa3Jp
bmctPm5yX2h3Y3VyID09IGtyaW5nLT5ucl9od3RhaWwpIHsKKwkJaWYgKG5ldG1hcF92ZXJib3Nl
KQorCQkJRCgiaG93IHN0cmFuZ2UsIGludGVycnVwdCB3aXRoIG5vIHBhY2tldHMgb24gJXMiLAor
CQkJICAgIG5hLT5uYW1lKTsKIAkJZ290byBwdXRfb3V0OwogCX0KIApAQCAtMTk3MCwyOCArMjM2
NCwzMiBAQAogCS8qIGFub3RoZXIgY2FsbCB0byBhY3R1YWxseSByZWxlYXNlIHRoZSBidWZmZXJz
ICovCiAJZXJyb3IgPSBrcmluZy0+bm1fc3luYyhrcmluZywgMCk7CiAKKwkvKiBUaGUgc2Vjb25k
IHJ4c3luYyBtYXkgaGF2ZSBmdXJ0aGVyIGFkdmFuY2VkIGh3dGFpbC4gSWYgdGhpcyBoYXBwZW5z
LAorCSAqICByZXR1cm4gTk1fSVJRX1JFU0NIRUQsIG90aGVyd2lzZSBqdXN0IHJldHVybiBOTV9J
UlFfQ09NUExFVEVELiAqLworCWlmIChrcmluZy0+cmN1ciAhPSBrcmluZy0+bnJfaHd0YWlsKSB7
CisJCXJldCA9IE5NX0lSUV9SRVNDSEVEOworCX0KIHB1dF9vdXQ6CiAJbm1fa3JfcHV0KGtyaW5n
KTsKLQlyZXR1cm4gZXJyb3I7CisKKwlyZXR1cm4gZXJyb3IgPyBlcnJvciA6IHJldDsKIH0KIAog
CiAvKiBubV9yZWdpc3RlciBjYWxsYmFjayBmb3IgYndyYXAgKi8KIHN0YXRpYyBpbnQKLW5ldG1h
cF9id3JhcF9yZWdpc3RlcihzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCBpbnQgb25vZmYpCitu
ZXRtYXBfYndyYXBfcmVnKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIGludCBvbm9mZikKIHsK
IAlzdHJ1Y3QgbmV0bWFwX2J3cmFwX2FkYXB0ZXIgKmJuYSA9CiAJCShzdHJ1Y3QgbmV0bWFwX2J3
cmFwX2FkYXB0ZXIgKiluYTsKIAlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKmh3bmEgPSBibmEtPmh3
bmE7CiAJc3RydWN0IG5ldG1hcF92cF9hZGFwdGVyICpob3N0bmEgPSAmYm5hLT5ob3N0OwotCWlu
dCBlcnJvcjsKKwlpbnQgZXJyb3IsIGk7CiAJZW51bSB0eHJ4IHQ7CiAKIAlORCgiJXMgJXMiLCBu
YS0+bmFtZSwgb25vZmYgPyAib24iIDogIm9mZiIpOwogCiAJaWYgKG9ub2ZmKSB7Ci0JCWludCBp
OwotCiAJCS8qIG5ldG1hcF9kb19yZWdpZiBoYXMgYmVlbiBjYWxsZWQgb24gdGhlIGJ3cmFwIG5h
LgogCQkgKiBXZSBuZWVkIHRvIHBhc3MgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZQogCQkgKiBt
ZW1vcnkgYWxsb2NhdG9yIGRvd24gdG8gdGhlIGh3bmEgYmVmb3JlCkBAIC0yMDEwLDE2ICsyNDA4
LDMyIEBACiAJCS8qIGNyb3NzLWxpbmsgdGhlIG5ldG1hcCByaW5ncwogCQkgKiBUaGUgb3JpZ2lu
YWwgbnVtYmVyIG9mIHJpbmdzIGNvbWVzIGZyb20gaHduYSwKIAkJICogcnggcmluZ3Mgb24gb25l
IHNpZGUgZXF1YWxzIHR4IHJpbmdzIG9uIHRoZSBvdGhlci4KLQkJICogV2UgbmVlZCB0byBkbyB0
aGlzIG5vdywgYWZ0ZXIgdGhlIGluaXRpYWxpemF0aW9uCi0JCSAqIG9mIHRoZSBrcmluZy0+cmlu
ZyBwb2ludGVycwogCQkgKi8KIAkJZm9yX3J4X3R4KHQpIHsKLQkJCWVudW0gdHhyeCByPSBubV90
eHJ4X3N3YXAodCk7IC8qIHN3YXAgTlJfVFggPC0+IE5SX1JYICovCi0JCQlmb3IgKGkgPSAwOyBp
IDwgbm1hX2dldF9ucmluZ3MobmEsIHIpICsgMTsgaSsrKSB7Ci0JCQkJTk1SKGh3bmEsIHQpW2ld
Lm5rcl9udW1fc2xvdHMgPSBOTVIobmEsIHIpW2ldLm5rcl9udW1fc2xvdHM7Ci0JCQkJTk1SKGh3
bmEsIHQpW2ldLnJpbmcgPSBOTVIobmEsIHIpW2ldLnJpbmc7CisJCQllbnVtIHR4cnggciA9IG5t
X3R4cnhfc3dhcCh0KTsgLyogc3dhcCBOUl9UWCA8LT4gTlJfUlggKi8KKwkJCWZvciAoaSA9IDA7
IGkgPCBubWFfZ2V0X25yaW5ncyhod25hLCByKSArIDE7IGkrKykgeworCQkJCU5NUihod25hLCBy
KVtpXS5yaW5nID0gTk1SKG5hLCB0KVtpXS5yaW5nOwogCQkJfQogCQl9CisKKwkJaWYgKG5hLT5u
YV9mbGFncyAmIE5BRl9IT1NUX1JJTkdTKSB7CisJCQlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKmhu
YSA9ICZob3N0bmEtPnVwOworCQkJLyogdGhlIGhvc3RuYSByaW5ncyBhcmUgdGhlIGhvc3Qgcmlu
Z3Mgb2YgdGhlIGJ3cmFwLgorCQkJICogVGhlIGNvcnJlc3BvbmRpbmcga3JpbmdzIG11c3QgcG9p
bnQgYmFjayB0byB0aGUKKwkJCSAqIGhvc3RuYQorCQkJICovCisJCQlobmEtPnR4X3JpbmdzID0g
Jm5hLT50eF9yaW5nc1tuYS0+bnVtX3R4X3JpbmdzXTsKKwkJCWhuYS0+dHhfcmluZ3NbMF0ubmEg
PSBobmE7CisJCQlobmEtPnJ4X3JpbmdzID0gJm5hLT5yeF9yaW5nc1tuYS0+bnVtX3J4X3Jpbmdz
XTsKKwkJCWhuYS0+cnhfcmluZ3NbMF0ubmEgPSBobmE7CisJCX0KKwl9CisKKwkvKiBwYXNzIGRv
d24gdGhlIHBlbmRpbmcgcmluZyBzdGF0ZSBpbmZvcm1hdGlvbiAqLworCWZvcl9yeF90eCh0KSB7
CisJCWZvciAoaSA9IDA7IGkgPCBubWFfZ2V0X25yaW5ncyhuYSwgdCkgKyAxOyBpKyspCisJCQlO
TVIoaHduYSwgdClbaV0ubnJfcGVuZGluZ19tb2RlID0KKwkJCQlOTVIobmEsIHQpW2ldLm5yX3Bl
bmRpbmdfbW9kZTsKIAl9CiAKIAkvKiBmb3J3YXJkIHRoZSByZXF1ZXN0IHRvIHRoZSBod25hICov
CkBAIC0yMDI3LDYgKzI0NDEsMTMgQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAor
CS8qIGNvcHkgdXAgdGhlIGN1cnJlbnQgcmluZyBzdGF0ZSBpbmZvcm1hdGlvbiAqLworCWZvcl9y
eF90eCh0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBubWFfZ2V0X25yaW5ncyhuYSwgdCkgKyAxOyBp
KyspCisJCQlOTVIobmEsIHQpW2ldLm5yX21vZGUgPQorCQkJCU5NUihod25hLCB0KVtpXS5ucl9t
b2RlOworCX0KKwogCS8qIGltcGVyc29uYXRlIGEgbmV0bWFwX3ZwX2FkYXB0ZXIgKi8KIAluZXRt
YXBfdnBfcmVnKG5hLCBvbm9mZik7CiAJaWYgKGhvc3RuYS0+bmFfYmRnKQpAQCAtMjA0Niw4ICsy
NDY3LDE0IEBACiAJCQkvKiBhbHNvIGludGVyY2VwdCB0aGUgaG9zdCByaW5nIG5vdGlmeSAqLwog
CQkJaHduYS0+cnhfcmluZ3NbaV0ubm1fbm90aWZ5ID0gbmV0bWFwX2J3cmFwX2ludHJfbm90aWZ5
OwogCQl9CisJCWlmIChuYS0+YWN0aXZlX2ZkcyA9PSAwKQorCQkJbmEtPm5hX2ZsYWdzIHw9IE5B
Rl9ORVRNQVBfT047CiAJfSBlbHNlIHsKIAkJdV9pbnQgaTsKKworCQlpZiAobmEtPmFjdGl2ZV9m
ZHMgPT0gMCkKKwkJCW5hLT5uYV9mbGFncyAmPSB+TkFGX05FVE1BUF9PTjsKKwogCQkvKiByZXNl
dCBhbGwgbm90aWZ5IGNhbGxiYWNrcyAoaW5jbHVkaW5nIGhvc3QgcmluZykgKi8KIAkJZm9yIChp
ID0gMDsgaSA8PSBod25hLT5udW1fcnhfcmluZ3M7IGkrKykgewogCQkJaHduYS0+cnhfcmluZ3Nb
aV0ubm1fbm90aWZ5ID0gaHduYS0+cnhfcmluZ3NbaV0uc2F2ZV9ub3RpZnk7CkBAIC0yMDg5LDgg
KzI1MTYsOCBAQAogCXN0cnVjdCBuZXRtYXBfYndyYXBfYWRhcHRlciAqYm5hID0KIAkJKHN0cnVj
dCBuZXRtYXBfYndyYXBfYWRhcHRlciAqKW5hOwogCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqaHdu
YSA9IGJuYS0+aHduYTsKLQlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKmhvc3RuYSA9ICZibmEtPmhv
c3QudXA7Ci0JaW50IGVycm9yOworCWludCBpLCBlcnJvciA9IDA7CisJZW51bSB0eHJ4IHQ7CiAK
IAlORCgiJXMiLCBuYS0+bmFtZSk7CiAKQEAgLTIxMDIsMjYgKzI1MjksMjMgQEAKIAkvKiBhbHNv
IGNyZWF0ZSB0aGUgaHduYSBrcmluZ3MgKi8KIAllcnJvciA9IGh3bmEtPm5tX2tyaW5nc19jcmVh
dGUoaHduYSk7CiAJaWYgKGVycm9yKSB7Ci0JCW5ldG1hcF92cF9rcmluZ3NfZGVsZXRlKG5hKTsK
LQkJcmV0dXJuIGVycm9yOworCQlnb3RvIGVycl9kZWxfdnBfcmluZ3M7CiAJfQotCS8qIHRoZSBj
b25uZWN0aW9uIGJldHdlZW4gdGhlIGJ3cmFwIGtyaW5ncyBhbmQgdGhlIGh3bmEga3JpbmdzCi0J
ICogd2lsbCBiZSBwZXJmb21lZCBsYXRlciwgaW4gdGhlIG5tX3JlZ2lzdGVyIGNhbGxiYWNrLCBz
aW5jZQotCSAqIG5vdyB0aGUga3JpbmctPnJpbmcgcG9pbnRlcnMgaGF2ZSBub3QgYmVlbiBpbml0
aWFsaXplZCB5ZXQKLQkgKi8KIAotCWlmIChuYS0+bmFfZmxhZ3MgJiBOQUZfSE9TVF9SSU5HUykg
ewotCQkvKiB0aGUgaG9zdG5hIHJpbmdzIGFyZSB0aGUgaG9zdCByaW5ncyBvZiB0aGUgYndyYXAu
Ci0JCSAqIFRoZSBjb3JyZXNwb25kaW5nIGtyaW5ncyBtdXN0IHBvaW50IGJhY2sgdG8gdGhlCi0J
CSAqIGhvc3RuYQotCQkgKi8KLQkJaG9zdG5hLT50eF9yaW5ncyA9ICZuYS0+dHhfcmluZ3NbbmEt
Pm51bV90eF9yaW5nc107Ci0JCWhvc3RuYS0+dHhfcmluZ3NbMF0ubmEgPSBob3N0bmE7Ci0JCWhv
c3RuYS0+cnhfcmluZ3MgPSAmbmEtPnJ4X3JpbmdzW25hLT5udW1fcnhfcmluZ3NdOwotCQlob3N0
bmEtPnJ4X3JpbmdzWzBdLm5hID0gaG9zdG5hOworCS8qIGdldCBlYWNoIHJpbmcgc2xvdCBudW1i
ZXIgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBod25hIHJpbmcgKi8KKwlmb3JfcnhfdHgodCkgewor
CQllbnVtIHR4cnggciA9IG5tX3R4cnhfc3dhcCh0KTsgLyogc3dhcCBOUl9UWCA8LT4gTlJfUlgg
Ki8KKwkJZm9yIChpID0gMDsgaSA8IG5tYV9nZXRfbnJpbmdzKGh3bmEsIHIpICsgMTsgaSsrKSB7
CisJCQlOTVIobmEsIHQpW2ldLm5rcl9udW1fc2xvdHMgPSBOTVIoaHduYSwgcilbaV0ubmtyX251
bV9zbG90czsKKwkJfQogCX0KIAogCXJldHVybiAwOworCitlcnJfZGVsX3ZwX3JpbmdzOgorCW5l
dG1hcF92cF9rcmluZ3NfZGVsZXRlKG5hKTsKKworCXJldHVybiBlcnJvcjsKIH0KIAogCkBAIC0y
MTQ5LDE5ICsyNTczLDE4IEBACiAJdV9pbnQgcmluZ19uID0ga3JpbmctPnJpbmdfaWQ7CiAJdV9p
bnQgbGltID0ga3JpbmctPm5rcl9udW1fc2xvdHMgLSAxOwogCXN0cnVjdCBuZXRtYXBfa3Jpbmcg
Kmh3X2tyaW5nOwotCWludCBlcnJvciA9IDA7CisJaW50IGVycm9yOwogCi0JTkQoIiVzOiBuYSAl
cyBod25hICVzIiwgCisJTkQoIiVzOiBuYSAlcyBod25hICVzIiwKIAkJCShrcmluZyA/IGtyaW5n
LT5uYW1lIDogIk5VTEwhIiksCiAJCQkobmEgPyBuYS0+bmFtZSA6ICJOVUxMISIpLAogCQkJKGh3
bmEgPyBod25hLT5uYW1lIDogIk5VTEwhIikpOwogCWh3X2tyaW5nID0gJmh3bmEtPnR4X3Jpbmdz
W3Jpbmdfbl07CiAKLQlpZiAobm1fa3JfdHJ5Z2V0KGh3X2tyaW5nKSkKLQkJcmV0dXJuIDA7CisJ
aWYgKG5tX2tyX3RyeWdldChod19rcmluZywgMCwgTlVMTCkpIHsKKwkJcmV0dXJuIEVOWElPOwor
CX0KIAotCWlmICghbm1fbmV0bWFwX29uKGh3bmEpKQotCQlyZXR1cm4gMDsKIAkvKiBmaXJzdCBz
dGVwOiBzaW11bGF0ZSBhIHVzZXIgd2FrZXVwIG9uIHRoZSByeCByaW5nICovCiAJbmV0bWFwX3Zw
X3J4c3luYyhrcmluZywgZmxhZ3MpOwogCU5EKCIlc1slZF0gUFJFIHJ4KGMlM2QgdCUzZCBsJTNk
KSByaW5nKGglM2QgYyUzZCB0JTNkKSB0eChjJTNkIGh0JTNkIHQlM2QpIiwKQEAgLTIxNzUsNyAr
MjU5OCw3IEBACiAJaHdfa3JpbmctPnJoZWFkID0gaHdfa3JpbmctPnJjdXIgPSBrcmluZy0+bnJf
aHd0YWlsOwogCWVycm9yID0gaHdfa3JpbmctPm5tX3N5bmMoaHdfa3JpbmcsIGZsYWdzKTsKIAlp
ZiAoZXJyb3IpCi0JCWdvdG8gb3V0OworCQlnb3RvIHB1dF9vdXQ7CiAKIAkvKiB0aGlyZCBzdGVw
OiBub3cgd2UgYXJlIGJhY2sgdGhlIHJ4IHJpbmcgKi8KIAkvKiBjbGFpbSBvd25lcnNoaXAgb24g
YWxsIGh3IG93bmVkIGJ1ZnMgKi8KQEAgLTIxODgsOSArMjYxMSwxMCBAQAogCQlrcmluZy0+bnJf
aHdjdXIsIGtyaW5nLT5ucl9od3RhaWwsIGtyaW5nLT5ua3JfaHdsZWFzZSwKIAkJcmluZy0+aGVh
ZCwgcmluZy0+Y3VyLCByaW5nLT50YWlsLAogCQlod19rcmluZy0+bnJfaHdjdXIsIGh3X2tyaW5n
LT5ucl9od3RhaWwsIGh3X2tyaW5nLT5ydGFpbCk7Ci1vdXQ6CitwdXRfb3V0OgogCW5tX2tyX3B1
dChod19rcmluZyk7Ci0JcmV0dXJuIGVycm9yOworCisJcmV0dXJuIGVycm9yID8gZXJyb3IgOiBO
TV9JUlFfQ09NUExFVEVEOwogfQogCiAKQEAgLTIyMTcsNDQgKzI2NDEsMjMgQEAKIAkJCS8qIG5v
dGhpbmcgdG8gZG8gKi8KIAkJCXJldHVybiAwOwogCQl9Ci0JCW5wcml2ID0gbWFsbG9jKHNpemVv
ZigqbnByaXYpLCBNX0RFVkJVRiwgTV9OT1dBSVR8TV9aRVJPKTsKKwkJbnByaXYgPSBuZXRtYXBf
cHJpdl9uZXcoKTsKIAkJaWYgKG5wcml2ID09IE5VTEwpCiAJCQlyZXR1cm4gRU5PTUVNOwotCQll
cnJvciA9IG5ldG1hcF9kb19yZWdpZihucHJpdiwgbmEsIG5tci0+bnJfcmluZ2lkLCBubXItPm5y
X2ZsYWdzKTsKKwkJbnByaXYtPm5wX2lmcCA9IG5hLT5pZnA7IC8qIGxldCB0aGUgcHJpdiBkZXN0
cnVjdG9yIHJlbGVhc2UgdGhlIHJlZiAqLworCQllcnJvciA9IG5ldG1hcF9kb19yZWdpZihucHJp
diwgbmEsIDAsIE5SX1JFR19OSUNfU1cpOwogCQlpZiAoZXJyb3IpIHsKLQkJCWJ6ZXJvKG5wcml2
LCBzaXplb2YoKm5wcml2KSk7Ci0JCQlmcmVlKG5wcml2LCBNX0RFVkJVRik7CisJCQluZXRtYXBf
cHJpdl9kZWxldGUobnByaXYpOwogCQkJcmV0dXJuIGVycm9yOwogCQl9CiAJCWJuYS0+bmFfa3By
aXYgPSBucHJpdjsKIAkJbmEtPm5hX2ZsYWdzIHw9IE5BRl9CVVNZOwogCX0gZWxzZSB7Ci0JCWlu
dCBsYXN0X2luc3RhbmNlOwotCiAJCWlmIChuYS0+YWN0aXZlX2ZkcyA9PSAwKSAvKiBub3QgcmVn
aXN0ZXJlZCAqLwogCQkJcmV0dXJuIEVJTlZBTDsKLQkJbGFzdF9pbnN0YW5jZSA9IG5ldG1hcF9k
dG9yX2xvY2tlZChibmEtPm5hX2twcml2KTsKLQkJaWYgKCFsYXN0X2luc3RhbmNlKSB7Ci0JCQlE
KCItLS0gZXJyb3IsIHRyeWluZyB0byBkZXRhY2ggYW4gZW50cnkgd2l0aCBhY3RpdmUgbW1hcHMi
KTsKLQkJCWVycm9yID0gRUlOVkFMOwotCQl9IGVsc2UgewotCQkJc3RydWN0IG5tX2JyaWRnZSAq
YiA9IGJuYS0+dXAubmFfYmRnLAotCQkJCSpiaCA9IGJuYS0+aG9zdC5uYV9iZGc7Ci0JCQlucHJp
diA9IGJuYS0+bmFfa3ByaXY7Ci0JCQlibmEtPm5hX2twcml2ID0gTlVMTDsKLQkJCUQoImRlbGV0
aW5nIHByaXYiKTsKLQotCQkJYnplcm8obnByaXYsIHNpemVvZigqbnByaXYpKTsKLQkJCWZyZWUo
bnByaXYsIE1fREVWQlVGKTsKLQkJCWlmIChiKSB7Ci0JCQkJLyogWFhYIHRoZSBid3JhcCBkdG9y
IHNob3VsZCB0YWtlIGNhcmUKLQkJCQkgKiBvZiB0aGlzICgyMDE0LTA2LTE2KQotCQkJCSAqLwot
CQkJCW5ldG1hcF9iZGdfZGV0YWNoX2NvbW1vbihiLCBibmEtPnVwLmJkZ19wb3J0LAotCQkJCSAg
ICAoYmggPyBibmEtPmhvc3QuYmRnX3BvcnQgOiAtMSkpOwotCQkJfQotCQkJbmEtPm5hX2ZsYWdz
ICY9IH5OQUZfQlVTWTsKLQkJfQorCQluZXRtYXBfcHJpdl9kZWxldGUoYm5hLT5uYV9rcHJpdik7
CisJCWJuYS0+bmFfa3ByaXYgPSBOVUxMOworCQluYS0+bmFfZmxhZ3MgJj0gfk5BRl9CVVNZOwog
CX0KIAlyZXR1cm4gZXJyb3I7CiAKQEAgLTIyNzYsMTIgKzI2NzksMTQgQEAKIAkJcmV0dXJuIEVC
VVNZOwogCX0KIAotCWJuYSA9IG1hbGxvYyhzaXplb2YoKmJuYSksIE1fREVWQlVGLCBNX05PV0FJ
VCB8IE1fWkVSTyk7CisJYm5hID0gbm1fb3NfbWFsbG9jKHNpemVvZigqYm5hKSk7CiAJaWYgKGJu
YSA9PSBOVUxMKSB7CiAJCXJldHVybiBFTk9NRU07CiAJfQogCiAJbmEgPSAmYm5hLT51cC51cDsK
KwkvKiBtYWtlIGJ3cmFwIGlmcCBwb2ludCB0byB0aGUgcmVhbCBpZnAgKi8KKwluYS0+aWZwID0g
aHduYS0+aWZwOwogCW5hLT5uYV9wcml2YXRlID0gYm5hOwogCXN0cm5jcHkobmEtPm5hbWUsIG5y
X25hbWUsIHNpemVvZihuYS0+bmFtZSkpOwogCS8qIGZpbGwgdGhlIHJpbmcgZGF0YSBmb3IgdGhl
IGJ3cmFwIGFkYXB0ZXIgd2l0aCByeC90eCBtZWFuaW5ncwpAQCAtMjI5NCw3ICsyNjk5LDcgQEAK
IAkJbm1hX3NldF9uZGVzYyhuYSwgdCwgbm1hX2dldF9uZGVzYyhod25hLCByKSk7CiAJfQogCW5h
LT5ubV9kdG9yID0gbmV0bWFwX2J3cmFwX2R0b3I7Ci0JbmEtPm5tX3JlZ2lzdGVyID0gbmV0bWFw
X2J3cmFwX3JlZ2lzdGVyOworCW5hLT5ubV9yZWdpc3RlciA9IG5ldG1hcF9id3JhcF9yZWc7CiAJ
Ly8gbmEtPm5tX3R4c3luYyA9IG5ldG1hcF9id3JhcF90eHN5bmM7CiAJLy8gbmEtPm5tX3J4c3lu
YyA9IG5ldG1hcF9id3JhcF9yeHN5bmM7CiAJbmEtPm5tX2NvbmZpZyA9IG5ldG1hcF9id3JhcF9j
b25maWc7CkBAIC0yMzAzLDEzICsyNzA4LDggQEAKIAluYS0+bm1fbm90aWZ5ID0gbmV0bWFwX2J3
cmFwX25vdGlmeTsKIAluYS0+bm1fYmRnX2N0bCA9IG5ldG1hcF9id3JhcF9iZGdfY3RsOwogCW5h
LT5wZGV2ID0gaHduYS0+cGRldjsKLQluYS0+bm1fbWVtID0gbmV0bWFwX21lbV9wcml2YXRlX25l
dyhuYS0+bmFtZSwKLQkJCW5hLT5udW1fdHhfcmluZ3MsIG5hLT5udW1fdHhfZGVzYywKLQkJCW5h
LT5udW1fcnhfcmluZ3MsIG5hLT5udW1fcnhfZGVzYywKLQkJCTAsIDAsICZlcnJvcik7Ci0JbmEt
Pm5hX2ZsYWdzIHw9IE5BRl9NRU1fT1dORVI7Ci0JaWYgKG5hLT5ubV9tZW0gPT0gTlVMTCkKLQkJ
Z290byBlcnJfcHV0OworCW5hLT5ubV9tZW0gPSBuZXRtYXBfbWVtX2dldChod25hLT5ubV9tZW0p
OworCW5hLT52aXJ0X2hkcl9sZW4gPSBod25hLT52aXJ0X2hkcl9sZW47CiAJYm5hLT51cC5yZXRy
eSA9IDE7IC8qIFhYWCBtYXliZSB0aGlzIHNob3VsZCBkZXBlbmQgb24gdGhlIGh3bmEgKi8KIAog
CWJuYS0+aHduYSA9IGh3bmE7CkBAIC0yMzMyLDcgKzI3MzIsNyBAQAogCQkvLyBob3N0bmEtPm5t
X3R4c3luYyA9IG5ldG1hcF9id3JhcF9ob3N0X3R4c3luYzsKIAkJLy8gaG9zdG5hLT5ubV9yeHN5
bmMgPSBuZXRtYXBfYndyYXBfaG9zdF9yeHN5bmM7CiAJCWhvc3RuYS0+bm1fbm90aWZ5ID0gbmV0
bWFwX2J3cmFwX25vdGlmeTsKLQkJaG9zdG5hLT5ubV9tZW0gPSBuYS0+bm1fbWVtOworCQlob3N0
bmEtPm5tX21lbSA9IG5ldG1hcF9tZW1fZ2V0KG5hLT5ubV9tZW0pOwogCQlob3N0bmEtPm5hX3By
aXZhdGUgPSBibmE7CiAJCWhvc3RuYS0+bmFfdnAgPSAmYm5hLT51cDsKIAkJbmEtPm5hX2hvc3R2
cCA9IGh3bmEtPm5hX2hvc3R2cCA9CkBAIC0yMzQ5LDI3ICsyNzQ5LDEzIEBACiAJaWYgKGVycm9y
KSB7CiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQotCS8qIG1ha2UgYndyYXAgaWZwIHBvaW50IHRvIHRo
ZSByZWFsIGlmcAotCSAqIE5PVEU6IG5ldG1hcF9hdHRhY2hfY29tbW9uKCkgaW50ZXJwcmV0cyBh
IG5vbi1OVUxMIG5hLT5pZnAKLQkgKiBhcyBhIHJlcXVlc3QgdG8gbWFrZSB0aGUgaWZwIHBvaW50
IHRvIHRoZSBuYS4gU2luY2Ugd2UKLQkgKiBkbyBub3Qgd2FudCB0byBjaGFuZ2UgdGhlIG5hIGFs
cmVhZHkgcG9pbnRlZCB0byBieSBod25hLT5pZnAsCi0JICogdGhlIGZvbGxvd2luZyBhc3NpZ25t
ZW50IGhhcyB0byBiZSBkZWxheWVkIHVudGlsIG5vdwotCSAqLwotCW5hLT5pZnAgPSBod25hLT5p
ZnA7CiAJaHduYS0+bmFfZmxhZ3MgfD0gTkFGX0JVU1k7Ci0JLyogbWFrZSBod25hIHBvaW50IHRv
IHRoZSBhbGxvY2F0b3Igd2UgYXJlIGFjdHVhbGx5IHVzaW5nLAotCSAqIHNvIHRoYXQgbW9uaXRv
cnMgd2lsbCBiZSBhYmxlIHRvIGZpbmQgaXQKLQkgKi8KLQlibmEtPnNhdmVfbm1kID0gaHduYS0+
bm1fbWVtOwotCWh3bmEtPm5tX21lbSA9IG5hLT5ubV9tZW07CiAJcmV0dXJuIDA7CiAKIGVycl9m
cmVlOgotCW5ldG1hcF9tZW1fZGVsZXRlKG5hLT5ubV9tZW0pOwotZXJyX3B1dDoKIAlod25hLT5u
YV92cCA9IGh3bmEtPm5hX2hvc3R2cCA9IE5VTEw7CiAJbmV0bWFwX2FkYXB0ZXJfcHV0KGh3bmEp
OwotCWZyZWUoYm5hLCBNX0RFVkJVRik7CisJbm1fb3NfZnJlZShibmEpOwogCXJldHVybiBlcnJv
cjsKIAogfQpAQCAtMjM4MCw4ICsyNzY2LDcgQEAKIAlpbnQgaTsKIAlzdHJ1Y3Qgbm1fYnJpZGdl
ICpiOwogCi0JYiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG5tX2JyaWRnZSkgKiBuLCBNX0RFVkJV
RiwKLQkJTV9OT1dBSVQgfCBNX1pFUk8pOworCWIgPSBubV9vc19tYWxsb2Moc2l6ZW9mKHN0cnVj
dCBubV9icmlkZ2UpICogbik7CiAJaWYgKGIgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJZm9y
IChpID0gMDsgaSA8IG47IGkrKykKQEAgLTIzOTksNyArMjc4NCw3IEBACiAKIAlmb3IgKGkgPSAw
OyBpIDwgbjsgaSsrKQogCQlCREdfUldERVNUUk9ZKCZiW2ldKTsKLQlmcmVlKGIsIE1fREVWQlVG
KTsKKwlubV9vc19mcmVlKGIpOwogfQogCiBpbnQKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC8uZGVwZW5kLmlmX3B0bmV0Lm8gL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwLy5kZXBlbmQuaWZfcHRuZXQubwotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRl
cGVuZC5pZl9wdG5ldC5vCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAv
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5pZl9wdG5ldC5vCTIwMTYtMTEtMjMg
MTc6MDU6NDIuMzQ0MzkwMDAwICswMDAwCkBAIC0wLDAgKzEsNjIgQEAKK2lmX3B0bmV0Lm86IFwK
KyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9u
ZXRtYXAvaWZfcHRuZXQuYyBcCisgIC91c3Ivc3JjL3N5cy9zeXMvY2RlZnMuaCAvdXNyL3NyYy9z
eXMvc3lzL3R5cGVzLmggbWFjaGluZS9lbmRpYW4uaCBcCisgIHg4Ni9lbmRpYW4uaCAvdXNyL3Ny
Yy9zeXMvc3lzL190eXBlcy5oIG1hY2hpbmUvX3R5cGVzLmggeDg2L190eXBlcy5oIFwKKyAgbWFj
aGluZS9fbGltaXRzLmggeDg2L19saW1pdHMuaCAvdXNyL3NyYy9zeXMvc3lzL19wdGhyZWFkdHlw
ZXMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3N0ZGludC5oIC91c3Ivc3JjL3N5cy9zeXMvc2Vs
ZWN0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zaWdzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL190
aW1ldmFsLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3RpbWVzcGVjLmggL3Vzci9zcmMvc3lzL3N5
cy9fdGltZXNwZWMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvcGFyYW0uaCAvdXNyL3NyYy9zeXMv
c3lzL19udWxsLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3N5c2xpbWl0cy5oIC91c3Ivc3JjL3N5
cy9zeXMvZXJybm8uaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvdGltZS5oIC91c3Ivc3JjL3N5cy9z
eXMvcHJpb3JpdHkuaCBtYWNoaW5lL3BhcmFtLmggXAorICBtYWNoaW5lL19hbGlnbi5oIHg4Ni9f
YWxpZ24uaCAvdXNyL3NyYy9zeXMvc3lzL3N5c3RtLmggXAorICBtYWNoaW5lL2F0b21pYy5oIG1h
Y2hpbmUvY3B1ZnVuYy5oIC91c3Ivc3JjL3N5cy9zeXMvY2FsbG91dC5oIFwKKyAgL3Vzci9zcmMv
c3lzL3N5cy9fY2FsbG91dC5oIC91c3Ivc3JjL3N5cy9zeXMvcXVldWUuaCBcCisgIC91c3Ivc3Jj
L3N5cy9zeXMvc3RkaW50LmggbWFjaGluZS9fc3RkaW50LmggeDg2L19zdGRpbnQuaCBcCisgIC91
c3Ivc3JjL3N5cy9zeXMvbGlia2Vybi5oIC91c3Ivc3JjL3N5cy9zeXMva2VybmVsLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL2xpbmtlcl9zZXQuaCAvdXNyL3NyYy9zeXMvc3lzL3NvY2tpby5oIFwK
KyAgL3Vzci9zcmMvc3lzL3N5cy9pb2Njb20uaCAvdXNyL3NyYy9zeXMvc3lzL21idWYuaCBcCisg
IC91c3Ivc3JjL3N5cy92bS91bWEuaCAvdXNyL3NyYy9zeXMvc3lzL21hbGxvYy5oIFwKKyAgL3Vz
ci9zcmMvc3lzL3N5cy9fbG9jay5oIC91c3Ivc3JjL3N5cy9zeXMvX211dGV4LmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL3NkdC5oIC91c3Ivc3JjL3N5cy9zeXMvbW9kdWxlLmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL3NvY2tldC5oIC91c3Ivc3JjL3N5cy9zeXMvX2lvdmVjLmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL19zb2NrYWRkcl9zdG9yYWdlLmggL3Vzci9zcmMvc3lzL3N5cy9zeXNjdGwuaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvbG9jay5oIC91c3Ivc3JjL3N5cy9zeXMva3RyX2NsYXNzLmgg
XAorICAvdXNyL3NyYy9zeXMvc3lzL211dGV4LmggL3Vzci9zcmMvc3lzL3N5cy9wY3B1LmggXAor
ICAvdXNyL3NyYy9zeXMvc3lzL19jcHVzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL19iaXRzZXQuaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvX3N4LmggL3Vzci9zcmMvc3lzL3N5cy9fcm1sb2NrLmggXAor
ICAvdXNyL3NyYy9zeXMvc3lzL3ZtbWV0ZXIuaCAvdXNyL3NyYy9zeXMvc3lzL3Jlc291cmNlLmgg
bWFjaGluZS9wY3B1LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2xvY2tfcHJvZmlsZS5oIC91c3Iv
c3JjL3N5cy9zeXMvbG9ja3N0YXQuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvdGFza3F1ZXVlLmgg
L3Vzci9zcmMvc3lzL3N5cy9fdGFzay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zbXAuaCAvdXNy
L3NyYy9zeXMvc3lzL2NwdXNldC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9iaXRzZXQuaCBtYWNo
aW5lL3NtcC5oIC91c3Ivc3JjL3N5cy92bS92bS5oIFwKKyAgbWFjaGluZS92bS5oIG1hY2hpbmUv
c3BlY2lhbHJlZy5oIHg4Ni9zcGVjaWFscmVnLmggXAorICAvdXNyL3NyYy9zeXMvdm0vcG1hcC5o
IG1hY2hpbmUvcG1hcC5oIC91c3Ivc3JjL3N5cy92bS9fdm1fcmFkaXguaCBcCisgIC91c3Ivc3Jj
L3N5cy9uZXQvZXRoZXJuZXQuaCAvdXNyL3NyYy9zeXMvbmV0L2lmLmggXAorICAvdXNyL3NyYy9z
eXMvbmV0L2lmX3Zhci5oIC91c3Ivc3JjL3N5cy9zeXMvYnVmX3JpbmcuaCBtYWNoaW5lL2NwdS5o
IFwKKyAgbWFjaGluZS9wc2wuaCB4ODYvcHNsLmggbWFjaGluZS9mcmFtZS5oIHg4Ni9mcmFtZS5o
IG1hY2hpbmUvc2VnbWVudHMuaCBcCisgIHg4Ni9zZWdtZW50cy5oIC91c3Ivc3JjL3N5cy9uZXQv
dm5ldC5oIC91c3Ivc3JjL3N5cy9zeXMvY291bnRlci5oIFwKKyAgbWFjaGluZS9jb3VudGVyLmgg
L3Vzci9zcmMvc3lzL3N5cy9yd2xvY2suaCAvdXNyL3NyYy9zeXMvc3lzL19yd2xvY2suaCBcCisg
IC91c3Ivc3JjL3N5cy9zeXMvc3guaCAvdXNyL3NyYy9zeXMvbmV0L2FsdHEvaWZfYWx0cS5oIFwK
KyAgL3Vzci9zcmMvc3lzL3N5cy9ldmVudC5oIC91c3Ivc3JjL3N5cy9uZXQvaWZxLmggXAorICAv
dXNyL3NyYy9zeXMvbmV0L2lmX2FycC5oIC91c3Ivc3JjL3N5cy9uZXQvaWZfZGwuaCBcCisgIC91
c3Ivc3JjL3N5cy9uZXQvaWZfdHlwZXMuaCAvdXNyL3NyYy9zeXMvbmV0L2lmX21lZGlhLmggXAor
ICAvdXNyL3NyYy9zeXMvbmV0L2lmX3ZsYW5fdmFyLmggL3Vzci9zcmMvc3lzL25ldC9icGYuaCBc
CisgIC91c3Ivc3JjL3N5cy9uZXRpbmV0L2luX3N5c3RtLmggL3Vzci9zcmMvc3lzL25ldGluZXQv
aW4uaCBcCisgIC91c3Ivc3JjL3N5cy9uZXRpbmV0Ni9pbjYuaCAvdXNyL3NyYy9zeXMvbmV0aW5l
dC9pcC5oIFwKKyAgL3Vzci9zcmMvc3lzL25ldGluZXQvaXA2LmggL3Vzci9zcmMvc3lzL25ldGlu
ZXQ2L2lwNl92YXIuaCBcCisgIC91c3Ivc3JjL3N5cy9uZXRpbmV0L3VkcC5oIC91c3Ivc3JjL3N5
cy9uZXRpbmV0L3RjcC5oIFwKKyAgL3Vzci9zcmMvc3lzL25ldGluZXQvc2N0cC5oIC91c3Ivc3Jj
L3N5cy9uZXRpbmV0L3NjdHBfdWlvLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2VuZGlhbi5oIG1h
Y2hpbmUvYnVzLmggeDg2L2J1cy5oIG1hY2hpbmUvX2J1cy5oIFwKKyAgbWFjaGluZS9idXNfZG1h
LmggL3Vzci9zcmMvc3lzL3N5cy9idXNfZG1hLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19idXNf
ZG1hLmggbWFjaGluZS9yZXNvdXJjZS5oIC91c3Ivc3JjL3N5cy9zeXMvYnVzLmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL2V2ZW50aGFuZGxlci5oIC91c3Ivc3JjL3N5cy9zeXMva3RyLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL2tvYmouaCBkZXZpY2VfaWYuaCBidXNfaWYuaCAvdXNyL3NyYy9zeXMv
c3lzL3JtYW4uaCBcCisgIC91c3Ivc3JjL3N5cy9kZXYvcGNpL3BjaXZhci5oIHBjaV9pZi5oIC91
c3Ivc3JjL3N5cy9kZXYvcGNpL3BjaXJlZy5oIFwKKyAgb3B0X2luZXQuaCBvcHRfaW5ldDYuaCAv
dXNyL3NyYy9zeXMvc3lzL3NlbGluZm8uaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5
cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9uZXQvbmV0bWFwLmggXAorICAvdXNyL2hvbWUvc3RldmVu
L25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2L25ldG1hcC9uZXRtYXBfa2Vybi5o
IFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rl
di9uZXRtYXAvbmV0bWFwX21icS5oIFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21v
ZHVsZXMvbmV0bWFwLy4uLy4uL25ldC9uZXRtYXBfdmlydC5oIFwKKyAgL3Vzci9ob21lL3N0ZXZl
bi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIu
aCBcCisgIC91c3Ivc3JjL3N5cy9kZXYvdmlydGlvL25ldHdvcmsvdmlydGlvX25ldC5oCmRpZmYg
LXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXAubyAvdXNy
L3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXAubwotLS0gdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXAubwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw
MDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFw
Lm8JMjAxNi0xMS0yMyAxNzowNTozNS44MTcxMTQwMDAgKzAwMDAKQEAgLTAsMCArMSw1MCBAQAor
bmV0bWFwLm86IFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFw
Ly4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwLmMgXAorICAvdXNyL3NyYy9zeXMvc3lzL2NkZWZzLmgg
L3Vzci9zcmMvc3lzL3N5cy90eXBlcy5oIG1hY2hpbmUvZW5kaWFuLmggXAorICB4ODYvZW5kaWFu
LmggL3Vzci9zcmMvc3lzL3N5cy9fdHlwZXMuaCBtYWNoaW5lL190eXBlcy5oIHg4Ni9fdHlwZXMu
aCBcCisgIG1hY2hpbmUvX2xpbWl0cy5oIHg4Ni9fbGltaXRzLmggL3Vzci9zcmMvc3lzL3N5cy9f
cHRocmVhZHR5cGVzLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zdGRpbnQuaCAvdXNyL3NyYy9z
eXMvc3lzL3NlbGVjdC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fc2lnc2V0LmggL3Vzci9zcmMv
c3lzL3N5cy9fdGltZXZhbC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy90aW1lc3BlYy5oIC91c3Iv
c3JjL3N5cy9zeXMvX3RpbWVzcGVjLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2Vycm5vLmggL3Vz
ci9zcmMvc3lzL3N5cy9wYXJhbS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fbnVsbC5oIC91c3Iv
c3JjL3N5cy9zeXMvc3lzbGltaXRzLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3RpbWUuaCAvdXNy
L3NyYy9zeXMvc3lzL3ByaW9yaXR5LmggbWFjaGluZS9wYXJhbS5oIFwKKyAgbWFjaGluZS9fYWxp
Z24uaCB4ODYvX2FsaWduLmggL3Vzci9zcmMvc3lzL3N5cy9rZXJuZWwuaCBcCisgIC91c3Ivc3Jj
L3N5cy9zeXMvbGlua2VyX3NldC5oIC91c3Ivc3JjL3N5cy9zeXMvcXVldWUuaCBcCisgIC91c3Iv
c3JjL3N5cy9zeXMvY29uZi5oIC91c3Ivc3JjL3N5cy9zeXMvZXZlbnRoYW5kbGVyLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL2xvY2suaCAvdXNyL3NyYy9zeXMvc3lzL19sb2NrLmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL2t0cl9jbGFzcy5oIC91c3Ivc3JjL3N5cy9zeXMva3RyLmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL19jcHVzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL19iaXRzZXQuaCBcCisgIC91
c3Ivc3JjL3N5cy9zeXMvbXV0ZXguaCAvdXNyL3NyYy9zeXMvc3lzL19tdXRleC5oIFwKKyAgL3Vz
ci9zcmMvc3lzL3N5cy9wY3B1LmggL3Vzci9zcmMvc3lzL3N5cy9fc3guaCBcCisgIC91c3Ivc3Jj
L3N5cy9zeXMvX3JtbG9jay5oIC91c3Ivc3JjL3N5cy9zeXMvdm1tZXRlci5oIFwKKyAgL3Vzci9z
cmMvc3lzL3N5cy9yZXNvdXJjZS5oIG1hY2hpbmUvcGNwdS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5
cy9sb2NrX3Byb2ZpbGUuaCAvdXNyL3NyYy9zeXMvc3lzL2xvY2tzdGF0LmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL3NkdC5oIG1hY2hpbmUvYXRvbWljLmggbWFjaGluZS9jcHVmdW5jLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL2ZpbGlvLmggL3Vzci9zcmMvc3lzL3N5cy9pb2Njb20uaCBcCisgIC91
c3Ivc3JjL3N5cy9zeXMvc29ja2lvLmggL3Vzci9zcmMvc3lzL3N5cy9zb2NrZXR2YXIuaCBcCisg
IC91c3Ivc3JjL3N5cy9zeXMvc2VsaW5mby5oIC91c3Ivc3JjL3N5cy9zeXMvZXZlbnQuaCBcCisg
IC91c3Ivc3JjL3N5cy9zeXMvb3NkLmggL3Vzci9zcmMvc3lzL3N5cy9zb2NrYnVmLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL190YXNrLmggL3Vzci9zcmMvc3lzL3N5cy9zb2Nrc3RhdGUuaCBcCisg
IC91c3Ivc3JjL3N5cy9zeXMvY2FwcmlnaHRzLmggL3Vzci9zcmMvc3lzL3N5cy9zb2Nrb3B0Lmgg
XAorICAvdXNyL3NyYy9zeXMvc3lzL21hbGxvYy5oIC91c3Ivc3JjL3N5cy9zeXMvcG9sbC5oIFwK
KyAgL3Vzci9zcmMvc3lzL3N5cy9yd2xvY2suaCAvdXNyL3NyYy9zeXMvc3lzL19yd2xvY2suaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvc29ja2V0LmggL3Vzci9zcmMvc3lzL3N5cy9faW92ZWMuaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvX3NvY2thZGRyX3N0b3JhZ2UuaCAvdXNyL3NyYy9zeXMvc3lz
L3N5c2N0bC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9qYWlsLmggL3Vzci9zcmMvc3lzL25ldC92
bmV0LmggL3Vzci9zcmMvc3lzL25ldC9pZi5oIFwKKyAgL3Vzci9zcmMvc3lzL25ldC9pZl92YXIu
aCAvdXNyL3NyYy9zeXMvc3lzL21idWYuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvc3lzdG0uaCAv
dXNyL3NyYy9zeXMvc3lzL2NhbGxvdXQuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX2NhbGxvdXQu
aCAvdXNyL3NyYy9zeXMvc3lzL3N0ZGludC5oIFwKKyAgbWFjaGluZS9fc3RkaW50LmggeDg2L19z
dGRpbnQuaCAvdXNyL3NyYy9zeXMvc3lzL2xpYmtlcm4uaCBcCisgIC91c3Ivc3JjL3N5cy92bS91
bWEuaCAvdXNyL3NyYy9zeXMvc3lzL2J1Zl9yaW5nLmggbWFjaGluZS9jcHUuaCBcCisgIG1hY2hp
bmUvcHNsLmggeDg2L3BzbC5oIG1hY2hpbmUvZnJhbWUuaCB4ODYvZnJhbWUuaCBtYWNoaW5lL3Nl
Z21lbnRzLmggXAorICB4ODYvc2VnbWVudHMuaCAvdXNyL3NyYy9zeXMvc3lzL2NvdW50ZXIuaCBt
YWNoaW5lL2NvdW50ZXIuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvc3guaCAvdXNyL3NyYy9zeXMv
bmV0L2FsdHEvaWZfYWx0cS5oIFwKKyAgL3Vzci9zcmMvc3lzL25ldC9pZnEuaCAvdXNyL3NyYy9z
eXMvbmV0L2JwZi5oIG1hY2hpbmUvYnVzLmggeDg2L2J1cy5oIFwKKyAgbWFjaGluZS9fYnVzLmgg
bWFjaGluZS9idXNfZG1hLmggL3Vzci9zcmMvc3lzL3N5cy9idXNfZG1hLmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL19idXNfZG1hLmggL3Vzci9zcmMvc3lzL3N5cy9lbmRpYW4uaCBcCisgIC91c3Iv
c3JjL3N5cy9zeXMvcmVmY291bnQuaCAvdXNyL3NyYy9zeXMvc3lzL2xpbWl0cy5oIFwKKyAgL3Vz
ci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL25ldC9uZXRtYXAu
aCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9k
ZXYvbmV0bWFwL25ldG1hcF9rZXJuLmggXAorICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMv
bW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2L25ldG1hcC9uZXRtYXBfbWJxLmggXAorICAvdXNyL2hv
bWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2L25ldG1hcC9uZXRt
YXBfbWVtMi5oCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVu
ZC5uZXRtYXBfZnJlZWJzZC5vIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5l
dG1hcF9mcmVlYnNkLm8KLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0
bWFwX2ZyZWVic2QubwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFwX2ZyZWVic2QubwkyMDE2LTEx
LTIzIDE3OjA1OjM5LjYxMTU4NTAwMCArMDAwMApAQCAtMCwwICsxLDc2IEBACituZXRtYXBfZnJl
ZWJzZC5vOiBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8u
Li8uLi9kZXYvbmV0bWFwL25ldG1hcF9mcmVlYnNkLmMgXAorICBvcHRfaW5ldC5oIG9wdF9pbmV0
Ni5oIC91c3Ivc3JjL3N5cy9zeXMvcGFyYW0uaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX251bGwu
aCAvdXNyL3NyYy9zeXMvc3lzL3R5cGVzLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2NkZWZzLmgg
bWFjaGluZS9lbmRpYW4uaCB4ODYvZW5kaWFuLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL190eXBl
cy5oIG1hY2hpbmUvX3R5cGVzLmggeDg2L190eXBlcy5oIFwKKyAgbWFjaGluZS9fbGltaXRzLmgg
eDg2L19saW1pdHMuaCAvdXNyL3NyYy9zeXMvc3lzL19wdGhyZWFkdHlwZXMuaCBcCisgIC91c3Iv
c3JjL3N5cy9zeXMvX3N0ZGludC5oIC91c3Ivc3JjL3N5cy9zeXMvc2VsZWN0LmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL19zaWdzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL190aW1ldmFsLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL3RpbWVzcGVjLmggL3Vzci9zcmMvc3lzL3N5cy9fdGltZXNwZWMuaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvc3lzbGltaXRzLmggL3Vzci9zcmMvc3lzL3N5cy9lcnJuby5o
IFwKKyAgL3Vzci9zcmMvc3lzL3N5cy90aW1lLmggL3Vzci9zcmMvc3lzL3N5cy9wcmlvcml0eS5o
IG1hY2hpbmUvcGFyYW0uaCBcCisgIG1hY2hpbmUvX2FsaWduLmggeDg2L19hbGlnbi5oIC91c3Iv
c3JjL3N5cy9zeXMvbW9kdWxlLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2xpbmtlcl9zZXQuaCAv
dXNyL3NyYy9zeXMvc3lzL2phaWwuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvcXVldWUuaCAvdXNy
L3NyYy9zeXMvc3lzL3N5c2N0bC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9sb2NrLmggL3Vzci9z
cmMvc3lzL3N5cy9fbG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9rdHJfY2xhc3MuaCAvdXNy
L3NyYy9zeXMvc3lzL211dGV4LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19tdXRleC5oIC91c3Iv
c3JjL3N5cy9zeXMvcGNwdS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fY3B1c2V0LmggL3Vzci9z
cmMvc3lzL3N5cy9fYml0c2V0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zeC5oIC91c3Ivc3Jj
L3N5cy9zeXMvX3JtbG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy92bW1ldGVyLmggL3Vzci9z
cmMvc3lzL3N5cy9yZXNvdXJjZS5oIG1hY2hpbmUvcGNwdS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5
cy9sb2NrX3Byb2ZpbGUuaCAvdXNyL3NyYy9zeXMvc3lzL2xvY2tzdGF0LmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL3NkdC5oIG1hY2hpbmUvYXRvbWljLmggbWFjaGluZS9jcHVmdW5jLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL190YXNrLmggL3Vzci9zcmMvc3lzL3N5cy9vc2QuaCBcCisgIC91c3Iv
c3JjL3N5cy9zeXMvcG9sbC5oIC91c3Ivc3JjL3N5cy9zeXMva2VybmVsLmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL2NvbmYuaCAvdXNyL3NyYy9zeXMvc3lzL2V2ZW50aGFuZGxlci5oIFwKKyAgL3Vz
ci9zcmMvc3lzL3N5cy9rdHIuaCAvdXNyL3NyYy9zeXMvc3lzL2VuZGlhbi5oIFwKKyAgL3Vzci9z
cmMvc3lzL3N5cy9zeXNjYWxsc3Vici5oIC91c3Ivc3JjL3N5cy9zeXMvc2lnbmFsLmggXAorICBt
YWNoaW5lL3NpZ25hbC5oIHg4Ni9zaWduYWwuaCBtYWNoaW5lL3RyYXAuaCB4ODYvdHJhcC5oIFwK
KyAgL3Vzci9zcmMvc3lzL3N5cy91aW8uaCAvdXNyL3NyYy9zeXMvc3lzL19pb3ZlYy5oIFwKKyAg
L3Vzci9zcmMvc3lzL3N5cy9zb2NrZXQuaCAvdXNyL3NyYy9zeXMvc3lzL19zb2NrYWRkcl9zdG9y
YWdlLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL21hYy5oIC91c3Ivc3JjL3N5cy9zeXMvbW91bnQu
aCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvdWNyZWQuaCAvdXNyL3NyYy9zeXMvYnNtL2F1ZGl0Lmgg
XAorICAvdXNyL3NyYy9zeXMvc3lzL2xvY2ttZ3IuaCAvdXNyL3NyYy9zeXMvc3lzL19sb2NrbWdy
LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19yd2xvY2suaCAvdXNyL3NyYy9zeXMvc3lzL3J3bG9j
ay5oIFwKKyAgL3Vzci9zcmMvc3lzL3ZtL3ZtLmggbWFjaGluZS92bS5oIG1hY2hpbmUvc3BlY2lh
bHJlZy5oIFwKKyAgeDg2L3NwZWNpYWxyZWcuaCAvdXNyL3NyYy9zeXMvdm0vcG1hcC5oIG1hY2hp
bmUvcG1hcC5oIFwKKyAgL3Vzci9zcmMvc3lzL3ZtL192bV9yYWRpeC5oIC91c3Ivc3JjL3N5cy92
bS92bV9wYXJhbS5oIFwKKyAgbWFjaGluZS92bXBhcmFtLmggL3Vzci9zcmMvc3lzL3ZtL3ZtX29i
amVjdC5oIFwKKyAgL3Vzci9zcmMvc3lzL3ZtL3ZtX3BhZ2UuaCAvdXNyL3NyYy9zeXMvc3lzL3N5
c3RtLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2NhbGxvdXQuaCAvdXNyL3NyYy9zeXMvc3lzL19j
YWxsb3V0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3N0ZGludC5oIG1hY2hpbmUvX3N0ZGludC5o
IHg4Ni9fc3RkaW50LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2xpYmtlcm4uaCAvdXNyL3NyYy9z
eXMvdm0vdm1fcGFnZXIuaCBcCisgIC91c3Ivc3JjL3N5cy92bS91bWEuaCAvdXNyL3NyYy9zeXMv
c3lzL21hbGxvYy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zZWxpbmZvLmggL3Vzci9zcmMvc3lz
L3N5cy9ldmVudC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9rdGhyZWFkLmggL3Vzci9zcmMvc3lz
L3N5cy9wcm9jLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2NvbmR2YXIuaCAvdXNyL3NyYy9zeXMv
c3lzL3J0cHJpby5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9ydW5xLmggbWFjaGluZS9ydW5xLmgg
L3Vzci9zcmMvc3lzL3N5cy9zaWdpby5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zaWduYWx2YXIu
aCAvdXNyL3NyYy9zeXMvc3lzL3Vjb250ZXh0LmggXAorICBtYWNoaW5lL3Vjb250ZXh0LmggeDg2
L3Vjb250ZXh0LmggL3Vzci9zcmMvc3lzL3N5cy9fdWNvbnRleHQuaCBcCisgIC91c3Ivc3JjL3N5
cy9zeXMvX3ZtX2RvbWFpbi5oIC91c3Ivc3JjL3N5cy9zeXMvc2VxLmggbWFjaGluZS9jcHUuaCBc
CisgIG1hY2hpbmUvcHNsLmggeDg2L3BzbC5oIG1hY2hpbmUvZnJhbWUuaCB4ODYvZnJhbWUuaCBt
YWNoaW5lL3NlZ21lbnRzLmggXAorICB4ODYvc2VnbWVudHMuaCBtYWNoaW5lL3Byb2MuaCAvdXNy
L3NyYy9zeXMvc3lzL3VuaXN0ZC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zY2hlZC5oIC91c3Iv
c3JjL3N5cy9zeXMvc21wLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2NwdXNldC5oIC91c3Ivc3Jj
L3N5cy9zeXMvYml0c2V0LmggXAorICAvdXNyL3NyYy9zeXMvbmV0L2lmLmggL3Vzci9zcmMvc3lz
L25ldC9pZl92YXIuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbWJ1Zi5oIC91c3Ivc3JjL3N5cy9z
eXMvYnVmX3JpbmcuaCBcCisgIC91c3Ivc3JjL3N5cy9uZXQvdm5ldC5oIC91c3Ivc3JjL3N5cy9z
eXMvY291bnRlci5oIG1hY2hpbmUvY291bnRlci5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zeC5o
IC91c3Ivc3JjL3N5cy9uZXQvYWx0cS9pZl9hbHRxLmggXAorICAvdXNyL3NyYy9zeXMvbmV0L2lm
cS5oIC91c3Ivc3JjL3N5cy9uZXQvaWZfdHlwZXMuaCBcCisgIC91c3Ivc3JjL3N5cy9uZXQvZXRo
ZXJuZXQuaCAvdXNyL3NyYy9zeXMvbmV0L2lmX2RsLmggbWFjaGluZS9idXMuaCBcCisgIHg4Ni9i
dXMuaCBtYWNoaW5lL19idXMuaCBtYWNoaW5lL2J1c19kbWEuaCAvdXNyL3NyYy9zeXMvc3lzL2J1
c19kbWEuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX2J1c19kbWEuaCAvdXNyL3NyYy9zeXMvbmV0
aW5ldC9pbi5oIFwKKyAgL3Vzci9zcmMvc3lzL25ldGluZXQ2L2luNi5oIG1hY2hpbmUvaW5fY2tz
dW0uaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8u
Li9uZXQvbmV0bWFwLmggXAorICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9u
ZXRtYXAvLi4vLi4vZGV2L25ldG1hcC9uZXRtYXBfa2Vybi5oIFwKKyAgL3Vzci9ob21lL3N0ZXZl
bi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX21icS5o
IFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL25l
dC9uZXRtYXBfdmlydC5oIFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMv
bmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIuaCBcCisgIC91c3Ivc3JjL3N5cy9z
eXMvYnVzLmggL3Vzci9zcmMvc3lzL3N5cy9pb2Njb20uaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMv
a29iai5oIGRldmljZV9pZi5oIGJ1c19pZi5oIC91c3Ivc3JjL3N5cy9zeXMvcm1hbi5oIFwKKyAg
bWFjaGluZS9yZXNvdXJjZS5oIC91c3Ivc3JjL3N5cy9kZXYvcGNpL3BjaXZhci5oIHBjaV9pZi5o
IFwKKyAgL3Vzci9zcmMvc3lzL2Rldi9wY2kvcGNpcmVnLmggL3Vzci9zcmMvc3lzL3N5cy9zeXNw
cm90by5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9hY2wuaCAvdXNyL3NyYy9zeXMvc3lzL19mZmNv
dW50ZXIuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3NlbWFwaG9yZS5oIC91c3Ivc3JjL3N5cy9z
eXMvd2FpdC5oIFwKKyAgL3Vzci9zcmMvc3lzL2JzbS9hdWRpdF9rZXZlbnRzLmgKZGlmZiAtdSAt
ciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9nZW5lcmljLm8g
L3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFwX2dlbmVyaWMubwotLS0g
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXBfZ2VuZXJpYy5vCTE5NzAt
MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvLmRlcGVuZC5uZXRtYXBfZ2VuZXJpYy5vCTIwMTYtMTEtMjMgMTc6MDU6MzcuMzgyMzc4
MDAwICswMDAwCkBAIC0wLDAgKzEsNDAgQEAKK25ldG1hcF9nZW5lcmljLm86IFwKKyAgL3Vzci9o
b21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0
bWFwX2dlbmVyaWMuYyBcCisgIC91c3Ivc3JjL3N5cy9zeXMvY2RlZnMuaCAvdXNyL3NyYy9zeXMv
c3lzL3R5cGVzLmggbWFjaGluZS9lbmRpYW4uaCBcCisgIHg4Ni9lbmRpYW4uaCAvdXNyL3NyYy9z
eXMvc3lzL190eXBlcy5oIG1hY2hpbmUvX3R5cGVzLmggeDg2L190eXBlcy5oIFwKKyAgbWFjaGlu
ZS9fbGltaXRzLmggeDg2L19saW1pdHMuaCAvdXNyL3NyYy9zeXMvc3lzL19wdGhyZWFkdHlwZXMu
aCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3N0ZGludC5oIC91c3Ivc3JjL3N5cy9zeXMvc2VsZWN0
LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zaWdzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL190aW1l
dmFsLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3RpbWVzcGVjLmggL3Vzci9zcmMvc3lzL3N5cy9f
dGltZXNwZWMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvZXJybm8uaCAvdXNyL3NyYy9zeXMvc3lz
L21hbGxvYy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9wYXJhbS5oIC91c3Ivc3JjL3N5cy9zeXMv
X251bGwuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvc3lzbGltaXRzLmggL3Vzci9zcmMvc3lzL3N5
cy90aW1lLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3ByaW9yaXR5LmggbWFjaGluZS9wYXJhbS5o
IG1hY2hpbmUvX2FsaWduLmggXAorICB4ODYvX2FsaWduLmggL3Vzci9zcmMvc3lzL3N5cy9xdWV1
ZS5oIC91c3Ivc3JjL3N5cy9zeXMvX2xvY2suaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX211dGV4
LmggL3Vzci9zcmMvc3lzL3N5cy9sb2NrLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2t0cl9jbGFz
cy5oIC91c3Ivc3JjL3N5cy9zeXMvcndsb2NrLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19yd2xv
Y2suaCAvdXNyL3NyYy9zeXMvc3lzL2xvY2tfcHJvZmlsZS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5
cy9sb2Nrc3RhdC5oIC91c3Ivc3JjL3N5cy9zeXMvc2R0LmggXAorICAvdXNyL3NyYy9zeXMvc3lz
L2xpbmtlcl9zZXQuaCAvdXNyL3NyYy9zeXMvc3lzL3BjcHUuaCBcCisgIC91c3Ivc3JjL3N5cy9z
eXMvX2NwdXNldC5oIC91c3Ivc3JjL3N5cy9zeXMvX2JpdHNldC5oIFwKKyAgL3Vzci9zcmMvc3lz
L3N5cy9fc3guaCAvdXNyL3NyYy9zeXMvc3lzL19ybWxvY2suaCBcCisgIC91c3Ivc3JjL3N5cy9z
eXMvdm1tZXRlci5oIC91c3Ivc3JjL3N5cy9zeXMvcmVzb3VyY2UuaCBtYWNoaW5lL3BjcHUuaCBc
CisgIG1hY2hpbmUvYXRvbWljLmggL3Vzci9zcmMvc3lzL3N5cy9zb2NrZXQuaCAvdXNyL3NyYy9z
eXMvc3lzL19pb3ZlYy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fc29ja2FkZHJfc3RvcmFnZS5o
IC91c3Ivc3JjL3N5cy9zeXMvc2VsaW5mby5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9ldmVudC5o
IC91c3Ivc3JjL3N5cy9uZXQvaWYuaCBcCisgIC91c3Ivc3JjL3N5cy9uZXQvaWZfdmFyLmggL3Vz
ci9zcmMvc3lzL3N5cy9tYnVmLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3N5c3RtLmggbWFjaGlu
ZS9jcHVmdW5jLmggL3Vzci9zcmMvc3lzL3N5cy9jYWxsb3V0LmggXAorICAvdXNyL3NyYy9zeXMv
c3lzL19jYWxsb3V0LmggL3Vzci9zcmMvc3lzL3N5cy9zdGRpbnQuaCBcCisgIG1hY2hpbmUvX3N0
ZGludC5oIHg4Ni9fc3RkaW50LmggL3Vzci9zcmMvc3lzL3N5cy9saWJrZXJuLmggXAorICAvdXNy
L3NyYy9zeXMvdm0vdW1hLmggL3Vzci9zcmMvc3lzL3N5cy9idWZfcmluZy5oIG1hY2hpbmUvY3B1
LmggXAorICBtYWNoaW5lL3BzbC5oIHg4Ni9wc2wuaCBtYWNoaW5lL2ZyYW1lLmggeDg2L2ZyYW1l
LmggbWFjaGluZS9zZWdtZW50cy5oIFwKKyAgeDg2L3NlZ21lbnRzLmggL3Vzci9zcmMvc3lzL25l
dC92bmV0LmggL3Vzci9zcmMvc3lzL3N5cy9jb3VudGVyLmggXAorICBtYWNoaW5lL2NvdW50ZXIu
aCAvdXNyL3NyYy9zeXMvc3lzL211dGV4LmggL3Vzci9zcmMvc3lzL3N5cy9zeC5oIFwKKyAgL3Vz
ci9zcmMvc3lzL3N5cy9fdGFzay5oIC91c3Ivc3JjL3N5cy9uZXQvYWx0cS9pZl9hbHRxLmggXAor
ICAvdXNyL3NyYy9zeXMvbmV0L2lmcS5oIG1hY2hpbmUvYnVzLmggeDg2L2J1cy5oIG1hY2hpbmUv
X2J1cy5oIFwKKyAgbWFjaGluZS9idXNfZG1hLmggL3Vzci9zcmMvc3lzL3N5cy9idXNfZG1hLmgg
XAorICAvdXNyL3NyYy9zeXMvc3lzL19idXNfZG1hLmggXAorICAvdXNyL2hvbWUvc3RldmVuL25l
dG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vbmV0L25ldG1hcC5oIFwKKyAgL3Vzci9ob21l
L3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFw
X2tlcm4uaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8u
Li8uLi9kZXYvbmV0bWFwL25ldG1hcF9tYnEuaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFw
L3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9kZXYvbmV0bWFwL25ldG1hcF9tZW0yLmgKZGlmZiAt
dSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9tYnEubyAv
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXBfbWJxLm8KLS0tIHVzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFwX21icS5vCTE5NzAtMDEtMDEgMDE6
MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRl
cGVuZC5uZXRtYXBfbWJxLm8JMjAxNi0xMS0yMyAxNzowNTozNy41MTAyMTMwMDAgKzAwMDAKQEAg
LTAsMCArMSwyNiBAQAorbmV0bWFwX21icS5vOiBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFw
L3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9kZXYvbmV0bWFwL25ldG1hcF9tYnEuYyBcCisgIC91
c3Ivc3JjL3N5cy9zeXMvcGFyYW0uaCAvdXNyL3NyYy9zeXMvc3lzL19udWxsLmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL3R5cGVzLmggL3Vzci9zcmMvc3lzL3N5cy9jZGVmcy5oIG1hY2hpbmUvZW5k
aWFuLmggXAorICB4ODYvZW5kaWFuLmggL3Vzci9zcmMvc3lzL3N5cy9fdHlwZXMuaCBtYWNoaW5l
L190eXBlcy5oIHg4Ni9fdHlwZXMuaCBcCisgIG1hY2hpbmUvX2xpbWl0cy5oIHg4Ni9fbGltaXRz
LmggL3Vzci9zcmMvc3lzL3N5cy9fcHRocmVhZHR5cGVzLmggXAorICAvdXNyL3NyYy9zeXMvc3lz
L19zdGRpbnQuaCAvdXNyL3NyYy9zeXMvc3lzL3NlbGVjdC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5
cy9fc2lnc2V0LmggL3Vzci9zcmMvc3lzL3N5cy9fdGltZXZhbC5oIFwKKyAgL3Vzci9zcmMvc3lz
L3N5cy90aW1lc3BlYy5oIC91c3Ivc3JjL3N5cy9zeXMvX3RpbWVzcGVjLmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL3N5c2xpbWl0cy5oIC91c3Ivc3JjL3N5cy9zeXMvZXJybm8uaCBcCisgIC91c3Iv
c3JjL3N5cy9zeXMvdGltZS5oIC91c3Ivc3JjL3N5cy9zeXMvcHJpb3JpdHkuaCBtYWNoaW5lL3Bh
cmFtLmggXAorICBtYWNoaW5lL19hbGlnbi5oIHg4Ni9fYWxpZ24uaCAvdXNyL3NyYy9zeXMvc3lz
L2xvY2suaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvcXVldWUuaCAvdXNyL3NyYy9zeXMvc3lzL19s
b2NrLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2t0cl9jbGFzcy5oIC91c3Ivc3JjL3N5cy9zeXMv
bXV0ZXguaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX211dGV4LmggL3Vzci9zcmMvc3lzL3N5cy9w
Y3B1LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19jcHVzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL19i
aXRzZXQuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3N4LmggL3Vzci9zcmMvc3lzL3N5cy9fcm1s
b2NrLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3ZtbWV0ZXIuaCAvdXNyL3NyYy9zeXMvc3lzL3Jl
c291cmNlLmggbWFjaGluZS9wY3B1LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2xvY2tfcHJvZmls
ZS5oIC91c3Ivc3JjL3N5cy9zeXMvbG9ja3N0YXQuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvc2R0
LmggL3Vzci9zcmMvc3lzL3N5cy9saW5rZXJfc2V0LmggbWFjaGluZS9hdG9taWMuaCBcCisgIG1h
Y2hpbmUvY3B1ZnVuYy5oIC91c3Ivc3JjL3N5cy9zeXMvc3lzdG0uaCAvdXNyL3NyYy9zeXMvc3lz
L2NhbGxvdXQuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX2NhbGxvdXQuaCAvdXNyL3NyYy9zeXMv
c3lzL3N0ZGludC5oIFwKKyAgbWFjaGluZS9fc3RkaW50LmggeDg2L19zdGRpbnQuaCAvdXNyL3Ny
Yy9zeXMvc3lzL2xpYmtlcm4uaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbWJ1Zi5oIC91c3Ivc3Jj
L3N5cy92bS91bWEuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbWFsbG9jLmggXAorICAvdXNyL2hv
bWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2L25ldG1hcC9uZXRt
YXBfbWJxLmgKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5k
Lm5ldG1hcF9tZW0yLm8gL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFw
X21lbTIubwotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXBfbWVt
Mi5vCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXBfbWVtMi5vCTIwMTYtMTEtMjMgMTc6MDU6MzYu
OTIxNjU2MDAwICswMDAwCkBAIC0wLDAgKzEsNTMgQEAKK25ldG1hcF9tZW0yLm86IFwKKyAgL3Vz
ci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAv
bmV0bWFwX21lbTIuYyBcCisgIC91c3Ivc3JjL3N5cy9zeXMvY2RlZnMuaCAvdXNyL3NyYy9zeXMv
c3lzL3R5cGVzLmggbWFjaGluZS9lbmRpYW4uaCBcCisgIHg4Ni9lbmRpYW4uaCAvdXNyL3NyYy9z
eXMvc3lzL190eXBlcy5oIG1hY2hpbmUvX3R5cGVzLmggeDg2L190eXBlcy5oIFwKKyAgbWFjaGlu
ZS9fbGltaXRzLmggeDg2L19saW1pdHMuaCAvdXNyL3NyYy9zeXMvc3lzL19wdGhyZWFkdHlwZXMu
aCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3N0ZGludC5oIC91c3Ivc3JjL3N5cy9zeXMvc2VsZWN0
LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zaWdzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL190aW1l
dmFsLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3RpbWVzcGVjLmggL3Vzci9zcmMvc3lzL3N5cy9f
dGltZXNwZWMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbWFsbG9jLmggL3Vzci9zcmMvc3lzL3N5
cy9wYXJhbS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fbnVsbC5oIC91c3Ivc3JjL3N5cy9zeXMv
c3lzbGltaXRzLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2Vycm5vLmggL3Vzci9zcmMvc3lzL3N5
cy90aW1lLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3ByaW9yaXR5LmggbWFjaGluZS9wYXJhbS5o
IG1hY2hpbmUvX2FsaWduLmggXAorICB4ODYvX2FsaWduLmggL3Vzci9zcmMvc3lzL3N5cy9xdWV1
ZS5oIC91c3Ivc3JjL3N5cy9zeXMvX2xvY2suaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX211dGV4
LmggL3Vzci9zcmMvc3lzL3N5cy9rZXJuZWwuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbGlua2Vy
X3NldC5oIC91c3Ivc3JjL3N5cy9zeXMvcHJvYy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9jYWxs
b3V0LmggL3Vzci9zcmMvc3lzL3N5cy9fY2FsbG91dC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9l
dmVudC5oIC91c3Ivc3JjL3N5cy9zeXMvY29uZHZhci5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9s
b2NrX3Byb2ZpbGUuaCAvdXNyL3NyYy9zeXMvc3lzL29zZC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5
cy9ydHByaW8uaCAvdXNyL3NyYy9zeXMvc3lzL3J1bnEuaCBtYWNoaW5lL3J1bnEuaCBcCisgIC91
c3Ivc3JjL3N5cy9zeXMvcmVzb3VyY2UuaCAvdXNyL3NyYy9zeXMvc3lzL3NpZ2lvLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL3NpZ25hbC5oIG1hY2hpbmUvc2lnbmFsLmggeDg2L3NpZ25hbC5oIG1h
Y2hpbmUvdHJhcC5oIFwKKyAgeDg2L3RyYXAuaCAvdXNyL3NyYy9zeXMvc3lzL3NpZ25hbHZhci5o
IC91c3Ivc3JjL3N5cy9zeXMvcGNwdS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fY3B1c2V0Lmgg
L3Vzci9zcmMvc3lzL3N5cy9fYml0c2V0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zeC5oIC91
c3Ivc3JjL3N5cy9zeXMvX3JtbG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy92bW1ldGVyLmgg
bWFjaGluZS9wY3B1LmggL3Vzci9zcmMvc3lzL3N5cy91Y29udGV4dC5oIFwKKyAgbWFjaGluZS91
Y29udGV4dC5oIHg4Ni91Y29udGV4dC5oIC91c3Ivc3JjL3N5cy9zeXMvX3Vjb250ZXh0LmggXAor
ICAvdXNyL3NyYy9zeXMvc3lzL3VjcmVkLmggL3Vzci9zcmMvc3lzL2JzbS9hdWRpdC5oIFwKKyAg
L3Vzci9zcmMvc3lzL3N5cy9fdm1fZG9tYWluLmggL3Vzci9zcmMvc3lzL3N5cy9zZXEuaCBcCisg
IC91c3Ivc3JjL3N5cy9zeXMvc3lzdG0uaCBtYWNoaW5lL2F0b21pYy5oIG1hY2hpbmUvY3B1ZnVu
Yy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zdGRpbnQuaCBtYWNoaW5lL19zdGRpbnQuaCB4ODYv
X3N0ZGludC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9saWJrZXJuLmggL3Vzci9zcmMvc3lzL3N5
cy9sb2NrLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2t0cl9jbGFzcy5oIG1hY2hpbmUvY3B1Lmgg
bWFjaGluZS9wc2wuaCB4ODYvcHNsLmggXAorICBtYWNoaW5lL2ZyYW1lLmggeDg2L2ZyYW1lLmgg
bWFjaGluZS9zZWdtZW50cy5oIHg4Ni9zZWdtZW50cy5oIFwKKyAgbWFjaGluZS9wcm9jLmggL3Vz
ci9zcmMvc3lzL3ZtL3ZtLmggbWFjaGluZS92bS5oIG1hY2hpbmUvc3BlY2lhbHJlZy5oIFwKKyAg
eDg2L3NwZWNpYWxyZWcuaCAvdXNyL3NyYy9zeXMvdm0vcG1hcC5oIG1hY2hpbmUvcG1hcC5oIFwK
KyAgL3Vzci9zcmMvc3lzL3ZtL192bV9yYWRpeC5oIC91c3Ivc3JjL3N5cy9zeXMvc29ja2V0Lmgg
XAorICAvdXNyL3NyYy9zeXMvc3lzL19pb3ZlYy5oIC91c3Ivc3JjL3N5cy9zeXMvX3NvY2thZGRy
X3N0b3JhZ2UuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvc2VsaW5mby5oIC91c3Ivc3JjL3N5cy9z
eXMvc3lzY3RsLmggXAorICAvdXNyL3NyYy9zeXMvbmV0L2lmLmggL3Vzci9zcmMvc3lzL25ldC9p
Zl92YXIuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbWJ1Zi5oIC91c3Ivc3JjL3N5cy92bS91bWEu
aCAvdXNyL3NyYy9zeXMvc3lzL3NkdC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9idWZfcmluZy5o
IC91c3Ivc3JjL3N5cy9uZXQvdm5ldC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9jb3VudGVyLmgg
bWFjaGluZS9jb3VudGVyLmggL3Vzci9zcmMvc3lzL3N5cy9tdXRleC5oIFwKKyAgL3Vzci9zcmMv
c3lzL3N5cy9sb2Nrc3RhdC5oIC91c3Ivc3JjL3N5cy9zeXMvcndsb2NrLmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL19yd2xvY2suaCAvdXNyL3NyYy9zeXMvc3lzL3N4LmggXAorICAvdXNyL3NyYy9z
eXMvc3lzL190YXNrLmggL3Vzci9zcmMvc3lzL25ldC9hbHRxL2lmX2FsdHEuaCBcCisgIC91c3Iv
c3JjL3N5cy9uZXQvaWZxLmggbWFjaGluZS9idXMuaCB4ODYvYnVzLmggbWFjaGluZS9fYnVzLmgg
XAorICBtYWNoaW5lL2J1c19kbWEuaCAvdXNyL3NyYy9zeXMvc3lzL2J1c19kbWEuaCBcCisgIC91
c3Ivc3JjL3N5cy9zeXMvX2J1c19kbWEuaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5
cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9uZXQvbmV0bWFwLmggXAorICAvdXNyL2hvbWUvc3RldmVu
L25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2L25ldG1hcC9uZXRtYXBfa2Vybi5o
IFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rl
di9uZXRtYXAvbmV0bWFwX21icS5oIFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21v
ZHVsZXMvbmV0bWFwLy4uLy4uL25ldC9uZXRtYXBfdmlydC5oIFwKKyAgL3Vzci9ob21lL3N0ZXZl
bi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIu
aApkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFw
X21vbml0b3IubyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXBfbW9u
aXRvci5vCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9tb25p
dG9yLm8JMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5
cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9tb25pdG9yLm8JMjAxNi0xMS0yMyAxNzow
NTo0MC42OTE4ODIwMDAgKzAwMDAKQEAgLTAsMCArMSw0MyBAQAorbmV0bWFwX21vbml0b3Iubzog
XAorICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2
L25ldG1hcC9uZXRtYXBfbW9uaXRvci5jIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9jZGVmcy5oIC91
c3Ivc3JjL3N5cy9zeXMvdHlwZXMuaCBtYWNoaW5lL2VuZGlhbi5oIFwKKyAgeDg2L2VuZGlhbi5o
IC91c3Ivc3JjL3N5cy9zeXMvX3R5cGVzLmggbWFjaGluZS9fdHlwZXMuaCB4ODYvX3R5cGVzLmgg
XAorICBtYWNoaW5lL19saW1pdHMuaCB4ODYvX2xpbWl0cy5oIC91c3Ivc3JjL3N5cy9zeXMvX3B0
aHJlYWR0eXBlcy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fc3RkaW50LmggL3Vzci9zcmMvc3lz
L3N5cy9zZWxlY3QuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3NpZ3NldC5oIC91c3Ivc3JjL3N5
cy9zeXMvX3RpbWV2YWwuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvdGltZXNwZWMuaCAvdXNyL3Ny
Yy9zeXMvc3lzL190aW1lc3BlYy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9lcnJuby5oIC91c3Iv
c3JjL3N5cy9zeXMvcGFyYW0uaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX251bGwuaCAvdXNyL3Ny
Yy9zeXMvc3lzL3N5c2xpbWl0cy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy90aW1lLmggL3Vzci9z
cmMvc3lzL3N5cy9wcmlvcml0eS5oIG1hY2hpbmUvcGFyYW0uaCBcCisgIG1hY2hpbmUvX2FsaWdu
LmggeDg2L19hbGlnbi5oIC91c3Ivc3JjL3N5cy9zeXMva2VybmVsLmggXAorICAvdXNyL3NyYy9z
eXMvc3lzL2xpbmtlcl9zZXQuaCAvdXNyL3NyYy9zeXMvc3lzL3F1ZXVlLmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL21hbGxvYy5oIC91c3Ivc3JjL3N5cy9zeXMvX2xvY2suaCBcCisgIC91c3Ivc3Jj
L3N5cy9zeXMvX211dGV4LmggL3Vzci9zcmMvc3lzL3N5cy9wb2xsLmggXAorICAvdXNyL3NyYy9z
eXMvc3lzL2xvY2suaCAvdXNyL3NyYy9zeXMvc3lzL2t0cl9jbGFzcy5oIFwKKyAgL3Vzci9zcmMv
c3lzL3N5cy9yd2xvY2suaCAvdXNyL3NyYy9zeXMvc3lzL19yd2xvY2suaCBcCisgIC91c3Ivc3Jj
L3N5cy9zeXMvbG9ja19wcm9maWxlLmggL3Vzci9zcmMvc3lzL3N5cy9sb2Nrc3RhdC5oIFwKKyAg
L3Vzci9zcmMvc3lzL3N5cy9zZHQuaCAvdXNyL3NyYy9zeXMvc3lzL3BjcHUuaCBcCisgIC91c3Iv
c3JjL3N5cy9zeXMvX2NwdXNldC5oIC91c3Ivc3JjL3N5cy9zeXMvX2JpdHNldC5oIFwKKyAgL3Vz
ci9zcmMvc3lzL3N5cy9fc3guaCAvdXNyL3NyYy9zeXMvc3lzL19ybWxvY2suaCBcCisgIC91c3Iv
c3JjL3N5cy9zeXMvdm1tZXRlci5oIC91c3Ivc3JjL3N5cy9zeXMvcmVzb3VyY2UuaCBtYWNoaW5l
L3BjcHUuaCBcCisgIG1hY2hpbmUvYXRvbWljLmggL3Vzci9zcmMvc3lzL3N5cy9zZWxpbmZvLmgg
L3Vzci9zcmMvc3lzL3N5cy9ldmVudC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zeXNjdGwuaCAv
dXNyL3NyYy9zeXMvc3lzL3NvY2tldC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9faW92ZWMuaCAv
dXNyL3NyYy9zeXMvc3lzL19zb2NrYWRkcl9zdG9yYWdlLmggXAorICAvdXNyL3NyYy9zeXMvbmV0
L2lmLmggL3Vzci9zcmMvc3lzL25ldC9pZl92YXIuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbWJ1
Zi5oIC91c3Ivc3JjL3N5cy9zeXMvc3lzdG0uaCBtYWNoaW5lL2NwdWZ1bmMuaCBcCisgIC91c3Iv
c3JjL3N5cy9zeXMvY2FsbG91dC5oIC91c3Ivc3JjL3N5cy9zeXMvX2NhbGxvdXQuaCBcCisgIC91
c3Ivc3JjL3N5cy9zeXMvc3RkaW50LmggbWFjaGluZS9fc3RkaW50LmggeDg2L19zdGRpbnQuaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvbGlia2Vybi5oIC91c3Ivc3JjL3N5cy92bS91bWEuaCBcCisg
IC91c3Ivc3JjL3N5cy9zeXMvYnVmX3JpbmcuaCBtYWNoaW5lL2NwdS5oIG1hY2hpbmUvcHNsLmgg
eDg2L3BzbC5oIFwKKyAgbWFjaGluZS9mcmFtZS5oIHg4Ni9mcmFtZS5oIG1hY2hpbmUvc2VnbWVu
dHMuaCB4ODYvc2VnbWVudHMuaCBcCisgIC91c3Ivc3JjL3N5cy9uZXQvdm5ldC5oIC91c3Ivc3Jj
L3N5cy9zeXMvY291bnRlci5oIG1hY2hpbmUvY291bnRlci5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5
cy9tdXRleC5oIC91c3Ivc3JjL3N5cy9zeXMvc3guaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3Rh
c2suaCAvdXNyL3NyYy9zeXMvbmV0L2FsdHEvaWZfYWx0cS5oIFwKKyAgL3Vzci9zcmMvc3lzL25l
dC9pZnEuaCBtYWNoaW5lL2J1cy5oIHg4Ni9idXMuaCBtYWNoaW5lL19idXMuaCBcCisgIG1hY2hp
bmUvYnVzX2RtYS5oIC91c3Ivc3JjL3N5cy9zeXMvYnVzX2RtYS5oIFwKKyAgL3Vzci9zcmMvc3lz
L3N5cy9fYnVzX2RtYS5oIC91c3Ivc3JjL3N5cy9zeXMvcmVmY291bnQuaCBcCisgIC91c3Ivc3Jj
L3N5cy9zeXMvbGltaXRzLmggXAorICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxl
cy9uZXRtYXAvLi4vLi4vbmV0L25ldG1hcC5oIFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAv
c3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX2tlcm4uaCBcCisgIC91
c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9kZXYvbmV0bWFw
L25ldG1hcF9tYnEuaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25l
dG1hcC8uLi8uLi9kZXYvbmV0bWFwL25ldG1hcF9tZW0yLmgKZGlmZiAtdSAtciAtTiB1c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9vZmZsb2FkaW5ncy5vIC91c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9vZmZsb2FkaW5ncy5vCi0tLSB1c3Iv
c3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9vZmZsb2FkaW5ncy5vCTE5NzAt
MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvLmRlcGVuZC5uZXRtYXBfb2ZmbG9hZGluZ3MubwkyMDE2LTExLTIzIDE3OjA1OjM5Ljky
MzU4MDAwMCArMDAwMApAQCAtMCwwICsxLDQ0IEBACituZXRtYXBfb2ZmbG9hZGluZ3MubzogXAor
ICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2L25l
dG1hcC9uZXRtYXBfb2ZmbG9hZGluZ3MuYyBcCisgIC91c3Ivc3JjL3N5cy9zeXMvY2RlZnMuaCAv
dXNyL3NyYy9zeXMvc3lzL3R5cGVzLmggbWFjaGluZS9lbmRpYW4uaCBcCisgIHg4Ni9lbmRpYW4u
aCAvdXNyL3NyYy9zeXMvc3lzL190eXBlcy5oIG1hY2hpbmUvX3R5cGVzLmggeDg2L190eXBlcy5o
IFwKKyAgbWFjaGluZS9fbGltaXRzLmggeDg2L19saW1pdHMuaCAvdXNyL3NyYy9zeXMvc3lzL19w
dGhyZWFkdHlwZXMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3N0ZGludC5oIC91c3Ivc3JjL3N5
cy9zeXMvc2VsZWN0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zaWdzZXQuaCAvdXNyL3NyYy9z
eXMvc3lzL190aW1ldmFsLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3RpbWVzcGVjLmggL3Vzci9z
cmMvc3lzL3N5cy9fdGltZXNwZWMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvZXJybm8uaCAvdXNy
L3NyYy9zeXMvc3lzL3BhcmFtLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19udWxsLmggL3Vzci9z
cmMvc3lzL3N5cy9zeXNsaW1pdHMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvdGltZS5oIC91c3Iv
c3JjL3N5cy9zeXMvcHJpb3JpdHkuaCBtYWNoaW5lL3BhcmFtLmggXAorICBtYWNoaW5lL19hbGln
bi5oIHg4Ni9fYWxpZ24uaCAvdXNyL3NyYy9zeXMvc3lzL2tlcm5lbC5oIFwKKyAgL3Vzci9zcmMv
c3lzL3N5cy9saW5rZXJfc2V0LmggL3Vzci9zcmMvc3lzL3N5cy9xdWV1ZS5oIFwKKyAgL3Vzci9z
cmMvc3lzL3N5cy9zb2NraW8uaCAvdXNyL3NyYy9zeXMvc3lzL2lvY2NvbS5oIFwKKyAgL3Vzci9z
cmMvc3lzL3N5cy9tYWxsb2MuaCAvdXNyL3NyYy9zeXMvc3lzL19sb2NrLmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL19tdXRleC5oIC91c3Ivc3JjL3N5cy9zeXMvc29ja2V0dmFyLmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL3NlbGluZm8uaCAvdXNyL3NyYy9zeXMvc3lzL2V2ZW50LmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL29zZC5oIC91c3Ivc3JjL3N5cy9zeXMvX3N4LmggXAorICAvdXNyL3NyYy9z
eXMvc3lzL3NvY2tidWYuaCAvdXNyL3NyYy9zeXMvc3lzL190YXNrLmggXAorICAvdXNyL3NyYy9z
eXMvc3lzL3NvY2tzdGF0ZS5oIC91c3Ivc3JjL3N5cy9zeXMvY2FwcmlnaHRzLmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL3NvY2tvcHQuaCAvdXNyL3NyYy9zeXMvc3lzL3NvY2tldC5oIFwKKyAgL3Vz
ci9zcmMvc3lzL3N5cy9faW92ZWMuaCAvdXNyL3NyYy9zeXMvc3lzL19zb2NrYWRkcl9zdG9yYWdl
LmggXAorICAvdXNyL3NyYy9zeXMvbmV0L2lmLmggL3Vzci9zcmMvc3lzL25ldC9pZl92YXIuaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvbWJ1Zi5oIC91c3Ivc3JjL3N5cy9zeXMvc3lzdG0uaCBtYWNo
aW5lL2F0b21pYy5oIFwKKyAgbWFjaGluZS9jcHVmdW5jLmggL3Vzci9zcmMvc3lzL3N5cy9jYWxs
b3V0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19jYWxsb3V0LmggL3Vzci9zcmMvc3lzL3N5cy9z
dGRpbnQuaCBcCisgIG1hY2hpbmUvX3N0ZGludC5oIHg4Ni9fc3RkaW50LmggL3Vzci9zcmMvc3lz
L3N5cy9saWJrZXJuLmggXAorICAvdXNyL3NyYy9zeXMvdm0vdW1hLmggL3Vzci9zcmMvc3lzL3N5
cy9zZHQuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvYnVmX3JpbmcuaCBtYWNoaW5lL2NwdS5oIG1h
Y2hpbmUvcHNsLmggeDg2L3BzbC5oIFwKKyAgbWFjaGluZS9mcmFtZS5oIHg4Ni9mcmFtZS5oIG1h
Y2hpbmUvc2VnbWVudHMuaCB4ODYvc2VnbWVudHMuaCBcCisgIC91c3Ivc3JjL3N5cy9uZXQvdm5l
dC5oIC91c3Ivc3JjL3N5cy9zeXMvY291bnRlci5oIG1hY2hpbmUvY291bnRlci5oIFwKKyAgL3Vz
ci9zcmMvc3lzL3N5cy9wY3B1LmggL3Vzci9zcmMvc3lzL3N5cy9fY3B1c2V0LmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL19iaXRzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL19ybWxvY2suaCBcCisgIC91
c3Ivc3JjL3N5cy9zeXMvdm1tZXRlci5oIC91c3Ivc3JjL3N5cy9zeXMvcmVzb3VyY2UuaCBtYWNo
aW5lL3BjcHUuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbG9jay5oIC91c3Ivc3JjL3N5cy9zeXMv
a3RyX2NsYXNzLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL211dGV4LmggL3Vzci9zcmMvc3lzL3N5
cy9sb2NrX3Byb2ZpbGUuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbG9ja3N0YXQuaCAvdXNyL3Ny
Yy9zeXMvc3lzL3J3bG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fcndsb2NrLmggL3Vzci9z
cmMvc3lzL3N5cy9zeC5oIFwKKyAgL3Vzci9zcmMvc3lzL25ldC9hbHRxL2lmX2FsdHEuaCAvdXNy
L3NyYy9zeXMvbmV0L2lmcS5oIG1hY2hpbmUvYnVzLmggXAorICB4ODYvYnVzLmggbWFjaGluZS9f
YnVzLmggbWFjaGluZS9idXNfZG1hLmggL3Vzci9zcmMvc3lzL3N5cy9idXNfZG1hLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL19idXNfZG1hLmggL3Vzci9zcmMvc3lzL3N5cy9lbmRpYW4uaCBcCisg
IC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9uZXQvbmV0
bWFwLmggXAorICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4v
Li4vZGV2L25ldG1hcC9uZXRtYXBfa2Vybi5oIFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAv
c3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX21icS5oCmRpZmYgLXUg
LXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXBfcGlwZS5vIC91
c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9waXBlLm8KLS0tIHVzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFwX3BpcGUubwkxOTcwLTAxLTAxIDAx
OjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5k
ZXBlbmQubmV0bWFwX3BpcGUubwkyMDE2LTExLTIzIDE3OjA1OjQwLjIzMjAzMjAwMCArMDAwMApA
QCAtMCwwICsxLDQzIEBACituZXRtYXBfcGlwZS5vOiBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0
bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9kZXYvbmV0bWFwL25ldG1hcF9waXBlLmMgXAor
ICAvdXNyL3NyYy9zeXMvc3lzL2NkZWZzLmggL3Vzci9zcmMvc3lzL3N5cy90eXBlcy5oIG1hY2hp
bmUvZW5kaWFuLmggXAorICB4ODYvZW5kaWFuLmggL3Vzci9zcmMvc3lzL3N5cy9fdHlwZXMuaCBt
YWNoaW5lL190eXBlcy5oIHg4Ni9fdHlwZXMuaCBcCisgIG1hY2hpbmUvX2xpbWl0cy5oIHg4Ni9f
bGltaXRzLmggL3Vzci9zcmMvc3lzL3N5cy9fcHRocmVhZHR5cGVzLmggXAorICAvdXNyL3NyYy9z
eXMvc3lzL19zdGRpbnQuaCAvdXNyL3NyYy9zeXMvc3lzL3NlbGVjdC5oIFwKKyAgL3Vzci9zcmMv
c3lzL3N5cy9fc2lnc2V0LmggL3Vzci9zcmMvc3lzL3N5cy9fdGltZXZhbC5oIFwKKyAgL3Vzci9z
cmMvc3lzL3N5cy90aW1lc3BlYy5oIC91c3Ivc3JjL3N5cy9zeXMvX3RpbWVzcGVjLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL2Vycm5vLmggL3Vzci9zcmMvc3lzL3N5cy9wYXJhbS5oIFwKKyAgL3Vz
ci9zcmMvc3lzL3N5cy9fbnVsbC5oIC91c3Ivc3JjL3N5cy9zeXMvc3lzbGltaXRzLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL3RpbWUuaCAvdXNyL3NyYy9zeXMvc3lzL3ByaW9yaXR5LmggbWFjaGlu
ZS9wYXJhbS5oIFwKKyAgbWFjaGluZS9fYWxpZ24uaCB4ODYvX2FsaWduLmggL3Vzci9zcmMvc3lz
L3N5cy9rZXJuZWwuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbGlua2VyX3NldC5oIC91c3Ivc3Jj
L3N5cy9zeXMvcXVldWUuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbWFsbG9jLmggL3Vzci9zcmMv
c3lzL3N5cy9fbG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fbXV0ZXguaCAvdXNyL3NyYy9z
eXMvc3lzL3BvbGwuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbG9jay5oIC91c3Ivc3JjL3N5cy9z
eXMva3RyX2NsYXNzLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3J3bG9jay5oIC91c3Ivc3JjL3N5
cy9zeXMvX3J3bG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9sb2NrX3Byb2ZpbGUuaCAvdXNy
L3NyYy9zeXMvc3lzL2xvY2tzdGF0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3NkdC5oIC91c3Iv
c3JjL3N5cy9zeXMvcGNwdS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fY3B1c2V0LmggL3Vzci9z
cmMvc3lzL3N5cy9fYml0c2V0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zeC5oIC91c3Ivc3Jj
L3N5cy9zeXMvX3JtbG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy92bW1ldGVyLmggL3Vzci9z
cmMvc3lzL3N5cy9yZXNvdXJjZS5oIG1hY2hpbmUvcGNwdS5oIFwKKyAgbWFjaGluZS9hdG9taWMu
aCAvdXNyL3NyYy9zeXMvc3lzL3NlbGluZm8uaCAvdXNyL3NyYy9zeXMvc3lzL2V2ZW50LmggXAor
ICAvdXNyL3NyYy9zeXMvc3lzL3N5c2N0bC5oIC91c3Ivc3JjL3N5cy9zeXMvc29ja2V0LmggXAor
ICAvdXNyL3NyYy9zeXMvc3lzL19pb3ZlYy5oIC91c3Ivc3JjL3N5cy9zeXMvX3NvY2thZGRyX3N0
b3JhZ2UuaCBcCisgIC91c3Ivc3JjL3N5cy9uZXQvaWYuaCAvdXNyL3NyYy9zeXMvbmV0L2lmX3Zh
ci5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9tYnVmLmggL3Vzci9zcmMvc3lzL3N5cy9zeXN0bS5o
IG1hY2hpbmUvY3B1ZnVuYy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9jYWxsb3V0LmggL3Vzci9z
cmMvc3lzL3N5cy9fY2FsbG91dC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zdGRpbnQuaCBtYWNo
aW5lL19zdGRpbnQuaCB4ODYvX3N0ZGludC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9saWJrZXJu
LmggL3Vzci9zcmMvc3lzL3ZtL3VtYS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9idWZfcmluZy5o
IG1hY2hpbmUvY3B1LmggbWFjaGluZS9wc2wuaCB4ODYvcHNsLmggXAorICBtYWNoaW5lL2ZyYW1l
LmggeDg2L2ZyYW1lLmggbWFjaGluZS9zZWdtZW50cy5oIHg4Ni9zZWdtZW50cy5oIFwKKyAgL3Vz
ci9zcmMvc3lzL25ldC92bmV0LmggL3Vzci9zcmMvc3lzL3N5cy9jb3VudGVyLmggbWFjaGluZS9j
b3VudGVyLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL211dGV4LmggL3Vzci9zcmMvc3lzL3N5cy9z
eC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fdGFzay5oIC91c3Ivc3JjL3N5cy9uZXQvYWx0cS9p
Zl9hbHRxLmggXAorICAvdXNyL3NyYy9zeXMvbmV0L2lmcS5oIG1hY2hpbmUvYnVzLmggeDg2L2J1
cy5oIG1hY2hpbmUvX2J1cy5oIFwKKyAgbWFjaGluZS9idXNfZG1hLmggL3Vzci9zcmMvc3lzL3N5
cy9idXNfZG1hLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19idXNfZG1hLmggL3Vzci9zcmMvc3lz
L3N5cy9yZWZjb3VudC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9saW1pdHMuaCBcCisgIC91c3Iv
aG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9uZXQvbmV0bWFwLmgg
XAorICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2
L25ldG1hcC9uZXRtYXBfa2Vybi5oIFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21v
ZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX21icS5oIFwKKyAgL3Vzci9ob21l
L3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFw
X21lbTIuaApkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQu
bmV0bWFwX3B0Lm8gL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFwX3B0
Lm8KLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFwX3B0Lm8JMTk3
MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC8uZGVwZW5kLm5ldG1hcF9wdC5vCTIwMTYtMTEtMjMgMTc6MDU6NDEuMzIyNTA2MDAw
ICswMDAwCkBAIC0wLDAgKzEsNDIgQEAKK25ldG1hcF9wdC5vOiBcCisgIC91c3IvaG9tZS9zdGV2
ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9kZXYvbmV0bWFwL25ldG1hcF9wdC5j
IFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9jZGVmcy5oIC91c3Ivc3JjL3N5cy9zeXMvcGFyYW0uaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvX251bGwuaCAvdXNyL3NyYy9zeXMvc3lzL3R5cGVzLmggbWFj
aGluZS9lbmRpYW4uaCBcCisgIHg4Ni9lbmRpYW4uaCAvdXNyL3NyYy9zeXMvc3lzL190eXBlcy5o
IG1hY2hpbmUvX3R5cGVzLmggeDg2L190eXBlcy5oIFwKKyAgbWFjaGluZS9fbGltaXRzLmggeDg2
L19saW1pdHMuaCAvdXNyL3NyYy9zeXMvc3lzL19wdGhyZWFkdHlwZXMuaCBcCisgIC91c3Ivc3Jj
L3N5cy9zeXMvX3N0ZGludC5oIC91c3Ivc3JjL3N5cy9zeXMvc2VsZWN0LmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL19zaWdzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL190aW1ldmFsLmggXAorICAvdXNy
L3NyYy9zeXMvc3lzL3RpbWVzcGVjLmggL3Vzci9zcmMvc3lzL3N5cy9fdGltZXNwZWMuaCBcCisg
IC91c3Ivc3JjL3N5cy9zeXMvc3lzbGltaXRzLmggL3Vzci9zcmMvc3lzL3N5cy9lcnJuby5oIFwK
KyAgL3Vzci9zcmMvc3lzL3N5cy90aW1lLmggL3Vzci9zcmMvc3lzL3N5cy9wcmlvcml0eS5oIG1h
Y2hpbmUvcGFyYW0uaCBcCisgIG1hY2hpbmUvX2FsaWduLmggeDg2L19hbGlnbi5oIC91c3Ivc3Jj
L3N5cy9zeXMva2VybmVsLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2xpbmtlcl9zZXQuaCAvdXNy
L3NyYy9zeXMvc3lzL3F1ZXVlLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3NlbGluZm8uaCAvdXNy
L3NyYy9zeXMvc3lzL2V2ZW50LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3NvY2tldC5oIC91c3Iv
c3JjL3N5cy9zeXMvX2lvdmVjLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zb2NrYWRkcl9zdG9y
YWdlLmggL3Vzci9zcmMvc3lzL25ldC9pZi5oIFwKKyAgL3Vzci9zcmMvc3lzL25ldC9pZl92YXIu
aCAvdXNyL3NyYy9zeXMvc3lzL21idWYuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvc3lzdG0uaCBt
YWNoaW5lL2F0b21pYy5oIG1hY2hpbmUvY3B1ZnVuYy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9j
YWxsb3V0LmggL3Vzci9zcmMvc3lzL3N5cy9fY2FsbG91dC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5
cy9zdGRpbnQuaCBtYWNoaW5lL19zdGRpbnQuaCB4ODYvX3N0ZGludC5oIFwKKyAgL3Vzci9zcmMv
c3lzL3N5cy9saWJrZXJuLmggL3Vzci9zcmMvc3lzL3ZtL3VtYS5oIFwKKyAgL3Vzci9zcmMvc3lz
L3N5cy9tYWxsb2MuaCAvdXNyL3NyYy9zeXMvc3lzL19sb2NrLmggXAorICAvdXNyL3NyYy9zeXMv
c3lzL19tdXRleC5oIC91c3Ivc3JjL3N5cy9zeXMvc2R0LmggXAorICAvdXNyL3NyYy9zeXMvc3lz
L2J1Zl9yaW5nLmggbWFjaGluZS9jcHUuaCBtYWNoaW5lL3BzbC5oIHg4Ni9wc2wuaCBcCisgIG1h
Y2hpbmUvZnJhbWUuaCB4ODYvZnJhbWUuaCBtYWNoaW5lL3NlZ21lbnRzLmggeDg2L3NlZ21lbnRz
LmggXAorICAvdXNyL3NyYy9zeXMvbmV0L3ZuZXQuaCAvdXNyL3NyYy9zeXMvc3lzL2NvdW50ZXIu
aCBtYWNoaW5lL2NvdW50ZXIuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvcGNwdS5oIC91c3Ivc3Jj
L3N5cy9zeXMvX2NwdXNldC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fYml0c2V0LmggL3Vzci9z
cmMvc3lzL3N5cy9fc3guaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3JtbG9jay5oIC91c3Ivc3Jj
L3N5cy9zeXMvdm1tZXRlci5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9yZXNvdXJjZS5oIG1hY2hp
bmUvcGNwdS5oIC91c3Ivc3JjL3N5cy9zeXMvbG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9r
dHJfY2xhc3MuaCAvdXNyL3NyYy9zeXMvc3lzL211dGV4LmggXAorICAvdXNyL3NyYy9zeXMvc3lz
L2xvY2tfcHJvZmlsZS5oIC91c3Ivc3JjL3N5cy9zeXMvbG9ja3N0YXQuaCBcCisgIC91c3Ivc3Jj
L3N5cy9zeXMvcndsb2NrLmggL3Vzci9zcmMvc3lzL3N5cy9fcndsb2NrLmggXAorICAvdXNyL3Ny
Yy9zeXMvc3lzL3N4LmggL3Vzci9zcmMvc3lzL3N5cy9fdGFzay5oIFwKKyAgL3Vzci9zcmMvc3lz
L25ldC9hbHRxL2lmX2FsdHEuaCAvdXNyL3NyYy9zeXMvbmV0L2lmcS5oIG1hY2hpbmUvYnVzLmgg
XAorICB4ODYvYnVzLmggbWFjaGluZS9fYnVzLmggbWFjaGluZS9idXNfZG1hLmggL3Vzci9zcmMv
c3lzL3N5cy9idXNfZG1hLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19idXNfZG1hLmggXAorICAv
dXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vbmV0L25ldG1h
cC5oIFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4u
L2Rldi9uZXRtYXAvbmV0bWFwX2tlcm4uaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5
cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9kZXYvbmV0bWFwL25ldG1hcF9tYnEuaCBcCisgIC91c3Iv
aG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9uZXQvbmV0bWFwX3Zp
cnQuaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8u
Li9kZXYvbmV0bWFwL25ldG1hcF9tZW0yLmgKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1
bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF92YWxlLm8gL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwLy5kZXBlbmQubmV0bWFwX3ZhbGUubwotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
LmRlcGVuZC5uZXRtYXBfdmFsZS5vCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw
CisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXBfdmFsZS5vCTIw
MTYtMTEtMjMgMTc6MDU6MzguODA0NTI5MDAwICswMDAwCkBAIC0wLDAgKzEsNTAgQEAKK25ldG1h
cF92YWxlLm86IFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFw
Ly4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX3ZhbGUuYyBcCisgIC91c3Ivc3JjL3N5cy9zeXMvY2Rl
ZnMuaCAvdXNyL3NyYy9zeXMvc3lzL3R5cGVzLmggbWFjaGluZS9lbmRpYW4uaCBcCisgIHg4Ni9l
bmRpYW4uaCAvdXNyL3NyYy9zeXMvc3lzL190eXBlcy5oIG1hY2hpbmUvX3R5cGVzLmggeDg2L190
eXBlcy5oIFwKKyAgbWFjaGluZS9fbGltaXRzLmggeDg2L19saW1pdHMuaCAvdXNyL3NyYy9zeXMv
c3lzL19wdGhyZWFkdHlwZXMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3N0ZGludC5oIC91c3Iv
c3JjL3N5cy9zeXMvc2VsZWN0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zaWdzZXQuaCAvdXNy
L3NyYy9zeXMvc3lzL190aW1ldmFsLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3RpbWVzcGVjLmgg
L3Vzci9zcmMvc3lzL3N5cy9fdGltZXNwZWMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvZXJybm8u
aCAvdXNyL3NyYy9zeXMvc3lzL3BhcmFtLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19udWxsLmgg
L3Vzci9zcmMvc3lzL3N5cy9zeXNsaW1pdHMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvdGltZS5o
IC91c3Ivc3JjL3N5cy9zeXMvcHJpb3JpdHkuaCBtYWNoaW5lL3BhcmFtLmggXAorICBtYWNoaW5l
L19hbGlnbi5oIHg4Ni9fYWxpZ24uaCAvdXNyL3NyYy9zeXMvc3lzL2tlcm5lbC5oIFwKKyAgL3Vz
ci9zcmMvc3lzL3N5cy9saW5rZXJfc2V0LmggL3Vzci9zcmMvc3lzL3N5cy9xdWV1ZS5oIFwKKyAg
L3Vzci9zcmMvc3lzL3N5cy9jb25mLmggL3Vzci9zcmMvc3lzL3N5cy9ldmVudGhhbmRsZXIuaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvbG9jay5oIC91c3Ivc3JjL3N5cy9zeXMvX2xvY2suaCBcCisg
IC91c3Ivc3JjL3N5cy9zeXMva3RyX2NsYXNzLmggL3Vzci9zcmMvc3lzL3N5cy9rdHIuaCBcCisg
IC91c3Ivc3JjL3N5cy9zeXMvX2NwdXNldC5oIC91c3Ivc3JjL3N5cy9zeXMvX2JpdHNldC5oIFwK
KyAgL3Vzci9zcmMvc3lzL3N5cy9tdXRleC5oIC91c3Ivc3JjL3N5cy9zeXMvX211dGV4LmggXAor
ICAvdXNyL3NyYy9zeXMvc3lzL3BjcHUuaCAvdXNyL3NyYy9zeXMvc3lzL19zeC5oIFwKKyAgL3Vz
ci9zcmMvc3lzL3N5cy9fcm1sb2NrLmggL3Vzci9zcmMvc3lzL3N5cy92bW1ldGVyLmggXAorICAv
dXNyL3NyYy9zeXMvc3lzL3Jlc291cmNlLmggbWFjaGluZS9wY3B1LmggXAorICAvdXNyL3NyYy9z
eXMvc3lzL2xvY2tfcHJvZmlsZS5oIC91c3Ivc3JjL3N5cy9zeXMvbG9ja3N0YXQuaCBcCisgIC91
c3Ivc3JjL3N5cy9zeXMvc2R0LmggbWFjaGluZS9hdG9taWMuaCBtYWNoaW5lL2NwdWZ1bmMuaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvc29ja2lvLmggL3Vzci9zcmMvc3lzL3N5cy9pb2Njb20uaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvc29ja2V0dmFyLmggL3Vzci9zcmMvc3lzL3N5cy9zZWxpbmZv
LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2V2ZW50LmggL3Vzci9zcmMvc3lzL3N5cy9vc2QuaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvc29ja2J1Zi5oIC91c3Ivc3JjL3N5cy9zeXMvX3Rhc2suaCBc
CisgIC91c3Ivc3JjL3N5cy9zeXMvc29ja3N0YXRlLmggL3Vzci9zcmMvc3lzL3N5cy9jYXByaWdo
dHMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvc29ja29wdC5oIC91c3Ivc3JjL3N5cy9zeXMvbWFs
bG9jLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3BvbGwuaCAvdXNyL3NyYy9zeXMvc3lzL3J3bG9j
ay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fcndsb2NrLmggL3Vzci9zcmMvc3lzL3N5cy9zb2Nr
ZXQuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX2lvdmVjLmggL3Vzci9zcmMvc3lzL3N5cy9fc29j
a2FkZHJfc3RvcmFnZS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zeXNjdGwuaCAvdXNyL3NyYy9z
eXMvbmV0L2lmLmggXAorICAvdXNyL3NyYy9zeXMvbmV0L2lmX3Zhci5oIC91c3Ivc3JjL3N5cy9z
eXMvbWJ1Zi5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zeXN0bS5oIC91c3Ivc3JjL3N5cy9zeXMv
Y2FsbG91dC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fY2FsbG91dC5oIC91c3Ivc3JjL3N5cy9z
eXMvc3RkaW50LmggXAorICBtYWNoaW5lL19zdGRpbnQuaCB4ODYvX3N0ZGludC5oIC91c3Ivc3Jj
L3N5cy9zeXMvbGlia2Vybi5oIFwKKyAgL3Vzci9zcmMvc3lzL3ZtL3VtYS5oIC91c3Ivc3JjL3N5
cy9zeXMvYnVmX3JpbmcuaCBtYWNoaW5lL2NwdS5oIFwKKyAgbWFjaGluZS9wc2wuaCB4ODYvcHNs
LmggbWFjaGluZS9mcmFtZS5oIHg4Ni9mcmFtZS5oIG1hY2hpbmUvc2VnbWVudHMuaCBcCisgIHg4
Ni9zZWdtZW50cy5oIC91c3Ivc3JjL3N5cy9uZXQvdm5ldC5oIC91c3Ivc3JjL3N5cy9zeXMvY291
bnRlci5oIFwKKyAgbWFjaGluZS9jb3VudGVyLmggL3Vzci9zcmMvc3lzL3N5cy9zeC5oIFwKKyAg
L3Vzci9zcmMvc3lzL25ldC9hbHRxL2lmX2FsdHEuaCAvdXNyL3NyYy9zeXMvbmV0L2lmcS5oIFwK
KyAgL3Vzci9zcmMvc3lzL25ldC9icGYuaCBtYWNoaW5lL2J1cy5oIHg4Ni9idXMuaCBtYWNoaW5l
L19idXMuaCBcCisgIG1hY2hpbmUvYnVzX2RtYS5oIC91c3Ivc3JjL3N5cy9zeXMvYnVzX2RtYS5o
IFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fYnVzX2RtYS5oIC91c3Ivc3JjL3N5cy9zeXMvZW5kaWFu
LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3JlZmNvdW50LmggL3Vzci9zcmMvc3lzL3N5cy9saW1p
dHMuaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8u
Li9uZXQvbmV0bWFwLmggXAorICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9u
ZXRtYXAvLi4vLi4vZGV2L25ldG1hcC9uZXRtYXBfa2Vybi5oIFwKKyAgL3Vzci9ob21lL3N0ZXZl
bi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX21icS5o
IFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rl
di9uZXRtYXAvbmV0bWFwX21lbTIuaApkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwLy5naXRpZ25vcmUgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5naXRpZ25vcmUK
LS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5naXRpZ25vcmUJMTk3MC0wMS0wMSAwMTow
MDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZ2l0
aWdub3JlCTIwMTYtMTEtMjMgMTY6NTc6NTcuODU2NjM5MDAwICswMDAwCkBAIC0wLDAgKzEsMyBA
QAorKgorIU1ha2VmaWxlCishLmdpdGlnbm9yZQpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21v
ZHVsZXMvbmV0bWFwL01ha2VmaWxlIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9NYWtlZmls
ZQotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvTWFrZWZpbGUJMjAxNi0wOS0yOSAwMDoy
NDo1My4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9NYWtl
ZmlsZQkyMDE2LTExLTIzIDE2OjU3OjU3Ljg1NjkzNDAwMCArMDAwMApAQCAtMSwxMyArMSwxNiBA
QAotIyAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL21vZHVsZXMvbmV0bWFwL01ha2VmaWxlIDI3
MjEwOCAyMDE0LTA5LTI1IDE0OjI1OjM4WiBsdWlnaSAkCisjICRGcmVlQlNEJAogIwogIyBDb21w
aWxlIG5ldG1hcCBhcyBhIG1vZHVsZSwgdXNlZnVsIGlmIHlvdSB3YW50IGEgbmV0bWFwIGJyaWRn
ZQogIyBvciBsb2FkYWJsZSBkcml2ZXJzLgogCisuaW5jbHVkZSA8YnNkLm93bi5taz4gIyBGcmVl
QlNEIDEwIGFuZCBlYXJsaWVyCisjIC5pbmNsdWRlICIke1NZU0RJUn0vY29uZi9rZXJuLm9wdHMu
bWsiCisKIC5QQVRIOiAkey5DVVJESVJ9Ly4uLy4uL2Rldi9uZXRtYXAKIC5QQVRILmg6ICR7LkNV
UkRJUn0vLi4vLi4vbmV0Ci1DRkxBR1MgKz0gLUkkey5DVVJESVJ9Ly4uLy4uLworQ0ZMQUdTICs9
IC1JJHsuQ1VSRElSfS8uLi8uLi8gLUQgSU5FVAogS01PRAk9IG5ldG1hcAotU1JDUwk9IGRldmlj
ZV9pZi5oIGJ1c19pZi5oIG9wdF9uZXRtYXAuaAorU1JDUwk9IGRldmljZV9pZi5oIGJ1c19pZi5o
IHBjaV9pZi5oIG9wdF9uZXRtYXAuaAogU1JDUwkrPSBuZXRtYXAuYyBuZXRtYXAuaCBuZXRtYXBf
a2Vybi5oCiBTUkNTCSs9IG5ldG1hcF9tZW0yLmMgbmV0bWFwX21lbTIuaAogU1JDUwkrPSBuZXRt
YXBfZ2VuZXJpYy5jCkBAIC0xNyw1ICsyMCw4IEBACiBTUkNTCSs9IG5ldG1hcF9vZmZsb2FkaW5n
cy5jCiBTUkNTCSs9IG5ldG1hcF9waXBlLmMKIFNSQ1MJKz0gbmV0bWFwX21vbml0b3IuYworU1JD
UwkrPSBuZXRtYXBfcHQuYworU1JDUwkrPSBpZl9wdG5ldC5jCitTUkNTCSs9IG9wdF9pbmV0Lmgg
b3B0X2luZXQ2LmgKIAogLmluY2x1ZGUgPGJzZC5rbW9kLm1rPgpkaWZmIC11IC1yIC1OIHVzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwL2J1c19pZi5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9idXNfaWYuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvYnVzX2lmLmgJMTk3MC0w
MS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25l
dG1hcC9idXNfaWYuaAkyMDE2LTExLTIzIDE3OjA1OjMzLjg1NzI3NTAwMCArMDAwMApAQCAtMCww
ICsxLDEwNDAgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcHJvZHVjZWQgYXV0b21hdGljYWxseS4K
KyAqIERvIG5vdCBtb2RpZnkgYW55dGhpbmcgaW4gaGVyZSBieSBoYW5kLgorICoKKyAqIENyZWF0
ZWQgZnJvbSBzb3VyY2UgZmlsZQorICogICAvdXNyL3NyYy9zeXMva2Vybi9idXNfaWYubQorICog
d2l0aAorICogICBtYWtlb2Jqb3BzLmF3aworICoKKyAqIFNlZSB0aGUgc291cmNlIGZpbGUgZm9y
IGxlZ2FsIGluZm9ybWF0aW9uCisgKi8KKworLyoqCisgKiBAZGVmZ3JvdXAgQlVTIGJ1cyAtIEtP
YmogbWV0aG9kcyBmb3IgZHJpdmVycyBvZiBkZXZpY2VzIHdpdGggY2hpbGRyZW4KKyAqIEBicmll
ZiBBIHNldCBvZiBtZXRob2RzIHJlcXVpcmVkIGRldmljZSBkcml2ZXJzIHRoYXQgc3VwcG9ydAor
ICogY2hpbGQgZGV2aWNlcy4KKyAqIEB7CisgKi8KKworI2lmbmRlZiBfYnVzX2lmX2hfCisjZGVm
aW5lIF9idXNfaWZfaF8KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJV
U19QUklOVF9DSElMRCgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNf
cHJpbnRfY2hpbGRfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhl
IEJVU19QUklOVF9DSElMRCgpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgYnVzX3ByaW50X2NoaWxk
X3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkKTsKKy8qKgorICogQGJyaWVmIFByaW50
IGEgZGVzY3JpcHRpb24gb2YgYSBjaGlsZCBkZXZpY2UKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBm
cm9tIHN5c3RlbSBjb2RlIHdoaWNoIHByaW50cyBvdXQgYSBkZXNjcmlwdGlvbiBvZiBhCisgKiBk
ZXZpY2UuIEl0IHNob3VsZCBkZXNjcmliZSB0aGUgYXR0YWNobWVudCB0aGF0IHRoZSBjaGlsZCBo
YXMgd2l0aAorICogdGhlIHBhcmVudC4gRm9yIGluc3RhbmNlIHRoZSBUdXJib0xhc2VyIGJ1cyBw
cmludHMgd2hpY2ggbm9kZSB0aGUKKyAqIGRldmljZSBpcyBhdHRhY2hlZCB0by4gU2VlIGJ1c19n
ZW5lcmljX3ByaW50X2NoaWxkKCkgZm9yIG1vcmUgCisgKiBpbmZvcm1hdGlvbi4KKyAqCisgKiBA
cGFyYW0gX2RldgkJdGhlIGRldmljZSB3aG9zZSBjaGlsZCBpcyBiZWluZyBwcmludGVkCisgKiBA
cGFyYW0gX2NoaWxkCXRoZSBjaGlsZCBkZXZpY2UgdG8gZGVzY3JpYmUKKyAqCisgKiBAcmV0dXJu
cwkJdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIG91dHB1dC4KKyAqLworCitzdGF0aWMgX19pbmxp
bmUgaW50IEJVU19QUklOVF9DSElMRChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQpCit7
CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYpLT5vcHMsYnVzX3By
aW50X2NoaWxkKTsKKwlyZXR1cm4gKChidXNfcHJpbnRfY2hpbGRfdCAqKSBfbSkoX2RldiwgX2No
aWxkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJVU19QUk9C
RV9OT01BVENIKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c19wcm9i
ZV9ub21hdGNoX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBC
VVNfUFJPQkVfTk9NQVRDSCgpIG1ldGhvZCAqLwordHlwZWRlZiB2b2lkIGJ1c19wcm9iZV9ub21h
dGNoX3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkKTsKKy8qKgorICogQGJyaWVmIFBy
aW50IGEgbm90aWZpY2F0aW9uIGFib3V0IGFuIHVucHJvYmVkIGNoaWxkIGRldmljZS4KKyAqCisg
KiBDYWxsZWQgZm9yIGVhY2ggY2hpbGQgZGV2aWNlIHRoYXQgZGlkIG5vdCBzdWNjZWVkIGluIHBy
b2JpbmcgZm9yIGEKKyAqIGRyaXZlci4KKyAqCisgKiBAcGFyYW0gX2RldgkJdGhlIGRldmljZSB3
aG9zZSBjaGlsZCB3YXMgYmVpbmcgcHJvYmVkCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBjaGlsZCBk
ZXZpY2Ugd2hpY2ggZmFpbGVkIHRvIHByb2JlCisgKi8gICAKKworc3RhdGljIF9faW5saW5lIHZv
aWQgQlVTX1BST0JFX05PTUFUQ0goZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkKQorewor
CWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClfZGV2KS0+b3BzLGJ1c19wcm9i
ZV9ub21hdGNoKTsKKwkoKGJ1c19wcm9iZV9ub21hdGNoX3QgKikgX20pKF9kZXYsIF9jaGlsZCk7
Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfUkVBRF9JVkFS
KCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c19yZWFkX2l2YXJfZGVz
YzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIEJVU19SRUFEX0lWQVIo
KSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGJ1c19yZWFkX2l2YXJfdChkZXZpY2VfdCBfZGV2LCBk
ZXZpY2VfdCBfY2hpbGQsIGludCBfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludHB0cl90ICpfcmVzdWx0KTsKKy8qKgorICogQGJyaWVmIFJlYWQgdGhlIHZhbHVlIG9mIGEg
YnVzLXNwZWNpZmljIGF0dHJpYnV0ZSBvZiBhIGRldmljZQorICoKKyAqIFRoaXMgbWV0aG9kLCBh
bG9uZyB3aXRoIEJVU19XUklURV9JVkFSKCkgbWFuYWdlcyBhIGJ1cy1zcGVjaWZpYyBzZXQKKyAq
IG9mIGluc3RhbmNlIHZhcmlhYmxlcyBvZiBhIGNoaWxkIGRldmljZS4gIFRoZSBpbnRlbnRpb24g
aXMgdGhhdAorICogZWFjaCBkaWZmZXJlbnQgdHlwZSBvZiBidXMgZGVmaW5lcyBhIHNldCBvZiBh
cHByb3ByaWF0ZSBpbnN0YW5jZQorICogdmFyaWFibGVzIChzdWNoIGFzIHBvcnRzIGFuZCBpcnFz
IGZvciBJU0EgYnVzIGV0Yy4pCisgKgorICogVGhpcyBpbmZvcm1hdGlvbiBjb3VsZCBiZSBnaXZl
biB0byB0aGUgY2hpbGQgZGV2aWNlIGFzIGEgc3RydWN0IGJ1dAorICogdGhhdCBtYWtlcyBpdCBo
YXJkIGZvciBhIGJ1cyB0byBhZGQgb3IgcmVtb3ZlIHZhcmlhYmxlcyB3aXRob3V0CisgKiBmb3Jj
aW5nIGFuIGVkaXQgYW5kIHJlY29tcGlsZSBmb3IgYWxsIGRyaXZlcnMgd2hpY2ggbWF5IG5vdCBi
ZQorICogcG9zc2libGUgZm9yIHZlbmRvciBzdXBwbGllZCBiaW5hcnkgZHJpdmVycy4KKyAqCisg
KiBUaGlzIG1ldGhvZCBjb3BpZXMgdGhlIHZhbHVlIG9mIGFuIGluc3RhbmNlIHZhcmlhYmxlIHRv
IHRoZQorICogbG9jYXRpb24gc3BlY2lmaWVkIGJ5IEBwICpfcmVzdWx0LgorICogCisgKiBAcGFy
YW0gX2RldgkJdGhlIGRldmljZSB3aG9zZSBjaGlsZCB3YXMgYmVpbmcgZXhhbWluZWQKKyAqIEBw
YXJhbSBfY2hpbGQJdGhlIGNoaWxkIGRldmljZSB3aG9zZSBpbnN0YW5jZSB2YXJpYWJsZSBpcwor
ICoJCQliZWluZyByZWFkCisgKiBAcGFyYW0gX2luZGV4CXRoZSBpbnN0YW5jZSB2YXJpYWJsZSB0
byByZWFkCisgKiBAcGFyYW0gX3Jlc3VsdAlhIGxvY2F0aW9uIHRvIHJlY2VpdmUgdGhlIGluc3Rh
bmNlIHZhcmlhYmxlCisgKgkJCXZhbHVlCisgKiAKKyAqIEByZXR2YWwgMAkJc3VjY2VzcworICog
QHJldHZhbCBFTk9FTlQJbm8gc3VjaCBpbnN0YW5jZSB2YXJpYWJsZSBpcyBzdXBwb3J0ZWQgYnkg
QHAKKyAqCQkJX2RldiAKKyAqLworCitzdGF0aWMgX19pbmxpbmUgaW50IEJVU19SRUFEX0lWQVIo
ZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkLCBpbnQgX2luZGV4LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnRwdHJfdCAqX3Jlc3VsdCkKK3sKKwlrb2Jqb3BfdCBf
bTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfcmVhZF9pdmFyKTsKKwly
ZXR1cm4gKChidXNfcmVhZF9pdmFyX3QgKikgX20pKF9kZXYsIF9jaGlsZCwgX2luZGV4LCBfcmVz
dWx0KTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJVU19XUklU
RV9JVkFSKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c193cml0ZV9p
dmFyX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBCVVNfV1JJ
VEVfSVZBUigpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgYnVzX3dyaXRlX2l2YXJfdChkZXZpY2Vf
dCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsIGludCBfaW5keCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludHB0cl90IF92YWx1ZSk7CisvKioKKyAqIEBicmllZiBXcml0ZSB0aGUgdmFs
dWUgb2YgYSBidXMtc3BlY2lmaWMgYXR0cmlidXRlIG9mIGEgZGV2aWNlCisgKiAKKyAqIFRoaXMg
bWV0aG9kIHNldHMgdGhlIHZhbHVlIG9mIGFuIGluc3RhbmNlIHZhcmlhYmxlIHRvIEBwIF92YWx1
ZS4KKyAqIAorICogQHBhcmFtIF9kZXYJCXRoZSBkZXZpY2Ugd2hvc2UgY2hpbGQgd2FzIGJlaW5n
IHVwZGF0ZWQKKyAqIEBwYXJhbSBfY2hpbGQJdGhlIGNoaWxkIGRldmljZSB3aG9zZSBpbnN0YW5j
ZSB2YXJpYWJsZSBpcworICoJCQliZWluZyB3cml0dGVuCisgKiBAcGFyYW0gX2luZGV4CXRoZSBp
bnN0YW5jZSB2YXJpYWJsZSB0byB3cml0ZQorICogQHBhcmFtIF92YWx1ZQl0aGUgdmFsdWUgdG8g
d3JpdGUgdG8gdGhhdCBpbnN0YW5jZSB2YXJpYWJsZQorICogCisgKiBAcmV0dmFsIDAJCXN1Y2Nl
c3MKKyAqIEByZXR2YWwgRU5PRU5UCW5vIHN1Y2ggaW5zdGFuY2UgdmFyaWFibGUgaXMgc3VwcG9y
dGVkIGJ5IEBwCisgKgkJCV9kZXYgCisgKiBAcmV0dmFsIEVJTlZBTAl0aGUgaW5zdGFuY2UgdmFy
aWFibGUgd2FzIHJlY29nbmlzZWQgYnV0CisgKgkJCWNvbnRhaW5zIGEgcmVhZC1vbmx5IHZhbHVl
CisgKi8KKworc3RhdGljIF9faW5saW5lIGludCBCVVNfV1JJVEVfSVZBUihkZXZpY2VfdCBfZGV2
LCBkZXZpY2VfdCBfY2hpbGQsIGludCBfaW5keCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludHB0cl90IF92YWx1ZSkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09L
VVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfd3JpdGVfaXZhcik7CisJcmV0dXJuICgoYnVzX3dy
aXRlX2l2YXJfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfaW5keCwgX3ZhbHVlKTsKK30KKworLyoq
IEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJVU19DSElMRF9ERUxFVEVEKCkgbWV0
aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c19jaGlsZF9kZWxldGVkX2Rlc2M7
CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBCVVNfQ0hJTERfREVMRVRF
RCgpIG1ldGhvZCAqLwordHlwZWRlZiB2b2lkIGJ1c19jaGlsZF9kZWxldGVkX3QoZGV2aWNlX3Qg
X2RldiwgZGV2aWNlX3QgX2NoaWxkKTsKKy8qKgorICogQGJyaWVmIE5vdGlmeSBhIGJ1cyB0aGF0
IGEgY2hpbGQgd2FzIGRlbGV0ZWQKKyAqCisgKiBDYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBk
ZXZpY2VfZGVsZXRlX2NoaWxkKCkgdG8gYWxsb3cgdGhlIHBhcmVudAorICogdG8gdGVhcmRvd24g
YW55IGJ1cy1zcGVjaWZpYyBzdGF0ZSBmb3IgdGhlIGNoaWxkLgorICogCisgKiBAcGFyYW0gX2Rl
dgkJdGhlIGRldmljZSB3aG9zZSBjaGlsZCBpcyBiZWluZyBkZWxldGVkCisgKiBAcGFyYW0gX2No
aWxkCXRoZSBjaGlsZCBkZXZpY2Ugd2hpY2ggaXMgYmVpbmcgZGVsZXRlZAorICovCisKK3N0YXRp
YyBfX2lubGluZSB2b2lkIEJVU19DSElMRF9ERUxFVEVEKGRldmljZV90IF9kZXYsIGRldmljZV90
IF9jaGlsZCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2Rldikt
Pm9wcyxidXNfY2hpbGRfZGVsZXRlZCk7CisJKChidXNfY2hpbGRfZGVsZXRlZF90ICopIF9tKShf
ZGV2LCBfY2hpbGQpOworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUg
QlVTX0NISUxEX0RFVEFDSEVEKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNj
IGJ1c19jaGlsZF9kZXRhY2hlZF9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVu
dGluZyB0aGUgQlVTX0NISUxEX0RFVEFDSEVEKCkgbWV0aG9kICovCit0eXBlZGVmIHZvaWQgYnVz
X2NoaWxkX2RldGFjaGVkX3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkKTsKKy8qKgor
ICogQGJyaWVmIE5vdGlmeSBhIGJ1cyB0aGF0IGEgY2hpbGQgd2FzIGRldGFjaGVkCisgKgorICog
Q2FsbGVkIGFmdGVyIHRoZSBjaGlsZCdzIERFVklDRV9ERVRBQ0goKSBtZXRob2QgdG8gYWxsb3cg
dGhlIHBhcmVudAorICogdG8gcmVjbGFpbSBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBvbiBiZWhh
bGYgb2YgdGhlIGNoaWxkLgorICogCisgKiBAcGFyYW0gX2RldgkJdGhlIGRldmljZSB3aG9zZSBj
aGlsZCBjaGFuZ2VkIHN0YXRlCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBjaGlsZCBkZXZpY2Ugd2hp
Y2ggY2hhbmdlZCBzdGF0ZQorICovCisKK3N0YXRpYyBfX2lubGluZSB2b2lkIEJVU19DSElMRF9E
RVRBQ0hFRChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQpCit7CisJa29iam9wX3QgX207
CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYpLT5vcHMsYnVzX2NoaWxkX2RldGFjaGVkKTsK
KwkoKGJ1c19jaGlsZF9kZXRhY2hlZF90ICopIF9tKShfZGV2LCBfY2hpbGQpOworfQorCisvKiog
QGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgQlVTX0RSSVZFUl9BRERFRCgpIG1ldGhv
ZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfZHJpdmVyX2FkZGVkX2Rlc2M7Cisv
KiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBCVVNfRFJJVkVSX0FEREVEKCkg
bWV0aG9kICovCit0eXBlZGVmIHZvaWQgYnVzX2RyaXZlcl9hZGRlZF90KGRldmljZV90IF9kZXYs
IGRyaXZlcl90ICpfZHJpdmVyKTsKKy8qKgorICogQGJyaWVmIE5vdGlmeSBhIGJ1cyB0aGF0IGEg
bmV3IGRyaXZlciB3YXMgYWRkZWQKKyAqIAorICogQ2FsbGVkIHdoZW4gYSBuZXcgZHJpdmVyIGlz
IGFkZGVkIHRvIHRoZSBkZXZjbGFzcyB3aGljaCBvd25zIHRoaXMKKyAqIGJ1cy4gVGhlIGdlbmVy
aWMgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgYXR0ZW1wdHMgdG8gcHJvYmUgYW5kCisg
KiBhdHRhY2ggYW55IHVuLW1hdGNoZWQgY2hpbGRyZW4gb2YgdGhlIGJ1cy4KKyAqIAorICogQHBh
cmFtIF9kZXYJCXRoZSBkZXZpY2Ugd2hvc2UgZGV2Y2xhc3MgaGFkIGEgbmV3IGRyaXZlcgorICoJ
CQlhZGRlZCB0byBpdAorICogQHBhcmFtIF9kcml2ZXIJdGhlIG5ldyBkcml2ZXIgd2hpY2ggd2Fz
IGFkZGVkCisgKi8KKworc3RhdGljIF9faW5saW5lIHZvaWQgQlVTX0RSSVZFUl9BRERFRChkZXZp
Y2VfdCBfZGV2LCBkcml2ZXJfdCAqX2RyaXZlcikKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BM
T09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfZHJpdmVyX2FkZGVkKTsKKwkoKGJ1c19kcml2
ZXJfYWRkZWRfdCAqKSBfbSkoX2RldiwgX2RyaXZlcik7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVl
IGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfQUREX0NISUxEKCkgbWV0aG9kICovCitleHRlcm4gc3Ry
dWN0IGtvYmpvcF9kZXNjIGJ1c19hZGRfY2hpbGRfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlv
biBpbXBsZW1lbnRpbmcgdGhlIEJVU19BRERfQ0hJTEQoKSBtZXRob2QgKi8KK3R5cGVkZWYgZGV2
aWNlX3QgYnVzX2FkZF9jaGlsZF90KGRldmljZV90IF9kZXYsIHVfaW50IF9vcmRlciwgY29uc3Qg
Y2hhciAqX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX3VuaXQp
OworLyoqCisgKiBAYnJpZWYgQ3JlYXRlIGEgbmV3IGNoaWxkIGRldmljZQorICoKKyAqIEZvciBi
dXNzZXMgd2hpY2ggdXNlIHVzZSBkcml2ZXJzIHN1cHBvcnRpbmcgREVWSUNFX0lERU5USUZZKCkg
dG8KKyAqIGVudW1lcmF0ZSB0aGVpciBkZXZpY2VzLCB0aGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNy
ZWF0ZSBuZXcKKyAqIGRldmljZSBpbnN0YW5jZXMuIFRoZSBuZXcgZGV2aWNlIHdpbGwgYmUgYWRk
ZWQgYWZ0ZXIgdGhlIGxhc3QKKyAqIGV4aXN0aW5nIGNoaWxkIHdpdGggdGhlIHNhbWUgb3JkZXIu
IEltcGxlbWVudGF0aW9ucyBvZiBidXNfYWRkX2NoaWxkCisgKiBjYWxsIGRldmljZV9hZGRfY2hp
bGRfb3JkZXJlZCB0byBhZGQgdGhlIGNoaWxkIGFuZCBvZnRlbiBhZGQKKyAqIGEgc3VpdGFibGUg
aXZhciB0byB0aGUgZGV2aWNlIHNwZWNpZmljIHRvIHRoYXQgYnVzLgorICogCisgKiBAcGFyYW0g
X2RldgkJdGhlIGJ1cyBkZXZpY2Ugd2hpY2ggd2lsbCBiZSB0aGUgcGFyZW50IG9mIHRoZQorICoJ
CQluZXcgY2hpbGQgZGV2aWNlCisgKiBAcGFyYW0gX29yZGVyCWEgdmFsdWUgd2hpY2ggaXMgdXNl
ZCB0byBwYXJ0aWFsbHkgc29ydCB0aGUKKyAqCQkJY2hpbGRyZW4gb2YgQHAgX2RldiAtIGRldmlj
ZXMgY3JlYXRlZCB1c2luZworICoJCQlsb3dlciB2YWx1ZXMgb2YgQHAgX29yZGVyIGFwcGVhciBm
aXJzdCBpbiBAcAorICoJCQlfZGV2J3MgbGlzdCBvZiBjaGlsZHJlbgorICogQHBhcmFtIF9uYW1l
CQlkZXZjbGFzcyBuYW1lIGZvciBuZXcgZGV2aWNlIG9yIEBjIE5VTEwgaWYgbm90CisgKgkJCXNw
ZWNpZmllZAorICogQHBhcmFtIF91bml0CQl1bml0IG51bWJlciBmb3IgbmV3IGRldmljZSBvciBA
YyAtMSBpZiBub3QKKyAqCQkJc3BlY2lmaWVkCisgKi8KKworc3RhdGljIF9faW5saW5lIGRldmlj
ZV90IEJVU19BRERfQ0hJTEQoZGV2aWNlX3QgX2RldiwgdV9pbnQgX29yZGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX25hbWUsIGludCBfdW5p
dCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxi
dXNfYWRkX2NoaWxkKTsKKwlyZXR1cm4gKChidXNfYWRkX2NoaWxkX3QgKikgX20pKF9kZXYsIF9v
cmRlciwgX25hbWUsIF91bml0KTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBm
b3IgdGhlIEJVU19SRVNDQU4oKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2Mg
YnVzX3Jlc2Nhbl9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUg
QlVTX1JFU0NBTigpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgYnVzX3Jlc2Nhbl90KGRldmljZV90
IF9kZXYpOworLyoqCisgKiBAYnJpZWYgUmVzY2FuIHRoZSBidXMKKyAqCisgKiBUaGlzIG1ldGhv
ZCBpcyBjYWxsZWQgYnkgYSBwYXJlbnQgYnJpZGdlIG9yIGRldmN0bCB0byB0cmlnZ2VyIGEgYnVz
CisgKiByZXNjYW4uICBUaGUgcmVzY2FuIHNob3VsZCBkZWxldGUgZGV2aWNlcyBubyBsb25nZXIg
cHJlc2VudCBhbmQKKyAqIGVudW1lcmF0ZSBkZXZpY2VzIHRoYXQgaGF2ZSBuZXdseSBhcnJpdmVk
LgorICoKKyAqIEBwYXJhbSBfZGV2CQl0aGUgYnVzIGRldmljZQorICovCisKK3N0YXRpYyBfX2lu
bGluZSBpbnQgQlVTX1JFU0NBTihkZXZpY2VfdCBfZGV2KQoreworCWtvYmpvcF90IF9tOworCUtP
QkpPUExPT0tVUCgoKGtvYmpfdClfZGV2KS0+b3BzLGJ1c19yZXNjYW4pOworCXJldHVybiAoKGJ1
c19yZXNjYW5fdCAqKSBfbSkoX2Rldik7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0
b3IgZm9yIHRoZSBCVVNfQUxMT0NfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qg
a29iam9wX2Rlc2MgYnVzX2FsbG9jX3Jlc291cmNlX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rp
b24gaW1wbGVtZW50aW5nIHRoZSBCVVNfQUxMT0NfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK3R5cGVk
ZWYgc3RydWN0IHJlc291cmNlICogYnVzX2FsbG9jX3Jlc291cmNlX3QoZGV2aWNlX3QgX2Rldiwg
ZGV2aWNlX3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX3R5cGUsIGludCAqX3JpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcm1hbl9yZXNfdCBfc3RhcnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJtYW5fcmVzX3QgX2VuZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm1hbl9yZXNfdCBfY291bnQs
IHVfaW50IF9mbGFncyk7CisvKioKKyAqIEBicmllZiBBbGxvY2F0ZSBhIHN5c3RlbSByZXNvdXJj
ZQorICoKKyAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBjaGlsZCBkZXZpY2VzIG9mIGEgYnVz
IHRvIGFsbG9jYXRlIHJlc291cmNlcy4KKyAqIFRoZSB0eXBlcyBhcmUgZGVmaW5lZCBpbiA8bWFj
aGluZS9yZXNvdXJjZS5oPjsgdGhlIG1lYW5pbmcgb2YgdGhlCisgKiByZXNvdXJjZS1JRCBmaWVs
ZCB2YXJpZXMgZnJvbSBidXMgdG8gYnVzIChidXQgQHAgKnJpZCA9PSAwIGlzIGFsd2F5cworICog
dmFsaWQgaWYgdGhlIHJlc291cmNlIHR5cGUgaXMpLiBJZiBhIHJlc291cmNlIHdhcyBhbGxvY2F0
ZWQgYW5kIHRoZQorICogY2FsbGVyIGRpZCBub3QgdXNlIHRoZSBSRl9BQ1RJVkUgdG8gc3BlY2lm
eSB0aGF0IGl0IHNob3VsZCBiZQorICogYWN0aXZhdGVkIGltbWVkaWF0ZWx5LCB0aGUgY2FsbGVy
IGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nCisgKiBCVVNfQUNUSVZBVEVfUkVTT1VSQ0UoKSB3
aGVuIGl0IGFjdHVhbGx5IHVzZXMgdGhlIHJlc291cmNlLgorICoKKyAqIEBwYXJhbSBfZGV2CQl0
aGUgcGFyZW50IGRldmljZSBvZiBAcCBfY2hpbGQKKyAqIEBwYXJhbSBfY2hpbGQJdGhlIGRldmlj
ZSB3aGljaCBpcyByZXF1ZXN0aW5nIGFuIGFsbG9jYXRpb24KKyAqIEBwYXJhbSBfdHlwZQkJdGhl
IHR5cGUgb2YgcmVzb3VyY2UgdG8gYWxsb2NhdGUKKyAqIEBwYXJhbSBfcmlkCQlhIHBvaW50ZXIg
dG8gdGhlIHJlc291cmNlIGlkZW50aWZpZXIKKyAqIEBwYXJhbSBfc3RhcnQJaGludCBhdCB0aGUg
c3RhcnQgb2YgdGhlIHJlc291cmNlIHJhbmdlIC0gcGFzcworICoJCQlAYyAwIGZvciBhbnkgc3Rh
cnQgYWRkcmVzcworICogQHBhcmFtIF9lbmQJCWhpbnQgYXQgdGhlIGVuZCBvZiB0aGUgcmVzb3Vy
Y2UgcmFuZ2UgLSBwYXNzCisgKgkJCUBjIH4wIGZvciBhbnkgZW5kIGFkZHJlc3MKKyAqIEBwYXJh
bSBfY291bnQJaGludCBhdCB0aGUgc2l6ZSBvZiByYW5nZSByZXF1aXJlZCAtIHBhc3MgQGMgMQor
ICoJCQlmb3IgYW55IHNpemUKKyAqIEBwYXJhbSBfZmxhZ3MJYW55IGV4dHJhIGZsYWdzIHRvIGNv
bnRyb2wgdGhlIHJlc291cmNlCisgKgkJCWFsbG9jYXRpb24gLSBzZWUgQGMgUkZfWFhYIGZsYWdz
IGluCisgKgkJCTxzeXMvcm1hbi5oPiBmb3IgZGV0YWlscworICogCisgKiBAcmV0dXJucwkJdGhl
IHJlc291cmNlIHdoaWNoIHdhcyBhbGxvY2F0ZWQgb3IgQGMgTlVMTCBpZiBubworICoJCQlyZXNv
dXJjZSBjb3VsZCBiZSBhbGxvY2F0ZWQKKyAqLworCitzdGF0aWMgX19pbmxpbmUgc3RydWN0IHJl
c291cmNlICogQlVTX0FMTE9DX1JFU09VUkNFKGRldmljZV90IF9kZXYsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZV90IF9jaGlsZCwg
aW50IF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgKl9yaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJtYW5fcmVzX3QgX3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybWFuX3Jlc190IF9lbmQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJtYW5fcmVzX3Qg
X2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1X2ludCBfZmxhZ3MpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29i
al90KV9kZXYpLT5vcHMsYnVzX2FsbG9jX3Jlc291cmNlKTsKKwlyZXR1cm4gKChidXNfYWxsb2Nf
cmVzb3VyY2VfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfdHlwZSwgX3JpZCwgX3N0YXJ0LCBfZW5k
LCBfY291bnQsIF9mbGFncyk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9y
IHRoZSBCVVNfQUNUSVZBVEVfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29i
am9wX2Rlc2MgYnVzX2FjdGl2YXRlX3Jlc291cmNlX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rp
b24gaW1wbGVtZW50aW5nIHRoZSBCVVNfQUNUSVZBVEVfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK3R5
cGVkZWYgaW50IGJ1c19hY3RpdmF0ZV9yZXNvdXJjZV90KGRldmljZV90IF9kZXYsIGRldmljZV90
IF9jaGlsZCwgaW50IF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IF9yaWQsIHN0cnVjdCByZXNvdXJjZSAqX3IpOworLyoqCisgKiBAYnJpZWYgQWN0aXZhdGUg
YSByZXNvdXJjZQorICoKKyAqIEFjdGl2YXRlIGEgcmVzb3VyY2UgcHJldmlvdXNseSBhbGxvY2F0
ZWQgd2l0aAorICogQlVTX0FMTE9DX1JFU09VUkNFKCkuICBUaGlzIG1heSBlbmFibGUgZGVjb2Rp
bmcgb2YgdGhpcyByZXNvdXJjZSBpbiBhCisgKiBkZXZpY2UgZm9yIGluc3RhbmNlLiAgSXQgd2ls
bCBhbHNvIGVzdGFibGlzaCBhIG1hcHBpbmcgZm9yIHRoZSByZXNvdXJjZQorICogdW5sZXNzIFJG
X1VOTUFQUEVEIHdhcyBzZXQgd2hlbiBhbGxvY2F0aW5nIHRoZSByZXNvdXJjZS4KKyAqCisgKiBA
cGFyYW0gX2RldgkJdGhlIHBhcmVudCBkZXZpY2Ugb2YgQHAgX2NoaWxkCisgKiBAcGFyYW0gX2No
aWxkCXRoZSBkZXZpY2Ugd2hpY2ggYWxsb2NhdGVkIHRoZSByZXNvdXJjZQorICogQHBhcmFtIF90
eXBlCQl0aGUgdHlwZSBvZiByZXNvdXJjZQorICogQHBhcmFtIF9yaWQJCXRoZSByZXNvdXJjZSBp
ZGVudGlmaWVyCisgKiBAcGFyYW0gX3IJCXRoZSByZXNvdXJjZSB0byBhY3RpdmF0ZQorICovCisK
K3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX0FDVElWQVRFX1JFU09VUkNFKGRldmljZV90IF9kZXYs
IGRldmljZV90IF9jaGlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBfdHlwZSwgaW50IF9yaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKl9yKQoreworCWtvYmpvcF90IF9tOworCUtPQkpP
UExPT0tVUCgoKGtvYmpfdClfZGV2KS0+b3BzLGJ1c19hY3RpdmF0ZV9yZXNvdXJjZSk7CisJcmV0
dXJuICgoYnVzX2FjdGl2YXRlX3Jlc291cmNlX3QgKikgX20pKF9kZXYsIF9jaGlsZCwgX3R5cGUs
IF9yaWQsIF9yKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJV
U19NQVBfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgYnVz
X21hcF9yZXNvdXJjZV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0
aGUgQlVTX01BUF9SRVNPVVJDRSgpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgYnVzX21hcF9yZXNv
dXJjZV90KGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCwgaW50IF90eXBlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZXNvdXJjZSAqX3IsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlc291cmNlX21hcF9yZXF1ZXN0ICpfYXJncywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVzb3VyY2VfbWFwICpfbWFw
KTsKKy8qKgorICogQGJyaWVmIE1hcCBhIHJlc291cmNlCisgKgorICogQWxsb2NhdGUgYSBtYXBw
aW5nIGZvciBhIHJhbmdlIG9mIGFuIGFjdGl2ZSByZXNvdXJjZS4gIFRoZSBtYXBwaW5nCisgKiBp
cyBkZXNjcmliZWQgYnkgYSBzdHJ1Y3QgcmVzb3VyY2VfbWFwIG9iamVjdC4gIFRoaXMgbWF5IGZv
ciBpbnN0YW5jZQorICogbWFwIGEgbWVtb3J5IHJlZ2lvbiBpbnRvIHRoZSBrZXJuZWwncyB2aXJ0
dWFsIGFkZHJlc3Mgc3BhY2UuCisgKgorICogQHBhcmFtIF9kZXYJCXRoZSBwYXJlbnQgZGV2aWNl
IG9mIEBwIF9jaGlsZAorICogQHBhcmFtIF9jaGlsZAl0aGUgZGV2aWNlIHdoaWNoIGFsbG9jYXRl
ZCB0aGUgcmVzb3VyY2UKKyAqIEBwYXJhbSBfdHlwZQkJdGhlIHR5cGUgb2YgcmVzb3VyY2UKKyAq
IEBwYXJhbSBfcgkJdGhlIHJlc291cmNlIHRvIG1hcAorICogQHBhcmFtIF9hcmdzCQlvcHRpb25h
bCBhdHRyaWJ1dGVzIG9mIHRoZSBtYXBwaW5nCisgKiBAcGFyYW0gX21hcAkJdGhlIG1hcHBpbmcK
KyAqLworCitzdGF0aWMgX19pbmxpbmUgaW50IEJVU19NQVBfUkVTT1VSQ0UoZGV2aWNlX3QgX2Rl
diwgZGV2aWNlX3QgX2NoaWxkLCBpbnQgX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IHJlc291cmNlICpfciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgcmVzb3VyY2VfbWFwX3JlcXVlc3QgKl9hcmdzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZXNvdXJjZV9tYXAgKl9tYXAp
Cit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYpLT5vcHMsYnVz
X21hcF9yZXNvdXJjZSk7CisJcmV0dXJuICgoYnVzX21hcF9yZXNvdXJjZV90ICopIF9tKShfZGV2
LCBfY2hpbGQsIF90eXBlLCBfciwgX2FyZ3MsIF9tYXApOworfQorCisvKiogQGJyaWVmIFVuaXF1
ZSBkZXNjcmlwdG9yIGZvciB0aGUgQlVTX1VOTUFQX1JFU09VUkNFKCkgbWV0aG9kICovCitleHRl
cm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c191bm1hcF9yZXNvdXJjZV9kZXNjOworLyoqIEBicmll
ZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVTX1VOTUFQX1JFU09VUkNFKCkgbWV0aG9k
ICovCit0eXBlZGVmIGludCBidXNfdW5tYXBfcmVzb3VyY2VfdChkZXZpY2VfdCBfZGV2LCBkZXZp
Y2VfdCBfY2hpbGQsIGludCBfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCByZXNvdXJjZSAqX3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3QgcmVzb3VyY2VfbWFwICpfbWFwKTsKKy8qKgorICogQGJyaWVmIFVubWFwIGEgcmVzb3Vy
Y2UKKyAqCisgKiBSZWxlYXNlIGEgbWFwcGluZyBwcmV2aW91c2x5IGFsbG9jYXRlZCB3aXRoCisg
KiBCVVNfTUFQX1JFU09VUkNFKCkuIFRoaXMgbWF5IGZvciBpbnN0YW5jZSB1bm1hcCBhIG1lbW9y
eSByZWdpb24KKyAqIGZyb20gdGhlIGtlcm5lbCdzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4KKyAq
CisgKiBAcGFyYW0gX2RldgkJdGhlIHBhcmVudCBkZXZpY2Ugb2YgQHAgX2NoaWxkCisgKiBAcGFy
YW0gX2NoaWxkCXRoZSBkZXZpY2Ugd2hpY2ggYWxsb2NhdGVkIHRoZSByZXNvdXJjZQorICogQHBh
cmFtIF90eXBlCQl0aGUgdHlwZSBvZiByZXNvdXJjZQorICogQHBhcmFtIF9yCQl0aGUgcmVzb3Vy
Y2UKKyAqIEBwYXJhbSBfbWFwCQl0aGUgbWFwcGluZyB0byByZWxlYXNlCisgKi8KKworc3RhdGlj
IF9faW5saW5lIGludCBCVVNfVU5NQVBfUkVTT1VSQ0UoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3Qg
X2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF90eXBl
LCBzdHJ1Y3QgcmVzb3VyY2UgKl9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHJlc291cmNlX21hcCAqX21hcCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JK
T1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfdW5tYXBfcmVzb3VyY2UpOworCXJldHVy
biAoKGJ1c191bm1hcF9yZXNvdXJjZV90ICopIF9tKShfZGV2LCBfY2hpbGQsIF90eXBlLCBfciwg
X21hcCk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfREVB
Q1RJVkFURV9SRVNPVVJDRSgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBi
dXNfZGVhY3RpdmF0ZV9yZXNvdXJjZV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxl
bWVudGluZyB0aGUgQlVTX0RFQUNUSVZBVEVfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK3R5cGVkZWYg
aW50IGJ1c19kZWFjdGl2YXRlX3Jlc291cmNlX3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2No
aWxkLCBpbnQgX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfcmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKl9yKTsKKy8qKgorICogQGJyaWVmIERlYWN0aXZhdGUg
YSByZXNvdXJjZQorICoKKyAqIERlYWN0aXZhdGUgYSByZXNvdXJjZSBwcmV2aW91c2x5IGFsbG9j
YXRlZCB3aXRoCisgKiBCVVNfQUxMT0NfUkVTT1VSQ0UoKS4gCisgKgorICogQHBhcmFtIF9kZXYJ
CXRoZSBwYXJlbnQgZGV2aWNlIG9mIEBwIF9jaGlsZAorICogQHBhcmFtIF9jaGlsZAl0aGUgZGV2
aWNlIHdoaWNoIGFsbG9jYXRlZCB0aGUgcmVzb3VyY2UKKyAqIEBwYXJhbSBfdHlwZQkJdGhlIHR5
cGUgb2YgcmVzb3VyY2UKKyAqIEBwYXJhbSBfcmlkCQl0aGUgcmVzb3VyY2UgaWRlbnRpZmllcgor
ICogQHBhcmFtIF9yCQl0aGUgcmVzb3VyY2UgdG8gZGVhY3RpdmF0ZQorICovCisKK3N0YXRpYyBf
X2lubGluZSBpbnQgQlVTX0RFQUNUSVZBVEVfUkVTT1VSQ0UoZGV2aWNlX3QgX2RldiwgZGV2aWNl
X3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX3R5cGUsIGludCBfcmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKl9yKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExP
T0tVUCgoKGtvYmpfdClfZGV2KS0+b3BzLGJ1c19kZWFjdGl2YXRlX3Jlc291cmNlKTsKKwlyZXR1
cm4gKChidXNfZGVhY3RpdmF0ZV9yZXNvdXJjZV90ICopIF9tKShfZGV2LCBfY2hpbGQsIF90eXBl
LCBfcmlkLCBfcik7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBC
VVNfQURKVVNUX1JFU09VUkNFKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNj
IGJ1c19hZGp1c3RfcmVzb3VyY2VfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1l
bnRpbmcgdGhlIEJVU19BREpVU1RfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGJ1
c19hZGp1c3RfcmVzb3VyY2VfdChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsIGludCBf
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVzb3VyY2Ug
Kl9yZXMsIHJtYW5fcmVzX3QgX3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJtYW5fcmVzX3QgX2VuZCk7CisvKioKKyAqIEBicmllZiBBZGp1c3QgYSByZXNvdXJjZQor
ICoKKyAqIEFkanVzdCB0aGUgc3RhcnQgYW5kL29yIGVuZCBvZiBhIHJlc291cmNlIGFsbG9jYXRl
ZCBieQorICogQlVTX0FMTE9DX1JFU09VUkNFLiAgQXQgbGVhc3QgcGFydCBvZiB0aGUgbmV3IGFk
ZHJlc3MgcmFuZ2UgbXVzdCBvdmVybGFwCisgKiB3aXRoIHRoZSBleGlzdGluZyBhZGRyZXNzIHJh
bmdlLiAgSWYgdGhlIHN1Y2Nlc3NmdWwsIHRoZSByZXNvdXJjZSdzIHJhbmdlCisgKiB3aWxsIGJl
IGFkanVzdGVkIHRvIFtzdGFydCwgZW5kXSBvbiByZXR1cm4uCisgKgorICogQHBhcmFtIF9kZXYJ
CXRoZSBwYXJlbnQgZGV2aWNlIG9mIEBwIF9jaGlsZAorICogQHBhcmFtIF9jaGlsZAl0aGUgZGV2
aWNlIHdoaWNoIGFsbG9jYXRlZCB0aGUgcmVzb3VyY2UKKyAqIEBwYXJhbSBfdHlwZQkJdGhlIHR5
cGUgb2YgcmVzb3VyY2UKKyAqIEBwYXJhbSBfcmVzCQl0aGUgcmVzb3VyY2UgdG8gYWRqdXN0Cisg
KiBAcGFyYW0gX3N0YXJ0CXRoZSBuZXcgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgcmVzb3VyY2Ug
cmFuZ2UKKyAqIEBwYXJhbSBfZW5kCQl0aGUgbmV3IGVuZGluZyBhZGRyZXNzIG9mIHRoZSByZXNv
dXJjZSByYW5nZQorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX0FESlVTVF9SRVNPVVJD
RShkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IF90eXBlLCBzdHJ1Y3QgcmVzb3VyY2UgKl9yZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm1hbl9yZXNfdCBfc3RhcnQsIHJt
YW5fcmVzX3QgX2VuZCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3Qp
X2RldiktPm9wcyxidXNfYWRqdXN0X3Jlc291cmNlKTsKKwlyZXR1cm4gKChidXNfYWRqdXN0X3Jl
c291cmNlX3QgKikgX20pKF9kZXYsIF9jaGlsZCwgX3R5cGUsIF9yZXMsIF9zdGFydCwgX2VuZCk7
Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfUkVMRUFTRV9S
RVNPVVJDRSgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfcmVsZWFz
ZV9yZXNvdXJjZV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUg
QlVTX1JFTEVBU0VfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGJ1c19yZWxlYXNl
X3Jlc291cmNlX3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkLCBpbnQgX3R5cGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfcmlkLCBzdHJ1Y3QgcmVzb3Vy
Y2UgKl9yZXMpOworLyoqCisgKiBAYnJpZWYgUmVsZWFzZSBhIHJlc291cmNlCisgKgorICogRnJl
ZSBhIHJlc291cmNlIGFsbG9jYXRlZCBieSB0aGUgQlVTX0FMTE9DX1JFU09VUkNFLiAgVGhlIEBw
IF9yaWQKKyAqIHZhbHVlIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIG9uZSByZXR1cm5lZCBieSBC
VVNfQUxMT0NfUkVTT1VSQ0UoKQorICogKHdoaWNoIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2Ft
ZSBhcyB0aGUgb25lIHRoZSBjbGllbnQgcGFzc2VkKS4KKyAqCisgKiBAcGFyYW0gX2RldgkJdGhl
IHBhcmVudCBkZXZpY2Ugb2YgQHAgX2NoaWxkCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBkZXZpY2Ug
d2hpY2ggYWxsb2NhdGVkIHRoZSByZXNvdXJjZQorICogQHBhcmFtIF90eXBlCQl0aGUgdHlwZSBv
ZiByZXNvdXJjZQorICogQHBhcmFtIF9yaWQJCXRoZSByZXNvdXJjZSBpZGVudGlmaWVyCisgKiBA
cGFyYW0gX3IJCXRoZSByZXNvdXJjZSB0byByZWxlYXNlCisgKi8KKworc3RhdGljIF9faW5saW5l
IGludCBCVVNfUkVMRUFTRV9SRVNPVVJDRShkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfdHlwZSwgaW50
IF9yaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBy
ZXNvdXJjZSAqX3JlcykKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3Qp
X2RldiktPm9wcyxidXNfcmVsZWFzZV9yZXNvdXJjZSk7CisJcmV0dXJuICgoYnVzX3JlbGVhc2Vf
cmVzb3VyY2VfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfdHlwZSwgX3JpZCwgX3Jlcyk7Cit9CisK
Ky8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfU0VUVVBfSU5UUigpIG1l
dGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfc2V0dXBfaW50cl9kZXNjOwor
LyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVTX1NFVFVQX0lOVFIoKSBt
ZXRob2QgKi8KK3R5cGVkZWYgaW50IGJ1c19zZXR1cF9pbnRyX3QoZGV2aWNlX3QgX2RldiwgZGV2
aWNlX3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVzb3Vy
Y2UgKl9pcnEsIGludCBfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZl
cl9maWx0ZXJfdCAqX2ZpbHRlciwgZHJpdmVyX2ludHJfdCAqX2ludHIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKl9hcmcsIHZvaWQgKipfY29va2llcCk7CisvKioKKyAqIEBi
cmllZiBJbnN0YWxsIGFuIGludGVycnVwdCBoYW5kbGVyCisgKgorICogVGhpcyBtZXRob2QgaXMg
dXNlZCB0byBhc3NvY2lhdGUgYW4gaW50ZXJydXB0IGhhbmRsZXIgZnVuY3Rpb24gd2l0aAorICog
YW4gaXJxIHJlc291cmNlLiBXaGVuIHRoZSBpbnRlcnJ1cHQgdHJpZ2dlcnMsIHRoZSBmdW5jdGlv
biBAcCBfaW50cgorICogd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgdmFsdWUgb2YgQHAgX2FyZyBh
cyBpdHMgc2luZ2xlCisgKiBhcmd1bWVudC4gVGhlIHZhbHVlIHJldHVybmVkIGluIEBwICpfY29v
a2llcCBpcyB1c2VkIHRvIGNhbmNlbCB0aGUKKyAqIGludGVycnVwdCBoYW5kbGVyIC0gdGhlIGNh
bGxlciBzaG91bGQgc2F2ZSB0aGlzIHZhbHVlIHRvIHVzZSBpbiBhCisgKiBmdXR1cmUgY2FsbCB0
byBCVVNfVEVBUkRPV05fSU5UUigpLgorICogCisgKiBAcGFyYW0gX2RldgkJdGhlIHBhcmVudCBk
ZXZpY2Ugb2YgQHAgX2NoaWxkCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBkZXZpY2Ugd2hpY2ggYWxs
b2NhdGVkIHRoZSByZXNvdXJjZQorICogQHBhcmFtIF9pcnEJCXRoZSByZXNvdXJjZSByZXByZXNl
bnRpbmcgdGhlIGludGVycnVwdAorICogQHBhcmFtIF9mbGFncwlhIHNldCBvZiBiaXRzIGZyb20g
ZW51bSBpbnRyX3R5cGUgc3BlY2lmeWluZworICoJCQl0aGUgY2xhc3Mgb2YgaW50ZXJydXB0Cisg
KiBAcGFyYW0gX2ludHIJCXRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGludGVycnVwdAor
ICoJCQl0cmlnZ2VycworICogQHBhcmFtIF9hcmcJCWEgdmFsdWUgdG8gdXNlIGFzIHRoZSBzaW5n
bGUgYXJndW1lbnQgaW4gY2FsbHMKKyAqCQkJdG8gQHAgX2ludHIKKyAqIEBwYXJhbSBfY29va2ll
cAlhIHBvaW50ZXIgdG8gYSBsb2NhdGlvbiB0byByZWNlaXZlIGEgY29va2llCisgKgkJCXZhbHVl
IHRoYXQgbWF5IGJlIHVzZWQgdG8gcmVtb3ZlIHRoZSBpbnRlcnJ1cHQKKyAqCQkJaGFuZGxlcgor
ICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX1NFVFVQX0lOVFIoZGV2aWNlX3QgX2Rldiwg
ZGV2aWNlX3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgcmVzb3VyY2UgKl9pcnEsIGludCBfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRyaXZlcl9maWx0ZXJfdCAqX2ZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZHJpdmVyX2ludHJfdCAqX2ludHIsIHZvaWQgKl9hcmcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipfY29va2llcCkKK3sKKwlrb2Jqb3Bf
dCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfc2V0dXBfaW50cik7
CisJcmV0dXJuICgoYnVzX3NldHVwX2ludHJfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfaXJxLCBf
ZmxhZ3MsIF9maWx0ZXIsIF9pbnRyLCBfYXJnLCBfY29va2llcCk7Cit9CisKKy8qKiBAYnJpZWYg
VW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfVEVBUkRPV05fSU5UUigpIG1ldGhvZCAqLwor
ZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfdGVhcmRvd25faW50cl9kZXNjOworLyoqIEBi
cmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVTX1RFQVJET1dOX0lOVFIoKSBtZXRo
b2QgKi8KK3R5cGVkZWYgaW50IGJ1c190ZWFyZG93bl9pbnRyX3QoZGV2aWNlX3QgX2RldiwgZGV2
aWNlX3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVz
b3VyY2UgKl9pcnEsIHZvaWQgKl9jb29raWUpOworLyoqCisgKiBAYnJpZWYgVW5pbnN0YWxsIGFu
IGludGVycnVwdCBoYW5kbGVyCisgKgorICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBkaXNhc3Nv
Y2lhdGUgYW4gaW50ZXJydXB0IGhhbmRsZXIgZnVuY3Rpb24KKyAqIHdpdGggYW4gaXJxIHJlc291
cmNlLiBUaGUgdmFsdWUgb2YgQHAgX2Nvb2tpZSBtdXN0IGJlIHRoZSB2YWx1ZQorICogcmV0dXJu
ZWQgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8gQlVTX1NFVFVQX0lOVFIoKS4KKyAqIAorICogQHBh
cmFtIF9kZXYJCXRoZSBwYXJlbnQgZGV2aWNlIG9mIEBwIF9jaGlsZAorICogQHBhcmFtIF9jaGls
ZAl0aGUgZGV2aWNlIHdoaWNoIGFsbG9jYXRlZCB0aGUgcmVzb3VyY2UKKyAqIEBwYXJhbSBfaXJx
CQl0aGUgcmVzb3VyY2UgcmVwcmVzZW50aW5nIHRoZSBpbnRlcnJ1cHQKKyAqIEBwYXJhbSBfY29v
a2llCXRoZSBjb29raWUgdmFsdWUgcmV0dXJuZWQgd2hlbiB0aGUgaW50ZXJydXB0CisgKgkJCXdh
cyBvcmlnaW5hbGx5IHJlZ2lzdGVyZWQKKyAqLworCitzdGF0aWMgX19pbmxpbmUgaW50IEJVU19U
RUFSRE9XTl9JTlRSKGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlc291cmNlICpfaXJxLCB2b2lkICpf
Y29va2llKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClfZGV2KS0+
b3BzLGJ1c190ZWFyZG93bl9pbnRyKTsKKwlyZXR1cm4gKChidXNfdGVhcmRvd25faW50cl90ICop
IF9tKShfZGV2LCBfY2hpbGQsIF9pcnEsIF9jb29raWUpOworfQorCisvKiogQGJyaWVmIFVuaXF1
ZSBkZXNjcmlwdG9yIGZvciB0aGUgQlVTX1NFVF9SRVNPVVJDRSgpIG1ldGhvZCAqLworZXh0ZXJu
IHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfc2V0X3Jlc291cmNlX2Rlc2M7CisvKiogQGJyaWVmIEEg
ZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBCVVNfU0VUX1JFU09VUkNFKCkgbWV0aG9kICovCit0
eXBlZGVmIGludCBidXNfc2V0X3Jlc291cmNlX3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2No
aWxkLCBpbnQgX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9yaWQs
IHJtYW5fcmVzX3QgX3N0YXJ0LCBybWFuX3Jlc190IF9jb3VudCk7CisvKioKKyAqIEBicmllZiBE
ZWZpbmUgYSByZXNvdXJjZSB3aGljaCBjYW4gYmUgYWxsb2NhdGVkIHdpdGgKKyAqIEJVU19BTExP
Q19SRVNPVVJDRSgpLgorICoKKyAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgc29tZSBidXNzZXMg
KHR5cGljYWxseSBJU0EpIHRvIGFsbG93IGEKKyAqIGRyaXZlciB0byBkZXNjcmliZSBhIHJlc291
cmNlIHJhbmdlIHRoYXQgaXQgd291bGQgbGlrZSB0bworICogYWxsb2NhdGUuIFRoZSByZXNvdXJj
ZSBkZWZpbmVkIGJ5IEBwIF90eXBlIGFuZCBAcCBfcmlkIGlzIGRlZmluZWQKKyAqIHRvIHN0YXJ0
IGF0IEBwIF9zdGFydCBhbmQgdG8gaW5jbHVkZSBAcCBfY291bnQgaW5kaWNlcyBpbiBpdHMKKyAq
IHJhbmdlLgorICogCisgKiBAcGFyYW0gX2RldgkJdGhlIHBhcmVudCBkZXZpY2Ugb2YgQHAgX2No
aWxkCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBkZXZpY2Ugd2hpY2ggb3ducyB0aGUgcmVzb3VyY2UK
KyAqIEBwYXJhbSBfdHlwZQkJdGhlIHR5cGUgb2YgcmVzb3VyY2UKKyAqIEBwYXJhbSBfcmlkCQl0
aGUgcmVzb3VyY2UgaWRlbnRpZmllcgorICogQHBhcmFtIF9zdGFydAl0aGUgc3RhcnQgb2YgdGhl
IHJlc291cmNlIHJhbmdlCisgKiBAcGFyYW0gX2NvdW50CXRoZSBzaXplIG9mIHRoZSByZXNvdXJj
ZSByYW5nZQorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX1NFVF9SRVNPVVJDRShkZXZp
Y2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsIGludCBfdHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX3JpZCwgcm1hbl9yZXNfdCBfc3RhcnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm1hbl9yZXNfdCBfY291bnQpCit7CisJa29i
am9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYpLT5vcHMsYnVzX3NldF9yZXNv
dXJjZSk7CisJcmV0dXJuICgoYnVzX3NldF9yZXNvdXJjZV90ICopIF9tKShfZGV2LCBfY2hpbGQs
IF90eXBlLCBfcmlkLCBfc3RhcnQsIF9jb3VudCk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRl
c2NyaXB0b3IgZm9yIHRoZSBCVVNfR0VUX1JFU09VUkNFKCkgbWV0aG9kICovCitleHRlcm4gc3Ry
dWN0IGtvYmpvcF9kZXNjIGJ1c19nZXRfcmVzb3VyY2VfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5j
dGlvbiBpbXBsZW1lbnRpbmcgdGhlIEJVU19HRVRfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK3R5cGVk
ZWYgaW50IGJ1c19nZXRfcmVzb3VyY2VfdChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQs
IGludCBfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX3JpZCwgcm1h
bl9yZXNfdCAqX3N0YXJ0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybWFuX3Jl
c190ICpfY291bnRwKTsKKy8qKgorICogQGJyaWVmIERlc2NyaWJlIGEgcmVzb3VyY2UKKyAqCisg
KiBUaGlzIG1ldGhvZCBhbGxvd3MgYSBkcml2ZXIgdG8gZXhhbWluZSB0aGUgcmFuZ2UgdXNlZCBm
b3IgYSBnaXZlbgorICogcmVzb3VyY2Ugd2l0aG91dCBhY3R1YWxseSBhbGxvY2F0aW5nIGl0Lgor
ICogCisgKiBAcGFyYW0gX2RldgkJdGhlIHBhcmVudCBkZXZpY2Ugb2YgQHAgX2NoaWxkCisgKiBA
cGFyYW0gX2NoaWxkCXRoZSBkZXZpY2Ugd2hpY2ggb3ducyB0aGUgcmVzb3VyY2UKKyAqIEBwYXJh
bSBfdHlwZQkJdGhlIHR5cGUgb2YgcmVzb3VyY2UKKyAqIEBwYXJhbSBfcmlkCQl0aGUgcmVzb3Vy
Y2UgaWRlbnRpZmllcgorICogQHBhcmFtIF9zdGFydAl0aGUgYWRkcmVzcyBvZiBhIGxvY2F0aW9u
IHRvIHJlY2VpdmUgdGhlIHN0YXJ0CisgKgkJCWluZGV4IG9mIHRoZSByZXNvdXJjZSByYW5nZQor
ICogQHBhcmFtIF9jb3VudAl0aGUgYWRkcmVzcyBvZiBhIGxvY2F0aW9uIHRvIHJlY2VpdmUgdGhl
IHNpemUKKyAqCQkJb2YgdGhlIHJlc291cmNlIHJhbmdlCisgKi8KKworc3RhdGljIF9faW5saW5l
IGludCBCVVNfR0VUX1JFU09VUkNFKGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCwgaW50
IF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfcmlkLCBy
bWFuX3Jlc190ICpfc3RhcnRwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJtYW5fcmVzX3QgKl9jb3VudHApCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgo
a29ial90KV9kZXYpLT5vcHMsYnVzX2dldF9yZXNvdXJjZSk7CisJcmV0dXJuICgoYnVzX2dldF9y
ZXNvdXJjZV90ICopIF9tKShfZGV2LCBfY2hpbGQsIF90eXBlLCBfcmlkLCBfc3RhcnRwLCBfY291
bnRwKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJVU19ERUxF
VEVfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgYnVzX2Rl
bGV0ZV9yZXNvdXJjZV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0
aGUgQlVTX0RFTEVURV9SRVNPVVJDRSgpIG1ldGhvZCAqLwordHlwZWRlZiB2b2lkIGJ1c19kZWxl
dGVfcmVzb3VyY2VfdChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsIGludCBfdHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9yaWQpOworLyoqCisgKiBA
YnJpZWYgRGVsZXRlIGEgcmVzb3VyY2UuCisgKiAKKyAqIFVzZSB0aGlzIHRvIGRlbGV0ZSBhIHJl
c291cmNlIChwb3NzaWJseSBvbmUgcHJldmlvdXNseSBhZGRlZCB3aXRoCisgKiBCVVNfU0VUX1JF
U09VUkNFKCkpLgorICogCisgKiBAcGFyYW0gX2RldgkJdGhlIHBhcmVudCBkZXZpY2Ugb2YgQHAg
X2NoaWxkCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBkZXZpY2Ugd2hpY2ggb3ducyB0aGUgcmVzb3Vy
Y2UKKyAqIEBwYXJhbSBfdHlwZQkJdGhlIHR5cGUgb2YgcmVzb3VyY2UKKyAqIEBwYXJhbSBfcmlk
CQl0aGUgcmVzb3VyY2UgaWRlbnRpZmllcgorICovCisKK3N0YXRpYyBfX2lubGluZSB2b2lkIEJV
U19ERUxFVEVfUkVTT1VSQ0UoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX3R5cGUsIGludCBfcmlkKQor
eworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClfZGV2KS0+b3BzLGJ1c19k
ZWxldGVfcmVzb3VyY2UpOworCSgoYnVzX2RlbGV0ZV9yZXNvdXJjZV90ICopIF9tKShfZGV2LCBf
Y2hpbGQsIF90eXBlLCBfcmlkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBm
b3IgdGhlIEJVU19HRVRfUkVTT1VSQ0VfTElTVCgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBr
b2Jqb3BfZGVzYyBidXNfZ2V0X3Jlc291cmNlX2xpc3RfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5j
dGlvbiBpbXBsZW1lbnRpbmcgdGhlIEJVU19HRVRfUkVTT1VSQ0VfTElTVCgpIG1ldGhvZCAqLwor
dHlwZWRlZiBzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqIGJ1c19nZXRfcmVzb3VyY2VfbGlzdF90KGRl
dmljZV90IF9kZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGV2aWNlX3QgX2NoaWxkKTsKKy8qKgorICogQGJyaWVmIFJldHVybiBhIHN0
cnVjdCByZXNvdXJjZV9saXN0LgorICoKKyAqIFVzZWQgYnkgZHJpdmVycyB3aGljaCB1c2UgYnVz
X2dlbmVyaWNfcmxfYWxsb2NfcmVzb3VyY2UoKSBldGMuIHRvCisgKiBpbXBsZW1lbnQgdGhlaXIg
cmVzb3VyY2UgaGFuZGxpbmcuIEl0IHNob3VsZCByZXR1cm4gdGhlIHJlc291cmNlCisgKiBsaXN0
IG9mIHRoZSBnaXZlbiBjaGlsZCBkZXZpY2UuCisgKiAKKyAqIEBwYXJhbSBfZGV2CQl0aGUgcGFy
ZW50IGRldmljZSBvZiBAcCBfY2hpbGQKKyAqIEBwYXJhbSBfY2hpbGQJdGhlIGRldmljZSB3aGlj
aCBvd25zIHRoZSByZXNvdXJjZSBsaXN0CisgKi8KKworc3RhdGljIF9faW5saW5lIHN0cnVjdCBy
ZXNvdXJjZV9saXN0ICogQlVTX0dFVF9SRVNPVVJDRV9MSVNUKGRldmljZV90IF9kZXYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGV2aWNlX3QgX2NoaWxkKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpf
dClfZGV2KS0+b3BzLGJ1c19nZXRfcmVzb3VyY2VfbGlzdCk7CisJcmV0dXJuICgoYnVzX2dldF9y
ZXNvdXJjZV9saXN0X3QgKikgX20pKF9kZXYsIF9jaGlsZCk7Cit9CisKKy8qKiBAYnJpZWYgVW5p
cXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfQ0hJTERfUFJFU0VOVCgpIG1ldGhvZCAqLworZXh0
ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfY2hpbGRfcHJlc2VudF9kZXNjOworLyoqIEBicmll
ZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVTX0NISUxEX1BSRVNFTlQoKSBtZXRob2Qg
Ki8KK3R5cGVkZWYgaW50IGJ1c19jaGlsZF9wcmVzZW50X3QoZGV2aWNlX3QgX2RldiwgZGV2aWNl
X3QgX2NoaWxkKTsKKy8qKgorICogQGJyaWVmIElzIHRoZSBoYXJkd2FyZSBkZXNjcmliZWQgYnkg
QHAgX2NoaWxkIHN0aWxsIGF0dGFjaGVkIHRvIHRoZQorICogc3lzdGVtPworICoKKyAqIFRoaXMg
bWV0aG9kIHNob3VsZCByZXR1cm4gMCBpZiB0aGUgZGV2aWNlIGlzIG5vdCBwcmVzZW50LiAgSXQK
KyAqIHNob3VsZCByZXR1cm4gLTEgaWYgaXQgaXMgcHJlc2VudC4gIEFueSBlcnJvcnMgaW4gZGV0
ZXJtaW5pbmcKKyAqIHNob3VsZCBiZSByZXR1cm5lZCBhcyBhIG5vcm1hbCBlcnJubyB2YWx1ZS4g
IENsaWVudCBkcml2ZXJzIGFyZSB0bworICogYXNzdW1lIHRoYXQgdGhlIGRldmljZSBpcyBwcmVz
ZW50LCBldmVuIGlmIHRoZXJlIGlzIGFuIGVycm9yCisgKiBkZXRlcm1pbmluZyBpZiBpdCBpcyB0
aGVyZS4gIEJ1c3NlcyBhcmUgdG8gdHJ5IHRvIGF2b2lkIHJldHVybmluZworICogZXJyb3JzLCBi
dXQgbmV3Y2FyZCB3aWxsIHJldHVybiBhbiBlcnJvciBpZiB0aGUgZGV2aWNlIGZhaWxzIHRvCisg
KiBpbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgKiAKKyAqIEBwYXJhbSBfZGV2CQl0aGUgcGFyZW50
IGRldmljZSBvZiBAcCBfY2hpbGQKKyAqIEBwYXJhbSBfY2hpbGQJdGhlIGRldmljZSB3aGljaCBp
cyBiZWluZyBleGFtaW5lZAorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX0NISUxEX1BS
RVNFTlQoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkKQoreworCWtvYmpvcF90IF9tOwor
CUtPQkpPUExPT0tVUCgoKGtvYmpfdClfZGV2KS0+b3BzLGJ1c19jaGlsZF9wcmVzZW50KTsKKwly
ZXR1cm4gKChidXNfY2hpbGRfcHJlc2VudF90ICopIF9tKShfZGV2LCBfY2hpbGQpOworfQorCisv
KiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgQlVTX0NISUxEX1BOUElORk9fU1RS
KCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c19jaGlsZF9wbnBpbmZv
X3N0cl9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVTX0NI
SUxEX1BOUElORk9fU1RSKCkgbWV0aG9kICovCit0eXBlZGVmIGludCBidXNfY2hpbGRfcG5waW5m
b19zdHJfdChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsIGNoYXIgKl9idWYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX2J1Zmxlbik7CisvKioKKyAq
IEBicmllZiBSZXR1cm5zIHRoZSBwbnAgaW5mbyBmb3IgdGhpcyBkZXZpY2UuCisgKgorICogUmV0
dXJuIGl0IGFzIGEgc3RyaW5nLiAgSWYgdGhlIHN0b3JhZ2UgaXMgaW5zdWZmaWNpZW50IGZvciB0
aGUKKyAqIHN0cmluZywgdGhlbiByZXR1cm4gRU9WRVJGTE9XLgorICoKKyAqIFRoZSBzdHJpbmcg
bXVzdCBiZSBmb3JtYXR0ZWQgYXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZgorICogbmFtZT12
YWx1ZSBwYWlycy4gIE5hbWVzIG1heSBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3Rl
cnMsCisgKiB1bmRlcnNjb3JlcyAoJ18nKSBhbmQgaHlwaGVucyAoJy0nKS4gIFZhbHVlcyBjYW4g
Y29udGFpbiBhbnkKKyAqIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMuICBWYWx1ZXMgY29udGFp
bmluZyB3aGl0ZXNwYWNlIGNhbiBiZQorICogcXVvdGVkIHdpdGggZG91YmxlIHF1b3RlcyAoJyIn
KS4gIERvdWJsZSBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzIGluCisgKiBxdW90ZWQgdmFsdWVzIGNh
biBiZSBlc2NhcGVkIHdpdGggYmFja3NsYXNoZXMgKCdcJykuCisgKiAKKyAqIEBwYXJhbSBfZGV2
CQl0aGUgcGFyZW50IGRldmljZSBvZiBAcCBfY2hpbGQKKyAqIEBwYXJhbSBfY2hpbGQJdGhlIGRl
dmljZSB3aGljaCBpcyBiZWluZyBleGFtaW5lZAorICogQHBhcmFtIF9idWYJCXRoZSBhZGRyZXNz
IG9mIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIHBucAorICoJCQlzdHJpbmcKKyAqIEBwYXJhbSBf
YnVmbGVuCXRoZSBzaXplIG9mIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAcCBfYnVmCisgKi8K
Kworc3RhdGljIF9faW5saW5lIGludCBCVVNfQ0hJTERfUE5QSU5GT19TVFIoZGV2aWNlX3QgX2Rl
diwgZGV2aWNlX3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqX2J1Ziwgc2l6ZV90IF9idWZsZW4pCit7CisJa29iam9wX3QgX207CisJS09C
Sk9QTE9PS1VQKCgoa29ial90KV9kZXYpLT5vcHMsYnVzX2NoaWxkX3BucGluZm9fc3RyKTsKKwly
ZXR1cm4gKChidXNfY2hpbGRfcG5waW5mb19zdHJfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfYnVm
LCBfYnVmbGVuKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJV
U19DSElMRF9MT0NBVElPTl9TVFIoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rl
c2MgYnVzX2NoaWxkX2xvY2F0aW9uX3N0cl9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGlt
cGxlbWVudGluZyB0aGUgQlVTX0NISUxEX0xPQ0FUSU9OX1NUUigpIG1ldGhvZCAqLwordHlwZWRl
ZiBpbnQgYnVzX2NoaWxkX2xvY2F0aW9uX3N0cl90KGRldmljZV90IF9kZXYsIGRldmljZV90IF9j
aGlsZCwgY2hhciAqX2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgX2J1Zmxlbik7CisvKioKKyAqIEBicmllZiBSZXR1cm5zIHRoZSBsb2NhdGlvbiBmb3Ig
dGhpcyBkZXZpY2UuCisgKgorICogUmV0dXJuIGl0IGFzIGEgc3RyaW5nLiAgSWYgdGhlIHN0b3Jh
Z2UgaXMgaW5zdWZmaWNpZW50IGZvciB0aGUKKyAqIHN0cmluZywgdGhlbiByZXR1cm4gRU9WRVJG
TE9XLgorICoKKyAqIFRoZSBzdHJpbmcgbXVzdCBiZSBmb3JtYXR0ZWQgYXMgYSBzcGFjZS1zZXBh
cmF0ZWQgbGlzdCBvZgorICogbmFtZT12YWx1ZSBwYWlycy4gIE5hbWVzIG1heSBvbmx5IGNvbnRh
aW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsCisgKiB1bmRlcnNjb3JlcyAoJ18nKSBhbmQgaHlw
aGVucyAoJy0nKS4gIFZhbHVlcyBjYW4gY29udGFpbiBhbnkKKyAqIG5vbi13aGl0ZXNwYWNlIGNo
YXJhY3RlcnMuICBWYWx1ZXMgY29udGFpbmluZyB3aGl0ZXNwYWNlIGNhbiBiZQorICogcXVvdGVk
IHdpdGggZG91YmxlIHF1b3RlcyAoJyInKS4gIERvdWJsZSBxdW90ZXMgYW5kIGJhY2tzbGFzaGVz
IGluCisgKiBxdW90ZWQgdmFsdWVzIGNhbiBiZSBlc2NhcGVkIHdpdGggYmFja3NsYXNoZXMgKCdc
JykuCisgKgorICogQHBhcmFtIF9kZXYJCXRoZSBwYXJlbnQgZGV2aWNlIG9mIEBwIF9jaGlsZAor
ICogQHBhcmFtIF9jaGlsZAl0aGUgZGV2aWNlIHdoaWNoIGlzIGJlaW5nIGV4YW1pbmVkCisgKiBA
cGFyYW0gX2J1ZgkJdGhlIGFkZHJlc3Mgb2YgYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgbG9jYXRp
b24KKyAqCQkJc3RyaW5nCisgKiBAcGFyYW0gX2J1Zmxlbgl0aGUgc2l6ZSBvZiB0aGUgYnVmZmVy
IHBvaW50ZWQgdG8gYnkgQHAgX2J1ZgorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX0NI
SUxEX0xPQ0FUSU9OX1NUUihkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX2J1Ziwgc2l6ZV90IF9i
dWZsZW4pCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYpLT5v
cHMsYnVzX2NoaWxkX2xvY2F0aW9uX3N0cik7CisJcmV0dXJuICgoYnVzX2NoaWxkX2xvY2F0aW9u
X3N0cl90ICopIF9tKShfZGV2LCBfY2hpbGQsIF9idWYsIF9idWZsZW4pOworfQorCisvKiogQGJy
aWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgQlVTX0JJTkRfSU5UUigpIG1ldGhvZCAqLwor
ZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfYmluZF9pbnRyX2Rlc2M7CisvKiogQGJyaWVm
IEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBCVVNfQklORF9JTlRSKCkgbWV0aG9kICovCit0
eXBlZGVmIGludCBidXNfYmluZF9pbnRyX3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxk
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZXNvdXJjZSAqX2lycSwgaW50
IF9jcHUpOworLyoqCisgKiBAYnJpZWYgQWxsb3cgZHJpdmVycyB0byByZXF1ZXN0IHRoYXQgYW4g
aW50ZXJydXB0IGJlIGJvdW5kIHRvIGEgc3BlY2lmaWMKKyAqIENQVS4KKyAqIAorICogQHBhcmFt
IF9kZXYJCXRoZSBwYXJlbnQgZGV2aWNlIG9mIEBwIF9jaGlsZAorICogQHBhcmFtIF9jaGlsZAl0
aGUgZGV2aWNlIHdoaWNoIGFsbG9jYXRlZCB0aGUgcmVzb3VyY2UKKyAqIEBwYXJhbSBfaXJxCQl0
aGUgcmVzb3VyY2UgcmVwcmVzZW50aW5nIHRoZSBpbnRlcnJ1cHQKKyAqIEBwYXJhbSBfY3B1CQl0
aGUgQ1BVIHRvIGJpbmQgdGhlIGludGVycnVwdCB0bworICovCisKK3N0YXRpYyBfX2lubGluZSBp
bnQgQlVTX0JJTkRfSU5UUihkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlc291cmNlICpfaXJxLCBpbnQgX2Nw
dSkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxi
dXNfYmluZF9pbnRyKTsKKwlyZXR1cm4gKChidXNfYmluZF9pbnRyX3QgKikgX20pKF9kZXYsIF9j
aGlsZCwgX2lycSwgX2NwdSk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9y
IHRoZSBCVVNfQ09ORklHX0lOVFIoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rl
c2MgYnVzX2NvbmZpZ19pbnRyX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50
aW5nIHRoZSBCVVNfQ09ORklHX0lOVFIoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGJ1c19jb25m
aWdfaW50cl90KGRldmljZV90IF9kZXYsIGludCBfaXJxLCBlbnVtIGludHJfdHJpZ2dlciBfdHJp
ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gaW50cl9wb2xhcml0eSBfcG9s
KTsKKy8qKgorICogQGJyaWVmIEFsbG93IChidXMpIGRyaXZlcnMgdG8gc3BlY2lmeSB0aGUgdHJp
Z2dlciBtb2RlIGFuZCBwb2xhcml0eQorICogb2YgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQuCisg
KiAKKyAqIEBwYXJhbSBfZGV2CQl0aGUgYnVzIGRldmljZQorICogQHBhcmFtIF9pcnEJCXRoZSBp
bnRlcnJ1cHQgbnVtYmVyIHRvIG1vZGlmeQorICogQHBhcmFtIF90cmlnCQl0aGUgdHJpZ2dlciBt
b2RlIHJlcXVpcmVkCisgKiBAcGFyYW0gX3BvbAkJdGhlIGludGVycnVwdCBwb2xhcml0eSByZXF1
aXJlZAorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX0NPTkZJR19JTlRSKGRldmljZV90
IF9kZXYsIGludCBfaXJxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51
bSBpbnRyX3RyaWdnZXIgX3RyaWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbnVtIGludHJfcG9sYXJpdHkgX3BvbCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09L
VVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfY29uZmlnX2ludHIpOworCXJldHVybiAoKGJ1c19j
b25maWdfaW50cl90ICopIF9tKShfZGV2LCBfaXJxLCBfdHJpZywgX3BvbCk7Cit9CisKKy8qKiBA
YnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfREVTQ1JJQkVfSU5UUigpIG1ldGhv
ZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfZGVzY3JpYmVfaW50cl9kZXNjOwor
LyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVTX0RFU0NSSUJFX0lOVFIo
KSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGJ1c19kZXNjcmliZV9pbnRyX3QoZGV2aWNlX3QgX2Rl
diwgZGV2aWNlX3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgcmVzb3VyY2UgKl9pcnEsIHZvaWQgKl9jb29raWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKl9kZXNjcik7CisvKioKKyAqIEBicmllZiBBbGxvdyBkcml2
ZXJzIHRvIGFzc29jaWF0ZSBhIGRlc2NyaXB0aW9uIHdpdGggYW4gYWN0aXZlCisgKiBpbnRlcnJ1
cHQgaGFuZGxlci4KKyAqCisgKiBAcGFyYW0gX2RldgkJdGhlIHBhcmVudCBkZXZpY2Ugb2YgQHAg
X2NoaWxkCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBkZXZpY2Ugd2hpY2ggYWxsb2NhdGVkIHRoZSBy
ZXNvdXJjZQorICogQHBhcmFtIF9pcnEJCXRoZSByZXNvdXJjZSByZXByZXNlbnRpbmcgdGhlIGlu
dGVycnVwdAorICogQHBhcmFtIF9jb29raWUJdGhlIGNvb2tpZSB2YWx1ZSByZXR1cm5lZCB3aGVu
IHRoZSBpbnRlcnJ1cHQKKyAqCQkJd2FzIG9yaWdpbmFsbHkgcmVnaXN0ZXJlZAorICogQHBhcmFt
IF9kZXNjcgl0aGUgZGVzY3JpcHRpb24gdG8gYXNzb2NpYXRlIHdpdGggdGhlIGludGVycnVwdAor
ICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX0RFU0NSSUJFX0lOVFIoZGV2aWNlX3QgX2Rl
diwgZGV2aWNlX3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgcmVzb3VyY2UgKl9pcnEsIHZvaWQgKl9jb29raWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9kZXNjcikKK3sKKwlrb2Jqb3BfdCBf
bTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfZGVzY3JpYmVfaW50cik7
CisJcmV0dXJuICgoYnVzX2Rlc2NyaWJlX2ludHJfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfaXJx
LCBfY29va2llLCBfZGVzY3IpOworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZv
ciB0aGUgQlVTX0hJTlRFRF9DSElMRCgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3Bf
ZGVzYyBidXNfaGludGVkX2NoaWxkX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVt
ZW50aW5nIHRoZSBCVVNfSElOVEVEX0NISUxEKCkgbWV0aG9kICovCit0eXBlZGVmIHZvaWQgYnVz
X2hpbnRlZF9jaGlsZF90KGRldmljZV90IF9kZXYsIGNvbnN0IGNoYXIgKl9kbmFtZSwgaW50IF9k
dW5pdCk7CisvKioKKyAqIEBicmllZiBOb3RpZnkgYSAoYnVzKSBkcml2ZXIgYWJvdXQgYSBjaGls
ZCB0aGF0IHRoZSBoaW50cyBtZWNoYW5pc20KKyAqIGJlbGlldmVzIGl0IGhhcyBkaXNjb3ZlcmVk
LgorICoKKyAqIFRoZSBidXMgaXMgcmVzcG9uc2libGUgZm9yIHRoZW4gYWRkaW5nIHRoZSBjaGls
ZCBpbiB0aGUgcmlnaHQgb3JkZXIKKyAqIGFuZCBkaXNjb3ZlcmluZyBvdGhlciB0aGluZ3MgYWJv
dXQgdGhlIGNoaWxkLiAgVGhlIGJ1cyBkcml2ZXIgaXMKKyAqIGZyZWUgdG8gaWdub3JlIHRoaXMg
aGludCwgdG8gZG8gc3BlY2lhbCB0aGluZ3MsIGV0Yy4gIEl0IGlzIGFsbCB1cAorICogdG8gdGhl
IGJ1cyBkcml2ZXIgdG8gaW50ZXJwcmV0LgorICoKKyAqIFRoaXMgbWV0aG9kIGlzIG9ubHkgY2Fs
bGVkIGluIHJlc3BvbnNlIHRvIHRoZSBwYXJlbnQgYnVzIGFza2luZyBmb3IKKyAqIGhpbnRlZCBk
ZXZpY2VzIHRvIGJlIGVudW1lcmF0ZWQuCisgKgorICogQHBhcmFtIF9kZXYJCXRoZSBidXMgZGV2
aWNlCisgKiBAcGFyYW0gX2RuYW1lCXRoZSBuYW1lIG9mIHRoZSBkZXZpY2Ugdy9vIHVuaXQgbnVt
YmVycworICogQHBhcmFtIF9kdW5pdAl0aGUgdW5pdCBudW1iZXIgb2YgdGhlIGRldmljZQorICov
CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIEJVU19ISU5URURfQ0hJTEQoZGV2aWNlX3QgX2Rldiwg
Y29uc3QgY2hhciAqX2RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX2R1bml0KQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClf
ZGV2KS0+b3BzLGJ1c19oaW50ZWRfY2hpbGQpOworCSgoYnVzX2hpbnRlZF9jaGlsZF90ICopIF9t
KShfZGV2LCBfZG5hbWUsIF9kdW5pdCk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0
b3IgZm9yIHRoZSBCVVNfR0VUX0RNQV9UQUcoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29i
am9wX2Rlc2MgYnVzX2dldF9kbWFfdGFnX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1w
bGVtZW50aW5nIHRoZSBCVVNfR0VUX0RNQV9UQUcoKSBtZXRob2QgKi8KK3R5cGVkZWYgYnVzX2Rt
YV90YWdfdCBidXNfZ2V0X2RtYV90YWdfdChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQp
OworLyoqCisgKiBAYnJpZWYgUmV0dXJucyBidXNfZG1hX3RhZ190IGZvciB1c2Ugdy8gZGV2aWNl
cyBvbiB0aGUgYnVzLgorICoKKyAqIEBwYXJhbSBfZGV2CQl0aGUgcGFyZW50IGRldmljZSBvZiBA
cCBfY2hpbGQKKyAqIEBwYXJhbSBfY2hpbGQJdGhlIGRldmljZSB0byB3aGljaCB0aGUgdGFnIHdp
bGwgYmVsb25nCisgKi8KKworc3RhdGljIF9faW5saW5lIGJ1c19kbWFfdGFnX3QgQlVTX0dFVF9E
TUFfVEFHKGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCkKK3sKKwlrb2Jqb3BfdCBfbTsK
KwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfZ2V0X2RtYV90YWcpOworCXJl
dHVybiAoKGJ1c19nZXRfZG1hX3RhZ190ICopIF9tKShfZGV2LCBfY2hpbGQpOworfQorCisvKiog
QGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgQlVTX0dFVF9CVVNfVEFHKCkgbWV0aG9k
ICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c19nZXRfYnVzX3RhZ19kZXNjOworLyoq
IEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVTX0dFVF9CVVNfVEFHKCkgbWV0
aG9kICovCit0eXBlZGVmIGJ1c19zcGFjZV90YWdfdCBidXNfZ2V0X2J1c190YWdfdChkZXZpY2Vf
dCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQpOworLyoqCisgKiBAYnJpZWYgUmV0dXJucyBidXNfc3Bh
Y2VfdGFnX3QgZm9yIHVzZSB3LyBkZXZpY2VzIG9uIHRoZSBidXMuCisgKgorICogQHBhcmFtIF9k
ZXYJCXRoZSBwYXJlbnQgZGV2aWNlIG9mIEBwIF9jaGlsZAorICogQHBhcmFtIF9jaGlsZAl0aGUg
ZGV2aWNlIHRvIHdoaWNoIHRoZSB0YWcgd2lsbCBiZWxvbmcKKyAqLworCitzdGF0aWMgX19pbmxp
bmUgYnVzX3NwYWNlX3RhZ190IEJVU19HRVRfQlVTX1RBRyhkZXZpY2VfdCBfZGV2LCBkZXZpY2Vf
dCBfY2hpbGQpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYp
LT5vcHMsYnVzX2dldF9idXNfdGFnKTsKKwlyZXR1cm4gKChidXNfZ2V0X2J1c190YWdfdCAqKSBf
bSkoX2RldiwgX2NoaWxkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3Ig
dGhlIEJVU19ISU5UX0RFVklDRV9VTklUKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpv
cF9kZXNjIGJ1c19oaW50X2RldmljZV91bml0X2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24g
aW1wbGVtZW50aW5nIHRoZSBCVVNfSElOVF9ERVZJQ0VfVU5JVCgpIG1ldGhvZCAqLwordHlwZWRl
ZiB2b2lkIGJ1c19oaW50X2RldmljZV91bml0X3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2No
aWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX25h
bWUsIGludCAqX3VuaXRwKTsKKy8qKgorICogQGJyaWVmIEFsbG93IHRoZSBidXMgdG8gZGV0ZXJt
aW5lIHRoZSB1bml0IG51bWJlciBvZiBhIGRldmljZS4KKyAqCisgKiBAcGFyYW0gX2RldgkJdGhl
IHBhcmVudCBkZXZpY2Ugb2YgQHAgX2NoaWxkCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBkZXZpY2Ug
d2hvc2UgdW5pdCBpcyB0byBiZSB3aXJlZAorICogQHBhcmFtIF9uYW1lCQl0aGUgbmFtZSBvZiB0
aGUgZGV2aWNlJ3MgbmV3IGRldmNsYXNzCisgKiBAcGFyYW0gX3VuaXRwCWEgcG9pbnRlciB0byB0
aGUgZGV2aWNlJ3MgbmV3IHVuaXQgdmFsdWUKKyAqLworCitzdGF0aWMgX19pbmxpbmUgdm9pZCBC
VVNfSElOVF9ERVZJQ0VfVU5JVChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfbmFtZSwg
aW50ICpfdW5pdHApCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9k
ZXYpLT5vcHMsYnVzX2hpbnRfZGV2aWNlX3VuaXQpOworCSgoYnVzX2hpbnRfZGV2aWNlX3VuaXRf
dCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfbmFtZSwgX3VuaXRwKTsKK30KKworLyoqIEBicmllZiBV
bmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJVU19ORVdfUEFTUygpIG1ldGhvZCAqLworZXh0ZXJu
IHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfbmV3X3Bhc3NfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5j
dGlvbiBpbXBsZW1lbnRpbmcgdGhlIEJVU19ORVdfUEFTUygpIG1ldGhvZCAqLwordHlwZWRlZiB2
b2lkIGJ1c19uZXdfcGFzc190KGRldmljZV90IF9kZXYpOworLyoqCisgKiBAYnJpZWYgTm90aWZ5
IGEgYnVzIHRoYXQgdGhlIGJ1cyBwYXNzIGxldmVsIGhhcyBiZWVuIGNoYW5nZWQKKyAqCisgKiBA
cGFyYW0gX2RldgkJdGhlIGJ1cyBkZXZpY2UKKyAqLworCitzdGF0aWMgX19pbmxpbmUgdm9pZCBC
VVNfTkVXX1BBU1MoZGV2aWNlX3QgX2RldikKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09L
VVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfbmV3X3Bhc3MpOworCSgoYnVzX25ld19wYXNzX3Qg
KikgX20pKF9kZXYpOworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUg
QlVTX1JFTUFQX0lOVFIoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgYnVz
X3JlbWFwX2ludHJfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhl
IEJVU19SRU1BUF9JTlRSKCkgbWV0aG9kICovCit0eXBlZGVmIGludCBidXNfcmVtYXBfaW50cl90
KGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCwgdV9pbnQgX2lycSk7CisvKioKKyAqIEBi
cmllZiBOb3RpZnkgYSBidXMgdGhhdCBzcGVjaWZpZWQgY2hpbGQncyBJUlEgc2hvdWxkIGJlIHJl
bWFwcGVkLgorICoKKyAqIEBwYXJhbSBfZGV2CQl0aGUgYnVzIGRldmljZQorICogQHBhcmFtIF9j
aGlsZAl0aGUgY2hpbGQgZGV2aWNlCisgKiBAcGFyYW0gX2lycQkJdGhlIGlycSBudW1iZXIKKyAq
LworCitzdGF0aWMgX19pbmxpbmUgaW50IEJVU19SRU1BUF9JTlRSKGRldmljZV90IF9kZXYsIGRl
dmljZV90IF9jaGlsZCwgdV9pbnQgX2lycSkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09L
VVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfcmVtYXBfaW50cik7CisJcmV0dXJuICgoYnVzX3Jl
bWFwX2ludHJfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfaXJxKTsKK30KKworLyoqIEBicmllZiBV
bmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJVU19TVVNQRU5EX0NISUxEKCkgbWV0aG9kICovCitl
eHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c19zdXNwZW5kX2NoaWxkX2Rlc2M7CisvKiogQGJy
aWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBCVVNfU1VTUEVORF9DSElMRCgpIG1ldGhv
ZCAqLwordHlwZWRlZiBpbnQgYnVzX3N1c3BlbmRfY2hpbGRfdChkZXZpY2VfdCBfZGV2LCBkZXZp
Y2VfdCBfY2hpbGQpOworLyoqCisgKiBAYnJpZWYgU3VzcGVuZCBhIGdpdmVuIGNoaWxkCisgKgor
ICogQHBhcmFtIF9kZXYJCXRoZSBwYXJlbnQgZGV2aWNlIG9mIEBwIF9jaGlsZAorICogQHBhcmFt
IF9jaGlsZAl0aGUgZGV2aWNlIHRvIHN1c3BlbmQKKyAqLworCitzdGF0aWMgX19pbmxpbmUgaW50
IEJVU19TVVNQRU5EX0NISUxEKGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCkKK3sKKwlr
b2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfc3VzcGVu
ZF9jaGlsZCk7CisJcmV0dXJuICgoYnVzX3N1c3BlbmRfY2hpbGRfdCAqKSBfbSkoX2RldiwgX2No
aWxkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJVU19SRVNV
TUVfQ0hJTEQoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgYnVzX3Jlc3Vt
ZV9jaGlsZF9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVT
X1JFU1VNRV9DSElMRCgpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgYnVzX3Jlc3VtZV9jaGlsZF90
KGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCk7CisvKioKKyAqIEBicmllZiBSZXN1bWUg
YSBnaXZlbiBjaGlsZAorICoKKyAqIEBwYXJhbSBfZGV2CQl0aGUgcGFyZW50IGRldmljZSBvZiBA
cCBfY2hpbGQKKyAqIEBwYXJhbSBfY2hpbGQJdGhlIGRldmljZSB0byByZXN1bWUKKyAqLworCitz
dGF0aWMgX19pbmxpbmUgaW50IEJVU19SRVNVTUVfQ0hJTEQoZGV2aWNlX3QgX2RldiwgZGV2aWNl
X3QgX2NoaWxkKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClfZGV2
KS0+b3BzLGJ1c19yZXN1bWVfY2hpbGQpOworCXJldHVybiAoKGJ1c19yZXN1bWVfY2hpbGRfdCAq
KSBfbSkoX2RldiwgX2NoaWxkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBm
b3IgdGhlIEJVU19HRVRfRE9NQUlOKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9k
ZXNjIGJ1c19nZXRfZG9tYWluX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50
aW5nIHRoZSBCVVNfR0VUX0RPTUFJTigpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgYnVzX2dldF9k
b21haW5fdChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsIGludCAqX2RvbWFpbik7Cisv
KioKKyAqIEBicmllZiBHZXQgdGhlIFZNIGRvbWFpbiBoYW5kbGUgZm9yIHRoZSBnaXZlbiBidXMg
YW5kIGNoaWxkLgorICoKKyAqIEBwYXJhbSBfZGV2CQl0aGUgYnVzIGRldmljZQorICogQHBhcmFt
IF9jaGlsZAl0aGUgY2hpbGQgZGV2aWNlCisgKiBAcGFyYW0gX2RvbWFpbglhIHBvaW50ZXIgdG8g
dGhlIGJ1cydzIGRvbWFpbiBoYW5kbGUgaWRlbnRpZmllcgorICovCisKK3N0YXRpYyBfX2lubGlu
ZSBpbnQgQlVTX0dFVF9ET01BSU4oZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkLCBpbnQg
Kl9kb21haW4pCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYp
LT5vcHMsYnVzX2dldF9kb21haW4pOworCXJldHVybiAoKGJ1c19nZXRfZG9tYWluX3QgKikgX20p
KF9kZXYsIF9jaGlsZCwgX2RvbWFpbik7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0
b3IgZm9yIHRoZSBCVVNfR0VUX0NQVVMoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9w
X2Rlc2MgYnVzX2dldF9jcHVzX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50
aW5nIHRoZSBCVVNfR0VUX0NQVVMoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGJ1c19nZXRfY3B1
c190KGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCwgZW51bSBjcHVfc2V0cyBfb3AsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX3NldHNpemUsIGNwdXNldF90ICpfY3B1
c2V0KTsKKy8qKgorICogQGJyaWVmIFJlcXVlc3QgYSBzZXQgb2YgQ1BVcworICoKKyAqIEBwYXJh
bSBfZGV2CQl0aGUgYnVzIGRldmljZQorICogQHBhcmFtIF9jaGlsZAl0aGUgY2hpbGQgZGV2aWNl
CisgKiBAcGFyYW0gX29wCQl0eXBlIG9mIENQVXMgdG8gcmVxdWVzdAorICogQHBhcmFtIF9zZXRz
aXplCXRoZSBzaXplIG9mIHRoZSBzZXQgcGFzc2VkIGluIF9jcHVzZXQKKyAqIEBwYXJhbSBfY3B1
c2V0CWEgcG9pbnRlciB0byBhIGNwdXNldCB0byByZWNlaXZlIHRoZSByZXF1ZXN0ZWQKKyAqCQkJ
c2V0IG9mIENQVXMKKyAqLworCitzdGF0aWMgX19pbmxpbmUgaW50IEJVU19HRVRfQ1BVUyhkZXZp
Y2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbnVtIGNwdV9zZXRzIF9vcCwgc2l6ZV90IF9zZXRzaXplLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3B1c2V0X3QgKl9jcHVzZXQpCit7CisJa29iam9wX3QgX207CisJ
S09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYpLT5vcHMsYnVzX2dldF9jcHVzKTsKKwlyZXR1cm4g
KChidXNfZ2V0X2NwdXNfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfb3AsIF9zZXRzaXplLCBfY3B1
c2V0KTsKK30KKworI2VuZGlmIC8qIF9idXNfaWZfaF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9kZXZpY2VfaWYuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAvZGV2aWNlX2lmLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL2RldmljZV9pZi5o
CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9k
dWxlcy9uZXRtYXAvZGV2aWNlX2lmLmgJMjAxNi0xMS0yMyAxNzowNTozMy44MTMwNTYwMDAgKzAw
MDAKQEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcHJvZHVjZWQgYXV0b21h
dGljYWxseS4KKyAqIERvIG5vdCBtb2RpZnkgYW55dGhpbmcgaW4gaGVyZSBieSBoYW5kLgorICoK
KyAqIENyZWF0ZWQgZnJvbSBzb3VyY2UgZmlsZQorICogICAvdXNyL3NyYy9zeXMva2Vybi9kZXZp
Y2VfaWYubQorICogd2l0aAorICogICBtYWtlb2Jqb3BzLmF3aworICoKKyAqIFNlZSB0aGUgc291
cmNlIGZpbGUgZm9yIGxlZ2FsIGluZm9ybWF0aW9uCisgKi8KKworLyoqCisgKiBAZGVmZ3JvdXAg
REVWSUNFIGRldmljZSAtIEtPYmogbWV0aG9kcyBmb3IgYWxsIGRldmljZSBkcml2ZXJzCisgKiBA
YnJpZWYgQSBiYXNpYyBzZXQgb2YgbWV0aG9kcyByZXF1aXJlZCBmb3IgYWxsIGRldmljZSBkcml2
ZXJzLgorICoKKyAqIFRoZSBkZXZpY2UgaW50ZXJmYWNlIGlzIHVzZWQgdG8gbWF0Y2ggZGV2aWNl
cyB0byBkcml2ZXJzIGR1cmluZworICogYXV0b2NvbmZpZ3VyYXRpb24gYW5kIHByb3ZpZGVzIG1l
dGhvZHMgdG8gYWxsb3cgZHJpdmVycyB0byBoYW5kbGUKKyAqIHN5c3RlbS13aWRlIGV2ZW50cyBz
dWNoIGFzIHN1c3BlbmQsIHJlc3VtZSBvciBzaHV0ZG93bi4KKyAqIEB7CisgKi8KKworI2lmbmRl
ZiBfZGV2aWNlX2lmX2hfCisjZGVmaW5lIF9kZXZpY2VfaWZfaF8KKworLyoqIEBicmllZiBVbmlx
dWUgZGVzY3JpcHRvciBmb3IgdGhlIERFVklDRV9QUk9CRSgpIG1ldGhvZCAqLworZXh0ZXJuIHN0
cnVjdCBrb2Jqb3BfZGVzYyBkZXZpY2VfcHJvYmVfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlv
biBpbXBsZW1lbnRpbmcgdGhlIERFVklDRV9QUk9CRSgpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQg
ZGV2aWNlX3Byb2JlX3QoZGV2aWNlX3QgZGV2KTsKKy8qKgorICogQGJyaWVmIFByb2JlIHRvIHNl
ZSBpZiBhIGRldmljZSBtYXRjaGVzIGEgZHJpdmVyLgorICoKKyAqIFVzZXJzIHNob3VsZCBub3Qg
Y2FsbCB0aGlzIG1ldGhvZCBkaXJlY3RseS4gTm9ybWFsbHksIHRoaXMKKyAqIGlzIGNhbGxlZCB2
aWEgZGV2aWNlX3Byb2JlX2FuZF9hdHRhY2goKSB0byBzZWxlY3QgYSBkcml2ZXIKKyAqIGNhbGxp
bmcgdGhlIERFVklDRV9QUk9CRSgpIG9mIGFsbCBjYW5kaWRhdGUgZHJpdmVycyBhbmQgYXR0YWNo
CisgKiB0aGUgd2lubmluZyBkcml2ZXIgKGlmIGFueSkgdG8gdGhlIGRldmljZS4KKyAqCisgKiBU
aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbWF0Y2ggZGV2aWNlcyB0byBkZXZpY2UgZHJpdmVycy4K
KyAqIFR5cGljYWxseSwgdGhlIGRyaXZlciB3aWxsIGV4YW1pbmUgdGhlIGRldmljZSB0byBzZWUg
aWYKKyAqIGl0IGlzIHN1aXRhYmxlIGZvciB0aGlzIGRyaXZlci4gVGhpcyBtaWdodCBpbmNsdWRl
IGNoZWNraW5nCisgKiB0aGUgdmFsdWVzIG9mIHZhcmlvdXMgZGV2aWNlIGluc3RhbmNlIHZhcmlh
YmxlcyBvciByZWFkaW5nCisgKiBoYXJkd2FyZSByZWdpc3RlcnMuCisgKiAgCisgKiBJbiBzb21l
IGNhc2VzLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBkcml2ZXIgYXZhaWxhYmxlCisgKiB3
aGljaCBjYW4gYmUgdXNlZCBmb3IgYSBkZXZpY2UgKGZvciBpbnN0YW5jZSB0aGVyZSBtaWdodAor
ICogYmUgYSBnZW5lcmljIGRyaXZlciB3aGljaCB3b3JrcyBmb3IgYSBzZXQgb2YgbWFueSB0eXBl
cyBvZgorICogZGV2aWNlIGFuZCBhIG1vcmUgc3BlY2lmaWMgZHJpdmVyIHdoaWNoIHdvcmtzIGZv
ciBhIHN1YnNldAorICogb2YgZGV2aWNlcykuIEJlY2F1c2Ugb2YgdGhpcywgYSBkcml2ZXIgc2hv
dWxkIG5vdCBhc3N1bWUKKyAqIHRoYXQgaXQgd2lsbCBiZSB0aGUgZHJpdmVyIHRoYXQgYXR0YWNo
ZXMgdG8gdGhlIGRldmljZSBldmVuCisgKiBpZiBpdCByZXR1cm5zIGEgc3VjY2VzcyBzdGF0dXMg
ZnJvbSBERVZJQ0VfUFJPQkUoKS4gSW4gcGFydGljdWxhciwKKyAqIGEgZHJpdmVyIG11c3QgZnJl
ZSBhbnkgcmVzb3VyY2VzIHdoaWNoIGl0IGFsbG9jYXRlZCBkdXJpbmcKKyAqIHRoZSBwcm9iZSBi
ZWZvcmUgcmV0dXJuaW5nLiBUaGUgcmV0dXJuIHZhbHVlIG9mIERFVklDRV9QUk9CRSgpCisgKiBp
cyB1c2VkIHRvIGVsZWN0IHdoaWNoIGRyaXZlciBpcyB1c2VkIC0gdGhlIGRyaXZlciB3aGljaCBy
ZXR1cm5zCisgKiB0aGUgbGFyZ2VzdCBub24tZXJyb3IgdmFsdWUgd2lucyB0aGUgZWxlY3Rpb24g
YW5kIGF0dGFjaGVzIHRvCisgKiB0aGUgZGV2aWNlLiBDb21tb24gbm9uLWVycm9yIHZhbHVlcyBh
cmUgZGVzY3JpYmVkIGluIHRoZQorICogREVWSUNFX1BST0JFKDkpIG1hbnVhbCBwYWdlLgorICoK
KyAqIElmIGEgZHJpdmVyIG1hdGNoZXMgdGhlIGhhcmR3YXJlLCBpdCBzaG91bGQgc2V0IHRoZSBk
ZXZpY2UKKyAqIGRlc2NyaXB0aW9uIHN0cmluZyB1c2luZyBkZXZpY2Vfc2V0X2Rlc2MoKSBvcgor
ICogZGV2aWNlX3NldF9kZXNjX2NvcHkoKS4gVGhpcyBzdHJpbmcgaXMgdXNlZCB0byBnZW5lcmF0
ZSBhbgorICogaW5mb3JtYXRpdmUgbWVzc2FnZSB3aGVuIERFVklDRV9BVFRBQ0goKSBpcyBjYWxs
ZWQuCisgKiAKKyAqIEFzIGEgc3BlY2lhbCBjYXNlLCBpZiBhIGRyaXZlciByZXR1cm5zIHplcm8s
IHRoZSBkcml2ZXIgZWxlY3Rpb24KKyAqIGlzIGN1dCBzaG9ydCBhbmQgdGhhdCBkcml2ZXIgd2ls
bCBhdHRhY2ggdG8gdGhlIGRldmljZQorICogaW1tZWRpYXRlbHkuIFRoaXMgc2hvdWxkIHJhcmVs
eSBiZSB1c2VkLgorICoKKyAqIEZvciBleGFtcGxlLCBhIHByb2JlIG1ldGhvZCBmb3IgYSBQQ0kg
ZGV2aWNlIGRyaXZlciBtaWdodCBsb29rCisgKiBsaWtlIHRoaXM6CisgKgorICogQGNvZGUKKyAq
IGludAorICogZm9vX3Byb2JlKGRldmljZV90IGRldikKKyAqIHsKKyAqICAgICAgICAgaWYgKHBj
aV9nZXRfdmVuZG9yKGRldikgPT0gRk9PVkVORE9SICYmCisgKiAgICAgICAgICAgICBwY2lfZ2V0
X2RldmljZShkZXYpID09IEZPT0RFVklDRSkgeworICogICAgICAgICAgICAgICAgIGRldmljZV9z
ZXRfZGVzYyhkZXYsICJGb28gZGV2aWNlIik7CisgKiAgICAgICAgICAgICAgICAgcmV0dXJuIChC
VVNfUFJPQkVfREVGQVVMVCk7CisgKiAgICAgICAgIH0KKyAqICAgICAgICAgcmV0dXJuIChFTlhJ
Tyk7CisgKiB9CisgKiBAZW5kY29kZQorICoKKyAqIFRvIGluY2x1ZGUgdGhpcyBtZXRob2QgaW4g
YSBkZXZpY2UgZHJpdmVyLCB1c2UgYSBsaW5lIGxpa2UgdGhpcworICogaW4gdGhlIGRyaXZlcidz
IG1ldGhvZCBsaXN0OgorICoKKyAqIEBjb2RlCisgKiAJS09CSk1FVEhPRChkZXZpY2VfcHJvYmUs
IGZvb19wcm9iZSkKKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGRldgkJdGhlIGRldmljZSB0
byBwcm9iZQorICoKKyAqIEByZXR2YWwgMAkJaWYgdGhpcyBpcyB0aGUgb25seSBwb3NzaWJsZSBk
cml2ZXIgZm9yIHRoaXMKKyAqCQkJZGV2aWNlCisgKiBAcmV0dmFsIG5lZ2F0aXZlCWlmIHRoZSBk
cml2ZXIgY2FuIG1hdGNoIHRoaXMgZGV2aWNlIC0gdGhlCisgKgkJCWxlYXN0IG5lZ2F0aXZlIHZh
bHVlIGlzIHVzZWQgdG8gc2VsZWN0IHRoZQorICoJCQlkcml2ZXIKKyAqIEByZXR2YWwgRU5YSU8J
aWYgdGhlIGRyaXZlciBkb2VzIG5vdCBtYXRjaCB0aGUgZGV2aWNlCisgKiBAcmV0dmFsIHBvc2l0
aXZlCWlmIHNvbWUga2luZCBvZiBlcnJvciB3YXMgZGV0ZWN0ZWQgZHVyaW5nCisgKgkJCXRoZSBw
cm9iZSwgYSByZWd1bGFyIHVuaXggZXJyb3IgY29kZSBzaG91bGQKKyAqCQkJYmUgcmV0dXJuZWQg
dG8gaW5kaWNhdGUgdGhlIHR5cGUgb2YgZXJyb3IKKyAqIEBzZWUgREVWSUNFX0FUVEFDSCgpLCBw
Y2lfZ2V0X3ZlbmRvcigpLCBwY2lfZ2V0X2RldmljZSgpCisgKi8KKworc3RhdGljIF9faW5saW5l
IGludCBERVZJQ0VfUFJPQkUoZGV2aWNlX3QgZGV2KQoreworCWtvYmpvcF90IF9tOworCUtPQkpP
UExPT0tVUCgoKGtvYmpfdClkZXYpLT5vcHMsZGV2aWNlX3Byb2JlKTsKKwlyZXR1cm4gKChkZXZp
Y2VfcHJvYmVfdCAqKSBfbSkoZGV2KTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRv
ciBmb3IgdGhlIERFVklDRV9JREVOVElGWSgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jq
b3BfZGVzYyBkZXZpY2VfaWRlbnRpZnlfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBs
ZW1lbnRpbmcgdGhlIERFVklDRV9JREVOVElGWSgpIG1ldGhvZCAqLwordHlwZWRlZiB2b2lkIGRl
dmljZV9pZGVudGlmeV90KGRyaXZlcl90ICpkcml2ZXIsIGRldmljZV90IHBhcmVudCk7CisvKioK
KyAqIEBicmllZiBBbGxvdyBhIGRldmljZSBkcml2ZXIgdG8gZGV0ZWN0IGRldmljZXMgbm90IG90
aGVyd2lzZSBlbnVtZXJhdGVkLgorICoKKyAqIFRoZSBERVZJQ0VfSURFTlRJRlkoKSBtZXRob2Qg
aXMgdXNlZCBieSBzb21lIGRyaXZlcnMgKGUuZy4gdGhlIElTQQorICogYnVzIGRyaXZlcikgdG8g
aGVscCBwb3B1bGF0ZSB0aGUgYnVzIGRldmljZSB3aXRoIGEgdXNlZnVsIHNldCBvZgorICogY2hp
bGQgZGV2aWNlcywgbm9ybWFsbHkgYnkgY2FsbGluZyB0aGUgQlVTX0FERF9DSElMRCgpIG1ldGhv
ZCBvZgorICogdGhlIHBhcmVudCBkZXZpY2UuIEZvciBpbnN0YW5jZSwgdGhlIElTQSBidXMgZHJp
dmVyIHVzZXMgc2V2ZXJhbAorICogc3BlY2lhbCBkcml2ZXJzLCBpbmNsdWRpbmcgdGhlIGlzYWhp
bnQgZHJpdmVyIGFuZCB0aGUgcG5wIGRyaXZlciB0bworICogY3JlYXRlIGNoaWxkIGRldmljZXMg
YmFzZWQgb24gY29uZmlndXJhdGlvbiBoaW50cyBhbmQgUG5QIGJ1cworICogcHJvYmVzIHJlc3Bl
Y3RpdmVseS4KKyAqCisgKiBNYW55IGJ1cyBkcml2ZXJzIHdoaWNoIHN1cHBvcnQgdHJ1ZSBwbHVn
LWFuZC1wbGF5IGRvIG5vdCBuZWVkIHRvCisgKiB1c2UgdGhpcyBtZXRob2QgYXQgYWxsIHNpbmNl
IGNoaWxkIGRldmljZXMgY2FuIGJlIGRpc2NvdmVyZWQKKyAqIGF1dG9tYXRpY2FsbHkgd2l0aG91
dCBoZWxwIGZyb20gY2hpbGQgZHJpdmVycy4KKyAqCisgKiBUbyBpbmNsdWRlIHRoaXMgbWV0aG9k
IGluIGEgZGV2aWNlIGRyaXZlciwgdXNlIGEgbGluZSBsaWtlIHRoaXMKKyAqIGluIHRoZSBkcml2
ZXIncyBtZXRob2QgbGlzdDoKKyAqCisgKiBAY29kZQorICogCUtPQkpNRVRIT0QoZGV2aWNlX2lk
ZW50aWZ5LCBmb29faWRlbnRpZnkpCisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBkcml2ZXIJ
dGhlIGRyaXZlciB3aG9zZSBpZGVudGlmeSBtZXRob2QgaXMgYmVpbmcgY2FsbGVkCisgKiBAcGFy
YW0gcGFyZW50CXRoZSBwYXJlbnQgZGV2aWNlIHRvIHVzZSB3aGVuIGFkZGluZyBuZXcgY2hpbGRy
ZW4KKyAqLworCitzdGF0aWMgX19pbmxpbmUgdm9pZCBERVZJQ0VfSURFTlRJRlkoZHJpdmVyX3Qg
KmRyaXZlciwgZGV2aWNlX3QgcGFyZW50KQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tV
UChkcml2ZXItPm9wcyxkZXZpY2VfaWRlbnRpZnkpOworCSgoZGV2aWNlX2lkZW50aWZ5X3QgKikg
X20pKGRyaXZlciwgcGFyZW50KTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBm
b3IgdGhlIERFVklDRV9BVFRBQ0goKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rl
c2MgZGV2aWNlX2F0dGFjaF9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGlu
ZyB0aGUgREVWSUNFX0FUVEFDSCgpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgZGV2aWNlX2F0dGFj
aF90KGRldmljZV90IGRldik7CisvKioKKyAqIEBicmllZiBBdHRhY2ggYSBkZXZpY2UgdG8gYSBk
ZXZpY2UgZHJpdmVyCisgKgorICogTm9ybWFsbHkgb25seSBjYWxsZWQgdmlhIGRldmljZV9wcm9i
ZV9hbmRfYXR0YWNoKCksIHRoaXMgaXMgY2FsbGVkCisgKiB3aGVuIGEgZHJpdmVyIGhhcyBzdWNj
ZWVkZWQgaW4gcHJvYmluZyBhZ2FpbnN0IGEgZGV2aWNlLgorICogVGhpcyBtZXRob2Qgc2hvdWxk
IGluaXRpYWxpc2UgdGhlIGhhcmR3YXJlIGFuZCBhbGxvY2F0ZSBvdGhlcgorICogc3lzdGVtIHJl
c291cmNlcyAoZS5nLiBkZXZmcyBlbnRyaWVzKSBhcyByZXF1aXJlZC4KKyAqCisgKiBUbyBpbmNs
dWRlIHRoaXMgbWV0aG9kIGluIGEgZGV2aWNlIGRyaXZlciwgdXNlIGEgbGluZSBsaWtlIHRoaXMK
KyAqIGluIHRoZSBkcml2ZXIncyBtZXRob2QgbGlzdDoKKyAqCisgKiBAY29kZQorICogCUtPQkpN
RVRIT0QoZGV2aWNlX2F0dGFjaCwgZm9vX2F0dGFjaCkKKyAqIEBlbmRjb2RlCisgKgorICogQHBh
cmFtIGRldgkJdGhlIGRldmljZSB0byBwcm9iZQorICoKKyAqIEByZXR2YWwgMAkJc3VjY2Vzcwor
ICogQHJldHZhbCBub24temVybwlpZiBzb21lIGtpbmQgb2YgZXJyb3Igd2FzIGRldGVjdGVkIGR1
cmluZworICoJCQl0aGUgYXR0YWNoLCBhIHJlZ3VsYXIgdW5peCBlcnJvciBjb2RlIHNob3VsZAor
ICoJCQliZSByZXR1cm5lZCB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBlcnJvcgorICogQHNlZSBE
RVZJQ0VfUFJPQkUoKQorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgREVWSUNFX0FUVEFDSChk
ZXZpY2VfdCBkZXYpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KWRl
diktPm9wcyxkZXZpY2VfYXR0YWNoKTsKKwlyZXR1cm4gKChkZXZpY2VfYXR0YWNoX3QgKikgX20p
KGRldik7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBERVZJQ0Vf
REVUQUNIKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGRldmljZV9kZXRh
Y2hfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIERFVklDRV9E
RVRBQ0goKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGRldmljZV9kZXRhY2hfdChkZXZpY2VfdCBk
ZXYpOworLyoqCisgKiBAYnJpZWYgRGV0YWNoIGEgZHJpdmVyIGZyb20gYSBkZXZpY2UuCisgKgor
ICogVGhpcyBjYW4gYmUgY2FsbGVkIGlmIHRoZSB1c2VyIGlzIHJlcGxhY2luZyB0aGUKKyAqIGRy
aXZlciBzb2Z0d2FyZSBvciBpZiBhIGRldmljZSBpcyBhYm91dCB0byBiZSBwaHlzaWNhbGx5IHJl
bW92ZWQKKyAqIGZyb20gdGhlIHN5c3RlbSAoZS5nLiBmb3IgcmVtb3ZhYmxlIGhhcmR3YXJlIHN1
Y2ggYXMgVVNCIG9yIFBDQ0FSRCkuCisgKgorICogVG8gaW5jbHVkZSB0aGlzIG1ldGhvZCBpbiBh
IGRldmljZSBkcml2ZXIsIHVzZSBhIGxpbmUgbGlrZSB0aGlzCisgKiBpbiB0aGUgZHJpdmVyJ3Mg
bWV0aG9kIGxpc3Q6CisgKgorICogQGNvZGUKKyAqIAlLT0JKTUVUSE9EKGRldmljZV9kZXRhY2gs
IGZvb19kZXRhY2gpCisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBkZXYJCXRoZSBkZXZpY2Ug
dG8gZGV0YWNoCisgKgorICogQHJldHZhbCAwCQlzdWNjZXNzCisgKiBAcmV0dmFsIG5vbi16ZXJv
CXRoZSBkZXRhY2ggY291bGQgbm90IGJlIHBlcmZvcm1lZCwgZS5nLiBpZiB0aGUKKyAqCQkJZHJp
dmVyIGRvZXMgbm90IHN1cHBvcnQgZGV0YWNoaW5nLgorICoKKyAqIEBzZWUgREVWSUNFX0FUVEFD
SCgpCisgKi8KKworc3RhdGljIF9faW5saW5lIGludCBERVZJQ0VfREVUQUNIKGRldmljZV90IGRl
dikKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLGRl
dmljZV9kZXRhY2gpOworCXJldHVybiAoKGRldmljZV9kZXRhY2hfdCAqKSBfbSkoZGV2KTsKK30K
KworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIERFVklDRV9TSFVURE9XTigp
IG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBkZXZpY2Vfc2h1dGRvd25fZGVz
YzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIERFVklDRV9TSFVURE9X
TigpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgZGV2aWNlX3NodXRkb3duX3QoZGV2aWNlX3QgZGV2
KTsKKy8qKgorICogQGJyaWVmIENhbGxlZCBkdXJpbmcgc3lzdGVtIHNodXRkb3duLgorICoKKyAq
IFRoaXMgbWV0aG9kIGFsbG93cyBkcml2ZXJzIHRvIGRldGVjdCB3aGVuIHRoZSBzeXN0ZW0gaXMg
YmVpbmcgc2h1dCBkb3duLgorICogU29tZSBkcml2ZXJzIG5lZWQgdG8gdXNlIHRoaXMgdG8gcGxh
Y2UgdGhlaXIgaGFyZHdhcmUgaW4gYSBjb25zaXN0ZW50CisgKiBzdGF0ZSBiZWZvcmUgcmVib290
aW5nIHRoZSBjb21wdXRlci4KKyAqCisgKiBUbyBpbmNsdWRlIHRoaXMgbWV0aG9kIGluIGEgZGV2
aWNlIGRyaXZlciwgdXNlIGEgbGluZSBsaWtlIHRoaXMKKyAqIGluIHRoZSBkcml2ZXIncyBtZXRo
b2QgbGlzdDoKKyAqCisgKiBAY29kZQorICogCUtPQkpNRVRIT0QoZGV2aWNlX3NodXRkb3duLCBm
b29fc2h1dGRvd24pCisgKiBAZW5kY29kZQorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgREVW
SUNFX1NIVVRET1dOKGRldmljZV90IGRldikKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09L
VVAoKChrb2JqX3QpZGV2KS0+b3BzLGRldmljZV9zaHV0ZG93bik7CisJcmV0dXJuICgoZGV2aWNl
X3NodXRkb3duX3QgKikgX20pKGRldik7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0
b3IgZm9yIHRoZSBERVZJQ0VfU1VTUEVORCgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jq
b3BfZGVzYyBkZXZpY2Vfc3VzcGVuZF9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxl
bWVudGluZyB0aGUgREVWSUNFX1NVU1BFTkQoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGRldmlj
ZV9zdXNwZW5kX3QoZGV2aWNlX3QgZGV2KTsKKy8qKgorICogQGJyaWVmIFRoaXMgaXMgY2FsbGVk
IGJ5IHRoZSBwb3dlci1tYW5hZ2VtZW50IHN1YnN5c3RlbSB3aGVuIGEKKyAqIHN1c3BlbmQgaGFz
IGJlZW4gcmVxdWVzdGVkIGJ5IHRoZSB1c2VyIG9yIGJ5IHNvbWUgYXV0b21hdGljCisgKiBtZWNo
YW5pc20uCisgKgorICogVGhpcyBnaXZlcyBkcml2ZXJzIGEgY2hhbmNlIHRvIHZldG8gdGhlIHN1
c3BlbmQgb3Igc2F2ZSB0aGVpcgorICogY29uZmlndXJhdGlvbiBiZWZvcmUgcG93ZXIgaXMgcmVt
b3ZlZC4KKyAqCisgKiBUbyBpbmNsdWRlIHRoaXMgbWV0aG9kIGluIGEgZGV2aWNlIGRyaXZlciwg
dXNlIGEgbGluZSBsaWtlIHRoaXMgaW4KKyAqIHRoZSBkcml2ZXIncyBtZXRob2QgbGlzdDoKKyAq
CisgKiBAY29kZQorICogCUtPQkpNRVRIT0QoZGV2aWNlX3N1c3BlbmQsIGZvb19zdXNwZW5kKQor
ICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gZGV2CQl0aGUgZGV2aWNlIGJlaW5nIHN1c3BlbmRl
ZAorICoKKyAqIEByZXR2YWwgMAkJc3VjY2VzcworICogQHJldHZhbCBub24temVybwlhbiBlcnJv
ciBvY2N1cnJlZCB3aGlsZSBhdHRlbXB0aW5nIHRvIHByZXBhcmUgdGhlCisgKiAgICAgICAgICAg
ICAgICAgICAgICBkZXZpY2UgZm9yIHN1c3BlbnNpb24KKyAqCisgKiBAc2VlIERFVklDRV9SRVNV
TUUoKQorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgREVWSUNFX1NVU1BFTkQoZGV2aWNlX3Qg
ZGV2KQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5vcHMs
ZGV2aWNlX3N1c3BlbmQpOworCXJldHVybiAoKGRldmljZV9zdXNwZW5kX3QgKikgX20pKGRldik7
Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBERVZJQ0VfUkVTVU1F
KCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGRldmljZV9yZXN1bWVfZGVz
YzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIERFVklDRV9SRVNVTUUo
KSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGRldmljZV9yZXN1bWVfdChkZXZpY2VfdCBkZXYpOwor
LyoqCisgKiBAYnJpZWYgVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgc3lzdGVtIHJlc3VtZXMgYWZ0
ZXIgYSBzdXNwZW5kLgorICoKKyAqIFRvIGluY2x1ZGUgdGhpcyBtZXRob2QgaW4gYSBkZXZpY2Ug
ZHJpdmVyLCB1c2UgYSBsaW5lIGxpa2UgdGhpcworICogaW4gdGhlIGRyaXZlcidzIG1ldGhvZCBs
aXN0OgorICoKKyAqIEBjb2RlCisgKiAJS09CSk1FVEhPRChkZXZpY2VfcmVzdW1lLCBmb29fcmVz
dW1lKQorICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gZGV2CQl0aGUgZGV2aWNlIGJlaW5nIHJl
c3VtZWQKKyAqCisgKiBAcmV0dmFsIDAJCXN1Y2Nlc3MKKyAqIEByZXR2YWwgbm9uLXplcm8JYW4g
ZXJyb3Igb2NjdXJyZWQgd2hpbGUgYXR0ZW1wdGluZyB0byByZXN0b3JlIHRoZQorICogICAgICAg
ICAgICAgICAgICAgICAgZGV2aWNlIGZyb20gc3VzcGVuc2lvbgorICoKKyAqIEBzZWUgREVWSUNF
X1NVU1BFTkQoKQorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgREVWSUNFX1JFU1VNRShkZXZp
Y2VfdCBkZXYpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KWRldikt
Pm9wcyxkZXZpY2VfcmVzdW1lKTsKKwlyZXR1cm4gKChkZXZpY2VfcmVzdW1lX3QgKikgX20pKGRl
dik7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBERVZJQ0VfUVVJ
RVNDRSgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBkZXZpY2VfcXVpZXNj
ZV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgREVWSUNFX1FV
SUVTQ0UoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGRldmljZV9xdWllc2NlX3QoZGV2aWNlX3Qg
ZGV2KTsKKy8qKgorICogQGJyaWVmIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGRyaXZlciBpcyBh
c2tlZCB0byBxdWllc2NlIGl0c2VsZi4KKyAqCisgKiBUaGUgZHJpdmVyIHNob3VsZCBhcnJhbmdl
IGZvciB0aGUgb3JkZXJseSBzaHV0ZG93biBvZiB0aGlzIGRldmljZS4KKyAqIEFsbCBmdXJ0aGVy
IGFjY2VzcyB0byB0aGUgZGV2aWNlIHNob3VsZCBiZSBjdXJ0YWlsZWQuICBTb29uIHRoZXJlCisg
KiB3aWxsIGJlIGEgcmVxdWVzdCB0byBkZXRhY2gsIGJ1dCB0aGVyZSB3b24ndCBuZWNlc3Nhcmls
eSBiZSBvbmUuCisgKgorICogVG8gaW5jbHVkZSB0aGlzIG1ldGhvZCBpbiBhIGRldmljZSBkcml2
ZXIsIHVzZSBhIGxpbmUgbGlrZSB0aGlzCisgKiBpbiB0aGUgZHJpdmVyJ3MgbWV0aG9kIGxpc3Q6
CisgKgorICogQGNvZGUKKyAqIAlLT0JKTUVUSE9EKGRldmljZV9xdWllc2NlLCBmb29fcXVpZXNj
ZSkKKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGRldgkJdGhlIGRldmljZSBiZWluZyBxdWll
c2NlZAorICoKKyAqIEByZXR2YWwgMAkJc3VjY2VzcworICogQHJldHZhbCBub24temVybwlhbiBl
cnJvciBvY2N1cnJlZCB3aGlsZSBhdHRlbXB0aW5nIHRvIHF1aWVzY2UgdGhlCisgKiAgICAgICAg
ICAgICAgICAgICAgICBkZXZpY2UKKyAqCisgKiBAc2VlIERFVklDRV9ERVRBQ0goKQorICovCisK
K3N0YXRpYyBfX2lubGluZSBpbnQgREVWSUNFX1FVSUVTQ0UoZGV2aWNlX3QgZGV2KQoreworCWtv
YmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5vcHMsZGV2aWNlX3F1aWVz
Y2UpOworCXJldHVybiAoKGRldmljZV9xdWllc2NlX3QgKikgX20pKGRldik7Cit9CisKKy8qKiBA
YnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBERVZJQ0VfUkVHSVNURVIoKSBtZXRob2Qg
Ki8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgZGV2aWNlX3JlZ2lzdGVyX2Rlc2M7CisvKiog
QGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBERVZJQ0VfUkVHSVNURVIoKSBtZXRo
b2QgKi8KK3R5cGVkZWYgdm9pZCAqIGRldmljZV9yZWdpc3Rlcl90KGRldmljZV90IGRldik7Cisv
KioKKyAqIEBicmllZiBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgaXMgYXNrZWQgdG8g
cmVnaXN0ZXIgaGFuZGxlcnMuCisgKgorICoKKyAqIFRvIGluY2x1ZGUgdGhpcyBtZXRob2QgaW4g
YSBkZXZpY2UgZHJpdmVyLCB1c2UgYSBsaW5lIGxpa2UgdGhpcworICogaW4gdGhlIGRyaXZlcidz
IG1ldGhvZCBsaXN0OgorICoKKyAqIEBjb2RlCisgKiAJS09CSk1FVEhPRChkZXZpY2VfcmVnaXN0
ZXIsIGZvb19yZWdpc3RlcikKKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGRldgkJdGhlIGRl
dmljZSBmb3Igd2hpY2ggaGFuZGxlcnMgYXJlIGJlaW5nIHJlZ2lzdGVyZWQKKyAqCisgKiBAcmV0
dmFsIE5VTEwgICAgIG1ldGhvZCBub3QgaW1wbGVtZW50ZWQKKyAqIEByZXR2YWwgbm9uLU5VTEwJ
YSBwb2ludGVyIHRvIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHN0YXRpYyBkcml2ZXIgc3RhdGUK
KyAqCisgKi8KKworc3RhdGljIF9faW5saW5lIHZvaWQgKiBERVZJQ0VfUkVHSVNURVIoZGV2aWNl
X3QgZGV2KQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5v
cHMsZGV2aWNlX3JlZ2lzdGVyKTsKKwlyZXR1cm4gKChkZXZpY2VfcmVnaXN0ZXJfdCAqKSBfbSko
ZGV2KTsKK30KKworI2VuZGlmIC8qIF9kZXZpY2VfaWZfaF8gKi8KRmlsZXMgdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvaWZfcHRuZXQubyBhbmQgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw
L2lmX3B0bmV0Lm8gZGlmZmVyCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAvbWFjaGluZS9fYWxpZ24uaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9f
YWxpZ24uaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9fYWxpZ24uaAkx
OTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvX2FsaWduLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAg
KzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGlj
IGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRl
L19hbGlnbi5oIDIxNTg1NiAyMDEwLTExLTI2IDEwOjU5OjIwWiB0aWpsICQgKi8KKworI2luY2x1
ZGUgPHg4Ni9fYWxpZ24uaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9tYWNoaW5lL19idXMuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9fYnVz
LmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvX2J1cy5oCTE5NzAtMDEt
MDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAvbWFjaGluZS9fYnVzLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAg
LTAsMCArMSw0NiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgTS4gV2FybmVyIExvc2gu
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1v
ZGlmaWNhdGlvbiwgaW1tZWRpYXRlbHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVl
QlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9fYnVzLmggMTQ1MjUzIDIwMDUtMDQt
MTggMjE6NDU6MzRaIGltcCAkCisgKi8KKworI2lmbmRlZiBBTUQ2NF9JTkNMVURFX19CVVNfSAor
I2RlZmluZSBBTUQ2NF9JTkNMVURFX19CVVNfSAorCisvKgorICogQnVzIGFkZHJlc3MgYW5kIHNp
emUgdHlwZXMKKyAqLwordHlwZWRlZiB1aW50NjRfdCBidXNfYWRkcl90OwordHlwZWRlZiB1aW50
NjRfdCBidXNfc2l6ZV90OworCisvKgorICogQWNjZXNzIG1ldGhvZHMgZm9yIGJ1cyByZXNvdXJj
ZXMgYW5kIGFkZHJlc3Mgc3BhY2UuCisgKi8KK3R5cGVkZWYJdWludDY0X3QgYnVzX3NwYWNlX3Rh
Z190OwordHlwZWRlZgl1aW50NjRfdCBidXNfc3BhY2VfaGFuZGxlX3Q7CisKKyNlbmRpZiAvKiBB
TUQ2NF9JTkNMVURFX19CVVNfSCAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL21hY2hpbmUvX2ludHR5cGVzLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUvX2ludHR5cGVzLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUv
X2ludHR5cGVzLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Iv
c3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL19pbnR0eXBlcy5oCTIwMTYtMDktMjkgMDA6
MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyotCisgKiBUaGlzIGZpbGUg
aXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNEOiByZWxlbmcvMTEuMC9z
eXMvYW1kNjQvaW5jbHVkZS9faW50dHlwZXMuaCAyMTcxNTcgMjAxMS0wMS0wOCAxODowOTo0OFog
dGlqbCAkICovCisKKyNpbmNsdWRlIDx4ODYvX2ludHR5cGVzLmg+CmRpZmYgLXUgLXIgLU4gdXNy
L3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9fbGltaXRzLmggL3Vzci9zcmMvc3lzL21v
ZHVsZXMvbmV0bWFwL21hY2hpbmUvX2xpbWl0cy5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25l
dG1hcC9tYWNoaW5lL19saW1pdHMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEw
MAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvX2xpbWl0cy5oCTIwMTYt
MDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyotCisgKiBU
aGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNEOiByZWxl
bmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9fbGltaXRzLmggMjMyMjYyIDIwMTItMDItMjggMTg6
MjQ6MjhaIHRpamwgJCAqLworCisjaW5jbHVkZSA8eDg2L19saW1pdHMuaD4KZGlmZiAtdSAtciAt
TiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL19zdGRpbnQuaCAvdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9fc3RkaW50LmgKLS0tIHVzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvX3N0ZGludC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw
ICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9fc3RkaW50LmgJ
MjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0K
KyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6
IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL19zdGRpbnQuaCAyMzIyNjQgMjAxMi0wMi0y
OCAxODozODozM1ogdGlqbCAkICovCisKKyNpbmNsdWRlIDx4ODYvX3N0ZGludC5oPgpkaWZmIC11
IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvX3R5cGVzLmggL3Vzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvX3R5cGVzLmgKLS0tIHVzci9zcmMvc3lzL21v
ZHVsZXMvbmV0bWFwL21hY2hpbmUvX3R5cGVzLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAw
MDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL190eXBlcy5o
CTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyot
CisgKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNE
OiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9fdHlwZXMuaCAyMzIyNjEgMjAxMi0wMi0y
OCAxODoxNToyOFogdGlqbCAkICovCisKKyNpbmNsdWRlIDx4ODYvX3R5cGVzLmg+CmRpZmYgLXUg
LXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9hY3BpY2FfbWFjaGRlcC5o
IC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2FjcGljYV9tYWNoZGVwLmgKLS0t
IHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvYWNwaWNhX21hY2hkZXAuaAkxOTcw
LTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL21hY2hpbmUvYWNwaWNhX21hY2hkZXAuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAw
MDAwMCArMDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhpcyBmaWxlIGlzIGluIHRoZSBw
dWJsaWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2lu
Y2x1ZGUvYWNwaWNhX21hY2hkZXAuaCAyNTQzMDUgMjAxMy0wOC0xMyAyMjowNToxMFogamtpbSAk
ICovCisKKyNpbmNsdWRlIDx4ODYvYWNwaWNhX21hY2hkZXAuaD4KZGlmZiAtdSAtciAtTiB1c3Iv
c3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2FwbV9iaW9zLmggL3Vzci9zcmMvc3lzL21v
ZHVsZXMvbmV0bWFwL21hY2hpbmUvYXBtX2Jpb3MuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvbWFjaGluZS9hcG1fYmlvcy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICsw
MTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9hcG1fYmlvcy5oCTIw
MTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyotCisg
KiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNEOiBy
ZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9hcG1fYmlvcy5oIDIxNTE0MCAyMDEwLTExLTEx
IDE5OjM2OjIxWiBqa2ltICQgKi8KKworI2luY2x1ZGUgPHg4Ni9hcG1fYmlvcy5oPgpkaWZmIC11
IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvYXNtLmggL3Vzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvYXNtLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL21hY2hpbmUvYXNtLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAK
KysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2FzbS5oCTIwMTYtMDktMjkg
MDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsOTkgQEAKKy8qLQorICogQ29weXJp
Z2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEu
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZy
b20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisg
KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpREVGUy5o
CTUuMSAoQmVya2VsZXkpIDQvMjMvOTAKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1k
NjQvaW5jbHVkZS9hc20uaCAyNzUwMDQgMjAxNC0xMS0yNSAwMzo1MDozMVogZW1hc3RlICQKKyAq
LworCisjaWZuZGVmIF9NQUNISU5FX0FTTV9IXworI2RlZmluZQlfTUFDSElORV9BU01fSF8KKwor
I2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjaWZkZWYgUElDCisjZGVmaW5lCVBJQ19QTFQoeCkJ
eEBQTFQKKyNkZWZpbmUJUElDX0dPVCh4KQl4QEdPVFBDUkVMKCVyaXApCisjZWxzZQorI2RlZmlu
ZQlQSUNfUExUKHgpCXgKKyNlbmRpZgorCisvKgorICogQ05BTUUgYW5kIEhJREVOQU1FIG1hbmFn
ZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gc3ltYm9sIG5hbWVzIGluIEMKKyAqIGFuZCB0aGUg
ZXF1aXZhbGVudCBhc3NlbWJseSBsYW5ndWFnZSBuYW1lcy4gIENOQU1FIGlzIGdpdmVuIGEgbmFt
ZSBhcworICogaXQgd291bGQgYmUgdXNlZCBpbiBhIEMgcHJvZ3JhbS4gIEl0IGV4cGFuZHMgdG8g
dGhlIGVxdWl2YWxlbnQgYXNzZW1ibHkKKyAqIGxhbmd1YWdlIG5hbWUuICBISURFTkFNRSBpcyBn
aXZlbiBhbiBhc3NlbWJseS1sYW5ndWFnZSBuYW1lLCBhbmQgZXhwYW5kcworICogdG8gYSBwb3Nz
aWJseS1tb2RpZmllZCBmb3JtIHRoYXQgd2lsbCBiZSBpbnZpc2libGUgdG8gQyBwcm9ncmFtcy4K
KyAqLworI2RlZmluZSBDTkFNRShjc3ltKQkJY3N5bQorI2RlZmluZSBISURFTkFNRShhc21zeW0p
CS5hc21zeW0KKworI2RlZmluZSBfU1RBUlRfRU5UUlkJLnRleHQ7IC5wMmFsaWduIDQsMHg5MAor
CisjZGVmaW5lIF9FTlRSWSh4KQlfU1RBUlRfRU5UUlk7IFwKKwkJCS5nbG9ibCBDTkFNRSh4KTsg
LnR5cGUgQ05BTUUoeCksQGZ1bmN0aW9uOyBDTkFNRSh4KToKKworI2lmZGVmIFBST0YKKyNkZWZp
bmUJQUxURU5UUlkoeCkJX0VOVFJZKHgpOyBcCisJCQlwdXNocSAlcmJwOyBtb3ZxICVyc3AsJXJi
cDsgXAorCQkJY2FsbCBQSUNfUExUKEhJREVOQU1FKG1jb3VudCkpOyBcCisJCQlwb3BxICVyYnA7
IFwKKwkJCWptcCA5ZgorI2RlZmluZQlFTlRSWSh4KQlfRU5UUlkoeCk7IFwKKwkJCXB1c2hxICVy
YnA7IG1vdnEgJXJzcCwlcmJwOyBcCisJCQljYWxsIFBJQ19QTFQoSElERU5BTUUobWNvdW50KSk7
IFwKKwkJCXBvcHEgJXJicDsgXAorCQkJOToKKyNlbHNlCisjZGVmaW5lCUFMVEVOVFJZKHgpCV9F
TlRSWSh4KQorI2RlZmluZQlFTlRSWSh4KQlfRU5UUlkoeCkKKyNlbmRpZgorCisjZGVmaW5lCUVO
RCh4KQkJLnNpemUgeCwgLiAtIHgKKy8qCisgKiBXRUFLX1JFRkVSRU5DRSgpOiBjcmVhdGUgYSB3
ZWFrIHJlZmVyZW5jZSBhbGlhcyBmcm9tIHN5bS4gCisgKiBUaGUgbWFjcm8gaXMgbm90IGEgZ2Vu
ZXJhbCBhc20gbWFjcm8gdGhhdCB0YWtlcyBhcmJpdHJhcnkgbmFtZXMsCisgKiBidXQgb25lIHRo
YXQgdGFrZXMgb25seSBDIG5hbWVzLiBJdCBkb2VzIHRoZSBub24tbnVsbCBuYW1lCisgKiB0cmFu
c2xhdGlvbiBpbnNpZGUgdGhlIG1hY3JvLgorICovCisjZGVmaW5lCVdFQUtfUkVGRVJFTkNFKHN5
bSwgYWxpYXMpCQkJCQlcCisJLndlYWsgQ05BTUUoYWxpYXMpOwkJCQkJCVwKKwkuZXF1IENOQU1F
KGFsaWFzKSxDTkFNRShzeW0pCisKKyNkZWZpbmUgUkNTSUQoeCkJLnRleHQ7IC5hc2NpeiB4CisK
KyN1bmRlZiBfX0ZCU0RJRAorI2lmICFkZWZpbmVkKGxpbnQpICYmICFkZWZpbmVkKFNUUklQX0ZC
U0RJRCkKKyNkZWZpbmUgX19GQlNESUQocykJLmlkZW50IHMKKyNlbHNlCisjZGVmaW5lIF9fRkJT
RElEKHMpCS8qIG5vdGhpbmcgKi8KKyNlbmRpZiAvKiBub3QgbGludCBhbmQgbm90IFNUUklQX0ZC
U0RJRCAqLworCisjZW5kaWYgLyogIV9NQUNISU5FX0FTTV9IXyAqLwpkaWZmIC11IC1yIC1OIHVz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvYXNtYWNyb3MuaCAvdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvbWFjaGluZS9hc21hY3Jvcy5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC9tYWNoaW5lL2FzbWFjcm9zLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAg
KzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2FzbWFjcm9zLmgJ
MjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwyNDAgQEAKKy8q
LQorICogQ29weXJpZ2h0IChjKSAxOTkzIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9m
IENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVp
dGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT
VUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1
ZGUvYXNtYWNyb3MuaCAyNzQ0ODkgMjAxNC0xMS0xMyAyMjoxMTo0NFogc2NvdHRsICQKKyAqLwor
CisjaWZuZGVmIF9NQUNISU5FX0FTTUFDUk9TX0hfCisjZGVmaW5lIF9NQUNISU5FX0FTTUFDUk9T
X0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworLyogWFhYIHRvbyBtdWNoIGR1cGxpY2F0
aW9uIGluIHZhcmlvdXMgYXNtKi5oJ3MuICovCisKKy8qCisgKiBDTkFNRSBpcyB1c2VkIHRvIG1h
bmFnZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gc3ltYm9sIG5hbWVzIGluIEMKKyAqIGFuZCB0
aGUgZXF1aXZhbGVudCBhc3NlbWJseSBsYW5ndWFnZSBuYW1lcy4gIENOQU1FIGlzIGdpdmVuIGEg
bmFtZSBhcworICogaXQgd291bGQgYmUgdXNlZCBpbiBhIEMgcHJvZ3JhbS4gIEl0IGV4cGFuZHMg
dG8gdGhlIGVxdWl2YWxlbnQgYXNzZW1ibHkKKyAqIGxhbmd1YWdlIG5hbWUuCisgKi8KKyNkZWZp
bmUgQ05BTUUoY3N5bSkJCWNzeW0KKworI2RlZmluZSBBTElHTl9EQVRBCS5wMmFsaWduIDMJLyog
OCBieXRlIGFsaWdubWVudCwgemVybyBmaWxsZWQgKi8KKyNpZmRlZiBHUFJPRgorI2RlZmluZSBB
TElHTl9URVhUCS5wMmFsaWduIDQsMHg5MAkvKiAxNi1ieXRlIGFsaWdubWVudCwgbm9wIGZpbGxl
ZCAqLworI2Vsc2UKKyNkZWZpbmUgQUxJR05fVEVYVAkucDJhbGlnbiA0LDB4OTAJLyogMTYtYnl0
ZSBhbGlnbm1lbnQsIG5vcCBmaWxsZWQgKi8KKyNlbmRpZgorI2RlZmluZSBTVVBFUkFMSUdOX1RF
WFQJLnAyYWxpZ24gNCwweDkwCS8qIDE2LWJ5dGUgYWxpZ25tZW50LCBub3AgZmlsbGVkICovCisK
KyNkZWZpbmUgR0VOX0VOVFJZKG5hbWUpCQlBTElHTl9URVhUOyAuZ2xvYmwgQ05BTUUobmFtZSk7
IFwKKwkJCQkudHlwZSBDTkFNRShuYW1lKSxAZnVuY3Rpb247IENOQU1FKG5hbWUpOgorI2RlZmlu
ZSBOT05fR1BST0ZfRU5UUlkobmFtZSkJR0VOX0VOVFJZKG5hbWUpCisjZGVmaW5lIE5PTl9HUFJP
Rl9SRVQJCS5ieXRlIDB4YzMJLyogb3Bjb2RlIGZvciBgcmV0JyAqLworCisjZGVmaW5lCUVORChu
YW1lKQkJLnNpemUgbmFtZSwgLiAtIG5hbWUKKworI2lmZGVmIEdQUk9GCisvKgorICogX19tY291
bnQgaXMgbGlrZSBbLl1tY291bnQgZXhjZXB0IHRoYXQgZG9lc24ndCByZXF1aXJlIGl0cyBjYWxs
ZXIgdG8gc2V0CisgKiB1cCBhIGZyYW1lIHBvaW50ZXIuICBJdCBtdXN0IGJlIGNhbGxlZCBiZWZv
cmUgcHVzaGluZyBhbnl0aGluZyBvbnRvIHRoZQorICogc3RhY2suICBnY2Mgc2hvdWxkIGV2ZW50
dWFsbHkgZ2VuZXJhdGUgY29kZSB0byBjYWxsIF9fbWNvdW50IGluIG1vc3QKKyAqIGNhc2VzLiAg
VGhpcyB3b3VsZCBtYWtlIC1wZyBpbiBjb21iaW5hdGlvbiB3aXRoIC1mb21pdC1mcmFtZS1wb2lu
dGVyCisgKiB1c2VmdWwuICBnY2MgaGFzIGEgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBQUk9GSUxF
X0JFRk9SRV9QUk9MT0dVRSB0bworICogYWxsb3cgcHJvZmlsaW5nIGJlZm9yZSBzZXR0aW5nIHVw
IHRoZSBmcmFtZSBwb2ludGVyLCBidXQgdGhpcyBpcworICogaW5hZGVxdWF0ZSBmb3IgZ29vZCBo
YW5kbGluZyBvZiBzcGVjaWFsIGNhc2VzLCBlLmcuLCAtZnBpYyB3b3JrcyBiZXN0CisgKiB3aXRo
IHByb2ZpbGluZyBhZnRlciB0aGUgcHJvbG9ndWUuCisgKgorICogWy5dbWV4aXRjb3VudCBpcyBh
IG5ldyBmdW5jdGlvbiB0byBzdXBwb3J0IG5vbi1zdGF0aXN0aWNhbCBwcm9maWxpbmcgaWYgYW4K
KyAqIGFjY3VyYXRlIGNsb2NrIGlzIGF2YWlsYWJsZS4gIEZvciBDIHNvdXJjZXMsIGNhbGxzIHRv
IGl0IGFyZSBnZW5lcmF0ZWQKKyAqIGJ5IHRoZSBGcmVlQlNEIGV4dGVuc2lvbiBgLW1wcm9maWxl
ci1lcGlsb2d1ZScgdG8gZ2NjLiAgSXQgaXMgYmVzdCB0bworICogY2FsbCBbLl1tZXhpdGNvdW50
IGF0IHRoZSBlbmQgb2YgYSBmdW5jdGlvbiBsaWtlIHRoZSBNRVhJVENPVU5UIG1hY3JvIGRvZXMs
CisgKiBidXQgZ2NjIGN1cnJlbnRseSBnZW5lcmF0ZXMgY2FsbHMgdG8gaXQgYXQgdGhlIHN0YXJ0
IG9mIHRoZSBlcGlsb2d1ZSB0bworICogYXZvaWQgcHJvYmxlbXMgd2l0aCAtZnBpYy4KKyAqCisg
KiBbLl1tY291bnQgYW5kIF9fbWNvdW50IG1heSBjbG9iYmVyIHRoZSBjYWxsLXVzZWQgcmVnaXN0
ZXJzIGFuZCAlZWYuCisgKiBbLl1tZXhpdGNvdW50IG1heSBjbG9iYmVyICVlY3ggYW5kICVlZi4K
KyAqCisgKiBDcm9zcy1qdW1waW5nIG1ha2VzIG5vbi1zdGF0aXN0aWNhbCBwcm9maWxpbmcgdGlt
aW5nIG1vcmUgY29tcGxpY2F0ZWQuCisgKiBJdCBpcyBoYW5kbGVkIGluIG1hbnkgY2FzZXMgYnkg
Y2FsbGluZyBbLl1tZXhpdGNvdW50IGJlZm9yZSBqdW1waW5nLiAgSXQKKyAqIGlzIGhhbmRsZWQg
Zm9yIGNvbmRpdGlvbmFsIGp1bXBzIHVzaW5nIENST1NTSlVNUCgpIGFuZCBDUk9TU0pVTVBfTEFC
RUwoKS4KKyAqIEl0IGlzIGhhbmRsZWQgZm9yIHNvbWUgZmF1bHQtaGFuZGxpbmcganVtcHMgYnkg
bm90IHNoYXJpbmcgdGhlIGV4aXQKKyAqIHJvdXRpbmUuCisgKgorICogQUxURU5UUlkoKSBtdXN0
IGJlIGJlZm9yZSBhIGNvcnJlc3BvbmRpbmcgRU5UUlkoKSBzbyB0aGF0IGl0IGNhbiBqdW1wIHRv
CisgKiB0aGUgbWFpbiBlbnRyeSBwb2ludC4gIE5vdGUgdGhhdCBhbHQgZW50cmllcyBhcmUgY291
bnRlZCB0d2ljZS4gIFRoZXkKKyAqIGhhdmUgdG8gYmUgY291bnRlZCBhcyBvcmRpbmFyeSBlbnRy
aWVzIGZvciBncHJvZiB0byBnZXQgdGhlIGNhbGwgdGltZXMKKyAqIHJpZ2h0IGZvciB0aGUgb3Jk
aW5hcnkgZW50cmllcy4KKyAqCisgKiBIaWdoIGxvY2FsIGxhYmVscyBhcmUgdXNlZCBpbiBtYWNy
b3MgdG8gYXZvaWQgY2xhc2hlcyB3aXRoIGxvY2FsIGxhYmVscworICogaW4gZnVuY3Rpb25zLgor
ICoKKyAqIE9yZGluYXJ5IGByZXQnIGlzIHVzZWQgaW5zdGVhZCBvZiBhIG1hY3JvIGBSRVQnIGJl
Y2F1c2UgdGhlcmUgYXJlIGEgbG90CisgKiBvZiBgcmV0J3MuICAweGMzIGlzIHRoZSBvcGNvZGUg
Zm9yIGByZXQnIChgI2RlZmluZSByZXQgLi4uIHJldCcgY2FuJ3QKKyAqIGJlIHVzZWQgYmVjYXVz
ZSB0aGlzIGZpbGUgaXMgc29tZXRpbWVzIHByZXByb2Nlc3NlZCBpbiB0cmFkaXRpb25hbCBtb2Rl
KS4KKyAqIGByZXQnIGNsb2JiZXJzIGVmbGFncyBidXQgdGhpcyBkb2Vzbid0IG1hdHRlci4KKyAq
LworI2RlZmluZSBBTFRFTlRSWShuYW1lKQkJR0VOX0VOVFJZKG5hbWUpIDsgTUNPVU5UIDsgTUVY
SVRDT1VOVCA7IGptcCA5ZgorI2RlZmluZQlDUk9TU0pVTVAoanRydWUsIGxhYmVsLCBqZmFsc2Up
IFwKKwlqZmFsc2UgOGY7IE1FWElUQ09VTlQ7IGptcCBfX0NPTkNBVCh0byxsYWJlbCk7IDg6Cisj
ZGVmaW5lIENST1NTSlVNUFRBUkdFVChsYWJlbCkgXAorCUFMSUdOX1RFWFQ7IF9fQ09OQ0FUKHRv
LGxhYmVsKTogOyBNQ09VTlQ7IGptcCBsYWJlbAorI2RlZmluZSBFTlRSWShuYW1lKQkJR0VOX0VO
VFJZKG5hbWUpIDsgOTogOyBNQ09VTlQKKyNkZWZpbmUgRkFLRV9NQ09VTlQoY2FsbGVyKQlwdXNo
cSBjYWxsZXIgOyBjYWxsIF9fbWNvdW50IDsgcG9wcSAlcmN4CisjZGVmaW5lIE1DT1VOVAkJCWNh
bGwgX19tY291bnQKKyNkZWZpbmUgTUNPVU5UX0xBQkVMKG5hbWUpCUdFTl9FTlRSWShuYW1lKSA7
IG5vcCA7IEFMSUdOX1RFWFQKKyNpZmRlZiBHVVBST0YKKyNkZWZpbmUgTUVYSVRDT1VOVAkJY2Fs
bCAubWV4aXRjb3VudAorI2RlZmluZSByZXQJCQlNRVhJVENPVU5UIDsgTk9OX0dQUk9GX1JFVAor
I2Vsc2UKKyNkZWZpbmUgTUVYSVRDT1VOVAorI2VuZGlmCisKKyNlbHNlIC8qICFHUFJPRiAqLwor
LyoKKyAqIEFMVEVOVFJZKCkgaGFzIHRvIGFsaWduIGJlY2F1c2UgaXQgaXMgYmVmb3JlIGEgY29y
cmVzcG9uZGluZyBFTlRSWSgpLgorICogRU5UUlkoKSBoYXMgdG8gYWxpZ24gdG8gYmVjYXVzZSB0
aGVyZSBtYXkgYmUgbm8gQUxURU5UUlkoKSBiZWZvcmUgaXQuCisgKiBJZiB0aGVyZSBpcyBhIHBy
ZXZpb3VzIEFMVEVOVFJZKCkgdGhlbiB0aGUgYWxpZ25tZW50IGNvZGUgZm9yIEVOVFJZKCkKKyAq
IGlzIGVtcHR5LgorICovCisjZGVmaW5lIEFMVEVOVFJZKG5hbWUpCQlHRU5fRU5UUlkobmFtZSkK
KyNkZWZpbmUJQ1JPU1NKVU1QKGp0cnVlLCBsYWJlbCwgamZhbHNlKQlqdHJ1ZSBsYWJlbAorI2Rl
ZmluZQlDUk9TU0pVTVBUQVJHRVQobGFiZWwpCisjZGVmaW5lIEVOVFJZKG5hbWUpCQlHRU5fRU5U
UlkobmFtZSkKKyNkZWZpbmUgRkFLRV9NQ09VTlQoY2FsbGVyKQorI2RlZmluZSBNQ09VTlQKKyNk
ZWZpbmUgTUNPVU5UX0xBQkVMKG5hbWUpCisjZGVmaW5lIE1FWElUQ09VTlQKKyNlbmRpZiAvKiBH
UFJPRiAqLworCisvKgorICogQ29udmVuaWVuY2UgZm9yIGFkZGluZyBmcmFtZSBwb2ludGVycyB0
byBoYW5kLWNvZGVkIEFTTS4gIFVzZWZ1bCBmb3IKKyAqIERUcmFjZSwgSFdQTUMsIGFuZCBLREIu
CisgKi8KKyNkZWZpbmUgUFVTSF9GUkFNRV9QT0lOVEVSCVwKKwlwdXNocQklcmJwIDsJCVwKKwlt
b3ZxCSVyc3AsICVyYnAgOworI2RlZmluZSBQT1BfRlJBTUVfUE9JTlRFUglcCisJcG9wcQklcmJw
CisKKyNpZmRlZiBMT0NPUkUKKy8qCisgKiBDb252ZW5pZW5jZSBtYWNybyBmb3IgZGVjbGFyaW5n
IGludGVycnVwdCBlbnRyeSBwb2ludHMuCisgKi8KKyNkZWZpbmUJSURUVkVDKG5hbWUpCUFMSUdO
X1RFWFQ7IC5nbG9ibCBfX0NPTkNBVChYLG5hbWUpOyBcCisJCQkudHlwZSBfX0NPTkNBVChYLG5h
bWUpLEBmdW5jdGlvbjsgX19DT05DQVQoWCxuYW1lKToKKworLyoKKyAqIE1hY3JvcyB0byBjcmVh
dGUgYW5kIGRlc3Ryb3kgYSB0cmFwIGZyYW1lLgorICovCisjZGVmaW5lIFBVU0hfRlJBTUUJCQkJ
CQkJXAorCXN1YnEJJFRGX1JJUCwlcnNwIDsJLyogc2tpcCBkdW1teSB0Zl9lcnIgYW5kIHRmX3Ry
YXBubyAqLwlcCisJdGVzdGIJJFNFTF9SUExfTUFTSyxURl9DUyglcnNwKSA7IC8qIGNvbWUgZnJv
bSBrZXJuZWw/ICovCVwKKwlqegkxZiA7CQkvKiBZZXMsIGRvbnQgc3dhcGdzIGFnYWluICovCQlc
CisJc3dhcGdzIDsJCQkJCQkJXAorMToJbW92cQklcmRpLFRGX1JESSglcnNwKSA7CQkJCQlcCisJ
bW92cQklcnNpLFRGX1JTSSglcnNwKSA7CQkJCQlcCisJbW92cQklcmR4LFRGX1JEWCglcnNwKSA7
CQkJCQlcCisJbW92cQklcmN4LFRGX1JDWCglcnNwKSA7CQkJCQlcCisJbW92cQklcjgsVEZfUjgo
JXJzcCkgOwkJCQkJXAorCW1vdnEJJXI5LFRGX1I5KCVyc3ApIDsJCQkJCVwKKwltb3ZxCSVyYXgs
VEZfUkFYKCVyc3ApIDsJCQkJCVwKKwltb3ZxCSVyYngsVEZfUkJYKCVyc3ApIDsJCQkJCVwKKwlt
b3ZxCSVyYnAsVEZfUkJQKCVyc3ApIDsJCQkJCVwKKwltb3ZxCSVyMTAsVEZfUjEwKCVyc3ApIDsJ
CQkJCVwKKwltb3ZxCSVyMTEsVEZfUjExKCVyc3ApIDsJCQkJCVwKKwltb3ZxCSVyMTIsVEZfUjEy
KCVyc3ApIDsJCQkJCVwKKwltb3ZxCSVyMTMsVEZfUjEzKCVyc3ApIDsJCQkJCVwKKwltb3ZxCSVy
MTQsVEZfUjE0KCVyc3ApIDsJCQkJCVwKKwltb3ZxCSVyMTUsVEZfUjE1KCVyc3ApIDsJCQkJCVwK
Kwltb3Z3CSVmcyxURl9GUyglcnNwKSA7CQkJCQlcCisJbW92dwklZ3MsVEZfR1MoJXJzcCkgOwkJ
CQkJXAorCW1vdncJJWVzLFRGX0VTKCVyc3ApIDsJCQkJCVwKKwltb3Z3CSVkcyxURl9EUyglcnNw
KSA7CQkJCQlcCisJbW92bAkkVEZfSEFTU0VHUyxURl9GTEFHUyglcnNwKSA7CQkJCVwKKwljbGQK
KworI2RlZmluZSBQT1BfRlJBTUUJCQkJCQkJXAorCW1vdnEJVEZfUkRJKCVyc3ApLCVyZGkgOwkJ
CQkJXAorCW1vdnEJVEZfUlNJKCVyc3ApLCVyc2kgOwkJCQkJXAorCW1vdnEJVEZfUkRYKCVyc3Ap
LCVyZHggOwkJCQkJXAorCW1vdnEJVEZfUkNYKCVyc3ApLCVyY3ggOwkJCQkJXAorCW1vdnEJVEZf
UjgoJXJzcCksJXI4IDsJCQkJCVwKKwltb3ZxCVRGX1I5KCVyc3ApLCVyOSA7CQkJCQlcCisJbW92
cQlURl9SQVgoJXJzcCksJXJheCA7CQkJCQlcCisJbW92cQlURl9SQlgoJXJzcCksJXJieCA7CQkJ
CQlcCisJbW92cQlURl9SQlAoJXJzcCksJXJicCA7CQkJCQlcCisJbW92cQlURl9SMTAoJXJzcCks
JXIxMCA7CQkJCQlcCisJbW92cQlURl9SMTEoJXJzcCksJXIxMSA7CQkJCQlcCisJbW92cQlURl9S
MTIoJXJzcCksJXIxMiA7CQkJCQlcCisJbW92cQlURl9SMTMoJXJzcCksJXIxMyA7CQkJCQlcCisJ
bW92cQlURl9SMTQoJXJzcCksJXIxNCA7CQkJCQlcCisJbW92cQlURl9SMTUoJXJzcCksJXIxNSA7
CQkJCQlcCisJdGVzdGIJJFNFTF9SUExfTUFTSyxURl9DUyglcnNwKSA7IC8qIGNvbWUgZnJvbSBr
ZXJuZWw/ICovCVwKKwlqegkxZiA7CQkvKiBrZWVwIGtlcm5lbCBHUy5iYXNlICovCQlcCisJY2xp
IDsJCQkJCQkJCVwKKwlzd2FwZ3MgOwkJCQkJCQlcCisxOglhZGRxCSRURl9SSVAsJXJzcAkvKiBz
a2lwIG92ZXIgdGZfZXJyLCB0Zl90cmFwbm8gKi8KKworLyoKKyAqIEFjY2VzcyBwZXItQ1BVIGRh
dGEuCisgKi8KKyNkZWZpbmUJUENQVShtZW1iZXIpCSVnczpQQ18gIyMgbWVtYmVyCisjZGVmaW5l
CVBDUFVfQUREUihtZW1iZXIsIHJlZykJCQkJCVwKKwltb3ZxICVnczpQQ19QUlZTUEFDRSwgcmVn
IDsJCQkJXAorCWFkZHEgJFBDXyAjIyBtZW1iZXIsIHJlZworCisjZW5kaWYgLyogTE9DT1JFICov
CisKKyNpZmRlZiBfX1NURENfXworI2RlZmluZSBFTEZOT1RFKG5hbWUsIHR5cGUsIGRlc2N0eXBl
LCBkZXNjZGF0YS4uLikgXAorLnB1c2hzZWN0aW9uIC5ub3RlLm5hbWUgICAgICAgICAgICAgICAg
IDsgICAgICAgXAorICAuYWxpZ24gNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAg
ICAgXAorICAubG9uZyAyZiAtIDFmICAgICAgICAgLyogbmFtZXN6ICovICAgIDsgICAgICAgXAor
ICAubG9uZyA0ZiAtIDNmICAgICAgICAgLyogZGVzY3N6ICovICAgIDsgICAgICAgXAorICAubG9u
ZyB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgXAorMTouYXNjaXogI25h
bWUgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgXAorMjouYWxpZ24gNCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgXAorMzpkZXNjdHlwZSBkZXNjZGF0YSAgICAg
ICAgICAgICAgICAgICAgIDsgICAgICAgXAorNDouYWxpZ24gNCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsgICAgICAgXAorLnBvcHNlY3Rpb24KKyNlbHNlIC8qICFfX1NURENfXywgaS5l
LiAtdHJhZGl0aW9uYWwgKi8KKyNkZWZpbmUgRUxGTk9URShuYW1lLCB0eXBlLCBkZXNjdHlwZSwg
ZGVzY2RhdGEpIFwKKy5wdXNoc2VjdGlvbiAubm90ZS5uYW1lICAgICAgICAgICAgICAgICA7ICAg
ICAgIFwKKyAgLmFsaWduIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIFwK
KyAgLmxvbmcgMmYgLSAxZiAgICAgICAgIC8qIG5hbWVzeiAqLyAgICA7ICAgICAgIFwKKyAgLmxv
bmcgNGYgLSAzZiAgICAgICAgIC8qIGRlc2NzeiAqLyAgICA7ICAgICAgIFwKKyAgLmxvbmcgdHlw
ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIFwKKzE6LmFzY2l6ICJuYW1lIiAg
ICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIFwKKzI6LmFsaWduIDQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7ICAgICAgIFwKKzM6ZGVzY3R5cGUgZGVzY2RhdGEgICAgICAgICAg
ICAgICAgICAgICA7ICAgICAgIFwKKzQ6LmFsaWduIDQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7ICAgICAgIFwKKy5wb3BzZWN0aW9uCisjZW5kaWYgLyogX19TVERDX18gKi8KKworI2Vu
ZGlmIC8qICFfTUFDSElORV9BU01BQ1JPU19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lz
L21vZHVsZXMvbmV0bWFwL21hY2hpbmUvYXRvbWljLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL21hY2hpbmUvYXRvbWljLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hp
bmUvYXRvbWljLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Iv
c3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2F0b21pYy5oCTIwMTYtMDktMjkgMDA6MjQ6
NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNjI1IEBACisvKi0KKyAqIENvcHlyaWdodCAo
YykgMTk5OCBEb3VnIFJhYnNvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJT
RDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvYXRvbWljLmggMjk5OTEyIDIwMTYtMDUt
MTYgMDc6MTk6MzNaIHNlcGhlICQKKyAqLworI2lmbmRlZiBfTUFDSElORV9BVE9NSUNfSF8KKyNk
ZWZpbmUJX01BQ0hJTkVfQVRPTUlDX0hfCisKKyNpZm5kZWYgX1NZU19DREVGU19IXworI2Vycm9y
IHRoaXMgZmlsZSBuZWVkcyBzeXMvY2RlZnMuaCBhcyBhIHByZXJlcXVpc2l0ZQorI2VuZGlmCisK
Ky8qCisgKiBUbyBleHByZXNzIGludGVycHJvY2Vzc29yIChhcyBvcHBvc2VkIHRvIHByb2Nlc3Nv
ciBhbmQgZGV2aWNlKSBtZW1vcnkKKyAqIG9yZGVyaW5nIGNvbnN0cmFpbnRzLCB1c2UgdGhlIGF0
b21pY18qKCkgZnVuY3Rpb25zIHdpdGggYWNxdWlyZSBhbmQgcmVsZWFzZQorICogc2VtYW50aWNz
IHJhdGhlciB0aGFuIHRoZSAqbWIoKSBmdW5jdGlvbnMuICBBbiBhcmNoaXRlY3R1cmUncyBtZW1v
cnkKKyAqIG9yZGVyaW5nIChvciBtZW1vcnkgY29uc2lzdGVuY3kpIG1vZGVsIGdvdmVybnMgdGhl
IG9yZGVyIGluIHdoaWNoIGEKKyAqIHByb2dyYW0ncyBhY2Nlc3NlcyB0byBkaWZmZXJlbnQgbG9j
YXRpb25zIG1heSBiZSBwZXJmb3JtZWQgYnkgYW4KKyAqIGltcGxlbWVudGF0aW9uIG9mIHRoYXQg
YXJjaGl0ZWN0dXJlLiAgSW4gZ2VuZXJhbCwgZm9yIG1lbW9yeSByZWdpb25zCisgKiBkZWZpbmVk
IGFzIHdyaXRlYmFjayBjYWNoZWFibGUsIHRoZSBtZW1vcnkgb3JkZXJpbmcgaW1wbGVtZW50ZWQg
YnkgYW1kNjQKKyAqIHByb2Nlc3NvcnMgcHJlc2VydmVzIHRoZSBwcm9ncmFtIG9yZGVyaW5nIG9m
IGEgbG9hZCBmb2xsb3dlZCBieSBhIGxvYWQsIGEKKyAqIGxvYWQgZm9sbG93ZWQgYnkgYSBzdG9y
ZSwgYW5kIGEgc3RvcmUgZm9sbG93ZWQgYnkgYSBzdG9yZS4gIE9ubHkgYSBzdG9yZQorICogZm9s
bG93ZWQgYnkgYSBsb2FkIHRvIGEgZGlmZmVyZW50IG1lbW9yeSBsb2NhdGlvbiBtYXkgYmUgcmVv
cmRlcmVkLgorICogVGhlcmVmb3JlLCBleGNlcHQgZm9yIHNwZWNpYWwgY2FzZXMsIGxpa2Ugbm9u
LXRlbXBvcmFsIG1lbW9yeSBhY2Nlc3NlcyBvcgorICogbWVtb3J5IHJlZ2lvbnMgZGVmaW5lZCBh
cyB3cml0ZSBjb21iaW5pbmcsIHRoZSBtZW1vcnkgb3JkZXJpbmcgZWZmZWN0cworICogcHJvdmlk
ZWQgYnkgdGhlIHNmZW5jZSBpbnN0cnVjdGlvbiBpbiB0aGUgd21iKCkgZnVuY3Rpb24gYW5kIHRo
ZSBsZmVuY2UKKyAqIGluc3RydWN0aW9uIGluIHRoZSBybWIoKSBmdW5jdGlvbiBhcmUgcmVkdW5k
YW50LiAgSW4gY29udHJhc3QsIHRoZQorICogYXRvbWljXyooKSBmdW5jdGlvbnMgd2l0aCBhY3F1
aXJlIGFuZCByZWxlYXNlIHNlbWFudGljcyBkbyBub3QgcGVyZm9ybQorICogcmVkdW5kYW50IGlu
c3RydWN0aW9ucyBmb3Igb3JkaW5hcnkgY2FzZXMgb2YgaW50ZXJwcm9jZXNzb3IgbWVtb3J5Cisg
KiBvcmRlcmluZyBvbiBhbnkgYXJjaGl0ZWN0dXJlLgorICovCisjZGVmaW5lCW1iKCkJX19hc20g
X192b2xhdGlsZSgibWZlbmNlOyIgOiA6IDogIm1lbW9yeSIpCisjZGVmaW5lCXdtYigpCV9fYXNt
IF9fdm9sYXRpbGUoInNmZW5jZTsiIDogOiA6ICJtZW1vcnkiKQorI2RlZmluZQlybWIoKQlfX2Fz
bSBfX3ZvbGF0aWxlKCJsZmVuY2U7IiA6IDogOiAibWVtb3J5IikKKworLyoKKyAqIFZhcmlvdXMg
c2ltcGxlIG9wZXJhdGlvbnMgb24gbWVtb3J5LCBlYWNoIG9mIHdoaWNoIGlzIGF0b21pYyBpbiB0
aGUKKyAqIHByZXNlbmNlIG9mIGludGVycnVwdHMgYW5kIG11bHRpcGxlIHByb2Nlc3NvcnMuCisg
KgorICogYXRvbWljX3NldF9jaGFyKFAsIFYpCSgqKHVfY2hhciAqKShQKSB8PSAoVikpCisgKiBh
dG9taWNfY2xlYXJfY2hhcihQLCBWKQkoKih1X2NoYXIgKikoUCkgJj0gfihWKSkKKyAqIGF0b21p
Y19hZGRfY2hhcihQLCBWKQkoKih1X2NoYXIgKikoUCkgKz0gKFYpKQorICogYXRvbWljX3N1YnRy
YWN0X2NoYXIoUCwgVikJKCoodV9jaGFyICopKFApIC09IChWKSkKKyAqCisgKiBhdG9taWNfc2V0
X3Nob3J0KFAsIFYpCSgqKHVfc2hvcnQgKikoUCkgfD0gKFYpKQorICogYXRvbWljX2NsZWFyX3No
b3J0KFAsIFYpCSgqKHVfc2hvcnQgKikoUCkgJj0gfihWKSkKKyAqIGF0b21pY19hZGRfc2hvcnQo
UCwgVikJKCoodV9zaG9ydCAqKShQKSArPSAoVikpCisgKiBhdG9taWNfc3VidHJhY3Rfc2hvcnQo
UCwgVikJKCoodV9zaG9ydCAqKShQKSAtPSAoVikpCisgKgorICogYXRvbWljX3NldF9pbnQoUCwg
VikJCSgqKHVfaW50ICopKFApIHw9IChWKSkKKyAqIGF0b21pY19jbGVhcl9pbnQoUCwgVikJKCoo
dV9pbnQgKikoUCkgJj0gfihWKSkKKyAqIGF0b21pY19hZGRfaW50KFAsIFYpCQkoKih1X2ludCAq
KShQKSArPSAoVikpCisgKiBhdG9taWNfc3VidHJhY3RfaW50KFAsIFYpCSgqKHVfaW50ICopKFAp
IC09IChWKSkKKyAqIGF0b21pY19zd2FwX2ludChQLCBWKQkocmV0dXJuICgqKHVfaW50ICopKFAp
KTsgKih1X2ludCAqKShQKSA9IChWKTspCisgKiBhdG9taWNfcmVhZGFuZGNsZWFyX2ludChQKQko
cmV0dXJuICgqKHVfaW50ICopKFApKTsgKih1X2ludCAqKShQKSA9IDA7KQorICoKKyAqIGF0b21p
Y19zZXRfbG9uZyhQLCBWKQkoKih1X2xvbmcgKikoUCkgfD0gKFYpKQorICogYXRvbWljX2NsZWFy
X2xvbmcoUCwgVikJKCoodV9sb25nICopKFApICY9IH4oVikpCisgKiBhdG9taWNfYWRkX2xvbmco
UCwgVikJKCoodV9sb25nICopKFApICs9IChWKSkKKyAqIGF0b21pY19zdWJ0cmFjdF9sb25nKFAs
IFYpCSgqKHVfbG9uZyAqKShQKSAtPSAoVikpCisgKiBhdG9taWNfc3dhcF9sb25nKFAsIFYpCShy
ZXR1cm4gKCoodV9sb25nICopKFApKTsgKih1X2xvbmcgKikoUCkgPSAoVik7KQorICogYXRvbWlj
X3JlYWRhbmRjbGVhcl9sb25nKFApCShyZXR1cm4gKCoodV9sb25nICopKFApKTsgKih1X2xvbmcg
KikoUCkgPSAwOykKKyAqLworCisvKgorICogVGhlIGFib3ZlIGZ1bmN0aW9ucyBhcmUgZXhwYW5k
ZWQgaW5saW5lIGluIHRoZSBzdGF0aWNhbGx5LWxpbmtlZAorICoga2VybmVsLiAgTG9jayBwcmVm
aXhlcyBhcmUgZ2VuZXJhdGVkIGlmIGFuIFNNUCBrZXJuZWwgaXMgYmVpbmcKKyAqIGJ1aWx0Lgor
ICoKKyAqIEtlcm5lbCBtb2R1bGVzIGNhbGwgcmVhbCBmdW5jdGlvbnMgd2hpY2ggYXJlIGJ1aWx0
IGludG8gdGhlIGtlcm5lbC4KKyAqIFRoaXMgYWxsb3dzIGtlcm5lbCBtb2R1bGVzIHRvIGJlIHBv
cnRhYmxlIGJldHdlZW4gVVAgYW5kIFNNUCBzeXN0ZW1zLgorICovCisjaWYgZGVmaW5lZChLTERf
TU9EVUxFKSB8fCAhZGVmaW5lZChfX0dOVUNMSUtFX0FTTSkKKyNkZWZpbmUJQVRPTUlDX0FTTShO
QU1FLCBUWVBFLCBPUCwgQ09OUywgVikJCQlcCit2b2lkIGF0b21pY18jI05BTUUjI18jI1RZUEUo
dm9sYXRpbGUgdV8jI1RZUEUgKnAsIHVfIyNUWVBFIHYpOwlcCit2b2lkIGF0b21pY18jI05BTUUj
I19iYXJyXyMjVFlQRSh2b2xhdGlsZSB1XyMjVFlQRSAqcCwgdV8jI1RZUEUgdikKKworaW50CWF0
b21pY19jbXBzZXRfaW50KHZvbGF0aWxlIHVfaW50ICpkc3QsIHVfaW50IGV4cGVjdCwgdV9pbnQg
c3JjKTsKK2ludAlhdG9taWNfY21wc2V0X2xvbmcodm9sYXRpbGUgdV9sb25nICpkc3QsIHVfbG9u
ZyBleHBlY3QsIHVfbG9uZyBzcmMpOwordV9pbnQJYXRvbWljX2ZldGNoYWRkX2ludCh2b2xhdGls
ZSB1X2ludCAqcCwgdV9pbnQgdik7Cit1X2xvbmcJYXRvbWljX2ZldGNoYWRkX2xvbmcodm9sYXRp
bGUgdV9sb25nICpwLCB1X2xvbmcgdik7CitpbnQJYXRvbWljX3Rlc3RhbmRzZXRfaW50KHZvbGF0
aWxlIHVfaW50ICpwLCB1X2ludCB2KTsKK2ludAlhdG9taWNfdGVzdGFuZHNldF9sb25nKHZvbGF0
aWxlIHVfbG9uZyAqcCwgdV9pbnQgdik7CitpbnQJYXRvbWljX3Rlc3RhbmRjbGVhcl9pbnQodm9s
YXRpbGUgdV9pbnQgKnAsIHVfaW50IHYpOworaW50CWF0b21pY190ZXN0YW5kY2xlYXJfbG9uZyh2
b2xhdGlsZSB1X2xvbmcgKnAsIHVfaW50IHYpOwordm9pZAlhdG9taWNfdGhyZWFkX2ZlbmNlX2Fj
cSh2b2lkKTsKK3ZvaWQJYXRvbWljX3RocmVhZF9mZW5jZV9hY3FfcmVsKHZvaWQpOwordm9pZAlh
dG9taWNfdGhyZWFkX2ZlbmNlX3JlbCh2b2lkKTsKK3ZvaWQJYXRvbWljX3RocmVhZF9mZW5jZV9z
ZXFfY3N0KHZvaWQpOworCisjZGVmaW5lCUFUT01JQ19MT0FEKFRZUEUpCQkJCQlcCit1XyMjVFlQ
RQlhdG9taWNfbG9hZF9hY3FfIyNUWVBFKHZvbGF0aWxlIHVfIyNUWVBFICpwKQorI2RlZmluZQlB
VE9NSUNfU1RPUkUoVFlQRSkJCQkJCVwKK3ZvaWQJCWF0b21pY19zdG9yZV9yZWxfIyNUWVBFKHZv
bGF0aWxlIHVfIyNUWVBFICpwLCB1XyMjVFlQRSB2KQorCisjZWxzZSAvKiAhS0xEX01PRFVMRSAm
JiBfX0dOVUNMSUtFX0FTTSAqLworCisvKgorICogRm9yIHVzZXJsYW5kLCBhbHdheXMgdXNlIGxv
Y2sgcHJlZml4ZXMgc28gdGhhdCB0aGUgYmluYXJpZXMgd2lsbCBydW4KKyAqIG9uIGJvdGggU01Q
IGFuZCAhU01QIHN5c3RlbXMuCisgKi8KKyNpZiBkZWZpbmVkKFNNUCkgfHwgIWRlZmluZWQoX0tF
Uk5FTCkKKyNkZWZpbmUJTVBMT0NLRUQJImxvY2sgOyAiCisjZWxzZQorI2RlZmluZQlNUExPQ0tF
RAorI2VuZGlmCisKKy8qCisgKiBUaGUgYXNzZW1ibHkgaXMgdm9sYXRpbGl6ZWQgdG8gYXZvaWQg
Y29kZSBjaHVuayByZW1vdmFsIGJ5IHRoZSBjb21waWxlci4KKyAqIEdDQyBhZ2dyZXNzaXZlbHkg
cmVvcmRlcnMgb3BlcmF0aW9ucyBhbmQgbWVtb3J5IGNsb2JiZXJpbmcgaXMgbmVjZXNzYXJ5Cisg
KiBpbiBvcmRlciB0byBhdm9pZCB0aGF0IGZvciBtZW1vcnkgYmFycmllcnMuCisgKi8KKyNkZWZp
bmUJQVRPTUlDX0FTTShOQU1FLCBUWVBFLCBPUCwgQ09OUywgVikJCVwKK3N0YXRpYyBfX2lubGlu
ZSB2b2lkCQkJCQlcCithdG9taWNfIyNOQU1FIyNfIyNUWVBFKHZvbGF0aWxlIHVfIyNUWVBFICpw
LCB1XyMjVFlQRSB2KVwKK3sJCQkJCQkJXAorCV9fYXNtIF9fdm9sYXRpbGUoTVBMT0NLRUQgT1AJ
CQlcCisJOiAiK20iICgqcCkJCQkJCVwKKwk6IENPTlMgKFYpCQkJCQlcCisJOiAiY2MiKTsJCQkJ
CVwKK30JCQkJCQkJXAorCQkJCQkJCVwKK3N0YXRpYyBfX2lubGluZSB2b2lkCQkJCQlcCithdG9t
aWNfIyNOQU1FIyNfYmFycl8jI1RZUEUodm9sYXRpbGUgdV8jI1RZUEUgKnAsIHVfIyNUWVBFIHYp
XAorewkJCQkJCQlcCisJX19hc20gX192b2xhdGlsZShNUExPQ0tFRCBPUAkJCVwKKwk6ICIrbSIg
KCpwKQkJCQkJXAorCTogQ09OUyAoVikJCQkJCVwKKwk6ICJtZW1vcnkiLCAiY2MiKTsJCQkJXAor
fQkJCQkJCQlcCitzdHJ1Y3QgX19oYWNrCisKKy8qCisgKiBBdG9taWMgY29tcGFyZSBhbmQgc2V0
LCB1c2VkIGJ5IHRoZSBtdXRleCBmdW5jdGlvbnMKKyAqCisgKiBpZiAoKmRzdCA9PSBleHBlY3Qp
ICpkc3QgPSBzcmMgKGFsbCAzMiBiaXQgd29yZHMpCisgKgorICogUmV0dXJucyAwIG9uIGZhaWx1
cmUsIG5vbi16ZXJvIG9uIHN1Y2Nlc3MKKyAqLworCitzdGF0aWMgX19pbmxpbmUgaW50CithdG9t
aWNfY21wc2V0X2ludCh2b2xhdGlsZSB1X2ludCAqZHN0LCB1X2ludCBleHBlY3QsIHVfaW50IHNy
YykKK3sKKwl1X2NoYXIgcmVzOworCisJX19hc20gX192b2xhdGlsZSgKKwkiCSIgTVBMT0NLRUQg
IgkJIgorCSIJY21weGNoZ2wgJTMsJTEgOwkiCisJIiAgICAgICBzZXRlCSUwIDsJCSIKKwkiIyBh
dG9taWNfY21wc2V0X2ludCIKKwk6ICI9cSIgKHJlcyksCQkJLyogMCAqLworCSAgIittIiAoKmRz
dCksCQkJLyogMSAqLworCSAgIithIiAoZXhwZWN0KQkJCS8qIDIgKi8KKwk6ICJyIiAoc3JjKQkJ
CS8qIDMgKi8KKwk6ICJtZW1vcnkiLCAiY2MiKTsKKwlyZXR1cm4gKHJlcyk7Cit9CisKK3N0YXRp
YyBfX2lubGluZSBpbnQKK2F0b21pY19jbXBzZXRfbG9uZyh2b2xhdGlsZSB1X2xvbmcgKmRzdCwg
dV9sb25nIGV4cGVjdCwgdV9sb25nIHNyYykKK3sKKwl1X2NoYXIgcmVzOworCisJX19hc20gX192
b2xhdGlsZSgKKwkiCSIgTVBMT0NLRUQgIgkJIgorCSIJY21weGNoZ3EgJTMsJTEgOwkiCisJIiAg
ICAgICBzZXRlCSUwIDsJCSIKKwkiIyBhdG9taWNfY21wc2V0X2xvbmciCisJOiAiPXEiIChyZXMp
LAkJCS8qIDAgKi8KKwkgICIrbSIgKCpkc3QpLAkJCS8qIDEgKi8KKwkgICIrYSIgKGV4cGVjdCkJ
CQkvKiAyICovCisJOiAiciIgKHNyYykJCQkvKiAzICovCisJOiAibWVtb3J5IiwgImNjIik7CisJ
cmV0dXJuIChyZXMpOworfQorCisvKgorICogQXRvbWljYWxseSBhZGQgdGhlIHZhbHVlIG9mIHYg
dG8gdGhlIGludGVnZXIgcG9pbnRlZCB0byBieSBwIGFuZCByZXR1cm4KKyAqIHRoZSBwcmV2aW91
cyB2YWx1ZSBvZiAqcC4KKyAqLworc3RhdGljIF9faW5saW5lIHVfaW50CithdG9taWNfZmV0Y2hh
ZGRfaW50KHZvbGF0aWxlIHVfaW50ICpwLCB1X2ludCB2KQoreworCisJX19hc20gX192b2xhdGls
ZSgKKwkiCSIgTVBMT0NLRUQgIgkJIgorCSIJeGFkZGwJJTAsJTEgOwkJIgorCSIjIGF0b21pY19m
ZXRjaGFkZF9pbnQiCisJOiAiK3IiICh2KSwJCQkvKiAwICovCisJICAiK20iICgqcCkJCQkvKiAx
ICovCisJOiA6ICJjYyIpOworCXJldHVybiAodik7Cit9CisKKy8qCisgKiBBdG9taWNhbGx5IGFk
ZCB0aGUgdmFsdWUgb2YgdiB0byB0aGUgbG9uZyBpbnRlZ2VyIHBvaW50ZWQgdG8gYnkgcCBhbmQg
cmV0dXJuCisgKiB0aGUgcHJldmlvdXMgdmFsdWUgb2YgKnAuCisgKi8KK3N0YXRpYyBfX2lubGlu
ZSB1X2xvbmcKK2F0b21pY19mZXRjaGFkZF9sb25nKHZvbGF0aWxlIHVfbG9uZyAqcCwgdV9sb25n
IHYpCit7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKAorCSIJIiBNUExPQ0tFRCAiCQkiCisJIgl4YWRk
cQklMCwlMSA7CQkiCisJIiMgYXRvbWljX2ZldGNoYWRkX2xvbmciCisJOiAiK3IiICh2KSwJCQkv
KiAwICovCisJICAiK20iICgqcCkJCQkvKiAxICovCisJOiA6ICJjYyIpOworCXJldHVybiAodik7
Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQKK2F0b21pY190ZXN0YW5kc2V0X2ludCh2b2xhdGls
ZSB1X2ludCAqcCwgdV9pbnQgdikKK3sKKwl1X2NoYXIgcmVzOworCisJX19hc20gX192b2xhdGls
ZSgKKwkiCSIgTVBMT0NLRUQgIgkJIgorCSIJYnRzbAklMiwlMSA7CQkiCisJIglzZXRjCSUwIDsJ
CSIKKwkiIyBhdG9taWNfdGVzdGFuZHNldF9pbnQiCisJOiAiPXEiIChyZXMpLAkJCS8qIDAgKi8K
KwkgICIrbSIgKCpwKQkJCS8qIDEgKi8KKwk6ICJJciIgKHYgJiAweDFmKQkJLyogMiAqLworCTog
ImNjIik7CisJcmV0dXJuIChyZXMpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50CithdG9taWNf
dGVzdGFuZHNldF9sb25nKHZvbGF0aWxlIHVfbG9uZyAqcCwgdV9pbnQgdikKK3sKKwl1X2NoYXIg
cmVzOworCisJX19hc20gX192b2xhdGlsZSgKKwkiCSIgTVBMT0NLRUQgIgkJIgorCSIJYnRzcQkl
MiwlMSA7CQkiCisJIglzZXRjCSUwIDsJCSIKKwkiIyBhdG9taWNfdGVzdGFuZHNldF9sb25nIgor
CTogIj1xIiAocmVzKSwJCQkvKiAwICovCisJICAiK20iICgqcCkJCQkvKiAxICovCisJOiAiSnIi
ICgodV9sb25nKSh2ICYgMHgzZikpCS8qIDIgKi8KKwk6ICJjYyIpOworCXJldHVybiAocmVzKTsK
K30KKworc3RhdGljIF9faW5saW5lIGludAorYXRvbWljX3Rlc3RhbmRjbGVhcl9pbnQodm9sYXRp
bGUgdV9pbnQgKnAsIHVfaW50IHYpCit7CisJdV9jaGFyIHJlczsKKworCV9fYXNtIF9fdm9sYXRp
bGUoCisJIgkiIE1QTE9DS0VEICIJCSIKKwkiCWJ0cmwJJTIsJTEgOwkJIgorCSIJc2V0YwklMCA7
CQkiCisJIiMgYXRvbWljX3Rlc3RhbmRjbGVhcl9pbnQiCisJOiAiPXEiIChyZXMpLAkJCS8qIDAg
Ki8KKwkgICIrbSIgKCpwKQkJCS8qIDEgKi8KKwk6ICJJciIgKHYgJiAweDFmKQkJLyogMiAqLwor
CTogImNjIik7CisJcmV0dXJuIChyZXMpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50CithdG9t
aWNfdGVzdGFuZGNsZWFyX2xvbmcodm9sYXRpbGUgdV9sb25nICpwLCB1X2ludCB2KQoreworCXVf
Y2hhciByZXM7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKAorCSIJIiBNUExPQ0tFRCAiCQkiCisJIgli
dHJxCSUyLCUxIDsJCSIKKwkiCXNldGMJJTAgOwkJIgorCSIjIGF0b21pY190ZXN0YW5kY2xlYXJf
bG9uZyIKKwk6ICI9cSIgKHJlcyksCQkJLyogMCAqLworCSAgIittIiAoKnApCQkJLyogMSAqLwor
CTogIkpyIiAoKHVfbG9uZykodiAmIDB4M2YpKQkvKiAyICovCisJOiAiY2MiKTsKKwlyZXR1cm4g
KHJlcyk7Cit9CisKKy8qCisgKiBXZSBhc3N1bWUgdGhhdCBhID0gYiB3aWxsIGRvIGF0b21pYyBs
b2FkcyBhbmQgc3RvcmVzLiAgRHVlIHRvIHRoZQorICogSUEzMiBtZW1vcnkgbW9kZWwsIGEgc2lt
cGxlIHN0b3JlIGd1YXJhbnRlZXMgcmVsZWFzZSBzZW1hbnRpY3MuCisgKgorICogSG93ZXZlciwg
YSBsb2FkIG1heSBwYXNzIGEgc3RvcmUgaWYgdGhleSBhcmUgcGVyZm9ybWVkIG9uIGRpc3RpbmN0
CisgKiBhZGRyZXNzZXMsIHNvIHdlIG5lZWQgYSBTdG9yZS9Mb2FkIGJhcnJpZXIgZm9yIHNlcXVl
bnRpYWxseQorICogY29uc2lzdGVudCBmZW5jZXMgaW4gU01QIGtlcm5lbHMuICBXZSB1c2UgImxv
Y2sgYWRkbCAkMCxtZW0iIGZvciBhCisgKiBTdG9yZS9Mb2FkIGJhcnJpZXIsIGFzIHJlY29tbWVu
ZGVkIGJ5IHRoZSBBTUQgU29mdHdhcmUgT3B0aW1pemF0aW9uCisgKiBHdWlkZSwgYW5kIG5vdCBt
ZmVuY2UuICBUbyBhdm9pZCBmYWxzZSBkYXRhIGRlcGVuZGVuY2llcywgd2UgdXNlIGEKKyAqIHNw
ZWNpYWwgYWRkcmVzcyBmb3IgIm1lbSIuICBJbiB0aGUga2VybmVsLCB3ZSB1c2UgYSBwcml2YXRl
IHBlci1jcHUKKyAqIGNhY2hlIGxpbmUuICBJbiB1c2VyIHNwYWNlLCB3ZSB1c2UgYSB3b3JkIGlu
IHRoZSBzdGFjaydzIHJlZCB6b25lCisgKiAoLTgoJXJzcCkpLgorICoKKyAqIEZvciBVUCBrZXJu
ZWxzLCBob3dldmVyLCB0aGUgbWVtb3J5IG9mIHRoZSBzaW5nbGUgcHJvY2Vzc29yIGlzCisgKiBh
bHdheXMgY29uc2lzdGVudCwgc28gd2Ugb25seSBuZWVkIHRvIHN0b3AgdGhlIGNvbXBpbGVyIGZy
b20KKyAqIHJlb3JkZXJpbmcgYWNjZXNzZXMgaW4gYSB3YXkgdGhhdCB2aW9sYXRlcyB0aGUgc2Vt
YW50aWNzIG9mIGFjcXVpcmUKKyAqIGFuZCByZWxlYXNlLgorICovCisKKyNpZiBkZWZpbmVkKF9L
RVJORUwpCisKKy8qCisgKiBPRkZTRVRPRl9NT05JVE9SQlVGID09IF9fcGNwdV9vZmZzZXQocGNf
bW9uaXRvcmJ1ZikuCisgKgorICogVGhlIG9wZW4tY29kZWQgbnVtYmVyIGlzIHVzZWQgaW5zdGVh
ZCBvZiB0aGUgc3ltYm9saWMgZXhwcmVzc2lvbiB0bworICogYXZvaWQgYSBkZXBlbmRlbmN5IG9u
IHN5cy9wY3B1LmggaW4gbWFjaGluZS9hdG9taWMuaCBjb25zdW1lcnMuCisgKiBBbiBhc3NlcnRp
b24gaW4gYW1kNjQvdm1fbWFjaGRlcC5jIGVuc3VyZXMgdGhhdCB0aGUgdmFsdWUgaXMgY29ycmVj
dC4KKyAqLworI2RlZmluZQlPRkZTRVRPRl9NT05JVE9SQlVGCTB4MTgwCisKKyNpZiBkZWZpbmVk
KFNNUCkKK3N0YXRpYyBfX2lubGluZSB2b2lkCitfX3N0b3JlbG9hZF9iYXJyaWVyKHZvaWQpCit7
CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJsb2NrOyBhZGRsICQwLCUlZ3M6JTAiCisJICAgIDogIitt
IiAoKih1X2ludCAqKU9GRlNFVE9GX01PTklUT1JCVUYpIDogOiAibWVtb3J5IiwgImNjIik7Cit9
CisjZWxzZSAvKiBfS0VSTkVMICYmIFVQICovCitzdGF0aWMgX19pbmxpbmUgdm9pZAorX19zdG9y
ZWxvYWRfYmFycmllcih2b2lkKQoreworCisJX19jb21waWxlcl9tZW1iYXIoKTsKK30KKyNlbmRp
ZiAvKiBTTVAgKi8KKyNlbHNlIC8qICFfS0VSTkVMICovCitzdGF0aWMgX19pbmxpbmUgdm9pZAor
X19zdG9yZWxvYWRfYmFycmllcih2b2lkKQoreworCisJX19hc20gX192b2xhdGlsZSgibG9jazsg
YWRkbCAkMCwtOCglJXJzcCkiIDogOiA6ICJtZW1vcnkiLCAiY2MiKTsKK30KKyNlbmRpZiAvKiBf
S0VSTkVMKi8KKworI2RlZmluZQlBVE9NSUNfTE9BRChUWVBFKQkJCQkJXAorc3RhdGljIF9faW5s
aW5lIHVfIyNUWVBFCQkJCQlcCithdG9taWNfbG9hZF9hY3FfIyNUWVBFKHZvbGF0aWxlIHVfIyNU
WVBFICpwKQkJCVwKK3sJCQkJCQkJCVwKKwl1XyMjVFlQRSByZXM7CQkJCQkJXAorCQkJCQkJCQlc
CisJcmVzID0gKnA7CQkJCQkJXAorCV9fY29tcGlsZXJfbWVtYmFyKCk7CQkJCQlcCisJcmV0dXJu
IChyZXMpOwkJCQkJCVwKK30JCQkJCQkJCVwKK3N0cnVjdCBfX2hhY2sKKworI2RlZmluZQlBVE9N
SUNfU1RPUkUoVFlQRSkJCQkJCVwKK3N0YXRpYyBfX2lubGluZSB2b2lkCQkJCQkJXAorYXRvbWlj
X3N0b3JlX3JlbF8jI1RZUEUodm9sYXRpbGUgdV8jI1RZUEUgKnAsIHVfIyNUWVBFIHYpCVwKK3sJ
CQkJCQkJCVwKKwkJCQkJCQkJXAorCV9fY29tcGlsZXJfbWVtYmFyKCk7CQkJCQlcCisJKnAgPSB2
OwkJCQkJCQlcCit9CQkJCQkJCQlcCitzdHJ1Y3QgX19oYWNrCisKK3N0YXRpYyBfX2lubGluZSB2
b2lkCithdG9taWNfdGhyZWFkX2ZlbmNlX2FjcSh2b2lkKQoreworCisJX19jb21waWxlcl9tZW1i
YXIoKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2F0b21pY190aHJlYWRfZmVuY2VfcmVs
KHZvaWQpCit7CisKKwlfX2NvbXBpbGVyX21lbWJhcigpOworfQorCitzdGF0aWMgX19pbmxpbmUg
dm9pZAorYXRvbWljX3RocmVhZF9mZW5jZV9hY3FfcmVsKHZvaWQpCit7CisKKwlfX2NvbXBpbGVy
X21lbWJhcigpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorYXRvbWljX3RocmVhZF9mZW5j
ZV9zZXFfY3N0KHZvaWQpCit7CisKKwlfX3N0b3JlbG9hZF9iYXJyaWVyKCk7Cit9CisKKyNlbmRp
ZiAvKiBLTERfTU9EVUxFIHx8ICFfX0dOVUNMSUtFX0FTTSAqLworCitBVE9NSUNfQVNNKHNldCwJ
ICAgICBjaGFyLCAgIm9yYiAlYjEsJTAiLCAgImlxIiwgIHYpOworQVRPTUlDX0FTTShjbGVhciwg
ICAgY2hhciwgICJhbmRiICViMSwlMCIsICJpcSIsIH52KTsKK0FUT01JQ19BU00oYWRkLAkgICAg
IGNoYXIsICAiYWRkYiAlYjEsJTAiLCAiaXEiLCAgdik7CitBVE9NSUNfQVNNKHN1YnRyYWN0LCBj
aGFyLCAgInN1YmIgJWIxLCUwIiwgImlxIiwgIHYpOworCitBVE9NSUNfQVNNKHNldCwJICAgICBz
aG9ydCwgIm9ydyAldzEsJTAiLCAgImlyIiwgIHYpOworQVRPTUlDX0FTTShjbGVhciwgICAgc2hv
cnQsICJhbmR3ICV3MSwlMCIsICJpciIsIH52KTsKK0FUT01JQ19BU00oYWRkLAkgICAgIHNob3J0
LCAiYWRkdyAldzEsJTAiLCAiaXIiLCAgdik7CitBVE9NSUNfQVNNKHN1YnRyYWN0LCBzaG9ydCwg
InN1YncgJXcxLCUwIiwgImlyIiwgIHYpOworCitBVE9NSUNfQVNNKHNldCwJICAgICBpbnQsICAg
Im9ybCAlMSwlMCIsICAgImlyIiwgIHYpOworQVRPTUlDX0FTTShjbGVhciwgICAgaW50LCAgICJh
bmRsICUxLCUwIiwgICJpciIsIH52KTsKK0FUT01JQ19BU00oYWRkLAkgICAgIGludCwgICAiYWRk
bCAlMSwlMCIsICAiaXIiLCAgdik7CitBVE9NSUNfQVNNKHN1YnRyYWN0LCBpbnQsICAgInN1Ymwg
JTEsJTAiLCAgImlyIiwgIHYpOworCitBVE9NSUNfQVNNKHNldCwJICAgICBsb25nLCAgIm9ycSAl
MSwlMCIsICAgImlyIiwgIHYpOworQVRPTUlDX0FTTShjbGVhciwgICAgbG9uZywgICJhbmRxICUx
LCUwIiwgICJpciIsIH52KTsKK0FUT01JQ19BU00oYWRkLAkgICAgIGxvbmcsICAiYWRkcSAlMSwl
MCIsICAiaXIiLCAgdik7CitBVE9NSUNfQVNNKHN1YnRyYWN0LCBsb25nLCAgInN1YnEgJTEsJTAi
LCAgImlyIiwgIHYpOworCisjZGVmaW5lCUFUT01JQ19MT0FEU1RPUkUoVFlQRSkJCQkJCVwKKwlB
VE9NSUNfTE9BRChUWVBFKTsJCQkJCVwKKwlBVE9NSUNfU1RPUkUoVFlQRSkKKworQVRPTUlDX0xP
QURTVE9SRShjaGFyKTsKK0FUT01JQ19MT0FEU1RPUkUoc2hvcnQpOworQVRPTUlDX0xPQURTVE9S
RShpbnQpOworQVRPTUlDX0xPQURTVE9SRShsb25nKTsKKworI3VuZGVmIEFUT01JQ19BU00KKyN1
bmRlZiBBVE9NSUNfTE9BRAorI3VuZGVmIEFUT01JQ19TVE9SRQorI3VuZGVmIEFUT01JQ19MT0FE
U1RPUkUKKyNpZm5kZWYgV0FOVF9GVU5DVElPTlMKKworLyogUmVhZCB0aGUgY3VycmVudCB2YWx1
ZSBhbmQgc3RvcmUgYSBuZXcgdmFsdWUgaW4gdGhlIGRlc3RpbmF0aW9uLiAqLworI2lmZGVmIF9f
R05VQ0xJS0VfQVNNCisKK3N0YXRpYyBfX2lubGluZSB1X2ludAorYXRvbWljX3N3YXBfaW50KHZv
bGF0aWxlIHVfaW50ICpwLCB1X2ludCB2KQoreworCisJX19hc20gX192b2xhdGlsZSgKKwkiCXhj
aGdsCSUxLCUwIDsJCSIKKwkiIyBhdG9taWNfc3dhcF9pbnQiCisJOiAiK3IiICh2KSwJCQkvKiAw
ICovCisJICAiK20iICgqcCkpOwkJCS8qIDEgKi8KKwlyZXR1cm4gKHYpOworfQorCitzdGF0aWMg
X19pbmxpbmUgdV9sb25nCithdG9taWNfc3dhcF9sb25nKHZvbGF0aWxlIHVfbG9uZyAqcCwgdV9s
b25nIHYpCit7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKAorCSIJeGNoZ3EJJTEsJTAgOwkJIgorCSIj
IGF0b21pY19zd2FwX2xvbmciCisJOiAiK3IiICh2KSwJCQkvKiAwICovCisJICAiK20iICgqcCkp
OwkJCS8qIDEgKi8KKwlyZXR1cm4gKHYpOworfQorCisjZWxzZSAvKiAhX19HTlVDTElLRV9BU00g
Ki8KKwordV9pbnQJYXRvbWljX3N3YXBfaW50KHZvbGF0aWxlIHVfaW50ICpwLCB1X2ludCB2KTsK
K3VfbG9uZwlhdG9taWNfc3dhcF9sb25nKHZvbGF0aWxlIHVfbG9uZyAqcCwgdV9sb25nIHYpOwor
CisjZW5kaWYgLyogX19HTlVDTElLRV9BU00gKi8KKworI2RlZmluZQlhdG9taWNfc2V0X2FjcV9j
aGFyCQlhdG9taWNfc2V0X2JhcnJfY2hhcgorI2RlZmluZQlhdG9taWNfc2V0X3JlbF9jaGFyCQlh
dG9taWNfc2V0X2JhcnJfY2hhcgorI2RlZmluZQlhdG9taWNfY2xlYXJfYWNxX2NoYXIJCWF0b21p
Y19jbGVhcl9iYXJyX2NoYXIKKyNkZWZpbmUJYXRvbWljX2NsZWFyX3JlbF9jaGFyCQlhdG9taWNf
Y2xlYXJfYmFycl9jaGFyCisjZGVmaW5lCWF0b21pY19hZGRfYWNxX2NoYXIJCWF0b21pY19hZGRf
YmFycl9jaGFyCisjZGVmaW5lCWF0b21pY19hZGRfcmVsX2NoYXIJCWF0b21pY19hZGRfYmFycl9j
aGFyCisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9hY3FfY2hhcglhdG9taWNfc3VidHJhY3RfYmFy
cl9jaGFyCisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9yZWxfY2hhcglhdG9taWNfc3VidHJhY3Rf
YmFycl9jaGFyCisKKyNkZWZpbmUJYXRvbWljX3NldF9hY3Ffc2hvcnQJCWF0b21pY19zZXRfYmFy
cl9zaG9ydAorI2RlZmluZQlhdG9taWNfc2V0X3JlbF9zaG9ydAkJYXRvbWljX3NldF9iYXJyX3No
b3J0CisjZGVmaW5lCWF0b21pY19jbGVhcl9hY3Ffc2hvcnQJCWF0b21pY19jbGVhcl9iYXJyX3No
b3J0CisjZGVmaW5lCWF0b21pY19jbGVhcl9yZWxfc2hvcnQJCWF0b21pY19jbGVhcl9iYXJyX3No
b3J0CisjZGVmaW5lCWF0b21pY19hZGRfYWNxX3Nob3J0CQlhdG9taWNfYWRkX2JhcnJfc2hvcnQK
KyNkZWZpbmUJYXRvbWljX2FkZF9yZWxfc2hvcnQJCWF0b21pY19hZGRfYmFycl9zaG9ydAorI2Rl
ZmluZQlhdG9taWNfc3VidHJhY3RfYWNxX3Nob3J0CWF0b21pY19zdWJ0cmFjdF9iYXJyX3Nob3J0
CisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9yZWxfc2hvcnQJYXRvbWljX3N1YnRyYWN0X2JhcnJf
c2hvcnQKKworI2RlZmluZQlhdG9taWNfc2V0X2FjcV9pbnQJCWF0b21pY19zZXRfYmFycl9pbnQK
KyNkZWZpbmUJYXRvbWljX3NldF9yZWxfaW50CQlhdG9taWNfc2V0X2JhcnJfaW50CisjZGVmaW5l
CWF0b21pY19jbGVhcl9hY3FfaW50CQlhdG9taWNfY2xlYXJfYmFycl9pbnQKKyNkZWZpbmUJYXRv
bWljX2NsZWFyX3JlbF9pbnQJCWF0b21pY19jbGVhcl9iYXJyX2ludAorI2RlZmluZQlhdG9taWNf
YWRkX2FjcV9pbnQJCWF0b21pY19hZGRfYmFycl9pbnQKKyNkZWZpbmUJYXRvbWljX2FkZF9yZWxf
aW50CQlhdG9taWNfYWRkX2JhcnJfaW50CisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9hY3FfaW50
CQlhdG9taWNfc3VidHJhY3RfYmFycl9pbnQKKyNkZWZpbmUJYXRvbWljX3N1YnRyYWN0X3JlbF9p
bnQJCWF0b21pY19zdWJ0cmFjdF9iYXJyX2ludAorI2RlZmluZQlhdG9taWNfY21wc2V0X2FjcV9p
bnQJCWF0b21pY19jbXBzZXRfaW50CisjZGVmaW5lCWF0b21pY19jbXBzZXRfcmVsX2ludAkJYXRv
bWljX2NtcHNldF9pbnQKKworI2RlZmluZQlhdG9taWNfc2V0X2FjcV9sb25nCQlhdG9taWNfc2V0
X2JhcnJfbG9uZworI2RlZmluZQlhdG9taWNfc2V0X3JlbF9sb25nCQlhdG9taWNfc2V0X2JhcnJf
bG9uZworI2RlZmluZQlhdG9taWNfY2xlYXJfYWNxX2xvbmcJCWF0b21pY19jbGVhcl9iYXJyX2xv
bmcKKyNkZWZpbmUJYXRvbWljX2NsZWFyX3JlbF9sb25nCQlhdG9taWNfY2xlYXJfYmFycl9sb25n
CisjZGVmaW5lCWF0b21pY19hZGRfYWNxX2xvbmcJCWF0b21pY19hZGRfYmFycl9sb25nCisjZGVm
aW5lCWF0b21pY19hZGRfcmVsX2xvbmcJCWF0b21pY19hZGRfYmFycl9sb25nCisjZGVmaW5lCWF0
b21pY19zdWJ0cmFjdF9hY3FfbG9uZwlhdG9taWNfc3VidHJhY3RfYmFycl9sb25nCisjZGVmaW5l
CWF0b21pY19zdWJ0cmFjdF9yZWxfbG9uZwlhdG9taWNfc3VidHJhY3RfYmFycl9sb25nCisjZGVm
aW5lCWF0b21pY19jbXBzZXRfYWNxX2xvbmcJCWF0b21pY19jbXBzZXRfbG9uZworI2RlZmluZQlh
dG9taWNfY21wc2V0X3JlbF9sb25nCQlhdG9taWNfY21wc2V0X2xvbmcKKworI2RlZmluZQlhdG9t
aWNfcmVhZGFuZGNsZWFyX2ludChwKQlhdG9taWNfc3dhcF9pbnQocCwgMCkKKyNkZWZpbmUJYXRv
bWljX3JlYWRhbmRjbGVhcl9sb25nKHApCWF0b21pY19zd2FwX2xvbmcocCwgMCkKKworLyogT3Bl
cmF0aW9ucyBvbiA4LWJpdCBieXRlcy4gKi8KKyNkZWZpbmUJYXRvbWljX3NldF84CQlhdG9taWNf
c2V0X2NoYXIKKyNkZWZpbmUJYXRvbWljX3NldF9hY3FfOAlhdG9taWNfc2V0X2FjcV9jaGFyCisj
ZGVmaW5lCWF0b21pY19zZXRfcmVsXzgJYXRvbWljX3NldF9yZWxfY2hhcgorI2RlZmluZQlhdG9t
aWNfY2xlYXJfOAkJYXRvbWljX2NsZWFyX2NoYXIKKyNkZWZpbmUJYXRvbWljX2NsZWFyX2FjcV84
CWF0b21pY19jbGVhcl9hY3FfY2hhcgorI2RlZmluZQlhdG9taWNfY2xlYXJfcmVsXzgJYXRvbWlj
X2NsZWFyX3JlbF9jaGFyCisjZGVmaW5lCWF0b21pY19hZGRfOAkJYXRvbWljX2FkZF9jaGFyCisj
ZGVmaW5lCWF0b21pY19hZGRfYWNxXzgJYXRvbWljX2FkZF9hY3FfY2hhcgorI2RlZmluZQlhdG9t
aWNfYWRkX3JlbF84CWF0b21pY19hZGRfcmVsX2NoYXIKKyNkZWZpbmUJYXRvbWljX3N1YnRyYWN0
XzgJYXRvbWljX3N1YnRyYWN0X2NoYXIKKyNkZWZpbmUJYXRvbWljX3N1YnRyYWN0X2FjcV84CWF0
b21pY19zdWJ0cmFjdF9hY3FfY2hhcgorI2RlZmluZQlhdG9taWNfc3VidHJhY3RfcmVsXzgJYXRv
bWljX3N1YnRyYWN0X3JlbF9jaGFyCisjZGVmaW5lCWF0b21pY19sb2FkX2FjcV84CWF0b21pY19s
b2FkX2FjcV9jaGFyCisjZGVmaW5lCWF0b21pY19zdG9yZV9yZWxfOAlhdG9taWNfc3RvcmVfcmVs
X2NoYXIKKworLyogT3BlcmF0aW9ucyBvbiAxNi1iaXQgd29yZHMuICovCisjZGVmaW5lCWF0b21p
Y19zZXRfMTYJCWF0b21pY19zZXRfc2hvcnQKKyNkZWZpbmUJYXRvbWljX3NldF9hY3FfMTYJYXRv
bWljX3NldF9hY3Ffc2hvcnQKKyNkZWZpbmUJYXRvbWljX3NldF9yZWxfMTYJYXRvbWljX3NldF9y
ZWxfc2hvcnQKKyNkZWZpbmUJYXRvbWljX2NsZWFyXzE2CQlhdG9taWNfY2xlYXJfc2hvcnQKKyNk
ZWZpbmUJYXRvbWljX2NsZWFyX2FjcV8xNglhdG9taWNfY2xlYXJfYWNxX3Nob3J0CisjZGVmaW5l
CWF0b21pY19jbGVhcl9yZWxfMTYJYXRvbWljX2NsZWFyX3JlbF9zaG9ydAorI2RlZmluZQlhdG9t
aWNfYWRkXzE2CQlhdG9taWNfYWRkX3Nob3J0CisjZGVmaW5lCWF0b21pY19hZGRfYWNxXzE2CWF0
b21pY19hZGRfYWNxX3Nob3J0CisjZGVmaW5lCWF0b21pY19hZGRfcmVsXzE2CWF0b21pY19hZGRf
cmVsX3Nob3J0CisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF8xNglhdG9taWNfc3VidHJhY3Rfc2hv
cnQKKyNkZWZpbmUJYXRvbWljX3N1YnRyYWN0X2FjcV8xNglhdG9taWNfc3VidHJhY3RfYWNxX3No
b3J0CisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9yZWxfMTYJYXRvbWljX3N1YnRyYWN0X3JlbF9z
aG9ydAorI2RlZmluZQlhdG9taWNfbG9hZF9hY3FfMTYJYXRvbWljX2xvYWRfYWNxX3Nob3J0Cisj
ZGVmaW5lCWF0b21pY19zdG9yZV9yZWxfMTYJYXRvbWljX3N0b3JlX3JlbF9zaG9ydAorCisvKiBP
cGVyYXRpb25zIG9uIDMyLWJpdCBkb3VibGUgd29yZHMuICovCisjZGVmaW5lCWF0b21pY19zZXRf
MzIJCWF0b21pY19zZXRfaW50CisjZGVmaW5lCWF0b21pY19zZXRfYWNxXzMyCWF0b21pY19zZXRf
YWNxX2ludAorI2RlZmluZQlhdG9taWNfc2V0X3JlbF8zMglhdG9taWNfc2V0X3JlbF9pbnQKKyNk
ZWZpbmUJYXRvbWljX2NsZWFyXzMyCQlhdG9taWNfY2xlYXJfaW50CisjZGVmaW5lCWF0b21pY19j
bGVhcl9hY3FfMzIJYXRvbWljX2NsZWFyX2FjcV9pbnQKKyNkZWZpbmUJYXRvbWljX2NsZWFyX3Jl
bF8zMglhdG9taWNfY2xlYXJfcmVsX2ludAorI2RlZmluZQlhdG9taWNfYWRkXzMyCQlhdG9taWNf
YWRkX2ludAorI2RlZmluZQlhdG9taWNfYWRkX2FjcV8zMglhdG9taWNfYWRkX2FjcV9pbnQKKyNk
ZWZpbmUJYXRvbWljX2FkZF9yZWxfMzIJYXRvbWljX2FkZF9yZWxfaW50CisjZGVmaW5lCWF0b21p
Y19zdWJ0cmFjdF8zMglhdG9taWNfc3VidHJhY3RfaW50CisjZGVmaW5lCWF0b21pY19zdWJ0cmFj
dF9hY3FfMzIJYXRvbWljX3N1YnRyYWN0X2FjcV9pbnQKKyNkZWZpbmUJYXRvbWljX3N1YnRyYWN0
X3JlbF8zMglhdG9taWNfc3VidHJhY3RfcmVsX2ludAorI2RlZmluZQlhdG9taWNfbG9hZF9hY3Ff
MzIJYXRvbWljX2xvYWRfYWNxX2ludAorI2RlZmluZQlhdG9taWNfc3RvcmVfcmVsXzMyCWF0b21p
Y19zdG9yZV9yZWxfaW50CisjZGVmaW5lCWF0b21pY19jbXBzZXRfMzIJYXRvbWljX2NtcHNldF9p
bnQKKyNkZWZpbmUJYXRvbWljX2NtcHNldF9hY3FfMzIJYXRvbWljX2NtcHNldF9hY3FfaW50Cisj
ZGVmaW5lCWF0b21pY19jbXBzZXRfcmVsXzMyCWF0b21pY19jbXBzZXRfcmVsX2ludAorI2RlZmlu
ZQlhdG9taWNfc3dhcF8zMgkJYXRvbWljX3N3YXBfaW50CisjZGVmaW5lCWF0b21pY19yZWFkYW5k
Y2xlYXJfMzIJYXRvbWljX3JlYWRhbmRjbGVhcl9pbnQKKyNkZWZpbmUJYXRvbWljX2ZldGNoYWRk
XzMyCWF0b21pY19mZXRjaGFkZF9pbnQKKyNkZWZpbmUJYXRvbWljX3Rlc3RhbmRzZXRfMzIJYXRv
bWljX3Rlc3RhbmRzZXRfaW50CisjZGVmaW5lCWF0b21pY190ZXN0YW5kY2xlYXJfMzIJYXRvbWlj
X3Rlc3RhbmRjbGVhcl9pbnQKKworLyogT3BlcmF0aW9ucyBvbiA2NC1iaXQgcXVhZCB3b3Jkcy4g
Ki8KKyNkZWZpbmUJYXRvbWljX3NldF82NAkJYXRvbWljX3NldF9sb25nCisjZGVmaW5lCWF0b21p
Y19zZXRfYWNxXzY0CWF0b21pY19zZXRfYWNxX2xvbmcKKyNkZWZpbmUJYXRvbWljX3NldF9yZWxf
NjQJYXRvbWljX3NldF9yZWxfbG9uZworI2RlZmluZQlhdG9taWNfY2xlYXJfNjQJCWF0b21pY19j
bGVhcl9sb25nCisjZGVmaW5lCWF0b21pY19jbGVhcl9hY3FfNjQJYXRvbWljX2NsZWFyX2FjcV9s
b25nCisjZGVmaW5lCWF0b21pY19jbGVhcl9yZWxfNjQJYXRvbWljX2NsZWFyX3JlbF9sb25nCisj
ZGVmaW5lCWF0b21pY19hZGRfNjQJCWF0b21pY19hZGRfbG9uZworI2RlZmluZQlhdG9taWNfYWRk
X2FjcV82NAlhdG9taWNfYWRkX2FjcV9sb25nCisjZGVmaW5lCWF0b21pY19hZGRfcmVsXzY0CWF0
b21pY19hZGRfcmVsX2xvbmcKKyNkZWZpbmUJYXRvbWljX3N1YnRyYWN0XzY0CWF0b21pY19zdWJ0
cmFjdF9sb25nCisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9hY3FfNjQJYXRvbWljX3N1YnRyYWN0
X2FjcV9sb25nCisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9yZWxfNjQJYXRvbWljX3N1YnRyYWN0
X3JlbF9sb25nCisjZGVmaW5lCWF0b21pY19sb2FkX2FjcV82NAlhdG9taWNfbG9hZF9hY3FfbG9u
ZworI2RlZmluZQlhdG9taWNfc3RvcmVfcmVsXzY0CWF0b21pY19zdG9yZV9yZWxfbG9uZworI2Rl
ZmluZQlhdG9taWNfY21wc2V0XzY0CWF0b21pY19jbXBzZXRfbG9uZworI2RlZmluZQlhdG9taWNf
Y21wc2V0X2FjcV82NAlhdG9taWNfY21wc2V0X2FjcV9sb25nCisjZGVmaW5lCWF0b21pY19jbXBz
ZXRfcmVsXzY0CWF0b21pY19jbXBzZXRfcmVsX2xvbmcKKyNkZWZpbmUJYXRvbWljX3N3YXBfNjQJ
CWF0b21pY19zd2FwX2xvbmcKKyNkZWZpbmUJYXRvbWljX3JlYWRhbmRjbGVhcl82NAlhdG9taWNf
cmVhZGFuZGNsZWFyX2xvbmcKKyNkZWZpbmUJYXRvbWljX2ZldGNoYWRkXzY0CWF0b21pY19mZXRj
aGFkZF9sb25nCisjZGVmaW5lCWF0b21pY190ZXN0YW5kc2V0XzY0CWF0b21pY190ZXN0YW5kc2V0
X2xvbmcKKyNkZWZpbmUJYXRvbWljX3Rlc3RhbmRjbGVhcl82NAlhdG9taWNfdGVzdGFuZGNsZWFy
X2xvbmcKKworLyogT3BlcmF0aW9ucyBvbiBwb2ludGVycy4gKi8KKyNkZWZpbmUJYXRvbWljX3Nl
dF9wdHIJCWF0b21pY19zZXRfbG9uZworI2RlZmluZQlhdG9taWNfc2V0X2FjcV9wdHIJYXRvbWlj
X3NldF9hY3FfbG9uZworI2RlZmluZQlhdG9taWNfc2V0X3JlbF9wdHIJYXRvbWljX3NldF9yZWxf
bG9uZworI2RlZmluZQlhdG9taWNfY2xlYXJfcHRyCWF0b21pY19jbGVhcl9sb25nCisjZGVmaW5l
CWF0b21pY19jbGVhcl9hY3FfcHRyCWF0b21pY19jbGVhcl9hY3FfbG9uZworI2RlZmluZQlhdG9t
aWNfY2xlYXJfcmVsX3B0cglhdG9taWNfY2xlYXJfcmVsX2xvbmcKKyNkZWZpbmUJYXRvbWljX2Fk
ZF9wdHIJCWF0b21pY19hZGRfbG9uZworI2RlZmluZQlhdG9taWNfYWRkX2FjcV9wdHIJYXRvbWlj
X2FkZF9hY3FfbG9uZworI2RlZmluZQlhdG9taWNfYWRkX3JlbF9wdHIJYXRvbWljX2FkZF9yZWxf
bG9uZworI2RlZmluZQlhdG9taWNfc3VidHJhY3RfcHRyCWF0b21pY19zdWJ0cmFjdF9sb25nCisj
ZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9hY3FfcHRyCWF0b21pY19zdWJ0cmFjdF9hY3FfbG9uZwor
I2RlZmluZQlhdG9taWNfc3VidHJhY3RfcmVsX3B0cglhdG9taWNfc3VidHJhY3RfcmVsX2xvbmcK
KyNkZWZpbmUJYXRvbWljX2xvYWRfYWNxX3B0cglhdG9taWNfbG9hZF9hY3FfbG9uZworI2RlZmlu
ZQlhdG9taWNfc3RvcmVfcmVsX3B0cglhdG9taWNfc3RvcmVfcmVsX2xvbmcKKyNkZWZpbmUJYXRv
bWljX2NtcHNldF9wdHIJYXRvbWljX2NtcHNldF9sb25nCisjZGVmaW5lCWF0b21pY19jbXBzZXRf
YWNxX3B0cglhdG9taWNfY21wc2V0X2FjcV9sb25nCisjZGVmaW5lCWF0b21pY19jbXBzZXRfcmVs
X3B0cglhdG9taWNfY21wc2V0X3JlbF9sb25nCisjZGVmaW5lCWF0b21pY19zd2FwX3B0cgkJYXRv
bWljX3N3YXBfbG9uZworI2RlZmluZQlhdG9taWNfcmVhZGFuZGNsZWFyX3B0cglhdG9taWNfcmVh
ZGFuZGNsZWFyX2xvbmcKKworI2VuZGlmIC8qICFXQU5UX0ZVTkNUSU9OUyAqLworCisjZW5kaWYg
LyogIV9NQUNISU5FX0FUT01JQ19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvYnVzLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hp
bmUvYnVzLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvYnVzLmgJMTk3
MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC9tYWNoaW5lL2J1cy5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAw
CkBAIC0wLDAgKzEsNiBAQAorLyotCisgKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21h
aW4uCisgKi8KKy8qICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9idXMu
aCAyNDQxOTEgMjAxMi0xMi0xMyAyMToyNzoyMFogamltaGFycmlzICQgKi8KKworI2luY2x1ZGUg
PHg4Ni9idXMuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNo
aW5lL2J1c19kbWEuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9idXNfZG1h
LmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvYnVzX2RtYS5oCTE5NzAt
MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvbWFjaGluZS9idXNfZG1hLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAx
MDAKQEAgLTAsMCArMSwzNCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgU2NvdHQgTG9u
ZworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
CisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lz
L2FtZDY0L2luY2x1ZGUvYnVzX2RtYS5oIDE0ODI3NSAyMDA1LTA3LTIyIDA0OjAzOjI1WiBvYnJp
ZW4gJAorICovCisKKyNpZm5kZWYgX0FNRDY0X0JVU19ETUFfSF8KKyNkZWZpbmUgX0FNRDY0X0JV
U19ETUFfSF8KKworI2luY2x1ZGUgPHN5cy9idXNfZG1hLmg+CisKKyNlbmRpZiAvKiBfQU1ENjRf
QlVTX0RNQV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUvY2xvY2suaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9jbG9jay5o
Ci0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2Nsb2NrLmgJMTk3MC0wMS0w
MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9tYWNoaW5lL2Nsb2NrLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAg
LTAsMCArMSw0NSBAQAorLyotCisgKiBLZXJuZWwgaW50ZXJmYWNlIHRvIG1hY2hpbmUtZGVwZW5k
ZW50IGNsb2NrIGRyaXZlci4KKyAqIEdhcnJldHQgV29sbG1hbiwgU2VwdGVtYmVyIDE5OTQuCisg
KiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKgorICogJEZyZWVCU0Q6IHJl
bGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL2Nsb2NrLmggMjYzMDA4IDIwMTQtMDMtMTEgMTA6
MjA6NDJaIHJveWdlciAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9DTE9DS19IXworI2RlZmlu
ZQlfTUFDSElORV9DTE9DS19IXworCisjaWZkZWYgX0tFUk5FTAorLyoKKyAqIGkzODYgdG8gY2xv
Y2sgZHJpdmVyIGludGVyZmFjZS4KKyAqIFhYWCBsYXJnZSBwYXJ0cyBvZiB0aGUgZHJpdmVyIGFu
ZCBpdHMgaW50ZXJmYWNlIGFyZSBtaXNwbGFjZWQuCisgKi8KK2V4dGVybiBpbnQJY2xraW50cl9w
ZW5kaW5nOworZXh0ZXJuIHVfaW50CWk4MjU0X2ZyZXE7CitleHRlcm4gaW50CWk4MjU0X21heF9j
b3VudDsKK2V4dGVybiB1aW50NjRfdAl0c2NfZnJlcTsKK2V4dGVybiBpbnQJdHNjX2lzX2ludmFy
aWFudDsKK2V4dGVybiBpbnQJdHNjX3BlcmZfc3RhdDsKKyNpZmRlZiBTTVAKK2V4dGVybiBpbnQJ
c21wX3RzYzsKKyNlbmRpZgorCit2b2lkCWk4MjU0X2luaXQodm9pZCk7Cit2b2lkCWk4MjU0X2Rl
bGF5KGludCk7Cit2b2lkCWNsb2NrX2luaXQodm9pZCk7CisKKy8qCisgKiBEcml2ZXIgdG8gY2xv
Y2sgZHJpdmVyIGludGVyZmFjZS4KKyAqLworCit2b2lkCXN0YXJ0cnRjbG9jayh2b2lkKTsKK3Zv
aWQJaW5pdF9UU0Modm9pZCk7CisKKyNkZWZpbmUJSEFTX1RJTUVSX1NQS1IgMQoraW50CXRpbWVy
X3Nwa3JfYWNxdWlyZSh2b2lkKTsKK2ludAl0aW1lcl9zcGtyX3JlbGVhc2Uodm9pZCk7Cit2b2lk
CXRpbWVyX3Nwa3Jfc2V0ZnJlcShpbnQgZnJlcSk7CisKKyNlbmRpZiAvKiBfS0VSTkVMICovCisK
KyNlbmRpZiAvKiAhX01BQ0hJTkVfQ0xPQ0tfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5
cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2NvdW50ZXIuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvbWFjaGluZS9jb3VudGVyLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUvY291bnRlci5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAv
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9jb3VudGVyLmgJMjAxNi0wOS0yOSAw
MDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw4OSBAQAorLyotCisgKiBDb3B5cmln
aHQgKGMpIDIwMTIgS29uc3RhbnRpbiBCZWxvdXNvdiA8a2liQEZyZWVCU0Qub3JnPgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisg
KiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2lu
Y2x1ZGUvY291bnRlci5oIDMwMjM3MiAyMDE2LTA3LTA2IDE0OjA5OjQ5WiBud2hpdGVob3JuICQK
KyAqLworCisjaWZuZGVmIF9fTUFDSElORV9DT1VOVEVSX0hfXworI2RlZmluZSBfX01BQ0hJTkVf
Q09VTlRFUl9IX18KKworI2luY2x1ZGUgPHN5cy9wY3B1Lmg+CisKK2V4dGVybiBzdHJ1Y3QgcGNw
dSBfX3BjcHVbMV07CisKKyNkZWZpbmUJY291bnRlcl9lbnRlcigpCWRvIHt9IHdoaWxlICgwKQor
I2RlZmluZQljb3VudGVyX2V4aXQoKQlkbyB7fSB3aGlsZSAoMCkKKworI2lmZGVmIElOX1NVQlJf
Q09VTlRFUl9DCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90Citjb3VudGVyX3U2NF9yZWFkX29uZSh1
aW50NjRfdCAqcCwgaW50IGNwdSkKK3sKKworCXJldHVybiAoKih1aW50NjRfdCAqKSgoY2hhciAq
KXAgKyBzaXplb2Yoc3RydWN0IHBjcHUpICogY3B1KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWlu
dDY0X3QKK2NvdW50ZXJfdTY0X2ZldGNoX2lubGluZSh1aW50NjRfdCAqcCkKK3sKKwl1aW50NjRf
dCByOworCWludCBpOworCisJciA9IDA7CisJQ1BVX0ZPUkVBQ0goaSkKKwkJciArPSBjb3VudGVy
X3U2NF9yZWFkX29uZSgodWludDY0X3QgKilwLCBpKTsKKworCXJldHVybiAocik7Cit9CisKK3N0
YXRpYyB2b2lkCitjb3VudGVyX3U2NF96ZXJvX29uZV9jcHUodm9pZCAqYXJnKQoreworCisJKigo
dWludDY0X3QgKikoKGNoYXIgKilhcmcgKyBzaXplb2Yoc3RydWN0IHBjcHUpICoKKwkgICAgUENQ
VV9HRVQoY3B1aWQpKSkgPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2NvdW50ZXJfdTY0
X3plcm9faW5saW5lKGNvdW50ZXJfdTY0X3QgYykKK3sKKworCXNtcF9yZW5kZXp2b3VzKHNtcF9u
b19yZW5kZXZvdXNfYmFycmllciwgY291bnRlcl91NjRfemVyb19vbmVfY3B1LAorCSAgICBzbXBf
bm9fcmVuZGV2b3VzX2JhcnJpZXIsIGMpOworfQorI2VuZGlmCisKKyNkZWZpbmUJY291bnRlcl91
NjRfYWRkX3Byb3RlY3RlZChjLCBpKQljb3VudGVyX3U2NF9hZGQoYywgaSkKKworc3RhdGljIGlu
bGluZSB2b2lkCitjb3VudGVyX3U2NF9hZGQoY291bnRlcl91NjRfdCBjLCBpbnQ2NF90IGluYykK
K3sKKworCV9fYXNtIF9fdm9sYXRpbGUoImFkZHFcdCUxLCUlZ3M6KCUwKSIKKwkgICAgOgorCSAg
ICA6ICJyIiAoKGNoYXIgKiljIC0gKGNoYXIgKikmX19wY3B1WzBdKSwgInJpIiAoaW5jKQorCSAg
ICA6ICJtZW1vcnkiLCAiY2MiKTsKK30KKworI2VuZGlmCS8qICEgX19NQUNISU5FX0NPVU5URVJf
SF9fICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9j
cHUuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9jcHUuaAotLS0gdXNyL3Ny
Yy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9jcHUuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAw
MDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvY3B1
LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw5MyBAQAor
LyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg
b2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2Rl
IGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICog
V2lsbGlhbSBKb2xpdHouCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBV
bml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv
ZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCWZy
b206IEAoIyljcHUuaAk1LjQgKEJlcmtlbGV5KSA1LzkvOTEKKyAqICRGcmVlQlNEOiByZWxlbmcv
MTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9jcHUuaCAyNjc1MjYgMjAxNC0wNi0xNiAwODo0MzowM1og
cm95Z2VyICQKKyAqLworCisjaWZuZGVmIF9NQUNISU5FX0NQVV9IXworI2RlZmluZQlfTUFDSElO
RV9DUFVfSF8KKworLyoKKyAqIERlZmluaXRpb25zIHVuaXF1ZSB0byBpMzg2IGNwdSBzdXBwb3J0
LgorICovCisjaW5jbHVkZSA8bWFjaGluZS9wc2wuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2ZyYW1l
Lmg+CisjaW5jbHVkZSA8bWFjaGluZS9zZWdtZW50cy5oPgorCisjZGVmaW5lCWNwdV9leGVjKHAp
CS8qIG5vdGhpbmcgKi8KKyNkZWZpbmUJY3B1X3N3YXBpbihwKQkvKiBub3RoaW5nICovCisjZGVm
aW5lCWNwdV9nZXRzdGFjayh0ZCkJCSgodGQpLT50ZF9mcmFtZS0+dGZfcnNwKQorI2RlZmluZQlj
cHVfc2V0c3RhY2sodGQsIGFwKQkJKCh0ZCktPnRkX2ZyYW1lLT50Zl9yc3AgPSAoYXApKQorI2Rl
ZmluZQljcHVfc3BpbndhaXQoKQkJCWlhMzJfcGF1c2UoKQorCisjZGVmaW5lCVRSQVBGX1VTRVJN
T0RFKGZyYW1lcCkgXAorCShJU1BMKChmcmFtZXApLT50Zl9jcykgPT0gU0VMX1VQTCkKKyNkZWZp
bmUJVFJBUEZfUEMoZnJhbWVwKQkoKGZyYW1lcCktPnRmX3JpcCkKKworI2lmZGVmIF9LRVJORUwK
Ky8qCisgKiBTdHJ1Y3QgY29udGFpbmluZyBwb2ludGVycyB0byBDUFUgbWFuYWdlbWVudCBmdW5j
dGlvbnMgd2hvc2UKKyAqIGltcGxlbWVudGF0aW9uIGlzIHJ1biB0aW1lIHNlbGVjdGFibGUuICBT
ZWxlY3Rpb24gY2FuIGJlIG1hZGUsCisgKiBmb3IgZXhhbXBsZSwgYmFzZWQgb24gZGV0ZWN0aW9u
IG9mIGEgcGFydGljdWxhciBDUFUgdmFyaWFudCBvcgorICogaHlwZXJ2aXNvciBlbnZpcm9ubWVu
dC4KKyAqLworc3RydWN0IGNwdV9vcHMgeworCXZvaWQgKCpjcHVfaW5pdCkodm9pZCk7CisJdm9p
ZCAoKmNwdV9yZXN1bWUpKHZvaWQpOworfTsKKworZXh0ZXJuIHN0cnVjdAljcHVfb3BzIGNwdV9v
cHM7CitleHRlcm4gY2hhcglidGV4dFtdOworZXh0ZXJuIGNoYXIJZXRleHRbXTsKKworLyogUmVz
dW1lIGhvb2sgZm9yIFZNTS4gKi8KK2V4dGVybgl2b2lkICgqdm1tX3Jlc3VtZV9wKSh2b2lkKTsK
Kwordm9pZAljcHVfaGFsdCh2b2lkKTsKK3ZvaWQJY3B1X3Jlc2V0KHZvaWQpOwordm9pZAlmb3Jr
X3RyYW1wb2xpbmUodm9pZCk7Cit2b2lkCXN3aV92bSh2b2lkICopOworCisvKgorICogUmV0dXJu
IGNvbnRlbnRzIG9mIGluLWNwdSBmYXN0IGNvdW50ZXIgYXMgYSBzb3J0IG9mICJib2dvLXRpbWUi
CisgKiBmb3IgcmFuZG9tLWhhcnZlc3RpbmcgcHVycG9zZXMuCisgKi8KK3N0YXRpYyBfX2lubGlu
ZSB1X2ludDY0X3QKK2dldF9jeWNsZWNvdW50KHZvaWQpCit7CisKKwlyZXR1cm4gKHJkdHNjKCkp
OworfQorCisjZW5kaWYKKworI2VuZGlmIC8qICFfTUFDSElORV9DUFVfSF8gKi8KZGlmZiAtdSAt
ciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2NwdWZ1bmMuaCAvdXNyL3Ny
Yy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9jcHVmdW5jLmgKLS0tIHVzci9zcmMvc3lzL21v
ZHVsZXMvbmV0bWFwL21hY2hpbmUvY3B1ZnVuYy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw
MDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9jcHVmdW5j
LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw4NzEgQEAK
Ky8qLQorICogQ29weXJpZ2h0IChjKSAyMDAzIFBldGVyIFdlbW0uCisgKiBDb3B5cmlnaHQgKGMp
IDE5OTMgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRo
ZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
IHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5U
UyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAq
ICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9jcHVmdW5jLmggMjkxNjg4
IDIwMTUtMTItMDMgMTE6MTQ6MTRaIGtpYiAkCisgKi8KKworLyoKKyAqIEZ1bmN0aW9ucyB0byBw
cm92aWRlIGFjY2VzcyB0byBzcGVjaWFsIGkzODYgaW5zdHJ1Y3Rpb25zLgorICogVGhpcyBpbiBp
bmNsdWRlZCBpbiBzeXMvc3lzdG0uaCwgYW5kIHRoYXQgZmlsZSBzaG91bGQgYmUKKyAqIHVzZWQg
aW4gcHJlZmVyZW5jZSB0byB0aGlzLgorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfQ1BVRlVOQ19I
XworI2RlZmluZQlfTUFDSElORV9DUFVGVU5DX0hfCisKKyNpZm5kZWYgX1NZU19DREVGU19IXwor
I2Vycm9yIHRoaXMgZmlsZSBuZWVkcyBzeXMvY2RlZnMuaCBhcyBhIHByZXJlcXVpc2l0ZQorI2Vu
ZGlmCisKK3N0cnVjdCByZWdpb25fZGVzY3JpcHRvcjsKKworI2RlZmluZSByZWFkYih2YSkJKCoo
dm9sYXRpbGUgdWludDhfdCAqKSAodmEpKQorI2RlZmluZSByZWFkdyh2YSkJKCoodm9sYXRpbGUg
dWludDE2X3QgKikgKHZhKSkKKyNkZWZpbmUgcmVhZGwodmEpCSgqKHZvbGF0aWxlIHVpbnQzMl90
ICopICh2YSkpCisjZGVmaW5lIHJlYWRxKHZhKQkoKih2b2xhdGlsZSB1aW50NjRfdCAqKSAodmEp
KQorCisjZGVmaW5lIHdyaXRlYih2YSwgZCkJKCoodm9sYXRpbGUgdWludDhfdCAqKSAodmEpID0g
KGQpKQorI2RlZmluZSB3cml0ZXcodmEsIGQpCSgqKHZvbGF0aWxlIHVpbnQxNl90ICopICh2YSkg
PSAoZCkpCisjZGVmaW5lIHdyaXRlbCh2YSwgZCkJKCoodm9sYXRpbGUgdWludDMyX3QgKikgKHZh
KSA9IChkKSkKKyNkZWZpbmUgd3JpdGVxKHZhLCBkKQkoKih2b2xhdGlsZSB1aW50NjRfdCAqKSAo
dmEpID0gKGQpKQorCisjaWYgZGVmaW5lZChfX0dOVUNMSUtFX0FTTSkgJiYgZGVmaW5lZChfX0ND
X1NVUFBPUlRTX19fSU5MSU5FKQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorYnJlYWtwb2ludCh2
b2lkKQoreworCV9fYXNtIF9fdm9sYXRpbGUoImludCAkMyIpOworfQorCitzdGF0aWMgX19pbmxp
bmUgdV9pbnQKK2JzZmwodV9pbnQgbWFzaykKK3sKKwl1X2ludAlyZXN1bHQ7CisKKwlfX2FzbSBf
X3ZvbGF0aWxlKCJic2ZsICUxLCUwIiA6ICI9ciIgKHJlc3VsdCkgOiAicm0iIChtYXNrKSk7CisJ
cmV0dXJuIChyZXN1bHQpOworfQorCitzdGF0aWMgX19pbmxpbmUgdV9sb25nCitic2ZxKHVfbG9u
ZyBtYXNrKQoreworCXVfbG9uZwlyZXN1bHQ7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJic2ZxICUx
LCUwIiA6ICI9ciIgKHJlc3VsdCkgOiAicm0iIChtYXNrKSk7CisJcmV0dXJuIChyZXN1bHQpOwor
fQorCitzdGF0aWMgX19pbmxpbmUgdV9pbnQKK2JzcmwodV9pbnQgbWFzaykKK3sKKwl1X2ludAly
ZXN1bHQ7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJic3JsICUxLCUwIiA6ICI9ciIgKHJlc3VsdCkg
OiAicm0iIChtYXNrKSk7CisJcmV0dXJuIChyZXN1bHQpOworfQorCitzdGF0aWMgX19pbmxpbmUg
dV9sb25nCitic3JxKHVfbG9uZyBtYXNrKQoreworCXVfbG9uZwlyZXN1bHQ7CisKKwlfX2FzbSBf
X3ZvbGF0aWxlKCJic3JxICUxLCUwIiA6ICI9ciIgKHJlc3VsdCkgOiAicm0iIChtYXNrKSk7CisJ
cmV0dXJuIChyZXN1bHQpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorY2xmbHVzaCh1X2xv
bmcgYWRkcikKK3sKKworCV9fYXNtIF9fdm9sYXRpbGUoImNsZmx1c2ggJTAiIDogOiAibSIgKCoo
Y2hhciAqKWFkZHIpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2NsZmx1c2hvcHQodV9s
b25nIGFkZHIpCit7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCIuYnl0ZSAweDY2O2NsZmx1c2ggJTAi
IDogOiAibSIgKCooY2hhciAqKWFkZHIpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2Ns
dHModm9pZCkKK3sKKworCV9fYXNtIF9fdm9sYXRpbGUoImNsdHMiKTsKK30KKworc3RhdGljIF9f
aW5saW5lIHZvaWQKK2Rpc2FibGVfaW50cih2b2lkKQoreworCV9fYXNtIF9fdm9sYXRpbGUoImNs
aSIgOiA6IDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorZG9fY3B1aWQo
dV9pbnQgYXgsIHVfaW50ICpwKQoreworCV9fYXNtIF9fdm9sYXRpbGUoImNwdWlkIgorCQkJIDog
Ij1hIiAocFswXSksICI9YiIgKHBbMV0pLCAiPWMiIChwWzJdKSwgIj1kIiAocFszXSkKKwkJCSA6
ICAiMCIgKGF4KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitjcHVpZF9jb3VudCh1X2lu
dCBheCwgdV9pbnQgY3gsIHVfaW50ICpwKQoreworCV9fYXNtIF9fdm9sYXRpbGUoImNwdWlkIgor
CQkJIDogIj1hIiAocFswXSksICI9YiIgKHBbMV0pLCAiPWMiIChwWzJdKSwgIj1kIiAocFszXSkK
KwkJCSA6ICAiMCIgKGF4KSwgImMiIChjeCkpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAor
ZW5hYmxlX2ludHIodm9pZCkKK3sKKwlfX2FzbSBfX3ZvbGF0aWxlKCJzdGkiKTsKK30KKworI2lm
ZGVmIF9LRVJORUwKKworI2RlZmluZQlIQVZFX0lOTElORV9GRlMKKyNkZWZpbmUgICAgICAgIGZm
cyh4KSAgX19idWlsdGluX2Zmcyh4KQorCisjZGVmaW5lCUhBVkVfSU5MSU5FX0ZGU0wKKworc3Rh
dGljIF9faW5saW5lIGludAorZmZzbChsb25nIG1hc2spCit7CisJcmV0dXJuIChtYXNrID09IDAg
PyBtYXNrIDogKGludClic2ZxKCh1X2xvbmcpbWFzaykgKyAxKTsKK30KKworI2RlZmluZQlIQVZF
X0lOTElORV9GRlNMTAorCitzdGF0aWMgX19pbmxpbmUgaW50CitmZnNsbChsb25nIGxvbmcgbWFz
aykKK3sKKwlyZXR1cm4gKGZmc2woKGxvbmcpbWFzaykpOworfQorCisjZGVmaW5lCUhBVkVfSU5M
SU5FX0ZMUworCitzdGF0aWMgX19pbmxpbmUgaW50CitmbHMoaW50IG1hc2spCit7CisJcmV0dXJu
IChtYXNrID09IDAgPyBtYXNrIDogKGludClic3JsKCh1X2ludCltYXNrKSArIDEpOworfQorCisj
ZGVmaW5lCUhBVkVfSU5MSU5FX0ZMU0wKKworc3RhdGljIF9faW5saW5lIGludAorZmxzbChsb25n
IG1hc2spCit7CisJcmV0dXJuIChtYXNrID09IDAgPyBtYXNrIDogKGludClic3JxKCh1X2xvbmcp
bWFzaykgKyAxKTsKK30KKworI2RlZmluZQlIQVZFX0lOTElORV9GTFNMTAorCitzdGF0aWMgX19p
bmxpbmUgaW50CitmbHNsbChsb25nIGxvbmcgbWFzaykKK3sKKwlyZXR1cm4gKGZsc2woKGxvbmcp
bWFzaykpOworfQorCisjZW5kaWYgLyogX0tFUk5FTCAqLworCitzdGF0aWMgX19pbmxpbmUgdm9p
ZAoraGFsdCh2b2lkKQoreworCV9fYXNtIF9fdm9sYXRpbGUoImhsdCIpOworfQorCitzdGF0aWMg
X19pbmxpbmUgdV9jaGFyCitpbmIodV9pbnQgcG9ydCkKK3sKKwl1X2NoYXIJZGF0YTsKKworCV9f
YXNtIF9fdm9sYXRpbGUoImluYiAldzEsICUwIiA6ICI9YSIgKGRhdGEpIDogIk5kIiAocG9ydCkp
OworCXJldHVybiAoZGF0YSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1X2ludAoraW5sKHVfaW50
IHBvcnQpCit7CisJdV9pbnQJZGF0YTsKKworCV9fYXNtIF9fdm9sYXRpbGUoImlubCAldzEsICUw
IiA6ICI9YSIgKGRhdGEpIDogIk5kIiAocG9ydCkpOworCXJldHVybiAoZGF0YSk7Cit9CisKK3N0
YXRpYyBfX2lubGluZSB2b2lkCitpbnNiKHVfaW50IHBvcnQsIHZvaWQgKmFkZHIsIHNpemVfdCBj
b3VudCkKK3sKKwlfX2FzbSBfX3ZvbGF0aWxlKCJjbGQ7IHJlcDsgaW5zYiIKKwkJCSA6ICIrRCIg
KGFkZHIpLCAiK2MiIChjb3VudCkKKwkJCSA6ICJkIiAocG9ydCkKKwkJCSA6ICJtZW1vcnkiKTsK
K30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2luc3codV9pbnQgcG9ydCwgdm9pZCAqYWRkciwg
c2l6ZV90IGNvdW50KQoreworCV9fYXNtIF9fdm9sYXRpbGUoImNsZDsgcmVwOyBpbnN3IgorCQkJ
IDogIitEIiAoYWRkciksICIrYyIgKGNvdW50KQorCQkJIDogImQiIChwb3J0KQorCQkJIDogIm1l
bW9yeSIpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAoraW5zbCh1X2ludCBwb3J0LCB2b2lk
ICphZGRyLCBzaXplX3QgY291bnQpCit7CisJX19hc20gX192b2xhdGlsZSgiY2xkOyByZXA7IGlu
c2wiCisJCQkgOiAiK0QiIChhZGRyKSwgIitjIiAoY291bnQpCisJCQkgOiAiZCIgKHBvcnQpCisJ
CQkgOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitpbnZkKHZvaWQpCit7
CisJX19hc20gX192b2xhdGlsZSgiaW52ZCIpOworfQorCitzdGF0aWMgX19pbmxpbmUgdV9zaG9y
dAoraW53KHVfaW50IHBvcnQpCit7CisJdV9zaG9ydAlkYXRhOworCisJX19hc20gX192b2xhdGls
ZSgiaW53ICV3MSwgJTAiIDogIj1hIiAoZGF0YSkgOiAiTmQiIChwb3J0KSk7CisJcmV0dXJuIChk
YXRhKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK291dGIodV9pbnQgcG9ydCwgdV9jaGFy
IGRhdGEpCit7CisJX19hc20gX192b2xhdGlsZSgib3V0YiAlMCwgJXcxIiA6IDogImEiIChkYXRh
KSwgIk5kIiAocG9ydCkpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorb3V0bCh1X2ludCBw
b3J0LCB1X2ludCBkYXRhKQoreworCV9fYXNtIF9fdm9sYXRpbGUoIm91dGwgJTAsICV3MSIgOiA6
ICJhIiAoZGF0YSksICJOZCIgKHBvcnQpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK291
dHNiKHVfaW50IHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKwlfX2Fz
bSBfX3ZvbGF0aWxlKCJjbGQ7IHJlcDsgb3V0c2IiCisJCQkgOiAiK1MiIChhZGRyKSwgIitjIiAo
Y291bnQpCisJCQkgOiAiZCIgKHBvcnQpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK291
dHN3KHVfaW50IHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKwlfX2Fz
bSBfX3ZvbGF0aWxlKCJjbGQ7IHJlcDsgb3V0c3ciCisJCQkgOiAiK1MiIChhZGRyKSwgIitjIiAo
Y291bnQpCisJCQkgOiAiZCIgKHBvcnQpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK291
dHNsKHVfaW50IHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKwlfX2Fz
bSBfX3ZvbGF0aWxlKCJjbGQ7IHJlcDsgb3V0c2wiCisJCQkgOiAiK1MiIChhZGRyKSwgIitjIiAo
Y291bnQpCisJCQkgOiAiZCIgKHBvcnQpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK291
dHcodV9pbnQgcG9ydCwgdV9zaG9ydCBkYXRhKQoreworCV9fYXNtIF9fdm9sYXRpbGUoIm91dHcg
JTAsICV3MSIgOiA6ICJhIiAoZGF0YSksICJOZCIgKHBvcnQpKTsKK30KKworc3RhdGljIF9faW5s
aW5lIHVfbG9uZworcG9wY250cSh1X2xvbmcgbWFzaykKK3sKKwl1X2xvbmcgcmVzdWx0OworCisJ
X19hc20gX192b2xhdGlsZSgicG9wY250cSAlMSwlMCIgOiAiPXIiIChyZXN1bHQpIDogInJtIiAo
bWFzaykpOworCXJldHVybiAocmVzdWx0KTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2xm
ZW5jZSh2b2lkKQoreworCisJX19hc20gX192b2xhdGlsZSgibGZlbmNlIiA6IDogOiAibWVtb3J5
Iik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCittZmVuY2Uodm9pZCkKK3sKKworCV9fYXNt
IF9fdm9sYXRpbGUoIm1mZW5jZSIgOiA6IDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgX19pbmxp
bmUgdm9pZAoraWEzMl9wYXVzZSh2b2lkKQoreworCV9fYXNtIF9fdm9sYXRpbGUoInBhdXNlIik7
Cit9CisKK3N0YXRpYyBfX2lubGluZSB1X2xvbmcKK3JlYWRfcmZsYWdzKHZvaWQpCit7CisJdV9s
b25nCXJmOworCisJX19hc20gX192b2xhdGlsZSgicHVzaGZxOyBwb3BxICUwIiA6ICI9ciIgKHJm
KSk7CisJcmV0dXJuIChyZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1aW50NjRfdAorcmRtc3Io
dV9pbnQgbXNyKQoreworCXVpbnQzMl90IGxvdywgaGlnaDsKKworCV9fYXNtIF9fdm9sYXRpbGUo
InJkbXNyIiA6ICI9YSIgKGxvdyksICI9ZCIgKGhpZ2gpIDogImMiIChtc3IpKTsKKwlyZXR1cm4g
KGxvdyB8ICgodWludDY0X3QpaGlnaCA8PCAzMikpOworfQorCitzdGF0aWMgX19pbmxpbmUgdWlu
dDMyX3QKK3JkbXNyMzIodV9pbnQgbXNyKQoreworCXVpbnQzMl90IGxvdzsKKworCV9fYXNtIF9f
dm9sYXRpbGUoInJkbXNyIiA6ICI9YSIgKGxvdykgOiAiYyIgKG1zcikgOiAicmR4Iik7CisJcmV0
dXJuIChsb3cpOworfQorCitzdGF0aWMgX19pbmxpbmUgdWludDY0X3QKK3JkcG1jKHVfaW50IHBt
YykKK3sKKwl1aW50MzJfdCBsb3csIGhpZ2g7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJyZHBtYyIg
OiAiPWEiIChsb3cpLCAiPWQiIChoaWdoKSA6ICJjIiAocG1jKSk7CisJcmV0dXJuIChsb3cgfCAo
KHVpbnQ2NF90KWhpZ2ggPDwgMzIpKTsKK30KKworc3RhdGljIF9faW5saW5lIHVpbnQ2NF90City
ZHRzYyh2b2lkKQoreworCXVpbnQzMl90IGxvdywgaGlnaDsKKworCV9fYXNtIF9fdm9sYXRpbGUo
InJkdHNjIiA6ICI9YSIgKGxvdyksICI9ZCIgKGhpZ2gpKTsKKwlyZXR1cm4gKGxvdyB8ICgodWlu
dDY0X3QpaGlnaCA8PCAzMikpOworfQorCitzdGF0aWMgX19pbmxpbmUgdWludDMyX3QKK3JkdHNj
MzIodm9pZCkKK3sKKwl1aW50MzJfdCBydjsKKworCV9fYXNtIF9fdm9sYXRpbGUoInJkdHNjIiA6
ICI9YSIgKHJ2KSA6IDogImVkeCIpOworCXJldHVybiAocnYpOworfQorCitzdGF0aWMgX19pbmxp
bmUgdm9pZAord2JpbnZkKHZvaWQpCit7CisJX19hc20gX192b2xhdGlsZSgid2JpbnZkIik7Cit9
CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCit3cml0ZV9yZmxhZ3ModV9sb25nIHJmKQoreworCV9f
YXNtIF9fdm9sYXRpbGUoInB1c2hxICUwOyAgcG9wZnEiIDogOiAiciIgKHJmKSk7Cit9CisKK3N0
YXRpYyBfX2lubGluZSB2b2lkCit3cm1zcih1X2ludCBtc3IsIHVpbnQ2NF90IG5ld3ZhbCkKK3sK
Kwl1aW50MzJfdCBsb3csIGhpZ2g7CisKKwlsb3cgPSBuZXd2YWw7CisJaGlnaCA9IG5ld3ZhbCA+
PiAzMjsKKwlfX2FzbSBfX3ZvbGF0aWxlKCJ3cm1zciIgOiA6ICJhIiAobG93KSwgImQiIChoaWdo
KSwgImMiIChtc3IpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2xvYWRfY3IwKHVfbG9u
ZyBkYXRhKQoreworCisJX19hc20gX192b2xhdGlsZSgibW92cSAlMCwlJWNyMCIgOiA6ICJyIiAo
ZGF0YSkpOworfQorCitzdGF0aWMgX19pbmxpbmUgdV9sb25nCityY3IwKHZvaWQpCit7CisJdV9s
b25nCWRhdGE7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3ZxICUlY3IwLCUwIiA6ICI9ciIgKGRh
dGEpKTsKKwlyZXR1cm4gKGRhdGEpOworfQorCitzdGF0aWMgX19pbmxpbmUgdV9sb25nCityY3Iy
KHZvaWQpCit7CisJdV9sb25nCWRhdGE7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3ZxICUlY3Iy
LCUwIiA6ICI9ciIgKGRhdGEpKTsKKwlyZXR1cm4gKGRhdGEpOworfQorCitzdGF0aWMgX19pbmxp
bmUgdm9pZAorbG9hZF9jcjModV9sb25nIGRhdGEpCit7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJt
b3ZxICUwLCUlY3IzIiA6IDogInIiIChkYXRhKSA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIF9f
aW5saW5lIHVfbG9uZworcmNyMyh2b2lkKQoreworCXVfbG9uZwlkYXRhOworCisJX19hc20gX192
b2xhdGlsZSgibW92cSAlJWNyMywlMCIgOiAiPXIiIChkYXRhKSk7CisJcmV0dXJuIChkYXRhKTsK
K30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2xvYWRfY3I0KHVfbG9uZyBkYXRhKQoreworCV9f
YXNtIF9fdm9sYXRpbGUoIm1vdnEgJTAsJSVjcjQiIDogOiAiciIgKGRhdGEpKTsKK30KKworc3Rh
dGljIF9faW5saW5lIHVfbG9uZworcmNyNCh2b2lkKQoreworCXVfbG9uZwlkYXRhOworCisJX19h
c20gX192b2xhdGlsZSgibW92cSAlJWNyNCwlMCIgOiAiPXIiIChkYXRhKSk7CisJcmV0dXJuIChk
YXRhKTsKK30KKworc3RhdGljIF9faW5saW5lIHVfbG9uZworcnhjcih1X2ludCByZWcpCit7CisJ
dV9pbnQgbG93LCBoaWdoOworCisJX19hc20gX192b2xhdGlsZSgieGdldGJ2IiA6ICI9YSIgKGxv
dyksICI9ZCIgKGhpZ2gpIDogImMiIChyZWcpKTsKKwlyZXR1cm4gKGxvdyB8ICgodWludDY0X3Qp
aGlnaCA8PCAzMikpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorbG9hZF94Y3IodV9pbnQg
cmVnLCB1X2xvbmcgdmFsKQoreworCXVfaW50IGxvdywgaGlnaDsKKworCWxvdyA9IHZhbDsKKwlo
aWdoID0gdmFsID4+IDMyOworCV9fYXNtIF9fdm9sYXRpbGUoInhzZXRidiIgOiA6ICJjIiAocmVn
KSwgImEiIChsb3cpLCAiZCIgKGhpZ2gpKTsKK30KKworLyoKKyAqIEdsb2JhbCBUTEIgZmx1c2gg
KGV4Y2VwdCBmb3IgdGhpc2UgZm9yIHBhZ2VzIG1hcmtlZCBQR19HKQorICovCitzdGF0aWMgX19p
bmxpbmUgdm9pZAoraW52bHRsYih2b2lkKQoreworCisJbG9hZF9jcjMocmNyMygpKTsKK30KKwor
I2lmbmRlZiBDUjRfUEdFCisjZGVmaW5lCUNSNF9QR0UJMHgwMDAwMDA4MAkvKiBQYWdlIGdsb2Jh
bCBlbmFibGUgKi8KKyNlbmRpZgorCisvKgorICogUGVyZm9ybSB0aGUgZ3VhcmFudGVlZCBpbnZh
bGlkYXRpb24gb2YgYWxsIFRMQiBlbnRyaWVzLiAgVGhpcworICogaW5jbHVkZXMgdGhlIGdsb2Jh
bCBlbnRyaWVzLCBhbmQgZW50cmllcyBpbiBhbGwgUENJRHMsIG5vdCBvbmx5IHRoZQorICogY3Vy
cmVudCBjb250ZXh0LiAgVGhlIGZ1bmN0aW9uIHdvcmtzIGJvdGggb24gbm9uLVBDSUQgQ1BVcyBh
bmQgQ1BVcworICogd2l0aCB0aGUgUENJRCB0dXJuZWQgb2ZmIG9yIG9uLiAgU2VlIElBLTMyIFNE
TSBWb2wuIDNhIDQuMTAuNC4xCisgKiBPcGVyYXRpb25zIHRoYXQgSW52YWxpZGF0ZSBUTEJzIGFu
ZCBQYWdpbmctU3RydWN0dXJlIENhY2hlcy4KKyAqLworc3RhdGljIF9faW5saW5lIHZvaWQKK2lu
dmx0bGJfZ2xvYih2b2lkKQoreworCXVpbnQ2NF90IGNyNDsKKworCWNyNCA9IHJjcjQoKTsKKwls
b2FkX2NyNChjcjQgJiB+Q1I0X1BHRSk7CisJLyoKKwkgKiBBbHRob3VnaCBwcmVlbXB0aW9uIGF0
IHRoaXMgcG9pbnQgY291bGQgYmUgZGV0cmltZW50YWwgdG8KKwkgKiBwZXJmb3JtYW5jZSwgaXQg
d291bGQgbm90IGxlYWQgdG8gYW4gZXJyb3IuICBQR19HIGlzIHNpbXBseQorCSAqIGlnbm9yZWQg
aWYgQ1I0LlBHRSBpcyBjbGVhci4gIE1vcmVvdmVyLCBpbiBjYXNlIHRoaXMgYmxvY2sKKwkgKiBp
cyByZS1lbnRlcmVkLCB0aGUgbG9hZF9jcjQoKSBlaXRoZXIgYWJvdmUgb3IgYmVsb3cgd2lsbAor
CSAqIG1vZGlmeSBDUjQuUEdFIGZsdXNoaW5nIHRoZSBUTEIuCisJICovCisJbG9hZF9jcjQoY3I0
IHwgQ1I0X1BHRSk7Cit9CisKKy8qCisgKiBUTEIgZmx1c2ggZm9yIGFuIGluZGl2aWR1YWwgcGFn
ZSAoZXZlbiBpZiBpdCBoYXMgUEdfRykuCisgKiBPbmx5IHdvcmtzIG9uIDQ4NisgQ1BVcyAoaTM4
NiBkb2VzIG5vdCBoYXZlIFBHX0cpLgorICovCitzdGF0aWMgX19pbmxpbmUgdm9pZAoraW52bHBn
KHVfbG9uZyBhZGRyKQoreworCisJX19hc20gX192b2xhdGlsZSgiaW52bHBnICUwIiA6IDogIm0i
ICgqKGNoYXIgKilhZGRyKSA6ICJtZW1vcnkiKTsKK30KKworI2RlZmluZQlJTlZQQ0lEX0FERFIJ
MAorI2RlZmluZQlJTlZQQ0lEX0NUWAkxCisjZGVmaW5lCUlOVlBDSURfQ1RYR0xPQgkyCisjZGVm
aW5lCUlOVlBDSURfQUxMQ1RYCTMKKworc3RydWN0IGludnBjaWRfZGVzY3IgeworCXVpbnQ2NF90
CXBjaWQ6MTIgX19wYWNrZWQ7CisJdWludDY0X3QJcGFkOjUyIF9fcGFja2VkOworCXVpbnQ2NF90
CWFkZHI7Cit9IF9fcGFja2VkOworCitzdGF0aWMgX19pbmxpbmUgdm9pZAoraW52cGNpZChzdHJ1
Y3QgaW52cGNpZF9kZXNjciAqZCwgaW50IHR5cGUpCit7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJp
bnZwY2lkICglMCksJTEiCisJICAgIDogOiAiciIgKGQpLCAiciIgKCh1X2xvbmcpdHlwZSkgOiAi
bWVtb3J5Iik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1X3Nob3J0CityZnModm9pZCkKK3sKKwl1
X3Nob3J0IHNlbDsKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3Z3ICUlZnMsJTAiIDogIj1ybSIgKHNl
bCkpOworCXJldHVybiAoc2VsKTsKK30KKworc3RhdGljIF9faW5saW5lIHVfc2hvcnQKK3Jncyh2
b2lkKQoreworCXVfc2hvcnQgc2VsOworCV9fYXNtIF9fdm9sYXRpbGUoIm1vdncgJSVncywlMCIg
OiAiPXJtIiAoc2VsKSk7CisJcmV0dXJuIChzZWwpOworfQorCitzdGF0aWMgX19pbmxpbmUgdV9z
aG9ydAorcnNzKHZvaWQpCit7CisJdV9zaG9ydCBzZWw7CisJX19hc20gX192b2xhdGlsZSgibW92
dyAlJXNzLCUwIiA6ICI9cm0iIChzZWwpKTsKKwlyZXR1cm4gKHNlbCk7Cit9CisKK3N0YXRpYyBf
X2lubGluZSB2b2lkCitsb2FkX2RzKHVfc2hvcnQgc2VsKQoreworCV9fYXNtIF9fdm9sYXRpbGUo
Im1vdncgJTAsJSVkcyIgOiA6ICJybSIgKHNlbCkpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9p
ZAorbG9hZF9lcyh1X3Nob3J0IHNlbCkKK3sKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3Z3ICUwLCUl
ZXMiIDogOiAicm0iIChzZWwpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2NwdV9tb25p
dG9yKGNvbnN0IHZvaWQgKmFkZHIsIHVfbG9uZyBleHRlbnNpb25zLCB1X2ludCBoaW50cykKK3sK
KworCV9fYXNtIF9fdm9sYXRpbGUoIm1vbml0b3IiCisJICAgIDogOiAiYSIgKGFkZHIpLCAiYyIg
KGV4dGVuc2lvbnMpLCAiZCIgKGhpbnRzKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitj
cHVfbXdhaXQodV9sb25nIGV4dGVuc2lvbnMsIHVfaW50IGhpbnRzKQoreworCisJX19hc20gX192
b2xhdGlsZSgibXdhaXQiIDogOiAiYSIgKGhpbnRzKSwgImMiIChleHRlbnNpb25zKSk7Cit9CisK
KyNpZmRlZiBfS0VSTkVMCisvKiBUaGlzIGlzIGRlZmluZWQgaW4gPG1hY2hpbmUvc3BlY2lhbHJl
Zy5oPiBidXQgaXMgdG9vIHBhaW5mdWwgdG8gZ2V0IHRvICovCisjaWZuZGVmCU1TUl9GU0JBU0UK
KyNkZWZpbmUJTVNSX0ZTQkFTRQkweGMwMDAwMTAwCisjZW5kaWYKK3N0YXRpYyBfX2lubGluZSB2
b2lkCitsb2FkX2ZzKHVfc2hvcnQgc2VsKQoreworCS8qIFByZXNlcnZlIHRoZSBmc2Jhc2UgdmFs
dWUgYWNyb3NzIHRoZSBzZWxlY3RvciBsb2FkICovCisJX19hc20gX192b2xhdGlsZSgicmRtc3I7
IG1vdncgJTAsJSVmczsgd3Jtc3IiCisJICAgIDogOiAicm0iIChzZWwpLCAiYyIgKE1TUl9GU0JB
U0UpIDogImVheCIsICJlZHgiKTsKK30KKworI2lmbmRlZglNU1JfR1NCQVNFCisjZGVmaW5lCU1T
Ul9HU0JBU0UJMHhjMDAwMDEwMQorI2VuZGlmCitzdGF0aWMgX19pbmxpbmUgdm9pZAorbG9hZF9n
cyh1X3Nob3J0IHNlbCkKK3sKKwkvKgorCSAqIFByZXNlcnZlIHRoZSBnc2Jhc2UgdmFsdWUgYWNy
b3NzIHRoZSBzZWxlY3RvciBsb2FkLgorCSAqIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIGRpc2FibGUg
aW50ZXJydXB0cyBiZWNhdXNlIHRoZSBnc2Jhc2UKKwkgKiBiZWluZyB0cmFzaGVkIGhhcHBlbnMg
dG8gYmUgdGhlIGtlcm5lbCBnc2Jhc2UgYXQgdGhlIHRpbWUuCisJICovCisJX19hc20gX192b2xh
dGlsZSgicHVzaGZxOyBjbGk7IHJkbXNyOyBtb3Z3ICUwLCUlZ3M7IHdybXNyOyBwb3BmcSIKKwkg
ICAgOiA6ICJybSIgKHNlbCksICJjIiAoTVNSX0dTQkFTRSkgOiAiZWF4IiwgImVkeCIpOworfQor
I2Vsc2UKKy8qIFVzYWJsZSBieSB1c2VybGFuZCAqLworc3RhdGljIF9faW5saW5lIHZvaWQKK2xv
YWRfZnModV9zaG9ydCBzZWwpCit7CisJX19hc20gX192b2xhdGlsZSgibW92dyAlMCwlJWZzIiA6
IDogInJtIiAoc2VsKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitsb2FkX2dzKHVfc2hv
cnQgc2VsKQoreworCV9fYXNtIF9fdm9sYXRpbGUoIm1vdncgJTAsJSVncyIgOiA6ICJybSIgKHNl
bCkpOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitsaWR0KHN0cnVjdCByZWdp
b25fZGVzY3JpcHRvciAqYWRkcikKK3sKKwlfX2FzbSBfX3ZvbGF0aWxlKCJsaWR0ICglMCkiIDog
OiAiciIgKGFkZHIpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2xsZHQodV9zaG9ydCBz
ZWwpCit7CisJX19hc20gX192b2xhdGlsZSgibGxkdCAlMCIgOiA6ICJyIiAoc2VsKSk7Cit9CisK
K3N0YXRpYyBfX2lubGluZSB2b2lkCitsdHIodV9zaG9ydCBzZWwpCit7CisJX19hc20gX192b2xh
dGlsZSgibHRyICUwIiA6IDogInIiIChzZWwpKTsKK30KKworc3RhdGljIF9faW5saW5lIHVpbnQ2
NF90CityZHIwKHZvaWQpCit7CisJdWludDY0X3QgZGF0YTsKKwlfX2FzbSBfX3ZvbGF0aWxlKCJt
b3ZxICUlZHIwLCUwIiA6ICI9ciIgKGRhdGEpKTsKKwlyZXR1cm4gKGRhdGEpOworfQorCitzdGF0
aWMgX19pbmxpbmUgdm9pZAorbG9hZF9kcjAodWludDY0X3QgZHIwKQoreworCV9fYXNtIF9fdm9s
YXRpbGUoIm1vdnEgJTAsJSVkcjAiIDogOiAiciIgKGRyMCkpOworfQorCitzdGF0aWMgX19pbmxp
bmUgdWludDY0X3QKK3JkcjEodm9pZCkKK3sKKwl1aW50NjRfdCBkYXRhOworCV9fYXNtIF9fdm9s
YXRpbGUoIm1vdnEgJSVkcjEsJTAiIDogIj1yIiAoZGF0YSkpOworCXJldHVybiAoZGF0YSk7Cit9
CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitsb2FkX2RyMSh1aW50NjRfdCBkcjEpCit7CisJX19h
c20gX192b2xhdGlsZSgibW92cSAlMCwlJWRyMSIgOiA6ICJyIiAoZHIxKSk7Cit9CisKK3N0YXRp
YyBfX2lubGluZSB1aW50NjRfdAorcmRyMih2b2lkKQoreworCXVpbnQ2NF90IGRhdGE7CisJX19h
c20gX192b2xhdGlsZSgibW92cSAlJWRyMiwlMCIgOiAiPXIiIChkYXRhKSk7CisJcmV0dXJuIChk
YXRhKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2xvYWRfZHIyKHVpbnQ2NF90IGRyMikK
K3sKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3ZxICUwLCUlZHIyIiA6IDogInIiIChkcjIpKTsKK30K
Kworc3RhdGljIF9faW5saW5lIHVpbnQ2NF90CityZHIzKHZvaWQpCit7CisJdWludDY0X3QgZGF0
YTsKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3ZxICUlZHIzLCUwIiA6ICI9ciIgKGRhdGEpKTsKKwly
ZXR1cm4gKGRhdGEpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorbG9hZF9kcjModWludDY0
X3QgZHIzKQoreworCV9fYXNtIF9fdm9sYXRpbGUoIm1vdnEgJTAsJSVkcjMiIDogOiAiciIgKGRy
MykpOworfQorCitzdGF0aWMgX19pbmxpbmUgdWludDY0X3QKK3JkcjQodm9pZCkKK3sKKwl1aW50
NjRfdCBkYXRhOworCV9fYXNtIF9fdm9sYXRpbGUoIm1vdnEgJSVkcjQsJTAiIDogIj1yIiAoZGF0
YSkpOworCXJldHVybiAoZGF0YSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitsb2FkX2Ry
NCh1aW50NjRfdCBkcjQpCit7CisJX19hc20gX192b2xhdGlsZSgibW92cSAlMCwlJWRyNCIgOiA6
ICJyIiAoZHI0KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1aW50NjRfdAorcmRyNSh2b2lkKQor
eworCXVpbnQ2NF90IGRhdGE7CisJX19hc20gX192b2xhdGlsZSgibW92cSAlJWRyNSwlMCIgOiAi
PXIiIChkYXRhKSk7CisJcmV0dXJuIChkYXRhKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQK
K2xvYWRfZHI1KHVpbnQ2NF90IGRyNSkKK3sKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3ZxICUwLCUl
ZHI1IiA6IDogInIiIChkcjUpKTsKK30KKworc3RhdGljIF9faW5saW5lIHVpbnQ2NF90CityZHI2
KHZvaWQpCit7CisJdWludDY0X3QgZGF0YTsKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3ZxICUlZHI2
LCUwIiA6ICI9ciIgKGRhdGEpKTsKKwlyZXR1cm4gKGRhdGEpOworfQorCitzdGF0aWMgX19pbmxp
bmUgdm9pZAorbG9hZF9kcjYodWludDY0X3QgZHI2KQoreworCV9fYXNtIF9fdm9sYXRpbGUoIm1v
dnEgJTAsJSVkcjYiIDogOiAiciIgKGRyNikpOworfQorCitzdGF0aWMgX19pbmxpbmUgdWludDY0
X3QKK3Jkcjcodm9pZCkKK3sKKwl1aW50NjRfdCBkYXRhOworCV9fYXNtIF9fdm9sYXRpbGUoIm1v
dnEgJSVkcjcsJTAiIDogIj1yIiAoZGF0YSkpOworCXJldHVybiAoZGF0YSk7Cit9CisKK3N0YXRp
YyBfX2lubGluZSB2b2lkCitsb2FkX2RyNyh1aW50NjRfdCBkcjcpCit7CisJX19hc20gX192b2xh
dGlsZSgibW92cSAlMCwlJWRyNyIgOiA6ICJyIiAoZHI3KSk7Cit9CisKK3N0YXRpYyBfX2lubGlu
ZSByZWdpc3Rlcl90CitpbnRyX2Rpc2FibGUodm9pZCkKK3sKKwlyZWdpc3Rlcl90IHJmbGFnczsK
KworCXJmbGFncyA9IHJlYWRfcmZsYWdzKCk7CisJZGlzYWJsZV9pbnRyKCk7CisJcmV0dXJuIChy
ZmxhZ3MpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAoraW50cl9yZXN0b3JlKHJlZ2lzdGVy
X3QgcmZsYWdzKQoreworCXdyaXRlX3JmbGFncyhyZmxhZ3MpOworfQorCisjZWxzZSAvKiAhKF9f
R05VQ0xJS0VfQVNNICYmIF9fQ0NfU1VQUE9SVFNfX19JTkxJTkUpICovCisKK2ludAlicmVha3Bv
aW50KHZvaWQpOwordV9pbnQJYnNmbCh1X2ludCBtYXNrKTsKK3VfaW50CWJzcmwodV9pbnQgbWFz
ayk7Cit2b2lkCWNsZmx1c2godV9sb25nIGFkZHIpOwordm9pZAljbHRzKHZvaWQpOwordm9pZAlj
cHVpZF9jb3VudCh1X2ludCBheCwgdV9pbnQgY3gsIHVfaW50ICpwKTsKK3ZvaWQJZGlzYWJsZV9p
bnRyKHZvaWQpOwordm9pZAlkb19jcHVpZCh1X2ludCBheCwgdV9pbnQgKnApOwordm9pZAllbmFi
bGVfaW50cih2b2lkKTsKK3ZvaWQJaGFsdCh2b2lkKTsKK3ZvaWQJaWEzMl9wYXVzZSh2b2lkKTsK
K3VfY2hhcglpbmIodV9pbnQgcG9ydCk7Cit1X2ludAlpbmwodV9pbnQgcG9ydCk7Cit2b2lkCWlu
c2IodV9pbnQgcG9ydCwgdm9pZCAqYWRkciwgc2l6ZV90IGNvdW50KTsKK3ZvaWQJaW5zbCh1X2lu
dCBwb3J0LCB2b2lkICphZGRyLCBzaXplX3QgY291bnQpOwordm9pZAlpbnN3KHVfaW50IHBvcnQs
IHZvaWQgKmFkZHIsIHNpemVfdCBjb3VudCk7CityZWdpc3Rlcl90CWludHJfZGlzYWJsZSh2b2lk
KTsKK3ZvaWQJaW50cl9yZXN0b3JlKHJlZ2lzdGVyX3QgcmYpOwordm9pZAlpbnZkKHZvaWQpOwor
dm9pZAlpbnZscGcodV9pbnQgYWRkcik7Cit2b2lkCWludmx0bGIodm9pZCk7Cit1X3Nob3J0CWlu
dyh1X2ludCBwb3J0KTsKK3ZvaWQJbGlkdChzdHJ1Y3QgcmVnaW9uX2Rlc2NyaXB0b3IgKmFkZHIp
Owordm9pZAlsbGR0KHVfc2hvcnQgc2VsKTsKK3ZvaWQJbG9hZF9jcjAodV9sb25nIGNyMCk7Cit2
b2lkCWxvYWRfY3IzKHVfbG9uZyBjcjMpOwordm9pZAlsb2FkX2NyNCh1X2xvbmcgY3I0KTsKK3Zv
aWQJbG9hZF9kcjAodWludDY0X3QgZHIwKTsKK3ZvaWQJbG9hZF9kcjEodWludDY0X3QgZHIxKTsK
K3ZvaWQJbG9hZF9kcjIodWludDY0X3QgZHIyKTsKK3ZvaWQJbG9hZF9kcjModWludDY0X3QgZHIz
KTsKK3ZvaWQJbG9hZF9kcjQodWludDY0X3QgZHI0KTsKK3ZvaWQJbG9hZF9kcjUodWludDY0X3Qg
ZHI1KTsKK3ZvaWQJbG9hZF9kcjYodWludDY0X3QgZHI2KTsKK3ZvaWQJbG9hZF9kcjcodWludDY0
X3QgZHI3KTsKK3ZvaWQJbG9hZF9mcyh1X3Nob3J0IHNlbCk7Cit2b2lkCWxvYWRfZ3ModV9zaG9y
dCBzZWwpOwordm9pZAlsdHIodV9zaG9ydCBzZWwpOwordm9pZAlvdXRiKHVfaW50IHBvcnQsIHVf
Y2hhciBkYXRhKTsKK3ZvaWQJb3V0bCh1X2ludCBwb3J0LCB1X2ludCBkYXRhKTsKK3ZvaWQJb3V0
c2IodV9pbnQgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGNvdW50KTsKK3ZvaWQJb3V0
c2wodV9pbnQgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGNvdW50KTsKK3ZvaWQJb3V0
c3codV9pbnQgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGNvdW50KTsKK3ZvaWQJb3V0
dyh1X2ludCBwb3J0LCB1X3Nob3J0IGRhdGEpOwordV9sb25nCXJjcjAodm9pZCk7Cit1X2xvbmcJ
cmNyMih2b2lkKTsKK3VfbG9uZwlyY3IzKHZvaWQpOwordV9sb25nCXJjcjQodm9pZCk7Cit1aW50
NjRfdCByZG1zcih1X2ludCBtc3IpOwordWludDMyX3QgcmRtc3IzMih1X2ludCBtc3IpOwordWlu
dDY0X3QgcmRwbWModV9pbnQgcG1jKTsKK3VpbnQ2NF90IHJkcjAodm9pZCk7Cit1aW50NjRfdCBy
ZHIxKHZvaWQpOwordWludDY0X3QgcmRyMih2b2lkKTsKK3VpbnQ2NF90IHJkcjModm9pZCk7Cit1
aW50NjRfdCByZHI0KHZvaWQpOwordWludDY0X3QgcmRyNSh2b2lkKTsKK3VpbnQ2NF90IHJkcjYo
dm9pZCk7Cit1aW50NjRfdCByZHI3KHZvaWQpOwordWludDY0X3QgcmR0c2Modm9pZCk7Cit1X2xv
bmcJcmVhZF9yZmxhZ3Modm9pZCk7Cit1X2ludAlyZnModm9pZCk7Cit1X2ludAlyZ3Modm9pZCk7
Cit2b2lkCXdiaW52ZCh2b2lkKTsKK3ZvaWQJd3JpdGVfcmZsYWdzKHVfaW50IHJmKTsKK3ZvaWQJ
d3Jtc3IodV9pbnQgbXNyLCB1aW50NjRfdCBuZXd2YWwpOworCisjZW5kaWYJLyogX19HTlVDTElL
RV9BU00gJiYgX19DQ19TVVBQT1JUU19fX0lOTElORSAqLworCit2b2lkCXJlc2V0X2RicmVncyh2
b2lkKTsKKworI2lmZGVmIF9LRVJORUwKK2ludAlyZG1zcl9zYWZlKHVfaW50IG1zciwgdWludDY0
X3QgKnZhbCk7CitpbnQJd3Jtc3Jfc2FmZSh1X2ludCBtc3IsIHVpbnQ2NF90IG5ld3ZhbCk7Cisj
ZW5kaWYKKworI2VuZGlmIC8qICFfTUFDSElORV9DUFVGVU5DX0hfICovCmRpZmYgLXUgLXIgLU4g
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9jcHV0eXBlcy5oIC91c3Ivc3JjL3N5
cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2NwdXR5cGVzLmgKLS0tIHVzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvY3B1dHlwZXMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAw
MCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvY3B1dHlwZXMu
aAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDQ4IEBACisv
Ki0KKyAqIENvcHlyaWdodCAoYykgMTk5MyBDaHJpc3RvcGhlciBHLiBEZW1ldHJpb3UKKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9y
IG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRl
cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9S
IGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQv
aW5jbHVkZS9jcHV0eXBlcy5oIDI5MjY2OCAyMDE1LTEyLTIzIDIxOjQxOjQyWiBqaGIgJAorICov
CisKKyNpZm5kZWYgX01BQ0hJTkVfQ1BVVFlQRVNfSF8KKyNkZWZpbmUJX01BQ0hJTkVfQ1BVVFlQ
RVNfSF8KKworI2luY2x1ZGUgPHg4Ni9jcHV0eXBlcy5oPgorCisvKgorICogQ2xhc3NlcyBvZiBw
cm9jZXNzb3IuCisgKi8KKyNkZWZpbmUJQ1BVQ0xBU1NfWDg2CQkwCS8qIFg4NiAqLworI2RlZmlu
ZQlDUFVDTEFTU19LOAkJMQkvKiBLOCBBTUQ2NCBjbGFzcyAqLworCisvKgorICogS2luZHMgb2Yg
cHJvY2Vzc29yLgorICovCisjZGVmaW5lCUNQVV9YODYJCQkwCS8qIEludGVsICovCisjZGVmaW5l
CUNQVV9DTEFXSEFNTUVSCQkxCS8qIEFNRCBDbGF3aGFtbWVyICovCisjZGVmaW5lCUNQVV9TTEVE
R0VIQU1NRVIJMgkvKiBBTUQgU2xlZGdlaGFtbWVyICovCisKKyNlbmRpZiAvKiAhX01BQ0hJTkVf
Q1BVVFlQRVNfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9t
YWNoaW5lL2RiX21hY2hkZXAuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9k
Yl9tYWNoZGVwLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvZGJfbWFj
aGRlcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9kYl9tYWNoZGVwLmgJMjAxNi0wOS0yOSAwMDoyNDo1
NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw5NCBAQAorLyotCisgKiBNYWNoIE9wZXJhdGlu
ZyBTeXN0ZW0KKyAqIENvcHlyaWdodCAoYykgMTk5MSwxOTkwIENhcm5lZ2llIE1lbGxvbiBVbml2
ZXJzaXR5CisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNl
LCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisgKiBk
b2N1bWVudGF0aW9uIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IGJvdGggdGhlIGNv
cHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBh
bGwgY29waWVzIG9mIHRoZQorICogc29mdHdhcmUsIGRlcml2YXRpdmUgd29ya3Mgb3IgbW9kaWZp
ZWQgdmVyc2lvbnMsIGFuZCBhbnkgcG9ydGlvbnMKKyAqIHRoZXJlb2YsIGFuZCB0aGF0IGJvdGgg
bm90aWNlcyBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorICoKKyAqIENBUk5F
R0lFIE1FTExPTiBBTExPV1MgRlJFRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBJTiBJVFMgIkFTIElT
IgorICogQ09ORElUSU9OLiAgQ0FSTkVHSUUgTUVMTE9OIERJU0NMQUlNUyBBTlkgTElBQklMSVRZ
IE9GIEFOWSBLSU5EIEZPUgorICogQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJP
TSBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUuCisgKgorICogQ2FybmVnaWUgTWVsbG9uIHJlcXVl
c3RzIHVzZXJzIG9mIHRoaXMgc29mdHdhcmUgdG8gcmV0dXJuIHRvCisgKgorICogIFNvZnR3YXJl
IERpc3RyaWJ1dGlvbiBDb29yZGluYXRvciAgb3IgIFNvZnR3YXJlLkRpc3RyaWJ1dGlvbkBDUy5D
TVUuRURVCisgKiAgU2Nob29sIG9mIENvbXB1dGVyIFNjaWVuY2UKKyAqICBDYXJuZWdpZSBNZWxs
b24gVW5pdmVyc2l0eQorICogIFBpdHRzYnVyZ2ggUEEgMTUyMTMtMzg5MAorICoKKyAqIGFueSBp
bXByb3ZlbWVudHMgb3IgZXh0ZW5zaW9ucyB0aGF0IHRoZXkgbWFrZSBhbmQgZ3JhbnQgQ2FybmVn
aWUgTWVsbG9uCisgKiB0aGUgcmlnaHRzIHRvIHJlZGlzdHJpYnV0ZSB0aGVzZSBjaGFuZ2VzLgor
ICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9kYl9tYWNoZGVw
LmggMTM5NzMxIDIwMDUtMDEtMDUgMjA6MTc6MjFaIGltcCAkCisgKi8KKworI2lmbmRlZiBfTUFD
SElORV9EQl9NQUNIREVQX0hfCisjZGVmaW5lCV9NQUNISU5FX0RCX01BQ0hERVBfSF8KKworI2lu
Y2x1ZGUgPG1hY2hpbmUvZnJhbWUuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3RyYXAuaD4KKwordHlw
ZWRlZgl2bV9vZmZzZXRfdAlkYl9hZGRyX3Q7CS8qIGFkZHJlc3MgLSB1bnNpZ25lZCAqLwordHlw
ZWRlZglsb25nCQlkYl9leHByX3Q7CS8qIGV4cHJlc3Npb24gLSBzaWduZWQgKi8KKworI2RlZmlu
ZQlQQ19SRUdTKCkJKChkYl9hZGRyX3Qpa2RiX3RocmN0eC0+cGNiX3JpcCkKKworI2RlZmluZQlC
S1BUX0lOU1QJMHhjYwkJLyogYnJlYWtwb2ludCBpbnN0cnVjdGlvbiAqLworI2RlZmluZQlCS1BU
X1NJWkUJKDEpCQkvKiBzaXplIG9mIGJyZWFrcG9pbnQgaW5zdCAqLworI2RlZmluZQlCS1BUX1NF
VChpbnN0KQkoQktQVF9JTlNUKQorCisjZGVmaW5lIEJLUFRfU0tJUAkJCQlcCitkbyB7CQkJCQkJ
XAorCWtkYl9mcmFtZS0+dGZfcmlwICs9IDE7CQkJXAorCWtkYl90aHJjdHgtPnBjYl9yaXAgKz0g
MTsJCVwKK30gd2hpbGUoMCkKKworI2RlZmluZQlGSVhVUF9QQ19BRlRFUl9CUkVBSwkJCVwKK2Rv
IHsJCQkJCQlcCisJa2RiX2ZyYW1lLT50Zl9yaXAgLT0gMTsJCQlcCisJa2RiX3RocmN0eC0+cGNi
X3JpcCAtPSAxOwkJXAorfSB3aGlsZSgwKTsKKworI2RlZmluZQlkYl9jbGVhcl9zaW5nbGVfc3Rl
cAlrZGJfY3B1X2NsZWFyX3NpbmdsZXN0ZXAKKyNkZWZpbmUJZGJfc2V0X3NpbmdsZV9zdGVwCWtk
Yl9jcHVfc2V0X3NpbmdsZXN0ZXAKKworI2RlZmluZQlJU19CUkVBS1BPSU5UX1RSQVAodHlwZSwg
Y29kZSkJKCh0eXBlKSA9PSBUX0JQVEZMVCkKKy8qCisgKiBXYXRjaHBvaW50cyBhcmUgbm90IHN1
cHBvcnRlZC4gIFRoZSBkZWJ1ZyBleGNlcHRpb24gdHlwZSBpcyBpbiAlZHI2CisgKiBhbmQgbm90
IHlldCBpbiB0aGUgYXJncyB0byB0aGlzIG1hY3JvLgorICovCisjZGVmaW5lIElTX1dBVENIUE9J
TlRfVFJBUCh0eXBlLCBjb2RlKQkwCisKKyNkZWZpbmUJSV9DQUxMCQkweGU4CisjZGVmaW5lCUlf
Q0FMTEkJCTB4ZmYKKyNkZWZpbmUJSV9SRVQJCTB4YzMKKyNkZWZpbmUJSV9JUkVUCQkweGNmCisK
KyNkZWZpbmUJaW5zdF90cmFwX3JldHVybihpbnMpCSgoKGlucykmMHhmZikgPT0gSV9JUkVUKQor
I2RlZmluZQlpbnN0X3JldHVybihpbnMpCSgoKGlucykmMHhmZikgPT0gSV9SRVQpCisjZGVmaW5l
CWluc3RfY2FsbChpbnMpCQkoKChpbnMpJjB4ZmYpID09IElfQ0FMTCB8fCBcCisJCQkJICgoKGlu
cykmMHhmZikgPT0gSV9DQUxMSSAmJiBcCisJCQkJICAoKGlucykmMHgzODAwKSA9PSAweDEwMDAp
KQorI2RlZmluZSBpbnN0X2xvYWQoaW5zKQkJMAorI2RlZmluZSBpbnN0X3N0b3JlKGlucykJCTAK
KworLyoKKyAqIFRoZXJlIG5vIGludGVyZXN0aW5nIGFkZHJlc3NlcyBiZWxvdyBfa3N0YWNrID0g
MHhlZmJmZTAwMC4gIFRoZXJlCisgKiBhcmUgc21hbGwgYWJzb2x1dGUgdmFsdWVzIGZvciBHVVBS
T0YsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHNlZSB0aGVtLgorICogVHJlYXQgIm5lZ2F0aXZlIiBh
ZGRyZXNzZXMgYmVsb3cgX2tzdGFjayBhcyBub24tc21hbGwgdG8gYWxsb3cgZm9yCisgKiBmdXR1
cmUgcmVkdWN0aW9ucyBvZiBfa3N0YWNrIGFuZCB0byBhdm9pZCBzaWduIGV4dGVuc2lvbiBwcm9i
bGVtcy4KKyAqCisgKiBUaGVyZSBpcyBvbmUgaW50ZXJlc3Rpbmcgc3ltYm9sIGFib3ZlIC1kYl9t
YXhvZmYgPSAweGZmZmYwMDAwLAorICogbmFtZWx5IF9BUFREID0gMHhmZmZmZjAwMC4gIEFjY2Vw
dGluZyB0aGlzIHdvdWxkIG1lc3MgdXAgdGhlCisgKiBwcmludGluZyBvZiBzbWFsbCBuZWdhdGl2
ZSBvZmZzZXRzLiAgVGhlIG5leHQgbGFyZ2VzdCBzeW1ib2wgaXMKKyAqIF9BUFRtYXAgPSAweGZm
YzAwMDAwLiAgQWNjZXB0aW5nIHRoaXMgaXMgT0sgKHVubGVzcyBkYl9tYXhvZmYgaXMKKyAqIHNl
dCB0byA+PSAweDQwMDAwMCAtIChtYXggc3RhY2sgb2Zmc2V0KSkuCisgKi8KKyNkZWZpbmUJREJf
U01BTExfVkFMVUVfTUFYCTB4N2ZmZmZmZmYKKyNkZWZpbmUJREJfU01BTExfVkFMVUVfTUlOCSgt
MHg0MDAwMDEpCisKKyNlbmRpZiAvKiAhX01BQ0hJTkVfREJfTUFDSERFUF9IXyAqLwpkaWZmIC11
IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvZHVtcC5oIC91c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2R1bXAuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxl
cy9uZXRtYXAvbWFjaGluZS9kdW1wLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx
MDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2R1bXAuaAkyMDE2LTA5
LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhp
cyBmaWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5n
LzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvZHVtcC5oIDI3Njc3MiAyMDE1LTAxLTA3IDAxOjAxOjM5
WiBtYXJraiAkICovCisKKyNpbmNsdWRlIDx4ODYvZHVtcC5oPgpkaWZmIC11IC1yIC1OIHVzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvZWxmLmggL3Vzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL21hY2hpbmUvZWxmLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hp
bmUvZWxmLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2VsZi5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAw
MDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyotCisgKiBUaGlzIGZpbGUgaXMgaW4gdGhl
IHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQv
aW5jbHVkZS9lbGYuaCAyNDcwNDcgMjAxMy0wMi0yMCAxNzozOTo1Mloga2liICQgKi8KKworI2lu
Y2x1ZGUgPHg4Ni9lbGYuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9tYWNoaW5lL2VuZGlhbi5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2Vu
ZGlhbi5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2VuZGlhbi5oCTE5
NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxl
cy9uZXRtYXAvbWFjaGluZS9lbmRpYW4uaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCAr
MDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJsaWMg
ZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUv
ZW5kaWFuLmggMjMyMjY2IDIwMTItMDItMjggMTk6Mzk6NTRaIHRpamwgJCAqLworCisjaW5jbHVk
ZSA8eDg2L2VuZGlhbi5oPgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw
L21hY2hpbmUvZXhlYy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2V4ZWMu
aAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9leGVjLmgJMTk3MC0wMS0w
MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9tYWNoaW5lL2V4ZWMuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAt
MCwwICsxLDM4IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MworICoJVGhlIFJl
Z2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5v
ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAg
ICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAq
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK
KyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylleGVjLmgJOC4x
IChCZXJrZWxleSkgNi8xMS85MworICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9p
bmNsdWRlL2V4ZWMuaCAxNDIxMDcgMjAwNS0wMi0xOSAyMToxNjo0OFogcnUgJAorICovCisKKyNp
Zm5kZWYJX01BQ0hJTkVfRVhFQ19IXworI2RlZmluZQlfTUFDSElORV9FWEVDX0hfCisKKyNkZWZp
bmUJX19MRFBHU1oJNDA5NgorCisjZW5kaWYgLyogIV9NQUNISU5FX0VYRUNfSF8gKi8KZGlmZiAt
dSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2ZkdC5oIC91c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2ZkdC5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC9tYWNoaW5lL2ZkdC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw
CisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9mZHQuaAkyMDE2LTA5LTI5
IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhpcyBm
aWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzEx
LjAvc3lzL2FtZDY0L2luY2x1ZGUvZmR0LmggMjUwODQwIDIwMTMtMDUtMjEgMDM6MDU6NDlaIG1h
cmNlbCAkICovCisKKyNpbmNsdWRlIDx4ODYvZmR0Lmg+CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9mbG9hdC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25l
dG1hcC9tYWNoaW5lL2Zsb2F0LmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hp
bmUvZmxvYXQuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvZmxvYXQuaAkyMDE2LTA5LTI5IDAwOjI0OjU0
LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhpcyBmaWxlIGlzIGlu
IHRoZSBwdWJsaWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2Ft
ZDY0L2luY2x1ZGUvZmxvYXQuaCAyMzI0OTEgMjAxMi0wMy0wNCAxNDowMDozMlogdGlqbCAkICov
CisKKyNpbmNsdWRlIDx4ODYvZmxvYXQuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1
bGVzL25ldG1hcC9tYWNoaW5lL2Zsb2F0aW5ncG9pbnQuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvbWFjaGluZS9mbG9hdGluZ3BvaW50LmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL21hY2hpbmUvZmxvYXRpbmdwb2ludC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw
ICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9mbG9hdGluZ3Bv
aW50LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw0MyBA
QAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMgQW5kcmV3IE1vb3JlLCBUYWxrZSBTdHVkaW8K
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg
bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAq
ICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMg
cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YK
KyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVp
dGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT
VUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpIGZsb2F0aW5ncG9pbnQuaAkxLjAgKEJlcmtl
bGV5KSA5LzIzLzkzCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUv
ZmxvYXRpbmdwb2ludC5oIDE0NDU0NCAyMDA1LTA0LTAyIDE3OjMxOjQyWiBuZXRjaGlsZCAkCisg
Ki8KKworI2lmbmRlZiBfRkxPQVRJTkdQT0lOVF9IXworI2RlZmluZSBfRkxPQVRJTkdQT0lOVF9I
XworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9pZWVlZnAuaD4K
KworI2VuZGlmIC8qICFfRkxPQVRJTkdQT0lOVF9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvZnB1LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL21hY2hpbmUvZnB1LmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUv
ZnB1LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5
cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2ZwdS5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAw
MDAwICswMTAwCkBAIC0wLDAgKzEsOTIgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRo
ZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29u
dHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6LgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
NC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0
cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICog
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAq
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
CisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpbnB4LmgJNS4zIChCZXJrZWxleSkg
MS8xOC85MQorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL2ZwdS5o
IDI3MTE5MiAyMDE0LTA5LTA2IDE1OjIzOjI4WiBqaGIgJAorICovCisKKy8qCisgKiBGbG9hdGlu
ZyBQb2ludCBEYXRhIFN0cnVjdHVyZXMgYW5kIENvbnN0YW50cworICogVy4gSm9saXR6IDEvOTAK
KyAqLworCisjaWZuZGVmIF9NQUNISU5FX0ZQVV9IXworI2RlZmluZQlfTUFDSElORV9GUFVfSF8K
KworI2luY2x1ZGUgPHg4Ni9mcHUuaD4KKworI2lmZGVmIF9LRVJORUwKKworc3RydWN0IGZwdV9r
ZXJuX2N0eDsKKworI2RlZmluZQlQQ0JfVVNFUl9GUFUocGNiKSAoKChwY2IpLT5wY2JfZmxhZ3Mg
JiBQQ0JfS0VSTkZQVSkgPT0gMCkKKworI2RlZmluZQlYU0FWRV9BUkVBX0FMSUdOCTY0CisKK3Zv
aWQJZnB1ZG5hKHZvaWQpOwordm9pZAlmcHVkcm9wKHZvaWQpOwordm9pZAlmcHVleGl0KHN0cnVj
dCB0aHJlYWQgKnRkKTsKK2ludAlmcHVmb3JtYXQodm9pZCk7CitpbnQJZnB1Z2V0cmVncyhzdHJ1
Y3QgdGhyZWFkICp0ZCk7Cit2b2lkCWZwdWluaXQodm9pZCk7Cit2b2lkCWZwdXJlc3RvcmUodm9p
ZCAqYWRkcik7Cit2b2lkCWZwdXJlc3VtZSh2b2lkICphZGRyKTsKK3ZvaWQJZnB1c2F2ZSh2b2lk
ICphZGRyKTsKK2ludAlmcHVzZXRyZWdzKHN0cnVjdCB0aHJlYWQgKnRkLCBzdHJ1Y3Qgc2F2ZWZw
dSAqYWRkciwKKwkgICAgY2hhciAqeGZwdXN0YXRlLCBzaXplX3QgeGZwdXN0YXRlX3NpemUpOwor
aW50CWZwdXNldHhzdGF0ZShzdHJ1Y3QgdGhyZWFkICp0ZCwgY2hhciAqeGZwdXN0YXRlLAorCSAg
ICBzaXplX3QgeGZwdXN0YXRlX3NpemUpOwordm9pZAlmcHVzdXNwZW5kKHZvaWQgKmFkZHIpOwor
aW50CWZwdXRyYXBfc3NlKHZvaWQpOworaW50CWZwdXRyYXBfeDg3KHZvaWQpOwordm9pZAlmcHV1
c2VyaW5pdGVkKHN0cnVjdCB0aHJlYWQgKnRkKTsKK3N0cnVjdCBmcHVfa2Vybl9jdHggKmZwdV9r
ZXJuX2FsbG9jX2N0eCh1X2ludCBmbGFncyk7Cit2b2lkCWZwdV9rZXJuX2ZyZWVfY3R4KHN0cnVj
dCBmcHVfa2Vybl9jdHggKmN0eCk7CitpbnQJZnB1X2tlcm5fZW50ZXIoc3RydWN0IHRocmVhZCAq
dGQsIHN0cnVjdCBmcHVfa2Vybl9jdHggKmN0eCwKKwkgICAgdV9pbnQgZmxhZ3MpOworaW50CWZw
dV9rZXJuX2xlYXZlKHN0cnVjdCB0aHJlYWQgKnRkLCBzdHJ1Y3QgZnB1X2tlcm5fY3R4ICpjdHgp
OworaW50CWZwdV9rZXJuX3RocmVhZCh1X2ludCBmbGFncyk7CitpbnQJaXNfZnB1X2tlcm5fdGhy
ZWFkKHVfaW50IGZsYWdzKTsKKworc3RydWN0IHNhdmVmcHUJKmZwdV9zYXZlX2FyZWFfYWxsb2Mo
dm9pZCk7Cit2b2lkCWZwdV9zYXZlX2FyZWFfZnJlZShzdHJ1Y3Qgc2F2ZWZwdSAqZnNhKTsKK3Zv
aWQJZnB1X3NhdmVfYXJlYV9yZXNldChzdHJ1Y3Qgc2F2ZWZwdSAqZnNhKTsKKworLyoKKyAqIEZs
YWdzIGZvciBmcHVfa2Vybl9hbGxvY19jdHgoKSwgZnB1X2tlcm5fZW50ZXIoKSBhbmQgZnB1X2tl
cm5fdGhyZWFkKCkuCisgKi8KKyNkZWZpbmUJRlBVX0tFUk5fTk9STUFMCTB4MDAwMAorI2RlZmlu
ZQlGUFVfS0VSTl9OT1dBSVQJMHgwMDAxCisjZGVmaW5lCUZQVV9LRVJOX0tUSFIJMHgwMDAyCisK
KyNlbmRpZgorCisjZW5kaWYgLyogIV9NQUNISU5FX0ZQVV9IXyAqLwpkaWZmIC11IC1yIC1OIHVz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvZnJhbWUuaCAvdXNyL3NyYy9zeXMvbW9k
dWxlcy9uZXRtYXAvbWFjaGluZS9mcmFtZS5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9tYWNoaW5lL2ZyYW1lLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysr
IC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2ZyYW1lLmgJMjAxNi0wOS0yOSAw
MDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmls
ZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4w
L3N5cy9hbWQ2NC9pbmNsdWRlL2ZyYW1lLmggMjQ3MDQ3IDIwMTMtMDItMjAgMTc6Mzk6NTJaIGtp
YiAkICovCisKKyNpbmNsdWRlIDx4ODYvZnJhbWUuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5
cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2dkYl9tYWNoZGVwLmggL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvZ2RiX21hY2hkZXAuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvbWFjaGluZS9nZGJfbWFjaGRlcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw
ICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9nZGJfbWFjaGRl
cC5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNTIgQEAK
Ky8qLQorICogQ29weXJpZ2h0IChjKSAyMDA0IE1hcmNlbCBNb29sZW5hYXIKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV
VEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5n
LzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvZ2RiX21hY2hkZXAuaCAxNjY1MjAgMjAwNy0wMi0wNSAy
MTo0ODozMlogamhiICQKKyAqLworCisjaWZuZGVmIF9NQUNISU5FX0dEQl9NQUNIREVQX0hfCisj
ZGVmaW5lCV9NQUNISU5FX0dEQl9NQUNIREVQX0hfCisKKyNkZWZpbmUJR0RCX0JVRlNaCShHREJf
TlJFR1MgKiAxNikKKyNkZWZpbmUJR0RCX05SRUdTCTU2CisjZGVmaW5lCUdEQl9SRUdfUEMJMTYK
Kworc3RhdGljIF9faW5saW5lIHNpemVfdAorZ2RiX2NwdV9yZWdzeihpbnQgcmVnbnVtKQorewor
CXJldHVybiAoKHJlZ251bSA+IDE2ICYmIHJlZ251bSA8IDI0KSA/IDQgOiA4KTsKK30KKworc3Rh
dGljIF9faW5saW5lIGludAorZ2RiX2NwdV9xdWVyeSh2b2lkKQoreworCXJldHVybiAoMCk7Cit9
CisKK3ZvaWQgKmdkYl9jcHVfZ2V0cmVnKGludCwgc2l6ZV90ICopOwordm9pZCBnZGJfY3B1X3Nl
dHJlZyhpbnQsIHZvaWQgKik7CitpbnQgZ2RiX2NwdV9zaWduYWwoaW50LCBpbnQpOworCisjZW5k
aWYgLyogIV9NQUNISU5FX0dEQl9NQUNIREVQX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9pZWVlZnAuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvbWFjaGluZS9pZWVlZnAuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj
aGluZS9pZWVlZnAuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvaWVlZWZwLmgJMjAxNi0wOS0yOSAwMDoy
NDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwzMDggQEAKKy8qLQorICogQ29weXJpZ2h0
IChjKSAyMDAzIFBldGVyIFdlbW0uCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgQW5kcmV3IE1vb3Jl
LCBUYWxrZSBTdHVkaW8KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBB
bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo
aXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdl
bWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl
IFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0
b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5h
bWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAJZnJvbTogQCgjKSBpZWVlZnAuaCAJ
MS4wIChCZXJrZWxleSkgOS8yMy85MworICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2
NC9pbmNsdWRlL2llZWVmcC5oIDIyNjYwNyAyMDExLTEwLTIxIDA2OjQxOjQ2WiBkYXMgJAorICov
CisKKyNpZm5kZWYgX01BQ0hJTkVfSUVFRUZQX0hfCisjZGVmaW5lIF9NQUNISU5FX0lFRUVGUF9I
XworCisvKgorICogRGVwcmVjYXRlZCBoaXN0b3JpY2FsIEZQVSBjb250cm9sIGludGVyZmFjZQor
ICoKKyAqIElFRUUgZmxvYXRpbmcgcG9pbnQgdHlwZSwgY29uc3RhbnQgYW5kIGZ1bmN0aW9uIGRl
ZmluaXRpb25zLgorICogWFhYOiB7RlAsU1NFfSpGTEQgYW5kIHtGUCxTU0V9Kk9GRiBhcmUgdW5k
b2N1bWVudGVkIHBvbGx1dGlvbi4KKyAqLworCisjaWZuZGVmIF9TWVNfQ0RFRlNfSF8KKyNlcnJv
ciB0aGlzIGZpbGUgbmVlZHMgc3lzL2NkZWZzLmggYXMgYSBwcmVyZXF1aXNpdGUKKyNlbmRpZgor
CisvKgorICogUm91bmRpbmcgbW9kZXMuCisgKi8KK3R5cGVkZWYgZW51bSB7CisJRlBfUk49MCwJ
Lyogcm91bmQgdG8gbmVhcmVzdCAqLworCUZQX1JNLAkJLyogcm91bmQgZG93biB0b3dhcmRzIG1p
bnVzIGluZmluaXR5ICovCisJRlBfUlAsCQkvKiByb3VuZCB1cCB0b3dhcmRzIHBsdXMgaW5maW5p
dHkgKi8KKwlGUF9SWgkJLyogdHJ1bmNhdGUgKi8KK30gZnBfcm5kX3Q7CisKKy8qCisgKiBQcmVj
aXNpb24gKGkuZS4sIHJvdW5kaW5nIHByZWNpc2lvbikgbW9kZXMuCisgKi8KK3R5cGVkZWYgZW51
bSB7CisJRlBfUFM9MCwJLyogMjQgYml0IChzaW5nbGUtcHJlY2lzaW9uKSAqLworCUZQX1BSUywJ
CS8qIHJlc2VydmVkICovCisJRlBfUEQsCQkvKiA1MyBiaXQgKGRvdWJsZS1wcmVjaXNpb24pICov
CisJRlBfUEUJCS8qIDY0IGJpdCAoZXh0ZW5kZWQtcHJlY2lzaW9uKSAqLworfSBmcF9wcmVjX3Q7
CisKKyNkZWZpbmUgZnBfZXhjZXB0X3QJaW50CisKKy8qCisgKiBFeGNlcHRpb24gYml0IG1hc2tz
LgorICovCisjZGVmaW5lIEZQX1hfSU5WCTB4MDEJLyogaW52YWxpZCBvcGVyYXRpb24gKi8KKyNk
ZWZpbmUgRlBfWF9ETk1MCTB4MDIJLyogZGVub3JtYWwgKi8KKyNkZWZpbmUgRlBfWF9EWgkJMHgw
NAkvKiB6ZXJvIGRpdmlkZSAqLworI2RlZmluZSBGUF9YX09GTAkweDA4CS8qIG92ZXJmbG93ICov
CisjZGVmaW5lIEZQX1hfVUZMCTB4MTAJLyogdW5kZXJmbG93ICovCisjZGVmaW5lIEZQX1hfSU1Q
CTB4MjAJLyogKGltKXByZWNpc2lvbiAqLworI2RlZmluZSBGUF9YX1NUSwkweDQwCS8qIHN0YWNr
IGZhdWx0ICovCisKKy8qCisgKiBGUFUgY29udHJvbCB3b3JkIGJpdC1maWVsZCBtYXNrcy4KKyAq
LworI2RlZmluZSBGUF9NU0tTX0ZMRAkweDNmCS8qIGV4Y2VwdGlvbiBtYXNrcyBmaWVsZCAqLwor
I2RlZmluZSBGUF9QUkNfRkxECTB4MzAwCS8qIHByZWNpc2lvbiBjb250cm9sIGZpZWxkICovCisj
ZGVmaW5lCUZQX1JORF9GTEQJMHhjMDAJLyogcm91bmRpbmcgY29udHJvbCBmaWVsZCAqLworCisv
KgorICogRlBVIHN0YXR1cyB3b3JkIGJpdC1maWVsZCBtYXNrcy4KKyAqLworI2RlZmluZSBGUF9T
VEtZX0ZMRAkweDNmCS8qIHN0aWNreSBmbGFncyBmaWVsZCAqLworCisvKgorICogU1NFIG14Y3Ny
IHJlZ2lzdGVyIGJpdC1maWVsZCBtYXNrcy4KKyAqLworI2RlZmluZQlTU0VfU1RLWV9GTEQJMHgz
ZgkvKiBleGNlcHRpb24gZmxhZ3MgKi8KKyNkZWZpbmUJU1NFX0RBWl9GTEQJMHg0MAkvKiBEZW5v
cm1hbHMgYXJlIHplcm8gKi8KKyNkZWZpbmUJU1NFX01TS1NfRkxECTB4MWY4MAkvKiBleGNlcHRp
b24gbWFza3MgZmllbGQgKi8KKyNkZWZpbmUJU1NFX1JORF9GTEQJMHg2MDAwCS8qIHJvdW5kaW5n
IGNvbnRyb2wgKi8KKyNkZWZpbmUJU1NFX0ZaX0ZMRAkweDgwMDAJLyogZmx1c2ggdG8gemVybyBv
biB1bmRlcmZsb3cgKi8KKworLyoKKyAqIEZQVSBjb250cm9sIHdvcmQgYml0LWZpZWxkIG9mZnNl
dHMgKHNoaWZ0IGNvdW50cykuCisgKi8KKyNkZWZpbmUgRlBfTVNLU19PRkYJMAkvKiBleGNlcHRp
b24gbWFza3Mgb2Zmc2V0ICovCisjZGVmaW5lIEZQX1BSQ19PRkYJOAkvKiBwcmVjaXNpb24gY29u
dHJvbCBvZmZzZXQgKi8KKyNkZWZpbmUJRlBfUk5EX09GRgkxMAkvKiByb3VuZGluZyBjb250cm9s
IG9mZnNldCAqLworCisvKgorICogRlBVIHN0YXR1cyB3b3JkIGJpdC1maWVsZCBvZmZzZXRzIChz
aGlmdCBjb3VudHMpLgorICovCisjZGVmaW5lIEZQX1NUS1lfT0ZGCTAJLyogc3RpY2t5IGZsYWdz
IG9mZnNldCAqLworCisvKgorICogU1NFIG14Y3NyIHJlZ2lzdGVyIGJpdC1maWVsZCBvZmZzZXRz
IChzaGlmdCBjb3VudHMpLgorICovCisjZGVmaW5lCVNTRV9TVEtZX09GRgkwCS8qIGV4Y2VwdGlv
biBmbGFncyBvZmZzZXQgKi8KKyNkZWZpbmUJU1NFX0RBWl9PRkYJNgkvKiBEQVogZXhjZXB0aW9u
IG1hc2sgb2Zmc2V0ICovCisjZGVmaW5lCVNTRV9NU0tTX09GRgk3CS8qIG90aGVyIGV4Y2VwdGlv
biBtYXNrcyBvZmZzZXQgKi8KKyNkZWZpbmUJU1NFX1JORF9PRkYJMTMJLyogcm91bmRpbmcgY29u
dHJvbCBvZmZzZXQgKi8KKyNkZWZpbmUJU1NFX0ZaX09GRgkxNQkvKiBmbHVzaCB0byB6ZXJvIG9m
ZnNldCAqLworCisjaWZkZWYgX19HTlVDTElLRV9BU00KKworI2RlZmluZQlfX2ZsZGN3KGFkZHIp
CV9fYXNtIF9fdm9sYXRpbGUoImZsZGN3ICUwIiA6IDogIm0iICgqKGFkZHIpKSkKKyNkZWZpbmUJ
X19mbGRlbnYoYWRkcikJX19hc20gX192b2xhdGlsZSgiZmxkZW52ICUwIiA6IDogIm0iICgqKGFk
ZHIpKSkKKyNkZWZpbmUJX19mbnN0Y3coYWRkcikJX19hc20gX192b2xhdGlsZSgiZm5zdGN3ICUw
IiA6ICI9bSIgKCooYWRkcikpKQorI2RlZmluZQlfX2Zuc3RlbnYoYWRkcikJX19hc20gX192b2xh
dGlsZSgiZm5zdGVudiAlMCIgOiAiPW0iICgqKGFkZHIpKSkKKyNkZWZpbmUJX19mbnN0c3coYWRk
cikJX19hc20gX192b2xhdGlsZSgiZm5zdHN3ICUwIiA6ICI9bSIgKCooYWRkcikpKQorI2RlZmlu
ZQlfX2xkbXhjc3IoYWRkcikJX19hc20gX192b2xhdGlsZSgibGRteGNzciAlMCIgOiA6ICJtIiAo
KihhZGRyKSkpCisjZGVmaW5lCV9fc3RteGNzcihhZGRyKQlfX2FzbSBfX3ZvbGF0aWxlKCJzdG14
Y3NyICUwIiA6ICI9bSIgKCooYWRkcikpKQorCisvKgorICogTG9hZCB0aGUgY29udHJvbCB3b3Jk
LiAgQmUgY2FyZWZ1bCBub3QgdG8gdHJhcCBpZiB0aGVyZSBpcyBhIGN1cnJlbnRseQorICogdW5t
YXNrZWQgZXhjZXB0aW9uIChvbmVzIHRoYXQgd2lsbCBiZWNvbWUgZnJlc2hseSB1bm1hc2tlZCBh
cmUgbm90IGEKKyAqIHByb2JsZW0pLiAgVGhpcyBjYXNlIG11c3QgYmUgaGFuZGxlZCBieSBhIHNh
dmUvcmVzdG9yZSBvZiB0aGUKKyAqIGVudmlyb25tZW50IG9yIGV2ZW4gb2YgdGhlIGZ1bGwgeDg3
IHN0YXRlLiAgQWNjZXNzaW5nIHRoZSBlbnZpcm9ubWVudAorICogaXMgdmVyeSBpbmVmZmljaWVu
dCwgc28gb25seSBkbyBpdCB3aGVuIG5lY2Vzc2FyeS4KKyAqLworc3RhdGljIF9faW5saW5lIHZv
aWQKK19fZm5sZGN3KHVuc2lnbmVkIHNob3J0IF9jdywgdW5zaWduZWQgc2hvcnQgX25ld2N3KQor
eworCXN0cnVjdCB7CisJCXVuc2lnbmVkIF9jdzsKKwkJdW5zaWduZWQgX290aGVyWzZdOworCX0g
X2VudjsKKwl1bnNpZ25lZCBzaG9ydCBfc3c7CisKKwlpZiAoKF9jdyAmIEZQX01TS1NfRkxEKSAh
PSBGUF9NU0tTX0ZMRCkgeworCQlfX2Zuc3RzdygmX3N3KTsKKwkJaWYgKCgoX3N3ICYgfl9jdykg
JiBGUF9TVEtZX0ZMRCkgIT0gMCkgeworCQkJX19mbnN0ZW52KCZfZW52KTsKKwkJCV9lbnYuX2N3
ID0gX25ld2N3OworCQkJX19mbGRlbnYoJl9lbnYpOworCQkJcmV0dXJuOworCQl9CisJfQorCV9f
ZmxkY3coJl9uZXdjdyk7Cit9CisKKy8qCisgKiBHZW5lcmFsIG5vdGVzIGFib3V0IGNvbmZsaWN0
aW5nIFNTRSB2cyBGUCBzdGF0dXMgYml0cy4KKyAqIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQgc29m
dHdhcmUgd2lsbCBub3QgZmlkZGxlIHdpdGggdGhlIGNvbnRyb2wKKyAqIGJpdHMgb2YgdGhlIFNT
RSBhbmQgeDg3IGluIHN1Y2ggYSB3YXkgdG8gZ2V0IHRoZW0gb3V0IG9mIHN5bmMgYW5kCisgKiBz
dGlsbCBleHBlY3QgdGhpcyB0byB3b3JrLiAgQnJlYWsgdGhpcyBhdCB5b3VyIHBlcmlsLgorICog
QmVjYXVzZSBJIGJhc2VkIHRoaXMgb24gdGhlIGkzODYgcG9ydCwgdGhlIHg4NyBzdGF0ZSBpcyB1
c2VkIGZvcgorICogdGhlIGZwZ2V0KigpIGZ1bmN0aW9ucywgYW5kIGlzIHNoYWRvd2VkIGludG8g
dGhlIFNTRSBzdGF0ZSBmb3IKKyAqIHRoZSBmcHNldCooKSBmdW5jdGlvbnMuICBGb3IgZHVhbCBz
b3VyY2UgZnBnZXQqKCkgZnVuY3Rpb25zLCBJCisgKiBtZXJnZSB0aGUgdHdvIHRvZ2V0aGVyLiAg
SSB0aGluay4KKyAqLworCitzdGF0aWMgX19pbmxpbmUgZnBfcm5kX3QKK19fZnBnZXRyb3VuZCh2
b2lkKQoreworCXVuc2lnbmVkIHNob3J0IF9jdzsKKworCV9fZm5zdGN3KCZfY3cpOworCXJldHVy
biAoKGZwX3JuZF90KSgoX2N3ICYgRlBfUk5EX0ZMRCkgPj4gRlBfUk5EX09GRikpOworfQorCitz
dGF0aWMgX19pbmxpbmUgZnBfcm5kX3QKK19fZnBzZXRyb3VuZChmcF9ybmRfdCBfbSkKK3sKKwlm
cF9ybmRfdCBfcDsKKwl1bnNpZ25lZCBfbXhjc3I7CisJdW5zaWduZWQgc2hvcnQgX2N3LCBfbmV3
Y3c7CisKKwlfX2Zuc3RjdygmX2N3KTsKKwlfcCA9IChmcF9ybmRfdCkoKF9jdyAmIEZQX1JORF9G
TEQpID4+IEZQX1JORF9PRkYpOworCV9uZXdjdyA9IF9jdyAmIH5GUF9STkRfRkxEOworCV9uZXdj
dyB8PSAoX20gPDwgRlBfUk5EX09GRikgJiBGUF9STkRfRkxEOworCV9fZm5sZGN3KF9jdywgX25l
d2N3KTsKKwlfX3N0bXhjc3IoJl9teGNzcik7CisJX214Y3NyICY9IH5TU0VfUk5EX0ZMRDsKKwlf
bXhjc3IgfD0gKF9tIDw8IFNTRV9STkRfT0ZGKSAmIFNTRV9STkRfRkxEOworCV9fbGRteGNzcigm
X214Y3NyKTsKKwlyZXR1cm4gKF9wKTsKK30KKworLyoKKyAqIEdldCBvciBzZXQgdGhlIHJvdW5k
aW5nIHByZWNpc2lvbiBmb3IgeDg3IGFyaXRobWV0aWMgb3BlcmF0aW9ucy4KKyAqIFRoZXJlIGlz
IG5vIGVxdWl2YWxlbnQgU1NFIG1vZGUgb3IgY29udHJvbC4KKyAqLworCitzdGF0aWMgX19pbmxp
bmUgZnBfcHJlY190CitfX2ZwZ2V0cHJlYyh2b2lkKQoreworCXVuc2lnbmVkIHNob3J0IF9jdzsK
KworCV9fZm5zdGN3KCZfY3cpOworCXJldHVybiAoKGZwX3ByZWNfdCkoKF9jdyAmIEZQX1BSQ19G
TEQpID4+IEZQX1BSQ19PRkYpKTsKK30KKworc3RhdGljIF9faW5saW5lIGZwX3ByZWNfdAorX19m
cHNldHByZWMoZnBfcHJlY190IF9tKQoreworCWZwX3ByZWNfdCBfcDsKKwl1bnNpZ25lZCBzaG9y
dCBfY3csIF9uZXdjdzsKKworCV9fZm5zdGN3KCZfY3cpOworCV9wID0gKGZwX3ByZWNfdCkoKF9j
dyAmIEZQX1BSQ19GTEQpID4+IEZQX1BSQ19PRkYpOworCV9uZXdjdyA9IF9jdyAmIH5GUF9QUkNf
RkxEOworCV9uZXdjdyB8PSAoX20gPDwgRlBfUFJDX09GRikgJiBGUF9QUkNfRkxEOworCV9fZm5s
ZGN3KF9jdywgX25ld2N3KTsKKwlyZXR1cm4gKF9wKTsKK30KKworLyoKKyAqIEdldCBvciBzZXQg
dGhlIGV4Y2VwdGlvbiBtYXNrLgorICogTm90ZSB0aGF0IHRoZSB4ODcgbWFzayBiaXRzIGFyZSBp
bnZlcnRlZCBieSB0aGUgQVBJIC0tIGEgbWFzayBiaXQgb2YgMQorICogbWVhbnMgZGlzYWJsZSBm
b3IgeDg3IGFuZCBTU0UsIGJ1dCBmb3IgZnAqbWFzaygpIGl0IG1lYW5zIGVuYWJsZS4KKyAqLwor
CitzdGF0aWMgX19pbmxpbmUgZnBfZXhjZXB0X3QKK19fZnBnZXRtYXNrKHZvaWQpCit7CisJdW5z
aWduZWQgc2hvcnQgX2N3OworCisJX19mbnN0Y3coJl9jdyk7CisJcmV0dXJuICgofl9jdyAmIEZQ
X01TS1NfRkxEKSA+PiBGUF9NU0tTX09GRik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBmcF9leGNl
cHRfdAorX19mcHNldG1hc2soZnBfZXhjZXB0X3QgX20pCit7CisJZnBfZXhjZXB0X3QgX3A7CisJ
dW5zaWduZWQgX214Y3NyOworCXVuc2lnbmVkIHNob3J0IF9jdywgX25ld2N3OworCisJX19mbnN0
Y3coJl9jdyk7CisJX3AgPSAofl9jdyAmIEZQX01TS1NfRkxEKSA+PiBGUF9NU0tTX09GRjsKKwlf
bmV3Y3cgPSBfY3cgJiB+RlBfTVNLU19GTEQ7CisJX25ld2N3IHw9ICh+X20gPDwgRlBfTVNLU19P
RkYpICYgRlBfTVNLU19GTEQ7CisJX19mbmxkY3coX2N3LCBfbmV3Y3cpOworCV9fc3RteGNzcigm
X214Y3NyKTsKKwkvKiBYWFggc2hvdWxkIHdlIGNsZWFyIG5vbi1pZWVlIFNTRV9EQVpfRkxEIGFu
ZCBTU0VfRlpfRkxEID8gKi8KKwlfbXhjc3IgJj0gflNTRV9NU0tTX0ZMRDsKKwlfbXhjc3IgfD0g
KH5fbSA8PCBTU0VfTVNLU19PRkYpICYgU1NFX01TS1NfRkxEOworCV9fbGRteGNzcigmX214Y3Ny
KTsKKwlyZXR1cm4gKF9wKTsKK30KKworc3RhdGljIF9faW5saW5lIGZwX2V4Y2VwdF90CitfX2Zw
Z2V0c3RpY2t5KHZvaWQpCit7CisJdW5zaWduZWQgX2V4LCBfbXhjc3I7CisJdW5zaWduZWQgc2hv
cnQgX3N3OworCisJX19mbnN0c3coJl9zdyk7CisJX2V4ID0gKF9zdyAmIEZQX1NUS1lfRkxEKSA+
PiBGUF9TVEtZX09GRjsKKwlfX3N0bXhjc3IoJl9teGNzcik7CisJX2V4IHw9IChfbXhjc3IgJiBT
U0VfU1RLWV9GTEQpID4+IFNTRV9TVEtZX09GRjsKKwlyZXR1cm4gKChmcF9leGNlcHRfdClfZXgp
OworfQorCisjZW5kaWYgLyogX19HTlVDTElLRV9BU00gKi8KKworI2lmICFkZWZpbmVkKF9fSUVF
RUZQX05PSU5MSU5FU19fKSAmJiBkZWZpbmVkKF9fR05VQ0xJS0VfQVNNKQorCisjZGVmaW5lCWZw
Z2V0bWFzaygpCV9fZnBnZXRtYXNrKCkKKyNkZWZpbmUJZnBnZXRwcmVjKCkJX19mcGdldHByZWMo
KQorI2RlZmluZQlmcGdldHJvdW5kKCkJX19mcGdldHJvdW5kKCkKKyNkZWZpbmUJZnBnZXRzdGlj
a3koKQlfX2ZwZ2V0c3RpY2t5KCkKKyNkZWZpbmUJZnBzZXRtYXNrKG0pCV9fZnBzZXRtYXNrKG0p
CisjZGVmaW5lCWZwc2V0cHJlYyhtKQlfX2Zwc2V0cHJlYyhtKQorI2RlZmluZQlmcHNldHJvdW5k
KG0pCV9fZnBzZXRyb3VuZChtKQorCisjZWxzZSAvKiAhKCFfX0lFRUVGUF9OT0lOTElORVNfXyAm
JiBfX0dOVUNMSUtFX0FTTSkgKi8KKworLyogQXVnbWVudCB0aGUgdXNlcmxhbmQgZGVjbGFyYXRp
b25zLiAqLworX19CRUdJTl9ERUNMUworZXh0ZXJuIGZwX3JuZF90ICAgIGZwZ2V0cm91bmQodm9p
ZCk7CitleHRlcm4gZnBfcm5kX3QgICAgZnBzZXRyb3VuZChmcF9ybmRfdCk7CitleHRlcm4gZnBf
ZXhjZXB0X3QgZnBnZXRtYXNrKHZvaWQpOworZXh0ZXJuIGZwX2V4Y2VwdF90IGZwc2V0bWFzayhm
cF9leGNlcHRfdCk7CitleHRlcm4gZnBfZXhjZXB0X3QgZnBnZXRzdGlja3kodm9pZCk7CitleHRl
cm4gZnBfZXhjZXB0X3QgZnBzZXRzdGlja3koZnBfZXhjZXB0X3QpOworZnBfcHJlY190CWZwZ2V0
cHJlYyh2b2lkKTsKK2ZwX3ByZWNfdAlmcHNldHByZWMoZnBfcHJlY190KTsKK19fRU5EX0RFQ0xT
CisKKyNlbmRpZiAvKiAhX19JRUVFRlBfTk9JTkxJTkVTX18gJiYgX19HTlVDTElLRV9BU00gKi8K
KworI2VuZGlmIC8qICFfTUFDSElORV9JRUVFRlBfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2luX2Nrc3VtLmggL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvaW5fY2tzdW0uaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAvbWFjaGluZS9pbl9ja3N1bS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw
CisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9pbl9ja3N1bS5oCTIwMTYt
MDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsODQgQEAKKy8qLQorICog
Q29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm
b3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0
aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
cnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
UkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERB
TUFHRS4KKyAqCisgKglmcm9tIHRhaG9lOglpbl9ja3N1bS5jCTEuMgk4Ni8wMS8wNQorICoJZnJv
bToJCUAoIylpbl9ja3N1bS5jCTEuMyAoQmVya2VsZXkpIDEvMTkvOTEKKyAqCWZyb206IElkOiBp
bl9ja3N1bS5jLHYgMS44IDE5OTUvMTIvMDMgMTg6MzU6MTkgYmRlIEV4cAorICogJEZyZWVCU0Q6
IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL2luX2Nrc3VtLmggMjg2MzM2IDIwMTUtMDgt
MDUgMTk6MDU6MTJaIGVtYXN0ZSAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9JTl9DS1NVTV9I
XworI2RlZmluZQlfTUFDSElORV9JTl9DS1NVTV9IXwkxCisKKyNpZm5kZWYgX1NZU19DREVGU19I
XworI2Vycm9yIHRoaXMgZmlsZSBuZWVkcyBzeXMvY2RlZnMuaCBhcyBhIHByZXJlcXVpc2l0ZQor
I2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2RlZmluZSBpbl9ja3N1bShtLCBs
ZW4pCWluX2Nrc3VtX3NraXAobSwgbGVuLCAwKQorCisjaWYgZGVmaW5lZChJUFZFUlNJT04pICYm
IChJUFZFUlNJT04gPT0gNCkKKy8qCisgKiBJdCBpdCB1c2VmdWwgdG8gaGF2ZSBhbiBJbnRlcm5l
dCBjaGVja3N1bSByb3V0aW5lIHdoaWNoIGlzIGlubGluZWFibGUKKyAqIGFuZCBvcHRpbWl6ZWQg
c3BlY2lmaWNhbGx5IGZvciB0aGUgdGFzayBvZiBjb21wdXRpbmcgSVAgaGVhZGVyIGNoZWNrc3Vt
cworICogaW4gdGhlIG5vcm1hbCBjYXNlICh3aGVyZSB0aGVyZSBhcmUgbm8gb3B0aW9ucyBhbmQg
dGhlIGhlYWRlciBsZW5ndGggaXMKKyAqIHRoZXJlZm9yZSBhbHdheXMgZXhhY3RseSBmaXZlIDMy
LWJpdCB3b3Jkcy4KKyAqLworI2lmZGVmIF9fQ0NfU1VQUE9SVFNfX19JTkxJTkUKKworc3RhdGlj
IF9faW5saW5lIHZvaWQKK2luX2Nrc3VtX3VwZGF0ZShzdHJ1Y3QgaXAgKmlwKQoreworCWludCBf
X3RtcHN1bTsKKwlfX3RtcHN1bSA9IChpbnQpbnRvaHMoaXAtPmlwX3N1bSkgKyAyNTY7CisJaXAt
PmlwX3N1bSA9IGh0b25zKF9fdG1wc3VtICsgKF9fdG1wc3VtID4+IDE2KSk7Cit9CisKKyNlbHNl
CisKKyNkZWZpbmUJaW5fY2tzdW1fdXBkYXRlKGlwKSBcCisJZG8geyBcCisJCWludCBfX3RtcHN1
bTsgXAorCQlfX3RtcHN1bSA9IChpbnQpbnRvaHMoaXAtPmlwX3N1bSkgKyAyNTY7IFwKKwkJaXAt
PmlwX3N1bSA9IGh0b25zKF9fdG1wc3VtICsgKF9fdG1wc3VtID4+IDE2KSk7IFwKKwl9IHdoaWxl
KDApCisKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfS0VSTkVMCisjaWYgZGVmaW5lZChJUFZF
UlNJT04pICYmIChJUFZFUlNJT04gPT0gNCkKK3VfaW50IGluX2Nrc3VtX2hkcihjb25zdCBzdHJ1
Y3QgaXAgKmlwKTsKKyNlbmRpZgordV9zaG9ydAlpbl9hZGR3b3JkKHVfc2hvcnQgc3VtLCB1X3No
b3J0IGIpOwordV9zaG9ydAlpbl9wc2V1ZG8odV9pbnQgc3VtLCB1X2ludCBiLCB1X2ludCBjKTsK
K3Vfc2hvcnQJaW5fY2tzdW1fc2tpcChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGxlbiwgaW50IHNraXAp
OworI2VuZGlmCisKKyNlbmRpZiAvKiBfTUFDSElORV9JTl9DS1NVTV9IXyAqLwpkaWZmIC11IC1y
IC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvaW50cl9tYWNoZGVwLmggL3Vz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvaW50cl9tYWNoZGVwLmgKLS0tIHVzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvaW50cl9tYWNoZGVwLmgJMTk3MC0wMS0wMSAw
MTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9t
YWNoaW5lL2ludHJfbWFjaGRlcC5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAw
CkBAIC0wLDAgKzEsMTk0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMyBKb2huIEJhbGR3
aW4gPGpoYkBGcmVlQlNELm9yZz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVC
U0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL2ludHJfbWFjaGRlcC5oIDMwMjg5NSAy
MDE2LTA3LTE1IDA5OjQ0OjQ4WiByb3lnZXIgJAorICovCisKKyNpZm5kZWYgX19NQUNISU5FX0lO
VFJfTUFDSERFUF9IX18KKyNkZWZpbmUJX19NQUNISU5FX0lOVFJfTUFDSERFUF9IX18KKworI2lm
ZGVmIF9LRVJORUwKKworLyoKKyAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBJL08gaW50ZXJydXB0
cyB3ZSBhbGxvdy4gIFRoaXMgbnVtYmVyIGlzIHJhdGhlcgorICogYXJiaXRyYXJ5IGFzIGl0IGlz
IGp1c3QgdGhlIG1heGltdW0gSVJRIHJlc291cmNlIHZhbHVlLiAgVGhlIGludGVycnVwdAorICog
c291cmNlIGZvciBhIGdpdmVuIElSUSBtYXBzIHRoYXQgSS9PIGludGVycnVwdCB0byBkZXZpY2Ug
aW50ZXJydXB0CisgKiBzb3VyY2Ugd2hldGhlciBpdCBiZSBhIHBpbiBvbiBhbiBpbnRlcnJ1cHQg
Y29udHJvbGxlciBvciBhbiBNU0kgaW50ZXJydXB0LgorICogVGhlIDE2IElTQSBJUlFzIGFyZSBh
c3NpZ25lZCBmaXhlZCBJRFQgdmVjdG9ycywgYnV0IGFsbCBvdGhlciBkZXZpY2UKKyAqIGludGVy
cnVwdHMgYWxsb2NhdGUgSURUIHZlY3RvcnMgb24gZGVtYW5kLiAgQ3VycmVudGx5IHdlIGhhdmUg
MTkxIElEVAorICogdmVjdG9ycyBhdmFpbGFibGUgZm9yIGRldmljZSBpbnRlcnJ1cHRzLiAgT24g
bWFueSBzeXN0ZW1zIHdpdGggSS9PIEFQSUNzLAorICogYSBsb3Qgb2YgdGhlIElSUXMgYXJlIG5v
dCB1c2VkLCBzbyB0aGlzIG51bWJlciBjYW4gYmUgbXVjaCBsYXJnZXIgdGhhbgorICogMTkxIGFu
ZCBzdGlsbCBiZSBzYWZlIHNpbmNlIG9ubHkgaW50ZXJydXB0IHNvdXJjZXMgaW4gYWN0dWFsIHVz
ZSB3aWxsCisgKiBhbGxvY2F0ZSBJRFQgdmVjdG9ycy4KKyAqCisgKiBUaGUgZmlyc3QgMjU1IElS
UXMgKDAgLSAyNTQpIGFyZSByZXNlcnZlZCBmb3IgSVNBIElSUXMgYW5kIFBDSSBpbnRsaW5lIElS
UXMuCisgKiBJUlEgdmFsdWVzIGZyb20gMjU2IHRvIDc2NyBhcmUgdXNlZCBieSBNU0kuICBXaGVu
IHJ1bm5pbmcgdW5kZXIgdGhlIFhlbgorICogSHlwZXJ2aXNvciwgSVJRIHZhbHVlcyBmcm9tIDc2
OCB0byA0ODYzIGFyZSBhdmFpbGFibGUgZm9yIGJpbmRpbmcgdG8KKyAqIGV2ZW50IGNoYW5uZWwg
ZXZlbnRzLiAgV2UgbGVhdmUgMjU1IHVudXNlZCB0byBhdm9pZCBjb25mdXNpb24gc2luY2UgMjU1
IGlzCisgKiB1c2VkIGluIFBDSSB0byBpbmRpY2F0ZSBhbiBpbnZhbGlkIElSUS4KKyAqLworI2Rl
ZmluZQlOVU1fTVNJX0lOVFMJNTEyCisjZGVmaW5lCUZJUlNUX01TSV9JTlQJMjU2CisjaWZkZWYg
WEVOSFZNCisjaW5jbHVkZSA8eGVuL3hlbi1vcy5oPgorI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2Uv
ZXZlbnRfY2hhbm5lbC5oPgorI2RlZmluZQlOVU1fRVZUQ0hOX0lOVFMJTlJfRVZFTlRfQ0hBTk5F
TFMKKyNkZWZpbmUJRklSU1RfRVZUQ0hOX0lOVCBcCisgICAgKEZJUlNUX01TSV9JTlQgKyBOVU1f
TVNJX0lOVFMpCisjZGVmaW5lCUxBU1RfRVZUQ0hOX0lOVCBcCisgICAgKEZJUlNUX0VWVENITl9J
TlQgKyBOVU1fRVZUQ0hOX0lOVFMgLSAxKQorI2Vsc2UKKyNkZWZpbmUJTlVNX0VWVENITl9JTlRT
CTAKKyNlbmRpZgorI2RlZmluZQlOVU1fSU9fSU5UUwkoRklSU1RfTVNJX0lOVCArIE5VTV9NU0lf
SU5UUyArIE5VTV9FVlRDSE5fSU5UUykKKworLyoKKyAqIERlZmF1bHQgYmFzZSBhZGRyZXNzIGZv
ciBNU0kgbWVzc2FnZXMgb24geDg2IHBsYXRmb3Jtcy4KKyAqLworI2RlZmluZQlNU0lfSU5URUxf
QUREUl9CQVNFCQkweGZlZTAwMDAwCisKKy8qCisgKiAtIDEgPz8/IGR1bW15IGNvdW50ZXIuCisg
KiAtIDIgY291bnRlcnMgZm9yIGVhY2ggSS9PIGludGVycnVwdC4KKyAqIC0gMSBjb3VudGVyIGZv
ciBlYWNoIENQVSBmb3IgbGFwaWMgdGltZXIuCisgKiAtIDggY291bnRlcnMgZm9yIGVhY2ggQ1BV
IGZvciBJUEkgY291bnRlcnMgZm9yIFNNUC4KKyAqLworI2lmZGVmIFNNUAorI2RlZmluZQlJTlRS
Q05UX0NPVU5UCSgxICsgTlVNX0lPX0lOVFMgKiAyICsgKDEgKyA4KSAqIE1BWENQVSkKKyNlbHNl
CisjZGVmaW5lCUlOVFJDTlRfQ09VTlQJKDEgKyBOVU1fSU9fSU5UUyAqIDIgKyAxKQorI2VuZGlm
CisKKyNpZm5kZWYgTE9DT1JFCisKK3R5cGVkZWYgdm9pZCBpbnRoYW5kX3Qodm9pZCk7CisKKyNk
ZWZpbmUJSURUVkVDKG5hbWUpCV9fQ09OQ0FUKFgsbmFtZSkKKworc3RydWN0IGludHNyYzsKKwor
LyoKKyAqIE1ldGhvZHMgdGhhdCBhIFBJQyBwcm92aWRlcyB0byBtYXNrL3VubWFzayBhIGdpdmVu
IGludGVycnVwdCBzb3VyY2UsCisgKiAidHVybiBvbiIgdGhlIGludGVycnVwdCBvbiB0aGUgQ1BV
IHNpZGUgYnkgc2V0dGluZyB1cCBhbiBJRFQgZW50cnksIGFuZAorICogcmV0dXJuIHRoZSB2ZWN0
b3IgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc291cmNlLgorICovCitzdHJ1Y3QgcGljIHsKKwl2b2lk
ICgqcGljX2VuYWJsZV9zb3VyY2UpKHN0cnVjdCBpbnRzcmMgKik7CisJdm9pZCAoKnBpY19kaXNh
YmxlX3NvdXJjZSkoc3RydWN0IGludHNyYyAqLCBpbnQpOworCXZvaWQgKCpwaWNfZW9pX3NvdXJj
ZSkoc3RydWN0IGludHNyYyAqKTsKKwl2b2lkICgqcGljX2VuYWJsZV9pbnRyKShzdHJ1Y3QgaW50
c3JjICopOworCXZvaWQgKCpwaWNfZGlzYWJsZV9pbnRyKShzdHJ1Y3QgaW50c3JjICopOworCWlu
dCAoKnBpY192ZWN0b3IpKHN0cnVjdCBpbnRzcmMgKik7CisJaW50ICgqcGljX3NvdXJjZV9wZW5k
aW5nKShzdHJ1Y3QgaW50c3JjICopOworCXZvaWQgKCpwaWNfc3VzcGVuZCkoc3RydWN0IHBpYyAq
KTsKKwl2b2lkICgqcGljX3Jlc3VtZSkoc3RydWN0IHBpYyAqLCBib29sIHN1c3BlbmRfY2FuY2Vs
bGVkKTsKKwlpbnQgKCpwaWNfY29uZmlnX2ludHIpKHN0cnVjdCBpbnRzcmMgKiwgZW51bSBpbnRy
X3RyaWdnZXIsCisJICAgIGVudW0gaW50cl9wb2xhcml0eSk7CisJaW50ICgqcGljX2Fzc2lnbl9j
cHUpKHN0cnVjdCBpbnRzcmMgKiwgdV9pbnQgYXBpY19pZCk7CisJdm9pZCAoKnBpY19yZXByb2dy
YW1fcGluKShzdHJ1Y3QgaW50c3JjICopOworCVRBSUxRX0VOVFJZKHBpYykgcGljczsKK307CisK
Ky8qIEZsYWdzIGZvciBwaWNfZGlzYWJsZV9zb3VyY2UoKSAqLworZW51bSB7CisJUElDX0VPSSwK
KwlQSUNfTk9fRU9JLAorfTsKKworLyoKKyAqIEFuIGludGVycnVwdCBzb3VyY2UuICBUaGUgdXBw
ZXItbGF5ZXIgY29kZSB1c2VzIHRoZSBQSUMgbWV0aG9kcyB0bworICogY29udHJvbCBhIGdpdmVu
IHNvdXJjZS4gIFRoZSBsb3dlci1sYXllciBQSUMgZHJpdmVycyBjYW4gc3RvcmUgYWRkaXRpb25h
bAorICogcHJpdmF0ZSBkYXRhIGluIGEgZ2l2ZW4gaW50ZXJydXB0IHNvdXJjZSBzdWNoIGFzIGFu
IGludGVycnVwdCBwaW4gbnVtYmVyCisgKiBvciBhbiBJL08gQVBJQyBwb2ludGVyLgorICovCitz
dHJ1Y3QgaW50c3JjIHsKKwlzdHJ1Y3QgcGljICppc19waWM7CisJc3RydWN0IGludHJfZXZlbnQg
KmlzX2V2ZW50OworCXVfbG9uZyAqaXNfY291bnQ7CisJdV9sb25nICppc19zdHJheWNvdW50Owor
CXVfaW50IGlzX2luZGV4OworCXVfaW50IGlzX2hhbmRsZXJzOworfTsKKworc3RydWN0IHRyYXBm
cmFtZTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZGF0YSBzdHJ1Y3R1cmUgaG9sZHMgcGVyLWNw
dSBkYXRhLCBhbmQgaXMgcGxhY2VkIGp1c3QKKyAqIGFib3ZlIHRoZSB0b3Agb2YgdGhlIHNwYWNl
IHVzZWQgZm9yIHRoZSBOTUkgc3RhY2suCisgKi8KK3N0cnVjdCBubWlfcGNwdSB7CisJcmVnaXN0
ZXJfdAlucF9wY3B1OworCXJlZ2lzdGVyX3QJX19wYWRkaW5nOwkvKiBwYWQgdG8gMTYgYnl0ZXMg
Ki8KK307CisKKyNpZmRlZiBTTVAKK2V4dGVybiBjcHVzZXRfdCBpbnRyX2NwdXM7CisjZW5kaWYK
K2V4dGVybiBzdHJ1Y3QgbXR4IGljdV9sb2NrOworZXh0ZXJuIGludCBlbGNyX2ZvdW5kOworCitl
eHRlcm4gaW50IG1zaXhfZGlzYWJsZV9taWdyYXRpb247CisKKyNpZm5kZWYgREVWX0FUUElDCit2
b2lkCWF0cGljX3Jlc2V0KHZvaWQpOworI2VuZGlmCisvKiBYWFg6IFRoZSBlbGNyXyogcHJvdG90
eXBlcyBwcm9iYWJseSBiZWxvbmcgc29tZXdoZXJlIGVsc2UuICovCitpbnQJZWxjcl9wcm9iZSh2
b2lkKTsKK2VudW0gaW50cl90cmlnZ2VyIGVsY3JfcmVhZF90cmlnZ2VyKHVfaW50IGlycSk7Cit2
b2lkCWVsY3JfcmVzdW1lKHZvaWQpOwordm9pZAllbGNyX3dyaXRlX3RyaWdnZXIodV9pbnQgaXJx
LCBlbnVtIGludHJfdHJpZ2dlciB0cmlnZ2VyKTsKKyNpZmRlZiBTTVAKK3ZvaWQJaW50cl9hZGRf
Y3B1KHVfaW50IGNwdSk7CisjZW5kaWYKK2ludAlpbnRyX2FkZF9oYW5kbGVyKGNvbnN0IGNoYXIg
Km5hbWUsIGludCB2ZWN0b3IsIGRyaXZlcl9maWx0ZXJfdCBmaWx0ZXIsIAorCQkJIGRyaXZlcl9p
bnRyX3QgaGFuZGxlciwgdm9pZCAqYXJnLCBlbnVtIGludHJfdHlwZSBmbGFncywgCisJCQkgdm9p
ZCAqKmNvb2tpZXApOyAgICAKKyNpZmRlZiBTTVAKK2ludAlpbnRyX2JpbmQodV9pbnQgdmVjdG9y
LCB1X2NoYXIgY3B1KTsKKyNlbmRpZgoraW50CWludHJfY29uZmlnX2ludHIoaW50IHZlY3Rvciwg
ZW51bSBpbnRyX3RyaWdnZXIgdHJpZywKKyAgICBlbnVtIGludHJfcG9sYXJpdHkgcG9sKTsKK2lu
dAlpbnRyX2Rlc2NyaWJlKHVfaW50IHZlY3Rvciwgdm9pZCAqaWgsIGNvbnN0IGNoYXIgKmRlc2Ny
KTsKK3ZvaWQJaW50cl9leGVjdXRlX2hhbmRsZXJzKHN0cnVjdCBpbnRzcmMgKmlzcmMsIHN0cnVj
dCB0cmFwZnJhbWUgKmZyYW1lKTsKK3VfaW50CWludHJfbmV4dF9jcHUodm9pZCk7CitzdHJ1Y3Qg
aW50c3JjICppbnRyX2xvb2t1cF9zb3VyY2UoaW50IHZlY3Rvcik7CitpbnQJaW50cl9yZWdpc3Rl
cl9waWMoc3RydWN0IHBpYyAqcGljKTsKK2ludAlpbnRyX3JlZ2lzdGVyX3NvdXJjZShzdHJ1Y3Qg
aW50c3JjICppc3JjKTsKK2ludAlpbnRyX3JlbW92ZV9oYW5kbGVyKHZvaWQgKmNvb2tpZSk7Cit2
b2lkCWludHJfcmVzdW1lKGJvb2wgc3VzcGVuZF9jYW5jZWxsZWQpOwordm9pZAlpbnRyX3N1c3Bl
bmQodm9pZCk7Cit2b2lkCWludHJfcmVwcm9ncmFtKHZvaWQpOwordm9pZAlpbnRyY250X2FkZChj
b25zdCBjaGFyICpuYW1lLCB1X2xvbmcgKipjb3VudHApOwordm9pZAluZXh1c19hZGRfaXJxKHVf
bG9uZyBpcnEpOworaW50CW1zaV9hbGxvYyhkZXZpY2VfdCBkZXYsIGludCBjb3VudCwgaW50IG1h
eGNvdW50LCBpbnQgKmlycXMpOwordm9pZAltc2lfaW5pdCh2b2lkKTsKK2ludAltc2lfbWFwKGlu
dCBpcnEsIHVpbnQ2NF90ICphZGRyLCB1aW50MzJfdCAqZGF0YSk7CitpbnQJbXNpX3JlbGVhc2Uo
aW50ICppcnFzLCBpbnQgY291bnQpOworaW50CW1zaXhfYWxsb2MoZGV2aWNlX3QgZGV2LCBpbnQg
KmlycSk7CitpbnQJbXNpeF9yZWxlYXNlKGludCBpcnEpOworCisjZW5kaWYJLyogIUxPQ09SRSAq
LworI2VuZGlmCS8qIF9LRVJORUwgKi8KKyNlbmRpZgkvKiAhX19NQUNISU5FX0lOVFJfTUFDSERF
UF9IX18gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5l
L2lvZGV2LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvaW9kZXYuaAotLS0g
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9pb2Rldi5oCTE5NzAtMDEtMDEgMDE6
MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj
aGluZS9pb2Rldi5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAg
KzEsNDYgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA0IE1hcmsgUiBWIE11cnJheQorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoaXMgcG9zaXRpb24g
YW5kIHVuY2hhbmdlZC4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP
UlMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICog
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2
NC9pbmNsdWRlL2lvZGV2LmggMjA3MzI5IDIwMTAtMDQtMjggMTU6Mzg6MDFaIGF0dGlsaW8gJAor
ICovCisjaWZuZGVmIF9NQUNISU5FX0lPREVWX0hfCisjZGVmaW5lCV9NQUNISU5FX0lPREVWX0hf
CisKKyNpZmRlZiBfS0VSTkVMCisjaW5jbHVkZSA8bWFjaGluZS9jcHVmdW5jLmg+CisKKyNkZWZp
bmUJaW9kZXZfcmVhZF8xCWluYgorI2RlZmluZQlpb2Rldl9yZWFkXzIJaW53CisjZGVmaW5lCWlv
ZGV2X3JlYWRfNAlpbmwKKyNkZWZpbmUJaW9kZXZfd3JpdGVfMQlvdXRiCisjZGVmaW5lCWlvZGV2
X3dyaXRlXzIJb3V0dworI2RlZmluZQlpb2Rldl93cml0ZV80CW91dGwKKworaW50CSBpb2Rldl9v
cGVuKHN0cnVjdCB0aHJlYWQgKnRkKTsKK2ludAkgaW9kZXZfY2xvc2Uoc3RydWN0IHRocmVhZCAq
dGQpOworaW50CSBpb2Rldl9pb2N0bCh1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEpOworCisjZW5k
aWYgLyogX0tFUk5FTCAqLworI2VuZGlmIC8qIF9NQUNISU5FX0lPREVWX0hfICovCmRpZmYgLXUg
LXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9rZGIuaCAvdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9rZGIuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvbWFjaGluZS9rZGIuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAor
KysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUva2RiLmgJMjAxNi0wOS0yOSAw
MDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw1OSBAQAorLyotCisgKiBDb3B5cmln
aHQgKGMpIDIwMDQgTWFyY2VsIE1vb2xlbmFhcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9S
IGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQv
aW5jbHVkZS9rZGIuaCAxNzA0NzMgMjAwNy0wNi0wOSAyMTo1NToxN1ogbWFyY2VsICQKKyAqLwor
CisjaWZuZGVmIF9NQUNISU5FX0tEQl9IXworI2RlZmluZSBfTUFDSElORV9LREJfSF8KKworI2lu
Y2x1ZGUgPG1hY2hpbmUvZnJhbWUuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3BzbC5oPgorCisjZGVm
aW5lCUtEQl9TVE9QUEVEUENCKHBjKQkmc3RvcHBjYnNbcGMtPnBjX2NwdWlkXQorCitzdGF0aWMg
X19pbmxpbmUgdm9pZAora2RiX2NwdV9jbGVhcl9zaW5nbGVzdGVwKHZvaWQpCit7CisJa2RiX2Zy
YW1lLT50Zl9yZmxhZ3MgJj0gflBTTF9UOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAora2Ri
X2NwdV9zZXRfc2luZ2xlc3RlcCh2b2lkKQoreworCWtkYl9mcmFtZS0+dGZfcmZsYWdzIHw9IFBT
TF9UOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAora2RiX2NwdV9zeW5jX2ljYWNoZSh1bnNp
Z25lZCBjaGFyICphZGRyLCBzaXplX3Qgc2l6ZSkKK3sKK30KKworc3RhdGljIF9faW5saW5lIHZv
aWQKK2tkYl9jcHVfdHJhcChpbnQgdHlwZSwgaW50IGNvZGUpCit7Cit9CisKKyNlbmRpZiAvKiBf
TUFDSElORV9LREJfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9tYWNoaW5lL2xpbWl0cy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2xp
bWl0cy5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2xpbWl0cy5oCTE5
NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxl
cy9uZXRtYXAvbWFjaGluZS9saW1pdHMuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCAr
MDEwMApAQCAtMCwwICsxLDQ0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk4OCwgMTk5Mwor
ICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2
ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3
YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIyls
aW1pdHMuaAk4LjMgKEJlcmtlbGV5KSAxLzQvOTQKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9z
eXMvYW1kNjQvaW5jbHVkZS9saW1pdHMuaCAxNDMwNjMgMjAwNS0wMy0wMiAyMTozMzoyOVogam9l
cmcgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfTElNSVRTX0hfCisjZGVmaW5lCV9NQUNISU5F
X0xJTUlUU19IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNpZmRlZiBfX0NDX1NVUFBP
UlRTX1dBUk5JTkcKKyN3YXJuaW5nICJtYWNoaW5lL2xpbWl0cy5oIGlzIGRlcHJlY2F0ZWQuICBJ
bmNsdWRlIHN5cy9saW1pdHMuaCBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL2xp
bWl0cy5oPgorCisjZW5kaWYgLyogIV9NQUNISU5FX0xJTUlUU19IXyAqLwpkaWZmIC11IC1yIC1O
IHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvbWRfdmFyLmggL3Vzci9zcmMvc3lz
L21vZHVsZXMvbmV0bWFwL21hY2hpbmUvbWRfdmFyLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL21hY2hpbmUvbWRfdmFyLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx
MDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL21kX3Zhci5oCTIwMTYt
MDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNjMgQEAKKy8qLQorICog
Q29weXJpZ2h0IChjKSAxOTk1IEJydWNlIEQuIEV2YW5zLgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGF1dGhvciBub3IgdGhl
IG5hbWVzIG9mIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
CisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lz
L2FtZDY0L2luY2x1ZGUvbWRfdmFyLmggMjk3Mzk5IDIwMTYtMDMtMjkgMTk6NTY6NDhaIGtpYiAk
CisgKi8KKworI2lmbmRlZiBfTUFDSElORV9NRF9WQVJfSF8KKyNkZWZpbmUJX01BQ0hJTkVfTURf
VkFSX0hfCisKKyNpbmNsdWRlIDx4ODYveDg2X3Zhci5oPgorCitleHRlcm4gIHVpbnQ2NF90ICp2
bV9wYWdlX2R1bXA7CisKK3N0cnVjdAlzYXZlZnB1OworCit2b2lkCWFtZDY0X2RiX3Jlc3VtZV9k
YnJlZyh2b2lkKTsKK3ZvaWQJYW1kNjRfc3lzY2FsbChzdHJ1Y3QgdGhyZWFkICp0ZCwgaW50IHRy
YWNlZCk7Cit2b2lkCWRvcmV0aV9pcmV0KHZvaWQpIF9fYXNtKF9fU1RSSU5HKGRvcmV0aV9pcmV0
KSk7Cit2b2lkCWRvcmV0aV9pcmV0X2ZhdWx0KHZvaWQpIF9fYXNtKF9fU1RSSU5HKGRvcmV0aV9p
cmV0X2ZhdWx0KSk7Cit2b2lkCWxkX2RzKHZvaWQpIF9fYXNtKF9fU1RSSU5HKGxkX2RzKSk7Cit2
b2lkCWxkX2VzKHZvaWQpIF9fYXNtKF9fU1RSSU5HKGxkX2VzKSk7Cit2b2lkCWxkX2ZzKHZvaWQp
IF9fYXNtKF9fU1RSSU5HKGxkX2ZzKSk7Cit2b2lkCWxkX2dzKHZvaWQpIF9fYXNtKF9fU1RSSU5H
KGxkX2dzKSk7Cit2b2lkCWxkX2ZzYmFzZSh2b2lkKSBfX2FzbShfX1NUUklORyhsZF9mc2Jhc2Up
KTsKK3ZvaWQJbGRfZ3NiYXNlKHZvaWQpIF9fYXNtKF9fU1RSSU5HKGxkX2dzYmFzZSkpOwordm9p
ZAlkc19sb2FkX2ZhdWx0KHZvaWQpIF9fYXNtKF9fU1RSSU5HKGRzX2xvYWRfZmF1bHQpKTsKK3Zv
aWQJZXNfbG9hZF9mYXVsdCh2b2lkKSBfX2FzbShfX1NUUklORyhlc19sb2FkX2ZhdWx0KSk7Cit2
b2lkCWZzX2xvYWRfZmF1bHQodm9pZCkgX19hc20oX19TVFJJTkcoZnNfbG9hZF9mYXVsdCkpOwor
dm9pZAlnc19sb2FkX2ZhdWx0KHZvaWQpIF9fYXNtKF9fU1RSSU5HKGdzX2xvYWRfZmF1bHQpKTsK
K3ZvaWQJZnNiYXNlX2xvYWRfZmF1bHQodm9pZCkgX19hc20oX19TVFJJTkcoZnNiYXNlX2xvYWRf
ZmF1bHQpKTsKK3ZvaWQJZ3NiYXNlX2xvYWRfZmF1bHQodm9pZCkgX19hc20oX19TVFJJTkcoZ3Ni
YXNlX2xvYWRfZmF1bHQpKTsKK3ZvaWQJZnBzdGF0ZV9kcm9wKHN0cnVjdCB0aHJlYWQgKnRkKTsK
K3ZvaWQJcGFnZXplcm8odm9pZCAqYWRkcik7Cit2b2lkCXNldGlkdChpbnQgaWR4LCBhbGlhc19m
b3JfaW50aGFuZF90ICpmdW5jLCBpbnQgdHlwLCBpbnQgZHBsLCBpbnQgaXN0KTsKK3N0cnVjdCBz
YXZlZnB1ICpnZXRfcGNiX3VzZXJfc2F2ZV90ZChzdHJ1Y3QgdGhyZWFkICp0ZCk7CitzdHJ1Y3Qg
c2F2ZWZwdSAqZ2V0X3BjYl91c2VyX3NhdmVfcGNiKHN0cnVjdCBwY2IgKnBjYik7CisKKyNlbmRp
ZiAvKiAhX01BQ0hJTkVfTURfVkFSX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9k
dWxlcy9uZXRtYXAvbWFjaGluZS9tZW1kZXYuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
bWFjaGluZS9tZW1kZXYuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9t
ZW1kZXYuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvbWVtZGV2LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4w
MDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw0MCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIw
MDQgTWFyayBSIFYgTXVycmF5CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogICAgaW4gdGhpcyBwb3NpdGlvbiBhbmQgdW5jaGFuZ2VkLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJT
RDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvbWVtZGV2LmggMjE3NTE1IDIwMTEtMDEt
MTcgMjI6NTg6MjhaIGpraW0gJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfTUVNREVWX0hfCisj
ZGVmaW5lCV9NQUNISU5FX01FTURFVl9IXworCisjZGVmaW5lCUNERVZfTUlOT1JfTUVNCTAKKyNk
ZWZpbmUJQ0RFVl9NSU5PUl9LTUVNCTEKKworZF9vcGVuX3QJbWVtb3BlbjsKK2RfcmVhZF90CW1l
bXJ3OworZF9pb2N0bF90CW1lbWlvY3RsOworZF9tbWFwX3QJbWVtbW1hcDsKKworI2VuZGlmIC8q
IF9NQUNISU5FX01FTURFVl9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL21hY2hpbmUvbWV0YWRhdGEuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj
aGluZS9tZXRhZGF0YS5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL21l
dGFkYXRhLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL21ldGFkYXRhLmgJMjAxNi0wOS0yOSAwMDoyNDo1
NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBp
biB0aGUgcHVibGljIGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9h
bWQ2NC9pbmNsdWRlL21ldGFkYXRhLmggMjkzMzQzIDIwMTYtMDEtMDcgMTk6NDc6MjZaIGVtYXN0
ZSAkICovCisKKyNpbmNsdWRlIDx4ODYvbWV0YWRhdGEuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL21pbmlkdW1wLmggL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvbWluaWR1bXAuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAvbWFjaGluZS9taW5pZHVtcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw
CisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9taW5pZHVtcC5oCTIwMTYt
MDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNDYgQEAKKy8qLQorICog
Q29weXJpZ2h0IChjKSAyMDA2IFBldGVyIFdlbW0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP
UiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0
L2luY2x1ZGUvbWluaWR1bXAuaCAyMTUxMzMgMjAxMC0xMS0xMSAxODozNToyOFogYXZnICQKKyAq
LworCisjaWZuZGVmCV9NQUNISU5FX01JTklEVU1QX0hfCisjZGVmaW5lCV9NQUNISU5FX01JTklE
VU1QX0hfIDEKKworI2RlZmluZQlNSU5JRFVNUF9NQUdJQwkJIm1pbmlkdW1wIEZyZWVCU0QvYW1k
NjQiCisjZGVmaW5lCU1JTklEVU1QX1ZFUlNJT04JMgorCitzdHJ1Y3QgbWluaWR1bXBoZHIgewor
CWNoYXIgbWFnaWNbMjRdOworCXVpbnQzMl90IHZlcnNpb247CisJdWludDMyX3QgbXNnYnVmc2l6
ZTsKKwl1aW50MzJfdCBiaXRtYXBzaXplOworCXVpbnQzMl90IHBtYXBzaXplOworCXVpbnQ2NF90
IGtlcm5iYXNlOworCXVpbnQ2NF90IGRtYXBiYXNlOworCXVpbnQ2NF90IGRtYXBlbmQ7Cit9Owor
CisjZW5kaWYgLyogX01BQ0hJTkVfTUlOSURVTVBfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL21wX3dhdGNoZG9nLmggL3Vzci9zcmMvc3lzL21v
ZHVsZXMvbmV0bWFwL21hY2hpbmUvbXBfd2F0Y2hkb2cuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxl
cy9uZXRtYXAvbWFjaGluZS9tcF93YXRjaGRvZy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw
MDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9tcF93YXRj
aGRvZy5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMzQg
QEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA0IFJvYmVydCBOLiBNLiBXYXRzb24KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgor
ICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9p
bmNsdWRlL21wX3dhdGNoZG9nLmggMTMzNzU5IDIwMDQtMDgtMTUgMTg6MDI6MDlaIHJ3YXRzb24g
JAorICovCisKKyNpZm5kZWYJX01BQ0hJTkVfTVBfV0FUQ0hET0dfSF8KKyNkZWZpbmUJX01BQ0hJ
TkVfTVBfV0FUQ0hET0dfSF8KKwordm9pZAlhcF93YXRjaGRvZyh1X2ludCBjcHVpZCk7CisKKyNl
bmRpZiAvKiAhX01BQ0hJTkVfTVBfV0FUQ0hET0dfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL25leHVzdmFyLmggL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvbmV4dXN2YXIuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAvbWFjaGluZS9uZXh1c3Zhci5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw
CisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9uZXh1c3Zhci5oCTIwMTYt
MDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNDUgQEAKKy8qLQorICog
Q29weXJpZ2h0IDE5OTggTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neQorICoK
KyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMg
c29mdHdhcmUgYW5kCisgKiBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdp
dGhvdXQgZmVlIGlzIGhlcmVieQorICogZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCBib3RoIHRoZSBh
Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCisgKiBwZXJtaXNzaW9uIG5vdGljZSBhcHBl
YXIgaW4gYWxsIGNvcGllcywgdGhhdCBib3RoIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsCisgKiBzdXBwb3J0aW5n
IGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZAor
ICogaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9u
IG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJt
aXNzaW9uLiAgTS5JLlQuIG1ha2VzCisgKiBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1
aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHBy
b3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKyAqIHdhcnJhbnR5Lgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTS5JLlQuIGBgQVMgSVMnJy4gIE0u
SS5ULiBESVNDTEFJTVMKKyAqIEFMTCBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUyBXSVRI
IFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIElOIE5PIEVWRU5UCisgKiBTSEFMTCBNLkku
VC4gQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxl
bmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9uZXh1c3Zhci5oIDE3NzE1NyAyMDA4LTAzLTEzIDIw
OjM5OjA0WiBqaGIgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfTkVYVVNWQVJfSF8KKyNkZWZp
bmUJX01BQ0hJTkVfTkVYVVNWQVJfSF8KKworc3RydWN0IG5leHVzX2RldmljZSB7CisJc3RydWN0
IHJlc291cmNlX2xpc3QJbnhfcmVzb3VyY2VzOworfTsKKworREVDTEFSRV9DTEFTUyhuZXh1c19k
cml2ZXIpOworCitleHRlcm4gc3RydWN0IHJtYW4gaXJxX3JtYW4sIGRycV9ybWFuLCBwb3J0X3Jt
YW4sIG1lbV9ybWFuOworCit2b2lkCW5leHVzX2luaXRfcmVzb3VyY2VzKHZvaWQpOworCisjZW5k
aWYgLyogIV9NQUNISU5FX05FWFVTVkFSX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvbWFjaGluZS9ucHguaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
bWFjaGluZS9ucHguaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9ucHgu
aAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21v
ZHVsZXMvbmV0bWFwL21hY2hpbmUvbnB4LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAg
KzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGlj
IGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRl
L25weC5oIDIzMzA0NCAyMDEyLTAzLTE2IDIwOjI0OjMwWiB0aWpsICQgKi8KKworI2luY2x1ZGUg
PHg4Ni9mcHUuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNo
aW5lL29md19tYWNoZGVwLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvb2Z3
X21hY2hkZXAuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9vZndfbWFj
aGRlcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9vZndfbWFjaGRlcC5oCTIwMTYtMDktMjkgMDA6MjQ6
NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyotCisgKiBUaGlzIGZpbGUgaXMg
aW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMv
YW1kNjQvaW5jbHVkZS9vZndfbWFjaGRlcC5oIDI1MDg0MCAyMDEzLTA1LTIxIDAzOjA1OjQ5WiBt
YXJjZWwgJCAqLworCisjaW5jbHVkZSA8eDg2L29md19tYWNoZGVwLmg+CmRpZmYgLXUgLXIgLU4g
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wYXJhbS5oIC91c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC9tYWNoaW5lL3BhcmFtLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL21hY2hpbmUvcGFyYW0uaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAor
KysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcGFyYW0uaAkyMDE2LTA5LTI5
IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDE1NSBAQAorLyotCisgKiBDb3B5
cmlnaHQgKGMpIDIwMDIgRGF2aWQgRS4gTydCcmllbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJz
aXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29k
ZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAq
IHRoZSBTeXN0ZW1zIFByb2dyYW1taW5nIEdyb3VwIG9mIHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgg
Q29tcHV0ZXIKKyAqIFNjaWVuY2UgRGVwYXJ0bWVudCBhbmQgUmFscGggQ2FtcGJlbGwuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg
b3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n
IGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl
bG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBp
dHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0
eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQor
ICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAq
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
CisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpcGFyYW0u
aAk4LjEgKEJlcmtlbGV5KSA2LzEwLzkzCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2Ft
ZDY0L2luY2x1ZGUvcGFyYW0uaCAyOTc4NzcgMjAxNi0wNC0xMiAyMToyMzo0NFogamhiICQKKyAq
LworCisKKyNpZm5kZWYgX0FNRDY0X0lOQ0xVREVfUEFSQU1fSF8KKyNkZWZpbmUJX0FNRDY0X0lO
Q0xVREVfUEFSQU1fSF8KKworI2luY2x1ZGUgPG1hY2hpbmUvX2FsaWduLmg+CisKKy8qCisgKiBN
YWNoaW5lIGRlcGVuZGVudCBjb25zdGFudHMgZm9yIEFNRDY0LgorICovCisKKworI2RlZmluZSBf
X0hBVkVfQUNQSQorI2RlZmluZSBfX1BDSV9SRVJPVVRFX0lOVEVSUlVQVAorCisjaWZuZGVmIE1B
Q0hJTkUKKyNkZWZpbmUJTUFDSElORQkJImFtZDY0IgorI2VuZGlmCisjaWZuZGVmIE1BQ0hJTkVf
QVJDSAorI2RlZmluZQlNQUNISU5FX0FSQ0gJImFtZDY0IgorI2VuZGlmCisjaWZuZGVmIE1BQ0hJ
TkVfQVJDSDMyCisjZGVmaW5lCU1BQ0hJTkVfQVJDSDMyCSJpMzg2IgorI2VuZGlmCisKKyNpZiBk
ZWZpbmVkKFNNUCkgfHwgZGVmaW5lZChLTERfTU9EVUxFKQorI2lmbmRlZiBNQVhDUFUKKyNkZWZp
bmUgTUFYQ1BVCQkyNTYKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgTUFYQ1BVCQkxCisjZW5kaWYK
KworI2lmbmRlZiBNQVhNRU1ET00KKyNkZWZpbmUJTUFYTUVNRE9NCTgKKyNlbmRpZgorCisjZGVm
aW5lCUFMSUdOQllURVMJCV9BTElHTkJZVEVTCisjZGVmaW5lCUFMSUdOKHApCQlfQUxJR04ocCkK
Ky8qCisgKiBBTElHTkVEX1BPSU5URVIgaXMgYSBib29sZWFuIG1hY3JvIHRoYXQgY2hlY2tzIHdo
ZXRoZXIgYW4gYWRkcmVzcworICogaXMgdmFsaWQgdG8gZmV0Y2ggZGF0YSBlbGVtZW50cyBvZiB0
eXBlIHQgZnJvbSBvbiB0aGlzIGFyY2hpdGVjdHVyZS4KKyAqIFRoaXMgZG9lcyBub3QgcmVmbGVj
dCB0aGUgb3B0aW1hbCBhbGlnbm1lbnQsIGp1c3QgdGhlIHBvc3NpYmlsaXR5CisgKiAod2l0aGlu
IHJlYXNvbmFibGUgbGltaXRzKS4gCisgKi8KKyNkZWZpbmUJQUxJR05FRF9QT0lOVEVSKHAsIHQp
CTEKKworLyoKKyAqIENBQ0hFX0xJTkVfU0laRSBpcyB0aGUgY29tcGlsZS10aW1lIG1heGltdW0g
Y2FjaGUgbGluZSBzaXplIGZvciBhbgorICogYXJjaGl0ZWN0dXJlLiAgSXQgc2hvdWxkIGJlIHVz
ZWQgd2l0aCBhcHByb3ByaWF0ZSBjYXV0aW9uLgorICovCisjZGVmaW5lCUNBQ0hFX0xJTkVfU0hJ
RlQJNworI2RlZmluZQlDQUNIRV9MSU5FX1NJWkUJCSgxIDw8IENBQ0hFX0xJTkVfU0hJRlQpCisK
Ky8qIFNpemUgb2YgdGhlIGxldmVsIDEgcGFnZSB0YWJsZSB1bml0cyAqLworI2RlZmluZSBOUFRF
UEcJCShQQUdFX1NJWkUvKHNpemVvZiAocHRfZW50cnlfdCkpKQorI2RlZmluZQlOUFRFUEdTSElG
VAk5CQkvKiBMT0cyKE5QVEVQRykgKi8KKyNkZWZpbmUgUEFHRV9TSElGVAkxMgkJLyogTE9HMihQ
QUdFX1NJWkUpICovCisjZGVmaW5lIFBBR0VfU0laRQkoMTw8UEFHRV9TSElGVCkJLyogYnl0ZXMv
cGFnZSAqLworI2RlZmluZSBQQUdFX01BU0sJKFBBR0VfU0laRS0xKQorLyogU2l6ZSBvZiB0aGUg
bGV2ZWwgMiBwYWdlIGRpcmVjdG9yeSB1bml0cyAqLworI2RlZmluZQlOUERFUEcJCShQQUdFX1NJ
WkUvKHNpemVvZiAocGRfZW50cnlfdCkpKQorI2RlZmluZQlOUERFUEdTSElGVAk5CQkvKiBMT0cy
KE5QREVQRykgKi8KKyNkZWZpbmUJUERSU0hJRlQJMjEgICAgICAgICAgICAgIC8qIExPRzIoTkJQ
RFIpICovCisjZGVmaW5lCU5CUERSCQkoMTw8UERSU0hJRlQpICAgLyogYnl0ZXMvcGFnZSBkaXIg
Ki8KKyNkZWZpbmUJUERSTUFTSwkJKE5CUERSLTEpCisvKiBTaXplIG9mIHRoZSBsZXZlbCAzIHBh
Z2UgZGlyZWN0b3J5IHBvaW50ZXIgdGFibGUgdW5pdHMgKi8KKyNkZWZpbmUJTlBEUEVQRwkJKFBB
R0VfU0laRS8oc2l6ZW9mIChwZHBfZW50cnlfdCkpKQorI2RlZmluZQlOUERQRVBHU0hJRlQJOQkJ
LyogTE9HMihOUERQRVBHKSAqLworI2RlZmluZQlQRFBTSElGVAkzMAkJLyogTE9HMihOQlBEUCkg
Ki8KKyNkZWZpbmUJTkJQRFAJCSgxPDxQRFBTSElGVCkJLyogYnl0ZXMvcGFnZSBkaXIgcHRyIHRh
YmxlICovCisjZGVmaW5lCVBEUE1BU0sJCShOQlBEUC0xKQorLyogU2l6ZSBvZiB0aGUgbGV2ZWwg
NCBwYWdlLW1hcCBsZXZlbC00IHRhYmxlIHVuaXRzICovCisjZGVmaW5lCU5QTUw0RVBHCShQQUdF
X1NJWkUvKHNpemVvZiAocG1sNF9lbnRyeV90KSkpCisjZGVmaW5lCU5QTUw0RVBHU0hJRlQJOQkJ
LyogTE9HMihOUE1MNEVQRykgKi8KKyNkZWZpbmUJUE1MNFNISUZUCTM5CQkvKiBMT0cyKE5CUE1M
NCkgKi8KKyNkZWZpbmUJTkJQTUw0CQkoMVVMPDxQTUw0U0hJRlQpLyogYnl0ZXMvcGFnZSBtYXAg
bGV2NCB0YWJsZSAqLworI2RlZmluZQlQTUw0TUFTSwkoTkJQTUw0LTEpCisKKyNkZWZpbmUJTUFY
UEFHRVNJWkVTCTMJLyogbWF4aW11bSBudW1iZXIgb2Ygc3VwcG9ydGVkIHBhZ2Ugc2l6ZXMgKi8K
KworI2RlZmluZSBJT1BBR0VTCTIJCS8qIHBhZ2VzIG9mIGkvbyBwZXJtaXNzaW9uIGJpdG1hcCAq
LworLyoKKyAqIEkvTyBwZXJtaXNzaW9uIGJpdG1hcCBoYXMgYSBiaXQgZm9yIGVhY2ggSS9PIHBv
cnQgcGx1cyBhbiBhZGRpdGlvbmFsCisgKiBieXRlIGF0IHRoZSBlbmQgd2l0aCBhbGwgYml0cyBz
ZXQuIFNlZSBzZWN0aW9uICJJL08gUGVybWlzc2lvbiBCaXQgTWFwIgorICogaW4gdGhlIEludGVs
IFNETSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjZGVmaW5lCUlPUEVSTV9CSVRNQVBfU0laRQko
SU9QQUdFUyAqIFBBR0VfU0laRSArIDEpCisKKyNpZm5kZWYJS1NUQUNLX1BBR0VTCisjZGVmaW5l
CUtTVEFDS19QQUdFUwk0CS8qIHBhZ2VzIG9mIGtzdGFjayAod2l0aCBwY2IpICovCisjZW5kaWYK
KyNkZWZpbmUJS1NUQUNLX0dVQVJEX1BBR0VTIDEJLyogcGFnZXMgb2Yga3N0YWNrIGd1YXJkOyAw
IGRpc2FibGVzICovCisKKy8qCisgKiBNYWNoIGRlcml2ZWQgY29udmVyc2lvbiBtYWNyb3MKKyAq
LworI2RlZmluZQlyb3VuZF9wYWdlKHgpCSgoKCh1bnNpZ25lZCBsb25nKSh4KSkgKyBQQUdFX01B
U0spICYgfihQQUdFX01BU0spKQorI2RlZmluZQl0cnVuY19wYWdlKHgpCSgodW5zaWduZWQgbG9u
ZykoeCkgJiB+KFBBR0VfTUFTSykpCisjZGVmaW5lIHRydW5jXzJtcGFnZSh4KQkoKHVuc2lnbmVk
IGxvbmcpKHgpICYgflBEUk1BU0spCisjZGVmaW5lIHJvdW5kXzJtcGFnZSh4KQkoKCgodW5zaWdu
ZWQgbG9uZykoeCkpICsgUERSTUFTSykgJiB+UERSTUFTSykKKyNkZWZpbmUgdHJ1bmNfMWdwYWdl
KHgpCSgodW5zaWduZWQgbG9uZykoeCkgJiB+UERQTUFTSykKKworI2RlZmluZQlhdG9wKHgpCQko
KHVuc2lnbmVkIGxvbmcpKHgpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lCXB0b2EoeCkJCSgodW5z
aWduZWQgbG9uZykoeCkgPDwgUEFHRV9TSElGVCkKKworI2RlZmluZQlhbWQ2NF9idG9wKHgpCSgo
dW5zaWduZWQgbG9uZykoeCkgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUJYW1kNjRfcHRvYih4KQko
KHVuc2lnbmVkIGxvbmcpKHgpIDw8IFBBR0VfU0hJRlQpCisKKyNkZWZpbmUJcGd0b2soeCkJKCh1
bnNpZ25lZCBsb25nKSh4KSAqIChQQUdFX1NJWkUgLyAxMDI0KSkgCisKKyNkZWZpbmUJSU5LRVJO
RUwodmEpICgoKHZhKSA+PSBETUFQX01JTl9BRERSRVNTICYmICh2YSkgPCBETUFQX01BWF9BRERS
RVNTKSBcCisgICAgfHwgKCh2YSkgPj0gVk1fTUlOX0tFUk5FTF9BRERSRVNTICYmICh2YSkgPCBW
TV9NQVhfS0VSTkVMX0FERFJFU1MpKQorCisjZW5kaWYgLyogIV9BTUQ2NF9JTkNMVURFX1BBUkFN
X0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9w
Yy9iaW9zLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcGMvYmlvcy5oCi0t
LSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BjL2Jpb3MuaAkxOTcwLTAxLTAx
IDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw
L21hY2hpbmUvcGMvYmlvcy5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBA
IC0wLDAgKzEsMTIxIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5NyBNaWNoYWVsIFNtaXRo
CisgKiBDb3B5cmlnaHQgKGMpIDE5OTggSm9uYXRoYW4gTGVtb24KKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
QVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1B
R0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL3BjL2Jp
b3MuaCAyNzA4MjggMjAxNC0wOC0yOSAyMToyNTo0N1ogamhiICQKKyAqLworCisjaWZuZGVmIF9N
QUNISU5FX1BDX0JJT1NfSF8KKyNkZWZpbmUgX01BQ0hJTkVfUENfQklPU19IXworCisvKgorICog
SW50IDE1OkU4MjAgJ1NNQVAnIHN0cnVjdHVyZQorICovCisjZGVmaW5lIFNNQVBfU0lHCTB4NTM0
RDQxNTAJCQkvKiAnU01BUCcgKi8KKworI2RlZmluZQlTTUFQX1RZUEVfTUVNT1JZCTEKKyNkZWZp
bmUJU01BUF9UWVBFX1JFU0VSVkVECTIKKyNkZWZpbmUJU01BUF9UWVBFX0FDUElfUkVDTEFJTQkz
CisjZGVmaW5lCVNNQVBfVFlQRV9BQ1BJX05WUwk0CisjZGVmaW5lCVNNQVBfVFlQRV9BQ1BJX0VS
Uk9SCTUKKworI2RlZmluZQlTTUFQX1hBVFRSX0VOQUJMRUQJMHgwMDAwMDAwMQorI2RlZmluZQlT
TUFQX1hBVFRSX05PTl9WT0xBVElMRQkweDAwMDAwMDAyCisjZGVmaW5lCVNNQVBfWEFUVFJfTUFT
SwkJKFNNQVBfWEFUVFJfRU5BQkxFRCB8IFNNQVBfWEFUVFJfTk9OX1ZPTEFUSUxFKQorCitzdHJ1
Y3QgYmlvc19zbWFwIHsKKyAgICB1X2ludDY0X3QJYmFzZTsKKyAgICB1X2ludDY0X3QJbGVuZ3Ro
OworICAgIHVfaW50MzJfdAl0eXBlOworfSBfX3BhY2tlZDsKKworLyogU3RydWN0dXJlIGV4dGVu
ZGVkIHRvIGluY2x1ZGUgZXh0ZW5kZWQgYXR0cmlidXRlIGZpZWxkIGluIEFDUEkgMy4wLiAqLwor
c3RydWN0IGJpb3Nfc21hcF94YXR0ciB7CisgICAgdV9pbnQ2NF90CWJhc2U7CisgICAgdV9pbnQ2
NF90CWxlbmd0aDsKKyAgICB1X2ludDMyX3QJdHlwZTsKKyAgICB1X2ludDMyX3QJeGF0dHI7Cit9
IF9fcGFja2VkOworCQorLyoKKyAqIFN5c3RlbSBNYW5hZ2VtZW50IEJJT1MKKyAqLworI2RlZmlu
ZQlTTUJJT1NfU1RBUlQJMHhmMDAwMAorI2RlZmluZQlTTUJJT1NfU1RFUAkweDEwCisjZGVmaW5l
CVNNQklPU19PRkYJMAorI2RlZmluZQlTTUJJT1NfTEVOCTQKKyNkZWZpbmUJU01CSU9TX1NJRwki
X1NNXyIKKworc3RydWN0IHNtYmlvc19lcHMgeworCXVpbnQ4X3QJCWFuY2hvcl9zdHJpbmdbNF07
CQkvKiAnX1NNXycgKi8KKwl1aW50OF90CQljaGVja3N1bTsKKwl1aW50OF90CQlsZW5ndGg7CisJ
dWludDhfdAkJbWFqb3JfdmVyc2lvbjsKKwl1aW50OF90CQltaW5vcl92ZXJzaW9uOworCXVpbnQx
Nl90CW1heGltdW1fc3RydWN0dXJlX3NpemU7CisJdWludDhfdAkJZW50cnlfcG9pbnRfcmV2aXNp
b247CisJdWludDhfdAkJZm9ybWF0dGVkX2FyZWFbNV07CisJdWludDhfdAkJaW50ZXJtZWRpYXRl
X2FuY2hvcl9zdHJpbmdbNV07CS8qICdfRE1JXycgKi8KKwl1aW50OF90CQlpbnRlcm1lZGlhdGVf
Y2hlY2tzdW07CisJdWludDE2X3QJc3RydWN0dXJlX3RhYmxlX2xlbmd0aDsKKwl1aW50MzJfdAlz
dHJ1Y3R1cmVfdGFibGVfYWRkcmVzczsKKwl1aW50MTZfdAludW1iZXJfc3RydWN0dXJlczsKKwl1
aW50OF90CQlCQ0RfcmV2aXNpb247Cit9OworCitzdHJ1Y3Qgc21iaW9zX3N0cnVjdHVyZV9oZWFk
ZXIgeworCXVpbnQ4X3QJCXR5cGU7CisJdWludDhfdAkJbGVuZ3RoOworCXVpbnQxNl90CWhhbmRs
ZTsKK307CisKKyNpZmRlZiBfS0VSTkVMCisjZGVmaW5lIEJJT1NfUEFERFJUT1ZBRERSKHgpCSgo
eCkgKyBLRVJOQkFTRSkKKyNkZWZpbmUgQklPU19WQUREUlRPUEFERFIoeCkJKCh4KSAtIEtFUk5C
QVNFKQorCitzdHJ1Y3QgYmlvc19vZW1fc2lnbmF0dXJlIHsKKwljaGFyICogYW5jaG9yOwkJLyog
c2VhcmNoIGFuY2hvciBzdHJpbmcgaW4gQklPUyBtZW1vcnkgKi8KKwlzaXplX3Qgb2Zmc2V0OwkJ
Lyogb2Zmc2V0IGZyb20gYW5jaG9yIChtYXkgYmUgbmVnYXRpdmUpICovCisJc2l6ZV90IHRvdGxl
bjsJCS8qIHRvdGFsIGxlbmd0aCBvZiBCSU9TIHN0cmluZyB0byBjb3B5ICovCit9IF9fcGFja2Vk
OworCitzdHJ1Y3QgYmlvc19vZW1fcmFuZ2UgeworCXVfaW50IGZyb207CQkvKiBzaG91bGRuJ3Qg
YmUgYmVsb3cgMHhlMDAwMCAqLworCXVfaW50IHRvOwkJLyogc2hvdWxkbid0IGJlIGFib3ZlIDB4
ZmZmZmYgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiaW9zX29lbSB7CisJc3RydWN0IGJpb3Nf
b2VtX3JhbmdlIHJhbmdlOworCXN0cnVjdCBiaW9zX29lbV9zaWduYXR1cmUgc2lnbmF0dXJlW107
Cit9IF9fcGFja2VkOworCitpbnQJYmlvc19vZW1fc3RyaW5ncyhzdHJ1Y3QgYmlvc19vZW0gKm9l
bSwgdV9jaGFyICpidWZmZXIsIHNpemVfdCBtYXhsZW4pOwordWludDMyX3QgYmlvc19zaWdzZWFy
Y2godWludDMyX3Qgc3RhcnQsIHVfY2hhciAqc2lnLCBpbnQgc2lnbGVuLCBpbnQgcGFyYWxlbiwK
KwkgICAgaW50IHNpZ29mcyk7Cit2b2lkIGJpb3NfYWRkX3NtYXBfZW50cmllcyhzdHJ1Y3QgYmlv
c19zbWFwICpzbWFwYmFzZSwgdV9pbnQzMl90IHNtYXBzaXplLAorCSAgICB2bV9wYWRkcl90ICpw
aHlzbWFwLCBpbnQgKnBoeXNtYXBfaWR4KTsKKyNlbmRpZgorCisjZW5kaWYgLyogX01BQ0hJTkVf
UENfQklPU19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUvcGMvZGlzcGxheS5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Bj
L2Rpc3BsYXkuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wYy9kaXNw
bGF5LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5
cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BjL2Rpc3BsYXkuaAkyMDE2LTA5LTI5IDAwOjI0OjU0
LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDQ1IEBACisvKgorICogSUJNIFBDIGRpc3BsYXkg
ZGVmaW5pdGlvbnMKKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1
ZGUvcGMvZGlzcGxheS5oIDEzOTczMCAyMDA1LTAxLTA1IDIwOjExOjEzWiBpbXAgJAorICovCisK
Ky8qIENvbG9yIGF0dHJpYnV0ZXMgZm9yIGZvcmVncm91bmQgdGV4dCAqLworCisjZGVmaW5lCUZH
X0JMQUNLCQkgICAwCisjZGVmaW5lCUZHX0JMVUUJCQkgICAxCisjZGVmaW5lCUZHX0dSRUVOCQkg
ICAyCisjZGVmaW5lCUZHX0NZQU4JCQkgICAzCisjZGVmaW5lCUZHX1JFRAkJCSAgIDQKKyNkZWZp
bmUJRkdfTUFHRU5UQQkJICAgNQorI2RlZmluZQlGR19CUk9XTgkJICAgNgorI2RlZmluZQlGR19M
SUdIVEdSRVkJCSAgIDcKKyNkZWZpbmUJRkdfREFSS0dSRVkJCSAgIDgKKyNkZWZpbmUJRkdfTElH
SFRCTFVFCQkgICA5CisjZGVmaW5lCUZHX0xJR0hUR1JFRU4JCSAgMTAKKyNkZWZpbmUJRkdfTElH
SFRDWUFOCQkgIDExCisjZGVmaW5lCUZHX0xJR0hUUkVECQkgIDEyCisjZGVmaW5lCUZHX0xJR0hU
TUFHRU5UQQkJICAxMworI2RlZmluZQlGR19ZRUxMT1cJCSAgMTQKKyNkZWZpbmUJRkdfV0hJVEUJ
CSAgMTUKKyNkZWZpbmUJRkdfQkxJTksJCTB4ODAKKworLyogQ29sb3IgYXR0cmlidXRlcyBmb3Ig
dGV4dCBiYWNrZ3JvdW5kICovCisKKyNkZWZpbmUJQkdfQkxBQ0sJCTB4MDAKKyNkZWZpbmUJQkdf
QkxVRQkJCTB4MTAKKyNkZWZpbmUJQkdfR1JFRU4JCTB4MjAKKyNkZWZpbmUJQkdfQ1lBTgkJCTB4
MzAKKyNkZWZpbmUJQkdfUkVECQkJMHg0MAorI2RlZmluZQlCR19NQUdFTlRBCQkweDUwCisjZGVm
aW5lCUJHX0JST1dOCQkweDYwCisjZGVmaW5lCUJHX0xJR0hUR1JFWQkJMHg3MAorCisvKiBNb25v
Y2hyb21lIGF0dHJpYnV0ZXMgZm9yIGZvcmVncm91bmQgdGV4dCAqLworCisjZGVmaW5lCUZHX1VO
REVSTElORQkJMHgwMQorI2RlZmluZQlGR19JTlRFTlNFCQkweDA4CisKKy8qIE1vbm9jaHJvbWUg
YXR0cmlidXRlcyBmb3IgdGV4dCBiYWNrZ3JvdW5kICovCisKKyNkZWZpbmUJQkdfSU5URU5TRQkJ
MHgxMApkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcGNi
LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcGNiLmgKLS0tIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcGNiLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAw
MDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BjYi5o
CTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTU3IEBACisv
Ki0KKyAqIENvcHlyaWdodCAoYykgMjAwMyBQZXRlciBXZW1tLgorICogQ29weXJpZ2h0IChjKSAx
OTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdh
cmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6LgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpcGNiLmgJNS4xMCAoQmVy
a2VsZXkpIDUvMTIvOTEKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVk
ZS9wY2IuaCAyOTA3MjggMjAxNS0xMS0xMiAyMjowMDo1OVogamhiICQKKyAqLworCisjaWZuZGVm
IF9BTUQ2NF9QQ0JfSF8KKyNkZWZpbmUgX0FNRDY0X1BDQl9IXworCisvKgorICogQU1ENjQgcHJv
Y2VzcyBjb250cm9sIGJsb2NrCisgKi8KKyNpbmNsdWRlIDxtYWNoaW5lL2ZwdS5oPgorI2luY2x1
ZGUgPG1hY2hpbmUvc2VnbWVudHMuaD4KKworI2lmZGVmIF9fYW1kNjRfXworLyoKKyAqIE5COiBU
aGUgZmllbGRzIG1hcmtlZCB3aXRoICgqKSBhcmUgdXNlZCBieSBrZXJuZWwgZGVidWdnZXJzLiAg
VGhlaXIKKyAqIEFCSSBzaG91bGQgYmUgcHJlc2VydmVkLgorICovCitzdHJ1Y3QgcGNiIHsKKwly
ZWdpc3Rlcl90CXBjYl9yMTU7CS8qICgqKSAqLworCXJlZ2lzdGVyX3QJcGNiX3IxNDsJLyogKCop
ICovCisJcmVnaXN0ZXJfdAlwY2JfcjEzOwkvKiAoKikgKi8KKwlyZWdpc3Rlcl90CXBjYl9yMTI7
CS8qICgqKSAqLworCXJlZ2lzdGVyX3QJcGNiX3JicDsJLyogKCopICovCisJcmVnaXN0ZXJfdAlw
Y2JfcnNwOwkvKiAoKikgKi8KKwlyZWdpc3Rlcl90CXBjYl9yYng7CS8qICgqKSAqLworCXJlZ2lz
dGVyX3QJcGNiX3JpcDsJLyogKCopICovCisJcmVnaXN0ZXJfdAlwY2JfZnNiYXNlOworCXJlZ2lz
dGVyX3QJcGNiX2dzYmFzZTsKKwlyZWdpc3Rlcl90CXBjYl9rZ3NiYXNlOworCXJlZ2lzdGVyX3QJ
cGNiX2NyMDsKKwlyZWdpc3Rlcl90CXBjYl9jcjI7CisJcmVnaXN0ZXJfdAlwY2JfY3IzOworCXJl
Z2lzdGVyX3QJcGNiX2NyNDsKKwlyZWdpc3Rlcl90CXBjYl9kcjA7CisJcmVnaXN0ZXJfdAlwY2Jf
ZHIxOworCXJlZ2lzdGVyX3QJcGNiX2RyMjsKKwlyZWdpc3Rlcl90CXBjYl9kcjM7CisJcmVnaXN0
ZXJfdAlwY2JfZHI2OworCXJlZ2lzdGVyX3QJcGNiX2RyNzsKKworCXN0cnVjdCByZWdpb25fZGVz
Y3JpcHRvciBwY2JfZ2R0OworCXN0cnVjdCByZWdpb25fZGVzY3JpcHRvciBwY2JfaWR0OworCXN0
cnVjdCByZWdpb25fZGVzY3JpcHRvciBwY2JfbGR0OworCXVpbnQxNl90CXBjYl90cjsKKworCXVf
aW50CQlwY2JfZmxhZ3M7CisjZGVmaW5lCVBDQl9GVUxMX0lSRVQJMHgwMQkvKiBmdWxsIGlyZXQg
aXMgcmVxdWlyZWQgKi8KKyNkZWZpbmUJUENCX0RCUkVHUwkweDAyCS8qIHByb2Nlc3MgdXNpbmcg
ZGVidWcgcmVnaXN0ZXJzICovCisjZGVmaW5lCVBDQl9LRVJORlBVCTB4MDQJLyoga2VybmVsIHVz
ZXMgZnB1ICovCisjZGVmaW5lCVBDQl9GUFVJTklURE9ORQkweDA4CS8qIGZwdSBzdGF0ZSBpcyBp
bml0aWFsaXplZCAqLworI2RlZmluZQlQQ0JfVVNFUkZQVUlOSVRET05FIDB4MTAgLyogZnB1IHVz
ZXIgc3RhdGUgaXMgaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUJUENCXzMyQklUCTB4NDAJLyogcHJv
Y2VzcyBoYXMgMzIgYml0IGNvbnRleHQgKHNlZ3MgZXRjKSAqLworCisJdWludDE2X3QJcGNiX2lu
aXRpYWxfZnB1Y3c7CisKKwkvKiBjb3B5aW4vb3V0IGZhdWx0IHJlY292ZXJ5ICovCisJY2FkZHJf
dAkJcGNiX29uZmF1bHQ7CisKKwl1aW50NjRfdAlwY2JfcGFkMDsKKworCS8qIGxvY2FsIHRzcywg
d2l0aCBpL28gYml0bWFwOyBOVUxMIGZvciBjb21tb24gKi8KKwlzdHJ1Y3QgYW1kNjR0c3MgKnBj
Yl90c3NwOworCisJLyogbW9kZWwgc3BlY2lmaWMgcmVnaXN0ZXJzICovCisJcmVnaXN0ZXJfdAlw
Y2JfZWZlcjsKKwlyZWdpc3Rlcl90CXBjYl9zdGFyOworCXJlZ2lzdGVyX3QJcGNiX2xzdGFyOwor
CXJlZ2lzdGVyX3QJcGNiX2NzdGFyOworCXJlZ2lzdGVyX3QJcGNiX3NmbWFzazsKKworCXN0cnVj
dCBzYXZlZnB1CSpwY2Jfc2F2ZTsKKworCXVpbnQ2NF90CXBjYl9wYWRbNV07Cit9OworCisvKiBQ
ZXItQ1BVIHN0YXRlIHNhdmVkIGR1cmluZyBzdXNwZW5kIGFuZCByZXN1bWUuICovCitzdHJ1Y3Qg
c3VzcHBjYiB7CisJc3RydWN0IHBjYglzcF9wY2I7CisKKwkvKiBmcHUgY29udGV4dCBmb3Igc3Vz
cGVuZC9yZXN1bWUgKi8KKwl2b2lkCQkqc3BfZnB1c3VzcGVuZDsKK307CisjZW5kaWYKKworI2lm
ZGVmIF9LRVJORUwKK3N0cnVjdCB0cmFwZnJhbWU7CisKKy8qCisgKiBUaGUgcGNiX2ZsYWdzIGlz
IG9ubHkgbW9kaWZpZWQgYnkgY3VycmVudCB0aHJlYWQsIG9yIGJ5IG90aGVyIHRocmVhZHMKKyAq
IHdoZW4gY3VycmVudCB0aHJlYWQgaXMgc3RvcHBlZC4gIEhvd2V2ZXIsIGN1cnJlbnQgdGhyZWFk
IG1heSBjaGFuZ2UgaXQKKyAqIGZyb20gdGhlIGludGVycnVwdCBjb250ZXh0IGluIGNwdV9zd2l0
Y2goKSwgb3IgaW4gdGhlIHRyYXAgaGFuZGxlci4KKyAqIFdoZW4gd2UgcmVhZC1tb2RpZnktd3Jp
dGUgcGNiX2ZsYWdzIGZyb20gQyBzb3VyY2VzLCBjb21waWxlciBtYXkgZ2VuZXJhdGUKKyAqIGNv
ZGUgdGhhdCBpcyBub3QgYXRvbWljIHJlZ2FyZGluZyB0aGUgaW50ZXJydXB0IGhhbmRsZXIuICBJ
ZiBhIHRyYXAgb3IKKyAqIGludGVycnVwdCBoYXBwZW5zIGFuZCBhbnkgZmxhZyBpcyBtb2RpZmll
ZCBmcm9tIHRoZSBoYW5kbGVyLCBpdCBjYW4gYmUKKyAqIGNsb2JiZXJlZCB3aXRoIHRoZSBjYWNo
ZWQgdmFsdWUgbGF0ZXIuICBUaGVyZWZvcmUsIHdlIGltcGxlbWVudCBzZXR0aW5nCisgKiBhbmQg
Y2xlYXJpbmcgZmxhZ3Mgd2l0aCBzaW5nbGUtaW5zdHJ1Y3Rpb24gZnVuY3Rpb25zLCB3aGljaCBk
byBub3QgcmFjZQorICogd2l0aCBwb3NzaWJsZSBtb2RpZmljYXRpb24gb2YgdGhlIGZsYWdzIGZy
b20gdGhlIHRyYXAgb3IgaW50ZXJydXB0IGNvbnRleHQsCisgKiBiZWNhdXNlIHRyYXBzIGFuZCBp
bnRlcnJ1cHRzIGFyZSBleGVjdXRlZCBvbmx5IG9uIGluc3RydWN0aW9uIGJvdW5kYXJ5LgorICov
CitzdGF0aWMgX19pbmxpbmUgdm9pZAorc2V0X3BjYl9mbGFncyhzdHJ1Y3QgcGNiICpwY2IsIGNv
bnN0IHVfaW50IGZsYWdzKQoreworCisJX19hc20gX192b2xhdGlsZSgib3JsICUxLCUwIgorCSAg
ICA6ICI9bSIgKHBjYi0+cGNiX2ZsYWdzKSA6ICJpciIgKGZsYWdzKSwgIm0iIChwY2ItPnBjYl9m
bGFncykKKwkgICAgOiAiY2MiKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2NsZWFyX3Bj
Yl9mbGFncyhzdHJ1Y3QgcGNiICpwY2IsIGNvbnN0IHVfaW50IGZsYWdzKQoreworCisJX19hc20g
X192b2xhdGlsZSgiYW5kbCAlMSwlMCIKKwkgICAgOiAiPW0iIChwY2ItPnBjYl9mbGFncykgOiAi
aXIiICh+ZmxhZ3MpLCAibSIgKHBjYi0+cGNiX2ZsYWdzKQorCSAgICA6ICJjYyIpOworfQorCit2
b2lkCW1ha2VjdHgoc3RydWN0IHRyYXBmcmFtZSAqLCBzdHJ1Y3QgcGNiICopOworaW50CXNhdmVj
dHgoc3RydWN0IHBjYiAqKSBfX3JldHVybnNfdHdpY2U7Cit2b2lkCXJlc3VtZWN0eChzdHJ1Y3Qg
cGNiICopOworCisjZW5kaWYKKworI2VuZGlmIC8qIF9BTUQ2NF9QQ0JfSF8gKi8KZGlmZiAtdSAt
ciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BjaV9jZmdyZWcuaCAvdXNy
L3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wY2lfY2ZncmVnLmgKLS0tIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcGNpX2NmZ3JlZy5oCTE5NzAtMDEtMDEgMDE6MDA6
MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGlu
ZS9wY2lfY2ZncmVnLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAs
MCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyAq
LworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL3BjaV9jZmdyZWcu
aCAyMjM0NDAgMjAxMS0wNi0yMiAyMTowNDoxM1ogamhiICQgKi8KKworI2luY2x1ZGUgPHg4Ni9w
Y2lfY2ZncmVnLmg+CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj
aGluZS9wY3B1LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcGNwdS5oCi0t
LSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BjcHUuaAkxOTcwLTAxLTAxIDAx
OjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUvcGNwdS5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAg
KzEsMjUxIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgUGV0ZXIgV2VtbSA8cGV0ZXJAbmV0cGxl
eC5jb20uYXU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAq
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcv
MTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9wY3B1LmggMjgyNjg0IDIwMTUtMDUtMDkgMTk6MTE6MDFa
IGtpYiAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9QQ1BVX0hfCisjZGVmaW5lCV9NQUNISU5F
X1BDUFVfSF8KKworI2lmbmRlZiBfU1lTX0NERUZTX0hfCisjZXJyb3IgInN5cy9jZGVmcy5oIGlz
IGEgcHJlcmVxdWlzaXRlIGZvciB0aGlzIGZpbGUiCisjZW5kaWYKKworLyoKKyAqIFRoZSBTTVAg
cGFydHMgYXJlIHNldHVwIGluIHBtYXAuYyBhbmQgbG9jb3JlLnMgZm9yIHRoZSBCU1AsIGFuZAor
ICogbXBfbWFjaGRlcC5jIHNldHMgdXAgdGhlIGRhdGEgZm9yIHRoZSBBUCdzIHRvICJzZWUiIHdo
ZW4gdGhleSBhd2FrZS4KKyAqIFRoZSByZWFzb24gZm9yIGRvaW5nIGl0IHZpYSBhIHN0cnVjdCBp
cyBzbyB0aGF0IGFuIGFycmF5IG9mIHBvaW50ZXJzCisgKiB0byBlYWNoIENQVSdzIGRhdGEgY2Fu
IGJlIHNldCB1cCBmb3IgdGhpbmdzIGxpa2UgImNoZWNrIGN1cnByb2Mgb24gYWxsCisgKiBvdGhl
ciBwcm9jZXNzb3JzIgorICovCisjZGVmaW5lCVBDUFVfTURfRklFTERTCQkJCQkJCVwKKwljaGFy
CXBjX21vbml0b3JidWZbMTI4XSBfX2FsaWduZWQoMTI4KTsgLyogY2FjaGUgbGluZSAqLwlcCisJ
c3RydWN0CXBjcHUgKnBjX3BydnNwYWNlOwkvKiBTZWxmLXJlZmVyZW5jZSAqLwkJXAorCXN0cnVj
dAlwbWFwICpwY19jdXJwbWFwOwkJCQkJXAorCXN0cnVjdAlhbWQ2NHRzcyAqcGNfdHNzcDsJLyog
VFNTIHNlZ21lbnQgYWN0aXZlIG9uIENQVSAqLwlcCisJc3RydWN0CWFtZDY0dHNzICpwY19jb21t
b250c3NwOy8qIENvbW1vbiBUU1MgZm9yIHRoZSBDUFUgKi8JXAorCXJlZ2lzdGVyX3QgcGNfcnNw
MDsJCQkJCQlcCisJcmVnaXN0ZXJfdCBwY19zY3JhdGNoX3JzcDsJLyogVXNlciAlcnNwIGluIHN5
c2NhbGwgKi8JXAorCXVfaW50CXBjX2FwaWNfaWQ7CQkJCQkJXAorCXVfaW50ICAgcGNfYWNwaV9p
ZDsJCS8qIEFDUEkgQ1BVIGlkICovCQlcCisJLyogUG9pbnRlciB0byB0aGUgQ1BVICVmcyBkZXNj
cmlwdG9yICovCQkJCVwKKwlzdHJ1Y3QgdXNlcl9zZWdtZW50X2Rlc2NyaXB0b3IJKnBjX2ZzMzJw
OwkJCVwKKwkvKiBQb2ludGVyIHRvIHRoZSBDUFUgJWdzIGRlc2NyaXB0b3IgKi8JCQkJXAorCXN0
cnVjdCB1c2VyX3NlZ21lbnRfZGVzY3JpcHRvcgkqcGNfZ3MzMnA7CQkJXAorCS8qIFBvaW50ZXIg
dG8gdGhlIENQVSBMRFQgZGVzY3JpcHRvciAqLwkJCQlcCisJc3RydWN0IHN5c3RlbV9zZWdtZW50
X2Rlc2NyaXB0b3IgKnBjX2xkdDsJCQlcCisJLyogUG9pbnRlciB0byB0aGUgQ1BVIFRTUyBkZXNj
cmlwdG9yICovCQkJCVwKKwlzdHJ1Y3Qgc3lzdGVtX3NlZ21lbnRfZGVzY3JpcHRvciAqcGNfdHNz
OwkJCVwKKwl1aW50NjRfdAlwY19wbV9zYXZlX2NudDsJCQkJCVwKKwl1X2ludAlwY19jbWNpX21h
c2s7CQkvKiBNQ3ggYmFua3MgZm9yIENNQ0kgKi8JXAorCXVpbnQ2NF90IHBjX2RicmVnWzE2XTsJ
CS8qIGRkYiBkZWJ1Z2dpbmcgcmVncyAqLwlcCisJaW50IHBjX2RicmVnX2NtZDsJCS8qIGRkYiBk
ZWJ1Z2dpbmcgcmVnIGNtZCAqLwlcCisJdV9pbnQJcGNfdmNwdV9pZDsJCS8qIFhlbiB2Q1BVIElE
ICovCQlcCisJdWludDMyX3QgcGNfcGNpZF9uZXh0OwkJCQkJCVwKKwl1aW50MzJfdCBwY19wY2lk
X2dlbjsJCQkJCQlcCisJY2hhcglfX3BhZFsxNDldCQkvKiBiZSBkaXZpc29yIG9mIFBBR0VfU0la
RQlcCisJCQkJCSAgIGFmdGVyIGNhY2hlIGFsaWdubWVudCAqLworCisjZGVmaW5lCVBDX0RCUkVH
X0NNRF9OT05FCTAKKyNkZWZpbmUJUENfREJSRUdfQ01EX0xPQUQJMQorCisjaWZkZWYgX0tFUk5F
TAorCisjaWZkZWYgbGludAorCitleHRlcm4gc3RydWN0IHBjcHUgKnBjcHVwOworCisjZGVmaW5l
CVBDUFVfR0VUKG1lbWJlcikJKHBjcHVwLT5wY18gIyMgbWVtYmVyKQorI2RlZmluZQlQQ1BVX0FE
RChtZW1iZXIsIHZhbCkJKHBjcHVwLT5wY18gIyMgbWVtYmVyICs9ICh2YWwpKQorI2RlZmluZQlQ
Q1BVX0lOQyhtZW1iZXIpCVBDUFVfQUREKG1lbWJlciwgMSkKKyNkZWZpbmUJUENQVV9QVFIobWVt
YmVyKQkoJnBjcHVwLT5wY18gIyMgbWVtYmVyKQorI2RlZmluZQlQQ1BVX1NFVChtZW1iZXIsIHZh
bCkJKHBjcHVwLT5wY18gIyMgbWVtYmVyID0gKHZhbCkpCisKKyNlbGlmIGRlZmluZWQoX19HTlVD
TElLRV9BU00pICYmIGRlZmluZWQoX19HTlVDTElLRV9fX1RZUEVPRikKKworLyoKKyAqIEV2YWx1
YXRlcyB0byB0aGUgYnl0ZSBvZmZzZXQgb2YgdGhlIHBlci1jcHUgdmFyaWFibGUgbmFtZS4KKyAq
LworI2RlZmluZQlfX3BjcHVfb2Zmc2V0KG5hbWUpCQkJCQkJXAorCV9fb2Zmc2V0b2Yoc3RydWN0
IHBjcHUsIG5hbWUpCisKKy8qCisgKiBFdmFsdWF0ZXMgdG8gdGhlIHR5cGUgb2YgdGhlIHBlci1j
cHUgdmFyaWFibGUgbmFtZS4KKyAqLworI2RlZmluZQlfX3BjcHVfdHlwZShuYW1lKQkJCQkJCVwK
KwlfX3R5cGVvZigoKHN0cnVjdCBwY3B1ICopMCktPm5hbWUpCisKKy8qCisgKiBFdmFsdWF0ZXMg
dG8gdGhlIGFkZHJlc3Mgb2YgdGhlIHBlci1jcHUgdmFyaWFibGUgbmFtZS4KKyAqLworI2RlZmlu
ZQlfX1BDUFVfUFRSKG5hbWUpIF9fZXh0ZW5zaW9uX18gKHsJCQkJXAorCV9fcGNwdV90eXBlKG5h
bWUpICpfX3A7CQkJCQkJXAorCQkJCQkJCQkJXAorCV9fYXNtIF9fdm9sYXRpbGUoIm1vdnEgJSVn
czolMSwlMDsgYWRkcSAlMiwlMCIJCQlcCisJICAgIDogIj1yIiAoX19wKQkJCQkJCVwKKwkgICAg
OiAibSIgKCooc3RydWN0IHBjcHUgKikoX19wY3B1X29mZnNldChwY19wcnZzcGFjZSkpKSwJXAor
CSAgICAgICJpIiAoX19wY3B1X29mZnNldChuYW1lKSkpOwkJCQlcCisJCQkJCQkJCQlcCisJX19w
OwkJCQkJCQkJXAorfSkKKworLyoKKyAqIEV2YWx1YXRlcyB0byB0aGUgdmFsdWUgb2YgdGhlIHBl
ci1jcHUgdmFyaWFibGUgbmFtZS4KKyAqLworI2RlZmluZQlfX1BDUFVfR0VUKG5hbWUpIF9fZXh0
ZW5zaW9uX18gKHsJCQkJXAorCV9fcGNwdV90eXBlKG5hbWUpIF9fcmVzOwkJCQkJXAorCXN0cnVj
dCBfX3MgewkJCQkJCQlcCisJCXVfY2hhcglfX2JbTUlOKHNpemVvZihfX3BjcHVfdHlwZShuYW1l
KSksIDgpXTsJCVwKKwl9IF9fczsJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoc2l6ZW9mKF9f
cmVzKSA9PSAxIHx8IHNpemVvZihfX3JlcykgPT0gMiB8fAkJCVwKKwkgICAgc2l6ZW9mKF9fcmVz
KSA9PSA0IHx8IHNpemVvZihfX3JlcykgPT0gOCkgewkJCVwKKwkJX19hc20gX192b2xhdGlsZSgi
bW92ICUlZ3M6JTEsJTAiCQkJXAorCQkgICAgOiAiPXIiIChfX3MpCQkJCQlcCisJCSAgICA6ICJt
IiAoKihzdHJ1Y3QgX19zICopKF9fcGNwdV9vZmZzZXQobmFtZSkpKSk7CVwKKwkJKihzdHJ1Y3Qg
X19zICopKHZvaWQgKikmX19yZXMgPSBfX3M7CQkJXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkJX19y
ZXMgPSAqX19QQ1BVX1BUUihuYW1lKTsJCQkJXAorCX0JCQkJCQkJCVwKKwlfX3JlczsJCQkJCQkJ
CVwKK30pCisKKy8qCisgKiBBZGRzIHRoZSB2YWx1ZSB0byB0aGUgcGVyLWNwdSBjb3VudGVyIG5h
bWUuICBUaGUgaW1wbGVtZW50YXRpb24KKyAqIG11c3QgYmUgYXRvbWljIHdpdGggcmVzcGVjdCB0
byBpbnRlcnJ1cHRzLgorICovCisjZGVmaW5lCV9fUENQVV9BREQobmFtZSwgdmFsKSBkbyB7CQkJ
CQlcCisJX19wY3B1X3R5cGUobmFtZSkgX192YWw7CQkJCQlcCisJc3RydWN0IF9fcyB7CQkJCQkJ
CVwKKwkJdV9jaGFyCV9fYltNSU4oc2l6ZW9mKF9fcGNwdV90eXBlKG5hbWUpKSwgOCldOwkJXAor
CX0gX19zOwkJCQkJCQkJXAorCQkJCQkJCQkJXAorCV9fdmFsID0gKHZhbCk7CQkJCQkJCVwKKwlp
ZiAoc2l6ZW9mKF9fdmFsKSA9PSAxIHx8IHNpemVvZihfX3ZhbCkgPT0gMiB8fAkJCVwKKwkgICAg
c2l6ZW9mKF9fdmFsKSA9PSA0IHx8IHNpemVvZihfX3ZhbCkgPT0gOCkgewkJCVwKKwkJX19zID0g
KihzdHJ1Y3QgX19zICopKHZvaWQgKikmX192YWw7CQkJXAorCQlfX2FzbSBfX3ZvbGF0aWxlKCJh
ZGQgJTEsJSVnczolMCIJCQlcCisJCSAgICA6ICI9bSIgKCooc3RydWN0IF9fcyAqKShfX3BjcHVf
b2Zmc2V0KG5hbWUpKSkJXAorCQkgICAgOiAiciIgKF9fcykpOwkJCQkJXAorCX0gZWxzZQkJCQkJ
CQkJXAorCQkqX19QQ1BVX1BUUihuYW1lKSArPSBfX3ZhbDsJCQkJXAorfSB3aGlsZSAoMCkKKwor
LyoKKyAqIEluY3JlbWVudHMgdGhlIHZhbHVlIG9mIHRoZSBwZXItY3B1IGNvdW50ZXIgbmFtZS4g
IFRoZSBpbXBsZW1lbnRhdGlvbgorICogbXVzdCBiZSBhdG9taWMgd2l0aCByZXNwZWN0IHRvIGlu
dGVycnVwdHMuCisgKi8KKyNkZWZpbmUJX19QQ1BVX0lOQyhuYW1lKSBkbyB7CQkJCQkJXAorCUNU
QVNTRVJUKHNpemVvZihfX3BjcHVfdHlwZShuYW1lKSkgPT0gMSB8fAkJCVwKKwkgICAgc2l6ZW9m
KF9fcGNwdV90eXBlKG5hbWUpKSA9PSAyIHx8CQkJCVwKKwkgICAgc2l6ZW9mKF9fcGNwdV90eXBl
KG5hbWUpKSA9PSA0IHx8CQkJCVwKKwkgICAgc2l6ZW9mKF9fcGNwdV90eXBlKG5hbWUpKSA9PSA4
KTsJCQkJXAorCWlmIChzaXplb2YoX19wY3B1X3R5cGUobmFtZSkpID09IDEpIHsJCQkJXAorCQlf
X2FzbSBfX3ZvbGF0aWxlKCJpbmNiICUlZ3M6JTAiCQkJCVwKKwkJICAgIDogIj1tIiAoKihfX3Bj
cHVfdHlwZShuYW1lKSAqKShfX3BjcHVfb2Zmc2V0KG5hbWUpKSlcCisJCSAgICA6ICJtIiAoKihf
X3BjcHVfdHlwZShuYW1lKSAqKShfX3BjcHVfb2Zmc2V0KG5hbWUpKSkpO1wKKwl9IGVsc2UgaWYg
KHNpemVvZihfX3BjcHVfdHlwZShuYW1lKSkgPT0gMikgewkJCVwKKwkJX19hc20gX192b2xhdGls
ZSgiaW5jdyAlJWdzOiUwIgkJCQlcCisJCSAgICA6ICI9bSIgKCooX19wY3B1X3R5cGUobmFtZSkg
KikoX19wY3B1X29mZnNldChuYW1lKSkpXAorCQkgICAgOiAibSIgKCooX19wY3B1X3R5cGUobmFt
ZSkgKikoX19wY3B1X29mZnNldChuYW1lKSkpKTtcCisJfSBlbHNlIGlmIChzaXplb2YoX19wY3B1
X3R5cGUobmFtZSkpID09IDQpIHsJCQlcCisJCV9fYXNtIF9fdm9sYXRpbGUoImluY2wgJSVnczol
MCIJCQkJXAorCQkgICAgOiAiPW0iICgqKF9fcGNwdV90eXBlKG5hbWUpICopKF9fcGNwdV9vZmZz
ZXQobmFtZSkpKVwKKwkJICAgIDogIm0iICgqKF9fcGNwdV90eXBlKG5hbWUpICopKF9fcGNwdV9v
ZmZzZXQobmFtZSkpKSk7XAorCX0gZWxzZSBpZiAoc2l6ZW9mKF9fcGNwdV90eXBlKG5hbWUpKSA9
PSA4KSB7CQkJXAorCQlfX2FzbSBfX3ZvbGF0aWxlKCJpbmNxICUlZ3M6JTAiCQkJCVwKKwkJICAg
IDogIj1tIiAoKihfX3BjcHVfdHlwZShuYW1lKSAqKShfX3BjcHVfb2Zmc2V0KG5hbWUpKSlcCisJ
CSAgICA6ICJtIiAoKihfX3BjcHVfdHlwZShuYW1lKSAqKShfX3BjcHVfb2Zmc2V0KG5hbWUpKSkp
O1wKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogU2V0cyB0aGUgdmFsdWUgb2Yg
dGhlIHBlci1jcHUgdmFyaWFibGUgbmFtZSB0byB2YWx1ZSB2YWwuCisgKi8KKyNkZWZpbmUJX19Q
Q1BVX1NFVChuYW1lLCB2YWwpIHsJCQkJCQlcCisJX19wY3B1X3R5cGUobmFtZSkgX192YWw7CQkJ
CQlcCisJc3RydWN0IF9fcyB7CQkJCQkJCVwKKwkJdV9jaGFyCV9fYltNSU4oc2l6ZW9mKF9fcGNw
dV90eXBlKG5hbWUpKSwgOCldOwkJXAorCX0gX19zOwkJCQkJCQkJXAorCQkJCQkJCQkJXAorCV9f
dmFsID0gKHZhbCk7CQkJCQkJCVwKKwlpZiAoc2l6ZW9mKF9fdmFsKSA9PSAxIHx8IHNpemVvZihf
X3ZhbCkgPT0gMiB8fAkJCVwKKwkgICAgc2l6ZW9mKF9fdmFsKSA9PSA0IHx8IHNpemVvZihfX3Zh
bCkgPT0gOCkgewkJCVwKKwkJX19zID0gKihzdHJ1Y3QgX19zICopKHZvaWQgKikmX192YWw7CQkJ
XAorCQlfX2FzbSBfX3ZvbGF0aWxlKCJtb3YgJTEsJSVnczolMCIJCQlcCisJCSAgICA6ICI9bSIg
KCooc3RydWN0IF9fcyAqKShfX3BjcHVfb2Zmc2V0KG5hbWUpKSkJXAorCQkgICAgOiAiciIgKF9f
cykpOwkJCQkJXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkJKl9fUENQVV9QVFIobmFtZSkgPSBfX3Zh
bDsJCQkJXAorCX0JCQkJCQkJCVwKK30KKworI2RlZmluZQlQQ1BVX0dFVChtZW1iZXIpCV9fUENQ
VV9HRVQocGNfICMjIG1lbWJlcikKKyNkZWZpbmUJUENQVV9BREQobWVtYmVyLCB2YWwpCV9fUENQ
VV9BREQocGNfICMjIG1lbWJlciwgdmFsKQorI2RlZmluZQlQQ1BVX0lOQyhtZW1iZXIpCV9fUENQ
VV9JTkMocGNfICMjIG1lbWJlcikKKyNkZWZpbmUJUENQVV9QVFIobWVtYmVyKQlfX1BDUFVfUFRS
KHBjXyAjIyBtZW1iZXIpCisjZGVmaW5lCVBDUFVfU0VUKG1lbWJlciwgdmFsKQlfX1BDUFVfU0VU
KHBjXyAjIyBtZW1iZXIsIHZhbCkKKworI2RlZmluZQlPRkZTRVRPRl9DVVJUSFJFQUQJMAorI2lm
ZGVmIF9fY2xhbmdfXworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV251bGwtZGVyZWZlcmVuY2UiCisjZW5kaWYKK3N0YXRp
YyBfX2lubGluZSBfX3B1cmUyIHN0cnVjdCB0aHJlYWQgKgorX19jdXJ0aHJlYWQodm9pZCkKK3sK
KwlzdHJ1Y3QgdGhyZWFkICp0ZDsKKworCV9fYXNtKCJtb3ZxICUlZ3M6JTEsJTAiIDogIj1yIiAo
dGQpCisJICAgIDogIm0iICgqKGNoYXIgKilPRkZTRVRPRl9DVVJUSFJFQUQpKTsKKwlyZXR1cm4g
KHRkKTsKK30KKyNpZmRlZiBfX2NsYW5nX18KKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AK
KyNlbmRpZgorI2RlZmluZQljdXJ0aHJlYWQJCShfX2N1cnRocmVhZCgpKQorCisjZGVmaW5lCU9G
RlNFVE9GX0NVUlBDQgkJMzIKK3N0YXRpYyBfX2lubGluZSBfX3B1cmUyIHN0cnVjdCBwY2IgKgor
X19jdXJwY2Iodm9pZCkKK3sKKwlzdHJ1Y3QgcGNiICpwY2I7CisKKwlfX2FzbSgibW92cSAlJWdz
OiUxLCUwIiA6ICI9ciIgKHBjYikgOiAibSIgKCooY2hhciAqKU9GRlNFVE9GX0NVUlBDQikpOwor
CXJldHVybiAocGNiKTsKK30KKyNkZWZpbmUJY3VycGNiCQkoX19jdXJwY2IoKSkKKworI2RlZmlu
ZQlJU19CU1AoKQkoUENQVV9HRVQoY3B1aWQpID09IDApCisKKyNlbHNlIC8qICFsaW50IHx8IGRl
ZmluZWQoX19HTlVDTElLRV9BU00pICYmIGRlZmluZWQoX19HTlVDTElLRV9fX1RZUEVPRikgKi8K
KworI2Vycm9yICJ0aGlzIGZpbGUgbmVlZHMgdG8gYmUgcG9ydGVkIHRvIHlvdXIgY29tcGlsZXIi
CisKKyNlbmRpZiAvKiBsaW50LCBldGMuICovCisKKyNlbmRpZiAvKiBfS0VSTkVMICovCisKKyNl
bmRpZiAvKiAhX01BQ0hJTkVfUENQVV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21v
ZHVsZXMvbmV0bWFwL21hY2hpbmUvcG1hcC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9t
YWNoaW5lL3BtYXAuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wbWFw
LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC9tYWNoaW5lL3BtYXAuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAw
MCArMDEwMApAQCAtMCwwICsxLDQyMSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgUGV0
ZXIgV2VtbS4KKyAqIENvcHlyaWdodCAoYykgMTk5MSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5
IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29k
ZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAq
IHRoZSBTeXN0ZW1zIFByb2dyYW1taW5nIEdyb3VwIG9mIHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgg
Q29tcHV0ZXIKKyAqIFNjaWVuY2UgRGVwYXJ0bWVudCBhbmQgV2lsbGlhbSBKb2xpdHogb2YgVVVO
RVQgVGVjaG5vbG9naWVzIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
dGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
aXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5E
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdF
TlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICog
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgor
ICogRGVyaXZlZCBmcm9tIGhwMzAwIHZlcnNpb24gYnkgTWlrZSBIaWJsZXIsIHRoaXMgdmVyc2lv
biBieSBXaWxsaWFtCisgKiBKb2xpdHogdXNlcyBhIHJlY3Vyc2l2ZSBtYXAgW2EgcGRlIHBvaW50
cyB0byB0aGUgcGFnZSBkaXJlY3RvcnldIHRvCisgKiBtYXAgdGhlIHBhZ2UgdGFibGVzIHVzaW5n
IHRoZSBwYWdldGFibGVzIHRoZW1zZWx2ZXMuIFRoaXMgaXMgZG9uZSB0bworICogcmVkdWNlIHRo
ZSBpbXBhY3Qgb24ga2VybmVsIHZpcnR1YWwgbWVtb3J5IGZvciBsb3RzIG9mIHNwYXJzZSBhZGRy
ZXNzCisgKiBzcGFjZSwgYW5kIHRvIHJlZHVjZSB0aGUgY29zdCBvZiBtZW1vcnkgdG8gZWFjaCBw
cm9jZXNzLgorICoKKyAqCWZyb206IGhwMzAwOiBAKCMpcG1hcC5oCTcuMiAoQmVya2VsZXkpIDEy
LzE2LzkwCisgKglmcm9tOiBAKCMpcG1hcC5oCTcuNCAoQmVya2VsZXkpIDUvMTIvOTEKKyAqICRG
cmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9wbWFwLmggMjk5MzUwIDIwMTYt
MDUtMTAgMDk6NTg6NTFaIGtpYiAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9QTUFQX0hfCisj
ZGVmaW5lCV9NQUNISU5FX1BNQVBfSF8KKworLyoKKyAqIFBhZ2UtZGlyZWN0b3J5IGFuZCBwYWdl
LXRhYmxlIGVudHJpZXMgZm9sbG93IHRoaXMgZm9ybWF0LCB3aXRoIGEgZmV3CisgKiBvZiB0aGUg
ZmllbGRzIG5vdCBwcmVzZW50IGhlcmUgYW5kIHRoZXJlLCBkZXBlbmRpbmcgb24gYSBsb3Qgb2Yg
dGhpbmdzLgorICovCisJCQkJLyogLS0tLSBJbnRlbCBOb21lbmNsYXR1cmUgLS0tLSAqLworI2Rl
ZmluZQlYODZfUEdfVgkweDAwMQkvKiBQCVZhbGlkCQkJKi8KKyNkZWZpbmUJWDg2X1BHX1JXCTB4
MDAyCS8qIFIvVwlSZWFkL1dyaXRlCQkqLworI2RlZmluZQlYODZfUEdfVQkweDAwNAkvKiBVL1Mg
IFVzZXIvU3VwZXJ2aXNvcgkJKi8KKyNkZWZpbmUJWDg2X1BHX05DX1BXVAkweDAwOAkvKiBQV1QJ
V3JpdGUgdGhyb3VnaAkJKi8KKyNkZWZpbmUJWDg2X1BHX05DX1BDRAkweDAxMAkvKiBQQ0QJQ2Fj
aGUgZGlzYWJsZQkJKi8KKyNkZWZpbmUJWDg2X1BHX0EJMHgwMjAJLyogQQlBY2Nlc3NlZAkJKi8K
KyNkZWZpbmUJWDg2X1BHX00JMHgwNDAJLyogRAlEaXJ0eQkJCSovCisjZGVmaW5lCVg4Nl9QR19Q
UwkweDA4MAkvKiBQUwlQYWdlIHNpemUgKDA9NGssMT0yTSkJKi8KKyNkZWZpbmUJWDg2X1BHX1BU
RV9QQVQJMHgwODAJLyogUEFUCVBBVCBpbmRleAkJKi8KKyNkZWZpbmUJWDg2X1BHX0cJMHgxMDAJ
LyogRwlHbG9iYWwJCQkqLworI2RlZmluZQlYODZfUEdfQVZBSUwxCTB4MjAwCS8qICAgIC8JQXZh
aWxhYmxlIGZvciBzeXN0ZW0JKi8KKyNkZWZpbmUJWDg2X1BHX0FWQUlMMgkweDQwMAkvKiAgIDwJ
cHJvZ3JhbW1lcnMgdXNlCQkqLworI2RlZmluZQlYODZfUEdfQVZBSUwzCTB4ODAwCS8qICAgIFwJ
CQkJKi8KKyNkZWZpbmUJWDg2X1BHX1BERV9QQVQJMHgxMDAwCS8qIFBBVAlQQVQgaW5kZXgJCSov
CisjZGVmaW5lCVg4Nl9QR19OWAkoMXVsPDw2MykgLyogTm8tZXhlY3V0ZSAqLworI2RlZmluZQlY
ODZfUEdfQVZBSUwoeCkJKDF1bCA8PCAoeCkpCisKKy8qIFBhZ2UgbGV2ZWwgY2FjaGUgY29udHJv
bCBmaWVsZHMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIFBBVCB0eXBlICovCisjZGVmaW5lCVg4Nl9Q
R19QREVfQ0FDSEUgKFg4Nl9QR19QREVfUEFUIHwgWDg2X1BHX05DX1BXVCB8IFg4Nl9QR19OQ19Q
Q0QpCisjZGVmaW5lCVg4Nl9QR19QVEVfQ0FDSEUgKFg4Nl9QR19QVEVfUEFUIHwgWDg2X1BHX05D
X1BXVCB8IFg4Nl9QR19OQ19QQ0QpCisKKy8qCisgKiBJbnRlbCBleHRlbmRlZCBwYWdlIHRhYmxl
IChFUFQpIGJpdCBkZWZpbml0aW9ucy4KKyAqLworI2RlZmluZQlFUFRfUEdfUkVBRAkJMHgwMDEJ
LyogUglSZWFkCQkqLworI2RlZmluZQlFUFRfUEdfV1JJVEUJCTB4MDAyCS8qIFcJV3JpdGUJCSov
CisjZGVmaW5lCUVQVF9QR19FWEVDVVRFCQkweDAwNAkvKiBYCUV4ZWN1dGUJCSovCisjZGVmaW5l
CUVQVF9QR19JR05PUkVfUEFUCTB4MDQwCS8qIElQQVQJSWdub3JlIFBBVAkqLworI2RlZmluZQlF
UFRfUEdfUFMJCTB4MDgwCS8qIFBTCVBhZ2Ugc2l6ZQkqLworI2RlZmluZQlFUFRfUEdfQQkJMHgx
MDAJLyogQQlBY2Nlc3NlZAkqLworI2RlZmluZQlFUFRfUEdfTQkJMHgyMDAJLyogRAlEaXJ0eQkJ
Ki8KKyNkZWZpbmUJRVBUX1BHX01FTU9SWV9UWVBFKHgpCSgoeCkgPDwgMykgLyogTVQgTWVtb3J5
IFR5cGUJKi8KKworLyoKKyAqIERlZmluZSB0aGUgUEdfeHggbWFjcm9zIGluIHRlcm1zIG9mIHRo
ZSBiaXRzIG9uIHg4NiBQVEVzLgorICovCisjZGVmaW5lCVBHX1YJCVg4Nl9QR19WCisjZGVmaW5l
CVBHX1JXCQlYODZfUEdfUlcKKyNkZWZpbmUJUEdfVQkJWDg2X1BHX1UKKyNkZWZpbmUJUEdfTkNf
UFdUCVg4Nl9QR19OQ19QV1QKKyNkZWZpbmUJUEdfTkNfUENECVg4Nl9QR19OQ19QQ0QKKyNkZWZp
bmUJUEdfQQkJWDg2X1BHX0EKKyNkZWZpbmUJUEdfTQkJWDg2X1BHX00KKyNkZWZpbmUJUEdfUFMJ
CVg4Nl9QR19QUworI2RlZmluZQlQR19QVEVfUEFUCVg4Nl9QR19QVEVfUEFUCisjZGVmaW5lCVBH
X0cJCVg4Nl9QR19HCisjZGVmaW5lCVBHX0FWQUlMMQlYODZfUEdfQVZBSUwxCisjZGVmaW5lCVBH
X0FWQUlMMglYODZfUEdfQVZBSUwyCisjZGVmaW5lCVBHX0FWQUlMMwlYODZfUEdfQVZBSUwzCisj
ZGVmaW5lCVBHX1BERV9QQVQJWDg2X1BHX1BERV9QQVQKKyNkZWZpbmUJUEdfTlgJCVg4Nl9QR19O
WAorI2RlZmluZQlQR19QREVfQ0FDSEUJWDg2X1BHX1BERV9DQUNIRQorI2RlZmluZQlQR19QVEVf
Q0FDSEUJWDg2X1BHX1BURV9DQUNIRQorCisvKiBPdXIgdmFyaW91cyBpbnRlcnByZXRhdGlvbnMg
b2YgdGhlIGFib3ZlICovCisjZGVmaW5lCVBHX1cJCVg4Nl9QR19BVkFJTDMJLyogIldpcmVkIiBw
c2V1ZG9mbGFnICovCisjZGVmaW5lCVBHX01BTkFHRUQJWDg2X1BHX0FWQUlMMgorI2RlZmluZQlF
UFRfUEdfRU1VTF9WCVg4Nl9QR19BVkFJTCg1MikKKyNkZWZpbmUJRVBUX1BHX0VNVUxfUlcJWDg2
X1BHX0FWQUlMKDUzKQorI2RlZmluZQlQR19GUkFNRQkoMHgwMDBmZmZmZmZmZmZmMDAwdWwpCisj
ZGVmaW5lCVBHX1BTX0ZSQU1FCSgweDAwMGZmZmZmZmZlMDAwMDB1bCkKKworLyoKKyAqIFByb21v
dGlvbiB0byBhIDJNQiAoUERFKSBwYWdlIG1hcHBpbmcgcmVxdWlyZXMgdGhhdCB0aGUgY29ycmVz
cG9uZGluZyA0S0IKKyAqIChQVEUpIHBhZ2UgbWFwcGluZ3MgaGF2ZSBpZGVudGljYWwgc2V0dGlu
Z3MgZm9yIHRoZSBmb2xsb3dpbmcgZmllbGRzOgorICovCisjZGVmaW5lCVBHX1BURV9QUk9NT1RF
CShQR19OWCB8IFBHX01BTkFHRUQgfCBQR19XIHwgUEdfRyB8IFBHX1BURV9DQUNIRSB8IFwKKwkg
ICAgUEdfTSB8IFBHX0EgfCBQR19VIHwgUEdfUlcgfCBQR19WKQorCisvKgorICogUGFnZSBQcm90
ZWN0aW9uIEV4Y2VwdGlvbiBiaXRzCisgKi8KKworI2RlZmluZSBQR0VYX1AJCTB4MDEJLyogUHJv
dGVjdGlvbiB2aW9sYXRpb24gdnMuIG5vdCBwcmVzZW50ICovCisjZGVmaW5lIFBHRVhfVwkJMHgw
MgkvKiBkdXJpbmcgYSBXcml0ZSBjeWNsZSAqLworI2RlZmluZSBQR0VYX1UJCTB4MDQJLyogYWNj
ZXNzIGZyb20gVXNlciBtb2RlIChVUEwpICovCisjZGVmaW5lIFBHRVhfUlNWCTB4MDgJLyogcmVz
ZXJ2ZWQgUFRFIGZpZWxkIGlzIG5vbi16ZXJvICovCisjZGVmaW5lIFBHRVhfSQkJMHgxMAkvKiBk
dXJpbmcgYW4gaW5zdHJ1Y3Rpb24gZmV0Y2ggKi8KKworLyogCisgKiB1bmRlZiB0aGUgUEdfeHgg
bWFjcm9zIHRoYXQgZGVmaW5lIGJpdHMgaW4gdGhlIHJlZ3VsYXIgeDg2IFBURXMgdGhhdAorICog
aGF2ZSBhIGRpZmZlcmVudCBwb3NpdGlvbiBpbiBuZXN0ZWQgUFRFcy4gVGhpcyBpcyBkb25lIHdo
ZW4gY29tcGlsaW5nCisgKiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgYXdhcmUgb2YgdGhlIGRpZmZl
cmVuY2VzIGJldHdlZW4gcmVndWxhciB4ODYgYW5kCisgKiBuZXN0ZWQgUFRFcy4KKyAqCisgKiBU
aGUgYXBwcm9wcmlhdGUgYml0bWFzayB3aWxsIGJlIGNhbGN1bGF0ZWQgYXQgcnVudGltZSBiYXNl
ZCBvbiB0aGUgcG1hcAorICogdHlwZS4KKyAqLworI2lmZGVmIEFNRDY0X05QVF9BV0FSRQorI3Vu
ZGVmIFBHX0FWQUlMMQkJLyogWDg2X1BHX0FWQUlMMSBhbGlhc2VzIHdpdGggRVBUX1BHX00gKi8K
KyN1bmRlZiBQR19HCisjdW5kZWYgUEdfQQorI3VuZGVmIFBHX00KKyN1bmRlZiBQR19QREVfUEFU
CisjdW5kZWYgUEdfUERFX0NBQ0hFCisjdW5kZWYgUEdfUFRFX1BBVAorI3VuZGVmIFBHX1BURV9D
QUNIRQorI3VuZGVmIFBHX1JXCisjdW5kZWYgUEdfVgorI2VuZGlmCisKKy8qCisgKiBQdGUgcmVs
YXRlZCBtYWNyb3MuICBUaGlzIGlzIGNvbXBsaWNhdGVkIGJ5IGhhdmluZyB0byBkZWFsIHdpdGgK
KyAqIHRoZSBzaWduIGV4dGVuc2lvbiBvZiB0aGUgNDh0aCBiaXQuCisgKi8KKyNkZWZpbmUgS1ZB
RERSKGw0LCBsMywgbDIsIGwxKSAoIFwKKwkoKHVuc2lnbmVkIGxvbmcpLTEgPDwgNDcpIHwgXAor
CSgodW5zaWduZWQgbG9uZykobDQpIDw8IFBNTDRTSElGVCkgfCBcCisJKCh1bnNpZ25lZCBsb25n
KShsMykgPDwgUERQU0hJRlQpIHwgXAorCSgodW5zaWduZWQgbG9uZykobDIpIDw8IFBEUlNISUZU
KSB8IFwKKwkoKHVuc2lnbmVkIGxvbmcpKGwxKSA8PCBQQUdFX1NISUZUKSkKKworI2RlZmluZSBV
VkFERFIobDQsIGwzLCBsMiwgbDEpICggXAorCSgodW5zaWduZWQgbG9uZykobDQpIDw8IFBNTDRT
SElGVCkgfCBcCisJKCh1bnNpZ25lZCBsb25nKShsMykgPDwgUERQU0hJRlQpIHwgXAorCSgodW5z
aWduZWQgbG9uZykobDIpIDw8IFBEUlNISUZUKSB8IFwKKwkoKHVuc2lnbmVkIGxvbmcpKGwxKSA8
PCBQQUdFX1NISUZUKSkKKworLyoKKyAqIE51bWJlciBvZiBrZXJuZWwgUE1MNCBzbG90cy4gIENh
biBiZSBhbnl3aGVyZSBmcm9tIDEgdG8gNjQgb3Igc28sCisgKiBidXQgc2V0dGluZyBpdCBsYXJn
ZXIgdGhhbiBORE1QTUw0RSBtYWtlcyBubyBzZW5zZS4KKyAqCisgKiBFYWNoIHNsb3QgcHJvdmlk
ZXMgLjUgVEIgb2Yga2VybmVsIHZpcnR1YWwgc3BhY2UuCisgKi8KKyNkZWZpbmUgTktQTUw0RQkJ
NAorCisjZGVmaW5lCU5VUE1MNEUJCShOUE1MNEVQRy8yKQkvKiBudW1iZXIgb2YgdXNlcmxhbmQg
UE1MNCBwYWdlcyAqLworI2RlZmluZQlOVVBEUEUJCShOVVBNTDRFKk5QRFBFUEcpLyogbnVtYmVy
IG9mIHVzZXJsYW5kIFBEUCBwYWdlcyAqLworI2RlZmluZQlOVVBERQkJKE5VUERQRSpOUERFUEcp
CS8qIG51bWJlciBvZiB1c2VybGFuZCBQRCBlbnRyaWVzICovCisKKy8qCisgKiBORE1QTUw0RSBp
cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgUE1MNCBlbnRyaWVzIHRoYXQgd2lsbCBiZQorICogdXNl
ZCB0byBpbXBsZW1lbnQgdGhlIGRpcmVjdCBtYXAuICBJdCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdv
LAorICogYW5kIHNob3VsZCBnZW5lcmFsbHkgZXhjZWVkIE5LUE1MNEUuICBUaGUgbWF4aW11bSBw
b3NzaWJsZQorICogdmFsdWUgaXMgNjQ7IHVzaW5nIDEyOCB3aWxsIG1ha2UgdGhlIGRpcmVjdCBt
YXAgaW50cnVkZSBpbnRvCisgKiB0aGUgcmVjdXJzaXZlIHBhZ2UgdGFibGUgbWFwLgorICovCisj
ZGVmaW5lCU5ETVBNTDRFCTgKKworLyoKKyAqIFRoZXNlIHZhbHVlcyBjb250cm9sIHRoZSBsYXlv
dXQgb2YgdmlydHVhbCBtZW1vcnkuICBUaGUgc3RhcnRpbmcgYWRkcmVzcworICogb2YgdGhlIGRp
cmVjdCBtYXAsIHdoaWNoIGlzIGNvbnRyb2xsZWQgYnkgRE1QTUw0SSwgbXVzdCBiZSBhIG11bHRp
cGxlIG9mCisgKiBpdHMgc2l6ZS4gIChTZWUgdGhlIFBIWVNfVE9fRE1BUCgpIGFuZCBETUFQX1RP
X1BIWVMoKSBtYWNyb3MuKQorICoKKyAqIE5vdGU6IEtQTUw0SSBpcyB0aGUgaW5kZXggb2YgdGhl
IChzaW5nbGUpIGxldmVsIDQgcGFnZSB0aGF0IG1hcHMKKyAqIHRoZSBLVkEgdGhhdCBob2xkcyBL
RVJOQkFTRSwgd2hpbGUgS1BNTDRCQVNFIGlzIHRoZSBpbmRleCBvZiB0aGUKKyAqIGZpcnN0IGxl
dmVsIDQgcGFnZSB0aGF0IG1hcHMgVk1fTUlOX0tFUk5FTF9BRERSRVNTLiAgSWYgTktQTUw0RQor
ICogaXMgMSwgdGhlc2UgYXJlIHRoZSBzYW1lLCBvdGhlcndpc2UgS1BNTDRCQVNFIDwgS1BNTDRJ
IGFuZCBleHRyYQorICogbGV2ZWwgNCBQREVzIGFyZSBuZWVkZWQgdG8gbWFwIGZyb20gVk1fTUlO
X0tFUk5FTF9BRERSRVNTIHVwIHRvCisgKiBLRVJOQkFTRS4KKyAqCisgKiAoS1BNTDRJIGNvbWJp
bmVzIHdpdGggS1BEUEkgdG8gY2hvb3NlIHdoZXJlIEtFUk5CQVNFIHN0YXJ0cy4KKyAqIE9yLCBp
biBvdGhlciB3b3JkcywgS1BNTDRJIHByb3ZpZGVzIGJpdHMgMzkuLjQ3IG9mIEtFUk5CQVNFLAor
ICogYW5kIEtQRFBJIHByb3ZpZGVzIGJpdHMgMzAuLjM4LikKKyAqLworI2RlZmluZQlQTUw0UE1M
NEkJKE5QTUw0RVBHLzIpCS8qIEluZGV4IG9mIHJlY3Vyc2l2ZSBwbWw0IG1hcHBpbmcgKi8KKwor
I2RlZmluZQlLUE1MNEJBU0UJKE5QTUw0RVBHLU5LUE1MNEUpIC8qIEtWTSBhdCBoaWdoZXN0IGFk
ZHJlc3NlcyAqLworI2RlZmluZQlETVBNTDRJCQlyb3VuZGRvd24oS1BNTDRCQVNFLU5ETVBNTDRF
LCBORE1QTUw0RSkgLyogQmVsb3cgS1ZNICovCisKKyNkZWZpbmUJS1BNTDRJCQkoTlBNTDRFUEct
MSkKKyNkZWZpbmUJS1BEUEkJCShOUERQRVBHLTIpCS8qIGtlcm5iYXNlIGF0IC0yR0IgKi8KKwor
LyoKKyAqIFhYWCBkb2Vzbid0IHJlYWxseSBiZWxvbmcgaGVyZSBJIGd1ZXNzLi4uCisgKi8KKyNk
ZWZpbmUgSVNBX0hPTEVfU1RBUlQgICAgMHhhMDAwMAorI2RlZmluZSBJU0FfSE9MRV9MRU5HVEgg
KDB4MTAwMDAwLUlTQV9IT0xFX1NUQVJUKQorCisjZGVmaW5lCVBNQVBfUENJRF9OT05FCQkweGZm
ZmZmZmZmCisjZGVmaW5lCVBNQVBfUENJRF9LRVJOCQkwCisjZGVmaW5lCVBNQVBfUENJRF9PVkVS
TUFYCTB4MTAwMAorCisjaWZuZGVmIExPQ09SRQorCisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Cisj
aW5jbHVkZSA8c3lzL19jcHVzZXQuaD4KKyNpbmNsdWRlIDxzeXMvX2xvY2suaD4KKyNpbmNsdWRl
IDxzeXMvX211dGV4Lmg+CisKKyNpbmNsdWRlIDx2bS9fdm1fcmFkaXguaD4KKwordHlwZWRlZiB1
X2ludDY0X3QgcGRfZW50cnlfdDsKK3R5cGVkZWYgdV9pbnQ2NF90IHB0X2VudHJ5X3Q7Cit0eXBl
ZGVmIHVfaW50NjRfdCBwZHBfZW50cnlfdDsKK3R5cGVkZWYgdV9pbnQ2NF90IHBtbDRfZW50cnlf
dDsKKworLyoKKyAqIEFkZHJlc3Mgb2YgY3VycmVudCBhZGRyZXNzIHNwYWNlIHBhZ2UgdGFibGUg
bWFwcyBhbmQgZGlyZWN0b3JpZXMuCisgKi8KKyNpZmRlZiBfS0VSTkVMCisjZGVmaW5lCWFkZHJf
UFRtYXAJKEtWQUREUihQTUw0UE1MNEksIDAsIDAsIDApKQorI2RlZmluZQlhZGRyX1BEbWFwCShL
VkFERFIoUE1MNFBNTDRJLCBQTUw0UE1MNEksIDAsIDApKQorI2RlZmluZQlhZGRyX1BEUG1hcAko
S1ZBRERSKFBNTDRQTUw0SSwgUE1MNFBNTDRJLCBQTUw0UE1MNEksIDApKQorI2RlZmluZQlhZGRy
X1BNTDRtYXAJKEtWQUREUihQTUw0UE1MNEksIFBNTDRQTUw0SSwgUE1MNFBNTDRJLCBQTUw0UE1M
NEkpKQorI2RlZmluZQlhZGRyX1BNTDRwbWw0ZQkoYWRkcl9QTUw0bWFwICsgKFBNTDRQTUw0SSAq
IHNpemVvZihwbWw0X2VudHJ5X3QpKSkKKyNkZWZpbmUJUFRtYXAJCSgocHRfZW50cnlfdCAqKShh
ZGRyX1BUbWFwKSkKKyNkZWZpbmUJUERtYXAJCSgocGRfZW50cnlfdCAqKShhZGRyX1BEbWFwKSkK
KyNkZWZpbmUJUERQbWFwCQkoKHBkX2VudHJ5X3QgKikoYWRkcl9QRFBtYXApKQorI2RlZmluZQlQ
TUw0bWFwCQkoKHBkX2VudHJ5X3QgKikoYWRkcl9QTUw0bWFwKSkKKyNkZWZpbmUJUE1MNHBtbDRl
CSgocGRfZW50cnlfdCAqKShhZGRyX1BNTDRwbWw0ZSkpCisKK2V4dGVybiBpbnQgbmtwdDsJCS8q
IEluaXRpYWwgbnVtYmVyIG9mIGtlcm5lbCBwYWdlIHRhYmxlcyAqLworZXh0ZXJuIHVfaW50NjRf
dCBLUERQcGh5czsJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBrZXJuZWwgbGV2ZWwgMyAqLworZXh0
ZXJuIHVfaW50NjRfdCBLUE1MNHBoeXM7CS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2Yga2VybmVsIGxl
dmVsIDQgKi8KKworLyoKKyAqIHZpcnR1YWwgYWRkcmVzcyB0byBwYWdlIHRhYmxlIGVudHJ5IGFu
ZAorICogdG8gcGh5c2ljYWwgYWRkcmVzcy4KKyAqIE5vdGU6IHRoZXNlIHdvcmsgcmVjdXJzaXZl
bHksIHRodXMgdnRvcHRlIG9mIGEgcHRlIHdpbGwgZ2l2ZQorICogdGhlIGNvcnJlc3BvbmRpbmcg
cGRlIHRoYXQgaW4gdHVybiBtYXBzIGl0LgorICovCitwdF9lbnRyeV90ICp2dG9wdGUodm1fb2Zm
c2V0X3QpOworI2RlZmluZQl2dG9waHlzKHZhKQlwbWFwX2tleHRyYWN0KCgodm1fb2Zmc2V0X3Qp
ICh2YSkpKQorCisjZGVmaW5lCXB0ZV9sb2FkX3N0b3JlKHB0ZXAsIHB0ZSkJYXRvbWljX3N3YXBf
bG9uZyhwdGVwLCBwdGUpCisjZGVmaW5lCXB0ZV9sb2FkX2NsZWFyKHB0ZXApCQlhdG9taWNfc3dh
cF9sb25nKHB0ZXAsIDApCisjZGVmaW5lCXB0ZV9zdG9yZShwdGVwLCBwdGUpIGRvIHsgXAorCSoo
dV9sb25nICopKHB0ZXApID0gKHVfbG9uZykocHRlKTsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUJ
cHRlX2NsZWFyKHB0ZXApCQkJcHRlX3N0b3JlKHB0ZXAsIDApCisKKyNkZWZpbmUJcGRlX3N0b3Jl
KHBkZXAsIHBkZSkJCXB0ZV9zdG9yZShwZGVwLCBwZGUpCisKK2V4dGVybiBwdF9lbnRyeV90IHBn
X254OworCisjZW5kaWYgLyogX0tFUk5FTCAqLworCisvKgorICogUG1hcCBzdHVmZgorICovCitz
dHJ1Y3QJcHZfZW50cnk7CitzdHJ1Y3QJcHZfY2h1bms7CisKKy8qCisgKiBMb2NrcworICogKHAp
IFBWIGxpc3QgbG9jaworICovCitzdHJ1Y3QgbWRfcGFnZSB7CisJVEFJTFFfSEVBRCgsIHB2X2Vu
dHJ5KQlwdl9saXN0OyAgLyogKHApICovCisJaW50CQkJcHZfZ2VuOyAgIC8qIChwKSAqLworCWlu
dAkJCXBhdF9tb2RlOworfTsKKworZW51bSBwbWFwX3R5cGUgeworCVBUX1g4NiwJCQkvKiByZWd1
bGFyIHg4NiBwYWdlIHRhYmxlcyAqLworCVBUX0VQVCwJCQkvKiBJbnRlbCdzIG5lc3RlZCBwYWdl
IHRhYmxlcyAqLworCVBUX1JWSSwJCQkvKiBBTUQncyBuZXN0ZWQgcGFnZSB0YWJsZXMgKi8KK307
CisKK3N0cnVjdCBwbWFwX3BjaWRzIHsKKwl1aW50MzJfdAlwbV9wY2lkOworCXVpbnQzMl90CXBt
X2dlbjsKK307CisKKy8qCisgKiBUaGUga2VybmVsIHZpcnR1YWwgYWRkcmVzcyAoS1ZBKSBvZiB0
aGUgbGV2ZWwgNCBwYWdlIHRhYmxlIHBhZ2UgaXMgYWx3YXlzCisgKiB3aXRoaW4gdGhlIGRpcmVj
dCBtYXAgKERNQVApIHJlZ2lvbi4KKyAqLworc3RydWN0IHBtYXAgeworCXN0cnVjdCBtdHgJCXBt
X210eDsKKwlwbWw0X2VudHJ5X3QJCSpwbV9wbWw0OwkvKiBLVkEgb2YgbGV2ZWwgNCBwYWdlIHRh
YmxlICovCisJdWludDY0X3QJCXBtX2NyMzsKKwlUQUlMUV9IRUFEKCxwdl9jaHVuaykJcG1fcHZj
aHVuazsJLyogbGlzdCBvZiBtYXBwaW5ncyBpbiBwbWFwICovCisJY3B1c2V0X3QJCXBtX2FjdGl2
ZTsJLyogYWN0aXZlIG9uIGNwdXMgKi8KKwllbnVtIHBtYXBfdHlwZQkJcG1fdHlwZTsJLyogcmVn
dWxhciBvciBuZXN0ZWQgdGFibGVzICovCisJc3RydWN0IHBtYXBfc3RhdGlzdGljcwlwbV9zdGF0
czsJLyogcG1hcCBzdGF0aXN0aWNzICovCisJc3RydWN0IHZtX3JhZGl4CQlwbV9yb290OwkvKiBz
cGFyZSBwYWdlIHRhYmxlIHBhZ2VzICovCisJbG9uZwkJCXBtX2VwdGdlbjsJLyogRVBUIHBtYXAg
Z2VuZXJhdGlvbiBpZCAqLworCWludAkJCXBtX2ZsYWdzOworCXN0cnVjdCBwbWFwX3BjaWRzCXBt
X3BjaWRzW01BWENQVV07Cit9OworCisvKiBmbGFncyAqLworI2RlZmluZQlQTUFQX05FU1RFRF9J
UElNQVNLCTB4ZmYKKyNkZWZpbmUJUE1BUF9QREVfU1VQRVJQQUdFCSgxIDw8IDgpCS8qIHN1cHBv
cnRzIDJNQiBzdXBlcnBhZ2VzICovCisjZGVmaW5lCVBNQVBfRU1VTEFURV9BRF9CSVRTCSgxIDw8
IDkpCS8qIG5lZWRzIEEvRCBiaXRzIGVtdWxhdGlvbiAqLworI2RlZmluZQlQTUFQX1NVUFBPUlRT
X0VYRUNfT05MWQkoMSA8PCAxMCkJLyogZXhlY3V0ZSBvbmx5IG1hcHBpbmdzIG9rICovCisKK3R5
cGVkZWYgc3RydWN0IHBtYXAJKnBtYXBfdDsKKworI2lmZGVmIF9LRVJORUwKK2V4dGVybiBzdHJ1
Y3QgcG1hcAlrZXJuZWxfcG1hcF9zdG9yZTsKKyNkZWZpbmUga2VybmVsX3BtYXAJKCZrZXJuZWxf
cG1hcF9zdG9yZSkKKworI2RlZmluZQlQTUFQX0xPQ0socG1hcCkJCW10eF9sb2NrKCYocG1hcCkt
PnBtX210eCkKKyNkZWZpbmUJUE1BUF9MT0NLX0FTU0VSVChwbWFwLCB0eXBlKSBcCisJCQkJbXR4
X2Fzc2VydCgmKHBtYXApLT5wbV9tdHgsICh0eXBlKSkKKyNkZWZpbmUJUE1BUF9MT0NLX0RFU1RS
T1kocG1hcCkJbXR4X2Rlc3Ryb3koJihwbWFwKS0+cG1fbXR4KQorI2RlZmluZQlQTUFQX0xPQ0tf
SU5JVChwbWFwKQltdHhfaW5pdCgmKHBtYXApLT5wbV9tdHgsICJwbWFwIiwgXAorCQkJCSAgICBO
VUxMLCBNVFhfREVGIHwgTVRYX0RVUE9LKQorI2RlZmluZQlQTUFQX0xPQ0tFRChwbWFwKQltdHhf
b3duZWQoJihwbWFwKS0+cG1fbXR4KQorI2RlZmluZQlQTUFQX01UWChwbWFwKQkJKCYocG1hcCkt
PnBtX210eCkKKyNkZWZpbmUJUE1BUF9UUllMT0NLKHBtYXApCW10eF90cnlsb2NrKCYocG1hcCkt
PnBtX210eCkKKyNkZWZpbmUJUE1BUF9VTkxPQ0socG1hcCkJbXR4X3VubG9jaygmKHBtYXApLT5w
bV9tdHgpCisKK2ludAlwbWFwX3Bpbml0X3R5cGUocG1hcF90IHBtYXAsIGVudW0gcG1hcF90eXBl
IHBtX3R5cGUsIGludCBmbGFncyk7CitpbnQJcG1hcF9lbXVsYXRlX2FjY2Vzc2VkX2RpcnR5KHBt
YXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgaW50IGZ0eXBlKTsKKyNlbmRpZgorCisvKgorICog
Rm9yIGVhY2ggdm1fcGFnZV90LCB0aGVyZSBpcyBhIGxpc3Qgb2YgYWxsIGN1cnJlbnRseSB2YWxp
ZCB2aXJ0dWFsCisgKiBtYXBwaW5ncyBvZiB0aGF0IHBhZ2UuICBBbiBlbnRyeSBpcyBhIHB2X2Vu
dHJ5X3QsIHRoZSBsaXN0IGlzIHB2X2xpc3QuCisgKi8KK3R5cGVkZWYgc3RydWN0IHB2X2VudHJ5
IHsKKwl2bV9vZmZzZXRfdAlwdl92YTsJCS8qIHZpcnR1YWwgYWRkcmVzcyBmb3IgbWFwcGluZyAq
LworCVRBSUxRX0VOVFJZKHB2X2VudHJ5KQlwdl9uZXh0OworfSAqcHZfZW50cnlfdDsKKworLyoK
KyAqIHB2X2VudHJpZXMgYXJlIGFsbG9jYXRlZCBpbiBjaHVua3MgcGVyLXByb2Nlc3MuICBUaGlz
IGF2b2lkcyB0aGUKKyAqIG5lZWQgdG8gdHJhY2sgcGVyLXBtYXAgYXNzaWdubWVudHMuCisgKi8K
KyNkZWZpbmUJX05QQ00JMworI2RlZmluZQlfTlBDUFYJMTY4CitzdHJ1Y3QgcHZfY2h1bmsgewor
CXBtYXBfdAkJCXBjX3BtYXA7CisJVEFJTFFfRU5UUlkocHZfY2h1bmspCXBjX2xpc3Q7CisJdWlu
dDY0X3QJCXBjX21hcFtfTlBDTV07CS8qIGJpdG1hcDsgMSA9IGZyZWUgKi8KKwlUQUlMUV9FTlRS
WShwdl9jaHVuaykJcGNfbHJ1OworCXN0cnVjdCBwdl9lbnRyeQkJcGNfcHZlbnRyeVtfTlBDUFZd
OworfTsKKworI2lmZGVmCV9LRVJORUwKKworZXh0ZXJuIGNhZGRyX3QJQ0FERFIxOworZXh0ZXJu
IHB0X2VudHJ5X3QgKkNNQVAxOworZXh0ZXJuIHZtX3BhZGRyX3QgcGh5c19hdmFpbFtdOworZXh0
ZXJuIHZtX3BhZGRyX3QgZHVtcF9hdmFpbFtdOworZXh0ZXJuIHZtX29mZnNldF90IHZpcnR1YWxf
YXZhaWw7CitleHRlcm4gdm1fb2Zmc2V0X3QgdmlydHVhbF9lbmQ7CitleHRlcm4gdm1fcGFkZHJf
dCBkbWFwbGltaXQ7CisKKyNkZWZpbmUJcG1hcF9wYWdlX2dldF9tZW1hdHRyKG0pCSgodm1fbWVt
YXR0cl90KShtKS0+bWQucGF0X21vZGUpCisjZGVmaW5lCXBtYXBfcGFnZV9pc193cml0ZV9tYXBw
ZWQobSkJKCgobSktPmFmbGFncyAmIFBHQV9XUklURUFCTEUpICE9IDApCisjZGVmaW5lCXBtYXBf
dW5tYXBiaW9zKHZhLCBzeikJcG1hcF91bm1hcGRldigodmEpLCAoc3opKQorCitzdHJ1Y3QgdGhy
ZWFkOworCit2b2lkCXBtYXBfYWN0aXZhdGVfc3coc3RydWN0IHRocmVhZCAqKTsKK3ZvaWQJcG1h
cF9ib290c3RyYXAodm1fcGFkZHJfdCAqKTsKK2ludAlwbWFwX2NoYW5nZV9hdHRyKHZtX29mZnNl
dF90LCB2bV9zaXplX3QsIGludCk7Cit2b2lkCXBtYXBfZGVtb3RlX0RNQVAodm1fcGFkZHJfdCBi
YXNlLCB2bV9zaXplX3QgbGVuLCBib29sZWFuX3QgaW52YWxpZGF0ZSk7Cit2b2lkCXBtYXBfaW5p
dF9wYXQodm9pZCk7Cit2b2lkCXBtYXBfa2VudGVyKHZtX29mZnNldF90IHZhLCB2bV9wYWRkcl90
IHBhKTsKK3ZvaWQJKnBtYXBfa2VudGVyX3RlbXBvcmFyeSh2bV9wYWRkcl90IHBhLCBpbnQgaSk7
Cit2bV9wYWRkcl90IHBtYXBfa2V4dHJhY3Qodm1fb2Zmc2V0X3QpOwordm9pZAlwbWFwX2tyZW1v
dmUodm1fb2Zmc2V0X3QpOwordm9pZAkqcG1hcF9tYXBiaW9zKHZtX3BhZGRyX3QsIHZtX3NpemVf
dCk7Cit2b2lkCSpwbWFwX21hcGRldih2bV9wYWRkcl90LCB2bV9zaXplX3QpOwordm9pZAkqcG1h
cF9tYXBkZXZfYXR0cih2bV9wYWRkcl90LCB2bV9zaXplX3QsIGludCk7Citib29sZWFuX3QgcG1h
cF9wYWdlX2lzX21hcHBlZCh2bV9wYWdlX3QgbSk7Cit2b2lkCXBtYXBfcGFnZV9zZXRfbWVtYXR0
cih2bV9wYWdlX3QgbSwgdm1fbWVtYXR0cl90IG1hKTsKK3ZvaWQJcG1hcF91bm1hcGRldih2bV9v
ZmZzZXRfdCwgdm1fc2l6ZV90KTsKK3ZvaWQJcG1hcF9pbnZhbGlkYXRlX3BhZ2UocG1hcF90LCB2
bV9vZmZzZXRfdCk7Cit2b2lkCXBtYXBfaW52YWxpZGF0ZV9yYW5nZShwbWFwX3QsIHZtX29mZnNl
dF90LCB2bV9vZmZzZXRfdCk7Cit2b2lkCXBtYXBfaW52YWxpZGF0ZV9hbGwocG1hcF90KTsKK3Zv
aWQJcG1hcF9pbnZhbGlkYXRlX2NhY2hlKHZvaWQpOwordm9pZAlwbWFwX2ludmFsaWRhdGVfY2Fj
aGVfcGFnZXModm1fcGFnZV90ICpwYWdlcywgaW50IGNvdW50KTsKK3ZvaWQJcG1hcF9pbnZhbGlk
YXRlX2NhY2hlX3JhbmdlKHZtX29mZnNldF90IHN2YSwgdm1fb2Zmc2V0X3QgZXZhLAorCSAgICBi
b29sZWFuX3QgZm9yY2UpOwordm9pZAlwbWFwX2dldF9tYXBwaW5nKHBtYXBfdCBwbWFwLCB2bV9v
ZmZzZXRfdCB2YSwgdWludDY0X3QgKnB0ciwgaW50ICpudW0pOworYm9vbGVhbl90IHBtYXBfbWFw
X2lvX3RyYW5zaWVudCh2bV9wYWdlX3QgKiwgdm1fb2Zmc2V0X3QgKiwgaW50LCBib29sZWFuX3Qp
Owordm9pZAlwbWFwX3VubWFwX2lvX3RyYW5zaWVudCh2bV9wYWdlX3QgKiwgdm1fb2Zmc2V0X3Qg
KiwgaW50LCBib29sZWFuX3QpOworI2VuZGlmIC8qIF9LRVJORUwgKi8KKworI2VuZGlmIC8qICFM
T0NPUkUgKi8KKworI2VuZGlmIC8qICFfTUFDSElORV9QTUFQX0hfICovCmRpZmYgLXUgLXIgLU4g
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wbWNfbWRlcC5oIC91c3Ivc3JjL3N5
cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BtY19tZGVwLmgKLS0tIHVzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvcG1jX21kZXAuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAw
MCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcG1jX21kZXAu
aAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDE0MSBAQAor
LyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOCBKb3NlcGggS29zaHkKKyAqIENvcHlyaWdo
dCAoYykgMjAwNyBUaGUgRnJlZUJTRCBGb3VuZGF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFBvcnRpb25zIG9mIHRoaXMgc29mdHdhcmUgd2VyZSBkZXZlbG9wZWQgYnkgQS4g
Sm9zZXBoIEtvc2h5IHVuZGVyCisgKiBzcG9uc29yc2hpcCBmcm9tIHRoZSBGcmVlQlNEIEZvdW5k
YXRpb24gYW5kIEdvb2dsZSwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAq
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisg
KiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor
ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1k
NjQvaW5jbHVkZS9wbWNfbWRlcC5oIDI4NTA0MSAyMDE1LTA3LTAyIDE0OjM3OjIxWiBraWIgJAor
ICovCisKKy8qIE1hY2hpbmUgZGVwZW5kZW50IGludGVyZmFjZXMgKi8KKworI2lmbmRlZiBfTUFD
SElORV9QTUNfTURFUF9ICisjZGVmaW5lCV9NQUNISU5FX1BNQ19NREVQX0ggMQorCisjaWZkZWYJ
X0tFUk5FTAorc3RydWN0IHBtY19tZGVwOworI2VuZGlmCisKKyNpbmNsdWRlIDxkZXYvaHdwbWMv
aHdwbWNfYW1kLmg+CisjaW5jbHVkZSA8ZGV2L2h3cG1jL2h3cG1jX2NvcmUuaD4KKyNpbmNsdWRl
IDxkZXYvaHdwbWMvaHdwbWNfcGl2Lmg+CisjaW5jbHVkZSA8ZGV2L2h3cG1jL2h3cG1jX3RzYy5o
PgorI2luY2x1ZGUgPGRldi9od3BtYy9od3BtY191bmNvcmUuaD4KKworLyoKKyAqIEludGVsIHBy
b2Nlc3NvcnMgaW1wbGVtZW50aW5nIFYyIGFuZCBsYXRlciBvZiB0aGUgSW50ZWwgcGVyZm9ybWFu
Y2UKKyAqIG1lYXN1cmVtZW50IGFyY2hpdGVjdHVyZSBoYXZlIFBNQ3Mgb2YgdGhlIGZvbGxvd2lu
ZyBjbGFzc2VzOiBUU0MsCisgKiBJQUYsIElBUCwgVUNGIGFuZCBVQ1AuCisgKi8KKyNkZWZpbmUJ
UE1DX01ERVBfQ0xBU1NfSU5ERVhfVFNDCTEKKyNkZWZpbmUJUE1DX01ERVBfQ0xBU1NfSU5ERVhf
SzgJCTIKKyNkZWZpbmUJUE1DX01ERVBfQ0xBU1NfSU5ERVhfUDQJCTIKKyNkZWZpbmUJUE1DX01E
RVBfQ0xBU1NfSU5ERVhfSUFQCTIKKyNkZWZpbmUJUE1DX01ERVBfQ0xBU1NfSU5ERVhfSUFGCTMK
KyNkZWZpbmUJUE1DX01ERVBfQ0xBU1NfSU5ERVhfVUNQCTQKKyNkZWZpbmUJUE1DX01ERVBfQ0xB
U1NfSU5ERVhfVUNGCTUKKworLyoKKyAqIE9uIHRoZSBhbWQ2NCBwbGF0Zm9ybSB3ZSBzdXBwb3J0
IHRoZSBmb2xsb3dpbmcgUE1Dcy4KKyAqCisgKiBUU0MJCVRoZSB0aW1lc3RhbXAgY291bnRlcgor
ICogSzgJCUFNRCBBdGhsb242NCBhbmQgT3B0ZXJvbiBQTUNzIGluIDY0IGJpdCBtb2RlLgorICog
UElWCQlJbnRlbCBQNC9IVFQgYW5kIFA0L0VNVDY0CisgKiBJQVAJCUludGVsIENvcmUvQ29yZTIv
QXRvbSBDUFVzIGluIDY0IGJpdHMgbW9kZS4KKyAqIElBRgkJSW50ZWwgZml4ZWQtZnVuY3Rpb24g
UE1DcyBpbiBDb3JlMiBhbmQgbGF0ZXIgQ1BVcy4KKyAqIFVDUAkJSW50ZWwgVW5jb3JlIHByb2dy
YW1tYWJsZSBQTUNzLgorICogVUNGCQlJbnRlbCBVbmNvcmUgZml4ZWQtZnVuY3Rpb24gUE1Dcy4K
KyAqLworCit1bmlvbiBwbWNfbWRfb3BfcG1jYWxsb2NhdGUgIHsKKwlzdHJ1Y3QgcG1jX21kX2Ft
ZF9vcF9wbWNhbGxvY2F0ZQlwbV9hbWQ7CisJc3RydWN0IHBtY19tZF9pYWZfb3BfcG1jYWxsb2Nh
dGUJcG1faWFmOworCXN0cnVjdCBwbWNfbWRfaWFwX29wX3BtY2FsbG9jYXRlCXBtX2lhcDsKKwlz
dHJ1Y3QgcG1jX21kX3VjZl9vcF9wbWNhbGxvY2F0ZQlwbV91Y2Y7CisJc3RydWN0IHBtY19tZF91
Y3Bfb3BfcG1jYWxsb2NhdGUJcG1fdWNwOworCXN0cnVjdCBwbWNfbWRfcDRfb3BfcG1jYWxsb2Nh
dGUJCXBtX3A0OworCXVpbnQ2NF90CQkJCV9fcGFkWzRdOworfTsKKworLyogTG9nZ2luZyAqLwor
I2RlZmluZQlQTUNMT0dfUkVBREFERFIJCVBNQ0xPR19SRUFENjQKKyNkZWZpbmUJUE1DTE9HX0VN
SVRBRERSCQlQTUNMT0dfRU1JVDY0CisKKyNpZmRlZglfS0VSTkVMCisKK3VuaW9uIHBtY19tZF9w
bWMgeworCXN0cnVjdCBwbWNfbWRfYW1kX3BtYwlwbV9hbWQ7CisJc3RydWN0IHBtY19tZF9pYWZf
cG1jCXBtX2lhZjsKKwlzdHJ1Y3QgcG1jX21kX2lhcF9wbWMJcG1faWFwOworCXN0cnVjdCBwbWNf
bWRfdWNmX3BtYwlwbV91Y2Y7CisJc3RydWN0IHBtY19tZF91Y3BfcG1jCXBtX3VjcDsKKwlzdHJ1
Y3QgcG1jX21kX3A0X3BtYwlwbV9wNDsKK307CisKKyNkZWZpbmUJUE1DX1RSQVBGUkFNRV9UT19Q
QyhURikJKChURiktPnRmX3JpcCkKKyNkZWZpbmUJUE1DX1RSQVBGUkFNRV9UT19GUChURikJKChU
RiktPnRmX3JicCkKKyNkZWZpbmUJUE1DX1RSQVBGUkFNRV9UT19VU0VSX1NQKFRGKQkoKFRGKS0+
dGZfcnNwKQorI2RlZmluZQlQTUNfVFJBUEZSQU1FX1RPX0tFUk5FTF9TUChURikJKChURiktPnRm
X3JzcCkKKworI2RlZmluZQlQTUNfQVRfRlVOQ1RJT05fUFJPTE9HVUVfUFVTSF9CUChJKQkJXAor
CSgoKEkpICYgMHhmZmZmZmZmZikgPT0gMHhlNTg5NDg1NSkgLyogcHVzaHEgJXJicDsgbW92cSAl
cnNwLCVyYnAgKi8KKyNkZWZpbmUJUE1DX0FUX0ZVTkNUSU9OX1BST0xPR1VFX01PVl9TUF9CUChJ
KQkJXAorCSgoKEkpICYgMHgwMGZmZmZmZikgPT0gMHgwMGU1ODk0OCkgLyogbW92cSAlcnNwLCVy
YnAgKi8KKyNkZWZpbmUJUE1DX0FUX0ZVTkNUSU9OX0VQSUxPR1VFX1JFVChJKQkJCVwKKwkoKChJ
KSAmIDB4RkYpID09IDB4QzMpCQkgICAvKiByZXQgKi8KKworI2RlZmluZQlQTUNfSU5fVFJBUF9I
QU5ETEVSKFBDKSAJCQlcCisJKChQQykgPj0gKHVpbnRwdHJfdCkgc3RhcnRfZXhjZXB0aW9ucyAm
JglcCisJIChQQykgPCAodWludHB0cl90KSBlbmRfZXhjZXB0aW9ucykKKworI2RlZmluZQlQTUNf
SU5fS0VSTkVMX1NUQUNLKFMsU1RBUlQsRU5EKQkJXAorCSgoUykgPj0gKFNUQVJUKSAmJiAoUykg
PCAoRU5EKSkKKyNkZWZpbmUJUE1DX0lOX0tFUk5FTCh2YSkgSU5LRVJORUwodmEpCisKKyNkZWZp
bmUJUE1DX0lOX1VTRVJTUEFDRSh2YSkgKCh2YSkgPD0gVk1fTUFYVVNFUl9BRERSRVNTKQorCisv
KiBCdWlsZCBhIGZha2Uga2VybmVsIHRyYXBmcmFtZSBmcm9tIGN1cnJlbnQgaW5zdHJ1Y3Rpb24g
cG9pbnRlci4gKi8KKyNkZWZpbmUgUE1DX0ZBS0VfVFJBUEZSQU1FKFRGKQkJCQkJCVwKKwlkbyB7
CQkJCQkJCQlcCisJKFRGKS0+dGZfY3MgPSAwOyAoVEYpLT50Zl9yZmxhZ3MgPSAwOwkJCQlcCisJ
X19hc20gX192b2xhdGlsZSgibW92cSAlJXJicCwlMCIgOiAiPXIiICgoVEYpLT50Zl9yYnApKTsJ
XAorCV9fYXNtIF9fdm9sYXRpbGUoIm1vdnEgJSVyc3AsJTAiIDogIj1yIiAoKFRGKS0+dGZfcnNw
KSk7CVwKKwlfX2FzbSBfX3ZvbGF0aWxlKCJjYWxsIDFmIFxuXHQxOiBwb3AgJTAiIDogIj1yIigo
VEYpLT50Zl9yaXApKTsJXAorCX0gd2hpbGUgKDApCisKKy8qCisgKiBQcm90b3R5cGVzCisgKi8K
Kwordm9pZAlzdGFydF9leGNlcHRpb25zKHZvaWQpLCBlbmRfZXhjZXB0aW9ucyh2b2lkKTsKKwor
c3RydWN0IHBtY19tZGVwICpwbWNfYW1kX2luaXRpYWxpemUodm9pZCk7Cit2b2lkCXBtY19hbWRf
ZmluYWxpemUoc3RydWN0IHBtY19tZGVwICpfbWQpOworc3RydWN0IHBtY19tZGVwICpwbWNfaW50
ZWxfaW5pdGlhbGl6ZSh2b2lkKTsKK3ZvaWQJcG1jX2ludGVsX2ZpbmFsaXplKHN0cnVjdCBwbWNf
bWRlcCAqX21kKTsKKworI2VuZGlmIC8qIF9LRVJORUwgKi8KKyNlbmRpZiAvKiBfTUFDSElORV9Q
TUNfTURFUF9IICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj
aGluZS9wcGlyZWcuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wcGlyZWcu
aAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wcGlyZWcuaAkxOTcwLTAx
LTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL21hY2hpbmUvcHBpcmVnLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAK
QEAgLTAsMCArMSw0OSBAQAorLyotCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgVEFLQUhBU0hJIFlv
c2hpaGlyby4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAq
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisg
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2
NC9pbmNsdWRlL3BwaXJlZy5oIDE0NjIxMSAyMDA1LTA1LTE0IDA5OjEwOjAyWiBueWFuICQKKyAq
LworCisjaWZuZGVmIF9NQUNISU5FX1BQSVJFR19IXworI2RlZmluZSBfTUFDSElORV9QUElSRUdf
SF8KKworI2lmZGVmIF9LRVJORUwKKworI2RlZmluZQlJT19QUEkJCTB4NjEJLyogUHJvZ3JhbW1h
YmxlIFBlcmlwaGVyYWwgSW50ZXJmYWNlICovCisKKy8qCisgKiBQUEkgc3BlYWtlciBjb250cm9s
IHZhbHVlcworICovCisKKyNkZWZpbmUJUElUX0VOQUJMRVRNUjIJMHgwMQkvKiBFbmFibGUgdGlt
ZXIvY291bnRlciAyICovCisjZGVmaW5lCVBJVF9TUEtSREFUQQkweDAyCS8qIERpcmVjdCB0byBz
cGVha2VyICovCisKKyNkZWZpbmUJUElUX1NQS1IJKFBJVF9FTkFCTEVUTVIyIHwgUElUX1NQS1JE
QVRBKQorCisjZGVmaW5lCXBwaV9zcGtyX29uKCkJb3V0YihJT19QUEksIGluYihJT19QUEkpIHwg
UElUX1NQS1IpCisjZGVmaW5lCXBwaV9zcGtyX29mZigpCW91dGIoSU9fUFBJLCBpbmIoSU9fUFBJ
KSAmIH5QSVRfU1BLUikKKworI2VuZGlmIC8qIF9LRVJORUwgKi8KKworI2VuZGlmIC8qIF9NQUNI
SU5FX1BQSVJFR19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw
L21hY2hpbmUvcHJvYy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Byb2Mu
aAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wcm9jLmgJMTk3MC0wMS0w
MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9tYWNoaW5lL3Byb2MuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAt
MCwwICsxLDEwNCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTEgUmVnZW50cyBvZiB0aGUg
VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1l
cyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
CisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJZnJvbTogQCgjKXByb2MuaAk3LjEgKEJl
cmtlbGV5KSA1LzE1LzkxCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1
ZGUvcHJvYy5oIDI5OTc4OCAyMDE2LTA1LTE0IDIzOjM1OjExWiBraWIgJAorICovCisKKyNpZm5k
ZWYgX01BQ0hJTkVfUFJPQ19IXworI2RlZmluZQlfTUFDSElORV9QUk9DX0hfCisKKyNpbmNsdWRl
IDxzeXMvcXVldWUuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3NlZ21lbnRzLmg+CisKKy8qCisgKiBM
aXN0IG9mIGxvY2tzCisgKglrIC0gb25seSBhY2Nlc3NlZCBieSBjdXJ0aHJlYWQKKyAqCXBwIC0g
cG1hcC5jOmludmxfZ2VuX210eAorICovCisKK3N0cnVjdCBwcm9jX2xkdCB7CisJY2FkZHJfdCBs
ZHRfYmFzZTsKKwlpbnQgICAgIGxkdF9yZWZjbnQ7Cit9OworCitzdHJ1Y3QgcG1hcF9pbnZsX2dl
biB7CisJdV9sb25nIGdlbjsJCQkvKiAoaykgKi8KKwlMSVNUX0VOVFJZKHBtYXBfaW52bF9nZW4p
IGxpbms7CS8qIChwcCkgKi8KK307CisKKy8qCisgKiBNYWNoaW5lLWRlcGVuZGVudCBwYXJ0IG9m
IHRoZSBwcm9jIHN0cnVjdHVyZSBmb3IgQU1ENjQuCisgKi8KK3N0cnVjdCBtZHRocmVhZCB7CisJ
aW50CW1kX3NwaW5sb2NrX2NvdW50OwkvKiAoaykgKi8KKwlyZWdpc3Rlcl90IG1kX3NhdmVkX2Zs
YWdzOwkvKiAoaykgKi8KKwlyZWdpc3Rlcl90IG1kX3NwdXJmbHRfYWRkcjsJLyogKGspIFNwdXJp
b3VzIHBhZ2UgZmF1bHQgYWRkcmVzcy4gKi8KKwlzdHJ1Y3QgcG1hcF9pbnZsX2dlbiBtZF9pbnZs
X2dlbjsKK307CisKK3N0cnVjdCBtZHByb2MgeworCXN0cnVjdCBwcm9jX2xkdCAqbWRfbGR0Owkv
KiAodCkgcGVyLXByb2Nlc3MgbGR0ICovCisJc3RydWN0IHN5c3RlbV9zZWdtZW50X2Rlc2NyaXB0
b3IgbWRfbGR0X3NkOworfTsKKworI2RlZmluZQlLSU5GT19QUk9DX1NJWkUgMTA4OAorI2RlZmlu
ZQlLSU5GT19QUk9DMzJfU0laRSA3NjgKKworI2lmZGVmCV9LRVJORUwKKworLyogR2V0IHRoZSBj
dXJyZW50IGtlcm5lbCB0aHJlYWQgc3RhY2sgdXNhZ2UuICovCisjZGVmaW5lIEdFVF9TVEFDS19V
U0FHRSh0b3RhbCwgdXNlZCkgZG8gewkJCQlcCisJc3RydWN0IHRocmVhZAkqdGQgPSBjdXJ0aHJl
YWQ7CQkJCVwKKwkodG90YWwpID0gdGQtPnRkX2tzdGFja19wYWdlcyAqIFBBR0VfU0laRTsJCQlc
CisJKHVzZWQpID0gKGNoYXIgKil0ZC0+dGRfa3N0YWNrICsJCQkJXAorCSAgICB0ZC0+dGRfa3N0
YWNrX3BhZ2VzICogUEFHRV9TSVpFIC0JCQkJXAorCSAgICAoY2hhciAqKSZ0ZDsJCQkJCQlcCit9
IHdoaWxlICgwKQorCit2b2lkIHNldF91c2VyX2xkdChzdHJ1Y3QgbWRwcm9jICopOworc3RydWN0
IHByb2NfbGR0ICp1c2VyX2xkdF9hbGxvYyhzdHJ1Y3QgcHJvYyAqLCBpbnQpOwordm9pZCB1c2Vy
X2xkdF9mcmVlKHN0cnVjdCB0aHJlYWQgKik7Cit2b2lkIHVzZXJfbGR0X2RlcmVmKHN0cnVjdCBw
cm9jX2xkdCAqKTsKK3N0cnVjdCBzeXNhcmNoX2FyZ3M7CitpbnQgc3lzYXJjaF9sZHQoc3RydWN0
IHRocmVhZCAqdGQsIHN0cnVjdCBzeXNhcmNoX2FyZ3MgKnVhcCwgaW50IHVhcF9zcGFjZSk7Citp
bnQgYW1kNjRfc2V0X2xkdF9kYXRhKHN0cnVjdCB0aHJlYWQgKnRkLCBpbnQgc3RhcnQsIGludCBu
dW0sCisgICAgc3RydWN0IHVzZXJfc2VnbWVudF9kZXNjcmlwdG9yICpkZXNjcyk7CisKK2V4dGVy
biBzdHJ1Y3QgbXR4IGR0X2xvY2s7CitleHRlcm4gaW50IG1heF9sZHRfc2VnbWVudDsKKworc3Ry
dWN0IHN5c2NhbGxfYXJncyB7CisJdV9pbnQgY29kZTsKKwlzdHJ1Y3Qgc3lzZW50ICpjYWxscDsK
KwlyZWdpc3Rlcl90IGFyZ3NbOF07CisJaW50IG5hcmc7Cit9OworI2VuZGlmICAvKiBfS0VSTkVM
ICovCisKKyNlbmRpZiAvKiAhX01BQ0hJTkVfUFJPQ19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcHJvZmlsZS5oIC91c3Ivc3JjL3N5cy9tb2R1
bGVzL25ldG1hcC9tYWNoaW5lL3Byb2ZpbGUuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAvbWFjaGluZS9wcm9maWxlLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAK
KysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Byb2ZpbGUuaAkyMDE2LTA5
LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDIwMSBAQAorLyotCisgKiBD
b3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5
IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVp
dGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT
VUNIIERBTUFHRS4KKyAqCisgKglAKCMpcHJvZmlsZS5oCTguMSAoQmVya2VsZXkpIDYvMTEvOTMK
KyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9wcm9maWxlLmggMjE0
MzQ2IDIwMTAtMTAtMjUgMTU6Mjg6MDNaIGpoYiAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9Q
Uk9GSUxFX0hfCisjZGVmaW5lCV9NQUNISU5FX1BST0ZJTEVfSF8KKworI2lmbmRlZiBfU1lTX0NE
RUZTX0hfCisjZXJyb3IgdGhpcyBmaWxlIG5lZWRzIHN5cy9jZGVmcy5oIGFzIGEgcHJlcmVxdWlz
aXRlCisjZW5kaWYKKworI2lmZGVmIF9LRVJORUwKKworLyoKKyAqIENvbmZpZyBnZW5lcmF0ZXMg
c29tZXRoaW5nIHRvIHRlbGwgdGhlIGNvbXBpbGVyIHRvIGFsaWduIGZ1bmN0aW9ucyBvbiAxNgor
ICogYnl0ZSBib3VuZGFyaWVzLiAgQSBzdHJpY3QgYWxpZ25tZW50IGlzIGdvb2QgZm9yIGtlZXBp
bmcgdGhlIHRhYmxlcyBzbWFsbC4KKyAqLworI2RlZmluZQlGVU5DVElPTl9BTElHTk1FTlQJMTYK
KworLyoKKyAqIFRoZSBrZXJuZWwgdXNlcyBhc3NlbWJsZXIgc3R1YnMgaW5zdGVhZCBvZiB1bnBv
cnRhYmxlIGlubGluZXMuCisgKiBUaGlzIGlzIG1haW5seSB0byBzYXZlIGEgbGl0dGxlIHRpbWUg
d2hlbiBwcm9maWxpbmcgaXMgbm90IGVuYWJsZWQsCisgKiB3aGljaCBpcyB0aGUgdXN1YWwgY2Fz
ZSBmb3IgdGhlIGtlcm5lbC4KKyAqLworI2RlZmluZQlfTUNPVU5UX0RFQ0wgdm9pZCBtY291bnQK
KyNkZWZpbmUJTUNPVU5UCisKKyNpZmRlZiBHVVBST0YKKyNkZWZpbmUJTUNPVU5UX0RFQ0wocykK
KyNkZWZpbmUJTUNPVU5UX0VOVEVSKHMpCisjZGVmaW5lCU1DT1VOVF9FWElUKHMpCisjaWZkZWYg
X19HTlVDTElLRV9BU00KKyNkZWZpbmUJTUNPVU5UX09WRVJIRUFEKGxhYmVsKQkJCQkJCVwKKwlf
X2FzbSBfX3ZvbGF0aWxlKCJwdXNocSAlMDsgY2FsbCBfX21jb3VudDsgcG9wcSAlJXJjeCIJCVwK
KwkJCSA6CQkJCQkJXAorCQkJIDogImkiIChsYWJlbCkJCQkJCVwKKwkJCSA6ICJheCIsICJkeCIs
ICJjeCIsICJkaSIsICJzaSIsICJyOCIsICJyOSIsICJtZW1vcnkiKQorI2RlZmluZQlNRVhJVENP
VU5UX09WRVJIRUFEKCkJCQkJCQlcCisJX19hc20gX192b2xhdGlsZSgiY2FsbCAubWV4aXRjb3Vu
dDsgMToiCQkJCVwKKwkJCSA6IDoJCQkJCQlcCisJCQkgOiAiYXgiLCAiZHgiLCAiY3giLCAiZGki
LCAic2kiLCAicjgiLCAicjkiLCAibWVtb3J5IikKKyNkZWZpbmUJTUVYSVRDT1VOVF9PVkVSSEVB
RF9HRVRMQUJFTChsYWJlbHApCQkJCVwKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3ZxICQxYiwlMCIg
OiAiPXJtIiAobGFiZWxwKSkKKyNlbGlmIGRlZmluZWQobGludCkKKyNkZWZpbmUJTUNPVU5UX09W
RVJIRUFEKGxhYmVsKQorI2RlZmluZQlNRVhJVENPVU5UX09WRVJIRUFEKCkKKyNkZWZpbmUJTUVY
SVRDT1VOVF9PVkVSSEVBRF9HRVRMQUJFTCgpCisjZWxzZQorI2Vycm9yIHRoaXMgZmlsZSBuZWVk
cyB0byBiZSBwb3J0ZWQgdG8geW91ciBjb21waWxlcgorI2VuZGlmIC8qICFfX0dOVUNMSUtFX0FT
TSAqLworI2Vsc2UgLyogIUdVUFJPRiAqLworI2RlZmluZQlNQ09VTlRfREVDTChzKQlyZWdpc3Rl
cl90IHM7CisjaWZkZWYgU01QCitleHRlcm4gaW50CW1jb3VudF9sb2NrOworI2RlZmluZQlNQ09V
TlRfRU5URVIocykJeyBzID0gaW50cl9kaXNhYmxlKCk7IFwKKyAJCQkgIHdoaWxlICghYXRvbWlj
X2NtcHNldF9hY3FfaW50KCZtY291bnRfbG9jaywgMCwgMSkpIFwKKwkJCSAgCS8qIG5vdGhpbmcg
Ki8gOyB9CisjZGVmaW5lCU1DT1VOVF9FWElUKHMpCXsgYXRvbWljX3N0b3JlX3JlbF9pbnQoJm1j
b3VudF9sb2NrLCAwKTsgXAorCQkJICBpbnRyX3Jlc3RvcmUocyk7IH0KKyNlbHNlCisjZGVmaW5l
CU1DT1VOVF9FTlRFUihzKQl7IHMgPSBpbnRyX2Rpc2FibGUoKTsgfQorI2RlZmluZQlNQ09VTlRf
RVhJVChzKQkoaW50cl9yZXN0b3JlKHMpKQorI2VuZGlmCisjZW5kaWYgLyogR1VQUk9GICovCisK
K3ZvaWQgYmludHIodm9pZCk7Cit2b2lkIGJ0cmFwKHZvaWQpOwordm9pZCBlaW50cih2b2lkKTsK
K3ZvaWQgdXNlcih2b2lkKTsKKworI2RlZmluZQlNQ09VTlRfRlJPTVBDX1VTRVIocGMpCQkJCQlc
CisJKChwYyA8ICh1aW50ZnB0cl90KVZNX01BWFVTRVJfQUREUkVTUykgPyAodWludGZwdHJfdCl1
c2VyIDogcGMpCisKKyNkZWZpbmUJTUNPVU5UX0ZST01QQ19JTlRSKHBjKQkJCQkJXAorCSgocGMg
Pj0gKHVpbnRmcHRyX3QpYnRyYXAgJiYgcGMgPCAodWludGZwdHJfdCllaW50cikgPwlcCisJICAg
ICgocGMgPj0gKHVpbnRmcHRyX3QpYmludHIpID8gKHVpbnRmcHRyX3QpYmludHIgOglcCisJCSh1
aW50ZnB0cl90KWJ0cmFwKSA6IH4wVUwpCisKKyNlbHNlIC8qICFfS0VSTkVMICovCisKKyNkZWZp
bmUJRlVOQ1RJT05fQUxJR05NRU5UCTQKKworI2RlZmluZQlfTUNPVU5UX0RFQ0wgXAorc3RhdGlj
IHZvaWQgX21jb3VudCh1aW50ZnB0cl90IGZyb21wYywgdWludGZwdHJfdCBzZWxmcGMpIF9fdXNl
ZDsgXAorc3RhdGljIHZvaWQgX21jb3VudAorCisjaWZkZWYgX19HTlVDTElLRV9BU00KKyNkZWZp
bmUJTUNPVU5UIF9fYXNtKCIJCQlcblwKKwkudGV4dAkJCQlcblwKKwkucDJhbGlnbiA0LDB4OTAJ
CQlcblwKKwkuZ2xvYmwJLm1jb3VudAkJCVxuXAorCS50eXBlCS5tY291bnQsQGZ1bmN0aW9uCVxu
XAorLm1jb3VudDoJCQkJXG5cCisJcHVzaHEJJXJkaQkJCVxuXAorCXB1c2hxCSVyc2kJCQlcblwK
KwlwdXNocQklcmR4CQkJXG5cCisJcHVzaHEJJXJjeAkJCVxuXAorCXB1c2hxCSVyOAkJCVxuXAor
CXB1c2hxCSVyOQkJCVxuXAorCXB1c2hxCSVyYXgJCQlcblwKKwltb3ZxCTgoJXJicCksJXJkaQkJ
XG5cCisJbW92cQk3KjgoJXJzcCksJXJzaQkJXG5cCisJY2FsbAlfbWNvdW50CQkJXG5cCisJcG9w
cQklcmF4CQkJXG5cCisJcG9wcQklcjkJCQlcblwKKwlwb3BxCSVyOAkJCVxuXAorCXBvcHEJJXJj
eAkJCVxuXAorCXBvcHEJJXJkeAkJCVxuXAorCXBvcHEJJXJzaQkJCVxuXAorCXBvcHEJJXJkaQkJ
CVxuXAorCXJldAkJCQlcblwKKwkuc2l6ZQkubWNvdW50LCAuIC0gLm1jb3VudCIpOworI2lmIDAK
Ky8qCisgKiBXZSBjb3VsZCB1c2UgdGhpcywgZXhjZXB0IGl0IGRvZXNuJ3QgcHJlc2VydmUgdGhl
IHJlZ2lzdGVycyB0aGF0IHdlcmUKKyAqIGJlaW5nIHBhc3NlZCB3aXRoIGFyZ3VtZW50cyB0byB0
aGUgZnVuY3Rpb24gdGhhdCB3ZSB3ZXJlIGluc2VydGVkCisgKiBpbnRvLiAgSSd2ZSBsZWZ0IGl0
IGhlcmUgYXMgZG9jdW1lbnRhdGlvbiBvZiB3aGF0IHRoZSBjb2RlIGFib3ZlIGlzCisgKiBzdXBw
b3NlZCB0byBkby4KKyAqLworI2RlZmluZQlNQ09VTlQJCQkJCQkJCVwKK3ZvaWQJCQkJCQkJCQlc
CittY291bnQoKQkJCQkJCQkJXAorewkJCQkJCQkJCVwKKwl1aW50ZnB0cl90IHNlbGZwYywgZnJv
bXBjOwkJCQkJXAorCS8qCQkJCQkJCQlcCisJICogRmluZCB0aGUgcmV0dXJuIGFkZHJlc3MgZm9y
IG1jb3VudCwJCQkJXAorCSAqIGFuZCB0aGUgcmV0dXJuIGFkZHJlc3MgZm9yIG1jb3VudCdzIGNh
bGxlci4JCQlcCisJICoJCQkJCQkJCVwKKwkgKiBzZWxmcGMgPSBwYyBwdXNoZWQgYnkgY2FsbCB0
byBtY291bnQJCQkJXAorCSAqLwkJCQkJCQkJXAorCV9fYXNtKCJtb3ZxIDgoJSVyYnApLCUwIiA6
ICI9ciIgKHNlbGZwYykpOwkJCVwKKwkvKgkJCQkJCQkJXAorCSAqIGZyb21wYyA9IHBjIHB1c2hl
ZCBieSBjYWxsIHRvIG1jb3VudCdzIGNhbGxlci4JCVwKKwkgKiBUaGUgY2FsbGVyJ3Mgc3RhY2sg
ZnJhbWUgaGFzIGFscmVhZHkgYmVlbiBidWlsdCwgc28gJXJicCBpcwlcCisJICogdGhlIGNhbGxl
cidzIGZyYW1lIHBvaW50ZXIuICBUaGUgY2FsbGVyJ3MgcmFkZHIgaXMgaW4gdGhlCVwKKwkgKiBj
YWxsZXIncyBmcmFtZSBmb2xsb3dpbmcgdGhlIGNhbGxlcidzIGNhbGxlcidzIGZyYW1lIHBvaW50
ZXIuXAorCSAqLwkJCQkJCQkJXAorCV9fYXNtKCJtb3ZxICglJXJicCksJTAiIDogIj1yIiAoZnJv
bXBjKSk7CQkJXAorCWZyb21wYyA9ICgodWludGZwdHJfdCAqKWZyb21wYylbMV07CQkJCVwKKwlf
bWNvdW50KGZyb21wYywgc2VsZnBjKTsJCQkJCVwKK30KKyNlbmRpZgorI2Vsc2UgLyogIV9fR05V
Q0xJS0VfQVNNICovCisjZGVmaW5lCU1DT1VOVAorI2VuZGlmIC8qIF9fR05VQ0xJS0VfQVNNICov
CisKK3R5cGVkZWYJdV9sb25nCXVpbnRmcHRyX3Q7CisKKyNlbmRpZiAvKiBfS0VSTkVMICovCisK
Ky8qCisgKiBBbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIHRoYXQgY2FuIGhvbGQgbm9uLW5lZ2F0
aXZlIGRpZmZlcmVuY2UgYmV0d2VlbgorICogZnVuY3Rpb24gcG9pbnRlcnMuCisgKi8KK3R5cGVk
ZWYJdV9sb25nCWZwdHJkaWZmX3Q7CisKKyNpZmRlZiBfS0VSTkVMCisKK3ZvaWQJbWNvdW50KHVp
bnRmcHRyX3QgZnJvbXBjLCB1aW50ZnB0cl90IHNlbGZwYyk7CisKKyNlbHNlIC8qICFfS0VSTkVM
ICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworI2lmZGVmIF9f
R05VQ0xJS0VfQVNNCit2b2lkCW1jb3VudCh2b2lkKSBfX2FzbSgiLm1jb3VudCIpOworI2VuZGlm
CitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX0tFUk5FTCAqLworCisjZW5kaWYgLyogIV9NQUNI
SU5FX1BST0ZJTEVfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9tYWNoaW5lL3BzbC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BzbC5o
Ci0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BzbC5oCTE5NzAtMDEtMDEg
MDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
bWFjaGluZS9wc2wuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCww
ICsxLDYgQEAKKy8qLQorICogVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLgorICov
CisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvcHNsLmggMjMzMjA0
IDIwMTItMDMtMTkgMjE6Mjk6NTdaIHRpamwgJCAqLworCisjaW5jbHVkZSA8eDg2L3BzbC5oPgpk
aWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcHRyYWNlLmgg
L3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcHRyYWNlLmgKLS0tIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcHRyYWNlLmgJMTk3MC0wMS0wMSAwMTowMDowMC4w
MDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3B0
cmFjZS5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBA
QAorLyotCisgKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRG
cmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9wdHJhY2UuaCAyMzI1MjAgMjAx
Mi0wMy0wNCAyMDoyNDoyOFogdGlqbCAkICovCisKKyNpbmNsdWRlIDx4ODYvcHRyYWNlLmg+CmRp
ZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wdmNsb2NrLmgg
L3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcHZjbG9jay5oCi0tLSB1c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3B2Y2xvY2suaAkxOTcwLTAxLTAxIDAxOjAwOjAw
LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUv
cHZjbG9jay5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEs
NiBAQAorLyotCisgKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8q
ICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9wdmNsb2NrLmggMjc4MTgz
IDIwMTUtMDItMDQgMDg6MjY6NDNaIGJyeWFudiAkICovCisKKyNpbmNsdWRlIDx4ODYvcHZjbG9j
ay5oPgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcmVn
LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcmVnLmgKLS0tIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcmVnLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAw
MDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3JlZy5o
CTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyot
CisgKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNE
OiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9yZWcuaCAyMzMxMjQgMjAxMi0wMy0xOCAx
OTowNjozOFogdGlqbCAkICovCisKKyNpbmNsdWRlIDx4ODYvcmVnLmg+CmRpZmYgLXUgLXIgLU4g
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9yZWxvYy5oIC91c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC9tYWNoaW5lL3JlbG9jLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL21hY2hpbmUvcmVsb2MuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAor
KysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcmVsb2MuaAkyMDE2LTA5LTI5
IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDQ5IEBACisvKi0KKyAqIENvcHly
aWdodCAoYykgMTk5MiwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2Yg
Q2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVy
IHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1
dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0gg
REFNQUdFLgorICoKKyAqCUAoIylyZWxvYy5oCTguMSAoQmVya2VsZXkpIDYvMTAvOTMKKyAqICRG
cmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9yZWxvYy5oIDEyNzkxNCAyMDA0
LTA0LTA1IDIxOjI5OjQxWiBpbXAgJAorICovCisKKyNpZm5kZWYgX0kzODZfTUFDSElORV9SRUxP
Q19IXworI2RlZmluZSBfSTM4Nl9NQUNISU5FX1JFTE9DX0hfCisKKy8qIFJlbG9jYXRpb24gZm9y
bWF0LiAqLworc3RydWN0IHJlbG9jYXRpb25faW5mbyB7CisJaW50IHJfYWRkcmVzczsJCQkgIC8q
IG9mZnNldCBpbiB0ZXh0IG9yIGRhdGEgc2VnbWVudCAqLworCXVuc2lnbmVkIGludCAgIHJfc3lt
Ym9sbnVtIDogMjQsICAvKiBvcmRpbmFsIG51bWJlciBvZiBhZGQgc3ltYm9sICovCisJCQkgICBy
X3BjcmVsIDogIDEsICAvKiAxIGlmIHZhbHVlIHNob3VsZCBiZSBwYy1yZWxhdGl2ZSAqLworCQkJ
ICByX2xlbmd0aCA6ICAyLCAgLyogbG9nIGJhc2UgMiBvZiB2YWx1ZSdzIHdpZHRoICovCisJCQkg
IHJfZXh0ZXJuIDogIDEsICAvKiAxIGlmIG5lZWQgdG8gYWRkIHN5bWJvbCB0byB2YWx1ZSAqLwor
CQkJIHJfYmFzZXJlbCA6ICAxLCAgLyogbGlua2FnZSB0YWJsZSByZWxhdGl2ZSAqLworCQkJcl9q
bXB0YWJsZSA6ICAxLCAgLyogcmVsb2NhdGUgdG8ganVtcCB0YWJsZSAqLworCQkJcl9yZWxhdGl2
ZSA6ICAxLCAgLyogbG9hZCBhZGRyZXNzIHJlbGF0aXZlICovCisJCQkgICAgcl9jb3B5IDogIDE7
ICAvKiBydW4gdGltZSBjb3B5ICovCit9OworCisjZW5kaWYKZGlmZiAtdSAtciAtTiB1c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Jlc291cmNlLmggL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvcmVzb3VyY2UuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAvbWFjaGluZS9yZXNvdXJjZS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw
CisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9yZXNvdXJjZS5oCTIwMTYt
MDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNDcgQEAKKy8qICRGcmVl
QlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9yZXNvdXJjZS5oIDI2MTc5MCAyMDE0
LTAyLTEyIDA0OjMwOjM3WiBqaGIgJCAqLworLyotCisgKiBDb3B5cmlnaHQgMTk5OCBNYXNzYWNo
dXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5CisgKgorICogUGVybWlzc2lvbiB0byB1c2Us
IGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBk
b2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5Cisg
KiBncmFudGVkLCBwcm92aWRlZCB0aGF0IGJvdGggdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug
YW5kIHRoaXMKKyAqIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCB0aGF0
IGJvdGggdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g
bm90aWNlIGFwcGVhciBpbiBhbGwKKyAqIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRo
YXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkCisgKiBpbiBhZHZlcnRpc2luZyBvciBw
dWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gbWFrZXMK
KyAqIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0
d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0
IGV4cHJlc3Mgb3IgaW1wbGllZAorICogd2FycmFudHkuCisgKiAKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgTS5JLlQuIGBgQVMgSVMnJy4gIE0uSS5ULiBESVNDTEFJTVMKKyAqIEFM
TCBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRX
QVJFLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuIElOIE5PIEVWRU5UCisgKiBTSEFMTCBNLkkuVC4gQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAq
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfUkVTT1VSQ0VfSF8KKyNkZWZp
bmUJX01BQ0hJTkVfUkVTT1VSQ0VfSF8JMQorCisvKgorICogRGVmaW5pdGlvbnMgb2YgcmVzb3Vy
Y2UgdHlwZXMgZm9yIEludGVsIEFyY2hpdGVjdHVyZSBtYWNoaW5lcworICogd2l0aCBzdXBwb3J0
IGZvciBsZWdhY3kgSVNBIGRldmljZXMgYW5kIGRyaXZlcnMuCisgKi8KKworI2RlZmluZQlTWVNf
UkVTX0lSUQkxCS8qIGludGVycnVwdCBsaW5lcyAqLworI2RlZmluZQlTWVNfUkVTX0RSUQkyCS8q
IGlzYSBkbWEgbGluZXMgKi8KKyNkZWZpbmUJU1lTX1JFU19NRU1PUlkJMwkvKiBpL28gbWVtb3J5
ICovCisjZGVmaW5lCVNZU19SRVNfSU9QT1JUCTQJLyogaS9vIHBvcnRzICovCisjaWZkZWYgTkVX
X1BDSUIKKyNkZWZpbmUJUENJX1JFU19CVVMJNQkvKiBQQ0kgYnVzIG51bWJlcnMgKi8KKyNlbmRp
ZgorCisjZW5kaWYgLyogIV9NQUNISU5FX1JFU09VUkNFX0hfICovCmRpZmYgLXUgLXIgLU4gdXNy
L3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9ydW5xLmggL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvcnVucS5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9t
YWNoaW5lL3J1bnEuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcnVucS5oCTIwMTYtMDktMjkgMDA6MjQ6
NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNDYgQEAKKy8qLQorICogQ29weXJpZ2h0IChj
KSAyMDAxIEpha2UgQnVya2hvbGRlciA8amFrZUBGcmVlQlNELm9yZz4KKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBE
QU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL3J1
bnEuaCAxMzk3MzEgMjAwNS0wMS0wNSAyMDoxNzoyMVogaW1wICQKKyAqLworCisjaWZuZGVmCV9N
QUNISU5FX1JVTlFfSF8KKyNkZWZpbmUJX01BQ0hJTkVfUlVOUV9IXworCisjZGVmaW5lCVJRQl9M
RU4JCSgxKQkJLyogTnVtYmVyIG9mIHByaW9yaXR5IHN0YXR1cyB3b3Jkcy4gKi8KKyNkZWZpbmUJ
UlFCX0wyQlBXCSg2KQkJLyogTG9nMihzaXplb2YocnFiX3dvcmRfdCkgKiBOQkJZKSkuICovCisj
ZGVmaW5lCVJRQl9CUFcJCSgxPDxSUUJfTDJCUFcpCS8qIEJpdHMgaW4gYW4gcnFiX3dvcmRfdC4g
Ki8KKworI2RlZmluZQlSUUJfQklUKHByaSkJKDF1bCA8PCAoKHByaSkgJiAoUlFCX0JQVyAtIDEp
KSkKKyNkZWZpbmUJUlFCX1dPUkQocHJpKQkoKHByaSkgPj4gUlFCX0wyQlBXKQorCisjZGVmaW5l
CVJRQl9GRlMod29yZCkJKGJzZnEod29yZCkpCisKKy8qCisgKiBUeXBlIG9mIHJ1biBxdWV1ZSBz
dGF0dXMgd29yZC4KKyAqLwordHlwZWRlZgl1X2ludDY0X3QJcnFiX3dvcmRfdDsKKworI2VuZGlm
CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9zZWdtZW50
cy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3NlZ21lbnRzLmgKLS0tIHVz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvc2VnbWVudHMuaAkxOTcwLTAxLTAxIDAx
OjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUvc2VnbWVudHMuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAt
MCwwICsxLDEwNiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5ODksIDE5OTAgV2lsbGlhbSBG
LiBKb2xpdHoKKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVy
c2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5
CisgKiBXaWxsaWFtIEpvbGl0ei4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
dGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
aXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5E
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdF
TlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICog
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgor
ICoJZnJvbTogQCgjKXNlZ21lbnRzLmgJNy4xIChCZXJrZWxleSkgNS85LzkxCisgKiAkRnJlZUJT
RDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvc2VnbWVudHMuaCAyNTg2NjAgMjAxMy0x
MS0yNiAxOTozODo0Mloga2liICQKKyAqLworCisjaWZuZGVmIF9NQUNISU5FX1NFR01FTlRTX0hf
CisjZGVmaW5lCV9NQUNISU5FX1NFR01FTlRTX0hfCisKKy8qCisgKiBBTUQ2NCBTZWdtZW50YXRp
b24gRGF0YSBTdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucworICovCisKKyNpbmNsdWRlIDx4ODYv
c2VnbWVudHMuaD4KKworLyoKKyAqIFN5c3RlbSBzZWdtZW50IGRlc2NyaXB0b3JzICgxMjggYml0
IHdpZGUpCisgKi8KK3N0cnVjdAlzeXN0ZW1fc2VnbWVudF9kZXNjcmlwdG9yIHsKKwl1X2ludDY0
X3Qgc2RfbG9saW1pdDoxNjsJLyogc2VnbWVudCBleHRlbnQgKGxzYikgKi8KKwl1X2ludDY0X3Qg
c2RfbG9iYXNlOjI0OwkJLyogc2VnbWVudCBiYXNlIGFkZHJlc3MgKGxzYikgKi8KKwl1X2ludDY0
X3Qgc2RfdHlwZTo1OwkJLyogc2VnbWVudCB0eXBlICovCisJdV9pbnQ2NF90IHNkX2RwbDoyOwkJ
Lyogc2VnbWVudCBkZXNjcmlwdG9yIHByaW9yaXR5IGxldmVsICovCisJdV9pbnQ2NF90IHNkX3A6
MTsJCS8qIHNlZ21lbnQgZGVzY3JpcHRvciBwcmVzZW50ICovCisJdV9pbnQ2NF90IHNkX2hpbGlt
aXQ6NDsJCS8qIHNlZ21lbnQgZXh0ZW50IChtc2IpICovCisJdV9pbnQ2NF90IHNkX3h4MDozOwkJ
LyogdW51c2VkICovCisJdV9pbnQ2NF90IHNkX2dyYW46MTsJCS8qIGxpbWl0IGdyYW51bGFyaXR5
IChieXRlL3BhZ2UgdW5pdHMpKi8KKwl1X2ludDY0X3Qgc2RfaGliYXNlOjQwIF9fcGFja2VkOy8q
IHNlZ21lbnQgYmFzZSBhZGRyZXNzICAobXNiKSAqLworCXVfaW50NjRfdCBzZF94eDE6ODsKKwl1
X2ludDY0X3Qgc2RfbWJ6OjU7CQkvKiBNVVNUIGJlIHplcm8gKi8KKwl1X2ludDY0X3Qgc2RfeHgy
OjE5OworfSBfX3BhY2tlZDsKKworLyoKKyAqIFNvZnR3YXJlIGRlZmluaXRpb25zIGFyZSBpbiB0
aGlzIGNvbnZlbmllbnQgZm9ybWF0LAorICogd2hpY2ggYXJlIHRyYW5zbGF0ZWQgaW50byBpbmNv
bnZlbmllbnQgc2VnbWVudCBkZXNjcmlwdG9ycworICogd2hlbiBuZWVkZWQgdG8gYmUgdXNlZCBi
eSB0aGUgMzg2IGhhcmR3YXJlCisgKi8KKworc3RydWN0CXNvZnRfc2VnbWVudF9kZXNjcmlwdG9y
IHsKKwl1bnNpZ25lZCBsb25nIHNzZF9iYXNlOwkJLyogc2VnbWVudCBiYXNlIGFkZHJlc3MgICov
CisJdW5zaWduZWQgbG9uZyBzc2RfbGltaXQ7CS8qIHNlZ21lbnQgZXh0ZW50ICovCisJdW5zaWdu
ZWQgbG9uZyBzc2RfdHlwZTo1OwkvKiBzZWdtZW50IHR5cGUgKi8KKwl1bnNpZ25lZCBsb25nIHNz
ZF9kcGw6MjsJLyogc2VnbWVudCBkZXNjcmlwdG9yIHByaW9yaXR5IGxldmVsICovCisJdW5zaWdu
ZWQgbG9uZyBzc2RfcDoxOwkJLyogc2VnbWVudCBkZXNjcmlwdG9yIHByZXNlbnQgKi8KKwl1bnNp
Z25lZCBsb25nIHNzZF9sb25nOjE7CS8qIGxvbmcgbW9kZSAoZm9yICVjcykgKi8KKwl1bnNpZ25l
ZCBsb25nIHNzZF9kZWYzMjoxOwkvKiBkZWZhdWx0IDMyIHZzIDE2IGJpdCBzaXplICovCisJdW5z
aWduZWQgbG9uZyBzc2RfZ3JhbjoxOwkvKiBsaW1pdCBncmFudWxhcml0eSAoYnl0ZS9wYWdlIHVu
aXRzKSovCit9IF9fcGFja2VkOworCisvKgorICogcmVnaW9uIGRlc2NyaXB0b3JzLCB1c2VkIHRv
IGxvYWQgZ2R0L2lkdCB0YWJsZXMgYmVmb3JlIHNlZ21lbnRzIHlldCBleGlzdC4KKyAqLworc3Ry
dWN0IHJlZ2lvbl9kZXNjcmlwdG9yIHsKKwl1aW50NjRfdCByZF9saW1pdDoxNjsJCS8qIHNlZ21l
bnQgZXh0ZW50ICovCisJdWludDY0X3QgcmRfYmFzZTo2NCBfX3BhY2tlZDsJLyogYmFzZSBhZGRy
ZXNzICAqLworfSBfX3BhY2tlZDsKKworI2lmZGVmIF9LRVJORUwKK2V4dGVybiBzdHJ1Y3QgdXNl
cl9zZWdtZW50X2Rlc2NyaXB0b3IgZ2R0W107CitleHRlcm4gc3RydWN0IHNvZnRfc2VnbWVudF9k
ZXNjcmlwdG9yIGdkdF9zZWdzW107CitleHRlcm4gc3RydWN0IGdhdGVfZGVzY3JpcHRvciAqaWR0
OworZXh0ZXJuIHN0cnVjdCByZWdpb25fZGVzY3JpcHRvciByX2dkdCwgcl9pZHQ7CisKK3ZvaWQJ
bGdkdChzdHJ1Y3QgcmVnaW9uX2Rlc2NyaXB0b3IgKnJkcCk7Cit2b2lkCXNkdG9zc2Qoc3RydWN0
IHVzZXJfc2VnbWVudF9kZXNjcmlwdG9yICpzZHAsCisJICAgIHN0cnVjdCBzb2Z0X3NlZ21lbnRf
ZGVzY3JpcHRvciAqc3NkcCk7Cit2b2lkCXNzZHRvc2Qoc3RydWN0IHNvZnRfc2VnbWVudF9kZXNj
cmlwdG9yICpzc2RwLAorCSAgICBzdHJ1Y3QgdXNlcl9zZWdtZW50X2Rlc2NyaXB0b3IgKnNkcCk7
Cit2b2lkCXNzZHRvc3lzc2Qoc3RydWN0IHNvZnRfc2VnbWVudF9kZXNjcmlwdG9yICpzc2RwLAor
CSAgICBzdHJ1Y3Qgc3lzdGVtX3NlZ21lbnRfZGVzY3JpcHRvciAqc2RwKTsKK3ZvaWQJdXBkYXRl
X2dkdF9nc2Jhc2Uoc3RydWN0IHRocmVhZCAqdGQsIHVpbnQzMl90IGJhc2UpOwordm9pZAl1cGRh
dGVfZ2R0X2ZzYmFzZShzdHJ1Y3QgdGhyZWFkICp0ZCwgdWludDMyX3QgYmFzZSk7CisjZW5kaWYg
LyogX0tFUk5FTCAqLworCisjZW5kaWYgLyogIV9NQUNISU5FX1NFR01FTlRTX0hfICovCmRpZmYg
LXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9zZXRqbXAuaCAvdXNy
L3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9zZXRqbXAuaAotLS0gdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvbWFjaGluZS9zZXRqbXAuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw
MDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvc2V0am1w
LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisv
Ki0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyAqLworLyogJEZyZWVC
U0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL3NldGptcC5oIDIzMjI3NSAyMDEyLTAy
LTI4IDIyOjE3OjUyWiB0aWpsICQgKi8KKworI2luY2x1ZGUgPHg4Ni9zZXRqbXAuaD4KZGlmZiAt
dSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3NmX2J1Zi5oIC91c3Iv
c3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3NmX2J1Zi5oCi0tLSB1c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC9tYWNoaW5lL3NmX2J1Zi5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw
MDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9zZl9idWYu
aAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDUxIEBACisv
Ki0KKyAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBBbGFuIEwuIENveCA8YWxjQGNzLnJpY2Uu
ZWR1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAv
c3lzL2FtZDY0L2luY2x1ZGUvc2ZfYnVmLmggMjY5NTc3IDIwMTQtMDgtMDUgMDk6NDQ6MTBaIGds
ZWJpdXMgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfU0ZfQlVGX0hfCisjZGVmaW5lIF9NQUNI
SU5FX1NGX0JVRl9IXworCisvKgorICogT24gdGhpcyBtYWNoaW5lLCB0aGUgb25seSBwdXJwb3Nl
IGZvciB3aGljaCBzZl9idWYgaXMgdXNlZCBpcyB0byBpbXBsZW1lbnQKKyAqIGFuIG9wYXF1ZSBw
b2ludGVyIHJlcXVpcmVkIGJ5IHRoZSBtYWNoaW5lLWluZGVwZW5kZW50IHBhcnRzIG9mIHRoZSBr
ZXJuZWwuCisgKiBUaGF0IHBvaW50ZXIgcmVmZXJlbmNlcyB0aGUgdm1fcGFnZSB0aGF0IGlzICJt
YXBwZWQiIGJ5IHRoZSBzZl9idWYuICBUaGUKKyAqIGFjdHVhbCBtYXBwaW5nIGlzIHByb3ZpZGVk
IGJ5IHRoZSBkaXJlY3QgdmlydHVhbC10by1waHlzaWNhbCBtYXBwaW5nLiAgCisgKi8KK3N0YXRp
YyBpbmxpbmUgdm1fb2Zmc2V0X3QKK3NmX2J1Zl9rdmEoc3RydWN0IHNmX2J1ZiAqc2YpCit7CisK
KwlyZXR1cm4gKFBIWVNfVE9fRE1BUChWTV9QQUdFX1RPX1BIWVMoKHZtX3BhZ2VfdClzZikpKTsK
K30KKworc3RhdGljIGlubGluZSB2bV9wYWdlX3QKK3NmX2J1Zl9wYWdlKHN0cnVjdCBzZl9idWYg
KnNmKQoreworCisJcmV0dXJuICgodm1fcGFnZV90KXNmKTsKK30KKyNlbmRpZiAvKiAhX01BQ0hJ
TkVfU0ZfQlVGX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
bWFjaGluZS9zaWdmcmFtZS5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Np
Z2ZyYW1lLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvc2lnZnJhbWUu
aAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21v
ZHVsZXMvbmV0bWFwL21hY2hpbmUvc2lnZnJhbWUuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAw
MDAwMCArMDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhpcyBmaWxlIGlzIGluIHRoZSBw
dWJsaWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2lu
Y2x1ZGUvc2lnZnJhbWUuaCAyNDcwNDcgMjAxMy0wMi0yMCAxNzozOTo1Mloga2liICQgKi8KKwor
I2luY2x1ZGUgPHg4Ni9zaWdmcmFtZS5oPgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvc2lnbmFsLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUvc2lnbmFsLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvc2ln
bmFsLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5
cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3NpZ25hbC5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAw
MDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyotCisgKiBUaGlzIGZpbGUgaXMgaW4gdGhl
IHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQv
aW5jbHVkZS9zaWduYWwuaCAyNDcwNDcgMjAxMy0wMi0yMCAxNzozOTo1Mloga2liICQgKi8KKwor
I2luY2x1ZGUgPHg4Ni9zaWduYWwuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC9tYWNoaW5lL3NtcC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5l
L3NtcC5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3NtcC5oCTE5NzAt
MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvbWFjaGluZS9zbXAuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApA
QCAtMCwwICsxLDQ2IEBACisvKi0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICJUSEUgQkVF
Ui1XQVJFIExJQ0VOU0UiIChSZXZpc2lvbiA0Mik6CisgKiA8cGhrQEZyZWVCU0Qub3JnPiB3cm90
ZSB0aGlzIGZpbGUuICBBcyBsb25nIGFzIHlvdSByZXRhaW4gdGhpcyBub3RpY2UgeW91CisgKiBj
YW4gZG8gd2hhdGV2ZXIgeW91IHdhbnQgd2l0aCB0aGlzIHN0dWZmLiBJZiB3ZSBtZWV0IHNvbWUg
ZGF5LCBhbmQgeW91IHRoaW5rCisgKiB0aGlzIHN0dWZmIGlzIHdvcnRoIGl0LCB5b3UgY2FuIGJ1
eSBtZSBhIGJlZXIgaW4gcmV0dXJuLiAgIFBvdWwtSGVubmluZyBLYW1wCisgKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRl
L3NtcC5oIDI5MTk0OSAyMDE1LTEyLTA3IDE3OjQxOjIwWiBraWIgJAorICoKKyAqLworCisjaWZu
ZGVmIF9NQUNISU5FX1NNUF9IXworI2RlZmluZSBfTUFDSElORV9TTVBfSF8KKworI2lmZGVmIF9L
RVJORUwKKworI2lmZGVmIFNNUAorCisjaWZuZGVmIExPQ09SRQorCisjaW5jbHVkZSA8eDg2L3g4
Nl9zbXAuaD4KKworZXh0ZXJuIGludCBwbWFwX3BjaWRfZW5hYmxlZDsKK2V4dGVybiBpbnQgaW52
cGNpZF93b3JrczsKKworLyogZ2xvYmFsIHN5bWJvbHMgaW4gbXBib290LlMgKi8KK2V4dGVybiBj
aGFyCQkJbXB0cmFtcF9zdGFydFtdOworZXh0ZXJuIGNoYXIJCQltcHRyYW1wX2VuZFtdOworZXh0
ZXJuIHVfaW50MzJfdAkJbXB0cmFtcF9wYWdldGFibGVzOworCisvKiBJUEkgaGFuZGxlcnMgKi8K
K2ludGhhbmRfdAorCUlEVFZFQyhpbnZsdGxiX3BjaWQpLAkvKiBUTEIgc2hvb3Rkb3ducyAtIGds
b2JhbCwgcGNpZCAqLworCUlEVFZFQyhpbnZsdGxiX2ludnBjaWQpLC8qIFRMQiBzaG9vdGRvd25z
IC0gZ2xvYmFsLCBpbnZwY2lkICovCisJSURUVkVDKGp1c3RyZXR1cm4pOwkvKiBpbnRlcnJ1cHQg
Q1BVIHdpdGggbWluaW11bSBvdmVyaGVhZCAqLworCit2b2lkCWludmx0bGJfcGNpZF9oYW5kbGVy
KHZvaWQpOwordm9pZAlpbnZsdGxiX2ludnBjaWRfaGFuZGxlcih2b2lkKTsKK2ludAluYXRpdmVf
c3RhcnRfYWxsX2Fwcyh2b2lkKTsKKworI2VuZGlmIC8qICFMT0NPUkUgKi8KKyNlbmRpZiAvKiBT
TVAgKi8KKworI2VuZGlmIC8qIF9LRVJORUwgKi8KKyNlbmRpZiAvKiBfTUFDSElORV9TTVBfSF8g
Ki8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3NwZWNp
YWxyZWcuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9zcGVjaWFscmVnLmgK
LS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvc3BlY2lhbHJlZy5oCTE5NzAt
MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAvbWFjaGluZS9zcGVjaWFscmVnLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAg
KzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGlj
IGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRl
L3NwZWNpYWxyZWcuaCAyMzMyMDcgMjAxMi0wMy0xOSAyMTozNDoxMVogdGlqbCAkICovCisKKyNp
bmNsdWRlIDx4ODYvc3BlY2lhbHJlZy5oPgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvc3RhY2suaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj
aGluZS9zdGFjay5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3N0YWNr
LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC9tYWNoaW5lL3N0YWNrLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAw
MDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisvKgorICogVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJs
aWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1
ZGUvc3RhY2suaCAyODc2NDMgMjAxNS0wOS0xMSAwMzoyNDowN1ogbWFya2ogJCAqLworCisjaW5j
bHVkZSA8eDg2L3N0YWNrLmg+CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAvbWFjaGluZS9zdGRhcmcuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9z
dGRhcmcuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9zdGRhcmcuaAkx
OTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL21hY2hpbmUvc3RkYXJnLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAg
KzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGlj
IGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRl
L3N0ZGFyZy5oIDIzMjI3NiAyMDEyLTAyLTI4IDIyOjMwOjU4WiB0aWpsICQgKi8KKworI2luY2x1
ZGUgPHg4Ni9zdGRhcmcuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9tYWNoaW5lL3N5c2FyY2guaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9z
eXNhcmNoLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvc3lzYXJjaC5o
CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9k
dWxlcy9uZXRtYXAvbWFjaGluZS9zeXNhcmNoLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAw
MDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVi
bGljIGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNs
dWRlL3N5c2FyY2guaCAyMzMyMDkgMjAxMi0wMy0xOSAyMTo1NzozMVogdGlqbCAkICovCisKKyNp
bmNsdWRlIDx4ODYvc3lzYXJjaC5oPgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL21hY2hpbmUvdGltZXJyZWcuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj
aGluZS90aW1lcnJlZy5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Rp
bWVycmVnLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3RpbWVycmVnLmgJMjAxNi0wOS0yOSAwMDoyNDo1
NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw1NCBAQAorLyotCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgVEFLQUhBU0hJIFlvc2hpaGlyby4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
KyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwor
ICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJl
bGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL3RpbWVycmVnLmggMTc3NjQyIDIwMDgtMDMtMjYg
MjA6MDk6MjFaIHBoayAkCisgKi8KKworLyoKKyAqIFRoZSBvdXRwdXRzIG9mIHRoZSB0aHJlZSB0
aW1lcnMgYXJlIGNvbm5lY3RlZCBhcyBmb2xsb3dzOgorICoKKyAqCSB0aW1lciAwIC0+IGlycSAw
CisgKgkgdGltZXIgMSAtPiBkbWEgY2hhbiAwIChmb3IgZHJhbSByZWZyZXNoKQorICogCSB0aW1l
ciAyIC0+IHNwZWFrZXIgKHZpYSBrZXlib2FyZCBjb250cm9sbGVyKQorICoKKyAqIFRpbWVyIDAg
aXMgdXNlZCB0byBjYWxsIGhhcmRjbG9jay4KKyAqIFRpbWVyIDIgaXMgdXNlZCB0byBnZW5lcmF0
ZSBjb25zb2xlIGJlZXBzLgorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfVElNRVJSRUdfSF8KKyNk
ZWZpbmUgX01BQ0hJTkVfVElNRVJSRUdfSF8KKworI2lmZGVmIF9LRVJORUwKKworI2luY2x1ZGUg
PGRldi9pYy9pODI1M3JlZy5oPgorCisjZGVmaW5lCUlPX1RJTUVSMQkweDQwCQkvKiA4MjUzIFRp
bWVyICMxICovCisjZGVmaW5lCVRJTUVSX0NOVFIwCShJT19USU1FUjEgKyBUSU1FUl9SRUdfQ05U
UjApCisjZGVmaW5lCVRJTUVSX0NOVFIxCShJT19USU1FUjEgKyBUSU1FUl9SRUdfQ05UUjEpCisj
ZGVmaW5lCVRJTUVSX0NOVFIyCShJT19USU1FUjEgKyBUSU1FUl9SRUdfQ05UUjIpCisjZGVmaW5l
CVRJTUVSX01PREUJKElPX1RJTUVSMSArIFRJTUVSX1JFR19NT0RFKQorCisjZW5kaWYgLyogX0tF
Uk5FTCAqLworCisjZW5kaWYgLyogX01BQ0hJTkVfVElNRVJSRUdfSF8gKi8KZGlmZiAtdSAtciAt
TiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3RyYXAuaCAvdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvbWFjaGluZS90cmFwLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL21hY2hpbmUvdHJhcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisr
KyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS90cmFwLmgJMjAxNi0wOS0yOSAw
MDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmls
ZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4w
L3N5cy9hbWQ2NC9pbmNsdWRlL3RyYXAuaCAyMzI0OTIgMjAxMi0wMy0wNCAxNDoxMjo1N1ogdGlq
bCAkICovCisKKyNpbmNsdWRlIDx4ODYvdHJhcC5oPgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lz
L21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdHNzLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw
L21hY2hpbmUvdHNzLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdHNz
LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC9tYWNoaW5lL3Rzcy5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAw
ICswMTAwCkBAIC0wLDAgKzEsNzAgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBS
ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJp
YnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6LgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4g
TmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBj
b250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisg
KiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpdHNzLmgJNS40IChCZXJrZWxleSkgMS8x
OC85MQorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL3Rzcy5oIDE0
NTEyMCAyMDA1LTA0LTE1IDE4OjM5OjMxWiBwZXRlciAkCisgKi8KKworI2lmbmRlZiBfTUFDSElO
RV9UU1NfSF8KKyNkZWZpbmUgX01BQ0hJTkVfVFNTX0hfIDEKKworLyoKKyAqIGFtZDY0IENvbnRl
eHQgRGF0YSBUeXBlCisgKgorICogVGhlIGFsaWdubWVudCBpcyBwcmV0dHkgbWVzc2VkIHVwIGhl
cmUgZHVlIHRvIHJldXNlIG9mIHRoZSBvcmlnaW5hbCAzMiBiaXQKKyAqIGZpZWxkcy4gIEl0IG1p
Z2h0IGJlIHdvcnRoIHRyeWluZyB0byBzZXQgdGhlIHRzcyBvbiBhICs0IGJ5dGUgb2Zmc2V0IHRv
CisgKiBtYWtlIHRoZSA2NCBiaXQgZmllbGRzIGFsaWduZWQgaW4gcHJhY3RpY2UuCisgKi8KK3N0
cnVjdCBhbWQ2NHRzcyB7CisJdV9pbnQzMl90CXRzc19yc3ZkMDsKKwl1X2ludDY0X3QJdHNzX3Jz
cDAgX19wYWNrZWQ7IAkvKiBrZXJuZWwgc3RhY2sgcG9pbnRlciByaW5nIDAgKi8KKwl1X2ludDY0
X3QJdHNzX3JzcDEgX19wYWNrZWQ7IAkvKiBrZXJuZWwgc3RhY2sgcG9pbnRlciByaW5nIDEgKi8K
Kwl1X2ludDY0X3QJdHNzX3JzcDIgX19wYWNrZWQ7IAkvKiBrZXJuZWwgc3RhY2sgcG9pbnRlciBy
aW5nIDIgKi8KKwl1X2ludDMyX3QJdHNzX3JzdmQxOworCXVfaW50MzJfdAl0c3NfcnN2ZDI7CisJ
dV9pbnQ2NF90CXRzc19pc3QxIF9fcGFja2VkOwkvKiBJbnRlcnJ1cHQgc3RhY2sgdGFibGUgMSAq
LworCXVfaW50NjRfdAl0c3NfaXN0MiBfX3BhY2tlZDsJLyogSW50ZXJydXB0IHN0YWNrIHRhYmxl
IDIgKi8KKwl1X2ludDY0X3QJdHNzX2lzdDMgX19wYWNrZWQ7CS8qIEludGVycnVwdCBzdGFjayB0
YWJsZSAzICovCisJdV9pbnQ2NF90CXRzc19pc3Q0IF9fcGFja2VkOwkvKiBJbnRlcnJ1cHQgc3Rh
Y2sgdGFibGUgNCAqLworCXVfaW50NjRfdAl0c3NfaXN0NSBfX3BhY2tlZDsJLyogSW50ZXJydXB0
IHN0YWNrIHRhYmxlIDUgKi8KKwl1X2ludDY0X3QJdHNzX2lzdDYgX19wYWNrZWQ7CS8qIEludGVy
cnVwdCBzdGFjayB0YWJsZSA2ICovCisJdV9pbnQ2NF90CXRzc19pc3Q3IF9fcGFja2VkOwkvKiBJ
bnRlcnJ1cHQgc3RhY2sgdGFibGUgNyAqLworCXVfaW50MzJfdAl0c3NfcnN2ZDM7CisJdV9pbnQz
Ml90CXRzc19yc3ZkNDsKKwl1X2ludDE2X3QJdHNzX3JzdmQ1OworCXVfaW50MTZfdAl0c3NfaW9i
YXNlOwkvKiBpbyBiaXRtYXAgb2Zmc2V0ICovCit9OworCisjaWZkZWYgX0tFUk5FTAorZXh0ZXJu
IHN0cnVjdCBhbWQ2NHRzcyBjb21tb25fdHNzW107CisjZW5kaWYKKworI2VuZGlmIC8qIF9NQUNI
SU5FX1RTU19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUvdWNvbnRleHQuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS91Y29u
dGV4dC5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Vjb250ZXh0LmgJ
MTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1
bGVzL25ldG1hcC9tYWNoaW5lL3Vjb250ZXh0LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAw
MDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVi
bGljIGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNs
dWRlL3Vjb250ZXh0LmggMjQ3MDQ3IDIwMTMtMDItMjAgMTc6Mzk6NTJaIGtpYiAkICovCisKKyNp
bmNsdWRlIDx4ODYvdWNvbnRleHQuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC9tYWNoaW5lL3ZhcmFyZ3MuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj
aGluZS92YXJhcmdzLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdmFy
YXJncy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS92YXJhcmdzLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4w
MDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw4OSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIw
MDIgRGF2aWQgRS4gTydCcmllbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm
b3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogKGMpIFVOSVggU3lzdGVtIExhYm9yYXRv
cmllcywgSW5jLgorICogQWxsIG9yIHNvbWUgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJp
dmVkIGZyb20gbWF0ZXJpYWwgbGljZW5zZWQKKyAqIHRvIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm
b3JuaWEgYnkgQW1lcmljYW4gVGVsZXBob25lIGFuZCBUZWxlZ3JhcGgKKyAqIENvLiBvciBVbml4
IFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4gYW5kIGFyZSByZXByb2R1Y2VkIGhlcmVpbiB3aXRo
CisgKiB0aGUgcGVybWlzc2lvbiBvZiBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl
cyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp
bmcgYWNrbm93bGVkZ2VtZW50OgorICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl
dmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICoJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5k
IGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJz
aXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl
CisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor
ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIyl2YXJh
cmdzLmgJOC4yIChCZXJrZWxleSkgMy8yMi85NAorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5
cy9hbWQ2NC9pbmNsdWRlL3ZhcmFyZ3MuaCAxNDM0MzQgMjAwNS0wMy0xMSAyMjoxNjowOVogcGV0
ZXIgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfVkFSQVJHU19IXworI2RlZmluZQlfTUFDSElO
RV9WQVJBUkdTX0hfCisKKyNpZm5kZWYgX1NZU19DREVGU19IXworI2Vycm9yIHRoaXMgZmlsZSBu
ZWVkcyBzeXMvY2RlZnMuaCBhcyBhIHByZXJlcXVpc2l0ZQorI2VuZGlmCisKKyNpZmRlZiBfX0dO
VUNMSUtFX0JVSUxUSU5fVkFSQVJHUworCisjaW5jbHVkZSA8c3lzL190eXBlcy5oPgorCisjaWZu
ZGVmIF9WQV9MSVNUX0RFQ0xBUkVECisjZGVmaW5lCV9WQV9MSVNUX0RFQ0xBUkVECit0eXBlZGVm
CV9fdmFfbGlzdAl2YV9saXN0OworI2VuZGlmCisKK3R5cGVkZWYgaW50IF9fYnVpbHRpbl92YV9h
bGlzdF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fd29yZF9fKSkpOworCisjZGVmaW5lCXZh
X2FsaXN0CQlfX2J1aWx0aW5fdmFfYWxpc3QKKyNkZWZpbmUJdmFfZGNsCQkJX19idWlsdGluX3Zh
X2FsaXN0X3QgX19idWlsdGluX3ZhX2FsaXN0OyAuLi4KKyNkZWZpbmUJdmFfc3RhcnQoYXApCQlf
X2J1aWx0aW5fdmFyYXJnc19zdGFydChhcCkKKyNkZWZpbmUJdmFfYXJnKGFwLCB0eXBlKQlfX2J1
aWx0aW5fdmFfYXJnKChhcCksIHR5cGUpCisjZGVmaW5lCXZhX2VuZChhcCkJCV9fYnVpbHRpbl92
YV9lbmQoYXApCisKKyNlbHNlCS8qICFfX0dOVUNMSUtFX0JVSUxUSU5fVkFSQVJHUyAqLworCit0
eXBlZGVmIGNoYXIgKnZhX2xpc3Q7CisKKyNkZWZpbmUJX192YV9zaXplKHR5cGUpIFwKKwkoKChz
aXplb2YodHlwZSkgKyBzaXplb2YoaW50KSAtIDEpIC8gc2l6ZW9mKGludCkpICogc2l6ZW9mKGlu
dCkpCisKKyNpZiBkZWZpbmVkKF9fR05VQ0xJS0VfQlVJTFRJTl9WQUFMSVNUKQorI2RlZmluZQl2
YV9hbGlzdAlfX2J1aWx0aW5fdmFfYWxpc3QKKyNlbmRpZgorI2RlZmluZQl2YV9kY2wJaW50IHZh
X2FsaXN0OyAuLi4KKworI2RlZmluZQl2YV9zdGFydChhcCkgXAorCSgoYXApID0gKHZhX2xpc3Qp
JnZhX2FsaXN0KQorCisjZGVmaW5lCXZhX2FyZyhhcCwgdHlwZSkgXAorCSgqKHR5cGUgKikoKGFw
KSArPSBfX3ZhX3NpemUodHlwZSksIChhcCkgLSBfX3ZhX3NpemUodHlwZSkpKQorCisjZGVmaW5l
CXZhX2VuZChhcCkKKworI2VuZGlmIC8qIF9fR05VQ0xJS0VfQlVJTFRJTl9WQVJBUkdTICovCisK
KyNlbmRpZiAvKiAhX01BQ0hJTkVfVkFSQVJHU19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdmRzby5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25l
dG1hcC9tYWNoaW5lL3Zkc28uaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGlu
ZS92ZHNvLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Zkc28uaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAw
MDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhpcyBmaWxlIGlzIGluIHRo
ZSBwdWJsaWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0
L2luY2x1ZGUvdmRzby5oIDIzNzQzMyAyMDEyLTA2LTIyIDA3OjA2OjQwWiBraWIgJCAqLworCisj
aW5jbHVkZSA8eDg2L3Zkc28uaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25l
dG1hcC9tYWNoaW5lL3ZtLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdm0u
aAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS92bS5oCTE5NzAtMDEtMDEg
MDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
bWFjaGluZS92bS5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAg
KzEsNDUgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA5IEh1ZHNvbiBSaXZlciBUcmFkaW5n
IExMQworICogV3JpdHRlbiBieTogSm9obiBILiBCYWxkd2luIDxqaGJARnJlZUJTRC5vcmc+Cisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAq
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisg
KiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor
ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1k
NjQvaW5jbHVkZS92bS5oIDI4MTg4NyAyMDE1LTA0LTIzIDE0OjIyOjIwWiBqaGIgJAorICovCisK
KyNpZm5kZWYgX01BQ0hJTkVfVk1fSF8KKyNkZWZpbmUJX01BQ0hJTkVfVk1fSF8KKworI2luY2x1
ZGUgPG1hY2hpbmUvc3BlY2lhbHJlZy5oPgorCisvKiBNZW1vcnkgYXR0cmlidXRlcy4gKi8KKyNk
ZWZpbmUJVk1fTUVNQVRUUl9VTkNBQ0hFQUJMRQkJKCh2bV9tZW1hdHRyX3QpUEFUX1VOQ0FDSEVB
QkxFKQorI2RlZmluZQlWTV9NRU1BVFRSX1dSSVRFX0NPTUJJTklORwkoKHZtX21lbWF0dHJfdClQ
QVRfV1JJVEVfQ09NQklOSU5HKQorI2RlZmluZQlWTV9NRU1BVFRSX1dSSVRFX1RIUk9VR0gJKCh2
bV9tZW1hdHRyX3QpUEFUX1dSSVRFX1RIUk9VR0gpCisjZGVmaW5lCVZNX01FTUFUVFJfV1JJVEVf
UFJPVEVDVEVECSgodm1fbWVtYXR0cl90KVBBVF9XUklURV9QUk9URUNURUQpCisjZGVmaW5lCVZN
X01FTUFUVFJfV1JJVEVfQkFDSwkJKCh2bV9tZW1hdHRyX3QpUEFUX1dSSVRFX0JBQ0spCisjZGVm
aW5lCVZNX01FTUFUVFJfV0VBS19VTkNBQ0hFQUJMRQkoKHZtX21lbWF0dHJfdClQQVRfVU5DQUNI
RUQpCisKKyNkZWZpbmUJVk1fTUVNQVRUUl9ERUZBVUxUCQlWTV9NRU1BVFRSX1dSSVRFX0JBQ0sK
KworI2VuZGlmIC8qICFfTUFDSElORV9WTV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lz
L21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdm1tLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw
L21hY2hpbmUvdm1tLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdm1t
LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC9tYWNoaW5lL3ZtbS5oCTIwMTYtMTEtMzAgMTA6NTY6MDUuNzg0OTk5MDAw
ICswMDAwCkBAIC0wLDAgKzEsNjg0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBOZXRB
cHAsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBORVRBUFAsIElOQyBgYEFTIElTJycgQU5ECisgKiBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIE5FVEFQUCwgSU5DIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgor
ICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9p
bmNsdWRlL3ZtbS5oIDI5OTAxMCAyMDE2LTA1LTAzIDIyOjEzOjA0WiBwZmcgJAorICovCisKKyNp
Zm5kZWYgX1ZNTV9IXworI2RlZmluZQlfVk1NX0hfCisKKyNpbmNsdWRlIDx4ODYvc2VnbWVudHMu
aD4KKworZW51bSB2bV9zdXNwZW5kX2hvdyB7CisJVk1fU1VTUEVORF9OT05FLAorCVZNX1NVU1BF
TkRfUkVTRVQsCisJVk1fU1VTUEVORF9QT1dFUk9GRiwKKwlWTV9TVVNQRU5EX0hBTFQsCisJVk1f
U1VTUEVORF9UUklQTEVGQVVMVCwKKwlWTV9TVVNQRU5EX0xBU1QKK307CisKKy8qCisgKiBJZGVu
dGlmaWVycyBmb3IgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWQgcmVnaXN0ZXJzLgorICovCitlbnVt
IHZtX3JlZ19uYW1lIHsKKwlWTV9SRUdfR1VFU1RfUkFYLAorCVZNX1JFR19HVUVTVF9SQlgsCisJ
Vk1fUkVHX0dVRVNUX1JDWCwKKwlWTV9SRUdfR1VFU1RfUkRYLAorCVZNX1JFR19HVUVTVF9SU0ks
CisJVk1fUkVHX0dVRVNUX1JESSwKKwlWTV9SRUdfR1VFU1RfUkJQLAorCVZNX1JFR19HVUVTVF9S
OCwKKwlWTV9SRUdfR1VFU1RfUjksCisJVk1fUkVHX0dVRVNUX1IxMCwKKwlWTV9SRUdfR1VFU1Rf
UjExLAorCVZNX1JFR19HVUVTVF9SMTIsCisJVk1fUkVHX0dVRVNUX1IxMywKKwlWTV9SRUdfR1VF
U1RfUjE0LAorCVZNX1JFR19HVUVTVF9SMTUsCisJVk1fUkVHX0dVRVNUX0NSMCwKKwlWTV9SRUdf
R1VFU1RfQ1IzLAorCVZNX1JFR19HVUVTVF9DUjQsCisJVk1fUkVHX0dVRVNUX0RSNywKKwlWTV9S
RUdfR1VFU1RfUlNQLAorCVZNX1JFR19HVUVTVF9SSVAsCisJVk1fUkVHX0dVRVNUX1JGTEFHUywK
KwlWTV9SRUdfR1VFU1RfRVMsCisJVk1fUkVHX0dVRVNUX0NTLAorCVZNX1JFR19HVUVTVF9TUywK
KwlWTV9SRUdfR1VFU1RfRFMsCisJVk1fUkVHX0dVRVNUX0ZTLAorCVZNX1JFR19HVUVTVF9HUywK
KwlWTV9SRUdfR1VFU1RfTERUUiwKKwlWTV9SRUdfR1VFU1RfVFIsCisJVk1fUkVHX0dVRVNUX0lE
VFIsCisJVk1fUkVHX0dVRVNUX0dEVFIsCisJVk1fUkVHX0dVRVNUX0VGRVIsCisJVk1fUkVHX0dV
RVNUX0NSMiwKKwlWTV9SRUdfR1VFU1RfUERQVEUwLAorCVZNX1JFR19HVUVTVF9QRFBURTEsCisJ
Vk1fUkVHX0dVRVNUX1BEUFRFMiwKKwlWTV9SRUdfR1VFU1RfUERQVEUzLAorCVZNX1JFR19HVUVT
VF9JTlRSX1NIQURPVywKKwlWTV9SRUdfTEFTVAorfTsKKworZW51bSB4MmFwaWNfc3RhdGUgewor
CVgyQVBJQ19ESVNBQkxFRCwKKwlYMkFQSUNfRU5BQkxFRCwKKwlYMkFQSUNfU1RBVEVfTEFTVAor
fTsKKworI2RlZmluZQlWTV9JTlRJTkZPX1ZFQ1RPUihpbmZvKQkoKGluZm8pICYgMHhmZikKKyNk
ZWZpbmUJVk1fSU5USU5GT19ERUxfRVJSQ09ERQkweDgwMAorI2RlZmluZQlWTV9JTlRJTkZPX1JT
VkQJCTB4N2ZmZmYwMDAKKyNkZWZpbmUJVk1fSU5USU5GT19WQUxJRAkweDgwMDAwMDAwCisjZGVm
aW5lCVZNX0lOVElORk9fVFlQRQkJMHg3MDAKKyNkZWZpbmUJVk1fSU5USU5GT19IV0lOVFIJKDAg
PDwgOCkKKyNkZWZpbmUJVk1fSU5USU5GT19OTUkJCSgyIDw8IDgpCisjZGVmaW5lCVZNX0lOVElO
Rk9fSFdFWENFUFRJT04JKDMgPDwgOCkKKyNkZWZpbmUJVk1fSU5USU5GT19TV0lOVFIJKDQgPDwg
OCkKKworI2lmZGVmIF9LRVJORUwKKworI2RlZmluZQlWTV9NQVhfTkFNRUxFTgkzMgorCitzdHJ1
Y3Qgdm07CitzdHJ1Y3Qgdm1fZXhjZXB0aW9uOworc3RydWN0IHNlZ19kZXNjOworc3RydWN0IHZt
X2V4aXQ7CitzdHJ1Y3Qgdm1fcnVuOworc3RydWN0IHZocGV0Oworc3RydWN0IHZpb2FwaWM7Citz
dHJ1Y3QgdmxhcGljOworc3RydWN0IHZtc3BhY2U7CitzdHJ1Y3Qgdm1fb2JqZWN0Oworc3RydWN0
IHZtX2d1ZXN0X3BhZ2luZzsKK3N0cnVjdCBwbWFwOworCitzdHJ1Y3Qgdm1fZXZlbnRpbmZvIHsK
Kwl2b2lkCSpycHRyOwkJLyogcmVuZGV6dm91cyBjb29raWUgKi8KKwlpbnQJKnNwdHI7CQkvKiBz
dXNwZW5kIGNvb2tpZSAqLworCWludAkqaXB0cjsJCS8qIHJlcWlkbGUgY29va2llICovCit9Owor
Cit0eXBlZGVmIGludAkoKnZtbV9pbml0X2Z1bmNfdCkoaW50IGlwaW51bSk7Cit0eXBlZGVmIGlu
dAkoKnZtbV9jbGVhbnVwX2Z1bmNfdCkodm9pZCk7Cit0eXBlZGVmIHZvaWQJKCp2bW1fcmVzdW1l
X2Z1bmNfdCkodm9pZCk7Cit0eXBlZGVmIHZvaWQgKgkoKnZtaV9pbml0X2Z1bmNfdCkoc3RydWN0
IHZtICp2bSwgc3RydWN0IHBtYXAgKnBtYXApOwordHlwZWRlZiBpbnQJKCp2bWlfcnVuX2Z1bmNf
dCkodm9pZCAqdm1pLCBpbnQgdmNwdSwgcmVnaXN0ZXJfdCByaXAsCisJCSAgICBzdHJ1Y3QgcG1h
cCAqcG1hcCwgc3RydWN0IHZtX2V2ZW50aW5mbyAqaW5mbyk7Cit0eXBlZGVmIHZvaWQJKCp2bWlf
Y2xlYW51cF9mdW5jX3QpKHZvaWQgKnZtaSk7Cit0eXBlZGVmIGludAkoKnZtaV9nZXRfcmVnaXN0
ZXJfdCkodm9pZCAqdm1pLCBpbnQgdmNwdSwgaW50IG51bSwKKwkJCQkgICAgICB1aW50NjRfdCAq
cmV0dmFsKTsKK3R5cGVkZWYgaW50CSgqdm1pX3NldF9yZWdpc3Rlcl90KSh2b2lkICp2bWksIGlu
dCB2Y3B1LCBpbnQgbnVtLAorCQkJCSAgICAgIHVpbnQ2NF90IHZhbCk7Cit0eXBlZGVmIGludAko
KnZtaV9nZXRfZGVzY190KSh2b2lkICp2bWksIGludCB2Y3B1LCBpbnQgbnVtLAorCQkJCSAgc3Ry
dWN0IHNlZ19kZXNjICpkZXNjKTsKK3R5cGVkZWYgaW50CSgqdm1pX3NldF9kZXNjX3QpKHZvaWQg
KnZtaSwgaW50IHZjcHUsIGludCBudW0sCisJCQkJICBzdHJ1Y3Qgc2VnX2Rlc2MgKmRlc2MpOwor
dHlwZWRlZiBpbnQJKCp2bWlfZ2V0X2NhcF90KSh2b2lkICp2bWksIGludCB2Y3B1LCBpbnQgbnVt
LCBpbnQgKnJldHZhbCk7Cit0eXBlZGVmIGludAkoKnZtaV9zZXRfY2FwX3QpKHZvaWQgKnZtaSwg
aW50IHZjcHUsIGludCBudW0sIGludCB2YWwpOwordHlwZWRlZiBzdHJ1Y3Qgdm1zcGFjZSAqICgq
dm1pX3Ztc3BhY2VfYWxsb2MpKHZtX29mZnNldF90IG1pbiwgdm1fb2Zmc2V0X3QgbWF4KTsKK3R5
cGVkZWYgdm9pZAkoKnZtaV92bXNwYWNlX2ZyZWUpKHN0cnVjdCB2bXNwYWNlICp2bXNwYWNlKTsK
K3R5cGVkZWYgc3RydWN0IHZsYXBpYyAqICgqdm1pX3ZsYXBpY19pbml0KSh2b2lkICp2bWksIGlu
dCB2Y3B1KTsKK3R5cGVkZWYgdm9pZAkoKnZtaV92bGFwaWNfY2xlYW51cCkodm9pZCAqdm1pLCBz
dHJ1Y3QgdmxhcGljICp2bGFwaWMpOworCitzdHJ1Y3Qgdm1tX29wcyB7CisJdm1tX2luaXRfZnVu
Y190CQlpbml0OwkJLyogbW9kdWxlIHdpZGUgaW5pdGlhbGl6YXRpb24gKi8KKwl2bW1fY2xlYW51
cF9mdW5jX3QJY2xlYW51cDsKKwl2bW1fcmVzdW1lX2Z1bmNfdAlyZXN1bWU7CisKKwl2bWlfaW5p
dF9mdW5jX3QJCXZtaW5pdDsJCS8qIHZtLXNwZWNpZmljIGluaXRpYWxpemF0aW9uICovCisJdm1p
X3J1bl9mdW5jX3QJCXZtcnVuOworCXZtaV9jbGVhbnVwX2Z1bmNfdAl2bWNsZWFudXA7CisJdm1p
X2dldF9yZWdpc3Rlcl90CXZtZ2V0cmVnOworCXZtaV9zZXRfcmVnaXN0ZXJfdAl2bXNldHJlZzsK
Kwl2bWlfZ2V0X2Rlc2NfdAkJdm1nZXRkZXNjOworCXZtaV9zZXRfZGVzY190CQl2bXNldGRlc2M7
CisJdm1pX2dldF9jYXBfdAkJdm1nZXRjYXA7CisJdm1pX3NldF9jYXBfdAkJdm1zZXRjYXA7CisJ
dm1pX3Ztc3BhY2VfYWxsb2MJdm1zcGFjZV9hbGxvYzsKKwl2bWlfdm1zcGFjZV9mcmVlCXZtc3Bh
Y2VfZnJlZTsKKwl2bWlfdmxhcGljX2luaXQJCXZsYXBpY19pbml0OworCXZtaV92bGFwaWNfY2xl
YW51cAl2bGFwaWNfY2xlYW51cDsKK307CisKK2V4dGVybiBzdHJ1Y3Qgdm1tX29wcyB2bW1fb3Bz
X2ludGVsOworZXh0ZXJuIHN0cnVjdCB2bW1fb3BzIHZtbV9vcHNfYW1kOworCitpbnQgdm1fY3Jl
YXRlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCB2bSAqKnJldHZtKTsKK3ZvaWQgdm1fZGVzdHJv
eShzdHJ1Y3Qgdm0gKnZtKTsKK2ludCB2bV9yZWluaXQoc3RydWN0IHZtICp2bSk7Citjb25zdCBj
aGFyICp2bV9uYW1lKHN0cnVjdCB2bSAqdm0pOworCisvKgorICogQVBJcyB0aGF0IG1vZGlmeSB0
aGUgZ3Vlc3QgbWVtb3J5IG1hcCByZXF1aXJlIGFsbCB2Y3B1cyB0byBiZSBmcm96ZW4uCisgKi8K
K2ludCB2bV9tbWFwX21lbXNlZyhzdHJ1Y3Qgdm0gKnZtLCB2bV9wYWRkcl90IGdwYSwgaW50IHNl
Z2lkLCB2bV9vb2Zmc2V0X3Qgb2ZmLAorICAgIHNpemVfdCBsZW4sIGludCBwcm90LCBpbnQgZmxh
Z3MpOworaW50IHZtX2FsbG9jX21lbXNlZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgaWRlbnQsIHNpemVf
dCBsZW4sIGJvb2wgc3lzbWVtKTsKK3ZvaWQgdm1fZnJlZV9tZW1zZWcoc3RydWN0IHZtICp2bSwg
aW50IGlkZW50KTsKK2ludCB2bV9tYXBfbW1pbyhzdHJ1Y3Qgdm0gKnZtLCB2bV9wYWRkcl90IGdw
YSwgc2l6ZV90IGxlbiwgdm1fcGFkZHJfdCBocGEpOworaW50IHZtX21hcF91c2VybWVtKHN0cnVj
dCB2bSAqdm0sIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuLCB2b2lkICpidWYsIHN0cnVjdCB0
aHJlYWQgKnRkKTsKK2ludCB2bV91bm1hcF9tbWlvKHN0cnVjdCB2bSAqdm0sIHZtX3BhZGRyX3Qg
Z3BhLCBzaXplX3QgbGVuKTsKK2ludCB2bV9hc3NpZ25fcHB0ZGV2KHN0cnVjdCB2bSAqdm0sIGlu
dCBidXMsIGludCBzbG90LCBpbnQgZnVuYyk7CitpbnQgdm1fdW5hc3NpZ25fcHB0ZGV2KHN0cnVj
dCB2bSAqdm0sIGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYyk7CisKKy8qCisgKiBBUElzIHRo
YXQgaW5zcGVjdCB0aGUgZ3Vlc3QgbWVtb3J5IG1hcCByZXF1aXJlIG9ubHkgYSAqc2luZ2xlKiB2
Y3B1IHRvCisgKiBiZSBmcm96ZW4uIFRoaXMgYWN0cyBsaWtlIGEgcmVhZCBsb2NrIG9uIHRoZSBn
dWVzdCBtZW1vcnkgbWFwIHNpbmNlIGFueQorICogbW9kaWZpY2F0aW9uIHJlcXVpcmVzICphbGwq
IHZjcHVzIHRvIGJlIGZyb3plbi4KKyAqLworaW50IHZtX21tYXBfZ2V0bmV4dChzdHJ1Y3Qgdm0g
KnZtLCB2bV9wYWRkcl90ICpncGEsIGludCAqc2VnaWQsCisgICAgdm1fb29mZnNldF90ICpzZWdv
ZmYsIHNpemVfdCAqbGVuLCBpbnQgKnByb3QsIGludCAqZmxhZ3MpOworaW50IHZtX2dldF9tZW1z
ZWcoc3RydWN0IHZtICp2bSwgaW50IGlkZW50LCBzaXplX3QgKmxlbiwgYm9vbCAqc3lzbWVtLAor
ICAgIHN0cnVjdCB2bV9vYmplY3QgKipvYmpwdHIpOwordm9pZCAqdm1fZ3BhX2hvbGQoc3RydWN0
IHZtICosIGludCB2Y3B1aWQsIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuLAorICAgIGludCBw
cm90LCB2b2lkICoqY29va2llKTsKK3ZvaWQgdm1fZ3BhX3JlbGVhc2Uodm9pZCAqY29va2llKTsK
K2Jvb2wgdm1fbWVtX2FsbG9jYXRlZChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB2bV9wYWRk
cl90IGdwYSk7CisKK2ludCB2bV9nZXRfcmVnaXN0ZXIoc3RydWN0IHZtICp2bSwgaW50IHZjcHUs
IGludCByZWcsIHVpbnQ2NF90ICpyZXR2YWwpOworaW50IHZtX3NldF9yZWdpc3RlcihzdHJ1Y3Qg
dm0gKnZtLCBpbnQgdmNwdSwgaW50IHJlZywgdWludDY0X3QgdmFsKTsKK2ludCB2bV9nZXRfc2Vn
X2Rlc2Moc3RydWN0IHZtICp2bSwgaW50IHZjcHUsIGludCByZWcsCisJCSAgICBzdHJ1Y3Qgc2Vn
X2Rlc2MgKnJldF9kZXNjKTsKK2ludCB2bV9zZXRfc2VnX2Rlc2Moc3RydWN0IHZtICp2bSwgaW50
IHZjcHUsIGludCByZWcsCisJCSAgICBzdHJ1Y3Qgc2VnX2Rlc2MgKmRlc2MpOworaW50IHZtX3J1
bihzdHJ1Y3Qgdm0gKnZtLCBzdHJ1Y3Qgdm1fcnVuICp2bXJ1bik7CitpbnQgdm1fc3VzcGVuZChz
dHJ1Y3Qgdm0gKnZtLCBlbnVtIHZtX3N1c3BlbmRfaG93IGhvdyk7CitpbnQgdm1faW5qZWN0X25t
aShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSk7CitpbnQgdm1fbm1pX3BlbmRpbmcoc3RydWN0IHZt
ICp2bSwgaW50IHZjcHVpZCk7Cit2b2lkIHZtX25taV9jbGVhcihzdHJ1Y3Qgdm0gKnZtLCBpbnQg
dmNwdWlkKTsKK2ludCB2bV9pbmplY3RfZXh0aW50KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1KTsK
K2ludCB2bV9leHRpbnRfcGVuZGluZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkKTsKK3ZvaWQg
dm1fZXh0aW50X2NsZWFyKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQpOworc3RydWN0IHZsYXBp
YyAqdm1fbGFwaWMoc3RydWN0IHZtICp2bSwgaW50IGNwdSk7CitzdHJ1Y3QgdmlvYXBpYyAqdm1f
aW9hcGljKHN0cnVjdCB2bSAqdm0pOworc3RydWN0IHZocGV0ICp2bV9ocGV0KHN0cnVjdCB2bSAq
dm0pOworaW50IHZtX2dldF9jYXBhYmlsaXR5KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQg
dHlwZSwgaW50ICp2YWwpOworaW50IHZtX3NldF9jYXBhYmlsaXR5KHN0cnVjdCB2bSAqdm0sIGlu
dCB2Y3B1LCBpbnQgdHlwZSwgaW50IHZhbCk7CitpbnQgdm1fZ2V0X3gyYXBpY19zdGF0ZShzdHJ1
Y3Qgdm0gKnZtLCBpbnQgdmNwdSwgZW51bSB4MmFwaWNfc3RhdGUgKnN0YXRlKTsKK2ludCB2bV9z
ZXRfeDJhcGljX3N0YXRlKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBlbnVtIHgyYXBpY19zdGF0
ZSBzdGF0ZSk7CitpbnQgdm1fYXBpY2lkMnZjcHVpZChzdHJ1Y3Qgdm0gKnZtLCBpbnQgYXBpY2lk
KTsKK2ludCB2bV9hY3RpdmF0ZV9jcHUoc3RydWN0IHZtICp2bSwgaW50IHZjcHUpOworc3RydWN0
IHZtX2V4aXQgKnZtX2V4aXRpbmZvKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQpOwordm9pZCB2
bV9leGl0X3N1c3BlbmRlZChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCByaXAp
Owordm9pZCB2bV9leGl0X3JlbmRlenZvdXMoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgdWlu
dDY0X3QgcmlwKTsKK3ZvaWQgdm1fZXhpdF9hc3RwZW5kaW5nKHN0cnVjdCB2bSAqdm0sIGludCB2
Y3B1aWQsIHVpbnQ2NF90IHJpcCk7Cit2b2lkIHZtX2V4aXRfcmVxaWRsZShzdHJ1Y3Qgdm0gKnZt
LCBpbnQgdmNwdWlkLCB1aW50NjRfdCByaXApOworCisjaWZkZWYgX1NZU19fQ1BVU0VUX0hfCisv
KgorICogUmVuZGV6dm91cyBhbGwgdmNwdXMgc3BlY2lmaWVkIGluICdkZXN0JyBhbmQgZXhlY3V0
ZSAnZnVuYyhhcmcpJy4KKyAqIFRoZSByZW5kZXp2b3VzICdmdW5jKGFyZyknIGlzIG5vdCBhbGxv
d2VkIHRvIGRvIGFueXRoaW5nIHRoYXQgd2lsbAorICogY2F1c2UgdGhlIHRocmVhZCB0byBiZSBw
dXQgdG8gc2xlZXAuCisgKgorICogSWYgdGhlIHJlbmRlenZvdXMgaXMgYmVpbmcgaW5pdGlhdGVk
IGZyb20gYSB2Y3B1IGNvbnRleHQgdGhlbiB0aGUKKyAqICd2Y3B1aWQnIG11c3QgcmVmZXIgdG8g
dGhhdCB2Y3B1LCBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHNldCB0byAtMS4KKyAqCisgKiBUaGUg
Y2FsbGVyIGNhbm5vdCBob2xkIGFueSBsb2NrcyB3aGVuIGluaXRpYXRpbmcgdGhlIHJlbmRlenZv
dXMuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgQVBJIG1heSBjYXVzZSB2Y3B1
cyBvdGhlciB0aGFuIHRob3NlIHNwZWNpZmllZAorICogYnkgJ2Rlc3QnIHRvIGJlIHN0YWxsZWQu
IFRoZSBjYWxsZXIgc2hvdWxkIG5vdCByZWx5IG9uIGFueSB2Y3B1cyBtYWtpbmcKKyAqIGZvcndh
cmQgcHJvZ3Jlc3Mgd2hlbiB0aGUgcmVuZGV6dm91cyBpcyBpbiBwcm9ncmVzcy4KKyAqLwordHlw
ZWRlZiB2b2lkICgqdm1fcmVuZGV6dm91c19mdW5jX3QpKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1
aWQsIHZvaWQgKmFyZyk7Cit2b2lkIHZtX3NtcF9yZW5kZXp2b3VzKHN0cnVjdCB2bSAqdm0sIGlu
dCB2Y3B1aWQsIGNwdXNldF90IGRlc3QsCisgICAgdm1fcmVuZGV6dm91c19mdW5jX3QgZnVuYywg
dm9pZCAqYXJnKTsKK2NwdXNldF90IHZtX2FjdGl2ZV9jcHVzKHN0cnVjdCB2bSAqdm0pOworY3B1
c2V0X3Qgdm1fc3VzcGVuZGVkX2NwdXMoc3RydWN0IHZtICp2bSk7CisjZW5kaWYJLyogX1NZU19f
Q1BVU0VUX0hfICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQKK3ZjcHVfcmVuZGV6dm91c19wZW5k
aW5nKHN0cnVjdCB2bV9ldmVudGluZm8gKmluZm8pCit7CisKKwlyZXR1cm4gKCooKHVpbnRwdHJf
dCAqKShpbmZvLT5ycHRyKSkgIT0gMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQKK3ZjcHVf
c3VzcGVuZGVkKHN0cnVjdCB2bV9ldmVudGluZm8gKmluZm8pCit7CisKKwlyZXR1cm4gKCppbmZv
LT5zcHRyKTsKK30KKworc3RhdGljIF9faW5saW5lIGludAordmNwdV9yZXFpZGxlKHN0cnVjdCB2
bV9ldmVudGluZm8gKmluZm8pCit7CisKKwlyZXR1cm4gKCppbmZvLT5pcHRyKTsKK30KKworLyoK
KyAqIFJldHVybiAxIGlmIGRldmljZSBpbmRpY2F0ZWQgYnkgYnVzL3Nsb3QvZnVuYyBpcyBzdXBw
b3NlZCB0byBiZSBhCisgKiBwY2kgcGFzc3Rocm91Z2ggZGV2aWNlLgorICoKKyAqIFJldHVybiAw
IG90aGVyd2lzZS4KKyAqLworaW50IHZtbV9pc19wcHRkZXYoaW50IGJ1cywgaW50IHNsb3QsIGlu
dCBmdW5jKTsKKwordm9pZCAqdm1faW9tbXVfZG9tYWluKHN0cnVjdCB2bSAqdm0pOworCitlbnVt
IHZjcHVfc3RhdGUgeworCVZDUFVfSURMRSwKKwlWQ1BVX0ZST1pFTiwKKwlWQ1BVX1JVTk5JTkcs
CisJVkNQVV9TTEVFUElORywKK307CisKK2ludCB2Y3B1X3NldF9zdGF0ZShzdHJ1Y3Qgdm0gKnZt
LCBpbnQgdmNwdSwgZW51bSB2Y3B1X3N0YXRlIHN0YXRlLAorICAgIGJvb2wgZnJvbV9pZGxlKTsK
K2VudW0gdmNwdV9zdGF0ZSB2Y3B1X2dldF9zdGF0ZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSwg
aW50ICpob3N0Y3B1KTsKKworc3RhdGljIGludCBfX2lubGluZQordmNwdV9pc19ydW5uaW5nKHN0
cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQgKmhvc3RjcHUpCit7CisJcmV0dXJuICh2Y3B1X2dl
dF9zdGF0ZSh2bSwgdmNwdSwgaG9zdGNwdSkgPT0gVkNQVV9SVU5OSU5HKTsKK30KKworI2lmZGVm
IF9TWVNfUFJPQ19IXworc3RhdGljIGludCBfX2lubGluZQordmNwdV9zaG91bGRfeWllbGQoc3Ry
dWN0IHZtICp2bSwgaW50IHZjcHUpCit7CisKKwlpZiAoY3VydGhyZWFkLT50ZF9mbGFncyAmIChU
REZfQVNUUEVORElORyB8IFRERl9ORUVEUkVTQ0hFRCkpCisJCXJldHVybiAoMSk7CisJZWxzZSBp
ZiAoY3VydGhyZWFkLT50ZF9vd2VwcmVlbXB0KQorCQlyZXR1cm4gKDEpOworCWVsc2UKKwkJcmV0
dXJuICgwKTsKK30KKyNlbmRpZgorCit2b2lkICp2Y3B1X3N0YXRzKHN0cnVjdCB2bSAqdm0sIGlu
dCB2Y3B1KTsKK3ZvaWQgdmNwdV9ub3RpZnlfZXZlbnQoc3RydWN0IHZtICp2bSwgaW50IHZjcHVp
ZCwgYm9vbCBsYXBpY19pbnRyKTsKK3N0cnVjdCB2bXNwYWNlICp2bV9nZXRfdm1zcGFjZShzdHJ1
Y3Qgdm0gKnZtKTsKK3N0cnVjdCB2YXRwaWMgKnZtX2F0cGljKHN0cnVjdCB2bSAqdm0pOworc3Ry
dWN0IHZhdHBpdCAqdm1fYXRwaXQoc3RydWN0IHZtICp2bSk7CitzdHJ1Y3QgdnBtdG1yICp2bV9w
bXRtcihzdHJ1Y3Qgdm0gKnZtKTsKK3N0cnVjdCB2cnRjICp2bV9ydGMoc3RydWN0IHZtICp2bSk7
CitzdHJ1Y3QgaW9yZWdoICp2bV9pb3JlZ2goc3RydWN0IHZtICp2bSk7CisKKy8qCisgKiBJbmpl
Y3QgZXhjZXB0aW9uICd2ZWN0b3InIGludG8gdGhlIGd1ZXN0IHZjcHUuIFRoaXMgZnVuY3Rpb24g
cmV0dXJucyAwIG9uCisgKiBzdWNjZXNzIGFuZCBub24temVybyBvbiBmYWlsdXJlLgorICoKKyAq
IFdyYXBwZXIgZnVuY3Rpb25zIGxpa2UgJ3ZtX2luamVjdF9ncCgpJyBzaG91bGQgYmUgcHJlZmVy
cmVkIHRvIGNhbGxpbmcKKyAqIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgYmVjYXVzZSB0aGV5IGVu
Zm9yY2UgdGhlIHRyYXAtbGlrZSBvciBmYXVsdC1saWtlCisgKiBiZWhhdmlvciBvZiBhbiBleGNl
cHRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgaW4gdGhl
IGNvbnRleHQgb2YgdGhlIHRocmVhZCB0aGF0IGlzCisgKiBleGVjdXRpbmcgdGhpcyB2Y3B1Lgor
ICovCitpbnQgdm1faW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBp
bnQgdmVjdG9yLCBpbnQgZXJyX3ZhbGlkLAorICAgIHVpbnQzMl90IGVycmNvZGUsIGludCByZXN0
YXJ0X2luc3RydWN0aW9uKTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVy
IGEgVk0tZXhpdCB0aGF0IG9jY3VycmVkIGR1cmluZyBleGNlcHRpb24gb3IKKyAqIGludGVycnVw
dCBkZWxpdmVyeSB0aHJvdWdoIHRoZSBJRFQuIFRoZSBmb3JtYXQgb2YgJ2ludGluZm8nIGlzIGRl
c2NyaWJlZAorICogaW4gRmlndXJlIDE1LTEsICJFWElUSU5USU5GTyBmb3IgQWxsIEludGVyY2Vw
dHMiLCBBUE0sIFZvbCAyLgorICoKKyAqIElmIGEgVk0tZXhpdCBoYW5kbGVyIGNvbXBsZXRlcyB0
aGUgZXZlbnQgZGVsaXZlcnkgc3VjY2Vzc2Z1bGx5IHRoZW4gaXQKKyAqIHNob3VsZCBjYWxsIHZt
X2V4aXRfaW50aW5mbygpIHRvIGV4dGluZ3Vpc2ggdGhlIHBlbmRpbmcgZXZlbnQuIEZvciBlLmcu
LAorICogaWYgdGhlIHRhc2sgc3dpdGNoIGVtdWxhdGlvbiBpcyB0cmlnZ2VyZWQgdmlhIGEgdGFz
ayBnYXRlIHRoZW4gaXQgc2hvdWxkCisgKiBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCAnaW50aW5m
bz0wJyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBleHRlcm5hbCBldmVudAorICogaXMgbm90IHBlbmRp
bmcgYW55bW9yZS4KKyAqCisgKiBSZXR1cm4gdmFsdWUgaXMgMCBvbiBzdWNjZXNzIGFuZCBub24t
emVybyBvbiBmYWlsdXJlLgorICovCitpbnQgdm1fZXhpdF9pbnRpbmZvKHN0cnVjdCB2bSAqdm0s
IGludCB2Y3B1aWQsIHVpbnQ2NF90IGludGluZm8pOworCisvKgorICogVGhpcyBmdW5jdGlvbiBp
cyBjYWxsZWQgYmVmb3JlIGV2ZXJ5IFZNLWVudHJ5IHRvIHJldHJpZXZlIGEgcGVuZGluZworICog
ZXZlbnQgdGhhdCBzaG91bGQgYmUgaW5qZWN0ZWQgaW50byB0aGUgZ3Vlc3QuIFRoaXMgZnVuY3Rp
b24gY29tYmluZXMKKyAqIG5lc3RlZCBldmVudHMgaW50byBhIGRvdWJsZSBvciB0cmlwbGUgZmF1
bHQuCisgKgorICogUmV0dXJucyAwIGlmIHRoZXJlIGFyZSBubyBldmVudHMgdGhhdCBuZWVkIHRv
IGJlIGluamVjdGVkIGludG8gdGhlIGd1ZXN0CisgKiBhbmQgbm9uLXplcm8gb3RoZXJ3aXNlLgor
ICovCitpbnQgdm1fZW50cnlfaW50aW5mbyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50
NjRfdCAqaW5mbyk7CisKK2ludCB2bV9nZXRfaW50aW5mbyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw
dWlkLCB1aW50NjRfdCAqaW5mbzEsIHVpbnQ2NF90ICppbmZvMik7CisKK2VudW0gdm1fcmVnX25h
bWUgdm1fc2VnbWVudF9uYW1lKGludCBzZWdfZW5jb2RpbmcpOworCitzdHJ1Y3Qgdm1fY29weWlu
Zm8geworCXVpbnQ2NF90CWdwYTsKKwlzaXplX3QJCWxlbjsKKwl2b2lkCQkqaHZhOworCXZvaWQJ
CSpjb29raWU7Cit9OworCisvKgorICogU2V0IHVwICdjb3B5aW5mb1tdJyB0byBjb3B5IHRvL2Zy
b20gZ3Vlc3QgbGluZWFyIGFkZHJlc3Mgc3BhY2Ugc3RhcnRpbmcKKyAqIGF0ICdnbGEnIGFuZCAn
bGVuJyBieXRlcyBsb25nLiBUaGUgJ3Byb3QnIHNob3VsZCBiZSBzZXQgdG8gUFJPVF9SRUFEIGZv
cgorICogYSBjb3B5aW4gb3IgUFJPVF9XUklURSBmb3IgYSBjb3B5b3V0LiAKKyAqCisgKiByZXR2
YWwJaXNfZmF1bHQJSW50ZXJwcmV0YXRpb24KKyAqICAgMAkJICAgMAkJU3VjY2VzcworICogICAw
CQkgICAxCQlBbiBleGNlcHRpb24gd2FzIGluamVjdGVkIGludG8gdGhlIGd1ZXN0CisgKiBFRkFV
TFQJICBOL0EJCVVucmVjb3ZlcmFibGUgZXJyb3IKKyAqCisgKiBUaGUgJ2NvcHlpbmZvW10nIGNh
biBiZSBwYXNzZWQgdG8gJ3ZtX2NvcHlpbigpJyBvciAndm1fY29weW91dCgpJyBvbmx5IGlmCisg
KiB0aGUgcmV0dXJuIHZhbHVlIGlzIDAuIFRoZSAnY29weWluZm9bXScgcmVzb3VyY2VzIHNob3Vs
ZCBiZSBmcmVlZCBieSBjYWxsaW5nCisgKiAndm1fY29weV90ZWFyZG93bigpJyBhZnRlciB0aGUg
Y29weSBpcyBkb25lLgorICovCitpbnQgdm1fY29weV9zZXR1cChzdHJ1Y3Qgdm0gKnZtLCBpbnQg
dmNwdWlkLCBzdHJ1Y3Qgdm1fZ3Vlc3RfcGFnaW5nICpwYWdpbmcsCisgICAgdWludDY0X3QgZ2xh
LCBzaXplX3QgbGVuLCBpbnQgcHJvdCwgc3RydWN0IHZtX2NvcHlpbmZvICpjb3B5aW5mbywKKyAg
ICBpbnQgbnVtX2NvcHlpbmZvLCBpbnQgKmlzX2ZhdWx0KTsKK3ZvaWQgdm1fY29weV90ZWFyZG93
bihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qgdm1fY29weWluZm8gKmNvcHlpbmZv
LAorICAgIGludCBudW1fY29weWluZm8pOwordm9pZCB2bV9jb3B5aW4oc3RydWN0IHZtICp2bSwg
aW50IHZjcHVpZCwgc3RydWN0IHZtX2NvcHlpbmZvICpjb3B5aW5mbywKKyAgICB2b2lkICprYWRk
ciwgc2l6ZV90IGxlbik7Cit2b2lkIHZtX2NvcHlvdXQoc3RydWN0IHZtICp2bSwgaW50IHZjcHVp
ZCwgY29uc3Qgdm9pZCAqa2FkZHIsCisgICAgc3RydWN0IHZtX2NvcHlpbmZvICpjb3B5aW5mbywg
c2l6ZV90IGxlbik7CisKK2ludCB2Y3B1X3RyYWNlX2V4Y2VwdGlvbnMoc3RydWN0IHZtICp2bSwg
aW50IHZjcHVpZCk7CisjZW5kaWYJLyogS0VSTkVMICovCisKKyNkZWZpbmUJVk1fTUFYQ1BVCTE2
CQkJLyogbWF4aW11bSB2aXJ0dWFsIGNwdXMgKi8KKworLyoKKyAqIElkZW50aWZpZXJzIGZvciBv
cHRpb25hbCB2bW0gY2FwYWJpbGl0aWVzCisgKi8KK2VudW0gdm1fY2FwX3R5cGUgeworCVZNX0NB
UF9IQUxUX0VYSVQsCisJVk1fQ0FQX01UUkFQX0VYSVQsCisJVk1fQ0FQX1BBVVNFX0VYSVQsCisJ
Vk1fQ0FQX1VOUkVTVFJJQ1RFRF9HVUVTVCwKKwlWTV9DQVBfRU5BQkxFX0lOVlBDSUQsCisJVk1f
Q0FQX01BWAorfTsKKworZW51bSB2bV9pbnRyX3RyaWdnZXIgeworCUVER0VfVFJJR0dFUiwKKwlM
RVZFTF9UUklHR0VSCit9OworCisvKiBPcGVyYXRpb25zIHN1cHBvcnRlZCBvbiBWTV9JT19SRUdf
SEFORExFUiBpb2N0bC4gKi8KK2VudW0gdm1faW9fcmVnaF90eXBlIHsKKwlWTV9JT19SRUdIX0RF
TEVURSwKKwlWTV9JT19SRUdIX0tXRVZFTlRTLAkvKiBrZXJuZWwgd2FpdCBldmVudHMgKi8KKwlW
TV9JT19SRUdIX01BWAorfTsKKworLyoKKyAqIFRoZSAnYWNjZXNzJyBmaWVsZCBoYXMgdGhlIGZv
cm1hdCBzcGVjaWZpZWQgaW4gVGFibGUgMjEtMiBvZiB0aGUgSW50ZWwKKyAqIEFyY2hpdGVjdHVy
ZSBNYW51YWwgdm9sIDNiLgorICoKKyAqIFhYWCBUaGUgY29udGVudHMgb2YgdGhlICdhY2Nlc3Mn
IGZpZWxkIGFyZSBhcmNoaXRlY3R1cmFsbHkgZGVmaW5lZCBleGNlcHQKKyAqIGJpdCAxNiAtIFNl
Z21lbnQgVW51c2FibGUuCisgKi8KK3N0cnVjdCBzZWdfZGVzYyB7CisJdWludDY0X3QJYmFzZTsK
Kwl1aW50MzJfdAlsaW1pdDsKKwl1aW50MzJfdAlhY2Nlc3M7Cit9OworI2RlZmluZQlTRUdfREVT
Q19UWVBFKGFjY2VzcykJCSgoYWNjZXNzKSAmIDB4MDAxZikKKyNkZWZpbmUJU0VHX0RFU0NfRFBM
KGFjY2VzcykJCSgoKGFjY2VzcykgPj4gNSkgJiAweDMpCisjZGVmaW5lCVNFR19ERVNDX1BSRVNF
TlQoYWNjZXNzKQkoKChhY2Nlc3MpICYgMHgwMDgwKSA/IDEgOiAwKQorI2RlZmluZQlTRUdfREVT
Q19ERUYzMihhY2Nlc3MpCQkoKChhY2Nlc3MpICYgMHg0MDAwKSA/IDEgOiAwKQorI2RlZmluZQlT
RUdfREVTQ19HUkFOVUxBUklUWShhY2Nlc3MpCSgoKGFjY2VzcykgJiAweDgwMDApID8gMSA6IDAp
CisjZGVmaW5lCVNFR19ERVNDX1VOVVNBQkxFKGFjY2VzcykJKCgoYWNjZXNzKSAmIDB4MTAwMDAp
ID8gMSA6IDApCisKK2VudW0gdm1fY3B1X21vZGUgeworCUNQVV9NT0RFX1JFQUwsCisJQ1BVX01P
REVfUFJPVEVDVEVELAorCUNQVV9NT0RFX0NPTVBBVElCSUxJVFksCQkvKiBJQS0zMkUgbW9kZSAo
Q1MuTCA9IDApICovCisJQ1BVX01PREVfNjRCSVQsCQkJLyogSUEtMzJFIG1vZGUgKENTLkwgPSAx
KSAqLworfTsKKworZW51bSB2bV9wYWdpbmdfbW9kZSB7CisJUEFHSU5HX01PREVfRkxBVCwKKwlQ
QUdJTkdfTU9ERV8zMiwKKwlQQUdJTkdfTU9ERV9QQUUsCisJUEFHSU5HX01PREVfNjQsCit9Owor
CitzdHJ1Y3Qgdm1fZ3Vlc3RfcGFnaW5nIHsKKwl1aW50NjRfdAljcjM7CisJaW50CQljcGw7CisJ
ZW51bSB2bV9jcHVfbW9kZSBjcHVfbW9kZTsKKwllbnVtIHZtX3BhZ2luZ19tb2RlIHBhZ2luZ19t
b2RlOworfTsKKworLyoKKyAqIFRoZSBkYXRhIHN0cnVjdHVyZXMgJ3ZpZScgYW5kICd2aWVfb3An
IGFyZSBtZWFudCB0byBiZSBvcGFxdWUgdG8gdGhlCisgKiBjb25zdW1lcnMgb2YgaW5zdHJ1Y3Rp
b24gZGVjb2RpbmcuIFRoZSBvbmx5IHJlYXNvbiB3aHkgdGhlaXIgY29udGVudHMKKyAqIG5lZWQg
dG8gYmUgZXhwb3NlZCBpcyBiZWNhdXNlIHRoZXkgYXJlIHBhcnQgb2YgdGhlICd2bV9leGl0JyBz
dHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCB2aWVfb3AgeworCXVpbnQ4X3QJCW9wX2J5dGU7CS8qIGFj
dHVhbCBvcGNvZGUgYnl0ZSAqLworCXVpbnQ4X3QJCW9wX3R5cGU7CS8qIHR5cGUgb2Ygb3BlcmF0
aW9uIChlLmcuIE1PVikgKi8KKwl1aW50MTZfdAlvcF9mbGFnczsKK307CisKKyNkZWZpbmUJVklF
X0lOU1RfU0laRQkxNQorc3RydWN0IHZpZSB7CisJdWludDhfdAkJaW5zdFtWSUVfSU5TVF9TSVpF
XTsJLyogaW5zdHJ1Y3Rpb24gYnl0ZXMgKi8KKwl1aW50OF90CQludW1fdmFsaWQ7CQkvKiBzaXpl
IG9mIHRoZSBpbnN0cnVjdGlvbiAqLworCXVpbnQ4X3QJCW51bV9wcm9jZXNzZWQ7CisKKwl1aW50
OF90CQlhZGRyc2l6ZTo0LCBvcHNpemU6NDsJLyogYWRkcmVzcyBhbmQgb3BlcmFuZCBzaXplcyAq
LworCXVpbnQ4X3QJCXJleF93OjEsCQkvKiBSRVggcHJlZml4ICovCisJCQlyZXhfcjoxLAorCQkJ
cmV4X3g6MSwKKwkJCXJleF9iOjEsCisJCQlyZXhfcHJlc2VudDoxLAorCQkJcmVwel9wcmVzZW50
OjEsCQkvKiBSRVAvUkVQRS9SRVBaIHByZWZpeCAqLworCQkJcmVwbnpfcHJlc2VudDoxLAkvKiBS
RVBORS9SRVBOWiBwcmVmaXggKi8KKwkJCW9wc2l6ZV9vdmVycmlkZToxLAkvKiBPcGVyYW5kIHNp
emUgb3ZlcnJpZGUgKi8KKwkJCWFkZHJzaXplX292ZXJyaWRlOjEsCS8qIEFkZHJlc3Mgc2l6ZSBv
dmVycmlkZSAqLworCQkJc2VnbWVudF9vdmVycmlkZToxOwkvKiBTZWdtZW50IG92ZXJyaWRlICov
CisKKwl1aW50OF90CQltb2Q6MiwJCQkvKiBNb2RSTSBieXRlICovCisJCQlyZWc6NCwKKwkJCXJt
OjQ7CisKKwl1aW50OF90CQlzczoyLAkJCS8qIFNJQiBieXRlICovCisJCQlpbmRleDo0LAorCQkJ
YmFzZTo0OworCisJdWludDhfdAkJZGlzcF9ieXRlczsKKwl1aW50OF90CQlpbW1fYnl0ZXM7CisK
Kwl1aW50OF90CQlzY2FsZTsKKwlpbnQJCWJhc2VfcmVnaXN0ZXI7CQkvKiBWTV9SRUdfR1VFU1Rf
eHl6ICovCisJaW50CQlpbmRleF9yZWdpc3RlcjsJCS8qIFZNX1JFR19HVUVTVF94eXogKi8KKwlp
bnQJCXNlZ21lbnRfcmVnaXN0ZXI7CS8qIFZNX1JFR19HVUVTVF94eXogKi8KKworCWludDY0X3QJ
CWRpc3BsYWNlbWVudDsJCS8qIG9wdGlvbmFsIGFkZHIgZGlzcGxhY2VtZW50ICovCisJaW50NjRf
dAkJaW1tZWRpYXRlOwkJLyogb3B0aW9uYWwgaW1tZWRpYXRlIG9wZXJhbmQgKi8KKworCXVpbnQ4
X3QJCWRlY29kZWQ7CS8qIHNldCB0byAxIGlmIHN1Y2Nlc3NmdWxseSBkZWNvZGVkICovCisKKwlz
dHJ1Y3QgdmllX29wCW9wOwkJCS8qIG9wY29kZSBkZXNjcmlwdGlvbiAqLworfTsKKworZW51bSB2
bV9leGl0Y29kZSB7CisJVk1fRVhJVENPREVfSU5PVVQsCisJVk1fRVhJVENPREVfVk1YLAorCVZN
X0VYSVRDT0RFX0JPR1VTLAorCVZNX0VYSVRDT0RFX1JETVNSLAorCVZNX0VYSVRDT0RFX1dSTVNS
LAorCVZNX0VYSVRDT0RFX0hMVCwKKwlWTV9FWElUQ09ERV9NVFJBUCwKKwlWTV9FWElUQ09ERV9Q
QVVTRSwKKwlWTV9FWElUQ09ERV9QQUdJTkcsCisJVk1fRVhJVENPREVfSU5TVF9FTVVMLAorCVZN
X0VYSVRDT0RFX1NQSU5VUF9BUCwKKwlWTV9FWElUQ09ERV9ERVBSRUNBVEVEMSwJLyogdXNlZCB0
byBiZSBTUElORE9XTl9DUFUgKi8KKwlWTV9FWElUQ09ERV9SRU5ERVpWT1VTLAorCVZNX0VYSVRD
T0RFX0lPQVBJQ19FT0ksCisJVk1fRVhJVENPREVfU1VTUEVOREVELAorCVZNX0VYSVRDT0RFX0lO
T1VUX1NUUiwKKwlWTV9FWElUQ09ERV9UQVNLX1NXSVRDSCwKKwlWTV9FWElUQ09ERV9NT05JVE9S
LAorCVZNX0VYSVRDT0RFX01XQUlULAorCVZNX0VYSVRDT0RFX1NWTSwKKwlWTV9FWElUQ09ERV9S
RVFJRExFLAorCVZNX0VYSVRDT0RFX01BWAorfTsKKworc3RydWN0IHZtX2lub3V0IHsKKwl1aW50
MTZfdAlieXRlczozOwkvKiAxIG9yIDIgb3IgNCAqLworCXVpbnQxNl90CWluOjE7CisJdWludDE2
X3QJc3RyaW5nOjE7CisJdWludDE2X3QJcmVwOjE7CisJdWludDE2X3QJcG9ydDsKKwl1aW50MzJf
dAllYXg7CQkvKiB2YWxpZCBmb3Igb3V0ICovCit9OworCitzdHJ1Y3Qgdm1faW5vdXRfc3RyIHsK
KwlzdHJ1Y3Qgdm1faW5vdXQJaW5vdXQ7CQkvKiBtdXN0IGJlIHRoZSBmaXJzdCBlbGVtZW50ICov
CisJc3RydWN0IHZtX2d1ZXN0X3BhZ2luZyBwYWdpbmc7CisJdWludDY0X3QJcmZsYWdzOworCXVp
bnQ2NF90CWNyMDsKKwl1aW50NjRfdAlpbmRleDsKKwl1aW50NjRfdAljb3VudDsJCS8qIHJlcD0x
ICglcmN4KSwgcmVwPTAgKDEpICovCisJaW50CQlhZGRyc2l6ZTsKKwllbnVtIHZtX3JlZ19uYW1l
IHNlZ19uYW1lOworCXN0cnVjdCBzZWdfZGVzYyBzZWdfZGVzYzsKK307CisKK2VudW0gdGFza19z
d2l0Y2hfcmVhc29uIHsKKwlUU1JfQ0FMTCwKKwlUU1JfSVJFVCwKKwlUU1JfSk1QLAorCVRTUl9J
RFRfR0FURSwJLyogdGFzayBnYXRlIGluIElEVCAqLworfTsKKworc3RydWN0IHZtX3Rhc2tfc3dp
dGNoIHsKKwl1aW50MTZfdAl0c3NzZWw7CQkvKiBuZXcgVFNTIHNlbGVjdG9yICovCisJaW50CQll
eHQ7CQkvKiB0YXNrIHN3aXRjaCBkdWUgdG8gZXh0ZXJuYWwgZXZlbnQgKi8KKwl1aW50MzJfdAll
cnJjb2RlOworCWludAkJZXJyY29kZV92YWxpZDsJLyogcHVzaCAnZXJyY29kZScgb24gdGhlIG5l
dyBzdGFjayAqLworCWVudW0gdGFza19zd2l0Y2hfcmVhc29uIHJlYXNvbjsKKwlzdHJ1Y3Qgdm1f
Z3Vlc3RfcGFnaW5nIHBhZ2luZzsKK307CisKK3N0cnVjdCB2bV9leGl0IHsKKwllbnVtIHZtX2V4
aXRjb2RlCWV4aXRjb2RlOworCWludAkJCWluc3RfbGVuZ3RoOwkvKiAwIG1lYW5zIHVua25vd24g
Ki8KKwl1aW50NjRfdAkJcmlwOworCXVuaW9uIHsKKwkJc3RydWN0IHZtX2lub3V0CWlub3V0Owor
CQlzdHJ1Y3Qgdm1faW5vdXRfc3RyIGlub3V0X3N0cjsKKwkJc3RydWN0IHsKKwkJCXVpbnQ2NF90
CWdwYTsKKwkJCWludAkJZmF1bHRfdHlwZTsKKwkJfSBwYWdpbmc7CisJCXN0cnVjdCB7CisJCQl1
aW50NjRfdAlncGE7CisJCQl1aW50NjRfdAlnbGE7CisJCQl1aW50NjRfdAljc19iYXNlOworCQkJ
aW50CQljc19kOwkJLyogQ1MuRCAqLworCQkJc3RydWN0IHZtX2d1ZXN0X3BhZ2luZyBwYWdpbmc7
CisJCQlzdHJ1Y3QgdmllCXZpZTsKKwkJfSBpbnN0X2VtdWw7CisJCS8qCisJCSAqIFZNWCBzcGVj
aWZpYyBwYXlsb2FkLiBVc2VkIHdoZW4gdGhlcmUgaXMgbm8gImJldHRlciIKKwkJICogZXhpdGNv
ZGUgdG8gcmVwcmVzZW50IHRoZSBWTS1leGl0LgorCQkgKi8KKwkJc3RydWN0IHsKKwkJCWludAkJ
c3RhdHVzOwkJLyogdm14IGluc3Qgc3RhdHVzICovCisJCQkvKgorCQkJICogJ2V4aXRfcmVhc29u
JyBhbmQgJ2V4aXRfcXVhbGlmaWNhdGlvbicgYXJlIHZhbGlkCisJCQkgKiBvbmx5IGlmICdzdGF0
dXMnIGlzIHplcm8uCisJCQkgKi8KKwkJCXVpbnQzMl90CWV4aXRfcmVhc29uOworCQkJdWludDY0
X3QJZXhpdF9xdWFsaWZpY2F0aW9uOworCQkJLyoKKwkJCSAqICdpbnN0X2Vycm9yJyBhbmQgJ2lu
c3RfdHlwZScgYXJlIHZhbGlkCisJCQkgKiBvbmx5IGlmICdzdGF0dXMnIGlzIG5vbi16ZXJvLgor
CQkJICovCisJCQlpbnQJCWluc3RfdHlwZTsKKwkJCWludAkJaW5zdF9lcnJvcjsKKwkJfSB2bXg7
CisJCS8qCisJCSAqIFNWTSBzcGVjaWZpYyBwYXlsb2FkLgorCQkgKi8KKwkJc3RydWN0IHsKKwkJ
CXVpbnQ2NF90CWV4aXRjb2RlOworCQkJdWludDY0X3QJZXhpdGluZm8xOworCQkJdWludDY0X3QJ
ZXhpdGluZm8yOworCQl9IHN2bTsKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90CWNvZGU7CQkvKiBl
Y3ggdmFsdWUgKi8KKwkJCXVpbnQ2NF90CXd2YWw7CisJCX0gbXNyOworCQlzdHJ1Y3QgeworCQkJ
aW50CQl2Y3B1OworCQkJdWludDY0X3QJcmlwOworCQl9IHNwaW51cF9hcDsKKwkJc3RydWN0IHsK
KwkJCXVpbnQ2NF90CXJmbGFnczsKKwkJfSBobHQ7CisJCXN0cnVjdCB7CisJCQlpbnQJCXZlY3Rv
cjsKKwkJfSBpb2FwaWNfZW9pOworCQlzdHJ1Y3QgeworCQkJZW51bSB2bV9zdXNwZW5kX2hvdyBo
b3c7CisJCX0gc3VzcGVuZGVkOworCQlzdHJ1Y3Qgdm1fdGFza19zd2l0Y2ggdGFza19zd2l0Y2g7
CisJfSB1OworfTsKKworLyogQVBJcyB0byBpbmplY3QgZmF1bHRzIGludG8gdGhlIGd1ZXN0ICov
Cit2b2lkIHZtX2luamVjdF9mYXVsdCh2b2lkICp2bSwgaW50IHZjcHVpZCwgaW50IHZlY3Rvciwg
aW50IGVycmNvZGVfdmFsaWQsCisgICAgaW50IGVycmNvZGUpOworCitzdGF0aWMgX19pbmxpbmUg
dm9pZAordm1faW5qZWN0X3VkKHZvaWQgKnZtLCBpbnQgdmNwdWlkKQoreworCXZtX2luamVjdF9m
YXVsdCh2bSwgdmNwdWlkLCBJRFRfVUQsIDAsIDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9p
ZAordm1faW5qZWN0X2dwKHZvaWQgKnZtLCBpbnQgdmNwdWlkKQoreworCXZtX2luamVjdF9mYXVs
dCh2bSwgdmNwdWlkLCBJRFRfR1AsIDEsIDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAor
dm1faW5qZWN0X2FjKHZvaWQgKnZtLCBpbnQgdmNwdWlkLCBpbnQgZXJyY29kZSkKK3sKKwl2bV9p
bmplY3RfZmF1bHQodm0sIHZjcHVpZCwgSURUX0FDLCAxLCBlcnJjb2RlKTsKK30KKworc3RhdGlj
IF9faW5saW5lIHZvaWQKK3ZtX2luamVjdF9zcyh2b2lkICp2bSwgaW50IHZjcHVpZCwgaW50IGVy
cmNvZGUpCit7CisJdm1faW5qZWN0X2ZhdWx0KHZtLCB2Y3B1aWQsIElEVF9TUywgMSwgZXJyY29k
ZSk7Cit9CisKK3ZvaWQgdm1faW5qZWN0X3BmKHZvaWQgKnZtLCBpbnQgdmNwdWlkLCBpbnQgZXJy
b3JfY29kZSwgdWludDY0X3QgY3IyKTsKKworaW50IHZtX3Jlc3RhcnRfaW5zdHJ1Y3Rpb24odm9p
ZCAqdm0sIGludCB2Y3B1aWQpOworCisjZW5kaWYJLyogX1ZNTV9IXyAqLwpkaWZmIC11IC1yIC1O
IHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdm1tLmgub3JpZyAvdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS92bW0uaC5vcmlnCi0tLSB1c3Ivc3JjL3N5cy9tb2R1
bGVzL25ldG1hcC9tYWNoaW5lL3ZtbS5oLm9yaWcJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAw
MDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3ZtbS5oLm9y
aWcJMjAxNi0xMS0zMCAxMDo1Mjo1My44MjI5NTkwMDAgKzAwMDAKQEAgLTAsMCArMSw2NzUgQEAK
Ky8qLQorICogQ29weXJpZ2h0IChjKSAyMDExIE5ldEFwcCwgSW5jLgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE5F
VEFQUCwgSU5DIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgTkVUQVBQLCBJTkMg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAk
RnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvdm1tLmggMjk5MDEwIDIwMTYt
MDUtMDMgMjI6MTM6MDRaIHBmZyAkCisgKi8KKworI2lmbmRlZiBfVk1NX0hfCisjZGVmaW5lCV9W
TU1fSF8KKworI2luY2x1ZGUgPHg4Ni9zZWdtZW50cy5oPgorCitlbnVtIHZtX3N1c3BlbmRfaG93
IHsKKwlWTV9TVVNQRU5EX05PTkUsCisJVk1fU1VTUEVORF9SRVNFVCwKKwlWTV9TVVNQRU5EX1BP
V0VST0ZGLAorCVZNX1NVU1BFTkRfSEFMVCwKKwlWTV9TVVNQRU5EX1RSSVBMRUZBVUxULAorCVZN
X1NVU1BFTkRfTEFTVAorfTsKKworLyoKKyAqIElkZW50aWZpZXJzIGZvciBhcmNoaXRlY3R1cmFs
bHkgZGVmaW5lZCByZWdpc3RlcnMuCisgKi8KK2VudW0gdm1fcmVnX25hbWUgeworCVZNX1JFR19H
VUVTVF9SQVgsCisJVk1fUkVHX0dVRVNUX1JCWCwKKwlWTV9SRUdfR1VFU1RfUkNYLAorCVZNX1JF
R19HVUVTVF9SRFgsCisJVk1fUkVHX0dVRVNUX1JTSSwKKwlWTV9SRUdfR1VFU1RfUkRJLAorCVZN
X1JFR19HVUVTVF9SQlAsCisJVk1fUkVHX0dVRVNUX1I4LAorCVZNX1JFR19HVUVTVF9SOSwKKwlW
TV9SRUdfR1VFU1RfUjEwLAorCVZNX1JFR19HVUVTVF9SMTEsCisJVk1fUkVHX0dVRVNUX1IxMiwK
KwlWTV9SRUdfR1VFU1RfUjEzLAorCVZNX1JFR19HVUVTVF9SMTQsCisJVk1fUkVHX0dVRVNUX1Ix
NSwKKwlWTV9SRUdfR1VFU1RfQ1IwLAorCVZNX1JFR19HVUVTVF9DUjMsCisJVk1fUkVHX0dVRVNU
X0NSNCwKKwlWTV9SRUdfR1VFU1RfRFI3LAorCVZNX1JFR19HVUVTVF9SU1AsCisJVk1fUkVHX0dV
RVNUX1JJUCwKKwlWTV9SRUdfR1VFU1RfUkZMQUdTLAorCVZNX1JFR19HVUVTVF9FUywKKwlWTV9S
RUdfR1VFU1RfQ1MsCisJVk1fUkVHX0dVRVNUX1NTLAorCVZNX1JFR19HVUVTVF9EUywKKwlWTV9S
RUdfR1VFU1RfRlMsCisJVk1fUkVHX0dVRVNUX0dTLAorCVZNX1JFR19HVUVTVF9MRFRSLAorCVZN
X1JFR19HVUVTVF9UUiwKKwlWTV9SRUdfR1VFU1RfSURUUiwKKwlWTV9SRUdfR1VFU1RfR0RUUiwK
KwlWTV9SRUdfR1VFU1RfRUZFUiwKKwlWTV9SRUdfR1VFU1RfQ1IyLAorCVZNX1JFR19HVUVTVF9Q
RFBURTAsCisJVk1fUkVHX0dVRVNUX1BEUFRFMSwKKwlWTV9SRUdfR1VFU1RfUERQVEUyLAorCVZN
X1JFR19HVUVTVF9QRFBURTMsCisJVk1fUkVHX0dVRVNUX0lOVFJfU0hBRE9XLAorCVZNX1JFR19M
QVNUCit9OworCitlbnVtIHgyYXBpY19zdGF0ZSB7CisJWDJBUElDX0RJU0FCTEVELAorCVgyQVBJ
Q19FTkFCTEVELAorCVgyQVBJQ19TVEFURV9MQVNUCit9OworCisjZGVmaW5lCVZNX0lOVElORk9f
VkVDVE9SKGluZm8pCSgoaW5mbykgJiAweGZmKQorI2RlZmluZQlWTV9JTlRJTkZPX0RFTF9FUlJD
T0RFCTB4ODAwCisjZGVmaW5lCVZNX0lOVElORk9fUlNWRAkJMHg3ZmZmZjAwMAorI2RlZmluZQlW
TV9JTlRJTkZPX1ZBTElECTB4ODAwMDAwMDAKKyNkZWZpbmUJVk1fSU5USU5GT19UWVBFCQkweDcw
MAorI2RlZmluZQlWTV9JTlRJTkZPX0hXSU5UUgkoMCA8PCA4KQorI2RlZmluZQlWTV9JTlRJTkZP
X05NSQkJKDIgPDwgOCkKKyNkZWZpbmUJVk1fSU5USU5GT19IV0VYQ0VQVElPTgkoMyA8PCA4KQor
I2RlZmluZQlWTV9JTlRJTkZPX1NXSU5UUgkoNCA8PCA4KQorCisjaWZkZWYgX0tFUk5FTAorCisj
ZGVmaW5lCVZNX01BWF9OQU1FTEVOCTMyCisKK3N0cnVjdCB2bTsKK3N0cnVjdCB2bV9leGNlcHRp
b247CitzdHJ1Y3Qgc2VnX2Rlc2M7CitzdHJ1Y3Qgdm1fZXhpdDsKK3N0cnVjdCB2bV9ydW47Citz
dHJ1Y3QgdmhwZXQ7CitzdHJ1Y3QgdmlvYXBpYzsKK3N0cnVjdCB2bGFwaWM7CitzdHJ1Y3Qgdm1z
cGFjZTsKK3N0cnVjdCB2bV9vYmplY3Q7CitzdHJ1Y3Qgdm1fZ3Vlc3RfcGFnaW5nOworc3RydWN0
IHBtYXA7CisKK3N0cnVjdCB2bV9ldmVudGluZm8geworCXZvaWQJKnJwdHI7CQkvKiByZW5kZXp2
b3VzIGNvb2tpZSAqLworCWludAkqc3B0cjsJCS8qIHN1c3BlbmQgY29va2llICovCisJaW50CSpp
cHRyOwkJLyogcmVxaWRsZSBjb29raWUgKi8KK307CisKK3R5cGVkZWYgaW50CSgqdm1tX2luaXRf
ZnVuY190KShpbnQgaXBpbnVtKTsKK3R5cGVkZWYgaW50CSgqdm1tX2NsZWFudXBfZnVuY190KSh2
b2lkKTsKK3R5cGVkZWYgdm9pZAkoKnZtbV9yZXN1bWVfZnVuY190KSh2b2lkKTsKK3R5cGVkZWYg
dm9pZCAqCSgqdm1pX2luaXRfZnVuY190KShzdHJ1Y3Qgdm0gKnZtLCBzdHJ1Y3QgcG1hcCAqcG1h
cCk7Cit0eXBlZGVmIGludAkoKnZtaV9ydW5fZnVuY190KSh2b2lkICp2bWksIGludCB2Y3B1LCBy
ZWdpc3Rlcl90IHJpcCwKKwkJICAgIHN0cnVjdCBwbWFwICpwbWFwLCBzdHJ1Y3Qgdm1fZXZlbnRp
bmZvICppbmZvKTsKK3R5cGVkZWYgdm9pZAkoKnZtaV9jbGVhbnVwX2Z1bmNfdCkodm9pZCAqdm1p
KTsKK3R5cGVkZWYgaW50CSgqdm1pX2dldF9yZWdpc3Rlcl90KSh2b2lkICp2bWksIGludCB2Y3B1
LCBpbnQgbnVtLAorCQkJCSAgICAgIHVpbnQ2NF90ICpyZXR2YWwpOwordHlwZWRlZiBpbnQJKCp2
bWlfc2V0X3JlZ2lzdGVyX3QpKHZvaWQgKnZtaSwgaW50IHZjcHUsIGludCBudW0sCisJCQkJICAg
ICAgdWludDY0X3QgdmFsKTsKK3R5cGVkZWYgaW50CSgqdm1pX2dldF9kZXNjX3QpKHZvaWQgKnZt
aSwgaW50IHZjcHUsIGludCBudW0sCisJCQkJICBzdHJ1Y3Qgc2VnX2Rlc2MgKmRlc2MpOwordHlw
ZWRlZiBpbnQJKCp2bWlfc2V0X2Rlc2NfdCkodm9pZCAqdm1pLCBpbnQgdmNwdSwgaW50IG51bSwK
KwkJCQkgIHN0cnVjdCBzZWdfZGVzYyAqZGVzYyk7Cit0eXBlZGVmIGludAkoKnZtaV9nZXRfY2Fw
X3QpKHZvaWQgKnZtaSwgaW50IHZjcHUsIGludCBudW0sIGludCAqcmV0dmFsKTsKK3R5cGVkZWYg
aW50CSgqdm1pX3NldF9jYXBfdCkodm9pZCAqdm1pLCBpbnQgdmNwdSwgaW50IG51bSwgaW50IHZh
bCk7Cit0eXBlZGVmIHN0cnVjdCB2bXNwYWNlICogKCp2bWlfdm1zcGFjZV9hbGxvYykodm1fb2Zm
c2V0X3QgbWluLCB2bV9vZmZzZXRfdCBtYXgpOwordHlwZWRlZiB2b2lkCSgqdm1pX3Ztc3BhY2Vf
ZnJlZSkoc3RydWN0IHZtc3BhY2UgKnZtc3BhY2UpOwordHlwZWRlZiBzdHJ1Y3QgdmxhcGljICog
KCp2bWlfdmxhcGljX2luaXQpKHZvaWQgKnZtaSwgaW50IHZjcHUpOwordHlwZWRlZiB2b2lkCSgq
dm1pX3ZsYXBpY19jbGVhbnVwKSh2b2lkICp2bWksIHN0cnVjdCB2bGFwaWMgKnZsYXBpYyk7CisK
K3N0cnVjdCB2bW1fb3BzIHsKKwl2bW1faW5pdF9mdW5jX3QJCWluaXQ7CQkvKiBtb2R1bGUgd2lk
ZSBpbml0aWFsaXphdGlvbiAqLworCXZtbV9jbGVhbnVwX2Z1bmNfdAljbGVhbnVwOworCXZtbV9y
ZXN1bWVfZnVuY190CXJlc3VtZTsKKworCXZtaV9pbml0X2Z1bmNfdAkJdm1pbml0OwkJLyogdm0t
c3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KKwl2bWlfcnVuX2Z1bmNfdAkJdm1ydW47CisJdm1p
X2NsZWFudXBfZnVuY190CXZtY2xlYW51cDsKKwl2bWlfZ2V0X3JlZ2lzdGVyX3QJdm1nZXRyZWc7
CisJdm1pX3NldF9yZWdpc3Rlcl90CXZtc2V0cmVnOworCXZtaV9nZXRfZGVzY190CQl2bWdldGRl
c2M7CisJdm1pX3NldF9kZXNjX3QJCXZtc2V0ZGVzYzsKKwl2bWlfZ2V0X2NhcF90CQl2bWdldGNh
cDsKKwl2bWlfc2V0X2NhcF90CQl2bXNldGNhcDsKKwl2bWlfdm1zcGFjZV9hbGxvYwl2bXNwYWNl
X2FsbG9jOworCXZtaV92bXNwYWNlX2ZyZWUJdm1zcGFjZV9mcmVlOworCXZtaV92bGFwaWNfaW5p
dAkJdmxhcGljX2luaXQ7CisJdm1pX3ZsYXBpY19jbGVhbnVwCXZsYXBpY19jbGVhbnVwOworfTsK
KworZXh0ZXJuIHN0cnVjdCB2bW1fb3BzIHZtbV9vcHNfaW50ZWw7CitleHRlcm4gc3RydWN0IHZt
bV9vcHMgdm1tX29wc19hbWQ7CisKK2ludCB2bV9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgc3Ry
dWN0IHZtICoqcmV0dm0pOwordm9pZCB2bV9kZXN0cm95KHN0cnVjdCB2bSAqdm0pOworaW50IHZt
X3JlaW5pdChzdHJ1Y3Qgdm0gKnZtKTsKK2NvbnN0IGNoYXIgKnZtX25hbWUoc3RydWN0IHZtICp2
bSk7CisKKy8qCisgKiBBUElzIHRoYXQgbW9kaWZ5IHRoZSBndWVzdCBtZW1vcnkgbWFwIHJlcXVp
cmUgYWxsIHZjcHVzIHRvIGJlIGZyb3plbi4KKyAqLworaW50IHZtX21tYXBfbWVtc2VnKHN0cnVj
dCB2bSAqdm0sIHZtX3BhZGRyX3QgZ3BhLCBpbnQgc2VnaWQsIHZtX29vZmZzZXRfdCBvZmYsCisg
ICAgc2l6ZV90IGxlbiwgaW50IHByb3QsIGludCBmbGFncyk7CitpbnQgdm1fYWxsb2NfbWVtc2Vn
KHN0cnVjdCB2bSAqdm0sIGludCBpZGVudCwgc2l6ZV90IGxlbiwgYm9vbCBzeXNtZW0pOwordm9p
ZCB2bV9mcmVlX21lbXNlZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgaWRlbnQpOworaW50IHZtX21hcF9t
bWlvKHN0cnVjdCB2bSAqdm0sIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuLCB2bV9wYWRkcl90
IGhwYSk7CitpbnQgdm1fdW5tYXBfbW1pbyhzdHJ1Y3Qgdm0gKnZtLCB2bV9wYWRkcl90IGdwYSwg
c2l6ZV90IGxlbik7CitpbnQgdm1fYXNzaWduX3BwdGRldihzdHJ1Y3Qgdm0gKnZtLCBpbnQgYnVz
LCBpbnQgc2xvdCwgaW50IGZ1bmMpOworaW50IHZtX3VuYXNzaWduX3BwdGRldihzdHJ1Y3Qgdm0g
KnZtLCBpbnQgYnVzLCBpbnQgc2xvdCwgaW50IGZ1bmMpOworCisvKgorICogQVBJcyB0aGF0IGlu
c3BlY3QgdGhlIGd1ZXN0IG1lbW9yeSBtYXAgcmVxdWlyZSBvbmx5IGEgKnNpbmdsZSogdmNwdSB0
bworICogYmUgZnJvemVuLiBUaGlzIGFjdHMgbGlrZSBhIHJlYWQgbG9jayBvbiB0aGUgZ3Vlc3Qg
bWVtb3J5IG1hcCBzaW5jZSBhbnkKKyAqIG1vZGlmaWNhdGlvbiByZXF1aXJlcyAqYWxsKiB2Y3B1
cyB0byBiZSBmcm96ZW4uCisgKi8KK2ludCB2bV9tbWFwX2dldG5leHQoc3RydWN0IHZtICp2bSwg
dm1fcGFkZHJfdCAqZ3BhLCBpbnQgKnNlZ2lkLAorICAgIHZtX29vZmZzZXRfdCAqc2Vnb2ZmLCBz
aXplX3QgKmxlbiwgaW50ICpwcm90LCBpbnQgKmZsYWdzKTsKK2ludCB2bV9nZXRfbWVtc2VnKHN0
cnVjdCB2bSAqdm0sIGludCBpZGVudCwgc2l6ZV90ICpsZW4sIGJvb2wgKnN5c21lbSwKKyAgICBz
dHJ1Y3Qgdm1fb2JqZWN0ICoqb2JqcHRyKTsKK3ZvaWQgKnZtX2dwYV9ob2xkKHN0cnVjdCB2bSAq
LCBpbnQgdmNwdWlkLCB2bV9wYWRkcl90IGdwYSwgc2l6ZV90IGxlbiwKKyAgICBpbnQgcHJvdCwg
dm9pZCAqKmNvb2tpZSk7Cit2b2lkIHZtX2dwYV9yZWxlYXNlKHZvaWQgKmNvb2tpZSk7Citib29s
IHZtX21lbV9hbGxvY2F0ZWQoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgdm1fcGFkZHJfdCBn
cGEpOworCitpbnQgdm1fZ2V0X3JlZ2lzdGVyKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQg
cmVnLCB1aW50NjRfdCAqcmV0dmFsKTsKK2ludCB2bV9zZXRfcmVnaXN0ZXIoc3RydWN0IHZtICp2
bSwgaW50IHZjcHUsIGludCByZWcsIHVpbnQ2NF90IHZhbCk7CitpbnQgdm1fZ2V0X3NlZ19kZXNj
KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQgcmVnLAorCQkgICAgc3RydWN0IHNlZ19kZXNj
ICpyZXRfZGVzYyk7CitpbnQgdm1fc2V0X3NlZ19kZXNjKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1
LCBpbnQgcmVnLAorCQkgICAgc3RydWN0IHNlZ19kZXNjICpkZXNjKTsKK2ludCB2bV9ydW4oc3Ry
dWN0IHZtICp2bSwgc3RydWN0IHZtX3J1biAqdm1ydW4pOworaW50IHZtX3N1c3BlbmQoc3RydWN0
IHZtICp2bSwgZW51bSB2bV9zdXNwZW5kX2hvdyBob3cpOworaW50IHZtX2luamVjdF9ubWkoc3Ry
dWN0IHZtICp2bSwgaW50IHZjcHUpOworaW50IHZtX25taV9wZW5kaW5nKHN0cnVjdCB2bSAqdm0s
IGludCB2Y3B1aWQpOwordm9pZCB2bV9ubWlfY2xlYXIoc3RydWN0IHZtICp2bSwgaW50IHZjcHVp
ZCk7CitpbnQgdm1faW5qZWN0X2V4dGludChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSk7CitpbnQg
dm1fZXh0aW50X3BlbmRpbmcoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCk7Cit2b2lkIHZtX2V4
dGludF9jbGVhcihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkKTsKK3N0cnVjdCB2bGFwaWMgKnZt
X2xhcGljKHN0cnVjdCB2bSAqdm0sIGludCBjcHUpOworc3RydWN0IHZpb2FwaWMgKnZtX2lvYXBp
YyhzdHJ1Y3Qgdm0gKnZtKTsKK3N0cnVjdCB2aHBldCAqdm1faHBldChzdHJ1Y3Qgdm0gKnZtKTsK
K2ludCB2bV9nZXRfY2FwYWJpbGl0eShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSwgaW50IHR5cGUs
IGludCAqdmFsKTsKK2ludCB2bV9zZXRfY2FwYWJpbGl0eShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw
dSwgaW50IHR5cGUsIGludCB2YWwpOworaW50IHZtX2dldF94MmFwaWNfc3RhdGUoc3RydWN0IHZt
ICp2bSwgaW50IHZjcHUsIGVudW0geDJhcGljX3N0YXRlICpzdGF0ZSk7CitpbnQgdm1fc2V0X3gy
YXBpY19zdGF0ZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSwgZW51bSB4MmFwaWNfc3RhdGUgc3Rh
dGUpOworaW50IHZtX2FwaWNpZDJ2Y3B1aWQoc3RydWN0IHZtICp2bSwgaW50IGFwaWNpZCk7Citp
bnQgdm1fYWN0aXZhdGVfY3B1KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1KTsKK3N0cnVjdCB2bV9l
eGl0ICp2bV9leGl0aW5mbyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkKTsKK3ZvaWQgdm1fZXhp
dF9zdXNwZW5kZWQoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgdWludDY0X3QgcmlwKTsKK3Zv
aWQgdm1fZXhpdF9yZW5kZXp2b3VzKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIHVpbnQ2NF90
IHJpcCk7Cit2b2lkIHZtX2V4aXRfYXN0cGVuZGluZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlk
LCB1aW50NjRfdCByaXApOwordm9pZCB2bV9leGl0X3JlcWlkbGUoc3RydWN0IHZtICp2bSwgaW50
IHZjcHVpZCwgdWludDY0X3QgcmlwKTsKKworI2lmZGVmIF9TWVNfX0NQVVNFVF9IXworLyoKKyAq
IFJlbmRlenZvdXMgYWxsIHZjcHVzIHNwZWNpZmllZCBpbiAnZGVzdCcgYW5kIGV4ZWN1dGUgJ2Z1
bmMoYXJnKScuCisgKiBUaGUgcmVuZGV6dm91cyAnZnVuYyhhcmcpJyBpcyBub3QgYWxsb3dlZCB0
byBkbyBhbnl0aGluZyB0aGF0IHdpbGwKKyAqIGNhdXNlIHRoZSB0aHJlYWQgdG8gYmUgcHV0IHRv
IHNsZWVwLgorICoKKyAqIElmIHRoZSByZW5kZXp2b3VzIGlzIGJlaW5nIGluaXRpYXRlZCBmcm9t
IGEgdmNwdSBjb250ZXh0IHRoZW4gdGhlCisgKiAndmNwdWlkJyBtdXN0IHJlZmVyIHRvIHRoYXQg
dmNwdSwgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSBzZXQgdG8gLTEuCisgKgorICogVGhlIGNhbGxl
ciBjYW5ub3QgaG9sZCBhbnkgbG9ja3Mgd2hlbiBpbml0aWF0aW5nIHRoZSByZW5kZXp2b3VzLgor
ICoKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIEFQSSBtYXkgY2F1c2UgdmNwdXMgb3Ro
ZXIgdGhhbiB0aG9zZSBzcGVjaWZpZWQKKyAqIGJ5ICdkZXN0JyB0byBiZSBzdGFsbGVkLiBUaGUg
Y2FsbGVyIHNob3VsZCBub3QgcmVseSBvbiBhbnkgdmNwdXMgbWFraW5nCisgKiBmb3J3YXJkIHBy
b2dyZXNzIHdoZW4gdGhlIHJlbmRlenZvdXMgaXMgaW4gcHJvZ3Jlc3MuCisgKi8KK3R5cGVkZWYg
dm9pZCAoKnZtX3JlbmRlenZvdXNfZnVuY190KShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB2
b2lkICphcmcpOwordm9pZCB2bV9zbXBfcmVuZGV6dm91cyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw
dWlkLCBjcHVzZXRfdCBkZXN0LAorICAgIHZtX3JlbmRlenZvdXNfZnVuY190IGZ1bmMsIHZvaWQg
KmFyZyk7CitjcHVzZXRfdCB2bV9hY3RpdmVfY3B1cyhzdHJ1Y3Qgdm0gKnZtKTsKK2NwdXNldF90
IHZtX3N1c3BlbmRlZF9jcHVzKHN0cnVjdCB2bSAqdm0pOworI2VuZGlmCS8qIF9TWVNfX0NQVVNF
VF9IXyAqLworCitzdGF0aWMgX19pbmxpbmUgaW50Cit2Y3B1X3JlbmRlenZvdXNfcGVuZGluZyhz
dHJ1Y3Qgdm1fZXZlbnRpbmZvICppbmZvKQoreworCisJcmV0dXJuICgqKCh1aW50cHRyX3QgKiko
aW5mby0+cnB0cikpICE9IDApOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50Cit2Y3B1X3N1c3Bl
bmRlZChzdHJ1Y3Qgdm1fZXZlbnRpbmZvICppbmZvKQoreworCisJcmV0dXJuICgqaW5mby0+c3B0
cik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQKK3ZjcHVfcmVxaWRsZShzdHJ1Y3Qgdm1fZXZl
bnRpbmZvICppbmZvKQoreworCisJcmV0dXJuICgqaW5mby0+aXB0cik7Cit9CisKKy8qCisgKiBS
ZXR1cm4gMSBpZiBkZXZpY2UgaW5kaWNhdGVkIGJ5IGJ1cy9zbG90L2Z1bmMgaXMgc3VwcG9zZWQg
dG8gYmUgYQorICogcGNpIHBhc3N0aHJvdWdoIGRldmljZS4KKyAqCisgKiBSZXR1cm4gMCBvdGhl
cndpc2UuCisgKi8KK2ludCB2bW1faXNfcHB0ZGV2KGludCBidXMsIGludCBzbG90LCBpbnQgZnVu
Yyk7CisKK3ZvaWQgKnZtX2lvbW11X2RvbWFpbihzdHJ1Y3Qgdm0gKnZtKTsKKworZW51bSB2Y3B1
X3N0YXRlIHsKKwlWQ1BVX0lETEUsCisJVkNQVV9GUk9aRU4sCisJVkNQVV9SVU5OSU5HLAorCVZD
UFVfU0xFRVBJTkcsCit9OworCitpbnQgdmNwdV9zZXRfc3RhdGUoc3RydWN0IHZtICp2bSwgaW50
IHZjcHUsIGVudW0gdmNwdV9zdGF0ZSBzdGF0ZSwKKyAgICBib29sIGZyb21faWRsZSk7CitlbnVt
IHZjcHVfc3RhdGUgdmNwdV9nZXRfc3RhdGUoc3RydWN0IHZtICp2bSwgaW50IHZjcHUsIGludCAq
aG9zdGNwdSk7CisKK3N0YXRpYyBpbnQgX19pbmxpbmUKK3ZjcHVfaXNfcnVubmluZyhzdHJ1Y3Qg
dm0gKnZtLCBpbnQgdmNwdSwgaW50ICpob3N0Y3B1KQoreworCXJldHVybiAodmNwdV9nZXRfc3Rh
dGUodm0sIHZjcHUsIGhvc3RjcHUpID09IFZDUFVfUlVOTklORyk7Cit9CisKKyNpZmRlZiBfU1lT
X1BST0NfSF8KK3N0YXRpYyBpbnQgX19pbmxpbmUKK3ZjcHVfc2hvdWxkX3lpZWxkKHN0cnVjdCB2
bSAqdm0sIGludCB2Y3B1KQoreworCisJaWYgKGN1cnRocmVhZC0+dGRfZmxhZ3MgJiAoVERGX0FT
VFBFTkRJTkcgfCBUREZfTkVFRFJFU0NIRUQpKQorCQlyZXR1cm4gKDEpOworCWVsc2UgaWYgKGN1
cnRocmVhZC0+dGRfb3dlcHJlZW1wdCkKKwkJcmV0dXJuICgxKTsKKwllbHNlCisJCXJldHVybiAo
MCk7Cit9CisjZW5kaWYKKwordm9pZCAqdmNwdV9zdGF0cyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw
dSk7Cit2b2lkIHZjcHVfbm90aWZ5X2V2ZW50KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIGJv
b2wgbGFwaWNfaW50cik7CitzdHJ1Y3Qgdm1zcGFjZSAqdm1fZ2V0X3Ztc3BhY2Uoc3RydWN0IHZt
ICp2bSk7CitzdHJ1Y3QgdmF0cGljICp2bV9hdHBpYyhzdHJ1Y3Qgdm0gKnZtKTsKK3N0cnVjdCB2
YXRwaXQgKnZtX2F0cGl0KHN0cnVjdCB2bSAqdm0pOworc3RydWN0IHZwbXRtciAqdm1fcG10bXIo
c3RydWN0IHZtICp2bSk7CitzdHJ1Y3QgdnJ0YyAqdm1fcnRjKHN0cnVjdCB2bSAqdm0pOworCisv
KgorICogSW5qZWN0IGV4Y2VwdGlvbiAndmVjdG9yJyBpbnRvIHRoZSBndWVzdCB2Y3B1LiBUaGlz
IGZ1bmN0aW9uIHJldHVybnMgMCBvbgorICogc3VjY2VzcyBhbmQgbm9uLXplcm8gb24gZmFpbHVy
ZS4KKyAqCisgKiBXcmFwcGVyIGZ1bmN0aW9ucyBsaWtlICd2bV9pbmplY3RfZ3AoKScgc2hvdWxk
IGJlIHByZWZlcnJlZCB0byBjYWxsaW5nCisgKiB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGJlY2F1
c2UgdGhleSBlbmZvcmNlIHRoZSB0cmFwLWxpa2Ugb3IgZmF1bHQtbGlrZQorICogYmVoYXZpb3Ig
b2YgYW4gZXhjZXB0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSB0aHJlYWQgdGhhdCBpcworICogZXhlY3V0aW5nIHRo
aXMgdmNwdS4KKyAqLworaW50IHZtX2luamVjdF9leGNlcHRpb24oc3RydWN0IHZtICp2bSwgaW50
IHZjcHVpZCwgaW50IHZlY3RvciwgaW50IGVycl92YWxpZCwKKyAgICB1aW50MzJfdCBlcnJjb2Rl
LCBpbnQgcmVzdGFydF9pbnN0cnVjdGlvbik7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNh
bGxlZCBhZnRlciBhIFZNLWV4aXQgdGhhdCBvY2N1cnJlZCBkdXJpbmcgZXhjZXB0aW9uIG9yCisg
KiBpbnRlcnJ1cHQgZGVsaXZlcnkgdGhyb3VnaCB0aGUgSURULiBUaGUgZm9ybWF0IG9mICdpbnRp
bmZvJyBpcyBkZXNjcmliZWQKKyAqIGluIEZpZ3VyZSAxNS0xLCAiRVhJVElOVElORk8gZm9yIEFs
bCBJbnRlcmNlcHRzIiwgQVBNLCBWb2wgMi4KKyAqCisgKiBJZiBhIFZNLWV4aXQgaGFuZGxlciBj
b21wbGV0ZXMgdGhlIGV2ZW50IGRlbGl2ZXJ5IHN1Y2Nlc3NmdWxseSB0aGVuIGl0CisgKiBzaG91
bGQgY2FsbCB2bV9leGl0X2ludGluZm8oKSB0byBleHRpbmd1aXNoIHRoZSBwZW5kaW5nIGV2ZW50
LiBGb3IgZS5nLiwKKyAqIGlmIHRoZSB0YXNrIHN3aXRjaCBlbXVsYXRpb24gaXMgdHJpZ2dlcmVk
IHZpYSBhIHRhc2sgZ2F0ZSB0aGVuIGl0IHNob3VsZAorICogY2FsbCB0aGlzIGZ1bmN0aW9uIHdp
dGggJ2ludGluZm89MCcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZXh0ZXJuYWwgZXZlbnQKKyAqIGlz
IG5vdCBwZW5kaW5nIGFueW1vcmUuCisgKgorICogUmV0dXJuIHZhbHVlIGlzIDAgb24gc3VjY2Vz
cyBhbmQgbm9uLXplcm8gb24gZmFpbHVyZS4KKyAqLworaW50IHZtX2V4aXRfaW50aW5mbyhzdHJ1
Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCBpbnRpbmZvKTsKKworLyoKKyAqIFRoaXMg
ZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBldmVyeSBWTS1lbnRyeSB0byByZXRyaWV2ZSBhIHBl
bmRpbmcKKyAqIGV2ZW50IHRoYXQgc2hvdWxkIGJlIGluamVjdGVkIGludG8gdGhlIGd1ZXN0LiBU
aGlzIGZ1bmN0aW9uIGNvbWJpbmVzCisgKiBuZXN0ZWQgZXZlbnRzIGludG8gYSBkb3VibGUgb3Ig
dHJpcGxlIGZhdWx0LgorICoKKyAqIFJldHVybnMgMCBpZiB0aGVyZSBhcmUgbm8gZXZlbnRzIHRo
YXQgbmVlZCB0byBiZSBpbmplY3RlZCBpbnRvIHRoZSBndWVzdAorICogYW5kIG5vbi16ZXJvIG90
aGVyd2lzZS4KKyAqLworaW50IHZtX2VudHJ5X2ludGluZm8oc3RydWN0IHZtICp2bSwgaW50IHZj
cHVpZCwgdWludDY0X3QgKmluZm8pOworCitpbnQgdm1fZ2V0X2ludGluZm8oc3RydWN0IHZtICp2
bSwgaW50IHZjcHVpZCwgdWludDY0X3QgKmluZm8xLCB1aW50NjRfdCAqaW5mbzIpOworCitlbnVt
IHZtX3JlZ19uYW1lIHZtX3NlZ21lbnRfbmFtZShpbnQgc2VnX2VuY29kaW5nKTsKKworc3RydWN0
IHZtX2NvcHlpbmZvIHsKKwl1aW50NjRfdAlncGE7CisJc2l6ZV90CQlsZW47CisJdm9pZAkJKmh2
YTsKKwl2b2lkCQkqY29va2llOworfTsKKworLyoKKyAqIFNldCB1cCAnY29weWluZm9bXScgdG8g
Y29weSB0by9mcm9tIGd1ZXN0IGxpbmVhciBhZGRyZXNzIHNwYWNlIHN0YXJ0aW5nCisgKiBhdCAn
Z2xhJyBhbmQgJ2xlbicgYnl0ZXMgbG9uZy4gVGhlICdwcm90JyBzaG91bGQgYmUgc2V0IHRvIFBS
T1RfUkVBRCBmb3IKKyAqIGEgY29weWluIG9yIFBST1RfV1JJVEUgZm9yIGEgY29weW91dC4gCisg
KgorICogcmV0dmFsCWlzX2ZhdWx0CUludGVycHJldGF0aW9uCisgKiAgIDAJCSAgIDAJCVN1Y2Nl
c3MKKyAqICAgMAkJICAgMQkJQW4gZXhjZXB0aW9uIHdhcyBpbmplY3RlZCBpbnRvIHRoZSBndWVz
dAorICogRUZBVUxUCSAgTi9BCQlVbnJlY292ZXJhYmxlIGVycm9yCisgKgorICogVGhlICdjb3B5
aW5mb1tdJyBjYW4gYmUgcGFzc2VkIHRvICd2bV9jb3B5aW4oKScgb3IgJ3ZtX2NvcHlvdXQoKScg
b25seSBpZgorICogdGhlIHJldHVybiB2YWx1ZSBpcyAwLiBUaGUgJ2NvcHlpbmZvW10nIHJlc291
cmNlcyBzaG91bGQgYmUgZnJlZWQgYnkgY2FsbGluZworICogJ3ZtX2NvcHlfdGVhcmRvd24oKScg
YWZ0ZXIgdGhlIGNvcHkgaXMgZG9uZS4KKyAqLworaW50IHZtX2NvcHlfc2V0dXAoc3RydWN0IHZt
ICp2bSwgaW50IHZjcHVpZCwgc3RydWN0IHZtX2d1ZXN0X3BhZ2luZyAqcGFnaW5nLAorICAgIHVp
bnQ2NF90IGdsYSwgc2l6ZV90IGxlbiwgaW50IHByb3QsIHN0cnVjdCB2bV9jb3B5aW5mbyAqY29w
eWluZm8sCisgICAgaW50IG51bV9jb3B5aW5mbywgaW50ICppc19mYXVsdCk7Cit2b2lkIHZtX2Nv
cHlfdGVhcmRvd24oc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgc3RydWN0IHZtX2NvcHlpbmZv
ICpjb3B5aW5mbywKKyAgICBpbnQgbnVtX2NvcHlpbmZvKTsKK3ZvaWQgdm1fY29weWluKHN0cnVj
dCB2bSAqdm0sIGludCB2Y3B1aWQsIHN0cnVjdCB2bV9jb3B5aW5mbyAqY29weWluZm8sCisgICAg
dm9pZCAqa2FkZHIsIHNpemVfdCBsZW4pOwordm9pZCB2bV9jb3B5b3V0KHN0cnVjdCB2bSAqdm0s
IGludCB2Y3B1aWQsIGNvbnN0IHZvaWQgKmthZGRyLAorICAgIHN0cnVjdCB2bV9jb3B5aW5mbyAq
Y29weWluZm8sIHNpemVfdCBsZW4pOworCitpbnQgdmNwdV90cmFjZV9leGNlcHRpb25zKHN0cnVj
dCB2bSAqdm0sIGludCB2Y3B1aWQpOworI2VuZGlmCS8qIEtFUk5FTCAqLworCisjZGVmaW5lCVZN
X01BWENQVQkxNgkJCS8qIG1heGltdW0gdmlydHVhbCBjcHVzICovCisKKy8qCisgKiBJZGVudGlm
aWVycyBmb3Igb3B0aW9uYWwgdm1tIGNhcGFiaWxpdGllcworICovCitlbnVtIHZtX2NhcF90eXBl
IHsKKwlWTV9DQVBfSEFMVF9FWElULAorCVZNX0NBUF9NVFJBUF9FWElULAorCVZNX0NBUF9QQVVT
RV9FWElULAorCVZNX0NBUF9VTlJFU1RSSUNURURfR1VFU1QsCisJVk1fQ0FQX0VOQUJMRV9JTlZQ
Q0lELAorCVZNX0NBUF9NQVgKK307CisKK2VudW0gdm1faW50cl90cmlnZ2VyIHsKKwlFREdFX1RS
SUdHRVIsCisJTEVWRUxfVFJJR0dFUgorfTsKKwkKKy8qCisgKiBUaGUgJ2FjY2VzcycgZmllbGQg
aGFzIHRoZSBmb3JtYXQgc3BlY2lmaWVkIGluIFRhYmxlIDIxLTIgb2YgdGhlIEludGVsCisgKiBB
cmNoaXRlY3R1cmUgTWFudWFsIHZvbCAzYi4KKyAqCisgKiBYWFggVGhlIGNvbnRlbnRzIG9mIHRo
ZSAnYWNjZXNzJyBmaWVsZCBhcmUgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWQgZXhjZXB0CisgKiBi
aXQgMTYgLSBTZWdtZW50IFVudXNhYmxlLgorICovCitzdHJ1Y3Qgc2VnX2Rlc2MgeworCXVpbnQ2
NF90CWJhc2U7CisJdWludDMyX3QJbGltaXQ7CisJdWludDMyX3QJYWNjZXNzOworfTsKKyNkZWZp
bmUJU0VHX0RFU0NfVFlQRShhY2Nlc3MpCQkoKGFjY2VzcykgJiAweDAwMWYpCisjZGVmaW5lCVNF
R19ERVNDX0RQTChhY2Nlc3MpCQkoKChhY2Nlc3MpID4+IDUpICYgMHgzKQorI2RlZmluZQlTRUdf
REVTQ19QUkVTRU5UKGFjY2VzcykJKCgoYWNjZXNzKSAmIDB4MDA4MCkgPyAxIDogMCkKKyNkZWZp
bmUJU0VHX0RFU0NfREVGMzIoYWNjZXNzKQkJKCgoYWNjZXNzKSAmIDB4NDAwMCkgPyAxIDogMCkK
KyNkZWZpbmUJU0VHX0RFU0NfR1JBTlVMQVJJVFkoYWNjZXNzKQkoKChhY2Nlc3MpICYgMHg4MDAw
KSA/IDEgOiAwKQorI2RlZmluZQlTRUdfREVTQ19VTlVTQUJMRShhY2Nlc3MpCSgoKGFjY2Vzcykg
JiAweDEwMDAwKSA/IDEgOiAwKQorCitlbnVtIHZtX2NwdV9tb2RlIHsKKwlDUFVfTU9ERV9SRUFM
LAorCUNQVV9NT0RFX1BST1RFQ1RFRCwKKwlDUFVfTU9ERV9DT01QQVRJQklMSVRZLAkJLyogSUEt
MzJFIG1vZGUgKENTLkwgPSAwKSAqLworCUNQVV9NT0RFXzY0QklULAkJCS8qIElBLTMyRSBtb2Rl
IChDUy5MID0gMSkgKi8KK307CisKK2VudW0gdm1fcGFnaW5nX21vZGUgeworCVBBR0lOR19NT0RF
X0ZMQVQsCisJUEFHSU5HX01PREVfMzIsCisJUEFHSU5HX01PREVfUEFFLAorCVBBR0lOR19NT0RF
XzY0LAorfTsKKworc3RydWN0IHZtX2d1ZXN0X3BhZ2luZyB7CisJdWludDY0X3QJY3IzOworCWlu
dAkJY3BsOworCWVudW0gdm1fY3B1X21vZGUgY3B1X21vZGU7CisJZW51bSB2bV9wYWdpbmdfbW9k
ZSBwYWdpbmdfbW9kZTsKK307CisKKy8qCisgKiBUaGUgZGF0YSBzdHJ1Y3R1cmVzICd2aWUnIGFu
ZCAndmllX29wJyBhcmUgbWVhbnQgdG8gYmUgb3BhcXVlIHRvIHRoZQorICogY29uc3VtZXJzIG9m
IGluc3RydWN0aW9uIGRlY29kaW5nLiBUaGUgb25seSByZWFzb24gd2h5IHRoZWlyIGNvbnRlbnRz
CisgKiBuZWVkIHRvIGJlIGV4cG9zZWQgaXMgYmVjYXVzZSB0aGV5IGFyZSBwYXJ0IG9mIHRoZSAn
dm1fZXhpdCcgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgdmllX29wIHsKKwl1aW50OF90CQlvcF9i
eXRlOwkvKiBhY3R1YWwgb3Bjb2RlIGJ5dGUgKi8KKwl1aW50OF90CQlvcF90eXBlOwkvKiB0eXBl
IG9mIG9wZXJhdGlvbiAoZS5nLiBNT1YpICovCisJdWludDE2X3QJb3BfZmxhZ3M7Cit9OworCisj
ZGVmaW5lCVZJRV9JTlNUX1NJWkUJMTUKK3N0cnVjdCB2aWUgeworCXVpbnQ4X3QJCWluc3RbVklF
X0lOU1RfU0laRV07CS8qIGluc3RydWN0aW9uIGJ5dGVzICovCisJdWludDhfdAkJbnVtX3ZhbGlk
OwkJLyogc2l6ZSBvZiB0aGUgaW5zdHJ1Y3Rpb24gKi8KKwl1aW50OF90CQludW1fcHJvY2Vzc2Vk
OworCisJdWludDhfdAkJYWRkcnNpemU6NCwgb3BzaXplOjQ7CS8qIGFkZHJlc3MgYW5kIG9wZXJh
bmQgc2l6ZXMgKi8KKwl1aW50OF90CQlyZXhfdzoxLAkJLyogUkVYIHByZWZpeCAqLworCQkJcmV4
X3I6MSwKKwkJCXJleF94OjEsCisJCQlyZXhfYjoxLAorCQkJcmV4X3ByZXNlbnQ6MSwKKwkJCXJl
cHpfcHJlc2VudDoxLAkJLyogUkVQL1JFUEUvUkVQWiBwcmVmaXggKi8KKwkJCXJlcG56X3ByZXNl
bnQ6MSwJLyogUkVQTkUvUkVQTlogcHJlZml4ICovCisJCQlvcHNpemVfb3ZlcnJpZGU6MSwJLyog
T3BlcmFuZCBzaXplIG92ZXJyaWRlICovCisJCQlhZGRyc2l6ZV9vdmVycmlkZToxLAkvKiBBZGRy
ZXNzIHNpemUgb3ZlcnJpZGUgKi8KKwkJCXNlZ21lbnRfb3ZlcnJpZGU6MTsJLyogU2VnbWVudCBv
dmVycmlkZSAqLworCisJdWludDhfdAkJbW9kOjIsCQkJLyogTW9kUk0gYnl0ZSAqLworCQkJcmVn
OjQsCisJCQlybTo0OworCisJdWludDhfdAkJc3M6MiwJCQkvKiBTSUIgYnl0ZSAqLworCQkJaW5k
ZXg6NCwKKwkJCWJhc2U6NDsKKworCXVpbnQ4X3QJCWRpc3BfYnl0ZXM7CisJdWludDhfdAkJaW1t
X2J5dGVzOworCisJdWludDhfdAkJc2NhbGU7CisJaW50CQliYXNlX3JlZ2lzdGVyOwkJLyogVk1f
UkVHX0dVRVNUX3h5eiAqLworCWludAkJaW5kZXhfcmVnaXN0ZXI7CQkvKiBWTV9SRUdfR1VFU1Rf
eHl6ICovCisJaW50CQlzZWdtZW50X3JlZ2lzdGVyOwkvKiBWTV9SRUdfR1VFU1RfeHl6ICovCisK
KwlpbnQ2NF90CQlkaXNwbGFjZW1lbnQ7CQkvKiBvcHRpb25hbCBhZGRyIGRpc3BsYWNlbWVudCAq
LworCWludDY0X3QJCWltbWVkaWF0ZTsJCS8qIG9wdGlvbmFsIGltbWVkaWF0ZSBvcGVyYW5kICov
CisKKwl1aW50OF90CQlkZWNvZGVkOwkvKiBzZXQgdG8gMSBpZiBzdWNjZXNzZnVsbHkgZGVjb2Rl
ZCAqLworCisJc3RydWN0IHZpZV9vcAlvcDsJCQkvKiBvcGNvZGUgZGVzY3JpcHRpb24gKi8KK307
CisKK2VudW0gdm1fZXhpdGNvZGUgeworCVZNX0VYSVRDT0RFX0lOT1VULAorCVZNX0VYSVRDT0RF
X1ZNWCwKKwlWTV9FWElUQ09ERV9CT0dVUywKKwlWTV9FWElUQ09ERV9SRE1TUiwKKwlWTV9FWElU
Q09ERV9XUk1TUiwKKwlWTV9FWElUQ09ERV9ITFQsCisJVk1fRVhJVENPREVfTVRSQVAsCisJVk1f
RVhJVENPREVfUEFVU0UsCisJVk1fRVhJVENPREVfUEFHSU5HLAorCVZNX0VYSVRDT0RFX0lOU1Rf
RU1VTCwKKwlWTV9FWElUQ09ERV9TUElOVVBfQVAsCisJVk1fRVhJVENPREVfREVQUkVDQVRFRDEs
CS8qIHVzZWQgdG8gYmUgU1BJTkRPV05fQ1BVICovCisJVk1fRVhJVENPREVfUkVOREVaVk9VUywK
KwlWTV9FWElUQ09ERV9JT0FQSUNfRU9JLAorCVZNX0VYSVRDT0RFX1NVU1BFTkRFRCwKKwlWTV9F
WElUQ09ERV9JTk9VVF9TVFIsCisJVk1fRVhJVENPREVfVEFTS19TV0lUQ0gsCisJVk1fRVhJVENP
REVfTU9OSVRPUiwKKwlWTV9FWElUQ09ERV9NV0FJVCwKKwlWTV9FWElUQ09ERV9TVk0sCisJVk1f
RVhJVENPREVfUkVRSURMRSwKKwlWTV9FWElUQ09ERV9NQVgKK307CisKK3N0cnVjdCB2bV9pbm91
dCB7CisJdWludDE2X3QJYnl0ZXM6MzsJLyogMSBvciAyIG9yIDQgKi8KKwl1aW50MTZfdAlpbjox
OworCXVpbnQxNl90CXN0cmluZzoxOworCXVpbnQxNl90CXJlcDoxOworCXVpbnQxNl90CXBvcnQ7
CisJdWludDMyX3QJZWF4OwkJLyogdmFsaWQgZm9yIG91dCAqLworfTsKKworc3RydWN0IHZtX2lu
b3V0X3N0ciB7CisJc3RydWN0IHZtX2lub3V0CWlub3V0OwkJLyogbXVzdCBiZSB0aGUgZmlyc3Qg
ZWxlbWVudCAqLworCXN0cnVjdCB2bV9ndWVzdF9wYWdpbmcgcGFnaW5nOworCXVpbnQ2NF90CXJm
bGFnczsKKwl1aW50NjRfdAljcjA7CisJdWludDY0X3QJaW5kZXg7CisJdWludDY0X3QJY291bnQ7
CQkvKiByZXA9MSAoJXJjeCksIHJlcD0wICgxKSAqLworCWludAkJYWRkcnNpemU7CisJZW51bSB2
bV9yZWdfbmFtZSBzZWdfbmFtZTsKKwlzdHJ1Y3Qgc2VnX2Rlc2Mgc2VnX2Rlc2M7Cit9OworCitl
bnVtIHRhc2tfc3dpdGNoX3JlYXNvbiB7CisJVFNSX0NBTEwsCisJVFNSX0lSRVQsCisJVFNSX0pN
UCwKKwlUU1JfSURUX0dBVEUsCS8qIHRhc2sgZ2F0ZSBpbiBJRFQgKi8KK307CisKK3N0cnVjdCB2
bV90YXNrX3N3aXRjaCB7CisJdWludDE2X3QJdHNzc2VsOwkJLyogbmV3IFRTUyBzZWxlY3RvciAq
LworCWludAkJZXh0OwkJLyogdGFzayBzd2l0Y2ggZHVlIHRvIGV4dGVybmFsIGV2ZW50ICovCisJ
dWludDMyX3QJZXJyY29kZTsKKwlpbnQJCWVycmNvZGVfdmFsaWQ7CS8qIHB1c2ggJ2VycmNvZGUn
IG9uIHRoZSBuZXcgc3RhY2sgKi8KKwllbnVtIHRhc2tfc3dpdGNoX3JlYXNvbiByZWFzb247CisJ
c3RydWN0IHZtX2d1ZXN0X3BhZ2luZyBwYWdpbmc7Cit9OworCitzdHJ1Y3Qgdm1fZXhpdCB7CisJ
ZW51bSB2bV9leGl0Y29kZQlleGl0Y29kZTsKKwlpbnQJCQlpbnN0X2xlbmd0aDsJLyogMCBtZWFu
cyB1bmtub3duICovCisJdWludDY0X3QJCXJpcDsKKwl1bmlvbiB7CisJCXN0cnVjdCB2bV9pbm91
dAlpbm91dDsKKwkJc3RydWN0IHZtX2lub3V0X3N0ciBpbm91dF9zdHI7CisJCXN0cnVjdCB7CisJ
CQl1aW50NjRfdAlncGE7CisJCQlpbnQJCWZhdWx0X3R5cGU7CisJCX0gcGFnaW5nOworCQlzdHJ1
Y3QgeworCQkJdWludDY0X3QJZ3BhOworCQkJdWludDY0X3QJZ2xhOworCQkJdWludDY0X3QJY3Nf
YmFzZTsKKwkJCWludAkJY3NfZDsJCS8qIENTLkQgKi8KKwkJCXN0cnVjdCB2bV9ndWVzdF9wYWdp
bmcgcGFnaW5nOworCQkJc3RydWN0IHZpZQl2aWU7CisJCX0gaW5zdF9lbXVsOworCQkvKgorCQkg
KiBWTVggc3BlY2lmaWMgcGF5bG9hZC4gVXNlZCB3aGVuIHRoZXJlIGlzIG5vICJiZXR0ZXIiCisJ
CSAqIGV4aXRjb2RlIHRvIHJlcHJlc2VudCB0aGUgVk0tZXhpdC4KKwkJICovCisJCXN0cnVjdCB7
CisJCQlpbnQJCXN0YXR1czsJCS8qIHZteCBpbnN0IHN0YXR1cyAqLworCQkJLyoKKwkJCSAqICdl
eGl0X3JlYXNvbicgYW5kICdleGl0X3F1YWxpZmljYXRpb24nIGFyZSB2YWxpZAorCQkJICogb25s
eSBpZiAnc3RhdHVzJyBpcyB6ZXJvLgorCQkJICovCisJCQl1aW50MzJfdAlleGl0X3JlYXNvbjsK
KwkJCXVpbnQ2NF90CWV4aXRfcXVhbGlmaWNhdGlvbjsKKwkJCS8qCisJCQkgKiAnaW5zdF9lcnJv
cicgYW5kICdpbnN0X3R5cGUnIGFyZSB2YWxpZAorCQkJICogb25seSBpZiAnc3RhdHVzJyBpcyBu
b24temVyby4KKwkJCSAqLworCQkJaW50CQlpbnN0X3R5cGU7CisJCQlpbnQJCWluc3RfZXJyb3I7
CisJCX0gdm14OworCQkvKgorCQkgKiBTVk0gc3BlY2lmaWMgcGF5bG9hZC4KKwkJICovCisJCXN0
cnVjdCB7CisJCQl1aW50NjRfdAlleGl0Y29kZTsKKwkJCXVpbnQ2NF90CWV4aXRpbmZvMTsKKwkJ
CXVpbnQ2NF90CWV4aXRpbmZvMjsKKwkJfSBzdm07CisJCXN0cnVjdCB7CisJCQl1aW50MzJfdAlj
b2RlOwkJLyogZWN4IHZhbHVlICovCisJCQl1aW50NjRfdAl3dmFsOworCQl9IG1zcjsKKwkJc3Ry
dWN0IHsKKwkJCWludAkJdmNwdTsKKwkJCXVpbnQ2NF90CXJpcDsKKwkJfSBzcGludXBfYXA7CisJ
CXN0cnVjdCB7CisJCQl1aW50NjRfdAlyZmxhZ3M7CisJCX0gaGx0OworCQlzdHJ1Y3QgeworCQkJ
aW50CQl2ZWN0b3I7CisJCX0gaW9hcGljX2VvaTsKKwkJc3RydWN0IHsKKwkJCWVudW0gdm1fc3Vz
cGVuZF9ob3cgaG93OworCQl9IHN1c3BlbmRlZDsKKwkJc3RydWN0IHZtX3Rhc2tfc3dpdGNoIHRh
c2tfc3dpdGNoOworCX0gdTsKK307CisKKy8qIEFQSXMgdG8gaW5qZWN0IGZhdWx0cyBpbnRvIHRo
ZSBndWVzdCAqLwordm9pZCB2bV9pbmplY3RfZmF1bHQodm9pZCAqdm0sIGludCB2Y3B1aWQsIGlu
dCB2ZWN0b3IsIGludCBlcnJjb2RlX3ZhbGlkLAorICAgIGludCBlcnJjb2RlKTsKKworc3RhdGlj
IF9faW5saW5lIHZvaWQKK3ZtX2luamVjdF91ZCh2b2lkICp2bSwgaW50IHZjcHVpZCkKK3sKKwl2
bV9pbmplY3RfZmF1bHQodm0sIHZjcHVpZCwgSURUX1VELCAwLCAwKTsKK30KKworc3RhdGljIF9f
aW5saW5lIHZvaWQKK3ZtX2luamVjdF9ncCh2b2lkICp2bSwgaW50IHZjcHVpZCkKK3sKKwl2bV9p
bmplY3RfZmF1bHQodm0sIHZjcHVpZCwgSURUX0dQLCAxLCAwKTsKK30KKworc3RhdGljIF9faW5s
aW5lIHZvaWQKK3ZtX2luamVjdF9hYyh2b2lkICp2bSwgaW50IHZjcHVpZCwgaW50IGVycmNvZGUp
Cit7CisJdm1faW5qZWN0X2ZhdWx0KHZtLCB2Y3B1aWQsIElEVF9BQywgMSwgZXJyY29kZSk7Cit9
CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCit2bV9pbmplY3Rfc3Modm9pZCAqdm0sIGludCB2Y3B1
aWQsIGludCBlcnJjb2RlKQoreworCXZtX2luamVjdF9mYXVsdCh2bSwgdmNwdWlkLCBJRFRfU1Ms
IDEsIGVycmNvZGUpOworfQorCit2b2lkIHZtX2luamVjdF9wZih2b2lkICp2bSwgaW50IHZjcHVp
ZCwgaW50IGVycm9yX2NvZGUsIHVpbnQ2NF90IGNyMik7CisKK2ludCB2bV9yZXN0YXJ0X2luc3Ry
dWN0aW9uKHZvaWQgKnZtLCBpbnQgdmNwdWlkKTsKKworI2VuZGlmCS8qIF9WTU1fSF8gKi8KZGlm
ZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3ZtbV9kZXYuaCAv
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS92bW1fZGV2LmgKLS0tIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdm1tX2Rldi5oCTE5NzAtMDEtMDEgMDE6MDA6MDAu
MDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS92
bW1fZGV2LmgJMjAxNi0xMS0zMCAxMDo1NjowNS43ODY1ODMwMDAgKzAwMDAKQEAgLTAsMCArMSw0
MTAgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDExIE5ldEFwcCwgSW5jLgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIE5FVEFQUCwgSU5DIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgTkVUQVBQ
LCBJTkMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAq
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisg
KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAq
CisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvdm1tX2Rldi5oIDI5
ODA5NCAyMDE2LTA0LTE2IDAzOjQ0OjUwWiBnamIgJAorICovCisKKyNpZm5kZWYJX1ZNTV9ERVZf
SF8KKyNkZWZpbmUJX1ZNTV9ERVZfSF8KKworI2lmZGVmIF9LRVJORUwKK3ZvaWQJdm1tZGV2X2lu
aXQodm9pZCk7CitpbnQJdm1tZGV2X2NsZWFudXAodm9pZCk7CisjZW5kaWYKKworc3RydWN0IHZt
X21lbW1hcCB7CisJdm1fcGFkZHJfdAlncGE7CisJaW50CQlzZWdpZDsJCS8qIG1lbW9yeSBzZWdt
ZW50ICovCisJdm1fb29mZnNldF90CXNlZ29mZjsJCS8qIG9mZnNldCBpbnRvIG1lbW9yeSBzZWdt
ZW50ICovCisJc2l6ZV90CQlsZW47CQkvKiBtbWFwIGxlbmd0aCAqLworCWludAkJcHJvdDsJCS8q
IFJXWCAqLworCWludAkJZmxhZ3M7Cit9OworI2RlZmluZQlWTV9NRU1NQVBfRl9XSVJFRAkweDAx
CisjZGVmaW5lCVZNX01FTU1BUF9GX0lPTU1VCTB4MDIKKworI2RlZmluZQlWTV9NRU1TRUdfTkFN
RShtKQkoKG0pLT5uYW1lWzBdICE9ICdcMCcgPyAobSktPm5hbWUgOiBOVUxMKQorc3RydWN0IHZt
X21lbXNlZyB7CisJaW50CQlzZWdpZDsKKwlzaXplX3QJCWxlbjsKKwljaGFyCQluYW1lW1NQRUNO
QU1FTEVOICsgMV07Cit9OworCitzdHJ1Y3Qgdm1fcmVnaXN0ZXIgeworCWludAkJY3B1aWQ7CisJ
aW50CQlyZWdudW07CQkvKiBlbnVtIHZtX3JlZ19uYW1lICovCisJdWludDY0X3QJcmVndmFsOwor
fTsKKworc3RydWN0IHZtX3NlZ19kZXNjIHsJCQkvKiBkYXRhIG9yIGNvZGUgc2VnbWVudCAqLwor
CWludAkJY3B1aWQ7CisJaW50CQlyZWdudW07CQkvKiBlbnVtIHZtX3JlZ19uYW1lICovCisJc3Ry
dWN0IHNlZ19kZXNjIGRlc2M7Cit9OworCitzdHJ1Y3Qgdm1fcnVuIHsKKwlpbnQJCWNwdWlkOwor
CXN0cnVjdCB2bV9leGl0CXZtX2V4aXQ7Cit9OworCitzdHJ1Y3Qgdm1fZXhjZXB0aW9uIHsKKwlp
bnQJCWNwdWlkOworCWludAkJdmVjdG9yOworCXVpbnQzMl90CWVycm9yX2NvZGU7CisJaW50CQll
cnJvcl9jb2RlX3ZhbGlkOworCWludAkJcmVzdGFydF9pbnN0cnVjdGlvbjsKK307CisKK3N0cnVj
dCB2bV9sYXBpY19tc2kgeworCXVpbnQ2NF90CW1zZzsKKwl1aW50NjRfdAlhZGRyOworfTsKKwor
c3RydWN0IHZtX2xhcGljX2lycSB7CisJaW50CQljcHVpZDsKKwlpbnQJCXZlY3RvcjsKK307CisK
K3N0cnVjdCB2bV9pb2FwaWNfaXJxIHsKKwlpbnQJCWlycTsKK307CisKK3N0cnVjdCB2bV9pc2Ff
aXJxIHsKKwlpbnQJCWF0cGljX2lycTsKKwlpbnQJCWlvYXBpY19pcnE7Cit9OworCitzdHJ1Y3Qg
dm1faXNhX2lycV90cmlnZ2VyIHsKKwlpbnQJCWF0cGljX2lycTsKKwllbnVtIHZtX2ludHJfdHJp
Z2dlciB0cmlnZ2VyOworfTsKKworc3RydWN0IHZtX2NhcGFiaWxpdHkgeworCWludAkJY3B1aWQ7
CisJZW51bSB2bV9jYXBfdHlwZSBjYXB0eXBlOworCWludAkJY2FwdmFsOworCWludAkJYWxsY3B1
czsKK307CisKK3N0cnVjdCB2bV9wcHRkZXYgeworCWludAkJYnVzOworCWludAkJc2xvdDsKKwlp
bnQJCWZ1bmM7Cit9OworCitzdHJ1Y3Qgdm1fcHB0ZGV2X21taW8geworCWludAkJYnVzOworCWlu
dAkJc2xvdDsKKwlpbnQJCWZ1bmM7CisJdm1fcGFkZHJfdAlncGE7CisJdm1fcGFkZHJfdAlocGE7
CisJc2l6ZV90CQlsZW47Cit9OworCisvKiBBcmd1bWVudCBmb3IgVk1fTUFQX1VTRVJfQlVGIGlv
Y3RsIGluIHZtbWFwaS5jICovCitzdHJ1Y3Qgdm1fdXNlcl9idWYgeworCXZtX3BhZGRyX3QJZ3Bh
OworCXZvaWQgCQkqYWRkcjsKKwlzaXplX3QJCWxlbjsKK307CisKKy8qIEFyZ3VtZW50IGZvciBW
TV9JT19SRUdfSEFORExFUiBpb2N0bCBpbiB2bW1hcGkuYyAqLworc3RydWN0IHZtX2lvX3JlZ19o
YW5kbGVyIHsKKwl1aW50MTZfdAkJcG9ydDsJCS8qIEkvTyBhZGRyZXNzICovCisJdWludDE2X3QJ
CWluOwkJLyogMCBvdXQsIDEgaW4gKi8KKwl1aW50MzJfdAkJbWFza19kYXRhOwkvKiAwIG1lYW5z
IG1hdGNoIGFueXRoaW5nICovCisJdWludDMyX3QJCWRhdGE7CQkvKiBkYXRhIHRvIG1hdGNoICov
CisJZW51bSB2bV9pb19yZWdoX3R5cGUJdHlwZTsJCS8qIGhhbmRsZXIgdHlwZSAqLworCXZvaWQJ
CQkqYXJnOwkJLyogaGFuZGxlciBhcmd1bWVudCAqLworfTsKKworc3RydWN0IHZtX3BwdGRldl9t
c2kgeworCWludAkJdmNwdTsKKwlpbnQJCWJ1czsKKwlpbnQJCXNsb3Q7CisJaW50CQlmdW5jOwor
CWludAkJbnVtdmVjOwkJLyogMCBtZWFucyBkaXNhYmxlZCAqLworCXVpbnQ2NF90CW1zZzsKKwl1
aW50NjRfdAlhZGRyOworfTsKKworc3RydWN0IHZtX3BwdGRldl9tc2l4IHsKKwlpbnQJCXZjcHU7
CisJaW50CQlidXM7CisJaW50CQlzbG90OworCWludAkJZnVuYzsKKwlpbnQJCWlkeDsKKwl1aW50
NjRfdAltc2c7CisJdWludDMyX3QJdmVjdG9yX2NvbnRyb2w7CisJdWludDY0X3QJYWRkcjsKK307
CisKK3N0cnVjdCB2bV9ubWkgeworCWludAkJY3B1aWQ7Cit9OworCisjZGVmaW5lCU1BWF9WTV9T
VEFUUwk2NAorc3RydWN0IHZtX3N0YXRzIHsKKwlpbnQJCWNwdWlkOwkJCQkvKiBpbiAqLworCWlu
dAkJbnVtX2VudHJpZXM7CQkJLyogb3V0ICovCisJc3RydWN0IHRpbWV2YWwJdHY7CisJdWludDY0
X3QJc3RhdGJ1ZltNQVhfVk1fU1RBVFNdOworfTsKKworc3RydWN0IHZtX3N0YXRfZGVzYyB7CisJ
aW50CQlpbmRleDsJCQkJLyogaW4gKi8KKwljaGFyCQlkZXNjWzEyOF07CQkJLyogb3V0ICovCit9
OworCitzdHJ1Y3Qgdm1feDJhcGljIHsKKwlpbnQJCQljcHVpZDsKKwllbnVtIHgyYXBpY19zdGF0
ZQlzdGF0ZTsKK307CisKK3N0cnVjdCB2bV9ncGFfcHRlIHsKKwl1aW50NjRfdAlncGE7CQkJCS8q
IGluICovCisJdWludDY0X3QJcHRlWzRdOwkJCQkvKiBvdXQgKi8KKwlpbnQJCXB0ZW51bTsKK307
CisKK3N0cnVjdCB2bV9ocGV0X2NhcCB7CisJdWludDMyX3QJY2FwYWJpbGl0aWVzOwkvKiBsb3dl
ciAzMiBiaXRzIG9mIEhQRVQgY2FwYWJpbGl0aWVzICovCit9OworCitzdHJ1Y3Qgdm1fc3VzcGVu
ZCB7CisJZW51bSB2bV9zdXNwZW5kX2hvdyBob3c7Cit9OworCitzdHJ1Y3Qgdm1fZ2xhMmdwYSB7
CisJaW50CQl2Y3B1aWQ7CQkvKiBpbnB1dHMgKi8KKwlpbnQgCQlwcm90OwkJLyogUFJPVF9SRUFE
IG9yIFBST1RfV1JJVEUgKi8KKwl1aW50NjRfdAlnbGE7CisJc3RydWN0IHZtX2d1ZXN0X3BhZ2lu
ZyBwYWdpbmc7CisJaW50CQlmYXVsdDsJCS8qIG91dHB1dHMgKi8KKwl1aW50NjRfdAlncGE7Cit9
OworCitzdHJ1Y3Qgdm1fYWN0aXZhdGVfY3B1IHsKKwlpbnQJCXZjcHVpZDsKK307CisKK3N0cnVj
dCB2bV9jcHVzZXQgeworCWludAkJd2hpY2g7CisJaW50CQljcHVzZXRzaXplOworCWNwdXNldF90
CSpjcHVzOworfTsKKyNkZWZpbmUJVk1fQUNUSVZFX0NQVVMJCTAKKyNkZWZpbmUJVk1fU1VTUEVO
REVEX0NQVVMJMQorCitzdHJ1Y3Qgdm1faW50aW5mbyB7CisJaW50CQl2Y3B1aWQ7CisJdWludDY0
X3QJaW5mbzE7CisJdWludDY0X3QJaW5mbzI7Cit9OworCitzdHJ1Y3Qgdm1fcnRjX3RpbWUgewor
CXRpbWVfdAkJc2VjczsKK307CisKK3N0cnVjdCB2bV9ydGNfZGF0YSB7CisJaW50CQlvZmZzZXQ7
CisJdWludDhfdAkJdmFsdWU7Cit9OworCitlbnVtIHsKKwkvKiBnZW5lcmFsIHJvdXRpbmVzICov
CisJSU9DTlVNX0FCSVZFUlMgPSAwLAorCUlPQ05VTV9SVU4gPSAxLAorCUlPQ05VTV9TRVRfQ0FQ
QUJJTElUWSA9IDIsCisJSU9DTlVNX0dFVF9DQVBBQklMSVRZID0gMywKKwlJT0NOVU1fU1VTUEVO
RCA9IDQsCisJSU9DTlVNX1JFSU5JVCA9IDUsCisKKwkvKiBtZW1vcnkgYXBpcyAqLworCUlPQ05V
TV9NQVBfTUVNT1JZID0gMTAsCQkJLyogZGVwcmVjYXRlZCAqLworCUlPQ05VTV9HRVRfTUVNT1JZ
X1NFRyA9IDExLAkJLyogZGVwcmVjYXRlZCAqLworCUlPQ05VTV9HRVRfR1BBX1BNQVAgPSAxMiwK
KwlJT0NOVU1fR0xBMkdQQSA9IDEzLAorCUlPQ05VTV9BTExPQ19NRU1TRUcgPSAxNCwKKwlJT0NO
VU1fR0VUX01FTVNFRyA9IDE1LAorCUlPQ05VTV9NTUFQX01FTVNFRyA9IDE2LAorCUlPQ05VTV9N
TUFQX0dFVE5FWFQgPSAxNywKKworCS8qIHJlZ2lzdGVyL3N0YXRlIGFjY2Vzc29ycyAqLworCUlP
Q05VTV9TRVRfUkVHSVNURVIgPSAyMCwKKwlJT0NOVU1fR0VUX1JFR0lTVEVSID0gMjEsCisJSU9D
TlVNX1NFVF9TRUdNRU5UX0RFU0NSSVBUT1IgPSAyMiwKKwlJT0NOVU1fR0VUX1NFR01FTlRfREVT
Q1JJUFRPUiA9IDIzLAorCisJLyogaW50ZXJydXB0IGluamVjdGlvbiAqLworCUlPQ05VTV9HRVRf
SU5USU5GTyA9IDI4LAorCUlPQ05VTV9TRVRfSU5USU5GTyA9IDI5LAorCUlPQ05VTV9JTkpFQ1Rf
RVhDRVBUSU9OID0gMzAsCisJSU9DTlVNX0xBUElDX0lSUSA9IDMxLAorCUlPQ05VTV9JTkpFQ1Rf
Tk1JID0gMzIsCisJSU9DTlVNX0lPQVBJQ19BU1NFUlRfSVJRID0gMzMsCisJSU9DTlVNX0lPQVBJ
Q19ERUFTU0VSVF9JUlEgPSAzNCwKKwlJT0NOVU1fSU9BUElDX1BVTFNFX0lSUSA9IDM1LAorCUlP
Q05VTV9MQVBJQ19NU0kgPSAzNiwKKwlJT0NOVU1fTEFQSUNfTE9DQUxfSVJRID0gMzcsCisJSU9D
TlVNX0lPQVBJQ19QSU5DT1VOVCA9IDM4LAorCUlPQ05VTV9SRVNUQVJUX0lOU1RSVUNUSU9OID0g
MzksCisKKwkvKiBQQ0kgcGFzcy10aHJ1ICovCisJSU9DTlVNX0JJTkRfUFBUREVWID0gNDAsCisJ
SU9DTlVNX1VOQklORF9QUFRERVYgPSA0MSwKKwlJT0NOVU1fTUFQX1BQVERFVl9NTUlPID0gNDIs
CisJSU9DTlVNX1BQVERFVl9NU0kgPSA0MywKKwlJT0NOVU1fUFBUREVWX01TSVggPSA0NCwKKwor
CS8qIHN0YXRpc3RpY3MgKi8KKwlJT0NOVU1fVk1fU1RBVFMgPSA1MCwgCisJSU9DTlVNX1ZNX1NU
QVRfREVTQyA9IDUxLAorCisJLyoga2VybmVsIGRldmljZSBzdGF0ZSAqLworCUlPQ05VTV9TRVRf
WDJBUElDX1NUQVRFID0gNjAsCisJSU9DTlVNX0dFVF9YMkFQSUNfU1RBVEUgPSA2MSwKKwlJT0NO
VU1fR0VUX0hQRVRfQ0FQQUJJTElUSUVTID0gNjIsCisKKwkvKiBsZWdhY3kgaW50ZXJydXB0IGlu
amVjdGlvbiAqLworCUlPQ05VTV9JU0FfQVNTRVJUX0lSUSA9IDgwLAorCUlPQ05VTV9JU0FfREVB
U1NFUlRfSVJRID0gODEsCisJSU9DTlVNX0lTQV9QVUxTRV9JUlEgPSA4MiwKKwlJT0NOVU1fSVNB
X1NFVF9JUlFfVFJJR0dFUiA9IDgzLAorCisJLyogdm1fY3B1c2V0ICovCisJSU9DTlVNX0FDVElW
QVRFX0NQVSA9IDkwLAorCUlPQ05VTV9HRVRfQ1BVU0VUID0gOTEsCisKKwkvKiBSVEMgKi8KKwlJ
T0NOVU1fUlRDX1JFQUQgPSAxMDAsCisJSU9DTlVNX1JUQ19XUklURSA9IDEwMSwKKwlJT0NOVU1f
UlRDX1NFVFRJTUUgPSAxMDIsCisJSU9DTlVNX1JUQ19HRVRUSU1FID0gMTAzLAorCisJLyogaG9z
dCBtbWFwIGFuZCBJTyBoYW5kbGVyICovCisJSU9DTlVNX01BUF9VU0VSX0JVRiA9IDEwNCwKKwlJ
T0NOVU1fSU9fUkVHX0hBTkRMRVIgPSAxMDUsCit9OworCisjZGVmaW5lCVZNX1JVTgkJXAorCV9J
T1dSKCd2JywgSU9DTlVNX1JVTiwgc3RydWN0IHZtX3J1bikKKyNkZWZpbmUJVk1fU1VTUEVORAlc
CisJX0lPVygndicsIElPQ05VTV9TVVNQRU5ELCBzdHJ1Y3Qgdm1fc3VzcGVuZCkKKyNkZWZpbmUJ
Vk1fUkVJTklUCVwKKwlfSU8oJ3YnLCBJT0NOVU1fUkVJTklUKQorI2RlZmluZQlWTV9BTExPQ19N
RU1TRUcJXAorCV9JT1coJ3YnLCBJT0NOVU1fQUxMT0NfTUVNU0VHLCBzdHJ1Y3Qgdm1fbWVtc2Vn
KQorI2RlZmluZQlWTV9HRVRfTUVNU0VHCVwKKwlfSU9XUigndicsIElPQ05VTV9HRVRfTUVNU0VH
LCBzdHJ1Y3Qgdm1fbWVtc2VnKQorI2RlZmluZQlWTV9NTUFQX01FTVNFRwlcCisJX0lPVygndics
IElPQ05VTV9NTUFQX01FTVNFRywgc3RydWN0IHZtX21lbW1hcCkKKyNkZWZpbmUJVk1fTU1BUF9H
RVRORVhUCVwKKwlfSU9XUigndicsIElPQ05VTV9NTUFQX0dFVE5FWFQsIHN0cnVjdCB2bV9tZW1t
YXApCisjZGVmaW5lCVZNX1NFVF9SRUdJU1RFUiBcCisJX0lPVygndicsIElPQ05VTV9TRVRfUkVH
SVNURVIsIHN0cnVjdCB2bV9yZWdpc3RlcikKKyNkZWZpbmUJVk1fR0VUX1JFR0lTVEVSIFwKKwlf
SU9XUigndicsIElPQ05VTV9HRVRfUkVHSVNURVIsIHN0cnVjdCB2bV9yZWdpc3RlcikKKyNkZWZp
bmUJVk1fU0VUX1NFR01FTlRfREVTQ1JJUFRPUiBcCisJX0lPVygndicsIElPQ05VTV9TRVRfU0VH
TUVOVF9ERVNDUklQVE9SLCBzdHJ1Y3Qgdm1fc2VnX2Rlc2MpCisjZGVmaW5lCVZNX0dFVF9TRUdN
RU5UX0RFU0NSSVBUT1IgXAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9TRUdNRU5UX0RFU0NSSVBU
T1IsIHN0cnVjdCB2bV9zZWdfZGVzYykKKyNkZWZpbmUJVk1fSU5KRUNUX0VYQ0VQVElPTglcCisJ
X0lPVygndicsIElPQ05VTV9JTkpFQ1RfRVhDRVBUSU9OLCBzdHJ1Y3Qgdm1fZXhjZXB0aW9uKQor
I2RlZmluZQlWTV9MQVBJQ19JUlEgCQlcCisJX0lPVygndicsIElPQ05VTV9MQVBJQ19JUlEsIHN0
cnVjdCB2bV9sYXBpY19pcnEpCisjZGVmaW5lCVZNX0xBUElDX0xPQ0FMX0lSUSAJXAorCV9JT1co
J3YnLCBJT0NOVU1fTEFQSUNfTE9DQUxfSVJRLCBzdHJ1Y3Qgdm1fbGFwaWNfaXJxKQorI2RlZmlu
ZQlWTV9MQVBJQ19NU0kJCVwKKwlfSU9XKCd2JywgSU9DTlVNX0xBUElDX01TSSwgc3RydWN0IHZt
X2xhcGljX21zaSkKKyNkZWZpbmUJVk1fSU9BUElDX0FTU0VSVF9JUlEJXAorCV9JT1coJ3YnLCBJ
T0NOVU1fSU9BUElDX0FTU0VSVF9JUlEsIHN0cnVjdCB2bV9pb2FwaWNfaXJxKQorI2RlZmluZQlW
TV9JT0FQSUNfREVBU1NFUlRfSVJRCVwKKwlfSU9XKCd2JywgSU9DTlVNX0lPQVBJQ19ERUFTU0VS
VF9JUlEsIHN0cnVjdCB2bV9pb2FwaWNfaXJxKQorI2RlZmluZQlWTV9JT0FQSUNfUFVMU0VfSVJR
CVwKKwlfSU9XKCd2JywgSU9DTlVNX0lPQVBJQ19QVUxTRV9JUlEsIHN0cnVjdCB2bV9pb2FwaWNf
aXJxKQorI2RlZmluZQlWTV9JT0FQSUNfUElOQ09VTlQJXAorCV9JT1IoJ3YnLCBJT0NOVU1fSU9B
UElDX1BJTkNPVU5ULCBpbnQpCisjZGVmaW5lCVZNX0lTQV9BU1NFUlRfSVJRCVwKKwlfSU9XKCd2
JywgSU9DTlVNX0lTQV9BU1NFUlRfSVJRLCBzdHJ1Y3Qgdm1faXNhX2lycSkKKyNkZWZpbmUJVk1f
SVNBX0RFQVNTRVJUX0lSUQlcCisJX0lPVygndicsIElPQ05VTV9JU0FfREVBU1NFUlRfSVJRLCBz
dHJ1Y3Qgdm1faXNhX2lycSkKKyNkZWZpbmUJVk1fSVNBX1BVTFNFX0lSUQlcCisJX0lPVygndics
IElPQ05VTV9JU0FfUFVMU0VfSVJRLCBzdHJ1Y3Qgdm1faXNhX2lycSkKKyNkZWZpbmUJVk1fSVNB
X1NFVF9JUlFfVFJJR0dFUglcCisJX0lPVygndicsIElPQ05VTV9JU0FfU0VUX0lSUV9UUklHR0VS
LCBzdHJ1Y3Qgdm1faXNhX2lycV90cmlnZ2VyKQorI2RlZmluZQlWTV9TRVRfQ0FQQUJJTElUWSBc
CisJX0lPVygndicsIElPQ05VTV9TRVRfQ0FQQUJJTElUWSwgc3RydWN0IHZtX2NhcGFiaWxpdHkp
CisjZGVmaW5lCVZNX0dFVF9DQVBBQklMSVRZIFwKKwlfSU9XUigndicsIElPQ05VTV9HRVRfQ0FQ
QUJJTElUWSwgc3RydWN0IHZtX2NhcGFiaWxpdHkpCisjZGVmaW5lCVZNX0JJTkRfUFBUREVWIFwK
KwlfSU9XKCd2JywgSU9DTlVNX0JJTkRfUFBUREVWLCBzdHJ1Y3Qgdm1fcHB0ZGV2KQorI2RlZmlu
ZQlWTV9VTkJJTkRfUFBUREVWIFwKKwlfSU9XKCd2JywgSU9DTlVNX1VOQklORF9QUFRERVYsIHN0
cnVjdCB2bV9wcHRkZXYpCisjZGVmaW5lCVZNX01BUF9QUFRERVZfTU1JTyBcCisJX0lPVygndics
IElPQ05VTV9NQVBfUFBUREVWX01NSU8sIHN0cnVjdCB2bV9wcHRkZXZfbW1pbykKKyNkZWZpbmUJ
Vk1fTUFQX1VTRVJfQlVGIFwKKwlfSU9XKCd2JywgSU9DTlVNX01BUF9VU0VSX0JVRiwgc3RydWN0
IHZtX3VzZXJfYnVmKQorI2RlZmluZQlWTV9JT19SRUdfSEFORExFUiBcCisJX0lPVygndicsIElP
Q05VTV9JT19SRUdfSEFORExFUiwgc3RydWN0IHZtX2lvX3JlZ19oYW5kbGVyKQorI2RlZmluZQlW
TV9QUFRERVZfTVNJIFwKKwlfSU9XKCd2JywgSU9DTlVNX1BQVERFVl9NU0ksIHN0cnVjdCB2bV9w
cHRkZXZfbXNpKQorI2RlZmluZQlWTV9QUFRERVZfTVNJWCBcCisJX0lPVygndicsIElPQ05VTV9Q
UFRERVZfTVNJWCwgc3RydWN0IHZtX3BwdGRldl9tc2l4KQorI2RlZmluZSBWTV9JTkpFQ1RfTk1J
IFwKKwlfSU9XKCd2JywgSU9DTlVNX0lOSkVDVF9OTUksIHN0cnVjdCB2bV9ubWkpCisjZGVmaW5l
CVZNX1NUQVRTIFwKKwlfSU9XUigndicsIElPQ05VTV9WTV9TVEFUUywgc3RydWN0IHZtX3N0YXRz
KQorI2RlZmluZQlWTV9TVEFUX0RFU0MgXAorCV9JT1dSKCd2JywgSU9DTlVNX1ZNX1NUQVRfREVT
Qywgc3RydWN0IHZtX3N0YXRfZGVzYykKKyNkZWZpbmUJVk1fU0VUX1gyQVBJQ19TVEFURSBcCisJ
X0lPVygndicsIElPQ05VTV9TRVRfWDJBUElDX1NUQVRFLCBzdHJ1Y3Qgdm1feDJhcGljKQorI2Rl
ZmluZQlWTV9HRVRfWDJBUElDX1NUQVRFIFwKKwlfSU9XUigndicsIElPQ05VTV9HRVRfWDJBUElD
X1NUQVRFLCBzdHJ1Y3Qgdm1feDJhcGljKQorI2RlZmluZQlWTV9HRVRfSFBFVF9DQVBBQklMSVRJ
RVMgXAorCV9JT1IoJ3YnLCBJT0NOVU1fR0VUX0hQRVRfQ0FQQUJJTElUSUVTLCBzdHJ1Y3Qgdm1f
aHBldF9jYXApCisjZGVmaW5lCVZNX0dFVF9HUEFfUE1BUCBcCisJX0lPV1IoJ3YnLCBJT0NOVU1f
R0VUX0dQQV9QTUFQLCBzdHJ1Y3Qgdm1fZ3BhX3B0ZSkKKyNkZWZpbmUJVk1fR0xBMkdQQQlcCisJ
X0lPV1IoJ3YnLCBJT0NOVU1fR0xBMkdQQSwgc3RydWN0IHZtX2dsYTJncGEpCisjZGVmaW5lCVZN
X0FDVElWQVRFX0NQVQlcCisJX0lPVygndicsIElPQ05VTV9BQ1RJVkFURV9DUFUsIHN0cnVjdCB2
bV9hY3RpdmF0ZV9jcHUpCisjZGVmaW5lCVZNX0dFVF9DUFVTCVwKKwlfSU9XKCd2JywgSU9DTlVN
X0dFVF9DUFVTRVQsIHN0cnVjdCB2bV9jcHVzZXQpCisjZGVmaW5lCVZNX1NFVF9JTlRJTkZPCVwK
KwlfSU9XKCd2JywgSU9DTlVNX1NFVF9JTlRJTkZPLCBzdHJ1Y3Qgdm1faW50aW5mbykKKyNkZWZp
bmUJVk1fR0VUX0lOVElORk8JXAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9JTlRJTkZPLCBzdHJ1
Y3Qgdm1faW50aW5mbykKKyNkZWZpbmUgVk1fUlRDX1dSSVRFIFwKKwlfSU9XKCd2JywgSU9DTlVN
X1JUQ19XUklURSwgc3RydWN0IHZtX3J0Y19kYXRhKQorI2RlZmluZSBWTV9SVENfUkVBRCBcCisJ
X0lPV1IoJ3YnLCBJT0NOVU1fUlRDX1JFQUQsIHN0cnVjdCB2bV9ydGNfZGF0YSkKKyNkZWZpbmUg
Vk1fUlRDX1NFVFRJTUUJXAorCV9JT1coJ3YnLCBJT0NOVU1fUlRDX1NFVFRJTUUsIHN0cnVjdCB2
bV9ydGNfdGltZSkKKyNkZWZpbmUgVk1fUlRDX0dFVFRJTUUJXAorCV9JT1IoJ3YnLCBJT0NOVU1f
UlRDX0dFVFRJTUUsIHN0cnVjdCB2bV9ydGNfdGltZSkKKyNkZWZpbmUJVk1fUkVTVEFSVF9JTlNU
UlVDVElPTiBcCisJX0lPVygndicsIElPQ05VTV9SRVNUQVJUX0lOU1RSVUNUSU9OLCBpbnQpCisj
ZW5kaWYKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Zt
bV9kZXYuaC5vcmlnIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3ZtbV9kZXYu
aC5vcmlnCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3ZtbV9kZXYuaC5v
cmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvbWFjaGluZS92bW1fZGV2Lmgub3JpZwkyMDE2LTExLTMwIDEwOjUyOjU0
LjM3MDQ0MDAwMCArMDAwMApAQCAtMCwwICsxLDM4NSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTEgTmV0QXBwLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkVUQVBQLCBJTkMgYGBBUyBJUycnIEFO
RAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBORVRBUFAsIElOQyBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9z
eXMvYW1kNjQvaW5jbHVkZS92bW1fZGV2LmggMjk4MDk0IDIwMTYtMDQtMTYgMDM6NDQ6NTBaIGdq
YiAkCisgKi8KKworI2lmbmRlZglfVk1NX0RFVl9IXworI2RlZmluZQlfVk1NX0RFVl9IXworCisj
aWZkZWYgX0tFUk5FTAordm9pZAl2bW1kZXZfaW5pdCh2b2lkKTsKK2ludAl2bW1kZXZfY2xlYW51
cCh2b2lkKTsKKyNlbmRpZgorCitzdHJ1Y3Qgdm1fbWVtbWFwIHsKKwl2bV9wYWRkcl90CWdwYTsK
KwlpbnQJCXNlZ2lkOwkJLyogbWVtb3J5IHNlZ21lbnQgKi8KKwl2bV9vb2Zmc2V0X3QJc2Vnb2Zm
OwkJLyogb2Zmc2V0IGludG8gbWVtb3J5IHNlZ21lbnQgKi8KKwlzaXplX3QJCWxlbjsJCS8qIG1t
YXAgbGVuZ3RoICovCisJaW50CQlwcm90OwkJLyogUldYICovCisJaW50CQlmbGFnczsKK307Cisj
ZGVmaW5lCVZNX01FTU1BUF9GX1dJUkVECTB4MDEKKyNkZWZpbmUJVk1fTUVNTUFQX0ZfSU9NTVUJ
MHgwMgorCisjZGVmaW5lCVZNX01FTVNFR19OQU1FKG0pCSgobSktPm5hbWVbMF0gIT0gJ1wwJyA/
IChtKS0+bmFtZSA6IE5VTEwpCitzdHJ1Y3Qgdm1fbWVtc2VnIHsKKwlpbnQJCXNlZ2lkOworCXNp
emVfdAkJbGVuOworCWNoYXIJCW5hbWVbU1BFQ05BTUVMRU4gKyAxXTsKK307CisKK3N0cnVjdCB2
bV9yZWdpc3RlciB7CisJaW50CQljcHVpZDsKKwlpbnQJCXJlZ251bTsJCS8qIGVudW0gdm1fcmVn
X25hbWUgKi8KKwl1aW50NjRfdAlyZWd2YWw7Cit9OworCitzdHJ1Y3Qgdm1fc2VnX2Rlc2MgewkJ
CS8qIGRhdGEgb3IgY29kZSBzZWdtZW50ICovCisJaW50CQljcHVpZDsKKwlpbnQJCXJlZ251bTsJ
CS8qIGVudW0gdm1fcmVnX25hbWUgKi8KKwlzdHJ1Y3Qgc2VnX2Rlc2MgZGVzYzsKK307CisKK3N0
cnVjdCB2bV9ydW4geworCWludAkJY3B1aWQ7CisJc3RydWN0IHZtX2V4aXQJdm1fZXhpdDsKK307
CisKK3N0cnVjdCB2bV9leGNlcHRpb24geworCWludAkJY3B1aWQ7CisJaW50CQl2ZWN0b3I7CisJ
dWludDMyX3QJZXJyb3JfY29kZTsKKwlpbnQJCWVycm9yX2NvZGVfdmFsaWQ7CisJaW50CQlyZXN0
YXJ0X2luc3RydWN0aW9uOworfTsKKworc3RydWN0IHZtX2xhcGljX21zaSB7CisJdWludDY0X3QJ
bXNnOworCXVpbnQ2NF90CWFkZHI7Cit9OworCitzdHJ1Y3Qgdm1fbGFwaWNfaXJxIHsKKwlpbnQJ
CWNwdWlkOworCWludAkJdmVjdG9yOworfTsKKworc3RydWN0IHZtX2lvYXBpY19pcnEgeworCWlu
dAkJaXJxOworfTsKKworc3RydWN0IHZtX2lzYV9pcnEgeworCWludAkJYXRwaWNfaXJxOworCWlu
dAkJaW9hcGljX2lycTsKK307CisKK3N0cnVjdCB2bV9pc2FfaXJxX3RyaWdnZXIgeworCWludAkJ
YXRwaWNfaXJxOworCWVudW0gdm1faW50cl90cmlnZ2VyIHRyaWdnZXI7Cit9OworCitzdHJ1Y3Qg
dm1fY2FwYWJpbGl0eSB7CisJaW50CQljcHVpZDsKKwllbnVtIHZtX2NhcF90eXBlIGNhcHR5cGU7
CisJaW50CQljYXB2YWw7CisJaW50CQlhbGxjcHVzOworfTsKKworc3RydWN0IHZtX3BwdGRldiB7
CisJaW50CQlidXM7CisJaW50CQlzbG90OworCWludAkJZnVuYzsKK307CisKK3N0cnVjdCB2bV9w
cHRkZXZfbW1pbyB7CisJaW50CQlidXM7CisJaW50CQlzbG90OworCWludAkJZnVuYzsKKwl2bV9w
YWRkcl90CWdwYTsKKwl2bV9wYWRkcl90CWhwYTsKKwlzaXplX3QJCWxlbjsKK307CisKK3N0cnVj
dCB2bV9wcHRkZXZfbXNpIHsKKwlpbnQJCXZjcHU7CisJaW50CQlidXM7CisJaW50CQlzbG90Owor
CWludAkJZnVuYzsKKwlpbnQJCW51bXZlYzsJCS8qIDAgbWVhbnMgZGlzYWJsZWQgKi8KKwl1aW50
NjRfdAltc2c7CisJdWludDY0X3QJYWRkcjsKK307CisKK3N0cnVjdCB2bV9wcHRkZXZfbXNpeCB7
CisJaW50CQl2Y3B1OworCWludAkJYnVzOworCWludAkJc2xvdDsKKwlpbnQJCWZ1bmM7CisJaW50
CQlpZHg7CisJdWludDY0X3QJbXNnOworCXVpbnQzMl90CXZlY3Rvcl9jb250cm9sOworCXVpbnQ2
NF90CWFkZHI7Cit9OworCitzdHJ1Y3Qgdm1fbm1pIHsKKwlpbnQJCWNwdWlkOworfTsKKworI2Rl
ZmluZQlNQVhfVk1fU1RBVFMJNjQKK3N0cnVjdCB2bV9zdGF0cyB7CisJaW50CQljcHVpZDsJCQkJ
LyogaW4gKi8KKwlpbnQJCW51bV9lbnRyaWVzOwkJCS8qIG91dCAqLworCXN0cnVjdCB0aW1ldmFs
CXR2OworCXVpbnQ2NF90CXN0YXRidWZbTUFYX1ZNX1NUQVRTXTsKK307CisKK3N0cnVjdCB2bV9z
dGF0X2Rlc2MgeworCWludAkJaW5kZXg7CQkJCS8qIGluICovCisJY2hhcgkJZGVzY1sxMjhdOwkJ
CS8qIG91dCAqLworfTsKKworc3RydWN0IHZtX3gyYXBpYyB7CisJaW50CQkJY3B1aWQ7CisJZW51
bSB4MmFwaWNfc3RhdGUJc3RhdGU7Cit9OworCitzdHJ1Y3Qgdm1fZ3BhX3B0ZSB7CisJdWludDY0
X3QJZ3BhOwkJCQkvKiBpbiAqLworCXVpbnQ2NF90CXB0ZVs0XTsJCQkJLyogb3V0ICovCisJaW50
CQlwdGVudW07Cit9OworCitzdHJ1Y3Qgdm1faHBldF9jYXAgeworCXVpbnQzMl90CWNhcGFiaWxp
dGllczsJLyogbG93ZXIgMzIgYml0cyBvZiBIUEVUIGNhcGFiaWxpdGllcyAqLworfTsKKworc3Ry
dWN0IHZtX3N1c3BlbmQgeworCWVudW0gdm1fc3VzcGVuZF9ob3cgaG93OworfTsKKworc3RydWN0
IHZtX2dsYTJncGEgeworCWludAkJdmNwdWlkOwkJLyogaW5wdXRzICovCisJaW50IAkJcHJvdDsJ
CS8qIFBST1RfUkVBRCBvciBQUk9UX1dSSVRFICovCisJdWludDY0X3QJZ2xhOworCXN0cnVjdCB2
bV9ndWVzdF9wYWdpbmcgcGFnaW5nOworCWludAkJZmF1bHQ7CQkvKiBvdXRwdXRzICovCisJdWlu
dDY0X3QJZ3BhOworfTsKKworc3RydWN0IHZtX2FjdGl2YXRlX2NwdSB7CisJaW50CQl2Y3B1aWQ7
Cit9OworCitzdHJ1Y3Qgdm1fY3B1c2V0IHsKKwlpbnQJCXdoaWNoOworCWludAkJY3B1c2V0c2l6
ZTsKKwljcHVzZXRfdAkqY3B1czsKK307CisjZGVmaW5lCVZNX0FDVElWRV9DUFVTCQkwCisjZGVm
aW5lCVZNX1NVU1BFTkRFRF9DUFVTCTEKKworc3RydWN0IHZtX2ludGluZm8geworCWludAkJdmNw
dWlkOworCXVpbnQ2NF90CWluZm8xOworCXVpbnQ2NF90CWluZm8yOworfTsKKworc3RydWN0IHZt
X3J0Y190aW1lIHsKKwl0aW1lX3QJCXNlY3M7Cit9OworCitzdHJ1Y3Qgdm1fcnRjX2RhdGEgewor
CWludAkJb2Zmc2V0OworCXVpbnQ4X3QJCXZhbHVlOworfTsKKworZW51bSB7CisJLyogZ2VuZXJh
bCByb3V0aW5lcyAqLworCUlPQ05VTV9BQklWRVJTID0gMCwKKwlJT0NOVU1fUlVOID0gMSwKKwlJ
T0NOVU1fU0VUX0NBUEFCSUxJVFkgPSAyLAorCUlPQ05VTV9HRVRfQ0FQQUJJTElUWSA9IDMsCisJ
SU9DTlVNX1NVU1BFTkQgPSA0LAorCUlPQ05VTV9SRUlOSVQgPSA1LAorCisJLyogbWVtb3J5IGFw
aXMgKi8KKwlJT0NOVU1fTUFQX01FTU9SWSA9IDEwLAkJCS8qIGRlcHJlY2F0ZWQgKi8KKwlJT0NO
VU1fR0VUX01FTU9SWV9TRUcgPSAxMSwJCS8qIGRlcHJlY2F0ZWQgKi8KKwlJT0NOVU1fR0VUX0dQ
QV9QTUFQID0gMTIsCisJSU9DTlVNX0dMQTJHUEEgPSAxMywKKwlJT0NOVU1fQUxMT0NfTUVNU0VH
ID0gMTQsCisJSU9DTlVNX0dFVF9NRU1TRUcgPSAxNSwKKwlJT0NOVU1fTU1BUF9NRU1TRUcgPSAx
NiwKKwlJT0NOVU1fTU1BUF9HRVRORVhUID0gMTcsCisKKwkvKiByZWdpc3Rlci9zdGF0ZSBhY2Nl
c3NvcnMgKi8KKwlJT0NOVU1fU0VUX1JFR0lTVEVSID0gMjAsCisJSU9DTlVNX0dFVF9SRUdJU1RF
UiA9IDIxLAorCUlPQ05VTV9TRVRfU0VHTUVOVF9ERVNDUklQVE9SID0gMjIsCisJSU9DTlVNX0dF
VF9TRUdNRU5UX0RFU0NSSVBUT1IgPSAyMywKKworCS8qIGludGVycnVwdCBpbmplY3Rpb24gKi8K
KwlJT0NOVU1fR0VUX0lOVElORk8gPSAyOCwKKwlJT0NOVU1fU0VUX0lOVElORk8gPSAyOSwKKwlJ
T0NOVU1fSU5KRUNUX0VYQ0VQVElPTiA9IDMwLAorCUlPQ05VTV9MQVBJQ19JUlEgPSAzMSwKKwlJ
T0NOVU1fSU5KRUNUX05NSSA9IDMyLAorCUlPQ05VTV9JT0FQSUNfQVNTRVJUX0lSUSA9IDMzLAor
CUlPQ05VTV9JT0FQSUNfREVBU1NFUlRfSVJRID0gMzQsCisJSU9DTlVNX0lPQVBJQ19QVUxTRV9J
UlEgPSAzNSwKKwlJT0NOVU1fTEFQSUNfTVNJID0gMzYsCisJSU9DTlVNX0xBUElDX0xPQ0FMX0lS
USA9IDM3LAorCUlPQ05VTV9JT0FQSUNfUElOQ09VTlQgPSAzOCwKKwlJT0NOVU1fUkVTVEFSVF9J
TlNUUlVDVElPTiA9IDM5LAorCisJLyogUENJIHBhc3MtdGhydSAqLworCUlPQ05VTV9CSU5EX1BQ
VERFViA9IDQwLAorCUlPQ05VTV9VTkJJTkRfUFBUREVWID0gNDEsCisJSU9DTlVNX01BUF9QUFRE
RVZfTU1JTyA9IDQyLAorCUlPQ05VTV9QUFRERVZfTVNJID0gNDMsCisJSU9DTlVNX1BQVERFVl9N
U0lYID0gNDQsCisKKwkvKiBzdGF0aXN0aWNzICovCisJSU9DTlVNX1ZNX1NUQVRTID0gNTAsIAor
CUlPQ05VTV9WTV9TVEFUX0RFU0MgPSA1MSwKKworCS8qIGtlcm5lbCBkZXZpY2Ugc3RhdGUgKi8K
KwlJT0NOVU1fU0VUX1gyQVBJQ19TVEFURSA9IDYwLAorCUlPQ05VTV9HRVRfWDJBUElDX1NUQVRF
ID0gNjEsCisJSU9DTlVNX0dFVF9IUEVUX0NBUEFCSUxJVElFUyA9IDYyLAorCisJLyogbGVnYWN5
IGludGVycnVwdCBpbmplY3Rpb24gKi8KKwlJT0NOVU1fSVNBX0FTU0VSVF9JUlEgPSA4MCwKKwlJ
T0NOVU1fSVNBX0RFQVNTRVJUX0lSUSA9IDgxLAorCUlPQ05VTV9JU0FfUFVMU0VfSVJRID0gODIs
CisJSU9DTlVNX0lTQV9TRVRfSVJRX1RSSUdHRVIgPSA4MywKKworCS8qIHZtX2NwdXNldCAqLwor
CUlPQ05VTV9BQ1RJVkFURV9DUFUgPSA5MCwKKwlJT0NOVU1fR0VUX0NQVVNFVCA9IDkxLAorCisJ
LyogUlRDICovCisJSU9DTlVNX1JUQ19SRUFEID0gMTAwLAorCUlPQ05VTV9SVENfV1JJVEUgPSAx
MDEsCisJSU9DTlVNX1JUQ19TRVRUSU1FID0gMTAyLAorCUlPQ05VTV9SVENfR0VUVElNRSA9IDEw
MywKK307CisKKyNkZWZpbmUJVk1fUlVOCQlcCisJX0lPV1IoJ3YnLCBJT0NOVU1fUlVOLCBzdHJ1
Y3Qgdm1fcnVuKQorI2RlZmluZQlWTV9TVVNQRU5ECVwKKwlfSU9XKCd2JywgSU9DTlVNX1NVU1BF
TkQsIHN0cnVjdCB2bV9zdXNwZW5kKQorI2RlZmluZQlWTV9SRUlOSVQJXAorCV9JTygndicsIElP
Q05VTV9SRUlOSVQpCisjZGVmaW5lCVZNX0FMTE9DX01FTVNFRwlcCisJX0lPVygndicsIElPQ05V
TV9BTExPQ19NRU1TRUcsIHN0cnVjdCB2bV9tZW1zZWcpCisjZGVmaW5lCVZNX0dFVF9NRU1TRUcJ
XAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9NRU1TRUcsIHN0cnVjdCB2bV9tZW1zZWcpCisjZGVm
aW5lCVZNX01NQVBfTUVNU0VHCVwKKwlfSU9XKCd2JywgSU9DTlVNX01NQVBfTUVNU0VHLCBzdHJ1
Y3Qgdm1fbWVtbWFwKQorI2RlZmluZQlWTV9NTUFQX0dFVE5FWFQJXAorCV9JT1dSKCd2JywgSU9D
TlVNX01NQVBfR0VUTkVYVCwgc3RydWN0IHZtX21lbW1hcCkKKyNkZWZpbmUJVk1fU0VUX1JFR0lT
VEVSIFwKKwlfSU9XKCd2JywgSU9DTlVNX1NFVF9SRUdJU1RFUiwgc3RydWN0IHZtX3JlZ2lzdGVy
KQorI2RlZmluZQlWTV9HRVRfUkVHSVNURVIgXAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9SRUdJ
U1RFUiwgc3RydWN0IHZtX3JlZ2lzdGVyKQorI2RlZmluZQlWTV9TRVRfU0VHTUVOVF9ERVNDUklQ
VE9SIFwKKwlfSU9XKCd2JywgSU9DTlVNX1NFVF9TRUdNRU5UX0RFU0NSSVBUT1IsIHN0cnVjdCB2
bV9zZWdfZGVzYykKKyNkZWZpbmUJVk1fR0VUX1NFR01FTlRfREVTQ1JJUFRPUiBcCisJX0lPV1Io
J3YnLCBJT0NOVU1fR0VUX1NFR01FTlRfREVTQ1JJUFRPUiwgc3RydWN0IHZtX3NlZ19kZXNjKQor
I2RlZmluZQlWTV9JTkpFQ1RfRVhDRVBUSU9OCVwKKwlfSU9XKCd2JywgSU9DTlVNX0lOSkVDVF9F
WENFUFRJT04sIHN0cnVjdCB2bV9leGNlcHRpb24pCisjZGVmaW5lCVZNX0xBUElDX0lSUSAJCVwK
KwlfSU9XKCd2JywgSU9DTlVNX0xBUElDX0lSUSwgc3RydWN0IHZtX2xhcGljX2lycSkKKyNkZWZp
bmUJVk1fTEFQSUNfTE9DQUxfSVJRIAlcCisJX0lPVygndicsIElPQ05VTV9MQVBJQ19MT0NBTF9J
UlEsIHN0cnVjdCB2bV9sYXBpY19pcnEpCisjZGVmaW5lCVZNX0xBUElDX01TSQkJXAorCV9JT1co
J3YnLCBJT0NOVU1fTEFQSUNfTVNJLCBzdHJ1Y3Qgdm1fbGFwaWNfbXNpKQorI2RlZmluZQlWTV9J
T0FQSUNfQVNTRVJUX0lSUQlcCisJX0lPVygndicsIElPQ05VTV9JT0FQSUNfQVNTRVJUX0lSUSwg
c3RydWN0IHZtX2lvYXBpY19pcnEpCisjZGVmaW5lCVZNX0lPQVBJQ19ERUFTU0VSVF9JUlEJXAor
CV9JT1coJ3YnLCBJT0NOVU1fSU9BUElDX0RFQVNTRVJUX0lSUSwgc3RydWN0IHZtX2lvYXBpY19p
cnEpCisjZGVmaW5lCVZNX0lPQVBJQ19QVUxTRV9JUlEJXAorCV9JT1coJ3YnLCBJT0NOVU1fSU9B
UElDX1BVTFNFX0lSUSwgc3RydWN0IHZtX2lvYXBpY19pcnEpCisjZGVmaW5lCVZNX0lPQVBJQ19Q
SU5DT1VOVAlcCisJX0lPUigndicsIElPQ05VTV9JT0FQSUNfUElOQ09VTlQsIGludCkKKyNkZWZp
bmUJVk1fSVNBX0FTU0VSVF9JUlEJXAorCV9JT1coJ3YnLCBJT0NOVU1fSVNBX0FTU0VSVF9JUlEs
IHN0cnVjdCB2bV9pc2FfaXJxKQorI2RlZmluZQlWTV9JU0FfREVBU1NFUlRfSVJRCVwKKwlfSU9X
KCd2JywgSU9DTlVNX0lTQV9ERUFTU0VSVF9JUlEsIHN0cnVjdCB2bV9pc2FfaXJxKQorI2RlZmlu
ZQlWTV9JU0FfUFVMU0VfSVJRCVwKKwlfSU9XKCd2JywgSU9DTlVNX0lTQV9QVUxTRV9JUlEsIHN0
cnVjdCB2bV9pc2FfaXJxKQorI2RlZmluZQlWTV9JU0FfU0VUX0lSUV9UUklHR0VSCVwKKwlfSU9X
KCd2JywgSU9DTlVNX0lTQV9TRVRfSVJRX1RSSUdHRVIsIHN0cnVjdCB2bV9pc2FfaXJxX3RyaWdn
ZXIpCisjZGVmaW5lCVZNX1NFVF9DQVBBQklMSVRZIFwKKwlfSU9XKCd2JywgSU9DTlVNX1NFVF9D
QVBBQklMSVRZLCBzdHJ1Y3Qgdm1fY2FwYWJpbGl0eSkKKyNkZWZpbmUJVk1fR0VUX0NBUEFCSUxJ
VFkgXAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9DQVBBQklMSVRZLCBzdHJ1Y3Qgdm1fY2FwYWJp
bGl0eSkKKyNkZWZpbmUJVk1fQklORF9QUFRERVYgXAorCV9JT1coJ3YnLCBJT0NOVU1fQklORF9Q
UFRERVYsIHN0cnVjdCB2bV9wcHRkZXYpCisjZGVmaW5lCVZNX1VOQklORF9QUFRERVYgXAorCV9J
T1coJ3YnLCBJT0NOVU1fVU5CSU5EX1BQVERFViwgc3RydWN0IHZtX3BwdGRldikKKyNkZWZpbmUJ
Vk1fTUFQX1BQVERFVl9NTUlPIFwKKwlfSU9XKCd2JywgSU9DTlVNX01BUF9QUFRERVZfTU1JTywg
c3RydWN0IHZtX3BwdGRldl9tbWlvKQorI2RlZmluZQlWTV9QUFRERVZfTVNJIFwKKwlfSU9XKCd2
JywgSU9DTlVNX1BQVERFVl9NU0ksIHN0cnVjdCB2bV9wcHRkZXZfbXNpKQorI2RlZmluZQlWTV9Q
UFRERVZfTVNJWCBcCisJX0lPVygndicsIElPQ05VTV9QUFRERVZfTVNJWCwgc3RydWN0IHZtX3Bw
dGRldl9tc2l4KQorI2RlZmluZSBWTV9JTkpFQ1RfTk1JIFwKKwlfSU9XKCd2JywgSU9DTlVNX0lO
SkVDVF9OTUksIHN0cnVjdCB2bV9ubWkpCisjZGVmaW5lCVZNX1NUQVRTIFwKKwlfSU9XUigndics
IElPQ05VTV9WTV9TVEFUUywgc3RydWN0IHZtX3N0YXRzKQorI2RlZmluZQlWTV9TVEFUX0RFU0Mg
XAorCV9JT1dSKCd2JywgSU9DTlVNX1ZNX1NUQVRfREVTQywgc3RydWN0IHZtX3N0YXRfZGVzYykK
KyNkZWZpbmUJVk1fU0VUX1gyQVBJQ19TVEFURSBcCisJX0lPVygndicsIElPQ05VTV9TRVRfWDJB
UElDX1NUQVRFLCBzdHJ1Y3Qgdm1feDJhcGljKQorI2RlZmluZQlWTV9HRVRfWDJBUElDX1NUQVRF
IFwKKwlfSU9XUigndicsIElPQ05VTV9HRVRfWDJBUElDX1NUQVRFLCBzdHJ1Y3Qgdm1feDJhcGlj
KQorI2RlZmluZQlWTV9HRVRfSFBFVF9DQVBBQklMSVRJRVMgXAorCV9JT1IoJ3YnLCBJT0NOVU1f
R0VUX0hQRVRfQ0FQQUJJTElUSUVTLCBzdHJ1Y3Qgdm1faHBldF9jYXApCisjZGVmaW5lCVZNX0dF
VF9HUEFfUE1BUCBcCisJX0lPV1IoJ3YnLCBJT0NOVU1fR0VUX0dQQV9QTUFQLCBzdHJ1Y3Qgdm1f
Z3BhX3B0ZSkKKyNkZWZpbmUJVk1fR0xBMkdQQQlcCisJX0lPV1IoJ3YnLCBJT0NOVU1fR0xBMkdQ
QSwgc3RydWN0IHZtX2dsYTJncGEpCisjZGVmaW5lCVZNX0FDVElWQVRFX0NQVQlcCisJX0lPVygn
dicsIElPQ05VTV9BQ1RJVkFURV9DUFUsIHN0cnVjdCB2bV9hY3RpdmF0ZV9jcHUpCisjZGVmaW5l
CVZNX0dFVF9DUFVTCVwKKwlfSU9XKCd2JywgSU9DTlVNX0dFVF9DUFVTRVQsIHN0cnVjdCB2bV9j
cHVzZXQpCisjZGVmaW5lCVZNX1NFVF9JTlRJTkZPCVwKKwlfSU9XKCd2JywgSU9DTlVNX1NFVF9J
TlRJTkZPLCBzdHJ1Y3Qgdm1faW50aW5mbykKKyNkZWZpbmUJVk1fR0VUX0lOVElORk8JXAorCV9J
T1dSKCd2JywgSU9DTlVNX0dFVF9JTlRJTkZPLCBzdHJ1Y3Qgdm1faW50aW5mbykKKyNkZWZpbmUg
Vk1fUlRDX1dSSVRFIFwKKwlfSU9XKCd2JywgSU9DTlVNX1JUQ19XUklURSwgc3RydWN0IHZtX3J0
Y19kYXRhKQorI2RlZmluZSBWTV9SVENfUkVBRCBcCisJX0lPV1IoJ3YnLCBJT0NOVU1fUlRDX1JF
QUQsIHN0cnVjdCB2bV9ydGNfZGF0YSkKKyNkZWZpbmUgVk1fUlRDX1NFVFRJTUUJXAorCV9JT1co
J3YnLCBJT0NOVU1fUlRDX1NFVFRJTUUsIHN0cnVjdCB2bV9ydGNfdGltZSkKKyNkZWZpbmUgVk1f
UlRDX0dFVFRJTUUJXAorCV9JT1IoJ3YnLCBJT0NOVU1fUlRDX0dFVFRJTUUsIHN0cnVjdCB2bV9y
dGNfdGltZSkKKyNkZWZpbmUJVk1fUkVTVEFSVF9JTlNUUlVDVElPTiBcCisJX0lPVygndicsIElP
Q05VTV9SRVNUQVJUX0lOU1RSVUNUSU9OLCBpbnQpCisjZW5kaWYKZGlmZiAtdSAtciAtTiB1c3Iv
c3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3ZtbV9pbnN0cnVjdGlvbl9lbXVsLmggL3Vz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdm1tX2luc3RydWN0aW9uX2VtdWwuaAot
LS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS92bW1faW5zdHJ1Y3Rpb25fZW11
bC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvbWFjaGluZS92bW1faW5zdHJ1Y3Rpb25fZW11bC5oCTIwMTYtMDktMjkg
MDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTE2IEBACisvKi0KKyAqIENvcHly
aWdodCAoYykgMjAxMiBOZXRBcHAsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBORVRBUFAsIElOQyBgYEFT
IElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIE5FVEFQUCwgSU5DIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICog
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQor
ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVu
Zy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL3ZtbV9pbnN0cnVjdGlvbl9lbXVsLmggMjk4MDk0IDIw
MTYtMDQtMTYgMDM6NDQ6NTBaIGdqYiAkCisgKi8KKworI2lmbmRlZglfVk1NX0lOU1RSVUNUSU9O
X0VNVUxfSF8KKyNkZWZpbmUJX1ZNTV9JTlNUUlVDVElPTl9FTVVMX0hfCisKKyNpbmNsdWRlIDxz
eXMvbW1hbi5oPgorCisvKgorICogQ2FsbGJhY2sgZnVuY3Rpb25zIHRvIHJlYWQgYW5kIHdyaXRl
IG1lbW9yeSByZWdpb25zLgorICovCit0eXBlZGVmIGludCAoKm1lbV9yZWdpb25fcmVhZF90KSh2
b2lkICp2bSwgaW50IGNwdWlkLCB1aW50NjRfdCBncGEsCisJCQkJIHVpbnQ2NF90ICpydmFsLCBp
bnQgcnNpemUsIHZvaWQgKmFyZyk7CisKK3R5cGVkZWYgaW50ICgqbWVtX3JlZ2lvbl93cml0ZV90
KSh2b2lkICp2bSwgaW50IGNwdWlkLCB1aW50NjRfdCBncGEsCisJCQkJICB1aW50NjRfdCB3dmFs
LCBpbnQgd3NpemUsIHZvaWQgKmFyZyk7CisKKy8qCisgKiBFbXVsYXRlIHRoZSBkZWNvZGVkICd2
aWUnIGluc3RydWN0aW9uLgorICoKKyAqIFRoZSBjYWxsYmFja3MgJ21ycicgYW5kICdtcncnIGVt
dWxhdGUgcmVhZHMgYW5kIHdyaXRlcyB0byB0aGUgbWVtb3J5IHJlZ2lvbgorICogY29udGFpbmlu
ZyAnZ3BhJy4gJ21yYXJnJyBpcyBhbiBvcGFxdWUgYXJndW1lbnQgdGhhdCBpcyBwYXNzZWQgaW50
byB0aGUKKyAqIGNhbGxiYWNrIGZ1bmN0aW9ucy4KKyAqCisgKiAndm9pZCAqdm0nIHNob3VsZCBi
ZSAnc3RydWN0IHZtIConIHdoZW4gY2FsbGVkIGZyb20ga2VybmVsIGNvbnRleHQgYW5kCisgKiAn
c3RydWN0IHZtY3R4IConIHdoZW4gY2FsbGVkIGZyb20gdXNlciBjb250ZXh0LgorICogcworICov
CitpbnQgdm1tX2VtdWxhdGVfaW5zdHJ1Y3Rpb24odm9pZCAqdm0sIGludCBjcHVpZCwgdWludDY0
X3QgZ3BhLCBzdHJ1Y3QgdmllICp2aWUsCisgICAgc3RydWN0IHZtX2d1ZXN0X3BhZ2luZyAqcGFn
aW5nLCBtZW1fcmVnaW9uX3JlYWRfdCBtcnIsCisgICAgbWVtX3JlZ2lvbl93cml0ZV90IG1ydywg
dm9pZCAqbXJhcmcpOworCitpbnQgdmllX3VwZGF0ZV9yZWdpc3Rlcih2b2lkICp2bSwgaW50IHZj
cHVpZCwgZW51bSB2bV9yZWdfbmFtZSByZWcsCisgICAgdWludDY0X3QgdmFsLCBpbnQgc2l6ZSk7
CisKKy8qCisgKiBSZXR1cm5zIDEgaWYgYW4gYWxpZ25tZW50IGNoZWNrIGV4Y2VwdGlvbiBzaG91
bGQgYmUgaW5qZWN0ZWQgYW5kIDAgb3RoZXJ3aXNlLgorICovCitpbnQgdmllX2FsaWdubWVudF9j
aGVjayhpbnQgY3BsLCBpbnQgb3BlcmFuZF9zaXplLCB1aW50NjRfdCBjcjAsCisgICAgdWludDY0
X3QgcmZsYWdzLCB1aW50NjRfdCBnbGEpOworCisvKiBSZXR1cm5zIDEgaWYgdGhlICdnbGEnIGlz
IG5vdCBjYW5vbmljYWwgYW5kIDAgb3RoZXJ3aXNlLiAqLworaW50IHZpZV9jYW5vbmljYWxfY2hl
Y2soZW51bSB2bV9jcHVfbW9kZSBjcHVfbW9kZSwgdWludDY0X3QgZ2xhKTsKKwordWludDY0X3Qg
dmllX3NpemUybWFzayhpbnQgc2l6ZSk7CisKK2ludCB2aWVfY2FsY3VsYXRlX2dsYShlbnVtIHZt
X2NwdV9tb2RlIGNwdV9tb2RlLCBlbnVtIHZtX3JlZ19uYW1lIHNlZywKKyAgICBzdHJ1Y3Qgc2Vn
X2Rlc2MgKmRlc2MsIHVpbnQ2NF90IG9mZiwgaW50IGxlbmd0aCwgaW50IGFkZHJzaXplLCBpbnQg
cHJvdCwKKyAgICB1aW50NjRfdCAqZ2xhKTsKKworI2lmZGVmIF9LRVJORUwKKy8qCisgKiBBUElz
IHRvIGZldGNoIGFuZCBkZWNvZGUgdGhlIGluc3RydWN0aW9uIGZyb20gbmVzdGVkIHBhZ2UgZmF1
bHQgaGFuZGxlci4KKyAqCisgKiAndmllJyBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBjYWxs
aW5nICd2bW1fZmV0Y2hfaW5zdHJ1Y3Rpb24oKScKKyAqLworaW50IHZtbV9mZXRjaF9pbnN0cnVj
dGlvbihzdHJ1Y3Qgdm0gKnZtLCBpbnQgY3B1aWQsCisJCQkgIHN0cnVjdCB2bV9ndWVzdF9wYWdp
bmcgKmd1ZXN0X3BhZ2luZywKKwkJCSAgdWludDY0X3QgcmlwLCBpbnQgaW5zdF9sZW5ndGgsIHN0
cnVjdCB2aWUgKnZpZSwKKwkJCSAgaW50ICppc19mYXVsdCk7CisKKy8qCisgKiBUcmFuc2xhdGUg
dGhlIGd1ZXN0IGxpbmVhciBhZGRyZXNzICdnbGEnIHRvIGEgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVz
cy4KKyAqCisgKiByZXR2YWwJaXNfZmF1bHQJSW50ZXJwcmV0YXRpb24KKyAqICAgMAkJICAgMAkJ
J2dwYScgY29udGFpbnMgcmVzdWx0IG9mIHRoZSB0cmFuc2xhdGlvbgorICogICAwCQkgICAxCQlB
biBleGNlcHRpb24gd2FzIGluamVjdGVkIGludG8gdGhlIGd1ZXN0CisgKiBFRkFVTFQJICBOL0EJ
CUFuIHVucmVjb3ZlcmFibGUgaHlwZXJ2aXNvciBlcnJvciBvY2N1cnJlZAorICovCitpbnQgdm1f
Z2xhMmdwYShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qgdm1fZ3Vlc3RfcGFnaW5n
ICpwYWdpbmcsCisgICAgdWludDY0X3QgZ2xhLCBpbnQgcHJvdCwgdWludDY0X3QgKmdwYSwgaW50
ICppc19mYXVsdCk7CisKK3ZvaWQgdmllX2luaXQoc3RydWN0IHZpZSAqdmllLCBjb25zdCBjaGFy
ICppbnN0X2J5dGVzLCBpbnQgaW5zdF9sZW5ndGgpOworCisvKgorICogRGVjb2RlIHRoZSBpbnN0
cnVjdGlvbiBmZXRjaGVkIGludG8gJ3ZpZScgc28gaXQgY2FuIGJlIGVtdWxhdGVkLgorICoKKyAq
ICdnbGEnIGlzIHRoZSBndWVzdCBsaW5lYXIgYWRkcmVzcyBwcm92aWRlZCBieSB0aGUgaGFyZHdh
cmUgYXNzaXN0CisgKiB0aGF0IGNhdXNlZCB0aGUgbmVzdGVkIHBhZ2UgdGFibGUgZmF1bHQuIEl0
IGlzIHVzZWQgdG8gdmVyaWZ5IHRoYXQKKyAqIHRoZSBzb2Z0d2FyZSBpbnN0cnVjdGlvbiBkZWNv
ZGluZyBpcyBpbiBhZ3JlZW1lbnQgd2l0aCB0aGUgaGFyZHdhcmUuCisgKiAKKyAqIFNvbWUgaGFy
ZHdhcmUgYXNzaXN0cyBkbyBub3QgcHJvdmlkZSB0aGUgJ2dsYScgdG8gdGhlIGh5cGVydmlzb3Iu
CisgKiBUbyBza2lwIHRoZSAnZ2xhJyB2ZXJpZmljYXRpb24gZm9yIHRoaXMgb3IgYW55IG90aGVy
IHJlYXNvbiBwYXNzCisgKiBpbiBWSUVfSU5WQUxJRF9HTEEgaW5zdGVhZC4KKyAqLworI2RlZmlu
ZQlWSUVfSU5WQUxJRF9HTEEJCSgxVUwgPDwgNjMpCS8qIGEgbm9uLWNhbm9uaWNhbCBhZGRyZXNz
ICovCitpbnQgdm1tX2RlY29kZV9pbnN0cnVjdGlvbihzdHJ1Y3Qgdm0gKnZtLCBpbnQgY3B1aWQs
IHVpbnQ2NF90IGdsYSwKKwkJCSAgIGVudW0gdm1fY3B1X21vZGUgY3B1X21vZGUsIGludCBjc2Qs
IHN0cnVjdCB2aWUgKnZpZSk7CisjZW5kaWYJLyogX0tFUk5FTCAqLworCisjZW5kaWYJLyogX1ZN
TV9JTlNUUlVDVElPTl9FTVVMX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxl
cy9uZXRtYXAvbWFjaGluZS92bXBhcmFtLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUvdm1wYXJhbS5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Zt
cGFyYW0uaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdm1wYXJhbS5oCTIwMTYtMDktMjkgMDA6MjQ6NTQu
MDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMjI3IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykg
MTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5NCBKb2huIFMuIER5c29uCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAzIFBldGVyIFdlbW0K
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJv
bSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogV2lsbGlhbSBKb2xpdHou
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh
dHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9s
bG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy
ZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5
IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5p
dmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0
d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9t
OiBAKCMpdm1wYXJhbS5oCTUuOSAoQmVya2VsZXkpIDUvMTIvOTEKKyAqICRGcmVlQlNEOiByZWxl
bmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS92bXBhcmFtLmggMjg0MTQ3IDIwMTUtMDYtMDggMDQ6
NTk6MzJaIGFsYyAkCisgKi8KKworCisjaWZuZGVmIF9NQUNISU5FX1ZNUEFSQU1fSF8KKyNkZWZp
bmUJX01BQ0hJTkVfVk1QQVJBTV9IXyAxCisKKy8qCisgKiBNYWNoaW5lIGRlcGVuZGVudCBjb25z
dGFudHMgZm9yIEFNRDY0LgorICovCisKKy8qCisgKiBWaXJ0dWFsIG1lbW9yeSByZWxhdGVkIGNv
bnN0YW50cywgYWxsIGluIGJ5dGVzCisgKi8KKyNkZWZpbmUJTUFYVFNJWgkJKDEyOFVMKjEwMjQq
MTAyNCkJLyogbWF4IHRleHQgc2l6ZSAqLworI2lmbmRlZiBERkxEU0laCisjZGVmaW5lCURGTERT
SVoJCSgzMjc2OFVMKjEwMjQqMTAyNCkJLyogaW5pdGlhbCBkYXRhIHNpemUgbGltaXQgKi8KKyNl
bmRpZgorI2lmbmRlZiBNQVhEU0laCisjZGVmaW5lCU1BWERTSVoJCSgzMjc2OFVMKjEwMjQqMTAy
NCkJLyogbWF4IGRhdGEgc2l6ZSAqLworI2VuZGlmCisjaWZuZGVmCURGTFNTSVoKKyNkZWZpbmUJ
REZMU1NJWgkJKDhVTCoxMDI0KjEwMjQpCQkvKiBpbml0aWFsIHN0YWNrIHNpemUgbGltaXQgKi8K
KyNlbmRpZgorI2lmbmRlZglNQVhTU0laCisjZGVmaW5lCU1BWFNTSVoJCSg1MTJVTCoxMDI0KjEw
MjQpCS8qIG1heCBzdGFjayBzaXplICovCisjZW5kaWYKKyNpZm5kZWYgU0dST1dTSVoKKyNkZWZp
bmUJU0dST1dTSVoJKDEyOFVMKjEwMjQpCQkvKiBhbW91bnQgdG8gZ3JvdyBzdGFjayAqLworI2Vu
ZGlmCisKKy8qCisgKiBXZSBwcm92aWRlIGEgbWFjaGluZSBzcGVjaWZpYyBzaW5nbGUgcGFnZSBh
bGxvY2F0b3IgdGhyb3VnaCB0aGUgdXNlCisgKiBvZiB0aGUgZGlyZWN0IG1hcHBlZCBzZWdtZW50
LiAgVGhpcyB1c2VzIDJNQiBwYWdlcyBmb3IgcmVkdWNlZAorICogVExCIHByZXNzdXJlLgorICov
CisjZGVmaW5lCVVNQV9NRF9TTUFMTF9BTExPQworCisvKgorICogVGhlIHBoeXNpY2FsIGFkZHJl
c3Mgc3BhY2UgaXMgZGVuc2VseSBwb3B1bGF0ZWQuCisgKi8KKyNkZWZpbmUJVk1fUEhZU1NFR19E
RU5TRQorCisvKgorICogVGhlIG51bWJlciBvZiBQSFlTU0VHIGVudHJpZXMgbXVzdCBiZSBvbmUg
Z3JlYXRlciB0aGFuIHRoZSBudW1iZXIKKyAqIG9mIHBoeXNfYXZhaWwgZW50cmllcyBiZWNhdXNl
IHRoZSBwaHlzX2F2YWlsIGVudHJ5IHRoYXQgc3BhbnMgdGhlCisgKiBsYXJnZXN0IHBoeXNpY2Fs
IGFkZHJlc3MgdGhhdCBpcyBhY2Nlc3NpYmxlIGJ5IElTQSBETUEgaXMgc3BsaXQKKyAqIGludG8g
dHdvIFBIWVNTRUcgZW50cmllcy4gCisgKi8KKyNkZWZpbmUJVk1fUEhZU1NFR19NQVgJCTYzCisK
Ky8qCisgKiBDcmVhdGUgdHdvIGZyZWUgcGFnZSBwb29sczogVk1fRlJFRVBPT0xfREVGQVVMVCBp
cyB0aGUgZGVmYXVsdCBwb29sCisgKiBmcm9tIHdoaWNoIHBoeXNpY2FsIHBhZ2VzIGFyZSBhbGxv
Y2F0ZWQgYW5kIFZNX0ZSRUVQT09MX0RJUkVDVCBpcworICogdGhlIHBvb2wgZnJvbSB3aGljaCBw
aHlzaWNhbCBwYWdlcyBmb3IgcGFnZSB0YWJsZXMgYW5kIHNtYWxsIFVNQQorICogb2JqZWN0cyBh
cmUgYWxsb2NhdGVkLgorICovCisjZGVmaW5lCVZNX05GUkVFUE9PTAkJMgorI2RlZmluZQlWTV9G
UkVFUE9PTF9ERUZBVUxUCTAKKyNkZWZpbmUJVk1fRlJFRVBPT0xfRElSRUNUCTEKKworLyoKKyAq
IENyZWF0ZSB1cCB0byB0aHJlZSBmcmVlIHBhZ2UgbGlzdHM6IFZNX0ZSRUVMSVNUX0RNQTMyIGlz
IGZvciBwaHlzaWNhbCBwYWdlcworICogdGhhdCBoYXZlIHBoeXNpY2FsIGFkZHJlc3NlcyBiZWxv
dyA0RyBidXQgYXJlIG5vdCBhY2Nlc3NpYmxlIGJ5IElTQSBETUEsCisgKiBhbmQgVk1fRlJFRUxJ
U1RfSVNBRE1BIGlzIGZvciBwaHlzaWNhbCBwYWdlcyB0aGF0IGFyZSBhY2Nlc3NpYmxlIGJ5IElT
QQorICogRE1BLgorICovCisjZGVmaW5lCVZNX05GUkVFTElTVAkJMworI2RlZmluZQlWTV9GUkVF
TElTVF9ERUZBVUxUCTAKKyNkZWZpbmUJVk1fRlJFRUxJU1RfRE1BMzIJMQorI2RlZmluZQlWTV9G
UkVFTElTVF9JU0FETUEJMgorCisvKgorICogQ3JlYXRlIHRoZSBETUEzMiBmcmVlIGxpc3Qgb25s
eSBpZiB0aGUgbnVtYmVyIG9mIHBoeXNpY2FsIHBhZ2VzIGFib3ZlCisgKiBwaHlzaWNhbCBhZGRy
ZXNzIDRHIGlzIGF0IGxlYXN0IDE2TSwgd2hpY2ggYW1vdW50cyB0byA2NEdCIG9mIHBoeXNpY2Fs
CisgKiBtZW1vcnkuCisgKi8KKyNkZWZpbmUJVk1fRE1BMzJfTlBBR0VTX1RIUkVTSE9MRAkxNjc3
NzIxNgorCisvKgorICogQW4gYWxsb2NhdGlvbiBzaXplIG9mIDE2TUIgaXMgc3VwcG9ydGVkIGlu
IG9yZGVyIHRvIG9wdGltaXplIHRoZQorICogdXNlIG9mIHRoZSBkaXJlY3QgbWFwIGJ5IFVNQS4g
IFNwZWNpZmljYWxseSwgYSBjYWNoZSBsaW5lIGNvbnRhaW5zCisgKiBhdCBtb3N0IDggUERFcywg
Y29sbGVjdGl2ZWx5IG1hcHBpbmcgMTZNQiBvZiBwaHlzaWNhbCBtZW1vcnkuICBCeQorICogcmVk
dWNpbmcgdGhlIG51bWJlciBvZiBkaXN0aW5jdCAxNk1CICJwYWdlcyIgdGhhdCBhcmUgdXNlZCBi
eSBVTUEsCisgKiB0aGUgcGh5c2ljYWwgbWVtb3J5IGFsbG9jYXRvciByZWR1Y2VzIHRoZSBsaWtl
bGlob29kIG9mIGJvdGggMk1CCisgKiBwYWdlIFRMQiBtaXNzZXMgYW5kIGNhY2hlIG1pc3NlcyBj
YXVzZWQgYnkgMk1CIHBhZ2UgVExCIG1pc3Nlcy4KKyAqLworI2RlZmluZQlWTV9ORlJFRU9SREVS
CQkxMworCisvKgorICogRW5hYmxlIHN1cGVycGFnZSByZXNlcnZhdGlvbnM6IDEgbGV2ZWwuCisg
Ki8KKyNpZm5kZWYJVk1fTlJFU0VSVkxFVkVMCisjZGVmaW5lCVZNX05SRVNFUlZMRVZFTAkJMQor
I2VuZGlmCisKKy8qCisgKiBMZXZlbCAwIHJlc2VydmF0aW9ucyBjb25zaXN0IG9mIDUxMiBwYWdl
cy4KKyAqLworI2lmbmRlZglWTV9MRVZFTF8wX09SREVSCisjZGVmaW5lCVZNX0xFVkVMXzBfT1JE
RVIJOQorI2VuZGlmCisKKyNpZmRlZglTTVAKKyNkZWZpbmUJUEFfTE9DS19DT1VOVAkyNTYKKyNl
bmRpZgorCisvKgorICogVmlydHVhbCBhZGRyZXNzZXMgb2YgdGhpbmdzLiAgRGVyaXZlZCBmcm9t
IHRoZSBwYWdlIGRpcmVjdG9yeSBhbmQKKyAqIHBhZ2UgdGFibGUgaW5kZXhlcyBmcm9tIHBtYXAu
aCBmb3IgcHJlY2lzaW9uLgorICoKKyAqIDB4MDAwMDAwMDAwMDAwMDAwMCAtIDB4MDAwMDdmZmZm
ZmZmZmZmZiAgIHVzZXIgbWFwCisgKiAweDAwMDA4MDAwMDAwMDAwMDAgLSAweGZmZmY3ZmZmZmZm
ZmZmZmYgICBkb2VzIG5vdCBleGlzdCAoaG9sZSkKKyAqIDB4ZmZmZjgwMDAwMDAwMDAwMCAtIDB4
ZmZmZjgwNDAyMDEwMGZmZiAgIHJlY3Vyc2l2ZSBwYWdlIHRhYmxlICg1MTJHQiBzbG90KQorICog
MHhmZmZmODA0MDIwMTAxMDAwIC0gMHhmZmZmZjdmZmZmZmZmZmZmICAgdW51c2VkCisgKiAweGZm
ZmZmODAwMDAwMDAwMDAgLSAweGZmZmZmYmZmZmZmZmZmZmYgICA0VEIgZGlyZWN0IG1hcAorICog
MHhmZmZmZmMwMDAwMDAwMDAwIC0gMHhmZmZmZmRmZmZmZmZmZmZmICAgdW51c2VkCisgKiAweGZm
ZmZmZTAwMDAwMDAwMDAgLSAweGZmZmZmZmZmZmZmZmZmZmYgICAyVEIga2VybmVsIG1hcAorICoK
KyAqIFdpdGhpbiB0aGUga2VybmVsIG1hcDoKKyAqCisgKiAweGZmZmZmZmZmODAwMDAwMDAgICAg
ICAgICAgICAgICAgICAgICAgICBLRVJOQkFTRQorICovCisKKyNkZWZpbmUJVk1fTUlOX0tFUk5F
TF9BRERSRVNTCUtWQUREUihLUE1MNEJBU0UsIDAsIDAsIDApCisjZGVmaW5lCVZNX01BWF9LRVJO
RUxfQUREUkVTUwlLVkFERFIoS1BNTDRCQVNFICsgTktQTUw0RSAtIDEsIFwKKwkJCQkJTlBEUEVQ
Ry0xLCBOUERFUEctMSwgTlBURVBHLTEpCisKKyNkZWZpbmUJRE1BUF9NSU5fQUREUkVTUwlLVkFE
RFIoRE1QTUw0SSwgMCwgMCwgMCkKKyNkZWZpbmUJRE1BUF9NQVhfQUREUkVTUwlLVkFERFIoRE1Q
TUw0SSArIE5ETVBNTDRFLCAwLCAwLCAwKQorCisjZGVmaW5lCUtFUk5CQVNFCQlLVkFERFIoS1BN
TDRJLCBLUERQSSwgMCwgMCkKKworI2RlZmluZQlVUFRfTUFYX0FERFJFU1MJCUtWQUREUihQTUw0
UE1MNEksIFBNTDRQTUw0SSwgUE1MNFBNTDRJLCBQTUw0UE1MNEkpCisjZGVmaW5lCVVQVF9NSU5f
QUREUkVTUwkJS1ZBRERSKFBNTDRQTUw0SSwgMCwgMCwgMCkKKworI2RlZmluZQlWTV9NQVhVU0VS
X0FERFJFU1MJVVZBRERSKE5VUE1MNEUsIDAsIDAsIDApCisKKyNkZWZpbmUJU0hBUkVEUEFHRQkJ
KFZNX01BWFVTRVJfQUREUkVTUyAtIFBBR0VfU0laRSkKKyNkZWZpbmUJVVNSU1RBQ0sJCVNIQVJF
RFBBR0UKKworI2RlZmluZQlWTV9NQVhfQUREUkVTUwkJVVBUX01BWF9BRERSRVNTCisjZGVmaW5l
CVZNX01JTl9BRERSRVNTCQkoMCkKKworLyoKKyAqIFhYWCBBbGxvd2luZyBkbWFwbGltaXQgPT0g
MCBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciB2dCg0KSBlZmlmYidzCisgKiBlYXJseSB1
c2Ugb2YgUEhZU19UT19ETUFQIGJlZm9yZSB0aGUgbWFwcGluZyBpcyBhY3R1YWxseSBzZXR1cC4g
VGhpcyB3b3JrcworICogYmVjYXVzZSB0aGUgcmVzdWx0IGlzIG5vdCBhY3R1YWxseSBhY2Nlc3Nl
ZCB1bnRpbCBsYXRlciwgYnV0IHRoZSBlYXJseQorICogdnQgZmIgc3RhcnR1cCBuZWVkcyB0byBi
ZSByZXdvcmtlZC4KKyAqLworI2RlZmluZQlQSFlTX1RPX0RNQVAoeCkJKHsJCQkJCQlcCisJS0FT
U0VSVChkbWFwbGltaXQgPT0gMCB8fCAoeCkgPCBkbWFwbGltaXQsCQkJXAorCSAgICAoInBoeXNp
Y2FsIGFkZHJlc3MgJSNqeCBub3QgY292ZXJlZCBieSB0aGUgRE1BUCIsCQlcCisJICAgICh1aW50
bWF4X3QpeCkpOwkJCQkJCVwKKwkoeCkgfCBETUFQX01JTl9BRERSRVNTOyB9KQorCisjZGVmaW5l
CURNQVBfVE9fUEhZUyh4KQkoewkJCQkJCVwKKwlLQVNTRVJUKCh4KSA8IChETUFQX01JTl9BRERS
RVNTICsgZG1hcGxpbWl0KSAmJgkJCVwKKwkgICAgKHgpID49IERNQVBfTUlOX0FERFJFU1MsCQkJ
CQlcCisJICAgICgidmlydHVhbCBhZGRyZXNzICUjanggbm90IGNvdmVyZWQgYnkgdGhlIERNQVAi
LAkJXAorCSAgICAodWludG1heF90KXgpKTsJCQkJCQlcCisJKHgpICYgfkRNQVBfTUlOX0FERFJF
U1M7IH0pCisKKy8qCisgKiBIb3cgbWFueSBwaHlzaWNhbCBwYWdlcyBwZXIga21lbSBhcmVuYSB2
aXJ0dWFsIHBhZ2UuCisgKi8KKyNpZm5kZWYgVk1fS01FTV9TSVpFX1NDQUxFCisjZGVmaW5lCVZN
X0tNRU1fU0laRV9TQ0FMRQkoMSkKKyNlbmRpZgorCisvKgorICogT3B0aW9uYWwgY2VpbGluZyAo
aW4gYnl0ZXMpIG9uIHRoZSBzaXplIG9mIHRoZSBrbWVtIGFyZW5hOiA2MCUgb2YgdGhlCisgKiBr
ZXJuZWwgbWFwLgorICovCisjaWZuZGVmIFZNX0tNRU1fU0laRV9NQVgKKyNkZWZpbmUJVk1fS01F
TV9TSVpFX01BWAkoKFZNX01BWF9LRVJORUxfQUREUkVTUyAtIFwKKyAgICBWTV9NSU5fS0VSTkVM
X0FERFJFU1MgKyAxKSAqIDMgLyA1KQorI2VuZGlmCisKKy8qIGluaXRpYWwgcGFnZWluIHNpemUg
b2YgYmVnaW5uaW5nIG9mIGV4ZWN1dGFibGUgZmlsZSAqLworI2lmbmRlZiBWTV9JTklUSUFMX1BB
R0VJTgorI2RlZmluZQlWTV9JTklUSUFMX1BBR0VJTgkxNgorI2VuZGlmCisKKyNkZWZpbmUJWkVS
T19SRUdJT05fU0laRQkoMiAqIDEwMjQgKiAxMDI0KQkvKiAyTUIgKi8KKworI2VuZGlmIC8qIF9N
QUNISU5FX1ZNUEFSQU1fSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25l
dG1hcC9tYWNoaW5lL3hlbi9oeXBlcmNhbGwuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
bWFjaGluZS94ZW4vaHlwZXJjYWxsLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUveGVuL2h5cGVyY2FsbC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw
CisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS94ZW4vaHlwZXJjYWxsLmgJ
MjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw0MzIgQEAKKy8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioKKyAqIGh5cGVyY2FsbC5oCisgKiAKKyAqIEZyZWVCU0Qtc3Bl
Y2lmaWMgaHlwZXJ2aXNvciBoYW5kbGluZy4KKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLTIw
MDQsIEsgQSBGcmFzZXIKKyAqIAorICogNjQtYml0IHVwZGF0ZXM6CisgKiAgIEJlbmphbWluIExp
dSA8YmVuamFtaW4ubGl1QGludGVsLmNvbT4KKyAqICAgSnVuIE5ha2FqaW1hIDxqdW4ubmFrYWpp
bWFAaW50ZWwuY29tPgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBvciwgd2hlbiBkaXN0cmlidXRl
ZAorICogc2VwYXJhdGVseSBmcm9tIHRoZSBMaW51eCBrZXJuZWwgb3IgaW5jb3Jwb3JhdGVkIGlu
dG8gb3RoZXIKKyAqIHNvZnR3YXJlIHBhY2thZ2VzLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg
bGljZW5zZToKKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj
aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb3VyY2Ug
ZmlsZSAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0Cisg
KiByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRv
IHVzZSwgY29weSwgbW9kaWZ5LAorICogbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp
Y2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCisgKiBhbmQgdG8gcGVy
bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBz
dWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92
ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGlu
Y2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBT
b2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP
VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO
RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor
ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF
IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO
RworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig
VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqICRG
cmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS94ZW4vaHlwZXJjYWxsLmggMjg5
MDMzIDIwMTUtMTAtMDggMTY6Mzk6NDNaIHJveWdlciAkCisgKi8KKworI2lmbmRlZiBfX01BQ0hJ
TkVfWEVOX0hZUEVSQ0FMTF9IX18KKyNkZWZpbmUgX19NQUNISU5FX1hFTl9IWVBFUkNBTExfSF9f
CisKKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKworI2lmbmRlZiBfX1hFTl9IWVBFUlZJU09SX0hf
XworIyBlcnJvciAicGxlYXNlIGRvbid0IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5IgorI2Vu
ZGlmCisKK2V4dGVybiBjaGFyICpoeXBlcmNhbGxfcGFnZTsKKworI2RlZmluZSBfX1NUUih4KSAj
eAorI2RlZmluZSBTVFIoeCkgX19TVFIoeCkKKyNkZWZpbmUJRU5PWEVOU1lTCTM4CisjZGVmaW5l
IENPTkZJR19YRU5fQ09NUEFUCTB4MDMwMDAyCisjZGVmaW5lIF9fbXVzdF9jaGVjaworCisjZGVm
aW5lIEhZUEVSQ0FMTF9TVFIobmFtZSkJCQkJCVwKKwkiY2FsbCBoeXBlcmNhbGxfcGFnZSArICgi
U1RSKF9fSFlQRVJWSVNPUl8jI25hbWUpIiAqIDMyKSIKKworI2RlZmluZSBfaHlwZXJjYWxsMCh0
eXBlLCBuYW1lKQkJCVwKKyh7CQkJCQkJXAorCXR5cGUgX19yZXM7CQkJCVwKKwlfX2FzbV9fIHZv
bGF0aWxlICgJCQkJXAorCQlIWVBFUkNBTExfU1RSKG5hbWUpCQlcCisJCTogIj1hIiAoX19yZXMp
CQkJXAorCQk6CQkJCVwKKwkJOiAibWVtb3J5IiApOwkJCVwKKwlfX3JlczsJCQkJCVwKK30pCisK
KyNkZWZpbmUgX2h5cGVyY2FsbDEodHlwZSwgbmFtZSwgYTEpCQkJCVwKKyh7CQkJCQkJCQlcCisJ
dHlwZSBfX3JlczsJCQkJCQlcCisJbG9uZyBfX2lnbjE7CQkJCQkJXAorCV9fYXNtX18gdm9sYXRp
bGUgKAkJCQkJCVwKKwkJSFlQRVJDQUxMX1NUUihuYW1lKQkJCQlcCisJCTogIj1hIiAoX19yZXMp
LCAiPUQiIChfX2lnbjEpCQkJXAorCQk6ICIxIiAoKGxvbmcpKGExKSkJCQkJXAorCQk6ICJtZW1v
cnkiICk7CQkJCQlcCisJX19yZXM7CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX2h5cGVyY2FsbDIo
dHlwZSwgbmFtZSwgYTEsIGEyKQkJCQlcCisoewkJCQkJCQkJXAorCXR5cGUgX19yZXM7CQkJCQkJ
XAorCWxvbmcgX19pZ24xLCBfX2lnbjI7CQkJCQlcCisJX19hc21fXyB2b2xhdGlsZSAoCQkJCQkJ
XAorCQlIWVBFUkNBTExfU1RSKG5hbWUpCQkJCVwKKwkJOiAiPWEiIChfX3JlcyksICI9RCIgKF9f
aWduMSksICI9UyIgKF9faWduMikJXAorCQk6ICIxIiAoKGxvbmcpKGExKSksICIyIiAoKGxvbmcp
KGEyKSkJCVwKKwkJOiAibWVtb3J5IiApOwkJCQkJXAorCV9fcmVzOwkJCQkJCQlcCit9KQorCisj
ZGVmaW5lIF9oeXBlcmNhbGwzKHR5cGUsIG5hbWUsIGExLCBhMiwgYTMpCQkJXAorKHsJCQkJCQkJ
CVwKKwl0eXBlIF9fcmVzOwkJCQkJCVwKKwlsb25nIF9faWduMSwgX19pZ24yLCBfX2lnbjM7CQkJ
CVwKKwlfX2FzbV9fIHZvbGF0aWxlICgJCQkJCQlcCisJCUhZUEVSQ0FMTF9TVFIobmFtZSkJCQkJ
XAorCQk6ICI9YSIgKF9fcmVzKSwgIj1EIiAoX19pZ24xKSwgIj1TIiAoX19pZ24yKSwgCVwKKwkJ
Ij1kIiAoX19pZ24zKQkJCQkJXAorCQk6ICIxIiAoKGxvbmcpKGExKSksICIyIiAoKGxvbmcpKGEy
KSksCQlcCisJCSIzIiAoKGxvbmcpKGEzKSkJCQkJXAorCQk6ICJtZW1vcnkiICk7CQkJCQlcCisJ
X19yZXM7CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX2h5cGVyY2FsbDQodHlwZSwgbmFtZSwgYTEs
IGEyLCBhMywgYTQpCQkJXAorKHsJCQkJCQkJCVwKKwl0eXBlIF9fcmVzOwkJCQkJCVwKKwlsb25n
IF9faWduMSwgX19pZ24yLCBfX2lnbjM7CQkJCVwKKwlyZWdpc3RlciBsb25nIF9fYXJnNCBfX2Fz
bV9fKCJyMTAiKSA9IChsb25nKShhNCk7CQlcCisJX19hc21fXyB2b2xhdGlsZSAoCQkJCQkJXAor
CQlIWVBFUkNBTExfU1RSKG5hbWUpCQkJCVwKKwkJOiAiPWEiIChfX3JlcyksICI9RCIgKF9faWdu
MSksICI9UyIgKF9faWduMiksCVwKKwkJICAiPWQiIChfX2lnbjMpLCAiK3IiIChfX2FyZzQpCQkJ
XAorCQk6ICIxIiAoKGxvbmcpKGExKSksICIyIiAoKGxvbmcpKGEyKSksCQlcCisJCSAgIjMiICgo
bG9uZykoYTMpKQkJCQlcCisJCTogIm1lbW9yeSIgKTsJCQkJCVwKKwlfX3JlczsJCQkJCQkJXAor
fSkKKworI2RlZmluZSBfaHlwZXJjYWxsNSh0eXBlLCBuYW1lLCBhMSwgYTIsIGEzLCBhNCwgYTUp
CQlcCisoewkJCQkJCQkJXAorCXR5cGUgX19yZXM7CQkJCQkJXAorCWxvbmcgX19pZ24xLCBfX2ln
bjIsIF9faWduMzsJCQkJXAorCXJlZ2lzdGVyIGxvbmcgX19hcmc0IF9fYXNtX18oInIxMCIpID0g
KGxvbmcpKGE0KTsJCVwKKwlyZWdpc3RlciBsb25nIF9fYXJnNSBfX2FzbV9fKCJyOCIpID0gKGxv
bmcpKGE1KTsJCVwKKwlfX2FzbV9fIHZvbGF0aWxlICgJCQkJCQlcCisJCUhZUEVSQ0FMTF9TVFIo
bmFtZSkJCQkJXAorCQk6ICI9YSIgKF9fcmVzKSwgIj1EIiAoX19pZ24xKSwgIj1TIiAoX19pZ24y
KSwJXAorCQkgICI9ZCIgKF9faWduMyksICIrciIgKF9fYXJnNCksICIrciIgKF9fYXJnNSkJXAor
CQk6ICIxIiAoKGxvbmcpKGExKSksICIyIiAoKGxvbmcpKGEyKSksCQlcCisJCSAgIjMiICgobG9u
ZykoYTMpKQkJCQlcCisJCTogIm1lbW9yeSIgKTsJCQkJCVwKKwlfX3JlczsJCQkJCQkJXAorfSkK
Kworc3RhdGljIGlubGluZSBpbnQKK3ByaXZjbWRfaHlwZXJjYWxsKGxvbmcgb3AsIGxvbmcgYTEs
IGxvbmcgYTIsIGxvbmcgYTMsIGxvbmcgYTQsIGxvbmcgYTUpCit7CisJaW50IF9fcmVzOworCWxv
bmcgX19pZ24xLCBfX2lnbjIsIF9faWduMzsKKwlyZWdpc3RlciBsb25nIF9fYXJnNCBfX2FzbV9f
KCJyMTAiKSA9IChsb25nKShhNCk7CisJcmVnaXN0ZXIgbG9uZyBfX2FyZzUgX19hc21fXygicjgi
KSA9IChsb25nKShhNSk7CisJbG9uZyBfX2NhbGwgPSAobG9uZykmaHlwZXJjYWxsX3BhZ2UgKyAo
b3AgKiAzMik7CisKKwlfX2FzbV9fIHZvbGF0aWxlICgKKwkJImNhbGwgKiVbY2FsbF0iCisJCTog
Ij1hIiAoX19yZXMpLCAiPUQiIChfX2lnbjEpLCAiPVMiIChfX2lnbjIpLAorCQkgICI9ZCIgKF9f
aWduMyksICIrciIgKF9fYXJnNCksICIrciIgKF9fYXJnNSkKKwkJOiAiMSIgKChsb25nKShhMSkp
LCAiMiIgKChsb25nKShhMikpLAorCQkgICIzIiAoKGxvbmcpKGEzKSksIFtjYWxsXSAiYSIgKF9f
Y2FsbCkKKwkJOiAibWVtb3J5IiApOworCisJcmV0dXJuIChfX3Jlcyk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgaW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNPUl9zZXRfdHJhcF90YWJsZSgKKwljb25z
dCB0cmFwX2luZm9fdCAqdGFibGUpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwxKGludCwgc2V0X3Ry
YXBfdGFibGUsIHRhYmxlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCitI
WVBFUlZJU09SX21tdV91cGRhdGUoCisJbW11X3VwZGF0ZV90ICpyZXEsIHVuc2lnbmVkIGludCBj
b3VudCwgdW5zaWduZWQgaW50ICpzdWNjZXNzX2NvdW50LAorCWRvbWlkX3QgZG9taWQpCit7CisJ
cmV0dXJuIF9oeXBlcmNhbGw0KGludCwgbW11X3VwZGF0ZSwgcmVxLCBjb3VudCwgc3VjY2Vzc19j
b3VudCwgZG9taWQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sKK0hZUEVS
VklTT1JfbW11ZXh0X29wKAorCXN0cnVjdCBtbXVleHRfb3AgKm9wLCB1bnNpZ25lZCBpbnQgY291
bnQsIHVuc2lnbmVkIGludCAqc3VjY2Vzc19jb3VudCwKKwlkb21pZF90IGRvbWlkKQoreworCXJl
dHVybiBfaHlwZXJjYWxsNChpbnQsIG1tdWV4dF9vcCwgb3AsIGNvdW50LCBzdWNjZXNzX2NvdW50
LCBkb21pZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNP
Ul9zZXRfZ2R0KAorCXVuc2lnbmVkIGxvbmcgKmZyYW1lX2xpc3QsIHVuc2lnbmVkIGludCBlbnRy
aWVzKQoreworCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIHNldF9nZHQsIGZyYW1lX2xpc3QsIGVu
dHJpZXMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sKK0hZUEVSVklTT1Jf
c3RhY2tfc3dpdGNoKAorCXVuc2lnbmVkIGxvbmcgc3MsIHVuc2lnbmVkIGxvbmcgZXNwKQorewor
CXJldHVybiBfaHlwZXJjYWxsMihpbnQsIHN0YWNrX3N3aXRjaCwgc3MsIGVzcCk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNPUl9zZXRfY2FsbGJhY2tzKAor
CXVuc2lnbmVkIGxvbmcgZXZlbnRfYWRkcmVzcywgdW5zaWduZWQgbG9uZyBmYWlsc2FmZV9hZGRy
ZXNzLCAKKwl1bnNpZ25lZCBsb25nIHN5c2NhbGxfYWRkcmVzcykKK3sKKwlyZXR1cm4gX2h5cGVy
Y2FsbDMoaW50LCBzZXRfY2FsbGJhY2tzLAorCQkJICAgZXZlbnRfYWRkcmVzcywgZmFpbHNhZmVf
YWRkcmVzcywgc3lzY2FsbF9hZGRyZXNzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK0hZUEVS
VklTT1JfZnB1X3Rhc2tzd2l0Y2goCisJaW50IHNldCkKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDEo
aW50LCBmcHVfdGFza3N3aXRjaCwgc2V0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0
X2NoZWNrCitIWVBFUlZJU09SX3NjaGVkX29wX2NvbXBhdCgKKwlpbnQgY21kLCB1bnNpZ25lZCBs
b25nIGFyZykKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDIoaW50LCBzY2hlZF9vcF9jb21wYXQsIGNt
ZCwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCitIWVBFUlZJU09S
X3NjaGVkX29wKAorCWludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDIo
aW50LCBzY2hlZF9vcCwgY21kLCBhcmcpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgX19tdXN0
X2NoZWNrCitIWVBFUlZJU09SX3NldF90aW1lcl9vcCgKKwl1aW50NjRfdCB0aW1lb3V0KQorewor
CXJldHVybiBfaHlwZXJjYWxsMShsb25nLCBzZXRfdGltZXJfb3AsIHRpbWVvdXQpOworfQorCitz
dGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sKK0hZUEVSVklTT1JfcGxhdGZvcm1fb3AoCisJ
c3RydWN0IHhlbl9wbGF0Zm9ybV9vcCAqcGxhdGZvcm1fb3ApCit7CisJcGxhdGZvcm1fb3AtPmlu
dGVyZmFjZV92ZXJzaW9uID0gWEVOUEZfSU5URVJGQUNFX1ZFUlNJT047CisJcmV0dXJuIF9oeXBl
cmNhbGwxKGludCwgcGxhdGZvcm1fb3AsIHBsYXRmb3JtX29wKTsKK30KKworc3RhdGljIGlubGlu
ZSBpbnQgX19tdXN0X2NoZWNrCitIWVBFUlZJU09SX3NldF9kZWJ1Z3JlZygKKwl1bnNpZ25lZCBp
bnQgcmVnLCB1bnNpZ25lZCBsb25nIHZhbHVlKQoreworCXJldHVybiBfaHlwZXJjYWxsMihpbnQs
IHNldF9kZWJ1Z3JlZywgcmVnLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQg
bG9uZyBfX211c3RfY2hlY2sKK0hZUEVSVklTT1JfZ2V0X2RlYnVncmVnKAorCXVuc2lnbmVkIGlu
dCByZWcpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwxKHVuc2lnbmVkIGxvbmcsIGdldF9kZWJ1Z3Jl
ZywgcmVnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCitIWVBFUlZJU09S
X3VwZGF0ZV9kZXNjcmlwdG9yKAorCXVuc2lnbmVkIGxvbmcgbWEsIHVuc2lnbmVkIGxvbmcgd29y
ZCkKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDIoaW50LCB1cGRhdGVfZGVzY3JpcHRvciwgbWEsIHdv
cmQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sKK0hZUEVSVklTT1JfbWVt
b3J5X29wKAorCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gX2h5cGVy
Y2FsbDIoaW50LCBtZW1vcnlfb3AsIGNtZCwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQg
X19tdXN0X2NoZWNrCitIWVBFUlZJU09SX211bHRpY2FsbCgKKwltdWx0aWNhbGxfZW50cnlfdCAq
Y2FsbF9saXN0LCB1bnNpZ25lZCBpbnQgbnJfY2FsbHMpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwy
KGludCwgbXVsdGljYWxsLCBjYWxsX2xpc3QsIG5yX2NhbGxzKTsKK30KKworc3RhdGljIGlubGlu
ZSBpbnQgX19tdXN0X2NoZWNrCitIWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nKAorCXVuc2ln
bmVkIGxvbmcgdmEsIHVpbnQ2NF90IG5ld192YWwsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJ
cmV0dXJuIF9oeXBlcmNhbGwzKGludCwgdXBkYXRlX3ZhX21hcHBpbmcsIHZhLCBuZXdfdmFsLCBm
bGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNPUl9l
dmVudF9jaGFubmVsX29wKAorCWludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlpbnQgcmMgPSBfaHlw
ZXJjYWxsMihpbnQsIGV2ZW50X2NoYW5uZWxfb3AsIGNtZCwgYXJnKTsKKworI2lmIENPTkZJR19Y
RU5fQ09NUEFUIDw9IDB4MDMwMDAyCisJaWYgKF9fcHJlZGljdF9mYWxzZShyYyA9PSAtRU5PWEVO
U1lTKSkgeworCQlzdHJ1Y3QgZXZ0Y2huX29wIG9wOworCQlvcC5jbWQgPSBjbWQ7CisJCW1lbWNw
eSgmb3AudSwgYXJnLCBzaXplb2Yob3AudSkpOworCQlyYyA9IF9oeXBlcmNhbGwxKGludCwgZXZl
bnRfY2hhbm5lbF9vcF9jb21wYXQsICZvcCk7CisJCW1lbWNweShhcmcsICZvcC51LCBzaXplb2Yo
b3AudSkpOworCX0KKyNlbmRpZgorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW5saW5lIGlu
dCBfX211c3RfY2hlY2sKK0hZUEVSVklTT1JfeGVuX3ZlcnNpb24oCisJaW50IGNtZCwgdm9pZCAq
YXJnKQoreworCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIHhlbl92ZXJzaW9uLCBjbWQsIGFyZyk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNPUl9jb25zb2xl
X2lvKAorCWludCBjbWQsIHVuc2lnbmVkIGludCBjb3VudCwgY29uc3QgY2hhciAqc3RyKQorewor
CXJldHVybiBfaHlwZXJjYWxsMyhpbnQsIGNvbnNvbGVfaW8sIGNtZCwgY291bnQsIHN0cik7Cit9
CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNPUl9waHlzZGV2X29w
KAorCWludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlpbnQgcmMgPSBfaHlwZXJjYWxsMihpbnQsIHBo
eXNkZXZfb3AsIGNtZCwgYXJnKTsKKworI2lmIENPTkZJR19YRU5fQ09NUEFUIDw9IDB4MDMwMDAy
CisJaWYgKF9fcHJlZGljdF9mYWxzZShyYyA9PSAtRU5PWEVOU1lTKSkgeworCQlzdHJ1Y3QgcGh5
c2Rldl9vcCBvcDsKKwkJb3AuY21kID0gY21kOworCQltZW1jcHkoJm9wLnUsIGFyZywgc2l6ZW9m
KG9wLnUpKTsKKwkJcmMgPSBfaHlwZXJjYWxsMShpbnQsIHBoeXNkZXZfb3BfY29tcGF0LCAmb3Ap
OworCQltZW1jcHkoYXJnLCAmb3AudSwgc2l6ZW9mKG9wLnUpKTsKKwl9CisjZW5kaWYKKworCXJl
dHVybiByYzsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCitIWVBFUlZJU09S
X2dyYW50X3RhYmxlX29wKAorCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKnVvcCwgdW5zaWduZWQg
aW50IGNvdW50KQoreworCXJldHVybiBfaHlwZXJjYWxsMyhpbnQsIGdyYW50X3RhYmxlX29wLCBj
bWQsIHVvcCwgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sKK0hZ
UEVSVklTT1JfdXBkYXRlX3ZhX21hcHBpbmdfb3RoZXJkb21haW4oCisJdW5zaWduZWQgbG9uZyB2
YSwgdWludDY0X3QgbmV3X3ZhbCwgdW5zaWduZWQgbG9uZyBmbGFncywgZG9taWRfdCBkb21pZCkK
K3sKKwlyZXR1cm4gX2h5cGVyY2FsbDQoaW50LCB1cGRhdGVfdmFfbWFwcGluZ19vdGhlcmRvbWFp
biwgdmEsCisJCQkgICBuZXdfdmFsLCBmbGFncywgZG9taWQpOworfQorCitzdGF0aWMgaW5saW5l
IGludCBfX211c3RfY2hlY2sKK0hZUEVSVklTT1Jfdm1fYXNzaXN0KAorCXVuc2lnbmVkIGludCBj
bWQsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIHZtX2Fz
c2lzdCwgY21kLCB0eXBlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCitI
WVBFUlZJU09SX3ZjcHVfb3AoCisJaW50IGNtZCwgdW5zaWduZWQgaW50IHZjcHVpZCwgdm9pZCAq
ZXh0cmFfYXJncykKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDMoaW50LCB2Y3B1X29wLCBjbWQsIHZj
cHVpZCwgZXh0cmFfYXJncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjawor
SFlQRVJWSVNPUl9zZXRfc2VnbWVudF9iYXNlKAorCWludCByZWcsIHVuc2lnbmVkIGxvbmcgdmFs
dWUpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgc2V0X3NlZ21lbnRfYmFzZSwgcmVnLCB2
YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNPUl9z
dXNwZW5kKAorCXVuc2lnbmVkIGxvbmcgc3JlYykKK3sKKwlzdHJ1Y3Qgc2NoZWRfc2h1dGRvd24g
c2NoZWRfc2h1dGRvd24gPSB7CisJCS5yZWFzb24gPSBTSFVURE9XTl9zdXNwZW5kCisJfTsKKwor
CWludCByYyA9IF9oeXBlcmNhbGwzKGludCwgc2NoZWRfb3AsIFNDSEVET1Bfc2h1dGRvd24sCisJ
CQkgICAgICZzY2hlZF9zaHV0ZG93biwgc3JlYyk7CisKKyNpZiBDT05GSUdfWEVOX0NPTVBBVCA8
PSAweDAzMDAwMgorCWlmIChyYyA9PSAtRU5PWEVOU1lTKQorCQlyYyA9IF9oeXBlcmNhbGwzKGlu
dCwgc2NoZWRfb3BfY29tcGF0LCBTQ0hFRE9QX3NodXRkb3duLAorCQkJCSBTSFVURE9XTl9zdXNw
ZW5kLCBzcmVjKTsKKyNlbmRpZgorCisJcmV0dXJuIHJjOworfQorCisjaWYgQ09ORklHX1hFTl9D
T01QQVQgPD0gMHgwMzAwMDIKK3N0YXRpYyBpbmxpbmUgaW50CitIWVBFUlZJU09SX25taV9vcCgK
Kwl1bnNpZ25lZCBsb25nIG9wLCB2b2lkICphcmcpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwyKGlu
dCwgbm1pX29wLCBvcCwgYXJnKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19YRU4KK3N0
YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sKK0hZUEVSVklTT1JfaHZtX29w
KAorICAgIGludCBvcCwgdm9pZCAqYXJnKQoreworICAgIHJldHVybiBfaHlwZXJjYWxsMih1bnNp
Z25lZCBsb25nLCBodm1fb3AsIG9wLCBhcmcpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUg
aW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNPUl9jYWxsYmFja19vcCgKKwlpbnQgY21kLCBjb25z
dCB2b2lkICphcmcpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgY2FsbGJhY2tfb3AsIGNt
ZCwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCitIWVBFUlZJU09S
X3hlbm9wcm9mX29wKAorCWludCBvcCwgdm9pZCAqYXJnKQoreworCXJldHVybiBfaHlwZXJjYWxs
MihpbnQsIHhlbm9wcm9mX29wLCBvcCwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19t
dXN0X2NoZWNrCitIWVBFUlZJU09SX2tleGVjX29wKAorCXVuc2lnbmVkIGxvbmcgb3AsIHZvaWQg
KmFyZ3MpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwyKGludCwga2V4ZWNfb3AsIG9wLCBhcmdzKTsK
K30KKworI3VuZGVmIF9fbXVzdF9jaGVjaworCisjZW5kaWYgLyogX19NQUNISU5FX1hFTl9IWVBF
UkNBTExfSF9fICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj
aGluZS94ZW4vc3luY2hfYml0b3BzLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hp
bmUveGVuL3N5bmNoX2JpdG9wcy5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNo
aW5lL3hlbi9zeW5jaF9iaXRvcHMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEw
MAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUveGVuL3N5bmNoX2JpdG9w
cy5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTI5IEBA
CisjaWZuZGVmIF9fWEVOX1NZTkNIX0JJVE9QU19IX18KKyNkZWZpbmUgX19YRU5fU1lOQ0hfQklU
T1BTX0hfXworCisvKgorICogQ29weXJpZ2h0IDE5OTIsIExpbnVzIFRvcnZhbGRzLgorICogSGVh
dmlseSBtb2RpZmllZCB0byBwcm92aWRlIGd1YXJhbnRlZWQgc3Ryb25nIHN5bmNocm9uaXNhdGlv
bgorICogd2hlbiBjb21tdW5pY2F0aW5nIHdpdGggWGVuIG9yIG90aGVyIGd1ZXN0IE9TZXMgcnVu
bmluZyBvbiBvdGhlciBDUFVzLgorICovCisKKworI2RlZmluZSBBRERSICgqKHZvbGF0aWxlIGxv
bmcgKikgYWRkcikKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBzeW5jaF9zZXRfYml0KGludCBu
ciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAK
KyAgICAgICAgImxvY2sgYnRzbCAlMSwlMCIKKyAgICAgICAgOiAiPW0iIChBRERSKSA6ICJJciIg
KG5yKSA6ICJtZW1vcnkiICk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc3luY2hfY2xl
YXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisgICAgX19hc21fXyBfX3Zv
bGF0aWxlX18gKAorICAgICAgICAibG9jayBidHJsICUxLCUwIgorICAgICAgICA6ICI9bSIgKEFE
RFIpIDogIklyIiAobnIpIDogIm1lbW9yeSIgKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9p
ZCBzeW5jaF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisgICAg
X19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICAibG9jayBidGNsICUxLCUwIgorICAgICAg
ICA6ICI9bSIgKEFERFIpIDogIklyIiAobnIpIDogIm1lbW9yeSIgKTsKK30KKworc3RhdGljIF9f
aW5saW5lX18gaW50IHN5bmNoX3Rlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lk
ICogYWRkcikKK3sKKyAgICBpbnQgb2xkYml0OworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgK
KyAgICAgICAgImxvY2sgYnRzbCAlMiwlMVxuXHRzYmJsICUwLCUwIgorICAgICAgICA6ICI9ciIg
KG9sZGJpdCksICI9bSIgKEFERFIpIDogIklyIiAobnIpIDogIm1lbW9yeSIpOworICAgIHJldHVy
biBvbGRiaXQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBzeW5jaF90ZXN0X2FuZF9jbGVh
cl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKyAgICBpbnQgb2xkYml0Owor
ICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgImxvY2sgYnRybCAlMiwlMVxuXHRz
YmJsICUwLCUwIgorICAgICAgICA6ICI9ciIgKG9sZGJpdCksICI9bSIgKEFERFIpIDogIklyIiAo
bnIpIDogIm1lbW9yeSIpOworICAgIHJldHVybiBvbGRiaXQ7Cit9CisKK3N0YXRpYyBfX2lubGlu
ZV9fIGludCBzeW5jaF90ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAq
IGFkZHIpCit7CisgICAgaW50IG9sZGJpdDsKKworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgK
KyAgICAgICAgImxvY2sgYnRjbCAlMiwlMVxuXHRzYmJsICUwLCUwIgorICAgICAgICA6ICI9ciIg
KG9sZGJpdCksICI9bSIgKEFERFIpIDogIklyIiAobnIpIDogIm1lbW9yeSIpOworICAgIHJldHVy
biBvbGRiaXQ7Cit9CisKK3N0cnVjdCBfX3N5bmNoX3hjaGdfZHVtbXkgeyB1bnNpZ25lZCBsb25n
IGFbMTAwXTsgfTsKKyNkZWZpbmUgX19zeW5jaF94Zyh4KSAoKHZvbGF0aWxlIHN0cnVjdCBfX3N5
bmNoX3hjaGdfZHVtbXkgKikoeCkpCisKKyNkZWZpbmUgc3luY2hfY21weGNoZyhwdHIsIG9sZCwg
bmV3KSBcCisoKF9fdHlwZW9mX18oKihwdHIpKSlfX3N5bmNoX2NtcHhjaGcoKHB0ciksXAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKShvbGQpLCBc
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKG5l
dyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoKihwdHIp
KSkpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3N5bmNoX2NtcHhjaGcodm9sYXRp
bGUgdm9pZCAqcHRyLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBvbGQsCisJCQkJCSAgICB1bnNp
Z25lZCBsb25nIG5ldywgaW50IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBwcmV2OworCXN3aXRj
aCAoc2l6ZSkgeworCWNhc2UgMToKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxvY2s7IGNtcHhj
aGdiICViMSwlMiIKKwkJCQkgICAgIDogIj1hIihwcmV2KQorCQkJCSAgICAgOiAicSIobmV3KSwg
Im0iKCpfX3N5bmNoX3hnKHB0cikpLAorCQkJCSAgICAgICAiMCIob2xkKQorCQkJCSAgICAgOiAi
bWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCWNhc2UgMjoKKwkJX19hc21fXyBfX3ZvbGF0aWxl
X18oImxvY2s7IGNtcHhjaGd3ICV3MSwlMiIKKwkJCQkgICAgIDogIj1hIihwcmV2KQorCQkJCSAg
ICAgOiAicSIobmV3KSwgIm0iKCpfX3N5bmNoX3hnKHB0cikpLAorCQkJCSAgICAgICAiMCIob2xk
KQorCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCWNhc2UgNDoKKwkJX19h
c21fXyBfX3ZvbGF0aWxlX18oImxvY2s7IGNtcHhjaGdsICVrMSwlMiIKKwkJCQkgICAgIDogIj1h
IihwcmV2KQorCQkJCSAgICAgOiAicSIobmV3KSwgIm0iKCpfX3N5bmNoX3hnKHB0cikpLAorCQkJ
CSAgICAgICAiMCIob2xkKQorCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2Owor
CWNhc2UgODoKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxvY2s7IGNtcHhjaGdxICUxLCUyIgor
CQkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkJICAgICA6ICJxIihuZXcpLCAibSIoKl9fc3luY2hf
eGcocHRyKSksCisJCQkJICAgICAgICIwIihvbGQpCisJCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJ
cmV0dXJuIHByZXY7CisJfQorCXJldHVybiBvbGQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGlu
dCBzeW5jaF9jb25zdF90ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKiBhZGRy
KQoreworICAgIHJldHVybiAoKDFVTCA8PCAobnIgJiAzMSkpICYgCisgICAgICAgICAgICAoKChj
b25zdCB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgYWRkcilbbnIgPj4gNV0pKSAhPSAwOworfQor
CitzdGF0aWMgX19pbmxpbmVfXyBpbnQgc3luY2hfdmFyX3Rlc3RfYml0KGludCBuciwgdm9sYXRp
bGUgdm9pZCAqIGFkZHIpCit7CisgICAgaW50IG9sZGJpdDsKKyAgICBfX2FzbV9fIF9fdm9sYXRp
bGVfXyAoCisgICAgICAgICJidGwgJTIsJTFcblx0c2JibCAlMCwlMCIKKyAgICAgICAgOiAiPXIi
IChvbGRiaXQpIDogIm0iIChBRERSKSwgIklyIiAobnIpICk7CisgICAgcmV0dXJuIG9sZGJpdDsK
K30KKworI2RlZmluZSBzeW5jaF90ZXN0X2JpdChucixhZGRyKSBcCisoX19idWlsdGluX2NvbnN0
YW50X3AobnIpID8gXAorIHN5bmNoX2NvbnN0X3Rlc3RfYml0KChuciksKGFkZHIpKSA6IFwKKyBz
eW5jaF92YXJfdGVzdF9iaXQoKG5yKSwoYWRkcikpKQorCisjZW5kaWYgLyogX19YRU5fU1lOQ0hf
QklUT1BTX0hfXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h
Y2hpbmUveGVuL3hlbi1vcy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3hl
bi94ZW4tb3MuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS94ZW4veGVu
LW9zLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5
cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3hlbi94ZW4tb3MuaAkyMDE2LTA5LTI5IDAwOjI0OjU0
LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhpcyBmaWxlIGlzIGlu
IHRoZSBwdWJsaWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2Ft
ZDY0L2luY2x1ZGUveGVuL3hlbi1vcy5oIDI4OTY4NSAyMDE1LTEwLTIxIDEwOjA0OjM1WiByb3ln
ZXIgJCAqLworCisjaW5jbHVkZSA8eDg2L3hlbi94ZW4tb3MuaD4KRmlsZXMgdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvbmV0bWFwLmtvIGFuZCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
bmV0bWFwLmtvIGRpZmZlcgpGaWxlcyB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9uZXRtYXAu
byBhbmQgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL25ldG1hcC5vIGRpZmZlcgpGaWxlcyB1
c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9uZXRtYXBfZnJlZWJzZC5vIGFuZCAvdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbmV0bWFwX2ZyZWVic2QubyBkaWZmZXIKRmlsZXMgdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbmV0bWFwX2dlbmVyaWMubyBhbmQgL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL25ldG1hcF9nZW5lcmljLm8gZGlmZmVyCkZpbGVzIHVzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL25ldG1hcF9tYnEubyBhbmQgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL25l
dG1hcF9tYnEubyBkaWZmZXIKRmlsZXMgdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbmV0bWFw
X21lbTIubyBhbmQgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL25ldG1hcF9tZW0yLm8gZGlm
ZmVyCkZpbGVzIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL25ldG1hcF9tb25pdG9yLm8gYW5k
IC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9uZXRtYXBfbW9uaXRvci5vIGRpZmZlcgpGaWxl
cyB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9uZXRtYXBfb2ZmbG9hZGluZ3MubyBhbmQgL3Vz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL25ldG1hcF9vZmZsb2FkaW5ncy5vIGRpZmZlcgpGaWxl
cyB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9uZXRtYXBfcGlwZS5vIGFuZCAvdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAvbmV0bWFwX3BpcGUubyBkaWZmZXIKRmlsZXMgdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvbmV0bWFwX3B0Lm8gYW5kIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC9uZXRtYXBfcHQubyBkaWZmZXIKRmlsZXMgdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbmV0
bWFwX3ZhbGUubyBhbmQgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL25ldG1hcF92YWxlLm8g
ZGlmZmVyCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvb3B0X2luZXQu
aCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvb3B0X2luZXQuaAotLS0gdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAvb3B0X2luZXQuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCAr
MDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL29wdF9pbmV0LmgJMjAxNi0xMS0y
MyAxNzowNTozMy45MDc1OTAwMDAgKzAwMDAKQEAgLTAsMCArMSwyIEBACisjZGVmaW5lIElORVQg
MQorI2RlZmluZSBUQ1BfT0ZGTE9BRCAxCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxl
cy9uZXRtYXAvb3B0X2luZXQ2LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL29wdF9pbmV0
Ni5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9vcHRfaW5ldDYuaAkxOTcwLTAxLTAx
IDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw
L29wdF9pbmV0Ni5oCTIwMTYtMTEtMjMgMTc6MDU6MzMuOTA5ODE2MDAwICswMDAwCkBAIC0wLDAg
KzEgQEAKKyNkZWZpbmUgSU5FVDYgMQpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL3BjaV9pZi5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9wY2lfaWYuaAotLS0g
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvcGNpX2lmLmgJMTk3MC0wMS0wMSAwMTowMDowMC4w
MDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9wY2lfaWYuaAky
MDE2LTExLTIzIDE3OjA1OjMzLjg5NzE5MTAwMCArMDAwMApAQCAtMCwwICsxLDQyNiBAQAorLyoK
KyAqIFRoaXMgZmlsZSBpcyBwcm9kdWNlZCBhdXRvbWF0aWNhbGx5LgorICogRG8gbm90IG1vZGlm
eSBhbnl0aGluZyBpbiBoZXJlIGJ5IGhhbmQuCisgKgorICogQ3JlYXRlZCBmcm9tIHNvdXJjZSBm
aWxlCisgKiAgIC91c3Ivc3JjL3N5cy9kZXYvcGNpL3BjaV9pZi5tCisgKiB3aXRoCisgKiAgIG1h
a2VvYmpvcHMuYXdrCisgKgorICogU2VlIHRoZSBzb3VyY2UgZmlsZSBmb3IgbGVnYWwgaW5mb3Jt
YXRpb24KKyAqLworCisKKyNpZm5kZWYgX3BjaV9pZl9oXworI2RlZmluZSBfcGNpX2lmX2hfCisK
Kworc3RydWN0IG52bGlzdDsKKworZW51bSBwY2lfaWRfdHlwZSB7CisgICAgUENJX0lEX1JJRCwK
KyAgICBQQ0lfSURfTVNJLAorfTsKKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3Ig
dGhlIFBDSV9SRUFEX0NPTkZJRygpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVz
YyBwY2lfcmVhZF9jb25maWdfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRp
bmcgdGhlIFBDSV9SRUFEX0NPTkZJRygpIG1ldGhvZCAqLwordHlwZWRlZiB1X2ludDMyX3QgcGNp
X3JlYWRfY29uZmlnX3QoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgaW50IHJlZywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCk7CisKK3N0YXRpYyBf
X2lubGluZSB1X2ludDMyX3QgUENJX1JFQURfQ09ORklHKGRldmljZV90IGRldiwgZGV2aWNlX3Qg
Y2hpbGQsIGludCByZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgd2lkdGgpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KWRl
diktPm9wcyxwY2lfcmVhZF9jb25maWcpOworCXJldHVybiAoKHBjaV9yZWFkX2NvbmZpZ190ICop
IF9tKShkZXYsIGNoaWxkLCByZWcsIHdpZHRoKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVz
Y3JpcHRvciBmb3IgdGhlIFBDSV9XUklURV9DT05GSUcoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1
Y3Qga29iam9wX2Rlc2MgcGNpX3dyaXRlX2NvbmZpZ19kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0
aW9uIGltcGxlbWVudGluZyB0aGUgUENJX1dSSVRFX0NPTkZJRygpIG1ldGhvZCAqLwordHlwZWRl
ZiB2b2lkIHBjaV93cml0ZV9jb25maWdfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBp
bnQgcmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludDMyX3QgdmFsLCBp
bnQgd2lkdGgpOworCitzdGF0aWMgX19pbmxpbmUgdm9pZCBQQ0lfV1JJVEVfQ09ORklHKGRldmlj
ZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIGludCByZWcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVfaW50MzJfdCB2YWwsIGludCB3aWR0aCkKK3sKKwlrb2Jqb3BfdCBf
bTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV93cml0ZV9jb25maWcpOwor
CSgocGNpX3dyaXRlX2NvbmZpZ190ICopIF9tKShkZXYsIGNoaWxkLCByZWcsIHZhbCwgd2lkdGgp
OworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0dFVF9QT1dF
UlNUQVRFKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9nZXRfcG93
ZXJzdGF0ZV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJ
X0dFVF9QT1dFUlNUQVRFKCkgbWV0aG9kICovCit0eXBlZGVmIGludCBwY2lfZ2V0X3Bvd2Vyc3Rh
dGVfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKTsKKworc3RhdGljIF9faW5saW5lIGlu
dCBQQ0lfR0VUX1BPV0VSU1RBVEUoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlr
b2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV9nZXRfcG93
ZXJzdGF0ZSk7CisJcmV0dXJuICgocGNpX2dldF9wb3dlcnN0YXRlX3QgKikgX20pKGRldiwgY2hp
bGQpOworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX1NFVF9Q
T1dFUlNUQVRFKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9zZXRf
cG93ZXJzdGF0ZV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUg
UENJX1NFVF9QT1dFUlNUQVRFKCkgbWV0aG9kICovCit0eXBlZGVmIGludCBwY2lfc2V0X3Bvd2Vy
c3RhdGVfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBpbnQgc3RhdGUpOworCitzdGF0
aWMgX19pbmxpbmUgaW50IFBDSV9TRVRfUE9XRVJTVEFURShkZXZpY2VfdCBkZXYsIGRldmljZV90
IGNoaWxkLCBpbnQgc3RhdGUpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29i
al90KWRldiktPm9wcyxwY2lfc2V0X3Bvd2Vyc3RhdGUpOworCXJldHVybiAoKHBjaV9zZXRfcG93
ZXJzdGF0ZV90ICopIF9tKShkZXYsIGNoaWxkLCBzdGF0ZSk7Cit9CisKKy8qKiBAYnJpZWYgVW5p
cXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBQQ0lfR0VUX1ZQRF9JREVOVCgpIG1ldGhvZCAqLworZXh0
ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lfZ2V0X3ZwZF9pZGVudF9kZXNjOworLyoqIEBicmll
ZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX0dFVF9WUERfSURFTlQoKSBtZXRob2Qg
Ki8KK3R5cGVkZWYgaW50IHBjaV9nZXRfdnBkX2lkZW50X3QoZGV2aWNlX3QgZGV2LCBkZXZpY2Vf
dCBjaGlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmlk
ZW50cHRyKTsKKworc3RhdGljIF9faW5saW5lIGludCBQQ0lfR0VUX1ZQRF9JREVOVChkZXZpY2Vf
dCBkZXYsIGRldmljZV90IGNoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICoqaWRlbnRwdHIpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9P
S1VQKCgoa29ial90KWRldiktPm9wcyxwY2lfZ2V0X3ZwZF9pZGVudCk7CisJcmV0dXJuICgocGNp
X2dldF92cGRfaWRlbnRfdCAqKSBfbSkoZGV2LCBjaGlsZCwgaWRlbnRwdHIpOworfQorCisvKiog
QGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0dFVF9WUERfUkVBRE9OTFkoKSBt
ZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgcGNpX2dldF92cGRfcmVhZG9ubHlf
ZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIFBDSV9HRVRfVlBE
X1JFQURPTkxZKCkgbWV0aG9kICovCit0eXBlZGVmIGludCBwY2lfZ2V0X3ZwZF9yZWFkb25seV90
KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIGNvbnN0IGNoYXIgKmt3LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqdnB0cik7CisKK3N0YXRpYyBf
X2lubGluZSBpbnQgUENJX0dFVF9WUERfUkVBRE9OTFkoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBj
aGlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqa3csIGNvbnN0IGNoYXIgKip2cHRyKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tV
UCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX2dldF92cGRfcmVhZG9ubHkpOworCXJldHVybiAoKHBj
aV9nZXRfdnBkX3JlYWRvbmx5X3QgKikgX20pKGRldiwgY2hpbGQsIGt3LCB2cHRyKTsKK30KKwor
LyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIFBDSV9FTkFCTEVfQlVTTUFTVEVS
KCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9lbmFibGVfYnVzbWFz
dGVyX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBQQ0lfRU5B
QkxFX0JVU01BU1RFUigpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgcGNpX2VuYWJsZV9idXNtYXN0
ZXJfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKTsKKworc3RhdGljIF9faW5saW5lIGlu
dCBQQ0lfRU5BQkxFX0JVU01BU1RFUihkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKQorewor
CWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX2VuYWJs
ZV9idXNtYXN0ZXIpOworCXJldHVybiAoKHBjaV9lbmFibGVfYnVzbWFzdGVyX3QgKikgX20pKGRl
diwgY2hpbGQpOworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJ
X0RJU0FCTEVfQlVTTUFTVEVSKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNj
IHBjaV9kaXNhYmxlX2J1c21hc3Rlcl9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxl
bWVudGluZyB0aGUgUENJX0RJU0FCTEVfQlVTTUFTVEVSKCkgbWV0aG9kICovCit0eXBlZGVmIGlu
dCBwY2lfZGlzYWJsZV9idXNtYXN0ZXJfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKTsK
Kworc3RhdGljIF9faW5saW5lIGludCBQQ0lfRElTQUJMRV9CVVNNQVNURVIoZGV2aWNlX3QgZGV2
LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2Jq
X3QpZGV2KS0+b3BzLHBjaV9kaXNhYmxlX2J1c21hc3Rlcik7CisJcmV0dXJuICgocGNpX2Rpc2Fi
bGVfYnVzbWFzdGVyX3QgKikgX20pKGRldiwgY2hpbGQpOworfQorCisvKiogQGJyaWVmIFVuaXF1
ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0VOQUJMRV9JTygpIG1ldGhvZCAqLworZXh0ZXJuIHN0
cnVjdCBrb2Jqb3BfZGVzYyBwY2lfZW5hYmxlX2lvX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rp
b24gaW1wbGVtZW50aW5nIHRoZSBQQ0lfRU5BQkxFX0lPKCkgbWV0aG9kICovCit0eXBlZGVmIGlu
dCBwY2lfZW5hYmxlX2lvX3QoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgaW50IHNwYWNl
KTsKKworc3RhdGljIF9faW5saW5lIGludCBQQ0lfRU5BQkxFX0lPKGRldmljZV90IGRldiwgZGV2
aWNlX3QgY2hpbGQsIGludCBzcGFjZSkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAo
KChrb2JqX3QpZGV2KS0+b3BzLHBjaV9lbmFibGVfaW8pOworCXJldHVybiAoKHBjaV9lbmFibGVf
aW9fdCAqKSBfbSkoZGV2LCBjaGlsZCwgc3BhY2UpOworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBk
ZXNjcmlwdG9yIGZvciB0aGUgUENJX0RJU0FCTEVfSU8oKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1
Y3Qga29iam9wX2Rlc2MgcGNpX2Rpc2FibGVfaW9fZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlv
biBpbXBsZW1lbnRpbmcgdGhlIFBDSV9ESVNBQkxFX0lPKCkgbWV0aG9kICovCit0eXBlZGVmIGlu
dCBwY2lfZGlzYWJsZV9pb190KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIGludCBzcGFj
ZSk7CisKK3N0YXRpYyBfX2lubGluZSBpbnQgUENJX0RJU0FCTEVfSU8oZGV2aWNlX3QgZGV2LCBk
ZXZpY2VfdCBjaGlsZCwgaW50IHNwYWNlKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tV
UCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX2Rpc2FibGVfaW8pOworCXJldHVybiAoKHBjaV9kaXNh
YmxlX2lvX3QgKikgX20pKGRldiwgY2hpbGQsIHNwYWNlKTsKK30KKworLyoqIEBicmllZiBVbmlx
dWUgZGVzY3JpcHRvciBmb3IgdGhlIFBDSV9BU1NJR05fSU5URVJSVVBUKCkgbWV0aG9kICovCitl
eHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9hc3NpZ25faW50ZXJydXB0X2Rlc2M7CisvKiog
QGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBQQ0lfQVNTSUdOX0lOVEVSUlVQVCgp
IG1ldGhvZCAqLwordHlwZWRlZiBpbnQgcGNpX2Fzc2lnbl9pbnRlcnJ1cHRfdChkZXZpY2VfdCBk
ZXYsIGRldmljZV90IGNoaWxkKTsKKworc3RhdGljIF9faW5saW5lIGludCBQQ0lfQVNTSUdOX0lO
VEVSUlVQVChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKQoreworCWtvYmpvcF90IF9tOwor
CUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX2Fzc2lnbl9pbnRlcnJ1cHQpOwor
CXJldHVybiAoKHBjaV9hc3NpZ25faW50ZXJydXB0X3QgKikgX20pKGRldiwgY2hpbGQpOworfQor
CisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0ZJTkRfQ0FQKCkgbWV0
aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9maW5kX2NhcF9kZXNjOworLyoq
IEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX0ZJTkRfQ0FQKCkgbWV0aG9k
ICovCit0eXBlZGVmIGludCBwY2lfZmluZF9jYXBfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNo
aWxkLCBpbnQgY2FwYWJpbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY2Fw
cmVnKTsKKworc3RhdGljIF9faW5saW5lIGludCBQQ0lfRklORF9DQVAoZGV2aWNlX3QgZGV2LCBk
ZXZpY2VfdCBjaGlsZCwgaW50IGNhcGFiaWxpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgKmNhcHJlZykKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChr
b2JqX3QpZGV2KS0+b3BzLHBjaV9maW5kX2NhcCk7CisJcmV0dXJuICgocGNpX2ZpbmRfY2FwX3Qg
KikgX20pKGRldiwgY2hpbGQsIGNhcGFiaWxpdHksIGNhcHJlZyk7Cit9CisKKy8qKiBAYnJpZWYg
VW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBQQ0lfRklORF9FWFRDQVAoKSBtZXRob2QgKi8KK2V4
dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgcGNpX2ZpbmRfZXh0Y2FwX2Rlc2M7CisvKiogQGJyaWVm
IEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBQQ0lfRklORF9FWFRDQVAoKSBtZXRob2QgKi8K
K3R5cGVkZWYgaW50IHBjaV9maW5kX2V4dGNhcF90KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hp
bGQsIGludCBjYXBhYmlsaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpj
YXByZWcpOworCitzdGF0aWMgX19pbmxpbmUgaW50IFBDSV9GSU5EX0VYVENBUChkZXZpY2VfdCBk
ZXYsIGRldmljZV90IGNoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGNhcGFiaWxpdHksIGludCAqY2FwcmVnKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExP
T0tVUCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX2ZpbmRfZXh0Y2FwKTsKKwlyZXR1cm4gKChwY2lf
ZmluZF9leHRjYXBfdCAqKSBfbSkoZGV2LCBjaGlsZCwgY2FwYWJpbGl0eSwgY2FwcmVnKTsKK30K
KworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIFBDSV9GSU5EX0hUQ0FQKCkg
bWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9maW5kX2h0Y2FwX2Rlc2M7
CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBQQ0lfRklORF9IVENBUCgp
IG1ldGhvZCAqLwordHlwZWRlZiBpbnQgcGNpX2ZpbmRfaHRjYXBfdChkZXZpY2VfdCBkZXYsIGRl
dmljZV90IGNoaWxkLCBpbnQgY2FwYWJpbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50ICpjYXByZWcpOworCitzdGF0aWMgX19pbmxpbmUgaW50IFBDSV9GSU5EX0hUQ0FQKGRl
dmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIGludCBjYXBhYmlsaXR5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNhcHJlZykKK3sKKwlrb2Jqb3BfdCBfbTsKKwlL
T0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV9maW5kX2h0Y2FwKTsKKwlyZXR1cm4g
KChwY2lfZmluZF9odGNhcF90ICopIF9tKShkZXYsIGNoaWxkLCBjYXBhYmlsaXR5LCBjYXByZWcp
OworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0FMTE9DX01T
SSgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lfYWxsb2NfbXNpX2Rl
c2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBQQ0lfQUxMT0NfTVNJ
KCkgbWV0aG9kICovCit0eXBlZGVmIGludCBwY2lfYWxsb2NfbXNpX3QoZGV2aWNlX3QgZGV2LCBk
ZXZpY2VfdCBjaGlsZCwgaW50ICpjb3VudCk7CisKK3N0YXRpYyBfX2lubGluZSBpbnQgUENJX0FM
TE9DX01TSShkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBpbnQgKmNvdW50KQoreworCWtv
YmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX2FsbG9jX21z
aSk7CisJcmV0dXJuICgocGNpX2FsbG9jX21zaV90ICopIF9tKShkZXYsIGNoaWxkLCBjb3VudCk7
Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBQQ0lfQUxMT0NfTVNJ
WCgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lfYWxsb2NfbXNpeF9k
ZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX0FMTE9DX01T
SVgoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IHBjaV9hbGxvY19tc2l4X3QoZGV2aWNlX3QgZGV2
LCBkZXZpY2VfdCBjaGlsZCwgaW50ICpjb3VudCk7CisKK3N0YXRpYyBfX2lubGluZSBpbnQgUENJ
X0FMTE9DX01TSVgoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgaW50ICpjb3VudCkKK3sK
Kwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV9hbGxv
Y19tc2l4KTsKKwlyZXR1cm4gKChwY2lfYWxsb2NfbXNpeF90ICopIF9tKShkZXYsIGNoaWxkLCBj
b3VudCk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBQQ0lfRU5B
QkxFX01TSSgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lfZW5hYmxl
X21zaV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX0VO
QUJMRV9NU0koKSBtZXRob2QgKi8KK3R5cGVkZWYgdm9pZCBwY2lfZW5hYmxlX21zaV90KGRldmlj
ZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIHVpbnQ2NF90IGFkZHJlc3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50MTZfdCBkYXRhKTsKKworc3RhdGljIF9faW5saW5lIHZvaWQg
UENJX0VOQUJMRV9NU0koZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFkZHJlc3MsIHVpbnQxNl90IGRhdGEp
Cit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KWRldiktPm9wcyxwY2lf
ZW5hYmxlX21zaSk7CisJKChwY2lfZW5hYmxlX21zaV90ICopIF9tKShkZXYsIGNoaWxkLCBhZGRy
ZXNzLCBkYXRhKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIFBD
SV9FTkFCTEVfTVNJWCgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lf
ZW5hYmxlX21zaXhfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhl
IFBDSV9FTkFCTEVfTVNJWCgpIG1ldGhvZCAqLwordHlwZWRlZiB2b2lkIHBjaV9lbmFibGVfbXNp
eF90KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIHVfaW50IGluZGV4LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFkZHJlc3MsIHVpbnQzMl90IGRhdGEpOwor
CitzdGF0aWMgX19pbmxpbmUgdm9pZCBQQ0lfRU5BQkxFX01TSVgoZGV2aWNlX3QgZGV2LCBkZXZp
Y2VfdCBjaGlsZCwgdV9pbnQgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDY0X3QgYWRkcmVzcywgdWludDMyX3QgZGF0YSkKK3sKKwlrb2Jqb3BfdCBfbTsK
KwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV9lbmFibGVfbXNpeCk7CisJKChw
Y2lfZW5hYmxlX21zaXhfdCAqKSBfbSkoZGV2LCBjaGlsZCwgaW5kZXgsIGFkZHJlc3MsIGRhdGEp
OworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0RJU0FCTEVf
TVNJKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9kaXNhYmxlX21z
aV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX0RJU0FC
TEVfTVNJKCkgbWV0aG9kICovCit0eXBlZGVmIHZvaWQgcGNpX2Rpc2FibGVfbXNpX3QoZGV2aWNl
X3QgZGV2LCBkZXZpY2VfdCBjaGlsZCk7CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIFBDSV9ESVNB
QkxFX01TSShkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKQoreworCWtvYmpvcF90IF9tOwor
CUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX2Rpc2FibGVfbXNpKTsKKwkoKHBj
aV9kaXNhYmxlX21zaV90ICopIF9tKShkZXYsIGNoaWxkKTsKK30KKworLyoqIEBicmllZiBVbmlx
dWUgZGVzY3JpcHRvciBmb3IgdGhlIFBDSV9SRU1BUF9NU0lYKCkgbWV0aG9kICovCitleHRlcm4g
c3RydWN0IGtvYmpvcF9kZXNjIHBjaV9yZW1hcF9tc2l4X2Rlc2M7CisvKiogQGJyaWVmIEEgZnVu
Y3Rpb24gaW1wbGVtZW50aW5nIHRoZSBQQ0lfUkVNQVBfTVNJWCgpIG1ldGhvZCAqLwordHlwZWRl
ZiBpbnQgcGNpX3JlbWFwX21zaXhfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBpbnQg
Y291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfaW50ICp2ZWN0b3Jz
KTsKKworc3RhdGljIF9faW5saW5lIGludCBQQ0lfUkVNQVBfTVNJWChkZXZpY2VfdCBkZXYsIGRl
dmljZV90IGNoaWxkLCBpbnQgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHVfaW50ICp2ZWN0b3JzKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tV
UCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX3JlbWFwX21zaXgpOworCXJldHVybiAoKHBjaV9yZW1h
cF9tc2l4X3QgKikgX20pKGRldiwgY2hpbGQsIGNvdW50LCB2ZWN0b3JzKTsKK30KKworLyoqIEBi
cmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIFBDSV9SRUxFQVNFX01TSSgpIG1ldGhvZCAq
LworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lfcmVsZWFzZV9tc2lfZGVzYzsKKy8qKiBA
YnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIFBDSV9SRUxFQVNFX01TSSgpIG1ldGhv
ZCAqLwordHlwZWRlZiBpbnQgcGNpX3JlbGVhc2VfbXNpX3QoZGV2aWNlX3QgZGV2LCBkZXZpY2Vf
dCBjaGlsZCk7CisKK3N0YXRpYyBfX2lubGluZSBpbnQgUENJX1JFTEVBU0VfTVNJKGRldmljZV90
IGRldiwgZGV2aWNlX3QgY2hpbGQpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgo
a29ial90KWRldiktPm9wcyxwY2lfcmVsZWFzZV9tc2kpOworCXJldHVybiAoKHBjaV9yZWxlYXNl
X21zaV90ICopIF9tKShkZXYsIGNoaWxkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3Jp
cHRvciBmb3IgdGhlIFBDSV9NU0lfQ09VTlQoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29i
am9wX2Rlc2MgcGNpX21zaV9jb3VudF9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxl
bWVudGluZyB0aGUgUENJX01TSV9DT1VOVCgpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgcGNpX21z
aV9jb3VudF90KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQpOworCitzdGF0aWMgX19pbmxp
bmUgaW50IFBDSV9NU0lfQ09VTlQoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlr
b2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV9tc2lfY291
bnQpOworCXJldHVybiAoKHBjaV9tc2lfY291bnRfdCAqKSBfbSkoZGV2LCBjaGlsZCk7Cit9CisK
Ky8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBQQ0lfTVNJWF9DT1VOVCgpIG1l
dGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lfbXNpeF9jb3VudF9kZXNjOwor
LyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX01TSVhfQ09VTlQoKSBt
ZXRob2QgKi8KK3R5cGVkZWYgaW50IHBjaV9tc2l4X2NvdW50X3QoZGV2aWNlX3QgZGV2LCBkZXZp
Y2VfdCBjaGlsZCk7CisKK3N0YXRpYyBfX2lubGluZSBpbnQgUENJX01TSVhfQ09VTlQoZGV2aWNl
X3QgZGV2LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAo
KChrb2JqX3QpZGV2KS0+b3BzLHBjaV9tc2l4X2NvdW50KTsKKwlyZXR1cm4gKChwY2lfbXNpeF9j
b3VudF90ICopIF9tKShkZXYsIGNoaWxkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3Jp
cHRvciBmb3IgdGhlIFBDSV9NU0lYX1BCQV9CQVIoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qg
a29iam9wX2Rlc2MgcGNpX21zaXhfcGJhX2Jhcl9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9u
IGltcGxlbWVudGluZyB0aGUgUENJX01TSVhfUEJBX0JBUigpIG1ldGhvZCAqLwordHlwZWRlZiBp
bnQgcGNpX21zaXhfcGJhX2Jhcl90KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQpOworCitz
dGF0aWMgX19pbmxpbmUgaW50IFBDSV9NU0lYX1BCQV9CQVIoZGV2aWNlX3QgZGV2LCBkZXZpY2Vf
dCBjaGlsZCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+
b3BzLHBjaV9tc2l4X3BiYV9iYXIpOworCXJldHVybiAoKHBjaV9tc2l4X3BiYV9iYXJfdCAqKSBf
bSkoZGV2LCBjaGlsZCk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRo
ZSBQQ0lfTVNJWF9UQUJMRV9CQVIoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rl
c2MgcGNpX21zaXhfdGFibGVfYmFyX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVt
ZW50aW5nIHRoZSBQQ0lfTVNJWF9UQUJMRV9CQVIoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IHBj
aV9tc2l4X3RhYmxlX2Jhcl90KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQpOworCitzdGF0
aWMgX19pbmxpbmUgaW50IFBDSV9NU0lYX1RBQkxFX0JBUihkZXZpY2VfdCBkZXYsIGRldmljZV90
IGNoaWxkKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5v
cHMscGNpX21zaXhfdGFibGVfYmFyKTsKKwlyZXR1cm4gKChwY2lfbXNpeF90YWJsZV9iYXJfdCAq
KSBfbSkoZGV2LCBjaGlsZCk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9y
IHRoZSBQQ0lfR0VUX0lEKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBj
aV9nZXRfaWRfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIFBD
SV9HRVRfSUQoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IHBjaV9nZXRfaWRfdChkZXZpY2VfdCBk
ZXYsIGRldmljZV90IGNoaWxkLCBlbnVtIHBjaV9pZF90eXBlIHR5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludHB0cl90ICppZCk7CisKK3N0YXRpYyBfX2lubGluZSBpbnQgUENJX0dF
VF9JRChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVudW0gcGNpX2lkX3R5cGUgdHlwZSwgdWludHB0cl90ICppZCkKK3sKKwlrb2Jq
b3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV9nZXRfaWQpOwor
CXJldHVybiAoKHBjaV9nZXRfaWRfdCAqKSBfbSkoZGV2LCBjaGlsZCwgdHlwZSwgaWQpOworfQor
CisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0FMTE9DX0RFVklORk8o
KSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgcGNpX2FsbG9jX2RldmluZm9f
ZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIFBDSV9BTExPQ19E
RVZJTkZPKCkgbWV0aG9kICovCit0eXBlZGVmIHN0cnVjdCBwY2lfZGV2aW5mbyAqIHBjaV9hbGxv
Y19kZXZpbmZvX3QoZGV2aWNlX3QgZGV2KTsKKworc3RhdGljIF9faW5saW5lIHN0cnVjdCBwY2lf
ZGV2aW5mbyAqIFBDSV9BTExPQ19ERVZJTkZPKGRldmljZV90IGRldikKK3sKKwlrb2Jqb3BfdCBf
bTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV9hbGxvY19kZXZpbmZvKTsK
KwlyZXR1cm4gKChwY2lfYWxsb2NfZGV2aW5mb190ICopIF9tKShkZXYpOworfQorCisvKiogQGJy
aWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0NISUxEX0FEREVEKCkgbWV0aG9kICov
CitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9jaGlsZF9hZGRlZF9kZXNjOworLyoqIEBi
cmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX0NISUxEX0FEREVEKCkgbWV0aG9k
ICovCit0eXBlZGVmIHZvaWQgcGNpX2NoaWxkX2FkZGVkX3QoZGV2aWNlX3QgZGV2LCBkZXZpY2Vf
dCBjaGlsZCk7CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIFBDSV9DSElMRF9BRERFRChkZXZpY2Vf
dCBkZXYsIGRldmljZV90IGNoaWxkKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgo
KGtvYmpfdClkZXYpLT5vcHMscGNpX2NoaWxkX2FkZGVkKTsKKwkoKHBjaV9jaGlsZF9hZGRlZF90
ICopIF9tKShkZXYsIGNoaWxkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBm
b3IgdGhlIFBDSV9JT1ZfQVRUQUNIKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9k
ZXNjIHBjaV9pb3ZfYXR0YWNoX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50
aW5nIHRoZSBQQ0lfSU9WX0FUVEFDSCgpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgcGNpX2lvdl9h
dHRhY2hfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3QgbnZsaXN0ICpwZl9zY2hlbWEsIHN0cnVjdCBudmxpc3QgKnZmX3Nj
aGVtYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CisK
K3N0YXRpYyBfX2lubGluZSBpbnQgUENJX0lPVl9BVFRBQ0goZGV2aWNlX3QgZGV2LCBkZXZpY2Vf
dCBjaGlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG52bGlz
dCAqcGZfc2NoZW1hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
bnZsaXN0ICp2Zl9zY2hlbWEsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJa29iam9wX3QgX207CisJ
S09CSk9QTE9PS1VQKCgoa29ial90KWRldiktPm9wcyxwY2lfaW92X2F0dGFjaCk7CisJcmV0dXJu
ICgocGNpX2lvdl9hdHRhY2hfdCAqKSBfbSkoZGV2LCBjaGlsZCwgcGZfc2NoZW1hLCB2Zl9zY2hl
bWEsIG5hbWUpOworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJ
X0lPVl9ERVRBQ0goKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgcGNpX2lv
dl9kZXRhY2hfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIFBD
SV9JT1ZfREVUQUNIKCkgbWV0aG9kICovCit0eXBlZGVmIGludCBwY2lfaW92X2RldGFjaF90KGRl
dmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQpOworCitzdGF0aWMgX19pbmxpbmUgaW50IFBDSV9J
T1ZfREVUQUNIKGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQpCit7CisJa29iam9wX3QgX207
CisJS09CSk9QTE9PS1VQKCgoa29ial90KWRldiktPm9wcyxwY2lfaW92X2RldGFjaCk7CisJcmV0
dXJuICgocGNpX2lvdl9kZXRhY2hfdCAqKSBfbSkoZGV2LCBjaGlsZCk7Cit9CisKKy8qKiBAYnJp
ZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBQQ0lfQ1JFQVRFX0lPVl9DSElMRCgpIG1ldGhv
ZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lfY3JlYXRlX2lvdl9jaGlsZF9kZXNj
OworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX0NSRUFURV9JT1Zf
Q0hJTEQoKSBtZXRob2QgKi8KK3R5cGVkZWYgZGV2aWNlX3QgcGNpX2NyZWF0ZV9pb3ZfY2hpbGRf
dChkZXZpY2VfdCBidXMsIGRldmljZV90IHBmLCB1aW50MTZfdCByaWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgdmlkLCB1aW50MTZfdCBkaWQpOwor
CitzdGF0aWMgX19pbmxpbmUgZGV2aWNlX3QgUENJX0NSRUFURV9JT1ZfQ0hJTEQoZGV2aWNlX3Qg
YnVzLCBkZXZpY2VfdCBwZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50MTZfdCByaWQsIHVpbnQxNl90IHZpZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBkaWQpCit7CisJa29iam9wX3QgX207
CisJS09CSk9QTE9PS1VQKCgoa29ial90KWJ1cyktPm9wcyxwY2lfY3JlYXRlX2lvdl9jaGlsZCk7
CisJcmV0dXJuICgocGNpX2NyZWF0ZV9pb3ZfY2hpbGRfdCAqKSBfbSkoYnVzLCBwZiwgcmlkLCB2
aWQsIGRpZCk7Cit9CisKKyNlbmRpZiAvKiBfcGNpX2lmX2hfICovCmRpZmYgLXUgLXIgLU4gdXNy
L3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L19hbGlnbi5oIC91c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC94ODYvX2FsaWduLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9f
YWxpZ24uaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9fYWxpZ24uaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAw
MDAwMCArMDEwMApAQCAtMCwwICsxLDUyIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMSBE
YXZpZCBFLiBPJ0JyaWVuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhl
IFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJr
ZWxleSBieQorICogV2lsbGlhbSBKb2xpdHouCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNp
bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUK
KyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRo
aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkg
b2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4g
TmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBj
b250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisg
KiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpcGFyYW0uaAk1LjggKEJlcmtlbGV5KSA2
LzI4LzkxCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL19hbGlnbi5o
IDMwMTAzNyAyMDE2LTA1LTMxIDEzOjMxOjE5WiBlZCAkCisgKi8KKworI2lmbmRlZiBfWDg2X0lO
Q0xVREVfX0FMSUdOX0hfCisjZGVmaW5lCV9YODZfSU5DTFVERV9fQUxJR05fSF8KKworLyoKKyAq
IFJvdW5kIHAgKHBvaW50ZXIgb3IgYnl0ZSBpbmRleCkgdXAgdG8gYSBjb3JyZWN0bHktYWxpZ25l
ZCB2YWx1ZQorICogZm9yIGFsbCBkYXRhIHR5cGVzIChpbnQsIGxvbmcsIC4uLikuICAgVGhlIHJl
c3VsdCBpcyB1bnNpZ25lZCBpbnQKKyAqIGFuZCBtdXN0IGJlIGNhc3QgdG8gYW55IGRlc2lyZWQg
cG9pbnRlciB0eXBlLgorICovCisjZGVmaW5lCV9BTElHTkJZVEVTCShzaXplb2YoX19yZWdpc3Rl
cl90KSAtIDEpCisjZGVmaW5lCV9BTElHTihwKQkoKChfX3VpbnRwdHJfdCkocCkgKyBfQUxJR05C
WVRFUykgJiB+X0FMSUdOQllURVMpCisKKyNlbmRpZiAvKiAhX1g4Nl9JTkNMVURFX19BTElHTl9I
XyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9faW50dHlw
ZXMuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L19pbnR0eXBlcy5oCi0tLSB1c3Iv
c3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvX2ludHR5cGVzLmgJMTk3MC0wMS0wMSAwMTowMDow
MC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvX2lu
dHR5cGVzLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwy
MjEgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAxIFRoZSBOZXRCU0QgRm91bmRhdGlvbiwg
SW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZl
ZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorICog
YnkgS2xhdXMgS2xlaW4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworICogYGBB
UyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoJRnJvbTogJE5ldEJTRDog
aW50X2ZtdGlvLmgsdiAxLjIgMjAwMS8wNC8yNiAxNjoyNToyMSBrbGVpbmsgRXhwICQKKyAqICRG
cmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvX2ludHR5cGVzLmggMjE3MTU3IDIw
MTEtMDEtMDggMTg6MDk6NDhaIHRpamwgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfSU5UVFlQ
RVNfSF8KKyNkZWZpbmUJX01BQ0hJTkVfSU5UVFlQRVNfSF8KKworLyoKKyAqIE1hY3JvcyBmb3Ig
Zm9ybWF0IHNwZWNpZmllcnMuCisgKi8KKworI2lmZGVmIF9fTFA2NF9fCisjZGVmaW5lCV9fUFJJ
NjQJCSJsIgorI2RlZmluZQlfX1BSSXB0cgkibCIKKyNlbHNlCisjZGVmaW5lCV9fUFJJNjQJCSJs
bCIKKyNkZWZpbmUJX19QUklwdHIKKyNlbmRpZgorCisvKiBmcHJpbnRmKDMpIG1hY3JvcyBmb3Ig
c2lnbmVkIGludGVnZXJzLiAqLworCisjZGVmaW5lCVBSSWQ4CQkiZCIJCS8qIGludDhfdCAqLwor
I2RlZmluZQlQUklkMTYJCSJkIgkJLyogaW50MTZfdCAqLworI2RlZmluZQlQUklkMzIJCSJkIgkJ
LyogaW50MzJfdCAqLworI2RlZmluZQlQUklkNjQJCV9fUFJJNjQiZCIJLyogaW50NjRfdCAqLwor
I2RlZmluZQlQUklkTEVBU1Q4CSJkIgkJLyogaW50X2xlYXN0OF90ICovCisjZGVmaW5lCVBSSWRM
RUFTVDE2CSJkIgkJLyogaW50X2xlYXN0MTZfdCAqLworI2RlZmluZQlQUklkTEVBU1QzMgkiZCIJ
CS8qIGludF9sZWFzdDMyX3QgKi8KKyNkZWZpbmUJUFJJZExFQVNUNjQJX19QUkk2NCJkIgkvKiBp
bnRfbGVhc3Q2NF90ICovCisjZGVmaW5lCVBSSWRGQVNUOAkiZCIJCS8qIGludF9mYXN0OF90ICov
CisjZGVmaW5lCVBSSWRGQVNUMTYJImQiCQkvKiBpbnRfZmFzdDE2X3QgKi8KKyNkZWZpbmUJUFJJ
ZEZBU1QzMgkiZCIJCS8qIGludF9mYXN0MzJfdCAqLworI2RlZmluZQlQUklkRkFTVDY0CV9fUFJJ
NjQiZCIJLyogaW50X2Zhc3Q2NF90ICovCisjZGVmaW5lCVBSSWRNQVgJCSJqZCIJCS8qIGludG1h
eF90ICovCisjZGVmaW5lCVBSSWRQVFIJCV9fUFJJcHRyImQiCS8qIGludHB0cl90ICovCisKKyNk
ZWZpbmUJUFJJaTgJCSJpIgkJLyogaW50OF90ICovCisjZGVmaW5lCVBSSWkxNgkJImkiCQkvKiBp
bnQxNl90ICovCisjZGVmaW5lCVBSSWkzMgkJImkiCQkvKiBpbnQzMl90ICovCisjZGVmaW5lCVBS
SWk2NAkJX19QUkk2NCJpIgkvKiBpbnQ2NF90ICovCisjZGVmaW5lCVBSSWlMRUFTVDgJImkiCQkv
KiBpbnRfbGVhc3Q4X3QgICovCisjZGVmaW5lCVBSSWlMRUFTVDE2CSJpIgkJLyogaW50X2xlYXN0
MTZfdCAqLworI2RlZmluZQlQUklpTEVBU1QzMgkiaSIJCS8qIGludF9sZWFzdDMyX3QgKi8KKyNk
ZWZpbmUJUFJJaUxFQVNUNjQJX19QUkk2NCJpIgkvKiBpbnRfbGVhc3Q2NF90ICovCisjZGVmaW5l
CVBSSWlGQVNUOAkiaSIJCS8qIGludF9mYXN0OF90ICovCisjZGVmaW5lCVBSSWlGQVNUMTYJImki
CQkvKiBpbnRfZmFzdDE2X3QgKi8KKyNkZWZpbmUJUFJJaUZBU1QzMgkiaSIJCS8qIGludF9mYXN0
MzJfdCAqLworI2RlZmluZQlQUklpRkFTVDY0CV9fUFJJNjQiaSIJLyogaW50X2Zhc3Q2NF90ICov
CisjZGVmaW5lCVBSSWlNQVgJCSJqaSIJCS8qIGludG1heF90ICovCisjZGVmaW5lCVBSSWlQVFIJ
CV9fUFJJcHRyImkiCS8qIGludHB0cl90ICovCisKKy8qIGZwcmludGYoMykgbWFjcm9zIGZvciB1
bnNpZ25lZCBpbnRlZ2Vycy4gKi8KKworI2RlZmluZQlQUklvOAkJIm8iCQkvKiB1aW50OF90ICov
CisjZGVmaW5lCVBSSW8xNgkJIm8iCQkvKiB1aW50MTZfdCAqLworI2RlZmluZQlQUklvMzIJCSJv
IgkJLyogdWludDMyX3QgKi8KKyNkZWZpbmUJUFJJbzY0CQlfX1BSSTY0Im8iCS8qIHVpbnQ2NF90
ICovCisjZGVmaW5lCVBSSW9MRUFTVDgJIm8iCQkvKiB1aW50X2xlYXN0OF90ICovCisjZGVmaW5l
CVBSSW9MRUFTVDE2CSJvIgkJLyogdWludF9sZWFzdDE2X3QgKi8KKyNkZWZpbmUJUFJJb0xFQVNU
MzIJIm8iCQkvKiB1aW50X2xlYXN0MzJfdCAqLworI2RlZmluZQlQUklvTEVBU1Q2NAlfX1BSSTY0
Im8iCS8qIHVpbnRfbGVhc3Q2NF90ICovCisjZGVmaW5lCVBSSW9GQVNUOAkibyIJCS8qIHVpbnRf
ZmFzdDhfdCAqLworI2RlZmluZQlQUklvRkFTVDE2CSJvIgkJLyogdWludF9mYXN0MTZfdCAqLwor
I2RlZmluZQlQUklvRkFTVDMyCSJvIgkJLyogdWludF9mYXN0MzJfdCAqLworI2RlZmluZQlQUklv
RkFTVDY0CV9fUFJJNjQibyIJLyogdWludF9mYXN0NjRfdCAqLworI2RlZmluZQlQUklvTUFYCQki
am8iCQkvKiB1aW50bWF4X3QgKi8KKyNkZWZpbmUJUFJJb1BUUgkJX19QUklwdHIibyIJLyogdWlu
dHB0cl90ICovCisKKyNkZWZpbmUJUFJJdTgJCSJ1IgkJLyogdWludDhfdCAqLworI2RlZmluZQlQ
Ukl1MTYJCSJ1IgkJLyogdWludDE2X3QgKi8KKyNkZWZpbmUJUFJJdTMyCQkidSIJCS8qIHVpbnQz
Ml90ICovCisjZGVmaW5lCVBSSXU2NAkJX19QUkk2NCJ1IgkvKiB1aW50NjRfdCAqLworI2RlZmlu
ZQlQUkl1TEVBU1Q4CSJ1IgkJLyogdWludF9sZWFzdDhfdCAqLworI2RlZmluZQlQUkl1TEVBU1Qx
NgkidSIJCS8qIHVpbnRfbGVhc3QxNl90ICovCisjZGVmaW5lCVBSSXVMRUFTVDMyCSJ1IgkJLyog
dWludF9sZWFzdDMyX3QgKi8KKyNkZWZpbmUJUFJJdUxFQVNUNjQJX19QUkk2NCJ1IgkvKiB1aW50
X2xlYXN0NjRfdCAqLworI2RlZmluZQlQUkl1RkFTVDgJInUiCQkvKiB1aW50X2Zhc3Q4X3QgKi8K
KyNkZWZpbmUJUFJJdUZBU1QxNgkidSIJCS8qIHVpbnRfZmFzdDE2X3QgKi8KKyNkZWZpbmUJUFJJ
dUZBU1QzMgkidSIJCS8qIHVpbnRfZmFzdDMyX3QgKi8KKyNkZWZpbmUJUFJJdUZBU1Q2NAlfX1BS
STY0InUiCS8qIHVpbnRfZmFzdDY0X3QgKi8KKyNkZWZpbmUJUFJJdU1BWAkJImp1IgkJLyogdWlu
dG1heF90ICovCisjZGVmaW5lCVBSSXVQVFIJCV9fUFJJcHRyInUiCS8qIHVpbnRwdHJfdCAqLwor
CisjZGVmaW5lCVBSSXg4CQkieCIJCS8qIHVpbnQ4X3QgKi8KKyNkZWZpbmUJUFJJeDE2CQkieCIJ
CS8qIHVpbnQxNl90ICovCisjZGVmaW5lCVBSSXgzMgkJIngiCQkvKiB1aW50MzJfdCAqLworI2Rl
ZmluZQlQUkl4NjQJCV9fUFJJNjQieCIJLyogdWludDY0X3QgKi8KKyNkZWZpbmUJUFJJeExFQVNU
OAkieCIJCS8qIHVpbnRfbGVhc3Q4X3QgKi8KKyNkZWZpbmUJUFJJeExFQVNUMTYJIngiCQkvKiB1
aW50X2xlYXN0MTZfdCAqLworI2RlZmluZQlQUkl4TEVBU1QzMgkieCIJCS8qIHVpbnRfbGVhc3Qz
Ml90ICovCisjZGVmaW5lCVBSSXhMRUFTVDY0CV9fUFJJNjQieCIJLyogdWludF9sZWFzdDY0X3Qg
Ki8KKyNkZWZpbmUJUFJJeEZBU1Q4CSJ4IgkJLyogdWludF9mYXN0OF90ICovCisjZGVmaW5lCVBS
SXhGQVNUMTYJIngiCQkvKiB1aW50X2Zhc3QxNl90ICovCisjZGVmaW5lCVBSSXhGQVNUMzIJIngi
CQkvKiB1aW50X2Zhc3QzMl90ICovCisjZGVmaW5lCVBSSXhGQVNUNjQJX19QUkk2NCJ4IgkvKiB1
aW50X2Zhc3Q2NF90ICovCisjZGVmaW5lCVBSSXhNQVgJCSJqeCIJCS8qIHVpbnRtYXhfdCAqLwor
I2RlZmluZQlQUkl4UFRSCQlfX1BSSXB0ciJ4IgkvKiB1aW50cHRyX3QgKi8KKworI2RlZmluZQlQ
UklYOAkJIlgiCQkvKiB1aW50OF90ICovCisjZGVmaW5lCVBSSVgxNgkJIlgiCQkvKiB1aW50MTZf
dCAqLworI2RlZmluZQlQUklYMzIJCSJYIgkJLyogdWludDMyX3QgKi8KKyNkZWZpbmUJUFJJWDY0
CQlfX1BSSTY0IlgiCS8qIHVpbnQ2NF90ICovCisjZGVmaW5lCVBSSVhMRUFTVDgJIlgiCQkvKiB1
aW50X2xlYXN0OF90ICovCisjZGVmaW5lCVBSSVhMRUFTVDE2CSJYIgkJLyogdWludF9sZWFzdDE2
X3QgKi8KKyNkZWZpbmUJUFJJWExFQVNUMzIJIlgiCQkvKiB1aW50X2xlYXN0MzJfdCAqLworI2Rl
ZmluZQlQUklYTEVBU1Q2NAlfX1BSSTY0IlgiCS8qIHVpbnRfbGVhc3Q2NF90ICovCisjZGVmaW5l
CVBSSVhGQVNUOAkiWCIJCS8qIHVpbnRfZmFzdDhfdCAqLworI2RlZmluZQlQUklYRkFTVDE2CSJY
IgkJLyogdWludF9mYXN0MTZfdCAqLworI2RlZmluZQlQUklYRkFTVDMyCSJYIgkJLyogdWludF9m
YXN0MzJfdCAqLworI2RlZmluZQlQUklYRkFTVDY0CV9fUFJJNjQiWCIJLyogdWludF9mYXN0NjRf
dCAqLworI2RlZmluZQlQUklYTUFYCQkialgiCQkvKiB1aW50bWF4X3QgKi8KKyNkZWZpbmUJUFJJ
WFBUUgkJX19QUklwdHIiWCIJLyogdWludHB0cl90ICovCisKKy8qIGZzY2FuZigzKSBtYWNyb3Mg
Zm9yIHNpZ25lZCBpbnRlZ2Vycy4gKi8KKworI2RlZmluZQlTQ05kOAkJImhoZCIJCS8qIGludDhf
dCAqLworI2RlZmluZQlTQ05kMTYJCSJoZCIJCS8qIGludDE2X3QgKi8KKyNkZWZpbmUJU0NOZDMy
CQkiZCIJCS8qIGludDMyX3QgKi8KKyNkZWZpbmUJU0NOZDY0CQlfX1BSSTY0ImQiCS8qIGludDY0
X3QgKi8KKyNkZWZpbmUJU0NOZExFQVNUOAkiaGhkIgkJLyogaW50X2xlYXN0OF90ICovCisjZGVm
aW5lCVNDTmRMRUFTVDE2CSJoZCIJCS8qIGludF9sZWFzdDE2X3QgKi8KKyNkZWZpbmUJU0NOZExF
QVNUMzIJImQiCQkvKiBpbnRfbGVhc3QzMl90ICovCisjZGVmaW5lCVNDTmRMRUFTVDY0CV9fUFJJ
NjQiZCIJLyogaW50X2xlYXN0NjRfdCAqLworI2RlZmluZQlTQ05kRkFTVDgJImQiCQkvKiBpbnRf
ZmFzdDhfdCAqLworI2RlZmluZQlTQ05kRkFTVDE2CSJkIgkJLyogaW50X2Zhc3QxNl90ICovCisj
ZGVmaW5lCVNDTmRGQVNUMzIJImQiCQkvKiBpbnRfZmFzdDMyX3QgKi8KKyNkZWZpbmUJU0NOZEZB
U1Q2NAlfX1BSSTY0ImQiCS8qIGludF9mYXN0NjRfdCAqLworI2RlZmluZQlTQ05kTUFYCQkiamQi
CQkvKiBpbnRtYXhfdCAqLworI2RlZmluZQlTQ05kUFRSCQlfX1BSSXB0ciJkIgkvKiBpbnRwdHJf
dCAqLworCisjZGVmaW5lCVNDTmk4CQkiaGhpIgkJLyogaW50OF90ICovCisjZGVmaW5lCVNDTmkx
NgkJImhpIgkJLyogaW50MTZfdCAqLworI2RlZmluZQlTQ05pMzIJCSJpIgkJLyogaW50MzJfdCAq
LworI2RlZmluZQlTQ05pNjQJCV9fUFJJNjQiaSIJLyogaW50NjRfdCAqLworI2RlZmluZQlTQ05p
TEVBU1Q4CSJoaGkiCQkvKiBpbnRfbGVhc3Q4X3QgKi8KKyNkZWZpbmUJU0NOaUxFQVNUMTYJImhp
IgkJLyogaW50X2xlYXN0MTZfdCAqLworI2RlZmluZQlTQ05pTEVBU1QzMgkiaSIJCS8qIGludF9s
ZWFzdDMyX3QgKi8KKyNkZWZpbmUJU0NOaUxFQVNUNjQJX19QUkk2NCJpIgkvKiBpbnRfbGVhc3Q2
NF90ICovCisjZGVmaW5lCVNDTmlGQVNUOAkiaSIJCS8qIGludF9mYXN0OF90ICovCisjZGVmaW5l
CVNDTmlGQVNUMTYJImkiCQkvKiBpbnRfZmFzdDE2X3QgKi8KKyNkZWZpbmUJU0NOaUZBU1QzMgki
aSIJCS8qIGludF9mYXN0MzJfdCAqLworI2RlZmluZQlTQ05pRkFTVDY0CV9fUFJJNjQiaSIJLyog
aW50X2Zhc3Q2NF90ICovCisjZGVmaW5lCVNDTmlNQVgJCSJqaSIJCS8qIGludG1heF90ICovCisj
ZGVmaW5lCVNDTmlQVFIJCV9fUFJJcHRyImkiCS8qIGludHB0cl90ICovCisKKy8qIGZzY2FuZigz
KSBtYWNyb3MgZm9yIHVuc2lnbmVkIGludGVnZXJzLiAqLworCisjZGVmaW5lCVNDTm84CQkiaGhv
IgkJLyogdWludDhfdCAqLworI2RlZmluZQlTQ05vMTYJCSJobyIJCS8qIHVpbnQxNl90ICovCisj
ZGVmaW5lCVNDTm8zMgkJIm8iCQkvKiB1aW50MzJfdCAqLworI2RlZmluZQlTQ05vNjQJCV9fUFJJ
NjQibyIJLyogdWludDY0X3QgKi8KKyNkZWZpbmUJU0NOb0xFQVNUOAkiaGhvIgkJLyogdWludF9s
ZWFzdDhfdCAqLworI2RlZmluZQlTQ05vTEVBU1QxNgkiaG8iCQkvKiB1aW50X2xlYXN0MTZfdCAq
LworI2RlZmluZQlTQ05vTEVBU1QzMgkibyIJCS8qIHVpbnRfbGVhc3QzMl90ICovCisjZGVmaW5l
CVNDTm9MRUFTVDY0CV9fUFJJNjQibyIJLyogdWludF9sZWFzdDY0X3QgKi8KKyNkZWZpbmUJU0NO
b0ZBU1Q4CSJvIgkJLyogdWludF9mYXN0OF90ICovCisjZGVmaW5lCVNDTm9GQVNUMTYJIm8iCQkv
KiB1aW50X2Zhc3QxNl90ICovCisjZGVmaW5lCVNDTm9GQVNUMzIJIm8iCQkvKiB1aW50X2Zhc3Qz
Ml90ICovCisjZGVmaW5lCVNDTm9GQVNUNjQJX19QUkk2NCJvIgkvKiB1aW50X2Zhc3Q2NF90ICov
CisjZGVmaW5lCVNDTm9NQVgJCSJqbyIJCS8qIHVpbnRtYXhfdCAqLworI2RlZmluZQlTQ05vUFRS
CQlfX1BSSXB0ciJvIgkvKiB1aW50cHRyX3QgKi8KKworI2RlZmluZQlTQ051OAkJImhodSIJCS8q
IHVpbnQ4X3QgKi8KKyNkZWZpbmUJU0NOdTE2CQkiaHUiCQkvKiB1aW50MTZfdCAqLworI2RlZmlu
ZQlTQ051MzIJCSJ1IgkJLyogdWludDMyX3QgKi8KKyNkZWZpbmUJU0NOdTY0CQlfX1BSSTY0InUi
CS8qIHVpbnQ2NF90ICovCisjZGVmaW5lCVNDTnVMRUFTVDgJImhodSIJCS8qIHVpbnRfbGVhc3Q4
X3QgKi8KKyNkZWZpbmUJU0NOdUxFQVNUMTYJImh1IgkJLyogdWludF9sZWFzdDE2X3QgKi8KKyNk
ZWZpbmUJU0NOdUxFQVNUMzIJInUiCQkvKiB1aW50X2xlYXN0MzJfdCAqLworI2RlZmluZQlTQ051
TEVBU1Q2NAlfX1BSSTY0InUiCS8qIHVpbnRfbGVhc3Q2NF90ICovCisjZGVmaW5lCVNDTnVGQVNU
OAkidSIJCS8qIHVpbnRfZmFzdDhfdCAqLworI2RlZmluZQlTQ051RkFTVDE2CSJ1IgkJLyogdWlu
dF9mYXN0MTZfdCAqLworI2RlZmluZQlTQ051RkFTVDMyCSJ1IgkJLyogdWludF9mYXN0MzJfdCAq
LworI2RlZmluZQlTQ051RkFTVDY0CV9fUFJJNjQidSIJLyogdWludF9mYXN0NjRfdCAqLworI2Rl
ZmluZQlTQ051TUFYCQkianUiCQkvKiB1aW50bWF4X3QgKi8KKyNkZWZpbmUJU0NOdVBUUgkJX19Q
UklwdHIidSIJLyogdWludHB0cl90ICovCisKKyNkZWZpbmUJU0NOeDgJCSJoaHgiCQkvKiB1aW50
OF90ICovCisjZGVmaW5lCVNDTngxNgkJImh4IgkJLyogdWludDE2X3QgKi8KKyNkZWZpbmUJU0NO
eDMyCQkieCIJCS8qIHVpbnQzMl90ICovCisjZGVmaW5lCVNDTng2NAkJX19QUkk2NCJ4IgkvKiB1
aW50NjRfdCAqLworI2RlZmluZQlTQ054TEVBU1Q4CSJoaHgiCQkvKiB1aW50X2xlYXN0OF90ICov
CisjZGVmaW5lCVNDTnhMRUFTVDE2CSJoeCIJCS8qIHVpbnRfbGVhc3QxNl90ICovCisjZGVmaW5l
CVNDTnhMRUFTVDMyCSJ4IgkJLyogdWludF9sZWFzdDMyX3QgKi8KKyNkZWZpbmUJU0NOeExFQVNU
NjQJX19QUkk2NCJ4IgkvKiB1aW50X2xlYXN0NjRfdCAqLworI2RlZmluZQlTQ054RkFTVDgJIngi
CQkvKiB1aW50X2Zhc3Q4X3QgKi8KKyNkZWZpbmUJU0NOeEZBU1QxNgkieCIJCS8qIHVpbnRfZmFz
dDE2X3QgKi8KKyNkZWZpbmUJU0NOeEZBU1QzMgkieCIJCS8qIHVpbnRfZmFzdDMyX3QgKi8KKyNk
ZWZpbmUJU0NOeEZBU1Q2NAlfX1BSSTY0IngiCS8qIHVpbnRfZmFzdDY0X3QgKi8KKyNkZWZpbmUJ
U0NOeE1BWAkJImp4IgkJLyogdWludG1heF90ICovCisjZGVmaW5lCVNDTnhQVFIJCV9fUFJJcHRy
IngiCS8qIHVpbnRwdHJfdCAqLworCisjZW5kaWYgLyogIV9NQUNISU5FX0lOVFRZUEVTX0hfICov
CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L19saW1pdHMuaCAv
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L19saW1pdHMuaAotLS0gdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAveDg2L19saW1pdHMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAw
MCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9fbGltaXRzLmgJMjAx
Ni0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwxMDEgQEAKKy8qLQor
ICogQ29weXJpZ2h0IChjKSAxOTg4LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVy
c2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQu
IE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMg
Y29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgor
ICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKWxpbWl0cy5oCTguMyAoQmVya2VsZXkpIDEvNC85
NAorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9fbGltaXRzLmggMjM1
OTM5IDIwMTItMDUtMjQgMjE6NDQ6NDZaIG9icmllbiAkCisgKi8KKworI2lmbmRlZglfTUFDSElO
RV9fTElNSVRTX0hfCisjZGVmaW5lCV9NQUNISU5FX19MSU1JVFNfSF8KKworLyoKKyAqIEFjY29y
ZGluZyB0byBBTlNJIChzZWN0aW9uIDIuMi40LjIpLCB0aGUgdmFsdWVzIGJlbG93IG11c3QgYmUg
dXNhYmxlIGJ5CisgKiAjaWYgcHJlcHJvY2Vzc2luZyBkaXJlY3RpdmVzLiAgQWRkaXRpb25hbGx5
LCB0aGUgZXhwcmVzc2lvbiBtdXN0IGhhdmUgdGhlCisgKiBzYW1lIHR5cGUgYXMgd291bGQgYW4g
ZXhwcmVzc2lvbiB0aGF0IGlzIGFuIG9iamVjdCBvZiB0aGUgY29ycmVzcG9uZGluZworICogdHlw
ZSBjb252ZXJ0ZWQgYWNjb3JkaW5nIHRvIHRoZSBpbnRlZ3JhbCBwcm9tb3Rpb25zLiAgVGhlIHN1
YnRyYWN0aW9uIGZvcgorICogSU5UX01JTiwgZXRjLiwgaXMgc28gdGhlIHZhbHVlIGlzIG5vdCB1
bnNpZ25lZDsgZS5nLiwgMHg4MDAwMDAwMCBpcyBhbgorICogdW5zaWduZWQgaW50IGZvciAzMi1i
aXQgdHdvJ3MgY29tcGxlbWVudCBBTlNJIGNvbXBpbGVycyAoc2VjdGlvbiAzLjEuMy4yKS4KKyAq
LworCisjZGVmaW5lCV9fQ0hBUl9CSVQJOAkJLyogbnVtYmVyIG9mIGJpdHMgaW4gYSBjaGFyICov
CisKKyNkZWZpbmUJX19TQ0hBUl9NQVgJMHg3ZgkJLyogbWF4IHZhbHVlIGZvciBhIHNpZ25lZCBj
aGFyICovCisjZGVmaW5lCV9fU0NIQVJfTUlOCSgtMHg3ZiAtIDEpCS8qIG1pbiB2YWx1ZSBmb3Ig
YSBzaWduZWQgY2hhciAqLworCisjZGVmaW5lCV9fVUNIQVJfTUFYCTB4ZmYJCS8qIG1heCB2YWx1
ZSBmb3IgYW4gdW5zaWduZWQgY2hhciAqLworCisjZGVmaW5lCV9fVVNIUlRfTUFYCTB4ZmZmZgkJ
LyogbWF4IHZhbHVlIGZvciBhbiB1bnNpZ25lZCBzaG9ydCAqLworI2RlZmluZQlfX1NIUlRfTUFY
CTB4N2ZmZgkJLyogbWF4IHZhbHVlIGZvciBhIHNob3J0ICovCisjZGVmaW5lCV9fU0hSVF9NSU4J
KC0weDdmZmYgLSAxKQkvKiBtaW4gdmFsdWUgZm9yIGEgc2hvcnQgKi8KKworI2RlZmluZQlfX1VJ
TlRfTUFYCTB4ZmZmZmZmZmYJLyogbWF4IHZhbHVlIGZvciBhbiB1bnNpZ25lZCBpbnQgKi8KKyNk
ZWZpbmUJX19JTlRfTUFYCTB4N2ZmZmZmZmYJLyogbWF4IHZhbHVlIGZvciBhbiBpbnQgKi8KKyNk
ZWZpbmUJX19JTlRfTUlOCSgtMHg3ZmZmZmZmZiAtIDEpCS8qIG1pbiB2YWx1ZSBmb3IgYW4gaW50
ICovCisKKyNpZmRlZglfX0xQNjRfXworI2RlZmluZQlfX1VMT05HX01BWAkweGZmZmZmZmZmZmZm
ZmZmZmYJLyogbWF4IGZvciBhbiB1bnNpZ25lZCBsb25nICovCisjZGVmaW5lCV9fTE9OR19NQVgJ
MHg3ZmZmZmZmZmZmZmZmZmZmCS8qIG1heCBmb3IgYSBsb25nICovCisjZGVmaW5lCV9fTE9OR19N
SU4JKC0weDdmZmZmZmZmZmZmZmZmZmYgLSAxKSAvKiBtaW4gZm9yIGEgbG9uZyAqLworI2Vsc2UK
KyNkZWZpbmUJX19VTE9OR19NQVgJMHhmZmZmZmZmZlVMCisjZGVmaW5lCV9fTE9OR19NQVgJMHg3
ZmZmZmZmZkwKKyNkZWZpbmUJX19MT05HX01JTgkoLTB4N2ZmZmZmZmZMIC0gMSkKKyNlbmRpZgor
CisJCQkvKiBtYXggdmFsdWUgZm9yIGFuIHVuc2lnbmVkIGxvbmcgbG9uZyAqLworI2RlZmluZQlf
X1VMTE9OR19NQVgJMHhmZmZmZmZmZmZmZmZmZmZmVUxMCisjZGVmaW5lCV9fTExPTkdfTUFYCTB4
N2ZmZmZmZmZmZmZmZmZmZkxMCS8qIG1heCB2YWx1ZSBmb3IgYSBsb25nIGxvbmcgKi8KKyNkZWZp
bmUJX19MTE9OR19NSU4JKC0weDdmZmZmZmZmZmZmZmZmZmZMTCAtIDEpICAvKiBtaW4gZm9yIGEg
bG9uZyBsb25nICovCisKKyNpZmRlZglfX0xQNjRfXworI2RlZmluZQlfX1NTSVpFX01BWAlfX0xP
TkdfTUFYCS8qIG1heCB2YWx1ZSBmb3IgYSBzc2l6ZV90ICovCisjZGVmaW5lCV9fU0laRV9UX01B
WAlfX1VMT05HX01BWAkvKiBtYXggdmFsdWUgZm9yIGEgc2l6ZV90ICovCisjZGVmaW5lCV9fT0ZG
X01BWAlfX0xPTkdfTUFYCS8qIG1heCB2YWx1ZSBmb3IgYW4gb2ZmX3QgKi8KKyNkZWZpbmUJX19P
RkZfTUlOCV9fTE9OR19NSU4JLyogbWluIHZhbHVlIGZvciBhbiBvZmZfdCAqLworLyogUXVhZHMg
YW5kIGxvbmdzIGFyZSB0aGUgc2FtZSBvbiB0aGUgYW1kNjQuICBFbnN1cmUgdGhleSBzdGF5IGlu
IHN5bmMuICovCisjZGVmaW5lCV9fVVFVQURfTUFYCV9fVUxPTkdfTUFYCS8qIG1heCB2YWx1ZSBm
b3IgYSB1cXVhZF90ICovCisjZGVmaW5lCV9fUVVBRF9NQVgJX19MT05HX01BWAkvKiBtYXggdmFs
dWUgZm9yIGEgcXVhZF90ICovCisjZGVmaW5lCV9fUVVBRF9NSU4JX19MT05HX01JTgkvKiBtaW4g
dmFsdWUgZm9yIGEgcXVhZF90ICovCisjZGVmaW5lCV9fTE9OR19CSVQJNjQKKyNlbHNlCisjZGVm
aW5lCV9fU1NJWkVfTUFYCV9fSU5UX01BWAorI2RlZmluZQlfX1NJWkVfVF9NQVgJX19VSU5UX01B
WAorI2RlZmluZQlfX09GRl9NQVgJX19MTE9OR19NQVgKKyNkZWZpbmUJX19PRkZfTUlOCV9fTExP
TkdfTUlOCisjZGVmaW5lCV9fVVFVQURfTUFYCV9fVUxMT05HX01BWAorI2RlZmluZQlfX1FVQURf
TUFYCV9fTExPTkdfTUFYCisjZGVmaW5lCV9fUVVBRF9NSU4JX19MTE9OR19NSU4KKyNkZWZpbmUJ
X19MT05HX0JJVAkzMgorI2VuZGlmCisKKyNkZWZpbmUJX19XT1JEX0JJVAkzMgorCisvKiBNaW5p
bXVtIHNpZ25hbCBzdGFjayBzaXplLiAqLworI2RlZmluZQlfX01JTlNJR1NUS1NaCSg1MTIgKiA0
KQorCisjZW5kaWYgLyogIV9NQUNISU5FX19MSU1JVFNfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Iv
c3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvX3N0ZGludC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC94ODYvX3N0ZGludC5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYv
X3N0ZGludC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3Ny
Yy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L19zdGRpbnQuaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAw
MDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDE5MSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIw
MDEsIDIwMDIgTWlrZSBCYXJjcm9mdCA8bWlrZUBGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAo
YykgMjAwMSBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRl
ZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KKyAqIGJ5IEtsYXVzIEtsZWluLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz
ZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu
b3dsZWRnZW1lbnQ6CisgKiAgICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl
dmVsb3BlZCBieSB0aGUgTmV0QlNECisgKiAgICAgICAgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRz
IGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgVGhlIE5ldEJTRCBGb3Vu
ZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwg
SU5DLiBBTkQgQ09OVFJJQlVUT1JTCisgKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL19zdGRp
bnQuaCAzMDEwMzAgMjAxNi0wNS0zMSAwODozODoyNFogZWQgJAorICovCisKKyNpZm5kZWYgX01B
Q0hJTkVfX1NURElOVF9IXworI2RlZmluZQlfTUFDSElORV9fU1RESU5UX0hfCisKKyNpbmNsdWRl
IDxtYWNoaW5lL19saW1pdHMuaD4KKworI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZp
bmVkKF9fU1REQ19DT05TVEFOVF9NQUNST1MpCisKKyNkZWZpbmUJSU5UOF9DKGMpCQkoYykKKyNk
ZWZpbmUJSU5UMTZfQyhjKQkJKGMpCisjZGVmaW5lCUlOVDMyX0MoYykJCShjKQorCisjZGVmaW5l
CVVJTlQ4X0MoYykJCShjKQorI2RlZmluZQlVSU5UMTZfQyhjKQkJKGMpCisjZGVmaW5lCVVJTlQz
Ml9DKGMpCQkoYyAjIyBVKQorCisjaWZkZWYJX19MUDY0X18KKyNkZWZpbmUJSU5UNjRfQyhjKQkJ
KGMgIyMgTCkKKyNkZWZpbmUJVUlOVDY0X0MoYykJCShjICMjIFVMKQorI2Vsc2UKKyNkZWZpbmUJ
SU5UNjRfQyhjKQkJKGMgIyMgTEwpCisjZGVmaW5lCVVJTlQ2NF9DKGMpCQkoYyAjIyBVTEwpCisj
ZW5kaWYKKworI2RlZmluZQlJTlRNQVhfQyhjKQkJSU5UNjRfQyhjKQorI2RlZmluZQlVSU5UTUFY
X0MoYykJCVVJTlQ2NF9DKGMpCisKKyNlbmRpZiAvKiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwg
ZGVmaW5lZChfX1NURENfQ09OU1RBTlRfTUFDUk9TKSAqLworCisjaWYgIWRlZmluZWQoX19jcGx1
c3BsdXMpIHx8IGRlZmluZWQoX19TVERDX0xJTUlUX01BQ1JPUykKKworLyoKKyAqIElTTy9JRUMg
OTg5OToxOTk5CisgKiA3LjE4LjIuMSBMaW1pdHMgb2YgZXhhY3Qtd2lkdGggaW50ZWdlciB0eXBl
cworICovCisjZGVmaW5lCUlOVDhfTUlOCSgtMHg3Zi0xKQorI2RlZmluZQlJTlQxNl9NSU4JKC0w
eDdmZmYtMSkKKyNkZWZpbmUJSU5UMzJfTUlOCSgtMHg3ZmZmZmZmZi0xKQorCisjZGVmaW5lCUlO
VDhfTUFYCTB4N2YKKyNkZWZpbmUJSU5UMTZfTUFYCTB4N2ZmZgorI2RlZmluZQlJTlQzMl9NQVgJ
MHg3ZmZmZmZmZgorCisjZGVmaW5lCVVJTlQ4X01BWAkweGZmCisjZGVmaW5lCVVJTlQxNl9NQVgJ
MHhmZmZmCisjZGVmaW5lCVVJTlQzMl9NQVgJMHhmZmZmZmZmZlUKKworI2lmZGVmIF9fTFA2NF9f
CisjZGVmaW5lCUlOVDY0X01JTgkoLTB4N2ZmZmZmZmZmZmZmZmZmZi0xKQorI2RlZmluZQlJTlQ2
NF9NQVgJMHg3ZmZmZmZmZmZmZmZmZmZmCisjZGVmaW5lCVVJTlQ2NF9NQVgJMHhmZmZmZmZmZmZm
ZmZmZmZmCisjZWxzZQorI2RlZmluZQlJTlQ2NF9NSU4JKC0weDdmZmZmZmZmZmZmZmZmZmZMTC0x
KQorI2RlZmluZQlJTlQ2NF9NQVgJMHg3ZmZmZmZmZmZmZmZmZmZmTEwKKyNkZWZpbmUJVUlOVDY0
X01BWAkweGZmZmZmZmZmZmZmZmZmZmZVTEwKKyNlbmRpZgorCisvKgorICogSVNPL0lFQyA5ODk5
OjE5OTkKKyAqIDcuMTguMi4yICBMaW1pdHMgb2YgbWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVz
CisgKi8KKy8qIE1pbmltdW0gdmFsdWVzIG9mIG1pbmltdW0td2lkdGggc2lnbmVkIGludGVnZXIg
dHlwZXMuICovCisjZGVmaW5lCUlOVF9MRUFTVDhfTUlOCUlOVDhfTUlOCisjZGVmaW5lCUlOVF9M
RUFTVDE2X01JTglJTlQxNl9NSU4KKyNkZWZpbmUJSU5UX0xFQVNUMzJfTUlOCUlOVDMyX01JTgor
I2RlZmluZQlJTlRfTEVBU1Q2NF9NSU4JSU5UNjRfTUlOCisKKy8qIE1heGltdW0gdmFsdWVzIG9m
IG1pbmltdW0td2lkdGggc2lnbmVkIGludGVnZXIgdHlwZXMuICovCisjZGVmaW5lCUlOVF9MRUFT
VDhfTUFYCUlOVDhfTUFYCisjZGVmaW5lCUlOVF9MRUFTVDE2X01BWAlJTlQxNl9NQVgKKyNkZWZp
bmUJSU5UX0xFQVNUMzJfTUFYCUlOVDMyX01BWAorI2RlZmluZQlJTlRfTEVBU1Q2NF9NQVgJSU5U
NjRfTUFYCisKKy8qIE1heGltdW0gdmFsdWVzIG9mIG1pbmltdW0td2lkdGggdW5zaWduZWQgaW50
ZWdlciB0eXBlcy4gKi8KKyNkZWZpbmUJVUlOVF9MRUFTVDhfTUFYCSBVSU5UOF9NQVgKKyNkZWZp
bmUJVUlOVF9MRUFTVDE2X01BWCBVSU5UMTZfTUFYCisjZGVmaW5lCVVJTlRfTEVBU1QzMl9NQVgg
VUlOVDMyX01BWAorI2RlZmluZQlVSU5UX0xFQVNUNjRfTUFYIFVJTlQ2NF9NQVgKKworLyoKKyAq
IElTTy9JRUMgOTg5OToxOTk5CisgKiA3LjE4LjIuMyAgTGltaXRzIG9mIGZhc3Rlc3QgbWluaW11
bS13aWR0aCBpbnRlZ2VyIHR5cGVzCisgKi8KKy8qIE1pbmltdW0gdmFsdWVzIG9mIGZhc3Rlc3Qg
bWluaW11bS13aWR0aCBzaWduZWQgaW50ZWdlciB0eXBlcy4gKi8KKyNkZWZpbmUJSU5UX0ZBU1Q4
X01JTglJTlQzMl9NSU4KKyNkZWZpbmUJSU5UX0ZBU1QxNl9NSU4JSU5UMzJfTUlOCisjZGVmaW5l
CUlOVF9GQVNUMzJfTUlOCUlOVDMyX01JTgorI2RlZmluZQlJTlRfRkFTVDY0X01JTglJTlQ2NF9N
SU4KKworLyogTWF4aW11bSB2YWx1ZXMgb2YgZmFzdGVzdCBtaW5pbXVtLXdpZHRoIHNpZ25lZCBp
bnRlZ2VyIHR5cGVzLiAqLworI2RlZmluZQlJTlRfRkFTVDhfTUFYCUlOVDMyX01BWAorI2RlZmlu
ZQlJTlRfRkFTVDE2X01BWAlJTlQzMl9NQVgKKyNkZWZpbmUJSU5UX0ZBU1QzMl9NQVgJSU5UMzJf
TUFYCisjZGVmaW5lCUlOVF9GQVNUNjRfTUFYCUlOVDY0X01BWAorCisvKiBNYXhpbXVtIHZhbHVl
cyBvZiBmYXN0ZXN0IG1pbmltdW0td2lkdGggdW5zaWduZWQgaW50ZWdlciB0eXBlcy4gKi8KKyNk
ZWZpbmUJVUlOVF9GQVNUOF9NQVgJVUlOVDMyX01BWAorI2RlZmluZQlVSU5UX0ZBU1QxNl9NQVgJ
VUlOVDMyX01BWAorI2RlZmluZQlVSU5UX0ZBU1QzMl9NQVgJVUlOVDMyX01BWAorI2RlZmluZQlV
SU5UX0ZBU1Q2NF9NQVgJVUlOVDY0X01BWAorCisvKgorICogSVNPL0lFQyA5ODk5OjE5OTkKKyAq
IDcuMTguMi40ICBMaW1pdHMgb2YgaW50ZWdlciB0eXBlcyBjYXBhYmxlIG9mIGhvbGRpbmcgb2Jq
ZWN0IHBvaW50ZXJzCisgKi8KKyNpZmRlZglfX0xQNjRfXworI2RlZmluZQlJTlRQVFJfTUlOCUlO
VDY0X01JTgorI2RlZmluZQlJTlRQVFJfTUFYCUlOVDY0X01BWAorI2RlZmluZQlVSU5UUFRSX01B
WAlVSU5UNjRfTUFYCisjZWxzZQorI2RlZmluZQlJTlRQVFJfTUlOCUlOVDMyX01JTgorI2RlZmlu
ZQlJTlRQVFJfTUFYCUlOVDMyX01BWAorI2RlZmluZQlVSU5UUFRSX01BWAlVSU5UMzJfTUFYCisj
ZW5kaWYKKworLyoKKyAqIElTTy9JRUMgOTg5OToxOTk5CisgKiA3LjE4LjIuNSAgTGltaXRzIG9m
IGdyZWF0ZXN0LXdpZHRoIGludGVnZXIgdHlwZXMKKyAqLworI2RlZmluZQlJTlRNQVhfTUlOCUlO
VDY0X01JTgorI2RlZmluZQlJTlRNQVhfTUFYCUlOVDY0X01BWAorI2RlZmluZQlVSU5UTUFYX01B
WAlVSU5UNjRfTUFYCisKKy8qCisgKiBJU08vSUVDIDk4OTk6MTk5OQorICogNy4xOC4zICBMaW1p
dHMgb2Ygb3RoZXIgaW50ZWdlciB0eXBlcworICovCisjaWZkZWYJX19MUDY0X18KKy8qIExpbWl0
cyBvZiBwdHJkaWZmX3QuICovCisjZGVmaW5lCVBUUkRJRkZfTUlOCUlOVDY0X01JTgkKKyNkZWZp
bmUJUFRSRElGRl9NQVgJSU5UNjRfTUFYCisKKy8qIExpbWl0cyBvZiBzaWdfYXRvbWljX3QuICov
CisjZGVmaW5lCVNJR19BVE9NSUNfTUlOCV9fTE9OR19NSU4KKyNkZWZpbmUJU0lHX0FUT01JQ19N
QVgJX19MT05HX01BWAorCisvKiBMaW1pdCBvZiBzaXplX3QuICovCisjZGVmaW5lCVNJWkVfTUFY
CVVJTlQ2NF9NQVgKKyNlbHNlCisjZGVmaW5lCVBUUkRJRkZfTUlOCUlOVDMyX01JTgorI2RlZmlu
ZQlQVFJESUZGX01BWAlJTlQzMl9NQVgKKyNkZWZpbmUJU0lHX0FUT01JQ19NSU4JSU5UMzJfTUlO
CisjZGVmaW5lCVNJR19BVE9NSUNfTUFYCUlOVDMyX01BWAorI2RlZmluZQlTSVpFX01BWAlVSU5U
MzJfTUFYCisjZW5kaWYKKworLyogTGltaXRzIG9mIHdpbnRfdC4gKi8KKyNkZWZpbmUJV0lOVF9N
SU4JSU5UMzJfTUlOCisjZGVmaW5lCVdJTlRfTUFYCUlOVDMyX01BWAorCisjZW5kaWYgLyogIWRl
ZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQoX19TVERDX0xJTUlUX01BQ1JPUykgKi8KKwor
I2VuZGlmIC8qICFfTUFDSElORV9fU1RESU5UX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAveDg2L190eXBlcy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC94ODYvX3R5cGVzLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9fdHlwZXMu
aAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21v
ZHVsZXMvbmV0bWFwL3g4Ni9fdHlwZXMuaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCAr
MDEwMApAQCAtMCwwICsxLDE3NCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgTWlrZSBC
YXJjcm9mdCA8bWlrZUBGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5Mwor
ICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l
bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlz
cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNs
dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3Ju
aWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFt
ZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAq
ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5U
UyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
CisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4K
KyAqCisgKglGcm9tOiBAKCMpYW5zaS5oCTguMiAoQmVya2VsZXkpIDEvNC85NAorICoJRnJvbTog
QCgjKXR5cGVzLmgJOC4zIChCZXJrZWxleSkgMS81Lzk0CisgKiAkRnJlZUJTRDogcmVsZW5nLzEx
LjAvc3lzL3g4Ni9pbmNsdWRlL190eXBlcy5oIDMwMTAyOSAyMDE2LTA1LTMxIDA4OjM2OjM5WiBl
ZCAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9fVFlQRVNfSF8KKyNkZWZpbmUJX01BQ0hJTkVf
X1RZUEVTX0hfCisKKyNpZm5kZWYgX1NZU19DREVGU19IXworI2Vycm9yIHRoaXMgZmlsZSBuZWVk
cyBzeXMvY2RlZnMuaCBhcyBhIHByZXJlcXVpc2l0ZQorI2VuZGlmCisKKyNpbmNsdWRlIDxtYWNo
aW5lL19saW1pdHMuaD4KKworI2RlZmluZSBfX05PX1NUUklDVF9BTElHTk1FTlQKKworLyoKKyAq
IEJhc2ljIHR5cGVzIHVwb24gd2hpY2ggbW9zdCBvdGhlciB0eXBlcyBhcmUgYnVpbHQuCisgKi8K
K3R5cGVkZWYJc2lnbmVkIGNoYXIJCV9faW50OF90OwordHlwZWRlZgl1bnNpZ25lZCBjaGFyCQlf
X3VpbnQ4X3Q7Cit0eXBlZGVmCXNob3J0CQkJX19pbnQxNl90OwordHlwZWRlZgl1bnNpZ25lZCBz
aG9ydAkJX191aW50MTZfdDsKK3R5cGVkZWYJaW50CQkJX19pbnQzMl90OwordHlwZWRlZgl1bnNp
Z25lZCBpbnQJCV9fdWludDMyX3Q7CisjaWZkZWYJX19MUDY0X18KK3R5cGVkZWYJbG9uZwkJCV9f
aW50NjRfdDsKK3R5cGVkZWYJdW5zaWduZWQgbG9uZwkJX191aW50NjRfdDsKKyNlbHNlCisjaWZu
ZGVmIGxpbnQKK19fZXh0ZW5zaW9uX18KKyNlbmRpZgorLyogTE9OR0xPTkcgKi8KK3R5cGVkZWYJ
bG9uZyBsb25nCQlfX2ludDY0X3Q7CisjaWZuZGVmIGxpbnQKK19fZXh0ZW5zaW9uX18KKyNlbmRp
ZgorLyogTE9OR0xPTkcgKi8KK3R5cGVkZWYJdW5zaWduZWQgbG9uZyBsb25nCV9fdWludDY0X3Q7
CisjZW5kaWYKKworLyoKKyAqIFN0YW5kYXJkIHR5cGUgZGVmaW5pdGlvbnMuCisgKi8KKyNpZmRl
ZglfX0xQNjRfXwordHlwZWRlZglfX2ludDMyX3QJX19jbG9ja190OwkJLyogY2xvY2soKS4uLiAq
LwordHlwZWRlZglfX2ludDY0X3QJX19jcml0aWNhbF90OwordHlwZWRlZglkb3VibGUJCV9fZG91
YmxlX3Q7Cit0eXBlZGVmCWZsb2F0CQlfX2Zsb2F0X3Q7Cit0eXBlZGVmCV9faW50NjRfdAlfX2lu
dGZwdHJfdDsKK3R5cGVkZWYJX19pbnQ2NF90CV9faW50cHRyX3Q7CisjZWxzZQordHlwZWRlZgl1
bnNpZ25lZCBsb25nCV9fY2xvY2tfdDsKK3R5cGVkZWYJX19pbnQzMl90CV9fY3JpdGljYWxfdDsK
K3R5cGVkZWYJbG9uZyBkb3VibGUJX19kb3VibGVfdDsKK3R5cGVkZWYJbG9uZyBkb3VibGUJX19m
bG9hdF90OwordHlwZWRlZglfX2ludDMyX3QJX19pbnRmcHRyX3Q7Cit0eXBlZGVmCV9faW50MzJf
dAlfX2ludHB0cl90OworI2VuZGlmCit0eXBlZGVmCV9faW50NjRfdAlfX2ludG1heF90OwordHlw
ZWRlZglfX2ludDMyX3QJX19pbnRfZmFzdDhfdDsKK3R5cGVkZWYJX19pbnQzMl90CV9faW50X2Zh
c3QxNl90OwordHlwZWRlZglfX2ludDMyX3QJX19pbnRfZmFzdDMyX3Q7Cit0eXBlZGVmCV9faW50
NjRfdAlfX2ludF9mYXN0NjRfdDsKK3R5cGVkZWYJX19pbnQ4X3QJX19pbnRfbGVhc3Q4X3Q7Cit0
eXBlZGVmCV9faW50MTZfdAlfX2ludF9sZWFzdDE2X3Q7Cit0eXBlZGVmCV9faW50MzJfdAlfX2lu
dF9sZWFzdDMyX3Q7Cit0eXBlZGVmCV9faW50NjRfdAlfX2ludF9sZWFzdDY0X3Q7CisjaWZkZWYJ
X19MUDY0X18KK3R5cGVkZWYJX19pbnQ2NF90CV9fcHRyZGlmZl90OwkJLyogcHRyMSAtIHB0cjIg
Ki8KK3R5cGVkZWYJX19pbnQ2NF90CV9fcmVnaXN0ZXJfdDsKK3R5cGVkZWYJX19pbnQ2NF90CV9f
c2Vnc3pfdDsJCS8qIHNlZ21lbnQgc2l6ZSAoaW4gcGFnZXMpICovCit0eXBlZGVmCV9fdWludDY0
X3QJX19zaXplX3Q7CQkvKiBzaXplb2YoKSAqLwordHlwZWRlZglfX2ludDY0X3QJX19zc2l6ZV90
OwkJLyogYnl0ZSBjb3VudCBvciBlcnJvciAqLwordHlwZWRlZglfX2ludDY0X3QJX190aW1lX3Q7
CQkvKiB0aW1lKCkuLi4gKi8KK3R5cGVkZWYJX191aW50NjRfdAlfX3VpbnRmcHRyX3Q7Cit0eXBl
ZGVmCV9fdWludDY0X3QJX191aW50cHRyX3Q7CisjZWxzZQordHlwZWRlZglfX2ludDMyX3QJX19w
dHJkaWZmX3Q7Cit0eXBlZGVmCV9faW50MzJfdAlfX3JlZ2lzdGVyX3Q7Cit0eXBlZGVmCV9faW50
MzJfdAlfX3NlZ3N6X3Q7Cit0eXBlZGVmCV9fdWludDMyX3QJX19zaXplX3Q7Cit0eXBlZGVmCV9f
aW50MzJfdAlfX3NzaXplX3Q7Cit0eXBlZGVmCV9faW50MzJfdAlfX3RpbWVfdDsKK3R5cGVkZWYJ
X191aW50MzJfdAlfX3VpbnRmcHRyX3Q7Cit0eXBlZGVmCV9fdWludDMyX3QJX191aW50cHRyX3Q7
CisjZW5kaWYKK3R5cGVkZWYJX191aW50NjRfdAlfX3VpbnRtYXhfdDsKK3R5cGVkZWYJX191aW50
MzJfdAlfX3VpbnRfZmFzdDhfdDsKK3R5cGVkZWYJX191aW50MzJfdAlfX3VpbnRfZmFzdDE2X3Q7
Cit0eXBlZGVmCV9fdWludDMyX3QJX191aW50X2Zhc3QzMl90OwordHlwZWRlZglfX3VpbnQ2NF90
CV9fdWludF9mYXN0NjRfdDsKK3R5cGVkZWYJX191aW50OF90CV9fdWludF9sZWFzdDhfdDsKK3R5
cGVkZWYJX191aW50MTZfdAlfX3VpbnRfbGVhc3QxNl90OwordHlwZWRlZglfX3VpbnQzMl90CV9f
dWludF9sZWFzdDMyX3Q7Cit0eXBlZGVmCV9fdWludDY0X3QJX191aW50X2xlYXN0NjRfdDsKKyNp
ZmRlZglfX0xQNjRfXwordHlwZWRlZglfX3VpbnQ2NF90CV9fdV9yZWdpc3Rlcl90OwordHlwZWRl
ZglfX3VpbnQ2NF90CV9fdm1fb2Zmc2V0X3Q7Cit0eXBlZGVmCV9fdWludDY0X3QJX192bV9wYWRk
cl90OwordHlwZWRlZglfX3VpbnQ2NF90CV9fdm1fc2l6ZV90OworI2Vsc2UKK3R5cGVkZWYJX191
aW50MzJfdAlfX3VfcmVnaXN0ZXJfdDsKK3R5cGVkZWYJX191aW50MzJfdAlfX3ZtX29mZnNldF90
OworI2lmZGVmIFBBRQordHlwZWRlZglfX3VpbnQ2NF90CV9fdm1fcGFkZHJfdDsKKyNlbHNlCit0
eXBlZGVmCV9fdWludDMyX3QJX192bV9wYWRkcl90OworI2VuZGlmCit0eXBlZGVmCV9fdWludDMy
X3QJX192bV9zaXplX3Q7CisjZW5kaWYKK3R5cGVkZWYJX19pbnQ2NF90CV9fdm1fb29mZnNldF90
OwordHlwZWRlZglfX3VpbnQ2NF90CV9fdm1fcGluZGV4X3Q7Cit0eXBlZGVmCWludAkJX19fd2No
YXJfdDsKKworI2RlZmluZQlfX1dDSEFSX01JTglfX0lOVF9NSU4JLyogbWluIHZhbHVlIGZvciBh
IHdjaGFyX3QgKi8KKyNkZWZpbmUJX19XQ0hBUl9NQVgJX19JTlRfTUFYCS8qIG1heCB2YWx1ZSBm
b3IgYSB3Y2hhcl90ICovCisKKy8qCisgKiBVbnVzdWFsIHR5cGUgZGVmaW5pdGlvbnMuCisgKi8K
KyNpZmRlZiBfX0dOVUNMSUtFX0JVSUxUSU5fVkFSQVJHUwordHlwZWRlZglfX2J1aWx0aW5fdmFf
bGlzdAlfX3ZhX2xpc3Q7CS8qIGludGVybmFsbHkga25vd24gdG8gZ2NjICovCisjZWxzZQorI2lm
ZGVmIF9fTFA2NF9fCitzdHJ1Y3QgX19zX3ZhX2xpc3QgeworCV9fdWludDMyX3QJX3BhZDFbMl07
CS8qIGdwX29mZnNldCwgZnBfb2Zmc2V0ICovCisJX191aW50NjRfdAlfcGFkMlsyXTsJLyogb3Zl
cmZsb3dfYXJnX2FyZWEsIHJlZ19zYXZlX2FyZWEgKi8KK307Cit0eXBlZGVmCXN0cnVjdCBfX3Nf
dmFfbGlzdAlfX3ZhX2xpc3Q7CisjZWxzZQordHlwZWRlZgljaGFyICoJCQlfX3ZhX2xpc3Q7Cisj
ZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19HTlVDX1ZBX0xJU1RfQ09NUEFUSUJJTElUWSkg
JiYgIWRlZmluZWQoX19HTlVDX1ZBX0xJU1QpIFwKKyAgICAmJiAhZGVmaW5lZChfX05PX0dOVUNf
VkFfTElTVCkKKyNkZWZpbmUgX19HTlVDX1ZBX0xJU1QKK3R5cGVkZWYgX192YV9saXN0CQlfX2du
dWNfdmFfbGlzdDsJLyogY29tcGF0aWJpbGl0eSB3L0dOVSBoZWFkZXJzKi8KKyNlbmRpZgorCisj
ZW5kaWYgLyogIV9NQUNISU5FX19UWVBFU19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lz
L21vZHVsZXMvbmV0bWFwL3g4Ni9hY3BpY2FfbWFjaGRlcC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC94ODYvYWNwaWNhX21hY2hkZXAuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAveDg2L2FjcGljYV9tYWNoZGVwLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx
MDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvYWNwaWNhX21hY2hkZXAuaAky
MDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDg4IEBACisvKi0K
KyAqIENvcHlyaWdodCAoYykgMjAwMiBNaXRzdXJ1IElXQVNBS0kKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
QVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1B
R0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9hY3BpY2Ff
bWFjaGRlcC5oIDI5ODA5NCAyMDE2LTA0LTE2IDAzOjQ0OjUwWiBnamIgJAorICovCisKKy8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioKKyAqCisgKiBOYW1lOiBhY3BpY2FfbWFjaGRlcC5oIC0gYXJjaC1z
cGVjaWZpYyBkZWZpbmVzLCBldGMuCisgKiAgICAgICAkUmV2aXNpb24kCisgKgorICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworCisjaWZuZGVmIF9fQUNQSUNBX01BQ0hERVBfSF9fCisjZGVmaW5lCV9f
QUNQSUNBX01BQ0hERVBfSF9fCisKKyNpZmRlZiBfS0VSTkVMCisvKgorICogQ2FsbGluZyBjb252
ZW50aW9uczoKKyAqCisgKiBBQ1BJX1NZU1RFTV9YRkFDRSAgICAgICAgLSBJbnRlcmZhY2VzIHRv
IGhvc3QgT1MgKGhhbmRsZXJzLCB0aHJlYWRzKQorICogQUNQSV9FWFRFUk5BTF9YRkFDRSAgICAg
IC0gRXh0ZXJuYWwgQUNQSSBpbnRlcmZhY2VzIAorICogQUNQSV9JTlRFUk5BTF9YRkFDRSAgICAg
IC0gSW50ZXJuYWwgQUNQSSBpbnRlcmZhY2VzCisgKiBBQ1BJX0lOVEVSTkFMX1ZBUl9YRkFDRSAg
LSBJbnRlcm5hbCB2YXJpYWJsZS1wYXJhbWV0ZXIgbGlzdCBpbnRlcmZhY2VzCisgKi8KKyNkZWZp
bmUJQUNQSV9TWVNURU1fWEZBQ0UKKyNkZWZpbmUJQUNQSV9FWFRFUk5BTF9YRkFDRQorI2RlZmlu
ZQlBQ1BJX0lOVEVSTkFMX1hGQUNFCisjZGVmaW5lCUFDUElfSU5URVJOQUxfVkFSX1hGQUNFCisK
Ky8qIEFzbSBtYWNyb3MgKi8KKworI2RlZmluZQlBQ1BJX0FTTV9NQUNST1MKKyNkZWZpbmUJQlJF
QUtQT0lOVDMKKyNkZWZpbmUJQUNQSV9ESVNBQkxFX0lSUVMoKSBkaXNhYmxlX2ludHIoKQorI2Rl
ZmluZQlBQ1BJX0VOQUJMRV9JUlFTKCkgIGVuYWJsZV9pbnRyKCkKKworI2RlZmluZQlBQ1BJX0ZM
VVNIX0NQVV9DQUNIRSgpCXdiaW52ZCgpCisKKy8qIFNlY3Rpb24gNS4yLjEwLjE6IGdsb2JhbCBs
b2NrIGFjcXVpcmUvcmVsZWFzZSBmdW5jdGlvbnMgKi8KK2ludAlhY3BpX2FjcXVpcmVfZ2xvYmFs
X2xvY2sodm9sYXRpbGUgdWludDMyX3QgKik7CitpbnQJYWNwaV9yZWxlYXNlX2dsb2JhbF9sb2Nr
KHZvbGF0aWxlIHVpbnQzMl90ICopOworI2RlZmluZQlBQ1BJX0FDUVVJUkVfR0xPQkFMX0xPQ0so
R0xwdHIsIEFjcSkJZG8gewkJCVwKKwkoQWNxKSA9IGFjcGlfYWNxdWlyZV9nbG9iYWxfbG9jaygm
KChHTHB0ciktPkdsb2JhbExvY2spKTsJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUJQUNQSV9SRUxF
QVNFX0dMT0JBTF9MT0NLKEdMcHRyLCBBY3EpCWRvIHsJCQlcCisJKEFjcSkgPSBhY3BpX3JlbGVh
c2VfZ2xvYmFsX2xvY2soJigoR0xwdHIpLT5HbG9iYWxMb2NrKSk7CVwKK30gd2hpbGUgKDApCisg
CitlbnVtIGludHJfdHJpZ2dlcjsKK2VudW0gaW50cl9wb2xhcml0eTsKKwordm9pZAlhY3BpX1Nl
dERlZmF1bHRJbnRyTW9kZWwoaW50IG1vZGVsKTsKK3ZvaWQJYWNwaV9jcHVfYzEodm9pZCk7Cit2
b2lkCWFjcGlfY3B1X2lkbGVfbXdhaXQodWludDMyX3QgbXdhaXRfaGludCk7Cit2b2lkCSphY3Bp
X21hcF90YWJsZSh2bV9wYWRkcl90IHBhLCBjb25zdCBjaGFyICpzaWcpOwordm9pZAlhY3BpX3Vu
bWFwX3RhYmxlKHZvaWQgKnRhYmxlKTsKK3ZtX3BhZGRyX3QgYWNwaV9maW5kX3RhYmxlKGNvbnN0
IGNoYXIgKnNpZyk7Cit2b2lkCW1hZHRfcGFyc2VfaW50ZXJydXB0X3ZhbHVlcyh2b2lkICplbnRy
eSwKKwkgICAgZW51bSBpbnRyX3RyaWdnZXIgKnRyaWcsIGVudW0gaW50cl9wb2xhcml0eSAqcG9s
KTsKKworZXh0ZXJuIGludCBtYWR0X2ZvdW5kX3NjaV9vdmVycmlkZTsKKworI2VuZGlmIC8qIF9L
RVJORUwgKi8KKworI2VuZGlmIC8qIF9fQUNQSUNBX01BQ0hERVBfSF9fICovCmRpZmYgLXUgLXIg
LU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2FwaWNyZWcuaCAvdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAveDg2L2FwaWNyZWcuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAveDg2L2FwaWNyZWcuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysg
L3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9hcGljcmVnLmgJMjAxNi0wOS0yOSAwMDoy
NDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw1MTYgQEAKKy8qLQorICogQ29weXJpZ2h0
IChjKSAxOTk2LCBieSBQZXRlciBXZW1tIGFuZCBTdGV2ZSBQYXNzZQorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBUaGUgbmFtZSBvZiB0aGUgZGV2ZWxvcGVyIG1h
eSBOT1QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2
ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBB
TkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV
VEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICog
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAq
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoK
KyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvYXBpY3JlZy5oIDI5NzM0
NyAyMDE2LTAzLTI4IDA5OjQzOjQwWiBraWIgJAorICovCisKKyNpZm5kZWYgX1g4Nl9BUElDUkVH
X0hfCisjZGVmaW5lIF9YODZfQVBJQ1JFR19IXworCisvKgorICogTG9jYWwgJiYgSS9PIEFQSUMg
ZGVmaW5pdGlvbnMuCisgKi8KKworLyoKKyAqIFBlbnRpdW0gUDU0QysgQnVpbHQtaW4gQVBJQwor
ICogKEFkdmFuY2VkIHByb2dyYW1tYWJsZSBJbnRlcnJ1cHQgQ29udHJvbGxlcikKKyAqIAorICog
QmFzZSBBZGRyZXNzIG9mIEJ1aWx0LWluIEFQSUMgaW4gbWVtb3J5IGxvY2F0aW9uCisgKiBpcyAw
eGZlZTAwMDAwLgorICogCisgKiBNYXAgb2YgQVBJQyBSZWdpc3RlcnM6CisgKiAKKyAqIE9mZnNl
dCAoaGV4KSAgICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgIFJlYWQvV3JpdGUgc3Rh
dGUKKyAqIDAwMCAgICAgICAgICAgICBSZXNlcnZlZAorICogMDEwICAgICAgICAgICAgIFJlc2Vy
dmVkCisgKiAwMjAgSUQgICAgICAgICAgTG9jYWwgQVBJQyBJRCAgICAgICAgICAgICAgICAgICBS
L1cKKyAqIDAzMCBWRVIgICAgICAgICBMb2NhbCBBUElDIFZlcnNpb24gICAgICAgICAgICAgIFIK
KyAqIDA0MCAgICAgICAgICAgICBSZXNlcnZlZAorICogMDUwICAgICAgICAgICAgIFJlc2VydmVk
CisgKiAwNjAgICAgICAgICAgICAgUmVzZXJ2ZWQKKyAqIDA3MCAgICAgICAgICAgICBSZXNlcnZl
ZAorICogMDgwICAgICAgICAgICAgIFRhc2sgUHJpb3JpdHkgUmVnaXN0ZXIgICAgICAgICAgUi9X
CisgKiAwOTAgICAgICAgICAgICAgQXJiaXRyYXRpb24gUHJpb3JpdHkgUmVnaXN0ZXIgICBSCisg
KiAwQTAgICAgICAgICAgICAgUHJvY2Vzc29yIFByaW9yaXR5IFJlZ2lzdGVyICAgICBSCisgKiAw
QjAgICAgICAgICAgICAgRU9JIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICBXCisgKiAwQzAg
UlJSICAgICAgICAgUmVtb3RlIHJlYWQgICAgICAgICAgICAgICAgICAgICBSCisgKiAwRDAgICAg
ICAgICAgICAgTG9naWNhbCBEZXN0aW5hdGlvbiAgICAgICAgICAgICBSL1cKKyAqIDBFMCAgICAg
ICAgICAgICBEZXN0aW5hdGlvbiBGb3JtYXQgUmVnaXN0ZXIgICAgIDAuLjI3IFI7ICAyOC4uMzEg
Ui9XCisgKiAwRjAgU1ZSICAgICAgICAgU3B1cmlvdXMgSW50ZXJydXB0IFZlY3RvciBSZWcuICAw
Li4zICBSOyAgNC4uOSAgIFIvVworICogMTAwICAgICAgICAgICAgIElTUiAgMDAwLTAzMSAgICAg
ICAgICAgICAgICAgICAgUgorICogMTEwICAgICAgICAgICAgIElTUiAgMDMyLTA2MyAgICAgICAg
ICAgICAgICAgICAgUgorICogMTIwICAgICAgICAgICAgIElTUiAgMDY0LTA5NSAgICAgICAgICAg
ICAgICAgICAgUgorICogMTMwICAgICAgICAgICAgIElTUiAgMDk1LTEyOCAgICAgICAgICAgICAg
ICAgICAgUgorICogMTQwICAgICAgICAgICAgIElTUiAgMTI4LTE1OSAgICAgICAgICAgICAgICAg
ICAgUgorICogMTUwICAgICAgICAgICAgIElTUiAgMTYwLTE5MSAgICAgICAgICAgICAgICAgICAg
UgorICogMTYwICAgICAgICAgICAgIElTUiAgMTkyLTIyMyAgICAgICAgICAgICAgICAgICAgUgor
ICogMTcwICAgICAgICAgICAgIElTUiAgMjI0LTI1NSAgICAgICAgICAgICAgICAgICAgUgorICog
MTgwICAgICAgICAgICAgIFRNUiAgMDAwLTAzMSAgICAgICAgICAgICAgICAgICAgUgorICogMTkw
ICAgICAgICAgICAgIFRNUiAgMDMyLTA2MyAgICAgICAgICAgICAgICAgICAgUgorICogMUEwICAg
ICAgICAgICAgIFRNUiAgMDY0LTA5NSAgICAgICAgICAgICAgICAgICAgUgorICogMUIwICAgICAg
ICAgICAgIFRNUiAgMDk1LTEyOCAgICAgICAgICAgICAgICAgICAgUgorICogMUMwICAgICAgICAg
ICAgIFRNUiAgMTI4LTE1OSAgICAgICAgICAgICAgICAgICAgUgorICogMUQwICAgICAgICAgICAg
IFRNUiAgMTYwLTE5MSAgICAgICAgICAgICAgICAgICAgUgorICogMUUwICAgICAgICAgICAgIFRN
UiAgMTkyLTIyMyAgICAgICAgICAgICAgICAgICAgUgorICogMUYwICAgICAgICAgICAgIFRNUiAg
MjI0LTI1NSAgICAgICAgICAgICAgICAgICAgUgorICogMjAwICAgICAgICAgICAgIElSUiAgMDAw
LTAzMSAgICAgICAgICAgICAgICAgICAgUgorICogMjEwICAgICAgICAgICAgIElSUiAgMDMyLTA2
MyAgICAgICAgICAgICAgICAgICAgUgorICogMjIwICAgICAgICAgICAgIElSUiAgMDY0LTA5NSAg
ICAgICAgICAgICAgICAgICAgUgorICogMjMwICAgICAgICAgICAgIElSUiAgMDk1LTEyOCAgICAg
ICAgICAgICAgICAgICAgUgorICogMjQwICAgICAgICAgICAgIElSUiAgMTI4LTE1OSAgICAgICAg
ICAgICAgICAgICAgUgorICogMjUwICAgICAgICAgICAgIElSUiAgMTYwLTE5MSAgICAgICAgICAg
ICAgICAgICAgUgorICogMjYwICAgICAgICAgICAgIElSUiAgMTkyLTIyMyAgICAgICAgICAgICAg
ICAgICAgUgorICogMjcwICAgICAgICAgICAgIElSUiAgMjI0LTI1NSAgICAgICAgICAgICAgICAg
ICAgUgorICogMjgwICAgICAgICAgICAgIEVycm9yIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAg
UgorICogMjkwICAgICAgICAgICAgIFJlc2VydmVkCisgKiAyQTAgICAgICAgICAgICAgUmVzZXJ2
ZWQKKyAqIDJCMCAgICAgICAgICAgICBSZXNlcnZlZAorICogMkMwICAgICAgICAgICAgIFJlc2Vy
dmVkCisgKiAyRDAgICAgICAgICAgICAgUmVzZXJ2ZWQKKyAqIDJFMCAgICAgICAgICAgICBSZXNl
cnZlZAorICogMkYwICAgICAgICAgICAgIExvY2FsIFZlY3RvciBUYWJsZSAoQ01DSSkgICAgICAg
Ui9XCisgKiAzMDAgSUNSX0xPVyAgICAgSW50ZXJydXB0IENvbW1hbmQgUmVnLiAoMC0zMSkgICBS
L1cKKyAqIDMxMCBJQ1JfSEkgICAgICBJbnRlcnJ1cHQgQ29tbWFuZCBSZWcuICgzMi02MykgIFIv
VworICogMzIwICAgICAgICAgICAgIExvY2FsIFZlY3RvciBUYWJsZSAoVGltZXIpICAgICAgUi9X
CisgKiAzMzAgICAgICAgICAgICAgTG9jYWwgVmVjdG9yIFRhYmxlIChUaGVybWFsKSAgICBSL1cg
KFBJVispCisgKiAzNDAgICAgICAgICAgICAgTG9jYWwgVmVjdG9yIFRhYmxlIChQZXJmb3JtYW5j
ZSkgUi9XIChQNispCisgKiAzNTAgTFZUMSAgICAgICAgTG9jYWwgVmVjdG9yIFRhYmxlIChMSU5U
MCkgICAgICBSL1cKKyAqIDM2MCBMVlQyICAgICAgICBMb2NhbCBWZWN0b3IgVGFibGUgKExJTlQx
KSAgICAgIFIvVworICogMzcwIExWVDMgICAgICAgIExvY2FsIFZlY3RvciBUYWJsZSAoRVJST1Ip
ICAgICAgUi9XCisgKiAzODAgICAgICAgICAgICAgSW5pdGlhbCBDb3VudCBSZWcuIGZvciBUaW1l
ciAgICBSL1cKKyAqIDM5MCAgICAgICAgICAgICBDdXJyZW50IENvdW50IG9mIFRpbWVyICAgICAg
ICAgIFIKKyAqIDNBMCAgICAgICAgICAgICBSZXNlcnZlZAorICogM0IwICAgICAgICAgICAgIFJl
c2VydmVkCisgKiAzQzAgICAgICAgICAgICAgUmVzZXJ2ZWQKKyAqIDNEMCAgICAgICAgICAgICBS
ZXNlcnZlZAorICogM0UwICAgICAgICAgICAgIFRpbWVyIERpdmlkZSBDb25maWd1cmF0aW9uIFJl
Zy4gUi9XCisgKiAzRjAgICAgICAgICAgICAgUmVzZXJ2ZWQKKyAqLworCisKKy8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioKKyAqIGdsb2JhbCBkZWZpbmVzLCBldGMuCisgKi8KKworCisvKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCisgKiBMT0NBTCBBUElDIHN0cnVjdHVyZQorICovCisKKyNpZm5kZWYgTE9D
T1JFCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNkZWZpbmUgUEFEMwlpbnQgOiAzMjsgaW50
IDogMzI7IGludCA6IDMyCisjZGVmaW5lIFBBRDQJaW50IDogMzI7IGludCA6IDMyOyBpbnQgOiAz
MjsgaW50IDogMzIKKworc3RydWN0IExBUElDIHsKKwkvKiByZXNlcnZlZCAqLwkJUEFENDsKKwkv
KiByZXNlcnZlZCAqLwkJUEFENDsKKwl1X2ludDMyX3QgaWQ7CQlQQUQzOworCXVfaW50MzJfdCB2
ZXJzaW9uOwlQQUQzOworCS8qIHJlc2VydmVkICovCQlQQUQ0OworCS8qIHJlc2VydmVkICovCQlQ
QUQ0OworCS8qIHJlc2VydmVkICovCQlQQUQ0OworCS8qIHJlc2VydmVkICovCQlQQUQ0OworCXVf
aW50MzJfdCB0cHI7CQlQQUQzOworCXVfaW50MzJfdCBhcHI7CQlQQUQzOworCXVfaW50MzJfdCBw
cHI7CQlQQUQzOworCXVfaW50MzJfdCBlb2k7CQlQQUQzOworCS8qIHJlc2VydmVkICovCQlQQUQ0
OworCXVfaW50MzJfdCBsZHI7CQlQQUQzOworCXVfaW50MzJfdCBkZnI7CQlQQUQzOworCXVfaW50
MzJfdCBzdnI7CQlQQUQzOworCXVfaW50MzJfdCBpc3IwOwkJUEFEMzsKKwl1X2ludDMyX3QgaXNy
MTsJCVBBRDM7CisJdV9pbnQzMl90IGlzcjI7CQlQQUQzOworCXVfaW50MzJfdCBpc3IzOwkJUEFE
MzsKKwl1X2ludDMyX3QgaXNyNDsJCVBBRDM7CisJdV9pbnQzMl90IGlzcjU7CQlQQUQzOworCXVf
aW50MzJfdCBpc3I2OwkJUEFEMzsKKwl1X2ludDMyX3QgaXNyNzsJCVBBRDM7CisJdV9pbnQzMl90
IHRtcjA7CQlQQUQzOworCXVfaW50MzJfdCB0bXIxOwkJUEFEMzsKKwl1X2ludDMyX3QgdG1yMjsJ
CVBBRDM7CisJdV9pbnQzMl90IHRtcjM7CQlQQUQzOworCXVfaW50MzJfdCB0bXI0OwkJUEFEMzsK
Kwl1X2ludDMyX3QgdG1yNTsJCVBBRDM7CisJdV9pbnQzMl90IHRtcjY7CQlQQUQzOworCXVfaW50
MzJfdCB0bXI3OwkJUEFEMzsKKwl1X2ludDMyX3QgaXJyMDsJCVBBRDM7CisJdV9pbnQzMl90IGly
cjE7CQlQQUQzOworCXVfaW50MzJfdCBpcnIyOwkJUEFEMzsKKwl1X2ludDMyX3QgaXJyMzsJCVBB
RDM7CisJdV9pbnQzMl90IGlycjQ7CQlQQUQzOworCXVfaW50MzJfdCBpcnI1OwkJUEFEMzsKKwl1
X2ludDMyX3QgaXJyNjsJCVBBRDM7CisJdV9pbnQzMl90IGlycjc7CQlQQUQzOworCXVfaW50MzJf
dCBlc3I7CQlQQUQzOworCS8qIHJlc2VydmVkICovCQlQQUQ0OworCS8qIHJlc2VydmVkICovCQlQ
QUQ0OworCS8qIHJlc2VydmVkICovCQlQQUQ0OworCS8qIHJlc2VydmVkICovCQlQQUQ0OworCS8q
IHJlc2VydmVkICovCQlQQUQ0OworCS8qIHJlc2VydmVkICovCQlQQUQ0OworCXVfaW50MzJfdCBs
dnRfY21jaTsJUEFEMzsKKwl1X2ludDMyX3QgaWNyX2xvOwlQQUQzOworCXVfaW50MzJfdCBpY3Jf
aGk7CVBBRDM7CisJdV9pbnQzMl90IGx2dF90aW1lcjsJUEFEMzsKKwl1X2ludDMyX3QgbHZ0X3Ro
ZXJtYWw7CVBBRDM7CisJdV9pbnQzMl90IGx2dF9wY2ludDsJUEFEMzsKKwl1X2ludDMyX3QgbHZ0
X2xpbnQwOwlQQUQzOworCXVfaW50MzJfdCBsdnRfbGludDE7CVBBRDM7CisJdV9pbnQzMl90IGx2
dF9lcnJvcjsJUEFEMzsKKwl1X2ludDMyX3QgaWNyX3RpbWVyOwlQQUQzOworCXVfaW50MzJfdCBj
Y3JfdGltZXI7CVBBRDM7CisJLyogcmVzZXJ2ZWQgKi8JCVBBRDQ7CisJLyogcmVzZXJ2ZWQgKi8J
CVBBRDQ7CisJLyogcmVzZXJ2ZWQgKi8JCVBBRDQ7CisJLyogcmVzZXJ2ZWQgKi8JCVBBRDQ7CisJ
dV9pbnQzMl90IGRjcl90aW1lcjsJUEFEMzsKKwkvKiByZXNlcnZlZCAqLwkJUEFENDsKK307CisK
K3R5cGVkZWYgc3RydWN0IExBUElDIGxhcGljX3Q7CisKK2VudW0gTEFQSUNfUkVHSVNURVJTIHsK
KwlMQVBJQ19JRAk9IDB4MiwKKwlMQVBJQ19WRVJTSU9OCT0gMHgzLAorCUxBUElDX1RQUgk9IDB4
OCwKKwlMQVBJQ19BUFIJPSAweDksCisJTEFQSUNfUFBSCT0gMHhhLAorCUxBUElDX0VPSQk9IDB4
YiwKKwlMQVBJQ19MRFIJPSAweGQsCisJTEFQSUNfREZSCT0gMHhlLCAvKiBOb3QgaW4geDJBUElD
ICovCisJTEFQSUNfU1ZSCT0gMHhmLAorCUxBUElDX0lTUjAJPSAweDEwLAorCUxBUElDX0lTUjEJ
PSAweDExLAorCUxBUElDX0lTUjIJPSAweDEyLAorCUxBUElDX0lTUjMJPSAweDEzLAorCUxBUElD
X0lTUjQJPSAweDE0LAorCUxBUElDX0lTUjUJPSAweDE1LAorCUxBUElDX0lTUjYJPSAweDE2LAor
CUxBUElDX0lTUjcJPSAweDE3LAorCUxBUElDX1RNUjAJPSAweDE4LAorCUxBUElDX1RNUjEJPSAw
eDE5LAorCUxBUElDX1RNUjIJPSAweDFhLAorCUxBUElDX1RNUjMJPSAweDFiLAorCUxBUElDX1RN
UjQJPSAweDFjLAorCUxBUElDX1RNUjUJPSAweDFkLAorCUxBUElDX1RNUjYJPSAweDFlLAorCUxB
UElDX1RNUjcJPSAweDFmLAorCUxBUElDX0lSUjAJPSAweDIwLAorCUxBUElDX0lSUjEJPSAweDIx
LAorCUxBUElDX0lSUjIJPSAweDIyLAorCUxBUElDX0lSUjMJPSAweDIzLAorCUxBUElDX0lSUjQJ
PSAweDI0LAorCUxBUElDX0lSUjUJPSAweDI1LAorCUxBUElDX0lSUjYJPSAweDI2LAorCUxBUElD
X0lSUjcJPSAweDI3LAorCUxBUElDX0VTUgk9IDB4MjgsCisJTEFQSUNfTFZUX0NNQ0kJPSAweDJm
LAorCUxBUElDX0lDUl9MTwk9IDB4MzAsCisJTEFQSUNfSUNSX0hJCT0gMHgzMSwgLyogTm90IGlu
IHgyQVBJQyAqLworCUxBUElDX0xWVF9USU1FUgk9IDB4MzIsCisJTEFQSUNfTFZUX1RIRVJNQUwg
PSAweDMzLAorCUxBUElDX0xWVF9QQ0lOVAk9IDB4MzQsCisJTEFQSUNfTFZUX0xJTlQwCT0gMHgz
NSwKKwlMQVBJQ19MVlRfTElOVDEJPSAweDM2LAorCUxBUElDX0xWVF9FUlJPUgk9IDB4MzcsCisJ
TEFQSUNfSUNSX1RJTUVSCT0gMHgzOCwKKwlMQVBJQ19DQ1JfVElNRVIJPSAweDM5LAorCUxBUElD
X0RDUl9USU1FUgk9IDB4M2UsCisJTEFQSUNfU0VMRl9JUEkJPSAweDNmLCAvKiBPbmx5IGluIHgy
QVBJQyAqLworfTsKKworLyoKKyAqIFRoZSBMQVBJQ19TRUxGX0lQSSByZWdpc3RlciBvbmx5IGV4
aXN0cyBpbiB4MkFQSUMgbW9kZS4gIFRoZQorICogZm9ybXVsYSBiZWxvdyBpcyBhcHBsaWNhYmxl
IG9ubHkgdG8gcmVzZXJ2ZSB0aGUgbWVtb3J5IHJlZ2lvbiwKKyAqIGkuZS4gZm9yIHhBUElDIG1v
ZGUsIHdoZXJlIExBUElDX1NFTEZfSVBJIGZpbmVseSBzZXJ2ZXMgYXMgdGhlCisgKiBhZGRyZXNz
IHBhc3QgZW5kIG9mIHRoZSByZWdpb24uCisgKi8KKyNkZWZpbmUJTEFQSUNfTUVNX1JFR0lPTiAo
TEFQSUNfU0VMRl9JUEkgKiAweDEwKQorCisjZGVmaW5lCUxBUElDX01FTV9NVUwJMHgxMAorCisv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCisgKiBJL08gQVBJQyBzdHJ1Y3R1cmUKKyAqLworCitzdHJ1
Y3QgSU9BUElDIHsKKwl1X2ludDMyX3QgaW9yZWdzZWw7CVBBRDM7CisJdV9pbnQzMl90IGlvd2lu
OwlQQUQzOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgSU9BUElDIGlvYXBpY190OworCisjdW5kZWYg
UEFENAorI3VuZGVmIFBBRDMKKworI2VuZGlmICAvKiAhTE9DT1JFICovCisKKworLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKgorICogdmFyaW91cyBjb2RlICdsb2dpY2FsJyB2YWx1ZXMKKyAqLworCisv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCisgKiBMT0NBTCBBUElDIGRlZmluZXMKKyAqLworCisvKiBk
ZWZhdWx0IHBoeXNpY2FsIGxvY2F0aW9ucyBvZiBMT0NBTCAoQ1BVKSBBUElDcyAqLworI2RlZmlu
ZSBERUZBVUxUX0FQSUNfQkFTRQkweGZlZTAwMDAwCisKKy8qIGNvbnN0YW50cyByZWxhdGluZyB0
byBBUElDIElEIHJlZ2lzdGVycyAqLworI2RlZmluZSBBUElDX0lEX01BU0sJCTB4ZmYwMDAwMDAK
KyNkZWZpbmUJQVBJQ19JRF9TSElGVAkJMjQKKyNkZWZpbmUJQVBJQ19JRF9DTFVTVEVSCQkweGYw
CisjZGVmaW5lCUFQSUNfSURfQ0xVU1RFUl9JRAkweDBmCisjZGVmaW5lCUFQSUNfTUFYX0NMVVNU
RVIJMHhlCisjZGVmaW5lCUFQSUNfTUFYX0lOVFJBQ0xVU1RFUl9JRCAzCisjZGVmaW5lCUFQSUNf
SURfQ0xVU1RFUl9TSElGVAk0CisKKy8qIGZpZWxkcyBpbiBWRVIgKi8KKyNkZWZpbmUgQVBJQ19W
RVJfVkVSU0lPTgkweDAwMDAwMGZmCisjZGVmaW5lIEFQSUNfVkVSX01BWExWVAkJMHgwMGZmMDAw
MAorI2RlZmluZSBNQVhMVlRTSElGVAkJMTYKKyNkZWZpbmUgQVBJQ19WRVJfRU9JX1NVUFBSRVNT
SU9OIDB4MDEwMDAwMDAKKworLyogZmllbGRzIGluIExEUiAqLworI2RlZmluZQlBUElDX0xEUl9S
RVNFUlZFRAkweDAwZmZmZmZmCisKKy8qIGZpZWxkcyBpbiBERlIgKi8KKyNkZWZpbmUJQVBJQ19E
RlJfUkVTRVJWRUQJMHgwZmZmZmZmZgorI2RlZmluZQlBUElDX0RGUl9NT0RFTF9NQVNLCTB4ZjAw
MDAwMDAKKyNkZWZpbmUJQVBJQ19ERlJfTU9ERUxfRkxBVAkweGYwMDAwMDAwCisjZGVmaW5lCUFQ
SUNfREZSX01PREVMX0NMVVNURVIJMHgwMDAwMDAwMAorCisvKiBmaWVsZHMgaW4gU1ZSICovCisj
ZGVmaW5lIEFQSUNfU1ZSX1ZFQ1RPUgkJMHgwMDAwMDBmZgorI2RlZmluZSBBUElDX1NWUl9WRUNf
UFJPRwkweDAwMDAwMGYwCisjZGVmaW5lIEFQSUNfU1ZSX1ZFQ19GSVgJMHgwMDAwMDAwZgorI2Rl
ZmluZSBBUElDX1NWUl9FTkFCTEUJCTB4MDAwMDAxMDAKKyMgZGVmaW5lIEFQSUNfU1ZSX1NXRElT
CQkweDAwMDAwMDAwCisjIGRlZmluZSBBUElDX1NWUl9TV0VOCQkweDAwMDAwMTAwCisjZGVmaW5l
IEFQSUNfU1ZSX0ZPQ1VTCQkweDAwMDAwMjAwCisjIGRlZmluZSBBUElDX1NWUl9GRU4JCTB4MDAw
MDAwMDAKKyMgZGVmaW5lIEFQSUNfU1ZSX0ZESVMJCTB4MDAwMDAyMDAKKyNkZWZpbmUgQVBJQ19T
VlJfRU9JX1NVUFBSRVNTSU9OIDB4MDAwMDEwMDAKKworLyogZmllbGRzIGluIFRQUiAqLworI2Rl
ZmluZSBBUElDX1RQUl9QUklPCQkweDAwMDAwMGZmCisjIGRlZmluZSBBUElDX1RQUl9JTlQJCTB4
MDAwMDAwZjAKKyMgZGVmaW5lIEFQSUNfVFBSX1NVQgkJMHgwMDAwMDAwZgorCisvKiBmaWVsZHMg
aW4gRVNSICovCisjZGVmaW5lCUFQSUNfRVNSX1NFTkRfQ1NfRVJST1IJCTB4MDAwMDAwMDEKKyNk
ZWZpbmUJQVBJQ19FU1JfUkVDRUlWRV9DU19FUlJPUgkweDAwMDAwMDAyCisjZGVmaW5lCUFQSUNf
RVNSX1NFTkRfQUNDRVBUCQkweDAwMDAwMDA0CisjZGVmaW5lCUFQSUNfRVNSX1JFQ0VJVkVfQUND
RVBUCQkweDAwMDAwMDA4CisjZGVmaW5lCUFQSUNfRVNSX1NFTkRfSUxMRUdBTF9WRUNUT1IJMHgw
MDAwMDAyMAorI2RlZmluZQlBUElDX0VTUl9SRUNFSVZFX0lMTEVHQUxfVkVDVE9SCTB4MDAwMDAw
NDAKKyNkZWZpbmUJQVBJQ19FU1JfSUxMRUdBTF9SRUdJU1RFUgkweDAwMDAwMDgwCisKKy8qIGZp
ZWxkcyBpbiBJQ1JfTE9XICovCisjZGVmaW5lIEFQSUNfVkVDVE9SX01BU0sJMHgwMDAwMDBmZgor
CisjZGVmaW5lIEFQSUNfREVMTU9ERV9NQVNLCTB4MDAwMDA3MDAKKyMgZGVmaW5lIEFQSUNfREVM
TU9ERV9GSVhFRAkweDAwMDAwMDAwCisjIGRlZmluZSBBUElDX0RFTE1PREVfTE9XUFJJTwkweDAw
MDAwMTAwCisjIGRlZmluZSBBUElDX0RFTE1PREVfU01JCTB4MDAwMDAyMDAKKyMgZGVmaW5lIEFQ
SUNfREVMTU9ERV9SUgkweDAwMDAwMzAwCisjIGRlZmluZSBBUElDX0RFTE1PREVfTk1JCTB4MDAw
MDA0MDAKKyMgZGVmaW5lIEFQSUNfREVMTU9ERV9JTklUCTB4MDAwMDA1MDAKKyMgZGVmaW5lIEFQ
SUNfREVMTU9ERV9TVEFSVFVQCTB4MDAwMDA2MDAKKyMgZGVmaW5lIEFQSUNfREVMTU9ERV9SRVNW
CTB4MDAwMDA3MDAKKworI2RlZmluZSBBUElDX0RFU1RNT0RFX01BU0sJMHgwMDAwMDgwMAorIyBk
ZWZpbmUgQVBJQ19ERVNUTU9ERV9QSFkJMHgwMDAwMDAwMAorIyBkZWZpbmUgQVBJQ19ERVNUTU9E
RV9MT0cJMHgwMDAwMDgwMAorCisjZGVmaW5lIEFQSUNfREVMU1RBVF9NQVNLCTB4MDAwMDEwMDAK
KyMgZGVmaW5lIEFQSUNfREVMU1RBVF9JRExFCTB4MDAwMDAwMDAKKyMgZGVmaW5lIEFQSUNfREVM
U1RBVF9QRU5ECTB4MDAwMDEwMDAKKworI2RlZmluZSBBUElDX1JFU1YxX01BU0sJCTB4MDAwMDIw
MDAKKworI2RlZmluZSBBUElDX0xFVkVMX01BU0sJCTB4MDAwMDQwMDAKKyMgZGVmaW5lIEFQSUNf
TEVWRUxfREVBU1NFUlQJMHgwMDAwMDAwMAorIyBkZWZpbmUgQVBJQ19MRVZFTF9BU1NFUlQJMHgw
MDAwNDAwMAorCisjZGVmaW5lIEFQSUNfVFJJR01PRF9NQVNLCTB4MDAwMDgwMDAKKyMgZGVmaW5l
IEFQSUNfVFJJR01PRF9FREdFCTB4MDAwMDAwMDAKKyMgZGVmaW5lIEFQSUNfVFJJR01PRF9MRVZF
TAkweDAwMDA4MDAwCisKKyNkZWZpbmUgQVBJQ19SUlNUQVRfTUFTSwkweDAwMDMwMDAwCisjIGRl
ZmluZSBBUElDX1JSU1RBVF9JTlZBTElECTB4MDAwMDAwMDAKKyMgZGVmaW5lIEFQSUNfUlJTVEFU
X0lOUFJPRwkweDAwMDEwMDAwCisjIGRlZmluZSBBUElDX1JSU1RBVF9WQUxJRAkweDAwMDIwMDAw
CisjIGRlZmluZSBBUElDX1JSU1RBVF9SRVNWCTB4MDAwMzAwMDAKKworI2RlZmluZSBBUElDX0RF
U1RfTUFTSwkJMHgwMDBjMDAwMAorIyBkZWZpbmUgQVBJQ19ERVNUX0RFU1RGTEQJMHgwMDAwMDAw
MAorIyBkZWZpbmUgQVBJQ19ERVNUX1NFTEYJCTB4MDAwNDAwMDAKKyMgZGVmaW5lIEFQSUNfREVT
VF9BTExJU0VMRgkweDAwMDgwMDAwCisjIGRlZmluZSBBUElDX0RFU1RfQUxMRVNFTEYJMHgwMDBj
MDAwMAorCisjZGVmaW5lIEFQSUNfUkVTVjJfTUFTSwkJMHhmZmYwMDAwMAorCisjZGVmaW5lCUFQ
SUNfSUNSTE9fUkVTVl9NQVNLCShBUElDX1JFU1YxX01BU0sgfCBBUElDX1JFU1YyX01BU0spCisK
Ky8qIGZpZWxkcyBpbiBMVlQxLzIgKi8KKyNkZWZpbmUgQVBJQ19MVlRfVkVDVE9SCQkweDAwMDAw
MGZmCisjZGVmaW5lIEFQSUNfTFZUX0RNCQkweDAwMDAwNzAwCisjIGRlZmluZSBBUElDX0xWVF9E
TV9GSVhFRAkweDAwMDAwMDAwCisjIGRlZmluZSBBUElDX0xWVF9ETV9TTUkJMHgwMDAwMDIwMAor
IyBkZWZpbmUgQVBJQ19MVlRfRE1fTk1JCTB4MDAwMDA0MDAKKyMgZGVmaW5lIEFQSUNfTFZUX0RN
X0lOSVQJMHgwMDAwMDUwMAorIyBkZWZpbmUgQVBJQ19MVlRfRE1fRVhUSU5UCTB4MDAwMDA3MDAK
KyNkZWZpbmUgQVBJQ19MVlRfRFMJCTB4MDAwMDEwMDAKKyNkZWZpbmUgQVBJQ19MVlRfSUlQUAkJ
MHgwMDAwMjAwMAorI2RlZmluZSBBUElDX0xWVF9JSVBQX0lOVEFMTwkweDAwMDAyMDAwCisjZGVm
aW5lIEFQSUNfTFZUX0lJUFBfSU5UQUhJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQVBJQ19MVlRfUklS
UgkJMHgwMDAwNDAwMAorI2RlZmluZSBBUElDX0xWVF9UTQkJMHgwMDAwODAwMAorI2RlZmluZSBB
UElDX0xWVF9NCQkweDAwMDEwMDAwCisKKworLyogZmllbGRzIGluIExWVCBUaW1lciAqLworI2Rl
ZmluZSBBUElDX0xWVFRfVkVDVE9SCTB4MDAwMDAwZmYKKyNkZWZpbmUgQVBJQ19MVlRUX0RTCQkw
eDAwMDAxMDAwCisjZGVmaW5lIEFQSUNfTFZUVF9NCQkweDAwMDEwMDAwCisjZGVmaW5lIEFQSUNf
TFZUVF9UTQkJMHgwMDA2MDAwMAorIyBkZWZpbmUgQVBJQ19MVlRUX1RNX09ORV9TSE9UCTB4MDAw
MDAwMDAKKyMgZGVmaW5lIEFQSUNfTFZUVF9UTV9QRVJJT0RJQwkweDAwMDIwMDAwCisjIGRlZmlu
ZSBBUElDX0xWVFRfVE1fVFNDRExUCTB4MDAwNDAwMDAKKyMgZGVmaW5lIEFQSUNfTFZUVF9UTV9S
U1JWCTB4MDAwNjAwMDAKKworLyogQVBJQyB0aW1lciBjdXJyZW50IGNvdW50ICovCisjZGVmaW5l
CUFQSUNfVElNRVJfTUFYX0NPVU5UCTB4ZmZmZmZmZmYKKworLyogZmllbGRzIGluIFREQ1IgKi8K
KyNkZWZpbmUgQVBJQ19URENSXzIJCTB4MDAKKyNkZWZpbmUgQVBJQ19URENSXzQJCTB4MDEKKyNk
ZWZpbmUgQVBJQ19URENSXzgJCTB4MDIKKyNkZWZpbmUgQVBJQ19URENSXzE2CQkweDAzCisjZGVm
aW5lIEFQSUNfVERDUl8zMgkJMHgwOAorI2RlZmluZSBBUElDX1REQ1JfNjQJCTB4MDkKKyNkZWZp
bmUgQVBJQ19URENSXzEyOAkJMHgwYQorI2RlZmluZSBBUElDX1REQ1JfMQkJMHgwYgorCisvKiBM
VlQgdGFibGUgaW5kaWNlcyAqLworI2RlZmluZQlBUElDX0xWVF9MSU5UMAkJMAorI2RlZmluZQlB
UElDX0xWVF9MSU5UMQkJMQorI2RlZmluZQlBUElDX0xWVF9USU1FUgkJMgorI2RlZmluZQlBUElD
X0xWVF9FUlJPUgkJMworI2RlZmluZQlBUElDX0xWVF9QTUMJCTQKKyNkZWZpbmUJQVBJQ19MVlRf
VEhFUk1BTAk1CisjZGVmaW5lCUFQSUNfTFZUX0NNQ0kJCTYKKyNkZWZpbmUJQVBJQ19MVlRfTUFY
CQlBUElDX0xWVF9DTUNJCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEkvTyBBUElDIGRl
ZmluZXMKKyAqLworCisvKiBkZWZhdWx0IHBoeXNpY2FsIGxvY2F0aW9ucyBvZiBhbiBJTyBBUElD
ICovCisjZGVmaW5lIERFRkFVTFRfSU9fQVBJQ19CQVNFCTB4ZmVjMDAwMDAKKworLyogd2luZG93
IHJlZ2lzdGVyIG9mZnNldCAqLworI2RlZmluZSBJT0FQSUNfV0lORE9XCQkweDEwCisjZGVmaW5l
IElPQVBJQ19FT0lSCQkweDQwCisKKy8qIGluZGV4ZXMgaW50byBJTyBBUElDICovCisjZGVmaW5l
IElPQVBJQ19JRAkJMHgwMAorI2RlZmluZSBJT0FQSUNfVkVSCQkweDAxCisjZGVmaW5lIElPQVBJ
Q19BUkIJCTB4MDIKKyNkZWZpbmUgSU9BUElDX1JFRFRCTAkJMHgxMAorI2RlZmluZSBJT0FQSUNf
UkVEVEJMMAkJSU9BUElDX1JFRFRCTAorI2RlZmluZSBJT0FQSUNfUkVEVEJMMQkJKElPQVBJQ19S
RURUQkwrMHgwMikKKyNkZWZpbmUgSU9BUElDX1JFRFRCTDIJCShJT0FQSUNfUkVEVEJMKzB4MDQp
CisjZGVmaW5lIElPQVBJQ19SRURUQkwzCQkoSU9BUElDX1JFRFRCTCsweDA2KQorI2RlZmluZSBJ
T0FQSUNfUkVEVEJMNAkJKElPQVBJQ19SRURUQkwrMHgwOCkKKyNkZWZpbmUgSU9BUElDX1JFRFRC
TDUJCShJT0FQSUNfUkVEVEJMKzB4MGEpCisjZGVmaW5lIElPQVBJQ19SRURUQkw2CQkoSU9BUElD
X1JFRFRCTCsweDBjKQorI2RlZmluZSBJT0FQSUNfUkVEVEJMNwkJKElPQVBJQ19SRURUQkwrMHgw
ZSkKKyNkZWZpbmUgSU9BUElDX1JFRFRCTDgJCShJT0FQSUNfUkVEVEJMKzB4MTApCisjZGVmaW5l
IElPQVBJQ19SRURUQkw5CQkoSU9BUElDX1JFRFRCTCsweDEyKQorI2RlZmluZSBJT0FQSUNfUkVE
VEJMMTAJCShJT0FQSUNfUkVEVEJMKzB4MTQpCisjZGVmaW5lIElPQVBJQ19SRURUQkwxMQkJKElP
QVBJQ19SRURUQkwrMHgxNikKKyNkZWZpbmUgSU9BUElDX1JFRFRCTDEyCQkoSU9BUElDX1JFRFRC
TCsweDE4KQorI2RlZmluZSBJT0FQSUNfUkVEVEJMMTMJCShJT0FQSUNfUkVEVEJMKzB4MWEpCisj
ZGVmaW5lIElPQVBJQ19SRURUQkwxNAkJKElPQVBJQ19SRURUQkwrMHgxYykKKyNkZWZpbmUgSU9B
UElDX1JFRFRCTDE1CQkoSU9BUElDX1JFRFRCTCsweDFlKQorI2RlZmluZSBJT0FQSUNfUkVEVEJM
MTYJCShJT0FQSUNfUkVEVEJMKzB4MjApCisjZGVmaW5lIElPQVBJQ19SRURUQkwxNwkJKElPQVBJ
Q19SRURUQkwrMHgyMikKKyNkZWZpbmUgSU9BUElDX1JFRFRCTDE4CQkoSU9BUElDX1JFRFRCTCsw
eDI0KQorI2RlZmluZSBJT0FQSUNfUkVEVEJMMTkJCShJT0FQSUNfUkVEVEJMKzB4MjYpCisjZGVm
aW5lIElPQVBJQ19SRURUQkwyMAkJKElPQVBJQ19SRURUQkwrMHgyOCkKKyNkZWZpbmUgSU9BUElD
X1JFRFRCTDIxCQkoSU9BUElDX1JFRFRCTCsweDJhKQorI2RlZmluZSBJT0FQSUNfUkVEVEJMMjIJ
CShJT0FQSUNfUkVEVEJMKzB4MmMpCisjZGVmaW5lIElPQVBJQ19SRURUQkwyMwkJKElPQVBJQ19S
RURUQkwrMHgyZSkKKworLyogZmllbGRzIGluIFZFUiAqLworI2RlZmluZSBJT0FSVF9WRVJfVkVS
U0lPTgkweDAwMDAwMGZmCisjZGVmaW5lIElPQVJUX1ZFUl9NQVhSRURJUgkweDAwZmYwMDAwCisj
ZGVmaW5lIE1BWFJFRElSU0hJRlQJCTE2CisKKy8qCisgKiBmaWVsZHMgaW4gdGhlIElPIEFQSUMn
cyByZWRpcmVjdGlvbiB0YWJsZSBlbnRyaWVzCisgKi8KKyNkZWZpbmUgSU9BUlRfREVTVAlBUElD
X0lEX01BU0sJLyogYnJvYWRjYXN0IGFkZHI6IGFsbCBBUElDcyAqLworCisjZGVmaW5lIElPQVJU
X1JFU1YJMHgwMGZlMDAwMAkvKiByZXNlcnZlZCAqLworCisjZGVmaW5lIElPQVJUX0lOVE1BU0sJ
MHgwMDAxMDAwMAkvKiBSL1c6IElOVGVycnVwdCBtYXNrICovCisjIGRlZmluZSBJT0FSVF9JTlRN
Q0xSCTB4MDAwMDAwMDAJLyogICAgICAgY2xlYXIsIGFsbG93IElOVHMgKi8KKyMgZGVmaW5lIElP
QVJUX0lOVE1TRVQJMHgwMDAxMDAwMAkvKiAgICAgICBzZXQsIGluaGliaXQgSU5UcyAqLworCisj
ZGVmaW5lIElPQVJUX1RSR1JNT0QJMHgwMDAwODAwMAkvKiBSL1c6IHRyaWdnZXIgbW9kZSAqLwor
IyBkZWZpbmUgSU9BUlRfVFJHUkVERwkweDAwMDAwMDAwCS8qICAgICAgIGVkZ2UgKi8KKyMgZGVm
aW5lIElPQVJUX1RSR1JMVkwJMHgwMDAwODAwMAkvKiAgICAgICBsZXZlbCAqLworCisjZGVmaW5l
IElPQVJUX1JFTV9JUlIJMHgwMDAwNDAwMAkvKiBSTzogcmVtb3RlIElSUiAqLworCisjZGVmaW5l
IElPQVJUX0lOVFBPTAkweDAwMDAyMDAwCS8qIFIvVzogSU5UIGlucHV0IHBpbiBwb2xhcml0eSAq
LworIyBkZWZpbmUgSU9BUlRfSU5UQUhJCTB4MDAwMDAwMDAJLyogICAgICBhY3RpdmUgaGlnaCAq
LworIyBkZWZpbmUgSU9BUlRfSU5UQUxPCTB4MDAwMDIwMDAJLyogICAgICBhY3RpdmUgbG93ICov
CisKKyNkZWZpbmUgSU9BUlRfREVMSVZTCTB4MDAwMDEwMDAJLyogUk86IGRlbGl2ZXJ5IHN0YXR1
cyAqLworCisjZGVmaW5lIElPQVJUX0RFU1RNT0QJMHgwMDAwMDgwMAkvKiBSL1c6IGRlc3RpbmF0
aW9uIG1vZGUgKi8KKyMgZGVmaW5lIElPQVJUX0RFU1RQSFkJMHgwMDAwMDAwMAkvKiAgICAgIHBo
eXNpY2FsICovCisjIGRlZmluZSBJT0FSVF9ERVNUTE9HCTB4MDAwMDA4MDAJLyogICAgICBsb2dp
Y2FsICovCisKKyNkZWZpbmUgSU9BUlRfREVMTU9ECTB4MDAwMDA3MDAJLyogUi9XOiBkZWxpdmVy
eSBtb2RlICovCisjIGRlZmluZSBJT0FSVF9ERUxGSVhFRAkweDAwMDAwMDAwCS8qICAgICAgIGZp
eGVkICovCisjIGRlZmluZSBJT0FSVF9ERUxMT1BSSQkweDAwMDAwMTAwCS8qICAgICAgIGxvd2Vz
dCBwcmlvcml0eSAqLworIyBkZWZpbmUgSU9BUlRfREVMU01JCTB4MDAwMDAyMDAJLyogICAgICAg
U3lzdGVtIE1hbmFnZW1lbnQgSU5UICovCisjIGRlZmluZSBJT0FSVF9ERUxSU1YxCTB4MDAwMDAz
MDAJLyogICAgICAgcmVzZXJ2ZWQgKi8KKyMgZGVmaW5lIElPQVJUX0RFTE5NSQkweDAwMDAwNDAw
CS8qICAgICAgIE5NSSBzaWduYWwgKi8KKyMgZGVmaW5lIElPQVJUX0RFTElOSVQJMHgwMDAwMDUw
MAkvKiAgICAgICBJTklUIHNpZ25hbCAqLworIyBkZWZpbmUgSU9BUlRfREVMUlNWMgkweDAwMDAw
NjAwCS8qICAgICAgIHJlc2VydmVkICovCisjIGRlZmluZSBJT0FSVF9ERUxFWElOVAkweDAwMDAw
NzAwCS8qICAgICAgIEV4dGVybmFsIElOVGVycnVwdCAqLworCisjZGVmaW5lIElPQVJUX0lOVFZF
QwkweDAwMDAwMGZmCS8qIFIvVzogSU5UZXJydXB0IHZlY3RvciBmaWVsZCAqLworCisjZW5kaWYg
LyogX1g4Nl9BUElDUkVHX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAveDg2L2FwaWN2YXIuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2FwaWN2
YXIuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2FwaWN2YXIuaAkxOTcwLTAx
LTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL3g4Ni9hcGljdmFyLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAg
LTAsMCArMSw0NjcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAzIEpvaG4gQmFsZHdpbiA8
amhiQEZyZWVCU0Qub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg
KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
CisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDog
cmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL2FwaWN2YXIuaCAzMDEwMTUgMjAxNi0wNS0zMSAw
NDo0Nzo1M1ogc2VwaGUgJAorICovCisKKyNpZm5kZWYgX1g4Nl9BUElDVkFSX0hfCisjZGVmaW5l
IF9YODZfQVBJQ1ZBUl9IXworCisvKgorICogTG9jYWwgJiYgSS9PIEFQSUMgdmFyaWFibGUgZGVm
aW5pdGlvbnMuCisgKi8KKworLyoKKyAqIExheW91dCBvZiBsb2NhbCBBUElDIGludGVycnVwdCB2
ZWN0b3JzOgorICoKKyAqCTB4ZmYgKDI1NSkgICstLS0tLS0tLS0tLS0tKworICogICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgIHwgMTUgKFNwdXJpb3VzIC8gSVBJcyAvIExvY2FsIEludGVy
cnVwdHMpCisgKgkweGYwICgyNDApICArLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICB8IDE0IChJL08gSW50ZXJydXB0cyAvIFRpbWVyKQorICoJMHhlMCAo
MjI0KSAgKy0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg
fCAxMyAoSS9PIEludGVycnVwdHMpCisgKgkweGQwICgyMDgpICArLS0tLS0tLS0tLS0tLSsKKyAq
ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8IDEyIChJL08gSW50ZXJydXB0cykKKyAq
CTB4YzAgKDE5MikgICstLS0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICB8ICAgICAg
ICAgICAgIHwgMTEgKEkvTyBJbnRlcnJ1cHRzKQorICoJMHhiMCAoMTc2KSAgKy0tLS0tLS0tLS0t
LS0rCisgKiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCAxMCAoSS9PIEludGVycnVw
dHMpCisgKgkweGEwICgxNjApICArLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAg
fCAgICAgICAgICAgICB8IDkgKEkvTyBJbnRlcnJ1cHRzKQorICoJMHg5MCAoMTQ0KSAgKy0tLS0t
LS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCA4IChJL08gSW50
ZXJydXB0cyAvIFN5c3RlbSBDYWxscykKKyAqCTB4ODAgKDEyOCkgICstLS0tLS0tLS0tLS0tKwor
ICogICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwgNyAoSS9PIEludGVycnVwdHMpCisg
KgkweDcwICgxMTIpICArLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICB8IDYgKEkvTyBJbnRlcnJ1cHRzKQorICoJMHg2MCAoOTYpICAgKy0tLS0tLS0tLS0t
LS0rCisgKiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCA1IChJL08gSW50ZXJydXB0
cykKKyAqCTB4NTAgKDgwKSAgICstLS0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICB8
ICAgICAgICAgICAgIHwgNCAoSS9PIEludGVycnVwdHMpCisgKgkweDQwICg2NCkgICArLS0tLS0t
LS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8IDMgKEkvTyBJbnRl
cnJ1cHRzKQorICoJMHgzMCAoNDgpICAgKy0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgfCAyIChBVFBJQyBJbnRlcnJ1cHRzKQorICoJMHgyMCAoMzIpICAg
Ky0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCAxIChF
eGNlcHRpb25zLCB0cmFwcywgZmF1bHRzLCBldGMuKQorICoJMHgxMCAoMTYpICAgKy0tLS0tLS0t
LS0tLS0rCisgKiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCAwIChFeGNlcHRpb25z
LCB0cmFwcywgZmF1bHRzLCBldGMuKQorICoJMHgwMCAoMCkgICAgKy0tLS0tLS0tLS0tLS0rCisg
KgorICogTm90ZTogMHg4MCBuZWVkcyB0byBiZSBoYW5kbGVkIHNwZWNpYWxseSBhbmQgbm90IGFs
bG9jYXRlZCB0byBhbgorICogSS9PIGRldmljZSEKKyAqLworCisjZGVmaW5lCU1BWF9BUElDX0lE
CTB4ZmUKKyNkZWZpbmUJQVBJQ19JRF9BTEwJMHhmZgorCisvKiBJL08gSW50ZXJydXB0cyBhcmUg
dXNlZCBmb3IgZXh0ZXJuYWwgZGV2aWNlcyBzdWNoIGFzIElTQSwgUENJLCBldGMuICovCisjZGVm
aW5lCUFQSUNfSU9fSU5UUwkoSURUX0lPX0lOVFMgKyAxNikKKyNkZWZpbmUJQVBJQ19OVU1fSU9J
TlRTCTE5MQorCisvKiBUaGUgdGltZXIgaW50ZXJydXB0IGlzIHVzZWQgZm9yIGNsb2NrIGhhbmRs
aW5nIGFuZCBkcml2ZXMgaGFyZGNsb2NrLCBldGMuICovCisjZGVmaW5lCUFQSUNfVElNRVJfSU5U
CShBUElDX0lPX0lOVFMgKyBBUElDX05VTV9JT0lOVFMpCisKKy8qICAKKyAqKioqKioqKioqKioq
KioqKioqKiogISEhIFdBUk5JTkcgISEhICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgor
ICogRWFjaCBsb2NhbCBhcGljIGhhcyBhbiBpbnRlcnJ1cHQgcmVjZWl2ZSBmaWZvIHRoYXQgaXMg
dHdvIGVudHJpZXMgZGVlcAorICogZm9yIGVhY2ggaW50ZXJydXB0IHByaW9yaXR5IGNsYXNzICho
aWdoZXIgNCBiaXRzIG9mIGludGVycnVwdCB2ZWN0b3IpLgorICogT25jZSB0aGUgZmlmbyBpcyBm
dWxsIHRoZSBBUElDIGNhbiBubyBsb25nZXIgcmVjZWl2ZSBpbnRlcnJ1cHRzIGZvciB0aGlzCisg
KiBjbGFzcyBhbmQgc2VuZGluZyBJUElzIGZyb20gb3RoZXIgQ1BVcyB3aWxsIGJlIGJsb2NrZWQu
CisgKiBUbyBhdm9pZCBkZWFkbG9ja3MgdGhlcmUgc2hvdWxkIGJlIG5vIG1vcmUgdGhhbiB0d28g
SVBJIGludGVycnVwdHMKKyAqIHBlbmRpbmcgYXQgdGhlIHNhbWUgdGltZS4KKyAqIEN1cnJlbnRs
eSB0aGlzIGlzIGd1YXJhbnRlZWQgYnkgZGl2aWRpbmcgdGhlIElQSXMgaW4gdHdvIGdyb3VwcyB0
aGF0IGhhdmUgCisgKiBlYWNoIGF0IG1vc3Qgb25lIElQSSBpbnRlcnJ1cHQgcGVuZGluZy4gVGhl
IGZpcnN0IGdyb3VwIGlzIHByb3RlY3RlZCBieSB0aGUKKyAqIHNtcF9pcGlfbXR4IGFuZCB3YWl0
cyBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIElQSSAoT25seSBvbmUgSVBJIHVzZXIgCisgKiBh
dCBhIHRpbWUpIFRoZSBzZWNvbmQgZ3JvdXAgdXNlcyBhIHNpbmdsZSBpbnRlcnJ1cHQgYW5kIGEg
Yml0bWFwIHRvIGF2b2lkCisgKiByZWR1bmRhbnQgSVBJIGludGVycnVwdHMuCisgKi8gCisKKy8q
IEludGVycnVwdHMgZm9yIGxvY2FsIEFQSUMgTFZUIGVudHJpZXMgb3RoZXIgdGhhbiB0aGUgdGlt
ZXIuICovCisjZGVmaW5lCUFQSUNfTE9DQUxfSU5UUwkyNDAKKyNkZWZpbmUJQVBJQ19FUlJPUl9J
TlQJQVBJQ19MT0NBTF9JTlRTCisjZGVmaW5lCUFQSUNfVEhFUk1BTF9JTlQgKEFQSUNfTE9DQUxf
SU5UUyArIDEpCisjZGVmaW5lCUFQSUNfQ01DX0lOVAkoQVBJQ19MT0NBTF9JTlRTICsgMikKKyNk
ZWZpbmUJQVBJQ19JUElfSU5UUwkoQVBJQ19MT0NBTF9JTlRTICsgMykKKworI2RlZmluZQlJUElf
UkVOREVaVk9VUwkoQVBJQ19JUElfSU5UUykJCS8qIEludGVyLUNQVSByZW5kZXp2b3VzLiAqLwor
I2RlZmluZQlJUElfSU5WTFRMQgkoQVBJQ19JUElfSU5UUyArIDEpCS8qIFRMQiBTaG9vdGRvd24g
SVBJcyAqLworI2RlZmluZQlJUElfSU5WTFBHCShBUElDX0lQSV9JTlRTICsgMikKKyNkZWZpbmUJ
SVBJX0lOVkxSTkcJKEFQSUNfSVBJX0lOVFMgKyAzKQorI2RlZmluZQlJUElfSU5WTENBQ0hFCShB
UElDX0lQSV9JTlRTICsgNCkKKy8qIFZlY3RvciB0byBoYW5kbGUgYml0bWFwIGJhc2VkIElQSXMg
Ki8KKyNkZWZpbmUJSVBJX0JJVE1BUF9WRUNUT1IJKEFQSUNfSVBJX0lOVFMgKyA1KSAKKworLyog
SVBJcyBoYW5kbGVkIGJ5IElQSV9CSVRNQVBfVkVDVE9SICovCisjZGVmaW5lCUlQSV9BU1QJCTAg
CS8qIEdlbmVyYXRlIHNvZnR3YXJlIHRyYXAuICovCisjZGVmaW5lIElQSV9QUkVFTVBUICAgICAx
CisjZGVmaW5lIElQSV9IQVJEQ0xPQ0sgICAyCisjZGVmaW5lIElQSV9CSVRNQVBfTEFTVCBJUElf
SEFSRENMT0NLCisjZGVmaW5lIElQSV9JU19CSVRNQVBFRCh4KSAoKHgpIDw9IElQSV9CSVRNQVBf
TEFTVCkKKworI2RlZmluZQlJUElfU1RPUAkoQVBJQ19JUElfSU5UUyArIDYpCS8qIFN0b3AgQ1BV
IHVudGlsIHJlc3RhcnRlZC4gKi8KKyNkZWZpbmUJSVBJX1NVU1BFTkQJKEFQSUNfSVBJX0lOVFMg
KyA3KQkvKiBTdXNwZW5kIENQVSB1bnRpbCByZXN0YXJ0ZWQuICovCisjaWZkZWYgX19pMzg2X18K
KyNkZWZpbmUJSVBJX0xBWllQTUFQCShBUElDX0lQSV9JTlRTICsgOCkJLyogTGF6eSBwbWFwIHJl
bGVhc2UuICovCisjZGVmaW5lCUlQSV9EWU5fRklSU1QJKEFQSUNfSVBJX0lOVFMgKyA5KQorI2Vs
c2UKKyNkZWZpbmUJSVBJX0RZTl9GSVJTVAkoQVBJQ19JUElfSU5UUyArIDgpCisjZW5kaWYKKyNk
ZWZpbmUJSVBJX0RZTl9MQVNUCSgyNTMpCQkJLyogSVBJcyBhbGxvY2F0ZWQgYXQgcnVudGltZSAq
LworCisvKgorICogSVBJX1NUT1BfSEFSRCBkb2VzIG5vdCBuZWVkIHRvIG9jY3VweSBhIHNsb3Qg
aW4gdGhlIElQSSB2ZWN0b3Igc3BhY2Ugc2luY2UKKyAqIGl0IGlzIGRlbGl2ZXJlZCB1c2luZyBh
biBOTUkgYW55d2F5cy4KKyAqLworI2RlZmluZQlJUElfTk1JX0ZJUlNUCTI1NAorI2RlZmluZQlJ
UElfVFJBQ0UJMjU0CQkJLyogSW50ZXJydXB0IGZvciB0cmFjaW5nLiAqLworI2RlZmluZQlJUElf
U1RPUF9IQVJECTI1NQkJCS8qIFN0b3AgQ1BVIHdpdGggYSBOTUkuICovCisKKy8qCisgKiBUaGUg
c3B1cmlvdXMgaW50ZXJydXB0IGNhbiBzaGFyZSB0aGUgcHJpb3JpdHkgY2xhc3Mgd2l0aCB0aGUg
SVBJcyBzaW5jZQorICogaXQgaXMgbm90IGEgbm9ybWFsIGludGVycnVwdC4gKERvZXMgbm90IHVz
ZSB0aGUgQVBJQydzIGludGVycnVwdCBmaWZvKQorICovCisjZGVmaW5lCUFQSUNfU1BVUklPVVNf
SU5UIDI1NQorCisjaWZuZGVmIExPQ09SRQorCisjZGVmaW5lCUFQSUNfSVBJX0RFU1RfU0VMRgkt
MQorI2RlZmluZQlBUElDX0lQSV9ERVNUX0FMTAktMgorI2RlZmluZQlBUElDX0lQSV9ERVNUX09U
SEVSUwktMworCisjZGVmaW5lCUFQSUNfQlVTX1VOS05PV04JLTEKKyNkZWZpbmUJQVBJQ19CVVNf
SVNBCQkwCisjZGVmaW5lCUFQSUNfQlVTX0VJU0EJCTEKKyNkZWZpbmUJQVBJQ19CVVNfUENJCQky
CisjZGVmaW5lCUFQSUNfQlVTX01BWAkJQVBJQ19CVVNfUENJCisKKyNkZWZpbmUJSVJRX0VYVElO
VAkJKE5VTV9JT19JTlRTICsgMSkKKyNkZWZpbmUJSVJRX05NSQkJCShOVU1fSU9fSU5UUyArIDIp
CisjZGVmaW5lCUlSUV9TTUkJCQkoTlVNX0lPX0lOVFMgKyAzKQorI2RlZmluZQlJUlFfRElTQUJM
RUQJCShOVU1fSU9fSU5UUyArIDQpCisKKy8qCisgKiBBbiBBUElDIGVudW1lcmF0b3IgaXMgYSBw
c3VlZG8gYnVzIGRyaXZlciB0aGF0IGVudW1lcmF0ZXMgQVBJQydzIGluY2x1ZGluZworICogQ1BV
J3MgYW5kIEkvTyBBUElDJ3MuCisgKi8KK3N0cnVjdCBhcGljX2VudW1lcmF0b3IgeworCWNvbnN0
IGNoYXIgKmFwaWNfbmFtZTsKKwlpbnQgKCphcGljX3Byb2JlKSh2b2lkKTsKKwlpbnQgKCphcGlj
X3Byb2JlX2NwdXMpKHZvaWQpOworCWludCAoKmFwaWNfc2V0dXBfbG9jYWwpKHZvaWQpOworCWlu
dCAoKmFwaWNfc2V0dXBfaW8pKHZvaWQpOworCVNMSVNUX0VOVFJZKGFwaWNfZW51bWVyYXRvcikg
YXBpY19uZXh0OworfTsKKworaW50aGFuZF90CisJSURUVkVDKGFwaWNfaXNyMSksIElEVFZFQyhh
cGljX2lzcjIpLCBJRFRWRUMoYXBpY19pc3IzKSwKKwlJRFRWRUMoYXBpY19pc3I0KSwgSURUVkVD
KGFwaWNfaXNyNSksIElEVFZFQyhhcGljX2lzcjYpLAorCUlEVFZFQyhhcGljX2lzcjcpLCBJRFRW
RUMoY21jaW50KSwgSURUVkVDKGVycm9yaW50KSwKKwlJRFRWRUMoc3B1cmlvdXNpbnQpLCBJRFRW
RUModGltZXJpbnQpOworCitleHRlcm4gdm1fcGFkZHJfdCBsYXBpY19wYWRkcjsKK2V4dGVybiBp
bnQgYXBpY19jcHVpZHNbXTsKKwordm9pZAlhcGljX3JlZ2lzdGVyX2VudW1lcmF0b3Ioc3RydWN0
IGFwaWNfZW51bWVyYXRvciAqZW51bWVyYXRvcik7Cit2b2lkCSppb2FwaWNfY3JlYXRlKHZtX3Bh
ZGRyX3QgYWRkciwgaW50MzJfdCBhcGljX2lkLCBpbnQgaW50YmFzZSk7CitpbnQJaW9hcGljX2Rp
c2FibGVfcGluKHZvaWQgKmNvb2tpZSwgdV9pbnQgcGluKTsKK2ludAlpb2FwaWNfZ2V0X3ZlY3Rv
cih2b2lkICpjb29raWUsIHVfaW50IHBpbik7Cit2b2lkCWlvYXBpY19yZWdpc3Rlcih2b2lkICpj
b29raWUpOworaW50CWlvYXBpY19yZW1hcF92ZWN0b3Iodm9pZCAqY29va2llLCB1X2ludCBwaW4s
IGludCB2ZWN0b3IpOworaW50CWlvYXBpY19zZXRfYnVzKHZvaWQgKmNvb2tpZSwgdV9pbnQgcGlu
LCBpbnQgYnVzX3R5cGUpOworaW50CWlvYXBpY19zZXRfZXh0aW50KHZvaWQgKmNvb2tpZSwgdV9p
bnQgcGluKTsKK2ludAlpb2FwaWNfc2V0X25taSh2b2lkICpjb29raWUsIHVfaW50IHBpbik7Citp
bnQJaW9hcGljX3NldF9wb2xhcml0eSh2b2lkICpjb29raWUsIHVfaW50IHBpbiwgZW51bSBpbnRy
X3BvbGFyaXR5IHBvbCk7CitpbnQJaW9hcGljX3NldF90cmlnZ2VybW9kZSh2b2lkICpjb29raWUs
IHVfaW50IHBpbiwKKwkgICAgZW51bSBpbnRyX3RyaWdnZXIgdHJpZ2dlcik7CitpbnQJaW9hcGlj
X3NldF9zbWkodm9pZCAqY29va2llLCB1X2ludCBwaW4pOworCisvKgorICogU3RydWN0IGNvbnRh
aW5pbmcgcG9pbnRlcnMgdG8gQVBJQyBmdW5jdGlvbnMgd2hvc2UKKyAqIGltcGxlbWVudGF0aW9u
IGlzIHJ1biB0aW1lIHNlbGVjdGFibGUuCisgKi8KK3N0cnVjdCBhcGljX29wcyB7CisJdm9pZAko
KmNyZWF0ZSkodV9pbnQsIGludCk7CisJdm9pZAkoKmluaXQpKHZtX3BhZGRyX3QpOworCXZvaWQJ
KCp4YXBpY19tb2RlKSh2b2lkKTsKKwl2b2lkCSgqc2V0dXApKGludCk7CisJdm9pZAkoKmR1bXAp
KGNvbnN0IGNoYXIgKik7CisJdm9pZAkoKmRpc2FibGUpKHZvaWQpOworCXZvaWQJKCplb2kpKHZv
aWQpOworCWludAkoKmlkKSh2b2lkKTsKKwlpbnQJKCppbnRyX3BlbmRpbmcpKHVfaW50KTsKKwl2
b2lkCSgqc2V0X2xvZ2ljYWxfaWQpKHVfaW50LCB1X2ludCwgdV9pbnQpOworCXVfaW50CSgqY3B1
aWQpKHVfaW50KTsKKworCS8qIFZlY3RvcnMgKi8KKwl1X2ludAkoKmFsbG9jX3ZlY3RvcikodV9p
bnQsIHVfaW50KTsKKwl1X2ludAkoKmFsbG9jX3ZlY3RvcnMpKHVfaW50LCB1X2ludCAqLCB1X2lu
dCwgdV9pbnQpOworCXZvaWQJKCplbmFibGVfdmVjdG9yKSh1X2ludCwgdV9pbnQpOworCXZvaWQJ
KCpkaXNhYmxlX3ZlY3RvcikodV9pbnQsIHVfaW50KTsKKwl2b2lkCSgqZnJlZV92ZWN0b3IpKHVf
aW50LCB1X2ludCwgdV9pbnQpOworCisKKwkvKiBQTUMgKi8KKwlpbnQJKCplbmFibGVfcG1jKSh2
b2lkKTsKKwl2b2lkCSgqZGlzYWJsZV9wbWMpKHZvaWQpOworCXZvaWQJKCpyZWVuYWJsZV9wbWMp
KHZvaWQpOworCisJLyogQ01DICovCisJdm9pZAkoKmVuYWJsZV9jbWMpKHZvaWQpOworCisJLyog
SVBJICovCisJdm9pZAkoKmlwaV9yYXcpKHJlZ2lzdGVyX3QsIHVfaW50KTsKKwl2b2lkCSgqaXBp
X3ZlY3RvcmVkKSh1X2ludCwgaW50KTsKKwlpbnQJKCppcGlfd2FpdCkoaW50KTsKKwlpbnQJKCpp
cGlfYWxsb2MpKGludGhhbmRfdCAqaXBpZnVuYyk7CisJdm9pZAkoKmlwaV9mcmVlKShpbnQgdmVj
dG9yKTsKKworCS8qIExWVCAqLworCWludAkoKnNldF9sdnRfbWFzaykodV9pbnQsIHVfaW50LCB1
X2NoYXIpOworCWludAkoKnNldF9sdnRfbW9kZSkodV9pbnQsIHVfaW50LCB1X2ludDMyX3QpOwor
CWludAkoKnNldF9sdnRfcG9sYXJpdHkpKHVfaW50LCB1X2ludCwgZW51bSBpbnRyX3BvbGFyaXR5
KTsKKwlpbnQJKCpzZXRfbHZ0X3RyaWdnZXJtb2RlKSh1X2ludCwgdV9pbnQsIGVudW0gaW50cl90
cmlnZ2VyKTsKK307CisKK2V4dGVybiBzdHJ1Y3QgYXBpY19vcHMgYXBpY19vcHM7CisKK3N0YXRp
YyBpbmxpbmUgdm9pZAorbGFwaWNfY3JlYXRlKHVfaW50IGFwaWNfaWQsIGludCBib290X2NwdSkK
K3sKKworCWFwaWNfb3BzLmNyZWF0ZShhcGljX2lkLCBib290X2NwdSk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZAorbGFwaWNfaW5pdCh2bV9wYWRkcl90IGFkZHIpCit7CisKKwlhcGljX29wcy5p
bml0KGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX3hhcGljX21vZGUodm9p
ZCkKK3sKKworCWFwaWNfb3BzLnhhcGljX21vZGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lk
CitsYXBpY19zZXR1cChpbnQgYm9vdCkKK3sKKworCWFwaWNfb3BzLnNldHVwKGJvb3QpOworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX2R1bXAoY29uc3QgY2hhciAqc3RyKQoreworCisJ
YXBpY19vcHMuZHVtcChzdHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX2Rpc2Fi
bGUodm9pZCkKK3sKKworCWFwaWNfb3BzLmRpc2FibGUoKTsKK30KKworc3RhdGljIGlubGluZSB2
b2lkCitsYXBpY19lb2kodm9pZCkKK3sKKworCWFwaWNfb3BzLmVvaSgpOworfQorCitzdGF0aWMg
aW5saW5lIGludAorbGFwaWNfaWQodm9pZCkKK3sKKworCXJldHVybiAoYXBpY19vcHMuaWQoKSk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitsYXBpY19pbnRyX3BlbmRpbmcodV9pbnQgdmVjdG9y
KQoreworCisJcmV0dXJuIChhcGljX29wcy5pbnRyX3BlbmRpbmcodmVjdG9yKSk7Cit9CisKKy8q
IFhYWDogVU5VU0VEICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX3NldF9sb2dpY2FsX2lk
KHVfaW50IGFwaWNfaWQsIHVfaW50IGNsdXN0ZXIsIHVfaW50IGNsdXN0ZXJfaWQpCit7CisKKwlh
cGljX29wcy5zZXRfbG9naWNhbF9pZChhcGljX2lkLCBjbHVzdGVyLCBjbHVzdGVyX2lkKTsKK30K
Kworc3RhdGljIGlubGluZSB1X2ludAorYXBpY19jcHVpZCh1X2ludCBhcGljX2lkKQoreworCisJ
cmV0dXJuIChhcGljX29wcy5jcHVpZChhcGljX2lkKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdV9p
bnQKK2FwaWNfYWxsb2NfdmVjdG9yKHVfaW50IGFwaWNfaWQsIHVfaW50IGlycSkKK3sKKworCXJl
dHVybiAoYXBpY19vcHMuYWxsb2NfdmVjdG9yKGFwaWNfaWQsIGlycSkpOworfQorCitzdGF0aWMg
aW5saW5lIHVfaW50CithcGljX2FsbG9jX3ZlY3RvcnModV9pbnQgYXBpY19pZCwgdV9pbnQgKmly
cXMsIHVfaW50IGNvdW50LCB1X2ludCBhbGlnbikKK3sKKworCXJldHVybiAoYXBpY19vcHMuYWxs
b2NfdmVjdG9ycyhhcGljX2lkLCBpcnFzLCBjb3VudCwgYWxpZ24pKTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkCithcGljX2VuYWJsZV92ZWN0b3IodV9pbnQgYXBpY19pZCwgdV9pbnQgdmVjdG9y
KQoreworCisJYXBpY19vcHMuZW5hYmxlX3ZlY3RvcihhcGljX2lkLCB2ZWN0b3IpOworfQorCitz
dGF0aWMgaW5saW5lIHZvaWQKK2FwaWNfZGlzYWJsZV92ZWN0b3IodV9pbnQgYXBpY19pZCwgdV9p
bnQgdmVjdG9yKQoreworCisJYXBpY19vcHMuZGlzYWJsZV92ZWN0b3IoYXBpY19pZCwgdmVjdG9y
KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCithcGljX2ZyZWVfdmVjdG9yKHVfaW50IGFwaWNf
aWQsIHVfaW50IHZlY3RvciwgdV9pbnQgaXJxKQoreworCisJYXBpY19vcHMuZnJlZV92ZWN0b3Io
YXBpY19pZCwgdmVjdG9yLCBpcnEpOworfQorCitzdGF0aWMgaW5saW5lIGludAorbGFwaWNfZW5h
YmxlX3BtYyh2b2lkKQoreworCisJcmV0dXJuIChhcGljX29wcy5lbmFibGVfcG1jKCkpOworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX2Rpc2FibGVfcG1jKHZvaWQpCit7CisKKwlhcGlj
X29wcy5kaXNhYmxlX3BtYygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX3JlZW5h
YmxlX3BtYyh2b2lkKQoreworCisJYXBpY19vcHMucmVlbmFibGVfcG1jKCk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgdm9pZAorbGFwaWNfZW5hYmxlX2NtYyh2b2lkKQoreworCisJYXBpY19vcHMuZW5h
YmxlX2NtYygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX2lwaV9yYXcocmVnaXN0
ZXJfdCBpY3JsbywgdV9pbnQgZGVzdCkKK3sKKworCWFwaWNfb3BzLmlwaV9yYXcoaWNybG8sIGRl
c3QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX2lwaV92ZWN0b3JlZCh1X2ludCB2
ZWN0b3IsIGludCBkZXN0KQoreworCisJYXBpY19vcHMuaXBpX3ZlY3RvcmVkKHZlY3RvciwgZGVz
dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitsYXBpY19pcGlfd2FpdChpbnQgZGVsYXkpCit7
CisKKwlyZXR1cm4gKGFwaWNfb3BzLmlwaV93YWl0KGRlbGF5KSk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgaW50CitsYXBpY19pcGlfYWxsb2MoaW50aGFuZF90ICppcGlmdW5jKQoreworCisJcmV0dXJu
IChhcGljX29wcy5pcGlfYWxsb2MoaXBpZnVuYykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQK
K2xhcGljX2lwaV9mcmVlKGludCB2ZWN0b3IpCit7CisKKwlyZXR1cm4gKGFwaWNfb3BzLmlwaV9m
cmVlKHZlY3RvcikpOworfQorCitzdGF0aWMgaW5saW5lIGludAorbGFwaWNfc2V0X2x2dF9tYXNr
KHVfaW50IGFwaWNfaWQsIHVfaW50IGx2dCwgdV9jaGFyIG1hc2tlZCkKK3sKKworCXJldHVybiAo
YXBpY19vcHMuc2V0X2x2dF9tYXNrKGFwaWNfaWQsIGx2dCwgbWFza2VkKSk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgaW50CitsYXBpY19zZXRfbHZ0X21vZGUodV9pbnQgYXBpY19pZCwgdV9pbnQgbHZ0
LCB1X2ludDMyX3QgbW9kZSkKK3sKKworCXJldHVybiAoYXBpY19vcHMuc2V0X2x2dF9tb2RlKGFw
aWNfaWQsIGx2dCwgbW9kZSkpOworfQorCitzdGF0aWMgaW5saW5lIGludAorbGFwaWNfc2V0X2x2
dF9wb2xhcml0eSh1X2ludCBhcGljX2lkLCB1X2ludCBsdnQsIGVudW0gaW50cl9wb2xhcml0eSBw
b2wpCit7CisKKwlyZXR1cm4gKGFwaWNfb3BzLnNldF9sdnRfcG9sYXJpdHkoYXBpY19pZCwgbHZ0
LCBwb2wpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2xhcGljX3NldF9sdnRfdHJpZ2dlcm1v
ZGUodV9pbnQgYXBpY19pZCwgdV9pbnQgbHZ0LCBlbnVtIGludHJfdHJpZ2dlciB0cmlnZ2VyKQor
eworCisJcmV0dXJuIChhcGljX29wcy5zZXRfbHZ0X3RyaWdnZXJtb2RlKGFwaWNfaWQsIGx2dCwg
dHJpZ2dlcikpOworfQorCit2b2lkCWxhcGljX2hhbmRsZV9jbWModm9pZCk7Cit2b2lkCWxhcGlj
X2hhbmRsZV9lcnJvcih2b2lkKTsKK3ZvaWQJbGFwaWNfaGFuZGxlX2ludHIoaW50IHZlY3Rvciwg
c3RydWN0IHRyYXBmcmFtZSAqZnJhbWUpOwordm9pZAlsYXBpY19oYW5kbGVfdGltZXIoc3RydWN0
IHRyYXBmcmFtZSAqZnJhbWUpOworCitleHRlcm4gaW50IHgyYXBpY19tb2RlOworZXh0ZXJuIGlu
dCBsYXBpY19lb2lfc3VwcHJlc3Npb247CisKKyNpZmRlZiBfU1lTX1NZU0NUTF9IXworU1lTQ1RM
X0RFQ0woX2h3X2FwaWMpOworI2VuZGlmCisKKyNlbmRpZiAvKiAhTE9DT1JFICovCisjZW5kaWYg
LyogX1g4Nl9BUElDVkFSX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAveDg2L2FwbV9iaW9zLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9hcG1f
Ymlvcy5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvYXBtX2Jpb3MuaAkxOTcw
LTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL3g4Ni9hcG1fYmlvcy5oCTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAwMDAwICswMTAw
CkBAIC0wLDAgKzEsMjY0IEBACisvKi0KKyAqIEFQTSAoQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVu
dCkgQklPUyBEZXZpY2UgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0LTE5OTUgYnkg
SE9TT0tBV0EsIFRhdHN1bWkgPGhvc29rYXdhQG10LmNzLmtlaW8uYWMuanA+CisgKgorICogVGhp
cyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCwgbW9kaWZpZWQsIGNvcGllZCwgYW5kIGRpc3RyaWJ1dGVk
LCBpbgorICogYm90aCBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtIHByb3ZpZGVkIHRoYXQgdGhlIGFi
b3ZlIGNvcHlyaWdodCBhbmQKKyAqIHRoZXNlIHRlcm1zIGFyZSByZXRhaW5lZC4gVW5kZXIgbm8g
Y2lyY3Vtc3RhbmNlcyBpcyB0aGUgYXV0aG9yCisgKiByZXNwb25zaWJsZSBmb3IgdGhlIHByb3Bl
ciBmdW5jdGlvbmluZyBvZiB0aGlzIHNvZnR3YXJlLCBub3IgZG9lcworICogdGhlIGF1dGhvciBh
c3N1bWUgYW55IHJlc3BvbnNpYmlsaXR5IGZvciBkYW1hZ2VzIGluY3VycmVkIHdpdGggaXRzCisg
KiB1c2UuCisgKgorICogQXVnLCAxOTk0CUltcGxlbWVudGVkIG9uIEZyZWVCU0QgMS4xLjUuMVIg
KFRvc2hpYmEgQVZTMDAxV0QpCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYv
aW5jbHVkZS9hcG1fYmlvcy5oIDIxNTE0MCAyMDEwLTExLTExIDE5OjM2OjIxWiBqa2ltICQKKyAq
LworCisjaWZuZGVmIF9YODZfQVBNX0JJT1NfSF8KKyNkZWZpbmUJX1g4Nl9BUE1fQklPU19IXwor
CisjaWZuZGVmIF9LRVJORUwKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2luY2x1
ZGUgPHN5cy9pb2Njb20uaD4KKworLyogQklPUyBpZCAqLworI2RlZmluZSBBUE1fQklPUwkJMHg1
MworI2RlZmluZSBBUE1fSU5UCQkJMHgxNQorCisvKiBBUE0gZmxhZ3MgKi8KKyNkZWZpbmUgQVBN
XzE2QklUX1NVUFBPUlQJMHgwMQorI2RlZmluZSBBUE1fMzJCSVRfU1VQUE9SVAkweDAyCisjZGVm
aW5lIEFQTV9DUFVJRExFX1NMT1cJMHgwNAorI2RlZmluZSBBUE1fRElTQUJMRUQJCTB4MDgKKyNk
ZWZpbmUgQVBNX0RJU0VOR0FHRUQJCTB4MTAKKworLyogQVBNIGluaXRpYWxpemVyIHBoeXNpY2Fs
IGFkZHJlc3MgKi8KKyNkZWZpbmUgQVBNX09VUkFERFIJCTB4MDAwODAwMDAKKworLyogQVBNIGZ1
bmN0aW9ucyAqLworI2RlZmluZSBBUE1fSU5TVENIRUNLCQkweDAwCisjZGVmaW5lIEFQTV9SRUFM
Q09OTkVDVAkJMHgwMQorI2RlZmluZSBBUE1fUFJPVDE2Q09OTkVDVAkweDAyCisjZGVmaW5lIEFQ
TV9QUk9UMzJDT05ORUNUCTB4MDMKKyNkZWZpbmUgQVBNX0RJU0NPTk5FQ1QJCTB4MDQKKyNkZWZp
bmUgQVBNX0NQVUlETEUJCTB4MDUKKyNkZWZpbmUgQVBNX0NQVUJVU1kJCTB4MDYKKyNkZWZpbmUg
QVBNX1NFVFBXU1RBVEUJCTB4MDcKKyNkZWZpbmUgQVBNX0VOQUJMRURJU0FCTEVQTQkweDA4Cisj
ZGVmaW5lIEFQTV9SRVNUT1JFREVGQVVMVAkweDA5CisjZGVmaW5lCUFQTV9HRVRQV1NUQVRVUwkJ
MHgwYQorI2RlZmluZSBBUE1fR0VUUE1FVkVOVAkJMHgwYgorI2RlZmluZSBBUE1fR0VUUFdTVEFU
RQkJMHgwYworI2RlZmluZSBBUE1fRU5BQkxFRElTQUJMRURQTQkweDBkCisjZGVmaW5lIEFQTV9E
UlZWRVJTSU9OCQkweDBlCisjZGVmaW5lIEFQTV9FTkdBR0VESVNFTkdBR0VQTQkweDBmCisjZGVm
aW5lIEFQTV9HRVRDQVBBQklMSVRJRVMJMHgxMAorI2RlZmluZSBBUE1fUkVTVU1FVElNRVIJCTB4
MTEKKyNkZWZpbmUgQVBNX1JFU1VNRU9OUklORwkweDEyCisjZGVmaW5lIEFQTV9USU1FUlJFUVVF
U1RTCTB4MTMKKyNkZWZpbmUgQVBNX09FTUZVTkMJCTB4ODAKKworLyogZXJyb3IgY29kZSAqLwor
I2RlZmluZSBBUE1FX09LCQkJMHgwMAorI2RlZmluZSBBUE1FX1BNRElTQUJMRUQJCTB4MDEKKyNk
ZWZpbmUgQVBNRV9SRUFMRVNUQUJMSVNIRUQJMHgwMgorI2RlZmluZSBBUE1FX05PVENPTk5FQ1RF
RAkweDAzCisjZGVmaW5lIEFQTUVfUFJPVDE2RVNUQUJMSVNIRUQJMHgwNQorI2RlZmluZSBBUE1F
X1BST1QxNk5PVFNVUFBPUlRFRAkweDA2CisjZGVmaW5lIEFQTUVfUFJPVDMyRVNUQUJMSVNIRUQJ
MHgwNworI2RlZmluZSBBUE1FX1BST1QzMk5PVERVUFBPUlRFRAkweDA4CisjZGVmaW5lIEFQTUVf
VU5LTk9XTkRFVklDRUlECTB4MDkKKyNkZWZpbmUgQVBNRV9PVVRPRlJBTkdFCQkweDBhCisjZGVm
aW5lIEFQTUVfTk9URU5HQUdFRAkJMHgwYgorI2RlZmluZSBBUE1FX0NBTlRFTlRFUlNUQVRFCTB4
NjAKKyNkZWZpbmUgQVBNRV9OT1BNRVZFTlQJCTB4ODAKKyNkZWZpbmUgQVBNRV9OT0FQTVBSRVNF
TlQJMHg4NgorCisKKy8qIGRldmljZSBjb2RlICovCisjZGVmaW5lIFBNRFZfQVBNQklPUwkJMHgw
MDAwCisjZGVmaW5lIFBNRFZfQUxMREVWCQkweDAwMDEKKyNkZWZpbmUgUE1EVl9ESVNQMAkJMHgw
MTAwCisjZGVmaW5lIFBNRFZfRElTUDEJCTB4MDEwMQorI2RlZmluZSBQTURWX0RJU1BBTEwJCTB4
MDFmZgorI2RlZmluZSBQTURWXzJORFNUT1JBR0UwCTB4MDIwMAorI2RlZmluZSBQTURWXzJORFNU
T1JBR0UxCTB4MDIwMQorI2RlZmluZSBQTURWXzJORFNUT1JBR0UyCTB4MDIwMgorI2RlZmluZSBQ
TURWXzJORFNUT1JBR0UzCTB4MDIwMworI2RlZmluZSBQTURWX1BBUkFMTEVMMAkJMHgwMzAwCisj
ZGVmaW5lIFBNRFZfUEFSQUxMRUwxCQkweDAzMDEKKyNkZWZpbmUgUE1EVl9TRVJJQUwwCQkweDA0
MDAKKyNkZWZpbmUgUE1EVl9TRVJJQUwxCQkweDA0MDEKKyNkZWZpbmUgUE1EVl9TRVJJQUwyCQkw
eDA0MDIKKyNkZWZpbmUgUE1EVl9TRVJJQUwzCQkweDA0MDMKKyNkZWZpbmUgUE1EVl9TRVJJQUw0
CQkweDA0MDQKKyNkZWZpbmUgUE1EVl9TRVJJQUw1CQkweDA0MDUKKyNkZWZpbmUgUE1EVl9TRVJJ
QUw2CQkweDA0MDYKKyNkZWZpbmUgUE1EVl9TRVJJQUw3CQkweDA0MDcKKyNkZWZpbmUgUE1EVl9O
RVQwCQkweDA1MDAKKyNkZWZpbmUgUE1EVl9ORVQxCQkweDA1MDEKKyNkZWZpbmUgUE1EVl9ORVQy
CQkweDA1MDIKKyNkZWZpbmUgUE1EVl9ORVQzCQkweDA1MDMKKyNkZWZpbmUgUE1EVl9QQ01DSUEw
CQkweDA2MDAKKyNkZWZpbmUgUE1EVl9QQ01DSUExCQkweDA2MDEKKyNkZWZpbmUgUE1EVl9QQ01D
SUEyCQkweDA2MDIKKyNkZWZpbmUgUE1EVl9QQ01DSUEzCQkweDA2MDMKKy8qIDB4MDcwMCAtIDB4
N2ZmZglSZXNlcnZlZAkJCSovCisjZGVmaW5lIFBNRFZfQkFUVF9CQVNFCQkweDgwMDAKKyNkZWZp
bmUgUE1EVl9CQVRUMAkJMHg4MDAxCisjZGVmaW5lIFBNRFZfQkFUVDEJCTB4ODAwMgorI2RlZmlu
ZSBQTURWX0JBVFRfQUxMCQkweDgwZmYKKy8qIDB4ODEwMCAtIDB4ZGZmZglSZXNlcnZlZAkJCSov
CisvKiAweGUwMDAgLSAweGVmZmYJT0VNLWRlZmluZWQgcG93ZXIgZGV2aWNlIElEcwkqLworLyog
MHhmMDAwIC0gMHhmZmZmCVJlc2VydmVkCQkJKi8KKworLyogUG93ZXIgc3RhdGUgKi8KKyNkZWZp
bmUgUE1TVF9BUE1FTkFCTEVECQkweDAwMDAKKyNkZWZpbmUgUE1TVF9TVEFOREJZCQkweDAwMDEK
KyNkZWZpbmUgUE1TVF9TVVNQRU5ECQkweDAwMDIKKyNkZWZpbmUgUE1TVF9PRkYJCTB4MDAwMwor
I2RlZmluZSBQTVNUX0xBU1RSRVFOT1RJRlkJMHgwMDA0CisjZGVmaW5lIFBNU1RfTEFTVFJFUVJF
SkVDVAkweDAwMDUKKy8qIDB4MDAwNiAtIDB4MDAxZglSZXNlcnZlZCBzeXN0ZW0gc3RhdGVzCQkq
LworLyogMHgwMDIwIC0gMHgwMDNmCU9FTS1kZWZpbmVkIHN5c3RlbSBzdGF0ZXMJKi8KKy8qIDB4
MDA0MCAtIDB4MDA3ZglPRU0tZGVmaW5lZCBkZXZpY2Ugc3RhdGVzCSovCisvKiAweDAwODAgLSAw
eGZmZmYJUmVzZXJ2ZWQgZGV2aWNlIHN0YXRlcwkJKi8KKworI2lmICFkZWZpbmVkKEFTU0VNQkxF
UikgJiYgIWRlZmluZWQoSU5JVElBTElaRVIpCisKKy8qIEMgZGVmaW5pdGlvbnMgKi8KK3N0cnVj
dCBhcG1ob29rIHsKKwlzdHJ1Y3QgYXBtaG9vawkqYWhfbmV4dDsKKwlpbnQJCSgqYWhfZnVuKSh2
b2lkICphaF9hcmcpOworCXZvaWQJCSphaF9hcmc7CisJY29uc3QgY2hhcgkqYWhfbmFtZTsKKwlp
bnQJCWFoX29yZGVyOworfTsKKyNkZWZpbmUgQVBNX0hPT0tfTk9ORQkJKC0xKQorI2RlZmluZSBB
UE1fSE9PS19TVVNQRU5EICAgICAgICAwCisjZGVmaW5lIEFQTV9IT09LX1JFU1VNRSAgICAgICAg
IDEKKyNkZWZpbmUgTkFQTV9IT09LICAgICAgICAgICAgICAgMgorCisjaWZkZWYgX0tFUk5FTAor
Cit2b2lkIGFwbV9zdXNwZW5kKGludCBzdGF0ZSk7CitzdHJ1Y3QgYXBtaG9vayAqYXBtX2hvb2tf
ZXN0YWJsaXNoIChpbnQgYXBtaCwgc3RydWN0IGFwbWhvb2sgKik7Cit2b2lkIGFwbV9ob29rX2Rp
c2VzdGFibGlzaCAoaW50IGFwbWgsIHN0cnVjdCBhcG1ob29rICopOwordm9pZCBhcG1fY3B1X2lk
bGUodm9pZCk7Cit2b2lkIGFwbV9jcHVfYnVzeSh2b2lkKTsKKworI2VuZGlmCisKKyNlbmRpZiAv
KiAhQVNTRU1CTEVSICYmICFJTklUSUFMSVpFUiAqLworCisjZGVmaW5lIEFQTV9NSU5fT1JERVIJ
CTB4MDAKKyNkZWZpbmUgQVBNX01JRF9PUkRFUgkJMHg4MAorI2RlZmluZSBBUE1fTUFYX09SREVS
CQkweGZmCisKKy8qIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnQgY29kZSAqLworI2RlZmluZSBQTUVW
X05PRVZFTlQJCTB4MDAwMAorI2RlZmluZSBQTUVWX1NUQU5EQllSRVEJCTB4MDAwMQorI2RlZmlu
ZSBQTUVWX1NVU1BFTkRSRVEJCTB4MDAwMgorI2RlZmluZSBQTUVWX05PUk1SRVNVTUUJCTB4MDAw
MworI2RlZmluZSBQTUVWX0NSSVRSRVNVTUUJCTB4MDAwNAorI2RlZmluZSBQTUVWX0JBVFRFUllM
T1cJCTB4MDAwNQorI2RlZmluZSBQTUVWX1BPV0VSU1RBVEVDSEFOR0UJMHgwMDA2CisjZGVmaW5l
IFBNRVZfVVBEQVRFVElNRQkJMHgwMDA3CisjZGVmaW5lIFBNRVZfQ1JJVFNVU1BFTkQJMHgwMDA4
CisjZGVmaW5lIFBNRVZfVVNFUlNUQU5EQllSRVEJMHgwMDA5CisjZGVmaW5lIFBNRVZfVVNFUlNV
U1BFTkRSRVEJMHgwMDBhCisjZGVmaW5lIFBNRVZfU1RBTkRCWVJFU1VNRQkweDAwMGIKKyNkZWZp
bmUgUE1FVl9DQVBBQklMSVRJRVNDSEFOR0UgMHgwMDBjCisvKiAweDAwMGQgLSAweDAwZmYJUmVz
ZXJ2ZWQgc3lzdGVtIGV2ZW50cwkqLworLyogMHgwMTAwIC0gMHgwMWZmCVJlc2VydmVkIGRldmlj
ZSBldmVudHMJKi8KKy8qIDB4MDIwMCAtIDB4MDJmZglPRU0tZGVmaW5lZCBBUE0gZXZlbnRzCSov
CisvKiAweDAzMDAgLSAweGZmZmYJUmVzZXJ2ZWQJCSovCisjZGVmaW5lIFBNRVZfREVGQVVMVAkJ
MHhmZmZmZmZmZgkvKiB1c2VkIGZvciBjdXN0b21pemF0aW9uICovCisKKyNpZiAhZGVmaW5lZChB
U1NFTUJMRVIpICYmICFkZWZpbmVkKElOSVRJQUxJWkVSKQorCisvKgorICogT2xkIGFwbV9pbmZv
IHN0cnVjdHVyZSwgcmV0dXJuZWQgYnkgdGhlIEFQTUlPX0dFVElORk9fT0xEIGlvY3RsLiAgVGhp
cworICogaXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgZXhlY3V0YWJsZXMu
CisgKi8KK3R5cGVkZWYgc3RydWN0IGFwbV9pbmZvX29sZCB7CisJdV9pbnQJYWlfbWFqb3I7CS8q
IEFQTSBtYWpvciB2ZXJzaW9uICovCisJdV9pbnQJYWlfbWlub3I7CS8qIEFQTSBtaW5vciB2ZXJz
aW9uICovCisJdV9pbnQJYWlfYWNsaW5lOwkvKiBBQyBsaW5lIHN0YXR1cyAqLworCXVfaW50CWFp
X2JhdHRfc3RhdDsJLyogQmF0dGVyeSBzdGF0dXMgKi8KKwl1X2ludAlhaV9iYXR0X2xpZmU7CS8q
IFJlbWFpbmluZyBiYXR0ZXJ5IGxpZmUgKi8KKwl1X2ludAlhaV9zdGF0dXM7CS8qIFN0YXR1cyBv
ZiBBUE0gc3VwcG9ydCAoZW5hYmxlZC9kaXNhYmxlZCkgKi8KK30gKmFwbV9pbmZvX29sZF90Owor
CisvKgorICogU3RydWN0dXJlIHJldHVybmVkIGJ5IHRoZSBBUE1JT19HRVRJTkZPIGlvY3RsLgor
ICoKKyAqIEluIHRoZSBjb21tZW50cyBiZWxvdywgdGhlIHBhcmVudGhlc2l6ZWQgbnVtYmVycyBp
bmRpY2F0ZSB0aGUgbWluaW11bQorICogdmFsdWUgb2YgYWlfaW5mb3ZlcnNpb24gZm9yIHdoaWNo
IGVhY2ggZmllbGQgaXMgdmFsaWQuCisgKi8KK3R5cGVkZWYgc3RydWN0IGFwbV9pbmZvIHsKKwl1
X2ludAlhaV9pbmZvdmVyc2lvbjsJLyogSW5kaWNhdGVzIHdoaWNoIGZpZWxkcyBhcmUgdmFsaWQg
Ki8KKwl1X2ludAlhaV9tYWpvcjsJLyogQVBNIG1ham9yIHZlcnNpb24gKDApICovCisJdV9pbnQJ
YWlfbWlub3I7CS8qIEFQTSBtaW5vciB2ZXJzaW9uICgwKSAqLworCXVfaW50CWFpX2FjbGluZTsJ
LyogQUMgbGluZSBzdGF0dXMgKDApICovCisJdV9pbnQJYWlfYmF0dF9zdGF0OwkvKiBCYXR0ZXJ5
IHN0YXR1cyAoMCkgKi8KKwl1X2ludAlhaV9iYXR0X2xpZmU7CS8qIFJlbWFpbmluZyBiYXR0ZXJ5
IGxpZmUgaW4gcGVyY2VudCAoMCkgKi8KKwlpbnQJYWlfYmF0dF90aW1lOwkvKiBSZW1haW5pbmcg
YmF0dGVyeSB0aW1lIGluIHNlY29uZHMgKDApICovCisJdV9pbnQJYWlfc3RhdHVzOwkvKiBUcnVl
IGlmIGVuYWJsZWQgKDApICovCisJdV9pbnQJYWlfYmF0dGVyaWVzOwkvKiBOdW1iZXIgb2YgYmF0
dGVyaWVzICgxKSAqLworCXVfaW50CWFpX2NhcGFiaWxpdGllczsvKiBBUE0gQ2FwYWJpbGl0aWVz
ICgxKSAqLworCXVfaW50CWFpX3NwYXJlWzZdOwkvKiBGb3IgZnV0dXJlIGV4cGFuc2lvbiAqLwor
fSAqYXBtX2luZm9fdDsKKworLyogQmF0dGVyeSBmbGFnICovCisjZGVmaW5lIEFQTV9CQVRUX0hJ
R0gJCTB4MDEKKyNkZWZpbmUgQVBNX0JBVFRfTE9XCQkweDAyCisjZGVmaW5lIEFQTV9CQVRUX0NS
SVRJQ0FMCTB4MDQKKyNkZWZpbmUgQVBNX0JBVFRfQ0hBUkdJTkcJMHgwOAorI2RlZmluZSBBUE1f
QkFUVF9OT1RfUFJFU0VOVAkweDEwCisjZGVmaW5lIEFQTV9CQVRUX05PX1NZU1RFTQkweDgwCisK
K3R5cGVkZWYgc3RydWN0IGFwbV9wd3N0YXR1cyB7CisJdV9pbnQJYXBfZGV2aWNlOwkvKiBEZXZp
Y2UgY29kZSBvZiBiYXR0ZXJ5ICovCisJdV9pbnQJYXBfYWNsaW5lOwkvKiBBQyBsaW5lIHN0YXR1
cyAoMCkgKi8KKwl1X2ludAlhcF9iYXR0X3N0YXQ7CS8qIEJhdHRlcnkgc3RhdHVzICgwKSAqLwor
CXVfaW50CWFwX2JhdHRfZmxhZzsJLyogQmF0dGVyeSBmbGFnICgwKSAqLworCXVfaW50CWFwX2Jh
dHRfbGlmZTsJLyogUmVtYWluaW5nIGJhdHRlcnkgbGlmZSBpbiBwZXJjZW50ICgwKSAqLworCWlu
dAlhcF9iYXR0X3RpbWU7CS8qIFJlbWFpbmluZyBiYXR0ZXJ5IHRpbWUgaW4gc2Vjb25kcyAoMCkg
Ki8KK30gKmFwbV9wd3N0YXR1c190OworCitzdHJ1Y3QgYXBtX2Jpb3NfYXJnIHsKKyAgICAgICAg
dWludDMyX3QgZWF4OworICAgICAgICB1aW50MzJfdCBlYng7CisgICAgICAgIHVpbnQzMl90IGVj
eDsKKyAgICAgICAgdWludDMyX3QgZWR4OworICAgICAgICB1aW50MzJfdCBlc2k7CisgICAgICAg
IHVpbnQzMl90IGVkaTsKK307CisKK3N0cnVjdCBhcG1fZXZlbnRfaW5mbyB7CisJdV9pbnQgdHlw
ZTsKKwl1X2ludCBpbmRleDsKKwl1X2ludCBzcGFyZVs4XTsKK307CisKKyNkZWZpbmUgQVBNSU9f
U1VTUEVORAkJX0lPKCdQJywgMSkKKyNkZWZpbmUgQVBNSU9fR0VUSU5GT19PTEQJX0lPUignUCcs
IDIsIHN0cnVjdCBhcG1faW5mb19vbGQpCisjZGVmaW5lIEFQTUlPX0VOQUJMRQkJX0lPKCdQJywg
NSkKKyNkZWZpbmUgQVBNSU9fRElTQUJMRQkJX0lPKCdQJywgNikKKyNkZWZpbmUgQVBNSU9fSEFM
VENQVQkJX0lPKCdQJywgNykKKyNkZWZpbmUgQVBNSU9fTk9USEFMVENQVQlfSU8oJ1AnLCA4KQor
I2RlZmluZSBBUE1JT19ESVNQTEFZCQlfSU9XKCdQJywgOSwgaW50KQorI2RlZmluZSBBUE1JT19C
SU9TCQlfSU9XUignUCcsIDEwLCBzdHJ1Y3QgYXBtX2Jpb3NfYXJnKQorI2RlZmluZSBBUE1JT19H
RVRJTkZPCQlfSU9SKCdQJywgMTEsIHN0cnVjdCBhcG1faW5mbykKKyNkZWZpbmUgQVBNSU9fU1RB
TkRCWQkJX0lPKCdQJywgMTIpCisjZGVmaW5lIEFQTUlPX0dFVFBXU1RBVFVTCV9JT1dSKCdQJywg
MTMsIHN0cnVjdCBhcG1fcHdzdGF0dXMpCisvKiBmb3IgL2Rldi9hcG1jdGwgKi8KKyNkZWZpbmUg
QVBNSU9fTkVYVEVWRU5UCQlfSU9SKCdBJywgMTAwLCBzdHJ1Y3QgYXBtX2V2ZW50X2luZm8pCisj
ZGVmaW5lIEFQTUlPX1JFSkVDVExBU1RSRVEJX0lPKCdQJywgMTAxKQorCisjZW5kaWYgLyogIUFT
U0VNQkxFUiAmJiAhSU5JVElBTElaRVIgKi8KKworI2VuZGlmIC8qICFfWDg2X0FQTV9CSU9TX0hf
ICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2J1cy5oIC91
c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvYnVzLmgKLS0tIHVzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL3g4Ni9idXMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAor
KysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9idXMuaAkyMDE2LTA5LTI5IDAwOjI0
OjU1LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDExMDQgQEAKKy8qLQorICogQ29weXJpZ2h0
IChjKSBLQVRPIFRha2Vub3JpLCAxOTk5LgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBV
bnB1Ymxpc2hlZCByaWdodHMgcmVzZXJ2ZWQgdW5kZXIgdGhlIGNvcHlyaWdodAorICogbGF3cyBv
ZiBKYXBhbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBhcworICogICAgdGhlIGZpcnN0IGxpbmVzIG9mIHRo
aXMgZmlsZSB1bm1vZGlmaWVkLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycn
IEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9idXMu
aCAyODY2NjcgMjAxNS0wOC0xMiAxNToyNjozMlogbWFyY2VsICQKKyAqLworCisvKgkkTmV0QlNE
OiBidXMuaCx2IDEuMTIgMTk5Ny8xMC8wMSAwODoyNToxNSBmdmRsIEV4cCAkCSovCisKKy8qLQor
ICogQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9t
IHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorICogYnkgSmFz
b24gUi4gVGhvcnBlIG9mIHRoZSBOdW1lcmljYWwgQWVyb3NwYWNlIFNpbXVsYXRpb24gRmFjaWxp
dHksCisgKiBOQVNBIEFtZXMgUmVzZWFyY2ggQ2VudGVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBD
T05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRB
VElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTk2IENoYXJsZXMgTS4gSGFubnVtLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5NiBDaHJpc3RvcGhlciBHLiBEZW1l
dHJpb3UuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlz
aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJl
CisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAg
ICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgQ2hyaXN0b3Bo
ZXIgRy4gRGVtZXRyaW91CisgKglmb3IgdGhlIE5ldEJTRCBQcm9qZWN0LgorICogNC4gVGhlIG5h
bWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzCisgKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV
VEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9YODZfQlVT
X0hfCisjZGVmaW5lIF9YODZfQlVTX0hfCisKKyNpbmNsdWRlIDxtYWNoaW5lL19idXMuaD4KKyNp
bmNsdWRlIDxtYWNoaW5lL2NwdWZ1bmMuaD4KKworI2lmbmRlZiBfX0dOVUNMSUtFX0FTTQorIyBp
Zm5kZWYgbGludAorIyAgZXJyb3IgIm5vIGFzc2VtYmxlciBjb2RlIGZvciB5b3VyIGNvbXBpbGVy
IgorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBWYWx1ZXMgZm9yIHRoZSB4ODYgYnVzIHNwYWNl
IHRhZywgbm90IHRvIGJlIHVzZWQgZGlyZWN0bHkgYnkgTUkgY29kZS4KKyAqLworI2RlZmluZQlY
ODZfQlVTX1NQQUNFX0lPCTAJLyogc3BhY2UgaXMgaS9vIHNwYWNlICovCisjZGVmaW5lCVg4Nl9C
VVNfU1BBQ0VfTUVNCTEJLyogc3BhY2UgaXMgbWVtIHNwYWNlICovCisKKyNkZWZpbmUgQlVTX1NQ
QUNFX01BWFNJWkVfMjRCSVQJMHhGRkZGRkYKKyNkZWZpbmUgQlVTX1NQQUNFX01BWFNJWkVfMzJC
SVQgMHhGRkZGRkZGRgorI2RlZmluZSBCVVNfU1BBQ0VfTUFYU0laRQkweEZGRkZGRkZGCisjZGVm
aW5lIEJVU19TUEFDRV9NQVhBRERSXzI0QklUCTB4RkZGRkZGCisjZGVmaW5lIEJVU19TUEFDRV9N
QVhBRERSXzMyQklUIDB4RkZGRkZGRkYKKyNpZiBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5l
ZChQQUUpCisjZGVmaW5lIEJVU19TUEFDRV9NQVhBRERSCTB4RkZGRkZGRkZGRkZGRkZGRlVMTAor
I2Vsc2UKKyNkZWZpbmUgQlVTX1NQQUNFX01BWEFERFIJMHhGRkZGRkZGRgorI2VuZGlmCisKKyNk
ZWZpbmUgQlVTX1NQQUNFX0lOVkFMSURfREFUQQkofjApCisjZGVmaW5lIEJVU19TUEFDRV9VTlJF
U1RSSUNURUQJKH4wKQorCisvKgorICogTWFwIGEgcmVnaW9uIG9mIGRldmljZSBidXMgc3BhY2Ug
aW50byBDUFUgdmlydHVhbCBhZGRyZXNzIHNwYWNlLgorICovCisKK2ludCBidXNfc3BhY2VfbWFw
KGJ1c19zcGFjZV90YWdfdCB0YWcsIGJ1c19hZGRyX3QgYWRkciwgYnVzX3NpemVfdCBzaXplLAor
ICAgIGludCBmbGFncywgYnVzX3NwYWNlX2hhbmRsZV90ICpic2hwKTsKKworLyoKKyAqIFVubWFw
IGEgcmVnaW9uIG9mIGRldmljZSBidXMgc3BhY2UuCisgKi8KKwordm9pZCBidXNfc3BhY2VfdW5t
YXAoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKyAgICBidXNf
c2l6ZV90IHNpemUpOworCisvKgorICogR2V0IGEgbmV3IGhhbmRsZSBmb3IgYSBzdWJyZWdpb24g
b2YgYW4gYWxyZWFkeS1tYXBwZWQgYXJlYSBvZiBidXMgc3BhY2UuCisgKi8KKworc3RhdGljIF9f
aW5saW5lIGludCBidXNfc3BhY2Vfc3VicmVnaW9uKGJ1c19zcGFjZV90YWdfdCB0LAorCQkJCQli
dXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJCQlidXNfc2l6ZV90IG9mZnNldCwgYnVzX3NpemVf
dCBzaXplLAorCQkJCQlidXNfc3BhY2VfaGFuZGxlX3QgKm5ic2hwKTsKKworc3RhdGljIF9faW5s
aW5lIGludAorYnVzX3NwYWNlX3N1YnJlZ2lvbihidXNfc3BhY2VfdGFnX3QgdCBfX3VudXNlZCwg
YnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJICAgIGJ1c19zaXplX3Qgb2Zmc2V0LCBidXNfc2l6
ZV90IHNpemUgX191bnVzZWQsCisJCSAgICBidXNfc3BhY2VfaGFuZGxlX3QgKm5ic2hwKQorewor
CisJKm5ic2hwID0gYnNoICsgb2Zmc2V0OworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBBbGxv
Y2F0ZSBhIHJlZ2lvbiBvZiBtZW1vcnkgdGhhdCBpcyBhY2Nlc3NpYmxlIHRvIGRldmljZXMgaW4g
YnVzIHNwYWNlLgorICovCisKK2ludAlidXNfc3BhY2VfYWxsb2MoYnVzX3NwYWNlX3RhZ190IHQs
IGJ1c19hZGRyX3QgcnN0YXJ0LAorCQkJYnVzX2FkZHJfdCByZW5kLCBidXNfc2l6ZV90IHNpemUs
IGJ1c19zaXplX3QgYWxpZ24sCisJCQlidXNfc2l6ZV90IGJvdW5kYXJ5LCBpbnQgZmxhZ3MsIGJ1
c19hZGRyX3QgKmFkZHJwLAorCQkJYnVzX3NwYWNlX2hhbmRsZV90ICpic2hwKTsKKworLyoKKyAq
IEZyZWUgYSByZWdpb24gb2YgYnVzIHNwYWNlIGFjY2Vzc2libGUgbWVtb3J5LgorICovCisKK3N0
YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV9mcmVlKGJ1c19zcGFjZV90YWdfdCB0LCBidXNf
c3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJCSAgICBidXNfc2l6ZV90IHNpemUpOworCitzdGF0aWMg
X19pbmxpbmUgdm9pZAorYnVzX3NwYWNlX2ZyZWUoYnVzX3NwYWNlX3RhZ190IHQgX191bnVzZWQs
IGJ1c19zcGFjZV9oYW5kbGVfdCBic2ggX191bnVzZWQsCisJICAgICAgIGJ1c19zaXplX3Qgc2l6
ZSBfX3VudXNlZCkKK3sKK30KKworCisvKgorICogUmVhZCBhIDEsIDIsIDQsIG9yIDggYnl0ZSBx
dWFudGl0eSBmcm9tIGJ1cyBzcGFjZQorICogZGVzY3JpYmVkIGJ5IHRhZy9oYW5kbGUvb2Zmc2V0
LgorICovCitzdGF0aWMgX19pbmxpbmUgdV9pbnQ4X3QgYnVzX3NwYWNlX3JlYWRfMShidXNfc3Bh
Y2VfdGFnX3QgdGFnLAorCQkJCQkgIGJ1c19zcGFjZV9oYW5kbGVfdCBoYW5kbGUsCisJCQkJCSAg
YnVzX3NpemVfdCBvZmZzZXQpOworCitzdGF0aWMgX19pbmxpbmUgdV9pbnQxNl90IGJ1c19zcGFj
ZV9yZWFkXzIoYnVzX3NwYWNlX3RhZ190IHRhZywKKwkJCQkJICAgYnVzX3NwYWNlX2hhbmRsZV90
IGhhbmRsZSwKKwkJCQkJICAgYnVzX3NpemVfdCBvZmZzZXQpOworCitzdGF0aWMgX19pbmxpbmUg
dV9pbnQzMl90IGJ1c19zcGFjZV9yZWFkXzQoYnVzX3NwYWNlX3RhZ190IHRhZywKKwkJCQkJICAg
YnVzX3NwYWNlX2hhbmRsZV90IGhhbmRsZSwKKwkJCQkJICAgYnVzX3NpemVfdCBvZmZzZXQpOwor
CisjaWZkZWYgX19hbWQ2NF9fCitzdGF0aWMgX19pbmxpbmUgdWludDY0X3QgYnVzX3NwYWNlX3Jl
YWRfOChidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJCQkgIGJ1c19zcGFjZV9oYW5kbGVfdCBoYW5k
bGUsCisJCQkJCSAgYnVzX3NpemVfdCBvZmZzZXQpOworI2VuZGlmCisKK3N0YXRpYyBfX2lubGlu
ZSB1X2ludDhfdAorYnVzX3NwYWNlX3JlYWRfMShidXNfc3BhY2VfdGFnX3QgdGFnLCBidXNfc3Bh
Y2VfaGFuZGxlX3QgaGFuZGxlLAorCQkgYnVzX3NpemVfdCBvZmZzZXQpCit7CisKKwlpZiAodGFn
ID09IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCXJldHVybiAoaW5iKGhhbmRsZSArIG9mZnNldCkpOwor
CXJldHVybiAoKih2b2xhdGlsZSB1X2ludDhfdCAqKShoYW5kbGUgKyBvZmZzZXQpKTsKK30KKwor
c3RhdGljIF9faW5saW5lIHVfaW50MTZfdAorYnVzX3NwYWNlX3JlYWRfMihidXNfc3BhY2VfdGFn
X3QgdGFnLCBidXNfc3BhY2VfaGFuZGxlX3QgaGFuZGxlLAorCQkgYnVzX3NpemVfdCBvZmZzZXQp
Cit7CisKKwlpZiAodGFnID09IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCXJldHVybiAoaW53KGhhbmRs
ZSArIG9mZnNldCkpOworCXJldHVybiAoKih2b2xhdGlsZSB1X2ludDE2X3QgKikoaGFuZGxlICsg
b2Zmc2V0KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1X2ludDMyX3QKK2J1c19zcGFjZV9yZWFk
XzQoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNlX2hhbmRsZV90IGhhbmRsZSwKKwkJIGJ1
c19zaXplX3Qgb2Zmc2V0KQoreworCisJaWYgKHRhZyA9PSBYODZfQlVTX1NQQUNFX0lPKQorCQly
ZXR1cm4gKGlubChoYW5kbGUgKyBvZmZzZXQpKTsKKwlyZXR1cm4gKCoodm9sYXRpbGUgdV9pbnQz
Ml90ICopKGhhbmRsZSArIG9mZnNldCkpOworfQorCisjaWZkZWYgX19hbWQ2NF9fCitzdGF0aWMg
X19pbmxpbmUgdWludDY0X3QKK2J1c19zcGFjZV9yZWFkXzgoYnVzX3NwYWNlX3RhZ190IHRhZywg
YnVzX3NwYWNlX2hhbmRsZV90IGhhbmRsZSwKKwkJIGJ1c19zaXplX3Qgb2Zmc2V0KQoreworCisJ
aWYgKHRhZyA9PSBYODZfQlVTX1NQQUNFX0lPKSAvKiBObyA4IGJ5dGUgSU8gc3BhY2UgYWNjZXNz
IG9uIHg4NiAqLworCQlyZXR1cm4gKEJVU19TUEFDRV9JTlZBTElEX0RBVEEpOworCXJldHVybiAo
Kih2b2xhdGlsZSB1aW50NjRfdCAqKShoYW5kbGUgKyBvZmZzZXQpKTsKK30KKyNlbmRpZgorCisv
KgorICogUmVhZCBgY291bnQnIDEsIDIsIDQsIG9yIDggYnl0ZSBxdWFudGl0aWVzIGZyb20gYnVz
IHNwYWNlCisgKiBkZXNjcmliZWQgYnkgdGFnL2hhbmRsZS9vZmZzZXQgYW5kIGNvcHkgaW50byBi
dWZmZXIgcHJvdmlkZWQuCisgKi8KK3N0YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV9yZWFk
X211bHRpXzEoYnVzX3NwYWNlX3RhZ190IHRhZywKKwkJCQkJICAgIGJ1c19zcGFjZV9oYW5kbGVf
dCBic2gsCisJCQkJCSAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQ4X3QgKmFkZHIsCisJCQkJ
CSAgICBzaXplX3QgY291bnQpOworCitzdGF0aWMgX19pbmxpbmUgdm9pZCBidXNfc3BhY2VfcmVh
ZF9tdWx0aV8yKGJ1c19zcGFjZV90YWdfdCB0YWcsCisJCQkJCSAgICBidXNfc3BhY2VfaGFuZGxl
X3QgYnNoLAorCQkJCQkgICAgYnVzX3NpemVfdCBvZmZzZXQsIHVfaW50MTZfdCAqYWRkciwKKwkJ
CQkJICAgIHNpemVfdCBjb3VudCk7CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV9y
ZWFkX211bHRpXzQoYnVzX3NwYWNlX3RhZ190IHRhZywKKwkJCQkJICAgIGJ1c19zcGFjZV9oYW5k
bGVfdCBic2gsCisJCQkJCSAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQzMl90ICphZGRyLAor
CQkJCQkgICAgc2l6ZV90IGNvdW50KTsKKworc3RhdGljIF9faW5saW5lIHZvaWQKK2J1c19zcGFj
ZV9yZWFkX211bHRpXzEoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNlX2hhbmRsZV90IGJz
aCwKKwkJICAgICAgIGJ1c19zaXplX3Qgb2Zmc2V0LCB1X2ludDhfdCAqYWRkciwgc2l6ZV90IGNv
dW50KQoreworCisJaWYgKHRhZyA9PSBYODZfQlVTX1NQQUNFX0lPKQorCQlpbnNiKGJzaCArIG9m
ZnNldCwgYWRkciwgY291bnQpOworCWVsc2UgeworI2lmZGVmIF9fR05VQ0xJS0VfQVNNCisJCV9f
YXNtIF9fdm9sYXRpbGUoIgkJCQlcblwKKwkJCWNsZAkJCQkJXG5cCisJCTE6CW1vdmIgKCUyKSwl
JWFsCQkJCVxuXAorCQkJc3Rvc2IJCQkJCVxuXAorCQkJbG9vcCAxYiIJCQkJOgorCQkgICAgIj1E
IiAoYWRkciksICI9YyIgKGNvdW50KQkJCToKKwkJICAgICJyIiAoYnNoICsgb2Zmc2V0KSwgIjAi
IChhZGRyKSwgIjEiIChjb3VudCkJOgorCQkgICAgIiVlYXgiLCAibWVtb3J5Iik7CisjZW5kaWYK
Kwl9Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitidXNfc3BhY2VfcmVhZF9tdWx0aV8yKGJ1
c19zcGFjZV90YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCSAgICAgICBidXNf
c2l6ZV90IG9mZnNldCwgdV9pbnQxNl90ICphZGRyLCBzaXplX3QgY291bnQpCit7CisKKwlpZiAo
dGFnID09IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCWluc3coYnNoICsgb2Zmc2V0LCBhZGRyLCBjb3Vu
dCk7CisJZWxzZSB7CisjaWZkZWYgX19HTlVDTElLRV9BU00KKwkJX19hc20gX192b2xhdGlsZSgi
CQkJCVxuXAorCQkJY2xkCQkJCQlcblwKKwkJMToJbW92dyAoJTIpLCUlYXgJCQkJXG5cCisJCQlz
dG9zdwkJCQkJXG5cCisJCQlsb29wIDFiIgkJCQk6CisJCSAgICAiPUQiIChhZGRyKSwgIj1jIiAo
Y291bnQpCQkJOgorCQkgICAgInIiIChic2ggKyBvZmZzZXQpLCAiMCIgKGFkZHIpLCAiMSIgKGNv
dW50KQk6CisJCSAgICAiJWVheCIsICJtZW1vcnkiKTsKKyNlbmRpZgorCX0KK30KKworc3RhdGlj
IF9faW5saW5lIHZvaWQKK2J1c19zcGFjZV9yZWFkX211bHRpXzQoYnVzX3NwYWNlX3RhZ190IHRh
ZywgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJICAgICAgIGJ1c19zaXplX3Qgb2Zmc2V0LCB1
X2ludDMyX3QgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKworCWlmICh0YWcgPT0gWDg2X0JVU19T
UEFDRV9JTykKKwkJaW5zbChic2ggKyBvZmZzZXQsIGFkZHIsIGNvdW50KTsKKwllbHNlIHsKKyNp
ZmRlZiBfX0dOVUNMSUtFX0FTTQorCQlfX2FzbSBfX3ZvbGF0aWxlKCIJCQkJXG5cCisJCQljbGQJ
CQkJCVxuXAorCQkxOgltb3ZsICglMiksJSVlYXgJCQkJXG5cCisJCQlzdG9zbAkJCQkJXG5cCisJ
CQlsb29wIDFiIgkJCQk6CisJCSAgICAiPUQiIChhZGRyKSwgIj1jIiAoY291bnQpCQkJOgorCQkg
ICAgInIiIChic2ggKyBvZmZzZXQpLCAiMCIgKGFkZHIpLCAiMSIgKGNvdW50KQk6CisJCSAgICAi
JWVheCIsICJtZW1vcnkiKTsKKyNlbmRpZgorCX0KK30KKworI2lmIDAJLyogQ2F1c2UgYSBsaW5r
IGVycm9yIGZvciBidXNfc3BhY2VfcmVhZF9tdWx0aV84ICovCisjZGVmaW5lCWJ1c19zcGFjZV9y
ZWFkX211bHRpXzgJISEhIGJ1c19zcGFjZV9yZWFkX211bHRpXzggdW5pbXBsZW1lbnRlZCAhISEK
KyNlbmRpZgorCisvKgorICogUmVhZCBgY291bnQnIDEsIDIsIDQsIG9yIDggYnl0ZSBxdWFudGl0
aWVzIGZyb20gYnVzIHNwYWNlCisgKiBkZXNjcmliZWQgYnkgdGFnL2hhbmRsZSBhbmQgc3RhcnRp
bmcgYXQgYG9mZnNldCcgYW5kIGNvcHkgaW50bworICogYnVmZmVyIHByb3ZpZGVkLgorICovCitz
dGF0aWMgX19pbmxpbmUgdm9pZCBidXNfc3BhY2VfcmVhZF9yZWdpb25fMShidXNfc3BhY2VfdGFn
X3QgdGFnLAorCQkJCQkgICAgIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCQkJCSAgICAgYnVz
X3NpemVfdCBvZmZzZXQsIHVfaW50OF90ICphZGRyLAorCQkJCQkgICAgIHNpemVfdCBjb3VudCk7
CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV9yZWFkX3JlZ2lvbl8yKGJ1c19zcGFj
ZV90YWdfdCB0YWcsCisJCQkJCSAgICAgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJCQkJICAg
ICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQxNl90ICphZGRyLAorCQkJCQkgICAgIHNpemVfdCBj
b3VudCk7CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV9yZWFkX3JlZ2lvbl80KGJ1
c19zcGFjZV90YWdfdCB0YWcsCisJCQkJCSAgICAgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJ
CQkJICAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQzMl90ICphZGRyLAorCQkJCQkgICAgIHNp
emVfdCBjb3VudCk7CisKKworc3RhdGljIF9faW5saW5lIHZvaWQKK2J1c19zcGFjZV9yZWFkX3Jl
Z2lvbl8xKGJ1c19zcGFjZV90YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCQli
dXNfc2l6ZV90IG9mZnNldCwgdV9pbnQ4X3QgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKworCWlm
ICh0YWcgPT0gWDg2X0JVU19TUEFDRV9JTykgeworCQlpbnQgX3BvcnRfID0gYnNoICsgb2Zmc2V0
OworI2lmZGVmIF9fR05VQ0xJS0VfQVNNCisJCV9fYXNtIF9fdm9sYXRpbGUoIgkJCQlcblwKKwkJ
CWNsZAkJCQkJXG5cCisJCTE6CWluYiAldzIsJSVhbAkJCQlcblwKKwkJCXN0b3NiCQkJCQlcblwK
KwkJCWluY2wgJTIJCQkJCVxuXAorCQkJbG9vcCAxYiIJCQkJOgorCQkgICAgIj1EIiAoYWRkciks
ICI9YyIgKGNvdW50KSwgIj1kIiAoX3BvcnRfKQk6CisJCSAgICAiMCIgKGFkZHIpLCAiMSIgKGNv
dW50KSwgIjIiIChfcG9ydF8pCToKKwkJICAgICIlZWF4IiwgIm1lbW9yeSIsICJjYyIpOworI2Vu
ZGlmCisJfSBlbHNlIHsKKwkJYnVzX3NwYWNlX2hhbmRsZV90IF9wb3J0XyA9IGJzaCArIG9mZnNl
dDsKKyNpZmRlZiBfX0dOVUNMSUtFX0FTTQorCQlfX2FzbSBfX3ZvbGF0aWxlKCIJCQkJXG5cCisJ
CQljbGQJCQkJCVxuXAorCQkJcmVwbmUJCQkJCVxuXAorCQkJbW92c2IiCQkJCQk6CisJCSAgICAi
PUQiIChhZGRyKSwgIj1jIiAoY291bnQpLCAiPVMiIChfcG9ydF8pCToKKwkJICAgICIwIiAoYWRk
ciksICIxIiAoY291bnQpLCAiMiIgKF9wb3J0XykJOgorCQkgICAgIm1lbW9yeSIsICJjYyIpOwor
I2VuZGlmCisJfQorfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorYnVzX3NwYWNlX3JlYWRfcmVn
aW9uXzIoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJCWJ1
c19zaXplX3Qgb2Zmc2V0LCB1X2ludDE2X3QgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKworCWlm
ICh0YWcgPT0gWDg2X0JVU19TUEFDRV9JTykgeworCQlpbnQgX3BvcnRfID0gYnNoICsgb2Zmc2V0
OworI2lmZGVmIF9fR05VQ0xJS0VfQVNNCisJCV9fYXNtIF9fdm9sYXRpbGUoIgkJCQlcblwKKwkJ
CWNsZAkJCQkJXG5cCisJCTE6CWludyAldzIsJSVheAkJCQlcblwKKwkJCXN0b3N3CQkJCQlcblwK
KwkJCWFkZGwgJDIsJTIJCQkJXG5cCisJCQlsb29wIDFiIgkJCQk6CisJCSAgICAiPUQiIChhZGRy
KSwgIj1jIiAoY291bnQpLCAiPWQiIChfcG9ydF8pCToKKwkJICAgICIwIiAoYWRkciksICIxIiAo
Y291bnQpLCAiMiIgKF9wb3J0XykJOgorCQkgICAgIiVlYXgiLCAibWVtb3J5IiwgImNjIik7Cisj
ZW5kaWYKKwl9IGVsc2UgeworCQlidXNfc3BhY2VfaGFuZGxlX3QgX3BvcnRfID0gYnNoICsgb2Zm
c2V0OworI2lmZGVmIF9fR05VQ0xJS0VfQVNNCisJCV9fYXNtIF9fdm9sYXRpbGUoIgkJCQlcblwK
KwkJCWNsZAkJCQkJXG5cCisJCQlyZXBuZQkJCQkJXG5cCisJCQltb3ZzdyIJCQkJCToKKwkJICAg
ICI9RCIgKGFkZHIpLCAiPWMiIChjb3VudCksICI9UyIgKF9wb3J0XykJOgorCQkgICAgIjAiIChh
ZGRyKSwgIjEiIChjb3VudCksICIyIiAoX3BvcnRfKQk6CisJCSAgICAibWVtb3J5IiwgImNjIik7
CisjZW5kaWYKKwl9Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitidXNfc3BhY2VfcmVhZF9y
ZWdpb25fNChidXNfc3BhY2VfdGFnX3QgdGFnLCBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJ
YnVzX3NpemVfdCBvZmZzZXQsIHVfaW50MzJfdCAqYWRkciwgc2l6ZV90IGNvdW50KQoreworCisJ
aWYgKHRhZyA9PSBYODZfQlVTX1NQQUNFX0lPKSB7CisJCWludCBfcG9ydF8gPSBic2ggKyBvZmZz
ZXQ7CisjaWZkZWYgX19HTlVDTElLRV9BU00KKwkJX19hc20gX192b2xhdGlsZSgiCQkJCVxuXAor
CQkJY2xkCQkJCQlcblwKKwkJMToJaW5sICV3MiwlJWVheAkJCQlcblwKKwkJCXN0b3NsCQkJCQlc
blwKKwkJCWFkZGwgJDQsJTIJCQkJXG5cCisJCQlsb29wIDFiIgkJCQk6CisJCSAgICAiPUQiIChh
ZGRyKSwgIj1jIiAoY291bnQpLCAiPWQiIChfcG9ydF8pCToKKwkJICAgICIwIiAoYWRkciksICIx
IiAoY291bnQpLCAiMiIgKF9wb3J0XykJOgorCQkgICAgIiVlYXgiLCAibWVtb3J5IiwgImNjIik7
CisjZW5kaWYKKwl9IGVsc2UgeworCQlidXNfc3BhY2VfaGFuZGxlX3QgX3BvcnRfID0gYnNoICsg
b2Zmc2V0OworI2lmZGVmIF9fR05VQ0xJS0VfQVNNCisJCV9fYXNtIF9fdm9sYXRpbGUoIgkJCQlc
blwKKwkJCWNsZAkJCQkJXG5cCisJCQlyZXBuZQkJCQkJXG5cCisJCQltb3ZzbCIJCQkJCToKKwkJ
ICAgICI9RCIgKGFkZHIpLCAiPWMiIChjb3VudCksICI9UyIgKF9wb3J0XykJOgorCQkgICAgIjAi
IChhZGRyKSwgIjEiIChjb3VudCksICIyIiAoX3BvcnRfKQk6CisJCSAgICAibWVtb3J5IiwgImNj
Iik7CisjZW5kaWYKKwl9Cit9CisKKyNpZiAwCS8qIENhdXNlIGEgbGluayBlcnJvciBmb3IgYnVz
X3NwYWNlX3JlYWRfcmVnaW9uXzggKi8KKyNkZWZpbmUJYnVzX3NwYWNlX3JlYWRfcmVnaW9uXzgJ
ISEhIGJ1c19zcGFjZV9yZWFkX3JlZ2lvbl84IHVuaW1wbGVtZW50ZWQgISEhCisjZW5kaWYKKwor
LyoKKyAqIFdyaXRlIHRoZSAxLCAyLCA0LCBvciA4IGJ5dGUgdmFsdWUgYHZhbHVlJyB0byBidXMg
c3BhY2UKKyAqIGRlc2NyaWJlZCBieSB0YWcvaGFuZGxlL29mZnNldC4KKyAqLworCitzdGF0aWMg
X19pbmxpbmUgdm9pZCBidXNfc3BhY2Vfd3JpdGVfMShidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJ
CSAgICAgICBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJCSAgICAgICBidXNfc2l6ZV90IG9m
ZnNldCwgdV9pbnQ4X3QgdmFsdWUpOworCitzdGF0aWMgX19pbmxpbmUgdm9pZCBidXNfc3BhY2Vf
d3JpdGVfMihidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJCSAgICAgICBidXNfc3BhY2VfaGFuZGxl
X3QgYnNoLAorCQkJCSAgICAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQxNl90IHZhbHVlKTsK
Kworc3RhdGljIF9faW5saW5lIHZvaWQgYnVzX3NwYWNlX3dyaXRlXzQoYnVzX3NwYWNlX3RhZ190
IHRhZywKKwkJCQkgICAgICAgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJCQkgICAgICAgYnVz
X3NpemVfdCBvZmZzZXQsIHVfaW50MzJfdCB2YWx1ZSk7CisKKyNpZmRlZiBfX2FtZDY0X18KK3N0
YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV93cml0ZV84KGJ1c19zcGFjZV90YWdfdCB0YWcs
CisJCQkJICAgICAgIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCQkJICAgICAgIGJ1c19zaXpl
X3Qgb2Zmc2V0LCB1aW50NjRfdCB2YWx1ZSk7CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lIHZv
aWQKK2J1c19zcGFjZV93cml0ZV8xKGJ1c19zcGFjZV90YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5k
bGVfdCBic2gsCisJCSAgICAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQ4X3QgdmFsdWUpCit7
CisKKwlpZiAodGFnID09IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCW91dGIoYnNoICsgb2Zmc2V0LCB2
YWx1ZSk7CisJZWxzZQorCQkqKHZvbGF0aWxlIHVfaW50OF90ICopKGJzaCArIG9mZnNldCkgPSB2
YWx1ZTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2J1c19zcGFjZV93cml0ZV8yKGJ1c19z
cGFjZV90YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCSAgICAgICBidXNfc2l6
ZV90IG9mZnNldCwgdV9pbnQxNl90IHZhbHVlKQoreworCisJaWYgKHRhZyA9PSBYODZfQlVTX1NQ
QUNFX0lPKQorCQlvdXR3KGJzaCArIG9mZnNldCwgdmFsdWUpOworCWVsc2UKKwkJKih2b2xhdGls
ZSB1X2ludDE2X3QgKikoYnNoICsgb2Zmc2V0KSA9IHZhbHVlOworfQorCitzdGF0aWMgX19pbmxp
bmUgdm9pZAorYnVzX3NwYWNlX3dyaXRlXzQoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNl
X2hhbmRsZV90IGJzaCwKKwkJICAgICAgIGJ1c19zaXplX3Qgb2Zmc2V0LCB1X2ludDMyX3QgdmFs
dWUpCit7CisKKwlpZiAodGFnID09IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCW91dGwoYnNoICsgb2Zm
c2V0LCB2YWx1ZSk7CisJZWxzZQorCQkqKHZvbGF0aWxlIHVfaW50MzJfdCAqKShic2ggKyBvZmZz
ZXQpID0gdmFsdWU7Cit9CisKKyNpZmRlZiBfX2FtZDY0X18KK3N0YXRpYyBfX2lubGluZSB2b2lk
CitidXNfc3BhY2Vfd3JpdGVfOChidXNfc3BhY2VfdGFnX3QgdGFnLCBidXNfc3BhY2VfaGFuZGxl
X3QgYnNoLAorCQkgIGJ1c19zaXplX3Qgb2Zmc2V0LCB1aW50NjRfdCB2YWx1ZSkKK3sKKworCWlm
ICh0YWcgPT0gWDg2X0JVU19TUEFDRV9JTykgLyogTm8gOCBieXRlIElPIHNwYWNlIGFjY2VzcyBv
biB4ODYgKi8KKwkJcmV0dXJuOworCWVsc2UKKwkJKih2b2xhdGlsZSB1aW50NjRfdCAqKShic2gg
KyBvZmZzZXQpID0gdmFsdWU7Cit9CisjZW5kaWYKKworLyoKKyAqIFdyaXRlIGBjb3VudCcgMSwg
MiwgNCwgb3IgOCBieXRlIHF1YW50aXRpZXMgZnJvbSB0aGUgYnVmZmVyCisgKiBwcm92aWRlZCB0
byBidXMgc3BhY2UgZGVzY3JpYmVkIGJ5IHRhZy9oYW5kbGUvb2Zmc2V0LgorICovCisKK3N0YXRp
YyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV93cml0ZV9tdWx0aV8xKGJ1c19zcGFjZV90YWdfdCB0
YWcsCisJCQkJCSAgICAgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJCQkJICAgICBidXNfc2l6
ZV90IG9mZnNldCwKKwkJCQkJICAgICBjb25zdCB1X2ludDhfdCAqYWRkciwKKwkJCQkJICAgICBz
aXplX3QgY291bnQpOworc3RhdGljIF9faW5saW5lIHZvaWQgYnVzX3NwYWNlX3dyaXRlX211bHRp
XzIoYnVzX3NwYWNlX3RhZ190IHRhZywKKwkJCQkJICAgICBidXNfc3BhY2VfaGFuZGxlX3QgYnNo
LAorCQkJCQkgICAgIGJ1c19zaXplX3Qgb2Zmc2V0LAorCQkJCQkgICAgIGNvbnN0IHVfaW50MTZf
dCAqYWRkciwKKwkJCQkJICAgICBzaXplX3QgY291bnQpOworCitzdGF0aWMgX19pbmxpbmUgdm9p
ZCBidXNfc3BhY2Vfd3JpdGVfbXVsdGlfNChidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJCQkgICAg
IGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCQkJCSAgICAgYnVzX3NpemVfdCBvZmZzZXQsCisJ
CQkJCSAgICAgY29uc3QgdV9pbnQzMl90ICphZGRyLAorCQkJCQkgICAgIHNpemVfdCBjb3VudCk7
CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitidXNfc3BhY2Vfd3JpdGVfbXVsdGlfMShidXNfc3Bh
Y2VfdGFnX3QgdGFnLCBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJYnVzX3NpemVfdCBvZmZz
ZXQsIGNvbnN0IHVfaW50OF90ICphZGRyLCBzaXplX3QgY291bnQpCit7CisKKwlpZiAodGFnID09
IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCW91dHNiKGJzaCArIG9mZnNldCwgYWRkciwgY291bnQpOwor
CWVsc2UgeworI2lmZGVmIF9fR05VQ0xJS0VfQVNNCisJCV9fYXNtIF9fdm9sYXRpbGUoIgkJCQlc
blwKKwkJCWNsZAkJCQkJXG5cCisJCTE6CWxvZHNiCQkJCQlcblwKKwkJCW1vdmIgJSVhbCwoJTIp
CQkJCVxuXAorCQkJbG9vcCAxYiIJCQkJOgorCQkgICAgIj1TIiAoYWRkciksICI9YyIgKGNvdW50
KQkJCToKKwkJICAgICJyIiAoYnNoICsgb2Zmc2V0KSwgIjAiIChhZGRyKSwgIjEiIChjb3VudCkJ
OgorCQkgICAgIiVlYXgiLCAibWVtb3J5IiwgImNjIik7CisjZW5kaWYKKwl9Cit9CisKK3N0YXRp
YyBfX2lubGluZSB2b2lkCitidXNfc3BhY2Vfd3JpdGVfbXVsdGlfMihidXNfc3BhY2VfdGFnX3Qg
dGFnLCBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJYnVzX3NpemVfdCBvZmZzZXQsIGNvbnN0
IHVfaW50MTZfdCAqYWRkciwgc2l6ZV90IGNvdW50KQoreworCisJaWYgKHRhZyA9PSBYODZfQlVT
X1NQQUNFX0lPKQorCQlvdXRzdyhic2ggKyBvZmZzZXQsIGFkZHIsIGNvdW50KTsKKwllbHNlIHsK
KyNpZmRlZiBfX0dOVUNMSUtFX0FTTQorCQlfX2FzbSBfX3ZvbGF0aWxlKCIJCQkJXG5cCisJCQlj
bGQJCQkJCVxuXAorCQkxOglsb2RzdwkJCQkJXG5cCisJCQltb3Z3ICUlYXgsKCUyKQkJCQlcblwK
KwkJCWxvb3AgMWIiCQkJCToKKwkJICAgICI9UyIgKGFkZHIpLCAiPWMiIChjb3VudCkJCQk6CisJ
CSAgICAiciIgKGJzaCArIG9mZnNldCksICIwIiAoYWRkciksICIxIiAoY291bnQpCToKKwkJICAg
ICIlZWF4IiwgIm1lbW9yeSIsICJjYyIpOworI2VuZGlmCisJfQorfQorCitzdGF0aWMgX19pbmxp
bmUgdm9pZAorYnVzX3NwYWNlX3dyaXRlX211bHRpXzQoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVz
X3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJCWJ1c19zaXplX3Qgb2Zmc2V0LCBjb25zdCB1X2ludDMy
X3QgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKworCWlmICh0YWcgPT0gWDg2X0JVU19TUEFDRV9J
TykKKwkJb3V0c2woYnNoICsgb2Zmc2V0LCBhZGRyLCBjb3VudCk7CisJZWxzZSB7CisjaWZkZWYg
X19HTlVDTElLRV9BU00KKwkJX19hc20gX192b2xhdGlsZSgiCQkJCVxuXAorCQkJY2xkCQkJCQlc
blwKKwkJMToJbG9kc2wJCQkJCVxuXAorCQkJbW92bCAlJWVheCwoJTIpCQkJCVxuXAorCQkJbG9v
cCAxYiIJCQkJOgorCQkgICAgIj1TIiAoYWRkciksICI9YyIgKGNvdW50KQkJCToKKwkJICAgICJy
IiAoYnNoICsgb2Zmc2V0KSwgIjAiIChhZGRyKSwgIjEiIChjb3VudCkJOgorCQkgICAgIiVlYXgi
LCAibWVtb3J5IiwgImNjIik7CisjZW5kaWYKKwl9Cit9CisKKyNpZiAwCS8qIENhdXNlIGEgbGlu
ayBlcnJvciBmb3IgYnVzX3NwYWNlX3dyaXRlX211bHRpXzggKi8KKyNkZWZpbmUJYnVzX3NwYWNl
X3dyaXRlX211bHRpXzgodCwgaCwgbywgYSwgYykJCQkJXAorCQkJISEhIGJ1c19zcGFjZV93cml0
ZV9tdWx0aV84IHVuaW1wbGVtZW50ZWQgISEhCisjZW5kaWYKKworLyoKKyAqIFdyaXRlIGBjb3Vu
dCcgMSwgMiwgNCwgb3IgOCBieXRlIHF1YW50aXRpZXMgZnJvbSB0aGUgYnVmZmVyIHByb3ZpZGVk
CisgKiB0byBidXMgc3BhY2UgZGVzY3JpYmVkIGJ5IHRhZy9oYW5kbGUgc3RhcnRpbmcgYXQgYG9m
ZnNldCcuCisgKi8KKworc3RhdGljIF9faW5saW5lIHZvaWQgYnVzX3NwYWNlX3dyaXRlX3JlZ2lv
bl8xKGJ1c19zcGFjZV90YWdfdCB0YWcsCisJCQkJCSAgICAgIGJ1c19zcGFjZV9oYW5kbGVfdCBi
c2gsCisJCQkJCSAgICAgIGJ1c19zaXplX3Qgb2Zmc2V0LAorCQkJCQkgICAgICBjb25zdCB1X2lu
dDhfdCAqYWRkciwKKwkJCQkJICAgICAgc2l6ZV90IGNvdW50KTsKK3N0YXRpYyBfX2lubGluZSB2
b2lkIGJ1c19zcGFjZV93cml0ZV9yZWdpb25fMihidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJCQkg
ICAgICBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJCQkgICAgICBidXNfc2l6ZV90IG9mZnNl
dCwKKwkJCQkJICAgICAgY29uc3QgdV9pbnQxNl90ICphZGRyLAorCQkJCQkgICAgICBzaXplX3Qg
Y291bnQpOworc3RhdGljIF9faW5saW5lIHZvaWQgYnVzX3NwYWNlX3dyaXRlX3JlZ2lvbl80KGJ1
c19zcGFjZV90YWdfdCB0YWcsCisJCQkJCSAgICAgIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJ
CQkJCSAgICAgIGJ1c19zaXplX3Qgb2Zmc2V0LAorCQkJCQkgICAgICBjb25zdCB1X2ludDMyX3Qg
KmFkZHIsCisJCQkJCSAgICAgIHNpemVfdCBjb3VudCk7CisKK3N0YXRpYyBfX2lubGluZSB2b2lk
CitidXNfc3BhY2Vfd3JpdGVfcmVnaW9uXzEoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNl
X2hhbmRsZV90IGJzaCwKKwkJCSBidXNfc2l6ZV90IG9mZnNldCwgY29uc3QgdV9pbnQ4X3QgKmFk
ZHIsIHNpemVfdCBjb3VudCkKK3sKKworCWlmICh0YWcgPT0gWDg2X0JVU19TUEFDRV9JTykgewor
CQlpbnQgX3BvcnRfID0gYnNoICsgb2Zmc2V0OworI2lmZGVmIF9fR05VQ0xJS0VfQVNNCisJCV9f
YXNtIF9fdm9sYXRpbGUoIgkJCQlcblwKKwkJCWNsZAkJCQkJXG5cCisJCTE6CWxvZHNiCQkJCQlc
blwKKwkJCW91dGIgJSVhbCwldzAJCQkJXG5cCisJCQlpbmNsICUwCQkJCQlcblwKKwkJCWxvb3Ag
MWIiCQkJCToKKwkJICAgICI9ZCIgKF9wb3J0XyksICI9UyIgKGFkZHIpLCAiPWMiIChjb3VudCkJ
OgorCQkgICAgIjAiIChfcG9ydF8pLCAiMSIgKGFkZHIpLCAiMiIgKGNvdW50KQk6CisJCSAgICAi
JWVheCIsICJtZW1vcnkiLCAiY2MiKTsKKyNlbmRpZgorCX0gZWxzZSB7CisJCWJ1c19zcGFjZV9o
YW5kbGVfdCBfcG9ydF8gPSBic2ggKyBvZmZzZXQ7CisjaWZkZWYgX19HTlVDTElLRV9BU00KKwkJ
X19hc20gX192b2xhdGlsZSgiCQkJCVxuXAorCQkJY2xkCQkJCQlcblwKKwkJCXJlcG5lCQkJCQlc
blwKKwkJCW1vdnNiIgkJCQkJOgorCQkgICAgIj1EIiAoX3BvcnRfKSwgIj1TIiAoYWRkciksICI9
YyIgKGNvdW50KQk6CisJCSAgICAiMCIgKF9wb3J0XyksICIxIiAoYWRkciksICIyIiAoY291bnQp
CToKKwkJICAgICJtZW1vcnkiLCAiY2MiKTsKKyNlbmRpZgorCX0KK30KKworc3RhdGljIF9faW5s
aW5lIHZvaWQKK2J1c19zcGFjZV93cml0ZV9yZWdpb25fMihidXNfc3BhY2VfdGFnX3QgdGFnLCBi
dXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJIGJ1c19zaXplX3Qgb2Zmc2V0LCBjb25zdCB1X2lu
dDE2X3QgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKworCWlmICh0YWcgPT0gWDg2X0JVU19TUEFD
RV9JTykgeworCQlpbnQgX3BvcnRfID0gYnNoICsgb2Zmc2V0OworI2lmZGVmIF9fR05VQ0xJS0Vf
QVNNCisJCV9fYXNtIF9fdm9sYXRpbGUoIgkJCQlcblwKKwkJCWNsZAkJCQkJXG5cCisJCTE6CWxv
ZHN3CQkJCQlcblwKKwkJCW91dHcgJSVheCwldzAJCQkJXG5cCisJCQlhZGRsICQyLCUwCQkJCVxu
XAorCQkJbG9vcCAxYiIJCQkJOgorCQkgICAgIj1kIiAoX3BvcnRfKSwgIj1TIiAoYWRkciksICI9
YyIgKGNvdW50KQk6CisJCSAgICAiMCIgKF9wb3J0XyksICIxIiAoYWRkciksICIyIiAoY291bnQp
CToKKwkJICAgICIlZWF4IiwgIm1lbW9yeSIsICJjYyIpOworI2VuZGlmCisJfSBlbHNlIHsKKwkJ
YnVzX3NwYWNlX2hhbmRsZV90IF9wb3J0XyA9IGJzaCArIG9mZnNldDsKKyNpZmRlZiBfX0dOVUNM
SUtFX0FTTQorCQlfX2FzbSBfX3ZvbGF0aWxlKCIJCQkJXG5cCisJCQljbGQJCQkJCVxuXAorCQkJ
cmVwbmUJCQkJCVxuXAorCQkJbW92c3ciCQkJCQk6CisJCSAgICAiPUQiIChfcG9ydF8pLCAiPVMi
IChhZGRyKSwgIj1jIiAoY291bnQpCToKKwkJICAgICIwIiAoX3BvcnRfKSwgIjEiIChhZGRyKSwg
IjIiIChjb3VudCkJOgorCQkgICAgIm1lbW9yeSIsICJjYyIpOworI2VuZGlmCisJfQorfQorCitz
dGF0aWMgX19pbmxpbmUgdm9pZAorYnVzX3NwYWNlX3dyaXRlX3JlZ2lvbl80KGJ1c19zcGFjZV90
YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCQkgYnVzX3NpemVfdCBvZmZzZXQs
IGNvbnN0IHVfaW50MzJfdCAqYWRkciwgc2l6ZV90IGNvdW50KQoreworCisJaWYgKHRhZyA9PSBY
ODZfQlVTX1NQQUNFX0lPKSB7CisJCWludCBfcG9ydF8gPSBic2ggKyBvZmZzZXQ7CisjaWZkZWYg
X19HTlVDTElLRV9BU00KKwkJX19hc20gX192b2xhdGlsZSgiCQkJCVxuXAorCQkJY2xkCQkJCQlc
blwKKwkJMToJbG9kc2wJCQkJCVxuXAorCQkJb3V0bCAlJWVheCwldzAJCQkJXG5cCisJCQlhZGRs
ICQ0LCUwCQkJCVxuXAorCQkJbG9vcCAxYiIJCQkJOgorCQkgICAgIj1kIiAoX3BvcnRfKSwgIj1T
IiAoYWRkciksICI9YyIgKGNvdW50KQk6CisJCSAgICAiMCIgKF9wb3J0XyksICIxIiAoYWRkciks
ICIyIiAoY291bnQpCToKKwkJICAgICIlZWF4IiwgIm1lbW9yeSIsICJjYyIpOworI2VuZGlmCisJ
fSBlbHNlIHsKKwkJYnVzX3NwYWNlX2hhbmRsZV90IF9wb3J0XyA9IGJzaCArIG9mZnNldDsKKyNp
ZmRlZiBfX0dOVUNMSUtFX0FTTQorCQlfX2FzbSBfX3ZvbGF0aWxlKCIJCQkJXG5cCisJCQljbGQJ
CQkJCVxuXAorCQkJcmVwbmUJCQkJCVxuXAorCQkJbW92c2wiCQkJCQk6CisJCSAgICAiPUQiIChf
cG9ydF8pLCAiPVMiIChhZGRyKSwgIj1jIiAoY291bnQpCToKKwkJICAgICIwIiAoX3BvcnRfKSwg
IjEiIChhZGRyKSwgIjIiIChjb3VudCkJOgorCQkgICAgIm1lbW9yeSIsICJjYyIpOworI2VuZGlm
CisJfQorfQorCisjaWYgMAkvKiBDYXVzZSBhIGxpbmsgZXJyb3IgZm9yIGJ1c19zcGFjZV93cml0
ZV9yZWdpb25fOCAqLworI2RlZmluZQlidXNfc3BhY2Vfd3JpdGVfcmVnaW9uXzgJCQkJCVwKKwkJ
CSEhISBidXNfc3BhY2Vfd3JpdGVfcmVnaW9uXzggdW5pbXBsZW1lbnRlZCAhISEKKyNlbmRpZgor
CisvKgorICogV3JpdGUgdGhlIDEsIDIsIDQsIG9yIDggYnl0ZSB2YWx1ZSBgdmFsJyB0byBidXMg
c3BhY2UgZGVzY3JpYmVkCisgKiBieSB0YWcvaGFuZGxlL29mZnNldCBgY291bnQnIHRpbWVzLgor
ICovCisKK3N0YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV9zZXRfbXVsdGlfMShidXNfc3Bh
Y2VfdGFnX3QgdGFnLAorCQkJCQkgICBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJCQkgICBi
dXNfc2l6ZV90IG9mZnNldCwKKwkJCQkJICAgdV9pbnQ4X3QgdmFsdWUsIHNpemVfdCBjb3VudCk7
CitzdGF0aWMgX19pbmxpbmUgdm9pZCBidXNfc3BhY2Vfc2V0X211bHRpXzIoYnVzX3NwYWNlX3Rh
Z190IHRhZywKKwkJCQkJICAgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJCQkJICAgYnVzX3Np
emVfdCBvZmZzZXQsCisJCQkJCSAgIHVfaW50MTZfdCB2YWx1ZSwgc2l6ZV90IGNvdW50KTsKK3N0
YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV9zZXRfbXVsdGlfNChidXNfc3BhY2VfdGFnX3Qg
dGFnLAorCQkJCQkgICBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJCQkgICBidXNfc2l6ZV90
IG9mZnNldCwKKwkJCQkJICAgdV9pbnQzMl90IHZhbHVlLCBzaXplX3QgY291bnQpOworCitzdGF0
aWMgX19pbmxpbmUgdm9pZAorYnVzX3NwYWNlX3NldF9tdWx0aV8xKGJ1c19zcGFjZV90YWdfdCB0
YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCSAgICAgIGJ1c19zaXplX3Qgb2Zmc2V0LCB1
X2ludDhfdCB2YWx1ZSwgc2l6ZV90IGNvdW50KQoreworCWJ1c19zcGFjZV9oYW5kbGVfdCBhZGRy
ID0gYnNoICsgb2Zmc2V0OworCisJaWYgKHRhZyA9PSBYODZfQlVTX1NQQUNFX0lPKQorCQl3aGls
ZSAoY291bnQtLSkKKwkJCW91dGIoYWRkciwgdmFsdWUpOworCWVsc2UKKwkJd2hpbGUgKGNvdW50
LS0pCisJCQkqKHZvbGF0aWxlIHVfaW50OF90ICopKGFkZHIpID0gdmFsdWU7Cit9CisKK3N0YXRp
YyBfX2lubGluZSB2b2lkCitidXNfc3BhY2Vfc2V0X211bHRpXzIoYnVzX3NwYWNlX3RhZ190IHRh
ZywgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJICAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9p
bnQxNl90IHZhbHVlLCBzaXplX3QgY291bnQpCit7CisJYnVzX3NwYWNlX2hhbmRsZV90IGFkZHIg
PSBic2ggKyBvZmZzZXQ7CisKKwlpZiAodGFnID09IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCXdoaWxl
IChjb3VudC0tKQorCQkJb3V0dyhhZGRyLCB2YWx1ZSk7CisJZWxzZQorCQl3aGlsZSAoY291bnQt
LSkKKwkJCSoodm9sYXRpbGUgdV9pbnQxNl90ICopKGFkZHIpID0gdmFsdWU7Cit9CisKK3N0YXRp
YyBfX2lubGluZSB2b2lkCitidXNfc3BhY2Vfc2V0X211bHRpXzQoYnVzX3NwYWNlX3RhZ190IHRh
ZywgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJICAgICAgYnVzX3NpemVfdCBvZmZzZXQsIHVf
aW50MzJfdCB2YWx1ZSwgc2l6ZV90IGNvdW50KQoreworCWJ1c19zcGFjZV9oYW5kbGVfdCBhZGRy
ID0gYnNoICsgb2Zmc2V0OworCisJaWYgKHRhZyA9PSBYODZfQlVTX1NQQUNFX0lPKQorCQl3aGls
ZSAoY291bnQtLSkKKwkJCW91dGwoYWRkciwgdmFsdWUpOworCWVsc2UKKwkJd2hpbGUgKGNvdW50
LS0pCisJCQkqKHZvbGF0aWxlIHVfaW50MzJfdCAqKShhZGRyKSA9IHZhbHVlOworfQorCisjaWYg
MAkvKiBDYXVzZSBhIGxpbmsgZXJyb3IgZm9yIGJ1c19zcGFjZV9zZXRfbXVsdGlfOCAqLworI2Rl
ZmluZQlidXNfc3BhY2Vfc2V0X211bHRpXzggISEhIGJ1c19zcGFjZV9zZXRfbXVsdGlfOCB1bmlt
cGxlbWVudGVkICEhIQorI2VuZGlmCisKKy8qCisgKiBXcml0ZSBgY291bnQnIDEsIDIsIDQsIG9y
IDggYnl0ZSB2YWx1ZSBgdmFsJyB0byBidXMgc3BhY2UgZGVzY3JpYmVkCisgKiBieSB0YWcvaGFu
ZGxlIHN0YXJ0aW5nIGF0IGBvZmZzZXQnLgorICovCisKK3N0YXRpYyBfX2lubGluZSB2b2lkIGJ1
c19zcGFjZV9zZXRfcmVnaW9uXzEoYnVzX3NwYWNlX3RhZ190IHRhZywKKwkJCQkJICAgIGJ1c19z
cGFjZV9oYW5kbGVfdCBic2gsCisJCQkJCSAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQ4X3Qg
dmFsdWUsCisJCQkJCSAgICBzaXplX3QgY291bnQpOworc3RhdGljIF9faW5saW5lIHZvaWQgYnVz
X3NwYWNlX3NldF9yZWdpb25fMihidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJCQkgICAgYnVzX3Nw
YWNlX2hhbmRsZV90IGJzaCwKKwkJCQkJICAgIGJ1c19zaXplX3Qgb2Zmc2V0LCB1X2ludDE2X3Qg
dmFsdWUsCisJCQkJCSAgICBzaXplX3QgY291bnQpOworc3RhdGljIF9faW5saW5lIHZvaWQgYnVz
X3NwYWNlX3NldF9yZWdpb25fNChidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJCQkgICAgYnVzX3Nw
YWNlX2hhbmRsZV90IGJzaCwKKwkJCQkJICAgIGJ1c19zaXplX3Qgb2Zmc2V0LCB1X2ludDMyX3Qg
dmFsdWUsCisJCQkJCSAgICBzaXplX3QgY291bnQpOworCitzdGF0aWMgX19pbmxpbmUgdm9pZAor
YnVzX3NwYWNlX3NldF9yZWdpb25fMShidXNfc3BhY2VfdGFnX3QgdGFnLCBidXNfc3BhY2VfaGFu
ZGxlX3QgYnNoLAorCQkgICAgICAgYnVzX3NpemVfdCBvZmZzZXQsIHVfaW50OF90IHZhbHVlLCBz
aXplX3QgY291bnQpCit7CisJYnVzX3NwYWNlX2hhbmRsZV90IGFkZHIgPSBic2ggKyBvZmZzZXQ7
CisKKwlpZiAodGFnID09IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCWZvciAoOyBjb3VudCAhPSAwOyBj
b3VudC0tLCBhZGRyKyspCisJCQlvdXRiKGFkZHIsIHZhbHVlKTsKKwllbHNlCisJCWZvciAoOyBj
b3VudCAhPSAwOyBjb3VudC0tLCBhZGRyKyspCisJCQkqKHZvbGF0aWxlIHVfaW50OF90ICopKGFk
ZHIpID0gdmFsdWU7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitidXNfc3BhY2Vfc2V0X3Jl
Z2lvbl8yKGJ1c19zcGFjZV90YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCSAg
ICAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQxNl90IHZhbHVlLCBzaXplX3QgY291bnQpCit7
CisJYnVzX3NwYWNlX2hhbmRsZV90IGFkZHIgPSBic2ggKyBvZmZzZXQ7CisKKwlpZiAodGFnID09
IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCWZvciAoOyBjb3VudCAhPSAwOyBjb3VudC0tLCBhZGRyICs9
IDIpCisJCQlvdXR3KGFkZHIsIHZhbHVlKTsKKwllbHNlCisJCWZvciAoOyBjb3VudCAhPSAwOyBj
b3VudC0tLCBhZGRyICs9IDIpCisJCQkqKHZvbGF0aWxlIHVfaW50MTZfdCAqKShhZGRyKSA9IHZh
bHVlOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorYnVzX3NwYWNlX3NldF9yZWdpb25fNChi
dXNfc3BhY2VfdGFnX3QgdGFnLCBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkgICAgICAgYnVz
X3NpemVfdCBvZmZzZXQsIHVfaW50MzJfdCB2YWx1ZSwgc2l6ZV90IGNvdW50KQoreworCWJ1c19z
cGFjZV9oYW5kbGVfdCBhZGRyID0gYnNoICsgb2Zmc2V0OworCisJaWYgKHRhZyA9PSBYODZfQlVT
X1NQQUNFX0lPKQorCQlmb3IgKDsgY291bnQgIT0gMDsgY291bnQtLSwgYWRkciArPSA0KQorCQkJ
b3V0bChhZGRyLCB2YWx1ZSk7CisJZWxzZQorCQlmb3IgKDsgY291bnQgIT0gMDsgY291bnQtLSwg
YWRkciArPSA0KQorCQkJKih2b2xhdGlsZSB1X2ludDMyX3QgKikoYWRkcikgPSB2YWx1ZTsKK30K
KworI2lmIDAJLyogQ2F1c2UgYSBsaW5rIGVycm9yIGZvciBidXNfc3BhY2Vfc2V0X3JlZ2lvbl84
ICovCisjZGVmaW5lCWJ1c19zcGFjZV9zZXRfcmVnaW9uXzgJISEhIGJ1c19zcGFjZV9zZXRfcmVn
aW9uXzggdW5pbXBsZW1lbnRlZCAhISEKKyNlbmRpZgorCisvKgorICogQ29weSBgY291bnQnIDEs
IDIsIDQsIG9yIDggYnl0ZSB2YWx1ZXMgZnJvbSBidXMgc3BhY2Ugc3RhcnRpbmcKKyAqIGF0IHRh
Zy9ic2gxL29mZjEgdG8gYnVzIHNwYWNlIHN0YXJ0aW5nIGF0IHRhZy9ic2gyL29mZjIuCisgKi8K
Kworc3RhdGljIF9faW5saW5lIHZvaWQgYnVzX3NwYWNlX2NvcHlfcmVnaW9uXzEoYnVzX3NwYWNl
X3RhZ190IHRhZywKKwkJCQkJICAgICBidXNfc3BhY2VfaGFuZGxlX3QgYnNoMSwKKwkJCQkJICAg
ICBidXNfc2l6ZV90IG9mZjEsCisJCQkJCSAgICAgYnVzX3NwYWNlX2hhbmRsZV90IGJzaDIsCisJ
CQkJCSAgICAgYnVzX3NpemVfdCBvZmYyLCBzaXplX3QgY291bnQpOworCitzdGF0aWMgX19pbmxp
bmUgdm9pZCBidXNfc3BhY2VfY29weV9yZWdpb25fMihidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJ
CQkgICAgIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gxLAorCQkJCQkgICAgIGJ1c19zaXplX3Qgb2Zm
MSwKKwkJCQkJICAgICBidXNfc3BhY2VfaGFuZGxlX3QgYnNoMiwKKwkJCQkJICAgICBidXNfc2l6
ZV90IG9mZjIsIHNpemVfdCBjb3VudCk7CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFj
ZV9jb3B5X3JlZ2lvbl80KGJ1c19zcGFjZV90YWdfdCB0YWcsCisJCQkJCSAgICAgYnVzX3NwYWNl
X2hhbmRsZV90IGJzaDEsCisJCQkJCSAgICAgYnVzX3NpemVfdCBvZmYxLAorCQkJCQkgICAgIGJ1
c19zcGFjZV9oYW5kbGVfdCBic2gyLAorCQkJCQkgICAgIGJ1c19zaXplX3Qgb2ZmMiwgc2l6ZV90
IGNvdW50KTsKKworc3RhdGljIF9faW5saW5lIHZvaWQKK2J1c19zcGFjZV9jb3B5X3JlZ2lvbl8x
KGJ1c19zcGFjZV90YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gxLAorCQkJYnVzX3Np
emVfdCBvZmYxLCBidXNfc3BhY2VfaGFuZGxlX3QgYnNoMiwKKwkJCWJ1c19zaXplX3Qgb2ZmMiwg
c2l6ZV90IGNvdW50KQoreworCWJ1c19zcGFjZV9oYW5kbGVfdCBhZGRyMSA9IGJzaDEgKyBvZmYx
OworCWJ1c19zcGFjZV9oYW5kbGVfdCBhZGRyMiA9IGJzaDIgKyBvZmYyOworCisJaWYgKHRhZyA9
PSBYODZfQlVTX1NQQUNFX0lPKSB7CisJCWlmIChhZGRyMSA+PSBhZGRyMikgeworCQkJLyogc3Jj
IGFmdGVyIGRlc3Q6IGNvcHkgZm9yd2FyZCAqLworCQkJZm9yICg7IGNvdW50ICE9IDA7IGNvdW50
LS0sIGFkZHIxKyssIGFkZHIyKyspCisJCQkJb3V0YihhZGRyMiwgaW5iKGFkZHIxKSk7CisJCX0g
ZWxzZSB7CisJCQkvKiBkZXN0IGFmdGVyIHNyYzogY29weSBiYWNrd2FyZHMgKi8KKwkJCWZvciAo
YWRkcjEgKz0gKGNvdW50IC0gMSksIGFkZHIyICs9IChjb3VudCAtIDEpOworCQkJICAgIGNvdW50
ICE9IDA7IGNvdW50LS0sIGFkZHIxLS0sIGFkZHIyLS0pCisJCQkJb3V0YihhZGRyMiwgaW5iKGFk
ZHIxKSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoYWRkcjEgPj0gYWRkcjIpIHsKKwkJCS8qIHNy
YyBhZnRlciBkZXN0OiBjb3B5IGZvcndhcmQgKi8KKwkJCWZvciAoOyBjb3VudCAhPSAwOyBjb3Vu
dC0tLCBhZGRyMSsrLCBhZGRyMisrKQorCQkJCSoodm9sYXRpbGUgdV9pbnQ4X3QgKikoYWRkcjIp
ID0KKwkJCQkgICAgKih2b2xhdGlsZSB1X2ludDhfdCAqKShhZGRyMSk7CisJCX0gZWxzZSB7CisJ
CQkvKiBkZXN0IGFmdGVyIHNyYzogY29weSBiYWNrd2FyZHMgKi8KKwkJCWZvciAoYWRkcjEgKz0g
KGNvdW50IC0gMSksIGFkZHIyICs9IChjb3VudCAtIDEpOworCQkJICAgIGNvdW50ICE9IDA7IGNv
dW50LS0sIGFkZHIxLS0sIGFkZHIyLS0pCisJCQkJKih2b2xhdGlsZSB1X2ludDhfdCAqKShhZGRy
MikgPQorCQkJCSAgICAqKHZvbGF0aWxlIHVfaW50OF90ICopKGFkZHIxKTsKKwkJfQorCX0KK30K
Kworc3RhdGljIF9faW5saW5lIHZvaWQKK2J1c19zcGFjZV9jb3B5X3JlZ2lvbl8yKGJ1c19zcGFj
ZV90YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gxLAorCQkJYnVzX3NpemVfdCBvZmYx
LCBidXNfc3BhY2VfaGFuZGxlX3QgYnNoMiwKKwkJCWJ1c19zaXplX3Qgb2ZmMiwgc2l6ZV90IGNv
dW50KQoreworCWJ1c19zcGFjZV9oYW5kbGVfdCBhZGRyMSA9IGJzaDEgKyBvZmYxOworCWJ1c19z
cGFjZV9oYW5kbGVfdCBhZGRyMiA9IGJzaDIgKyBvZmYyOworCisJaWYgKHRhZyA9PSBYODZfQlVT
X1NQQUNFX0lPKSB7CisJCWlmIChhZGRyMSA+PSBhZGRyMikgeworCQkJLyogc3JjIGFmdGVyIGRl
c3Q6IGNvcHkgZm9yd2FyZCAqLworCQkJZm9yICg7IGNvdW50ICE9IDA7IGNvdW50LS0sIGFkZHIx
ICs9IDIsIGFkZHIyICs9IDIpCisJCQkJb3V0dyhhZGRyMiwgaW53KGFkZHIxKSk7CisJCX0gZWxz
ZSB7CisJCQkvKiBkZXN0IGFmdGVyIHNyYzogY29weSBiYWNrd2FyZHMgKi8KKwkJCWZvciAoYWRk
cjEgKz0gMiAqIChjb3VudCAtIDEpLCBhZGRyMiArPSAyICogKGNvdW50IC0gMSk7CisJCQkgICAg
Y291bnQgIT0gMDsgY291bnQtLSwgYWRkcjEgLT0gMiwgYWRkcjIgLT0gMikKKwkJCQlvdXR3KGFk
ZHIyLCBpbncoYWRkcjEpKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChhZGRyMSA+PSBhZGRyMikg
eworCQkJLyogc3JjIGFmdGVyIGRlc3Q6IGNvcHkgZm9yd2FyZCAqLworCQkJZm9yICg7IGNvdW50
ICE9IDA7IGNvdW50LS0sIGFkZHIxICs9IDIsIGFkZHIyICs9IDIpCisJCQkJKih2b2xhdGlsZSB1
X2ludDE2X3QgKikoYWRkcjIpID0KKwkJCQkgICAgKih2b2xhdGlsZSB1X2ludDE2X3QgKikoYWRk
cjEpOworCQl9IGVsc2UgeworCQkJLyogZGVzdCBhZnRlciBzcmM6IGNvcHkgYmFja3dhcmRzICov
CisJCQlmb3IgKGFkZHIxICs9IDIgKiAoY291bnQgLSAxKSwgYWRkcjIgKz0gMiAqIChjb3VudCAt
IDEpOworCQkJICAgIGNvdW50ICE9IDA7IGNvdW50LS0sIGFkZHIxIC09IDIsIGFkZHIyIC09IDIp
CisJCQkJKih2b2xhdGlsZSB1X2ludDE2X3QgKikoYWRkcjIpID0KKwkJCQkgICAgKih2b2xhdGls
ZSB1X2ludDE2X3QgKikoYWRkcjEpOworCQl9CisJfQorfQorCitzdGF0aWMgX19pbmxpbmUgdm9p
ZAorYnVzX3NwYWNlX2NvcHlfcmVnaW9uXzQoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNl
X2hhbmRsZV90IGJzaDEsCisJCQlidXNfc2l6ZV90IG9mZjEsIGJ1c19zcGFjZV9oYW5kbGVfdCBi
c2gyLAorCQkJYnVzX3NpemVfdCBvZmYyLCBzaXplX3QgY291bnQpCit7CisJYnVzX3NwYWNlX2hh
bmRsZV90IGFkZHIxID0gYnNoMSArIG9mZjE7CisJYnVzX3NwYWNlX2hhbmRsZV90IGFkZHIyID0g
YnNoMiArIG9mZjI7CisKKwlpZiAodGFnID09IFg4Nl9CVVNfU1BBQ0VfSU8pIHsKKwkJaWYgKGFk
ZHIxID49IGFkZHIyKSB7CisJCQkvKiBzcmMgYWZ0ZXIgZGVzdDogY29weSBmb3J3YXJkICovCisJ
CQlmb3IgKDsgY291bnQgIT0gMDsgY291bnQtLSwgYWRkcjEgKz0gNCwgYWRkcjIgKz0gNCkKKwkJ
CQlvdXRsKGFkZHIyLCBpbmwoYWRkcjEpKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGRlc3QgYWZ0ZXIg
c3JjOiBjb3B5IGJhY2t3YXJkcyAqLworCQkJZm9yIChhZGRyMSArPSA0ICogKGNvdW50IC0gMSks
IGFkZHIyICs9IDQgKiAoY291bnQgLSAxKTsKKwkJCSAgICBjb3VudCAhPSAwOyBjb3VudC0tLCBh
ZGRyMSAtPSA0LCBhZGRyMiAtPSA0KQorCQkJCW91dGwoYWRkcjIsIGlubChhZGRyMSkpOworCQl9
CisJfSBlbHNlIHsKKwkJaWYgKGFkZHIxID49IGFkZHIyKSB7CisJCQkvKiBzcmMgYWZ0ZXIgZGVz
dDogY29weSBmb3J3YXJkICovCisJCQlmb3IgKDsgY291bnQgIT0gMDsgY291bnQtLSwgYWRkcjEg
Kz0gNCwgYWRkcjIgKz0gNCkKKwkJCQkqKHZvbGF0aWxlIHVfaW50MzJfdCAqKShhZGRyMikgPQor
CQkJCSAgICAqKHZvbGF0aWxlIHVfaW50MzJfdCAqKShhZGRyMSk7CisJCX0gZWxzZSB7CisJCQkv
KiBkZXN0IGFmdGVyIHNyYzogY29weSBiYWNrd2FyZHMgKi8KKwkJCWZvciAoYWRkcjEgKz0gNCAq
IChjb3VudCAtIDEpLCBhZGRyMiArPSA0ICogKGNvdW50IC0gMSk7CisJCQkgICAgY291bnQgIT0g
MDsgY291bnQtLSwgYWRkcjEgLT0gNCwgYWRkcjIgLT0gNCkKKwkJCQkqKHZvbGF0aWxlIHVfaW50
MzJfdCAqKShhZGRyMikgPQorCQkJCSAgICAqKHZvbGF0aWxlIHVfaW50MzJfdCAqKShhZGRyMSk7
CisJCX0KKwl9Cit9CisKKyNpZiAwCS8qIENhdXNlIGEgbGluayBlcnJvciBmb3IgYnVzX3NwYWNl
X2NvcHlfOCAqLworI2RlZmluZQlidXNfc3BhY2VfY29weV9yZWdpb25fOAkhISEgYnVzX3NwYWNl
X2NvcHlfcmVnaW9uXzggdW5pbXBsZW1lbnRlZCAhISEKKyNlbmRpZgorCisvKgorICogQnVzIHJl
YWQvd3JpdGUgYmFycmllciBtZXRob2RzLgorICoKKyAqCXZvaWQgYnVzX3NwYWNlX2JhcnJpZXIo
YnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKyAqCQkJICAgICAg
IGJ1c19zaXplX3Qgb2Zmc2V0LCBidXNfc2l6ZV90IGxlbiwgaW50IGZsYWdzKTsKKyAqCisgKgor
ICogTm90ZSB0aGF0IEJVU19TUEFDRV9CQVJSSUVSX1dSSVRFIGRvZXNuJ3QgZG8gYW55dGhpbmcg
b3RoZXIgdGhhbgorICogcHJldmVudCByZW9yZGVyaW5nIGJ5IHRoZSBjb21waWxlcjsgYWxsIElu
dGVsIHg4NiBwcm9jZXNzb3JzIGN1cnJlbnRseQorICogcmV0aXJlIG9wZXJhdGlvbnMgb3V0c2lk
ZSB0aGUgQ1BVIGluIHByb2dyYW0gb3JkZXIuCisgKi8KKyNkZWZpbmUJQlVTX1NQQUNFX0JBUlJJ
RVJfUkVBRAkweDAxCQkvKiBmb3JjZSByZWFkIGJhcnJpZXIgKi8KKyNkZWZpbmUJQlVTX1NQQUNF
X0JBUlJJRVJfV1JJVEUJMHgwMgkJLyogZm9yY2Ugd3JpdGUgYmFycmllciAqLworCitzdGF0aWMg
X19pbmxpbmUgdm9pZAorYnVzX3NwYWNlX2JhcnJpZXIoYnVzX3NwYWNlX3RhZ190IHRhZyBfX3Vu
dXNlZCwgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCBfX3VudXNlZCwKKwkJICBidXNfc2l6ZV90IG9m
ZnNldCBfX3VudXNlZCwgYnVzX3NpemVfdCBsZW4gX191bnVzZWQsIGludCBmbGFncykKK3sKKyNp
ZmRlZiBfX0dOVUNMSUtFX0FTTQorCWlmIChmbGFncyAmIEJVU19TUEFDRV9CQVJSSUVSX1JFQUQp
CisjaWZkZWYgX19hbWQ2NF9fCisJCV9fYXNtIF9fdm9sYXRpbGUoImxvY2s7IGFkZGwgJDAsMCgl
JXJzcCkiIDogOiA6ICJtZW1vcnkiKTsKKyNlbHNlCisJCV9fYXNtIF9fdm9sYXRpbGUoImxvY2s7
IGFkZGwgJDAsMCglJWVzcCkiIDogOiA6ICJtZW1vcnkiKTsKKyNlbmRpZgorCWVsc2UKKwkJX19j
b21waWxlcl9tZW1iYXIoKTsKKyNlbmRpZgorfQorCisjaWZkZWYgQlVTX1NQQUNFX05PX0xFR0FD
WQorI3VuZGVmIGluYgorI3VuZGVmIG91dGIKKyNkZWZpbmUgaW5iKGEpIGNvbXBpbGVyX2Vycm9y
CisjZGVmaW5lIGludyhhKSBjb21waWxlcl9lcnJvcgorI2RlZmluZSBpbmwoYSkgY29tcGlsZXJf
ZXJyb3IKKyNkZWZpbmUgb3V0YihhLCBiKSBjb21waWxlcl9lcnJvcgorI2RlZmluZSBvdXR3KGEs
IGIpIGNvbXBpbGVyX2Vycm9yCisjZGVmaW5lIG91dGwoYSwgYikgY29tcGlsZXJfZXJyb3IKKyNl
bmRpZgorCisjaW5jbHVkZSA8bWFjaGluZS9idXNfZG1hLmg+CisKKy8qCisgKiBTdHJlYW0gYWNj
ZXNzZXMgYXJlIHRoZSBzYW1lIGFzIG5vcm1hbCBhY2Nlc3NlcyBvbiB4ODY7IHRoZXJlIGFyZSBu
bworICogc3VwcG9ydGVkIGJ1cyBzeXN0ZW1zIHdpdGggYW4gZW5kaWFuZXNzIGRpZmZlcmVudCBm
cm9tIHRoZSBob3N0IG9uZS4KKyAqLworI2RlZmluZQlidXNfc3BhY2VfcmVhZF9zdHJlYW1fMSh0
LCBoLCBvKQlidXNfc3BhY2VfcmVhZF8xKCh0KSwgKGgpLCAobykpCisjZGVmaW5lCWJ1c19zcGFj
ZV9yZWFkX3N0cmVhbV8yKHQsIGgsIG8pCWJ1c19zcGFjZV9yZWFkXzIoKHQpLCAoaCksIChvKSkK
KyNkZWZpbmUJYnVzX3NwYWNlX3JlYWRfc3RyZWFtXzQodCwgaCwgbykJYnVzX3NwYWNlX3JlYWRf
NCgodCksIChoKSwgKG8pKQorCisjZGVmaW5lCWJ1c19zcGFjZV9yZWFkX211bHRpX3N0cmVhbV8x
KHQsIGgsIG8sIGEsIGMpIFwKKwlidXNfc3BhY2VfcmVhZF9tdWx0aV8xKCh0KSwgKGgpLCAobyks
IChhKSwgKGMpKQorI2RlZmluZQlidXNfc3BhY2VfcmVhZF9tdWx0aV9zdHJlYW1fMih0LCBoLCBv
LCBhLCBjKSBcCisJYnVzX3NwYWNlX3JlYWRfbXVsdGlfMigodCksIChoKSwgKG8pLCAoYSksIChj
KSkKKyNkZWZpbmUJYnVzX3NwYWNlX3JlYWRfbXVsdGlfc3RyZWFtXzQodCwgaCwgbywgYSwgYykg
XAorCWJ1c19zcGFjZV9yZWFkX211bHRpXzQoKHQpLCAoaCksIChvKSwgKGEpLCAoYykpCisKKyNk
ZWZpbmUJYnVzX3NwYWNlX3dyaXRlX3N0cmVhbV8xKHQsIGgsIG8sIHYpIFwKKwlidXNfc3BhY2Vf
d3JpdGVfMSgodCksIChoKSwgKG8pLCAodikpCisjZGVmaW5lCWJ1c19zcGFjZV93cml0ZV9zdHJl
YW1fMih0LCBoLCBvLCB2KSBcCisJYnVzX3NwYWNlX3dyaXRlXzIoKHQpLCAoaCksIChvKSwgKHYp
KQorI2RlZmluZQlidXNfc3BhY2Vfd3JpdGVfc3RyZWFtXzQodCwgaCwgbywgdikgXAorCWJ1c19z
cGFjZV93cml0ZV80KCh0KSwgKGgpLCAobyksICh2KSkKKworI2RlZmluZQlidXNfc3BhY2Vfd3Jp
dGVfbXVsdGlfc3RyZWFtXzEodCwgaCwgbywgYSwgYykgXAorCWJ1c19zcGFjZV93cml0ZV9tdWx0
aV8xKCh0KSwgKGgpLCAobyksIChhKSwgKGMpKQorI2RlZmluZQlidXNfc3BhY2Vfd3JpdGVfbXVs
dGlfc3RyZWFtXzIodCwgaCwgbywgYSwgYykgXAorCWJ1c19zcGFjZV93cml0ZV9tdWx0aV8yKCh0
KSwgKGgpLCAobyksIChhKSwgKGMpKQorI2RlZmluZQlidXNfc3BhY2Vfd3JpdGVfbXVsdGlfc3Ry
ZWFtXzQodCwgaCwgbywgYSwgYykgXAorCWJ1c19zcGFjZV93cml0ZV9tdWx0aV80KCh0KSwgKGgp
LCAobyksIChhKSwgKGMpKQorCisjZGVmaW5lCWJ1c19zcGFjZV9zZXRfbXVsdGlfc3RyZWFtXzEo
dCwgaCwgbywgdiwgYykgXAorCWJ1c19zcGFjZV9zZXRfbXVsdGlfMSgodCksIChoKSwgKG8pLCAo
diksIChjKSkKKyNkZWZpbmUJYnVzX3NwYWNlX3NldF9tdWx0aV9zdHJlYW1fMih0LCBoLCBvLCB2
LCBjKSBcCisJYnVzX3NwYWNlX3NldF9tdWx0aV8yKCh0KSwgKGgpLCAobyksICh2KSwgKGMpKQor
I2RlZmluZQlidXNfc3BhY2Vfc2V0X211bHRpX3N0cmVhbV80KHQsIGgsIG8sIHYsIGMpIFwKKwli
dXNfc3BhY2Vfc2V0X211bHRpXzQoKHQpLCAoaCksIChvKSwgKHYpLCAoYykpCisKKyNkZWZpbmUJ
YnVzX3NwYWNlX3JlYWRfcmVnaW9uX3N0cmVhbV8xKHQsIGgsIG8sIGEsIGMpIFwKKwlidXNfc3Bh
Y2VfcmVhZF9yZWdpb25fMSgodCksIChoKSwgKG8pLCAoYSksIChjKSkKKyNkZWZpbmUJYnVzX3Nw
YWNlX3JlYWRfcmVnaW9uX3N0cmVhbV8yKHQsIGgsIG8sIGEsIGMpIFwKKwlidXNfc3BhY2VfcmVh
ZF9yZWdpb25fMigodCksIChoKSwgKG8pLCAoYSksIChjKSkKKyNkZWZpbmUJYnVzX3NwYWNlX3Jl
YWRfcmVnaW9uX3N0cmVhbV80KHQsIGgsIG8sIGEsIGMpIFwKKwlidXNfc3BhY2VfcmVhZF9yZWdp
b25fNCgodCksIChoKSwgKG8pLCAoYSksIChjKSkKKworI2RlZmluZQlidXNfc3BhY2Vfd3JpdGVf
cmVnaW9uX3N0cmVhbV8xKHQsIGgsIG8sIGEsIGMpIFwKKwlidXNfc3BhY2Vfd3JpdGVfcmVnaW9u
XzEoKHQpLCAoaCksIChvKSwgKGEpLCAoYykpCisjZGVmaW5lCWJ1c19zcGFjZV93cml0ZV9yZWdp
b25fc3RyZWFtXzIodCwgaCwgbywgYSwgYykgXAorCWJ1c19zcGFjZV93cml0ZV9yZWdpb25fMigo
dCksIChoKSwgKG8pLCAoYSksIChjKSkKKyNkZWZpbmUJYnVzX3NwYWNlX3dyaXRlX3JlZ2lvbl9z
dHJlYW1fNCh0LCBoLCBvLCBhLCBjKSBcCisJYnVzX3NwYWNlX3dyaXRlX3JlZ2lvbl80KCh0KSwg
KGgpLCAobyksIChhKSwgKGMpKQorCisjZGVmaW5lCWJ1c19zcGFjZV9zZXRfcmVnaW9uX3N0cmVh
bV8xKHQsIGgsIG8sIHYsIGMpIFwKKwlidXNfc3BhY2Vfc2V0X3JlZ2lvbl8xKCh0KSwgKGgpLCAo
byksICh2KSwgKGMpKQorI2RlZmluZQlidXNfc3BhY2Vfc2V0X3JlZ2lvbl9zdHJlYW1fMih0LCBo
LCBvLCB2LCBjKSBcCisJYnVzX3NwYWNlX3NldF9yZWdpb25fMigodCksIChoKSwgKG8pLCAodiks
IChjKSkKKyNkZWZpbmUJYnVzX3NwYWNlX3NldF9yZWdpb25fc3RyZWFtXzQodCwgaCwgbywgdiwg
YykgXAorCWJ1c19zcGFjZV9zZXRfcmVnaW9uXzQoKHQpLCAoaCksIChvKSwgKHYpLCAoYykpCisK
KyNkZWZpbmUJYnVzX3NwYWNlX2NvcHlfcmVnaW9uX3N0cmVhbV8xKHQsIGgxLCBvMSwgaDIsIG8y
LCBjKSBcCisJYnVzX3NwYWNlX2NvcHlfcmVnaW9uXzEoKHQpLCAoaDEpLCAobzEpLCAoaDIpLCAo
bzIpLCAoYykpCisjZGVmaW5lCWJ1c19zcGFjZV9jb3B5X3JlZ2lvbl9zdHJlYW1fMih0LCBoMSwg
bzEsIGgyLCBvMiwgYykgXAorCWJ1c19zcGFjZV9jb3B5X3JlZ2lvbl8yKCh0KSwgKGgxKSwgKG8x
KSwgKGgyKSwgKG8yKSwgKGMpKQorI2RlZmluZQlidXNfc3BhY2VfY29weV9yZWdpb25fc3RyZWFt
XzQodCwgaDEsIG8xLCBoMiwgbzIsIGMpIFwKKwlidXNfc3BhY2VfY29weV9yZWdpb25fNCgodCks
IChoMSksIChvMSksIChoMiksIChvMiksIChjKSkKKworI2VuZGlmIC8qIF9YODZfQlVTX0hfICov
CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2J1c2RtYV9pbXBs
LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9idXNkbWFfaW1wbC5oCi0tLSB1c3Iv
c3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvYnVzZG1hX2ltcGwuaAkxOTcwLTAxLTAxIDAxOjAw
OjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9i
dXNkbWFfaW1wbC5oCTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAg
KzEsOTYgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBGcmVlQlNEIEZvdW5kYXRp
b24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSB3YXMgZGV2
ZWxvcGVkIGJ5IEtvbnN0YW50aW4gQmVsb3Vzb3YgPGtpYkBGcmVlQlNELm9yZz4KKyAqIHVuZGVy
IHNwb25zb3JzaGlwIGZyb20gdGhlIEZyZWVCU0QgRm91bmRhdGlvbi4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg
KiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMK
KyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiBy
ZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvYnVzZG1hX2ltcGwuaCAyNTczMDggMjAxMy0xMC0y
OSAwNzoyNTo1NFoga2liICQKKyAqLworCisjaWZuZGVmCV9fWDg2X0JVU0RNQV9JTVBMX0gKKyNk
ZWZpbmUJX19YODZfQlVTRE1BX0lNUExfSAorCitzdHJ1Y3QgYnVzX2RtYV90YWdfY29tbW9uIHsK
KwlzdHJ1Y3QgYnVzX2RtYV9pbXBsICppbXBsOworCXN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24g
KnBhcmVudDsKKwlidXNfc2l6ZV90CSAgYWxpZ25tZW50OworCWJ1c19hZGRyX3QJICBib3VuZGFy
eTsKKwlidXNfYWRkcl90CSAgbG93YWRkcjsKKwlidXNfYWRkcl90CSAgaGlnaGFkZHI7CisJYnVz
X2RtYV9maWx0ZXJfdCAqZmlsdGVyOworCXZvaWQJCSAqZmlsdGVyYXJnOworCWJ1c19zaXplX3QJ
ICBtYXhzaXplOworCXVfaW50CQkgIG5zZWdtZW50czsKKwlidXNfc2l6ZV90CSAgbWF4c2Vnc3o7
CisJaW50CQkgIGZsYWdzOworCWJ1c19kbWFfbG9ja190CSAqbG9ja2Z1bmM7CisJdm9pZAkJICps
b2NrZnVuY2FyZzsKKwlpbnQJCSAgcmVmX2NvdW50OworfTsKKworc3RydWN0IGJ1c19kbWFfaW1w
bCB7CisJaW50ICgqdGFnX2NyZWF0ZSkoYnVzX2RtYV90YWdfdCBwYXJlbnQsCisJICAgIGJ1c19z
aXplX3QgYWxpZ25tZW50LCBidXNfYWRkcl90IGJvdW5kYXJ5LCBidXNfYWRkcl90IGxvd2FkZHIs
CisJICAgIGJ1c19hZGRyX3QgaGlnaGFkZHIsIGJ1c19kbWFfZmlsdGVyX3QgKmZpbHRlciwKKwkg
ICAgdm9pZCAqZmlsdGVyYXJnLCBidXNfc2l6ZV90IG1heHNpemUsIGludCBuc2VnbWVudHMsCisJ
ICAgIGJ1c19zaXplX3QgbWF4c2Vnc3osIGludCBmbGFncywgYnVzX2RtYV9sb2NrX3QgKmxvY2tm
dW5jLAorCSAgICB2b2lkICpsb2NrZnVuY2FyZywgYnVzX2RtYV90YWdfdCAqZG1hdCk7CisJaW50
ICgqdGFnX2Rlc3Ryb3kpKGJ1c19kbWFfdGFnX3QgZG1hdCk7CisJaW50ICgqbWFwX2NyZWF0ZSko
YnVzX2RtYV90YWdfdCBkbWF0LCBpbnQgZmxhZ3MsIGJ1c19kbWFtYXBfdCAqbWFwcCk7CisJaW50
ICgqbWFwX2Rlc3Ryb3kpKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCk7CisJ
aW50ICgqbWVtX2FsbG9jKShidXNfZG1hX3RhZ190IGRtYXQsIHZvaWQqKiB2YWRkciwgaW50IGZs
YWdzLAorCSAgICBidXNfZG1hbWFwX3QgKm1hcHApOworCXZvaWQgKCptZW1fZnJlZSkoYnVzX2Rt
YV90YWdfdCBkbWF0LCB2b2lkICp2YWRkciwgYnVzX2RtYW1hcF90IG1hcCk7CisJaW50ICgqbG9h
ZF9tYSkoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLAorCSAgICBzdHJ1Y3Qg
dm1fcGFnZSAqKm1hLCBidXNfc2l6ZV90IHRsZW4sIGludCBtYV9vZmZzLCBpbnQgZmxhZ3MsCisJ
ICAgIGJ1c19kbWFfc2VnbWVudF90ICpzZWdzLCBpbnQgKnNlZ3ApOworCWludCAoKmxvYWRfcGh5
cykoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLAorCSAgICB2bV9wYWRkcl90
IGJ1ZiwgYnVzX3NpemVfdCBidWZsZW4sIGludCBmbGFncywKKwkgICAgYnVzX2RtYV9zZWdtZW50
X3QgKnNlZ3MsIGludCAqc2VncCk7CisJaW50ICgqbG9hZF9idWZmZXIpKGJ1c19kbWFfdGFnX3Qg
ZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKwkgICAgdm9pZCAqYnVmLCBidXNfc2l6ZV90IGJ1Zmxl
biwgcG1hcF90IHBtYXAsIGludCBmbGFncywKKwkgICAgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3Ms
IGludCAqc2VncCk7CisJdm9pZCAoKm1hcF93YWl0b2spKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVz
X2RtYW1hcF90IG1hcCwKKwkgICAgc3RydWN0IG1lbWRlc2MgKm1lbSwgYnVzX2RtYW1hcF9jYWxs
YmFja190ICpjYWxsYmFjaywKKwkgICAgdm9pZCAqY2FsbGJhY2tfYXJnKTsKKwlidXNfZG1hX3Nl
Z21lbnRfdCAqKCptYXBfY29tcGxldGUpKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90
IG1hcCwKKwkgICAgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBuc2VncywgaW50IGVycm9y
KTsKKwl2b2lkICgqbWFwX3VubG9hZCkoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3Qg
bWFwKTsKKwl2b2lkICgqbWFwX3N5bmMpKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90
IG1hcCwKKwkgICAgYnVzX2RtYXN5bmNfb3BfdCBvcCk7Cit9OworCit2b2lkIGJ1c19kbWFfZGZs
dF9sb2NrKHZvaWQgKmFyZywgYnVzX2RtYV9sb2NrX29wX3Qgb3ApOworaW50IGJ1c19kbWFfcnVu
X2ZpbHRlcihzdHJ1Y3QgYnVzX2RtYV90YWdfY29tbW9uICpkbWF0LCBidXNfYWRkcl90IHBhZGRy
KTsKK2ludCBjb21tb25fYnVzX2RtYV90YWdfY3JlYXRlKHN0cnVjdCBidXNfZG1hX3RhZ19jb21t
b24gKnBhcmVudCwKKyAgICBidXNfc2l6ZV90IGFsaWdubWVudCwKKyAgICBidXNfYWRkcl90IGJv
dW5kYXJ5LCBidXNfYWRkcl90IGxvd2FkZHIsIGJ1c19hZGRyX3QgaGlnaGFkZHIsCisgICAgYnVz
X2RtYV9maWx0ZXJfdCAqZmlsdGVyLCB2b2lkICpmaWx0ZXJhcmcsIGJ1c19zaXplX3QgbWF4c2l6
ZSwKKyAgICBpbnQgbnNlZ21lbnRzLCBidXNfc2l6ZV90IG1heHNlZ3N6LCBpbnQgZmxhZ3MsIGJ1
c19kbWFfbG9ja190ICpsb2NrZnVuYywKKyAgICB2b2lkICpsb2NrZnVuY2FyZywgc2l6ZV90IHN6
LCB2b2lkICoqZG1hdCk7CisKK2V4dGVybiBzdHJ1Y3QgYnVzX2RtYV9pbXBsIGJ1c19kbWFfYm91
bmNlX2ltcGw7CisKKyNlbmRpZgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL3g4Ni9jcHV0eXBlcy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvY3B1dHlw
ZXMuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2NwdXR5cGVzLmgJMTk3MC0w
MS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25l
dG1hcC94ODYvY3B1dHlwZXMuaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCArMDEwMApA
QCAtMCwwICsxLDU0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MyBDaHJpc3RvcGhlciBH
LiBEZW1ldHJpb3UKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUg
bmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxl
bmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvY3B1dHlwZXMuaCAyOTI2NjggMjAxNS0xMi0yMyAyMTo0
MTo0MlogamhiICQKKyAqLworCisjaWZuZGVmIF9YODZfQ1BVVFlQRVNfSF8KKyNkZWZpbmUJX1g4
Nl9DUFVUWVBFU19IXworCisvKgorICogVmVuZG9ycyBvZiBwcm9jZXNzb3IuCisgKi8KKyNkZWZp
bmUJQ1BVX1ZFTkRPUl9OU0MJCTB4MTAwYgkJLyogTlNDICovCisjZGVmaW5lCUNQVV9WRU5ET1Jf
SUJNCQkweDEwMTQJCS8qIElCTSAqLworI2RlZmluZQlDUFVfVkVORE9SX0FNRAkJMHgxMDIyCQkv
KiBBTUQgKi8KKyNkZWZpbmUJQ1BVX1ZFTkRPUl9TSVMJCTB4MTAzOQkJLyogU2lTICovCisjZGVm
aW5lCUNQVV9WRU5ET1JfVU1DCQkweDEwNjAJCS8qIFVNQyAqLworI2RlZmluZQlDUFVfVkVORE9S
X05FWEdFTgkweDEwNzQJCS8qIE5leGdlbiAqLworI2RlZmluZQlDUFVfVkVORE9SX0NZUklYCTB4
MTA3OAkJLyogQ3lyaXggKi8KKyNkZWZpbmUJQ1BVX1ZFTkRPUl9JRFQJCTB4MTExZAkJLyogQ2Vu
dGF1ci9JRFQvVklBICovCisjZGVmaW5lCUNQVV9WRU5ET1JfVFJBTlNNRVRBCTB4MTI3OQkJLyog
VHJhbnNtZXRhICovCisjZGVmaW5lCUNQVV9WRU5ET1JfSU5URUwJMHg4MDg2CQkvKiBJbnRlbCAq
LworI2RlZmluZQlDUFVfVkVORE9SX1JJU0UJCTB4ZGVhZDJiYWQJLyogUmlzZSAqLworI2RlZmlu
ZQlDUFVfVkVORE9SX0NFTlRBVVIJQ1BVX1ZFTkRPUl9JRFQKKworI2lmbmRlZiBMT0NPUkUKK2V4
dGVybiBpbnQJY3B1OworZXh0ZXJuIGludAljcHVfY2xhc3M7CisjZW5kaWYKKworI2VuZGlmIC8q
ICFfWDg2X0NQVVRZUEVTX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAveDg2L2R1bXAuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2R1bXAuaAot
LS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2R1bXAuaAkxOTcwLTAxLTAxIDAxOjAw
OjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9k
dW1wLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw4NyBA
QAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgRU1DIENvcnAuCisgKiBBdXRob3I6IENvbnJh
ZCBNZXllciA8Y29ucmFkLm1leWVyQGlzaWxvbi5jb20+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP
UiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor
ICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QK
KyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgor
ICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvZHVtcC5oIDI3Njc3
MiAyMDE1LTAxLTA3IDAxOjAxOjM5WiBtYXJraiAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9E
VU1QX0hfCisjZGVmaW5lCV9NQUNISU5FX0RVTVBfSF8KKworI2lmZGVmIF9fYW1kNjRfXworI2Rl
ZmluZQlLRVJORUxEVU1QX0FSQ0hfVkVSU0lPTglLRVJORUxEVU1QX0FNRDY0X1ZFUlNJT04KKyNk
ZWZpbmUJRU1fVkFMVUUJCUVNX1g4Nl82NAorI2Vsc2UKKyNkZWZpbmUJS0VSTkVMRFVNUF9BUkNI
X1ZFUlNJT04JS0VSTkVMRFVNUF9JMzg2X1ZFUlNJT04KKyNkZWZpbmUJRU1fVkFMVUUJCUVNXzM4
NgorI2VuZGlmCisKKy8qIDIwIHBoeXNfYXZhaWwgZW50cnkgcGFpcnMgY29ycmVzcG9uZCB0byAx
MCBwYSdzICovCisjZGVmaW5lCURVTVBTWVNfTURfUEFfTlBBSVJTCTEwCisjZGVmaW5lCURVTVBT
WVNfTlVNX0FVWF9IRFJTCTAKKworc3RhdGljIGlubGluZSB2b2lkCitkdW1wc3lzX3BhX2luaXQo
dm9pZCkKK3sKKworCWR1bXBzeXNfZ2VuX3BhX2luaXQoKTsKK30KKworc3RhdGljIGlubGluZSBz
dHJ1Y3QgZHVtcF9wYSAqCitkdW1wc3lzX3BhX25leHQoc3RydWN0IGR1bXBfcGEgKnApCit7CisK
KwlyZXR1cm4gKGR1bXBzeXNfZ2VuX3BhX25leHQocCkpOworfQorCitzdGF0aWMgaW5saW5lIHZv
aWQKK2R1bXBzeXNfd2JpbnZfYWxsKHZvaWQpCit7CisKKwlkdW1wc3lzX2dlbl93Ymludl9hbGwo
KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkdW1wc3lzX3VubWFwX2NodW5rKHZtX3BhZGRy
X3QgcGEsIHNpemVfdCBzLCB2b2lkICp2YSkKK3sKKworCWR1bXBzeXNfZ2VuX3VubWFwX2NodW5r
KHBhLCBzLCB2YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitkdW1wc3lzX3dyaXRlX2F1eF9o
ZWFkZXJzKHN0cnVjdCBkdW1wZXJpbmZvICpkaSkKK3sKKworCXJldHVybiAoZHVtcHN5c19nZW5f
d3JpdGVfYXV4X2hlYWRlcnMoZGkpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2R1bXBzeXMo
c3RydWN0IGR1bXBlcmluZm8gKmRpKQoreworCisJcmV0dXJuIChkdW1wc3lzX2dlbmVyaWMoZGkp
KTsKK30KKworI2VuZGlmICAvKiAhX01BQ0hJTkVfRFVNUF9IXyAqLwpkaWZmIC11IC1yIC1OIHVz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9lbGYuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAveDg2L2VsZi5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvZWxmLmgJ
MTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1
bGVzL25ldG1hcC94ODYvZWxmLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAK
QEAgLTAsMCArMSwyMTUgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTcgSm9obiBE
LiBQb2xzdHJhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisg
KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5n
LzExLjAvc3lzL3g4Ni9pbmNsdWRlL2VsZi5oIDI0NzA0NyAyMDEzLTAyLTIwIDE3OjM5OjUyWiBr
aWIgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfRUxGX0hfCisjZGVmaW5lCV9NQUNISU5FX0VM
Rl9IXyAxCisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9NQUNISU5FX0VMRl9X
QU5UXzMyQklUKQorCisvKgorICogRUxGIGRlZmluaXRpb25zIGZvciB0aGUgaTM4NiBhcmNoaXRl
Y3R1cmUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9lbGYzMi5oPgkvKiBEZWZpbml0aW9ucyBjb21t
b24gdG8gYWxsIDMyIGJpdCBhcmNoaXRlY3R1cmVzLiAqLworI2lmIGRlZmluZWQoX19FTEZfV09S
RF9TSVpFKSAmJiBfX0VMRl9XT1JEX1NJWkUgPT0gNjQKKyNpbmNsdWRlIDxzeXMvZWxmNjQuaD4J
LyogRGVmaW5pdGlvbnMgY29tbW9uIHRvIGFsbCA2NCBiaXQgYXJjaGl0ZWN0dXJlcy4gKi8KKyNl
bmRpZgorCisjaWZuZGVmIF9fRUxGX1dPUkRfU0laRQorI2RlZmluZQlfX0VMRl9XT1JEX1NJWkUJ
MzIJLyogVXNlZCBieSA8c3lzL2VsZl9nZW5lcmljLmg+ICovCisjZW5kaWYKKworI2luY2x1ZGUg
PHN5cy9lbGZfZ2VuZXJpYy5oPgorCisjZGVmaW5lCUVMRl9BUkNICUVNXzM4NgorCisjZGVmaW5l
CUVMRl9NQUNISU5FX09LKHgpICgoeCkgPT0gRU1fMzg2IHx8ICh4KSA9PSBFTV80ODYpCisKKy8q
CisgKiBBdXhpbGlhcnkgdmVjdG9yIGVudHJpZXMgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gdG8g
dGhlIGludGVycHJldGVyLgorICoKKyAqIFRoZSBpMzg2IHN1cHBsZW1lbnQgdG8gdGhlIFNWUjQg
QUJJIHNwZWNpZmljYXRpb24gbmFtZXMgdGhpcyAiYXV4dl90IiwKKyAqIGJ1dCBQT1NJWCBsYXlz
IGNsYWltIHRvIGFsbCBzeW1ib2xzIGVuZGluZyB3aXRoICJfdCIuCisgKi8KKwordHlwZWRlZiBz
dHJ1Y3QgewkvKiBBdXhpbGlhcnkgdmVjdG9yIGVudHJ5IG9uIGluaXRpYWwgc3RhY2sgKi8KKwlp
bnQJYV90eXBlOwkJCS8qIEVudHJ5IHR5cGUuICovCisJdW5pb24geworCQlsb25nCWFfdmFsOwkJ
LyogSW50ZWdlciB2YWx1ZS4gKi8KKwkJdm9pZAkqYV9wdHI7CQkvKiBBZGRyZXNzLiAqLworCQl2
b2lkCSgqYV9mY24pKHZvaWQpOwkvKiBGdW5jdGlvbiBwb2ludGVyIChub3QgdXNlZCkuICovCisJ
fSBhX3VuOworfSBFbGYzMl9BdXhpbmZvOworCisjaWYgX19FTEZfV09SRF9TSVpFID09IDY0Cisv
KiBGYWtlIGZvciBhbWQ2NCBsb2FkZXIgc3VwcG9ydCAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWlu
dCBmYWtlOworfSBFbGY2NF9BdXhpbmZvOworI2VuZGlmCisKK19fRWxmVHlwZShBdXhpbmZvKTsK
KworLyogVmFsdWVzIGZvciBhX3R5cGUuICovCisjZGVmaW5lCUFUX05VTEwJCTAJLyogVGVybWlu
YXRlcyB0aGUgdmVjdG9yLiAqLworI2RlZmluZQlBVF9JR05PUkUJMQkvKiBJZ25vcmVkIGVudHJ5
LiAqLworI2RlZmluZQlBVF9FWEVDRkQJMgkvKiBGaWxlIGRlc2NyaXB0b3Igb2YgcHJvZ3JhbSB0
byBsb2FkLiAqLworI2RlZmluZQlBVF9QSERSCQkzCS8qIFByb2dyYW0gaGVhZGVyIG9mIHByb2dy
YW0gYWxyZWFkeSBsb2FkZWQuICovCisjZGVmaW5lCUFUX1BIRU5UCTQJLyogU2l6ZSBvZiBlYWNo
IHByb2dyYW0gaGVhZGVyIGVudHJ5LiAqLworI2RlZmluZQlBVF9QSE5VTQk1CS8qIE51bWJlciBv
ZiBwcm9ncmFtIGhlYWRlciBlbnRyaWVzLiAqLworI2RlZmluZQlBVF9QQUdFU1oJNgkvKiBQYWdl
IHNpemUgaW4gYnl0ZXMuICovCisjZGVmaW5lCUFUX0JBU0UJCTcJLyogSW50ZXJwcmV0ZXIncyBi
YXNlIGFkZHJlc3MuICovCisjZGVmaW5lCUFUX0ZMQUdTCTgJLyogRmxhZ3MgKHVudXNlZCBmb3Ig
aTM4NikuICovCisjZGVmaW5lCUFUX0VOVFJZCTkJLyogV2hlcmUgaW50ZXJwcmV0ZXIgc2hvdWxk
IHRyYW5zZmVyIGNvbnRyb2wuICovCisjZGVmaW5lCUFUX05PVEVMRgkxMAkvKiBQcm9ncmFtIGlz
IG5vdCBFTEYgPz8gKi8KKyNkZWZpbmUJQVRfVUlECQkxMQkvKiBSZWFsIHVpZC4gKi8KKyNkZWZp
bmUJQVRfRVVJRAkJMTIJLyogRWZmZWN0aXZlIHVpZC4gKi8KKyNkZWZpbmUJQVRfR0lECQkxMwkv
KiBSZWFsIGdpZC4gKi8KKyNkZWZpbmUJQVRfRUdJRAkJMTQJLyogRWZmZWN0aXZlIGdpZC4gKi8K
KyNkZWZpbmUJQVRfRVhFQ1BBVEgJMTUJLyogUGF0aCB0byB0aGUgZXhlY3V0YWJsZS4gKi8KKyNk
ZWZpbmUJQVRfQ0FOQVJZCTE2CS8qIENhbmFyeSBmb3IgU1NQLiAqLworI2RlZmluZQlBVF9DQU5B
UllMRU4JMTcJLyogTGVuZ3RoIG9mIHRoZSBjYW5hcnkuICovCisjZGVmaW5lCUFUX09TUkVMREFU
RQkxOAkvKiBPU1JFTERBVEUuICovCisjZGVmaW5lCUFUX05DUFVTCTE5CS8qIE51bWJlciBvZiBD
UFVzLiAqLworI2RlZmluZQlBVF9QQUdFU0laRVMJMjAJLyogUGFnZXNpemVzLiAqLworI2RlZmlu
ZQlBVF9QQUdFU0laRVNMRU4JMjEJLyogTnVtYmVyIG9mIHBhZ2VzaXplcy4gKi8KKyNkZWZpbmUJ
QVRfVElNRUtFRVAJMjIJLyogUG9pbnRlciB0byB0aW1laGFuZHMuICovCisjZGVmaW5lCUFUX1NU
QUNLUFJPVAkyMwkvKiBJbml0aWFsIHN0YWNrIHByb3RlY3Rpb24uICovCisKKyNkZWZpbmUJQVRf
Q09VTlQJMjQJLyogQ291bnQgb2YgZGVmaW5lZCBhdXggZW50cnkgdHlwZXMuICovCisKKy8qCisg
KiBSZWxvY2F0aW9uIHR5cGVzLgorICovCisKKyNkZWZpbmUJUl8zODZfQ09VTlQJMzgJLyogQ291
bnQgb2YgZGVmaW5lZCByZWxvY2F0aW9uIHR5cGVzLiAqLworCisvKiBEZWZpbmUgIm1hY2hpbmUi
IGNoYXJhY3RlcmlzdGljcyAqLworI2RlZmluZQlFTEZfVEFSR19DTEFTUwlFTEZDTEFTUzMyCisj
ZGVmaW5lCUVMRl9UQVJHX0RBVEEJRUxGREFUQTJMU0IKKyNkZWZpbmUJRUxGX1RBUkdfTUFDSAlF
TV8zODYKKyNkZWZpbmUJRUxGX1RBUkdfVkVSCTEKKworI2RlZmluZQlFVF9EWU5fTE9BRF9BRERS
IDB4MDEwMDEwMDAKKworI2VsaWYgZGVmaW5lZChfX2FtZDY0X18pCisKKy8qCisgKiBFTEYgZGVm
aW5pdGlvbnMgZm9yIHRoZSBBTUQ2NCBhcmNoaXRlY3R1cmUuCisgKi8KKworI2lmbmRlZiBfX0VM
Rl9XT1JEX1NJWkUKKyNkZWZpbmUJX19FTEZfV09SRF9TSVpFCTY0CS8qIFVzZWQgYnkgPHN5cy9l
bGZfZ2VuZXJpYy5oPiAqLworI2VuZGlmCisjaW5jbHVkZSA8c3lzL2VsZjMyLmg+CS8qIERlZmlu
aXRpb25zIGNvbW1vbiB0byBhbGwgMzIgYml0IGFyY2hpdGVjdHVyZXMuICovCisjaW5jbHVkZSA8
c3lzL2VsZjY0Lmg+CS8qIERlZmluaXRpb25zIGNvbW1vbiB0byBhbGwgNjQgYml0IGFyY2hpdGVj
dHVyZXMuICovCisjaW5jbHVkZSA8c3lzL2VsZl9nZW5lcmljLmg+CisKKyNkZWZpbmUJRUxGX0FS
Q0gJRU1fWDg2XzY0CisjZGVmaW5lCUVMRl9BUkNIMzIJRU1fMzg2CisKKyNkZWZpbmUJRUxGX01B
Q0hJTkVfT0soeCkgKCh4KSA9PSBFTV9YODZfNjQpCisKKy8qCisgKiBBdXhpbGlhcnkgdmVjdG9y
IGVudHJpZXMgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gdG8gdGhlIGludGVycHJldGVyLgorICoK
KyAqIFRoZSBpMzg2IHN1cHBsZW1lbnQgdG8gdGhlIFNWUjQgQUJJIHNwZWNpZmljYXRpb24gbmFt
ZXMgdGhpcyAiYXV4dl90IiwKKyAqIGJ1dCBQT1NJWCBsYXlzIGNsYWltIHRvIGFsbCBzeW1ib2xz
IGVuZGluZyB3aXRoICJfdCIuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsJLyogQXV4aWxpYXJ5IHZl
Y3RvciBlbnRyeSBvbiBpbml0aWFsIHN0YWNrICovCisJaW50CWFfdHlwZTsJCQkvKiBFbnRyeSB0
eXBlLiAqLworCXVuaW9uIHsKKwkJaW50CWFfdmFsOwkJLyogSW50ZWdlciB2YWx1ZS4gKi8KKwl9
IGFfdW47Cit9IEVsZjMyX0F1eGluZm87CisKKwordHlwZWRlZiBzdHJ1Y3QgewkvKiBBdXhpbGlh
cnkgdmVjdG9yIGVudHJ5IG9uIGluaXRpYWwgc3RhY2sgKi8KKwlsb25nCWFfdHlwZTsJCQkvKiBF
bnRyeSB0eXBlLiAqLworCXVuaW9uIHsKKwkJbG9uZwlhX3ZhbDsJCS8qIEludGVnZXIgdmFsdWUu
ICovCisJCXZvaWQJKmFfcHRyOwkJLyogQWRkcmVzcy4gKi8KKwkJdm9pZAkoKmFfZmNuKSh2b2lk
KTsJLyogRnVuY3Rpb24gcG9pbnRlciAobm90IHVzZWQpLiAqLworCX0gYV91bjsKK30gRWxmNjRf
QXV4aW5mbzsKKworX19FbGZUeXBlKEF1eGluZm8pOworCisvKiBWYWx1ZXMgZm9yIGFfdHlwZS4g
Ki8KKyNkZWZpbmUJQVRfTlVMTAkJMAkvKiBUZXJtaW5hdGVzIHRoZSB2ZWN0b3IuICovCisjZGVm
aW5lCUFUX0lHTk9SRQkxCS8qIElnbm9yZWQgZW50cnkuICovCisjZGVmaW5lCUFUX0VYRUNGRAky
CS8qIEZpbGUgZGVzY3JpcHRvciBvZiBwcm9ncmFtIHRvIGxvYWQuICovCisjZGVmaW5lCUFUX1BI
RFIJCTMJLyogUHJvZ3JhbSBoZWFkZXIgb2YgcHJvZ3JhbSBhbHJlYWR5IGxvYWRlZC4gKi8KKyNk
ZWZpbmUJQVRfUEhFTlQJNAkvKiBTaXplIG9mIGVhY2ggcHJvZ3JhbSBoZWFkZXIgZW50cnkuICov
CisjZGVmaW5lCUFUX1BITlVNCTUJLyogTnVtYmVyIG9mIHByb2dyYW0gaGVhZGVyIGVudHJpZXMu
ICovCisjZGVmaW5lCUFUX1BBR0VTWgk2CS8qIFBhZ2Ugc2l6ZSBpbiBieXRlcy4gKi8KKyNkZWZp
bmUJQVRfQkFTRQkJNwkvKiBJbnRlcnByZXRlcidzIGJhc2UgYWRkcmVzcy4gKi8KKyNkZWZpbmUJ
QVRfRkxBR1MJOAkvKiBGbGFncyAodW51c2VkIGZvciBpMzg2KS4gKi8KKyNkZWZpbmUJQVRfRU5U
UlkJOQkvKiBXaGVyZSBpbnRlcnByZXRlciBzaG91bGQgdHJhbnNmZXIgY29udHJvbC4gKi8KKyNk
ZWZpbmUJQVRfTk9URUxGCTEwCS8qIFByb2dyYW0gaXMgbm90IEVMRiA/PyAqLworI2RlZmluZQlB
VF9VSUQJCTExCS8qIFJlYWwgdWlkLiAqLworI2RlZmluZQlBVF9FVUlECQkxMgkvKiBFZmZlY3Rp
dmUgdWlkLiAqLworI2RlZmluZQlBVF9HSUQJCTEzCS8qIFJlYWwgZ2lkLiAqLworI2RlZmluZQlB
VF9FR0lECQkxNAkvKiBFZmZlY3RpdmUgZ2lkLiAqLworI2RlZmluZQlBVF9FWEVDUEFUSAkxNQkv
KiBQYXRoIHRvIHRoZSBleGVjdXRhYmxlLiAqLworI2RlZmluZQlBVF9DQU5BUlkJMTYJLyogQ2Fu
YXJ5IGZvciBTU1AgKi8KKyNkZWZpbmUJQVRfQ0FOQVJZTEVOCTE3CS8qIExlbmd0aCBvZiB0aGUg
Y2FuYXJ5LiAqLworI2RlZmluZQlBVF9PU1JFTERBVEUJMTgJLyogT1NSRUxEQVRFLiAqLworI2Rl
ZmluZQlBVF9OQ1BVUwkxOQkvKiBOdW1iZXIgb2YgQ1BVcy4gKi8KKyNkZWZpbmUJQVRfUEFHRVNJ
WkVTCTIwCS8qIFBhZ2VzaXplcy4gKi8KKyNkZWZpbmUJQVRfUEFHRVNJWkVTTEVOCTIxCS8qIE51
bWJlciBvZiBwYWdlc2l6ZXMuICovCisjZGVmaW5lCUFUX1RJTUVLRUVQCTIyCS8qIFBvaW50ZXIg
dG8gdGltZWhhbmRzLiAqLworI2RlZmluZQlBVF9TVEFDS1BST1QJMjMJLyogSW5pdGlhbCBzdGFj
ayBwcm90ZWN0aW9uLiAqLworCisjZGVmaW5lCUFUX0NPVU5UCTI0CS8qIENvdW50IG9mIGRlZmlu
ZWQgYXV4IGVudHJ5IHR5cGVzLiAqLworCisvKgorICogUmVsb2NhdGlvbiB0eXBlcy4KKyAqLwor
CisjZGVmaW5lCVJfWDg2XzY0X0NPVU5UCTI0CS8qIENvdW50IG9mIGRlZmluZWQgcmVsb2NhdGlv
biB0eXBlcy4gKi8KKworLyogRGVmaW5lICJtYWNoaW5lIiBjaGFyYWN0ZXJpc3RpY3MgKi8KKyNp
ZiBfX0VMRl9XT1JEX1NJWkUgPT0gMzIKKyNkZWZpbmUgRUxGX1RBUkdfQ0xBU1MgIEVMRkNMQVNT
MzIKKyNlbHNlCisjZGVmaW5lIEVMRl9UQVJHX0NMQVNTICBFTEZDTEFTUzY0CisjZW5kaWYKKyNk
ZWZpbmUJRUxGX1RBUkdfREFUQQlFTEZEQVRBMkxTQgorI2RlZmluZQlFTEZfVEFSR19NQUNICUVN
X1g4Nl82NAorI2RlZmluZQlFTEZfVEFSR19WRVIJMQorCisjaWYgX19FTEZfV09SRF9TSVpFID09
IDMyCisjZGVmaW5lCUVUX0RZTl9MT0FEX0FERFIgMHgwMTAwMTAwMAorI2Vsc2UKKyNkZWZpbmUJ
RVRfRFlOX0xPQURfQUREUiAweDAxMDIxMDAwCisjZW5kaWYKKworI2VuZGlmIC8qIF9faTM4Nl9f
LCBfX2FtZDY0X18gKi8KKworI2VuZGlmIC8qICFfTUFDSElORV9FTEZfSF8gKi8KZGlmZiAtdSAt
ciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvZW5kaWFuLmggL3Vzci9zcmMvc3lz
L21vZHVsZXMvbmV0bWFwL3g4Ni9lbmRpYW4uaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAveDg2L2VuZGlhbi5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAv
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2VuZGlhbi5oCTIwMTYtMDktMjkgMDA6MjQ6
NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTMxIEBACisvKi0KKyAqIENvcHlyaWdodCAo
YykgMTk4NywgMTk5MSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBv
ZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBB
TkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJF
R0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAq
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisg
KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAq
CisgKglAKCMpZW5kaWFuLmgJNy44IChCZXJrZWxleSkgNC8zLzkxCisgKiAkRnJlZUJTRDogcmVs
ZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL2VuZGlhbi5oIDIzMzY4NCAyMDEyLTAzLTI5IDIzOjMx
OjQ4WiBkaW0gJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfRU5ESUFOX0hfCisjZGVmaW5lCV9N
QUNISU5FX0VORElBTl9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lz
L190eXBlcy5oPgorCisvKgorICogRGVmaW5lIHRoZSBvcmRlciBvZiAzMi1iaXQgd29yZHMgaW4g
NjQtYml0IHdvcmRzLgorICovCisjZGVmaW5lCV9RVUFEX0hJR0hXT1JEIDEKKyNkZWZpbmUJX1FV
QURfTE9XV09SRCAwCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgYnl0ZSBvcmRlciwgYWNjb3Jk
aW5nIHRvIGJ5dGUgc2lnbmlmaWNhbmNlIGZyb20gbG93CisgKiBhZGRyZXNzIHRvIGhpZ2guCisg
Ki8KKyNkZWZpbmUJX0xJVFRMRV9FTkRJQU4JMTIzNAkvKiBMU0IgZmlyc3Q6IGkzODYsIHZheCAq
LworI2RlZmluZQlfQklHX0VORElBTgk0MzIxCS8qIE1TQiBmaXJzdDogNjgwMDAsIGlibSwgbmV0
ICovCisjZGVmaW5lCV9QRFBfRU5ESUFOCTM0MTIJLyogTFNCIGZpcnN0IGluIHdvcmQsIE1TVyBm
aXJzdCBpbiBsb25nICovCisKKyNkZWZpbmUJX0JZVEVfT1JERVIJX0xJVFRMRV9FTkRJQU4KKwor
LyoKKyAqIERlcHJlY2F0ZWQgdmFyaWFudHMgdGhhdCBkb24ndCBoYXZlIGVub3VnaCB1bmRlcnNj
b3JlcyB0byBiZSB1c2VmdWwgaW4gbW9yZQorICogc3RyaWN0IG5hbWVzcGFjZXMuCisgKi8KKyNp
ZiBfX0JTRF9WSVNJQkxFCisjZGVmaW5lCUxJVFRMRV9FTkRJQU4JX0xJVFRMRV9FTkRJQU4KKyNk
ZWZpbmUJQklHX0VORElBTglfQklHX0VORElBTgorI2RlZmluZQlQRFBfRU5ESUFOCV9QRFBfRU5E
SUFOCisjZGVmaW5lCUJZVEVfT1JERVIJX0JZVEVfT1JERVIKKyNlbmRpZgorCisjZGVmaW5lCV9f
YnN3YXAxNl9nZW4oeCkJKF9fdWludDE2X3QpKCh4KSA8PCA4IHwgKHgpID4+IDgpCisjZGVmaW5l
CV9fYnN3YXAzMl9nZW4oeCkJCVwKKwkoKChfX3VpbnQzMl90KV9fYnN3YXAxNigoeCkgJiAweGZm
ZmYpIDw8IDE2KSB8IF9fYnN3YXAxNigoeCkgPj4gMTYpKQorI2RlZmluZQlfX2Jzd2FwNjRfZ2Vu
KHgpCQlcCisJKCgoX191aW50NjRfdClfX2Jzd2FwMzIoKHgpICYgMHhmZmZmZmZmZikgPDwgMzIp
IHwgX19ic3dhcDMyKCh4KSA+PiAzMikpCisKKyNpZmRlZiBfX0dOVUNMSUtFX0JVSUxUSU5fQ09O
U1RBTlRfUAorI2RlZmluZQlfX2Jzd2FwMTYoeCkJCQkJXAorCSgoX191aW50MTZfdCkoX19idWls
dGluX2NvbnN0YW50X3AoeCkgPwlcCisJICAgIF9fYnN3YXAxNl9nZW4oKF9fdWludDE2X3QpKHgp
KSA6IF9fYnN3YXAxNl92YXIoeCkpKQorI2RlZmluZQlfX2Jzd2FwMzIoeCkJCQlcCisJKF9fYnVp
bHRpbl9jb25zdGFudF9wKHgpID8JXAorCSAgICBfX2Jzd2FwMzJfZ2VuKChfX3VpbnQzMl90KSh4
KSkgOiBfX2Jzd2FwMzJfdmFyKHgpKQorI2RlZmluZQlfX2Jzd2FwNjQoeCkJCQlcCisJKF9fYnVp
bHRpbl9jb25zdGFudF9wKHgpID8JXAorCSAgICBfX2Jzd2FwNjRfZ2VuKChfX3VpbnQ2NF90KSh4
KSkgOiBfX2Jzd2FwNjRfdmFyKHgpKQorI2Vsc2UKKy8qIFhYWCB0aGVzZSBhcmUgYnJva2VuIGZv
ciB1c2UgaW4gc3RhdGljIGluaXRpYWxpemVycy4gKi8KKyNkZWZpbmUJX19ic3dhcDE2KHgpCV9f
YnN3YXAxNl92YXIoeCkKKyNkZWZpbmUJX19ic3dhcDMyKHgpCV9fYnN3YXAzMl92YXIoeCkKKyNk
ZWZpbmUJX19ic3dhcDY0KHgpCV9fYnN3YXA2NF92YXIoeCkKKyNlbmRpZgorCisvKiBUaGVzZSBh
cmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMgdG8gYXZvaWQgbXVsdGlwbGUgZXZhbHVhdGlvbiBvZiB4
LiAqLworCitzdGF0aWMgX19pbmxpbmUgX191aW50MTZfdAorX19ic3dhcDE2X3ZhcihfX3VpbnQx
Nl90IF94KQoreworCisJcmV0dXJuIChfX2Jzd2FwMTZfZ2VuKF94KSk7Cit9CisKK3N0YXRpYyBf
X2lubGluZSBfX3VpbnQzMl90CitfX2Jzd2FwMzJfdmFyKF9fdWludDMyX3QgX3gpCit7CisKKyNp
ZmRlZiBfX0dOVUNMSUtFX0FTTQorCV9fYXNtKCJic3dhcCAlMCIgOiAiK3IiIChfeCkpOworCXJl
dHVybiAoX3gpOworI2Vsc2UKKwlyZXR1cm4gKF9fYnN3YXAzMl9nZW4oX3gpKTsKKyNlbmRpZgor
fQorCitzdGF0aWMgX19pbmxpbmUgX191aW50NjRfdAorX19ic3dhcDY0X3ZhcihfX3VpbnQ2NF90
IF94KQoreworCisjaWYgZGVmaW5lZChfX2FtZDY0X18pICYmIGRlZmluZWQoX19HTlVDTElLRV9B
U00pCisJX19hc20oImJzd2FwICUwIiA6ICIrciIgKF94KSk7CisJcmV0dXJuIChfeCk7CisjZWxz
ZQorCS8qCisJICogSXQgaXMgaW1wb3J0YW50IGZvciB0aGUgb3B0aW1pemF0aW9ucyB0aGF0IHRo
ZSBmb2xsb3dpbmcgaXMgbm90CisJICogcmVhbGx5IGdlbmVyaWMsIGJ1dCBleHBhbmRzIHRvIDIg
X19ic3dhcDMyX3ZhcigpJ3MuCisJICovCisJcmV0dXJuIChfX2Jzd2FwNjRfZ2VuKF94KSk7Cisj
ZW5kaWYKK30KKworI2RlZmluZQlfX2h0b25sKHgpCV9fYnN3YXAzMih4KQorI2RlZmluZQlfX2h0
b25zKHgpCV9fYnN3YXAxNih4KQorI2RlZmluZQlfX250b2hsKHgpCV9fYnN3YXAzMih4KQorI2Rl
ZmluZQlfX250b2hzKHgpCV9fYnN3YXAxNih4KQorCisjZW5kaWYgLyogIV9NQUNISU5FX0VORElB
Tl9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9mZHQu
aCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2ZkdC5oCi0tLSB1c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC94ODYvZmR0LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx
MDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvZmR0LmgJMjAxNi0wOS0yOSAw
MDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwzNiBAQAorLyotCisgKiBDb3B5cmln
aHQgKGMpIDIwMTMgSnVuaXBlciBOZXR3b3JrcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRI
T1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
CisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4K
KyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL2ZkdC5oIDI2MDMy
NyAyMDE0LTAxLTA1IDE4OjQ2OjU4WiBud2hpdGVob3JuICQKKyAqLworCisjaWZuZGVmIF9NQUNI
SU5FX0ZEVF9IXworI2RlZmluZSBfTUFDSElORV9GRFRfSF8KKworX19CRUdJTl9ERUNMUworaW50
IHg4Nl9pbml0X2ZkdCh2b2lkKTsKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfTUFDSElORV9G
RFRfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvZmxv
YXQuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2Zsb2F0LmgKLS0tIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9mbG9hdC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw
MDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2Zsb2F0LmgJMjAx
Ni0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw5OCBAQAorLyotCisg
KiBDb3B5cmlnaHQgKGMpIDE5ODkgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9y
bmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhl
IG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz
CisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJF
R0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1B
R0UuCisgKgorICoJZnJvbTogQCgjKWZsb2F0LmgJNy4xIChCZXJrZWxleSkgNS84LzkwCisgKiAk
RnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL2Zsb2F0LmggMjg2MzI3IDIwMTUt
MDgtMDUgMTc6MDU6MzVaIGVtYXN0ZSAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9GTE9BVF9I
XworI2RlZmluZSBfTUFDSElORV9GTE9BVF9IXyAxCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4K
KworX19CRUdJTl9ERUNMUworZXh0ZXJuIGludCBfX2ZsdF9yb3VuZHModm9pZCk7CitfX0VORF9E
RUNMUworCisjZGVmaW5lIEZMVF9SQURJWAkyCQkvKiBiICovCisjZGVmaW5lIEZMVF9ST1VORFMJ
X19mbHRfcm91bmRzKCkKKyNpZiBfX0lTT19DX1ZJU0lCTEUgPj0gMTk5OQorI2lmZGVmIF9fTFA2
NF9fCisjZGVmaW5lCUZMVF9FVkFMX01FVEhPRAkwCQkvKiBubyBwcm9tb3Rpb25zICovCisjZWxz
ZQorI2RlZmluZQlGTFRfRVZBTF9NRVRIT0QJKC0xKQkJLyogaTM4NyBzZW1hbnRpY3MgYXJlLi4u
aW50ZXJlc3RpbmcgKi8KKyNlbmRpZgorI2RlZmluZQlERUNJTUFMX0RJRwkyMQkJLyogbWF4IHBy
ZWNpc2lvbiBpbiBkZWNpbWFsIGRpZ2l0cyAqLworI2VuZGlmCisKKyNkZWZpbmUgRkxUX01BTlRf
RElHCTI0CQkvKiBwICovCisjZGVmaW5lIEZMVF9FUFNJTE9OCTEuMTkyMDkyOTBFLTA3RgkvKiBi
KiooMS1wKSAqLworI2RlZmluZSBGTFRfRElHCQk2CQkvKiBmbG9vcigocC0xKSpsb2cxMChiKSkr
KGIgPT0gMTApICovCisjZGVmaW5lIEZMVF9NSU5fRVhQCSgtMTI1KQkJLyogZW1pbiAqLworI2Rl
ZmluZSBGTFRfTUlOCQkxLjE3NTQ5NDM1RS0zOEYJLyogYioqKGVtaW4tMSkgKi8KKyNkZWZpbmUg
RkxUX01JTl8xMF9FWFAJKC0zNykJCS8qIGNlaWwobG9nMTAoYioqKGVtaW4tMSkpKSAqLworI2Rl
ZmluZSBGTFRfTUFYX0VYUAkxMjgJCS8qIGVtYXggKi8KKyNkZWZpbmUgRkxUX01BWAkJMy40MDI4
MjM0N0UrMzhGCS8qICgxLWIqKigtcCkpKmIqKmVtYXggKi8KKyNkZWZpbmUgRkxUX01BWF8xMF9F
WFAJMzgJCS8qIGZsb29yKGxvZzEwKCgxLWIqKigtcCkpKmIqKmVtYXgpKSAqLworI2lmIF9fSVNP
X0NfVklTSUJMRSA+PSAyMDExCisjZGVmaW5lCUZMVF9UUlVFX01JTgkxLjQwMTI5ODQ2RS00NUYJ
LyogYioqKGVtaW4tcCkgKi8KKyNkZWZpbmUJRkxUX0RFQ0lNQUxfRElHCTkJCS8qIGNlaWwoMStw
KmxvZzEwKGIpKSAqLworI2RlZmluZQlGTFRfSEFTX1NVQk5PUk0JMQorI2VuZGlmIC8qIF9fSVNP
X0NfVklTSUJMRSA+PSAyMDExICovCisKKyNkZWZpbmUgREJMX01BTlRfRElHCTUzCisjZGVmaW5l
IERCTF9FUFNJTE9OCTIuMjIwNDQ2MDQ5MjUwMzEzMUUtMTYKKyNkZWZpbmUgREJMX0RJRwkJMTUK
KyNkZWZpbmUgREJMX01JTl9FWFAJKC0xMDIxKQorI2RlZmluZSBEQkxfTUlOCQkyLjIyNTA3Mzg1
ODUwNzIwMTRFLTMwOAorI2RlZmluZSBEQkxfTUlOXzEwX0VYUAkoLTMwNykKKyNkZWZpbmUgREJM
X01BWF9FWFAJMTAyNAorI2RlZmluZSBEQkxfTUFYCQkxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOAor
I2RlZmluZSBEQkxfTUFYXzEwX0VYUAkzMDgKKyNpZiBfX0lTT19DX1ZJU0lCTEUgPj0gMjAxMQor
I2RlZmluZQlEQkxfVFJVRV9NSU4JNC45NDA2NTY0NTg0MTI0NjU0RS0zMjQKKyNkZWZpbmUJREJM
X0RFQ0lNQUxfRElHCTE3CisjZGVmaW5lCURCTF9IQVNfU1VCTk9STQkxCisjZW5kaWYgLyogX19J
U09fQ19WSVNJQkxFID49IDIwMTEgKi8KKworI2RlZmluZSBMREJMX01BTlRfRElHCTY0CisjZGVm
aW5lIExEQkxfRVBTSUxPTgkxLjA4NDIwMjE3MjQ4NTUwNDQzNDBFLTE5TAorI2RlZmluZSBMREJM
X0RJRwkxOAorI2RlZmluZSBMREJMX01JTl9FWFAJKC0xNjM4MSkKKyNkZWZpbmUgTERCTF9NSU4J
My4zNjIxMDMxNDMxMTIwOTM1MDYzRS00OTMyTAorI2RlZmluZSBMREJMX01JTl8xMF9FWFAJKC00
OTMxKQorI2RlZmluZSBMREJMX01BWF9FWFAJMTYzODQKKyNkZWZpbmUgTERCTF9NQVgJMS4xODk3
MzE0OTUzNTcyMzE3NjUwRSs0OTMyTAorI2RlZmluZSBMREJMX01BWF8xMF9FWFAJNDkzMgorI2lm
IF9fSVNPX0NfVklTSUJMRSA+PSAyMDExCisjZGVmaW5lCUxEQkxfVFJVRV9NSU4JMy42NDUxOTk1
MzE4ODI0NzQ2MDI1RS00OTUxTAorI2RlZmluZQlMREJMX0RFQ0lNQUxfRElHIDIxCisjZGVmaW5l
CUxEQkxfSEFTX1NVQk5PUk0gMQorI2VuZGlmIC8qIF9fSVNPX0NfVklTSUJMRSA+PSAyMDExICov
CisKKyNlbmRpZiAvKiBfTUFDSElORV9GTE9BVF9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9mcHUuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
eDg2L2ZwdS5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvZnB1LmgJMTk3MC0w
MS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25l
dG1hcC94ODYvZnB1LmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAs
MCArMSwyMTcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRo
ZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVy
a2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUg
bmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMK
KyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVH
RU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFH
RS4KKyAqCisgKglmcm9tOiBAKCMpbnB4LmgJNS4zIChCZXJrZWxleSkgMS8xOC85MQorICogJEZy
ZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9mcHUuaCAyNzQ4MTcgMjAxNC0xMS0y
MSAyMDo1MzoxN1ogamhiICQKKyAqLworCisvKgorICogRmxvYXRpbmcgUG9pbnQgRGF0YSBTdHJ1
Y3R1cmVzIGFuZCBDb25zdGFudHMKKyAqIFcuIEpvbGl0eiAxLzkwCisgKi8KKworI2lmbmRlZiBf
WDg2X0ZQVV9IXworI2RlZmluZQlfWDg2X0ZQVV9IXworCisvKiBFbnZpcm9ubWVudCBpbmZvcm1h
dGlvbiBvZiBmbG9hdGluZyBwb2ludCB1bml0LiAqLworc3RydWN0IGVudjg3IHsKKwlpbnQzMl90
CQllbl9jdzsJCS8qIGNvbnRyb2wgd29yZCAoMTZiaXRzKSAqLworCWludDMyX3QJCWVuX3N3OwkJ
Lyogc3RhdHVzIHdvcmQgKDE2Yml0cykgKi8KKwlpbnQzMl90CQllbl90dzsJCS8qIHRhZyB3b3Jk
ICgxNmJpdHMpICovCisJaW50MzJfdAkJZW5fZmlwOwkJLyogZnAgaW5zdHJ1Y3Rpb24gcG9pbnRl
ciAqLworCXVpbnQxNl90CWVuX2ZjczsJCS8qIGZwIGNvZGUgc2VnbWVudCBzZWxlY3RvciAqLwor
CXVpbnQxNl90CWVuX29wY29kZTsJLyogb3Bjb2RlIGxhc3QgZXhlY3V0ZWQgKDExIGJpdHMpICov
CisJaW50MzJfdAkJZW5fZm9vOwkJLyogZnAgb3BlcmFuZCBvZmZzZXQgKi8KKwlpbnQzMl90CQll
bl9mb3M7CQkvKiBmcCBvcGVyYW5kIHNlZ21lbnQgc2VsZWN0b3IgKi8KK307CisKKy8qIENvbnRl
bnRzIG9mIGVhY2ggeDg3IGZsb2F0aW5nIHBvaW50IGFjY3VtdWxhdG9yLiAqLworc3RydWN0IGZw
YWNjODcgeworCXVpbnQ4X3QJCWZwX2J5dGVzWzEwXTsKK307CisKKy8qIEZsb2F0aW5nIHBvaW50
IGNvbnRleHQuIChpMzg2IGZuc2F2ZS9mcnN0b3IpICovCitzdHJ1Y3Qgc2F2ZTg3IHsKKwlzdHJ1
Y3QgZW52ODcJc3ZfZW52OwkJLyogZmxvYXRpbmcgcG9pbnQgY29udHJvbC9zdGF0dXMgKi8KKwlz
dHJ1Y3QgZnBhY2M4Nwlzdl9hY1s4XTsJLyogYWNjdW11bGF0b3IgY29udGVudHMsIDAtNyAqLwor
CXVpbnQ4X3QJCXN2X3BhZDBbNF07CS8qIHNhdmVkIHN0YXR1cyB3b3JkIChub3cgdW51c2VkKSAq
LworCXVpbnQ4X3QJCXN2X3BhZFs2NF07Cit9OworCisvKiBDb250ZW50cyBvZiBlYWNoIFNTRSBl
eHRlbmRlZCBhY2N1bXVsYXRvci4gKi8KK3N0cnVjdCB4bW1hY2MgeworCXVpbnQ4X3QJCXhtbV9i
eXRlc1sxNl07Cit9OworCisvKiBDb250ZW50cyBvZiB0aGUgdXBwZXIgMTYgYnl0ZXMgb2YgZWFj
aCBBVlggZXh0ZW5kZWQgYWNjdW11bGF0b3IuICovCitzdHJ1Y3QgeW1tYWNjIHsKKwl1aW50OF90
CQl5bW1fYnl0ZXNbMTZdOworfTsKKworLyogUmVuYW1lIHN0cnVjdHMgYmVsb3cgZGVwZW5kaW5n
IG9uIG1hY2hpbmUgYXJjaGl0ZWN0dXJlLiAqLworI2lmZGVmIF9faTM4Nl9fCisjZGVmaW5lCV9f
ZW52eG1tMzIJZW52eG1tCisjZWxzZQorI2RlZmluZQlfX2VudnhtbTMyCWVudnhtbTMyCisjZGVm
aW5lCV9fZW52eG1tNjQJZW52eG1tCisjZW5kaWYKKworc3RydWN0IF9fZW52eG1tMzIgeworCXVp
bnQxNl90CWVuX2N3OwkJLyogY29udHJvbCB3b3JkICgxNmJpdHMpICovCisJdWludDE2X3QJZW5f
c3c7CQkvKiBzdGF0dXMgd29yZCAoMTZiaXRzKSAqLworCXVpbnQxNl90CWVuX3R3OwkJLyogdGFn
IHdvcmQgKDE2Yml0cykgKi8KKwl1aW50MTZfdAllbl9vcGNvZGU7CS8qIG9wY29kZSBsYXN0IGV4
ZWN1dGVkICgxMSBiaXRzKSAqLworCXVpbnQzMl90CWVuX2ZpcDsJCS8qIGZwIGluc3RydWN0aW9u
IHBvaW50ZXIgKi8KKwl1aW50MTZfdAllbl9mY3M7CQkvKiBmcCBjb2RlIHNlZ21lbnQgc2VsZWN0
b3IgKi8KKwl1aW50MTZfdAllbl9wYWQwOwkvKiBwYWRkaW5nICovCisJdWludDMyX3QJZW5fZm9v
OwkJLyogZnAgb3BlcmFuZCBvZmZzZXQgKi8KKwl1aW50MTZfdAllbl9mb3M7CQkvKiBmcCBvcGVy
YW5kIHNlZ21lbnQgc2VsZWN0b3IgKi8KKwl1aW50MTZfdAllbl9wYWQxOwkvKiBwYWRkaW5nICov
CisJdWludDMyX3QJZW5fbXhjc3I7CS8qIFNTRSBjb250cm9sL3N0YXR1cyByZWdpc3RlciAqLwor
CXVpbnQzMl90CWVuX214Y3NyX21hc2s7CS8qIHZhbGlkIGJpdHMgaW4gbXhjc3IgKi8KK307CisK
K3N0cnVjdCBfX2VudnhtbTY0IHsKKwl1aW50MTZfdAllbl9jdzsJCS8qIGNvbnRyb2wgd29yZCAo
MTZiaXRzKSAqLworCXVpbnQxNl90CWVuX3N3OwkJLyogc3RhdHVzIHdvcmQgKDE2Yml0cykgKi8K
Kwl1aW50OF90CQllbl90dzsJCS8qIHRhZyB3b3JkICg4Yml0cykgKi8KKwl1aW50OF90CQllbl96
ZXJvOworCXVpbnQxNl90CWVuX29wY29kZTsJLyogb3Bjb2RlIGxhc3QgZXhlY3V0ZWQgKDExIGJp
dHMgKSAqLworCXVpbnQ2NF90CWVuX3JpcDsJCS8qIGZwIGluc3RydWN0aW9uIHBvaW50ZXIgKi8K
Kwl1aW50NjRfdAllbl9yZHA7CQkvKiBmcCBvcGVyYW5kIHBvaW50ZXIgKi8KKwl1aW50MzJfdAll
bl9teGNzcjsJLyogU1NFIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVyICovCisJdWludDMyX3QJZW5f
bXhjc3JfbWFzazsJLyogdmFsaWQgYml0cyBpbiBteGNzciAqLworfTsKKworLyogRmxvYXRpbmcg
cG9pbnQgY29udGV4dC4gKGkzODYgZnhzYXZlL2Z4cnN0b3IpICovCitzdHJ1Y3Qgc2F2ZXhtbSB7
CisJc3RydWN0IF9fZW52eG1tMzIJc3ZfZW52OworCXN0cnVjdCB7CisJCXN0cnVjdCBmcGFjYzg3
CWZwX2FjYzsKKwkJdWludDhfdAkJZnBfcGFkWzZdOyAgICAgIC8qIHBhZGRpbmcgKi8KKwl9IHN2
X2ZwWzhdOworCXN0cnVjdCB4bW1hY2MJCXN2X3htbVs4XTsKKwl1aW50OF90CQkJc3ZfcGFkWzIy
NF07Cit9IF9fYWxpZ25lZCgxNik7CisKKyNpZmRlZiBfX2kzODZfXwordW5pb24gc2F2ZWZwdSB7
CisJc3RydWN0IHNhdmU4Nwlzdl84NzsKKwlzdHJ1Y3Qgc2F2ZXhtbQlzdl94bW07Cit9OworI2Vs
c2UKKy8qIEZsb2F0aW5nIHBvaW50IGNvbnRleHQuIChhbWQ2NCBmeHNhdmUvZnhyc3RvcikgKi8K
K3N0cnVjdCBzYXZlZnB1IHsKKwlzdHJ1Y3QgX19lbnZ4bW02NAlzdl9lbnY7CisJc3RydWN0IHsK
KwkJc3RydWN0IGZwYWNjODcJZnBfYWNjOworCQl1aW50OF90CQlmcF9wYWRbNl07CS8qIHBhZGRp
bmcgKi8KKwl9IHN2X2ZwWzhdOworCXN0cnVjdCB4bW1hY2MJCXN2X3htbVsxNl07CisJdWludDhf
dAkJCXN2X3BhZFs5Nl07Cit9IF9fYWxpZ25lZCgxNik7CisjZW5kaWYKKworc3RydWN0IHhzdGF0
ZV9oZHIgeworCXVpbnQ2NF90CXhzdGF0ZV9idjsKKwl1aW50NjRfdAl4c3RhdGVfeGNvbXBfYnY7
CisJdWludDhfdAkJeHN0YXRlX3JzcnYwWzhdOworCXVpbnQ4X3QJCXhzdGF0ZV9yc3J2WzQwXTsK
K307CisjZGVmaW5lCVhTVEFURV9YQ09NUF9CVl9DT01QQUNUCSgxVUxMIDw8IDYzKQorCitzdHJ1
Y3Qgc2F2ZXhtbV94c3RhdGUgeworCXN0cnVjdCB4c3RhdGVfaGRyCXN4X2hkOworCXN0cnVjdCB5
bW1hY2MJCXN4X3ltbVsxNl07Cit9OworCitzdHJ1Y3Qgc2F2ZXhtbV95bW0geworCXN0cnVjdCBf
X2VudnhtbTMyCXN2X2VudjsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgZnBhY2M4NwlmcF9hY2M7CisJ
CWludDhfdAkJZnBfcGFkWzZdOwkvKiBwYWRkaW5nICovCisJfSBzdl9mcFs4XTsKKwlzdHJ1Y3Qg
eG1tYWNjCQlzdl94bW1bMTZdOworCXVpbnQ4X3QJCQlzdl9wYWRbOTZdOworCXN0cnVjdCBzYXZl
eG1tX3hzdGF0ZQlzdl94c3RhdGU7Cit9IF9fYWxpZ25lZCg2NCk7CisKK3N0cnVjdCBzYXZlZnB1
X3hzdGF0ZSB7CisJc3RydWN0IHhzdGF0ZV9oZHIJc3hfaGQ7CisJc3RydWN0IHltbWFjYwkJc3hf
eW1tWzE2XTsKK307CisKK3N0cnVjdCBzYXZlZnB1X3ltbSB7CisJc3RydWN0IF9fZW52eG1tNjQJ
c3ZfZW52OworCXN0cnVjdCB7CisJCXN0cnVjdCBmcGFjYzg3CWZwX2FjYzsKKwkJaW50OF90CQlm
cF9wYWRbNl07CS8qIHBhZGRpbmcgKi8KKwl9IHN2X2ZwWzhdOworCXN0cnVjdCB4bW1hY2MJCXN2
X3htbVsxNl07CisJdWludDhfdAkJCXN2X3BhZFs5Nl07CisJc3RydWN0IHNhdmVmcHVfeHN0YXRl
CXN2X3hzdGF0ZTsKK30gX19hbGlnbmVkKDY0KTsKKworI3VuZGVmIF9fZW52eG1tMzIKKyN1bmRl
ZiBfX2VudnhtbTY0CisKKy8qCisgKiBUaGUgaGFyZHdhcmUgZGVmYXVsdCBjb250cm9sIHdvcmQg
Zm9yIGkzODcncyBhbmQgbGF0ZXIgY29wcm9jZXNzb3JzIGlzCisgKiAweDM3RiwgZ2l2aW5nOgor
ICoKKyAqCXJvdW5kIHRvIG5lYXJlc3QKKyAqCTY0LWJpdCBwcmVjaXNpb24KKyAqCWFsbCBleGNl
cHRpb25zIG1hc2tlZC4KKyAqCisgKiBGcmVlQlNEL2kzODYgdXNlcyA1MyBiaXQgcHJlY2lzaW9u
IGZvciB0aGluZ3MgbGlrZSBmYWRkL2ZzdWIvZnNxcnQgZXRjCisgKiBiZWNhdXNlIG9mIHRoZSBk
aWZmZXJlbmNlIGJldHdlZW4gbWVtb3J5IGFuZCBmcHUgcmVnaXN0ZXIgc3RhY2sgYXJndW1lbnRz
LgorICogSWYgaXRzIHVzaW5nIGFuIGludGVybWVkaWF0ZSBmcHUgcmVnaXN0ZXIsIGl0IGhhcyA4
MC82NCBiaXRzIHRvIHdvcmsKKyAqIHdpdGguICBJZiBpdCB1c2VzIG1lbW9yeSwgaXQgaGFzIDY0
LzUzIGJpdHMgdG8gd29yayB3aXRoLiAgSG93ZXZlciwKKyAqIGdjYyBpcyBhd2FyZSBvZiB0aGlz
IGFuZCBnb2VzIHRvIGEgZmFpciBiaXQgb2YgdHJvdWJsZSB0byBtYWtlIHRoZQorICogYmVzdCB1
c2Ugb2YgaXQuCisgKgorICogVGhpcyBpcyBtb3N0bHkgYWNhZGVtaWMgZm9yIEFNRDY0LCBiZWNh
dXNlIHRoZSBBQkkgcHJlZmVycyB0aGUgdXNlCisgKiBTU0UyIGJhc2VkIG1hdGguICBGb3IgRnJl
ZUJTRC9hbWQ2NCwgd2UgZ28gd2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KKyAqLworI2RlZmlu
ZQlfX0lOSVRJQUxfRlBVQ1dfXwkweDAzN0YKKyNkZWZpbmUJX19JTklUSUFMX0ZQVUNXX0kzODZf
XwkweDEyN0YKKyNkZWZpbmUJX19JTklUSUFMX05QWENXX18JX19JTklUSUFMX0ZQVUNXX0kzODZf
XworI2RlZmluZQlfX0lOSVRJQUxfTVhDU1JfXwkweDFGODAKKyNkZWZpbmUJX19JTklUSUFMX01Y
Q1NSX01BU0tfXwkweEZGQkYKKworLyoKKyAqIFRoZSBjdXJyZW50IHZhbHVlIG9mICV4Y3IwIGlz
IHNhdmVkIGluIHRoZSBzdl9wYWRbXSBmaWVsZCBvZiB0aGUgRlBVCisgKiBzdGF0ZSBpbiB0aGUg
TlRfWDg2X1hTVEFURSBub3RlIGluIGNvcmUgZHVtcHMuICBUaGlzIG9mZnNldCBpcyBjaG9zZW4K
KyAqIHRvIG1hdGNoIHRoZSBvZmZzZXQgdXNlZCBieSBOVF9YODZfWFNUQVRFIGluIG90aGVyIHN5
c3RlbXMuCisgKi8KKyNkZWZpbmUJWDg2X1hTVEFURV9YQ1IwX09GRlNFVAk0NjQKKworI2VuZGlm
IC8qICFfWDg2X0ZQVV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL3g4Ni9mcmFtZS5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvZnJhbWUuaAot
LS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2ZyYW1lLmgJMTk3MC0wMS0wMSAwMTow
MDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYv
ZnJhbWUuaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDE0
OCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgUGV0ZXIgV2VtbS4KKyAqIENvcHlyaWdo
dCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9t
IHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBXaWxsaWFtIEpvbGl0ei4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRo
ZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICog
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJZnJvbTogQCgjKWZyYW1lLmgJ
NS4yIChCZXJrZWxleSkgMS8xOC85MQorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYv
aW5jbHVkZS9mcmFtZS5oIDI0NzA0NyAyMDEzLTAyLTIwIDE3OjM5OjUyWiBraWIgJAorICovCisK
KyNpZm5kZWYgX01BQ0hJTkVfRlJBTUVfSF8KKyNkZWZpbmUgX01BQ0hJTkVfRlJBTUVfSF8gMQor
CisvKgorICogU3lzdGVtIHN0YWNrIGZyYW1lcy4KKyAqLworCisjaWZkZWYgX19pMzg2X18KKy8q
CisgKiBFeGNlcHRpb24vVHJhcCBTdGFjayBGcmFtZQorICovCisKK3N0cnVjdCB0cmFwZnJhbWUg
eworCWludAl0Zl9mczsKKwlpbnQJdGZfZXM7CisJaW50CXRmX2RzOworCWludAl0Zl9lZGk7CisJ
aW50CXRmX2VzaTsKKwlpbnQJdGZfZWJwOworCWludAl0Zl9pc3A7CisJaW50CXRmX2VieDsKKwlp
bnQJdGZfZWR4OworCWludAl0Zl9lY3g7CisJaW50CXRmX2VheDsKKwlpbnQJdGZfdHJhcG5vOwor
CS8qIGJlbG93IHBvcnRpb24gZGVmaW5lZCBpbiAzODYgaGFyZHdhcmUgKi8KKwlpbnQJdGZfZXJy
OworCWludAl0Zl9laXA7CisJaW50CXRmX2NzOworCWludAl0Zl9lZmxhZ3M7CisJLyogYmVsb3cg
b25seSB3aGVuIGNyb3NzaW5nIHJpbmdzIChlLmcuIHVzZXIgdG8ga2VybmVsKSAqLworCWludAl0
Zl9lc3A7CisJaW50CXRmX3NzOworfTsKKworLyogU3VwZXJzZXQgb2YgdHJhcCBmcmFtZSwgZm9y
IHRyYXBzIGZyb20gdmlydHVhbC04MDg2IG1vZGUgKi8KKworc3RydWN0IHRyYXBmcmFtZV92bTg2
IHsKKwlpbnQJdGZfZnM7CisJaW50CXRmX2VzOworCWludAl0Zl9kczsKKwlpbnQJdGZfZWRpOwor
CWludAl0Zl9lc2k7CisJaW50CXRmX2VicDsKKwlpbnQJdGZfaXNwOworCWludAl0Zl9lYng7CisJ
aW50CXRmX2VkeDsKKwlpbnQJdGZfZWN4OworCWludAl0Zl9lYXg7CisJaW50CXRmX3RyYXBubzsK
KwkvKiBiZWxvdyBwb3J0aW9uIGRlZmluZWQgaW4gMzg2IGhhcmR3YXJlICovCisJaW50CXRmX2Vy
cjsKKwlpbnQJdGZfZWlwOworCWludAl0Zl9jczsKKwlpbnQJdGZfZWZsYWdzOworCS8qIGJlbG93
IG9ubHkgd2hlbiBjcm9zc2luZyByaW5ncyAoZS5nLiB1c2VyIHRvIGtlcm5lbCkgKi8KKwlpbnQJ
dGZfZXNwOworCWludAl0Zl9zczsKKwkvKiBiZWxvdyBvbmx5IHdoZW4gc3dpdGNoaW5nIG91dCBv
ZiBWTTg2IG1vZGUgKi8KKwlpbnQJdGZfdm04Nl9lczsKKwlpbnQJdGZfdm04Nl9kczsKKwlpbnQJ
dGZfdm04Nl9mczsKKwlpbnQJdGZfdm04Nl9nczsKK307CisjZW5kaWYgLyogX19pMzg2X18gKi8K
KworI2lmZGVmIF9fYW1kNjRfXworLyoKKyAqIEV4Y2VwdGlvbi9UcmFwIFN0YWNrIEZyYW1lCisg
KgorICogVGhlIG9yZGVyaW5nIG9mIHRoaXMgaXMgc3BlY2lmaWNhbGx5IHNvIHRoYXQgd2UgY2Fu
IHRha2UgZmlyc3QgNgorICogdGhlIHN5c2NhbGwgYXJndW1lbnRzIGRpcmVjdGx5IGZyb20gdGhl
IGJlZ2lubmluZyBvZiB0aGUgZnJhbWUuCisgKi8KKworc3RydWN0IHRyYXBmcmFtZSB7CisJcmVn
aXN0ZXJfdAl0Zl9yZGk7CisJcmVnaXN0ZXJfdAl0Zl9yc2k7CisJcmVnaXN0ZXJfdAl0Zl9yZHg7
CisJcmVnaXN0ZXJfdAl0Zl9yY3g7CisJcmVnaXN0ZXJfdAl0Zl9yODsKKwlyZWdpc3Rlcl90CXRm
X3I5OworCXJlZ2lzdGVyX3QJdGZfcmF4OworCXJlZ2lzdGVyX3QJdGZfcmJ4OworCXJlZ2lzdGVy
X3QJdGZfcmJwOworCXJlZ2lzdGVyX3QJdGZfcjEwOworCXJlZ2lzdGVyX3QJdGZfcjExOworCXJl
Z2lzdGVyX3QJdGZfcjEyOworCXJlZ2lzdGVyX3QJdGZfcjEzOworCXJlZ2lzdGVyX3QJdGZfcjE0
OworCXJlZ2lzdGVyX3QJdGZfcjE1OworCXVpbnQzMl90CXRmX3RyYXBubzsKKwl1aW50MTZfdAl0
Zl9mczsKKwl1aW50MTZfdAl0Zl9nczsKKwlyZWdpc3Rlcl90CXRmX2FkZHI7CisJdWludDMyX3QJ
dGZfZmxhZ3M7CisJdWludDE2X3QJdGZfZXM7CisJdWludDE2X3QJdGZfZHM7CisJLyogYmVsb3cg
cG9ydGlvbiBkZWZpbmVkIGluIGhhcmR3YXJlICovCisJcmVnaXN0ZXJfdAl0Zl9lcnI7CisJcmVn
aXN0ZXJfdAl0Zl9yaXA7CisJcmVnaXN0ZXJfdAl0Zl9jczsKKwlyZWdpc3Rlcl90CXRmX3JmbGFn
czsKKwlyZWdpc3Rlcl90CXRmX3JzcDsKKwlyZWdpc3Rlcl90CXRmX3NzOworfTsKKworI2RlZmlu
ZQlURl9IQVNTRUdTCTB4MQorI2RlZmluZQlURl9IQVNCQVNFUwkweDIKKyNkZWZpbmUJVEZfSEFT
RlBYU1RBVEUJMHg0CisjZW5kaWYgLyogX19hbWQ2NF9fICovCisKKyNlbmRpZiAvKiBfTUFDSElO
RV9GUkFNRV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4
Ni9pbml0LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9pbml0LmgKLS0tIHVzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9pbml0LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAw
MDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvaW5pdC5oCTIw
MTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNTggQEAKKy8qLQor
ICogQ29weXJpZ2h0IChjKSAyMDEzIFJvZ2VyIFBhdSBNb25uw6kgPHJvZ2VyLnBhdUBjaXRyaXgu
Y29tPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBBUyBJUycnIEFO
RAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5
cy94ODYvaW5jbHVkZS9pbml0LmggMjcyMzEwIDIwMTQtMDktMzAgMTY6NDY6NDVaIHJveWdlciAk
CisgKi8KKworI2lmbmRlZiBfX1g4Nl9JTklUX0hfXworI2RlZmluZSBfX1g4Nl9JTklUX0hfXwor
LyoKKyAqIFN0cnVjdCBjb250YWluaW5nIHBvaW50ZXJzIHRvIGluaXQgZnVuY3Rpb25zIHdob3Nl
CisgKiBpbXBsZW1lbnRhdGlvbiBpcyBydW4gdGltZSBzZWxlY3RhYmxlLiAgU2VsZWN0aW9uIGNh
biBiZSBtYWRlLAorICogZm9yIGV4YW1wbGUsIGJhc2VkIG9uIGRldGVjdGlvbiBvZiBhIEJJT1Mg
dmFyaWFudCBvcgorICogaHlwZXJ2aXNvciBlbnZpcm9ubWVudC4KKyAqLworc3RydWN0IGluaXRf
b3BzIHsKKwljYWRkcl90CSgqcGFyc2VfcHJlbG9hZF9kYXRhKSh1X2ludDY0X3QpOworCXZvaWQJ
KCplYXJseV9jbG9ja19zb3VyY2VfaW5pdCkodm9pZCk7CisJdm9pZAkoKmVhcmx5X2RlbGF5KShp
bnQpOworCXZvaWQJKCpwYXJzZV9tZW1tYXApKGNhZGRyX3QsIHZtX3BhZGRyX3QgKiwgaW50ICop
OworCXVfaW50CSgqbXBfYm9vdGFkZHJlc3MpKHVfaW50KTsKKwlpbnQJKCpzdGFydF9hbGxfYXBz
KSh2b2lkKTsKKwl2b2lkCSgqbXNpX2luaXQpKHZvaWQpOworfTsKKworZXh0ZXJuIHN0cnVjdCBp
bml0X29wcyBpbml0X29wczsKKworLyogS25vYiB0byBkaXNhYmxlIGFjcGlfY3B1IGRldmljZXMg
Ki8KK2V4dGVybiBib29sIGFjcGlfY3B1X2Rpc2FibGVkOworCisvKiBLbm9iIHRvIGRpc2FibGUg
YWNwaV9ocGV0IGRldmljZSAqLworZXh0ZXJuIGJvb2wgYWNwaV9ocGV0X2Rpc2FibGVkOworCisv
KiBLbm9iIHRvIGRpc2FibGUgYWNwaV90aW1lciBkZXZpY2UgKi8KK2V4dGVybiBib29sIGFjcGlf
dGltZXJfZGlzYWJsZWQ7CisKKyNlbmRpZiAvKiBfX1g4Nl9JTklUX0hfXyAqLwpkaWZmIC11IC1y
IC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9sZWdhY3l2YXIuaCAvdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAveDg2L2xlZ2FjeXZhci5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC94ODYvbGVnYWN5dmFyLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx
MDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvbGVnYWN5dmFyLmgJMjAxNi0w
OS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw3MSBAQAorLyotCisgKiBD
b3B5cmlnaHQgKGMpIDIwMDAgUGV0ZXIgV2VtbSA8cGV0ZXJARnJlZUJTRC5vcmc+CisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq
IFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1
ZGUvbGVnYWN5dmFyLmggMjk0ODgzIDIwMTYtMDEtMjcgMDI6MjM6NTRaIGpoaWJiaXRzICQKKyAq
LworCisjaWZuZGVmIF9YODZfTEVHQUNZVkFSX0hfCisjZGVmaW5lCV9YODZfTEVHQUNZVkFSX0hf
CisKK2VudW0gbGVnYWN5X2RldmljZV9pdmFycyB7CisJTEVHQUNZX0lWQVJfUENJRE9NQUlOLAor
CUxFR0FDWV9JVkFSX1BDSUJVUywKKwlMRUdBQ1lfSVZBUl9QQ0lTTE9ULAorCUxFR0FDWV9JVkFS
X1BDSUZVTkMKK307CisKKyNkZWZpbmUgTEVHQUNZX0FDQ0VTU09SKHZhciwgaXZhciwgdHlwZSkJ
CQkJXAorICAgIF9fQlVTX0FDQ0VTU09SKGxlZ2FjeSwgdmFyLCBMRUdBQ1ksIGl2YXIsIHR5cGUp
CisKK0xFR0FDWV9BQ0NFU1NPUihwY2lkb21haW4sCQlQQ0lET01BSU4sCXVpbnQzMl90KQorTEVH
QUNZX0FDQ0VTU09SKHBjaWJ1cywJCQlQQ0lCVVMsCQl1aW50MzJfdCkKK0xFR0FDWV9BQ0NFU1NP
UihwY2lzbG90LAkJUENJU0xPVCwJaW50KQorTEVHQUNZX0FDQ0VTU09SKHBjaWZ1bmMsCQlQQ0lG
VU5DLAlpbnQpCisKKyN1bmRlZiBMRUdBQ1lfQUNDRVNTT1IKKworaW50CWxlZ2FjeV9wY2liX21h
eHNsb3RzKGRldmljZV90IGRldik7Cit1aW50MzJfdCBsZWdhY3lfcGNpYl9yZWFkX2NvbmZpZyhk
ZXZpY2VfdCBkZXYsIHVfaW50IGJ1cywgdV9pbnQgc2xvdCwKKyAgICB1X2ludCBmdW5jLCB1X2lu
dCByZWcsIGludCBieXRlcyk7CitpbnQJbGVnYWN5X3BjaWJfcmVhZF9pdmFyKGRldmljZV90IGRl
diwgZGV2aWNlX3QgY2hpbGQsIGludCB3aGljaCwKKyAgICB1aW50cHRyX3QgKnJlc3VsdCk7Cit2
b2lkCWxlZ2FjeV9wY2liX3dyaXRlX2NvbmZpZyhkZXZpY2VfdCBkZXYsIHVfaW50IGJ1cywgdV9p
bnQgc2xvdCwKKyAgICB1X2ludCBmdW5jLCB1X2ludCByZWcsIHVpbnQzMl90IGRhdGEsIGludCBi
eXRlcyk7CitpbnQJbGVnYWN5X3BjaWJfd3JpdGVfaXZhcihkZXZpY2VfdCBkZXYsIGRldmljZV90
IGNoaWxkLCBpbnQgd2hpY2gsCisgICAgdWludHB0cl90IHZhbHVlKTsKK3N0cnVjdCByZXNvdXJj
ZSAqbGVnYWN5X3BjaWJfYWxsb2NfcmVzb3VyY2UoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGls
ZCwKKyAgICBpbnQgdHlwZSwgaW50ICpyaWQsIHJtYW5fcmVzX3Qgc3RhcnQsIHJtYW5fcmVzX3Qg
ZW5kLCBybWFuX3Jlc190IGNvdW50LAorICAgIHVfaW50IGZsYWdzKTsKK2ludAlsZWdhY3lfcGNp
Yl9hZGp1c3RfcmVzb3VyY2UoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgaW50IHR5cGUs
CisgICAgc3RydWN0IHJlc291cmNlICpyLCBybWFuX3Jlc190IHN0YXJ0LCBybWFuX3Jlc190IGVu
ZCk7CitpbnQJbGVnYWN5X3BjaWJfcmVsZWFzZV9yZXNvdXJjZShkZXZpY2VfdCBkZXYsIGRldmlj
ZV90IGNoaWxkLCBpbnQgdHlwZSwKKyAgICBpbnQgcmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnIpOwor
aW50CWxlZ2FjeV9wY2liX2FsbG9jX21zaShkZXZpY2VfdCBwY2liLCBkZXZpY2VfdCBkZXYsIGlu
dCBjb3VudCwKKyAgICBpbnQgbWF4Y291bnQsIGludCAqaXJxcyk7CitpbnQJbGVnYWN5X3BjaWJf
YWxsb2NfbXNpeChkZXZpY2VfdCBwY2liLCBkZXZpY2VfdCBkZXYsIGludCAqaXJxKTsKK2ludAls
ZWdhY3lfcGNpYl9tYXBfbXNpKGRldmljZV90IHBjaWIsIGRldmljZV90IGRldiwgaW50IGlycSwK
KyAgICB1aW50NjRfdCAqYWRkciwgdWludDMyX3QgKmRhdGEpOworCisjZW5kaWYgLyogIV9YODZf
TEVHQUNZVkFSX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
eDg2L21jYS5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvbWNhLmgKLS0tIHVzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9tY2EuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw
MDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9tY2EuaAkyMDE2
LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDU2IEBACisvKi0KKyAq
IENvcHlyaWdodCAoYykgMjAwOSBIdWRzb24gUml2ZXIgVHJhZGluZyBMTEMKKyAqIFdyaXR0ZW4g
Ynk6IEpvaG4gSC4gQmFsZHdpbiA8amhiQEZyZWVCU0Qub3JnPgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBB
VVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFH
RS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL21jYS5oIDI4
MTg4NyAyMDE1LTA0LTIzIDE0OjIyOjIwWiBqaGIgJAorICovCisKKyNpZm5kZWYgX19YODZfTUNB
X0hfXworI2RlZmluZQlfX1g4Nl9NQ0FfSF9fCisKK3N0cnVjdCBtY2FfcmVjb3JkIHsKKwl1aW50
NjRfdAltcl9zdGF0dXM7CisJdWludDY0X3QJbXJfYWRkcjsKKwl1aW50NjRfdAltcl9taXNjOwor
CXVpbnQ2NF90CW1yX3RzYzsKKwlpbnQJCW1yX2FwaWNfaWQ7CisJaW50CQltcl9iYW5rOworCXVp
bnQ2NF90CW1yX21jZ19jYXA7CisJdWludDY0X3QJbXJfbWNnX3N0YXR1czsKKwlpbnQJCW1yX2Nw
dV9pZDsKKwlpbnQJCW1yX2NwdV92ZW5kb3JfaWQ7CisJaW50CQltcl9jcHU7Cit9OworCisjaWZk
ZWYgX0tFUk5FTAorCit2b2lkCWNtY19pbnRyKHZvaWQpOwordm9pZAltY2FfaW5pdCh2b2lkKTsK
K3ZvaWQJbWNhX2ludHIodm9pZCk7Cit2b2lkCW1jYV9yZXN1bWUodm9pZCk7CisKKyNlbmRpZgor
CisjZW5kaWYgLyogIV9fWDg2X01DQV9IX18gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC94ODYvbWV0YWRhdGEuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
eDg2L21ldGFkYXRhLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9tZXRhZGF0
YS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAveDg2L21ldGFkYXRhLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAw
MDAgKzAxMDAKQEAgLTAsMCArMSw1NyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgUGV0
ZXIgV2VtbSA8cGV0ZXJARnJlZUJTRC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAq
ICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvbWV0YWRhdGEuaCAyOTMzNDMg
MjAxNi0wMS0wNyAxOTo0NzoyNlogZW1hc3RlICQKKyAqLworCisjaWZuZGVmIF9NQUNISU5FX01F
VEFEQVRBX0hfCisjZGVmaW5lCV9NQUNISU5FX01FVEFEQVRBX0hfCisKKyNkZWZpbmUJTU9ESU5G
T01EX1NNQVAJCTB4MTAwMQorI2RlZmluZQlNT0RJTkZPTURfU01BUF9YQVRUUgkweDEwMDIKKyNk
ZWZpbmUJTU9ESU5GT01EX0RUQlAJCTB4MTAwMworI2RlZmluZQlNT0RJTkZPTURfRUZJX01BUAkw
eDEwMDQKKyNkZWZpbmUJTU9ESU5GT01EX0VGSV9GQgkweDEwMDUKKyNkZWZpbmUJTU9ESU5GT01E
X01PRFVMRVAJMHgxMDA2CisKK3N0cnVjdCBlZmlfbWFwX2hlYWRlciB7CisJdWludDY0X3QJbWVt
b3J5X3NpemU7CisJdWludDY0X3QJZGVzY3JpcHRvcl9zaXplOworCXVpbnQzMl90CWRlc2NyaXB0
b3JfdmVyc2lvbjsKK307CisKK3N0cnVjdCBlZmlfZmIgeworCXVpbnQ2NF90CWZiX2FkZHI7CisJ
dWludDY0X3QJZmJfc2l6ZTsKKwl1aW50MzJfdAlmYl9oZWlnaHQ7CisJdWludDMyX3QJZmJfd2lk
dGg7CisJdWludDMyX3QJZmJfc3RyaWRlOworCXVpbnQzMl90CWZiX21hc2tfcmVkOworCXVpbnQz
Ml90CWZiX21hc2tfZ3JlZW47CisJdWludDMyX3QJZmJfbWFza19ibHVlOworCXVpbnQzMl90CWZi
X21hc2tfcmVzZXJ2ZWQ7Cit9OworCisjZW5kaWYgLyogIV9NQUNISU5FX01FVEFEQVRBX0hfICov
CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L21wdGFibGUuaCAv
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L21wdGFibGUuaAotLS0gdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAveDg2L21wdGFibGUuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAw
MCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9tcHRhYmxlLmgJMjAx
Ni0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwyMDQgQEAKKy8qLQor
ICogQ29weXJpZ2h0IChjKSAxOTk2LCBieSBTdGV2ZSBQYXNzZQorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBUaGUgbmFtZSBvZiB0aGUgZGV2ZWxvcGVyIG1heSBO
T1QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAq
ICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvbXB0YWJsZS5oIDI1OTIyOCAy
MDEzLTEyLTExIDIxOjE5OjA0WiBqaGIgJAorICovCisKKyNpZm5kZWYgX19NQUNISU5FX01QVEFC
TEVfSF9fCisjZGVmaW5lCV9fTUFDSElORV9NUFRBQkxFX0hfXworCitlbnVtIGJ1c1R5cGVzIHsK
KyAgICBOT0JVUyA9IDAsCisgICAgQ0JVUyA9IDEsCisgICAgQ0JVU0lJID0gMiwKKyAgICBFSVNB
ID0gMywKKyAgICBJU0EgPSA2LAorICAgIE1DQSA9IDksCisgICAgUENJID0gMTMsCisgICAgWFBS
RVNTID0gMTgsCisgICAgTUFYX0JVU1RZUEUgPSAxOCwKKyAgICBVTktOT1dOX0JVU1RZUEUgPSAw
eGZmCit9OworCisvKiBNUCBGbG9hdGluZyBQb2ludGVyIFN0cnVjdHVyZSAqLwordHlwZWRlZiBz
dHJ1Y3QgTVBGUFMgeworCXVpbnQ4X3QJc2lnbmF0dXJlWzRdOworCXVpbnQzMl90IHBhcDsKKwl1
aW50OF90CWxlbmd0aDsKKwl1aW50OF90CXNwZWNfcmV2OworCXVpbnQ4X3QJY2hlY2tzdW07CisJ
dWludDhfdAljb25maWdfdHlwZTsKKwl1aW50OF90CW1wZmIyOworCXVpbnQ4X3QJbXBmYjM7CisJ
dWludDhfdAltcGZiNDsKKwl1aW50OF90CW1wZmI1OworfSBfX3BhY2tlZCAqbXBmcHNfdDsKKwor
I2RlZmluZQlNUEZCMl9JTUNSX1BSRVNFTlQJMHg4MAorI2RlZmluZQlNUEZCMl9NVUxfQ0xLX1NS
Q1MJMHg0MAorCisvKiBNUCBDb25maWd1cmF0aW9uIFRhYmxlIEhlYWRlciAqLwordHlwZWRlZiBz
dHJ1Y3QgTVBDVEggeworCXVpbnQ4X3QJc2lnbmF0dXJlWzRdOworCXVpbnQxNl90IGJhc2VfdGFi
bGVfbGVuZ3RoOworCXVpbnQ4X3QJc3BlY19yZXY7CisJdWludDhfdAljaGVja3N1bTsKKwl1aW50
OF90CW9lbV9pZFs4XTsKKwl1aW50OF90CXByb2R1Y3RfaWRbMTJdOworCXVpbnQzMl90IG9lbV90
YWJsZV9wb2ludGVyOworCXVpbnQxNl90IG9lbV90YWJsZV9zaXplOworCXVpbnQxNl90IGVudHJ5
X2NvdW50OworCXVpbnQzMl90IGFwaWNfYWRkcmVzczsKKwl1aW50MTZfdCBleHRlbmRlZF90YWJs
ZV9sZW5ndGg7CisJdWludDhfdAlleHRlbmRlZF90YWJsZV9jaGVja3N1bTsKKwl1aW50OF90CXJl
c2VydmVkOworfSBfX3BhY2tlZCAqbXBjdGhfdDsKKworLyogQmFzZSB0YWJsZSBlbnRyaWVzICov
CisKKyNkZWZpbmUJTVBDVF9FTlRSWV9QUk9DRVNTT1IJMAorI2RlZmluZQlNUENUX0VOVFJZX0JV
UwkJMQorI2RlZmluZQlNUENUX0VOVFJZX0lPQVBJQwkyCisjZGVmaW5lCU1QQ1RfRU5UUllfSU5U
CQkzCisjZGVmaW5lCU1QQ1RfRU5UUllfTE9DQUxfSU5UCTQKKwordHlwZWRlZiBzdHJ1Y3QgUFJP
Q0VOVFJZIHsKKwl1aW50OF90CXR5cGU7CisJdWludDhfdAlhcGljX2lkOworCXVpbnQ4X3QJYXBp
Y192ZXJzaW9uOworCXVpbnQ4X3QJY3B1X2ZsYWdzOworCXVpbnQzMl90IGNwdV9zaWduYXR1cmU7
CisJdWludDMyX3QgZmVhdHVyZV9mbGFnczsKKwl1aW50MzJfdCByZXNlcnZlZDE7CisJdWludDMy
X3QgcmVzZXJ2ZWQyOworfSBfX3BhY2tlZCAqcHJvY19lbnRyeV9wdHI7CisKKyNkZWZpbmUgUFJP
Q0VOVFJZX0ZMQUdfRU4JMHgwMQorI2RlZmluZSBQUk9DRU5UUllfRkxBR19CUAkweDAyCisKK3R5
cGVkZWYgc3RydWN0IEJVU0VOVFJZIHsKKwl1aW50OF90CXR5cGU7CisJdWludDhfdAlidXNfaWQ7
CisJdWludDhfdAlidXNfdHlwZVs2XTsKK30gX19wYWNrZWQgKmJ1c19lbnRyeV9wdHI7CisKK3R5
cGVkZWYgc3RydWN0IElPQVBJQ0VOVFJZIHsKKwl1aW50OF90CXR5cGU7CisJdWludDhfdAlhcGlj
X2lkOworCXVpbnQ4X3QJYXBpY192ZXJzaW9uOworCXVpbnQ4X3QJYXBpY19mbGFnczsKKwl1aW50
MzJfdCBhcGljX2FkZHJlc3M7Cit9IF9fcGFja2VkICppb19hcGljX2VudHJ5X3B0cjsKKworI2Rl
ZmluZSBJT0FQSUNFTlRSWV9GTEFHX0VOCTB4MDEKKwordHlwZWRlZiBzdHJ1Y3QgSU5URU5UUlkg
eworCXVpbnQ4X3QJdHlwZTsKKwl1aW50OF90CWludF90eXBlOworCXVpbnQxNl90IGludF9mbGFn
czsKKwl1aW50OF90CXNyY19idXNfaWQ7CisJdWludDhfdAlzcmNfYnVzX2lycTsKKwl1aW50OF90
CWRzdF9hcGljX2lkOworCXVpbnQ4X3QJZHN0X2FwaWNfaW50OworfSBfX3BhY2tlZCAqaW50X2Vu
dHJ5X3B0cjsKKworI2RlZmluZQlJTlRFTlRSWV9UWVBFX0lOVCAgCTAKKyNkZWZpbmUJSU5URU5U
UllfVFlQRV9OTUkJMQorI2RlZmluZQlJTlRFTlRSWV9UWVBFX1NNSQkyCisjZGVmaW5lCUlOVEVO
VFJZX1RZUEVfRVhUSU5UCTMKKworI2RlZmluZQlJTlRFTlRSWV9GTEFHU19QT0xBUklUWQkJCTB4
MworI2RlZmluZQlJTlRFTlRSWV9GTEFHU19QT0xBUklUWV9DT05GT1JNCQkweDAKKyNkZWZpbmUJ
SU5URU5UUllfRkxBR1NfUE9MQVJJVFlfQUNUSVZFSEkJMHgxCisjZGVmaW5lCUlOVEVOVFJZX0ZM
QUdTX1BPTEFSSVRZX0FDVElWRUxPCTB4MworI2RlZmluZQlJTlRFTlRSWV9GTEFHU19UUklHR0VS
CQkJMHhjCisjZGVmaW5lCUlOVEVOVFJZX0ZMQUdTX1RSSUdHRVJfQ09ORk9STQkJMHgwCisjZGVm
aW5lCUlOVEVOVFJZX0ZMQUdTX1RSSUdHRVJfRURHRQkJMHg0CisjZGVmaW5lCUlOVEVOVFJZX0ZM
QUdTX1RSSUdHRVJfTEVWRUwJCTB4YworCisvKiBFeHRlbmRlZCB0YWJsZSBlbnRyaWVzICovCisK
K3R5cGVkZWYJc3RydWN0IEVYVEVOVFJZIHsKKwl1aW50OF90CXR5cGU7CisJdWludDhfdAlsZW5n
dGg7Cit9IF9fcGFja2VkICpleHRfZW50cnlfcHRyOworCisjZGVmaW5lCU1QQ1RfRVhURU5UUllf
U0FTCTB4ODAKKyNkZWZpbmUJTVBDVF9FWFRFTlRSWV9CSEQJMHg4MQorI2RlZmluZQlNUENUX0VY
VEVOVFJZX0NCQVNNCTB4ODIKKwordHlwZWRlZiBzdHJ1Y3QgU0FTRU5UUlkgeworCXVpbnQ4X3QJ
dHlwZTsKKwl1aW50OF90CWxlbmd0aDsKKwl1aW50OF90CWJ1c19pZDsKKwl1aW50OF90CWFkZHJl
c3NfdHlwZTsKKwl1aW50NjRfdCBhZGRyZXNzX2Jhc2U7CisJdWludDY0X3QgYWRkcmVzc19sZW5n
dGg7Cit9IF9fcGFja2VkICpzYXNfZW50cnlfcHRyOworCisjZGVmaW5lCVNBU0VOVFJZX1RZUEVf
SU8JMAorI2RlZmluZQlTQVNFTlRSWV9UWVBFX01FTU9SWQkxCisjZGVmaW5lCVNBU0VOVFJZX1RZ
UEVfUFJFRkVUQ0gJMgorCit0eXBlZGVmIHN0cnVjdCBCSERFTlRSWSB7CisJdWludDhfdAl0eXBl
OworCXVpbnQ4X3QJbGVuZ3RoOworCXVpbnQ4X3QJYnVzX2lkOworCXVpbnQ4X3QJYnVzX2luZm87
CisJdWludDhfdAlwYXJlbnRfYnVzOworCXVpbnQ4X3QJcmVzZXJ2ZWRbM107Cit9IF9fcGFja2Vk
ICpiaGRfZW50cnlfcHRyOworCisjZGVmaW5lCUJIREVOVFJZX0lORk9fU1VCVFJBQ1RJVkVfREVD
T0RFCTB4MQorCit0eXBlZGVmIHN0cnVjdCBDQkFTTUVOVFJZIHsKKwl1aW50OF90CXR5cGU7CisJ
dWludDhfdAlsZW5ndGg7CisJdWludDhfdAlidXNfaWQ7CisJdWludDhfdAlhZGRyZXNzX21vZDsK
Kwl1aW50MzJfdCBwcmVkZWZpbmVkX3JhbmdlOworfSBfX3BhY2tlZCAqY2Jhc21fZW50cnlfcHRy
OworCisjZGVmaW5lCUNCQVNNRU5UUllfQUREUkVTU19NT0RfQURECQkweDAKKyNkZWZpbmUJQ0JB
U01FTlRSWV9BRERSRVNTX01PRF9TVUJUUkFDVAkJMHgxCisKKyNkZWZpbmUJQ0JBU01FTlRSWV9S
QU5HRV9JU0FfSU8JCTAKKyNkZWZpbmUJQ0JBU01FTlRSWV9SQU5HRV9WR0FfSU8JCTEKKworI2lm
ZGVmIF9LRVJORUwKK3N0cnVjdCBtcHRhYmxlX2hvc3RiX3NvZnRjIHsKKyNpZmRlZiBORVdfUENJ
QgorCXN0cnVjdCBwY2liX2hvc3RfcmVzb3VyY2VzIHNjX2hvc3RfcmVzOworCWludAkJc2NfZGVj
b2Rlc192Z2FfaW87CisJaW50CQlzY19kZWNvZGVzX2lzYV9pbzsKKyNlbmRpZgorfTsKKworI2lm
ZGVmIE5FV19QQ0lCCit2b2lkCW1wdGFibGVfcGNpX2hvc3RfcmVzX2luaXQoZGV2aWNlX3QgcGNp
Yik7CisjZW5kaWYKK2ludAltcHRhYmxlX3BjaV9wcm9iZV90YWJsZShpbnQgYnVzKTsKK2ludAlt
cHRhYmxlX3BjaV9yb3V0ZV9pbnRlcnJ1cHQoZGV2aWNlX3QgcGNpYiwgZGV2aWNlX3QgZGV2LCBp
bnQgcGluKTsKKyNlbmRpZgorI2VuZGlmIC8qICFfX01BQ0hJTkVfTVBUQUJMRV9IX18gKi8KZGlm
ZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvb2Z3X21hY2hkZXAuaCAv
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L29md19tYWNoZGVwLmgKLS0tIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9vZndfbWFjaGRlcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAu
MDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L29md19t
YWNoZGVwLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw0
MiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgSnVuaXBlciBOZXR3b3JrcywgSW5jLgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisg
KiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQor
ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK
KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL3g4
Ni9pbmNsdWRlL29md19tYWNoZGVwLmggMjg3MjYwIDIwMTUtMDgtMjggMTU6NDE6MDlaIGltcCAk
CisgKi8KKworI2lmbmRlZiBfTUFDSElORV9PRldfTUFDSERFUF9IXworI2RlZmluZSBfTUFDSElO
RV9PRldfTUFDSERFUF9IXworCisjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4KKyNpbmNsdWRlIDx2
bS92bS5oPgorCit0eXBlZGVmCXVpbnQzMl90CWNlbGxfdDsKKworc3RydWN0IG1lbV9yZWdpb24g
eworCXZtX29mZnNldF90CW1yX3N0YXJ0OworCXZtX3NpemVfdAltcl9zaXplOworfTsKKworI2Vu
ZGlmIC8qIF9NQUNISU5FX09GV19NQUNIREVQX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAveDg2L3BjaV9jZmdyZWcuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u
ZXRtYXAveDg2L3BjaV9jZmdyZWcuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2
L3BjaV9jZmdyZWcuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9wY2lfY2ZncmVnLmgJMjAxNi0wOS0yOSAwMDoy
NDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw2MCBAQAorLyotCisgKiBDb3B5cmlnaHQg
KGMpIDE5OTcsIFN0ZWZhbiBFc3NlciA8c2VAZnJlZWJzZC5vcmc+CisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSB1bm1vZGlmaWVkLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cywgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgor
ICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVC
U0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9wY2lfY2ZncmVnLmggMjk0ODgzIDIwMTYt
MDEtMjcgMDI6MjM6NTRaIGpoaWJiaXRzICQKKyAqCisgKi8KKworI2lmbmRlZiBfX1g4Nl9QQ0lf
Q0ZHUkVHX0hfXworI2RlZmluZQlfX1g4Nl9QQ0lfQ0ZHUkVHX0hfXworCisjZGVmaW5lIENPTkYx
X0FERFJfUE9SVCAgICAweDBjZjgKKyNkZWZpbmUgQ09ORjFfREFUQV9QT1JUICAgIDB4MGNmYwor
CisjZGVmaW5lIENPTkYxX0VOQUJMRSAgICAgICAweDgwMDAwMDAwdWwKKyNkZWZpbmUgQ09ORjFf
RU5BQkxFX0NISyAgIDB4ODAwMDAwMDB1bAorI2RlZmluZSBDT05GMV9FTkFCTEVfTVNLICAgMHg3
ZjAwMDAwMHVsCisjZGVmaW5lIENPTkYxX0VOQUJMRV9DSEsxICAweGZmMDAwMDAxdWwKKyNkZWZp
bmUgQ09ORjFfRU5BQkxFX01TSzEgIDB4ODAwMDAwMDF1bAorI2RlZmluZSBDT05GMV9FTkFCTEVf
UkVTMSAgMHg4MDAwMDAwMHVsCisKKyNkZWZpbmUgQ09ORjJfRU5BQkxFX1BPUlQgIDB4MGNmOAor
I2RlZmluZSBDT05GMl9GT1JXQVJEX1BPUlQgMHgwY2ZhCisKKyNkZWZpbmUgQ09ORjJfRU5BQkxF
X0NISyAgIDB4MGUKKyNkZWZpbmUgQ09ORjJfRU5BQkxFX1JFUyAgIDB4MGUKKworcm1hbl9yZXNf
dAlob3N0Yl9hbGxvY19zdGFydChpbnQgdHlwZSwgcm1hbl9yZXNfdCBzdGFydCwgcm1hbl9yZXNf
dCBlbmQsIHJtYW5fcmVzX3QgY291bnQpOworaW50CQlwY2llX2NmZ3JlZ29wZW4odWludDY0X3Qg
YmFzZSwgdWludDhfdCBtaW5idXMsIHVpbnQ4X3QgbWF4YnVzKTsKK2ludAkJcGNpX2NmZ3JlZ29w
ZW4odm9pZCk7Cit1X2ludDMyX3QJcGNpX2NmZ3JlZ3JlYWQoaW50IGJ1cywgaW50IHNsb3QsIGlu
dCBmdW5jLCBpbnQgcmVnLCBpbnQgYnl0ZXMpOwordm9pZAkJcGNpX2NmZ3JlZ3dyaXRlKGludCBi
dXMsIGludCBzbG90LCBpbnQgZnVuYywgaW50IHJlZywgdV9pbnQzMl90IGRhdGEsIGludCBieXRl
cyk7CisjaWZkZWYgX19IQVZFX1BJUgordm9pZAkJcGNpX3Bpcl9vcGVuKHZvaWQpOworaW50CQlw
Y2lfcGlyX3Byb2JlKGludCBidXMsIGludCByZXF1aXJlX3BhcnNlKTsKK2ludAkJcGNpX3Bpcl9y
b3V0ZV9pbnRlcnJ1cHQoaW50IGJ1cywgaW50IGRldmljZSwgaW50IGZ1bmMsIGludCBwaW4pOwor
I2VuZGlmCisKKyNlbmRpZiAvKiAhX19YODZfUENJX0NGR1JFR19IX18gKi8KZGlmZiAtdSAtciAt
TiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvcHNsLmggL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL3g4Ni9wc2wuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3Bz
bC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAveDg2L3BzbC5oCTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAwMDAwICsw
MTAwCkBAIC0wLDAgKzEsOTIgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdl
bnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0
ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6LgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVp
dGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT
VUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpcHNsLmgJNS4yIChCZXJrZWxleSkgMS8xOC85
MQorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9wc2wuaCAyNTgxMzUg
MjAxMy0xMS0xNCAxNTozNzoyMFogZW1hc3RlICQKKyAqLworCisjaWZuZGVmIF9NQUNISU5FX1BT
TF9IXworI2RlZmluZQlfTUFDSElORV9QU0xfSF8KKworLyoKKyAqIDM4NiBwcm9jZXNzb3Igc3Rh
dHVzIGxvbmd3b3JkLgorICovCisjZGVmaW5lCVBTTF9DCQkweDAwMDAwMDAxCS8qIGNhcnJ5IGJp
dCAqLworI2RlZmluZQlQU0xfUEYJCTB4MDAwMDAwMDQJLyogcGFyaXR5IGJpdCAqLworI2RlZmlu
ZQlQU0xfQUYJCTB4MDAwMDAwMTAJLyogYmNkIGNhcnJ5IGJpdCAqLworI2RlZmluZQlQU0xfWgkJ
MHgwMDAwMDA0MAkvKiB6ZXJvIGJpdCAqLworI2RlZmluZQlQU0xfTgkJMHgwMDAwMDA4MAkvKiBu
ZWdhdGl2ZSBiaXQgKi8KKyNkZWZpbmUJUFNMX1QJCTB4MDAwMDAxMDAJLyogdHJhY2UgZW5hYmxl
IGJpdCAqLworI2RlZmluZQlQU0xfSQkJMHgwMDAwMDIwMAkvKiBpbnRlcnJ1cHQgZW5hYmxlIGJp
dCAqLworI2RlZmluZQlQU0xfRAkJMHgwMDAwMDQwMAkvKiBzdHJpbmcgaW5zdHJ1Y3Rpb24gZGly
ZWN0aW9uIGJpdCAqLworI2RlZmluZQlQU0xfVgkJMHgwMDAwMDgwMAkvKiBvdmVyZmxvdyBiaXQg
Ki8KKyNkZWZpbmUJUFNMX0lPUEwJMHgwMDAwMzAwMAkvKiBpL28gcHJpdmlsZWdlIGxldmVsICov
CisjZGVmaW5lCVBTTF9OVAkJMHgwMDAwNDAwMAkvKiBuZXN0ZWQgdGFzayBiaXQgKi8KKyNkZWZp
bmUJUFNMX1JGCQkweDAwMDEwMDAwCS8qIHJlc3VtZSBmbGFnIGJpdCAqLworI2RlZmluZQlQU0xf
Vk0JCTB4MDAwMjAwMDAJLyogdmlydHVhbCA4MDg2IG1vZGUgYml0ICovCisjZGVmaW5lCVBTTF9B
QwkJMHgwMDA0MDAwMAkvKiBhbGlnbm1lbnQgY2hlY2tpbmcgKi8KKyNkZWZpbmUJUFNMX1ZJRgkJ
MHgwMDA4MDAwMAkvKiB2aXJ0dWFsIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUJUFNMX1ZJ
UAkJMHgwMDEwMDAwMAkvKiB2aXJ0dWFsIGludGVycnVwdCBwZW5kaW5nICovCisjZGVmaW5lCVBT
TF9JRAkJMHgwMDIwMDAwMAkvKiBpZGVudGlmaWNhdGlvbiBiaXQgKi8KKworLyoKKyAqIFRoZSBp
NDg2IG1hbnVhbCBzYXlzIHRoYXQgd2UgYXJlIG5vdCBzdXBwb3NlZCB0byBjaGFuZ2UgcmVzZXJ2
ZWQgZmxhZ3MsCisgKiBidXQgdGhpcyBpcyB0b28gbXVjaCB0cm91YmxlIHNpbmNlIHRoZSByZXNl
cnZlZCBmbGFncyBkZXBlbmQgb24gdGhlIGNwdQorICogYW5kIHNldHRpbmcgdGhlbSB0byB0aGVp
ciBoaXN0b3JpY2FsIHZhbHVlcyB3b3JrcyBpbiBwcmFjdGljZS4KKyAqLworI2RlZmluZQlQU0xf
UkVTRVJWRURfREVGQVVMVAkweDAwMDAwMDAyCisKKy8qCisgKiBJbml0aWFsIGZsYWdzIGZvciBr
ZXJuZWwgYW5kIHVzZXIgbW9kZS4gIFRoZSBrZXJuZWwgbGF0ZXIgaW5oZXJpdHMKKyAqIFBTTF9J
IGFuZCBzb21lIG90aGVyIGZsYWdzIGZyb20gdXNlciBtb2RlLgorICovCisjZGVmaW5lCVBTTF9L
RVJORUwJUFNMX1JFU0VSVkVEX0RFRkFVTFQKKyNkZWZpbmUJUFNMX1VTRVIJKFBTTF9SRVNFUlZF
RF9ERUZBVUxUIHwgUFNMX0kpCisKKy8qCisgKiBCaXRzIHRoYXQgY2FuIGJlIGNoYW5nZWQgaW4g
dXNlciBtb2RlIG9uIDQ4NidzLiAgV2UgYWxsb3cgdGhlc2UgYml0cworICogdG8gYmUgY2hhbmdl
ZCB1c2luZyBwdHJhY2UoKSwgc2lncmV0dXJuKCkgYW5kIHByb2Nmcy4gIFNldHRpbmcgUFNfTlQK
KyAqIGlzIHVuZGVzaXJhYmxlIGJ1dCBpdCBtYXkgYXMgd2VsbCBiZSBhbGxvd2VkIHNpbmNlIHVz
ZXJzIGNhbiBpbmZsaWN0CisgKiBpdCBvbiB0aGUga2VybmVsIGRpcmVjdGx5LiAgQ2hhbmdlcyB0
byBQU0xfQUMgYXJlIHNpbGVudGx5IGlnbm9yZWQgb24KKyAqIDM4NidzLgorICoKKyAqIFVzZXJz
IGFyZSBhbGxvd2VkIHRvIGNoYW5nZSB0aGUgcHJpdmlsZWdlZCBmbGFnIFBTTF9SRi4gIFRoZSBj
cHUgc2V0cyBQU0xfUkYKKyAqIGluIHRmX2VmbGFncyBmb3IgZmF1bHRzLiAgRGVidWdnZXJzIHNo
b3VsZCBzb21ldGltZXMgc2V0IGl0IHRoZXJlIHRvby4KKyAqIHRmX2VmbGFncyBpcyBrZXB0IGlu
IHRoZSBzaWduYWwgY29udGV4dCBkdXJpbmcgc2lnbmFsIGhhbmRsaW5nIGFuZCB0aGVyZSBpcwor
ICogbm8gb3RoZXIgcGxhY2UgdG8gcmVtZW1iZXIgaXQsIHNvIHRoZSBQU0xfUkYgYml0IG1heSBi
ZSBjb3JydXB0ZWQgYnkgdGhlCisgKiBzaWduYWwgaGFuZGxlciB3aXRob3V0IHVzIGtub3dpbmcu
ICBDb3JydXB0aW9uIG9mIHRoZSBQU0xfUkYgYml0IGF0IHdvcnN0CisgKiBjYXVzZXMgb25lIG1v
cmUgb3Igb25lIGxlc3MgZGVidWdnZXIgdHJhcCwgc28gYWxsb3dpbmcgaXQgaXMgZmFpcmx5Cisg
KiBoYXJtbGVzcy4gICAKKyAqLworI2RlZmluZQlQU0xfVVNFUkNIQU5HRSAoUFNMX0MgfCBQU0xf
UEYgfCBQU0xfQUYgfCBQU0xfWiB8IFBTTF9OIHwgUFNMX1QgXAorCQkJfCBQU0xfRCB8IFBTTF9W
IHwgUFNMX05UIHwgUFNMX1JGIHwgUFNMX0FDIHwgUFNMX0lEKQorCisjZW5kaWYgLyogIV9NQUNI
SU5FX1BTTF9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4
Ni9wdHJhY2UuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3B0cmFjZS5oCi0tLSB1
c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvcHRyYWNlLmgJMTk3MC0wMS0wMSAwMTowMDow
MC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvcHRy
YWNlLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw2NSBA
QAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRo
ZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpcHRyYWNlLmgJOC4xIChCZXJrZWxl
eSkgNi8xMS85MworICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9wdHJh
Y2UuaCAyODQ5MTkgMjAxNS0wNi0yOSAwNzowNzoyNFoga2liICQKKyAqLworCisjaWZuZGVmIF9N
QUNISU5FX1BUUkFDRV9IXworI2RlZmluZSBfTUFDSElORV9QVFJBQ0VfSF8KKworI2RlZmluZQlf
X0hBVkVfUFRSQUNFX01BQ0hERVAKKworLyoKKyAqIE9uIGFtZDY0IChQVF9GSVJTVE1BQ0ggKyAw
KSBhbmQgKFBUX0ZJUlNUTUFDSCArIDEpIGFyZSBvbGQgdmFsdWVzIGZvcgorICogUFRfR0VUWFNU
QVRFX09MRCBhbmQgUFRfU0VUWFNUQVRFX09MRC4gIFRoZXkgc2hvdWxkIG5vdCBiZSAocmUpdXNl
ZC4KKyAqLworCisjaWZkZWYgX19pMzg2X18KKyNkZWZpbmUJUFRfR0VUWE1NUkVHUwkoUFRfRklS
U1RNQUNIICsgMCkKKyNkZWZpbmUJUFRfU0VUWE1NUkVHUwkoUFRfRklSU1RNQUNIICsgMSkKKyNl
bmRpZgorI2lmZGVmIF9LRVJORUwKKyNkZWZpbmUJUFRfR0VUWFNUQVRFX09MRCAoUFRfRklSU1RN
QUNIICsgMikKKyNkZWZpbmUJUFRfU0VUWFNUQVRFX09MRCAoUFRfRklSU1RNQUNIICsgMykKKyNl
bmRpZgorI2RlZmluZQlQVF9HRVRYU1RBVEVfSU5GTyAoUFRfRklSU1RNQUNIICsgNCkKKyNkZWZp
bmUJUFRfR0VUWFNUQVRFCShQVF9GSVJTVE1BQ0ggKyA1KQorI2RlZmluZQlQVF9TRVRYU1RBVEUJ
KFBUX0ZJUlNUTUFDSCArIDYpCisjZGVmaW5lCVBUX0dFVEZTQkFTRQkoUFRfRklSU1RNQUNIICsg
NykKKyNkZWZpbmUJUFRfU0VURlNCQVNFCShQVF9GSVJTVE1BQ0ggKyA4KQorI2RlZmluZQlQVF9H
RVRHU0JBU0UJKFBUX0ZJUlNUTUFDSCArIDkpCisjZGVmaW5lCVBUX1NFVEdTQkFTRQkoUFRfRklS
U1RNQUNIICsgMTApCisKKy8qIEFyZ3VtZW50IHN0cnVjdHVyZSBmb3IgUFRfR0VUWFNUQVRFX0lO
Rk8uICovCitzdHJ1Y3QgcHRyYWNlX3hzdGF0ZV9pbmZvIHsKKwl1aW50NjRfdAl4c2F2ZV9tYXNr
OworCXVpbnQzMl90CXhzYXZlX2xlbjsKK307CisKKyNlbmRpZgpkaWZmIC11IC1yIC1OIHVzci9z
cmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9wdmNsb2NrLmggL3Vzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL3g4Ni9wdmNsb2NrLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9w
dmNsb2NrLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC94ODYvcHZjbG9jay5oCTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAw
MDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNTkgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE0
LCBCcnlhbiBWZW50ZWljaGVyIDxicnlhbnZARnJlZUJTRC5vcmc+CisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFN
QUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvcHZjbG9j
ay5oIDI3ODE4NCAyMDE1LTAyLTA0IDA4OjMzOjA0WiBicnlhbnYgJAorICovCisKKyNpZm5kZWYg
WDg2X1BWQ0xPQ0sKKyNkZWZpbmUgWDg2X1BWQ0xPQ0sKKworc3RydWN0IHB2Y2xvY2tfdmNwdV90
aW1lX2luZm8geworCXVpbnQzMl90CXZlcnNpb247CisJdWludDMyX3QJcGFkMDsKKwl1aW50NjRf
dAl0c2NfdGltZXN0YW1wOworCXVpbnQ2NF90CXN5c3RlbV90aW1lOworCXVpbnQzMl90CXRzY190
b19zeXN0ZW1fbXVsOworCWludDhfdAkJdHNjX3NoaWZ0OworCXVpbnQ4X3QJCWZsYWdzOworCXVp
bnQ4X3QJCXBhZFsyXTsKK307CisKKyNkZWZpbmUgUFZDTE9DS19GTEFHX1RTQ19TVEFCTEUJCTB4
MDEKKyNkZWZpbmUgUFZDTE9DS19GTEFHX0dVRVNUX1BBU1VFRAkweDAyCisKK3N0cnVjdCBwdmNs
b2NrX3dhbGxfY2xvY2sgeworCXVpbnQzMl90CXZlcnNpb247CisJdWludDMyX3QJc2VjOworCXVp
bnQzMl90CW5zZWM7Cit9OworCit2b2lkCQlwdmNsb2NrX3Jlc3VtZSh2b2lkKTsKK3VpbnQ2NF90
CXB2Y2xvY2tfZ2V0X2xhc3RfY3ljbGVzKHZvaWQpOwordWludDY0X3QJcHZjbG9ja190c2NfZnJl
cShzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqdGkpOwordWludDY0X3QJcHZjbG9ja19n
ZXRfdGltZWNvdW50KHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICp0aSk7Cit2b2lkCQlw
dmNsb2NrX2dldF93YWxsY2xvY2soc3RydWN0IHB2Y2xvY2tfd2FsbF9jbG9jayAqd2MsCisJCSAg
ICBzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKKworI2VuZGlmCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9z
eXMvbW9kdWxlcy9uZXRtYXAveDg2L3JlZy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94
ODYvcmVnLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9yZWcuaAkxOTcwLTAx
LTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL3g4Ni9yZWcuaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCArMDEwMApAQCAtMCww
ICsxLDI1NyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgUGV0ZXIgV2VtbS4KKyAqIENv
cHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9y
bmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZl
ZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBXaWxsaWFtIEpv
bGl0ei4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkg
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAq
ICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwor
ICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJZnJvbTogQCgjKXJl
Zy5oCTUuNSAoQmVya2VsZXkpIDEvMTgvOTEKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMv
eDg2L2luY2x1ZGUvcmVnLmggMjgxMjY2IDIwMTUtMDQtMDggMTY6MzA6NDVaIGpoYiAkCisgKi8K
KworI2lmbmRlZiBfTUFDSElORV9SRUdfSF8KKyNkZWZpbmUJX01BQ0hJTkVfUkVHX0hfCisKKyNp
bmNsdWRlIDxtYWNoaW5lL190eXBlcy5oPgorCisjaWZkZWYgX19pMzg2X18KKy8qCisgKiBJbmRp
Y2VzIGZvciByZWdpc3RlcnMgaW4gYHN0cnVjdCB0cmFwZnJhbWUnIGFuZCBgc3RydWN0IHJlZ3Mn
LgorICoKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGRlcHJlY2F0ZWQuICBJbiB0aGUga2VybmVsLCBp
dCBpcyBvbmx5IHVzZWQgaW4gRlBVCisgKiBlbXVsYXRvcnMgdG8gY29udmVydCBmcm9tIHJlZ2lz
dGVyIG51bWJlcnMgZW5jb2RlZCBpbiBpbnN0cnVjdGlvbnMgdG8KKyAqIHJlZ2lzdGVyIHZhbHVl
cy4gIEV2ZXJ5dGhpbmcgZWxzZSBqdXN0IGFjY2Vzc2VzIHRoZSByZWxldmFudCBzdHJ1Y3QKKyAq
IG1lbWJlcnMuICBJbiB1c2VybGFuZCwgZGVidWdnZXJzIHRlbmQgdG8gYWJ1c2UgdGhpcyBpbnRl
cmZhY2Ugc2luY2UKKyAqIHRoZXkgZG9uJ3QgdW5kZXJzdGFuZCB0aGF0IGBzdHJ1Y3QgcmVncycg
aXMgYSBzdHJ1Y3QuICBJIGhvcGUgdGhleSBoYXZlCisgKiBzdG9wcGVkIGFjY2Vzc2luZyB0aGUg
cmVnaXN0ZXJzIGluIHRoZSB0cmFwIGZyYW1lIHZpYSBQVF97UkVBRCxXUklURX1fVQorICogYW5k
IHdlIGNhbiBzdG9wIHN1cHBvcnRpbmcgdGhlIHVzZXIgYXJlYSBzb29uLgorICovCisjZGVmaW5l
CXRGUwkoMCkKKyNkZWZpbmUJdEVTCSgxKQorI2RlZmluZQl0RFMJKDIpCisjZGVmaW5lCXRFREkJ
KDMpCisjZGVmaW5lCXRFU0kJKDQpCisjZGVmaW5lCXRFQlAJKDUpCisjZGVmaW5lCXRJU1AJKDYp
CisjZGVmaW5lCXRFQlgJKDcpCisjZGVmaW5lCXRFRFgJKDgpCisjZGVmaW5lCXRFQ1gJKDkpCisj
ZGVmaW5lCXRFQVgJKDEwKQorI2RlZmluZQl0RVJSCSgxMikKKyNkZWZpbmUJdEVJUAkoMTMpCisj
ZGVmaW5lCXRDUwkoMTQpCisjZGVmaW5lCXRFRkxBR1MJKDE1KQorI2RlZmluZQl0RVNQCSgxNikK
KyNkZWZpbmUJdFNTCSgxNykKKworLyoKKyAqIEluZGljZXMgZm9yIHJlZ2lzdGVycyBpbiBgc3Ry
dWN0IHJlZ3MnIG9ubHkuCisgKgorICogU29tZSByZWdpc3RlcnMgbGl2ZSBpbiB0aGUgcGNiIGFu
ZCBhcmUgb25seSBpbiBhbiAiYXJyYXkiIHdpdGggdGhlCisgKiBvdGhlciByZWdpc3RlcnMgaW4g
YXBwbGljYXRpb24gaW50ZXJmYWNlcyB0aGF0IGNvcHkgYWxsIHRoZSByZWdpc3RlcnMKKyAqIHRv
IG9yIGZyb20gYSBgc3RydWN0IHJlZ3MnLgorICovCisjZGVmaW5lCXRHUwkoMTgpCisjZW5kaWYg
LyogX19pMzg2X18gKi8KKworLyogUmVuYW1lIHRoZSBzdHJ1Y3RzIGJlbG93IGRlcGVuZGluZyBv
biB0aGUgbWFjaGluZSBhcmNoaXRlY3R1cmUuICovCisjaWZkZWYJX19pMzg2X18KKyNkZWZpbmUJ
X19yZWczMgkJcmVnCisjZGVmaW5lCV9fZnByZWczMglmcHJlZworI2RlZmluZQlfX2RicmVnMzIJ
ZGJyZWcKKyNlbHNlCisjZGVmaW5lCV9fcmVnMzIJCXJlZzMyCisjZGVmaW5lCV9fcmVnNjQJCXJl
ZworI2RlZmluZQlfX2ZwcmVnMzIJZnByZWczMgorI2RlZmluZQlfX2ZwcmVnNjQJZnByZWcKKyNk
ZWZpbmUJX19kYnJlZzMyCWRicmVnMzIKKyNkZWZpbmUJX19kYnJlZzY0CWRicmVnCisjZGVmaW5l
CV9fSEFWRV9SRUczMgorI2VuZGlmCisKKy8qCisgKiBSZWdpc3RlciBzZXQgYWNjZXNzaWJsZSB2
aWEgL3Byb2MvJHBpZC9yZWdzIGFuZCBQVF97U0VULEdFVH1SRUdTLgorICovCitzdHJ1Y3QgX19y
ZWczMiB7CisJX191aW50MzJfdAlyX2ZzOworCV9fdWludDMyX3QJcl9lczsKKwlfX3VpbnQzMl90
CXJfZHM7CisJX191aW50MzJfdAlyX2VkaTsKKwlfX3VpbnQzMl90CXJfZXNpOworCV9fdWludDMy
X3QJcl9lYnA7CisJX191aW50MzJfdAlyX2lzcDsKKwlfX3VpbnQzMl90CXJfZWJ4OworCV9fdWlu
dDMyX3QJcl9lZHg7CisJX191aW50MzJfdAlyX2VjeDsKKwlfX3VpbnQzMl90CXJfZWF4OworCV9f
dWludDMyX3QJcl90cmFwbm87CisJX191aW50MzJfdAlyX2VycjsKKwlfX3VpbnQzMl90CXJfZWlw
OworCV9fdWludDMyX3QJcl9jczsKKwlfX3VpbnQzMl90CXJfZWZsYWdzOworCV9fdWludDMyX3QJ
cl9lc3A7CisJX191aW50MzJfdAlyX3NzOworCV9fdWludDMyX3QJcl9nczsKK307CisKK3N0cnVj
dCBfX3JlZzY0IHsKKwlfX2ludDY0X3QJcl9yMTU7CisJX19pbnQ2NF90CXJfcjE0OworCV9faW50
NjRfdAlyX3IxMzsKKwlfX2ludDY0X3QJcl9yMTI7CisJX19pbnQ2NF90CXJfcjExOworCV9faW50
NjRfdAlyX3IxMDsKKwlfX2ludDY0X3QJcl9yOTsKKwlfX2ludDY0X3QJcl9yODsKKwlfX2ludDY0
X3QJcl9yZGk7CisJX19pbnQ2NF90CXJfcnNpOworCV9faW50NjRfdAlyX3JicDsKKwlfX2ludDY0
X3QJcl9yYng7CisJX19pbnQ2NF90CXJfcmR4OworCV9faW50NjRfdAlyX3JjeDsKKwlfX2ludDY0
X3QJcl9yYXg7CisJX191aW50MzJfdAlyX3RyYXBubzsKKwlfX3VpbnQxNl90CXJfZnM7CisJX191
aW50MTZfdAlyX2dzOworCV9fdWludDMyX3QJcl9lcnI7CisJX191aW50MTZfdAlyX2VzOworCV9f
dWludDE2X3QJcl9kczsKKwlfX2ludDY0X3QJcl9yaXA7CisJX19pbnQ2NF90CXJfY3M7CisJX19p
bnQ2NF90CXJfcmZsYWdzOworCV9faW50NjRfdAlyX3JzcDsKKwlfX2ludDY0X3QJcl9zczsKK307
CisKKy8qCisgKiBSZWdpc3RlciBzZXQgYWNjZXNzaWJsZSB2aWEgL3Byb2MvJHBpZC9mcHJlZ3Mu
CisgKgorICogWFhYIHNob3VsZCBnZXQgc3RydWN0IGZyb20gZnB1LmguICBIZXJlIHdlIGdpdmUg
YSBzbGlnaHRseQorICogc2ltcGxpZmllZCBzdHJ1Y3QuICBUaGlzIG1heSBiZSB0b28gbXVjaCBk
ZXRhaWwuICBQZXJoYXBzCisgKiBhbiBhcnJheSBvZiB1bnNpZ25lZCBsb25ncyBpcyBiZXN0Lgor
ICovCitzdHJ1Y3QgX19mcHJlZzMyIHsKKwlfX3VpbnQzMl90CWZwcl9lbnZbN107CisJX191aW50
OF90CWZwcl9hY2NbOF1bMTBdOworCV9fdWludDMyX3QJZnByX2V4X3N3OworCV9fdWludDhfdAlm
cHJfcGFkWzY0XTsKK307CisKK3N0cnVjdCBfX2ZwcmVnNjQgeworCV9fdWludDY0X3QJZnByX2Vu
dls0XTsKKwlfX3VpbnQ4X3QJZnByX2FjY1s4XVsxNl07CisJX191aW50OF90CWZwcl94YWNjWzE2
XVsxNl07CisJX191aW50NjRfdAlmcHJfc3BhcmVbMTJdOworfTsKKworLyoKKyAqIFJlZ2lzdGVy
IHNldCBhY2Nlc3NpYmxlIHZpYSBQVF9HRVRYTU1SRUdTIChpMzg2KS4KKyAqLworc3RydWN0IHht
bXJlZyB7CisJLyoKKwkgKiBYWFggc2hvdWxkIGdldCBzdHJ1Y3QgZnJvbSBucHguaC4gIEhlcmUg
d2UgZ2l2ZSBhIHNsaWdodGx5CisJICogc2ltcGxpZmllZCBzdHJ1Y3QuICBUaGlzIG1heSBiZSB0
b28gbXVjaCBkZXRhaWwuICBQZXJoYXBzCisJICogYW4gYXJyYXkgb2YgdW5zaWduZWQgbG9uZ3Mg
aXMgYmVzdC4KKwkgKi8KKwlfX3VpbnQzMl90CXhtbV9lbnZbOF07CisJX191aW50OF90CXhtbV9h
Y2NbOF1bMTZdOworCV9fdWludDhfdAl4bW1fcmVnWzhdWzE2XTsKKwlfX3VpbnQ4X3QJeG1tX3Bh
ZFsyMjRdOworfTsKKworLyoKKyAqIFJlZ2lzdGVyIHNldCBhY2Nlc3NpYmxlIHZpYSAvcHJvYy8k
cGlkL2RicmVncy4KKyAqLworc3RydWN0IF9fZGJyZWczMiB7CisJX191aW50MzJfdAlkcls4XTsJ
LyogZGVidWcgcmVnaXN0ZXJzICovCisJCQkJLyogSW5kZXggMC0zOiBkZWJ1ZyBhZGRyZXNzIHJl
Z2lzdGVycyAqLworCQkJCS8qIEluZGV4IDQtNTogcmVzZXJ2ZWQgKi8KKwkJCQkvKiBJbmRleCA2
OiBkZWJ1ZyBzdGF0dXMgKi8KKwkJCQkvKiBJbmRleCA3OiBkZWJ1ZyBjb250cm9sICovCit9Owor
CitzdHJ1Y3QgX19kYnJlZzY0IHsKKwlfX3VpbnQ2NF90CWRyWzE2XTsJLyogZGVidWcgcmVnaXN0
ZXJzICovCisJCQkJLyogSW5kZXggMC0zOiBkZWJ1ZyBhZGRyZXNzIHJlZ2lzdGVycyAqLworCQkJ
CS8qIEluZGV4IDQtNTogcmVzZXJ2ZWQgKi8KKwkJCQkvKiBJbmRleCA2OiBkZWJ1ZyBzdGF0dXMg
Ki8KKwkJCQkvKiBJbmRleCA3OiBkZWJ1ZyBjb250cm9sICovCisJCQkJLyogSW5kZXggOC0xNTog
cmVzZXJ2ZWQgKi8KK307CisKKyNkZWZpbmUJREJSRUdfRFI3X0xPQ0FMX0VOQUJMRQkweDAxCisj
ZGVmaW5lCURCUkVHX0RSN19HTE9CQUxfRU5BQkxFCTB4MDIKKyNkZWZpbmUJREJSRUdfRFI3X0xF
Tl8xCQkweDAwCS8qIDEgYnl0ZSBsZW5ndGggICAgICAgICAgKi8KKyNkZWZpbmUJREJSRUdfRFI3
X0xFTl8yCQkweDAxCisjZGVmaW5lCURCUkVHX0RSN19MRU5fNAkJMHgwMworI2RlZmluZQlEQlJF
R19EUjdfTEVOXzgJCTB4MDIKKyNkZWZpbmUJREJSRUdfRFI3X0VYRUMJCTB4MDAJLyogYnJlYWsg
b24gZXhlY3V0ZSAgICAgICAqLworI2RlZmluZQlEQlJFR19EUjdfV1JPTkxZCTB4MDEJLyogYnJl
YWsgb24gd3JpdGUgICAgICAgICAqLworI2RlZmluZQlEQlJFR19EUjdfUkRXUgkJMHgwMwkvKiBi
cmVhayBvbiByZWFkIG9yIHdyaXRlICovCisjZGVmaW5lCURCUkVHX0RSN19NQVNLKGkpCVwKKwko
KF9fdV9yZWdpc3Rlcl90KSgweGYpIDw8ICgoaSkgKiA0ICsgMTYpIHwgMHgzIDw8IChpKSAqIDIp
CisjZGVmaW5lCURCUkVHX0RSN19TRVQoaSwgbGVuLCBhY2Nlc3MsIGVuYWJsZSkJCQkJXAorCSgo
X191X3JlZ2lzdGVyX3QpKChsZW4pIDw8IDIgfCAoYWNjZXNzKSkgPDwgKChpKSAqIDQgKyAxNikg
fCAJXAorCShlbmFibGUpIDw8IChpKSAqIDIpCisjZGVmaW5lCURCUkVHX0RSN19HRAkJMHgyMDAw
CisjZGVmaW5lCURCUkVHX0RSN19FTkFCTEVEKGQsIGkpCSgoKGQpICYgMHgzIDw8IChpKSAqIDIp
ICE9IDApCisjZGVmaW5lCURCUkVHX0RSN19BQ0NFU1MoZCwgaSkJKChkKSA+PiAoKGkpICogNCAr
IDE2KSAmIDB4MykKKyNkZWZpbmUJREJSRUdfRFI3X0xFTihkLCBpKQkoKGQpID4+ICgoaSkgKiA0
ICsgMTgpICYgMHgzKQorCisjZGVmaW5lCURCUkVHX0RSWChkLHgpCSgoZCktPmRyWyh4KV0pCS8q
IHJlZmVyZW5jZSBkcjAgLSBkcjcgYnkKKwkJCQkJICAgcmVnaXN0ZXIgbnVtYmVyICovCisKKyN1
bmRlZiBfX3JlZzMyCisjdW5kZWYgX19yZWc2NAorI3VuZGVmIF9fZnByZWczMgorI3VuZGVmIF9f
ZnByZWc2NAorI3VuZGVmIF9fZGJyZWczMgorI3VuZGVmIF9fZGJyZWc2NAorCisjaWZkZWYgX0tF
Uk5FTAorLyoKKyAqIFhYWCB0aGVzZSBpbnRlcmZhY2VzIGFyZSBNSSwgc28gdGhleSBzaG91bGQg
YmUgZGVjbGFyZWQgaW4gYSBNSSBwbGFjZS4KKyAqLworaW50CWZpbGxfcmVncyhzdHJ1Y3QgdGhy
ZWFkICosIHN0cnVjdCByZWcgKik7CitpbnQJZmlsbF9mcmFtZV9yZWdzKHN0cnVjdCB0cmFwZnJh
bWUgKiwgc3RydWN0IHJlZyAqKTsKK2ludAlzZXRfcmVncyhzdHJ1Y3QgdGhyZWFkICosIHN0cnVj
dCByZWcgKik7CitpbnQJZmlsbF9mcHJlZ3Moc3RydWN0IHRocmVhZCAqLCBzdHJ1Y3QgZnByZWcg
Kik7CitpbnQJc2V0X2ZwcmVncyhzdHJ1Y3QgdGhyZWFkICosIHN0cnVjdCBmcHJlZyAqKTsKK2lu
dAlmaWxsX2RicmVncyhzdHJ1Y3QgdGhyZWFkICosIHN0cnVjdCBkYnJlZyAqKTsKK2ludAlzZXRf
ZGJyZWdzKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IGRicmVnICopOworI2lmZGVmIENPTVBBVF9G
UkVFQlNEMzIKK2ludAlmaWxsX3JlZ3MzMihzdHJ1Y3QgdGhyZWFkICosIHN0cnVjdCByZWczMiAq
KTsKK2ludAlzZXRfcmVnczMyKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IHJlZzMyICopOworaW50
CWZpbGxfZnByZWdzMzIoc3RydWN0IHRocmVhZCAqLCBzdHJ1Y3QgZnByZWczMiAqKTsKK2ludAlz
ZXRfZnByZWdzMzIoc3RydWN0IHRocmVhZCAqLCBzdHJ1Y3QgZnByZWczMiAqKTsKK2ludAlmaWxs
X2RicmVnczMyKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IGRicmVnMzIgKik7CitpbnQJc2V0X2Ri
cmVnczMyKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IGRicmVnMzIgKik7CisjZW5kaWYKKyNlbmRp
ZgorCisjZW5kaWYgLyogIV9NQUNISU5FX1JFR19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9zZWdtZW50cy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25l
dG1hcC94ODYvc2VnbWVudHMuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3Nl
Z21lbnRzLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC94ODYvc2VnbWVudHMuaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAw
MDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDI3OSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5
ODksIDE5OTAgV2lsbGlhbSBGLiBKb2xpdHoKKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVn
ZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1
dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBXaWxsaWFtIEpvbGl0ei4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u
dHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICog
U1VDSCBEQU1BR0UuCisgKgorICoJZnJvbTogQCgjKXNlZ21lbnRzLmgJNy4xIChCZXJrZWxleSkg
NS85LzkxCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL3NlZ21lbnRz
LmggMjgyMjc0IDIwMTUtMDQtMzAgMTU6NDg6NDhaIGpoYiAkCisgKi8KKworI2lmbmRlZiBfWDg2
X1NFR01FTlRTX0hfCisjZGVmaW5lCV9YODZfU0VHTUVOVFNfSF8KKworLyoKKyAqIFg4NiBTZWdt
ZW50YXRpb24gRGF0YSBTdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucworICovCisKKy8qCisgKiBT
ZWxlY3RvcnMKKyAqLworI2RlZmluZQlTRUxfUlBMX01BU0sJMwkJLyogcmVxdWVzdGVyIHByaXYg
bGV2ZWwgKi8KKyNkZWZpbmUJSVNQTChzKQkJKChzKSYzKQkJLyogcHJpb3JpdHkgbGV2ZWwgb2Yg
YSBzZWxlY3RvciAqLworI2RlZmluZQlTRUxfS1BMCQkwCQkvKiBrZXJuZWwgcHJpb3JpdHkgbGV2
ZWwgKi8KKyNkZWZpbmUJU0VMX1VQTAkJMwkJLyogdXNlciBwcmlvcml0eSBsZXZlbCAqLworI2Rl
ZmluZQlJU0xEVChzKQkoKHMpJlNFTF9MRFQpCS8qIGlzIGl0IGxvY2FsIG9yIGdsb2JhbCAqLwor
I2RlZmluZQlTRUxfTERUCQk0CQkvKiBsb2NhbCBkZXNjcmlwdG9yIHRhYmxlICovCisjZGVmaW5l
CUlEWFNFTChzKQkoKChzKT4+MykgJiAweDFmZmYpIC8qIGluZGV4IG9mIHNlbGVjdG9yICovCisj
ZGVmaW5lCUxTRUwocyxyKQkoKChzKTw8MykgfCBTRUxfTERUIHwgcikgLyogYSBsb2NhbCBzZWxl
Y3RvciAqLworI2RlZmluZQlHU0VMKHMscikJKCgocyk8PDMpIHwgcikJLyogYSBnbG9iYWwgc2Vs
ZWN0b3IgKi8KKworLyoKKyAqIFVzZXIgc2VnbWVudCBkZXNjcmlwdG9ycyAoJWNzLCAlZHMgZXRj
IGZvciBpMzg2IGFwcHMuIDY0IGJpdCB3aWRlKQorICogRm9yIGxvbmctbW9kZSBhcHBzLCAlY3Mg
b25seSBoYXMgdGhlIGNvbmZvcm1pbmcgYml0IGluIHNkX3R5cGUsIHRoZSBzZF9kcGwsCisgKiBz
ZF9wLCBzZF9sIGFuZCBzZF9kZWYzMiB3aGljaCBtdXN0IGJlIHplcm8pLiAgJWRzIG9ubHkgaGFz
IHNkX3AuCisgKi8KK3N0cnVjdCBzZWdtZW50X2Rlc2NyaXB0b3IgeworCXVuc2lnbmVkIHNkX2xv
bGltaXQ6MTY7CQkvKiBzZWdtZW50IGV4dGVudCAobHNiKSAqLworCXVuc2lnbmVkIHNkX2xvYmFz
ZToyNDsJCS8qIHNlZ21lbnQgYmFzZSBhZGRyZXNzIChsc2IpICovCisJdW5zaWduZWQgc2RfdHlw
ZTo1OwkJLyogc2VnbWVudCB0eXBlICovCisJdW5zaWduZWQgc2RfZHBsOjI7CQkvKiBzZWdtZW50
IGRlc2NyaXB0b3IgcHJpb3JpdHkgbGV2ZWwgKi8KKwl1bnNpZ25lZCBzZF9wOjE7CQkvKiBzZWdt
ZW50IGRlc2NyaXB0b3IgcHJlc2VudCAqLworCXVuc2lnbmVkIHNkX2hpbGltaXQ6NDsJCS8qIHNl
Z21lbnQgZXh0ZW50IChtc2IpICovCisJdW5zaWduZWQgc2RfeHg6MjsJCS8qIHVudXNlZCAqLwor
CXVuc2lnbmVkIHNkX2RlZjMyOjE7CQkvKiBkZWZhdWx0IDMyIHZzIDE2IGJpdCBzaXplICovCisJ
dW5zaWduZWQgc2RfZ3JhbjoxOwkJLyogbGltaXQgZ3JhbnVsYXJpdHkgKGJ5dGUvcGFnZSB1bml0
cykqLworCXVuc2lnbmVkIHNkX2hpYmFzZTo4OwkJLyogc2VnbWVudCBiYXNlIGFkZHJlc3MgICht
c2IpICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgdXNlcl9zZWdtZW50X2Rlc2NyaXB0b3Igewor
CXVuc2lnbmVkIHNkX2xvbGltaXQ6MTY7CQkvKiBzZWdtZW50IGV4dGVudCAobHNiKSAqLworCXVu
c2lnbmVkIHNkX2xvYmFzZToyNDsJCS8qIHNlZ21lbnQgYmFzZSBhZGRyZXNzIChsc2IpICovCisJ
dW5zaWduZWQgc2RfdHlwZTo1OwkJLyogc2VnbWVudCB0eXBlICovCisJdW5zaWduZWQgc2RfZHBs
OjI7CQkvKiBzZWdtZW50IGRlc2NyaXB0b3IgcHJpb3JpdHkgbGV2ZWwgKi8KKwl1bnNpZ25lZCBz
ZF9wOjE7CQkvKiBzZWdtZW50IGRlc2NyaXB0b3IgcHJlc2VudCAqLworCXVuc2lnbmVkIHNkX2hp
bGltaXQ6NDsJCS8qIHNlZ21lbnQgZXh0ZW50IChtc2IpICovCisJdW5zaWduZWQgc2RfeHg6MTsJ
CS8qIHVudXNlZCAqLworCXVuc2lnbmVkIHNkX2xvbmc6MTsJCS8qIGxvbmcgbW9kZSAoY3Mgb25s
eSkgKi8KKwl1bnNpZ25lZCBzZF9kZWYzMjoxOwkJLyogZGVmYXVsdCAzMiB2cyAxNiBiaXQgc2l6
ZSAqLworCXVuc2lnbmVkIHNkX2dyYW46MTsJCS8qIGxpbWl0IGdyYW51bGFyaXR5IChieXRlL3Bh
Z2UgdW5pdHMpKi8KKwl1bnNpZ25lZCBzZF9oaWJhc2U6ODsJCS8qIHNlZ21lbnQgYmFzZSBhZGRy
ZXNzICAobXNiKSAqLworfSBfX3BhY2tlZDsKKworI2RlZmluZQlVU0RfR0VUQkFTRShzZCkJCSgo
KHNkKS0+c2RfbG9iYXNlKSB8IChzZCktPnNkX2hpYmFzZSA8PCAyNCkKKyNkZWZpbmUJVVNEX1NF
VEJBU0Uoc2QsIGIpCShzZCktPnNkX2xvYmFzZSA9IChiKTsJXAorCQkJCShzZCktPnNkX2hpYmFz
ZSA9ICgoYikgPj4gMjQpOworI2RlZmluZQlVU0RfR0VUTElNSVQoc2QpCSgoKHNkKS0+c2RfbG9s
aW1pdCkgfCAoc2QpLT5zZF9oaWxpbWl0IDw8IDE2KQorI2RlZmluZQlVU0RfU0VUTElNSVQoc2Qs
IGwpCShzZCktPnNkX2xvbGltaXQgPSAobCk7CVwKKwkJCQkoc2QpLT5zZF9oaWxpbWl0ID0gKChs
KSA+PiAxNik7CisKKyNpZmRlZiBfX2kzODZfXworLyoKKyAqIEdhdGUgZGVzY3JpcHRvcnMgKGUu
Zy4gaW5kaXJlY3QgZGVzY3JpcHRvcnMpCisgKi8KK3N0cnVjdCBnYXRlX2Rlc2NyaXB0b3Igewor
CXVuc2lnbmVkIGdkX2xvb2Zmc2V0OjE2OwkvKiBnYXRlIG9mZnNldCAobHNiKSAqLworCXVuc2ln
bmVkIGdkX3NlbGVjdG9yOjE2OwkvKiBnYXRlIHNlZ21lbnQgc2VsZWN0b3IgKi8KKwl1bnNpZ25l
ZCBnZF9zdGtjcHk6NTsJCS8qIG51bWJlciBvZiBzdGFjayB3ZHMgdG8gY3B5ICovCisJdW5zaWdu
ZWQgZ2RfeHg6MzsJCS8qIHVudXNlZCAqLworCXVuc2lnbmVkIGdkX3R5cGU6NTsJCS8qIHNlZ21l
bnQgdHlwZSAqLworCXVuc2lnbmVkIGdkX2RwbDoyOwkJLyogc2VnbWVudCBkZXNjcmlwdG9yIHBy
aW9yaXR5IGxldmVsICovCisJdW5zaWduZWQgZ2RfcDoxOwkJLyogc2VnbWVudCBkZXNjcmlwdG9y
IHByZXNlbnQgKi8KKwl1bnNpZ25lZCBnZF9oaW9mZnNldDoxNjsJLyogZ2F0ZSBvZmZzZXQgKG1z
YikgKi8KK30gX19wYWNrZWQ7CisKKy8qCisgKiBHZW5lcmljIGRlc2NyaXB0b3IKKyAqLwordW5p
b24gZGVzY3JpcHRvciB7CisJc3RydWN0IHNlZ21lbnRfZGVzY3JpcHRvciBzZDsKKwlzdHJ1Y3Qg
Z2F0ZV9kZXNjcmlwdG9yIGdkOworfTsKKyNlbHNlCisvKgorICogR2F0ZSBkZXNjcmlwdG9ycyAo
ZS5nLiBpbmRpcmVjdCBkZXNjcmlwdG9ycywgdHJhcCwgaW50ZXJydXB0IGV0Yy4gMTI4IGJpdCkK
KyAqIE9ubHkgaW50ZXJydXB0IGFuZCB0cmFwIGdhdGVzIGhhdmUgZ2RfaXN0LgorICovCitzdHJ1
Y3QgZ2F0ZV9kZXNjcmlwdG9yIHsKKwl1aW50NjRfdCBnZF9sb29mZnNldDoxNjsJLyogZ2F0ZSBv
ZmZzZXQgKGxzYikgKi8KKwl1aW50NjRfdCBnZF9zZWxlY3RvcjoxNjsJLyogZ2F0ZSBzZWdtZW50
IHNlbGVjdG9yICovCisJdWludDY0X3QgZ2RfaXN0OjM7CQkvKiBJU1QgdGFibGUgaW5kZXggKi8K
Kwl1aW50NjRfdCBnZF94eDo1OwkJLyogdW51c2VkICovCisJdWludDY0X3QgZ2RfdHlwZTo1OwkJ
Lyogc2VnbWVudCB0eXBlICovCisJdWludDY0X3QgZ2RfZHBsOjI7CQkvKiBzZWdtZW50IGRlc2Ny
aXB0b3IgcHJpb3JpdHkgbGV2ZWwgKi8KKwl1aW50NjRfdCBnZF9wOjE7CQkvKiBzZWdtZW50IGRl
c2NyaXB0b3IgcHJlc2VudCAqLworCXVpbnQ2NF90IGdkX2hpb2Zmc2V0OjQ4OwkvKiBnYXRlIG9m
ZnNldCAobXNiKSAqLworCXVpbnQ2NF90IHNkX3h4MTozMjsKK30gX19wYWNrZWQ7CisKKy8qCisg
KiBHZW5lcmljIGRlc2NyaXB0b3IKKyAqLwordW5pb24gZGVzY3JpcHRvciB7CisJc3RydWN0IHVz
ZXJfc2VnbWVudF9kZXNjcmlwdG9yIHNkOworCXN0cnVjdCBnYXRlX2Rlc2NyaXB0b3IgZ2Q7Cit9
OworI2VuZGlmCisKKwkvKiBzeXN0ZW0gc2VnbWVudHMgYW5kIGdhdGUgdHlwZXMgKi8KKyNkZWZp
bmUJU0RUX1NZU05VTEwJIDAJLyogc3lzdGVtIG51bGwgKi8KKyNkZWZpbmUJU0RUX1NZUzI4NlRT
UwkgMQkvKiBzeXN0ZW0gMjg2IFRTUyBhdmFpbGFibGUgKi8KKyNkZWZpbmUJU0RUX1NZU0xEVAkg
MgkvKiBzeXN0ZW0gbG9jYWwgZGVzY3JpcHRvciB0YWJsZSAqLworI2RlZmluZQlTRFRfU1lTMjg2
QlNZCSAzCS8qIHN5c3RlbSAyODYgVFNTIGJ1c3kgKi8KKyNkZWZpbmUJU0RUX1NZUzI4NkNHVAkg
NAkvKiBzeXN0ZW0gMjg2IGNhbGwgZ2F0ZSAqLworI2RlZmluZQlTRFRfU1lTVEFTS0dUCSA1CS8q
IHN5c3RlbSB0YXNrIGdhdGUgKi8KKyNkZWZpbmUJU0RUX1NZUzI4NklHVAkgNgkvKiBzeXN0ZW0g
Mjg2IGludGVycnVwdCBnYXRlICovCisjZGVmaW5lCVNEVF9TWVMyODZUR1QJIDcJLyogc3lzdGVt
IDI4NiB0cmFwIGdhdGUgKi8KKyNkZWZpbmUJU0RUX1NZU05VTEwyCSA4CS8qIHN5c3RlbSBudWxs
IGFnYWluICovCisjZGVmaW5lCVNEVF9TWVMzODZUU1MJIDkJLyogc3lzdGVtIDM4NiBUU1MgYXZh
aWxhYmxlICovCisjZGVmaW5lCVNEVF9TWVNUU1MJIDkJLyogc3lzdGVtIGF2YWlsYWJsZSA2NCBi
aXQgVFNTICovCisjZGVmaW5lCVNEVF9TWVNOVUxMMwkxMAkvKiBzeXN0ZW0gbnVsbCBhZ2FpbiAq
LworI2RlZmluZQlTRFRfU1lTMzg2QlNZCTExCS8qIHN5c3RlbSAzODYgVFNTIGJ1c3kgKi8KKyNk
ZWZpbmUJU0RUX1NZU0JTWQkxMQkvKiBzeXN0ZW0gYnVzeSA2NCBiaXQgVFNTICovCisjZGVmaW5l
CVNEVF9TWVMzODZDR1QJMTIJLyogc3lzdGVtIDM4NiBjYWxsIGdhdGUgKi8KKyNkZWZpbmUJU0RU
X1NZU0NHVAkxMgkvKiBzeXN0ZW0gNjQgYml0IGNhbGwgZ2F0ZSAqLworI2RlZmluZQlTRFRfU1lT
TlVMTDQJMTMJLyogc3lzdGVtIG51bGwgYWdhaW4gKi8KKyNkZWZpbmUJU0RUX1NZUzM4NklHVAkx
NAkvKiBzeXN0ZW0gMzg2IGludGVycnVwdCBnYXRlICovCisjZGVmaW5lCVNEVF9TWVNJR1QJMTQJ
Lyogc3lzdGVtIDY0IGJpdCBpbnRlcnJ1cHQgZ2F0ZSAqLworI2RlZmluZQlTRFRfU1lTMzg2VEdU
CTE1CS8qIHN5c3RlbSAzODYgdHJhcCBnYXRlICovCisjZGVmaW5lCVNEVF9TWVNUR1QJMTUJLyog
c3lzdGVtIDY0IGJpdCB0cmFwIGdhdGUgKi8KKworCS8qIG1lbW9yeSBzZWdtZW50IHR5cGVzICov
CisjZGVmaW5lCVNEVF9NRU1STwkxNgkvKiBtZW1vcnkgcmVhZCBvbmx5ICovCisjZGVmaW5lCVNE
VF9NRU1ST0EJMTcJLyogbWVtb3J5IHJlYWQgb25seSBhY2Nlc3NlZCAqLworI2RlZmluZQlTRFRf
TUVNUlcJMTgJLyogbWVtb3J5IHJlYWQgd3JpdGUgKi8KKyNkZWZpbmUJU0RUX01FTVJXQQkxOQkv
KiBtZW1vcnkgcmVhZCB3cml0ZSBhY2Nlc3NlZCAqLworI2RlZmluZQlTRFRfTUVNUk9ECTIwCS8q
IG1lbW9yeSByZWFkIG9ubHkgZXhwYW5kIGR3biBsaW1pdCAqLworI2RlZmluZQlTRFRfTUVNUk9E
QQkyMQkvKiBtZW1vcnkgcmVhZCBvbmx5IGV4cGFuZCBkd24gbGltaXQgYWNjZXNzZWQgKi8KKyNk
ZWZpbmUJU0RUX01FTVJXRAkyMgkvKiBtZW1vcnkgcmVhZCB3cml0ZSBleHBhbmQgZHduIGxpbWl0
ICovCisjZGVmaW5lCVNEVF9NRU1SV0RBCTIzCS8qIG1lbW9yeSByZWFkIHdyaXRlIGV4cGFuZCBk
d24gbGltaXQgYWNjZXNzZWQqLworI2RlZmluZQlTRFRfTUVNRQkyNAkvKiBtZW1vcnkgZXhlY3V0
ZSBvbmx5ICovCisjZGVmaW5lCVNEVF9NRU1FQQkyNQkvKiBtZW1vcnkgZXhlY3V0ZSBvbmx5IGFj
Y2Vzc2VkICovCisjZGVmaW5lCVNEVF9NRU1FUgkyNgkvKiBtZW1vcnkgZXhlY3V0ZSByZWFkICov
CisjZGVmaW5lCVNEVF9NRU1FUkEJMjcJLyogbWVtb3J5IGV4ZWN1dGUgcmVhZCBhY2Nlc3NlZCAq
LworI2RlZmluZQlTRFRfTUVNRUMJMjgJLyogbWVtb3J5IGV4ZWN1dGUgb25seSBjb25mb3JtaW5n
ICovCisjZGVmaW5lCVNEVF9NRU1FQUMJMjkJLyogbWVtb3J5IGV4ZWN1dGUgb25seSBhY2Nlc3Nl
ZCBjb25mb3JtaW5nICovCisjZGVmaW5lCVNEVF9NRU1FUkMJMzAJLyogbWVtb3J5IGV4ZWN1dGUg
cmVhZCBjb25mb3JtaW5nICovCisjZGVmaW5lCVNEVF9NRU1FUkFDCTMxCS8qIG1lbW9yeSBleGVj
dXRlIHJlYWQgYWNjZXNzZWQgY29uZm9ybWluZyAqLworCisvKgorICogU2l6ZSBvZiBJRFQgdGFi
bGUKKyAqLworI2RlZmluZQlOSURUCQkyNTYJLyogMzIgcmVzZXJ2ZWQsIDB4ODAgc3lzY2FsbCwg
bW9zdCBhcmUgaC93ICovCisjZGVmaW5lCU5SU1ZJRFQJCTMyCS8qIHJlc2VydmVkIGVudHJpZXMg
Zm9yIGNwdSBleGNlcHRpb25zICovCisKKy8qCisgKiBFbnRyaWVzIGluIHRoZSBJbnRlcnJ1cHQg
RGVzY3JpcHRvciBUYWJsZSAoSURUKQorICovCisjZGVmaW5lCUlEVF9ERQkJMAkvKiAjREU6IERp
dmlkZSBFcnJvciAqLworI2RlZmluZQlJRFRfREIJCTEJLyogI0RCOiBEZWJ1ZyAqLworI2RlZmlu
ZQlJRFRfTk1JCQkyCS8qIE5vbm1hc2thYmxlIEV4dGVybmFsIEludGVycnVwdCAqLworI2RlZmlu
ZQlJRFRfQlAJCTMJLyogI0JQOiBCcmVha3BvaW50ICovCisjZGVmaW5lCUlEVF9PRgkJNAkvKiAj
T0Y6IE92ZXJmbG93ICovCisjZGVmaW5lCUlEVF9CUgkJNQkvKiAjQlI6IEJvdW5kIFJhbmdlIEV4
Y2VlZGVkICovCisjZGVmaW5lCUlEVF9VRAkJNgkvKiAjVUQ6IFVuZGVmaW5lZC9JbnZhbGlkIE9w
Y29kZSAqLworI2RlZmluZQlJRFRfTk0JCTcJLyogI05NOiBObyBNYXRoIENvcHJvY2Vzc29yICov
CisjZGVmaW5lCUlEVF9ERgkJOAkvKiAjREY6IERvdWJsZSBGYXVsdCAqLworI2RlZmluZQlJRFRf
RlBVR1AJOQkvKiBDb3Byb2Nlc3NvciBTZWdtZW50IE92ZXJydW4gKi8KKyNkZWZpbmUJSURUX1RT
CQkxMAkvKiAjVFM6IEludmFsaWQgVFNTICovCisjZGVmaW5lCUlEVF9OUAkJMTEJLyogI05QOiBT
ZWdtZW50IE5vdCBQcmVzZW50ICovCisjZGVmaW5lCUlEVF9TUwkJMTIJLyogI1NTOiBTdGFjayBT
ZWdtZW50IEZhdWx0ICovCisjZGVmaW5lCUlEVF9HUAkJMTMJLyogI0dQOiBHZW5lcmFsIFByb3Rl
Y3Rpb24gRmF1bHQgKi8KKyNkZWZpbmUJSURUX1BGCQkxNAkvKiAjUEY6IFBhZ2UgRmF1bHQgKi8K
KyNkZWZpbmUJSURUX01GCQkxNgkvKiAjTUY6IEZQVSBGbG9hdGluZy1Qb2ludCBFcnJvciAqLwor
I2RlZmluZQlJRFRfQUMJCTE3CS8qICNBQzogQWxpZ25tZW50IENoZWNrICovCisjZGVmaW5lCUlE
VF9NQwkJMTgJLyogI01DOiBNYWNoaW5lIENoZWNrICovCisjZGVmaW5lCUlEVF9YRgkJMTkJLyog
I1hGOiBTSU1EIEZsb2F0aW5nLVBvaW50IEV4Y2VwdGlvbiAqLworI2RlZmluZQlJRFRfSU9fSU5U
UwlOUlNWSURUCS8qIEJhc2Ugb2YgSURUIGVudHJpZXMgZm9yIEkvTyBpbnRlcnJ1cHRzLiAqLwor
I2RlZmluZQlJRFRfU1lTQ0FMTAkweDgwCS8qIFN5c3RlbSBDYWxsIEludGVycnVwdCBWZWN0b3Ig
Ki8KKyNkZWZpbmUJSURUX0RUUkFDRV9SRVQJMHg5MgkvKiBEVHJhY2UgcGlkIHByb3ZpZGVyIElu
dGVycnVwdCBWZWN0b3IgKi8KKyNkZWZpbmUJSURUX0VWVENITgkweDkzCS8qIFhlbiBIVk0gRXZl
bnQgQ2hhbm5lbCBJbnRlcnJ1cHQgVmVjdG9yICovCisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKQor
LyoKKyAqIEVudHJpZXMgaW4gdGhlIEdsb2JhbCBEZXNjcmlwdG9yIFRhYmxlIChHRFQpCisgKiBO
b3RlIHRoYXQgZWFjaCA0IGVudHJpZXMgc2hhcmUgYSBzaW5nbGUgMzIgYnl0ZSBMMSBjYWNoZSBs
aW5lLgorICogU29tZSBvZiB0aGUgZmFzdCBzeXNjYWxsIGluc3RydWN0aW9ucyByZXF1aXJlIGEg
c3BlY2lmaWMgb3JkZXIgaGVyZS4KKyAqLworI2RlZmluZQlHTlVMTF9TRUwJMAkvKiBOdWxsIERl
c2NyaXB0b3IgKi8KKyNkZWZpbmUJR1BSSVZfU0VMCTEJLyogU01QIFBlci1Qcm9jZXNzb3IgUHJp
dmF0ZSBEYXRhICovCisjZGVmaW5lCUdVRlNfU0VMCTIJLyogVXNlciAlZnMgRGVzY3JpcHRvciAo
b3JkZXIgY3JpdGljYWw6IDEpICovCisjZGVmaW5lCUdVR1NfU0VMCTMJLyogVXNlciAlZ3MgRGVz
Y3JpcHRvciAob3JkZXIgY3JpdGljYWw6IDIpICovCisjZGVmaW5lCUdDT0RFX1NFTAk0CS8qIEtl
cm5lbCBDb2RlIERlc2NyaXB0b3IgKG9yZGVyIGNyaXRpY2FsOiAxKSAqLworI2RlZmluZQlHREFU
QV9TRUwJNQkvKiBLZXJuZWwgRGF0YSBEZXNjcmlwdG9yIChvcmRlciBjcml0aWNhbDogMikgKi8K
KyNkZWZpbmUJR1VDT0RFX1NFTAk2CS8qIFVzZXIgQ29kZSBEZXNjcmlwdG9yIChvcmRlciBjcml0
aWNhbDogMykgKi8KKyNkZWZpbmUJR1VEQVRBX1NFTAk3CS8qIFVzZXIgRGF0YSBEZXNjcmlwdG9y
IChvcmRlciBjcml0aWNhbDogNCkgKi8KKyNkZWZpbmUJR0JJT1NMT1dNRU1fU0VMCTgJLyogQklP
UyBsb3cgbWVtb3J5IGFjY2VzcyAobXVzdCBiZSBlbnRyeSA4KSAqLworI2RlZmluZQlHUFJPQzBf
U0VMCTkJLyogVGFzayBzdGF0ZSBwcm9jZXNzIHNsb3QgemVybyBhbmQgdXAgKi8KKyNkZWZpbmUJ
R0xEVF9TRUwJMTAJLyogRGVmYXVsdCBVc2VyIExEVCAqLworI2RlZmluZQlHVVNFUkxEVF9TRUwJ
MTEJLyogVXNlciBMRFQgKi8KKyNkZWZpbmUJR1BBTklDX1NFTAkxMgkvKiBUYXNrIHN0YXRlIHRv
IGNvbnNpZGVyIHBhbmljIGZyb20gKi8KKyNkZWZpbmUJR0JJT1NDT0RFMzJfU0VMCTEzCS8qIEJJ
T1MgaW50ZXJmYWNlICgzMmJpdCBDb2RlKSAqLworI2RlZmluZQlHQklPU0NPREUxNl9TRUwJMTQJ
LyogQklPUyBpbnRlcmZhY2UgKDE2Yml0IENvZGUpICovCisjZGVmaW5lCUdCSU9TREFUQV9TRUwJ
MTUJLyogQklPUyBpbnRlcmZhY2UgKERhdGEpICovCisjZGVmaW5lCUdCSU9TVVRJTF9TRUwJMTYJ
LyogQklPUyBpbnRlcmZhY2UgKFV0aWxpdHkpICovCisjZGVmaW5lCUdCSU9TQVJHU19TRUwJMTcJ
LyogQklPUyBpbnRlcmZhY2UgKEFyZ3VtZW50cykgKi8KKyNkZWZpbmUJR05ESVNfU0VMCTE4CS8q
IEZvciB0aGUgTkRJUyBsYXllciAqLworI2RlZmluZQlOR0RUCQkxOQorCisvKgorICogRW50cmll
cyBpbiB0aGUgTG9jYWwgRGVzY3JpcHRvciBUYWJsZSAoTERUKQorICovCisjZGVmaW5lCUxTWVM1
Q0FMTFNfU0VMCTAJLyogZm9yY2VkIGJ5IGludGVsIEJDUyAqLworI2RlZmluZQlMU1lTNVNJR1Jf
U0VMCTEKKyNkZWZpbmUJTDQzQlNEQ0FMTFNfU0VMCTIJLyogbm90eWV0ICovCisjZGVmaW5lCUxV
Q09ERV9TRUwJMworI2RlZmluZQlMU09MMjZDQUxMU19TRUwJNAkvKiBTb2xhcmlzID49IDIuNiBz
eXN0ZW0gY2FsbCBnYXRlICovCisjZGVmaW5lCUxVREFUQV9TRUwJNQorLyogc2VwYXJhdGUgc3Rh
Y2ssIGVzLGZzLGdzIHNlbHMgPyAqLworLyogI2RlZmluZQlMUE9TSVhDQUxMU19TRUwJNSovCS8q
IG5vdHlldCAqLworI2RlZmluZQlMQlNESUNBTExTX1NFTAkxNgkvKiBCU0RJIHN5c3RlbSBjYWxs
IGdhdGUgKi8KKyNkZWZpbmUJTkxEVAkJKExCU0RJQ0FMTFNfU0VMICsgMSkKKworI2Vsc2UgLyog
IV9faTM4Nl9fICovCisvKgorICogRW50cmllcyBpbiB0aGUgR2xvYmFsIERlc2NyaXB0b3IgVGFi
bGUgKEdEVCkKKyAqLworI2RlZmluZQlHTlVMTF9TRUwJMAkvKiBOdWxsIERlc2NyaXB0b3IgKi8K
KyNkZWZpbmUJR05VTEwyX1NFTAkxCS8qIE51bGwgRGVzY3JpcHRvciAqLworI2RlZmluZQlHVUZT
MzJfU0VMCTIJLyogVXNlciAzMiBiaXQgJWZzIERlc2NyaXB0b3IgKi8KKyNkZWZpbmUJR1VHUzMy
X1NFTAkzCS8qIFVzZXIgMzIgYml0ICVncyBEZXNjcmlwdG9yICovCisjZGVmaW5lCUdDT0RFX1NF
TAk0CS8qIEtlcm5lbCBDb2RlIERlc2NyaXB0b3IgKi8KKyNkZWZpbmUJR0RBVEFfU0VMCTUJLyog
S2VybmVsIERhdGEgRGVzY3JpcHRvciAqLworI2RlZmluZQlHVUNPREUzMl9TRUwJNgkvKiBVc2Vy
IDMyIGJpdCBjb2RlIERlc2NyaXB0b3IgKi8KKyNkZWZpbmUJR1VEQVRBX1NFTAk3CS8qIFVzZXIg
MzIvNjQgYml0IERhdGEgRGVzY3JpcHRvciAqLworI2RlZmluZQlHVUNPREVfU0VMCTgJLyogVXNl
ciA2NCBiaXQgQ29kZSBEZXNjcmlwdG9yICovCisjZGVmaW5lCUdQUk9DMF9TRUwJOQkvKiBUU1Mg
Zm9yIGVudGVyaW5nIGtlcm5lbCBldGMgKi8KKy8qIHNsb3QgMTAgaXMgc2Vjb25kIGhhbGYgb2Yg
R1BST0MwX1NFTCAqLworI2RlZmluZQlHVVNFUkxEVF9TRUwJMTEJLyogTERUICovCisvKiBzbG90
IDEyIGlzIHNlY29uZCBoYWxmIG9mIEdVU0VSTERUX1NFTCAqLworI2RlZmluZQlOR0RUIAkJMTMK
KyNlbmRpZiAvKiBfX2kzODZfXyAqLworCisjZW5kaWYgLyogIV9YODZfU0VHTUVOVFNfSF8gKi8K
ZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvc2V0am1wLmggL3Vz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9zZXRqbXAuaAotLS0gdXNyL3NyYy9zeXMvbW9k
dWxlcy9uZXRtYXAveDg2L3NldGptcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICsw
MTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3NldGptcC5oCTIwMTYtMDkt
MjkgMDA6MjQ6NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNTAgQEAKKy8qLQorICogQ29w
eXJpZ2h0IChjKSAxOTk4IEpvaG4gQmlycmVsbCA8amJAY2ltbG9naWMuY29tLmF1Pi4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRo
ZSBhdXRob3Igbm9yIHRoZSBuYW1lcyBvZiBhbnkgY28tY29udHJpYnV0b3JzCisgKiAgICBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg
c29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgSk9ITiBCSVJSRUxMIEFORCBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5U
UyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAq
ICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvc2V0am1wLmggMjMyMjc1IDIw
MTItMDItMjggMjI6MTc6NTJaIHRpamwgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfU0VUSk1Q
X0hfCisjZGVmaW5lCV9NQUNISU5FX1NFVEpNUF9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+
CisKKyNkZWZpbmUJX0pCTEVOCTEyCQkvKiBTaXplIG9mIHRoZSBqbXBfYnVmIG9uIEFNRDY0LiAq
LworCisvKgorICogam1wX2J1ZiBhbmQgc2lnam1wX2J1ZiBhcmUgZW5jYXBzdWxhdGVkIGluIGRp
ZmZlcmVudCBzdHJ1Y3RzIHRvIGZvcmNlCisgKiBjb21waWxlLXRpbWUgZGlhZ25vc3RpY3MgZm9y
IG1pc21hdGNoZXMuICBUaGUgc3RydWN0cyBhcmUgdGhlIHNhbWUKKyAqIGludGVybmFsbHkgdG8g
YXZvaWQgc29tZSBydW4tdGltZSBlcnJvcnMgZm9yIG1pc21hdGNoZXMuCisgKi8KKyNpZiBfX0JT
RF9WSVNJQkxFIHx8IF9fUE9TSVhfVklTSUJMRSB8fCBfX1hTSV9WSVNJQkxFCit0eXBlZGVmCXN0
cnVjdCBfc2lnam1wX2J1ZiB7IGxvbmcgX3NqYltfSkJMRU5dOyB9IHNpZ2ptcF9idWZbMV07Cisj
ZW5kaWYKKwordHlwZWRlZglzdHJ1Y3QgX2ptcF9idWYgeyBsb25nIF9qYltfSkJMRU5dOyB9IGpt
cF9idWZbMV07CisKKyNlbmRpZiAvKiAhX01BQ0hJTkVfU0VUSk1QX0hfICovCmRpZmYgLXUgLXIg
LU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3NpZ2ZyYW1lLmggL3Vzci9zcmMvc3lz
L21vZHVsZXMvbmV0bWFwL3g4Ni9zaWdmcmFtZS5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25l
dG1hcC94ODYvc2lnZnJhbWUuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAor
KysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9zaWdmcmFtZS5oCTIwMTYtMDktMjkg
MDA6MjQ6NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNzIgQEAKKy8qLQorICogQ29weXJp
Z2h0IChjKSAxOTk5IE1hcmNlbCBNb29sZW5hYXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIAorICogICAgaW4gdGhpcyBwb3NpdGlvbiBhbmQgdW5jaGFuZ2VkLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUg
bmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVs
ZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL3NpZ2ZyYW1lLmggMjQ3MDQ3IDIwMTMtMDItMjAgMTc6
Mzk6NTJaIGtpYiAkCisgKi8KKworI2lmbmRlZiBfWDg2X1NJR0ZSQU1FX0hfCisjZGVmaW5lCV9Y
ODZfU0lHRlJBTUVfSF8KKworLyoKKyAqIFNpZ25hbCBmcmFtZXMsIGFyZ3VtZW50cyBwYXNzZWQg
dG8gYXBwbGljYXRpb24gc2lnbmFsIGhhbmRsZXJzLgorICovCisKKyNpZmRlZiBfX2kzODZfXwor
c3RydWN0IHNpZ2ZyYW1lIHsKKwkvKgorCSAqIFRoZSBmaXJzdCBmb3VyIG1lbWJlcnMgbWF5IGJl
IHVzZWQgYnkgYXBwbGljYXRpb25zLgorCSAqCisJICogTk9URTogVGhlIDR0aCBhcmd1bWVudCBp
cyB1bmRvY3VtZW50ZWQsIGlsbCBjb21tZW50ZWQKKwkgKiBvbiBhbmQgc2VlbXMgdG8gYmUgc29t
ZXdoYXQgQlNEICJzdGFuZGFyZCIuICBIYW5kbGVycworCSAqIGluc3RhbGxlZCB3aXRoIHNpZ3Zl
YyBtYXkgYmUgdXNpbmcgaXQuCisJICovCisJcmVnaXN0ZXJfdAlzZl9zaWdudW07CisJcmVnaXN0
ZXJfdAlzZl9zaWdpbmZvOwkvKiBjb2RlIG9yIHBvaW50ZXIgdG8gc2Zfc2kgKi8KKwlyZWdpc3Rl
cl90CXNmX3Vjb250ZXh0OwkvKiBwb2ludHMgdG8gc2ZfdWMgKi8KKwlyZWdpc3Rlcl90CXNmX2Fk
ZHI7CS8qIHVuZG9jdW1lbnRlZCA0dGggYXJnICovCisKKwl1bmlvbiB7CisJCV9fc2lnaW5mb2hh
bmRsZXJfdAkqc2ZfYWN0aW9uOworCQlfX3NpZ2hhbmRsZXJfdAkJKnNmX2hhbmRsZXI7CisJfSBz
Zl9haHU7CisJdWNvbnRleHRfdAlzZl91YzsJCS8qID0gKnNmX3Vjb250ZXh0ICovCisJc2lnaW5m
b190CXNmX3NpOwkJLyogPSAqc2Zfc2lnaW5mbyAoU0FfU0lHSU5GTyBjYXNlKSAqLworfTsKKyNl
bmRpZiAvKiBfX2kzODZfXyAqLworCisjaWZkZWYgX19hbWQ2NF9fCitzdHJ1Y3Qgc2lnZnJhbWUg
eworCXVuaW9uIHsKKwkJX19zaWdpbmZvaGFuZGxlcl90CSpzZl9hY3Rpb247CisJCV9fc2lnaGFu
ZGxlcl90CQkqc2ZfaGFuZGxlcjsKKwl9IHNmX2FodTsKKwl1Y29udGV4dF90CXNmX3VjOwkJLyog
PSAqc2ZfdWNvbnRleHQgKi8KKwlzaWdpbmZvX3QJc2Zfc2k7CQkvKiA9ICpzZl9zaWdpbmZvIChT
QV9TSUdJTkZPIGNhc2UpICovCit9OworI2VuZGlmIC8qIF9fYW1kNjRfXyAqLworCisjZW5kaWYg
LyogX1g4Nl9TSUdGUkFNRV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL3g4Ni9zaWduYWwuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3NpZ25h
bC5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvc2lnbmFsLmgJMTk3MC0wMS0w
MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC94ODYvc2lnbmFsLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAs
MCArMSwxNjcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTg2LCAxOTg5LCAxOTkxLCAxOTkz
CisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwMyBQZXRlciBXZW1tLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpc2lnbmFsLmgJOC4xIChCZXJrZWxl
eSkgNi8xMS85MworICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9zaWdu
YWwuaCAyNDcwNDcgMjAxMy0wMi0yMCAxNzozOTo1Mloga2liICQKKyAqLworCisjaWZuZGVmIF9Y
ODZfU0lHTkFMX0gKKyNkZWZpbmUJX1g4Nl9TSUdOQUxfSCAxCisKKy8qCisgKiBNYWNoaW5lLWRl
cGVuZGVudCBzaWduYWwgZGVmaW5pdGlvbnMKKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+
CisjaW5jbHVkZSA8c3lzL19zaWdzZXQuaD4KKworI2lmIF9fQlNEX1ZJU0lCTEUKKyNpbmNsdWRl
IDxtYWNoaW5lL3RyYXAuaD4JLyogY29kZXMgZm9yIFNJR0lMTCwgU0lHRlBFICovCisjZW5kaWYK
KworI2lmZGVmIF9faTM4Nl9fCit0eXBlZGVmIGludCBzaWdfYXRvbWljX3Q7CisKKyNpZiBfX0JT
RF9WSVNJQkxFCitzdHJ1Y3Qgc2lnY29udGV4dCB7CisJc3RydWN0IF9fc2lnc2V0IHNjX21hc2s7
CS8qIHNpZ25hbCBtYXNrIHRvIHJlc3RvcmUgKi8KKwlpbnQJc2Nfb25zdGFjazsJCS8qIHNpZ3N0
YWNrIHN0YXRlIHRvIHJlc3RvcmUgKi8KKwlpbnQJc2NfZ3M7CQkJLyogbWFjaGluZSBzdGF0ZSAo
c3RydWN0IHRyYXBmcmFtZSkgKi8KKwlpbnQJc2NfZnM7CisJaW50CXNjX2VzOworCWludAlzY19k
czsKKwlpbnQJc2NfZWRpOworCWludAlzY19lc2k7CisJaW50CXNjX2VicDsKKwlpbnQJc2NfaXNw
OworCWludAlzY19lYng7CisJaW50CXNjX2VkeDsKKwlpbnQJc2NfZWN4OworCWludAlzY19lYXg7
CisJaW50CXNjX3RyYXBubzsKKwlpbnQJc2NfZXJyOworCWludAlzY19laXA7CisJaW50CXNjX2Nz
OworCWludAlzY19lZmw7CisJaW50CXNjX2VzcDsKKwlpbnQJc2Nfc3M7CisJaW50CXNjX2xlbjsJ
CQkvKiBzaXplb2YobWNvbnRleHRfdCkgKi8KKwkvKgorCSAqIFNlZSA8bWFjaGluZS91Y29udGV4
dC5oPiBhbmQgPG1hY2hpbmUvbnB4Lmg+IGZvcgorCSAqIHRoZSBmb2xsb3dpbmcgZmllbGRzLgor
CSAqLworCWludAlzY19mcGZvcm1hdDsKKwlpbnQJc2Nfb3duZWRmcDsKKwlpbnQJc2NfZmxhZ3M7
CisJaW50CXNjX2Zwc3RhdGVbMTI4XSBfX2FsaWduZWQoMTYpOworCisJaW50CXNjX2ZzYmFzZTsK
KwlpbnQJc2NfZ3NiYXNlOworCisJaW50CXNjX3hmcHVzdGF0ZTsKKwlpbnQJc2NfeGZwdXN0YXRl
X2xlbjsKKworCWludAlzY19zcGFyZTJbNF07Cit9OworCisjZGVmaW5lCXNjX3NwCQlzY19lc3AK
KyNkZWZpbmUJc2NfZnAJCXNjX2VicAorI2RlZmluZQlzY19wYwkJc2NfZWlwCisjZGVmaW5lCXNj
X3BzCQlzY19lZmwKKyNkZWZpbmUJc2NfZWZsYWdzCXNjX2VmbAorCisjZW5kaWYgLyogX19CU0Rf
VklTSUJMRSAqLworI2VuZGlmIC8qIF9faTM4Nl9fICovCisKKyNpZmRlZiBfX2FtZDY0X18KK3R5
cGVkZWYgbG9uZyBzaWdfYXRvbWljX3Q7CisKKyNpZiBfX0JTRF9WSVNJQkxFCisvKgorICogSW5m
b3JtYXRpb24gcHVzaGVkIG9uIHN0YWNrIHdoZW4gYSBzaWduYWwgaXMgZGVsaXZlcmVkLgorICog
VGhpcyBpcyB1c2VkIGJ5IHRoZSBrZXJuZWwgdG8gcmVzdG9yZSBzdGF0ZSBmb2xsb3dpbmcKKyAq
IGV4ZWN1dGlvbiBvZiB0aGUgc2lnbmFsIGhhbmRsZXIuICBJdCBpcyBhbHNvIG1hZGUgYXZhaWxh
YmxlCisgKiB0byB0aGUgaGFuZGxlciB0byBhbGxvdyBpdCB0byByZXN0b3JlIHN0YXRlIHByb3Bl
cmx5IGlmCisgKiBhIG5vbi1zdGFuZGFyZCBleGl0IGlzIHBlcmZvcm1lZC4KKyAqCisgKiBUaGUg
c2VxdWVuY2Ugb2YgdGhlIGZpZWxkcy9yZWdpc3RlcnMgYWZ0ZXIgc2NfbWFzayBpbiBzdHJ1Y3QK
KyAqIHNpZ2NvbnRleHQgbXVzdCBtYXRjaCB0aG9zZSBpbiBtY29udGV4dF90IGFuZCBzdHJ1Y3Qg
dHJhcGZyYW1lLgorICovCitzdHJ1Y3Qgc2lnY29udGV4dCB7CisJc3RydWN0IF9fc2lnc2V0IHNj
X21hc2s7CS8qIHNpZ25hbCBtYXNrIHRvIHJlc3RvcmUgKi8KKwlsb25nCXNjX29uc3RhY2s7CQkv
KiBzaWdzdGFjayBzdGF0ZSB0byByZXN0b3JlICovCisJbG9uZwlzY19yZGk7CQkvKiBtYWNoaW5l
IHN0YXRlIChzdHJ1Y3QgdHJhcGZyYW1lKSAqLworCWxvbmcJc2NfcnNpOworCWxvbmcJc2NfcmR4
OworCWxvbmcJc2NfcmN4OworCWxvbmcJc2Nfcjg7CisJbG9uZwlzY19yOTsKKwlsb25nCXNjX3Jh
eDsKKwlsb25nCXNjX3JieDsKKwlsb25nCXNjX3JicDsKKwlsb25nCXNjX3IxMDsKKwlsb25nCXNj
X3IxMTsKKwlsb25nCXNjX3IxMjsKKwlsb25nCXNjX3IxMzsKKwlsb25nCXNjX3IxNDsKKwlsb25n
CXNjX3IxNTsKKwlpbnQJc2NfdHJhcG5vOworCXNob3J0CXNjX2ZzOworCXNob3J0CXNjX2dzOwor
CWxvbmcJc2NfYWRkcjsKKwlpbnQJc2NfZmxhZ3M7CisJc2hvcnQJc2NfZXM7CisJc2hvcnQJc2Nf
ZHM7CisJbG9uZwlzY19lcnI7CisJbG9uZwlzY19yaXA7CisJbG9uZwlzY19jczsKKwlsb25nCXNj
X3JmbGFnczsKKwlsb25nCXNjX3JzcDsKKwlsb25nCXNjX3NzOworCWxvbmcJc2NfbGVuOwkJCS8q
IHNpemVvZihtY29udGV4dF90KSAqLworCS8qCisJICogU2VlIDxtYWNoaW5lL3Vjb250ZXh0Lmg+
IGFuZCA8bWFjaGluZS9mcHUuaD4gZm9yIHRoZSBmb2xsb3dpbmcKKwkgKiBmaWVsZHMuCisJICov
CisJbG9uZwlzY19mcGZvcm1hdDsKKwlsb25nCXNjX293bmVkZnA7CisJbG9uZwlzY19mcHN0YXRl
WzY0XSBfX2FsaWduZWQoMTYpOworCisJbG9uZwlzY19mc2Jhc2U7CisJbG9uZwlzY19nc2Jhc2U7
CisKKwlsb25nCXNjX3hmcHVzdGF0ZTsKKwlsb25nCXNjX3hmcHVzdGF0ZV9sZW47CisKKwlsb25n
CXNjX3NwYXJlWzRdOworfTsKKyNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCisjZW5kaWYgLyog
X19hbWQ2NF9fICovCisKKyNlbmRpZgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMv
bmV0bWFwL3g4Ni9zcGVjaWFscmVnLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9z
cGVjaWFscmVnLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9zcGVjaWFscmVn
LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9t
b2R1bGVzL25ldG1hcC94ODYvc3BlY2lhbHJlZy5oCTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAw
MDAwICswMTAwCkBAIC0wLDAgKzEsODc5IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MSBU
aGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZl
cnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh
cmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJZnJvbTog
QCgjKXNwZWNpYWxyZWcuaAk3LjEgKEJlcmtlbGV5KSA1LzkvOTEKKyAqICRGcmVlQlNEOiByZWxl
bmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvc3BlY2lhbHJlZy5oIDI5ODEwMSAyMDE2LTA0LTE2IDA2
OjA3OjEzWiBraWIgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfU1BFQ0lBTFJFR19IXworI2Rl
ZmluZQlfTUFDSElORV9TUEVDSUFMUkVHX0hfCisKKy8qCisgKiBCaXRzIGluIDM4NiBzcGVjaWFs
IHJlZ2lzdGVyczoKKyAqLworI2RlZmluZQlDUjBfUEUJMHgwMDAwMDAwMQkvKiBQcm90ZWN0ZWQg
bW9kZSBFbmFibGUgKi8KKyNkZWZpbmUJQ1IwX01QCTB4MDAwMDAwMDIJLyogIk1hdGgiIChmcHUp
IFByZXNlbnQgKi8KKyNkZWZpbmUJQ1IwX0VNCTB4MDAwMDAwMDQJLyogRU11bGF0ZSBGUFUgaW5z
dHJ1Y3Rpb25zLiAodHJhcCBFU0Mgb25seSkgKi8KKyNkZWZpbmUJQ1IwX1RTCTB4MDAwMDAwMDgJ
LyogVGFzayBTd2l0Y2hlZCAoaWYgTVAsIHRyYXAgRVNDIGFuZCBXQUlUKSAqLworI2RlZmluZQlD
UjBfUEcJMHg4MDAwMDAwMAkvKiBQYUdpbmcgZW5hYmxlICovCisKKy8qCisgKiBCaXRzIGluIDQ4
NiBzcGVjaWFsIHJlZ2lzdGVyczoKKyAqLworI2RlZmluZQlDUjBfTkUJMHgwMDAwMDAyMAkvKiBO
dW1lcmljIEVycm9yIGVuYWJsZSAoRVgxNiB2cyBJUlExMykgKi8KKyNkZWZpbmUJQ1IwX1dQCTB4
MDAwMTAwMDAJLyogV3JpdGUgUHJvdGVjdCAoaG9ub3IgcGFnZSBwcm90ZWN0IGluCisJCQkJCQkJ
ICAgYWxsIG1vZGVzKSAqLworI2RlZmluZQlDUjBfQU0JMHgwMDA0MDAwMAkvKiBBbGlnbm1lbnQg
TWFzayAoc2V0IHRvIGVuYWJsZSBBQyBmbGFnKSAqLworI2RlZmluZQlDUjBfTlcgIDB4MjAwMDAw
MDAJLyogTm90IFdyaXRlLXRocm91Z2ggKi8KKyNkZWZpbmUJQ1IwX0NEICAweDQwMDAwMDAwCS8q
IENhY2hlIERpc2FibGUgKi8KKworI2RlZmluZQlDUjNfUENJRF9TQVZFIDB4ODAwMDAwMDAwMDAw
MDAwMAorI2RlZmluZQlDUjNfUENJRF9NQVNLIDB4ZmZmCisKKy8qCisgKiBCaXRzIGluIFBQcm8g
c3BlY2lhbCByZWdpc3RlcnMKKyAqLworI2RlZmluZQlDUjRfVk1FCTB4MDAwMDAwMDEJLyogVmly
dHVhbCA4MDg2IG1vZGUgZXh0ZW5zaW9ucyAqLworI2RlZmluZQlDUjRfUFZJCTB4MDAwMDAwMDIJ
LyogUHJvdGVjdGVkLW1vZGUgdmlydHVhbCBpbnRlcnJ1cHRzICovCisjZGVmaW5lCUNSNF9UU0QJ
MHgwMDAwMDAwNAkvKiBUaW1lIHN0YW1wIGRpc2FibGUgKi8KKyNkZWZpbmUJQ1I0X0RFCTB4MDAw
MDAwMDgJLyogRGVidWdnaW5nIGV4dGVuc2lvbnMgKi8KKyNkZWZpbmUJQ1I0X1BTRQkweDAwMDAw
MDEwCS8qIFBhZ2Ugc2l6ZSBleHRlbnNpb25zICovCisjZGVmaW5lCUNSNF9QQUUJMHgwMDAwMDAy
MAkvKiBQaHlzaWNhbCBhZGRyZXNzIGV4dGVuc2lvbiAqLworI2RlZmluZQlDUjRfTUNFCTB4MDAw
MDAwNDAJLyogTWFjaGluZSBjaGVjayBlbmFibGUgKi8KKyNkZWZpbmUJQ1I0X1BHRQkweDAwMDAw
MDgwCS8qIFBhZ2UgZ2xvYmFsIGVuYWJsZSAqLworI2RlZmluZQlDUjRfUENFCTB4MDAwMDAxMDAJ
LyogUGVyZm9ybWFuY2UgbW9uaXRvcmluZyBjb3VudGVyIGVuYWJsZSAqLworI2RlZmluZQlDUjRf
RlhTUiAweDAwMDAwMjAwCS8qIEZhc3QgRlBVIHNhdmUvcmVzdG9yZSB1c2VkIGJ5IE9TICovCisj
ZGVmaW5lCUNSNF9YTU0JMHgwMDAwMDQwMAkvKiBlbmFibGUgU0lNRC9NTVgyIHRvIHVzZSBleGNl
cHQgMTYgKi8KKyNkZWZpbmUJQ1I0X1ZNWEUgMHgwMDAwMjAwMAkvKiBlbmFibGUgVk1YIG9wZXJh
dGlvbiAoSW50ZWwtc3BlY2lmaWMpICovCisjZGVmaW5lCUNSNF9GU0dTQkFTRSAweDAwMDEwMDAw
CS8qIEVuYWJsZSBGUy9HUyBCQVNFIGFjY2Vzc2luZyBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUJ
Q1I0X1BDSURFIDB4MDAwMjAwMDAJLyogRW5hYmxlIENvbnRleHQgSUQgKi8KKyNkZWZpbmUJQ1I0
X1hTQVZFIDB4MDAwNDAwMDAJLyogWFNFVEJWL1hHRVRCViAqLworI2RlZmluZQlDUjRfU01FUCAw
eDAwMTAwMDAwCS8qIFN1cGVydmlzb3ItTW9kZSBFeGVjdXRpb24gUHJldmVudGlvbiAqLworCisv
KgorICogQml0cyBpbiBBTUQ2NCBzcGVjaWFsIHJlZ2lzdGVycy4gIEVGRVIgaXMgNjQgYml0cyB3
aWRlLgorICovCisjZGVmaW5lCUVGRVJfU0NFIDB4MDAwMDAwMDAxCS8qIFN5c3RlbSBDYWxsIEV4
dGVuc2lvbnMgKFIvVykgKi8KKyNkZWZpbmUJRUZFUl9MTUUgMHgwMDAwMDAxMDAJLyogTG9uZyBt
b2RlIGVuYWJsZSAoUi9XKSAqLworI2RlZmluZQlFRkVSX0xNQSAweDAwMDAwMDQwMAkvKiBMb25n
IG1vZGUgYWN0aXZlIChSKSAqLworI2RlZmluZQlFRkVSX05YRSAweDAwMDAwMDgwMAkvKiBQVEUg
Tm8tRXhlY3V0ZSBiaXQgZW5hYmxlIChSL1cpICovCisjZGVmaW5lCUVGRVJfU1ZNIDB4MDAwMDAx
MDAwCS8qIFNWTSBlbmFibGUgYml0IGZvciBBTUQsIHJlc2VydmVkIGZvciBJbnRlbCAqLworI2Rl
ZmluZQlFRkVSX0xNU0xFIDB4MDAwMDAyMDAwCS8qIExvbmcgTW9kZSBTZWdtZW50IExpbWl0IEVu
YWJsZSAqLworI2RlZmluZQlFRkVSX0ZGWFNSIDB4MDAwMDA0MDAwCS8qIEZhc3QgRlhTQVZFL0ZT
UlNUT1IgKi8KKyNkZWZpbmUJRUZFUl9UQ0UgICAweDAwMDAwODAwMAkvKiBUcmFuc2xhdGlvbiBD
YWNoZSBFeHRlbnNpb24gKi8KKworLyoKKyAqIEludGVsIEV4dGVuZGVkIEZlYXR1cmVzIHJlZ2lz
dGVycworICovCisjZGVmaW5lCVhDUjAJMAkJLyogWEZFQVRVUkVfRU5BQkxFRF9NQVNLIHJlZ2lz
dGVyICovCisKKyNkZWZpbmUJWEZFQVRVUkVfRU5BQkxFRF9YODcJCTB4MDAwMDAwMDEKKyNkZWZp
bmUJWEZFQVRVUkVfRU5BQkxFRF9TU0UJCTB4MDAwMDAwMDIKKyNkZWZpbmUJWEZFQVRVUkVfRU5B
QkxFRF9ZTU1fSEkxMjgJMHgwMDAwMDAwNAorI2RlZmluZQlYRkVBVFVSRV9FTkFCTEVEX0FWWAkJ
WEZFQVRVUkVfRU5BQkxFRF9ZTU1fSEkxMjgKKyNkZWZpbmUJWEZFQVRVUkVfRU5BQkxFRF9CTkRS
RUdTCTB4MDAwMDAwMDgKKyNkZWZpbmUJWEZFQVRVUkVfRU5BQkxFRF9CTkRDU1IJCTB4MDAwMDAw
MTAKKyNkZWZpbmUJWEZFQVRVUkVfRU5BQkxFRF9PUE1BU0sJCTB4MDAwMDAwMjAKKyNkZWZpbmUJ
WEZFQVRVUkVfRU5BQkxFRF9aTU1fSEkyNTYJMHgwMDAwMDA0MAorI2RlZmluZQlYRkVBVFVSRV9F
TkFCTEVEX0hJMTZfWk1NCTB4MDAwMDAwODAKKworI2RlZmluZQlYRkVBVFVSRV9BVlgJCQkJCVwK
KyAgICAoWEZFQVRVUkVfRU5BQkxFRF9YODcgfCBYRkVBVFVSRV9FTkFCTEVEX1NTRSB8IFhGRUFU
VVJFX0VOQUJMRURfQVZYKQorI2RlZmluZQlYRkVBVFVSRV9BVlg1MTIJCQkJCQlcCisgICAgKFhG
RUFUVVJFX0VOQUJMRURfT1BNQVNLIHwgWEZFQVRVUkVfRU5BQkxFRF9aTU1fSEkyNTYgfAlcCisg
ICAgWEZFQVRVUkVfRU5BQkxFRF9ISTE2X1pNTSkKKyNkZWZpbmUJWEZFQVRVUkVfTVBYCQkJCQlc
CisgICAgKFhGRUFUVVJFX0VOQUJMRURfQk5EUkVHUyB8IFhGRUFUVVJFX0VOQUJMRURfQk5EQ1NS
KQorCisvKgorICogQ1BVSUQgaW5zdHJ1Y3Rpb24gZmVhdHVyZXMgcmVnaXN0ZXIKKyAqLworI2Rl
ZmluZQlDUFVJRF9GUFUJMHgwMDAwMDAwMQorI2RlZmluZQlDUFVJRF9WTUUJMHgwMDAwMDAwMgor
I2RlZmluZQlDUFVJRF9ERQkweDAwMDAwMDA0CisjZGVmaW5lCUNQVUlEX1BTRQkweDAwMDAwMDA4
CisjZGVmaW5lCUNQVUlEX1RTQwkweDAwMDAwMDEwCisjZGVmaW5lCUNQVUlEX01TUgkweDAwMDAw
MDIwCisjZGVmaW5lCUNQVUlEX1BBRQkweDAwMDAwMDQwCisjZGVmaW5lCUNQVUlEX01DRQkweDAw
MDAwMDgwCisjZGVmaW5lCUNQVUlEX0NYOAkweDAwMDAwMTAwCisjZGVmaW5lCUNQVUlEX0FQSUMJ
MHgwMDAwMDIwMAorI2RlZmluZQlDUFVJRF9CMTAJMHgwMDAwMDQwMAorI2RlZmluZQlDUFVJRF9T
RVAJMHgwMDAwMDgwMAorI2RlZmluZQlDUFVJRF9NVFJSCTB4MDAwMDEwMDAKKyNkZWZpbmUJQ1BV
SURfUEdFCTB4MDAwMDIwMDAKKyNkZWZpbmUJQ1BVSURfTUNBCTB4MDAwMDQwMDAKKyNkZWZpbmUJ
Q1BVSURfQ01PVgkweDAwMDA4MDAwCisjZGVmaW5lCUNQVUlEX1BBVAkweDAwMDEwMDAwCisjZGVm
aW5lCUNQVUlEX1BTRTM2CTB4MDAwMjAwMDAKKyNkZWZpbmUJQ1BVSURfUFNOCTB4MDAwNDAwMDAK
KyNkZWZpbmUJQ1BVSURfQ0xGU0gJMHgwMDA4MDAwMAorI2RlZmluZQlDUFVJRF9CMjAJMHgwMDEw
MDAwMAorI2RlZmluZQlDUFVJRF9EUwkweDAwMjAwMDAwCisjZGVmaW5lCUNQVUlEX0FDUEkJMHgw
MDQwMDAwMAorI2RlZmluZQlDUFVJRF9NTVgJMHgwMDgwMDAwMAorI2RlZmluZQlDUFVJRF9GWFNS
CTB4MDEwMDAwMDAKKyNkZWZpbmUJQ1BVSURfU1NFCTB4MDIwMDAwMDAKKyNkZWZpbmUJQ1BVSURf
WE1NCTB4MDIwMDAwMDAKKyNkZWZpbmUJQ1BVSURfU1NFMgkweDA0MDAwMDAwCisjZGVmaW5lCUNQ
VUlEX1NTCTB4MDgwMDAwMDAKKyNkZWZpbmUJQ1BVSURfSFRUCTB4MTAwMDAwMDAKKyNkZWZpbmUJ
Q1BVSURfVE0JMHgyMDAwMDAwMAorI2RlZmluZQlDUFVJRF9JQTY0CTB4NDAwMDAwMDAKKyNkZWZp
bmUJQ1BVSURfUEJFCTB4ODAwMDAwMDAKKworI2RlZmluZQlDUFVJRDJfU1NFMwkweDAwMDAwMDAx
CisjZGVmaW5lCUNQVUlEMl9QQ0xNVUxRRFEgMHgwMDAwMDAwMgorI2RlZmluZQlDUFVJRDJfRFRF
UzY0CTB4MDAwMDAwMDQKKyNkZWZpbmUJQ1BVSUQyX01PTgkweDAwMDAwMDA4CisjZGVmaW5lCUNQ
VUlEMl9EU19DUEwJMHgwMDAwMDAxMAorI2RlZmluZQlDUFVJRDJfVk1YCTB4MDAwMDAwMjAKKyNk
ZWZpbmUJQ1BVSUQyX1NNWAkweDAwMDAwMDQwCisjZGVmaW5lCUNQVUlEMl9FU1QJMHgwMDAwMDA4
MAorI2RlZmluZQlDUFVJRDJfVE0yCTB4MDAwMDAxMDAKKyNkZWZpbmUJQ1BVSUQyX1NTU0UzCTB4
MDAwMDAyMDAKKyNkZWZpbmUJQ1BVSUQyX0NOWFRJRAkweDAwMDAwNDAwCisjZGVmaW5lCUNQVUlE
Ml9TREJHCTB4MDAwMDA4MDAKKyNkZWZpbmUJQ1BVSUQyX0ZNQQkweDAwMDAxMDAwCisjZGVmaW5l
CUNQVUlEMl9DWDE2CTB4MDAwMDIwMDAKKyNkZWZpbmUJQ1BVSUQyX1hUUFIJMHgwMDAwNDAwMAor
I2RlZmluZQlDUFVJRDJfUERDTQkweDAwMDA4MDAwCisjZGVmaW5lCUNQVUlEMl9QQ0lECTB4MDAw
MjAwMDAKKyNkZWZpbmUJQ1BVSUQyX0RDQQkweDAwMDQwMDAwCisjZGVmaW5lCUNQVUlEMl9TU0U0
MQkweDAwMDgwMDAwCisjZGVmaW5lCUNQVUlEMl9TU0U0MgkweDAwMTAwMDAwCisjZGVmaW5lCUNQ
VUlEMl9YMkFQSUMJMHgwMDIwMDAwMAorI2RlZmluZQlDUFVJRDJfTU9WQkUJMHgwMDQwMDAwMAor
I2RlZmluZQlDUFVJRDJfUE9QQ05UCTB4MDA4MDAwMDAKKyNkZWZpbmUJQ1BVSUQyX1RTQ0RMVAkw
eDAxMDAwMDAwCisjZGVmaW5lCUNQVUlEMl9BRVNOSQkweDAyMDAwMDAwCisjZGVmaW5lCUNQVUlE
Ml9YU0FWRQkweDA0MDAwMDAwCisjZGVmaW5lCUNQVUlEMl9PU1hTQVZFCTB4MDgwMDAwMDAKKyNk
ZWZpbmUJQ1BVSUQyX0FWWAkweDEwMDAwMDAwCisjZGVmaW5lCUNQVUlEMl9GMTZDCTB4MjAwMDAw
MDAKKyNkZWZpbmUJQ1BVSUQyX1JEUkFORAkweDQwMDAwMDAwCisjZGVmaW5lCUNQVUlEMl9IVgkw
eDgwMDAwMDAwCisKKy8qCisgKiBJbXBvcnRhbnQgYml0cyBpbiB0aGUgVGhlcm1hbCBhbmQgUG93
ZXIgTWFuYWdlbWVudCBmbGFncworICogQ1BVSUQuNiBFQVggYW5kIEVDWC4KKyAqLworI2RlZmlu
ZQlDUFVUUE0xX1NFTlNPUgkweDAwMDAwMDAxCisjZGVmaW5lCUNQVVRQTTFfVFVSQk8JMHgwMDAw
MDAwMgorI2RlZmluZQlDUFVUUE0xX0FSQVQJMHgwMDAwMDAwNAorI2RlZmluZQlDUFVUUE0yX0VG
RlJFUQkweDAwMDAwMDAxCisKKy8qCisgKiBJbXBvcnRhbnQgYml0cyBpbiB0aGUgQU1EIGV4dGVu
ZGVkIGNwdWlkIGZsYWdzCisgKi8KKyNkZWZpbmUJQU1ESURfU1lTQ0FMTAkweDAwMDAwODAwCisj
ZGVmaW5lCUFNRElEX01QCTB4MDAwODAwMDAKKyNkZWZpbmUJQU1ESURfTlgJMHgwMDEwMDAwMAor
I2RlZmluZQlBTURJRF9FWFRfTU1YCTB4MDA0MDAwMDAKKyNkZWZpbmUJQU1ESURfRkZYU1IJMHgw
MjAwMDAwMAorI2RlZmluZQlBTURJRF9QQUdFMUdCCTB4MDQwMDAwMDAKKyNkZWZpbmUJQU1ESURf
UkRUU0NQCTB4MDgwMDAwMDAKKyNkZWZpbmUJQU1ESURfTE0JMHgyMDAwMDAwMAorI2RlZmluZQlB
TURJRF9FWFRfM0ROT1cJMHg0MDAwMDAwMAorI2RlZmluZQlBTURJRF8zRE5PVwkweDgwMDAwMDAw
CisKKyNkZWZpbmUJQU1ESUQyX0xBSEYJMHgwMDAwMDAwMQorI2RlZmluZQlBTURJRDJfQ01QCTB4
MDAwMDAwMDIKKyNkZWZpbmUJQU1ESUQyX1NWTQkweDAwMDAwMDA0CisjZGVmaW5lCUFNRElEMl9F
WFRfQVBJQwkweDAwMDAwMDA4CisjZGVmaW5lCUFNRElEMl9DUjgJMHgwMDAwMDAxMAorI2RlZmlu
ZQlBTURJRDJfQUJNCTB4MDAwMDAwMjAKKyNkZWZpbmUJQU1ESUQyX1NTRTRBCTB4MDAwMDAwNDAK
KyNkZWZpbmUJQU1ESUQyX01BUwkweDAwMDAwMDgwCisjZGVmaW5lCUFNRElEMl9QUkVGRVRDSAkw
eDAwMDAwMTAwCisjZGVmaW5lCUFNRElEMl9PU1ZXCTB4MDAwMDAyMDAKKyNkZWZpbmUJQU1ESUQy
X0lCUwkweDAwMDAwNDAwCisjZGVmaW5lCUFNRElEMl9YT1AJMHgwMDAwMDgwMAorI2RlZmluZQlB
TURJRDJfU0tJTklUCTB4MDAwMDEwMDAKKyNkZWZpbmUJQU1ESUQyX1dEVAkweDAwMDAyMDAwCisj
ZGVmaW5lCUFNRElEMl9MV1AJMHgwMDAwODAwMAorI2RlZmluZQlBTURJRDJfRk1BNAkweDAwMDEw
MDAwCisjZGVmaW5lCUFNRElEMl9UQ0UJMHgwMDAyMDAwMAorI2RlZmluZQlBTURJRDJfTk9ERV9J
RAkweDAwMDgwMDAwCisjZGVmaW5lCUFNRElEMl9UQk0JMHgwMDIwMDAwMAorI2RlZmluZQlBTURJ
RDJfVE9QT0xPR1kJMHgwMDQwMDAwMAorI2RlZmluZQlBTURJRDJfUENYQwkweDAwODAwMDAwCisj
ZGVmaW5lCUFNRElEMl9QTlhDCTB4MDEwMDAwMDAKKyNkZWZpbmUJQU1ESUQyX0RCRQkweDA0MDAw
MDAwCisjZGVmaW5lCUFNRElEMl9QVFNDCTB4MDgwMDAwMDAKKyNkZWZpbmUJQU1ESUQyX1BUU0NF
TDJJCTB4MTAwMDAwMDAKKworLyoKKyAqIENQVUlEIGluc3RydWN0aW9uIDEgZWF4IGluZm8KKyAq
LworI2RlZmluZQlDUFVJRF9TVEVQUElORwkJMHgwMDAwMDAwZgorI2RlZmluZQlDUFVJRF9NT0RF
TAkJMHgwMDAwMDBmMAorI2RlZmluZQlDUFVJRF9GQU1JTFkJCTB4MDAwMDBmMDAKKyNkZWZpbmUJ
Q1BVSURfRVhUX01PREVMCQkweDAwMGYwMDAwCisjZGVmaW5lCUNQVUlEX0VYVF9GQU1JTFkJMHgw
ZmYwMDAwMAorI2lmZGVmIF9faTM4Nl9fCisjZGVmaW5lCUNQVUlEX1RPX01PREVMKGlkKSBcCisg
ICAgKCgoKGlkKSAmIENQVUlEX01PREVMKSA+PiA0KSB8IFwKKyAgICAoKCgoaWQpICYgQ1BVSURf
RkFNSUxZKSA+PSAweDYwMCkgPyBcCisgICAgKCgoaWQpICYgQ1BVSURfRVhUX01PREVMKSA+PiAx
MikgOiAwKSkKKyNkZWZpbmUJQ1BVSURfVE9fRkFNSUxZKGlkKSBcCisgICAgKCgoKGlkKSAmIENQ
VUlEX0ZBTUlMWSkgPj4gOCkgKyBcCisgICAgKCgoKGlkKSAmIENQVUlEX0ZBTUlMWSkgPT0gMHhm
MDApID8gXAorICAgICgoKGlkKSAmIENQVUlEX0VYVF9GQU1JTFkpID4+IDIwKSA6IDApKQorI2Vs
c2UKKyNkZWZpbmUJQ1BVSURfVE9fTU9ERUwoaWQpIFwKKyAgICAoKCgoaWQpICYgQ1BVSURfTU9E
RUwpID4+IDQpIHwgXAorICAgICgoKGlkKSAmIENQVUlEX0VYVF9NT0RFTCkgPj4gMTIpKQorI2Rl
ZmluZQlDUFVJRF9UT19GQU1JTFkoaWQpIFwKKyAgICAoKCgoaWQpICYgQ1BVSURfRkFNSUxZKSA+
PiA4KSArIFwKKyAgICAoKChpZCkgJiBDUFVJRF9FWFRfRkFNSUxZKSA+PiAyMCkpCisjZW5kaWYK
KworLyoKKyAqIENQVUlEIGluc3RydWN0aW9uIDEgZWJ4IGluZm8KKyAqLworI2RlZmluZQlDUFVJ
RF9CUkFORF9JTkRFWAkweDAwMDAwMGZmCisjZGVmaW5lCUNQVUlEX0NMRlVTSF9TSVpFCTB4MDAw
MGZmMDAKKyNkZWZpbmUJQ1BVSURfSFRUX0NPUkVTCQkweDAwZmYwMDAwCisjZGVmaW5lCUNQVUlE
X0xPQ0FMX0FQSUNfSUQJMHhmZjAwMDAwMAorCisvKgorICogQ1BVSUQgaW5zdHJ1Y3Rpb24gNSBp
bmZvCisgKi8KKyNkZWZpbmUJQ1BVSUQ1X01PTl9NSU5fU0laRQkweDAwMDBmZmZmCS8qIGVheCAq
LworI2RlZmluZQlDUFVJRDVfTU9OX01BWF9TSVpFCTB4MDAwMGZmZmYJLyogZWJ4ICovCisjZGVm
aW5lCUNQVUlENV9NT05fTVdBSVRfRVhUCTB4MDAwMDAwMDEJLyogZWN4ICovCisjZGVmaW5lCUNQ
VUlENV9NV0FJVF9JTlRSQlJFQUsJMHgwMDAwMDAwMgkvKiBlY3ggKi8KKworLyoKKyAqIE1XQUlU
IGNwdSBwb3dlciBzdGF0ZXMuICBMb3dlciA0IGJpdHMgYXJlIHN1Yi1zdGF0ZXMuCisgKi8KKyNk
ZWZpbmUJTVdBSVRfQzAJMHhmMAorI2RlZmluZQlNV0FJVF9DMQkweDAwCisjZGVmaW5lCU1XQUlU
X0MyCTB4MTAKKyNkZWZpbmUJTVdBSVRfQzMJMHgyMAorI2RlZmluZQlNV0FJVF9DNAkweDMwCisK
Ky8qCisgKiBNV0FJVCBleHRlbnNpb25zLgorICovCisvKiBJbnRlcnJ1cHQgYnJlYWtzIE1XQUlU
IGV2ZW4gd2hlbiBtYXNrZWQuICovCisjZGVmaW5lCU1XQUlUX0lOVFJCUkVBSwkJMHgwMDAwMDAw
MQorCisvKgorICogQ1BVSUQgaW5zdHJ1Y3Rpb24gNiBlY3ggaW5mbworICovCisjZGVmaW5lCUNQ
VUlEX1BFUkZfU1RBVAkJMHgwMDAwMDAwMQorI2RlZmluZQlDUFVJRF9QRVJGX0JJQVMJCTB4MDAw
MDAwMDgKKworLyogCisgKiBDUFVJRCBpbnN0cnVjdGlvbiAweGIgZWJ4IGluZm8uCisgKi8KKyNk
ZWZpbmUJQ1BVSURfVFlQRV9JTlZBTAkwCisjZGVmaW5lCUNQVUlEX1RZUEVfU01UCQkxCisjZGVm
aW5lCUNQVUlEX1RZUEVfQ09SRQkJMgorCisvKgorICogQ1BVSUQgaW5zdHJ1Y3Rpb24gMHhkIFBy
b2Nlc3NvciBFeHRlbmRlZCBTdGF0ZSBFbnVtZXJhdGlvbiBTdWItbGVhZiAxCisgKi8KKyNkZWZp
bmUJQ1BVSURfRVhUU1RBVEVfWFNBVkVPUFQJMHgwMDAwMDAwMQorI2RlZmluZQlDUFVJRF9FWFRT
VEFURV9YU0FWRUMJMHgwMDAwMDAwMgorI2RlZmluZQlDUFVJRF9FWFRTVEFURV9YSU5VU0UJMHgw
MDAwMDAwNAorI2RlZmluZQlDUFVJRF9FWFRTVEFURV9YU0FWRVMJMHgwMDAwMDAwOAorCisvKgor
ICogQU1EIGV4dGVuZGVkIGZ1bmN0aW9uIDgwMDBfMDAwN2ggZWR4IGluZm8KKyAqLworI2RlZmlu
ZQlBTURQTV9UUwkJMHgwMDAwMDAwMQorI2RlZmluZQlBTURQTV9GSUQJCTB4MDAwMDAwMDIKKyNk
ZWZpbmUJQU1EUE1fVklECQkweDAwMDAwMDA0CisjZGVmaW5lCUFNRFBNX1RUUAkJMHgwMDAwMDAw
OAorI2RlZmluZQlBTURQTV9UTQkJMHgwMDAwMDAxMAorI2RlZmluZQlBTURQTV9TVEMJCTB4MDAw
MDAwMjAKKyNkZWZpbmUJQU1EUE1fMTAwTUhaX1NURVBTCTB4MDAwMDAwNDAKKyNkZWZpbmUJQU1E
UE1fSFdfUFNUQVRFCQkweDAwMDAwMDgwCisjZGVmaW5lCUFNRFBNX1RTQ19JTlZBUklBTlQJMHgw
MDAwMDEwMAorI2RlZmluZQlBTURQTV9DUEIJCTB4MDAwMDAyMDAKKworLyoKKyAqIEFNRCBleHRl
bmRlZCBmdW5jdGlvbiA4MDAwXzAwMDhoIGVjeCBpbmZvCisgKi8KKyNkZWZpbmUJQU1ESURfQ01Q
X0NPUkVTCQkweDAwMDAwMGZmCisjZGVmaW5lCUFNRElEX0NPUkVJRF9TSVpFCTB4MDAwMGYwMDAK
KyNkZWZpbmUJQU1ESURfQ09SRUlEX1NJWkVfU0hJRlQJMTIKKworLyoKKyAqIENQVUlEIGluc3Ry
dWN0aW9uIDcgU3RydWN0dXJlZCBFeHRlbmRlZCBGZWF0dXJlcywgbGVhZiAwIGVieCBpbmZvCisg
Ki8KKyNkZWZpbmUJQ1BVSURfU1RERVhUX0ZTR1NCQVNFCTB4MDAwMDAwMDEKKyNkZWZpbmUJQ1BV
SURfU1RERVhUX1RTQ19BREpVU1QJMHgwMDAwMDAwMgorI2RlZmluZQlDUFVJRF9TVERFWFRfU0dY
CTB4MDAwMDAwMDQKKyNkZWZpbmUJQ1BVSURfU1RERVhUX0JNSTEJMHgwMDAwMDAwOAorI2RlZmlu
ZQlDUFVJRF9TVERFWFRfSExFCTB4MDAwMDAwMTAKKyNkZWZpbmUJQ1BVSURfU1RERVhUX0FWWDIJ
MHgwMDAwMDAyMAorI2RlZmluZQlDUFVJRF9TVERFWFRfRkRQX0VYQwkweDAwMDAwMDQwCisjZGVm
aW5lCUNQVUlEX1NUREVYVF9TTUVQCTB4MDAwMDAwODAKKyNkZWZpbmUJQ1BVSURfU1RERVhUX0JN
STIJMHgwMDAwMDEwMAorI2RlZmluZQlDUFVJRF9TVERFWFRfRVJNUwkweDAwMDAwMjAwCisjZGVm
aW5lCUNQVUlEX1NUREVYVF9JTlZQQ0lECTB4MDAwMDA0MDAKKyNkZWZpbmUJQ1BVSURfU1RERVhU
X1JUTQkweDAwMDAwODAwCisjZGVmaW5lCUNQVUlEX1NUREVYVF9QUU0JMHgwMDAwMTAwMAorI2Rl
ZmluZQlDUFVJRF9TVERFWFRfTkZQVVNHCTB4MDAwMDIwMDAKKyNkZWZpbmUJQ1BVSURfU1RERVhU
X01QWAkweDAwMDA0MDAwCisjZGVmaW5lCUNQVUlEX1NUREVYVF9QUUUJMHgwMDAwODAwMAorI2Rl
ZmluZQlDUFVJRF9TVERFWFRfQVZYNTEyRgkweDAwMDEwMDAwCisjZGVmaW5lCUNQVUlEX1NUREVY
VF9BVlg1MTJEUQkweDAwMDIwMDAwCisjZGVmaW5lCUNQVUlEX1NUREVYVF9SRFNFRUQJMHgwMDA0
MDAwMAorI2RlZmluZQlDUFVJRF9TVERFWFRfQURYCTB4MDAwODAwMDAKKyNkZWZpbmUJQ1BVSURf
U1RERVhUX1NNQVAJMHgwMDEwMDAwMAorI2RlZmluZQlDUFVJRF9TVERFWFRfQVZYNTEySUZNQQkw
eDAwMjAwMDAwCisjZGVmaW5lCUNQVUlEX1NUREVYVF9QQ09NTUlUCTB4MDA0MDAwMDAKKyNkZWZp
bmUJQ1BVSURfU1RERVhUX0NMRkxVU0hPUFQJMHgwMDgwMDAwMAorI2RlZmluZQlDUFVJRF9TVERF
WFRfQ0xXQgkweDAxMDAwMDAwCisjZGVmaW5lCUNQVUlEX1NUREVYVF9QUk9DVFJBQ0UJMHgwMjAw
MDAwMAorI2RlZmluZQlDUFVJRF9TVERFWFRfQVZYNTEyUEYJMHgwNDAwMDAwMAorI2RlZmluZQlD
UFVJRF9TVERFWFRfQVZYNTEyRVIJMHgwODAwMDAwMAorI2RlZmluZQlDUFVJRF9TVERFWFRfQVZY
NTEyQ0QJMHgxMDAwMDAwMAorI2RlZmluZQlDUFVJRF9TVERFWFRfU0hBCTB4MjAwMDAwMDAKKyNk
ZWZpbmUJQ1BVSURfU1RERVhUX0FWWDUxMkJXCTB4NDAwMDAwMDAKKworLyoKKyAqIENQVUlEIGlu
c3RydWN0aW9uIDcgU3RydWN0dXJlZCBFeHRlbmRlZCBGZWF0dXJlcywgbGVhZiAwIGVjeCBpbmZv
CisgKi8KKyNkZWZpbmUJQ1BVSURfU1RERVhUMl9QUkVGRVRDSFdUMSAweDAwMDAwMDAxCisjZGVm
aW5lCUNQVUlEX1NUREVYVDJfVU1JUAkweDAwMDAwMDA0CisjZGVmaW5lCUNQVUlEX1NUREVYVDJf
UEtVCTB4MDAwMDAwMDgKKyNkZWZpbmUJQ1BVSURfU1RERVhUMl9PU1BLRQkweDAwMDAwMDEwCisj
ZGVmaW5lCUNQVUlEX1NUREVYVDJfUkRQSUQJMHgwMDQwMDAwMAorI2RlZmluZQlDUFVJRF9TVERF
WFQyX1NHWExDCTB4NDAwMDAwMDAKKworLyoKKyAqIENQVUlEIG1hbnVmYWN0dXJlcnMgaWRlbnRp
ZmllcnMKKyAqLworI2RlZmluZQlBTURfVkVORE9SX0lECQkiQXV0aGVudGljQU1EIgorI2RlZmlu
ZQlDRU5UQVVSX1ZFTkRPUl9JRAkiQ2VudGF1ckhhdWxzIgorI2RlZmluZQlDWVJJWF9WRU5ET1Jf
SUQJCSJDeXJpeEluc3RlYWQiCisjZGVmaW5lCUlOVEVMX1ZFTkRPUl9JRAkJIkdlbnVpbmVJbnRl
bCIKKyNkZWZpbmUJTkVYR0VOX1ZFTkRPUl9JRAkiTmV4R2VuRHJpdmVuIgorI2RlZmluZQlOU0Nf
VkVORE9SX0lECQkiR2VvZGUgYnkgTlNDIgorI2RlZmluZQlSSVNFX1ZFTkRPUl9JRAkJIlJpc2VS
aXNlUmlzZSIKKyNkZWZpbmUJU0lTX1ZFTkRPUl9JRAkJIlNpUyBTaVMgU2lTICIKKyNkZWZpbmUJ
VFJBTlNNRVRBX1ZFTkRPUl9JRAkiR2VudWluZVRNeDg2IgorI2RlZmluZQlVTUNfVkVORE9SX0lE
CQkiVU1DIFVNQyBVTUMgIgorCisvKgorICogTW9kZWwtc3BlY2lmaWMgcmVnaXN0ZXJzIGZvciB0
aGUgaTM4NiBmYW1pbHkKKyAqLworI2RlZmluZQlNU1JfUDVfTUNfQUREUgkJMHgwMDAKKyNkZWZp
bmUJTVNSX1A1X01DX1RZUEUJCTB4MDAxCisjZGVmaW5lCU1TUl9UU0MJCQkweDAxMAorI2RlZmlu
ZQlNU1JfUDVfQ0VTUgkJMHgwMTEKKyNkZWZpbmUJTVNSX1A1X0NUUjAJCTB4MDEyCisjZGVmaW5l
CU1TUl9QNV9DVFIxCQkweDAxMworI2RlZmluZQlNU1JfSUEzMl9QTEFURk9STV9JRAkweDAxNwor
I2RlZmluZQlNU1JfQVBJQ0JBU0UJCTB4MDFiCisjZGVmaW5lCU1TUl9FQkxfQ1JfUE9XRVJPTgkw
eDAyYQorI2RlZmluZQlNU1JfVEVTVF9DVEwJCTB4MDMzCisjZGVmaW5lCU1TUl9JQTMyX0ZFQVRV
UkVfQ09OVFJPTCAweDAzYQorI2RlZmluZQlNU1JfQklPU19VUERUX1RSSUcJMHgwNzkKKyNkZWZp
bmUJTVNSX0JCTF9DUl9EMAkJMHgwODgKKyNkZWZpbmUJTVNSX0JCTF9DUl9EMQkJMHgwODkKKyNk
ZWZpbmUJTVNSX0JCTF9DUl9EMgkJMHgwOGEKKyNkZWZpbmUJTVNSX0JJT1NfU0lHTgkJMHgwOGIK
KyNkZWZpbmUJTVNSX1BFUkZDVFIwCQkweDBjMQorI2RlZmluZQlNU1JfUEVSRkNUUjEJCTB4MGMy
CisjZGVmaW5lCU1TUl9QTEFURk9STV9JTkZPCTB4MGNlCisjZGVmaW5lCU1TUl9NUEVSRgkJMHgw
ZTcKKyNkZWZpbmUJTVNSX0FQRVJGCQkweDBlOAorI2RlZmluZQlNU1JfSUEzMl9FWFRfQ09ORklH
CTB4MGVlCS8qIFVuZG9jdW1lbnRlZC4gQ29yZSBTb2xvL0R1byBvbmx5ICovCisjZGVmaW5lCU1T
Ul9NVFJSY2FwCQkweDBmZQorI2RlZmluZQlNU1JfQkJMX0NSX0FERFIJCTB4MTE2CisjZGVmaW5l
CU1TUl9CQkxfQ1JfREVDQwkJMHgxMTgKKyNkZWZpbmUJTVNSX0JCTF9DUl9DVEwJCTB4MTE5Cisj
ZGVmaW5lCU1TUl9CQkxfQ1JfVFJJRwkJMHgxMWEKKyNkZWZpbmUJTVNSX0JCTF9DUl9CVVNZCQkw
eDExYgorI2RlZmluZQlNU1JfQkJMX0NSX0NUTDMJCTB4MTFlCisjZGVmaW5lCU1TUl9TWVNFTlRF
Ul9DU19NU1IJMHgxNzQKKyNkZWZpbmUJTVNSX1NZU0VOVEVSX0VTUF9NU1IJMHgxNzUKKyNkZWZp
bmUJTVNSX1NZU0VOVEVSX0VJUF9NU1IJMHgxNzYKKyNkZWZpbmUJTVNSX01DR19DQVAJCTB4MTc5
CisjZGVmaW5lCU1TUl9NQ0dfU1RBVFVTCQkweDE3YQorI2RlZmluZQlNU1JfTUNHX0NUTAkJMHgx
N2IKKyNkZWZpbmUJTVNSX0VWTlRTRUwwCQkweDE4NgorI2RlZmluZQlNU1JfRVZOVFNFTDEJCTB4
MTg3CisjZGVmaW5lCU1TUl9USEVSTV9DT05UUk9MCTB4MTlhCisjZGVmaW5lCU1TUl9USEVSTV9J
TlRFUlJVUFQJMHgxOWIKKyNkZWZpbmUJTVNSX1RIRVJNX1NUQVRVUwkweDE5YworI2RlZmluZQlN
U1JfSUEzMl9NSVNDX0VOQUJMRQkweDFhMAorI2RlZmluZQlNU1JfSUEzMl9URU1QRVJBVFVSRV9U
QVJHRVQJMHgxYTIKKyNkZWZpbmUJTVNSX1RVUkJPX1JBVElPX0xJTUlUCTB4MWFkCisjZGVmaW5l
CU1TUl9UVVJCT19SQVRJT19MSU1JVDEJMHgxYWUKKyNkZWZpbmUJTVNSX0RFQlVHQ1RMTVNSCQkw
eDFkOQorI2RlZmluZQlNU1JfTEFTVEJSQU5DSEZST01JUAkweDFkYgorI2RlZmluZQlNU1JfTEFT
VEJSQU5DSFRPSVAJMHgxZGMKKyNkZWZpbmUJTVNSX0xBU1RJTlRGUk9NSVAJMHgxZGQKKyNkZWZp
bmUJTVNSX0xBU1RJTlRUT0lQCQkweDFkZQorI2RlZmluZQlNU1JfUk9CX0NSX0JLVVBUTVBEUjYJ
MHgxZTAKKyNkZWZpbmUJTVNSX01UUlJWYXJCYXNlCQkweDIwMAorI2RlZmluZQlNU1JfTVRSUjY0
a0Jhc2UJCTB4MjUwCisjZGVmaW5lCU1TUl9NVFJSMTZrQmFzZQkJMHgyNTgKKyNkZWZpbmUJTVNS
X01UUlI0a0Jhc2UJCTB4MjY4CisjZGVmaW5lCU1TUl9QQVQJCQkweDI3NworI2RlZmluZQlNU1Jf
TUMwX0NUTDIJCTB4MjgwCisjZGVmaW5lCU1TUl9NVFJSZGVmVHlwZQkJMHgyZmYKKyNkZWZpbmUJ
TVNSX01DMF9DVEwJCTB4NDAwCisjZGVmaW5lCU1TUl9NQzBfU1RBVFVTCQkweDQwMQorI2RlZmlu
ZQlNU1JfTUMwX0FERFIJCTB4NDAyCisjZGVmaW5lCU1TUl9NQzBfTUlTQwkJMHg0MDMKKyNkZWZp
bmUJTVNSX01DMV9DVEwJCTB4NDA0CisjZGVmaW5lCU1TUl9NQzFfU1RBVFVTCQkweDQwNQorI2Rl
ZmluZQlNU1JfTUMxX0FERFIJCTB4NDA2CisjZGVmaW5lCU1TUl9NQzFfTUlTQwkJMHg0MDcKKyNk
ZWZpbmUJTVNSX01DMl9DVEwJCTB4NDA4CisjZGVmaW5lCU1TUl9NQzJfU1RBVFVTCQkweDQwOQor
I2RlZmluZQlNU1JfTUMyX0FERFIJCTB4NDBhCisjZGVmaW5lCU1TUl9NQzJfTUlTQwkJMHg0MGIK
KyNkZWZpbmUJTVNSX01DM19DVEwJCTB4NDBjCisjZGVmaW5lCU1TUl9NQzNfU1RBVFVTCQkweDQw
ZAorI2RlZmluZQlNU1JfTUMzX0FERFIJCTB4NDBlCisjZGVmaW5lCU1TUl9NQzNfTUlTQwkJMHg0
MGYKKyNkZWZpbmUJTVNSX01DNF9DVEwJCTB4NDEwCisjZGVmaW5lCU1TUl9NQzRfU1RBVFVTCQkw
eDQxMQorI2RlZmluZQlNU1JfTUM0X0FERFIJCTB4NDEyCisjZGVmaW5lCU1TUl9NQzRfTUlTQwkJ
MHg0MTMKKyNkZWZpbmUJTVNSX1JBUExfUE9XRVJfVU5JVAkweDYwNgorI2RlZmluZQlNU1JfUEtH
X0VORVJHWV9TVEFUVVMJMHg2MTEKKyNkZWZpbmUJTVNSX0RSQU1fRU5FUkdZX1NUQVRVUwkweDYx
OQorI2RlZmluZQlNU1JfUFAwX0VORVJHWV9TVEFUVVMJMHg2MzkKKyNkZWZpbmUJTVNSX1BQMV9F
TkVSR1lfU1RBVFVTCTB4NjQxCisjZGVmaW5lCU1TUl9UU0NfREVBRExJTkUJMHg2ZTAJLyogV3Jp
dGVzIGFyZSBub3Qgc2VyaWFsaXppbmcgKi8KKworLyoKKyAqIFZNWCBNU1JzCisgKi8KKyNkZWZp
bmUJTVNSX1ZNWF9CQVNJQwkJMHg0ODAKKyNkZWZpbmUJTVNSX1ZNWF9QSU5CQVNFRF9DVExTCTB4
NDgxCisjZGVmaW5lCU1TUl9WTVhfUFJPQ0JBU0VEX0NUTFMJMHg0ODIKKyNkZWZpbmUJTVNSX1ZN
WF9FWElUX0NUTFMJMHg0ODMKKyNkZWZpbmUJTVNSX1ZNWF9FTlRSWV9DVExTCTB4NDg0CisjZGVm
aW5lCU1TUl9WTVhfQ1IwX0ZJWEVEMAkweDQ4NgorI2RlZmluZQlNU1JfVk1YX0NSMF9GSVhFRDEJ
MHg0ODcKKyNkZWZpbmUJTVNSX1ZNWF9DUjRfRklYRUQwCTB4NDg4CisjZGVmaW5lCU1TUl9WTVhf
Q1I0X0ZJWEVEMQkweDQ4OQorI2RlZmluZQlNU1JfVk1YX1BST0NCQVNFRF9DVExTMgkweDQ4Ygor
I2RlZmluZQlNU1JfVk1YX0VQVF9WUElEX0NBUAkweDQ4YworI2RlZmluZQlNU1JfVk1YX1RSVUVf
UElOQkFTRURfQ1RMUwkweDQ4ZAorI2RlZmluZQlNU1JfVk1YX1RSVUVfUFJPQ0JBU0VEX0NUTFMJ
MHg0OGUKKyNkZWZpbmUJTVNSX1ZNWF9UUlVFX0VYSVRfQ1RMUwkweDQ4ZgorI2RlZmluZQlNU1Jf
Vk1YX1RSVUVfRU5UUllfQ1RMUwkweDQ5MAorCisvKgorICogWDJBUElDIE1TUnMuCisgKiBXcml0
ZXMgYXJlIG5vdCBzZXJpYWxpemluZy4KKyAqLworI2RlZmluZQlNU1JfQVBJQ18wMDAJCTB4ODAw
CisjZGVmaW5lCU1TUl9BUElDX0lECQkweDgwMgorI2RlZmluZQlNU1JfQVBJQ19WRVJTSU9OCTB4
ODAzCisjZGVmaW5lCU1TUl9BUElDX1RQUgkJMHg4MDgKKyNkZWZpbmUJTVNSX0FQSUNfRU9JCQkw
eDgwYgorI2RlZmluZQlNU1JfQVBJQ19MRFIJCTB4ODBkCisjZGVmaW5lCU1TUl9BUElDX1NWUgkJ
MHg4MGYKKyNkZWZpbmUJTVNSX0FQSUNfSVNSMAkJMHg4MTAKKyNkZWZpbmUJTVNSX0FQSUNfSVNS
MQkJMHg4MTEKKyNkZWZpbmUJTVNSX0FQSUNfSVNSMgkJMHg4MTIKKyNkZWZpbmUJTVNSX0FQSUNf
SVNSMwkJMHg4MTMKKyNkZWZpbmUJTVNSX0FQSUNfSVNSNAkJMHg4MTQKKyNkZWZpbmUJTVNSX0FQ
SUNfSVNSNQkJMHg4MTUKKyNkZWZpbmUJTVNSX0FQSUNfSVNSNgkJMHg4MTYKKyNkZWZpbmUJTVNS
X0FQSUNfSVNSNwkJMHg4MTcKKyNkZWZpbmUJTVNSX0FQSUNfVE1SMAkJMHg4MTgKKyNkZWZpbmUJ
TVNSX0FQSUNfSVJSMAkJMHg4MjAKKyNkZWZpbmUJTVNSX0FQSUNfRVNSCQkweDgyOAorI2RlZmlu
ZQlNU1JfQVBJQ19MVlRfQ01DSQkweDgyRgorI2RlZmluZQlNU1JfQVBJQ19JQ1IJCTB4ODMwCisj
ZGVmaW5lCU1TUl9BUElDX0xWVF9USU1FUgkweDgzMgorI2RlZmluZQlNU1JfQVBJQ19MVlRfVEhF
Uk1BTAkweDgzMworI2RlZmluZQlNU1JfQVBJQ19MVlRfUENJTlQJMHg4MzQKKyNkZWZpbmUJTVNS
X0FQSUNfTFZUX0xJTlQwCTB4ODM1CisjZGVmaW5lCU1TUl9BUElDX0xWVF9MSU5UMQkweDgzNgor
I2RlZmluZQlNU1JfQVBJQ19MVlRfRVJST1IJMHg4MzcKKyNkZWZpbmUJTVNSX0FQSUNfSUNSX1RJ
TUVSCTB4ODM4CisjZGVmaW5lCU1TUl9BUElDX0NDUl9USU1FUgkweDgzOQorI2RlZmluZQlNU1Jf
QVBJQ19EQ1JfVElNRVIJMHg4M2UKKyNkZWZpbmUJTVNSX0FQSUNfU0VMRl9JUEkJMHg4M2YKKwor
I2RlZmluZQlNU1JfSUEzMl9YU1MJCTB4ZGEwCisKKy8qCisgKiBDb25zdGFudHMgcmVsYXRlZCB0
byBNU1Incy4KKyAqLworI2RlZmluZQlBUElDQkFTRV9SRVNFUlZFRAkweDAwMDAwMmZmCisjZGVm
aW5lCUFQSUNCQVNFX0JTUAkJMHgwMDAwMDEwMAorI2RlZmluZQlBUElDQkFTRV9YMkFQSUMJCTB4
MDAwMDA0MDAKKyNkZWZpbmUJQVBJQ0JBU0VfRU5BQkxFRAkweDAwMDAwODAwCisjZGVmaW5lCUFQ
SUNCQVNFX0FERFJFU1MJMHhmZmZmZjAwMAorCisvKiBNU1JfSUEzMl9GRUFUVVJFX0NPTlRST0wg
cmVsYXRlZCAqLworI2RlZmluZQlJQTMyX0ZFQVRVUkVfQ09OVFJPTF9MT0NLCTB4MDEJLyogbG9j
ayBiaXQgKi8KKyNkZWZpbmUJSUEzMl9GRUFUVVJFX0NPTlRST0xfU01YX0VOCTB4MDIJLyogZW5h
YmxlIFZNWCBpbnNpZGUgU01YICovCisjZGVmaW5lCUlBMzJfRkVBVFVSRV9DT05UUk9MX1ZNWF9F
TgkweDA0CS8qIGVuYWJsZSBWTVggb3V0c2lkZSBTTVggKi8KKworLyogTVNSIElBMzJfTUlTQ19F
TkFCTEUgKi8KKyNkZWZpbmUJSUEzMl9NSVNDX0VOX0ZBU1RTVFIJMHgwMDAwMDAwMDAwMDAwMDAx
VUxMCisjZGVmaW5lCUlBMzJfTUlTQ19FTl9BVENDRQkweDAwMDAwMDAwMDAwMDAwMDhVTEwKKyNk
ZWZpbmUJSUEzMl9NSVNDX0VOX1BFUkZNT04JMHgwMDAwMDAwMDAwMDAwMDgwVUxMCisjZGVmaW5l
CUlBMzJfTUlTQ19FTl9QRUJTVQkweDAwMDAwMDAwMDAwMDEwMDBVTEwKKyNkZWZpbmUJSUEzMl9N
SVNDX0VOX0VTU1RFCTB4MDAwMDAwMDAwMDAxMDAwMFVMTAorI2RlZmluZQlJQTMyX01JU0NfRU5f
TU9ORQkweDAwMDAwMDAwMDAwNDAwMDBVTEwKKyNkZWZpbmUJSUEzMl9NSVNDX0VOX0xJTUNQVUlE
CTB4MDAwMDAwMDAwMDQwMDAwMFVMTAorI2RlZmluZQlJQTMyX01JU0NfRU5feFRQUkQJMHgwMDAw
MDAwMDAwODAwMDAwVUxMCisjZGVmaW5lCUlBMzJfTUlTQ19FTl9YREQJMHgwMDAwMDAwNDAwMDAw
MDAwVUxMCisKKy8qCisgKiBQQVQgbW9kZXMuCisgKi8KKyNkZWZpbmUJUEFUX1VOQ0FDSEVBQkxF
CQkweDAwCisjZGVmaW5lCVBBVF9XUklURV9DT01CSU5JTkcJMHgwMQorI2RlZmluZQlQQVRfV1JJ
VEVfVEhST1VHSAkweDA0CisjZGVmaW5lCVBBVF9XUklURV9QUk9URUNURUQJMHgwNQorI2RlZmlu
ZQlQQVRfV1JJVEVfQkFDSwkJMHgwNgorI2RlZmluZQlQQVRfVU5DQUNIRUQJCTB4MDcKKyNkZWZp
bmUJUEFUX1ZBTFVFKGksIG0pCQkoKGxvbmcgbG9uZykobSkgPDwgKDggKiAoaSkpKQorI2RlZmlu
ZQlQQVRfTUFTSyhpKQkJUEFUX1ZBTFVFKGksIDB4ZmYpCisKKy8qCisgKiBDb25zdGFudHMgcmVs
YXRlZCB0byBNVFJScworICovCisjZGVmaW5lCU1UUlJfVU5DQUNIRUFCTEUJMHgwMAorI2RlZmlu
ZQlNVFJSX1dSSVRFX0NPTUJJTklORwkweDAxCisjZGVmaW5lCU1UUlJfV1JJVEVfVEhST1VHSAkw
eDA0CisjZGVmaW5lCU1UUlJfV1JJVEVfUFJPVEVDVEVECTB4MDUKKyNkZWZpbmUJTVRSUl9XUklU
RV9CQUNLCQkweDA2CisjZGVmaW5lCU1UUlJfTjY0SwkJOAkvKiBudW1iZXJzIG9mIGZpeGVkLXNp
emUgZW50cmllcyAqLworI2RlZmluZQlNVFJSX04xNksJCTE2CisjZGVmaW5lCU1UUlJfTjRLCQk2
NAorI2RlZmluZQlNVFJSX0NBUF9XQwkJMHgwMDAwMDAwMDAwMDAwNDAwCisjZGVmaW5lCU1UUlJf
Q0FQX0ZJWEVECQkweDAwMDAwMDAwMDAwMDAxMDAKKyNkZWZpbmUJTVRSUl9DQVBfVkNOVAkJMHgw
MDAwMDAwMDAwMDAwMGZmCisjZGVmaW5lCU1UUlJfREVGX0VOQUJMRQkJMHgwMDAwMDAwMDAwMDAw
ODAwCisjZGVmaW5lCU1UUlJfREVGX0ZJWEVEX0VOQUJMRQkweDAwMDAwMDAwMDAwMDA0MDAKKyNk
ZWZpbmUJTVRSUl9ERUZfVFlQRQkJMHgwMDAwMDAwMDAwMDAwMGZmCisjZGVmaW5lCU1UUlJfUEhZ
U0JBU0VfUEhZU0JBU0UJMHgwMDBmZmZmZmZmZmZmMDAwCisjZGVmaW5lCU1UUlJfUEhZU0JBU0Vf
VFlQRQkweDAwMDAwMDAwMDAwMDAwZmYKKyNkZWZpbmUJTVRSUl9QSFlTTUFTS19QSFlTTUFTSwkw
eDAwMGZmZmZmZmZmZmYwMDAKKyNkZWZpbmUJTVRSUl9QSFlTTUFTS19WQUxJRAkweDAwMDAwMDAw
MDAwMDA4MDAKKworLyoKKyAqIEN5cml4IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLCBhY2Nlc3Np
YmxlIGFzIElPIHBvcnRzLgorICovCisjZGVmaW5lCUNDUjAJCQkweGMwCS8qIENvbmZpZ3VyYXRp
b24gY29udHJvbCByZWdpc3RlciAwICovCisjZGVmaW5lCUNDUjBfTkMwCQkweDAxCS8qIEZpcnN0
IDY0SyBvZiBlYWNoIDFNIG1lbW9yeSByZWdpb24gaXMKKwkJCQkJCQkJICAgbm9uLWNhY2hlYWJs
ZSAqLworI2RlZmluZQlDQ1IwX05DMQkJMHgwMgkvKiA2NDBLLTFNIHJlZ2lvbiBpcyBub24tY2Fj
aGVhYmxlICovCisjZGVmaW5lCUNDUjBfQTIwTQkJMHgwNAkvKiBFbmFibGVzIEEyME0jIGlucHV0
IHBpbiAqLworI2RlZmluZQlDQ1IwX0tFTgkJMHgwOAkvKiBFbmFibGVzIEtFTiMgaW5wdXQgcGlu
ICovCisjZGVmaW5lCUNDUjBfRkxVU0gJCTB4MTAJLyogRW5hYmxlcyBGTFVTSCMgaW5wdXQgcGlu
ICovCisjZGVmaW5lCUNDUjBfQkFSQgkJMHgyMAkvKiBGbHVzaGVzIGludGVybmFsIGNhY2hlIHdo
ZW4gZW50ZXJpbmcgaG9sZAorCQkJCQkJCQkgICBzdGF0ZSAqLworI2RlZmluZQlDQ1IwX0NPCQkJ
MHg0MAkvKiBDYWNoZSBvcmc6IDE9ZGlyZWN0IG1hcHBlZCwgMD0yeCBzZXQKKwkJCQkJCQkJICAg
YXNzb2MgKi8KKyNkZWZpbmUJQ0NSMF9TVVNQRU5ECTB4ODAJLyogRW5hYmxlcyBTVVNQIyBhbmQg
U1VTUEEjIHBpbnMgKi8KKworI2RlZmluZQlDQ1IxCQkJMHhjMQkvKiBDb25maWd1cmF0aW9uIGNv
bnRyb2wgcmVnaXN0ZXIgMSAqLworI2RlZmluZQlDQ1IxX1JQTAkJMHgwMQkvKiBFbmFibGVzIFJQ
TFNFVCBhbmQgUlBMVkFMIyBwaW5zICovCisjZGVmaW5lCUNDUjFfU01JCQkweDAyCS8qIEVuYWJs
ZXMgU01NIHBpbnMgKi8KKyNkZWZpbmUJQ0NSMV9TTUFDCQkweDA0CS8qIFN5c3RlbSBtYW5hZ2Vt
ZW50IG1lbW9yeSBhY2Nlc3MgKi8KKyNkZWZpbmUJQ0NSMV9NTUFDCQkweDA4CS8qIE1haW4gbWVt
b3J5IGFjY2VzcyAqLworI2RlZmluZQlDQ1IxX05PX0xPQ0sJMHgxMAkvKiBOZWdhdGUgTE9DSyMg
Ki8KKyNkZWZpbmUJQ0NSMV9TTTMJCTB4ODAJLyogU01NIGFkZHJlc3Mgc3BhY2UgYWRkcmVzcyBy
ZWdpb24gMyAqLworCisjZGVmaW5lCUNDUjIJCQkweGMyCisjZGVmaW5lCUNDUjJfV0IJCQkweDAy
CS8qIEVuYWJsZXMgV0IgY2FjaGUgaW50ZXJmYWNlIHBpbnMgKi8KKyNkZWZpbmUJQ0NSMl9TQURT
CQkweDAyCS8qIFNsb3cgQURTICovCisjZGVmaW5lCUNDUjJfTE9DS19OVwkweDA0CS8qIExPQ0sg
TlcgQml0ICovCisjZGVmaW5lCUNDUjJfU1VTUF9ITFQJMHgwOAkvKiBTdXNwZW5kIG9uIEhBTFQg
Ki8KKyNkZWZpbmUJQ0NSMl9XVDEJCTB4MTAJLyogV1QgcmVnaW9uIDEgKi8KKyNkZWZpbmUJQ0NS
Ml9XUFIxCQkweDEwCS8qIFdyaXRlLXByb3RlY3QgcmVnaW9uIDEgKi8KKyNkZWZpbmUJQ0NSMl9C
QVJCCQkweDIwCS8qIEZsdXNoZXMgd3JpdGUtYmFjayBjYWNoZSB3aGVuIGVudGVyaW5nCisJCQkJ
CQkJCSAgIGhvbGQgc3RhdGUuICovCisjZGVmaW5lCUNDUjJfQldSVAkJMHg0MAkvKiBFbmFibGVz
IGJ1cnN0IHdyaXRlIGN5Y2xlcyAqLworI2RlZmluZQlDQ1IyX1VTRV9TVVNQCTB4ODAJLyogRW5h
YmxlcyBzdXNwZW5kIHBpbnMgKi8KKworI2RlZmluZQlDQ1IzCQkJMHhjMworI2RlZmluZQlDQ1Iz
X1NNSUxPQ0sJMHgwMQkvKiBTTU0gcmVnaXN0ZXIgbG9jayAqLworI2RlZmluZQlDQ1IzX05NSQkJ
MHgwMgkvKiBFbmFibGVzIE5NSSBkdXJpbmcgU01NICovCisjZGVmaW5lCUNDUjNfTElOQlJTVAkw
eDA0CS8qIExpbmVhciBhZGRyZXNzIGJ1cnN0IGN5Y2xlcyAqLworI2RlZmluZQlDQ1IzX1NNTU1P
REUJMHgwOAkvKiBTTU0gTW9kZSAqLworI2RlZmluZQlDQ1IzX01BUEVOMAkJMHgxMAkvKiBFbmFi
bGVzIE1hcDAgKi8KKyNkZWZpbmUJQ0NSM19NQVBFTjEJCTB4MjAJLyogRW5hYmxlcyBNYXAxICov
CisjZGVmaW5lCUNDUjNfTUFQRU4yCQkweDQwCS8qIEVuYWJsZXMgTWFwMiAqLworI2RlZmluZQlD
Q1IzX01BUEVOMwkJMHg4MAkvKiBFbmFibGVzIE1hcDMgKi8KKworI2RlZmluZQlDQ1I0CQkJMHhl
OAorI2RlZmluZQlDQ1I0X0lPTUFTSwkJMHgwNworI2RlZmluZQlDQ1I0X01FTQkJMHgwOAkvKiBF
bmFibGVzIG1vbW9yeSBieXBhc3NpbmcgKi8KKyNkZWZpbmUJQ0NSNF9EVEUJCTB4MTAJLyogRW5h
YmxlcyBkaXJlY3RvcnkgdGFibGUgZW50cnkgY2FjaGUgKi8KKyNkZWZpbmUJQ0NSNF9GQVNURlBF
CTB4MjAJLyogRmFzdCBGUFUgZXhjZXB0aW9uICovCisjZGVmaW5lCUNDUjRfQ1BVSUQJCTB4ODAJ
LyogRW5hYmxlcyBDUFVJRCBpbnN0cnVjdGlvbiAqLworCisjZGVmaW5lCUNDUjUJCQkweGU5Cisj
ZGVmaW5lCUNDUjVfV1RfQUxMT0MJMHgwMQkvKiBXcml0ZS10aHJvdWdoIGFsbG9jYXRlICovCisj
ZGVmaW5lCUNDUjVfU0xPUAkJMHgwMgkvKiBMT09QIGluc3RydWN0aW9uIHNsb3dlZCBkb3duICov
CisjZGVmaW5lCUNDUjVfTEJSMQkJMHgxMAkvKiBMb2NhbCBidXMgcmVnaW9uIDEgKi8KKyNkZWZp
bmUJQ0NSNV9BUlJFTgkJMHgyMAkvKiBFbmFibGVzIEFSUiByZWdpb24gKi8KKworI2RlZmluZQlD
Q1I2CQkJMHhlYQorCisjZGVmaW5lCUNDUjcJCQkweGViCisKKy8qIFBlcmZvcm1hbmNlIENvbnRy
b2wgUmVnaXN0ZXIgKDV4ODYgb25seSkuICovCisjZGVmaW5lCVBDUjAJCQkweDIwCisjZGVmaW5l
CVBDUjBfUlNUSwkJMHgwMQkvKiBFbmFibGVzIHJldHVybiBzdGFjayAqLworI2RlZmluZQlQQ1Iw
X0JUQgkJMHgwMgkvKiBFbmFibGVzIGJyYW5jaCB0YXJnZXQgYnVmZmVyICovCisjZGVmaW5lCVBD
UjBfTE9PUAkJMHgwNAkvKiBFbmFibGVzIGxvb3AgKi8KKyNkZWZpbmUJUENSMF9BSVMJCTB4MDgJ
LyogRW5hYmxlcyBhbGwgaW5zdHJjdXRpb25zIHN0YWxsZWQgdG8KKwkJCQkJCQkJICAgc2VyaWFs
aXplIHBpcGUuICovCisjZGVmaW5lCVBDUjBfTUxSCQkweDEwCS8qIEVuYWJsZXMgcmVvcmRlcmlu
ZyBvZiBtaXNhbGlnbmVkIGxvYWRzICovCisjZGVmaW5lCVBDUjBfQlRCUlQJCTB4NDAJLyogRW5h
YmxlcyBCVEIgdGVzdCByZWdpc3Rlci4gKi8KKyNkZWZpbmUJUENSMF9MU1NFUgkJMHg4MAkvKiBE
aXNhYmxlIHJlb3JkZXIgKi8KKworLyogRGV2aWNlIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVycyAq
LworI2RlZmluZQlESVIwCQkJMHhmZQorI2RlZmluZQlESVIxCQkJMHhmZgorCisvKgorICogTWFj
aGluZSBDaGVjayByZWdpc3RlciBjb25zdGFudHMuCisgKi8KKyNkZWZpbmUJTUNHX0NBUF9DT1VO
VAkJMHgwMDAwMDBmZgorI2RlZmluZQlNQ0dfQ0FQX0NUTF9QCQkweDAwMDAwMTAwCisjZGVmaW5l
CU1DR19DQVBfRVhUX1AJCTB4MDAwMDAyMDAKKyNkZWZpbmUJTUNHX0NBUF9DTUNJX1AJCTB4MDAw
MDA0MDAKKyNkZWZpbmUJTUNHX0NBUF9URVNfUAkJMHgwMDAwMDgwMAorI2RlZmluZQlNQ0dfQ0FQ
X0VYVF9DTlQJCTB4MDBmZjAwMDAKKyNkZWZpbmUJTUNHX0NBUF9TRVJfUAkJMHgwMTAwMDAwMAor
I2RlZmluZQlNQ0dfU1RBVFVTX1JJUFYJCTB4MDAwMDAwMDEKKyNkZWZpbmUJTUNHX1NUQVRVU19F
SVBWCQkweDAwMDAwMDAyCisjZGVmaW5lCU1DR19TVEFUVVNfTUNJUAkJMHgwMDAwMDAwNAorI2Rl
ZmluZQlNQ0dfQ1RMX0VOQUJMRQkJMHhmZmZmZmZmZmZmZmZmZmZmCisjZGVmaW5lCU1DR19DVExf
RElTQUJMRQkJMHgwMDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lCU1TUl9NQ19DVEwoeCkJCShNU1Jf
TUMwX0NUTCArICh4KSAqIDQpCisjZGVmaW5lCU1TUl9NQ19TVEFUVVMoeCkJKE1TUl9NQzBfU1RB
VFVTICsgKHgpICogNCkKKyNkZWZpbmUJTVNSX01DX0FERFIoeCkJCShNU1JfTUMwX0FERFIgKyAo
eCkgKiA0KQorI2RlZmluZQlNU1JfTUNfTUlTQyh4KQkJKE1TUl9NQzBfTUlTQyArICh4KSAqIDQp
CisjZGVmaW5lCU1TUl9NQ19DVEwyKHgpCQkoTVNSX01DMF9DVEwyICsgKHgpKQkvKiBJZiBNQ0df
Q0FQX0NNQ0lfUCAqLworI2RlZmluZQlNQ19TVEFUVVNfTUNBX0VSUk9SCTB4MDAwMDAwMDAwMDAw
ZmZmZgorI2RlZmluZQlNQ19TVEFUVVNfTU9ERUxfRVJST1IJMHgwMDAwMDAwMGZmZmYwMDAwCisj
ZGVmaW5lCU1DX1NUQVRVU19PVEhFUl9JTkZPCTB4MDFmZmZmZmYwMDAwMDAwMAorI2RlZmluZQlN
Q19TVEFUVVNfQ09SX0NPVU5UCTB4MDAxZmZmYzAwMDAwMDAwMAkvKiBJZiBNQ0dfQ0FQX0NNQ0lf
UCAqLworI2RlZmluZQlNQ19TVEFUVVNfVEVTX1NUQVRVUwkweDAwNjAwMDAwMDAwMDAwMDAJLyog
SWYgTUNHX0NBUF9URVNfUCAqLworI2RlZmluZQlNQ19TVEFUVVNfQVIJCTB4MDA4MDAwMDAwMDAw
MDAwMAkvKiBJZiBNQ0dfQ0FQX1RFU19QICovCisjZGVmaW5lCU1DX1NUQVRVU19TCQkweDAxMDAw
MDAwMDAwMDAwMDAJLyogSWYgTUNHX0NBUF9URVNfUCAqLworI2RlZmluZQlNQ19TVEFUVVNfUEND
CQkweDAyMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUJTUNfU1RBVFVTX0FERFJWCQkweDA0MDAwMDAw
MDAwMDAwMDAKKyNkZWZpbmUJTUNfU1RBVFVTX01JU0NWCQkweDA4MDAwMDAwMDAwMDAwMDAKKyNk
ZWZpbmUJTUNfU1RBVFVTX0VOCQkweDEwMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUJTUNfU1RBVFVT
X1VDCQkweDIwMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUJTUNfU1RBVFVTX09WRVIJCTB4NDAwMDAw
MDAwMDAwMDAwMAorI2RlZmluZQlNQ19TVEFUVVNfVkFMCQkweDgwMDAwMDAwMDAwMDAwMDAKKyNk
ZWZpbmUJTUNfTUlTQ19SQV9MU0IJCTB4MDAwMDAwMDAwMDAwMDAzZgkvKiBJZiBNQ0dfQ0FQX1NF
Ul9QICovCisjZGVmaW5lCU1DX01JU0NfQUREUkVTU19NT0RFCTB4MDAwMDAwMDAwMDAwMDFjMAkv
KiBJZiBNQ0dfQ0FQX1NFUl9QICovCisjZGVmaW5lCU1DX0NUTDJfVEhSRVNIT0xECTB4MDAwMDAw
MDAwMDAwN2ZmZgorI2RlZmluZQlNQ19DVEwyX0NNQ0lfRU4JCTB4MDAwMDAwMDA0MDAwMDAwMAor
CisvKgorICogVGhlIGZvbGxvd2luZyBmb3VyIDMtYnl0ZSByZWdpc3RlcnMgY29udHJvbCB0aGUg
bm9uLWNhY2hlYWJsZSByZWdpb25zLgorICogVGhlc2UgcmVnaXN0ZXJzIG11c3QgYmUgd3JpdHRl
biBhcyB0aHJlZSBzZXBhcmF0ZSBieXRlcy4KKyAqCisgKiBOQ1J4KzA6IEEzMS1BMjQgb2Ygc3Rh
cnRpbmcgYWRkcmVzcworICogTkNSeCsxOiBBMjMtQTE2IG9mIHN0YXJ0aW5nIGFkZHJlc3MKKyAq
IE5DUngrMjogQTE1LUExMiBvZiBzdGFydGluZyBhZGRyZXNzIHwgTkNSX1NJWkVfeHguCisgKgor
ICogVGhlIG5vbi1jYWNoZWFibGUgcmVnaW9uJ3Mgc3RhcnRpbmcgYWRkcmVzcyBtdXN0IGJlIGFs
aWduZWQgdG8gdGhlCisgKiBzaXplIGluZGljYXRlZCBieSB0aGUgTkNSX1NJWkVfeHggZmllbGQu
CisgKi8KKyNkZWZpbmUJTkNSMQkweGM0CisjZGVmaW5lCU5DUjIJMHhjNworI2RlZmluZQlOQ1Iz
CTB4Y2EKKyNkZWZpbmUJTkNSNAkweGNkCisKKyNkZWZpbmUJTkNSX1NJWkVfMEsJMAorI2RlZmlu
ZQlOQ1JfU0laRV80SwkxCisjZGVmaW5lCU5DUl9TSVpFXzhLCTIKKyNkZWZpbmUJTkNSX1NJWkVf
MTZLCTMKKyNkZWZpbmUJTkNSX1NJWkVfMzJLCTQKKyNkZWZpbmUJTkNSX1NJWkVfNjRLCTUKKyNk
ZWZpbmUJTkNSX1NJWkVfMTI4Swk2CisjZGVmaW5lCU5DUl9TSVpFXzI1NksJNworI2RlZmluZQlO
Q1JfU0laRV81MTJLCTgKKyNkZWZpbmUJTkNSX1NJWkVfMU0JOQorI2RlZmluZQlOQ1JfU0laRV8y
TQkxMAorI2RlZmluZQlOQ1JfU0laRV80TQkxMQorI2RlZmluZQlOQ1JfU0laRV84TQkxMgorI2Rl
ZmluZQlOQ1JfU0laRV8xNk0JMTMKKyNkZWZpbmUJTkNSX1NJWkVfMzJNCTE0CisjZGVmaW5lCU5D
Ul9TSVpFXzRHCTE1CisKKy8qCisgKiBUaGUgYWRkcmVzcyByZWdpb24gcmVnaXN0ZXJzIGFyZSB1
c2VkIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIGFuZAorICogc2l6ZSBmb3IgdGhlIGVpZ2h0IGFk
ZHJlc3MgcmVnaW9ucy4KKyAqCisgKiBBUlJ4ICsgMDogQTMxLUEyNCBvZiBzdGFydCBhZGRyZXNz
CisgKiBBUlJ4ICsgMTogQTIzLUExNiBvZiBzdGFydCBhZGRyZXNzCisgKiBBUlJ4ICsgMjogQTE1
LUExMiBvZiBzdGFydCBhZGRyZXNzIHwgQVJSX1NJWkVfeHgKKyAqLworI2RlZmluZQlBUlIwCTB4
YzQKKyNkZWZpbmUJQVJSMQkweGM3CisjZGVmaW5lCUFSUjIJMHhjYQorI2RlZmluZQlBUlIzCTB4
Y2QKKyNkZWZpbmUJQVJSNAkweGQwCisjZGVmaW5lCUFSUjUJMHhkMworI2RlZmluZQlBUlI2CTB4
ZDYKKyNkZWZpbmUJQVJSNwkweGQ5CisKKyNkZWZpbmUJQVJSX1NJWkVfMEsJCTAKKyNkZWZpbmUJ
QVJSX1NJWkVfNEsJCTEKKyNkZWZpbmUJQVJSX1NJWkVfOEsJCTIKKyNkZWZpbmUJQVJSX1NJWkVf
MTZLCTMKKyNkZWZpbmUJQVJSX1NJWkVfMzJLCTQKKyNkZWZpbmUJQVJSX1NJWkVfNjRLCTUKKyNk
ZWZpbmUJQVJSX1NJWkVfMTI4Swk2CisjZGVmaW5lCUFSUl9TSVpFXzI1NksJNworI2RlZmluZQlB
UlJfU0laRV81MTJLCTgKKyNkZWZpbmUJQVJSX1NJWkVfMU0JCTkKKyNkZWZpbmUJQVJSX1NJWkVf
Mk0JCTEwCisjZGVmaW5lCUFSUl9TSVpFXzRNCQkxMQorI2RlZmluZQlBUlJfU0laRV84TQkJMTIK
KyNkZWZpbmUJQVJSX1NJWkVfMTZNCTEzCisjZGVmaW5lCUFSUl9TSVpFXzMyTQkxNAorI2RlZmlu
ZQlBUlJfU0laRV80RwkJMTUKKworLyoKKyAqIFRoZSByZWdpb24gY29udHJvbCByZWdpc3RlcnMg
c3BlY2lmeSB0aGUgYXR0cmlidXRlcyBhc3NvY2lhdGVkIHdpdGgKKyAqIHRoZSBBUlJ4IGFkZHJl
cyByZWdpb25zLgorICovCisjZGVmaW5lCVJDUjAJMHhkYworI2RlZmluZQlSQ1IxCTB4ZGQKKyNk
ZWZpbmUJUkNSMgkweGRlCisjZGVmaW5lCVJDUjMJMHhkZgorI2RlZmluZQlSQ1I0CTB4ZTAKKyNk
ZWZpbmUJUkNSNQkweGUxCisjZGVmaW5lCVJDUjYJMHhlMgorI2RlZmluZQlSQ1I3CTB4ZTMKKwor
I2RlZmluZQlSQ1JfUkNECTB4MDEJLyogRGlzYWJsZXMgY2FjaGluZyBmb3IgQVJSeCAoeCA9IDAt
NikuICovCisjZGVmaW5lCVJDUl9SQ0UJMHgwMQkvKiBFbmFibGVzIGNhY2hpbmcgZm9yIEFSUjcu
ICovCisjZGVmaW5lCVJDUl9XV08JMHgwMgkvKiBXZWFrIHdyaXRlIG9yZGVyaW5nLiAqLworI2Rl
ZmluZQlSQ1JfV0wJMHgwNAkvKiBXZWFrIGxvY2tpbmcuICovCisjZGVmaW5lCVJDUl9XRwkweDA4
CS8qIFdyaXRlIGdhdGhlcmluZy4gKi8KKyNkZWZpbmUJUkNSX1dUCTB4MTAJLyogV3JpdGUtdGhy
b3VnaC4gKi8KKyNkZWZpbmUJUkNSX05MQgkweDIwCS8qIExCQSMgcGluIGlzIG5vdCBhc3NlcnRl
ZC4gKi8KKworLyogQU1EIFdyaXRlIEFsbG9jYXRlIFRvcC1PZi1NZW1vcnkgYW5kIENvbnRyb2wg
UmVnaXN0ZXIgKi8KKyNkZWZpbmUJQU1EX1dUX0FMTE9DX1RNRQkweDQwMDAwCS8qIHRvcC1vZi1t
ZW1vcnkgZW5hYmxlICovCisjZGVmaW5lCUFNRF9XVF9BTExPQ19QUkUJMHgyMDAwMAkvKiBwcm9n
cmFtbWFibGUgcmFuZ2UgZW5hYmxlICovCisjZGVmaW5lCUFNRF9XVF9BTExPQ19GUkUJMHgxMDAw
MAkvKiBmaXhlZCAoQTAwMDAtRkZGRkYpIHJhbmdlIGVuYWJsZSAqLworCisvKiBBTUQ2NCBNU1In
cyAqLworI2RlZmluZQlNU1JfRUZFUgkweGMwMDAwMDgwCS8qIGV4dGVuZGVkIGZlYXR1cmVzICov
CisjZGVmaW5lCU1TUl9TVEFSCTB4YzAwMDAwODEJLyogbGVnYWN5IG1vZGUgU1lTQ0FMTCB0YXJn
ZXQvY3Mvc3MgKi8KKyNkZWZpbmUJTVNSX0xTVEFSCTB4YzAwMDAwODIJLyogbG9uZyBtb2RlIFNZ
U0NBTEwgdGFyZ2V0IHJpcCAqLworI2RlZmluZQlNU1JfQ1NUQVIJMHhjMDAwMDA4MwkvKiBjb21w
YXQgbW9kZSBTWVNDQUxMIHRhcmdldCByaXAgKi8KKyNkZWZpbmUJTVNSX1NGX01BU0sJMHhjMDAw
MDA4NAkvKiBzeXNjYWxsIGZsYWdzIG1hc2sgKi8KKyNkZWZpbmUJTVNSX0ZTQkFTRQkweGMwMDAw
MTAwCS8qIGJhc2UgYWRkcmVzcyBvZiB0aGUgJWZzICJzZWdtZW50IiAqLworI2RlZmluZQlNU1Jf
R1NCQVNFCTB4YzAwMDAxMDEJLyogYmFzZSBhZGRyZXNzIG9mIHRoZSAlZ3MgInNlZ21lbnQiICov
CisjZGVmaW5lCU1TUl9LR1NCQVNFCTB4YzAwMDAxMDIJLyogYmFzZSBhZGRyZXNzIG9mIHRoZSBr
ZXJuZWwgJWdzICovCisjZGVmaW5lCU1TUl9QRVJGRVZTRUwwCTB4YzAwMTAwMDAKKyNkZWZpbmUJ
TVNSX1BFUkZFVlNFTDEJMHhjMDAxMDAwMQorI2RlZmluZQlNU1JfUEVSRkVWU0VMMgkweGMwMDEw
MDAyCisjZGVmaW5lCU1TUl9QRVJGRVZTRUwzCTB4YzAwMTAwMDMKKyNkZWZpbmUJTVNSX0s3X1BF
UkZDVFIwCTB4YzAwMTAwMDQKKyNkZWZpbmUJTVNSX0s3X1BFUkZDVFIxCTB4YzAwMTAwMDUKKyNk
ZWZpbmUJTVNSX0s3X1BFUkZDVFIyCTB4YzAwMTAwMDYKKyNkZWZpbmUJTVNSX0s3X1BFUkZDVFIz
CTB4YzAwMTAwMDcKKyNkZWZpbmUJTVNSX1NZU0NGRwkweGMwMDEwMDEwCisjZGVmaW5lCU1TUl9I
V0NSCTB4YzAwMTAwMTUKKyNkZWZpbmUJTVNSX0lPUlJCQVNFMAkweGMwMDEwMDE2CisjZGVmaW5l
CU1TUl9JT1JSTUFTSzAJMHhjMDAxMDAxNworI2RlZmluZQlNU1JfSU9SUkJBU0UxCTB4YzAwMTAw
MTgKKyNkZWZpbmUJTVNSX0lPUlJNQVNLMQkweGMwMDEwMDE5CisjZGVmaW5lCU1TUl9UT1BfTUVN
CTB4YzAwMTAwMWEJLyogYm91bmRhcnkgZm9yIHJhbSBiZWxvdyA0RyAqLworI2RlZmluZQlNU1Jf
VE9QX01FTTIJMHhjMDAxMDAxZAkvKiBib3VuZGFyeSBmb3IgcmFtIGFib3ZlIDRHICovCisjZGVm
aW5lCU1TUl9OQl9DRkcxCTB4YzAwMTAwMWYJLyogTkIgY29uZmlndXJhdGlvbiAxICovCisjZGVm
aW5lCU1TUl9QX1NUQVRFX0xJTUlUIDB4YzAwMTAwNjEJLyogUC1zdGF0ZSBDdXJyZW50IExpbWl0
IFJlZ2lzdGVyICovCisjZGVmaW5lCU1TUl9QX1NUQVRFX0NPTlRST0wgMHhjMDAxMDA2MgkvKiBQ
LXN0YXRlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTVNSX1BfU1RBVEVfU1RBVFVTIDB4
YzAwMTAwNjMJLyogUC1zdGF0ZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTVNSX1BfU1RB
VEVfQ09ORklHKG4pICgweGMwMDEwMDY0ICsgKG4pKSAvKiBQLXN0YXRlIENvbmZpZyAqLworI2Rl
ZmluZQlNU1JfU01NX0FERFIJMHhjMDAxMDExMgkvKiBTTU0gVFNFRyBiYXNlIGFkZHJlc3MgKi8K
KyNkZWZpbmUJTVNSX1NNTV9NQVNLCTB4YzAwMTAxMTMJLyogU01NIFRTRUcgYWRkcmVzcyBtYXNr
ICovCisjZGVmaW5lCU1TUl9FWFRGRUFUVVJFUwkweGMwMDExMDA1CS8qIEV4dGVuZGVkIENQVUlE
IEZlYXR1cmVzIG92ZXJyaWRlICovCisjZGVmaW5lCU1TUl9JQ19DRkcJMHhjMDAxMTAyMQkvKiBJ
bnN0cnVjdGlvbiBDYWNoZSBDb25maWd1cmF0aW9uICovCisjZGVmaW5lCU1TUl9LOF9VQ09ERV9V
UERBVEUJMHhjMDAxMDAyMAkvKiB1cGRhdGUgbWljcm9jb2RlICovCisjZGVmaW5lCU1TUl9NQzBf
Q1RMX01BU0sJMHhjMDAxMDA0NAorI2RlZmluZQlNU1JfVk1fQ1IJCTB4YzAwMTAxMTQgLyogU1ZN
OiBmZWF0dXJlIGNvbnRyb2wgKi8KKyNkZWZpbmUJTVNSX1ZNX0hTQVZFX1BBCQkweGMwMDEwMTE3
IC8qIFNWTTogaG9zdCBzYXZlIGFyZWEgYWRkcmVzcyAqLworCisvKiBNU1JfVk1fQ1IgcmVsYXRl
ZCAqLworI2RlZmluZQlWTV9DUl9TVk1ESVMJCTB4MTAJLyogU1ZNOiBkaXNhYmxlZCBieSBCSU9T
ICovCisKKy8qIFZJQSBBQ0UgY3J5cHRvIGZlYXR1cmVzZXQ6IGZvciB2aWFfZmVhdHVyZV9ybmcg
Ki8KKyNkZWZpbmUJVklBX0hBU19STkcJCTEJLyogY3B1IGhhcyBSTkcgKi8KKworLyogVklBIEFD
RSBjcnlwdG8gZmVhdHVyZXNldDogZm9yIHZpYV9mZWF0dXJlX3hjcnlwdCAqLworI2RlZmluZQlW
SUFfSEFTX0FFUwkJMQkvKiBjcHUgaGFzIEFFUyAqLworI2RlZmluZQlWSUFfSEFTX1NIQQkJMgkv
KiBjcHUgaGFzIFNIQTEgJiBTSEEyNTYgKi8KKyNkZWZpbmUJVklBX0hBU19NTQkJNAkvKiBjcHUg
aGFzIFJTQSBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUJVklBX0hBU19BRVNDVFIJCTgJLyogY3B1
IGhhcyBBRVMtQ1RSIGluc3RydWN0aW9ucyAqLworCisvKiBDZW50YXVyIEV4dGVuZGVkIEZlYXR1
cmUgZmxhZ3MgKi8KKyNkZWZpbmUJVklBX0NQVUlEX0hBU19STkcJMHgwMDAwMDQKKyNkZWZpbmUJ
VklBX0NQVUlEX0RPX1JORwkweDAwMDAwOAorI2RlZmluZQlWSUFfQ1BVSURfSEFTX0FDRQkweDAw
MDA0MAorI2RlZmluZQlWSUFfQ1BVSURfRE9fQUNFCTB4MDAwMDgwCisjZGVmaW5lCVZJQV9DUFVJ
RF9IQVNfQUNFMgkweDAwMDEwMAorI2RlZmluZQlWSUFfQ1BVSURfRE9fQUNFMgkweDAwMDIwMAor
I2RlZmluZQlWSUFfQ1BVSURfSEFTX1BIRQkweDAwMDQwMAorI2RlZmluZQlWSUFfQ1BVSURfRE9f
UEhFCTB4MDAwODAwCisjZGVmaW5lCVZJQV9DUFVJRF9IQVNfUE1NCTB4MDAxMDAwCisjZGVmaW5l
CVZJQV9DUFVJRF9ET19QTU0JMHgwMDIwMDAKKworLyogVklBIEFDRSB4Y3J5cHQtKiBpbnN0cnVj
dGlvbiBjb250ZXh0IGNvbnRyb2wgb3B0aW9ucyAqLworI2RlZmluZQlWSUFfQ1JZUFRfQ1dMT19S
T1VORF9NCQkweDAwMDAwMDBmCisjZGVmaW5lCVZJQV9DUllQVF9DV0xPX0FMR19NCQkweDAwMDAw
MDcwCisjZGVmaW5lCVZJQV9DUllQVF9DV0xPX0FMR19BRVMJCTB4MDAwMDAwMDAKKyNkZWZpbmUJ
VklBX0NSWVBUX0NXTE9fS0VZR0VOX00JCTB4MDAwMDAwODAKKyNkZWZpbmUJVklBX0NSWVBUX0NX
TE9fS0VZR0VOX0hXCTB4MDAwMDAwMDAKKyNkZWZpbmUJVklBX0NSWVBUX0NXTE9fS0VZR0VOX1NX
CTB4MDAwMDAwODAKKyNkZWZpbmUJVklBX0NSWVBUX0NXTE9fTk9STUFMCQkweDAwMDAwMDAwCisj
ZGVmaW5lCVZJQV9DUllQVF9DV0xPX0lOVEVSTUVESUFURQkweDAwMDAwMTAwCisjZGVmaW5lCVZJ
QV9DUllQVF9DV0xPX0VOQ1JZUFQJCTB4MDAwMDAwMDAKKyNkZWZpbmUJVklBX0NSWVBUX0NXTE9f
REVDUllQVAkJMHgwMDAwMDIwMAorI2RlZmluZQlWSUFfQ1JZUFRfQ1dMT19LRVkxMjgJCTB4MDAw
MDAwMGEJLyogMTI4Yml0LCAxMCByZHMgKi8KKyNkZWZpbmUJVklBX0NSWVBUX0NXTE9fS0VZMTky
CQkweDAwMDAwNDBjCS8qIDE5MmJpdCwgMTIgcmRzICovCisjZGVmaW5lCVZJQV9DUllQVF9DV0xP
X0tFWTI1NgkJMHgwMDAwMDgwZQkvKiAyNTZiaXQsIDE1IHJkcyAqLworCisjZW5kaWYgLyogIV9N
QUNISU5FX1NQRUNJQUxSRUdfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVz
L25ldG1hcC94ODYvc3RhY2suaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3N0YWNr
LmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9zdGFjay5oCTE5NzAtMDEtMDEg
MDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
eDg2L3N0YWNrLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCAr
MSw2MSBAQAorLyotCisgKiBNYWNoIE9wZXJhdGluZyBTeXN0ZW0KKyAqIENvcHlyaWdodCAoYykg
MTk5MSwxOTkwIENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5CisgKiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1
dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisgKiBkb2N1bWVudGF0aW9uIGlzIGhlcmVieSBncmFu
dGVkLCBwcm92aWRlZCB0aGF0IGJvdGggdGhlIGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlz
IHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIG9mIHRoZQorICogc29mdHdh
cmUsIGRlcml2YXRpdmUgd29ya3Mgb3IgbW9kaWZpZWQgdmVyc2lvbnMsIGFuZCBhbnkgcG9ydGlv
bnMKKyAqIHRoZXJlb2YsIGFuZCB0aGF0IGJvdGggbm90aWNlcyBhcHBlYXIgaW4gc3VwcG9ydGlu
ZyBkb2N1bWVudGF0aW9uLgorICoKKyAqIENBUk5FR0lFIE1FTExPTiBBTExPV1MgRlJFRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSBJTiBJVFMKKyAqIENPTkRJVElPTi4gIENBUk5FR0lFIE1FTExPTiBE
SVNDTEFJTVMgQU5ZIExJQUJJTElUWSBPRiBBTlkgS0lORCBGT1IKKyAqIEFOWSBEQU1BR0VTIFdI
QVRTT0VWRVIgUkVTVUxUSU5HIEZST00gVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAq
IENhcm5lZ2llIE1lbGxvbiByZXF1ZXN0cyB1c2VycyBvZiB0aGlzIHNvZnR3YXJlIHRvIHJldHVy
biB0bworICoKKyAqICBTb2Z0d2FyZSBEaXN0cmlidXRpb24gQ29vcmRpbmF0b3IgIG9yICBTb2Z0
d2FyZS5EaXN0cmlidXRpb25AQ1MuQ01VLkVEVQorICogIFNjaG9vbCBvZiBDb21wdXRlciBTY2ll
bmNlCisgKiAgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkKKyAqICBQaXR0c2J1cmdoIFBBIDE1
MjEzLTM4OTAKKyAqCisgKiBhbnkgaW1wcm92ZW1lbnRzIG9yIGV4dGVuc2lvbnMgdGhhdCB0aGV5
IG1ha2UgYW5kIGdyYW50IENhcm5lZ2llIHRoZQorICogcmlnaHRzIHRvIHJlZGlzdHJpYnV0ZSB0
aGVzZSBjaGFuZ2VzLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1
ZGUvc3RhY2suaCAyODc2NDUgMjAxNS0wOS0xMSAwMzo1NDozN1ogbWFya2ogJAorICovCisKKyNp
Zm5kZWYgX1g4Nl9TVEFDS19ICisjZGVmaW5lCV9YODZfU1RBQ0tfSAorCisvKgorICogU3RhY2sg
dHJhY2UuCisgKi8KKworI2lmZGVmIF9faTM4Nl9fCitzdHJ1Y3QgaTM4Nl9mcmFtZSB7CisJc3Ry
dWN0IGkzODZfZnJhbWUJKmZfZnJhbWU7CisJdV9pbnQJCQlmX3JldGFkZHI7CisJdV9pbnQJCQlm
X2FyZzA7Cit9OworI2VuZGlmCisKKyNpZmRlZiBfX2FtZDY0X18KK3N0cnVjdCBhbWQ2NF9mcmFt
ZSB7CisJc3RydWN0IGFtZDY0X2ZyYW1lCSpmX2ZyYW1lOworCXVfbG9uZwkJCWZfcmV0YWRkcjsK
K307CisKK3N0cnVjdCBpMzg2X2ZyYW1lIHsKKwl1aW50MzJfdAkJZl9mcmFtZTsKKwl1aW50MzJf
dAkJZl9yZXRhZGRyOworCXVpbnQzMl90CQlmX2FyZzA7Cit9OworI2VuZGlmIC8qIF9fYW1kNjRf
XyAqLworCisjaWZkZWYgX0tFUk5FTAoraW50CXN0YWNrX25taV9oYW5kbGVyKHN0cnVjdCB0cmFw
ZnJhbWUgKik7CisjZW5kaWYKKworI2VuZGlmIC8qICFfWDg2X1NUQUNLX0ggKi8KZGlmZiAtdSAt
ciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvc3RkYXJnLmggL3Vzci9zcmMvc3lz
L21vZHVsZXMvbmV0bWFwL3g4Ni9zdGRhcmcuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt
YXAveDg2L3N0ZGFyZy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAv
dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3N0ZGFyZy5oCTIwMTYtMDktMjkgMDA6MjQ6
NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNzcgQEAKKy8qLQorICogQ29weXJpZ2h0IChj
KSAyMDAyIERhdmlkIEUuIE8nQnJpZW4uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9m
IGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICog
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAq
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisg
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYv
aW5jbHVkZS9zdGRhcmcuaCAyNTYxMDUgMjAxMy0xMC0wNyAxMDowMToyM1ogcGhrICQKKyAqLwor
CisjaWZuZGVmIF9NQUNISU5FX1NUREFSR19IXworI2RlZmluZQlfTUFDSElORV9TVERBUkdfSF8K
KworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy9fdHlwZXMuaD4KKworI2lm
bmRlZiBfVkFfTElTVF9ERUNMQVJFRAorI2RlZmluZQlfVkFfTElTVF9ERUNMQVJFRAordHlwZWRl
ZglfX3ZhX2xpc3QJdmFfbGlzdDsKKyNlbmRpZgorCisjaWZkZWYgX19HTlVDTElLRV9CVUlMVElO
X1NUREFSRworCisjZGVmaW5lCXZhX3N0YXJ0KGFwLCBsYXN0KSBcCisJX19idWlsdGluX3ZhX3N0
YXJ0KChhcCksIChsYXN0KSkKKworI2RlZmluZQl2YV9hcmcoYXAsIHR5cGUpIFwKKwlfX2J1aWx0
aW5fdmFfYXJnKChhcCksIHR5cGUpCisKKyNkZWZpbmUJX192YV9jb3B5KGRlc3QsIHNyYykgXAor
CV9fYnVpbHRpbl92YV9jb3B5KChkZXN0KSwgKHNyYykpCisKKyNpZiBfX0lTT19DX1ZJU0lCTEUg
Pj0gMTk5OQorI2RlZmluZQl2YV9jb3B5KGRlc3QsIHNyYykgXAorCV9fdmFfY29weShkZXN0LCBz
cmMpCisjZW5kaWYKKworI2RlZmluZQl2YV9lbmQoYXApIFwKKwlfX2J1aWx0aW5fdmFfZW5kKGFw
KQorCisjZWxpZiBkZWZpbmVkKGxpbnQpCisvKiBQcm92aWRlIGEgZmFrZSBpbXBsZW1lbnRhdGlv
biBmb3IgbGludCdzIGJlbmVmaXQgKi8KKyNkZWZpbmUJX192YV9zaXplKHR5cGUpIFwKKwkoKChz
aXplb2YodHlwZSkgKyBzaXplb2YobG9uZykgLSAxKSAvIHNpemVvZihsb25nKSkgKiBzaXplb2Yo
bG9uZykpCisjZGVmaW5lCXZhX3N0YXJ0KGFwLCBsYXN0KSBcCisJKChhcCkgPSAodmFfbGlzdCkm
KGxhc3QpICsgX192YV9zaXplKGxhc3QpKQorI2RlZmluZSB2YV9jb3B5KGRzdCwgc3JjKSBcCisJ
KChkc3QpID0gKHNyYykpCisjZGVmaW5lCXZhX2FyZyhhcCwgdHlwZSkgXAorCSgqKHR5cGUgKiko
KGFwKSArPSBfX3ZhX3NpemUodHlwZSksIChhcCkgLSBfX3ZhX3NpemUodHlwZSkpKQorI2RlZmlu
ZQl2YV9lbmQoYXApCisKKyNlbHNlCisjZXJyb3IgdGhpcyBmaWxlIG5lZWRzIHRvIGJlIHBvcnRl
ZCB0byB5b3VyIGNvbXBpbGVyCisjZW5kaWYKKworI2VuZGlmIC8qICFfTUFDSElORV9TVERBUkdf
SF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvc3lzYXJj
aC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvc3lzYXJjaC5oCi0tLSB1c3Ivc3Jj
L3N5cy9tb2R1bGVzL25ldG1hcC94ODYvc3lzYXJjaC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAw
MDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3N5c2FyY2gu
aAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDEzOCBAQAor
LyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg
b2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNv
bnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq
IFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1
ZGUvc3lzYXJjaC5oIDIzMzIwOSAyMDEyLTAzLTE5IDIxOjU3OjMxWiB0aWpsICQKKyAqLworCisv
KgorICogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIHN5c2NhbGxzIChYODYpCisgKi8KKyNpZm5kZWYg
X01BQ0hJTkVfU1lTQVJDSF9IXworI2RlZmluZSBfTUFDSElORV9TWVNBUkNIX0hfCisKKyNpbmNs
dWRlIDxzeXMvY2RlZnMuaD4KKworI2RlZmluZSBJMzg2X0dFVF9MRFQJMAorI2RlZmluZSBJMzg2
X1NFVF9MRFQJMQorI2RlZmluZQlMRFRfQVVUT19BTExPQwkweGZmZmZmZmZmCisJCQkJLyogSTM4
Nl9JT1BMICovCisjZGVmaW5lIEkzODZfR0VUX0lPUEVSTQkzCisjZGVmaW5lIEkzODZfU0VUX0lP
UEVSTQk0CisJCQkJLyogeHh4eHggKi8KKyNkZWZpbmUJSTM4Nl9WTTg2CQk2CS8qIFhYWCBOb3Qg
aW1wbGVtZW50YWJsZSBvbiBhbWQ2NCAqLworI2RlZmluZQlJMzg2X0dFVF9GU0JBU0UJCTcKKyNk
ZWZpbmUJSTM4Nl9TRVRfRlNCQVNFCQk4CisjZGVmaW5lCUkzODZfR0VUX0dTQkFTRQkJOQorI2Rl
ZmluZQlJMzg2X1NFVF9HU0JBU0UJCTEwCisjZGVmaW5lCUkzODZfR0VUX1hGUFVTVEFURQkxMQor
CisvKiBMZWF2ZSBzcGFjZSBmb3IgMC0xMjcgZm9yIHRvIGF2b2lkIHRyYW5zbGF0aW5nIHN5c2Nh
bGxzICovCisjZGVmaW5lCUFNRDY0X0dFVF9GU0JBU0UJMTI4CisjZGVmaW5lCUFNRDY0X1NFVF9G
U0JBU0UJMTI5CisjZGVmaW5lCUFNRDY0X0dFVF9HU0JBU0UJMTMwCisjZGVmaW5lCUFNRDY0X1NF
VF9HU0JBU0UJMTMxCisjZGVmaW5lCUFNRDY0X0dFVF9YRlBVU1RBVEUJMTMyCisKK3N0cnVjdCBp
Mzg2X2lvcGVybV9hcmdzIHsKKwl1bnNpZ25lZCBpbnQgc3RhcnQ7CisJdW5zaWduZWQgaW50IGxl
bmd0aDsKKwlpbnQJZW5hYmxlOworfTsKKworI2lmZGVmIF9faTM4Nl9fCitzdHJ1Y3QgaTM4Nl9s
ZHRfYXJncyB7CisJdW5zaWduZWQgaW50IHN0YXJ0OworCXVuaW9uIGRlc2NyaXB0b3IgKmRlc2Nz
OworCXVuc2lnbmVkIGludCBudW07Cit9OworCitzdHJ1Y3QgaTM4Nl92bTg2X2FyZ3MgeworCWlu
dAlzdWJfb3A7CQkJLyogc3ViLW9wZXJhdGlvbiB0byBwZXJmb3JtICovCisJY2hhcgkqc3ViX2Fy
Z3M7CQkvKiBhcmdzICovCit9OworCitzdHJ1Y3QgaTM4Nl9nZXRfeGZwdXN0YXRlIHsKKwl2b2lk
ICphZGRyOworCWludCBsZW47Cit9OworI2Vsc2UKK3N0cnVjdCBpMzg2X2xkdF9hcmdzIHsKKwl1
bnNpZ25lZCBpbnQgc3RhcnQ7CisJc3RydWN0IHVzZXJfc2VnbWVudF9kZXNjcmlwdG9yICpkZXNj
cyBfX3BhY2tlZDsKKwl1bnNpZ25lZCBpbnQgbnVtOworfTsKKworc3RydWN0IGkzODZfZ2V0X3hm
cHVzdGF0ZSB7CisJdW5zaWduZWQgaW50IGFkZHI7CisJaW50IGxlbjsKK307CisKK3N0cnVjdCBh
bWQ2NF9nZXRfeGZwdXN0YXRlIHsKKwl2b2lkICphZGRyOworCWludCBsZW47Cit9OworI2VuZGlm
CisKKyNpZm5kZWYgX0tFUk5FTAordW5pb24gZGVzY3JpcHRvcjsKK3N0cnVjdCBkYnJlZzsKKwor
X19CRUdJTl9ERUNMUworaW50IGkzODZfZ2V0X2xkdChpbnQsIHVuaW9uIGRlc2NyaXB0b3IgKiwg
aW50KTsKK2ludCBpMzg2X3NldF9sZHQoaW50LCB1bmlvbiBkZXNjcmlwdG9yICosIGludCk7Citp
bnQgaTM4Nl9nZXRfaW9wZXJtKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50ICosIGludCAqKTsK
K2ludCBpMzg2X3NldF9pb3Blcm0odW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIGludCk7Citp
bnQgaTM4Nl92bTg2KGludCwgdm9pZCAqKTsKK2ludCBpMzg2X2dldF9mc2Jhc2Uodm9pZCAqKik7
CitpbnQgaTM4Nl9nZXRfZ3NiYXNlKHZvaWQgKiopOworaW50IGkzODZfc2V0X2ZzYmFzZSh2b2lk
ICopOworaW50IGkzODZfc2V0X2dzYmFzZSh2b2lkICopOworaW50IGkzODZfc2V0X3dhdGNoKGlu
dCwgdW5zaWduZWQgaW50LCBpbnQsIGludCwgc3RydWN0IGRicmVnICopOworaW50IGkzODZfY2xy
X3dhdGNoKGludCwgc3RydWN0IGRicmVnICopOworaW50IGFtZDY0X2dldF9mc2Jhc2Uodm9pZCAq
Kik7CitpbnQgYW1kNjRfZ2V0X2dzYmFzZSh2b2lkICoqKTsKK2ludCBhbWQ2NF9zZXRfZnNiYXNl
KHZvaWQgKik7CitpbnQgYW1kNjRfc2V0X2dzYmFzZSh2b2lkICopOworaW50IHN5c2FyY2goaW50
LCB2b2lkICopOworX19FTkRfREVDTFMKKyNlbHNlCitzdHJ1Y3QgdGhyZWFkOwordW5pb24gZGVz
Y3JpcHRvcjsKKworaW50IGkzODZfZ2V0X2xkdChzdHJ1Y3QgdGhyZWFkICosIHN0cnVjdCBpMzg2
X2xkdF9hcmdzICopOworaW50IGkzODZfc2V0X2xkdChzdHJ1Y3QgdGhyZWFkICosIHN0cnVjdCBp
Mzg2X2xkdF9hcmdzICosIHVuaW9uIGRlc2NyaXB0b3IgKik7CitpbnQgaTM4Nl9nZXRfaW9wZXJt
KHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IGkzODZfaW9wZXJtX2FyZ3MgKik7CitpbnQgaTM4Nl9z
ZXRfaW9wZXJtKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IGkzODZfaW9wZXJtX2FyZ3MgKik7Citp
bnQgYW1kNjRfZ2V0X2xkdChzdHJ1Y3QgdGhyZWFkICosIHN0cnVjdCBpMzg2X2xkdF9hcmdzICop
OworaW50IGFtZDY0X3NldF9sZHQoc3RydWN0IHRocmVhZCAqLCBzdHJ1Y3QgaTM4Nl9sZHRfYXJn
cyAqLAorICAgIHN0cnVjdCB1c2VyX3NlZ21lbnRfZGVzY3JpcHRvciAqKTsKK2ludCBhbWQ2NF9n
ZXRfaW9wZXJtKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IGkzODZfaW9wZXJtX2FyZ3MgKik7Citp
bnQgYW1kNjRfc2V0X2lvcGVybShzdHJ1Y3QgdGhyZWFkICosIHN0cnVjdCBpMzg2X2lvcGVybV9h
cmdzICopOworI2VuZGlmCisKKyNlbmRpZiAvKiAhX01BQ0hJTkVfU1lTQVJDSF9IXyAqLwpkaWZm
IC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni90cmFwLmggL3Vzci9zcmMv
c3lzL21vZHVsZXMvbmV0bWFwL3g4Ni90cmFwLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0
bWFwL3g4Ni90cmFwLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91
c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvdHJhcC5oCTIwMTYtMDktMjkgMDA6MjQ6NTUu
MDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsOTQgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAx
OTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdh
cmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6LgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpdHJhcC5oCTUuNCAoQmVy
a2VsZXkpIDUvOS85MQorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS90
cmFwLmggMjU3NDE3IDIwMTMtMTAtMzEgMDI6MzU6MDBaIG1hcmtqICQKKyAqLworCisjaWZuZGVm
IF9NQUNISU5FX1RSQVBfSF8KKyNkZWZpbmUJX01BQ0hJTkVfVFJBUF9IXworCisvKgorICogVHJh
cCB0eXBlIHZhbHVlcworICogYWxzbyBrbm93biBpbiB0cmFwLmMgZm9yIG5hbWUgc3RyaW5ncwor
ICovCisKKyNkZWZpbmUJVF9QUklWSU5GTFQJMQkvKiBwcml2aWxlZ2VkIGluc3RydWN0aW9uICov
CisjZGVmaW5lCVRfQlBURkxUCTMJLyogYnJlYWtwb2ludCBpbnN0cnVjdGlvbiAqLworI2RlZmlu
ZQlUX0FSSVRIVFJBUAk2CS8qIGFyaXRobWV0aWMgdHJhcCAqLworI2RlZmluZQlUX1BST1RGTFQJ
OQkvKiBwcm90ZWN0aW9uIGZhdWx0ICovCisjZGVmaW5lCVRfVFJDVFJBUAkxMAkvKiBkZWJ1ZyBl
eGNlcHRpb24gKHNpYykgKi8KKyNkZWZpbmUJVF9QQUdFRkxUCTEyCS8qIHBhZ2UgZmF1bHQgKi8K
KyNkZWZpbmUJVF9BTElHTkZMVAkxNAkvKiBhbGlnbm1lbnQgZmF1bHQgKi8KKworI2RlZmluZQlU
X0RJVklERQkxOAkvKiBpbnRlZ2VyIGRpdmlkZSBmYXVsdCAqLworI2RlZmluZQlUX05NSQkJMTkJ
Lyogbm9uLW1hc2thYmxlIHRyYXAgKi8KKyNkZWZpbmUJVF9PRkxPVwkJMjAJLyogb3ZlcmZsb3cg
dHJhcCAqLworI2RlZmluZQlUX0JPVU5ECQkyMQkvKiBib3VuZCBpbnN0cnVjdGlvbiBmYXVsdCAq
LworI2RlZmluZQlUX0ROQQkJMjIJLyogZGV2aWNlIG5vdCBhdmFpbGFibGUgZmF1bHQgKi8KKyNk
ZWZpbmUJVF9ET1VCTEVGTFQJMjMJLyogZG91YmxlIGZhdWx0ICovCisjZGVmaW5lCVRfRlBPUEZM
VAkyNAkvKiBmcCBjb3Byb2Nlc3NvciBvcGVyYW5kIGZldGNoIGZhdWx0ICovCisjZGVmaW5lCVRf
VFNTRkxUCTI1CS8qIGludmFsaWQgdHNzIGZhdWx0ICovCisjZGVmaW5lCVRfU0VHTlBGTFQJMjYJ
Lyogc2VnbWVudCBub3QgcHJlc2VudCBmYXVsdCAqLworI2RlZmluZQlUX1NUS0ZMVAkyNwkvKiBz
dGFjayBmYXVsdCAqLworI2RlZmluZQlUX01DSEsJCTI4CS8qIG1hY2hpbmUgY2hlY2sgdHJhcCAq
LworI2RlZmluZQlUX1hNTUZMVAkyOQkvKiBTSU1EIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbiAq
LworI2RlZmluZQlUX1JFU0VSVkVECTMwCS8qIHJlc2VydmVkICh1bmtub3duKSAqLworI2RlZmlu
ZQlUX0RUUkFDRV9SRVQJMzIJLyogRFRyYWNlIHBpZCByZXR1cm4gKi8KKworLyogWFhYIG1vc3Qg
b2YgdGhlIGZvbGxvd2luZyBjb2RlcyBhcmVuJ3QgdXNlZCwgYnV0IGNvdWxkIGJlLiAqLworCisv
KiBkZWZpbml0aW9ucyBmb3IgPHN5cy9zaWduYWwuaD4gKi8KKyNkZWZpbmUJICAgIElMTF9SRVNB
RF9GQVVMVAlUX1JFU0FERkxUCisjZGVmaW5lCSAgICBJTExfUFJJVklOX0ZBVUxUCVRfUFJJVklO
RkxUCisjZGVmaW5lCSAgICBJTExfUkVTT1BfRkFVTFQJVF9SRVNPUEZMVAorI2RlZmluZQkgICAg
SUxMX0FMSUdOX0ZBVUxUCVRfQUxJR05GTFQKKyNkZWZpbmUJICAgIElMTF9GUE9QX0ZBVUxUCVRf
RlBPUEZMVAkvKiBjb3Byb2Nlc3NvciBvcGVyYW5kIGZhdWx0ICovCisKKy8qIG9sZCBGcmVlQlNE
IG1hY3JvcywgZGVwcmVjYXRlZCAqLworI2RlZmluZQlGUEVfSU5UT1ZGX1RSQVAJMHgxCS8qIGlu
dGVnZXIgb3ZlcmZsb3cgKi8KKyNkZWZpbmUJRlBFX0lOVERJVl9UUkFQCTB4MgkvKiBpbnRlZ2Vy
IGRpdmlkZSBieSB6ZXJvICovCisjZGVmaW5lCUZQRV9GTFRESVZfVFJBUAkweDMJLyogZmxvYXRp
bmcvZGVjaW1hbCBkaXZpZGUgYnkgemVybyAqLworI2RlZmluZQlGUEVfRkxUT1ZGX1RSQVAJMHg0
CS8qIGZsb2F0aW5nIG92ZXJmbG93ICovCisjZGVmaW5lCUZQRV9GTFRVTkRfVFJBUAkweDUJLyog
ZmxvYXRpbmcgdW5kZXJmbG93ICovCisjZGVmaW5lCUZQRV9GUFVfTlBfVFJBUAkweDYJLyogZmxv
YXRpbmcgcG9pbnQgdW5pdCBub3QgcHJlc2VudCAgKi8KKyNkZWZpbmUJRlBFX1NVQlJOR19UUkFQ
CTB4NwkvKiBzdWJyYW5nZSBvdXQgb2YgYm91bmRzICovCisKKy8qIGNvZGVzIGZvciBTSUdCVVMg
Ki8KKyNkZWZpbmUJICAgIEJVU19QQUdFX0ZBVUxUCVRfUEFHRUZMVAkvKiBwYWdlIGZhdWx0IHBy
b3RlY3Rpb24gYmFzZSAqLworI2RlZmluZQkgICAgQlVTX1NFR05QX0ZBVUxUCVRfU0VHTlBGTFQJ
Lyogc2VnbWVudCBub3QgcHJlc2VudCAqLworI2RlZmluZQkgICAgQlVTX1NUS19GQVVMVAlUX1NU
S0ZMVAkvKiBzdGFjayBzZWdtZW50ICovCisjZGVmaW5lCSAgICBCVVNfU0VHTV9GQVVMVAlUX1JF
U0VSVkVECS8qIHNlZ21lbnQgcHJvdGVjdGlvbiBiYXNlICovCisKKy8qIFRyYXAncyBjb21pbmcg
ZnJvbSB1c2VyIG1vZGUgKi8KKyNkZWZpbmUJVF9VU0VSCTB4MTAwCisKKyNlbmRpZiAvKiAhX01B
Q0hJTkVfVFJBUF9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw
L3g4Ni91Y29udGV4dC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvdWNvbnRleHQu
aAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3Vjb250ZXh0LmgJMTk3MC0wMS0w
MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h
cC94ODYvdWNvbnRleHQuaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCArMDEwMApAQCAt
MCwwICsxLDE3MCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgUGV0ZXIgV2VtbQorICog
Q29weXJpZ2h0IChjKSAxOTk5IE1hcmNlbCBNb29sZW5hYXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIAorICogICAgaW4gdGhpcyBwb3NpdGlvbiBhbmQgdW5jaGFuZ2VkLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJT
RDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL3Vjb250ZXh0LmggMjk1NTYxIDIwMTYtMDIt
MTIgMDc6Mzg6MTlaIGtpYiAkCisgKi8KKworI2lmbmRlZiBfWDg2X1VDT05URVhUX0hfCisjZGVm
aW5lCV9YODZfVUNPTlRFWFRfSF8KKworI2lmZGVmIF9faTM4Nl9fCisvKiBLZWVwIF9NQ18qIHZh
bHVlcyBzaW1pbGFyIHRvIGFtZDY0ICovCisjZGVmaW5lCV9NQ19IQVNTRUdTCTB4MQorI2RlZmlu
ZQlfTUNfSEFTQkFTRVMJMHgyCisjZGVmaW5lCV9NQ19IQVNGUFhTVEFURQkweDQKKyNkZWZpbmUJ
X01DX0ZMQUdfTUFTSwkoX01DX0hBU1NFR1MgfCBfTUNfSEFTQkFTRVMgfCBfTUNfSEFTRlBYU1RB
VEUpCisKK3R5cGVkZWYgc3RydWN0IF9fbWNvbnRleHQgeworCS8qCisJICogVGhlIGRlZmluaXRp
b24gb2YgbWNvbnRleHRfdCBtdXN0IG1hdGNoIHRoZSBsYXlvdXQgb2YKKwkgKiBzdHJ1Y3Qgc2ln
Y29udGV4dCBhZnRlciB0aGUgc2NfbWFzayBtZW1iZXIuICBUaGlzIGlzIHNvCisJICogdGhhdCB3
ZSBjYW4gc3VwcG9ydCBzaWdjb250ZXh0IGFuZCB1Y29udGV4dF90IGF0IHRoZSBzYW1lCisJICog
dGltZS4KKwkgKi8KKwlfX3JlZ2lzdGVyX3QJbWNfb25zdGFjazsJLyogWFhYIC0gc2lnY29udGV4
dCBjb21wYXQuICovCisJX19yZWdpc3Rlcl90CW1jX2dzOwkJLyogbWFjaGluZSBzdGF0ZSAoc3Ry
dWN0IHRyYXBmcmFtZSkgKi8KKwlfX3JlZ2lzdGVyX3QJbWNfZnM7CisJX19yZWdpc3Rlcl90CW1j
X2VzOworCV9fcmVnaXN0ZXJfdAltY19kczsKKwlfX3JlZ2lzdGVyX3QJbWNfZWRpOworCV9fcmVn
aXN0ZXJfdAltY19lc2k7CisJX19yZWdpc3Rlcl90CW1jX2VicDsKKwlfX3JlZ2lzdGVyX3QJbWNf
aXNwOworCV9fcmVnaXN0ZXJfdAltY19lYng7CisJX19yZWdpc3Rlcl90CW1jX2VkeDsKKwlfX3Jl
Z2lzdGVyX3QJbWNfZWN4OworCV9fcmVnaXN0ZXJfdAltY19lYXg7CisJX19yZWdpc3Rlcl90CW1j
X3RyYXBubzsKKwlfX3JlZ2lzdGVyX3QJbWNfZXJyOworCV9fcmVnaXN0ZXJfdAltY19laXA7CisJ
X19yZWdpc3Rlcl90CW1jX2NzOworCV9fcmVnaXN0ZXJfdAltY19lZmxhZ3M7CisJX19yZWdpc3Rl
cl90CW1jX2VzcDsKKwlfX3JlZ2lzdGVyX3QJbWNfc3M7CisKKwlpbnQJbWNfbGVuOwkJCS8qIHNp
emVvZihtY29udGV4dF90KSAqLworI2RlZmluZQlfTUNfRlBGTVRfTk9ERVYJCTB4MTAwMDAJLyog
ZGV2aWNlIG5vdCBwcmVzZW50IG9yIGNvbmZpZ3VyZWQgKi8KKyNkZWZpbmUJX01DX0ZQRk1UXzM4
NwkJMHgxMDAwMQorI2RlZmluZQlfTUNfRlBGTVRfWE1NCQkweDEwMDAyCisJaW50CW1jX2ZwZm9y
bWF0OworI2RlZmluZQlfTUNfRlBPV05FRF9OT05FCTB4MjAwMDAJLyogRlAgc3RhdGUgbm90IHVz
ZWQgKi8KKyNkZWZpbmUJX01DX0ZQT1dORURfRlBVCQkweDIwMDAxCS8qIEZQIHN0YXRlIGNhbWUg
ZnJvbSBGUFUgKi8KKyNkZWZpbmUJX01DX0ZQT1dORURfUENCCQkweDIwMDAyCS8qIEZQIHN0YXRl
IGNhbWUgZnJvbSBQQ0IgKi8KKwlpbnQJbWNfb3duZWRmcDsKKwlfX3JlZ2lzdGVyX3QgbWNfZmxh
Z3M7CisJLyoKKwkgKiBTZWUgPG1hY2hpbmUvbnB4Lmg+IGZvciB0aGUgaW50ZXJuYWxzIG9mIG1j
X2Zwc3RhdGVbXS4KKwkgKi8KKwlpbnQJbWNfZnBzdGF0ZVsxMjhdIF9fYWxpZ25lZCgxNik7CisK
KwlfX3JlZ2lzdGVyX3QgbWNfZnNiYXNlOworCV9fcmVnaXN0ZXJfdCBtY19nc2Jhc2U7CisKKwlf
X3JlZ2lzdGVyX3QgbWNfeGZwdXN0YXRlOworCV9fcmVnaXN0ZXJfdCBtY194ZnB1c3RhdGVfbGVu
OworCisJaW50CW1jX3NwYXJlMls0XTsKK30gbWNvbnRleHRfdDsKKyNlbmRpZiAvKiBfX2kzODZf
XyAqLworCisjaWZkZWYgX19hbWQ2NF9fCisvKgorICogbWNfdHJhcG5vIGJpdHMuIFNoYWxsIGJl
IGluIHN5bmMgd2l0aCBURl9YWFguCisgKi8KKyNkZWZpbmUJX01DX0hBU1NFR1MJMHgxCisjZGVm
aW5lCV9NQ19IQVNCQVNFUwkweDIKKyNkZWZpbmUJX01DX0hBU0ZQWFNUQVRFCTB4NAorI2RlZmlu
ZQlfTUNfRkxBR19NQVNLCShfTUNfSEFTU0VHUyB8IF9NQ19IQVNCQVNFUyB8IF9NQ19IQVNGUFhT
VEFURSkKKwordHlwZWRlZiBzdHJ1Y3QgX19tY29udGV4dCB7CisJLyoKKwkgKiBUaGUgZGVmaW5p
dGlvbiBvZiBtY29udGV4dF90IG11c3QgbWF0Y2ggdGhlIGxheW91dCBvZgorCSAqIHN0cnVjdCBz
aWdjb250ZXh0IGFmdGVyIHRoZSBzY19tYXNrIG1lbWJlci4gIFRoaXMgaXMgc28KKwkgKiB0aGF0
IHdlIGNhbiBzdXBwb3J0IHNpZ2NvbnRleHQgYW5kIHVjb250ZXh0X3QgYXQgdGhlIHNhbWUKKwkg
KiB0aW1lLgorCSAqLworCV9fcmVnaXN0ZXJfdAltY19vbnN0YWNrOwkvKiBYWFggLSBzaWdjb250
ZXh0IGNvbXBhdC4gKi8KKwlfX3JlZ2lzdGVyX3QJbWNfcmRpOwkJLyogbWFjaGluZSBzdGF0ZSAo
c3RydWN0IHRyYXBmcmFtZSkgKi8KKwlfX3JlZ2lzdGVyX3QJbWNfcnNpOworCV9fcmVnaXN0ZXJf
dAltY19yZHg7CisJX19yZWdpc3Rlcl90CW1jX3JjeDsKKwlfX3JlZ2lzdGVyX3QJbWNfcjg7CisJ
X19yZWdpc3Rlcl90CW1jX3I5OworCV9fcmVnaXN0ZXJfdAltY19yYXg7CisJX19yZWdpc3Rlcl90
CW1jX3JieDsKKwlfX3JlZ2lzdGVyX3QJbWNfcmJwOworCV9fcmVnaXN0ZXJfdAltY19yMTA7CisJ
X19yZWdpc3Rlcl90CW1jX3IxMTsKKwlfX3JlZ2lzdGVyX3QJbWNfcjEyOworCV9fcmVnaXN0ZXJf
dAltY19yMTM7CisJX19yZWdpc3Rlcl90CW1jX3IxNDsKKwlfX3JlZ2lzdGVyX3QJbWNfcjE1Owor
CV9fdWludDMyX3QJbWNfdHJhcG5vOworCV9fdWludDE2X3QJbWNfZnM7CisJX191aW50MTZfdAlt
Y19nczsKKwlfX3JlZ2lzdGVyX3QJbWNfYWRkcjsKKwlfX3VpbnQzMl90CW1jX2ZsYWdzOworCV9f
dWludDE2X3QJbWNfZXM7CisJX191aW50MTZfdAltY19kczsKKwlfX3JlZ2lzdGVyX3QJbWNfZXJy
OworCV9fcmVnaXN0ZXJfdAltY19yaXA7CisJX19yZWdpc3Rlcl90CW1jX2NzOworCV9fcmVnaXN0
ZXJfdAltY19yZmxhZ3M7CisJX19yZWdpc3Rlcl90CW1jX3JzcDsKKwlfX3JlZ2lzdGVyX3QJbWNf
c3M7CisKKwlsb25nCW1jX2xlbjsJCQkvKiBzaXplb2YobWNvbnRleHRfdCkgKi8KKworI2RlZmlu
ZQlfTUNfRlBGTVRfTk9ERVYJCTB4MTAwMDAJLyogZGV2aWNlIG5vdCBwcmVzZW50IG9yIGNvbmZp
Z3VyZWQgKi8KKyNkZWZpbmUJX01DX0ZQRk1UX1hNTQkJMHgxMDAwMgorCWxvbmcJbWNfZnBmb3Jt
YXQ7CisjZGVmaW5lCV9NQ19GUE9XTkVEX05PTkUJMHgyMDAwMAkvKiBGUCBzdGF0ZSBub3QgdXNl
ZCAqLworI2RlZmluZQlfTUNfRlBPV05FRF9GUFUJCTB4MjAwMDEJLyogRlAgc3RhdGUgY2FtZSBm
cm9tIEZQVSAqLworI2RlZmluZQlfTUNfRlBPV05FRF9QQ0IJCTB4MjAwMDIJLyogRlAgc3RhdGUg
Y2FtZSBmcm9tIFBDQiAqLworCWxvbmcJbWNfb3duZWRmcDsKKwkvKgorCSAqIFNlZSA8bWFjaGlu
ZS9mcHUuaD4gZm9yIHRoZSBpbnRlcm5hbHMgb2YgbWNfZnBzdGF0ZVtdLgorCSAqLworCWxvbmcJ
bWNfZnBzdGF0ZVs2NF0gX19hbGlnbmVkKDE2KTsKKworCV9fcmVnaXN0ZXJfdAltY19mc2Jhc2U7
CisJX19yZWdpc3Rlcl90CW1jX2dzYmFzZTsKKworCV9fcmVnaXN0ZXJfdAltY194ZnB1c3RhdGU7
CisJX19yZWdpc3Rlcl90CW1jX3hmcHVzdGF0ZV9sZW47CisKKwlsb25nCW1jX3NwYXJlWzRdOwor
fSBtY29udGV4dF90OworI2VuZGlmIC8qIF9fYW1kNjRfXyAqLworCisjaWZkZWYgX19MSU5UX18K
K3R5cGVkZWYgc3RydWN0IF9fbWNvbnRleHQgeworfSBtY29udGV4dF90OworI2VuZGlmIC8qIF9f
TElOVF9fICovCisKKyNlbmRpZiAvKiAhX1g4Nl9VQ09OVEVYVF9IXyAqLwpkaWZmIC11IC1yIC1O
IHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni92ZHNvLmggL3Vzci9zcmMvc3lzL21vZHVs
ZXMvbmV0bWFwL3g4Ni92ZHNvLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni92
ZHNvLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5
cy9tb2R1bGVzL25ldG1hcC94ODYvdmRzby5oCTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAwMDAw
ICswMTAwCkBAIC0wLDAgKzEsNDIgQEAKKy8qLQorICogQ29weXJpZ2h0IDIwMTIgS29uc3RhbnRp
biBCZWxvdXNvdiA8a2liQEZyZWVCU0QuT1JHPi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBg
QVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1
ZGUvdmRzby5oIDIzNzQzMyAyMDEyLTA2LTIyIDA3OjA2OjQwWiBraWIgJAorICovCisKKyNpZm5k
ZWYgX1g4Nl9WRFNPX0gKKyNkZWZpbmUJX1g4Nl9WRFNPX0gKKworI2RlZmluZQlWRFNPX1RJTUVI
QU5EU19NRAkJCVwKKwl1aW50MzJfdAl0aF94ODZfc2hpZnQ7CQlcCisJdWludDMyX3QJdGhfcmVz
WzddOworCisjaWZkZWYgX0tFUk5FTAorI2lmZGVmIENPTVBBVF9GUkVFQlNEMzIKKworI2RlZmlu
ZQlWRFNPX1RJTUVIQU5EU19NRDMyCVZEU09fVElNRUhBTkRTX01ECisKKyNlbmRpZgorI2VuZGlm
CisjZW5kaWYKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvdm13
YXJlLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni92bXdhcmUuaAotLS0gdXNyL3Ny
Yy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3Ztd2FyZS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAw
MDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3Ztd2FyZS5o
CTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNTIgQEAKKy8q
LQorICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgSnVuZy11ayBLaW0gPGpraW1ARnJlZUJTRC5v
cmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9z
eXMveDg2L2luY2x1ZGUvdm13YXJlLmggMjc4NzQ5IDIwMTUtMDItMTQgMDk6MDA6MTJaIGtpYiAk
CisgKi8KKworI2lmbmRlZiBfWDg2X1ZNV0FSRV9IXworI2RlZmluZQlfWDg2X1ZNV0FSRV9IXwor
CisjZGVmaW5lCVZNV19IVk1BR0lDCQkweDU2NGQ1ODY4CisjZGVmaW5lCVZNV19IVlBPUlQJCTB4
NTY1OAorCisjZGVmaW5lCVZNV19IVkNNRF9HRVRWRVJTSU9OCTEwCisjZGVmaW5lCVZNV19IVkNN
RF9HRVRIWgkJNDUKKyNkZWZpbmUJVk1XX0hWQ01EX0dFVFZDUFVfSU5GTwk2OAorCisjZGVmaW5l
CVZNV19WQ1BVSU5GT19MRUdBQ1lfWDJBUElDCSgxIDw8IDMpCisjZGVmaW5lCVZNV19WQ1BVSU5G
T19WQ1BVX1JFU0VSVkVECSgxIDw8IDMxKQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAordm13YXJl
X2h2Y2FsbCh1X2ludCBjbWQsIHVfaW50ICpwKQoreworCisJX19hc20gX192b2xhdGlsZSgiaW5s
ICV3MywgJTAiCisJOiAiPWEiIChwWzBdKSwgIj1iIiAocFsxXSksICI9YyIgKHBbMl0pLCAiPWQi
IChwWzNdKQorCTogIjAiIChWTVdfSFZNQUdJQyksICIxIiAoVUlOVF9NQVgpLCAiMiIgKGNtZCks
ICIzIiAoVk1XX0hWUE9SVCkKKwk6ICJtZW1vcnkiKTsKK30KKworI2VuZGlmIC8qICFfWDg2X1ZN
V0FSRV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni94
ODZfc21wLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni94ODZfc21wLmgKLS0tIHVz
ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni94ODZfc21wLmgJMTk3MC0wMS0wMSAwMTowMDow
MC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYveDg2
X3NtcC5oCTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTAz
IEBACisvKi0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICJUSEUgQkVFUi1XQVJFIExJQ0VO
U0UiIChSZXZpc2lvbiA0Mik6CisgKiA8cGhrQEZyZWVCU0Qub3JnPiB3cm90ZSB0aGlzIGZpbGUu
ICBBcyBsb25nIGFzIHlvdSByZXRhaW4gdGhpcyBub3RpY2UgeW91CisgKiBjYW4gZG8gd2hhdGV2
ZXIgeW91IHdhbnQgd2l0aCB0aGlzIHN0dWZmLiBJZiB3ZSBtZWV0IHNvbWUgZGF5LCBhbmQgeW91
IHRoaW5rCisgKiB0aGlzIHN0dWZmIGlzIHdvcnRoIGl0LCB5b3UgY2FuIGJ1eSBtZSBhIGJlZXIg
aW4gcmV0dXJuLiAgIFBvdWwtSGVubmluZyBLYW1wCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
KgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS94ODZfc21wLmggMjkx
OTQ5IDIwMTUtMTItMDcgMTc6NDE6MjBaIGtpYiAkCisgKgorICovCisKKyNpZm5kZWYgX1g4Nl9Y
ODZfU01QX0hfCisjZGVmaW5lCV9YODZfWDg2X1NNUF9IXworCisjaW5jbHVkZSA8c3lzL2J1cy5o
PgorI2luY2x1ZGUgPG1hY2hpbmUvZnJhbWUuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2ludHJfbWFj
aGRlcC5oPgorI2luY2x1ZGUgPHg4Ni9hcGljdmFyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9wY2Iu
aD4KKworc3RydWN0IHBtYXA7CisKKy8qIGdsb2JhbCBkYXRhIGluIG1wX3g4Ni5jICovCitleHRl
cm4gaW50IG1wX25hcHM7CitleHRlcm4gaW50IGJvb3RfY3B1X2lkOworZXh0ZXJuIHN0cnVjdCBw
Y2Igc3RvcHBjYnNbXTsKK2V4dGVybiBpbnQgY3B1X2FwaWNfaWRzW107CitleHRlcm4gaW50IGJv
b3RBUDsKK2V4dGVybiB2b2lkICpkcGNwdTsKK2V4dGVybiBjaGFyICpib290U1RLOworZXh0ZXJu
IHZvaWQgKmJvb3RzdGFja3NbXTsKK2V4dGVybiB2b2xhdGlsZSB1X2ludCBjcHVfaXBpX3BlbmRp
bmdbXTsKK2V4dGVybiB2b2xhdGlsZSBpbnQgYXBzX3JlYWR5OworZXh0ZXJuIHN0cnVjdCBtdHgg
YXBfYm9vdF9tdHg7CitleHRlcm4gaW50IGNwdV9sb2dpY2FsOworZXh0ZXJuIGludCBjcHVfY29y
ZXM7CitleHRlcm4gdm9sYXRpbGUgaW50IHNtcF90bGJfd2FpdDsKK2V4dGVybiBzdHJ1Y3QgcG1h
cCAqc21wX3RsYl9wbWFwOworZXh0ZXJuIHVfaW50IHhoaXRzX2dibFtdOworZXh0ZXJuIHVfaW50
IHhoaXRzX3BnW107CitleHRlcm4gdV9pbnQgeGhpdHNfcm5nW107CitleHRlcm4gdV9pbnQgaXBp
X2dsb2JhbDsKK2V4dGVybiB1X2ludCBpcGlfcGFnZTsKK2V4dGVybiB1X2ludCBpcGlfcmFuZ2U7
CitleHRlcm4gdV9pbnQgaXBpX3JhbmdlX3NpemU7CisKK3N0cnVjdCBjcHVfaW5mbyB7CisJaW50
CWNwdV9wcmVzZW50OjE7CisJaW50CWNwdV9ic3A6MTsKKwlpbnQJY3B1X2Rpc2FibGVkOjE7CisJ
aW50CWNwdV9oeXBlcnRocmVhZDoxOworfTsKK2V4dGVybiBzdHJ1Y3QgY3B1X2luZm8gY3B1X2lu
Zm9bXTsKKworI2lmZGVmIENPVU5UX0lQSVMKK2V4dGVybiB1X2xvbmcgKmlwaV9pbnZsdGxiX2Nv
dW50c1tNQVhDUFVdOworZXh0ZXJuIHVfbG9uZyAqaXBpX2ludmxybmdfY291bnRzW01BWENQVV07
CitleHRlcm4gdV9sb25nICppcGlfaW52bHBnX2NvdW50c1tNQVhDUFVdOworZXh0ZXJuIHVfbG9u
ZyAqaXBpX2ludmxjYWNoZV9jb3VudHNbTUFYQ1BVXTsKK2V4dGVybiB1X2xvbmcgKmlwaV9yZW5k
ZXp2b3VzX2NvdW50c1tNQVhDUFVdOworI2VuZGlmCisKKy8qIElQSSBoYW5kbGVycyAqLworaW50
aGFuZF90CisJSURUVkVDKGludmx0bGIpLAkvKiBUTEIgc2hvb3Rkb3ducyAtIGdsb2JhbCAqLwor
CUlEVFZFQyhpbnZscGcpLAkJLyogVExCIHNob290ZG93bnMgLSAxIHBhZ2UgKi8KKwlJRFRWRUMo
aW52bHJuZyksCS8qIFRMQiBzaG9vdGRvd25zIC0gcGFnZSByYW5nZSAqLworCUlEVFZFQyhpbnZs
Y2FjaGUpLAkvKiBXcml0ZSBiYWNrIGFuZCBpbnZhbGlkYXRlIGNhY2hlICovCisJSURUVkVDKGlw
aV9pbnRyX2JpdG1hcF9oYW5kbGVyKSwgLyogQml0bWFwIGJhc2VkIElQSXMgKi8gCisJSURUVkVD
KGNwdXN0b3ApLAkvKiBDUFUgc3RvcHMgJiB3YWl0cyB0byBiZSByZXN0YXJ0ZWQgKi8KKwlJRFRW
RUMoY3B1c3VzcGVuZCksCS8qIENQVSBzdXNwZW5kcyAmIHdhaXRzIHRvIGJlIHJlc3VtZWQgKi8K
KwlJRFRWRUMocmVuZGV6dm91cyk7CS8qIGhhbmRsZSBDUFUgcmVuZGV6dm91cyAqLworCisvKiBm
dW5jdGlvbnMgaW4geDg2X21wLmMgKi8KK3ZvaWQJYXNzaWduX2NwdV9pZHModm9pZCk7Cit2b2lk
CWNwdV9hZGQodV9pbnQgYXBpY19pZCwgY2hhciBib290X2NwdSk7Cit2b2lkCWNwdXN0b3BfaGFu
ZGxlcih2b2lkKTsKK3ZvaWQJY3B1c3VzcGVuZF9oYW5kbGVyKHZvaWQpOwordm9pZAlpbml0X3Nl
Y29uZGFyeV90YWlsKHZvaWQpOwordm9pZAlpbnZsdGxiX2hhbmRsZXIodm9pZCk7Cit2b2lkCWlu
dmxwZ19oYW5kbGVyKHZvaWQpOwordm9pZAlpbnZscm5nX2hhbmRsZXIodm9pZCk7Cit2b2lkCWlu
dmxjYWNoZV9oYW5kbGVyKHZvaWQpOwordm9pZAlpbml0X3NlY29uZGFyeSh2b2lkKTsKK3ZvaWQJ
aXBpX3N0YXJ0dXAoaW50IGFwaWNfaWQsIGludCB2ZWN0b3IpOwordm9pZAlpcGlfYWxsX2J1dF9z
ZWxmKHVfaW50IGlwaSk7Cit2b2lkIAlpcGlfYml0bWFwX2hhbmRsZXIoc3RydWN0IHRyYXBmcmFt
ZSBmcmFtZSk7Cit2b2lkCWlwaV9jcHUoaW50IGNwdSwgdV9pbnQgaXBpKTsKK2ludAlpcGlfbm1p
X2hhbmRsZXIodm9pZCk7Cit2b2lkCWlwaV9zZWxlY3RlZChjcHVzZXRfdCBjcHVzLCB1X2ludCBp
cGkpOwordV9pbnQJbXBfYm9vdGFkZHJlc3ModV9pbnQpOwordm9pZAlzZXRfaW50ZXJydXB0X2Fw
aWNfaWRzKHZvaWQpOwordm9pZAlzbXBfY2FjaGVfZmx1c2godm9pZCk7Cit2b2lkCXNtcF9tYXNr
ZWRfaW52bHBnKGNwdXNldF90IG1hc2ssIHZtX29mZnNldF90IGFkZHIpOwordm9pZAlzbXBfbWFz
a2VkX2ludmxwZ19yYW5nZShjcHVzZXRfdCBtYXNrLCB2bV9vZmZzZXRfdCBzdGFydHZhLAorCSAg
ICB2bV9vZmZzZXRfdCBlbmR2YSk7Cit2b2lkCXNtcF9tYXNrZWRfaW52bHRsYihjcHVzZXRfdCBt
YXNrLCBzdHJ1Y3QgcG1hcCAqcG1hcCk7Cit2b2lkCW1lbV9yYW5nZV9BUF9pbml0KHZvaWQpOwor
dm9pZAl0b3BvX3Byb2JlKHZvaWQpOwordm9pZAlpcGlfc2VuZF9jcHUoaW50IGNwdSwgdV9pbnQg
aXBpKTsKKworI2VuZGlmCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv
eDg2L3g4Nl92YXIuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3g4Nl92YXIuaAot
LS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3g4Nl92YXIuaAkxOTcwLTAxLTAxIDAx
OjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4
Ni94ODZfdmFyLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCAr
MSwxMTcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTk1IEJydWNlIEQuIEV2YW5zLgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
dGhlIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3
YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJT
RDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL3g4Nl92YXIuaCAyOTc4NTcgMjAxNi0wNC0x
MiAxMzozMDozOVogYXZnICQKKyAqLworCisjaWZuZGVmIF9YODZfWDg2X1ZBUl9IXworI2RlZmlu
ZQlfWDg2X1g4Nl9WQVJfSF8KKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgbWFjaGluZS1kZXBlbmRl
bnQgZGVjbGFyYXRpb25zLgorICovCisKK2V4dGVybglsb25nCU1heG1lbTsKK2V4dGVybgl1X2lu
dAliYXNlbWVtOworZXh0ZXJuCWludAlidXNkbWFfc3dpX3BlbmRpbmc7CitleHRlcm4JdV9pbnQJ
Y3B1X2V4dGhpZ2g7CitleHRlcm4JdV9pbnQJY3B1X2ZlYXR1cmU7CitleHRlcm4JdV9pbnQJY3B1
X2ZlYXR1cmUyOworZXh0ZXJuCXVfaW50CWFtZF9mZWF0dXJlOworZXh0ZXJuCXVfaW50CWFtZF9m
ZWF0dXJlMjsKK2V4dGVybgl1X2ludAlhbWRfcG1pbmZvOworZXh0ZXJuCXVfaW50CXZpYV9mZWF0
dXJlX3JuZzsKK2V4dGVybgl1X2ludAl2aWFfZmVhdHVyZV94Y3J5cHQ7CitleHRlcm4JdV9pbnQJ
Y3B1X2NsZmx1c2hfbGluZV9zaXplOworZXh0ZXJuCXVfaW50CWNwdV9zdGRleHRfZmVhdHVyZTsK
K2V4dGVybgl1X2ludAljcHVfc3RkZXh0X2ZlYXR1cmUyOworZXh0ZXJuCXVfaW50CWNwdV9meHNy
OworZXh0ZXJuCXVfaW50CWNwdV9oaWdoOworZXh0ZXJuCXVfaW50CWNwdV9pZDsKK2V4dGVybgl1
X2ludAljcHVfbWF4X2V4dF9zdGF0ZV9zaXplOworZXh0ZXJuCXVfaW50CWNwdV9teGNzcl9tYXNr
OworZXh0ZXJuCXVfaW50CWNwdV9wcm9jaW5mbzsKK2V4dGVybgl1X2ludAljcHVfcHJvY2luZm8y
OworZXh0ZXJuCWNoYXIJY3B1X3ZlbmRvcltdOworZXh0ZXJuCXVfaW50CWNwdV92ZW5kb3JfaWQ7
CitleHRlcm4JdV9pbnQJY3B1X21vbl9td2FpdF9mbGFnczsKK2V4dGVybgl1X2ludAljcHVfbW9u
X21pbl9zaXplOworZXh0ZXJuCXVfaW50CWNwdV9tb25fbWF4X3NpemU7CitleHRlcm4JdV9pbnQJ
Y3B1X21heHBoeWFkZHI7CitleHRlcm4JY2hhcgljdHhfc3dpdGNoX3hzYXZlW107CitleHRlcm4J
dV9pbnQJaHZfaGlnaDsKK2V4dGVybgljaGFyCWh2X3ZlbmRvcltdOworZXh0ZXJuCWNoYXIJa3N0
YWNrW107CitleHRlcm4JY2hhcglzaWdjb2RlW107CitleHRlcm4JaW50CXN6c2lnY29kZTsKK2V4
dGVybglpbnQJdm1fcGFnZV9kdW1wX3NpemU7CitleHRlcm4JaW50CXdvcmthcm91bmRfZXJyYXR1
bTM4MzsKK2V4dGVybglpbnQJX3VkYXRhc2VsOworZXh0ZXJuCWludAlfdWNvZGVzZWw7CitleHRl
cm4JaW50CV91Y29kZTMyc2VsOworZXh0ZXJuCWludAlfdWZzc2VsOworZXh0ZXJuCWludAlfdWdz
c2VsOworZXh0ZXJuCWludAl1c2VfeHNhdmU7CitleHRlcm4JdWludDY0X3QgeHNhdmVfbWFzazsK
Kworc3RydWN0CXBjYjsKK3N0cnVjdAl0aHJlYWQ7CitzdHJ1Y3QJcmVnOworc3RydWN0CWZwcmVn
Oworc3RydWN0ICBkYnJlZzsKK3N0cnVjdAlkdW1wZXJpbmZvOworCisvKgorICogVGhlIGludGVy
ZmFjZSB0eXBlIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBlbnRyeSBwb2ludCBjYW5ub3QgYmUK
KyAqIGV4cHJlc3NlZCBpbiBDLiAgVXNlIHNpbXBsZXN0IG5vbi12YXJpYWRpYyBmdW5jdGlvbiB0
eXBlIGFzIGFuCisgKiBhcHByb3hpbWF0aW9uLgorICovCit0eXBlZGVmIHZvaWQgYWxpYXNfZm9y
X2ludGhhbmRfdCh2b2lkKTsKKwordm9pZAkqYWxsb2NfZnB1c2F2ZShpbnQgZmxhZ3MpOwordm9p
ZAlidXNkbWFfc3dpKHZvaWQpOworYm9vbAljcHVfbXdhaXRfdXNhYmxlKHZvaWQpOwordm9pZAlj
cHVfcHJvYmVfYW1kYzFlKHZvaWQpOwordm9pZAljcHVfc2V0cmVncyh2b2lkKTsKK3ZvaWQJZHVt
cF9hZGRfcGFnZSh2bV9wYWRkcl90KTsKK3ZvaWQJZHVtcF9kcm9wX3BhZ2Uodm1fcGFkZHJfdCk7
Cit2b2lkCWlkZW50aWZ5X2NwdSh2b2lkKTsKK3ZvaWQJaW5pdGlhbGl6ZWNwdSh2b2lkKTsKK3Zv
aWQJaW5pdGlhbGl6ZWNwdWNhY2hlKHZvaWQpOworYm9vbAlmaXhfY3B1aWQodm9pZCk7Cit2b2lk
CWZpbGx3KGludCAvKnVfc2hvcnQqLyBwYXQsIHZvaWQgKmJhc2UsIHNpemVfdCBjbnQpOworaW50
CWlzX3BoeXNpY2FsX21lbW9yeSh2bV9wYWRkcl90IGFkZHIpOworaW50CWlzYV9ubWkoaW50IGNk
KTsKK3ZvaWQJcGFuaWNpZmNwdXVuc3VwcG9ydGVkKHZvaWQpOwordm9pZAlwYWdlY29weSh2b2lk
ICpmcm9tLCB2b2lkICp0byk7Cit2b2lkCXByaW50Y3B1aW5mbyh2b2lkKTsKK2ludAl1c2VyX2Ri
cmVnX3RyYXAodm9pZCk7CitpbnQJbWluaWR1bXBzeXMoc3RydWN0IGR1bXBlcmluZm8gKik7Citz
dHJ1Y3QgcGNiICpnZXRfcGNiX3RkKHN0cnVjdCB0aHJlYWQgKnRkKTsKKworI2VuZGlmCmRpZmYg
LXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3hlbi94ZW4tb3MuaCAvdXNy
L3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3hlbi94ZW4tb3MuaAotLS0gdXNyL3NyYy9zeXMv
bW9kdWxlcy9uZXRtYXAveDg2L3hlbi94ZW4tb3MuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw
MDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni94ZW4veGVuLW9z
LmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwzOCBAQAor
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCisgKiB4ODYveGVuL3hlbi1vcy5oCisgKgorICogUmFuZG9t
IGNvbGxlY3Rpb24gb2YgbWFjcm9zIGFuZCBkZWZpbml0aW9uCisgKgorICogQ29weXJpZ2h0IChj
KSAyMDAzLCAyMDA0IEtlaXIgRnJhc2VyIChvbiBiZWhhbGYgb2YgdGhlIFhlbiB0ZWFtKQorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk
LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0
aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m
dHdhcmUiKSwgdG8KKyAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s
IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCisgKiByaWdodHMgdG8gdXNlLCBjb3B5
LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IK
KyAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv
IHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90
aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBh
bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisg
KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB
TlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF
RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg
Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ
T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQg
T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS
CisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8x
MS4wL3N5cy94ODYvaW5jbHVkZS94ZW4veGVuLW9zLmggMjg5Njg2IDIwMTUtMTAtMjEgMTA6NDQ6
MDdaIHJveWdlciAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9YODZfWEVOX1hFTl9PU19IXwor
I2RlZmluZSBfTUFDSElORV9YODZfWEVOX1hFTl9PU19IXworCisvKiBFdmVyeXRoaW5nIGJlbG93
IHRoaXMgcG9pbnQgaXMgbm90IGluY2x1ZGVkIGJ5IGFzc2VtYmxlciAoLlMpIGZpbGVzLiAqLwor
I2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2Vu
ZGlmIC8qIF9NQUNISU5FX1g4Nl9YRU5fWEVOX09TX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3Ny
Yy9zeXMvbW9kdWxlcy92bW0vTWFrZWZpbGUgL3Vzci9zcmMvc3lzL21vZHVsZXMvdm1tL01ha2Vm
aWxlCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL3ZtbS9NYWtlZmlsZQkyMDE2LTA5LTI5IDAwOjI0
OjUyLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvdm1tL01ha2VmaWxl
CTIwMTYtMTEtMzAgMTA6NTY6MDUuODA1NzYwMDAwICswMDAwCkBAIC0yMSw2ICsyMSw3IEBACiAJ
dm1tX2lvcG9ydC5jCVwKIAl2bW1fbGFwaWMuYwlcCiAJdm1tX21lbS5jCVwKKwl2bW1fdXNlcm1l
bS5jCVwKIAl2bW1fc3RhdC5jCVwKIAl2bW1fdXRpbC5jCVwKIAl4ODYuYwpkaWZmIC11IC1yIC1O
IHVzci9zcmMvc3lzL21vZHVsZXMvdm1tL01ha2VmaWxlLm9yaWcgL3Vzci9zcmMvc3lzL21vZHVs
ZXMvdm1tL01ha2VmaWxlLm9yaWcKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvdm1tL01ha2VmaWxl
Lm9yaWcJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5
cy9tb2R1bGVzL3ZtbS9NYWtlZmlsZS5vcmlnCTIwMTYtMTEtMzAgMTA6NTI6NTkuNjcwMjA4MDAw
ICswMDAwCkBAIC0wLDAgKzEsNzkgQEAKKyMgJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9tb2R1
bGVzL3ZtbS9NYWtlZmlsZSAyNzk5NzEgMjAxNS0wMy0xNCAwMjozMjowOFogbmVlbCAkCisKK0tN
T0Q9CXZtbQorCitTUkNTPQlvcHRfYWNwaS5oIG9wdF9kZGIuaCBkZXZpY2VfaWYuaCBidXNfaWYu
aCBwY2lfaWYuaAorU1JDUys9CXZteF9hc3N5bS5oIHN2bV9hc3N5bS5oCitEUFNSQ1M9CXZteF9n
ZW5hc3N5bS5jIHN2bV9nZW5hc3N5bS5jCisKK0NGTEFHUys9IC1EVk1NX0tFRVBfU1RBVFMgLURT
TVAKK0NGTEFHUys9IC1JJHsuQ1VSRElSfS8uLi8uLi9hbWQ2NC92bW0KK0NGTEFHUys9IC1JJHsu
Q1VSRElSfS8uLi8uLi9hbWQ2NC92bW0vaW8KK0NGTEFHUys9IC1JJHsuQ1VSRElSfS8uLi8uLi9h
bWQ2NC92bW0vaW50ZWwKK0NGTEFHUys9IC1JJHsuQ1VSRElSfS8uLi8uLi9hbWQ2NC92bW0vYW1k
CisKKyMgZ2VuZXJpYyB2bW0gc3VwcG9ydAorLlBBVEg6ICR7LkNVUkRJUn0vLi4vLi4vYW1kNjQv
dm1tCitTUkNTKz0Jdm1tLmMJCVwKKwl2bW1fZGV2LmMJXAorCXZtbV9ob3N0LmMJXAorCXZtbV9p
bnN0cnVjdGlvbl9lbXVsLmMJXAorCXZtbV9pb3BvcnQuYwlcCisJdm1tX2xhcGljLmMJXAorCXZt
bV9tZW0uYwlcCisJdm1tX3N0YXQuYwlcCisJdm1tX3V0aWwuYwlcCisJeDg2LmMKKworLlBBVEg6
ICR7LkNVUkRJUn0vLi4vLi4vYW1kNjQvdm1tL2lvCitTUkNTKz0JaW9tbXUuYwkJXAorCXBwdC5j
ICAgICAgICAgICBcCisJdmF0cGljLmMJXAorCXZhdHBpdC5jCVwKKwl2aHBldC5jCQlcCisJdmlv
YXBpYy5jCVwKKwl2bGFwaWMuYwlcCisJdnBtdG1yLmMJXAorCXZydGMuYworCisjIGludGVsLXNw
ZWNpZmljIGZpbGVzCisuUEFUSDogJHsuQ1VSRElSfS8uLi8uLi9hbWQ2NC92bW0vaW50ZWwKK1NS
Q1MrPQllcHQuYwkJXAorCXZtY3MuYwkJXAorCXZteF9tc3IuYwlcCisJdm14X3N1cHBvcnQuUwlc
CisJdm14LmMJCVwKKwl2dGQuYworCisjIGFtZC1zcGVjaWZpYyBmaWxlcworLlBBVEg6ICR7LkNV
UkRJUn0vLi4vLi4vYW1kNjQvdm1tL2FtZAorU1JDUys9CXZtY2IuYwkJXAorCXN2bS5jCQlcCisJ
c3ZtX3N1cHBvcnQuUwlcCisJbnB0LmMJCVwKKwlhbWR2LmMJCVwKKwlzdm1fbXNyLmMKKworQ0xF
QU5GSUxFUz0Jdm14X2Fzc3ltLmggdm14X2dlbmFzc3ltLm8gc3ZtX2Fzc3ltLmggc3ZtX2dlbmFz
c3ltLm8KKwordm14X2Fzc3ltLmg6ICAgIHZteF9nZW5hc3N5bS5vCisJc2ggJHtTWVNESVJ9L2tl
cm4vZ2VuYXNzeW0uc2ggdm14X2dlbmFzc3ltLm8gPiAkey5UQVJHRVR9CisKK3N2bV9hc3N5bS5o
OiAgICBzdm1fZ2VuYXNzeW0ubworCXNoICR7U1lTRElSfS9rZXJuL2dlbmFzc3ltLnNoIHN2bV9n
ZW5hc3N5bS5vID4gJHsuVEFSR0VUfQorCit2bXhfc3VwcG9ydC5vOgorCSR7Q0N9IC1jIC14IGFz
c2VtYmxlci13aXRoLWNwcCAtRExPQ09SRSAke0NGTEFHU30gXAorCSAgICAkey5JTVBTUkN9IC1v
ICR7LlRBUkdFVH0KKworc3ZtX3N1cHBvcnQubzoKKwkke0NDfSAtYyAteCBhc3NlbWJsZXItd2l0
aC1jcHAgLURMT0NPUkUgJHtDRkxBR1N9IFwKKwkgICAgJHsuSU1QU1JDfSAtbyAkey5UQVJHRVR9
CisKK3ZteF9nZW5hc3N5bS5vOgorCSR7Q0N9IC1jICR7Q0ZMQUdTOk4tZm5vLWNvbW1vbn0gJHsu
SU1QU1JDfQorCitzdm1fZ2VuYXNzeW0ubzoKKwkke0NDfSAtYyAke0NGTEFHUzpOLWZuby1jb21t
b259ICR7LklNUFNSQ30KKworLmluY2x1ZGUgPGJzZC5rbW9kLm1rPgpkaWZmIC11IC1yIC1OIHVz
ci9zcmMvc3lzL25ldC9uZXRtYXAuaCAvdXNyL3NyYy9zeXMvbmV0L25ldG1hcC5oCi0tLSB1c3Iv
c3JjL3N5cy9uZXQvbmV0bWFwLmgJMjAxNi0wOS0yOSAwMDoyNDo0MS4wMDAwMDAwMDAgKzAxMDAK
KysrIC91c3Ivc3JjL3N5cy9uZXQvbmV0bWFwLmgJMjAxNi0xMS0yMyAxNjo1Nzo1Ny44NTc3ODgw
MDAgKzAwMDAKQEAgLTI1LDcgKzI1LDcgQEAKICAqLwogCiAvKgotICogJEZyZWVCU0Q6IHJlbGVu
Zy8xMS4wL3N5cy9uZXQvbmV0bWFwLmggMjg1MzQ5IDIwMTUtMDctMTAgMDU6NTE6MzZaIGx1aWdp
ICQKKyAqICRGcmVlQlNEOiBoZWFkL3N5cy9uZXQvbmV0bWFwLmggMjUxMTM5IDIwMTMtMDUtMzAg
MTQ6MDc6MTRaIGx1aWdpICQKICAqCiAgKiBEZWZpbml0aW9ucyBvZiBjb25zdGFudHMgYW5kIHRo
ZSBzdHJ1Y3R1cmVzIHVzZWQgYnkgdGhlIG5ldG1hcAogICogZnJhbWV3b3JrLCBmb3IgdGhlIHBh
cnQgdmlzaWJsZSB0byBib3RoIGtlcm5lbCBhbmQgdXNlcnNwYWNlLgpAQCAtMTM3LDYgKzEzNywy
NiBAQAogICoJbmV0bWFwOmZvby1rCQkJdGhlIGstdGggTklDIHJpbmcgcGFpcgogICoJbmV0bWFw
OmZvb3trCQkJUElQRSByaW5nIHBhaXIgaywgbWFzdGVyIHNpZGUKICAqCW5ldG1hcDpmb299awkJ
CVBJUEUgcmluZyBwYWlyIGssIHNsYXZlIHNpZGUKKyAqCisgKiBTb21lIG5vdGVzIGFib3V0IGhv
c3QgcmluZ3M6CisgKgorICogKyBUaGUgUlggaG9zdCByaW5nIGlzIHVzZWQgdG8gc3RvcmUgdGhv
c2UgcGFja2V0cyB0aGF0IHRoZSBob3N0IG5ldHdvcmsKKyAqICAgc3RhY2sgaXMgdHJ5aW5nIHRv
IHRyYW5zbWl0IHRocm91Z2ggYSBOSUMgcXVldWUsIGJ1dCBvbmx5IGlmIHRoYXQgcXVldWUKKyAq
ICAgaXMgY3VycmVudGx5IGluIG5ldG1hcCBtb2RlLiBOZXRtYXAgd2lsbCBub3QgaW50ZXJjZXB0
IGhvc3Qgc3RhY2sgbWJ1ZnMKKyAqICAgZGVzaWduYXRlZCB0byBOSUMgcXVldWVzIHRoYXQgYXJl
IG5vdCBpbiBuZXRtYXAgbW9kZS4gQXMgYSBjb25zZXF1ZW5jZSwKKyAqICAgcmVnaXN0ZXJpbmcg
YSBuZXRtYXAgcG9ydCB3aXRoIG5ldG1hcDpmb29eIGlzIG5vdCBlbm91Z2ggdG8gaW50ZXJjZXB0
CisgKiAgIG1idWZzIGluIHRoZSBSWCBob3N0IHJpbmc7IHRoZSBuZXRtYXAgcG9ydCBzaG91bGQg
YmUgcmVnaXN0ZXJlZCB3aXRoCisgKiAgIG5ldG1hcDpmb28qLCBvciBhbm90aGVyIHJlZ2lzdHJh
dGlvbiBzaG91bGQgYmUgZG9uZSB0byBvcGVuIGF0IGxlYXN0IGEKKyAqICAgTklDIFRYIHF1ZXVl
IGluIG5ldG1hcCBtb2RlLgorICoKKyAqICsgTmV0bWFwIGlzIG5vdCBjdXJyZW50bHkgYWJsZSB0
byBkZWFsIHdpdGggaW50ZXJjZXB0ZWQgdHJhc21pdCBtYnVmcyB3aGljaAorICogICByZXF1aXJl
IG9mZmxvYWRpbmdzIGxpa2UgVFNPLCBVRk8sIGNoZWNrc3VtbWluZyBvZmZsb2FkaW5ncywgZXRj
LiBJdCBpcworICogICByZXNwb25zaWJpbGl0eSBvZiB0aGUgdXNlciB0byBkaXNhYmxlIHRob3Nl
IG9mZmxvYWRpbmdzIChlLmcuIHVzaW5nCisgKiAgIGlmY29uZmlnIG9uIEZyZWVCU0Qgb3IgZXRo
dG9vbCAtSyBvbiBMaW51eCkgZm9yIGFuIGludGVyZmFjZSB0aGF0IGlzIGJlaW5nCisgKiAgIHVz
ZWQgaW4gbmV0bWFwIG1vZGUuIElmIHRoZSBvZmZsb2FkaW5ncyBhcmUgbm90IGRpc2FibGVkLCBH
U08gYW5kL29yCisgKiAgIHVuY2hlY2tzdW1tZWQgcGFja2V0cyBtYXkgYmUgZHJvcHBlZCBpbW1l
ZGlhdGVseSBvciBlbmQgdXAgaW4gdGhlIGhvc3QgUlgKKyAqICAgcmluZywgYW5kIHdpbGwgYmUg
ZHJvcHBlZCBhcyBzb29uIGFzIHRoZSBwYWNrZXQgcmVhY2hlcyBhbm90aGVyIG5ldG1hcAorICog
ICBhZGFwdGVyLgogICovCiAKIC8qCkBAIC0yNzcsNyArMjk3LDExIEBACiAJc3RydWN0IHRpbWV2
YWwJdHM7CQkvKiAoaykgdGltZSBvZiBsYXN0ICpzeW5jKCkgKi8KIAogCS8qIG9wYXF1ZSByb29t
IGZvciBhIG11dGV4IG9yIHNpbWlsYXIgb2JqZWN0ICovCi0JdWludDhfdAkJc2VtWzEyOF0gX19h
dHRyaWJ1dGVfXygoX19hbGlnbmVkX18oTk1fQ0FDSEVfQUxJR04pKSk7CisjaWYgIWRlZmluZWQo
X1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCisJdWludDhfdAlfX2F0dHJpYnV0ZV9fKChf
X2FsaWduZWRfXyhOTV9DQUNIRV9BTElHTikpKSBzZW1bMTI4XTsKKyNlbHNlCisJdWludDhfdAlf
X2RlY2xzcGVjKGFsaWduKE5NX0NBQ0hFX0FMSUdOKSkgc2VtWzEyOF07CisjZW5kaWYKIAogCS8q
IHRoZSBzbG90cyBmb2xsb3cuIFRoaXMgc3RydWN0IGhhcyB2YXJpYWJsZSBzaXplICovCiAJc3Ry
dWN0IG5ldG1hcF9zbG90IHNsb3RbMF07CS8qIGFycmF5IG9mIHNsb3RzLiAqLwpAQCAtNDk2LDYg
KzUyMCwxMiBAQAogI2RlZmluZSBORVRNQVBfQkRHX09GRlNFVAlORVRNQVBfQkRHX1ZORVRfSERS
CS8qIGRlcHJlY2F0ZWQgYWxpYXMgKi8KICNkZWZpbmUgTkVUTUFQX0JER19ORVdJRgk2CS8qIGNy
ZWF0ZSBhIHZpcnR1YWwgcG9ydCAqLwogI2RlZmluZSBORVRNQVBfQkRHX0RFTElGCTcJLyogZGVz
dHJveSBhIHZpcnR1YWwgcG9ydCAqLworI2RlZmluZSBORVRNQVBfUFRfSE9TVF9DUkVBVEUJOAkv
KiBjcmVhdGUgcHRuZXRtYXAga3RocmVhZHMgKi8KKyNkZWZpbmUgTkVUTUFQX1BUX0hPU1RfREVM
RVRFCTkJLyogZGVsZXRlIHB0bmV0bWFwIGt0aHJlYWRzICovCisjZGVmaW5lIE5FVE1BUF9CREdf
UE9MTElOR19PTgkxMAkvKiBkZWxldGUgcG9sbGluZyBrdGhyZWFkICovCisjZGVmaW5lIE5FVE1B
UF9CREdfUE9MTElOR19PRkYJMTEJLyogZGVsZXRlIHBvbGxpbmcga3RocmVhZCAqLworI2RlZmlu
ZSBORVRNQVBfVk5FVF9IRFJfR0VUCTEyICAgICAgLyogZ2V0IHRoZSBwb3J0IHZpcnRpby1uZXQt
aGRyIGxlbmd0aCAqLworI2RlZmluZSBORVRNQVBfUE9PTFNfSU5GT19HRVQJMTMJLyogZ2V0IG1l
bW9yeSBhbGxvY2F0b3IgcG9vbHMgaW5mbyAqLwogCXVpbnQxNl90CW5yX2FyZzE7CS8qIHJlc2Vy
dmUgZXh0cmEgcmluZ3MgaW4gTklPQ1JFR0lGICovCiAjZGVmaW5lIE5FVE1BUF9CREdfSE9TVAkJ
MQkvKiBhdHRhY2ggdGhlIGhvc3Qgc3RhY2sgb24gQVRUQUNIICovCiAKQEAgLTUyMSw3ICs1NTEs
NjEgQEAKICNkZWZpbmUgTlJfWkNPUFlfTU9OCTB4NDAwCiAvKiByZXF1ZXN0IGV4Y2x1c2l2ZSBh
Y2Nlc3MgdG8gdGhlIHNlbGVjdGVkIHJpbmdzICovCiAjZGVmaW5lIE5SX0VYQ0xVU0lWRQkweDgw
MAorLyogcmVxdWVzdCBwdG5ldG1hcCBob3N0IHN1cHBvcnQgKi8KKyNkZWZpbmUgTlJfUEFTU1RI
Uk9VR0hfSE9TVAlOUl9QVE5FVE1BUF9IT1NUIC8qIGRlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgTlJf
UFRORVRNQVBfSE9TVAkweDEwMDAKKyNkZWZpbmUgTlJfUlhfUklOR1NfT05MWQkweDIwMDAKKyNk
ZWZpbmUgTlJfVFhfUklOR1NfT05MWQkweDQwMDAKKy8qIEFwcGxpY2F0aW9ucyBzZXQgdGhpcyBm
bGFnIGlmIHRoZXkgYXJlIGFibGUgdG8gZGVhbCB3aXRoIHZpcnRpby1uZXQgaGVhZGVycywKKyAq
IHRoYXQgaXMgc2VuZC9yZWNlaXZlIGZyYW1lcyB0aGF0IHN0YXJ0IHdpdGggYSB2aXJ0aW8tbmV0
IGhlYWRlci4KKyAqIElmIG5vdCBzZXQsIE5JT0NSRUdJRiB3aWxsIGZhaWwgd2l0aCBuZXRtYXAg
cG9ydHMgdGhhdCByZXF1aXJlIGFwcGxpY2F0aW9ucworICogdG8gdXNlIHRob3NlIGhlYWRlcnMu
IElmIHRoZSBmbGFnIGlzIHNldCwgdGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlCisgKiBORVRN
QVBfVk5FVF9IRFJfR0VUIGNvbW1hbmQgdG8gZmlndXJlIG91dCB0aGUgaGVhZGVyIGxlbmd0aC4g
Ki8KKyNkZWZpbmUgTlJfQUNDRVBUX1ZORVRfSERSCTB4ODAwMAorCisjZGVmaW5lCU5NX0JER19O
QU1FCQkidmFsZSIJLyogcHJlZml4IGZvciBicmlkZ2UgcG9ydCBuYW1lICovCisKKy8qCisgKiBX
aW5kb3dzIGRvZXMgbm90IGhhdmUgX0lPV1IoKS4gX0lPKCksIF9JT1coKSBhbmQgX0lPUigpIGFy
ZSBkZWZpbmVkCisgKiBpbiB3czJkZWYuaCBidXQgbm90IHN1cmUgaWYgdGhleSBhcmUgaW4gdGhl
IGZvcm0gd2UgbmVlZC4KKyAqIFhYWCBzbyB3ZSByZWRlZmluZSB0aGVtCisgKiBpbiBhIGNvbnZl
bmllbnQgd2F5IHRvIHVzZSBmb3IgRGV2aWNlSW9Db250cm9sIHNpZ25hdHVyZXMKKyAqLworI2lm
ZGVmIF9XSU4zMgorI3VuZGVmIF9JTwkvLyB3czJkZWYuaAorI2RlZmluZSBfV0lOX05NX0lPQ1RM
X1RZUEUgNDAwMDAKKyNkZWZpbmUgX0lPKF9jLCBfbikJQ1RMX0NPREUoX1dJTl9OTV9JT0NUTF9U
WVBFLCAoKF9uKSArIDB4ODAwKSAsIFwKKwkJTUVUSE9EX0JVRkZFUkVELCBGSUxFX0FOWV9BQ0NF
U1MgICkKKyNkZWZpbmUgX0lPX2RpcmVjdChfYywgX24pCUNUTF9DT0RFKF9XSU5fTk1fSU9DVExf
VFlQRSwgKChfbikgKyAweDgwMCkgLCBcCisJCU1FVEhPRF9PVVRfRElSRUNULCBGSUxFX0FOWV9B
Q0NFU1MgICkKKworI2RlZmluZSBfSU9XUihfYywgX24sIF9zKQlfSU8oX2MsIF9uKQorCisvKiBX
ZSBoYXZlc29tZSBpbnRlcm5hbCBzeXNjdGwgaW4gYWRkaXRpb24gdG8gdGhlIGV4dGVybmFsbHkg
dmlzaWJsZSBvbmVzICovCisjZGVmaW5lIE5FVE1BUF9NTUFQIF9JT19kaXJlY3QoJ2knLCAxNjAp
CS8vIG5vdGUgTUVUSE9EX09VVF9ESVJFQ1QKKyNkZWZpbmUgTkVUTUFQX1BPTEwgX0lPKCdpJywg
MTYyKQorCisvKiBhbmQgYWxzbyB0d28gc2V0c29ja29wdCBmb3Igc3lzY3RsIGVtdWxhdGlvbiAq
LworI2RlZmluZSBORVRNQVBfU0VUU09DS09QVCBfSU8oJ2knLCAxNDApCisjZGVmaW5lIE5FVE1B
UF9HRVRTT0NLT1BUIF9JTygnaScsIDE0MSkKKworCisvL1RoZXNlIGxpbmtuYW1lcyBhcmUgZm9y
IHRoZSBOZXRtYXAgQ29yZSBEcml2ZXIKKyNkZWZpbmUgTkVUTUFQX05UX0RFVklDRV9OQU1FCQkJ
TCJcXERldmljZVxcTkVUTUFQIgorI2RlZmluZSBORVRNQVBfRE9TX0RFVklDRV9OQU1FCQkJTCJc
XERvc0RldmljZXNcXG5ldG1hcCIKKworLy9EZWZpbml0aW9uIG9mIGEgc3RydWN0dXJlIHVzZWQg
dG8gcGFzcyBhIHZpcnR1YWwgYWRkcmVzcyB3aXRoaW4gYW4gSU9DVEwKK3R5cGVkZWYgc3RydWN0
IF9NRU1PUllfRU5UUlkgeworCVBWT0lEICAgICAgIHBVc2VybW9kZVZpcnR1YWxBZGRyZXNzOwor
fSBNRU1PUllfRU5UUlksICpQTUVNT1JZX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCBfUE9MTF9S
RVFVRVNUX0RBVEEgeworCWludCBldmVudHM7CisJaW50IHRpbWVvdXQ7CisJaW50IHJldmVudHM7
Cit9IFBPTExfUkVRVUVTVF9EQVRBOwogCisjZW5kaWYgLyogX1dJTjMyICovCiAKIC8qCiAgKiBG
cmVlQlNEIHVzZXMgdGhlIHNpemUgdmFsdWUgZW1iZWRkZWQgaW4gdGhlIF9JT1dSIHRvIGRldGVy
bWluZQpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL25ldC9uZXRtYXBfdXNlci5oIC91c3Ivc3Jj
L3N5cy9uZXQvbmV0bWFwX3VzZXIuaAotLS0gdXNyL3NyYy9zeXMvbmV0L25ldG1hcF91c2VyLmgJ
MjAxNi0wOS0yOSAwMDoyNDo0MS4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9uZXQv
bmV0bWFwX3VzZXIuaAkyMDE2LTExLTIzIDE2OjU3OjU3Ljg1ODM1MTAwMCArMDAwMApAQCAtMSw1
ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBVbml2ZXJzaXRhYCBkaSBQ
aXNhLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTYgVW5p
dmVyc2l0YWAgZGkgUGlzYQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNyArMjYsNyBAQAogICovCiAKIC8qCi0gKiAkRnJlZUJT
RDogcmVsZW5nLzExLjAvc3lzL25ldC9uZXRtYXBfdXNlci5oIDI4NTM0OSAyMDE1LTA3LTEwIDA1
OjUxOjM2WiBsdWlnaSAkCisgKiAkRnJlZUJTRCQKICAqCiAgKiBGdW5jdGlvbnMgYW5kIG1hY3Jv
cyB0byBtYW5pcHVsYXRlIG5ldG1hcCBzdHJ1Y3R1cmVzIGFuZCBwYWNrZXRzCiAgKiBpbiB1c2Vy
c3BhY2UuIFNlZSBuZXRtYXAoNCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCkBAIC02NSw5ICs2Niwz
MSBAQAogI2lmbmRlZiBfTkVUX05FVE1BUF9VU0VSX0hfCiAjZGVmaW5lIF9ORVRfTkVUTUFQX1VT
RVJfSF8KIAorI2RlZmluZSBORVRNQVBfREVWSUNFX05BTUUgIi9kZXYvbmV0bWFwIgorCisjaWZk
ZWYgX19DWUdXSU5fXworLyoKKyAqIHdlIGNhbiBjb21waWxlIHVzZXJzcGFjZSBhcHBzIHdpdGgg
ZWl0aGVyIGN5Z3dpbiBvciBtc3ZjLAorICogYW5kIHdlIHVzZSBfV0lOMzIgdG8gaWRlbnRpZnkg
d2luZG93cyBzcGVjaWZpYyBjb2RlCisgKi8KKyNpZm5kZWYgX1dJTjMyCisjZGVmaW5lIF9XSU4z
MgorI2VuZGlmCS8qIF9XSU4zMiAqLworCisjZW5kaWYJLyogX19DWUdXSU5fXyAqLworCisjaWZk
ZWYgX1dJTjMyCisjdW5kZWYgTkVUTUFQX0RFVklDRV9OQU1FCisjZGVmaW5lIE5FVE1BUF9ERVZJ
Q0VfTkFNRSAiL3Byb2Mvc3lzL0Rvc0RldmljZXMvR2xvYmFsL25ldG1hcCIKKyNpbmNsdWRlIDx3
aW5kb3dzLmg+CisjaW5jbHVkZSA8V2luRGVmLmg+CisjaW5jbHVkZSA8c3lzL2N5Z3dpbi5oPgor
I2VuZGlmIC8qIF9XSU4zMiAqLworCiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3lz
L3NvY2tldC5oPgkJLyogYXBwbGUgbmVlZHMgc29ja2FkZHIgKi8KICNpbmNsdWRlIDxuZXQvaWYu
aD4JCS8qIElGTkFNU0laICovCisjaW5jbHVkZSA8Y3R5cGUuaD4KIAogI2lmbmRlZiBsaWtlbHkK
ICNkZWZpbmUgbGlrZWx5KHgpCV9fYnVpbHRpbl9leHBlY3QoISEoeCksIDEpCkBAIC0xNzIsMTcg
KzE5NSwyMyBAQAogICAgIH0gd2hpbGUgKDApCiAjZW5kaWYKIAotc3RydWN0IG5tX3BrdGhkciB7
CS8qIHNhbWUgYXMgcGNhcF9wa3RoZHIgKi8KK3N0cnVjdCBubV9wa3RoZHIgewkvKiBmaXJzdCBw
YXJ0IGlzIHRoZSBzYW1lIGFzIHBjYXBfcGt0aGRyICovCiAJc3RydWN0IHRpbWV2YWwJdHM7CiAJ
dWludDMyX3QJY2FwbGVuOwogCXVpbnQzMl90CWxlbjsKKworCXVpbnQ2NF90IGZsYWdzOwkvKiBO
TV9NT1JFX1BLVFMgZXRjICovCisjZGVmaW5lIE5NX01PUkVfUEtUUwkxCisJc3RydWN0IG5tX2Rl
c2MgKmQ7CisJc3RydWN0IG5ldG1hcF9zbG90ICpzbG90OworCXVpbnQ4X3QgKmJ1ZjsKIH07CiAK
IHN0cnVjdCBubV9zdGF0IHsJLyogc2FtZSBhcyBwY2FwX3N0YXQJKi8KIAl1X2ludAlwc19yZWN2
OwogCXVfaW50CXBzX2Ryb3A7CiAJdV9pbnQJcHNfaWZkcm9wOwotI2lmZGVmIFdJTjMyCisjaWZk
ZWYgV0lOMzIgLyogWFhYIG9yIF9XSU4zMiA/ICovCiAJdV9pbnQJYnNfY2FwdDsKICNlbmRpZiAv
KiBXSU4zMiAqLwogfTsKQEAgLTI4NCwxMiArMzEzLDE0IEBACiAgKgkJLU5OCQliaW5kIGluZGl2
aWR1YWwgTklDIHJpbmcgcGFpcgogICoJCXtOTgkJYmluZCBtYXN0ZXIgc2lkZSBvZiBwaXBlIE5O
CiAgKgkJfU5OCQliaW5kIHNsYXZlIHNpZGUgb2YgcGlwZSBOTgotICoJCWEgc3VmZml4IHN0YXJ0
aW5nIHdpdGggKyBhbmQgdGhlIGZvbGxvd2luZyBmbGFncywKKyAqCQlhIHN1ZmZpeCBzdGFydGlu
ZyB3aXRoIC8gYW5kIHRoZSBmb2xsb3dpbmcgZmxhZ3MsCiAgKgkJaW4gYW55IG9yZGVyOgogICoJ
CXgJCWV4Y2x1c2l2ZSBhY2Nlc3MKICAqCQl6CQl6ZXJvIGNvcHkgbW9uaXRvcgogICoJCXQJCW1v
bml0b3IgdHggc2lkZQogICoJCXIJCW1vbml0b3Igcnggc2lkZQorICoJCVIJCWJpbmQgb25seSBS
WCByaW5nKHMpCisgKgkJVAkJYmluZCBvbmx5IFRYIHJpbmcocykKICAqCiAgKiByZXEJCXByb3Zp
ZGVzIHRoZSBpbml0aWFsIHZhbHVlcyBvZiBubXJlcSBiZWZvcmUgcGFyc2luZyBpZm5hbWUuCiAg
KgkJUmVtZW1iZXIgdGhhdCB0aGUgaWZuYW1lIHBhcnNpbmcgd2lsbCBvdmVycmlkZSB0aGUgcmlu
ZwpAQCAtMzI5LDYgKzM2MCwxMyBAQAogc3RhdGljIGludCBubV9jbG9zZShzdHJ1Y3Qgbm1fZGVz
YyAqKTsKIAogLyoKKyAqIG5tX21tYXAoKSAgICBkbyBtbWFwIG9yIGluaGVyaXQgZnJvbSBwYXJl
bnQgaWYgdGhlIG5yX2FyZzIKKyAqICAgICAgICAgICAgICAobWVtb3J5IGJsb2NrKSBtYXRjaGVz
LgorICovCisKK3N0YXRpYyBpbnQgbm1fbW1hcChzdHJ1Y3Qgbm1fZGVzYyAqLCBjb25zdCBzdHJ1
Y3Qgbm1fZGVzYyAqKTsKKworLyoKICAqIG5tX2luamVjdCgpIGlzIHRoZSBzYW1lIGFzIHBjYXBf
aW5qZWN0KCkKICAqIG5tX2Rpc3BhdGNoKCkgaXMgdGhlIHNhbWUgYXMgcGNhcF9kaXNwYXRjaCgp
CiAgKiBubV9uZXh0cGt0KCkgaXMgdGhlIHNhbWUgYXMgcGNhcF9uZXh0KCkKQEAgLTMzOCwxMyAr
Mzc2LDI0NyBAQAogc3RhdGljIGludCBubV9kaXNwYXRjaChzdHJ1Y3Qgbm1fZGVzYyAqLCBpbnQs
IG5tX2NiX3QsIHVfY2hhciAqKTsKIHN0YXRpYyB1X2NoYXIgKm5tX25leHRwa3Qoc3RydWN0IG5t
X2Rlc2MgKiwgc3RydWN0IG5tX3BrdGhkciAqKTsKIAorI2lmZGVmIF9XSU4zMgorCitpbnRwdHJf
dCBfZ2V0X29zZmhhbmRsZShpbnQpOyAvKiBkZWZpbmVkIGluIGlvLmggaW4gd2luZG93cyAqLwor
CisvKgorICogSW4gd2luZG93cyB3ZSBkbyBub3QgaGF2ZSB5ZXQgbmF0aXZlIHBvbGwgc3VwcG9y
dCwgc28gd2Uga2VlcCB0cmFjaworICogb2YgZmlsZSBkZXNjcmlwdG9ycyBhc3NvY2lhdGVkIHRv
IG5ldG1hcCBwb3J0cyB0byBlbXVsYXRlIHBvbGwgb24KKyAqIHRoZW0gYW5kIGZhbGwgYmFjayBv
biByZWd1bGFyIHBvbGwgb24gb3RoZXIgZmlsZSBkZXNjcmlwdG9ycy4KKyAqLworc3RydWN0IHdp
bl9uZXRtYXBfZmRfbGlzdCB7CisJc3RydWN0IHdpbl9uZXRtYXBfZmRfbGlzdCAqbmV4dDsKKwlp
bnQgd2luX25ldG1hcF9mZDsKKwlIQU5ETEUgd2luX25ldG1hcF9oYW5kbGU7Cit9OworCisvKgor
ICogbGlzdCBoZWFkIGNvbnRhaW5pbmcgYWxsIHRoZSBuZXRtYXAgb3BlbmVkIGZkIGFuZCB0aGVp
cgorICogd2luZG93cyBIQU5ETEUgY291bnRlcnBhcnRzCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgd2lu
X25ldG1hcF9mZF9saXN0ICp3aW5fbmV0bWFwX2ZkX2xpc3RfaGVhZDsKKworc3RhdGljIHZvaWQK
K3dpbl9pbnNlcnRfZmRfcmVjb3JkKGludCBmZCkKK3sKKwlzdHJ1Y3Qgd2luX25ldG1hcF9mZF9s
aXN0ICpjdXJyOworCisJZm9yIChjdXJyID0gd2luX25ldG1hcF9mZF9saXN0X2hlYWQ7IGN1cnI7
IGN1cnIgPSBjdXJyLT5uZXh0KSB7CisJCWlmIChmZCA9PSBjdXJyLT53aW5fbmV0bWFwX2ZkKSB7
CisJCQlyZXR1cm47CisJCX0KKwl9CisJY3VyciA9IGNhbGxvYygxLCBzaXplb2YoKmN1cnIpKTsK
KwljdXJyLT5uZXh0ID0gd2luX25ldG1hcF9mZF9saXN0X2hlYWQ7CisJY3Vyci0+d2luX25ldG1h
cF9mZCA9IGZkOworCWN1cnItPndpbl9uZXRtYXBfaGFuZGxlID0gSW50VG9QdHIoX2dldF9vc2Zo
YW5kbGUoZmQpKTsKKwl3aW5fbmV0bWFwX2ZkX2xpc3RfaGVhZCA9IGN1cnI7Cit9CisKK3ZvaWQK
K3dpbl9yZW1vdmVfZmRfcmVjb3JkKGludCBmZCkKK3sKKwlzdHJ1Y3Qgd2luX25ldG1hcF9mZF9s
aXN0ICpjdXJyID0gd2luX25ldG1hcF9mZF9saXN0X2hlYWQ7CisJc3RydWN0IHdpbl9uZXRtYXBf
ZmRfbGlzdCAqcHJldiA9IE5VTEw7CisJZm9yICg7IGN1cnIgOyBwcmV2ID0gY3VyciwgY3VyciA9
IGN1cnItPm5leHQpIHsKKwkJaWYgKGZkICE9IGN1cnItPndpbl9uZXRtYXBfZmQpCisJCQljb250
aW51ZTsKKwkJLyogZm91bmQgdGhlIGVudHJ5ICovCisJCWlmIChwcmV2ID09IE5VTEwpIHsgLyog
d2UgYXJlIGZyZWVpbmcgdGhlIGZpcnN0IGVudHJ5ICovCisJCQl3aW5fbmV0bWFwX2ZkX2xpc3Rf
aGVhZCA9IGN1cnItPm5leHQ7CisJCX0gZWxzZSB7CisJCQlwcmV2LT5uZXh0ID0gY3Vyci0+bmV4
dDsKKwkJfQorCQlmcmVlKGN1cnIpOworCQlicmVhazsKKwl9Cit9CisKKworSEFORExFCit3aW5f
Z2V0X25ldG1hcF9oYW5kbGUoaW50IGZkKQoreworCXN0cnVjdCB3aW5fbmV0bWFwX2ZkX2xpc3Qg
KmN1cnI7CisKKwlmb3IgKGN1cnIgPSB3aW5fbmV0bWFwX2ZkX2xpc3RfaGVhZDsgY3VycjsgY3Vy
ciA9IGN1cnItPm5leHQpIHsKKwkJaWYgKGZkID09IGN1cnItPndpbl9uZXRtYXBfZmQpIHsKKwkJ
CXJldHVybiBjdXJyLT53aW5fbmV0bWFwX2hhbmRsZTsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsK
K30KKworLyoKKyAqIHdlIG5lZWQgdG8gd3JhcCBpb2N0bCBhbmQgbW1hcCwgYXQgbGVhc3QgZm9y
IHRoZSBuZXRtYXAgZmlsZSBkZXNjcmlwdG9ycworICovCisKKy8qCisgKiB1c2UgdGhpcyBmdW5j
dGlvbiBvbmx5IGZyb20gbmV0bWFwX3VzZXIuaCBpbnRlcm5hbCBmdW5jdGlvbnMKKyAqIHNhbWUg
YXMgaW9jdGwsIHJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCAtMSBvbiBlcnJvcgorICovCitzdGF0
aWMgaW50Cit3aW5fbm1faW9jdGxfaW50ZXJuYWwoSEFORExFIGgsIGludDMyX3QgY3RsQ29kZSwg
dm9pZCAqYXJnKQoreworCURXT1JEIGJSZXR1cm4gPSAwLCBzekluLCBzek91dDsKKwlCT09MIGlv
Y3RsUmV0dXJuU3RhdHVzOworCXZvaWQgKmluUGFyYW0gPSBhcmcsICpvdXRQYXJhbSA9IGFyZzsK
KworCXN3aXRjaCAoY3RsQ29kZSkgeworCWNhc2UgTkVUTUFQX1BPTEw6CisJCXN6SW4gPSBzaXpl
b2YoUE9MTF9SRVFVRVNUX0RBVEEpOworCQlzek91dCA9IHNpemVvZihQT0xMX1JFUVVFU1RfREFU
QSk7CisJCWJyZWFrOworCWNhc2UgTkVUTUFQX01NQVA6CisJCXN6SW4gPSAwOworCQlzek91dCA9
IHNpemVvZih2b2lkKik7CisJCWluUGFyYW0gPSBOVUxMOyAvKiBub3RoaW5nIG9uIGlucHV0ICov
CisJCWJyZWFrOworCWNhc2UgTklPQ1RYU1lOQzoKKwljYXNlIE5JT0NSWFNZTkM6CisJCXN6SW4g
PSAwOworCQlzek91dCA9IDA7CisJCWJyZWFrOworCWNhc2UgTklPQ1JFR0lGOgorCQlzekluID0g
c2l6ZW9mKHN0cnVjdCBubXJlcSk7CisJCXN6T3V0ID0gc2l6ZW9mKHN0cnVjdCBubXJlcSk7CisJ
CWJyZWFrOworCWNhc2UgTklPQ0NPTkZJRzoKKwkJRCgidW5zdXBwb3J0ZWQgTklPQ0NPTkZJRyEi
KTsKKwkJcmV0dXJuIC0xOworCisJZGVmYXVsdDogLyogYSByZWd1bGFyIGlvY3RsICovCisJCUQo
ImludmFsaWQgaW9jdGwgJXggb24gbmV0bWFwIGZkIiwgY3RsQ29kZSk7CisJCXJldHVybiAtMTsK
Kwl9CisKKwlpb2N0bFJldHVyblN0YXR1cyA9IERldmljZUlvQ29udHJvbChoLAorCQkJCWN0bENv
ZGUsIGluUGFyYW0sIHN6SW4sCisJCQkJb3V0UGFyYW0sIHN6T3V0LAorCQkJCSZiUmV0dXJuLCBO
VUxMKTsKKwkvLyBYWFggbm90ZSB3aW5kb3dzIHJldHVybnMgMCBvbiBlcnJvciBvciBhc3luYyBj
YWxsLCAxIG9uIHN1Y2Nlc3MKKwkvLyB3ZSBjb3VsZCBjYWxsIEdldExhc3RFcnJvcigpIHRvIGZp
Z3VyZSBvdXQgd2hhdCBoYXBwZW5lZAorCXJldHVybiBpb2N0bFJldHVyblN0YXR1cyA/IDAgOiAt
MTsKK30KKworLyoKKyAqIHRoaXMgZnVuY3Rpb24gaXMgd2hhdCBtdXN0IGJlIGNhbGxlZCBmcm9t
IHVzZXItc3BhY2UgcHJvZ3JhbXMKKyAqIHNhbWUgYXMgaW9jdGwsIHJldHVybnMgMCBvbiBzdWNj
ZXNzIGFuZCAtMSBvbiBlcnJvcgorICovCitzdGF0aWMgaW50Cit3aW5fbm1faW9jdGwoaW50IGZk
LCBpbnQzMl90IGN0bENvZGUsIHZvaWQgKmFyZykKK3sKKwlIQU5ETEUgaCA9IHdpbl9nZXRfbmV0
bWFwX2hhbmRsZShmZCk7CisKKwlpZiAoaCA9PSBOVUxMKSB7CisJCXJldHVybiBpb2N0bChmZCwg
Y3RsQ29kZSwgYXJnKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gd2luX25tX2lvY3RsX2ludGVybmFs
KGgsIGN0bENvZGUsIGFyZyk7CisJfQorfQorCisjZGVmaW5lIGlvY3RsIHdpbl9ubV9pb2N0bCAv
KiBmcm9tIG5vdyBvbiwgd2l0aGluIHRoaXMgZmlsZSAuLi4gKi8KKworLyoKKyAqIFdlIGNhbm5v
dCB1c2UgdGhlIG5hdGl2ZSBtbWFwIG9uIHdpbmRvd3MKKyAqIFRoZSBvbmx5IHBhcmFtZXRlciB1
c2VkIGlzICJmZCIsIHRoZSBvdGhlciBvbmVzIGFyZSBqdXN0IGRlY2xhcmVkIHRvCisgKiBtYWtl
IHRoaXMgc2lnbmF0dXJlIGNvbXBhcmFibGUgdG8gdGhlIEZyZWVCU0QvTGludXggb25lCisgKi8K
K3N0YXRpYyB2b2lkICoKK3dpbjMyX21tYXBfZW11bGF0ZWQodm9pZCAqYWRkciwgc2l6ZV90IGxl
bmd0aCwgaW50IHByb3QsIGludCBmbGFncywgaW50IGZkLCBpbnQzMl90IG9mZnNldCkKK3sKKwlI
QU5ETEUgaCA9IHdpbl9nZXRfbmV0bWFwX2hhbmRsZShmZCk7CisKKwlpZiAoaCA9PSBOVUxMKSB7
CisJCXJldHVybiBtbWFwKGFkZHIsIGxlbmd0aCwgcHJvdCwgZmxhZ3MsIGZkLCBvZmZzZXQpOwor
CX0gZWxzZSB7CisJCU1FTU9SWV9FTlRSWSByZXQ7CisKKwkJcmV0dXJuIHdpbl9ubV9pb2N0bF9p
bnRlcm5hbChoLCBORVRNQVBfTU1BUCwgJnJldCkgPworCQkJTlVMTCA6IHJldC5wVXNlcm1vZGVW
aXJ0dWFsQWRkcmVzczsKKwl9Cit9CisKKyNkZWZpbmUgbW1hcCB3aW4zMl9tbWFwX2VtdWxhdGVk
CisKKyNpbmNsdWRlIDxzeXMvcG9sbC5oPiAvKiBYWFggbmVlZGVkIHRvIHVzZSB0aGUgc3RydWN0
dXJlIHBvbGxmZCAqLworCitzdGF0aWMgaW50Cit3aW5fbm1fcG9sbChzdHJ1Y3QgcG9sbGZkICpm
ZHMsIGludCBuZmRzLCBpbnQgdGltZW91dCkKK3sKKwlIQU5ETEUgaDsKKworCWlmIChuZmRzICE9
IDEgfHwgZmRzID09IE5VTEwgfHwgKGggPSB3aW5fZ2V0X25ldG1hcF9oYW5kbGUoZmRzLT5mZCkp
ID09IE5VTEwpIHs7CisJCXJldHVybiBwb2xsKGZkcywgbmZkcywgdGltZW91dCk7CisJfSBlbHNl
IHsKKwkJUE9MTF9SRVFVRVNUX0RBVEEgcHJkOworCisJCXByZC50aW1lb3V0ID0gdGltZW91dDsK
KwkJcHJkLmV2ZW50cyA9IGZkcy0+ZXZlbnRzOworCisJCXdpbl9ubV9pb2N0bF9pbnRlcm5hbCho
LCBORVRNQVBfUE9MTCwgJnByZCk7CisJCWlmICgocHJkLnJldmVudHMgPT0gUE9MTEVSUikgfHwg
KHByZC5yZXZlbnRzID09IFNUQVRVU19USU1FT1VUKSkgeworCQkJcmV0dXJuIC0xOworCQl9CisJ
CXJldHVybiAxOworCX0KK30KKworI2RlZmluZSBwb2xsIHdpbl9ubV9wb2xsCisKK3N0YXRpYyBp
bnQKK3dpbl9ubV9vcGVuKGNoYXIqIHBhdGhuYW1lLCBpbnQgZmxhZ3MpCit7CisKKwlpZiAoc3Ry
Y21wKHBhdGhuYW1lLCBORVRNQVBfREVWSUNFX05BTUUpID09IDApIHsKKwkJaW50IGZkID0gb3Bl
bihORVRNQVBfREVWSUNFX05BTUUsIE9fUkRXUik7CisJCWlmIChmZCA8IDApIHsKKwkJCXJldHVy
biAtMTsKKwkJfQorCisJCXdpbl9pbnNlcnRfZmRfcmVjb3JkKGZkKTsKKwkJcmV0dXJuIGZkOwor
CX0gZWxzZSB7CisJCXJldHVybiBvcGVuKHBhdGhuYW1lLCBmbGFncyk7CisJfQorfQorCisjZGVm
aW5lIG9wZW4gd2luX25tX29wZW4KKworc3RhdGljIGludAord2luX25tX2Nsb3NlKGludCBmZCkK
K3sKKwlpZiAoZmQgIT0gLTEpIHsKKwkJY2xvc2UoZmQpOworCQlpZiAod2luX2dldF9uZXRtYXBf
aGFuZGxlKGZkKSAhPSBOVUxMKSB7CisJCQl3aW5fcmVtb3ZlX2ZkX3JlY29yZChmZCk7CisJCX0K
Kwl9CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgY2xvc2Ugd2luX25tX2Nsb3NlCisKKyNlbmRp
ZiAvKiBfV0lOMzIgKi8KKworc3RhdGljIGludAorbm1faXNfaWRlbnRpZmllcihjb25zdCBjaGFy
ICpzLCBjb25zdCBjaGFyICplKQoreworCWZvciAoOyBzICE9IGU7IHMrKykgeworCQlpZiAoIWlz
YWxudW0oKnMpICYmICpzICE9ICdfJykgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1
cm4gMTsKK30KIAogLyoKICAqIFRyeSB0byBvcGVuLCByZXR1cm4gZGVzY3JpcHRvciBpZiBzdWNj
ZXNzZnVsLCBOVUxMIG90aGVyd2lzZS4KICAqIEFuIGludmFsaWQgbmV0bWFwIG5hbWUgd2lsbCBy
ZXR1cm4gZXJybm8gPSAwOwogICogWW91IGNhbiBwYXNzIGEgcG9pbnRlciB0byBhIHByZS1maWxs
ZWQgbm1fZGVzYyB0byBhZGQgc3BlY2lhbAogICogcGFyYW1ldGVycy4gRmxhZ3MgaXMgdXNlZCBh
cyBmb2xsb3dzCi0gKiBOTV9PUEVOX05PX01NQVAJdXNlIHRoZSBtZW1vcnkgZnJvbSBhcmcsIG9u
bHkKKyAqIE5NX09QRU5fTk9fTU1BUAl1c2UgdGhlIG1lbW9yeSBmcm9tIGFyZywgb25seSBYWFgg
YXZvaWQgbW1hcAogICoJCQlpZiB0aGUgbnJfYXJnMiAobWVtb3J5IGJsb2NrKSBtYXRjaGVzLgog
ICogTk1fT1BFTl9BUkcxCQl1c2UgcmVxLm5yX2FyZzEgZnJvbSBhcmcKICAqIE5NX09QRU5fQVJH
MgkJdXNlIHJlcS5ucl9hcmcyIGZyb20gYXJnCkBAIC0zNTksMjAgKzYzMSw0OSBAQAogCXVfaW50
IG5hbWVsZW47CiAJdWludDMyX3QgbnJfcmluZ2lkID0gMCwgbnJfZmxhZ3MsIG5yX3JlZzsKIAlj
b25zdCBjaGFyICpwb3J0ID0gTlVMTDsKKwljb25zdCBjaGFyICp2cG5hbWUgPSBOVUxMOwogI2Rl
ZmluZSBNQVhFUlJNU0cgODAKIAljaGFyIGVycm1zZ1tNQVhFUlJNU0ddID0gIiI7Ci0JZW51bSB7
IFBfU1RBUlQsIFBfUk5HU0ZYT0ssIFBfR0VUTlVNLCBQX0ZMQUdTLCBQX0ZMQUdTT0sgfSBwX3N0
YXRlOworCWVudW0geyBQX1NUQVJULCBQX1JOR1NGWE9LLCBQX0dFVE5VTSwgUF9GTEFHUywgUF9G
TEFHU09LLCBQX01FTUlEIH0gcF9zdGF0ZTsKKwlpbnQgaXNfdmFsZTsKIAlsb25nIG51bTsKKwl1
aW50MTZfdCBucl9hcmcyID0gMDsKIAotCWlmIChzdHJuY21wKGlmbmFtZSwgIm5ldG1hcDoiLCA3
KSAmJiBzdHJuY21wKGlmbmFtZSwgInZhbGUiLCA0KSkgeworCWlmIChzdHJuY21wKGlmbmFtZSwg
Im5ldG1hcDoiLCA3KSAmJgorCQkJc3RybmNtcChpZm5hbWUsIE5NX0JER19OQU1FLCBzdHJsZW4o
Tk1fQkRHX05BTUUpKSkgewogCQllcnJubyA9IDA7IC8qIG5hbWUgbm90IHJlY29nbmlzZWQsIG5v
dCBhbiBlcnJvciAqLwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JaWYgKGlmbmFtZVswXSA9PSAnbicp
CisKKwlpc192YWxlID0gKGlmbmFtZVswXSA9PSAndicpOworCWlmIChpc192YWxlKSB7CisJCXBv
cnQgPSBpbmRleChpZm5hbWUsICc6Jyk7CisJCWlmIChwb3J0ID09IE5VTEwpIHsKKwkJCXNucHJp
bnRmKGVycm1zZywgTUFYRVJSTVNHLAorCQkJCSAibWlzc2luZyAnOicgaW4gdmFsZSBuYW1lIik7
CisJCQlnb3RvIGZhaWw7CisJCX0KKworCQlpZiAoIW5tX2lzX2lkZW50aWZpZXIoaWZuYW1lICsg
NCwgcG9ydCkpIHsKKwkJCXNucHJpbnRmKGVycm1zZywgTUFYRVJSTVNHLCAiaW52YWxpZCBicmlk
Z2UgbmFtZSIpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJdnBuYW1lID0gKytwb3J0OworCX0g
ZWxzZSB7CiAJCWlmbmFtZSArPSA3OworCQlwb3J0ID0gaWZuYW1lOworCX0KKwogCS8qIHNjYW4g
Zm9yIGEgc2VwYXJhdG9yICovCi0JZm9yIChwb3J0ID0gaWZuYW1lOyAqcG9ydCAmJiAhaW5kZXgo
Ii0qXnt9LyIsICpwb3J0KTsgcG9ydCsrKQorCWZvciAoOyAqcG9ydCAmJiAhaW5kZXgoIi0qXnt9
L0AiLCAqcG9ydCk7IHBvcnQrKykKIAkJOworCisJaWYgKGlzX3ZhbGUgJiYgIW5tX2lzX2lkZW50
aWZpZXIodnBuYW1lLCBwb3J0KSkgeworCQlzbnByaW50ZihlcnJtc2csIE1BWEVSUk1TRywgImlu
dmFsaWQgYnJpZGdlIHBvcnQgbmFtZSIpOworCQlnb3RvIGZhaWw7CisJfQorCiAJbmFtZWxlbiA9
IHBvcnQgLSBpZm5hbWU7CiAJaWYgKG5hbWVsZW4gPj0gc2l6ZW9mKGQtPnJlcS5ucl9uYW1lKSkg
ewogCQlzbnByaW50ZihlcnJtc2csIE1BWEVSUk1TRywgIm5hbWUgdG9vIGxvbmciKTsKQEAgLTQw
Nyw2ICs3MDgsOSBAQAogCQkJY2FzZSAnLyc6IC8qIHN0YXJ0IG9mIGZsYWdzICovCiAJCQkJcF9z
dGF0ZSA9IFBfRkxBR1M7CiAJCQkJYnJlYWs7CisJCQljYXNlICdAJzogLyogc3RhcnQgb2YgbWVt
aWQgKi8KKwkJCQlwX3N0YXRlID0gUF9NRU1JRDsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJ
CQkJc25wcmludGYoZXJybXNnLCBNQVhFUlJNU0csICJ1bmtub3duIG1vZGlmaWVyOiAnJWMnIiwg
KnBvcnQpOwogCQkJCWdvdG8gZmFpbDsKQEAgLTQxOCw2ICs3MjIsOSBAQAogCQkJY2FzZSAnLyc6
CiAJCQkJcF9zdGF0ZSA9IFBfRkxBR1M7CiAJCQkJYnJlYWs7CisJCQljYXNlICdAJzoKKwkJCQlw
X3N0YXRlID0gUF9NRU1JRDsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJc25wcmludGYo
ZXJybXNnLCBNQVhFUlJNU0csICJ1bmV4cGVjdGVkIGNoYXJhY3RlcjogJyVjJyIsICpwb3J0KTsK
IAkJCQlnb3RvIGZhaWw7CkBAIC00MzYsNiArNzQzLDExIEBACiAJCQlicmVhazsKIAkJY2FzZSBQ
X0ZMQUdTOgogCQljYXNlIFBfRkxBR1NPSzoKKwkJCWlmICgqcG9ydCA9PSAnQCcpIHsKKwkJCQlw
b3J0Kys7CisJCQkJcF9zdGF0ZSA9IFBfTUVNSUQ7CisJCQkJYnJlYWs7CisJCQl9CiAJCQlzd2l0
Y2ggKCpwb3J0KSB7CiAJCQljYXNlICd4JzoKIAkJCQlucl9mbGFncyB8PSBOUl9FWENMVVNJVkU7
CkBAIC00NDksNiArNzYxLDEyIEBACiAJCQljYXNlICdyJzoKIAkJCQlucl9mbGFncyB8PSBOUl9N
T05JVE9SX1JYOwogCQkJCWJyZWFrOworCQkJY2FzZSAnUic6CisJCQkJbnJfZmxhZ3MgfD0gTlJf
UlhfUklOR1NfT05MWTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1QnOgorCQkJCW5yX2ZsYWdzIHw9
IE5SX1RYX1JJTkdTX09OTFk7CisJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCXNucHJpbnRm
KGVycm1zZywgTUFYRVJSTVNHLCAidW5yZWNvZ25pemVkIGZsYWc6ICclYyciLCAqcG9ydCk7CiAJ
CQkJZ290byBmYWlsOwpAQCAtNDU2LDEyICs3NzQsMzAgQEAKIAkJCXBvcnQrKzsKIAkJCXBfc3Rh
dGUgPSBQX0ZMQUdTT0s7CiAJCQlicmVhazsKKwkJY2FzZSBQX01FTUlEOgorCQkJaWYgKG5yX2Fy
ZzIgIT0gMCkgeworCQkJCXNucHJpbnRmKGVycm1zZywgTUFYRVJSTVNHLCAiZG91YmxlIHNldHRp
bmcgb2YgbWVtaWQiKTsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisJCQludW0gPSBzdHJ0b2wocG9y
dCwgKGNoYXIgKiopJnBvcnQsIDEwKTsKKwkJCWlmIChudW0gPD0gMCkgeworCQkJCXNucHJpbnRm
KGVycm1zZywgTUFYRVJSTVNHLCAiaW52YWxpZCBtZW1pZCAlbGQsIG11c3QgYmUgPjAiLCBudW0p
OworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKwkJCW5yX2FyZzIgPSBudW07CisJCQlwX3N0YXRlID0g
UF9STkdTRlhPSzsKKwkJCWJyZWFrOwogCQl9CiAJfQogCWlmIChwX3N0YXRlICE9IFBfU1RBUlQg
JiYgcF9zdGF0ZSAhPSBQX1JOR1NGWE9LICYmIHBfc3RhdGUgIT0gUF9GTEFHU09LKSB7CiAJCXNu
cHJpbnRmKGVycm1zZywgTUFYRVJSTVNHLCAidW5leHBlY3RlZCBlbmQgb2YgcG9ydCBuYW1lIik7
CiAJCWdvdG8gZmFpbDsKIAl9CisJaWYgKChucl9mbGFncyAmIE5SX1pDT1BZX01PTikgJiYKKwkg
ICAhKG5yX2ZsYWdzICYgKE5SX01PTklUT1JfVFh8TlJfTU9OSVRPUl9SWCkpKSB7CisJCXNucHJp
bnRmKGVycm1zZywgTUFYRVJSTVNHLCAiJ3onIHVzZWQgYnV0IG5laXRoZXIgJ3InLCBub3IgJ3Qn
IGZvdW5kIik7CisJCWdvdG8gZmFpbDsKKwl9CiAJTkQoImZsYWdzOiAlcyAlcyAlcyAlcyIsCiAJ
CQkobnJfZmxhZ3MgJiBOUl9FWENMVVNJVkUpID8gIkVYQ0xVU0lWRSIgOiAiIiwKIAkJCShucl9m
bGFncyAmIE5SX1pDT1BZX01PTikgPyAiWkNPUFlfTU9OIiA6ICIiLApAQCAtNDc0LDcgKzgxMCw3
IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAlkLT5zZWxmID0gZDsJLyogc2V0IHRoaXMgZWFybHkg
c28gbm1fY2xvc2UoKSB3b3JrcyAqLwotCWQtPmZkID0gb3BlbigiL2Rldi9uZXRtYXAiLCBPX1JE
V1IpOworCWQtPmZkID0gb3BlbihORVRNQVBfREVWSUNFX05BTUUsIE9fUkRXUik7CiAJaWYgKGQt
PmZkIDwgMCkgewogCQlzbnByaW50ZihlcnJtc2csIE1BWEVSUk1TRywgImNhbm5vdCBvcGVuIC9k
ZXYvbmV0bWFwOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CiAJCWdvdG8gZmFpbDsKQEAgLTQ4Nyw3
ICs4MjMsOSBAQAogCiAJLyogdGhlc2UgZmllbGRzIGFyZSBvdmVycmlkZGVuIGJ5IGlmbmFtZSBh
bmQgZmxhZ3MgcHJvY2Vzc2luZyAqLwogCWQtPnJlcS5ucl9yaW5naWQgfD0gbnJfcmluZ2lkOwot
CWQtPnJlcS5ucl9mbGFncyA9IG5yX2ZsYWdzOworCWQtPnJlcS5ucl9mbGFncyB8PSBucl9mbGFn
czsKKwlpZiAobnJfYXJnMikKKwkJZC0+cmVxLm5yX2FyZzIgPSBucl9hcmcyOwogCW1lbWNweShk
LT5yZXEubnJfbmFtZSwgaWZuYW1lLCBuYW1lbGVuKTsKIAlkLT5yZXEubnJfbmFtZVtuYW1lbGVu
XSA9ICdcMCc7CiAJLyogb3B0aW9uYWxseSBpbXBvcnQgaW5mbyBmcm9tIHBhcmVudCAqLwpAQCAt
NTI5LDMxICs4NjcsMTAgQEAKIAkJZ290byBmYWlsOwogCX0KIAotCWlmIChJU19ORVRNQVBfREVT
QyhwYXJlbnQpICYmIHBhcmVudC0+bWVtICYmCi0JICAgIHBhcmVudC0+cmVxLm5yX2FyZzIgPT0g
ZC0+cmVxLm5yX2FyZzIpIHsKLQkJLyogZG8gbm90IG1tYXAsIGluaGVyaXQgZnJvbSBwYXJlbnQg
Ki8KLQkJZC0+bWVtc2l6ZSA9IHBhcmVudC0+bWVtc2l6ZTsKLQkJZC0+bWVtID0gcGFyZW50LT5t
ZW07Ci0JfSBlbHNlIHsKLQkJLyogWFhYIFRPRE86IGNoZWNrIGlmIG1lbXNpemUgaXMgdG9vIGxh
cmdlIChvciB0aGVyZSBpcyBvdmVyZmxvdykgKi8KLQkJZC0+bWVtc2l6ZSA9IGQtPnJlcS5ucl9t
ZW1zaXplOwotCQlkLT5tZW0gPSBtbWFwKDAsIGQtPm1lbXNpemUsIFBST1RfV1JJVEUgfCBQUk9U
X1JFQUQsIE1BUF9TSEFSRUQsCi0JCQkJZC0+ZmQsIDApOwotCQlpZiAoZC0+bWVtID09IE1BUF9G
QUlMRUQpIHsKLQkJCXNucHJpbnRmKGVycm1zZywgTUFYRVJSTVNHLCAibW1hcCBmYWlsZWQ6ICVz
Iiwgc3RyZXJyb3IoZXJybm8pKTsKLQkJCWdvdG8gZmFpbDsKLQkJfQotCQlkLT5kb25lX21tYXAg
PSAxOwotCX0KLQl7Ci0JCXN0cnVjdCBuZXRtYXBfaWYgKm5pZnAgPSBORVRNQVBfSUYoZC0+bWVt
LCBkLT5yZXEubnJfb2Zmc2V0KTsKLQkJc3RydWN0IG5ldG1hcF9yaW5nICpyID0gTkVUTUFQX1JY
UklORyhuaWZwLCApOwotCi0JCSooc3RydWN0IG5ldG1hcF9pZiAqKikodWludHB0cl90KSYoZC0+
bmlmcCkgPSBuaWZwOwotCQkqKHN0cnVjdCBuZXRtYXBfcmluZyAqKikodWludHB0cl90KSZkLT5z
b21lX3JpbmcgPSByOwotCQkqKHZvaWQgKiopKHVpbnRwdHJfdCkmZC0+YnVmX3N0YXJ0ID0gTkVU
TUFQX0JVRihyLCAwKTsKLQkJKih2b2lkICoqKSh1aW50cHRyX3QpJmQtPmJ1Zl9lbmQgPQotCQkJ
KGNoYXIgKilkLT5tZW0gKyBkLT5tZW1zaXplOworICAgICAgICAvKiBpZiBwYXJlbnQgaXMgZGVm
aW5lZCwgZG8gbm1fbW1hcCgpIGV2ZW4gaWYgTk1fT1BFTl9OT19NTUFQIGlzIHNldCAqLworCWlm
ICgoIShuZXdfZmxhZ3MgJiBOTV9PUEVOX05PX01NQVApIHx8IHBhcmVudCkgJiYgbm1fbW1hcChk
LCBwYXJlbnQpKSB7CisJICAgICAgICBzbnByaW50ZihlcnJtc2csIE1BWEVSUk1TRywgIm1tYXAg
ZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWdvdG8gZmFpbDsKIAl9CiAKIAlucl9y
ZWcgPSBkLT5yZXEubnJfZmxhZ3MgJiBOUl9SRUdfTUFTSzsKQEAgLTYyNiwxNCArOTQzLDU0IEBA
CiAJCXJldHVybiBFSU5WQUw7CiAJaWYgKGQtPmRvbmVfbW1hcCAmJiBkLT5tZW0pCiAJCW11bm1h
cChkLT5tZW0sIGQtPm1lbXNpemUpOwotCWlmIChkLT5mZCAhPSAtMSkKKwlpZiAoZC0+ZmQgIT0g
LTEpIHsKIAkJY2xvc2UoZC0+ZmQpOworCX0KKwogCWJ6ZXJvKGQsIHNpemVvZigqZCkpOwogCWZy
ZWUoZCk7CiAJcmV0dXJuIDA7CiB9CiAKIAorc3RhdGljIGludAorbm1fbW1hcChzdHJ1Y3Qgbm1f
ZGVzYyAqZCwgY29uc3Qgc3RydWN0IG5tX2Rlc2MgKnBhcmVudCkKK3sKKwkvL1hYWCBUT0RPOiBj
aGVjayBpZiBtbWFwIGlzIGFscmVhZHkgZG9uZQorCisJaWYgKElTX05FVE1BUF9ERVNDKHBhcmVu
dCkgJiYgcGFyZW50LT5tZW0gJiYKKwkgICAgcGFyZW50LT5yZXEubnJfYXJnMiA9PSBkLT5yZXEu
bnJfYXJnMikgeworCQkvKiBkbyBub3QgbW1hcCwgaW5oZXJpdCBmcm9tIHBhcmVudCAqLworCQlE
KCJkbyBub3QgbW1hcCwgaW5oZXJpdCBmcm9tIHBhcmVudCIpOworCQlkLT5tZW1zaXplID0gcGFy
ZW50LT5tZW1zaXplOworCQlkLT5tZW0gPSBwYXJlbnQtPm1lbTsKKwl9IGVsc2UgeworCQkvKiBY
WFggVE9ETzogY2hlY2sgaWYgbWVtc2l6ZSBpcyB0b28gbGFyZ2UgKG9yIHRoZXJlIGlzIG92ZXJm
bG93KSAqLworCQlkLT5tZW1zaXplID0gZC0+cmVxLm5yX21lbXNpemU7CisJCWQtPm1lbSA9IG1t
YXAoMCwgZC0+bWVtc2l6ZSwgUFJPVF9XUklURSB8IFBST1RfUkVBRCwgTUFQX1NIQVJFRCwKKwkJ
CQlkLT5mZCwgMCk7CisJCWlmIChkLT5tZW0gPT0gTUFQX0ZBSUxFRCkgeworCQkJZ290byBmYWls
OworCQl9CisJCWQtPmRvbmVfbW1hcCA9IDE7CisJfQorCXsKKwkJc3RydWN0IG5ldG1hcF9pZiAq
bmlmcCA9IE5FVE1BUF9JRihkLT5tZW0sIGQtPnJlcS5ucl9vZmZzZXQpOworCQlzdHJ1Y3QgbmV0
bWFwX3JpbmcgKnIgPSBORVRNQVBfUlhSSU5HKG5pZnAsICk7CisKKwkJKihzdHJ1Y3QgbmV0bWFw
X2lmICoqKSh1aW50cHRyX3QpJihkLT5uaWZwKSA9IG5pZnA7CisJCSooc3RydWN0IG5ldG1hcF9y
aW5nICoqKSh1aW50cHRyX3QpJmQtPnNvbWVfcmluZyA9IHI7CisJCSoodm9pZCAqKikodWludHB0
cl90KSZkLT5idWZfc3RhcnQgPSBORVRNQVBfQlVGKHIsIDApOworCQkqKHZvaWQgKiopKHVpbnRw
dHJfdCkmZC0+YnVmX2VuZCA9CisJCQkoY2hhciAqKWQtPm1lbSArIGQtPm1lbXNpemU7CisJfQor
CisJcmV0dXJuIDA7CisKK2ZhaWw6CisJcmV0dXJuIEVJTlZBTDsKK30KKwogLyoKICAqIFNhbWUg
cHJvdG90eXBlIGFzIHBjYXBfaW5qZWN0KCksIG9ubHkgbmVlZCB0byBjYXN0LgogICovCkBAIC02
NzQsNiArMTAzMSw5IEBACiB7CiAJaW50IG4gPSBkLT5sYXN0X3J4X3JpbmcgLSBkLT5maXJzdF9y
eF9yaW5nICsgMTsKIAlpbnQgYywgZ290ID0gMCwgcmkgPSBkLT5jdXJfcnhfcmluZzsKKwlkLT5o
ZHIuYnVmID0gTlVMTDsKKwlkLT5oZHIuZmxhZ3MgPSBOTV9NT1JFX1BLVFM7CisJZC0+aGRyLmQg
PSBkOwogCiAJaWYgKGNudCA9PSAwKQogCQljbnQgPSAtMTsKQEAgLTY5MCwxNyArMTA1MCwyNCBA
QAogCQkJcmkgPSBkLT5maXJzdF9yeF9yaW5nOwogCQlyaW5nID0gTkVUTUFQX1JYUklORyhkLT5u
aWZwLCByaSk7CiAJCWZvciAoIDsgIW5tX3JpbmdfZW1wdHkocmluZykgJiYgY250ICE9IGdvdDsg
Z290KyspIHsKLQkJCXVfaW50IGkgPSByaW5nLT5jdXI7Ci0JCQl1X2ludCBpZHggPSByaW5nLT5z
bG90W2ldLmJ1Zl9pZHg7Ci0JCQl1X2NoYXIgKmJ1ZiA9ICh1X2NoYXIgKilORVRNQVBfQlVGKHJp
bmcsIGlkeCk7Ci0KKwkJCXVfaW50IGlkeCwgaTsKKwkJCWlmIChkLT5oZHIuYnVmKSB7IC8qIGZy
b20gcHJldmlvdXMgcm91bmQgKi8KKwkJCQljYihhcmcsICZkLT5oZHIsIGQtPmhkci5idWYpOwor
CQkJfQorCQkJaSA9IHJpbmctPmN1cjsKKwkJCWlkeCA9IHJpbmctPnNsb3RbaV0uYnVmX2lkeDsK
KwkJCWQtPmhkci5zbG90ID0gJnJpbmctPnNsb3RbaV07CisJCQlkLT5oZHIuYnVmID0gKHVfY2hh
ciAqKU5FVE1BUF9CVUYocmluZywgaWR4KTsKIAkJCS8vIF9fYnVpbHRpbl9wcmVmZXRjaChidWYp
OwogCQkJZC0+aGRyLmxlbiA9IGQtPmhkci5jYXBsZW4gPSByaW5nLT5zbG90W2ldLmxlbjsKIAkJ
CWQtPmhkci50cyA9IHJpbmctPnRzOwotCQkJY2IoYXJnLCAmZC0+aGRyLCBidWYpOwogCQkJcmlu
Zy0+aGVhZCA9IHJpbmctPmN1ciA9IG5tX3JpbmdfbmV4dChyaW5nLCBpKTsKIAkJfQogCX0KKwlp
ZiAoZC0+aGRyLmJ1ZikgeyAvKiBmcm9tIHByZXZpb3VzIHJvdW5kICovCisJCWQtPmhkci5mbGFn
cyA9IDA7CisJCWNiKGFyZywgJmQtPmhkciwgZC0+aGRyLmJ1Zik7CisJfQogCWQtPmN1cl9yeF9y
aW5nID0gcmk7CiAJcmV0dXJuIGdvdDsKIH0KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9uZXQv
bmV0bWFwX3ZpcnQuaCAvdXNyL3NyYy9zeXMvbmV0L25ldG1hcF92aXJ0LmgKLS0tIHVzci9zcmMv
c3lzL25ldC9uZXRtYXBfdmlydC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw
CisrKyAvdXNyL3NyYy9zeXMvbmV0L25ldG1hcF92aXJ0LmgJMjAxNi0xMS0yMyAxNjo1Nzo1Ny44
NTg5MjQwMDAgKzAwMDAKQEAgLTAsMCArMSwzMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBMdWlnaSBSaXp6bworICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgR2l1c2VwcGUg
TGV0dGllcmkKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IFZpbmNlbnpvIE1hZmZpb25lCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgU3RlZmFubyBHYXJ6YXJlbGxhCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
ICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICog
U1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2lmbmRlZiBORVRNQVBfVklS
VF9ICisjZGVmaW5lIE5FVE1BUF9WSVJUX0gKKworLyoKKyAqIHB0bmV0bWFwX21lbWRldjogZGV2
aWNlIHVzZWQgdG8gZXhwb3NlIG1lbW9yeSBpbnRvIHRoZSBndWVzdCBWTQorICoKKyAqIFRoZXNl
IG1hY3JvcyBhcmUgdXNlZCBpbiB0aGUgaHlwZXJ2aXNvciBmcm9udGVuZCAoUUVNVSwgYmh5dmUp
IGFuZCBpbiB0aGUKKyAqIGd1ZXN0IGRldmljZSBkcml2ZXIuCisgKi8KKworLyogUENJIGlkZW50
aWZpZXJzIGFuZCBQQ0kgQkFScyBmb3IgdGhlIHB0bmV0bWFwIG1lbWRldgorICogYW5kIHB0bmV0
bWFwIG5ldHdvcmsgaW50ZXJmYWNlLiAqLworI2RlZmluZSBQVE5FVE1BUF9NRU1ERVZfTkFNRSAg
ICAgICAgICAgICJwdG5ldG1hcC1tZW1kZXYiCisjZGVmaW5lIFBUTkVUTUFQX1BDSV9WRU5ET1Jf
SUQgICAgICAgICAgMHgxYjM2ICAvKiBRRU1VIHZpcnR1YWwgZGV2aWNlcyAqLworI2RlZmluZSBQ
VE5FVE1BUF9QQ0lfREVWSUNFX0lEICAgICAgICAgIDB4MDAwYyAgLyogbWVtb3J5IGRldmljZSAq
LworI2RlZmluZSBQVE5FVE1BUF9QQ0lfTkVUSUZfSUQgICAgICAgICAgIDB4MDAwZCAgLyogcHRu
ZXQgbmV0d29yayBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgUFRORVRNQVBfSU9fUENJX0JBUiAgICAg
ICAgICAgICAwCisjZGVmaW5lIFBUTkVUTUFQX01FTV9QQ0lfQkFSICAgICAgICAgICAgMQorI2Rl
ZmluZSBQVE5FVE1BUF9NU0lYX1BDSV9CQVIgICAgICAgICAgIDIKKworLyogUmVnaXN0ZXJzIGZv
ciB0aGUgcHRuZXRtYXAgbWVtZGV2ICovCisjZGVmaW5lIFBUTkVUX01ERVZfSU9fTUVNU0laRV9M
TwkwCS8qIG5ldG1hcCBtZW1vcnkgc2l6ZSAobG93KSAqLworI2RlZmluZSBQVE5FVF9NREVWX0lP
X01FTVNJWkVfSEkJNAkvKiBuZXRtYXBfbWVtb3J5X3NpemUgKGhpZ2gpICovCisjZGVmaW5lIFBU
TkVUX01ERVZfSU9fTUVNSUQJCTgJLyogbWVtb3J5IGFsbG9jYXRvciBJRCBpbiB0aGUgaG9zdCAq
LworI2RlZmluZSBQVE5FVF9NREVWX0lPX0lGX1BPT0xfT0ZTCTY0CisjZGVmaW5lIFBUTkVUX01E
RVZfSU9fSUZfUE9PTF9PQkpOVU0JNjgKKyNkZWZpbmUgUFRORVRfTURFVl9JT19JRl9QT09MX09C
SlNaCTcyCisjZGVmaW5lIFBUTkVUX01ERVZfSU9fUklOR19QT09MX09GUwk3NgorI2RlZmluZSBQ
VE5FVF9NREVWX0lPX1JJTkdfUE9PTF9PQkpOVU0JODAKKyNkZWZpbmUgUFRORVRfTURFVl9JT19S
SU5HX1BPT0xfT0JKU1oJODQKKyNkZWZpbmUgUFRORVRfTURFVl9JT19CVUZfUE9PTF9PRlMJODgK
KyNkZWZpbmUgUFRORVRfTURFVl9JT19CVUZfUE9PTF9PQkpOVU0JOTIKKyNkZWZpbmUgUFRORVRf
TURFVl9JT19CVUZfUE9PTF9PQkpTWgk5NgorI2RlZmluZSBQVE5FVF9NREVWX0lPX0VORAkJMTAw
CisKKy8qCisgKiBwdG5ldG1hcCBjb25maWd1cmF0aW9uCisgKgorICogVGhlIHB0bmV0IGt0aHJl
YWRzIChydW5uaW5nIGluIGhvc3Qga2VybmVsLXNwYWNlKSBuZWVkIHRvIGJlIGNvbmZpZ3VyZWQK
KyAqIGluIG9yZGVyIHRvIGtub3cgaG93IHRvIGludGVyY2VwdCBndWVzdCBraWNrcyAoSS9PIHJl
Z2lzdGVyIHdyaXRlcykgYW5kCisgKiBob3cgdG8gaW5qZWN0IE1TSS1YIGludGVycnVwdHMgdG8g
dGhlIGd1ZXN0LiBUaGUgY29uZmlndXJhdGlvbiBtYXkgdmFyeQorICogZGVwZW5kaW5nIG9uIHRo
ZSBoeXBlcnZpc29yLiBDdXJyZW50bHksIHdlIHN1cHBvcnQgUUVNVS9LVk0gb24gTGludXggYW5k
CisgKiBhbmQgYmh5dmUgb24gRnJlZUJTRC4KKyAqIFRoZSBjb25maWd1cmF0aW9uIGlzIHBhc3Nl
ZCBieSB0aGUgaHlwZXJ2aXNvciB0byB0aGUgaG9zdCBuZXRtYXAgbW9kdWxlCisgKiBieSBtZWFu
cyBvZiBhbiBpb2N0bCgpIHdpdGggbnJfY21kPU5FVE1BUF9QVF9IT1NUX0NSRUFURSwgYW5kIGl0
IGlzCisgKiBzcGVjaWZpZWQgYnkgdGhlIHB0bmV0bWFwX2NmZyBzdHJ1Y3QuIFRoaXMgc3RydWN0
IGNvbnRhaW5zIGFuIGhlYWRlcgorICogd2l0aCBnZW5lcmFsIGluZm9ybWF0aW9ucyBhbmQgYW4g
YXJyYXkgb2YgZW50cmllcyB3aG9zZSBzaXplIGRlcGVuZHMKKyAqIG9uIHRoZSBoeXBlcnZpc29y
LiBUaGUgTkVUTUFQX1BUX0hPU1RfQ1JFQVRFIGNvbW1hbmQgaXMgaXNzdWVkIGV2ZXJ5CisgKiB0
aW1lIHRoZSBrdGhyZWFkcyBhcmUgc3RhcnRlZC4KKyAqLworc3RydWN0IHB0bmV0bWFwX2NmZyB7
CisjZGVmaW5lIFBUTkVUTUFQX0NGR1RZUEVfUUVNVQkJMHgxCisjZGVmaW5lIFBUTkVUTUFQX0NG
R1RZUEVfQkhZVkUJCTB4MgorCXVpbnQxNl90IGNmZ3R5cGU7CS8qIGhvdyB0byBpbnRlcnByZXQg
dGhlIGNmZyBlbnRyaWVzICovCisJdWludDE2X3QgZW50cnlfc2l6ZTsJLyogc2l6ZSBvZiBhIGNv
bmZpZyBlbnRyeSAqLworCXVpbnQzMl90IG51bV9yaW5nczsJLyogbnVtYmVyIG9mIGNvbmZpZyBl
bnRyaWVzICovCisJdm9pZCAqcHRyaW5nczsJCS8qIHB0cmluZ3MgaW5zaWRlIENTQiAqLworCS8q
IENvbmZpZ3VyYXRpb24gZW50cmllcyBhcmUgYWxsb2NhdGVkIHJpZ2h0IGFmdGVyIHRoZSBzdHJ1
Y3QuICovCit9OworCisvKiBDb25maWd1cmF0aW9uIG9mIGEgcHRuZXRtYXAgcmluZyBmb3IgUUVN
VS4gKi8KK3N0cnVjdCBwdG5ldG1hcF9jZmdlbnRyeV9xZW11IHsKKwl1aW50MzJfdCBpb2V2ZW50
ZmQ7CS8qIHRvIGludGVyY2VwdCBndWVzdCByZWdpc3RlciBhY2Nlc3MgKi8KKwl1aW50MzJfdCBp
cnFmZDsJCS8qIHRvIGluamVjdCBndWVzdCBpbnRlcnJ1cHRzICovCit9OworCisvKiBDb25maWd1
cmF0aW9uIG9mIGEgcHRuZXRtYXAgcmluZyBmb3IgYmh5dmUuICovCitzdHJ1Y3QgcHRuZXRtYXBf
Y2ZnZW50cnlfYmh5dmUgeworCXVpbnQ2NF90IHdjaGFuOwkJLyogdHNsZWVwKCkgcGFyYW1ldGVy
LCB0byB3YWtlIHVwIGt0aHJlYWQgKi8KKwl1aW50MzJfdCBpb2N0bF9mZDsJLyogaW9jdGwgZmQg
Ki8KKwkvKiBpb2N0bCBwYXJhbWV0ZXJzIHRvIHNlbmQgaXJxICovCisJdWludDMyX3QgaW9jdGxf
Y21kOworCS8qIHZtbS5rbyBNU0lYIHBhcmFtZXRlcnMgZm9yIElPQ1RMICovCisJc3RydWN0IHsK
KwkJdWludDY0X3QgICAgICAgIG1zZ19kYXRhOworCQl1aW50NjRfdCAgICAgICAgYWRkcjsKKwl9
IGlvY3RsX2RhdGE7Cit9OworCisvKgorICogU3RydWN0dXJlIGZpbGxlZC1pbiBieSB0aGUga2Vy
bmVsIHdoZW4gYXNrZWQgZm9yIGFsbG9jYXRvciBpbmZvCisgKiB0aHJvdWdoIE5FVE1BUF9QT09M
U19JTkZPX0dFVC4gVXNlZCBieSBoeXBlcnZpc29ycyBzdXBwb3J0aW5nCisgKiBwdG5ldG1hcC4K
KyAqLworc3RydWN0IG5ldG1hcF9wb29sc19pbmZvIHsKKwl1aW50NjRfdCBtZW1zaXplOwkvKiBz
YW1lIGFzIG5tci0+bnJfbWVtc2l6ZSAqLworCXVpbnQzMl90IG1lbWlkOwkJLyogc2FtZSBhcyBu
bXItPm5yX2FyZzIgKi8KKwl1aW50MzJfdCBpZl9wb29sX29mZnNldDsKKwl1aW50MzJfdCBpZl9w
b29sX29ianRvdGFsOworCXVpbnQzMl90IGlmX3Bvb2xfb2Jqc2l6ZTsKKwl1aW50MzJfdCByaW5n
X3Bvb2xfb2Zmc2V0OworCXVpbnQzMl90IHJpbmdfcG9vbF9vYmp0b3RhbDsKKwl1aW50MzJfdCBy
aW5nX3Bvb2xfb2Jqc2l6ZTsKKwl1aW50MzJfdCBidWZfcG9vbF9vZmZzZXQ7CisJdWludDMyX3Qg
YnVmX3Bvb2xfb2JqdG90YWw7CisJdWludDMyX3QgYnVmX3Bvb2xfb2Jqc2l6ZTsKK307CisKKy8q
CisgKiBQYXNzIGEgcG9pbnRlciB0byBhIHVzZXJzcGFjZSBidWZmZXIgdG8gYmUgcGFzc2VkIHRv
IGtlcm5lbHNwYWNlIGZvciB3cml0ZQorICogb3IgcmVhZC4gVXNlZCBieSBORVRNQVBfUFRfSE9T
VF9DUkVBVEUgYW5kIE5FVE1BUF9QT09MU19JTkZPX0dFVC4KKyAqLworc3RhdGljIGlubGluZSB2
b2lkCitubXJlcV9wb2ludGVyX3B1dChzdHJ1Y3Qgbm1yZXEgKm5tciwgdm9pZCAqdXNlcnB0cikK
K3sKKwl1aW50cHRyX3QgKnBwID0gKHVpbnRwdHJfdCAqKSZubXItPm5yX2FyZzE7CisJKnBwID0g
KHVpbnRwdHJfdCl1c2VycHRyOworfQorCisvKiBwdG5ldG1hcCBmZWF0dXJlcyAqLworI2RlZmlu
ZSBQVE5FVE1BUF9GX1ZORVRfSERSICAgICAgICAxCisKKy8qIEkvTyByZWdpc3RlcnMgZm9yIHRo
ZSBwdG5ldCBkZXZpY2UuICovCisjZGVmaW5lIFBUTkVUX0lPX1BURkVBVAkJMAorI2RlZmluZSBQ
VE5FVF9JT19QVENUTAkJNAorI2RlZmluZSBQVE5FVF9JT19NQUNfTE8JCTgKKyNkZWZpbmUgUFRO
RVRfSU9fTUFDX0hJCQkxMgorI2RlZmluZSBQVE5FVF9JT19DU0JCQUgJCTE2CisjZGVmaW5lIFBU
TkVUX0lPX0NTQkJBTAkJMjAKKyNkZWZpbmUgUFRORVRfSU9fTklGUF9PRlMJMjQKKyNkZWZpbmUg
UFRORVRfSU9fTlVNX1RYX1JJTkdTCTI4CisjZGVmaW5lIFBUTkVUX0lPX05VTV9SWF9SSU5HUwkz
MgorI2RlZmluZSBQVE5FVF9JT19OVU1fVFhfU0xPVFMJMzYKKyNkZWZpbmUgUFRORVRfSU9fTlVN
X1JYX1NMT1RTCTQwCisjZGVmaW5lIFBUTkVUX0lPX1ZORVRfSERSX0xFTgk0NAorI2RlZmluZSBQ
VE5FVF9JT19IT1NUTUVNSUQJNDgKKyNkZWZpbmUgUFRORVRfSU9fRU5ECQk1MgorI2RlZmluZSBQ
VE5FVF9JT19LSUNLX0JBU0UJMTI4CisjZGVmaW5lIFBUTkVUX0lPX01BU0sJCTB4ZmYKKworLyog
cHRuZXRtYXAgY29udHJvbCBjb21tYW5kcyAodmFsdWVzIGZvciBQVENUTCByZWdpc3RlcikgKi8K
KyNkZWZpbmUgUFRORVRNQVBfUFRDVExfQ1JFQVRFCQkxCisjZGVmaW5lIFBUTkVUTUFQX1BUQ1RM
X0RFTEVURQkJMgorCisvKiBJZiBkZWZpbmVkLCBDU0IgaXMgYWxsb2NhdGVkIGJ5IHRoZSBndWVz
dCwgbm90IGJ5IHRoZSBob3N0LiAqLworI2RlZmluZSBQVE5FVF9DU0JfQUxMT0MKKworLyogcHRu
ZXRtYXAgcmluZyBmaWVsZHMgc2hhcmVkIGJldHdlZW4gZ3Vlc3QgYW5kIGhvc3QgKi8KK3N0cnVj
dCBwdG5ldF9yaW5nIHsKKwkvKiBYWFggcmV2aXNlIHRoZSBsYXlvdXQgdG8gbWluaW1pemUgY2Fj
aGUgYm91bmNlcy4gKi8KKwl1aW50MzJfdCBoZWFkOwkJICAvKiBHVysgSFIrIHRoZSBoZWFkIG9m
IHRoZSBndWVzdCBuZXRtYXBfcmluZyAqLworCXVpbnQzMl90IGN1cjsJCSAgLyogR1crIEhSKyB0
aGUgY3VyIG9mIHRoZSBndWVzdCBuZXRtYXBfcmluZyAqLworCXVpbnQzMl90IGd1ZXN0X25lZWRf
a2ljazsgLyogR1crIEhSKyBob3N0LS0+Z3Vlc3Qgbm90aWZpY2F0aW9uIGVuYWJsZSAqLworCXVp
bnQzMl90IHN5bmNfZmxhZ3M7CSAgLyogR1crIEhSKyB0aGUgZmxhZ3Mgb2YgdGhlIGd1ZXN0IFt0
eHxyeF1zeW5jKCkgKi8KKwl1aW50MzJfdCBod2N1cjsJCSAgLyogR1IrIEhXKyB0aGUgaHdjdXIg
b2YgdGhlIGhvc3QgbmV0bWFwX2tyaW5nICovCisJdWludDMyX3QgaHd0YWlsOwkgIC8qIEdSKyBI
VysgdGhlIGh3dGFpbCBvZiB0aGUgaG9zdCBuZXRtYXBfa3JpbmcgKi8KKwl1aW50MzJfdCBob3N0
X25lZWRfa2ljazsgIC8qIEdSKyBIVysgZ3Vlc3QtLT5ob3N0IG5vdGlmaWNhdGlvbiBlbmFibGUg
Ki8KKwljaGFyIHBhZFs0XTsKK307CisKKy8qIENTQiBmb3IgdGhlIHB0bmV0IGRldmljZS4gKi8K
K3N0cnVjdCBwdG5ldF9jc2IgeworI2RlZmluZSBORVRNQVBfVklSVF9DU0JfU0laRSAgIDQwOTYK
KwlzdHJ1Y3QgcHRuZXRfcmluZyByaW5nc1tORVRNQVBfVklSVF9DU0JfU0laRS9zaXplb2Yoc3Ry
dWN0IHB0bmV0X3JpbmcpXTsKK307CisKKyNpZmRlZiBXSVRIX1BUTkVUTUFQX0dVRVNUCisKKy8q
IHB0bmV0bWFwX21lbWRldiByb3V0aW5lcyB1c2VkIHRvIHRhbGsgd2l0aCBwdG5ldG1hcF9tZW1k
ZXYgZGV2aWNlIGRyaXZlciAqLworc3RydWN0IHB0bmV0bWFwX21lbWRldjsKK2ludCBubV9vc19w
dF9tZW1kZXZfaW9tYXAoc3RydWN0IHB0bmV0bWFwX21lbWRldiAqLCB2bV9wYWRkcl90ICosIHZv
aWQgKiosCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90ICopOwordm9pZCBubV9v
c19wdF9tZW1kZXZfaW91bm1hcChzdHJ1Y3QgcHRuZXRtYXBfbWVtZGV2ICopOwordWludDMyX3Qg
bm1fb3NfcHRfbWVtZGV2X2lvcmVhZChzdHJ1Y3QgcHRuZXRtYXBfbWVtZGV2ICosIHVuc2lnbmVk
IGludCk7CisKKy8qIEd1ZXN0IGRyaXZlcjogV3JpdGUga3JpbmcgcG9pbnRlcnMgKGN1ciwgaGVh
ZCkgdG8gdGhlIENTQi4KKyAqIFRoaXMgcm91dGluZSBpcyBjb3VwbGVkIHdpdGggcHRuZXRtYXBf
aG9zdF9yZWFkX2tyaW5nX2NzYigpLiAqLworc3RhdGljIGlubGluZSB2b2lkCitwdG5ldG1hcF9n
dWVzdF93cml0ZV9rcmluZ19jc2Ioc3RydWN0IHB0bmV0X3JpbmcgKnB0ciwgdWludDMyX3QgY3Vy
LAorCQkJICAgICAgIHVpbnQzMl90IGhlYWQpCit7CisgICAgLyoKKyAgICAgKiBXZSBuZWVkIHRv
IHdyaXRlIGN1ciBhbmQgaGVhZCB0byB0aGUgQ1NCIGJ1dCB3ZSBjYW5ub3QgZG8gaXQgYXRvbWlj
YWxseS4KKyAgICAgKiBUaGVyZSBpcyBubyB3YXkgd2UgY2FuIHByZXZlbnQgdGhlIGhvc3QgZnJv
bSByZWFkaW5nIHRoZSB1cGRhdGVkIHZhbHVlCisgICAgICogb2Ygb25lIG9mIHRoZSB0d28gYW5k
IHRoZSBvbGQgdmFsdWUgb2YgdGhlIG90aGVyLiBIb3dldmVyLCBpZiB3ZSBtYWtlCisgICAgICog
c3VyZSB0aGF0IHRoZSBob3N0IG5ldmVyIHJlYWRzIGEgdmFsdWUgb2YgaGVhZCBtb3JlIHJlY2Vu
dCB0aGFuIHRoZQorICAgICAqIHZhbHVlIG9mIGN1ciB3ZSBhcmUgc2FmZS4gV2UgY2FuIGFsbG93
IHRoZSBob3N0IHRvIHJlYWQgYSB2YWx1ZSBvZiBjdXIKKyAgICAgKiBtb3JlIHJlY2VudCB0aGFu
IHRoZSB2YWx1ZSBvZiBoZWFkLCBzaW5jZSBpbiB0aGUgbmV0bWFwIHJpbmcgY3VyIGNhbiBiZQor
ICAgICAqIGFoZWFkIG9mIGhlYWQgYW5kIGN1ciBjYW5ub3Qgd3JhcCBhcm91bmQgaGVhZCBiZWNh
dXNlIGl0IG11c3QgYmUgYmVoaW5kCisgICAgICogdGFpbC4gSW52ZXJ0aW5nIHRoZSBvcmRlciBv
ZiB3cml0ZXMgYmVsb3cgY291bGQgaW5zdGVhZCByZXN1bHQgaW50byB0aGUKKyAgICAgKiBob3N0
IHRvIHRoaW5rIGhlYWQgd2VudCBhaGVhZCBvZiBjdXIsIHdoaWNoIHdvdWxkIGNhdXNlIHRoZSBz
eW5jCisgICAgICogcHJvbG9ndWUgdG8gZmFpbC4KKyAgICAgKgorICAgICAqIFRoZSBmb2xsb3dp
bmcgbWVtb3J5IGJhcnJpZXIgc2NoZW1lIGlzIHVzZWQgdG8gbWFrZSB0aGlzIGhhcHBlbjoKKyAg
ICAgKgorICAgICAqICAgICAgICAgIEd1ZXN0ICAgICAgICAgICAgICBIb3N0CisgICAgICoKKyAg
ICAgKiAgICAgICAgICBTVE9SRShjdXIpICAgICAgICAgTE9BRChoZWFkKQorICAgICAqICAgICAg
ICAgIG1iKCkgPC0tLS0tLS0tLS0tPiBtYigpCisgICAgICogICAgICAgICAgU1RPUkUoaGVhZCkg
ICAgICAgIExPQUQoY3VyKQorICAgICAqLworICAgIHB0ci0+Y3VyID0gY3VyOworICAgIG1iKCk7
CisgICAgcHRyLT5oZWFkID0gaGVhZDsKK30KKworLyogR3Vlc3QgZHJpdmVyOiBSZWFkIGtyaW5n
IHBvaW50ZXJzIChod2N1ciwgaHd0YWlsKSBmcm9tIHRoZSBDU0IuCisgKiBUaGlzIHJvdXRpbmUg
aXMgY291cGxlZCB3aXRoIHB0bmV0bWFwX2hvc3Rfd3JpdGVfa3JpbmdfY3NiKCkuICovCitzdGF0
aWMgaW5saW5lIHZvaWQKK3B0bmV0bWFwX2d1ZXN0X3JlYWRfa3JpbmdfY3NiKHN0cnVjdCBwdG5l
dF9yaW5nICpwdHIsIHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nKQoreworICAgIC8qCisgICAg
ICogV2UgcGxhY2UgYSBtZW1vcnkgYmFycmllciB0byBtYWtlIHN1cmUgdGhhdCB0aGUgdXBkYXRl
IG9mIGh3dGFpbCBuZXZlcgorICAgICAqIG92ZXJ0YWtlcyB0aGUgdXBkYXRlIG9mIGh3Y3VyLgor
ICAgICAqIChzZWUgZXhwbGFuYXRpb24gaW4gcHRuZXRtYXBfaG9zdF93cml0ZV9rcmluZ19jc2Ip
LgorICAgICAqLworICAgIGtyaW5nLT5ucl9od3RhaWwgPSBwdHItPmh3dGFpbDsKKyAgICBtYigp
OworICAgIGtyaW5nLT5ucl9od2N1ciA9IHB0ci0+aHdjdXI7Cit9CisKKyNlbmRpZiAvKiBXSVRI
X1BUTkVUTUFQX0dVRVNUICovCisKKyNpZmRlZiBXSVRIX1BUTkVUTUFQX0hPU1QKKy8qCisgKiBw
dG5ldG1hcCBrZXJuZWwgdGhyZWFkIHJvdXRpbmVzCisgKiAqLworCisvKiBGdW5jdGlvbnMgdG8g
cmVhZCBhbmQgd3JpdGUgQ1NCIGZpZWxkcyBpbiB0aGUgaG9zdCAqLworI2lmIGRlZmluZWQgKGxp
bnV4KQorI2RlZmluZSBDU0JfUkVBRChjc2IsIGZpZWxkLCByKSAoZ2V0X3VzZXIociwgJmNzYi0+
ZmllbGQpKQorI2RlZmluZSBDU0JfV1JJVEUoY3NiLCBmaWVsZCwgdikgKHB1dF91c2VyKHYsICZj
c2ItPmZpZWxkKSkKKyNlbHNlICAvKiAhIGxpbnV4ICovCisjZGVmaW5lIENTQl9SRUFEKGNzYiwg
ZmllbGQsIHIpIChyID0gZnV3b3JkMzIoJmNzYi0+ZmllbGQpKQorI2RlZmluZSBDU0JfV1JJVEUo
Y3NiLCBmaWVsZCwgdikgKHN1d29yZDMyKCZjc2ItPmZpZWxkLCB2KSkKKyNlbmRpZiAvKiAhIGxp
bnV4ICovCisKKy8qIEhvc3QgbmV0bWFwOiBXcml0ZSBrcmluZyBwb2ludGVycyAoaHdjdXIsIGh3
dGFpbCkgdG8gdGhlIENTQi4KKyAqIFRoaXMgcm91dGluZSBpcyBjb3VwbGVkIHdpdGggcHRuZXRt
YXBfZ3Vlc3RfcmVhZF9rcmluZ19jc2IoKS4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorcHRuZXRt
YXBfaG9zdF93cml0ZV9rcmluZ19jc2Ioc3RydWN0IHB0bmV0X3JpbmcgX191c2VyICpwdHIsIHVp
bnQzMl90IGh3Y3VyLAorICAgICAgICB1aW50MzJfdCBod3RhaWwpCit7CisgICAgLyoKKyAgICAg
KiBUaGUgc2FtZSBzY2hlbWUgdXNlZCBpbiBwdG5ldG1hcF9ndWVzdF93cml0ZV9rcmluZ19jc2Io
KSBhcHBsaWVzIGhlcmUuCisgICAgICogV2UgYWxsb3cgdGhlIGd1ZXN0IHRvIHJlYWQgYSB2YWx1
ZSBvZiBod2N1ciBtb3JlIHJlY2VudCB0aGFuIHRoZSB2YWx1ZQorICAgICAqIG9mIGh3dGFpbCwg
c2luY2UgdGhpcyB3b3VsZCBhbnl3YXkgcmVzdWx0IGluIGEgY29uc2lzdGVudCB2aWV3IG9mIHRo
ZQorICAgICAqIHJpbmcgc3RhdGUgKGFuZCBod2N1ciBjYW4gbmV2ZXIgd3JhcGFyb3VuZCBod3Rh
aWwsIHNpbmNlIGh3Y3VyIG11c3QgYmUKKyAgICAgKiBiZWhpbmQgaGVhZCkuCisgICAgICoKKyAg
ICAgKiBUaGUgZm9sbG93aW5nIG1lbW9yeSBiYXJyaWVyIHNjaGVtZSBpcyB1c2VkIHRvIG1ha2Ug
dGhpcyBoYXBwZW46CisgICAgICoKKyAgICAgKiAgICAgICAgICBHdWVzdCAgICAgICAgICAgICAg
ICBIb3N0CisgICAgICoKKyAgICAgKiAgICAgICAgICBTVE9SRShod2N1cikgICAgICAgICBMT0FE
KGh3dGFpbCkKKyAgICAgKiAgICAgICAgICBtYigpIDwtLS0tLS0tLS0tLS0tPiBtYigpCisgICAg
ICogICAgICAgICAgU1RPUkUoaHd0YWlsKSAgICAgICAgTE9BRChod2N1cikKKyAgICAgKi8KKyAg
ICBDU0JfV1JJVEUocHRyLCBod2N1ciwgaHdjdXIpOworICAgIG1iKCk7CisgICAgQ1NCX1dSSVRF
KHB0ciwgaHd0YWlsLCBod3RhaWwpOworfQorCisvKiBIb3N0IG5ldG1hcDogUmVhZCBrcmluZyBw
b2ludGVycyAoaGVhZCwgY3VyLCBzeW5jX2ZsYWdzKSBmcm9tIHRoZSBDU0IuCisgKiBUaGlzIHJv
dXRpbmUgaXMgY291cGxlZCB3aXRoIHB0bmV0bWFwX2d1ZXN0X3dyaXRlX2tyaW5nX2NzYigpLiAq
Lworc3RhdGljIGlubGluZSB2b2lkCitwdG5ldG1hcF9ob3N0X3JlYWRfa3JpbmdfY3NiKHN0cnVj
dCBwdG5ldF9yaW5nIF9fdXNlciAqcHRyLAorCQkJICAgICBzdHJ1Y3QgbmV0bWFwX3JpbmcgKnNo
YWRvd19yaW5nLAorCQkJICAgICB1aW50MzJfdCBudW1fc2xvdHMpCit7CisgICAgLyoKKyAgICAg
KiBXZSBwbGFjZSBhIG1lbW9yeSBiYXJyaWVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB1cGRhdGUg
b2YgaGVhZCBuZXZlcgorICAgICAqIG92ZXJ0YWtlcyB0aGUgdXBkYXRlIG9mIGN1ci4KKyAgICAg
KiAoc2VlIGV4cGxhbmF0aW9uIGluIHB0bmV0bWFwX2d1ZXN0X3dyaXRlX2tyaW5nX2NzYikuCisg
ICAgICovCisgICAgQ1NCX1JFQUQocHRyLCBoZWFkLCBzaGFkb3dfcmluZy0+aGVhZCk7CisgICAg
bWIoKTsKKyAgICBDU0JfUkVBRChwdHIsIGN1ciwgc2hhZG93X3JpbmctPmN1cik7CisgICAgQ1NC
X1JFQUQocHRyLCBzeW5jX2ZsYWdzLCBzaGFkb3dfcmluZy0+ZmxhZ3MpOworfQorCisjZW5kaWYg
LyogV0lUSF9QVE5FVE1BUF9IT1NUICovCisKKyNlbmRpZiAvKiBORVRNQVBfVklSVF9IICovCmRp
ZmYgLXUgLXIgLU4gdXNyL3NyYy91c3Ivc3JjLy5hcmNjb25maWcgL3Vzci9zcmMvdXNyL3NyYy8u
YXJjY29uZmlnCi0tLSB1c3Ivc3JjL3Vzci9zcmMvLmFyY2NvbmZpZwkxOTcwLTAxLTAxIDAxOjAw
OjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvdXNyL3NyYy8uYXJjY29uZmlnCTIwMTYt
MDktMjkgMDA6MjY6MzYuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNSBAQAoreworCSJyZXBv
c2l0b3J5LmNhbGxzaWduIiA6ICJTIiwKKwkicGhhYnJpY2F0b3IudXJpIiA6ICJodHRwczovL3Jl
dmlld3MuZnJlZWJzZC5vcmcvIiwKKwkiaGlzdG9yeS5pbW11dGFibGUiIDogdHJ1ZQorfQpkaWZm
IC11IC1yIC1OIHVzci9zcmMvdXNyL3NyYy8uYXJjbGludCAvdXNyL3NyYy91c3Ivc3JjLy5hcmNs
aW50Ci0tLSB1c3Ivc3JjL3Vzci9zcmMvLmFyY2xpbnQJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAw
MDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3Vzci9zcmMvLmFyY2xpbnQJMjAxNi0wOS0yOSAwMDoy
NjozNi4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwyNSBAQAoreworICAiZXhjbHVkZSI6ICIo
Y29udHJpYnxjcnlwdG8pIiwKKyAgImxpbnRlcnMiOiB7CisgICAgInB5dGhvbiI6IHsKKyAgICAg
ICJ0eXBlIjogInBlcDgiLAorICAgICAgImluY2x1ZGUiOiAiKFxcLnB5JCkiCisgICAgfSwKKyAg
ICAic3BlbGxpbmciOiB7CisgICAgICAidHlwZSI6ICJzcGVsbGluZyIKKyAgICB9LAorICAgICJj
aG1vZCI6IHsKKyAgICAgICJ0eXBlIjogImNobW9kIgorICAgIH0sCisgICAgIm1lcmdlLWNvbmZs
aWN0IjogeworICAgICAgInR5cGUiOiAibWVyZ2UtY29uZmxpY3QiCisgICAgfSwKKyAgICAiZmls
ZW5hbWUiOiB7CisgICAgICAidHlwZSI6ICJmaWxlbmFtZSIKKyAgICB9LAorICAgICJqc29uIjog
eworICAgICAgInR5cGUiOiAianNvbiIsCisgICAgICAiaW5jbHVkZSI6ICIoXFwuYXJjbGludHxc
XC5qc29uJCkiCisgICAgfQorICB9Cit9CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy91c3Iuc2Jpbi9i
aHl2ZS9NYWtlZmlsZSAvdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9NYWtlZmlsZQotLS0gdXNyL3Ny
Yy91c3Iuc2Jpbi9iaHl2ZS9NYWtlZmlsZQkyMDE2LTA5LTI5IDAwOjI1OjA3LjAwMDAwMDAwMCAr
MDEwMAorKysgL3Vzci9zcmMvdXNyLnNiaW4vYmh5dmUvTWFrZWZpbGUJMjAxNi0xMS0zMCAxMDo1
NjowNS44MDcyNTAwMDAgKzAwMDAKQEAgLTI3LDYgKzI3LDggQEAKIAltZW0uYwkJCVwKIAltZXZl
bnQuYwkJXAogCW1wdGJsLmMJCQlcCisJbmV0X2JhY2tlbmRzLmMJCVwKKwluZXRfdXRpbHMuYwkJ
XAogCXBjaV9haGNpLmMJCVwKIAlwY2lfZW11bC5jCQlcCiAJcGNpX2ZidWYuYwkJXApAQCAtMzQs
NiArMzYsOCBAQAogCXBjaV9pcnEuYwkJXAogCXBjaV9scGMuYwkJXAogCXBjaV9wYXNzdGhydS5j
CQlcCisJcGNpX3B0bmV0bWFwX21lbWRldi5jCVwKKwlwY2lfcHRuZXRtYXBfbmV0aWYuYwlcCiAJ
cGNpX3ZpcnRpb19ibG9jay5jCVwKIAlwY2lfdmlydGlvX25ldC5jCVwKIAlwY2lfdmlydGlvX3Ju
ZC5jCVwKQEAgLTYyLDYgKzY2LDggQEAKIExJQkFERD0Jdm1tYXBpIG1kIHB0aHJlYWQgegogCiBD
RkxBR1MrPSAtSSR7QkhZVkVfU1lTRElSfS9zeXMvZGV2L3VzYi9jb250cm9sbGVyCitDRkxBR1Mr
PSAtSSR7QkhZVkVfU1lTRElSfS9zeXMvCitDRkxBR1MrPSAtRFdJVEhfTkVUTUFQCiAKIFdBUk5T
Pz0JMgogCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9NYWtlZmlsZS5vcmln
IC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL01ha2VmaWxlLm9yaWcKLS0tIHVzci9zcmMvdXNyLnNi
aW4vYmh5dmUvTWFrZWZpbGUub3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEw
MAorKysgL3Vzci9zcmMvdXNyLnNiaW4vYmh5dmUvTWFrZWZpbGUub3JpZwkyMDE2LTExLTMwIDEw
OjUyOjU5Ljg4MzE2NDAwMCArMDAwMApAQCAtMCwwICsxLDY4IEBACisjCisjICRGcmVlQlNEOiBy
ZWxlbmcvMTEuMC91c3Iuc2Jpbi9iaHl2ZS9NYWtlZmlsZSAzMDIzMzIgMjAxNi0wNy0wNCAwMzox
OTowNlogZ3JlaGFuICQKKyMKKworUFJPRz0JYmh5dmUKK1BBQ0tBR0U9CWJoeXZlCisKK0RFQlVH
X0ZMQUdTPSAtZyAtTzAKKworTUFOPQliaHl2ZS44CisKK0JIWVZFX1NZU0RJUj89JHtTUkNUT1B9
CisKK1NSQ1M9CVwKKwlhdGtiZGMuYwkJXAorCWFjcGkuYwkJCVwKKwliaHl2ZWdjLmMJCVwKKwli
aHl2ZXJ1bi5jCQlcCisJYmxvY2tfaWYuYwkJXAorCWJvb3Ryb20uYwkJXAorCWNvbnNvbGUuYwkJ
XAorCWNvbnNwb3J0LmMJCVwKKwlkYmdwb3J0LmMJCVwKKwlmd2N0bC5jCQkJXAorCWlub3V0LmMJ
CQlcCisJaW9hcGljLmMJCVwKKwltZW0uYwkJCVwKKwltZXZlbnQuYwkJXAorCW1wdGJsLmMJCQlc
CisJcGNpX2FoY2kuYwkJXAorCXBjaV9lbXVsLmMJCVwKKwlwY2lfZmJ1Zi5jCQlcCisJcGNpX2hv
c3RicmlkZ2UuYwlcCisJcGNpX2lycS5jCQlcCisJcGNpX2xwYy5jCQlcCisJcGNpX3Bhc3N0aHJ1
LmMJCVwKKwlwY2lfdmlydGlvX2Jsb2NrLmMJXAorCXBjaV92aXJ0aW9fbmV0LmMJXAorCXBjaV92
aXJ0aW9fcm5kLmMJXAorCXBjaV91YXJ0LmMJCVwKKwlwY2lfeGhjaS5jCQlcCisJcG0uYwkJCVwK
Kwlwb3N0LmMJCQlcCisJcHMya2JkLmMJCVwKKwlwczJtb3VzZS5jCQlcCisJcmZiLmMJCQlcCisJ
cnRjLmMJCQlcCisJc21iaW9zdGJsLmMJCVwKKwlzb2Nrc3RyZWFtLmMJCVwKKwl0YXNrX3N3aXRj
aC5jCQlcCisJdWFydF9lbXVsLmMJCVwKKwl1c2JfZW11bC5jCQlcCisJdXNiX21vdXNlLmMJCVwK
Kwl2aXJ0aW8uYwkJXAorCXZnYS5jCQkJXAorCXhtc3IuYwkJCVwKKwlzcGludXBfYXAuYworCisu
UEFUSDogICR7QkhZVkVfU1lTRElSfS9zeXMvYW1kNjQvdm1tCitTUkNTKz0Jdm1tX2luc3RydWN0
aW9uX2VtdWwuYworCitMSUJBREQ9CXZtbWFwaSBtZCBwdGhyZWFkIHoKKworQ0ZMQUdTKz0gLUkk
e0JIWVZFX1NZU0RJUn0vc3lzL2Rldi91c2IvY29udHJvbGxlcgorCitXQVJOUz89CTIKKworLmlu
Y2x1ZGUgPGJzZC5wcm9nLm1rPgpkaWZmIC11IC1yIC1OIHVzci9zcmMvdXNyLnNiaW4vYmh5dmUv
bmV0X2JhY2tlbmRzLmMgL3Vzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X2JhY2tlbmRzLmMKLS0t
IHVzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X2JhY2tlbmRzLmMJMTk3MC0wMS0wMSAwMTowMDow
MC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF9iYWNrZW5k
cy5jCTIwMTYtMTItMDEgMTE6MTM6NTQuODEyNjc5MDAwICswMDAwCkBAIC0wLDAgKzEsMTA4MiBA
QAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNiBWaW5jZW56byBNYWZmaW9uZQorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SU2BgQVMgSVMnJyBBTkQKKyAqIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAor
ICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwKKyAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIG11bHRp
cGxlIG5ldHdvcmsgYmFja2VuZHMgKG51bGwsIHRhcCwgbmV0bWFwLCAuLi4pLAorICogdG8gYmUg
dXNlZCBieSBuZXR3b3JrIGZyb250ZW5kcyBzdWNoIGFzIHZpcnRpby1uZXQgYW5kIHB0bmV0Lgor
ICogVGhlIEFQSSB0byBhY2Nlc3MgdGhlIGJhY2tlbmQgKGUuZy4gc2VuZC9yZWNlaXZlIHBhY2tl
dHMsIG5lZ290aWF0ZQorICogZmVhdHVyZXMpIGlzIGV4cG9ydGVkIGJ5IG5ldF9iYWNrZW5kcy5o
LgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdWlvLmg+Cisj
aW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxz
eXMvdHlwZXMuaD4JCS8qIHVfc2hvcnQgZXRjICovCisjaW5jbHVkZSA8bmV0L2lmLmg+CisKKyNp
bmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJp
bmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRl
IDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8cHRocmVhZF9ucC5oPgorI2luY2x1ZGUgPHBvbGwuaD4K
KyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgIm1ldmVudC5oIgorI2luY2x1ZGUgIm5l
dF9iYWNrZW5kcy5oIgorCisjaW5jbHVkZSA8c3lzL2xpbmtlcl9zZXQuaD4KKworLyoKKyAqIEVh
Y2ggbmV0d29yayBiYWNrZW5kIHJlZ2lzdGVycyBhIHNldCBvZiBmdW5jdGlvbiBwb2ludGVycyB0
aGF0IGFyZQorICogdXNlZCB0byBpbXBsZW1lbnQgdGhlIG5ldCBiYWNrZW5kcyBBUEkuCisgKiBU
aGlzIG1pZ2h0IG5lZWQgdG8gYmUgZXhwb3NlZCBpZiB3ZSBpbXBsZW1lbnQgYmFja2VuZHMgaW4g
c2VwYXJhdGUgZmlsZXMuCisgKi8KK3N0cnVjdCBuZXRfYmFja2VuZCB7CisJY29uc3QgY2hhciAq
bmFtZTsJLyogbmFtZSBvZiB0aGUgYmFja2VuZCAqLworCS8qCisJICogVGhlIGluaXQgYW5kIGNs
ZWFudXAgZnVuY3Rpb25zIGFyZSB1c2VkIGludGVybmFsbHksCisJICogdmlydGlvLW5ldCBzaG91
bGQgbmV2ZXIgdXNlIGl0LgorCSAqLworCWludCAoKmluaXQpKHN0cnVjdCBuZXRfYmFja2VuZCAq
YmUsIGNvbnN0IGNoYXIgKmRldm5hbWUsCisJCQkJbmV0X2JhY2tlbmRfY2JfdCBjYiwgdm9pZCAq
cGFyYW0pOworCXZvaWQgKCpjbGVhbnVwKShzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKTsKKworCisJ
LyoKKwkgKiBDYWxsZWQgdG8gc2VydmUgYSBndWVzdCB0cmFuc21pdCByZXF1ZXN0LiBUaGUgc2Nh
dHRlci1nYXRoZXIKKwkgKiB2ZWN0b3IgcHJvdmlkZWQgYnkgdGhlIGNhbGxlciBoYXMgJ2lvdmNu
dCcgZWxlbWVudHMgYW5kIGNvbnRhaW5zCisJICogdGhlIHBhY2tldCB0byBzZW5kLiAnbGVuJyBp
cyB0aGUgbGVuZ3RoIG9mIHdob2xlIHBhY2tldCBpbiBieXRlcy4KKwkgKi8KKwlpbnQgKCpzZW5k
KShzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCWludCBpb3Zj
bnQsIHVpbnQzMl90IGxlbiwgaW50IG1vcmUpOworCisJLyoKKwkgKiBDYWxsZWQgdG8gc2VydmUg
Z3Vlc3QgcmVjZWl2ZSByZXF1ZXN0LiBXaGVuIHRoZSBmdW5jdGlvbgorCSAqIHJldHVybnMgYSBw
b3NpdGl2ZSB2YWx1ZSwgdGhlIHNjYXR0ZXItZ2F0aGVyIHZlY3RvcgorCSAqIHByb3ZpZGVkIGJ5
IHRoZSBjYWxsZXIgKGhhdmluZyAnaW92Y250JyBlbGVtZW50cyBpbiBpdCkgd2lsbAorCSAqIGNv
bnRhaW4gYSBjaHVuayBvZiB0aGUgcmVjZWl2ZWQgcGFja2V0LiBUaGUgJ21vcmUnIGZsYWcgd2ls
bAorCSAqIGJlIHNldCBpZiB0aGUgcmV0dXJuZWQgY2h1bmsgd2FzIHRoZSBsYXN0IG9uZSBmb3Ig
dGhlIGN1cnJlbnQKKwkgKiBwYWNrZXQsIGFuZCAwIG90aGVyd2lzZS4gVGhlIGZ1bmN0aW9uIHJl
dHVybnMgdGhlIGNodW5rIHNpemUKKwkgKiBpbiBieXRlcywgb3IgMCBpZiB0aGUgYmFja2VuZCBk
b2Vzbid0IGhhdmUgYSBuZXcgcGFja2V0IHRvCisJICogcmVjZWl2ZS4KKwkgKiBOb3RlIHRoYXQg
aXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBjYWxsIHRoaXMgY2FsbGJhY2sgbWFueQorCSAqIHRpbWVz
IHRvIHJlY2VpdmUgYSBzaW5nbGUgcGFja2V0LCBkZXBlbmRpbmcgb2YgaG93IGJpZyBpcworCSAq
IGJ1ZmZlcnMgeW91IHByb3ZpZGUuCisJICovCisJaW50ICgqcmVjdikoc3RydWN0IG5ldF9iYWNr
ZW5kICpiZSwgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQpOworCisJLyoKKwkgKiBBc2sg
dGhlIGJhY2tlbmQgZm9yIHRoZSB2aXJ0aW8tbmV0IGZlYXR1cmVzIGl0IGlzIGFibGUgdG8KKwkg
KiBzdXBwb3J0LiBQb3NzaWJsZSBmZWF0dXJlcyBhcmUgVFNPLCBVRk8gYW5kIGNoZWNrc3VtIG9m
ZmxvYWRpbmcKKwkgKiBpbiBib3RoIHJ4IGFuZCB0eCBkaXJlY3Rpb24gYW5kIGZvciBib3RoIElQ
djQgYW5kIElQdjYuCisJICovCisJdWludDY0X3QgKCpnZXRfY2FwKShzdHJ1Y3QgbmV0X2JhY2tl
bmQgKmJlKTsKKworCS8qCisJICogVGVsbCB0aGUgYmFja2VuZCB0byBlbmFibGUvZGlzYWJsZSB0
aGUgc3BlY2lmaWVkIHZpcnRpby1uZXQKKwkgKiBmZWF0dXJlcyAoY2FwYWJpbGl0aWVzKS4KKwkg
Ki8KKwlpbnQgKCpzZXRfY2FwKShzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCB1aW50NjRfdCBmZWF0
dXJlcywKKwkJICAgICAgIHVuc2lnbmVkIGludCB2bmV0X2hkcl9sZW4pOworCisJc3RydWN0IHBj
aV92dG5ldF9zb2Z0YyAqc2M7CisJaW50IGZkOworCXVuc2lnbmVkIGludCBiZV92bmV0X2hkcl9s
ZW47CisJdW5zaWduZWQgaW50IGZlX3ZuZXRfaGRyX2xlbjsKKwl2b2lkICpwcml2OwkvKiBQb2lu
dGVyIHRvIGJhY2tlbmQtc3BlY2lmaWMgZGF0YS4gKi8KK307CisKK1NFVF9ERUNMQVJFKG5ldF9i
YWNrZW5kX3MsIHN0cnVjdCBuZXRfYmFja2VuZCk7CisKKyNkZWZpbmUgVk5FVF9IRFJfTEVOCXNp
emVvZihzdHJ1Y3QgdmlydGlvX25ldF9yeGhkcikKKworI2RlZmluZSBXUFJJTlRGKHBhcmFtcykg
cHJpbnRmIHBhcmFtcworCisvKiB0aGUgbnVsbCBiYWNrZW5kICovCitzdGF0aWMgaW50CituZXRi
ZV9udWxsX2luaXQoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgY29uc3QgY2hhciAqZGV2bmFtZSwK
KwkJCW5ldF9iYWNrZW5kX2NiX3QgY2IsIHZvaWQgKnBhcmFtKQoreworCSh2b2lkKWRldm5hbWU7
ICh2b2lkKWNiOyAodm9pZClwYXJhbTsKKwliZS0+ZmQgPSAtMTsKKwlyZXR1cm4gMDsKK30KKwor
c3RhdGljIHZvaWQKK25ldGJlX251bGxfY2xlYW51cChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKQor
eworCSh2b2lkKWJlOworfQorCitzdGF0aWMgdWludDY0X3QKK25ldGJlX251bGxfZ2V0X2NhcChz
dHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKQoreworCSh2b2lkKWJlOworCXJldHVybiAwOworfQorCitz
dGF0aWMgaW50CituZXRiZV9udWxsX3NldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgdWlu
dDY0X3QgZmVhdHVyZXMsCisJCQl1bnNpZ25lZCB2bmV0X2hkcl9sZW4pCit7CisJKHZvaWQpYmU7
ICh2b2lkKWZlYXR1cmVzOyAodm9pZCl2bmV0X2hkcl9sZW47CisJcmV0dXJuIDA7Cit9CisKK3N0
YXRpYyBpbnQKK25ldGJlX251bGxfc2VuZChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3Qg
aW92ZWMgKmlvdiwKKwlpbnQgaW92Y250LCB1aW50MzJfdCBsZW4sIGludCBtb3JlKQoreworCSh2
b2lkKWJlOyAodm9pZClpb3Y7ICh2b2lkKWlvdmNudDsgKHZvaWQpbGVuOyAodm9pZCltb3JlOwor
CXJldHVybiAwOyAvKiBwcmV0ZW5kIHdlIHNlbmQgKi8KK30KKworc3RhdGljIGludAorbmV0YmVf
bnVsbF9yZWN2KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQg
aW92Y250KQoreworCSh2b2lkKWJlOyAodm9pZClpb3Y7ICh2b2lkKWlvdmNudDsKKwlmcHJpbnRm
KHN0ZGVyciwgIm5ldGJlX251bGxfcmVjdiBjYWxsZWQgP1xuIik7CisJcmV0dXJuIC0xOyAvKiBu
ZXZlciBjYWxsZWQsIGkgYmVsaWV2ZSAqLworfQorCitzdGF0aWMgc3RydWN0IG5ldF9iYWNrZW5k
IG5fYmUgPSB7CisJLm5hbWUgPSAibnVsbCIsCisJLmluaXQgPSBuZXRiZV9udWxsX2luaXQsCisJ
LmNsZWFudXAgPSBuZXRiZV9udWxsX2NsZWFudXAsCisJLnNlbmQgPSBuZXRiZV9udWxsX3NlbmQs
CisJLnJlY3YgPSBuZXRiZV9udWxsX3JlY3YsCisJLmdldF9jYXAgPSBuZXRiZV9udWxsX2dldF9j
YXAsCisJLnNldF9jYXAgPSBuZXRiZV9udWxsX3NldF9jYXAsCit9OworCitEQVRBX1NFVChuZXRf
YmFja2VuZF9zLCBuX2JlKTsKKworCisvKiB0aGUgdGFwIGJhY2tlbmQgKi8KKworc3RydWN0IHRh
cF9wcml2IHsKKwlzdHJ1Y3QgbWV2ZW50ICptZXZwOworfTsKKworc3RhdGljIHZvaWQKK3RhcF9j
bGVhbnVwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJc3RydWN0IHRhcF9wcml2ICpwcml2
ID0gYmUtPnByaXY7CisKKwlpZiAoYmUtPnByaXYpIHsKKwkJbWV2ZW50X2RlbGV0ZShwcml2LT5t
ZXZwKTsKKwkJZnJlZShiZS0+cHJpdik7CisJCWJlLT5wcml2ID0gTlVMTDsKKwl9CisJaWYgKGJl
LT5mZCAhPSAtMSkgeworCQljbG9zZShiZS0+ZmQpOworCQliZS0+ZmQgPSAtMTsKKwl9Cit9CisK
K3N0YXRpYyBpbnQKK3RhcF9pbml0KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIGNvbnN0IGNoYXIg
KmRldm5hbWUsCisJIG5ldF9iYWNrZW5kX2NiX3QgY2IsIHZvaWQgKnBhcmFtKQoreworCWNoYXIg
dGJ1Zls4MF07CisJaW50IGZkOworCWludCBvcHQgPSAxOworCXN0cnVjdCB0YXBfcHJpdiAqcHJp
djsKKworCWlmIChjYiA9PSBOVUxMKSB7CisJCVdQUklOVEYoKCJUQVAgYmFja2VuZCByZXF1aXJl
cyBub24tTlVMTCBjYWxsYmFja1xuIikpOworCQlyZXR1cm4gLTE7CisJfQorCisJcHJpdiA9IGNh
bGxvYygxLCBzaXplb2Yoc3RydWN0IHRhcF9wcml2KSk7CisJaWYgKHByaXYgPT0gTlVMTCkgewor
CQlXUFJJTlRGKCgidGFwX3ByaXYgYWxsb2MgZmFpbGVkXG4iKSk7CisJCXJldHVybiAtMTsKKwl9
CisKKwlzdHJjcHkodGJ1ZiwgIi9kZXYvIik7CisJc3RybGNhdCh0YnVmLCBkZXZuYW1lLCBzaXpl
b2YodGJ1ZikpOworCisJZmQgPSBvcGVuKHRidWYsIE9fUkRXUik7CisJaWYgKGZkID09IC0xKSB7
CisJCVdQUklOVEYoKCJvcGVuIG9mIHRhcCBkZXZpY2UgJXMgZmFpbGVkXG4iLCB0YnVmKSk7CisJ
CWdvdG8gZXJyb3I7CisJfQorCisJLyoKKwkgKiBTZXQgbm9uLWJsb2NraW5nIGFuZCByZWdpc3Rl
ciBmb3IgcmVhZAorCSAqIG5vdGlmaWNhdGlvbnMgd2l0aCB0aGUgZXZlbnQgbG9vcAorCSAqLwor
CWlmIChpb2N0bChmZCwgRklPTkJJTywgJm9wdCkgPCAwKSB7CisJCVdQUklOVEYoKCJ0YXAgZGV2
aWNlIE9fTk9OQkxPQ0sgZmFpbGVkXG4iKSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcHJpdi0+
bWV2cCA9IG1ldmVudF9hZGQoZmQsIEVWRl9SRUFELCBjYiwgcGFyYW0pOworCWlmIChwcml2LT5t
ZXZwID09IE5VTEwpIHsKKwkJV1BSSU5URigoIkNvdWxkIG5vdCByZWdpc3RlciBldmVudFxuIikp
OworCQlnb3RvIGVycm9yOworCX0KKworCWJlLT5mZCA9IGZkOworCWJlLT5wcml2ID0gcHJpdjsK
KworCXJldHVybiAwOworCitlcnJvcjoKKwl0YXBfY2xlYW51cChiZSk7CisJcmV0dXJuIC0xOwor
fQorCisvKgorICogQ2FsbGVkIHRvIHNlbmQgYSBidWZmZXIgY2hhaW4gb3V0IHRvIHRoZSB0YXAg
ZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQKK3RhcF9zZW5kKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUs
IHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250LCB1aW50MzJfdCBsZW4sCisJaW50IG1vcmUp
Cit7CisJc3RhdGljIGNoYXIgcGFkWzYwXTsgLyogYWxsIHplcm8gYnl0ZXMgKi8KKworCSh2b2lk
KW1vcmU7CisJLyoKKwkgKiBJZiB0aGUgbGVuZ3RoIGlzIDwgNjAsIHBhZCBvdXQgdG8gdGhhdCBh
bmQgYWRkIHRoZQorCSAqIGV4dHJhIHplcm8nZCBzZWdtZW50IHRvIHRoZSBpb3YuIEl0IGlzIGd1
YXJhbnRlZWQgdGhhdAorCSAqIHRoZXJlIGlzIGFsd2F5cyBhbiBleHRyYSBpb3YgYXZhaWxhYmxl
IGJ5IHRoZSBjYWxsZXIuCisJICovCisJaWYgKGxlbiA8IDYwKSB7CisJCWlvdltpb3ZjbnRdLmlv
dl9iYXNlID0gcGFkOworCQlpb3ZbaW92Y250XS5pb3ZfbGVuID0gKHNpemVfdCkoNjAgLSBsZW4p
OworCQlpb3ZjbnQrKzsKKwl9CisKKwlyZXR1cm4gKGludCl3cml0ZXYoYmUtPmZkLCBpb3YsIGlv
dmNudCk7Cit9CisKK3N0YXRpYyBpbnQKK3RhcF9yZWN2KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUs
IHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250KQoreworCWludCByZXQ7CisKKwkvKiBTaG91
bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGhvdXQgYSB2YWxpZCB0YXAgZmQgKi8KKwlhc3NlcnQoYmUt
PmZkICE9IC0xKTsKKworCXJldCA9IChpbnQpcmVhZHYoYmUtPmZkLCBpb3YsIGlvdmNudCk7CisK
KwlpZiAocmV0IDwgMCAmJiBlcnJubyA9PSBFV09VTERCTE9DSykgeworCQlyZXR1cm4gMDsKKwl9
CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdWludDY0X3QKK3RhcF9nZXRfY2FwKHN0cnVj
dCBuZXRfYmFja2VuZCAqYmUpCit7CisJKHZvaWQpYmU7CisJcmV0dXJuIDA7IC8vIG5vdGhpbmcg
ZXh0cmEKK30KKworc3RhdGljIGludAordGFwX3NldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5kICpi
ZSwgdWludDY0X3QgZmVhdHVyZXMsCisJCSB1bnNpZ25lZCB2bmV0X2hkcl9sZW4pCit7CisJKHZv
aWQpYmU7CisJcmV0dXJuIChmZWF0dXJlcyB8fCB2bmV0X2hkcl9sZW4pID8gLTEgOiAwOworfQor
CitzdGF0aWMgc3RydWN0IG5ldF9iYWNrZW5kIHRhcF9iYWNrZW5kID0geworCS5uYW1lID0gInRh
cHx2bW1uZXQiLAorCS5pbml0ID0gdGFwX2luaXQsCisJLmNsZWFudXAgPSB0YXBfY2xlYW51cCwK
Kwkuc2VuZCA9IHRhcF9zZW5kLAorCS5yZWN2ID0gdGFwX3JlY3YsCisJLmdldF9jYXAgPSB0YXBf
Z2V0X2NhcCwKKwkuc2V0X2NhcCA9IHRhcF9zZXRfY2FwLAorfTsKKworREFUQV9TRVQobmV0X2Jh
Y2tlbmRfcywgdGFwX2JhY2tlbmQpOworCisjaWZkZWYgV0lUSF9ORVRNQVAKKworLyoKKyAqIFRo
ZSBuZXRtYXAgYmFja2VuZAorICovCisKKy8qIFRoZSB2aXJ0aW8tbmV0IGZlYXR1cmVzIHN1cHBv
cnRlZCBieSBuZXRtYXAuICovCisjZGVmaW5lIE5FVE1BUF9GRUFUVVJFUyAoVklSVElPX05FVF9G
X0NTVU0gfCBWSVJUSU9fTkVUX0ZfSE9TVF9UU080IHwgXAorCQlWSVJUSU9fTkVUX0ZfSE9TVF9U
U082IHwgVklSVElPX05FVF9GX0hPU1RfVUZPIHwgXAorCQlWSVJUSU9fTkVUX0ZfR1VFU1RfQ1NV
TSB8IFZJUlRJT19ORVRfRl9HVUVTVF9UU080IHwgXAorCQlWSVJUSU9fTkVUX0ZfR1VFU1RfVFNP
NiB8IFZJUlRJT19ORVRfRl9HVUVTVF9VRk8pCisKKyNkZWZpbmUgTkVUTUFQX1BPTExNQVNLIChQ
T0xMSU4gfCBQT0xMUkROT1JNIHwgUE9MTFJEQkFORCkKKworc3RydWN0IG5ldG1hcF9wcml2IHsK
KwljaGFyIGlmbmFtZVtJRk5BTVNJWl07CisJc3RydWN0IG5tX2Rlc2MgKm5tZDsKKwl1aW50MTZf
dCBtZW1pZDsKKwlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJ4OworCXN0cnVjdCBuZXRtYXBfcmluZyAq
dHg7CisJcHRocmVhZF90IGV2bG9vcF90aWQ7CisJbmV0X2JhY2tlbmRfY2JfdCBjYjsKKwl2b2lk
ICpjYl9wYXJhbTsKKworCXN0cnVjdCBwdG5ldG1hcF9zdGF0ZSBwdG5ldG1hcDsKK307CisKK3N0
YXRpYyB2b2lkICoKK25ldG1hcF9ldmxvb3BfdGhyZWFkKHZvaWQgKnBhcmFtKQoreworCXN0cnVj
dCBuZXRfYmFja2VuZCAqYmUgPSBwYXJhbTsKKwlzdHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYgPSBi
ZS0+cHJpdjsKKwlzdHJ1Y3QgcG9sbGZkIHBmZDsKKwlpbnQgcmV0OworCisJZm9yICg7Oykgewor
CQlwZmQuZmQgPSBiZS0+ZmQ7CisJCXBmZC5ldmVudHMgPSBORVRNQVBfUE9MTE1BU0s7CisJCXJl
dCA9IHBvbGwoJnBmZCwgMSwgSU5GVElNKTsKKwkJaWYgKHJldCA9PSAtMSAmJiBlcnJubyAhPSBF
SU5UUikgeworCQkJV1BSSU5URigoIm5ldG1hcCBwb2xsIGZhaWxlZCwgJWRcbiIsIGVycm5vKSk7
CisJCX0gZWxzZSBpZiAocmV0ID09IDEgJiYgKHBmZC5yZXZlbnRzICYgTkVUTUFQX1BPTExNQVNL
KSkgeworCQkJcHJpdi0+Y2IocGZkLmZkLCBFVkZfUkVBRCwgcHJpdi0+Y2JfcGFyYW0pOworCQl9
CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitubXJlcV9pbml0KHN0cnVj
dCBubXJlcSAqcmVxLCBjaGFyICppZm5hbWUpCit7CisJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpy
ZXEpKTsKKwlzdHJuY3B5KHJlcS0+bnJfbmFtZSwgaWZuYW1lLCBzaXplb2YocmVxLT5ucl9uYW1l
KSk7CisJcmVxLT5ucl92ZXJzaW9uID0gTkVUTUFQX0FQSTsKK30KKworc3RhdGljIGludAorbmV0
bWFwX3NldF92bmV0X2hkcl9sZW4oc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgaW50IHZuZXRfaGRy
X2xlbikKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBubXJlcSByZXE7CisJc3RydWN0IG5ldG1hcF9w
cml2ICpwcml2ID0gYmUtPnByaXY7CisKKwlubXJlcV9pbml0KCZyZXEsIHByaXYtPmlmbmFtZSk7
CisJcmVxLm5yX2NtZCA9IE5FVE1BUF9CREdfVk5FVF9IRFI7CisJcmVxLm5yX2FyZzEgPSB2bmV0
X2hkcl9sZW47CisJZXJyID0gaW9jdGwoYmUtPmZkLCBOSU9DUkVHSUYsICZyZXEpOworCWlmIChl
cnIpIHsKKwkJV1BSSU5URigoIlVuYWJsZSB0byBzZXQgdm5ldCBoZWFkZXIgbGVuZ3RoICVkXG4i
LAorCQkJCXZuZXRfaGRyX2xlbikpOworCQlyZXR1cm4gZXJyOworCX0KKworCWJlLT5iZV92bmV0
X2hkcl9sZW4gPSB2bmV0X2hkcl9sZW47CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAor
bmV0bWFwX2hhc192bmV0X2hkcl9sZW4oc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgdW5zaWduZWQg
dm5ldF9oZHJfbGVuKQoreworCWludCBwcmV2X2hkcl9sZW4gPSBiZS0+YmVfdm5ldF9oZHJfbGVu
OworCWludCByZXQ7CisKKwlpZiAodm5ldF9oZHJfbGVuID09IHByZXZfaGRyX2xlbikgeworCQly
ZXR1cm4gMTsKKwl9CisKKwlyZXQgPSBuZXRtYXBfc2V0X3ZuZXRfaGRyX2xlbihiZSwgdm5ldF9o
ZHJfbGVuKTsKKwlpZiAocmV0KSB7CisJCXJldHVybiAwOworCX0KKworCW5ldG1hcF9zZXRfdm5l
dF9oZHJfbGVuKGJlLCBwcmV2X2hkcl9sZW4pOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB1
aW50NjRfdAorbmV0bWFwX2dldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSkKK3sKKwlyZXR1
cm4gbmV0bWFwX2hhc192bmV0X2hkcl9sZW4oYmUsIFZORVRfSERSX0xFTikgPworCQkJTkVUTUFQ
X0ZFQVRVUkVTIDogMDsKK30KKworc3RhdGljIGludAorbmV0bWFwX3NldF9jYXAoc3RydWN0IG5l
dF9iYWNrZW5kICpiZSwgdWludDY0X3QgZmVhdHVyZXMsCisJICAgICAgIHVuc2lnbmVkIHZuZXRf
aGRyX2xlbikKK3sKKwlyZXR1cm4gbmV0bWFwX3NldF92bmV0X2hkcl9sZW4oYmUsIHZuZXRfaGRy
X2xlbik7Cit9CisKKy8qIFN0b3JlIGFuZCByZXR1cm4gdGhlIGZlYXR1cmVzIHdlIGFncmVlZCB1
cG9uLiAqLwordWludDMyX3QKK3B0bmV0bWFwX2Fja19mZWF0dXJlcyhzdHJ1Y3QgcHRuZXRtYXBf
c3RhdGUgKnB0biwgdWludDMyX3Qgd2FudGVkX2ZlYXR1cmVzKQoreworCXB0bi0+YWNrZWRfZmVh
dHVyZXMgPSBwdG4tPmZlYXR1cmVzICYgd2FudGVkX2ZlYXR1cmVzOworCisJcmV0dXJuIHB0bi0+
YWNrZWRfZmVhdHVyZXM7Cit9CisKK3N0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqCitnZXRfcHRuZXRt
YXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSkKK3sKKwlzdHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYg
PSBiZSA/IGJlLT5wcml2IDogTlVMTDsKKwlzdHJ1Y3QgbmV0bWFwX3Bvb2xzX2luZm8gcGk7CisJ
c3RydWN0IG5tcmVxIHJlcTsKKwlpbnQgZXJyOworCisJLyogQ2hlY2sgdGhhdCB0aGlzIGlzIGEg
cHRuZXRtYXAgYmFja2VuZC4gKi8KKwlpZiAoIWJlIHx8IGJlLT5zZXRfY2FwICE9IG5ldG1hcF9z
ZXRfY2FwIHx8CisJCQkhKHByaXYtPm5tZC0+cmVxLm5yX2ZsYWdzICYgTlJfUFRORVRNQVBfSE9T
VCkpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbm1yZXFfaW5pdCgmcmVxLCBwcml2LT5pZm5h
bWUpOworCXJlcS5ucl9jbWQgPSBORVRNQVBfUE9PTFNfSU5GT19HRVQ7CisJbm1yZXFfcG9pbnRl
cl9wdXQoJnJlcSwgJnBpKTsKKwllcnIgPSBpb2N0bChwcml2LT5ubWQtPmZkLCBOSU9DUkVHSUYs
ICZyZXEpOworCWlmIChlcnIpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZXJyID0gcHRuX21l
bWRldl9hdHRhY2gocHJpdi0+bm1kLT5tZW0sICZwaSk7CisJaWYgKGVycikgeworCQlyZXR1cm4g
TlVMTDsKKwl9CisKKwlyZXR1cm4gJnByaXYtPnB0bmV0bWFwOworfQorCitpbnQKK3B0bmV0bWFw
X2dldF9uZXRtYXBfaWYoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG4sIHN0cnVjdCBuZXRtYXBf
aWZfaW5mbyAqbmlmKQoreworCXN0cnVjdCBuZXRtYXBfcHJpdiAqcHJpdiA9IHB0bi0+bmV0bWFw
X3ByaXY7CisKKwltZW1zZXQobmlmLCAwLCBzaXplb2YoKm5pZikpOworCWlmIChwcml2LT5ubWQg
PT0gTlVMTCkgeworCQlyZXR1cm4gRUlOVkFMOworCX0KKworCW5pZi0+bmlmcF9vZmZzZXQgPSBw
cml2LT5ubWQtPnJlcS5ucl9vZmZzZXQ7CisJbmlmLT5udW1fdHhfcmluZ3MgPSBwcml2LT5ubWQt
PnJlcS5ucl90eF9yaW5nczsKKwluaWYtPm51bV9yeF9yaW5ncyA9IHByaXYtPm5tZC0+cmVxLm5y
X3J4X3JpbmdzOworCW5pZi0+bnVtX3R4X3Nsb3RzID0gcHJpdi0+bm1kLT5yZXEubnJfdHhfc2xv
dHM7CisJbmlmLT5udW1fcnhfc2xvdHMgPSBwcml2LT5ubWQtPnJlcS5ucl9yeF9zbG90czsKKwor
CXJldHVybiAwOworfQorCitpbnQKK3B0bmV0bWFwX2dldF9ob3N0bWVtaWQoc3RydWN0IHB0bmV0
bWFwX3N0YXRlICpwdG4pCit7CisJc3RydWN0IG5ldG1hcF9wcml2ICpwcml2ID0gcHRuLT5uZXRt
YXBfcHJpdjsKKworCWlmIChwcml2LT5ubWQgPT0gTlVMTCkgeworCQlyZXR1cm4gRUlOVkFMOwor
CX0KKworCXJldHVybiBwcml2LT5tZW1pZDsKK30KKworaW50CitwdG5ldG1hcF9jcmVhdGUoc3Ry
dWN0IHB0bmV0bWFwX3N0YXRlICpwdG4sIHN0cnVjdCBwdG5ldG1hcF9jZmcgKmNmZykKK3sKKwlz
dHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYgPSBwdG4tPm5ldG1hcF9wcml2OworCXN0cnVjdCBubXJl
cSByZXE7CisJaW50IGVycjsKKworCWlmIChwdG4tPnJ1bm5pbmcpIHsKKwkJcmV0dXJuIDA7CisJ
fQorCisJLyogWFhYIFdlIHNob3VsZCBzdG9wIHRoZSBuZXRtYXAgZXZsb29wIGhlcmUuICovCisK
KwkvKiBBc2sgbmV0bWFwIHRvIGNyZWF0ZSBrdGhyZWFkcyBmb3IgdGhpcyBpbnRlcmZhY2UuICov
CisJbm1yZXFfaW5pdCgmcmVxLCBwcml2LT5pZm5hbWUpOworCW5tcmVxX3BvaW50ZXJfcHV0KCZy
ZXEsIGNmZyk7CisJcmVxLm5yX2NtZCA9IE5FVE1BUF9QVF9IT1NUX0NSRUFURTsKKwllcnIgPSBp
b2N0bChwcml2LT5ubWQtPmZkLCBOSU9DUkVHSUYsICZyZXEpOworCWlmIChlcnIpIHsKKwkJZnBy
aW50ZihzdGRlcnIsICIlczogVW5hYmxlIHRvIGNyZWF0ZSBwdG5ldG1hcCBrdGhyZWFkcyBvbiAi
CisJCQkiJXMgW2Vycm5vPSVkXSIsIF9fZnVuY19fLCBwcml2LT5pZm5hbWUsIGVycm5vKTsKKwkJ
cmV0dXJuIGVycjsKKwl9CisKKwlwdG4tPnJ1bm5pbmcgPSAxOworCisJcmV0dXJuIDA7Cit9CisK
K2ludAorcHRuZXRtYXBfZGVsZXRlKHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuKQoreworCXN0
cnVjdCBuZXRtYXBfcHJpdiAqcHJpdiA9IHB0bi0+bmV0bWFwX3ByaXY7CisJc3RydWN0IG5tcmVx
IHJlcTsKKwlpbnQgZXJyOworCisJaWYgKCFwdG4tPnJ1bm5pbmcpIHsKKwkJcmV0dXJuIDA7CisJ
fQorCisJLyogQXNrIG5ldG1hcCB0byBkZWxldGUga3RocmVhZHMgZm9yIHRoaXMgaW50ZXJmYWNl
LiAqLworCW5tcmVxX2luaXQoJnJlcSwgcHJpdi0+aWZuYW1lKTsKKwlyZXEubnJfY21kID0gTkVU
TUFQX1BUX0hPU1RfREVMRVRFOworCWVyciA9IGlvY3RsKHByaXYtPm5tZC0+ZmQsIE5JT0NSRUdJ
RiwgJnJlcSk7CisJaWYgKGVycikgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBVbmFibGUgdG8g
Y3JlYXRlIHB0bmV0bWFwIGt0aHJlYWRzIG9uICIKKwkJCSIlcyBbZXJybm89JWRdIiwgX19mdW5j
X18sIHByaXYtPmlmbmFtZSwgZXJybm8pOworCQlyZXR1cm4gZXJyOworCX0KKworCXB0bi0+cnVu
bmluZyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbmV0bWFwX2luaXQoc3Ry
dWN0IG5ldF9iYWNrZW5kICpiZSwgY29uc3QgY2hhciAqZGV2bmFtZSwKKwkgICAgbmV0X2JhY2tl
bmRfY2JfdCBjYiwgdm9pZCAqcGFyYW0pCit7CisJY29uc3QgY2hhciAqbmRuYW1lID0gIi9kZXYv
bmV0bWFwIjsKKwlzdHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYgPSBOVUxMOworCXN0cnVjdCBubXJl
cSByZXE7CisJaW50IHB0bmV0bWFwID0gKGNiID09IE5VTEwpOworCisJcHJpdiA9IGNhbGxvYygx
LCBzaXplb2Yoc3RydWN0IG5ldG1hcF9wcml2KSk7CisJaWYgKHByaXYgPT0gTlVMTCkgeworCQlX
UFJJTlRGKCgiVW5hYmxlIGFsbG9jIG5ldG1hcCBwcml2YXRlIGRhdGFcbiIpKTsKKwkJcmV0dXJu
IC0xOworCX0KKworCXN0cm5jcHkocHJpdi0+aWZuYW1lLCBkZXZuYW1lLCBzaXplb2YocHJpdi0+
aWZuYW1lKSk7CisJcHJpdi0+aWZuYW1lW3NpemVvZihwcml2LT5pZm5hbWUpIC0gMV0gPSAnXDAn
OworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKwlyZXEubnJfZmxhZ3MgPSBwdG5l
dG1hcCA/IE5SX1BUTkVUTUFQX0hPU1QgOiAwOworCisJcHJpdi0+bm1kID0gbm1fb3Blbihwcml2
LT5pZm5hbWUsICZyZXEsIE5FVE1BUF9OT19UWF9QT0xMLCBOVUxMKTsKKwlpZiAocHJpdi0+bm1k
ID09IE5VTEwpIHsKKwkJV1BSSU5URigoIlVuYWJsZSB0byBubV9vcGVuKCk6IGRldmljZSAnJXMn
LCAiCisJCQkJImludGVyZmFjZSAnJXMnLCBlcnJubyAoJXMpXG4iLAorCQkJCW5kbmFtZSwgZGV2
bmFtZSwgc3RyZXJyb3IoZXJybm8pKSk7CisJCWZyZWUocHJpdik7CisJCXJldHVybiAtMTsKKwl9
CisKKwlwcml2LT5tZW1pZCA9IHByaXYtPm5tZC0+cmVxLm5yX2FyZzI7CisJcHJpdi0+dHggPSBO
RVRNQVBfVFhSSU5HKHByaXYtPm5tZC0+bmlmcCwgMCk7CisJcHJpdi0+cnggPSBORVRNQVBfUlhS
SU5HKHByaXYtPm5tZC0+bmlmcCwgMCk7CisJcHJpdi0+Y2IgPSBjYjsKKwlwcml2LT5jYl9wYXJh
bSA9IHBhcmFtOworCWJlLT5mZCA9IHByaXYtPm5tZC0+ZmQ7CisJYmUtPnByaXYgPSBwcml2Owor
CisJcHJpdi0+cHRuZXRtYXAubmV0bWFwX3ByaXYgPSBwcml2OworCXByaXYtPnB0bmV0bWFwLmZl
YXR1cmVzID0gMDsKKwlwcml2LT5wdG5ldG1hcC5hY2tlZF9mZWF0dXJlcyA9IDA7CisJcHJpdi0+
cHRuZXRtYXAucnVubmluZyA9IDA7CisJaWYgKHB0bmV0bWFwKSB7CisJCWlmIChuZXRtYXBfaGFz
X3ZuZXRfaGRyX2xlbihiZSwgVk5FVF9IRFJfTEVOKSkgeworCQkJcHJpdi0+cHRuZXRtYXAuZmVh
dHVyZXMgfD0gUFRORVRNQVBfRl9WTkVUX0hEUjsKKwkJfQorCX0gZWxzZSB7CisJCWNoYXIgdG5h
bWVbNDBdOworCisJCS8qIENyZWF0ZSBhIHRocmVhZCBmb3IgbmV0bWFwIHBvbGwuICovCisJCXB0
aHJlYWRfY3JlYXRlKCZwcml2LT5ldmxvb3BfdGlkLCBOVUxMLCBuZXRtYXBfZXZsb29wX3RocmVh
ZCwgKHZvaWQgKiliZSk7CisJCXNucHJpbnRmKHRuYW1lLCBzaXplb2YodG5hbWUpLCAibmV0bWFw
LWV2bG9vcC0lcCIsIHByaXYpOworCQlwdGhyZWFkX3NldF9uYW1lX25wKHByaXYtPmV2bG9vcF90
aWQsIHRuYW1lKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK25ldG1hcF9j
bGVhbnVwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJc3RydWN0IG5ldG1hcF9wcml2ICpw
cml2ID0gYmUtPnByaXY7CisKKwlpZiAoYmUtPnByaXYpIHsKKwkJaWYgKHByaXYtPnB0bmV0bWFw
LnJ1bm5pbmcpIHsKKwkJCXB0bmV0bWFwX2RlbGV0ZSgmcHJpdi0+cHRuZXRtYXApOworCQl9CisJ
CW5tX2Nsb3NlKHByaXYtPm5tZCk7CisJCWZyZWUoYmUtPnByaXYpOworCQliZS0+cHJpdiA9IE5V
TEw7CisJfQorCWJlLT5mZCA9IC0xOworfQorCisvKiBBIGZhc3QgY29weSByb3V0aW5lIG9ubHkg
Zm9yIG11bHRpcGxlcyBvZiA2NCBieXRlcywgbm9uIG92ZXJsYXBwZWQuICovCitzdGF0aWMgaW5s
aW5lIHZvaWQKK3BrdF9jb3B5KGNvbnN0IHZvaWQgKl9zcmMsIHZvaWQgKl9kc3QsIGludCBsKQor
eworICAgIGNvbnN0IHVpbnQ2NF90ICpzcmMgPSBfc3JjOworICAgIHVpbnQ2NF90ICpkc3QgPSBf
ZHN0OworICAgIGlmIChsID49IDEwMjQpIHsKKyAgICAgICAgYmNvcHkoc3JjLCBkc3QsIGwpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoOyBsID4gMDsgbCAtPSA2NCkgeworICAg
ICAgICAqZHN0KysgPSAqc3JjKys7CisgICAgICAgICpkc3QrKyA9ICpzcmMrKzsKKyAgICAgICAg
KmRzdCsrID0gKnNyYysrOworICAgICAgICAqZHN0KysgPSAqc3JjKys7CisgICAgICAgICpkc3Qr
KyA9ICpzcmMrKzsKKyAgICAgICAgKmRzdCsrID0gKnNyYysrOworICAgICAgICAqZHN0KysgPSAq
c3JjKys7CisgICAgICAgICpkc3QrKyA9ICpzcmMrKzsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQK
K25ldG1hcF9zZW5kKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92LAor
CSAgICBpbnQgaW92Y250LCB1aW50MzJfdCBzaXplLCBpbnQgbW9yZSkKK3sKKwlzdHJ1Y3QgbmV0
bWFwX3ByaXYgKnByaXYgPSBiZS0+cHJpdjsKKwlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJpbmc7CisJ
aW50IG5tX2J1Zl9zaXplOworCWludCBubV9idWZfbGVuOworCXVpbnQzMl90IGhlYWQ7CisJdm9p
ZCAqbm1fYnVmOworCWludCBqOworCisJaWYgKGlvdmNudCA8PSAwIHx8IHNpemUgPD0gMCkgewor
CQlEKCJXcm9uZyBpb3Y6IGlvdmNudCAlZCBzaXplICVkIiwgaW92Y250LCBzaXplKTsKKwkJcmV0
dXJuIDA7CisJfQorCisJcmluZyA9IHByaXYtPnR4OworCWhlYWQgPSByaW5nLT5oZWFkOworCWlm
IChoZWFkID09IHJpbmctPnRhaWwpIHsKKwkJUkQoMSwgIk5vIHNwYWNlLCBkcm9wICVkIGJ5dGVz
Iiwgc2l6ZSk7CisJCWdvdG8gdHhzeW5jOworCX0KKwlubV9idWYgPSBORVRNQVBfQlVGKHJpbmcs
IHJpbmctPnNsb3RbaGVhZF0uYnVmX2lkeCk7CisJbm1fYnVmX3NpemUgPSByaW5nLT5ucl9idWZf
c2l6ZTsKKwlubV9idWZfbGVuID0gMDsKKworCWZvciAoaiA9IDA7IGogPCBpb3ZjbnQ7IGorKykg
eworCQlpbnQgaW92X2ZyYWdfc2l6ZSA9IGlvdltqXS5pb3ZfbGVuOworCQl2b2lkICppb3ZfZnJh
Z19idWYgPSBpb3Zbal0uaW92X2Jhc2U7CisKKwkJLyogU3BsaXQgZWFjaCBpb3ZlYyBmcmFnbWVu
dCBvdmVyIG1vcmUgbmV0bWFwIHNsb3RzLCBpZgorCQkgICBuZWNlc3NhcnkuICovCisJCWZvciAo
OzspIHsKKwkJCWludCBjb3B5bGVuOworCisJCQljb3B5bGVuID0gaW92X2ZyYWdfc2l6ZSA8IG5t
X2J1Zl9zaXplID8gaW92X2ZyYWdfc2l6ZSA6IG5tX2J1Zl9zaXplOworCQkJcGt0X2NvcHkoaW92
X2ZyYWdfYnVmLCBubV9idWYsIGNvcHlsZW4pOworCisJCQlpb3ZfZnJhZ19idWYgKz0gY29weWxl
bjsKKwkJCWlvdl9mcmFnX3NpemUgLT0gY29weWxlbjsKKwkJCW5tX2J1ZiArPSBjb3B5bGVuOwor
CQkJbm1fYnVmX3NpemUgLT0gY29weWxlbjsKKwkJCW5tX2J1Zl9sZW4gKz0gY29weWxlbjsKKwor
CQkJaWYgKGlvdl9mcmFnX3NpemUgPT0gMCkgeworCQkJCWJyZWFrOworCQkJfQorCisJCQlyaW5n
LT5zbG90W2hlYWRdLmxlbiA9IG5tX2J1Zl9sZW47CisJCQlyaW5nLT5zbG90W2hlYWRdLmZsYWdz
ID0gTlNfTU9SRUZSQUc7CisJCQloZWFkID0gbm1fcmluZ19uZXh0KHJpbmcsIGhlYWQpOworCQkJ
aWYgKGhlYWQgPT0gcmluZy0+dGFpbCkgeworCQkJCS8qIFdlIHJhbiBvdXQgb2YgbmV0bWFwIHNs
b3RzIHdoaWxlCisJCQkJICogc3BsaXR0aW5nIHRoZSBpb3ZlYyBmcmFnbWVudHMuICovCisJCQkJ
UkQoMSwgIk5vIHNwYWNlLCBkcm9wICVkIGJ5dGVzIiwgc2l6ZSk7CisJCQkJZ290byB0eHN5bmM7
CisJCQl9CisJCQlubV9idWYgPSBORVRNQVBfQlVGKHJpbmcsIHJpbmctPnNsb3RbaGVhZF0uYnVm
X2lkeCk7CisJCQlubV9idWZfc2l6ZSA9IHJpbmctPm5yX2J1Zl9zaXplOworCQkJbm1fYnVmX2xl
biA9IDA7CisJCX0KKwl9CisKKwkvKiBDb21wbGV0ZSB0aGUgbGFzdCBzbG90LCB3aGljaCBtdXN0
IG5vdCBoYXZlIE5TX01PUkVGUkFHIHNldC4gKi8KKwlyaW5nLT5zbG90W2hlYWRdLmxlbiA9IG5t
X2J1Zl9sZW47CisJcmluZy0+c2xvdFtoZWFkXS5mbGFncyA9IDA7CisJaGVhZCA9IG5tX3Jpbmdf
bmV4dChyaW5nLCBoZWFkKTsKKworCS8qIE5vdyB1cGRhdGUgcmluZy0+aGVhZCBhbmQgcmluZy0+
Y3VyLiAqLworCXJpbmctPmhlYWQgPSByaW5nLT5jdXIgPSBoZWFkOworCisJaWYgKG1vcmUpIHsv
LyAmJiBubV9yaW5nX3NwYWNlKHJpbmcpID4gNjQKKwkJcmV0dXJuIDA7CisJfQordHhzeW5jOgor
CWlvY3RsKGJlLT5mZCwgTklPQ1RYU1lOQywgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh
dGljIGludAorbmV0bWFwX3JlY3Yoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgc3RydWN0IGlvdmVj
ICppb3YsIGludCBpb3ZjbnQpCit7CisJc3RydWN0IG5ldG1hcF9wcml2ICpwcml2ID0gYmUtPnBy
aXY7CisJc3RydWN0IG5ldG1hcF9zbG90ICpzbG90ID0gTlVMTDsKKwlzdHJ1Y3QgbmV0bWFwX3Jp
bmcgKnJpbmc7CisJdm9pZCAqaW92X2ZyYWdfYnVmOworCWludCBpb3ZfZnJhZ19zaXplOworCWlu
dCB0b3RsZW4gPSAwOworCXVpbnQzMl90IGhlYWQ7CisKKwlhc3NlcnQoaW92Y250KTsKKworCXJp
bmcgPSBwcml2LT5yeDsKKwloZWFkID0gcmluZy0+aGVhZDsKKwlpb3ZfZnJhZ19idWYgPSBpb3Yt
Pmlvdl9iYXNlOworCWlvdl9mcmFnX3NpemUgPSBpb3YtPmlvdl9sZW47CisKKwlkbyB7CisJCWlu
dCBubV9idWZfbGVuOworCQl2b2lkICpubV9idWY7CisKKwkJaWYgKGhlYWQgPT0gcmluZy0+dGFp
bCkgeworCQkJcmV0dXJuIDA7CisJCX0KKworCQlzbG90ID0gcmluZy0+c2xvdCArIGhlYWQ7CisJ
CW5tX2J1ZiA9IE5FVE1BUF9CVUYocmluZywgc2xvdC0+YnVmX2lkeCk7CisJCW5tX2J1Zl9sZW4g
PSBzbG90LT5sZW47CisKKwkJZm9yICg7OykgeworCQkJaW50IGNvcHlsZW4gPSBubV9idWZfbGVu
IDwgaW92X2ZyYWdfc2l6ZSA/IG5tX2J1Zl9sZW4gOiBpb3ZfZnJhZ19zaXplOworCisJCQlwa3Rf
Y29weShubV9idWYsIGlvdl9mcmFnX2J1ZiwgY29weWxlbik7CisJCQlubV9idWYgKz0gY29weWxl
bjsKKwkJCW5tX2J1Zl9sZW4gLT0gY29weWxlbjsKKwkJCWlvdl9mcmFnX2J1ZiArPSBjb3B5bGVu
OworCQkJaW92X2ZyYWdfc2l6ZSAtPSBjb3B5bGVuOworCQkJdG90bGVuICs9IGNvcHlsZW47CisK
KwkJCWlmIChubV9idWZfbGVuID09IDApIHsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaW92Kys7
CisJCQlpb3ZjbnQtLTsKKwkJCWlmIChpb3ZjbnQgPT0gMCkgeworCQkJCS8qIE5vIHNwYWNlIHRv
IHJlY2VpdmUuICovCisJCQkJRCgiU2hvcnQgaW92LCBkcm9wICVkIGJ5dGVzIiwgdG90bGVuKTsK
KwkJCQlyZXR1cm4gLUVOT1NQQzsKKwkJCX0KKwkJCWlvdl9mcmFnX2J1ZiA9IGlvdi0+aW92X2Jh
c2U7CisJCQlpb3ZfZnJhZ19zaXplID0gaW92LT5pb3ZfbGVuOworCQl9CisKKwkJaGVhZCA9IG5t
X3JpbmdfbmV4dChyaW5nLCBoZWFkKTsKKworCX0gd2hpbGUgKHNsb3QtPmZsYWdzICYgTlNfTU9S
RUZSQUcpOworCisJLyogUmVsZWFzZSBzbG90cyB0byBuZXRtYXAuICovCisJcmluZy0+aGVhZCA9
IHJpbmctPmN1ciA9IGhlYWQ7CisKKwlyZXR1cm4gdG90bGVuOworfQorCitzdGF0aWMgc3RydWN0
IG5ldF9iYWNrZW5kIG5ldG1hcF9iYWNrZW5kID0geworCS5uYW1lID0gIm5ldG1hcHx2YWxlIiwK
KwkuaW5pdCA9IG5ldG1hcF9pbml0LAorCS5jbGVhbnVwID0gbmV0bWFwX2NsZWFudXAsCisJLnNl
bmQgPSBuZXRtYXBfc2VuZCwKKwkucmVjdiA9IG5ldG1hcF9yZWN2LAorCS5nZXRfY2FwID0gbmV0
bWFwX2dldF9jYXAsCisJLnNldF9jYXAgPSBuZXRtYXBfc2V0X2NhcCwKK307CisKK0RBVEFfU0VU
KG5ldF9iYWNrZW5kX3MsIG5ldG1hcF9iYWNrZW5kKTsKKworI2VuZGlmIC8qIFdJVEhfTkVUTUFQ
ICovCisKKy8qCisgKiBtYWtlIHN1cmUgYSBiYWNrZW5kIGlzIHByb3Blcmx5IGluaXRpYWxpemVk
CisgKi8KK3N0YXRpYyB2b2lkCituZXRiZV9maXgoc3RydWN0IG5ldF9iYWNrZW5kICpiZSkKK3sK
KwlpZiAoYmUgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmIChiZS0+bmFtZSA9PSBOVUxMKSB7CisJ
CWZwcmludGYoc3RkZXJyLCAibWlzc2luZyBuYW1lIGZvciAlcFxuIiwgYmUpOworCQliZS0+bmFt
ZSA9ICJ1bm5hbWVkIG5ldGJlIjsKKwl9CisJaWYgKGJlLT5pbml0ID09IE5VTEwpIHsKKwkJZnBy
aW50ZihzdGRlcnIsICJtaXNzaW5nIGluaXQgZm9yICVwICVzXG4iLCBiZSwgYmUtPm5hbWUpOwor
CQliZS0+aW5pdCA9IG5ldGJlX251bGxfaW5pdDsKKwl9CisJaWYgKGJlLT5jbGVhbnVwID09IE5V
TEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJtaXNzaW5nIGNsZWFudXAgZm9yICVwICVzXG4iLCBi
ZSwgYmUtPm5hbWUpOworCQliZS0+Y2xlYW51cCA9IG5ldGJlX251bGxfY2xlYW51cDsKKwl9CisJ
aWYgKGJlLT5zZW5kID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJtaXNzaW5nIHNlbmQg
Zm9yICVwICVzXG4iLCBiZSwgYmUtPm5hbWUpOworCQliZS0+c2VuZCA9IG5ldGJlX251bGxfc2Vu
ZDsKKwl9CisJaWYgKGJlLT5yZWN2ID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJtaXNz
aW5nIHJlY3YgZm9yICVwICVzXG4iLCBiZSwgYmUtPm5hbWUpOworCQliZS0+cmVjdiA9IG5ldGJl
X251bGxfcmVjdjsKKwl9CisJaWYgKGJlLT5nZXRfY2FwID09IE5VTEwpIHsKKwkJZnByaW50Zihz
dGRlcnIsICJtaXNzaW5nIGdldF9jYXAgZm9yICVwICVzXG4iLAorCQkJYmUsIGJlLT5uYW1lKTsK
KwkJYmUtPmdldF9jYXAgPSBuZXRiZV9udWxsX2dldF9jYXA7CisJfQorCWlmIChiZS0+c2V0X2Nh
cCA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAibWlzc2luZyBzZXRfY2FwIGZvciAlcCAl
c1xuIiwKKwkJCWJlLCBiZS0+bmFtZSk7CisJCWJlLT5zZXRfY2FwID0gbmV0YmVfbnVsbF9zZXRf
Y2FwOworCX0KK30KKworLyoKKyAqIGtleXMgaXMgYSBzZXQgb2YgcHJlZml4ZXMgc2VwYXJhdGVk
IGJ5ICd8JywKKyAqIHJldHVybiAxIGlmIHRoZSBsZWZ0bW9zdCBwYXJ0IG9mIG5hbWUgbWF0Y2hl
cyBvbmUgcHJlZml4LgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCituZXRiZV9uYW1lX21hdGNo
KGNvbnN0IGNoYXIgKmtleXMsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY29uc3QgY2hhciAqbiA9
IG5hbWUsICpnb29kID0ga2V5czsKKwljaGFyIGM7CisKKwlpZiAoIWtleXMgfHwgIW5hbWUpCisJ
CXJldHVybiBOVUxMOworCXdoaWxlICggKGMgPSAqa2V5cysrKSApIHsKKwkJaWYgKGMgPT0gJ3wn
KSB7IC8qIHJlYWNoZWQgdGhlIHNlcGFyYXRvciAqLworCQkJaWYgKGdvb2QpCisJCQkJYnJlYWs7
CisJCQkvKiBwcmVwYXJlIGZvciBuZXcgcm91bmQgKi8KKwkJCW4gPSBuYW1lOworCQkJZ29vZCA9
IGtleXM7CisJCX0gZWxzZSBpZiAoZ29vZCAmJiBjICE9ICpuKyspIHsKKwkJCWdvb2QgPSBOVUxM
OyAvKiBkcm9wIHRpbGwgbmV4dCBrZXl3b3JkICovCisJCX0KKwl9CisJcmV0dXJuIGdvb2Q7Cit9
CisKKy8qCisgKiBJbml0aWFsaXplIGEgYmFja2VuZCBhbmQgYXR0YWNoIHRvIHRoZSBmcm9udGVu
ZC4KKyAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBmcm9udGVuZCBpbml0aWFsaXphdGlvbi4KKyAq
IGRldm5hbWUgaXMgdGhlIGJhY2tlbmQtbmFtZSBhcyBzdXBwbGllZCBvbiB0aGUgY29tbWFuZCBs
aW5lLAorICogCWUuZy4gLXMgMjowLGZyb250ZW5kLW5hbWUsYmFja2VuZC1uYW1lWyxvdGhlci1h
cmdzXQorICogY2IgaXMgdGhlIHJlY2VpdmUgY2FsbGJhY2sgc3VwcGxpZWQgYnkgdGhlIGZyb250
ZW5kLAorICoJYW5kIGl0IGlzIGludm9rZWQgaW4gdGhlIGV2ZW50IGxvb3Agd2hlbiBhIHJlY2Vp
dmUKKyAqCWV2ZW50IGlzIGdlbmVyYXRlZCBpbiB0aGUgaHlwZXJ2aXNvciwKKyAqIHBhcmFtIGlz
IGEgcG9pbnRlciB0byB0aGUgZnJvbnRlbmQsIGFuZCBub3JtYWxseSB1c2VkIGFzCisgKgl0aGUg
YXJndW1lbnQgZm9yIHRoZSBjYWxsYmFjay4KKyAqLworc3RydWN0IG5ldF9iYWNrZW5kICoKK25l
dGJlX2luaXQoY29uc3QgY2hhciAqZGV2bmFtZSwgbmV0X2JhY2tlbmRfY2JfdCBjYiwgdm9pZCAq
cGFyYW0pCit7CisJc3RydWN0IG5ldF9iYWNrZW5kICoqcGJlLCAqYmUsICp0YmUgPSBOVUxMOwor
CWludCBlcnI7CisKKwkvKgorCSAqIEZpbmQgdGhlIG5ldHdvcmsgYmFja2VuZCBkZXBlbmRpbmcg
b24gdGhlIHVzZXItcHJvdmlkZWQKKwkgKiBkZXZpY2UgbmFtZS4gbmV0X2JhY2tlbmRfcyBpcyBi
dWlsdCB1c2luZyBhIGxpbmtlciBzZXQuCisJICovCisJU0VUX0ZPUkVBQ0gocGJlLCBuZXRfYmFj
a2VuZF9zKSB7CisJCWlmIChuZXRiZV9uYW1lX21hdGNoKCgqcGJlKS0+bmFtZSwgZGV2bmFtZSkp
IHsKKwkJCXRiZSA9ICpwYmU7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAodGJlID09IE5VTEwp
CisJCXJldHVybiBOVUxMOyAvKiBvciBudWxsIGJhY2tlbmQgPyAqLworCWJlID0gY2FsbG9jKDEs
IHNpemVvZigqYmUpKTsKKwkqYmUgPSAqdGJlOwkvKiBjb3B5IHRoZSB0ZW1wbGF0ZSAqLworCW5l
dGJlX2ZpeChiZSk7IC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGFsbCBmaWVsZHMgKi8KKwliZS0+ZmQg
PSAtMTsKKwliZS0+cHJpdiA9IE5VTEw7CisJYmUtPnNjID0gcGFyYW07CisJYmUtPmJlX3ZuZXRf
aGRyX2xlbiA9IDA7CisJYmUtPmZlX3ZuZXRfaGRyX2xlbiA9IDA7CisKKwkvKiBpbml0aWFsaXpl
IHRoZSBiYWNrZW5kICovCisJZXJyID0gYmUtPmluaXQoYmUsIGRldm5hbWUsIGNiLCBwYXJhbSk7
CisJaWYgKGVycikgeworCQlmcmVlKGJlKTsKKwkJYmUgPSBOVUxMOworCX0KKwlyZXR1cm4gYmU7
Cit9CisKK3ZvaWQKK25ldGJlX2NsZWFudXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSkKK3sKKwlp
ZiAoYmUgPT0gTlVMTCkKKwkJcmV0dXJuOworCWJlLT5jbGVhbnVwKGJlKTsKKwlmcmVlKGJlKTsK
K30KKwordWludDY0X3QKK25ldGJlX2dldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSkKK3sK
KwlpZiAoYmUgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGJlLT5nZXRfY2FwKGJlKTsK
K30KKworaW50CituZXRiZV9zZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHVpbnQ2NF90
IGZlYXR1cmVzLAorCSAgICAgIHVuc2lnbmVkIHZuZXRfaGRyX2xlbikKK3sKKwlpbnQgcmV0Owor
CisJaWYgKGJlID09IE5VTEwpCisJCXJldHVybiAwOworCisJLyogVGhlcmUgYXJlIG9ubHkgdGhy
ZWUgdmFsaWQgbGVuZ3Rocy4gKi8KKwlpZiAodm5ldF9oZHJfbGVuICYmIHZuZXRfaGRyX2xlbiAh
PSBWTkVUX0hEUl9MRU4KKwkJJiYgdm5ldF9oZHJfbGVuICE9IChWTkVUX0hEUl9MRU4gLSBzaXpl
b2YodWludDE2X3QpKSkKKwkJcmV0dXJuIC0xOworCisJYmUtPmZlX3ZuZXRfaGRyX2xlbiA9IHZu
ZXRfaGRyX2xlbjsKKworCXJldCA9IGJlLT5zZXRfY2FwKGJlLCBmZWF0dXJlcywgdm5ldF9oZHJf
bGVuKTsKKwlhc3NlcnQoYmUtPmJlX3ZuZXRfaGRyX2xlbiA9PSAwIHx8CisJICAgICAgIGJlLT5i
ZV92bmV0X2hkcl9sZW4gPT0gYmUtPmZlX3ZuZXRfaGRyX2xlbik7CisKKwlyZXR1cm4gcmV0Owor
fQorCitzdGF0aWMgX19pbmxpbmUgc3RydWN0IGlvdmVjICoKK2lvdl90cmltKHN0cnVjdCBpb3Zl
YyAqaW92LCBpbnQgKmlvdmNudCwgdW5zaWduZWQgaW50IHRsZW4pCit7CisJc3RydWN0IGlvdmVj
ICpyaW92OworCisJLyogWFhYIHNob3J0LWN1dDogYXNzdW1lIGZpcnN0IHNlZ21lbnQgaXMgPj0g
dGxlbiAqLworCWFzc2VydChpb3ZbMF0uaW92X2xlbiA+PSB0bGVuKTsKKworCWlvdlswXS5pb3Zf
bGVuIC09IHRsZW47CisJaWYgKGlvdlswXS5pb3ZfbGVuID09IDApIHsKKwkJYXNzZXJ0KCppb3Zj
bnQgPiAxKTsKKwkJKmlvdmNudCAtPSAxOworCQlyaW92ID0gJmlvdlsxXTsKKwl9IGVsc2Ugewor
CQlpb3ZbMF0uaW92X2Jhc2UgPSAodm9pZCAqKSgodWludHB0cl90KWlvdlswXS5pb3ZfYmFzZSAr
IHRsZW4pOworCQlyaW92ID0gJmlvdlswXTsKKwl9CisKKwlyZXR1cm4gKHJpb3YpOworfQorCit2
b2lkCituZXRiZV9zZW5kKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92
LCBpbnQgaW92Y250LCB1aW50MzJfdCBsZW4sCisJICAgaW50IG1vcmUpCit7CisJaWYgKGJlID09
IE5VTEwpCisJCXJldHVybjsKKyNpZiAwCisJaW50IGk7CisJRCgic2VuZGluZyBpb3ZjbnQgJWQg
bGVuICVkIGlvdmVjICVwIiwgaW92Y250LCBsZW4sIGlvdik7CisJZm9yIChpPTA7IGkgPCBpb3Zj
bnQ7IGkrKykKKwkJRCgiICAgJTNkOiAlNGQgJXAiLCBpLCAoaW50KWlvdltpXS5pb3ZfbGVuLCBp
b3ZbaV0uaW92X2Jhc2UpOworI2VuZGlmCisJaWYgKGJlLT5iZV92bmV0X2hkcl9sZW4gIT0gYmUt
PmZlX3ZuZXRfaGRyX2xlbikgeworCQkvKiBIZXJlIHdlIGFyZSBzdXJlIGJlLT5iZV92bmV0X2hk
cl9sZW4gaXMgMC4gKi8KKwkJaW92ID0gaW92X3RyaW0oaW92LCAmaW92Y250LCBiZS0+ZmVfdm5l
dF9oZHJfbGVuKTsKKwl9CisKKwliZS0+c2VuZChiZSwgaW92LCBpb3ZjbnQsIGxlbiwgbW9yZSk7
Cit9CisKKy8qCisgKiBjYW4gcmV0dXJuIC0xIGluIGNhc2Ugb2YgZXJyb3JzCisgKi8KK2ludAor
bmV0YmVfcmVjdihzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50
IGlvdmNudCkKK3sKKwl1bnNpZ25lZCBpbnQgaGxlbiA9IDA7IC8qIGxlbmd0aCBvZiBwcmVwZW5k
ZWQgdmlydGlvLW5ldCBoZWFkZXIgKi8KKwlpbnQgcmV0OworCisJaWYgKGJlID09IE5VTEwpCisJ
CXJldHVybiAtMTsKKworCWlmIChiZS0+YmVfdm5ldF9oZHJfbGVuICE9IGJlLT5mZV92bmV0X2hk
cl9sZW4pIHsKKwkJc3RydWN0IHZpcnRpb19uZXRfcnhoZHIgKnZoOworCisJCS8qIEhlcmUgd2Ug
YXJlIHN1cmUgYmUtPmJlX3ZuZXRfaGRyX2xlbiBpcyAwLiAqLworCQlobGVuID0gYmUtPmZlX3Zu
ZXRfaGRyX2xlbjsKKwkJLyoKKwkJICogR2V0IGEgcG9pbnRlciB0byB0aGUgcnggaGVhZGVyLCBh
bmQgdXNlIHRoZQorCQkgKiBkYXRhIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBpdCBmb3IgdGhlIHBh
Y2tldCBidWZmZXIuCisJCSAqLworCQl2aCA9IGlvdlswXS5pb3ZfYmFzZTsKKwkJaW92ID0gaW92
X3RyaW0oaW92LCAmaW92Y250LCBobGVuKTsKKworCQkvKgorCQkgKiBIZXJlIHdlIGFyZSBzdXJl
IGJlLT5mZV92bmV0X2hkcl9sZW4gaXMgMC4KKwkJICogVGhlIG9ubHkgdmFsaWQgZmllbGQgaW4g
dGhlIHJ4IHBhY2tldCBoZWFkZXIgaXMgdGhlCisJCSAqIG51bWJlciBvZiBidWZmZXJzIGlmIG1l
cmdlZCByeCBidWZzIHdlcmUgbmVnb3RpYXRlZC4KKwkJICovCisJCW1lbXNldCh2aCwgMCwgaGxl
bik7CisKKwkJaWYgKGhsZW4gPT0gVk5FVF9IRFJfTEVOKSB7CisJCQl2aC0+dnJoX2J1ZnMgPSAx
OworCQl9CisJfQorCisJcmV0ID0gYmUtPnJlY3YoYmUsIGlvdiwgaW92Y250KTsKKwlpZiAocmV0
ID4gMCkgeworCQlyZXQgKz0gaGxlbjsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICog
UmVhZCBhIHBhY2tldCBmcm9tIHRoZSBiYWNrZW5kIGFuZCBkaXNjYXJkIGl0LgorICogUmV0dXJu
cyB0aGUgc2l6ZSBvZiB0aGUgZGlzY2FyZGVkIHBhY2tldCBvciB6ZXJvIGlmIG5vIHBhY2tldCB3
YXMgYXZhaWxhYmxlLgorICogQSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlzIHJldHVybmVkIGluIGNh
c2Ugb2YgcmVhZCBlcnJvci4KKyAqLworaW50CituZXRiZV9yeF9kaXNjYXJkKHN0cnVjdCBuZXRf
YmFja2VuZCAqYmUpCit7CisJLyoKKwkgKiBNUCBub3RlOiB0aGUgZHVtbXlidWYgaXMgb25seSB1
c2VkIHRvIGRpc2NhcmQgZnJhbWVzLAorCSAqIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGl0IHRv
IGJlIHBlci12dG5ldCBvciBsb2NrZWQuCisJICogV2Ugb25seSBtYWtlIGl0IGxhcmdlIGVub3Vn
aCBmb3IgVFNPLXNpemVkIHNlZ21lbnQuCisJICovCisJc3RhdGljIHVpbnQ4X3QgZHVtbXlidWZb
NjU1MzYrNjRdOworCXN0cnVjdCBpb3ZlYyBpb3Y7CisKKwlpb3YuaW92X2Jhc2UgPSBkdW1teWJ1
ZjsKKwlpb3YuaW92X2xlbiA9IHNpemVvZihkdW1teWJ1Zik7CisKKwlyZXR1cm4gbmV0YmVfcmVj
dihiZSwgJmlvdiwgMSk7Cit9CisKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3Vzci5zYmluL2JoeXZl
L25ldF9iYWNrZW5kcy5jLm9yaWcgL3Vzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X2JhY2tlbmRz
LmMub3JpZwotLS0gdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9uZXRfYmFja2VuZHMuYy5vcmlnCTE5
NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy91c3Iuc2Jpbi9i
aHl2ZS9uZXRfYmFja2VuZHMuYy5vcmlnCTIwMTYtMTEtMzAgMTA6NTI6NTkuOTEyNTI2MDAwICsw
MDAwCkBAIC0wLDAgKzEsMjE2NCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNiBW
aW5jZW56byBNYWZmaW9uZQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S
U2BgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwKKyAqIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFRoaXMg
ZmlsZSBpbXBsZW1lbnRzIG11bHRpcGxlIG5ldHdvcmsgYmFja2VuZHMgKG51bGwsIHRhcCwgbmV0
bWFwLCAuLi4pLAorICogdG8gYmUgdXNlZCBieSBuZXR3b3JrIGZyb250ZW5kcyBzdWNoIGFzIHZp
cnRpby1uZXQgYW5kIHB0bmV0LgorICogVGhlIEFQSSB0byBhY2Nlc3MgdGhlIGJhY2tlbmQgKGUu
Zy4gc2VuZC9yZWNlaXZlIHBhY2tldHMsIG5lZ290aWF0ZQorICogZmVhdHVyZXMpIGlzIGV4cG9y
dGVkIGJ5IG5ldF9iYWNrZW5kcy5oLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNp
bmNsdWRlIDxzeXMvdWlvLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lz
L21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4JCS8qIHVfc2hvcnQgZXRjICovCisjaW5j
bHVkZSA8bmV0L2lmLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+
CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRp
bnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRl
IDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8cHRocmVhZF9ucC5o
PgorI2luY2x1ZGUgPHBvbGwuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgIm1l
dmVudC5oIgorI2luY2x1ZGUgIm5ldF9iYWNrZW5kcy5oIgorCisjaW5jbHVkZSA8c3lzL2xpbmtl
cl9zZXQuaD4KKworLyoKKyAqIEVhY2ggbmV0d29yayBiYWNrZW5kIHJlZ2lzdGVycyBhIHNldCBv
ZiBmdW5jdGlvbiBwb2ludGVycyB0aGF0IGFyZQorICogdXNlZCB0byBpbXBsZW1lbnQgdGhlIG5l
dCBiYWNrZW5kcyBBUEkuCisgKiBUaGlzIG1pZ2h0IG5lZWQgdG8gYmUgZXhwb3NlZCBpZiB3ZSBp
bXBsZW1lbnQgYmFja2VuZHMgaW4gc2VwYXJhdGUgZmlsZXMuCisgKi8KK3N0cnVjdCBuZXRfYmFj
a2VuZCB7CisJY29uc3QgY2hhciAqbmFtZTsJLyogbmFtZSBvZiB0aGUgYmFja2VuZCAqLworCS8q
CisJICogVGhlIGluaXQgYW5kIGNsZWFudXAgZnVuY3Rpb25zIGFyZSB1c2VkIGludGVybmFsbHks
CisJICogdmlydGlvLW5ldCBzaG91bGQgbmV2ZXIgdXNlIGl0LgorCSAqLworCWludCAoKmluaXQp
KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIGNvbnN0IGNoYXIgKmRldm5hbWUsCisJCQkJbmV0X2Jh
Y2tlbmRfY2JfdCBjYiwgdm9pZCAqcGFyYW0pOworCXZvaWQgKCpjbGVhbnVwKShzdHJ1Y3QgbmV0
X2JhY2tlbmQgKmJlKTsKKworCisJLyoKKwkgKiBDYWxsZWQgdG8gc2VydmUgYSBndWVzdCB0cmFu
c21pdCByZXF1ZXN0LiBUaGUgc2NhdHRlci1nYXRoZXIKKwkgKiB2ZWN0b3IgcHJvdmlkZWQgYnkg
dGhlIGNhbGxlciBoYXMgJ2lvdmNudCcgZWxlbWVudHMgYW5kIGNvbnRhaW5zCisJICogdGhlIHBh
Y2tldCB0byBzZW5kLiAnbGVuJyBpcyB0aGUgbGVuZ3RoIG9mIHdob2xlIHBhY2tldCBpbiBieXRl
cy4KKwkgKi8KKwlpbnQgKCpzZW5kKShzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92
ZWMgKmlvdiwKKwkJCWludCBpb3ZjbnQsIHVpbnQzMl90IGxlbiwgaW50IG1vcmUpOworCisJLyoK
KwkgKiBDYWxsZWQgdG8gc2VydmUgZ3Vlc3QgcmVjZWl2ZSByZXF1ZXN0LiBXaGVuIHRoZSBmdW5j
dGlvbgorCSAqIHJldHVybnMgYSBwb3NpdGl2ZSB2YWx1ZSwgdGhlIHNjYXR0ZXItZ2F0aGVyIHZl
Y3RvcgorCSAqIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIgKGhhdmluZyAnaW92Y250JyBlbGVtZW50
cyBpbiBpdCkgd2lsbAorCSAqIGNvbnRhaW4gYSBjaHVuayBvZiB0aGUgcmVjZWl2ZWQgcGFja2V0
LiBUaGUgJ21vcmUnIGZsYWcgd2lsbAorCSAqIGJlIHNldCBpZiB0aGUgcmV0dXJuZWQgY2h1bmsg
d2FzIHRoZSBsYXN0IG9uZSBmb3IgdGhlIGN1cnJlbnQKKwkgKiBwYWNrZXQsIGFuZCAwIG90aGVy
d2lzZS4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNodW5rIHNpemUKKwkgKiBpbiBieXRlcywg
b3IgMCBpZiB0aGUgYmFja2VuZCBkb2Vzbid0IGhhdmUgYSBuZXcgcGFja2V0IHRvCisJICogcmVj
ZWl2ZS4KKwkgKiBOb3RlIHRoYXQgaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBjYWxsIHRoaXMgY2Fs
bGJhY2sgbWFueQorCSAqIHRpbWVzIHRvIHJlY2VpdmUgYSBzaW5nbGUgcGFja2V0LCBkZXBlbmRp
bmcgb2YgaG93IGJpZyBpcworCSAqIGJ1ZmZlcnMgeW91IHByb3ZpZGUuCisJICovCisJaW50ICgq
cmVjdikoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3Zj
bnQpOworCisJLyoKKwkgKiBBc2sgdGhlIGJhY2tlbmQgZm9yIHRoZSB2aXJ0aW8tbmV0IGZlYXR1
cmVzIGl0IGlzIGFibGUgdG8KKwkgKiBzdXBwb3J0LiBQb3NzaWJsZSBmZWF0dXJlcyBhcmUgVFNP
LCBVRk8gYW5kIGNoZWNrc3VtIG9mZmxvYWRpbmcKKwkgKiBpbiBib3RoIHJ4IGFuZCB0eCBkaXJl
Y3Rpb24gYW5kIGZvciBib3RoIElQdjQgYW5kIElQdjYuCisJICovCisJdWludDY0X3QgKCpnZXRf
Y2FwKShzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKTsKKworCS8qCisJICogVGVsbCB0aGUgYmFja2Vu
ZCB0byBlbmFibGUvZGlzYWJsZSB0aGUgc3BlY2lmaWVkIHZpcnRpby1uZXQKKwkgKiBmZWF0dXJl
cyAoY2FwYWJpbGl0aWVzKS4KKwkgKi8KKwlpbnQgKCpzZXRfY2FwKShzdHJ1Y3QgbmV0X2JhY2tl
bmQgKmJlLCB1aW50NjRfdCBmZWF0dXJlcywKKwkJICAgICAgIHVuc2lnbmVkIGludCB2bmV0X2hk
cl9sZW4pOworCisJc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2M7CisJaW50IGZkOworCXVuc2ln
bmVkIGludCBiZV92bmV0X2hkcl9sZW47CisJdW5zaWduZWQgaW50IGZlX3ZuZXRfaGRyX2xlbjsK
Kwl2b2lkICpwcml2OwkvKiBQb2ludGVyIHRvIGJhY2tlbmQtc3BlY2lmaWMgZGF0YS4gKi8KK307
CisKK1NFVF9ERUNMQVJFKG5ldF9iYWNrZW5kX3MsIHN0cnVjdCBuZXRfYmFja2VuZCk7CisKKyNk
ZWZpbmUgVk5FVF9IRFJfTEVOCXNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9yeGhkcikKKworI2Rl
ZmluZSBXUFJJTlRGKHBhcmFtcykgcHJpbnRmIHBhcmFtcworCisvKiB0aGUgbnVsbCBiYWNrZW5k
ICovCitzdGF0aWMgaW50CituZXRiZV9udWxsX2luaXQoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwg
Y29uc3QgY2hhciAqZGV2bmFtZSwKKwkJCW5ldF9iYWNrZW5kX2NiX3QgY2IsIHZvaWQgKnBhcmFt
KQoreworCSh2b2lkKWRldm5hbWU7ICh2b2lkKWNiOyAodm9pZClwYXJhbTsKKwliZS0+ZmQgPSAt
MTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK25ldGJlX251bGxfY2xlYW51cChzdHJ1
Y3QgbmV0X2JhY2tlbmQgKmJlKQoreworCSh2b2lkKWJlOworfQorCitzdGF0aWMgdWludDY0X3QK
K25ldGJlX251bGxfZ2V0X2NhcChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKQoreworCSh2b2lkKWJl
OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZXRiZV9udWxsX3NldF9jYXAoc3RydWN0
IG5ldF9iYWNrZW5kICpiZSwgdWludDY0X3QgZmVhdHVyZXMsCisJCQl1bnNpZ25lZCB2bmV0X2hk
cl9sZW4pCit7CisJKHZvaWQpYmU7ICh2b2lkKWZlYXR1cmVzOyAodm9pZCl2bmV0X2hkcl9sZW47
CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25ldGJlX251bGxfc2VuZChzdHJ1Y3QgbmV0
X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwlpbnQgaW92Y250LCB1aW50MzJfdCBs
ZW4sIGludCBtb3JlKQoreworCSh2b2lkKWJlOyAodm9pZClpb3Y7ICh2b2lkKWlvdmNudDsgKHZv
aWQpbGVuOyAodm9pZCltb3JlOworCXJldHVybiAwOyAvKiBwcmV0ZW5kIHdlIHNlbmQgKi8KK30K
Kworc3RhdGljIGludAorbmV0YmVfbnVsbF9yZWN2KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0
cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250KQoreworCSh2b2lkKWJlOyAodm9pZClpb3Y7ICh2
b2lkKWlvdmNudDsKKwlmcHJpbnRmKHN0ZGVyciwgIm5ldGJlX251bGxfcmVjdiBjYWxsZWQgP1xu
Iik7CisJcmV0dXJuIC0xOyAvKiBuZXZlciBjYWxsZWQsIGkgYmVsaWV2ZSAqLworfQorCitzdGF0
aWMgc3RydWN0IG5ldF9iYWNrZW5kIG5fYmUgPSB7CisJLm5hbWUgPSAibnVsbCIsCisJLmluaXQg
PSBuZXRiZV9udWxsX2luaXQsCisJLmNsZWFudXAgPSBuZXRiZV9udWxsX2NsZWFudXAsCisJLnNl
bmQgPSBuZXRiZV9udWxsX3NlbmQsCisJLnJlY3YgPSBuZXRiZV9udWxsX3JlY3YsCisJLmdldF9j
YXAgPSBuZXRiZV9udWxsX2dldF9jYXAsCisJLnNldF9jYXAgPSBuZXRiZV9udWxsX3NldF9jYXAs
Cit9OworCitEQVRBX1NFVChuZXRfYmFja2VuZF9zLCBuX2JlKTsKKworCisvKiB0aGUgdGFwIGJh
Y2tlbmQgKi8KKworc3RydWN0IHRhcF9wcml2IHsKKwlzdHJ1Y3QgbWV2ZW50ICptZXZwOworfTsK
Kworc3RhdGljIHZvaWQKK3RhcF9jbGVhbnVwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJ
c3RydWN0IHRhcF9wcml2ICpwcml2ID0gYmUtPnByaXY7CisKKwlpZiAoYmUtPnByaXYpIHsKKwkJ
bWV2ZW50X2RlbGV0ZShwcml2LT5tZXZwKTsKKwkJZnJlZShiZS0+cHJpdik7CisJCWJlLT5wcml2
ID0gTlVMTDsKKwl9CisJaWYgKGJlLT5mZCAhPSAtMSkgeworCQljbG9zZShiZS0+ZmQpOworCQli
ZS0+ZmQgPSAtMTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3RhcF9pbml0KHN0cnVjdCBuZXRfYmFj
a2VuZCAqYmUsIGNvbnN0IGNoYXIgKmRldm5hbWUsCisJIG5ldF9iYWNrZW5kX2NiX3QgY2IsIHZv
aWQgKnBhcmFtKQoreworCWNoYXIgdGJ1Zls4MF07CisJaW50IGZkOworCWludCBvcHQgPSAxOwor
CXN0cnVjdCB0YXBfcHJpdiAqcHJpdjsKKworCWlmIChjYiA9PSBOVUxMKSB7CisJCVdQUklOVEYo
KCJUQVAgYmFja2VuZCByZXF1aXJlcyBub24tTlVMTCBjYWxsYmFja1xuIikpOworCQlyZXR1cm4g
LTE7CisJfQorCisJcHJpdiA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHRhcF9wcml2KSk7CisJ
aWYgKHByaXYgPT0gTlVMTCkgeworCQlXUFJJTlRGKCgidGFwX3ByaXYgYWxsb2MgZmFpbGVkXG4i
KSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlzdHJjcHkodGJ1ZiwgIi9kZXYvIik7CisJc3RybGNh
dCh0YnVmLCBkZXZuYW1lLCBzaXplb2YodGJ1ZikpOworCisJZmQgPSBvcGVuKHRidWYsIE9fUkRX
Uik7CisJaWYgKGZkID09IC0xKSB7CisJCVdQUklOVEYoKCJvcGVuIG9mIHRhcCBkZXZpY2UgJXMg
ZmFpbGVkXG4iLCB0YnVmKSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyoKKwkgKiBTZXQgbm9u
LWJsb2NraW5nIGFuZCByZWdpc3RlciBmb3IgcmVhZAorCSAqIG5vdGlmaWNhdGlvbnMgd2l0aCB0
aGUgZXZlbnQgbG9vcAorCSAqLworCWlmIChpb2N0bChmZCwgRklPTkJJTywgJm9wdCkgPCAwKSB7
CisJCVdQUklOVEYoKCJ0YXAgZGV2aWNlIE9fTk9OQkxPQ0sgZmFpbGVkXG4iKSk7CisJCWdvdG8g
ZXJyb3I7CisJfQorCisJcHJpdi0+bWV2cCA9IG1ldmVudF9hZGQoZmQsIEVWRl9SRUFELCBjYiwg
cGFyYW0pOworCWlmIChwcml2LT5tZXZwID09IE5VTEwpIHsKKwkJV1BSSU5URigoIkNvdWxkIG5v
dCByZWdpc3RlciBldmVudFxuIikpOworCQlnb3RvIGVycm9yOworCX0KKworCWJlLT5mZCA9IGZk
OworCWJlLT5wcml2ID0gcHJpdjsKKworCXJldHVybiAwOworCitlcnJvcjoKKwl0YXBfY2xlYW51
cChiZSk7CisJcmV0dXJuIC0xOworfQorCisvKgorICogQ2FsbGVkIHRvIHNlbmQgYSBidWZmZXIg
Y2hhaW4gb3V0IHRvIHRoZSB0YXAgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQKK3RhcF9zZW5kKHN0
cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250LCB1aW50
MzJfdCBsZW4sCisJaW50IG1vcmUpCit7CisJc3RhdGljIGNoYXIgcGFkWzYwXTsgLyogYWxsIHpl
cm8gYnl0ZXMgKi8KKworCSh2b2lkKW1vcmU7CisJLyoKKwkgKiBJZiB0aGUgbGVuZ3RoIGlzIDwg
NjAsIHBhZCBvdXQgdG8gdGhhdCBhbmQgYWRkIHRoZQorCSAqIGV4dHJhIHplcm8nZCBzZWdtZW50
IHRvIHRoZSBpb3YuIEl0IGlzIGd1YXJhbnRlZWQgdGhhdAorCSAqIHRoZXJlIGlzIGFsd2F5cyBh
biBleHRyYSBpb3YgYXZhaWxhYmxlIGJ5IHRoZSBjYWxsZXIuCisJICovCisJaWYgKGxlbiA8IDYw
KSB7CisJCWlvdltpb3ZjbnRdLmlvdl9iYXNlID0gcGFkOworCQlpb3ZbaW92Y250XS5pb3ZfbGVu
ID0gKHNpemVfdCkoNjAgLSBsZW4pOworCQlpb3ZjbnQrKzsKKwl9CisKKwlyZXR1cm4gKGludCl3
cml0ZXYoYmUtPmZkLCBpb3YsIGlvdmNudCk7Cit9CisKK3N0YXRpYyBpbnQKK3RhcF9yZWN2KHN0
cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250KQorewor
CWludCByZXQ7CisKKwkvKiBTaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGhvdXQgYSB2YWxpZCB0
YXAgZmQgKi8KKwlhc3NlcnQoYmUtPmZkICE9IC0xKTsKKworCXJldCA9IChpbnQpcmVhZHYoYmUt
PmZkLCBpb3YsIGlvdmNudCk7CisKKwlpZiAocmV0IDwgMCAmJiBlcnJubyA9PSBFV09VTERCTE9D
SykgeworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdWludDY0
X3QKK3RhcF9nZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJKHZvaWQpYmU7CisJ
cmV0dXJuIDA7IC8vIG5vdGhpbmcgZXh0cmEKK30KKworc3RhdGljIGludAordGFwX3NldF9jYXAo
c3RydWN0IG5ldF9iYWNrZW5kICpiZSwgdWludDY0X3QgZmVhdHVyZXMsCisJCSB1bnNpZ25lZCB2
bmV0X2hkcl9sZW4pCit7CisJKHZvaWQpYmU7CisJcmV0dXJuIChmZWF0dXJlcyB8fCB2bmV0X2hk
cl9sZW4pID8gLTEgOiAwOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9iYWNrZW5kIHRhcF9iYWNr
ZW5kID0geworCS5uYW1lID0gInRhcHx2bW1uZXQiLAorCS5pbml0ID0gdGFwX2luaXQsCisJLmNs
ZWFudXAgPSB0YXBfY2xlYW51cCwKKwkuc2VuZCA9IHRhcF9zZW5kLAorCS5yZWN2ID0gdGFwX3Jl
Y3YsCisJLmdldF9jYXAgPSB0YXBfZ2V0X2NhcCwKKwkuc2V0X2NhcCA9IHRhcF9zZXRfY2FwLAor
fTsKKworREFUQV9TRVQobmV0X2JhY2tlbmRfcywgdGFwX2JhY2tlbmQpOworCisjaWZkZWYgV0lU
SF9ORVRNQVAKKworLyoKKyAqIFRoZSBuZXRtYXAgYmFja2VuZAorICovCisKKy8qIFRoZSB2aXJ0
aW8tbmV0IGZlYXR1cmVzIHN1cHBvcnRlZCBieSBuZXRtYXAuICovCisjZGVmaW5lIE5FVE1BUF9G
RUFUVVJFUyAoVklSVElPX05FVF9GX0NTVU0gfCBWSVJUSU9fTkVUX0ZfSE9TVF9UU080IHwgXAor
CQlWSVJUSU9fTkVUX0ZfSE9TVF9UU082IHwgVklSVElPX05FVF9GX0hPU1RfVUZPIHwgXAorCQlW
SVJUSU9fTkVUX0ZfR1VFU1RfQ1NVTSB8IFZJUlRJT19ORVRfRl9HVUVTVF9UU080IHwgXAorCQlW
SVJUSU9fTkVUX0ZfR1VFU1RfVFNPNiB8IFZJUlRJT19ORVRfRl9HVUVTVF9VRk8pCisKKyNkZWZp
bmUgTkVUTUFQX1BPTExNQVNLIChQT0xMSU4gfCBQT0xMUkROT1JNIHwgUE9MTFJEQkFORCkKKwor
c3RydWN0IG5ldG1hcF9wcml2IHsKKwljaGFyIGlmbmFtZVtJRk5BTVNJWl07CisJc3RydWN0IG5t
X2Rlc2MgKm5tZDsKKwl1aW50MTZfdCBtZW1pZDsKKwlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJ4Owor
CXN0cnVjdCBuZXRtYXBfcmluZyAqdHg7CisJcHRocmVhZF90IGV2bG9vcF90aWQ7CisJbmV0X2Jh
Y2tlbmRfY2JfdCBjYjsKKwl2b2lkICpjYl9wYXJhbTsKKworCXN0cnVjdCBwdG5ldG1hcF9zdGF0
ZSBwdG5ldG1hcDsKK307CisKK3N0YXRpYyB2b2lkICoKK25ldG1hcF9ldmxvb3BfdGhyZWFkKHZv
aWQgKnBhcmFtKQoreworCXN0cnVjdCBuZXRfYmFja2VuZCAqYmUgPSBwYXJhbTsKKwlzdHJ1Y3Qg
bmV0bWFwX3ByaXYgKnByaXYgPSBiZS0+cHJpdjsKKwlzdHJ1Y3QgcG9sbGZkIHBmZDsKKwlpbnQg
cmV0OworCisJZm9yICg7OykgeworCQlwZmQuZmQgPSBiZS0+ZmQ7CisJCXBmZC5ldmVudHMgPSBO
RVRNQVBfUE9MTE1BU0s7CisJCXJldCA9IHBvbGwoJnBmZCwgMSwgSU5GVElNKTsKKwkJaWYgKHJl
dCA9PSAtMSAmJiBlcnJubyAhPSBFSU5UUikgeworCQkJV1BSSU5URigoIm5ldG1hcCBwb2xsIGZh
aWxlZCwgJWRcbiIsIGVycm5vKSk7CisJCX0gZWxzZSBpZiAocmV0ID09IDEgJiYgKHBmZC5yZXZl
bnRzICYgTkVUTUFQX1BPTExNQVNLKSkgeworCQkJcHJpdi0+Y2IocGZkLmZkLCBFVkZfUkVBRCwg
cHJpdi0+Y2JfcGFyYW0pOworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2
b2lkCitubXJlcV9pbml0KHN0cnVjdCBubXJlcSAqcmVxLCBjaGFyICppZm5hbWUpCit7CisJbWVt
c2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKKwlzdHJuY3B5KHJlcS0+bnJfbmFtZSwgaWZuYW1l
LCBzaXplb2YocmVxLT5ucl9uYW1lKSk7CisJcmVxLT5ucl92ZXJzaW9uID0gTkVUTUFQX0FQSTsK
K30KKworc3RhdGljIGludAorbmV0bWFwX3NldF92bmV0X2hkcl9sZW4oc3RydWN0IG5ldF9iYWNr
ZW5kICpiZSwgaW50IHZuZXRfaGRyX2xlbikKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBubXJlcSBy
ZXE7CisJc3RydWN0IG5ldG1hcF9wcml2ICpwcml2ID0gYmUtPnByaXY7CisKKwlubXJlcV9pbml0
KCZyZXEsIHByaXYtPmlmbmFtZSk7CisJcmVxLm5yX2NtZCA9IE5FVE1BUF9CREdfVk5FVF9IRFI7
CisJcmVxLm5yX2FyZzEgPSB2bmV0X2hkcl9sZW47CisJZXJyID0gaW9jdGwoYmUtPmZkLCBOSU9D
UkVHSUYsICZyZXEpOworCWlmIChlcnIpIHsKKwkJV1BSSU5URigoIlVuYWJsZSB0byBzZXQgdm5l
dCBoZWFkZXIgbGVuZ3RoICVkXG4iLAorCQkJCXZuZXRfaGRyX2xlbikpOworCQlyZXR1cm4gZXJy
OworCX0KKworCWJlLT5iZV92bmV0X2hkcl9sZW4gPSB2bmV0X2hkcl9sZW47CisKKwlyZXR1cm4g
MDsKK30KKworc3RhdGljIGludAorbmV0bWFwX2hhc192bmV0X2hkcl9sZW4oc3RydWN0IG5ldF9i
YWNrZW5kICpiZSwgdW5zaWduZWQgdm5ldF9oZHJfbGVuKQoreworCWludCBwcmV2X2hkcl9sZW4g
PSBiZS0+YmVfdm5ldF9oZHJfbGVuOworCWludCByZXQ7CisKKwlpZiAodm5ldF9oZHJfbGVuID09
IHByZXZfaGRyX2xlbikgeworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXQgPSBuZXRtYXBfc2V0X3Zu
ZXRfaGRyX2xlbihiZSwgdm5ldF9oZHJfbGVuKTsKKwlpZiAocmV0KSB7CisJCXJldHVybiAwOwor
CX0KKworCW5ldG1hcF9zZXRfdm5ldF9oZHJfbGVuKGJlLCBwcmV2X2hkcl9sZW4pOworCisJcmV0
dXJuIDE7Cit9CisKK3N0YXRpYyB1aW50NjRfdAorbmV0bWFwX2dldF9jYXAoc3RydWN0IG5ldF9i
YWNrZW5kICpiZSkKK3sKKwlyZXR1cm4gbmV0bWFwX2hhc192bmV0X2hkcl9sZW4oYmUsIFZORVRf
SERSX0xFTikgPworCQkJTkVUTUFQX0ZFQVRVUkVTIDogMDsKK30KKworc3RhdGljIGludAorbmV0
bWFwX3NldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgdWludDY0X3QgZmVhdHVyZXMsCisJ
ICAgICAgIHVuc2lnbmVkIHZuZXRfaGRyX2xlbikKK3sKKwlyZXR1cm4gbmV0bWFwX3NldF92bmV0
X2hkcl9sZW4oYmUsIHZuZXRfaGRyX2xlbik7Cit9CisKKy8qIFN0b3JlIGFuZCByZXR1cm4gdGhl
IGZlYXR1cmVzIHdlIGFncmVlZCB1cG9uLiAqLwordWludDMyX3QKK3B0bmV0bWFwX2Fja19mZWF0
dXJlcyhzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0biwgdWludDMyX3Qgd2FudGVkX2ZlYXR1cmVz
KQoreworCXB0bi0+YWNrZWRfZmVhdHVyZXMgPSBwdG4tPmZlYXR1cmVzICYgd2FudGVkX2ZlYXR1
cmVzOworCisJcmV0dXJuIHB0bi0+YWNrZWRfZmVhdHVyZXM7Cit9CisKK3N0cnVjdCBwdG5ldG1h
cF9zdGF0ZSAqCitnZXRfcHRuZXRtYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSkKK3sKKwlzdHJ1
Y3QgbmV0bWFwX3ByaXYgKnByaXYgPSBiZSA/IGJlLT5wcml2IDogTlVMTDsKKwlzdHJ1Y3QgbmV0
bWFwX3Bvb2xzX2luZm8gcGk7CisJc3RydWN0IG5tcmVxIHJlcTsKKwlpbnQgZXJyOworCisJLyog
Q2hlY2sgdGhhdCB0aGlzIGlzIGEgcHRuZXRtYXAgYmFja2VuZC4gKi8KKwlpZiAoIWJlIHx8IGJl
LT5zZXRfY2FwICE9IG5ldG1hcF9zZXRfY2FwIHx8CisJCQkhKHByaXYtPm5tZC0+cmVxLm5yX2Zs
YWdzICYgTlJfUFRORVRNQVBfSE9TVCkpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbm1yZXFf
aW5pdCgmcmVxLCBwcml2LT5pZm5hbWUpOworCXJlcS5ucl9jbWQgPSBORVRNQVBfUE9PTFNfSU5G
T19HRVQ7CisJbm1yZXFfcG9pbnRlcl9wdXQoJnJlcSwgJnBpKTsKKwllcnIgPSBpb2N0bChwcml2
LT5ubWQtPmZkLCBOSU9DUkVHSUYsICZyZXEpOworCWlmIChlcnIpIHsKKwkJcmV0dXJuIE5VTEw7
CisJfQorCisJZXJyID0gcHRuX21lbWRldl9hdHRhY2gocHJpdi0+bm1kLT5tZW0sICZwaSk7CisJ
aWYgKGVycikgeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gJnByaXYtPnB0bmV0bWFw
OworfQorCitpbnQKK3B0bmV0bWFwX2dldF9uZXRtYXBfaWYoc3RydWN0IHB0bmV0bWFwX3N0YXRl
ICpwdG4sIHN0cnVjdCBuZXRtYXBfaWZfaW5mbyAqbmlmKQoreworCXN0cnVjdCBuZXRtYXBfcHJp
diAqcHJpdiA9IHB0bi0+bmV0bWFwX3ByaXY7CisKKwltZW1zZXQobmlmLCAwLCBzaXplb2YoKm5p
ZikpOworCWlmIChwcml2LT5ubWQgPT0gTlVMTCkgeworCQlyZXR1cm4gRUlOVkFMOworCX0KKwor
CW5pZi0+bmlmcF9vZmZzZXQgPSBwcml2LT5ubWQtPnJlcS5ucl9vZmZzZXQ7CisJbmlmLT5udW1f
dHhfcmluZ3MgPSBwcml2LT5ubWQtPnJlcS5ucl90eF9yaW5nczsKKwluaWYtPm51bV9yeF9yaW5n
cyA9IHByaXYtPm5tZC0+cmVxLm5yX3J4X3JpbmdzOworCW5pZi0+bnVtX3R4X3Nsb3RzID0gcHJp
di0+bm1kLT5yZXEubnJfdHhfc2xvdHM7CisJbmlmLT5udW1fcnhfc2xvdHMgPSBwcml2LT5ubWQt
PnJlcS5ucl9yeF9zbG90czsKKworCXJldHVybiAwOworfQorCitpbnQKK3B0bmV0bWFwX2dldF9o
b3N0bWVtaWQoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG4pCit7CisJc3RydWN0IG5ldG1hcF9w
cml2ICpwcml2ID0gcHRuLT5uZXRtYXBfcHJpdjsKKworCWlmIChwcml2LT5ubWQgPT0gTlVMTCkg
eworCQlyZXR1cm4gRUlOVkFMOworCX0KKworCXJldHVybiBwcml2LT5tZW1pZDsKK30KKworaW50
CitwdG5ldG1hcF9jcmVhdGUoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG4sIHN0cnVjdCBwdG5l
dG1hcF9jZmcgKmNmZykKK3sKKwlzdHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYgPSBwdG4tPm5ldG1h
cF9wcml2OworCXN0cnVjdCBubXJlcSByZXE7CisJaW50IGVycjsKKworCWlmIChwdG4tPnJ1bm5p
bmcpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogWFhYIFdlIHNob3VsZCBzdG9wIHRoZSBuZXRt
YXAgZXZsb29wIGhlcmUuICovCisKKwkvKiBBc2sgbmV0bWFwIHRvIGNyZWF0ZSBrdGhyZWFkcyBm
b3IgdGhpcyBpbnRlcmZhY2UuICovCisJbm1yZXFfaW5pdCgmcmVxLCBwcml2LT5pZm5hbWUpOwor
CW5tcmVxX3BvaW50ZXJfcHV0KCZyZXEsIGNmZyk7CisJcmVxLm5yX2NtZCA9IE5FVE1BUF9QVF9I
T1NUX0NSRUFURTsKKwllcnIgPSBpb2N0bChwcml2LT5ubWQtPmZkLCBOSU9DUkVHSUYsICZyZXEp
OworCWlmIChlcnIpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogVW5hYmxlIHRvIGNyZWF0ZSBw
dG5ldG1hcCBrdGhyZWFkcyBvbiAiCisJCQkiJXMgW2Vycm5vPSVkXSIsIF9fZnVuY19fLCBwcml2
LT5pZm5hbWUsIGVycm5vKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlwdG4tPnJ1bm5pbmcgPSAx
OworCisJcmV0dXJuIDA7Cit9CisKK2ludAorcHRuZXRtYXBfZGVsZXRlKHN0cnVjdCBwdG5ldG1h
cF9zdGF0ZSAqcHRuKQoreworCXN0cnVjdCBuZXRtYXBfcHJpdiAqcHJpdiA9IHB0bi0+bmV0bWFw
X3ByaXY7CisJc3RydWN0IG5tcmVxIHJlcTsKKwlpbnQgZXJyOworCisJaWYgKCFwdG4tPnJ1bm5p
bmcpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQXNrIG5ldG1hcCB0byBkZWxldGUga3RocmVh
ZHMgZm9yIHRoaXMgaW50ZXJmYWNlLiAqLworCW5tcmVxX2luaXQoJnJlcSwgcHJpdi0+aWZuYW1l
KTsKKwlyZXEubnJfY21kID0gTkVUTUFQX1BUX0hPU1RfREVMRVRFOworCWVyciA9IGlvY3RsKHBy
aXYtPm5tZC0+ZmQsIE5JT0NSRUdJRiwgJnJlcSk7CisJaWYgKGVycikgeworCQlmcHJpbnRmKHN0
ZGVyciwgIiVzOiBVbmFibGUgdG8gY3JlYXRlIHB0bmV0bWFwIGt0aHJlYWRzIG9uICIKKwkJCSIl
cyBbZXJybm89JWRdIiwgX19mdW5jX18sIHByaXYtPmlmbmFtZSwgZXJybm8pOworCQlyZXR1cm4g
ZXJyOworCX0KKworCXB0bi0+cnVubmluZyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj
IGludAorbmV0bWFwX2luaXQoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgY29uc3QgY2hhciAqZGV2
bmFtZSwKKwkgICAgbmV0X2JhY2tlbmRfY2JfdCBjYiwgdm9pZCAqcGFyYW0pCit7CisJY29uc3Qg
Y2hhciAqbmRuYW1lID0gIi9kZXYvbmV0bWFwIjsKKwlzdHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYg
PSBOVUxMOworCXN0cnVjdCBubXJlcSByZXE7CisJaW50IHB0bmV0bWFwID0gKGNiID09IE5VTEwp
OworCisJcHJpdiA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IG5ldG1hcF9wcml2KSk7CisJaWYg
KHByaXYgPT0gTlVMTCkgeworCQlXUFJJTlRGKCgiVW5hYmxlIGFsbG9jIG5ldG1hcCBwcml2YXRl
IGRhdGFcbiIpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXN0cm5jcHkocHJpdi0+aWZuYW1lLCBk
ZXZuYW1lLCBzaXplb2YocHJpdi0+aWZuYW1lKSk7CisJcHJpdi0+aWZuYW1lW3NpemVvZihwcml2
LT5pZm5hbWUpIC0gMV0gPSAnXDAnOworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsK
KwlyZXEubnJfZmxhZ3MgPSBwdG5ldG1hcCA/IE5SX1BUTkVUTUFQX0hPU1QgOiAwOworCisJcHJp
di0+bm1kID0gbm1fb3Blbihwcml2LT5pZm5hbWUsICZyZXEsIE5FVE1BUF9OT19UWF9QT0xMLCBO
VUxMKTsKKwlpZiAocHJpdi0+bm1kID09IE5VTEwpIHsKKwkJV1BSSU5URigoIlVuYWJsZSB0byBu
bV9vcGVuKCk6IGRldmljZSAnJXMnLCAiCisJCQkJImludGVyZmFjZSAnJXMnLCBlcnJubyAoJXMp
XG4iLAorCQkJCW5kbmFtZSwgZGV2bmFtZSwgc3RyZXJyb3IoZXJybm8pKSk7CisJCWZyZWUocHJp
dik7CisJCXJldHVybiAtMTsKKwl9CisKKwlwcml2LT5tZW1pZCA9IHByaXYtPm5tZC0+cmVxLm5y
X2FyZzI7CisJcHJpdi0+dHggPSBORVRNQVBfVFhSSU5HKHByaXYtPm5tZC0+bmlmcCwgMCk7CisJ
cHJpdi0+cnggPSBORVRNQVBfUlhSSU5HKHByaXYtPm5tZC0+bmlmcCwgMCk7CisJcHJpdi0+Y2Ig
PSBjYjsKKwlwcml2LT5jYl9wYXJhbSA9IHBhcmFtOworCWJlLT5mZCA9IHByaXYtPm5tZC0+ZmQ7
CisJYmUtPnByaXYgPSBwcml2OworCisJcHJpdi0+cHRuZXRtYXAubmV0bWFwX3ByaXYgPSBwcml2
OworCXByaXYtPnB0bmV0bWFwLmZlYXR1cmVzID0gMDsKKwlwcml2LT5wdG5ldG1hcC5hY2tlZF9m
ZWF0dXJlcyA9IDA7CisJcHJpdi0+cHRuZXRtYXAucnVubmluZyA9IDA7CisJaWYgKHB0bmV0bWFw
KSB7CisJCWlmIChuZXRtYXBfaGFzX3ZuZXRfaGRyX2xlbihiZSwgVk5FVF9IRFJfTEVOKSkgewor
CQkJcHJpdi0+cHRuZXRtYXAuZmVhdHVyZXMgfD0gUFRORVRNQVBfRl9WTkVUX0hEUjsKKwkJfQor
CX0gZWxzZSB7CisJCWNoYXIgdG5hbWVbNDBdOworCisJCS8qIENyZWF0ZSBhIHRocmVhZCBmb3Ig
bmV0bWFwIHBvbGwuICovCisJCXB0aHJlYWRfY3JlYXRlKCZwcml2LT5ldmxvb3BfdGlkLCBOVUxM
LCBuZXRtYXBfZXZsb29wX3RocmVhZCwgKHZvaWQgKiliZSk7CisJCXNucHJpbnRmKHRuYW1lLCBz
aXplb2YodG5hbWUpLCAibmV0bWFwLWV2bG9vcC0lcCIsIHByaXYpOworCQlwdGhyZWFkX3NldF9u
YW1lX25wKHByaXYtPmV2bG9vcF90aWQsIHRuYW1lKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwor
c3RhdGljIHZvaWQKK25ldG1hcF9jbGVhbnVwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJ
c3RydWN0IG5ldG1hcF9wcml2ICpwcml2ID0gYmUtPnByaXY7CisKKwlpZiAoYmUtPnByaXYpIHsK
KwkJaWYgKHByaXYtPnB0bmV0bWFwLnJ1bm5pbmcpIHsKKwkJCXB0bmV0bWFwX2RlbGV0ZSgmcHJp
di0+cHRuZXRtYXApOworCQl9CisJCW5tX2Nsb3NlKHByaXYtPm5tZCk7CisJCWZyZWUoYmUtPnBy
aXYpOworCQliZS0+cHJpdiA9IE5VTEw7CisJfQorCWJlLT5mZCA9IC0xOworfQorCisvKiBBIGZh
c3QgY29weSByb3V0aW5lIG9ubHkgZm9yIG11bHRpcGxlcyBvZiA2NCBieXRlcywgbm9uIG92ZXJs
YXBwZWQuICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3BrdF9jb3B5KGNvbnN0IHZvaWQgKl9zcmMs
IHZvaWQgKl9kc3QsIGludCBsKQoreworICAgIGNvbnN0IHVpbnQ2NF90ICpzcmMgPSBfc3JjOwor
ICAgIHVpbnQ2NF90ICpkc3QgPSBfZHN0OworICAgIGlmIChsID49IDEwMjQpIHsKKyAgICAgICAg
YmNvcHkoc3JjLCBkc3QsIGwpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoOyBs
ID4gMDsgbCAtPSA2NCkgeworICAgICAgICAqZHN0KysgPSAqc3JjKys7CisgICAgICAgICpkc3Qr
KyA9ICpzcmMrKzsKKyAgICAgICAgKmRzdCsrID0gKnNyYysrOworICAgICAgICAqZHN0KysgPSAq
c3JjKys7CisgICAgICAgICpkc3QrKyA9ICpzcmMrKzsKKyAgICAgICAgKmRzdCsrID0gKnNyYysr
OworICAgICAgICAqZHN0KysgPSAqc3JjKys7CisgICAgICAgICpkc3QrKyA9ICpzcmMrKzsKKyAg
ICB9Cit9CisKK3N0YXRpYyBpbnQKK25ldG1hcF9zZW5kKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUs
IHN0cnVjdCBpb3ZlYyAqaW92LAorCSAgICBpbnQgaW92Y250LCB1aW50MzJfdCBzaXplLCBpbnQg
bW9yZSkKK3sKKwlzdHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYgPSBiZS0+cHJpdjsKKwlzdHJ1Y3Qg
bmV0bWFwX3JpbmcgKnJpbmc7CisJaW50IG5tX2J1Zl9zaXplOworCWludCBubV9idWZfbGVuOwor
CXVpbnQzMl90IGhlYWQ7CisJdm9pZCAqbm1fYnVmOworCWludCBqOworCisJaWYgKGlvdmNudCA8
PSAwIHx8IHNpemUgPD0gMCkgeworCQlEKCJXcm9uZyBpb3Y6IGlvdmNudCAlZCBzaXplICVkIiwg
aW92Y250LCBzaXplKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmluZyA9IHByaXYtPnR4OworCWhl
YWQgPSByaW5nLT5oZWFkOworCWlmIChoZWFkID09IHJpbmctPnRhaWwpIHsKKwkJUkQoMSwgIk5v
IHNwYWNlLCBkcm9wICVkIGJ5dGVzIiwgc2l6ZSk7CisJCWdvdG8gdHhzeW5jOworCX0KKwlubV9i
dWYgPSBORVRNQVBfQlVGKHJpbmcsIHJpbmctPnNsb3RbaGVhZF0uYnVmX2lkeCk7CisJbm1fYnVm
X3NpemUgPSByaW5nLT5ucl9idWZfc2l6ZTsKKwlubV9idWZfbGVuID0gMDsKKworCWZvciAoaiA9
IDA7IGogPCBpb3ZjbnQ7IGorKykgeworCQlpbnQgaW92X2ZyYWdfc2l6ZSA9IGlvdltqXS5pb3Zf
bGVuOworCQl2b2lkICppb3ZfZnJhZ19idWYgPSBpb3Zbal0uaW92X2Jhc2U7CisKKwkJLyogU3Bs
aXQgZWFjaCBpb3ZlYyBmcmFnbWVudCBvdmVyIG1vcmUgbmV0bWFwIHNsb3RzLCBpZgorCQkgICBu
ZWNlc3NhcnkuICovCisJCWZvciAoOzspIHsKKwkJCWludCBjb3B5bGVuOworCisJCQljb3B5bGVu
ID0gaW92X2ZyYWdfc2l6ZSA8IG5tX2J1Zl9zaXplID8gaW92X2ZyYWdfc2l6ZSA6IG5tX2J1Zl9z
aXplOworCQkJcGt0X2NvcHkoaW92X2ZyYWdfYnVmLCBubV9idWYsIGNvcHlsZW4pOworCisJCQlp
b3ZfZnJhZ19idWYgKz0gY29weWxlbjsKKwkJCWlvdl9mcmFnX3NpemUgLT0gY29weWxlbjsKKwkJ
CW5tX2J1ZiArPSBjb3B5bGVuOworCQkJbm1fYnVmX3NpemUgLT0gY29weWxlbjsKKwkJCW5tX2J1
Zl9sZW4gKz0gY29weWxlbjsKKworCQkJaWYgKGlvdl9mcmFnX3NpemUgPT0gMCkgeworCQkJCWJy
ZWFrOworCQkJfQorCisJCQlyaW5nLT5zbG90W2hlYWRdLmxlbiA9IG5tX2J1Zl9sZW47CisJCQly
aW5nLT5zbG90W2hlYWRdLmZsYWdzID0gTlNfTU9SRUZSQUc7CisJCQloZWFkID0gbm1fcmluZ19u
ZXh0KHJpbmcsIGhlYWQpOworCQkJaWYgKGhlYWQgPT0gcmluZy0+dGFpbCkgeworCQkJCS8qIFdl
IHJhbiBvdXQgb2YgbmV0bWFwIHNsb3RzIHdoaWxlCisJCQkJICogc3BsaXR0aW5nIHRoZSBpb3Zl
YyBmcmFnbWVudHMuICovCisJCQkJUkQoMSwgIk5vIHNwYWNlLCBkcm9wICVkIGJ5dGVzIiwgc2l6
ZSk7CisJCQkJZ290byB0eHN5bmM7CisJCQl9CisJCQlubV9idWYgPSBORVRNQVBfQlVGKHJpbmcs
IHJpbmctPnNsb3RbaGVhZF0uYnVmX2lkeCk7CisJCQlubV9idWZfc2l6ZSA9IHJpbmctPm5yX2J1
Zl9zaXplOworCQkJbm1fYnVmX2xlbiA9IDA7CisJCX0KKwl9CisKKwkvKiBDb21wbGV0ZSB0aGUg
bGFzdCBzbG90LCB3aGljaCBtdXN0IG5vdCBoYXZlIE5TX01PUkVGUkFHIHNldC4gKi8KKwlyaW5n
LT5zbG90W2hlYWRdLmxlbiA9IG5tX2J1Zl9sZW47CisJcmluZy0+c2xvdFtoZWFkXS5mbGFncyA9
IDA7CisJaGVhZCA9IG5tX3JpbmdfbmV4dChyaW5nLCBoZWFkKTsKKworCS8qIE5vdyB1cGRhdGUg
cmluZy0+aGVhZCBhbmQgcmluZy0+Y3VyLiAqLworCXJpbmctPmhlYWQgPSByaW5nLT5jdXIgPSBo
ZWFkOworCisJaWYgKG1vcmUpIHsvLyAmJiBubV9yaW5nX3NwYWNlKHJpbmcpID4gNjQKKwkJcmV0
dXJuIDA7CisJfQordHhzeW5jOgorCWlvY3RsKGJlLT5mZCwgTklPQ1RYU1lOQywgTlVMTCk7CisK
KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbmV0bWFwX3JlY3Yoc3RydWN0IG5ldF9iYWNr
ZW5kICpiZSwgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQpCit7CisJc3RydWN0IG5ldG1h
cF9wcml2ICpwcml2ID0gYmUtPnByaXY7CisJc3RydWN0IG5ldG1hcF9zbG90ICpzbG90ID0gTlVM
TDsKKwlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJpbmc7CisJdm9pZCAqaW92X2ZyYWdfYnVmOworCWlu
dCBpb3ZfZnJhZ19zaXplOworCWludCB0b3RsZW4gPSAwOworCXVpbnQzMl90IGhlYWQ7CisKKwlh
c3NlcnQoaW92Y250KTsKKworCXJpbmcgPSBwcml2LT5yeDsKKwloZWFkID0gcmluZy0+aGVhZDsK
Kwlpb3ZfZnJhZ19idWYgPSBpb3YtPmlvdl9iYXNlOworCWlvdl9mcmFnX3NpemUgPSBpb3YtPmlv
dl9sZW47CisKKwlkbyB7CisJCWludCBubV9idWZfbGVuOworCQl2b2lkICpubV9idWY7CisKKwkJ
aWYgKGhlYWQgPT0gcmluZy0+dGFpbCkgeworCQkJcmV0dXJuIDA7CisJCX0KKworCQlzbG90ID0g
cmluZy0+c2xvdCArIGhlYWQ7CisJCW5tX2J1ZiA9IE5FVE1BUF9CVUYocmluZywgc2xvdC0+YnVm
X2lkeCk7CisJCW5tX2J1Zl9sZW4gPSBzbG90LT5sZW47CisKKwkJZm9yICg7OykgeworCQkJaW50
IGNvcHlsZW4gPSBubV9idWZfbGVuIDwgaW92X2ZyYWdfc2l6ZSA/IG5tX2J1Zl9sZW4gOiBpb3Zf
ZnJhZ19zaXplOworCisJCQlwa3RfY29weShubV9idWYsIGlvdl9mcmFnX2J1ZiwgY29weWxlbik7
CisJCQlubV9idWYgKz0gY29weWxlbjsKKwkJCW5tX2J1Zl9sZW4gLT0gY29weWxlbjsKKwkJCWlv
dl9mcmFnX2J1ZiArPSBjb3B5bGVuOworCQkJaW92X2ZyYWdfc2l6ZSAtPSBjb3B5bGVuOworCQkJ
dG90bGVuICs9IGNvcHlsZW47CisKKwkJCWlmIChubV9idWZfbGVuID09IDApIHsKKwkJCQlicmVh
azsKKwkJCX0KKworCQkJaW92Kys7CisJCQlpb3ZjbnQtLTsKKwkJCWlmIChpb3ZjbnQgPT0gMCkg
eworCQkJCS8qIE5vIHNwYWNlIHRvIHJlY2VpdmUuICovCisJCQkJRCgiU2hvcnQgaW92LCBkcm9w
ICVkIGJ5dGVzIiwgdG90bGVuKTsKKwkJCQlyZXR1cm4gLUVOT1NQQzsKKwkJCX0KKwkJCWlvdl9m
cmFnX2J1ZiA9IGlvdi0+aW92X2Jhc2U7CisJCQlpb3ZfZnJhZ19zaXplID0gaW92LT5pb3ZfbGVu
OworCQl9CisKKwkJaGVhZCA9IG5tX3JpbmdfbmV4dChyaW5nLCBoZWFkKTsKKworCX0gd2hpbGUg
KHNsb3QtPmZsYWdzICYgTlNfTU9SRUZSQUcpOworCisJLyogUmVsZWFzZSBzbG90cyB0byBuZXRt
YXAuICovCisJcmluZy0+aGVhZCA9IHJpbmctPmN1ciA9IGhlYWQ7CisKKwlyZXR1cm4gdG90bGVu
OworfQorCitzdGF0aWMgc3RydWN0IG5ldF9iYWNrZW5kIG5ldG1hcF9iYWNrZW5kID0geworCS5u
YW1lID0gIm5ldG1hcHx2YWxlIiwKKwkuaW5pdCA9IG5ldG1hcF9pbml0LAorCS5jbGVhbnVwID0g
bmV0bWFwX2NsZWFudXAsCisJLnNlbmQgPSBuZXRtYXBfc2VuZCwKKwkucmVjdiA9IG5ldG1hcF9y
ZWN2LAorCS5nZXRfY2FwID0gbmV0bWFwX2dldF9jYXAsCisJLnNldF9jYXAgPSBuZXRtYXBfc2V0
X2NhcCwKK307CisKK0RBVEFfU0VUKG5ldF9iYWNrZW5kX3MsIG5ldG1hcF9iYWNrZW5kKTsKKwor
I2VuZGlmIC8qIFdJVEhfTkVUTUFQICovCisKKy8qCisgKiBtYWtlIHN1cmUgYSBiYWNrZW5kIGlz
IHByb3Blcmx5IGluaXRpYWxpemVkCisgKi8KK3N0YXRpYyB2b2lkCituZXRiZV9maXgoc3RydWN0
IG5ldF9iYWNrZW5kICpiZSkKK3sKKwlpZiAoYmUgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmIChi
ZS0+bmFtZSA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAibWlzc2luZyBuYW1lIGZvciAl
cFxuIiwgYmUpOworCQliZS0+bmFtZSA9ICJ1bm5hbWVkIG5ldGJlIjsKKwl9CisJaWYgKGJlLT5p
bml0ID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJtaXNzaW5nIGluaXQgZm9yICVwICVz
XG4iLCBiZSwgYmUtPm5hbWUpOworCQliZS0+aW5pdCA9IG5ldGJlX251bGxfaW5pdDsKKwl9CisJ
aWYgKGJlLT5jbGVhbnVwID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJtaXNzaW5nIGNs
ZWFudXAgZm9yICVwICVzXG4iLCBiZSwgYmUtPm5hbWUpOworCQliZS0+Y2xlYW51cCA9IG5ldGJl
X251bGxfY2xlYW51cDsKKwl9CisJaWYgKGJlLT5zZW5kID09IE5VTEwpIHsKKwkJZnByaW50Zihz
dGRlcnIsICJtaXNzaW5nIHNlbmQgZm9yICVwICVzXG4iLCBiZSwgYmUtPm5hbWUpOworCQliZS0+
c2VuZCA9IG5ldGJlX251bGxfc2VuZDsKKwl9CisJaWYgKGJlLT5yZWN2ID09IE5VTEwpIHsKKwkJ
ZnByaW50ZihzdGRlcnIsICJtaXNzaW5nIHJlY3YgZm9yICVwICVzXG4iLCBiZSwgYmUtPm5hbWUp
OworCQliZS0+cmVjdiA9IG5ldGJlX251bGxfcmVjdjsKKwl9CisJaWYgKGJlLT5nZXRfY2FwID09
IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJtaXNzaW5nIGdldF9jYXAgZm9yICVwICVzXG4i
LAorCQkJYmUsIGJlLT5uYW1lKTsKKwkJYmUtPmdldF9jYXAgPSBuZXRiZV9udWxsX2dldF9jYXA7
CisJfQorCWlmIChiZS0+c2V0X2NhcCA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAibWlz
c2luZyBzZXRfY2FwIGZvciAlcCAlc1xuIiwKKwkJCWJlLCBiZS0+bmFtZSk7CisJCWJlLT5zZXRf
Y2FwID0gbmV0YmVfbnVsbF9zZXRfY2FwOworCX0KK30KKworLyoKKyAqIGtleXMgaXMgYSBzZXQg
b2YgcHJlZml4ZXMgc2VwYXJhdGVkIGJ5ICd8JywKKyAqIHJldHVybiAxIGlmIHRoZSBsZWZ0bW9z
dCBwYXJ0IG9mIG5hbWUgbWF0Y2hlcyBvbmUgcHJlZml4LgorICovCitzdGF0aWMgY29uc3QgY2hh
ciAqCituZXRiZV9uYW1lX21hdGNoKGNvbnN0IGNoYXIgKmtleXMsIGNvbnN0IGNoYXIgKm5hbWUp
Cit7CisJY29uc3QgY2hhciAqbiA9IG5hbWUsICpnb29kID0ga2V5czsKKwljaGFyIGM7CisKKwlp
ZiAoIWtleXMgfHwgIW5hbWUpCisJCXJldHVybiBOVUxMOworCXdoaWxlICggKGMgPSAqa2V5cysr
KSApIHsKKwkJaWYgKGMgPT0gJ3wnKSB7IC8qIHJlYWNoZWQgdGhlIHNlcGFyYXRvciAqLworCQkJ
aWYgKGdvb2QpCisJCQkJYnJlYWs7CisJCQkvKiBwcmVwYXJlIGZvciBuZXcgcm91bmQgKi8KKwkJ
CW4gPSBuYW1lOworCQkJZ29vZCA9IGtleXM7CisJCX0gZWxzZSBpZiAoZ29vZCAmJiBjICE9ICpu
KyspIHsKKwkJCWdvb2QgPSBOVUxMOyAvKiBkcm9wIHRpbGwgbmV4dCBrZXl3b3JkICovCisJCX0K
Kwl9CisJcmV0dXJuIGdvb2Q7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGEgYmFja2VuZCBhbmQg
YXR0YWNoIHRvIHRoZSBmcm9udGVuZC4KKyAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBmcm9udGVu
ZCBpbml0aWFsaXphdGlvbi4KKyAqIGRldm5hbWUgaXMgdGhlIGJhY2tlbmQtbmFtZSBhcyBzdXBw
bGllZCBvbiB0aGUgY29tbWFuZCBsaW5lLAorICogCWUuZy4gLXMgMjowLGZyb250ZW5kLW5hbWUs
YmFja2VuZC1uYW1lWyxvdGhlci1hcmdzXQorICogY2IgaXMgdGhlIHJlY2VpdmUgY2FsbGJhY2sg
c3VwcGxpZWQgYnkgdGhlIGZyb250ZW5kLAorICoJYW5kIGl0IGlzIGludm9rZWQgaW4gdGhlIGV2
ZW50IGxvb3Agd2hlbiBhIHJlY2VpdmUKKyAqCWV2ZW50IGlzIGdlbmVyYXRlZCBpbiB0aGUgaHlw
ZXJ2aXNvciwKKyAqIHBhcmFtIGlzIGEgcG9pbnRlciB0byB0aGUgZnJvbnRlbmQsIGFuZCBub3Jt
YWxseSB1c2VkIGFzCisgKgl0aGUgYXJndW1lbnQgZm9yIHRoZSBjYWxsYmFjay4KKyAqLworc3Ry
dWN0IG5ldF9iYWNrZW5kICoKK25ldGJlX2luaXQoY29uc3QgY2hhciAqZGV2bmFtZSwgbmV0X2Jh
Y2tlbmRfY2JfdCBjYiwgdm9pZCAqcGFyYW0pCit7CisJc3RydWN0IG5ldF9iYWNrZW5kICoqcGJl
LCAqYmUsICp0YmUgPSBOVUxMOworCWludCBlcnI7CisKKwkvKgorCSAqIEZpbmQgdGhlIG5ldHdv
cmsgYmFja2VuZCBkZXBlbmRpbmcgb24gdGhlIHVzZXItcHJvdmlkZWQKKwkgKiBkZXZpY2UgbmFt
ZS4gbmV0X2JhY2tlbmRfcyBpcyBidWlsdCB1c2luZyBhIGxpbmtlciBzZXQuCisJICovCisJU0VU
X0ZPUkVBQ0gocGJlLCBuZXRfYmFja2VuZF9zKSB7CisJCWlmIChuZXRiZV9uYW1lX21hdGNoKCgq
cGJlKS0+bmFtZSwgZGV2bmFtZSkpIHsKKwkJCXRiZSA9ICpwYmU7CisJCQlicmVhazsKKwkJfQor
CX0KKwlpZiAodGJlID09IE5VTEwpCisJCXJldHVybiBOVUxMOyAvKiBvciBudWxsIGJhY2tlbmQg
PyAqLworCWJlID0gY2FsbG9jKDEsIHNpemVvZigqYmUpKTsKKwkqYmUgPSAqdGJlOwkvKiBjb3B5
IHRoZSB0ZW1wbGF0ZSAqLworCW5ldGJlX2ZpeChiZSk7IC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGFs
bCBmaWVsZHMgKi8KKwliZS0+ZmQgPSAtMTsKKwliZS0+cHJpdiA9IE5VTEw7CisJYmUtPnNjID0g
cGFyYW07CisJYmUtPmJlX3ZuZXRfaGRyX2xlbiA9IDA7CisJYmUtPmZlX3ZuZXRfaGRyX2xlbiA9
IDA7CisKKwkvKiBpbml0aWFsaXplIHRoZSBiYWNrZW5kICovCisJZXJyID0gYmUtPmluaXQoYmUs
IGRldm5hbWUsIGNiLCBwYXJhbSk7CisJaWYgKGVycikgeworCQlmcmVlKGJlKTsKKwkJYmUgPSBO
VUxMOworCX0KKwlyZXR1cm4gYmU7Cit9CisKK3ZvaWQKK25ldGJlX2NsZWFudXAoc3RydWN0IG5l
dF9iYWNrZW5kICpiZSkKK3sKKwlpZiAoYmUgPT0gTlVMTCkKKwkJcmV0dXJuOworCWJlLT5jbGVh
bnVwKGJlKTsKKwlmcmVlKGJlKTsKK30KKwordWludDY0X3QKK25ldGJlX2dldF9jYXAoc3RydWN0
IG5ldF9iYWNrZW5kICpiZSkKK3sKKwlpZiAoYmUgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJcmV0
dXJuIGJlLT5nZXRfY2FwKGJlKTsKK30KKworaW50CituZXRiZV9zZXRfY2FwKHN0cnVjdCBuZXRf
YmFja2VuZCAqYmUsIHVpbnQ2NF90IGZlYXR1cmVzLAorCSAgICAgIHVuc2lnbmVkIHZuZXRfaGRy
X2xlbikKK3sKKwlpbnQgcmV0OworCisJaWYgKGJlID09IE5VTEwpCisJCXJldHVybiAwOworCisJ
LyogVGhlcmUgYXJlIG9ubHkgdGhyZWUgdmFsaWQgbGVuZ3Rocy4gKi8KKwlpZiAodm5ldF9oZHJf
bGVuICYmIHZuZXRfaGRyX2xlbiAhPSBWTkVUX0hEUl9MRU4KKwkJJiYgdm5ldF9oZHJfbGVuICE9
IChWTkVUX0hEUl9MRU4gLSBzaXplb2YodWludDE2X3QpKSkKKwkJcmV0dXJuIC0xOworCisJYmUt
PmZlX3ZuZXRfaGRyX2xlbiA9IHZuZXRfaGRyX2xlbjsKKworCXJldCA9IGJlLT5zZXRfY2FwKGJl
LCBmZWF0dXJlcywgdm5ldF9oZHJfbGVuKTsKKwlhc3NlcnQoYmUtPmJlX3ZuZXRfaGRyX2xlbiA9
PSAwIHx8CisJICAgICAgIGJlLT5iZV92bmV0X2hkcl9sZW4gPT0gYmUtPmZlX3ZuZXRfaGRyX2xl
bik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgX19pbmxpbmUgc3RydWN0IGlvdmVjICoK
K2lvdl90cmltKHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgKmlvdmNudCwgdW5zaWduZWQgaW50IHRs
ZW4pCit7CisJc3RydWN0IGlvdmVjICpyaW92OworCisJLyogWFhYIHNob3J0LWN1dDogYXNzdW1l
IGZpcnN0IHNlZ21lbnQgaXMgPj0gdGxlbiAqLworCWFzc2VydChpb3ZbMF0uaW92X2xlbiA+PSB0
bGVuKTsKKworCWlvdlswXS5pb3ZfbGVuIC09IHRsZW47CisJaWYgKGlvdlswXS5pb3ZfbGVuID09
IDApIHsKKwkJYXNzZXJ0KCppb3ZjbnQgPiAxKTsKKwkJKmlvdmNudCAtPSAxOworCQlyaW92ID0g
JmlvdlsxXTsKKwl9IGVsc2UgeworCQlpb3ZbMF0uaW92X2Jhc2UgPSAodm9pZCAqKSgodWludHB0
cl90KWlvdlswXS5pb3ZfYmFzZSArIHRsZW4pOworCQlyaW92ID0gJmlvdlswXTsKKwl9CisKKwly
ZXR1cm4gKHJpb3YpOworfQorCit2b2lkCituZXRiZV9zZW5kKHN0cnVjdCBuZXRfYmFja2VuZCAq
YmUsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250LCB1aW50MzJfdCBsZW4sCisJICAgaW50
IG1vcmUpCit7CisJaWYgKGJlID09IE5VTEwpCisJCXJldHVybjsKKyNpZiAwCisJaW50IGk7CisJ
RCgic2VuZGluZyBpb3ZjbnQgJWQgbGVuICVkIGlvdmVjICVwIiwgaW92Y250LCBsZW4sIGlvdik7
CisJZm9yIChpPTA7IGkgPCBpb3ZjbnQ7IGkrKykKKwkJRCgiICAgJTNkOiAlNGQgJXAiLCBpLCAo
aW50KWlvdltpXS5pb3ZfbGVuLCBpb3ZbaV0uaW92X2Jhc2UpOworI2VuZGlmCisJaWYgKGJlLT5i
ZV92bmV0X2hkcl9sZW4gIT0gYmUtPmZlX3ZuZXRfaGRyX2xlbikgeworCQkvKiBIZXJlIHdlIGFy
ZSBzdXJlIGJlLT5iZV92bmV0X2hkcl9sZW4gaXMgMC4gKi8KKwkJaW92ID0gaW92X3RyaW0oaW92
LCAmaW92Y250LCBiZS0+ZmVfdm5ldF9oZHJfbGVuKTsKKwl9CisKKwliZS0+c2VuZChiZSwgaW92
LCBpb3ZjbnQsIGxlbiwgbW9yZSk7Cit9CisKKy8qCisgKiBjYW4gcmV0dXJuIC0xIGluIGNhc2Ug
b2YgZXJyb3JzCisgKi8KK2ludAorbmV0YmVfcmVjdihzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBz
dHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCkKK3sKKwl1bnNpZ25lZCBpbnQgaGxlbiA9IDA7
IC8qIGxlbmd0aCBvZiBwcmVwZW5kZWQgdmlydGlvLW5ldCBoZWFkZXIgKi8KKwlpbnQgcmV0Owor
CisJaWYgKGJlID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCWlmIChiZS0+YmVfdm5ldF9oZHJf
bGVuICE9IGJlLT5mZV92bmV0X2hkcl9sZW4pIHsKKwkJc3RydWN0IHZpcnRpb19uZXRfcnhoZHIg
KnZoOworCisJCS8qIEhlcmUgd2UgYXJlIHN1cmUgYmUtPmJlX3ZuZXRfaGRyX2xlbiBpcyAwLiAq
LworCQlobGVuID0gYmUtPmZlX3ZuZXRfaGRyX2xlbjsKKwkJLyoKKwkJICogR2V0IGEgcG9pbnRl
ciB0byB0aGUgcnggaGVhZGVyLCBhbmQgdXNlIHRoZQorCQkgKiBkYXRhIGltbWVkaWF0ZWx5IGZv
bGxvd2luZyBpdCBmb3IgdGhlIHBhY2tldCBidWZmZXIuCisJCSAqLworCQl2aCA9IGlvdlswXS5p
b3ZfYmFzZTsKKwkJaW92ID0gaW92X3RyaW0oaW92LCAmaW92Y250LCBobGVuKTsKKworCQkvKgor
CQkgKiBIZXJlIHdlIGFyZSBzdXJlIGJlLT5mZV92bmV0X2hkcl9sZW4gaXMgMC4KKwkJICogVGhl
IG9ubHkgdmFsaWQgZmllbGQgaW4gdGhlIHJ4IHBhY2tldCBoZWFkZXIgaXMgdGhlCisJCSAqIG51
bWJlciBvZiBidWZmZXJzIGlmIG1lcmdlZCByeCBidWZzIHdlcmUgbmVnb3RpYXRlZC4KKwkJICov
CisJCW1lbXNldCh2aCwgMCwgaGxlbik7CisKKwkJaWYgKGhsZW4gPT0gVk5FVF9IRFJfTEVOKSB7
CisJCQl2aC0+dnJoX2J1ZnMgPSAxOworCQl9CisJfQorCisJcmV0ID0gYmUtPnJlY3YoYmUsIGlv
diwgaW92Y250KTsKKwlpZiAocmV0ID4gMCkgeworCQlyZXQgKz0gaGxlbjsKKwl9CisKKwlyZXR1
cm4gcmV0OworfQorCisvKgorICogUmVhZCBhIHBhY2tldCBmcm9tIHRoZSBiYWNrZW5kIGFuZCBk
aXNjYXJkIGl0LgorICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZGlzY2FyZGVkIHBhY2tldCBv
ciB6ZXJvIGlmIG5vIHBhY2tldCB3YXMgYXZhaWxhYmxlLgorICogQSBuZWdhdGl2ZSBlcnJvciBj
b2RlIGlzIHJldHVybmVkIGluIGNhc2Ugb2YgcmVhZCBlcnJvci4KKyAqLworaW50CituZXRiZV9y
eF9kaXNjYXJkKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJLyoKKwkgKiBNUCBub3RlOiB0
aGUgZHVtbXlidWYgaXMgb25seSB1c2VkIHRvIGRpc2NhcmQgZnJhbWVzLAorCSAqIHNvIHRoZXJl
IGlzIG5vIG5lZWQgZm9yIGl0IHRvIGJlIHBlci12dG5ldCBvciBsb2NrZWQuCisJICogV2Ugb25s
eSBtYWtlIGl0IGxhcmdlIGVub3VnaCBmb3IgVFNPLXNpemVkIHNlZ21lbnQuCisJICovCisJc3Rh
dGljIHVpbnQ4X3QgZHVtbXlidWZbNjU1MzYrNjRdOworCXN0cnVjdCBpb3ZlYyBpb3Y7CisKKwlp
b3YuaW92X2Jhc2UgPSBkdW1teWJ1ZjsKKwlpb3YuaW92X2xlbiA9IHNpemVvZihkdW1teWJ1Zik7
CisKKwlyZXR1cm4gbmV0YmVfcmVjdihiZSwgJmlvdiwgMSk7Cit9CisKKy8qLQorICogQ29weXJp
Z2h0IChjKSAyMDE0LTIwMTYgVmluY2Vuem8gTWFmZmlvbmUKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVU
SE9SIEFORCBDT05UUklCVVRPUlNgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IEFVVEhPUiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisg
KiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
CisgKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8qCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyBtdWx0aXBsZSBuZXR3b3JrIGJhY2tl
bmRzIChudWxsLCB0YXAsIG5ldG1hcCwgLi4uKSwKKyAqIHRvIGJlIHVzZWQgYnkgbmV0d29yayBm
cm9udGVuZHMgc3VjaCBhcyB2aXJ0aW8tbmV0IGFuZCBwdG5ldC4KKyAqIFRoZSBBUEkgdG8gYWNj
ZXNzIHRoZSBiYWNrZW5kIChlLmcuIHNlbmQvcmVjZWl2ZSBwYWNrZXRzLCBuZWdvdGlhdGUKKyAq
IGZlYXR1cmVzKSBpcyBleHBvcnRlZCBieSBuZXRfYmFja2VuZHMuaC4KKyAqLworCisjaW5jbHVk
ZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgorI2luY2x1ZGUgPHN5cy9pb2N0
bC5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CQkvKiB1
X3Nob3J0IGV0YyAqLworI2luY2x1ZGUgPG5ldC9pZi5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4K
KyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGli
Lmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8
dW5pc3RkLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2lu
Y2x1ZGUgPHB0aHJlYWRfbnAuaD4KKyNpbmNsdWRlIDxwb2xsLmg+CisjaW5jbHVkZSA8YXNzZXJ0
Lmg+CisKKyNpbmNsdWRlICJtZXZlbnQuaCIKKyNpbmNsdWRlICJuZXRfYmFja2VuZHMuaCIKKwor
I2luY2x1ZGUgPHN5cy9saW5rZXJfc2V0Lmg+CisKKy8qCisgKiBFYWNoIG5ldHdvcmsgYmFja2Vu
ZCByZWdpc3RlcnMgYSBzZXQgb2YgZnVuY3Rpb24gcG9pbnRlcnMgdGhhdCBhcmUKKyAqIHVzZWQg
dG8gaW1wbGVtZW50IHRoZSBuZXQgYmFja2VuZHMgQVBJLgorICogVGhpcyBtaWdodCBuZWVkIHRv
IGJlIGV4cG9zZWQgaWYgd2UgaW1wbGVtZW50IGJhY2tlbmRzIGluIHNlcGFyYXRlIGZpbGVzLgor
ICovCitzdHJ1Y3QgbmV0X2JhY2tlbmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CS8qIG5hbWUgb2Yg
dGhlIGJhY2tlbmQgKi8KKwkvKgorCSAqIFRoZSBpbml0IGFuZCBjbGVhbnVwIGZ1bmN0aW9ucyBh
cmUgdXNlZCBpbnRlcm5hbGx5LAorCSAqIHZpcnRpby1uZXQgc2hvdWxkIG5ldmVyIHVzZSBpdC4K
KwkgKi8KKwlpbnQgKCppbml0KShzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBjb25zdCBjaGFyICpk
ZXZuYW1lLAorCQkJCW5ldF9iYWNrZW5kX2NiX3QgY2IsIHZvaWQgKnBhcmFtKTsKKwl2b2lkICgq
Y2xlYW51cCkoc3RydWN0IG5ldF9iYWNrZW5kICpiZSk7CisKKworCS8qCisJICogQ2FsbGVkIHRv
IHNlcnZlIGEgZ3Vlc3QgdHJhbnNtaXQgcmVxdWVzdC4gVGhlIHNjYXR0ZXItZ2F0aGVyCisJICog
dmVjdG9yIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIgaGFzICdpb3ZjbnQnIGVsZW1lbnRzIGFuZCBj
b250YWlucworCSAqIHRoZSBwYWNrZXQgdG8gc2VuZC4gJ2xlbicgaXMgdGhlIGxlbmd0aCBvZiB3
aG9sZSBwYWNrZXQgaW4gYnl0ZXMuCisJICovCisJaW50ICgqc2VuZCkoc3RydWN0IG5ldF9iYWNr
ZW5kICpiZSwgc3RydWN0IGlvdmVjICppb3YsCisJCQlpbnQgaW92Y250LCB1aW50MzJfdCBsZW4s
IGludCBtb3JlKTsKKworCS8qCisJICogQ2FsbGVkIHRvIHNlcnZlIGd1ZXN0IHJlY2VpdmUgcmVx
dWVzdC4gV2hlbiB0aGUgZnVuY3Rpb24KKwkgKiByZXR1cm5zIGEgcG9zaXRpdmUgdmFsdWUsIHRo
ZSBzY2F0dGVyLWdhdGhlciB2ZWN0b3IKKwkgKiBwcm92aWRlZCBieSB0aGUgY2FsbGVyIChoYXZp
bmcgJ2lvdmNudCcgZWxlbWVudHMgaW4gaXQpIHdpbGwKKwkgKiBjb250YWluIGEgY2h1bmsgb2Yg
dGhlIHJlY2VpdmVkIHBhY2tldC4gVGhlICdtb3JlJyBmbGFnIHdpbGwKKwkgKiBiZSBzZXQgaWYg
dGhlIHJldHVybmVkIGNodW5rIHdhcyB0aGUgbGFzdCBvbmUgZm9yIHRoZSBjdXJyZW50CisJICog
cGFja2V0LCBhbmQgMCBvdGhlcndpc2UuIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBjaHVuayBz
aXplCisJICogaW4gYnl0ZXMsIG9yIDAgaWYgdGhlIGJhY2tlbmQgZG9lc24ndCBoYXZlIGEgbmV3
IHBhY2tldCB0bworCSAqIHJlY2VpdmUuCisJICogTm90ZSB0aGF0IGl0IG1heSBiZSBuZWNlc3Nh
cnkgdG8gY2FsbCB0aGlzIGNhbGxiYWNrIG1hbnkKKwkgKiB0aW1lcyB0byByZWNlaXZlIGEgc2lu
Z2xlIHBhY2tldCwgZGVwZW5kaW5nIG9mIGhvdyBiaWcgaXMKKwkgKiBidWZmZXJzIHlvdSBwcm92
aWRlLgorCSAqLworCWludCAoKnJlY3YpKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBp
b3ZlYyAqaW92LCBpbnQgaW92Y250KTsKKworCS8qCisJICogQXNrIHRoZSBiYWNrZW5kIGZvciB0
aGUgdmlydGlvLW5ldCBmZWF0dXJlcyBpdCBpcyBhYmxlIHRvCisJICogc3VwcG9ydC4gUG9zc2li
bGUgZmVhdHVyZXMgYXJlIFRTTywgVUZPIGFuZCBjaGVja3N1bSBvZmZsb2FkaW5nCisJICogaW4g
Ym90aCByeCBhbmQgdHggZGlyZWN0aW9uIGFuZCBmb3IgYm90aCBJUHY0IGFuZCBJUHY2LgorCSAq
LworCXVpbnQ2NF90ICgqZ2V0X2NhcCkoc3RydWN0IG5ldF9iYWNrZW5kICpiZSk7CisKKwkvKgor
CSAqIFRlbGwgdGhlIGJhY2tlbmQgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIHNwZWNpZmllZCB2aXJ0
aW8tbmV0CisJICogZmVhdHVyZXMgKGNhcGFiaWxpdGllcykuCisJICovCisJaW50ICgqc2V0X2Nh
cCkoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgdWludDY0X3QgZmVhdHVyZXMsCisJCSAgICAgICB1
bnNpZ25lZCBpbnQgdm5ldF9oZHJfbGVuKTsKKworCXN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNj
OworCWludCBmZDsKKwl1bnNpZ25lZCBpbnQgYmVfdm5ldF9oZHJfbGVuOworCXVuc2lnbmVkIGlu
dCBmZV92bmV0X2hkcl9sZW47CisJdm9pZCAqcHJpdjsJLyogUG9pbnRlciB0byBiYWNrZW5kLXNw
ZWNpZmljIGRhdGEuICovCit9OworCitTRVRfREVDTEFSRShuZXRfYmFja2VuZF9zLCBzdHJ1Y3Qg
bmV0X2JhY2tlbmQpOworCisjZGVmaW5lIFZORVRfSERSX0xFTglzaXplb2Yoc3RydWN0IHZpcnRp
b19uZXRfcnhoZHIpCisKKyNkZWZpbmUgV1BSSU5URihwYXJhbXMpIHByaW50ZiBwYXJhbXMKKwor
LyogdGhlIG51bGwgYmFja2VuZCAqLworc3RhdGljIGludAorbmV0YmVfbnVsbF9pbml0KHN0cnVj
dCBuZXRfYmFja2VuZCAqYmUsIGNvbnN0IGNoYXIgKmRldm5hbWUsCisJCQluZXRfYmFja2VuZF9j
Yl90IGNiLCB2b2lkICpwYXJhbSkKK3sKKwkodm9pZClkZXZuYW1lOyAodm9pZCljYjsgKHZvaWQp
cGFyYW07CisJYmUtPmZkID0gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCituZXRi
ZV9udWxsX2NsZWFudXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSkKK3sKKwkodm9pZCliZTsKK30K
Kworc3RhdGljIHVpbnQ2NF90CituZXRiZV9udWxsX2dldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5k
ICpiZSkKK3sKKwkodm9pZCliZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbmV0YmVf
bnVsbF9zZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHVpbnQ2NF90IGZlYXR1cmVzLAor
CQkJdW5zaWduZWQgdm5ldF9oZHJfbGVuKQoreworCSh2b2lkKWJlOyAodm9pZClmZWF0dXJlczsg
KHZvaWQpdm5ldF9oZHJfbGVuOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZXRiZV9u
dWxsX3NlbmQoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgc3RydWN0IGlvdmVjICppb3YsCisJaW50
IGlvdmNudCwgdWludDMyX3QgbGVuLCBpbnQgbW9yZSkKK3sKKwkodm9pZCliZTsgKHZvaWQpaW92
OyAodm9pZClpb3ZjbnQ7ICh2b2lkKWxlbjsgKHZvaWQpbW9yZTsKKwlyZXR1cm4gMDsgLyogcHJl
dGVuZCB3ZSBzZW5kICovCit9CisKK3N0YXRpYyBpbnQKK25ldGJlX251bGxfcmVjdihzdHJ1Y3Qg
bmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCkKK3sKKwkodm9p
ZCliZTsgKHZvaWQpaW92OyAodm9pZClpb3ZjbnQ7CisJZnByaW50ZihzdGRlcnIsICJuZXRiZV9u
dWxsX3JlY3YgY2FsbGVkID9cbiIpOworCXJldHVybiAtMTsgLyogbmV2ZXIgY2FsbGVkLCBpIGJl
bGlldmUgKi8KK30KKworc3RhdGljIHN0cnVjdCBuZXRfYmFja2VuZCBuX2JlID0geworCS5uYW1l
ID0gIm51bGwiLAorCS5pbml0ID0gbmV0YmVfbnVsbF9pbml0LAorCS5jbGVhbnVwID0gbmV0YmVf
bnVsbF9jbGVhbnVwLAorCS5zZW5kID0gbmV0YmVfbnVsbF9zZW5kLAorCS5yZWN2ID0gbmV0YmVf
bnVsbF9yZWN2LAorCS5nZXRfY2FwID0gbmV0YmVfbnVsbF9nZXRfY2FwLAorCS5zZXRfY2FwID0g
bmV0YmVfbnVsbF9zZXRfY2FwLAorfTsKKworREFUQV9TRVQobmV0X2JhY2tlbmRfcywgbl9iZSk7
CisKKworLyogdGhlIHRhcCBiYWNrZW5kICovCisKK3N0cnVjdCB0YXBfcHJpdiB7CisJc3RydWN0
IG1ldmVudCAqbWV2cDsKK307CisKK3N0YXRpYyB2b2lkCit0YXBfY2xlYW51cChzdHJ1Y3QgbmV0
X2JhY2tlbmQgKmJlKQoreworCXN0cnVjdCB0YXBfcHJpdiAqcHJpdiA9IGJlLT5wcml2OworCisJ
aWYgKGJlLT5wcml2KSB7CisJCW1ldmVudF9kZWxldGUocHJpdi0+bWV2cCk7CisJCWZyZWUoYmUt
PnByaXYpOworCQliZS0+cHJpdiA9IE5VTEw7CisJfQorCWlmIChiZS0+ZmQgIT0gLTEpIHsKKwkJ
Y2xvc2UoYmUtPmZkKTsKKwkJYmUtPmZkID0gLTE7CisJfQorfQorCitzdGF0aWMgaW50Cit0YXBf
aW5pdChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBjb25zdCBjaGFyICpkZXZuYW1lLAorCSBuZXRf
YmFja2VuZF9jYl90IGNiLCB2b2lkICpwYXJhbSkKK3sKKwljaGFyIHRidWZbODBdOworCWludCBm
ZDsKKwlpbnQgb3B0ID0gMTsKKwlzdHJ1Y3QgdGFwX3ByaXYgKnByaXY7CisKKwlpZiAoY2IgPT0g
TlVMTCkgeworCQlXUFJJTlRGKCgiVEFQIGJhY2tlbmQgcmVxdWlyZXMgbm9uLU5VTEwgY2FsbGJh
Y2tcbiIpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXByaXYgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0
cnVjdCB0YXBfcHJpdikpOworCWlmIChwcml2ID09IE5VTEwpIHsKKwkJV1BSSU5URigoInRhcF9w
cml2IGFsbG9jIGZhaWxlZFxuIikpOworCQlyZXR1cm4gLTE7CisJfQorCisJc3RyY3B5KHRidWYs
ICIvZGV2LyIpOworCXN0cmxjYXQodGJ1ZiwgZGV2bmFtZSwgc2l6ZW9mKHRidWYpKTsKKworCWZk
ID0gb3Blbih0YnVmLCBPX1JEV1IpOworCWlmIChmZCA9PSAtMSkgeworCQlXUFJJTlRGKCgib3Bl
biBvZiB0YXAgZGV2aWNlICVzIGZhaWxlZFxuIiwgdGJ1ZikpOworCQlnb3RvIGVycm9yOworCX0K
KworCS8qCisJICogU2V0IG5vbi1ibG9ja2luZyBhbmQgcmVnaXN0ZXIgZm9yIHJlYWQKKwkgKiBu
b3RpZmljYXRpb25zIHdpdGggdGhlIGV2ZW50IGxvb3AKKwkgKi8KKwlpZiAoaW9jdGwoZmQsIEZJ
T05CSU8sICZvcHQpIDwgMCkgeworCQlXUFJJTlRGKCgidGFwIGRldmljZSBPX05PTkJMT0NLIGZh
aWxlZFxuIikpOworCQlnb3RvIGVycm9yOworCX0KKworCXByaXYtPm1ldnAgPSBtZXZlbnRfYWRk
KGZkLCBFVkZfUkVBRCwgY2IsIHBhcmFtKTsKKwlpZiAocHJpdi0+bWV2cCA9PSBOVUxMKSB7CisJ
CVdQUklOVEYoKCJDb3VsZCBub3QgcmVnaXN0ZXIgZXZlbnRcbiIpKTsKKwkJZ290byBlcnJvcjsK
Kwl9CisKKwliZS0+ZmQgPSBmZDsKKwliZS0+cHJpdiA9IHByaXY7CisKKwlyZXR1cm4gMDsKKwor
ZXJyb3I6CisJdGFwX2NsZWFudXAoYmUpOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIENhbGxl
ZCB0byBzZW5kIGEgYnVmZmVyIGNoYWluIG91dCB0byB0aGUgdGFwIGRldmljZQorICovCitzdGF0
aWMgaW50Cit0YXBfc2VuZChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlv
diwgaW50IGlvdmNudCwgdWludDMyX3QgbGVuLAorCWludCBtb3JlKQoreworCXN0YXRpYyBjaGFy
IHBhZFs2MF07IC8qIGFsbCB6ZXJvIGJ5dGVzICovCisKKwkodm9pZCltb3JlOworCS8qCisJICog
SWYgdGhlIGxlbmd0aCBpcyA8IDYwLCBwYWQgb3V0IHRvIHRoYXQgYW5kIGFkZCB0aGUKKwkgKiBl
eHRyYSB6ZXJvJ2Qgc2VnbWVudCB0byB0aGUgaW92LiBJdCBpcyBndWFyYW50ZWVkIHRoYXQKKwkg
KiB0aGVyZSBpcyBhbHdheXMgYW4gZXh0cmEgaW92IGF2YWlsYWJsZSBieSB0aGUgY2FsbGVyLgor
CSAqLworCWlmIChsZW4gPCA2MCkgeworCQlpb3ZbaW92Y250XS5pb3ZfYmFzZSA9IHBhZDsKKwkJ
aW92W2lvdmNudF0uaW92X2xlbiA9IChzaXplX3QpKDYwIC0gbGVuKTsKKwkJaW92Y250Kys7CisJ
fQorCisJcmV0dXJuIChpbnQpd3JpdGV2KGJlLT5mZCwgaW92LCBpb3ZjbnQpOworfQorCitzdGF0
aWMgaW50Cit0YXBfcmVjdihzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlv
diwgaW50IGlvdmNudCkKK3sKKwlpbnQgcmV0OworCisJLyogU2hvdWxkIG5ldmVyIGJlIGNhbGxl
ZCB3aXRob3V0IGEgdmFsaWQgdGFwIGZkICovCisJYXNzZXJ0KGJlLT5mZCAhPSAtMSk7CisKKwly
ZXQgPSAoaW50KXJlYWR2KGJlLT5mZCwgaW92LCBpb3ZjbnQpOworCisJaWYgKHJldCA8IDAgJiYg
ZXJybm8gPT0gRVdPVUxEQkxPQ0spIHsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHJldDsK
K30KKworc3RhdGljIHVpbnQ2NF90Cit0YXBfZ2V0X2NhcChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJl
KQoreworCSh2b2lkKWJlOworCXJldHVybiAwOyAvLyBub3RoaW5nIGV4dHJhCit9CisKK3N0YXRp
YyBpbnQKK3RhcF9zZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHVpbnQ2NF90IGZlYXR1
cmVzLAorCQkgdW5zaWduZWQgdm5ldF9oZHJfbGVuKQoreworCSh2b2lkKWJlOworCXJldHVybiAo
ZmVhdHVyZXMgfHwgdm5ldF9oZHJfbGVuKSA/IC0xIDogMDsKK30KKworc3RhdGljIHN0cnVjdCBu
ZXRfYmFja2VuZCB0YXBfYmFja2VuZCA9IHsKKwkubmFtZSA9ICJ0YXB8dm1tbmV0IiwKKwkuaW5p
dCA9IHRhcF9pbml0LAorCS5jbGVhbnVwID0gdGFwX2NsZWFudXAsCisJLnNlbmQgPSB0YXBfc2Vu
ZCwKKwkucmVjdiA9IHRhcF9yZWN2LAorCS5nZXRfY2FwID0gdGFwX2dldF9jYXAsCisJLnNldF9j
YXAgPSB0YXBfc2V0X2NhcCwKK307CisKK0RBVEFfU0VUKG5ldF9iYWNrZW5kX3MsIHRhcF9iYWNr
ZW5kKTsKKworI2lmZGVmIFdJVEhfTkVUTUFQCisKKy8qCisgKiBUaGUgbmV0bWFwIGJhY2tlbmQK
KyAqLworCisvKiBUaGUgdmlydGlvLW5ldCBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgbmV0bWFwLiAq
LworI2RlZmluZSBORVRNQVBfRkVBVFVSRVMgKFZJUlRJT19ORVRfRl9DU1VNIHwgVklSVElPX05F
VF9GX0hPU1RfVFNPNCB8IFwKKwkJVklSVElPX05FVF9GX0hPU1RfVFNPNiB8IFZJUlRJT19ORVRf
Rl9IT1NUX1VGTyB8IFwKKwkJVklSVElPX05FVF9GX0dVRVNUX0NTVU0gfCBWSVJUSU9fTkVUX0Zf
R1VFU1RfVFNPNCB8IFwKKwkJVklSVElPX05FVF9GX0dVRVNUX1RTTzYgfCBWSVJUSU9fTkVUX0Zf
R1VFU1RfVUZPKQorCisjZGVmaW5lIE5FVE1BUF9QT0xMTUFTSyAoUE9MTElOIHwgUE9MTFJETk9S
TSB8IFBPTExSREJBTkQpCisKK3N0cnVjdCBuZXRtYXBfcHJpdiB7CisJY2hhciBpZm5hbWVbSUZO
QU1TSVpdOworCXN0cnVjdCBubV9kZXNjICpubWQ7CisJdWludDE2X3QgbWVtaWQ7CisJc3RydWN0
IG5ldG1hcF9yaW5nICpyeDsKKwlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnR4OworCXB0aHJlYWRfdCBl
dmxvb3BfdGlkOworCW5ldF9iYWNrZW5kX2NiX3QgY2I7CisJdm9pZCAqY2JfcGFyYW07CisKKwlz
dHJ1Y3QgcHRuZXRtYXBfc3RhdGUgcHRuZXRtYXA7Cit9OworCitzdGF0aWMgdm9pZCAqCituZXRt
YXBfZXZsb29wX3RocmVhZCh2b2lkICpwYXJhbSkKK3sKKwlzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJl
ID0gcGFyYW07CisJc3RydWN0IG5ldG1hcF9wcml2ICpwcml2ID0gYmUtPnByaXY7CisJc3RydWN0
IHBvbGxmZCBwZmQ7CisJaW50IHJldDsKKworCWZvciAoOzspIHsKKwkJcGZkLmZkID0gYmUtPmZk
OworCQlwZmQuZXZlbnRzID0gTkVUTUFQX1BPTExNQVNLOworCQlyZXQgPSBwb2xsKCZwZmQsIDEs
IElORlRJTSk7CisJCWlmIChyZXQgPT0gLTEgJiYgZXJybm8gIT0gRUlOVFIpIHsKKwkJCVdQUklO
VEYoKCJuZXRtYXAgcG9sbCBmYWlsZWQsICVkXG4iLCBlcnJubykpOworCQl9IGVsc2UgaWYgKHJl
dCA9PSAxICYmIChwZmQucmV2ZW50cyAmIE5FVE1BUF9QT0xMTUFTSykpIHsKKwkJCXByaXYtPmNi
KHBmZC5mZCwgRVZGX1JFQUQsIHByaXYtPmNiX3BhcmFtKTsKKwkJfQorCX0KKworCXJldHVybiBO
VUxMOworfQorCitzdGF0aWMgdm9pZAorbm1yZXFfaW5pdChzdHJ1Y3Qgbm1yZXEgKnJlcSwgY2hh
ciAqaWZuYW1lKQoreworCW1lbXNldChyZXEsIDAsIHNpemVvZigqcmVxKSk7CisJc3RybmNweShy
ZXEtPm5yX25hbWUsIGlmbmFtZSwgc2l6ZW9mKHJlcS0+bnJfbmFtZSkpOworCXJlcS0+bnJfdmVy
c2lvbiA9IE5FVE1BUF9BUEk7Cit9CisKK3N0YXRpYyBpbnQKK25ldG1hcF9zZXRfdm5ldF9oZHJf
bGVuKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIGludCB2bmV0X2hkcl9sZW4pCit7CisJaW50IGVy
cjsKKwlzdHJ1Y3Qgbm1yZXEgcmVxOworCXN0cnVjdCBuZXRtYXBfcHJpdiAqcHJpdiA9IGJlLT5w
cml2OworCisJbm1yZXFfaW5pdCgmcmVxLCBwcml2LT5pZm5hbWUpOworCXJlcS5ucl9jbWQgPSBO
RVRNQVBfQkRHX1ZORVRfSERSOworCXJlcS5ucl9hcmcxID0gdm5ldF9oZHJfbGVuOworCWVyciA9
IGlvY3RsKGJlLT5mZCwgTklPQ1JFR0lGLCAmcmVxKTsKKwlpZiAoZXJyKSB7CisJCVdQUklOVEYo
KCJVbmFibGUgdG8gc2V0IHZuZXQgaGVhZGVyIGxlbmd0aCAlZFxuIiwKKwkJCQl2bmV0X2hkcl9s
ZW4pKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwliZS0+YmVfdm5ldF9oZHJfbGVuID0gdm5ldF9o
ZHJfbGVuOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25ldG1hcF9oYXNfdm5ldF9o
ZHJfbGVuKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHVuc2lnbmVkIHZuZXRfaGRyX2xlbikKK3sK
KwlpbnQgcHJldl9oZHJfbGVuID0gYmUtPmJlX3ZuZXRfaGRyX2xlbjsKKwlpbnQgcmV0OworCisJ
aWYgKHZuZXRfaGRyX2xlbiA9PSBwcmV2X2hkcl9sZW4pIHsKKwkJcmV0dXJuIDE7CisJfQorCisJ
cmV0ID0gbmV0bWFwX3NldF92bmV0X2hkcl9sZW4oYmUsIHZuZXRfaGRyX2xlbik7CisJaWYgKHJl
dCkgeworCQlyZXR1cm4gMDsKKwl9CisKKwluZXRtYXBfc2V0X3ZuZXRfaGRyX2xlbihiZSwgcHJl
dl9oZHJfbGVuKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdWludDY0X3QKK25ldG1hcF9n
ZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJcmV0dXJuIG5ldG1hcF9oYXNfdm5l
dF9oZHJfbGVuKGJlLCBWTkVUX0hEUl9MRU4pID8KKwkJCU5FVE1BUF9GRUFUVVJFUyA6IDA7Cit9
CisKK3N0YXRpYyBpbnQKK25ldG1hcF9zZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHVp
bnQ2NF90IGZlYXR1cmVzLAorCSAgICAgICB1bnNpZ25lZCB2bmV0X2hkcl9sZW4pCit7CisJcmV0
dXJuIG5ldG1hcF9zZXRfdm5ldF9oZHJfbGVuKGJlLCB2bmV0X2hkcl9sZW4pOworfQorCisvKiBT
dG9yZSBhbmQgcmV0dXJuIHRoZSBmZWF0dXJlcyB3ZSBhZ3JlZWQgdXBvbi4gKi8KK3VpbnQzMl90
CitwdG5ldG1hcF9hY2tfZmVhdHVyZXMoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG4sIHVpbnQz
Ml90IHdhbnRlZF9mZWF0dXJlcykKK3sKKwlwdG4tPmFja2VkX2ZlYXR1cmVzID0gcHRuLT5mZWF0
dXJlcyAmIHdhbnRlZF9mZWF0dXJlczsKKworCXJldHVybiBwdG4tPmFja2VkX2ZlYXR1cmVzOwor
fQorCitzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKgorZ2V0X3B0bmV0bWFwKHN0cnVjdCBuZXRfYmFj
a2VuZCAqYmUpCit7CisJc3RydWN0IG5ldG1hcF9wcml2ICpwcml2ID0gYmUgPyBiZS0+cHJpdiA6
IE5VTEw7CisJc3RydWN0IG5ldG1hcF9wb29sc19pbmZvIHBpOworCXN0cnVjdCBubXJlcSByZXE7
CisJaW50IGVycjsKKworCS8qIENoZWNrIHRoYXQgdGhpcyBpcyBhIHB0bmV0bWFwIGJhY2tlbmQu
ICovCisJaWYgKCFiZSB8fCBiZS0+c2V0X2NhcCAhPSBuZXRtYXBfc2V0X2NhcCB8fAorCQkJIShw
cml2LT5ubWQtPnJlcS5ucl9mbGFncyAmIE5SX1BUTkVUTUFQX0hPU1QpKSB7CisJCXJldHVybiBO
VUxMOworCX0KKworCW5tcmVxX2luaXQoJnJlcSwgcHJpdi0+aWZuYW1lKTsKKwlyZXEubnJfY21k
ID0gTkVUTUFQX1BPT0xTX0lORk9fR0VUOworCW5tcmVxX3BvaW50ZXJfcHV0KCZyZXEsICZwaSk7
CisJZXJyID0gaW9jdGwocHJpdi0+bm1kLT5mZCwgTklPQ1JFR0lGLCAmcmVxKTsKKwlpZiAoZXJy
KSB7CisJCXJldHVybiBOVUxMOworCX0KKworCWVyciA9IHB0bl9tZW1kZXZfYXR0YWNoKHByaXYt
Pm5tZC0+bWVtLCAmcGkpOworCWlmIChlcnIpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0
dXJuICZwcml2LT5wdG5ldG1hcDsKK30KKworaW50CitwdG5ldG1hcF9nZXRfbmV0bWFwX2lmKHN0
cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuLCBzdHJ1Y3QgbmV0bWFwX2lmX2luZm8gKm5pZikKK3sK
KwlzdHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYgPSBwdG4tPm5ldG1hcF9wcml2OworCisJbWVtc2V0
KG5pZiwgMCwgc2l6ZW9mKCpuaWYpKTsKKwlpZiAocHJpdi0+bm1kID09IE5VTEwpIHsKKwkJcmV0
dXJuIEVJTlZBTDsKKwl9CisKKwluaWYtPm5pZnBfb2Zmc2V0ID0gcHJpdi0+bm1kLT5yZXEubnJf
b2Zmc2V0OworCW5pZi0+bnVtX3R4X3JpbmdzID0gcHJpdi0+bm1kLT5yZXEubnJfdHhfcmluZ3M7
CisJbmlmLT5udW1fcnhfcmluZ3MgPSBwcml2LT5ubWQtPnJlcS5ucl9yeF9yaW5nczsKKwluaWYt
Pm51bV90eF9zbG90cyA9IHByaXYtPm5tZC0+cmVxLm5yX3R4X3Nsb3RzOworCW5pZi0+bnVtX3J4
X3Nsb3RzID0gcHJpdi0+bm1kLT5yZXEubnJfcnhfc2xvdHM7CisKKwlyZXR1cm4gMDsKK30KKwor
aW50CitwdG5ldG1hcF9nZXRfaG9zdG1lbWlkKHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuKQor
eworCXN0cnVjdCBuZXRtYXBfcHJpdiAqcHJpdiA9IHB0bi0+bmV0bWFwX3ByaXY7CisKKwlpZiAo
cHJpdi0+bm1kID09IE5VTEwpIHsKKwkJcmV0dXJuIEVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcHJp
di0+bWVtaWQ7Cit9CisKK2ludAorcHRuZXRtYXBfY3JlYXRlKHN0cnVjdCBwdG5ldG1hcF9zdGF0
ZSAqcHRuLCBzdHJ1Y3QgcHRuZXRtYXBfY2ZnICpjZmcpCit7CisJc3RydWN0IG5ldG1hcF9wcml2
ICpwcml2ID0gcHRuLT5uZXRtYXBfcHJpdjsKKwlzdHJ1Y3Qgbm1yZXEgcmVxOworCWludCBlcnI7
CisKKwlpZiAocHRuLT5ydW5uaW5nKSB7CisJCXJldHVybiAwOworCX0KKworCS8qIFhYWCBXZSBz
aG91bGQgc3RvcCB0aGUgbmV0bWFwIGV2bG9vcCBoZXJlLiAqLworCisJLyogQXNrIG5ldG1hcCB0
byBjcmVhdGUga3RocmVhZHMgZm9yIHRoaXMgaW50ZXJmYWNlLiAqLworCW5tcmVxX2luaXQoJnJl
cSwgcHJpdi0+aWZuYW1lKTsKKwlubXJlcV9wb2ludGVyX3B1dCgmcmVxLCBjZmcpOworCXJlcS5u
cl9jbWQgPSBORVRNQVBfUFRfSE9TVF9DUkVBVEU7CisJZXJyID0gaW9jdGwocHJpdi0+bm1kLT5m
ZCwgTklPQ1JFR0lGLCAmcmVxKTsKKwlpZiAoZXJyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6
IFVuYWJsZSB0byBjcmVhdGUgcHRuZXRtYXAga3RocmVhZHMgb24gIgorCQkJIiVzIFtlcnJubz0l
ZF0iLCBfX2Z1bmNfXywgcHJpdi0+aWZuYW1lLCBlcnJubyk7CisJCXJldHVybiBlcnI7CisJfQor
CisJcHRuLT5ydW5uaW5nID0gMTsKKworCXJldHVybiAwOworfQorCitpbnQKK3B0bmV0bWFwX2Rl
bGV0ZShzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0bikKK3sKKwlzdHJ1Y3QgbmV0bWFwX3ByaXYg
KnByaXYgPSBwdG4tPm5ldG1hcF9wcml2OworCXN0cnVjdCBubXJlcSByZXE7CisJaW50IGVycjsK
KworCWlmICghcHRuLT5ydW5uaW5nKSB7CisJCXJldHVybiAwOworCX0KKworCS8qIEFzayBuZXRt
YXAgdG8gZGVsZXRlIGt0aHJlYWRzIGZvciB0aGlzIGludGVyZmFjZS4gKi8KKwlubXJlcV9pbml0
KCZyZXEsIHByaXYtPmlmbmFtZSk7CisJcmVxLm5yX2NtZCA9IE5FVE1BUF9QVF9IT1NUX0RFTEVU
RTsKKwllcnIgPSBpb2N0bChwcml2LT5ubWQtPmZkLCBOSU9DUkVHSUYsICZyZXEpOworCWlmIChl
cnIpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogVW5hYmxlIHRvIGNyZWF0ZSBwdG5ldG1hcCBr
dGhyZWFkcyBvbiAiCisJCQkiJXMgW2Vycm5vPSVkXSIsIF9fZnVuY19fLCBwcml2LT5pZm5hbWUs
IGVycm5vKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlwdG4tPnJ1bm5pbmcgPSAwOworCisJcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25ldG1hcF9pbml0KHN0cnVjdCBuZXRfYmFja2VuZCAq
YmUsIGNvbnN0IGNoYXIgKmRldm5hbWUsCisJICAgIG5ldF9iYWNrZW5kX2NiX3QgY2IsIHZvaWQg
KnBhcmFtKQoreworCWNvbnN0IGNoYXIgKm5kbmFtZSA9ICIvZGV2L25ldG1hcCI7CisJc3RydWN0
IG5ldG1hcF9wcml2ICpwcml2ID0gTlVMTDsKKwlzdHJ1Y3Qgbm1yZXEgcmVxOworCWludCBwdG5l
dG1hcCA9IChjYiA9PSBOVUxMKTsKKworCXByaXYgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBu
ZXRtYXBfcHJpdikpOworCWlmIChwcml2ID09IE5VTEwpIHsKKwkJV1BSSU5URigoIlVuYWJsZSBh
bGxvYyBuZXRtYXAgcHJpdmF0ZSBkYXRhXG4iKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlzdHJu
Y3B5KHByaXYtPmlmbmFtZSwgZGV2bmFtZSwgc2l6ZW9mKHByaXYtPmlmbmFtZSkpOworCXByaXYt
PmlmbmFtZVtzaXplb2YocHJpdi0+aWZuYW1lKSAtIDFdID0gJ1wwJzsKKworCW1lbXNldCgmcmVx
LCAwLCBzaXplb2YocmVxKSk7CisJcmVxLm5yX2ZsYWdzID0gcHRuZXRtYXAgPyBOUl9QVE5FVE1B
UF9IT1NUIDogMDsKKworCXByaXYtPm5tZCA9IG5tX29wZW4ocHJpdi0+aWZuYW1lLCAmcmVxLCBO
RVRNQVBfTk9fVFhfUE9MTCwgTlVMTCk7CisJaWYgKHByaXYtPm5tZCA9PSBOVUxMKSB7CisJCVdQ
UklOVEYoKCJVbmFibGUgdG8gbm1fb3BlbigpOiBkZXZpY2UgJyVzJywgIgorCQkJCSJpbnRlcmZh
Y2UgJyVzJywgZXJybm8gKCVzKVxuIiwKKwkJCQluZG5hbWUsIGRldm5hbWUsIHN0cmVycm9yKGVy
cm5vKSkpOworCQlmcmVlKHByaXYpOworCQlyZXR1cm4gLTE7CisJfQorCisJcHJpdi0+bWVtaWQg
PSBwcml2LT5ubWQtPnJlcS5ucl9hcmcyOworCXByaXYtPnR4ID0gTkVUTUFQX1RYUklORyhwcml2
LT5ubWQtPm5pZnAsIDApOworCXByaXYtPnJ4ID0gTkVUTUFQX1JYUklORyhwcml2LT5ubWQtPm5p
ZnAsIDApOworCXByaXYtPmNiID0gY2I7CisJcHJpdi0+Y2JfcGFyYW0gPSBwYXJhbTsKKwliZS0+
ZmQgPSBwcml2LT5ubWQtPmZkOworCWJlLT5wcml2ID0gcHJpdjsKKworCXByaXYtPnB0bmV0bWFw
Lm5ldG1hcF9wcml2ID0gcHJpdjsKKwlwcml2LT5wdG5ldG1hcC5mZWF0dXJlcyA9IDA7CisJcHJp
di0+cHRuZXRtYXAuYWNrZWRfZmVhdHVyZXMgPSAwOworCXByaXYtPnB0bmV0bWFwLnJ1bm5pbmcg
PSAwOworCWlmIChwdG5ldG1hcCkgeworCQlpZiAobmV0bWFwX2hhc192bmV0X2hkcl9sZW4oYmUs
IFZORVRfSERSX0xFTikpIHsKKwkJCXByaXYtPnB0bmV0bWFwLmZlYXR1cmVzIHw9IFBUTkVUTUFQ
X0ZfVk5FVF9IRFI7CisJCX0KKwl9IGVsc2UgeworCQljaGFyIHRuYW1lWzQwXTsKKworCQkvKiBD
cmVhdGUgYSB0aHJlYWQgZm9yIG5ldG1hcCBwb2xsLiAqLworCQlwdGhyZWFkX2NyZWF0ZSgmcHJp
di0+ZXZsb29wX3RpZCwgTlVMTCwgbmV0bWFwX2V2bG9vcF90aHJlYWQsICh2b2lkICopYmUpOwor
CQlzbnByaW50Zih0bmFtZSwgc2l6ZW9mKHRuYW1lKSwgIm5ldG1hcC1ldmxvb3AtJXAiLCBwcml2
KTsKKwkJcHRocmVhZF9zZXRfbmFtZV9ucChwcml2LT5ldmxvb3BfdGlkLCB0bmFtZSk7CisJfQor
CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCituZXRtYXBfY2xlYW51cChzdHJ1Y3QgbmV0
X2JhY2tlbmQgKmJlKQoreworCXN0cnVjdCBuZXRtYXBfcHJpdiAqcHJpdiA9IGJlLT5wcml2Owor
CisJaWYgKGJlLT5wcml2KSB7CisJCWlmIChwcml2LT5wdG5ldG1hcC5ydW5uaW5nKSB7CisJCQlw
dG5ldG1hcF9kZWxldGUoJnByaXYtPnB0bmV0bWFwKTsKKwkJfQorCQlubV9jbG9zZShwcml2LT5u
bWQpOworCQlmcmVlKGJlLT5wcml2KTsKKwkJYmUtPnByaXYgPSBOVUxMOworCX0KKwliZS0+ZmQg
PSAtMTsKK30KKworLyogQSBmYXN0IGNvcHkgcm91dGluZSBvbmx5IGZvciBtdWx0aXBsZXMgb2Yg
NjQgYnl0ZXMsIG5vbiBvdmVybGFwcGVkLiAqLworc3RhdGljIGlubGluZSB2b2lkCitwa3RfY29w
eShjb25zdCB2b2lkICpfc3JjLCB2b2lkICpfZHN0LCBpbnQgbCkKK3sKKyAgICBjb25zdCB1aW50
NjRfdCAqc3JjID0gX3NyYzsKKyAgICB1aW50NjRfdCAqZHN0ID0gX2RzdDsKKyAgICBpZiAobCA+
PSAxMDI0KSB7CisgICAgICAgIGJjb3B5KHNyYywgZHN0LCBsKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBmb3IgKDsgbCA+IDA7IGwgLT0gNjQpIHsKKyAgICAgICAgKmRzdCsrID0gKnNy
YysrOworICAgICAgICAqZHN0KysgPSAqc3JjKys7CisgICAgICAgICpkc3QrKyA9ICpzcmMrKzsK
KyAgICAgICAgKmRzdCsrID0gKnNyYysrOworICAgICAgICAqZHN0KysgPSAqc3JjKys7CisgICAg
ICAgICpkc3QrKyA9ICpzcmMrKzsKKyAgICAgICAgKmRzdCsrID0gKnNyYysrOworICAgICAgICAq
ZHN0KysgPSAqc3JjKys7CisgICAgfQorfQorCitzdGF0aWMgaW50CituZXRtYXBfc2VuZChzdHJ1
Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkgICAgaW50IGlvdmNudCwg
dWludDMyX3Qgc2l6ZSwgaW50IG1vcmUpCit7CisJc3RydWN0IG5ldG1hcF9wcml2ICpwcml2ID0g
YmUtPnByaXY7CisJc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nOworCWludCBubV9idWZfc2l6ZTsK
KwlpbnQgbm1fYnVmX2xlbjsKKwl1aW50MzJfdCBoZWFkOworCXZvaWQgKm5tX2J1ZjsKKwlpbnQg
ajsKKworCWlmIChpb3ZjbnQgPD0gMCB8fCBzaXplIDw9IDApIHsKKwkJRCgiV3JvbmcgaW92OiBp
b3ZjbnQgJWQgc2l6ZSAlZCIsIGlvdmNudCwgc2l6ZSk7CisJCXJldHVybiAwOworCX0KKworCXJp
bmcgPSBwcml2LT50eDsKKwloZWFkID0gcmluZy0+aGVhZDsKKwlpZiAoaGVhZCA9PSByaW5nLT50
YWlsKSB7CisJCVJEKDEsICJObyBzcGFjZSwgZHJvcCAlZCBieXRlcyIsIHNpemUpOworCQlnb3Rv
IHR4c3luYzsKKwl9CisJbm1fYnVmID0gTkVUTUFQX0JVRihyaW5nLCByaW5nLT5zbG90W2hlYWRd
LmJ1Zl9pZHgpOworCW5tX2J1Zl9zaXplID0gcmluZy0+bnJfYnVmX3NpemU7CisJbm1fYnVmX2xl
biA9IDA7CisKKwlmb3IgKGogPSAwOyBqIDwgaW92Y250OyBqKyspIHsKKwkJaW50IGlvdl9mcmFn
X3NpemUgPSBpb3Zbal0uaW92X2xlbjsKKwkJdm9pZCAqaW92X2ZyYWdfYnVmID0gaW92W2pdLmlv
dl9iYXNlOworCisJCS8qIFNwbGl0IGVhY2ggaW92ZWMgZnJhZ21lbnQgb3ZlciBtb3JlIG5ldG1h
cCBzbG90cywgaWYKKwkJICAgbmVjZXNzYXJ5LiAqLworCQlmb3IgKDs7KSB7CisJCQlpbnQgY29w
eWxlbjsKKworCQkJY29weWxlbiA9IGlvdl9mcmFnX3NpemUgPCBubV9idWZfc2l6ZSA/IGlvdl9m
cmFnX3NpemUgOiBubV9idWZfc2l6ZTsKKwkJCXBrdF9jb3B5KGlvdl9mcmFnX2J1Ziwgbm1fYnVm
LCBjb3B5bGVuKTsKKworCQkJaW92X2ZyYWdfYnVmICs9IGNvcHlsZW47CisJCQlpb3ZfZnJhZ19z
aXplIC09IGNvcHlsZW47CisJCQlubV9idWYgKz0gY29weWxlbjsKKwkJCW5tX2J1Zl9zaXplIC09
IGNvcHlsZW47CisJCQlubV9idWZfbGVuICs9IGNvcHlsZW47CisKKwkJCWlmIChpb3ZfZnJhZ19z
aXplID09IDApIHsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJcmluZy0+c2xvdFtoZWFkXS5sZW4g
PSBubV9idWZfbGVuOworCQkJcmluZy0+c2xvdFtoZWFkXS5mbGFncyA9IE5TX01PUkVGUkFHOwor
CQkJaGVhZCA9IG5tX3JpbmdfbmV4dChyaW5nLCBoZWFkKTsKKwkJCWlmIChoZWFkID09IHJpbmct
PnRhaWwpIHsKKwkJCQkvKiBXZSByYW4gb3V0IG9mIG5ldG1hcCBzbG90cyB3aGlsZQorCQkJCSAq
IHNwbGl0dGluZyB0aGUgaW92ZWMgZnJhZ21lbnRzLiAqLworCQkJCVJEKDEsICJObyBzcGFjZSwg
ZHJvcCAlZCBieXRlcyIsIHNpemUpOworCQkJCWdvdG8gdHhzeW5jOworCQkJfQorCQkJbm1fYnVm
ID0gTkVUTUFQX0JVRihyaW5nLCByaW5nLT5zbG90W2hlYWRdLmJ1Zl9pZHgpOworCQkJbm1fYnVm
X3NpemUgPSByaW5nLT5ucl9idWZfc2l6ZTsKKwkJCW5tX2J1Zl9sZW4gPSAwOworCQl9CisJfQor
CisJLyogQ29tcGxldGUgdGhlIGxhc3Qgc2xvdCwgd2hpY2ggbXVzdCBub3QgaGF2ZSBOU19NT1JF
RlJBRyBzZXQuICovCisJcmluZy0+c2xvdFtoZWFkXS5sZW4gPSBubV9idWZfbGVuOworCXJpbmct
PnNsb3RbaGVhZF0uZmxhZ3MgPSAwOworCWhlYWQgPSBubV9yaW5nX25leHQocmluZywgaGVhZCk7
CisKKwkvKiBOb3cgdXBkYXRlIHJpbmctPmhlYWQgYW5kIHJpbmctPmN1ci4gKi8KKwlyaW5nLT5o
ZWFkID0gcmluZy0+Y3VyID0gaGVhZDsKKworCWlmIChtb3JlKSB7Ly8gJiYgbm1fcmluZ19zcGFj
ZShyaW5nKSA+IDY0CisJCXJldHVybiAwOworCX0KK3R4c3luYzoKKwlpb2N0bChiZS0+ZmQsIE5J
T0NUWFNZTkMsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25ldG1hcF9y
ZWN2KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250
KQoreworCXN0cnVjdCBuZXRtYXBfcHJpdiAqcHJpdiA9IGJlLT5wcml2OworCXN0cnVjdCBuZXRt
YXBfc2xvdCAqc2xvdCA9IE5VTEw7CisJc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nOworCXZvaWQg
Kmlvdl9mcmFnX2J1ZjsKKwlpbnQgaW92X2ZyYWdfc2l6ZTsKKwlpbnQgdG90bGVuID0gMDsKKwl1
aW50MzJfdCBoZWFkOworCisJYXNzZXJ0KGlvdmNudCk7CisKKwlyaW5nID0gcHJpdi0+cng7CisJ
aGVhZCA9IHJpbmctPmhlYWQ7CisJaW92X2ZyYWdfYnVmID0gaW92LT5pb3ZfYmFzZTsKKwlpb3Zf
ZnJhZ19zaXplID0gaW92LT5pb3ZfbGVuOworCisJZG8geworCQlpbnQgbm1fYnVmX2xlbjsKKwkJ
dm9pZCAqbm1fYnVmOworCisJCWlmIChoZWFkID09IHJpbmctPnRhaWwpIHsKKwkJCXJldHVybiAw
OworCQl9CisKKwkJc2xvdCA9IHJpbmctPnNsb3QgKyBoZWFkOworCQlubV9idWYgPSBORVRNQVBf
QlVGKHJpbmcsIHNsb3QtPmJ1Zl9pZHgpOworCQlubV9idWZfbGVuID0gc2xvdC0+bGVuOworCisJ
CWZvciAoOzspIHsKKwkJCWludCBjb3B5bGVuID0gbm1fYnVmX2xlbiA8IGlvdl9mcmFnX3NpemUg
PyBubV9idWZfbGVuIDogaW92X2ZyYWdfc2l6ZTsKKworCQkJcGt0X2NvcHkobm1fYnVmLCBpb3Zf
ZnJhZ19idWYsIGNvcHlsZW4pOworCQkJbm1fYnVmICs9IGNvcHlsZW47CisJCQlubV9idWZfbGVu
IC09IGNvcHlsZW47CisJCQlpb3ZfZnJhZ19idWYgKz0gY29weWxlbjsKKwkJCWlvdl9mcmFnX3Np
emUgLT0gY29weWxlbjsKKwkJCXRvdGxlbiArPSBjb3B5bGVuOworCisJCQlpZiAobm1fYnVmX2xl
biA9PSAwKSB7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlvdisrOworCQkJaW92Y250LS07CisJ
CQlpZiAoaW92Y250ID09IDApIHsKKwkJCQkvKiBObyBzcGFjZSB0byByZWNlaXZlLiAqLworCQkJ
CUQoIlNob3J0IGlvdiwgZHJvcCAlZCBieXRlcyIsIHRvdGxlbik7CisJCQkJcmV0dXJuIC1FTk9T
UEM7CisJCQl9CisJCQlpb3ZfZnJhZ19idWYgPSBpb3YtPmlvdl9iYXNlOworCQkJaW92X2ZyYWdf
c2l6ZSA9IGlvdi0+aW92X2xlbjsKKwkJfQorCisJCWhlYWQgPSBubV9yaW5nX25leHQocmluZywg
aGVhZCk7CisKKwl9IHdoaWxlIChzbG90LT5mbGFncyAmIE5TX01PUkVGUkFHKTsKKworCS8qIFJl
bGVhc2Ugc2xvdHMgdG8gbmV0bWFwLiAqLworCXJpbmctPmhlYWQgPSByaW5nLT5jdXIgPSBoZWFk
OworCisJcmV0dXJuIHRvdGxlbjsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfYmFja2VuZCBuZXRt
YXBfYmFja2VuZCA9IHsKKwkubmFtZSA9ICJuZXRtYXB8dmFsZSIsCisJLmluaXQgPSBuZXRtYXBf
aW5pdCwKKwkuY2xlYW51cCA9IG5ldG1hcF9jbGVhbnVwLAorCS5zZW5kID0gbmV0bWFwX3NlbmQs
CisJLnJlY3YgPSBuZXRtYXBfcmVjdiwKKwkuZ2V0X2NhcCA9IG5ldG1hcF9nZXRfY2FwLAorCS5z
ZXRfY2FwID0gbmV0bWFwX3NldF9jYXAsCit9OworCitEQVRBX1NFVChuZXRfYmFja2VuZF9zLCBu
ZXRtYXBfYmFja2VuZCk7CisKKyNlbmRpZiAvKiBXSVRIX05FVE1BUCAqLworCisvKgorICogbWFr
ZSBzdXJlIGEgYmFja2VuZCBpcyBwcm9wZXJseSBpbml0aWFsaXplZAorICovCitzdGF0aWMgdm9p
ZAorbmV0YmVfZml4KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJaWYgKGJlID09IE5VTEwp
CisJCXJldHVybjsKKwlpZiAoYmUtPm5hbWUgPT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwg
Im1pc3NpbmcgbmFtZSBmb3IgJXBcbiIsIGJlKTsKKwkJYmUtPm5hbWUgPSAidW5uYW1lZCBuZXRi
ZSI7CisJfQorCWlmIChiZS0+aW5pdCA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAibWlz
c2luZyBpbml0IGZvciAlcCAlc1xuIiwgYmUsIGJlLT5uYW1lKTsKKwkJYmUtPmluaXQgPSBuZXRi
ZV9udWxsX2luaXQ7CisJfQorCWlmIChiZS0+Y2xlYW51cCA9PSBOVUxMKSB7CisJCWZwcmludGYo
c3RkZXJyLCAibWlzc2luZyBjbGVhbnVwIGZvciAlcCAlc1xuIiwgYmUsIGJlLT5uYW1lKTsKKwkJ
YmUtPmNsZWFudXAgPSBuZXRiZV9udWxsX2NsZWFudXA7CisJfQorCWlmIChiZS0+c2VuZCA9PSBO
VUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAibWlzc2luZyBzZW5kIGZvciAlcCAlc1xuIiwgYmUs
IGJlLT5uYW1lKTsKKwkJYmUtPnNlbmQgPSBuZXRiZV9udWxsX3NlbmQ7CisJfQorCWlmIChiZS0+
cmVjdiA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAibWlzc2luZyByZWN2IGZvciAlcCAl
c1xuIiwgYmUsIGJlLT5uYW1lKTsKKwkJYmUtPnJlY3YgPSBuZXRiZV9udWxsX3JlY3Y7CisJfQor
CWlmIChiZS0+Z2V0X2NhcCA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAibWlzc2luZyBn
ZXRfY2FwIGZvciAlcCAlc1xuIiwKKwkJCWJlLCBiZS0+bmFtZSk7CisJCWJlLT5nZXRfY2FwID0g
bmV0YmVfbnVsbF9nZXRfY2FwOworCX0KKwlpZiAoYmUtPnNldF9jYXAgPT0gTlVMTCkgeworCQlm
cHJpbnRmKHN0ZGVyciwgIm1pc3Npbmcgc2V0X2NhcCBmb3IgJXAgJXNcbiIsCisJCQliZSwgYmUt
Pm5hbWUpOworCQliZS0+c2V0X2NhcCA9IG5ldGJlX251bGxfc2V0X2NhcDsKKwl9Cit9CisKKy8q
CisgKiBrZXlzIGlzIGEgc2V0IG9mIHByZWZpeGVzIHNlcGFyYXRlZCBieSAnfCcsCisgKiByZXR1
cm4gMSBpZiB0aGUgbGVmdG1vc3QgcGFydCBvZiBuYW1lIG1hdGNoZXMgb25lIHByZWZpeC4KKyAq
Lworc3RhdGljIGNvbnN0IGNoYXIgKgorbmV0YmVfbmFtZV9tYXRjaChjb25zdCBjaGFyICprZXlz
LCBjb25zdCBjaGFyICpuYW1lKQoreworCWNvbnN0IGNoYXIgKm4gPSBuYW1lLCAqZ29vZCA9IGtl
eXM7CisJY2hhciBjOworCisJaWYgKCFrZXlzIHx8ICFuYW1lKQorCQlyZXR1cm4gTlVMTDsKKwl3
aGlsZSAoIChjID0gKmtleXMrKykgKSB7CisJCWlmIChjID09ICd8JykgeyAvKiByZWFjaGVkIHRo
ZSBzZXBhcmF0b3IgKi8KKwkJCWlmIChnb29kKQorCQkJCWJyZWFrOworCQkJLyogcHJlcGFyZSBm
b3IgbmV3IHJvdW5kICovCisJCQluID0gbmFtZTsKKwkJCWdvb2QgPSBrZXlzOworCQl9IGVsc2Ug
aWYgKGdvb2QgJiYgYyAhPSAqbisrKSB7CisJCQlnb29kID0gTlVMTDsgLyogZHJvcCB0aWxsIG5l
eHQga2V5d29yZCAqLworCQl9CisJfQorCXJldHVybiBnb29kOworfQorCisvKgorICogSW5pdGlh
bGl6ZSBhIGJhY2tlbmQgYW5kIGF0dGFjaCB0byB0aGUgZnJvbnRlbmQuCisgKiBUaGlzIGlzIGNh
bGxlZCBkdXJpbmcgZnJvbnRlbmQgaW5pdGlhbGl6YXRpb24uCisgKiBkZXZuYW1lIGlzIHRoZSBi
YWNrZW5kLW5hbWUgYXMgc3VwcGxpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwKKyAqIAllLmcuIC1z
IDI6MCxmcm9udGVuZC1uYW1lLGJhY2tlbmQtbmFtZVssb3RoZXItYXJnc10KKyAqIGNiIGlzIHRo
ZSByZWNlaXZlIGNhbGxiYWNrIHN1cHBsaWVkIGJ5IHRoZSBmcm9udGVuZCwKKyAqCWFuZCBpdCBp
cyBpbnZva2VkIGluIHRoZSBldmVudCBsb29wIHdoZW4gYSByZWNlaXZlCisgKglldmVudCBpcyBn
ZW5lcmF0ZWQgaW4gdGhlIGh5cGVydmlzb3IsCisgKiBwYXJhbSBpcyBhIHBvaW50ZXIgdG8gdGhl
IGZyb250ZW5kLCBhbmQgbm9ybWFsbHkgdXNlZCBhcworICoJdGhlIGFyZ3VtZW50IGZvciB0aGUg
Y2FsbGJhY2suCisgKi8KK3N0cnVjdCBuZXRfYmFja2VuZCAqCituZXRiZV9pbml0KGNvbnN0IGNo
YXIgKmRldm5hbWUsIG5ldF9iYWNrZW5kX2NiX3QgY2IsIHZvaWQgKnBhcmFtKQoreworCXN0cnVj
dCBuZXRfYmFja2VuZCAqKnBiZSwgKmJlLCAqdGJlID0gTlVMTDsKKwlpbnQgZXJyOworCisJLyoK
KwkgKiBGaW5kIHRoZSBuZXR3b3JrIGJhY2tlbmQgZGVwZW5kaW5nIG9uIHRoZSB1c2VyLXByb3Zp
ZGVkCisJICogZGV2aWNlIG5hbWUuIG5ldF9iYWNrZW5kX3MgaXMgYnVpbHQgdXNpbmcgYSBsaW5r
ZXIgc2V0LgorCSAqLworCVNFVF9GT1JFQUNIKHBiZSwgbmV0X2JhY2tlbmRfcykgeworCQlpZiAo
bmV0YmVfbmFtZV9tYXRjaCgoKnBiZSktPm5hbWUsIGRldm5hbWUpKSB7CisJCQl0YmUgPSAqcGJl
OworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHRiZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsg
Lyogb3IgbnVsbCBiYWNrZW5kID8gKi8KKwliZSA9IGNhbGxvYygxLCBzaXplb2YoKmJlKSk7CisJ
KmJlID0gKnRiZTsJLyogY29weSB0aGUgdGVtcGxhdGUgKi8KKwluZXRiZV9maXgoYmUpOyAvKiBt
YWtlIHN1cmUgd2UgaGF2ZSBhbGwgZmllbGRzICovCisJYmUtPmZkID0gLTE7CisJYmUtPnByaXYg
PSBOVUxMOworCWJlLT5zYyA9IHBhcmFtOworCWJlLT5iZV92bmV0X2hkcl9sZW4gPSAwOworCWJl
LT5mZV92bmV0X2hkcl9sZW4gPSAwOworCisJLyogaW5pdGlhbGl6ZSB0aGUgYmFja2VuZCAqLwor
CWVyciA9IGJlLT5pbml0KGJlLCBkZXZuYW1lLCBjYiwgcGFyYW0pOworCWlmIChlcnIpIHsKKwkJ
ZnJlZShiZSk7CisJCWJlID0gTlVMTDsKKwl9CisJcmV0dXJuIGJlOworfQorCit2b2lkCituZXRi
ZV9jbGVhbnVwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJaWYgKGJlID09IE5VTEwpCisJ
CXJldHVybjsKKwliZS0+Y2xlYW51cChiZSk7CisJZnJlZShiZSk7Cit9CisKK3VpbnQ2NF90Citu
ZXRiZV9nZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJaWYgKGJlID09IE5VTEwp
CisJCXJldHVybiAwOworCXJldHVybiBiZS0+Z2V0X2NhcChiZSk7Cit9CisKK2ludAorbmV0YmVf
c2V0X2NhcChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCB1aW50NjRfdCBmZWF0dXJlcywKKwkgICAg
ICB1bnNpZ25lZCB2bmV0X2hkcl9sZW4pCit7CisJaW50IHJldDsKKworCWlmIChiZSA9PSBOVUxM
KQorCQlyZXR1cm4gMDsKKworCS8qIFRoZXJlIGFyZSBvbmx5IHRocmVlIHZhbGlkIGxlbmd0aHMu
ICovCisJaWYgKHZuZXRfaGRyX2xlbiAmJiB2bmV0X2hkcl9sZW4gIT0gVk5FVF9IRFJfTEVOCisJ
CSYmIHZuZXRfaGRyX2xlbiAhPSAoVk5FVF9IRFJfTEVOIC0gc2l6ZW9mKHVpbnQxNl90KSkpCisJ
CXJldHVybiAtMTsKKworCWJlLT5mZV92bmV0X2hkcl9sZW4gPSB2bmV0X2hkcl9sZW47CisKKwly
ZXQgPSBiZS0+c2V0X2NhcChiZSwgZmVhdHVyZXMsIHZuZXRfaGRyX2xlbik7CisJYXNzZXJ0KGJl
LT5iZV92bmV0X2hkcl9sZW4gPT0gMCB8fAorCSAgICAgICBiZS0+YmVfdm5ldF9oZHJfbGVuID09
IGJlLT5mZV92bmV0X2hkcl9sZW4pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9faW5s
aW5lIHN0cnVjdCBpb3ZlYyAqCitpb3ZfdHJpbShzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50ICppb3Zj
bnQsIHVuc2lnbmVkIGludCB0bGVuKQoreworCXN0cnVjdCBpb3ZlYyAqcmlvdjsKKworCS8qIFhY
WCBzaG9ydC1jdXQ6IGFzc3VtZSBmaXJzdCBzZWdtZW50IGlzID49IHRsZW4gKi8KKwlhc3NlcnQo
aW92WzBdLmlvdl9sZW4gPj0gdGxlbik7CisKKwlpb3ZbMF0uaW92X2xlbiAtPSB0bGVuOworCWlm
IChpb3ZbMF0uaW92X2xlbiA9PSAwKSB7CisJCWFzc2VydCgqaW92Y250ID4gMSk7CisJCSppb3Zj
bnQgLT0gMTsKKwkJcmlvdiA9ICZpb3ZbMV07CisJfSBlbHNlIHsKKwkJaW92WzBdLmlvdl9iYXNl
ID0gKHZvaWQgKikoKHVpbnRwdHJfdClpb3ZbMF0uaW92X2Jhc2UgKyB0bGVuKTsKKwkJcmlvdiA9
ICZpb3ZbMF07CisJfQorCisJcmV0dXJuIChyaW92KTsKK30KKwordm9pZAorbmV0YmVfc2VuZChz
dHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCwgdWlu
dDMyX3QgbGVuLAorCSAgIGludCBtb3JlKQoreworCWlmIChiZSA9PSBOVUxMKQorCQlyZXR1cm47
CisjaWYgMAorCWludCBpOworCUQoInNlbmRpbmcgaW92Y250ICVkIGxlbiAlZCBpb3ZlYyAlcCIs
IGlvdmNudCwgbGVuLCBpb3YpOworCWZvciAoaT0wOyBpIDwgaW92Y250OyBpKyspCisJCUQoIiAg
ICUzZDogJTRkICVwIiwgaSwgKGludClpb3ZbaV0uaW92X2xlbiwgaW92W2ldLmlvdl9iYXNlKTsK
KyNlbmRpZgorCWlmIChiZS0+YmVfdm5ldF9oZHJfbGVuICE9IGJlLT5mZV92bmV0X2hkcl9sZW4p
IHsKKwkJLyogSGVyZSB3ZSBhcmUgc3VyZSBiZS0+YmVfdm5ldF9oZHJfbGVuIGlzIDAuICovCisJ
CWlvdiA9IGlvdl90cmltKGlvdiwgJmlvdmNudCwgYmUtPmZlX3ZuZXRfaGRyX2xlbik7CisJfQor
CisJYmUtPnNlbmQoYmUsIGlvdiwgaW92Y250LCBsZW4sIG1vcmUpOworfQorCisvKgorICogY2Fu
IHJldHVybiAtMSBpbiBjYXNlIG9mIGVycm9ycworICovCitpbnQKK25ldGJlX3JlY3Yoc3RydWN0
IG5ldF9iYWNrZW5kICpiZSwgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQpCit7CisJdW5z
aWduZWQgaW50IGhsZW4gPSAwOyAvKiBsZW5ndGggb2YgcHJlcGVuZGVkIHZpcnRpby1uZXQgaGVh
ZGVyICovCisJaW50IHJldDsKKworCWlmIChiZSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlp
ZiAoYmUtPmJlX3ZuZXRfaGRyX2xlbiAhPSBiZS0+ZmVfdm5ldF9oZHJfbGVuKSB7CisJCXN0cnVj
dCB2aXJ0aW9fbmV0X3J4aGRyICp2aDsKKworCQkvKiBIZXJlIHdlIGFyZSBzdXJlIGJlLT5iZV92
bmV0X2hkcl9sZW4gaXMgMC4gKi8KKwkJaGxlbiA9IGJlLT5mZV92bmV0X2hkcl9sZW47CisJCS8q
CisJCSAqIEdldCBhIHBvaW50ZXIgdG8gdGhlIHJ4IGhlYWRlciwgYW5kIHVzZSB0aGUKKwkJICog
ZGF0YSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgaXQgZm9yIHRoZSBwYWNrZXQgYnVmZmVyLgorCQkg
Ki8KKwkJdmggPSBpb3ZbMF0uaW92X2Jhc2U7CisJCWlvdiA9IGlvdl90cmltKGlvdiwgJmlvdmNu
dCwgaGxlbik7CisKKwkJLyoKKwkJICogSGVyZSB3ZSBhcmUgc3VyZSBiZS0+ZmVfdm5ldF9oZHJf
bGVuIGlzIDAuCisJCSAqIFRoZSBvbmx5IHZhbGlkIGZpZWxkIGluIHRoZSByeCBwYWNrZXQgaGVh
ZGVyIGlzIHRoZQorCQkgKiBudW1iZXIgb2YgYnVmZmVycyBpZiBtZXJnZWQgcnggYnVmcyB3ZXJl
IG5lZ290aWF0ZWQuCisJCSAqLworCQltZW1zZXQodmgsIDAsIGhsZW4pOworCisJCWlmIChobGVu
ID09IFZORVRfSERSX0xFTikgeworCQkJdmgtPnZyaF9idWZzID0gMTsKKwkJfQorCX0KKworCXJl
dCA9IGJlLT5yZWN2KGJlLCBpb3YsIGlvdmNudCk7CisJaWYgKHJldCA+IDApIHsKKwkJcmV0ICs9
IGhsZW47CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJlYWQgYSBwYWNrZXQgZnJv
bSB0aGUgYmFja2VuZCBhbmQgZGlzY2FyZCBpdC4KKyAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhl
IGRpc2NhcmRlZCBwYWNrZXQgb3IgemVybyBpZiBubyBwYWNrZXQgd2FzIGF2YWlsYWJsZS4KKyAq
IEEgbmVnYXRpdmUgZXJyb3IgY29kZSBpcyByZXR1cm5lZCBpbiBjYXNlIG9mIHJlYWQgZXJyb3Iu
CisgKi8KK2ludAorbmV0YmVfcnhfZGlzY2FyZChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKQorewor
CS8qCisJICogTVAgbm90ZTogdGhlIGR1bW15YnVmIGlzIG9ubHkgdXNlZCB0byBkaXNjYXJkIGZy
YW1lcywKKwkgKiBzbyB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCB0byBiZSBwZXItdnRuZXQgb3Ig
bG9ja2VkLgorCSAqIFdlIG9ubHkgbWFrZSBpdCBsYXJnZSBlbm91Z2ggZm9yIFRTTy1zaXplZCBz
ZWdtZW50LgorCSAqLworCXN0YXRpYyB1aW50OF90IGR1bW15YnVmWzY1NTM2KzY0XTsKKwlzdHJ1
Y3QgaW92ZWMgaW92OworCisJaW92Lmlvdl9iYXNlID0gZHVtbXlidWY7CisJaW92Lmlvdl9sZW4g
PSBzaXplb2YoZHVtbXlidWYpOworCisJcmV0dXJuIG5ldGJlX3JlY3YoYmUsICZpb3YsIDEpOwor
fQorCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9uZXRfYmFja2VuZHMuaCAv
dXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9uZXRfYmFja2VuZHMuaAotLS0gdXNyL3NyYy91c3Iuc2Jp
bi9iaHl2ZS9uZXRfYmFja2VuZHMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEw
MAorKysgL3Vzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X2JhY2tlbmRzLmgJMjAxNi0xMS0zMCAx
MDo1NjowNS44NDE5NTgwMDAgKzAwMDAKQEAgLTAsMCArMSw0MzIgQEAKKy8qLQorICogQ29weXJp
Z2h0IChjKSAyMDE0IFZpbmNlbnpvIE1hZmZpb25lIDx2Lm1hZmZpb25lQGdtYWlsLmNvbT4KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlNgYEFTIElTJycgQU5ECisgKiBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwK
KyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsCisgKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX19ORVRfQkFDS0VORFNfSF9fCisjZGVm
aW5lIF9fTkVUX0JBQ0tFTkRTX0hfXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZmRlZiBX
SVRIX05FVE1BUAorI2luY2x1ZGUgPG5ldC9uZXRtYXAuaD4KKyNpbmNsdWRlIDxuZXQvbmV0bWFw
X3ZpcnQuaD4KKyNkZWZpbmUgTkVUTUFQX1dJVEhfTElCUworI2luY2x1ZGUgPG5ldC9uZXRtYXBf
dXNlci5oPgorI2lmIChORVRNQVBfQVBJIDwgMTEpCisjZXJyb3IgIk5ldG1hcCBBUEkgdmVyc2lv
biBtdXN0IGJlID49IDExIgorI2VuZGlmCisjZW5kaWYgLyogV0lUSF9ORVRNQVAgKi8KKworI2lu
Y2x1ZGUgIm1ldmVudC5oIgorCitleHRlcm4gaW50IG5ldG1hcF9pb2N0bF9jb3VudGVyOworCit0
eXBlZGVmIHZvaWQgKCpuZXRfYmFja2VuZF9jYl90KShpbnQsIGVudW0gZXZfdHlwZSwgdm9pZCAq
cGFyYW0pOworCisvKiBJbnRlcmZhY2UgYmV0d2VlbiB2aXJ0aW8tbmV0IGFuZCB0aGUgbmV0d29y
ayBiYWNrZW5kLiAqLworc3RydWN0IG5ldF9iYWNrZW5kOworCitzdHJ1Y3QgbmV0X2JhY2tlbmQg
Km5ldGJlX2luaXQoY29uc3QgY2hhciAqZGV2bmFtZSwKKwkJCW5ldF9iYWNrZW5kX2NiX3QgY2Is
IHZvaWQgKnBhcmFtKTsKK3ZvaWQJbmV0YmVfY2xlYW51cChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJl
KTsKK3VpbnQ2NF90IG5ldGJlX2dldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSk7CitpbnQJ
IG5ldGJlX3NldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgdWludDY0X3QgY2FwLAorCQkJ
ICAgIHVuc2lnbmVkIHZuZXRfaGRyX2xlbik7Cit2b2lkCW5ldGJlX3NlbmQoc3RydWN0IG5ldF9i
YWNrZW5kICpiZSwgc3RydWN0IGlvdmVjICppb3YsCisJCSAgIGludCBpb3ZjbnQsIHVpbnQzMl90
IGxlbiwgaW50IG1vcmUpOworaW50CW5ldGJlX3JlY3Yoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwg
c3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQpOworaW50CW5ldGJlX3J4X2Rpc2NhcmQoc3Ry
dWN0IG5ldF9iYWNrZW5kICpiZSk7CisKKworLyoKKyAqIE5ldHdvcmsgZGV2aWNlIGNhcGFiaWxp
dGllcyB0YWtlbiBmcm9tIFZpcnRJTyBzdGFuZGFyZC4KKyAqIERlc3BpdGUgdGhlIG5hbWUsIHRo
ZXNlIGNhcGFiaWxpdGllcyBjYW4gYmUgdXNlZCBieSBkaWZmZXJlbnQgZnJvbnRlbnRzCisgKiAo
dmlydGlvLW5ldCwgcHRuZXQpIGFuZCBzdXBwb3J0ZWQgYnkgZGlmZmVyZW50IGJhY2tlbmRzIChu
ZXRtYXAsIHRhcCwgLi4uKS4KKyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1NVTQkoMSA8PCAg
MCkgLyogaG9zdCBoYW5kbGVzIHBhcnRpYWwgY2tzdW0gKi8KKyNkZWZpbmUJVklSVElPX05FVF9G
X0dVRVNUX0NTVU0JKDEgPDwgIDEpIC8qIGd1ZXN0IGhhbmRsZXMgcGFydGlhbCBja3N1bSAqLwor
I2RlZmluZQlWSVJUSU9fTkVUX0ZfTUFDCSgxIDw8ICA1KSAvKiBob3N0IHN1cHBsaWVzIE1BQyAq
LworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1NPX0RFUFJFQwkoMSA8PCAgNikgLyogZGVwcmVjYXRl
ZDogaG9zdCBoYW5kbGVzIEdTTyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNAko
MSA8PCAgNykgLyogZ3Vlc3QgY2FuIHJjdiBUU092NCAqLworI2RlZmluZQlWSVJUSU9fTkVUX0Zf
R1VFU1RfVFNPNgkoMSA8PCAgOCkgLyogZ3Vlc3QgY2FuIHJjdiBUU092NiAqLworI2RlZmluZQlW
SVJUSU9fTkVUX0ZfR1VFU1RfRUNOCSgxIDw8ICA5KSAvKiBndWVzdCBjYW4gcmN2IFRTTyB3aXRo
IEVDTiAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfVUZPCSgxIDw8IDEwKSAvKiBndWVz
dCBjYW4gcmN2IFVGTyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfSE9TVF9UU080CSgxIDw8IDEx
KSAvKiBob3N0IGNhbiByY3YgVFNPdjQgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0hPU1RfVFNP
NgkoMSA8PCAxMikgLyogaG9zdCBjYW4gcmN2IFRTT3Y2ICovCisjZGVmaW5lCVZJUlRJT19ORVRf
Rl9IT1NUX0VDTgkoMSA8PCAxMykgLyogaG9zdCBjYW4gcmN2IFRTTyB3aXRoIEVDTiAqLworI2Rl
ZmluZQlWSVJUSU9fTkVUX0ZfSE9TVF9VRk8JKDEgPDwgMTQpIC8qIGhvc3QgY2FuIHJjdiBVRk8g
Ki8KKyNkZWZpbmUJVklSVElPX05FVF9GX01SR19SWEJVRgkoMSA8PCAxNSkgLyogaG9zdCBjYW4g
bWVyZ2UgUlggYnVmZmVycyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfU1RBVFVTCSgxIDw8IDE2
KSAvKiBjb25maWcgc3RhdHVzIGZpZWxkIGF2YWlsYWJsZSAqLworI2RlZmluZQlWSVJUSU9fTkVU
X0ZfQ1RSTF9WUQkoMSA8PCAxNykgLyogY29udHJvbCBjaGFubmVsIGF2YWlsYWJsZSAqLworI2Rl
ZmluZQlWSVJUSU9fTkVUX0ZfQ1RSTF9SWAkoMSA8PCAxOCkgLyogY29udHJvbCBjaGFubmVsIFJY
IG1vZGUgc3VwcG9ydCAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFOCSgxIDw8IDE5
KSAvKiBjb250cm9sIGNoYW5uZWwgVkxBTiBmaWx0ZXJpbmcgKi8KKyNkZWZpbmUJVklSVElPX05F
VF9GX0dVRVNUX0FOTk9VTkNFIFwKKwkJCQkoMSA8PCAyMSkgLyogZ3Vlc3QgY2FuIHNlbmQgZ3Jh
dHVpdG91cyBwa3RzICovCisKKy8qCisgKiBGaXhlZCBuZXR3b3JrIGhlYWRlciBzaXplCisgKi8K
K3N0cnVjdCB2aXJ0aW9fbmV0X3J4aGRyIHsKKwl1aW50OF90CQl2cmhfZmxhZ3M7CisJdWludDhf
dAkJdnJoX2dzb190eXBlOworCXVpbnQxNl90CXZyaF9oZHJfbGVuOworCXVpbnQxNl90CXZyaF9n
c29fc2l6ZTsKKwl1aW50MTZfdAl2cmhfY3N1bV9zdGFydDsKKwl1aW50MTZfdAl2cmhfY3N1bV9v
ZmZzZXQ7CisJdWludDE2X3QJdnJoX2J1ZnM7Cit9IF9fcGFja2VkOworCisvKgorICogcHRuZXRt
YXAgZGVmaW5pdGlvbnMKKyAqLworc3RydWN0IHB0bmV0bWFwX3N0YXRlIHsKKwl2b2lkCQkqbmV0
bWFwX3ByaXY7CisKKwkvKiBUcnVlIGlmIHB0bmV0bWFwIGt0aHJlYWRzIGFyZSBydW5uaW5nLiAq
LworCWludAkJcnVubmluZzsKKworCS8qIEZlYXR1cmUgYWNrbm93ZWxlZGdlbWVudCBzdXBwb3J0
LiAqLworCXVuc2lnbmVkIGxvbmcJZmVhdHVyZXM7CisJdW5zaWduZWQgbG9uZwlhY2tlZF9mZWF0
dXJlczsKKworCS8qIEluZm8gYWJvdXQgbmV0bWFwIG1lbW9yeS4gKi8KKwl1aW50MzJfdAltZW1z
aXplOworCXZvaWQJCSptZW07Cit9OworCisjaWZkZWYgV0lUSF9ORVRNQVAKKy8qIFVzZWQgdG8g
Z2V0IHJlYWQtb25seSBpbmZvLiAqLworc3RydWN0IG5ldG1hcF9pZl9pbmZvIHsKKwl1aW50MzJf
dCBuaWZwX29mZnNldDsKKwl1aW50MTZfdCBudW1fdHhfcmluZ3M7CisJdWludDE2X3QgbnVtX3J4
X3JpbmdzOworCXVpbnQxNl90IG51bV90eF9zbG90czsKKwl1aW50MTZfdCBudW1fcnhfc2xvdHM7
Cit9OworCitpbnQgcHRuX21lbWRldl9hdHRhY2godm9pZCAqbWVtX3B0ciwgc3RydWN0IG5ldG1h
cF9wb29sc19pbmZvICopOworaW50IHB0bmV0bWFwX2dldF9uZXRtYXBfaWYoc3RydWN0IHB0bmV0
bWFwX3N0YXRlICpwdG4sCisJCQkgICBzdHJ1Y3QgbmV0bWFwX2lmX2luZm8gKm5pZik7CitzdHJ1
Y3QgcHRuZXRtYXBfc3RhdGUgKiBnZXRfcHRuZXRtYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSk7
Cit1aW50MzJfdCBwdG5ldG1hcF9hY2tfZmVhdHVyZXMoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpw
dG4sCisJCQkgICAgICAgdWludDMyX3Qgd2FudGVkX2ZlYXR1cmVzKTsKK2ludCBwdG5ldG1hcF9n
ZXRfaG9zdG1lbWlkKHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuKTsKK2ludCBwdG5ldG1hcF9j
cmVhdGUoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG4sIHN0cnVjdCBwdG5ldG1hcF9jZmcgKmNm
Zyk7CitpbnQgcHRuZXRtYXBfZGVsZXRlKHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuKTsKKyNl
bmRpZiAvKiBXSVRIX05FVE1BUCAqLworCisjaW5jbHVkZSAicGNpX2VtdWwuaCIKK2ludCBuZXRf
cGFyc2VtYWMoY2hhciAqbWFjX3N0ciwgdWludDhfdCAqbWFjX2FkZHIpOwordm9pZCBuZXRfZ2Vu
bWFjKHN0cnVjdCBwY2lfZGV2aW5zdCAqcGksIHVpbnQ4X3QgKm1hY2FkZHIpOworCisjZW5kaWYg
LyogX19ORVRfQkFDS0VORFNfSF9fICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxNCBWaW5j
ZW56byBNYWZmaW9uZSA8di5tYWZmaW9uZUBnbWFpbC5jb20+CisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFV
VEhPUiBBTkQgQ09OVFJJQlVUT1JTYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAor
ICogT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgKiBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LAorICogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIF9fTkVUX0JBQ0tFTkRTX0hfXworI2RlZmluZSBfX05FVF9CQUNLRU5E
U19IX18KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgV0lUSF9ORVRNQVAKKyNpbmNs
dWRlIDxuZXQvbmV0bWFwLmg+CisjaW5jbHVkZSA8bmV0L25ldG1hcF92aXJ0Lmg+CisjZGVmaW5l
IE5FVE1BUF9XSVRIX0xJQlMKKyNpbmNsdWRlIDxuZXQvbmV0bWFwX3VzZXIuaD4KKyNpZiAoTkVU
TUFQX0FQSSA8IDExKQorI2Vycm9yICJOZXRtYXAgQVBJIHZlcnNpb24gbXVzdCBiZSA+PSAxMSIK
KyNlbmRpZgorI2VuZGlmIC8qIFdJVEhfTkVUTUFQICovCisKKyNpbmNsdWRlICJtZXZlbnQuaCIK
KworZXh0ZXJuIGludCBuZXRtYXBfaW9jdGxfY291bnRlcjsKKwordHlwZWRlZiB2b2lkICgqbmV0
X2JhY2tlbmRfY2JfdCkoaW50LCBlbnVtIGV2X3R5cGUsIHZvaWQgKnBhcmFtKTsKKworLyogSW50
ZXJmYWNlIGJldHdlZW4gdmlydGlvLW5ldCBhbmQgdGhlIG5ldHdvcmsgYmFja2VuZC4gKi8KK3N0
cnVjdCBuZXRfYmFja2VuZDsKKworc3RydWN0IG5ldF9iYWNrZW5kICpuZXRiZV9pbml0KGNvbnN0
IGNoYXIgKmRldm5hbWUsCisJCQluZXRfYmFja2VuZF9jYl90IGNiLCB2b2lkICpwYXJhbSk7Cit2
b2lkCW5ldGJlX2NsZWFudXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSk7Cit1aW50NjRfdCBuZXRi
ZV9nZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpOworaW50CSBuZXRiZV9zZXRfY2FwKHN0
cnVjdCBuZXRfYmFja2VuZCAqYmUsIHVpbnQ2NF90IGNhcCwKKwkJCSAgICB1bnNpZ25lZCB2bmV0
X2hkcl9sZW4pOwordm9pZAluZXRiZV9zZW5kKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVj
dCBpb3ZlYyAqaW92LAorCQkgICBpbnQgaW92Y250LCB1aW50MzJfdCBsZW4sIGludCBtb3JlKTsK
K2ludAluZXRiZV9yZWN2KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92
LCBpbnQgaW92Y250KTsKK2ludAluZXRiZV9yeF9kaXNjYXJkKHN0cnVjdCBuZXRfYmFja2VuZCAq
YmUpOworCisKKy8qCisgKiBOZXR3b3JrIGRldmljZSBjYXBhYmlsaXRpZXMgdGFrZW4gZnJvbSBW
aXJ0SU8gc3RhbmRhcmQuCisgKiBEZXNwaXRlIHRoZSBuYW1lLCB0aGVzZSBjYXBhYmlsaXRpZXMg
Y2FuIGJlIHVzZWQgYnkgZGlmZmVyZW50IGZyb250ZW50cworICogKHZpcnRpby1uZXQsIHB0bmV0
KSBhbmQgc3VwcG9ydGVkIGJ5IGRpZmZlcmVudCBiYWNrZW5kcyAobmV0bWFwLCB0YXAsIC4uLiku
CisgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0NTVU0JKDEgPDwgIDApIC8qIGhvc3QgaGFuZGxl
cyBwYXJ0aWFsIGNrc3VtICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVTVF9DU1VNCSgxIDw8
ICAxKSAvKiBndWVzdCBoYW5kbGVzIHBhcnRpYWwgY2tzdW0gKi8KKyNkZWZpbmUJVklSVElPX05F
VF9GX01BQwkoMSA8PCAgNSkgLyogaG9zdCBzdXBwbGllcyBNQUMgKi8KKyNkZWZpbmUJVklSVElP
X05FVF9GX0dTT19ERVBSRUMJKDEgPDwgIDYpIC8qIGRlcHJlY2F0ZWQ6IGhvc3QgaGFuZGxlcyBH
U08gKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0dVRVNUX1RTTzQJKDEgPDwgIDcpIC8qIGd1ZXN0
IGNhbiByY3YgVFNPdjQgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0dVRVNUX1RTTzYJKDEgPDwg
IDgpIC8qIGd1ZXN0IGNhbiByY3YgVFNPdjYgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0dVRVNU
X0VDTgkoMSA8PCAgOSkgLyogZ3Vlc3QgY2FuIHJjdiBUU08gd2l0aCBFQ04gKi8KKyNkZWZpbmUJ
VklSVElPX05FVF9GX0dVRVNUX1VGTwkoMSA8PCAxMCkgLyogZ3Vlc3QgY2FuIHJjdiBVRk8gKi8K
KyNkZWZpbmUJVklSVElPX05FVF9GX0hPU1RfVFNPNAkoMSA8PCAxMSkgLyogaG9zdCBjYW4gcmN2
IFRTT3Y0ICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9IT1NUX1RTTzYJKDEgPDwgMTIpIC8qIGhv
c3QgY2FuIHJjdiBUU092NiAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfSE9TVF9FQ04JKDEgPDwg
MTMpIC8qIGhvc3QgY2FuIHJjdiBUU08gd2l0aCBFQ04gKi8KKyNkZWZpbmUJVklSVElPX05FVF9G
X0hPU1RfVUZPCSgxIDw8IDE0KSAvKiBob3N0IGNhbiByY3YgVUZPICovCisjZGVmaW5lCVZJUlRJ
T19ORVRfRl9NUkdfUlhCVUYJKDEgPDwgMTUpIC8qIGhvc3QgY2FuIG1lcmdlIFJYIGJ1ZmZlcnMg
Ki8KKyNkZWZpbmUJVklSVElPX05FVF9GX1NUQVRVUwkoMSA8PCAxNikgLyogY29uZmlnIHN0YXR1
cyBmaWVsZCBhdmFpbGFibGUgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0NUUkxfVlEJKDEgPDwg
MTcpIC8qIGNvbnRyb2wgY2hhbm5lbCBhdmFpbGFibGUgKi8KKyNkZWZpbmUJVklSVElPX05FVF9G
X0NUUkxfUlgJKDEgPDwgMTgpIC8qIGNvbnRyb2wgY2hhbm5lbCBSWCBtb2RlIHN1cHBvcnQgKi8K
KyNkZWZpbmUJVklSVElPX05FVF9GX0NUUkxfVkxBTgkoMSA8PCAxOSkgLyogY29udHJvbCBjaGFu
bmVsIFZMQU4gZmlsdGVyaW5nICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVTVF9BTk5PVU5D
RSBcCisJCQkJKDEgPDwgMjEpIC8qIGd1ZXN0IGNhbiBzZW5kIGdyYXR1aXRvdXMgcGt0cyAqLwor
CisvKgorICogRml4ZWQgbmV0d29yayBoZWFkZXIgc2l6ZQorICovCitzdHJ1Y3QgdmlydGlvX25l
dF9yeGhkciB7CisJdWludDhfdAkJdnJoX2ZsYWdzOworCXVpbnQ4X3QJCXZyaF9nc29fdHlwZTsK
Kwl1aW50MTZfdAl2cmhfaGRyX2xlbjsKKwl1aW50MTZfdAl2cmhfZ3NvX3NpemU7CisJdWludDE2
X3QJdnJoX2NzdW1fc3RhcnQ7CisJdWludDE2X3QJdnJoX2NzdW1fb2Zmc2V0OworCXVpbnQxNl90
CXZyaF9idWZzOworfSBfX3BhY2tlZDsKKworLyoKKyAqIHB0bmV0bWFwIGRlZmluaXRpb25zCisg
Ki8KK3N0cnVjdCBwdG5ldG1hcF9zdGF0ZSB7CisJdm9pZAkJKm5ldG1hcF9wcml2OworCisJLyog
VHJ1ZSBpZiBwdG5ldG1hcCBrdGhyZWFkcyBhcmUgcnVubmluZy4gKi8KKwlpbnQJCXJ1bm5pbmc7
CisKKwkvKiBGZWF0dXJlIGFja25vd2VsZWRnZW1lbnQgc3VwcG9ydC4gKi8KKwl1bnNpZ25lZCBs
b25nCWZlYXR1cmVzOworCXVuc2lnbmVkIGxvbmcJYWNrZWRfZmVhdHVyZXM7CisKKwkvKiBJbmZv
IGFib3V0IG5ldG1hcCBtZW1vcnkuICovCisJdWludDMyX3QJbWVtc2l6ZTsKKwl2b2lkCQkqbWVt
OworfTsKKworI2lmZGVmIFdJVEhfTkVUTUFQCisvKiBVc2VkIHRvIGdldCByZWFkLW9ubHkgaW5m
by4gKi8KK3N0cnVjdCBuZXRtYXBfaWZfaW5mbyB7CisJdWludDMyX3QgbmlmcF9vZmZzZXQ7CisJ
dWludDE2X3QgbnVtX3R4X3JpbmdzOworCXVpbnQxNl90IG51bV9yeF9yaW5nczsKKwl1aW50MTZf
dCBudW1fdHhfc2xvdHM7CisJdWludDE2X3QgbnVtX3J4X3Nsb3RzOworfTsKKworaW50IHB0bl9t
ZW1kZXZfYXR0YWNoKHZvaWQgKm1lbV9wdHIsIHN0cnVjdCBuZXRtYXBfcG9vbHNfaW5mbyAqKTsK
K2ludCBwdG5ldG1hcF9nZXRfbmV0bWFwX2lmKHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuLAor
CQkJICAgc3RydWN0IG5ldG1hcF9pZl9pbmZvICpuaWYpOworc3RydWN0IHB0bmV0bWFwX3N0YXRl
ICogZ2V0X3B0bmV0bWFwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpOwordWludDMyX3QgcHRuZXRt
YXBfYWNrX2ZlYXR1cmVzKHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuLAorCQkJICAgICAgIHVp
bnQzMl90IHdhbnRlZF9mZWF0dXJlcyk7CitpbnQgcHRuZXRtYXBfZ2V0X2hvc3RtZW1pZChzdHJ1
Y3QgcHRuZXRtYXBfc3RhdGUgKnB0bik7CitpbnQgcHRuZXRtYXBfY3JlYXRlKHN0cnVjdCBwdG5l
dG1hcF9zdGF0ZSAqcHRuLCBzdHJ1Y3QgcHRuZXRtYXBfY2ZnICpjZmcpOworaW50IHB0bmV0bWFw
X2RlbGV0ZShzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0bik7CisjZW5kaWYgLyogV0lUSF9ORVRN
QVAgKi8KKworI2luY2x1ZGUgInBjaV9lbXVsLmgiCitpbnQgbmV0X3BhcnNlbWFjKGNoYXIgKm1h
Y19zdHIsIHVpbnQ4X3QgKm1hY19hZGRyKTsKK3ZvaWQgbmV0X2dlbm1hYyhzdHJ1Y3QgcGNpX2Rl
dmluc3QgKnBpLCB1aW50OF90ICptYWNhZGRyKTsKKworI2VuZGlmIC8qIF9fTkVUX0JBQ0tFTkRT
X0hfXyAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgVmluY2Vuem8gTWFmZmlvbmUgPHYu
bWFmZmlvbmVAZ21haWwuY29tPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJV
VE9SU2BgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICog
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwKKyAqIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBf
X05FVF9CQUNLRU5EU19IX18KKyNkZWZpbmUgX19ORVRfQkFDS0VORFNfSF9fCisKKyNpbmNsdWRl
IDxzdGRpbnQuaD4KKworI2lmZGVmIFdJVEhfTkVUTUFQCisjaW5jbHVkZSA8bmV0L25ldG1hcC5o
PgorI2luY2x1ZGUgPG5ldC9uZXRtYXBfdmlydC5oPgorI2RlZmluZSBORVRNQVBfV0lUSF9MSUJT
CisjaW5jbHVkZSA8bmV0L25ldG1hcF91c2VyLmg+CisjaWYgKE5FVE1BUF9BUEkgPCAxMSkKKyNl
cnJvciAiTmV0bWFwIEFQSSB2ZXJzaW9uIG11c3QgYmUgPj0gMTEiCisjZW5kaWYKKyNlbmRpZiAv
KiBXSVRIX05FVE1BUCAqLworCisjaW5jbHVkZSAibWV2ZW50LmgiCisKK2V4dGVybiBpbnQgbmV0
bWFwX2lvY3RsX2NvdW50ZXI7CisKK3R5cGVkZWYgdm9pZCAoKm5ldF9iYWNrZW5kX2NiX3QpKGlu
dCwgZW51bSBldl90eXBlLCB2b2lkICpwYXJhbSk7CisKKy8qIEludGVyZmFjZSBiZXR3ZWVuIHZp
cnRpby1uZXQgYW5kIHRoZSBuZXR3b3JrIGJhY2tlbmQuICovCitzdHJ1Y3QgbmV0X2JhY2tlbmQ7
CisKK3N0cnVjdCBuZXRfYmFja2VuZCAqbmV0YmVfaW5pdChjb25zdCBjaGFyICpkZXZuYW1lLAor
CQkJbmV0X2JhY2tlbmRfY2JfdCBjYiwgdm9pZCAqcGFyYW0pOwordm9pZAluZXRiZV9jbGVhbnVw
KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpOwordWludDY0X3QgbmV0YmVfZ2V0X2NhcChzdHJ1Y3Qg
bmV0X2JhY2tlbmQgKmJlKTsKK2ludAkgbmV0YmVfc2V0X2NhcChzdHJ1Y3QgbmV0X2JhY2tlbmQg
KmJlLCB1aW50NjRfdCBjYXAsCisJCQkgICAgdW5zaWduZWQgdm5ldF9oZHJfbGVuKTsKK3ZvaWQJ
bmV0YmVfc2VuZChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJ
ICAgaW50IGlvdmNudCwgdWludDMyX3QgbGVuLCBpbnQgbW9yZSk7CitpbnQJbmV0YmVfcmVjdihz
dHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCk7Citp
bnQJbmV0YmVfcnhfZGlzY2FyZChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKTsKKworCisvKgorICog
TmV0d29yayBkZXZpY2UgY2FwYWJpbGl0aWVzIHRha2VuIGZyb20gVmlydElPIHN0YW5kYXJkLgor
ICogRGVzcGl0ZSB0aGUgbmFtZSwgdGhlc2UgY2FwYWJpbGl0aWVzIGNhbiBiZSB1c2VkIGJ5IGRp
ZmZlcmVudCBmcm9udGVudHMKKyAqICh2aXJ0aW8tbmV0LCBwdG5ldCkgYW5kIHN1cHBvcnRlZCBi
eSBkaWZmZXJlbnQgYmFja2VuZHMgKG5ldG1hcCwgdGFwLCAuLi4pLgorICovCisjZGVmaW5lCVZJ
UlRJT19ORVRfRl9DU1VNCSgxIDw8ICAwKSAvKiBob3N0IGhhbmRsZXMgcGFydGlhbCBja3N1bSAq
LworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfQ1NVTQkoMSA8PCAgMSkgLyogZ3Vlc3QgaGFu
ZGxlcyBwYXJ0aWFsIGNrc3VtICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9NQUMJKDEgPDwgIDUp
IC8qIGhvc3Qgc3VwcGxpZXMgTUFDICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9HU09fREVQUkVD
CSgxIDw8ICA2KSAvKiBkZXByZWNhdGVkOiBob3N0IGhhbmRsZXMgR1NPICovCisjZGVmaW5lCVZJ
UlRJT19ORVRfRl9HVUVTVF9UU080CSgxIDw8ICA3KSAvKiBndWVzdCBjYW4gcmN2IFRTT3Y0ICov
CisjZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVTVF9UU082CSgxIDw8ICA4KSAvKiBndWVzdCBjYW4g
cmN2IFRTT3Y2ICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVTVF9FQ04JKDEgPDwgIDkpIC8q
IGd1ZXN0IGNhbiByY3YgVFNPIHdpdGggRUNOICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVT
VF9VRk8JKDEgPDwgMTApIC8qIGd1ZXN0IGNhbiByY3YgVUZPICovCisjZGVmaW5lCVZJUlRJT19O
RVRfRl9IT1NUX1RTTzQJKDEgPDwgMTEpIC8qIGhvc3QgY2FuIHJjdiBUU092NCAqLworI2RlZmlu
ZQlWSVJUSU9fTkVUX0ZfSE9TVF9UU082CSgxIDw8IDEyKSAvKiBob3N0IGNhbiByY3YgVFNPdjYg
Ki8KKyNkZWZpbmUJVklSVElPX05FVF9GX0hPU1RfRUNOCSgxIDw8IDEzKSAvKiBob3N0IGNhbiBy
Y3YgVFNPIHdpdGggRUNOICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9IT1NUX1VGTwkoMSA8PCAx
NCkgLyogaG9zdCBjYW4gcmN2IFVGTyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfTVJHX1JYQlVG
CSgxIDw8IDE1KSAvKiBob3N0IGNhbiBtZXJnZSBSWCBidWZmZXJzICovCisjZGVmaW5lCVZJUlRJ
T19ORVRfRl9TVEFUVVMJKDEgPDwgMTYpIC8qIGNvbmZpZyBzdGF0dXMgZmllbGQgYXZhaWxhYmxl
ICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9DVFJMX1ZRCSgxIDw8IDE3KSAvKiBjb250cm9sIGNo
YW5uZWwgYXZhaWxhYmxlICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9DVFJMX1JYCSgxIDw8IDE4
KSAvKiBjb250cm9sIGNoYW5uZWwgUlggbW9kZSBzdXBwb3J0ICovCisjZGVmaW5lCVZJUlRJT19O
RVRfRl9DVFJMX1ZMQU4JKDEgPDwgMTkpIC8qIGNvbnRyb2wgY2hhbm5lbCBWTEFOIGZpbHRlcmlu
ZyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfQU5OT1VOQ0UgXAorCQkJCSgxIDw8IDIx
KSAvKiBndWVzdCBjYW4gc2VuZCBncmF0dWl0b3VzIHBrdHMgKi8KKworLyoKKyAqIEZpeGVkIG5l
dHdvcmsgaGVhZGVyIHNpemUKKyAqLworc3RydWN0IHZpcnRpb19uZXRfcnhoZHIgeworCXVpbnQ4
X3QJCXZyaF9mbGFnczsKKwl1aW50OF90CQl2cmhfZ3NvX3R5cGU7CisJdWludDE2X3QJdnJoX2hk
cl9sZW47CisJdWludDE2X3QJdnJoX2dzb19zaXplOworCXVpbnQxNl90CXZyaF9jc3VtX3N0YXJ0
OworCXVpbnQxNl90CXZyaF9jc3VtX29mZnNldDsKKwl1aW50MTZfdAl2cmhfYnVmczsKK30gX19w
YWNrZWQ7CisKKy8qCisgKiBwdG5ldG1hcCBkZWZpbml0aW9ucworICovCitzdHJ1Y3QgcHRuZXRt
YXBfc3RhdGUgeworCXZvaWQJCSpuZXRtYXBfcHJpdjsKKworCS8qIFRydWUgaWYgcHRuZXRtYXAg
a3RocmVhZHMgYXJlIHJ1bm5pbmcuICovCisJaW50CQlydW5uaW5nOworCisJLyogRmVhdHVyZSBh
Y2tub3dlbGVkZ2VtZW50IHN1cHBvcnQuICovCisJdW5zaWduZWQgbG9uZwlmZWF0dXJlczsKKwl1
bnNpZ25lZCBsb25nCWFja2VkX2ZlYXR1cmVzOworCisJLyogSW5mbyBhYm91dCBuZXRtYXAgbWVt
b3J5LiAqLworCXVpbnQzMl90CW1lbXNpemU7CisJdm9pZAkJKm1lbTsKK307CisKKyNpZmRlZiBX
SVRIX05FVE1BUAorLyogVXNlZCB0byBnZXQgcmVhZC1vbmx5IGluZm8uICovCitzdHJ1Y3QgbmV0
bWFwX2lmX2luZm8geworCXVpbnQzMl90IG5pZnBfb2Zmc2V0OworCXVpbnQxNl90IG51bV90eF9y
aW5nczsKKwl1aW50MTZfdCBudW1fcnhfcmluZ3M7CisJdWludDE2X3QgbnVtX3R4X3Nsb3RzOwor
CXVpbnQxNl90IG51bV9yeF9zbG90czsKK307CisKK2ludCBwdG5fbWVtZGV2X2F0dGFjaCh2b2lk
ICptZW1fcHRyLCBzdHJ1Y3QgbmV0bWFwX3Bvb2xzX2luZm8gKik7CitpbnQgcHRuZXRtYXBfZ2V0
X25ldG1hcF9pZihzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0biwKKwkJCSAgIHN0cnVjdCBuZXRt
YXBfaWZfaW5mbyAqbmlmKTsKK3N0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqIGdldF9wdG5ldG1hcChz
dHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKTsKK3VpbnQzMl90IHB0bmV0bWFwX2Fja19mZWF0dXJlcyhz
dHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0biwKKwkJCSAgICAgICB1aW50MzJfdCB3YW50ZWRfZmVh
dHVyZXMpOworaW50IHB0bmV0bWFwX2dldF9ob3N0bWVtaWQoc3RydWN0IHB0bmV0bWFwX3N0YXRl
ICpwdG4pOworaW50IHB0bmV0bWFwX2NyZWF0ZShzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0biwg
c3RydWN0IHB0bmV0bWFwX2NmZyAqY2ZnKTsKK2ludCBwdG5ldG1hcF9kZWxldGUoc3RydWN0IHB0
bmV0bWFwX3N0YXRlICpwdG4pOworI2VuZGlmIC8qIFdJVEhfTkVUTUFQICovCisKKyNpbmNsdWRl
ICJwY2lfZW11bC5oIgoraW50IG5ldF9wYXJzZW1hYyhjaGFyICptYWNfc3RyLCB1aW50OF90ICpt
YWNfYWRkcik7Cit2b2lkIG5ldF9nZW5tYWMoc3RydWN0IHBjaV9kZXZpbnN0ICpwaSwgdWludDhf
dCAqbWFjYWRkcik7CisKKyNlbmRpZiAvKiBfX05FVF9CQUNLRU5EU19IX18gKi8KZGlmZiAtdSAt
ciAtTiB1c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF9iYWNrZW5kcy5oLm9yaWcgL3Vzci9zcmMv
dXNyLnNiaW4vYmh5dmUvbmV0X2JhY2tlbmRzLmgub3JpZwotLS0gdXNyL3NyYy91c3Iuc2Jpbi9i
aHl2ZS9uZXRfYmFja2VuZHMuaC5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICsw
MTAwCisrKyAvdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9uZXRfYmFja2VuZHMuaC5vcmlnCTIwMTYt
MTEtMzAgMTA6NTI6NTkuOTE3NDc3MDAwICswMDAwCkBAIC0wLDAgKzEsMjg4IEBACisvKi0KKyAq
IENvcHlyaWdodCAoYykgMjAxNCBWaW5jZW56byBNYWZmaW9uZSA8di5tYWZmaW9uZUBnbWFpbC5j
b20+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTYGBBUyBJUycnIEFO
RAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorICogT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAq
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFCisgKiBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAorICogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9fTkVUX0JBQ0tFTkRTX0hf
XworI2RlZmluZSBfX05FVF9CQUNLRU5EU19IX18KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisj
aWZkZWYgV0lUSF9ORVRNQVAKKyNpbmNsdWRlIDxuZXQvbmV0bWFwLmg+CisjaW5jbHVkZSA8bmV0
L25ldG1hcF92aXJ0Lmg+CisjZGVmaW5lIE5FVE1BUF9XSVRIX0xJQlMKKyNpbmNsdWRlIDxuZXQv
bmV0bWFwX3VzZXIuaD4KKyNpZiAoTkVUTUFQX0FQSSA8IDExKQorI2Vycm9yICJOZXRtYXAgQVBJ
IHZlcnNpb24gbXVzdCBiZSA+PSAxMSIKKyNlbmRpZgorI2VuZGlmIC8qIFdJVEhfTkVUTUFQICov
CisKKyNpbmNsdWRlICJtZXZlbnQuaCIKKworZXh0ZXJuIGludCBuZXRtYXBfaW9jdGxfY291bnRl
cjsKKwordHlwZWRlZiB2b2lkICgqbmV0X2JhY2tlbmRfY2JfdCkoaW50LCBlbnVtIGV2X3R5cGUs
IHZvaWQgKnBhcmFtKTsKKworLyogSW50ZXJmYWNlIGJldHdlZW4gdmlydGlvLW5ldCBhbmQgdGhl
IG5ldHdvcmsgYmFja2VuZC4gKi8KK3N0cnVjdCBuZXRfYmFja2VuZDsKKworc3RydWN0IG5ldF9i
YWNrZW5kICpuZXRiZV9pbml0KGNvbnN0IGNoYXIgKmRldm5hbWUsCisJCQluZXRfYmFja2VuZF9j
Yl90IGNiLCB2b2lkICpwYXJhbSk7Cit2b2lkCW5ldGJlX2NsZWFudXAoc3RydWN0IG5ldF9iYWNr
ZW5kICpiZSk7Cit1aW50NjRfdCBuZXRiZV9nZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUp
OworaW50CSBuZXRiZV9zZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHVpbnQ2NF90IGNh
cCwKKwkJCSAgICB1bnNpZ25lZCB2bmV0X2hkcl9sZW4pOwordm9pZAluZXRiZV9zZW5kKHN0cnVj
dCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92LAorCQkgICBpbnQgaW92Y250LCB1
aW50MzJfdCBsZW4sIGludCBtb3JlKTsKK2ludAluZXRiZV9yZWN2KHN0cnVjdCBuZXRfYmFja2Vu
ZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250KTsKK2ludAluZXRiZV9yeF9kaXNj
YXJkKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpOworCisKKy8qCisgKiBOZXR3b3JrIGRldmljZSBj
YXBhYmlsaXRpZXMgdGFrZW4gZnJvbSBWaXJ0SU8gc3RhbmRhcmQuCisgKiBEZXNwaXRlIHRoZSBu
YW1lLCB0aGVzZSBjYXBhYmlsaXRpZXMgY2FuIGJlIHVzZWQgYnkgZGlmZmVyZW50IGZyb250ZW50
cworICogKHZpcnRpby1uZXQsIHB0bmV0KSBhbmQgc3VwcG9ydGVkIGJ5IGRpZmZlcmVudCBiYWNr
ZW5kcyAobmV0bWFwLCB0YXAsIC4uLikuCisgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0NTVU0J
KDEgPDwgIDApIC8qIGhvc3QgaGFuZGxlcyBwYXJ0aWFsIGNrc3VtICovCisjZGVmaW5lCVZJUlRJ
T19ORVRfRl9HVUVTVF9DU1VNCSgxIDw8ICAxKSAvKiBndWVzdCBoYW5kbGVzIHBhcnRpYWwgY2tz
dW0gKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX01BQwkoMSA8PCAgNSkgLyogaG9zdCBzdXBwbGll
cyBNQUMgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0dTT19ERVBSRUMJKDEgPDwgIDYpIC8qIGRl
cHJlY2F0ZWQ6IGhvc3QgaGFuZGxlcyBHU08gKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0dVRVNU
X1RTTzQJKDEgPDwgIDcpIC8qIGd1ZXN0IGNhbiByY3YgVFNPdjQgKi8KKyNkZWZpbmUJVklSVElP
X05FVF9GX0dVRVNUX1RTTzYJKDEgPDwgIDgpIC8qIGd1ZXN0IGNhbiByY3YgVFNPdjYgKi8KKyNk
ZWZpbmUJVklSVElPX05FVF9GX0dVRVNUX0VDTgkoMSA8PCAgOSkgLyogZ3Vlc3QgY2FuIHJjdiBU
U08gd2l0aCBFQ04gKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0dVRVNUX1VGTwkoMSA8PCAxMCkg
LyogZ3Vlc3QgY2FuIHJjdiBVRk8gKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0hPU1RfVFNPNAko
MSA8PCAxMSkgLyogaG9zdCBjYW4gcmN2IFRTT3Y0ICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9I
T1NUX1RTTzYJKDEgPDwgMTIpIC8qIGhvc3QgY2FuIHJjdiBUU092NiAqLworI2RlZmluZQlWSVJU
SU9fTkVUX0ZfSE9TVF9FQ04JKDEgPDwgMTMpIC8qIGhvc3QgY2FuIHJjdiBUU08gd2l0aCBFQ04g
Ki8KKyNkZWZpbmUJVklSVElPX05FVF9GX0hPU1RfVUZPCSgxIDw8IDE0KSAvKiBob3N0IGNhbiBy
Y3YgVUZPICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9NUkdfUlhCVUYJKDEgPDwgMTUpIC8qIGhv
c3QgY2FuIG1lcmdlIFJYIGJ1ZmZlcnMgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX1NUQVRVUwko
MSA8PCAxNikgLyogY29uZmlnIHN0YXR1cyBmaWVsZCBhdmFpbGFibGUgKi8KKyNkZWZpbmUJVklS
VElPX05FVF9GX0NUUkxfVlEJKDEgPDwgMTcpIC8qIGNvbnRyb2wgY2hhbm5lbCBhdmFpbGFibGUg
Ki8KKyNkZWZpbmUJVklSVElPX05FVF9GX0NUUkxfUlgJKDEgPDwgMTgpIC8qIGNvbnRyb2wgY2hh
bm5lbCBSWCBtb2RlIHN1cHBvcnQgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0NUUkxfVkxBTgko
MSA8PCAxOSkgLyogY29udHJvbCBjaGFubmVsIFZMQU4gZmlsdGVyaW5nICovCisjZGVmaW5lCVZJ
UlRJT19ORVRfRl9HVUVTVF9BTk5PVU5DRSBcCisJCQkJKDEgPDwgMjEpIC8qIGd1ZXN0IGNhbiBz
ZW5kIGdyYXR1aXRvdXMgcGt0cyAqLworCisvKgorICogRml4ZWQgbmV0d29yayBoZWFkZXIgc2l6
ZQorICovCitzdHJ1Y3QgdmlydGlvX25ldF9yeGhkciB7CisJdWludDhfdAkJdnJoX2ZsYWdzOwor
CXVpbnQ4X3QJCXZyaF9nc29fdHlwZTsKKwl1aW50MTZfdAl2cmhfaGRyX2xlbjsKKwl1aW50MTZf
dAl2cmhfZ3NvX3NpemU7CisJdWludDE2X3QJdnJoX2NzdW1fc3RhcnQ7CisJdWludDE2X3QJdnJo
X2NzdW1fb2Zmc2V0OworCXVpbnQxNl90CXZyaF9idWZzOworfSBfX3BhY2tlZDsKKworLyoKKyAq
IHB0bmV0bWFwIGRlZmluaXRpb25zCisgKi8KK3N0cnVjdCBwdG5ldG1hcF9zdGF0ZSB7CisJdm9p
ZAkJKm5ldG1hcF9wcml2OworCisJLyogVHJ1ZSBpZiBwdG5ldG1hcCBrdGhyZWFkcyBhcmUgcnVu
bmluZy4gKi8KKwlpbnQJCXJ1bm5pbmc7CisKKwkvKiBGZWF0dXJlIGFja25vd2VsZWRnZW1lbnQg
c3VwcG9ydC4gKi8KKwl1bnNpZ25lZCBsb25nCWZlYXR1cmVzOworCXVuc2lnbmVkIGxvbmcJYWNr
ZWRfZmVhdHVyZXM7CisKKwkvKiBJbmZvIGFib3V0IG5ldG1hcCBtZW1vcnkuICovCisJdWludDMy
X3QJbWVtc2l6ZTsKKwl2b2lkCQkqbWVtOworfTsKKworI2lmZGVmIFdJVEhfTkVUTUFQCisvKiBV
c2VkIHRvIGdldCByZWFkLW9ubHkgaW5mby4gKi8KK3N0cnVjdCBuZXRtYXBfaWZfaW5mbyB7CisJ
dWludDMyX3QgbmlmcF9vZmZzZXQ7CisJdWludDE2X3QgbnVtX3R4X3JpbmdzOworCXVpbnQxNl90
IG51bV9yeF9yaW5nczsKKwl1aW50MTZfdCBudW1fdHhfc2xvdHM7CisJdWludDE2X3QgbnVtX3J4
X3Nsb3RzOworfTsKKworaW50IHB0bl9tZW1kZXZfYXR0YWNoKHZvaWQgKm1lbV9wdHIsIHN0cnVj
dCBuZXRtYXBfcG9vbHNfaW5mbyAqKTsKK2ludCBwdG5ldG1hcF9nZXRfbmV0bWFwX2lmKHN0cnVj
dCBwdG5ldG1hcF9zdGF0ZSAqcHRuLAorCQkJICAgc3RydWN0IG5ldG1hcF9pZl9pbmZvICpuaWYp
Oworc3RydWN0IHB0bmV0bWFwX3N0YXRlICogZ2V0X3B0bmV0bWFwKHN0cnVjdCBuZXRfYmFja2Vu
ZCAqYmUpOwordWludDMyX3QgcHRuZXRtYXBfYWNrX2ZlYXR1cmVzKHN0cnVjdCBwdG5ldG1hcF9z
dGF0ZSAqcHRuLAorCQkJICAgICAgIHVpbnQzMl90IHdhbnRlZF9mZWF0dXJlcyk7CitpbnQgcHRu
ZXRtYXBfZ2V0X2hvc3RtZW1pZChzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0bik7CitpbnQgcHRu
ZXRtYXBfY3JlYXRlKHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuLCBzdHJ1Y3QgcHRuZXRtYXBf
Y2ZnICpjZmcpOworaW50IHB0bmV0bWFwX2RlbGV0ZShzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0
bik7CisjZW5kaWYgLyogV0lUSF9ORVRNQVAgKi8KKworI2luY2x1ZGUgInBjaV9lbXVsLmgiCitp
bnQgbmV0X3BhcnNlbWFjKGNoYXIgKm1hY19zdHIsIHVpbnQ4X3QgKm1hY19hZGRyKTsKK3ZvaWQg
bmV0X2dlbm1hYyhzdHJ1Y3QgcGNpX2Rldmluc3QgKnBpLCB1aW50OF90ICptYWNhZGRyKTsKKwor
I2VuZGlmIC8qIF9fTkVUX0JBQ0tFTkRTX0hfXyAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTQgVmluY2Vuem8gTWFmZmlvbmUgPHYubWFmZmlvbmVAZ21haWwuY29tPgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SU2BgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICog
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwKKyAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBfX05FVF9CQUNLRU5EU19IX18KKyNkZWZpbmUgX19ORVRf
QkFDS0VORFNfSF9fCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIFdJVEhfTkVUTUFQ
CisjaW5jbHVkZSA8bmV0L25ldG1hcC5oPgorI2luY2x1ZGUgPG5ldC9uZXRtYXBfdmlydC5oPgor
I2RlZmluZSBORVRNQVBfV0lUSF9MSUJTCisjaW5jbHVkZSA8bmV0L25ldG1hcF91c2VyLmg+Cisj
aWYgKE5FVE1BUF9BUEkgPCAxMSkKKyNlcnJvciAiTmV0bWFwIEFQSSB2ZXJzaW9uIG11c3QgYmUg
Pj0gMTEiCisjZW5kaWYKKyNlbmRpZiAvKiBXSVRIX05FVE1BUCAqLworCisjaW5jbHVkZSAibWV2
ZW50LmgiCisKK2V4dGVybiBpbnQgbmV0bWFwX2lvY3RsX2NvdW50ZXI7CisKK3R5cGVkZWYgdm9p
ZCAoKm5ldF9iYWNrZW5kX2NiX3QpKGludCwgZW51bSBldl90eXBlLCB2b2lkICpwYXJhbSk7CisK
Ky8qIEludGVyZmFjZSBiZXR3ZWVuIHZpcnRpby1uZXQgYW5kIHRoZSBuZXR3b3JrIGJhY2tlbmQu
ICovCitzdHJ1Y3QgbmV0X2JhY2tlbmQ7CisKK3N0cnVjdCBuZXRfYmFja2VuZCAqbmV0YmVfaW5p
dChjb25zdCBjaGFyICpkZXZuYW1lLAorCQkJbmV0X2JhY2tlbmRfY2JfdCBjYiwgdm9pZCAqcGFy
YW0pOwordm9pZAluZXRiZV9jbGVhbnVwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpOwordWludDY0
X3QgbmV0YmVfZ2V0X2NhcChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKTsKK2ludAkgbmV0YmVfc2V0
X2NhcChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCB1aW50NjRfdCBjYXAsCisJCQkgICAgdW5zaWdu
ZWQgdm5ldF9oZHJfbGVuKTsKK3ZvaWQJbmV0YmVfc2VuZChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJl
LCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJICAgaW50IGlvdmNudCwgdWludDMyX3QgbGVuLCBpbnQg
bW9yZSk7CitpbnQJbmV0YmVfcmVjdihzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92
ZWMgKmlvdiwgaW50IGlvdmNudCk7CitpbnQJbmV0YmVfcnhfZGlzY2FyZChzdHJ1Y3QgbmV0X2Jh
Y2tlbmQgKmJlKTsKKworCisvKgorICogTmV0d29yayBkZXZpY2UgY2FwYWJpbGl0aWVzIHRha2Vu
IGZyb20gVmlydElPIHN0YW5kYXJkLgorICogRGVzcGl0ZSB0aGUgbmFtZSwgdGhlc2UgY2FwYWJp
bGl0aWVzIGNhbiBiZSB1c2VkIGJ5IGRpZmZlcmVudCBmcm9udGVudHMKKyAqICh2aXJ0aW8tbmV0
LCBwdG5ldCkgYW5kIHN1cHBvcnRlZCBieSBkaWZmZXJlbnQgYmFja2VuZHMgKG5ldG1hcCwgdGFw
LCAuLi4pLgorICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9DU1VNCSgxIDw8ICAwKSAvKiBob3N0
IGhhbmRsZXMgcGFydGlhbCBja3N1bSAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfQ1NV
TQkoMSA8PCAgMSkgLyogZ3Vlc3QgaGFuZGxlcyBwYXJ0aWFsIGNrc3VtICovCisjZGVmaW5lCVZJ
UlRJT19ORVRfRl9NQUMJKDEgPDwgIDUpIC8qIGhvc3Qgc3VwcGxpZXMgTUFDICovCisjZGVmaW5l
CVZJUlRJT19ORVRfRl9HU09fREVQUkVDCSgxIDw8ICA2KSAvKiBkZXByZWNhdGVkOiBob3N0IGhh
bmRsZXMgR1NPICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVTVF9UU080CSgxIDw8ICA3KSAv
KiBndWVzdCBjYW4gcmN2IFRTT3Y0ICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVTVF9UU082
CSgxIDw8ICA4KSAvKiBndWVzdCBjYW4gcmN2IFRTT3Y2ICovCisjZGVmaW5lCVZJUlRJT19ORVRf
Rl9HVUVTVF9FQ04JKDEgPDwgIDkpIC8qIGd1ZXN0IGNhbiByY3YgVFNPIHdpdGggRUNOICovCisj
ZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVTVF9VRk8JKDEgPDwgMTApIC8qIGd1ZXN0IGNhbiByY3Yg
VUZPICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9IT1NUX1RTTzQJKDEgPDwgMTEpIC8qIGhvc3Qg
Y2FuIHJjdiBUU092NCAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfSE9TVF9UU082CSgxIDw8IDEy
KSAvKiBob3N0IGNhbiByY3YgVFNPdjYgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0hPU1RfRUNO
CSgxIDw8IDEzKSAvKiBob3N0IGNhbiByY3YgVFNPIHdpdGggRUNOICovCisjZGVmaW5lCVZJUlRJ
T19ORVRfRl9IT1NUX1VGTwkoMSA8PCAxNCkgLyogaG9zdCBjYW4gcmN2IFVGTyAqLworI2RlZmlu
ZQlWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGCSgxIDw8IDE1KSAvKiBob3N0IGNhbiBtZXJnZSBSWCBi
dWZmZXJzICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9TVEFUVVMJKDEgPDwgMTYpIC8qIGNvbmZp
ZyBzdGF0dXMgZmllbGQgYXZhaWxhYmxlICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9DVFJMX1ZR
CSgxIDw8IDE3KSAvKiBjb250cm9sIGNoYW5uZWwgYXZhaWxhYmxlICovCisjZGVmaW5lCVZJUlRJ
T19ORVRfRl9DVFJMX1JYCSgxIDw8IDE4KSAvKiBjb250cm9sIGNoYW5uZWwgUlggbW9kZSBzdXBw
b3J0ICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9DVFJMX1ZMQU4JKDEgPDwgMTkpIC8qIGNvbnRy
b2wgY2hhbm5lbCBWTEFOIGZpbHRlcmluZyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1Rf
QU5OT1VOQ0UgXAorCQkJCSgxIDw8IDIxKSAvKiBndWVzdCBjYW4gc2VuZCBncmF0dWl0b3VzIHBr
dHMgKi8KKworLyoKKyAqIEZpeGVkIG5ldHdvcmsgaGVhZGVyIHNpemUKKyAqLworc3RydWN0IHZp
cnRpb19uZXRfcnhoZHIgeworCXVpbnQ4X3QJCXZyaF9mbGFnczsKKwl1aW50OF90CQl2cmhfZ3Nv
X3R5cGU7CisJdWludDE2X3QJdnJoX2hkcl9sZW47CisJdWludDE2X3QJdnJoX2dzb19zaXplOwor
CXVpbnQxNl90CXZyaF9jc3VtX3N0YXJ0OworCXVpbnQxNl90CXZyaF9jc3VtX29mZnNldDsKKwl1
aW50MTZfdAl2cmhfYnVmczsKK30gX19wYWNrZWQ7CisKKy8qCisgKiBwdG5ldG1hcCBkZWZpbml0
aW9ucworICovCitzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgeworCXZvaWQJCSpuZXRtYXBfcHJpdjsK
KworCS8qIFRydWUgaWYgcHRuZXRtYXAga3RocmVhZHMgYXJlIHJ1bm5pbmcuICovCisJaW50CQly
dW5uaW5nOworCisJLyogRmVhdHVyZSBhY2tub3dlbGVkZ2VtZW50IHN1cHBvcnQuICovCisJdW5z
aWduZWQgbG9uZwlmZWF0dXJlczsKKwl1bnNpZ25lZCBsb25nCWFja2VkX2ZlYXR1cmVzOworCisJ
LyogSW5mbyBhYm91dCBuZXRtYXAgbWVtb3J5LiAqLworCXVpbnQzMl90CW1lbXNpemU7CisJdm9p
ZAkJKm1lbTsKK307CisKKyNpZmRlZiBXSVRIX05FVE1BUAorLyogVXNlZCB0byBnZXQgcmVhZC1v
bmx5IGluZm8uICovCitzdHJ1Y3QgbmV0bWFwX2lmX2luZm8geworCXVpbnQzMl90IG5pZnBfb2Zm
c2V0OworCXVpbnQxNl90IG51bV90eF9yaW5nczsKKwl1aW50MTZfdCBudW1fcnhfcmluZ3M7CisJ
dWludDE2X3QgbnVtX3R4X3Nsb3RzOworCXVpbnQxNl90IG51bV9yeF9zbG90czsKK307CisKK2lu
dCBwdG5fbWVtZGV2X2F0dGFjaCh2b2lkICptZW1fcHRyLCBzdHJ1Y3QgbmV0bWFwX3Bvb2xzX2lu
Zm8gKik7CitpbnQgcHRuZXRtYXBfZ2V0X25ldG1hcF9pZihzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUg
KnB0biwKKwkJCSAgIHN0cnVjdCBuZXRtYXBfaWZfaW5mbyAqbmlmKTsKK3N0cnVjdCBwdG5ldG1h
cF9zdGF0ZSAqIGdldF9wdG5ldG1hcChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKTsKK3VpbnQzMl90
IHB0bmV0bWFwX2Fja19mZWF0dXJlcyhzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0biwKKwkJCSAg
ICAgICB1aW50MzJfdCB3YW50ZWRfZmVhdHVyZXMpOworaW50IHB0bmV0bWFwX2dldF9ob3N0bWVt
aWQoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG4pOworaW50IHB0bmV0bWFwX2NyZWF0ZShzdHJ1
Y3QgcHRuZXRtYXBfc3RhdGUgKnB0biwgc3RydWN0IHB0bmV0bWFwX2NmZyAqY2ZnKTsKK2ludCBw
dG5ldG1hcF9kZWxldGUoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG4pOworI2VuZGlmIC8qIFdJ
VEhfTkVUTUFQICovCisKKyNpbmNsdWRlICJwY2lfZW11bC5oIgoraW50IG5ldF9wYXJzZW1hYyhj
aGFyICptYWNfc3RyLCB1aW50OF90ICptYWNfYWRkcik7Cit2b2lkIG5ldF9nZW5tYWMoc3RydWN0
IHBjaV9kZXZpbnN0ICpwaSwgdWludDhfdCAqbWFjYWRkcik7CisKKyNlbmRpZiAvKiBfX05FVF9C
QUNLRU5EU19IX18gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF91
dGlscy5jIC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF91dGlscy5jCi0tLSB1c3Ivc3JjL3Vz
ci5zYmluL2JoeXZlL25ldF91dGlscy5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICsw
MTAwCisrKyAvdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9uZXRfdXRpbHMuYwkyMDE2LTEyLTAxIDEz
OjE4OjUxLjcxOTAzNjAwMCArMDAwMApAQCAtMCwwICsxLDg2IEBACisvKi0KKyAqIENvcHlyaWdo
dCAoYykgMjAxMSBOZXRBcHAsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05U
UklCVVRPUlNgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IK
KyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsCisgKiBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVk
ZSAibmV0X3V0aWxzLmgiCisjaW5jbHVkZSAiYmh5dmVydW4uaCIKKyNpbmNsdWRlIDxtZDUuaD4K
KyNpbmNsdWRlIDxuZXQvZXRoZXJuZXQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRl
IDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKy8qCisgKiBTb21lIHV0aWxzIGZ1bmN0
aW9ucywgdXNlZCBieSBuZXQgZnJvbnQtZW5kcy4gT3JpZ2luYWxseSwgdGhleSB3ZXJlCisgKiBp
biBwY2lfdmlydGlvX25ldC5jLgorICovCisKK2ludAorbmV0X3BhcnNlbWFjKGNoYXIgKm1hY19z
dHIsIHVpbnQ4X3QgKm1hY19hZGRyKQoreworICAgICAgICBzdHJ1Y3QgZXRoZXJfYWRkciAqZWE7
CisgICAgICAgIGNoYXIgKnRtcHN0cjsKKyAgICAgICAgY2hhciB6ZXJvX2FkZHJbRVRIRVJfQURE
Ul9MRU5dID0geyAwLCAwLCAwLCAwLCAwLCAwIH07CisKKyAgICAgICAgdG1wc3RyID0gc3Ryc2Vw
KCZtYWNfc3RyLCI9Iik7CisKKyAgICAgICAgaWYgKChtYWNfc3RyICE9IE5VTEwpICYmICghc3Ry
Y21wKHRtcHN0ciwibWFjIikpKSB7CisgICAgICAgICAgICAgICAgZWEgPSBldGhlcl9hdG9uKG1h
Y19zdHIpOworCisgICAgICAgICAgICAgICAgaWYgKGVhID09IE5VTEwgfHwgRVRIRVJfSVNfTVVM
VElDQVNUKGVhLT5vY3RldCkgfHwKKyAgICAgICAgICAgICAgICAgICAgbWVtY21wKGVhLT5vY3Rl
dCwgemVyb19hZGRyLCBFVEhFUl9BRERSX0xFTikgPT0gMCkgeworCQkJZnByaW50ZihzdGRlcnIs
ICJJbnZhbGlkIE1BQyAlc1xuIiwgbWFjX3N0cik7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gKEVJTlZBTCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICBtZW1jcHkobWFjX2FkZHIsIGVhLT5vY3RldCwgRVRIRVJfQUREUl9MRU4pOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuICgwKTsKK30KKwordm9pZAorbmV0X2dlbm1hYyhzdHJ1
Y3QgcGNpX2Rldmluc3QgKnBpLCB1aW50OF90ICptYWNhZGRyKQoreworCS8qCisJICogVGhlIGRl
ZmF1bHQgTUFDIGFkZHJlc3MgaXMgdGhlIHN0YW5kYXJkIE5ldEFwcCBPVUkgb2YgMDAtYTAtOTgs
CisJICogZm9sbG93ZWQgYnkgYW4gTUQ1IG9mIHRoZSBQQ0kgc2xvdC9mdW5jIG51bWJlciBhbmQg
ZGV2IG5hbWUKKwkgKi8KKwlNRDVfQ1RYIG1kY3R4OworCXVuc2lnbmVkIGNoYXIgZGlnZXN0WzE2
XTsKKwljaGFyIG5zdHJbODBdOworCisJc25wcmludGYobnN0ciwgc2l6ZW9mKG5zdHIpLCAiJWQt
JWQtJXMiLCBwaS0+cGlfc2xvdCwKKwkgICAgcGktPnBpX2Z1bmMsIHZtbmFtZSk7CisKKwlNRDVJ
bml0KCZtZGN0eCk7CisJTUQ1VXBkYXRlKCZtZGN0eCwgbnN0ciwgKHVuc2lnbmVkIGludClzdHJs
ZW4obnN0cikpOworCU1ENUZpbmFsKGRpZ2VzdCwgJm1kY3R4KTsKKworCW1hY2FkZHJbMF0gPSAw
eDAwOworCW1hY2FkZHJbMV0gPSAweGEwOworCW1hY2FkZHJbMl0gPSAweDk4OworCW1hY2FkZHJb
M10gPSBkaWdlc3RbMF07CisJbWFjYWRkcls0XSA9IGRpZ2VzdFsxXTsKKwltYWNhZGRyWzVdID0g
ZGlnZXN0WzJdOworfQpkaWZmIC11IC1yIC1OIHVzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X3V0
aWxzLmMub3JpZyAvdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9uZXRfdXRpbHMuYy5vcmlnCi0tLSB1
c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF91dGlscy5jLm9yaWcJMTk3MC0wMS0wMSAwMTowMDow
MC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF91dGlscy5j
Lm9yaWcJMjAxNi0xMS0zMCAxMDo1Mjo1OS45MjEwMDkwMDAgKzAwMDAKQEAgLTAsMCArMSwxNzIg
QEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDExIE5ldEFwcCwgSW5jLgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SU2BgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICog
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwKKyAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKyNpbmNsdWRlICJuZXRfdXRpbHMuaCIKKyNpbmNsdWRlICJiaHl2ZXJ1bi5o
IgorI2luY2x1ZGUgPG1kNS5oPgorI2luY2x1ZGUgPG5ldC9ldGhlcm5ldC5oPgorI2luY2x1ZGUg
PHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworLyoK
KyAqIFNvbWUgdXRpbHMgZnVuY3Rpb25zLCB1c2VkIGJ5IG5ldCBmcm9udC1lbmRzLiBPcmlnaW5h
bGx5LCB0aGV5IHdlcmUKKyAqIGluIHBjaV92aXJ0aW9fbmV0LmMuCisgKi8KKworaW50CituZXRf
cGFyc2VtYWMoY2hhciAqbWFjX3N0ciwgdWludDhfdCAqbWFjX2FkZHIpCit7CisgICAgICAgIHN0
cnVjdCBldGhlcl9hZGRyICplYTsKKyAgICAgICAgY2hhciAqdG1wc3RyOworICAgICAgICBjaGFy
IHplcm9fYWRkcltFVEhFUl9BRERSX0xFTl0gPSB7IDAsIDAsIDAsIDAsIDAsIDAgfTsKKworICAg
ICAgICB0bXBzdHIgPSBzdHJzZXAoJm1hY19zdHIsIj0iKTsKKworICAgICAgICBpZiAoKG1hY19z
dHIgIT0gTlVMTCkgJiYgKCFzdHJjbXAodG1wc3RyLCJtYWMiKSkpIHsKKyAgICAgICAgICAgICAg
ICBlYSA9IGV0aGVyX2F0b24obWFjX3N0cik7CisKKyAgICAgICAgICAgICAgICBpZiAoZWEgPT0g
TlVMTCB8fCBFVEhFUl9JU19NVUxUSUNBU1QoZWEtPm9jdGV0KSB8fAorICAgICAgICAgICAgICAg
ICAgICBtZW1jbXAoZWEtPm9jdGV0LCB6ZXJvX2FkZHIsIEVUSEVSX0FERFJfTEVOKSA9PSAwKSB7
CisJCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgTUFDICVzXG4iLCBtYWNfc3RyKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAoRUlOVkFMKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShtYWNfYWRkciwgZWEtPm9jdGV0LCBF
VEhFUl9BRERSX0xFTik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKDApOworfQorCit2
b2lkCituZXRfZ2VubWFjKHN0cnVjdCBwY2lfZGV2aW5zdCAqcGksIHVpbnQ4X3QgKm1hY2FkZHIp
Cit7CisJLyoKKwkgKiBUaGUgZGVmYXVsdCBNQUMgYWRkcmVzcyBpcyB0aGUgc3RhbmRhcmQgTmV0
QXBwIE9VSSBvZiAwMC1hMC05OCwKKwkgKiBmb2xsb3dlZCBieSBhbiBNRDUgb2YgdGhlIFBDSSBz
bG90L2Z1bmMgbnVtYmVyIGFuZCBkZXYgbmFtZQorCSAqLworCU1ENV9DVFggbWRjdHg7CisJdW5z
aWduZWQgY2hhciBkaWdlc3RbMTZdOworCWNoYXIgbnN0cls4MF07CisKKwlzbnByaW50Zihuc3Ry
LCBzaXplb2YobnN0ciksICIlZC0lZC0lcyIsIHBpLT5waV9zbG90LAorCSAgICBwaS0+cGlfZnVu
Yywgdm1uYW1lKTsKKworCU1ENUluaXQoJm1kY3R4KTsKKwlNRDVVcGRhdGUoJm1kY3R4LCBuc3Ry
LCAodW5zaWduZWQgaW50KXN0cmxlbihuc3RyKSk7CisJTUQ1RmluYWwoZGlnZXN0LCAmbWRjdHgp
OworCisJbWFjYWRkclswXSA9IDB4MDA7CisJbWFjYWRkclsxXSA9IDB4YTA7CisJbWFjYWRkclsy
XSA9IDB4OTg7CisJbWFjYWRkclszXSA9IGRpZ2VzdFswXTsKKwltYWNhZGRyWzRdID0gZGlnZXN0
WzFdOworCW1hY2FkZHJbNV0gPSBkaWdlc3RbMl07Cit9CisvKi0KKyAqIENvcHlyaWdodCAoYykg
MjAxMSBOZXRBcHAsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRP
UlNgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsCisgKiBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAibmV0
X3V0aWxzLmgiCisjaW5jbHVkZSAiYmh5dmVydW4uaCIKKyNpbmNsdWRlIDxtZDUuaD4KKyNpbmNs
dWRlIDxuZXQvZXRoZXJuZXQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRp
by5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKy8qCisgKiBTb21lIHV0aWxzIGZ1bmN0aW9ucywg
dXNlZCBieSBuZXQgZnJvbnQtZW5kcy4gT3JpZ2luYWxseSwgdGhleSB3ZXJlCisgKiBpbiBwY2lf
dmlydGlvX25ldC5jLgorICovCisKK2ludAorbmV0X3BhcnNlbWFjKGNoYXIgKm1hY19zdHIsIHVp
bnQ4X3QgKm1hY19hZGRyKQoreworICAgICAgICBzdHJ1Y3QgZXRoZXJfYWRkciAqZWE7CisgICAg
ICAgIGNoYXIgKnRtcHN0cjsKKyAgICAgICAgY2hhciB6ZXJvX2FkZHJbRVRIRVJfQUREUl9MRU5d
ID0geyAwLCAwLCAwLCAwLCAwLCAwIH07CisKKyAgICAgICAgdG1wc3RyID0gc3Ryc2VwKCZtYWNf
c3RyLCI9Iik7CisKKyAgICAgICAgaWYgKChtYWNfc3RyICE9IE5VTEwpICYmICghc3RyY21wKHRt
cHN0ciwibWFjIikpKSB7CisgICAgICAgICAgICAgICAgZWEgPSBldGhlcl9hdG9uKG1hY19zdHIp
OworCisgICAgICAgICAgICAgICAgaWYgKGVhID09IE5VTEwgfHwgRVRIRVJfSVNfTVVMVElDQVNU
KGVhLT5vY3RldCkgfHwKKyAgICAgICAgICAgICAgICAgICAgbWVtY21wKGVhLT5vY3RldCwgemVy
b19hZGRyLCBFVEhFUl9BRERSX0xFTikgPT0gMCkgeworCQkJZnByaW50ZihzdGRlcnIsICJJbnZh
bGlkIE1BQyAlc1xuIiwgbWFjX3N0cik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
KEVJTlZBTCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICBtZW1jcHkobWFjX2FkZHIsIGVhLT5vY3RldCwgRVRIRVJfQUREUl9MRU4pOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuICgwKTsKK30KKwordm9pZAorbmV0X2dlbm1hYyhzdHJ1Y3QgcGNp
X2Rldmluc3QgKnBpLCB1aW50OF90ICptYWNhZGRyKQoreworCS8qCisJICogVGhlIGRlZmF1bHQg
TUFDIGFkZHJlc3MgaXMgdGhlIHN0YW5kYXJkIE5ldEFwcCBPVUkgb2YgMDAtYTAtOTgsCisJICog
Zm9sbG93ZWQgYnkgYW4gTUQ1IG9mIHRoZSBQQ0kgc2xvdC9mdW5jIG51bWJlciBhbmQgZGV2IG5h
bWUKKwkgKi8KKwlNRDVfQ1RYIG1kY3R4OworCXVuc2lnbmVkIGNoYXIgZGlnZXN0WzE2XTsKKwlj
aGFyIG5zdHJbODBdOworCisJc25wcmludGYobnN0ciwgc2l6ZW9mKG5zdHIpLCAiJWQtJWQtJXMi
LCBwaS0+cGlfc2xvdCwKKwkgICAgcGktPnBpX2Z1bmMsIHZtbmFtZSk7CisKKwlNRDVJbml0KCZt
ZGN0eCk7CisJTUQ1VXBkYXRlKCZtZGN0eCwgbnN0ciwgKHVuc2lnbmVkIGludClzdHJsZW4obnN0
cikpOworCU1ENUZpbmFsKGRpZ2VzdCwgJm1kY3R4KTsKKworCW1hY2FkZHJbMF0gPSAweDAwOwor
CW1hY2FkZHJbMV0gPSAweGEwOworCW1hY2FkZHJbMl0gPSAweDk4OworCW1hY2FkZHJbM10gPSBk
aWdlc3RbMF07CisJbWFjYWRkcls0XSA9IGRpZ2VzdFsxXTsKKwltYWNhZGRyWzVdID0gZGlnZXN0
WzJdOworfQpkaWZmIC11IC1yIC1OIHVzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X3V0aWxzLmgg
L3Vzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X3V0aWxzLmgKLS0tIHVzci9zcmMvdXNyLnNiaW4v
Ymh5dmUvbmV0X3V0aWxzLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysr
IC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF91dGlscy5oCTIwMTYtMTEtMzAgMTA6NTY6MDUu
ODQ3NzIyMDAwICswMDAwCkBAIC0wLDAgKzEsMTAyIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykg
MjAxMSBOZXRBcHAsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRP
UlNgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsCisgKiBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9ORVRf
VVRJTFNfSF8KKyNkZWZpbmUgX05FVF9VVElMU19IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+Cisj
aW5jbHVkZSAicGNpX2VtdWwuaCIKKwordm9pZAluZXRfZ2VubWFjKHN0cnVjdCBwY2lfZGV2aW5z
dCAqcGksIHVpbnQ4X3QgKm1hY2FkZHIpOworaW50CW5ldF9wYXJzZW1hYyhjaGFyICptYWNfc3Ry
LCB1aW50OF90ICptYWNfYWRkcik7CisjZW5kaWYgLyogX05FVF9VVElMU19IXyAqLworLyotCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTEgTmV0QXBwLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP
UiBBTkQgQ09OVFJJQlVUT1JTYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB
VVRIT1IgT1IgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorICog
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgKiBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAor
ICogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworI2lmbmRlZiBfTkVUX1VUSUxTX0hfCisjZGVmaW5lIF9ORVRfVVRJTFNfSF8KKworI2luY2x1
ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgInBjaV9lbXVsLmgiCisKK3ZvaWQJbmV0X2dlbm1hYyhz
dHJ1Y3QgcGNpX2Rldmluc3QgKnBpLCB1aW50OF90ICptYWNhZGRyKTsKK2ludAluZXRfcGFyc2Vt
YWMoY2hhciAqbWFjX3N0ciwgdWludDhfdCAqbWFjX2FkZHIpOworI2VuZGlmIC8qIF9ORVRfVVRJ
TFNfSF8gKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDExIE5ldEFwcCwgSW5jLgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SU2BgQVMgSVMnJyBBTkQKKyAqIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICog
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwKKyAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX05FVF9VVElMU19IXworI2RlZmluZSBfTkVUX1VU
SUxTX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJwY2lfZW11bC5oIgorCit2
b2lkCW5ldF9nZW5tYWMoc3RydWN0IHBjaV9kZXZpbnN0ICpwaSwgdWludDhfdCAqbWFjYWRkcik7
CitpbnQJbmV0X3BhcnNlbWFjKGNoYXIgKm1hY19zdHIsIHVpbnQ4X3QgKm1hY19hZGRyKTsKKyNl
bmRpZiAvKiBfTkVUX1VUSUxTX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy91c3Iuc2Jpbi9i
aHl2ZS9uZXRfdXRpbHMuaC5vcmlnIC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF91dGlscy5o
Lm9yaWcKLS0tIHVzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X3V0aWxzLmgub3JpZwkxOTcwLTAx
LTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvdXNyLnNiaW4vYmh5dmUv
bmV0X3V0aWxzLmgub3JpZwkyMDE2LTExLTMwIDEwOjUyOjU5LjkyMzAzMTAwMCArMDAwMApAQCAt
MCwwICsxLDY4IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBOZXRBcHAsIEluYy4KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlNgYEFTIElTJycgQU5ECisgKiBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwK
KyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsCisgKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9ORVRfVVRJTFNfSF8KKyNkZWZpbmUgX05F
VF9VVElMU19IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAicGNpX2VtdWwuaCIK
Kwordm9pZAluZXRfZ2VubWFjKHN0cnVjdCBwY2lfZGV2aW5zdCAqcGksIHVpbnQ4X3QgKm1hY2Fk
ZHIpOworaW50CW5ldF9wYXJzZW1hYyhjaGFyICptYWNfc3RyLCB1aW50OF90ICptYWNfYWRkcik7
CisjZW5kaWYgLyogX05FVF9VVElMU19IXyAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEg
TmV0QXBwLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTYGBB
UyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorICogT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFCisgKiBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAorICogRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfTkVUX1VUSUxT
X0hfCisjZGVmaW5lIF9ORVRfVVRJTFNfSF8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1
ZGUgInBjaV9lbXVsLmgiCisKK3ZvaWQJbmV0X2dlbm1hYyhzdHJ1Y3QgcGNpX2Rldmluc3QgKnBp
LCB1aW50OF90ICptYWNhZGRyKTsKK2ludAluZXRfcGFyc2VtYWMoY2hhciAqbWFjX3N0ciwgdWlu
dDhfdCAqbWFjX2FkZHIpOworI2VuZGlmIC8qIF9ORVRfVVRJTFNfSF8gKi8KZGlmZiAtdSAtciAt
TiB1c3Ivc3JjL3Vzci5zYmluL2JoeXZlL3BjaV9wdG5ldG1hcF9tZW1kZXYuYyAvdXNyL3NyYy91
c3Iuc2Jpbi9iaHl2ZS9wY2lfcHRuZXRtYXBfbWVtZGV2LmMKLS0tIHVzci9zcmMvdXNyLnNiaW4v
Ymh5dmUvcGNpX3B0bmV0bWFwX21lbWRldi5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw
ICswMTAwCisrKyAvdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9wY2lfcHRuZXRtYXBfbWVtZGV2LmMJ
MjAxNi0xMS0zMCAxMDo1NjoxMC40NDQwODUwMDAgKzAwMDAKQEAgLTAsMCArMSwzNDEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgU3RlZmFubyBHYXJ6YXJlbGxhIChzdGVmYW5vLmdhcnph
cmVsbGFAZ21haWwuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmZGVmIFdJVEhfTkVUTUFQCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIk
RnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNp
bmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG5ldC9p
Zi5oPgkvKiBJRk5BTVNJWiAqLworI2luY2x1ZGUgPG5ldC9uZXRtYXAuaD4KKyNpbmNsdWRlIDxu
ZXQvbmV0bWFwX3ZpcnQuaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvdm1tLmg+CisjaW5jbHVkZSA8
dm1tYXBpLmg+CisKKyNpbmNsdWRlICJiaHl2ZXJ1bi5oIgorI2luY2x1ZGUgInBjaV9lbXVsLmgi
CisKKy8qCisgKiBwdG5ldG1hcCBtZW1kZXYgUENJIGRldmljZQorICoKKyAqIFRoaXMgZGV2aWNl
IGlzIHVzZWQgdG8gbWFwIGEgbmV0bWFwIG1lbW9yeSBhbGxvY2F0b3Igb24gdGhlIGd1ZXN0IFZN
CisgKiB0aHJvdWdoIFBDSV9CQVIuIFRoZSBzYW1lIGFsbG9jYXRvciBjYW4gYmUgc2hhcmVkIGJl
dHdlZW4gbXVsdGlwbGUgcHRuZXRtYXAKKyAqIHBvcnRzIGluIHRoZSBndWVzdC4KKyAqCisgKiBF
YWNoIG5ldG1hcCBhbGxvY2F0b3IgaGFzIGEgdW5pcXVlIElEIGFzc2lnbmVkIGJ5IHRoZSBuZXRt
YXAgaG9zdCBtb2R1bGUuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIGhlcmUgaXMgYmFzZWQg
b24gdGhlIFFFTVUvS1ZNIG9uZS4KKyAqLworc3RydWN0IHB0bl9tZW1kZXZfc29mdGMgeworCXN0
cnVjdCBwY2lfZGV2aW5zdCAqcGk7CQkvKiBQQ0kgZGV2aWNlIGluc3RhbmNlICovCisKKwl2b2lk
ICptZW1fcHRyOwkJCS8qIG5ldG1hcCBzaGFyZWQgbWVtb3J5ICovCisJc3RydWN0IG5ldG1hcF9w
b29sc19pbmZvIGluZm87CisKKwlUQUlMUV9FTlRSWShwdG5fbWVtZGV2X3NvZnRjKSBuZXh0Owor
fTsKK3N0YXRpYyBUQUlMUV9IRUFEKCwgcHRuX21lbWRldl9zb2Z0YykgcHRuX21lbWRldnMgPSBU
QUlMUV9IRUFEX0lOSVRJQUxJWkVSKHB0bl9tZW1kZXZzKTsKKworLyoKKyAqIHB0bl9tZW1kZXZf
c29mdGMgY2FuIGJlIGNyZWF0ZWQgYnkgcGVfaW5pdCBvciBwdG5ldG1hcCBiYWNrZW5kLAorICog
dGhpcyBkZXBlbmRzIG9uIHRoZSBvcmRlciBvZiBpbml0aWFsaXphdGlvbi4KKyAqLworc3RhdGlj
IHN0cnVjdCBwdG5fbWVtZGV2X3NvZnRjICoKK3B0bl9tZW1kZXZfY3JlYXRlKCkKK3sKKwlzdHJ1
Y3QgcHRuX21lbWRldl9zb2Z0YyAqc2M7CisKKwlzYyA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0
IHB0bl9tZW1kZXZfc29mdGMpKTsKKwlpZiAoc2MgIT0gTlVMTCkgeworCQlUQUlMUV9JTlNFUlRf
VEFJTCgmcHRuX21lbWRldnMsIHNjLCBuZXh0KTsKKwl9CisKKwlyZXR1cm4gc2M7Cit9CisKK3N0
YXRpYyB2b2lkCitwdG5fbWVtZGV2X2RlbGV0ZShzdHJ1Y3QgcHRuX21lbWRldl9zb2Z0YyAqc2Mp
Cit7CisJVEFJTFFfUkVNT1ZFKCZwdG5fbWVtZGV2cywgc2MsIG5leHQpOworCisJZnJlZShzYyk7
Cit9CisKKy8qCisgKiBGaW5kIHB0bl9tZW1kZXYgdGhyb3VnaCBtZW1pZCAobmV0bWFwIG1lbW9y
eSBhbGxvY2F0b3IgSUQpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHRuX21lbWRldl9zb2Z0YyAqCitw
dG5fbWVtZGV2X2ZpbmRfbWVtaWQodWludDMyX3QgbWVtX2lkKQoreworCXN0cnVjdCBwdG5fbWVt
ZGV2X3NvZnRjICpzYzsKKworCVRBSUxRX0ZPUkVBQ0goc2MsICZwdG5fbWVtZGV2cywgbmV4dCkg
eworCQlpZiAoc2MtPm1lbV9wdHIgIT0gTlVMTCAmJiBtZW1faWQgPT0gc2MtPmluZm8ubWVtaWQp
IHsKKwkJCXJldHVybiBzYzsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICog
RmluZCBwdG5fbWVtZGV2IHRoYXQgaGFzIG5vdCBuZXRtYXAgbWVtb3J5IChhdHRhY2hlZCBieSBw
dG5ldG1hcCBiYWNrZW5kKQorICovCitzdGF0aWMgc3RydWN0IHB0bl9tZW1kZXZfc29mdGMgKgor
cHRuX21lbWRldl9maW5kX2VtcHR5X21lbSgpCit7CisJc3RydWN0IHB0bl9tZW1kZXZfc29mdGMg
KnNjOworCisJVEFJTFFfRk9SRUFDSChzYywgJnB0bl9tZW1kZXZzLCBuZXh0KSB7CisJCWlmIChz
Yy0+bWVtX3B0ciA9PSBOVUxMKSB7CisJCQlyZXR1cm4gc2M7CisJCX0KKwl9CisKKwlyZXR1cm4g
TlVMTDsKK30KKworLyoKKyAqIEZpbmQgcHRuX21lbWRldiB0aGF0IGhhcyBub3QgUENJIGRldmlj
ZSBpc3RhbmNlIChjcmVhdGVkIGJ5IHBlX2luaXQpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHRuX21l
bWRldl9zb2Z0YyAqCitwdG5fbWVtZGV2X2ZpbmRfZW1wdHlfcGkoKQoreworCXN0cnVjdCBwdG5f
bWVtZGV2X3NvZnRjICpzYzsKKworCVRBSUxRX0ZPUkVBQ0goc2MsICZwdG5fbWVtZGV2cywgbmV4
dCkgeworCQlpZiAoc2MtPnBpID09IE5VTEwpIHsKKwkJCXJldHVybiBzYzsKKwkJfQorCX0KKwor
CXJldHVybiBOVUxMOworfQorCisvKgorICogSGFuZGxlIHJlYWQgb24gcHRuZXRtYXAtbWVtZGV2
IHJlZ2lzdGVyCisgKi8KK3N0YXRpYyB1aW50NjRfdAorcHRuX3BjaV9yZWFkKHN0cnVjdCB2bWN0
eCAqY3R4LCBpbnQgdmNwdSwgc3RydWN0IHBjaV9kZXZpbnN0ICpwaSwKKwkgICAgIGludCBiYXJp
ZHgsIHVpbnQ2NF90IG9mZnNldCwgaW50IHNpemUpCit7CisJc3RydWN0IHB0bl9tZW1kZXZfc29m
dGMgKnNjID0gcGktPnBpX2FyZzsKKworCWlmIChzYyA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwor
CWlmIChiYXJpZHggPT0gUFRORVRNQVBfSU9fUENJX0JBUikgeworCQlzd2l0Y2ggKG9mZnNldCkg
eworCQljYXNlIFBUTkVUX01ERVZfSU9fTUVNU0laRV9MTzoKKwkJCXJldHVybiBzYy0+aW5mby5t
ZW1zaXplICYgMHhmZmZmZmZmZjsKKwkJY2FzZSBQVE5FVF9NREVWX0lPX01FTVNJWkVfSEk6CisJ
CQlyZXR1cm4gc2MtPmluZm8ubWVtc2l6ZSA+PiAzMjsKKwkJY2FzZSBQVE5FVF9NREVWX0lPX01F
TUlEOgorCQkJcmV0dXJuIHNjLT5pbmZvLm1lbWlkOworCQljYXNlIFBUTkVUX01ERVZfSU9fSUZf
UE9PTF9PRlM6CisJCQlyZXR1cm4gc2MtPmluZm8uaWZfcG9vbF9vZmZzZXQ7CisJCWNhc2UgUFRO
RVRfTURFVl9JT19JRl9QT09MX09CSk5VTToKKwkJCXJldHVybiBzYy0+aW5mby5pZl9wb29sX29i
anRvdGFsOworCQljYXNlIFBUTkVUX01ERVZfSU9fSUZfUE9PTF9PQkpTWjoKKwkJCXJldHVybiBz
Yy0+aW5mby5pZl9wb29sX29ianNpemU7CisJCWNhc2UgUFRORVRfTURFVl9JT19SSU5HX1BPT0xf
T0ZTOgorCQkJcmV0dXJuIHNjLT5pbmZvLnJpbmdfcG9vbF9vZmZzZXQ7CisJCWNhc2UgUFRORVRf
TURFVl9JT19SSU5HX1BPT0xfT0JKTlVNOgorCQkJcmV0dXJuIHNjLT5pbmZvLnJpbmdfcG9vbF9v
Ymp0b3RhbDsKKwkJY2FzZSBQVE5FVF9NREVWX0lPX1JJTkdfUE9PTF9PQkpTWjoKKwkJCXJldHVy
biBzYy0+aW5mby5yaW5nX3Bvb2xfb2Jqc2l6ZTsKKwkJY2FzZSBQVE5FVF9NREVWX0lPX0JVRl9Q
T09MX09GUzoKKwkJCXJldHVybiBzYy0+aW5mby5idWZfcG9vbF9vZmZzZXQ7CisJCWNhc2UgUFRO
RVRfTURFVl9JT19CVUZfUE9PTF9PQkpOVU06CisJCQlyZXR1cm4gc2MtPmluZm8uYnVmX3Bvb2xf
b2JqdG90YWw7CisJCWNhc2UgUFRORVRfTURFVl9JT19CVUZfUE9PTF9PQkpTWjoKKwkJCXJldHVy
biBzYy0+aW5mby5idWZfcG9vbF9vYmpzaXplOworCQl9CisJfQorCisJcHJpbnRmKCIlczogVW5l
eHBlY3RlZCByZWdpc3RlciByZWFkIFtiYXIgJXUsIG9mZnNldCAlbHggc2l6ZSAlZF1cbiIsCisJ
CV9fZnVuY19fLCBiYXJpZHgsIG9mZnNldCwgc2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoK
KyAqIEhhbmRsZSB3cml0ZSBvbiBwdG5ldG1hcC1tZW1kZXYgcmVnaXN0ZXIgKHVudXNlZCBmb3Ig
bm93KQorICovCitzdGF0aWMgdm9pZAorcHRuX3BjaV93cml0ZShzdHJ1Y3Qgdm1jdHggKmN0eCwg
aW50IHZjcHUsIHN0cnVjdCBwY2lfZGV2aW5zdCAqcGksCisJICAgICAgaW50IGJhcmlkeCwgdWlu
dDY0X3Qgb2Zmc2V0LCBpbnQgc2l6ZSwgdWludDY0X3QgdmFsdWUpCit7CisJc3RydWN0IHB0bl9t
ZW1kZXZfc29mdGMgKnNjID0gcGktPnBpX2FyZzsKKworCWlmIChzYyA9PSBOVUxMKQorCQlyZXR1
cm47CisKKwlwcmludGYoIiVzOiBVbmV4cGVjdGVkIHJlZ2lzdGVyIHdyaXRlIFtiYXIgJXUsIG9m
ZnNldCAlbHggc2l6ZSAlZCAiCisJICAgICAgICJ2YWx1ZSAlbHhdXG4iLCBfX2Z1bmNfXywgYmFy
aWR4LCBvZmZzZXQsIHNpemUsIHZhbHVlKTsKK30KKworLyoKKyAqIENvbmZpZ3VyZSB0aGUgcHRu
ZXRtYXAtbWVtZGV2IFBDSSBCQVJzLiBQQ0kgQkFScyBjYW4gb25seSBiZSBjcmVhdGVkCisgKiB3
aGVuIHRoZSBQQ0kgZGV2aWNlIGlzIGNyZWF0ZWQgYW5kIHRoZSBuZXRtYXAgbWVtb3J5IGlzIGF0
dGFjaGVkLgorICovCitzdGF0aWMgaW50CitwdG5fbWVtZGV2X2NvbmZpZ3VyZV9iYXJzKHN0cnVj
dCBwdG5fbWVtZGV2X3NvZnRjICpzYykKK3sKKwlpbnQgcmV0OworCisJaWYgKHNjLT5waSA9PSBO
VUxMIHx8IHNjLT5tZW1fcHRyID09IE5VTEwpCisJCXJldHVybiAwOworCisJLyogQWxsb2NhdGUg
YSBCQVIgZm9yIGFuIEkvTyByZWdpb24uICovCisJcmV0ID0gcGNpX2VtdWxfYWxsb2NfYmFyKHNj
LT5waSwgUFRORVRNQVBfSU9fUENJX0JBUiwgUENJQkFSX0lPLAorCQkJCSBQVE5FVF9NREVWX0lP
X0VORCk7CisJaWYgKHJldCkgeworCQlwcmludGYoInB0bmV0bWFwX21lbWRldjogaW9iYXIgYWxs
b2NhdGlvbiBlcnJvciAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBBbGxv
Y2F0ZSBhIEJBUiBmb3IgYSBtZW1vcnkgcmVnaW9uLiAqLworCXJldCA9IHBjaV9lbXVsX2FsbG9j
X2JhcihzYy0+cGksIFBUTkVUTUFQX01FTV9QQ0lfQkFSLCBQQ0lCQVJfTUVNMzIsCisJCQlzYy0+
aW5mby5tZW1zaXplKTsKKwlpZiAocmV0KSB7CisJCXByaW50ZigicHRuZXRtYXBfbWVtZGV2OiBt
ZW1iYXIgYWxsb2NhdGlvbiBlcnJvciAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisK
KwkvKiBNYXAgbmV0bWFwIG1lbW9yeSBvbiB0aGUgbWVtb3J5IEJBUi4gKi8KKwlyZXQgPSB2bV9t
YXBfdXNlcl9idWYoc2MtPnBpLT5waV92bWN0eCwKKwkJCSAgICAgIHNjLT5waS0+cGlfYmFyW1BU
TkVUTUFQX01FTV9QQ0lfQkFSXS5hZGRyLAorCQkJICAgICAgc2MtPmluZm8ubWVtc2l6ZSwgc2Mt
Pm1lbV9wdHIpOworCWlmIChyZXQpIHsKKwkJcHJpbnRmKCJwdG5ldG1hcF9tZW1kZXY6IG1lbWJh
ciBtYXAgZXJyb3IgJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7
Cit9CisKKy8qCisgKiBQQ0kgZGV2aWNlIGluaXRpYWxpemF0aW9uCisgKi8KK3N0YXRpYyBpbnQK
K3B0bl9tZW1kZXZfaW5pdChzdHJ1Y3Qgdm1jdHggKmN0eCwgc3RydWN0IHBjaV9kZXZpbnN0ICpw
aSwgY2hhciAqb3B0cykKK3sKKwlzdHJ1Y3QgcHRuX21lbWRldl9zb2Z0YyAqc2M7CisJaW50IHJl
dDsKKworCXNjID0gcHRuX21lbWRldl9maW5kX2VtcHR5X3BpKCk7CisJaWYgKHNjID09IE5VTEwp
IHsKKwkJc2MgPSBwdG5fbWVtZGV2X2NyZWF0ZSgpOworCQlpZiAoc2MgPT0gTlVMTCkgeworCQkJ
cHJpbnRmKCJwdG5ldG1hcF9tZW1kZXY6IGNhbGxvYyBlcnJvclxuIik7CisJCQlyZXR1cm4gKEVO
T01FTSk7CisJCX0KKwl9CisKKwkvKiBMaW5rIG91ciBzb2Z0YyBpbiB0aGUgcGNpX2Rldmluc3Qu
ICovCisJcGktPnBpX2FyZyA9IHNjOworCXNjLT5waSA9IHBpOworCisJLyogSW5pdGlhbGl6ZSBQ
Q0kgY29uZmlndXJhdGlvbiBzcGFjZS4gKi8KKwlwY2lfc2V0X2NmZ2RhdGExNihwaSwgUENJUl9W
RU5ET1IsIFBUTkVUTUFQX1BDSV9WRU5ET1JfSUQpOworCXBjaV9zZXRfY2ZnZGF0YTE2KHBpLCBQ
Q0lSX0RFVklDRSwgUFRORVRNQVBfUENJX0RFVklDRV9JRCk7CisJcGNpX3NldF9jZmdkYXRhOChw
aSwgUENJUl9DTEFTUywgUENJQ19ORVRXT1JLKTsKKwlwY2lfc2V0X2NmZ2RhdGExNihwaSwgUENJ
Ul9TVUJERVZfMCwgMSk7CisJcGNpX3NldF9jZmdkYXRhMTYocGksIFBDSVJfU1VCVkVORF8wLCBQ
VE5FVE1BUF9QQ0lfVkVORE9SX0lEKTsKKworCS8qIENvbmZpZ3VyZSBQQ0ktQkFScy4gKi8KKwly
ZXQgPSBwdG5fbWVtZGV2X2NvbmZpZ3VyZV9iYXJzKHNjKTsKKwlpZiAocmV0KSB7CisJCXByaW50
ZigicHRuZXRtYXBfbWVtZGV2OiBjb25maWd1cmUgZXJyb3JcbiIpOworCQlnb3RvIGVycjsKKwl9
CisKKwlyZXR1cm4gMDsKK2VycjoKKwlwdG5fbWVtZGV2X2RlbGV0ZShzYyk7CisJcGktPnBpX2Fy
ZyA9IE5VTEw7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHVzZWQgYnkgcHRuZXRtYXAgYmFj
a2VuZCB0byBhdHRhY2ggdGhlIG5ldG1hcCBtZW1vcnkgYWxsb2NhdG9yIHRvIHRoZQorICogcHRu
ZXRtYXAtbWVtZGV2LiAoc2hhcmVkIHdpdGggdGhlIGd1ZXN0IFZNIHRocm91Z2ggUENJLUJBUikK
KyAqLworaW50CitwdG5fbWVtZGV2X2F0dGFjaCh2b2lkICptZW1fcHRyLCBzdHJ1Y3QgbmV0bWFw
X3Bvb2xzX2luZm8gKmluZm8pCit7CisJc3RydWN0IHB0bl9tZW1kZXZfc29mdGMgKnNjOworCWlu
dCByZXQ7CisKKwkvKiBpZiBhIGRldmljZSB3aXRoIHRoZSBzYW1lIG1lbV9pZCBpcyBhbHJlYWR5
IGF0dGFjaGVkLCB3ZSBhcmUgZG9uZSAqLworCWlmIChwdG5fbWVtZGV2X2ZpbmRfbWVtaWQoaW5m
by0+bWVtaWQpKSB7CisJCXByaW50ZigicHRuZXRtYXBfbWVtZGV2OiBhbHJlYWR5IGF0dGNoZWRc
biIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzYyA9IHB0bl9tZW1kZXZfZmluZF9lbXB0eV9tZW0o
KTsKKwlpZiAoc2MgPT0gTlVMTCkgeworCQlzYyA9IHB0bl9tZW1kZXZfY3JlYXRlKCk7CisJCWlm
IChzYyA9PSBOVUxMKSB7CisJCQlwcmludGYoInB0bmV0bWFwX21lbWRldjogY2FsbG9jIGVycm9y
XG4iKTsKKwkJCXJldHVybiAoRU5PTUVNKTsKKwkJfQorCX0KKworCXNjLT5tZW1fcHRyID0gbWVt
X3B0cjsKKwlzYy0+aW5mbyA9ICppbmZvOworCisJLyogY29uZmlndXJlIGRldmljZSBQQ0ktQkFS
cyAqLworCXJldCA9IHB0bl9tZW1kZXZfY29uZmlndXJlX2JhcnMoc2MpOworCWlmIChyZXQpIHsK
KwkJcHJpbnRmKCJwdG5ldG1hcF9tZW1kZXY6IGNvbmZpZ3VyZSBlcnJvclxuIik7CisJCWdvdG8g
ZXJyOworCX0KKworCisJcmV0dXJuIDA7CitlcnI6CisJcHRuX21lbWRldl9kZWxldGUoc2MpOwor
CXNjLT5waS0+cGlfYXJnID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgcGNpX2Rl
dmVtdSBwY2lfZGVfcHRuZXRtYXAgPSB7CisJLnBlX2VtdSA9IAlQVE5FVE1BUF9NRU1ERVZfTkFN
RSwKKwkucGVfaW5pdCA9CXB0bl9tZW1kZXZfaW5pdCwKKwkucGVfYmFyd3JpdGUgPQlwdG5fcGNp
X3dyaXRlLAorCS5wZV9iYXJyZWFkID0JcHRuX3BjaV9yZWFkCit9OworUENJX0VNVUxfU0VUKHBj
aV9kZV9wdG5ldG1hcCk7CisKKyNlbmRpZiAvKiBXSVRIX05FVE1BUCAqLwpkaWZmIC11IC1yIC1O
IHVzci9zcmMvdXNyLnNiaW4vYmh5dmUvcGNpX3B0bmV0bWFwX25ldGlmLmMgL3Vzci9zcmMvdXNy
LnNiaW4vYmh5dmUvcGNpX3B0bmV0bWFwX25ldGlmLmMKLS0tIHVzci9zcmMvdXNyLnNiaW4vYmh5
dmUvcGNpX3B0bmV0bWFwX25ldGlmLmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx
MDAKKysrIC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL3BjaV9wdG5ldG1hcF9uZXRpZi5jCTIwMTYt
MTEtMzAgMTA6NTY6MTAuNDU1ODI0MDAwICswMDAwCkBAIC0wLDAgKzEsNDExIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IFZpbmNlbnpvIE1hZmZpb25lCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT
VUNIIERBTUFHRS4KKyAqLworCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBlbXVsYXRp
b24gb2YgdGhlIHB0bmV0IG5ldHdvcmsgZnJvbnRlbmQsIHRvIGJlIHVzZWQKKyAqIHdpdGggbmV0
bWFwIGJhY2tlbmQuCisgKi8KKworI2lmZGVmIFdJVEhfTkVUTUFQCisKKyNpbmNsdWRlIDxzeXMv
Y2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGVycm5vLmg+Cisj
aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQu
aD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPG5ldC9pZi5oPgkvKiBJRk5BTVNJ
WiAqLworI2luY2x1ZGUgPG5ldC9uZXRtYXAuaD4KKyNpbmNsdWRlIDxuZXQvbmV0bWFwX3ZpcnQu
aD4KKworI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2lu
Y2x1ZGUgPHN5cy9fY3B1c2V0Lmg+CisjaW5jbHVkZSA8bWFjaGluZS92bW0uaD4KKyNpbmNsdWRl
IDxtYWNoaW5lL3ZtbV9kZXYuaD4JLyogVk1fTEFQSUNfTVNJICovCisjaW5jbHVkZSA8dm1tYXBp
Lmg+CisKKyNpbmNsdWRlICJiaHl2ZXJ1bi5oIgorI2luY2x1ZGUgInBjaV9lbXVsLmgiCisjaW5j
bHVkZSAibmV0X3V0aWxzLmgiCisjaW5jbHVkZSAibmV0X2JhY2tlbmRzLmgiCisKKyNpZm5kZWYg
UFRORVRfQ1NCX0FMTE9DCisjZXJyb3IgIkh5cGVydmlzb3ItYWxsb2NhdGVkIENTQiBub3Qgc3Vw
cG9ydGVkIgorI2VuZGlmCisKKworc3RydWN0IHB0bmV0X3NvZnRjIHsKKwlzdHJ1Y3QgcGNpX2Rl
dmluc3QJKnBpOworCisJc3RydWN0IG5ldF9iYWNrZW5kCSpiZTsKKwlzdHJ1Y3QgcHRuZXRtYXBf
c3RhdGUJKnB0YmU7CisKKwl1bnNpZ25lZCBpbnQJCW51bV9yaW5nczsKKwl1aW50MzJfdAkJaW9y
ZWdzW1BUTkVUX0lPX0VORCA+PiAyXTsKKwl2b2lkCQkJKmNzYjsKK307CisKK3N0YXRpYyBpbnQK
K3B0bmV0X2dldF9uZXRtYXBfaWYoc3RydWN0IHB0bmV0X3NvZnRjICpzYykKK3sKKwl1bnNpZ25l
ZCBpbnQgbnVtX3JpbmdzOworCXN0cnVjdCBuZXRtYXBfaWZfaW5mbyBuaWY7CisJaW50IHJldDsK
KworCXJldCA9IHB0bmV0bWFwX2dldF9uZXRtYXBfaWYoc2MtPnB0YmUsICZuaWYpOworCWlmIChy
ZXQpIHsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlzYy0+aW9yZWdzW1BUTkVUX0lPX05JRlBfT0ZT
ID4+IDJdID0gbmlmLm5pZnBfb2Zmc2V0OworCXNjLT5pb3JlZ3NbUFRORVRfSU9fTlVNX1RYX1JJ
TkdTID4+IDJdID0gbmlmLm51bV90eF9yaW5nczsKKwlzYy0+aW9yZWdzW1BUTkVUX0lPX05VTV9S
WF9SSU5HUyA+PiAyXSA9IG5pZi5udW1fcnhfcmluZ3M7CisJc2MtPmlvcmVnc1tQVE5FVF9JT19O
VU1fVFhfU0xPVFMgPj4gMl0gPSBuaWYubnVtX3R4X3Nsb3RzOworCXNjLT5pb3JlZ3NbUFRORVRf
SU9fTlVNX1JYX1NMT1RTID4+IDJdID0gbmlmLm51bV9yeF9zbG90czsKKworCW51bV9yaW5ncyA9
IHNjLT5pb3JlZ3NbUFRORVRfSU9fTlVNX1RYX1JJTkdTID4+IDJdICsKKwkJICAgIHNjLT5pb3Jl
Z3NbUFRORVRfSU9fTlVNX1JYX1JJTkdTID4+IDJdOworCWlmIChzYy0+bnVtX3JpbmdzICYmIG51
bV9yaW5ncyAmJiBzYy0+bnVtX3JpbmdzICE9IG51bV9yaW5ncykgeworCQlmcHJpbnRmKHN0ZGVy
ciwgIk51bWJlciBvZiByaW5ncyBjaGFuZ2VkOiBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJu
IEVJTlZBTDsKKwl9CisJc2MtPm51bV9yaW5ncyA9IG51bV9yaW5nczsKKworCXJldHVybiAwOwor
fQorCitzdGF0aWMgaW50CitwdG5ldF9wdGN0bF9jcmVhdGUoc3RydWN0IHB0bmV0X3NvZnRjICpz
YykKK3sKKwlzdHJ1Y3QgcHRuZXRtYXBfY2ZnZW50cnlfYmh5dmUgKmNmZ2VudHJ5OworCXN0cnVj
dCBwY2lfZGV2aW5zdCAqcGkgPSBzYy0+cGk7CisJc3RydWN0IHZtY3R4ICp2bWN0eCA9IHBpLT5w
aV92bWN0eDsKKwlzdHJ1Y3QgcHRuZXRtYXBfY2ZnICpjZmc7CisJdW5zaWduZWQgaW50IGtpY2tf
YWRkcjsKKwlpbnQgcmV0OworCWludCBpOworCisJaWYgKHNjLT5jc2IgPT0gTlVMTCkgeworCQlm
cHJpbnRmKHN0ZGVyciwgIiVzOiBVbmV4cGVjdGVkIE5VTEwgQ1NCIiwgX19mdW5jX18pOworCQly
ZXR1cm4gLTE7CisJfQorCisJY2ZnID0gY2FsbG9jKDEsIHNpemVvZigqY2ZnKSArIHNjLT5udW1f
cmluZ3MgKiBzaXplb2YoKmNmZ2VudHJ5KSk7CisKKwljZmctPmNmZ3R5cGUgPSBQVE5FVE1BUF9D
RkdUWVBFX0JIWVZFOworCWNmZy0+ZW50cnlfc2l6ZSA9IHNpemVvZigqY2ZnZW50cnkpOworCWNm
Zy0+bnVtX3JpbmdzID0gc2MtPm51bV9yaW5nczsKKwljZmctPnB0cmluZ3MgPSBzYy0+Y3NiOwor
CisJa2lja19hZGRyID0gcGktPnBpX2JhcltQVE5FVE1BUF9JT19QQ0lfQkFSXS5hZGRyICsgUFRO
RVRfSU9fS0lDS19CQVNFOworCWNmZ2VudHJ5ID0gKHN0cnVjdCBwdG5ldG1hcF9jZmdlbnRyeV9i
aHl2ZSAqKShjZmcgKyAxKTsKKworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3JpbmdzOyBpKyss
IGtpY2tfYWRkciArPSA0LCBjZmdlbnRyeSsrKSB7CisJCXN0cnVjdCBtc2l4X3RhYmxlX2VudHJ5
ICptdGU7CisJCXVpbnQ2NF90IGNvb2tpZSA9IHNjLT5pb3JlZ3NbUFRORVRfSU9fTUFDX0xPID4+
IDJdICsgNCppOworCisJCWNmZ2VudHJ5LT5pb2N0bF9mZCA9IHZtX2dldF9mZCh2bWN0eCk7CisJ
CWNmZ2VudHJ5LT5pb2N0bF9jbWQgPSBWTV9MQVBJQ19NU0k7CisJCW10ZSA9ICZwaS0+cGlfbXNp
eC50YWJsZVtpXTsKKwkJY2ZnZW50cnktPmlvY3RsX2RhdGEuYWRkciA9IG10ZS0+YWRkcjsKKwkJ
Y2ZnZW50cnktPmlvY3RsX2RhdGEubXNnX2RhdGEgPSBtdGUtPm1zZ19kYXRhOworCisJCWZwcmlu
dGYoc3RkZXJyLCAiJXM6IHZlY3RvciAldSwgYWRkciAlbHUsIGRhdGEgJXUsICIKKwkJCQkia2lj
a19hZGRyICV1LCBjb29raWU6ICVwXG4iLAorCQkJX19mdW5jX18sIGksIG10ZS0+YWRkciwgbXRl
LT5tc2dfZGF0YSwga2lja19hZGRyLAorCQkJKHZvaWQqKWNvb2tpZSk7CisKKwkJcmV0ID0gdm1f
aW9fcmVnX2hhbmRsZXIodm1jdHgsIGtpY2tfYWRkciAvKiBpb2FkZHIgKi8sCisJCQkJCTAgLyog
aW4gKi8sIDAgLyogbWFza19kYXRhICovLAorCQkJCQkwIC8qIGRhdGEgKi8sIFZNX0lPX1JFR0hf
S1dFVkVOVFMsCisJCQkJCSh2b2lkKiljb29raWUgLyogY29va2llICovKTsKKwkJaWYgKHJldCkg
eworCQkJZnByaW50ZihzdGRlcnIsICIlczogdm1faW9fcmVnX2hhbmRsZXIgJWRcbiIsCisJCQkJ
X19mdW5jX18sIHJldCk7CisJCX0KKwkJY2ZnZW50cnktPndjaGFuID0gKHVpbnQ2NF90KSBjb29r
aWU7CisJfQorCisJcmV0ID0gcHRuZXRtYXBfY3JlYXRlKHNjLT5wdGJlLCBjZmcpOworCWZyZWUo
Y2ZnKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0X3B0Y3RsX2RlbGV0
ZShzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjKQoreworCXN0cnVjdCBwY2lfZGV2aW5zdCAqcGkgPSBz
Yy0+cGk7CisJc3RydWN0IHZtY3R4ICp2bWN0eCA9IHBpLT5waV92bWN0eDsKKwl1bnNpZ25lZCBp
bnQga2lja19hZGRyOworCWludCBpOworCisJa2lja19hZGRyID0gcGktPnBpX2JhcltQVE5FVE1B
UF9JT19QQ0lfQkFSXS5hZGRyICsgUFRORVRfSU9fS0lDS19CQVNFOworCisJZm9yIChpID0gMDsg
aSA8IHNjLT5udW1fcmluZ3M7IGkrKywga2lja19hZGRyICs9IDQpIHsKKwkJdm1faW9fcmVnX2hh
bmRsZXIodm1jdHgsIGtpY2tfYWRkciwgMCwgMCwgMCwKKwkJCQkgIFZNX0lPX1JFR0hfREVMRVRF
LCAwKTsKKwl9CisKKwlyZXR1cm4gcHRuZXRtYXBfZGVsZXRlKHNjLT5wdGJlKTsKK30KKworc3Rh
dGljIHZvaWQKK3B0bmV0X3B0Y3RsKHN0cnVjdCBwdG5ldF9zb2Z0YyAqc2MsIHVpbnQ2NF90IGNt
ZCkKK3sKKwlpbnQgcmV0ID0gRUlOVkFMOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFBUTkVU
TUFQX1BUQ1RMX0NSRUFURToKKwkJLyogUmVhY3QgdG8gYSBSRUdJRiBpbiB0aGUgZ3Vlc3QuICov
CisJCXJldCA9IHB0bmV0X3B0Y3RsX2NyZWF0ZShzYyk7CisJCWJyZWFrOworCisJY2FzZSBQVE5F
VE1BUF9QVENUTF9ERUxFVEU6CisJCS8qIFJlYWN0IHRvIGFuIFVOUkVHSUYgaW4gdGhlIGd1ZXN0
LiAqLworCQlyZXQgPSBwdG5ldF9wdGN0bF9kZWxldGUoc2MpOworCQlicmVhazsKKwl9CisKKwlz
Yy0+aW9yZWdzW1BUTkVUX0lPX1BUQ1RMID4+IDJdID0gcmV0OworfQorCitzdGF0aWMgdm9pZAor
cHRuZXRfY3NiX21hcHBpbmcoc3RydWN0IHB0bmV0X3NvZnRjICpzYykKK3sKKwl1aW50NjRfdCBi
YXNlID0gKCh1aW50NjRfdClzYy0+aW9yZWdzW1BUTkVUX0lPX0NTQkJBSCA+PiAyXSA8PCAzMikg
fAorCQkJc2MtPmlvcmVnc1tQVE5FVF9JT19DU0JCQUwgPj4gMl07CisJdWludDY0X3QgbGVuID0g
NDA5NjsKKworCXNjLT5jc2IgPSBOVUxMOworCWlmIChiYXNlKSB7CisJCXNjLT5jc2IgPSBwYWRk
cl9ndWVzdDJob3N0KHNjLT5waS0+cGlfdm1jdHgsIGJhc2UsIGxlbik7CisJfQorfQorCitzdGF0
aWMgdm9pZAorcHRuZXRfYmFyX3dyaXRlKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgc3Ry
dWN0IHBjaV9kZXZpbnN0ICpwaSwKKwkgICAgICBpbnQgYmFyaWR4LCB1aW50NjRfdCBvZmZzZXQs
IGludCBzaXplLCB1aW50NjRfdCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjID0g
cGktPnBpX2FyZzsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisKKwkvKiBSZWRpcmVjdCB0byBNU0kt
WCBlbXVsYXRpb24gY29kZS4gKi8KKwlpZiAoYmFyaWR4ID09IHBjaV9tc2l4X3RhYmxlX2Jhcihw
aSkgfHwKKwkJCWJhcmlkeCA9PSBwY2lfbXNpeF9wYmFfYmFyKHBpKSkgeworCQlwY2lfZW11bF9t
c2l4X3R3cml0ZShwaSwgb2Zmc2V0LCBzaXplLCB2YWx1ZSk7CisJCXJldHVybjsKKwl9CisKKwlp
ZiAoc2MgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJb2Zmc2V0ICY9IFBUTkVUX0lPX01BU0s7CisJ
aW5kZXggPSBvZmZzZXQgPj4gMjsKKworCWlmIChiYXJpZHggIT0gUFRORVRNQVBfSU9fUENJX0JB
UiB8fCBvZmZzZXQgPj0gUFRORVRfSU9fRU5EKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6IFVu
ZXhwZWN0ZWQgcmVnaXN0ZXIgd3JpdGUgW2JhciAldSwgIgorCQkJIm9mZnNldCAlbHggc2l6ZSAl
ZCB2YWx1ZSAlbHhdXG4iLCBfX2Z1bmNfXywgYmFyaWR4LAorCQkJb2Zmc2V0LCBzaXplLCB2YWx1
ZSk7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKG9mZnNldCkgeworCWNhc2UgUFRORVRfSU9f
UFRGRUFUOgorCQl2YWx1ZSA9IHB0bmV0bWFwX2Fja19mZWF0dXJlcyhzYy0+cHRiZSwgdmFsdWUp
OworCQlzYy0+aW9yZWdzW2luZGV4XSA9IHZhbHVlOworCQlicmVhazsKKworCWNhc2UgUFRORVRf
SU9fUFRDVEw6CisJCXB0bmV0X3B0Y3RsKHNjLCB2YWx1ZSk7CisJCWJyZWFrOworCisJY2FzZSBQ
VE5FVF9JT19DU0JCQUg6CisJCXNjLT5pb3JlZ3NbaW5kZXhdID0gdmFsdWU7CisJCWJyZWFrOwor
CisJY2FzZSBQVE5FVF9JT19DU0JCQUw6CisJCXNjLT5pb3JlZ3NbaW5kZXhdID0gdmFsdWU7CisJ
CXB0bmV0X2NzYl9tYXBwaW5nKHNjKTsKKwkJYnJlYWs7CisKKwljYXNlIFBUTkVUX0lPX1ZORVRf
SERSX0xFTjoKKwkJaWYgKG5ldGJlX3NldF9jYXAoc2MtPmJlLCBuZXRiZV9nZXRfY2FwKHNjLT5i
ZSksCisJCQkJICB2YWx1ZSkgPT0gMCkgeworCQkJc2MtPmlvcmVnc1tpbmRleF0gPSB2YWx1ZTsK
KwkJfQorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB1aW50NjRfdAorcHRuZXRfYmFyX3JlYWQo
c3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBzdHJ1Y3QgcGNpX2Rldmluc3QgKnBpLAorCSAg
ICAgICBpbnQgYmFyaWR4LCB1aW50NjRfdCBvZmZzZXQsIGludCBzaXplKQoreworCXN0cnVjdCBw
dG5ldF9zb2Z0YyAqc2MgPSBwaS0+cGlfYXJnOworCXVpbnQ2NF90IGluZGV4ID0gb2Zmc2V0ID4+
IDI7CisKKwlpZiAoYmFyaWR4ID09IHBjaV9tc2l4X3RhYmxlX2JhcihwaSkgfHwKKwkJCWJhcmlk
eCA9PSBwY2lfbXNpeF9wYmFfYmFyKHBpKSkgeworCQlyZXR1cm4gcGNpX2VtdWxfbXNpeF90cmVh
ZChwaSwgb2Zmc2V0LCBzaXplKTsKKwl9CisKKwlpZiAoc2MgPT0gTlVMTCkKKwkJcmV0dXJuIDA7
CisKKwlvZmZzZXQgJj0gUFRORVRfSU9fTUFTSzsKKworCWlmIChiYXJpZHggIT0gUFRORVRNQVBf
SU9fUENJX0JBUiB8fCBvZmZzZXQgPj0gUFRORVRfSU9fRU5EKSB7CisJCWZwcmludGYoc3RkZXJy
LCAiJXM6IFVuZXhwZWN0ZWQgcmVnaXN0ZXIgcmVhZCBbYmFyICV1LCAiCisJCQkib2Zmc2V0ICVs
eCBzaXplICVkXVxuIiwgX19mdW5jX18sIGJhcmlkeCwgb2Zmc2V0LAorCQkJc2l6ZSk7CisJCXJl
dHVybiAwOworCX0KKworCXN3aXRjaCAob2Zmc2V0KSB7CisJCWNhc2UgUFRORVRfSU9fTklGUF9P
RlM6CisJCWNhc2UgUFRORVRfSU9fTlVNX1RYX1JJTkdTOgorCQljYXNlIFBUTkVUX0lPX05VTV9S
WF9SSU5HUzoKKwkJY2FzZSBQVE5FVF9JT19OVU1fVFhfU0xPVFM6CisJCWNhc2UgUFRORVRfSU9f
TlVNX1JYX1NMT1RTOgorCQkJLyogRmlsbCBpbiBkZXZpY2UgcmVnaXN0ZXJzIHdpdGggaW5mb3Jt
YXRpb24gYWJvdXQKKwkJCSAqIG5pZnBfb2Zmc2V0LCBudW1fKnhfcmluZ3MsIGFuZCBudW1fKnhf
c2xvdHMuICovCisJCQlwdG5ldF9nZXRfbmV0bWFwX2lmKHNjKTsKKwkJCWJyZWFrOworCisJCWNh
c2UgUFRORVRfSU9fSE9TVE1FTUlEOgorCQkJc2MtPmlvcmVnc1tpbmRleF0gPSBwdG5ldG1hcF9n
ZXRfaG9zdG1lbWlkKHNjLT5wdGJlKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBzYy0+aW9y
ZWdzW2luZGV4XTsKK30KKworLyogUENJIGRldmljZSBpbml0aWFsaXphdGlvbi4gKi8KK3N0YXRp
YyBpbnQKK3B0bmV0X2luaXQoc3RydWN0IHZtY3R4ICpjdHgsIHN0cnVjdCBwY2lfZGV2aW5zdCAq
cGksIGNoYXIgKm9wdHMpCit7CisJc3RydWN0IHB0bmV0X3NvZnRjICpzYzsKKwljaGFyICpwdG9w
dHMsICpkZXZuYW1lOworCXVpbnQ4X3QgbWFjYWRkcls2XTsKKwlpbnQgbWFjX3Byb3ZpZGVkID0g
MDsKKwlpbnQgcmV0OworCisJc2MgPSBjYWxsb2MoMSwgc2l6ZW9mKCpzYykpOworCWlmIChzYyA9
PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6IG91dCBvZiBtZW1vcnlcbiIsIF9fZnVu
Y19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIExpbmsgb3VyIHNvZnRjIGluIHRoZSBwY2lf
ZGV2aW5zdC4gKi8KKwlwaS0+cGlfYXJnID0gc2M7CisJc2MtPnBpID0gcGk7CisKKwkvKiBQYXJz
ZSBjb21tYW5kIGxpbmUgb3B0aW9ucy4gKi8KKwlpZiAob3B0cyA9PSBOVUxMKSB7CisJCWZwcmlu
dGYoc3RkZXJyLCAiJXM6IE5vIGJhY2tlbmQgc3BlY2lmaWVkXG4iLCBfX2Z1bmNfXyk7CisJCXJl
dHVybiAtMTsKKwl9CisKKwlkZXZuYW1lID0gcHRvcHRzID0gc3RyZHVwKG9wdHMpOworCSh2b2lk
KSBzdHJzZXAoJnB0b3B0cywgIiwiKTsKKworCWlmIChwdG9wdHMgIT0gTlVMTCkgeworCQlyZXQg
PSBuZXRfcGFyc2VtYWMocHRvcHRzLCBtYWNhZGRyKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlm
cmVlKGRldm5hbWUpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQltYWNfcHJvdmlkZWQgPSAxOwor
CX0KKworCWlmICghbWFjX3Byb3ZpZGVkKSB7CisJCW5ldF9nZW5tYWMocGksIG1hY2FkZHIpOwor
CX0KKworCS8qIEluaXRpYWxpemUgYmFja2VuZC4gQSBOVUxMIGNhbGxiYWNrIGlzIHVzZWQgaGVy
ZSB0byB0ZWxsCisJICogdGhlIGFzayB0aGUgbmV0bWFwIGJhY2tlbmQgdG8gdXNlIHB0bmV0bWFw
LiAqLworCXNjLT5iZSA9IG5ldGJlX2luaXQoZGV2bmFtZSwgTlVMTCwgc2MpOworCWlmICghc2Mt
PmJlKSB7CisJCWZwcmludGYoc3RkZXJyLCAibmV0IGJhY2tlbmQgaW5pdGlhbGl6YXRpb24gZmFp
bGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZyZWUoZGV2bmFtZSk7CisKKwlzYy0+cHRi
ZSA9IGdldF9wdG5ldG1hcChzYy0+YmUpOworCWlmICghc2MtPnB0YmUpIHsKKwkJZnByaW50Zihz
dGRlcnIsICIlczogZmFpbGVkIHRvIGdldCBwdG5ldG1hcFxuIiwgX19mdW5jX18pOworCQlyZXR1
cm4gLTE7CisJfQorCisJLyogSW5pdGlhbGl6ZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZS4gKi8K
KwlwY2lfc2V0X2NmZ2RhdGExNihwaSwgUENJUl9WRU5ET1IsIFBUTkVUTUFQX1BDSV9WRU5ET1Jf
SUQpOworCXBjaV9zZXRfY2ZnZGF0YTE2KHBpLCBQQ0lSX0RFVklDRSwgUFRORVRNQVBfUENJX05F
VElGX0lEKTsKKwlwY2lfc2V0X2NmZ2RhdGE4KHBpLCBQQ0lSX0NMQVNTLCBQQ0lDX05FVFdPUksp
OworCXBjaV9zZXRfY2ZnZGF0YTgocGksIFBDSVJfU1VCQ0xBU1MsIFBDSVNfTkVUV09SS19FVEhF
Uk5FVCk7CisJcGNpX3NldF9jZmdkYXRhMTYocGksIFBDSVJfU1VCREVWXzAsIDEpOworCXBjaV9z
ZXRfY2ZnZGF0YTE2KHBpLCBQQ0lSX1NVQlZFTkRfMCwgUFRORVRNQVBfUENJX1ZFTkRPUl9JRCk7
CisKKwkvKiBBbGxvY2F0ZSBhIEJBUiBmb3IgYW4gSS9PIHJlZ2lvbi4gKi8KKwlyZXQgPSBwY2lf
ZW11bF9hbGxvY19iYXIocGksIFBUTkVUTUFQX0lPX1BDSV9CQVIsIFBDSUJBUl9JTywKKwkJCQkg
UFRORVRfSU9fTUFTSyArIDEpOworCWlmIChyZXQpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczog
ZmFpbGVkIHRvIGFsbG9jYXRlIEJBUiBbJWRdXG4iLAorCQkJX19mdW5jX18sIHJldCk7CisJCXJl
dHVybiByZXQ7CisJfQorCisJLyogSW5pdGlhbGl6ZSByZWdpc3RlcnMgYW5kIGRhdGEgc3RydWN0
dXJlcy4gKi8KKwltZW1zZXQoc2MtPmlvcmVncywgMCwgc2l6ZW9mKHNjLT5pb3JlZ3MpKTsKKwlz
Yy0+Y3NiID0gTlVMTDsKKwlzYy0+aW9yZWdzW1BUTkVUX0lPX01BQ19ISSA+PiAyXSA9IChtYWNh
ZGRyWzBdIDw8IDgpIHwgbWFjYWRkclsxXTsKKwlzYy0+aW9yZWdzW1BUTkVUX0lPX01BQ19MTyA+
PiAyXSA9IChtYWNhZGRyWzJdIDw8IDI0KSB8CisJCQkJCSAgIChtYWNhZGRyWzNdIDw8IDE2KSB8
CisJCQkJCSAgIChtYWNhZGRyWzRdIDw8IDgpIHwgbWFjYWRkcls1XTsKKworCXNjLT5udW1fcmlu
Z3MgPSAwOworCXB0bmV0X2dldF9uZXRtYXBfaWYoc2MpOworCisJLyogQWxsb2NhdGUgYSBCQVIg
Zm9yIE1TSS1YIHZlY3RvcnMuICovCisJcGNpX2VtdWxfYWRkX21zaXhjYXAocGksIHNjLT5udW1f
cmluZ3MsIFBUTkVUTUFQX01TSVhfUENJX0JBUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0
IHBjaV9kZXZlbXUgcGNpX2RlX3B0bmV0ID0geworCS5wZV9lbXUgPSAJInB0bmV0IiwKKwkucGVf
aW5pdCA9CXB0bmV0X2luaXQsCisJLnBlX2JhcndyaXRlID0JcHRuZXRfYmFyX3dyaXRlLAorCS5w
ZV9iYXJyZWFkID0JcHRuZXRfYmFyX3JlYWQsCit9OworUENJX0VNVUxfU0VUKHBjaV9kZV9wdG5l
dCk7CisKKyNlbmRpZiAvKiBXSVRIX05FVE1BUCAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvdXNy
LnNiaW4vYmh5dmUvcGNpX3ZpcnRpb19uZXQuYyAvdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9wY2lf
dmlydGlvX25ldC5jCi0tLSB1c3Ivc3JjL3Vzci5zYmluL2JoeXZlL3BjaV92aXJ0aW9fbmV0LmMJ
MjAxNi0wOS0yOSAwMDoyNTowNy4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3Vzci5zYmlu
L2JoeXZlL3BjaV92aXJ0aW9fbmV0LmMJMjAxNi0xMS0zMCAxMDo1NjoxMC40NTkzNDMwMDAgKzAw
MDAKQEAgLTI2LDYgKzI2LDIyIEBACiAgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvdXNyLnNiaW4v
Ymh5dmUvcGNpX3ZpcnRpb19uZXQuYyAyOTY4MjkgMjAxNi0wMy0xNCAwODo0ODoxNlogZ25uICQK
ICAqLwogCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBlbXVsYXRpb24gb2YgdGhlIHZp
cnRpby1uZXQgbmV0d29yayBmcm9udGVuZC4gTmV0d29yaworICogYmFja2VuZHMgYXJlIGluIG5l
dF9iYWNrZW5kcy5jLgorICoKKyAqIFRoZSBmcm9udGVuZCBpcyBzZWxlY3RlZCB1c2luZyB0aGUg
cGVfZW11IGZpZWxkIG9mIHRoZSBkZXNjcmlwdG9yLAorICogVXBvbiBhIG1hdGNoLCB0aGUgcGVf
aW5pdCBmdW5jdGlvbiBpcyBpbnZva2VkLCB3aGljaCBpbml0aWFsaXplcworICogdGhlIGVtdWxh
dGVkIFBDSSBkZXZpY2UsIGF0dGFjaGVzIHRvIHRoZSBiYWNrZW5kLCBhbmQgY2FsbHMgdmlydGlv
CisgKiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMuCisgKgorICogUENJIHJlZ2lzdGVyIHJlYWQv
d3JpdGVzIGFyZSBoYW5kbGVkIHRocm91Z2ggZ2VuZXJpYyBQQ0kgbWV0aG9kcworICoKKyAqIHZp
cnRpbyBUWCBpcyBoYW5kbGVkIGJ5IGEgZGVkaWNhdGVkIHRocmVhZCwgcGNpX3Z0bmV0X3R4X3Ro
cmVhZCgpCisgKiB2aXJ0aW8gUlggaXMgaGFuZGxlZCBieSB0aGUgYmFja2VuZCAob2Z0ZW4gd2l0
aCBzb21lIGhlbHBlciB0aHJlYWQpLAorICogCXdoaWNoIGluIHR1cm4gY2FsbHMgYSBmcm9udGVu
ZCBjYWxsYmFjaywgcGNpX3Z0bmV0X3J4X2NhbGxiYWNrKCkKKyAqLworCiAjaW5jbHVkZSA8c3lz
L2NkZWZzLmg+CiBfX0ZCU0RJRCgiJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3Vzci5zYmluL2JoeXZl
L3BjaV92aXJ0aW9fbmV0LmMgMjk2ODI5IDIwMTYtMDMtMTQgMDg6NDg6MTZaIGdubiAkIik7CiAK
QEAgLTM2LDEwICs1Miw3IEBACiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVkZSA8bWFj
aGluZS9hdG9taWMuaD4KICNpbmNsdWRlIDxuZXQvZXRoZXJuZXQuaD4KLSNpZm5kZWYgTkVUTUFQ
X1dJVEhfTElCUwotI2RlZmluZSBORVRNQVBfV0lUSF9MSUJTCi0jZW5kaWYKLSNpbmNsdWRlIDxu
ZXQvbmV0bWFwX3VzZXIuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4gLyogSUZOQU1TSVogKi8KIAog
I2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KQEAgLTUwLDcgKzYzLDYgQEAK
ICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8YXNz
ZXJ0Lmg+Ci0jaW5jbHVkZSA8bWQ1Lmg+CiAjaW5jbHVkZSA8cHRocmVhZC5oPgogI2luY2x1ZGUg
PHB0aHJlYWRfbnAuaD4KIApAQCAtNTgsMzYgKzcwLDE2IEBACiAjaW5jbHVkZSAicGNpX2VtdWwu
aCIKICNpbmNsdWRlICJtZXZlbnQuaCIKICNpbmNsdWRlICJ2aXJ0aW8uaCIKKyNpbmNsdWRlICJu
ZXRfdXRpbHMuaCIgICAgLyogTUFDIGFkZHJlc3MgZ2VuZXJhdGlvbiAqLworI2luY2x1ZGUgIm5l
dF9iYWNrZW5kcy5oIiAvKiBWaXJ0SU8gY2FwYWJpbGl0aWVzICovCiAKICNkZWZpbmUgVlRORVRf
UklOR1NaCTEwMjQKIAogI2RlZmluZSBWVE5FVF9NQVhTRUdTCTI1NgogCi0vKgotICogSG9zdCBj
YXBhYmlsaXRpZXMuICBOb3RlIHRoYXQgd2Ugb25seSBvZmZlciBhIGZldyBvZiB0aGVzZS4KLSAq
LwotI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1NVTQkoMSA8PCAgMCkgLyogaG9zdCBoYW5kbGVzIHBh
cnRpYWwgY2tzdW0gKi8KLSNkZWZpbmUJVklSVElPX05FVF9GX0dVRVNUX0NTVU0JKDEgPDwgIDEp
IC8qIGd1ZXN0IGhhbmRsZXMgcGFydGlhbCBja3N1bSAqLwotI2RlZmluZQlWSVJUSU9fTkVUX0Zf
TUFDCSgxIDw8ICA1KSAvKiBob3N0IHN1cHBsaWVzIE1BQyAqLwotI2RlZmluZQlWSVJUSU9fTkVU
X0ZfR1NPX0RFUFJFQwkoMSA8PCAgNikgLyogZGVwcmVjYXRlZDogaG9zdCBoYW5kbGVzIEdTTyAq
LwotI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNAkoMSA8PCAgNykgLyogZ3Vlc3QgY2Fu
IHJjdiBUU092NCAqLwotI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNgkoMSA8PCAgOCkg
LyogZ3Vlc3QgY2FuIHJjdiBUU092NiAqLwotI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfRUNO
CSgxIDw8ICA5KSAvKiBndWVzdCBjYW4gcmN2IFRTTyB3aXRoIEVDTiAqLwotI2RlZmluZQlWSVJU
SU9fTkVUX0ZfR1VFU1RfVUZPCSgxIDw8IDEwKSAvKiBndWVzdCBjYW4gcmN2IFVGTyAqLwotI2Rl
ZmluZQlWSVJUSU9fTkVUX0ZfSE9TVF9UU080CSgxIDw8IDExKSAvKiBob3N0IGNhbiByY3YgVFNP
djQgKi8KLSNkZWZpbmUJVklSVElPX05FVF9GX0hPU1RfVFNPNgkoMSA8PCAxMikgLyogaG9zdCBj
YW4gcmN2IFRTT3Y2ICovCi0jZGVmaW5lCVZJUlRJT19ORVRfRl9IT1NUX0VDTgkoMSA8PCAxMykg
LyogaG9zdCBjYW4gcmN2IFRTTyB3aXRoIEVDTiAqLwotI2RlZmluZQlWSVJUSU9fTkVUX0ZfSE9T
VF9VRk8JKDEgPDwgMTQpIC8qIGhvc3QgY2FuIHJjdiBVRk8gKi8KLSNkZWZpbmUJVklSVElPX05F
VF9GX01SR19SWEJVRgkoMSA8PCAxNSkgLyogaG9zdCBjYW4gbWVyZ2UgUlggYnVmZmVycyAqLwot
I2RlZmluZQlWSVJUSU9fTkVUX0ZfU1RBVFVTCSgxIDw8IDE2KSAvKiBjb25maWcgc3RhdHVzIGZp
ZWxkIGF2YWlsYWJsZSAqLwotI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1RSTF9WUQkoMSA8PCAxNykg
LyogY29udHJvbCBjaGFubmVsIGF2YWlsYWJsZSAqLwotI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1RS
TF9SWAkoMSA8PCAxOCkgLyogY29udHJvbCBjaGFubmVsIFJYIG1vZGUgc3VwcG9ydCAqLwotI2Rl
ZmluZQlWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFOCSgxIDw8IDE5KSAvKiBjb250cm9sIGNoYW5uZWwg
VkxBTiBmaWx0ZXJpbmcgKi8KLSNkZWZpbmUJVklSVElPX05FVF9GX0dVRVNUX0FOTk9VTkNFIFwK
LQkJCQkoMSA8PCAyMSkgLyogZ3Vlc3QgY2FuIHNlbmQgZ3JhdHVpdG91cyBwa3RzICovCi0KKy8q
IE91ciBjYXBhYmlsaXRpZXM6IHdlIGRvbid0IHN1cHBvcnQgVklSVElPX05FVF9GX01SR19SWEJV
RiBhdCB0aGUgbW9tZW50LiAqLwogI2RlZmluZSBWVE5FVF9TX0hPU1RDQVBTICAgICAgXAotICAo
IFZJUlRJT19ORVRfRl9NQUMgfCBWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGIHwgVklSVElPX05FVF9G
X1NUQVRVUyB8IFwKKyAgKCBWSVJUSU9fTkVUX0ZfTUFDIHwgVklSVElPX05FVF9GX1NUQVRVUyB8
IFwKICAgICBWSVJUSU9fRl9OT1RJRllfT05fRU1QVFkgfCBWSVJUSU9fUklOR19GX0lORElSRUNU
X0RFU0MpCiAKIC8qCkBAIC05Niw2ICs4OCw3IEBACiBzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcg
ewogCXVpbnQ4X3QgIG1hY1s2XTsKIAl1aW50MTZfdCBzdGF0dXM7CisJdWludDE2X3QgbWF4X3Zp
cnRxdWV1ZV9wYWlyczsKIH0gX19wYWNrZWQ7CiAKIC8qCkBAIC0xMDgsMTkgKzEwMSw2IEBACiAj
ZGVmaW5lIFZUTkVUX01BWFEJMwogCiAvKgotICogRml4ZWQgbmV0d29yayBoZWFkZXIgc2l6ZQot
ICovCi1zdHJ1Y3QgdmlydGlvX25ldF9yeGhkciB7Ci0JdWludDhfdAkJdnJoX2ZsYWdzOwotCXVp
bnQ4X3QJCXZyaF9nc29fdHlwZTsKLQl1aW50MTZfdAl2cmhfaGRyX2xlbjsKLQl1aW50MTZfdAl2
cmhfZ3NvX3NpemU7Ci0JdWludDE2X3QJdnJoX2NzdW1fc3RhcnQ7Ci0JdWludDE2X3QJdnJoX2Nz
dW1fb2Zmc2V0OwotCXVpbnQxNl90CXZyaF9idWZzOwotfSBfX3BhY2tlZDsKLQotLyoKICAqIERl
YnVnIHByaW50ZgogICovCiBzdGF0aWMgaW50IHBjaV92dG5ldF9kZWJ1ZzsKQEAgLTEzNCwzMSAr
MTE0LDI0IEBACiAJc3RydWN0IHZpcnRpb19zb2Z0YyB2c2NfdnM7CiAJc3RydWN0IHZxdWV1ZV9p
bmZvIHZzY19xdWV1ZXNbVlRORVRfTUFYUSAtIDFdOwogCXB0aHJlYWRfbXV0ZXhfdCB2c2NfbXR4
OwotCXN0cnVjdCBtZXZlbnQJKnZzY19tZXZwOwogCi0JaW50CQl2c2NfdGFwZmQ7Ci0Jc3RydWN0
IG5tX2Rlc2MJKnZzY19ubWQ7CisJc3RydWN0IG5ldF9iYWNrZW5kICp2c2NfYmU7CiAKIAlpbnQJ
CXZzY19yeF9yZWFkeTsKIAl2b2xhdGlsZSBpbnQJcmVzZXR0aW5nOwkvKiBzZXQgYW5kIGNoZWNr
ZWQgb3V0c2lkZSBsb2NrICovCiAKIAl1aW50NjRfdAl2c2NfZmVhdHVyZXM7CS8qIG5lZ290aWF0
ZWQgZmVhdHVyZXMgKi8KIAkKLQlzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcgdnNjX2NvbmZpZzsK
LQogCXB0aHJlYWRfbXV0ZXhfdAlyeF9tdHg7Ci0JaW50CQlyeF9pbl9wcm9ncmVzczsKLQlpbnQJ
CXJ4X3ZoZHJsZW47CisJdW5zaWduZWQgaW50CXJ4X3ZoZHJsZW47CiAJaW50CQlyeF9tZXJnZTsJ
LyogbWVyZ2VkIHJ4IGJ1ZnMgaW4gdXNlICovCiAKIAlwdGhyZWFkX3QgCXR4X3RpZDsKIAlwdGhy
ZWFkX211dGV4X3QJdHhfbXR4OwogCXB0aHJlYWRfY29uZF90CXR4X2NvbmQ7CiAJaW50CQl0eF9p
bl9wcm9ncmVzczsKKwlzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcgdnNjX2NvbmZpZzsKIAotCXZv
aWQgKCpwY2lfdnRuZXRfcngpKHN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjKTsKLQl2b2lkICgq
cGNpX3Z0bmV0X3R4KShzdHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpzYywgc3RydWN0IGlvdmVjICpp
b3YsCi0JCQkgICAgIGludCBpb3ZjbnQsIGludCBsZW4pOwogfTsKIAogc3RhdGljIHZvaWQgcGNp
X3Z0bmV0X3Jlc2V0KHZvaWQgKik7CkBAIC0xODEsNiArMTU0LDcgQEAKIAogLyoKICAqIElmIHRo
ZSB0cmFuc21pdCB0aHJlYWQgaXMgYWN0aXZlIHRoZW4gc3RhbGwgdW50aWwgaXQgaXMgZG9uZS4K
KyAqIE9ubHkgdXNlZCBvbmNlIGluIHBjaV92dG5ldF9yZXNldCgpCiAgKi8KIHN0YXRpYyB2b2lk
CiBwY2lfdnRuZXRfdHh3YWl0KHN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjKQpAQCAtMTk3LDIw
ICsxNzEsMTggQEAKIAogLyoKICAqIElmIHRoZSByZWNlaXZlIHRocmVhZCBpcyBhY3RpdmUgdGhl
biBzdGFsbCB1bnRpbCBpdCBpcyBkb25lLgorICogSXQgaXMgZW5vdWdoIHRvIGxvY2sgYW5kIHVu
bG9jayB0aGUgUlggbXV0ZXguCisgKiBPbmx5IHVzZWQgb25jZSBpbiBwY2lfdnRuZXRfcmVzZXQo
KQogICovCiBzdGF0aWMgdm9pZAogcGNpX3Z0bmV0X3J4d2FpdChzdHJ1Y3QgcGNpX3Z0bmV0X3Nv
ZnRjICpzYykKIHsKIAogCXB0aHJlYWRfbXV0ZXhfbG9jaygmc2MtPnJ4X210eCk7Ci0Jd2hpbGUg
KHNjLT5yeF9pbl9wcm9ncmVzcykgewotCQlwdGhyZWFkX211dGV4X3VubG9jaygmc2MtPnJ4X210
eCk7Ci0JCXVzbGVlcCgxMDAwMCk7Ci0JCXB0aHJlYWRfbXV0ZXhfbG9jaygmc2MtPnJ4X210eCk7
Ci0JfQogCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzYy0+cnhfbXR4KTsKIH0KIAorLyogaGFuZGxl
ciBmb3IgdmlydGlvX3Jlc2V0ICovCiBzdGF0aWMgdm9pZAogcGNpX3Z0bmV0X3Jlc2V0KHZvaWQg
KnZzYykKIHsKQEAgLTIzNywzNjAgKzIwOSw4MCBAQAogCXNjLT5yZXNldHRpbmcgPSAwOwogfQog
Ci0vKgotICogQ2FsbGVkIHRvIHNlbmQgYSBidWZmZXIgY2hhaW4gb3V0IHRvIHRoZSB0YXAgZGV2
aWNlCi0gKi8KLXN0YXRpYyB2b2lkCi1wY2lfdnRuZXRfdGFwX3R4KHN0cnVjdCBwY2lfdnRuZXRf
c29mdGMgKnNjLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCwKLQkJIGludCBsZW4pCi17
Ci0Jc3RhdGljIGNoYXIgcGFkWzYwXTsgLyogYWxsIHplcm8gYnl0ZXMgKi8KLQotCWlmIChzYy0+
dnNjX3RhcGZkID09IC0xKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIElmIHRoZSBsZW5ndGggaXMg
PCA2MCwgcGFkIG91dCB0byB0aGF0IGFuZCBhZGQgdGhlCi0JICogZXh0cmEgemVybydkIHNlZ21l
bnQgdG8gdGhlIGlvdi4gSXQgaXMgZ3VhcmFudGVlZCB0aGF0Ci0JICogdGhlcmUgaXMgYWx3YXlz
IGFuIGV4dHJhIGlvdiBhdmFpbGFibGUgYnkgdGhlIGNhbGxlci4KLQkgKi8KLQlpZiAobGVuIDwg
NjApIHsKLQkJaW92W2lvdmNudF0uaW92X2Jhc2UgPSBwYWQ7Ci0JCWlvdltpb3ZjbnRdLmlvdl9s
ZW4gPSA2MCAtIGxlbjsKLQkJaW92Y250Kys7Ci0JfQotCSh2b2lkKSB3cml0ZXYoc2MtPnZzY190
YXBmZCwgaW92LCBpb3ZjbnQpOwotfQotCi0vKgotICogIENhbGxlZCB3aGVuIHRoZXJlIGlzIHJl
YWQgYWN0aXZpdHkgb24gdGhlIHRhcCBmaWxlIGRlc2NyaXB0b3IuCi0gKiBFYWNoIGJ1ZmZlciBw
b3N0ZWQgYnkgdGhlIGd1ZXN0IGlzIGFzc3VtZWQgdG8gYmUgYWJsZSB0byBjb250YWluCi0gKiBh
biBlbnRpcmUgZXRoZXJuZXQgZnJhbWUgKyByeCBoZWFkZXIuCi0gKiAgTVAgbm90ZTogdGhlIGR1
bW15YnVmIGlzIG9ubHkgdXNlZCBmb3IgZGlzY2FyZGluZyBmcmFtZXMsIHNvIHRoZXJlCi0gKiBp
cyBubyBuZWVkIGZvciBpdCB0byBiZSBwZXItdnRuZXQgb3IgbG9ja2VkLgotICovCi1zdGF0aWMg
dWludDhfdCBkdW1teWJ1ZlsyMDQ4XTsKLQotc3RhdGljIF9faW5saW5lIHN0cnVjdCBpb3ZlYyAq
Ci1yeF9pb3ZfdHJpbShzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50ICpuaW92LCBpbnQgdGxlbikKLXsK
LQlzdHJ1Y3QgaW92ZWMgKnJpb3Y7Ci0KLQkvKiBYWFggc2hvcnQtY3V0OiBhc3N1bWUgZmlyc3Qg
c2VnbWVudCBpcyA+PSB0bGVuICovCi0JYXNzZXJ0KGlvdlswXS5pb3ZfbGVuID49IHRsZW4pOwot
Ci0JaW92WzBdLmlvdl9sZW4gLT0gdGxlbjsKLQlpZiAoaW92WzBdLmlvdl9sZW4gPT0gMCkgewot
CQlhc3NlcnQoKm5pb3YgPiAxKTsKLQkJKm5pb3YgLT0gMTsKLQkJcmlvdiA9ICZpb3ZbMV07Ci0J
fSBlbHNlIHsKLQkJaW92WzBdLmlvdl9iYXNlID0gKHZvaWQgKikoKHVpbnRwdHJfdClpb3ZbMF0u
aW92X2Jhc2UgKyB0bGVuKTsKLQkJcmlvdiA9ICZpb3ZbMF07Ci0JfQotCi0JcmV0dXJuIChyaW92
KTsKLX0KLQogc3RhdGljIHZvaWQKLXBjaV92dG5ldF90YXBfcngoc3RydWN0IHBjaV92dG5ldF9z
b2Z0YyAqc2MpCitwY2lfdnRuZXRfcngoc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2MpCiB7Ci0J
c3RydWN0IGlvdmVjIGlvdltWVE5FVF9NQVhTRUdTXSwgKnJpb3Y7CisJc3RydWN0IGlvdmVjIGlv
dltWVE5FVF9NQVhTRUdTICsgMV07CiAJc3RydWN0IHZxdWV1ZV9pbmZvICp2cTsKLQl2b2lkICp2
cng7CiAJaW50IGxlbiwgbjsKIAl1aW50MTZfdCBpZHg7CiAKLQkvKgotCSAqIFNob3VsZCBuZXZl
ciBiZSBjYWxsZWQgd2l0aG91dCBhIHZhbGlkIHRhcCBmZAotCSAqLwotCWFzc2VydChzYy0+dnNj
X3RhcGZkICE9IC0xKTsKLQotCS8qCi0JICogQnV0LCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBy
eCByaW5nIGhhc24ndCB5ZXQKLQkgKiBiZWVuIHNldCB1cCBvciB0aGUgZ3Vlc3QgaXMgcmVzZXR0
aW5nIHRoZSBkZXZpY2UuCi0JICovCiAJaWYgKCFzYy0+dnNjX3J4X3JlYWR5IHx8IHNjLT5yZXNl
dHRpbmcpIHsKIAkJLyoKLQkJICogRHJvcCB0aGUgcGFja2V0IGFuZCB0cnkgbGF0ZXIuCisJCSAq
IFRoZSByeCByaW5nIGhhcyBub3QgeWV0IGJlZW4gc2V0IHVwIG9yIHRoZSBndWVzdCBpcworCQkg
KiByZXNldHRpbmcgdGhlIGRldmljZS4gRHJvcCB0aGUgcGFja2V0IGFuZCB0cnkgbGF0ZXIuCiAJ
CSAqLwotCQkodm9pZCkgcmVhZChzYy0+dnNjX3RhcGZkLCBkdW1teWJ1Ziwgc2l6ZW9mKGR1bW15
YnVmKSk7CisJCW5ldGJlX3J4X2Rpc2NhcmQoc2MtPnZzY19iZSk7CiAJCXJldHVybjsKIAl9CiAK
LQkvKgotCSAqIENoZWNrIGZvciBhdmFpbGFibGUgcnggYnVmZmVycwotCSAqLwogCXZxID0gJnNj
LT52c2NfcXVldWVzW1ZUTkVUX1JYUV07CiAJaWYgKCF2cV9oYXNfZGVzY3ModnEpKSB7CiAJCS8q
Ci0JCSAqIERyb3AgdGhlIHBhY2tldCBhbmQgdHJ5IGxhdGVyLiAgSW50ZXJydXB0IG9uCi0JCSAq
IGVtcHR5LCBpZiB0aGF0J3MgbmVnb3RpYXRlZC4KKwkJICogTm8gYXZhaWxhYmxlIHJ4IGJ1ZmZl
cnMuIERyb3AgdGhlIHBhY2tldCBhbmQgdHJ5IGxhdGVyLgorCQkgKiBJbnRlcnJ1cHQgb24gZW1w
dHksIGlmIHRoYXQncyBuZWdvdGlhdGVkLgogCQkgKi8KLQkJKHZvaWQpIHJlYWQoc2MtPnZzY190
YXBmZCwgZHVtbXlidWYsIHNpemVvZihkdW1teWJ1ZikpOworCQluZXRiZV9yeF9kaXNjYXJkKHNj
LT52c2NfYmUpOwogCQl2cV9lbmRjaGFpbnModnEsIDEpOwogCQlyZXR1cm47CiAJfQogCiAJZG8g
ewotCQkvKgotCQkgKiBHZXQgZGVzY3JpcHRvciBjaGFpbi4KLQkJICovCisJCS8qIEdldCBkZXNj
cmlwdG9yIGNoYWluIGludG8gaW92ICovCiAJCW4gPSB2cV9nZXRjaGFpbih2cSwgJmlkeCwgaW92
LCBWVE5FVF9NQVhTRUdTLCBOVUxMKTsKIAkJYXNzZXJ0KG4gPj0gMSAmJiBuIDw9IFZUTkVUX01B
WFNFR1MpOwogCi0JCS8qCi0JCSAqIEdldCBhIHBvaW50ZXIgdG8gdGhlIHJ4IGhlYWRlciwgYW5k
IHVzZSB0aGUKLQkJICogZGF0YSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgaXQgZm9yIHRoZSBwYWNr
ZXQgYnVmZmVyLgotCQkgKi8KLQkJdnJ4ID0gaW92WzBdLmlvdl9iYXNlOwotCQlyaW92ID0gcnhf
aW92X3RyaW0oaW92LCAmbiwgc2MtPnJ4X3ZoZHJsZW4pOwotCi0JCWxlbiA9IHJlYWR2KHNjLT52
c2NfdGFwZmQsIHJpb3YsIG4pOwotCi0JCWlmIChsZW4gPCAwICYmIGVycm5vID09IEVXT1VMREJM
T0NLKSB7Ci0JCQkvKgotCQkJICogTm8gbW9yZSBwYWNrZXRzLCBidXQgc3RpbGwgc29tZSBhdmFp
bCByaW5nCi0JCQkgKiBlbnRyaWVzLiAgSW50ZXJydXB0IGlmIG5lZWRlZC9hcHByb3ByaWF0ZS4K
LQkJCSAqLwotCQkJdnFfcmV0Y2hhaW4odnEpOwotCQkJdnFfZW5kY2hhaW5zKHZxLCAwKTsKLQkJ
CXJldHVybjsKLQkJfQotCi0JCS8qCi0JCSAqIFRoZSBvbmx5IHZhbGlkIGZpZWxkIGluIHRoZSBy
eCBwYWNrZXQgaGVhZGVyIGlzIHRoZQotCQkgKiBudW1iZXIgb2YgYnVmZmVycyBpZiBtZXJnZWQg
cnggYnVmcyB3ZXJlIG5lZ290aWF0ZWQuCi0JCSAqLwotCQltZW1zZXQodnJ4LCAwLCBzYy0+cnhf
dmhkcmxlbik7Ci0KLQkJaWYgKHNjLT5yeF9tZXJnZSkgewotCQkJc3RydWN0IHZpcnRpb19uZXRf
cnhoZHIgKnZyeGg7Ci0KLQkJCXZyeGggPSB2cng7Ci0JCQl2cnhoLT52cmhfYnVmcyA9IDE7Ci0J
CX0KLQotCQkvKgotCQkgKiBSZWxlYXNlIHRoaXMgY2hhaW4gYW5kIGhhbmRsZSBtb3JlIGNoYWlu
cy4KLQkJICovCi0JCXZxX3JlbGNoYWluKHZxLCBpZHgsIGxlbiArIHNjLT5yeF92aGRybGVuKTsK
LQl9IHdoaWxlICh2cV9oYXNfZGVzY3ModnEpKTsKLQotCS8qIEludGVycnVwdCBpZiBuZWVkZWQs
IGluY2x1ZGluZyBmb3IgTk9USUZZX09OX0VNUFRZLiAqLwotCXZxX2VuZGNoYWlucyh2cSwgMSk7
Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLXBjaV92dG5ldF9uZXRtYXBfd3JpdGV2KHN0cnVj
dCBubV9kZXNjICpubWQsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250KQotewotCWludCBy
LCBpOwotCWludCBsZW4gPSAwOwotCi0JZm9yIChyID0gbm1kLT5jdXJfdHhfcmluZzsgOyApIHsK
LQkJc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nID0gTkVUTUFQX1RYUklORyhubWQtPm5pZnAsIHIp
OwotCQl1aW50MzJfdCBjdXIsIGlkeDsKLQkJY2hhciAqYnVmOwotCi0JCWlmIChubV9yaW5nX2Vt
cHR5KHJpbmcpKSB7Ci0JCQlyKys7Ci0JCQlpZiAociA+IG5tZC0+bGFzdF90eF9yaW5nKQotCQkJ
CXIgPSBubWQtPmZpcnN0X3R4X3Jpbmc7Ci0JCQlpZiAociA9PSBubWQtPmN1cl90eF9yaW5nKQot
CQkJCWJyZWFrOwotCQkJY29udGludWU7Ci0JCX0KLQkJY3VyID0gcmluZy0+Y3VyOwotCQlpZHgg
PSByaW5nLT5zbG90W2N1cl0uYnVmX2lkeDsKLQkJYnVmID0gTkVUTUFQX0JVRihyaW5nLCBpZHgp
OworCQlsZW4gPSBuZXRiZV9yZWN2KHNjLT52c2NfYmUsIGlvdiwgbik7CiAKLQkJZm9yIChpID0g
MDsgaSA8IGlvdmNudDsgaSsrKSB7Ci0JCQlpZiAobGVuICsgaW92W2ldLmlvdl9sZW4gPiAyMDQ4
KQotCQkJCWJyZWFrOwotCQkJbWVtY3B5KCZidWZbbGVuXSwgaW92W2ldLmlvdl9iYXNlLCBpb3Zb
aV0uaW92X2xlbik7Ci0JCQlsZW4gKz0gaW92W2ldLmlvdl9sZW47Ci0JCX0KLQkJcmluZy0+c2xv
dFtjdXJdLmxlbiA9IGxlbjsKLQkJcmluZy0+aGVhZCA9IHJpbmctPmN1ciA9IG5tX3JpbmdfbmV4
dChyaW5nLCBjdXIpOwotCQlubWQtPmN1cl90eF9yaW5nID0gcjsKLQkJaW9jdGwobm1kLT5mZCwg
TklPQ1RYU1lOQywgTlVMTCk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAobGVuKTsKLX0KLQot
c3RhdGljIF9faW5saW5lIGludAotcGNpX3Z0bmV0X25ldG1hcF9yZWFkdihzdHJ1Y3Qgbm1fZGVz
YyAqbm1kLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCkKLXsKLQlpbnQgbGVuID0gMDsK
LQlpbnQgaSA9IDA7Ci0JaW50IHI7Ci0KLQlmb3IgKHIgPSBubWQtPmN1cl9yeF9yaW5nOyA7ICkg
ewotCQlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJpbmcgPSBORVRNQVBfUlhSSU5HKG5tZC0+bmlmcCwg
cik7Ci0JCXVpbnQzMl90IGN1ciwgaWR4OwotCQljaGFyICpidWY7Ci0JCXNpemVfdCBsZWZ0Owot
Ci0JCWlmIChubV9yaW5nX2VtcHR5KHJpbmcpKSB7Ci0JCQlyKys7Ci0JCQlpZiAociA+IG5tZC0+
bGFzdF9yeF9yaW5nKQotCQkJCXIgPSBubWQtPmZpcnN0X3J4X3Jpbmc7Ci0JCQlpZiAociA9PSBu
bWQtPmN1cl9yeF9yaW5nKQotCQkJCWJyZWFrOwotCQkJY29udGludWU7CisJCWlmIChsZW4gPCAw
KSB7CisJCQlicmVhazsKIAkJfQotCQljdXIgPSByaW5nLT5jdXI7Ci0JCWlkeCA9IHJpbmctPnNs
b3RbY3VyXS5idWZfaWR4OwotCQlidWYgPSBORVRNQVBfQlVGKHJpbmcsIGlkeCk7Ci0JCWxlZnQg
PSByaW5nLT5zbG90W2N1cl0ubGVuOwotCi0JCWZvciAoaSA9IDA7IGkgPCBpb3ZjbnQgJiYgbGVm
dCA+IDA7IGkrKykgewotCQkJaWYgKGlvdltpXS5pb3ZfbGVuID4gbGVmdCkKLQkJCQlpb3ZbaV0u
aW92X2xlbiA9IGxlZnQ7Ci0JCQltZW1jcHkoaW92W2ldLmlvdl9iYXNlLCAmYnVmW2xlbl0sIGlv
dltpXS5pb3ZfbGVuKTsKLQkJCWxlbiArPSBpb3ZbaV0uaW92X2xlbjsKLQkJCWxlZnQgLT0gaW92
W2ldLmlvdl9sZW47Ci0JCX0KLQkJcmluZy0+aGVhZCA9IHJpbmctPmN1ciA9IG5tX3JpbmdfbmV4
dChyaW5nLCBjdXIpOwotCQlubWQtPmN1cl9yeF9yaW5nID0gcjsKLQkJaW9jdGwobm1kLT5mZCwg
TklPQ1JYU1lOQywgTlVMTCk7Ci0JCWJyZWFrOwotCX0KLQlmb3IgKDsgaSA8IGlvdmNudDsgaSsr
KQotCQlpb3ZbaV0uaW92X2xlbiA9IDA7Ci0KLQlyZXR1cm4gKGxlbik7Ci19Ci0KLS8qCi0gKiBD
YWxsZWQgdG8gc2VuZCBhIGJ1ZmZlciBjaGFpbiBvdXQgdG8gdGhlIHZhbGUgcG9ydAotICovCi1z
dGF0aWMgdm9pZAotcGNpX3Z0bmV0X25ldG1hcF90eChzdHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpz
Yywgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQsCi0JCSAgICBpbnQgbGVuKQotewotCXN0
YXRpYyBjaGFyIHBhZFs2MF07IC8qIGFsbCB6ZXJvIGJ5dGVzICovCi0KLQlpZiAoc2MtPnZzY19u
bWQgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBJZiB0aGUgbGVuZ3RoIGlzIDwgNjAs
IHBhZCBvdXQgdG8gdGhhdCBhbmQgYWRkIHRoZQotCSAqIGV4dHJhIHplcm8nZCBzZWdtZW50IHRv
IHRoZSBpb3YuIEl0IGlzIGd1YXJhbnRlZWQgdGhhdAotCSAqIHRoZXJlIGlzIGFsd2F5cyBhbiBl
eHRyYSBpb3YgYXZhaWxhYmxlIGJ5IHRoZSBjYWxsZXIuCi0JICovCi0JaWYgKGxlbiA8IDYwKSB7
Ci0JCWlvdltpb3ZjbnRdLmlvdl9iYXNlID0gcGFkOwotCQlpb3ZbaW92Y250XS5pb3ZfbGVuID0g
NjAgLSBsZW47Ci0JCWlvdmNudCsrOwotCX0KLQkodm9pZCkgcGNpX3Z0bmV0X25ldG1hcF93cml0
ZXYoc2MtPnZzY19ubWQsIGlvdiwgaW92Y250KTsKLX0KLQotc3RhdGljIHZvaWQKLXBjaV92dG5l
dF9uZXRtYXBfcngoc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2MpCi17Ci0Jc3RydWN0IGlvdmVj
IGlvdltWVE5FVF9NQVhTRUdTXSwgKnJpb3Y7Ci0Jc3RydWN0IHZxdWV1ZV9pbmZvICp2cTsKLQl2
b2lkICp2cng7Ci0JaW50IGxlbiwgbjsKLQl1aW50MTZfdCBpZHg7Ci0KLQkvKgotCSAqIFNob3Vs
ZCBuZXZlciBiZSBjYWxsZWQgd2l0aG91dCBhIHZhbGlkIG5ldG1hcCBkZXNjcmlwdG9yCi0JICov
Ci0JYXNzZXJ0KHNjLT52c2Nfbm1kICE9IE5VTEwpOwotCi0JLyoKLQkgKiBCdXQsIHdpbGwgYmUg
Y2FsbGVkIHdoZW4gdGhlIHJ4IHJpbmcgaGFzbid0IHlldAotCSAqIGJlZW4gc2V0IHVwIG9yIHRo
ZSBndWVzdCBpcyByZXNldHRpbmcgdGhlIGRldmljZS4KLQkgKi8KLQlpZiAoIXNjLT52c2Nfcnhf
cmVhZHkgfHwgc2MtPnJlc2V0dGluZykgewotCQkvKgotCQkgKiBEcm9wIHRoZSBwYWNrZXQgYW5k
IHRyeSBsYXRlci4KLQkJICovCi0JCSh2b2lkKSBubV9uZXh0cGt0KHNjLT52c2Nfbm1kLCAodm9p
ZCAqKWR1bW15YnVmKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogQ2hlY2sgZm9yIGF2YWls
YWJsZSByeCBidWZmZXJzCi0JICovCi0JdnEgPSAmc2MtPnZzY19xdWV1ZXNbVlRORVRfUlhRXTsK
LQlpZiAoIXZxX2hhc19kZXNjcyh2cSkpIHsKLQkJLyoKLQkJICogRHJvcCB0aGUgcGFja2V0IGFu
ZCB0cnkgbGF0ZXIuICBJbnRlcnJ1cHQgb24KLQkJICogZW1wdHksIGlmIHRoYXQncyBuZWdvdGlh
dGVkLgotCQkgKi8KLQkJKHZvaWQpIG5tX25leHRwa3Qoc2MtPnZzY19ubWQsICh2b2lkICopZHVt
bXlidWYpOwotCQl2cV9lbmRjaGFpbnModnEsIDEpOwotCQlyZXR1cm47Ci0JfQotCi0JZG8gewot
CQkvKgotCQkgKiBHZXQgZGVzY3JpcHRvciBjaGFpbi4KLQkJICovCi0JCW4gPSB2cV9nZXRjaGFp
bih2cSwgJmlkeCwgaW92LCBWVE5FVF9NQVhTRUdTLCBOVUxMKTsKLQkJYXNzZXJ0KG4gPj0gMSAm
JiBuIDw9IFZUTkVUX01BWFNFR1MpOwotCi0JCS8qCi0JCSAqIEdldCBhIHBvaW50ZXIgdG8gdGhl
IHJ4IGhlYWRlciwgYW5kIHVzZSB0aGUKLQkJICogZGF0YSBpbW1lZGlhdGVseSBmb2xsb3dpbmcg
aXQgZm9yIHRoZSBwYWNrZXQgYnVmZmVyLgotCQkgKi8KLQkJdnJ4ID0gaW92WzBdLmlvdl9iYXNl
OwotCQlyaW92ID0gcnhfaW92X3RyaW0oaW92LCAmbiwgc2MtPnJ4X3ZoZHJsZW4pOwotCi0JCWxl
biA9IHBjaV92dG5ldF9uZXRtYXBfcmVhZHYoc2MtPnZzY19ubWQsIHJpb3YsIG4pOwogCiAJCWlm
IChsZW4gPT0gMCkgewogCQkJLyoKIAkJCSAqIE5vIG1vcmUgcGFja2V0cywgYnV0IHN0aWxsIHNv
bWUgYXZhaWwgcmluZwogCQkJICogZW50cmllcy4gIEludGVycnVwdCBpZiBuZWVkZWQvYXBwcm9w
cmlhdGUuCiAJCQkgKi8KLQkJCXZxX3JldGNoYWluKHZxKTsKKwkJCXZxX3JldGNoYWluKHZxKTsg
LyogcmV0dXJuIHRoZSBzbG90IHRvIHRoZSB2cSAqLwogCQkJdnFfZW5kY2hhaW5zKHZxLCAwKTsK
IAkJCXJldHVybjsKIAkJfQogCi0JCS8qCi0JCSAqIFRoZSBvbmx5IHZhbGlkIGZpZWxkIGluIHRo
ZSByeCBwYWNrZXQgaGVhZGVyIGlzIHRoZQotCQkgKiBudW1iZXIgb2YgYnVmZmVycyBpZiBtZXJn
ZWQgcnggYnVmcyB3ZXJlIG5lZ290aWF0ZWQuCi0JCSAqLwotCQltZW1zZXQodnJ4LCAwLCBzYy0+
cnhfdmhkcmxlbik7Ci0KLQkJaWYgKHNjLT5yeF9tZXJnZSkgewotCQkJc3RydWN0IHZpcnRpb19u
ZXRfcnhoZHIgKnZyeGg7Ci0KLQkJCXZyeGggPSB2cng7Ci0JCQl2cnhoLT52cmhfYnVmcyA9IDE7
Ci0JCX0KLQotCQkvKgotCQkgKiBSZWxlYXNlIHRoaXMgY2hhaW4gYW5kIGhhbmRsZSBtb3JlIGNo
YWlucy4KLQkJICovCi0JCXZxX3JlbGNoYWluKHZxLCBpZHgsIGxlbiArIHNjLT5yeF92aGRybGVu
KTsKKwkJLyogUHVibGlzaCB0aGUgaW5mbyB0byB0aGUgZ3Vlc3QgKi8KKwkJdnFfcmVsY2hhaW4o
dnEsIGlkeCwgKHVpbnQzMl90KWxlbik7CiAJfSB3aGlsZSAodnFfaGFzX2Rlc2NzKHZxKSk7CiAK
IAkvKiBJbnRlcnJ1cHQgaWYgbmVlZGVkLCBpbmNsdWRpbmcgZm9yIE5PVElGWV9PTl9FTVBUWS4g
Ki8KIAl2cV9lbmRjaGFpbnModnEsIDEpOwogfQogCisvKgorICogQ2FsbGVkIHdoZW4gdGhlcmUg
aXMgcmVhZCBhY3Rpdml0eSBvbiB0aGUgdGFwIGZpbGUgZGVzY3JpcHRvci4KKyAqIEVhY2ggYnVm
ZmVyIHBvc3RlZCBieSB0aGUgZ3Vlc3QgaXMgYXNzdW1lZCB0byBiZSBhYmxlIHRvIGNvbnRhaW4K
KyAqIGFuIGVudGlyZSBldGhlcm5ldCBmcmFtZSArIHJ4IGhlYWRlci4KKyAqLwogc3RhdGljIHZv
aWQKIHBjaV92dG5ldF9yeF9jYWxsYmFjayhpbnQgZmQsIGVudW0gZXZfdHlwZSB0eXBlLCB2b2lk
ICpwYXJhbSkKIHsKIAlzdHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpzYyA9IHBhcmFtOwogCisJKHZv
aWQpZmQ7ICh2b2lkKXR5cGU7CiAJcHRocmVhZF9tdXRleF9sb2NrKCZzYy0+cnhfbXR4KTsKLQlz
Yy0+cnhfaW5fcHJvZ3Jlc3MgPSAxOwotCXNjLT5wY2lfdnRuZXRfcngoc2MpOwotCXNjLT5yeF9p
bl9wcm9ncmVzcyA9IDA7CisJcGNpX3Z0bmV0X3J4KHNjKTsKIAlwdGhyZWFkX211dGV4X3VubG9j
aygmc2MtPnJ4X210eCk7Ci0KIH0KIAorLyogY2FsbGJhY2sgd2hlbiB3cml0aW5nIHRvIHRoZSBQ
Q0kgcmVnaXN0ZXIgKi8KIHN0YXRpYyB2b2lkCiBwY2lfdnRuZXRfcGluZ19yeHEodm9pZCAqdnNj
LCBzdHJ1Y3QgdnF1ZXVlX2luZm8gKnZxKQogewpAQCAtNjA1LDM1ICsyOTcsMzMgQEAKIAl9CiB9
CiAKKy8qIFRYIHByb2Nlc3NpbmcgKGd1ZXN0IHRvIGhvc3QpLCBjYWxsZWQgaW4gdGhlIHR4IHRo
cmVhZCAqLwogc3RhdGljIHZvaWQKIHBjaV92dG5ldF9wcm9jdHgoc3RydWN0IHBjaV92dG5ldF9z
b2Z0YyAqc2MsIHN0cnVjdCB2cXVldWVfaW5mbyAqdnEpCiB7CiAJc3RydWN0IGlvdmVjIGlvdltW
VE5FVF9NQVhTRUdTICsgMV07CiAJaW50IGksIG47Ci0JaW50IHBsZW4sIHRsZW47CisJdWludDMy
X3QgbGVuOwogCXVpbnQxNl90IGlkeDsKIAogCS8qCi0JICogT2J0YWluIGNoYWluIG9mIGRlc2Ny
aXB0b3JzLiAgVGhlIGZpcnN0IG9uZSBpcwotCSAqIHJlYWxseSB0aGUgaGVhZGVyIGRlc2NyaXB0
b3IsIHNvIHdlIG5lZWQgdG8gc3VtCi0JICogdXAgdHdvIGxlbmd0aHM6IHBhY2tldCBsZW5ndGgg
YW5kIHRyYW5zZmVyIGxlbmd0aC4KKwkgKiBPYnRhaW4gY2hhaW4gb2YgZGVzY3JpcHRvcnMuIFRo
ZSBmaXJzdCBkZXNjcmlwdG9yIGFsc28KKwkgKiBjb250YWlucyB0aGUgdmlydGlvLW5ldCBoZWFk
ZXIuCiAJICovCiAJbiA9IHZxX2dldGNoYWluKHZxLCAmaWR4LCBpb3YsIFZUTkVUX01BWFNFR1Ms
IE5VTEwpOwogCWFzc2VydChuID49IDEgJiYgbiA8PSBWVE5FVF9NQVhTRUdTKTsKLQlwbGVuID0g
MDsKLQl0bGVuID0gaW92WzBdLmlvdl9sZW47Ci0JZm9yIChpID0gMTsgaSA8IG47IGkrKykgewot
CQlwbGVuICs9IGlvdltpXS5pb3ZfbGVuOwotCQl0bGVuICs9IGlvdltpXS5pb3ZfbGVuOworCWxl
biA9IDA7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlsZW4gKz0gaW92W2ldLmlvdl9s
ZW47CiAJfQogCi0JRFBSSU5URigoInZpcnRpbzogcGFja2V0IHNlbmQsICVkIGJ5dGVzLCAlZCBz
ZWdzXG5cciIsIHBsZW4sIG4pKTsKLQlzYy0+cGNpX3Z0bmV0X3R4KHNjLCAmaW92WzFdLCBuIC0g
MSwgcGxlbik7CisJbmV0YmVfc2VuZChzYy0+dnNjX2JlLCBpb3YsIG4sIGxlbiwgMCAvKiBtb3Jl
ICovKTsKIAotCS8qIGNoYWluIGlzIHByb2Nlc3NlZCwgcmVsZWFzZSBpdCBhbmQgc2V0IHRsZW4g
Ki8KLQl2cV9yZWxjaGFpbih2cSwgaWR4LCB0bGVuKTsKKwkvKiBjaGFpbiBpcyBwcm9jZXNzZWQs
IHJlbGVhc2UgaXQgYW5kIHNldCBsZW4gKi8KKwl2cV9yZWxjaGFpbih2cSwgaWR4LCBsZW4pOwog
fQogCisvKiBjYWxsYmFjayB3aGVuIHdyaXRpbmcgdG8gdGhlIFBDSSByZWdpc3RlciAqLwogc3Rh
dGljIHZvaWQKIHBjaV92dG5ldF9waW5nX3R4cSh2b2lkICp2c2MsIHN0cnVjdCB2cXVldWVfaW5m
byAqdnEpCiB7CkBAIC02NjMsNiArMzUzLDE0IEBACiAJc3RydWN0IHZxdWV1ZV9pbmZvICp2cTsK
IAlpbnQgZXJyb3I7CiAKKwl7CisJCXN0cnVjdCBwY2lfZGV2aW5zdCAqcGkgPSBzYy0+dnNjX3Zz
LnZzX3BpOworCQljaGFyIHRuYW1lW01BWENPTUxFTiArIDFdOworCQlzbnByaW50Zih0bmFtZSwg
c2l6ZW9mKHRuYW1lKSwgInZ0bmV0LSVkOiVkIHR4IiwgcGktPnBpX3Nsb3QsCisJCQkJcGktPnBp
X2Z1bmMpOworCQlwdGhyZWFkX3NldF9uYW1lX25wKHB0aHJlYWRfc2VsZigpLCB0bmFtZSk7CisJ
fQorCiAJdnEgPSAmc2MtPnZzY19xdWV1ZXNbVlRORVRfVFhRXTsKIAogCS8qCkBAIC03MTcsMTA5
ICs0MTUsMjcgQEAKICNlbmRpZgogCiBzdGF0aWMgaW50Ci1wY2lfdnRuZXRfcGFyc2VtYWMoY2hh
ciAqbWFjX3N0ciwgdWludDhfdCAqbWFjX2FkZHIpCi17Ci0gICAgICAgIHN0cnVjdCBldGhlcl9h
ZGRyICplYTsKLSAgICAgICAgY2hhciAqdG1wc3RyOwotICAgICAgICBjaGFyIHplcm9fYWRkcltF
VEhFUl9BRERSX0xFTl0gPSB7IDAsIDAsIDAsIDAsIDAsIDAgfTsKLQotICAgICAgICB0bXBzdHIg
PSBzdHJzZXAoJm1hY19zdHIsIj0iKTsKLSAgICAgICAKLSAgICAgICAgaWYgKChtYWNfc3RyICE9
IE5VTEwpICYmICghc3RyY21wKHRtcHN0ciwibWFjIikpKSB7Ci0gICAgICAgICAgICAgICAgZWEg
PSBldGhlcl9hdG9uKG1hY19zdHIpOwotCi0gICAgICAgICAgICAgICAgaWYgKGVhID09IE5VTEwg
fHwgRVRIRVJfSVNfTVVMVElDQVNUKGVhLT5vY3RldCkgfHwKLSAgICAgICAgICAgICAgICAgICAg
bWVtY21wKGVhLT5vY3RldCwgemVyb19hZGRyLCBFVEhFUl9BRERSX0xFTikgPT0gMCkgewotCQkJ
ZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIE1BQyAlc1xuIiwgbWFjX3N0cik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gKEVJTlZBTCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkobWFjX2FkZHIsIGVhLT5vY3RldCwgRVRIRVJf
QUREUl9MRU4pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICgwKTsKLX0KLQotc3RhdGlj
IHZvaWQKLXBjaV92dG5ldF90YXBfc2V0dXAoc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2MsIGNo
YXIgKmRldm5hbWUpCi17Ci0JY2hhciB0YnVmWzgwXTsKLQotCXN0cmNweSh0YnVmLCAiL2Rldi8i
KTsKLQlzdHJsY2F0KHRidWYsIGRldm5hbWUsIHNpemVvZih0YnVmKSk7Ci0KLQlzYy0+cGNpX3Z0
bmV0X3J4ID0gcGNpX3Z0bmV0X3RhcF9yeDsKLQlzYy0+cGNpX3Z0bmV0X3R4ID0gcGNpX3Z0bmV0
X3RhcF90eDsKLQotCXNjLT52c2NfdGFwZmQgPSBvcGVuKHRidWYsIE9fUkRXUik7Ci0JaWYgKHNj
LT52c2NfdGFwZmQgPT0gLTEpIHsKLQkJV1BSSU5URigoIm9wZW4gb2YgdGFwIGRldmljZSAlcyBm
YWlsZWRcbiIsIHRidWYpKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogU2V0IG5vbi1ibG9j
a2luZyBhbmQgcmVnaXN0ZXIgZm9yIHJlYWQKLQkgKiBub3RpZmljYXRpb25zIHdpdGggdGhlIGV2
ZW50IGxvb3AKLQkgKi8KLQlpbnQgb3B0ID0gMTsKLQlpZiAoaW9jdGwoc2MtPnZzY190YXBmZCwg
RklPTkJJTywgJm9wdCkgPCAwKSB7Ci0JCVdQUklOVEYoKCJ0YXAgZGV2aWNlIE9fTk9OQkxPQ0sg
ZmFpbGVkXG4iKSk7Ci0JCWNsb3NlKHNjLT52c2NfdGFwZmQpOwotCQlzYy0+dnNjX3RhcGZkID0g
LTE7Ci0JfQotCi0Jc2MtPnZzY19tZXZwID0gbWV2ZW50X2FkZChzYy0+dnNjX3RhcGZkLAotCQkJ
CSAgRVZGX1JFQUQsCi0JCQkJICBwY2lfdnRuZXRfcnhfY2FsbGJhY2ssCi0JCQkJICBzYyk7Ci0J
aWYgKHNjLT52c2NfbWV2cCA9PSBOVUxMKSB7Ci0JCVdQUklOVEYoKCJDb3VsZCBub3QgcmVnaXN0
ZXIgZXZlbnRcbiIpKTsKLQkJY2xvc2Uoc2MtPnZzY190YXBmZCk7Ci0JCXNjLT52c2NfdGFwZmQg
PSAtMTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1wY2lfdnRuZXRfbmV0bWFwX3NldHVwKHN0cnVj
dCBwY2lfdnRuZXRfc29mdGMgKnNjLCBjaGFyICppZm5hbWUpCi17Ci0Jc2MtPnBjaV92dG5ldF9y
eCA9IHBjaV92dG5ldF9uZXRtYXBfcng7Ci0Jc2MtPnBjaV92dG5ldF90eCA9IHBjaV92dG5ldF9u
ZXRtYXBfdHg7Ci0KLQlzYy0+dnNjX25tZCA9IG5tX29wZW4oaWZuYW1lLCBOVUxMLCAwLCAwKTsK
LQlpZiAoc2MtPnZzY19ubWQgPT0gTlVMTCkgewotCQlXUFJJTlRGKCgib3BlbiBvZiBuZXRtYXAg
ZGV2aWNlICVzIGZhaWxlZFxuIiwgaWZuYW1lKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzYy0+dnNj
X21ldnAgPSBtZXZlbnRfYWRkKHNjLT52c2Nfbm1kLT5mZCwKLQkJCQkgIEVWRl9SRUFELAotCQkJ
CSAgcGNpX3Z0bmV0X3J4X2NhbGxiYWNrLAotCQkJCSAgc2MpOwotCWlmIChzYy0+dnNjX21ldnAg
PT0gTlVMTCkgewotCQlXUFJJTlRGKCgiQ291bGQgbm90IHJlZ2lzdGVyIGV2ZW50XG4iKSk7Ci0J
CW5tX2Nsb3NlKHNjLT52c2Nfbm1kKTsKLQkJc2MtPnZzY19ubWQgPSBOVUxMOwotCX0KLX0KLQot
c3RhdGljIGludAogcGNpX3Z0bmV0X2luaXQoc3RydWN0IHZtY3R4ICpjdHgsIHN0cnVjdCBwY2lf
ZGV2aW5zdCAqcGksIGNoYXIgKm9wdHMpCiB7Ci0JTUQ1X0NUWCBtZGN0eDsKLQl1bnNpZ25lZCBj
aGFyIGRpZ2VzdFsxNl07Ci0JY2hhciBuc3RyWzgwXTsKLQljaGFyIHRuYW1lW01BWENPTUxFTiAr
IDFdOwogCXN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjOwogCWNoYXIgKmRldm5hbWU7CiAJY2hh
ciAqdnRvcHRzOwogCWludCBtYWNfcHJvdmlkZWQ7CisJc3RydWN0IHZpcnRpb19jb25zdHMgKnZj
OwogCi0Jc2MgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBwY2lfdnRuZXRfc29mdGMpKTsKKwkv
KgorCSAqIEFsbG9jYXRlIGRhdGEgc3RydWN0dXJlcyBmb3IgZnVydGhlciB2aXJ0aW8gaW5pdGlh
bGl6YXRpb25zLgorCSAqIHNjIGFsc28gY29udGFpbnMgYSBjb3B5IG9mIHRoZSB2dG5ldF92aV9j
b25zdHMsCisJICogYmVjYXVzZSB0aGUgY2FwYWJpbGl0aWVzIGNoYW5nZSBkZXBlbmRpbmcgb24K
KwkgKiB0aGUgYmFja2VuZC4KKwkgKi8KKwlzYyA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBj
aV92dG5ldF9zb2Z0YykgKworCQkJc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fY29uc3RzKSk7CisJdmMg
PSAoc3RydWN0IHZpcnRpb19jb25zdHMgKikoc2MgKyAxKTsKKwltZW1jcHkodmMsICZ2dG5ldF92
aV9jb25zdHMsIHNpemVvZigqdmMpKTsKIAogCXB0aHJlYWRfbXV0ZXhfaW5pdCgmc2MtPnZzY19t
dHgsIE5VTEwpOwogCi0Jdmlfc29mdGNfbGlua3VwKCZzYy0+dnNjX3ZzLCAmdnRuZXRfdmlfY29u
c3RzLCBzYywgcGksIHNjLT52c2NfcXVldWVzKTsKLQlzYy0+dnNjX3ZzLnZzX210eCA9ICZzYy0+
dnNjX210eDsKLQogCXNjLT52c2NfcXVldWVzW1ZUTkVUX1JYUV0udnFfcXNpemUgPSBWVE5FVF9S
SU5HU1o7CiAJc2MtPnZzY19xdWV1ZXNbVlRORVRfUlhRXS52cV9ub3RpZnkgPSBwY2lfdnRuZXRf
cGluZ19yeHE7CiAJc2MtPnZzY19xdWV1ZXNbVlRORVRfVFhRXS52cV9xc2l6ZSA9IFZUTkVUX1JJ
TkdTWjsKQEAgLTgzMCwxMiArNDQ2LDEwIEBACiAjZW5kaWYKICAKIAkvKgotCSAqIEF0dGVtcHQg
dG8gb3BlbiB0aGUgdGFwIGRldmljZSBhbmQgcmVhZCB0aGUgTUFDIGFkZHJlc3MKKwkgKiBBdHRl
bXB0IHRvIG9wZW4gdGhlIGJhY2tlbmQgZGV2aWNlIGFuZCByZWFkIHRoZSBNQUMgYWRkcmVzcwog
CSAqIGlmIHNwZWNpZmllZAogCSAqLwogCW1hY19wcm92aWRlZCA9IDA7Ci0Jc2MtPnZzY190YXBm
ZCA9IC0xOwotCXNjLT52c2Nfbm1kID0gTlVMTDsKIAlpZiAob3B0cyAhPSBOVUxMKSB7CiAJCWlu
dCBlcnI7CiAKQEAgLTg0Myw3ICs0NTcsNyBAQAogCQkodm9pZCkgc3Ryc2VwKCZ2dG9wdHMsICIs
Iik7CiAKIAkJaWYgKHZ0b3B0cyAhPSBOVUxMKSB7Ci0JCQllcnIgPSBwY2lfdnRuZXRfcGFyc2Vt
YWModnRvcHRzLCBzYy0+dnNjX2NvbmZpZy5tYWMpOworCQkJZXJyID0gbmV0X3BhcnNlbWFjKHZ0
b3B0cywgc2MtPnZzY19jb25maWcubWFjKTsKIAkJCWlmIChlcnIgIT0gMCkgewogCQkJCWZyZWUo
ZGV2bmFtZSk7CiAJCQkJcmV0dXJuIChlcnIpOwpAQCAtODUxLDMzICs0NjUsMTggQEAKIAkJCW1h
Y19wcm92aWRlZCA9IDE7CiAJCX0KIAotCQlpZiAoc3RybmNtcChkZXZuYW1lLCAidmFsZSIsIDQp
ID09IDApCi0JCQlwY2lfdnRuZXRfbmV0bWFwX3NldHVwKHNjLCBkZXZuYW1lKTsKLQkJaWYgKHN0
cm5jbXAoZGV2bmFtZSwgInRhcCIsIDMpID09IDAgfHwKLQkJICAgIHN0cm5jbXAoZGV2bmFtZSwg
InZtbmV0IiwgNSkgPT0gMCkKLQkJCXBjaV92dG5ldF90YXBfc2V0dXAoc2MsIGRldm5hbWUpOwor
CQlzYy0+dnNjX2JlID0gbmV0YmVfaW5pdChkZXZuYW1lLCBwY2lfdnRuZXRfcnhfY2FsbGJhY2ss
IHNjKTsKKwkJaWYgKCFzYy0+dnNjX2JlKSB7CisJCQlXUFJJTlRGKCgibmV0IGJhY2tlbmQgaW5p
dGlhbGl6YXRpb24gZmFpbGVkXG4iKSk7CisJCX0gZWxzZSB7CisJCQl2Yy0+dmNfaHZfY2FwcyB8
PSBuZXRiZV9nZXRfY2FwKHNjLT52c2NfYmUpOworCQl9CiAKIAkJZnJlZShkZXZuYW1lKTsKIAl9
CiAKLQkvKgotCSAqIFRoZSBkZWZhdWx0IE1BQyBhZGRyZXNzIGlzIHRoZSBzdGFuZGFyZCBOZXRB
cHAgT1VJIG9mIDAwLWEwLTk4LAotCSAqIGZvbGxvd2VkIGJ5IGFuIE1ENSBvZiB0aGUgUENJIHNs
b3QvZnVuYyBudW1iZXIgYW5kIGRldiBuYW1lCi0JICovCiAJaWYgKCFtYWNfcHJvdmlkZWQpIHsK
LQkJc25wcmludGYobnN0ciwgc2l6ZW9mKG5zdHIpLCAiJWQtJWQtJXMiLCBwaS0+cGlfc2xvdCwK
LQkJICAgIHBpLT5waV9mdW5jLCB2bW5hbWUpOwotCi0JCU1ENUluaXQoJm1kY3R4KTsKLQkJTUQ1
VXBkYXRlKCZtZGN0eCwgbnN0ciwgc3RybGVuKG5zdHIpKTsKLQkJTUQ1RmluYWwoZGlnZXN0LCAm
bWRjdHgpOwotCi0JCXNjLT52c2NfY29uZmlnLm1hY1swXSA9IDB4MDA7Ci0JCXNjLT52c2NfY29u
ZmlnLm1hY1sxXSA9IDB4YTA7Ci0JCXNjLT52c2NfY29uZmlnLm1hY1syXSA9IDB4OTg7Ci0JCXNj
LT52c2NfY29uZmlnLm1hY1szXSA9IGRpZ2VzdFswXTsKLQkJc2MtPnZzY19jb25maWcubWFjWzRd
ID0gZGlnZXN0WzFdOwotCQlzYy0+dnNjX2NvbmZpZy5tYWNbNV0gPSBkaWdlc3RbMl07CisJCW5l
dF9nZW5tYWMocGksIHNjLT52c2NfY29uZmlnLm1hYyk7CiAJfQogCiAJLyogaW5pdGlhbGl6ZSBj
b25maWcgc3BhY2UgKi8KQEAgLTg4NywyMiArNDg2LDIzIEBACiAJcGNpX3NldF9jZmdkYXRhMTYo
cGksIFBDSVJfU1VCREVWXzAsIFZJUlRJT19UWVBFX05FVCk7CiAJcGNpX3NldF9jZmdkYXRhMTYo
cGksIFBDSVJfU1VCVkVORF8wLCBWSVJUSU9fVkVORE9SKTsKIAotCS8qIExpbmsgaXMgdXAgaWYg
d2UgbWFuYWdlZCB0byBvcGVuIHRhcCBkZXZpY2Ugb3IgdmFsZSBwb3J0LiAqLwotCXNjLT52c2Nf
Y29uZmlnLnN0YXR1cyA9IChvcHRzID09IE5VTEwgfHwgc2MtPnZzY190YXBmZCA+PSAwIHx8Ci0J
ICAgIHNjLT52c2Nfbm1kICE9IE5VTEwpOworCS8qIExpbmsgaXMgdXAgaWYgd2UgbWFuYWdlZCB0
byBvcGVuIGJhY2tlbmQgZGV2aWNlLiAqLworCXNjLT52c2NfY29uZmlnLnN0YXR1cyA9IChvcHRz
ID09IE5VTEwgfHwgc2MtPnZzY19iZSk7CiAJCisJdmlfc29mdGNfbGlua3VwKCZzYy0+dnNjX3Zz
LCB2Yywgc2MsIHBpLCBzYy0+dnNjX3F1ZXVlcyk7CisJc2MtPnZzY192cy52c19tdHggPSAmc2Mt
PnZzY19tdHg7CisKIAkvKiB1c2UgQkFSIDEgdG8gbWFwIE1TSS1YIHRhYmxlIGFuZCBQQkEsIGlm
IHdlJ3JlIHVzaW5nIE1TSS1YICovCiAJaWYgKHZpX2ludHJfaW5pdCgmc2MtPnZzY192cywgMSwg
ZmJzZHJ1bl92aXJ0aW9fbXNpeCgpKSkKIAkJcmV0dXJuICgxKTsKIAogCS8qIHVzZSBCQVIgMCB0
byBtYXAgY29uZmlnIHJlZ3MgaW4gSU8gc3BhY2UgKi8KLQl2aV9zZXRfaW9fYmFyKCZzYy0+dnNj
X3ZzLCAwKTsKKwl2aV9zZXRfaW9fYmFyKCZzYy0+dnNjX3ZzLCAwKTsJLyogY2FsbHMgaW50byB2
aXJ0aW8gKi8KIAogCXNjLT5yZXNldHRpbmcgPSAwOwogCiAJc2MtPnJ4X21lcmdlID0gMTsKIAlz
Yy0+cnhfdmhkcmxlbiA9IHNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9yeGhkcik7Ci0Jc2MtPnJ4
X2luX3Byb2dyZXNzID0gMDsKIAlwdGhyZWFkX211dGV4X2luaXQoJnNjLT5yeF9tdHgsIE5VTEwp
OyAKIAogCS8qIApAQCAtOTE0LDkgKzUxNCw2IEBACiAJcHRocmVhZF9tdXRleF9pbml0KCZzYy0+
dHhfbXR4LCBOVUxMKTsKIAlwdGhyZWFkX2NvbmRfaW5pdCgmc2MtPnR4X2NvbmQsIE5VTEwpOwog
CXB0aHJlYWRfY3JlYXRlKCZzYy0+dHhfdGlkLCBOVUxMLCBwY2lfdnRuZXRfdHhfdGhyZWFkLCAo
dm9pZCAqKXNjKTsKLQlzbnByaW50Zih0bmFtZSwgc2l6ZW9mKHRuYW1lKSwgInZ0bmV0LSVkOiVk
IHR4IiwgcGktPnBpX3Nsb3QsCi0JICAgIHBpLT5waV9mdW5jKTsKLSAgICAgICAgcHRocmVhZF9z
ZXRfbmFtZV9ucChzYy0+dHhfdGlkLCB0bmFtZSk7CiAKIAlyZXR1cm4gKDApOwogfQpAQCAtOTI3
LDggKzUyNCw4IEBACiAJc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2MgPSB2c2M7CiAJdm9pZCAq
cHRyOwogCi0JaWYgKG9mZnNldCA8IDYpIHsKLQkJYXNzZXJ0KG9mZnNldCArIHNpemUgPD0gNik7
CisJaWYgKG9mZnNldCA8IChpbnQpc2l6ZW9mKHNjLT52c2NfY29uZmlnLm1hYykpIHsKKwkJYXNz
ZXJ0KG9mZnNldCArIHNpemUgPD0gKGludClzaXplb2Yoc2MtPnZzY19jb25maWcubWFjKSk7CiAJ
CS8qCiAJCSAqIFRoZSBkcml2ZXIgaXMgYWxsb3dlZCB0byBjaGFuZ2UgdGhlIE1BQyBhZGRyZXNz
CiAJCSAqLwpAQCAtOTYwLDE0ICs1NTcsMTcgQEAKIAogCXNjLT52c2NfZmVhdHVyZXMgPSBuZWdv
dGlhdGVkX2ZlYXR1cmVzOwogCi0JaWYgKCEoc2MtPnZzY19mZWF0dXJlcyAmIFZJUlRJT19ORVRf
Rl9NUkdfUlhCVUYpKSB7CisJaWYgKCEobmVnb3RpYXRlZF9mZWF0dXJlcyAmIFZJUlRJT19ORVRf
Rl9NUkdfUlhCVUYpKSB7CiAJCXNjLT5yeF9tZXJnZSA9IDA7CiAJCS8qIG5vbi1tZXJnZSByeCBo
ZWFkZXIgaXMgMiBieXRlcyBzaG9ydGVyICovCiAJCXNjLT5yeF92aGRybGVuIC09IDI7CiAJfQor
CisJLyogVGVsbCB0aGUgYmFja2VuZCB0byBlbmFibGUgc29tZSBjYXBhYmlsaXRpZXMgaXQgaGFz
IGFkdmVydGlzZWQuICovCisJbmV0YmVfc2V0X2NhcChzYy0+dnNjX2JlLCBuZWdvdGlhdGVkX2Zl
YXR1cmVzLCBzYy0+cnhfdmhkcmxlbik7CiB9CiAKLXN0cnVjdCBwY2lfZGV2ZW11IHBjaV9kZV92
bmV0ID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2ZW11IHBjaV9kZV92bmV0ID0gewogCS5wZV9l
bXUgPSAJInZpcnRpby1uZXQiLAogCS5wZV9pbml0ID0JcGNpX3Z0bmV0X2luaXQsCiAJLnBlX2Jh
cndyaXRlID0JdmlfcGNpX3dyaXRlLApkaWZmIC11IC1yIC1OIHVzci9zcmMvdXNyLnNiaW4vYmh5
dmUvcGNpX3ZpcnRpb19uZXQuYy5vcmlnIC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL3BjaV92aXJ0
aW9fbmV0LmMub3JpZwotLS0gdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9wY2lfdmlydGlvX25ldC5j
Lm9yaWcJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3Vz
ci5zYmluL2JoeXZlL3BjaV92aXJ0aW9fbmV0LmMub3JpZwkyMDE2LTA5LTI5IDAwOjI1OjA3LjAw
MDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDk3NiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTEgTmV0QXBwLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkVUQVBQLCBJTkMgYGBBUyBJUycnIEFORAor
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBORVRBUFAsIElOQyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
CisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC91c3Iu
c2Jpbi9iaHl2ZS9wY2lfdmlydGlvX25ldC5jIDI5NjgyOSAyMDE2LTAzLTE0IDA4OjQ4OjE2WiBn
bm4gJAorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDog
cmVsZW5nLzExLjAvdXNyLnNiaW4vYmh5dmUvcGNpX3ZpcnRpb19uZXQuYyAyOTY4MjkgMjAxNi0w
My0xNCAwODo0ODoxNlogZ25uICQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1
ZGUgPHN5cy9saW5rZXJfc2V0Lmg+CisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2luY2x1ZGUg
PHN5cy91aW8uaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2F0
b21pYy5oPgorI2luY2x1ZGUgPG5ldC9ldGhlcm5ldC5oPgorI2lmbmRlZiBORVRNQVBfV0lUSF9M
SUJTCisjZGVmaW5lIE5FVE1BUF9XSVRIX0xJQlMKKyNlbmRpZgorI2luY2x1ZGUgPG5ldC9uZXRt
YXBfdXNlci5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2lu
Y2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+
CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2luY2x1ZGUgPHVu
aXN0ZC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPG1kNS5oPgorI2luY2x1ZGUg
PHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxwdGhyZWFkX25wLmg+CisKKyNpbmNsdWRlICJiaHl2ZXJ1
bi5oIgorI2luY2x1ZGUgInBjaV9lbXVsLmgiCisjaW5jbHVkZSAibWV2ZW50LmgiCisjaW5jbHVk
ZSAidmlydGlvLmgiCisKKyNkZWZpbmUgVlRORVRfUklOR1NaCTEwMjQKKworI2RlZmluZSBWVE5F
VF9NQVhTRUdTCTI1NgorCisvKgorICogSG9zdCBjYXBhYmlsaXRpZXMuICBOb3RlIHRoYXQgd2Ug
b25seSBvZmZlciBhIGZldyBvZiB0aGVzZS4KKyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1NV
TQkoMSA8PCAgMCkgLyogaG9zdCBoYW5kbGVzIHBhcnRpYWwgY2tzdW0gKi8KKyNkZWZpbmUJVklS
VElPX05FVF9GX0dVRVNUX0NTVU0JKDEgPDwgIDEpIC8qIGd1ZXN0IGhhbmRsZXMgcGFydGlhbCBj
a3N1bSAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfTUFDCSgxIDw8ICA1KSAvKiBob3N0IHN1cHBs
aWVzIE1BQyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1NPX0RFUFJFQwkoMSA8PCAgNikgLyog
ZGVwcmVjYXRlZDogaG9zdCBoYW5kbGVzIEdTTyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VF
U1RfVFNPNAkoMSA8PCAgNykgLyogZ3Vlc3QgY2FuIHJjdiBUU092NCAqLworI2RlZmluZQlWSVJU
SU9fTkVUX0ZfR1VFU1RfVFNPNgkoMSA8PCAgOCkgLyogZ3Vlc3QgY2FuIHJjdiBUU092NiAqLwor
I2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfRUNOCSgxIDw8ICA5KSAvKiBndWVzdCBjYW4gcmN2
IFRTTyB3aXRoIEVDTiAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfVUZPCSgxIDw8IDEw
KSAvKiBndWVzdCBjYW4gcmN2IFVGTyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfSE9TVF9UU080
CSgxIDw8IDExKSAvKiBob3N0IGNhbiByY3YgVFNPdjQgKi8KKyNkZWZpbmUJVklSVElPX05FVF9G
X0hPU1RfVFNPNgkoMSA8PCAxMikgLyogaG9zdCBjYW4gcmN2IFRTT3Y2ICovCisjZGVmaW5lCVZJ
UlRJT19ORVRfRl9IT1NUX0VDTgkoMSA8PCAxMykgLyogaG9zdCBjYW4gcmN2IFRTTyB3aXRoIEVD
TiAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfSE9TVF9VRk8JKDEgPDwgMTQpIC8qIGhvc3QgY2Fu
IHJjdiBVRk8gKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX01SR19SWEJVRgkoMSA8PCAxNSkgLyog
aG9zdCBjYW4gbWVyZ2UgUlggYnVmZmVycyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfU1RBVFVT
CSgxIDw8IDE2KSAvKiBjb25maWcgc3RhdHVzIGZpZWxkIGF2YWlsYWJsZSAqLworI2RlZmluZQlW
SVJUSU9fTkVUX0ZfQ1RSTF9WUQkoMSA8PCAxNykgLyogY29udHJvbCBjaGFubmVsIGF2YWlsYWJs
ZSAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1RSTF9SWAkoMSA8PCAxOCkgLyogY29udHJvbCBj
aGFubmVsIFJYIG1vZGUgc3VwcG9ydCAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFO
CSgxIDw8IDE5KSAvKiBjb250cm9sIGNoYW5uZWwgVkxBTiBmaWx0ZXJpbmcgKi8KKyNkZWZpbmUJ
VklSVElPX05FVF9GX0dVRVNUX0FOTk9VTkNFIFwKKwkJCQkoMSA8PCAyMSkgLyogZ3Vlc3QgY2Fu
IHNlbmQgZ3JhdHVpdG91cyBwa3RzICovCisKKyNkZWZpbmUgVlRORVRfU19IT1NUQ0FQUyAgICAg
IFwKKyAgKCBWSVJUSU9fTkVUX0ZfTUFDIHwgVklSVElPX05FVF9GX01SR19SWEJVRiB8IFZJUlRJ
T19ORVRfRl9TVEFUVVMgfCBcCisgICAgVklSVElPX0ZfTk9USUZZX09OX0VNUFRZIHwgVklSVElP
X1JJTkdfRl9JTkRJUkVDVF9ERVNDKQorCisvKgorICogUENJIGNvbmZpZy1zcGFjZSAicmVnaXN0
ZXJzIgorICovCitzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcgeworCXVpbnQ4X3QgIG1hY1s2XTsK
Kwl1aW50MTZfdCBzdGF0dXM7Cit9IF9fcGFja2VkOworCisvKgorICogUXVldWUgZGVmaW5pdGlv
bnMuCisgKi8KKyNkZWZpbmUgVlRORVRfUlhRCTAKKyNkZWZpbmUgVlRORVRfVFhRCTEKKyNkZWZp
bmUgVlRORVRfQ1RMUQkyCS8qIE5COiBub3QgeWV0IHN1cHBvcnRlZCAqLworCisjZGVmaW5lIFZU
TkVUX01BWFEJMworCisvKgorICogRml4ZWQgbmV0d29yayBoZWFkZXIgc2l6ZQorICovCitzdHJ1
Y3QgdmlydGlvX25ldF9yeGhkciB7CisJdWludDhfdAkJdnJoX2ZsYWdzOworCXVpbnQ4X3QJCXZy
aF9nc29fdHlwZTsKKwl1aW50MTZfdAl2cmhfaGRyX2xlbjsKKwl1aW50MTZfdAl2cmhfZ3NvX3Np
emU7CisJdWludDE2X3QJdnJoX2NzdW1fc3RhcnQ7CisJdWludDE2X3QJdnJoX2NzdW1fb2Zmc2V0
OworCXVpbnQxNl90CXZyaF9idWZzOworfSBfX3BhY2tlZDsKKworLyoKKyAqIERlYnVnIHByaW50
ZgorICovCitzdGF0aWMgaW50IHBjaV92dG5ldF9kZWJ1ZzsKKyNkZWZpbmUgRFBSSU5URihwYXJh
bXMpIGlmIChwY2lfdnRuZXRfZGVidWcpIHByaW50ZiBwYXJhbXMKKyNkZWZpbmUgV1BSSU5URihw
YXJhbXMpIHByaW50ZiBwYXJhbXMKKworLyoKKyAqIFBlci1kZXZpY2Ugc29mdGMKKyAqLworc3Ry
dWN0IHBjaV92dG5ldF9zb2Z0YyB7CisJc3RydWN0IHZpcnRpb19zb2Z0YyB2c2NfdnM7CisJc3Ry
dWN0IHZxdWV1ZV9pbmZvIHZzY19xdWV1ZXNbVlRORVRfTUFYUSAtIDFdOworCXB0aHJlYWRfbXV0
ZXhfdCB2c2NfbXR4OworCXN0cnVjdCBtZXZlbnQJKnZzY19tZXZwOworCisJaW50CQl2c2NfdGFw
ZmQ7CisJc3RydWN0IG5tX2Rlc2MJKnZzY19ubWQ7CisKKwlpbnQJCXZzY19yeF9yZWFkeTsKKwl2
b2xhdGlsZSBpbnQJcmVzZXR0aW5nOwkvKiBzZXQgYW5kIGNoZWNrZWQgb3V0c2lkZSBsb2NrICov
CisKKwl1aW50NjRfdAl2c2NfZmVhdHVyZXM7CS8qIG5lZ290aWF0ZWQgZmVhdHVyZXMgKi8KKwkK
KwlzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcgdnNjX2NvbmZpZzsKKworCXB0aHJlYWRfbXV0ZXhf
dAlyeF9tdHg7CisJaW50CQlyeF9pbl9wcm9ncmVzczsKKwlpbnQJCXJ4X3ZoZHJsZW47CisJaW50
CQlyeF9tZXJnZTsJLyogbWVyZ2VkIHJ4IGJ1ZnMgaW4gdXNlICovCisKKwlwdGhyZWFkX3QgCXR4
X3RpZDsKKwlwdGhyZWFkX211dGV4X3QJdHhfbXR4OworCXB0aHJlYWRfY29uZF90CXR4X2NvbmQ7
CisJaW50CQl0eF9pbl9wcm9ncmVzczsKKworCXZvaWQgKCpwY2lfdnRuZXRfcngpKHN0cnVjdCBw
Y2lfdnRuZXRfc29mdGMgKnNjKTsKKwl2b2lkICgqcGNpX3Z0bmV0X3R4KShzdHJ1Y3QgcGNpX3Z0
bmV0X3NvZnRjICpzYywgc3RydWN0IGlvdmVjICppb3YsCisJCQkgICAgIGludCBpb3ZjbnQsIGlu
dCBsZW4pOworfTsKKworc3RhdGljIHZvaWQgcGNpX3Z0bmV0X3Jlc2V0KHZvaWQgKik7CisvKiBz
dGF0aWMgdm9pZCBwY2lfdnRuZXRfbm90aWZ5KHZvaWQgKiwgc3RydWN0IHZxdWV1ZV9pbmZvICop
OyAqLworc3RhdGljIGludCBwY2lfdnRuZXRfY2ZncmVhZCh2b2lkICosIGludCwgaW50LCB1aW50
MzJfdCAqKTsKK3N0YXRpYyBpbnQgcGNpX3Z0bmV0X2NmZ3dyaXRlKHZvaWQgKiwgaW50LCBpbnQs
IHVpbnQzMl90KTsKK3N0YXRpYyB2b2lkIHBjaV92dG5ldF9uZWdfZmVhdHVyZXModm9pZCAqLCB1
aW50NjRfdCk7CisKK3N0YXRpYyBzdHJ1Y3QgdmlydGlvX2NvbnN0cyB2dG5ldF92aV9jb25zdHMg
PSB7CisJInZ0bmV0IiwJCS8qIG91ciBuYW1lICovCisJVlRORVRfTUFYUSAtIDEsCQkvKiB3ZSBj
dXJyZW50bHkgc3VwcG9ydCAyIHZpcnRxdWV1ZXMgKi8KKwlzaXplb2Yoc3RydWN0IHZpcnRpb19u
ZXRfY29uZmlnKSwgLyogY29uZmlnIHJlZyBzaXplICovCisJcGNpX3Z0bmV0X3Jlc2V0LAkvKiBy
ZXNldCAqLworCU5VTEwsCQkJLyogZGV2aWNlLXdpZGUgcW5vdGlmeSAtLSBub3QgdXNlZCAqLwor
CXBjaV92dG5ldF9jZmdyZWFkLAkvKiByZWFkIFBDSSBjb25maWcgKi8KKwlwY2lfdnRuZXRfY2Zn
d3JpdGUsCS8qIHdyaXRlIFBDSSBjb25maWcgKi8KKwlwY2lfdnRuZXRfbmVnX2ZlYXR1cmVzLAkv
KiBhcHBseSBuZWdvdGlhdGVkIGZlYXR1cmVzICovCisJVlRORVRfU19IT1NUQ0FQUywJLyogb3Vy
IGNhcGFiaWxpdGllcyAqLworfTsKKworLyoKKyAqIElmIHRoZSB0cmFuc21pdCB0aHJlYWQgaXMg
YWN0aXZlIHRoZW4gc3RhbGwgdW50aWwgaXQgaXMgZG9uZS4KKyAqLworc3RhdGljIHZvaWQKK3Bj
aV92dG5ldF90eHdhaXQoc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2MpCit7CisKKwlwdGhyZWFk
X211dGV4X2xvY2soJnNjLT50eF9tdHgpOworCXdoaWxlIChzYy0+dHhfaW5fcHJvZ3Jlc3MpIHsK
KwkJcHRocmVhZF9tdXRleF91bmxvY2soJnNjLT50eF9tdHgpOworCQl1c2xlZXAoMTAwMDApOwor
CQlwdGhyZWFkX211dGV4X2xvY2soJnNjLT50eF9tdHgpOworCX0KKwlwdGhyZWFkX211dGV4X3Vu
bG9jaygmc2MtPnR4X210eCk7Cit9CisKKy8qCisgKiBJZiB0aGUgcmVjZWl2ZSB0aHJlYWQgaXMg
YWN0aXZlIHRoZW4gc3RhbGwgdW50aWwgaXQgaXMgZG9uZS4KKyAqLworc3RhdGljIHZvaWQKK3Bj
aV92dG5ldF9yeHdhaXQoc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2MpCit7CisKKwlwdGhyZWFk
X211dGV4X2xvY2soJnNjLT5yeF9tdHgpOworCXdoaWxlIChzYy0+cnhfaW5fcHJvZ3Jlc3MpIHsK
KwkJcHRocmVhZF9tdXRleF91bmxvY2soJnNjLT5yeF9tdHgpOworCQl1c2xlZXAoMTAwMDApOwor
CQlwdGhyZWFkX211dGV4X2xvY2soJnNjLT5yeF9tdHgpOworCX0KKwlwdGhyZWFkX211dGV4X3Vu
bG9jaygmc2MtPnJ4X210eCk7Cit9CisKK3N0YXRpYyB2b2lkCitwY2lfdnRuZXRfcmVzZXQodm9p
ZCAqdnNjKQoreworCXN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjID0gdnNjOworCisJRFBSSU5U
RigoInZ0bmV0OiBkZXZpY2UgcmVzZXQgcmVxdWVzdGVkICFcbiIpKTsKKworCXNjLT5yZXNldHRp
bmcgPSAxOworCisJLyoKKwkgKiBXYWl0IGZvciB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgdGhy
ZWFkcyB0byBmaW5pc2ggdGhlaXIKKwkgKiBwcm9jZXNzaW5nLgorCSAqLworCXBjaV92dG5ldF90
eHdhaXQoc2MpOworCXBjaV92dG5ldF9yeHdhaXQoc2MpOworCisJc2MtPnZzY19yeF9yZWFkeSA9
IDA7CisJc2MtPnJ4X21lcmdlID0gMTsKKwlzYy0+cnhfdmhkcmxlbiA9IHNpemVvZihzdHJ1Y3Qg
dmlydGlvX25ldF9yeGhkcik7CisKKwkvKiBub3cgcmVzZXQgcmluZ3MsIE1TSS1YIHZlY3RvcnMs
IGFuZCBuZWdvdGlhdGVkIGNhcGFiaWxpdGllcyAqLworCXZpX3Jlc2V0X2Rldigmc2MtPnZzY192
cyk7CisKKwlzYy0+cmVzZXR0aW5nID0gMDsKK30KKworLyoKKyAqIENhbGxlZCB0byBzZW5kIGEg
YnVmZmVyIGNoYWluIG91dCB0byB0aGUgdGFwIGRldmljZQorICovCitzdGF0aWMgdm9pZAorcGNp
X3Z0bmV0X3RhcF90eChzdHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpzYywgc3RydWN0IGlvdmVjICpp
b3YsIGludCBpb3ZjbnQsCisJCSBpbnQgbGVuKQoreworCXN0YXRpYyBjaGFyIHBhZFs2MF07IC8q
IGFsbCB6ZXJvIGJ5dGVzICovCisKKwlpZiAoc2MtPnZzY190YXBmZCA9PSAtMSkKKwkJcmV0dXJu
OworCisJLyoKKwkgKiBJZiB0aGUgbGVuZ3RoIGlzIDwgNjAsIHBhZCBvdXQgdG8gdGhhdCBhbmQg
YWRkIHRoZQorCSAqIGV4dHJhIHplcm8nZCBzZWdtZW50IHRvIHRoZSBpb3YuIEl0IGlzIGd1YXJh
bnRlZWQgdGhhdAorCSAqIHRoZXJlIGlzIGFsd2F5cyBhbiBleHRyYSBpb3YgYXZhaWxhYmxlIGJ5
IHRoZSBjYWxsZXIuCisJICovCisJaWYgKGxlbiA8IDYwKSB7CisJCWlvdltpb3ZjbnRdLmlvdl9i
YXNlID0gcGFkOworCQlpb3ZbaW92Y250XS5pb3ZfbGVuID0gNjAgLSBsZW47CisJCWlvdmNudCsr
OworCX0KKwkodm9pZCkgd3JpdGV2KHNjLT52c2NfdGFwZmQsIGlvdiwgaW92Y250KTsKK30KKwor
LyoKKyAqICBDYWxsZWQgd2hlbiB0aGVyZSBpcyByZWFkIGFjdGl2aXR5IG9uIHRoZSB0YXAgZmls
ZSBkZXNjcmlwdG9yLgorICogRWFjaCBidWZmZXIgcG9zdGVkIGJ5IHRoZSBndWVzdCBpcyBhc3N1
bWVkIHRvIGJlIGFibGUgdG8gY29udGFpbgorICogYW4gZW50aXJlIGV0aGVybmV0IGZyYW1lICsg
cnggaGVhZGVyLgorICogIE1QIG5vdGU6IHRoZSBkdW1teWJ1ZiBpcyBvbmx5IHVzZWQgZm9yIGRp
c2NhcmRpbmcgZnJhbWVzLCBzbyB0aGVyZQorICogaXMgbm8gbmVlZCBmb3IgaXQgdG8gYmUgcGVy
LXZ0bmV0IG9yIGxvY2tlZC4KKyAqLworc3RhdGljIHVpbnQ4X3QgZHVtbXlidWZbMjA0OF07CisK
K3N0YXRpYyBfX2lubGluZSBzdHJ1Y3QgaW92ZWMgKgorcnhfaW92X3RyaW0oc3RydWN0IGlvdmVj
ICppb3YsIGludCAqbmlvdiwgaW50IHRsZW4pCit7CisJc3RydWN0IGlvdmVjICpyaW92OworCisJ
LyogWFhYIHNob3J0LWN1dDogYXNzdW1lIGZpcnN0IHNlZ21lbnQgaXMgPj0gdGxlbiAqLworCWFz
c2VydChpb3ZbMF0uaW92X2xlbiA+PSB0bGVuKTsKKworCWlvdlswXS5pb3ZfbGVuIC09IHRsZW47
CisJaWYgKGlvdlswXS5pb3ZfbGVuID09IDApIHsKKwkJYXNzZXJ0KCpuaW92ID4gMSk7CisJCSpu
aW92IC09IDE7CisJCXJpb3YgPSAmaW92WzFdOworCX0gZWxzZSB7CisJCWlvdlswXS5pb3ZfYmFz
ZSA9ICh2b2lkICopKCh1aW50cHRyX3QpaW92WzBdLmlvdl9iYXNlICsgdGxlbik7CisJCXJpb3Yg
PSAmaW92WzBdOworCX0KKworCXJldHVybiAocmlvdik7Cit9CisKK3N0YXRpYyB2b2lkCitwY2lf
dnRuZXRfdGFwX3J4KHN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjKQoreworCXN0cnVjdCBpb3Zl
YyBpb3ZbVlRORVRfTUFYU0VHU10sICpyaW92OworCXN0cnVjdCB2cXVldWVfaW5mbyAqdnE7CisJ
dm9pZCAqdnJ4OworCWludCBsZW4sIG47CisJdWludDE2X3QgaWR4OworCisJLyoKKwkgKiBTaG91
bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGhvdXQgYSB2YWxpZCB0YXAgZmQKKwkgKi8KKwlhc3NlcnQo
c2MtPnZzY190YXBmZCAhPSAtMSk7CisKKwkvKgorCSAqIEJ1dCwgd2lsbCBiZSBjYWxsZWQgd2hl
biB0aGUgcnggcmluZyBoYXNuJ3QgeWV0CisJICogYmVlbiBzZXQgdXAgb3IgdGhlIGd1ZXN0IGlz
IHJlc2V0dGluZyB0aGUgZGV2aWNlLgorCSAqLworCWlmICghc2MtPnZzY19yeF9yZWFkeSB8fCBz
Yy0+cmVzZXR0aW5nKSB7CisJCS8qCisJCSAqIERyb3AgdGhlIHBhY2tldCBhbmQgdHJ5IGxhdGVy
LgorCQkgKi8KKwkJKHZvaWQpIHJlYWQoc2MtPnZzY190YXBmZCwgZHVtbXlidWYsIHNpemVvZihk
dW1teWJ1ZikpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBDaGVjayBmb3IgYXZhaWxhYmxl
IHJ4IGJ1ZmZlcnMKKwkgKi8KKwl2cSA9ICZzYy0+dnNjX3F1ZXVlc1tWVE5FVF9SWFFdOworCWlm
ICghdnFfaGFzX2Rlc2NzKHZxKSkgeworCQkvKgorCQkgKiBEcm9wIHRoZSBwYWNrZXQgYW5kIHRy
eSBsYXRlci4gIEludGVycnVwdCBvbgorCQkgKiBlbXB0eSwgaWYgdGhhdCdzIG5lZ290aWF0ZWQu
CisJCSAqLworCQkodm9pZCkgcmVhZChzYy0+dnNjX3RhcGZkLCBkdW1teWJ1Ziwgc2l6ZW9mKGR1
bW15YnVmKSk7CisJCXZxX2VuZGNoYWlucyh2cSwgMSk7CisJCXJldHVybjsKKwl9CisKKwlkbyB7
CisJCS8qCisJCSAqIEdldCBkZXNjcmlwdG9yIGNoYWluLgorCQkgKi8KKwkJbiA9IHZxX2dldGNo
YWluKHZxLCAmaWR4LCBpb3YsIFZUTkVUX01BWFNFR1MsIE5VTEwpOworCQlhc3NlcnQobiA+PSAx
ICYmIG4gPD0gVlRORVRfTUFYU0VHUyk7CisKKwkJLyoKKwkJICogR2V0IGEgcG9pbnRlciB0byB0
aGUgcnggaGVhZGVyLCBhbmQgdXNlIHRoZQorCQkgKiBkYXRhIGltbWVkaWF0ZWx5IGZvbGxvd2lu
ZyBpdCBmb3IgdGhlIHBhY2tldCBidWZmZXIuCisJCSAqLworCQl2cnggPSBpb3ZbMF0uaW92X2Jh
c2U7CisJCXJpb3YgPSByeF9pb3ZfdHJpbShpb3YsICZuLCBzYy0+cnhfdmhkcmxlbik7CisKKwkJ
bGVuID0gcmVhZHYoc2MtPnZzY190YXBmZCwgcmlvdiwgbik7CisKKwkJaWYgKGxlbiA8IDAgJiYg
ZXJybm8gPT0gRVdPVUxEQkxPQ0spIHsKKwkJCS8qCisJCQkgKiBObyBtb3JlIHBhY2tldHMsIGJ1
dCBzdGlsbCBzb21lIGF2YWlsIHJpbmcKKwkJCSAqIGVudHJpZXMuICBJbnRlcnJ1cHQgaWYgbmVl
ZGVkL2FwcHJvcHJpYXRlLgorCQkJICovCisJCQl2cV9yZXRjaGFpbih2cSk7CisJCQl2cV9lbmRj
aGFpbnModnEsIDApOworCQkJcmV0dXJuOworCQl9CisKKwkJLyoKKwkJICogVGhlIG9ubHkgdmFs
aWQgZmllbGQgaW4gdGhlIHJ4IHBhY2tldCBoZWFkZXIgaXMgdGhlCisJCSAqIG51bWJlciBvZiBi
dWZmZXJzIGlmIG1lcmdlZCByeCBidWZzIHdlcmUgbmVnb3RpYXRlZC4KKwkJICovCisJCW1lbXNl
dCh2cngsIDAsIHNjLT5yeF92aGRybGVuKTsKKworCQlpZiAoc2MtPnJ4X21lcmdlKSB7CisJCQlz
dHJ1Y3QgdmlydGlvX25ldF9yeGhkciAqdnJ4aDsKKworCQkJdnJ4aCA9IHZyeDsKKwkJCXZyeGgt
PnZyaF9idWZzID0gMTsKKwkJfQorCisJCS8qCisJCSAqIFJlbGVhc2UgdGhpcyBjaGFpbiBhbmQg
aGFuZGxlIG1vcmUgY2hhaW5zLgorCQkgKi8KKwkJdnFfcmVsY2hhaW4odnEsIGlkeCwgbGVuICsg
c2MtPnJ4X3ZoZHJsZW4pOworCX0gd2hpbGUgKHZxX2hhc19kZXNjcyh2cSkpOworCisJLyogSW50
ZXJydXB0IGlmIG5lZWRlZCwgaW5jbHVkaW5nIGZvciBOT1RJRllfT05fRU1QVFkuICovCisJdnFf
ZW5kY2hhaW5zKHZxLCAxKTsKK30KKworc3RhdGljIF9faW5saW5lIGludAorcGNpX3Z0bmV0X25l
dG1hcF93cml0ZXYoc3RydWN0IG5tX2Rlc2MgKm5tZCwgc3RydWN0IGlvdmVjICppb3YsIGludCBp
b3ZjbnQpCit7CisJaW50IHIsIGk7CisJaW50IGxlbiA9IDA7CisKKwlmb3IgKHIgPSBubWQtPmN1
cl90eF9yaW5nOyA7ICkgeworCQlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJpbmcgPSBORVRNQVBfVFhS
SU5HKG5tZC0+bmlmcCwgcik7CisJCXVpbnQzMl90IGN1ciwgaWR4OworCQljaGFyICpidWY7CisK
KwkJaWYgKG5tX3JpbmdfZW1wdHkocmluZykpIHsKKwkJCXIrKzsKKwkJCWlmIChyID4gbm1kLT5s
YXN0X3R4X3JpbmcpCisJCQkJciA9IG5tZC0+Zmlyc3RfdHhfcmluZzsKKwkJCWlmIChyID09IG5t
ZC0+Y3VyX3R4X3JpbmcpCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKKwkJfQorCQljdXIgPSBy
aW5nLT5jdXI7CisJCWlkeCA9IHJpbmctPnNsb3RbY3VyXS5idWZfaWR4OworCQlidWYgPSBORVRN
QVBfQlVGKHJpbmcsIGlkeCk7CisKKwkJZm9yIChpID0gMDsgaSA8IGlvdmNudDsgaSsrKSB7CisJ
CQlpZiAobGVuICsgaW92W2ldLmlvdl9sZW4gPiAyMDQ4KQorCQkJCWJyZWFrOworCQkJbWVtY3B5
KCZidWZbbGVuXSwgaW92W2ldLmlvdl9iYXNlLCBpb3ZbaV0uaW92X2xlbik7CisJCQlsZW4gKz0g
aW92W2ldLmlvdl9sZW47CisJCX0KKwkJcmluZy0+c2xvdFtjdXJdLmxlbiA9IGxlbjsKKwkJcmlu
Zy0+aGVhZCA9IHJpbmctPmN1ciA9IG5tX3JpbmdfbmV4dChyaW5nLCBjdXIpOworCQlubWQtPmN1
cl90eF9yaW5nID0gcjsKKwkJaW9jdGwobm1kLT5mZCwgTklPQ1RYU1lOQywgTlVMTCk7CisJCWJy
ZWFrOworCX0KKworCXJldHVybiAobGVuKTsKK30KKworc3RhdGljIF9faW5saW5lIGludAorcGNp
X3Z0bmV0X25ldG1hcF9yZWFkdihzdHJ1Y3Qgbm1fZGVzYyAqbm1kLCBzdHJ1Y3QgaW92ZWMgKmlv
diwgaW50IGlvdmNudCkKK3sKKwlpbnQgbGVuID0gMDsKKwlpbnQgaSA9IDA7CisJaW50IHI7CisK
Kwlmb3IgKHIgPSBubWQtPmN1cl9yeF9yaW5nOyA7ICkgeworCQlzdHJ1Y3QgbmV0bWFwX3Jpbmcg
KnJpbmcgPSBORVRNQVBfUlhSSU5HKG5tZC0+bmlmcCwgcik7CisJCXVpbnQzMl90IGN1ciwgaWR4
OworCQljaGFyICpidWY7CisJCXNpemVfdCBsZWZ0OworCisJCWlmIChubV9yaW5nX2VtcHR5KHJp
bmcpKSB7CisJCQlyKys7CisJCQlpZiAociA+IG5tZC0+bGFzdF9yeF9yaW5nKQorCQkJCXIgPSBu
bWQtPmZpcnN0X3J4X3Jpbmc7CisJCQlpZiAociA9PSBubWQtPmN1cl9yeF9yaW5nKQorCQkJCWJy
ZWFrOworCQkJY29udGludWU7CisJCX0KKwkJY3VyID0gcmluZy0+Y3VyOworCQlpZHggPSByaW5n
LT5zbG90W2N1cl0uYnVmX2lkeDsKKwkJYnVmID0gTkVUTUFQX0JVRihyaW5nLCBpZHgpOworCQls
ZWZ0ID0gcmluZy0+c2xvdFtjdXJdLmxlbjsKKworCQlmb3IgKGkgPSAwOyBpIDwgaW92Y250ICYm
IGxlZnQgPiAwOyBpKyspIHsKKwkJCWlmIChpb3ZbaV0uaW92X2xlbiA+IGxlZnQpCisJCQkJaW92
W2ldLmlvdl9sZW4gPSBsZWZ0OworCQkJbWVtY3B5KGlvdltpXS5pb3ZfYmFzZSwgJmJ1ZltsZW5d
LCBpb3ZbaV0uaW92X2xlbik7CisJCQlsZW4gKz0gaW92W2ldLmlvdl9sZW47CisJCQlsZWZ0IC09
IGlvdltpXS5pb3ZfbGVuOworCQl9CisJCXJpbmctPmhlYWQgPSByaW5nLT5jdXIgPSBubV9yaW5n
X25leHQocmluZywgY3VyKTsKKwkJbm1kLT5jdXJfcnhfcmluZyA9IHI7CisJCWlvY3RsKG5tZC0+
ZmQsIE5JT0NSWFNZTkMsIE5VTEwpOworCQlicmVhazsKKwl9CisJZm9yICg7IGkgPCBpb3ZjbnQ7
IGkrKykKKwkJaW92W2ldLmlvdl9sZW4gPSAwOworCisJcmV0dXJuIChsZW4pOworfQorCisvKgor
ICogQ2FsbGVkIHRvIHNlbmQgYSBidWZmZXIgY2hhaW4gb3V0IHRvIHRoZSB2YWxlIHBvcnQKKyAq
Lworc3RhdGljIHZvaWQKK3BjaV92dG5ldF9uZXRtYXBfdHgoc3RydWN0IHBjaV92dG5ldF9zb2Z0
YyAqc2MsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250LAorCQkgICAgaW50IGxlbikKK3sK
KwlzdGF0aWMgY2hhciBwYWRbNjBdOyAvKiBhbGwgemVybyBieXRlcyAqLworCisJaWYgKHNjLT52
c2Nfbm1kID09IE5VTEwpCisJCXJldHVybjsKKworCS8qCisJICogSWYgdGhlIGxlbmd0aCBpcyA8
IDYwLCBwYWQgb3V0IHRvIHRoYXQgYW5kIGFkZCB0aGUKKwkgKiBleHRyYSB6ZXJvJ2Qgc2VnbWVu
dCB0byB0aGUgaW92LiBJdCBpcyBndWFyYW50ZWVkIHRoYXQKKwkgKiB0aGVyZSBpcyBhbHdheXMg
YW4gZXh0cmEgaW92IGF2YWlsYWJsZSBieSB0aGUgY2FsbGVyLgorCSAqLworCWlmIChsZW4gPCA2
MCkgeworCQlpb3ZbaW92Y250XS5pb3ZfYmFzZSA9IHBhZDsKKwkJaW92W2lvdmNudF0uaW92X2xl
biA9IDYwIC0gbGVuOworCQlpb3ZjbnQrKzsKKwl9CisJKHZvaWQpIHBjaV92dG5ldF9uZXRtYXBf
d3JpdGV2KHNjLT52c2Nfbm1kLCBpb3YsIGlvdmNudCk7Cit9CisKK3N0YXRpYyB2b2lkCitwY2lf
dnRuZXRfbmV0bWFwX3J4KHN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjKQoreworCXN0cnVjdCBp
b3ZlYyBpb3ZbVlRORVRfTUFYU0VHU10sICpyaW92OworCXN0cnVjdCB2cXVldWVfaW5mbyAqdnE7
CisJdm9pZCAqdnJ4OworCWludCBsZW4sIG47CisJdWludDE2X3QgaWR4OworCisJLyoKKwkgKiBT
aG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGhvdXQgYSB2YWxpZCBuZXRtYXAgZGVzY3JpcHRvcgor
CSAqLworCWFzc2VydChzYy0+dnNjX25tZCAhPSBOVUxMKTsKKworCS8qCisJICogQnV0LCB3aWxs
IGJlIGNhbGxlZCB3aGVuIHRoZSByeCByaW5nIGhhc24ndCB5ZXQKKwkgKiBiZWVuIHNldCB1cCBv
ciB0aGUgZ3Vlc3QgaXMgcmVzZXR0aW5nIHRoZSBkZXZpY2UuCisJICovCisJaWYgKCFzYy0+dnNj
X3J4X3JlYWR5IHx8IHNjLT5yZXNldHRpbmcpIHsKKwkJLyoKKwkJICogRHJvcCB0aGUgcGFja2V0
IGFuZCB0cnkgbGF0ZXIuCisJCSAqLworCQkodm9pZCkgbm1fbmV4dHBrdChzYy0+dnNjX25tZCwg
KHZvaWQgKilkdW1teWJ1Zik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIENoZWNrIGZvciBh
dmFpbGFibGUgcnggYnVmZmVycworCSAqLworCXZxID0gJnNjLT52c2NfcXVldWVzW1ZUTkVUX1JY
UV07CisJaWYgKCF2cV9oYXNfZGVzY3ModnEpKSB7CisJCS8qCisJCSAqIERyb3AgdGhlIHBhY2tl
dCBhbmQgdHJ5IGxhdGVyLiAgSW50ZXJydXB0IG9uCisJCSAqIGVtcHR5LCBpZiB0aGF0J3MgbmVn
b3RpYXRlZC4KKwkJICovCisJCSh2b2lkKSBubV9uZXh0cGt0KHNjLT52c2Nfbm1kLCAodm9pZCAq
KWR1bW15YnVmKTsKKwkJdnFfZW5kY2hhaW5zKHZxLCAxKTsKKwkJcmV0dXJuOworCX0KKworCWRv
IHsKKwkJLyoKKwkJICogR2V0IGRlc2NyaXB0b3IgY2hhaW4uCisJCSAqLworCQluID0gdnFfZ2V0
Y2hhaW4odnEsICZpZHgsIGlvdiwgVlRORVRfTUFYU0VHUywgTlVMTCk7CisJCWFzc2VydChuID49
IDEgJiYgbiA8PSBWVE5FVF9NQVhTRUdTKTsKKworCQkvKgorCQkgKiBHZXQgYSBwb2ludGVyIHRv
IHRoZSByeCBoZWFkZXIsIGFuZCB1c2UgdGhlCisJCSAqIGRhdGEgaW1tZWRpYXRlbHkgZm9sbG93
aW5nIGl0IGZvciB0aGUgcGFja2V0IGJ1ZmZlci4KKwkJICovCisJCXZyeCA9IGlvdlswXS5pb3Zf
YmFzZTsKKwkJcmlvdiA9IHJ4X2lvdl90cmltKGlvdiwgJm4sIHNjLT5yeF92aGRybGVuKTsKKwor
CQlsZW4gPSBwY2lfdnRuZXRfbmV0bWFwX3JlYWR2KHNjLT52c2Nfbm1kLCByaW92LCBuKTsKKwor
CQlpZiAobGVuID09IDApIHsKKwkJCS8qCisJCQkgKiBObyBtb3JlIHBhY2tldHMsIGJ1dCBzdGls
bCBzb21lIGF2YWlsIHJpbmcKKwkJCSAqIGVudHJpZXMuICBJbnRlcnJ1cHQgaWYgbmVlZGVkL2Fw
cHJvcHJpYXRlLgorCQkJICovCisJCQl2cV9yZXRjaGFpbih2cSk7CisJCQl2cV9lbmRjaGFpbnMo
dnEsIDApOworCQkJcmV0dXJuOworCQl9CisKKwkJLyoKKwkJICogVGhlIG9ubHkgdmFsaWQgZmll
bGQgaW4gdGhlIHJ4IHBhY2tldCBoZWFkZXIgaXMgdGhlCisJCSAqIG51bWJlciBvZiBidWZmZXJz
IGlmIG1lcmdlZCByeCBidWZzIHdlcmUgbmVnb3RpYXRlZC4KKwkJICovCisJCW1lbXNldCh2cngs
IDAsIHNjLT5yeF92aGRybGVuKTsKKworCQlpZiAoc2MtPnJ4X21lcmdlKSB7CisJCQlzdHJ1Y3Qg
dmlydGlvX25ldF9yeGhkciAqdnJ4aDsKKworCQkJdnJ4aCA9IHZyeDsKKwkJCXZyeGgtPnZyaF9i
dWZzID0gMTsKKwkJfQorCisJCS8qCisJCSAqIFJlbGVhc2UgdGhpcyBjaGFpbiBhbmQgaGFuZGxl
IG1vcmUgY2hhaW5zLgorCQkgKi8KKwkJdnFfcmVsY2hhaW4odnEsIGlkeCwgbGVuICsgc2MtPnJ4
X3ZoZHJsZW4pOworCX0gd2hpbGUgKHZxX2hhc19kZXNjcyh2cSkpOworCisJLyogSW50ZXJydXB0
IGlmIG5lZWRlZCwgaW5jbHVkaW5nIGZvciBOT1RJRllfT05fRU1QVFkuICovCisJdnFfZW5kY2hh
aW5zKHZxLCAxKTsKK30KKworc3RhdGljIHZvaWQKK3BjaV92dG5ldF9yeF9jYWxsYmFjayhpbnQg
ZmQsIGVudW0gZXZfdHlwZSB0eXBlLCB2b2lkICpwYXJhbSkKK3sKKwlzdHJ1Y3QgcGNpX3Z0bmV0
X3NvZnRjICpzYyA9IHBhcmFtOworCisJcHRocmVhZF9tdXRleF9sb2NrKCZzYy0+cnhfbXR4KTsK
KwlzYy0+cnhfaW5fcHJvZ3Jlc3MgPSAxOworCXNjLT5wY2lfdnRuZXRfcngoc2MpOworCXNjLT5y
eF9pbl9wcm9ncmVzcyA9IDA7CisJcHRocmVhZF9tdXRleF91bmxvY2soJnNjLT5yeF9tdHgpOwor
Cit9CisKK3N0YXRpYyB2b2lkCitwY2lfdnRuZXRfcGluZ19yeHEodm9pZCAqdnNjLCBzdHJ1Y3Qg
dnF1ZXVlX2luZm8gKnZxKQoreworCXN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjID0gdnNjOwor
CisJLyoKKwkgKiBBIHFub3RpZnkgbWVhbnMgdGhhdCB0aGUgcnggcHJvY2VzcyBjYW4gbm93IGJl
Z2luCisJICovCisJaWYgKHNjLT52c2NfcnhfcmVhZHkgPT0gMCkgeworCQlzYy0+dnNjX3J4X3Jl
YWR5ID0gMTsKKwkJdnEtPnZxX3VzZWQtPnZ1X2ZsYWdzIHw9IFZSSU5HX1VTRURfRl9OT19OT1RJ
Rlk7CisJfQorfQorCitzdGF0aWMgdm9pZAorcGNpX3Z0bmV0X3Byb2N0eChzdHJ1Y3QgcGNpX3Z0
bmV0X3NvZnRjICpzYywgc3RydWN0IHZxdWV1ZV9pbmZvICp2cSkKK3sKKwlzdHJ1Y3QgaW92ZWMg
aW92W1ZUTkVUX01BWFNFR1MgKyAxXTsKKwlpbnQgaSwgbjsKKwlpbnQgcGxlbiwgdGxlbjsKKwl1
aW50MTZfdCBpZHg7CisKKwkvKgorCSAqIE9idGFpbiBjaGFpbiBvZiBkZXNjcmlwdG9ycy4gIFRo
ZSBmaXJzdCBvbmUgaXMKKwkgKiByZWFsbHkgdGhlIGhlYWRlciBkZXNjcmlwdG9yLCBzbyB3ZSBu
ZWVkIHRvIHN1bQorCSAqIHVwIHR3byBsZW5ndGhzOiBwYWNrZXQgbGVuZ3RoIGFuZCB0cmFuc2Zl
ciBsZW5ndGguCisJICovCisJbiA9IHZxX2dldGNoYWluKHZxLCAmaWR4LCBpb3YsIFZUTkVUX01B
WFNFR1MsIE5VTEwpOworCWFzc2VydChuID49IDEgJiYgbiA8PSBWVE5FVF9NQVhTRUdTKTsKKwlw
bGVuID0gMDsKKwl0bGVuID0gaW92WzBdLmlvdl9sZW47CisJZm9yIChpID0gMTsgaSA8IG47IGkr
KykgeworCQlwbGVuICs9IGlvdltpXS5pb3ZfbGVuOworCQl0bGVuICs9IGlvdltpXS5pb3ZfbGVu
OworCX0KKworCURQUklOVEYoKCJ2aXJ0aW86IHBhY2tldCBzZW5kLCAlZCBieXRlcywgJWQgc2Vn
c1xuXHIiLCBwbGVuLCBuKSk7CisJc2MtPnBjaV92dG5ldF90eChzYywgJmlvdlsxXSwgbiAtIDEs
IHBsZW4pOworCisJLyogY2hhaW4gaXMgcHJvY2Vzc2VkLCByZWxlYXNlIGl0IGFuZCBzZXQgdGxl
biAqLworCXZxX3JlbGNoYWluKHZxLCBpZHgsIHRsZW4pOworfQorCitzdGF0aWMgdm9pZAorcGNp
X3Z0bmV0X3BpbmdfdHhxKHZvaWQgKnZzYywgc3RydWN0IHZxdWV1ZV9pbmZvICp2cSkKK3sKKwlz
dHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpzYyA9IHZzYzsKKworCS8qCisJICogQW55IHJpbmcgZW50
cmllcyB0byBwcm9jZXNzPworCSAqLworCWlmICghdnFfaGFzX2Rlc2NzKHZxKSkKKwkJcmV0dXJu
OworCisJLyogU2lnbmFsIHRoZSB0eCB0aHJlYWQgZm9yIHByb2Nlc3NpbmcgKi8KKwlwdGhyZWFk
X211dGV4X2xvY2soJnNjLT50eF9tdHgpOworCXZxLT52cV91c2VkLT52dV9mbGFncyB8PSBWUklO
R19VU0VEX0ZfTk9fTk9USUZZOworCWlmIChzYy0+dHhfaW5fcHJvZ3Jlc3MgPT0gMCkKKwkJcHRo
cmVhZF9jb25kX3NpZ25hbCgmc2MtPnR4X2NvbmQpOworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZz
Yy0+dHhfbXR4KTsKK30KKworLyoKKyAqIFRocmVhZCB3aGljaCB3aWxsIGhhbmRsZSBwcm9jZXNz
aW5nIG9mIFRYIGRlc2MKKyAqLworc3RhdGljIHZvaWQgKgorcGNpX3Z0bmV0X3R4X3RocmVhZCh2
b2lkICpwYXJhbSkKK3sKKwlzdHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpzYyA9IHBhcmFtOworCXN0
cnVjdCB2cXVldWVfaW5mbyAqdnE7CisJaW50IGVycm9yOworCisJdnEgPSAmc2MtPnZzY19xdWV1
ZXNbVlRORVRfVFhRXTsKKworCS8qCisJICogTGV0IHVzIHdhaXQgdGlsbCB0aGUgdHggcXVldWUg
cG9pbnRlcnMgZ2V0IGluaXRpYWxpc2VkICYKKwkgKiBmaXJzdCB0eCBzaWduYWxlZAorCSAqLwor
CXB0aHJlYWRfbXV0ZXhfbG9jaygmc2MtPnR4X210eCk7CisJZXJyb3IgPSBwdGhyZWFkX2NvbmRf
d2FpdCgmc2MtPnR4X2NvbmQsICZzYy0+dHhfbXR4KTsKKwlhc3NlcnQoZXJyb3IgPT0gMCk7CisK
Kwlmb3IgKDs7KSB7CisJCS8qIG5vdGUgLSB0eCBtdXRleCBpcyBsb2NrZWQgaGVyZSAqLworCQl3
aGlsZSAoc2MtPnJlc2V0dGluZyB8fCAhdnFfaGFzX2Rlc2NzKHZxKSkgeworCQkJdnEtPnZxX3Vz
ZWQtPnZ1X2ZsYWdzICY9IH5WUklOR19VU0VEX0ZfTk9fTk9USUZZOworCQkJbWIoKTsKKwkJCWlm
ICghc2MtPnJlc2V0dGluZyAmJiB2cV9oYXNfZGVzY3ModnEpKQorCQkJCWJyZWFrOworCisJCQlz
Yy0+dHhfaW5fcHJvZ3Jlc3MgPSAwOworCQkJZXJyb3IgPSBwdGhyZWFkX2NvbmRfd2FpdCgmc2Mt
PnR4X2NvbmQsICZzYy0+dHhfbXR4KTsKKwkJCWFzc2VydChlcnJvciA9PSAwKTsKKwkJfQorCQl2
cS0+dnFfdXNlZC0+dnVfZmxhZ3MgfD0gVlJJTkdfVVNFRF9GX05PX05PVElGWTsKKwkJc2MtPnR4
X2luX3Byb2dyZXNzID0gMTsKKwkJcHRocmVhZF9tdXRleF91bmxvY2soJnNjLT50eF9tdHgpOwor
CisJCWRvIHsKKwkJCS8qCisJCQkgKiBSdW4gdGhyb3VnaCBlbnRyaWVzLCBwbGFjaW5nIHRoZW0g
aW50bworCQkJICogaW92ZWNzIGFuZCBzZW5kaW5nIHdoZW4gYW4gZW5kLW9mLXBhY2tldAorCQkJ
ICogaXMgZm91bmQKKwkJCSAqLworCQkJcGNpX3Z0bmV0X3Byb2N0eChzYywgdnEpOworCQl9IHdo
aWxlICh2cV9oYXNfZGVzY3ModnEpKTsKKworCQkvKgorCQkgKiBHZW5lcmF0ZSBhbiBpbnRlcnJ1
cHQgaWYgbmVlZGVkLgorCQkgKi8KKwkJdnFfZW5kY2hhaW5zKHZxLCAxKTsKKworCQlwdGhyZWFk
X211dGV4X2xvY2soJnNjLT50eF9tdHgpOworCX0KK30KKworI2lmZGVmIG5vdHlldAorc3RhdGlj
IHZvaWQKK3BjaV92dG5ldF9waW5nX2N0bHEodm9pZCAqdnNjLCBzdHJ1Y3QgdnF1ZXVlX2luZm8g
KnZxKQoreworCisJRFBSSU5URigoInZ0bmV0OiBjb250cm9sIHFub3RpZnkhXG5cciIpKTsKK30K
KyNlbmRpZgorCitzdGF0aWMgaW50CitwY2lfdnRuZXRfcGFyc2VtYWMoY2hhciAqbWFjX3N0ciwg
dWludDhfdCAqbWFjX2FkZHIpCit7CisgICAgICAgIHN0cnVjdCBldGhlcl9hZGRyICplYTsKKyAg
ICAgICAgY2hhciAqdG1wc3RyOworICAgICAgICBjaGFyIHplcm9fYWRkcltFVEhFUl9BRERSX0xF
Tl0gPSB7IDAsIDAsIDAsIDAsIDAsIDAgfTsKKworICAgICAgICB0bXBzdHIgPSBzdHJzZXAoJm1h
Y19zdHIsIj0iKTsKKyAgICAgICAKKyAgICAgICAgaWYgKChtYWNfc3RyICE9IE5VTEwpICYmICgh
c3RyY21wKHRtcHN0ciwibWFjIikpKSB7CisgICAgICAgICAgICAgICAgZWEgPSBldGhlcl9hdG9u
KG1hY19zdHIpOworCisgICAgICAgICAgICAgICAgaWYgKGVhID09IE5VTEwgfHwgRVRIRVJfSVNf
TVVMVElDQVNUKGVhLT5vY3RldCkgfHwKKyAgICAgICAgICAgICAgICAgICAgbWVtY21wKGVhLT5v
Y3RldCwgemVyb19hZGRyLCBFVEhFUl9BRERSX0xFTikgPT0gMCkgeworCQkJZnByaW50ZihzdGRl
cnIsICJJbnZhbGlkIE1BQyAlc1xuIiwgbWFjX3N0cik7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gKEVJTlZBTCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICBtZW1jcHkobWFjX2FkZHIsIGVhLT5vY3RldCwgRVRIRVJfQUREUl9MRU4pOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICgwKTsKK30KKworc3RhdGljIHZvaWQKK3BjaV92
dG5ldF90YXBfc2V0dXAoc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2MsIGNoYXIgKmRldm5hbWUp
Cit7CisJY2hhciB0YnVmWzgwXTsKKworCXN0cmNweSh0YnVmLCAiL2Rldi8iKTsKKwlzdHJsY2F0
KHRidWYsIGRldm5hbWUsIHNpemVvZih0YnVmKSk7CisKKwlzYy0+cGNpX3Z0bmV0X3J4ID0gcGNp
X3Z0bmV0X3RhcF9yeDsKKwlzYy0+cGNpX3Z0bmV0X3R4ID0gcGNpX3Z0bmV0X3RhcF90eDsKKwor
CXNjLT52c2NfdGFwZmQgPSBvcGVuKHRidWYsIE9fUkRXUik7CisJaWYgKHNjLT52c2NfdGFwZmQg
PT0gLTEpIHsKKwkJV1BSSU5URigoIm9wZW4gb2YgdGFwIGRldmljZSAlcyBmYWlsZWRcbiIsIHRi
dWYpKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogU2V0IG5vbi1ibG9ja2luZyBhbmQgcmVn
aXN0ZXIgZm9yIHJlYWQKKwkgKiBub3RpZmljYXRpb25zIHdpdGggdGhlIGV2ZW50IGxvb3AKKwkg
Ki8KKwlpbnQgb3B0ID0gMTsKKwlpZiAoaW9jdGwoc2MtPnZzY190YXBmZCwgRklPTkJJTywgJm9w
dCkgPCAwKSB7CisJCVdQUklOVEYoKCJ0YXAgZGV2aWNlIE9fTk9OQkxPQ0sgZmFpbGVkXG4iKSk7
CisJCWNsb3NlKHNjLT52c2NfdGFwZmQpOworCQlzYy0+dnNjX3RhcGZkID0gLTE7CisJfQorCisJ
c2MtPnZzY19tZXZwID0gbWV2ZW50X2FkZChzYy0+dnNjX3RhcGZkLAorCQkJCSAgRVZGX1JFQUQs
CisJCQkJICBwY2lfdnRuZXRfcnhfY2FsbGJhY2ssCisJCQkJICBzYyk7CisJaWYgKHNjLT52c2Nf
bWV2cCA9PSBOVUxMKSB7CisJCVdQUklOVEYoKCJDb3VsZCBub3QgcmVnaXN0ZXIgZXZlbnRcbiIp
KTsKKwkJY2xvc2Uoc2MtPnZzY190YXBmZCk7CisJCXNjLT52c2NfdGFwZmQgPSAtMTsKKwl9Cit9
CisKK3N0YXRpYyB2b2lkCitwY2lfdnRuZXRfbmV0bWFwX3NldHVwKHN0cnVjdCBwY2lfdnRuZXRf
c29mdGMgKnNjLCBjaGFyICppZm5hbWUpCit7CisJc2MtPnBjaV92dG5ldF9yeCA9IHBjaV92dG5l
dF9uZXRtYXBfcng7CisJc2MtPnBjaV92dG5ldF90eCA9IHBjaV92dG5ldF9uZXRtYXBfdHg7CisK
KwlzYy0+dnNjX25tZCA9IG5tX29wZW4oaWZuYW1lLCBOVUxMLCAwLCAwKTsKKwlpZiAoc2MtPnZz
Y19ubWQgPT0gTlVMTCkgeworCQlXUFJJTlRGKCgib3BlbiBvZiBuZXRtYXAgZGV2aWNlICVzIGZh
aWxlZFxuIiwgaWZuYW1lKSk7CisJCXJldHVybjsKKwl9CisKKwlzYy0+dnNjX21ldnAgPSBtZXZl
bnRfYWRkKHNjLT52c2Nfbm1kLT5mZCwKKwkJCQkgIEVWRl9SRUFELAorCQkJCSAgcGNpX3Z0bmV0
X3J4X2NhbGxiYWNrLAorCQkJCSAgc2MpOworCWlmIChzYy0+dnNjX21ldnAgPT0gTlVMTCkgewor
CQlXUFJJTlRGKCgiQ291bGQgbm90IHJlZ2lzdGVyIGV2ZW50XG4iKSk7CisJCW5tX2Nsb3NlKHNj
LT52c2Nfbm1kKTsKKwkJc2MtPnZzY19ubWQgPSBOVUxMOworCX0KK30KKworc3RhdGljIGludAor
cGNpX3Z0bmV0X2luaXQoc3RydWN0IHZtY3R4ICpjdHgsIHN0cnVjdCBwY2lfZGV2aW5zdCAqcGks
IGNoYXIgKm9wdHMpCit7CisJTUQ1X0NUWCBtZGN0eDsKKwl1bnNpZ25lZCBjaGFyIGRpZ2VzdFsx
Nl07CisJY2hhciBuc3RyWzgwXTsKKwljaGFyIHRuYW1lW01BWENPTUxFTiArIDFdOworCXN0cnVj
dCBwY2lfdnRuZXRfc29mdGMgKnNjOworCWNoYXIgKmRldm5hbWU7CisJY2hhciAqdnRvcHRzOwor
CWludCBtYWNfcHJvdmlkZWQ7CisKKwlzYyA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBjaV92
dG5ldF9zb2Z0YykpOworCisJcHRocmVhZF9tdXRleF9pbml0KCZzYy0+dnNjX210eCwgTlVMTCk7
CisKKwl2aV9zb2Z0Y19saW5rdXAoJnNjLT52c2NfdnMsICZ2dG5ldF92aV9jb25zdHMsIHNjLCBw
aSwgc2MtPnZzY19xdWV1ZXMpOworCXNjLT52c2NfdnMudnNfbXR4ID0gJnNjLT52c2NfbXR4Owor
CisJc2MtPnZzY19xdWV1ZXNbVlRORVRfUlhRXS52cV9xc2l6ZSA9IFZUTkVUX1JJTkdTWjsKKwlz
Yy0+dnNjX3F1ZXVlc1tWVE5FVF9SWFFdLnZxX25vdGlmeSA9IHBjaV92dG5ldF9waW5nX3J4cTsK
KwlzYy0+dnNjX3F1ZXVlc1tWVE5FVF9UWFFdLnZxX3FzaXplID0gVlRORVRfUklOR1NaOworCXNj
LT52c2NfcXVldWVzW1ZUTkVUX1RYUV0udnFfbm90aWZ5ID0gcGNpX3Z0bmV0X3BpbmdfdHhxOwor
I2lmZGVmIG5vdHlldAorCXNjLT52c2NfcXVldWVzW1ZUTkVUX0NUTFFdLnZxX3FzaXplID0gVlRO
RVRfUklOR1NaOworICAgICAgICBzYy0+dnNjX3F1ZXVlc1tWVE5FVF9DVExRXS52cV9ub3RpZnkg
PSBwY2lfdnRuZXRfcGluZ19jdGxxOworI2VuZGlmCisgCisJLyoKKwkgKiBBdHRlbXB0IHRvIG9w
ZW4gdGhlIHRhcCBkZXZpY2UgYW5kIHJlYWQgdGhlIE1BQyBhZGRyZXNzCisJICogaWYgc3BlY2lm
aWVkCisJICovCisJbWFjX3Byb3ZpZGVkID0gMDsKKwlzYy0+dnNjX3RhcGZkID0gLTE7CisJc2Mt
PnZzY19ubWQgPSBOVUxMOworCWlmIChvcHRzICE9IE5VTEwpIHsKKwkJaW50IGVycjsKKworCQlk
ZXZuYW1lID0gdnRvcHRzID0gc3RyZHVwKG9wdHMpOworCQkodm9pZCkgc3Ryc2VwKCZ2dG9wdHMs
ICIsIik7CisKKwkJaWYgKHZ0b3B0cyAhPSBOVUxMKSB7CisJCQllcnIgPSBwY2lfdnRuZXRfcGFy
c2VtYWModnRvcHRzLCBzYy0+dnNjX2NvbmZpZy5tYWMpOworCQkJaWYgKGVyciAhPSAwKSB7CisJ
CQkJZnJlZShkZXZuYW1lKTsKKwkJCQlyZXR1cm4gKGVycik7CisJCQl9CisJCQltYWNfcHJvdmlk
ZWQgPSAxOworCQl9CisKKwkJaWYgKHN0cm5jbXAoZGV2bmFtZSwgInZhbGUiLCA0KSA9PSAwKQor
CQkJcGNpX3Z0bmV0X25ldG1hcF9zZXR1cChzYywgZGV2bmFtZSk7CisJCWlmIChzdHJuY21wKGRl
dm5hbWUsICJ0YXAiLCAzKSA9PSAwIHx8CisJCSAgICBzdHJuY21wKGRldm5hbWUsICJ2bW5ldCIs
IDUpID09IDApCisJCQlwY2lfdnRuZXRfdGFwX3NldHVwKHNjLCBkZXZuYW1lKTsKKworCQlmcmVl
KGRldm5hbWUpOworCX0KKworCS8qCisJICogVGhlIGRlZmF1bHQgTUFDIGFkZHJlc3MgaXMgdGhl
IHN0YW5kYXJkIE5ldEFwcCBPVUkgb2YgMDAtYTAtOTgsCisJICogZm9sbG93ZWQgYnkgYW4gTUQ1
IG9mIHRoZSBQQ0kgc2xvdC9mdW5jIG51bWJlciBhbmQgZGV2IG5hbWUKKwkgKi8KKwlpZiAoIW1h
Y19wcm92aWRlZCkgeworCQlzbnByaW50Zihuc3RyLCBzaXplb2YobnN0ciksICIlZC0lZC0lcyIs
IHBpLT5waV9zbG90LAorCQkgICAgcGktPnBpX2Z1bmMsIHZtbmFtZSk7CisKKwkJTUQ1SW5pdCgm
bWRjdHgpOworCQlNRDVVcGRhdGUoJm1kY3R4LCBuc3RyLCBzdHJsZW4obnN0cikpOworCQlNRDVG
aW5hbChkaWdlc3QsICZtZGN0eCk7CisKKwkJc2MtPnZzY19jb25maWcubWFjWzBdID0gMHgwMDsK
KwkJc2MtPnZzY19jb25maWcubWFjWzFdID0gMHhhMDsKKwkJc2MtPnZzY19jb25maWcubWFjWzJd
ID0gMHg5ODsKKwkJc2MtPnZzY19jb25maWcubWFjWzNdID0gZGlnZXN0WzBdOworCQlzYy0+dnNj
X2NvbmZpZy5tYWNbNF0gPSBkaWdlc3RbMV07CisJCXNjLT52c2NfY29uZmlnLm1hY1s1XSA9IGRp
Z2VzdFsyXTsKKwl9CisKKwkvKiBpbml0aWFsaXplIGNvbmZpZyBzcGFjZSAqLworCXBjaV9zZXRf
Y2ZnZGF0YTE2KHBpLCBQQ0lSX0RFVklDRSwgVklSVElPX0RFVl9ORVQpOworCXBjaV9zZXRfY2Zn
ZGF0YTE2KHBpLCBQQ0lSX1ZFTkRPUiwgVklSVElPX1ZFTkRPUik7CisJcGNpX3NldF9jZmdkYXRh
OChwaSwgUENJUl9DTEFTUywgUENJQ19ORVRXT1JLKTsKKwlwY2lfc2V0X2NmZ2RhdGExNihwaSwg
UENJUl9TVUJERVZfMCwgVklSVElPX1RZUEVfTkVUKTsKKwlwY2lfc2V0X2NmZ2RhdGExNihwaSwg
UENJUl9TVUJWRU5EXzAsIFZJUlRJT19WRU5ET1IpOworCisJLyogTGluayBpcyB1cCBpZiB3ZSBt
YW5hZ2VkIHRvIG9wZW4gdGFwIGRldmljZSBvciB2YWxlIHBvcnQuICovCisJc2MtPnZzY19jb25m
aWcuc3RhdHVzID0gKG9wdHMgPT0gTlVMTCB8fCBzYy0+dnNjX3RhcGZkID49IDAgfHwKKwkgICAg
c2MtPnZzY19ubWQgIT0gTlVMTCk7CisJCisJLyogdXNlIEJBUiAxIHRvIG1hcCBNU0ktWCB0YWJs
ZSBhbmQgUEJBLCBpZiB3ZSdyZSB1c2luZyBNU0ktWCAqLworCWlmICh2aV9pbnRyX2luaXQoJnNj
LT52c2NfdnMsIDEsIGZic2RydW5fdmlydGlvX21zaXgoKSkpCisJCXJldHVybiAoMSk7CisKKwkv
KiB1c2UgQkFSIDAgdG8gbWFwIGNvbmZpZyByZWdzIGluIElPIHNwYWNlICovCisJdmlfc2V0X2lv
X2Jhcigmc2MtPnZzY192cywgMCk7CisKKwlzYy0+cmVzZXR0aW5nID0gMDsKKworCXNjLT5yeF9t
ZXJnZSA9IDE7CisJc2MtPnJ4X3ZoZHJsZW4gPSBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfcnho
ZHIpOworCXNjLT5yeF9pbl9wcm9ncmVzcyA9IDA7CisJcHRocmVhZF9tdXRleF9pbml0KCZzYy0+
cnhfbXR4LCBOVUxMKTsgCisKKwkvKiAKKwkgKiBJbml0aWFsaXplIHR4IHNlbWFwaG9yZSAmIHNw
YXduIFRYIHByb2Nlc3NpbmcgdGhyZWFkLgorCSAqIEFzIG9mIG5vdywgb25seSBvbmUgdGhyZWFk
IGZvciBUWCBkZXNjIHByb2Nlc3NpbmcgaXMKKwkgKiBzcGF3bmVkLiAKKwkgKi8KKwlzYy0+dHhf
aW5fcHJvZ3Jlc3MgPSAwOworCXB0aHJlYWRfbXV0ZXhfaW5pdCgmc2MtPnR4X210eCwgTlVMTCk7
CisJcHRocmVhZF9jb25kX2luaXQoJnNjLT50eF9jb25kLCBOVUxMKTsKKwlwdGhyZWFkX2NyZWF0
ZSgmc2MtPnR4X3RpZCwgTlVMTCwgcGNpX3Z0bmV0X3R4X3RocmVhZCwgKHZvaWQgKilzYyk7CisJ
c25wcmludGYodG5hbWUsIHNpemVvZih0bmFtZSksICJ2dG5ldC0lZDolZCB0eCIsIHBpLT5waV9z
bG90LAorCSAgICBwaS0+cGlfZnVuYyk7CisgICAgICAgIHB0aHJlYWRfc2V0X25hbWVfbnAoc2Mt
PnR4X3RpZCwgdG5hbWUpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorcGNpX3Z0
bmV0X2NmZ3dyaXRlKHZvaWQgKnZzYywgaW50IG9mZnNldCwgaW50IHNpemUsIHVpbnQzMl90IHZh
bHVlKQoreworCXN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjID0gdnNjOworCXZvaWQgKnB0cjsK
KworCWlmIChvZmZzZXQgPCA2KSB7CisJCWFzc2VydChvZmZzZXQgKyBzaXplIDw9IDYpOworCQkv
KgorCQkgKiBUaGUgZHJpdmVyIGlzIGFsbG93ZWQgdG8gY2hhbmdlIHRoZSBNQUMgYWRkcmVzcwor
CQkgKi8KKwkJcHRyID0gJnNjLT52c2NfY29uZmlnLm1hY1tvZmZzZXRdOworCQltZW1jcHkocHRy
LCAmdmFsdWUsIHNpemUpOworCX0gZWxzZSB7CisJCS8qIHNpbGVudGx5IGlnbm9yZSBvdGhlciB3
cml0ZXMgKi8KKwkJRFBSSU5URigoInZ0bmV0OiB3cml0ZSB0byByZWFkb25seSByZWcgJWRcblxy
Iiwgb2Zmc2V0KSk7CisJfQorCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorcGNpX3Z0
bmV0X2NmZ3JlYWQodm9pZCAqdnNjLCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSwgdWludDMyX3QgKnJl
dHZhbCkKK3sKKwlzdHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpzYyA9IHZzYzsKKwl2b2lkICpwdHI7
CisKKwlwdHIgPSAodWludDhfdCAqKSZzYy0+dnNjX2NvbmZpZyArIG9mZnNldDsKKwltZW1jcHko
cmV0dmFsLCBwdHIsIHNpemUpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitwY2lf
dnRuZXRfbmVnX2ZlYXR1cmVzKHZvaWQgKnZzYywgdWludDY0X3QgbmVnb3RpYXRlZF9mZWF0dXJl
cykKK3sKKwlzdHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpzYyA9IHZzYzsKKworCXNjLT52c2NfZmVh
dHVyZXMgPSBuZWdvdGlhdGVkX2ZlYXR1cmVzOworCisJaWYgKCEoc2MtPnZzY19mZWF0dXJlcyAm
IFZJUlRJT19ORVRfRl9NUkdfUlhCVUYpKSB7CisJCXNjLT5yeF9tZXJnZSA9IDA7CisJCS8qIG5v
bi1tZXJnZSByeCBoZWFkZXIgaXMgMiBieXRlcyBzaG9ydGVyICovCisJCXNjLT5yeF92aGRybGVu
IC09IDI7CisJfQorfQorCitzdHJ1Y3QgcGNpX2RldmVtdSBwY2lfZGVfdm5ldCA9IHsKKwkucGVf
ZW11ID0gCSJ2aXJ0aW8tbmV0IiwKKwkucGVfaW5pdCA9CXBjaV92dG5ldF9pbml0LAorCS5wZV9i
YXJ3cml0ZSA9CXZpX3BjaV93cml0ZSwKKwkucGVfYmFycmVhZCA9CXZpX3BjaV9yZWFkCit9Owor
UENJX0VNVUxfU0VUKHBjaV9kZV92bmV0KTsK

--_006_DB5PR07MB16857B8F7A2B4783640074979B8E0DB5PR07MB1685eurp_
Content-Type: text/plain; name="test_results.txt"
Content-Description: test_results.txt
Content-Disposition: attachment; filename="test_results.txt"; size=5125;
	creation-date="Fri, 02 Dec 2016 14:17:58 GMT";
	modification-date="Fri, 02 Dec 2016 14:17:58 GMT"
Content-Transfer-Encoding: base64

VEFQOgoKMzc1Ljc0ODcxOCBtYWluX3RocmVhZCBbMjMyNV0gNjcuNTIyIEtwcHMgKDY3Ljg1OSBL
cGt0cyAzMi41NzIgTWJwcyBpbiAxMDA0OTg2IHVzZWMpIDI1My4yMSBhdmdfYmF0Y2ggOTk5OTkg
bWluX3NwYWNlCjM3Ni43NTE3MzYgbWFpbl90aHJlYWQgWzIzMjVdIDY2LjQ4NCBLcHBzICg2Ni42
ODUgS3BrdHMgMzIuMDA5IE1icHMgaW4gMTAwMzAxNyB1c2VjKSAyNDguODIgYXZnX2JhdGNoIDk5
OTk5IG1pbl9zcGFjZQozNzcuNzYxNTMzIG1haW5fdGhyZWFkIFsyMzI1XSA2NS4wNDMgS3BwcyAo
NjUuNjgwIEtwa3RzIDMxLjUyNiBNYnBzIGluIDEwMDk3OTcgdXNlYykgMjUyLjYyIGF2Z19iYXRj
aCA5OTk5OSBtaW5fc3BhY2UKMzc4Ljc2NjczOCBtYWluX3RocmVhZCBbMjMyNV0gNjUuMzI5IEtw
cHMgKDY1LjY2OSBLcGt0cyAzMS41MjEgTWJwcyBpbiAxMDA1MjA2IHVzZWMpIDI1Ny41MyBhdmdf
YmF0Y2ggOTk5OTkgbWluX3NwYWNlCjM3OS43ODAzOTggbWFpbl90aHJlYWQgWzIzMjVdIDY4LjAw
NiBLcHBzICg2OC45MzUgS3BrdHMgMzMuMDg5IE1icHMgaW4gMTAxMzY2MCB1c2VjKSAyNTMuNDQg
YXZnX2JhdGNoIDk5OTk5IG1pbl9zcGFjZQozODAuNzg1NzMzIG1haW5fdGhyZWFkIFsyMzI1XSA2
NC4yNjIgS3BwcyAoNjQuNjA1IEtwa3RzIDMxLjAxMCBNYnBzIGluIDEwMDUzMzUgdXNlYykgMjUx
LjM4IGF2Z19iYXRjaCA5OTk5OSBtaW5fc3BhY2UKMzgxLjc5MjM2MCBtYWluX3RocmVhZCBbMjMy
NV0gNjcuMjkwIEtwcHMgKDY3LjczNiBLcGt0cyAzMi41MTMgTWJwcyBpbgoKCgoKTkVUTUFQIHdp
dGggVmFsZSBWTTEgKFRYKTogCjA1Mi4xMjI3NDUgbWFpbl90aHJlYWQgWzIzMjVdIDEyMS42MTcg
S3BwcyAoMTIxLjczNSBLcGt0cyA1OC40MzMgTWJwcyBpbiAxMDAwOTczIHVzZWMpIDIwOS44OSBh
dmdfYmF0Y2ggMCBtaW5fc3BhY2UKMDUzLjIzNDc4OCBtYWluX3RocmVhZCBbMjMyNV0gMTQ0LjE3
OCBLcHBzICgxNjAuMzMyIEtwa3RzIDc2Ljk1OSBNYnBzIGluIDExMTIwNDMgdXNlYykgMjE0LjYz
IGF2Z19iYXRjaCA5OTk5OSBtaW5fc3BhY2UKMDU0LjIzOTc1MSBtYWluX3RocmVhZCBbMjMyNV0g
MTM5LjA3MiBLcHBzICgxMzkuNzYyIEtwa3RzIDY3LjA4NiBNYnBzIGluIDEwMDQ5NjIgdXNlYykg
MjE1LjY4IGF2Z19iYXRjaCA5OTk5OSBtaW5fc3BhY2UKMDU1LjI0OTc5NCBtYWluX3RocmVhZCBb
MjMyNV0gMTUyLjg4OCBLcHBzICgxNTQuNDI0IEtwa3RzIDc0LjEyNCBNYnBzIGluIDEwMTAwNDQg
dXNlYykgMjEwLjY3IGF2Z19iYXRjaCA5OTk5OSBtaW5fc3BhY2UKMDU2LjI2MDc5OSBtYWluX3Ro
cmVhZCBbMjMyNV0gMTQyLjU2NiBLcHBzICgxNDQuMTM1IEtwa3RzIDY5LjE4NSBNYnBzIGluIDEw
MTEwMDUgdXNlYykgMjE0LjgxIGF2Z19iYXRjaCA5OTk5OSBtaW5fc3BhY2UKMDU3LjI2NTIyNSBt
YWluX3RocmVhZCBbMjMyNV0gMTQzLjU3NSBLcHBzICgxNDQuMjEwIEtwa3RzIDY5LjIyMSBNYnBz
IGluIDEwMDQ0MjYgdXNlYykgMjE1LjU2IGF2Z19iYXRjaCA5OTk5OSBtaW5fc3BhY2UKMDU4LjI3
MzQ2OCBtYWluX3RocmVhZCBbMjMyNV0gMTU0LjkxMiBLcHBzICgxNTYuMTg5IEtwa3RzIDc0Ljk3
MSBNYnBzIGluIDEwMDgyNDIgdXNlYykgMjA5LjkzIGF2Z19iYXRjaCA5OTk5OSBtaW5fc3BhY2UK
MDU5LjI3ODc5NSBtYWluX3RocmVhZCBbMjMyNV0gMTQxLjcyMiBLcHBzICgxNDIuNDc3IEtwa3Rz
IDY4LjM4OSBNYnBzIGluIDEwMDUzMjggdXNlYykgMjE3Ljg1IGF2Z19iYXRjaCA5OTk5OSBtaW5f
c3BhY2UKMDYwLjM0MDY5OSBtYWluX3RocmVhZCBbMjMyNV0gMTQ1Ljg3MSBLcHBzICgxNTQuOTAx
IEtwa3RzIDc0LjM1MiBNYnBzIGluIDEwNjE5MDQgdXNlYykgMjE1LjE0IGF2Z19iYXRjaCA5OTk5
OSBtaW5fc3BhY2UKMDYxLjM0NTc0OCBtYWluX3RocmVhZCBbMjMyNV0gMTQ0LjIyMSBLcHBzICgx
NDQuOTQ5IEtwa3RzIDY5LjU3NiBNYnBzIGluIDEwMDUwNDggdXNlYykgMjA5LjE2IGF2Z19iYXRj
aCA5OTk5OSBtaW5fc3BhY2UKCgpORVRNQVAgd2l0aCBWYWxlIFZNMihSWCk6CjA1NC45Njg1NzQg
bWFpbl90aHJlYWQgWzIzMjVdIDQ5Ljk1MiBLcHBzICg1NC4zNjIgS3BrdHMgMjYuMDk0IE1icHMg
aW4gMTA4ODI5MCB1c2VjKSA3NC42NyBhdmdfYmF0Y2ggMSBtaW5fc3BhY2UKMDU2LjAxNzQyNiBt
YWluX3RocmVhZCBbMjMyNV0gNjQuMjkwIEtwcHMgKDY3LjQzMSBLcGt0cyAzMi4zNjcgTWJwcyBp
biAxMDQ4ODUyIHVzZWMpIDEzMi4yMiBhdmdfYmF0Y2ggMSBtaW5fc3BhY2UKMDU3LjAyMTAzNiBt
YWluX3RocmVhZCBbMjMyNV0gOTMuNDA1IEtwcHMgKDkzLjc0MiBLcGt0cyA0NC45OTYgTWJwcyBp
biAxMDAzNjEwIHVzZWMpIDY4LjYzIGF2Z19iYXRjaCAxIG1pbl9zcGFjZQowNTguMDMyNjUwIG1h
aW5fdGhyZWFkIFsyMzI1XSA4MS4wNTggS3BwcyAoODEuOTk5IEtwa3RzIDM5LjM2MCBNYnBzIGlu
IDEwMTE2MTQgdXNlYykgODAuMzkgYXZnX2JhdGNoIDEgbWluX3NwYWNlCjA1OS4wNTkxNzYgbWFp
bl90aHJlYWQgWzIzMjVdIDg1LjgxNiBLcHBzICg4OC4wOTIgS3BrdHMgNDIuMjg0IE1icHMgaW4g
MTAyNjUyNiB1c2VjKSA3My44NCBhdmdfYmF0Y2ggMSBtaW5fc3BhY2UKMDYwLjA3ODU2MyBtYWlu
X3RocmVhZCBbMjMyNV0gNjYuOTU5IEtwcHMgKDY4LjA5NiBLcGt0cyAzMi42ODYgTWJwcyBpbiAx
MDE2OTg1IHVzZWMpIDUxMi4wMCBhdmdfYmF0Y2ggMSBtaW5fc3BhY2UKMDYxLjA4ODczOCBtYWlu
X3RocmVhZCBbMjMyNV0gNzkuOTExIEtwcHMgKDgwLjkxNiBLcGt0cyAzOC44NDAgTWJwcyBpbiAx
MDEyNTc2IHVzZWMpIDEzNy4xNSBhdmdfYmF0Y2ggMSBtaW5fc3BhY2UKMDYyLjEwNDUwNSBtYWlu
X3RocmVhZCBbMjMyNV0gOTAuODE0IEtwcHMgKDkyLjAwNyBLcGt0cyA0NC4xNjMgTWJwcyBpbiAx
MDEzMTM4IHVzZWMpIDczLjIwIGF2Z19iYXRjaCAxIG1pbl9zcGFjZQowNjMuMTE1NDMzIG1haW5f
dGhyZWFkIFsyMzI1XSA4Ni4yMzMgS3BwcyAoODcuNDAyIEtwa3RzIDQxLjk1MyBNYnBzIGluIDEw
MTM1NTggdXNlYykgOTQuMjggYXZnX2JhdGNoIDEgbWluX3NwYWNlCjA2NC4xMzQ0OTcgbWFpbl90
aHJlYWQgWzIzMjVdIDg2LjM1MSBLcHBzICg4Ny45OTcgS3BrdHMgNDIuMjM5IE1icHMgaW4gMTAx
OTA2MiB1c2VjKSA0MTMuMTMgYXZnX2JhdGNoIDEgbWluX3NwYWNlCjA2NS4xNDg5ODMgbWFpbl90
aHJlYWQgWzIzMjVdIDY5LjQ4MyBLcHBzICg3MC4zOTAgS3BrdHMgMzMuNzg3IE1icHMgaW4gMTAx
MzA1NyB1c2VjKSAxODYuMjIgYXZnX2JhdGNoIDEgbWluX3NwYWNlCjA2Ni4xNzI1NTUgbWFpbl90
aHJlYWQgWzIzMjVdIDkxLjM0NyBLcHBzICg5My41NzMgS3BrdHMgNDQuOTE1IE1icHMgaW4gMTAy
NDM2NSB1c2VjKSAxMjUuNjAgYXZnX2JhdGNoIDEgbWluX3NwYWNlCjA2Ny4xOTA2OTkgbWFpbl90
aHJlYWQgWzIzMjVdIDc5LjI4MCBLcHBzICg4MC43NjkgS3BrdHMgMzguNzY5IE1icHMgaW4gMTAx
ODc4MiB1c2VjKSAxMTQuNTcgYXZnX2JhdGNoIDEgbWluX3NwYWNlCjA2OC4yMDkwNTggbWFpbl90
aHJlYWQgWzIzMjVdIDEwNy4xMDAgS3BwcyAoMTA5LjA2NiBLcGt0cyA1Mi4zNTIgTWJwcyBpbiAx
MDE4MzU4IHVzZWMpIDMzLjI0IGF2Z19iYXRjaCAxIG1pbl9zcGFjZQoKCgpQVE5FVChWTTEgVFgp
OgoKOTIwLjcwNzkwMCBtYWluX3RocmVhZCBbMjMyNV0gNy4yMTYgTXBwcyAoNy4yMzggTXBrdHMg
NC4xNjkgR2JwcyBpbiAxMDAzMDQzIHVzZWMpIDUxMS41MCBhdmdfYmF0Y2ggOTk5OTkgbWluX3Nw
YWNlCjkyMS43MDk4OTAgbWFpbl90aHJlYWQgWzIzMjVdIDcuMTE0IE1wcHMgKDcuMTI4IE1wa3Rz
IDQuMTA2IEdicHMgaW4gMTAwMTk4OSB1c2VjKSA1MTEuNTAgYXZnX2JhdGNoIDk5OTk5IG1pbl9z
cGFjZQo5MjIuNzEyODY1IG1haW5fdGhyZWFkIFsyMzI1XSA3LjI3NyBNcHBzICg3LjI5OSBNcGt0
cyA0LjIwNCBHYnBzIGluIDEwMDI5NzUgdXNlYykgNTExLjUwIGF2Z19iYXRjaCA5OTk5OSBtaW5f
c3BhY2UKOTIzLjcxNTc4MyBtYWluX3RocmVhZCBbMjMyNV0gNS45ODAgTXBwcyAoNS45OTcgTXBr
dHMgMy40NTQgR2JwcyBpbiAxMDAyOTE4IHVzZWMpIDUxMS41MCBhdmdfYmF0Y2ggOTk5OTkgbWlu
X3NwYWNlCjkyNC43MTc5MjYgbWFpbl90aHJlYWQgWzIzMjVdIDcuMjU3IE1wcHMgKDcuMjczIE1w
a3RzIDQuMTg5IEdicHMgaW4gMTAwMjE0MyB1c2VjKSA1MTEuNTAgYXZnX2JhdGNoIDk5OTk5IG1p
bl9zcGFjZQo5MjYuNzM4NTcyIG1haW5fdGhyZWFkIFsyMzI1XSA3LjM2NSBNcHBzICgxNC44ODMg
TXBrdHMgOC41NzIgR2JwcyBpbiAyMDIwNjQ2IHVzZWMpIDUxMS41MCBhdmdfYmF0Y2ggOTk5OTkg
bWluX3NwYWNlCjkyNy43MzkzMjEgbWFpbl90aHJlYWQgWzIzMjVdIDYuMTk2IE1wcHMgKDYuMjAw
IE1wa3RzIDMuNTcxIEdicHMgaW4gMTAwMDc0OSB1c2VjKSA1MTEuNTAgYXZnX2JhdGNoIDk5OTk5
IG1pbl9zcGFjZQoKCgpQVE5FVChWTTIgUlgpOgoKOTI3Ljc2MTA0MiBtYWluX3RocmVhZCBbMjMy
NV0gNi4xNjMgTXBwcyAoNi4xOTYgTXBrdHMgMy41NjkgR2JwcyBpbiAxMDA1Mzg4IHVzZWMpIDUx
MS40NiBhdmdfYmF0Y2ggMSBtaW5fc3BhY2UKOTI4Ljc2MzQxMCBtYWluX3RocmVhZCBbMjMyNV0g
Ny4yNDkgTXBwcyAoNy4yNjYgTXBrdHMgNC4xODUgR2JwcyBpbiAxMDAyMzY3IHVzZWMpIDUxMS41
MCBhdmdfYmF0Y2ggMSBtaW5fc3BhY2UKOTMwLjQ0MTI1MSBtYWluX3RocmVhZCBbMjMyNV0gNy40
NTUgTXBwcyAoMTIuNTA4IE1wa3RzIDcuMjA1IEdicHMgaW4gMTY3Nzg0MiB1c2VjKSA1MTEuNTAg
YXZnX2JhdGNoIDEgbWluX3NwYWNlCjkzMi4yOTg0NjMgbWFpbl90aHJlYWQgWzIzMjVdIDcuMTUx
IE1wcHMgKDEzLjI4MCBNcGt0cyA3LjY0OSBHYnBzIGluIDE4NTcyMTIgdXNlYykgNTExLjUwIGF2
Z19iYXRjaCAxIG1pbl9zcGFjZQo5MzMuMjk5MjE3IG1haW5fdGhyZWFkIFsyMzI1XSA2Ljk1NyBN
cHBzICg2Ljk2MyBNcGt0cyA0LjAxMCBHYnBzIGluIDEwMDA3NTQgdXNlYykgNTExLjUwIGF2Z19i
YXRjaCAxIG1pbl9zcGFjZQo5MzQuMzAyMjQ0IG1haW5fdGhyZWFkIFsyMzI1XSA3LjQ5NiBNcHBz
ICg3LjUxOSBNcGt0cyA0LjMzMSBHYnBzIGluIDEwMDMwMjcgdXNlYykgNTExLjUwIGF2Zw==

--_006_DB5PR07MB16857B8F7A2B4783640074979B8E0DB5PR07MB1685eurp_
Content-Type: text/plain; name="kernel_dumps.txt"
Content-Description: kernel_dumps.txt
Content-Disposition: attachment; filename="kernel_dumps.txt"; size=3734;
	creation-date="Fri, 02 Dec 2016 14:18:14 GMT";
	modification-date="Fri, 02 Dec 2016 14:18:14 GMT"
Content-Transfer-Encoding: base64

OTU3LjI4NTYyNCBbIDQ0Ml0gZ2VuZXJpY19uZXRtYXBfcmVnaXN0ZXIgICBHZW5lcmljIGFkYXB0
ZXIgMHhmZmZmZjgwMDEyYTVjYzAwIGdvZXMgb24KOTU3LjI4NzI1NyBbIDQ4N10gZ2VuZXJpY19u
ZXRtYXBfcmVnaXN0ZXIgICBSWCByaW5nIDAgb2YgZ2VuZXJpYyBhZGFwdGVyIDB4ZmZmZmY4MDAx
MmE1Y2MwMCBnb2VzIG9uCjk1Ny4yODg5NzkgWyA0OTRdIGdlbmVyaWNfbmV0bWFwX3JlZ2lzdGVy
ICAgVFggcmluZyAwIG9mIGdlbmVyaWMgYWRhcHRlciAweGZmZmZmODAwMTJhNWNjMDAgZ29lcyBv
bgo5NTcuNTg0Mjg1IG1haW4gWzI3NzBdIG1hcHBlZCAzMzQ5ODBLQiBhdCAweDgwMTYwMDAwMApT
ZW5kaW5nIG9uIG5ldG1hcDp2dG5ldDE6IDEgcXVldWVzLCAxIHRocmVhZHMgYW5kIDEgY3B1cy4K
MTAuMC4wLjEgLT4gMTAuMS4wLjEgKDAwOjAwOjAwOjAwOjAwOjAwIC0+IGZmOmZmOmZmOmZmOmZm
OmZmKQo5NTcuNjcxMTMyIG1haW4gWzI4NjddIFNlbmRpbmcgNTEyIHBhY2tldHMgZXZlcnkgIDAu
MDAwMDAwMDAwIHMKOTU3LjY4NDExMiBzdGFydF90aHJlYWRzIFsyMjM1XSBXYWl0IDIgc2VjcyBm
b3IgcGh5IHJlc2V0Cjk1OS43Mzc3MDMgc3RhcnRfdGhyZWFkcyBbMjIzN10gUmVhZHkuLi4KOTU5
LjczODQyNCBtYWluIFsyODgwXSBmYWlsZWQgdG8gaW5zdGFsbCBeQyBoYW5kbGVyOiBJbnZhbGlk
IGFyZ3VtZW50Cjk1OS43Mzk0MzUgc2VuZGVyX2JvZHkgWzE0MzZdIHN0YXJ0LCBmZCAzIG1haW5f
ZmQgMwoKCkZhdGFsIHRyYXAgMTg6IGludGVnZXIgZGl2aWRlIGZhdWx0IHdoaWxlIGluIGtlcm5l
bCBtb2RlCmNwdWlkID0gMDsgYXBpYyBpZCA9IDAwCmluc3RydWN0aW9uIHBvaW50ZXIJPSAweDIw
OjB4ZmZmZmZmZmY4MDkwNTZiNQpzdGFjayBwb2ludGVyCSAgICAgICAgPSAweDI4OjB4ZmZmZmZl
MDFiZmQ3NzYzMApmcmFtZSBwb2ludGVyCSAgICAgICAgPSAweDI4OjB4ZmZmZmZlMDFiZmQ3NzY4
MApjb2RlIHNlZ21lbnQJCT0gYmFzZSAweDAsIGxpbWl0IDB4ZmZmZmYsIHR5cGUgMHgxYgoJCQk9
IERQTCAwLCBwcmVzIDEsIGxvbmcgMSwgZGVmMzIgMCwgZ3JhbiAxCnByb2Nlc3NvciBlZmxhZ3MJ
PSBpbnRlcnJ1cHQgZW5hYmxlZCwgcmVzdW1lLCBJT1BMID0gMApjdXJyZW50IHByb2Nlc3MJCT0g
MjQ4MCAocGt0LWdlbikKdHJhcCBudW1iZXIJCT0gMTgKcGFuaWM6IGludGVnZXIgZGl2aWRlIGZh
dWx0CmNwdWlkID0gMApLREI6IHN0YWNrIGJhY2t0cmFjZToKIzAgMHhmZmZmZmZmZjgwYjA4OGM3
IGF0IGtkYl9iYWNrdHJhY2UrMHg2NwojMSAweGZmZmZmZmZmODBhYmRjMzIgYXQgdnBhbmljKzB4
MTgyCiMyIDB4ZmZmZmZmZmY4MGFiZGFhMyBhdCBwYW5pYysweDQzCiMzIDB4ZmZmZmZmZmY4MGY4
NGQzMSBhdCB0cmFwX2ZhdGFsKzB4MzUxCiM0IDB4ZmZmZmZmZmY4MGY4NDljOCBhdCB0cmFwKzB4
NzY4CiM1IDB4ZmZmZmZmZmY4MGY2NzdkMSBhdCBjYWxsdHJhcCsweDgKIzYgMHhmZmZmZmZmZjgy
NjI5NmI4IGF0IG5tX29zX2dlbmVyaWNfeG1pdF9mcmFtZSsweDQ4CiM3IDB4ZmZmZmZmZmY4MjYy
MzNiZiBhdCBnZW5lcmljX25ldG1hcF90eHN5bmMrMHgyOWYKIzggMHhmZmZmZmZmZjgyNjFkNGZm
IGF0IG5ldG1hcF9wb2xsKzB4NTBmCiM5IDB4ZmZmZmZmZmY4MjYyYTY3MiBhdCBmcmVlYnNkX25l
dG1hcF9wb2xsKzB4MzIKIzEwIDB4ZmZmZmZmZmY4MDk2YWQ5MCBhdCBkZXZmc19wb2xsX2YrMHg3
MAojMTEgMHhmZmZmZmZmZjgwYjI3YzIwIGF0IGtlcm5fcG9sbCsweDY1MAojMTIgMHhmZmZmZmZm
ZjgwYjI3NWMxIGF0IHN5c19wb2xsKzB4NjEKIzEzIDB4ZmZmZmZmZmY4MGY4NTY4ZSBhdCBhbWQ2
NF9zeXNjYWxsKzB4NGNlCiMxNCAweGZmZmZmZmZmODBmNjdhYmIgYXQgWGZhc3Rfc3lzY2FsbCsw
eGZiClVwdGltZTogMjBtNDBzCgoKCgoKNzg2LjI0MzM1NSBbIDQ0Ml0gZ2VuZXJpY19uZXRtYXBf
cmVnaXN0ZXIgICBHZW5lcmljIGFkYXB0ZXIgMHhmZmZmZjgwMDEyYWUyMDAwIGdvZXMgb24KNzg2
LjI0NDg5MSBbIDQ4N10gZ2VuZXJpY19uZXRtYXBfcmVnaXN0ZXIgICBSWCByaW5nIDAgb2YgZ2Vu
ZXJpYyBhZGFwdGVyIDB4ZmZmZmY4MDAxMmFlMjAwMCBnb2VzIG9uCjc4Ni4yNDY1MDggWyA0OTRd
IGdlbmVyaWNfbmV0bWFwX3JlZ2lzdGVyICAgVFggcmluZyAwIG9mIGdlbmVyaWMgYWRhcHRlciAw
eGZmZmZmODAwMTJhZTIwMDAgZ29lcyBvbgo3ODYuMjcwMjA2IG1haW4gWzI3NzBdIG1hcHBlZCAz
MzQ5ODBLQiBhdCAweDgwMTYwMDAwMApTZW5kaW5nIG9uIG5ldG1hcDp2dG5ldDE6IDEgcXVldWVz
LCAxIHRocmVhZHMgYW5kIDEgY3B1cy4KMTAuMC4wLjEgLT4gMTAuMS4wLjEgKDAwOjAwOjAwOjAw
OjAwOjAwIC0+IGZmOmZmOmZmOmZmOmZmOmZmKQo3ODYuMzQ1MTM2IG1haW4gWzI4NjddIFNlbmRp
bmcgNTEyIHBhY2tldHMgZXZlcnkgIDAuMDAwMDAwMDAwIHMKNzg2LjM2MzM5NSBzdGFydF90aHJl
YWRzIFsyMjM1XSBXYWl0IDIgc2VjcyBmb3IgcGh5IHJlc2V0Cjc4OC40MjY2MTQgc3RhcnRfdGhy
ZWFkcyBbMjIzN10gUmVhZHkuLi4KNzg4LjQyNzQ1NCBzZW5kZXJfYm9keSBbMTQzNl0gc3RhcnQs
IGZkIDMgbWFpbl9mZCAzCgoKRmF0YWwgdHJhcCAxODogaW50ZWdlciBkaXZpZGUgZmF1bHQgd2hp
bGUgaW4ga2VybmVsIG1vZGUKY3B1aWQgPSAwOyBhcGljIGlkID0gMDAKaW5zdHJ1Y3Rpb24gcG9p
bnRlcgk9IDB4MjA6MHhmZmZmZmZmZjgwOTA1NmI1CnN0YWNrIHBvaW50ZXIJICAgICAgICA9IDB4
Mjg6MHhmZmZmZmUwMWJmZDU5NjMwCmZyYW1lIHBvaW50ZXIJICAgICAgICA9IDB4Mjg6MHhmZmZm
ZmUwMWJmZDU5NjgwCmNvZGUgc2VnbWVudAkJPSBiYXNlIDB4MCwgbGltaXQgMHhmZmZmZiwgdHlw
ZSAweDFiCgkJCT0gRFBMIDAsIHByZXMgMSwgbG9uZyAxLCBkZWYzMiAwLCBncmFuIDEKcHJvY2Vz
c29yIGVmbGFncwk9IGludGVycnVwdCBlbmFibGVkLCByZXN1bWUsIElPUEwgPSAwCmN1cnJlbnQg
cHJvY2VzcwkJPSAxMTQyIChwa3QtZ2VuKQp0cmFwIG51bWJlcgkJPSAxOApwYW5pYzogaW50ZWdl
ciBkaXZpZGUgZmF1bHQKY3B1aWQgPSAwCktEQjogc3RhY2sgYmFja3RyYWNlOgojMCAweGZmZmZm
ZmZmODBiMDg4YzcgYXQga2RiX2JhY2t0cmFjZSsweDY3CiMxIDB4ZmZmZmZmZmY4MGFiZGMzMiBh
dCB2cGFuaWMrMHgxODIKIzIgMHhmZmZmZmZmZjgwYWJkYWEzIGF0IHBhbmljKzB4NDMKIzMgMHhm
ZmZmZmZmZjgwZjg0ZDMxIGF0IHRyYXBfZmF0YWwrMHgzNTEKIzQgMHhmZmZmZmZmZjgwZjg0OWM4
IGF0IHRyYXArMHg3NjgKIzUgMHhmZmZmZmZmZjgwZjY3N2QxIGF0IGNhbGx0cmFwKzB4OAojNiAw
eGZmZmZmZmZmODI2Mjk2YjggYXQgbm1fb3NfZ2VuZXJpY194bWl0X2ZyYW1lKzB4NDgKIzcgMHhm
ZmZmZmZmZjgyNjIzM2JmIGF0IGdlbmVyaWNfbmV0bWFwX3R4c3luYysweDI5ZgojOCAweGZmZmZm
ZmZmODI2MWQ0ZmYgYXQgbmV0bWFwX3BvbGwrMHg1MGYKIzkgMHhmZmZmZmZmZjgyNjJhNjcyIGF0
IGZyZWVic2RfbmV0bWFwX3BvbGwrMHgzMgojMTAgMHhmZmZmZmZmZjgwOTZhZDkwIGF0IGRldmZz
X3BvbGxfZisweDcwCiMxMSAweGZmZmZmZmZmODBiMjdjMjAgYXQga2Vybl9wb2xsKzB4NjUwCiMx
MiAweGZmZmZmZmZmODBiMjc1YzEgYXQgc3lzX3BvbGwrMHg2MQojMTMgMHhmZmZmZmZmZjgwZjg1
NjhlIGF0IGFtZDY0X3N5c2NhbGwrMHg0Y2UKIzE0IDB4ZmZmZmZmZmY4MGY2N2FiYiBhdCBYZmFz
dF9zeXNjYWxsKzB4ZmIKVXB0aW1lOiA1bTQ3cwo=

--_006_DB5PR07MB16857B8F7A2B4783640074979B8E0DB5PR07MB1685eurp_--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?DB5PR07MB16857B8F7A2B4783640074979B8E0>