Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 14 Sep 2013 11:52:26 +0800
From:      Chenchong Qin <qinchenchong@gmail.com>
To:        Adrian Chadd <adrian@freebsd.org>
Cc:        "freebsd-wireless@freebsd.org" <freebsd-wireless@freebsd.org>
Subject:   Re: Chenchong's work on net80211_ratectl
Message-ID:  <CAFnsE3cFFHxOwLY2OFxhCUAM-Bg2zZvjrC8LMx17N-dfND74KQ@mail.gmail.com>
In-Reply-To: <CAJ-Vmo=Se2JziV8D2PYNgxmZro-3JRpp3ZsRkTTWvUQ0YigRPw@mail.gmail.com>
References:  <CAFnsE3dYdPf5yGTFH683Q1Zh0mc-g%2B_YtCTraNNt28z2vBoSKw@mail.gmail.com> <CAJ-Vmom4sY7jcNwWmJkrDwfWjsok2fk8UEwTi5A=egj1JyerLw@mail.gmail.com> <CAFnsE3cyg=msBfQqqKUMmLABSL=j24VoMBwbBjxQ6b7Dyy7Mqg@mail.gmail.com> <CAJ-Vmo=k8NddAYyAJCkx4eOaA_8XsSxg6uKrdddx%2BgmeT%2BX9KA@mail.gmail.com> <CAFnsE3eaOyRcO3LXSi3L=jbzpyMv5Nt_jRGKt_mmA0WV-EV5vA@mail.gmail.com> <CAJ-VmokdxLhK5x6kO=jJzk-dv61EDK-ZgmndOimoyWWf76HiZA@mail.gmail.com> <CAJ-VmonMjR5iVTMVN9532d%2BPqOXWNUoZvxPtQir5h=yGxU-XdQ@mail.gmail.com> <CAFnsE3d9nG-X2b=z1srKfTtpxC3w5L%2B6Hg3TbOnAQrJN%2Bt19GA@mail.gmail.com> <CAJ-VmokF6hPtg9FoEdeJXLLaZRNhzd=nr_o6nHE%2BjYiQKTg3zQ@mail.gmail.com> <CAFnsE3eMwX-GiRzJt8jk4r9mxwSAQkcrDwk%2BnWVG7q6dabeA3A@mail.gmail.com> <CAJ-Vmo=mzvS0UBC7fGx2t501%2Bfioi4DJcw8qobOpbYOUiraqGg@mail.gmail.com> <CAFnsE3df=1WEuLZh5355v_K2eBgcuBbpoza74Y-5vvNupBz22A@mail.gmail.com> <CAJ-VmokyXwkKLdsJw74bux7G5EJSRvFhugTcLR9BgXfw4ysYRg@mail.gmail.com> <CAJ-VmokU=ZXysjZfAJ-REZL7kwg-_Z-LeAKca7AefONW_O1E5A@mail.gmail.com> <CAFnsE3cS_2Ad1geQQ0UB4doEgqVfhNBMi6j4fCRpFgQqcu2kJw@mail.gmail.com> <CAFnsE3eMrwpo=hcFb9XfpLL53Ppso%2B%2BXTBfpieP8FGejAKW1_w@mail.gmail.com> <CAJ-Vmo=s=0u7VO00vgzxmR7bE4aTtMrshZ3j5F312dya284V1g@mail.gmail.com> <CAFnsE3c%2BOg_2hVXO3zU7gmY4xFQjnxbv=ehJm=pbbpLJcgwJrQ@mail.gmail.com> <CAJ-Vmo=D3BNhhSn9D3x6hBry=fDecOd7BwttQ5Yw2iUKGDBN3w@mail.gmail.com> <CAFnsE3dw5bOyVRqMb9K3ME%2BHoDL61-e_XNJjjt_nRTaY=4dnhw@mail.gmail.com> <CAJ-Vmo=0tkTKQnOjrmYKqWqC%2B_nnFLqimdp06STETxLsFgxKxQ@mail.gmail.com> <CAFnsE3dm27483GVp4PRiwk=sxagT7NXQz4fmyOpth2zpCM2MwQ@mail.gmail.com> <CAFnsE3fvpjCXEC1gN46VXfPdeXG5RSVzNiJkZJiQ6xSYQFb89g@mail.gmail.com> <CAFnsE3e1r6Ah5SSrqnrxoqXMRm3yCaUxCjSD90epWQJEZU-pzw@mail.gmail.com> <CAJ-Vmok3dAHiwbeyEU6B4oWm=n36ME2yyGE69twjdEygr8iZSw@mail.gmail.com> <CAFnsE3dxXr05%2Bv7F2hF7Qauoz-qqDzxkXiZrhUAtaxf0ObNhDg@mail.gmail.com> <CAJ-Vmo=Se2JziV8D2PYNgxmZro-3JRpp3ZsRkTTWvUQ0YigRPw@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--20cf307cfec04094f304e64fe611
Content-Type: text/plain; charset=ISO-8859-1

Hi,

Here is latest update. Per-device ratectl statistics is implemented in ath
and attached when ath is attaching.

Thanks!

Chenchong


On Sat, Sep 14, 2013 at 3:37 AM, Adrian Chadd <adrian@freebsd.org> wrote:

> Sweet, thanks!
>
>
>
> -adrian
>
>
>
> On 13 September 2013 09:11, Chenchong Qin <qinchenchong@gmail.com> wrote:
>
>> Hi!
>>
>> Here is some updates.
>>
>> Another member is added to ieee80211_rc_info to record value of the
>> maximum aggregate size. Then, in aggregation scenario, ratectl algo can
>> inform aggregation selection code of proper maximum aggregate size.
>>
>> Per-vap ratectl statistics is exported through sysctl. When
>> ieee80211_ratectl_init() is called, this statistics api is attached. It's
>> convenient to implement the per-device api -- just traverse the vap list
>> and call per-vap api for each vap. But, we know that ratectl of net80211
>> provides service to vap-granularity object, not to device directly. So, is
>> it more suitable to implement the per-device api in device driver (i.e.
>> attach per-device api when attaching the device)?
>>
>> Code will be posted later.
>>
>> Thanks!
>>
>> Chenchong
>>
>>
>> On Thu, Sep 12, 2013 at 2:05 AM, Adrian Chadd <adrian@freebsd.org> wrote:
>>
>>> Hi,
>>>
>>> For now, yes, you have to assume that you won't always get a response
>>> for a rate lookup. The buffer may be sent with NOACK set, it may be deleted
>>> during a channel change or scan, etc.
>>>
>>> And yes - the rate control lookup stuff for aggregate frames is a bit
>>> messy. It would be nice for the rate control code to return the rate _and_
>>> the maximum aggregate size, in case the aggregation selection wants to cap
>>> how long frames are at the given choice.
>>>
>>>
>>>
>>> -adrian
>>>
>>>
>>>
>>> On 11 September 2013 10:29, Chenchong Qin <qinchenchong@gmail.com>wrote:
>>>
>>>> Hi!
>>>>
>>>> I've added some aggregation support here!
>>>>
>>>> At first I intend to pass subframe informations(nframes, per-subframe
>>>> length etc.)
>>>> to the ratectl api. But it seems to be a paradox that rate lookup must
>>>> be performed
>>>> before the ampdu is formed (aggregation limit based on the rate control
>>>> decision
>>>> is need) and subframe informations can be obtain only after the ampdu
>>>> is formed.
>>>> So, I add a new ieee80211_rc_info flag to ieee80211_ratectl to let it
>>>> distinguish
>>>> aggregation and non-aggregation scenarios. If rate lookup is called in
>>>> an aggregation
>>>> scenario, this flag is set. Then, ratectl algo knows that it's now
>>>> finding rates for an
>>>> ampdu and the framelen which records len of the first frame can be
>>>> ignored. When
>>>> it comes to complete period, tx status that shows number of subframes
>>>> been sent
>>>> and number of subframes been successfully received is passed to the
>>>> ratectl api.
>>>>
>>>> I also get a question here - whether one tx that doesn't perform rate
>>>> lookup will call
>>>> the complete procedure?
>>>>
>>>> Thanks!
>>>>
>>>> Chenchong
>>>>
>>>>
>>>> On Sun, Sep 8, 2013 at 11:18 PM, Chenchong Qin <qinchenchong@gmail.com>wrote:
>>>>
>>>>> Hi!
>>>>>
>>>>> I've added the common ratectl state as an mbuf tag!
>>>>>
>>>>> After days of frustration (compile errors, boot failed, kernel panics,
>>>>> suddenly kernel freezing...), it seems that ath now can use 11n-aware
>>>>> net80211 ratectl api to do rate control. Attachment[0] is the diff of
>>>>> modifications to dev/ath. Changes to net80211 is minor this time. Just add
>>>>> some debug msgs to it. Please reference my gsoc svn repo<https://svnweb.freebsd.org/socsvn/soc2013/ccqin/head/>;
>>>>> .
>>>>>
>>>>> It's worth mentioning that sometimes the kernel will "freezing" (it
>>>>> looks like all things stop working, screen is freezing, keyboard and mouse
>>>>> are not responding) after wireless stuff start working for a while. At
>>>>> first, I consider it caused by my modification to ath. But this strange
>>>>> thing can also happen in a head kernel (r255382). Attachment[1] is some
>>>>> useful messages just before it happens. By the way, I use a AR9227 device.
>>>>>
>>>>> And, I found that, for aggregation scenario, ath gathers tx
>>>>> information and update the ratectl states. So, what we can do to net80211
>>>>> to let it support aggregation?
>>>>>
>>>>> Thanks!
>>>>>
>>>>> Chenchong
>>>>>
>>>>>
>>>>> On Tue, Sep 3, 2013 at 9:29 AM, Chenchong Qin <qinchenchong@gmail.com>wrote:
>>>>>
>>>>>> OK!
>>>>>>
>>>>>> Thanks! :-)
>>>>>>
>>>>>> Chenchong
>>>>>>
>>>>>>
>>>>>> On Tue, Sep 3, 2013 at 1:56 AM, Adrian Chadd <adrian@freebsd.org>wrote:
>>>>>>
>>>>>>> Hi!
>>>>>>>
>>>>>>> You can declare an mbuf tag and use that. Look at M_TXCB in net80211
>>>>>>> and how mbuf tags are added.
>>>>>>>
>>>>>>> I've long thought about adding a net80211 mbuf tag to represent
>>>>>>> -all- of the tx related state - TX callback, rate control, rate completion,
>>>>>>> aggregation state, retry count, etc. That way all the drivers can use it.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> -adrian
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

--20cf307cfec04094f304e64fe611
Content-Type: application/octet-stream; 
	name="20130914-net80211-ratectl-ath.diff"
Content-Disposition: attachment; 
	filename="20130914-net80211-ratectl-ath.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hlkaqstj0

SW5kZXg6IGRldi9yYWwvcnQyODYwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3JhbC9ydDI4NjAuYwko
cmV2aXNpb24gMjU0ODI2KQorKysgZGV2L3JhbC9ydDI4NjAuYwkod29ya2luZyBjb3B5KQpAQCAt
NDg0LDcgKzQ4NCw4IEBACiAJLyogSFcgc3VwcG9ydHMgdXAgdG8gMjU1IFNUQXMgKDAtMjU0KSBp
biBIb3N0QVAgYW5kIElCU1MgbW9kZXMgKi8KIAl2YXAtPml2X21heF9haWQgPSBtaW4oSUVFRTgw
MjExX0FJRF9NQVgsIFJUMjg2MF9XQ0lEX01BWCk7CiAKLQlpZWVlODAyMTFfcmF0ZWN0bF9pbml0
KHZhcCk7CisJLyogWFhYIFRPRE8gZmlsbCB0aGUgY2FwICovCisJaWVlZTgwMjExX3JhdGVjdGxf
aW5pdCh2YXAsIDApOwogCS8qIGNvbXBsZXRlIHNldHVwICovCiAJaWVlZTgwMjExX3ZhcF9hdHRh
Y2godmFwLCBpZWVlODAyMTFfbWVkaWFfY2hhbmdlLCBpZWVlODAyMTFfbWVkaWFfc3RhdHVzKTsK
IAlpZiAoVEFJTFFfRklSU1QoJmljLT5pY192YXBzKSA9PSB2YXApCkBAIC0xMTIxLDExICsxMTIy
LDE3IEBACiAJCQkJcmV0cnljbnQgPSAxOwogCQkJZWxzZQogCQkJCXJldHJ5Y250ID0gMDsKKwkJ
CWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5uaV92YXAsIG5pLCBOVUxMKTsgLyog
anVzdCBtYWtlIGl0IGNvbXBpbGVkLiBxY2MgKi8KKyNpZiAwCiAJCQlpZWVlODAyMTFfcmF0ZWN0
bF90eF9jb21wbGV0ZShuaS0+bmlfdmFwLCBuaSwKIAkJCSAgICBJRUVFODAyMTFfUkFURUNUTF9U
WF9TVUNDRVNTLCAmcmV0cnljbnQsIE5VTEwpOworI2VuZGlmCiAJCX0gZWxzZSB7CisJCQlpZWVl
ODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlfdmFwLCBuaSwgTlVMTCk7IC8qIGp1c3Qg
bWFrZSBpdCBjb21waWxlZC4gcWNjICovCisjaWYgMAogCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhf
Y29tcGxldGUobmktPm5pX3ZhcCwgbmksCiAJCQkgICAgSUVFRTgwMjExX1JBVEVDVExfVFhfRkFJ
TFVSRSwgJnJldHJ5Y250LCBOVUxMKTsKKyNlbmRpZgogCQkJaWZwLT5pZl9vZXJyb3JzKys7CiAJ
CX0KIAl9CkluZGV4OiBkZXYvcmFsL3J0MjU2MC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldi9yYWwvcnQy
NTYwLmMJKHJldmlzaW9uIDI1NDgyNikKKysrIGRldi9yYWwvcnQyNTYwLmMJKHdvcmtpbmcgY29w
eSkKQEAgLTQyNiw3ICs0MjYsOCBAQAogCXZhcC0+aXZfbmV3c3RhdGUgPSBydDI1NjBfbmV3c3Rh
dGU7CiAJdmFwLT5pdl91cGRhdGVfYmVhY29uID0gcnQyNTYwX2JlYWNvbl91cGRhdGU7CiAKLQlp
ZWVlODAyMTFfcmF0ZWN0bF9pbml0KHZhcCk7CisJLyogWFhYIFRPRE8gZmlsbCB0aGUgY2FwICov
CisJaWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXAsIDApOwogCS8qIGNvbXBsZXRlIHNldHVwICov
CiAJaWVlZTgwMjExX3ZhcF9hdHRhY2godmFwLCBpZWVlODAyMTFfbWVkaWFfY2hhbmdlLCBpZWVl
ODAyMTFfbWVkaWFfc3RhdHVzKTsKIAlpZiAoVEFJTFFfRklSU1QoJmljLT5pY192YXBzKSA9PSB2
YXApCkBAIC05NTUsOSArOTU2LDEzIEBACiAKIAkJCURQUklOVEZOKHNjLCAxMCwgIiVzXG4iLCAi
ZGF0YSBmcmFtZSBzZW50IHN1Y2Nlc3NmdWxseSIpOwogCQkJaWYgKGRhdGEtPnJpeCAhPSBJRUVF
ODAyMTFfRklYRURfUkFURV9OT05FKQorCQkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRl
KHZhcCwgbmksIE5VTEwpOyAvKiBqdXN0IG1ha2UgaXQgY29tcGlsZWQuIHFjYyAqLworI2lmIDAK
IAkJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLAogCQkJCSAgICBJRUVF
ODAyMTFfUkFURUNUTF9UWF9TVUNDRVNTLAogCQkJCSAgICAmcmV0cnljbnQsIE5VTEwpOworI2Vu
ZGlmCisKIAkJCWlmcC0+aWZfb3BhY2tldHMrKzsKIAkJCWJyZWFrOwogCkBAIC05NjcsOSArOTcy
LDEyIEBACiAJCQlEUFJJTlRGTihzYywgOSwgImRhdGEgZnJhbWUgc2VudCBhZnRlciAldSByZXRy
aWVzXG4iLAogCQkJICAgIHJldHJ5Y250KTsKIAkJCWlmIChkYXRhLT5yaXggIT0gSUVFRTgwMjEx
X0ZJWEVEX1JBVEVfTk9ORSkKKwkJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAs
IG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNvbXBpbGVkLiBxY2MgKi8KKyNpZiAwCiAJCQkJ
aWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwKIAkJCQkgICAgSUVFRTgwMjEx
X1JBVEVDVExfVFhfU1VDQ0VTUywKIAkJCQkgICAgJnJldHJ5Y250LCBOVUxMKTsKKyNlbmRpZgog
CQkJaWZwLT5pZl9vcGFja2V0cysrOwogCQkJYnJlYWs7CiAKQEAgLTk3OSw5ICs5ODcsMTIgQEAK
IAkJCURQUklOVEZOKHNjLCA5LCAiZGF0YSBmcmFtZSBmYWlsZWQgYWZ0ZXIgJWQgcmV0cmllc1xu
IiwKIAkJCSAgICByZXRyeWNudCk7CiAJCQlpZiAoZGF0YS0+cml4ICE9IElFRUU4MDIxMV9GSVhF
RF9SQVRFX05PTkUpCisJCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwg
TlVMTCk7IC8qIGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNjICovCisjaWYgMAogCQkJCWllZWU4
MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksCiAJCQkJICAgIElFRUU4MDIxMV9SQVRF
Q1RMX1RYX0ZBSUxVUkUsCiAJCQkJICAgICZyZXRyeWNudCwgTlVMTCk7CisjZW5kaWYKIAkJCWlm
cC0+aWZfb2Vycm9ycysrOwogCQkJYnJlYWs7CiAKSW5kZXg6IGRldi9yYWwvcnQyNjYxLmMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gZGV2L3JhbC9ydDI2NjEuYwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2L3Jh
bC9ydDI2NjEuYwkod29ya2luZyBjb3B5KQpAQCAtNDIzLDcgKzQyMyw4IEBACiAJdmFwLT5pdl91
cGRhdGVfYmVhY29uID0gcnQyNjYxX2JlYWNvbl91cGRhdGU7CiAjZW5kaWYKIAotCWllZWU4MDIx
MV9yYXRlY3RsX2luaXQodmFwKTsKKwkvKiBYWFggVE9ETyBmaWxsIHRoZSBjYXAgKi8KKwlpZWVl
ODAyMTFfcmF0ZWN0bF9pbml0KHZhcCwgMCk7CiAJLyogY29tcGxldGUgc2V0dXAgKi8KIAlpZWVl
ODAyMTFfdmFwX2F0dGFjaCh2YXAsIGllZWU4MDIxMV9tZWRpYV9jaGFuZ2UsIGllZWU4MDIxMV9t
ZWRpYV9zdGF0dXMpOwogCWlmIChUQUlMUV9GSVJTVCgmaWMtPmljX3ZhcHMpID09IHZhcCkKQEAg
LTkwNSw5ICs5MDYsMTIgQEAKIAkJCURQUklOVEZOKHNjLCAxMCwgImRhdGEgZnJhbWUgc2VudCBz
dWNjZXNzZnVsbHkgYWZ0ZXIgIgogCQkJICAgICIlZCByZXRyaWVzXG4iLCByZXRyeWNudCk7CiAJ
CQlpZiAoZGF0YS0+cml4ICE9IElFRUU4MDIxMV9GSVhFRF9SQVRFX05PTkUpCisJCQkJaWVlZTgw
MjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBpdCBj
b21waWxlZC4gcWNjICovCisjaWYgMAogCQkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRl
KHZhcCwgbmksCiAJCQkJICAgIElFRUU4MDIxMV9SQVRFQ1RMX1RYX1NVQ0NFU1MsCiAJCQkJICAg
ICZyZXRyeWNudCwgTlVMTCk7CisjZW5kaWYKIAkJCWlmcC0+aWZfb3BhY2tldHMrKzsKIAkJCWJy
ZWFrOwogCkBAIC05MTcsOSArOTIxLDEyIEBACiAJCQlEUFJJTlRGTihzYywgOSwgIiVzXG4iLAog
CQkJICAgICJzZW5kaW5nIGRhdGEgZnJhbWUgZmFpbGVkICh0b28gbXVjaCByZXRyaWVzKSIpOwog
CQkJaWYgKGRhdGEtPnJpeCAhPSBJRUVFODAyMTFfRklYRURfUkFURV9OT05FKQorCQkJCWllZWU4
MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksIE5VTEwpOyAvKiBqdXN0IG1ha2UgaXQg
Y29tcGlsZWQuIHFjYyAqLworI2lmIDAKIAkJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0
ZSh2YXAsIG5pLAogCQkJCSAgICBJRUVFODAyMTFfUkFURUNUTF9UWF9GQUlMVVJFLAogCQkJCSAg
ICAmcmV0cnljbnQsIE5VTEwpOworI2VuZGlmCiAJCQlpZnAtPmlmX29lcnJvcnMrKzsKIAkJCWJy
ZWFrOwogCkluZGV4OiBkZXYvYXRoL2lmX2F0aF90eF9odC5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldi9h
dGgvaWZfYXRoX3R4X2h0LmMJKHJldmlzaW9uIDI1NDgyNikKKysrIGRldi9hdGgvaWZfYXRoX3R4
X2h0LmMJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDggQEAKIAogI2luY2x1ZGUgPG5ldDgw
MjExL2llZWU4MDIxMV92YXIuaD4KICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmVnZG9t
YWluLmg+CisKKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oPgogI2lmZGVm
IElFRUU4MDIxMV9TVVBQT1JUX1NVUEVSRwogI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9z
dXBlcmcuaD4KICNlbmRpZgpAQCAtMjIxLDEzICsyMjMsNDcgQEAKIHZvaWQKIGF0aF90eF9yYXRl
X2ZpbGxfcmNmbGFncyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmKQog
ewotCXN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkgPSBiZi0+YmZfbm9kZTsKLQlzdHJ1Y3QgaWVl
ZTgwMjExY29tICppYyA9IG5pLT5uaV9pYzsKKwkvLyBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5p
ID0gYmYtPmJmX25vZGU7CisJLy8gc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSBuaS0+bmlfaWM7
CiAJY29uc3QgSEFMX1JBVEVfVEFCTEUgKnJ0ID0gc2MtPnNjX2N1cnJhdGVzOwotCXN0cnVjdCBh
dGhfcmNfc2VyaWVzICpyYyA9IGJmLT5iZl9zdGF0ZS5iZnNfcmM7CisJc3RydWN0IGF0aF9yY19z
ZXJpZXMgKmF0aF9yYyA9IGJmLT5iZl9zdGF0ZS5iZnNfcmM7CisJc3RydWN0IGllZWU4MDIxMV9y
Y19pbmZvICpyY19pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3NlcmllcyAqcmMg
PSBOVUxMOworCXN0cnVjdCBtX3RhZyAqbXRhZzsKIAl1aW50OF90IHJhdGU7CiAJaW50IGk7CiAK
KwltdGFnID0gbV90YWdfbG9jYXRlKGJmLT5iZl9tLCBNVEFHX0FCSV9ORVQ4MDIxMSwgCisJCQlO
RVQ4MDIxMV9UQUdfUkFURUNUTCwgTlVMTCk7CisJaWYgKE5VTEwgPT0gbXRhZykKKwkJcmV0dXJu
OworCisJcmNfaW5mbyA9IChzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8qKShtdGFnICsgMSk7CisJ
cmMgPSByY19pbmZvLT5pcmlfcmM7CisKKwlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX1JBVEVD
VExfTlVNOyBpKyspIHsKKwkJaWYgKHJjW2ldLnRyaWVzID09IDApCisJCQljb250aW51ZTsKKwor
CQlyYXRlID0gcnQtPmluZm9bcmNbaV0ucml4XS5yYXRlQ29kZTsKKwkJaWYgKHJjW2ldLmZsYWdz
ICYgSUVFRTgwMjExX1JBVEVDVExfRkxBR19TUCkKKwkJCXJhdGUgfD0gcnQtPmluZm9bcmNbaV0u
cml4XS5zaG9ydFByZWFtYmxlOworCisJCXJjW2ldLnJhdGVjb2RlID0gcmF0ZTsKKworCQlhdGhf
cmNbaV0ucml4ID0gcmNbaV0ucml4OworCQlhdGhfcmNbaV0udHJpZXMgPSByY1tpXS50cmllczsK
KwkJYXRoX3JjW2ldLmZsYWdzID0gcmNbaV0uZmxhZ3M7CisJCWF0aF9yY1tpXS5yYXRlY29kZSA9
IHJjW2ldLnJhdGVjb2RlOworCQlhdGhfcmNbaV0udHhfcG93ZXJfY2FwID0gcmNbaV0udHhfcG93
ZXJfY2FwOworCQlhdGhfcmNbaV0ubWF4NG1zZnJhbWVsZW4gPSByY1tpXS5tYXg0bXNmcmFtZWxl
bjsKKwkJCisJCURQUklOVEYoc2MsIEFUSF9ERUJVR19TV19UWF9BR0dSLAorCQkgICAgIiVzOiBp
PSVkLCByYXRlPTB4JXgsIGZsYWdzPTB4JXgsIG1heDRtcz0lZFxuIiwKKwkJICAgIF9fZnVuY19f
LCBpLCByYXRlLCByY1tpXS5mbGFncywgcmNbaV0ubWF4NG1zZnJhbWVsZW4pOworCX0KKworI2lm
IDAKIAlmb3IgKGkgPSAwOyBpIDwgQVRIX1JDX05VTTsgaSsrKSB7CiAJCXJjW2ldLmZsYWdzID0g
MDsKIAkJaWYgKHJjW2ldLnRyaWVzID09IDApCkBAIC0zMjUsNiArMzYxLDcgQEAKIAkJICAgICIl
czogaT0lZCwgcmF0ZT0weCV4LCBmbGFncz0weCV4LCBtYXg0bXM9JWRcbiIsCiAJCSAgICBfX2Z1
bmNfXywgaSwgcmF0ZSwgcmNbaV0uZmxhZ3MsIHJjW2ldLm1heDRtc2ZyYW1lbGVuKTsKIAl9Cisj
ZW5kaWYKIH0KIAogLyoKSW5kZXg6IGRldi9hdGgvaWZfYXRoLmMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2
L2F0aC9pZl9hdGguYwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2L2F0aC9pZl9hdGguYwkod29y
a2luZyBjb3B5KQpAQCAtODIsNiArODIsOCBAQAogCiAjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgw
MjExX3Zhci5oPgogI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9yZWdkb21haW4uaD4KKwor
I2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsLmg+CiAjaWZkZWYgSUVFRTgwMjEx
X1NVUFBPUlRfU1VQRVJHCiAjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3N1cGVyZy5oPgog
I2VuZGlmCkBAIC0zMjIsNiArMzI0LDcgQEAKIAlzYy0+c2NfYWggPSBhaDsKIAlzYy0+c2NfaW52
YWxpZCA9IDA7CS8qIHJlYWR5IHRvIGdvLCBlbmFibGUgaW50ZXJydXB0IGhhbmRsaW5nICovCiAj
aWZkZWYJQVRIX0RFQlVHCisJYXRoX2RlYnVnIHw9IEFUSF9ERUJVR19OT0RFOyAKIAlzYy0+c2Nf
ZGVidWcgPSBhdGhfZGVidWc7CiAjZW5kaWYKIApAQCAtMTM4MCw2ICsxMzgzLDE2IEBACiAJfQog
CUFUSF9VTkxPQ0soc2MpOwogCisJdWludDMyX3QgY2FwcyA9IDA7CisJaWYgKHNjLT5zY19tcnJl
dHJ5KQorCQljYXBzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0NBUF9NUlI7CisJaWYgKHNjLT5zY19t
cnJwcm90KQorCQljYXBzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0NBUF9NUlJQUk9UOworCWlmIChz
Yy0+c2NfdHhjaGFpbm1hc2sgPiAxKQorCQljYXBzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0NBUF9N
VUxUWENIQUlOOworCisJaWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXAsIGNhcHMpOworCQogCS8q
IGNvbXBsZXRlIHNldHVwICovCiAJaWVlZTgwMjExX3ZhcF9hdHRhY2godmFwLCBhdGhfbWVkaWFf
Y2hhbmdlLCBpZWVlODAyMTFfbWVkaWFfc3RhdHVzKTsKIAlyZXR1cm4gdmFwOwpAQCAtMTQxNCw2
ICsxNDI3LDcgQEAKIAkJYXRoX3N0b3ByZWN2KHNjLCAxKTsJCS8qIHN0b3AgcmVjdiBzaWRlICov
CiAJfQogCisJaWVlZTgwMjExX3JhdGVjdGxfZGVpbml0KHZhcCk7CiAJaWVlZTgwMjExX3ZhcF9k
ZXRhY2godmFwKTsKIAogCS8qCkBAIC00MDQyLDYgKzQwNTYsOCBAQAogewogCXN0cnVjdCBpZWVl
ODAyMTFfbm9kZSAqbmkgPSBiZi0+YmZfbm9kZTsKIAlzdHJ1Y3QgYXRoX25vZGUgKmFuID0gTlVM
TDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2luZm8gPSBOVUxMOworCXN0cnVjdCBt
X3RhZyAqbXRhZzsKIAogCUFUSF9UWF9VTkxPQ0tfQVNTRVJUKHNjKTsKIAlBVEhfVFhRX1VOTE9D
S19BU1NFUlQodHhxKTsKQEAgLTQwNjgsMTAgKzQwODQsMzQgQEAKIAkJCSAqIFhYWCBhc3N1bWUg
dGhpcyBpc24ndCBhbiBhZ2dyZWdhdGUKIAkJCSAqIGZyYW1lLgogCQkJICovCisjaWYgMAogCQkJ
YXRoX3R4X3VwZGF0ZV9yYXRlY3RybChzYywgbmksCiAJCQkgICAgIGJmLT5iZl9zdGF0ZS5iZnNf
cmMsIHRzLAogCQkJICAgIGJmLT5iZl9zdGF0ZS5iZnNfcGt0bGVuLCAxLAogCQkJICAgICh0cy0+
dHNfc3RhdHVzID09IDAgPyAwIDogMSkpOworI2VuZGlmCisJCQkvKiBuZXQ4MDIxMSByYXRlY3Rs
ICovCisJCSAgICBtdGFnID0gbV90YWdfbG9jYXRlKGJmLT5iZl9tLCBNVEFHX0FCSV9ORVQ4MDIx
MSwgCisJCQkJICAgICAgICAgICAgTkVUODAyMTFfVEFHX1JBVEVDVEwsIE5VTEwpOworCQkJaWYg
KE5VTEwgPT0gbXRhZykgeworCQkJCUlFRUU4MDIxMV9OT1RFKG5pLT5uaV92YXAsIElFRUU4MDIx
MV9NU0dfUkFURUNUTCwgbmksCisJCQkJCQkiJXM6IG5vIHJhdGVjdGwgbWJ1ZiB0YWcgZm91bmQu
XG4iLCBfX2Z1bmNfXyk7CisJCQkJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvIHRtcF9yY19pbmZv
OworCQkJCXJjX2luZm8gPSAmdG1wX3JjX2luZm87CisJCQkJYnplcm8ocmNfaW5mbywgc2l6ZW9m
KHJjX2luZm8pKTsKKwkJCX0gZWxzZSB7CisJCQkJSUVFRTgwMjExX05PVEUobmktPm5pX3ZhcCwg
SUVFRTgwMjExX01TR19SQVRFQ1RMLCBuaSwKKwkJCQkJCSIlczogZm91bmQgcmF0ZWN0bCBtYnVm
IHRhZy5cbiIsIF9fZnVuY19fKTsKKwkJCQlyY19pbmZvID0gKHN0cnVjdCBpZWVlODAyMTFfcmNf
aW5mbyopKG10YWcgKyAxKTsKKwkJCX0KKwkKKwkJCWllZWU4MDIxMV9yYXRlY3RsX3JjX2luZm9f
c2V0KHJjX2luZm8sCisJCQkJCTEsICh0cy0+dHNfc3RhdHVzID09IDAgPyAwIDogMSksIAorCQkJ
CQliZi0+YmZfc3RhdGUuYmZzX3BrdGxlbiwKKwkJCQkJdHMtPnRzX3Nob3J0cmV0cnksIHRzLT50
c19sb25ncmV0cnksCisJCQkJCXRzLT50c19maW5hbHRzaSwgdHMtPnRzX3JhdGUpOworCQkJcmNf
aW5mby0+aXJpX2ZsYWdzICY9IH5JRUVFODAyMTFfUkFURUNUTF9JTkZPX0FHR1I7CQorCQkJaWVl
ZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUobmktPm5pX3ZhcCwgbmksIHJjX2luZm8pOwogCQl9
CiAJCWF0aF90eF9kZWZhdWx0X2NvbXAoc2MsIGJmLCAwKTsKIAl9IGVsc2UKQEAgLTU1NzQsOSAr
NTYxNCwxNSBAQAogCiAJYW4tPmFuX21jYXN0cml4ID0gYXRoX3R4X2ZpbmRyaXgoc2MsIHRwLT5t
Y2FzdHJhdGUpOwogCWFuLT5hbl9tZ210cml4ID0gYXRoX3R4X2ZpbmRyaXgoc2MsIHRwLT5tZ210
cmF0ZSk7Ci0KKyNpZiAwCiAJYXRoX3JhdGVfbmV3YXNzb2Moc2MsIGFuLCBpc25ldyk7CisjZW5k
aWYKIAorCURQUklOVEYoc2MsIEFUSF9ERUJVR19OT0RFLCAiJXM6IG5ld2Fzc29jIGlzIG5ldzog
JWRcbiIsCisJCQlfX2Z1bmNfXywgaXNuZXcpOworCWlmIChpc25ldykKKwkJaWVlZTgwMjExX3Jh
dGVjdGxfbm9kZV9pbml0KG5pKTsKKwogCWlmIChpc25ldyAmJgogCSAgICAodmFwLT5pdl9mbGFn
cyAmIElFRUU4MDIxMV9GX1BSSVZBQ1kpID09IDAgJiYgc2MtPnNjX2hhc2NscmtleSAmJgogCSAg
ICBuaS0+bmlfdWNhc3RrZXkud2tfa2V5aXggPT0gSUVFRTgwMjExX0tFWUlYX05PTkUpCkluZGV4
OiBkZXYvYXRoL2lmX2F0aF9zeXNjdGwuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYvYXRoL2lmX2F0aF9z
eXNjdGwuYwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2L2F0aC9pZl9hdGhfc3lzY3RsLmMJKHdv
cmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAKIAogI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4
MDIxMV92YXIuaD4KICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmVnZG9tYWluLmg+Cisj
aW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwuaD4KICNpZmRlZiBJRUVFODAyMTFf
U1VQUE9SVF9TVVBFUkcKICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfc3VwZXJnLmg+CiAj
ZW5kaWYKQEAgLTYwMiw2ICs2MDMsMjggQEAKIH0KICNlbmRpZiAvKiBBVEhfREVCVUdfQUxRICov
CiAKK3N0YXRpYyBpbnQKK2F0aF9zeXNjdGxfcmF0ZWN0bF9zdGF0cyhTWVNDVExfSEFORExFUl9B
UkdTKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXJnMTsKKwlzdHJ1Y3QgaWVlZTgwMjEx
Y29tICppYyA9IHNjLT5zY19pZnAtPmlmX2wyY29tOyAKKwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2
YXA7CisJaW50IGVycm9yLCB2OworCisJdiA9IDA7CisJZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2lu
dChvaWRwLCAmdiwgMCwgcmVxKTsKKwlpZiAoZXJyb3IgfHwgIXJlcS0+bmV3cHRyKQorCQlyZXR1
cm4gZXJyb3I7CisKKwlwcmludGYoIlxuWyVzXTogcGVyLWRldmljZSBuZXQ4MDIxMSByYXRlY3Rs
IHN0YXRpc3RpY3NcbiIsIAorCQkJaWMtPmljX2lmcC0+aWZfeG5hbWUpOworCVRBSUxRX0ZPUkVB
Q0godmFwLCAmaWMtPmljX3ZhcHMsIGl2X25leHQpIHsKKwkJaWVlZTgwMjExX3JhdGVjdGxfc3Rh
dHModmFwKTsKKwl9CisJCQorCXJldHVybiAwOworfQorCiB2b2lkCiBhdGhfc3lzY3RsYXR0YWNo
KHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewpAQCAtNzkyLDYgKzgxNSwxMCBAQAogI2lmZGVmCUFU
SF9ERUJVR19BTFEKIAlhdGhfc3lzY3RsX2FscV9hdHRhY2goc2MpOwogI2VuZGlmCisJCisJU1lT
Q1RMX0FERF9QUk9DKGN0eCwgU1lTQ1RMX0NISUxEUkVOKHRyZWUpLCBPSURfQVVUTywKKwkJInJh
dGVjdGxfc3RhdHMiLCBDVExUWVBFX0lOVCB8IENUTEZMQUdfUlcsIHNjLCAwLAorCQlhdGhfc3lz
Y3RsX3JhdGVjdGxfc3RhdHMsICJJIiwgInBlci1kZXZpY2UgbmV0ODAyMTEgcmF0ZWN0bCBzdGF0
aXN0aWNzIik7CiB9CiAKIHN0YXRpYyBpbnQKSW5kZXg6IGRldi9hdGgvaWZfYXRoX3R4LmMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gZGV2L2F0aC9pZl9hdGhfdHguYwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2
L2F0aC9pZl9hdGhfdHguYwkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsOCBAQAogCiAjaW5j
bHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3Zhci5oPgogI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4
MDIxMV9yZWdkb21haW4uaD4KKworI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9yYXRlY3Rs
Lmg+CiAjaWZkZWYgSUVFRTgwMjExX1NVUFBPUlRfU1VQRVJHCiAjaW5jbHVkZSA8bmV0ODAyMTEv
aWVlZTgwMjExX3N1cGVyZy5oPgogI2VuZGlmCkBAIC0xMzg3LDYgKzEzODksMTAgQEAKIHN0YXRp
YyB2b2lkCiBhdGhfdHhfZG9fcmF0ZWxvb2t1cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0
IGF0aF9idWYgKmJmKQogeworCXN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkgPSBiZi0+YmZfbm9k
ZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2luZm8gPSBOVUxMOworCXN0cnVjdCBp
ZWVlODAyMTFfcmNfc2VyaWVzICpyYyA9IE5VTEw7CisJc3RydWN0IG1fdGFnICptdGFnOwogCXVp
bnQ4X3QgcmF0ZSwgcml4OwogCWludCB0cnkwOwogCkBAIC0xMzk1LDcgKzE0MDEsNyBAQAogCiAJ
LyogR2V0IHJpZCBvZiBhbnkgcHJldmlvdXMgc3RhdGUgKi8KIAliemVybyhiZi0+YmZfc3RhdGUu
YmZzX3JjLCBzaXplb2YoYmYtPmJmX3N0YXRlLmJmc19yYykpOwotCisjaWYgMAogCUFUSF9OT0RF
X0xPQ0soQVRIX05PREUoYmYtPmJmX25vZGUpKTsKIAlhdGhfcmF0ZV9maW5kcmF0ZShzYywgQVRI
X05PREUoYmYtPmJmX25vZGUpLCBiZi0+YmZfc3RhdGUuYmZzX3NocHJlYW0sCiAJICAgIGJmLT5i
Zl9zdGF0ZS5iZnNfcGt0bGVuLCAmcml4LCAmdHJ5MCwgJnJhdGUpOwpAQCAtMTQwOSw3ICsxNDE1
LDQ0IEBACiAJCWF0aF9yYXRlX2dldHh0eHJhdGVzKHNjLCBBVEhfTk9ERShiZi0+YmZfbm9kZSks
IHJpeCwKIAkJICAgIGJmLT5iZl9zdGF0ZS5iZnNfcmMpOwogCUFUSF9OT0RFX1VOTE9DSyhBVEhf
Tk9ERShiZi0+YmZfbm9kZSkpOworI2VuZGlmCiAKKwkvKiBuZXQ4MDIxMSByYXRlY3RsICovCisJ
bXRhZyA9IG1fdGFnX2xvY2F0ZShiZi0+YmZfbSwgTVRBR19BQklfTkVUODAyMTEsIAorCQkJTkVU
ODAyMTFfVEFHX1JBVEVDVEwsIE5VTEwpOworYWdhaW46CQorCWlmIChOVUxMID09IG10YWcpIHsK
KwkJbXRhZyA9IG1fdGFnX2FsbG9jKE1UQUdfQUJJX05FVDgwMjExLCBORVQ4MDIxMV9UQUdfUkFU
RUNUTCwKKwkJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yY19pbmZvKSwgTV9OT1dBSVQpOwor
CQlpZiAoTlVMTCA9PSBtdGFnKSB7CisJCQlJRUVFODAyMTFfTk9URShuaS0+bmlfdmFwLCBJRUVF
ODAyMTFfTVNHX1JBVEVDVEwsIG5pLAorCQkJCQkiJXM6IGNhbid0IGFsbG9jIG1idWYgdGFnIGZv
ciByYXRlY3RsLlxuIiwgX19mdW5jX18pOworCQkJZ290byBhZ2FpbjsKKwkJfQorCX0gZWxzZQor
CQlJRUVFODAyMTFfTk9URShuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsIG5pLAor
CQkJCSIlczogbmFuaT8gZmluZCBtYnVmIHRhZyBmb3IgcmF0ZWN0bCBkaXJlY3RseS5cbiIsIF9f
ZnVuY19fKTsKKwkKKwlyY19pbmZvID0gKHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyopKG10YWcg
KyAxKTsKKwlyYyA9IHJjX2luZm8tPmlyaV9yYzsKKwkKKwliemVybyhyY19pbmZvLCBzaXplb2Yo
cmNfaW5mbykpOworCisJaWYgKGJmLT5iZl9zdGF0ZS5iZnNfc2hwcmVhbSkKKwkJcmNfaW5mby0+
aXJpX2ZsYWdzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0lORk9fU1A7CisJaWYgKGJmLT5iZl9zdGF0
ZS5iZnNfYWdncikKKwkJcmNfaW5mby0+aXJpX2ZsYWdzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0lO
Rk9fQUdHUjsKKworCXJjX2luZm8tPmlyaV9mcmFtZWxlbiA9IGJmLT5iZl9zdGF0ZS5iZnNfcGt0
bGVuOworCisJaWVlZTgwMjExX3JhdGVjdGxfcmF0ZXMobmksIHJjX2luZm8pOworCisJbV90YWdf
cHJlcGVuZChiZi0+YmZfbSwgbXRhZyk7CisKKwlyaXggPSByY1swXS5yaXg7CisJdHJ5MCA9IHJj
WzBdLnRyaWVzOworCXJhdGUgPSBuaS0+bmlfdHhyYXRlOworCiAJc2MtPnNjX3R4cml4ID0gcml4
OwkvKiBmb3IgTEVEIGJsaW5raW5nICovCiAJc2MtPnNjX2xhc3RkYXRhcml4ID0gcml4OwkvKiBm
b3IgZmFzdCBmcmFtZXMgKi8KIAliZi0+YmZfc3RhdGUuYmZzX3RyeTAgPSB0cnkwOwpAQCAtMTUz
MCw3ICsxNTczLDggQEAKIAkgKiBmcmFtZXMgdGhhdCBtdXN0IGdvIG91dCAtIGVnIG1hbmFnZW1l
bnQvcmF3IGZyYW1lcy4KIAkgKi8KIAliZi0+YmZfc3RhdGUuYmZzX3R4ZmxhZ3MgfD0gSEFMX1RY
REVTQ19DTFJETUFTSzsKLQorCQorCWJmLT5iZl9zdGF0ZS5iZnNfYWdnciA9IDA7CiAJLyogU2V0
dXAgdGhlIGRlc2NyaXB0b3IgYmVmb3JlIGhhbmRvZmYgKi8KIAlhdGhfdHhfZG9fcmF0ZWxvb2t1
cChzYywgYmYpOwogCWF0aF90eF9jYWxjX2R1cmF0aW9uKHNjLCBiZik7CkBAIC00MDU4LDYgKzQx
MDIsOCBAQAogCWludCB0aWQgPSBiZi0+YmZfc3RhdGUuYmZzX3RpZDsKIAlzdHJ1Y3QgYXRoX3Rp
ZCAqYXRpZCA9ICZhbi0+YW5fdGlkW3RpZF07CiAJc3RydWN0IGF0aF90eF9zdGF0dXMgKnRzID0g
JmJmLT5iZl9zdGF0dXMuZHNfdHhzdGF0OworCXN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqcmNf
aW5mbyA9IE5VTEw7CisJc3RydWN0IG1fdGFnICptdGFnOwogCiAJLyogVGhlIFRJRCBzdGF0ZSBp
cyBwcm90ZWN0ZWQgYmVoaW5kIHRoZSBUWFEgbG9jayAqLwogCUFUSF9UWF9MT0NLKHNjKTsKQEAg
LTQxMDgsOSArNDE1NCwzNSBAQAogCSAqIGR1cmluZyBhIGh3IHF1ZXVlIGRyYWluIGFuZCB0aGUg
ZnJhbWUgd2FudGVkIGFuIEFDSy4KIAkgKi8KIAlpZiAoZmFpbCA9PSAwICYmICgoYmYtPmJmX3N0
YXRlLmJmc190eGZsYWdzICYgSEFMX1RYREVTQ19OT0FDSykgPT0gMCkpCisJeworI2lmIDAKIAkJ
YXRoX3R4X3VwZGF0ZV9yYXRlY3RybChzYywgbmksIGJmLT5iZl9zdGF0ZS5iZnNfcmMsCiAJCSAg
ICB0cywgYmYtPmJmX3N0YXRlLmJmc19wa3RsZW4sCiAJCSAgICAxLCAodHMtPnRzX3N0YXR1cyA9
PSAwKSA/IDAgOiAxKTsKKyNlbmRpZgorCQorCQkvKiBuZXQ4MDIxMSByYXRlY3RsICovCisJICAg
IG10YWcgPSBtX3RhZ19sb2NhdGUoYmYtPmJmX20sIE1UQUdfQUJJX05FVDgwMjExLCAKKwkJCSAg
ICAgICAgICAgIE5FVDgwMjExX1RBR19SQVRFQ1RMLCBOVUxMKTsKKwkJaWYgKE5VTEwgPT0gbXRh
ZykgeworCQkJSUVFRTgwMjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19SQVRFQ1RM
LCBuaSwKKwkJCQkJIiVzOiBubyByYXRlY3RsIG1idWYgdGFnIGZvdW5kLlxuIiwgX19mdW5jX18p
OworCQkJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvIHRtcF9yY19pbmZvOworCQkJcmNfaW5mbyA9
ICZ0bXBfcmNfaW5mbzsKKwkJCWJ6ZXJvKHJjX2luZm8sIHNpemVvZihyY19pbmZvKSk7CisJCX0g
ZWxzZSB7CisJCQlJRUVFODAyMTFfTk9URShuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNHX1JBVEVD
VEwsIG5pLAorCQkJCQkiJXM6IGZvdW5kIHJhdGVjdGwgbWJ1ZiB0YWcuXG4iLCBfX2Z1bmNfXyk7
CisJCQlyY19pbmZvID0gKHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyopKG10YWcgKyAxKTsKKwkJ
fQorCQlyY19pbmZvLT5pcmlfZmxhZ3MgJj0gfklFRUU4MDIxMV9SQVRFQ1RMX0lORk9fQUdHUjsJ
CisJCWllZWU4MDIxMV9yYXRlY3RsX3JjX2luZm9fc2V0KHJjX2luZm8sCisJCQkJMSwgKHRzLT50
c19zdGF0dXMgPT0gMCA/IDAgOiAxKSwgCisJCQkJYmYtPmJmX3N0YXRlLmJmc19wa3RsZW4sCisJ
CQkJdHMtPnRzX3Nob3J0cmV0cnksIHRzLT50c19sb25ncmV0cnksCisJCQkJdHMtPnRzX2ZpbmFs
dHNpLCB0cy0+dHNfcmF0ZSk7CisJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5u
aV92YXAsIG5pLCByY19pbmZvKTsKKwl9CiAKIAlhdGhfdHhfZGVmYXVsdF9jb21wKHNjLCBiZiwg
ZmFpbCk7CiB9CkBAIC00NDc1LDYgKzQ1NDcsOSBAQAogCWludCBkcm9wcyA9IDA7CiAJc3RydWN0
IGllZWU4MDIxMV90eF9hbXBkdSAqdGFwOwogCWF0aF9idWZoZWFkIGJmX2NxOworCXN0cnVjdCBh
dGhfdHhfc3RhdHVzIHRzID0gYmZfZmlyc3QtPmJmX3N0YXR1cy5kc190eHN0YXQ7CisJc3RydWN0
IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgbV90YWcgKm10YWc7
CiAKIAlUQUlMUV9JTklUKCZiZl9xKTsKIAlUQUlMUV9JTklUKCZiZl9jcSk7CkBAIC00NDg1LDEx
ICs0NTYwLDM2IEBACiAJICogWFhYIHVzZSB0aGUgbGVuZ3RoIGluIHRoZSBmaXJzdCBmcmFtZSBp
biB0aGUgc2VyaWVzOwogCSAqIFhYWCBqdXN0IHNvIHRoaW5ncyBhcmUgY29uc2lzdGVudCBmb3Ig
bm93LgogCSAqLworI2lmIDAKIAlhdGhfdHhfdXBkYXRlX3JhdGVjdHJsKHNjLCBuaSwgYmZfZmly
c3QtPmJmX3N0YXRlLmJmc19yYywKIAkgICAgJmJmX2ZpcnN0LT5iZl9zdGF0dXMuZHNfdHhzdGF0
LAogCSAgICBiZl9maXJzdC0+YmZfc3RhdGUuYmZzX3BrdGxlbiwKIAkgICAgYmZfZmlyc3QtPmJm
X3N0YXRlLmJmc19uZnJhbWVzLCBiZl9maXJzdC0+YmZfc3RhdGUuYmZzX25mcmFtZXMpOworI2Vu
ZGlmCisJLyogbmV0ODAyMTEgcmF0ZWN0bCAqLworCW10YWcgPSBtX3RhZ19sb2NhdGUoYmZfZmly
c3QtPmJmX20sIE1UQUdfQUJJX05FVDgwMjExLCAKKwkJCU5FVDgwMjExX1RBR19SQVRFQ1RMLCBO
VUxMKTsKKwlpZiAoTlVMTCA9PSBtdGFnKSB7CisJCUlFRUU4MDIxMV9OT1RFKG5pLT5uaV92YXAs
IElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJCQkJIiVzOiBubyByYXRlY3RsIG1idWYgdGFn
IGZvdW5kLlxuIiwgX19mdW5jX18pOworCQlzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gdG1wX3Jj
X2luZm87CisJCXJjX2luZm8gPSAmdG1wX3JjX2luZm87CisJCWJ6ZXJvKHJjX2luZm8sIHNpemVv
ZihyY19pbmZvKSk7CisJfSBlbHNlIHsKKwkJSUVFRTgwMjExX05PVEUobmktPm5pX3ZhcCwgSUVF
RTgwMjExX01TR19SQVRFQ1RMLCBuaSwKKwkJCQkiJXM6IGZvdW5kIHJhdGVjdGwgbWJ1ZiB0YWcu
XG4iLCBfX2Z1bmNfXyk7CisJCXJjX2luZm8gPSAoc3RydWN0IGllZWU4MDIxMV9yY19pbmZvKiko
bXRhZyArIDEpOworCX0KIAorCWllZWU4MDIxMV9yYXRlY3RsX3JjX2luZm9fc2V0KHJjX2luZm8s
CisJCQliZl9maXJzdC0+YmZfc3RhdGUuYmZzX25mcmFtZXMsIAorCQkJYmZfZmlyc3QtPmJmX3N0
YXRlLmJmc19uZnJhbWVzLAorCQkJYmZfZmlyc3QtPmJmX3N0YXRlLmJmc19wa3RsZW4sCisJCQl0
cy50c19zaG9ydHJldHJ5LCB0cy50c19sb25ncmV0cnksCisJCQl0cy50c19maW5hbHRzaSwgdHMu
dHNfcmF0ZSk7CisJcmNfaW5mby0+aXJpX2ZsYWdzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0lORk9f
QUdHUjsKKwlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlfdmFwLCBuaSwgcmNf
aW5mbyk7CisKIAlBVEhfVFhfTE9DSyhzYyk7CiAJdGFwID0gYXRoX3R4X2dldF90eF90aWQoYW4s
IHRpZC0+dGlkKTsKIAlzYy0+c2Nfc3RhdHMuYXN0X3R4X2FnZ3JfZmFpbGFsbCsrOwpAQCAtNDYy
Niw4ICs0NzI2LDEyIEBACiAJaW50IG5mcmFtZXMgPSAwLCBuYmFkID0gMCwgbmY7CiAJaW50IHBr
dGxlbjsKIAkvKiBYWFggdGhlcmUncyB0b28gbXVjaCBvbiB0aGUgc3RhY2s/ICovCisjaWYgMAog
CXN0cnVjdCBhdGhfcmNfc2VyaWVzIHJjW0FUSF9SQ19OVU1dOworI2VuZGlmCiAJaW50IHR4c2Vx
OworCXN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqcmNfaW5mbyA9IE5VTEw7CisJc3RydWN0IG1f
dGFnICptdGFnOwogCiAJRFBSSU5URihzYywgQVRIX0RFQlVHX1NXX1RYX0FHR1IsICIlczogY2Fs
bGVkOyBod3FfZGVwdGg9JWRcbiIsCiAJICAgIF9fZnVuY19fLCBhdGlkLT5od3FfZGVwdGgpOwpA
QCAtNDc0OCw3ICs0ODUyLDcgQEAKIAlpc2FnZ3IgPSBiZl9maXJzdC0+YmZfc3RhdGUuYmZzX2Fn
Z3I7CiAJYmFbMF0gPSB0cy50c19iYV9sb3c7CiAJYmFbMV0gPSB0cy50c19iYV9oaWdoOwotCisj
aWYgMAogCS8qCiAJICogQ29weSB0aGUgVFggY29tcGxldGlvbiBzdGF0dXMgYW5kIHRoZSByYXRl
IGNvbnRyb2wKIAkgKiBzZXJpZXMgZnJvbSB0aGUgZmlyc3QgZGVzY3JpcHRvciwgYXMgaXQgbWF5
IGJlIGZyZWVkCkBAIC00NzU2LDYgKzQ4NjAsMTMgQEAKIAkgKiBpbnRvIHRoaW5ncy4KIAkgKi8K
IAltZW1jcHkocmMsIGJmX2ZpcnN0LT5iZl9zdGF0ZS5iZnNfcmMsIHNpemVvZihyYykpOworI2Vu
ZGlmCisJLyogCisJICogR2V0IHRoZSBuZXQ4MDIxMSByYXRlY3RsIG10YWcgaGVyZSwgYXMgYmZf
Zmlyc3Qgd2lsbCAKKwkgKiBiZSBzZXQgdG8gTlVMTCBsYXRlci4gCisJICovCisJbXRhZyA9IG1f
dGFnX2xvY2F0ZShiZl9maXJzdC0+YmZfbSwgTVRBR19BQklfTkVUODAyMTEsIAorCQkJTkVUODAy
MTFfVEFHX1JBVEVDVEwsIE5VTEwpOwogCiAJRFBSSU5URihzYywgQVRIX0RFQlVHX1NXX1RYX0FH
R1IsCiAJICAgICIlczogdHhhX3N0YXJ0PSVkLCB0eF9vaz0lZCwgc3RhdHVzPSUuOHgsIGZsYWdz
PSUuOHgsICIKQEAgLTQ4NzMsOSArNDk4NCwzMiBAQAogCSAqIGNvbnRyb2wgY29kZS4KIAkgKi8K
IAlpZiAoZmFpbCA9PSAwKQorCXsKKyNpZiAwCQogCQlhdGhfdHhfdXBkYXRlX3JhdGVjdHJsKHNj
LCBuaSwgcmMsICZ0cywgcGt0bGVuLCBuZnJhbWVzLAogCQkgICAgbmJhZCk7CisjZW5kaWYKKwkJ
LyogbmV0ODAyMTEgcmF0ZWN0bCAqLworCQlpZiAoTlVMTCA9PSBtdGFnKSB7CisJCQlJRUVFODAy
MTFfTk9URShuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsIG5pLAorCQkJCQkiJXM6
IG5vIHJhdGVjdGwgbWJ1ZiB0YWcgZm91bmQuXG4iLCBfX2Z1bmNfXyk7CisJCQlzdHJ1Y3QgaWVl
ZTgwMjExX3JjX2luZm8gdG1wX3JjX2luZm87CisJCQlyY19pbmZvID0gJnRtcF9yY19pbmZvOwor
CQkJYnplcm8ocmNfaW5mbywgc2l6ZW9mKHJjX2luZm8pKTsKKwkJfSBlbHNlIHsKKwkJCUlFRUU4
MDIxMV9OT1RFKG5pLT5uaV92YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJCQkJCSIl
czogZm91bmQgcmF0ZWN0bCBtYnVmIHRhZy5cbiIsIF9fZnVuY19fKTsKKwkJCXJjX2luZm8gPSAo
c3RydWN0IGllZWU4MDIxMV9yY19pbmZvKikobXRhZyArIDEpOworCQl9CiAKKwkJcmNfaW5mby0+
aXJpX2ZsYWdzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0lORk9fQUdHUjsKKwkJaWVlZTgwMjExX3Jh
dGVjdGxfcmNfaW5mb19zZXQocmNfaW5mbywKKwkJCQkJbmZyYW1lcywgbmJhZCwgcGt0bGVuLAor
CQkJCQl0cy50c19zaG9ydHJldHJ5LCB0cy50c19sb25ncmV0cnksCisJCQkJCXRzLnRzX2ZpbmFs
dHNpLCB0cy50c19yYXRlKTsKKwkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUobmktPm5p
X3ZhcCwgbmksIHJjX2luZm8pOworCX0KKwogCS8qCiAJICogc2VuZCBiYXIgaWYgd2UgZHJvcHBl
ZCBhbnkgZnJhbWVzCiAJICovCkBAIC00OTQ4LDYgKzUwODIsOCBAQAogCXN0cnVjdCBhdGhfdGlk
ICphdGlkID0gJmFuLT5hbl90aWRbdGlkXTsKIAlzdHJ1Y3QgYXRoX3R4X3N0YXR1cyB0czsKIAlp
bnQgZHJvcHMgPSAwOworCXN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqcmNfaW5mbyA9IE5VTEw7
CisJc3RydWN0IG1fdGFnICptdGFnOwogCiAJLyoKIAkgKiBUYWtlIGEgY29weSBvZiB0aGlzOyBm
aWx0ZXJpbmcvY2xvbmluZyB0aGUgZnJhbWUgbWF5IGZyZWUgdGhlCkBAIC00OTYyLDExICs1MDk4
LDM2IEBACiAJICogRG8gaXQgb3V0c2lkZSBvZiB0aGUgVFhRIGxvY2suCiAJICovCiAJaWYgKGZh
aWwgPT0gMCAmJiAoKGJmLT5iZl9zdGF0ZS5iZnNfdHhmbGFncyAmIEhBTF9UWERFU0NfTk9BQ0sp
ID09IDApKQorCXsKKyNpZiAwCQogCQlhdGhfdHhfdXBkYXRlX3JhdGVjdHJsKHNjLCBuaSwgYmYt
PmJmX3N0YXRlLmJmc19yYywKIAkJICAgICZiZi0+YmZfc3RhdHVzLmRzX3R4c3RhdCwKIAkJICAg
IGJmLT5iZl9zdGF0ZS5iZnNfcGt0bGVuLAogCQkgICAgMSwgKHRzLnRzX3N0YXR1cyA9PSAwKSA/
IDAgOiAxKTsKKyNlbmRpZgorCQltdGFnID0gbV90YWdfbG9jYXRlKGJmLT5iZl9tLCBNVEFHX0FC
SV9ORVQ4MDIxMSwgCisJCQkJTkVUODAyMTFfVEFHX1JBVEVDVEwsIE5VTEwpOworCQkKKwkJaWYg
KE5VTEwgPT0gbXRhZykgeworCQkJSUVFRTgwMjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjEx
X01TR19SQVRFQ1RMLCBuaSwKKwkJCQkJIiVzOiBubyByYXRlY3RsIG1idWYgdGFnIGZvdW5kLlxu
IiwgX19mdW5jX18pOworCQkJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvIHRtcF9yY19pbmZvOwor
CQkJcmNfaW5mbyA9ICZ0bXBfcmNfaW5mbzsKKwkJCWJ6ZXJvKHJjX2luZm8sIHNpemVvZihyY19p
bmZvKSk7CisJCX0gZWxzZSB7CisJCQlJRUVFODAyMTFfTk9URShuaS0+bmlfdmFwLCBJRUVFODAy
MTFfTVNHX1JBVEVDVEwsIG5pLAorCQkJCQkiJXM6IGZvdW5kIHJhdGVjdGwgbWJ1ZiB0YWcuXG4i
LCBfX2Z1bmNfXyk7CisJCQlyY19pbmZvID0gKHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyopKG10
YWcgKyAxKTsKKwkJfQogCisJCXJjX2luZm8tPmlyaV9mbGFncyAmPSB+SUVFRTgwMjExX1JBVEVD
VExfSU5GT19BR0dSOworCQlpZWVlODAyMTFfcmF0ZWN0bF9yY19pbmZvX3NldChyY19pbmZvLAor
CQkJCTEsICh0cy50c19zdGF0dXMgPT0gMCA/IDAgOiAxKSwgCisJCQkJYmYtPmJmX3N0YXRlLmJm
c19wa3RsZW4sCisJCQkJdHMudHNfc2hvcnRyZXRyeSwgdHMudHNfbG9uZ3JldHJ5LAorCQkJCXRz
LnRzX2ZpbmFsdHNpLCB0cy50c19yYXRlKTsKKwkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxl
dGUobmktPm5pX3ZhcCwgbmksIHJjX2luZm8pOworCX0KIAkvKgogCSAqIFRoaXMgaXMgY2FsbGVk
IGVhcmx5IHNvIGF0aWQtPmh3cV9kZXB0aCBjYW4gYmUgdHJhY2tlZC4KIAkgKiBUaGlzIHVuZm9y
dHVuYXRlbHkgbWVhbnMgdGhhdCBpdCdzIHJlbGVhc2VkIGFuZCByZWdyYWJiZWQKQEAgLTUxODMs
NiArNTM0NCwxNSBAQAogCQl9CiAKIAkJLyoKKwkJICogSWYgbm9uLWFnZ3JlZ2F0ZSBzY2VuYXJp
byBhcHBlYXJzLCB0aGlzIHdpbGwgYmUgCisJCSAqIHR1cm5lZCBvZmYuCisJCSAqCisJCSAqIFRo
aXMgZmxhZyBpcyB1c2VkIGJ5IGF0aF90eF9kb19yYXRlbG9va3VwKCkgdG8gCisJCSAqIGRpc3Rp
bmd1aXNoIGFnZ3Ivbm9uLWFnZ3Igc2NlbmFyaW8uICAKKwkJICovCisJCWJmLT5iZl9zdGF0ZS5i
ZnNfYWdnciA9IDE7CisKKwkJLyoKIAkJICogSWYgdGhlIHBhY2tldCBkb2Vzbid0IGZhbGwgd2l0
aGluIHRoZSBCQVcgKGVnIGEgTlVMTAogCQkgKiBkYXRhIGZyYW1lKSwgc2NoZWR1bGUgaXQgZGly
ZWN0bHk7IGNvbnRpbnVlLgogCQkgKi8KQEAgLTU0MjUsNiArNTU5NSw3IEBACiAJCS8qIFVwZGF0
ZSBDTFJETUFTSyBqdXN0IGJlZm9yZSB0aGlzIGZyYW1lIGlzIHF1ZXVlZCAqLwogCQlhdGhfdHhf
dXBkYXRlX2NscmRtYXNrKHNjLCB0aWQsIGJmKTsKIAorCQliZi0+YmZfc3RhdGUuYmZzX2FnZ3Ig
PSAwOyAKIAkJLyogUHJvZ3JhbSBkZXNjcmlwdG9ycyArIHJhdGUgY29udHJvbCAqLwogCQlhdGhf
dHhfZG9fcmF0ZWxvb2t1cChzYywgYmYpOwogCQlhdGhfdHhfY2FsY19kdXJhdGlvbihzYywgYmYp
OwpJbmRleDogZGV2L2l3bi9pZl9pd24uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYvaXduL2lmX2l3bi5j
CShyZXZpc2lvbiAyNTQ4MjYpCisrKyBkZXYvaXduL2lmX2l3bi5jCSh3b3JraW5nIGNvcHkpCkBA
IC04NzYsNyArODc2LDggQEAKIAlpdnAtPml2X25ld3N0YXRlID0gdmFwLT5pdl9uZXdzdGF0ZTsK
IAl2YXAtPml2X25ld3N0YXRlID0gaXduX25ld3N0YXRlOwogCi0JaWVlZTgwMjExX3JhdGVjdGxf
aW5pdCh2YXApOworCS8qIFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAqLworCWllZWU4MDIxMV9yYXRl
Y3RsX2luaXQodmFwLCAwKTsKIAkvKiBDb21wbGV0ZSBzZXR1cC4gKi8KIAlpZWVlODAyMTFfdmFw
X2F0dGFjaCh2YXAsIGl3bl9tZWRpYV9jaGFuZ2UsIGllZWU4MDIxMV9tZWRpYV9zdGF0dXMpOwog
CWljLT5pY19vcG1vZGUgPSBvcG1vZGU7CkBAIC0yNDk5LDcgKzI1MDAsOCBAQAogCXVpbnQ2NF90
IGJpdG1hcDsKIAl1aW50MTZfdCBzc247CiAJdWludDhfdCB0aWQ7Ci0JaW50IGFja2ZhaWxjbnQg
PSAwLCBpLCBsYXN0aWR4LCBxaWQsICpyZXMsIHNoaWZ0OworCS8qIGludCBmYWlsY250ID0gMDsg
Ki8KKwlpbnQgaSwgbGFzdGlkeCwgcWlkLCAqcmVzLCBzaGlmdDsKIAogCWJ1c19kbWFtYXBfc3lu
YyhzYy0+cnhxLmRhdGFfZG1hdCwgZGF0YS0+bWFwLCBCVVNfRE1BU1lOQ19QT1NUUkVBRCk7CiAK
QEAgLTI1NjMsMTIgKzI1NjUsMTggQEAKIAlmb3IgKGkgPSAwOyBiaXRtYXA7IGkrKykgewogCQlp
ZiAoKGJpdG1hcCAmIDEpID09IDApIHsKIAkJCWlmcC0+aWZfb2Vycm9ycysrOworI2lmIDAKIAkJ
CWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5uaV92YXAsIG5pLAogCQkJICAgIElF
RUU4MDIxMV9SQVRFQ1RMX1RYX0ZBSUxVUkUsICZhY2tmYWlsY250LCBOVUxMKTsKKyNlbmRpZgor
CQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlfdmFwLCBuaSwgTlVMTCk7IC8q
IGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNjICovCQogCQl9IGVsc2UgewogCQkJaWZwLT5pZl9v
cGFja2V0cysrOworI2lmIDAKIAkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5u
aV92YXAsIG5pLAogCQkJICAgIElFRUU4MDIxMV9SQVRFQ1RMX1RYX1NVQ0NFU1MsICZhY2tmYWls
Y250LCBOVUxMKTsKKyNlbmRpZgorCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUobmkt
Pm5pX3ZhcCwgbmksIE5VTEwpOyAvKiBqdXN0IG1ha2UgaXQgY29tcGlsZWQuIHFjYyAqLwogCQl9
CiAJCWJpdG1hcCA+Pj0gMTsKIAl9CkBAIC0yODA3LDEyICsyODE1LDE4IEBACiAJICovCiAJaWYg
KHN0YXR1cyAmIElXTl9UWF9GQUlMKSB7CiAJCWlmcC0+aWZfb2Vycm9ycysrOworI2lmIDAKIAkJ
aWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwKIAkJICAgIElFRUU4MDIxMV9S
QVRFQ1RMX1RYX0ZBSUxVUkUsICZhY2tmYWlsY250LCBOVUxMKTsKKyNlbmRpZgorCQlpZWVlODAy
MTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNv
bXBpbGVkLiBxY2MgKi8KIAl9IGVsc2UgewogCQlpZnAtPmlmX29wYWNrZXRzKys7CisjaWYgMAog
CQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLAogCQkgICAgSUVFRTgwMjEx
X1JBVEVDVExfVFhfU1VDQ0VTUywgJmFja2ZhaWxjbnQsIE5VTEwpOworI2VuZGlmCisJCWllZWU4
MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksIE5VTEwpOyAvKiBqdXN0IG1ha2UgaXQg
Y29tcGlsZWQuIHFjYyAqLwogCX0KIAltX2ZyZWVtKG0pOwogCWllZWU4MDIxMV9mcmVlX25vZGUo
bmkpOwpJbmRleDogZGV2L2J3aS9pZl9id2kuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYvYndpL2lmX2J3
aS5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBkZXYvYndpL2lmX2J3aS5jCSh3b3JraW5nIGNvcHkp
CkBAIC02MTcsNyArNjE3LDggQEAKICNpZiAwCiAJdmFwLT5pdl91cGRhdGVfYmVhY29uID0gYndp
X2JlYWNvbl91cGRhdGU7CiAjZW5kaWYKLQlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHZhcCk7CisJ
LyogWFhYIFRPRE8gZmlsbCB0aGUgY2FwICovCisJaWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXAs
IDApOwogCiAJLyogY29tcGxldGUgc2V0dXAgKi8KIAlpZWVlODAyMTFfdmFwX2F0dGFjaCh2YXAs
IGJ3aV9tZWRpYV9jaGFuZ2UsIGllZWU4MDIxMV9tZWRpYV9zdGF0dXMpOwpAQCAtMzM3Nyw5ICsz
Mzc4LDEyIEBACiAJCQkgKiB3ZWxsIHNvIHRvIGF2b2lkIG92ZXItYWdncmVzc2l2ZSBkb3duc2hp
ZnRpbmcgd2UKIAkJCSAqIHRyZWF0IGFueSBudW1iZXIgb2YgcmV0cmllcyBhcyAiMSIuCiAJCQkg
Ki8KKyNpZiAwCiAJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLAogCQkJ
ICAgIChkYXRhX3R4Y250ID4gMSkgPyBJRUVFODAyMTFfUkFURUNUTF9UWF9TVUNDRVNTIDoKIAkJ
CSAgICAgICAgSUVFRTgwMjExX1JBVEVDVExfVFhfRkFJTFVSRSwgJmFja2VkLCBOVUxMKTsKKyNl
bmRpZgorCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwgTlVMTCk7IC8q
IGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNjICovCiAJCX0KIAogCQkvKgpJbmRleDogZGV2L2J3
bi9pZl9id24uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYvYnduL2lmX2J3bi5jCShyZXZpc2lvbiAyNTQ4
MjYpCisrKyBkZXYvYnduL2lmX2J3bi5jCSh3b3JraW5nIGNvcHkpCkBAIC0yOTcwLDcgKzI5NzAs
OCBAQAogCS8qIG92ZXJyaWRlIG1heCBhaWQgc28gc3RhJ3MgY2Fubm90IGFzc29jIHdoZW4gd2Un
cmUgb3V0IG9mIHN0YSBpZCdzICovCiAJdmFwLT5pdl9tYXhfYWlkID0gQldOX1NUQUlEX01BWDsK
IAotCWllZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwKTsKKwkvKiBYWFggVE9ETyBmaWxsIHRoZSBj
YXAgKi8KKwlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHZhcCwgMCk7CiAKIAkvKiBjb21wbGV0ZSBz
ZXR1cCAqLwogCWllZWU4MDIxMV92YXBfYXR0YWNoKHZhcCwgaWVlZTgwMjExX21lZGlhX2NoYW5n
ZSwKQEAgLTg5OTEsOCArODk5Miw5IEBACiAJc3RydWN0IGJ3bl9zdGF0cyAqc3RhdHMgPSAmbWFj
LT5tYWNfc3RhdHM7CiAJc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaTsKIAlzdHJ1Y3QgaWVlZTgw
MjExdmFwICp2YXA7Ci0JaW50IHJldHJ5Y250ID0gMCwgc2xvdDsKLQorCS8qaW50IHJldHJ5Y250
ID0gMCwgc2xvdDsqLworCWludCBzbG90OworCQogCUJXTl9BU1NFUlRfTE9DS0VEKG1hYy0+bWFj
X3NjKTsKIAogCWlmIChzdGF0dXMtPmltKQpAQCAtOTAyMCwxMSArOTAyMiwxNCBAQAogCQkJCWlm
IChtZXRhLT5tdF9pc2xhc3QpIHsKIAkJCQkJbmkgPSBtZXRhLT5tdF9uaTsKIAkJCQkJdmFwID0g
bmktPm5pX3ZhcDsKKyNpZiAwCiAJCQkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZh
cCwgbmksCiAJCQkJCSAgICBzdGF0dXMtPmFjayA/CiAJCQkJCSAgICAgIElFRUU4MDIxMV9SQVRF
Q1RMX1RYX1NVQ0NFU1MgOgogCQkJCQkgICAgICBJRUVFODAyMTFfUkFURUNUTF9UWF9GQUlMVVJF
LAogCQkJCQkgICAgJnJldHJ5Y250LCAwKTsKKyNlbmRpZgorCQkJCQlpZWVlODAyMTFfcmF0ZWN0
bF90eF9jb21wbGV0ZSh2YXAsIG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNvbXBpbGVkLiBx
Y2MgKi8KIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJCXNsb3QgPSBid25fZG1hX25leHRzbG90KGRy
LCBzbG90KTsKQEAgLTkwNDEsMTEgKzkwNDYsMTQgQEAKIAkJCX0KIAkJCW5pID0gdHAtPnRwX25p
OwogCQkJdmFwID0gbmktPm5pX3ZhcDsKKyNpZiAwCiAJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9j
b21wbGV0ZSh2YXAsIG5pLAogCQkJICAgIHN0YXR1cy0+YWNrID8KIAkJCSAgICAgIElFRUU4MDIx
MV9SQVRFQ1RMX1RYX1NVQ0NFU1MgOgogCQkJICAgICAgSUVFRTgwMjExX1JBVEVDVExfVFhfRkFJ
TFVSRSwKIAkJCSAgICAmcmV0cnljbnQsIDApOworI2VuZGlmCisJCQlpZWVlODAyMTFfcmF0ZWN0
bF90eF9jb21wbGV0ZSh2YXAsIG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNvbXBpbGVkLiBx
Y2MgKi8KIAkJfQogCQlid25fcGlvX2hhbmRsZV90eGVvZihtYWMsIHN0YXR1cyk7CiAJfQpJbmRl
eDogZGV2L3VzYi93bGFuL2lmX3p5ZC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldi91c2Ivd2xhbi9pZl96
eWQuYwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2L3VzYi93bGFuL2lmX3p5ZC5jCSh3b3JraW5n
IGNvcHkpCkBAIC00OTYsNyArNDk2LDggQEAKIAl6dnAtPm5ld3N0YXRlID0gdmFwLT5pdl9uZXdz
dGF0ZTsKIAl2YXAtPml2X25ld3N0YXRlID0genlkX25ld3N0YXRlOwogCi0JaWVlZTgwMjExX3Jh
dGVjdGxfaW5pdCh2YXApOworCS8qIFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAqLworCWllZWU4MDIx
MV9yYXRlY3RsX2luaXQodmFwLCAwKTsKIAlpZWVlODAyMTFfcmF0ZWN0bF9zZXRpbnRlcnZhbCh2
YXAsIDEwMDAgLyogMSBzZWMgKi8pOwogCiAJLyogY29tcGxldGUgc2V0dXAgKi8KQEAgLTY2NCwx
MiArNjY1LDE1IEBACiAJCQkgKi8KIAkJCW5pID0gaWVlZTgwMjExX2ZpbmRfdHhub2RlKHZhcCwg
cmV0cnktPm1hY2FkZHIpOwogCQkJaWYgKG5pICE9IE5VTEwpIHsKLQkJCQlpbnQgcmV0cnljbnQg
PQotCQkJCSAgICAoaW50KShsZTE2dG9oKHJldHJ5LT5jb3VudCkgJiAweGZmKTsKKwkJCQkvKmlu
dCByZXRyeWNudCA9CisJCQkJICAgIChpbnQpKGxlMTZ0b2gocmV0cnktPmNvdW50KSAmIDB4ZmYp
OyovCiAJCQkJCisjaWYgMAogCQkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwg
bmksCiAJCQkJICAgIElFRUU4MDIxMV9SQVRFQ1RMX1RYX0ZBSUxVUkUsCiAJCQkJICAgICZyZXRy
eWNudCwgTlVMTCk7CisjZW5kaWYKKwkJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2
YXAsIG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNvbXBpbGVkLiBxY2MgKi8KIAkJCQlpZWVl
ODAyMTFfZnJlZV9ub2RlKG5pKTsKIAkJCX0KIAkJCWlmIChsZTE2dG9oKHJldHJ5LT5jb3VudCkg
JiAweDEwMCkKSW5kZXg6IGRldi91c2Ivd2xhbi9pZl9ydW0uYwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYv
dXNiL3dsYW4vaWZfcnVtLmMJKHJldmlzaW9uIDI1NDgyNikKKysrIGRldi91c2Ivd2xhbi9pZl9y
dW0uYwkod29ya2luZyBjb3B5KQpAQCAtNjEzLDcgKzYxMyw4IEBACiAKIAl1c2JfY2FsbG91dF9p
bml0X210eCgmcnZwLT5yYXRlY3RsX2NoLCAmc2MtPnNjX210eCwgMCk7CiAJVEFTS19JTklUKCZy
dnAtPnJhdGVjdGxfdGFzaywgMCwgcnVtX3JhdGVjdGxfdGFzaywgcnZwKTsKLQlpZWVlODAyMTFf
cmF0ZWN0bF9pbml0KHZhcCk7CisJLyogWFhYIFRPRE8gZmlsbCB0aGUgY2FwICovCisJaWVlZTgw
MjExX3JhdGVjdGxfaW5pdCh2YXAsIDApOwogCWllZWU4MDIxMV9yYXRlY3RsX3NldGludGVydmFs
KHZhcCwgMTAwMCAvKiAxIHNlYyAqLyk7CiAJLyogY29tcGxldGUgc2V0dXAgKi8KIAlpZWVlODAy
MTFfdmFwX2F0dGFjaCh2YXAsIGllZWU4MDIxMV9tZWRpYV9jaGFuZ2UsIGllZWU4MDIxMV9tZWRp
YV9zdGF0dXMpOwpJbmRleDogZGV2L3VzYi93bGFuL2lmX3VyYWwuYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBk
ZXYvdXNiL3dsYW4vaWZfdXJhbC5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBkZXYvdXNiL3dsYW4v
aWZfdXJhbC5jCSh3b3JraW5nIGNvcHkpCkBAIC01OTgsNyArNTk4LDggQEAKIAogCXVzYl9jYWxs
b3V0X2luaXRfbXR4KCZ1dnAtPnJhdGVjdGxfY2gsICZzYy0+c2NfbXR4LCAwKTsKIAlUQVNLX0lO
SVQoJnV2cC0+cmF0ZWN0bF90YXNrLCAwLCB1cmFsX3JhdGVjdGxfdGFzaywgdXZwKTsKLQlpZWVl
ODAyMTFfcmF0ZWN0bF9pbml0KHZhcCk7CisJLyogWFhYIFRPRE8gZmlsbCB0aGUgY2FwICovCisJ
aWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXAsIDApOwogCWllZWU4MDIxMV9yYXRlY3RsX3NldGlu
dGVydmFsKHZhcCwgMTAwMCAvKiAxIHNlYyAqLyk7CiAKIAkvKiBjb21wbGV0ZSBzZXR1cCAqLwpJ
bmRleDogZGV2L3VzYi93bGFuL2lmX3J1bi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldi91c2Ivd2xhbi9p
Zl9ydW4uYwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2L3VzYi93bGFuL2lmX3J1bi5jCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MjAsNyArODIwLDggQEAKIAlydnAtPm5ld3N0YXRlID0gdmFwLT5pdl9u
ZXdzdGF0ZTsKIAl2YXAtPml2X25ld3N0YXRlID0gcnVuX25ld3N0YXRlOwogCi0JaWVlZTgwMjEx
X3JhdGVjdGxfaW5pdCh2YXApOworCS8qIFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAqLworCWllZWU4
MDIxMV9yYXRlY3RsX2luaXQodmFwLCAwKTsKIAlpZWVlODAyMTFfcmF0ZWN0bF9zZXRpbnRlcnZh
bCh2YXAsIDEwMDAgLyogMSBzZWMgKi8pOwogCiAJLyogY29tcGxldGUgc2V0dXAgKi8KSW5kZXg6
IGRldi93cGkvaWZfd3BpLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3dwaS9pZl93cGkuYwkocmV2aXNp
b24gMjU0ODI2KQorKysgZGV2L3dwaS9pZl93cGkuYwkod29ya2luZyBjb3B5KQpAQCAtNzgyLDcg
Kzc4Miw4IEBACiAJd3ZwLT5uZXdzdGF0ZSA9IHZhcC0+aXZfbmV3c3RhdGU7CiAJdmFwLT5pdl9u
ZXdzdGF0ZSA9IHdwaV9uZXdzdGF0ZTsKIAotCWllZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwKTsK
KwkvKiBYWFggVE9ETyBmaWxsIHRoZSBjYXAgKi8KKwlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHZh
cCwgMCk7CiAJLyogY29tcGxldGUgc2V0dXAgKi8KIAlpZWVlODAyMTFfdmFwX2F0dGFjaCh2YXAs
IGllZWU4MDIxMV9tZWRpYV9jaGFuZ2UsIGllZWU4MDIxMV9tZWRpYV9zdGF0dXMpOwogCWljLT5p
Y19vcG1vZGUgPSBvcG1vZGU7CkBAIC0xNTk2LDggKzE1OTcsMTEgQEAKIAkJRFBSSU5URk4oV1BJ
X0RFQlVHX1RYLCAoIiVkIHJldHJpZXNcbiIsIHN0YXQtPm50cmllcykpOwogCQlyZXRyeWNudCA9
IDE7CiAJfQorI2lmIDAKIAlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLCBJ
RUVFODAyMTFfUkFURUNUTF9UWF9TVUNDRVNTLAogCSAgICAmcmV0cnljbnQsIE5VTEwpOworI2Vu
ZGlmCisJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwgTlVMTCk7IC8qIGp1
c3QgbWFrZSBpdCBjb21waWxlZC4gcWNjICovCiAKIAkvKiBYWFggb2Vycm9ycyBzaG91bGQgb25s
eSBjb3VudCBlcnJvcnMgIW1heHRyaWVzICovCiAJaWYgKChsZTMydG9oKHN0YXQtPnN0YXR1cykg
JiAweGZmKSAhPSAxKQpJbmRleDogbmV0ODAyMTEvaWVlZTgwMjExX2ZyZWVic2QuYwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBuZXQ4MDIxMS9pZWVlODAyMTFfZnJlZWJzZC5jCShyZXZpc2lvbiAyNTQ4MjYpCisr
KyBuZXQ4MDIxMS9pZWVlODAyMTFfZnJlZWJzZC5jCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsNyAr
MjYyLDkgQEAKIAkJImRyaXZlcl9jYXBzIiwgQ1RMRkxBR19SVywgJnZhcC0+aXZfY2FwcywgMCwK
IAkJImRyaXZlciBjYXBhYmlsaXRpZXMiKTsKICNpZmRlZiBJRUVFODAyMTFfREVCVUcKKwlpZWVl
ODAyMTFfZGVidWcgfD0gKElFRUU4MDIxMV9NU0dfUkFURUNUTHxJRUVFODAyMTFfTVNHX05PREV8
SUVFRTgwMjExX01TR19TQ0FOKTsKIAl2YXAtPml2X2RlYnVnID0gaWVlZTgwMjExX2RlYnVnOwor
CWlmX3ByaW50ZihpZnAsICIlczogaXZfZGVidWc9MHglMDh4XG4iLCBfX2Z1bmNfXywgdmFwLT5p
dl9kZWJ1Zyk7CiAJU1lTQ1RMX0FERF9VSU5UKGN0eCwgU1lTQ1RMX0NISUxEUkVOKG9pZCksIE9J
RF9BVVRPLAogCQkiZGVidWciLCBDVExGTEFHX1JXLCAmdmFwLT5pdl9kZWJ1ZywgMCwKIAkJImNv
bnRyb2wgZGVidWdnaW5nIHByaW50ZnMiKTsKSW5kZXg6IG5ldDgwMjExL2llZWU4MDIxMV9yc3Nh
ZGFwdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIG5ldDgwMjExL2llZWU4MDIxMV9yc3NhZGFwdC5jCShyZXZp
c2lvbiAyNTQ4MjYpCisrKyBuZXQ4MDIxMS9pZWVlODAyMTFfcnNzYWRhcHQuYwkod29ya2luZyBj
b3B5KQpAQCAtNzQsNyArNzQsNyBAQAogCQkJCSAgICBwYXJtIyNfZGVub20pCiAKIHN0YXRpYyB2
b2lkCXJzc2FkYXB0X3NldGludGVydmFsKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKiwgaW50
KTsKLXN0YXRpYyB2b2lkCXJzc2FkYXB0X2luaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqKTsKK3N0
YXRpYyB2b2lkCXJzc2FkYXB0X2luaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqLCB1aW50MzJfdCk7
CiBzdGF0aWMgdm9pZAlyc3NhZGFwdF9kZWluaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqKTsKIHN0
YXRpYyB2b2lkCXJzc2FkYXB0X3VwZGF0ZXN0YXRzKHN0cnVjdCBpZWVlODAyMTFfcnNzYWRhcHRf
bm9kZSAqKTsKIHN0YXRpYyB2b2lkCXJzc2FkYXB0X25vZGVfaW5pdChzdHJ1Y3QgaWVlZTgwMjEx
X25vZGUgKik7CkBAIC04NCw4ICs4NCw3IEBACiBzdGF0aWMgdm9pZAlyc3NhZGFwdF9yYWlzZV9y
YXRlKHN0cnVjdCBpZWVlODAyMTFfcnNzYWRhcHRfbm9kZSAqLAogCQkJaW50LCBpbnQpOwogc3Rh
dGljIHZvaWQJcnNzYWRhcHRfdHhfY29tcGxldGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAq
LAotICAgIAkJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqLCBpbnQsCi0JCQl2b2lkICos
IHZvaWQgKik7CisgICAgCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICosIHN0cnVjdCBp
ZWVlODAyMTFfcmNfaW5mbyAqKTsKIHN0YXRpYyB2b2lkCXJzc2FkYXB0X3N5c2N0bGF0dGFjaChz
dHJ1Y3QgaWVlZTgwMjExdmFwICosCiAJCQlzdHJ1Y3Qgc3lzY3RsX2N0eF9saXN0ICosIHN0cnVj
dCBzeXNjdGxfb2lkICopOwogCkBAIC0xMjEsNyArMTIwLDcgQEAKIH0KIAogc3RhdGljIHZvaWQK
LXJzc2FkYXB0X2luaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwKQorcnNzYWRhcHRfaW5pdChz
dHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIHVpbnQzMl90IGNhcGFiaWxpdGllcykKIHsKIAlzdHJ1
Y3QgaWVlZTgwMjExX3Jzc2FkYXB0ICpyczsKIApAQCAtMTM0LDYgKzEzMywxMCBAQAogCQlpZl9w
cmludGYodmFwLT5pdl9pZnAsICJjb3VsZG4ndCBhbGxvYyByYXRlY3RsIHN0cnVjdHVyZVxuIik7
CiAJCXJldHVybjsKIAl9CisKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3N0YXQgKiBpcnMgPSBJRUVF
ODAyMTFfUkFURUNUTF9TVEFUKHZhcCk7CisJaXJzLT5pcnNfY2FwYWJpbGl0aWVzID0gY2FwYWJp
bGl0aWVzOworCiAJcnMtPnZhcCA9IHZhcDsKIAlyc3NhZGFwdF9zZXRpbnRlcnZhbCh2YXAsIDUw
MCAvKiBtc2VjcyAqLyk7CiAJcnNzYWRhcHRfc3lzY3RsYXR0YWNoKHZhcCwgdmFwLT5pdl9zeXNj
dGwsIHZhcC0+aXZfb2lkKTsKQEAgLTMwNywxMCArMzEwLDExIEBACiAKIHN0YXRpYyB2b2lkCiBy
c3NhZGFwdF90eF9jb21wbGV0ZShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsCi0gICAg
Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgaW50IHN1Y2Nlc3MsIHZvaWQgKmFyZzEs
IHZvaWQgKmFyZzIpCisgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgc3RydWN0
IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvKQogewogCXN0cnVjdCBpZWVlODAyMTFfcnNzYWRh
cHRfbm9kZSAqcmEgPSBuaS0+bmlfcmN0bHM7Ci0JaW50IHBrdGxlbiA9ICooaW50ICopYXJnMSwg
cnNzaSA9ICooaW50ICopYXJnMjsKKwkvKmludCBwa3RsZW4gPSAqKGludCAqKWFyZzEsIHJzc2kg
PSAqKGludCAqKWFyZzI7Ki8KKwlpbnQgcGt0bGVuID0gMCwgcnNzaSA9IDAsIHN1Y2Nlc3MgPSAw
OyAvKiBqdXN0IG1ha2UgaXQgY29tcGlsZWQuIHFjYyAqLwogCiAJaWYgKHN1Y2Nlc3MpIHsKIAkJ
cmEtPnJhX25vaysrOwpJbmRleDogbmV0ODAyMTEvaWVlZTgwMjExX2FtcnIuYwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBuZXQ4MDIxMS9pZWVlODAyMTFfYW1yci5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBuZXQ4
MDIxMS9pZWVlODAyMTFfYW1yci5jCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw4IEBACiAK
ICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfdmFyLmg+CiAjaW5jbHVkZSA8bmV0ODAyMTEv
aWVlZTgwMjExX2h0Lmg+CisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwuaD4K
ICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfYW1yci5oPgotI2luY2x1ZGUgPG5ldDgwMjEx
L2llZWU4MDIxMV9yYXRlY3RsLmg+CiAKICNkZWZpbmUgaXNfc3VjY2VzcyhhbW4pCVwKIAkoKGFt
biktPmFtbl9yZXRyeWNudCA8IChhbW4pLT5hbW5fdHhjbnQgLyAxMCkKQEAgLTU4LDE4ICs1OCwx
OSBAQAogCSgoYW1uKS0+YW1uX3R4Y250ID4gMTApCiAKIHN0YXRpYyB2b2lkCWFtcnJfc2V0aW50
ZXJ2YWwoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqLCBpbnQpOwotc3RhdGljIHZvaWQJYW1y
cl9pbml0KHN0cnVjdCBpZWVlODAyMTF2YXAgKik7CitzdGF0aWMgdm9pZAlhbXJyX2luaXQoc3Ry
dWN0IGllZWU4MDIxMXZhcCAqLCB1aW50MzJfdCk7CiBzdGF0aWMgdm9pZAlhbXJyX2RlaW5pdChz
dHJ1Y3QgaWVlZTgwMjExdmFwICopOwogc3RhdGljIHZvaWQJYW1ycl9ub2RlX2luaXQoc3RydWN0
IGllZWU4MDIxMV9ub2RlICopOwogc3RhdGljIHZvaWQJYW1ycl9ub2RlX2RlaW5pdChzdHJ1Y3Qg
aWVlZTgwMjExX25vZGUgKik7CiBzdGF0aWMgaW50CWFtcnJfdXBkYXRlKHN0cnVjdCBpZWVlODAy
MTFfYW1yciAqLAogICAgIAkJCXN0cnVjdCBpZWVlODAyMTFfYW1ycl9ub2RlICosIHN0cnVjdCBp
ZWVlODAyMTFfbm9kZSAqKTsKIHN0YXRpYyBpbnQJYW1ycl9yYXRlKHN0cnVjdCBpZWVlODAyMTFf
bm9kZSAqLCB2b2lkICosIHVpbnQzMl90KTsKK3N0YXRpYyB2b2lkCWFtcnJfcmF0ZXMoc3RydWN0
IGllZWU4MDIxMV9ub2RlICosIHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqKTsKIHN0YXRpYyB2
b2lkCWFtcnJfdHhfY29tcGxldGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqLAotICAgIAkJ
CWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqLCBpbnQsIAotCQkJdm9pZCAqLCB2b2lkICop
Owotc3RhdGljIHZvaWQJYW1ycl90eF91cGRhdGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAq
dmFwLAorICAgIAkJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqLCBzdHJ1Y3QgaWVlZTgw
MjExX3JjX2luZm8gKik7CitzdGF0aWMgdm9pZAlhbXJyX3R4X3VwZGF0ZShjb25zdCBzdHJ1Y3Qg
aWVlZTgwMjExdmFwICosCiAJCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKiwgdm9pZCAq
LCB2b2lkICosIHZvaWQgKik7CitzdGF0aWMgdm9pZAlhbXJyX3N0YXRzKGNvbnN0IHN0cnVjdCBp
ZWVlODAyMTF2YXAgKik7CiBzdGF0aWMgdm9pZAlhbXJyX3N5c2N0bGF0dGFjaChzdHJ1Y3QgaWVl
ZTgwMjExdmFwICosCiAJCQlzdHJ1Y3Qgc3lzY3RsX2N0eF9saXN0ICosIHN0cnVjdCBzeXNjdGxf
b2lkICopOwogCkBAIC04NSw5ICs4NiwxMSBAQAogCS5pcl9ub2RlX2luaXQJPSBhbXJyX25vZGVf
aW5pdCwKIAkuaXJfbm9kZV9kZWluaXQJPSBhbXJyX25vZGVfZGVpbml0LAogCS5pcl9yYXRlCT0g
YW1ycl9yYXRlLAorCS5pcl9yYXRlcwk9IGFtcnJfcmF0ZXMsCiAJLmlyX3R4X2NvbXBsZXRlCT0g
YW1ycl90eF9jb21wbGV0ZSwKIAkuaXJfdHhfdXBkYXRlCT0gYW1ycl90eF91cGRhdGUsCiAJLmly
X3NldGludGVydmFsCT0gYW1ycl9zZXRpbnRlcnZhbCwKKwkuaXJfc3RhdHMJPSBhbXJyX3N0YXRz
LAogfTsKIElFRUU4MDIxMV9SQVRFQ1RMX01PRFVMRShhbXJyLCAxKTsKIElFRUU4MDIxMV9SQVRF
Q1RMX0FMRyhhbXJyLCBJRUVFODAyMTFfUkFURUNUTF9BTVJSLCBhbXJyKTsKQEAgLTEwNSw3ICsx
MDgsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotYW1ycl9pbml0KHN0cnVjdCBpZWVlODAyMTF2YXAg
KnZhcCkKK2FtcnJfaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIHVpbnQzMl90IGNhcGFi
aWxpdGllcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2FtcnIgKmFtcnI7CiAKQEAgLTExNyw2ICsx
MjAsMTAgQEAKIAkJaWZfcHJpbnRmKHZhcC0+aXZfaWZwLCAiY291bGRuJ3QgYWxsb2MgcmF0ZWN0
bCBzdHJ1Y3R1cmVcbiIpOwogCQlyZXR1cm47CiAJfQorCisJc3RydWN0IGllZWU4MDIxMV9yY19z
dGF0ICogaXJzID0gSUVFRTgwMjExX1JBVEVDVExfU1RBVCh2YXApOworCWlycy0+aXJzX2NhcGFi
aWxpdGllcyA9IGNhcGFiaWxpdGllczsKKwogCWFtcnItPmFtcnJfbWluX3N1Y2Nlc3NfdGhyZXNo
b2xkID0gSUVFRTgwMjExX0FNUlJfTUlOX1NVQ0NFU1NfVEhSRVNIT0xEOwogCWFtcnItPmFtcnJf
bWF4X3N1Y2Nlc3NfdGhyZXNob2xkID0gSUVFRTgwMjExX0FNUlJfTUFYX1NVQ0NFU1NfVEhSRVNI
T0xEOwogCWFtcnJfc2V0aW50ZXJ2YWwodmFwLCA1MDAgLyogbXMgKi8pOwpAQCAtMTI5LDE3ICsx
MzYsNiBAQAogCWZyZWUodmFwLT5pdl9ycywgTV84MDIxMV9SQVRFQ1RMKTsKIH0KIAotc3RhdGlj
IGludAotYW1ycl9ub2RlX2lzXzExbihzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pKQotewotCi0J
aWYgKG5pLT5uaV9jaGFuID09IE5VTEwpCi0JCXJldHVybiAoMCk7Ci0JaWYgKG5pLT5uaV9jaGFu
ID09IElFRUU4MDIxMV9DSEFOX0FOWUMpCi0JCXJldHVybiAoMCk7Ci0JcmV0dXJuIChJRUVFODAy
MTFfSVNfQ0hBTl9IVChuaS0+bmlfY2hhbikpOwotfQotCiBzdGF0aWMgdm9pZAogYW1ycl9ub2Rl
X2luaXQoc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSkKIHsKQEAgLTE1OSwyOSArMTU1LDIwIEBA
CiAJCX0KIAl9IGVsc2UKIAkJYW1uID0gbmktPm5pX3JjdGxzOworCiAJYW1uLT5hbW5fYW1yciA9
IGFtcnI7CiAJYW1uLT5hbW5fc3VjY2VzcyA9IDA7CiAJYW1uLT5hbW5fcmVjb3ZlcnkgPSAwOwog
CWFtbi0+YW1uX3R4Y250ID0gYW1uLT5hbW5fcmV0cnljbnQgPSAwOwogCWFtbi0+YW1uX3N1Y2Nl
c3NfdGhyZXNob2xkID0gYW1yci0+YW1ycl9taW5fc3VjY2Vzc190aHJlc2hvbGQ7CiAKLQkvKiAx
MW4gb3Igbm90PyBQaWNrIHRoZSByaWdodCByYXRlc2V0ICovCi0JaWYgKGFtcnJfbm9kZV9pc18x
MW4obmkpKSB7Ci0JCS8qIFhYWCBldyAqLwotCQlJRUVFODAyMTFfTk9URShuaS0+bmlfdmFwLCBJ
RUVFODAyMTFfTVNHX1JBVEVDVEwsIG5pLAotCQkgICAgIiVzOiAxMW4gbm9kZSIsIF9fZnVuY19f
KTsKLQkJcnMgPSAoc3RydWN0IGllZWU4MDIxMV9yYXRlc2V0ICopICZuaS0+bmlfaHRyYXRlczsK
LQl9IGVsc2UgewotCQlJRUVFODAyMTFfTk9URShuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNHX1JB
VEVDVEwsIG5pLAotCQkgICAgIiVzOiBub24tMTFuIG5vZGUiLCBfX2Z1bmNfXyk7Ci0JCXJzID0g
Jm5pLT5uaV9yYXRlczsKLQl9CisJcnMgPSBpZWVlODAyMTFfcmF0ZWN0bF9nZXRfcmF0ZXNldChu
aSk7CiAKIAkvKiBJbml0aWFsIHJhdGUgLSBsb3dlc3QgKi8KIAlyYXRlID0gcnMtPnJzX3JhdGVz
WzBdOwogCiAJLyogWFhYIGNsZWFyIHRoZSBiYXNpYyByYXRlIGZsYWcgaWYgaXQncyBub3QgMTFu
ICovCi0JaWYgKCEgYW1ycl9ub2RlX2lzXzExbihuaSkpCisJaWYgKCEgaWVlZTgwMjExX3JhdGVj
dGxfbm9kZV9pczExbihuaSkpCiAJCXJhdGUgJj0gSUVFRTgwMjExX1JBVEVfVkFMOwogCiAJLyog
cGljayBpbml0aWFsIHJhdGUgZnJvbSB0aGUgcmF0ZXNldCAtIEhUIG9yIG90aGVyd2lzZSAqLwpA
QCAtMTg5LDcgKzE3Niw3IEBACiAJICAgIGFtbi0+YW1uX3JpeC0tKSB7CiAJCS8qIGxlZ2FjeSAt
IGFueXRoaW5nIDwgMzZtYml0LCBzdG9wIHNlYXJjaGluZyAqLwogCQkvKiAxMW4gLSBzdG9wIGF0
IE1DUzQgLyBNQ1MxMiAvIE1DUzI4ICovCi0JCWlmIChhbXJyX25vZGVfaXNfMTFuKG5pKSAmJgor
CQlpZiAoaWVlZTgwMjExX3JhdGVjdGxfbm9kZV9pczExbihuaSkgJiYKIAkJICAgIChycy0+cnNf
cmF0ZXNbYW1uLT5hbW5fcml4XSAmIDB4NykgPCA0KQogCQkJYnJlYWs7CiAJCWVsc2UgaWYgKChy
cy0+cnNfcmF0ZXNbYW1uLT5hbW5fcml4XSAmIElFRUU4MDIxMV9SQVRFX1ZBTCkgPD0gNzIpCkBA
IC0xOTgsNyArMTg1LDcgQEAKIAl9CiAKIAkvKiBpZiB0aGUgcmF0ZSBpcyBhbiAxMW4gcmF0ZSwg
ZW5zdXJlIHRoZSBNQ1MgYml0IGlzIHNldCAqLwotCWlmIChhbXJyX25vZGVfaXNfMTFuKG5pKSkK
KwlpZiAoaWVlZTgwMjExX3JhdGVjdGxfbm9kZV9pczExbihuaSkpCiAJCXJhdGUgfD0gSUVFRTgw
MjExX1JBVEVfTUNTOwogCiAJLyogQXNzaWduIGluaXRpYWwgcmF0ZSBmcm9tIHRoZSByYXRlc2V0
ICovCkBAIC0yMDYsOSArMTkzLDggQEAKIAlhbW4tPmFtbl90aWNrcyA9IHRpY2tzOwogCiAJSUVF
RTgwMjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19SQVRFQ1RMLCBuaSwKLQkgICAg
IkFNUlI6IG5yYXRlcz0lZCwgaW5pdGlhbCByYXRlICVkIiwKLQkgICAgcnMtPnJzX25yYXRlcywK
LQkgICAgcmF0ZSk7CisJICAgICIlczogQU1SUjogbnJhdGVzPSVkLCBpbml0aWFsIHJhdGUgJWQi
LAorCQlfX2Z1bmNfXywgcnMtPnJzX25yYXRlcywgcmF0ZSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBA
IC0yMjYsMTcgKzIxMiwxMiBAQAogCiAJS0FTU0VSVChpc19lbm91Z2goYW1uKSwgKCJ0eGNudCAl
ZCIsIGFtbi0+YW1uX3R4Y250KSk7CiAKLQkvKiAxMW4gb3Igbm90PyBQaWNrIHRoZSByaWdodCBy
YXRlc2V0ICovCi0JaWYgKGFtcnJfbm9kZV9pc18xMW4obmkpKSB7Ci0JCS8qIFhYWCBldyAqLwot
CQlycyA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhdGVzZXQgKikgJm5pLT5uaV9odHJhdGVzOwotCX0g
ZWxzZSB7Ci0JCXJzID0gJm5pLT5uaV9yYXRlczsKLQl9CisJcnMgPSBpZWVlODAyMTFfcmF0ZWN0
bF9nZXRfcmF0ZXNldChuaSk7CiAKKwogCUlFRUU4MDIxMV9OT1RFKG5pLT5uaV92YXAsIElFRUU4
MDIxMV9NU0dfUkFURUNUTCwgbmksCi0JICAgICJBTVJSOiBjdXJyZW50IHJhdGUgJWQsIHR4Y250
PSVkLCByZXRyeWNudD0lZCIsCi0JICAgIHJzLT5yc19yYXRlc1tyaXhdICYgSUVFRTgwMjExX1JB
VEVfVkFMLAorCSAgICAiJXM6IEFNUlI6IGN1cnJlbnQgcmF0ZSAlZCwgdHhjbnQ9JWQsIHJldHJ5
Y250PSVkIiwKKwkgICAgX19mdW5jX18sIHJzLT5yc19yYXRlc1tyaXhdICYgSUVFRTgwMjExX1JB
VEVfVkFMLAogCSAgICBhbW4tPmFtbl90eGNudCwKIAkgICAgYW1uLT5hbW5fcmV0cnljbnQpOwog
CkBAIC0yNTYsOCArMjM3LDggQEAKIAkJCWFtbi0+YW1uX3N1Y2Nlc3MgPSAwOwogCQkJcml4Kys7
CiAJCQlJRUVFODAyMTFfTk9URShuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsIG5p
LAotCQkJICAgICJBTVJSIGluY3JlYXNpbmcgcmF0ZSAlZCAodHhjbnQ9JWQgcmV0cnljbnQ9JWQp
IiwKLQkJCSAgICBycy0+cnNfcmF0ZXNbcml4XSAmIElFRUU4MDIxMV9SQVRFX1ZBTCwKKwkJCSAg
ICAiJXM6IEFNUlIgaW5jcmVhc2luZyByYXRlICVkICh0eGNudD0lZCByZXRyeWNudD0lZCkiLAor
CQkJICAgIF9fZnVuY19fLCBycy0+cnNfcmF0ZXNbcml4XSAmIElFRUU4MDIxMV9SQVRFX1ZBTCwK
IAkJCSAgICBhbW4tPmFtbl90eGNudCwgYW1uLT5hbW5fcmV0cnljbnQpOwogCQl9IGVsc2Ugewog
CQkJYW1uLT5hbW5fcmVjb3ZlcnkgPSAwOwpAQCAtMjc3LDggKzI1OCw4IEBACiAJCQl9CiAJCQly
aXgtLTsKIAkJCUlFRUU4MDIxMV9OT1RFKG5pLT5uaV92YXAsIElFRUU4MDIxMV9NU0dfUkFURUNU
TCwgbmksCi0JCQkgICAgIkFNUlIgZGVjcmVhc2luZyByYXRlICVkICh0eGNudD0lZCByZXRyeWNu
dD0lZCkiLAotCQkJICAgIHJzLT5yc19yYXRlc1tyaXhdICYgSUVFRTgwMjExX1JBVEVfVkFMLAor
CQkJICAgICIlczogQU1SUiBkZWNyZWFzaW5nIHJhdGUgJWQgKHR4Y250PSVkIHJldHJ5Y250PSVk
KSIsCisJCQkgICAgX19mdW5jX18sIHJzLT5yc19yYXRlc1tyaXhdICYgSUVFRTgwMjExX1JBVEVf
VkFMLAogCQkJICAgIGFtbi0+YW1uX3R4Y250LCBhbW4tPmFtbl9yZXRyeWNudCk7CiAJCX0KIAkJ
YW1uLT5hbW5fcmVjb3ZlcnkgPSAwOwpAQCAtMzA0LDEzICsyODUsNyBAQAogCWNvbnN0IHN0cnVj
dCBpZWVlODAyMTFfcmF0ZXNldCAqcnMgPSBOVUxMOwogCWludCByaXg7CiAKLQkvKiAxMW4gb3Ig
bm90PyBQaWNrIHRoZSByaWdodCByYXRlc2V0ICovCi0JaWYgKGFtcnJfbm9kZV9pc18xMW4obmkp
KSB7Ci0JCS8qIFhYWCBldyAqLwotCQlycyA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhdGVzZXQgKikg
Jm5pLT5uaV9odHJhdGVzOwotCX0gZWxzZSB7Ci0JCXJzID0gJm5pLT5uaV9yYXRlczsKLQl9CisJ
cnMgPSBpZWVlODAyMTFfcmF0ZWN0bF9nZXRfcmF0ZXNldChuaSk7CiAKIAlpZiAoaXNfZW5vdWdo
KGFtbikgJiYgKHRpY2tzIC0gYW1uLT5hbW5fdGlja3MpID4gYW1yci0+YW1ycl9pbnRlcnZhbCkg
ewogCQlyaXggPSBhbXJyX3VwZGF0ZShhbXJyLCBhbW4sIG5pKTsKQEAgLTMxOCw3ICsyOTMsNyBA
QAogCQkJLyogdXBkYXRlIHB1YmxpYyByYXRlICovCiAJCQluaS0+bmlfdHhyYXRlID0gcnMtPnJz
X3JhdGVzW3JpeF07CiAJCQkvKiBYWFggc3RyaXAgYmFzaWMgcmF0ZSBmbGFnIGZyb20gdHhyYXRl
LCBpZiBub24tMTFuICovCi0JCQlpZiAoYW1ycl9ub2RlX2lzXzExbihuaSkpCisJCQlpZiAoaWVl
ZTgwMjExX3JhdGVjdGxfbm9kZV9pczExbihuaSkpCiAJCQkJbmktPm5pX3R4cmF0ZSB8PSBJRUVF
ODAyMTFfUkFURV9NQ1M7CiAJCQllbHNlCiAJCQkJbmktPm5pX3R4cmF0ZSAmPSBJRUVFODAyMTFf
UkFURV9WQUw7CkBAIC0zMzAsNiArMzA1LDc2IEBACiAJcmV0dXJuIHJpeDsKIH0KIAorc3RhdGlj
IHZvaWQKK2FtcnJfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgc3RydWN0IGllZWU4
MDIxMV9yY19pbmZvICpyY19pbmZvKQoreworI2RlZmluZQlSQVRFKF9peCkJKHJzLT5yc19yYXRl
c1soX2l4KV0gJiBJRUVFODAyMTFfUkFURV9WQUwpCisjZGVmaW5lCU1DUyhfaXgpCShycy0+cnNf
cmF0ZXNbKF9peCldIHwgSUVFRTgwMjExX1JBVEVfTUNTKQorCXN0cnVjdCBpZWVlODAyMTFfcmNf
c2VyaWVzICpyYyA9IHJjX2luZm8tPmlyaV9yYzsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Jh
dGVzZXQgKnJzID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0
ID0gTlVMTDsKKwlpbnQgcml4LCBjb2RlOworCisJcnMgPSBpZWVlODAyMTFfcmF0ZWN0bF9nZXRf
cmF0ZXNldChuaSk7CisJcnQgPSBpZWVlODAyMTFfZ2V0X3JhdGV0YWJsZShuaS0+bmlfaWMtPmlj
X2N1cmNoYW4pOworCUlFRUU4MDIxMV9EUFJJTlRGKG5pLT5uaV92YXAsIElFRUU4MDIxMV9NU0df
UkFURUNUTCwgCisJICAgICIlczogY2hhbm5lbCBmbGFnczogMHglMDh4XG4iLCBfX2Z1bmNfXywg
CisJCW5pLT5uaV9pYy0+aWNfY3VyY2hhbi0+aWNfZmxhZ3MpOyAKKwkKKwlyaXggPSBhbXJyX3Jh
dGUobmksIE5VTEwsIDApOworCisJcmNbMF0uZmxhZ3MgPSByY1sxXS5mbGFncyA9IHJjWzJdLmZs
YWdzID0gcmNbM10uZmxhZ3MgPSAwOworCisJaWYgKHJzLT5yc19ucmF0ZXMgPiAwKSB7CisJCWNv
ZGUgPSBpZWVlODAyMTFfcmF0ZWN0bF9ub2RlX2lzMTFuKG5pKT8gTUNTKHJpeCkgOiBSQVRFKHJp
eCk7CisJCXJjWzBdLnJpeCA9IHJ0LT5yYXRlQ29kZVRvSW5kZXhbY29kZV07CisKKwkJaWYgKElF
RUU4MDIxMV9SQVRFQ1RMX0hBU0NBUF9NUlIobmktPm5pX3ZhcCkpIHsKKwkJCXJjWzBdLnRyaWVz
ID0gMTsKKwkJCXJjWzFdLnRyaWVzID0gMTsKKwkJCXJjWzJdLnRyaWVzID0gMTsKKwkJCXJjWzNd
LnRyaWVzID0gMTsKKwkJCWlmICgtLXJpeCA+PSAwKSB7CisJCQkJY29kZSA9IGllZWU4MDIxMV9y
YXRlY3RsX25vZGVfaXMxMW4obmkpPyBNQ1Mocml4KSA6IFJBVEUocml4KTsKKwkJCQlyY1sxXS5y
aXggPSBydC0+cmF0ZUNvZGVUb0luZGV4W2NvZGVdOworCQkJfSBlbHNlIHsKKwkJCQlyY1sxXS5y
aXggPSBydC0+cmF0ZUNvZGVUb0luZGV4WzBdOworCQkJfQorCQkJaWYgKC0tcml4ID49IDApIHsK
KwkJCQljb2RlID0gaWVlZTgwMjExX3JhdGVjdGxfbm9kZV9pczExbihuaSk/IE1DUyhyaXgpIDog
UkFURShyaXgpOworCQkJCXJjWzJdLnJpeCA9IHJ0LT5yYXRlQ29kZVRvSW5kZXhbY29kZV07CisJ
CQl9IGVsc2UgeworCQkJCXJjWzJdLnJpeCA9IHJ0LT5yYXRlQ29kZVRvSW5kZXhbMF07CisJCQl9
CisJCQlpZiAocml4ID49IDApIHsKKwkJCQkvKiBOQjogb25seSBkbyB0aGlzIGlmIHdlIGRpZG4n
dCBhbHJlYWR5IGRvIGl0IGFib3ZlICovCisJCQkJY29kZSA9IGllZWU4MDIxMV9yYXRlY3RsX25v
ZGVfaXMxMW4obmkpPyBNQ1MoMCkgOiBSQVRFKDApOworCQkJCXJjWzNdLnJpeCA9IHJ0LT5yYXRl
Q29kZVRvSW5kZXhbY29kZV07CisJCQl9IGVsc2UgeworCQkJCXJjWzNdLnJpeCA9IHJ0LT5yYXRl
Q29kZVRvSW5kZXhbMF07CisJCQl9CisJCX0gZWxzZSB7CisJCQlyY1swXS50cmllcyA9IElFRUU4
MDIxMV9SQVRFQ1RMX1RYTUFYVFJZOworCisJCQlyY1sxXS50cmllcyA9IDA7CisJCQlyY1syXS50
cmllcyA9IDA7CisJCQlyY1szXS50cmllcyA9IDA7CisJCQlyY1sxXS5yaXggPSBydC0+cmF0ZUNv
ZGVUb0luZGV4WzBdOworCQkJcmNbMl0ucml4ID0gcnQtPnJhdGVDb2RlVG9JbmRleFswXTsKKwkJ
CXJjWzNdLnJpeCA9IHJ0LT5yYXRlQ29kZVRvSW5kZXhbMF07CisJCX0KKwl9CisJSUVFRTgwMjEx
X05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19SQVRFQ1RMLCBuaSwKKwkgICAgIiVzOiBB
TVJSIHJhdGUgc2V0cyhyaXgsIHRyaWVzKS4gcmNbMF06KCVkLCAlZCksIHJjWzFdOiglZCwgJWQp
LCAiIAorCQkicmNbMl06KCVkLCAlZCksIHJjWzNdOiglZCwgJWQpIiwgX19mdW5jX18sIAorCQly
Y1swXS5yaXgsIHJjWzBdLnRyaWVzLAorCQlyY1sxXS5yaXgsIHJjWzFdLnRyaWVzLCAKKwkJcmNb
Ml0ucml4LCByY1syXS50cmllcywgCisJCXJjWzNdLnJpeCwgcmNbM10udHJpZXMpOworI3VuZGVm
IFJBVEUKKyN1bmRlZiBNQ1MKK30KKwogLyoKICAqIFVwZGF0ZSBzdGF0aXN0aWNzIHdpdGggdHgg
Y29tcGxldGUgc3RhdHVzLiAgT2sgaXMgbm9uLXplcm8KICAqIGlmIHRoZSBwYWNrZXQgaXMga25v
d24gdG8gYmUgQUNLJ2QuICBSZXRyaWVzIGhhcyB0aGUgbnVtYmVyCkBAIC0zMzcsMTYgKzM4Miwy
MiBAQAogICovCiBzdGF0aWMgdm9pZAogYW1ycl90eF9jb21wbGV0ZShjb25zdCBzdHJ1Y3QgaWVl
ZTgwMjExdmFwICp2YXAsCi0gICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgaW50
IG9rLAotICAgIHZvaWQgKmFyZzEsIHZvaWQgKmFyZzIgX191bnVzZWQpCisgICAgY29uc3Qgc3Ry
dWN0IGllZWU4MDIxMV9ub2RlICpuaSwgc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZv
KQogewogCXN0cnVjdCBpZWVlODAyMTFfYW1ycl9ub2RlICphbW4gPSBuaS0+bmlfcmN0bHM7Ci0J
aW50IHJldHJpZXMgPSAqKGludCAqKWFyZzE7CiAKLQlhbW4tPmFtbl90eGNudCsrOwotCWlmIChv
aykKLQkJYW1uLT5hbW5fc3VjY2VzcysrOwotCWFtbi0+YW1uX3JldHJ5Y250ICs9IHJldHJpZXM7
CisJLyogdXBkYXRlIHBlciB2YXAgc3RhdGlzdGljcyAqLworCWllZWU4MDIxMV9yYXRlY3RsX3Vw
ZGF0ZV9zdGF0KHZhcCwgcmNfaW5mbyk7CisKKwlhbW4tPmFtbl90eGNudCArPSByY19pbmZvLT5p
cmlfdHhjbnQ7CisJYW1uLT5hbW5fc3VjY2VzcyArPSAocmNfaW5mby0+aXJpX3R4Y250IC0gcmNf
aW5mby0+aXJpX2ZhaWxjbnQpOworCWFtbi0+YW1uX3JldHJ5Y250ICs9IHJjX2luZm8tPmlyaV9y
ZXRyeWNudDsKKworCUlFRUU4MDIxMV9OT1RFKHZhcCwgSUVFRTgwMjExX01TR19SQVRFQ1RMLCBu
aSwKKwkgICAgIiVzOiBBTVJSIHR4IGNvbXBsZXRlLiB0eGNudD0lZCglZCkgc3VjY2Vzcz0lZCgl
ZCkgcmV0cnljbnQ9JWQoJWQpXG4iLAorCSAgICBfX2Z1bmNfXywgYW1uLT5hbW5fdHhjbnQsIHJj
X2luZm8tPmlyaV90eGNudCwKKwkJYW1uLT5hbW5fc3VjY2VzcywgKHJjX2luZm8tPmlyaV90eGNu
dCAtIHJjX2luZm8tPmlyaV9mYWlsY250KSwKKwkJYW1uLT5hbW5fcmV0cnljbnQsIHJjX2luZm8t
PmlyaV9yZXRyeWNudCk7CiB9CiAKIC8qCkBAIC0zNjQsOCArNDE1LDIxIEBACiAJYW1uLT5hbW5f
dHhjbnQgPSB0eGNudDsKIAlhbW4tPmFtbl9zdWNjZXNzID0gc3VjY2VzczsKIAlhbW4tPmFtbl9y
ZXRyeWNudCA9IHJldHJ5Y250OworCUlFRUU4MDIxMV9OT1RFKHZhcCwgSUVFRTgwMjExX01TR19S
QVRFQ1RMLCBuaSwKKwkgICAgIiVzOiBBTVJSIHR4IHVwZGF0ZS4gdHhjbnQ9JWQgc3VjY2Vzcz0l
ZCByZXRyeWNudD0lZFxuIiwKKwkgICAgX19mdW5jX18sIHR4Y250LCBzdWNjZXNzLCByZXRyeWNu
dCk7CiB9CiAKK3N0YXRpYyB2b2lkCithbXJyX3N0YXRzKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2
YXAgKnZhcCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3N0YXQgKiBpcnMgPSBJRUVFODAyMTFf
UkFURUNUTF9TVEFUKHZhcCk7CisJcHJpbnRmKCJ0eCBjb3VudDogJWQgKG9rIGNvdW50OiAlZCwg
ZmFpbCBjb3VudDogJWQpXG4iCisJCQkicmV0cnkgY291bnQ6ICVkIChzaG9ydCByZXRyeTogJWQs
IGxvbmcgcmV0cnk6ICVkKVxuIiwKKwkJCWlycy0+aXJzX3R4Y250LCBpcnMtPmlyc190eGNudCAt
IGlycy0+aXJzX2ZhaWxjbnQsIGlycy0+aXJzX2ZhaWxjbnQsCisJCQlpcnMtPmlyc19yZXRyeWNu
dCwgaXJzLT5pcnNfc2hvcnRyZXRyeSwgaXJzLT5pcnNfbG9uZ3JldHJ5KTsKK30KKwogc3RhdGlj
IGludAogYW1ycl9zeXNjdGxfaW50ZXJ2YWwoU1lTQ1RMX0hBTkRMRVJfQVJHUykKIHsKSW5kZXg6
IG5ldDgwMjExL2llZWU4MDIxMV9ub2RlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbmV0ODAyMTEvaWVlZTgw
MjExX25vZGUuYwkocmV2aXNpb24gMjU0ODI2KQorKysgbmV0ODAyMTEvaWVlZTgwMjExX25vZGUu
Ywkod29ya2luZyBjb3B5KQpAQCAtMTA3NCw2ICsxMDc0LDggQEAKIAlpZWVlODAyMTFfaWVzX2Ns
ZWFudXAoJm5pLT5uaV9pZXMpOwogCWllZWU4MDIxMV9wc3FfY2xlYW51cCgmbmktPm5pX3BzcSk7
CiAJZnJlZShuaSwgTV84MDIxMV9OT0RFKTsKKwlJRUVFODAyMTFfRFBSSU5URihuaS0+bmlfdmFw
LCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsCisJCQkiJXM6IGFmdGVyIGZyZWUobmksIE1fODAyMTFf
Tk9ERSkuXG4iLCBfX2Z1bmNfXyk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xNzMzLDcgKzE3MzUs
NyBAQAogCSAqIHRvIHVzZSBuaV9pYyBiZWxvdyB0byByZWNsYWltIHJlc291cmNlcy4KIAkgKi8K
ICNpZiAwCi0JSUVFRTgwMjExX0RQUklOVEYodmFwLCBJRUVFODAyMTFfTVNHX05PREUsCisJSUVF
RTgwMjExX0RQUklOVEYobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19OT0RFLAogCQkiJXMgJXA8
JXM+IGluICVzIHRhYmxlXG4iLCBfX2Z1bmNfXywgbmksCiAJCWV0aGVyX3NwcmludGYobmktPm5p
X21hY2FkZHIpLAogCQludCAhPSBOVUxMID8gbnQtPm50X25hbWUgOiAiPGdvbmU+Iik7CkluZGV4
OiBuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5ldDgwMjExL2ll
ZWU4MDIxMV9yYXRlY3RsLmMJKHJldmlzaW9uIDI1NDgyNikKKysrIG5ldDgwMjExL2llZWU4MDIx
MV9yYXRlY3RsLmMJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKi0KICAqIENvcHly
aWdodCAoYykgMjAxMCBSdWkgUGF1bG8gPHJwYXVsb0BGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdo
dCAoYykgMjAxMyBDaGVuY2hvbmcgUWluIDxjY3FpbkBGcmVlQlNELm9yZz4KICAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00OSw2ICs1MCw0MCBAQAogCiBNQUxM
T0NfREVGSU5FKE1fODAyMTFfUkFURUNUTCwgIjgwMjExcmF0ZWN0bCIsICI4MDIuMTEgcmF0ZSBj
b250cm9sIik7CiAKK2VudW0geworCU1DU19IVDIwLAorCU1DU19IVDIwX1NHSSwKKwlNQ1NfSFQ0
MCwKKwlNQ1NfSFQ0MF9TR0ksCit9OworCitpbnQgbWF4XzRtc19mcmFtZWxlbls0XVszMl0gPSB7
CisJW01DU19IVDIwXSA9IHsKKwkJMzIxMiwgIDY0MzIsICA5NjQ4LCAgMTI4NjQsICAxOTMwMCwg
IDI1NzM2LCAgMjg5NTIsICAzMjE3MiwKKwkJNjQyNCwgIDEyODUyLCAxOTI4MCwgMjU3MDgsICAz
ODU2OCwgIDUxNDI0LCAgNTc4NTIsICA2NDI4MCwKKwkJOTYyOCwgIDE5MjYwLCAyODg5NiwgMzg1
MjgsICA1Nzc5MiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwKKwkJMTI4MjgsIDI1NjU2LCAzODQ4
OCwgNTEzMjAsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwKKwl9LAorCVtNQ1NfSFQy
MF9TR0ldID0geworCQkzNTcyLCAgNzE0NCwgIDEwNzIwLCAgMTQyOTYsICAyMTQ0NCwgIDI4NTk2
LCAgMzIxNzIsICAzNTc0NCwKKwkJNzE0MCwgIDE0Mjg0LCAyMTQyOCwgIDI4NTY4LCAgNDI4NTYs
ICA1NzE0NCwgIDY0Mjg4LCAgNjU1MzIsCisJCTEwNzAwLCAyMTQwOCwgMzIxMTIsICA0MjgxNiwg
IDY0MjI4LCAgNjU1MzIsICA2NTUzMiwgIDY1NTMyLAorCQkxNDI1NiwgMjg1MTYsIDQyNzgwLCAg
NTcwNDAsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwKKwl9LAorCVtNQ1NfSFQ0MF0g
PSB7CisJCTY2ODAsICAxMzM2MCwgIDIwMDQ0LCAgMjY3MjQsICA0MDA5MiwgIDUzNDU2LCAgNjAx
NDAsICA2NTUzMiwKKwkJMTMzNDgsIDI2NzAwLCAgNDAwNTIsICA1MzQwMCwgIDY1NTMyLCAgNjU1
MzIsICA2NTUzMiwgIDY1NTMyLAorCQkyMDAwNCwgNDAwMDgsICA2MDAxNiwgIDY1NTMyLCAgNjU1
MzIsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsCisJCTI2NjQ0LCA1MzI5MiwgIDY1NTMyLCAgNjU1
MzIsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwKKwl9LAorCVtNQ1NfSFQ0MF9TR0ld
ID0geworCQk3NDIwLCAgMTQ4NDQsICAyMjI3MiwgIDI5Njk2LCAgNDQ1NDQsICA1OTM5NiwgIDY1
NTMyLCAgNjU1MzIsCisJCTE0ODMyLCAyOTY2OCwgIDQ0NTA0LCAgNTkzNDAsICA2NTUzMiwgIDY1
NTMyLCAgNjU1MzIsICA2NTUzMiwKKwkJMjIyMzIsIDQ0NDY0LCAgNjU1MzIsICA2NTUzMiwgIDY1
NTMyLCAgNjU1MzIsICA2NTUzMiwgIDY1NTMyLAorCQkyOTYxNiwgNTkyMzIsICA2NTUzMiwgIDY1
NTMyLCAgNjU1MzIsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsCisJfQorfTsKKwogdm9pZAogaWVl
ZTgwMjExX3JhdGVjdGxfcmVnaXN0ZXIoaW50IHR5cGUsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFf
cmF0ZWN0bCAqcmF0ZWN0bCkKIHsKQEAgLTY1LDEyICsxMDAsMzYgQEAKIAlyYXRlY3Rsc1t0eXBl
XSA9IE5VTEw7CiB9CiAKK3N0YXRpYyBpbnQKK3JhdGVjdGxfc3lzY3RsX3N0YXRzKFNZU0NUTF9I
QU5ETEVSX0FSR1MpCit7CisJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gYXJnMTsKKwlpbnQg
ZXJyb3IsIHY7CisKKwl2ID0gMDsKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZ2
LCAwLCByZXEpOworCWlmIChlcnJvciB8fCAhcmVxLT5uZXdwdHIpCisJCXJldHVybiBlcnJvcjsK
KworCWllZWU4MDIxMV9yYXRlY3RsX3N0YXRzKHZhcCk7CisJcmV0dXJuIDA7Cit9CisKIHZvaWQK
LWllZWU4MDIxMV9yYXRlY3RsX2luaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwKQoraWVlZTgw
MjExX3JhdGVjdGxfaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIHVpbnQzMl90IGNhcGFi
aWxpdGllcykKIHsKIAlpZiAodmFwLT5pdl9yYXRlID09IHJhdGVjdGxzW0lFRUU4MDIxMV9SQVRF
Q1RMX05PTkVdKQogCQlpZWVlODAyMTFfcmF0ZWN0bF9zZXQodmFwLCBJRUVFODAyMTFfUkFURUNU
TF9BTVJSKTsKLQl2YXAtPml2X3JhdGUtPmlyX2luaXQodmFwKTsKKwl2YXAtPml2X3JhdGUtPmly
X2luaXQodmFwLCBjYXBhYmlsaXRpZXMpOworCisJU1lTQ1RMX0FERF9QUk9DKHZhcC0+aXZfc3lz
Y3RsLCBTWVNDVExfQ0hJTERSRU4odmFwLT5pdl9vaWQpLCAKKwkJCU9JRF9BVVRPLCAicmF0ZWN0
bF9zdGF0cyIsIENUTFRZUEVfSU5UIHwgQ1RMRkxBR19SVywgCisJCQl2YXAsIDAsIHJhdGVjdGxf
c3lzY3RsX3N0YXRzLCAiSSIsIAorCQkJInBlci12YXAgbmV0ODAyMTEgcmF0ZWN0bCBzdGF0aXN0
aWNzIik7CisKKwlJRUVFODAyMTFfRFBSSU5URih2YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwK
KwkgICAgIiVzOiByYXRlY3RsIGluaXRpYWxpemVkLiBjYXBzPTB4JTA4eFxuIiwKKwkgICAgX19m
dW5jX18sIGNhcGFiaWxpdGllcyk7CiB9CiAKIHZvaWQKQEAgLTkwLDMgKzE0OSwxMTAgQEAKIAl9
CiAJdmFwLT5pdl9yYXRlID0gcmF0ZWN0bHNbdHlwZV07CiB9CisKK3ZvaWQKK2llZWU4MDIxMV9y
YXRlY3RsX2NvbXBsZXRlX3JjZmxhZ3Moc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwKKwkJc3Ry
dWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvKQoreworCXN0cnVjdCBpZWVlODAyMTF2YXAg
KnZhcCA9IG5pLT5uaV92YXA7CisJc3RydWN0IGllZWU4MDIxMV9yY19zZXJpZXMgKnJjID0gcmNf
aW5mby0+aXJpX3JjOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZV90YWJsZSAqIHJ0ID0g
TlVMTDsKKwl1aW50OF90IHJhdGU7CisJaW50IGk7CisKKwlydCA9IGllZWU4MDIxMV9nZXRfcmF0
ZXRhYmxlKG5pLT5uaV9pYy0+aWNfY3VyY2hhbik7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCByYXRl
IGNvbnRyb2wgY29kZSBkb2Vzbid0IG1lc3MgaXQgdXAuCisJICogSWYgZW5hYmxlIHJ0cy9jdHMg
YW5kIGlzIHByZS04MDIuMTFuLCBibGFuayB0cmllcyAxLCAyLCAzIAorCSAqLworCisJaWYgKCEg
SUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01SUlBST1QodmFwKSkKKwl7CisJCWZvciAoaSA9IDE7
IGkgPCBJRUVFODAyMTFfUkFURUNUTF9OVU07IGkrKykKKwkJeworCQkJaWYgKHJjWzBdLmZsYWdz
ICYgSUVFRTgwMjExX1JBVEVDVExfRkxBR19SVFNDVFMpCisJCQkJcmNbaV0udHJpZXMgPSAwOwor
CQkJcmNbaV0uZmxhZ3MgJj0gfklFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfUlRTQ1RTOyAKKwkJfQor
CX0KKworCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfUkFURUNUTF9OVU07IGkrKykgeworCQkK
KwkJaWYgKHJjW2ldLnRyaWVzID09IDApCisJCQljb250aW51ZTsKKworCQlyYXRlID0gcnQtPmlu
Zm9bcmNbaV0ucml4XS5kb3QxMVJhdGU7CisKKwkJLyogT25seSBlbmFibGUgZHVhbC1zdHJlYW0s
IHNob3J0Z2ksIDIwNDAgaWYgSFQgaXMgc2V0ICovCisKKwkJaWYgKElTX0hUX1JBVEUocmF0ZSkp
IHsKKwkJCXJjW2ldLmZsYWdzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfSFQ7CisKKwkJCWlm
IChpZWVlODAyMTFfcmF0ZWN0bF9oYXNjYXBfY3c0MChuaSkpCisJCQkJcmNbaV0uZmxhZ3MgfD0g
SUVFRTgwMjExX1JBVEVDVExfRkxBR19DVzQwOworCisJCQlpZiAoaWVlZTgwMjExX3JhdGVjdGxf
aGFzY2FwX3Nob3J0Z2kobmkpKQorCQkJCXJjW2ldLmZsYWdzIHw9IElFRUU4MDIxMV9SQVRFQ1RM
X0ZMQUdfU0dJOworCQkJLyoKKwkJCSAqIElmIHdlIGhhdmUgU1RCQyBUWCBlbmFibGVkIGFuZCB0
aGUgcmVjZWl2ZXIKKwkJCSAqIGNhbiByZWNlaXZlIChhdCBsZWFzdCkgMSBzdHJlYW0gU1RCQywg
QU5EIGl0J3MKKwkJCSAqIE1DUyAwLTcsIEFORCB3ZSBoYXZlIGF0IGxlYXN0IHR3byBjaGFpbnMg
ZW5hYmxlZCwKKwkJCSAqIGVuYWJsZSBTVEJDLgorCQkJICovCisJCQlpZiAoaWVlZTgwMjExX3Jh
dGVjdGxfaGFzY2FwX3N0YmMobmkpICYmCisJCQkJKHJhdGUgJiBJRUVFODAyMTFfUkFURV9WQUwp
IDwgOCAmJgorCQkJCUhUX1JDXzJfU1RSRUFNUyhyYXRlKSA9PSAxKQorCQkJCXJjW2ldLmZsYWdz
IHw9IElFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfU1RCQzsKKwkJCQorCQkJLyoKKwkJCSAqIER1YWwg
LyBUcmlwbGUgc3RyZWFtIHJhdGU/CisJCQkgKi8KKwkJCWlmIChIVF9SQ18yX1NUUkVBTVMocmF0
ZSkgPT0gMikKKwkJCQlyY1tpXS5mbGFncyB8PSBJRUVFODAyMTFfUkFURUNUTF9GTEFHX0RTOwor
CQkJZWxzZSBpZiAoSFRfUkNfMl9TVFJFQU1TKHJhdGUpID09IDMpCisJCQkJcmNbaV0uZmxhZ3Mg
fD0gSUVFRTgwMjExX1JBVEVDVExfRkxBR19UUzsKKworCQkJLyoKKwkJCSAqIENhbGN1bGF0ZSB0
aGUgbWF4aW11bSA0bXMgZnJhbWUgbGVuZ3RoIGJhc2VkCisJCQkgKiBvbiB0aGUgTUNTIHJhdGUs
IFNHSSBhbmQgY2hhbm5lbCB3aWR0aCBmbGFncy4KKwkJCSAqLworCQkJaWYgKEhUX1JDXzJfTUNT
KHJhdGUpIDwgMzIpIHsKKwkJCQlpbnQgajsKKwkJCQlpZiAocmNbaV0uZmxhZ3MgJiBJRUVFODAy
MTFfUkFURUNUTF9GTEFHX0NXNDApIHsKKwkJCQkJaWYgKHJjW2ldLmZsYWdzICYgSUVFRTgwMjEx
X1JBVEVDVExfRkxBR19TR0kpCisJCQkJCQlqID0gTUNTX0hUNDBfU0dJOworCQkJCQllbHNlCisJ
CQkJCQlqID0gTUNTX0hUNDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHJjW2ldLmZsYWdzICYg
SUVFRTgwMjExX1JBVEVDVExfRkxBR19TR0kpCisJCQkJCQlqID0gTUNTX0hUMjBfU0dJOworCQkJ
CQllbHNlCisJCQkJCQlqID0gTUNTX0hUMjA7CisJCQkJfQorCQkJCXJjW2ldLm1heDRtc2ZyYW1l
bGVuID0KKwkJCQkgICAgbWF4XzRtc19mcmFtZWxlbltqXVtIVF9SQ18yX01DUyhyYXRlKV07CisJ
CQl9CisJCX0gZWxzZSB7CisJCQlyY1tpXS5tYXg0bXNmcmFtZWxlbiA9IDA7CisKKwkJCS8qCisJ
CQkgKiBPbmx5IGVuYWJsZSBzaG9ydCBwcmVhbWJsZSBmb3IgbGVnYWN5IHJhdGVzCisJCQkgKi8K
KwkJCWlmIChyY19pbmZvLT5pcmlfZmxhZ3MgJiBJRUVFODAyMTFfUkFURUNUTF9JTkZPX1NQKQor
CQkJCXJjW2ldLmZsYWdzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfU1A7CisJCX0KKworCQkv
KgorCQkgKiBDYWxjdWxhdGUgdGhlIG1heGltdW0gVFggcG93ZXIgY2FwIGZvciB0aGUgY3VycmVu
dAorCQkgKiBub2RlLiAKKwkJICogUmF0ZSBjb250cm9sIGFsZ28gY2FuJ3QgY29udHJvbCBUWCBw
b3dlciBieSBub3cuCisJCSAqLworCQlyY1tpXS50eF9wb3dlcl9jYXAgPSBpZWVlODAyMTFfZ2V0
X25vZGVfdHhwb3dlcihuaSk7CisJCQorCX0KKwlJRUVFODAyMTFfTk9URShuaS0+bmlfdmFwLCBJ
RUVFODAyMTFfTVNHX1JBVEVDVEwsIG5pLAorCSAgICAiJXM6IGZsYWdzOiByY1swXToweCUwOHgs
IHJjWzFdOjB4JTA4eCwgIgorCQkicmNbMl06MHglMDh4LCByY1szXToweCUwOHhcbiIsIF9fZnVu
Y19fLCAKKwkJcmNbMF0uZmxhZ3MsIHJjWzFdLmZsYWdzLCByY1syXS5mbGFncywgcmNbM10uZmxh
Z3MpOworfQorCkluZGV4OiBuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIG5ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsLmgJKHJldmlzaW9uIDI1NDgyNikKKysrIG5l
dDgwMjExL2llZWU4MDIxMV9yYXRlY3RsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKi0KICAqIENvcHlyaWdodCAoYykgMjAxMCBSdWkgUGF1bG8gPHJwYXVsb0BGcmVlQlNELm9y
Zz4KKyAqIENvcHlyaWdodCAoYykgMjAxMyBDaGVuY2hvbmcgUWluIDxjY3FpbkBGcmVlQlNELm9y
Zz4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNCw2ICsy
NSw4IEBACiAgKgogICogJEZyZWVCU0QkCiAgKi8KKyNpZm5kZWYgX05FVDgwMjExX0lFRUU4MDIx
MV9SQVRFQ1RMX0hfCisjZGVmaW5lIF9ORVQ4MDIxMV9JRUVFODAyMTFfUkFURUNUTF9IXwogCiBl
bnVtIGllZWU4MDIxMV9yYXRlYWxncyB7CiAJSUVFRTgwMjExX1JBVEVDVExfQU1SUgkJPSAwLApA
QCAtMzcsMjggKzQwLDExNSBAQAogI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9UWF9TVUNDRVNT
CTEKICNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfVFhfRkFJTFVSRQkwCiAKKyNkZWZpbmUJSUVF
RTgwMjExX1JBVEVDVExfVFJVRQkJMQorI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9GQUxTRQkJ
MAorCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX05VTQkJNAorI2RlZmluZQlJRUVFODAyMTFf
UkFURUNUTF9UWE1BWFRSWQkxMQorCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfRFMJ
CTB4MDEJLyogZHVhbC1zdHJlYW0gcmF0ZSAqLworI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9G
TEFHX0NXNDAJCTB4MDIJLyogdXNlIEhUNDAgKi8KKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExf
RkxBR19TR0kJCTB4MDQJLyogdXNlIHNob3J0LUdJICovCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRF
Q1RMX0ZMQUdfSFQJCTB4MDgJLyogdXNlIEhUICovCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RM
X0ZMQUdfUlRTQ1RTCTB4MTAJLyogZW5hYmxlIFJUUy9DVFMgcHJvdGVjdGlvbiAqLworI2RlZmlu
ZQlJRUVFODAyMTFfUkFURUNUTF9GTEFHX1NUQkMJCTB4MjAJLyogZW5hYmxlIFNUQkMgKi8KKyNk
ZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfRkxBR19UUwkJMHg0MAkvKiB0cmlwbGUtc3RyZWFtIHJh
dGUgKi8KKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfRkxBR19TUAkJMHg4MAkvKiBzaG9ydCBw
cmVhbWJsZSAqLworCisvKiBIYXJkd2FyZSBDQVBzIG9mZmVyZWQgdG8gcmF0ZSBjb250cm9sIGFs
Z28gKi8KKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfQ0FQX01SUgkJCTB4MDEJLyogc3VwcG9y
dCBNUlIgKi8KKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfQ0FQX01SUlBST1QJCTB4MDIJLyog
c3VwcG9ydCBNUlIgKyBwcm90ZWN0ICovCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0NBUF9N
VUxUWENIQUlOCTB4MDQJLyogaGFzIG1vcmUgdGhhbiAxIHR4Y2hhaW4gKi8KKworI2RlZmluZSBJ
U19WQVBfSFQodmFwKQkoKHZhcCktPml2X2h0Y2FwcyAmIElFRUU4MDIxMV9IVENfSFQpCisjZGVm
aW5lIElTX0hUX1JBVEUoX3JhdGUpICAgKChfcmF0ZSkgJiAweDgwKQorI2RlZmluZSBIVF9SQ18y
X01DUyhfcmMpICAgICgoX3JjKSAmIDB4N2YpCisjZGVmaW5lIEhUX1JDXzJfU1RSRUFNUyhfcmMp
ICAgICgoKChfcmMpICYgMHg3OCkgPj4gMykgKyAxKQorCitleHRlcm4gaW50IG1heF80bXNfZnJh
bWVsZW5bNF1bMzJdOworCitzdHJ1Y3QgaWVlZTgwMjExX3JjX3NlcmllcyB7CisJdWludDhfdCBy
aXg7CQkvKiByYXRldGFibGUgaW5kZXgsIG5vdCByYXRlIGNvZGUgKi8KKwl1aW50OF90IHJhdGVj
b2RlOwkvKiBoYXJkd2FyZSByYXRlIGNvZGUgKi8KKwl1aW50OF90IHRyaWVzOworCXVpbnQ4X3Qg
dHhfcG93ZXJfY2FwOworCXVpbnQxNl90IGZsYWdzOworCXVpbnQxNl90IG1heDRtc2ZyYW1lbGVu
OworfTsKKworc3RydWN0IGllZWU4MDIxMV9yY19pbmZvIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3Jj
X3NlcmllcyBpcmlfcmNbSUVFRTgwMjExX1JBVEVDVExfTlVNXTsKKwl1aW50MzJfdCBpcmlfZnJh
bWVsZW47CisJdWludDE2X3QgaXJpX2ZsYWdzOwkJCS8qIFNlZSBiZWxvdyAqLworCXVpbnQxNl90
IGlyaV9tYXhhZ2dyc2l6ZTsJLyogTWF4aW11bSBhZ2dyZWdhdGUgc2l6ZSAqLworCisJLyogVFgg
aW5mbyAqLworCXVpbnQ4X3QgaXJpX3R4Y250OwkJCS8qIFRYIGNvdW50ICovCisJdWludDhfdCBp
cmlfZmFpbGNudDsJCS8qIFRYIHJldHJ5LWZhaWwgY291bnQgKi8KKwl1aW50OF90IGlyaV9va2Nu
dDsJCQkvKiBUWCBvayB3aXRoIG9yIHdpdGhvdXQgcmV0cnkgKi8KKwl1aW50OF90IGlyaV9yZXRy
eWNudDsJCS8qIFRYIHJldHJ5IGNvdW50ICovCisJdWludDhfdCBpcmlfc2hvcnRyZXRyeTsKKwl1
aW50OF90IGlyaV9sb25ncmV0cnk7CisJdWludDhfdCBpcmlfZmluYWx0c2k7CisJdWludDhfdCBp
cmlfdHhyYXRlOwkJCS8qIEhXIHR4IHJhdGUgKi8KK307CisKKy8qIGllZWU4MDIxMV9yY19pbmZv
IGZsYWdzICovCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0lORk9fU1AJCTB4MDEJLyogc2hv
cnQgcHJlYW1ibGUgKi8KKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dSCQkweDAy
CS8qIGFnZ3JlZ2F0aW9uIHNjZW5hcmlvICovCisKKyNkZWZpbmUgTkVUODAyMTFfVEFHX1JBVEVD
VEwgICAxICAgLyogbmV0ODAyMTEgcmF0ZWN0bCBzdGF0ZSAqLworCisvKgorICogbmV0ODAyMTEg
cmF0ZWN0bCBzdGF0aXN0aWNzLiAKKyAqIHBlciB2YXAgcmF0ZWN0bCBzZWV0aW5nIG11c3Qgc3Rh
cnQgd2l0aCB0aGlzIGNvbW1vbiBzdGF0ZS4KKyAqLworc3RydWN0IGllZWU4MDIxMV9yY19zdGF0
IHsKKwl1aW50MzJfdCBpcnNfY2FwYWJpbGl0aWVzOwkJLyogaGFyZHdhcmUgY2FwYWJpbGl0aWVz
IG9mZmVyZWQgdG8gcmMgKi8KKworCS8qIHJhdGVjdGwgc3RhdGlzdGljcyAqLworCXVpbnQzMl90
IGlyc190eGNudDsKKwl1aW50MzJfdCBpcnNfZmFpbGNudDsKKwl1aW50MzJfdCBpcnNfcmV0cnlj
bnQ7CisJdWludDMyX3QgaXJzX3Nob3J0cmV0cnk7CisJdWludDMyX3QgaXJzX2xvbmdyZXRyeTsK
K307CisKKyNkZWZpbmUgSUVFRTgwMjExX1JBVEVDVExfU1RBVChfdmFwKSBcCisJKChzdHJ1Y3Qg
aWVlZTgwMjExX3JjX3N0YXQgKikoKF92YXApLT5pdl9ycykpCisKKyNkZWZpbmUJSUVFRTgwMjEx
X1JBVEVDVExfSEFTQ0FQX01SUihfdmFwKSBcCisJKElFRUU4MDIxMV9SQVRFQ1RMX1NUQVQoX3Zh
cCktPmlyc19jYXBhYmlsaXRpZXMgJiBJRUVFODAyMTFfUkFURUNUTF9DQVBfTVJSKQorI2RlZmlu
ZQlJRUVFODAyMTFfUkFURUNUTF9IQVNDQVBfTVJSUFJPVChfdmFwKSBcCisJKElFRUU4MDIxMV9S
QVRFQ1RMX1NUQVQoX3ZhcCktPmlyc19jYXBhYmlsaXRpZXMgJiBJRUVFODAyMTFfUkFURUNUTF9D
QVBfTVJSUFJPVCkKKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01VTFRYQ0hBSU4o
X3ZhcCkgXAorCShJRUVFODAyMTFfUkFURUNUTF9TVEFUKF92YXApLT5pcnNfY2FwYWJpbGl0aWVz
ICYgSUVFRTgwMjExX1JBVEVDVExfQ0FQX01VTFRYQ0hBSU4pCisKIHN0cnVjdCBpZWVlODAyMTFf
cmF0ZWN0bCB7CiAJY29uc3QgY2hhciAqaXJfbmFtZTsKIAlpbnQJKCppcl9hdHRhY2gpKGNvbnN0
IHN0cnVjdCBpZWVlODAyMTF2YXAgKik7CiAJdm9pZAkoKmlyX2RldGFjaCkoY29uc3Qgc3RydWN0
IGllZWU4MDIxMXZhcCAqKTsKLQl2b2lkCSgqaXJfaW5pdCkoc3RydWN0IGllZWU4MDIxMXZhcCAq
KTsKKwl2b2lkCSgqaXJfaW5pdCkoc3RydWN0IGllZWU4MDIxMXZhcCAqLCB1aW50MzJfdCk7CiAJ
dm9pZAkoKmlyX2RlaW5pdCkoc3RydWN0IGllZWU4MDIxMXZhcCAqKTsKIAl2b2lkCSgqaXJfbm9k
ZV9pbml0KShzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKik7CiAJdm9pZAkoKmlyX25vZGVfZGVpbml0
KShzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKik7CiAJaW50CSgqaXJfcmF0ZSkoc3RydWN0IGllZWU4
MDIxMV9ub2RlICosIHZvaWQgKiwgdWludDMyX3QpOworCXZvaWQJKCppcl9yYXRlcykoc3RydWN0
IGllZWU4MDIxMV9ub2RlICosIHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqKTsKIAl2b2lkCSgq
aXJfdHhfY29tcGxldGUpKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKiwKLQkgICAgCQkJICBj
b25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKiwgaW50LAotCSAgICAJCQkgIHZvaWQgKiwgdm9p
ZCAqKTsKKwkgICAgCQkJICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKiwgc3RydWN0IGll
ZWU4MDIxMV9yY19pbmZvICopOwogCXZvaWQJKCppcl90eF91cGRhdGUpKGNvbnN0IHN0cnVjdCBp
ZWVlODAyMTF2YXAgKiwKIAkgICAgCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICosCiAJ
ICAgIAkJCXZvaWQgKiwgdm9pZCAqLCB2b2lkICopOwogCXZvaWQJKCppcl9zZXRpbnRlcnZhbCko
Y29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqLCBpbnQpOworCXZvaWQJKCppcl9zdGF0cykoY29u
c3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqKTsKIH07CiAKIHZvaWQJaWVlZTgwMjExX3JhdGVjdGxf
cmVnaXN0ZXIoaW50LCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGVjdGwgKik7CiB2b2lkCWll
ZWU4MDIxMV9yYXRlY3RsX3VucmVnaXN0ZXIoaW50KTsKLXZvaWQJaWVlZTgwMjExX3JhdGVjdGxf
aW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICopOwordm9pZAlpZWVlODAyMTFfcmF0ZWN0bF9pbml0
KHN0cnVjdCBpZWVlODAyMTF2YXAgKiwgdWludDMyX3QpOwogdm9pZAlpZWVlODAyMTFfcmF0ZWN0
bF9zZXQoc3RydWN0IGllZWU4MDIxMXZhcCAqLCBpbnQpOwordm9pZAlpZWVlODAyMTFfcmF0ZWN0
bF9jb21wbGV0ZV9yY2ZsYWdzKHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqLCAKKwkJCQkJCXN0cnVj
dCBpZWVlODAyMTFfcmNfaW5mbyopOwogCiBNQUxMT0NfREVDTEFSRShNXzgwMjExX1JBVEVDVEwp
OwogCkBAIC03NCw2ICsxNjQsOCBAQAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9
IG5pLT5uaV92YXA7CiAKIAl2YXAtPml2X3JhdGUtPmlyX25vZGVfaW5pdChuaSk7CisJSUVFRTgw
MjExX0RQUklOVEYodmFwLCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsCisJCQkiJXM6IG5ldDgwMjEx
IHJhdGVjdGwgbm9kZSBpbml0ZWQuXG4iLCBfX2Z1bmNfXyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9f
aW5saW5lCkBAIC04Miw2ICsxNzQsOCBAQAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZh
cCA9IG5pLT5uaV92YXA7CiAKIAl2YXAtPml2X3JhdGUtPmlyX25vZGVfZGVpbml0KG5pKTsKKwlJ
RUVFODAyMTFfRFBSSU5URih2YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwKKwkJCSIlczogbmV0
ODAyMTEgcmF0ZWN0bCBub2RlIGRlaW5pdGVkLlxuIiwgX19mdW5jX18pOwogfQogCiBzdGF0aWMg
aW50IF9faW5saW5lCkBAIC05MywxMCArMTg3LDI2IEBACiB9CiAKIHN0YXRpYyB2b2lkIF9faW5s
aW5lCitpZWVlODAyMTFfcmF0ZWN0bF9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBz
dHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2luZm8pCit7CisJY29uc3Qgc3RydWN0IGllZWU4
MDIxMXZhcCAqdmFwID0gbmktPm5pX3ZhcDsKKworCWlmIChyY19pbmZvLT5pcmlfZmxhZ3MgJiBJ
RUVFODAyMTFfUkFURUNUTF9JTkZPX0FHR1IpIAorCQlyY19pbmZvLT5pcmlfZnJhbWVsZW4gPSAw
OworCisJSUVFRTgwMjExX0RQUklOVEYodmFwLCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsCisJCQki
JXM6IGZpbmQgcmF0ZSBzZXRzIGZvciAlc2FnZ3JlZ2F0aW9uIHNjZW5hcmlvLlxuIiwgX19mdW5j
X18sIAorCQkJKHJjX2luZm8tPmlyaV9mbGFncyAmIElFRUU4MDIxMV9SQVRFQ1RMX0lORk9fQUdH
Uik/ICIiIDogIm5vbi0iKTsKKworCXZhcC0+aXZfcmF0ZS0+aXJfcmF0ZXMobmksIHJjX2luZm8p
OworCWllZWU4MDIxMV9yYXRlY3RsX2NvbXBsZXRlX3JjZmxhZ3MobmksIHJjX2luZm8pOworfQor
CitzdGF0aWMgdm9pZCBfX2lubGluZQogaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUoY29u
c3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLAotICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFf
bm9kZSAqbmksIGludCBzdGF0dXMsIHZvaWQgKmFyZzEsIHZvaWQgKmFyZzIpCisgICAgY29uc3Qg
c3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19p
bmZvKQogewotCXZhcC0+aXZfcmF0ZS0+aXJfdHhfY29tcGxldGUodmFwLCBuaSwgc3RhdHVzLCBh
cmcxLCBhcmcyKTsKKwl2YXAtPml2X3JhdGUtPmlyX3R4X2NvbXBsZXRlKHZhcCwgbmksIHJjX2lu
Zm8pOwogfQogCiBzdGF0aWMgdm9pZCBfX2lubGluZQpAQCAtMTE1LDMgKzIyNSwxMDggQEAKIAkJ
cmV0dXJuOwogCXZhcC0+aXZfcmF0ZS0+aXJfc2V0aW50ZXJ2YWwodmFwLCBtc2Vjcyk7CiB9CisK
K3N0YXRpYyB2b2lkIF9faW5saW5lCitpZWVlODAyMTFfcmF0ZWN0bF9zdGF0cyhjb25zdCBzdHJ1
Y3QgaWVlZTgwMjExdmFwICp2YXApCit7CisJcHJpbnRmKCJcblslc106IG5ldDgwMjExIHJhdGVj
dGwgc3RhdGlzdGljcyAoJXMpXG4iLCAKKwkJCXZhcC0+aXZfaWZwLT5pZl94bmFtZSwgdmFwLT5p
dl9yYXRlLT5pcl9uYW1lKTsKKwlpZiAodmFwLT5pdl9yYXRlLT5pcl9zdGF0cyA9PSBOVUxMKQor
CQlyZXR1cm47CisJdmFwLT5pdl9yYXRlLT5pcl9zdGF0cyh2YXApOworfQorCitzdGF0aWMgaW50
IF9faW5saW5lCitpZWVlODAyMTFfcmF0ZWN0bF9oYXNjYXBfY3c0MChjb25zdCBzdHJ1Y3QgaWVl
ZTgwMjExX25vZGUgKm5pKQoreworCXJldHVybiBuaS0+bmlfY2h3ID09IDQwOworfQorCitzdGF0
aWMgaW50IF9faW5saW5lCitpZWVlODAyMTFfcmF0ZWN0bF9oYXNjYXBfc2hvcnRnaShjb25zdCBz
dHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pKQoreworCXN0cnVjdCBpZWVlODAyMTFjb20gKmljID0g
bmktPm5pX2ljOworCisJaWYgKG5pLT5uaV9jaHcgPT0gNDAgJiYKKwkJaWMtPmljX2h0Y2FwcyAm
IElFRUU4MDIxMV9IVENBUF9TSE9SVEdJNDAgJiYKKwkJbmktPm5pX2h0Y2FwICYgSUVFRTgwMjEx
X0hUQ0FQX1NIT1JUR0k0MCkKKwkJcmV0dXJuIElFRUU4MDIxMV9SQVRFQ1RMX1RSVUU7CisKKwlp
ZiAobmktPm5pX2NodyA9PSAyMCAmJgorCQlpYy0+aWNfaHRjYXBzICYgSUVFRTgwMjExX0hUQ0FQ
X1NIT1JUR0kyMCAmJgorCQluaS0+bmlfaHRjYXAgJiBJRUVFODAyMTFfSFRDQVBfU0hPUlRHSTIw
KQorCQlyZXR1cm4gSUVFRTgwMjExX1JBVEVDVExfVFJVRTsKKworCXJldHVybiBJRUVFODAyMTFf
UkFURUNUTF9GQUxTRTsKK30KKworc3RhdGljIGludCBfX2lubGluZQoraWVlZTgwMjExX3JhdGVj
dGxfaGFzY2FwX3N0YmMoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSkKK3sKKwlzdHJ1
Y3QgaWVlZTgwMjExY29tICppYyA9IG5pLT5uaV9pYzsKKworCWlmIChpYy0+aWNfaHRjYXBzICYg
SUVFRTgwMjExX0hUQ0FQX1RYU1RCQyAmJgorCQluaS0+bmlfaHRjYXAgJiBJRUVFODAyMTFfSFRD
QVBfUlhTVEJDXzFTVFJFQU0gJiYKKwkJSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01VTFRYQ0hB
SU4obmktPm5pX3ZhcCkpCisJCXJldHVybiBJRUVFODAyMTFfUkFURUNUTF9UUlVFOworCQorCXJl
dHVybiBJRUVFODAyMTFfUkFURUNUTF9GQUxTRTsKK30KKworc3RhdGljIGludCBfX2lubGluZQor
aWVlZTgwMjExX3JhdGVjdGxfbm9kZV9pczExbihjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUg
Km5pKQoreworCWlmIChuaS0+bmlfY2hhbiA9PSBOVUxMKQorCQlyZXR1cm4gKDApOworCWlmIChu
aS0+bmlfY2hhbiA9PSBJRUVFODAyMTFfQ0hBTl9BTllDKQorCQlyZXR1cm4gKDApOworCXJldHVy
biAoSUVFRTgwMjExX0lTX0NIQU5fSFQobmktPm5pX2NoYW4pKTsKK30KKworX19pbmxpbmUgc3Rh
dGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZXNldCAqCitpZWVlODAyMTFfcmF0ZWN0bF9n
ZXRfcmF0ZXNldChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pKQoreworCWNvbnN0IHN0
cnVjdCBpZWVlODAyMTFfcmF0ZXNldCAqcnMgPSBOVUxMOworCS8qIDExbiBvciBub3Q/IFBpY2sg
dGhlIHJpZ2h0IHJhdGVzZXQgKi8KKwlpZiAoaWVlZTgwMjExX3JhdGVjdGxfbm9kZV9pczExbihu
aSkpIHsKKwkJSUVFRTgwMjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19SQVRFQ1RM
LCBuaSwKKwkJCQkiJXM6IDExbiBub2RlIiwgX19mdW5jX18pOworCQlycyA9IChzdHJ1Y3QgaWVl
ZTgwMjExX3JhdGVzZXQgKikgJm5pLT5uaV9odHJhdGVzOworCX0gZWxzZSB7CisJCUlFRUU4MDIx
MV9OT1RFKG5pLT5uaV92YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJCQkgICAgIiVz
OiBub24tMTFuIG5vZGUiLCBfX2Z1bmNfXyk7CisJCXJzID0gJm5pLT5uaV9yYXRlczsKKwl9CisJ
cmV0dXJuIHJzOworfQorCitzdGF0aWMgdm9pZCBfX2lubGluZQoraWVlZTgwMjExX3JhdGVjdGxf
dXBkYXRlX3N0YXQoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLAorCQljb25zdCBzdHJ1
Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2luZm8pCit7CisJc3RydWN0IGllZWU4MDIxMV9yY19z
dGF0ICogaXJzID0gSUVFRTgwMjExX1JBVEVDVExfU1RBVCh2YXApOworCWlycy0+aXJzX3R4Y250
ICs9IHJjX2luZm8tPmlyaV90eGNudDsKKwlpcnMtPmlyc19mYWlsY250ICs9IHJjX2luZm8tPmly
aV9mYWlsY250OworCWlycy0+aXJzX3JldHJ5Y250ICs9IHJjX2luZm8tPmlyaV9yZXRyeWNudDsK
KwlpcnMtPmlyc19zaG9ydHJldHJ5ICs9IHJjX2luZm8tPmlyaV9zaG9ydHJldHJ5OworCWlycy0+
aXJzX2xvbmdyZXRyeSArPSByY19pbmZvLT5pcmlfbG9uZ3JldHJ5OworfQorCitzdGF0aWMgdm9p
ZCBfX2lubGluZQoraWVlZTgwMjExX3JhdGVjdGxfcmNfaW5mb19zZXQoc3RydWN0IGllZWU4MDIx
MV9yY19pbmZvICpyY19pbmZvLAorCQl1aW50OF90IHR4Y250LCB1aW50OF90IGZhaWxjbnQsIHVp
bnQzMl90IGZyYW1lbGVuLAorCQl1aW50OF90IHNob3J0cmV0cnksIHVpbnQ4X3QgbG9uZ3JldHJ5
LAorCQl1aW50OF90IGZpbmFsdHNpLCB1aW50OF90IHR4cmF0ZSkKK3sKKwlyY19pbmZvLT5pcmlf
dHhjbnQgPSB0eGNudDsKKwlyY19pbmZvLT5pcmlfZmFpbGNudCA9IGZhaWxjbnQ7CisJcmNfaW5m
by0+aXJpX29rY250ID0gdHhjbnQgLSBmYWlsY250OworCXJjX2luZm8tPmlyaV9mcmFtZWxlbiA9
IGZyYW1lbGVuOworCXJjX2luZm8tPmlyaV9zaG9ydHJldHJ5ID0gc2hvcnRyZXRyeTsKKwlyY19p
bmZvLT5pcmlfbG9uZ3JldHJ5ID0gbG9uZ3JldHJ5OworCXJjX2luZm8tPmlyaV9yZXRyeWNudCA9
IHNob3J0cmV0cnkgKyBsb25ncmV0cnk7CisJcmNfaW5mby0+aXJpX2ZpbmFsdHNpID0gZmluYWx0
c2k7CisJcmNfaW5mby0+aXJpX3R4cmF0ZSA9IHR4cmF0ZTsKK30KKworI2VuZGlmCkluZGV4OiBu
ZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bF9ub25lLmMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbmV0ODAyMTEv
aWVlZTgwMjExX3JhdGVjdGxfbm9uZS5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBuZXQ4MDIxMS9p
ZWVlODAyMTFfcmF0ZWN0bF9ub25lLmMJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEwICs0NCwyNiBA
QAogCiAjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3Zhci5oPgogI2luY2x1ZGUgPG5ldDgw
MjExL2llZWU4MDIxMV9yYXRlY3RsLmg+CisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3Jh
dGVjdGxfbm9uZS5oPgogCiBzdGF0aWMgdm9pZAotbm9uZV9pbml0KHN0cnVjdCBpZWVlODAyMTF2
YXAgKnZhcCkKK25vbmVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIHVpbnQzMl90IGNh
cGFiaWxpdGllcykKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5vbmU7CisKKwlLQVNTRVJU
KHZhcC0+aXZfcnMgPT0gTlVMTCwgKCIlcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMiLCBfX2Z1bmNf
XykpOworCisJbm9uZSA9IHZhcC0+aXZfcnMgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAy
MTFfbm9uZSksCisJICAgIE1fODAyMTFfUkFURUNUTCwgTV9OT1dBSVR8TV9aRVJPKTsKKwlpZiAo
bm9uZSA9PSBOVUxMKSB7CisJCWlmX3ByaW50Zih2YXAtPml2X2lmcCwgImNvdWxkbid0IGFsbG9j
IHJhdGVjdGwgc3RydWN0dXJlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN0cnVjdCBpZWVlODAy
MTFfcmNfc3RhdCAqIGlycyA9IElFRUU4MDIxMV9SQVRFQ1RMX1NUQVQodmFwKTsKKwlpcnMtPmly
c19jYXBhYmlsaXRpZXMgPSBjYXBhYmlsaXRpZXM7CisKKwkvKiAuLi4gKi8KIH0KIAogc3RhdGlj
IHZvaWQKQEAgLTU5LDYgKzc1LDI1IEBACiBzdGF0aWMgdm9pZAogbm9uZV9ub2RlX2luaXQoc3Ry
dWN0IGllZWU4MDIxMV9ub2RlICpuaSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAgPSBu
aS0+bmlfdmFwOworCXN0cnVjdCBpZWVlODAyMTFfbm9uZSAqbm9uZSA9IHZhcC0+aXZfcnM7CisJ
c3RydWN0IGllZWU4MDIxMV9ub25lX25vZGUgKm5vbjsKKworCWlmIChuaS0+bmlfcmN0bHMgPT0g
TlVMTCkgeworCQluaS0+bmlfcmN0bHMgPSBub24gPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVl
ODAyMTFfbm9uZV9ub2RlKSwKKwkJICAgIE1fODAyMTFfUkFURUNUTCwgTV9OT1dBSVR8TV9aRVJP
KTsKKwkJaWYgKG5vbiA9PSBOVUxMKSB7CisJCQlpZl9wcmludGYodmFwLT5pdl9pZnAsICJjb3Vs
ZG4ndCBhbGxvYyBwZXItbm9kZSByYXRlY3RsICIKKwkJCSAgICAic3RydWN0dXJlXG4iKTsKKwkJ
CXJldHVybjsKKwkJfQorCX0gZWxzZQorCQlub24gPSBuaS0+bmlfcmN0bHM7CisKKwlub24tPm5v
bl9ub25lID0gbm9uZTsKKworCS8qIC4uLiAqLworCQogCW5pLT5uaV90eHJhdGUgPSBuaS0+bmlf
cmF0ZXMucnNfcmF0ZXNbMF0gJiBJRUVFODAyMTFfUkFURV9WQUw7CiB9CiAKQEAgLTc4LDggKzEx
Myw3IEBACiAKIHN0YXRpYyB2b2lkCiBub25lX3R4X2NvbXBsZXRlKGNvbnN0IHN0cnVjdCBpZWVl
ODAyMTF2YXAgKnZhcCwKLSAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBpbnQg
b2ssCi0gICAgdm9pZCAqYXJnMSwgdm9pZCAqYXJnMiBfX3VudXNlZCkKKyAgICBjb25zdCBzdHJ1
Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2luZm8p
CiB7CiB9CiAKSW5kZXg6IG5ldDgwMjExL2llZWU4MDIxMV9yY19zYW1wbGUuYwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBuZXQ4MDIxMS9pZWVlODAyMTFfcmNfc2FtcGxlLmMJKHJldmlzaW9uIDApCisrKyBuZXQ4
MDIxMS9pZWVlODAyMTFfcmNfc2FtcGxlLmMJKHJldmlzaW9uIDI1NjgyNSkKQEAgLTAsMCArMSwx
MTQxIEBACisvKiAkRnJlZUJTRDogaGVhZC9zeXMvZGV2L2F0aC9hdGhfcmF0ZS9zYW1wbGUvc2Ft
cGxlLmMgMjQ4NTczIDIwMTMtMDItMjcgMDQ6MzM6MDZaIGFkcmlhbiAkKi8KKworLyotCisgKiBD
b3B5cmlnaHQgKGMpIDIwMDUgSm9obiBCaWNrZXQKKyAqIENvcHlyaWdodCAoYykgMjAxMyBDaGVu
Y2hvbmcgUWluIDxjY3FpbkBGcmVlQlNELm9yZz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBg
QVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2luY2x1ZGUg
Im9wdF93bGFuLmgiCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMva2Vy
bmVsLmg+CisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4K
KyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRl
IDxuZXQvaWZfbWVkaWEuaD4KKworI2lmZGVmIElORVQKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+
CisjaW5jbHVkZSA8bmV0aW5ldC9pZl9ldGhlci5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQ4
MDIxMS9pZWVlODAyMTFfdmFyLmg+CisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX2h0Lmg+
CisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwuaD4KKyNpbmNsdWRlIDxuZXQ4
MDIxMS9pZWVlODAyMTFfcmNfc2FtcGxlLmg+CisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjEx
X3JjX3NhbXBsZV90eHNjaGVkLmg+CisKK3N0YXRpYyB2b2lkCXNhbXBsZV9pbml0KHN0cnVjdCBp
ZWVlODAyMTF2YXAgKiwgdWludDMyX3QpOworc3RhdGljIHZvaWQJc2FtcGxlX2RlaW5pdChzdHJ1
Y3QgaWVlZTgwMjExdmFwICopOworc3RhdGljIHZvaWQJc2FtcGxlX25vZGVfaW5pdChzdHJ1Y3Qg
aWVlZTgwMjExX25vZGUgKik7CitzdGF0aWMgdm9pZAlzYW1wbGVfbm9kZV9kZWluaXQoc3RydWN0
IGllZWU4MDIxMV9ub2RlICopOworc3RhdGljIGludAlzYW1wbGVfcmF0ZShzdHJ1Y3QgaWVlZTgw
MjExX25vZGUgKiwgdm9pZCAqLCB1aW50MzJfdCk7CitzdGF0aWMgdm9pZAlzYW1wbGVfdHhfY29t
cGxldGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqLAorICAgIAkJCWNvbnN0IHN0cnVjdCBp
ZWVlODAyMTFfbm9kZSAqLCBpbnQsIAorCQkJdm9pZCAqLCB2b2lkICopOworc3RhdGljIHZvaWQJ
c2FtcGxlX3R4X3VwZGF0ZShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsCisJCQljb25z
dCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKiwgdm9pZCAqLCB2b2lkICosIHZvaWQgKik7CitzdGF0
aWMgdm9pZAlzYW1wbGVfc2V0aW50ZXJ2YWwoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqLCBp
bnQpOworCisvKiBudW1iZXIgb2YgcmVmZXJlbmNlcyBmcm9tIG5ldDgwMjExIGxheWVyICovCitz
dGF0aWMJaW50IG5yZWZzID0gMDsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0
ZWN0bCBzYW1wbGUgPSB7CisJLmlyX25hbWUJPSAic2FtcGxlIiwKKwkuaXJfYXR0YWNoCT0gTlVM
TCwKKwkuaXJfZGV0YWNoCT0gTlVMTCwKKwkuaXJfaW5pdAk9IHNhbXBsZV9pbml0LAorCS5pcl9k
ZWluaXQJPSBzYW1wbGVfZGVpbml0LAorCS5pcl9ub2RlX2luaXQJPSBzYW1wbGVfbm9kZV9pbml0
LAorCS5pcl9ub2RlX2RlaW5pdAk9IHNhbXBsZV9ub2RlX2RlaW5pdCwKKwkuaXJfcmF0ZQk9IHNh
bXBsZV9yYXRlLAorCS5pcl9yYXRlcwk9IHNhbXBsZV9yYXRlcywKKwkuaXJfdHhfY29tcGxldGUJ
PSBzYW1wbGVfdHhfY29tcGxldGUsCisJLmlyX3R4X3VwZGF0ZQk9IHNhbXBsZV90eF91cGRhdGUs
CisJLmlyX3NldGludGVydmFsCT0gc2FtcGxlX3NldGludGVydmFsLAorfTsKK0lFRUU4MDIxMV9S
QVRFQ1RMX01PRFVMRShzYW1wbGUsIDEpOworSUVFRTgwMjExX1JBVEVDVExfQUxHKHNhbXBsZSwg
SUVFRTgwMjExX1JBVEVDVExfU0FNUExFLCBzYW1wbGUpOworCitzdGF0aWMgdm9pZAorc2FtcGxl
X2luaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLCB1aW50MzJfdCBjYXBhYmlsaXRpZXMpCit7
CisJc3RydWN0IGllZWU4MDIxMV9zYW1wbGUgKnNhbXBsZTsKKworCUtBU1NFUlQodmFwLT5pdl9y
cyA9PSBOVUxMLCAoIiVzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIsIF9fZnVuY19fKSk7CisKKwlz
YW1wbGUgPSB2YXAtPml2X3JzID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3NhbXBs
ZSksCisJICAgIE1fODAyMTFfUkFURUNUTCwgTV9OT1dBSVR8TV9aRVJPKTsKKwlpZiAoc2FtcGxl
ID09IE5VTEwpIHsKKwkJaWZfcHJpbnRmKHZhcC0+aXZfaWZwLCAiY291bGRuJ3QgYWxsb2MgcmF0
ZWN0bCBzdHJ1Y3R1cmVcbiIpOworCQlyZXR1cm47CisJfQorCisJc3RydWN0IGllZWU4MDIxMV9y
Y19zdGF0ICogaXJzID0gSUVFRTgwMjExX1JBVEVDVExfU1RBVCh2YXApOworCWlycy0+aXJzX2Nh
cGFiaWxpdGllcyA9IGNhcGFiaWxpdGllczsKKworCXNhbXBsZS0+c2FtcGxlX3Ntb290aGluZ19y
YXRlID0gNzU7CQkvKiBld21hIHBlcmNlbnRhZ2UgKFswLi45OV0pICovCisJc2FtcGxlLT5zYW1w
bGVfc21vb3RoaW5nX21pbnBhY2tldHMgPSAxMDAgLyAoMTAwIC0gc2FtcGxlLT5zYW1wbGVfc21v
b3RoaW5nX3JhdGUpOworCXNhbXBsZS0+c2FtcGxlX3JhdGUgPSAxMDsJCQkvKiAldGltZSB0byB0
cnkgZGlmZiB0eCByYXRlcyAqLworCXNhbXBsZS0+c2FtcGxlX21heF9zdWNjZXNzaXZlX2ZhaWx1
cmVzID0gMzsJLyogdGhyZXNob2xkIGZvciByYXRlIHNhbXBsaW5nKi8KKwlzYW1wbGUtPnNhbXBs
ZV9zdGFsZV9mYWlsdXJlX3RpbWVvdXQgPSAxMCAqIGh6OwkvKiAxMCBzZWNvbmRzICovCisJc2Ft
cGxlLT5zYW1wbGVfbWluX3N3aXRjaCA9IGh6OwkJCS8qIDEgc2Vjb25kICovCisJc2FtcGxlX3Nl
dGludGVydmFsKHZhcCwgNTAwIC8qIG1zICovKTsgCS8qIGFjdHVhbGx5IGRvIG5vdGhpbmcgKi8K
KwlzYW1wbGVfc3lzY3RsYXR0YWNoKHZhcCwgdmFwLT5pdl9zeXNjdGwsIHZhcC0+aXZfb2lkKTsK
K30KKworc3RhdGljIHZvaWQKK3NhbXBsZV9kZWluaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFw
KQoreworCWZyZWUodmFwLT5pdl9ycywgTV84MDIxMV9SQVRFQ1RMKTsKK30KKworc3RhdGljIGNv
bnN0IHN0cnVjdCB0eHNjaGVkdWxlICptcnJfc2NoZWR1bGVzW0lFRUU4MDIxMV9NT0RFX01BWCsy
XSA9IHsKKwlOVUxMLAkJLyogSUVFRTgwMjExX01PREVfQVVUTyAqLworCXNlcmllc18xMWEsCS8q
IElFRUU4MDIxMV9NT0RFXzExQSAqLworCXNlcmllc18xMWcsCS8qIElFRUU4MDIxMV9NT0RFXzEx
QiAqLworCXNlcmllc18xMWcsCS8qIElFRUU4MDIxMV9NT0RFXzExRyAqLworCU5VTEwsCQkvKiBJ
RUVFODAyMTFfTU9ERV9GSCAqLworCXNlcmllc18xMWEsCS8qIElFRUU4MDIxMV9NT0RFX1RVUkJP
X0EgKi8KKwlzZXJpZXNfMTFnLAkvKiBJRUVFODAyMTFfTU9ERV9UVVJCT19HICovCisJc2VyaWVz
XzExYSwJLyogSUVFRTgwMjExX01PREVfU1RVUkJPX0EgKi8KKwlzZXJpZXNfMTFuYSwJLyogSUVF
RTgwMjExX01PREVfMTFOQSAqLworCXNlcmllc18xMW5nLAkvKiBJRUVFODAyMTFfTU9ERV8xMU5H
ICovCisJc2VyaWVzX2hhbGYsCS8qIElFRUU4MDIxMV9NT0RFX0hBTEYgKi8KKwlzZXJpZXNfcXVh
cnRlciwJLyogSUVFRTgwMjExX01PREVfUVVBUlRFUiAqLworfTsKKworc3RhdGljIHZvaWQKK3Nh
bXBsZV9ub2RlX2luaXQoc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSkKK3sKKyNkZWZpbmUJUkFU
RShfaXgpCShuaS0+bmlfcmF0ZXMucnNfcmF0ZXNbKF9peCldICYgSUVFRTgwMjExX1JBVEVfVkFM
KQorI2RlZmluZQlET1QxMVJBVEUoX2l4KQkocnQtPmluZm9bKF9peCldLmRvdDExUmF0ZSAmIElF
RUU4MDIxMV9SQVRFX1ZBTCkKKyNkZWZpbmUJTUNTKF9peCkJKG5pLT5uaV9odHJhdGVzLnJzX3Jh
dGVzW19peF0gfCBJRUVFODAyMTFfUkFURV9NQ1MpCisJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFw
ID0gbmktPm5pX3ZhcDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZSAqc2FtcGxlID0gdmFwLT5p
dl9yczsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlICpzYW4gPSBOVUxMOworCWNvbnN0
IHN0cnVjdCBpZWVlODAyMTFfcmF0ZV90YWJsZSAqcnQgPSBpZWVlODAyMTFfZ2V0X3JhdGV0YWJs
ZSh2YXAtPml2X2ljLT5pY19jdXJjaGFuKTsKKwllbnVtIGllZWU4MDIxMV9waHltb2RlIGN1cm1v
ZGUgPSBpZWVlODAyMTFfY2hhbjJtb2RlKHZhcC0+aXZfaWMtPmljX2N1cmNoYW4pOworCWludCB4
LCB5LCByaXg7CisKKwlpZiAobmktPm5pX3JjdGxzID09IE5VTEwpIHsKKwkJbmktPm5pX3JjdGxz
ID0gc2FuID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlKSwKKwkJ
ICAgIE1fODAyMTFfUkFURUNUTCwgTV9OT1dBSVR8TV9aRVJPKTsKKwkJaWYgKHNhbiA9PSBOVUxM
KSB7CisJCQlpZl9wcmludGYodmFwLT5pdl9pZnAsICJjb3VsZG4ndCBhbGxvYyBwZXItbm9kZSBy
YXRlY3RsICIKKwkJCSAgICAic3RydWN0dXJlXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxz
ZQorCQlzYW4gPSBuaS0+bmlfcmN0bHM7CisJCisJc2FuLT5zYW5fc2FtcGxlID0gc2FtcGxlOwor
CisJS0FTU0VSVChydCAhPSBOVUxMLCAoIm5vIHJhdGUgdGFibGUsIG1vZGUgJXUiLCBjdXJtb2Rl
KSk7CisKKwlzYW4tPnNjaGVkID0gbXJyX3NjaGVkdWxlc1tjdXJtb2RlXTsKKwlLQVNTRVJUKHNh
bi0+c2NoZWQgIT0gTlVMTCwgKCJubyBtcnIgc2NoZWR1bGUgZm9yIG1vZGUgJXUiLCBjdXJtb2Rl
KSk7CisKKwlzYW4tPnN0YXRpY19yaXggPSAtMTsKKwlzYW1wbGVfdXBkYXRlX3N0YXRpY19yaXgo
bmkpOworCisJLyoKKwkgKiBDb25zdHJ1Y3QgYSBiaXRtYXNrIG9mIHVzYWJsZSByYXRlcy4gIFRo
aXMgaGFzIGFsbAorCSAqIG5lZ290aWF0ZWQgcmF0ZXMgbWludXMgdGhvc2UgbWFya2VkIGJ5IHRo
ZSBoYWwgYXMKKwkgKiB0byBiZSBpZ25vcmVkIGZvciBkb2luZyByYXRlIGNvbnRyb2wuCisJICov
CisJc2FuLT5yYXRlbWFzayA9IDA7CisKKwkvKiBNQ1MgcmF0ZXMgKi8KKwlpZiAobmktPm5pX2Zs
YWdzICYgSUVFRTgwMjExX05PREVfSFQpIHsKKwkJZm9yICh4ID0gMDsgeCA8IG5pLT5uaV9odHJh
dGVzLnJzX25yYXRlczsgeCsrKSB7CisJCQlyaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4W01DUyh4
KV07CisJCQlpZiAocml4ID09IDB4ZmYpCisJCQkJY29udGludWU7CisJCQkvKiBza2lwIHJhdGVz
IG1hcmtlZCBicm9rZW4gYnkgaGFsICovCisJCQlpZiAoIXJ0LT5pbmZvW3JpeF0udmFsaWQpCisJ
CQkJY29udGludWU7CisJCQlLQVNTRVJUKHJpeCA8IFNBTVBMRV9NQVhSQVRFUywKKwkJCSAgICAo
Im1jcyAldSBoYXMgcml4ICVkIiwgTUNTKHgpLCByaXgpKTsKKwkJCXNhbi0+cmF0ZW1hc2sgfD0g
KHVpbnQ2NF90KSAxPDxyaXg7CisJCX0KKwl9CisKKwkvKiBMZWdhY3kgcmF0ZXMgKi8KKwlmb3Ig
KHggPSAwOyB4IDwgbmktPm5pX3JhdGVzLnJzX25yYXRlczsgeCsrKSB7CisJCXJpeCA9IHJ0LT5y
YXRlQ29kZVRvSW5kZXhbUkFURSh4KV07CisJCWlmIChyaXggPT0gMHhmZikKKwkJCWNvbnRpbnVl
OworCQkvKiBza2lwIHJhdGVzIG1hcmtlZCBicm9rZW4gYnkgaGFsICovCisJCWlmICghcnQtPmlu
Zm9bcml4XS52YWxpZCkKKwkJCWNvbnRpbnVlOworCQlLQVNTRVJUKHJpeCA8IFNBTVBMRV9NQVhS
QVRFUywKKwkJICAgICgicmF0ZSAldSBoYXMgcml4ICVkIiwgUkFURSh4KSwgcml4KSk7CisJCXNh
bi0+cmF0ZW1hc2sgfD0gKHVpbnQ2NF90KSAxPDxyaXg7CisJfQorCisJZm9yICh5ID0gMDsgeSA8
IE5VTV9QQUNLRVRfU0laRV9CSU5TOyB5KyspIHsKKwkJaW50IHNpemUgPSBiaW5fdG9fc2l6ZSh5
KTsKKwkJdWludDY0X3QgbWFzazsKKworCQlzYW4tPnBhY2tldHNfc2VudFt5XSA9IDA7CisJCXNh
bi0+Y3VycmVudF9zYW1wbGVfcml4W3ldID0gLTE7CisJCXNhbi0+bGFzdF9zYW1wbGVfcml4W3ld
ID0gMDsKKwkJLyogWFhYIHN0YXJ0IHdpdGggZmlyc3QgdmFsaWQgcmF0ZSAqLworCQlzYW4tPmN1
cnJlbnRfcml4W3ldID0gZmZzKHNhbi0+cmF0ZW1hc2spLTE7CisJCQorCQkvKgorCQkgKiBJbml0
aWFsaXplIHRoZSBzdGF0aXN0aWNzIGJ1Y2tldHM7IHRoZXNlIGFyZQorCQkgKiBpbmRleGVkIGJ5
IHRoZSByYXRlIGNvZGUgaW5kZXguCisJCSAqLworCQlmb3IgKHJpeCA9IDAsIG1hc2sgPSBzYW4t
PnJhdGVtYXNrOyBtYXNrICE9IDA7IHJpeCsrLCBtYXNrID4+PSAxKSB7CisJCQlpZiAoKG1hc2sg
JiAxKSA9PSAwKQkJLyogbm90IGEgdmFsaWQgcmF0ZSAqLworCQkJCWNvbnRpbnVlOworCQkJc2Fu
LT5zdGF0c1t5XVtyaXhdLnN1Y2Nlc3NpdmVfZmFpbHVyZXMgPSAwOworCQkJc2FuLT5zdGF0c1t5
XVtyaXhdLnRyaWVzID0gMDsKKwkJCXNhbi0+c3RhdHNbeV1bcml4XS50b3RhbF9wYWNrZXRzID0g
MDsKKwkJCXNhbi0+c3RhdHNbeV1bcml4XS5wYWNrZXRzX2Fja2VkID0gMDsKKwkJCXNhbi0+c3Rh
dHNbeV1bcml4XS5sYXN0X3R4ID0gMDsKKwkJCXNhbi0+c3RhdHNbeV1bcml4XS5ld21hX3BjdCA9
IDA7CisJCQkKKwkJCXNhbi0+c3RhdHNbeV1bcml4XS5wZXJmZWN0X3R4X3RpbWUgPQorCQkJICAg
IGNhbGNfdXNlY3NfdW5pY2FzdF9wYWNrZXQodmFwLCBzaXplLCByaXgsIDAsIDAsCisJCQkgICAg
KG5pLT5uaV9jaHcgPT0gNDApKTsKKwkJCXNhbi0+c3RhdHNbeV1bcml4XS5hdmVyYWdlX3R4X3Rp
bWUgPQorCQkJICAgIHNhbi0+c3RhdHNbeV1bcml4XS5wZXJmZWN0X3R4X3RpbWU7CisJCX0KKwl9
CisKKwkvKiBzZXQgdGhlIHZpc2libGUgYml0LXJhdGUgKi8KKwlpZiAoc2FuLT5zdGF0aWNfcml4
ICE9IC0xKQorCQluaS0+bmlfdHhyYXRlID0gRE9UMTFSQVRFKHNhbi0+c3RhdGljX3JpeCk7CisJ
ZWxzZQorCQluaS0+bmlfdHhyYXRlID0gUkFURSgwKTsKKyN1bmRlZiBSQVRFCisjdW5kZWYgRE9U
MTFSQVRFCisjdW5kZWYgTUNTCit9CisKK3N0YXRpYyB2b2lkCitzYW1wbGVfbm9kZV9kZWluaXQo
c3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSkKK3sKKwlmcmVlKG5pLT5uaV9yY3RscywgTV84MDIx
MV9SQVRFQ1RMKTsKK30KKworc3RhdGljIGludAorZG90MTFyYXRlKGNvbnN0IGllZWU4MDIxMV9y
YXRlX3RhYmxlICpydCwgaW50IHJpeCkKK3sKKwlpZiAocml4IDwgMCkKKwkJcmV0dXJuIC0xOwor
CXJldHVybiBydC0+aW5mb1tyaXhdLnBoeSA9PSBJRUVFODAyMTFfVF9IVCA/CisJICAgIHJ0LT5p
bmZvW3JpeF0uZG90MTFSYXRlIDogKHJ0LT5pbmZvW3JpeF0uZG90MTFSYXRlICYgSUVFRTgwMjEx
X1JBVEVfVkFMKSAvIDI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2RvdDExcmF0ZV9sYWJl
bChjb25zdCBpZWVlODAyMTFfcmF0ZV90YWJsZSAqcnQsIGludCByaXgpCit7CisJaWYgKHJpeCA8
IDApCisJCXJldHVybiAiIjsKKwlyZXR1cm4gcnQtPmluZm9bcml4XS5waHkgPT0gSUVFRTgwMjEx
X1RfSFQgPyAiTUNTIiA6ICJNYiAiOworfQorCisvKgorICogUmV0dXJuIHRoZSByaXggd2l0aCB0
aGUgbG93ZXN0IGF2ZXJhZ2VfdHhfdGltZSwKKyAqIG9yIC0xIGlmIGFsbCB0aGUgYXZlcmFnZV90
eF90aW1lcyBhcmUgMC4KKyAqLworc3RhdGljIF9faW5saW5lIGludAorcGlja19iZXN0X3JhdGUo
Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9y
YXRlX3RhYmxlICpydCwKKyAgICBpbnQgc2l6ZV9iaW4sIGludCByZXF1aXJlX2Fja2VkX2JlZm9y
ZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlICpzYW4gPSBuaS0+bmlfcmN0bHM7
CisgICAgaW50IGJlc3RfcmF0ZV9yaXgsIGJlc3RfcmF0ZV90dCwgYmVzdF9yYXRlX3BjdDsKKwl1
aW50NjRfdCBtYXNrOworCWludCByaXgsIHR0LCBwY3Q7CisKKyAgICBiZXN0X3JhdGVfcml4ID0g
MDsKKyAgICBiZXN0X3JhdGVfdHQgPSAwOworCWJlc3RfcmF0ZV9wY3QgPSAwOworCisJZm9yICht
YXNrID0gc2FuLT5yYXRlbWFzaywgcml4ID0gMDsgbWFzayAhPSAwOyBtYXNrID4+PSAxLCByaXgr
KykgeworCQlpZiAoKG1hc2sgJiAxKSA9PSAwKQkJLyogbm90IGEgc3VwcG9ydGVkIHJhdGUgKi8K
KwkJCWNvbnRpbnVlOworCisJCS8qIERvbid0IHBpY2sgYSBub24tSFQgcmF0ZSBmb3IgYSBIVCBu
b2RlICovCisJCWlmICgobmktPm5pX2ZsYWdzICYgSUVFRTgwMjExX05PREVfSFQpICYmCisJCSAg
ICAocnQtPmluZm9bcml4XS5waHkgIT0gSUVFRTgwMjExX1RfSFQpKSB7CisJCQljb250aW51ZTsK
KwkJfQorCisJCXR0ID0gc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4XS5hdmVyYWdlX3R4X3RpbWU7
CisJCWlmICh0dCA8PSAwIHx8CisJCSAgICAocmVxdWlyZV9hY2tlZF9iZWZvcmUgJiYKKwkJICAg
ICAhc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4XS5wYWNrZXRzX2Fja2VkKSkKKwkJCWNvbnRpbnVl
OworCisJCS8qIENhbGN1bGF0ZSBwZXJjZW50YWdlIGlmIHBvc3NpYmxlICovCisJCWlmIChzYW4t
PnN0YXRzW3NpemVfYmluXVtyaXhdLnRvdGFsX3BhY2tldHMgPiAwKSB7CisJCQlwY3QgPSBzYW4t
PnN0YXRzW3NpemVfYmluXVtyaXhdLmV3bWFfcGN0OworCQl9IGVsc2UgeworCQkJLyogWFhYIGZv
ciBub3csIGFzc3VtZSA5NSUgb2sgKi8KKwkJCXBjdCA9IDk1OworCQl9CisKKwkJLyogZG9uJ3Qg
dXNlIGEgYml0LXJhdGUgdGhhdCBoYXMgYmVlbiBmYWlsaW5nICovCisJCWlmIChzYW4tPnN0YXRz
W3NpemVfYmluXVtyaXhdLnN1Y2Nlc3NpdmVfZmFpbHVyZXMgPiAzKQorCQkJY29udGludWU7CisK
KwkJLyoKKwkJICogRm9yIEhULCBEb24ndCB1c2UgYSBiaXQgcmF0ZSB0aGF0IGlzIG11Y2ggbW9y
ZQorCQkgKiBsb3NzeSB0aGFuIHRoZSBiZXN0LgorCQkgKgorCQkgKiBYWFggdGhpcyBpc24ndCBv
cHRpbWFsOyBpdCdzIGp1c3QgZGVzaWduZWQgdG8KKwkJICogZWxpbWluYXRlIHJhdGVzIHRoYXQg
YXJlIGdvaW5nIHRvIGJlIG9idmlvdXNseQorCQkgKiB3b3JzZS4KKwkJICovCisJCWlmIChuaS0+
bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9IVCkgeworCQkJaWYgKGJlc3RfcmF0ZV9wY3QgPiAo
cGN0ICsgNTApKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogRm9yIG5vbi1NQ1Mg
cmF0ZXMsIHVzZSB0aGUgY3VycmVudCBhdmVyYWdlIHR4dGltZSBmb3IKKwkJICogY29tcGFyaXNv
bi4KKwkJICovCisJCWlmICghIChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9IVCkpIHsK
KwkJCWlmIChiZXN0X3JhdGVfdHQgPT0gMCB8fCB0dCA8PSBiZXN0X3JhdGVfdHQpIHsKKwkJCQli
ZXN0X3JhdGVfdHQgPSB0dDsKKwkJCQliZXN0X3JhdGVfcml4ID0gcml4OworCQkJCWJlc3RfcmF0
ZV9wY3QgPSBwY3Q7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBTaW5jZSAyIHN0cmVhbSByYXRl
cyBoYXZlIHNsaWdodGx5IGhpZ2hlciBUWCB0aW1lcywKKwkJICogYWxsb3cgYSBsaXR0bGUgYml0
IG9mIGxlZXdheS4gVGhpcyBzaG91bGQgbGF0ZXIKKwkJICogYmUgYWJzdHJhY3RlZCBvdXQgYW5k
IHByb3Blcmx5IGhhbmRsZWQuCisJCSAqLworCQlpZiAobmktPm5pX2ZsYWdzICYgSUVFRTgwMjEx
X05PREVfSFQpIHsKKwkJCWlmIChiZXN0X3JhdGVfdHQgPT0gMCB8fCAodHQgKiA4IDw9IGJlc3Rf
cmF0ZV90dCAqIDEwKSkgeworCQkJCWJlc3RfcmF0ZV90dCA9IHR0OworCQkJCWJlc3RfcmF0ZV9y
aXggPSByaXg7CisJCQkJYmVzdF9yYXRlX3BjdCA9IHBjdDsKKwkJCX0KKwkJfQorICAgICAgICB9
CisgICAgICAgIHJldHVybiAoYmVzdF9yYXRlX3R0ID8gYmVzdF9yYXRlX3JpeCA6IC0xKTsKK30K
KworLyoKKyAqIFBpY2sgYSBnb29kICJyYW5kb20iIGJpdC1yYXRlIHRvIHNhbXBsZSBvdGhlciB0
aGFuIHRoZSBjdXJyZW50IG9uZS4KKyAqLworc3RhdGljIF9faW5saW5lIGludAorcGlja19zYW1w
bGVfcmF0ZShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBjb25zdCBpZWVlODAyMTFf
cmF0ZV90YWJsZSAqcnQsIAorCWludCBzaXplX2JpbikKK3sKKyNkZWZpbmUJRE9UMTFSQVRFKGl4
KQkocnQtPmluZm9baXhdLmRvdDExUmF0ZSAmIElFRUU4MDIxMV9SQVRFX1ZBTCkKKyNkZWZpbmUJ
TUNTKGl4KQkJKHJ0LT5pbmZvW2l4XS5kb3QxMVJhdGUgfCBJRUVFODAyMTFfUkFURV9NQ1MpCisJ
c3RydWN0IGllZWU4MDIxMV9zYW1wbGVfbm9kZSAqc2FuID0gbmktPm5pX3JjdGxzOworCXN0cnVj
dCBpZWVlODAyMTFfc2FtcGxlICpzYW1wbGUgPSBzYW4tPnNhbl9zYW1wbGU7CisJaW50IGN1cnJl
bnRfcml4LCByaXg7CisJdW5zaWduZWQgY3VycmVudF90dDsKKwl1aW50NjRfdCBtYXNrOworCQor
CWN1cnJlbnRfcml4ID0gc2FuLT5jdXJyZW50X3JpeFtzaXplX2Jpbl07CisJaWYgKGN1cnJlbnRf
cml4IDwgMCkgeworCQkvKiBubyBzdWNjZXNzZXMgeWV0LCBzZW5kIGF0IHRoZSBsb3dlc3QgYml0
LXJhdGUgKi8KKwkJLyogWFhYIHNob3VsZCByZXR1cm4gTUNTMCBpZiBIVCAqLworCQlyZXR1cm4g
MDsKKwl9CisKKwljdXJyZW50X3R0ID0gc2FuLT5zdGF0c1tzaXplX2Jpbl1bY3VycmVudF9yaXhd
LmF2ZXJhZ2VfdHhfdGltZTsKKworCXJpeCA9IHNhbi0+bGFzdF9zYW1wbGVfcml4W3NpemVfYmlu
XSsxOwkvKiBuZXh0IHNhbXBsZSByYXRlICovCisJbWFzayA9IHNhbi0+cmF0ZW1hc2sgJn4gKCh1
aW50NjRfdCkgMTw8Y3VycmVudF9yaXgpOy8qIGRvbid0IHNhbXBsZSBjdXJyZW50IHJhdGUgKi8K
Kwl3aGlsZSAobWFzayAhPSAwKSB7CisJCWlmICgobWFzayAmICgodWludDY0X3QpIDE8PHJpeCkp
ID09IDApIHsJLyogbm90IGEgc3VwcG9ydGVkIHJhdGUgKi8KKwluZXh0cmF0ZToKKwkJCWlmICgr
K3JpeCA+PSBydC0+cmF0ZUNvdW50KQorCQkJCXJpeCA9IDA7CisJCQljb250aW51ZTsKKwkJfQor
CisJCS8qCisJCSAqIFRoZSBmb2xsb3dpbmcgY29kZSBzdG9wcyB0cnlpbmcgdG8gc2FtcGxlCisJ
CSAqIG5vbi1NQ1MgcmF0ZXMgd2hlbiBzcGVha2luZyB0byBhbiBNQ1Mgbm9kZS4KKwkJICogSG93
ZXZlciwgYXQgbGVhc3QgZm9yIENDSyByYXRlcyBpbiAyLjRHSHogbW9kZSwKKwkJICogdGhlIG5v
bi1NQ1MgcmF0ZXMgTUFZIGFjdHVhbGx5IHByb3ZpZGUgYmV0dGVyCisJCSAqIFBFUiBhdCB0aGUg
dmVyeSBmYXIgZWRnZSBvZiByZWNlcHRpb24uCisJCSAqCisJCSAqIEhvd2V2ZXIhIFVudGlsIGF0
aF9yYXRlX2Zvcm1fYWdncigpIGdyb3dzCisJCSAqIHNvbWUgbG9naWMgdG8gbm90IGZvcm0gYWdn
cmVnYXRlcyBpZiB0aGUKKwkJICogc2VsZWN0ZWQgcmF0ZSBpcyBub24tTUNTLCB0aGlzIHdvbid0
IHdvcmsuCisJCSAqCisJCSAqIFNvIGRvbid0IGRpc2FibGUgdGhpcyBjb2RlIHVudGlsIHlvdSd2
ZSB0YXVnaHQKKwkJICogYXRoX3JhdGVfZm9ybV9hZ2dyKCkgdG8gZHJvcCBvdXQgaWYgYW55IG9m
CisJCSAqIHRoZSBzZWxlY3RlZCByYXRlcyBhcmUgbm9uLU1DUy4KKwkJICovCisjaWYgMQorCQkv
KiBpZiB0aGUgbm9kZSBpcyBIVCBhbmQgdGhlIHJhdGUgaXNuJ3QgSFQsIGRvbid0IGJvdGhlciBz
YW1wbGUgKi8KKwkJaWYgKChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9IVCkgJiYKKwkJ
ICAgIChydC0+aW5mb1tyaXhdLnBoeSAhPSBJRUVFODAyMTFfVF9IVCkpIHsKKwkJCW1hc2sgJj0g
figodWludDY0X3QpIDE8PHJpeCk7CisJCQlnb3RvIG5leHRyYXRlOworCQl9CisjZW5kaWYKKwor
CQkvKiB0aGlzIGJpdC1yYXRlIGlzIGFsd2F5cyB3b3JzZSB0aGFuIHRoZSBjdXJyZW50IG9uZSAq
LworCQlpZiAoc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4XS5wZXJmZWN0X3R4X3RpbWUgPiBjdXJy
ZW50X3R0KSB7CisJCQltYXNrICY9IH4oKHVpbnQ2NF90KSAxPDxyaXgpOworCQkJZ290byBuZXh0
cmF0ZTsKKwkJfQorCisJCS8qIHJhcmVseSBzYW1wbGUgYml0LXJhdGVzIHRoYXQgZmFpbCBhIGxv
dCAqLworCQlpZiAoc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4XS5zdWNjZXNzaXZlX2ZhaWx1cmVz
ID4gc2FtcGxlLT5zYW1wbGVfbWF4X3N1Y2Nlc3NpdmVfZmFpbHVyZXMgJiYKKwkJICAgIHRpY2tz
IC0gc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4XS5sYXN0X3R4IDwgc2FtcGxlLT5zYW1wbGVfc3Rh
bGVfZmFpbHVyZV90aW1lb3V0KSB7CisJCQltYXNrICY9IH4oKHVpbnQ2NF90KSAxPDxyaXgpOwor
CQkJZ290byBuZXh0cmF0ZTsKKwkJfQorCisJCS8qCisJCSAqIEZvciBIVCwgb25seSBzYW1wbGUg
YSBmZXcgcmF0ZXMgb24gZWl0aGVyIHNpZGUgb2YgdGhlCisJCSAqIGN1cnJlbnQgcml4OyB0aGVy
ZSdzIHF1aXRlIGxpa2VseSBhIGxvdCBvZiB0aGVtLgorCQkgKi8KKwkJaWYgKG5pLT5uaV9mbGFn
cyAmIElFRUU4MDIxMV9OT0RFX0hUKSB7CisJCQlpZiAocml4IDwgKGN1cnJlbnRfcml4IC0gMykg
fHwKKwkJCSAgICByaXggPiAoY3VycmVudF9yaXggKyAzKSkgeworCQkJCW1hc2sgJj0gfigodWlu
dDY0X3QpIDE8PHJpeCk7CisJCQkJZ290byBuZXh0cmF0ZTsKKwkJCX0KKwkJfQorCisJCS8qIERv
bid0IHNhbXBsZSBtb3JlIHRoYW4gMiByYXRlcyBoaWdoZXIgZm9yIHJhdGVzID4gMTFNIGZvciBu
b24tSFQgcmF0ZXMgKi8KKwkJaWYgKCEgKG5pLT5uaV9mbGFncyAmIElFRUU4MDIxMV9OT0RFX0hU
KSkgeworCQkJaWYgKERPVDExUkFURShyaXgpID4gMioxMSAmJiByaXggPiBjdXJyZW50X3JpeCAr
IDIpIHsKKwkJCQltYXNrICY9IH4oKHVpbnQ2NF90KSAxPDxyaXgpOworCQkJCWdvdG8gbmV4dHJh
dGU7CisJCQl9CisJCX0KKworCQlzYW4tPmxhc3Rfc2FtcGxlX3JpeFtzaXplX2Jpbl0gPSByaXg7
CisJCXJldHVybiByaXg7CisJfQorCXJldHVybiBjdXJyZW50X3JpeDsKKyN1bmRlZiBET1QxMVJB
VEUKKyN1bmRlZiBNQ1MKK30KKworc3RhdGljIGludAorc2FtcGxlX2dldF9zdGF0aWNfcml4KGNv
bnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkpCit7CisjZGVmaW5lCVJBVEUoX2l4KQkobmkt
Pm5pX3JhdGVzLnJzX3JhdGVzWyhfaXgpXSAmIElFRUU4MDIxMV9SQVRFX1ZBTCkKKyNkZWZpbmUJ
TUNTKF9peCkJKG5pLT5uaV9odHJhdGVzLnJzX3JhdGVzW19peF0gfCBJRUVFODAyMTFfUkFURV9N
Q1MpCisJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gbmktPm5pX3ZhcDsKKwljb25zdCBzdHJ1
Y3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0ID0gaWVlZTgwMjExX2dldF9yYXRldGFibGUodmFw
LT5pdl9pYy0+aWNfY3VyY2hhbik7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eHBhcmFtICp0
cCA9IG5pLT5uaV90eHBhcm1zOworCWludCBzcmF0ZTsKKworCS8qIENoZWNrIE1DUyByYXRlcyAq
LworCWZvciAoc3JhdGUgPSBuaS0+bmlfaHRyYXRlcy5yc19ucmF0ZXMgLSAxOyBzcmF0ZSA+PSAw
OyBzcmF0ZS0tKSB7CisJCWlmIChNQ1Moc3JhdGUpID09IHRwLT51Y2FzdHJhdGUpCisJCQlyZXR1
cm4gcnQtPnJhdGVDb2RlVG9JbmRleFt0cC0+dWNhc3RyYXRlXTsKKwl9CisKKwkvKiBDaGVjayBs
ZWdhY3kgcmF0ZXMgKi8KKwlmb3IgKHNyYXRlID0gbmktPm5pX3JhdGVzLnJzX25yYXRlcyAtIDE7
IHNyYXRlID49IDA7IHNyYXRlLS0pIHsKKwkJaWYgKFJBVEUoc3JhdGUpID09IHRwLT51Y2FzdHJh
dGUpCisJCQlyZXR1cm4gcnQtPnJhdGVDb2RlVG9JbmRleFt0cC0+dWNhc3RyYXRlXTsKKwl9CisJ
cmV0dXJuIC0xOworI3VuZGVmCVJBVEUKKyN1bmRlZglNQ1MKK30KKworc3RhdGljIHZvaWQKK3Nh
bXBsZV91cGRhdGVfc3RhdGljX3JpeChzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pKQoreworCXN0
cnVjdCBpZWVlODAyMTFfc2FtcGxlX25vZGUgKnNhbiA9IG5pLT5uaV9yY3RsczsKKwljb25zdCBz
dHJ1Y3QgaWVlZTgwMjExX3R4cGFyYW0gKnRwID0gbmktPm5pX3R4cGFybXM7CisKKwlpZiAodHAg
IT0gTlVMTCAmJiB0cC0+dWNhc3RyYXRlICE9IElFRUU4MDIxMV9GSVhFRF9SQVRFX05PTkUpIHsK
KwkJLyoKKwkJICogQSBmaXhlZCByYXRlIGlzIHRvIGJlIHVzZWQ7IHVjYXN0cmF0ZSBpcyB0aGUg
SUVFRSBjb2RlCisJCSAqIGZvciB0aGlzIHJhdGUgKHNhbnMgYmFzaWMgYml0KS4gIENoZWNrIHRo
aXMgYWdhaW5zdCB0aGUKKwkJICogbmVnb3RpYXRlZCByYXRlIHNldCBmb3IgdGhlIG5vZGUuICBO
b3RlIHRoZSBmaXhlZCByYXRlCisJCSAqIG1heSBub3QgYmUgYXZhaWxhYmxlIGZvciB2YXJpb3Vz
IHJlYXNvbnMgc28gd2Ugb25seQorCQkgKiBzZXR1cCB0aGUgc3RhdGljIHJhdGUgaW5kZXggaWYg
dGhlIGxvb2t1cCBpcyBzdWNjZXNzZnVsLgorCQkgKi8KKwkJc2FuLT5zdGF0aWNfcml4ID0gc2Ft
cGxlX2dldF9zdGF0aWNfcml4KG5pKTsKKwl9IGVsc2UgeworCQlzYW4tPnN0YXRpY19yaXggPSAt
MTsKKwl9Cit9CisKKy8qCisgKiBQaWNrIGEgbm9uLUhUIHJhdGUgdG8gYmVnaW4gdXNpbmcuCisg
Ki8KK3N0YXRpYyBpbnQKK3NhbXBsZV9waWNrX3NlZWRfcmF0ZV9sZWdhY3koY29uc3Qgc3RydWN0
IGllZWU4MDIxMV9ub2RlICpuaSwgaW50IGZyYW1lTGVuKQoreworI2RlZmluZQlET1QxMVJBVEUo
aXgpCShydC0+aW5mb1tpeF0uZG90MTFSYXRlICYgSUVFRTgwMjExX1JBVEVfVkFMKQorCXN0cnVj
dCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92YXA7CisJc3RydWN0IGllZWU4MDIxMV9zYW1w
bGVfbm9kZSAqc2FuID0gbmktPm5pX3JjdGxzOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0
ZV90YWJsZSAqcnQgPSBpZWVlODAyMTFfZ2V0X3JhdGV0YWJsZSh2YXAtPml2X2ljLT5pY19jdXJj
aGFuKTsKKwkKKwljb25zdCBpbnQgc2l6ZV9iaW4gPSBzaXplX3RvX2JpbihmcmFtZUxlbik7CisJ
aW50IHJpeCA9IC0xOworCisJLyogbm8gcGFja2V0IGhhcyBiZWVuIHNlbnQgc3VjY2Vzc2Z1bGx5
IHlldCAqLworCWZvciAocml4ID0gcnQtPnJhdGVDb3VudC0xOyByaXggPiAwOyByaXgtLSkgewor
CQlpZiAoKHNhbi0+cmF0ZW1hc2sgJiAoKHVpbnQ2NF90KSAxPDxyaXgpKSA9PSAwKQorCQkJY29u
dGludWU7CisKKwkJLyogU2tpcCBIVCByYXRlcyAqLworCQlpZiAocnQtPmluZm9bcml4XS5waHkg
PT0gSUVFRTgwMjExX1RfSFQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBQaWNrIHRoZSBo
aWdoZXN0IHJhdGUgPD0gMzYgTWJwcworCQkgKiB0aGF0IGhhc24ndCBmYWlsZWQuCisJCSAqLwor
CQlpZiAoRE9UMTFSQVRFKHJpeCkgPD0gNzIgJiYKKwkJICAgIHNhbi0+c3RhdHNbc2l6ZV9iaW5d
W3JpeF0uc3VjY2Vzc2l2ZV9mYWlsdXJlcyA9PSAwKSB7CisJCQlicmVhazsKKwkJfQorCX0KKwly
ZXR1cm4gcml4OworI3VuZGVmIERPVDExUkFURQorfQorCisvKgorICogUGljayBhIEhUIHJhdGUg
dG8gYmVnaW4gdXNpbmcuCisgKgorICogRG9uJ3QgdXNlIGFueSBub24tSFQgcmF0ZXM7IG9ubHkg
Y29uc2lkZXIgSFQgcmF0ZXMuCisgKi8KK3N0YXRpYyBpbnQKK3NhbXBsZV9waWNrX3NlZWRfcmF0
ZV9odChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBpbnQgZnJhbWVMZW4pCit7Cisj
ZGVmaW5lCU1DUyhpeCkJCShydC0+aW5mb1tpeF0uZG90MTFSYXRlIHwgSUVFRTgwMjExX1JBVEVf
TUNTKQorCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92YXA7CisJc3RydWN0IGll
ZWU4MDIxMV9zYW1wbGVfbm9kZSAqc2FuID0gbmktPm5pX3JjdGxzOworCWNvbnN0IHN0cnVjdCBp
ZWVlODAyMTFfcmF0ZV90YWJsZSAqcnQgPSBpZWVlODAyMTFfZ2V0X3JhdGV0YWJsZSh2YXAtPml2
X2ljLT5pY19jdXJjaGFuKTsKKwkKKwljb25zdCBpbnQgc2l6ZV9iaW4gPSBzaXplX3RvX2Jpbihm
cmFtZUxlbik7CisJaW50IHJpeCA9IC0xLCBodF9yaXggPSAtMTsKKworCS8qIG5vIHBhY2tldCBo
YXMgYmVlbiBzZW50IHN1Y2Nlc3NmdWxseSB5ZXQgKi8KKwlmb3IgKHJpeCA9IHJ0LT5yYXRlQ291
bnQtMTsgcml4ID4gMDsgcml4LS0pIHsKKwkJLyogU2tpcCByYXRlcyB3ZSBjYW4ndCB1c2UgKi8K
KwkJaWYgKChzYW4tPnJhdGVtYXNrICYgKCh1aW50NjRfdCkgMTw8cml4KSkgPT0gMCkKKwkJCWNv
bnRpbnVlOworCisJCS8qIEtlZXAgYSBjb3B5IG9mIHRoZSBsYXN0IHNlZW4gSFQgcmF0ZSBpbmRl
eCAqLworCQlpZiAocnQtPmluZm9bcml4XS5waHkgPT0gSUVFRTgwMjExX1RfSFQpCisJCQlodF9y
aXggPSByaXg7CisKKwkJLyogU2tpcCBub24tSFQgcmF0ZXMgKi8KKwkJaWYgKHJ0LT5pbmZvW3Jp
eF0ucGh5ICE9IElFRUU4MDIxMV9UX0hUKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogUGlj
ayBhIG1lZGl1bS1zcGVlZCByYXRlIHJlZ2FyZGxlc3Mgb2Ygc3RyZWFtIGNvdW50CisJCSAqIHdo
aWNoIGhhcyBub3Qgc2VlbiBhbnkgZmFpbHVyZXMuIEhpZ2hlciByYXRlcyBtYXkgZmFpbDsKKwkJ
ICogd2UnbGwgdHJ5IHRoZW0gbGF0ZXIuCisJCSAqLworCQlpZiAoKChNQ1Mocml4KSAmIDB4Nykg
PD0gNCkgJiYKKwkJICAgIHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeF0uc3VjY2Vzc2l2ZV9mYWls
dXJlcyA9PSAwKSB7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qCisJICogSWYgYWxsIHRoZSBN
Q1MgcmF0ZXMgaGF2ZSBzdWNjZXNzaXZlIGZhaWx1cmVzLCByaXggc2hvdWxkIGJlCisJICogPiAw
OyBvdGhlcndpc2UgdXNlIHRoZSBsb3dlc3QgTUNTIHJpeCAoaG9wZWZ1bGx5IE1DUyAwLikKKwkg
Ki8KKwlyZXR1cm4gTUFYKHJpeCwgaHRfcml4KTsKKyN1bmRlZiBNQ1MKK30KKworc3RhdGljIGlu
dAorc2FtcGxlX3JhdGUoc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgdm9pZCAqYXJnIF9fdW51
c2VkLCB1aW50MzJfdCBpYXJnIF9fdW51c2VkKQoreworI2RlZmluZQlET1QxMVJBVEUoaXgpCShy
dC0+aW5mb1tpeF0uZG90MTFSYXRlICYgSUVFRTgwMjExX1JBVEVfVkFMKQorI2RlZmluZQlNQ1Mo
aXgpCQkocnQtPmluZm9baXhdLmRvdDExUmF0ZSB8IElFRUU4MDIxMV9SQVRFX01DUykKKyNkZWZp
bmUJUkFURShpeCkJKERPVDExUkFURShpeCkgLyAyKQorCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZh
cCA9IG5pLT5uaV92YXA7CisJc3RydWN0IGllZWU4MDIxMV9zYW1wbGVfbm9kZSAqc2FuID0gbmkt
Pm5pX3JjdGxzOworCXN0cnVjdCBpZWVlODAyMTFfc2FtcGxlICpzYW1wbGUgPSBzYW4tPnNhbl9z
YW1wbGU7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpydCA9IGllZWU4MDIx
MV9nZXRfcmF0ZXRhYmxlKHZhcC0+aXZfaWMtPmljX2N1cmNoYW4pOworCQorCWludCByaXgsIG1y
ciwgYmVzdF9yaXgsIGNoYW5nZV9yYXRlczsKKwl1bnNpZ25lZCBhdmVyYWdlX3R4X3RpbWU7CisJ
CisJc2l6ZV90IGZyYW1lTGVuID0gKHNpemVfdClpYXJnOworCWNvbnN0IGludCBzaXplX2JpbiA9
IHNpemVfdG9fYmluKGZyYW1lTGVuKTsKKworCXNhbXBsZV91cGRhdGVfc3RhdGljX3JpeChuaSk7
CisKKwlpZiAoc2FuLT5zdGF0aWNfcml4ICE9IC0xKSB7CisJCXJpeCA9IHNhbi0+c3RhdGljX3Jp
eDsKKwkJZ290byBkb25lOworCX0KKworCWlmIChJRUVFODAyMTFfUkFURUNUTF9IQVNDQVBfTVJS
KHZhcCkpCisJCW1yciA9IDE7CisJaWYgKCEgSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01SUlBS
T1QodmFwKSkKKwkJbXJyID0gMDsKKworCWJlc3Rfcml4ID0gcGlja19iZXN0X3JhdGUobmksIHJ0
LCBzaXplX2JpbiwgIW1ycik7CisJaWYgKGJlc3Rfcml4ID49IDApIHsKKwkJYXZlcmFnZV90eF90
aW1lID0gc2FuLT5zdGF0c1tzaXplX2Jpbl1bYmVzdF9yaXhdLmF2ZXJhZ2VfdHhfdGltZTsKKwl9
IGVsc2UgeworCQlhdmVyYWdlX3R4X3RpbWUgPSAwOworCX0KKworCS8qCisJICogTGltaXQgdGhl
IHRpbWUgbWVhc3VyaW5nIHRoZSBwZXJmb3JtYW5jZSBvZiBvdGhlciB0eAorCSAqIHJhdGVzIHRv
IHNhbXBsZV9yYXRlJSBvZiB0aGUgdG90YWwgdHJhbnNtaXNzaW9uIHRpbWUuCisJICovCisJaWYg
KHNhbi0+c2FtcGxlX3R0W3NpemVfYmluXSA8IGF2ZXJhZ2VfdHhfdGltZSAqIChzYW4tPnBhY2tl
dHNfc2luY2Vfc2FtcGxlW3NpemVfYmluXSAqCisJCXNhbXBsZS0+c2FtcGxlX3JhdGUvMTAwKSkg
eworCQlyaXggPSBwaWNrX3NhbXBsZV9yYXRlKG5pLCBydCwgc2l6ZV9iaW4pOworCQlJRUVFODAy
MTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwKKwkJICAgICAmbmksICJhdHQgJWQg
c2FtcGxlX3R0ICVkIHNpemUgJXUgc2FtcGxlIHJhdGUgJWQgJXMgY3VycmVudCByYXRlICVkICVz
IiwKKwkJICAgICBhdmVyYWdlX3R4X3RpbWUsCisJCSAgICAgc2FuLT5zYW1wbGVfdHRbc2l6ZV9i
aW5dLAorCQkgICAgIGJpbl90b19zaXplKHNpemVfYmluKSwKKwkJICAgICBkb3QxMXJhdGUocnQs
IHJpeCksCisJCSAgICAgZG90MTFyYXRlX2xhYmVsKHJ0LCByaXgpLAorCQkgICAgIGRvdDExcmF0
ZShydCwgc2FuLT5jdXJyZW50X3JpeFtzaXplX2Jpbl0pLAorCQkgICAgIGRvdDExcmF0ZV9sYWJl
bChydCwgc2FuLT5jdXJyZW50X3JpeFtzaXplX2Jpbl0pKTsKKwkJaWYgKHJpeCAhPSBzYW4tPmN1
cnJlbnRfcml4W3NpemVfYmluXSkgeworCQkJc2FuLT5jdXJyZW50X3NhbXBsZV9yaXhbc2l6ZV9i
aW5dID0gcml4OworCQl9IGVsc2UgeworCQkJc2FuLT5jdXJyZW50X3NhbXBsZV9yaXhbc2l6ZV9i
aW5dID0gLTE7CisJCX0KKwkJc2FuLT5wYWNrZXRzX3NpbmNlX3NhbXBsZVtzaXplX2Jpbl0gPSAw
OworCX0gZWxzZSB7CisJCWNoYW5nZV9yYXRlcyA9IDA7CisJCWlmICghc2FuLT5wYWNrZXRzX3Nl
bnRbc2l6ZV9iaW5dIHx8IGJlc3Rfcml4ID09IC0xKSB7CisJCQkvKiBubyBwYWNrZXQgaGFzIGJl
ZW4gc2VudCBzdWNjZXNzZnVsbHkgeWV0ICovCisJCQljaGFuZ2VfcmF0ZXMgPSAxOworCQkJaWYg
KG5pLT5uaV9mbGFncyAmIElFRUU4MDIxMV9OT0RFX0hUKQorCQkJCWJlc3Rfcml4ID0gc2FtcGxl
X3BpY2tfc2VlZF9yYXRlX2h0KG5pLCBmcmFtZUxlbik7CisJCQllbHNlCisJCQkJYmVzdF9yaXgg
PSBzYW1wbGVfcGlja19zZWVkX3JhdGVfbGVnYWN5KG5pLCBmcmFtZUxlbik7CisJCX0gZWxzZSBp
ZiAoc2FuLT5wYWNrZXRzX3NlbnRbc2l6ZV9iaW5dIDwgMjApIHsKKwkJCS8qIGxldCB0aGUgYml0
LXJhdGUgc3dpdGNoIHF1aWNrbHkgZHVyaW5nIHRoZSBmaXJzdCBmZXcgcGFja2V0cyAqLworCQkJ
SUVFRTgwMjExX05PVEUodmFwLAorCQkJICAgIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgJm5pLAor
CQkJICAgICIlczogc3dpdGNoaW5nIHF1aWNrbHkuLiIsIF9fZnVuY19fKTsKKwkJCWNoYW5nZV9y
YXRlcyA9IDE7CisJCX0gZWxzZSBpZiAodGlja3MgLSBzYW1wbGUtPnNhbXBsZV9taW5fc3dpdGNo
ID4gc2FuLT50aWNrc19zaW5jZV9zd2l0Y2hbc2l6ZV9iaW5dKSB7CisJCQkvKiBtaW5fc3dpdGNo
IHNlY29uZHMgaGF2ZSBnb25lIGJ5ICovCisJCQlJRUVFODAyMTFfTk9URSh2YXAsCisJCQkgICAg
SUVFRTgwMjExX01TR19SQVRFQ1RMLCAmbmksCisJCQkgICAgIiVzOiBtaW5fc3dpdGNoICVkID4g
dGlja3Nfc2luY2Vfc3dpdGNoICVkLi4iLAorCQkJICAgIF9fZnVuY19fLCB0aWNrcyAtIHNhbXBs
ZS0+c2FtcGxlX21pbl9zd2l0Y2gsIHNhbi0+dGlja3Nfc2luY2Vfc3dpdGNoW3NpemVfYmluXSk7
CisJCQljaGFuZ2VfcmF0ZXMgPSAxOworCQl9IGVsc2UgaWYgKCghIChuaS0+bmlfZmxhZ3MgJiBJ
RUVFODAyMTFfTk9ERV9IVCkpICYmCisJCSAgICAoMiphdmVyYWdlX3R4X3RpbWUgPCBzYW4tPnN0
YXRzW3NpemVfYmluXVtzYW4tPmN1cnJlbnRfcml4W3NpemVfYmluXV0uYXZlcmFnZV90eF90aW1l
KSkgeworCQkJLyogdGhlIGN1cnJlbnQgYml0LXJhdGUgaXMgdHdpY2UgYXMgc2xvdyBhcyB0aGUg
YmVzdCBvbmUgKi8KKwkJCUlFRUU4MDIxMV9OT1RFKHZhcCwKKwkJCSAgICBJRUVFODAyMTFfTVNH
X1JBVEVDVEwsICZuaSwKKwkJCSAgICAiJXM6IDJ4IGF0dCAoPSAlZCkgPCBjdXJfcml4IGF0dCAl
ZCIsCisJCQkgICAgX19mdW5jX18sCisJCQkgICAgMiAqIGF2ZXJhZ2VfdHhfdGltZSwgc2FuLT5z
dGF0c1tzaXplX2Jpbl1bc2FuLT5jdXJyZW50X3JpeFtzaXplX2Jpbl1dLmF2ZXJhZ2VfdHhfdGlt
ZSk7CisJCQljaGFuZ2VfcmF0ZXMgPSAxOworCQl9IGVsc2UgaWYgKChuaS0+bmlfZmxhZ3MgJiBJ
RUVFODAyMTFfTk9ERV9IVCkpIHsKKwkJCWludCBjdXJfcml4ID0gc2FuLT5jdXJyZW50X3JpeFtz
aXplX2Jpbl07CisJCQlpbnQgY3VyX2F0dCA9IHNhbi0+c3RhdHNbc2l6ZV9iaW5dW2N1cl9yaXhd
LmF2ZXJhZ2VfdHhfdGltZTsKKwkJCS8qCisJCQkgKiBJZiB0aGUgbm9kZSBpcyBIVCwgdXBncmFk
ZSBpdCBpZiB0aGUgTUNTIHJhdGUgaXMKKwkJCSAqIGhpZ2hlciBhbmQgdGhlIGF2ZXJhZ2UgdHgg
dGltZSBpcyB3aXRoaW4gMjAlIG9mCisJCQkgKiB0aGUgY3VycmVudCByYXRlLiBJdCBjYW4gZmFp
bCBhIGxpdHRsZS4KKwkJCSAqCisJCQkgKiBUaGlzIGlzIGxpa2VseSBub3Qgb3B0aW1hbCEKKwkJ
CSAqLworI2lmIDAKKwkJCXByaW50ZigiY3VyIHJpeC9hdHQgJXgvJWQsIGJlc3Qgcml4L2F0dCAl
eC8lZFxuIiwKKwkJCSAgICBNQ1MoY3VyX3JpeCksIGN1cl9hdHQsIE1DUyhiZXN0X3JpeCksIGF2
ZXJhZ2VfdHhfdGltZSk7CisjZW5kaWYKKwkJCWlmICgoTUNTKGJlc3Rfcml4KSA+IE1DUyhjdXJf
cml4KSkgJiYKKwkJCSAgICAoYXZlcmFnZV90eF90aW1lICogOCkgPD0gKGN1cl9hdHQgKiAxMCkp
IHsKKwkJCQlJRUVFODAyMTFfTk9URSh2YXAsCisJCQkJICAgIElFRUU4MDIxMV9NU0dfUkFURUNU
TCwgJm5pLAorCQkJCSAgICAiJXM6IEhUOiBiZXN0X3JpeCAweCVkID4gY3VyX3JpeCAweCV4LCBh
dmVyYWdlX3R4X3RpbWUgJWQsIGN1cl9hdHQgJWQiLAorCQkJCSAgICBfX2Z1bmNfXywKKwkJCQkg
ICAgTUNTKGJlc3Rfcml4KSwgTUNTKGN1cl9yaXgpLCBhdmVyYWdlX3R4X3RpbWUsIGN1cl9hdHQp
OworCQkJCWNoYW5nZV9yYXRlcyA9IDE7CisJCQl9CisJCX0KKworCQlzYW4tPnBhY2tldHNfc2lu
Y2Vfc2FtcGxlW3NpemVfYmluXSsrOworCQkKKwkJaWYgKGNoYW5nZV9yYXRlcykgeworCQkJaWYg
KGJlc3Rfcml4ICE9IHNhbi0+Y3VycmVudF9yaXhbc2l6ZV9iaW5dKSB7CisJCQkJSUVFRTgwMjEx
X05PVEUodmFwLAorCQkJCSAgICBJRUVFODAyMTFfTVNHX1JBVEVDVEwsCisJCQkJICAgICZuaSwK
KyIlczogc2l6ZSAlZCBzd2l0Y2ggcmF0ZSAlZCAoJWQvJWQpIC0+ICVkICglZC8lZCkgYWZ0ZXIg
JWQgcGFja2V0cyBtcnIgJWQiLAorCQkJCSAgICBfX2Z1bmNfXywKKwkJCQkgICAgYmluX3RvX3Np
emUoc2l6ZV9iaW4pLAorCQkJCSAgICBSQVRFKHNhbi0+Y3VycmVudF9yaXhbc2l6ZV9iaW5dKSwK
KwkJCQkgICAgc2FuLT5zdGF0c1tzaXplX2Jpbl1bc2FuLT5jdXJyZW50X3JpeFtzaXplX2Jpbl1d
LmF2ZXJhZ2VfdHhfdGltZSwKKwkJCQkgICAgc2FuLT5zdGF0c1tzaXplX2Jpbl1bc2FuLT5jdXJy
ZW50X3JpeFtzaXplX2Jpbl1dLnBlcmZlY3RfdHhfdGltZSwKKwkJCQkgICAgUkFURShiZXN0X3Jp
eCksCisJCQkJICAgIHNhbi0+c3RhdHNbc2l6ZV9iaW5dW2Jlc3Rfcml4XS5hdmVyYWdlX3R4X3Rp
bWUsCisJCQkJICAgIHNhbi0+c3RhdHNbc2l6ZV9iaW5dW2Jlc3Rfcml4XS5wZXJmZWN0X3R4X3Rp
bWUsCisJCQkJICAgIHNhbi0+cGFja2V0c19zaW5jZV9zd2l0Y2hbc2l6ZV9iaW5dLAorCQkJCSAg
ICBtcnIpOworCQkJfQorCQkJc2FuLT5wYWNrZXRzX3NpbmNlX3N3aXRjaFtzaXplX2Jpbl0gPSAw
OworCQkJc2FuLT5jdXJyZW50X3JpeFtzaXplX2Jpbl0gPSBiZXN0X3JpeDsKKwkJCXNhbi0+dGlj
a3Nfc2luY2Vfc3dpdGNoW3NpemVfYmluXSA9IHRpY2tzOworCQkJLyogCisJCQkgKiBTZXQgdGhl
IHZpc2libGUgdHhyYXRlIGZvciB0aGlzIG5vZGUuCisJCQkgKi8KKwkJCW5pLT5uaV90eHJhdGUg
PSBkb3QxMXJhdGUocnQsIGJlc3Rfcml4KTsKKwkJfQorCQlyaXggPSBzYW4tPmN1cnJlbnRfcml4
W3NpemVfYmluXTsKKwkJc2FuLT5wYWNrZXRzX3NpbmNlX3N3aXRjaFtzaXplX2Jpbl0rKzsKKwl9
CisJLy8gKnRyeTAgPSBtcnIgPyBzYW4tPnNjaGVkW3JpeF0udDAgOiBBVEhfVFhNQVhUUlk7Citk
b25lOgorCisJLyoKKwkgKiBUaGlzIGJ1ZyB0b3RhbGx5IHN1Y2tzIGFuZCBzaG91bGQgYmUgZml4
ZWQuCisJICoKKwkgKiBGb3Igbm93IHRob3VnaCwgbGV0J3Mgbm90IHBhbmljLCBzbyB3ZSBjYW4g
c3RhcnQgdG8gZmlndXJlCisJICogb3V0IGhvdyB0byBiZXR0ZXIgcmVwcm9kdWNlIGl0LgorCSAq
LworCWlmIChyaXggPCAwIHx8IHJpeCA+PSBydC0+cmF0ZUNvdW50KSB7CisJCXByaW50ZigiJXM6
IEVSUk9SOiByaXggJWQgb3V0IG9mIGJvdW5kcyAocmF0ZUNvdW50PSVkKVxuIiwKKwkJICAgIF9f
ZnVuY19fLAorCQkgICAgcml4LAorCQkgICAgcnQtPnJhdGVDb3VudCk7CisJCSAgICByaXggPSAw
OwkvKiBYWFgganVzdCBkZWZhdWx0IGZvciBub3cgKi8KKwl9CisJS0FTU0VSVChyaXggPj0gMCAm
JiByaXggPCBydC0+cmF0ZUNvdW50LCAoInJpeCBpcyAlZCIsIHJpeCkpOworCisJLy8gKnJpeDAg
PSByaXg7CisJLy8gKnR4cmF0ZSA9IHJ0LT5pbmZvW3JpeF0ucmF0ZUNvZGUKKwkvLyAJfCAoc2hv
cnRQcmVhbWJsZSA/IHJ0LT5pbmZvW3JpeF0uc2hvcnRQcmVhbWJsZSA6IDApOworCXNhbi0+cGFj
a2V0c19zZW50W3NpemVfYmluXSsrOworCisJcmV0dXJuIHJpeDsKKyN1bmRlZiBET1QxMVJBVEUK
KyN1bmRlZiBNQ1MKKyN1bmRlZiBSQVRFCit9CisKK3N0YXRpYyB2b2lkCitzYW1wbGVfcmF0ZXMo
c3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19p
bmZvKQoreworCXN0cnVjdCBpZWVlODAyMTFfc2FtcGxlX25vZGUgKnNhbiA9IG5pLT5uaV9yY3Rs
czsKKwl1aW50OF90IHJpeDAgPSBzYW1wbGVfcmF0ZShuaSwgTlVMTCwgMCk7CisJY29uc3Qgc3Ry
dWN0IHR4c2NoZWR1bGUgKnNjaGVkID0gJnNhbi0+c2NoZWRbcml4MF07CisJc3RydWN0IGllZWU4
MDIxMV9yY19zZXJpZXMgKnJjID0gcmNfaW5mby0+aXJpX3JjOworCisJS0FTU0VSVChyaXgwID09
IHNjaGVkLT5yMCwgKCJyaXgwICgleCkgIT0gc2NoZWQtPnIwICgleCkhXG4iLAorCSAgICByaXgw
LCBzY2hlZC0+cjApKTsKKwkvKiBYWFggKi8KKwlyY1swXS5mbGFncyA9IHJjWzFdLmZsYWdzID0g
cmNbMl0uZmxhZ3MgPSByY1szXS5mbGFncyA9IDA7CisKKwlyY1swXS5yaXggPSBzY2hlZC0+cjA7
CisJcmNbMV0ucml4ID0gc2NoZWQtPnIxOworCXJjWzJdLnJpeCA9IHNjaGVkLT5yMjsKKwlyY1sz
XS5yaXggPSBzY2hlZC0+cjM7CisKKwlyY1swXS50cmllcyA9IHNjaGVkLT50MDsKKwlyY1sxXS50
cmllcyA9IHNjaGVkLT50MTsKKwlyY1syXS50cmllcyA9IHNjaGVkLT50MjsKKwlyY1szXS50cmll
cyA9IHNjaGVkLT50MzsKK30KKworc3RhdGljIHZvaWQKK3VwZGF0ZV9zdGF0cyhjb25zdCBzdHJ1
Y3QgaWVlZTgwMjExdmFwICp2YXAsCisgICAgCSAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2Rl
ICpuaSwKKwkJICBpbnQgZnJhbWVfc2l6ZSwKKwkJICBpbnQgcml4MCwgaW50IHRyaWVzMCwKKwkJ
ICBpbnQgcml4MSwgaW50IHRyaWVzMSwKKwkJICBpbnQgcml4MiwgaW50IHRyaWVzMiwKKwkJICBp
bnQgcml4MywgaW50IHRyaWVzMywKKwkJICBpbnQgc2hvcnRfdHJpZXMsIGludCB0cmllcywKKwkJ
ICBpbnQgbmZyYW1lcywgaW50IG5iYWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9zYW1wbGVfbm9k
ZSAqc2FuID0gbmktPm5pX3JjdGxzOworCXN0cnVjdCBpZWVlODAyMTFfc2FtcGxlICpzYW1wbGUg
PSBzYW4tPnNhbl9zYW1wbGU7CisKKwljb25zdCBpbnQgc2l6ZV9iaW4gPSBzaXplX3RvX2Jpbihm
cmFtZV9zaXplKTsKKwljb25zdCBpbnQgc2l6ZSA9IGJpbl90b19zaXplKHNpemVfYmluKTsKKwor
CWludCBpc19odDQwID0gaWVlZTgwMjExX3JhdGVjdGxfaGFzY2FwX2N3NDAodmFwLCBuaSk7CisJ
aW50IHR0LCB0cmllc19zb19mYXI7CisJaW50IHBjdDsKKworCWlmICghSVNfUkFURV9ERUZJTkVE
KHNhbiwgcml4MCkpCisJCXJldHVybjsKKwl0dCA9IGNhbGNfdXNlY3NfdW5pY2FzdF9wYWNrZXQo
dmFwLCBzaXplLCByaXgwLCBzaG9ydF90cmllcywKKwkJTUlOKHRyaWVzMCwgdHJpZXMpIC0gMSwg
aXNfaHQ0MCk7CisJdHJpZXNfc29fZmFyID0gdHJpZXMwOworCisJaWYgKHRyaWVzMSAmJiB0cmll
c19zb19mYXIgPCB0cmllcykgeworCQlpZiAoIUlTX1JBVEVfREVGSU5FRChzYW4sIHJpeDEpKQor
CQkJcmV0dXJuOworCQl0dCArPSBjYWxjX3VzZWNzX3VuaWNhc3RfcGFja2V0KHZhcCwgc2l6ZSwg
cml4MSwgc2hvcnRfdHJpZXMsCisJCQlNSU4odHJpZXMxICsgdHJpZXNfc29fZmFyLCB0cmllcykg
LSB0cmllc19zb19mYXIgLSAxLCBpc19odDQwKTsKKwkJdHJpZXNfc29fZmFyICs9IHRyaWVzMTsK
Kwl9CisKKwlpZiAodHJpZXMyICYmIHRyaWVzX3NvX2ZhciA8IHRyaWVzKSB7CisJCWlmICghSVNf
UkFURV9ERUZJTkVEKHNhbiwgcml4MikpCisJCQlyZXR1cm47CisJCXR0ICs9IGNhbGNfdXNlY3Nf
dW5pY2FzdF9wYWNrZXQodmFwLCBzaXplLCByaXgyLCBzaG9ydF90cmllcywKKwkJCU1JTih0cmll
czIgKyB0cmllc19zb19mYXIsIHRyaWVzKSAtIHRyaWVzX3NvX2ZhciAtIDEsIGlzX2h0NDApOwor
CQl0cmllc19zb19mYXIgKz0gdHJpZXMyOworCX0KKworCWlmICh0cmllczMgJiYgdHJpZXNfc29f
ZmFyIDwgdHJpZXMpIHsKKwkJaWYgKCFJU19SQVRFX0RFRklORUQoc2FuLCByaXgzKSkKKwkJCXJl
dHVybjsKKwkJdHQgKz0gY2FsY191c2Vjc191bmljYXN0X3BhY2tldCh2YXAsIHNpemUsIHJpeDMs
IHNob3J0X3RyaWVzLAorCQkJTUlOKHRyaWVzMyArIHRyaWVzX3NvX2ZhciwgdHJpZXMpIC0gdHJp
ZXNfc29fZmFyIC0gMSwgaXNfaHQ0MCk7CisJfQorCisJaWYgKHNhbi0+c3RhdHNbc2l6ZV9iaW5d
W3JpeDBdLnRvdGFsX3BhY2tldHMgPCBzYW1wbGUtPnNhbnBsZV9zbW9vdGhpbmdfbWlucGFja2V0
cykgeworCQkvKiBqdXN0IGF2ZXJhZ2UgdGhlIGZpcnN0IGZldyBwYWNrZXRzICovCisJCWludCBh
dmdfdHggPSBzYW4tPnN0YXRzW3NpemVfYmluXVtyaXgwXS5hdmVyYWdlX3R4X3RpbWU7CisJCWlu
dCBwYWNrZXRzID0gc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0udG90YWxfcGFja2V0czsKKwkJ
c2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0uYXZlcmFnZV90eF90aW1lID0gKHR0KyhhdmdfdHgq
cGFja2V0cykpLyhwYWNrZXRzK25mcmFtZXMpOworCX0gZWxzZSB7CisJCS8qIHVzZSBhIGV3bWEg
Ki8KKwkJc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0uYXZlcmFnZV90eF90aW1lID0gCisJCQko
KHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBdLmF2ZXJhZ2VfdHhfdGltZSAqIHNhbXBsZS0+c2Fu
cGxlX3Ntb290aGluZ19yYXRlKSArIAorCQkJICh0dCAqICgxMDAgLSBzYW1wbGUtPnNhbnBsZV9z
bW9vdGhpbmdfcmF0ZSkpKSAvIDEwMDsKKwl9CisJCisJLyoKKwkgKiBYWFggRG9uJ3QgbWFyayB0
aGUgaGlnaGVyIGJpdCByYXRlcyBhcyBhbHNvIGhhdmluZyBmYWlsZWQ7IGFzIHRoaXMKKwkgKiB1
bmZvcnR1bmF0ZWx5IHN0b3BzIHRob3NlIHJhdGVzIGZyb20gYmVpbmcgdGFzdGVkIHdoZW4gdHJ5
aW5nIHRvCisJICogVFguIFRoaXMgaGFwcGVucyB3aXRoIDExbiBhZ2dyZWdhdGlvbi4KKwkgKi8K
KwlpZiAobmZyYW1lcyA9PSBuYmFkKSB7CisJCXNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBdLnN1
Y2Nlc3NpdmVfZmFpbHVyZXMgKz0gbmJhZDsKKworCX0gZWxzZSB7CisJCXNhbi0+c3RhdHNbc2l6
ZV9iaW5dW3JpeDBdLnBhY2tldHNfYWNrZWQgKz0gKG5mcmFtZXMgLSBuYmFkKTsKKwkJc2FuLT5z
dGF0c1tzaXplX2Jpbl1bcml4MF0uc3VjY2Vzc2l2ZV9mYWlsdXJlcyA9IDA7CisJfQorCXNhbi0+
c3RhdHNbc2l6ZV9iaW5dW3JpeDBdLnRyaWVzICs9IHRyaWVzOworCXNhbi0+c3RhdHNbc2l6ZV9i
aW5dW3JpeDBdLmxhc3RfdHggPSB0aWNrczsKKwlzYW4tPnN0YXRzW3NpemVfYmluXVtyaXgwXS50
b3RhbF9wYWNrZXRzICs9IG5mcmFtZXM7CisKKwkvKiB1cGRhdGUgRVdNQSBmb3IgdGhpcyByaXgg
Ki8KKworCS8qIENhbGN1bGF0ZSBwZXJjZW50YWdlIGJhc2VkIG9uIGN1cnJlbnQgcmF0ZSAqLwor
CWlmIChuZnJhbWVzID09IDApCisJCW5mcmFtZXMgPSBuYmFkID0gMTsKKwlwY3QgPSAoKG5mcmFt
ZXMgLSBuYmFkKSAqIDEwMDApIC8gbmZyYW1lczsKKworCWlmIChzYW4tPnN0YXRzW3NpemVfYmlu
XVtyaXgwXS50b3RhbF9wYWNrZXRzIDwKKwkgICAgc2FtcGxlLT5zYW5wbGVfc21vb3RoaW5nX21p
bnBhY2tldHMpIHsKKwkJLyoganVzdCBhdmVyYWdlIHRoZSBmaXJzdCBmZXcgcGFja2V0cyAqLwor
CQlpbnQgYV9wY3QgPSAoc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0ucGFja2V0c19hY2tlZCAq
IDEwMDApIC8KKwkJICAgIChzYW4tPnN0YXRzW3NpemVfYmluXVtyaXgwXS50b3RhbF9wYWNrZXRz
KTsKKwkJc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0uZXdtYV9wY3QgPSBhX3BjdDsKKwl9IGVs
c2UgeworCQkvKiB1c2UgYSBld21hICovCisJCXNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBdLmV3
bWFfcGN0ID0KKwkJCSgoc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0uZXdtYV9wY3QgKiBzYW1w
bGUtPnNhbnBsZV9zbW9vdGhpbmdfcmF0ZSkgKworCQkJIChwY3QgKiAoMTAwIC0gc2FtcGxlLT5z
YW5wbGVfc21vb3RoaW5nX3JhdGUpKSkgLyAxMDA7CisJfQorCisJaWYgKHJpeDAgPT0gc2FuLT5j
dXJyZW50X3NhbXBsZV9yaXhbc2l6ZV9iaW5dKSB7CisJCXNhbi0+c2FtcGxlX3R0W3NpemVfYmlu
XSA9IHR0OworCQlzYW4tPmN1cnJlbnRfc2FtcGxlX3JpeFtzaXplX2Jpbl0gPSAtMTsKKwl9Cit9
CisKK3N0YXRpYyB2b2lkCitzYW1wbGVfdHhfY29tcGxldGUoY29uc3Qgc3RydWN0IGllZWU4MDIx
MXZhcCAqdmFwLAorICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIGludCBvaywK
KyAgICB2b2lkICphcmcxLCB2b2lkICphcmcyKQoreworCXN0cnVjdCBpZWVlODAyMTFfc2FtcGxl
X25vZGUgKnNhbiA9IG5pLT5uaV9yY3RsczsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGVf
dGFibGUgKnJ0ID0gaWVlZTgwMjExX2dldF9yYXRldGFibGUodmFwLT5pdl9pYy0+aWNfY3VyY2hh
bik7CisKKwkvKiBYWFggbmVlZCB0byBjaGFuZ2UgYXJnMiB0byBwb2ludGVyIG9mIGllZWU4MDIx
MV9yY19pbmZvICovCisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gKHN0cnVj
dCBpZWVlODAyMTFfcmNfaW5mbyopYXJnMjsKKworCWludCBmaW5hbF9yaXgsIHNob3J0X3RyaWVz
LCBsb25nX3RyaWVzOworCWludCBuZnJhbWVzLCBuYmFkOworCWludCBmcmFtZV9zaXplLCBtcnI7
CisKKwkvKiB1cGRhdGUgcGVyIHZhcCBzdGF0aXN0aWNzICovCisJaWVlZTgwMjExX3JhdGVjdGxf
dXBkYXRlX3N0YXQodmFwLCByY19pbmZvKTsKKworCWZpbmFsX3JpeCA9IHJ0LT5yYXRlQ29kZVRv
SW5kZXhbcmNfaW5mby0+aXJpX3R4cmF0ZV07CisJc2hvcnRfdHJpZXMgPSByY19pbmZvLT5pcmlf
c2hvcnRyZXRyeTsKKwkvKiBYWFggd2h5IHBsdXMgMSBoZXJlPyAqLworCWxvbmdfdHJpZXMgPSBy
Y19pbmZvLT5pcmlfbG9uZ3JldHJ5ICsgMTsKKworCW5mcmFtZXMgPSByY19pbmZvLT5pcmlfdHhj
bnQ7CisJbmJhZCA9IHJjX2luZm8tPmlyaV9mYWlsY250OworCisJZnJhbWVfc2l6ZSA9IHJjX2lu
Zm8tPmlyaV9mcmFtZWxlbjsKKwltcnIgPSAwOworCisJaWYgKG5mcmFtZXMgPT0gMCkgeworCQly
ZXR1cm47CisJfQorCisJaWYgKGZyYW1lX3NpemUgPT0gMCkJCSAgICAvKiBOQjogc2hvdWxkIG5v
dCBoYXBwZW4gKi8KKwkJZnJhbWVfc2l6ZSA9IDE1MDA7CisKKwlpZiAoc2FuLT5yYXRlbWFzayA9
PSAwKSB7CisJCXJldHVybjsKKwl9CisJCisJaWYgKElFRUU4MDIxMV9SQVRFQ1RMX0hBU0NBUF9N
UlIodmFwKSkKKwkJbXJyID0gMTsKKwkvKiBYWFggY2hlY2sgSFQgcHJvdG1vZGUgdG9vICovCisJ
aWYgKG1yciAmJiAhSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01SUlBST1QodmFwKSkKKwkJbXJy
ID0gMDsKKwkKKwlpZiAoIW1yciB8fCByY19pbmZvLT5pcmlfZmluYWx0c2kgPT0gMCkgeworCQlp
ZiAoIUlTX1JBVEVfREVGSU5FRChzYW4sIGZpbmFsX3JpeCkpIHsKKwkJCXJldHVybjsKKwkJfQor
CQkvKgorCQkgKiBPbmx5IG9uZSByYXRlIHdhcyB1c2VkOyBvcHRpbWl6ZSB3b3JrLgorCQkgKi8K
KwkJdXBkYXRlX3N0YXRzKHZhcCwgbmksIGZyYW1lX3NpemUsIAorCQkJICAgICBmaW5hbF9yaXgs
IGxvbmdfdHJpZXMsCisJCQkgICAgIDAsIDAsCisJCQkgICAgIDAsIDAsCisJCQkgICAgIDAsIDAs
CisJCQkgICAgIHNob3J0X3RyaWVzLCBsb25nX3RyaWVzLAorCQkJICAgICBuZnJhbWVzLCBuYmFk
KTsKKworCX0gZWxzZSB7CisJCWludCBmaW5hbFRTSWR4ID0gcmNfaW5mby0+aXJpX2ZpbmFsdHNp
OworCQlpbnQgaTsKKworCQkvKgorCQkgKiBOQjogc2VyaWVzID4gMCBhcmUgbm90IHBlbmFsaXpl
ZCBmb3IgZmFpbHVyZQorCQkgKiBiYXNlZCBvbiB0aGUgdHJ5IGNvdW50cyB1bmRlciB0aGUgYXNz
dW1wdGlvbgorCQkgKiB0aGF0IGxvc3NlcyBhcmUgb2Z0ZW4gYnVyc3R5IGFuZCBzaW5jZSB3ZQor
CQkgKiBzYW1wbGUgaGlnaGVyIHJhdGVzIDEgdHJ5IGF0IGEgdGltZSBkb2luZyBzbworCQkgKiBt
YXkgdW5mYWlybHkgcGVuYWxpemUgdGhlbS4KKwkJICovCisJCWlmIChyY1swXS50cmllcykgewor
CQkJdXBkYXRlX3N0YXRzKHZhcCwgbmksIGZyYW1lX3NpemUsCisJCQkJICAgICByY1swXS5yaXgs
IHJjWzBdLnRyaWVzLAorCQkJCSAgICAgcmNbMV0ucml4LCByY1sxXS50cmllcywKKwkJCQkgICAg
IHJjWzJdLnJpeCwgcmNbMl0udHJpZXMsCisJCQkJICAgICByY1szXS5yaXgsIHJjWzNdLnRyaWVz
LAorCQkJCSAgICAgc2hvcnRfdHJpZXMsIGxvbmdfdHJpZXMsCisJCQkJICAgICBuZnJhbWVzLCBu
YmFkKTsKKwkJCWxvbmdfdHJpZXMgLT0gcmNbMF0udHJpZXM7CisJCX0KKwkJCisJCWlmIChyY1sx
XS50cmllcyAmJiBmaW5hbFRTSWR4ID4gMCkgeworCQkJdXBkYXRlX3N0YXRzKHZhcCwgbmksIGZy
YW1lX3NpemUsCisJCQkJICAgICByY1sxXS5yaXgsIHJjWzFdLnRyaWVzLAorCQkJCSAgICAgcmNb
Ml0ucml4LCByY1syXS50cmllcywKKwkJCQkgICAgIHJjWzNdLnJpeCwgcmNbM10udHJpZXMsCisJ
CQkJICAgICAwLCAwLAorCQkJCSAgICAgc2hvcnRfdHJpZXMsIGxvbmdfdHJpZXMsCisJCQkJICAg
ICBuZnJhbWVzLCBuYmFkKTsKKwkJCWxvbmdfdHJpZXMgLT0gcmNbMV0udHJpZXM7CisJCX0KKwor
CQlpZiAocmNbMl0udHJpZXMgJiYgZmluYWxUU0lkeCA+IDEpIHsKKwkJCXVwZGF0ZV9zdGF0cyh2
YXAsIG5pLCBmcmFtZV9zaXplLAorCQkJCSAgICAgcmNbMl0ucml4LCByY1syXS50cmllcywKKwkJ
CQkgICAgIHJjWzNdLnJpeCwgcmNbM10udHJpZXMsCisJCQkJICAgICAwLCAwLAorCQkJCSAgICAg
MCwgMCwKKwkJCQkgICAgIHNob3J0X3RyaWVzLCBsb25nX3RyaWVzLAorCQkJCSAgICAgbmZyYW1l
cywgbmJhZCk7CisJCQlsb25nX3RyaWVzIC09IHJjWzJdLnRyaWVzOworCQl9CisKKwkJaWYgKHJj
WzNdLnRyaWVzICYmIGZpbmFsVFNJZHggPiAyKSB7CisJCQl1cGRhdGVfc3RhdHModmFwLCBuaSwg
ZnJhbWVfc2l6ZSwKKwkJCQkgICAgIHJjWzNdLnJpeCwgcmNbM10udHJpZXMsCisJCQkJICAgICAw
LCAwLAorCQkJCSAgICAgMCwgMCwKKwkJCQkgICAgIDAsIDAsCisJCQkJICAgICBzaG9ydF90cmll
cywgbG9uZ190cmllcywKKwkJCQkgICAgIG5mcmFtZXMsIG5iYWQpOworCQl9CisJfQorfQorCitz
dGF0aWMgdm9pZAorc2FtcGxlX3R4X3VwZGF0ZShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2
YXAsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksCisgICAgdm9pZCAqYXJnMSwgdm9p
ZCAqYXJnMiwgdm9pZCAqYXJnMykKK3sKKwkvKiBub3RoaW5nIGhlcmUuICovCit9CisKK3N0YXRp
YyB2b2lkCitzYW1wbGVfc2V0aW50ZXJ2YWwoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFw
LCBpbnQgbXNlY3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9zYW1wbGUgKnNhbXBsZSA9IHZhcC0+
aXZfcnM7CisJaW50IHQ7CisKKwlpZiAobXNlY3MgPCAxMDApCisJCW1zZWNzID0gMTAwOworCXQg
PSBtc2Vjc190b190aWNrcyhtc2Vjcyk7CisJLyogaWVlZTgwMjExX3NhbXBsZSBkb2Vzbid0IGhh
dmUgdGhlIHNhbXBsZV9pbnRlcnZhbCBmaWVsZCBieSBub3cgKi8KKwkvLyBzYW1wbGUtPnNhbXBs
ZV9pbnRlcnZhbCA9ICh0IDwgMSkgPyAxIDogdDsKK30KKworc3RhdGljIHZvaWQKK3NhbXBsZV9z
dGF0cyh2b2lkICphcmcsIHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkpCit7CisJc3RydWN0IGll
ZWU4MDIxMXZhcCAqdmFwID0gbmktPm5pX3ZhcDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZV9u
b2RlICpzYW4gPSBuaS0+bmlfcmN0bHM7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3Rh
YmxlICpydCA9IGllZWU4MDIxMV9nZXRfcmF0ZXRhYmxlKHZhcC0+aXZfaWMtPmljX2N1cmNoYW4p
OworCXVpbnQ2NF90IG1hc2s7CisJaW50IHJpeCwgeTsKKworCXByaW50ZigiXG5bJXNdIHJlZmNu
dCAlZCBzdGF0aWNfcml4ICglZCAlcykgcmF0ZW1hc2sgMHglanhcbiIsCisJICAgIGV0aGVyX3Nw
cmludGYobmktPm5pX21hY2FkZHIpLCBpZWVlODAyMTFfbm9kZV9yZWZjbnQobmkpLAorCSAgICBk
b3QxMXJhdGUocnQsIHNhbi0+c3RhdGljX3JpeCksCisJICAgIGRvdDExcmF0ZV9sYWJlbChydCwg
c2FuLT5zdGF0aWNfcml4KSwKKwkgICAgKHVpbnRtYXhfdClzYW4tPnJhdGVtYXNrKTsKKwlmb3Ig
KHkgPSAwOyB5IDwgTlVNX1BBQ0tFVF9TSVpFX0JJTlM7IHkrKykgeworCQlwcmludGYoIlslNHVd
IGN1ciByaXggJWQgKCVkICVzKSBzaW5jZSBzd2l0Y2g6IHBhY2tldHMgJWQgdGlja3MgJXVcbiIs
CisJCSAgICBiaW5fdG9fc2l6ZSh5KSwgc2FuLT5jdXJyZW50X3JpeFt5XSwKKwkJICAgIGRvdDEx
cmF0ZShydCwgc2FuLT5jdXJyZW50X3JpeFt5XSksCisJCSAgICBkb3QxMXJhdGVfbGFiZWwocnQs
IHNhbi0+Y3VycmVudF9yaXhbeV0pLAorCQkgICAgc2FuLT5wYWNrZXRzX3NpbmNlX3N3aXRjaFt5
XSwgc2FuLT50aWNrc19zaW5jZV9zd2l0Y2hbeV0pOworCQlwcmludGYoIlslNHVdIGxhc3Qgc2Ft
cGxlICglZCAlcykgY3VyIHNhbXBsZSAoJWQgJXMpIHBhY2tldHMgc2VudCAlZFxuIiwKKwkJICAg
IGJpbl90b19zaXplKHkpLAorCQkgICAgZG90MTFyYXRlKHJ0LCBzYW4tPmxhc3Rfc2FtcGxlX3Jp
eFt5XSksCisJCSAgICBkb3QxMXJhdGVfbGFiZWwocnQsIHNhbi0+bGFzdF9zYW1wbGVfcml4W3ld
KSwKKwkJICAgIGRvdDExcmF0ZShydCwgc2FuLT5jdXJyZW50X3NhbXBsZV9yaXhbeV0pLAorCQkg
ICAgZG90MTFyYXRlX2xhYmVsKHJ0LCBzYW4tPmN1cnJlbnRfc2FtcGxlX3JpeFt5XSksCisJCSAg
ICBzYW4tPnBhY2tldHNfc2VudFt5XSk7CisJCXByaW50ZigiWyU0dV0gcGFja2V0cyBzaW5jZSBz
YW1wbGUgJWQgc2FtcGxlIHR0ICV1XG4iLAorCQkgICAgYmluX3RvX3NpemUoeSksIHNhbi0+cGFj
a2V0c19zaW5jZV9zYW1wbGVbeV0sCisJCSAgICBzYW4tPnNhbXBsZV90dFt5XSk7CisJfQorCWZv
ciAobWFzayA9IHNhbi0+cmF0ZW1hc2ssIHJpeCA9IDA7IG1hc2sgIT0gMDsgbWFzayA+Pj0gMSwg
cml4KyspIHsKKwkJaWYgKChtYXNrICYgMSkgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJZm9yICh5
ID0gMDsgeSA8IE5VTV9QQUNLRVRfU0laRV9CSU5TOyB5KyspIHsKKwkJCWlmIChzYW4tPnN0YXRz
W3ldW3JpeF0udG90YWxfcGFja2V0cyA9PSAwKQorCQkJCWNvbnRpbnVlOworCQkJcHJpbnRmKCJb
JTJ1ICVzOiU0dV0gJThqdTolLThqdSAoJTNkJSUpIChFV01BICUzZC4lMWQlJSkgVCAlOGp1IEYg
JTRkIGF2ZyAlNXUgbGFzdCAldVxuIiwKKwkJCSAgICBkb3QxMXJhdGUocnQsIHJpeCksIGRvdDEx
cmF0ZV9sYWJlbChydCwgcml4KSwKKwkJCSAgICBiaW5fdG9fc2l6ZSh5KSwKKwkJCSAgICAodWlu
dG1heF90KSBzYW4tPnN0YXRzW3ldW3JpeF0udG90YWxfcGFja2V0cywKKwkJCSAgICAodWludG1h
eF90KSBzYW4tPnN0YXRzW3ldW3JpeF0ucGFja2V0c19hY2tlZCwKKwkJCSAgICAoaW50KSAoKHNh
bi0+c3RhdHNbeV1bcml4XS5wYWNrZXRzX2Fja2VkICogMTAwVUxMKSAvCisJCQkgICAgIHNhbi0+
c3RhdHNbeV1bcml4XS50b3RhbF9wYWNrZXRzKSwKKwkJCSAgICBzYW4tPnN0YXRzW3ldW3JpeF0u
ZXdtYV9wY3QgLyAxMCwKKwkJCSAgICBzYW4tPnN0YXRzW3ldW3JpeF0uZXdtYV9wY3QgJSAxMCwK
KwkJCSAgICAodWludG1heF90KSBzYW4tPnN0YXRzW3ldW3JpeF0udHJpZXMsCisJCQkgICAgc2Fu
LT5zdGF0c1t5XVtyaXhdLnN1Y2Nlc3NpdmVfZmFpbHVyZXMsCisJCQkgICAgc2FuLT5zdGF0c1t5
XVtyaXhdLmF2ZXJhZ2VfdHhfdGltZSwKKwkJCSAgICB0aWNrcyAtIHNhbi0+c3RhdHNbeV1bcml4
XS5sYXN0X3R4KTsKKwkJfQorCX0KK30KKworc3RhdGljIGludAorc2FtcGxlX3N5c2N0bF9zdGF0
cyhTWVNDVExfSEFORExFUl9BUkdTKQoreworCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IGFy
ZzE7CisJc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSB2YXAtPml2X2lmcC0+aWZfbDJjb207CisJ
aW50IGVycm9yLCB2OworCisJdiA9IDA7CisJZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2ludChvaWRw
LCAmdiwgMCwgcmVxKTsKKwlpZiAoZXJyb3IgfHwgIXJlcS0+bmV3cHRyKQorCQlyZXR1cm4gZXJy
b3I7CisJaWVlZTgwMjExX2l0ZXJhdGVfbm9kZXMoJmljLT5pY19zdGEsIHNhbXBsZV9zdGF0cywg
TlVMTCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NhbXBsZV9zeXNjdGxfc21vb3Ro
aW5nX3JhdGUoU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2
YXAgPSBhcmcxOworCXN0cnVjdCBpZWVlODAyMTFfc2FtcGxlICpzYW1wbGUgPSB2YXAtPml2X3Jz
OworCWludCByYXRlLCBlcnJvcjsKKworCXJhdGUgPSBzYW1wbGUtPnNhbXBsZV9zbW9vdGhpbmdf
cmF0ZTsKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZyYXRlLCAwLCByZXEpOwor
CWlmIChlcnJvciB8fCAhcmVxLT5uZXdwdHIpCisJCXJldHVybiBlcnJvcjsKKwlpZiAoISgwIDw9
IHJhdGUgJiYgcmF0ZSA8IDEwMCkpCisJCXJldHVybiBFSU5WQUw7CisJc2FtcGxlLT5zYW1wbGVf
c21vb3RoaW5nX3JhdGUgPSByYXRlOworCXNhbXBsZS0+c2FtcGxlX3Ntb290aGluZ19taW5wYWNr
ZXRzID0gMTAwIC8gKDEwMCAtIHJhdGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Citz
YW1wbGVfc3lzY3RsX3NhbXBsZV9yYXRlKFNZU0NUTF9IQU5ETEVSX0FSR1MpCit7CisJc3RydWN0
IGllZWU4MDIxMXZhcCAqdmFwID0gYXJnMTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZSAqc2Ft
cGxlID0gdmFwLT5pdl9yczsKKwlpbnQgcmF0ZSwgZXJyb3I7CisKKwlyYXRlID0gc2FtcGxlLT5z
YW1wbGVfcmF0ZTsKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZyYXRlLCAwLCBy
ZXEpOworCWlmIChlcnJvciB8fCAhcmVxLT5uZXdwdHIpCisJCXJldHVybiBlcnJvcjsKKwlpZiAo
ISgyIDw9IHJhdGUgJiYgcmF0ZSA8PSAxMDApKQorCQlyZXR1cm4gRUlOVkFMOworCXNhbXBsZS0+
c2FtcGxlX3JhdGUgPSByYXRlOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorc2FtcGxl
X3N5c2N0bGF0dGFjaChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsCisgICAgc3RydWN0IHN5c2N0
bF9jdHhfbGlzdCAqY3R4LCBzdHJ1Y3Qgc3lzY3RsX29pZCAqdHJlZSkKK3sKKwlTWVNDVExfQURE
X1BST0MoY3R4LCBTWVNDVExfQ0hJTERSRU4odHJlZSksIE9JRF9BVVRPLAorCSAgICAic2FtcGxl
X3Ntb290aGluZ19yYXRlIiwgQ1RMVFlQRV9JTlQgfCBDVExGTEFHX1JXLCB2YXAsIDAsCisJICAg
IHNhbXBsZV9zeXNjdGxfc21vb3RoaW5nX3JhdGUsICJJIiwKKwkgICAgInNhbXBsZTogc21vb3Ro
aW5nIHJhdGUgZm9yIGF2ZyB0eCB0aW1lICglJSkiKTsKKwlTWVNDVExfQUREX1BST0MoY3R4LCBT
WVNDVExfQ0hJTERSRU4odHJlZSksIE9JRF9BVVRPLAorCSAgICAic2FtcGxlX3JhdGUiLCBDVExU
WVBFX0lOVCB8IENUTEZMQUdfUlcsIHZhcCwgMCwKKwkgICAgc2FtcGxlX3N5c2N0bF9zYW1wbGVf
cmF0ZSwgIkkiLAorCSAgICAic2FtcGxlOiBwZXJjZW50IGFpciB0aW1lIGRldm90ZWQgdG8gc2Ft
cGxpbmcgbmV3IHJhdGVzICglJSkiKTsKKwkvKiBYWFggbWF4X3N1Y2Nlc3NpdmVfZmFpbHVyZXMs
IHN0YWxlX2ZhaWx1cmVfdGltZW91dCwgbWluX3N3aXRjaCAqLworCVNZU0NUTF9BRERfUFJPQyhj
dHgsIFNZU0NUTF9DSElMRFJFTih0cmVlKSwgT0lEX0FVVE8sCisJICAgICJzYW1wbGVfc3RhdHMi
LCBDVExUWVBFX0lOVCB8IENUTEZMQUdfUlcsIHZhcCwgMCwKKwkgICAgc2FtcGxlX3N5c2N0bF9z
dGF0cywgIkkiLCAic2FtcGxlOiBwcmludCBzdGF0aXN0aWNzIik7Cit9CkluZGV4OiBuZXQ4MDIx
MS9pZWVlODAyMTFfcmNfc2FtcGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbmV0ODAyMTEvaWVlZTgwMjEx
X3JjX3NhbXBsZS5oCShyZXZpc2lvbiAwKQorKysgbmV0ODAyMTEvaWVlZTgwMjExX3JjX3NhbXBs
ZS5oCShyZXZpc2lvbiAyNTY4MjUpCkBAIC0wLDAgKzEsMjg3IEBACisvKiAkRnJlZUJTRDogaGVh
ZC9zeXMvZGV2L2F0aC9hdGhfcmF0ZS9zYW1wbGUvc2FtcGxlLmggMjQwMzgyIDIwMTItMDgtMTUg
MDc6MTA6MTBaIGFkcmlhbiAkKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSm9obiBC
aWNrZXQKKyAqIENvcHlyaWdodCAoYykgMjAxMyBDaGVuY2hvbmcgUWluIDxjY3FpbkBGcmVlQlNE
Lm9yZz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91
dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHNpbWlsYXIgdG8gdGhl
ICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdyAoIkRpc2NsYWltZXIiKSBhbmQgYW55Cisg
KiAgICByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24gaW5jbHVkaW5nIGEg
c3Vic3RhbnRpYWxseQorICogICAgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBm
dXJ0aGVyIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9m
IHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAg
b2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29m
dHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBOT05JTkZSSU5HRU1FTlQsIE1FUkNIQU5USUJJTElUWQorICogQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSCisgKiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqLworCisjaWZuZGVm
IF9ORVQ4MDIxMV9JRUVFODAyMTFfUkFURUNUTF9TQU1QTEVfSF8KKyNkZWZpbmUgX05FVDgwMjEx
X0lFRUU4MDIxMV9SQVRFQ1RMX1NBTVBMRV9IXworCisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgw
MjExX3JhdGVjdGwuaD4KKworLyoKKyAqIGZvciBub3csIHdlIHRyYWNrIHBlcmZvcm1hbmNlIGZv
ciB0aHJlZSBkaWZmZXJlbnQgcGFja2V0CisgKiBzaXplIGJ1Y2tldHMKKyAqLworI2RlZmluZSBO
VU1fUEFDS0VUX1NJWkVfQklOUyAyCisjZGVmaW5lCVNBTVBMRV9NQVhSQVRFUwk2NAkJLyogTkI6
IGNvcnJlc3BvbmRzIHRvIGhhbCBpbmZvWzMyXSAqLworCisvKgorICogUmF0ZSBjb250cm9sIHNl
dHRpbmdzLgorICovCitzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZSB7CisJc3RydWN0IGllZWU4MDIx
MV9yY19zdGF0IHNhbXBsZV9zdGF0OworCWludAlzYW1wbGVfc21vb3RoaW5nX3JhdGU7CQkJLyog
ZXdtYSBwZXJjZW50YWdlIFswLi45OV0gKi8KKwlpbnQJc2FtcGxlX3Ntb290aGluZ19taW5wYWNr
ZXRzOworCWludAlzYW1wbGVfcmF0ZTsJCQkvKiAldGltZSB0byB0cnkgZGlmZmVyZW50IHR4IHJh
dGVzICovCisJaW50CXNhbXBsZV9tYXhfc3VjY2Vzc2l2ZV9mYWlsdXJlczsKKwlpbnQJc2FtcGxl
X3N0YWxlX2ZhaWx1cmVfdGltZW91dDsJLyogaG93IGxvbmcgdG8gaG9ub3IgbWF4X3N1Y2Nlc3Np
dmVfZmFpbHVyZXMgKi8KKwlpbnQJc2FtcGxlX21pbl9zd2l0Y2g7CQkvKiBtaW4gdGltZSBiZXR3
ZWVuIHJhdGUgY2hhbmdlcyAqLworCWludAlzYW1wbGVfbWluX2dvb2RfcGN0OwkvKiBtaW4gZ29v
ZCBwZXJjZW50YWdlIGZvciBhIHJhdGUgdG8gYmUgY29uc2lkZXJlZCAqLworfTsKKworc3RydWN0
IHJhdGVfc3RhdHMgewkKKwl1bnNpZ25lZCBhdmVyYWdlX3R4X3RpbWU7CisJaW50IHN1Y2Nlc3Np
dmVfZmFpbHVyZXM7CisJdWludDY0X3QgdHJpZXM7CisJdWludDY0X3QgdG90YWxfcGFja2V0czsJ
LyogcGt0cyB0b3RhbCBzaW5jZSBhc3NvYyAqLworCXVpbnQ2NF90IHBhY2tldHNfYWNrZWQ7CS8q
IHBrdHMgYWNrZWQgc2luY2UgYXNzb2MgKi8KKwlpbnQgZXdtYV9wY3Q7CS8qIEVXTUEgcGVyY2Vu
dGFnZSAqLworCXVuc2lnbmVkIHBlcmZlY3RfdHhfdGltZTsgLyogdHJhbnNtaXQgdGltZSBmb3Ig
MCByZXRyaWVzICovCisJaW50IGxhc3RfdHg7Cit9OworCitzdHJ1Y3QgdHhzY2hlZHVsZSB7CisJ
dWludDhfdAl0MCwgcjA7CQkvKiBzZXJpZXMgMDogdHJpZXMsIHJhdGUgY29kZSAqLworCXVpbnQ4
X3QJdDEsIHIxOwkJLyogc2VyaWVzIDE6IHRyaWVzLCByYXRlIGNvZGUgKi8KKwl1aW50OF90CXQy
LCByMjsJCS8qIHNlcmllcyAyOiB0cmllcywgcmF0ZSBjb2RlICovCisJdWludDhfdAl0MywgcjM7
CQkvKiBzZXJpZXMgMzogdHJpZXMsIHJhdGUgY29kZSAqLworfTsKKworLyoKKyAqIFJhdGUgY29u
dHJvbCBzdGF0ZSBmb3IgYSBnaXZlbiBub2RlLgorICovCisvKiBYWFggY2hhbmdlIG5hbWluZyBj
b252ZXJzaW9uPyAqLworc3RydWN0IGllZWU4MDIxMV9zYW1wbGVfbm9kZSB7CisJc3RydWN0IGll
ZWU4MDIxMV9zYW1wbGUgKnNhbl9zYW1wbGU7LyogYmFja3BvaW50ZXIgKi8KKwlpbnQgc3RhdGlj
X3JpeDsJCQkvKiByYXRlIGluZGV4IG9mIGZpeGVkIHR4IHJhdGUgKi8KKwl1aW50NjRfdCByYXRl
bWFzazsJCS8qIGJpdCBtYXNrIG9mIHZhbGlkIHJhdGUgaW5kaWNlcyAqLworCWNvbnN0IHN0cnVj
dCB0eHNjaGVkdWxlICpzY2hlZDsJLyogdHggc2NoZWR1bGUgdGFibGUgKi8KKworCXN0cnVjdCBy
YXRlX3N0YXRzIHN0YXRzW05VTV9QQUNLRVRfU0laRV9CSU5TXVtTQU1QTEVfTUFYUkFURVNdOwor
CWludCBsYXN0X3NhbXBsZV9yaXhbTlVNX1BBQ0tFVF9TSVpFX0JJTlNdOworCisJaW50IGN1cnJl
bnRfc2FtcGxlX3JpeFtOVU1fUEFDS0VUX1NJWkVfQklOU107ICAgICAgIAorCWludCBwYWNrZXRz
X3NlbnRbTlVNX1BBQ0tFVF9TSVpFX0JJTlNdOworCisJaW50IGN1cnJlbnRfcml4W05VTV9QQUNL
RVRfU0laRV9CSU5TXTsKKwlpbnQgcGFja2V0c19zaW5jZV9zd2l0Y2hbTlVNX1BBQ0tFVF9TSVpF
X0JJTlNdOworCXVuc2lnbmVkIHRpY2tzX3NpbmNlX3N3aXRjaFtOVU1fUEFDS0VUX1NJWkVfQklO
U107CisKKwlpbnQgcGFja2V0c19zaW5jZV9zYW1wbGVbTlVNX1BBQ0tFVF9TSVpFX0JJTlNdOwor
CXVuc2lnbmVkIHNhbXBsZV90dFtOVU1fUEFDS0VUX1NJWkVfQklOU107Cit9OworCisjZGVmaW5l
CUlTX1JBVEVfREVGSU5FRChzYW4sIHJpeCkJKCgoc2FuKS0+cmF0ZW1hc2sgJiAoMTw8KHJpeCkp
KSAhPSAwKQorCisjaWZuZGVmIE1JTgorI2RlZmluZQlNSU4oYSxiKQkoKGEpIDwgKGIpID8gKGEp
IDogKGIpKQorI2VuZGlmCisjaWZuZGVmIE1BWAorI2RlZmluZQlNQVgoYSxiKQkoKGEpID4gKGIp
ID8gKGEpIDogKGIpKQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBpbnQgcGFja2V0X3NpemVfYmlu
c1tOVU1fUEFDS0VUX1NJWkVfQklOU10gID0geyAyNTAsIDE2MDAgfTsKKworc3RhdGljIGlubGlu
ZSBpbnQKK2Jpbl90b19zaXplKGludCBpbmRleCkKK3sKKwlyZXR1cm4gcGFja2V0X3NpemVfYmlu
c1tpbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitzaXplX3RvX2JpbihpbnQgc2l6ZSkg
Cit7CisjaWYgTlVNX1BBQ0tFVF9TSVpFX0JJTlMgPiAxCisJaWYgKHNpemUgPD0gcGFja2V0X3Np
emVfYmluc1swXSkKKwkJcmV0dXJuIDA7CisjZW5kaWYKKyNpZiBOVU1fUEFDS0VUX1NJWkVfQklO
UyA+IDIKKwlpZiAoc2l6ZSA8PSBwYWNrZXRfc2l6ZV9iaW5zWzFdKQorCQlyZXR1cm4gMTsKKyNl
bmRpZgorI2lmIE5VTV9QQUNLRVRfU0laRV9CSU5TID4gMworCWlmIChzaXplIDw9IHBhY2tldF9z
aXplX2JpbnNbMl0pCisJCXJldHVybiAyOworI2VuZGlmCisjaWYgTlVNX1BBQ0tFVF9TSVpFX0JJ
TlMgPiA0CisjZXJyb3IgImFkZCBzdXBwb3J0IGZvciBtb3JlIHBhY2tldCBzaXplcyIKKyNlbmRp
ZgorCXJldHVybiBOVU1fUEFDS0VUX1NJWkVfQklOUy0xOworfQorCitzdGF0aWMgdWludDMyX3Qg
c2FtcGxlX3BrdF90eHRpbWUoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpydCwK
Kwl1aW50MzJfdCBmcmFtZUxlbiwgdWludDE2X3QgcmF0ZWl4LCBpbnQgaXNodDQwLCBpbnQgaXNT
aG9ydFByZWFtYmxlKQoreworCXVpbnQ4X3QgcmM7CisgICAgaW50IG51bVN0cmVhbXM7CisKKyAg
ICByYyA9IHJ0LT5pbmZvW3JhdGVpeF0ucmF0ZUNvZGU7CisKKyAgICAvKiBMZWdhY3kgcmF0ZT8g
UmV0dXJuIHRoZSBvbGQgd2F5ICovCisgICAgaWYgKCEgSVNfSFRfUkFURShyYykpCisgICAgCXJl
dHVybiBpZWVlODAyMTFfY29tcHV0ZV9kdXJhdGlvbihydCwgZnJhbWVMZW4sIHJhdGVpeCwgaXNT
aG9ydFByZWFtYmxlKTsKKworICAgIC8qIDExbiBmcmFtZSAtIGV4dHJhY3Qgb3V0IHRoZSBudW1i
ZXIgb2Ygc3BhdGlhbCBzdHJlYW1zICovCisgICAgbnVtU3RyZWFtcyA9IEhUX1JDXzJfU1RSRUFN
UyhyYyk7CisgICAgS0FTU0VSVChudW1TdHJlYW1zID4gMCAmJiBudW1TdHJlYW1zIDw9IDQsCisg
ICAgICAgICgibnVtYmVyIG9mIHNwYXRpYWwgc3RyZWFtcyBuZWVkcyB0byBiZSAxLi4zOiBNQ1Mg
cmF0ZSAweCV4ISIsCisgICAgICAgIHJhdGVpeCkpOworCisgICAgcmV0dXJuIGllZWU4MDIxMV9j
b21wdXRlX2R1cmF0aW9uX2h0KGZyYW1lTGVuLCByYywgbnVtU3RyZWFtcywgaXNodDQwLCBpc1No
b3J0UHJlYW1ibGUpOworfQorCisjZGVmaW5lIFdJRklfQ1dfTUlOIDMxCisjZGVmaW5lIFdJRklf
Q1dfTUFYIDEwMjMKKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgdHJhbnNtaXQgZHVyYXRpb24gb2Yg
YSBmcmFtZS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGNhbGNfdXNlY3NfdW5pY2FzdF9wYWNrZXQo
Y29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLAorCQkJCWludCBsZW5ndGgsCisJCQkJaW50
IHJpeCwgaW50IHNob3J0X3JldHJpZXMsCisJCQkJaW50IGxvbmdfcmV0cmllcywgaW50IGlzX2h0
NDApCit7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpydCA9IGllZWU4MDIx
MV9nZXRfcmF0ZXRhYmxlKHZhcC0+aXZfaWMtPmljX2N1cmNoYW4pOworCXN0cnVjdCBpZWVlODAy
MTFjb20gKmljID0gdmFwLT5pdl9pYzsKKwlpbnQgY3VybW9kZSA9IGllZWU4MDIxMV9jaGFuMm1v
ZGUodmFwLT5pdl9pYy0+aWNfY3VyY2hhbik7CisJCisJdW5zaWduZWQgdF9zbG90LCB0X2RpZnMs
IHRfc2lmczsgCisJaW50IHJ0cywgY3RzOworCWludCB0dCwgeCwgY3csIGNpeDsKKworCWludCB0
dCA9IDA7CisJaW50IHggPSAwOworCWludCBjdyA9IFdJRklfQ1dfTUlOOworCisJS0FTU0VSVChy
dCAhPSBOVUxMLCAoIm5vIHJhdGUgdGFibGUsIG1vZGUgJXUiLCBjdXJtb2RlKSk7CisKKwlpZiAo
cml4ID49IHJ0LT5yYXRlQ291bnQpIHsKKwkJcHJpbnRmKCJib2d1cyByaXggJWQsIG1heCAldSwg
bW9kZSAldVxuIiwKKwkJICAgICAgIHJpeCwgcnQtPnJhdGVDb3VudCwgY3VybW9kZSk7CisJCXJl
dHVybiAwOworCX0KKwljaXggPSBydC0+aW5mb1tyaXhdLmNvbnRyb2xSYXRlOworCS8qIAorCSAq
IFhYWCBnZXR0aW5nIG1hYy9waHkgbGV2ZWwgdGltaW5ncyBzaG91bGQgYmUgZml4ZWQgZm9yIHR1
cmJvCisJICogcmF0ZXMsIGFuZCB0aGVyZSBpcyBwcm9iYWJseSBhIHdheSB0byBnZXQgdGhpcyBm
cm9tIHRoZQorCSAqIGhhbC4uLgorCSAqLworCXN3aXRjaCAocnQtPmluZm9bcml4XS5waHkpIHsK
KwljYXNlIElFRUU4MDIxMV9UX09GRE06CisJCXRfc2xvdCA9IDk7CisJCXRfc2lmcyA9IDE2Owor
CQl0X2RpZnMgPSAyODsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBJRUVFODAyMTFfVF9U
VVJCTzoKKwkJdF9zbG90ID0gOTsKKwkJdF9zaWZzID0gODsKKwkJdF9kaWZzID0gMjg7CisJCWJy
ZWFrOworCWNhc2UgSUVFRTgwMjExX1RfSFQ6CisJCXRfc2xvdCA9IDk7CisJCXRfc2lmcyA9IDg7
CisJCXRfZGlmcyA9IDI4OworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9UX0RTOgorCQkvKiBm
YWxsIHRocm91Z2ggdG8gZGVmYXVsdCAqLworCWRlZmF1bHQ6CisJCS8qIHBnIDIwNSBpZWVlLjgw
Mi4xMS5wZGYgKi8KKwkJdF9zbG90ID0gMjA7CisJCXRfZGlmcyA9IDUwOworCQl0X3NpZnMgPSAx
MDsKKwl9CisKKwlydHMgPSBjdHMgPSAwOworCisJaWYgKChpYy0+aWNfZmxhZ3MgJiBJRUVFODAy
MTFfRl9VU0VQUk9UKSAmJgorCSAgICBydC0+aW5mb1tyaXhdLnBoeSA9PSBJRUVFODAyMTFfVF9P
RkRNKSB7CisJCWlmIChpYy0+aWNfcHJvdG1vZGUgPT0gSUVFRTgwMjExX1BST1RfUlRTQ1RTKQor
CQkJcnRzID0gMTsKKwkJZWxzZSBpZiAoaWMtPmljX3Byb3Rtb2RlID09IElFRUU4MDIxMV9QUk9U
X0NUU09OTFkpCisJCQljdHMgPSAxOworCisJCWludCBwcm90cml4OworICAgIAlpZiAoY3VybW9k
ZSA9PSBJRUVFODAyMTFfTU9ERV8xMUcpCisgICAgCSAgICBwcm90cml4ID0gcnQtPnJhdGVDb2Rl
VG9JbmRleFsyKjJdOworICAgIAllbHNlIAorICAgIAkgICAgcHJvdHJpeCA9IHJ0LT5yYXRlQ29k
ZVRvSW5kZXhbMioxXTsKKyAgICAJaWYgKDB4ZmYgPT0gcHJvdHJpeCkKKyAgICAJCXByb3RyaXgg
PSAwOworCisJCWNpeCA9IHJ0LT5pbmZvW3Byb3RyaXhdLmNvbnRyb2xSYXRlOworCX0KKworCWlm
ICgwIC8qbGVuZ3RoID4gaWMtPmljX3J0c3RocmVzaG9sZCAqLykgeworCQlydHMgPSAxOworCX0K
KworCWlmIChydHMgfHwgY3RzKSB7CisJCWludCBjdHNyYXRlOworCQlpbnQgY3RzZHVyYXRpb24g
PSAwOworCisJCS8qIE5COiB0aGlzIGlzIGludGVudGlvbmFsbHkgbm90IGEgcnVudGltZSBjaGVj
ayAqLworCQlLQVNTRVJUKGNpeCA8IHJ0LT5yYXRlQ291bnQsCisJCSAgICAoImJvZ3VzIGNpeCAl
ZCwgbWF4ICV1LCBtb2RlICV1XG4iLCBjaXgsIHJ0LT5yYXRlQ291bnQsCisJCSAgICAgY3VybW9k
ZSkpOworCisJCWN0c3JhdGUgPSBydC0+aW5mb1tjaXhdLnJhdGVDb2RlIHwgcnQtPmluZm9bY2l4
XS5zaG9ydFByZWFtYmxlOworCQlpZiAocnRzKQkJLyogU0lGUyArIENUUyAqLworCQkJY3RzZHVy
YXRpb24gKz0gcnQtPmluZm9bY2l4XS5zcEFja0R1cmF0aW9uOworCisJCS8qIFhYWCBhc3N1bWVz
IHNob3J0IHByZWFtYmxlICovCisJCWN0c2R1cmF0aW9uICs9IHNhbXBsZV9wa3RfdHh0aW1lKHJ0
LCBsZW5ndGgsIHJpeCwgaXNfaHQ0MCwgMCk7CisKKwkJaWYgKGN0cykJLyogU0lGUyArIEFDSyAq
LworCQkJY3RzZHVyYXRpb24gKz0gcnQtPmluZm9bY2l4XS5zcEFja0R1cmF0aW9uOworCisJCXR0
ICs9IChzaG9ydF9yZXRyaWVzICsgMSkgKiBjdHNkdXJhdGlvbjsKKwl9CisJdHQgKz0gdF9kaWZz
OworCisJLyogWFhYIGFzc3VtZXMgc2hvcnQgcHJlYW1ibGUgKi8KKwl0dCArPSAobG9uZ19yZXRy
aWVzKzEpKnNhbXBsZV9wa3RfdHh0aW1lKHJ0LCBsZW5ndGgsIHJpeCwgaXNfaHQ0MCwgMCk7CisK
Kwl0dCArPSAobG9uZ19yZXRyaWVzKzEpKih0X3NpZnMgKyBydC0+aW5mb1tyaXhdLnNwQWNrRHVy
YXRpb24pOworCisJZm9yICh4ID0gMDsgeCA8PSBzaG9ydF9yZXRyaWVzICsgbG9uZ19yZXRyaWVz
OyB4KyspIHsKKwkJY3cgPSBNSU4oV0lGSV9DV19NQVgsIChjdyArIDEpICogMik7CisJCXR0ICs9
ICh0X3Nsb3QgKiBjdy8yKTsKKwl9CisJcmV0dXJuIHR0OworfQorCisjZW5kaWYgLyogX05FVDgw
MjExX0lFRUU4MDIxMV9SQVRFQ1RMX1NBTVBMRV9IXyAqLwpJbmRleDogbmV0ODAyMTEvaWVlZTgw
MjExX3JhdGVjdGxfbm9uZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5ldDgwMjExL2llZWU4MDIxMV9yYXRl
Y3RsX25vbmUuaAkocmV2aXNpb24gMCkKKysrIG5ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsX25v
bmUuaAkocmV2aXNpb24gMjU2ODI1KQpAQCAtMCwwICsxLDM4IEBACisvKi0KKyAqIENvcHlyaWdo
dCAoYykgMjAxMyBDaGVuY2hvbmcgUWluIDxjY3FpbkBGcmVlQlNELm9yZz4KKyAqCisgKiBQZXJt
aXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJl
IGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRl
ZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg
cGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRX
QVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJS
QU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1Q
TElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJ
UkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwor
ICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRT
LCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RI
RVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBX
SVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZu
ZGVmIF9ORVQ4MDIxMV9JRUVFODAyMTFfUkFURUNUTF9OT05FX0hfCisjZGVmaW5lIF9ORVQ4MDIx
MV9JRUVFODAyMTFfUkFURUNUTF9OT05FX0hfCisKKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAy
MTFfcmF0ZWN0bC5oPgorCisvKgorICogUmF0ZSBjb250cm9sIHNldHRpbmdzLgorICovCisKK3N0
cnVjdCBpZWVlODAyMTFfbm9uZSB7CisJc3RydWN0IGllZWU4MDIxMV9yY19zdGF0IG5vbmVfc3Rh
dDsKKwkvKiBvdGhlciBzdHVmZnMgKi8KK307CisKKy8qCisgKiBSYXRlIGNvbnRyb2wgc3RhdGUg
Zm9yIGEgZ2l2ZW4gbm9kZS4KKyAqLworc3RydWN0IGllZWU4MDIxMV9ub25lX25vZGUgeworCXN0
cnVjdCBpZWVlODAyMTFfbm9uZSAqbm9uX25vbmU7Cit9OworCisjZW5kaWYgLyogX05FVDgwMjEx
X0lFRUU4MDIxMV9SQVRFQ1RMX05PTkVfSF8gKi8KSW5kZXg6IG5ldDgwMjExL2llZWU4MDIxMV9y
Y19zYW1wbGVfdHhzY2hlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5ldDgwMjExL2llZWU4MDIxMV9yY19z
YW1wbGVfdHhzY2hlZC5oCShyZXZpc2lvbiAwKQorKysgbmV0ODAyMTEvaWVlZTgwMjExX3JjX3Nh
bXBsZV90eHNjaGVkLmgJKHJldmlzaW9uIDI1NjgyNSkKQEAgLTAsMCArMSwyNDEgQEAKKy8qICRG
cmVlQlNEOiBoZWFkL3N5cy9kZXYvYXRoL2F0aF9yYXRlL3NhbXBsZS90eF9zY2hlZHVsZXMuaCAy
NDAzODQgMjAxMi0wOC0xNSAwNzo1MDo0MlogYWRyaWFuICQqLworCisvKi0KKyAqIENvcHlyaWdo
dCAoYykgMjAwNSBKb2huIEJpY2tldAorICogQ29weXJpZ2h0IChjKSAyMDEzIENoZW5jaG9uZyBR
aW4gPGNjcWluQEZyZWVCU0Qub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICog
ICAgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93ICgiRGlzY2xh
aW1lciIpIGFuZCBhbnkKKyAqICAgIHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQg
dXBvbiBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5CisgKiAgICBzaW1pbGFyIERpc2NsYWltZXIg
cmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVp
dGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3Ig
dGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJu
YXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIg
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq
IE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTklORlJJTkdFTUVOVCwgTUVSQ0hBTlRJQklM
SVRZCisgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIKKyAqIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VT
LgorICoKKyAqLworI2lmbmRlZglfTkVUODAyMTFfSUVFRTgwMjExX1JBVEVDVExfU0FNUExFX1RY
U0NIRURVTEVTX0hfCisjZGVmaW5lCV9ORVQ4MDIxMV9JRUVFODAyMTFfUkFURUNUTF9TQU1QTEVf
VFhTQ0hFRFVMRVNfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjZGVmaW5lIEEoX3Ip
IFwKKyAgICAoKChfcikgPT0gNikgICA/IDAgOiAoKChfcikgPT0gOSkgICA/IDEgOiAoKChfcikg
PT0gMTIpICA/IDIgOiBcCisgICAgKCgoX3IpID09IDE4KSAgPyAzIDogKCgoX3IpID09IDI0KSAg
PyA0IDogKCgoX3IpID09IDM2KSAgPyA1IDogXAorICAgICgoKF9yKSA9PSA0OCkgID8gNiA6ICgo
KF9yKSA9PSA1NCkgID8gNyA6IDApKSkpKSkpKQorc3RhdGljIGNvbnN0IHN0cnVjdCB0eHNjaGVk
dWxlIHNlcmllc18xMWFbXSA9IHsKKwl7IDMsQSggNiksIDMsQSggIDYpLCAwLEEoICA2KSwgMCxB
KCA2KSB9LAkvKiAgIDZNYi9zICovCisJeyA0LEEoIDkpLCAzLEEoICA2KSwgNCxBKCAgNiksIDAs
QSggNikgfSwJLyogICA5TWIvcyAqLworCXsgNCxBKDEyKSwgMyxBKCAgNiksIDQsQSggIDYpLCAw
LEEoIDYpIH0sCS8qICAxMk1iL3MgKi8KKwl7IDQsQSgxOCksIDMsQSggMTIpLCA0LEEoICA2KSwg
MixBKCA2KSB9LAkvKiAgMThNYi9zICovCisJeyA0LEEoMjQpLCAzLEEoIDE4KSwgNCxBKCAxMiks
IDIsQSggNikgfSwJLyogIDI0TWIvcyAqLworCXsgNCxBKDM2KSwgMyxBKCAyNCksIDQsQSggMTgp
LCAyLEEoIDYpIH0sCS8qICAzNk1iL3MgKi8KKwl7IDQsQSg0OCksIDMsQSggMzYpLCA0LEEoIDI0
KSwgMixBKDEyKSB9LAkvKiAgNDhNYi9zICovCisJeyA0LEEoNTQpLCAzLEEoIDQ4KSwgNCxBKCAz
NiksIDIsQSgyNCkgfQkvKiAgNTRNYi9zICovCit9OworCisjZGVmaW5lIE5BMShfcikgXAorCSgo
KF9yKSA9PSA2LjUpICA/IDggOiAoKChfcikgPT0gMTMpICA/ICA5IDogKCgoX3IpID09IDE5LjUp
PyAxMCA6IFwKKwkoKChfcikgPT0gMjYpICA/IDExIDogKCgoX3IpID09IDM5KSAgPyAxMiA6ICgo
KF9yKSA9PSA1MikgID8gMTMgOiBcCisJKCgoX3IpID09IDU4LjUpPyAxNCA6ICgoKF9yKSA9PSA2
NSkgID8gMTUgOiAwKSkpKSkpKSkKKyNkZWZpbmUgTkEyKF9yKSBcCisJKCgoX3IpID09IDEzKSA/
IDE2IDogKCgoX3IpID09IDI2KSA/IDE3IDogKCgoX3IpID09IDM5KSA/IDE4IDogXAorCSgoKF9y
KSA9PSA1MikgPyAxOSA6ICgoKF9yKSA9PSA3OCkgPyAyMCA6ICgoKF9yKSA9PSAxMDQpPyAyMSA6
IFwKKwkoKChfcikgPT0gMTE3KT8gMjIgOiAoKChfcikgPT0gMTMwKT8gMjMgOiAwKSkpKSkpKSkK
KyNkZWZpbmUgTkEzKF9yKSBcCisJKCgoX3IpID09IDE5LjUpICA/IDI0IDogKCgoX3IpID09IDM5
KSA/IDI1IDogKCgoX3IpID09IDU4LjUpICA/IDI2IDogXAorCSgoKF9yKSA9PSA3OCkgID8gMjcg
OiAoKChfcikgPT0gMTE3KSA/IDI4IDogKCgoX3IpID09IDE1NikgPyAyOSA6IFwKKwkoKChfcikg
PT0gMTc1LjUpID8gMzAgOiAoKChfcikgPT0gMTk1KT8gMzEgOiAwKSkpKSkpKSkKK3N0YXRpYyBj
b25zdCBzdHJ1Y3QgdHhzY2hlZHVsZSBzZXJpZXNfMTFuYVtdID0geworCXsgMyxBKCA2KSwgMyxB
KCAgNiksIDAsQSggIDYpLCAwLEEoIDYpIH0sICAgICAgIC8qICAgNk1iL3MgKi8KKwl7IDQsQSgg
OSksIDMsQSggIDYpLCA0LEEoICA2KSwgMCxBKCA2KSB9LCAgICAgICAvKiAgIDlNYi9zICovCisJ
eyA0LEEoMTIpLCAzLEEoICA2KSwgNCxBKCAgNiksIDAsQSggNikgfSwgICAgICAgLyogIDEyTWIv
cyAqLworCXsgNCxBKDE4KSwgMyxBKCAxMiksIDQsQSggIDYpLCAyLEEoIDYpIH0sICAgICAgIC8q
ICAxOE1iL3MgKi8KKwl7IDQsQSgyNCksIDMsQSggMTgpLCA0LEEoIDEyKSwgMixBKCA2KSB9LCAg
ICAgICAvKiAgMjRNYi9zICovCisJeyA0LEEoMzYpLCAzLEEoIDI0KSwgNCxBKCAxOCksIDIsQSgg
NikgfSwgICAgICAgLyogIDM2TWIvcyAqLworCXsgNCxBKDQ4KSwgMyxBKCAzNiksIDQsQSggMjQp
LCAyLEEoMTIpIH0sICAgICAgIC8qICA0OE1iL3MgKi8KKwl7IDQsQSg1NCksIDMsQSggNDgpLCA0
LEEoIDM2KSwgMixBKDI0KSB9LCAgICAgICAvKiAgNTRNYi9zICovCisKKwkvKiAxIHN0cmVhbSBy
YXRlcyAqLworCisJeyAzLE5BMSggNi41KSwgMyxOQTEoIDYuNSksIDAsTkExKCA2LjUpLCAwLE5B
MSg2LjUpIH0sICAvKiA2LjVNYi9zICovCisJeyA0LE5BMSggIDEzKSwgMyxOQTEoIDYuNSksIDQs
TkExKCA2LjUpLCAwLE5BMSg2LjUpIH0sICAvKiAgMTNNYi9zICovCisJeyA0LE5BMSgxOS41KSwg
MyxOQTEoIDYuNSksIDQsTkExKCA2LjUpLCAwLE5BMSg2LjUpIH0sICAvKjE5LjVNYi9zICovCisJ
eyA0LE5BMSggIDI2KSwgMyxOQTEoMTkuNSksIDQsTkExKCA2LjUpLCAyLE5BMSg2LjUpIH0sICAv
KiAgMjZNYi9zICovCisJeyA0LE5BMSggIDM5KSwgMyxOQTEoICAyNiksIDQsTkExKDE5LjUpLCAy
LE5BMSg2LjUpIH0sICAvKiAgMzlNYi9zICovCisJeyA0LE5BMSggIDUyKSwgMyxOQTEoICAzOSks
IDQsTkExKCAgMjYpLCAyLE5BMSg2LjUpIH0sICAvKiAgNTJNYi9zICovCisJeyA0LE5BMSg1OC41
KSwgMyxOQTEoICA1MiksIDQsTkExKCAgMzkpLCAyLE5BMSggMTMpIH0sICAvKjU4LjVNYi9zICov
CisJeyA0LE5BMSggIDY1KSwgMyxOQTEoNTguNSksIDQsTkExKCAgNTIpLCAyLE5BMSggMTMpIH0s
ICAvKiAgNjVNYi9zICovCisKKwkvKiAyIHN0cmVhbSByYXRlcyAqLworCisJeyAzLE5BMiggIDEz
KSwgMyxOQTIoICAxMyksIDAsTkEyKCAgMTMpLCAwLE5BMiggMTMpIH0sICAvKiAgMTNNYi9zICov
CisJeyA0LE5BMiggIDI2KSwgMyxOQTIoICAxMyksIDQsTkEyKCAgMTMpLCAwLE5BMiggMTMpIH0s
ICAvKiAgMjZNYi9zICovCisJeyA0LE5BMiggIDM5KSwgMyxOQTIoICAyNiksIDQsTkEyKCAgMTMp
LCAyLE5BMiggMTMpIH0sICAvKiAgMzlNYi9zICovCisJeyA0LE5BMiggIDUyKSwgMyxOQTIoICAz
OSksIDQsTkEyKCAgMjYpLCAyLE5BMiggMTMpIH0sICAvKiAgNTJNYi9zICovCisJeyA0LE5BMigg
IDc4KSwgMyxOQTIoICA1MiksIDQsTkEyKCAgMzkpLCAyLE5BMiggMTMpIH0sICAvKiAgNzhNYi9z
ICovCisJeyA0LE5BMiggMTA0KSwgMyxOQTIoICA3OCksIDQsTkEyKCAgNTIpLCAyLE5BMiggMTMp
IH0sICAvKiAxMDRNYi9zICovCisJeyA0LE5BMiggMTE3KSwgMyxOQTIoIDEwNCksIDQsTkEyKCAg
NzgpLCAyLE5BMiggMjYpIH0sICAvKiAxMTdNYi9zICovCisJeyA0LE5BMiggMTMwKSwgMyxOQTIo
IDExNyksIDQsTkEyKCAxMDQpLCAyLE5BMiggMjYpIH0sICAgLyogMTMwTWIvcyAqLworCisJLyog
MyBzdHJlYW0gcmF0ZXMgKi8KKworCXsgMyxOQTMoMTkuNSksIDMsTkEzKDE5LjUpLCAwLE5BMygx
OS41KSwgMCxOQTMoMTkuNSkgfSwgIC8qICAxOU1iL3MgKi8KKwl7IDMsTkEzKCAgMzkpLCAzLE5B
MygxOS41KSwgMCxOQTMoMTkuNSksIDAsTkEzKDE5LjUpIH0sICAvKiAgMzlNYi9zICovCisJeyAz
LE5BMyg1OC41KSwgMyxOQTMoICAzOSksIDAsTkEzKDE5LjUpLCAwLE5BMygxOS41KSB9LCAgLyog
IDU4TWIvcyAqLworCXsgMyxOQTMoICA3OCksIDMsTkEzKDU4LjUpLCAwLE5BMyggIDM5KSwgMCxO
QTMoMTkuNSkgfSwgIC8qICA3OE1iL3MgKi8KKwl7IDMsTkEzKCAxMTcpLCAzLE5BMyggIDc4KSwg
MCxOQTMoNTguNSksIDAsTkEzKDE5LjUpIH0sICAvKiAxMTdNYi9zICovCisJeyAzLE5BMyggMTU2
KSwgMyxOQTMoIDExNyksIDAsTkEzKCAgNzgpLCAwLE5BMygxOS41KSB9LCAgLyogIDE1Nk1iL3Mg
Ki8KKwl7IDMsTkEzKDE3NS41KSwgMyxOQTMoIDE1NiksIDAsTkEzKCAxMTcpLCAwLE5BMyggIDM5
KSB9LCAgLyogIDE3NU1iL3MgKi8KKwl7IDMsTkEzKCAxOTUpLCAzLE5BMyggMTk1KSwgMCxOQTMo
IDE1NiksIDAsTkEzKDU4LjUpIH0sICAvKiAxOTVNYi9zICovCit9OworI3VuZGVmIEEKKyN1bmRl
ZiBOQTMKKyN1bmRlZiBOQTIKKyN1bmRlZiBOQTEKKworI2RlZmluZSBHKF9yKSBcCisgICAgKCgo
X3IpID09IDEpICAgPyAwIDogKCgoX3IpID09IDIpICAgPyAxIDogKCgoX3IpID09IDUuNSkgPyAy
IDogXAorICAgICgoKF9yKSA9PSAxMSkgID8gMyA6ICgoKF9yKSA9PSA2KSAgID8gNCA6ICgoKF9y
KSA9PSA5KSAgID8gNSA6IFwKKyAgICAoKChfcikgPT0gMTIpICA/IDYgOiAoKChfcikgPT0gMTgp
ICA/IDcgOiAoKChfcikgPT0gMjQpICA/IDggOiBcCisgICAgKCgoX3IpID09IDM2KSAgPyA5IDog
KCgoX3IpID09IDQ4KSAgPyAxMCA6ICgoKF9yKSA9PSA1NCkgID8gMTEgOiAwKSkpKSkpKSkpKSkp
CitzdGF0aWMgY29uc3Qgc3RydWN0IHR4c2NoZWR1bGUgc2VyaWVzXzExZ1tdID0geworCXsgMyxH
KCAxKSwgMyxHKCAgMSksIDAsRyggIDEpLCAwLEcoIDEpIH0sCS8qICAgMU1iL3MgKi8KKwl7IDQs
RyggMiksIDMsRyggIDEpLCA0LEcoICAxKSwgMCxHKCAxKSB9LAkvKiAgIDJNYi9zICovCisJeyA0
LEcoNS41KSwzLEcoICAyKSwgNCxHKCAgMSksIDIsRyggMSkgfSwJLyogNS41TWIvcyAqLworCXsg
NCxHKDExKSwgMyxHKDUuNSksIDQsRyggIDIpLCAyLEcoIDEpIH0sCS8qICAxMU1iL3MgKi8KKwl7
IDQsRyggNiksIDMsRyg1LjUpLCA0LEcoICAyKSwgMixHKCAxKSB9LAkvKiAgIDZNYi9zICovCisJ
eyA0LEcoIDkpLCAzLEcoICA2KSwgNCxHKDUuNSksIDIsRyggMSkgfSwJLyogICA5TWIvcyAqLwor
CXsgNCxHKDEyKSwgMyxHKCAxMSksIDQsRyg1LjUpLCAyLEcoIDEpIH0sCS8qICAxMk1iL3MgKi8K
Kwl7IDQsRygxOCksIDMsRyggMTIpLCA0LEcoIDExKSwgMixHKCAxKSB9LAkvKiAgMThNYi9zICov
CisJeyA0LEcoMjQpLCAzLEcoIDE4KSwgNCxHKCAxMiksIDIsRyggMSkgfSwJLyogIDI0TWIvcyAq
LworCXsgNCxHKDM2KSwgMyxHKCAyNCksIDQsRyggMTgpLCAyLEcoIDEpIH0sCS8qICAzNk1iL3Mg
Ki8KKwl7IDQsRyg0OCksIDMsRyggMzYpLCA0LEcoIDI0KSwgMixHKCAxKSB9LAkvKiAgNDhNYi9z
ICovCisJeyA0LEcoNTQpLCAzLEcoIDQ4KSwgNCxHKCAzNiksIDIsRyggMSkgfQkvKiAgNTRNYi9z
ICovCit9OworCisjZGVmaW5lIE5HMShfcikgXAorCSgoKF9yKSA9PSA2LjUpID8gMTIgOiAoKChf
cikgPT0gMTMpID8gMTMgOiAoKChfcikgPT0gMTkuNSk/IDE0IDogXAorCSgoKF9yKSA9PSAyNikg
ID8gMTUgOiAoKChfcikgPT0gMzkpID8gMTYgOiAoKChfcikgPT0gNTIpICA/IDE3IDogXAorCSgo
KF9yKSA9PSA1OC41KT8gMTggOiAoKChfcikgPT0gNjUpID8gMTkgOiAwKSkpKSkpKSkKKyNkZWZp
bmUgTkcyKF9yKSBcCisJKCgoX3IpID09IDEzKSAgPyAyMCA6ICgoKF9yKSA9PSAyNikgPyAyMSA6
ICgoKF9yKSA9PSAzOSkgID8gMjIgOiBcCisJKCgoX3IpID09IDUyKSAgPyAyMyA6ICgoKF9yKSA9
PSA3OCkgPyAyNCA6ICgoKF9yKSA9PSAxMDQpID8gMjUgOiBcCisJKCgoX3IpID09IDExNykgPyAy
NiA6ICgoKF9yKSA9PSAxMzApPyAyNyA6IDApKSkpKSkpKQorI2RlZmluZSBORzMoX3IpIFwKKwko
KChfcikgPT0gMTkuNSkgID8gMjggOiAoKChfcikgPT0gMzkpID8gMjkgOiAoKChfcikgPT0gNTgu
NSkgID8gMzAgOiBcCisJKCgoX3IpID09IDc4KSAgPyAzMSA6ICgoKF9yKSA9PSAxMTcpID8gMzIg
OiAoKChfcikgPT0gMTU2KSA/IDMzIDogXAorCSgoKF9yKSA9PSAxNzUuNSkgPyAzNCA6ICgoKF9y
KSA9PSAxOTUpPyAzNSA6IDApKSkpKSkpKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHR4c2NoZWR1
bGUgc2VyaWVzXzExbmdbXSA9IHsKKwl7IDMsRyggMSksIDMsRyggIDEpLCAwLEcoICAxKSwgMCxH
KCAxKSB9LCAgICAgICAvKiAgIDFNYi9zICovCisJeyA0LEcoIDIpLCAzLEcoICAxKSwgNCxHKCAg
MSksIDAsRyggMSkgfSwgICAgICAgLyogICAyTWIvcyAqLworCXsgNCxHKDUuNSksMyxHKCAgMiks
IDQsRyggIDEpLCAyLEcoIDEpIH0sICAgICAgIC8qIDUuNU1iL3MgKi8KKwl7IDQsRygxMSksIDMs
Ryg1LjUpLCA0LEcoICAyKSwgMixHKCAxKSB9LCAgICAgICAvKiAgMTFNYi9zICovCisJeyA0LEco
IDYpLCAzLEcoNS41KSwgNCxHKCAgMiksIDIsRyggMSkgfSwgICAgICAgLyogICA2TWIvcyAqLwor
CXsgNCxHKCA5KSwgMyxHKCAgNiksIDQsRyg1LjUpLCAyLEcoIDEpIH0sICAgICAgIC8qICAgOU1i
L3MgKi8KKwl7IDQsRygxMiksIDMsRyggMTEpLCA0LEcoNS41KSwgMixHKCAxKSB9LCAgICAgICAv
KiAgMTJNYi9zICovCisJeyA0LEcoMTgpLCAzLEcoIDEyKSwgNCxHKCAxMSksIDIsRyggMSkgfSwg
ICAgICAgLyogIDE4TWIvcyAqLworCXsgNCxHKDI0KSwgMyxHKCAxOCksIDQsRyggMTIpLCAyLEco
IDEpIH0sICAgICAgIC8qICAyNE1iL3MgKi8KKwl7IDQsRygzNiksIDMsRyggMjQpLCA0LEcoIDE4
KSwgMixHKCAxKSB9LCAgICAgICAvKiAgMzZNYi9zICovCisJeyA0LEcoNDgpLCAzLEcoIDM2KSwg
NCxHKCAyNCksIDIsRyggMSkgfSwgICAgICAgLyogIDQ4TWIvcyAqLworCXsgNCxHKDU0KSwgMyxH
KCA0OCksIDQsRyggMzYpLCAyLEcoIDEpIH0sICAgICAgIC8qICA1NE1iL3MgKi8KKworCS8qIDEg
c3RyZWFtIHJhdGVzICovCisKKwl7IDMsTkcxKCA2LjUpLCAzLE5HMSggNi41KSwgMCxORzEoIDYu
NSksIDAsTkcxKDYuNSkgfSwgIC8qIDYuNU1iL3MgKi8KKwl7IDQsTkcxKCAgMTMpLCAzLE5HMSgg
Ni41KSwgNCxORzEoIDYuNSksIDAsTkcxKDYuNSkgfSwgIC8qICAxM01iL3MgKi8KKwl7IDQsTkcx
KDE5LjUpLCAzLE5HMSggNi41KSwgNCxORzEoIDYuNSksIDAsTkcxKDYuNSkgfSwgIC8qMTkuNU1i
L3MgKi8KKwl7IDQsTkcxKCAgMjYpLCAzLE5HMSgxOS41KSwgNCxORzEoIDYuNSksIDIsTkcxKDYu
NSkgfSwgIC8qICAyNk1iL3MgKi8KKwl7IDQsTkcxKCAgMzkpLCAzLE5HMSggIDI2KSwgNCxORzEo
MTkuNSksIDIsTkcxKDYuNSkgfSwgIC8qICAzOU1iL3MgKi8KKwl7IDQsTkcxKCAgNTIpLCAzLE5H
MSggIDM5KSwgNCxORzEoICAyNiksIDIsTkcxKDYuNSkgfSwgIC8qICA1Mk1iL3MgKi8KKwl7IDQs
TkcxKDU4LjUpLCAzLE5HMSggIDUyKSwgNCxORzEoICAzOSksIDIsTkcxKCAxMykgfSwgIC8qNTgu
NU1iL3MgKi8KKwl7IDQsTkcxKCAgNjUpLCAzLE5HMSg1OC41KSwgNCxORzEoICA1MiksIDIsTkcx
KCAxMykgfSwgIC8qICA2NU1iL3MgKi8KKworCS8qIDIgc3RyZWFtIHJhdGVzICovCisKKwl7IDMs
TkcyKCAgMTMpLCAzLE5HMiggIDEzKSwgMCxORzIoICAxMyksIDAsTkcyKCAxMykgfSwgIC8qICAx
M01iL3MgKi8KKwl7IDQsTkcyKCAgMjYpLCAzLE5HMiggIDEzKSwgNCxORzIoICAxMyksIDAsTkcy
KCAxMykgfSwgIC8qICAyNk1iL3MgKi8KKwl7IDQsTkcyKCAgMzkpLCAzLE5HMiggIDI2KSwgNCxO
RzIoICAxMyksIDIsTkcyKCAxMykgfSwgIC8qICAzOU1iL3MgKi8KKwl7IDQsTkcyKCAgNTIpLCAz
LE5HMiggIDM5KSwgNCxORzIoICAyNiksIDIsTkcyKCAxMykgfSwgIC8qICA1Mk1iL3MgKi8KKwl7
IDQsTkcyKCAgNzgpLCAzLE5HMiggIDUyKSwgNCxORzIoICAzOSksIDIsTkcyKCAxMykgfSwgIC8q
ICA3OE1iL3MgKi8KKwl7IDQsTkcyKCAxMDQpLCAzLE5HMiggIDc4KSwgNCxORzIoICA1MiksIDIs
TkcyKCAxMykgfSwgIC8qIDEwNE1iL3MgKi8KKwl7IDQsTkcyKCAxMTcpLCAzLE5HMiggMTA0KSwg
NCxORzIoICA3OCksIDIsTkcyKCAyNikgfSwgIC8qIDExN01iL3MgKi8KKwl7IDQsTkcyKCAxMzAp
LCAzLE5HMiggMTE3KSwgNCxORzIoIDEwNCksIDIsTkcyKCAyNikgfSwgIC8qIDEzME1iL3MgKi8K
KworCS8qIDMgc3RyZWFtIHJhdGVzICovCisKKwl7IDMsTkczKDE5LjUpLCAzLE5HMygxOS41KSwg
MCxORzMoMTkuNSksIDAsTkczKDE5LjUpIH0sICAvKiAgMTlNYi9zICovCisJeyAzLE5HMyggIDM5
KSwgMyxORzMoMTkuNSksIDAsTkczKDE5LjUpLCAwLE5HMygxOS41KSB9LCAgLyogIDM5TWIvcyAq
LworCXsgMyxORzMoNTguNSksIDMsTkczKCAgMzkpLCAwLE5HMygxOS41KSwgMCxORzMoMTkuNSkg
fSwgIC8qICA1OE1iL3MgKi8KKwl7IDMsTkczKCAgNzgpLCAzLE5HMyg1OC41KSwgMCxORzMoICAz
OSksIDAsTkczKDE5LjUpIH0sICAvKiAgNzhNYi9zICovCisJeyAzLE5HMyggMTE3KSwgMyxORzMo
ICA3OCksIDAsTkczKDU4LjUpLCAwLE5HMygxOS41KSB9LCAgLyogMTE3TWIvcyAqLworCXsgMyxO
RzMoIDE1NiksIDMsTkczKCAxMTcpLCAwLE5HMyggIDc4KSwgMCxORzMoMTkuNSkgfSwgIC8qICAx
NTZNYi9zICovCisJeyAzLE5HMygxNzUuNSksIDMsTkczKCAxNTYpLCAwLE5HMyggMTE3KSwgMCxO
RzMoICAzOSkgfSwgIC8qICAxNzVNYi9zICovCisJeyAzLE5HMyggMTk1KSwgMyxORzMoIDE5NSks
IDAsTkczKCAxNTYpLCAwLE5HMyg1OC41KSB9LCAgLyogMTk1TWIvcyAqLworCit9OworI3VuZGVm
IEcKKyN1bmRlZiBORzMKKyN1bmRlZiBORzIKKyN1bmRlZiBORzEKKworI2RlZmluZSBIKF9yKSBc
CisgICAgKCgoX3IpID09IDMpICAgPyAwIDogKCgoX3IpID09IDQuNSkgPyAxIDogKCgoX3IpID09
IDYpICA/IDIgOiBcCisgICAgKCgoX3IpID09IDkpICAgPyAzIDogKCgoX3IpID09IDEyKSAgPyA0
IDogKCgoX3IpID09IDE4KSA/IDUgOiBcCisgICAgKCgoX3IpID09IDI0KSAgPyA2IDogKCgoX3Ip
ID09IDI3KSAgPyA3IDogMCkpKSkpKSkpCitzdGF0aWMgY29uc3Qgc3RydWN0IHR4c2NoZWR1bGUg
c2VyaWVzX2hhbGZbXSA9IHsKKwl7IDMsSCggMyksIDMsSCggIDMpLCAwLEgoICAzKSwgMCxIKCAz
KSB9LAkvKiAgIDNNYi9zICovCisJeyA0LEgoNC41KSwzLEgoICAzKSwgNCxIKCAgMyksIDAsSCgg
MykgfSwJLyogNC41TWIvcyAqLworCXsgNCxIKCA2KSwgMyxIKCAgMyksIDQsSCggIDMpLCAwLEgo
IDMpIH0sCS8qICAgNk1iL3MgKi8KKwl7IDQsSCggOSksIDMsSCggIDYpLCA0LEgoICAzKSwgMixI
KCAzKSB9LAkvKiAgIDlNYi9zICovCisJeyA0LEgoMTIpLCAzLEgoICA5KSwgNCxIKCAgNiksIDIs
SCggMykgfSwJLyogIDEyTWIvcyAqLworCXsgNCxIKDE4KSwgMyxIKCAxMiksIDQsSCggIDkpLCAy
LEgoIDMpIH0sCS8qICAxOE1iL3MgKi8KKwl7IDQsSCgyNCksIDMsSCggMTgpLCA0LEgoIDEyKSwg
MixIKCA2KSB9LAkvKiAgMjRNYi9zICovCisJeyA0LEgoMjcpLCAzLEgoIDI0KSwgNCxIKCAxOCks
IDIsSCgxMikgfQkvKiAgMjdNYi9zICovCit9OworI3VuZGVmIEgKKworI2lmZGVmIFEKKyN1bmRl
ZiBRCisjZW5kaWYKKyNkZWZpbmUgUShfcikgXAorICAgICgoKF9yKSA9PSAxLjUpID8gMCA6ICgo
KF9yKSA9PTIuMjUpID8gMSA6ICgoKF9yKSA9PSAzKSAgPyAyIDogXAorICAgICgoKF9yKSA9PSA0
LjUpID8gMyA6ICgoKF9yKSA9PSAgNikgID8gNCA6ICgoKF9yKSA9PSA5KSAgPyA1IDogXAorICAg
ICgoKF9yKSA9PSAxMikgID8gNiA6ICgoKF9yKSA9PSAxMy41KT8gNyA6IDApKSkpKSkpKQorc3Rh
dGljIGNvbnN0IHN0cnVjdCB0eHNjaGVkdWxlIHNlcmllc19xdWFydGVyW10gPSB7CisJeyAzLFEo
IDEuNSksMyxRKDEuNSksIDAsUSgxLjUpLCAwLFEoMS41KSB9LAkvKiAxLjVNYi9zICovCisJeyA0
LFEoMi4yNSksMyxRKDEuNSksIDQsUSgxLjUpLCAwLFEoMS41KSB9LAkvKjIuMjVNYi9zICovCisJ
eyA0LFEoICAgMyksMyxRKDEuNSksIDQsUSgxLjUpLCAwLFEoMS41KSB9LAkvKiAgIDNNYi9zICov
CisJeyA0LFEoIDQuNSksMyxRKCAgMyksIDQsUSgxLjUpLCAyLFEoMS41KSB9LAkvKiA0LjVNYi9z
ICovCisJeyA0LFEoICAgNiksMyxRKDQuNSksIDQsUSggIDMpLCAyLFEoMS41KSB9LAkvKiAgIDZN
Yi9zICovCisJeyA0LFEoICAgOSksMyxRKCAgNiksIDQsUSg0LjUpLCAyLFEoMS41KSB9LAkvKiAg
IDlNYi9zICovCisJeyA0LFEoICAxMiksMyxRKCAgOSksIDQsUSggIDYpLCAyLFEoICAzKSB9LAkv
KiAgMTJNYi9zICovCisJeyA0LFEoMTMuNSksMyxRKCAxMiksIDQsUSggIDkpLCAyLFEoICA2KSB9
CS8qMTMuNU1iL3MgKi8KK307CisjdW5kZWYgUQorCisjZW5kaWYgLyogX05FVDgwMjExX0lFRUU4
MDIxMV9SQVRFQ1RMX1NBTVBMRV9UWFNDSEVEVUxFU19IXyAqLwpJbmRleDogbmV0ODAyMTEvaWVl
ZTgwMjExX3Jzc2FkYXB0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbmV0ODAyMTEvaWVlZTgwMjExX3Jzc2Fk
YXB0LmgJKHJldmlzaW9uIDI1NDgyNikKKysrIG5ldDgwMjExL2llZWU4MDIxMV9yc3NhZGFwdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAjaWZuZGVmIF9ORVQ4MDIxMV9JRUVF
ODAyMTFfUlNTQURBUFRfSF8KICNkZWZpbmUgX05FVDgwMjExX0lFRUU4MDIxMV9SU1NBREFQVF9I
XwogCisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwuaD4KKwogLyogRGF0YS1y
YXRlIGFkYXB0YXRpb24gbG9vc2VseSBiYXNlZCBvbiAiTGluayBBZGFwdGF0aW9uIFN0cmF0ZWd5
CiAgKiBmb3IgSUVFRSA4MDIuMTEgV0xBTiB2aWEgUmVjZWl2ZWQgU2lnbmFsIFN0cmVuZ3RoIE1l
YXN1cmVtZW50IgogICogYnkgSmF2aWVyIGRlbCBQcmFkbyBQYXZvbiBhbmQgU3VuZ2h5dW4gQ2hv
aS4KQEAgLTQzLDYgKzQ1LDcgQEAKICNkZWZpbmUJSUVFRTgwMjExX1JTU0FEQVBUX0JLVFBPV0VS
CTMJLyogMioqX0JLVFBPV0VSICovCiAKIHN0cnVjdCBpZWVlODAyMTFfcnNzYWRhcHQgeworCXN0
cnVjdCBpZWVlODAyMTFfcmNfc3RhdCByc3NhZGFwdF9zdGF0OwogCWNvbnN0IHN0cnVjdCBpZWVl
ODAyMTF2YXAgKnZhcDsKIAlpbnQJaW50ZXJ2YWw7CQkJLyogdXBkYXRlIGludGVydmFsICh0aWNr
cykgKi8KIH07CkluZGV4OiBuZXQ4MDIxMS9pZWVlODAyMTFfYW1yci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IG5ldDgwMjExL2llZWU4MDIxMV9hbXJyLmgJKHJldmlzaW9uIDI1NDgyNikKKysrIG5ldDgwMjEx
L2llZWU4MDIxMV9hbXJyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDYgKzIwLDcgQEAKICNpZm5k
ZWYgX05FVDgwMjExX0lFRUU4MDIxMV9BTVJSX0hfCiAjZGVmaW5lIF9ORVQ4MDIxMV9JRUVFODAy
MTFfQU1SUl9IXwogCisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwuaD4KIC8q
LQogICogTmFpdmUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEFkYXB0aXZlIE11bHRpIFJhdGUgUmV0
cnkgYWxnb3JpdGhtOgogICoKQEAgLTM1LDYgKzM2LDcgQEAKIHN0cnVjdCBpZWVlODAyMTF2YXA7
CiAKIHN0cnVjdCBpZWVlODAyMTFfYW1yciB7CisJc3RydWN0IGllZWU4MDIxMV9yY19zdGF0IGFt
cnJfc3RhdDsKIAl1X2ludAlhbXJyX21pbl9zdWNjZXNzX3RocmVzaG9sZDsKIAl1X2ludAlhbXJy
X21heF9zdWNjZXNzX3RocmVzaG9sZDsKIAlpbnQJYW1ycl9pbnRlcnZhbDsJCS8qIHVwZGF0ZSBp
bnRlcnZhbCAodGlja3MpICovCg==
--20cf307cfec04094f304e64fe611--



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