Subject: bluetooth link mode
To: None <tech-kern@netbsd.org>
From: Iain Hibbert <plunky@rya-online.net>
List: tech-kern
Date: 04/13/2007 01:27:06
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--0-499043967-1176424026=:461
Content-Type: TEXT/PLAIN; charset=US-ASCII

Hi,
   I've been working on fine graining the security of bluetooth radio
links recently, by adding 'service level' security for L2CAP and RFCOMM,
following the Linux (BlueZ) API. (patch attached)

    - L2CAP or RFCOMM connections can require the baseband radio link
    mode be any of:
	authenticated (devices are paired)
	encrypted (implies authentication)
	secured (encryption, plus generate new link key)

    - for sockets, the mode is set using setsockopt(2) and the socket
    connection will be aborted if the mode change fails.

    - mode settings will be applied during connection establishment, and
    for safety, we enter a wait state and will only proceed when the mode
    settings are successfuly set.

    - It is possible to change the mode on already open connections, but
    not possible to guarantee that data already queued (from either end)
    will not be delivered. (this is a feature, not a bug)

    - bthidev(4) and rfcomm_sppd(1) support "auth", "encrypt" and
    "secure" options

    - btdevctl(8) by default enables "auth" for HIDs, and "encrypt" for
    keyboards (which are required to support it)

What this means in practice is that it will now be possible to allow some
services to proceed unauthenticated (Service Discovery, Object Push) while
restricting access to more sensitive services (File Transfer, Dial Up
Networking), as most cellphones do.

Linux (last time I looked) can only set the mode for incoming connections
before the connection is made, but I've extended this to include outbound
connections, and since you can set the mode at any time, it is possible
for applications to regenerate the link key at intervals, to make it
harder to decrypt any captured packets.

It is of course still possible to set the device itself to require
authentication or encryption, as per 'btconfig <dev> auth encrypt'.

if no adverse reactions, I will commit this next weekend (~21st)

iain
--0-499043967-1176424026=:461
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=lm.10.patch
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.NEB.4.64.0704130127060.461@localhost.>
Content-Description: bluetooth link mode
Content-Disposition: attachment; filename=lm.10.patch

SW5kZXg6IHNoYXJlL21hbi9tYW40L2JsdWV0b290aC40DQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3NoYXJlL21h
bi9tYW40L2JsdWV0b290aC40LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS40
DQpkaWZmIC11IC1yMS40IGJsdWV0b290aC40DQotLS0gc2hhcmUvbWFuL21h
bjQvYmx1ZXRvb3RoLjQJMiBTZXAgMjAwNiAyMzo1Mjo0NSAtMDAwMAkxLjQN
CisrKyBzaGFyZS9tYW4vbWFuNC9ibHVldG9vdGguNAkxMyBBcHIgMjAwNyAw
MDowNzoxMiAtMDAwMA0KQEAgLTMwLDcgKzMwLDcgQEANCiAuXCIgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuDQogLlwiDQogLlwiDQotLkRkIEF1Z3Vz
dCAyNywgMjAwNg0KKy5EZCBBcHJpbCAxMCwgMjAwNw0KIC5EdCBCTFVFVE9P
VEggNA0KIC5Pcw0KIC5TaCBOQU1FDQpAQCAtMTQyLDYgKzE0MiwzMCBAQA0K
IEluY29taW5nIE1UVQ0KIC5JdCBEdiBTT19MMkNBUF9PTVRVIE9wIEFyIHVp
bnQxNl90DQogT3V0Z29pbmcgTVRVIChyZWFkLW9ubHkpDQorLkl0IER2IFNP
X0wyQ0FQX0xNIE9wIEFyIGludA0KK0xpbmsgTW9kZS4NCitUaGUgZm9sbG93
aW5nIGJpdHMgbWF5IGJlIHNldDoNCisuUHANCisuQmwgLXRhZyAtY29tcGFj
dCAtd2lkdGggIi5EdiBMMkNBUF9MTV9FTkNSWVBUIg0KKy5JdCBEdiBMMkNB
UF9MTV9BVVRIDQorUmVxdWVzdCBhdXRoZW50aWNhdGlvbg0KKy5QcSBwYWly
aW5nIC4NCisuSXQgRHYgTDJDQVBfTE1fRU5DUllQVA0KK1JlcXVlc3QgZW5j
cnlwdGlvbg0KKy5QcSBpbmNsdWRlcyBhdXRoIC4NCisuSXQgRHYgTDJDQVBf
TE1fU0VDVVJFDQorUmVxdWVzdCBzZWN1cmVkIGxpbmsNCisuUHEgZW5jcnlw
dGlvbiwgcGx1cyBjaGFuZ2UgbGluayBrZXkgLg0KKy5FbA0KKy5QcA0KK0xp
bmsgbW9kZSBzZXR0aW5ncyB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGJhc2Vi
YW5kIGxpbmsgZHVyaW5nIEwyQ0FQDQorY29ubmVjdGlvbiBlc3RhYmxpc2ht
ZW50Lg0KK0lmIHRoZSBjb25uZWN0aW9uIGlzIGFscmVhZHkgZXN0YWJsaXNo
ZWQsDQorLkR2IEVJTlBST0dSRVNTDQorbWF5IGJlIHJldHVybmVkLCBhbmQg
aXQgaXMgbm90IHBvc3NpYmxlIHRvIGd1YXJhbnRlZSB0aGF0IGRhdGEgYWxy
ZWFkeSBxdWV1ZWQNCisuUHEgZnJvbSBlaXRoZXIgZW5kDQord2lsbCBub3Qg
YmUgZGVsaXZlcmVkLg0KK0lmIHRoZSBtb2RlIGNoYW5nZSBmYWlscywgdGhl
IGNvbm5lY3Rpb24gd2lsbCBiZSBhYm9ydGVkLg0KIC5FbA0KIC5QcA0KIEwy
Q0FQDQpAQCAtMTc0LDYgKzE5OCwzMCBAQA0KIC5CbCAtdGFnIC13aWR0aCBY
WFgNCiAuSXQgRHYgU09fUkZDT01NX01UVSBPcCBBciB1aW50MTZfdA0KIE1h
eGltdW0gRnJhbWUgU2l6ZSB0byB1c2UgZm9yIHRoaXMgbGluay4NCisuSXQg
RHYgU09fUkZDT01NX0xNIE9wIEFyIGludA0KK0xpbmsgTW9kZS4NCitUaGUg
Zm9sbG93aW5nIGJpdHMgbWF5IGJlIHNldCBhdCBhbnkgdGltZToNCisuUHAN
CisuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggIi5EdiBSRkNPTU1fTE1fRU5D
UllQVCINCisuSXQgRHYgUkZDT01NX0xNX0FVVEgNCitSZXF1ZXN0IGF1dGhl
bnRpY2F0aW9uDQorLlBxIHBhaXJpbmcgLg0KKy5JdCBEdiBSRkNPTU1fTE1f
RU5DUllQVA0KK1JlcXVlc3QgZW5jcnlwdGlvbg0KKy5QcSBpbmNsdWRlcyBh
dXRoIC4NCisuSXQgRHYgUkZDT01NX0xNX1NFQ1VSRQ0KK1JlcXVlc3Qgc2Vj
dXJlZCBsaW5rDQorLlBxIGVuY3J5cHRpb24sIHBsdXMgY2hhbmdlIGxpbmsg
a2V5IC4NCisuRWwNCisuUHANCitMaW5rIG1vZGUgc2V0dGluZ3Mgd2lsbCBi
ZSBhcHBsaWVkIHRvIHRoZSBiYXNlYmFuZCBsaW5rIGR1cmluZyBSRkNPTU0N
Citjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuDQorSWYgdGhlIGNvbm5lY3Rp
b24gaXMgYWxyZWFkeSBlc3RhYmxpc2hlZCwNCisuRHYgRUlOUFJPR1JFU1MN
CittYXkgYmUgcmV0dXJuZWQsIGFuZCBpdCBpcyBub3QgcG9zc2libGUgdG8g
Z3VhcmFudGVlIHRoYXQgZGF0YSBhbHJlYWR5IHF1ZXVlZA0KKy5QcSBmcm9t
IGVpdGhlciBlbmQNCit3aWxsIG5vdCBiZSBkZWxpdmVyZWQuDQorSWYgdGhl
IG1vZGUgY2hhbmdlIGZhaWxzLCB0aGUgY29ubmVjdGlvbiB3aWxsIGJlIGFi
b3J0ZWQuDQogLkVsDQogLlBwDQogUkZDT01NDQpJbmRleDogc2hhcmUvbWFu
L21hbjQvYnRoaWRldi40DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1Mg
ZmlsZTogL2N2c3Jvb3Qvc3JjL3NoYXJlL21hbi9tYW40L2J0aGlkZXYuNCx2
DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNw0KZGlmZiAtdSAtcjEuNyBidGhp
ZGV2LjQNCi0tLSBzaGFyZS9tYW4vbWFuNC9idGhpZGV2LjQJNCBPY3QgMjAw
NiAxOToyOToyNSAtMDAwMAkxLjcNCisrKyBzaGFyZS9tYW4vbWFuNC9idGhp
ZGV2LjQJMTMgQXByIDIwMDcgMDA6MDc6MTIgLTAwMDANCkBAIC0yOSw3ICsy
OSw3IEBADQogLlwiIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFDQog
LlwiIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KIC5cIg0KLS5EZCBP
Y3RvYmVyIDQsIDIwMDYNCisuRGQgQXByaWwgMTAsIDIwMDcNCiAuRHQgQlRI
SURFViA0DQogLk9zDQogLlNoIE5BTUUNCkBAIC04OCw2ICs4OCwxMyBAQA0K
IC5ObQ0KIGRyaXZlciB3aWxsIGluaXRpYXRlIHJlY29ubmVjdGlvbnMgdG8g
dGhlIHJlbW90ZSBkZXZpY2Ugd2hlbiBubw0KIGNvbm5lY3Rpb24gaXMgcHJl
c2VudC4NCisuSXQgbGluay1tb2RlDQorVGhpcyBvcHRpb25hbCBzdHJpbmcg
cmVwcmVzZW50cyB0aGUgbGluayBtb2RlIG9mIHRoZSBiYXNlYmFuZCBsaW5r
LCBhbmQNCittYXkgYmUgb25lIG9mDQorLlNxIGF1dGggLA0KKy5TcSBlbmNy
eXB0DQorb3INCisuU3Egc2VjdXJlIC4NCiAuRWwNCiAuUHANCiBXaGVuIHRo
ZQ0KSW5kZXg6IHNoYXJlL21hbi9tYW45L2JsdWV0b290aC45DQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3NoYXJl
L21hbi9tYW45L2JsdWV0b290aC45LHYNCnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xDQpkaWZmIC11IC1yMS4xIGJsdWV0b290aC45DQotLS0gc2hhcmUvbWFu
L21hbjkvYmx1ZXRvb3RoLjkJMTkgSnVuIDIwMDYgMTU6NDQ6NDQgLTAwMDAJ
MS4xDQorKysgc2hhcmUvbWFuL21hbjkvYmx1ZXRvb3RoLjkJMTMgQXByIDIw
MDcgMDA6MDc6MTIgLTAwMDANCkBAIC0zMCw3ICszMCw3IEBADQogLlwiIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KIC5cIg0KIC5cIg0KLS5EZCBN
YXJjaCA0LCAyMDA2DQorLkRkIEFwcmlsIDEwLCAyMDA3DQogLkR0IEJMVUVU
T09USCA5DQogLk9zDQogLlNoIE5BTUUNCkBAIC0xNDMsNiArMTQzLDcgQEAN
CiAJdm9pZCAoKmRpc2Nvbm5lY3RlZCkodm9pZCAqLCBpbnQpOw0KIAl2b2lk
ICooKm5ld2Nvbm4pKHZvaWQgKiwgc3RydWN0IHNvY2thZGRyX2J0ICosIHN0
cnVjdCBzb2NrYWRkcl9idCAqKTsNCiAJdm9pZCAoKmNvbXBsZXRlKSh2b2lk
ICosIGludCk7DQorCXZvaWQgKCpsaW5rbW9kZSkodm9pZCAqLCBpbnQpOw0K
IAl2b2lkICgqaW5wdXQpKHZvaWQgKiwgc3RydWN0IG1idWYgKik7DQogfTsN
CiAuRWQNCkBAIC0zNDcsNiArMzQ4LDExIEBADQogLkFyIGNvdW50DQogdmFs
dWUgd2lsbCBiZSBkZXBlbmRlbnQgb24gdGhlIHByb3RvY29sIGJlaW5nIHVz
ZWQgKGVnIFJGQ09NTSBpcyBieXRlcywNCiBidXQgTDJDQVAgaXMgcGFja2V0
cykNCisuSXQgRm4gIigqbGlua21vZGUpIiAicmVmIiAibW9kZSINCitUaGlz
IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGZvciBlc3RhYmxpc2hlZCBjb25u
ZWN0aW9ucywgd2hlbiB0aGUgbGluayBtb2RlDQorb2YgdGhlIGJhc2ViYW5k
IGxpbmsgaGFzIGNoYW5nZWQuDQorLkFyIG1vZGUNCitpcyB0aGUgbmV3IG1v
ZGUuDQogLkl0IEZuICIoKmlucHV0KSIgInJlZiIgIm1idWYiDQogVGhpcyBm
dW5jdGlvbiBpcyBjYWxsZWQgdG8gc3VwcGx5IG5ldyBkYXRhIG9uIHRoZSBj
b25uZWN0aW9uIGRlc2NyaWJlZCBieQ0KIC5BciByZWYgLg0KSW5kZXg6IHN5
cy9kZXYvYmx1ZXRvb3RoL2J0ZGV2LmgNCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NClJDUyBmaWxlOiAvY3Zzcm9vdC9zcmMvc3lzL2Rldi9ibHVldG9vdGgv
YnRkZXYuaCx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQ0KZGlmZiAtdSAt
cjEuNSBidGRldi5oDQotLS0gc3lzL2Rldi9ibHVldG9vdGgvYnRkZXYuaAk0
IE9jdCAyMDA2IDE5OjIzOjU5IC0wMDAwCTEuNQ0KKysrIHN5cy9kZXYvYmx1
ZXRvb3RoL2J0ZGV2LmgJMTMgQXByIDIwMDcgMDA6MDc6MTIgLTAwMDANCkBA
IC00Myw2ICs0MywxMCBAQA0KICNkZWZpbmUgQlRERVZsYWRkcgkJImxvY2Fs
LWJkYWRkciINCiAjZGVmaW5lIEJUREVWcmFkZHIJCSJyZW1vdGUtYmRhZGRy
Ig0KICNkZWZpbmUgQlRERVZzZXJ2aWNlCQkic2VydmljZS1uYW1lIg0KKyNk
ZWZpbmUgQlRERVZtb2RlCQkibGluay1tb2RlIg0KKyNkZWZpbmUgQlRERVZh
dXRoCQkiYXV0aCINCisjZGVmaW5lIEJUREVWZW5jcnlwdAkJImVuY3J5cHQi
DQorI2RlZmluZSBCVERFVnNlY3VyZQkJInNlY3VyZSINCiANCiAjaWZkZWYg
X0tFUk5FTA0KIHN0cnVjdCBidGRldiB7DQpJbmRleDogc3lzL2Rldi9ibHVl
dG9vdGgvYnRoaWRldi5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1Mg
ZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9kZXYvYmx1ZXRvb3RoL2J0aGlkZXYu
Yyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNw0KZGlmZiAtdSAtcjEuNyBi
dGhpZGV2LmMNCi0tLSBzeXMvZGV2L2JsdWV0b290aC9idGhpZGV2LmMJMTYg
Tm92IDIwMDYgMDE6MzI6NDggLTAwMDAJMS43DQorKysgc3lzL2Rldi9ibHVl
dG9vdGgvYnRoaWRldi5jCTEzIEFwciAyMDA3IDAwOjA3OjEyIC0wMDAwDQpA
QCAtNzIsNiArNzIsNyBAQA0KIA0KIAliZGFkZHJfdAkJc2NfbGFkZHI7CS8q
IGxvY2FsIGFkZHJlc3MgKi8NCiAJYmRhZGRyX3QJCXNjX3JhZGRyOwkvKiBy
ZW1vdGUgYWRkcmVzcyAqLw0KKwlpbnQJCQlzY19tb2RlOwkvKiBsaW5rIG1v
ZGUgKi8NCiANCiAJdWludDE2X3QJCXNjX2N0bHBzbTsJLyogY29udHJvbCBQ
U00gKi8NCiAJc3RydWN0IGwyY2FwX2NoYW5uZWwJKnNjX2N0bDsJLyogY29u
dHJvbCBjaGFubmVsICovDQpAQCAtMTI1LDYgKzEyNiw3IEBADQogc3RhdGlj
IHZvaWQgKmJ0aGlkZXZfY3RsX25ld2Nvbm4odm9pZCAqLCBzdHJ1Y3Qgc29j
a2FkZHJfYnQgKiwgc3RydWN0IHNvY2thZGRyX2J0ICopOw0KIHN0YXRpYyB2
b2lkICpidGhpZGV2X2ludF9uZXdjb25uKHZvaWQgKiwgc3RydWN0IHNvY2th
ZGRyX2J0ICosIHN0cnVjdCBzb2NrYWRkcl9idCAqKTsNCiBzdGF0aWMgdm9p
ZCAgYnRoaWRldl9jb21wbGV0ZSh2b2lkICosIGludCk7DQorc3RhdGljIHZv
aWQgIGJ0aGlkZXZfbGlua21vZGUodm9pZCAqLCBpbnQpOw0KIHN0YXRpYyB2
b2lkICBidGhpZGV2X2lucHV0KHZvaWQgKiwgc3RydWN0IG1idWYgKik7DQog
DQogc3RhdGljIGNvbnN0IHN0cnVjdCBidHByb3RvIGJ0aGlkZXZfY3RsX3By
b3RvID0gew0KQEAgLTEzMyw2ICsxMzUsNyBAQA0KIAlidGhpZGV2X2N0bF9k
aXNjb25uZWN0ZWQsDQogCWJ0aGlkZXZfY3RsX25ld2Nvbm4sDQogCWJ0aGlk
ZXZfY29tcGxldGUsDQorCWJ0aGlkZXZfbGlua21vZGUsDQogCWJ0aGlkZXZf
aW5wdXQsDQogfTsNCiANCkBAIC0xNDIsNiArMTQ1LDcgQEANCiAJYnRoaWRl
dl9pbnRfZGlzY29ubmVjdGVkLA0KIAlidGhpZGV2X2ludF9uZXdjb25uLA0K
IAlidGhpZGV2X2NvbXBsZXRlLA0KKwlidGhpZGV2X2xpbmttb2RlLA0KIAli
dGhpZGV2X2lucHV0LA0KIH07DQogDQpAQCAtMTk4LDYgKzIwMiwyMyBAQA0K
IAlvYmogPSBwcm9wX2RpY3Rpb25hcnlfZ2V0KGRpY3QsIEJUREVWcmFkZHIp
Ow0KIAliZGFkZHJfY29weSgmc2MtPnNjX3JhZGRyLCBwcm9wX2RhdGFfZGF0
YV9ub2NvcHkob2JqKSk7DQogDQorCW9iaiA9IHByb3BfZGljdGlvbmFyeV9n
ZXQoZGljdCwgQlRERVZtb2RlKTsNCisJaWYgKHByb3Bfb2JqZWN0X3R5cGUo
b2JqKSA9PSBQUk9QX1RZUEVfU1RSSU5HKSB7DQorCQlpZiAocHJvcF9zdHJp
bmdfZXF1YWxzX2NzdHJpbmcob2JqLCBCVERFVmF1dGgpKQ0KKwkJCXNjLT5z
Y19tb2RlID0gTDJDQVBfTE1fQVVUSDsNCisJCWVsc2UgaWYgKHByb3Bfc3Ry
aW5nX2VxdWFsc19jc3RyaW5nKG9iaiwgQlRERVZlbmNyeXB0KSkNCisJCQlz
Yy0+c2NfbW9kZSA9IEwyQ0FQX0xNX0VOQ1JZUFQ7DQorCQllbHNlIGlmIChw
cm9wX3N0cmluZ19lcXVhbHNfY3N0cmluZyhvYmosIEJUREVWc2VjdXJlKSkN
CisJCQlzYy0+c2NfbW9kZSA9IEwyQ0FQX0xNX1NFQ1VSRTsNCisJCWVsc2Ug
IHsNCisJCQlhcHJpbnRfZXJyb3IoIiB1bmtub3duICVzXG4iLCBCVERFVm1v
ZGUpOw0KKwkJCXJldHVybjsNCisJCX0NCisNCisJCWFwcmludF92ZXJib3Nl
KCIgJXMgJXMiLCBCVERFVm1vZGUsDQorCQkJCQkgcHJvcF9zdHJpbmdfY3N0
cmluZ19ub2NvcHkob2JqKSk7DQorCX0NCisNCiAJb2JqID0gcHJvcF9kaWN0
aW9uYXJ5X2dldChkaWN0LCBCVEhJREVWY29udHJvbHBzbSk7DQogCWlmIChw
cm9wX29iamVjdF90eXBlKG9iaikgPT0gUFJPUF9UWVBFX05VTUJFUikgew0K
IAkJc2MtPnNjX2N0bHBzbSA9IHByb3BfbnVtYmVyX2ludGVnZXJfdmFsdWUo
b2JqKTsNCkBAIC00MzUsNiArNDU2LDEwIEBADQogCWlmIChlcnIpDQogCQly
ZXR1cm4gZXJyOw0KIA0KKwllcnIgPSBsMmNhcF9zZXRvcHQoc2MtPnNjX2N0
bF9sLCBTT19MMkNBUF9MTSwgJnNjLT5zY19tb2RlKTsNCisJaWYgKGVycikN
CisJCXJldHVybiBlcnI7DQorDQogCXNhLmJ0X3BzbSA9IHNjLT5zY19jdGxw
c207DQogCWVyciA9IGwyY2FwX2JpbmQoc2MtPnNjX2N0bF9sLCAmc2EpOw0K
IAlpZiAoZXJyKQ0KQEAgLTQ1MSw2ICs0NzYsMTAgQEANCiAJaWYgKGVycikN
CiAJCXJldHVybiBlcnI7DQogDQorCWVyciA9IGwyY2FwX3NldG9wdChzYy0+
c2NfaW50X2wsIFNPX0wyQ0FQX0xNLCAmc2MtPnNjX21vZGUpOw0KKwlpZiAo
ZXJyKQ0KKwkJcmV0dXJuIGVycjsNCisNCiAJc2EuYnRfcHNtID0gc2MtPnNj
X2ludHBzbTsNCiAJZXJyID0gbDJjYXBfYmluZChzYy0+c2NfaW50X2wsICZz
YSk7DQogCWlmIChlcnIpDQpAQCAtNDg4LDYgKzUxNywxMCBAQA0KIAkJcmV0
dXJuIGVycjsNCiAJfQ0KIA0KKwllcnIgPSBsMmNhcF9zZXRvcHQoc2MtPnNj
X2N0bCwgU09fTDJDQVBfTE0sICZzYy0+c2NfbW9kZSk7DQorCWlmIChlcnIp
DQorCQlyZXR1cm4gZXJyOw0KKw0KIAliZGFkZHJfY29weSgmc2EuYnRfYmRh
ZGRyLCAmc2MtPnNjX2xhZGRyKTsNCiAJZXJyID0gbDJjYXBfYmluZChzYy0+
c2NfY3RsLCAmc2EpOw0KIAlpZiAoZXJyKSB7DQpAQCAtNTQzLDYgKzU3Niwx
MCBAQA0KIAkJaWYgKGVycikNCiAJCQlnb3RvIGZhaWw7DQogDQorCQllcnIg
PSBsMmNhcF9zZXRvcHQoc2MtPnNjX2ludCwgU09fTDJDQVBfTE0sICZzYy0+
c2NfbW9kZSk7DQorCQlpZiAoZXJyKQ0KKwkJCWdvdG8gZmFpbDsNCisNCiAJ
CW1lbXNldCgmc2EsIDAsIHNpemVvZihzYSkpOw0KIAkJc2EuYnRfbGVuID0g
c2l6ZW9mKHNhKTsNCiAJCXNhLmJ0X2ZhbWlseSA9IEFGX0JMVUVUT09USDsN
CkBAIC03MDcsNiArNzQ0LDI3IEBADQogCS8qIGRvbnQgY2FyZSAqLw0KIH0N
CiANCitzdGF0aWMgdm9pZA0KK2J0aGlkZXZfbGlua21vZGUodm9pZCAqYXJn
LCBpbnQgbmV3KQ0KK3sNCisJc3RydWN0IGJ0aGlkZXZfc29mdGMgKnNjID0g
YXJnOw0KKw0KKwlpZiAoKHNjLT5zY19tb2RlICYgTDJDQVBfTE1fQVVUSCkg
JiYgIShuZXcgJiBMMkNBUF9MTV9BVVRIKSkNCisJCXByaW50ZigiJXM6IGF1
dGggZmFpbGVkXG4iLCBkZXZpY2VfeG5hbWUoKHN0cnVjdCBkZXZpY2UgKilz
YykpOw0KKwllbHNlIGlmICgoc2MtPnNjX21vZGUgJiBMMkNBUF9MTV9FTkNS
WVBUKSAmJiAhKG5ldyAmIEwyQ0FQX0xNX0VOQ1JZUFQpKQ0KKwkJcHJpbnRm
KCIlczogZW5jcnlwdCBvZmZcbiIsIGRldmljZV94bmFtZSgoc3RydWN0IGRl
dmljZSAqKXNjKSk7DQorCWVsc2UgaWYgKChzYy0+c2NfbW9kZSAmIEwyQ0FQ
X0xNX1NFQ1VSRSkgJiYgIShuZXcgJiBMMkNBUF9MTV9TRUNVUkUpKQ0KKwkJ
cHJpbnRmKCIlczogaW5zZWN1cmVcbiIsIGRldmljZV94bmFtZSgoc3RydWN0
IGRldmljZSAqKXNjKSk7DQorCWVsc2UNCisJCXJldHVybjsNCisNCisJaWYg
KHNjLT5zY19pbnQgIT0gTlVMTCkNCisJCWwyY2FwX2Rpc2Nvbm5lY3Qoc2Mt
PnNjX2ludCwgMCk7DQorDQorCWlmIChzYy0+c2NfY3RsICE9IE5VTEwpDQor
CQlsMmNhcF9kaXNjb25uZWN0KHNjLT5zY19jdGwsIDApOw0KK30NCisNCiAv
Kg0KICAqIFJlY2VpdmUgcmVwb3J0cyBmcm9tIHRoZSBwcm90b2NvbCBzdGFj
ay4NCiAgKi8NCkluZGV4OiBzeXMvZGV2L2JsdWV0b290aC9idHNjby5jDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3Jj
L3N5cy9kZXYvYmx1ZXRvb3RoL2J0c2NvLmMsdg0KcmV0cmlldmluZyByZXZp
c2lvbiAxLjEzDQpkaWZmIC11IC1yMS4xMyBidHNjby5jDQotLS0gc3lzL2Rl
di9ibHVldG9vdGgvYnRzY28uYwkxMyBNYXIgMjAwNyAxOToyNjowNiAtMDAw
MAkxLjEzDQorKysgc3lzL2Rldi9ibHVldG9vdGgvYnRzY28uYwkxMyBBcHIg
MjAwNyAwMDowNzoyMyAtMDAwMA0KQEAgLTIxNSw2ICsyMTUsNyBAQA0KIHN0
YXRpYyB2b2lkICBidHNjb19zY29fZGlzY29ubmVjdGVkKHZvaWQgKiwgaW50
KTsNCiBzdGF0aWMgdm9pZCAqYnRzY29fc2NvX25ld2Nvbm4odm9pZCAqLCBz
dHJ1Y3Qgc29ja2FkZHJfYnQgKiwgc3RydWN0IHNvY2thZGRyX2J0ICopOw0K
IHN0YXRpYyB2b2lkICBidHNjb19zY29fY29tcGxldGUodm9pZCAqLCBpbnQp
Ow0KK3N0YXRpYyB2b2lkICBidHNjb19zY29fbGlua21vZGUodm9pZCAqLCBp
bnQpOw0KIHN0YXRpYyB2b2lkICBidHNjb19zY29faW5wdXQodm9pZCAqLCBz
dHJ1Y3QgbWJ1ZiAqKTsNCiANCiBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0cHJv
dG8gYnRzY29fc2NvX3Byb3RvID0gew0KQEAgLTIyMyw2ICsyMjQsNyBAQA0K
IAlidHNjb19zY29fZGlzY29ubmVjdGVkLA0KIAlidHNjb19zY29fbmV3Y29u
biwNCiAJYnRzY29fc2NvX2NvbXBsZXRlLA0KKwlidHNjb19zY29fbGlua21v
ZGUsDQogCWJ0c2NvX3Njb19pbnB1dCwNCiB9Ow0KIA0KQEAgLTUwMiw2ICs1
MDQsMTQgQEANCiB9DQogDQogc3RhdGljIHZvaWQNCitidHNjb19zY29fbGlu
a21vZGUodm9pZCAqYXJnLCBpbnQgbmV3KQ0KK3sNCisvKglzdHJ1Y3QgYnRz
Y29fc29mdGMgKnNjID0gYXJnOwkqLw0KKw0KKwkvKiBkb250IGNhcmUgKi8N
Cit9DQorDQorc3RhdGljIHZvaWQNCiBidHNjb19zY29faW5wdXQodm9pZCAq
YXJnLCBzdHJ1Y3QgbWJ1ZiAqbSkNCiB7DQogCXN0cnVjdCBidHNjb19zb2Z0
YyAqc2MgPSBhcmc7DQpJbmRleDogc3lzL25ldGJ0L2JsdWV0b290aC5oDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3Jj
L3N5cy9uZXRidC9ibHVldG9vdGguaCx2DQpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNA0KZGlmZiAtdSAtcjEuNCBibHVldG9vdGguaA0KLS0tIHN5cy9uZXRi
dC9ibHVldG9vdGguaAkxNiBOb3YgMjAwNiAwMTozMzo0NCAtMDAwMAkxLjQN
CisrKyBzeXMvbmV0YnQvYmx1ZXRvb3RoLmgJMTMgQXByIDIwMDcgMDA6MDc6
MjMgLTAwMDANCkBAIC0xMTUsNiArMTE1LDcgQEANCiAJdm9pZCAoKmRpc2Nv
bm5lY3RlZCkodm9pZCAqLCBpbnQpOw0KIAl2b2lkICooKm5ld2Nvbm4pKHZv
aWQgKiwgc3RydWN0IHNvY2thZGRyX2J0ICosIHN0cnVjdCBzb2NrYWRkcl9i
dCAqKTsNCiAJdm9pZCAoKmNvbXBsZXRlKSh2b2lkICosIGludCk7DQorCXZv
aWQgKCpsaW5rbW9kZSkodm9pZCAqLCBpbnQpOw0KIAl2b2lkICgqaW5wdXQp
KHZvaWQgKiwgc3RydWN0IG1idWYgKik7DQogfTsNCiANCkluZGV4OiBzeXMv
bmV0YnQvaGNpLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxl
OiAvY3Zzcm9vdC9zcmMvc3lzL25ldGJ0L2hjaS5oLHYNCnJldHJpZXZpbmcg
cmV2aXNpb24gMS45DQpkaWZmIC11IC1yMS45IGhjaS5oDQotLS0gc3lzL25l
dGJ0L2hjaS5oCTIwIEZlYiAyMDA3IDE2OjUzOjIxIC0wMDAwCTEuOQ0KKysr
IHN5cy9uZXRidC9oY2kuaAkxMyBBcHIgMjAwNyAwMDowNzoyMyAtMDAwMA0K
QEAgLTIwNDQsNiArMjA0NCw3IEBADQogDQogCS8qIGNvbW1vbiBpbmZvICov
DQogCXVpbnQxNl90CQkgaGxfc3RhdGU7CS8qIGNvbm5lY3Rpb24gc3RhdGUg
Ki8NCisJdWludDE2X3QJCSBobF9mbGFnczsJLyogbGluayBmbGFncyAqLw0K
IAliZGFkZHJfdAkJIGhsX2JkYWRkcjsJLyogZGVzdCBhZGRyZXNzICovDQog
CXVpbnQxNl90CQkgaGxfaGFuZGxlOwkvKiBjb25uZWN0aW9uIGhhbmRsZSAq
Lw0KIAl1aW50OF90CQkJIGhsX3R5cGU7CS8qIGxpbmsgdHlwZSAqLw0KQEAg
LTIwNjYsMTEgKzIwNjcsMjIgQEANCiAJTUJVRlFfSEVBRCgpCQkgaGxfZGF0
YTsJLyogU0NPIG91dGdvaW5nIGRhdGEgKi8NCiB9Ow0KIA0KLS8qIGhjaV9s
aW5rIHN0YXRlIGJpdHMgKi8NCisvKiBoY2lfbGluayBzdGF0ZSAqLw0KICNk
ZWZpbmUgSENJX0xJTktfQ0xPU0VECQkwICAvKiBjbG9zZWQgKi8NCiAjZGVm
aW5lIEhDSV9MSU5LX1dBSVRfQ09OTkVDVAkxICAvKiB3YWl0aW5nIHRvIGNv
bm5lY3QgKi8NCi0jZGVmaW5lIEhDSV9MSU5LX09QRU4JCTIgIC8qIHJlYWR5
IGFuZCB3aWxsaW5nICovDQotI2RlZmluZSBIQ0lfTElOS19CTE9DSwkJMyAg
Lyogb3BlbiBidXQgYmxvY2tpbmcgKHNlZSBoY2lfYWNsX3N0YXJ0KSAqLw0K
KyNkZWZpbmUgSENJX0xJTktfV0FJVF9BVVRICTIgIC8qIHdhaXRpbmcgZm9y
IGF1dGggKi8NCisjZGVmaW5lIEhDSV9MSU5LX1dBSVRfRU5DUllQVAkzICAv
KiB3YWl0aW5nIGZvciBlbmNyeXB0ICovDQorI2RlZmluZSBIQ0lfTElOS19X
QUlUX1NFQ1VSRQk0ICAvKiB3YWl0aW5nIGZvciBzZWN1cmUgKi8NCisjZGVm
aW5lIEhDSV9MSU5LX09QRU4JCTUgIC8qIHJlYWR5IGFuZCB3aWxsaW5nICov
DQorI2RlZmluZSBIQ0lfTElOS19CTE9DSwkJNiAgLyogb3BlbiBidXQgYmxv
Y2tpbmcgKHNlZSBoY2lfYWNsX3N0YXJ0KSAqLw0KKw0KKy8qIGhjaV9saW5r
IGZsYWdzICovDQorI2RlZmluZSBIQ0lfTElOS19BVVRIX1JFUQkoMTw8MCkg
IC8qIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3RlZCAqLw0KKyNkZWZpbmUgSENJ
X0xJTktfRU5DUllQVF9SRVEJKDE8PDEpICAvKiBlbmNyeXB0aW9uIHJlcXVl
c3RlZCAqLw0KKyNkZWZpbmUgSENJX0xJTktfU0VDVVJFX1JFUQkoMTw8MikJ
Lyogc2VjdXJlIGxpbmsgcmVxdWVzdGVkICovDQorI2RlZmluZSBIQ0lfTElO
S19BVVRICQkoMTw8MykJLyogbGluayBpcyBhdXRoZW50aWNhdGVkICovDQor
I2RlZmluZSBIQ0lfTElOS19FTkNSWVBUCSgxPDw0KQkvKiBsaW5rIGlzIGVu
Y3J5cHRlZCAqLw0KKyNkZWZpbmUgSENJX0xJTktfU0VDVVJFCQkoMTw8NSkJ
LyogbGluayBpcyBzZWN1cmVkICovDQogDQogLyoNCiAgKiBCbHVldG9vdGgg
TWVtbw0KQEAgLTIxNjYsNiArMjE3OCw4IEBADQogc3RydWN0IGhjaV9saW5r
ICpoY2lfYWNsX25ld2Nvbm4oc3RydWN0IGhjaV91bml0ICosIGJkYWRkcl90
ICopOw0KIHZvaWQgaGNpX2FjbF9jbG9zZShzdHJ1Y3QgaGNpX2xpbmsgKiwg
aW50KTsNCiB2b2lkIGhjaV9hY2xfdGltZW91dCh2b2lkICopOw0KK2ludCBo
Y2lfYWNsX3NldG1vZGUoc3RydWN0IGhjaV9saW5rICopOw0KK3ZvaWQgaGNp
X2FjbF9saW5rbW9kZShzdHJ1Y3QgaGNpX2xpbmsgKik7DQogdm9pZCBoY2lf
YWNsX3JlY3Yoc3RydWN0IG1idWYgKiwgc3RydWN0IGhjaV91bml0ICopOw0K
IGludCBoY2lfYWNsX3NlbmQoc3RydWN0IG1idWYgKiwgc3RydWN0IGhjaV9s
aW5rICosIHN0cnVjdCBsMmNhcF9jaGFubmVsICopOw0KIHZvaWQgaGNpX2Fj
bF9zdGFydChzdHJ1Y3QgaGNpX2xpbmsgKik7DQpJbmRleDogc3lzL25ldGJ0
L2hjaV9ldmVudC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmls
ZTogL2N2c3Jvb3Qvc3JjL3N5cy9uZXRidC9oY2lfZXZlbnQuYyx2DQpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNQ0KZGlmZiAtdSAtcjEuNSBoY2lfZXZlbnQu
Yw0KLS0tIHN5cy9uZXRidC9oY2lfZXZlbnQuYwk1IEFwciAyMDA3IDE5OjIy
OjE4IC0wMDAwCTEuNQ0KKysrIHN5cy9uZXRidC9oY2lfZXZlbnQuYwkxMyBB
cHIgMjAwNyAwMDowNzozNCAtMDAwMA0KQEAgLTUxLDYgKzUxLDkgQEANCiBz
dGF0aWMgdm9pZCBoY2lfZXZlbnRfZGlzY29uX2NvbXBsKHN0cnVjdCBoY2lf
dW5pdCAqLCBzdHJ1Y3QgbWJ1ZiAqKTsNCiBzdGF0aWMgdm9pZCBoY2lfZXZl
bnRfY29uX3JlcShzdHJ1Y3QgaGNpX3VuaXQgKiwgc3RydWN0IG1idWYgKik7
DQogc3RhdGljIHZvaWQgaGNpX2V2ZW50X251bV9jb21wbF9wa3RzKHN0cnVj
dCBoY2lfdW5pdCAqLCBzdHJ1Y3QgbWJ1ZiAqKTsNCitzdGF0aWMgdm9pZCBo
Y2lfZXZlbnRfYXV0aF9jb21wbChzdHJ1Y3QgaGNpX3VuaXQgKiwgc3RydWN0
IG1idWYgKik7DQorc3RhdGljIHZvaWQgaGNpX2V2ZW50X2VuY3J5cHRpb25f
Y2hhbmdlKHN0cnVjdCBoY2lfdW5pdCAqLCBzdHJ1Y3QgbWJ1ZiAqKTsNCitz
dGF0aWMgdm9pZCBoY2lfZXZlbnRfY2hhbmdlX2Nvbl9saW5rX2tleV9jb21w
bChzdHJ1Y3QgaGNpX3VuaXQgKiwgc3RydWN0IG1idWYgKik7DQogc3RhdGlj
IHZvaWQgaGNpX2NtZF9yZWFkX2JkYWRkcihzdHJ1Y3QgaGNpX3VuaXQgKiwg
c3RydWN0IG1idWYgKik7DQogc3RhdGljIHZvaWQgaGNpX2NtZF9yZWFkX2J1
ZmZlcl9zaXplKHN0cnVjdCBoY2lfdW5pdCAqLCBzdHJ1Y3QgbWJ1ZiAqKTsN
CiBzdGF0aWMgdm9pZCBoY2lfY21kX3JlYWRfbG9jYWxfZmVhdHVyZXMoc3Ry
dWN0IGhjaV91bml0ICosIHN0cnVjdCBtYnVmICopOw0KQEAgLTE3NCwxMiAr
MTc3LDIxIEBADQogCQloY2lfZXZlbnRfY29uX3JlcSh1bml0LCBtKTsNCiAJ
CWJyZWFrOw0KIA0KLQljYXNlIEhDSV9FVkVOVF9TQ09fQ09OX0NPTVBMOg0K
LQljYXNlIEhDSV9FVkVOVF9JTlFVSVJZX0NPTVBMOg0KIAljYXNlIEhDSV9F
VkVOVF9BVVRIX0NPTVBMOg0KLQljYXNlIEhDSV9FVkVOVF9SRU1PVEVfTkFN
RV9SRVFfQ09NUEw6DQorCQloY2lfZXZlbnRfYXV0aF9jb21wbCh1bml0LCBt
KTsNCisJCWJyZWFrOw0KKw0KIAljYXNlIEhDSV9FVkVOVF9FTkNSWVBUSU9O
X0NIQU5HRToNCisJCWhjaV9ldmVudF9lbmNyeXB0aW9uX2NoYW5nZSh1bml0
LCBtKTsNCisJCWJyZWFrOw0KKw0KIAljYXNlIEhDSV9FVkVOVF9DSEFOR0Vf
Q09OX0xJTktfS0VZX0NPTVBMOg0KKwkJaGNpX2V2ZW50X2NoYW5nZV9jb25f
bGlua19rZXlfY29tcGwodW5pdCwgbSk7DQorCQlicmVhazsNCisNCisJY2Fz
ZSBIQ0lfRVZFTlRfU0NPX0NPTl9DT01QTDoNCisJY2FzZSBIQ0lfRVZFTlRf
SU5RVUlSWV9DT01QTDoNCisJY2FzZSBIQ0lfRVZFTlRfUkVNT1RFX05BTUVf
UkVRX0NPTVBMOg0KIAljYXNlIEhDSV9FVkVOVF9NQVNURVJfTElOS19LRVlf
Q09NUEw6DQogCWNhc2UgSENJX0VWRU5UX1JFQURfUkVNT1RFX0ZFQVRVUkVT
X0NPTVBMOg0KIAljYXNlIEhDSV9FVkVOVF9SRUFEX1JFTU9URV9WRVJfSU5G
T19DT01QTDoNCkBAIC0yMzEsOSArMjQzLDEwIEBADQogCW1fY29weWRhdGEo
bSwgMCwgc2l6ZW9mKGVwKSwgJmVwKTsNCiAJbV9hZGoobSwgc2l6ZW9mKGVw
KSk7DQogDQotCURQUklOVEZOKDEsICIoJXMpIG9wY29kZSAoJTAzeHwlMDR4
KSBudW1fY21kX3BrdHMgPSAlZFxuIiwNCisJRFBSSU5URk4oMSwgIiglcykg
b3Bjb2RlICglMDN4fCUwNHgpIHN0YXR1cyA9IDB4JXggbnVtX2NtZF9wa3Rz
ID0gJWRcbiIsDQogCQl1bml0LT5oY2lfZGV2bmFtZSwNCiAJCUhDSV9PR0Yo
bGUxNnRvaChlcC5vcGNvZGUpKSwgSENJX09DRihsZTE2dG9oKGVwLm9wY29k
ZSkpLA0KKwkJZXAuc3RhdHVzLA0KIAkJZXAubnVtX2NtZF9wa3RzKTsNCiAN
CiAJdW5pdC0+aGNpX251bV9jbWRfcGt0cyA9IGVwLm51bV9jbWRfcGt0czsN
CkBAIC00OTMsNiArNTA2LDExIEBADQogCQlyZXR1cm47DQogCX0NCiANCisJ
LyogWFhYIGNvdWxkIGNoZWNrIGF1dGhfZW5hYmxlIGhlcmUgKi8NCisNCisJ
aWYgKGVwLmVuY3J5cHRpb25fbW9kZSkNCisJCWxpbmstPmhsX2ZsYWdzIHw9
IChIQ0lfTElOS19BVVRIIHwgSENJX0xJTktfRU5DUllQVCk7DQorDQogCWxp
bmstPmhsX3N0YXRlID0gSENJX0xJTktfT1BFTjsNCiAJbGluay0+aGxfaGFu
ZGxlID0gSENJX0NPTl9IQU5ETEUobGUxNnRvaChlcC5jb25faGFuZGxlKSk7
DQogDQpAQCAtNTA1LDcgKzUyMywxMSBAQA0KIAkJCXByaW50ZigiJXM6IFdh
cm5pbmcsIGNvdWxkIG5vdCB3cml0ZSBsaW5rIHBvbGljeVxuIiwNCiAJCQkJ
dW5pdC0+aGNpX2Rldm5hbWUpOw0KIA0KLQkJaGNpX2FjbF9zdGFydChsaW5r
KTsNCisJCWVyciA9IGhjaV9hY2xfc2V0bW9kZShsaW5rKTsNCisJCWlmIChl
cnIgPT0gRUlOUFJPR1JFU1MpDQorCQkJcmV0dXJuOw0KKw0KKwkJaGNpX2Fj
bF9saW5rbW9kZShsaW5rKTsNCiAJfSBlbHNlIHsNCiAJCSgqbGluay0+aGxf
c2NvLT5zcF9wcm90by0+Y29ubmVjdGVkKShsaW5rLT5obF9zY28tPnNwX3Vw
cGVyKTsNCiAJfQ0KQEAgLTU4NSw2ICs2MDcsMTMzIEBADQogfQ0KIA0KIC8q
DQorICogQXV0aCBDb21wbGV0ZQ0KKyAqDQorICogQXV0aGVudGljYXRpb24g
aGFzIGJlZW4gY29tcGxldGVkIG9uIGFuIEFDTCBsaW5rLiBXZSBjYW4gbm90
aWZ5IHRoZQ0KKyAqIHVwcGVyIGxheWVyIHByb3RvY29scyB1bmxlc3MgZnVy
dGhlciBtb2RlIGNoYW5nZXMgYXJlIHBlbmRpbmcuDQorICovDQorc3RhdGlj
IHZvaWQNCitoY2lfZXZlbnRfYXV0aF9jb21wbChzdHJ1Y3QgaGNpX3VuaXQg
KnVuaXQsIHN0cnVjdCBtYnVmICptKQ0KK3sNCisJaGNpX2F1dGhfY29tcGxf
ZXAgZXA7DQorCXN0cnVjdCBoY2lfbGluayAqbGluazsNCisJaW50IGVycjsN
CisNCisJS0FTU0VSVChtLT5tX3BrdGhkci5sZW4gPj0gc2l6ZW9mKGVwKSk7
DQorCW1fY29weWRhdGEobSwgMCwgc2l6ZW9mKGVwKSwgJmVwKTsNCisJbV9h
ZGoobSwgc2l6ZW9mKGVwKSk7DQorDQorCWVwLmNvbl9oYW5kbGUgPSBIQ0lf
Q09OX0hBTkRMRShsZTE2dG9oKGVwLmNvbl9oYW5kbGUpKTsNCisNCisJRFBS
SU5URk4oMSwgImhhbmRsZSAjJWQsIHN0YXR1cz0weCV4XG4iLCBlcC5jb25f
aGFuZGxlLCBlcC5zdGF0dXMpOw0KKw0KKwlsaW5rID0gaGNpX2xpbmtfbG9v
a3VwX2hhbmRsZSh1bml0LCBlcC5jb25faGFuZGxlKTsNCisJaWYgKGxpbmsg
PT0gTlVMTCB8fCBsaW5rLT5obF90eXBlICE9IEhDSV9MSU5LX0FDTCkNCisJ
CXJldHVybjsNCisNCisJaWYgKGVwLnN0YXR1cyA9PSAwKSB7DQorCQlsaW5r
LT5obF9mbGFncyB8PSBIQ0lfTElOS19BVVRIOw0KKw0KKwkJaWYgKGxpbmst
PmhsX3N0YXRlID09IEhDSV9MSU5LX1dBSVRfQVVUSCkNCisJCQlsaW5rLT5o
bF9zdGF0ZSA9IEhDSV9MSU5LX09QRU47DQorDQorCQllcnIgPSBoY2lfYWNs
X3NldG1vZGUobGluayk7DQorCQlpZiAoZXJyID09IEVJTlBST0dSRVNTKQ0K
KwkJCXJldHVybjsNCisJfQ0KKw0KKwloY2lfYWNsX2xpbmttb2RlKGxpbmsp
Ow0KK30NCisNCisvKg0KKyAqIEVuY3J5cHRpb24gQ2hhbmdlDQorICoNCisg
KiBUaGUgZW5jcnlwdGlvbiBzdGF0dXMgaGFzIGNoYW5nZWQuIEJhc2ljYWxs
eSwgd2Ugbm90ZSB0aGUgY2hhbmdlDQorICogdGhlbiBub3RpZnkgdGhlIHVw
cGVyIGxheWVyIHByb3RvY29sIHVubGVzcyBmdXJ0aGVyIG1vZGUgY2hhbmdl
cw0KKyAqIGFyZSBwZW5kaW5nLg0KKyAqIE5vdGUgdGhhdCBpZiBlbmNyeXB0
aW9uIGdldHMgZGlzYWJsZWQgd2hlbiBpdCBoYXMgYmVlbiByZXF1ZXN0ZWQs
DQorICogd2Ugd2lsbCBhdHRlbXB0IHRvIGVuYWJsZSBpdCBhZ2Fpbi4uIChp
dHMgYSBmZWF0dXJlIG5vdCBhIGJ1ZyA6KQ0KKyAqLw0KK3N0YXRpYyB2b2lk
DQoraGNpX2V2ZW50X2VuY3J5cHRpb25fY2hhbmdlKHN0cnVjdCBoY2lfdW5p
dCAqdW5pdCwgc3RydWN0IG1idWYgKm0pDQorew0KKwloY2lfZW5jcnlwdGlv
bl9jaGFuZ2VfZXAgZXA7DQorCXN0cnVjdCBoY2lfbGluayAqbGluazsNCisJ
aW50IGVycjsNCisNCisJS0FTU0VSVChtLT5tX3BrdGhkci5sZW4gPj0gc2l6
ZW9mKGVwKSk7DQorCW1fY29weWRhdGEobSwgMCwgc2l6ZW9mKGVwKSwgJmVw
KTsNCisJbV9hZGoobSwgc2l6ZW9mKGVwKSk7DQorDQorCWVwLmNvbl9oYW5k
bGUgPSBIQ0lfQ09OX0hBTkRMRShsZTE2dG9oKGVwLmNvbl9oYW5kbGUpKTsN
CisNCisJRFBSSU5URk4oMSwgImhhbmRsZSAjJWQsIHN0YXR1cz0weCV4LCBl
bmNyeXB0aW9uX2VuYWJsZT0weCV4XG4iLA0KKwkJIGVwLmNvbl9oYW5kbGUs
IGVwLnN0YXR1cywgZXAuZW5jcnlwdGlvbl9lbmFibGUpOw0KKw0KKwlsaW5r
ID0gaGNpX2xpbmtfbG9va3VwX2hhbmRsZSh1bml0LCBlcC5jb25faGFuZGxl
KTsNCisJaWYgKGxpbmsgPT0gTlVMTCB8fCBsaW5rLT5obF90eXBlICE9IEhD
SV9MSU5LX0FDTCkNCisJCXJldHVybjsNCisNCisJaWYgKGVwLnN0YXR1cyA9
PSAwKSB7DQorCQlpZiAoZXAuZW5jcnlwdGlvbl9lbmFibGUgPT0gMCkNCisJ
CQlsaW5rLT5obF9mbGFncyAmPSB+SENJX0xJTktfRU5DUllQVDsNCisJCWVs
c2UNCisJCQlsaW5rLT5obF9mbGFncyB8PSAoSENJX0xJTktfQVVUSCB8IEhD
SV9MSU5LX0VOQ1JZUFQpOw0KKw0KKwkJaWYgKGxpbmstPmhsX3N0YXRlID09
IEhDSV9MSU5LX1dBSVRfRU5DUllQVCkNCisJCQlsaW5rLT5obF9zdGF0ZSA9
IEhDSV9MSU5LX09QRU47DQorDQorCQllcnIgPSBoY2lfYWNsX3NldG1vZGUo
bGluayk7DQorCQlpZiAoZXJyID09IEVJTlBST0dSRVNTKQ0KKwkJCXJldHVy
bjsNCisJfQ0KKw0KKwloY2lfYWNsX2xpbmttb2RlKGxpbmspOw0KK30NCisN
CisvKg0KKyAqIENoYW5nZSBDb25uZWN0aW9uIExpbmsgS2V5IENvbXBsZXRl
DQorICoNCisgKiBMaW5rIGtleXMgYXJlIGhhbmRsZWQgaW4gdXNlcmxhbmQg
YnV0IGlmIHdlIGFyZSB3YWl0aW5nIHRvIHNlY3VyZQ0KKyAqIHRoaXMgbGlu
aywgd2Ugc2hvdWxkIG5vdGlmeSB0aGUgdXBwZXIgcHJvdG9jb2xzLiBBIFNF
Q1VSRSByZXF1ZXN0DQorICogb25seSBuZWVkcyBhIHNpbmdsZSBrZXkgY2hh
bmdlLCBzbyB3ZSBjYW4gY2FuY2VsIHRoZSByZXF1ZXN0Lg0KKyAqLw0KK3N0
YXRpYyB2b2lkDQoraGNpX2V2ZW50X2NoYW5nZV9jb25fbGlua19rZXlfY29t
cGwoc3RydWN0IGhjaV91bml0ICp1bml0LCBzdHJ1Y3QgbWJ1ZiAqbSkNCit7
DQorCWhjaV9jaGFuZ2VfY29uX2xpbmtfa2V5X2NvbXBsX2VwIGVwOw0KKwlz
dHJ1Y3QgaGNpX2xpbmsgKmxpbms7DQorCWludCBlcnI7DQorDQorCUtBU1NF
UlQobS0+bV9wa3RoZHIubGVuID49IHNpemVvZihlcCkpOw0KKwltX2NvcHlk
YXRhKG0sIDAsIHNpemVvZihlcCksICZlcCk7DQorCW1fYWRqKG0sIHNpemVv
ZihlcCkpOw0KKw0KKwllcC5jb25faGFuZGxlID0gSENJX0NPTl9IQU5ETEUo
bGUxNnRvaChlcC5jb25faGFuZGxlKSk7DQorDQorCURQUklOVEZOKDEsICJo
YW5kbGUgIyVkLCBzdGF0dXM9MHgleFxuIiwgZXAuY29uX2hhbmRsZSwgZXAu
c3RhdHVzKTsNCisNCisJbGluayA9IGhjaV9saW5rX2xvb2t1cF9oYW5kbGUo
dW5pdCwgZXAuY29uX2hhbmRsZSk7DQorCWlmIChsaW5rID09IE5VTEwgfHwg
bGluay0+aGxfdHlwZSAhPSBIQ0lfTElOS19BQ0wpDQorCQlyZXR1cm47DQor
DQorCWxpbmstPmhsX2ZsYWdzICY9IH5IQ0lfTElOS19TRUNVUkVfUkVROw0K
Kw0KKwlpZiAoZXAuc3RhdHVzID09IDApIHsNCisJCWxpbmstPmhsX2ZsYWdz
IHw9IChIQ0lfTElOS19BVVRIIHwgSENJX0xJTktfU0VDVVJFKTsNCisNCisJ
CWlmIChsaW5rLT5obF9zdGF0ZSA9PSBIQ0lfTElOS19XQUlUX1NFQ1VSRSkN
CisJCQlsaW5rLT5obF9zdGF0ZSA9IEhDSV9MSU5LX09QRU47DQorDQorCQll
cnIgPSBoY2lfYWNsX3NldG1vZGUobGluayk7DQorCQlpZiAoZXJyID09IEVJ
TlBST0dSRVNTKQ0KKwkJCXJldHVybjsNCisJfQ0KKw0KKwloY2lfYWNsX2xp
bmttb2RlKGxpbmspOw0KK30NCisNCisvKg0KICAqIHByb2Nlc3MgcmVzdWx0
cyBvZiByZWFkX2JkYWRkciBjb21tYW5kX2NvbXBsZXRlIGV2ZW50DQogICov
DQogc3RhdGljIHZvaWQNCkluZGV4OiBzeXMvbmV0YnQvaGNpX2xpbmsuYw0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290L3Ny
Yy9zeXMvbmV0YnQvaGNpX2xpbmsuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMTANCmRpZmYgLXUgLXIxLjEwIGhjaV9saW5rLmMNCi0tLSBzeXMvbmV0
YnQvaGNpX2xpbmsuYwkzMCBNYXIgMjAwNyAyMDo0NzowMiAtMDAwMAkxLjEw
DQorKysgc3lzL25ldGJ0L2hjaV9saW5rLmMJMTMgQXByIDIwMDcgMDA6MDc6
MzQgLTAwMDANCkBAIC0xMTQsNiArMTE0LDkgQEANCiAJCWJyZWFrOw0KIA0K
IAljYXNlIEhDSV9MSU5LX1dBSVRfQ09OTkVDVDoNCisJY2FzZSBIQ0lfTElO
S19XQUlUX0FVVEg6DQorCWNhc2UgSENJX0xJTktfV0FJVF9FTkNSWVBUOg0K
KwljYXNlIEhDSV9MSU5LX1dBSVRfU0VDVVJFOg0KIAkJLyoNCiAJCSAqIHNv
bWVib2R5IGVsc2UgYWxyZWFkeSB0cnlpbmcgdG8gY29ubmVjdCwgd2UganVz
dA0KIAkJICogc2l0IG9uIHRoZSBiZW5jaCB3aXRoIHRoZW0uLg0KQEAgLTIx
MSw2ICsyMTQsOSBAQA0KIAkJaGNpX2xpbmtfZnJlZShsaW5rLCBFQ09OTlJF
U0VUKTsNCiAJCWJyZWFrOw0KIA0KKwljYXNlIEhDSV9MSU5LX1dBSVRfQVVU
SDoNCisJY2FzZSBIQ0lfTElOS19XQUlUX0VOQ1JZUFQ6DQorCWNhc2UgSENJ
X0xJTktfV0FJVF9TRUNVUkU6DQogCWNhc2UgSENJX0xJTktfT1BFTjoNCiAJ
CWNwLmNvbl9oYW5kbGUgPSBodG9sZTE2KGxpbmstPmhsX2hhbmRsZSk7DQog
CQljcC5yZWFzb24gPSAweDEzOyAvKiAiUmVtb3RlIFVzZXIgVGVybWluYXRl
ZCBDb25uZWN0aW9uIiAqLw0KQEAgLTIzNSw2ICsyNDEsMTY4IEBADQogfQ0K
IA0KIC8qDQorICogSW5pdGlhdGUgYW55IExpbmsgTW9kZSBjaGFuZ2UgcmVx
dWVzdHMuDQorICovDQoraW50DQoraGNpX2FjbF9zZXRtb2RlKHN0cnVjdCBo
Y2lfbGluayAqbGluaykNCit7DQorCWludCBlcnI7DQorDQorCUtBU1NFUlQo
bGluayAhPSBOVUxMKTsNCisJS0FTU0VSVChsaW5rLT5obF91bml0ICE9IE5V
TEwpOw0KKw0KKwlpZiAobGluay0+aGxfc3RhdGUgIT0gSENJX0xJTktfT1BF
TikNCisJCXJldHVybiBFSU5QUk9HUkVTUzsNCisNCisJaWYgKChsaW5rLT5o
bF9mbGFncyAmIEhDSV9MSU5LX0FVVEhfUkVRKQ0KKwkgICAgJiYgIShsaW5r
LT5obF9mbGFncyAmIEhDSV9MSU5LX0FVVEgpKSB7DQorCQloY2lfYXV0aF9y
ZXFfY3AgY3A7DQorDQorCQlEUFJJTlRGKCJyZXF1ZXN0aW5nIGF1dGggZm9y
IGhhbmRsZSAjJWRcbiIsDQorCQkJbGluay0+aGxfaGFuZGxlKTsNCisNCisJ
CWxpbmstPmhsX3N0YXRlID0gSENJX0xJTktfV0FJVF9BVVRIOw0KKwkJY3Au
Y29uX2hhbmRsZSA9IGh0b2xlMTYobGluay0+aGxfaGFuZGxlKTsNCisJCWVy
ciA9IGhjaV9zZW5kX2NtZChsaW5rLT5obF91bml0LCBIQ0lfQ01EX0FVVEhf
UkVRLA0KKwkJCQkgICAmY3AsIHNpemVvZihjcCkpOw0KKw0KKwkJcmV0dXJu
IChlcnIgPT0gMCA/IEVJTlBST0dSRVNTIDogZXJyKTsNCisJfQ0KKw0KKwlp
ZiAoKGxpbmstPmhsX2ZsYWdzICYgSENJX0xJTktfRU5DUllQVF9SRVEpDQor
CSAgICAmJiAhKGxpbmstPmhsX2ZsYWdzICYgSENJX0xJTktfRU5DUllQVCkp
IHsNCisJCWhjaV9zZXRfY29uX2VuY3J5cHRpb25fY3AgY3A7DQorDQorCQkv
KiBYWFggd2Ugc2hvdWxkIGNoZWNrIGZlYXR1cmVzIGZvciBlbmNyeXB0aW9u
IGNhcGFiaWxpdHkgKi8NCisNCisJCURQUklOVEYoInJlcXVlc3RpbmcgZW5j
cnlwdGlvbiBmb3IgaGFuZGxlICMlZFxuIiwNCisJCQlsaW5rLT5obF9oYW5k
bGUpOw0KKw0KKwkJbGluay0+aGxfc3RhdGUgPSBIQ0lfTElOS19XQUlUX0VO
Q1JZUFQ7DQorCQljcC5jb25faGFuZGxlID0gaHRvbGUxNihsaW5rLT5obF9o
YW5kbGUpOw0KKwkJY3AuZW5jcnlwdGlvbl9lbmFibGUgPSAweDAxOw0KKw0K
KwkJZXJyID0gaGNpX3NlbmRfY21kKGxpbmstPmhsX3VuaXQsIEhDSV9DTURf
U0VUX0NPTl9FTkNSWVBUSU9OLA0KKwkJCQkgICAmY3AsIHNpemVvZihjcCkp
Ow0KKw0KKwkJcmV0dXJuIChlcnIgPT0gMCA/IEVJTlBST0dSRVNTIDogZXJy
KTsNCisJfQ0KKw0KKwlpZiAoKGxpbmstPmhsX2ZsYWdzICYgSENJX0xJTktf
U0VDVVJFX1JFUSkpIHsNCisJCWhjaV9jaGFuZ2VfY29uX2xpbmtfa2V5X2Nw
IGNwOw0KKw0KKwkJLyogYWx3YXlzIGNoYW5nZSBsaW5rIGtleSBmb3IgU0VD
VVJFIHJlcXVlc3RzICovDQorCQlsaW5rLT5obF9mbGFncyAmPSB+SENJX0xJ
TktfU0VDVVJFOw0KKw0KKwkJRFBSSU5URigiY2hhbmdpbmcgbGluayBrZXkg
Zm9yIGhhbmRsZSAjJWRcbiIsDQorCQkJbGluay0+aGxfaGFuZGxlKTsNCisN
CisJCWxpbmstPmhsX3N0YXRlID0gSENJX0xJTktfV0FJVF9TRUNVUkU7DQor
CQljcC5jb25faGFuZGxlID0gaHRvbGUxNihsaW5rLT5obF9oYW5kbGUpOw0K
Kw0KKwkJZXJyID0gaGNpX3NlbmRfY21kKGxpbmstPmhsX3VuaXQsIEhDSV9D
TURfQ0hBTkdFX0NPTl9MSU5LX0tFWSwNCisJCQkJICAgJmNwLCBzaXplb2Yo
Y3ApKTsNCisNCisJCXJldHVybiAoZXJyID09IDAgPyBFSU5QUk9HUkVTUyA6
IGVycik7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KKy8qDQorICog
TGluayBNb2RlIGNoYW5nZWQuDQorICoNCisgKiBUaGlzIGlzIGNhbGxlZCBm
cm9tIGV2ZW50IGhhbmRsZXJzIHdoZW4gdGhlIG1vZGUgY2hhbmdlDQorICog
aXMgY29tcGxldGUuIFdlIG5vdGlmeSB1cHN0cmVhbSBhbmQgcmVzdGFydCB0
aGUgbGluay4NCisgKi8NCit2b2lkDQoraGNpX2FjbF9saW5rbW9kZShzdHJ1
Y3QgaGNpX2xpbmsgKmxpbmspDQorew0KKwlzdHJ1Y3QgbDJjYXBfY2hhbm5l
bCAqY2hhbiwgKm5leHQ7DQorCWludCBlcnIsIG1vZGUgPSAwOw0KKw0KKwlE
UFJJTlRGKCJoYW5kbGUgIyVkLCBhdXRoICVzLCBlbmNyeXB0ICVzLCBzZWN1
cmUgJXNcbiIsDQorCQlsaW5rLT5obF9oYW5kbGUsDQorCQkobGluay0+aGxf
ZmxhZ3MgJiBIQ0lfTElOS19BVVRIID8gIm9uIiA6ICJvZmYiKSwNCisJCShs
aW5rLT5obF9mbGFncyAmIEhDSV9MSU5LX0VOQ1JZUFQgPyAib24iIDogIm9m
ZiIpLA0KKwkJKGxpbmstPmhsX2ZsYWdzICYgSENJX0xJTktfU0VDVVJFID8g
Im9uIiA6ICJvZmYiKSk7DQorDQorCWlmIChsaW5rLT5obF9mbGFncyAmIEhD
SV9MSU5LX0FVVEgpDQorCQltb2RlIHw9IEwyQ0FQX0xNX0FVVEg7DQorDQor
CWlmIChsaW5rLT5obF9mbGFncyAmIEhDSV9MSU5LX0VOQ1JZUFQpDQorCQlt
b2RlIHw9IEwyQ0FQX0xNX0VOQ1JZUFQ7DQorDQorCWlmIChsaW5rLT5obF9m
bGFncyAmIEhDSV9MSU5LX1NFQ1VSRSkNCisJCW1vZGUgfD0gTDJDQVBfTE1f
U0VDVVJFOw0KKw0KKwkvKg0KKwkgKiBUaGUgbGluayBzdGF0ZSB3aWxsIG9u
bHkgYmUgT1BFTiBoZXJlIGlmIHRoZSBtb2RlIGNoYW5nZQ0KKwkgKiB3YXMg
c3VjY2Vzc2Z1bC4gU28sIHdlIGNhbiBwcm9jZWVkIHdpdGggTDJDQVAgY29u
bmVjdGlvbnMsDQorCSAqIG9yIG5vdGlmeSBhbHJlYWR5IGVzdGFibHNoZWQg
Y2hhbm5lbHMsIHRvIGFsbG93IGFueSB0aGF0DQorCSAqIGFyZSBkaXNzYXRp
c2ZpZWQgdG8gZGlzY29ubmVjdCBiZWZvcmUgd2UgcmVzdGFydC4NCisJICov
DQorCW5leHQgPSBMSVNUX0ZJUlNUKCZsMmNhcF9hY3RpdmVfbGlzdCk7DQor
CXdoaWxlICgoY2hhbiA9IG5leHQpICE9IE5VTEwpIHsNCisJCW5leHQgPSBM
SVNUX05FWFQoY2hhbiwgbGNfbmNpZCk7DQorDQorCQlpZiAoY2hhbi0+bGNf
bGluayAhPSBsaW5rKQ0KKwkJCWNvbnRpbnVlOw0KKw0KKwkJc3dpdGNoKGNo
YW4tPmxjX3N0YXRlKSB7DQorCQljYXNlIEwyQ0FQX1dBSVRfU0VORF9DT05O
RUNUX1JFUTogLyogd2UgYXJlIGNvbm5lY3RpbmcgKi8NCisJCQlpZiAoKG1v
ZGUgJiBjaGFuLT5sY19tb2RlKSAhPSBjaGFuLT5sY19tb2RlKSB7DQorCQkJ
CWwyY2FwX2Nsb3NlKGNoYW4sIEVDT05OQUJPUlRFRCk7DQorCQkJCWJyZWFr
Ow0KKwkJCX0NCisNCisJCQljaGFuLT5sY19zdGF0ZSA9IEwyQ0FQX1dBSVRf
UkVDVl9DT05ORUNUX1JTUDsNCisJCQllcnIgPSBsMmNhcF9zZW5kX2Nvbm5l
Y3RfcmVxKGNoYW4pOw0KKwkJCWlmIChlcnIpIHsNCisJCQkJbDJjYXBfY2xv
c2UoY2hhbiwgZXJyKTsNCisJCQkJYnJlYWs7DQorCQkJfQ0KKwkJCWJyZWFr
Ow0KKw0KKwkJY2FzZSBMMkNBUF9XQUlUX1NFTkRfQ09OTkVDVF9SU1A6IC8q
IHRoZXkgYXJlIGNvbm5lY3RpbmcgKi8NCisJCQlpZiAoKG1vZGUgJiBjaGFu
LT5sY19tb2RlKSAhPSBjaGFuLT5sY19tb2RlKSB7DQorCQkJCWwyY2FwX3Nl
bmRfY29ubmVjdF9yc3AobGluaywgY2hhbi0+bGNfaWRlbnQsDQorCQkJCQkJ
CTAsIGNoYW4tPmxjX3JjaWQsDQorCQkJCQkJCUwyQ0FQX1NFQ1VSSVRZX0JM
T0NLKTsNCisNCisJCQkJbDJjYXBfY2xvc2UoY2hhbiwgRUNPTk5BQk9SVEVE
KTsNCisJCQkJYnJlYWs7DQorCQkJfQ0KKw0KKwkJCWwyY2FwX3NlbmRfY29u
bmVjdF9yc3AobGluaywgY2hhbi0+bGNfaWRlbnQsDQorCQkJCQkJY2hhbi0+
bGNfbGNpZCwgY2hhbi0+bGNfcmNpZCwNCisJCQkJCQlMMkNBUF9TVUNDRVNT
KTsNCisNCisJCQljaGFuLT5sY19zdGF0ZSA9IEwyQ0FQX1dBSVRfQ09ORklH
Ow0KKwkJCWNoYW4tPmxjX2ZsYWdzIHw9IChMMkNBUF9XQUlUX0NPTkZJR19S
U1AgfCBMMkNBUF9XQUlUX0NPTkZJR19SRVEpOw0KKwkJCWVyciA9IGwyY2Fw
X3NlbmRfY29uZmlnX3JlcShjaGFuKTsNCisJCQlpZiAoZXJyKSB7DQorCQkJ
CWwyY2FwX2Nsb3NlKGNoYW4sIGVycik7DQorCQkJCWJyZWFrOw0KKwkJCX0N
CisJCQlicmVhazsNCisNCisJCWNhc2UgTDJDQVBfV0FJVF9SRUNWX0NPTk5F
Q1RfUlNQOg0KKwkJY2FzZSBMMkNBUF9XQUlUX0NPTkZJRzoNCisJCWNhc2Ug
TDJDQVBfT1BFTjogLyogYWxyZWFkeSBlc3RhYmxpc2hlZCAqLw0KKwkJCSgq
Y2hhbi0+bGNfcHJvdG8tPmxpbmttb2RlKShjaGFuLT5sY191cHBlciwgbW9k
ZSk7DQorCQkJYnJlYWs7DQorDQorCQlkZWZhdWx0Og0KKwkJCWJyZWFrOw0K
KwkJfQ0KKwl9DQorDQorCWxpbmstPmhsX3N0YXRlID0gSENJX0xJTktfT1BF
TjsNCisJaGNpX2FjbF9zdGFydChsaW5rKTsNCit9DQorDQorLyoNCiAgKiBS
ZWNlaXZlIEFDTCBEYXRhDQogICoNCiAgKiB3ZSBhY2N1bXVsYXRlIHBhY2tl
dCBmcmFnbWVudHMgb24gdGhlIGhjaV9saW5rIHN0cnVjdHVyZQ0KQEAgLTQy
NSwxMiArNTkzLDEzIEBADQogLyoNCiAgKiBTdGFydCBzZW5kaW5nIEFDTCBk
YXRhIG9uIGxpbmsuDQogICoNCisgKglUaGlzIGlzIGNhbGxlZCB3aGVuIHRo
ZSBxdWV1ZSBtYXkgbmVlZCByZXN0YXJ0aW5nOiBhcyBuZXcgZGF0YQ0KKyAq
IGlzIHF1ZXVlZCwgYWZ0ZXIgbGluayBtb2RlIGNoYW5nZXMgaGF2ZSBjb21w
bGV0ZWQsIG9yIHdoZW4gZGV2aWNlDQorICogYnVmZmVycyBoYXZlIGNsZWFy
ZWQuDQorICoNCiAgKglXZSBtYXkgdXNlIGFsbCB0aGUgYXZhaWxhYmxlIHBh
Y2tldCBzbG90cy4gVGhlIHJlYXNvbiB0aGF0IHdlIGFkZA0KICAqIHRoZSBB
Q0wgZW5jYXBzdWxhdGlvbiBoZXJlIHJhdGhlciB0aGFuIGluIGhjaV9hY2xf
c2VuZCgpIGlzIHRoYXQgTDJDQVANCiAgKiBzaWduYWwgcGFja2V0cyBtYXkg
YmUgcXVldWVkIGJlZm9yZSB0aGUgaGFuZGxlIGlzIGdpdmVuIHRvIHVzLi4N
Ci0gKg0KLSAqIHRoaXMgaXMgY2FsbGVkIGZyb20gaGNpX2FjbF9zZW5kKCkg
YWJvdmUsIGFuZCB0aGUgZXZlbnQgcHJvY2Vzc2luZw0KLSAqIGNvZGUgKGZv
ciBDT05fQ09NUEwgYW5kIE5VTV9DT01QTF9QS1RTKQ0KICAqLw0KIHZvaWQN
CiBoY2lfYWNsX3N0YXJ0KHN0cnVjdCBoY2lfbGluayAqbGluaykNCkluZGV4
OiBzeXMvbmV0YnQvbDJjYXAuaA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
UkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvbmV0YnQvbDJjYXAuaCx2DQpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNA0KZGlmZiAtdSAtcjEuNCBsMmNhcC5o
DQotLS0gc3lzL25ldGJ0L2wyY2FwLmgJMTIgTWFyIDIwMDcgMjA6MzQ6NDYg
LTAwMDAJMS40DQorKysgc3lzL25ldGJ0L2wyY2FwLmgJMTMgQXByIDIwMDcg
MDA6MDc6MzQgLTAwMDANCkBAIC0zMzgsMTEgKzMzOCwxOCBAQA0KICAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8NCiANCi0jZGVmaW5lIFNPX0wyQ0FQX0lNVFUJCTEN
Ci0jZGVmaW5lIFNPX0wyQ0FQX09NVFUJCTINCi0jZGVmaW5lIFNPX0wyQ0FQ
X0lRT1MJCTMNCi0jZGVmaW5lIFNPX0wyQ0FQX09RT1MJCTQNCi0jZGVmaW5l
IFNPX0wyQ0FQX0ZMVVNICQk1DQorLyogU29ja2V0IG9wdGlvbnMgKi8NCisj
ZGVmaW5lIFNPX0wyQ0FQX0lNVFUJCTEJLyogaW5jb21pbmcgTVRVICovDQor
I2RlZmluZSBTT19MMkNBUF9PTVRVCQkyCS8qIG91dGdvaW5nIE1UVSAqLw0K
KyNkZWZpbmUgU09fTDJDQVBfSVFPUwkJMwkvKiBpbmNvbWluZyBRb1MgKi8N
CisjZGVmaW5lIFNPX0wyQ0FQX09RT1MJCTQJLyogb3V0Z29pbmcgUW9TICov
DQorI2RlZmluZSBTT19MMkNBUF9GTFVTSAkJNQkvKiBmbHVzaCB0aW1lb3V0
ICovDQorI2RlZmluZSBTT19MMkNBUF9MTQkJNgkvKiBsaW5rIG1vZGUgKi8N
CisNCisvKiBMMkNBUCBsaW5rIG1vZGUgZmxhZ3MgKi8NCisjZGVmaW5lIEwy
Q0FQX0xNX0FVVEgJCSgxPDwwKQkvKiB3YW50IGF1dGhlbnRpY2F0aW9uICov
DQorI2RlZmluZSBMMkNBUF9MTV9FTkNSWVBUCSgxPDwxKQkvKiB3YW50IGVu
Y3J5cHRpb24gKi8NCisjZGVmaW5lIEwyQ0FQX0xNX1NFQ1VSRQkJKDE8PDIp
CS8qIHdhbnQgc2VjdXJlZCBsaW5rICovDQogDQogI2lmZGVmIF9LRVJORUwN
CiANCkBAIC0zNjcsNiArMzc0LDcgQEANCiAJc3RydWN0IGhjaV9saW5rCQkq
bGNfbGluazsJLyogQUNMIGNvbm5lY3Rpb24gKGRvd24pICovDQogCXVpbnQx
Nl90CQkgbGNfc3RhdGU7CS8qIGNoYW5uZWwgc3RhdGUgKi8NCiAJdWludDE2
X3QJCSBsY19mbGFnczsJLyogY2hhbm5lbCBmbGFncyAqLw0KKwl1aW50OF90
CQkJIGxjX2lkZW50OwkvKiBjYWNoZWQgcmVxdWVzdCBpZCAqLw0KIA0KIAl1
aW50MTZfdAkJIGxjX2xjaWQ7CS8qIGxvY2FsIGNoYW5uZWwgSUQgKi8NCiAJ
c3RydWN0IHNvY2thZGRyX2J0CSBsY19sYWRkcjsJLyogbG9jYWwgYWRkcmVz
cyAqLw0KQEAgLTM3NCw2ICszODIsNyBAQA0KIAl1aW50MTZfdAkJIGxjX3Jj
aWQ7CS8qIHJlbW90ZSBjaGFubmVsIElEICovDQogCXN0cnVjdCBzb2NrYWRk
cl9idAkgbGNfcmFkZHI7CS8qIHJlbW90ZSBhZGRyZXNzICovDQogDQorCWlu
dAkJCSBsY19tb2RlOwkvKiBsaW5rIG1vZGUgKi8NCiAJdWludDE2X3QJCSBs
Y19pbXR1OwkvKiBpbmNvbWluZyBtdHUgKi8NCiAJdWludDE2X3QJCSBsY19v
bXR1OwkvKiBvdXRnb2luZyBtdHUgKi8NCiAJdWludDE2X3QJCSBsY19mbHVz
aDsJLyogZmx1c2ggdGltZW91dCAqLw0KQEAgLTM5MCwxMSArMzk5LDEzIEBA
DQogfTsNCiANCiAvKiBsMmNhcF9jaGFubmVsIHN0YXRlICovDQotI2RlZmlu
ZSBMMkNBUF9DTE9TRUQJCTAJLyogY2xvc2VkICovDQotI2RlZmluZSBMMkNB
UF9XQUlUX0NPTk5FQ1RfUlNQCTEJLyogaGF2ZSBzZW50IGNvbm5lY3QgcmVx
dWVzdCAqLw0KLSNkZWZpbmUgTDJDQVBfV0FJVF9DT05GSUcJMgkvKiB3YWl0
aW5nIGZvciBjb25maWd1cmF0aW9uICovDQotI2RlZmluZSBMMkNBUF9PUEVO
CQkzCS8qIHVzZXIgZGF0YSB0cmFuc2ZlciBzdGF0ZSAqLw0KLSNkZWZpbmUg
TDJDQVBfV0FJVF9ESVNDT05ORUNUCTQJLyogaGF2ZSBzZW50IGRpc2Nvbm5l
Y3QgcmVxdWVzdCAqLw0KKyNkZWZpbmUgTDJDQVBfQ0xPU0VECQkJMCAvKiBj
bG9zZWQgKi8NCisjZGVmaW5lIEwyQ0FQX1dBSVRfU0VORF9DT05ORUNUX1JF
UQkxIC8qIHdhaXRpbmcgdG8gc2VuZCBjb25uZWN0IHJlcXVlc3QgKi8NCisj
ZGVmaW5lIEwyQ0FQX1dBSVRfUkVDVl9DT05ORUNUX1JTUAkyIC8qIHdhaXRp
bmcgdG8gcmVjdiBjb25uZWN0IHJlc3BvbnNlICovDQorI2RlZmluZSBMMkNB
UF9XQUlUX1NFTkRfQ09OTkVDVF9SU1AJMyAvKiB3YWl0aW5nIHRvIHNlbmQg
Y29ubmVjdCByZXNwb25zZSAqLw0KKyNkZWZpbmUgTDJDQVBfV0FJVF9DT05G
SUcJCTQgLyogd2FpdGluZyBmb3IgY29uZmlndXJhdGlvbiAqLw0KKyNkZWZp
bmUgTDJDQVBfT1BFTgkJCTUgLyogdXNlciBkYXRhIHRyYW5zZmVyIHN0YXRl
ICovDQorI2RlZmluZSBMMkNBUF9XQUlUX0RJU0NPTk5FQ1QJCTYgLyogaGF2
ZSBzZW50IGRpc2Nvbm5lY3QgcmVxdWVzdCAqLw0KIA0KIC8qIGwyY2FwX2No
YW5uZWwgZmxhZ3MgKi8NCiAjZGVmaW5lIEwyQ0FQX1NIVVRET1dOCQkoMTw8
MCkJLyogY2hhbm5lbCBpcyBjbG9zaW5nICovDQpAQCAtNDM2LDYgKzQ0Nyw3
IEBADQogaW50IGwyY2FwX3N0YXJ0KHN0cnVjdCBsMmNhcF9jaGFubmVsICop
Ow0KIA0KIC8qIGwyY2FwX21pc2MuYyAqLw0KK2ludCBsMmNhcF9zZXRtb2Rl
KHN0cnVjdCBsMmNhcF9jaGFubmVsICopOw0KIGludCBsMmNhcF9jaWRfYWxs
b2Moc3RydWN0IGwyY2FwX2NoYW5uZWwgKik7DQogc3RydWN0IGwyY2FwX2No
YW5uZWwgKmwyY2FwX2NpZF9sb29rdXAodWludDE2X3QpOw0KIGludCBsMmNh
cF9yZXF1ZXN0X2FsbG9jKHN0cnVjdCBsMmNhcF9jaGFubmVsICosIHVpbnQ4
X3QpOw0KQEAgLTQ0OCw2ICs0NjAsNyBAQA0KIGludCBsMmNhcF9zZW5kX2Nv
bm5lY3RfcmVxKHN0cnVjdCBsMmNhcF9jaGFubmVsICopOw0KIGludCBsMmNh
cF9zZW5kX2NvbmZpZ19yZXEoc3RydWN0IGwyY2FwX2NoYW5uZWwgKik7DQog
aW50IGwyY2FwX3NlbmRfZGlzY29ubmVjdF9yZXEoc3RydWN0IGwyY2FwX2No
YW5uZWwgKik7DQoraW50IGwyY2FwX3NlbmRfY29ubmVjdF9yc3Aoc3RydWN0
IGhjaV9saW5rICosIHVpbnQ4X3QsIHVpbnQxNl90LCB1aW50MTZfdCwgdWlu
dDE2X3QpOw0KIA0KIC8qIGwyY2FwX3NvY2tldC5jICovDQogaW50IGwyY2Fw
X3VzcnJlcShzdHJ1Y3Qgc29ja2V0ICosIGludCwgc3RydWN0IG1idWYgKiwg
c3RydWN0IG1idWYgKiwgc3RydWN0IG1idWYgKiwgc3RydWN0IGx3cCAqKTsN
CkluZGV4OiBzeXMvbmV0YnQvbDJjYXBfbG93ZXIuYw0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvbmV0YnQv
bDJjYXBfbG93ZXIuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQ0KZGlm
ZiAtdSAtcjEuNSBsMmNhcF9sb3dlci5jDQotLS0gc3lzL25ldGJ0L2wyY2Fw
X2xvd2VyLmMJMzAgTWFyIDIwMDcgMjA6NDc6MDMgLTAwMDAJMS41DQorKysg
c3lzL25ldGJ0L2wyY2FwX2xvd2VyLmMJMTMgQXByIDIwMDcgMDA6MDc6MzQg
LTAwMDANCkBAIC01OCw2ICs1OCw3IEBADQogICogQ29uZmlnIGZhaWxlZA0K
ICAqIE90aGVyIGVuZCByZXBvcnRlZCBpbnZhbGlkIENJRA0KICAqIE5vcm1h
bCBkaXNjb25uZWN0aW9uDQorICogQ2hhbmdlIGxpbmsgbW9kZSBmYWlsZWQN
CiAgKi8NCiB2b2lkDQogbDJjYXBfY2xvc2Uoc3RydWN0IGwyY2FwX2NoYW5u
ZWwgKmNoYW4sIGludCBlcnIpDQpJbmRleDogc3lzL25ldGJ0L2wyY2FwX21p
c2MuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNy
b290L3NyYy9zeXMvbmV0YnQvbDJjYXBfbWlzYy5jLHYNCnJldHJpZXZpbmcg
cmV2aXNpb24gMS4yDQpkaWZmIC11IC1yMS4yIGwyY2FwX21pc2MuYw0KLS0t
IHN5cy9uZXRidC9sMmNhcF9taXNjLmMJMTIgTWFyIDIwMDcgMTg6MTg6MzUg
LTAwMDAJMS4yDQorKysgc3lzL25ldGJ0L2wyY2FwX21pc2MuYwkxMyBBcHIg
MjAwNyAwMDowNzo0NCAtMDAwMA0KQEAgLTcxLDYgKzcxLDMzIEBADQogaW50
IGwyY2FwX3Jlc3BvbnNlX2V4dGVuZGVkX3RpbWVvdXQgPSAxODA7CS8qIHNl
Y29uZHMgKi8NCiANCiAvKg0KKyAqIFNldCBMaW5rIE1vZGUgb24gY2hhbm5l
bA0KKyAqLw0KK2ludA0KK2wyY2FwX3NldG1vZGUoc3RydWN0IGwyY2FwX2No
YW5uZWwgKmNoYW4pDQorew0KKw0KKwlLQVNTRVJUKGNoYW4gIT0gTlVMTCk7
DQorCUtBU1NFUlQoY2hhbi0+bGNfbGluayAhPSBOVUxMKTsNCisNCisJRFBS
SU5URigiQ0lEICMlZCwgYXV0aCAlcywgZW5jcnlwdCAlcywgc2VjdXJlICVz
XG4iLCBjaGFuLT5sY19sY2lkLA0KKwkJKGNoYW4tPmxjX21vZGUgJiBMMkNB
UF9MTV9BVVRIID8gInllcyIgOiAibm8iKSwNCisJCShjaGFuLT5sY19tb2Rl
ICYgTDJDQVBfTE1fRU5DUllQVCA/ICJ5ZXMiIDogIm5vIiksDQorCQkoY2hh
bi0+bGNfbW9kZSAmIEwyQ0FQX0xNX1NFQ1VSRSA/ICJ5ZXMiIDogIm5vIikp
Ow0KKw0KKwlpZiAoY2hhbi0+bGNfbW9kZSAmIEwyQ0FQX0xNX0FVVEgpDQor
CQljaGFuLT5sY19saW5rLT5obF9mbGFncyB8PSBIQ0lfTElOS19BVVRIX1JF
UTsNCisNCisJaWYgKGNoYW4tPmxjX21vZGUgJiBMMkNBUF9MTV9FTkNSWVBU
KQ0KKwkJY2hhbi0+bGNfbGluay0+aGxfZmxhZ3MgfD0gSENJX0xJTktfRU5D
UllQVF9SRVE7DQorDQorCWlmIChjaGFuLT5sY19tb2RlICYgTDJDQVBfTE1f
U0VDVVJFKQ0KKwkJY2hhbi0+bGNfbGluay0+aGxfZmxhZ3MgfD0gSENJX0xJ
TktfU0VDVVJFX1JFUTsNCisNCisJcmV0dXJuIGhjaV9hY2xfc2V0bW9kZShj
aGFuLT5sY19saW5rKTsNCit9DQorDQorLyoNCiAgKiBBbGxvY2F0ZSBhIG5l
dyBSZXF1ZXN0IHN0cnVjdHVyZSAmIElEIGFuZCBzZXQgdGhlIHRpbWVyIGdv
aW5nDQogICovDQogaW50DQpJbmRleDogc3lzL25ldGJ0L2wyY2FwX3NpZ25h
bC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jv
b3Qvc3JjL3N5cy9uZXRidC9sMmNhcF9zaWduYWwuYyx2DQpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNg0KZGlmZiAtdSAtcjEuNiBsMmNhcF9zaWduYWwuYw0K
LS0tIHN5cy9uZXRidC9sMmNhcF9zaWduYWwuYwkxNSBNYXIgMjAwNyAxOTo0
Nzo1MSAtMDAwMAkxLjYNCisrKyBzeXMvbmV0YnQvbDJjYXBfc2lnbmFsLmMJ
MTMgQXByIDIwMDcgMDA6MDc6NDQgLTAwMDANCkBAIC0yNDAsNyArMjQwLDYg
QEANCiAJc3RydWN0IGwyY2FwX2NoYW5uZWwgKmNoYW4sICpuZXc7DQogCWwy
Y2FwX2NtZF9oZHJfdCBjbWQ7DQogCWwyY2FwX2Nvbl9yZXFfY3AgY3A7DQot
CWwyY2FwX2Nvbl9yc3BfY3AgcnA7DQogCWludCBlcnI7DQogDQogCS8qIGV4
dHJhY3QgY21kICovDQpAQCAtMjUxLDIwICsyNTAsMTkgQEANCiAJbV9jb3B5
ZGF0YShtLCAwLCBzaXplb2YoY3ApLCAmY3ApOw0KIAltX2FkaihtLCBzaXpl
b2YoY3ApKTsNCiANCi0JLyogaW5pdCByZXNwb25zZSAqLw0KLQltZW1zZXQo
JnJwLCAwLCBzaXplb2YocnApKTsNCi0JcnAuc2NpZCA9IGNwLnNjaWQ7DQor
CWNwLnNjaWQgPSBsZTE2dG9oKGNwLnNjaWQpOw0KKwljcC5wc20gPSBsZTE2
dG9oKGNwLnBzbSk7DQogDQogCW1lbXNldCgmbGFkZHIsIDAsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfYnQpKTsNCiAJbGFkZHIuYnRfbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9idCk7DQogCWxhZGRyLmJ0X2ZhbWlseSA9IEFG
X0JMVUVUT09USDsNCi0JbGFkZHIuYnRfcHNtID0gbGUxNnRvaChjcC5wc20p
Ow0KKwlsYWRkci5idF9wc20gPSBjcC5wc207DQogCWJkYWRkcl9jb3B5KCZs
YWRkci5idF9iZGFkZHIsICZsaW5rLT5obF91bml0LT5oY2lfYmRhZGRyKTsN
CiANCiAJbWVtc2V0KCZyYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9idCkpOw0KIAlyYWRkci5idF9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2J0KTsNCiAJcmFkZHIuYnRfZmFtaWx5ID0gQUZfQkxVRVRPT1RIOw0K
LQlyYWRkci5idF9wc20gPSBsZTE2dG9oKGNwLnBzbSk7DQorCXJhZGRyLmJ0
X3BzbSA9IGNwLnBzbTsNCiAJYmRhZGRyX2NvcHkoJnJhZGRyLmJ0X2JkYWRk
ciwgJmxpbmstPmhsX2JkYWRkcik7DQogDQogCUxJU1RfRk9SRUFDSChjaGFu
LCAmbDJjYXBfbGlzdGVuX2xpc3QsIGxjX25jaWQpIHsNCkBAIC0yODIsOSAr
MjgwLDEwIEBADQogDQogCQllcnIgPSBsMmNhcF9jaWRfYWxsb2MobmV3KTsN
CiAJCWlmIChlcnIpIHsNCi0JCQlycC5yZXN1bHQgPSBodG9sZTE2KEwyQ0FQ
X05PX1JFU09VUkNFUyk7DQotCQkJbDJjYXBfc2VuZF9zaWduYWwobGluaywg
TDJDQVBfQ09OTkVDVF9SU1AsDQotCQkJCQkJY21kLmlkZW50LCBzaXplb2Yo
cnApLCAmcnApOw0KKwkJCWwyY2FwX3NlbmRfY29ubmVjdF9yc3AobGluaywg
Y21kLmlkZW50LA0KKwkJCQkJCTAsIGNwLnNjaWQsDQorCQkJCQkJTDJDQVBf
Tk9fUkVTT1VSQ0VTKTsNCisNCiAJCQkoKm5ldy0+bGNfcHJvdG8tPmRpc2Nv
bm5lY3RlZCkobmV3LT5sY191cHBlciwgZXJyKTsNCiAJCQlyZXR1cm47DQog
CQl9DQpAQCAtMjkyLDI0ICsyOTEsNTMgQEANCiAJCW5ldy0+bGNfbGluayA9
IGhjaV9hY2xfb3BlbihsaW5rLT5obF91bml0LCAmbGluay0+aGxfYmRhZGRy
KTsNCiAJCUtBU1NFUlQobmV3LT5sY19saW5rID09IGxpbmspOw0KIA0KLQkJ
bmV3LT5sY19yY2lkID0gbGUxNnRvaChjcC5zY2lkKTsNCisJCW5ldy0+bGNf
cmNpZCA9IGNwLnNjaWQ7DQorCQluZXctPmxjX2lkZW50ID0gY21kLmlkZW50
Ow0KIA0KIAkJbWVtY3B5KCZuZXctPmxjX2xhZGRyLCAmbGFkZHIsIHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfYnQpKTsNCiAJCW1lbWNweSgmbmV3LT5sY19y
YWRkciwgJnJhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2J0KSk7DQog
DQotCQlycC5kY2lkID0gaHRvbGUxNihuZXctPmxjX2xjaWQpOw0KLQkJcnAu
cmVzdWx0ID0gaHRvbGUxNihMMkNBUF9TVUNDRVNTKTsNCi0JCWwyY2FwX3Nl
bmRfc2lnbmFsKGxpbmssIEwyQ0FQX0NPTk5FQ1RfUlNQLCBjbWQuaWRlbnQs
DQotCQkJCQkJc2l6ZW9mKHJwKSwgJnJwKTsNCisJCW5ldy0+bGNfbW9kZSA9
IGNoYW4tPmxjX21vZGU7DQorDQorCQllcnIgPSBsMmNhcF9zZXRtb2RlKG5l
dyk7DQorCQlpZiAoZXJyID09IEVJTlBST0dSRVNTKSB7DQorCQkJbmV3LT5s
Y19zdGF0ZSA9IEwyQ0FQX1dBSVRfU0VORF9DT05ORUNUX1JTUDsNCisJCQko
Km5ldy0+bGNfcHJvdG8tPmNvbm5lY3RpbmcpKG5ldy0+bGNfdXBwZXIpOw0K
KwkJCXJldHVybjsNCisJCX0NCisJCWlmIChlcnIpIHsNCisJCQluZXctPmxj
X3N0YXRlID0gTDJDQVBfQ0xPU0VEOw0KKwkJCWhjaV9hY2xfY2xvc2UobGlu
aywgZXJyKTsNCisJCQluZXctPmxjX2xpbmsgPSBOVUxMOw0KKw0KKwkJCWwy
Y2FwX3NlbmRfY29ubmVjdF9yc3AobGluaywgY21kLmlkZW50LA0KKwkJCQkJ
CTAsIGNwLnNjaWQsDQorCQkJCQkJTDJDQVBfTk9fUkVTT1VSQ0VTKTsNCisN
CisJCQkoKm5ldy0+bGNfcHJvdG8tPmRpc2Nvbm5lY3RlZCkobmV3LT5sY191
cHBlciwgZXJyKTsNCisJCQlyZXR1cm47DQorCQl9DQorDQorCQllcnIgPSBs
MmNhcF9zZW5kX2Nvbm5lY3RfcnNwKGxpbmssIGNtZC5pZGVudCwNCisJCQkJ
CSAgICAgIG5ldy0+bGNfbGNpZCwgbmV3LT5sY19yY2lkLA0KKwkJCQkJICAg
ICAgTDJDQVBfU1VDQ0VTUyk7DQorCQlpZiAoZXJyKSB7DQorCQkJbDJjYXBf
Y2xvc2UobmV3LCBlcnIpOw0KKwkJCXJldHVybjsNCisJCX0NCiANCiAJCW5l
dy0+bGNfc3RhdGUgPSBMMkNBUF9XQUlUX0NPTkZJRzsNCiAJCW5ldy0+bGNf
ZmxhZ3MgfD0gKEwyQ0FQX1dBSVRfQ09ORklHX1JFUSB8IEwyQ0FQX1dBSVRf
Q09ORklHX1JTUCk7DQotCQlsMmNhcF9zZW5kX2NvbmZpZ19yZXEobmV3KTsN
CisJCWVyciA9IGwyY2FwX3NlbmRfY29uZmlnX3JlcShuZXcpOw0KKwkJaWYg
KGVycikNCisJCQlsMmNhcF9jbG9zZShuZXcsIGVycik7DQorDQogCQlyZXR1
cm47DQogCX0NCiANCi0JcnAucmVzdWx0ID0gaHRvbGUxNihMMkNBUF9QU01f
Tk9UX1NVUFBPUlRFRCk7DQotCWwyY2FwX3NlbmRfc2lnbmFsKGxpbmssIEwy
Q0FQX0NPTk5FQ1RfUlNQLCBjbWQuaWRlbnQsIHNpemVvZihycCksICZycCk7
DQorCWwyY2FwX3NlbmRfY29ubmVjdF9yc3AobGluaywgY21kLmlkZW50LA0K
KwkJCQkwLCBjcC5zY2lkLA0KKwkJCQlMMkNBUF9QU01fTk9UX1NVUFBPUlRF
RCk7DQogfQ0KIA0KIC8qDQpAQCAtMzQxLDcgKzM2OSw3IEBADQogCWlmIChj
aGFuICE9IE5VTEwgJiYgY2hhbi0+bGNfbGNpZCAhPSBjcC5zY2lkKQ0KIAkJ
cmV0dXJuOw0KIA0KLQlpZiAoY2hhbiA9PSBOVUxMIHx8IGNoYW4tPmxjX3N0
YXRlICE9IEwyQ0FQX1dBSVRfQ09OTkVDVF9SU1ApIHsNCisJaWYgKGNoYW4g
PT0gTlVMTCB8fCBjaGFuLT5sY19zdGF0ZSAhPSBMMkNBUF9XQUlUX1JFQ1Zf
Q09OTkVDVF9SU1ApIHsNCiAJCWwyY2FwX3JlcXVlc3RfZnJlZShyZXEpOw0K
IAkJcmV0dXJuOw0KIAl9DQpAQCAtMTA2MywzICsxMDkxLDE5IEBADQogCXJl
dHVybiBsMmNhcF9zZW5kX3NpZ25hbChjaGFuLT5sY19saW5rLCBMMkNBUF9E
SVNDT05ORUNUX1JFUSwNCiAJCQkJICAgIGNoYW4tPmxjX2xpbmstPmhsX2xh
c3RpZCwgc2l6ZW9mKGNwKSwgJmNwKTsNCiB9DQorDQorLyoNCisgKiBTZW5k
IENvbm5lY3QgUmVzcG9uc2UNCisgKi8NCitpbnQNCitsMmNhcF9zZW5kX2Nv
bm5lY3RfcnNwKHN0cnVjdCBoY2lfbGluayAqbGluaywgdWludDhfdCBpZGVu
dCwgdWludDE2X3QgZGNpZCwgdWludDE2X3Qgc2NpZCwgdWludDE2X3QgcmVz
dWx0KQ0KK3sNCisJbDJjYXBfY29uX3JzcF9jcCBjcDsNCisNCisJbWVtc2V0
KCZjcCwgMCwgc2l6ZW9mKGNwKSk7DQorCWNwLmRjaWQgPSBodG9sZTE2KGRj
aWQpOw0KKwljcC5zY2lkID0gaHRvbGUxNihzY2lkKTsNCisJY3AucmVzdWx0
ID0gaHRvbGUxNihyZXN1bHQpOw0KKw0KKwlyZXR1cm4gbDJjYXBfc2VuZF9z
aWduYWwobGluaywgTDJDQVBfQ09OTkVDVF9SU1AsIGlkZW50LCBzaXplb2Yo
Y3ApLCAmY3ApOw0KK30NCkluZGV4OiBzeXMvbmV0YnQvbDJjYXBfc29ja2V0
LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvY3Zzcm9v
dC9zcmMvc3lzL25ldGJ0L2wyY2FwX3NvY2tldC5jLHYNCnJldHJpZXZpbmcg
cmV2aXNpb24gMS42DQpkaWZmIC11IC1yMS42IGwyY2FwX3NvY2tldC5jDQot
LS0gc3lzL25ldGJ0L2wyY2FwX3NvY2tldC5jCTMxIE1hciAyMDA3IDE4OjE3
OjEzIC0wMDAwCTEuNg0KKysrIHN5cy9uZXRidC9sMmNhcF9zb2NrZXQuYwkx
MyBBcHIgMjAwNyAwMDowNzo0NCAtMDAwMA0KQEAgLTY1LDYgKzY1LDcgQEAN
CiBzdGF0aWMgdm9pZCBsMmNhcF9kaXNjb25uZWN0ZWQodm9pZCAqLCBpbnQp
Ow0KIHN0YXRpYyB2b2lkICpsMmNhcF9uZXdjb25uKHZvaWQgKiwgc3RydWN0
IHNvY2thZGRyX2J0ICosIHN0cnVjdCBzb2NrYWRkcl9idCAqKTsNCiBzdGF0
aWMgdm9pZCBsMmNhcF9jb21wbGV0ZSh2b2lkICosIGludCk7DQorc3RhdGlj
IHZvaWQgbDJjYXBfbGlua21vZGUodm9pZCAqLCBpbnQpOw0KIHN0YXRpYyB2
b2lkIGwyY2FwX2lucHV0KHZvaWQgKiwgc3RydWN0IG1idWYgKik7DQogDQog
c3RhdGljIGNvbnN0IHN0cnVjdCBidHByb3RvIGwyY2FwX3Byb3RvID0gew0K
QEAgLTczLDcgKzc0LDggQEANCiAJbDJjYXBfZGlzY29ubmVjdGVkLA0KIAls
MmNhcF9uZXdjb25uLA0KIAlsMmNhcF9jb21wbGV0ZSwNCi0JbDJjYXBfaW5w
dXQNCisJbDJjYXBfbGlua21vZGUsDQorCWwyY2FwX2lucHV0LA0KIH07DQog
DQogLyogc3lzY3RsIHZhcmlhYmxlcyAqLw0KQEAgLTM2Miw2ICszNjQsMjQg
QEANCiB9DQogDQogc3RhdGljIHZvaWQNCitsMmNhcF9saW5rbW9kZSh2b2lk
ICphcmcsIGludCBuZXcpDQorew0KKwlzdHJ1Y3Qgc29ja2V0ICpzbyA9IGFy
ZzsNCisJaW50IG1vZGU7DQorDQorCURQUklOVEYoImF1dGggJXMsIGVuY3J5
cHQgJXMsIHNlY3VyZSAlc1xuIiwNCisJCShuZXcgJiBMMkNBUF9MTV9BVVRI
ID8gIm9uIiA6ICJvZmYiKSwNCisJCShuZXcgJiBMMkNBUF9MTV9FTkNSWVBU
ID8gIm9uIiA6ICJvZmYiKSwNCisJCShuZXcgJiBMMkNBUF9MTV9TRUNVUkUg
PyAib24iIDogIm9mZiIpKTsNCisNCisJKHZvaWQpbDJjYXBfZ2V0b3B0KHNv
LT5zb19wY2IsIFNPX0wyQ0FQX0xNLCAmbW9kZSk7DQorCWlmICgoKG1vZGUg
JiBMMkNBUF9MTV9BVVRIKSAmJiAhKG5ldyAmIEwyQ0FQX0xNX0FVVEgpKQ0K
KwkgICAgfHwgKChtb2RlICYgTDJDQVBfTE1fRU5DUllQVCkgJiYgIShuZXcg
JiBMMkNBUF9MTV9FTkNSWVBUKSkNCisJICAgIHx8ICgobW9kZSAmIEwyQ0FQ
X0xNX1NFQ1VSRSkgJiYgIShuZXcgJiBMMkNBUF9MTV9TRUNVUkUpKSkNCisJ
CWwyY2FwX2Rpc2Nvbm5lY3Qoc28tPnNvX3BjYiwgMCk7DQorfQ0KKw0KK3N0
YXRpYyB2b2lkDQogbDJjYXBfaW5wdXQodm9pZCAqYXJnLCBzdHJ1Y3QgbWJ1
ZiAqbSkNCiB7DQogCXN0cnVjdCBzb2NrZXQgKnNvID0gYXJnOw0KSW5kZXg6
IHN5cy9uZXRidC9sMmNhcF91cHBlci5jDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9uZXRidC9sMmNhcF91
cHBlci5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS42DQpkaWZmIC11IC1y
MS42IGwyY2FwX3VwcGVyLmMNCi0tLSBzeXMvbmV0YnQvbDJjYXBfdXBwZXIu
Ywk2IEFwciAyMDA3IDE3OjA5OjAwIC0wMDAwCTEuNg0KKysrIHN5cy9uZXRi
dC9sMmNhcF91cHBlci5jCTEzIEFwciAyMDA3IDAwOjA3OjQ0IC0wMDAwDQpA
QCAtMTc2LDIxICsxNzYsMzMgQEANCiAJaWYgKGNoYW4tPmxjX2xpbmsgPT0g
TlVMTCkNCiAJCXJldHVybiBFSE9TVFVOUkVBQ0g7DQogDQorCS8qIHNldCB0
aGUgbGluayBtb2RlICovDQorCWVyciA9IGwyY2FwX3NldG1vZGUoY2hhbik7
DQorCWlmIChlcnIgPT0gRUlOUFJPR1JFU1MpIHsNCisJCWNoYW4tPmxjX3N0
YXRlID0gTDJDQVBfV0FJVF9TRU5EX0NPTk5FQ1RfUkVROw0KKwkJKCpjaGFu
LT5sY19wcm90by0+Y29ubmVjdGluZykoY2hhbi0+bGNfdXBwZXIpOw0KKwkJ
cmV0dXJuIDA7DQorCX0NCisJaWYgKGVycikNCisJCWdvdG8gZmFpbDsNCisN
CiAJLyoNCi0JICogV2UgcXVldWUgYSBjb25uZWN0IHJlcXVlc3QgcmlnaHQg
YXdheSBldmVuIHRob3VnaCB0aGUgbGluaw0KLQkgKiBtYXkgbm90IHlldCBi
ZSBvcGVuOyB0aGUgcXVldWUgd2lsbCBiZSBzdGFydGVkIGF1dG9tYXRpY2Fs
bHkNCi0JICogYXQgdGhlIHJpZ2h0IHRpbWUuDQorCSAqIFdlIGNhbiBxdWV1
ZSBhIGNvbm5lY3QgcmVxdWVzdCBub3cgZXZlbiB0aG91Z2ggdGhlIGxpbmsg
bWF5DQorCSAqIG5vdCB5ZXQgYmUgb3BlbjsgT3VyIG1vZGUgc2V0dGluZyBp
cyBhc3N1cmVkLCBhbmQgdGhlIHF1ZXVlDQorCSAqIHdpbGwgYmUgc3RhcnRl
ZCBhdXRvbWF0aWNhbGx5IGF0IHRoZSByaWdodCB0aW1lLg0KIAkgKi8NCi0J
Y2hhbi0+bGNfc3RhdGUgPSBMMkNBUF9XQUlUX0NPTk5FQ1RfUlNQOw0KKwlj
aGFuLT5sY19zdGF0ZSA9IEwyQ0FQX1dBSVRfUkVDVl9DT05ORUNUX1JTUDsN
CiAJZXJyID0gbDJjYXBfc2VuZF9jb25uZWN0X3JlcShjaGFuKTsNCi0JaWYg
KGVycikgew0KLQkJY2hhbi0+bGNfc3RhdGUgPSBMMkNBUF9DTE9TRUQ7DQot
CQloY2lfYWNsX2Nsb3NlKGNoYW4tPmxjX2xpbmssIGVycik7DQotCQljaGFu
LT5sY19saW5rID0gTlVMTDsNCi0JCXJldHVybiBlcnI7DQotCX0NCisJaWYg
KGVycikNCisJCWdvdG8gZmFpbDsNCiANCiAJcmV0dXJuIDA7DQorDQorZmFp
bDoNCisJY2hhbi0+bGNfc3RhdGUgPSBMMkNBUF9DTE9TRUQ7DQorCWhjaV9h
Y2xfY2xvc2UoY2hhbi0+bGNfbGluaywgZXJyKTsNCisJY2hhbi0+bGNfbGlu
ayA9IE5VTEw7DQorCXJldHVybiBlcnI7DQogfQ0KIA0KIC8qDQpAQCAtMzk1
LDE1ICs0MDcsMjIgQEANCiB9DQogDQogLyoNCi0gKiBsMmNhcF9zZXRvcHQo
Y2hhbm5lbCwgb3B0LCBhZGRyKQ0KKyAqIGwyY2FwX3NldG9wdChsMmNhcF9j
aGFubmVsLCBvcHQsIGFkZHIpDQogICoNCiAgKglBcHBseSBjb25maWd1cmF0
aW9uIG9wdGlvbnMgdG8gY2hhbm5lbC4gVGhpcyBjb3JyZXNwb25kcyB0bw0K
ICAqCSJDb25maWd1cmUgQ2hhbm5lbCBSZXF1ZXN0IiBpbiB0aGUgTDJDQVAg
c3BlY2lmaWNhdGlvbi4NCisgKg0KKyAqCWZvciBTT19MMkNBUF9MTSwgdGhl
IHNldHRpbmdzIHdpbGwgdGFrZSBlZmZlY3Qgd2hlbiB0aGUNCisgKgljaGFu
bmVsIGlzIGVzdGFibGlzaGVkLiBJZiB0aGUgY2hhbm5lbCBpcyBhbHJlYWR5
IG9wZW4sDQorICoJYSBjYWxsIHRvDQorICoJCXByb3RvLT5saW5rbW9kZSh1
cHBlciwgbmV3KQ0KKyAqDQorICoJd2lsbCBiZSBtYWRlIHdoZW4gdGhlIGNo
YW5nZSBpcyBjb21wbGV0ZS4NCiAgKi8NCiBpbnQNCiBsMmNhcF9zZXRvcHQo
c3RydWN0IGwyY2FwX2NoYW5uZWwgKmNoYW4sIGludCBvcHQsIHZvaWQgKmFk
ZHIpDQogew0KLQlpbnQgZXJyID0gMDsNCisJaW50IG1vZGUsIGVyciA9IDA7
DQogCXVpbnQxNl90IG10dTsNCiANCiAJc3dpdGNoIChvcHQpIHsNCkBAIC00
MTgsNiArNDM3LDIzIEBADQogDQogCQlicmVhazsNCiANCisJY2FzZSBTT19M
MkNBUF9MTToJLyogc2V0IGxpbmsgbW9kZSAqLw0KKwkJbW9kZSA9ICooaW50
ICopYWRkcjsNCisJCW1vZGUgJj0gKEwyQ0FQX0xNX1NFQ1VSRSB8IEwyQ0FQ
X0xNX0VOQ1JZUFQgfCBMMkNBUF9MTV9BVVRIKTsNCisNCisJCWlmIChtb2Rl
ICYgTDJDQVBfTE1fU0VDVVJFKQ0KKwkJCW1vZGUgfD0gTDJDQVBfTE1fRU5D
UllQVDsNCisNCisJCWlmIChtb2RlICYgTDJDQVBfTE1fRU5DUllQVCkNCisJ
CQltb2RlIHw9IEwyQ0FQX0xNX0FVVEg7DQorDQorCQljaGFuLT5sY19tb2Rl
ID0gbW9kZTsNCisNCisJCWlmIChjaGFuLT5sY19zdGF0ZSA9PSBMMkNBUF9P
UEVOKQ0KKwkJCWVyciA9IGwyY2FwX3NldG1vZGUoY2hhbik7DQorDQorCQli
cmVhazsNCisNCiAJY2FzZSBTT19MMkNBUF9PUU9TOgkvKiBzZXQgT3V0Z29p
bmcgUW9TIGZsb3cgc3BlYyAqLw0KIAljYXNlIFNPX0wyQ0FQX0ZMVVNIOgkv
KiBzZXQgT3V0Z29pbmcgRmx1c2ggVGltZW91dCAqLw0KIAlkZWZhdWx0Og0K
QEAgLTQyOCw2ICs0NjQsMTEgQEANCiAJcmV0dXJuIGVycjsNCiB9DQogDQor
LyoNCisgKiBsMmNhcF9nZXRvcHQobDJjYXBfY2hhbm5lbCwgb3B0LCBhZGRy
KQ0KKyAqDQorICoJUmV0dXJuIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4N
CisgKi8NCiBpbnQNCiBsMmNhcF9nZXRvcHQoc3RydWN0IGwyY2FwX2NoYW5u
ZWwgKmNoYW4sIGludCBvcHQsIHZvaWQgKmFkZHIpDQogew0KQEAgLTQ1Myw2
ICs0OTQsMTAgQEANCiAJCSoodWludDE2X3QgKilhZGRyID0gY2hhbi0+bGNf
Zmx1c2g7DQogCQlyZXR1cm4gc2l6ZW9mKHVpbnQxNl90KTsNCiANCisJY2Fz
ZSBTT19MMkNBUF9MTToJLyogZ2V0IGxpbmsgbW9kZSAqLw0KKwkJKihpbnQg
KilhZGRyID0gY2hhbi0+bGNfbW9kZTsNCisJCXJldHVybiBzaXplb2YoaW50
KTsNCisNCiAJZGVmYXVsdDoNCiAJCWJyZWFrOw0KIAl9DQpJbmRleDogc3lz
L25ldGJ0L3JmY29tbS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1Mg
ZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9uZXRidC9yZmNvbW0uaCx2DQpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMg0KZGlmZiAtdSAtcjEuMiByZmNvbW0uaA0K
LS0tIHN5cy9uZXRidC9yZmNvbW0uaAkxIE9jdCAyMDA2IDA2OjA4OjA4IC0w
MDAwCTEuMg0KKysrIHN5cy9uZXRidC9yZmNvbW0uaAkxMyBBcHIgMjAwNyAw
MDowNzo0NCAtMDAwMA0KQEAgLTIzNiw4ICsyMzYsMTAgQEANCiAgKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKg0KICAqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLw0KIA0KKy8qIFNvY2tldCBvcHRpb25zICovDQogI2RlZmlu
ZSBTT19SRkNPTU1fTVRVCQkxCS8qIG10dSAqLw0KICNkZWZpbmUgU09fUkZD
T01NX0ZDX0lORk8JMgkvKiBmbG93IGNvbnRyb2wgaW5mbyAoYmVsb3cpICov
DQorI2RlZmluZSBTT19SRkNPTU1fTE0JCTMJLyogbGluayBtb2RlICovDQog
DQogLyogRmxvdyBjb250cm9sIGluZm9ybWF0aW9uICovDQogc3RydWN0IHJm
Y29tbV9mY19pbmZvIHsNCkBAIC0yNDksNiArMjUxLDExIEBADQogCXVpbnQ4
X3QJCXJlc2VydmVkOw0KIH07DQogDQorLyogUkZDT01NIGxpbmsgbW9kZSBm
bGFncyAqLw0KKyNkZWZpbmUgUkZDT01NX0xNX0FVVEgJCSgxPDwwKQkvKiB3
YW50IGF1dGhlbnRpY2F0aW9uICovDQorI2RlZmluZSBSRkNPTU1fTE1fRU5D
UllQVAkoMTw8MSkJLyogd2FudCBlbmNyeXB0aW9uICovDQorI2RlZmluZSBS
RkNPTU1fTE1fU0VDVVJFCSgxPDwyKQkvKiB3YW50IHNlY3VyZWQgbGluayAq
Lw0KKw0KICNpZmRlZiBfS0VSTkVMDQogDQogLyogc3lzY3RsIHZhcmlhYmxl
cyAqLw0KQEAgLTMxMyw2ICszMjAsNyBAQA0KIAl1aW50MTZfdAkJIHJkX2Zs
YWdzOyAgIC8qIERMQyBmbGFncyAqLw0KIAl1aW50MTZfdAkJIHJkX3N0YXRl
OyAgIC8qIERMQyBzdGF0ZSAqLw0KIAl1aW50MTZfdAkJIHJkX210dTsgICAg
IC8qIE1UVSAqLw0KKwlpbnQJCQkgcmRfbW9kZTsgICAgLyogbGluayBtb2Rl
ICovDQogDQogCXN0cnVjdCBzb2NrYWRkcl9idAkgcmRfbGFkZHI7ICAgLyog
bG9jYWwgYWRkcmVzcyAqLw0KIAlzdHJ1Y3Qgc29ja2FkZHJfYnQJIHJkX3Jh
ZGRyOyAgIC8qIHJlbW90ZSBhZGRyZXNzICovDQpAQCAtMzYxLDkgKzM2OSwx
MiBAQA0KICNkZWZpbmUgUkZDT01NX0RMQ19DTE9TRUQJCTAJLyogbm8gc2Vz
c2lvbiAqLw0KICNkZWZpbmUgUkZDT01NX0RMQ19XQUlUX1NFU1NJT04JCTEJ
Lyogd2FpdGluZyBmb3Igc2Vzc2lvbiAqLw0KICNkZWZpbmUgUkZDT01NX0RM
Q19XQUlUX0NPTk5FQ1QJCTIJLyogd2FpdGluZyBmb3IgY29ubmVjdCAqLw0K
LSNkZWZpbmUgUkZDT01NX0RMQ19PUEVOCQkJMwkvKiBjYW4gc2VuZC9yZWNl
aXZlICovDQotI2RlZmluZSBSRkNPTU1fRExDX1dBSVRfRElTQ09OTkVDVAk0
CS8qIHdhaXRpbmcgZm9yIGRpc2Nvbm5lY3QgKi8NCi0jZGVmaW5lIFJGQ09N
TV9ETENfTElTVEVOCQk1CS8qIGxpc3RlbmluZyBETEMgKi8NCisjZGVmaW5l
IFJGQ09NTV9ETENfV0FJVF9TRU5EX1NBQk0JMwkvKiB3YWl0aW5nIHRvIHNl
bmQgU0FCTSAqLw0KKyNkZWZpbmUgUkZDT01NX0RMQ19XQUlUX1NFTkRfVUEJ
CTQJLyogd2FpdGluZyB0byBzZW5kIFVBICovDQorI2RlZmluZSBSRkNPTU1f
RExDX1dBSVRfUkVDVl9VQQkJNQkvKiB3YWl0aW5nIHRvIHJlY2VpdmUgVUEg
Ki8NCisjZGVmaW5lIFJGQ09NTV9ETENfT1BFTgkJCTYJLyogY2FuIHNlbmQv
cmVjZWl2ZSAqLw0KKyNkZWZpbmUgUkZDT01NX0RMQ19XQUlUX0RJU0NPTk5F
Q1QJNwkvKiB3YWl0aW5nIGZvciBkaXNjb25uZWN0ICovDQorI2RlZmluZSBS
RkNPTU1fRExDX0xJU1RFTgkJOAkvKiBsaXN0ZW5pbmcgRExDICovDQogDQog
LyoNCiAgKiBCbHVldG9vdGggUkZDT01NIHNvY2tldCBrZXJuZWwgcHJvdG90
eXBlcw0KQEAgLTM3Niw3ICszODcsOSBAQA0KIHN0cnVjdCByZmNvbW1fZGxj
ICpyZmNvbW1fZGxjX25ld2Nvbm4oc3RydWN0IHJmY29tbV9zZXNzaW9uICos
IGludCk7DQogdm9pZCByZmNvbW1fZGxjX2Nsb3NlKHN0cnVjdCByZmNvbW1f
ZGxjICosIGludCk7DQogdm9pZCByZmNvbW1fZGxjX3RpbWVvdXQodm9pZCAq
KTsNCitpbnQgcmZjb21tX2RsY19zZXRtb2RlKHN0cnVjdCByZmNvbW1fZGxj
ICopOw0KIGludCByZmNvbW1fZGxjX2Nvbm5lY3Qoc3RydWN0IHJmY29tbV9k
bGMgKik7DQoraW50IHJmY29tbV9kbGNfb3BlbihzdHJ1Y3QgcmZjb21tX2Rs
YyAqKTsNCiB2b2lkIHJmY29tbV9kbGNfc3RhcnQoc3RydWN0IHJmY29tbV9k
bGMgKik7DQogDQogLyogcmZjb21tX3Nlc3Npb24uYyAqLw0KSW5kZXg6IHN5
cy9uZXRidC9yZmNvbW1fZGxjLmMNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
ClJDUyBmaWxlOiAvY3Zzcm9vdC9zcmMvc3lzL25ldGJ0L3JmY29tbV9kbGMu
Yyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMg0KZGlmZiAtdSAtcjEuMiBy
ZmNvbW1fZGxjLmMNCi0tLSBzeXMvbmV0YnQvcmZjb21tX2RsYy5jCTE1IE1h
ciAyMDA3IDE5OjQ3OjUxIC0wMDAwCTEuMg0KKysrIHN5cy9uZXRidC9yZmNv
bW1fZGxjLmMJMTMgQXByIDIwMDcgMDA6MDc6NTYgLTAwMDANCkBAIC03Miw3
ICs3Miw3IEBADQogcmZjb21tX2RsY19uZXdjb25uKHN0cnVjdCByZmNvbW1f
c2Vzc2lvbiAqcnMsIGludCBkbGNpKQ0KIHsNCiAJc3RydWN0IHJmY29tbV9z
ZXNzaW9uICpsczsNCi0Jc3RydWN0IHJmY29tbV9kbGMgKmRsYywgKmFueSwg
KmJlc3Q7DQorCXN0cnVjdCByZmNvbW1fZGxjICpuZXcsICpkbGMsICphbnks
ICpiZXN0Ow0KIAlzdHJ1Y3Qgc29ja2FkZHJfYnQgbGFkZHIsIHJhZGRyLCBh
ZGRyOw0KIAlpbnQgY2hhbjsNCiANCkBAIC04Niw2ICs4Niw3IEBADQogCWwy
Y2FwX3NvY2thZGRyKHJzLT5yc19sMmNhcCwgJmxhZGRyKTsNCiAJbDJjYXBf
cGVlcmFkZHIocnMtPnJzX2wyY2FwLCAmcmFkZHIpOw0KIAljaGFuID0gUkZD
T01NX0NIQU5ORUwoZGxjaSk7DQorCW5ldyA9IE5VTEw7DQogDQogCWFueSA9
IGJlc3QgPSBOVUxMOw0KIAlMSVNUX0ZPUkVBQ0gobHMsICZyZmNvbW1fc2Vz
c2lvbl9saXN0ZW4sIHJzX25leHQpIHsNCkBAIC0xMTcsMjcgKzExOCwyOCBA
QA0KIAkgKiBsaXN0ZW5pbmcgRExDJ3Mgc28gYWxsIGNhbiBiZSBjaGVja2Vk
IGluIHR1cm4uLg0KIAkgKi8NCiAJaWYgKGRsYyAhPSBOVUxMKQ0KLQkJZGxj
ID0gKCpkbGMtPnJkX3Byb3RvLT5uZXdjb25uKShkbGMtPnJkX3VwcGVyLCAm
bGFkZHIsICZyYWRkcik7DQorCQluZXcgPSAoKmRsYy0+cmRfcHJvdG8tPm5l
d2Nvbm4pKGRsYy0+cmRfdXBwZXIsICZsYWRkciwgJnJhZGRyKTsNCiANCi0J
aWYgKGRsYyA9PSBOVUxMKSB7DQorCWlmIChuZXcgPT0gTlVMTCkgew0KIAkJ
cmZjb21tX3Nlc3Npb25fc2VuZF9mcmFtZShycywgUkZDT01NX0ZSQU1FX0RN
LCBkbGNpKTsNCiAJCXJldHVybiBOVUxMOw0KIAl9DQogDQotCWRsYy0+cmRf
ZGxjaSA9IGRsY2k7DQotCWRsYy0+cmRfbXR1ID0gcmZjb21tX210dV9kZWZh
dWx0Ow0KKwluZXctPnJkX2RsY2kgPSBkbGNpOw0KKwluZXctPnJkX210dSA9
IHJmY29tbV9tdHVfZGVmYXVsdDsNCisJbmV3LT5yZF9tb2RlID0gZGxjLT5y
ZF9tb2RlOw0KIA0KLQltZW1jcHkoJmRsYy0+cmRfbGFkZHIsICZsYWRkciwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9idCkpOw0KLQlkbGMtPnJkX2xhZGRy
LmJ0X2NoYW5uZWwgPSBjaGFuOw0KKwltZW1jcHkoJm5ldy0+cmRfbGFkZHIs
ICZsYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9idCkpOw0KKwluZXct
PnJkX2xhZGRyLmJ0X2NoYW5uZWwgPSBjaGFuOw0KIA0KLQltZW1jcHkoJmRs
Yy0+cmRfcmFkZHIsICZyYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9i
dCkpOw0KLQlkbGMtPnJkX3JhZGRyLmJ0X2NoYW5uZWwgPSBjaGFuOw0KKwlt
ZW1jcHkoJm5ldy0+cmRfcmFkZHIsICZyYWRkciwgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9idCkpOw0KKwluZXctPnJkX3JhZGRyLmJ0X2NoYW5uZWwgPSBj
aGFuOw0KIA0KLQlkbGMtPnJkX3Nlc3Npb24gPSByczsNCi0JZGxjLT5yZF9z
dGF0ZSA9IFJGQ09NTV9ETENfV0FJVF9DT05ORUNUOw0KLQlMSVNUX0lOU0VS
VF9IRUFEKCZycy0+cnNfZGxjcywgZGxjLCByZF9uZXh0KTsNCisJbmV3LT5y
ZF9zZXNzaW9uID0gcnM7DQorCW5ldy0+cmRfc3RhdGUgPSBSRkNPTU1fRExD
X1dBSVRfQ09OTkVDVDsNCisJTElTVF9JTlNFUlRfSEVBRCgmcnMtPnJzX2Rs
Y3MsIG5ldywgcmRfbmV4dCk7DQogDQotCXJldHVybiBkbGM7DQorCXJldHVy
biBuZXc7DQogfQ0KIA0KIC8qDQpAQCAtMjA3LDYgKzIwOSwzOCBAQA0KIH0N
CiANCiAvKg0KKyAqIHJmY29tbV9kbGNfc2V0bW9kZShyZmNvbW1fZGxjKQ0K
KyAqDQorICogU2V0IGxpbmsgbW9kZSBmb3IgRExDLiAgVGhpcyBpcyBvbmx5
IGNhbGxlZCB3aGVuIHRoZSBzZXNzaW9uIGlzDQorICogYWxyZWFkeSBvcGVu
LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGFueSBwcmV2aW91
cyBtb2RlDQorICogc2V0dGluZ3MuDQorICovDQoraW50DQorcmZjb21tX2Rs
Y19zZXRtb2RlKHN0cnVjdCByZmNvbW1fZGxjICpkbGMpDQorew0KKwlpbnQg
bW9kZSA9IDA7DQorDQorCUtBU1NFUlQoZGxjLT5yZF9zZXNzaW9uICE9IE5V
TEwpOw0KKwlLQVNTRVJUKGRsYy0+cmRfc2Vzc2lvbi0+cnNfc3RhdGUgPT0g
UkZDT01NX1NFU1NJT05fT1BFTik7DQorDQorCURQUklOVEYoImRsY2kgJWQs
IGF1dGggJXMsIGVuY3J5cHQgJXMsIHNlY3VyZSAlc1xuIiwgZGxjLT5yZF9k
bGNpLA0KKwkJKGRsYy0+cmRfbW9kZSAmIFJGQ09NTV9MTV9BVVRIID8gInll
cyIgOiAibm8iKSwNCisJCShkbGMtPnJkX21vZGUgJiBSRkNPTU1fTE1fRU5D
UllQVCA/ICJ5ZXMiIDogIm5vIiksDQorCQkoZGxjLT5yZF9tb2RlICYgUkZD
T01NX0xNX1NFQ1VSRSA/ICJ5ZXMiIDogIm5vIikpOw0KKw0KKwlpZiAoZGxj
LT5yZF9tb2RlICYgUkZDT01NX0xNX0FVVEgpDQorCQltb2RlIHw9IEwyQ0FQ
X0xNX0FVVEg7DQorDQorCWlmIChkbGMtPnJkX21vZGUgJiBSRkNPTU1fTE1f
RU5DUllQVCkNCisJCW1vZGUgfD0gTDJDQVBfTE1fRU5DUllQVDsNCisNCisJ
aWYgKGRsYy0+cmRfbW9kZSAmIFJGQ09NTV9MTV9TRUNVUkUpDQorCQltb2Rl
IHw9IEwyQ0FQX0xNX1NFQ1VSRTsNCisNCisJcmV0dXJuIGwyY2FwX3NldG9w
dChkbGMtPnJkX3Nlc3Npb24tPnJzX2wyY2FwLCBTT19MMkNBUF9MTSwgJm1v
ZGUpOw0KK30NCisNCisvKg0KICAqIHJmY29tbV9kbGNfY29ubmVjdChyZmNv
bW1fZGxjKQ0KICAqDQogICogaW5pdGlhdGUgRExDIGNvbm5lY3Rpb24gKHNl
c3Npb24gaXMgYWxyZWFkeSBjb25uZWN0ZWQpDQpAQCAtMjI1LDcgKzI1OSw3
IEBADQogCSAqIElmIHdlIGhhdmUgbm90IGFscmVhZHkgc2VudCBhIFBOIG9u
IHRoZSBzZXNzaW9uLCB3ZSBtdXN0IHNlbmQNCiAJICogYSBQTiB0byBuZWdv
dGlhdGUgQ3JlZGl0IEZsb3cgQ29udHJvbCwgYW5kIHRoaXMgc2V0dGluZyB3
aWxsDQogCSAqIGFwcGx5IHRvIGFsbCBmdXR1cmUgY29ubmVjdGlvbnMgZm9y
IHRoaXMgc2Vzc2lvbi4gV2UgYXNrIGZvcg0KLQkgKiB0aGlzIGV2ZXJ5IHRp
bWUuDQorCSAqIHRoaXMgZXZlcnkgdGltZSwgaW4gb3JkZXIgdG8gZXN0YWJs
aXNoIGluaXRpYWwgY3JlZGl0cy4NCiAJICovDQogCW1lbXNldCgmcG4sIDAs
IHNpemVvZihwbikpOw0KIAlwbi5kbGNpID0gZGxjLT5yZF9kbGNpOw0KQEAg
LTI0OSw2ICsyODMsMzggQEANCiB9DQogDQogLyoNCisgKiByZmNvbW1fZGxj
X29wZW4ocmZjb21tX2RsYykNCisgKg0KKyAqIHNlbmQgIk1vZGVtIFN0YXR1
cyBDb21tYW5kIiBhbmQgbWFyayBETEMgYXMgb3Blbi4NCisgKi8NCitpbnQN
CityZmNvbW1fZGxjX29wZW4oc3RydWN0IHJmY29tbV9kbGMgKmRsYykNCit7
DQorCXN0cnVjdCByZmNvbW1fbWNjX21zYyBtc2M7DQorCWludCBlcnI7DQor
DQorCUtBU1NFUlQoZGxjLT5yZF9zZXNzaW9uICE9IE5VTEwpOw0KKwlLQVNT
RVJUKGRsYy0+cmRfc2Vzc2lvbi0+cnNfc3RhdGUgPT0gUkZDT01NX1NFU1NJ
T05fT1BFTik7DQorDQorCW1lbXNldCgmbXNjLCAwLCBzaXplb2YobXNjKSk7
DQorCW1zYy5hZGRyZXNzID0gUkZDT01NX01LQUREUkVTUygxLCBkbGMtPnJk
X2RsY2kpOw0KKwltc2MubW9kZW0gPSBkbGMtPnJkX2xtb2RlbSAmIDB4ZmU7
CS8qIEVBID0gMCAqLw0KKwltc2MuYnJrID0JMHgwMAkgICB8IDB4MDE7CS8q
IEVBID0gMSAqLw0KKw0KKwllcnIgPSByZmNvbW1fc2Vzc2lvbl9zZW5kX21j
YyhkbGMtPnJkX3Nlc3Npb24sIDEsDQorCQkJCVJGQ09NTV9NQ0NfTVNDLCAm
bXNjLCBzaXplb2YobXNjKSk7DQorCWlmIChlcnIpDQorCQlyZXR1cm4gZXJy
Ow0KKw0KKwljYWxsb3V0X3NjaGVkdWxlKCZkbGMtPnJkX3RpbWVvdXQsIHJm
Y29tbV9tY2NfdGltZW91dCAqIGh6KTsNCisNCisJZGxjLT5yZF9zdGF0ZSA9
IFJGQ09NTV9ETENfT1BFTjsNCisJKCpkbGMtPnJkX3Byb3RvLT5jb25uZWN0
ZWQpKGRsYy0+cmRfdXBwZXIpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQor
LyoNCiAgKiByZmNvbW1fZGxjX3N0YXJ0KHJmY29tbV9kbGMpDQogICoNCiAg
KiBTdGFydCBzZW5kaW5nIGRhdGEgKGFuZC9vciBjcmVkaXRzKSBmb3IgRExD
LiBPdXIgc3RyYXRlZ3kgaXMgdG8NCkluZGV4OiBzeXMvbmV0YnQvcmZjb21t
X3Nlc3Npb24uYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6
IC9jdnNyb290L3NyYy9zeXMvbmV0YnQvcmZjb21tX3Nlc3Npb24uYyx2DQpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuOA0KZGlmZiAtdSAtcjEuOCByZmNvbW1f
c2Vzc2lvbi5jDQotLS0gc3lzL25ldGJ0L3JmY29tbV9zZXNzaW9uLmMJNiBB
cHIgMjAwNyAxNjoyNzo1MiAtMDAwMAkxLjgNCisrKyBzeXMvbmV0YnQvcmZj
b21tX3Nlc3Npb24uYwkxMyBBcHIgMjAwNyAwMDowNzo1NiAtMDAwMA0KQEAg
LTc1LDYgKzc1LDcgQEANCiBzdGF0aWMgdm9pZCByZmNvbW1fc2Vzc2lvbl9k
aXNjb25uZWN0ZWQodm9pZCAqLCBpbnQpOw0KIHN0YXRpYyB2b2lkICpyZmNv
bW1fc2Vzc2lvbl9uZXdjb25uKHZvaWQgKiwgc3RydWN0IHNvY2thZGRyX2J0
ICosIHN0cnVjdCBzb2NrYWRkcl9idCAqKTsNCiBzdGF0aWMgdm9pZCByZmNv
bW1fc2Vzc2lvbl9jb21wbGV0ZSh2b2lkICosIGludCk7DQorc3RhdGljIHZv
aWQgcmZjb21tX3Nlc3Npb25fbGlua21vZGUodm9pZCAqLCBpbnQpOw0KIHN0
YXRpYyB2b2lkIHJmY29tbV9zZXNzaW9uX2lucHV0KHZvaWQgKiwgc3RydWN0
IG1idWYgKik7DQogDQogc3RhdGljIGNvbnN0IHN0cnVjdCBidHByb3RvIHJm
Y29tbV9zZXNzaW9uX3Byb3RvID0gew0KQEAgLTgzLDcgKzg0LDggQEANCiAJ
cmZjb21tX3Nlc3Npb25fZGlzY29ubmVjdGVkLA0KIAlyZmNvbW1fc2Vzc2lv
bl9uZXdjb25uLA0KIAlyZmNvbW1fc2Vzc2lvbl9jb21wbGV0ZSwNCi0JcmZj
b21tX3Nlc3Npb25faW5wdXQNCisJcmZjb21tX3Nlc3Npb25fbGlua21vZGUs
DQorCXJmY29tbV9zZXNzaW9uX2lucHV0LA0KIH07DQogDQogc3RydWN0IHJm
Y29tbV9zZXNzaW9uX2xpc3QNCkBAIC00ODAsNiArNDgyLDEwNCBAQA0KIH0N
CiANCiAvKg0KKyAqIExpbmsgTW9kZSBjaGFuZ2VkDQorICoNCisgKiBUaGlz
IGlzIGNhbGxlZCB3aGVuIGEgbW9kZSBjaGFuZ2UgaXMgY29tcGxldGUuIFBy
b2NlZWQgd2l0aCBjb25uZWN0aW9ucw0KKyAqIHdoZXJlIGFwcHJvcHJpYXRl
LCBvciBwYXNzIHRoZSBuZXcgbW9kZSB0byBhbnkgYWN0aXZlIERMQ3MuDQor
ICovDQorc3RhdGljIHZvaWQNCityZmNvbW1fc2Vzc2lvbl9saW5rbW9kZSh2
b2lkICphcmcsIGludCBuZXcpDQorew0KKwlzdHJ1Y3QgcmZjb21tX3Nlc3Np
b24gKnJzID0gYXJnOw0KKwlzdHJ1Y3QgcmZjb21tX2RsYyAqZGxjLCAqbmV4
dDsNCisJaW50IGVyciwgbW9kZSA9IDA7DQorDQorCURQUklOVEYoImF1dGgg
JXMsIGVuY3J5cHQgJXMsIHNlY3VyZSAlc1xuIiwNCisJCShuZXcgJiBMMkNB
UF9MTV9BVVRIID8gIm9uIiA6ICJvZmYiKSwNCisJCShuZXcgJiBMMkNBUF9M
TV9FTkNSWVBUID8gIm9uIiA6ICJvZmYiKSwNCisJCShuZXcgJiBMMkNBUF9M
TV9TRUNVUkUgPyAib24iIDogIm9mZiIpKTsNCisNCisJaWYgKG5ldyAmIEwy
Q0FQX0xNX0FVVEgpDQorCQltb2RlIHw9IFJGQ09NTV9MTV9BVVRIOw0KKw0K
KwlpZiAobmV3ICYgTDJDQVBfTE1fRU5DUllQVCkNCisJCW1vZGUgfD0gUkZD
T01NX0xNX0VOQ1JZUFQ7DQorDQorCWlmIChuZXcgJiBMMkNBUF9MTV9TRUNV
UkUpDQorCQltb2RlIHw9IFJGQ09NTV9MTV9TRUNVUkU7DQorDQorCW5leHQg
PSBMSVNUX0ZJUlNUKCZycy0+cnNfZGxjcyk7DQorCXdoaWxlICgoZGxjID0g
bmV4dCkgIT0gTlVMTCkgew0KKwkJbmV4dCA9IExJU1RfTkVYVChkbGMsIHJk
X25leHQpOw0KKw0KKwkJc3dpdGNoIChkbGMtPnJkX3N0YXRlKSB7DQorCQlj
YXNlIFJGQ09NTV9ETENfV0FJVF9TRU5EX1NBQk06CS8qIHdlIGFyZSBjb25u
ZWN0aW5nICovDQorCQkJaWYgKChtb2RlICYgZGxjLT5yZF9tb2RlKSAhPSBk
bGMtPnJkX21vZGUpIHsNCisJCQkJcmZjb21tX2RsY19jbG9zZShkbGMsIEVD
T05OQUJPUlRFRCk7DQorCQkJfSBlbHNlIHsNCisJCQkJZXJyID0gcmZjb21t
X3Nlc3Npb25fc2VuZF9mcmFtZShycywNCisJCQkJCSAgICBSRkNPTU1fRlJB
TUVfU0FCTSwgZGxjLT5yZF9kbGNpKTsNCisJCQkJaWYgKGVycikgew0KKwkJ
CQkJcmZjb21tX2RsY19jbG9zZShkbGMsIGVycik7DQorCQkJCX0gZWxzZSB7
DQorCQkJCQlkbGMtPnJkX3N0YXRlID0gUkZDT01NX0RMQ19XQUlUX1JFQ1Zf
VUE7DQorCQkJCQljYWxsb3V0X3NjaGVkdWxlKCZkbGMtPnJkX3RpbWVvdXQs
DQorCQkJCQkJCXJmY29tbV9hY2tfdGltZW91dCAqIGh6KTsNCisJCQkJCWJy
ZWFrOw0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCS8qDQorCQkJICogSWYgd2Ug
YWJvcnRlZCB0aGUgY29ubmVjdGlvbiBhbmQgdGhlcmUgYXJlIG5vIG1vcmUg
RExDcw0KKwkJCSAqIG9uIHRoZSBzZXNzaW9uLCBpdCBpcyBvdXIgcmVzcG9u
c2liaWxpdHkgdG8gZGlzY29ubmVjdC4NCisJCQkgKi8NCisJCQlpZiAoIUxJ
U1RfRU1QVFkoJnJzLT5yc19kbGNzKSkNCisJCQkJYnJlYWs7DQorDQorCQkJ
cnMtPnJzX3N0YXRlID0gUkZDT01NX1NFU1NJT05fV0FJVF9ESVNDT05ORUNU
Ow0KKwkJCXJmY29tbV9zZXNzaW9uX3NlbmRfZnJhbWUocnMsIFJGQ09NTV9G
UkFNRV9ESVNDLCAwKTsNCisJCQljYWxsb3V0X3NjaGVkdWxlKCZycy0+cnNf
dGltZW91dCwgcmZjb21tX2Fja190aW1lb3V0ICogaHopOw0KKwkJCWJyZWFr
Ow0KKw0KKwkJY2FzZSBSRkNPTU1fRExDX1dBSVRfU0VORF9VQTogLyogdGhl
eSBhcmUgY29ubmVjdGluZyAqLw0KKwkJCWlmICgobW9kZSAmIGRsYy0+cmRf
bW9kZSkgIT0gZGxjLT5yZF9tb2RlKSB7DQorCQkJCXJmY29tbV9zZXNzaW9u
X3NlbmRfZnJhbWUocnMsDQorCQkJCQkgICAgUkZDT01NX0ZSQU1FX0RNLCBk
bGMtPnJkX2RsY2kpOw0KKwkJCQlyZmNvbW1fZGxjX2Nsb3NlKGRsYywgRUNP
Tk5BQk9SVEVEKTsNCisJCQkJYnJlYWs7DQorCQkJfQ0KKw0KKwkJCWVyciA9
IHJmY29tbV9zZXNzaW9uX3NlbmRfZnJhbWUocnMsDQorCQkJCQkgICAgUkZD
T01NX0ZSQU1FX1VBLCBkbGMtPnJkX2RsY2kpOw0KKwkJCWlmIChlcnIpIHsN
CisJCQkJcmZjb21tX3Nlc3Npb25fc2VuZF9mcmFtZShycywNCisJCQkJCQlS
RkNPTU1fRlJBTUVfRE0sIGRsYy0+cmRfZGxjaSk7DQorCQkJCXJmY29tbV9k
bGNfY2xvc2UoZGxjLCBlcnIpOw0KKwkJCQlicmVhazsNCisJCQl9DQorDQor
CQkJZXJyID0gcmZjb21tX2RsY19vcGVuKGRsYyk7DQorCQkJaWYgKGVycikg
ew0KKwkJCQlyZmNvbW1fc2Vzc2lvbl9zZW5kX2ZyYW1lKHJzLA0KKwkJCQkJ
CVJGQ09NTV9GUkFNRV9ETSwgZGxjLT5yZF9kbGNpKTsNCisJCQkJcmZjb21t
X2RsY19jbG9zZShkbGMsIGVycik7DQorCQkJCWJyZWFrOw0KKwkJCX0NCisN
CisJCQlicmVhazsNCisNCisJCWNhc2UgUkZDT01NX0RMQ19XQUlUX1JFQ1Zf
VUE6DQorCQljYXNlIFJGQ09NTV9ETENfT1BFTjogLyogYWxyZWFkeSBlc3Rh
Ymxpc2hlZCAqLw0KKwkJCSgqZGxjLT5yZF9wcm90by0+bGlua21vZGUpKGRs
Yy0+cmRfdXBwZXIsIG1vZGUpOw0KKwkJCWJyZWFrOw0KKw0KKwkJZGVmYXVs
dDoNCisJCQlicmVhazsNCisJCX0NCisJfQ0KK30NCisNCisvKg0KICAqIFJl
Y2VpdmUgZGF0YSBmcm9tIEwyQ0FQIGxheWVyIGZvciBzZXNzaW9uLiBUaGVy
ZSBpcyBhbHdheXMgZXhhY3RseSBvbmUNCiAgKiBSRkNPTU0gZnJhbWUgY29u
dGFpbmVkIGluIGVhY2ggTDJDQVAgZnJhbWUuDQogICovDQpAQCAtNTk4LDcg
KzY5OCw2IEBADQogc3RhdGljIHZvaWQNCiByZmNvbW1fc2Vzc2lvbl9yZWN2
X3NhYm0oc3RydWN0IHJmY29tbV9zZXNzaW9uICpycywgaW50IGRsY2kpDQog
ew0KLQlzdHJ1Y3QgcmZjb21tX21jY19tc2MgbXNjOw0KIAlzdHJ1Y3QgcmZj
b21tX2RsYyAqZGxjOw0KIAlpbnQgZXJyOw0KIA0KQEAgLTYzNywyOSArNzM2
LDM2IEBADQogCQkJcmV0dXJuOwkvKiAoRE0gaXMgc2VudCkgKi8NCiAJfQ0K
IA0KLQlEUFJJTlRGTigyLCAic2VuZCBVQSglZCkgc3RhdGUgPSAlZFxuIiwg
ZGxjaSwgZGxjLT5yZF9zdGF0ZSk7DQotDQotCWVyciA9IHJmY29tbV9zZXNz
aW9uX3NlbmRfZnJhbWUocnMsIFJGQ09NTV9GUkFNRV9VQSwgZGxjaSk7DQot
CWlmIChlcnIpIHsNCi0JCXJmY29tbV9kbGNfY2xvc2UoZGxjLCBlcnIpOw0K
LQkJcmV0dXJuOw0KLQl9DQotDQogCS8qDQotCSAqIElmIHRoaXMgd2FzIHNv
bWUga2luZCBvZiBzcHVyaW91cyBTQUJNIHRoZW4gbGV0cw0KLQkgKiBub3Qg
ZG8gYW55dGhpbmcsIGhlaC4NCisJICogLi5idXQgaWYgdGhpcyBETEMgaXMg
bm90IHdhaXRpbmcgdG8gY29ubmVjdCwgdGhleSBkaWQNCisJICogc29tZXRo
aW5nIHdyb25nLCBpZ25vcmUgaXQuDQogCSAqLw0KIAlpZiAoZGxjLT5yZF9z
dGF0ZSAhPSBSRkNPTU1fRExDX1dBSVRfQ09OTkVDVCkNCiAJCXJldHVybjsN
CiANCi0JbXNjLmFkZHJlc3MgPSBSRkNPTU1fTUtBRERSRVNTKDEsIGRsYy0+
cmRfZGxjaSk7DQotCW1zYy5tb2RlbSA9IGRsYy0+cmRfbG1vZGVtICYgMHhm
ZTsJLyogRUEgPSAwICovDQotCW1zYy5icmsgPQkweDAwCXwgMHgwMTsJCS8q
IEVBID0gMSAqLw0KLQlyZmNvbW1fc2Vzc2lvbl9zZW5kX21jYyhycywgMSwg
UkZDT01NX01DQ19NU0MsICZtc2MsIHNpemVvZihtc2MpKTsNCi0JY2FsbG91
dF9zY2hlZHVsZSgmZGxjLT5yZF90aW1lb3V0LCByZmNvbW1fbWNjX3RpbWVv
dXQgKiBoeik7DQorCS8qIHNldCBsaW5rIG1vZGUgKi8NCisJZXJyID0gcmZj
b21tX2RsY19zZXRtb2RlKGRsYyk7DQorCWlmIChlcnIgPT0gRUlOUFJPR1JF
U1MpIHsNCisJCWRsYy0+cmRfc3RhdGUgPSBSRkNPTU1fRExDX1dBSVRfU0VO
RF9VQTsNCisJCSgqZGxjLT5yZF9wcm90by0+Y29ubmVjdGluZykoZGxjLT5y
ZF91cHBlcik7DQorCQlyZXR1cm47DQorCX0NCisJaWYgKGVycikNCisJCWdv
dG8gY2xvc2U7DQogDQotCWRsYy0+cmRfc3RhdGUgPSBSRkNPTU1fRExDX09Q
RU47DQotCSgqZGxjLT5yZF9wcm90by0+Y29ubmVjdGVkKShkbGMtPnJkX3Vw
cGVyKTsNCisJZXJyID0gcmZjb21tX3Nlc3Npb25fc2VuZF9mcmFtZShycywg
UkZDT01NX0ZSQU1FX1VBLCBkbGNpKTsNCisJaWYgKGVycikNCisJCWdvdG8g
Y2xvc2U7DQorDQorCS8qIGFuZCBtYXJrIGl0IG9wZW4gKi8NCisJZXJyID0g
cmZjb21tX2RsY19vcGVuKGRsYyk7DQorCWlmIChlcnIpDQorCQlnb3RvIGNs
b3NlOw0KKw0KKwlyZXR1cm47DQorDQorY2xvc2U6DQorCXJmY29tbV9kbGNf
Y2xvc2UoZGxjLCBlcnIpOw0KIH0NCiANCiAvKg0KQEAgLTcwNyw3ICs4MTMs
NiBAQA0KIHN0YXRpYyB2b2lkDQogcmZjb21tX3Nlc3Npb25fcmVjdl91YShz
dHJ1Y3QgcmZjb21tX3Nlc3Npb24gKnJzLCBpbnQgZGxjaSkNCiB7DQotCXN0
cnVjdCByZmNvbW1fbWNjX21zYyBtc2M7DQogCXN0cnVjdCByZmNvbW1fZGxj
ICpkbGM7DQogDQogCURQUklOVEZOKDUsICJVQSglZClcbiIsIGRsY2kpOw0K
QEAgLTc0NywxNiArODUyLDggQEANCiAJCWdvdG8gY2hlY2s7DQogDQogCXN3
aXRjaCAoZGxjLT5yZF9zdGF0ZSkgew0KLQljYXNlIFJGQ09NTV9ETENfV0FJ
VF9DT05ORUNUOgkJLyogV2Ugc2VudCBTQUJNICovDQotCQltc2MuYWRkcmVz
cyA9IFJGQ09NTV9NS0FERFJFU1MoMSwgZGxjLT5yZF9kbGNpKTsNCi0JCW1z
Yy5tb2RlbSA9IGRsYy0+cmRfbG1vZGVtICYgMHhmZTsJLyogRUEgPSAwICov
DQotCQltc2MuYnJrID0JMHgwMAl8IDB4MDE7CQkvKiBFQSA9IDEgKi8NCi0J
CXJmY29tbV9zZXNzaW9uX3NlbmRfbWNjKHJzLCAxLCBSRkNPTU1fTUNDX01T
QywNCi0JCQkJCQkmbXNjLCBzaXplb2YobXNjKSk7DQotCQljYWxsb3V0X3Nj
aGVkdWxlKCZkbGMtPnJkX3RpbWVvdXQsIHJmY29tbV9tY2NfdGltZW91dCAq
IGh6KTsNCi0NCi0JCWRsYy0+cmRfc3RhdGUgPSBSRkNPTU1fRExDX09QRU47
DQotCQkoKmRsYy0+cmRfcHJvdG8tPmNvbm5lY3RlZCkoZGxjLT5yZF91cHBl
cik7DQorCWNhc2UgUkZDT01NX0RMQ19XQUlUX1JFQ1ZfVUE6CQkvKiBXZSBz
ZW50IFNBQk0gKi8NCisJCXJmY29tbV9kbGNfb3BlbihkbGMpOw0KIAkJcmV0
dXJuOw0KIA0KIAljYXNlIFJGQ09NTV9ETENfV0FJVF9ESVNDT05ORUNUOgkv
KiBXZSBzZW50IERJU0MgKi8NCkBAIC05MDQsNyArMTAwMSw3IEBADQogCW1f
YWRqKG0sIHNpemVvZihiKSk7DQogDQogCWlmIChSRkNPTU1fRUEoYikgPT0g
MCkgewkvKiB2ZXJpZnkgbm8gZXh0ZW5zaW9ucyAqLw0KLQkJRFBSSU5URigi
TUNDIHR5cGUgRUEgPSAxLCBkaXNjYXJkZWRcbiIpOw0KKwkJRFBSSU5URigi
TUNDIHR5cGUgRUEgPSAwLCBkaXNjYXJkZWRcbiIpOw0KIAkJZ290byByZWxl
YXNlOw0KIAl9DQogDQpAQCAtMTI3MiwxOSArMTM2OSwzNCBAQA0KIAkJfQ0K
IAkJZGxjLT5yZF9tdHUgPSBwbi5tdHU7DQogDQotCQkvKiBpbml0aWFsIGNy
ZWRpdHMgY2FuIG9ubHkgYmUgc2V0IGJlZm9yZSBETEMgaXMgb3BlbiAqLw0K
LQkJaWYgKGRsYy0+cmRfc3RhdGUgPT0gUkZDT01NX0RMQ19XQUlUX0NPTk5F
Q1QNCi0JCSAgICAmJiAocG4uZmxvd19jb250cm9sICYgMHhmMCkgPT0gMHhl
MCkgew0KKwkJLyogaWYgRExDIGlzIG5vdCB3YWl0aW5nIHRvIGNvbm5lY3Qs
IHdlIGFyZSBkb25lICovDQorCQlpZiAoZGxjLT5yZF9zdGF0ZSAhPSBSRkNP
TU1fRExDX1dBSVRfQ09OTkVDVCkNCisJCQlyZXR1cm47DQorDQorCQkvKiBz
ZXQgaW5pdGlhbCBjcmVkaXRzIGFjY29yZGluZyB0byBSRkNPTU0gc3BlYyAq
Lw0KKwkJaWYgKChwbi5mbG93X2NvbnRyb2wgJiAweGYwKSA9PSAweGUwKSB7
DQogCQkJcnMtPnJzX2ZsYWdzIHw9IFJGQ09NTV9TRVNTSU9OX0NGQzsNCiAJ
CQlkbGMtPnJkX3R4Y3JlZCA9IChwbi5jcmVkaXRzICYgMHgwNyk7DQogCQl9
DQogDQotCQkvKiBPaywgbGV0cyBnbyB3aXRoIGl0ICovDQorCQljYWxsb3V0
X3NjaGVkdWxlKCZkbGMtPnJkX3RpbWVvdXQsIHJmY29tbV9hY2tfdGltZW91
dCAqIGh6KTsNCisNCisJCS8qIHNldCBsaW5rIG1vZGUgKi8NCisJCWVyciA9
IHJmY29tbV9kbGNfc2V0bW9kZShkbGMpOw0KKwkJaWYgKGVyciA9PSBFSU5Q
Uk9HUkVTUykgew0KKwkJCWRsYy0+cmRfc3RhdGUgPSBSRkNPTU1fRExDX1dB
SVRfU0VORF9TQUJNOw0KKwkJCSgqZGxjLT5yZF9wcm90by0+Y29ubmVjdGlu
ZykoZGxjLT5yZF91cHBlcik7DQorCQkJcmV0dXJuOw0KKwkJfQ0KKwkJaWYg
KGVycikNCisJCQlnb3RvIGNsb3NlOw0KKw0KKwkJLyogd2UgY2FuIHByb2Nl
ZWQgbm93ICovDQogCQllcnIgPSByZmNvbW1fc2Vzc2lvbl9zZW5kX2ZyYW1l
KHJzLCBSRkNPTU1fRlJBTUVfU0FCTSwgcG4uZGxjaSk7DQogCQlpZiAoZXJy
KQ0KIAkJCWdvdG8gY2xvc2U7DQogDQotCQljYWxsb3V0X3NjaGVkdWxlKCZk
bGMtPnJkX3RpbWVvdXQsIHJmY29tbV9hY2tfdGltZW91dCAqIGh6KTsNCisJ
CWRsYy0+cmRfc3RhdGUgPSBSRkNPTU1fRExDX1dBSVRfUkVDVl9VQTsNCiAJ
fQ0KIAlyZXR1cm47DQogDQpJbmRleDogc3lzL25ldGJ0L3JmY29tbV9zb2Nr
ZXQuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNy
b290L3NyYy9zeXMvbmV0YnQvcmZjb21tX3NvY2tldC5jLHYNCnJldHJpZXZp
bmcgcmV2aXNpb24gMS42DQpkaWZmIC11IC1yMS42IHJmY29tbV9zb2NrZXQu
Yw0KLS0tIHN5cy9uZXRidC9yZmNvbW1fc29ja2V0LmMJMzEgTWFyIDIwMDcg
MTg6MTc6MTMgLTAwMDAJMS42DQorKysgc3lzL25ldGJ0L3JmY29tbV9zb2Nr
ZXQuYwkxMyBBcHIgMjAwNyAwMDowNzo1NiAtMDAwMA0KQEAgLTY0LDYgKzY0
LDcgQEANCiBzdGF0aWMgdm9pZCByZmNvbW1fZGlzY29ubmVjdGVkKHZvaWQg
KiwgaW50KTsNCiBzdGF0aWMgdm9pZCAqcmZjb21tX25ld2Nvbm4odm9pZCAq
LCBzdHJ1Y3Qgc29ja2FkZHJfYnQgKiwgc3RydWN0IHNvY2thZGRyX2J0ICop
Ow0KIHN0YXRpYyB2b2lkIHJmY29tbV9jb21wbGV0ZSh2b2lkICosIGludCk7
DQorc3RhdGljIHZvaWQgcmZjb21tX2xpbmttb2RlKHZvaWQgKiwgaW50KTsN
CiBzdGF0aWMgdm9pZCByZmNvbW1faW5wdXQodm9pZCAqLCBzdHJ1Y3QgbWJ1
ZiAqKTsNCiANCiBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0cHJvdG8gcmZjb21t
X3Byb3RvID0gew0KQEAgLTcyLDYgKzczLDcgQEANCiAJcmZjb21tX2Rpc2Nv
bm5lY3RlZCwNCiAJcmZjb21tX25ld2Nvbm4sDQogCXJmY29tbV9jb21wbGV0
ZSwNCisJcmZjb21tX2xpbmttb2RlLA0KIAlyZmNvbW1faW5wdXQsDQogfTsN
CiANCkBAIC0zNjUsNiArMzY3LDI5IEBADQogfQ0KIA0KIC8qDQorICogcmZj
b21tX2xpbmttb2RlKHJmY29tbV9kbGMsIG5ldykNCisgKg0KKyAqIGxpbmsg
bW9kZSBjaGFuZ2Ugbm90aWZpY2F0aW9uLg0KKyAqLw0KK3N0YXRpYyB2b2lk
DQorcmZjb21tX2xpbmttb2RlKHZvaWQgKmFyZywgaW50IG5ldykNCit7DQor
CXN0cnVjdCBzb2NrZXQgKnNvID0gYXJnOw0KKwlpbnQgbW9kZTsNCisNCisJ
RFBSSU5URigiYXV0aCAlcywgZW5jcnlwdCAlcywgc2VjdXJlICVzXG4iLA0K
KwkJKG5ldyAmIFJGQ09NTV9MTV9BVVRIID8gIm9uIiA6ICJvZmYiKSwNCisJ
CShuZXcgJiBSRkNPTU1fTE1fRU5DUllQVCA/ICJvbiIgOiAib2ZmIiksDQor
CQkobmV3ICYgUkZDT01NX0xNX1NFQ1VSRSA/ICJvbiIgOiAib2ZmIikpOw0K
Kw0KKwkodm9pZClyZmNvbW1fZ2V0b3B0KHNvLT5zb19wY2IsIFNPX1JGQ09N
TV9MTSwgJm1vZGUpOw0KKwlpZiAoKChtb2RlICYgUkZDT01NX0xNX0FVVEgp
ICYmICEobmV3ICYgUkZDT01NX0xNX0FVVEgpKQ0KKwkgICAgfHwgKChtb2Rl
ICYgUkZDT01NX0xNX0VOQ1JZUFQpICYmICEobmV3ICYgUkZDT01NX0xNX0VO
Q1JZUFQpKQ0KKwkgICAgfHwgKChtb2RlICYgUkZDT01NX0xNX1NFQ1VSRSkg
JiYgIShuZXcgJiBSRkNPTU1fTE1fU0VDVVJFKSkpDQorCQlyZmNvbW1fZGlz
Y29ubmVjdChzby0+c29fcGNiLCAwKTsNCit9DQorDQorLyoNCiAgKiByZmNv
bW1faW5wdXQocmZjb21tX2RsYywgbWJ1ZikNCiAgKi8NCiBzdGF0aWMgdm9p
ZA0KSW5kZXg6IHN5cy9uZXRidC9yZmNvbW1fdXBwZXIuYw0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvbmV0
YnQvcmZjb21tX3VwcGVyLmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjUN
CmRpZmYgLXUgLXIxLjUgcmZjb21tX3VwcGVyLmMNCi0tLSBzeXMvbmV0YnQv
cmZjb21tX3VwcGVyLmMJNiBBcHIgMjAwNyAxNzowOTowMCAtMDAwMAkxLjUN
CisrKyBzeXMvbmV0YnQvcmZjb21tX3VwcGVyLmMJMTMgQXByIDIwMDcgMDA6
MDc6NTYgLTAwMDANCkBAIC0yMjgsNyArMjI4LDE0IEBADQogCWNhc2UgUkZD
T01NX0RMQ19MSVNURU46DQogCQlyZXR1cm4gRUlOVkFMOw0KIA0KKwljYXNl
IFJGQ09NTV9ETENfV0FJVF9TRU5EX1VBOg0KKwkJZXJyID0gcmZjb21tX3Nl
c3Npb25fc2VuZF9mcmFtZShycywNCisJCQkJUkZDT01NX0ZSQU1FX0RNLCBk
bGMtPnJkX2RsY2kpOw0KKw0KKwkJLyogZmFsbCB0aHJvdWdoICovDQogCWNh
c2UgUkZDT01NX0RMQ19XQUlUX1NFU1NJT046DQorCWNhc2UgUkZDT01NX0RM
Q19XQUlUX0NPTk5FQ1Q6DQorCWNhc2UgUkZDT01NX0RMQ19XQUlUX1NFTkRf
U0FCTToNCiAJCXJmY29tbV9kbGNfY2xvc2UoZGxjLCAwKTsNCiAJCWJyZWFr
Ow0KIA0KQEAgLTIzOSw3ICsyNDYsNyBAQA0KIAkJfQ0KIA0KIAkJLyogZWxz
ZSBmYWxsIHRocm91Z2ggKi8NCi0JY2FzZSBSRkNPTU1fRExDX1dBSVRfQ09O
TkVDVDoNCisJY2FzZSBSRkNPTU1fRExDX1dBSVRfUkVDVl9VQToNCiAJCWRs
Yy0+cmRfc3RhdGUgPSBSRkNPTU1fRExDX1dBSVRfRElTQ09OTkVDVDsNCiAJ
CWVyciA9IHJmY29tbV9zZXNzaW9uX3NlbmRfZnJhbWUocnMsIFJGQ09NTV9G
UkFNRV9ESVNDLA0KIAkJCQkJCQlkbGMtPnJkX2RsY2kpOw0KQEAgLTQxNiw3
ICs0MjMsNyBAQA0KIGludA0KIHJmY29tbV9zZXRvcHQoc3RydWN0IHJmY29t
bV9kbGMgKmRsYywgaW50IG9wdCwgdm9pZCAqYWRkcikNCiB7DQotCWludCBl
cnIgPSAwOw0KKwlpbnQgbW9kZSwgZXJyID0gMDsNCiAJdWludDE2X3QgbXR1
Ow0KIA0KIAlzd2l0Y2ggKG9wdCkgew0KQEAgLTQzMSw2ICs0MzgsMjMgQEAN
CiANCiAJCWJyZWFrOw0KIA0KKwljYXNlIFNPX1JGQ09NTV9MTToNCisJCW1v
ZGUgPSAqKGludCAqKWFkZHI7DQorCQltb2RlICY9IChSRkNPTU1fTE1fU0VD
VVJFIHwgUkZDT01NX0xNX0VOQ1JZUFQgfCBSRkNPTU1fTE1fQVVUSCk7DQor
DQorCQlpZiAobW9kZSAmIFJGQ09NTV9MTV9TRUNVUkUpDQorCQkJbW9kZSB8
PSBSRkNPTU1fTE1fRU5DUllQVDsNCisNCisJCWlmIChtb2RlICYgUkZDT01N
X0xNX0VOQ1JZUFQpDQorCQkJbW9kZSB8PSBSRkNPTU1fTE1fQVVUSDsNCisN
CisJCWRsYy0+cmRfbW9kZSA9IG1vZGU7DQorDQorCQlpZiAoZGxjLT5yZF9z
dGF0ZSA9PSBSRkNPTU1fRExDX09QRU4pDQorCQkJZXJyID0gcmZjb21tX2Rs
Y19zZXRtb2RlKGRsYyk7DQorDQorCQlicmVhazsNCisNCiAJZGVmYXVsdDoN
CiAJCWVyciA9IEVOT1BST1RPT1BUOw0KIAkJYnJlYWs7DQpAQCAtNDY2LDYg
KzQ5MCwxMCBAQA0KIA0KIAkJcmV0dXJuIHNpemVvZigqZmMpOw0KIA0KKwlj
YXNlIFNPX1JGQ09NTV9MTToNCisJCSooaW50ICopYWRkciA9IGRsYy0+cmRf
bW9kZTsNCisJCXJldHVybiBzaXplb2YoaW50KTsNCisNCiAJZGVmYXVsdDoN
CiAJCWJyZWFrOw0KIAl9DQpJbmRleDogc3lzL25ldGJ0L3Njb19zb2NrZXQu
Yw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290
L3NyYy9zeXMvbmV0YnQvc2NvX3NvY2tldC5jLHYNCnJldHJpZXZpbmcgcmV2
aXNpb24gMS44DQpkaWZmIC11IC1yMS44IHNjb19zb2NrZXQuYw0KLS0tIHN5
cy9uZXRidC9zY29fc29ja2V0LmMJMzEgTWFyIDIwMDcgMTg6MTc6MTMgLTAw
MDAJMS44DQorKysgc3lzL25ldGJ0L3Njb19zb2NrZXQuYwkxMyBBcHIgMjAw
NyAwMDowNzo1NiAtMDAwMA0KQEAgLTYyLDYgKzYyLDcgQEANCiBzdGF0aWMg
dm9pZCBzY29fZGlzY29ubmVjdGVkKHZvaWQgKiwgaW50KTsNCiBzdGF0aWMg
dm9pZCAqc2NvX25ld2Nvbm4odm9pZCAqLCBzdHJ1Y3Qgc29ja2FkZHJfYnQg
Kiwgc3RydWN0IHNvY2thZGRyX2J0ICopOw0KIHN0YXRpYyB2b2lkIHNjb19j
b21wbGV0ZSh2b2lkICosIGludCk7DQorc3RhdGljIHZvaWQgc2NvX2xpbmtt
b2RlKHZvaWQgKiwgaW50KTsNCiBzdGF0aWMgdm9pZCBzY29faW5wdXQodm9p
ZCAqLCBzdHJ1Y3QgbWJ1ZiAqKTsNCiANCiBzdGF0aWMgY29uc3Qgc3RydWN0
IGJ0cHJvdG8gc2NvX3Byb3RvID0gew0KQEAgLTcwLDYgKzcxLDcgQEANCiAJ
c2NvX2Rpc2Nvbm5lY3RlZCwNCiAJc2NvX25ld2Nvbm4sDQogCXNjb19jb21w
bGV0ZSwNCisJc2NvX2xpbmttb2RlLA0KIAlzY29faW5wdXQsDQogfTsNCiAN
CkBAIC0zNDcsNiArMzQ5LDExIEBADQogfQ0KIA0KIHN0YXRpYyB2b2lkDQor
c2NvX2xpbmttb2RlKHZvaWQgKmFyZywgaW50IG1vZGUpDQorew0KK30NCisN
CitzdGF0aWMgdm9pZA0KIHNjb19pbnB1dCh2b2lkICphcmcsIHN0cnVjdCBt
YnVmICptKQ0KIHsNCiAJc3RydWN0IHNvY2tldCAqc28gPSBhcmc7DQpJbmRl
eDogdXNyLmJpbi9yZmNvbW1fc3BwZC9yZmNvbW1fc3BwZC4xDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3Vzci5i
aW4vcmZjb21tX3NwcGQvcmZjb21tX3NwcGQuMSx2DQpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNA0KZGlmZiAtdSAtcjEuNCByZmNvbW1fc3BwZC4xDQotLS0g
dXNyLmJpbi9yZmNvbW1fc3BwZC9yZmNvbW1fc3BwZC4xCTEgTWFyIDIwMDcg
MjE6NDQ6MzAgLTAwMDAJMS40DQorKysgdXNyLmJpbi9yZmNvbW1fc3BwZC9y
ZmNvbW1fc3BwZC4xCTEzIEFwciAyMDA3IDAwOjA4OjAzIC0wMDAwDQpAQCAt
NTIsNyArNTIsNyBAQA0KIC5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
DQogLlwiIFNVQ0ggREFNQUdFLg0KIC5cIg0KLS5EZCBGZWJydWFyeSAyOCwg
MjAwNw0KKy5EZCBBcHJpbCAxMCwgMjAwNw0KIC5EdCBSRkNPTU1fU1BQRCAx
DQogLk9zDQogLlNoIE5BTUUNCkBAIC02MSw5ICs2MSwxMCBAQA0KIC5TaCBT
WU5PUFNJUw0KIC5ObQ0KIC5PcCBGbCBkIEFyIGRldmljZQ0KKy5PcCBGbCBt
IEFyIG1vZGUNCiAuT3AgRmwgcyBBciBzZXJ2aWNlDQogLk9wIEZsIHQgQXIg
dHR5DQotLkZsIGEgQXIgYWRkcmVzcyB8IEZsIGMgQXIgY2hhbm5lbA0KKy5C
cnEgRmwgYSBBciBhZGRyZXNzIHwgRmwgYyBBciBjaGFubmVsIA0KIC5TaCBE
RVNDUklQVElPTg0KIFRoZQ0KIC5ObQ0KQEAgLTExNiw2ICsxMTcsMTggQEAN
CiBJZiBubw0KIC5BciBkZXZpY2UNCiBpcyBzcGVjaWZpZWQsIHRoZSBjb25u
ZWN0aW9uIHdpbGwgYmUgc2V0IHVwIG9uIGEgc3lzdGVtIGRldGVybWluZWQg
ZGV2aWNlLg0KKy5JdCBGbCBtIEFyIG1vZGUNCitTZXQgY29ubmVjdGlvbiBs
aW5rIG1vZGUuDQorU3VwcG9ydGVkIG1vZGVzIGFyZToNCisuUHANCisuQmwg
LXRhZyAtY29tcGFjdCAtb2Zmc2V0IGluZGVudA0KKy5JdCBhdXRoDQorcmVx
dWlyZSBkZXZpY2VzIGJlIHBhaXJlZC4NCisuSXQgZW5jcnlwdA0KK2F1dGgs
IHBsdXMgZW5hYmxlIGVuY3J5cHRpb24uDQorLkl0IHNlY3VyZQ0KK2VuY3J5
cHRpb24sIHBsdXMgY2hhbmdlIG9mIGxpbmsga2V5Lg0KKy5FbA0KIC5JdCBG
bCBzIEFyIHNlcnZpY2UNCiBUaGlzIGlzIHRoZSBzZXJ2aWNlIGNsYXNzIHRo
YXQgd2lsbCBiZSBzZWFyY2hlZCBmb3Igb24gdGhlIHJlbW90ZSBkZXZpY2Uu
DQogSWYgbm8NCkBAIC0xNzMsMTAgKzE4NiwxMCBAQA0KIC5QcA0KIEluIG9y
ZGVyIHRvIHVzZQ0KIC5ObQ0KLXRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEg
bGluayBmb3INCit0byBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIHNlY3VyZWQg
bGluayBmb3INCiAuWHIgcHBwZCA4ICwNCiB1c2UNCi0uRGwgcHR5IFFvIHJm
Y29tbV9zcHBkIC1hIDAwOjAxOjAyOjAzOjA0OjA1IC1zIERVTiBRYw0KKy5E
bCBwdHkgUW8gcmZjb21tX3NwcGQgLWEgMDA6MDE6MDI6MDM6MDQ6MDUgLXMg
RFVOIC1tIHNlY3VyZSBRYw0KIC5QcA0KIGluIHlvdXINCiAuWHIgcHBwZCA4
DQpJbmRleDogdXNyLmJpbi9yZmNvbW1fc3BwZC9yZmNvbW1fc3BwZC5jDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3Jj
L3Vzci5iaW4vcmZjb21tX3NwcGQvcmZjb21tX3NwcGQuYyx2DQpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNg0KZGlmZiAtdSAtcjEuNiByZmNvbW1fc3BwZC5j
DQotLS0gdXNyLmJpbi9yZmNvbW1fc3BwZC9yZmNvbW1fc3BwZC5jCTMxIE1h
ciAyMDA3IDA3OjE0OjQ0IC0wMDAwCTEuNg0KKysrIHVzci5iaW4vcmZjb21t
X3NwcGQvcmZjb21tX3NwcGQuYwkxMyBBcHIgMjAwNyAwMDowODowMyAtMDAw
MA0KQEAgLTgyLDEzICs4MiwxNSBAQA0KICNpbmNsdWRlIDx0ZXJtaW9zLmg+
DQogI2luY2x1ZGUgPHVuaXN0ZC5oPg0KIA0KKyNpbmNsdWRlIDxuZXRidC9y
ZmNvbW0uaD4NCisNCiAjaW5jbHVkZSAicmZjb21tX3NkcC5oIg0KIA0KICNk
ZWZpbmUgbWF4KGEsIGIpCSgoYSkgPiAoYikgPyAoYSkgOiAoYikpDQogDQog
aW50IG9wZW5fdHR5KGNvbnN0IGNoYXIgKik7DQotaW50IG9wZW5fY2xpZW50
KGJkYWRkcl90ICosIGJkYWRkcl90ICosIGNvbnN0IGNoYXIgKik7DQotaW50
IG9wZW5fc2VydmVyKGJkYWRkcl90ICosIHVpbnQ4X3QsIGNvbnN0IGNoYXIg
Kik7DQoraW50IG9wZW5fY2xpZW50KGJkYWRkcl90ICosIGJkYWRkcl90ICos
IGludCwgY29uc3QgY2hhciAqKTsNCitpbnQgb3Blbl9zZXJ2ZXIoYmRhZGRy
X3QgKiwgdWludDhfdCwgaW50LCBjb25zdCBjaGFyICopOw0KIHZvaWQgY29w
eV9kYXRhKGludCwgaW50KTsNCiB2b2lkIHNpZ2hhbmRsZXIoaW50KTsNCiB2
b2lkIHVzYWdlKHZvaWQpOw0KQEAgLTEyOSw3ICsxMzEsNyBAQA0KIAlmZF9z
ZXQJCQlyZHNldDsNCiAJY29uc3QgY2hhcgkJKnNlcnZpY2U7DQogCWNoYXIJ
CQkqZXAsICp0dHk7DQotCWludAkJCW4sIHJmY29tbSwgdHR5X2luLCB0dHlf
b3V0Ow0KKwlpbnQJCQlsbSwgbiwgcmZjb21tLCB0dHlfaW4sIHR0eV9vdXQ7
DQogCXVpbnQ4X3QJCQljaGFubmVsOw0KIA0KIAliZGFkZHJfY29weSgmbGFk
ZHIsIEJEQUREUl9BTlkpOw0KQEAgLTEzNyw5ICsxMzksMTAgQEANCiAJc2Vy
dmljZSA9ICJTUCI7DQogCXR0eSA9IE5VTEw7DQogCWNoYW5uZWwgPSAwOw0K
KwlsbSA9IDA7DQogDQogCS8qIFBhcnNlIGNvbW1hbmQgbGluZSBvcHRpb25z
ICovDQotCXdoaWxlICgobiA9IGdldG9wdChhcmdjLCBhcmd2LCAiYTpjOmQ6
aHM6dDoiKSkgIT0gLTEpIHsNCisJd2hpbGUgKChuID0gZ2V0b3B0KGFyZ2Ms
IGFyZ3YsICJhOmM6ZDpobTpzOnQ6IikpICE9IC0xKSB7DQogCQlzd2l0Y2gg
KG4pIHsNCiAJCWNhc2UgJ2EnOiAvKiByZW1vdGUgZGV2aWNlIGFkZHJlc3Mg
Ki8NCiAJCQlpZiAoIWJ0X2F0b24ob3B0YXJnLCAmcmFkZHIpKSB7DQpAQCAt
MTY2LDYgKzE2OSwxOCBAQA0KIA0KIAkJCWJyZWFrOw0KIA0KKwkJY2FzZSAn
bSc6IC8qIExpbmsgTW9kZSAqLw0KKwkJCWlmIChzdHJjYXNlY21wKG9wdGFy
ZywgImF1dGgiKSA9PSAwKQ0KKwkJCQlsbSA9IFJGQ09NTV9MTV9BVVRIOw0K
KwkJCWVsc2UgaWYgKHN0cmNhc2VjbXAob3B0YXJnLCAiZW5jcnlwdCIpID09
IDApDQorCQkJCWxtID0gUkZDT01NX0xNX0VOQ1JZUFQ7DQorCQkJZWxzZSBp
ZiAoc3RyY2FzZWNtcChvcHRhcmcsICJzZWN1cmUiKSA9PSAwKQ0KKwkJCQls
bSA9IFJGQ09NTV9MTV9TRUNVUkU7DQorCQkJZWxzZQ0KKwkJCQllcnJ4KEVY
SVRfRkFJTFVSRSwgIiVzOiB1bmtub3duIG1vZGUiLCBvcHRhcmcpOw0KKw0K
KwkJCWJyZWFrOw0KKw0KIAkJY2FzZSAncyc6IC8qIHNlcnZpY2UgY2xhc3Mg
Ki8NCiAJCQlzZXJ2aWNlID0gb3B0YXJnOw0KIAkJCWJyZWFrOw0KQEAgLTIw
Niw5ICsyMjEsOSBAQA0KIA0KIAkvKiBvcGVuIFJGQ09NTSAqLw0KIAlpZiAo
Y2hhbm5lbCA9PSAwKQ0KLQkJcmZjb21tID0gb3Blbl9jbGllbnQoJmxhZGRy
LCAmcmFkZHIsIHNlcnZpY2UpOw0KKwkJcmZjb21tID0gb3Blbl9jbGllbnQo
JmxhZGRyLCAmcmFkZHIsIGxtLCBzZXJ2aWNlKTsNCiAJZWxzZQ0KLQkJcmZj
b21tID0gb3Blbl9zZXJ2ZXIoJmxhZGRyLCBjaGFubmVsLCBzZXJ2aWNlKTsN
CisJCXJmY29tbSA9IG9wZW5fc2VydmVyKCZsYWRkciwgY2hhbm5lbCwgbG0s
IHNlcnZpY2UpOw0KIA0KIAkvKg0KIAkgKiBub3cgd2UgYXJlIHJlYWR5IHRv
IGdvLCBzbyBlaXRoZXIgZGV0YWNoIG9yIG1heWJlIHR1cm4NCkBAIC0zMTQs
NyArMzI5LDcgQEANCiB9DQogDQogaW50DQotb3Blbl9jbGllbnQoYmRhZGRy
X3QgKmxhZGRyLCBiZGFkZHJfdCAqcmFkZHIsIGNvbnN0IGNoYXIgKnNlcnZp
Y2UpDQorb3Blbl9jbGllbnQoYmRhZGRyX3QgKmxhZGRyLCBiZGFkZHJfdCAq
cmFkZHIsIGludCBsbSwgY29uc3QgY2hhciAqc2VydmljZSkNCiB7DQogCXN0
cnVjdCBzb2NrYWRkcl9idCBzYTsNCiAJc3RydWN0IHNlcnZpY2UgKnM7DQpA
QCAtMzU4LDYgKzM3Myw5IEBADQogCWlmIChzZXRzb2Nrb3B0KGZkLCBTT0xf
U09DS0VULCBTT19MSU5HRVIsICZsLCBzaXplb2YobCkpIDwgMCkNCiAJCWVy
cihFWElUX0ZBSUxVUkUsICJsaW5nZXIoKSIpOw0KIA0KKwlpZiAoc2V0c29j
a29wdChmZCwgQlRQUk9UT19SRkNPTU0sIFNPX1JGQ09NTV9MTSwgJmxtLCBz
aXplb2YobG0pKSA8IDApDQorCQllcnIoRVhJVF9GQUlMVVJFLCAibGluayBt
b2RlIik7DQorDQogCXNhLmJ0X2NoYW5uZWwgPSBjaGFubmVsOw0KIAliZGFk
ZHJfY29weSgmc2EuYnRfYmRhZGRyLCByYWRkcik7DQogDQpAQCAtMzc3LDcg
KzM5NSw3IEBADQogI2RlZmluZSBwZHVfbGVuCQlzaXplb2Yoc3RydWN0IHNk
cF9sYW5fcHJvZmlsZSkNCiANCiBpbnQNCi1vcGVuX3NlcnZlcihiZGFkZHJf
dCAqbGFkZHIsIHVpbnQ4X3QgY2hhbm5lbCwgY29uc3QgY2hhciAqc2Vydmlj
ZSkNCitvcGVuX3NlcnZlcihiZGFkZHJfdCAqbGFkZHIsIHVpbnQ4X3QgY2hh
bm5lbCwgaW50IGxtLCBjb25zdCBjaGFyICpzZXJ2aWNlKQ0KIHsNCiAJc3Ry
dWN0IHNvY2thZGRyX2J0IHNhOw0KIAlzdHJ1Y3QgbGluZ2VyIGw7DQpAQCAt
NDAwLDYgKzQxOCw5IEBADQogCQllcnIoRVhJVF9GQUlMVVJFLCAiYmluZCgl
cywgJWQpIiwgYnRfbnRvYShsYWRkciwgTlVMTCksDQogCQkJCQkJICBjaGFu
bmVsKTsNCiANCisJaWYgKHNldHNvY2tvcHQoc3YsIEJUUFJPVE9fUkZDT01N
LCBTT19SRkNPTU1fTE0sICZsbSwgc2l6ZW9mKGxtKSkgPCAwKQ0KKwkJZXJy
KEVYSVRfRkFJTFVSRSwgImxpbmsgbW9kZSIpOw0KKw0KIAlpZiAobGlzdGVu
KHN2LCAxKSA8IDApDQogCQllcnIoRVhJVF9GQUlMVVJFLCAibGlzdGVuKCki
KTsNCiANCkBAIC00ODEsMTcgKzUwMiwyMCBAQA0KIHZvaWQNCiB1c2FnZSh2
b2lkKQ0KIHsNCisJY29uc3QgY2hhciAqY21kID0gZ2V0cHJvZ25hbWUoKTsN
CiAJc3RydWN0IHNlcnZpY2UgKnM7DQogDQotCWZwcmludGYoc3RkZXJyLCAi
VXNhZ2U6ICVzICBbLWQgZGV2aWNlXSBbLXMgc2VydmljZV0gWy10IHR0eV0g
LWEgYmRhZGRyIHwgLWMgY2hhbm5lbFxuIg0KKwlmcHJpbnRmKHN0ZGVyciwg
IlVzYWdlOiAlcyBbLWQgZGV2aWNlXSBbLW0gbW9kZV0gWy1zIHNlcnZpY2Vd
IFstdCB0dHldXG4iDQorCQkJIiAgICAgICAlKnMgey1hIGJkYWRkciB8IC1j
IGNoYW5uZWx9XG4iDQogCQkJIlxuIg0KIAkJCSJXaGVyZTpcbiINCiAJCQki
XHQtYSBiZGFkZHIgICAgcmVtb3RlIGRldmljZSBhZGRyZXNzXG4iDQogCQkJ
Ilx0LWMgY2hhbm5lbCAgIGxvY2FsIFJGQ09NTSBjaGFubmVsXG4iDQogCQkJ
Ilx0LWQgZGV2aWNlICAgIGxvY2FsIGRldmljZSBhZGRyZXNzXG4iDQorCQkJ
Ilx0LW0gbW9kZSAgICAgIGxpbmsgbW9kZVxuIg0KIAkJCSJcdC1zIHNlcnZp
Y2UgICBzZXJ2aWNlIGNsYXNzXG4iDQogCQkJIlx0LXQgdHR5ICAgICAgIHJ1
biBpbiBiYWNrZ3JvdW5kIHVzaW5nIHB0eVxuIg0KLQkJCSJcbiIsIGdldHBy
b2duYW1lKCkpOw0KKwkJCSJcbiIsIGNtZCwgc3RybGVuKGNtZCksICIiKTsN
CiANCiAJZnByaW50ZihzdGRlcnIsICJLbm93biBzZXJ2aWNlIGNsYXNzZXM6
XG4iKTsNCiAJZm9yIChzID0gc2VydmljZXMgOyBzLT5uYW1lICE9IE5VTEwg
OyBzKyspDQpJbmRleDogdXNyLnNiaW4vYnRkZXZjdGwvYnRkZXZjdGwuOA0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290L3Ny
Yy91c3Iuc2Jpbi9idGRldmN0bC9idGRldmN0bC44LHYNCnJldHJpZXZpbmcg
cmV2aXNpb24gMS4zDQpkaWZmIC11IC1yMS4zIGJ0ZGV2Y3RsLjgNCi0tLSB1
c3Iuc2Jpbi9idGRldmN0bC9idGRldmN0bC44CTEwIFNlcCAyMDA2IDE1OjQ1
OjU2IC0wMDAwCTEuMw0KKysrIHVzci5zYmluL2J0ZGV2Y3RsL2J0ZGV2Y3Rs
LjgJMTMgQXByIDIwMDcgMDA6MDg6MDMgLTAwMDANCkBAIC01NCw3ICs1NCw3
IEBADQogLlwiICRJZDogYnRkZXZjdGwuOCx2IDEuMyAyMDA2LzA5LzEwIDE1
OjQ1OjU2IHBsdW5reSBFeHAgJA0KIC5cIiAkRnJlZUJTRDogc3JjL3Vzci5z
YmluL2JsdWV0b290aC9idGhpZGNvbnRyb2wvYnRoaWRjb250cm9sLjgsdiAx
LjMgMjAwNS8wMS8xOCAyMDowMjozMCBydSBFeHAgJA0KIC5cIg0KLS5EZCBT
ZXB0ZW1iZXIgOSwgMjAwNg0KKy5EZCBBcHJpbCAxMCwgMjAwNw0KIC5EdCBC
VERFVkNUTCA4DQogLk9zDQogLlNoIE5BTUUNCkBAIC02NCw2ICs2NCw3IEBA
DQogLk5tDQogLk9wIEZsIEEgfCBGbCBEDQogLk9wIEZsIHF2DQorLk9wIEZs
IG0gQXIgbW9kZQ0KIC5GbCBhIEFyIGFkZHJlc3MNCiAuRmwgZCBBciBkZXZp
Y2UNCiAuRmwgcyBBciBzZXJ2aWNlDQpAQCAtOTksNiArMTAwLDI5IEBADQog
Lkl0IEZsIGQgQXIgZGV2aWNlDQogTG9jYWwgZGV2aWNlIGFkZHJlc3MuDQog
TWF5IGJlIGdpdmVuIGFzIEJEQUREUiBvciBkZXZpY2UgbmFtZS4NCisuSXQg
RmwgbSBBciBtb2RlDQorQ29ubmVjdGlvbiBsaW5rIG1vZGUuDQorVGhlIGZv
bGxvd2luZyBtb2RlcyBhcmUgc3VwcG9ydGVkOg0KKy5QcA0KKy5CbCAtdGFn
IC1jb21wYWN0DQorLkl0IG5vbmUNCitjbGVhciBwcmV2aW91c2x5IHNldCBt
b2RlLg0KKy5JdCBhdXRoDQorcmVxdWlyZSBkZXZpY2VzIGJlIHBhaXJlZCwg
c2VlDQorLlhyIGJ0cGluIDEgLg0KKy5JdCBlbmNyeXB0DQorYXV0aCwgcGx1
cyBlbmFibGUgZW5jcnlwdGlvbi4NCisuSXQgc2VjdXJlDQorZW5jcnlwdGlv
biwgcGx1cyBjaGFuZ2Ugb2YgbGluayBrZXkuDQorLkVsDQorLlBwDQorV2hl
biBjb25maWd1cmluZyB0aGUgSElEIHNlcnZpY2UsDQorLk5tDQord2lsbCBz
ZXQNCisuU3EgYXV0aCANCitieSBkZWZhdWx0LCBvcg0KKy5TcSBlbmNyeXB0
DQorZm9yIGtleWJvYXJkIGRldmljZXMuDQogLkl0IEZsIHENCiBJZ25vcmUg
YW55IGNhY2hlZCBkYXRhIGFuZCBwZXJmb3JtIGEgU0RQIHF1ZXJ5IGZvciB0
aGUgZ2l2ZW4NCiAuQXIgc2VydmljZSAuDQpAQCAtMTM2LDYgKzE2MCw3IEBA
DQogLkl0IFBhIC92YXIvZGIvYnRkZXZjdGwucGxpc3QNCiAuRWwNCiAuU2gg
U0VFIEFMU08NCisuWHIgYnRwaW4gMSAsDQogLlhyIGJ0aGlkZXYgNCAsDQog
LlhyIGJ0aHViIDQgLA0KIC5YciBidHNjbyA0ICwNCkluZGV4OiB1c3Iuc2Jp
bi9idGRldmN0bC9idGRldmN0bC5jDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3Vzci5zYmluL2J0ZGV2Y3RsL2J0
ZGV2Y3RsLmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjMNCmRpZmYgLXUg
LXIxLjMgYnRkZXZjdGwuYw0KLS0tIHVzci5zYmluL2J0ZGV2Y3RsL2J0ZGV2
Y3RsLmMJMTEgU2VwIDIwMDYgMTg6MzA6MjcgLTAwMDAJMS4zDQorKysgdXNy
LnNiaW4vYnRkZXZjdGwvYnRkZXZjdGwuYwkxMyBBcHIgMjAwNyAwMDowODow
MyAtMDAwMA0KQEAgLTY0LDE4ICs2NCwyMSBAQA0KIAlwcm9wX2RpY3Rpb25h
cnlfdCBkZXY7DQogCXByb3Bfb2JqZWN0X3Qgb2JqOw0KIAliZGFkZHJfdCBs
YWRkciwgcmFkZHI7DQotCWNvbnN0IGNoYXIgKnNlcnZpY2U7DQotCWludCBj
aCwgcXVlcnksIHZlcmJvc2UsIGF0dGFjaCwgZGV0YWNoOw0KKwljb25zdCBj
aGFyICpzZXJ2aWNlLCAqbW9kZTsNCisJaW50IGNoLCBxdWVyeSwgdmVyYm9z
ZSwgYXR0YWNoLCBkZXRhY2gsIHNldCwgbm9uZTsNCiANCiAJYmRhZGRyX2Nv
cHkoJmxhZGRyLCBCREFERFJfQU5ZKTsNCiAJYmRhZGRyX2NvcHkoJnJhZGRy
LCBCREFERFJfQU5ZKTsNCiAJc2VydmljZSA9IE5VTEw7DQorCW1vZGUgPSBO
VUxMOw0KIAlxdWVyeSA9IEZBTFNFOw0KIAl2ZXJib3NlID0gRkFMU0U7DQog
CWF0dGFjaCA9IEZBTFNFOw0KIAlkZXRhY2ggPSBGQUxTRTsNCisJc2V0ID0g
RkFMU0U7DQorCW5vbmUgPSBGQUxTRTsNCiANCi0Jd2hpbGUgKChjaCA9IGdl
dG9wdChhcmdjLCBhcmd2LCAiQWE6RGQ6aHFzOnYiKSkgIT0gLTEpIHsNCisJ
d2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCAiQWE6RGQ6aG06cXM6
diIpKSAhPSAtMSkgew0KIAkJc3dpdGNoIChjaCkgew0KIAkJY2FzZSAnQSc6
IC8qIEF0dGFjaCBkZXZpY2UgKi8NCiAJCQlhdHRhY2ggPSBUUlVFOw0KQEAg
LTEwMyw2ICsxMDYsMjAgQEANCiANCiAJCQlicmVhazsNCiANCisJCWNhc2Ug
J20nOiAvKiBsaW5rIG1vZGUgKi8NCisJCQlpZiAoc3RyY2FzZWNtcChvcHRh
cmcsICJub25lIikgPT0gMCkNCisJCQkJbm9uZSA9IFRSVUU7DQorCQkJZWxz
ZSBpZiAoc3RyY2FzZWNtcChvcHRhcmcsIEJUREVWYXV0aCkgPT0gMCkNCisJ
CQkJbW9kZSA9IEJUREVWYXV0aDsNCisJCQllbHNlIGlmIChzdHJjYXNlY21w
KG9wdGFyZywgQlRERVZlbmNyeXB0KSA9PSAwKQ0KKwkJCQltb2RlID0gQlRE
RVZlbmNyeXB0Ow0KKwkJCWVsc2UgaWYgKHN0cmNhc2VjbXAob3B0YXJnLCBC
VERFVnNlY3VyZSkgPT0gMCkNCisJCQkJbW9kZSA9IEJUREVWc2VjdXJlOw0K
KwkJCWVsc2UNCisJCQkJZXJyeChFWElUX0ZBSUxVUkUsICIlczogdW5rbm93
biBtb2RlIiwgbW9kZSk7DQorDQorCQkJYnJlYWs7DQorDQogCQljYXNlICdx
JzoNCiAJCQlxdWVyeSA9IFRSVUU7DQogCQkJYnJlYWs7DQpAQCAtMTQzLDEw
ICsxNjAsMjYgQEANCiAJCWlmIChkZXYgPT0gTlVMTCkNCiAJCQllcnJ4KEVY
SVRfRkFJTFVSRSwgIiVzLyVzIG5vdCBmb3VuZCIsIGJ0X250b2EoJnJhZGRy
LCBOVUxMKSwgc2VydmljZSk7DQogDQotCQlpZiAoIWRiX3NldChkZXYsICZs
YWRkciwgJnJhZGRyLCBzZXJ2aWNlKSkNCi0JCQllcnJ4KEVYSVRfRkFJTFVS
RSwgInNlcnZpY2Ugc3RvcmUgZmFpbGVkIik7DQorCQlzZXQgPSBUUlVFOw0K
IAl9DQogDQorCWlmIChtb2RlICE9IE5VTEwpIHsNCisJCW9iaiA9IHByb3Bf
c3RyaW5nX2NyZWF0ZV9jc3RyaW5nX25vY29weShtb2RlKTsNCisJCWlmIChv
YmogPT0gTlVMTCB8fCAhcHJvcF9kaWN0aW9uYXJ5X3NldChkZXYsIEJUREVW
bW9kZSwgb2JqKSkNCisJCQllcnJ4KEVYSVRfRkFJTFVSRSwgInByb3BsaWIg
ZmFpbHVyZSAoJXMpIiwgQlRERVZtb2RlKTsNCisNCisJCXByb3Bfb2JqZWN0
X3JlbGVhc2Uob2JqKTsNCisJCXNldCA9IFRSVUU7DQorCX0NCisNCisJaWYg
KG5vbmUgPT0gVFJVRSkgew0KKwkJcHJvcF9kaWN0aW9uYXJ5X3JlbW92ZShk
ZXYsIEJUREVWbW9kZSk7DQorCQlzZXQgPSBUUlVFOw0KKwl9DQorDQorCWlm
IChzZXQgPT0gVFJVRSAmJiAhZGJfc2V0KGRldiwgJmxhZGRyLCAmcmFkZHIs
IHNlcnZpY2UpKQ0KKwkJZXJyeChFWElUX0ZBSUxVUkUsICJzZXJ2aWNlIHN0
b3JlIGZhaWxlZCIpOw0KKw0KIAkvKiBhZGQgYmluYXJ5IGxvY2FsLWJkYWRk
ciAqLw0KIAlvYmogPSBwcm9wX2RhdGFfY3JlYXRlX2RhdGEoJmxhZGRyLCBz
aXplb2YobGFkZHIpKTsNCiAJaWYgKG9iaiA9PSBOVUxMIHx8ICFwcm9wX2Rp
Y3Rpb25hcnlfc2V0KGRldiwgQlRERVZsYWRkciwgb2JqKSkNCkBAIC0xODUs
MTIgKzIxOCwxMyBAQA0KIHsNCiANCiAJZnByaW50ZihzdGRlcnIsDQotCQki
dXNhZ2U6ICVzIFstQSB8IC1EXSBbLXF2XSAtYSBhZGRyZXNzIC1kIGRldmlj
ZSAtcyBzZXJ2aWNlXG4iDQorCQkidXNhZ2U6ICVzIFstQSB8IC1EXSBbLXF2
XSBbLW0gbW9kZV0gLWEgYWRkcmVzcyAtZCBkZXZpY2UgLXMgc2VydmljZVxu
Ig0KIAkJIldoZXJlOlxuIg0KIAkJIlx0LUEgICAgICAgICAgIGF0dGFjaCBk
ZXZpY2VcbiINCiAJCSJcdC1hIGFkZHJlc3MgICByZW1vdGUgZGV2aWNlIGFk
ZHJlc3NcbiINCiAJCSJcdC1EICAgICAgICAgICBkZXRhY2ggZGV2aWNlXG4i
DQogCQkiXHQtZCBkZXZpY2UgICAgbG9jYWwgZGV2aWNlIGFkZHJlc3NcbiIN
CisJCSJcdC1tIG1vZGUgICAgICBsaW5rIG1vZGVcbiINCiAJCSJcdC1xICAg
ICAgICAgICBmb3JjZSBTRFAgcXVlcnlcbiINCiAJCSJcdC1zIHNlcnZpY2Ug
ICByZW1vdGUgc2VydmljZVxuIg0KIAkJIlx0LXYgICAgICAgICAgIHZlcmJv
c2VcbiINCkluZGV4OiB1c3Iuc2Jpbi9idGRldmN0bC9idGRldmN0bC5oDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3Jj
L3Vzci5zYmluL2J0ZGV2Y3RsL2J0ZGV2Y3RsLmgsdg0KcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjINCmRpZmYgLXUgLXIxLjIgYnRkZXZjdGwuaA0KLS0tIHVz
ci5zYmluL2J0ZGV2Y3RsL2J0ZGV2Y3RsLmgJMTAgU2VwIDIwMDYgMTU6NDU6
NTYgLTAwMDAJMS4yDQorKysgdXNyLnNiaW4vYnRkZXZjdGwvYnRkZXZjdGwu
aAkxMyBBcHIgMjAwNyAwMDowODowMyAtMDAwMA0KQEAgLTQzLDUgKzQzLDYg
QEANCiANCiAvKiBzZHAuYyAqLw0KIHByb3BfZGljdGlvbmFyeV90IGNmZ19x
dWVyeShiZGFkZHJfdCAqLCBiZGFkZHJfdCAqLCBjb25zdCBjaGFyICopOw0K
K2NvbnN0IGNoYXIgKmhpZF9tb2RlKHByb3BfZGF0YV90KTsNCiANCiAjZW5k
aWYgLyogX19CVERFVkNUTF9IX18gKi8NCkluZGV4OiB1c3Iuc2Jpbi9idGRl
dmN0bC9kYi5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTog
L2N2c3Jvb3Qvc3JjL3Vzci5zYmluL2J0ZGV2Y3RsL2RiLmMsdg0KcmV0cmll
dmluZyByZXZpc2lvbiAxLjINCmRpZmYgLXUgLXIxLjIgZGIuYw0KLS0tIHVz
ci5zYmluL2J0ZGV2Y3RsL2RiLmMJMTEgQXByIDIwMDcgMTk6NTk6MDIgLTAw
MDAJMS4yDQorKysgdXNyLnNiaW4vYnRkZXZjdGwvZGIuYwkxMyBBcHIgMjAw
NyAwMDowODowMyAtMDAwMA0KQEAgLTQxLDE3ICs0MSwxOSBAQA0KICNpbmNs
dWRlIDxwcm9wL3Byb3BsaWIuaD4NCiANCiAjaW5jbHVkZSA8ZGV2L2JsdWV0
b290aC9idGRldi5oPg0KKyNpbmNsdWRlIDxkZXYvYmx1ZXRvb3RoL2J0aGlk
ZXYuaD4NCiAjaW5jbHVkZSA8ZGV2L2JsdWV0b290aC9idHNjby5oPg0KIA0K
ICNpbmNsdWRlICJidGRldmN0bC5oIg0KIA0KICNkZWZpbmUgQlRERVZDVExf
UExJU1QJCSIvdmFyL2RiL2J0ZGV2Y3RsLnBsaXN0Ig0KLSNkZWZpbmUgQlRE
RVZDVExfVkVSU0lPTgkxDQorI2RlZmluZSBCVERFVkNUTF9WRVJTSU9OCTIN
CiANCiBzdGF0aWMgcHJvcF9kaWN0aW9uYXJ5X3QgZGIgPSBOVUxMOw0KIHN0
YXRpYyBpbnQgZGJfZmx1c2ggPSBUUlVFOwkJLyogd3JpdGUgZGIgb24gc2V0
ICovDQogDQogc3RhdGljIHZvaWQgZGJfdXBkYXRlMCh2b2lkKTsNCitzdGF0
aWMgdm9pZCBkYl91cGRhdGUxKHZvaWQpOw0KIA0KIC8qDQogICogbG9va3Vw
IGxhZGRyL3JhZGRyL3NlcnZpY2UgaW4gZGF0YWJhc2UgYW5kIHJldHVybiBk
aWN0aW9uYXJ5DQpAQCAtNzMsMTAgKzc1LDggQEANCiAJCX0gZWxzZSB7DQog
CQkJb2JqID0gcHJvcF9kaWN0aW9uYXJ5X2dldChkYiwgImJ0ZGV2Y3RsLXZl
cnNpb24iKTsNCiAJCQlzd2l0Y2gocHJvcF9udW1iZXJfaW50ZWdlcl92YWx1
ZShvYmopKSB7DQotCQkJY2FzZSAwOg0KLQkJCQlkYl91cGRhdGUwKCk7DQot
CQkJCWJyZWFrOw0KLQ0KKwkJCWNhc2UgMDogZGJfdXBkYXRlMCgpOw0KKwkJ
CWNhc2UgMTogZGJfdXBkYXRlMSgpOw0KIAkJCWNhc2UgQlRERVZDVExfVkVS
U0lPTjoNCiAJCQkJYnJlYWs7DQogDQpAQCAtMjIyLDMgKzIyMiw1OCBAQA0K
IA0KIAlkYl9mbHVzaCA9IFRSVUU7CS8qIHdyaXRlIG9uIHNldCAqLw0KIH0N
CisNCisvKg0KKyAqIHVwZGF0ZSBkYXRhYmFzZSBmcm9tIHZlcnNpb24gMS4g
TGluayBNb2RlIGNhcGFiaWxpdHkgd2FzIGFkZGVkLg0KKyAqIEJ5IGRlZmF1
bHQsIHdlIHJlcXVlc3QgYXV0aGVudGljYXRpb24gZm9yIEhJRHMsIGFuZCBl
bmNyeXB0aW9uDQorICogaXMgZW5hYmxlZCBmb3Iga2V5Ym9hcmRzLg0KKyAq
Lw0KK3N0YXRpYyB2b2lkDQorZGJfdXBkYXRlMSh2b2lkKQ0KK3sNCisJcHJv
cF9kaWN0aW9uYXJ5X3QgbGRldiwgcmRldiwgc3J2Ow0KKwlwcm9wX29iamVj
dF9pdGVyYXRvcl90IGl0ZXIwLCBpdGVyMTsNCisJcHJvcF9kaWN0aW9uYXJ5
X2tleXN5bV90IGtleTsNCisJcHJvcF9vYmplY3RfdCBvYmo7DQorCWJkYWRk
cl90IGJkYWRkcjsNCisNCisJaXRlcjAgPSBwcm9wX2RpY3Rpb25hcnlfaXRl
cmF0b3IoZGIpOw0KKwlpZiAoaXRlcjAgPT0gTlVMTCkNCisJCWVycihFWElU
X0ZBSUxVUkUsICJwcm9wX2RpY3Rpb25hcnlfaXRlcmF0b3IiKTsNCisNCisJ
d2hpbGUgKChrZXkgPSBwcm9wX29iamVjdF9pdGVyYXRvcl9uZXh0KGl0ZXIw
KSkgIT0gTlVMTCkgew0KKwkJbGRldiA9IHByb3BfZGljdGlvbmFyeV9nZXRf
a2V5c3ltKGRiLCBrZXkpOw0KKwkJaWYgKHByb3Bfb2JqZWN0X3R5cGUobGRl
dikgIT0gUFJPUF9UWVBFX0RJQ1RJT05BUlkNCisJCSAgICB8fCAhYnRfYXRv
bihwcm9wX2RpY3Rpb25hcnlfa2V5c3ltX2NzdHJpbmdfbm9jb3B5KGtleSks
ICZiZGFkZHIpKQ0KKwkJCWNvbnRpbnVlOw0KKw0KKwkJaXRlcjEgPSBwcm9w
X2RpY3Rpb25hcnlfaXRlcmF0b3IobGRldik7DQorCQlpZiAoaXRlcjEgPT0g
TlVMTCkNCisJCQllcnIoRVhJVF9GQUlMVVJFLCAicHJvcF9kaWN0aW9uYXJ5
X2l0ZXJhdG9yIik7DQorDQorCQl3aGlsZSAoKGtleSA9IHByb3Bfb2JqZWN0
X2l0ZXJhdG9yX25leHQoaXRlcjEpKSAhPSBOVUxMKSB7DQorCQkJcmRldiA9
IHByb3BfZGljdGlvbmFyeV9nZXRfa2V5c3ltKGxkZXYsIGtleSk7DQorCQkJ
aWYgKHByb3Bfb2JqZWN0X3R5cGUocmRldikgIT0gUFJPUF9UWVBFX0RJQ1RJ
T05BUlkNCisJCQkgICAgfHwgIWJ0X2F0b24ocHJvcF9kaWN0aW9uYXJ5X2tl
eXN5bV9jc3RyaW5nX25vY29weShrZXkpLCAmYmRhZGRyKSkNCisJCQkJY29u
dGludWU7DQorDQorCQkJc3J2ID0gcHJvcF9kaWN0aW9uYXJ5X2dldChyZGV2
LCAiSElEIik7DQorCQkJaWYgKHByb3Bfb2JqZWN0X3R5cGUoc3J2KSAhPSBQ
Uk9QX1RZUEVfRElDVElPTkFSWSkNCisJCQkJY29udGludWU7DQorDQorCQkJ
b2JqID0gcHJvcF9kaWN0aW9uYXJ5X2dldChzcnYsIEJUSElERVZkZXNjcmlw
dG9yKTsNCisJCQlpZiAocHJvcF9vYmplY3RfdHlwZShvYmopICE9IFBST1Bf
VFlQRV9EQVRBKQ0KKwkJCQljb250aW51ZTsNCisNCisJCQlvYmogPSBwcm9w
X3N0cmluZ19jcmVhdGVfY3N0cmluZ19ub2NvcHkoaGlkX21vZGUob2JqKSk7
DQorCQkJaWYgKG9iaiA9PSBOVUxMIHx8ICFwcm9wX2RpY3Rpb25hcnlfc2V0
KHNydiwgQlRERVZtb2RlLCBvYmopKQ0KKwkJCQllcnIoRVhJVF9GQUlMVVJF
LCAiQ2Fubm90IHNldCAlcyIsIEJUREVWbW9kZSk7DQorDQorCQkJcHJvcF9v
YmplY3RfcmVsZWFzZShvYmopOw0KKwkJfQ0KKw0KKwkJcHJvcF9vYmplY3Rf
aXRlcmF0b3JfcmVsZWFzZShpdGVyMSk7DQorCX0NCisNCisJcHJvcF9vYmpl
Y3RfaXRlcmF0b3JfcmVsZWFzZShpdGVyMCk7DQorfQ0KSW5kZXg6IHVzci5z
YmluL2J0ZGV2Y3RsL3ByaW50LmMNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
ClJDUyBmaWxlOiAvY3Zzcm9vdC9zcmMvdXNyLnNiaW4vYnRkZXZjdGwvcHJp
bnQuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNw0KZGlmZiAtdSAtcjEu
NyBwcmludC5jDQotLS0gdXNyLnNiaW4vYnRkZXZjdGwvcHJpbnQuYwkyOSBT
ZXAgMjAwNiAxODo0ODoxNyAtMDAwMAkxLjcNCisrKyB1c3Iuc2Jpbi9idGRl
dmN0bC9wcmludC5jCTEzIEFwciAyMDA3IDAwOjA4OjAzIC0wMDAwDQpAQCAt
OTksNiArOTksMTAgQEANCiAJfQ0KIAlwcmludGYoInJlbW90ZSBiZGFkZHI6
ICVzXG4iLCBidF9udG9hKHByb3BfZGF0YV9kYXRhX25vY29weShvYmopLCBO
VUxMKSk7DQogDQorCW9iaiA9IHByb3BfZGljdGlvbmFyeV9nZXQoZGljdCwg
QlRERVZtb2RlKTsNCisJaWYgKHByb3Bfb2JqZWN0X3R5cGUob2JqKSA9PSBQ
Uk9QX1RZUEVfU1RSSU5HKQ0KKwkJcHJpbnRmKCJsaW5rIG1vZGU6ICVzXG4i
LCBwcm9wX3N0cmluZ19jc3RyaW5nX25vY29weShvYmopKTsNCisNCiAJb2Jq
ID0gcHJvcF9kaWN0aW9uYXJ5X2dldChkaWN0LCBCVERFVnR5cGUpOw0KIAlp
ZiAocHJvcF9vYmplY3RfdHlwZShvYmopICE9IFBST1BfVFlQRV9TVFJJTkcp
IHsNCiAJCXByaW50ZigiTm8gZGV2aWNlIHR5cGUhXG4iKTsNCkBAIC0xNjYs
NyArMTcwLDcgQEANCiANCiAJaGlkX2luaXQoTlVMTCk7DQogDQotCXIgPSBo
aWRfdXNlX3JlcG9ydF9kZXNjKCh1bnNpZ25lZCBjaGFyICopcHJvcF9kYXRh
X2RhdGFfbm9jb3B5KGRlc2MpLA0KKwlyID0gaGlkX3VzZV9yZXBvcnRfZGVz
Yyhwcm9wX2RhdGFfZGF0YV9ub2NvcHkoZGVzYyksDQogCQkJCXByb3BfZGF0
YV9zaXplKGRlc2MpKTsNCiAJaWYgKHIgPT0gTlVMTCkNCiAJCXJldHVybjsN
CkluZGV4OiB1c3Iuc2Jpbi9idGRldmN0bC9zZHAuYw0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy91c3Iuc2Jpbi9i
dGRldmN0bC9zZHAuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMg0KZGlm
ZiAtdSAtcjEuMiBzZHAuYw0KLS0tIHVzci5zYmluL2J0ZGV2Y3RsL3NkcC5j
CTExIEFwciAyMDA3IDIwOjAxOjAxIC0wMDAwCTEuMg0KKysrIHVzci5zYmlu
L2J0ZGV2Y3RsL3NkcC5jCTEzIEFwciAyMDA3IDAwOjA4OjAzIC0wMDAwDQpA
QCAtMjEzLDYgKzIxMyw3IEBADQogCQlyZWNvbm5lY3RfaW5pdGlhdGUsIGJh
dHRlcnlfcG93ZXIsDQogCQlub3JtYWxseV9jb25uZWN0YWJsZSwgaGlkX2xl
bmd0aDsNCiAJdWludDhfdCAqaGlkX2Rlc2NyaXB0b3I7DQorCWNvbnN0IGNo
YXIgKm1vZGU7DQogCWludCBpOw0KIA0KIAljb250cm9sX3BzbSA9IC0xOw0K
QEAgLTI4Niw2ICsyODcsMTMgQEANCiAJaWYgKG9iaiA9PSBOVUxMIHx8ICFw
cm9wX2RpY3Rpb25hcnlfc2V0KGRpY3QsIEJUSElERVZkZXNjcmlwdG9yLCBv
YmopKQ0KIAkJcmV0dXJuIGVycm5vOw0KIA0KKwltb2RlID0gaGlkX21vZGUo
b2JqKTsNCisJcHJvcF9vYmplY3RfcmVsZWFzZShvYmopOw0KKw0KKwlvYmog
PSBwcm9wX3N0cmluZ19jcmVhdGVfY3N0cmluZ19ub2NvcHkobW9kZSk7DQor
CWlmIChvYmogPT0gTlVMTCB8fCAhcHJvcF9kaWN0aW9uYXJ5X3NldChkaWN0
LCBCVERFVm1vZGUsIG9iaikpDQorCQlyZXR1cm4gZXJybm87DQorDQogCXBy
b3Bfb2JqZWN0X3JlbGVhc2Uob2JqKTsNCiANCiAJaWYgKCFyZWNvbm5lY3Rf
aW5pdGlhdGUpIHsNCkBAIC03NjQsMyArNzcyLDM3IEBADQogDQogCXJldHVy
biAoY2hhbm5lbCk7DQogfQ0KKw0KKy8qDQorICogcmV0dXJuIGFwcHJvcHJp
YXRlIG1vZGUgZm9yIEhJRCBkZXNjcmlwdG9yDQorICovDQorY29uc3QgY2hh
ciAqDQoraGlkX21vZGUocHJvcF9kYXRhX3QgZGVzYykNCit7DQorCXJlcG9y
dF9kZXNjX3QgcjsNCisJaGlkX2RhdGFfdCBkOw0KKwlzdHJ1Y3QgaGlkX2l0
ZW0gaDsNCisJY29uc3QgY2hhciAqbW9kZTsNCisNCisJaGlkX2luaXQoTlVM
TCk7DQorDQorCW1vZGUgPSBCVERFVmF1dGg7CS8qIGRlZmF1bHQgKi8NCisN
CisJciA9IGhpZF91c2VfcmVwb3J0X2Rlc2MocHJvcF9kYXRhX2RhdGFfbm9j
b3B5KGRlc2MpLA0KKwkJCQlwcm9wX2RhdGFfc2l6ZShkZXNjKSk7DQorCWlm
IChyID09IE5VTEwpDQorCQllcnIoRVhJVF9GQUlMVVJFLCAiaGlkX3VzZV9y
ZXBvcnRfZGVzYyIpOw0KKw0KKwlkID0gaGlkX3N0YXJ0X3BhcnNlKHIsIH4w
LCAtMSk7DQorCXdoaWxlIChoaWRfZ2V0X2l0ZW0oZCwgJmgpID4gMCkgew0K
KwkJaWYgKGgua2luZCA9PSBoaWRfY29sbGVjdGlvbg0KKwkJICAgICYmIEhJ
RF9QQUdFKGgudXNhZ2UpID09IEhVUF9HRU5FUklDX0RFU0tUT1ANCisJCSAg
ICAmJiBISURfVVNBR0UoaC51c2FnZSkgPT0gSFVHX0tFWUJPQVJEKQ0KKwkJ
CW1vZGUgPSBCVERFVmVuY3J5cHQ7DQorCX0NCisNCisJaGlkX2VuZF9wYXJz
ZShkKTsNCisJaGlkX2Rpc3Bvc2VfcmVwb3J0X2Rlc2Mocik7DQorDQorCXJl
dHVybiBtb2RlOw0KK30NCg==

--0-499043967-1176424026=:461--