Fwd: Re: [Lcdproc] Re: VLSYS L.I.S 2005 Driver written

Daryl F daryl@rainyday.ca
Mon May 14 04:23:01 2007


This is a multi-part message in MIME format.
--------------080201060708070207060405
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit

Peter Marschall wrote:
> Hi Daryl,
> 
> On Tuesday, 8. May 2007 02:01, Daryl F wrote:
>> Here's the patch for the VLSYS L.I.S driver. It is for lcdproc-0.5.1.
>> The code isn't really pretty. I had to do some guessing since VLSYS
>> won't reveal the inner workings. But it works.
> 
> Thanks for the patch.
> 
> I have had a quick look at it, which made me consider it as not 
> yet ready for inclusion into the LCDproc CVS.
> 
> Here are my reasons:
> - the patch is based against 0.5.1
>   Please re-base it against LCDproc CVS available at
>   http://lcdproc.sourceforge.net/nightly/lcdproc-CVS-current.tar.gz
> - it contains whole files (which are newer in CVS than in your version)
>   Please reduce the patch to the changes only.
> - there are issues with it posted on the mailing list
>   See paul_c's and Todd Luliak's posts.
>   Please try to address the issues mentioned.
>   It is not acceptable for a patch to break compilation of LCdproc
>   (and pleae do not expect the maintainer [who does not have
>   the hardware] why).
> - It lacks documentation completely
>   Please add doxygen documentation to the source (see the
>   IOWarrior or CFontzPacket drivers as an example) and
>   add the other missing parts (see
>   http://lcdproc.sourceforge.net/docs/current-dev.html#documentation
>   what is expected)
> Once these issues are addressed, I'll happily commit the drivr to CVS.
> 
> This may sound a bit harsh, but it is not ment that way.
> It is only meant as a remnider what is expected of an
> LCDproc driver: not only compile-able and working code, 
> but also documentation accompanying it, so that users 
> that obviously do not have such in-depth knowledge 
> about the driver internals as you, the author,
> can get the driver to run easily.
> 
> Thanks
> Peter
> 
> 

Hi Peter,

It didn't sound harsh at all. I completely missed updating the doxygen
documents. I followed the instruction on documenting at the Sourceforge
link you gave me.

I obtained the latest CVS tarball and retrofitted my changes to it as
you requested.

I addressed one of the issues from paul_c and Todd Luliak, namely I
added a test for the correct level of support in libftdi to acinclude.m4.

The other issue of 'configure: error: Unknown driver lis' will already
be handled when compiling from CVS due to the use of `sh autogen.sh` to
run aclocal, automake, and autoconf. That also reduces the size of my
patch greatly since I don't have to provide an update to the configure
script, just patch acinclude.m4.

If I need to make any more changes I look forward to your requests.

Thanks for bearing with me in my first attempt at contributing to open
source.

Thanks,
Daryl


--------------080201060708070207060405
Content-Type: text/plain;
 name="lis.patch"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="lis.patch"

ZGlmZiAtcnVOIGxjZHByb2MtQ1ZTLWN1cnJlbnQtMjAwNzA1MTMvTENEZC5jb25mIGxjZHBy
b2MtQ1ZTLWN1cnJlbnQtMjAwNzA1MTMtbGlzL0xDRGQuY29uZgotLS0gbGNkcHJvYy1DVlMt
Y3VycmVudC0yMDA3MDUxMy9MQ0RkLmNvbmYJMjAwNy0wNS0wNiAwMjowMDoxMy4wMDAwMDAw
MDAgLTA1MDAKKysrIGxjZHByb2MtQ1ZTLWN1cnJlbnQtMjAwNzA1MTMtbGlzL0xDRGQuY29u
ZgkyMDA3LTA1LTEzIDIyOjA5OjE5LjAwMDAwMDAwMCAtMDUwMApAQCAtNjE5LDYgKzYxOSwx
MSBAQAogI3Byb2c9bGNkZAogCiAKKyMjIExJUyBNQ0UgMjAwNSBkcml2ZXIgIyMKK1tsaXNd
CitEZXZpY2U9L2Rldi90dHlVU0IwCitCcmlnaHRuZXNzPTEwMDAKKwogCiAjI1RoZSBkcml2
ZXIgZm9yIHRoZSBWRkQgb2YgdGhlIE1lZGlvbiBNRDg4MDAgUEMgIyMKIFtNRDg4MDBdCmRp
ZmYgLXJ1TiBsY2Rwcm9jLUNWUy1jdXJyZW50LTIwMDcwNTEzL2FjaW5jbHVkZS5tNCBsY2Rw
cm9jLUNWUy1jdXJyZW50LTIwMDcwNTEzLWxpcy9hY2luY2x1ZGUubTQKLS0tIGxjZHByb2Mt
Q1ZTLWN1cnJlbnQtMjAwNzA1MTMvYWNpbmNsdWRlLm00CTIwMDctMDUtMDYgMDI6MDA6MTMu
MDAwMDAwMDAwIC0wNTAwCisrKyBsY2Rwcm9jLUNWUy1jdXJyZW50LTIwMDcwNTEzLWxpcy9h
Y2luY2x1ZGUubTQJMjAwNy0wNS0xMyAxNzoyNDo0NC4wMDAwMDAwMDAgLTA1MDAKQEAgLTcs
NyArNyw3IEBACiAJWyAgICAgICAgICAgICAgICAgIFBvc3NpYmxlIGRyaXZlcnMgYXJlOl0K
IAlbICAgICAgICAgICAgICAgICAgICBiYXlyYWQsQ0ZvbnR6LENGb250ejYzMyxDRm9udHpQ
YWNrZXQsY3Vyc2VzLEN3TG54LGVhNjUsXQogCVsgICAgICAgICAgICAgICAgICAgIEV5ZWJv
eE9uZSxnMTUsZ2xjZGxpYixnbGssaGQ0NDc4MCxpY3BfYTEwNixpbW9uLElPV2Fycmlvcixd
Ci0JWyAgICAgICAgICAgICAgICAgICAgaXJtYW4sam95LGxiMjE2LGxjZG0wMDEsbGN0ZXJt
LGxpcmMsTUQ4ODAwLG1zNjkzMSxdCisJWyAgICAgICAgICAgICAgICAgICAgaXJtYW4sam95
LGxiMjE2LGxjZG0wMDEsbGN0ZXJtLGxpcmMsbGlzLE1EODgwMCxtczY5MzEsXQogCVsgICAg
ICAgICAgICAgICAgICAgIG10Y19zMTYyMDl4LE10eE9yYixOb3JpdGFrZVZGRCxwaWNvbGNk
LHB5cmFtaWQsc2VkMTMzMF0KIAlbICAgICAgICAgICAgICAgICAgICBzZWQxNTIwLHNlcmlh
bFBPUyxzZXJpYWxWRkQsc2xpLHN0djU3MzAsc3ZnYSx0Njk2Myx0ZXh0LF0KIAlbICAgICAg
ICAgICAgICAgICAgICB0eWFuLHVsYTIwMCx4b3NkXQpAQCAtMTYsNyArMTYsNyBAQAogCWRy
aXZlcnM9IiRlbmFibGV2YWwiLAogCWRyaXZlcnM9W2JheXJhZCxDRm9udHosQ0ZvbnR6NjMz
LGN1cnNlcyxDd0xueCxnbGssbGIyMTYsbGNkbTAwMSxNdHhPcmIscHlyYW1pZCx0ZXh0XSkK
IAotYWxsRHJpdmVycz1bYmF5cmFkLENGb250eixDRm9udHo2MzMsQ0ZvbnR6UGFja2V0LGN1
cnNlcyxDd0xueCxlYTY1LEV5ZWJveE9uZSxnMTUsZ2xjZGxpYixnbGssaGQ0NDc4MCxpY3Bf
YTEwNixpbW9uLElPV2Fycmlvcixpcm1hbixqb3ksbGIyMTYsbGNkbTAwMSxsY3Rlcm0sbGly
YyxNRDg4MDAsbXM2OTMxLG10Y19zMTYyMDl4LE10eE9yYixOb3JpdGFrZVZGRCxwaWNvbGNk
LHB5cmFtaWQsc2VkMTMzMCxzZWQxNTIwLHNlcmlhbFBPUyxzZXJpYWxWRkQsc2xpLHN0djU3
MzAsc3ZnYSx0Njk2Myx0ZXh0LHR5YW4sdWxhMjAwLHhvc2RdCithbGxEcml2ZXJzPVtiYXly
YWQsQ0ZvbnR6LENGb250ejYzMyxDRm9udHpQYWNrZXQsY3Vyc2VzLEN3TG54LGVhNjUsRXll
Ym94T25lLGcxNSxnbGNkbGliLGdsayxoZDQ0NzgwLGljcF9hMTA2LGltb24sSU9XYXJyaW9y
LGlybWFuLGpveSxsYjIxNixsY2RtMDAxLGxjdGVybSxsaXJjLGxpcyxNRDg4MDAsbXM2OTMx
LG10Y19zMTYyMDl4LE10eE9yYixOb3JpdGFrZVZGRCxwaWNvbGNkLHB5cmFtaWQsc2VkMTMz
MCxzZWQxNTIwLHNlcmlhbFBPUyxzZXJpYWxWRkQsc2xpLHN0djU3MzAsc3ZnYSx0Njk2Myx0
ZXh0LHR5YW4sdWxhMjAwLHhvc2RdCiAKIGRyaXZlcnM9YGVjaG8gJGRyaXZlcnMgfCBzZWQg
LWUgJ3MvLC8gL2cnYAogCkBAIC0yNTYsNiArMjU2LDMwIEBACiAJCQkJQUNfTVNHX1dBUk4o
W1RoZSBsaXJjIGRyaXZlciBuZWVkcyB0aGUgbGlyYyBjbGllbnQgbGlicmFyeV0pCiAJCQld
KQogCQkJOzsKKwkJbGlzKQorCQkJQUNfQ0hFQ0tfSEVBREVSUyhbdXNiLmggZnRkaS5oXSxb
CisJCQkJQUNfQ0hFQ0tfTElCKGZ0ZGksIG1haW4sWworCQkJCQlMSUJGVERJPSItbHVzYiAt
bGZ0ZGkiCisJCQkJCURSSVZFUlM9IiREUklWRVJTIGxpcyR7U099IgorCQkJCQlhY3Rkcml2
ZXJzPVsiJGFjdGRyaXZlcnMgbGlzIl0KKwkJCQldLFsKK2RubAkJCQllbHNlCisJCQkJCUFD
X01TR19XQVJOKFtUaGUgbGlzIGRyaXZlciBuZWVkcyB0aGUgZnRkaSBsaWJyYXJ5XSkKKwkJ
CQldKQorCQkJXSxbCitkbmwJCQllbHNlCisJCQkJQUNfTVNHX1dBUk4oW1RoZSBsaXMgZHJp
dmVyIG5lZWRzIGZ0ZGkuaCBhbmQgdXNiLmhdKQorCQkJXSkKKwkJCUFDX0NBQ0hFX0NIRUNL
KFtmb3IgZnRkaV9zZXRkdHIoKSBpbiBsaWJmdGRpXSwgYWNfY3ZfZnRkaV9zZXRkdHIsCisJ
CQlbb2xkbGlicz0iJExJQlMiCisJCQkgTElCUz0iJExJQlMgJExJQkZUREkiCisJCQkgQUNf
VFJZX0xJTktfRlVOQyhmdGRpX3NldGR0ciwgYWNfY3ZfZnRkaV9zZXRkdHI9eWVzLCBhY19j
dl9mdGRpX3NldGR0cj1ubykKKwkJCSBMSUJTPSIkb2xkbGlicyIKKwkJCV0pCisJCQlpZiB0
ZXN0ICIkYWNfY3ZfZnRkaV9zZXRkdHJ0IiA9IG5vOyB0aGVuCisJCQkJQUNfTVNHX1dBUk4o
W1VwZ3JhZGUgdG8gbGliZnRkaSA+PSB2ZXJzaW9uIDAuOF0pCisJCQlmaQorCQkJOzsKIAkJ
TUQ4ODAwKQogCQkJRFJJVkVSUz0iJERSSVZFUlMgTUQ4ODAwJHtTT30iCiAJCQlhY3Rkcml2
ZXJzPVsiJGFjdGRyaXZlcnMgTUQ4ODAwIl0KZGlmZiAtcnVOIGxjZHByb2MtQ1ZTLWN1cnJl
bnQtMjAwNzA1MTMvZG9jcy9MQ0RkLjguaW4gbGNkcHJvYy1DVlMtY3VycmVudC0yMDA3MDUx
My1saXMvZG9jcy9MQ0RkLjguaW4KLS0tIGxjZHByb2MtQ1ZTLWN1cnJlbnQtMjAwNzA1MTMv
ZG9jcy9MQ0RkLjguaW4JMjAwNy0wNC0wMSAwMjowMDoxOC4wMDAwMDAwMDAgLTA1MDAKKysr
IGxjZHByb2MtQ1ZTLWN1cnJlbnQtMjAwNzA1MTMtbGlzL2RvY3MvTENEZC44LmluCTIwMDct
MDUtMTMgMjI6MTA6NTkuMDAwMDAwMDAwIC0wNTAwCkBAIC0xODksNiArMTg5LDkgQEAKIC5C
IGxpcmMKIEluZnJhcmVkIChpbnB1dCkKIC5UUAorLkIgbGlzCitMLkkuUyBNQ0UgMjAwNSAy
MHgyIFZGRCAoaHR0cDovL3Zsc3lzLmNvLmtyKQorLlRQCiAuQiBNRDg4MDAKIFZGRCBkaXNw
bGF5cyBpbiBNZWRpb24gTUQ4ODAwIFBDcwogLlRQCmRpZmYgLXJ1TiBsY2Rwcm9jLUNWUy1j
dXJyZW50LTIwMDcwNTEzL2RvY3MvbGNkcHJvYy11c2VyL2RyaXZlcnMvbGlzLmRvY2Jvb2sg
bGNkcHJvYy1DVlMtY3VycmVudC0yMDA3MDUxMy1saXMvZG9jcy9sY2Rwcm9jLXVzZXIvZHJp
dmVycy9saXMuZG9jYm9vawotLS0gbGNkcHJvYy1DVlMtY3VycmVudC0yMDA3MDUxMy9kb2Nz
L2xjZHByb2MtdXNlci9kcml2ZXJzL2xpcy5kb2Nib29rCTE5NjktMTItMzEgMTg6MDA6MDAu
MDAwMDAwMDAwIC0wNjAwCisrKyBsY2Rwcm9jLUNWUy1jdXJyZW50LTIwMDcwNTEzLWxpcy9k
b2NzL2xjZHByb2MtdXNlci9kcml2ZXJzL2xpcy5kb2Nib29rCTIwMDctMDUtMTMgMjI6Mjc6
MDcuMDAwMDAwMDAwIC0wNTAwCkBAIC0wLDAgKzEsNTAgQEAKKzxzZWN0MSBpZD0ibGlzLWhv
d3RvIj4KKzx0aXRsZT5UaGUgbGlzIERyaXZlcjwvdGl0bGU+CisKKzxwYXJhPgorICBUaGlz
IHNlY3Rpb24gdGFsa3MgYWJvdXQgdXNpbmcgTENEcHJvYyB3aXRoIHRoZSBWTFN5c3RlbSBM
LkkuUworICBNQ0UgMjAwNSBWYWN1dW0gRmxvdXJlc2NlbnQgRGlzcGxheSBiYXNlZCBvbiB0
aGUgRlRESSBVU0ItdG8tc2VyaWFsCisgIGNvbnZlcnRlciwgdGhlIE1pY3JvY2hpcCBQSUMt
MTZGNzE2IG1pY3JvY29udHJvbGxlciwgYW5kCisgIHRoZSBORUMgVVBEMTYzMTQgZGlzcGxh
eSBkcml2ZXIgdGhhdCBjYW4gYmUgb2J0YWluZWQgYXQKKyAgPHVsaW5rIHVybD0iaHR0cDov
L3d3dy52bHN5cy5jby5rciI+VkxTeXM8L3VsaW5rPi4KKzwvcGFyYT4KKworPCEtLSAjIyBW
TFN5cyBsaXMgZHJpdmVyICMjIC0tPgorPHNlY3QyIGlkPSJsaXMtY29uZmlnIj4KKzx0aXRs
ZT5Db25maWd1cmF0aW9uIGluIExDRGQuY29uZjwvdGl0bGU+CisKKzxzZWN0MyBpZD0ibGlz
LWNvbmZpZy1zZWN0aW9uIj4KKzx0aXRsZT5bbGlzXTwvdGl0bGU+CisKKzx2YXJpYWJsZWxp
c3Q+Cis8dmFybGlzdGVudHJ5PgorICA8dGVybT4KKyAgICA8Y29tbWFuZD5CcmlnaHRuZXNz
PTwvY29tbWFuZD4KKyAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxyZXBsYWNlYWJsZT5CUklH
SFRORVNTPC9yZXBsYWNlYWJsZT48L2FyZz4KKyAgPC90ZXJtPgorICA8bGlzdGl0ZW0+PHBh
cmE+CisgICAgU2V0IHRoZSBpbml0aWFsIGJyaWdodG5lc3MgW2RlZmF1bHQ6IDxsaXRlcmFs
PjEwMDA8L2xpdGVyYWw+OyBsZWdhbDogPGxpdGVyYWw+MDwvbGl0ZXJhbD4gLSA8bGl0ZXJh
bD4xMDAwPC9saXRlcmFsPl0KKyAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgIDwvdGVybT4KKyAg
PGxpc3RpdGVtPjxwYXJhPgorICAgIFNlbGVjdCB0aGUgTENEIHNpemUgW2RlZmF1bHQ6IDxs
aXRlcmFsPjIweDQ8L2xpdGVyYWw+XQorICA8L3BhcmE+PC9saXN0aXRlbT4KKzwvdmFybGlz
dGVudHJ5PgorCis8dmFybGlzdGVudHJ5PgorICA8dGVybT4KKyAgICA8Y29tbWFuZD5EZXZp
Y2U9PC9jb21tYW5kPgorICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PHJlcGxhY2VhYmxlPkRF
VklDRTwvcmVwbGFjZWFibGU+PC9hcmc+CisgIDwvdGVybT4KKyAgPGxpc3RpdGVtPjxwYXJh
PgorICAgIFVTQiBkZXZpY2UgdG8gdXNlLiBVc3VhbCB2YWx1ZXMgYXJlIDxmaWxlbmFtZT4v
ZGV2L3R0eVVTQjA8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPi9kZXYvdHR5VVNCMTwvZmlsZW5h
bWU+LCBldGMuCisgICAgW2RlZmF1bHQ6IDxmaWxlbmFtZT4vZGV2L3R0eVVTQjA8L2ZpbGVu
YW1lPl0uCisgIDwvcGFyYT48L2xpc3RpdGVtPgorPC92YXJsaXN0ZW50cnk+Cis8L3Zhcmlh
YmxlbGlzdD4KKworPC9zZWN0Mz4KKworPC9zZWN0Mj4KKworPC9zZWN0MT4KZGlmZiAtcnVO
IGxjZHByb2MtQ1ZTLWN1cnJlbnQtMjAwNzA1MTMvZG9jcy9sY2Rwcm9jLXVzZXIvZHJpdmVy
cy5kb2Nib29rIGxjZHByb2MtQ1ZTLWN1cnJlbnQtMjAwNzA1MTMtbGlzL2RvY3MvbGNkcHJv
Yy11c2VyL2RyaXZlcnMuZG9jYm9vawotLS0gbGNkcHJvYy1DVlMtY3VycmVudC0yMDA3MDUx
My9kb2NzL2xjZHByb2MtdXNlci9kcml2ZXJzLmRvY2Jvb2sJMjAwNy0wMy0xOSAwMjowMDoy
NC4wMDAwMDAwMDAgLTA1MDAKKysrIGxjZHByb2MtQ1ZTLWN1cnJlbnQtMjAwNzA1MTMtbGlz
L2RvY3MvbGNkcHJvYy11c2VyL2RyaXZlcnMuZG9jYm9vawkyMDA3LTA1LTEzIDIyOjMwOjM3
LjAwMDAwMDAwMCAtMDUwMApAQCAtMjgsNiArMjgsNyBAQAogJmxjZG0wMDE7CiAmbGN0ZXJt
OwogJmxpcmM7CismbGlzOwogJk1EODgwMDsKICZtczY5MzE7CiAmbXRjX3MxNjIwOXg7CmRp
ZmYgLXJ1TiBsY2Rwcm9jLUNWUy1jdXJyZW50LTIwMDcwNTEzL2RvY3MvbGNkcHJvYy11c2Vy
L2xjZHByb2MtdXNlci5kb2Nib29rIGxjZHByb2MtQ1ZTLWN1cnJlbnQtMjAwNzA1MTMtbGlz
L2RvY3MvbGNkcHJvYy11c2VyL2xjZHByb2MtdXNlci5kb2Nib29rCi0tLSBsY2Rwcm9jLUNW
Uy1jdXJyZW50LTIwMDcwNTEzL2RvY3MvbGNkcHJvYy11c2VyL2xjZHByb2MtdXNlci5kb2Ni
b29rCTIwMDctMDMtMTkgMDI6MDA6MjQuMDAwMDAwMDAwIC0wNTAwCisrKyBsY2Rwcm9jLUNW
Uy1jdXJyZW50LTIwMDcwNTEzLWxpcy9kb2NzL2xjZHByb2MtdXNlci9sY2Rwcm9jLXVzZXIu
ZG9jYm9vawkyMDA3LTA1LTEzIDIyOjI5OjQzLjAwMDAwMDAwMCAtMDUwMApAQCAtMzQsNiAr
MzQsNyBAQAogICA8IUVOVElUWSBsY2RtMDAxIFNZU1RFTSAiZHJpdmVycy9sY2RtMDAxLmRv
Y2Jvb2siPgogICA8IUVOVElUWSBsY3Rlcm0gU1lTVEVNICJkcml2ZXJzL2xjdGVybS5kb2Ni
b29rIj4KICAgPCFFTlRJVFkgbGlyYyBTWVNURU0gImRyaXZlcnMvbGlyY2luLmRvY2Jvb2si
PgorICA8IUVOVElUWSBsaXMgU1lTVEVNICJkcml2ZXJzL2xpcy5kb2Nib29rIj4KICAgPCFF
TlRJVFkgTUQ4ODAwIFNZU1RFTSAiZHJpdmVycy9NRDg4MDAuZG9jYm9vayI+CiAgIDwhRU5U
SVRZIG1zNjkzMSBTWVNURU0gImRyaXZlcnMvbXM2OTMxLmRvY2Jvb2siPgogICA8IUVOVElU
WSBtdGNfczE2MjA5eCBTWVNURU0gImRyaXZlcnMvbXRjX3MxNjIwOXguZG9jYm9vayI+CmRp
ZmYgLXJ1TiBsY2Rwcm9jLUNWUy1jdXJyZW50LTIwMDcwNTEzL3NlcnZlci9kcml2ZXJzL01h
a2VmaWxlLmFtIGxjZHByb2MtQ1ZTLWN1cnJlbnQtMjAwNzA1MTMtbGlzL3NlcnZlci9kcml2
ZXJzL01ha2VmaWxlLmFtCi0tLSBsY2Rwcm9jLUNWUy1jdXJyZW50LTIwMDcwNTEzL3NlcnZl
ci9kcml2ZXJzL01ha2VmaWxlLmFtCTIwMDctMDUtMDYgMDI6MDA6MTUuMDAwMDAwMDAwIC0w
NTAwCisrKyBsY2Rwcm9jLUNWUy1jdXJyZW50LTIwMDcwNTEzLWxpcy9zZXJ2ZXIvZHJpdmVy
cy9NYWtlZmlsZS5hbQkyMDA3LTA1LTEzIDE3OjQyOjQ3LjAwMDAwMDAwMCAtMDUwMApAQCAt
MTksNyArMTksNyBAQAogI0xJQlMgPQogCiBwa2dsaWJfUFJPR1JBTVMgPSBARFJJVkVSU0AK
LUVYVFJBX1BST0dSQU1TID0gYmF5cmFkIENGb250eiBDRm9udHo2MzMgQ0ZvbnR6UGFja2V0
IGN1cnNlcyBDd0xueCBlYTY1IEV5ZWJveE9uZSBnMTUgZ2xjZGxpYiBnbGsgaGQ0NDc4MCBp
Y3BfYTEwNiBpbW9uIElPV2FycmlvciBpcm1hbiBqb3kgbGIyMTYgbGNkbTAwMSBsY3Rlcm0g
bGlyYyBNRDg4MDAgbXM2OTMxIG10Y19zMTYyMDl4IE10eE9yYiBOb3JpdGFrZVZGRCBwaWNv
bGNkIHB5cmFtaWQgc2VkMTMzMCBzZWQxNTIwIHNlcmlhbFBPUyBzZXJpYWxWRkQgc3R2NTcz
MCBzdmdhIHQ2OTYzIHRleHQgdHlhbiBzbGkgdWxhMjAwIHhvc2QKK0VYVFJBX1BST0dSQU1T
ID0gYmF5cmFkIENGb250eiBDRm9udHo2MzMgQ0ZvbnR6UGFja2V0IGN1cnNlcyBDd0xueCBl
YTY1IEV5ZWJveE9uZSBnMTUgZ2xjZGxpYiBnbGsgaGQ0NDc4MCBpY3BfYTEwNiBpbW9uIElP
V2FycmlvciBpcm1hbiBqb3kgbGIyMTYgbGNkbTAwMSBsY3Rlcm0gbGlyYyBsaXMgTUQ4ODAw
IG1zNjkzMSBtdGNfczE2MjA5eCBNdHhPcmIgTm9yaXRha2VWRkQgcGljb2xjZCBweXJhbWlk
IHNlZDEzMzAgc2VkMTUyMCBzZXJpYWxQT1Mgc2VyaWFsVkZEIHN0djU3MzAgc3ZnYSB0Njk2
MyB0ZXh0IHR5YW4gc2xpIHVsYTIwMCB4b3NkCiBub2luc3RfTElCUkFSSUVTID0gbGliTENE
LmEgbGliYmlnbnVtLmEKIAogSU9XYXJyaW9yX0NGTEFHUyA9ICAgQGxpYnVzYl9jZmxhZ3NA
ICQoQU1fQ0ZMQUdTKQpAQCAtNDIsNiArNDIsNyBAQAogaXJtYW5fTERBREQgPSAgICAgICAg
QExJQklSTUFOQAogbGN0ZXJtX0xEQUREID0gICAgICAgbGliTENELmEKIGxpcmNfTERBREQg
PSAgICAgICAgIEBMSUJMSVJDX0NMSUVOVEAKK2xpc19MREFERCA9ICAgICAgICAgIGxpYkxD
RC5hIEBMSUJGVERJQAogTUQ4ODAwX0xEQUREID0gICAgICAgbGliTENELmEKIG10Y19zMTYy
MDl4X0xEQUREID0gIGxpYkxDRC5hCiBNdHhPcmJfTERBREQgPSAgICAgICBsaWJMQ0QuYSBs
aWJiaWdudW0uYQpAQCAtODMsNiArODQsNyBAQAogbGNkbTAwMV9TT1VSQ0VTID0gICAgbGNk
LmggbGNkbTAwMS5jIGxjZG0wMDEuaCByZXBvcnQuaAogbGN0ZXJtX1NPVVJDRVMgPSAgICAg
bGNkLmggbGNkX2xpYi5oIGxjdGVybS5jIGxjdGVybS5oIHJlcG9ydC5oCiBsaXJjX1NPVVJD
RVMgPSAgICAgICBsY2QuaCBsaXJjaW4uYyBsaXJjaW4uaCByZXBvcnQuaAorbGlzX1NPVVJD
RVMgPSAgICAgICAgbGNkLmggbGNkX2xpYi5oIGxpcy5oIGxpcy5jIHJlcG9ydC5oCiBNRDg4
MDBfU09VUkNFUyA9ICAgICBsY2QuaCBsY2RfbGliLmggTUQ4ODAwLmMgTUQ4ODAwLmggcmVw
b3J0LmgKIG1zNjkzMV9TT1VSQ0VTID0gICAgIGxjZC5oIGxjZF9saWIuaCBtczY5MzEuaCBt
czY5MzEuYyByZXBvcnQuaAogbXRjX3MxNjIwOXhfU09VUkNFUyA9ICBsY2QuaCBsY2RfbGli
LmggbXRjX3MxNjIwOXguYyBtdGNfczE2MjA5eC5oIHJlcG9ydC5oCmRpZmYgLXJ1TiBsY2Rw
cm9jLUNWUy1jdXJyZW50LTIwMDcwNTEzL3NlcnZlci9kcml2ZXJzL2xpcy5jIGxjZHByb2Mt
Q1ZTLWN1cnJlbnQtMjAwNzA1MTMtbGlzL3NlcnZlci9kcml2ZXJzL2xpcy5jCi0tLSBsY2Rw
cm9jLUNWUy1jdXJyZW50LTIwMDcwNTEzL3NlcnZlci9kcml2ZXJzL2xpcy5jCTE5NjktMTIt
MzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0wNjAwCisrKyBsY2Rwcm9jLUNWUy1jdXJyZW50LTIw
MDcwNTEzLWxpcy9zZXJ2ZXIvZHJpdmVycy9saXMuYwkyMDA3LTA1LTA3IDA5OjUzOjE0LjAw
MDAwMDAwMCAtMDUwMApAQCAtMCwwICsxLDE0NjUgQEAKKy8qCisgKiBMSVMgZHJpdmVyIGZv
ciBsY2Rwcm9jCisgKiBGb3IgdGhlIEwuSS5TIE1DRSB2YWN1dW0gZmx1b3Jlc2NlbnQgZGlz
cGxheSBmcm9tIHZsc3lzLmNvLmtyCisgKiAyMHgyIGRpc3BsYXkgdXNpbmcgTkVDIFVQRDE2
MzE0IGRyaXZlciBhbmQgRlRESSBGVDIzMlJRIFVTQi10by1zZXJpYWwKKyAqIGNvbnZlcnRl
ci4KKyAqCisgKiBUaGlzIGRyaXZlciB1c2VzIHRoZSBsaWJmdGRpIGxpYnJhcnkgdG8gaW50
ZXJmYWNlIHRvIHRoZSBGVERJIGNoaXAuIE1ha2UKKyAqIHN1cmUga2VybmVsIG1vZHVsZSBm
dGRpX3NpbyBkb2Vzbid0IGNsYWltIHRoZSBkZXZpY2UuCisgKgorICogQmFzZWQgb24gdGhl
IHVsYTIwMCBkcml2ZXIgQ29weXJpZ2h0IChDKSAyMDA2LCBCZXJuaGFyZCBXYWxsZQorICog
YW5kIHRoZSBDcnlzdGFsRm9udHogNjMzIGRyaXZlciBDb3B5cmlnaHQgKEMpIDIwMDIgRGF2
aWQgR0xBVURFCisgKgorICogQ29weXJpZ2h0IChjKSAgMjAwNywgRGFyeWwgRm9uc2VjYS1I
b2x0IDx3eWF0dEBwcmFpcmlldHVydGxlLmNhPgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxl
YXNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIFJlZmVyIHRvIHRo
ZQorICogQ09QWUlORyBmaWxlIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBwYWNrYWdlLgorICoK
KyAqIAorICogCisgKgorICovCisKKy8qCisgKiBOb3RlcyBvbiB0aGlzIGRyaXZlcgorICoK
KyAqIHZsc3lzIGlzIHVud2lsbGluZyB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRo
ZSBwcm90b2NvbCBmb3IgdGhpcworICogZGV2aWNlLiBUaGlzIGRyaXZlciB3YXMgZGV2ZWxv
cGVkIGVudGlyZWx5IGJ5IGFuYWx5emluZyB0aGUgVVNCIGRhdGEKKyAqIGZsb3dpbmcgYmV0
d2VlbiB0aGUgaG9zdCBhbmQgdGhlIGRldmljZSBvbiBhIFdpblhQIG1hY2hpbmUuIEFzIHN1
Y2ggaXQKKyAqIHByb2JhYmx5IGlzbid0IGFuIG9wdGltYWwgZHJpdmVyIGJ1dCBpdCB3b3Jr
cy4KKyAqCisgKiBVc2luZyBhIGRpcnR5IGJ1ZmZlci9jbGVhbiBidWZmZXIgYXBwcm9hY2gg
d2FzIHVzZWxlc3Mgc2luY2UgSSBjb3VsZAorICogbm90IGRldGVybWluZSBob3cgdG8gd3Jp
dGUgdG8gc3BlY2lmaWMgY29sdW1ucy4gVGhlIG9ubHkgdGhpbmcgc2VsZWN0YWJsZQorICog
d2FzIHdoaWNoIGxpbmUgd291bGQgYmUgd3JpdHRlbiBhdCBjb2x1bW4gMS4KKyAqLworCisj
aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlz
dGQuaD4KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNs
dWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5c2xvZy5o
PgorCisjaW5jbHVkZSA8dXNiLmg+CisjaW5jbHVkZSA8ZnRkaS5oPgorCisjaW5jbHVkZSA8
c3lzL3N5c2NhbGwuaD4KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSAiY29u
ZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgImxjZC5oIgorI2luY2x1ZGUgImxpcy5oIgor
I2luY2x1ZGUgInJlcG9ydC5oIgorI2luY2x1ZGUgImxjZF9saWIuaCIKKyNpbmNsdWRlICJ0
aW1pbmcuaCIKKwordm9pZCBsaXNfdGVzdChEcml2ZXIgKmRydnRoaXMpOworCisvKiBWYXJz
IGZvciB0aGUgc2VydmVyIGNvcmUgKi8KK01PRFVMRV9FWFBPUlQgY2hhciAqYXBpX3ZlcnNp
b24gPSBBUElfVkVSU0lPTjsKK01PRFVMRV9FWFBPUlQgaW50IHN0YXlfaW5fZm9yZWdyb3Vu
ZCA9IDA7CitNT0RVTEVfRVhQT1JUIGludCBzdXBwb3J0c19tdWx0aXBsZSA9IDE7CitNT0RV
TEVfRVhQT1JUIGNoYXIgKnN5bWJvbF9wcmVmaXggPSAibGlzXyI7CisKKworLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworLy8gY29uc3RhbnRzCisvLworI2RlZmluZSBESVNQTEFZX1ZF
TkRPUl9JRCAgICAweDA0MDMKKyNkZWZpbmUgRElTUExBWV9QUk9EVUNUX0lEICAgMHg2MDAx
CisKKyNkZWZpbmUgQ0VMTFdJRFRIICA1CisjZGVmaW5lIENFTExIRUlHSFQgOAorCisjZGVm
aW5lIERFRkFVTFRfQlJJR0hUTkVTUyA3NTAKKworLyoKKyAqIENoYXJhY3RhciBtYXBwaW5n
IGZvciBVUEQxNjMxNCBkZXZpY2UgYnkgRGFyeWwgRm9uc2VjYS1Ib2x0CisgKiA8d3lhdHRA
cHJhaXJpZXR1cnRsZS5jYT4gdGFrZW4gZnJvbSBNYXJrIEhhZW1tZXJsaW5nJ3MgSEQ0NDc4
MCB0YWJsZS4KKyAqIENoYXJhY3RlciBtYXBwaW5nIGZvciBIRDQ0NzgwIGRldmljZXMgYnkg
TWFyayBIYWVtbWVybGluZyA8bWFpbEBtYXJraC5kZT4uCisgKgorICogVHJhbnNsYXRlcyBJ
U08gODg1OS0xIHRvIGFueSBIRDQ0NzgwIGNoYXJzZXQuCisgKgorICogQ2hhcm1hcCBzZWxl
Y3RvciAoQykgMjAwNiBQaWxsb24gTWF0dGVvIDxtYXR0ZW8ucGlsbG9uQGVtYWlsLml0Pgor
ICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UuCisgKiBSZWZlciB0byB0aGUgQ09QWUlORyBmaWxlIGRpc3RyaWJ1dGVk
IHdpdGggdGhpcyBwYWNrYWdlLgorICovCisKKy8qCisgKiBVUEQxNjMxNCB0YWJsZQorICoK
KyAqLworCitjb25zdCB1bnNpZ25lZCBjaGFyIFVQRDE2MzE0X2NoYXJtYXBbXSA9IHsKKyAg
LyogIzAgKi8KKyAgICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsCisg
ICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorICAgMTYsICAxNywg
IDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywKKyAgIDI0LCAgMjUsICAyNiwgIDI3LCAg
MjgsICAyOSwgIDMwLCAgMzEsCisgIC8qICMzMiAqLworICAgMzIsICAzMywgIDM0LCAgMzUs
ICAzNiwgIDM3LCAgMzgsICAzOSwKKyAgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwg
IDQ2LCAgNDcsCisgICA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LAor
ICAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKyAgLyogIzY0ICov
CisgICA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLAorICAgNzIsICA3
MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyAgIDgwLCAgODEsICA4MiwgIDgz
LCAgODQsICA4NSwgIDg2LCAgODcsCisgICA4OCwgIDg5LCAgOTAsICA5MSwgIDQ3LCAgOTMs
ICA5NCwgIDk1LAorICAvKiAjOTYgKi8KKyAgIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEw
MSwgMTAyLCAxMDMsCisgIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTEx
LAorICAxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwKKyAgMTIwLCAx
MjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCisgIC8qICMxMjggKi8KKyAgMTI4
LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsCisgIDEzNiwgMTM3LCAxMzgs
IDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAorICAxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwg
MTQ5LCAxNTAsIDE1MSwKKyAgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAx
NTksCisgIC8qICMxNjAgKi8KKyAgMTYwLCAgMzMsIDIzNiwgMjM3LCAxNjQsICA5MiwgMTI0
LCAxNjcsCisgIDE2OCwgMTY5LCAxNzAsIDE3MSwgMTcyLCAxNzMsIDE3NCwgMTc1LAorICAx
NzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywKKyAgMTg0LCAxODUsIDE4
NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAxOTEsCisgIC8qICMxOTIgKi8KKyAgMTkyLCAxOTMs
IDE5NCwgMTk1LCAxOTYsIDE5NywgMTk4LCAxOTksCisgIDIwMCwgMjAxLCAyMDIsIDIwMywg
MjA0LCAyMDUsIDIwNiwgMjA3LAorICAyMDgsIDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAy
MTQsIDIxNSwKKyAgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgMjIzLCAyMjQsCisg
IC8qICMyMjQgKi8KKyAgMjI0LCAyMjUsIDIyNiwgMjI3LCAyMjgsIDIyOSwgMjMwLCAyMzEs
CisgIDIzMiwgMjMzLCAyMzQsIDIzNSwgMjM3LCAyMzcsIDIzOCwgMjM5LAorICAyNDAsIDI0
MSwgMjQyLCAyNDMsIDI0NCwgMjQ1LCAyNDYsIDI0NywKKyAgMjQ4LCAyNDksIDI1MCwgMjUx
LCAyNTIsIDI1MywgMjU0LCAzIAorfTsKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisvLyBwcml2YXRlIGRhdGEgdHlwZXMKKy8vCit0eXBlZGVmIHN0cnVjdCB7CisKKyAgICAv
LyB0aGUgaGFuZGxlIGZvciB0aGUgVVNCIEZUREkgbGlicmFyeQorICAgIHN0cnVjdCBmdGRp
X2NvbnRleHQgZnRkaWM7CisKKyAgICAvLyB0aGUgd2lkdGggYW5kIHRoZSBoZWlnaHQgKGlu
IG51bWJlciBvZiBjaGFyYWN0ZXJzKSBvZiB0aGUgbGlicmFyeQorCWludCB3aWR0aCwgaGVp
Z2h0OworCisJLy8gVGhlIGZyYW1lYnVmZmVyIGFuZCB0aGUgZnJhbWVidWZmZXIgZm9yIHRo
ZSBsYXN0IGNvbnRlbnRzIChpbmNyLiB1cGRhdGUpCisJdW5zaWduZWQgY2hhciAqZnJhbWVi
dWY7CisKKyAgICAvLyBkaXJ0eSBsaW5lIGZsYWdzCisJdW5zaWduZWQgaW50ICpsaW5lX2Zs
YWdzOworCisJLy8gY2hpbGQgdGhyZWFkIGZsYWcKKwlpbnQgY2hpbGRfZmxhZzsKKworCS8v
IHBhcmVudCB0aHJlYWQgZmxhZworCWludCBwYXJlbnRfZmxhZzsKKworCS8vIGRpc3BsYXkg
YnJpZ2h0bmVzcyAwLTEwMDAKKwlpbnQgYnJpZ2h0bmVzczsKKworCS8vIGN1c3RvbSBjaGFy
YWN0ZXJzIGxvYWRlZAorCWludAljY19mbGFnOworCit9IFByaXZhdGVEYXRhOworCisKKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFdyaXRlIGEgY29tbWFuZCB0byB0aGUgZGlz
cGxheS4KKy8vCisvLyBAcGFyYW0gcCB0aGUgcHJpdmF0ZSBkYXRhCisvLyBAcGFyYW0gZGF0
YSB0aGUgZGF0YSBieXRlcworLy8gQHBhcmFtIGxlbmd0aCB0aGUgbnVtYmVyIG9mIGJ5dGVz
IGluIEBwIGRhdGEgd2hpY2ggYXJlIHZhbGlkCisvLyBAcmV0dXJuIDAgb24gc3VjY2Vzcywg
bmVnYXRpdmUgdmFsdWUgb24gZXJyb3IKKy8vCitzdGF0aWMgaW50CitsaXNfZnRkaV93cml0
ZV9jb21tYW5kKERyaXZlciAqZHJ2dGhpcywgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxl
bmd0aCkKK3sKKwlQcml2YXRlRGF0YSAqcCA9IChQcml2YXRlRGF0YSAqKSBkcnZ0aGlzLT5w
cml2YXRlX2RhdGE7CisgICAgaW50IGVycjsKKworICAgIGVyciA9IGZ0ZGlfd3JpdGVfZGF0
YSgmcC0+ZnRkaWMsIGRhdGEsIGxlbmd0aCk7CisgICAgaWYgKGVyciA8IDApIHsKKyAgICAg
ICAgcmVwb3J0KFJQVF9XQVJOSU5HLCAiJXM6IGZ0ZGlfd3JpdGVfZGF0YSBmYWlsZWQgd2l0
aCAlZCIsIGRydnRoaXMtPm5hbWUsIGVycik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9
CisKKwl0aW1pbmdfdVBhdXNlKDE2MDAwKTsKKworICAgIHJldHVybiAwOworfQorCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIERpc3BsYXlzIGEgc3RyaW5nIGF0IGxpbmUgbiAo
biB0eXBpY2FsbHkgMSBvciAyKQorLy8KK3N0YXRpYyBpbnQKK2xpc19mdGRpX2xpbmVfdG9f
ZGlzcGxheShEcml2ZXIgKmRydnRoaXMsIGludCBsaW5lLCB1bnNpZ25lZCBjaGFyICpzdHJp
bmcsIGludCBsZW4pCit7CisgICAgUHJpdmF0ZURhdGEgKnAgPSAoUHJpdmF0ZURhdGEgKikg
ZHJ2dGhpcy0+cHJpdmF0ZV9kYXRhOworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzEyOF07
CisgICAgaW50IGVycjsKKyAgICBpbnQgaTsKKworICAgIGlmIChsZW4gPiBwLT53aWR0aCB8
fCBsaW5lIDwgMSB8fCBsaW5lID4gcC0+aGVpZ2h0KSB7CisgICAgICAgIHJldHVybiAtRUlO
VkFMOworICAgIH0KKyAgICBidWZmZXJbMF0gPSAxNjArbGluZTsKKyAgICBidWZmZXJbMV0g
PSAwOworICAgIGJ1ZmZlclsyXSA9IDE2NzsKKworCWZvciAoaT0wOyBpIDwgbGVuOyBpKysp
IHsKKyAgICAgICAgYnVmZmVyW2krM10gPSBVUEQxNjMxNF9jaGFybWFwWyh1bnNpZ25lZCBj
aGFyKXN0cmluZ1tpXV07CisJfQorCWJ1ZmZlcltpKzNdID0gMHgwMDsKKworICAgIGVyciA9
IGxpc19mdGRpX3dyaXRlX2NvbW1hbmQoZHJ2dGhpcywgYnVmZmVyLCBsZW4rNCk7CisgICAg
aWYgKGVyciA8IDApIHsKKyAgICAgICAgcmVwb3J0KFJQVF9XQVJOSU5HLCAiJXM6IGxpc19m
dGRpX3N0cmluZzogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaXNfZnRkaV93
cml0ZV9jb21tYW5kKCkgZmFpbGVkIiwgZHJ2dGhpcy0+bmFtZSk7CisgICAgfQorCisgICAg
cmV0dXJuIGVycjsKK30KKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBGbHVz
aCB0aGUgZnJhbWVidWZmZXIgdG8gdGhlIGRpc3BsYXkKKy8vCitNT0RVTEVfRVhQT1JUIHZv
aWQKK2xpc19mbHVzaChEcml2ZXIgKmRydnRoaXMpCit7CisJUHJpdmF0ZURhdGEgKnAgPSAo
UHJpdmF0ZURhdGEgKikgZHJ2dGhpcy0+cHJpdmF0ZV9kYXRhOworCisJaW50IGxpbmU7CisK
KworCWZvciAobGluZSA9IDA7IGxpbmUgPCBwLT5oZWlnaHQ7IGxpbmUrKykgeworCQlpZiAo
cC0+bGluZV9mbGFnc1tsaW5lXSkgeworCQkJbGlzX2Z0ZGlfbGluZV90b19kaXNwbGF5KGRy
dnRoaXMsIGxpbmUrMSwgcC0+ZnJhbWVidWYgKyAobGluZSAqIHAtPndpZHRoKSwgcC0+d2lk
dGgpOworCQkJcC0+bGluZV9mbGFnc1tsaW5lXSA9IDA7CS8vIGNsZWFuCisJCX0KKwl9Cit9
CisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gTG9hZHMgY3VzdG9tIGNoYXJh
Y3RlcnMgaW4gdGhlIGRpc3BsYXkKKy8vCitzdGF0aWMgaW50CitsaXNfbG9hZF9jdXN0b21f
Y2hhcnMoRHJpdmVyICpkcnZ0aGlzKQoreworCVByaXZhdGVEYXRhICpwID0gKFByaXZhdGVE
YXRhICopIGRydnRoaXMtPnByaXZhdGVfZGF0YTsKKyAgICBpbnQgaSwgY29sLCByb3csIGVy
cjsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2NV07CisJY2hhciBjdXN0b21fY2hhcnNbOF1b
Q0VMTEhFSUdIVCpDRUxMSEVJR0hUXSA9IHsKKyAgICAgICB7IDAsIDAsIDAsIDAsIDAsCisJ
CSAwLCAwLCAwLCAwLCAwLAorCQkgMCwgMCwgMCwgMCwgMCwKKwkJIDAsIDAsIDAsIDAsIDAs
CisJCSAwLCAwLCAwLCAwLCAwLAorCQkgMCwgMCwgMCwgMCwgMCwKKwkJIDAsIDAsIDAsIDAs
IDAsCisJCSAwLCAwLCAwLCAwLCAwIH0sCisgICAgICAgeyAxLCAwLCAwLCAwLCAwLAkJCS8q
IDEtNSBjaGFyYWN0ZXJzIHVzZWQgYnkgaGJhcigpICovCisJCSAxLCAwLCAwLCAwLCAwLAor
CQkgMSwgMCwgMCwgMCwgMCwKKwkJIDEsIDAsIDAsIDAsIDAsCisJCSAxLCAwLCAwLCAwLCAw
LAorCQkgMSwgMCwgMCwgMCwgMCwKKwkJIDEsIDAsIDAsIDAsIDAsCisJCSAxLCAwLCAwLCAw
LCAwIH0sCisgICAgICAgeyAxLCAxLCAwLCAwLCAwLAkJCQorCQkgMSwgMSwgMCwgMCwgMCwK
KwkJIDEsIDEsIDAsIDAsIDAsCisJCSAxLCAxLCAwLCAwLCAwLAorCQkgMSwgMSwgMCwgMCwg
MCwKKwkJIDEsIDEsIDAsIDAsIDAsCisJCSAxLCAxLCAwLCAwLCAwLAorCQkgMSwgMSwgMCwg
MCwgMCB9LAorICAgICAgIHsgMSwgMSwgMSwgMCwgMCwJCQkKKwkJIDEsIDEsIDEsIDAsIDAs
CisJCSAxLCAxLCAxLCAwLCAwLAorCQkgMSwgMSwgMSwgMCwgMCwKKwkJIDEsIDEsIDEsIDAs
IDAsCisJCSAxLCAxLCAxLCAwLCAwLAorCQkgMSwgMSwgMSwgMCwgMCwKKwkJIDEsIDEsIDEs
IDAsIDAgfSwKKyAgICAgICB7IDEsIDEsIDEsIDEsIDAsCQkJCisJCSAxLCAxLCAxLCAxLCAw
LAorCQkgMSwgMSwgMSwgMSwgMCwKKwkJIDEsIDEsIDEsIDEsIDAsCisJCSAxLCAxLCAxLCAx
LCAwLAorCQkgMSwgMSwgMSwgMSwgMCwKKwkJIDEsIDEsIDEsIDEsIDAsCisJCSAxLCAxLCAx
LCAxLCAwIH0sCisgICAgICAgeyAxLCAxLCAxLCAxLCAxLAkJCQorCQkgMSwgMSwgMSwgMSwg
MSwKKwkJIDEsIDEsIDEsIDEsIDEsCisJCSAxLCAxLCAxLCAxLCAxLAorCQkgMSwgMSwgMSwg
MSwgMSwKKwkJIDEsIDEsIDEsIDEsIDEsCisJCSAxLCAxLCAxLCAxLCAxLAorCQkgMSwgMSwg
MSwgMSwgMSB9LAorICAgICAgIHsgMCwgMCwgMCwgMCwgMCwKKwkJIDAsIDAsIDAsIDAsIDAs
CisJCSAxLCAxLCAxLCAxLCAxLAorCQkgMSwgMCwgMCwgMCwgMSwKKwkJIDEsIDAsIDAsIDAs
IDEsCisJCSAxLCAwLCAwLCAwLCAxLAorCQkgMSwgMSwgMSwgMSwgMSwKKwkJIDAsIDAsIDAs
IDAsIDAgfSwKKyAgICAgICB7IDAsIDAsIDAsIDAsIDAsCisJCSAwLCAwLCAwLCAwLCAwLAor
CQkgMSwgMSwgMSwgMSwgMSwKKwkJIDEsIDAsIDEsIDAsIDEsCisJCSAxLCAxLCAwLCAxLCAx
LAorCQkgMSwgMCwgMSwgMCwgMSwKKwkJIDEsIDEsIDEsIDEsIDEsCisJCSAwLCAwLCAwLCAw
LCAwIH19OworCisJYnVmZmVyWzBdID0gMHhhZDsJCS8vIGNvbW1hbmQgdG8gd3JpdGUgQ0dS
QU0gYXQgMAorCisgICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKyAgICB7CisKKyAgICAg
ICAgLyogYnVpbGQgdGhlIGJ1ZmZlciAqLworICAgICAgICBmb3IgKHJvdyA9IDA7IHJvdyA8
IENFTExIRUlHSFQ7IHJvdysrKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHZhbHVl
ID0gMDsKKworICAgICAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBDRUxMV0lEVEg7IGNv
bCsrKSB7CisJCQkJdmFsdWUgPDw9IDE7CisJCQkJdmFsdWUgfD0gKGN1c3RvbV9jaGFyc1tp
XVsocm93ICogQ0VMTFdJRFRIKSArIGNvbF0gPiAwKSA/IDEgOiAwOworICAgICAgICAgICAg
fQorCQkJYnVmZmVyWyhpKjgpK3JvdysxXSA9IHZhbHVlOworICAgICAgICB9CisgICAgfQor
ICAgIGVyciA9IGxpc19mdGRpX3dyaXRlX2NvbW1hbmQoZHJ2dGhpcywgYnVmZmVyLCA2NSk7
CisgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgcmVwb3J0KFJQVF9XQVJOSU5HLCAiJXM6
IGxpc19sb2FkX2N1c3RvbV9jaGFycygpOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImxpc19mdGRpX3dyaXRlX2NvbW1hbmQoKSBmYWlsZWQiLCBkcnZ0aGlzLT5uYW1lKTsK
KyAgICB9CisJZWxzZQorCQlwLT5jY19mbGFnID0gMTsKKworICAgIHJldHVybiBlcnI7Cit9
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU2VwZXJhdGUgdGhyZWFkIHRvIGtl
ZXAgYSByZWFkIHVwIG9uIHRoZSBVU0IgZGV2aWNlIGF0IGFsbCB0aW1lcworaW50CitsaXNf
cmVhZF90aHJlYWQodm9pZCAqYXJnKQoreworCURyaXZlciAqZHJ2dGhpczsKKwlQcml2YXRl
RGF0YSAqcDsKKwljaGFyIHVuc2lnbmVkIGJ1ZmZlcls2NF07CisJaW50IHNpemU7CisKKwlk
cnZ0aGlzID0gKERyaXZlciAqKWFyZzsKKwlwID0gKFByaXZhdGVEYXRhICopIGRydnRoaXMt
PnByaXZhdGVfZGF0YTsKKworCXdoaWxlKCEgcC0+Y2hpbGRfZmxhZykgeworCQlmb3IgKHNp
emUgPSBmdGRpX3JlYWRfZGF0YSgmcC0+ZnRkaWMsIGJ1ZmZlciwgNjQpOyBzaXplID4gMDsg
c2l6ZSA9IGZ0ZGlfcmVhZF9kYXRhKCZwLT5mdGRpYywgYnVmZmVyLCA2NCkpCisJCQk7CisJ
CWlmIChzaXplIDwgMCkgeworCQkJcmV0dXJuIHNpemU7CisJCQlwLT5wYXJlbnRfZmxhZyA9
IDA7CisJCX0KKwl9CisJcC0+cGFyZW50X2ZsYWcgPSAwOworCXJldHVybiAwOworCit9CisK
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIENvbnRyb2wgdGhlIGRpc3BsYXkgYnJp
Z2h0bmVzcworLy8KK01PRFVMRV9FWFBPUlQgaW50CitsaXNfc2V0X2JyaWdodG5lc3MoRHJp
dmVyICpkcnZ0aGlzLCBpbnQgc3RhdGUsIGludCBwcm9taWxsZSkKK3sKKwl1bnNpZ25lZCBj
aGFyIGJ1ZmZlclsyXTsKKwlpbnQgZXJyOworCVByaXZhdGVEYXRhICpwID0gKFByaXZhdGVE
YXRhICopIGRydnRoaXMtPnByaXZhdGVfZGF0YTsKKwkKKwlpZiAocHJvbWlsbGUgPCAwIHx8
IHByb21pbGxlID4gMTAwMCkgCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisJYnVmZmVy
WzBdID0gMHhhNTsKKwlpZiAoIHByb21pbGxlIDwgMjUxICkKKwkJYnVmZmVyWzFdID0gMHgz
OwkJLy8gMjUlCisJZWxzZSBpZiAoIHByb21pbGxlIDwgNTAxICkKKwkJYnVmZmVyWzFdID0g
MHgyOwkJLy8gNTAlCisJZWxzZSBpZiAoIHByb21pbGxlIDwgNzUxICkKKwkJYnVmZmVyWzFd
ID0gMHgxOwkJLy8gNzUlCisJZWxzZQorCQlidWZmZXJbMV0gPSAweDA7CQkvLyAxMDAlCisK
KyAgICBlcnIgPSBmdGRpX3dyaXRlX2RhdGEoJnAtPmZ0ZGljLCBidWZmZXIsIDIpOworICAg
IGlmIChlcnIgPCAwKSB7CisgICAgICAgIHJlcG9ydChSUFRfV0FSTklORywgIiVzOiBsaXNf
c2V0X2JyaWdodG5lc3MoKTogZnRkaV93cml0ZV9kYXRhIGZhaWxlZCB3aXRoICVkIiwgZHJ2
dGhpcy0+bmFtZSwgZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisJZWxzZQor
CQlwLT5icmlnaHRuZXNzID0gcHJvbWlsbGU7CisJcmV0dXJuIDA7Cit9CisKKy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKy8vIEdldCB0aGUgYnJpZ2h0bmVzcyBzZXR0aW5nCitNT0RV
TEVfRVhQT1JUIGludAorbGlzX2dldF9icmlnaHRuZXNzKERyaXZlciAqZHJ2dGhpcywgaW50
IHN0YXRlKQoreworCVByaXZhdGVEYXRhICpwID0gKFByaXZhdGVEYXRhICopIGRydnRoaXMt
PnByaXZhdGVfZGF0YTsKKworCXJldHVybiBwLT5icmlnaHRuZXNzOworfQorCisvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisvLyBJbml0IHRoZSBkcml2ZXIgYW5kIGRpc3BsYXkKKy8v
CitNT0RVTEVfRVhQT1JUIGludAorbGlzX2luaXQoRHJpdmVyICpkcnZ0aGlzKQoreworCVBy
aXZhdGVEYXRhICpwOworCWludCBlcnI7CisJY29uc3QgY2hhciAqczsKKwl1bnNpZ25lZCBj
aGFyIGJ1ZmZlcls2NF0sICp0aHJlYWRfc3RhY2s7CisJaW50IGNvdW50OworCisJLy8gQWxv
Y2F0ZSBhbmQgc3RvcmUgcHJpdmF0ZSBkYXRhCisJcCA9IChQcml2YXRlRGF0YSAqKSBtYWxs
b2MoIHNpemVvZiggUHJpdmF0ZURhdGEpICk7CisJaWYgKHAgPT0gTlVMTCkgeworCQlyZXR1
cm4gLTE7CisJfQorCWlmIChkcnZ0aGlzLT5zdG9yZV9wcml2YXRlX3B0cihkcnZ0aGlzLCBw
KSkgeworCQlyZXR1cm4gLTE7CisJfQorCisJcC0+Y2hpbGRfZmxhZyA9IDA7CisJcC0+cGFy
ZW50X2ZsYWcgPSAwOworCXAtPmNjX2ZsYWcgPSAwOworCisJLy8gR2V0IGFuZCBwYXJzZSBz
aXplCisJcyA9IGRydnRoaXMtPmNvbmZpZ19nZXRfc3RyaW5nKCBkcnZ0aGlzLT5uYW1lLCAi
c2l6ZSIsIDAsICIyMHgyIik7CisJaWYgKChzc2NhbmYocywgIiVkeCVkIiwgJihwLT53aWR0
aCksICYocC0+aGVpZ2h0KSkgIT0gMikKKwkgICAgfHwgKHAtPndpZHRoIDw9IDApIHx8IChw
LT53aWR0aCA+IExDRF9NQVhfV0lEVEgpCisJICAgIHx8IChwLT5oZWlnaHQgPD0gMCkgfHwg
KHAtPmhlaWdodCA+IExDRF9NQVhfSEVJR0hUKSkgeworCQlyZXBvcnQoUlBUX0VSUiwgIiVz
OiBjYW5ub3QgcmVhZCBTaXplICVzIiwgZHJ2dGhpcy0+bmFtZSwgcyk7CisJCXJldHVybiAt
MTsKKwl9CisKKwkvLyBzZXQgdXAgdGhlIGRpcnR5IGZsYWdzCisJaWYoICEgKHAtPmxpbmVf
ZmxhZ3MgPSAodW5zaWduZWQgaW50ICopbWFsbG9jKHNpemVvZihpbnQpICogcC0+aGVpZ2h0
KSkpIHsKKwkJcmVwb3J0KFJQVF9FUlIsICIlczogY2Fubm90IGFsbG9jYXRlIGxpbmUgZmxh
Z3MgbWVtb3J5IiwgZHJ2dGhpcy0+bmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisJZm9yIChj
b3VudCA9IDA7IGNvdW50IDwgcC0+aGVpZ2h0OyBjb3VudCsrKQorCQlwLT5saW5lX2ZsYWdz
W2NvdW50XSA9IDE7CQkJCQkvLyBkaXJ0eSEKKworCS8qIFdoaWNoIGRpc3BsYXkgYnJpZ2h0
bmVzcyAqLworCWNvdW50ID0gZHJ2dGhpcy0+Y29uZmlnX2dldF9pbnQoZHJ2dGhpcy0+bmFt
ZSwgIkJyaWdodG5lc3MiLCAwLCBERUZBVUxUX0JSSUdIVE5FU1MpOworCWlmICgoY291bnQg
PCAwKSB8fCAoY291bnQgPiAxMDAwKSkgeworCQlyZXBvcnQoUlBUX1dBUk5JTkcsICIlczog
QnJpZ2h0bmVzcyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTAwMDsgdXNpbmcgZGVmYXVsdCAl
ZCIsCisJCQlkcnZ0aGlzLT5uYW1lLCBERUZBVUxUX0JSSUdIVE5FU1MpOworCQljb3VudCA9
IERFRkFVTFRfQlJJR0hUTkVTUzsKKwl9CisJcC0+YnJpZ2h0bmVzcyA9IGNvdW50OworCisJ
LyogRW5kIG9mIGNvbmZpZyBmaWxlIHBhcnNpbmcgKi8KKworCisJLy8gaW5pdGlhbGlzZSBk
ZWxheSB0aW1pbmcKKwlpZiAodGltaW5nX2luaXQoKSkgeworCQlyZXBvcnQoUlBUX0VSUiwg
IiVzOiBjYW5ub3QgaW5pdGlhbGlzZSBkZWxheSB0aW1pbmciLCBkcnZ0aGlzLT5uYW1lKTsK
KwkJcmV0dXJuIC0xOworCX0KKwkvLyBBbGxvY2F0ZSBmcmFtZWJ1ZmZlcgorCXAtPmZyYW1l
YnVmID0gKHVuc2lnbmVkIGNoYXIgKikgbWFsbG9jKHAtPndpZHRoICogcC0+aGVpZ2h0KTsK
KwlpZiAocC0+ZnJhbWVidWYgPT0gTlVMTCkgeworCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiB1
bmFibGUgdG8gYWxsb2NhdGUgZnJhbWVidWZmZXIiLCBkcnZ0aGlzLT5uYW1lKTsKKwkJZ290
byBlcnJfYmVnaW47CisJfQorCisJLy8gb3BlbiB0aGUgRlRESSBsaWJyYXJ5CisJZnRkaV9p
bml0KCZwLT5mdGRpYyk7CisvLwkoJnAtPmZ0ZGljKS0+dXNiX3dyaXRlX3RpbWVvdXQgPSAy
MDsKKy8vCSgmcC0+ZnRkaWMpLT51c2JfcmVhZF90aW1lb3V0ID0gMjA7CisKKwkvLyBvcGVu
IHRoZSBkZXZpY2UKKwllcnIgPSBmdGRpX3VzYl9vcGVuKCZwLT5mdGRpYywgRElTUExBWV9W
RU5ET1JfSUQsIERJU1BMQVlfUFJPRFVDVF9JRCk7CisJaWYgKGVyciA8IDApIHsKKwkJcmVw
b3J0KFJQVF9FUlIsICIlczogY2Fubm90IG9wZW4gVVNCIGRldmljZSIsIGRydnRoaXMtPm5h
bWUpOworCQlnb3RvIGVycl9mcmFtZWJ1ZjsKKwl9CisKKwkvLyBzZXQgY29tbXVuaWNhdGlv
biBwYXJhbWV0ZXJzCisJZXJyID0gZnRkaV9zZXRfbGluZV9wcm9wZXJ0eSgmcC0+ZnRkaWMs
IEJJVFNfNywgU1RPUF9CSVRfMSwgRVZFTik7CisJaWYgKGVyciA8IDApIHsKKwkJcmVwb3J0
KFJQVF9FUlIsICIlczogY2Fubm90IHNldCBsaW5lIHByb3BlcnRpZXMiLCBkcnZ0aGlzLT5u
YW1lKTsKKwkJZ290byBlcnJfZnRkaTsKKwl9CisKKwkvLyBzZXQgRFRSIG1hc2sgYW5kIGhp
Z2gKKwllcnIgPSBmdGRpX3NldGR0cigmcC0+ZnRkaWMsIFNJT19TRVRfRFRSX01BU0sgfCBT
SU9fU0VUX0RUUl9ISUdIKTsKKwlpZiAoZXJyIDwgMCkgeworCQlyZXBvcnQoUlBUX0VSUiwg
IiVzOiBjYW5ub3Qgc2V0IERUUiBtYXNrIiwgZHJ2dGhpcy0+bmFtZSk7CisJCWdvdG8gZXJy
X2Z0ZGk7CisJfQorCisJLy8gc2V0IFJUUyBtYXNrIGFuZCBoaWdoCisJZXJyID0gZnRkaV9z
ZXRydHMoJnAtPmZ0ZGljLCBTSU9fU0VUX1JUU19NQVNLIHwgU0lPX1NFVF9SVFNfSElHSCk7
CisJaWYgKGVyciA8IDApIHsKKwkJcmVwb3J0KFJQVF9FUlIsICIlczogY2Fubm90IHNldCBS
VFMgbWFzayIsIGRydnRoaXMtPm5hbWUpOworCQlnb3RvIGVycl9mdGRpOworCX0KKworCS8v
IHNldCB0aGUgYmF1ZHJhdGUKKwllcnIgPSBmdGRpX3NldF9iYXVkcmF0ZSgmcC0+ZnRkaWMs
IDEyMDApOworCWlmIChlcnIgPCAwKSB7CisJCXJlcG9ydChSUFRfRVJSLCAiJXM6IGNhbm5v
dCBzZXQgYmF1ZHJhdGUiLCBkcnZ0aGlzLT5uYW1lKTsKKwkJZ290byBlcnJfZnRkaTsKKwl9
CisKKwkvLyBzZXQgUlRTIGhpZ2gKKwllcnIgPSBmdGRpX3NldHJ0cygmcC0+ZnRkaWMsIFNJ
T19TRVRfUlRTX0hJR0gpOworCWlmIChlcnIgPCAwKSB7CisJCXJlcG9ydChSUFRfRVJSLCAi
JXM6IGNhbm5vdCBzZXQgUlRTIGhpZ2giLCBkcnZ0aGlzLT5uYW1lKTsKKwkJZ290byBlcnJf
ZnRkaTsKKwl9CisKKwkvLyBzZXQgRFRSIGhpZ2gKKwllcnIgPSBmdGRpX3NldGR0cigmcC0+
ZnRkaWMsIFNJT19TRVRfRFRSX0hJR0gpOworCWlmIChlcnIgPCAwKSB7CisJCXJlcG9ydChS
UFRfRVJSLCAiJXM6IGNhbm5vdCBzZXQgRFRSIGhpZ2giLCBkcnZ0aGlzLT5uYW1lKTsKKwkJ
Z290byBlcnJfZnRkaTsKKwl9CisKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCA2OyBjb3Vu
dCsrKSB7CisJCS8vIHJlc2V0IGRldmljZQorCQllcnIgPSBmdGRpX3VzYl9yZXNldCgmcC0+
ZnRkaWMpOworCQlpZiAoZXJyIDwgMCkgeworCQkJcmVwb3J0KFJQVF9FUlIsICIlczogY2Fu
bm90IHJlc2V0IGRldmljZSIsIGRydnRoaXMtPm5hbWUpOworCQkJZ290byBlcnJfZnRkaTsK
KwkJfQorCX0KKwkvLyBzZXQgbGF0ZW5jeSB0aW1lcgorCWVyciA9IGZ0ZGlfc2V0X2xhdGVu
Y3lfdGltZXIoJnAtPmZ0ZGljLCAxNik7CisJaWYgKGVyciA8IDApIHsKKwkJcmVwb3J0KFJQ
VF9FUlIsICIlczogY2Fubm90IHNldCBsYXRlbmN5IHRpbWVyIiwgZHJ2dGhpcy0+bmFtZSk7
CisJCWdvdG8gZXJyX2Z0ZGk7CisJfQorCisJLy8gY2xvbmUgYSB0aHJlYWQgdG8ga2VlcCBh
IHJlYWQgdXAgb24gdGhlIGRldmljZQorCXRocmVhZF9zdGFjayA9IGNhbGxvYyg0MDk2LCAx
KTsKKwlpZighIHRocmVhZF9zdGFjaykgeworCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBjYW5u
b3QgY3JlYXRlIHRocmVhZCBzdGFjayIsIGRydnRoaXMtPm5hbWUpOworCQlnb3RvIGVycl9m
cmFtZWJ1ZjsKKwl9CisKKwllcnIgPSBjbG9uZShsaXNfcmVhZF90aHJlYWQsIHRocmVhZF9z
dGFjays0MDkyLCBDTE9ORV9WTSB8IENMT05FX1RIUkVBRHwgQ0xPTkVfU0lHSEFORCwgZHJ2
dGhpcyk7CisJaWYgKGVyciA9PSAtMSkgeworCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBjbG9u
ZSgpIC0gJXMiLCBkcnZ0aGlzLT5uYW1lLCBzdHJlcnJvcihlcnJubykpOworCQlnb3RvIGVy
cl9mcmFtZWJ1ZjsKKwl9CisJcC0+cGFyZW50X2ZsYWcgPSAxOwkJLy8gc2hvdyB3ZSdyZSBu
b3cgYSBoYXBweSBwYXJlbnQsIGJpcnRoIHN1Y2Nlc3NmdWwuCisKKwkvLyBzZXQgY29tbXVu
aWNhdGlvbiBwYXJhbWV0ZXJzCisJZXJyID0gZnRkaV9zZXRfbGluZV9wcm9wZXJ0eSgmcC0+
ZnRkaWMsIEJJVFNfNywgU1RPUF9CSVRfMSwgRVZFTik7CisJaWYgKGVyciA8IDApIHsKKwkJ
cmVwb3J0KFJQVF9FUlIsICIlczogY2Fubm90IHNldCBsaW5lIHByb3BlcnRpZXMiLCBkcnZ0
aGlzLT5uYW1lKTsKKwkJZ290byBlcnJfZnRkaTsKKwl9CisKKwkvLyBzZXQgRFRSIG1hc2sg
YW5kIGhpZ2gKKwllcnIgPSBmdGRpX3NldGR0cigmcC0+ZnRkaWMsIFNJT19TRVRfRFRSX01B
U0sgfCBTSU9fU0VUX0RUUl9ISUdIKTsKKwlpZiAoZXJyIDwgMCkgeworCQlyZXBvcnQoUlBU
X0VSUiwgIiVzOiBjYW5ub3Qgc2V0IERUUiBtYXNrIiwgZHJ2dGhpcy0+bmFtZSk7CisJCWdv
dG8gZXJyX2Z0ZGk7CisJfQorCisJLy8gc2V0IFJUUyBtYXNrIGFuZCBoaWdoCisJZXJyID0g
ZnRkaV9zZXRydHMoJnAtPmZ0ZGljLCBTSU9fU0VUX1JUU19NQVNLIHwgU0lPX1NFVF9SVFNf
SElHSCk7CisJaWYgKGVyciA8IDApIHsKKwkJcmVwb3J0KFJQVF9FUlIsICIlczogY2Fubm90
IHNldCBSVFMgbWFzayIsIGRydnRoaXMtPm5hbWUpOworCQlnb3RvIGVycl9mdGRpOworCX0K
KworCS8vIGRpc2FibGUgZmxvdyBjb250cm9sCisJZXJyID0gZnRkaV9zZXRmbG93Y3RybCgm
cC0+ZnRkaWMsIFNJT19ESVNBQkxFX0ZMT1dfQ1RSTCk7CisJaWYgKGVyciA8IDApIHsKKwkJ
cmVwb3J0KFJQVF9FUlIsICIlczogY2Fubm90IGRpc2FibGUgZmxvdyBjb250cm9sIiwgZHJ2
dGhpcy0+bmFtZSk7CisJCWdvdG8gZXJyX2Z0ZGk7CisJfQorCisJLy8gc2V0IHRoZSBiYXVk
cmF0ZQorCWVyciA9IGZ0ZGlfc2V0X2JhdWRyYXRlKCZwLT5mdGRpYywgMTIwMCk7CisJaWYg
KGVyciA8IDApIHsKKwkJcmVwb3J0KFJQVF9FUlIsICIlczogY2Fubm90IHNldCBiYXVkcmF0
ZSIsIGRydnRoaXMtPm5hbWUpOworCQlnb3RvIGVycl9mdGRpOworCX0KKworCS8vIHNldCBS
VFMgbWFzayBhbmQgaGlnaAorCWVyciA9IGZ0ZGlfc2V0cnRzKCZwLT5mdGRpYywgU0lPX1NF
VF9SVFNfTUFTSyB8IFNJT19TRVRfUlRTX0hJR0gpOworCWlmIChlcnIgPCAwKSB7CisJCXJl
cG9ydChSUFRfRVJSLCAiJXM6IGNhbm5vdCBzZXQgUlRTIG1hc2siLCBkcnZ0aGlzLT5uYW1l
KTsKKwkJZ290byBlcnJfZnRkaTsKKwl9CisKKwkvLyBzZXQgRFRSIG1hc2sgYW5kIGhpZ2gK
KwllcnIgPSBmdGRpX3NldGR0cigmcC0+ZnRkaWMsIFNJT19TRVRfRFRSX01BU0sgfCBTSU9f
U0VUX0RUUl9ISUdIKTsKKwlpZiAoZXJyIDwgMCkgeworCQlyZXBvcnQoUlBUX0VSUiwgIiVz
OiBjYW5ub3Qgc2V0IERUUiBtYXNrIiwgZHJ2dGhpcy0+bmFtZSk7CisJCWdvdG8gZXJyX2Z0
ZGk7CisJfQorCisJLy8gZGlzYWJsZSBmbG93IGNvbnRyb2wKKwllcnIgPSBmdGRpX3NldGZs
b3djdHJsKCZwLT5mdGRpYywgU0lPX0RJU0FCTEVfRkxPV19DVFJMKTsKKwlpZiAoZXJyIDwg
MCkgeworCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBjYW5ub3QgZGlzYWJsZSBmbG93IGNvbnRy
b2wiLCBkcnZ0aGlzLT5uYW1lKTsKKwkJZ290byBlcnJfZnRkaTsKKwl9CisKKwkvLyBzZXQg
RFRSIG1hc2sgYW5kIGhpZ2gKKwllcnIgPSBmdGRpX3NldGR0cigmcC0+ZnRkaWMsIFNJT19T
RVRfRFRSX01BU0sgfCBTSU9fU0VUX0RUUl9ISUdIKTsKKwlpZiAoZXJyIDwgMCkgeworCQly
ZXBvcnQoUlBUX0VSUiwgIiVzOiBjYW5ub3Qgc2V0IERUUiBtYXNrIiwgZHJ2dGhpcy0+bmFt
ZSk7CisJCWdvdG8gZXJyX2Z0ZGk7CisJfQorCisJLy8gc2V0IFJUUyBoaWdoCisJZXJyID0g
ZnRkaV9zZXRydHMoJnAtPmZ0ZGljLCBTSU9fU0VUX1JUU19ISUdIKTsKKwlpZiAoZXJyIDwg
MCkgeworCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBjYW5ub3Qgc2V0IFJUUyBoaWdoIiwgZHJ2
dGhpcy0+bmFtZSk7CisJCWdvdG8gZXJyX2Z0ZGk7CisJfQorCisJdGltaW5nX3VQYXVzZSgx
OTIwMDApOworCisJLy8gc2V0IHRoZSBiYXVkcmF0ZQorCWVyciA9IGZ0ZGlfc2V0X2JhdWRy
YXRlKCZwLT5mdGRpYywgMTIwMCk7CisJaWYgKGVyciA8IDApIHsKKwkJcmVwb3J0KFJQVF9F
UlIsICIlczogY2Fubm90IHNldCBiYXVkcmF0ZSIsIGRydnRoaXMtPm5hbWUpOworCQlnb3Rv
IGVycl9mdGRpOworCX0KKworCS8vIHNldCBjb21tdW5pY2F0aW9uIHBhcmFtZXRlcnMKKwll
cnIgPSBmdGRpX3NldF9saW5lX3Byb3BlcnR5KCZwLT5mdGRpYywgQklUU183LCBTVE9QX0JJ
VF8xLCBOT05FKTsKKwlpZiAoZXJyIDwgMCkgeworCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBj
YW5ub3Qgc2V0IGxpbmUgcHJvcGVydGllcyIsIGRydnRoaXMtPm5hbWUpOworCQlnb3RvIGVy
cl9mdGRpOworCX0KKworCS8vIHNldCBEVFIgaGlnaAorCWVyciA9IGZ0ZGlfc2V0ZHRyKCZw
LT5mdGRpYywgU0lPX1NFVF9EVFJfSElHSCk7CisJaWYgKGVyciA8IDApIHsKKwkJcmVwb3J0
KFJQVF9FUlIsICIlczogY2Fubm90IHNldCBEVFIgaGlnaCIsIGRydnRoaXMtPm5hbWUpOwor
CQlnb3RvIGVycl9mdGRpOworCX0KKworCS8vIHNldCBSVFMgaGlnaAorCWVyciA9IGZ0ZGlf
c2V0cnRzKCZwLT5mdGRpYywgU0lPX1NFVF9SVFNfSElHSCk7CisJaWYgKGVyciA8IDApIHsK
KwkJcmVwb3J0KFJQVF9FUlIsICIlczogY2Fubm90IHNldCBSVFMgaGlnaCIsIGRydnRoaXMt
Pm5hbWUpOworCQlnb3RvIGVycl9mdGRpOworCX0KKworCXRpbWluZ191UGF1c2UoMTkyMDAw
KTsKKworCS8vIHNldCBEVFIgbWFzayBhbmQgaGlnaAorCWVyciA9IGZ0ZGlfc2V0ZHRyKCZw
LT5mdGRpYywgU0lPX1NFVF9EVFJfTUFTSyB8IFNJT19TRVRfRFRSX0hJR0gpOworCWlmIChl
cnIgPCAwKSB7CisJCXJlcG9ydChSUFRfRVJSLCAiJXM6IGNhbm5vdCBzZXQgRFRSIG1hc2si
LCBkcnZ0aGlzLT5uYW1lKTsKKwkJZ290byBlcnJfZnRkaTsKKwl9CisKKwl0aW1pbmdfdVBh
dXNlKDE5MjAwMCk7CisKKwkvLyBzZXQgUlRTIG1hc2sgYW5kIGhpZ2gKKwllcnIgPSBmdGRp
X3NldHJ0cygmcC0+ZnRkaWMsIFNJT19TRVRfUlRTX01BU0sgfCBTSU9fU0VUX1JUU19ISUdI
KTsKKwlpZiAoZXJyIDwgMCkgeworCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBjYW5ub3Qgc2V0
IFJUUyBtYXNrIiwgZHJ2dGhpcy0+bmFtZSk7CisJCWdvdG8gZXJyX2Z0ZGk7CisJfQorCisJ
dGltaW5nX3VQYXVzZSgyMzYwMDApOworCisJLy8gc2V0IERUUiBoaWdoCisJZXJyID0gZnRk
aV9zZXRkdHIoJnAtPmZ0ZGljLCBTSU9fU0VUX0RUUl9ISUdIKTsKKwlpZiAoZXJyIDwgMCkg
eworCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBjYW5ub3Qgc2V0IERUUiBoaWdoIiwgZHJ2dGhp
cy0+bmFtZSk7CisJCWdvdG8gZXJyX2Z0ZGk7CisJfQorCisJLy8gc2V0IFJUUyBoaWdoCisJ
ZXJyID0gZnRkaV9zZXRydHMoJnAtPmZ0ZGljLCBTSU9fU0VUX1JUU19ISUdIKTsKKwlpZiAo
ZXJyIDwgMCkgeworCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBjYW5ub3Qgc2V0IFJUUyBoaWdo
IiwgZHJ2dGhpcy0+bmFtZSk7CisJCWdvdG8gZXJyX2Z0ZGk7CisJfQorCisJdGltaW5nX3VQ
YXVzZSgxOTIwMDApOworCisJLy8gc2V0IERUUiBtYXNrIGFuZCBoaWdoCisJZXJyID0gZnRk
aV9zZXRkdHIoJnAtPmZ0ZGljLCBTSU9fU0VUX0RUUl9NQVNLIHwgU0lPX1NFVF9EVFJfSElH
SCk7CisJaWYgKGVyciA8IDApIHsKKwkJcmVwb3J0KFJQVF9FUlIsICIlczogY2Fubm90IHNl
dCBEVFIgbWFzayIsIGRydnRoaXMtPm5hbWUpOworCQlnb3RvIGVycl9mdGRpOworCX0KKwor
CS8vIHNldCBSVFMgbWFzayBhbmQgaGlnaAorCWVyciA9IGZ0ZGlfc2V0cnRzKCZwLT5mdGRp
YywgU0lPX1NFVF9SVFNfTUFTSyB8IFNJT19TRVRfUlRTX0hJR0gpOworCWlmIChlcnIgPCAw
KSB7CisJCXJlcG9ydChSUFRfRVJSLCAiJXM6IGNhbm5vdCBzZXQgUlRTIG1hc2siLCBkcnZ0
aGlzLT5uYW1lKTsKKwkJZ290byBlcnJfZnRkaTsKKwl9CisKKwl0aW1pbmdfdVBhdXNlKDIz
NjAwMCk7CisKKwkvLyBzZXQgRFRSIG1hc2sgYW5kIGhpZ2gKKwllcnIgPSBmdGRpX3NldGR0
cigmcC0+ZnRkaWMsIFNJT19TRVRfRFRSX01BU0sgfCBTSU9fU0VUX0RUUl9ISUdIKTsKKwlp
ZiAoZXJyIDwgMCkgeworCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBjYW5ub3Qgc2V0IERUUiBt
YXNrIiwgZHJ2dGhpcy0+bmFtZSk7CisJCWdvdG8gZXJyX2Z0ZGk7CisJfQorCisJLy8gc2V0
IFJUUyBoaWdoCisJZXJyID0gZnRkaV9zZXRydHMoJnAtPmZ0ZGljLCBTSU9fU0VUX1JUU19I
SUdIKTsKKwlpZiAoZXJyIDwgMCkgeworCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBjYW5ub3Qg
c2V0IFJUUyBoaWdoIiwgZHJ2dGhpcy0+bmFtZSk7CisJCWdvdG8gZXJyX2Z0ZGk7CisJfQor
CisJdGltaW5nX3VQYXVzZSgxOTIwMDApOworCisJLy8gc2V0IHRoZSBiYXVkcmF0ZQorCWVy
ciA9IGZ0ZGlfc2V0X2JhdWRyYXRlKCZwLT5mdGRpYywgMTIwMCk7CisJaWYgKGVyciA8IDAp
IHsKKwkJcmVwb3J0KFJQVF9FUlIsICIlczogY2Fubm90IHNldCBiYXVkcmF0ZSIsIGRydnRo
aXMtPm5hbWUpOworCQlnb3RvIGVycl9mdGRpOworCX0KKworCS8vIHNldCBjb21tdW5pY2F0
aW9uIHBhcmFtZXRlcnMKKwllcnIgPSBmdGRpX3NldF9saW5lX3Byb3BlcnR5KCZwLT5mdGRp
YywgQklUU183LCBTVE9QX0JJVF8xLCBOT05FKTsKKwlpZiAoZXJyIDwgMCkgeworCQlyZXBv
cnQoUlBUX0VSUiwgIiVzOiBjYW5ub3Qgc2V0IGxpbmUgcHJvcGVydGllcyIsIGRydnRoaXMt
Pm5hbWUpOworCQlnb3RvIGVycl9mdGRpOworCX0KKworCS8vIHNldCBEVFIgaGlnaAorCWVy
ciA9IGZ0ZGlfc2V0ZHRyKCZwLT5mdGRpYywgU0lPX1NFVF9EVFJfSElHSCk7CisJaWYgKGVy
ciA8IDApIHsKKwkJcmVwb3J0KFJQVF9FUlIsICIlczogY2Fubm90IHNldCBEVFIgaGlnaCIs
IGRydnRoaXMtPm5hbWUpOworCQlnb3RvIGVycl9mdGRpOworCX0KKworCS8vIHNldCBSVFMg
aGlnaAorCWVyciA9IGZ0ZGlfc2V0cnRzKCZwLT5mdGRpYywgU0lPX1NFVF9SVFNfSElHSCk7
CisJaWYgKGVyciA8IDApIHsKKwkJcmVwb3J0KFJQVF9FUlIsICIlczogY2Fubm90IHNldCBS
VFMgaGlnaCIsIGRydnRoaXMtPm5hbWUpOworCQlnb3RvIGVycl9mdGRpOworCX0KKworCXRp
bWluZ191UGF1c2UoMTkyMDAwKTsKKworCS8vIHNldCBEVFIgbWFzayBhbmQgaGlnaAorCWVy
ciA9IGZ0ZGlfc2V0ZHRyKCZwLT5mdGRpYywgU0lPX1NFVF9EVFJfTUFTSyB8IFNJT19TRVRf
RFRSX0hJR0gpOworCWlmIChlcnIgPCAwKSB7CisJCXJlcG9ydChSUFRfRVJSLCAiJXM6IGNh
bm5vdCBzZXQgRFRSIG1hc2siLCBkcnZ0aGlzLT5uYW1lKTsKKwkJZ290byBlcnJfZnRkaTsK
Kwl9CisKKwl0aW1pbmdfdVBhdXNlKDE5MjAwMCk7CisKKwkvLyBzZXQgUlRTIG1hc2sgYW5k
IGhpZ2gKKwllcnIgPSBmdGRpX3NldHJ0cygmcC0+ZnRkaWMsIFNJT19TRVRfUlRTX01BU0sg
fCBTSU9fU0VUX1JUU19ISUdIKTsKKwlpZiAoZXJyIDwgMCkgeworCQlyZXBvcnQoUlBUX0VS
UiwgIiVzOiBjYW5ub3Qgc2V0IFJUUyBtYXNrIiwgZHJ2dGhpcy0+bmFtZSk7CisJCWdvdG8g
ZXJyX2Z0ZGk7CisJfQorCisJdGltaW5nX3VQYXVzZSgyMzYwMDApOworCisJLy8gc2V0IERU
UiBoaWdoCisJZXJyID0gZnRkaV9zZXRkdHIoJnAtPmZ0ZGljLCBTSU9fU0VUX0RUUl9ISUdI
KTsKKwlpZiAoZXJyIDwgMCkgeworCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBjYW5ub3Qgc2V0
IERUUiBoaWdoIiwgZHJ2dGhpcy0+bmFtZSk7CisJCWdvdG8gZXJyX2Z0ZGk7CisJfQorCisJ
Ly8gc2V0IFJUUyBoaWdoCisJZXJyID0gZnRkaV9zZXRydHMoJnAtPmZ0ZGljLCBTSU9fU0VU
X1JUU19ISUdIKTsKKwlpZiAoZXJyIDwgMCkgeworCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBj
YW5ub3Qgc2V0IFJUUyBoaWdoIiwgZHJ2dGhpcy0+bmFtZSk7CisJCWdvdG8gZXJyX2Z0ZGk7
CisJfQorCisJdGltaW5nX3VQYXVzZSgyMzYwMDApOworCisJLy8gc2V0IERUUiBtYXNrIGFu
ZCBoaWdoCisJZXJyID0gZnRkaV9zZXRkdHIoJnAtPmZ0ZGljLCBTSU9fU0VUX0RUUl9NQVNL
IHwgU0lPX1NFVF9EVFJfSElHSCk7CisJaWYgKGVyciA8IDApIHsKKwkJcmVwb3J0KFJQVF9F
UlIsICIlczogY2Fubm90IHNldCBEVFIgbWFzayIsIGRydnRoaXMtPm5hbWUpOworCQlnb3Rv
IGVycl9mdGRpOworCX0KKworCS8vIHNldCBSVFMgaGlnaAorCWVyciA9IGZ0ZGlfc2V0cnRz
KCZwLT5mdGRpYywgU0lPX1NFVF9SVFNfSElHSCk7CisJaWYgKGVyciA8IDApIHsKKwkJcmVw
b3J0KFJQVF9FUlIsICIlczogY2Fubm90IHNldCBSVFMgaGlnaCIsIGRydnRoaXMtPm5hbWUp
OworCQlnb3RvIGVycl9mdGRpOworCX0KKworCS8vIHNldCB0aGUgYmF1ZHJhdGUKKwllcnIg
PSBmdGRpX3NldF9iYXVkcmF0ZSgmcC0+ZnRkaWMsIDEyMDApOworCWlmIChlcnIgPCAwKSB7
CisJCXJlcG9ydChSUFRfRVJSLCAiJXM6IGNhbm5vdCBzZXQgYmF1ZHJhdGUiLCBkcnZ0aGlz
LT5uYW1lKTsKKwkJZ290byBlcnJfZnRkaTsKKwl9CisKKwkvLyBzZXQgY29tbXVuaWNhdGlv
biBwYXJhbWV0ZXJzCisJZXJyID0gZnRkaV9zZXRfbGluZV9wcm9wZXJ0eSgmcC0+ZnRkaWMs
IEJJVFNfNywgU1RPUF9CSVRfMSwgTk9ORSk7CisJaWYgKGVyciA8IDApIHsKKwkJcmVwb3J0
KFJQVF9FUlIsICIlczogY2Fubm90IHNldCBsaW5lIHByb3BlcnRpZXMiLCBkcnZ0aGlzLT5u
YW1lKTsKKwkJZ290byBlcnJfZnRkaTsKKwl9CisKKwkvLyBzZXQgRFRSIGhpZ2gKKwllcnIg
PSBmdGRpX3NldGR0cigmcC0+ZnRkaWMsIFNJT19TRVRfRFRSX0hJR0gpOworCWlmIChlcnIg
PCAwKSB7CisJCXJlcG9ydChSUFRfRVJSLCAiJXM6IGNhbm5vdCBzZXQgRFRSIGhpZ2giLCBk
cnZ0aGlzLT5uYW1lKTsKKwkJZ290byBlcnJfZnRkaTsKKwl9CisKKwkvLyBzZXQgUlRTIGhp
Z2gKKwllcnIgPSBmdGRpX3NldHJ0cygmcC0+ZnRkaWMsIFNJT19TRVRfUlRTX0hJR0gpOwor
CWlmIChlcnIgPCAwKSB7CisJCXJlcG9ydChSUFRfRVJSLCAiJXM6IGNhbm5vdCBzZXQgUlRT
IGhpZ2giLCBkcnZ0aGlzLT5uYW1lKTsKKwkJZ290byBlcnJfZnRkaTsKKwl9CisKKwl0aW1p
bmdfdVBhdXNlKDEzKjE2MDAwKTsKKworCS8vIHNldCBEVFIgbWFzayBhbmQgaGlnaAorCWVy
ciA9IGZ0ZGlfc2V0ZHRyKCZwLT5mdGRpYywgU0lPX1NFVF9EVFJfTUFTSyB8IFNJT19TRVRf
RFRSX0hJR0gpOworCWlmIChlcnIgPCAwKSB7CisJCXJlcG9ydChSUFRfRVJSLCAiJXM6IGNh
bm5vdCBzZXQgRFRSIG1hc2siLCBkcnZ0aGlzLT5uYW1lKTsKKwkJZ290byBlcnJfZnRkaTsK
Kwl9CisKKwl0aW1pbmdfdVBhdXNlKDEzKjE2MDAwKTsKKworCS8vIHNldCBSVFMgbWFzayBh
bmQgaGlnaAorCWVyciA9IGZ0ZGlfc2V0cnRzKCZwLT5mdGRpYywgU0lPX1NFVF9SVFNfTUFT
SyB8IFNJT19TRVRfUlRTX0hJR0gpOworCWlmIChlcnIgPCAwKSB7CisJCXJlcG9ydChSUFRf
RVJSLCAiJXM6IGNhbm5vdCBzZXQgUlRTIG1hc2siLCBkcnZ0aGlzLT5uYW1lKTsKKwkJZ290
byBlcnJfZnRkaTsKKwl9CisKKwl0aW1pbmdfdVBhdXNlKDE1KjE2MDAwKTsKKworCS8vIHNl
dCBEVFIgaGlnaAorCWVyciA9IGZ0ZGlfc2V0ZHRyKCZwLT5mdGRpYywgU0lPX1NFVF9EVFJf
SElHSCk7CisJaWYgKGVyciA8IDApIHsKKwkJcmVwb3J0KFJQVF9FUlIsICIlczogY2Fubm90
IHNldCBEVFIgaGlnaCIsIGRydnRoaXMtPm5hbWUpOworCQlnb3RvIGVycl9mdGRpOworCX0K
KworCS8vIHNldCBSVFMgaGlnaAorCWVyciA9IGZ0ZGlfc2V0cnRzKCZwLT5mdGRpYywgU0lP
X1NFVF9SVFNfSElHSCk7CisJaWYgKGVyciA8IDApIHsKKwkJcmVwb3J0KFJQVF9FUlIsICIl
czogY2Fubm90IHNldCBSVFMgaGlnaCIsIGRydnRoaXMtPm5hbWUpOworCQlnb3RvIGVycl9m
dGRpOworCX0KKworCXRpbWluZ191UGF1c2UoMTMqMTYwMDApOworCisJLy8gc2V0IERUUiBt
YXNrIGFuZCBoaWdoCisJZXJyID0gZnRkaV9zZXRkdHIoJnAtPmZ0ZGljLCBTSU9fU0VUX0RU
Ul9NQVNLIHwgU0lPX1NFVF9EVFJfSElHSCk7CisJaWYgKGVyciA8IDApIHsKKwkJcmVwb3J0
KFJQVF9FUlIsICIlczogY2Fubm90IHNldCBEVFIgbWFzayIsIGRydnRoaXMtPm5hbWUpOwor
CQlnb3RvIGVycl9mdGRpOworCX0KKworCS8vIHNldCBSVFMgbWFzayBhbmQgaGlnaAorCWVy
ciA9IGZ0ZGlfc2V0cnRzKCZwLT5mdGRpYywgU0lPX1NFVF9SVFNfTUFTSyB8IFNJT19TRVRf
UlRTX0hJR0gpOworCWlmIChlcnIgPCAwKSB7CisJCXJlcG9ydChSUFRfRVJSLCAiJXM6IGNh
bm5vdCBzZXQgUlRTIG1hc2siLCBkcnZ0aGlzLT5uYW1lKTsKKwkJZ290byBlcnJfZnRkaTsK
Kwl9CisKKwl0aW1pbmdfdVBhdXNlKDE2KjE2MDAwKTsKKworCS8vIHNldCBEVFIgbWFzayBh
bmQgaGlnaAorCWVyciA9IGZ0ZGlfc2V0ZHRyKCZwLT5mdGRpYywgU0lPX1NFVF9EVFJfTUFT
SyB8IFNJT19TRVRfRFRSX0hJR0gpOworCWlmIChlcnIgPCAwKSB7CisJCXJlcG9ydChSUFRf
RVJSLCAiJXM6IGNhbm5vdCBzZXQgRFRSIG1hc2siLCBkcnZ0aGlzLT5uYW1lKTsKKwkJZ290
byBlcnJfZnRkaTsKKwl9CisKKwkvLyBzZXQgUlRTIG1hc2sgYW5kIGhpZ2gKKwllcnIgPSBm
dGRpX3NldHJ0cygmcC0+ZnRkaWMsIFNJT19TRVRfUlRTX01BU0sgfCBTSU9fU0VUX1JUU19I
SUdIKTsKKwlpZiAoZXJyIDwgMCkgeworCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBjYW5ub3Qg
c2V0IFJUUyBtYXNrIiwgZHJ2dGhpcy0+bmFtZSk7CisJCWdvdG8gZXJyX2Z0ZGk7CisJfQor
CisJLy8gZGlzYWJsZSBmbG93IGNvbnRyb2wKKwllcnIgPSBmdGRpX3NldGZsb3djdHJsKCZw
LT5mdGRpYywgU0lPX0RJU0FCTEVfRkxPV19DVFJMKTsKKwlpZiAoZXJyIDwgMCkgeworCQly
ZXBvcnQoUlBUX0VSUiwgIiVzOiBjYW5ub3QgZGlzYWJsZSBmbG93IGNvbnRyb2wiLCBkcnZ0
aGlzLT5uYW1lKTsKKwkJZ290byBlcnJfZnRkaTsKKwl9CisKKwl0aW1pbmdfdVBhdXNlKDE2
MDAwKTsKKworCS8vIHNldCBEVFIgaGlnaAorCWVyciA9IGZ0ZGlfc2V0ZHRyKCZwLT5mdGRp
YywgU0lPX1NFVF9EVFJfSElHSCk7CisJaWYgKGVyciA8IDApIHsKKwkJcmVwb3J0KFJQVF9F
UlIsICIlczogY2Fubm90IHNldCBEVFIgaGlnaCIsIGRydnRoaXMtPm5hbWUpOworCQlnb3Rv
IGVycl9mdGRpOworCX0KKworCS8vIHNldCBSVFMgaGlnaAorCWVyciA9IGZ0ZGlfc2V0cnRz
KCZwLT5mdGRpYywgU0lPX1NFVF9SVFNfSElHSCk7CisJaWYgKGVyciA8IDApIHsKKwkJcmVw
b3J0KFJQVF9FUlIsICIlczogY2Fubm90IHNldCBSVFMgaGlnaCIsIGRydnRoaXMtPm5hbWUp
OworCQlnb3RvIGVycl9mdGRpOworCX0KKworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IDY7
IGNvdW50KyspIHsKKwkJLy8gcmVzZXQgZGV2aWNlCisJCWVyciA9IGZ0ZGlfdXNiX3Jlc2V0
KCZwLT5mdGRpYyk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlyZXBvcnQoUlBUX0VSUiwgIiVz
OiBjYW5ub3QgcmVzZXQgZGV2aWNlIiwgZHJ2dGhpcy0+bmFtZSk7CisJCQlnb3RvIGVycl9m
dGRpOworCQl9CisJfQorCisJLy8gc2V0IGxhdGVuY3kgdGltZXIKKwllcnIgPSBmdGRpX3Nl
dF9sYXRlbmN5X3RpbWVyKCZwLT5mdGRpYywgMTYpOworCWlmIChlcnIgPCAwKSB7CisJCXJl
cG9ydChSUFRfRVJSLCAiJXM6IGNhbm5vdCBzZXQgbGF0ZW5jeSB0aW1lciIsIGRydnRoaXMt
Pm5hbWUpOworCQlnb3RvIGVycl9mdGRpOworCX0KKworCXRpbWluZ191UGF1c2UoMTYwMDAp
OworCisJLy8gc2V0IGNvbW11bmljYXRpb24gcGFyYW1ldGVycworCWVyciA9IGZ0ZGlfc2V0
X2xpbmVfcHJvcGVydHkoJnAtPmZ0ZGljLCBCSVRTXzcsIFNUT1BfQklUXzEsIE5PTkUpOwor
CWlmIChlcnIgPCAwKSB7CisJCXJlcG9ydChSUFRfRVJSLCAiJXM6IGNhbm5vdCBzZXQgbGlu
ZSBwcm9wZXJ0aWVzIiwgZHJ2dGhpcy0+bmFtZSk7CisJCWdvdG8gZXJyX2Z0ZGk7CisJfQor
CisJLy8gc2V0IERUUiBtYXNrIGFuZCBoaWdoCisJZXJyID0gZnRkaV9zZXRkdHIoJnAtPmZ0
ZGljLCBTSU9fU0VUX0RUUl9NQVNLIHwgU0lPX1NFVF9EVFJfSElHSCk7CisJaWYgKGVyciA8
IDApIHsKKwkJcmVwb3J0KFJQVF9FUlIsICIlczogY2Fubm90IHNldCBEVFIgbWFzayIsIGRy
dnRoaXMtPm5hbWUpOworCQlnb3RvIGVycl9mdGRpOworCX0KKworCS8vIHNldCBSVFMgbWFz
ayBhbmQgaGlnaAorCWVyciA9IGZ0ZGlfc2V0cnRzKCZwLT5mdGRpYywgU0lPX1NFVF9SVFNf
TUFTSyB8IFNJT19TRVRfUlRTX0hJR0gpOworCWlmIChlcnIgPCAwKSB7CisJCXJlcG9ydChS
UFRfRVJSLCAiJXM6IGNhbm5vdCBzZXQgUlRTIG1hc2siLCBkcnZ0aGlzLT5uYW1lKTsKKwkJ
Z290byBlcnJfZnRkaTsKKwl9CisKKwkvLyBkaXNhYmxlIGZsb3cgY29udHJvbAorCWVyciA9
IGZ0ZGlfc2V0Zmxvd2N0cmwoJnAtPmZ0ZGljLCBTSU9fRElTQUJMRV9GTE9XX0NUUkwpOwor
CWlmIChlcnIgPCAwKSB7CisJCXJlcG9ydChSUFRfRVJSLCAiJXM6IGNhbm5vdCBkaXNhYmxl
IGZsb3cgY29udHJvbCIsIGRydnRoaXMtPm5hbWUpOworCQlnb3RvIGVycl9mdGRpOworCX0K
KworCS8vIHNldCB0aGUgYmF1ZHJhdGUKKwllcnIgPSBmdGRpX3NldF9iYXVkcmF0ZSgmcC0+
ZnRkaWMsIDEyMDApOworCWlmIChlcnIgPCAwKSB7CisJCXJlcG9ydChSUFRfRVJSLCAiJXM6
IGNhbm5vdCBzZXQgYmF1ZHJhdGUiLCBkcnZ0aGlzLT5uYW1lKTsKKwkJZ290byBlcnJfZnRk
aTsKKwl9CisKKwkvLyBzZXQgdGhlIGJhdWRyYXRlCisJZXJyID0gZnRkaV9zZXRfYmF1ZHJh
dGUoJnAtPmZ0ZGljLCAzODQwMCk7CisJaWYgKGVyciA8IDApIHsKKwkJcmVwb3J0KFJQVF9F
UlIsICIlczogY2Fubm90IHNldCBiYXVkcmF0ZSIsIGRydnRoaXMtPm5hbWUpOworCQlnb3Rv
IGVycl9mdGRpOworCX0KKworCS8vIHNldCBSVFMgbWFzayBhbmQgaGlnaAorCWVyciA9IGZ0
ZGlfc2V0cnRzKCZwLT5mdGRpYywgU0lPX1NFVF9SVFNfTUFTSyB8IFNJT19TRVRfUlRTX0hJ
R0gpOworCWlmIChlcnIgPCAwKSB7CisJCXJlcG9ydChSUFRfRVJSLCAiJXM6IGNhbm5vdCBz
ZXQgUlRTIG1hc2siLCBkcnZ0aGlzLT5uYW1lKTsKKwkJZ290byBlcnJfZnRkaTsKKwl9CisK
KwkvLyBzZXQgRFRSIG1hc2sgYW5kIGhpZ2gKKwllcnIgPSBmdGRpX3NldGR0cigmcC0+ZnRk
aWMsIFNJT19TRVRfRFRSX01BU0sgfCBTSU9fU0VUX0RUUl9ISUdIKTsKKwlpZiAoZXJyIDwg
MCkgeworCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBjYW5ub3Qgc2V0IERUUiBtYXNrIiwgZHJ2
dGhpcy0+bmFtZSk7CisJCWdvdG8gZXJyX2Z0ZGk7CisJfQorCisJLy8gc2V0IGNvbW11bmlj
YXRpb24gcGFyYW1ldGVycyBOLDgsMQorCWVyciA9IGZ0ZGlfc2V0X2xpbmVfcHJvcGVydHko
JnAtPmZ0ZGljLCBCSVRTXzgsIFNUT1BfQklUXzEsIE5PTkUpOworCWlmIChlcnIgPCAwKSB7
CisJCXJlcG9ydChSUFRfRVJSLCAiJXM6IGNhbm5vdCBzZXQgbGluZSBwcm9wZXJ0aWVzIE4s
OCwxIiwgZHJ2dGhpcy0+bmFtZSk7CisJCWdvdG8gZXJyX2Z0ZGk7CisJfQorCisJLy8gZGlz
YWJsZSBmbG93IGNvbnRyb2wKKwllcnIgPSBmdGRpX3NldGZsb3djdHJsKCZwLT5mdGRpYywg
U0lPX0RJU0FCTEVfRkxPV19DVFJMKTsKKwlpZiAoZXJyIDwgMCkgeworCQlyZXBvcnQoUlBU
X0VSUiwgIiVzOiBjYW5ub3QgZGlzYWJsZSBmbG93IGNvbnRyb2wiLCBkcnZ0aGlzLT5uYW1l
KTsKKwkJZ290byBlcnJfZnRkaTsKKwl9CisKKwkvLyBzZXQgRFRSIGhpZ2gKKwllcnIgPSBm
dGRpX3NldHJ0cygmcC0+ZnRkaWMsIFNJT19TRVRfRFRSX0hJR0gpOworCWlmIChlcnIgPCAw
KSB7CisJCXJlcG9ydChSUFRfRVJSLCAiJXM6IGNhbm5vdCBzZXQgRFRSIGhpZ2giLCBkcnZ0
aGlzLT5uYW1lKTsKKwkJZ290byBlcnJfZnRkaTsKKwl9CisKKyNpZiAwCisJLy8gdW5jb21t
ZW50IHRoaXMgaWYgdXNpbmcgYSBwYXRjaGVkIHZlcnNpb24gb2YgZnRkaQorCS8vIHNldCB0
aGUgZXZlbnQgY2hhcmFjdGVyIHRvIDB4MDAKKwllcnIgPSBmdGRpX3NldF9ldmVudF9jaGFy
KCZwLT5mdGRpYywgMHgxMDApOworCWlmIChlcnIgPCAwKSB7CisJCXJlcG9ydChSUFRfRVJS
LCAiJXM6IGNhbm5vdCBzZXQgZXZlbnQgY2hhcmFjdGVyICIsIGRydnRoaXMtPm5hbWUpOwor
CQlnb3RvIGVycl9mdGRpOworCX0KKworCXRpbWluZ191UGF1c2UoMTYwMDApOworI2VuZGlm
CisKKwkvLyBkb24ndCBrbm93IHdoYXQgdGhpcyBkb2VzIGV4YWN0bHkKKwlidWZmZXJbMF0g
PSAweGE0OworCWJ1ZmZlclsxXSA9IDB4N2Q7CisgICAgZXJyID0gZnRkaV93cml0ZV9kYXRh
KCZwLT5mdGRpYywgYnVmZmVyLCAyKTsKKyAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICBy
ZXBvcnQoUlBUX1dBUk5JTkcsICIlczogZnRkaV93cml0ZV9kYXRhIGZhaWxlZCB3aXRoICVk
IiwgZHJ2dGhpcy0+bmFtZSwgZXJyKTsKKyAgICAgICAgZ290byBlcnJfZnRkaTsKKyAgICB9
CisKKwl0aW1pbmdfdVBhdXNlKDMqMTYwMDApOworCisJYnVmZmVyWzBdID0gMHhhYTsKKwli
dWZmZXJbMV0gPSAweGFhOworCWZvcihjb3VudCA9IDA7IGNvdW50IDwgMTA7IGNvdW50Kysp
IHsKKwkJZXJyID0gZnRkaV93cml0ZV9kYXRhKCZwLT5mdGRpYywgYnVmZmVyLCAyKTsKKwkg
ICAgaWYgKGVyciA8IDApIHsKKwkJCXJlcG9ydChSUFRfV0FSTklORywgIiVzOiBmdGRpX3dy
aXRlX2RhdGEgZmFpbGVkIHdpdGggJWQiLCBkcnZ0aGlzLT5uYW1lLCBlcnIpOworCQkJZ290
byBlcnJfZnRkaTsKKwkJfQorCQl0aW1pbmdfdVBhdXNlKDMqMTYwMDApOworCX0KKworCS8v
IHNldCB0aGUgZXZlbnQgY2hhcmFjdGVyIHRvIDB4MDAgKG9ubHkgd29ya3Mgd2l0aCBwYXRj
aGVkIGxpYmZ0ZGkpCisvLwllcnIgPSBmdGRpX3NldF9ldmVudF9jaGFyKCZwLT5mdGRpYywg
MHgwMCk7CisvLwlpZiAoZXJyIDwgMCkgeworLy8JCXJlcG9ydChSUFRfRVJSLCAiJXM6IGNh
bm5vdCBzZXQgZXZlbnQgY2hhcmFjdGVyICIsIGRydnRoaXMtPm5hbWUpOworLy8JCWdvdG8g
ZXJyX2Z0ZGk7CisvLwl9CisvLworLy8JdGltaW5nX3VQYXVzZSgxNjAwMCk7CisJCisJLy8g
c2V0IERUUiBoaWdoCisJZXJyID0gZnRkaV9zZXRkdHIoJnAtPmZ0ZGljLCBTSU9fU0VUX0RU
Ul9ISUdIKTsKKwlpZiAoZXJyIDwgMCkgeworCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBjYW5u
b3Qgc2V0IERUUiBoaWdoIiwgZHJ2dGhpcy0+bmFtZSk7CisJCWdvdG8gZXJyX2Z0ZGk7CisJ
fQorCisJLy8gc2V0IFJUUyBoaWdoCisJZXJyID0gZnRkaV9zZXRydHMoJnAtPmZ0ZGljLCBT
SU9fU0VUX1JUU19ISUdIKTsKKwlpZiAoZXJyIDwgMCkgeworCQlyZXBvcnQoUlBUX0VSUiwg
IiVzOiBjYW5ub3Qgc2V0IFJUUyBoaWdoIiwgZHJ2dGhpcy0+bmFtZSk7CisJCWdvdG8gZXJy
X2Z0ZGk7CisJfQorCisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgNjsgY291bnQrKykgewor
CQkvLyByZXNldCBkZXZpY2UKKwkJZXJyID0gZnRkaV91c2JfcmVzZXQoJnAtPmZ0ZGljKTsK
KwkJaWYgKGVyciA8IDApIHsKKwkJCXJlcG9ydChSUFRfRVJSLCAiJXM6IGNhbm5vdCByZXNl
dCBkZXZpY2UiLCBkcnZ0aGlzLT5uYW1lKTsKKwkJCWdvdG8gZXJyX2Z0ZGk7CisJCX0KKwl9
CisKKwkvLyBzZXQgbGF0ZW5jeSB0aW1lcgorCWVyciA9IGZ0ZGlfc2V0X2xhdGVuY3lfdGlt
ZXIoJnAtPmZ0ZGljLCAxNik7CisJaWYgKGVyciA8IDApIHsKKwkJcmVwb3J0KFJQVF9FUlIs
ICIlczogY2Fubm90IHNldCBsYXRlbmN5IHRpbWVyIiwgZHJ2dGhpcy0+bmFtZSk7CisJCWdv
dG8gZXJyX2Z0ZGk7CisJfQorCisJdGltaW5nX3VQYXVzZSgxNjAwMCk7CisKKwkvLyBzZXQg
Y29tbXVuaWNhdGlvbiBwYXJhbWV0ZXJzIE4sOCwxCisJZXJyID0gZnRkaV9zZXRfbGluZV9w
cm9wZXJ0eSgmcC0+ZnRkaWMsIEJJVFNfOCwgU1RPUF9CSVRfMSwgTk9ORSk7CisJaWYgKGVy
ciA8IDApIHsKKwkJcmVwb3J0KFJQVF9FUlIsICIlczogY2Fubm90IHNldCBsaW5lIHByb3Bl
cnRpZXMgTiw4LDEiLCBkcnZ0aGlzLT5uYW1lKTsKKwkJZ290byBlcnJfZnRkaTsKKwl9CisK
KwkvLyBzZXQgRFRSIG1hc2sgYW5kIGhpZ2gKKwllcnIgPSBmdGRpX3NldGR0cigmcC0+ZnRk
aWMsIFNJT19TRVRfRFRSX01BU0sgfCBTSU9fU0VUX0RUUl9ISUdIKTsKKwlpZiAoZXJyIDwg
MCkgeworCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBjYW5ub3Qgc2V0IERUUiBtYXNrIiwgZHJ2
dGhpcy0+bmFtZSk7CisJCWdvdG8gZXJyX2Z0ZGk7CisJfQorCisJLy8gc2V0IFJUUyBtYXNr
IGFuZCBoaWdoCisJZXJyID0gZnRkaV9zZXRydHMoJnAtPmZ0ZGljLCBTSU9fU0VUX1JUU19N
QVNLIHwgU0lPX1NFVF9SVFNfSElHSCk7CisJaWYgKGVyciA8IDApIHsKKwkJcmVwb3J0KFJQ
VF9FUlIsICIlczogY2Fubm90IHNldCBSVFMgbWFzayIsIGRydnRoaXMtPm5hbWUpOworCQln
b3RvIGVycl9mdGRpOworCX0KKworCS8vIGRpc2FibGUgZmxvdyBjb250cm9sCisJZXJyID0g
ZnRkaV9zZXRmbG93Y3RybCgmcC0+ZnRkaWMsIFNJT19ESVNBQkxFX0ZMT1dfQ1RSTCk7CisJ
aWYgKGVyciA8IDApIHsKKwkJcmVwb3J0KFJQVF9FUlIsICIlczogY2Fubm90IGRpc2FibGUg
ZmxvdyBjb250cm9sIiwgZHJ2dGhpcy0+bmFtZSk7CisJCWdvdG8gZXJyX2Z0ZGk7CisJfQor
CisJLy8gc2V0IHRoZSBiYXVkcmF0ZQorCWVyciA9IGZ0ZGlfc2V0X2JhdWRyYXRlKCZwLT5m
dGRpYywgMzg0MDApOworCWlmIChlcnIgPCAwKSB7CisJCXJlcG9ydChSUFRfRVJSLCAiJXM6
IGNhbm5vdCBzZXQgYmF1ZHJhdGUgMzg0MDAiLCBkcnZ0aGlzLT5uYW1lKTsKKwkJZ290byBl
cnJfZnRkaTsKKwl9CisKKwkvLyBzZXQgdGhlIGJhdWRyYXRlCisJZXJyID0gZnRkaV9zZXRf
YmF1ZHJhdGUoJnAtPmZ0ZGljLCAzODQwMCk7CisJaWYgKGVyciA8IDApIHsKKwkJcmVwb3J0
KFJQVF9FUlIsICIlczogY2Fubm90IHNldCBiYXVkcmF0ZSAzODQwMCIsIGRydnRoaXMtPm5h
bWUpOworCQlnb3RvIGVycl9mdGRpOworCX0KKworCS8vIHNldCBSVFMgbWFzayBhbmQgaGln
aAorCWVyciA9IGZ0ZGlfc2V0cnRzKCZwLT5mdGRpYywgU0lPX1NFVF9SVFNfTUFTSyB8IFNJ
T19TRVRfUlRTX0hJR0gpOworCWlmIChlcnIgPCAwKSB7CisJCXJlcG9ydChSUFRfRVJSLCAi
JXM6IGNhbm5vdCBzZXQgUlRTIG1hc2siLCBkcnZ0aGlzLT5uYW1lKTsKKwkJZ290byBlcnJf
ZnRkaTsKKwl9CisKKwkvLyBzZXQgRFRSIG1hc2sgYW5kIGhpZ2gKKwllcnIgPSBmdGRpX3Nl
dGR0cigmcC0+ZnRkaWMsIFNJT19TRVRfRFRSX01BU0sgfCBTSU9fU0VUX0RUUl9ISUdIKTsK
KwlpZiAoZXJyIDwgMCkgeworCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBjYW5ub3Qgc2V0IERU
UiBtYXNrIiwgZHJ2dGhpcy0+bmFtZSk7CisJCWdvdG8gZXJyX2Z0ZGk7CisJfQorCisJLy8g
c2V0IGNvbW11bmljYXRpb24gcGFyYW1ldGVycyBOLDgsMQorCWVyciA9IGZ0ZGlfc2V0X2xp
bmVfcHJvcGVydHkoJnAtPmZ0ZGljLCBCSVRTXzgsIFNUT1BfQklUXzEsIE5PTkUpOworCWlm
IChlcnIgPCAwKSB7CisJCXJlcG9ydChSUFRfRVJSLCAiJXM6IGNhbm5vdCBzZXQgbGluZSBw
cm9wZXJ0aWVzIE4sOCwxIiwgZHJ2dGhpcy0+bmFtZSk7CisJCWdvdG8gZXJyX2Z0ZGk7CisJ
fQorCisJLy8gZGlzYWJsZSBmbG93IGNvbnRyb2wKKwllcnIgPSBmdGRpX3NldGZsb3djdHJs
KCZwLT5mdGRpYywgU0lPX0RJU0FCTEVfRkxPV19DVFJMKTsKKwlpZiAoZXJyIDwgMCkgewor
CQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBjYW5ub3QgZGlzYWJsZSBmbG93IGNvbnRyb2wiLCBk
cnZ0aGlzLT5uYW1lKTsKKwkJZ290byBlcnJfZnRkaTsKKwl9CisKKwkvLyB0dXJuIG9mZiB0
aGUgZXZlbnQgY2hhcmFjdGVyIChvbmx5IHdvcmtzIHdpdGggcGF0Y2hlZCBsaWJmdGRpKQor
Ly8JZXJyID0gZnRkaV9zZXRfZXZlbnRfY2hhcigmcC0+ZnRkaWMsIDB4MDApOworLy8JaWYg
KGVyciA8IDApIHsKKy8vCQlyZXBvcnQoUlBUX0VSUiwgIiVzOiBjYW5ub3QgdHVybiBvZmYg
ZXZlbnQgY2hhcmFjdGVyICIsIGRydnRoaXMtPm5hbWUpOworLy8JCWdvdG8gZXJyX2Z0ZGk7
CisvLwl9CisvLworLy8JdGltaW5nX3VQYXVzZSgyKjE2MDAwKTsKKworCS8vIG5vdCBzdXJl
IGFib3V0IHRoaXMKKyAgICBidWZmZXJbMF0gPSAweGEwOworICAgIGVyciA9IGxpc19mdGRp
X3dyaXRlX2NvbW1hbmQoZHJ2dGhpcywgYnVmZmVyLCAxKTsKKyAgICBpZiAoZXJyIDwgMCkg
eworICAgICAgICByZXBvcnQoUlBUX1dBUk5JTkcsICIlczogbGlzX2Z0ZGlfY2xlYXI6ICIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzX2Z0ZGlfd3JpdGVfY29tbWFuZCBm
YWlsZWQiLCBkcnZ0aGlzLT5uYW1lKTsKKyAgICB9CisKKwl0aW1pbmdfdVBhdXNlKDEwKjE2
MDAwKTsKKworCWxpc19sb2FkX2N1c3RvbV9jaGFycyhkcnZ0aGlzKTsKKworCXJlcG9ydChS
UFRfREVCVUcsICIlczogaW5pdCgpIGRvbmUiLCBkcnZ0aGlzLT5uYW1lKTsKKworLy8JbGlz
X3Rlc3QoZHJ2dGhpcyk7CSAvKkRFQlVHKi8KKworCXJldHVybiAwOworCitlcnJfZnRkaToK
KwlmdGRpX3VzYl9jbG9zZSgmcC0+ZnRkaWMpOworCWZ0ZGlfZGVpbml0KCZwLT5mdGRpYyk7
CisJaWYocC0+bGluZV9mbGFncykKKwkJZnJlZShwLT5saW5lX2ZsYWdzKTsKK2Vycl9mcmFt
ZWJ1ZjoKKwlmcmVlKHAtPmZyYW1lYnVmKTsKK2Vycl9iZWdpbjoKKworCWlmIChwLT5wYXJl
bnRfZmxhZykgewkJCS8vIHRlcm1pbmF0ZSB0aGUgY2hpbGQKKwkJcC0+Y2hpbGRfZmxhZyA9
IDE7CisJCXdoaWxlKHAtPnBhcmVudF9mbGFnKQorCQkJdGltaW5nX3VQYXVzZSg1KjE2MDAw
KTsKKwl9CisJcmV0dXJuIC0xOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisv
LyBDbGVhbi11cAorLy8KK01PRFVMRV9FWFBPUlQgdm9pZAorbGlzX2Nsb3NlKERyaXZlciAq
ZHJ2dGhpcykKK3sKKwlQcml2YXRlRGF0YSAqcCA9IChQcml2YXRlRGF0YSAqKSBkcnZ0aGlz
LT5wcml2YXRlX2RhdGE7CisKKwlpZiAocCAhPSBOVUxMKSB7CisJCWlmIChwLT5wYXJlbnRf
ZmxhZykgewkJCS8vIHRlcm1pbmF0ZSB0aGUgY2hpbGQKKwkJCXAtPmNoaWxkX2ZsYWcgPSAx
OworCQkJd2hpbGUocC0+cGFyZW50X2ZsYWcpCisJCQkJdGltaW5nX3VQYXVzZSg1KjE2MDAw
KTsKKwkJfQorCQlmdGRpX3VzYl9wdXJnZV9idWZmZXJzKCZwLT5mdGRpYyk7CisJCWZ0ZGlf
dXNiX2Nsb3NlKCZwLT5mdGRpYyk7CisJCWZ0ZGlfZGVpbml0KCZwLT5mdGRpYyk7CisKKwkJ
aWYgKHAtPmZyYW1lYnVmICE9IE5VTEwpCisgICAgICAgIAkJZnJlZShwLT5mcmFtZWJ1Zik7
CisKKwkJZnJlZShwKTsKKwl9CisJZHJ2dGhpcy0+c3RvcmVfcHJpdmF0ZV9wdHIoZHJ2dGhp
cywgTlVMTCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFJldHVybnMg
dGhlIGRpc3BsYXkgd2lkdGgKKy8vCitNT0RVTEVfRVhQT1JUIGludAorbGlzX3dpZHRoIChE
cml2ZXIgKmRydnRoaXMpCit7CisJUHJpdmF0ZURhdGEgKnAgPSAoUHJpdmF0ZURhdGEgKikg
ZHJ2dGhpcy0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHAtPndpZHRoOworfQorCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBSZXR1cm5zIHRoZSBkaXNwbGF5IGhlaWdodAor
Ly8KK01PRFVMRV9FWFBPUlQgaW50CitsaXNfaGVpZ2h0IChEcml2ZXIgKmRydnRoaXMpCit7
CisJUHJpdmF0ZURhdGEgKnAgPSAoUHJpdmF0ZURhdGEgKikgZHJ2dGhpcy0+cHJpdmF0ZV9k
YXRhOworCisJcmV0dXJuIHAtPmhlaWdodDsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworLy8gQ2xlYXIgdGhlIGZyYW1lYnVmZmVyCisvLworTU9EVUxFX0VYUE9SVCB2b2lk
CitsaXNfY2xlYXIgKERyaXZlciAqZHJ2dGhpcykKK3sKKwlQcml2YXRlRGF0YSAqcCA9IChQ
cml2YXRlRGF0YSAqKSBkcnZ0aGlzLT5wcml2YXRlX2RhdGE7CisJaW50IGxpbmU7CisKKwlm
b3IgKGxpbmUgPSAwOyBsaW5lIDwgcC0+aGVpZ2h0OyBsaW5lKyspIHsKKwkJbWVtc2V0KHAt
PmZyYW1lYnVmICsgKGxpbmUgKiBwLT53aWR0aCksICcgJywgcC0+d2lkdGgpOworCQlwLT5s
aW5lX2ZsYWdzW2xpbmVdID0gMTsKKwl9Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KKy8vIFBsYWNlIGEgY2hhcmFjdGVyIGluIHRoZSBmcmFtZWJ1ZmZlcgorLy8KK01PRFVM
RV9FWFBPUlQgdm9pZAorbGlzX2NociAoRHJpdmVyICpkcnZ0aGlzLCBpbnQgeCwgaW50IHks
IGNoYXIgY2gpCit7CisJUHJpdmF0ZURhdGEgKnAgPSAoUHJpdmF0ZURhdGEgKikgZHJ2dGhp
cy0+cHJpdmF0ZV9kYXRhOworCisJLy8gaWdub3JlIG91dC1vZi1yYW5nZQorCWlmICh5ID4g
cC0+aGVpZ2h0IHx8IHggPiBwLT53aWR0aCkKKwkJcmV0dXJuOworCisJeS0tOworCXgtLTsK
KworCWlmICggcC0+ZnJhbWVidWZbICh5ICogcC0+d2lkdGgpICsgeF0gIT0gY2gpIHsKKwkJ
cC0+ZnJhbWVidWZbICh5ICogcC0+d2lkdGgpICsgeF0gPSBjaDsKKworCQlwLT5saW5lX2Zs
YWdzW3ldID0gMTsKKwl9Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFBs
YWNlIGEgc3RyaW5nIGluIHRoZSBmcmFtZWJ1ZmZlcgorLy8KK01PRFVMRV9FWFBPUlQgdm9p
ZAorbGlzX3N0cmluZyAoRHJpdmVyICpkcnZ0aGlzLCBpbnQgeCwgaW50IHksIGNoYXIgKnMp
Cit7CisJUHJpdmF0ZURhdGEgKnAgPSAoUHJpdmF0ZURhdGEgKikgZHJ2dGhpcy0+cHJpdmF0
ZV9kYXRhOworCWludCBpOworCisJeCAtLTsgIC8vIENvbnZlcnQgMS1iYXNlZCBjb29yZHMg
dG8gMC1iYXNlZAorCXkgLS07CisKKwlmb3IgKGkgPSAwOyBzW2ldOyBpKyspIHsKKwkJLy8g
Q2hlY2sgZm9yIGJ1ZmZlciBvdmVyZmxvd3MuLi4KKwkJaWYgKCh5ICogcC0+d2lkdGgpICsg
eCArIGkgPiAocC0+d2lkdGggKiBwLT5oZWlnaHQpKQorCQkJYnJlYWs7CisKKwkJaWYgKCBw
LT5mcmFtZWJ1ZlsoeSpwLT53aWR0aCkgKyB4ICsgaV0gIT0gc1tpXSApIHsKKwkJCXAtPmZy
YW1lYnVmWyh5KnAtPndpZHRoKSArIHggKyBpXSA9IHNbaV07CisJCQlwLT5saW5lX2ZsYWdz
WygoeSpwLT53aWR0aCkgKyB4ICsgaSApIC8gcC0+d2lkdGggXSA9IDE7ICAvLyBkaXJ0eQor
CQl9CisJfQorfQorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNldCBkZWZh
dWx0IGljb24gaW50byBhIHVzZXJkZWYgY2hhcgorLy8KK01PRFVMRV9FWFBPUlQgaW50Cits
aXNfaWNvbiAoRHJpdmVyICpkcnZ0aGlzLCBpbnQgeCwgaW50IHksIGludCBpY29uKQorewor
CWNoYXIgY2g7CisKKwlzd2l0Y2ggKGljb24pIHsKKwkJY2FzZSBJQ09OX0JMT0NLX0ZJTExF
RDoKKwkJCWNoID0gMHhmZjsKKwkJCWJyZWFrOworCQljYXNlIElDT05fSEVBUlRfRklMTEVE
OgorCQkJY2ggPSAweDlkOworCQkJYnJlYWs7CisJCWNhc2UgSUNPTl9IRUFSVF9PUEVOOgor
CQkJY2ggPSAweDljOworCQkJYnJlYWs7CisJCWNhc2UgSUNPTl9BUlJPV19VUDoKKwkJCWNo
ID0gMHgxODsKKwkJCWJyZWFrOworCQljYXNlIElDT05fQVJST1dfRE9XTjoKKwkJCWNoID0g
MHgxOTsKKwkJCWJyZWFrOworCQljYXNlIElDT05fQVJST1dfTEVGVDoKKwkJCWNoID0gMHgx
YjsKKwkJCWJyZWFrOworCQljYXNlIElDT05fQVJST1dfUklHSFQ6CisJCQljaCA9IDB4MWE7
CisJCQlicmVhazsKKwkJY2FzZSBJQ09OX0NIRUNLQk9YX09GRjoKKwkJCWNoID0gMHg2ZjsK
KwkJCWJyZWFrOworCQljYXNlIElDT05fQ0hFQ0tCT1hfT046CisJCQljaCA9IDB4Yzc7CisJ
CQlicmVhazsKKwkJY2FzZSBJQ09OX0NIRUNLQk9YX0dSQVk6CisJCQljaCA9IDc7CisJCQli
cmVhazsKKwkJY2FzZSBJQ09OX1NUT1A6CisJCQljaCA9IDB4MTY7CisJCQlicmVhazsKKwkJ
Y2FzZSBJQ09OX1BBVVNFOgorCQkJY2ggPSAweGEwOworCQkJYnJlYWs7CisJCWNhc2UgSUNP
Tl9QTEFZOgorCQkJY2ggPSAweDEwOworCQkJYnJlYWs7CisJCWNhc2UgSUNPTl9QTEFZUjoK
KwkJCWNoID0gMHgxMTsKKwkJCWJyZWFrOworCQljYXNlIElDT05fRkY6CisJCQljaCA9IDB4
YmI7CisJCQlicmVhazsKKwkJY2FzZSBJQ09OX0ZSOgorCQkJY2ggPSAweGJjOworCQkJYnJl
YWs7CisJCWNhc2UgSUNPTl9ORVhUOgorCQkJY2ggPSAweDFkOworCQkJYnJlYWs7CisJCWNh
c2UgSUNPTl9QUkVWOgorCQkJY2ggPSAweDFjOworCQkJYnJlYWs7CisJCWNhc2UgSUNPTl9S
RUM6CisJCQljaCA9IDB4YWU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAt
MTsgLyogTGV0IHRoZSBjb3JlIGRvIG90aGVyIGljb25zICovCisKKwkJbGlzX2NocihkcnZ0
aGlzLCB4LCB5LCBjaCk7CisJfQorCXJldHVybiAwOworfQorCisvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCisvLyBEcmF3IGEgaG9yaXpvbnRhbCBiYXIKKy8vCisvLyBvcHRpb25zIGln
bm9yZWQKKy8vIHRydW5jYXRlcyB0byBmaXQgZGlzcGxheSBpZiBuZWVkZWQKK01PRFVMRV9F
WFBPUlQgdm9pZAorbGlzX2hiYXIoRHJpdmVyICpkcnZ0aGlzLCBpbnQgeCwgaW50IHksIGlu
dCBsZW4sIGludCBwcm9taWxsZSwgaW50IG9wdGlvbnMpCit7CisJUHJpdmF0ZURhdGEgKnAg
PSAoUHJpdmF0ZURhdGEgKikgZHJ2dGhpcy0+cHJpdmF0ZV9kYXRhOworCWNoYXIJYnVmW3At
PndpZHRoKzFdOworCWludAkJcGVyX3BlbDsKKwljaGFyCSpicDsKKworCWlmICghIHAtPmNj
X2ZsYWcpCisJCWxpc19sb2FkX2N1c3RvbV9jaGFycyhkcnZ0aGlzKTsKKworCWlmICh4ICsg
bGVuID4gcC0+d2lkdGgpCisJCWxlbiA9IHAtPndpZHRoIC0geDsKKworCWlmIChsZW4gPCAx
IHx8IHByb21pbGxlIDwgMCB8fCBwcm9taWxsZSA+IDEwMDAgKQorCQlyZXR1cm47CisKKwkv
LyBibGFuayBhcmVhIGZvciBiYXIKKwltZW1zZXQoYnVmLCAnICcsIGxlbik7CisKKwlpZigg
cHJvbWlsbGUgPT0gMCkKKwkJcmV0dXJuOworCisJcGVyX3BlbCA9IDEwMDAgLyAobGVuICog
Q0VMTFdJRFRIKTsKKworCWJwID0gYnVmOworCisJd2hpbGUocHJvbWlsbGUgPiBwZXJfcGVs
KSB7CisJCWlmKCBwcm9taWxsZSA+PSBwZXJfcGVsICogQ0VMTFdJRFRIKSB7CisJCQkqYnAg
PSAweDA1OwkJLy8gZnVsbCB3aWR0aAorCQkJcHJvbWlsbGUgLT0gQ0VMTFdJRFRIKnBlcl9w
ZWw7CisJCX0gZWxzZSB7CisJCQkqYnAgPSAocHJvbWlsbGUgLyBwZXJfcGVsKTsKKwkJCXBy
b21pbGxlID0gMDsKKwkJfQorCQlicCsrOworCX0KKwkqYnAgPSAweDAwOworCisJbGlzX3N0
cmluZyhkcnZ0aGlzLCB4LCB5LCBidWYpOworfQorCisKK3ZvaWQKK2xpc190ZXN0KERyaXZl
ciAqZHJ2dGhpcykKK3sKKwlpbnQJeCwgeSwgaTsKKworCisJeCA9IDA7CisJeSA9IDE7CisJ
bGlzX2NsZWFyKGRydnRoaXMpOworCisJZm9yIChpID0gMDsgaSA8IDEwMDE7IGkrKykgewor
CQlsaXNfaGJhcihkcnZ0aGlzLCAxLCAxLCAyMCwgaSwgMCk7CisJCWxpc19mbHVzaChkcnZ0
aGlzKTsKKwl9Cit9CmRpZmYgLXJ1TiBsY2Rwcm9jLUNWUy1jdXJyZW50LTIwMDcwNTEzL3Nl
cnZlci9kcml2ZXJzL2xpcy5oIGxjZHByb2MtQ1ZTLWN1cnJlbnQtMjAwNzA1MTMtbGlzL3Nl
cnZlci9kcml2ZXJzL2xpcy5oCi0tLSBsY2Rwcm9jLUNWUy1jdXJyZW50LTIwMDcwNTEzL3Nl
cnZlci9kcml2ZXJzL2xpcy5oCTE5NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0wNjAw
CisrKyBsY2Rwcm9jLUNWUy1jdXJyZW50LTIwMDcwNTEzLWxpcy9zZXJ2ZXIvZHJpdmVycy9s
aXMuaAkyMDA3LTAzLTA0IDEzOjExOjE4LjAwMDAwMDAwMCAtMDYwMApAQCAtMCwwICsxLDQ0
IEBACisKKy8qCisgICAgQmFzZWQgb24gdGhlIGxpcyBkcml2ZXIgQ29weXJpZ2h0IChDKSAy
MDA2LCBCZXJuaGFyZCBXYWxsZQorICAgIENvcHlyaWdodCAoYykgMjAwNywgRGFyeWwgRm9u
c2VjYS1Ib2x0IDx3eWF0dEBwcmFpcmlldHVydGxlLmNhPgorCisgICAgVGhpcyBwcm9ncmFt
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp
ZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK
KyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSAqLwor
I2lmbmRlZiBMSVNfSAorI2RlZmluZSBMSVNfSAorCisjaW5jbHVkZSAibGNkLmgiCisKKyNp
Zm5kZWYgYm9vbAorIyBkZWZpbmUgYm9vbCBzaG9ydAorIyBkZWZpbmUgdHJ1ZSAxCisjIGRl
ZmluZSBmYWxzZSAwCisjZW5kaWYKKworTU9EVUxFX0VYUE9SVCBpbnQgIGxpc19pbml0KERy
aXZlciAqZHJ2dGhpcyk7CitNT0RVTEVfRVhQT1JUIHZvaWQgbGlzX2Nsb3NlIChEcml2ZXIg
KmRydnRoaXMpOworTU9EVUxFX0VYUE9SVCBpbnQgIGxpc193aWR0aCAoRHJpdmVyICpkcnZ0
aGlzKTsKK01PRFVMRV9FWFBPUlQgaW50ICBsaXNfaGVpZ2h0IChEcml2ZXIgKmRydnRoaXMp
OworTU9EVUxFX0VYUE9SVCB2b2lkIGxpc19jbGVhciAoRHJpdmVyICogZHJ2dGhpcyk7CitN
T0RVTEVfRVhQT1JUIHZvaWQgbGlzX3N0cmluZyAoRHJpdmVyICogZHJ2dGhpcywgaW50IHgs
IGludCB5LCBjaGFyIHN0cmluZ1tdKTsKK01PRFVMRV9FWFBPUlQgdm9pZCBsaXNfY2hyIChE
cml2ZXIgKiBkcnZ0aGlzLCBpbnQgeCwgaW50IHksIGNoYXIgYyk7CitNT0RVTEVfRVhQT1JU
IHZvaWQgbGlzX3NldF9jaGFyIChEcml2ZXIgKiBkcnZ0aGlzLCBpbnQgbiwgY2hhciAqZGF0
KTsKK01PRFVMRV9FWFBPUlQgdm9pZCBsaXNfZmx1c2ggKERyaXZlciAqIGRydnRoaXMpOwor
TU9EVUxFX0VYUE9SVCB2b2lkIGxpc192YmFyIChEcml2ZXIgKiBkcnZ0aGlzLCBpbnQgeCwg
aW50IHksIGludCBsZW4sIGludCBwcm9taWxsZSwgaW50IG9wdGlvbnMpOworTU9EVUxFX0VY
UE9SVCB2b2lkIGxpc19oYmFyIChEcml2ZXIgKiBkcnZ0aGlzLCBpbnQgeCwgaW50IHksIGlu
dCBsZW4sIGludCBwcm9taWxsZSwgaW50IG9wdGlvbnMpOworTU9EVUxFX0VYUE9SVCB2b2lk
IGxpc19udW0gKERyaXZlciAqIGRydnRoaXMsIGludCB4LCBpbnQgbnVtKTsKK01PRFVMRV9F
WFBPUlQgaW50ICBsaXNfaWNvbihEcml2ZXIgKiBkcnZ0aGlzLCBpbnQgeCwgaW50IHksIGlu
dCBpY29uKTsKKworI2VuZGlmIC8qIExJU19IICovCg==
--------------080201060708070207060405--