Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 28 Oct 2007 18:13:13 +0100
From:      "=?ISO-8859-1?Q?Ermal_Lu=E7i?=" <ermal.luci@gmail.com>
To:        freebsd-pf@freebsd.org, freebsd-net@freebsd.org
Subject:   Fwd: [PATCH] PF+dummynet
Message-ID:  <9a542da30710281013q642b5aa8k33c7836ee064242e@mail.gmail.com>
In-Reply-To: <20071028095802.A61999@xorpc.icir.org>
References:  <9a542da30710161409o4732a77bybdf4ba35d7491bb@mail.gmail.com> <200710171043.08126.max@love2party.net> <d5992baf0710171324n65c4b171l71db8aeac445b52d@mail.gmail.com> <9a542da30710211232v4d3c930fg8ea778a12f3f16cb@mail.gmail.com> <9a542da30710280617t11e668e2o4d122998192f71c@mail.gmail.com> <20071028095802.A61999@xorpc.icir.org>

next in thread | previous in thread | raw e-mail | index | archive | help
------=_Part_14170_30775547.1193591593935
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

I am sending this again since it seems the list ripps off files other
than text files.



>
> > It gives full dummynet support in pf.conf syntax and removes dummynet
> > depndency to ipfw.
> >
> > You can configure a pipe/queue using the same ipfw syntax the only
> > difference is that i call those 'dnpipe'/'dnqueue' respectivley.
> > GRED/RED isn't currently finished but that is a pfctl addition so not
> > difficult.
> >
> > For dummynet i preserve ipfw style statistics so tools of ipfw can be
> > used here to.
> >
> > Since this is PF i preserved ALTQ priotitizing of ACK, meaning on ALTQ you do
> > pass in quick proto tcp from any to any flags S/SA queue(pri, que)
> >
> > You can do the same with dummynet queues only, since for pipes it
> > doesn't make much sense since they simulate a link. So yuo can do
> >
> > dnpipe 10 bandwidth 100Kbit
> > dnqueue 10 dnpipe 10 queue 100
> > dnqueue 20 dnpipe 10 queue 20
> >
> > pass in quick proto tcp from any to any flags S/SA dnqueue(10, 20)
> >
> >
> > Please test and give feedback.
>
> > _______________________________________________
> > freebsd-net@freebsd.org mailing list
> > http://lists.freebsd.org/mailman/listinfo/freebsd-net
> > To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"
>

------=_Part_14170_30775547.1193591593935
Content-Type: text/x-patch; name=test_dummynet3.diff
Content-Transfer-Encoding: base64
X-Attachment-Id: f_f8bvlik4
Content-Disposition: attachment; filename=test_dummynet3.diff

SW5kZXg6IGNvbnRyaWIvcGYvcGZjdGwvcGFyc2UueQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9t
ZS9lcmkvcmVwby9jb250cmliL3BmL3BmY3RsL3BhcnNlLnksdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMS4xLjEKZGlmZiAtdSAtcjEuMS4xLjEgcGFyc2UueQotLS0gY29udHJpYi9wZi9wZmN0bC9w
YXJzZS55CTIxIE9jdCAyMDA3IDEzOjUzOjE1IC0wMDAwCTEuMS4xLjEKKysrIGNvbnRyaWIvcGYv
cGZjdGwvcGFyc2UueQkyMSBPY3QgMjAwNyAxOTowMzo0OSAtMDAwMApAQCAtNDUsNiArNDUsOSBA
QAogI2luY2x1ZGUgPGFsdHEvYWx0cV9wcmlxLmg+CiAjaW5jbHVkZSA8YWx0cS9hbHRxX2hmc2Mu
aD4KIAorI2luY2x1ZGUgPG5ldGluZXQvaXBfZncuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2lwX2R1
bW15bmV0Lmg+CisKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2lu
Y2x1ZGUgPG5ldGRiLmg+CkBAIC0yMDYsNiArMjA5LDkgQEAKIAljaGFyCQkJKnRhZzsKIAljaGFy
CQkJKm1hdGNoX3RhZzsKIAl1X2ludDhfdAkJIG1hdGNoX3RhZ19ub3Q7CisJdV9pbnQzMl90CQkg
ZG5waXBlOworCXVfaW50MzJfdAkJIHBkbnBpcGU7CisJdV9pbnQzMl90CQkgZG50eXBlOwogCWlu
dAkJCSBydGFibGVpZDsKIH0gZmlsdGVyX29wdHM7CiAKQEAgLTI2MSw2ICsyNjcsOCBAQAogCiAK
IHN0cnVjdCBub2RlX2hmc2Nfb3B0cwloZnNjX29wdHM7CitzdHJ1Y3QgZG5fcGlwZQkJZG5waXBl
X29wdHM7CitzdHJ1Y3QgZG5fZmxvd19zZXQJZG5xdWV1ZV9vcHRzOwogCiBpbnQJeXllcnJvcihj
b25zdCBjaGFyICosIC4uLik7CiBpbnQJZGlzYWxsb3dfdGFibGUoc3RydWN0IG5vZGVfaG9zdCAq
LCBjb25zdCBjaGFyICopOwpAQCAtMzk1LDYgKzQwMyw4IEBACiAJCXN0cnVjdCBmaWx0ZXJfb3B0
cwkgZmlsdGVyX29wdHM7CiAJCXN0cnVjdCBhbnRpc3Bvb2Zfb3B0cwkgYW50aXNwb29mX29wdHM7
CiAJCXN0cnVjdCBxdWV1ZV9vcHRzCSBxdWV1ZV9vcHRzOworCQlzdHJ1Y3QgZG5fcGlwZQkJIGRu
cGlwZV9vcHRzOworCQlzdHJ1Y3QgZG5fZmxvd19zZXQJIGRucXVldWVfb3B0czsKIAkJc3RydWN0
IHNjcnViX29wdHMJIHNjcnViX29wdHM7CiAJCXN0cnVjdCB0YWJsZV9vcHRzCSB0YWJsZV9vcHRz
OwogCQlzdHJ1Y3QgcG9vbF9vcHRzCSBwb29sX29wdHM7CkBAIC00MjEsNiArNDMxLDggQEAKICV0
b2tlbglCSVRNQVNLIFJBTkRPTSBTT1VSQ0VIQVNIIFJPVU5EUk9CSU4gU1RBVElDUE9SVCBQUk9C
QUJJTElUWQogJXRva2VuCUFMVFEgQ0JRIFBSSVEgSEZTQyBCQU5EV0lEVEggVEJSU0laRSBMSU5L
U0hBUkUgUkVBTFRJTUUgVVBQRVJMSU1JVAogJXRva2VuCVFVRVVFIFBSSU9SSVRZIFFMSU1JVCBS
VEFCTEUKKyV0b2tlbglETlBJUEUgRE5RVUVVRSBHUkVEIFJFRCBXRUlHSFQgTUFTSyBERUxBWSBC
VUNLRVRTIFBMUgorJXRva2VuCVNSQ0lQIERTVElQIFNSQ1BPUlQgRFNUUE9SVCBTUkNJUDYgRFNU
SVA2IEZMT1dJRCBOT0VSUk9SCiAldG9rZW4JTE9BRCBSVUxFU0VUX09QVElNSVpBVElPTgogJXRv
a2VuCVNUSUNLWUFERFJFU1MgTUFYU1JDU1RBVEVTIE1BWFNSQ05PREVTIFNPVVJDRVRSQUNLIEdM
T0JBTCBSVUxFCiAldG9rZW4JTUFYU1JDQ09OTiBNQVhTUkNDT05OUkFURSBPVkVSTE9BRCBGTFVT
SApAQCAtNDUxLDcgKzQ2Myw3IEBACiAldHlwZQk8di5naWQ+CQkJZ2lkcyBnaWRfbGlzdCBnaWRf
aXRlbQogJXR5cGUJPHYucm91dGU+CQlyb3V0ZQogJXR5cGUJPHYucmVkaXJlY3Rpb24+CQlyZWRp
cmVjdGlvbiByZWRpcnBvb2wKLSV0eXBlCTx2LnN0cmluZz4JCWxhYmVsIHN0cmluZyB0YWcgYW5j
aG9ybmFtZQorJXR5cGUJPHYuc3RyaW5nPgkJbGFiZWwgc3RyaW5nIHRhZyBhbmNob3JuYW1lIAog
JXR5cGUJPHYua2VlcF9zdGF0ZT4JCWtlZXAKICV0eXBlCTx2LnN0YXRlX29wdD4JCXN0YXRlX29w
dF9zcGVjIHN0YXRlX29wdF9saXN0IHN0YXRlX29wdF9pdGVtCiAldHlwZQk8di5sb2dxdWljaz4J
CWxvZ3F1aWNrIHF1aWNrIGxvZyBsb2dvcHRzIGxvZ29wdApAQCAtNDYyLDYgKzQ3NCw4IEBACiAl
dHlwZQk8di5udW1iZXI+CQljYnFmbGFnc19saXN0IGNicWZsYWdzX2l0ZW0KICV0eXBlCTx2Lm51
bWJlcj4JCXByaXFmbGFnc19saXN0IHByaXFmbGFnc19pdGVtCiAldHlwZQk8di5oZnNjX29wdHM+
CQloZnNjb3B0c19saXN0IGhmc2NvcHRzX2l0ZW0gaGZzY19vcHRzCisldHlwZQk8di5kbnBpcGVf
b3B0cz4JCWRucGlwZV9vcHRzCisldHlwZQk8di5kbnF1ZXVlX29wdHM+CWRucXVldWVfb3B0cyBt
YXNrX3NwZWNpZmllcgogJXR5cGUJPHYucXVldWVfYndzcGVjPgliYW5kd2lkdGgKICV0eXBlCTx2
LmZpbHRlcl9vcHRzPgkJZmlsdGVyX29wdHMgZmlsdGVyX29wdCBmaWx0ZXJfb3B0c19sCiAldHlw
ZQk8di5hbnRpc3Bvb2Zfb3B0cz4JYW50aXNwb29mX29wdHMgYW50aXNwb29mX29wdCBhbnRpc3Bv
b2Zfb3B0c19sCkBAIC00ODMsNiArNDk3LDggQEAKIAkJfCBydWxlc2V0IGFuY2hvcnJ1bGUgJ1xu
JwogCQl8IHJ1bGVzZXQgbG9hZHJ1bGUgJ1xuJwogCQl8IHJ1bGVzZXQgYWx0cWlmICdcbicKKwkJ
fCBydWxlc2V0IGR1bW15bmV0aWYgJ1xuJworCQl8IHJ1bGVzZXQgZG5xdWV1ZXNwZWMgJ1xuJwog
CQl8IHJ1bGVzZXQgcXVldWVzcGVjICdcbicKIAkJfCBydWxlc2V0IHZhcnNldCAnXG4nCiAJCXwg
cnVsZXNldCBhbnRpc3Bvb2YgJ1xuJwpAQCAtMTY2Nyw2ICsxNjgzLDIyMiBAQAogCQl9CiAJCTsK
IAorZHVtbXluZXRpZiAgICAgIDogRE5QSVBFIG51bWJlciBkbnBpcGVfb3B0cyBkbnF1ZXVlX29w
dHMgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkbl9waXBlIHA7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja19ydWxlc3RhdGUoUEZDVExfU1RBVEVf
UVVFVUUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOworCisgICAg
ICAgICAgICAgICAgICAgICAgICBtZW1zZXQoJnAsIDAsIHNpemVvZihwKSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHAuYmFuZHdpZHRoID0gJDMuYmFuZHdpZHRoOworICAgICAgICAgICAg
ICAgICAgICAgICAgcC5kZWxheSA9ICQzLmRlbGF5OworCQkJcC5waXBlX25yID0gJDI7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJnAuZnMsICYkNCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZW9mKHAuZnMpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
aWYocGZjdGxfYWRkX2R1bW15bmV0KHBmLCAmcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFlZRVJST1I7CisgICAgICAgICAgICAgICAgfQorZG5xdWV1ZXNwZWMgICAgIDogRE5R
VUVVRSBudW1iZXIgRE5QSVBFIG51bWJlciBkbnF1ZXVlX29wdHMgeworCQkgICAgICAgIHN0cnVj
dCBkbl9waXBlIHA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja19ydWxlc3Rh
dGUoUEZDVExfU1RBVEVfUVVFVUUpKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WVlFUlJPUjsKKworICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCZwLCAwLCBzaXplb2Yo
cCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJDQgPT0gMCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB5eWVycm9yKCJwaXBlIG11c3QgYmUgc3BlY2lmaWVkIGZv
ciBxdWV1ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCQkJaWYgKCQyID09IDApIHsKKwkJCQl5eWVycm9yKCJx
dWV1ZSBudW1iZXIgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCIpOworCQkJCVlZRVJST1I7CisJCQl9
CisJCQkJCQorICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZwLmZzLCAmJDUsIHNpemVv
ZihwLmZzKSk7CisJCQlwLmZzLmZzX25yID0gJDI7CisgICAgICAgICAgICAgICAgICAgICAgICBw
LmZzLnBhcmVudF9uciA9ICQ0OworCQkJcC5waXBlX25yID0gMDsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBmY3RsX2FkZF9kdW1teW5ldChwZiwgJnApKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHl5ZXJyb3IoImVycm9ycyBpbiBkbnF1ZXVlIGRlZmluaXRpb24i
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlFUlJPUjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgOworCitk
bnBpcGVfb3B0cyAgICAgOiAgICAgICAvKiBYWFg6IGZpeCB0aGlzICovIHsKKwkgICAgICAgICAg
ICAgICAgYnplcm8oJmRucGlwZV9vcHRzLCBzaXplb2YgZG5waXBlX29wdHMpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRucGlwZV9vcHRzX2wKKyAgICAgICAg
ICAgICAgICAgICAgICAgCXsgJCQgPSBkbnBpcGVfb3B0czsgfQorICAgICAgICAgICAgICAgIHwJ
LyogZW1wdHkgKi8geworICAgICAgICAgICAgICAgICAgICAgICAgYnplcm8oJmRucGlwZV9vcHRz
LCBzaXplb2YgZG5waXBlX29wdHMpOworICAgICAgICAgICAgICAgICAgICAgICAgJCQgPSBkbnBp
cGVfb3B0czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgOworCitkbnBpcGVf
b3B0c19sICAgOiBkbnBpcGVfb3B0c19sIGRucGlwZV9vcHQKKwkgICAgICAgIHwgZG5waXBlX29w
dAorICAgICAgICAgICAgICAgIDsKKworZG5waXBlX29wdCAgICAgIDogQkFORFdJRFRIIGJhbmR3
aWR0aCAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRucGlwZV9vcHRzLmJhbmR3aWR0aCA9
ICQyLmJ3X2Fic29sdXRlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB8IERF
TEFZIG51bWJlciAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJDIgPiAw
ICYmICQyIDwgMTAwMDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRucGlwZV9v
cHRzLmRlbGF5ID0gJDI7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeXllcnJvcigiZGVsYXkgbmVlZHMgYXJndW1lbnQgMC4u
MTAwMDBtcyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICA7CisKK2RucXVldWVfb3B0cyAgICA6IC8qIFhYWDogZml4IHRoaXMgKi8geworCQkgICAgICAg
IGJ6ZXJvKCZkbnF1ZXVlX29wdHMsIHNpemVvZiBkbnF1ZXVlX29wdHMpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZG5xdWV1ZV9vcHRzX2wKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsgJCQgPSBkbnF1ZXVlX29wdHM7IH0KKyAgICAgICAgICAgICAgICB8IC8qIGVt
cHR5ICovIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ6ZXJvKCZxdWV1ZV9vcHRzLCBzaXpl
b2YgcXVldWVfb3B0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IGRucXVldWVfb3B0
czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgOworCitkbnF1ZXVlX29wdHNf
bCAgOiBkbnF1ZXVlX29wdHNfbCBkbnF1ZXVlX29wdAorCQl8IGRucXVldWVfb3B0CisgICAgICAg
ICAgICAgICAgOworCitkbnF1ZXVlX29wdCAgICAgOiBCVUNLRVRTIG51bWJlciAgICAgICB7CisJ
CSAgICAgICAgaWYgKCQyIDwgMTYgfHwgJDIgPiA2NTUzNSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB5eWVycm9yKCJidWNrZXRzIG91dCBvZiByYW5nZTogWzE2LTY1NTM1XSIp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLypkbnF1ZXVlX29wdHMubWFy
a2VyIHw9IEROX0JVQ0tFVFM7Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgIGRucXVldWVfb3B0
cy5ycV9zaXplID0gJDI7CisgICAgICAgICAgICAgICAgfQorCQl8IFdFSUdIVCBudW1iZXIJCQkg
IHsKKwkJCWlmICgkMiA8IDAgfHwgJDIgPiAxMDApICB7IC8qIFswLi4xMDBdIGlzIGFsbG93ZWQg
Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXllcnJvcigid2VpZ2h0IG11c3Qg
YmUgaW4gWzAuLjEwMF0gcmFuZ2UiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WVlFUlJPUjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIAorCQkJZG5xdWV1ZV9vcHRzLndlaWdodCA9ICQyOworCQl9CisgICAgICAgICAgICAgICAg
fCBRVUVVRSBTVFJJTkcJCSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgICBicHM7
CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICpjcDsKKworCQkJYnBzID0gc3RydG9k
KCQyLCAmY3ApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJwcyA8IDE2IHx8IGJwcyA+
IDY1NTM1KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5ZXJyb3IoInFsaW1p
dCBvdXQgb2YgcmFuZ2UgWzE2Li42NTUzNV0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWVlFUlJPUjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGNwICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFzdHJjbXAoY3AsICJCIikpCisJCQkJCWRucXVldWVfb3B0cy5mbGFnc19mcyB8
PSAKKwkJCQkJCUROX1FTSVpFX0lTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmICghc3RyY21wKGNwLCAiS0IiKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJwcyAqPSAxMDI0OworCQkJCQlkbnF1ZXVlX29wdHMuZmxhZ3Nf
ZnMgfD0gCisJCQkJCQlETl9RU0laRV9JU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICgqY3AgIT0gJ1wwJykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHl5ZXJyb3IoInVua25vd24gdW5pdCAlcyIsIGNwKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKCQyKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisJCQl9IGVsc2UgCisJCQkJZG5xdWV1ZV9vcHRzLmZsYWdzX2ZzICY9
IAorCQkJCQl+RE5fUVNJWkVfSVNfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVl
KCQyKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZG5xdWV1ZV9vcHRzLnFzaXplID0gKHVf
aW50MzJfdClicHM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHwgUExSIG51
bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkbnF1ZXVlX29wdHMucGxyID0gKGludCkkMioweDdmZmZmZmZmIDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfCBNQVNLIG1hc2tfc3BlY2lmaWVyICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbWVtY3B5KCZkbnF1ZXVlX29wdHMsICYkMiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZW9mKGRucXVldWVfb3B0cykpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB8IFJFRCBzdHJpbmcgJy8nIG51bWJlciAnLycgbnVtYmVyICcv
JyBzdHJpbmcgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogWFhYOiB0aGlzIG5v
dCB5ZXQgZmluaXNoZWQhICovCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICplOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICAgcCA9IHN0cnRvZCgkMiwgJmUpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoKmUgPT0gJyUnKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHAgKj0gMC4wMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZSsrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCplKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5ZXJyb3IoImlu
dmFsaWQ6ICVzIiwgJDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKCQy
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlFUlJPUjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBmbG9vcihwICogKFVJ
TlRfTUFYKzEuMCkgKyAwLjUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPCAxLjAg
fHwgcCA+PSAoVUlOVF9NQVgrMS4wKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB5eWVycm9yKCJpbnZhbGlkOiAlcyIsICQyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnJlZSgkMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlZRVJST1I7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVl
KCQyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgOworCittYXNrX3NwZWNp
ZmllciAgOiBBTEwgICAgICAgICAgICAgICAgICAgeworCisgICAgICAgICAgICAgICAgICAgICAg
ICBtZW1zZXQoJiQkLCAwLCBzaXplb2YoJCQpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
JCQuZmxvd19tYXNrLmRzdF9pcCA9IH4wOworICAgICAgICAgICAgICAgICAgICAgICAgJCQuZmxv
d19tYXNrLnNyY19pcCA9IH4wOworICAgICAgICAgICAgICAgICAgICAgICAgJCQuZmxvd19tYXNr
LmRzdF9wb3J0ID0gfjA7CisgICAgICAgICAgICAgICAgICAgICAgICAkJC5mbG93X21hc2suc3Jj
X3BvcnQgPSB+MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICQkLmZsb3dfbWFzay5wcm90byA9
IH4wOworICAgICAgICAgICAgICAgICAgICAgICAgbjJtYXNrKCYkJC5mbG93X21hc2suZHN0X2lw
NiwgMTI4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG4ybWFzaygmJCQuZmxvd19tYXNrLnNy
Y19pcDYsIDEyOCk7CisgICAgICAgICAgICAgICAgICAgICAgICAkJC5mbG93X21hc2suZmxvd19p
ZDYgPSB+MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICQkLmZsYWdzX2ZzIHw9IEROX0hBVkVf
RkxPV19NQVNLOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB8IERTVElQIG51
bWJlciAgICAgICAgICAgICAJeworCQkJJCQuZmxvd19tYXNrLmRzdF9pcCA9ICh1aW50MzJfdCkk
MjsKKyAgICAgICAgICAgICAgICAgICAgICAgICQkLmZsYWdzX2ZzIHw9IEROX0hBVkVfRkxPV19N
QVNLOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB8IFNSQ0lQIG51bWJlcgkg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgJCQuZmxvd19tYXNrLnNyY19p
cCA9ICh1aW50MzJfdCkkMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICQkLmZsYWdzX2ZzIHw9
IEROX0hBVkVfRkxPV19NQVNLOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB8
IERTVFBPUlQgbnVtYmVyCSAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgJCQu
Zmxvd19tYXNrLmRzdF9wb3J0ID0gKHVpbnQxNl90KSQyOworICAgICAgICAgICAgICAgICAgICAg
ICAgJCQuZmxhZ3NfZnMgfD0gRE5fSEFWRV9GTE9XX01BU0s7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHwgU1JDUE9SVCBudW1iZXIJICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAkJC5mbG93X21hc2suc3JjX3BvcnQgPSAodWludDE2X3QpJDI7CisgICAg
ICAgICAgICAgICAgICAgICAgICAkJC5mbGFnc19mcyB8PSBETl9IQVZFX0ZMT1dfTUFTSzsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfCBEU1RJUDYgJy8nIG51bWJlciAJICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBuMm1hc2soJiQkLmZsb3dfbWFzay5k
c3RfaXA2LCAkMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAkJC5mbGFnc19mcyB8PSBETl9I
QVZFX0ZMT1dfTUFTSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfCBTUkNJ
UDYgJy8nIG51bWJlcgkgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBuMm1h
c2soJiQkLmZsb3dfbWFzay5zcmNfaXA2LCAkMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAk
JC5mbGFnc19mcyB8PSBETl9IQVZFX0ZMT1dfTUFTSzsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfCBGTE9XSUQgbnVtYmVyCSAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICQkLmZsb3dfbWFzay5mbG93X2lkNiA9ICh1aW50MzJfdCkkMjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICQkLmZsYWdzX2ZzIHw9IEROX0hBVkVfRkxPV19NQVNLOworCisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHwgUFJPVE8gbnVtYmVyIAkgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgJCQuZmxvd19tYXNrLnByb3RvID0gKHVpbnQ4
X3QpJDI7CisgICAgICAgICAgICAgICAgICAgICAgICAkJC5mbGFnc19mcyB8PSBETl9IQVZFX0ZM
T1dfTUFTSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfCBOT0VSUk9SICAg
ICAgIHsgJCQuZmxhZ3NfZnMgfD0gRE5fTk9FUlJPUjsgfQorICAgICAgICAgICAgICAgIDsKKwog
cGZydWxlCQk6IGFjdGlvbiBkaXIgbG9ncXVpY2sgaW50ZXJmYWNlIHJvdXRlIGFmIHByb3RvIGZy
b210bwogCQkgICAgZmlsdGVyX29wdHMKIAkJewpAQCAtMjAzNCw2ICsyMjY2LDE0IEBACiAJCQkJ
ZnJlZSgkOS5xdWV1ZXMucHFuYW1lKTsKIAkJCX0KIAorCQkJaWYgKCQ5LmRucGlwZSkgeworCQkJ
CXIuZG5waXBlID0gJDkuZG5waXBlOworCQkJCXIuZG50eXBlID0gJDkuZG50eXBlOworCQkJfQor
CQkJaWYgKCQ5LnBkbnBpcGUgJiYgci5kbnR5cGUgPT0gRE5fSVNfUVVFVUUpIHsKKwkJCQlyLnBk
bnBpcGUgPSAkOS5wZG5waXBlOworCQkJfQorCiAJCQlleHBhbmRfcnVsZSgmciwgJDQsICQ1Lmhv
c3QsICQ3LCAkOC5zcmNfb3MsCiAJCQkgICAgJDguc3JjLmhvc3QsICQ4LnNyYy5wb3J0LCAkOC5k
c3QuaG9zdCwgJDguZHN0LnBvcnQsCiAJCQkgICAgJDkudWlkLCAkOS5naWQsICQ5LmljbXBzcGVj
LCAiIik7CkBAIC0yMTIzLDYgKzIzNjMsMjcgQEAKIAkJCX0KIAkJCWZpbHRlcl9vcHRzLnF1ZXVl
cyA9ICQxOwogCQl9CisJCXwgRE5QSVBFIG51bWJlcgkJCSAgICAgICAgeworCQkJZmlsdGVyX29w
dHMuZG5waXBlID0gJDI7CisJCQlmaWx0ZXJfb3B0cy5kbnR5cGUgPSBETl9JU19QSVBFOworCQl9
CisJCXwgRE5QSVBFICcoJyBudW1iZXIgJyknCQkJeworCQkJZmlsdGVyX29wdHMuZG5waXBlID0g
JDM7CisJCQlmaWx0ZXJfb3B0cy5kbnR5cGUgPSBETl9JU19QSVBFOworCQl9CisJCXwgRE5RVUVV
RSBudW1iZXIJCQl7CisJCQlmaWx0ZXJfb3B0cy5kbnBpcGUgPSAkMjsKKwkJCWZpbHRlcl9vcHRz
LmRudHlwZSA9IEROX0lTX1FVRVVFOworCQl9CisJCXwgRE5RVUVVRSAnKCcgbnVtYmVyIGNvbW1h
IG51bWJlciAnKScJeworCQkJZmlsdGVyX29wdHMuZG5waXBlID0gJDM7CisJCQlmaWx0ZXJfb3B0
cy5wZG5waXBlID0gJDU7CisJCQlmaWx0ZXJfb3B0cy5kbnR5cGUgPSBETl9JU19RVUVVRTsKKwkJ
fQorCQl8IEROUVVFVUUgJygnIG51bWJlciAnKScJCXsKKwkJCWZpbHRlcl9vcHRzLmRucGlwZSA9
ICQzOworCQkJZmlsdGVyX29wdHMuZG50eXBlID0gRE5fSVNfUVVFVUU7CisJCX0KIAkJfCBUQUcg
c3RyaW5nCQkJCXsKIAkJCWZpbHRlcl9vcHRzLnRhZyA9ICQyOwogCQl9CkBAIC00MTEwLDYgKzQz
NzEsMTEgQEAKIAkJeXllcnJvcigia2VlcCBzdGF0ZSBvbiBibG9jayBydWxlcyBkb2Vzbid0IG1h
a2Ugc2Vuc2UiKTsKIAkJcHJvYmxlbXMrKzsKIAl9CisJaWYgKHItPnJ0ICYmIHItPmRucGlwZSkg
eworCQl5eWVycm9yKCJyb3V0ZS10by9kdXAtdG8vZmFzdHJvdXRlL3JlcGx5LXRvIHdpdGggZHVt
bXluZXQgIgorCQkJImRvZXNuJ3QgbWFrZSBzZW5zZSIpOworCQlwcm9ibGVtcysrOworCX0KIAly
ZXR1cm4gKC1wcm9ibGVtcyk7CiB9CiAKQEAgLTQ4OTYsMjMgKzUxNjIsMzIgQEAKIAkJeyAiYml0
bWFzayIsCQlCSVRNQVNLfSwKIAkJeyAiYmxvY2siLAkJQkxPQ0t9LAogCQl7ICJibG9jay1wb2xp
Y3kiLAlCTE9DS1BPTElDWX0sCisJCXsgImJ1Y2tldHMiLAkJQlVDS0VUU30sCiAJCXsgImNicSIs
CQlDQlF9LAogCQl7ICJjb2RlIiwJCUNPREV9LAogCQl7ICJjcm9wIiwJCUZSQUdDUk9QfSwKIAkJ
eyAiZGVidWciLAkJREVCVUd9LAorCQl7ICJkZWxheSIsCQlERUxBWX0sCisJCXsgImRucGlwZSIs
IAkJRE5QSVBFfSwKKwkJeyAiZG5xdWV1ZSIsCQlETlFVRVVFfSwKIAkJeyAiZHJvcCIsCQlEUk9Q
fSwKIAkJeyAiZHJvcC1vdmwiLAkJRlJBR0RST1B9LAorCQl7ICJkc3QtaXAiLAkJRFNUSVB9LAor
CQl7ICJkc3QtaXA2IiwJCURTVElQNn0sCiAJCXsgImR1cC10byIsCQlEVVBUT30sCisJCXsgImRz
dC1wb3J0IiwJCURTVFBPUlR9LAogCQl7ICJmYXN0cm91dGUiLAkJRkFTVFJPVVRFfSwKIAkJeyAi
ZmlsZSIsCQlGSUxFTkFNRX0sCiAJCXsgImZpbmdlcnByaW50cyIsCUZJTkdFUlBSSU5UU30sCiAJ
CXsgImZsYWdzIiwJCUZMQUdTfSwKIAkJeyAiZmxvYXRpbmciLAkJRkxPQVRJTkd9LAorCQl7ICJm
bG93LWlkIiwJCUZMT1dJRH0sCiAJCXsgImZsdXNoIiwJCUZMVVNIfSwKIAkJeyAiZm9yIiwJCUZP
Un0sCiAJCXsgImZyYWdtZW50IiwJCUZSQUdNRU5UfSwKIAkJeyAiZnJvbSIsCQlGUk9NfSwKIAkJ
eyAiZ2xvYmFsIiwJCUdMT0JBTH0sCisJCXsgImdyZWQiLAkJR1JFRH0sCiAJCXsgImdyb3VwIiwJ
CUdST1VQfSwKIAkJeyAiaGZzYyIsCQlIRlNDfSwKIAkJeyAiaG9zdGlkIiwJCUhPU1RJRH0sCkBA
IC00OTI5LDYgKzUyMDQsNyBAQAogCQl7ICJsb2FkIiwJCUxPQUR9LAogCQl7ICJsb2ciLAkJTE9H
fSwKIAkJeyAibG9naW50ZXJmYWNlIiwJTE9HSU5URVJGQUNFfSwKKwkJeyAibWFzayIsCQlNQVNL
fSwKIAkJeyAibWF4IiwJCU1BWElNVU19LAogCQl7ICJtYXgtbXNzIiwJCU1BWE1TU30sCiAJCXsg
Im1heC1zcmMtY29ubiIsCU1BWFNSQ0NPTk59LApAQCAtNDk0MywxMiArNTIxOSwxNCBAQAogCQl7
ICJuby1kZiIsCQlOT0RGfSwKIAkJeyAibm8tcm91dGUiLAkJTk9ST1VURX0sCiAJCXsgIm5vLXN5
bmMiLAkJTk9TWU5DfSwKKwkJeyAibm9lcnJvciIsCQlOT0VSUk9SfSwKIAkJeyAib24iLAkJCU9O
fSwKIAkJeyAib3B0aW1pemF0aW9uIiwJT1BUSU1JWkFUSU9OfSwKIAkJeyAib3MiLAkJCU9TfSwK
IAkJeyAib3V0IiwJCU9VVH0sCiAJCXsgIm92ZXJsb2FkIiwJCU9WRVJMT0FEfSwKIAkJeyAicGFz
cyIsCQlQQVNTfSwKKwkJeyAicGxyIiwJCVBMUn0sCiAJCXsgInBvcnQiLAkJUE9SVH0sCiAJCXsg
InByaW9yaXR5IiwJCVBSSU9SSVRZfSwKIAkJeyAicHJpcSIsCQlQUklRfSwKQEAgLTQ5NjMsNiAr
NTI0MSw3IEBACiAJCXsgInJkci1hbmNob3IiLAkJUkRSQU5DSE9SfSwKIAkJeyAicmVhbHRpbWUi
LAkJUkVBTFRJTUV9LAogCQl7ICJyZWFzc2VtYmxlIiwJCVJFQVNTRU1CTEV9LAorCQl7ICJyZWQi
LAkJUkVEfSwKIAkJeyAicmVwbHktdG8iLAkJUkVQTFlUT30sCiAJCXsgInJlcXVpcmUtb3JkZXIi
LAlSRVFVSVJFT1JERVJ9LAogCQl7ICJyZXR1cm4iLAkJUkVUVVJOfSwKQEAgLTQ5ODAsNiArNTI1
OSw5IEBACiAJCXsgInNraXAiLAkJU0tJUH0sCiAJCXsgInNvdXJjZS1oYXNoIiwJU09VUkNFSEFT
SH0sCiAJCXsgInNvdXJjZS10cmFjayIsCVNPVVJDRVRSQUNLfSwKKwkJeyAic3JjLWlwIiwJCVNS
Q0lQfSwKKwkJeyAic3JjLWlwNiIsIAkJU1JDSVA2fSwKKwkJeyAic3JjLXBvcnQiLAkJU1JDUE9S
VH0sCiAJCXsgInN0YXRlIiwJCVNUQVRFfSwKIAkJeyAic3RhdGUtcG9saWN5IiwJU1RBVEVQT0xJ
Q1l9LAogCQl7ICJzdGF0aWMtcG9ydCIsCVNUQVRJQ1BPUlR9LApAQCAtNDk5Niw2ICs1Mjc4LDcg
QEAKIAkJeyAidXBwZXJsaW1pdCIsCQlVUFBFUkxJTUlUfSwKIAkJeyAidXJwZi1mYWlsZWQiLAlV
UlBGRkFJTEVEfSwKIAkJeyAidXNlciIsCQlVU0VSfSwKKwkJeyAid2VpZ2h0IiwJCVdFSUdIVH0s
CiAJfTsKIAljb25zdCBzdHJ1Y3Qga2V5d29yZHMJKnA7CiAKQEAgLTU1MjQsMyArNTgwNywyMyBA
QAogCiAJcmV0dXJuICgwKTsKIH0KKworLyogbjJtYXNrIHNldHMgbiBiaXRzIG9mIHRoZSBtYXNr
ICovCitzdGF0aWMgdm9pZAorbjJtYXNrKHN0cnVjdCBpbjZfYWRkciAqbWFzaywgaW50IG4pCit7
CisgICAgICAgIHN0YXRpYyBpbnQgICAgICBtaW5pbWFza1s5XSA9CisgICAgICAgICAgICB7IDB4
MDAsIDB4ODAsIDB4YzAsIDB4ZTAsIDB4ZjAsIDB4ZjgsIDB4ZmMsIDB4ZmUsIDB4ZmYgfTsKKyAg
ICAgICAgdV9jaGFyICAgICAgICAgICpwOworCisgICAgICAgIG1lbXNldChtYXNrLCAwLCBzaXpl
b2Yoc3RydWN0IGluNl9hZGRyKSk7CisgICAgICAgIHAgPSAodV9jaGFyICopIG1hc2s7CisgICAg
ICAgIGZvciAoOyBuID4gMDsgcCsrLCBuIC09IDgpIHsKKyAgICAgICAgICAgICAgICBpZiAobiA+
PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgKnAgPSAweGZmOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICpwID0gbWluaW1hc2tbbl07CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuOworfQorCkluZGV4OiBjb250cmliL3BmL3BmY3RsL3BmY3RsLmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvZXJpL3JlcG8vY29udHJpYi9wZi9wZmN0bC9wZmN0
bC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCmRpZmYgLXUgLXIxLjEuMS4xIHBmY3Rs
LmMKLS0tIGNvbnRyaWIvcGYvcGZjdGwvcGZjdGwuYwkyMSBPY3QgMjAwNyAxMzo1MzoxNSAtMDAw
MAkxLjEuMS4xCisrKyBjb250cmliL3BmL3BmY3RsL3BmY3RsLmMJMjEgT2N0IDIwMDcgMTk6MDM6
NDkgLTAwMDAKQEAgLTQ2LDYgKzQ2LDkgQEAKICNpbmNsdWRlIDxhbHRxL2FsdHEuaD4KICNpbmNs
dWRlIDxzeXMvc3lzY3RsLmg+CiAKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX2Z3Lmg+CisjaW5jbHVk
ZSA8bmV0aW5ldC9pcF9kdW1teW5ldC5oPgorCiAjaW5jbHVkZSA8ZXJyLmg+CiAjaW5jbHVkZSA8
ZXJybm8uaD4KICNpbmNsdWRlIDxmY250bC5oPgpAQCAtNzEsNiArNzQsNyBAQAogaW50CSBwZmN0
bF9jbGVhcl9ydWxlcyhpbnQsIGludCwgY2hhciAqKTsKIGludAkgcGZjdGxfY2xlYXJfbmF0KGlu
dCwgaW50LCBjaGFyICopOwogaW50CSBwZmN0bF9jbGVhcl9hbHRxKGludCwgaW50KTsKK2ludAkg
cGZjdGxfY2xlYXJfZHVtbXluZXQoaW50LCBpbnQpOwogaW50CSBwZmN0bF9jbGVhcl9zcmNfbm9k
ZXMoaW50LCBpbnQpOwogaW50CSBwZmN0bF9jbGVhcl9zdGF0ZXMoaW50LCBjb25zdCBjaGFyICos
IGludCk7CiB2b2lkCSBwZmN0bF9hZGRycHJlZml4KGNoYXIgKiwgc3RydWN0IHBmX2FkZHIgKik7
CkBAIC05NSw2ICs5OSw3IEBACiBpbnQJIHBmY3RsX3Nob3dfbGltaXRzKGludCwgaW50KTsKIHZv
aWQJIHBmY3RsX2RlYnVnKGludCwgdV9pbnQzMl90LCBpbnQpOwogaW50CSBwZmN0bF90ZXN0X2Fs
dHFzdXBwb3J0KGludCwgaW50KTsKK2ludAkgcGZjdGxfdGVzdF9kdW1teW5ldHN1cHBvcnQoaW50
LCBpbnQpOwogaW50CSBwZmN0bF9zaG93X2FuY2hvcnMoaW50LCBpbnQsIGNoYXIgKik7CiBpbnQJ
IHBmY3RsX3J1bGVzZXRfdHJhbnMoc3RydWN0IHBmY3RsICosIGNoYXIgKiwgc3RydWN0IHBmX2Fu
Y2hvciAqKTsKIGludAkgcGZjdGxfbG9hZF9ydWxlc2V0KHN0cnVjdCBwZmN0bCAqLCBjaGFyICos
CkBAIC0xMjIsNiArMTI3LDkgQEAKIGludAkJIGxvYWRvcHQ7CiBpbnQJCSBhbHRxc3VwcG9ydDsK
IAoraW50IAkJIGR1bW15bmV0c3VwcG9ydDsKK2ludCAJCSBkbnNvY2s7CisKIGludAkJIGRldiA9
IC0xOwogaW50CQkgZmlyc3RfdGl0bGUgPSAxOwogaW50CQkgbGFiZWxzID0gMDsKQEAgLTIwNywx
MiArMjE1LDEyIEBACiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqY2xlYXJvcHRfbGlzdFtdID0g
ewotCSJuYXQiLCAicXVldWUiLCAicnVsZXMiLCAiU291cmNlcyIsCisJIm5hdCIsICJxdWV1ZSIs
ICJkdW1teW5ldCIsICJydWxlcyIsICJTb3VyY2VzIiwKIAkic3RhdGUiLCAiaW5mbyIsICJUYWJs
ZXMiLCAib3NmcCIsICJhbGwiLCBOVUxMCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc2hvd29w
dF9saXN0W10gPSB7Ci0JIm5hdCIsICJxdWV1ZSIsICJydWxlcyIsICJBbmNob3JzIiwgIlNvdXJj
ZXMiLCAic3RhdGUiLCAiaW5mbyIsCisJIm5hdCIsICJxdWV1ZSIsICJkdW1teW5ldCIsICJydWxl
cyIsICJBbmNob3JzIiwgIlNvdXJjZXMiLCAic3RhdGUiLCAiaW5mbyIsCiAJIkludGVyZmFjZXMi
LCAibGFiZWxzIiwgInRpbWVvdXRzIiwgIm1lbW9yeSIsICJUYWJsZXMiLCAib3NmcCIsCiAJImFs
bCIsIE5VTEwKIH07CkBAIC0zNjcsNiArMzc1LDIxIEBACiB9CiAKIGludAorcGZjdGxfY2xlYXJf
ZHVtbXluZXQoaW50IGRuc29jaywgaW50IG9wdHMpCit7CisgICAgICAgaWYgKCFkdW1teW5ldHN1
cHBvcnQpCisgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICBpZiAoc2V0c29ja29w
dChkbnNvY2ssIElQUFJPVE9fSVAsIElQX0RVTU1ZTkVUX0ZMVVNILCBOVUxMLCAwKSA8IDApIHsK
KyAgICAgICAgICAgICAgIGVycigxLCJzZXRzb2Nrb3B0KElQX0RVTU1ZTkVUX0ZMVVNIKSIpOwor
ICAgICAgICAgICAgICAgcmV0dXJuICgxKTsKKyAgICAgICB9CisKKyAgICAgICBpZiAoKG9wdHMg
JiBQRl9PUFRfUVVJRVQpID09IDApCisgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRV
TU1ZTkVUIGNsZWFyZWRcbiIpOworICAgICAgIHJldHVybiAoMCk7Cit9CisKK2ludAogcGZjdGxf
Y2xlYXJfc3JjX25vZGVzKGludCBkZXYsIGludCBvcHRzKQogewogCWlmIChpb2N0bChkZXYsIERJ
T0NDTFJTUkNOT0RFUykpCkBAIC0xMzQ4LDYgKzEzNzEsMjQgQEAKIH0KIAogaW50CitwZmN0bF9h
ZGRfZHVtbXluZXQoc3RydWN0IHBmY3RsICpwZiwgc3RydWN0IGRuX3BpcGUgKnApCit7CisgICAg
ICAgaWYgKGR1bW15bmV0c3VwcG9ydCAmJgorICAgICAgICAgICAobG9hZG9wdCAmIFBGQ1RMX0ZM
QUdfRFVNTVlORVQpICE9IDApIHsKKyAgICAgICAgICAgICAgIGlmICgocGYtPm9wdHMgJiBQRl9P
UFRfTk9BQ1RJT04pID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHNvY2tv
cHQoZG5zb2NrLCBJUFBST1RPX0lQLCBJUF9EVU1NWU5FVF9DT05GSUdVUkUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcCwgc2l6ZW9mKCpwKSkgPCAwKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXJyeCgxLCAiRFVNTVlORVQgY29uZmlndXJlIik7CisgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCWlmIChwZi0+
b3B0cyAmIFBGX09QVF9WRVJCT1NFKSAKKwkgICAgICAgcHJpbnRfZHVtbXluZXQocCk7CisKKyAg
ICAgICByZXR1cm4gKDApOworfQorCitpbnQKIHBmY3RsX3J1bGVzKGludCBkZXYsIGNoYXIgKmZp
bGVuYW1lLCBGSUxFICpmaW4sIGludCBvcHRzLCBpbnQgb3B0aW1pemUsCiAgICAgY2hhciAqYW5j
aG9ybmFtZSwgc3RydWN0IHBmcl9idWZmZXIgKnRyYW5zKQogewpAQCAtMTkxNCw2ICsxOTU1LDIx
IEBACiB9CiAKIGludAorcGZjdGxfdGVzdF9kdW1teW5ldHN1cHBvcnQoaW50IGRuc29jaywgaW50
IG9wdHMpCit7CisgICAgICAgc3RydWN0IGRuX3BpcGUgcDsKKyAgICAgICBzb2NrbGVuX3QgICAg
ICAgbGVuOworCisgICAgICAgaWYgKGdldHNvY2tvcHQoZG5zb2NrLCBJUFBST1RPX0lQLCBJUF9E
VU1NWU5FVF9HRVQsICZwLAorICAgICAgICAgICAgICAgICAgICAgICAmbGVuKSA8IDApIHsKKyAg
ICAgICAgICAgICAgIGlmICghKG9wdHMgJiAoUEZfT1BUX1FVSUVUfFBGX09QVF9OT0FDVElPTikp
KQorICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRVTU1ZTkVUIG5vdCBs
b2FkZWRcbiIpOworICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICB9CisgICAgICAg
cmV0dXJuICgxKTsKK30KKworaW50CiBwZmN0bF9zaG93X2FuY2hvcnMoaW50IGRldiwgaW50IG9w
dHMsIGNoYXIgKmFuY2hvcm5hbWUpCiB7CiAJc3RydWN0IHBmaW9jX3J1bGVzZXQJIHByOwpAQCAt
MTk3OCw3ICsyMDM0LDcgQEAKIAkJdXNhZ2UoKTsKIAogCXdoaWxlICgoY2ggPSBnZXRvcHQoYXJn
YywgYXJndiwKLQkgICAgImE6QWREOmVxZjpGOmdoaTprOks6bW5OT286OnA6clJzOnQ6VDp2eDp6
IikpICE9IC0xKSB7CisJICAgICJhOkFkRFA6ZXFmOkY6Z2hpOms6Szptbk5Pbzo6cDpyUnM6dDpU
OnZ4OnoiKSkgIT0gLTEpIHsKIAkJc3dpdGNoIChjaCkgewogCQljYXNlICdhJzoKIAkJCWFuY2hv
cm9wdCA9IG9wdGFyZzsKQEAgLTIwNTAsNiArMjEwNiw5IEBACiAJCWNhc2UgJ0EnOgogCQkJbG9h
ZG9wdCB8PSBQRkNUTF9GTEFHX0FMVFE7CiAJCQlicmVhazsKKwkJY2FzZSAnUCc6CisJCQlsb2Fk
b3B0IHw9IFBGQ1RMX0ZMQUdfRFVNTVlORVQ7CisJCQlicmVhazsKIAkJY2FzZSAnUic6CiAJCQls
b2Fkb3B0IHw9IFBGQ1RMX0ZMQUdfRklMVEVSOwogCQkJYnJlYWs7CkBAIC0yMTY0LDYgKzIyMjMs
MTEgQEAKIAkJaWYgKGRldiA9PSAtMSkKIAkJCWVycigxLCAiJXMiLCBwZl9kZXZpY2UpOwogCQlh
bHRxc3VwcG9ydCA9IHBmY3RsX3Rlc3RfYWx0cXN1cHBvcnQoZGV2LCBvcHRzKTsKKworCQlkbnNv
Y2sgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19SQVcsIElQUFJPVE9fUkFXKTsKKwkJaWYgKGRuc29j
ayA8IDApCisJCQllcnIoMSwgInNvY2tldCIpOworCQlkdW1teW5ldHN1cHBvcnQgPSBwZmN0bF90
ZXN0X2R1bW15bmV0c3VwcG9ydChkbnNvY2ssIG9wdHMpOwogCX0gZWxzZSB7CiAJCWRldiA9IG9w
ZW4ocGZfZGV2aWNlLCBPX1JET05MWSk7CiAJCWlmIChkZXYgPj0gMCkKQEAgLTIxNzYsNiArMjI0
MCwxMCBAQAogI2Vsc2UKIAkJYWx0cXN1cHBvcnQgPSAxOwogI2VuZGlmCisgICAgICAgICAgICAg
ICAgZG5zb2NrID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfUkFXLCBJUFBST1RPX1JBVyk7CisgICAg
ICAgICAgICAgICAgaWYgKGRuc29jayA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICBlcnIo
MSwgInNvY2tldCIpOworICAgICAgICAgICAgICAgIGR1bW15bmV0c3VwcG9ydCA9IHBmY3RsX3Rl
c3RfZHVtbXluZXRzdXBwb3J0KGRuc29jaywgb3B0cyk7CiAJfQogCiAJaWYgKG9wdHMgJiBQRl9P
UFRfRElTQUJMRSkKQEAgLTIyMDUsNiArMjI3Myw5IEBACiAJCQlwZmN0bF9zaG93X2FsdHEoZGV2
LCBpZmFjZW9wdCwgb3B0cywKIAkJCSAgICBvcHRzICYgUEZfT1BUX1ZFUkJPU0UyKTsKIAkJCWJy
ZWFrOworCQljYXNlICdkJzoKKwkJCXBmY3RsX3Nob3dfZHVtbXluZXQoZG5zb2NrLCBvcHRzKTsK
KwkJCWJyZWFrOwogCQljYXNlICdzJzoKIAkJCXBmY3RsX3Nob3dfc3RhdGVzKGRldiwgaWZhY2Vv
cHQsIG9wdHMpOwogCQkJYnJlYWs7CkBAIC0yMjI3LDYgKzIyOTgsNyBAQAogCQkJcGZjdGxfc2hv
d19uYXQoZGV2LCBvcHRzLCBhbmNob3JuYW1lKTsKIAkJCXBmY3RsX3Nob3dfcnVsZXMoZGV2LCBw
YXRoLCBvcHRzLCAwLCBhbmNob3JuYW1lLCAwKTsKIAkJCXBmY3RsX3Nob3dfYWx0cShkZXYsIGlm
YWNlb3B0LCBvcHRzLCAwKTsKKwkJCXBmY3RsX3Nob3dfZHVtbXluZXQoZG5zb2NrLCBvcHRzKTsK
IAkJCXBmY3RsX3Nob3dfc3RhdGVzKGRldiwgaWZhY2VvcHQsIG9wdHMpOwogCQkJcGZjdGxfc2hv
d19zcmNfbm9kZXMoZGV2LCBvcHRzKTsKIAkJCXBmY3RsX3Nob3dfc3RhdHVzKGRldiwgb3B0cyk7
CkBAIC0yMjY4LDYgKzIzNDAsOSBAQAogCQljYXNlICdxJzoKIAkJCXBmY3RsX2NsZWFyX2FsdHEo
ZGV2LCBvcHRzKTsKIAkJCWJyZWFrOworCQljYXNlICdkJzoKKwkJCXBmY3RsX2NsZWFyX2R1bW15
bmV0KGRuc29jaywgb3B0cyk7CisJCQlicmVhazsKIAkJY2FzZSAncyc6CiAJCQlwZmN0bF9jbGVh
cl9zdGF0ZXMoZGV2LCBpZmFjZW9wdCwgb3B0cyk7CiAJCQlicmVhazsKQEAgLTIyODMsNiArMjM1
OCw3IEBACiAJCQlwZmN0bF9jbGVhcl90YWJsZXMoYW5jaG9ybmFtZSwgb3B0cyk7CiAJCQlpZiAo
ISphbmNob3JuYW1lKSB7CiAJCQkJcGZjdGxfY2xlYXJfYWx0cShkZXYsIG9wdHMpOworCQkJCXBm
Y3RsX2NsZWFyX2R1bW15bmV0KGRuc29jaywgb3B0cyk7CiAJCQkJcGZjdGxfY2xlYXJfc3RhdGVz
KGRldiwgaWZhY2VvcHQsIG9wdHMpOwogCQkJCXBmY3RsX2NsZWFyX3NyY19ub2RlcyhkZXYsIG9w
dHMpOwogCQkJCXBmY3RsX2NsZWFyX3N0YXRzKGRldiwgb3B0cyk7CkluZGV4OiBjb250cmliL3Bm
L3BmY3RsL3BmY3RsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvZXJpL3JlcG8vY29udHJp
Yi9wZi9wZmN0bC9wZmN0bC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCmRpZmYgLXUg
LXIxLjEuMS4xIHBmY3RsLmgKLS0tIGNvbnRyaWIvcGYvcGZjdGwvcGZjdGwuaAkyMSBPY3QgMjAw
NyAxMzo1MzoxNSAtMDAwMAkxLjEuMS4xCisrKyBjb250cmliL3BmL3BmY3RsL3BmY3RsLmgJMjEg
T2N0IDIwMDcgMTk6MDM6NDkgLTAwMDAKQEAgLTg1LDYgKzg1LDcgQEAKIGludAkgcGZjdGxfY29t
bWFuZF90YWJsZXMoaW50LCBjaGFyICpbXSwgY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiwK
IAkgICAgY29uc3QgY2hhciAqLCBpbnQpOwogaW50CSBwZmN0bF9zaG93X2FsdHEoaW50LCBjb25z
dCBjaGFyICosIGludCwgaW50KTsKK2ludAkgcGZjdGxfc2hvd19kdW1teW5ldChpbnQsIGludCk7
CiB2b2lkCSB3YXJuX25hbWVzcGFjZV9jb2xsaXNpb24oY29uc3QgY2hhciAqKTsKIGludAkgcGZj
dGxfc2hvd19pZmFjZXMoY29uc3QgY2hhciAqLCBpbnQpOwogRklMRQkqcGZjdGxfZm9wZW4oY29u
c3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpJbmRleDogY29udHJpYi9wZi9wZmN0bC9wZmN0bF9k
bi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGNvbnRyaWIvcGYvcGZjdGwvcGZjdGxfZG4uYwpkaWZm
IC1OIGNvbnRyaWIvcGYvcGZjdGwvcGZjdGxfZG4uYwotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDAKKysrIGNvbnRyaWIvcGYvcGZjdGwvcGZjdGxfZG4uYwkyMSBPY3QgMjAw
NyAxOTowMzozMiAtMDAwMApAQCAtMCwwICsxLDM5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAwNyBFcm1hbCBMdedpCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBMdWlnaSBSaXp6bwor
ICogQ29weXJpZ2h0IChjKSAxOTk2IEFsZXggTmFzaCwgUGF1bCBUcmFpbmEsIFBvdWwtSGVubmlu
ZyBLYW1wCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQgVWdlbiBKLlMuQW50c2lsZXZpY2gKKyAqCisg
KiBJZGVhIGFuZCBncmFtbWFyIHBhcnRpYWxseSBsZWZ0IGZyb206CisgKiBDb3B5cmlnaHQgKGMp
IDE5OTMgRGFuaWVsIEJvdWxldAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGZvcm1zLCB3aXRoIGFuZCB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGlzIGVudGlyZSBjb21tZW50IGFwcGVhcnMgaW50YWN0LgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG1heSBvY2N1ciB3aXRob3V0IGFueSBy
ZXN0cmljdGlvbnMuCisgKiBPYnZpb3VzbHksIGl0IHdvdWxkIGJlIG5pY2UgaWYgeW91IGdhdmUg
Y3JlZGl0IHdoZXJlIGNyZWRpdCBpcyBkdWUKKyAqIGJ1dCByZXF1aXJpbmcgaXQgd291bGQgYmUg
dG9vIG9uZXJvdXMuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYEFTIElTJycg
d2l0aG91dCBhbnkgd2FycmFudGllcyBvZiBhbnkga2luZC4KKyAqCisgKiBORVcgY29tbWFuZCBs
aW5lIGludGVyZmFjZSBmb3IgSVAgZmlyZXdhbGwgZmFjaWxpdHkKKyAqCisgKi8KKworLyoKKyAq
IE1vc3Qgb2YgdGhpcyBpcyBkZXJpdmVkIGZyb20gaXBmdyg4KSBjb2RlLgorICovCisKKyNpbmNs
dWRlIDxzeXMvY2RlZnMuaD4KKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5
cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMu
aD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisKKyNp
bmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8bmV0
L3BmdmFyLmg+CisKKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1
ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5o
PgorI2luY2x1ZGUgPG5ldGRiLmg+CisKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX2Z3Lmg+CisjaW5j
bHVkZSA8bmV0aW5ldC9pcF9kdW1teW5ldC5oPgorCisjaW5jbHVkZSAicGZjdGxfcGFyc2VyLmgi
CisjaW5jbHVkZSAicGZjdGwuaCIKKworc3RhdGljIGludCBkb19zb3J0LAorCSAgIHZlcmJvc2U7
CisKK3N0YXRpYyBpbnQgc29ydF9xKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKK3N0YXRp
YyB2b2lkCitsaXN0X3F1ZXVlcyhzdHJ1Y3QgZG5fZmxvd19zZXQgKiwgc3RydWN0IGRuX2Zsb3df
cXVldWUgKik7CitzdGF0aWMgdm9pZAorcHJpbnRfZmxvd3NldF9wYXJtcyhzdHJ1Y3QgZG5fZmxv
d19zZXQgKiwgY2hhciAqKTsKK3N0YXRpYyB2b2lkCitsaXN0X3BpcGVzKHZvaWQgKiwgdWludCAp
OworCitzdGF0aWMgaW50Citzb3J0X3EoY29uc3Qgdm9pZCAqcGEsIGNvbnN0IHZvaWQgKnBiKQor
eworICAgICAgICBpbnQgcmV2ID0gKDApOworICAgICAgICBpbnQgZmllbGQgPSByZXYgPyAtZG9f
c29ydCA6IGRvX3NvcnQ7CisgICAgICAgIGxvbmcgbG9uZyByZXMgPSAwOworICAgICAgICBjb25z
dCBzdHJ1Y3QgZG5fZmxvd19xdWV1ZSAqYSA9IHBhOworICAgICAgICBjb25zdCBzdHJ1Y3QgZG5f
Zmxvd19xdWV1ZSAqYiA9IHBiOworCisgICAgICAgIHN3aXRjaCAoZmllbGQpIHsKKyAgICAgICAg
Y2FzZSAxOiAvKiBwa3RzICovCisgICAgICAgICAgICAgICAgcmVzID0gYS0+bGVuIC0gYi0+bGVu
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6IC8qIGJ5dGVzICovCisg
ICAgICAgICAgICAgICAgcmVzID0gYS0+bGVuX2J5dGVzIC0gYi0+bGVuX2J5dGVzOworICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMzogLyogdG90IHBrdHMgKi8KKyAgICAg
ICAgICAgICAgICByZXMgPSBhLT50b3RfcGt0cyAtIGItPnRvdF9wa3RzOworICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgNDogLyogdG90IGJ5dGVzICovCisgICAgICAgICAg
ICAgICAgcmVzID0gYS0+dG90X2J5dGVzIC0gYi0+dG90X2J5dGVzOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChyZXMgPCAwKQorICAgICAgICAgICAgICAg
IHJlcyA9IC0xOworICAgICAgICBpZiAocmVzID4gMCkKKyAgICAgICAgICAgICAgICByZXMgPSAx
OworICAgICAgICByZXR1cm4gKGludCkocmV2ID8gcmVzIDogLXJlcyk7Cit9CisKK3N0YXRpYyB2
b2lkCitsaXN0X3F1ZXVlcyhzdHJ1Y3QgZG5fZmxvd19zZXQgKmZzLCBzdHJ1Y3QgZG5fZmxvd19x
dWV1ZSAqcSkKK3sKKyAgICAgICAgaW50IGw7CisgICAgICAgIGludCBpbmRleF9wcmludGVkLCBp
bmRleGVzID0gMDsKKyAgICAgICAgY2hhciBidWZmWzI1NV07CisgICAgICAgIHN0cnVjdCBwcm90
b2VudCAqcGU7CisKKyAgICAgICAgaWYgKGZzLT5ycV9lbGVtZW50cyA9PSAwKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoZG9fc29ydCAhPSAwKQorICAgICAgICAgICAg
ICAgIGhlYXBzb3J0KHEsIGZzLT5ycV9lbGVtZW50cywgc2l6ZW9mICpxLCBzb3J0X3EpOworCisg
ICAgICAgIC8qIFByaW50IElQdjQgZmxvd3MgKi8KKyAgICAgICAgaW5kZXhfcHJpbnRlZCA9IDA7
CisgICAgICAgIGZvciAobCA9IDA7IGwgPCBmcy0+cnFfZWxlbWVudHM7IGwrKykgeworICAgICAg
ICAgICAgICAgIHN0cnVjdCBpbl9hZGRyIGluYTsKKworICAgICAgICAgICAgICAgIC8qIFhYWDog
U2hvdWxkIGNoZWNrIGZvciBJUHY0IGZsb3dzICovCisgICAgICAgICAgICAgICAgaWYgKElTX0lQ
Nl9GTE9XX0lEKCYocVtsXS5pZCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4X3ByaW50ZWQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4X3ByaW50ZWQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGluZGV4ZXMgPiAwKSAgICAgICAgLyogY3VycmVudGx5IGEgbm8tb3AgKi8KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhlcysrOworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJtYXNrOiAweCUwMnggMHglMDh4LzB4JTA0eCAtPiAw
eCUwOHgvMHglMDR4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzLT5mbG93X21h
c2sucHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnMtPmZsb3dfbWFzay5zcmNf
aXAsIGZzLT5mbG93X21hc2suc3JjX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZnMtPmZsb3dfbWFzay5kc3RfaXAsIGZzLT5mbG93X21hc2suZHN0X3BvcnQpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBwcmludGYoIkJLVCBQcm90IF9fX1NvdXJjZSBJUC9wb3J0X19fXyAi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fX19EZXN0LiBJUC9wb3J0X19fXyAiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdF9wa3QvYnl0ZXMgUGt0L0J5dGUgRHJwXG4i
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBwcmludGYoIiUzZCAiLCBx
W2xdLmhhc2hfc2xvdCk7CisgICAgICAgICAgICAgICAgcGUgPSBnZXRwcm90b2J5bnVtYmVyKHFb
bF0uaWQucHJvdG8pOworICAgICAgICAgICAgICAgIGlmIChwZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHByaW50ZigiJS00cyAiLCBwZS0+cF9uYW1lKTsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiU0dSAiLCBxW2xdLmlkLnByb3RvKTsK
KyAgICAgICAgICAgICAgICBpbmEuc19hZGRyID0gaHRvbmwocVtsXS5pZC5zcmNfaXApOworICAg
ICAgICAgICAgICAgIHByaW50ZigiJTE1cy8lLTVkICIsCisgICAgICAgICAgICAgICAgICAgIGlu
ZXRfbnRvYShpbmEpLCBxW2xdLmlkLnNyY19wb3J0KTsKKyAgICAgICAgICAgICAgICBpbmEuc19h
ZGRyID0gaHRvbmwocVtsXS5pZC5kc3RfaXApOworICAgICAgICAgICAgICAgIHByaW50ZigiJTE1
cy8lLTVkICIsCisgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvYShpbmEpLCBxW2xdLmlkLmRz
dF9wb3J0KTsKKyAgICAgICAgICAgICAgICBwcmludGYoIiU0cXUgJThxdSAlMnUgJTR1ICUzdVxu
IiwKKyAgICAgICAgICAgICAgICAgICAgcVtsXS50b3RfcGt0cywgcVtsXS50b3RfYnl0ZXMsCisg
ICAgICAgICAgICAgICAgICAgIHFbbF0ubGVuLCBxW2xdLmxlbl9ieXRlcywgcVtsXS5kcm9wcyk7
CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBw
cmludGYoIiAgIFMgJTIwcWQgIEYgJTIwcWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcVtsXS5TLCBxW2xdLkYpOworICAgICAgICB9CisKKyAgICAgICAgLyogUHJpbnQgSVB2NiBm
bG93cyAqLworICAgICAgICBpbmRleF9wcmludGVkID0gMDsKKyAgICAgICAgZm9yIChsID0gMDsg
bCA8IGZzLT5ycV9lbGVtZW50czsgbCsrKSB7CisgICAgICAgICAgICAgICAgaWYgKCFJU19JUDZf
RkxPV19JRCgmKHFbbF0uaWQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICAgICAgaWYgKCFpbmRleF9wcmludGVkKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleF9wcmludGVkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
bmRleGVzID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIp
OworICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVzKys7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwcmludGYoIlxuICAgICAgICBtYXNrOiBwcm90bzogMHglMDJ4LCBmbG93X2lkOiAweCUw
OHgsICAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzLT5mbG93X21hc2sucHJvdG8s
IGZzLT5mbG93X21hc2suZmxvd19pZDYpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9u
dG9wKEFGX0lORVQ2LCAmKGZzLT5mbG93X21hc2suc3JjX2lwNiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnVmZiwgc2l6ZW9mKGJ1ZmYpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHByaW50ZigiJXMvMHglMDR4IC0+ICIsIGJ1ZmYsIGZzLT5mbG93X21hc2suc3JjX3BvcnQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9wKCBBRl9JTkVUNiwgJihmcy0+Zmxvd19t
YXNrLmRzdF9pcDYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmYsIHNpemVvZihi
dWZmKSApOworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlcy8weCUwNHhcbiIsIGJ1
ZmYsIGZzLT5mbG93X21hc2suZHN0X3BvcnQpOworCisgICAgICAgICAgICAgICAgICAgICAgICBw
cmludGYoIkJLVCBfX19Qcm90X19fIF9mbG93LWlkXyAiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIl9fX19fX19fX19fX19fU291cmNlIElQdjYvcG9ydF9fX19fX19fX19fX19fXyAiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fX19fX19fX19fX19fX0Rlc3QuIElQdjYvcG9y
dF9fX19fX19fX19fX19fXyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdF9wa3Qv
Ynl0ZXMgUGt0L0J5dGUgRHJwXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcHJpbnRmKCIlM2QgIiwgcVtsXS5oYXNoX3Nsb3QpOworICAgICAgICAgICAgICAgIHBlID0g
Z2V0cHJvdG9ieW51bWJlcihxW2xdLmlkLnByb3RvKTsKKyAgICAgICAgICAgICAgICBpZiAocGUg
IT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJTlzICIsIHBlLT5wX25h
bWUpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50
ZigiJTl1ICIsIHFbbF0uaWQucHJvdG8pOworICAgICAgICAgICAgICAgIHByaW50ZigiJTdkICAl
MzlzLyUtNWQgIiwgcVtsXS5pZC5mbG93X2lkNiwKKyAgICAgICAgICAgICAgICAgICAgaW5ldF9u
dG9wKEFGX0lORVQ2LCAmKHFbbF0uaWQuc3JjX2lwNiksIGJ1ZmYsIHNpemVvZihidWZmKSksCisg
ICAgICAgICAgICAgICAgICAgIHFbbF0uaWQuc3JjX3BvcnQpOworICAgICAgICAgICAgICAgIHBy
aW50ZigiICUzOXMvJS01ZCAiLAorICAgICAgICAgICAgICAgICAgICBpbmV0X250b3AoQUZfSU5F
VDYsICYocVtsXS5pZC5kc3RfaXA2KSwgYnVmZiwgc2l6ZW9mKGJ1ZmYpKSwKKyAgICAgICAgICAg
ICAgICAgICAgcVtsXS5pZC5kc3RfcG9ydCk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIgJTRx
dSAlOHF1ICUydSAlNHUgJTN1XG4iLAorICAgICAgICAgICAgICAgICAgICBxW2xdLnRvdF9wa3Rz
LCBxW2xdLnRvdF9ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgcVtsXS5sZW4sIHFbbF0ubGVu
X2J5dGVzLCBxW2xdLmRyb3BzKTsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgUyAlMjBxZCAgRiAlMjBxZFxuIiwgcVtsXS5T
LCBxW2xdLkYpOworICAgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitwcmludF9mbG93c2V0X3Bh
cm1zKHN0cnVjdCBkbl9mbG93X3NldCAqZnMsIGNoYXIgKnByZWZpeCkKK3sKKyAgICAgICAgaW50
IGw7CisgICAgICAgIGNoYXIgcXNbMzBdOworICAgICAgICBjaGFyIHBsclszMF07CisgICAgICAg
IGNoYXIgcmVkWzkwXTsgICAvKiBEaXNwbGF5IFJFRCBwYXJhbWV0ZXJzICovCisKKyAgICAgICAg
bCA9IGZzLT5xc2l6ZTsKKyAgICAgICAgaWYgKGZzLT5mbGFnc19mcyAmIEROX1FTSVpFX0lTX0JZ
VEVTKSB7CisgICAgICAgICAgICAgICAgaWYgKGwgPj0gODE5MikKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNwcmludGYocXMsICIlZCBLQiIsIGwgLyAxMDI0KTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHFzLCAiJWQgQiIsIGwpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzcHJpbnRmKHFzLCAiJTNkIHNsLiIsIGwpOwor
ICAgICAgICBpZiAoZnMtPnBscikKKyAgICAgICAgICAgICAgICBzcHJpbnRmKHBsciwgInBsciAl
ZiIsIDEuMCAqIGZzLT5wbHIgLyAoZG91YmxlKSgweDdmZmZmZmZmKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBwbHJbMF0gPSAnXDAnOworICAgICAgICBpZiAoZnMtPmZsYWdzX2Zz
ICYgRE5fSVNfUkVEKSAgIC8qIFJFRCBwYXJhbWV0ZXJzICovCisgICAgICAgICAgICAgICAgc3By
aW50ZihyZWQsCisgICAgICAgICAgICAgICAgICAgICJcblx0ICAlY1JFRCB3X3EgJWYgbWluX3Ro
ICVkIG1heF90aCAlZCBtYXhfcCAlZiIsCisgICAgICAgICAgICAgICAgICAgIChmcy0+ZmxhZ3Nf
ZnMgJiBETl9JU19HRU5UTEVfUkVEKSA/ICdHJyA6ICcgJywKKyAgICAgICAgICAgICAgICAgICAg
MS4wICogZnMtPndfcSAvIChkb3VibGUpKDEgPDwgU0NBTEVfUkVEKSwKKyAgICAgICAgICAgICAg
ICAgICAgU0NBTEVfVkFMKGZzLT5taW5fdGgpLAorICAgICAgICAgICAgICAgICAgICBTQ0FMRV9W
QUwoZnMtPm1heF90aCksCisgICAgICAgICAgICAgICAgICAgIDEuMCAqIGZzLT5tYXhfcCAvIChk
b3VibGUpKDEgPDwgU0NBTEVfUkVEKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBz
cHJpbnRmKHJlZCwgImRyb3B0YWlsIik7CisKKyAgICAgICAgcHJpbnRmKCIlcyAlcyVzICVkIHF1
ZXVlcyAoJWQgYnVja2V0cykgJXNcbiIsCisgICAgICAgICAgICBwcmVmaXgsIHFzLCBwbHIsIGZz
LT5ycV9lbGVtZW50cywgZnMtPnJxX3NpemUsIHJlZCk7Cit9CisKKworc3RhdGljIHZvaWQKK2xp
c3RfcGlwZXModm9pZCAqZGF0YSwgdWludCBuYnl0ZXMpCit7CisgICAgICAgIHZvaWQgKm5leHQg
PSBkYXRhOworICAgICAgICBzdHJ1Y3QgZG5fcGlwZSAqcCA9IChzdHJ1Y3QgZG5fcGlwZSAqKSBk
YXRhOworICAgICAgICBzdHJ1Y3QgZG5fZmxvd19zZXQgKmZzOworICAgICAgICBzdHJ1Y3QgZG5f
Zmxvd19xdWV1ZSAqcTsKKyAgICAgICAgaW50IGw7CisKKyAgICAgICAgZm9yICg7IG5ieXRlcyA+
PSBzaXplb2YgKnA7IHAgPSAoc3RydWN0IGRuX3BpcGUgKiluZXh0KSB7CisgICAgICAgICAgICAg
ICAgZG91YmxlIGIgPSBwLT5iYW5kd2lkdGg7CisgICAgICAgICAgICAgICAgY2hhciBidWZbMzBd
OworICAgICAgICAgICAgICAgIGNoYXIgcHJlZml4WzgwXTsKKworICAgICAgICAgICAgICAgIGlm
IChTTElTVF9ORVhUKHAsIG5leHQpICE9IChzdHJ1Y3QgZG5fcGlwZSAqKUROX0lTX1BJUEUpCisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8qIGRvbmUgd2l0aCBwaXBlcywgbm93IHF1
ZXVlcyAqLworCisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBjb21wdXRl
IGxlbmd0aCwgYXMgcGlwZSBoYXZlIHZhcmlhYmxlIHNpemUKKyAgICAgICAgICAgICAgICAgKi8K
KyAgICAgICAgICAgICAgICBsID0gc2l6ZW9mKCpwKSArIHAtPmZzLnJxX2VsZW1lbnRzICogc2l6
ZW9mKCpxKTsKKyAgICAgICAgICAgICAgICBuZXh0ID0gKGNoYXIgKilwICsgbDsKKyAgICAgICAg
ICAgICAgICBuYnl0ZXMgLT0gbDsKKworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAg
ICAgICogUHJpbnQgcmF0ZSAob3IgY2xvY2tpbmcgaW50ZXJmYWNlKQorICAgICAgICAgICAgICAg
ICAqLworICAgICAgICAgICAgICAgIGlmIChwLT5pZl9uYW1lWzBdICE9ICdcMCcpCisgICAgICAg
ICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCAiJXMiLCBwLT5pZl9uYW1lKTsKKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChiID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRm
KGJ1ZiwgInVubGltaXRlZCIpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGIgPj0gMTAwMDAw
MCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCAiJTcuM2YgTWJpdC9zIiwg
Yi8xMDAwMDAwKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChiID49IDEwMDApCisgICAgICAg
ICAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgIiU3LjNmIEtiaXQvcyIsIGIvMTAwMCk7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihidWYs
ICIlNy4zZiBiaXQvcyAiLCBiKTsKKworICAgICAgICAgICAgICAgIHNwcmludGYocHJlZml4LCAi
JTA1ZDogJXMgJTRkIG1zICIsCisgICAgICAgICAgICAgICAgICAgIHAtPnBpcGVfbnIsIGJ1Ziwg
cC0+ZGVsYXkpOworICAgICAgICAgICAgICAgIHByaW50X2Zsb3dzZXRfcGFybXMoJihwLT5mcyks
IHByZWZpeCk7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ICAgICAgICBwcmludGYoIiAgIFYgJTIwcWRcbiIsIHAtPlYgPj4gTVlfTSk7CisKKyAgICAgICAg
ICAgICAgICBxID0gKHN0cnVjdCBkbl9mbG93X3F1ZXVlICopKHArMSk7CisgICAgICAgICAgICAg
ICAgbGlzdF9xdWV1ZXMoJihwLT5mcyksIHEpOworICAgICAgICB9CisgICAgICAgIGZvciAoZnMg
PSBuZXh0OyBuYnl0ZXMgPj0gc2l6ZW9mICpmczsgZnMgPSBuZXh0KSB7CisgICAgICAgICAgICAg
ICAgY2hhciBwcmVmaXhbODBdOworCisgICAgICAgICAgICAgICAgaWYgKFNMSVNUX05FWFQoZnMs
IG5leHQpICE9IChzdHJ1Y3QgZG5fZmxvd19zZXQgKilETl9JU19RVUVVRSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGwgPSBzaXplb2YoKmZzKSArIGZz
LT5ycV9lbGVtZW50cyAqIHNpemVvZigqcSk7CisgICAgICAgICAgICAgICAgbmV4dCA9IChjaGFy
ICopZnMgKyBsOworICAgICAgICAgICAgICAgIG5ieXRlcyAtPSBsOworI2lmIDAKKyAgICAgICAg
ICAgICAgICBpZiAocnVsZW51bSAhPSAwICYmICgocnVsZW51bSAhPSBmcy0+ZnNfbnIgJiYgZG9f
cGlwZSA9PSAyKSB8fAorICAgICAgICAgICAgICAgICAgICAocnVsZW51bSAhPSBmcy0+cGFyZW50
X25yICYmIGRvX3BpcGUgPT0gMSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICBxID0gKHN0cnVj
dCBkbl9mbG93X3F1ZXVlICopKGZzKzEpOworICAgICAgICAgICAgICAgIHNwcmludGYocHJlZml4
LCAicSUwNWQ6IHdlaWdodCAlZCBwaXBlICVkICIsCisgICAgICAgICAgICAgICAgICAgIGZzLT5m
c19uciwgZnMtPndlaWdodCwgZnMtPnBhcmVudF9ucik7CisgICAgICAgICAgICAgICAgcHJpbnRf
Zmxvd3NldF9wYXJtcyhmcywgcHJlZml4KTsKKyAgICAgICAgICAgICAgICBsaXN0X3F1ZXVlcyhm
cywgcSk7CisgICAgICAgIH0KK30KKwordm9pZAorcHJpbnRfZHVtbXluZXQoc3RydWN0IGRuX3Bp
cGUgKnApCit7CisJY2hhciBidWZmWzI1NV07CisKKwlpZiAocC0+cGlwZV9uciAhPSAwKSB7IC8q
IFRoaXMgaXMgYSBwaXBlICovCisJCXByaW50ZigiZG5waXBlICVkIiwgcC0+cGlwZV9ucik7CisJ
CWlmIChwLT5iYW5kd2lkdGgpIAorCQkJcHJpbnRmKCIgYmFuZHdpZHRoICVkTWIiLCBwLT5iYW5k
d2lkdGgvMTAwMDAwMCk7CisJICAgICAgICBlbHNlIGlmIChwLT5iYW5kd2lkdGggPj0gMTAwMCkK
KyAgICAgICAgIAkgICAgICAgIHByaW50ZigiIGJhbmR3aWR0aCAlZEtiIiwgcC0+YmFuZHdpZHRo
LzEwMDApOworCSAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICAgICAgICAgCXByaW50Zigi
IGJhbmR3aWR0aCAlZGIgIiwgcC0+YmFuZHdpZHRoKTsKKwkJaWYgKHAtPmRlbGF5ID4gMCkKKwkJ
CXByaW50ZigiIGRlbGF5ICVkIiwgcC0+ZGVsYXkpOworCX0gZWxzZSB7CisJCXByaW50ZigiZG5x
dWV1ZSAlZCBkbnBpcGUgJWQiLCBwLT5mcy5mc19uciwgcC0+ZnMucGFyZW50X25yKTsKKwkJaWYg
KHAtPmZzLndlaWdodCkKKwkJCXByaW50ZigiIHdlaWdodCAlZCIsIHAtPmZzLndlaWdodCk7CisJ
fQorCisJaWYgKHAtPmZzLnJxX3NpemUgPiAxNSkKKwkJcHJpbnRmKCIgYnVja2V0cyAlZCIsIHAt
PmZzLnJxX3NpemUpOworCWlmIChwLT5mcy5mbGFnc19mcyAmIEROX1FTSVpFX0lTX0JZVEVTKSB7
CisgICAgICAgICAgICAgICAgaWYgKHAtPmZzLnFzaXplID49IDgxOTIpCisgICAgICAgICAgICAg
ICAgICAgICAgICBwcmludGYoIiBxdWV1ZSAlZEtCIiwgIHAtPmZzLnFzaXplIC8gMTAyNCk7Cisg
ICAgICAgICAgICAgICAgZWxzZSBpZiAocC0+ZnMucXNpemUgPiAwKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcHJpbnRmKCIgcXVldWUgJWRCIiwgcC0+ZnMucXNpemUpOworICAgICAgICB9IGVs
c2UKKwkJaWYgKHAtPmZzLnFzaXplID4gMCkKKwkgICAgICAgICAgICAgICAgcHJpbnRmKCIgcXVl
dWUgJTNkIiwgcC0+ZnMucXNpemUpOworICAgICAgICBpZiAocC0+ZnMucGxyID4gMCkKKyAgICAg
ICAgICAgICAgICBwcmludGYoIiBwbHIgJWYiLCAxLjAgKiBwLT5mcy5wbHIgLyAoZG91YmxlKSgw
eDdmZmZmZmZmKSk7CisKKwlpZiAocC0+ZnMuZmxvd19tYXNrLnByb3RvICYmIHAtPmZzLmZsb3df
bWFzay5kc3RfaXAgJiYgCisJCXAtPmZzLmZsb3dfbWFzay5zcmNfaXAgJiYgcC0+ZnMuZmxvd19t
YXNrLmRzdF9wb3J0ICYmIAorCQlwLT5mcy5mbG93X21hc2suc3JjX3BvcnQgJiYKKwkJcC0+ZnMu
Zmxvd19tYXNrLmZsb3dfaWQ2KQorCQlwcmludGYoIiBtYXNrIGFsbCIpOworCWVsc2UgIGlmIChw
LT5mcy5mbG93X21hc2sucHJvdG8gfHwgcC0+ZnMuZmxvd19tYXNrLmRzdF9pcCB8fCAKKwkJcC0+
ZnMuZmxvd19tYXNrLnNyY19pcCB8fCBwLT5mcy5mbG93X21hc2suZHN0X3BvcnQgfHwgCisJCXAt
PmZzLmZsb3dfbWFzay5zcmNfcG9ydCB8fAorCQlwLT5mcy5mbG93X21hc2suZmxvd19pZDYpIHsK
KwkJcHJpbnRmKCJcblx0IG1hc2s6ICIpOworCWlmIChwLT5mcy5mbG93X21hc2sucHJvdG8pCisJ
CXByaW50ZigiIHByb3RvIDB4JTAyeCIsIHAtPmZzLmZsb3dfbWFzay5wcm90byk7CisJaWYgKHAt
PmZzLmZsb3dfbWFzay5zcmNfaXApCisJCXByaW50ZigiIHNyYy1pcCAweCUwOHgiLCBwLT5mcy5m
bG93X21hc2suc3JjX2lwKTsKKwlpZiAocC0+ZnMuZmxvd19tYXNrLnNyY19wb3J0KQorCQlwcmlu
dGYoIiBzcmMtcG9ydCAweCUwNHgiLCBwLT5mcy5mbG93X21hc2suc3JjX3BvcnQpOworCWlmIChw
LT5mcy5mbG93X21hc2suZHN0X2lwKQorCQlwcmludGYoIiBkc3QtaXAgMHglMDh4IiwgcC0+ZnMu
Zmxvd19tYXNrLmRzdF9pcCk7CisJaWYgKHAtPmZzLmZsb3dfbWFzay5kc3RfcG9ydCkKKwkJcHJp
bnRmKCIgZHN0LXBvcnQgMHglMDR4IiwgcC0+ZnMuZmxvd19tYXNrLmRzdF9wb3J0KTsKKwlpZiAo
cC0+ZnMuZmxvd19tYXNrLmZsb3dfaWQ2KQorCQlwcmludGYoIiBkc3QtcG9ydCAweCUwOHgiLCBw
LT5mcy5mbG93X21hc2suZmxvd19pZDYpOworCX0KKwlpZiAocC0+ZnMuZmxhZ3NfZnMgJiBETl9O
T0VSUk9SKQorCQlwcmludGYoIiBub2Vycm9yIik7CisKKwlwcmludGYoIlxuIik7CQorfQorCitp
bnQKK3BmY3RsX3Nob3dfZHVtbXluZXQoaW50IGRuc29jaywgaW50IG9wdHMpCit7CisgICAgICAg
IHZvaWQgKmRhdGEgPSBOVUxMOworICAgICAgICBpbnQgbmJ5dGVzLCBuYWxsb2MgPSAxMDI0Owor
CisJaWYgKG9wdHMgJiBQRl9PUFRfVkVSQk9TRSkKKwkJdmVyYm9zZSA9IDE7CisJZWxzZSAKKwkJ
dmVyYm9zZSA9IDA7CisJCisJbmJ5dGVzID0gbmFsbG9jOworICAgICAgICB3aGlsZSAobmJ5dGVz
ID49IG5hbGxvYykgeworICAgICAgICAgICAgICAgIG5hbGxvYyA9IG5hbGxvYyAqIDIgKyAyMDA7
CisgICAgICAgICAgICAgICAgbmJ5dGVzID0gbmFsbG9jOworICAgICAgICAgICAgICAgIGlmICgo
ZGF0YSA9IHJlYWxsb2MoZGF0YSwgbmJ5dGVzKSkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVycigxLCAicmVhbGxvYyIpOworICAgICAgICAgICAgICAgIGlmIChnZXRzb2Nrb3B0
KGRuc29jaywgSVBQUk9UT19JUCwgSVBfRFVNTVlORVRfR0VULCBkYXRhLAorICAgICAgICAgICAg
ICAgICAgICAgICAgKHNvY2tsZW5fdCAqKSZuYnl0ZXMpIDwgMCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZnJlZShkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycigxLCAiZ2V0
c29ja29wdChJUF9EVU1NWU5FVF9HRVQpIik7CisJCX0KKyAgICAgICAgfQorCQorICAgICAgICBs
aXN0X3BpcGVzKGRhdGEsIG5ieXRlcyk7CisJCisJcmV0dXJuICgwKTsKKworfQpJbmRleDogY29u
dHJpYi9wZi9wZmN0bC9wZmN0bF9wYXJzZXIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9l
cmkvcmVwby9jb250cmliL3BmL3BmY3RsL3BmY3RsX3BhcnNlci5jLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEuMS4xCmRpZmYgLXUgLXIxLjEuMS4xIHBmY3RsX3BhcnNlci5jCi0tLSBjb250cmli
L3BmL3BmY3RsL3BmY3RsX3BhcnNlci5jCTIxIE9jdCAyMDA3IDEzOjUzOjE1IC0wMDAwCTEuMS4x
LjEKKysrIGNvbnRyaWIvcGYvcGZjdGwvcGZjdGxfcGFyc2VyLmMJMjEgT2N0IDIwMDcgMTk6MDM6
NDkgLTAwMDAKQEAgLTQ4LDYgKzQ4LDkgQEAKICNpbmNsdWRlIDxuZXQvcGZ2YXIuaD4KICNpbmNs
dWRlIDxhcnBhL2luZXQuaD4KIAorI2luY2x1ZGUgPG5ldGluZXQvaXBfZncuaD4KKyNpbmNsdWRl
IDxuZXRpbmV0L2lwX2R1bW15bmV0Lmg+CisKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUg
PHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtOTgxLDYgKzk4NCwxMiBAQAogCX0K
IAlpZiAoci0+bGFiZWxbMF0pCiAJCXByaW50ZigiIGxhYmVsIFwiJXNcIiIsIHItPmxhYmVsKTsK
KwlpZiAoci0+ZG5waXBlICYmIHItPnBkbnBpcGUpCisJICAgICAgIHByaW50ZigiIGRucXVldWUo
JWQsICVkKSIsIHItPmRucGlwZSwgci0+cGRucGlwZSk7CisJZWxzZSBpZiAoci0+ZG5waXBlKQkK
KwkJcHJpbnRmKCIgJXMgJWQiLCAKKwkJCXItPmRudHlwZSA9PSBETl9JU19QSVBFID8gImRucGlw
ZSIgOiAiZG5xdWV1ZSIsCisJCQlyLT5kbnBpcGUpOwogCWlmIChyLT5xbmFtZVswXSAmJiByLT5w
cW5hbWVbMF0pCiAJCXByaW50ZigiIHF1ZXVlKCVzLCAlcykiLCByLT5xbmFtZSwgci0+cHFuYW1l
KTsKIAllbHNlIGlmIChyLT5xbmFtZVswXSkKSW5kZXg6IGNvbnRyaWIvcGYvcGZjdGwvcGZjdGxf
cGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvZXJpL3JlcG8vY29udHJpYi9wZi9w
ZmN0bC9wZmN0bF9wYXJzZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpkaWZmIC11
IC1yMS4xLjEuMSBwZmN0bF9wYXJzZXIuaAotLS0gY29udHJpYi9wZi9wZmN0bC9wZmN0bF9wYXJz
ZXIuaAkyMSBPY3QgMjAwNyAxMzo1MzoxNSAtMDAwMAkxLjEuMS4xCisrKyBjb250cmliL3BmL3Bm
Y3RsL3BmY3RsX3BhcnNlci5oCTIxIE9jdCAyMDA3IDE5OjAzOjQ5IC0wMDAwCkBAIC02Nyw2ICs2
Nyw3IEBACiB9CiAKIHN0cnVjdCBwZnJfYnVmZmVyOwkvKiBmb3J3YXJkIGRlZmluaXRpb24gKi8K
K3N0cnVjdCBkbl9waXBlOwogCiAKIHN0cnVjdCBwZmN0bCB7CkBAIC0yMTcsNiArMjE4LDcgQEAK
IAogaW50CXBmY3RsX2FkZF9ydWxlKHN0cnVjdCBwZmN0bCAqLCBzdHJ1Y3QgcGZfcnVsZSAqLCBj
b25zdCBjaGFyICopOwogaW50CXBmY3RsX2FkZF9hbHRxKHN0cnVjdCBwZmN0bCAqLCBzdHJ1Y3Qg
cGZfYWx0cSAqKTsKK2ludCAJcGZjdGxfYWRkX2R1bW15bmV0KHN0cnVjdCBwZmN0bCAqLCBzdHJ1
Y3QgZG5fcGlwZSAqKTsKIGludAlwZmN0bF9hZGRfcG9vbChzdHJ1Y3QgcGZjdGwgKiwgc3RydWN0
IHBmX3Bvb2wgKiwgc2FfZmFtaWx5X3QpOwogdm9pZAlwZmN0bF9tb3ZlX3Bvb2woc3RydWN0IHBm
X3Bvb2wgKiwgc3RydWN0IHBmX3Bvb2wgKik7CiB2b2lkCXBmY3RsX2NsZWFyX3Bvb2woc3RydWN0
IHBmX3Bvb2wgKik7CkBAIC0yNDQsNiArMjQ2LDggQEAKIGludAlldmFsX3BmcXVldWUoc3RydWN0
IHBmY3RsICosIHN0cnVjdCBwZl9hbHRxICosIHN0cnVjdCBub2RlX3F1ZXVlX2J3ICosCiAJICAg
IHN0cnVjdCBub2RlX3F1ZXVlX29wdCAqKTsKIAordm9pZAlwcmludF9kdW1teW5ldChzdHJ1Y3Qg
ZG5fcGlwZSAqKTsKKwogdm9pZAkgcHJpbnRfYWx0cShjb25zdCBzdHJ1Y3QgcGZfYWx0cSAqLCB1
bnNpZ25lZCwgc3RydWN0IG5vZGVfcXVldWVfYncgKiwKIAkgICAgc3RydWN0IG5vZGVfcXVldWVf
b3B0ICopOwogdm9pZAkgcHJpbnRfcXVldWUoY29uc3Qgc3RydWN0IHBmX2FsdHEgKiwgdW5zaWdu
ZWQsIHN0cnVjdCBub2RlX3F1ZXVlX2J3ICosCkBAIC0yODYsNiArMjkwLDcgQEAKICNkZWZpbmUg
UEZDVExfRkxBR19PUFRJT04JMHgwOAogI2RlZmluZSBQRkNUTF9GTEFHX0FMVFEJCTB4MTAKICNk
ZWZpbmUgUEZDVExfRkxBR19UQUJMRQkweDIwCisjZGVmaW5lCVBGQ1RMX0ZMQUdfRFVNTVlORVQJ
MHg0MAogCiBleHRlcm4gY29uc3Qgc3RydWN0IHBmX3RpbWVvdXQgcGZfdGltZW91dHNbXTsKIApJ
bmRleDogc2Jpbi9wZmN0bC9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9lcmkv
cmVwby9zYmluL3BmY3RsL01ha2VmaWxlLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCmRp
ZmYgLXUgLXIxLjEuMS4xIE1ha2VmaWxlCi0tLSBzYmluL3BmY3RsL01ha2VmaWxlCTIxIE9jdCAy
MDA3IDEzOjU0OjE2IC0wMDAwCTEuMS4xLjEKKysrIHNiaW4vcGZjdGwvTWFrZWZpbGUJMjEgT2N0
IDIwMDcgMTk6MDM6NDkgLTAwMDAKQEAgLTExLDYgKzExLDcgQEAKIFNSQ1MrPSBwZmN0bF9vc2Zw
LmMgcGZjdGxfcmFkaXguYyBwZmN0bF90YWJsZS5jIHBmY3RsX3FzdGF0cy5jCiBTUkNTKz0gcGZj
dGxfb3B0aW1pemUuYwogU1JDUys9IHBmX3J1bGVzZXQuYworU1JDUys9IHBmY3RsX2RuLmMKIAog
Q0ZMQUdTKz0gLVdhbGwgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduby11bmluaXRpYWxpemVkCiBD
RkxBR1MrPSAtV3N0cmljdC1wcm90b3R5cGVzIC1JJHsuQ1VSRElSfS8uLi8uLi9jb250cmliL3Bm
L3BmY3RsCkluZGV4OiBzeXMvY29udHJpYi9wZi9uZXQvcGYuYwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvaG9tZS9lcmkvcmVwby9zeXMvY29udHJpYi9wZi9uZXQvcGYuYyx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xLjEuMQpkaWZmIC11IC1yMS4xLjEuMSBwZi5jCi0tLSBzeXMvY29udHJpYi9wZi9u
ZXQvcGYuYwkyMSBPY3QgMjAwNyAxMzo1NDo1NiAtMDAwMAkxLjEuMS4xCisrKyBzeXMvY29udHJp
Yi9wZi9uZXQvcGYuYwkyMSBPY3QgMjAwNyAxOTowMzo0OSAtMDAwMApAQCAtNjcxOCw2ICs2NzE5
LDcgQEAKIAlpbnQJCQkgb2ZmLCBkaXJuZHgsIHBxaWQgPSAwOwogCiAjaWZkZWYgX19GcmVlQlNE
X18KKwlzdHJ1Y3QgaXBfZndfYXJncwkgZG5mbG93OwogCVBGX0xPQ0soKTsKICNlbmRpZgogCWlm
ICghcGZfc3RhdHVzLnJ1bm5pbmcpCkBAIC02NzQ0LDYgKzY3NDYsNyBAQAogCQlQRl9VTkxPQ0so
KTsKIAkJcmV0dXJuIChQRl9QQVNTKTsKIAl9CisJCiAjZWxzZQogCWlmIChwZC5wZl9tdGFnLT5m
bGFncyAmIFBGX1RBR19HRU5FUkFURUQpCiAJCXJldHVybiAoUEZfUEFTUyk7CkBAIC02ODI3LDYg
KzY4MzAsMTMgQEAKIAkJc3RydWN0IHRjcGhkcgl0aDsKIAogCQlwZC5oZHIudGNwID0gJnRoOwor
CisjaWZkZWYgX19GcmVlQlNEX18KKyAgICAgICAgICAgICAgICBkbmZsb3cuZl9pZC5mbGFncyA9
IHRoLnRoX2ZsYWdzOworICAgICAgICAgICAgICAgIGRuZmxvdy5mX2lkLmRzdF9wb3J0ID0gdGgu
dGhfZHBvcnQ7CisgICAgICAgICAgICAgICAgZG5mbG93LmZfaWQuc3JjX3BvcnQgPSB0aC50aF9z
cG9ydDsKKyNlbmRpZgorCiAJCWlmICghcGZfcHVsbF9oZHIobSwgb2ZmLCAmdGgsIHNpemVvZih0
aCksCiAJCSAgICAmYWN0aW9uLCAmcmVhc29uLCBBRl9JTkVUKSkgewogCQkJbG9nID0gYWN0aW9u
ICE9IFBGX1BBU1M7CkBAIC02ODY4LDYgKzY4NzgsMTIgQEAKIAkJc3RydWN0IHVkcGhkcgl1aDsK
IAogCQlwZC5oZHIudWRwID0gJnVoOworCisjaWZkZWYgX19GcmVlQlNEX18KKyAgICAgICAgICAg
ICAgICBkbmZsb3cuZl9pZC5kc3RfcG9ydCA9IHVoLnVoX2Rwb3J0OworICAgICAgICAgICAgICAg
IGRuZmxvdy5mX2lkLnNyY19wb3J0ID0gdWgudWhfc3BvcnQ7CisjZW5kaWYKKwogCQlpZiAoIXBm
X3B1bGxfaGRyKG0sIG9mZiwgJnVoLCBzaXplb2YodWgpLAogCQkgICAgJmFjdGlvbiwgJnJlYXNv
biwgQUZfSU5FVCkpIHsKIAkJCWxvZyA9IGFjdGlvbiAhPSBQRl9QQVNTOwpAQCAtNjkwOSw2ICs2
OTI1LDcgQEAKIAkJc3RydWN0IGljbXAJaWg7CiAKIAkJcGQuaGRyLmljbXAgPSAmaWg7CisKIAkJ
aWYgKCFwZl9wdWxsX2hkcihtLCBvZmYsICZpaCwgSUNNUF9NSU5MRU4sCiAJCSAgICAmYWN0aW9u
LCAmcmVhc29uLCBBRl9JTkVUKSkgewogCQkJbG9nID0gYWN0aW9uICE9IFBGX1BBU1M7CkBAIC03
MDgzLDYgKzcxMDAsMzMgQEAKIAkJcGZfcm91dGUobTAsIHIsIGRpciwgaWZwLCBzLCAmcGQpOwog
CiAjaWZkZWYgX19GcmVlQlNEX18KKwlpZiAoci0+ZG5waXBlICYmIGlwX2RuX2lvX3B0ciAhPSBO
VUxMKSB7CisJCQlzdHJ1Y3QgaXBfZncgZHVtbXlydWxlOworCisgICAgICAJCQlkdW1teXJ1bGUu
Y21kLT5vcGNvZGUgPSAKKwkJCQlyLT5kbnR5cGUgPT0gRE5fSVNfUElQRSA/IE9fUElQRSA6IE9f
UVVFVUU7CisJCQlkdW1teXJ1bGUuYWN0X29mcyA9IDA7CisJCQlkdW1teXJ1bGUuY21kX2xlbiA9
IDE7CisJCQlpZiAoYWN0aW9uID09IFBGX1BBU1MgJiYgKAorCQkJCXBxaWQgfHwgKHBkLnRvcyAm
IElQVE9TX0xPV0RFTEFZKSkpIAorCQkJCWRuZmxvdy5jb29raWUgPSByLT5wZG5waXBlOworCQkJ
ZWxzZSAKKwkJCQlkbmZsb3cuY29va2llID0gci0+ZG5waXBlOworICAgICAgICAgICAgICAgIAlk
bmZsb3cucnVsZSA9ICZkdW1teXJ1bGU7CisgICAgICAgICAgICAgICAgCWRuZmxvdy5mX2lkLmFk
ZHJfdHlwZSA9IDQ7IC8qIElQdjQgdHlwZSAqLworICAgICAgICAgICAgICAgIAlkbmZsb3cuZl9p
ZC5wcm90byA9IHBkLnByb3RvOworCQkJUEZfVU5MT0NLKCk7CisJCQkKKwkJCWggPSBtdG9kKCpt
MCwgc3RydWN0IGlwICopOworCQkJTlRPSFMoaC0+aXBfbGVuKTsKKwkJCU5UT0hTKGgtPmlwX29m
Zik7CisJCQlpcF9kbl9pb19wdHIoKm0wLCAKKwkJCQlkaXIgPT0gUEZfSU4gPyBETl9UT19JUF9J
TiA6IEROX1RPX0lQX09VVCwgCisJCQkJJmRuZmxvdyk7CisJCQkqbTAgPSBOVUxMOworCQkJcmV0
dXJuIChhY3Rpb24pOworCQl9CisJCiAJUEZfVU5MT0NLKCk7CiAjZW5kaWYKIApAQCAtNzExMSw2
ICs3MTU1LDcgQEAKIAlpbnQJCQkgb2ZmLCB0ZXJtaW5hbCA9IDAsIGRpcm5keCwgcmhfY250ID0g
MDsKIAogI2lmZGVmIF9fRnJlZUJTRF9fCisJc3RydWN0IGlwX2Z3X2FyZ3MJIGRuZmxvdzsKIAlQ
Rl9MT0NLKCk7CiAjZW5kaWYKIApAQCAtNzI4Niw2ICs3MzMxLDEyIEBACiAJCXN0cnVjdCB0Y3Bo
ZHIJdGg7CiAKIAkJcGQuaGRyLnRjcCA9ICZ0aDsKKyNpZmRlZiBfX0ZyZWVCU0RfXworICAgICAg
ICAgICAgICAgIGRuZmxvdy5mX2lkLmZsYWdzID0gdGgudGhfZmxhZ3M7CisgICAgICAgICAgICAg
ICAgZG5mbG93LmZfaWQuZHN0X3BvcnQgPSB0aC50aF9kcG9ydDsKKyAgICAgICAgICAgICAgICBk
bmZsb3cuZl9pZC5zcmNfcG9ydCA9IHRoLnRoX3Nwb3J0OworI2VuZGlmCisKIAkJaWYgKCFwZl9w
dWxsX2hkcihtLCBvZmYsICZ0aCwgc2l6ZW9mKHRoKSwKIAkJICAgICZhY3Rpb24sICZyZWFzb24s
IEFGX0lORVQ2KSkgewogCQkJbG9nID0gYWN0aW9uICE9IFBGX1BBU1M7CkBAIC03MzI2LDYgKzcz
NzcsMTEgQEAKIAkJc3RydWN0IHVkcGhkcgl1aDsKIAogCQlwZC5oZHIudWRwID0gJnVoOworI2lm
ZGVmIF9fRnJlZUJTRF9fCisgICAgICAgICAgICAgICAgZG5mbG93LmZfaWQuZHN0X3BvcnQgPSB1
aC51aF9kcG9ydDsKKyAgICAgICAgICAgICAgICBkbmZsb3cuZl9pZC5zcmNfcG9ydCA9IHVoLnVo
X3Nwb3J0OworI2VuZGlmCisKIAkJaWYgKCFwZl9wdWxsX2hkcihtLCBvZmYsICZ1aCwgc2l6ZW9m
KHVoKSwKIAkJICAgICZhY3Rpb24sICZyZWFzb24sIEFGX0lORVQ2KSkgewogCQkJbG9nID0gYWN0
aW9uICE9IFBGX1BBU1M7CkBAIC03NTM5LDggKzc1OTUsMzMgQEAKIAkJcGZfcm91dGU2KG0wLCBy
LCBkaXIsIGlmcCwgcywgJnBkKTsKIAogI2lmZGVmIF9fRnJlZUJTRF9fCisJaWYgKHItPmRucGlw
ZSAmJiBpcF9kbl9pb19wdHIgIT0gTlVMTCkgeworCQkJc3RydWN0IGlwX2Z3IGR1bW15cnVsZTsK
KworICAgICAgCQkJZHVtbXlydWxlLmNtZC0+b3Bjb2RlID0gCisJCQkJci0+ZG50eXBlID09IERO
X0lTX1BJUEUgPyBPX1BJUEUgOiBPX1FVRVVFOworCQkJZHVtbXlydWxlLmFjdF9vZnMgPSAwOwor
CQkJZHVtbXlydWxlLmNtZF9sZW4gPSAxOworCQkJaWYgKGFjdGlvbiA9PSBQRl9QQVNTICYmICgK
KwkJCQlwZC50b3MgJiBJUFRPU19MT1dERUxBWSkpIAorCQkJCWRuZmxvdy5jb29raWUgPSByLT5w
ZG5waXBlOworCQkJZWxzZSAKKwkJCQlkbmZsb3cuY29va2llID0gci0+ZG5waXBlOworICAgICAg
ICAgICAgICAgIAlkbmZsb3cucnVsZSA9ICZkdW1teXJ1bGU7CisgICAgICAgICAgICAgICAgCWRu
Zmxvdy5mX2lkLmFkZHJfdHlwZSA9IDY7IC8qIElQdjQgdHlwZSAqLworICAgICAgICAgICAgICAg
IAlkbmZsb3cuZl9pZC5wcm90byA9IHBkLnByb3RvOworCQkJUEZfVU5MT0NLKCk7CisJCQkKKwkJ
CWlwX2RuX2lvX3B0cigqbTAsIAorCQkJCWRpciA9PSBQRl9JTiA/IEROX1RPX0lQNl9JTiA6IERO
X1RPX0lQNl9PVVQsIAorCQkJCSZkbmZsb3cpOworCQkJKm0wID0gTlVMTDsKKwkJCXJldHVybiAo
YWN0aW9uKTsKKwkJfQorCQogCVBGX1VOTE9DSygpOwogI2VuZGlmCisKIAlyZXR1cm4gKGFjdGlv
bik7CiB9CiAjZW5kaWYgLyogSU5FVDYgKi8KSW5kZXg6IHN5cy9jb250cmliL3BmL25ldC9wZl9p
b2N0bC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2VyaS9yZXBvL3N5cy9jb250cmliL3Bm
L25ldC9wZl9pb2N0bC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCmRpZmYgLXUgLXIx
LjEuMS4xIHBmX2lvY3RsLmMKLS0tIHN5cy9jb250cmliL3BmL25ldC9wZl9pb2N0bC5jCTIxIE9j
dCAyMDA3IDEzOjU0OjU2IC0wMDAwCTEuMS4xLjEKKysrIHN5cy9jb250cmliL3BmL25ldC9wZl9p
b2N0bC5jCTIxIE9jdCAyMDA3IDE5OjAzOjQ5IC0wMDAwCkBAIC0zNTIyLDggKzM1MjIsMTYgQEAK
IAkgKiBieXRlIG9yZGVyLiAKIAkgKi8KIAlzdHJ1Y3QgaXAgKmggPSBOVUxMOworCXN0cnVjdCBt
X3RhZyAqZG5fdGFnOwogCWludCBjaGs7CiAKKyAgICAgICAgZG5fdGFnID0gbV90YWdfZmluZCgq
bSwgUEFDS0VUX1RBR19EVU1NWU5FVCwgTlVMTCk7CisJaWYgKGRuX3RhZyAhPSBOVUxMICYmIAor
CQkoKHN0cnVjdCBkbl9wa3RfdGFnICopKGRuX3RhZysxKSktPmRuX2RpciA9PSBETl9UT19JUF9J
TikgeworCQltX3RhZ19kZWxldGUoKm0sIGRuX3RhZyk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IChQRl9QQVNTKTsKKyAgICAgICAgfQorCiAJaWYgKCgqbSktPm1fcGt0aGRyLmxlbiA+PSAoaW50
KXNpemVvZihzdHJ1Y3QgaXApKSB7CiAJCS8qIGlmIG1fcGt0aGRyLmxlbiBpcyBsZXNzIHRoYW4g
aXAgaGVhZGVyLCBwZiB3aWxsIGhhbmRsZS4gKi8KIAkJaCA9IG10b2QoKm0sIHN0cnVjdCBpcCAq
KTsKQEAgLTM1NTcsNiArMzU2NSw3IEBACiAJICogYnl0ZSBvcmRlci4gCiAJICovCiAJc3RydWN0
IGlwICpoID0gTlVMTDsKKwlzdHJ1Y3QgbV90YWcgKmRuX3RhZzsKIAlpbnQgY2hrOwogCiAJLyog
V2UgbmVlZCBhIHByb3BlciBDU1VNIGJlZm9yIHdlIHN0YXJ0IChzLiBPcGVuQlNEIGlwX291dHB1
dCkgKi8KQEAgLTM1NjQsNiArMzU3MywxNCBAQAogCQlpbl9kZWxheWVkX2Nrc3VtKCptKTsKIAkJ
KCptKS0+bV9wa3RoZHIuY3N1bV9mbGFncyAmPSB+Q1NVTV9ERUxBWV9EQVRBOwogCX0KKwkKKwlk
bl90YWcgPSBtX3RhZ19maW5kKCptLCBQQUNLRVRfVEFHX0RVTU1ZTkVULCBOVUxMKTsKKwlpZiAo
ZG5fdGFnICE9IE5VTEwgJiYgCisJCSgoc3RydWN0IGRuX3BrdF90YWcgKikoZG5fdGFnKzEpKS0+
ZG5fZGlyID09IEROX1RPX0lQX09VVCkgeworCQltX3RhZ19kZWxldGUoKm0sIGRuX3RhZyk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIChQRl9QQVNTKTsKKyAgICAgICAgfQorCQogCWlmICgoKm0p
LT5tX3BrdGhkci5sZW4gPj0gKGludClzaXplb2YoKmgpKSB7CiAJCS8qIGlmIG1fcGt0aGRyLmxl
biBpcyBsZXNzIHRoYW4gaXAgaGVhZGVyLCBwZiB3aWxsIGhhbmRsZS4gKi8KIAkJaCA9IG10b2Qo
Km0sIHN0cnVjdCBpcCAqKTsKQEAgLTM1OTMsNiArMzYxMCwxNCBAQAogCSAqIElQdjYgaXMgbm90
IGFmZmVjdGVkIGJ5IGlwX2xlbi9pcF9vZmYgYnl0ZSBvcmRlciBjaGFuZ2VzLgogCSAqLwogCWlu
dCBjaGs7CisJc3RydWN0IG1fdGFnICpkbl90YWc7CisJCisJZG5fdGFnID0gbV90YWdfZmluZCgq
bSwgUEFDS0VUX1RBR19EVU1NWU5FVCwgTlVMTCk7CisJaWYgKGRuX3RhZyAhPSBOVUxMICYmIAor
CQkoKHN0cnVjdCBkbl9wa3RfdGFnICopKGRuX3RhZysxKSktPmRuX2RpciA9PSBETl9UT19JUDZf
SU4pIHsKKwkJbV90YWdfZGVsZXRlKCptLCBkbl90YWcpOworICAgICAgICAgICAgICAgIHJldHVy
biAoUEZfUEFTUyk7CisgICAgICAgIH0KIAogCS8qCiAJICogSW4gY2FzZSBvZiBsb29wYmFjayB0
cmFmZmljIElQdjYgdXNlcyB0aGUgcmVhbCBpbnRlcmZhY2UgaW4KQEAgLTM2MTYsNiArMzY0MSwx
NCBAQAogCSAqIElQdjYgZG9lcyBub3QgYWZmZWN0ZWQgaXBfbGVuL2lwX29mZiBieXRlIG9yZGVy
IGNoYW5nZXMuCiAJICovCiAJaW50IGNoazsKKwlzdHJ1Y3QgbV90YWcgKmRuX3RhZzsKKworCWRu
X3RhZyA9IG1fdGFnX2ZpbmQoKm0sIFBBQ0tFVF9UQUdfRFVNTVlORVQsIE5VTEwpOworCWlmIChk
bl90YWcgIT0gTlVMTCAmJiAKKwkJKChzdHJ1Y3QgZG5fcGt0X3RhZyAqKShkbl90YWcrMSkpLT5k
bl9kaXIgPT0gRE5fVE9fSVA2X09VVCkgeworCQltX3RhZ19kZWxldGUoKm0sIGRuX3RhZyk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIChQRl9QQVNTKTsKKyAgICAgICAgfQogCiAJLyogV2UgbmVl
ZCBhIHByb3BlciBDU1VNIGJlZm9yIHdlIHN0YXJ0IChzLiBPcGVuQlNEIGlwX291dHB1dCkgKi8K
IAlpZiAoKCptKS0+bV9wa3RoZHIuY3N1bV9mbGFncyAmIENTVU1fREVMQVlfREFUQSkgewpJbmRl
eDogc3lzL2NvbnRyaWIvcGYvbmV0L3BmdmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUv
ZXJpL3JlcG8vc3lzL2NvbnRyaWIvcGYvbmV0L3BmdmFyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMS4xLjEKZGlmZiAtdSAtcjEuMS4xLjEgcGZ2YXIuaAotLS0gc3lzL2NvbnRyaWIvcGYvbmV0
L3BmdmFyLmgJMjEgT2N0IDIwMDcgMTM6NTQ6NTYgLTAwMDAJMS4xLjEuMQorKysgc3lzL2NvbnRy
aWIvcGYvbmV0L3BmdmFyLmgJMjEgT2N0IDIwMDcgMTk6MDM6NDkgLTAwMDAKQEAgLTU3LDYgKzU3
LDkgQEAKIAogI2lmZGVmIF9fRnJlZUJTRF9fCiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorCisj
aW5jbHVkZSA8bmV0aW5ldC9pcF9mdy5oPgorI2luY2x1ZGUgPG5ldGluZXQvaXBfZHVtbXluZXQu
aD4KICNlbmRpZgogCiAjaW5jbHVkZSA8bmV0aW5ldC90Y3BfZnNtLmg+CkBAIC02MzIsNiArNjM1
LDkgQEAKIAl9CQkJIG1heF9zcmNfY29ubl9yYXRlOwogCXVfaW50MzJfdAkJIHFpZDsKIAl1X2lu
dDMyX3QJCSBwcWlkOworCXVfaW50MzJfdAkJIGRucGlwZTsKKwl1X2ludDMyX3QJCSBwZG5waXBl
OworCXVfaW50MzJfdAkJIGRudHlwZTsKIAl1X2ludDMyX3QJCSBydF9saXN0aWQ7CiAJdV9pbnQz
Ml90CQkgbnI7CiAJdV9pbnQzMl90CQkgcHJvYjsKSW5kZXg6IHN5cy9uZXRpbmV0L2lwX2R1bW15
bmV0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvZXJpL3JlcG8vc3lzL25ldGluZXQvaXBf
ZHVtbXluZXQuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpkaWZmIC11IC1yMS4xLjEu
MSBpcF9kdW1teW5ldC5jCi0tLSBzeXMvbmV0aW5ldC9pcF9kdW1teW5ldC5jCTIxIE9jdCAyMDA3
IDEzOjU1OjM2IC0wMDAwCTEuMS4xLjEKKysrIHN5cy9uZXRpbmV0L2lwX2R1bW15bmV0LmMJMjEg
T2N0IDIwMDcgMTk6MDM6NDkgLTAwMDAKQEAgLTg0LDYgKzg0LDkgQEAKICNpbmNsdWRlIDxuZXRp
bmV0L2lwNi5oPiAgICAgICAvKiBmb3IgaXA2X2lucHV0LCBpcDZfb3V0cHV0IHByb3RvdHlwZXMg
Ki8KICNpbmNsdWRlIDxuZXRpbmV0Ni9pcDZfdmFyLmg+CiAKKworc3RhdGljIHN0cnVjdCBpcF9m
dyBkZWZhdWx0X3J1bGUgOworCiAvKgogICogV2Uga2VlcCBhIHByaXZhdGUgdmFyaWFibGUgZm9y
IHRoZSBzaW11bGF0aW9uIHRpbWUsIGJ1dCB3ZSBjb3VsZAogICogcHJvYmFibHkgdXNlIGFuIGV4
aXN0aW5nIG9uZSAoInNvZnR0aWNrcyIgaW4gc3lzL2tlcm4va2Vybl90aW1lb3V0LmMpCkBAIC0y
MTQsNyArMjE3LDYgQEAKIHN0YXRpYyB2b2lkIGR1bW15bmV0X3NlbmQoc3RydWN0IG1idWYgKik7
CiB2b2lkIGR1bW15bmV0X2RyYWluKHZvaWQpOwogc3RhdGljIGlwX2RuX2lvX3QgZHVtbXluZXRf
aW87Ci1zdGF0aWMgdm9pZCBkbl9ydWxlX2RlbGV0ZSh2b2lkICopOwogCiAvKgogICogSGVhcCBt
YW5hZ2VtZW50IGZ1bmN0aW9ucy4KQEAgLTE0OTAsNyArMTQ5Miw2IEBACiAJRFVNTVlORVRfVU5M
T0NLKCk7CiB9CiAKLWV4dGVybiBzdHJ1Y3QgaXBfZncgKmlwX2Z3X2RlZmF1bHRfcnVsZSA7CiBz
dGF0aWMgdm9pZAogZG5fcnVsZV9kZWxldGVfZnMoc3RydWN0IGRuX2Zsb3dfc2V0ICpmcywgdm9p
ZCAqcikKIHsKQEAgLTE1MDMsNyArMTUwNCw3IEBACiAJICAgIGZvciAobSA9IHEtPmhlYWQgOyBt
IDsgbSA9IG0tPm1fbmV4dHBrdCApIHsKIAkJc3RydWN0IGRuX3BrdF90YWcgKnBrdCA9IGRuX3Rh
Z19nZXQobSkgOwogCQlpZiAocGt0LT5ydWxlID09IHIpCi0JCSAgICBwa3QtPnJ1bGUgPSBpcF9m
d19kZWZhdWx0X3J1bGUgOworCQkgICAgcGt0LT5ydWxlID0gJmRlZmF1bHRfcnVsZSA7CiAJICAg
IH0KIH0KIC8qCkBAIC0xNTM2LDcgKzE1MzcsNyBAQAogCQlmb3IgKG0gPSBwaXBlLT5oZWFkIDsg
bSA7IG0gPSBtLT5tX25leHRwa3QgKSB7CiAJCQlwa3QgPSBkbl90YWdfZ2V0KG0pOwogCQkJaWYg
KHBrdC0+cnVsZSA9PSByKQotCQkJCXBrdC0+cnVsZSA9IGlwX2Z3X2RlZmF1bHRfcnVsZTsKKwkJ
CQlwa3QtPnJ1bGUgPSAmZGVmYXVsdF9ydWxlOwogCQl9CiAJfQogICAgIERVTU1ZTkVUX1VOTE9D
SygpOwpAQCAtMjEyOSw3ICsyMTMwLDIwIEBACiAKIAlpcF9kbl9jdGxfcHRyID0gaXBfZG5fY3Rs
OwogCWlwX2RuX2lvX3B0ciA9IGR1bW15bmV0X2lvOwotCWlwX2RuX3J1bGVkZWxfcHRyID0gZG5f
cnVsZV9kZWxldGU7CisKKwliemVybygmZGVmYXVsdF9ydWxlLCBzaXplb2YgZGVmYXVsdF9ydWxl
KTsKKworICAgICAgICBkZWZhdWx0X3J1bGUuYWN0X29mcyA9IDA7CisgICAgICAgIGRlZmF1bHRf
cnVsZS5ydWxlbnVtID0gSVBGV19ERUZBVUxUX1JVTEU7CisgICAgICAgIGRlZmF1bHRfcnVsZS5j
bWRfbGVuID0gMTsKKyAgICAgICAgZGVmYXVsdF9ydWxlLnNldCA9IFJFU1ZEX1NFVDsKKworICAg
ICAgICBkZWZhdWx0X3J1bGUuY21kWzBdLmxlbiA9IDE7CisgICAgICAgIGRlZmF1bHRfcnVsZS5j
bWRbMF0ub3Bjb2RlID0KKyNpZmRlZiBJUEZJUkVXQUxMX0RFRkFVTFRfVE9fQUNDRVBUCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPyBPX0FDQ0VQVCA6CisjZW5kaWYKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgT19ERU5ZOwogCiAJVEFTS19JTklUKCZkbl90YXNr
LCAwLCBkdW1teW5ldF90YXNrLCBOVUxMKTsKIAlkbl90cSA9IHRhc2txdWV1ZV9jcmVhdGVfZmFz
dCgiZHVtbXluZXQiLCBNX05PV0FJVCwKQEAgLTIxNDksNyArMjE2Myw2IEBACiB7CiAJaXBfZG5f
Y3RsX3B0ciA9IE5VTEw7CiAJaXBfZG5faW9fcHRyID0gTlVMTDsKLQlpcF9kbl9ydWxlZGVsX3B0
ciA9IE5VTEw7CiAKIAlEVU1NWU5FVF9MT0NLKCk7CiAJY2FsbG91dF9zdG9wKCZkbl90aW1lb3V0
KTsKQEAgLTIxOTcsNSArMjIxMCw0IEBACiAJTlVMTAogfTsKIERFQ0xBUkVfTU9EVUxFKGR1bW15
bmV0LCBkdW1teW5ldF9tb2QsIFNJX1NVQl9QUk9UT19JRkFUVEFDSERPTUFJTiwgU0lfT1JERVJf
QU5ZKTsKLU1PRFVMRV9ERVBFTkQoZHVtbXluZXQsIGlwZncsIDIsIDIsIDIpOwogTU9EVUxFX1ZF
UlNJT04oZHVtbXluZXQsIDEpOwpJbmRleDogc3lzL25ldGluZXQvaXBfZHVtbXluZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvaG9tZS9lcmkvcmVwby9zeXMvbmV0aW5ldC9pcF9kdW1teW5ldC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCmRpZmYgLXUgLXIxLjEuMS4xIGlwX2R1bW15
bmV0LmgKLS0tIHN5cy9uZXRpbmV0L2lwX2R1bW15bmV0LmgJMjEgT2N0IDIwMDcgMTM6NTU6MzYg
LTAwMDAJMS4xLjEuMQorKysgc3lzL25ldGluZXQvaXBfZHVtbXluZXQuaAkyMSBPY3QgMjAwNyAx
OTowMzo0OSAtMDAwMApAQCAtMzQyLDEzICszNDIsMTMgQEAKIAogI2lmZGVmIF9LRVJORUwKIHR5
cGVkZWYJaW50IGlwX2RuX2N0bF90KHN0cnVjdCBzb2Nrb3B0ICopOyAvKiByYXdfaXAuYyAqLwot
dHlwZWRlZgl2b2lkIGlwX2RuX3J1bGVkZWxfdCh2b2lkICopOyAvKiBpcF9mdy5jICovCiB0eXBl
ZGVmCWludCBpcF9kbl9pb190KHN0cnVjdCBtYnVmICptLCBpbnQgZGlyLCBzdHJ1Y3QgaXBfZndf
YXJncyAqZndhKTsKIGV4dGVybglpcF9kbl9jdGxfdCAqaXBfZG5fY3RsX3B0cjsKLWV4dGVybglp
cF9kbl9ydWxlZGVsX3QgKmlwX2RuX3J1bGVkZWxfcHRyOwogZXh0ZXJuCWlwX2RuX2lvX3QgKmlw
X2RuX2lvX3B0cjsKICNkZWZpbmUJRFVNTVlORVRfTE9BREVECShpcF9kbl9pb19wdHIgIT0gTlVM
TCkKIAordm9pZCBkbl9ydWxlX2RlbGV0ZSh2b2lkICopOworCiAvKgogICogUmV0dXJuIHRoZSBJ
UEZXIHJ1bGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkdW1teW5ldCB0YWc7IGlmIGFueS4KICAqIE1h
a2Ugc3VyZSB0aGF0IHRoZSBkdW1teW5ldCB0YWcgaXMgbm90IHJldXNlZCBieSBsb3dlciBsYXll
cnMuCkluZGV4OiBzeXMvbmV0aW5ldC9pcF9mdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21l
L2VyaS9yZXBvL3N5cy9uZXRpbmV0L2lwX2Z3LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4x
LjEKZGlmZiAtdSAtcjEuMS4xLjEgaXBfZncuaAotLS0gc3lzL25ldGluZXQvaXBfZncuaAkyMSBP
Y3QgMjAwNyAxMzo1NTozNiAtMDAwMAkxLjEuMS4xCisrKyBzeXMvbmV0aW5ldC9pcF9mdy5oCTIx
IE9jdCAyMDA3IDE5OjAzOjQ5IC0wMDAwCkBAIC02MTUsNSArNjE1LDcgQEAKIGV4dGVybglpcF9m
d19jaGtfdAkqaXBfZndfY2hrX3B0cjsKICNkZWZpbmUJSVBGV19MT0FERUQJKGlwX2Z3X2Noa19w
dHIgIT0gTlVMTCkKIAorI2RlZmluZSBJUEZXX0RFRkFVTFRfUlVMRSAgICAgICA2NTUzNQorCiAj
ZW5kaWYgLyogX0tFUk5FTCAqLwogI2VuZGlmIC8qIF9JUEZXMl9IICovCkluZGV4OiBzeXMvbmV0
aW5ldC9pcF9mdzIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9lcmkvcmVwby9zeXMvbmV0
aW5ldC9pcF9mdzIuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpkaWZmIC11IC1yMS4x
LjEuMSBpcF9mdzIuYwotLS0gc3lzL25ldGluZXQvaXBfZncyLmMJMjEgT2N0IDIwMDcgMTM6NTU6
MzYgLTAwMDAJMS4xLjEuMQorKysgc3lzL25ldGluZXQvaXBfZncyLmMJMjEgT2N0IDIwMDcgMTk6
MDM6NDkgLTAwMDAKQEAgLTEyMiw3ICsxMjIsNiBAQAogCiBzdGF0aWMgc3RydWN0IGNhbGxvdXQg
aXBmd190aW1lb3V0Owogc3RhdGljIHVtYV96b25lX3QgaXBmd19keW5fcnVsZV96b25lOwotI2Rl
ZmluZQlJUEZXX0RFRkFVTFRfUlVMRQk2NTUzNQogCiAvKgogICogRGF0YSBzdHJ1Y3R1cmUgdG8g
Y2FjaGUgb3VyIHVjcmVkIHJlbGF0ZWQKQEAgLTM4MjgsNyArMzgyNyw3IEBACiAJd2hpbGUgKChy
dWxlID0gaGVhZCkgIT0gTlVMTCkgewogCQloZWFkID0gaGVhZC0+bmV4dDsKIAkJaWYgKERVTU1Z
TkVUX0xPQURFRCkKLQkJCWlwX2RuX3J1bGVkZWxfcHRyKHJ1bGUpOworCQkJZG5fcnVsZV9kZWxl
dGUocnVsZSk7CiAJCWZyZWUocnVsZSwgTV9JUEZXKTsKIAl9CiB9CkluZGV4OiBzeXMvbmV0aW5l
dC9pcF9md19wZmlsLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvZXJpL3JlcG8vc3lzL25l
dGluZXQvaXBfZndfcGZpbC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCmRpZmYgLXUg
LXIxLjEuMS4xIGlwX2Z3X3BmaWwuYwotLS0gc3lzL25ldGluZXQvaXBfZndfcGZpbC5jCTIxIE9j
dCAyMDA3IDEzOjU1OjM2IC0wMDAwCTEuMS4xLjEKKysrIHN5cy9uZXRpbmV0L2lwX2Z3X3BmaWwu
YwkyMSBPY3QgMjAwNyAxOTowMzo0OSAtMDAwMApAQCAtNzIsOSArNzIsNiBAQAogCiBpbnQgaXBm
d19jaGdfaG9vayhTWVNDVExfSEFORExFUl9BUkdTKTsKIAotLyogRHVtbXluZXQgaG9va3MuICov
Ci1pcF9kbl9ydWxlZGVsX3QJKmlwX2RuX3J1bGVkZWxfcHRyID0gTlVMTDsKLQogLyogRGl2ZXJ0
IGhvb2tzLiAqLwogaXBfZGl2ZXJ0X3BhY2tldF90ICppcF9kaXZlcnRfcHRyID0gTlVMTDsKIAo=

------=_Part_14170_30775547.1193591593935--



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