Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 5 Apr 2011 03:26:07 +0200 (CEST)
From:      Ingo Flaschberger <if@freebsd.org>
To:        freebsd-net@freebsd.org
Subject:   Routing enhancement - reduce routing table locking
Message-ID:  <alpine.LRH.2.00.1104050303140.2152@filebunker.xip.at>

next in thread | raw e-mail | index | archive | help
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--168430090-939355638-1301965804=:2152
Content-Type: TEXT/PLAIN; FORMAT=flowed; CHARSET=US-ASCII
Content-ID: <alpine.LRH.2.00.1104050313341.2152@filebunker.xip.at>

Hi,

I have written a patch to:
*) reduce locking of routing table to achieve the same speed as with
    flowtables, which do not scale with many routes:
 	use of a copy of the route
 	use rm_lock(9)
 	(idea of Andre Oppermann)
*) implement some multipath changes to use a direct attached
    interface route and a real route, used some OpenBSD code
*) icmp rate-limiting in forwarding (old code from FreeBSD page)

The patch applies at FreeBSD 8.2 stable.
Comments are welcome, especially if I can reuse "dst" (which seems to 
work):
 	rtl.rt_gateway = (struct sockaddr *)dst;

but 'm not shure if I should take same caution with bcopy regarding 
sa_len:
 	rtlookup_fib(struct sockaddr *dst, u_int fibnum, struct rtlookup *rtl,

Kind regards,
 	Ingo Flaschberger

Geschaeftsleitung
____________________________________
crossip communications gmbh
A-1020 Wien, Sebastian Kneipp Gasse 1/3

Sitz der Gesellschaft: 1020 Wien, Oesterreich
Firmenbuchgericht: Handelsgericht Wien, FN 269698 s,
Umsatzsteueridentifikationsnummer (UID): ATU62080367

Haftungsausschluss / Disclaimer <http://www.xip.at/content/view/278/>;
--168430090-939355638-1301965804=:2152
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME=rmlock_8.2_20110405.diff
Content-Transfer-Encoding: BASE64
Content-ID: <alpine.LRH.2.00.1104050325200.2152@filebunker.xip.at>
Content-Description: 
Content-Disposition: ATTACHMENT; FILENAME=rmlock_8.2_20110405.diff

ZGlmZiAtdSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9jb250cmliL2lw
ZmlsdGVyL3JhZGl4LmMgLi9jb250cmliL2lwZmlsdGVyL3JhZGl4LmMNCi0t
LSAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9jb250cmliL2lwZmlsdGVyL3Jh
ZGl4LmMJMjAwOS0wOC0wMyAwODoxMzowNi4wMDAwMDAwMDAgKzAwMDANCisr
KyAuL2NvbnRyaWIvaXBmaWx0ZXIvcmFkaXguYwkyMDExLTA0LTAzIDE2OjA4
OjI4LjAwMDAwMDAwMCArMDAwMA0KQEAgLTc1OSw5ICs3NTksMTAgQEANCiB9
DQogDQogc3RydWN0IHJhZGl4X25vZGUgKg0KLXJuX2RlbGV0ZSh2X2FyZywg
bmV0bWFza19hcmcsIGhlYWQpDQorcm5fZGVsZXRlKHZfYXJnLCBuZXRtYXNr
X2FyZywgaGVhZCwgcm4pDQogCXZvaWQgKnZfYXJnLCAqbmV0bWFza19hcmc7
DQogCXN0cnVjdCByYWRpeF9ub2RlX2hlYWQgKmhlYWQ7DQorCXN0cnVjdCBy
YWRpeF9ub2RlICpybjsNCiB7DQogCXN0cnVjdCByYWRpeF9ub2RlICp0LCAq
cCwgKngsICp0dDsNCiAJc3RydWN0IHJhZGl4X21hc2sgKm0sICpzYXZlZF9t
LCAqKm1wOw0KQEAgLTEwNjksNyArMTA3MCw3IEBADQogCXN0cnVjdCByYWRp
eF9ub2RlX2hlYWQgKnJuaCA9IHA7DQogCXN0cnVjdCByYWRpeF9ub2RlICpk
Ow0KIA0KLQlkID0gcm5oLT5ybmhfZGVsYWRkcihuLT5ybl9rZXksIE5VTEws
IHJuaCk7DQorCWQgPSBybmgtPnJuaF9kZWxhZGRyKG4tPnJuX2tleSwgTlVM
TCwgcm5oLCBOVUxMKTsNCiAJaWYgKGQgIT0gTlVMTCkgew0KIAkJRnJlZVMo
ZCwgbWF4X2tleWxlbiArIDIgKiBzaXplb2YgKCpkKSk7DQogCX0NCmRpZmYg
LXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvY29udHJpYi9pcGZpbHRl
ci9yYWRpeF9pcGYuaCAuL2NvbnRyaWIvaXBmaWx0ZXIvcmFkaXhfaXBmLmgN
Ci0tLSAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9jb250cmliL2lwZmlsdGVy
L3JhZGl4X2lwZi5oCTIwMDktMDgtMDMgMDg6MTM6MDYuMDAwMDAwMDAwICsw
MDAwDQorKysgLi9jb250cmliL2lwZmlsdGVyL3JhZGl4X2lwZi5oCTIwMTEt
MDQtMDMgMTY6MDg6MjguMDAwMDAwMDAwICswMDAwDQpAQCAtMTMwLDcgKzEz
MCw3IEBADQogCQlfX1AoKHZvaWQgKnYsIHZvaWQgKm1hc2ssDQogCQkgICAg
IHN0cnVjdCByYWRpeF9ub2RlX2hlYWQgKmhlYWQsIHN0cnVjdCByYWRpeF9u
b2RlIG5vZGVzW10pKTsNCiAJc3RydWN0CXJhZGl4X25vZGUgKigqcm5oX2Rl
bGFkZHIpCS8qIHJlbW92ZSBiYXNlZCBvbiBzb2NrYWRkciAqLw0KLQkJX19Q
KCh2b2lkICp2LCB2b2lkICptYXNrLCBzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFk
ICpoZWFkKSk7DQorCQlfX1AoKHZvaWQgKnYsIHZvaWQgKm1hc2ssIHN0cnVj
dCByYWRpeF9ub2RlX2hlYWQgKmhlYWQsIHN0cnVjdCByYWRpeF9ub2RlICpy
bikpOw0KIAlzdHJ1Y3QJcmFkaXhfbm9kZSAqKCpybmhfZGVscGt0KQkvKiBy
ZW1vdmUgYmFzZWQgb24gcGFja2V0IGhkciAqLw0KIAkJX19QKCh2b2lkICp2
LCB2b2lkICptYXNrLCBzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICpoZWFkKSk7
DQogCXN0cnVjdAlyYWRpeF9ub2RlICooKnJuaF9tYXRjaGFkZHIpCS8qIGxv
Y2F0ZSBiYXNlZCBvbiBzb2NrYWRkciAqLw0KQEAgLTIwMiw3ICsyMDIsNyBA
QA0KIAkgKnJuX2FkZG1hc2sgX19QKCh2b2lkICosIGludCwgaW50KSksDQog
CSAqcm5fYWRkcm91dGUgX19QKCh2b2lkICosIHZvaWQgKiwgc3RydWN0IHJh
ZGl4X25vZGVfaGVhZCAqLA0KIAkJCXN0cnVjdCByYWRpeF9ub2RlIFsyXSkp
LA0KLQkgKnJuX2RlbGV0ZSBfX1AoKHZvaWQgKiwgdm9pZCAqLCBzdHJ1Y3Qg
cmFkaXhfbm9kZV9oZWFkICopKSwNCisJICpybl9kZWxldGUgX19QKCh2b2lk
ICosIHZvaWQgKiwgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqLCBzdHJ1Y3Qg
cmFkaXhfbm9kZSAqKSksDQogCSAqcm5faW5zZXJ0IF9fUCgodm9pZCAqLCBz
dHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICosIGludCAqLA0KIAkJCXN0cnVjdCBy
YWRpeF9ub2RlIFsyXSkpLA0KIAkgKnJuX2xvb2t1cCBfX1AoKHZvaWQgKiwg
dm9pZCAqLCBzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICopKSwNCmRpZmYgLXUg
LXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc2Jpbi9yb3V0ZWQvcmFkaXgu
YyAuL3NiaW4vcm91dGVkL3JhZGl4LmMNCi0tLSAuLi9zcmNfb3JnXzguMl8y
MDExMDMyOS9zYmluL3JvdXRlZC9yYWRpeC5jCTIwMDktMDgtMDMgMDg6MTM6
MDYuMDAwMDAwMDAwICswMDAwDQorKysgLi9zYmluL3JvdXRlZC9yYWRpeC5j
CTIwMTEtMDQtMDMgMTY6MDg6MDcuMDAwMDAwMDAwICswMDAwDQpAQCAtNjYy
LDcgKzY2Miw4IEBADQogc3RhdGljIHN0cnVjdCByYWRpeF9ub2RlICoNCiBy
bl9kZWxldGUodm9pZCAqdl9hcmcsDQogCSAgdm9pZCAqbmV0bWFza19hcmcs
DQotCSAgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqaGVhZCkNCisJICBzdHJ1
Y3QgcmFkaXhfbm9kZV9oZWFkICpoZWFkLA0KKwkgIHN0cnVjdCByYWRpeF9u
b2RlICpybikNCiB7DQogCXN0cnVjdCByYWRpeF9ub2RlICp0LCAqcCwgKngs
ICp0dDsNCiAJc3RydWN0IHJhZGl4X21hc2sgKm0sICpzYXZlZF9tLCAqKm1w
Ow0KQEAgLTY3MCw2ICs2NzEsOCBAQA0KIAljYWRkcl90IHYsIG5ldG1hc2s7
DQogCWludCBiLCBoZWFkX29mZiwgdmxlbjsNCiANCisJcm4gPSBOVUxMOyAv
KiBYWFggbWFrZSBjb21waWxlciBoYXBweSAqLw0KKw0KIAl2ID0gdl9hcmc7
DQogCW5ldG1hc2sgPSBuZXRtYXNrX2FyZzsNCiAJeCA9IGhlYWQtPnJuaF90
cmVldG9wOw0KZGlmZiAtdSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9z
YmluL3JvdXRlZC9yYWRpeC5oIC4vc2Jpbi9yb3V0ZWQvcmFkaXguaA0KLS0t
IC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3NiaW4vcm91dGVkL3JhZGl4LmgJ
MjAwOS0wOC0wMyAwODoxMzowNi4wMDAwMDAwMDAgKzAwMDANCisrKyAuL3Ni
aW4vcm91dGVkL3JhZGl4LmgJMjAxMS0wNC0wMyAxNjowODowNy4wMDAwMDAw
MDAgKzAwMDANCkBAIC0xMTUsNyArMTE1LDcgQEANCiAJCSh2b2lkICp2LCB2
b2lkICptYXNrLA0KIAkJICAgICBzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICpo
ZWFkLCBzdHJ1Y3QgcmFkaXhfbm9kZSBub2Rlc1tdKTsNCiAJc3RydWN0CXJh
ZGl4X25vZGUgKigqcm5oX2RlbGFkZHIpCS8qIHJlbW92ZSBiYXNlZCBvbiBz
b2NrYWRkciAqLw0KLQkJKHZvaWQgKnYsIHZvaWQgKm1hc2ssIHN0cnVjdCBy
YWRpeF9ub2RlX2hlYWQgKmhlYWQpOw0KKwkJKHZvaWQgKnYsIHZvaWQgKm1h
c2ssIHN0cnVjdCByYWRpeF9ub2RlX2hlYWQgKmhlYWQsIHN0cnVjdCByYWRp
eF9ub2RlICpybik7DQogCXN0cnVjdAlyYWRpeF9ub2RlICooKnJuaF9kZWxw
a3QpCS8qIHJlbW92ZSBiYXNlZCBvbiBwYWNrZXQgaGRyICovDQogCQkodm9p
ZCAqdiwgdm9pZCAqbWFzaywgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqaGVh
ZCk7DQogCXN0cnVjdAlyYWRpeF9ub2RlICooKnJuaF9tYXRjaGFkZHIpCS8q
IGxvY2F0ZSBiYXNlZCBvbiBzb2NrYWRkciAqLw0KZGlmZiAtdSAtciAuLi9z
cmNfb3JnXzguMl8yMDExMDMyOS9zYmluL3JvdXRlZC90YWJsZS5jIC4vc2Jp
bi9yb3V0ZWQvdGFibGUuYw0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5
L3NiaW4vcm91dGVkL3RhYmxlLmMJMjAwOS0wOC0wMyAwODoxMzowNi4wMDAw
MDAwMDAgKzAwMDANCisrKyAuL3NiaW4vcm91dGVkL3RhYmxlLmMJMjAxMS0w
NC0wMyAxNjowODowNy4wMDAwMDAwMDAgKzAwMDANCkBAIC0xODY1LDcgKzE4
NjUsNyBAQA0KIAltYXNrX3NvY2suc2luX2FkZHIuc19hZGRyID0gaHRvbmwo
cnQtPnJ0X21hc2spOw0KIAltYXNrdHJpbSgmbWFza19zb2NrKTsNCiAJaWYg
KHJ0ICE9IChzdHJ1Y3QgcnRfZW50cnkgKilyaGVhZC0+cm5oX2RlbGFkZHIo
JmRzdF9zb2NrLCAmbWFza19zb2NrLA0KLQkJCQkJCQlyaGVhZCkpIHsNCisJ
CQkJCQkJcmhlYWQsIE5VTEwpKSB7DQogCQltc2dsb2coInJuaF9kZWxhZGRy
KCkgZmFpbGVkIik7DQogCX0gZWxzZSB7DQogCQlmcmVlKHJ0KTsNCmRpZmYg
LXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL2NvbnRyaWIvaXBm
aWx0ZXIvbmV0aW5ldC9pcF9wb29sLmMgLi9zeXMvY29udHJpYi9pcGZpbHRl
ci9uZXRpbmV0L2lwX3Bvb2wuYw0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEw
MzI5L3N5cy9jb250cmliL2lwZmlsdGVyL25ldGluZXQvaXBfcG9vbC5jCTIw
MDctMTAtMTggMjE6NDI6MzguMDAwMDAwMDAwICswMDAwDQorKysgLi9zeXMv
Y29udHJpYi9pcGZpbHRlci9uZXRpbmV0L2lwX3Bvb2wuYwkyMDExLTA0LTAz
IDE2OjA3OjQ2LjAwMDAwMDAwMCArMDAwMA0KQEAgLTY3LDYgKzY3LDcgQEAN
CiAjaW5jbHVkZSAibmV0aW5ldC9pcF9jb21wYXQuaCINCiAjaW5jbHVkZSAi
bmV0aW5ldC9pcF9maWwuaCINCiAjaW5jbHVkZSAibmV0aW5ldC9pcF9wb29s
LmgiDQorI2luY2x1ZGUgPHN5cy9ybWxvY2suaD4NCiANCiAjaWYgZGVmaW5l
ZChJUEZJTFRFUl9MT09LVVApICYmIGRlZmluZWQoX0tFUk5FTCkgJiYgXA0K
ICAgICAgICgoQlNEID49IDE5ODkxMSkgJiYgIWRlZmluZWQoX19vc2ZfXykg
JiYgXA0KQEAgLTYyMCw3ICs2MjEsNyBAQA0KIA0KIAlSQURJWF9OT0RFX0hF
QURfTE9DSyhpcG8tPmlwb19oZWFkKTsNCiAJaXBvLT5pcG9faGVhZC0+cm5o
X2RlbGFkZHIoJmlwZS0+aXBuX2FkZHIsICZpcGUtPmlwbl9tYXNrLA0KLQkJ
CQkgICBpcG8tPmlwb19oZWFkKTsNCisJCQkJICAgaXBvLT5pcG9faGVhZCwg
TlVMTCk7DQogCVJBRElYX05PREVfSEVBRF9VTkxPQ0soaXBvLT5pcG9faGVh
ZCk7DQogDQogCWlwX3Bvb2xfbm9kZV9kZXJlZihpcGUpOw0KQEAgLTc1MSw3
ICs3NTIsNyBAQA0KIAlSQURJWF9OT0RFX0hFQURfTE9DSyhpcG8tPmlwb19o
ZWFkKTsNCiAJd2hpbGUgKChuID0gaXBvLT5pcG9fbGlzdCkgIT0gTlVMTCkg
ew0KIAkJaXBvLT5pcG9faGVhZC0+cm5oX2RlbGFkZHIoJm4tPmlwbl9hZGRy
LCAmbi0+aXBuX21hc2ssDQotCQkJCQkgICBpcG8tPmlwb19oZWFkKTsNCisJ
CQkJCSAgIGlwby0+aXBvX2hlYWQsIE5VTEwpOw0KIA0KIAkJKm4tPmlwbl9w
bmV4dCA9IG4tPmlwbl9uZXh0Ow0KIAkJaWYgKG4tPmlwbl9uZXh0KQ0KQEAg
LTk2Myw3ICs5NjQsNyBAQA0KIAlzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICpy
bmggPSBwOw0KIAlzdHJ1Y3QgcmFkaXhfbm9kZSAqZDsNCiANCi0JZCA9IHJu
aC0+cm5oX2RlbGFkZHIobi0+cm5fa2V5LCBOVUxMLCBybmgpOw0KKwlkID0g
cm5oLT5ybmhfZGVsYWRkcihuLT5ybl9rZXksIE5VTEwsIHJuaCwgTlVMTCk7
DQogCWlmIChkICE9IE5VTEwpIHsNCiAJCUZyZWVTKGQsIG1heF9rZXlsZW4g
KyAyICogc2l6ZW9mICgqZCkpOw0KIAl9DQpkaWZmIC11IC1yIC4uL3NyY19v
cmdfOC4yXzIwMTEwMzI5L3N5cy9jb250cmliL3BmL25ldC9wZi5jIC4vc3lz
L2NvbnRyaWIvcGYvbmV0L3BmLmMNCi0tLSAuLi9zcmNfb3JnXzguMl8yMDEx
MDMyOS9zeXMvY29udHJpYi9wZi9uZXQvcGYuYwkyMDEwLTA5LTIwIDE3OjAz
OjEwLjAwMDAwMDAwMCArMDAwMA0KKysrIC4vc3lzL2NvbnRyaWIvcGYvbmV0
L3BmLmMJMjAxMS0wNC0wMyAxNjowNzo0Ni4wMDAwMDAwMDAgKzAwMDANCkBA
IC05OSw5ICs5OSw3IEBADQogI2luY2x1ZGUgPG5ldC9pZl90eXBlcy5oPg0K
ICNpbmNsdWRlIDxuZXQvYnBmLmg+DQogI2luY2x1ZGUgPG5ldC9yb3V0ZS5o
Pg0KLSNpZm5kZWYgX19GcmVlQlNEX18NCiAjaW5jbHVkZSA8bmV0L3JhZGl4
X21wYXRoLmg+DQotI2VuZGlmDQogDQogI2luY2x1ZGUgPG5ldGluZXQvaW4u
aD4NCiAjaW5jbHVkZSA8bmV0aW5ldC9pbl92YXIuaD4NCkBAIC02MTY2LDkg
KzYxNjQsOSBAQA0KIAkJCWlmIChraWYtPnBmaWtfaWZwID09IGlmcCkNCiAJ
CQkJcmV0ID0gMTsNCiAjaWZkZWYgX19GcmVlQlNEX18gLyogTVVMVElQQVRI
X1JPVVRJTkcgKi8NCi0JCQlybiA9IE5VTEw7DQotI2Vsc2UNCiAJCQlybiA9
IHJuX21wYXRoX25leHQocm4pOw0KKyNlbHNlDQorCQkJcm4gPSBybl9tcGF0
aF9uZXh0KHJuLCAwKTsNCiAjZW5kaWYNCiAJCX0gd2hpbGUgKGNoZWNrX21w
YXRoID09IDEgJiYgcm4gIT0gTlVMTCAmJiByZXQgPT0gMCk7DQogCX0gZWxz
ZQ0KZGlmZiAtdSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvY29u
dHJpYi9wZi9uZXQvcGZfdGFibGUuYyAuL3N5cy9jb250cmliL3BmL25ldC9w
Zl90YWJsZS5jDQotLS0gLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL2Nv
bnRyaWIvcGYvbmV0L3BmX3RhYmxlLmMJMjAwOS0wOC0wMyAwODoxMzowNi4w
MDAwMDAwMDAgKzAwMDANCisrKyAuL3N5cy9jb250cmliL3BmL25ldC9wZl90
YWJsZS5jCTIwMTEtMDQtMDMgMTY6MDc6NDYuMDAwMDAwMDAwICswMDAwDQpA
QCAtNDQsNyArNDQsNyBAQA0KICNpbmNsdWRlIDxzeXMvbWJ1Zi5oPg0KICNp
bmNsdWRlIDxzeXMva2VybmVsLmg+DQogI2luY2x1ZGUgPHN5cy9sb2NrLmg+
DQotI2luY2x1ZGUgPHN5cy9yd2xvY2suaD4NCisjaW5jbHVkZSA8c3lzL3Jt
bG9jay5oPg0KICNpZmRlZiBfX0ZyZWVCU0RfXw0KICNpbmNsdWRlIDxzeXMv
bWFsbG9jLmg+DQogI2VuZGlmDQpAQCAtMTExNCwxNyArMTExNCw5IEBADQog
I2VuZGlmDQogCWlmIChLRU5UUllfTkVUV09SSyhrZSkpIHsNCiAJCXBmcl9w
cmVwYXJlX25ldHdvcmsoJm1hc2ssIGtlLT5wZnJrZV9hZiwga2UtPnBmcmtl
X25ldCk7DQotI2lmZGVmIF9fRnJlZUJTRF9fDQotCQlybiA9IHJuX2RlbGV0
ZSgma2UtPnBmcmtlX3NhLCAmbWFzaywgaGVhZCk7DQotI2Vsc2UNCiAJCXJu
ID0gcm5fZGVsZXRlKCZrZS0+cGZya2Vfc2EsICZtYXNrLCBoZWFkLCBOVUxM
KTsNCi0jZW5kaWYNCiAJfSBlbHNlDQotI2lmZGVmIF9fRnJlZUJTRF9fDQot
CQlybiA9IHJuX2RlbGV0ZSgma2UtPnBmcmtlX3NhLCBOVUxMLCBoZWFkKTsN
Ci0jZWxzZQ0KIAkJcm4gPSBybl9kZWxldGUoJmtlLT5wZnJrZV9zYSwgTlVM
TCwgaGVhZCwgTlVMTCk7DQotI2VuZGlmDQogCXNwbHgocyk7DQogDQogCWlm
IChybiA9PSBOVUxMKSB7DQpkaWZmIC11IC1yIC4uL3NyY19vcmdfOC4yXzIw
MTEwMzI5L3N5cy9rZXJuL3N1YnJfd2l0bmVzcy5jIC4vc3lzL2tlcm4vc3Vi
cl93aXRuZXNzLmMNCi0tLSAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMv
a2Vybi9zdWJyX3dpdG5lc3MuYwkyMDExLTAzLTI4IDE1OjI2OjQ4LjAwMDAw
MDAwMCArMDAwMA0KKysrIC4vc3lzL2tlcm4vc3Vicl93aXRuZXNzLmMJMjAx
MS0wNC0wMyAxNjowNzo1NC4wMDAwMDAwMDAgKzAwMDANCkBAIC01MDgsNyAr
NTA4LDcgQEANCiAJICogUm91dGluZw0KIAkgKi8NCiAJeyAic29fcmN2Iiwg
JmxvY2tfY2xhc3NfbXR4X3NsZWVwIH0sDQotCXsgInJhZGl4IG5vZGUgaGVh
ZCIsICZsb2NrX2NsYXNzX3J3IH0sDQorCXsgInJhZGl4IG5vZGUgaGVhZCIs
ICZsb2NrX2NsYXNzX3JtIH0sDQogCXsgInJ0ZW50cnkiLCAmbG9ja19jbGFz
c19tdHhfc2xlZXAgfSwNCiAJeyAiaWZhZGRyIiwgJmxvY2tfY2xhc3NfbXR4
X3NsZWVwIH0sDQogCXsgTlVMTCwgTlVMTCB9LA0KZGlmZiAtdSAtciAuLi9z
cmNfb3JnXzguMl8yMDExMDMyOS9zeXMva2Vybi92ZnNfZXhwb3J0LmMgLi9z
eXMva2Vybi92ZnNfZXhwb3J0LmMNCi0tLSAuLi9zcmNfb3JnXzguMl8yMDEx
MDMyOS9zeXMva2Vybi92ZnNfZXhwb3J0LmMJMjAwOS0xMC0wMSAxMzoxMTo0
NS4wMDAwMDAwMDAgKzAwMDANCisrKyAuL3N5cy9rZXJuL3Zmc19leHBvcnQu
YwkyMDExLTA0LTAzIDE2OjA3OjU0LjAwMDAwMDAwMCArMDAwMA0KQEAgLTQz
LDYgKzQzLDcgQEANCiAjaW5jbHVkZSA8c3lzL2phaWwuaD4NCiAjaW5jbHVk
ZSA8c3lzL2tlcm5lbC5oPg0KICNpbmNsdWRlIDxzeXMvbG9jay5oPg0KKyNp
bmNsdWRlIDxzeXMvcm1sb2NrLmg+DQogI2luY2x1ZGUgPHN5cy9tYWxsb2Mu
aD4NCiAjaW5jbHVkZSA8c3lzL21idWYuaD4NCiAjaW5jbHVkZSA8c3lzL21v
dW50Lmg+DQpAQCAtMjI4LDcgKzIyOSw3IEBADQogCXN0cnVjdCByYWRpeF9u
b2RlX2hlYWQgKnJuaCA9IChzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICopIHc7
DQogCXN0cnVjdCB1Y3JlZCAqY3JlZDsNCiANCi0JKCpybmgtPnJuaF9kZWxh
ZGRyKSAocm4tPnJuX2tleSwgcm4tPnJuX21hc2ssIHJuaCk7DQorCSgqcm5o
LT5ybmhfZGVsYWRkcikgKHJuLT5ybl9rZXksIHJuLT5ybl9tYXNrLCBybmgs
IE5VTEwpOw0KIAljcmVkID0gKChzdHJ1Y3QgbmV0Y3JlZCAqKXJuKS0+bmV0
Y19hbm9uOw0KIAlpZiAoY3JlZCAhPSBOVUxMKQ0KIAkJY3JmcmVlKGNyZWQp
Ow0KQEAgLTQyNyw2ICs0MjgsNyBAQA0KIAlyZWdpc3RlciBzdHJ1Y3QgbmV0
Y3JlZCAqbnA7DQogCXJlZ2lzdGVyIHN0cnVjdCByYWRpeF9ub2RlX2hlYWQg
KnJuaDsNCiAJc3RydWN0IHNvY2thZGRyICpzYWRkcjsNCisJc3RydWN0IHJt
X3ByaW90cmFja2VyIHRyYWNrZXI7DQogDQogCW5lcCA9IG1wLT5tbnRfZXhw
b3J0Ow0KIAlpZiAobmVwID09IE5VTEwpDQpAQCAtNDQwLDEwICs0NDIsMTAg
QEANCiAJCQlzYWRkciA9IG5hbTsNCiAJCQlybmggPSBuZXAtPm5lX3J0YWJs
ZVtzYWRkci0+c2FfZmFtaWx5XTsNCiAJCQlpZiAocm5oICE9IE5VTEwpIHsN
Ci0JCQkJUkFESVhfTk9ERV9IRUFEX1JMT0NLKHJuaCk7DQorCQkJCVJBRElY
X05PREVfSEVBRF9STE9DSyhybmgsICZ0cmFja2VyKTsNCiAJCQkJbnAgPSAo
c3RydWN0IG5ldGNyZWQgKikNCiAJCQkJICAgICgqcm5oLT5ybmhfbWF0Y2hh
ZGRyKShzYWRkciwgcm5oKTsNCi0JCQkJUkFESVhfTk9ERV9IRUFEX1JVTkxP
Q0socm5oKTsNCisJCQkJUkFESVhfTk9ERV9IRUFEX1JVTkxPQ0socm5oLCAm
dHJhY2tlcik7DQogCQkJCWlmIChucCAmJiBucC0+bmV0Y19ybm9kZXMtPnJu
X2ZsYWdzICYgUk5GX1JPT1QpDQogCQkJCQlucCA9IE5VTEw7DQogCQkJfQ0K
ZGlmZiAtdSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvbmV0L2lm
LmMgLi9zeXMvbmV0L2lmLmMNCi0tLSAuLi9zcmNfb3JnXzguMl8yMDExMDMy
OS9zeXMvbmV0L2lmLmMJMjAxMS0wMy0yOCAxNToyNjo1MS4wMDAwMDAwMDAg
KzAwMDANCisrKyAuL3N5cy9uZXQvaWYuYwkyMDExLTA0LTAzIDE2OjA3OjU3
LjAwMDAwMDAwMCArMDAwMA0KQEAgLTQ5LDYgKzQ5LDcgQEANCiAjaW5jbHVk
ZSA8c3lzL3Byb3Rvc3cuaD4NCiAjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPg0K
ICNpbmNsdWRlIDxzeXMvbG9jay5oPg0KKyNpbmNsdWRlIDxzeXMvcm1sb2Nr
Lmg+DQogI2luY2x1ZGUgPHN5cy9yZWZjb3VudC5oPg0KICNpbmNsdWRlIDxz
eXMvbW9kdWxlLmg+DQogI2luY2x1ZGUgPHN5cy9yd2xvY2suaD4NCmRpZmYg
LXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldC9wZmlsLmMg
Li9zeXMvbmV0L3BmaWwuYw0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5
L3N5cy9uZXQvcGZpbC5jCTIwMTAtMDItMDcgMDk6MDA6MjIuMDAwMDAwMDAw
ICswMDAwDQorKysgLi9zeXMvbmV0L3BmaWwuYwkyMDExLTA0LTAzIDE2OjA3
OjU3LjAwMDAwMDAwMCArMDAwMA0KQEAgLTM5LDcgKzM5LDYgQEANCiAjaW5j
bHVkZSA8c3lzL3NvY2tldHZhci5oPg0KICNpbmNsdWRlIDxzeXMvc3lzdG0u
aD4NCiAjaW5jbHVkZSA8c3lzL2NvbmR2YXIuaD4NCi0jaW5jbHVkZSA8c3lz
L2xvY2suaD4NCiAjaW5jbHVkZSA8c3lzL211dGV4Lmg+DQogI2luY2x1ZGUg
PHN5cy9wcm9jLmg+DQogI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPg0KZGlmZiAt
dSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvbmV0L3JhZGl4LmMg
Li9zeXMvbmV0L3JhZGl4LmMNCi0tLSAuLi9zcmNfb3JnXzguMl8yMDExMDMy
OS9zeXMvbmV0L3JhZGl4LmMJMjAxMC0wNC0wMiAwNTowMjo1MC4wMDAwMDAw
MDAgKzAwMDANCisrKyAuL3N5cy9uZXQvcmFkaXguYwkyMDExLTA0LTAzIDE2
OjA3OjU3LjAwMDAwMDAwMCArMDAwMA0KQEAgLTQxLDYgKzQxLDcgQEANCiAj
aW5jbHVkZSA8c3lzL3N5c3RtLmg+DQogI2luY2x1ZGUgPHN5cy9tYWxsb2Mu
aD4NCiAjaW5jbHVkZSA8c3lzL3N5c2xvZy5oPg0KKyNpbmNsdWRlIDxzeXMv
cm1sb2NrLmg+DQogI2luY2x1ZGUgPG5ldC9yYWRpeC5oPg0KICNpbmNsdWRl
ICJvcHRfbXBhdGguaCINCiAjaWZkZWYgUkFESVhfTVBBVEgNCkBAIC02MTQs
NyArNjE1LDcgQEANCiAJc3RydWN0IHJhZGl4X25vZGUgdHJlZW5vZGVzWzJd
Ow0KIHsNCiAJY2FkZHJfdCB2ID0gKGNhZGRyX3Qpdl9hcmcsIG5ldG1hc2sg
PSAoY2FkZHJfdCluX2FyZzsNCi0JcmVnaXN0ZXIgc3RydWN0IHJhZGl4X25v
ZGUgKnQsICp4ID0gMCwgKnR0Ow0KKwlyZWdpc3RlciBzdHJ1Y3QgcmFkaXhf
bm9kZSAqdCwgKnggPSAwLCAqeHggPSAwLCAqdHQ7DQogCXN0cnVjdCByYWRp
eF9ub2RlICpzYXZlZF90dCwgKnRvcCA9IGhlYWQtPnJuaF90cmVldG9wOw0K
IAlzaG9ydCBiID0gMCwgYl9sZWFmID0gMDsNCiAJaW50IGtleWR1cGxpY2F0
ZWQ7DQpAQCAtNzIzLDEyICs3MjQsMTkgQEANCiAJCXggPSB0LT5ybl9yaWdo
dDsNCiAJLyogUHJvbW90ZSBnZW5lcmFsIHJvdXRlcyBmcm9tIGJlbG93ICov
DQogCWlmICh4LT5ybl9iaXQgPCAwKSB7DQotCSAgICBmb3IgKG1wID0gJnQt
PnJuX21rbGlzdDsgeDsgeCA9IHgtPnJuX2R1cGVka2V5KQ0KKyAgICAgICAg
ICAgIGZvciAobXAgPSAmdC0+cm5fbWtsaXN0OyB4OyB4eCA9IHgsIHggPSB4
LT5ybl9kdXBlZGtleSkgew0KKyAgICAgICAgICAgICAgICBpZiAoeHggJiYg
eHgtPnJuX21rbGlzdCAmJiB4eC0+cm5fbWFzayA9PSB4LT5ybl9tYXNrICYm
DQorCQkJCXgtPnJuX21rbGlzdCA9PSAwKSB7DQorCQkJLyogbXVsdGlwYXRo
IHJvdXRlLCBidW1wIHJlZmNvdW50IG9uIGZpcnN0IG1rbGlzdCAqLw0KKwkJ
CXgtPnJuX21rbGlzdCA9IHh4LT5ybl9ta2xpc3Q7DQorCQkJeC0+cm5fbWts
aXN0LT5ybV9yZWZzKys7DQorCQl9DQogCQlpZiAoeC0+cm5fbWFzayAmJiAo
eC0+cm5fYml0ID49IGJfbGVhZikgJiYgeC0+cm5fbWtsaXN0ID09IDApIHsN
CiAJCQkqbXAgPSBtID0gcm5fbmV3X3JhZGl4X21hc2soeCwgMCk7DQogCQkJ
aWYgKG0pDQogCQkJCW1wID0gJm0tPnJtX21rbGlzdDsNCiAJCX0NCisJICAg
IH0NCiAJfSBlbHNlIGlmICh4LT5ybl9ta2xpc3QpIHsNCiAJCS8qDQogCQkg
KiBTa2lwIG92ZXIgbWFza3Mgd2hvc2UgaW5kZXggaXMgPiB0aGF0IG9mIG5l
dyBub2RlDQpAQCAtNzYwLDExICs3NjgsMzAgQEANCiAJCQlicmVhazsNCiAJ
CWlmIChtLT5ybV9mbGFncyAmIFJORl9OT1JNQUwpIHsNCiAJCQltbWFzayA9
IG0tPnJtX2xlYWYtPnJuX21hc2s7DQotCQkJaWYgKHR0LT5ybl9mbGFncyAm
IFJORl9OT1JNQUwpIHsNCi0jaWYgIWRlZmluZWQoUkFESVhfTVBBVEgpDQot
CQkJICAgIGxvZyhMT0dfRVJSLA0KLQkJCSAgICAgICAgIk5vbi11bmlxdWUg
bm9ybWFsIHJvdXRlLCBtYXNrIG5vdCBlbnRlcmVkXG4iKTsNCisJCQlpZiAo
a2V5ZHVwbGljYXRlZCkgew0KKwkJCQlpZiAobS0+cm1fbGVhZi0+cm5fcGFy
ZW50ID09IHR0KQ0KKwkJCQkJLyogbmV3IHJvdXRlIGlzIGJldHR0ZXIgKi8N
CisJCQkJCW0tPnJtX2xlYWYgPSB0dDsNCisjaWZkZWYgRElBR05PU1RJQw0K
KwkJCQllbHNlIHsNCisJCQkJCWZvciAodCA9IG0tPnJtX2xlYWY7IHQ7DQor
CQkJCQkJdCA9IHQtPnJuX2R1cGVka2V5KSB7DQorCQkJCQkJYnJlYWs7DQor
CQkJCQl9DQorCQkJCQlpZiAodCA9PSBOVUxMKSB7DQorCQkJCQkJbG9nKExP
R19FUlIsICJOb24tdW5pcXVlICINCisJCQkJCQkJIm5vcm1hbCByb3V0ZSBv
biBkdXBlZGtleSwgIg0KKwkJCQkJCQkibWFzayBub3QgZW50ZXJlZFxuIik7
DQorCQkJCQkJcmV0dXJuIHR0Ow0KKwkJCQkJfQ0KKwkJCQl9DQogI2VuZGlm
DQorCQkJCW0tPnJtX3JlZnMrKzsNCisJCQkJdHQtPnJuX21rbGlzdCA9IG07
DQorCQkJCXJldHVybiB0dDsNCisJCQl9IGVsc2UgaWYgKHR0LT5ybl9mbGFn
cyAmIFJORl9OT1JNQUwpIHsNCisJCQkJbG9nKExPR19FUlIsICJOb24tdW5p
cXVlIG5vcm1hbCByb3V0ZSwiDQorCQkJCQkiIG1hc2sgbm90IGVudGVyZWRc
biIpOw0KIAkJCQlyZXR1cm4gdHQ7DQogCQkJfQ0KIAkJfSBlbHNlDQpAQCAt
NzgzLDkgKzgxMCwxMCBAQA0KIH0NCiANCiBzdHJ1Y3QgcmFkaXhfbm9kZSAq
DQotcm5fZGVsZXRlKHZfYXJnLCBuZXRtYXNrX2FyZywgaGVhZCkNCitybl9k
ZWxldGUodl9hcmcsIG5ldG1hc2tfYXJnLCBoZWFkLCBybikNCiAJdm9pZCAq
dl9hcmcsICpuZXRtYXNrX2FyZzsNCiAJc3RydWN0IHJhZGl4X25vZGVfaGVh
ZCAqaGVhZDsNCisJc3RydWN0IHJhZGl4X25vZGUgKnJuOw0KIHsNCiAJcmVn
aXN0ZXIgc3RydWN0IHJhZGl4X25vZGUgKnQsICpwLCAqeCwgKnR0Ow0KIAlz
dHJ1Y3QgcmFkaXhfbWFzayAqbSwgKnNhdmVkX20sICoqbXA7DQpAQCAtODE1
LDEzICs4NDMsMzcgQEANCiAJCQlpZiAoKHR0ID0gdHQtPnJuX2R1cGVka2V5
KSA9PSAwKQ0KIAkJCQlyZXR1cm4gKDApOw0KIAl9DQorI2lmZGVmIFJBRElY
X01QQVRIDQorCWlmIChybikgew0KKwkJd2hpbGUgKHR0ICE9IHJuKQ0KKwkJ
CWlmICgodHQgPSB0dC0+cm5fZHVwZWRrZXkpID09IDApDQorCQkJCXJldHVy
biAoMCk7DQorCX0NCisjZW5kaWYNCiAJaWYgKHR0LT5ybl9tYXNrID09IDAg
fHwgKHNhdmVkX20gPSBtID0gdHQtPnJuX21rbGlzdCkgPT0gMCkNCiAJCWdv
dG8gb24xOw0KIAlpZiAodHQtPnJuX2ZsYWdzICYgUk5GX05PUk1BTCkgew0K
LQkJaWYgKG0tPnJtX2xlYWYgIT0gdHQgfHwgbS0+cm1fcmVmcyA+IDApIHsN
CisJCWlmIChtLT5ybV9sZWFmICE9IHR0ICYmIG0tPnJtX3JlZnMgPT0gMCkg
ew0KIAkJCWxvZyhMT0dfRVJSLCAicm5fZGVsZXRlOiBpbmNvbnNpc3RlbnQg
YW5ub3RhdGlvblxuIik7DQogCQkJcmV0dXJuIDA7ICAvKiBkYW5nbGluZyBy
ZWYgY291bGQgY2F1c2UgZGlzYXN0ZXIgKi8NCiAJCX0NCisJCWlmIChtLT5y
bV9sZWFmICE9IHR0KSB7DQorCQkJaWYgKC0tbS0+cm1fcmVmcyA+PSAwKQ0K
KwkJCQlnb3RvIG9uMTsNCisJCX0NCisJCS8qIHR0IGlzIGN1cnJlbnRseSB0
aGUgaGVhZCBvZiB0aGUgcG9zc2libGUgbXVsdGlwYXRoIGNoYWluICovDQor
CQlpZiAobS0+cm1fcmVmcyA+IDApIHsNCisJCQlpZiAodHQtPnJuX2R1cGVk
a2V5ID09IE5VTEwgfHwNCisJCQkJdHQtPnJuX2R1cGVka2V5LT5ybl9ta2xp
c3QgIT0gbSkgew0KKwkJCQkJbG9nKExPR19FUlIsICJybl9kZWxldGU6IGlu
Y29uc2lzdGVudCAiDQorCQkJCQkJImR1cGVka2V5IGxpc3RcbiIpOw0KKwkJ
CQkJcmV0dXJuICgwKTsNCisJCQl9DQorCQkJbS0+cm1fbGVhZiA9IHR0LT5y
bl9kdXBlZGtleTsNCisJCQktLW0tPnJtX3JlZnM7DQorCQkJZ290byBvbjE7
DQorCQl9DQorCQkvKiBlbHNlIHR0IGlzIGxhc3QgYW5kIG9ubHkgcm91dGUg
Ki8NCiAJfSBlbHNlIHsNCiAJCWlmIChtLT5ybV9tYXNrICE9IHR0LT5ybl9t
YXNrKSB7DQogCQkJbG9nKExPR19FUlIsICJybl9kZWxldGU6IGluY29uc2lz
dGVudCBhbm5vdGF0aW9uXG4iKTsNCkBAIC04NzUsMTUgKzkyNywxMCBAQA0K
IAkJCWVsc2UNCiAJCQkJdC0+cm5fcmlnaHQgPSB4Ow0KIAkJfSBlbHNlIHsN
Ci0JCQkvKiBmaW5kIG5vZGUgaW4gZnJvbnQgb2YgdHQgb24gdGhlIGNoYWlu
ICovDQotCQkJZm9yICh4ID0gcCA9IHNhdmVkX3R0OyBwICYmIHAtPnJuX2R1
cGVka2V5ICE9IHR0OykNCi0JCQkJcCA9IHAtPnJuX2R1cGVka2V5Ow0KLQkJ
CWlmIChwKSB7DQotCQkJCXAtPnJuX2R1cGVka2V5ID0gdHQtPnJuX2R1cGVk
a2V5Ow0KLQkJCQlpZiAodHQtPnJuX2R1cGVka2V5KQkJLyogcGFyZW50ICov
DQotCQkJCQl0dC0+cm5fZHVwZWRrZXktPnJuX3BhcmVudCA9IHA7DQotCQkJ
CQkJCQkvKiBwYXJlbnQgKi8NCi0JCQl9IGVsc2UgbG9nKExPR19FUlIsICJy
bl9kZWxldGU6IGNvdWxkbid0IGZpbmQgdXNcbiIpOw0KKwkJCXggPSBzYXZl
ZF90dDsNCisJCQl0LT5ybl9kdXBlZGtleSA9IHR0LT5ybl9kdXBlZGtleTsN
CisJCQlpZiAodHQtPnJuX2R1cGVka2V5KQ0KKwkJCQl0dC0+cm5fZHVwZWRr
ZXktPnJuX3BhcmVudCA9IHQ7DQogCQl9DQogCQl0ID0gdHQgKyAxOw0KIAkJ
aWYgICh0LT5ybl9mbGFncyAmIFJORl9BQ1RJVkUpIHsNCkBAIC05MzEsOCAr
OTc4LDE2IEBADQogCQkJCWlmIChtID09IHgtPnJuX21rbGlzdCkgew0KIAkJ
CQkJc3RydWN0IHJhZGl4X21hc2sgKm1tID0gbS0+cm1fbWtsaXN0Ow0KIAkJ
CQkJeC0+cm5fbWtsaXN0ID0gMDsNCi0JCQkJCWlmICgtLShtLT5ybV9yZWZz
KSA8IDApDQorCQkJCQlpZiAoLS0obS0+cm1fcmVmcykgPCAwKSB7DQogCQkJ
CQkJTUtGcmVlKG0pOw0KKwkJCQkJfSBlbHNlIGlmIChtLT5ybV9mbGFncyAm
IFJORl9OT1JNQUwpIHsNCisJCQkJCQkvKg0KKwkJCQkJCSogZG9uJ3QgcHJv
Z3Jlc3MgYmVjYXVzZSB0aGlzDQorCQkJCQkJKiBhIG11bHRpcGF0aCByb3V0
ZS4gTmV4dA0KKwkJCQkJCSogcm91dGUgd2lsbCB1c2UgdGhlIHNhbWUgbS4N
CisJCQkJCQkqLw0KKwkJCQkJCW1tID0gbTsNCisJCQkJCX0NCiAJCQkJCW0g
PSBtbTsNCiAJCQkJfQ0KIAkJCWlmIChtKQ0KZGlmZiAtdSAtciAuLi9zcmNf
b3JnXzguMl8yMDExMDMyOS9zeXMvbmV0L3JhZGl4LmggLi9zeXMvbmV0L3Jh
ZGl4LmgNCi0tLSAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvbmV0L3Jh
ZGl4LmgJMjAxMC0wMy0yMyAwOTo1ODo1OS4wMDAwMDAwMDAgKzAwMDANCisr
KyAuL3N5cy9uZXQvcmFkaXguaAkyMDExLTA0LTAzIDE2OjA3OjU3LjAwMDAw
MDAwMCArMDAwMA0KQEAgLTM2LDcgKzM2LDcgQEANCiAjaWZkZWYgX0tFUk5F
TA0KICNpbmNsdWRlIDxzeXMvX2xvY2suaD4NCiAjaW5jbHVkZSA8c3lzL19t
dXRleC5oPg0KLSNpbmNsdWRlIDxzeXMvX3J3bG9jay5oPg0KKyNpbmNsdWRl
IDxzeXMvX3JtbG9jay5oPg0KICNlbmRpZg0KIA0KICNpZmRlZiBNQUxMT0Nf
REVDTEFSRQ0KQEAgLTExNCw3ICsxMTQsNyBAQA0KIAkJKHZvaWQgKnYsIHZv
aWQgKm1hc2ssDQogCQkgICAgIHN0cnVjdCByYWRpeF9ub2RlX2hlYWQgKmhl
YWQsIHN0cnVjdCByYWRpeF9ub2RlIG5vZGVzW10pOw0KIAlzdHJ1Y3QJcmFk
aXhfbm9kZSAqKCpybmhfZGVsYWRkcikJLyogcmVtb3ZlIGJhc2VkIG9uIHNv
Y2thZGRyICovDQotCQkodm9pZCAqdiwgdm9pZCAqbWFzaywgc3RydWN0IHJh
ZGl4X25vZGVfaGVhZCAqaGVhZCk7DQorCQkodm9pZCAqdiwgdm9pZCAqbWFz
aywgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqaGVhZCwgc3RydWN0IHJhZGl4
X25vZGUgKnJuKTsNCiAJc3RydWN0CXJhZGl4X25vZGUgKigqcm5oX2RlbHBr
dCkJLyogcmVtb3ZlIGJhc2VkIG9uIHBhY2tldCBoZHIgKi8NCiAJCSh2b2lk
ICp2LCB2b2lkICptYXNrLCBzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICpoZWFk
KTsNCiAJc3RydWN0CXJhZGl4X25vZGUgKigqcm5oX21hdGNoYWRkcikJLyog
bG9jYXRlIGJhc2VkIG9uIHNvY2thZGRyICovDQpAQCAtMTMzLDcgKzEzMyw3
IEBADQogCXN0cnVjdAlyYWRpeF9ub2RlIHJuaF9ub2Rlc1szXTsJLyogZW1w
dHkgdHJlZSBmb3IgY29tbW9uIGNhc2UgKi8NCiAJaW50CXJuaF9tdWx0aXBh
dGg7CQkJLyogbXVsdGlwYXRoIGNhcGFibGUgPyAqLw0KICNpZmRlZiBfS0VS
TkVMDQotCXN0cnVjdAlyd2xvY2sgcm5oX2xvY2s7CQkvKiBsb2NrcyBlbnRp
cmUgcmFkaXggdHJlZSAqLw0KKwlzdHJ1Y3QJcm1sb2NrIHJuaF9sb2NrOwkJ
LyogbG9ja3MgZW50aXJlIHJhZGl4IHRyZWUgKi8NCiAjZW5kaWYNCiB9Ow0K
IA0KQEAgLTE0NywxNyArMTQ3LDE1IEBADQogI2RlZmluZSBGcmVlKHApIGZy
ZWUoKGNhZGRyX3QpcCwgTV9SVEFCTEUpOw0KIA0KICNkZWZpbmUJUkFESVhf
Tk9ERV9IRUFEX0xPQ0tfSU5JVChybmgpCVwNCi0gICAgcndfaW5pdF9mbGFn
cygmKHJuaCktPnJuaF9sb2NrLCAicmFkaXggbm9kZSBoZWFkIiwgMCkNCi0j
ZGVmaW5lCVJBRElYX05PREVfSEVBRF9MT0NLKHJuaCkJcndfd2xvY2soJihy
bmgpLT5ybmhfbG9jaykNCi0jZGVmaW5lCVJBRElYX05PREVfSEVBRF9VTkxP
Q0socm5oKQlyd193dW5sb2NrKCYocm5oKS0+cm5oX2xvY2spDQotI2RlZmlu
ZQlSQURJWF9OT0RFX0hFQURfUkxPQ0socm5oKQlyd19ybG9jaygmKHJuaCkt
PnJuaF9sb2NrKQ0KLSNkZWZpbmUJUkFESVhfTk9ERV9IRUFEX1JVTkxPQ0so
cm5oKQlyd19ydW5sb2NrKCYocm5oKS0+cm5oX2xvY2spDQotI2RlZmluZQlS
QURJWF9OT0RFX0hFQURfTE9DS19UUllfVVBHUkFERShybmgpCXJ3X3RyeV91
cGdyYWRlKCYocm5oKS0+cm5oX2xvY2spDQotDQotDQotI2RlZmluZQlSQURJ
WF9OT0RFX0hFQURfREVTVFJPWShybmgpCXJ3X2Rlc3Ryb3koJihybmgpLT5y
bmhfbG9jaykNCi0jZGVmaW5lCVJBRElYX05PREVfSEVBRF9MT0NLX0FTU0VS
VChybmgpIHJ3X2Fzc2VydCgmKHJuaCktPnJuaF9sb2NrLCBSQV9MT0NLRUQp
DQotI2RlZmluZQlSQURJWF9OT0RFX0hFQURfV0xPQ0tfQVNTRVJUKHJuaCkg
cndfYXNzZXJ0KCYocm5oKS0+cm5oX2xvY2ssIFJBX1dMT0NLRUQpDQorCXJt
X2luaXRfZmxhZ3MoJihybmgpLT5ybmhfbG9jaywgInJhZGl4IG5vZGUgaGVh
ZCIsIDApDQorI2RlZmluZSAgICAgICAgUkFESVhfTk9ERV9IRUFEX0xPQ0so
cm5oKSAgICAgICBybV93bG9jaygmKHJuaCktPnJuaF9sb2NrKQ0KKyNkZWZp
bmUgICAgICAgIFJBRElYX05PREVfSEVBRF9VTkxPQ0socm5oKSAgICAgcm1f
d3VubG9jaygmKHJuaCktPnJuaF9sb2NrKQ0KKyNkZWZpbmUgICAgICAgIFJB
RElYX05PREVfSEVBRF9STE9DSyhybmgsIHRyYWNrZXIpICAgICBybV9ybG9j
aygmKHJuaCktPnJuaF9sb2NrLCAodHJhY2tlcikpDQorI2RlZmluZSAgICAg
ICAgUkFESVhfTk9ERV9IRUFEX1JVTkxPQ0socm5oLCB0cmFja2VyKSAgIHJt
X3J1bmxvY2soJihybmgpLT5ybmhfbG9jaywgKHRyYWNrZXIpKQ0KKw0KKyNk
ZWZpbmUgICAgICAgIFJBRElYX05PREVfSEVBRF9ERVNUUk9ZKHJuaCkgICAg
cm1fZGVzdHJveSgmKHJuaCktPnJuaF9sb2NrKQ0KKyNkZWZpbmUgICAgICAg
IFJBRElYX05PREVfSEVBRF9MT0NLX0FTU0VSVChybmgpICAgICAgICBybV93
b3duZWQoJihybmgpLT5ybmhfbG9jaykNCisjZGVmaW5lICAgICAgICBSQURJ
WF9OT0RFX0hFQURfV0xPQ0tfQVNTRVJUKHJuaCkgICAgICAgcm1fd293bmVk
KCYocm5oKS0+cm5oX2xvY2spDQogI2VuZGlmIC8qIF9LRVJORUwgKi8NCiAN
CiB2b2lkCSBybl9pbml0KGludCk7DQpAQCAtMTY4LDcgKzE2Niw3IEBADQog
CSAqcm5fYWRkbWFzayh2b2lkICosIGludCwgaW50KSwNCiAJICpybl9hZGRy
b3V0ZSAodm9pZCAqLCB2b2lkICosIHN0cnVjdCByYWRpeF9ub2RlX2hlYWQg
KiwNCiAJCQlzdHJ1Y3QgcmFkaXhfbm9kZSBbMl0pLA0KLQkgKnJuX2RlbGV0
ZSh2b2lkICosIHZvaWQgKiwgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqKSwN
CisJICpybl9kZWxldGUodm9pZCAqLCB2b2lkICosIHN0cnVjdCByYWRpeF9u
b2RlX2hlYWQgKiwgc3RydWN0IHJhZGl4X25vZGUgKiksDQogCSAqcm5fbG9v
a3VwICh2b2lkICp2X2FyZywgdm9pZCAqbV9hcmcsDQogCQkgICAgICAgIHN0
cnVjdCByYWRpeF9ub2RlX2hlYWQgKmhlYWQpLA0KIAkgKnJuX21hdGNoKHZv
aWQgKiwgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqKTsNCmRpZmYgLXUgLXIg
Li4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldC9yYWRpeF9tcGF0aC5j
IC4vc3lzL25ldC9yYWRpeF9tcGF0aC5jDQotLS0gLi4vc3JjX29yZ184LjJf
MjAxMTAzMjkvc3lzL25ldC9yYWRpeF9tcGF0aC5jCTIwMTAtMDQtMDIgMDU6
MDI6NTAuMDAwMDAwMDAwICswMDAwDQorKysgLi9zeXMvbmV0L3JhZGl4X21w
YXRoLmMJMjAxMS0wNC0wNCAxOTozMzoxNi4wMDAwMDAwMDAgKzAwMDANCkBA
IC00NSw2ICs0NSw4IEBADQogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCiAj
aW5jbHVkZSA8c3lzL2RvbWFpbi5oPg0KICNpbmNsdWRlIDxzeXMvc3lzbG9n
Lmg+DQorI2luY2x1ZGUgPHN5cy9sb2NrLmg+DQorI2luY2x1ZGUgPHN5cy9y
bWxvY2suaD4NCiAjaW5jbHVkZSA8bmV0L3JhZGl4Lmg+DQogI2luY2x1ZGUg
PG5ldC9yYWRpeF9tcGF0aC5oPg0KICNpbmNsdWRlIDxuZXQvcm91dGUuaD4N
CkBAIC01NCw3ICs1Niw3IEBADQogLyoNCiAgKiBnaXZlIHNvbWUgaml0dGVy
IHRvIGhhc2gsIHRvIGF2b2lkIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHJv
dXRlcnMNCiAgKi8NCi1zdGF0aWMgdWludDMyX3QgaGFzaGppdHRlcjsNCit1
aW50MzJfdCBoYXNoaml0dGVyOw0KIA0KIGludA0KIHJuX21wYXRoX2NhcGFi
bGUoc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqcm5oKQ0KQEAgLTc3LDEwICs3
OSwxMSBAQA0KIAkJcmV0dXJuIE5VTEw7DQogfQ0KIA0KLXVpbnQzMl90DQor
Ly91aW50MzJfdA0KK2ludDY0X3QNCiBybl9tcGF0aF9jb3VudChzdHJ1Y3Qg
cmFkaXhfbm9kZSAqcm4pDQogew0KLQl1aW50MzJfdCBpID0gMDsNCisJaW50
NjRfdCBpID0gMDsNCiAJc3RydWN0IHJ0ZW50cnkgKnJ0Ow0KIAkNCiAJd2hp
bGUgKHJuICE9IE5VTEwpIHsNCkBAIC0xMTIsNDYgKzExNSwxNCBAQA0KIAkJ
ICogd2UgbmVlZCB0byBjb21wYXJlIHRoZSBpbnRlcmZhY2UgYWRkcmVzcyBi
ZWNhdXNlDQogCQkgKiBydF9nYXRld2F5IGlzIGEgc3BlY2lhbCBzb2NrYWRk
X2RsIHN0cnVjdHVyZQ0KIAkJICovDQotCQlpZiAocnQtPnJ0X2dhdGV3YXkt
PnNhX2ZhbWlseSA9PSBBRl9MSU5LKSB7DQotCQkJaWYgKCFtZW1jbXAocnQt
PnJ0X2lmYS0+aWZhX2FkZHIsIGdhdGUsIGdhdGUtPnNhX2xlbikpDQorCQlp
ZiAocnQtPnJ0X2dhdGV3YXktPnNhX2xlbiA9PSBnYXRlLT5zYV9sZW4gJiYN
CisJCQkhbWVtY21wKHJ0LT5ydF9nYXRld2F5LCBnYXRlLCBnYXRlLT5zYV9s
ZW4pKQ0KIAkJCQlicmVhazsNCi0JCX0gZWxzZSB7DQotCQkJaWYgKHJ0LT5y
dF9nYXRld2F5LT5zYV9sZW4gPT0gZ2F0ZS0+c2FfbGVuICYmDQotCQkJICAg
ICFtZW1jbXAocnQtPnJ0X2dhdGV3YXksIGdhdGUsIGdhdGUtPnNhX2xlbikp
DQotCQkJCWJyZWFrOw0KLQkJfQ0KIAl9IHdoaWxlICgocm4gPSBybl9tcGF0
aF9uZXh0KHJuKSkgIT0gTlVMTCk7DQogDQogCXJldHVybiAoc3RydWN0IHJ0
ZW50cnkgKilybjsNCiB9DQogDQotLyogDQotICogZ28gdGhyb3VnaCB0aGUg
Y2hhaW4gYW5kIHVubGluayAicnQiIGZyb20gdGhlIGxpc3QNCi0gKiB0aGUg
Y2FsbGVyIHdpbGwgZnJlZSAicnQiDQotICovDQotaW50DQotcnRfbXBhdGhf
ZGVsZHVwKHN0cnVjdCBydGVudHJ5ICpoZWFkcnQsIHN0cnVjdCBydGVudHJ5
ICpydCkNCi17DQotICAgICAgICBzdHJ1Y3QgcmFkaXhfbm9kZSAqdCwgKnR0
Ow0KLQ0KLSAgICAgICAgaWYgKCFoZWFkcnQgfHwgIXJ0KQ0KLSAgICAgICAg
ICAgIHJldHVybiAoMCk7DQotICAgICAgICB0ID0gKHN0cnVjdCByYWRpeF9u
b2RlICopaGVhZHJ0Ow0KLSAgICAgICAgdHQgPSBybl9tcGF0aF9uZXh0KHQp
Ow0KLSAgICAgICAgd2hpbGUgKHR0KSB7DQotICAgICAgICAgICAgaWYgKHR0
ID09IChzdHJ1Y3QgcmFkaXhfbm9kZSAqKXJ0KSB7DQotICAgICAgICAgICAg
ICAgIHQtPnJuX2R1cGVka2V5ID0gdHQtPnJuX2R1cGVka2V5Ow0KLSAgICAg
ICAgICAgICAgICB0dC0+cm5fZHVwZWRrZXkgPSBOVUxMOw0KLSAgICAJICAg
ICAgICB0dC0+cm5fZmxhZ3MgJj0gflJORl9BQ1RJVkU7DQotCSAgICAgICAg
dHRbMV0ucm5fZmxhZ3MgJj0gflJORl9BQ1RJVkU7DQotICAgICAgICAgICAg
ICAgIHJldHVybiAoMSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAg
IHQgPSB0dDsNCi0gICAgICAgICAgICB0dCA9IHJuX21wYXRoX25leHQoKHN0
cnVjdCByYWRpeF9ub2RlICopdCk7DQotICAgICAgICB9DQotICAgICAgICBy
ZXR1cm4gKDApOw0KLX0NCi0NCiAvKg0KICAqIGNoZWNrIGlmIHdlIGhhdmUg
dGhlIHNhbWUga2V5L21hc2svZ2F0ZXdheSBvbiB0aGUgdGFibGUgYWxyZWFk
eS4NCiAgKi8NCkBAIC0yNjIsOSArMjMzLDEwIEBADQogcnRhbGxvY19tcGF0
aF9maWIoc3RydWN0IHJvdXRlICpybywgdWludDMyX3QgaGFzaCwgdV9pbnQg
ZmlibnVtKQ0KIHsNCiAJc3RydWN0IHJhZGl4X25vZGUgKnJuMCwgKnJuOw0K
LQl1X2ludDMyX3QgbjsNCisJdV9pbnQzMl90IG4gPSAwOw0KIAlzdHJ1Y3Qg
cnRlbnRyeSAqcnQ7DQogCWludDY0X3Qgd2VpZ2h0Ow0KKwlpbnQ2NF90IGxv
d2VzdF93ZWlnaHQ7DQogDQogCS8qDQogCSAqIFhYWCB3ZSBkb24ndCBhdHRl
bXB0IHRvIGxvb2t1cCBjYWNoZWQgcm91dGUgYWdhaW47IHdoYXQgc2hvdWxk
DQpAQCAtMjg1LDIwICsyNTcsMzIgQEANCiANCiAJLyogYmV5b25kIGhlcmUs
IHdlIHVzZSBybiBhcyB0aGUgbWFzdGVyIGNvcHkgKi8NCiAJcm4wID0gcm4g
PSAoc3RydWN0IHJhZGl4X25vZGUgKilyby0+cm9fcnQ7DQotCW4gPSBybl9t
cGF0aF9jb3VudChybjApOw0KKw0KKwkvKiBmaW5kIGxvd2VzdCB3ZWlnaHQg
cm91dGUgKi8NCisJZm9yICggcnQgPSAoc3RydWN0IHJ0ZW50cnkgKilybiwg
d2VpZ2h0ID0gcnQtPnJ0X3JteC5ybXhfd2VpZ2h0OyBybiAhPSBOVUxMOyBy
biA9IHJuX21wYXRoX25leHQoIHJuKSkgew0KKwkJcnQgPSAoc3RydWN0IHJ0
ZW50cnkgKilybjsNCisJCWlmKHJ0LT5ydF9mbGFncyAmIFJURl9VUCkgew0K
KwkJCWlmICh3ZWlnaHQgPiBydC0+cnRfcm14LnJteF93ZWlnaHQpIHsNCisJ
CQkJd2VpZ2h0ID0gcnQtPnJ0X3JteC5ybXhfd2VpZ2h0Ow0KKwkJCQluID0g
MTsNCisJCQl9IGVsc2UgaWYgKHdlaWdodCA9PSBydC0+cnRfcm14LnJteF93
ZWlnaHQpDQorCQkJCW4rKzsNCisJCX0NCisJfQ0KKwlsb3dlc3Rfd2VpZ2h0
ID0gd2VpZ2h0Ow0KIA0KIAkvKiBndyBzZWxlY3Rpb24gYnkgTW9kdWxvLU4g
SGFzaCAoUkZDMjk5MSkgWFhYIG5lZWQgaW1wcm92ZW1lbnQ/ICovDQogCWhh
c2ggKz0gaGFzaGppdHRlcjsNCiAJaGFzaCAlPSBuOw0KLQlmb3IgKHdlaWdo
dCA9IGFicygoaW50MzJfdCloYXNoKSwgcnQgPSByby0+cm9fcnQ7DQotCSAg
ICAgd2VpZ2h0ID49IHJ0LT5ydF9ybXgucm14X3dlaWdodCAmJiBybjsgDQot
CSAgICAgd2VpZ2h0IC09IHJ0LT5ydF9ybXgucm14X3dlaWdodCkgew0KLQkJ
DQotCQkvKiBzdGF5IHdpdGhpbiB0aGUgbXVsdGlwYXRoIHJvdXRlcyAqLw0K
LQkJaWYgKHJuLT5ybl9kdXBlZGtleSAmJiBybi0+cm5fbWFzayAhPSBybi0+
cm5fZHVwZWRrZXktPnJuX21hc2spDQotCQkJYnJlYWs7DQotCQlybiA9IHJu
LT5ybl9kdXBlZGtleTsNCisJZm9yICggcm4gPSBybjAsIG4gPSAwOyBybiAh
PSBOVUxMOyBybiA9IHJuX21wYXRoX25leHQoIHJuKSkgew0KIAkJcnQgPSAo
c3RydWN0IHJ0ZW50cnkgKilybjsNCisJCWlmKHJ0LT5ydF9mbGFncyAmIFJU
Rl9VUCkgew0KKwkJCWlmICggcnQtPnJ0X3JteC5ybXhfd2VpZ2h0ID09IGxv
d2VzdF93ZWlnaHQpIHsNCisJCQkJaWYgKG4gPT0gaGFzaCkNCisJCQkJCWJy
ZWFrOw0KKwkJCQluKys7DQorCQkJfQ0KKwkJfQ0KIAl9DQogCS8qIFhYWCB0
cnkgZmlsbGluZyBydF9nd3JvdXRlIGFuZCBhdm9pZCB1bnJlYWNoYWJsZSBn
dyAgKi8NCiANCmRpZmYgLXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkv
c3lzL25ldC9yYWRpeF9tcGF0aC5oIC4vc3lzL25ldC9yYWRpeF9tcGF0aC5o
DQotLS0gLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldC9yYWRpeF9t
cGF0aC5oCTIwMDktMDgtMDMgMDg6MTM6MDYuMDAwMDAwMDAwICswMDAwDQor
KysgLi9zeXMvbmV0L3JhZGl4X21wYXRoLmgJMjAxMS0wNC0wNCAxOTo0ODow
OS4wMDAwMDAwMDAgKzAwMDANCkBAIC00NCw5ICs0NCwxMCBAQA0KIHN0cnVj
dCByb3V0ZTsNCiBzdHJ1Y3QgcnRlbnRyeTsNCiBzdHJ1Y3Qgc29ja2FkZHI7
DQorZXh0ZXJuIHVpbnQzMl90IGhhc2hqaXR0ZXI7DQogaW50CXJuX21wYXRo
X2NhcGFibGUoc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqKTsNCiBzdHJ1Y3Qg
cmFkaXhfbm9kZSAqcm5fbXBhdGhfbmV4dChzdHJ1Y3QgcmFkaXhfbm9kZSAq
KTsNCi11X2ludDMyX3Qgcm5fbXBhdGhfY291bnQoc3RydWN0IHJhZGl4X25v
ZGUgKik7DQoraW50NjRfdCBybl9tcGF0aF9jb3VudChzdHJ1Y3QgcmFkaXhf
bm9kZSAqKTsNCiBzdHJ1Y3QgcnRlbnRyeSAqcnRfbXBhdGhfbWF0Y2hnYXRl
KHN0cnVjdCBydGVudHJ5ICosIHN0cnVjdCBzb2NrYWRkciAqKTsNCiBpbnQg
cnRfbXBhdGhfY29uZmxpY3Qoc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqLCBz
dHJ1Y3QgcnRlbnRyeSAqLA0KICAgICBzdHJ1Y3Qgc29ja2FkZHIgKik7DQpk
aWZmIC11IC1yIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXQvcm91
dGUuYyAuL3N5cy9uZXQvcm91dGUuYw0KLS0tIC4uL3NyY19vcmdfOC4yXzIw
MTEwMzI5L3N5cy9uZXQvcm91dGUuYwkyMDExLTAzLTI4IDE1OjI2OjUxLjAw
MDAwMDAwMCArMDAwMA0KKysrIC4vc3lzL25ldC9yb3V0ZS5jCTIwMTEtMDQt
MDQgMjM6MDE6MTcuMDAwMDAwMDAwICswMDAwDQpAQCAtNTEsNiArNTEsOCBA
QA0KICNpbmNsdWRlIDxzeXMvcHJvYy5oPg0KICNpbmNsdWRlIDxzeXMvZG9t
YWluLmg+DQogI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4NCisjaW5jbHVkZSA8
c3lzL2xvY2suaD4NCisjaW5jbHVkZSA8c3lzL3JtbG9jay5oPg0KIA0KICNp
bmNsdWRlIDxuZXQvaWYuaD4NCiAjaW5jbHVkZSA8bmV0L2lmX2RsLmg+DQpA
QCAtMzQyLDYgKzM0NCw3IEBADQogCXN0cnVjdCByYWRpeF9ub2RlICpybjsN
CiAJc3RydWN0IHJ0ZW50cnkgKm5ld3J0Ow0KIAlzdHJ1Y3QgcnRfYWRkcmlu
Zm8gaW5mbzsNCisJc3RydWN0IHJtX3ByaW90cmFja2VyIHRyYWNrZXI7DQog
CWludCBlcnIgPSAwLCBtc2d0eXBlID0gUlRNX01JU1M7DQogCWludCBuZWVk
bG9jazsNCiANCkBAIC0zNTgsMjQgKzM2MSwyNiBAQA0KIAkJZ290byBtaXNz
Ow0KIAl9DQogCW5lZWRsb2NrID0gIShpZ25mbGFncyAmIFJURl9STkhfTE9D
S0VEKTsNCi0JaWYgKG5lZWRsb2NrKQ0KLQkJUkFESVhfTk9ERV9IRUFEX1JM
T0NLKHJuaCk7DQotI2lmZGVmIElOVkFSSUFOVFMJDQorCWlmIChuZWVkbG9j
aykgLyogWFhYIHdlIGFsd2F5cyBuZWVkIHRoZSBsb2NrIGZvciBub3chICov
DQorCQlSQURJWF9OT0RFX0hFQURfTE9DSyhybmgpOw0KIAllbHNlDQotCQlS
QURJWF9OT0RFX0hFQURfTE9DS19BU1NFUlQocm5oKTsNCi0jZW5kaWYNCisJ
CVJBRElYX05PREVfSEVBRF9STE9DSyhybmgsICZ0cmFja2VyKTsNCiAJcm4g
PSBybmgtPnJuaF9tYXRjaGFkZHIoZHN0LCBybmgpOw0KIAlpZiAocm4gJiYg
KChybi0+cm5fZmxhZ3MgJiBSTkZfUk9PVCkgPT0gMCkpIHsNCiAJCW5ld3J0
ID0gcnQgPSBSTlRPUlQocm4pOw0KIAkJUlRfTE9DSyhuZXdydCk7DQogCQlS
VF9BRERSRUYobmV3cnQpOw0KLQkJaWYgKG5lZWRsb2NrKQ0KLQkJCVJBRElY
X05PREVfSEVBRF9SVU5MT0NLKHJuaCk7DQorCQlpZiAobmVlZGxvY2spIC8q
IFhYWCB3ZSBhbHdheXMgbmVlZCB0aGUgbG9jayBmb3Igbm93ISAqLw0KKwkJ
CVJBRElYX05PREVfSEVBRF9VTkxPQ0socm5oKTsNCisJCWVsc2UNCisJCQlS
QURJWF9OT0RFX0hFQURfUlVOTE9DSyhybmgsICZ0cmFja2VyKTsNCiAJCWdv
dG8gZG9uZTsNCisJfQ0KKwlpZiAobmVlZGxvY2spIC8qIFhYWCB3ZSBhbHdh
eXMgbmVlZCB0aGUgbG9jayBmb3Igbm93ISAqLw0KKwkJUkFESVhfTk9ERV9I
RUFEX1VOTE9DSyhybmgpOw0KKwllbHNlDQorCQlSQURJWF9OT0RFX0hFQURf
UlVOTE9DSyhybmgsICZ0cmFja2VyKTsNCiANCi0JfSBlbHNlIGlmIChuZWVk
bG9jaykNCi0JCVJBRElYX05PREVfSEVBRF9SVU5MT0NLKHJuaCk7DQotCQ0K
IAkvKg0KIAkgKiBFaXRoZXIgd2UgaGl0IHRoZSByb290IG9yIGNvdWxkbid0
IGZpbmQgYW55IG1hdGNoLA0KIAkgKiBXaGljaCBiYXNpY2FsbHkgbWVhbnMN
CkBAIC00MDAsNiArNDA1LDE1NyBAQA0KIH0NCiANCiAvKg0KKyAqIExvb2t1
cCBhIGRlc3RpbmF0aW9uIGluIHRoZSByb3V0aW5nIHRhYmxlIGFuZA0KKyAq
IHJlcG9ydCB0aGUgbmV4dCBob3AsIGludGVyZmFjZSBhbmQgaW50ZXJmYWNl
IGFkZHJlc3MNCisgKiBpbiBhIG5ldyBzdHJ1Y3R1cmUuDQorICogT25seSBy
ZWFkIGxvY2sgYWNjZXNzIG9uIHRoZSByb3V0aW5nIHRhYmxlIGlzIHJlcXVp
cmVkLA0KKyAqIGluZGl2aWR1YWwgcm91dGVzIGFyZSBub3QgbG9ja2VkLg0K
KyAqIFJldHVybnMgMSBmb3IgZW50cnkgZm91bmQsIDAgZm9yIG5vdCBmb3Vu
ZC4NCisgKi8NCitpbnQNCitydGxvb2t1cF9maWIoc3RydWN0IHNvY2thZGRy
ICpkc3QsIHVfaW50IGZpYm51bSwgc3RydWN0IHJ0bG9va3VwICpydGwsDQor
ICAgICAgIGludCBmbGFncykNCit7DQorICAgICAgICBzdHJ1Y3QgcmFkaXhf
bm9kZV9oZWFkICpybmg7DQorICAgICAgIHN0cnVjdCByYWRpeF9ub2RlICpy
bjsNCisgICAgICAgc3RydWN0IHJ0ZW50cnkgKnJ0Ow0KKyAgICAgICBpbnQg
cmV0ID0gMDsNCisgICAgICAgc3RydWN0IHJtX3ByaW90cmFja2VyIHRyYWNr
ZXI7DQorDQorICAgICAgIEtBU1NFUlQoKGZpYm51bSA8IHJ0X251bWZpYnMp
LCAoInJ0YWxsb2MxX2ZpYjogYmFkIGZpYm51bSIpKTsNCisgICAgICAgaWYg
KGRzdC0+c2FfZmFtaWx5ICE9IEFGX0lORVQpICAvKiBPbmx5IElORVQgc3Vw
cG9ydHMgPiAxIGZpYiBub3cgKi8NCisgICAgICAgICAgICAgICBmaWJudW0g
PSAwOw0KKyAgICAgICBybmggPSBydF90YWJsZXNfZ2V0X3JuaChmaWJudW0s
IGRzdC0+c2FfZmFtaWx5KTsNCisNCisgICAgICAgLyogTG9vayB1cCB0aGUg
YWRkcmVzcyBpbiB0aGUgdGFibGUgZm9yIHRoYXQgQWRkcmVzcyBGYW1pbHku
ICovDQorICAgICAgIGlmIChybmggPT0gTlVMTCkgew0KKyAgICAgICAgICAg
ICAgIFZfcnRzdGF0LnJ0c191bnJlYWNoKys7DQorICAgICAgICAgICAgICAg
cmV0dXJuICgwKTsNCisgICAgICAgfQ0KKw0KKyAgICAgICBSQURJWF9OT0RF
X0hFQURfUkxPQ0socm5oLCAmdHJhY2tlcik7DQorICAgICAgIHJuID0gcm5o
LT5ybmhfbWF0Y2hhZGRyKGRzdCwgcm5oKTsNCisgICAgICAgaWYgKHJuICE9
IE5VTEwgJiYgKChybi0+cm5fZmxhZ3MgJiBSTkZfUk9PVCkgPT0gMCkpIHsN
CisgICAgICAgICAgICAgICBydCA9IFJOVE9SVChybik7DQorDQorICAgICAg
ICAgICAgICAgaW50IHJ0X2xlbiA9IFNBX1NJWkUoIHJ0LT5ydF9nYXRld2F5
KTsNCisgICAgICAgICAgICAgICBpbnQgcnRsX2xlbiA9IFNBX1NJWkUoIHJ0
bC0+cnRfZ2F0ZXdheSk7DQorICAgICAgICAgICAgICAgaWYoIHJ0X2xlbiA+
IHJ0bF9sZW4pIHsNCisgICAgICAgICAgICAgICAgICAgICAgIGJjb3B5KCAm
cnQtPnJ0X2dhdGV3YXksICZydGwtPnJ0X2dhdGV3YXksIHJ0bF9sZW4pOw0K
KyAgICAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgICAg
ICAgICBiY29weSggJnJ0LT5ydF9nYXRld2F5LCAmcnRsLT5ydF9nYXRld2F5
LCBydF9sZW4pOw0KKyAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAg
ICBydGwtPnJ0X2lmcCA9IHJ0LT5ydF9pZnA7DQorICAgICAgICAgICAgICAg
cnRsLT5ydF9pZmEgPSBydC0+cnRfaWZhOw0KKyAgICAgICAgICAgICAgIHJ0
bC0+cnRfcm14LnJteF9tdHUgPSBydC0+cnRfcm14LnJteF9tdHU7DQorICAg
ICAgICAgICAgICAgcnRsLT5ydF9ybXgucm14X2V4cGlyZSA9IHJ0LT5ydF9y
bXgucm14X2V4cGlyZTsNCisgICAgICAgICAgICAgICBydGwtPnJ0X2ZsYWdz
ID0gcnQtPnJ0X2ZsYWdzOw0KKyAgICAgICAgICAgICAgIGlmIChmbGFncyAm
IFJUTF9QS1NFTlQpDQorICAgICAgICAgICAgICAgICAgICAgICBydC0+cnRf
cm14LnJteF9wa3NlbnQrKzsgICAgICAgICAgICAgICAgLyogcmFjeSBidXQg
b2sgLSBYWFggV0hZPyovDQorICAgICAgICAgICAgICAgcmV0ID0gMTsNCisg
ICAgICAgfQ0KKyAgICAgICBSQURJWF9OT0RFX0hFQURfUlVOTE9DSyhybmgs
ICZ0cmFja2VyKTsNCisgICAgICAgcmV0dXJuIChyZXQpOw0KK30NCisNCisj
aWZkZWYgUkFESVhfTVBBVEgNCisvKg0KKyAqIExvb2t1cCBhIG1wYXRoIGRl
c3RpbmF0aW9uIGluIHRoZSByb3V0aW5nIHRhYmxlIGFuZA0KKyAqIHJlcG9y
dCB0aGUgbmV4dCBob3AsIGludGVyZmFjZSBhbmQgaW50ZXJmYWNlIGFkZHJl
c3MNCisgKiBpbiBhIG5ldyBzdHJ1Y3R1cmUuDQorICogT25seSByZWFkIGxv
Y2sgYWNjZXNzIG9uIHRoZSByb3V0aW5nIHRhYmxlIGlzIHJlcXVpcmVkLA0K
KyAqIGluZGl2aWR1YWwgcm91dGVzIGFyZSBub3QgbG9ja2VkLg0KKyAqIFJl
dHVybnMgMSBmb3IgZW50cnkgZm91bmQsIDAgZm9yIG5vdCBmb3VuZC4NCisg
Ki8NCitpbnQNCitydGxvb2t1cF9tcGF0aF9maWIoc3RydWN0IHNvY2thZGRy
ICpkc3QsIHVfaW50MzJfdCBoYXNoLCB1X2ludCBmaWJudW0sDQorICAgICAg
ICBzdHJ1Y3QgcnRsb29rdXAgKnJ0bCwgaW50IGZsYWdzKQ0KK3sNCisgICAg
ICAgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqcm5oOw0KKyAgICAgICBzdHJ1
Y3QgcmFkaXhfbm9kZSAqcm4sICpybjA7DQorICAgICAgIHN0cnVjdCBydGVu
dHJ5ICpydDsNCisgICAgICAgaW50IHJldCA9IDA7DQorICAgICAgIHN0cnVj
dCBybV9wcmlvdHJhY2tlciB0cmFja2VyOw0KKyAgICAgICBpbnQ2NF90IHdl
aWdodDsNCisgICAgICAgaW50NjRfdCBsb3dlc3Rfd2VpZ2h0Ow0KKyAgICAg
ICB1X2ludDMyX3QgbiA9IDA7DQorDQorICAgICAgIEtBU1NFUlQoKGZpYm51
bSA8IHJ0X251bWZpYnMpLCAoInJ0YWxsb2MxX2ZpYjogYmFkIGZpYm51bSIp
KTsNCisgICAgICAgaWYgKGRzdC0+c2FfZmFtaWx5ICE9IEFGX0lORVQpICAv
KiBPbmx5IElORVQgc3VwcG9ydHMgPiAxIGZpYiBub3cgKi8NCisgICAgICAg
ICAgICAgICBmaWJudW0gPSAwOw0KKyAgICAgICBybmggPSBydF90YWJsZXNf
Z2V0X3JuaChmaWJudW0sIGRzdC0+c2FfZmFtaWx5KTsNCisNCisgICAgICAg
LyogTG9vayB1cCB0aGUgYWRkcmVzcyBpbiB0aGUgdGFibGUgZm9yIHRoYXQg
QWRkcmVzcyBGYW1pbHkuICovDQorICAgICAgIGlmIChybmggPT0gTlVMTCkg
ew0KKyAgICAgICAgICAgICAgIFZfcnRzdGF0LnJ0c191bnJlYWNoKys7DQor
ICAgICAgICAgICAgICAgcmV0dXJuICgwKTsNCisgICAgICAgfQ0KKw0KKyAg
ICAgICBSQURJWF9OT0RFX0hFQURfUkxPQ0socm5oLCAmdHJhY2tlcik7DQor
ICAgICAgIHJuID0gcm5oLT5ybmhfbWF0Y2hhZGRyKGRzdCwgcm5oKTsNCisg
ICAgICAgaWYgKHJuICE9IE5VTEwgJiYgKChybi0+cm5fZmxhZ3MgJiBSTkZf
Uk9PVCkgPT0gMCkpIHsNCisgICAgICAgICAgICAgICAgLyogd2UgaGF2ZSBh
IHJvdXRlIC0gbm93IGRvIHRoZSBtcGF0aCBzZWxlY3Rpb24gKi8NCisgICAg
ICAgICAgICAgICBpZiAocm5fbXBhdGhfbmV4dCggcm4pICE9IE5VTEwpIHsg
LyogbXVsdGlwYXRoICovDQorICAgICAgICAgICAgICAgICAgICAgICBybjAg
PSBybjsNCisNCisgICAgICAgICAgICAgICAgICAgICAgIC8qIGZpbmQgbG93
ZXN0IHdlaWdodCByb3V0ZSAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICggcnQgPSAoc3RydWN0IHJ0ZW50cnkgKilybiwgd2VpZ2h0ID0gcnQt
PnJ0X3JteC5ybXhfd2VpZ2h0Ow0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJuICE9IE5VTEw7IHJuID0gcm5fbXBhdGhfbmV4
dCggcm4pKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0
ID0gKHN0cnVjdCBydGVudHJ5ICopcm47DQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmKHJ0LT5ydF9mbGFncyAmIFJURl9VUCkgew0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ZWln
aHQgPiBydC0+cnRfcm14LnJteF93ZWlnaHQpIHsNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodCA9IHJ0
LT5ydF9ybXgucm14X3dlaWdodDsNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAxOw0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2VpZ2h0
ID09IHJ0LT5ydF9ybXgucm14X3dlaWdodCkNCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4rKzsNCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAg
ICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgbG93ZXN0X3dlaWdo
dCA9IHdlaWdodDsNCisNCisgICAgICAgICAgICAgICAgICAgICAgIC8qIHNl
bGVjdCBub3cgb25lIG9mIHRoZSBsb3dlc3Qgd2VpZ2h0IHJvdXRlcyAqLw0K
KyAgICAgICAgICAgICAgICAgICAgICAgLyogZ3cgc2VsZWN0aW9uIGJ5IE1v
ZHVsby1OIEhhc2ggKFJGQzI5OTEpIFhYWCBuZWVkIGltcHJvdmVtZW50PyAq
Lw0KKyAgICAgICAgICAgICAgICAgICAgICAgaGFzaCArPSBoYXNoaml0dGVy
Ow0KKyAgICAgICAgICAgICAgICAgICAgICAgaGFzaCAlPSBuOw0KKyAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICggcm4gPSBybjAsIG4gPSAwOyBybiAh
PSBOVUxMOyBybiA9IHJuX21wYXRoX25leHQoIHJuKSkgew0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBydCA9IChzdHJ1Y3QgcnRlbnRyeSAq
KXJuOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihydC0+
cnRfZmxhZ3MgJiBSVEZfVVApIHsNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHJ0LT5ydF9ybXgucm14X3dlaWdodCA9
PSBsb3dlc3Rfd2VpZ2h0KSB7DQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9PSBoYXNoKQ0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG4rKzsNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAg
ICAgICAgICAgICAgICAgICAgIC8qIGd3IHNlbGVjdGlvbiBoYXMgZmFpbGVk
IC0gdGhlcmUgbXVzdCBiZSBvbmx5IHplcm8gd2VpZ2h0IHJvdXRlcyAqLyAg
ICAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghcm4pDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g
ZW5kOw0KKyAgICAgICAgICAgICAgIH0gZWxzZQ0KKyAgICAgICAgICAgICAg
ICAgICAgICAgcnQgPSAoc3RydWN0IHJ0ZW50cnkgKilybjsNCisNCisgICAg
ICAgICAgICAgICBpbnQgcnRfbGVuID0gU0FfU0laRSggcnQtPnJ0X2dhdGV3
YXkpOw0KKyAgICAgICAgICAgICAgIGludCBydGxfbGVuID0gU0FfU0laRSgg
cnRsLT5ydF9nYXRld2F5KTsNCisgICAgICAgICAgICAgICBpZiggcnRfbGVu
ID4gcnRsX2xlbikgew0KKyAgICAgICAgICAgICAgICAgICAgICAgYmNvcHko
ICZydC0+cnRfZ2F0ZXdheSwgJnJ0bC0+cnRfZ2F0ZXdheSwgcnRsX2xlbik7
DQorICAgICAgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAg
ICAgICAgIGJjb3B5KCAmcnQtPnJ0X2dhdGV3YXksICZydGwtPnJ0X2dhdGV3
YXksIHJ0X2xlbik7DQorICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAg
ICAgIHJ0bC0+cnRfaWZwID0gcnQtPnJ0X2lmcDsNCisgICAgICAgICAgICAg
ICBydGwtPnJ0X2lmYSA9IHJ0LT5ydF9pZmE7DQorICAgICAgICAgICAgICAg
cnRsLT5ydF9ybXgucm14X210dSA9IHJ0LT5ydF9ybXgucm14X210dTsNCisg
ICAgICAgICAgICAgICBydGwtPnJ0X3JteC5ybXhfZXhwaXJlID0gcnQtPnJ0
X3JteC5ybXhfZXhwaXJlOw0KKyAgICAgICAgICAgICAgIHJ0bC0+cnRfZmxh
Z3MgPSBydC0+cnRfZmxhZ3M7DQorICAgICAgICAgICAgICAgaWYgKGZsYWdz
ICYgUlRMX1BLU0VOVCkNCisgICAgICAgICAgICAgICAgICAgICAgIHJ0LT5y
dF9ybXgucm14X3Brc2VudCsrOyAgICAgICAgICAgICAgICAvKiByYWN5IGJ1
dCBvayAtIFhYWCBXSFk/Ki8NCisgICAgICAgICAgICAgICByZXQgPSAxOw0K
KyAgICAgICB9DQorZW5kOg0KKyAgICAgICBSQURJWF9OT0RFX0hFQURfUlVO
TE9DSyhybmgsICZ0cmFja2VyKTsNCisgICAgICAgcmV0dXJuIChyZXQpOw0K
K30NCisjZW5kaWYNCisNCisvKg0KICAqIFJlbW92ZSBhIHJlZmVyZW5jZSBj
b3VudCBmcm9tIGFuIHJ0ZW50cnkuDQogICogSWYgdGhlIGNvdW50IGdldHMg
bG93IGVub3VnaCwgdGFrZSBpdCBvdXQgb2YgdGhlIHJvdXRpbmcgdGFibGUN
CiAgKi8NCkBAIC04NzUsNyArMTAzMSw3IEBADQogCSAqIFJlbW92ZSB0aGUg
aXRlbSBmcm9tIHRoZSB0cmVlOyBpdCBzaG91bGQgYmUgdGhlcmUsDQogCSAq
IGJ1dCB3aGVuIGNhbGxlcnMgaW52b2tlIHVzIGJsaW5kbHkgaXQgbWF5IG5v
dCAoc2lnaCkuDQogCSAqLw0KLQlybiA9IHJuaC0+cm5oX2RlbGFkZHIocnRf
a2V5KHJ0KSwgcnRfbWFzayhydCksIHJuaCk7DQorCXJuID0gcm5oLT5ybmhf
ZGVsYWRkcihydF9rZXkocnQpLCBydF9tYXNrKHJ0KSwgcm5oLCBOVUxMKTsN
CiAJaWYgKHJuID09IE5VTEwpIHsNCiAJCWVycm9yID0gRVNSQ0g7DQogCQln
b3RvIGJhZDsNCkBAIC05MTMsMTEyICsxMDY5LDYgQEANCiAJcmV0dXJuIChl
cnJvcik7DQogfQ0KIA0KLSNpZmRlZiBSQURJWF9NUEFUSA0KLXN0YXRpYyBp
bnQNCi1ybl9tcGF0aF91cGRhdGUoaW50IHJlcSwgc3RydWN0IHJ0X2FkZHJp
bmZvICppbmZvLA0KLSAgICBzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICpybmgs
IHN0cnVjdCBydGVudHJ5ICoqcmV0X25ydCkNCi17DQotCS8qDQotCSAqIGlm
IHdlIGdvdCBtdWx0aXBhdGggcm91dGVzLCB3ZSByZXF1aXJlIHVzZXJzIHRv
IHNwZWNpZnkNCi0JICogYSBtYXRjaGluZyBSVEFYX0dBVEVXQVkuDQotCSAq
Lw0KLQlzdHJ1Y3QgcnRlbnRyeSAqcnQsICpydG8gPSBOVUxMOw0KLQlyZWdp
c3RlciBzdHJ1Y3QgcmFkaXhfbm9kZSAqcm47DQotCWludCBlcnJvciA9IDA7
DQotDQotCXJuID0gcm5oLT5ybmhfbWF0Y2hhZGRyKGRzdCwgcm5oKTsNCi0J
aWYgKHJuID09IE5VTEwpDQotCQlyZXR1cm4gKEVTUkNIKTsNCi0JcnRvID0g
cnQgPSBSTlRPUlQocm4pOw0KLQlydCA9IHJ0X21wYXRoX21hdGNoZ2F0ZShy
dCwgZ2F0ZXdheSk7DQotCWlmIChydCA9PSBOVUxMKQ0KLQkJcmV0dXJuIChF
U1JDSCk7DQotCS8qDQotCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGVudHJ5IGlu
IHRoZSBjaGFpbg0KLQkgKi8NCi0JaWYgKHJ0byA9PSBydCkgew0KLQkJcm4g
PSBybl9tcGF0aF9uZXh0KChzdHJ1Y3QgcmFkaXhfbm9kZSAqKXJ0KTsNCi0J
CS8qDQotCQkgKiB0aGVyZSBpcyBhbm90aGVyIGVudHJ5LCBub3cgaXQncyBh
Y3RpdmUNCi0JCSAqLw0KLQkJaWYgKHJuKSB7DQotCQkJcnRvID0gUk5UT1JU
KHJuKTsNCi0JCQlSVF9MT0NLKHJ0byk7DQotCQkJcnRvLT5ydF9mbGFncyB8
PSBSVEZfVVA7DQotCQkJUlRfVU5MT0NLKHJ0byk7DQotCQl9IGVsc2UgaWYg
KHJ0LT5ydF9mbGFncyAmIFJURl9HQVRFV0FZKSB7DQotCQkJLyoNCi0JCQkg
KiBGb3IgZ2F0ZXdheSByb3V0ZXMsIHdlIG5lZWQgdG8gDQotCQkJICogbWFr
ZSBzdXJlIHRoYXQgd2Ugd2UgYXJlIGRlbGV0aW5nDQotCQkJICogdGhlIGNv
cnJlY3QgZ2F0ZXdheS4gDQotCQkJICogcnRfbXBhdGhfbWF0Y2hnYXRlKCkg
ZG9lcyBub3QgDQotCQkJICogY2hlY2sgdGhlIGNhc2Ugd2hlbiB0aGVyZSBp
cyBvbmx5DQotCQkJICogb25lIHJvdXRlIGluIHRoZSBjaGFpbi4gIA0KLQkJ
CSAqLw0KLQkJCWlmIChnYXRld2F5ICYmDQotCQkJICAgIChydC0+cnRfZ2F0
ZXdheS0+c2FfbGVuICE9IGdhdGV3YXktPnNhX2xlbiB8fA0KLQkJCQltZW1j
bXAocnQtPnJ0X2dhdGV3YXksIGdhdGV3YXksIGdhdGV3YXktPnNhX2xlbikp
KQ0KLQkJCQllcnJvciA9IEVTUkNIOw0KLQkJCWVsc2Ugew0KLQkJCQkvKg0K
LQkJCQkgKiByZW1vdmUgZnJvbSB0cmVlIGJlZm9yZSByZXR1cm5pbmcgaXQN
Ci0JCQkJICogdG8gdGhlIGNhbGxlcg0KLQkJCQkgKi8NCi0JCQkJcm4gPSBy
bmgtPnJuaF9kZWxhZGRyKGRzdCwgbmV0bWFzaywgcm5oKTsNCi0JCQkJS0FT
U0VSVChydCA9PSBSTlRPUlQocm4pLCAoInJhZGl4IG5vZGUgZGlzYXBwZWFy
ZWQiKSk7DQotCQkJCWdvdG8gZ3dkZWxldGU7DQotCQkJfQ0KLQkJCQ0KLQkJ
fQ0KLQkJLyoNCi0JCSAqIHVzZSB0aGUgbm9ybWFsIGRlbGV0ZSBjb2RlIHRv
IHJlbW92ZQ0KLQkJICogdGhlIGZpcnN0IGVudHJ5DQotCQkgKi8NCi0JCWlm
IChyZXEgIT0gUlRNX0RFTEVURSkgDQotCQkJZ290byBub25kZWxldGU7DQot
DQotCQllcnJvciA9IEVOT0VOVDsNCi0JCWdvdG8gZG9uZTsNCi0JfQ0KLQkJ
DQotCS8qDQotCSAqIGlmIHRoZSBlbnRyeSBpcyAybmQgYW5kIG9uIHVwDQot
CSAqLw0KLQlpZiAoKHJlcSA9PSBSVE1fREVMRVRFKSAmJiAhcnRfbXBhdGhf
ZGVsZHVwKHJ0bywgcnQpKQ0KLQkJcGFuaWMgKCJydHJlcXVlc3QxOiBydF9t
cGF0aF9kZWxkdXAiKTsNCi1nd2RlbGV0ZToNCi0JUlRfTE9DSyhydCk7DQot
CVJUX0FERFJFRihydCk7DQotCWlmIChyZXEgPT0gUlRNX0RFTEVURSkgew0K
LQkJcnQtPnJ0X2ZsYWdzICY9IH5SVEZfVVA7DQotCQkvKg0KLQkJICogT25l
IG1vcmUgcnRlbnRyeSBmbG9hdGluZyBhcm91bmQgdGhhdCBpcyBub3QNCi0J
CSAqIGxpbmtlZCB0byB0aGUgcm91dGluZyB0YWJsZS4gcnR0cmFzaCB3aWxs
IGJlIGRlY3JlbWVudGVkDQotCQkgKiB3aGVuIFJURlJFRShydCkgaXMgZXZl
bnR1YWxseSBjYWxsZWQuDQotCQkgKi8NCi0JCVZfcnR0cmFzaCsrOw0KLQl9
DQotCQ0KLW5vbmRlbGV0ZToNCi0JaWYgKHJlcSAhPSBSVE1fREVMRVRFKQ0K
LQkJcGFuaWMoInVucmVjb2duaXplZCByZXF1ZXN0ICVkIiwgcmVxKTsNCi0J
DQotDQotCS8qDQotCSAqIElmIHRoZSBjYWxsZXIgd2FudHMgaXQsIHRoZW4g
aXQgY2FuIGhhdmUgaXQsDQotCSAqIGJ1dCBpdCdzIHVwIHRvIGl0IHRvIGZy
ZWUgdGhlIHJ0ZW50cnkgYXMgd2Ugd29uJ3QgYmUNCi0JICogZG9pbmcgaXQu
DQotCSAqLw0KLQlpZiAocmV0X25ydCkgew0KLQkJKnJldF9ucnQgPSBydDsN
Ci0JCVJUX1VOTE9DSyhydCk7DQotCX0gZWxzZQ0KLQkJUlRGUkVFX0xPQ0tF
RChydCk7DQotZG9uZToNCi0JcmV0dXJuIChlcnJvcik7DQotfQ0KLSNlbmRp
Zg0KLQ0KIGludA0KIHJ0cmVxdWVzdDFfZmliKGludCByZXEsIHN0cnVjdCBy
dF9hZGRyaW5mbyAqaW5mbywgc3RydWN0IHJ0ZW50cnkgKipyZXRfbnJ0LA0K
IAkJCQl1X2ludCBmaWJudW0pDQpAQCAtMTAzMiw2ICsxMDgyLDcgQEANCiAJ
cmVnaXN0ZXIgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqcm5oOw0KIAlzdHJ1
Y3QgaWZhZGRyICppZmE7DQogCXN0cnVjdCBzb2NrYWRkciAqbmRzdDsNCisJ
c3RydWN0IHJtX3ByaW90cmFja2VyIHRyYWNrZXI7DQogI2RlZmluZSBzZW5k
ZXJyKHgpIHsgZXJyb3IgPSB4IDsgZ290byBiYWQ7IH0NCiANCiAJS0FTU0VS
VCgoZmlibnVtIDwgcnRfbnVtZmlicyksICgicnRyZXF1ZXN0MV9maWI6IGJh
ZCBmaWJudW0iKSk7DQpAQCAtMTA0OCw3ICsxMDk5LDcgQEANCiAJaWYgKG5l
ZWRsb2NrKQ0KIAkJUkFESVhfTk9ERV9IRUFEX0xPQ0socm5oKTsNCiAJZWxz
ZQ0KLQkJUkFESVhfTk9ERV9IRUFEX0xPQ0tfQVNTRVJUKHJuaCk7DQorCQlS
QURJWF9OT0RFX0hFQURfUkxPQ0socm5oLCAmdHJhY2tlcik7DQogCS8qDQog
CSAqIElmIHdlIGFyZSBhZGRpbmcgYSBob3N0IHJvdXRlIHRoZW4gd2UgZG9u
J3Qgd2FudCB0byBwdXQNCiAJICogYSBuZXRtYXNrIGluIHRoZSB0cmVlLCBu
b3IgZG8gd2Ugd2FudCB0byBjbG9uZSBpdC4NCkBAIC0xMDU4LDI4ICsxMTA5
LDMwIEBADQogDQogCXN3aXRjaCAocmVxKSB7DQogCWNhc2UgUlRNX0RFTEVU
RToNCisJCWlmICgocm4gPSBybmgtPnJuaF9sb29rdXAoZHN0LCBuZXRtYXNr
LCBybmgpKSA9PSBOVUxMKQ0KKwkJCXNlbmRlcnIoRVNSQ0gpOw0KKwkJcnQg
PSBSTlRPUlQocm4pOw0KICNpZmRlZiBSQURJWF9NUEFUSA0KKwkJLyoNCisJ
CSAqIGlmIHdlIGdvdCBtdWx0aXBhdGggcm91dGVzLCB3ZSByZXF1aXJlIHVz
ZXJzIHRvIHNwZWNpZnkNCisJCSAqIGEgbWF0Y2hpbmcgUlRBWF9HQVRFV0FZ
Lg0KKwkJICovDQogCQlpZiAocm5fbXBhdGhfY2FwYWJsZShybmgpKSB7DQot
CQkJZXJyb3IgPSBybl9tcGF0aF91cGRhdGUocmVxLCBpbmZvLCBybmgsIHJl
dF9ucnQpOw0KLQkJCS8qDQotCQkJICogImJhZCIgaG9sZHMgdHJ1ZSBmb3Ig
dGhlIHN1Y2Nlc3MgY2FzZQ0KLQkJCSAqIGFzIHdlbGwNCi0JCQkgKi8NCi0J
CQlpZiAoZXJyb3IgIT0gRU5PRU5UKQ0KLQkJCQlnb3RvIGJhZDsNCi0JCQll
cnJvciA9IDA7DQorCQkJcnQgPSBydF9tcGF0aF9tYXRjaGdhdGUoIHJ0LCBn
YXRld2F5KTsNCisJCQlybiA9IChzdHJ1Y3QgcmFkaXhfbm9kZSAqKXJ0Ow0K
KwkJCWlmICghcnQpDQorCQkJCXNlbmRlcnIoRVNSQ0gpOw0KIAkJfQ0KICNl
bmRpZg0KIAkJLyoNCiAJCSAqIFJlbW92ZSB0aGUgaXRlbSBmcm9tIHRoZSB0
cmVlIGFuZCByZXR1cm4gaXQuDQogCQkgKiBDb21wbGFpbiBpZiBpdCBpcyBu
b3QgdGhlcmUgYW5kIGRvIG5vIG1vcmUgcHJvY2Vzc2luZy4NCiAJCSAqLw0K
LQkJcm4gPSBybmgtPnJuaF9kZWxhZGRyKGRzdCwgbmV0bWFzaywgcm5oKTsN
CisJCXJuID0gcm5oLT5ybmhfZGVsYWRkcihkc3QsIG5ldG1hc2ssIHJuaCwg
cm4pOw0KIAkJaWYgKHJuID09IE5VTEwpDQogCQkJc2VuZGVycihFU1JDSCk7
DQogCQlpZiAocm4tPnJuX2ZsYWdzICYgKFJORl9BQ1RJVkUgfCBSTkZfUk9P
VCkpDQogCQkJcGFuaWMgKCJydHJlcXVlc3QgZGVsZXRlIik7DQotCQlydCA9
IFJOVE9SVChybik7DQogCQlSVF9MT0NLKHJ0KTsNCiAJCVJUX0FERFJFRihy
dCk7DQogCQlydC0+cnRfZmxhZ3MgJj0gflJURl9VUDsNCkBAIC0xMjg1LDYg
KzEzMzgsOCBAQA0KIGJhZDoNCiAJaWYgKG5lZWRsb2NrKQ0KIAkJUkFESVhf
Tk9ERV9IRUFEX1VOTE9DSyhybmgpOw0KKwllbHNlDQorCQlSQURJWF9OT0RF
X0hFQURfUlVOTE9DSyhybmgsICZ0cmFja2VyKTsNCiAJcmV0dXJuIChlcnJv
cik7DQogI3VuZGVmIHNlbmRlcnINCiB9DQpAQCAtMTMwOCw3ICsxMzYzLDkg
QEANCiAjZW5kaWYNCiANCiAJUlRfTE9DS19BU1NFUlQocnQpOw0KKyNpZmRl
ZiBJTlZBUklBTlRTDQogCVJBRElYX05PREVfSEVBRF9MT0NLX0FTU0VSVChy
bmgpOw0KKyNlbmRpZg0KIAkNCiAJLyoNCiAJICogUHJlcGFyZSB0byBzdG9y
ZSB0aGUgZ2F0ZXdheSBpbiBydC0+cnRfZ2F0ZXdheS4NCmRpZmYgLXUgLXIg
Li4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldC9yb3V0ZS5oIC4vc3lz
L25ldC9yb3V0ZS5oDQotLS0gLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lz
L25ldC9yb3V0ZS5oCTIwMTAtMDQtMDIgMDU6MTI6NDYuMDAwMDAwMDAwICsw
MDAwDQorKysgLi9zeXMvbmV0L3JvdXRlLmgJMjAxMS0wNC0wMyAxNjowNzo1
Ny4wMDAwMDAwMDAgKzAwMDANCkBAIC03OSw2ICs3OSwzOSBAQA0KIH07DQog
DQogLyoNCisgKiBQb2ludGVycyB0byBzdHJ1Y3R1cmVzIG9uIHRoZSBzdGFj
ayBmb3IgcHVyZSByb3V0aW5nDQorICogdGFibGUgbG9va3VwcyAvIGZhc3Qg
bXR1IGFjY2Vzcy4NCisgKiBGYWtlcyBzdHJ1Y3QgcnRfbWV0cmljc19saXRl
DQorICovDQorc3RydWN0IHJ0bG9va3VwX21ldHJpY3Mgew0KKyAgICAgICB1
X2xvbmcgIHJteF9tdHU7ICAgICAgICAvKiBNVFUgZm9yIHRoaXMgcGF0aCAq
Lw0KKyAgICAgICB1X2xvbmcgIHJteF9leHBpcmU7ICAgICAvKiBYWFggcmVh
cmFuZ2UgcnRfbWV0cmljc19saXRlICovDQorICAgICAgIHVfbG9uZyAgcm14
X3Brc2VudDsgICAgIC8qIFhYWCBmYXN0ZXIgdGhhbiBleHRyYSBpZj8gLSBy
ZW1vdmU/ICovDQorfTsNCisNCisvKg0KKyAqIFBvaW50ZXJzIHRvIHN0cnVj
dHVyZXMgb24gdGhlIHN0YWNrIGZvciBwdXJlIHJvdXRpbmcNCisgKiB0YWJs
ZSBsb29rdXBzLiANCisgKiBGYWtlcyBzdHJ1Y3QgcnRlbnRyeQ0KKyAqLw0K
KyNpZm5kZWYgUk5GX05PUk1BTA0KKyNpbmNsdWRlIDxuZXQvcmFkaXguaD4N
CisjaWZkZWYgUkFESVhfTVBBVEgNCisjaW5jbHVkZSA8bmV0L3JhZGl4X21w
YXRoLmg+DQorI2VuZGlmDQorI2VuZGlmDQorc3RydWN0IHJ0bG9va3VwIHsN
CisgICAgICAgc3RydWN0ICByYWRpeF9ub2RlIHJ0X25vZGVzWzJdOyAgICAg
ICAgIC8qIFhYWCByZWFyYW5nZSBydGVudHJ5IGFuZCByZW1vdmUgKi8NCisg
ICAgICAgc3RydWN0ICBzb2NrYWRkciAqcnRfZ2F0ZXdheTsNCisgICAgICAg
aW50ICAgICBydF9mbGFnczsNCisgICAgICAgaW50ICAgICBydF9yZWZjbnQ7
ICAgICAgICAgICAgICAgICAgICAgIC8qIFhYWCByZWFyYW5nZSBydGVudHJ5
IGFuZCByZW1vdmUgKi8NCisgICAgICAgc3RydWN0ICBpZm5ldCAqcnRfaWZw
Ow0KKyAgICAgICBzdHJ1Y3QgIGlmYWRkciAqcnRfaWZhOw0KKyAgICAgICBz
dHJ1Y3QgIHJ0bG9va3VwX21ldHJpY3MgcnRfcm14Ow0KK307DQorI2RlZmlu
ZSAgICAgICAgUlRMX1BLU0VOVCAgICAgIDB4MDAwMSAgLyogaW5jcmVtZW50
IHBhY2tldCBzZW50IGNvdW50ZXIgKi8NCisNCisvKg0KICAqIHJteF9ydHQg
YW5kIHJteF9ydHR2YXIgYXJlIHN0b3JlZCBhcyBtaWNyb3NlY29uZHM7DQog
ICogUlRUVE9QUkhaKHJ0dCkgY29udmVydHMgdG8gYSB2YWx1ZSBzdWl0YWJs
ZSBmb3IgdXNlDQogICogYnkgYSBwcm90b2NvbCBzbG93dGltbyBjb3VudGVy
Lg0KQEAgLTEyMywxMiArMTU2LDYgQEANCiAgKiBnYXRld2F5cyBhcmUgbWFy
a2VkIHNvIHRoYXQgdGhlIG91dHB1dCByb3V0aW5lcyBrbm93IHRvIGFkZHJl
c3MgdGhlDQogICogZ2F0ZXdheSByYXRoZXIgdGhhbiB0aGUgdWx0aW1hdGUg
ZGVzdGluYXRpb24uDQogICovDQotI2lmbmRlZiBSTkZfTk9STUFMDQotI2lu
Y2x1ZGUgPG5ldC9yYWRpeC5oPg0KLSNpZmRlZiBSQURJWF9NUEFUSA0KLSNp
bmNsdWRlIDxuZXQvcmFkaXhfbXBhdGguaD4NCi0jZW5kaWYNCi0jZW5kaWYN
CiBzdHJ1Y3QgcnRlbnRyeSB7DQogCXN0cnVjdAlyYWRpeF9ub2RlIHJ0X25v
ZGVzWzJdOwkvKiB0cmVlIGdsdWUsIGFuZCBvdGhlciB2YWx1ZXMgKi8NCiAJ
LyoNCkBAIC00MzAsNiArNDU3LDEwIEBADQogdm9pZAkgcnRhbGxvY19maWIo
c3RydWN0IHJvdXRlICpybywgdV9pbnQgZmlibnVtKTsNCiBzdHJ1Y3QgcnRl
bnRyeSAqcnRhbGxvYzFfZmliKHN0cnVjdCBzb2NrYWRkciAqLCBpbnQsIHVf
bG9uZywgdV9pbnQpOw0KIGludAkgcnRpb2N0bF9maWIodV9sb25nLCBjYWRk
cl90LCB1X2ludCk7DQoraW50ICAgIHJ0bG9va3VwX2ZpYihzdHJ1Y3Qgc29j
a2FkZHIgKiwgdV9pbnQsIHN0cnVjdCBydGxvb2t1cCAqLCBpbnQpOw0KKyNp
ZmRlZiBSQURJWF9NUEFUSA0KK2ludCAgICBydGxvb2t1cF9tcGF0aF9maWIo
c3RydWN0IHNvY2thZGRyICosIHVfaW50MzJfdCwgdV9pbnQsIHN0cnVjdCBy
dGxvb2t1cCAqLCBpbnQpOw0KKyNlbmRpZg0KIHZvaWQJIHJ0cmVkaXJlY3Rf
ZmliKHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwNCiAJ
ICAgIHN0cnVjdCBzb2NrYWRkciAqLCBpbnQsIHN0cnVjdCBzb2NrYWRkciAq
LCB1X2ludCk7DQogaW50CSBydHJlcXVlc3RfZmliKGludCwgc3RydWN0IHNv
Y2thZGRyICosDQpkaWZmIC11IC1yIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5
L3N5cy9uZXQvcnRzb2NrLmMgLi9zeXMvbmV0L3J0c29jay5jDQotLS0gLi4v
c3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldC9ydHNvY2suYwkyMDEwLTEw
LTMwIDExOjU0OjU1LjAwMDAwMDAwMCArMDAwMA0KKysrIC4vc3lzL25ldC9y
dHNvY2suYwkyMDExLTA0LTAzIDE2OjA3OjU3LjAwMDAwMDAwMCArMDAwMA0K
QEAgLTUxLDYgKzUxLDcgQEANCiAjaW5jbHVkZSA8c3lzL3NvY2tldHZhci5o
Pg0KICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+DQogI2luY2x1ZGUgPHN5cy9z
eXN0bS5oPg0KKyNpbmNsdWRlIDxzeXMvcm1sb2NrLmg+DQogDQogI2luY2x1
ZGUgPG5ldC9pZi5oPg0KICNpbmNsdWRlIDxuZXQvaWZfZGwuaD4NCkBAIC01
MTMsNiArNTE0LDcgQEANCiAJaW50IGxlbiwgZXJyb3IgPSAwOw0KIAlzdHJ1
Y3QgaWZuZXQgKmlmcCA9IE5VTEw7DQogCXVuaW9uIHNvY2thZGRyX3VuaW9u
IHNhdW47DQorCXN0cnVjdCBybV9wcmlvdHJhY2tlciB0cmFja2VyOw0KIA0K
ICNkZWZpbmUgc2VuZGVycihlKSB7IGVycm9yID0gZTsgZ290byBmbHVzaDt9
DQogCWlmIChtID09IE5VTEwgfHwgKChtLT5tX2xlbiA8IHNpemVvZihsb25n
KSkgJiYNCkBAIC02NDMsMTEgKzY0NSwxMSBAQA0KIAkJICAgIGluZm8ucnRp
X2luZm9bUlRBWF9EU1RdLT5zYV9mYW1pbHkpOw0KIAkJaWYgKHJuaCA9PSBO
VUxMKQ0KIAkJCXNlbmRlcnIoRUFGTk9TVVBQT1JUKTsNCi0JCVJBRElYX05P
REVfSEVBRF9STE9DSyhybmgpOw0KKwkJUkFESVhfTk9ERV9IRUFEX1JMT0NL
KHJuaCwgJnRyYWNrZXIpOw0KIAkJcnQgPSAoc3RydWN0IHJ0ZW50cnkgKikg
cm5oLT5ybmhfbG9va3VwKGluZm8ucnRpX2luZm9bUlRBWF9EU1RdLA0KIAkJ
CWluZm8ucnRpX2luZm9bUlRBWF9ORVRNQVNLXSwgcm5oKTsNCiAJCWlmIChy
dCA9PSBOVUxMKSB7CS8qIFhYWCBsb29rcyBib2d1cyAqLw0KLQkJCVJBRElY
X05PREVfSEVBRF9SVU5MT0NLKHJuaCk7DQorCQkJUkFESVhfTk9ERV9IRUFE
X1JVTkxPQ0socm5oLCAmdHJhY2tlcik7DQogCQkJc2VuZGVycihFU1JDSCk7
DQogCQl9DQogI2lmZGVmIFJBRElYX01QQVRIDQpAQCAtNjYzLDcgKzY2NSw3
IEBADQogCQkgICAgKHJ0bS0+cnRtX3R5cGUgIT0gUlRNX0dFVCB8fCBpbmZv
LnJ0aV9pbmZvW1JUQVhfR0FURVdBWV0pKSB7DQogCQkJcnQgPSBydF9tcGF0
aF9tYXRjaGdhdGUocnQsIGluZm8ucnRpX2luZm9bUlRBWF9HQVRFV0FZXSk7
DQogCQkJaWYgKCFydCkgew0KLQkJCQlSQURJWF9OT0RFX0hFQURfUlVOTE9D
SyhybmgpOw0KKwkJCQlSQURJWF9OT0RFX0hFQURfUlVOTE9DSyhybmgsICZ0
cmFja2VyKTsNCiAJCQkJc2VuZGVycihFU1JDSCk7DQogCQkJfQ0KIAkJfQ0K
QEAgLTY5NSwxMyArNjk3LDEzIEBADQogCQkJICovDQogCQkJcnQgPSAoc3Ry
dWN0IHJ0ZW50cnkgKilybmgtPnJuaF9tYXRjaGFkZHIoJmxhZGRyLCBybmgp
Ow0KIAkJCWlmIChydCA9PSBOVUxMKSB7DQotCQkJCVJBRElYX05PREVfSEVB
RF9SVU5MT0NLKHJuaCk7DQorCQkJCVJBRElYX05PREVfSEVBRF9SVU5MT0NL
KHJuaCwgJnRyYWNrZXIpOw0KIAkJCQlzZW5kZXJyKEVTUkNIKTsNCiAJCQl9
DQogCQl9IA0KIAkJUlRfTE9DSyhydCk7DQogCQlSVF9BRERSRUYocnQpOw0K
LQkJUkFESVhfTk9ERV9IRUFEX1JVTkxPQ0socm5oKTsNCisJCVJBRElYX05P
REVfSEVBRF9SVU5MT0NLKHJuaCwgJnRyYWNrZXIpOw0KIA0KIAkJLyogDQog
CQkgKiBGaXggZm9yIFBSOiA4Mjk3NA0KZGlmZiAtdSAtciAuLi9zcmNfb3Jn
XzguMl8yMDExMDMyOS9zeXMvbmV0aW5ldC9pY21wX3Zhci5oIC4vc3lzL25l
dGluZXQvaWNtcF92YXIuaA0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5
L3N5cy9uZXRpbmV0L2ljbXBfdmFyLmgJMjAwOS0wOC0wMyAwODoxMzowNi4w
MDAwMDAwMDAgKzAwMDANCisrKyAuL3N5cy9uZXRpbmV0L2ljbXBfdmFyLmgJ
MjAxMS0wNC0wMyAxNjowNzo1Ny4wMDAwMDAwMDAgKzAwMDANCkBAIC0xMDIs
NyArMTAyLDExIEBADQogI2RlZmluZSBCQU5ETElNX1JTVF9DTE9TRURQT1JU
IDMgLyogTm8gY29ubmVjdGlvbiwgYW5kIG5vIGxpc3RlbmVycyAqLw0KICNk
ZWZpbmUgQkFORExJTV9SU1RfT1BFTlBPUlQgNCAgIC8qIE5vIGNvbm5lY3Rp
b24sIGxpc3RlbmVyICovDQogI2RlZmluZSBCQU5ETElNX0lDTVA2X1VOUkVB
Q0ggNQ0KLSNkZWZpbmUgQkFORExJTV9NQVggNQ0KKyNkZWZpbmUgQkFORExJ
TV9JQ01QX0ZXRF9VTlJFQUNIIDYgLyogZm9yd2FyZGluZzogbGltaXQgdW5y
ZWFjaGFibGUgKi8NCisjZGVmaW5lIEJBTkRMSU1fSUNNUF9GV0RfVElNWENF
RUQgNyAvKiBmb3J3YXJkaW5nOiBsaW1pdCB0aW1lLWV4Y2VlZGVkICovDQor
I2RlZmluZSBCQU5ETElNX0lDTVBfRldEX05FRURGUkFHIDggLyogZm9yd2Fy
ZGluZzogbGltaXQgbmVlZC1mcmFnICovDQorI2RlZmluZSBCQU5ETElNX0lD
TVBfRldEX0ZJTFRFUiA5IC8qIGZvcndhcmRpbmc6IGxpbWl0IGFkbWluLXBy
b2hpYiAqLw0KKyNkZWZpbmUgQkFORExJTV9NQVggOQ0KICNlbmRpZg0KIA0K
ICNlbmRpZg0KZGlmZiAtdSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9z
eXMvbmV0aW5ldC9pbi5jIC4vc3lzL25ldGluZXQvaW4uYw0KLS0tIC4uL3Ny
Y19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRpbmV0L2luLmMJMjAxMS0wMS0x
MiAyMDo0NDoxMS4wMDAwMDAwMDAgKzAwMDANCisrKyAuL3N5cy9uZXRpbmV0
L2luLmMJMjAxMS0wNC0wMyAxNjowNzo1Ny4wMDAwMDAwMDAgKzAwMDANCkBA
IC0xMzkyLDEyICsxMzkyLDQyIEBADQogaW5fbGx0YWJsZV9ydGNoZWNrKHN0
cnVjdCBpZm5ldCAqaWZwLCB1X2ludCBmbGFncywgY29uc3Qgc3RydWN0IHNv
Y2thZGRyICpsM2FkZHIpDQogew0KIAlzdHJ1Y3QgcnRlbnRyeSAqcnQ7DQor
I2lmZGVmIFJBRElYX01QQVRIDQorCWludDY0X3Qgd2VpZ2h0Ow0KKwlzdHJ1
Y3QgcnRlbnRyeSAqcnQwOw0KKwlpbnQzMl90IGZvdW5kID0gMDsNCisjZW5k
aWYNCiANCiAJS0FTU0VSVChsM2FkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVU
LA0KIAkgICAgKCJzaW5fZmFtaWx5ICVkIiwgbDNhZGRyLT5zYV9mYW1pbHkp
KTsNCiANCiAJLyogWFhYIHJ0YWxsb2MxIHNob3VsZCB0YWtlIGEgY29uc3Qg
cGFyYW0gKi8NCiAJcnQgPSBydGFsbG9jMShfX0RFQ09OU1Qoc3RydWN0IHNv
Y2thZGRyICosIGwzYWRkciksIDAsIDApOw0KKyNpZmRlZiBSQURJWF9NUEFU
SA0KKwlydDAgPSBydDsNCisJaWYgKChydCAhPSBOVUxMKSAmJiAoIHJuX21w
YXRoX25leHQoKHN0cnVjdCByYWRpeF9ub2RlICopcnQpICE9IE5VTEwpKSB7
DQorCQkvKiBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIsIG1hdGNoaW5nIHJv
dXRlcyAqLw0KKwkJLyogZmluZCBsb3dlc3Qgd2VpZ2h0IHJvdXRlICovDQor
CQlmb3IgKCB3ZWlnaHQgPSBydC0+cnRfcm14LnJteF93ZWlnaHQ7IHJ0ICE9
IE5VTEw7IHJ0ID0gKHN0cnVjdCBydGVudHJ5ICopcm5fbXBhdGhfbmV4dCgg
KHN0cnVjdCByYWRpeF9ub2RlICopcnQpKSB7DQorCQkJaWYocnQtPnJ0X2Zs
YWdzICYgUlRGX1VQKSB7DQorCQkJCWlmICh3ZWlnaHQgPiBydC0+cnRfcm14
LnJteF93ZWlnaHQpDQorCQkJCQl3ZWlnaHQgPSBydC0+cnRfcm14LnJteF93
ZWlnaHQ7DQorCQkJfQ0KKwkJfQ0KKw0KKwkJLyogZmluZCBub3cgb25lIG5v
biBnYXRld2F5IHJvdXRlIHdpdGggbG93ZXN0IHdlaWdodCAqLw0KKwkJZm9y
ICggcnQgPSBydDA7IHJ0ICE9IE5VTEw7IHJ0ID0gKHN0cnVjdCBydGVudHJ5
ICopcm5fbXBhdGhfbmV4dCggKHN0cnVjdCByYWRpeF9ub2RlICopcnQpKSB7
DQorCQkJaWYocnQtPnJ0X2ZsYWdzICYgUlRGX1VQKSB7DQorCQkJCWlmICgo
d2VpZ2h0ID09IHJ0LT5ydF9ybXgucm14X3dlaWdodCkgJiYgIShydC0+cnRf
ZmxhZ3MgJiBSVEZfR0FURVdBWSkpIHsNCisJCQkJCWZvdW5kID0gMTsNCisJ
CQkJCSBicmVhazsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCWlmIChmb3Vu
ZCA9PSAwKQ0KKwkJCXJ0ID0gTlVMTDsNCisJfQ0KKyNlbmRpZg0KIAlpZiAo
cnQgPT0gTlVMTCB8fCAoIShmbGFncyAmIExMRV9QVUIpICYmDQogCQkJICAg
KChydC0+cnRfZmxhZ3MgJiBSVEZfR0FURVdBWSkgfHwgDQogCQkJICAgIChy
dC0+cnRfaWZwICE9IGlmcCkpKSkgew0KQEAgLTE0MDUsMTEgKzE0MzUsMjAg
QEANCiAJCWxvZyhMT0dfSU5GTywgIklQdjQgYWRkcmVzczogXCIlc1wiIGlz
IG5vdCBvbiB0aGUgbmV0d29ya1xuIiwNCiAJCSAgICBpbmV0X250b2EoKChj
b25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKilsM2FkZHIpLT5zaW5fYWRkcikp
Ow0KICNlbmRpZg0KKyNpZmRlZiBSQURJWF9NUEFUSA0KKwkJaWYgKHJ0MCAh
PSBOVUxMKQ0KKwkJCVJURlJFRV9MT0NLRUQocnQwKTsNCisjZWxzZQ0KIAkJ
aWYgKHJ0ICE9IE5VTEwpDQogCQkJUlRGUkVFX0xPQ0tFRChydCk7DQorI2Vu
ZGlmDQogCQlyZXR1cm4gKEVJTlZBTCk7DQogCX0NCisjaWZkZWYgUkFESVhf
TVBBVEgNCisJUlRGUkVFX0xPQ0tFRChydDApOw0KKyNlbHNlDQogCVJURlJF
RV9MT0NLRUQocnQpOw0KKyNlbmRpZg0KIAlyZXR1cm4gMDsNCiB9DQogDQpk
aWZmIC11IC1yIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRpbmV0
L2luX3JteC5jIC4vc3lzL25ldGluZXQvaW5fcm14LmMNCi0tLSAuLi9zcmNf
b3JnXzguMl8yMDExMDMyOS9zeXMvbmV0aW5ldC9pbl9ybXguYwkyMDEwLTEw
LTExIDExOjI1OjM3LjAwMDAwMDAwMCArMDAwMA0KKysrIC4vc3lzL25ldGlu
ZXQvaW5fcm14LmMJMjAxMS0wNC0wMyAxNjowNzo1Ny4wMDAwMDAwMDAgKzAw
MDANCkBAIC01MSw2ICs1MSw4IEBADQogI2luY2x1ZGUgPHN5cy9tYnVmLmg+
DQogI2luY2x1ZGUgPHN5cy9zeXNsb2cuaD4NCiAjaW5jbHVkZSA8c3lzL2Nh
bGxvdXQuaD4NCisjaW5jbHVkZSA8c3lzL2xvY2suaD4NCisjaW5jbHVkZSA8
c3lzL3JtbG9jay5oPg0KIA0KICNpbmNsdWRlIDxuZXQvaWYuaD4NCiAjaW5j
bHVkZSA8bmV0L3JvdXRlLmg+DQpkaWZmIC11IC1yIC4uL3NyY19vcmdfOC4y
XzIwMTEwMzI5L3N5cy9uZXRpbmV0L2lwX2Zhc3Rmd2QuYyAuL3N5cy9uZXRp
bmV0L2lwX2Zhc3Rmd2QuYw0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5
L3N5cy9uZXRpbmV0L2lwX2Zhc3Rmd2QuYwkyMDEwLTEyLTEwIDE0OjA2OjUw
LjAwMDAwMDAwMCArMDAwMA0KKysrIC4vc3lzL25ldGluZXQvaXBfZmFzdGZ3
ZC5jCTIwMTEtMDQtMDUgMDE6MTM6NDEuMDAwMDAwMDAwICswMDAwDQpAQCAt
OTQsNiArOTQsOSBAQA0KICNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+DQogI2lu
Y2x1ZGUgPG5ldC9pZl9kbC5oPg0KICNpbmNsdWRlIDxuZXQvcm91dGUuaD4N
CisjaWZkZWYgUkFESVhfTVBBVEgNCisjaW5jbHVkZSA8bmV0L3JhZGl4X21w
YXRoLmg+DQorI2VuZGlmDQogI2luY2x1ZGUgPG5ldC92bmV0Lmg+DQogDQog
I2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCkBAIC0xMDIsNiArMTA1LDcgQEAN
CiAjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPg0KICNpbmNsdWRlIDxuZXRpbmV0
L2lwX3Zhci5oPg0KICNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4NCisj
aW5jbHVkZSA8bmV0aW5ldC9pY21wX3Zhci5oPg0KICNpbmNsdWRlIDxuZXRp
bmV0L2lwX29wdGlvbnMuaD4NCiANCiAjaW5jbHVkZSA8bWFjaGluZS9pbl9j
a3N1bS5oPg0KQEAgLTExMyw3ICsxMTcsMTEgQEANCiAgICAgJlZORVRfTkFN
RShpcGZhc3Rmb3J3YXJkX2FjdGl2ZSksIDAsICJFbmFibGUgZmFzdCBJUCBm
b3J3YXJkaW5nIik7DQogDQogc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiAq
DQotaXBfZmluZHJvdXRlKHN0cnVjdCByb3V0ZSAqcm8sIHN0cnVjdCBpbl9h
ZGRyIGRlc3QsIHN0cnVjdCBtYnVmICptKQ0KKyNpZmRlZiBSQURJWF9NUEFU
SA0KK2lwX2ZpbmRyb3V0ZShzdHJ1Y3Qgcm91dGUgKnJvLCB1aW50MzJfdCBo
YXNoLCBzdHJ1Y3QgaW5fYWRkciBkZXN0LCBzdHJ1Y3QgbWJ1ZiAqbSwgc3Ry
dWN0IHJ0bG9va3VwICpydGwpDQorI2Vsc2UNCitpcF9maW5kcm91dGUoc3Ry
dWN0IHJvdXRlICpybywgc3RydWN0IGluX2FkZHIgZGVzdCwgc3RydWN0IG1i
dWYgKm0sIHN0cnVjdCBydGxvb2t1cCAqcnRsKQ0KKyNlbmRpZg0KIHsNCiAJ
c3RydWN0IHNvY2thZGRyX2luICpkc3Q7DQogCXN0cnVjdCBydGVudHJ5ICpy
dDsNCkBAIC0xMjYsNyArMTM0LDE3IEBADQogCWRzdC0+c2luX2ZhbWlseSA9
IEFGX0lORVQ7DQogCWRzdC0+c2luX2xlbiA9IHNpemVvZigqZHN0KTsNCiAJ
ZHN0LT5zaW5fYWRkci5zX2FkZHIgPSBkZXN0LnNfYWRkcjsNCi0JaW5fcnRh
bGxvY19pZ24ocm8sIDAsIE1fR0VURklCKG0pKTsNCisNCisJcnRsLT5ydF9n
YXRld2F5ID0gKHN0cnVjdCBzb2NrYWRkciAqKWRzdDsNCisjaWZkZWYgUkFE
SVhfTVBBVEgNCisJaWYgKCFydGxvb2t1cF9tcGF0aF9maWIoKHN0cnVjdCBz
b2NrYWRkciAqKWRzdCwNCisJCQloYXNoLCBNX0dFVEZJQihtKSwgIHJ0bCwg
UlRMX1BLU0VOVCkpDQorI2Vsc2UNCisJaWYgKCFydGxvb2t1cF9maWIoIChz
dHJ1Y3Qgc29ja2FkZHIgKilkc3QsIE1fR0VURklCKG0pLCBydGwsIFJUTF9Q
S1NFTlQpKQ0KKyNlbmRpZg0KKwkJcm8tPnJvX3J0ID0gTlVMTDsNCisJZWxz
ZQ0KKwkJcm8tPnJvX3J0ID0gKHN0cnVjdCBydGVudHJ5ICopcnRsOw0KIA0K
IAkvKg0KIAkgKiBSb3V0ZSB0aGVyZSBhbmQgaW50ZXJmYWNlIHN0aWxsIHVw
Pw0KQEAgLTE0MCw5ICsxNTgsMTAgQEANCiAJfSBlbHNlIHsNCiAJCUlQU1RB
VF9JTkMoaXBzX25vcm91dGUpOw0KIAkJSVBTVEFUX0lOQyhpcHNfY2FudGZv
cndhcmQpOw0KLQkJaWYgKHJ0KQ0KLQkJCVJURlJFRShydCk7DQotCQlpY21w
X2Vycm9yKG0sIElDTVBfVU5SRUFDSCwgSUNNUF9VTlJFQUNIX0hPU1QsIDAs
IDApOw0KKwkJaWYgKGJhZHBvcnRfYmFuZGxpbShCQU5ETElNX0lDTVBfRldE
X1VOUkVBQ0gpIDwgMCkNCisJCQltX2ZyZWVtKG0pOw0KKwkJZWxzZQ0KKwkJ
CWljbXBfZXJyb3IobSwgSUNNUF9VTlJFQUNILCBJQ01QX1VOUkVBQ0hfSE9T
VCwgMCwgMCk7DQogCQlyZXR1cm4gTlVMTDsNCiAJfQ0KIAlyZXR1cm4gZHN0
Ow0KQEAgLTE2Nyw2ICsxODYsNyBAQA0KIAl1X3Nob3J0IHN1bSwgaXBfbGVu
Ow0KIAlpbnQgZXJyb3IgPSAwOw0KIAlpbnQgaGxlbiwgbXR1Ow0KKwlzdHJ1
Y3QgcnRsb29rdXAgcnRsOw0KICNpZmRlZiBJUEZJUkVXQUxMX0ZPUldBUkQN
CiAJc3RydWN0IG1fdGFnICpmd2RfdGFnOw0KICNlbmRpZg0KQEAgLTI5OSw4
ICszMTksMTEgQEANCiAJCWlmIChpcF9kb29wdHMgPT0gMSkNCiAJCQlyZXR1
cm4gbTsNCiAJCWVsc2UgaWYgKGlwX2Rvb3B0cyA9PSAyKSB7DQotCQkJaWNt
cF9lcnJvcihtLCBJQ01QX1VOUkVBQ0gsIElDTVBfVU5SRUFDSF9GSUxURVJf
UFJPSElCLA0KLQkJCQkwLCAwKTsNCisJCQlpZiAoYmFkcG9ydF9iYW5kbGlt
KEJBTkRMSU1fSUNNUF9GV0RfRklMVEVSKSA8IDApDQorCQkJCW1fZnJlZW0o
bSk7DQorCQkJZWxzZQ0KKwkJCQlpY21wX2Vycm9yKG0sIElDTVBfVU5SRUFD
SCwNCisJCQkJCUlDTVBfVU5SRUFDSF9GSUxURVJfUFJPSElCLCAwLCAwKTsN
CiAJCQlyZXR1cm4gTlVMTDsJLyogbWJ1ZiBhbHJlYWR5IGZyZWUnZCAqLw0K
IAkJfQ0KIAkJLyogZWxzZSBpZ25vcmUgSVAgb3B0aW9ucyBhbmQgY29udGlu
dWUgKi8NCkBAIC0zOTksNyArNDIyLDExIEBADQogCWlmICghVl9pcHN0ZWFs
dGgpIHsNCiAjZW5kaWYNCiAJaWYgKGlwLT5pcF90dGwgPD0gSVBUVExERUMp
IHsNCi0JCWljbXBfZXJyb3IobSwgSUNNUF9USU1YQ0VFRCwgSUNNUF9USU1Y
Q0VFRF9JTlRSQU5TLCAwLCAwKTsNCisJCWlmIChiYWRwb3J0X2JhbmRsaW0o
QkFORExJTV9JQ01QX0ZXRF9USU1YQ0VFRCkgPCAwKQ0KKwkJCW1fZnJlZW0o
bSk7DQorCQllbHNlDQorCQkJaWNtcF9lcnJvcihtLCBJQ01QX1RJTVhDRUVE
LCBJQ01QX1RJTVhDRUVEX0lOVFJBTlMsDQorCQkJCTAsIDApOw0KIAkJcmV0
dXJuIE5VTEw7CS8qIG1idWYgYWxyZWFkeSBmcmVlJ2QgKi8NCiAJfQ0KIA0K
QEAgLTQyMCw3ICs0NDcsMTMgQEANCiAJLyoNCiAJICogRmluZCByb3V0ZSB0
byBkZXN0aW5hdGlvbi4NCiAJICovDQotCWlmICgoZHN0ID0gaXBfZmluZHJv
dXRlKCZybywgZGVzdCwgbSkpID09IE5VTEwpDQorI2lmZGVmIFJBRElYX01Q
QVRIDQorCWlmICgoZHN0ID0gaXBfZmluZHJvdXRlKCZybywgbnRvaGwoaXAt
PmlwX3NyYy5zX2FkZHIgXiBpcC0+aXBfZHN0LnNfYWRkciksDQorCQkJZGVz
dCwgbSwgJnJ0bCkpID09IE5VTEwpDQorI2Vsc2UNCisJaWYgKChkc3QgPSBp
cF9maW5kcm91dGUoJnJvLA0KKwkJCWRlc3QsIG0sICZydGwpKSA9PSBOVUxM
KQ0KKyNlbmRpZg0KIAkJcmV0dXJuIE5VTEw7CS8qIGljbXAgdW5yZWFjaCBh
bHJlYWR5IHNlbnQgKi8NCiAJaWZwID0gcm8ucm9fcnQtPnJ0X2lmcDsNCiAN
CkBAIC00NzYsOCArNTA5LDYgQEANCiAJCQkgKiAib3VycyItbGFiZWwuDQog
CQkJICovDQogCQkJbS0+bV9mbGFncyB8PSBNX0ZBU1RGV0RfT1VSUzsNCi0J
CQlpZiAocm8ucm9fcnQpDQotCQkJCVJURlJFRShyby5yb19ydCk7DQogCQkJ
cmV0dXJuIG07DQogCQl9DQogCQkvKg0KQEAgLTQ5MCw4ICs1MjEsNyBAQA0K
IAkJCW1fdGFnX2RlbGV0ZShtLCBmd2RfdGFnKTsNCiAJCX0NCiAjZW5kaWYg
LyogSVBGSVJFV0FMTF9GT1JXQVJEICovDQotCQlSVEZSRUUocm8ucm9fcnQp
Ow0KLQkJaWYgKChkc3QgPSBpcF9maW5kcm91dGUoJnJvLCBkZXN0LCBtKSkg
PT0gTlVMTCkNCisJCWlmICgoZHN0ID0gaXBfZmluZHJvdXRlKCZybywgZGVz
dCwgbSwgJnJ0bCkpID09IE5VTEwpDQogCQkJcmV0dXJuIE5VTEw7CS8qIGlj
bXAgdW5yZWFjaCBhbHJlYWR5IHNlbnQgKi8NCiAJCWlmcCA9IHJvLnJvX3J0
LT5ydF9pZnA7DQogCX0NCkBAIC01MDcsNiArNTM3LDggQEANCiAJaWYgKChy
by5yb19ydC0+cnRfZmxhZ3MgJiBSVEZfUkVKRUNUKSAmJg0KIAkgICAgKHJv
LnJvX3J0LT5ydF9ybXgucm14X2V4cGlyZSA9PSAwIHx8DQogCSAgICB0aW1l
X3VwdGltZSA8IHJvLnJvX3J0LT5ydF9ybXgucm14X2V4cGlyZSkpIHsNCisJ
CWlmIChiYWRwb3J0X2JhbmRsaW0oQkFORExJTV9JQ01QX0ZXRF9VTlJFQUNI
KSA8IDApDQorCQkJZ290byBkcm9wOw0KIAkJaWNtcF9lcnJvcihtLCBJQ01Q
X1VOUkVBQ0gsIElDTVBfVU5SRUFDSF9IT1NULCAwLCAwKTsNCiAJCWdvdG8g
Y29uc3VtZWQ7DQogCX0NCkBAIC01MjcsNiArNTU5LDggQEANCiAJICogQ2hl
Y2sgaWYgbWVkaWEgbGluayBzdGF0ZSBvZiBpbnRlcmZhY2UgaXMgbm90IGRv
d24NCiAJICovDQogCWlmIChpZnAtPmlmX2xpbmtfc3RhdGUgPT0gTElOS19T
VEFURV9ET1dOKSB7DQorCQlpZiAoYmFkcG9ydF9iYW5kbGltKEJBTkRMSU1f
SUNNUF9GV0RfVU5SRUFDSCkgPCAwKQ0KKwkJCWdvdG8gZHJvcDsNCiAJCWlj
bXBfZXJyb3IobSwgSUNNUF9VTlJFQUNILCBJQ01QX1VOUkVBQ0hfSE9TVCwg
MCwgMCk7DQogCQlnb3RvIGNvbnN1bWVkOw0KIAl9DQpAQCAtNTU3LDggKzU5
MSw5IEBADQogCQkgKi8NCiAJCWlmIChpcC0+aXBfb2ZmICYgSVBfREYpIHsN
CiAJCQlJUFNUQVRfSU5DKGlwc19jYW50ZnJhZyk7DQotCQkJaWNtcF9lcnJv
cihtLCBJQ01QX1VOUkVBQ0gsIElDTVBfVU5SRUFDSF9ORUVERlJBRywNCi0J
CQkJMCwgbXR1KTsNCisJCQlpZiAoYmFkcG9ydF9iYW5kbGltKEJBTkRMSU1f
SUNNUF9GV0RfTkVFREZSQUcpIDwgMCkNCisJCQkJZ290byBkcm9wOw0KKwkJ
CWljbXBfZXJyb3IobSwgSUNNUF9VTlJFQUNILCBJQ01QX1VOUkVBQ0hfTkVF
REZSQUcsIDAsIG10dSk7DQogCQkJZ290byBjb25zdW1lZDsNCiAJCX0gZWxz
ZSB7DQogCQkJLyoNCkBAIC02MDYsMTIgKzY0MSw5IEBADQogCQlJUFNUQVRf
SU5DKGlwc19mYXN0Zm9yd2FyZCk7DQogCX0NCiBjb25zdW1lZDoNCi0JUlRG
UkVFKHJvLnJvX3J0KTsNCiAJcmV0dXJuIE5VTEw7DQogZHJvcDoNCiAJaWYg
KG0pDQogCQltX2ZyZWVtKG0pOw0KLQlpZiAocm8ucm9fcnQpDQotCQlSVEZS
RUUocm8ucm9fcnQpOw0KIAlyZXR1cm4gTlVMTDsNCiB9DQpkaWZmIC11IC1y
IC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRpbmV0L2lwX2ljbXAu
YyAuL3N5cy9uZXRpbmV0L2lwX2ljbXAuYw0KLS0tIC4uL3NyY19vcmdfOC4y
XzIwMTEwMzI5L3N5cy9uZXRpbmV0L2lwX2ljbXAuYwkyMDEwLTA5LTIxIDIy
OjMzOjMwLjAwMDAwMDAwMCArMDAwMA0KKysrIC4vc3lzL25ldGluZXQvaXBf
aWNtcC5jCTIwMTEtMDQtMDQgMjM6MDE6NTcuMDAwMDAwMDAwICswMDAwDQpA
QCAtOTU4LDcgKzk1OCwxMSBAQA0KIAkJeyAiaWNtcCB0c3RhbXAgcmVzcG9u
c2UiIH0sDQogCQl7ICJjbG9zZWQgcG9ydCBSU1QgcmVzcG9uc2UiIH0sDQog
CQl7ICJvcGVuIHBvcnQgUlNUIHJlc3BvbnNlIiB9LA0KLQkJeyAiaWNtcDYg
dW5yZWFjaCByZXNwb25zZSIgfQ0KKwkJeyAiaWNtcDYgdW5yZWFjaCByZXNw
b25zZSIgfSwNCisJCXsgImZvcndhcmRpbmc6IGxpbWl0IHVucmVhY2hhYmxl
IiB9LA0KKwkJeyAiZm9yd2FyZGluZzogbGltaXQgdGltZS1leGNlZWRlZCIg
fSwNCisJCXsgImZvcndhcmRpbmc6IGxpbWl0IG5lZWQtZnJhZyIgfSwNCisJ
CXsgImZvcndhcmRpbmc6IGxpbWl0IGFkbWluLXByb2hpYiIgfQ0KIAl9Ow0K
IA0KIAkvKg0KZGlmZiAtdSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9z
eXMvbmV0aW5ldC9pcF9pbnB1dC5jIC4vc3lzL25ldGluZXQvaXBfaW5wdXQu
Yw0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRpbmV0L2lw
X2lucHV0LmMJMjAxMS0wMy0yOCAxNToyNjo1Mi4wMDAwMDAwMDAgKzAwMDAN
CisrKyAuL3N5cy9uZXRpbmV0L2lwX2lucHV0LmMJMjAxMS0wNC0wNSAwMTox
NDowMC4wMDAwMDAwMDAgKzAwMDANCkBAIC03MSw2ICs3MSw3IEBADQogI2lu
Y2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+DQogI2luY2x1ZGUgPG5ldGluZXQv
aXBfZncuaD4NCiAjaW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+DQorI2lu
Y2x1ZGUgPG5ldGluZXQvaWNtcF92YXIuaD4NCiAjaW5jbHVkZSA8bmV0aW5l
dC9pcF9vcHRpb25zLmg+DQogI2luY2x1ZGUgPG1hY2hpbmUvaW5fY2tzdW0u
aD4NCiAjaW5jbHVkZSA8bmV0aW5ldC9pcF9jYXJwLmg+DQpAQCAtMTM0OCwy
MCArMTM0OSwyMiBAQA0KIAlzdHJ1Y3Qgcm91dGUgc3JvOw0KIAlzdHJ1Y3Qg
c29ja2FkZHJfaW4gKnNpbjsNCiAJc3RydWN0IGluX2lmYWRkciAqaWE7DQor
CXN0cnVjdCBzb2NrYWRkcl9pbiAqbHVfZHN0Ow0KKwlzdHJ1Y3QgcnRsb29r
dXAgcnRsOw0KIA0KIAliemVybygmc3JvLCBzaXplb2Yoc3JvKSk7DQogCXNp
biA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmc3JvLnJvX2RzdDsNCiAJc2lu
LT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsNCiAJc2luLT5zaW5fbGVuID0gc2l6
ZW9mKCpzaW4pOw0KIAlzaW4tPnNpbl9hZGRyID0gZHN0Ow0KLQlpbl9ydGFs
bG9jX2lnbigmc3JvLCAwLCBmaWJudW0pOw0KLQ0KLQlpZiAoc3JvLnJvX3J0
ID09IE5VTEwpDQorCWx1X2RzdCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikm
c3JvLnJvX2RzdDsNCisJcnRsLnJ0X2dhdGV3YXkgPSAoc3RydWN0IHNvY2th
ZGRyICopbHVfZHN0Ow0KKwlpZiAoIXJ0bG9va3VwX2ZpYiggKHN0cnVjdCBz
b2NrYWRkciAqKWx1X2RzdCwNCisJCQlmaWJudW0sICZydGwsIDApKQ0KIAkJ
cmV0dXJuIChOVUxMKTsNCiANCi0JaWEgPSBpZmF0b2lhKHNyby5yb19ydC0+
cnRfaWZhKTsNCisJaWEgPSBpZmF0b2lhKHJ0bC5ydF9pZmEpOw0KIAlpZmFf
cmVmKCZpYS0+aWFfaWZhKTsNCi0JUlRGUkVFKHNyby5yb19ydCk7DQogCXJl
dHVybiAoaWEpOw0KIH0NCiANCkBAIC0xMzk3LDYgKzE0MDAsOSBAQA0KIAlz
dHJ1Y3QgaW5fYWRkciBkZXN0Ow0KIAlzdHJ1Y3Qgcm91dGUgcm87DQogCWlu
dCBlcnJvciwgdHlwZSA9IDAsIGNvZGUgPSAwLCBtdHUgPSAwOw0KKwlzdHJ1
Y3QgcnRsb29rdXAgcnRsOw0KKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmRzdDsN
CisJaW50IGljbXBfc2VuZCA9IDA7DQogDQogCWlmIChtLT5tX2ZsYWdzICYg
KE1fQkNBU1R8TV9NQ0FTVCkgfHwgaW5fY2FuZm9yd2FyZChpcC0+aXBfZHN0
KSA9PSAwKSB7DQogCQlJUFNUQVRfSU5DKGlwc19jYW50Zm9yd2FyZCk7DQpA
QCAtMTQwNyw4ICsxNDEzLDExIEBADQogCWlmICghVl9pcHN0ZWFsdGgpIHsN
CiAjZW5kaWYNCiAJCWlmIChpcC0+aXBfdHRsIDw9IElQVFRMREVDKSB7DQot
CQkJaWNtcF9lcnJvcihtLCBJQ01QX1RJTVhDRUVELCBJQ01QX1RJTVhDRUVE
X0lOVFJBTlMsDQotCQkJICAgIDAsIDApOw0KKwkJCWlmIChiYWRwb3J0X2Jh
bmRsaW0oQkFORExJTV9JQ01QX0ZXRF9USU1YQ0VFRCkgPCAwKQ0KKwkJCQlt
X2ZyZWVtKG0pOw0KKwkJCWVsc2UNCisJCQkJaWNtcF9lcnJvcihtLCBJQ01Q
X1RJTVhDRUVELCBJQ01QX1RJTVhDRUVEX0lOVFJBTlMsDQorCQkJCQkwLCAw
KTsNCiAJCQlyZXR1cm47DQogCQl9DQogI2lmZGVmIElQU1RFQUxUSA0KQEAg
LTE0MjMsNyArMTQzMiwxMCBAQA0KIAkgKiBpcF9vdXRwdXQgaW4gY2FzZSBv
ZiBvdXRnb2luZyBJUHNlYyBwb2xpY3kuDQogCSAqLw0KIAlpZiAoIXNyY3J0
ICYmIGlhID09IE5VTEwpIHsNCi0JCWljbXBfZXJyb3IobSwgSUNNUF9VTlJF
QUNILCBJQ01QX1VOUkVBQ0hfSE9TVCwgMCwgMCk7DQorCQlpZiAoYmFkcG9y
dF9iYW5kbGltKEJBTkRMSU1fSUNNUF9GV0RfVU5SRUFDSCkgPCAwKQ0KKwkJ
CW1fZnJlZW0obSk7DQorCQllbHNlDQorCQkJaWNtcF9lcnJvcihtLCBJQ01Q
X1VOUkVBQ0gsIElDTVBfVU5SRUFDSF9IT1NULCAwLCAwKTsNCiAJCXJldHVy
bjsNCiAJfQ0KICNlbmRpZg0KQEAgLTE0ODgsNyArMTUwMCwxMyBAQA0KIAkJ
c2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsNCiAJCXNpbi0+c2luX2xlbiA9
IHNpemVvZigqc2luKTsNCiAJCXNpbi0+c2luX2FkZHIgPSBpcC0+aXBfZHN0
Ow0KLQkJaW5fcnRhbGxvY19pZ24oJnJvLCAwLCBNX0dFVEZJQihtKSk7DQor
CQlkc3QgPSAoc3RydWN0IHNvY2thZGRyX2luICopJnJvLnJvX2RzdDsNCisJ
CXJ0bC5ydF9nYXRld2F5ID0gKHN0cnVjdCBzb2NrYWRkciAqKWRzdDsNCisJ
CWlmICghcnRsb29rdXBfZmliKCAoc3RydWN0IHNvY2thZGRyICopZHN0LA0K
KwkJCQlNX0dFVEZJQihtKSwgJnJ0bCwgMCkpDQorCQkJcm8ucm9fcnQgPSBO
VUxMOw0KKwkJZWxzZQ0KKwkJCXJvLnJvX3J0ID0gKHN0cnVjdCBydGVudHJ5
ICopJnJ0bDsNCiANCiAJCXJ0ID0gcm8ucm9fcnQ7DQogDQpAQCAtMTUwOCw4
ICsxNTI2LDYgQEANCiAJCQkJY29kZSA9IElDTVBfUkVESVJFQ1RfSE9TVDsN
CiAJCQl9DQogCQl9DQotCQlpZiAocnQpDQotCQkJUlRGUkVFKHJ0KTsNCiAJ
fQ0KIA0KIAkvKg0KQEAgLTE1MjIsOCArMTUzOCw2IEBADQogDQogCWlmIChl
cnJvciA9PSBFTVNHU0laRSAmJiByby5yb19ydCkNCiAJCW10dSA9IHJvLnJv
X3J0LT5ydF9ybXgucm14X210dTsNCi0JaWYgKHJvLnJvX3J0KQ0KLQkJUlRG
UkVFKHJvLnJvX3J0KTsNCiANCiAJaWYgKGVycm9yKQ0KIAkJSVBTVEFUX0lO
QyhpcHNfY2FudGZvcndhcmQpOw0KQEAgLTE1NTgsMTEgKzE1NzIsMTMgQEAN
CiAJZGVmYXVsdDoNCiAJCXR5cGUgPSBJQ01QX1VOUkVBQ0g7DQogCQljb2Rl
ID0gSUNNUF9VTlJFQUNIX0hPU1Q7DQorCQlpY21wX3NlbmQgPSBiYWRwb3J0
X2JhbmRsaW0oIEJBTkRMSU1fSUNNUF9GV0RfVU5SRUFDSCk7DQogCQlicmVh
azsNCiANCiAJY2FzZSBFTVNHU0laRToNCiAJCXR5cGUgPSBJQ01QX1VOUkVB
Q0g7DQogCQljb2RlID0gSUNNUF9VTlJFQUNIX05FRURGUkFHOw0KKwkJaWNt
cF9zZW5kID0gYmFkcG9ydF9iYW5kbGltKCBCQU5ETElNX0lDTVBfRldEX05F
RURGUkFHKTsNCiANCiAjaWZkZWYgSVBTRUMNCiAJCS8qIA0KQEAgLTE2MTgs
NyArMTYzNCwxMCBAQA0KIAl9DQogCWlmIChpYSAhPSBOVUxMKQ0KIAkJaWZh
X2ZyZWUoJmlhLT5pYV9pZmEpOw0KLQlpY21wX2Vycm9yKG1jb3B5LCB0eXBl
LCBjb2RlLCBkZXN0LnNfYWRkciwgbXR1KTsNCisJaWYgKGljbXBfc2VuZCA8
IDApDQorCQltX2ZyZWVtKG0pOw0KKwllbHNlDQorCQlpY21wX2Vycm9yKG1j
b3B5LCB0eXBlLCBjb2RlLCBkZXN0LnNfYWRkciwgbXR1KTsNCiB9DQogDQog
dm9pZA0KZGlmZiAtdSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMv
bmV0aW5ldC9pcF9vdXRwdXQuYyAuL3N5cy9uZXRpbmV0L2lwX291dHB1dC5j
DQotLS0gLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldGluZXQvaXBf
b3V0cHV0LmMJMjAxMC0xMC0yNSAxMzoxNjoxMS4wMDAwMDAwMDAgKzAwMDAN
CisrKyAuL3N5cy9uZXRpbmV0L2lwX291dHB1dC5jCTIwMTEtMDQtMDUgMDE6
MTU6MzIuMDAwMDAwMDAwICswMDAwDQpAQCAtMTI4LDYgKzEyOCw3IEBADQog
CXN0cnVjdCBpbl9pZmFkZHIgKmlhID0gTlVMTDsNCiAJaW50IGlzYnJvYWRj
YXN0LCBzd19jc3VtOw0KIAlzdHJ1Y3Qgcm91dGUgaXByb3V0ZTsNCisJc3Ry
dWN0IHJ0bG9va3VwIHJ0bDsNCiAJc3RydWN0IHJ0ZW50cnkgKnJ0ZTsJLyog
Y2FjaGUgZm9yIHJvLT5yb19ydCAqLw0KIAlzdHJ1Y3QgaW5fYWRkciBvZHN0
Ow0KICNpZmRlZiBJUEZJUkVXQUxMX0ZPUldBUkQNCkBAIC0yNzEsMTYgKzI3
MiwyNCBAQA0KIAkJICogb3BlcmF0aW9uIChhcyBpdCBpcyBmb3IgQVJQKS4N
CiAJCSAqLw0KIAkJaWYgKHJ0ZSA9PSBOVUxMKSB7DQorCQkJcnRsLnJ0X2dh
dGV3YXkgPSAoc3RydWN0IHNvY2thZGRyICopZHN0Ow0KICNpZmRlZiBSQURJ
WF9NUEFUSA0KLQkJCXJ0YWxsb2NfbXBhdGhfZmliKHJvLA0KLQkJCSAgICBu
dG9obChpcC0+aXBfc3JjLnNfYWRkciBeIGlwLT5pcF9kc3Quc19hZGRyKSwN
Ci0JCQkgICAgaW5wID8gaW5wLT5pbnBfaW5jLmluY19maWJudW0gOiBNX0dF
VEZJQihtKSk7DQorCQkJaWYgKCFydGxvb2t1cF9tcGF0aF9maWIoKHN0cnVj
dCBzb2NrYWRkciAqKWRzdCwNCisJCQkJCW50b2hsKGlwLT5pcF9zcmMuc19h
ZGRyIF4gaXAtPmlwX2RzdC5zX2FkZHIpLA0KKwkJCQkJaW5wID8gaW5wLT5p
bnBfaW5jLmluY19maWJudW0gOiBNX0dFVEZJQihtKSwNCisJCQkJCSZydGws
IFJUTF9QS1NFTlQpKQ0KICNlbHNlDQotCQkJaW5fcnRhbGxvY19pZ24ocm8s
IDAsDQotCQkJICAgIGlucCA/IGlucC0+aW5wX2luYy5pbmNfZmlibnVtIDog
TV9HRVRGSUIobSkpOw0KKwkJCWlmICghcnRsb29rdXBfZmliKCAoc3RydWN0
IHNvY2thZGRyICopZHN0LA0KKwkJCQkJaW5wID8gaW5wLT5pbnBfaW5jLmlu
Y19maWJudW0gOiBNX0dFVEZJQihtKSwNCisJCQkJCSZydGwsIFJUTF9QS1NF
TlQpKQ0KICNlbmRpZg0KLQkJCXJ0ZSA9IHJvLT5yb19ydDsNCisJCQkJcm8t
PnJvX3J0ID0gTlVMTDsNCisJCQllbHNlIHsNCisJCQkJbm9ydGZyZWUgPSAx
Ow0KKwkJCQlyby0+cm9fcnQgPSAoc3RydWN0IHJ0ZW50cnkgKikmcnRsOw0K
KwkJCX0NCiAJCX0NCisJCXJ0ZSA9IHJvLT5yb19ydDsNCiAJCWlmIChydGUg
PT0gTlVMTCB8fA0KIAkJICAgIHJ0ZS0+cnRfaWZwID09IE5VTEwgfHwNCiAJ
CSAgICAhUlRfTElOS19JU19VUChydGUtPnJ0X2lmcCkpIHsNCmRpZmYgLXUg
LXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldGluZXQvaXBmdy9p
cF9md190YWJsZS5jIC4vc3lzL25ldGluZXQvaXBmdy9pcF9md190YWJsZS5j
DQotLS0gLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldGluZXQvaXBm
dy9pcF9md190YWJsZS5jCTIwMTAtMDMtMjMgMDk6NTg6NTkuMDAwMDAwMDAw
ICswMDAwDQorKysgLi9zeXMvbmV0aW5ldC9pcGZ3L2lwX2Z3X3RhYmxlLmMJ
MjAxMS0wNC0wMyAxNjowNzo1Ny4wMDAwMDAwMDAgKzAwMDANCkBAIC0xMzcs
NyArMTM3LDcgQEANCiAJbWFzay5zaW5fYWRkci5zX2FkZHIgPSBodG9ubCht
bGVuID8gfigoMSA8PCAoMzIgLSBtbGVuKSkgLSAxKSA6IDApOw0KIAlzYS5z
aW5fYWRkci5zX2FkZHIgPSBhZGRyICYgbWFzay5zaW5fYWRkci5zX2FkZHI7
DQogCUlQRldfV0xPQ0soY2gpOw0KLQllbnQgPSAoc3RydWN0IHRhYmxlX2Vu
dHJ5ICopcm5oLT5ybmhfZGVsYWRkcigmc2EsICZtYXNrLCBybmgpOw0KKwll
bnQgPSAoc3RydWN0IHRhYmxlX2VudHJ5ICopcm5oLT5ybmhfZGVsYWRkcigm
c2EsICZtYXNrLCBybmgsIE5VTEwpOw0KIAlpZiAoZW50ID09IE5VTEwpIHsN
CiAJCUlQRldfV1VOTE9DSyhjaCk7DQogCQlyZXR1cm4gKEVTUkNIKTsNCkBA
IC0xNTQsNyArMTU0LDcgQEANCiAJc3RydWN0IHRhYmxlX2VudHJ5ICplbnQ7
DQogDQogCWVudCA9IChzdHJ1Y3QgdGFibGVfZW50cnkgKikNCi0JICAgIHJu
aC0+cm5oX2RlbGFkZHIocm4tPnJuX2tleSwgcm4tPnJuX21hc2ssIHJuaCk7
DQorCSAgICBybmgtPnJuaF9kZWxhZGRyKHJuLT5ybl9rZXksIHJuLT5ybl9t
YXNrLCBybmgsIE5VTEwpOw0KIAlpZiAoZW50ICE9IE5VTEwpDQogCQlmcmVl
KGVudCwgTV9JUEZXX1RCTCk7DQogCXJldHVybiAoMCk7DQpkaWZmIC11IC1y
IC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRpbmV0L3Jhd19pcC5j
IC4vc3lzL25ldGluZXQvcmF3X2lwLmMNCi0tLSAuLi9zcmNfb3JnXzguMl8y
MDExMDMyOS9zeXMvbmV0aW5ldC9yYXdfaXAuYwkyMDExLTA0LTAyIDE0OjQ1
OjEzLjAwMDAwMDAwMCArMDAwMA0KKysrIC4vc3lzL25ldGluZXQvcmF3X2lw
LmMJMjAxMS0wNC0wMyAxNjowNzo1Ny4wMDAwMDAwMDAgKzAwMDANCkBAIC03
NTUsNiArNzU1LDggQEANCiAJCWlmIChlcnIgPT0gMCkNCiAJCQlpYS0+aWFf
ZmxhZ3MgfD0gSUZBX1JPVVRFOw0KIAkJZXJyID0gaWZhX2FkZF9sb29wYmFj
a19yb3V0ZSgoc3RydWN0IGlmYWRkciAqKWlhLCBzYSk7DQorCQlpZiAoZXJy
ID09IDApDQorCQkgICAgICAgIGlhLT5pYV9mbGFncyB8PSBJRkFfUlRTRUxG
Ow0KIAkJaWZhX2ZyZWUoJmlhLT5pYV9pZmEpOw0KIAkJYnJlYWs7DQogCX0N
CmRpZmYgLXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldGlu
ZXQ2L2luNl9pZmF0dGFjaC5jIC4vc3lzL25ldGluZXQ2L2luNl9pZmF0dGFj
aC5jDQotLS0gLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldGluZXQ2
L2luNl9pZmF0dGFjaC5jCTIwMTAtMDUtMDYgMDY6NDQ6MTkuMDAwMDAwMDAw
ICswMDAwDQorKysgLi9zeXMvbmV0aW5ldDYvaW42X2lmYXR0YWNoLmMJMjAx
MS0wNC0wMyAxNjowNzo1Ny4wMDAwMDAwMDAgKzAwMDANCkBAIC00Miw2ICs0
Miw4IEBADQogI2luY2x1ZGUgPHN5cy9wcm9jLmg+DQogI2luY2x1ZGUgPHN5
cy9zeXNsb2cuaD4NCiAjaW5jbHVkZSA8c3lzL21kNS5oPg0KKyNpbmNsdWRl
IDxzeXMvbG9jay5oPg0KKyNpbmNsdWRlIDxzeXMvcm1sb2NrLmg+DQogDQog
I2luY2x1ZGUgPG5ldC9pZi5oPg0KICNpbmNsdWRlIDxuZXQvaWZfZGwuaD4N
CmRpZmYgLXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldGlu
ZXQ2L2luNl9ybXguYyAuL3N5cy9uZXRpbmV0Ni9pbjZfcm14LmMNCi0tLSAu
Li9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvbmV0aW5ldDYvaW42X3JteC5j
CTIwMTAtMTAtMTEgMTE6MjU6MzcuMDAwMDAwMDAwICswMDAwDQorKysgLi9z
eXMvbmV0aW5ldDYvaW42X3JteC5jCTIwMTEtMDQtMDMgMTY6MDc6NTcuMDAw
MDAwMDAwICswMDAwDQpAQCAtODcsNiArODcsNyBAQA0KICNpbmNsdWRlIDxz
eXMvcndsb2NrLmg+DQogI2luY2x1ZGUgPHN5cy9zeXNsb2cuaD4NCiAjaW5j
bHVkZSA8c3lzL2NhbGxvdXQuaD4NCisjaW5jbHVkZSA8c3lzL3JtbG9jay5o
Pg0KIA0KICNpbmNsdWRlIDxuZXQvaWYuaD4NCiAjaW5jbHVkZSA8bmV0L3Jv
dXRlLmg+DQpkaWZmIC11IC1yIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5
cy9uZXRpbmV0Ni9pbjZfc3JjLmMgLi9zeXMvbmV0aW5ldDYvaW42X3NyYy5j
DQotLS0gLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldGluZXQ2L2lu
Nl9zcmMuYwkyMDEwLTA1LTA2IDA2OjQ0OjE5LjAwMDAwMDAwMCArMDAwMA0K
KysrIC4vc3lzL25ldGluZXQ2L2luNl9zcmMuYwkyMDExLTA0LTA1IDAxOjE0
OjI0LjAwMDAwMDAwMCArMDAwMA0KQEAgLTc5NiwxNSArNzk2LDI1MyBAQA0K
IA0KIC8qDQogICogY2xvbmUgLSBtZWFuaW5nZnVsIG9ubHkgZm9yIGJzZGkg
YW5kIGZyZWVic2QNCisgKiBYWFggcmVtb3ZlIGFuZCBkbyBsb29rdXAgZGly
ZWN0IGluIGlwNl9vdXRwdXQNCiAgKi8NCiBpbnQNCiBpbjZfc2VsZWN0cm91
dGUoc3RydWN0IHNvY2thZGRyX2luNiAqZHN0c29jaywgc3RydWN0IGlwNl9w
a3RvcHRzICpvcHRzLA0KLSAgICBzdHJ1Y3QgaXA2X21vcHRpb25zICptb3B0
cywgc3RydWN0IHJvdXRlX2luNiAqcm8sDQorICAgIHN0cnVjdCBpcDZfbW9w
dGlvbnMgKm1vcHRzLCBzdHJ1Y3Qgcm91dGVfaW42ICpybywgc3RydWN0IHJ0
bG9va3VwICpydGwsDQogICAgIHN0cnVjdCBpZm5ldCAqKnJldGlmcCwgc3Ry
dWN0IHJ0ZW50cnkgKipyZXRydCkNCiB7DQorICAgICAgIGludCBlcnJvciA9
IDA7DQorICAgICAgIHN0cnVjdCBpZm5ldCAqaWZwID0gTlVMTDsNCisgICAg
ICAgc3RydWN0IHJ0ZW50cnkgKnJ0ID0gTlVMTDsNCisgICAgICAgc3RydWN0
IHNvY2thZGRyX2luNiAqc2luNl9uZXh0Ow0KKyAgICAgICBzdHJ1Y3QgaW42
X3BrdGluZm8gKnBpID0gTlVMTDsNCisgICAgICAgc3RydWN0IGluNl9hZGRy
ICpkc3QgPSAmZHN0c29jay0+c2luNl9hZGRyOw0KKyAgICAgICBzdHJ1Y3Qg
c29ja2FkZHJfaW42ICpsdV9kc3Q7DQorICAgICAgIGludCBub3JvdXRlb2sg
PSAwOw0KKyNpZiAwDQorICAgICAgIGNoYXIgaXA2YnVmW0lORVQ2X0FERFJT
VFJMRU5dOw0KKw0KKyAgICAgICBpZiAoZHN0c29jay0+c2luNl9hZGRyLnM2
X2FkZHIzMlswXSA9PSAwICYmDQorICAgICAgICAgICBkc3Rzb2NrLT5zaW42
X2FkZHIuczZfYWRkcjMyWzFdID09IDAgJiYNCisgICAgICAgICAgICFJTjZf
SVNfQUREUl9MT09QQkFDSygmZHN0c29jay0+c2luNl9hZGRyKSkgew0KKyAg
ICAgICAgICAgICAgIHByaW50ZigiaW42X3NlbGVjdHJvdXRlOiBzdHJhbmdl
IGRlc3RpbmF0aW9uICVzXG4iLA0KKyAgICAgICAgICAgICAgICAgICAgICBp
cDZfc3ByaW50ZihpcDZidWYsICZkc3Rzb2NrLT5zaW42X2FkZHIpKTsNCisg
ICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICBwcmludGYoImluNl9z
ZWxlY3Ryb3V0ZTogZGVzdGluYXRpb24gPSAlcyUlJWRcbiIsDQorICAgICAg
ICAgICAgICAgICAgICAgIGlwNl9zcHJpbnRmKGlwNmJ1ZiwgJmRzdHNvY2st
PnNpbjZfYWRkciksDQorICAgICAgICAgICAgICAgICAgICAgIGRzdHNvY2st
PnNpbjZfc2NvcGVfaWQpOyAvKiBmb3IgZGVidWcgKi8NCisgICAgICAgfQ0K
KyNlbmRpZg0KKw0KKyAgICAgICAvKiBJZiB0aGUgY2FsbGVyIHNwZWNpZnkg
dGhlIG91dGdvaW5nIGludGVyZmFjZSBleHBsaWNpdGx5LCB1c2UgaXQuICov
DQorICAgICAgIGlmIChvcHRzICYmIChwaSA9IG9wdHMtPmlwNnBvX3BrdGlu
Zm8pICE9IE5VTEwgJiYgcGktPmlwaTZfaWZpbmRleCkgew0KKyAgICAgICAg
ICAgICAgIC8qIFhYWCBib3VuZGFyeSBjaGVjayBpcyBhc3N1bWVkIHRvIGJl
IGFscmVhZHkgZG9uZS4gKi8NCisgICAgICAgICAgICAgICBpZnAgPSBpZm5l
dF9ieWluZGV4KHBpLT5pcGk2X2lmaW5kZXgpOw0KKyAgICAgICAgICAgICAg
IGlmIChpZnAgIT0gTlVMTCAmJg0KKyAgICAgICAgICAgICAgICAgICAobm9y
b3V0ZW9rIHx8IHJldHJ0ID09IE5VTEwgfHwNCisgICAgICAgICAgICAgICAg
ICAgSU42X0lTX0FERFJfTVVMVElDQVNUKGRzdCkpKSB7DQorICAgICAgICAg
ICAgICAgICAgICAgICAvKg0KKyAgICAgICAgICAgICAgICAgICAgICAgICog
d2UgZG8gbm90IGhhdmUgdG8gY2hlY2sgb3IgZ2V0IHRoZSByb3V0ZSBmb3IN
CisgICAgICAgICAgICAgICAgICAgICAgICAqIG11bHRpY2FzdC4NCisgICAg
ICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICAgICAgICAgICAgICAgICAg
ICAgZ290byBkb25lOw0KKyAgICAgICAgICAgICAgIH0gZWxzZQ0KKyAgICAg
ICAgICAgICAgICAgICAgICAgZ290byBnZXRyb3V0ZTsNCisgICAgICAgfQ0K
Kw0KKyAgICAgICAvKg0KKyAgICAgICAgKiBJZiB0aGUgZGVzdGluYXRpb24g
YWRkcmVzcyBpcyBhIG11bHRpY2FzdCBhZGRyZXNzIGFuZCB0aGUgb3V0Z29p
bmcNCisgICAgICAgICogaW50ZXJmYWNlIGZvciB0aGUgYWRkcmVzcyBpcyBz
cGVjaWZpZWQgYnkgdGhlIGNhbGxlciwgdXNlIGl0Lg0KKyAgICAgICAgKi8N
CisgICAgICAgaWYgKElONl9JU19BRERSX01VTFRJQ0FTVChkc3QpICYmDQor
ICAgICAgICAgICBtb3B0cyAhPSBOVUxMICYmIChpZnAgPSBtb3B0cy0+aW02
b19tdWx0aWNhc3RfaWZwKSAhPSBOVUxMKSB7DQorICAgICAgICAgICAgICAg
Z290byBkb25lOyAvKiB3ZSBkbyBub3QgbmVlZCBhIHJvdXRlIGZvciBtdWx0
aWNhc3QuICovDQorICAgICAgIH0NCisNCisgIGdldHJvdXRlOg0KKyAgICAg
ICAvKg0KKyAgICAgICAgKiBJZiB0aGUgbmV4dCBob3AgYWRkcmVzcyBmb3Ig
dGhlIHBhY2tldCBpcyBzcGVjaWZpZWQgYnkgdGhlIGNhbGxlciwNCisgICAg
ICAgICogdXNlIGl0IGFzIHRoZSBnYXRld2F5Lg0KKyAgICAgICAgKi8NCisg
ICAgICAgaWYgKG9wdHMgJiYgb3B0cy0+aXA2cG9fbmV4dGhvcCkgew0KKyAg
ICAgICAgICAgICAgIHN0cnVjdCByb3V0ZV9pbjYgKnJvbjsNCisgICAgICAg
ICAgICAgICBzdHJ1Y3QgbGxlbnRyeSAqbGE7DQorICAgICAgICAgICANCisg
ICAgICAgICAgICAgICBzaW42X25leHQgPSBzYXRvc2luNihvcHRzLT5pcDZw
b19uZXh0aG9wKTsNCisgICAgICAgICAgICAgICANCisgICAgICAgICAgICAg
ICAvKiBhdCB0aGlzIG1vbWVudCwgd2Ugb25seSBzdXBwb3J0IEFGX0lORVQ2
IG5leHQgaG9wcyAqLw0KKyAgICAgICAgICAgICAgIGlmIChzaW42X25leHQt
PnNpbjZfZmFtaWx5ICE9IEFGX0lORVQ2KSB7DQorICAgICAgICAgICAgICAg
ICAgICAgICBlcnJvciA9IEVBRk5PU1VQUE9SVDsgLyogb3Igc2hvdWxkIHdl
IHByb2NlZWQ/ICovDQorICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRv
bmU7DQorICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgIC8q
DQorICAgICAgICAgICAgICAgICogSWYgdGhlIG5leHQgaG9wIGlzIGFuIElQ
djYgYWRkcmVzcywgdGhlbiB0aGUgbm9kZSBpZGVudGlmaWVkDQorICAgICAg
ICAgICAgICAgICogYnkgdGhhdCBhZGRyZXNzIG11c3QgYmUgYSBuZWlnaGJv
ciBvZiB0aGUgc2VuZGluZyBob3N0Lg0KKyAgICAgICAgICAgICAgICAqLw0K
KyAgICAgICAgICAgICAgIHJvbiA9ICZvcHRzLT5pcDZwb19uZXh0cm91dGU7
DQorICAgICAgICAgICAgICAgLyoNCisgICAgICAgICAgICAgICAgKiBYWFgg
d2hhdCBkbyB3ZSBkbyBoZXJlPw0KKyAgICAgICAgICAgICAgICAqIFBMWiB0
byBiZSBmaXhpbmcNCisgICAgICAgICAgICAgICAgKi8NCisNCisgICAgICAg
ICAgICAgICBpZiAocm9uLT5yb19ydCA9PSBOVUxMKSB7DQorICAgICAgICAg
ICAgICAgICAgICAgICBsdV9kc3QgPSAoc3RydWN0IHNvY2thZGRyX2luNiAq
KSZyb24tPnJvX2RzdDsgDQorICAgICAgICAgICAgICAgICAgICAgICBydGwt
PnJ0X2dhdGV3YXkgPSAoc3RydWN0IHNvY2thZGRyICopbHVfZHN0Ow0KKyAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFydGxvb2t1cF9maWIoIChzdHJ1
Y3Qgc29ja2FkZHIgKilsdV9kc3QsIDBVLA0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJ0bCwgUlRMX1BLU0VOVCkpIHsNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9uLT5yb19ydCA9IE5V
TEw7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0g
RUhPU1RVTlJFQUNIOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnb3RvIGRvbmU7DQorICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UN
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9uLT5yb19ydCA9
IChzdHJ1Y3QgcnRlbnRyeSAqKSBydGw7DQorICAgICAgICAgICAgICAgfQ0K
Kw0KKyAgICAgICAgICAgICAgIHJ0ID0gcm9uLT5yb19ydDsNCisgICAgICAg
ICAgICAgICBpZnAgPSBydC0+cnRfaWZwOw0KKyAgICAgICAgICAgICAgIElG
X0FGREFUQV9MT0NLKGlmcCk7DQorICAgICAgICAgICAgICAgbGEgPSBsbGFf
bG9va3VwKExMVEFCTEU2KGlmcCksIDAsIChzdHJ1Y3Qgc29ja2FkZHIgKikm
c2luNl9uZXh0LT5zaW42X2FkZHIpOw0KKyAgICAgICAgICAgICAgIElGX0FG
REFUQV9VTkxPQ0soaWZwKTsNCisgICAgICAgICAgICAgICBpZiAobGEgIT0g
TlVMTCkgDQorICAgICAgICAgICAgICAgICAgICAgICBMTEVfUlVOTE9DSyhs
YSk7DQorICAgICAgICAgICAgICAgZWxzZSB7DQorICAgICAgICAgICAgICAg
ICAgICAgICBlcnJvciA9IEVIT1NUVU5SRUFDSDsNCisgICAgICAgICAgICAg
ICAgICAgICAgIGdvdG8gZG9uZTsNCisgICAgICAgICAgICAgICB9DQorI2lm
IDANCisgICAgICAgICAgICAgICBpZiAoKHJvbi0+cm9fcnQgJiYNCisgICAg
ICAgICAgICAgICAgICAgKHJvbi0+cm9fcnQtPnJ0X2ZsYWdzICYgKFJURl9V
UCB8IFJURl9MTElORk8pKSAhPQ0KKyAgICAgICAgICAgICAgICAgICAoUlRG
X1VQIHwgUlRGX0xMSU5GTykpIHx8DQorICAgICAgICAgICAgICAgICAgICFJ
TjZfQVJFX0FERFJfRVFVQUwoJnNhdG9zaW42KCZyb24tPnJvX2RzdCktPnNp
bjZfYWRkciwNCisgICAgICAgICAgICAgICAgICAgJnNpbjZfbmV4dC0+c2lu
Nl9hZGRyKSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbi0+
cm9fcnQpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbi0+
cm9fcnQgPSBOVUxMOw0KKyAgICAgICAgICAgICAgICAgICAgICAgKnNhdG9z
aW42KCZyb24tPnJvX2RzdCkgPSAqc2luNl9uZXh0Ow0KKyAgICAgICAgICAg
ICAgIH0NCisgICAgICAgICAgICAgICBpZiAocm9uLT5yb19ydCA9PSBOVUxM
KSB7DQorICAgICAgICAgICAgICAgICAgICAgICBsdV9kc3QgPSAoc3RydWN0
IHNvY2thZGRyX2luNiAqKSZyb24tPnJvX2RzdDsNCisgICAgICAgICAgICAg
ICAgICAgICAgIHJ0bC0+cnRfZ2F0ZXdheSA9IChzdHJ1Y3Qgc29ja2FkZHIg
KilsdV9kc3Q7DQorICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJ0bG9v
a3VwX2ZpYiggKHN0cnVjdCBzb2NrYWRkciAqKWx1X2RzdCwgMFUsDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRsLCBSVExf
UEtTRU5UKSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
b24tPnJvX3J0ID0gTlVMTDsNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXJyb3IgPSBFSE9TVFVOUkVBQ0g7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsNCisgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJvbi0+cm9fcnQgPSAoc3RydWN0IHJ0ZW50cnkgKikgcnRsOw0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyb24tPnJvX3J0
LT5ydF9mbGFncyAmIFJURl9MTElORk8pKSB7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcm9uLT5yb19ydCA9IE5VTEw7DQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Ig
PSBFSE9TVFVOUkVBQ0g7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ290byBkb25lOw0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAg
ICAgICAgICAgICAgIH0NCisjZW5kaWYNCisNCisgICAgICAgICAgICAgICAv
Kg0KKyAgICAgICAgICAgICAgICAqIFdoZW4gY2xvbmluZyBpcyByZXF1aXJl
ZCwgdHJ5IHRvIGFsbG9jYXRlIGEgcm91dGUgdG8gdGhlDQorICAgICAgICAg
ICAgICAgICogZGVzdGluYXRpb24gc28gdGhhdCB0aGUgY2FsbGVyIGNhbiBz
dG9yZSBwYXRoIE1UVQ0KKyAgICAgICAgICAgICAgICAqIGluZm9ybWF0aW9u
Lg0KKyAgICAgICAgICAgICAgICAqLw0KKyAgICAgICAgICAgICAgIGdvdG8g
ZG9uZTsNCisgICAgICAgfQ0KKw0KKyAgICAgICAvKg0KKyAgICAgICAgKiBV
c2UgYSBjYWNoZWQgcm91dGUgaWYgaXQgZXhpc3RzIGFuZCBpcyB2YWxpZCwg
ZWxzZSB0cnkgdG8gYWxsb2NhdGUNCisgICAgICAgICogYSBuZXcgb25lLiAg
Tm90ZSB0aGF0IHdlIHNob3VsZCBjaGVjayB0aGUgYWRkcmVzcyBmYW1pbHkg
b2YgdGhlDQorICAgICAgICAqIGNhY2hlZCBkZXN0aW5hdGlvbiwgaW4gY2Fz
ZSBvZiBzaGFyaW5nIHRoZSBjYWNoZSB3aXRoIElQdjQuDQorICAgICAgICAq
Lw0KKyAgICAgICBpZiAocm8pIHsNCisgICAgICAgICAgICAgICBpZiAocm8t
PnJvX3J0ICYmDQorICAgICAgICAgICAgICAgICAgICghKHJvLT5yb19ydC0+
cnRfZmxhZ3MgJiBSVEZfVVApIHx8DQorICAgICAgICAgICAgICAgICAgICAo
KHN0cnVjdCBzb2NrYWRkciAqKSgmcm8tPnJvX2RzdCkpLT5zYV9mYW1pbHkg
IT0gQUZfSU5FVDYgfHwNCisgICAgICAgICAgICAgICAgICAgICFJTjZfQVJF
X0FERFJfRVFVQUwoJnNhdG9zaW42KCZyby0+cm9fZHN0KS0+c2luNl9hZGRy
LA0KKyAgICAgICAgICAgICAgICAgICAgZHN0KSkpDQorICAgICAgICAgICAg
ICAgICAgICAgICByby0+cm9fcnQgPSAoc3RydWN0IHJ0ZW50cnkgKilOVUxM
Ow0KKyAgICAgICAgICAgICAgIGlmIChyby0+cm9fcnQgPT0gKHN0cnVjdCBy
dGVudHJ5ICopTlVMTCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IHNvY2thZGRyX2luNiAqc2E2Ow0KKw0KKyAgICAgICAgICAgICAgICAg
ICAgICAgLyogTm8gcm91dGUgeWV0LCBzbyB0cnkgdG8gYWNxdWlyZSBvbmUg
Ki8NCisgICAgICAgICAgICAgICAgICAgICAgIGJ6ZXJvKCZyby0+cm9fZHN0
LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOw0KKyAgICAgICAgICAg
ICAgICAgICAgICAgc2E2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmcm8t
PnJvX2RzdDsNCisgICAgICAgICAgICAgICAgICAgICAgICpzYTYgPSAqZHN0
c29jazsNCisgICAgICAgICAgICAgICAgICAgICAgIHNhNi0+c2luNl9zY29w
ZV9pZCA9IDA7DQorDQorICAgICAgICAgICAgICAgICAgICAgICBsdV9kc3Qg
PSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZyby0+cm9fZHN0OyANCisgICAg
ICAgICAgICAgICAgICAgICAgIHJ0bC0+cnRfZ2F0ZXdheSA9IChzdHJ1Y3Qg
c29ja2FkZHIgKilsdV9kc3Q7DQorI2lmZGVmIFJBRElYX01QQVRIDQorICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIXJ0bG9va3VwX21wYXRoX2ZpYigo
c3RydWN0IHNvY2thZGRyICopbHVfZHN0LA0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG50b2hsKHNhNi0+c2luNl9hZGRyLnM2
X2FkZHIzMlszXSksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMFUsIHJ0bCwgUlRMX1BLU0VOVCkpDQorI2Vsc2UNCisgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghcnRsb29rdXBfZmliKChzdHJ1Y3Qg
c29ja2FkZHIgKilsdV9kc3QsIDBVLA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJ0bCwgUlRMX1BLU0VOVCkpDQorI2VuZGlm
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvLT5yb19ydCA9
IE5VTEw7DQorICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJvLT5yb19ydCA9IChzdHJ1Y3Qg
cnRlbnRyeSAqKSBydGw7DQorICAgICAgICAgICAgICAgfQ0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAvKg0K
KyAgICAgICAgICAgICAgICAqIGRvIG5vdCBjYXJlIGFib3V0IHRoZSByZXN1
bHQgaWYgd2UgaGF2ZSB0aGUgbmV4dGhvcA0KKyAgICAgICAgICAgICAgICAq
IGV4cGxpY2l0bHkgc3BlY2lmaWVkLg0KKyAgICAgICAgICAgICAgICAqLw0K
KyAgICAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMtPmlwNnBvX25leHRo
b3ApDQorICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7DQorDQor
ICAgICAgICAgICAgICAgaWYgKHJvLT5yb19ydCkgew0KKyAgICAgICAgICAg
ICAgICAgICAgICAgaWZwID0gcm8tPnJvX3J0LT5ydF9pZnA7DQorDQorICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaWZwID09IE5VTEwpIHsgLyogY2Fu
IHRoaXMgcmVhbGx5IGhhcHBlbj8gKi8NCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcm8tPnJvX3J0ID0gTlVMTDsNCisgICAgICAgICAgICAg
ICAgICAgICAgIH0NCisgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAg
ICAgaWYgKHJvLT5yb19ydCA9PSBOVUxMKQ0KKyAgICAgICAgICAgICAgICAg
ICAgICAgZXJyb3IgPSBFSE9TVFVOUkVBQ0g7DQorICAgICAgICAgICAgICAg
cnQgPSByby0+cm9fcnQ7DQorDQorICAgICAgICAgICAgICAgLyoNCisgICAg
ICAgICAgICAgICAgKiBDaGVjayBpZiB0aGUgb3V0Z29pbmcgaW50ZXJmYWNl
IGNvbmZsaWN0cyB3aXRoDQorICAgICAgICAgICAgICAgICogdGhlIGludGVy
ZmFjZSBzcGVjaWZpZWQgYnkgaXBpNl9pZmluZGV4IChpZiBzcGVjaWZpZWQp
Lg0KKyAgICAgICAgICAgICAgICAqIE5vdGUgdGhhdCBsb29wYmFjayBpbnRl
cmZhY2UgaXMgYWx3YXlzIG9rYXkuDQorICAgICAgICAgICAgICAgICogKHRo
aXMgbWF5IGhhcHBlbiB3aGVuIHdlIGFyZSBzZW5kaW5nIGEgcGFja2V0IHRv
IG9uZSBvZg0KKyAgICAgICAgICAgICAgICAqICBvdXIgb3duIGFkZHJlc3Nl
cy4pDQorICAgICAgICAgICAgICAgICovDQorICAgICAgICAgICAgICAgaWYg
KGlmcCAmJiBvcHRzICYmIG9wdHMtPmlwNnBvX3BrdGluZm8gJiYNCisgICAg
ICAgICAgICAgICAgICAgb3B0cy0+aXA2cG9fcGt0aW5mby0+aXBpNl9pZmlu
ZGV4KSB7DQorICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShpZnAtPmlm
X2ZsYWdzICYgSUZGX0xPT1BCQUNLKSAmJg0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmcC0+aWZfaW5kZXggIT0NCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvcHRzLT5pcDZwb19wa3RpbmZvLT5pcGk2X2lmaW5kZXgp
IHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBF
SE9TVFVOUkVBQ0g7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdvdG8gZG9uZTsNCisgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAg
ICAgICAgICAgICB9DQorICAgICAgIH0NCisNCisgIGRvbmU6DQorICAgICAg
IGlmIChpZnAgPT0gTlVMTCAmJiBydCA9PSBOVUxMKSB7DQorICAgICAgICAg
ICAgICAgLyoNCisgICAgICAgICAgICAgICAgKiBUaGlzIGNhbiBoYXBwZW4g
aWYgdGhlIGNhbGxlciBkaWQgbm90IHBhc3MgYSBjYWNoZWQgcm91dGUNCisg
ICAgICAgICAgICAgICAgKiBub3IgYW55IG90aGVyIGhpbnRzLiAgV2UgdHJl
YXQgdGhpcyBjYXNlIGFuIGVycm9yLg0KKyAgICAgICAgICAgICAgICAqLw0K
KyAgICAgICAgICAgICAgIGVycm9yID0gRUhPU1RVTlJFQUNIOw0KKyAgICAg
ICB9DQorICAgICAgIGlmIChlcnJvciA9PSBFSE9TVFVOUkVBQ0gpDQorICAg
ICAgICAgICAgICAgVl9pcDZzdGF0LmlwNnNfbm9yb3V0ZSsrOw0KKw0KKyAg
ICAgICBpZiAocmV0aWZwICE9IE5VTEwpIHsNCisgICAgICAgICAgICAgICAq
cmV0aWZwID0gaWZwOw0KKw0KKyAgICAgICAgICAgICAgIC8qDQorICAgICAg
ICAgICAgICAgICogQWRqdXN0IHRoZSAib3V0Z29pbmciIGludGVyZmFjZS4g
IElmIHdlJ3JlIGdvaW5nIHRvIGxvb3AgDQorICAgICAgICAgICAgICAgICog
dGhlIHBhY2tldCBiYWNrIHRvIG91cnNlbHZlcywgdGhlIGlmcCB3b3VsZCBi
ZSB0aGUgbG9vcGJhY2sgDQorICAgICAgICAgICAgICAgICogaW50ZXJmYWNl
LiBIb3dldmVyLCB3ZSdkIHJhdGhlciBrbm93IHRoZSBpbnRlcmZhY2UgYXNz
b2NpYXRlZCANCisgICAgICAgICAgICAgICAgKiB0byB0aGUgZGVzdGluYXRp
b24gYWRkcmVzcyAod2hpY2ggc2hvdWxkIHByb2JhYmx5IGJlIG9uZSBvZiAN
CisgICAgICAgICAgICAgICAgKiBvdXIgb3duIGFkZHJlc3Nlcy4pDQorICAg
ICAgICAgICAgICAgICovDQorICAgICAgICAgICAgICAgaWYgKHJ0KSB7DQor
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJ0LT5ydF9pZnAtPmlmX2Zs
YWdzICYgSUZGX0xPT1BCQUNLKSAmJg0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChydC0+cnRfZ2F0ZXdheS0+c2FfZmFtaWx5ID09IEFGX0xJTksp
KQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmV0aWZwID0g
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZu
ZXRfYnlpbmRleCgoKHN0cnVjdCBzb2NrYWRkcl9kbCAqKQ0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJ0LT5ydF9nYXRld2F5KS0+c2RsX2luZGV4KTsNCisgICAgICAgICAgICAg
ICB9DQorICAgICAgIH0NCisgICAgICAgaWYgKHJldHJ0ICE9IE5VTEwpDQor
ICAgICAgICAgICAgICAgKnJldHJ0ID0gcnQ7ICAgIC8qIHJ0IG1heSBiZSBO
VUxMICovDQogDQotCXJldHVybiAoc2VsZWN0cm91dGUoZHN0c29jaywgb3B0
cywgbW9wdHMsIHJvLCByZXRpZnAsDQotCSAgICByZXRydCwgMCkpOw0KKyAg
ICAgICByZXR1cm4gKGVycm9yKTsNCiB9DQogDQogLyoNCmRpZmYgLXUgLXIg
Li4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldGluZXQ2L2lwNl9mb3J3
YXJkLmMgLi9zeXMvbmV0aW5ldDYvaXA2X2ZvcndhcmQuYw0KLS0tIC4uL3Ny
Y19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRpbmV0Ni9pcDZfZm9yd2FyZC5j
CTIwMTAtMDItMDcgMDk6MDA6MjIuMDAwMDAwMDAwICswMDAwDQorKysgLi9z
eXMvbmV0aW5ldDYvaXA2X2ZvcndhcmQuYwkyMDExLTA0LTA1IDAxOjE0OjU4
LjAwMDAwMDAwMCArMDAwMA0KQEAgLTk5LDYgKzk5LDcgQEANCiAJc3RydWN0
IGlmbmV0ICpvcmlnaWZwOwkvKiBtYXliZSB1bm5lY2Vzc2FyeSAqLw0KIAl1
X2ludDMyX3QgaW56b25lLCBvdXR6b25lOw0KIAlzdHJ1Y3QgaW42X2FkZHIg
c3JjX2luNiwgZHN0X2luNjsNCisJc3RydWN0IHJ0bG9va3VwIHJ0bDsNCiAj
aWZkZWYgSVBTRUMNCiAJc3RydWN0IHNlY3BvbGljeSAqc3AgPSBOVUxMOw0K
IAlpbnQgaXBzZWNydCA9IDA7DQpAQCAtMzUyLDE4ICszNTMsMjcgQEANCiAJ
ZHN0LT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Ow0KIAlkc3QtPnNpbjZfYWRk
ciA9IGlwNi0+aXA2X2RzdDsNCiANCi0JcmluNi5yb19ydCA9IHJ0YWxsb2Mx
KChzdHJ1Y3Qgc29ja2FkZHIgKilkc3QsIDAsIDApOw0KLQlpZiAocmluNi5y
b19ydCAhPSBOVUxMKQ0KLQkJUlRfVU5MT0NLKHJpbjYucm9fcnQpOw0KLQll
bHNlIHsNCisJcnRsLnJ0X2dhdGV3YXkgPSAoc3RydWN0IHNvY2thZGRyICop
ZHN0Ow0KKyNpZmRlZiBSQURJWF9NUEFUSA0KKwlzcmNfaW42ID0gaXA2LT5p
cDZfc3JjOw0KKwlkc3RfaW42ID0gaXA2LT5pcDZfZHN0Ow0KKwlpZiAoIXJ0
bG9va3VwX21wYXRoX2ZpYigoc3RydWN0IHNvY2thZGRyICopZHN0LA0KKwkJ
CW50b2hsKHNyY19pbjYtPnNpbjZfYWRkci5zNl9hZGRyMzJbM10gXiBkc3Rf
aW42LT5zaW42X2FkZHIuczZfYWRkcjMyWzNdKSwNCisJCQkwVSwgJnJ0bCwg
UlRMX1BLU0VOVCkpIHsNCisjZWxzZQ0KKwlpZiAoIXJ0bG9va3VwX2ZpYigg
KHN0cnVjdCBzb2NrYWRkciAqKWRzdCwgMFUsICZydGwsDQorCQkJUlRMX1BL
U0VOVCkpIHsNCisjZW5kaWYNCisJCXJpbjYucm9fcnQgPSBOVUxMOw0KIAkJ
Vl9pcDZzdGF0LmlwNnNfbm9yb3V0ZSsrOw0KIAkJaW42X2lmc3RhdF9pbmMo
bS0+bV9wa3RoZHIucmN2aWYsIGlmczZfaW5fbm9yb3V0ZSk7DQogCQlpZiAo
bWNvcHkpIHsNCiAJCQlpY21wNl9lcnJvcihtY29weSwgSUNNUDZfRFNUX1VO
UkVBQ0gsDQotCQkJSUNNUDZfRFNUX1VOUkVBQ0hfTk9ST1VURSwgMCk7DQor
CQkJCUlDTVA2X0RTVF9VTlJFQUNIX05PUk9VVEUsIDApOw0KIAkJfQ0KIAkJ
Z290byBiYWQ7DQotCX0NCisJfSBlbHNlDQorCQlyaW42LnJvX3J0ID0gKHN0
cnVjdCBydGVudHJ5ICopICZydGw7DQogCXJ0ID0gcmluNi5yb19ydDsNCiAj
aWZkZWYgSVBTRUMNCiBza2lwX3JvdXRpbmc6DQpAQCAtNTgwLDEyICs1OTAs
MTIgQEANCiANCiBzZW5kZXJyOg0KIAlpZiAobWNvcHkgPT0gTlVMTCkNCi0J
CWdvdG8gb3V0Ow0KKwkJcmV0dXJuOw0KIAlzd2l0Y2ggKGVycm9yKSB7DQog
CWNhc2UgMDoNCiAJCWlmICh0eXBlID09IE5EX1JFRElSRUNUKSB7DQogCQkJ
aWNtcDZfcmVkaXJlY3Rfb3V0cHV0KG1jb3B5LCBydCk7DQotCQkJZ290byBv
dXQ7DQorCQkJcmV0dXJuOw0KIAkJfQ0KIAkJZ290byBmcmVlY29weTsNCiAN
CmRpZmYgLXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldGlu
ZXQ2L2lwNl9vdXRwdXQuYyAuL3N5cy9uZXRpbmV0Ni9pcDZfb3V0cHV0LmMN
Ci0tLSAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvbmV0aW5ldDYvaXA2
X291dHB1dC5jCTIwMTAtMTAtMjUgMTM6MTY6MTEuMDAwMDAwMDAwICswMDAw
DQorKysgLi9zeXMvbmV0aW5ldDYvaXA2X291dHB1dC5jCTIwMTEtMDQtMDMg
MTY6MDc6NTcuMDAwMDAwMDAwICswMDAwDQpAQCAtMjAwLDcgKzIwMCw3IEBA
DQogCWludCBobGVuLCB0bGVuLCBsZW4sIG9mZjsNCiAJc3RydWN0IHJvdXRl
X2luNiBpcDZyb3V0ZTsNCiAJc3RydWN0IHJ0ZW50cnkgKnJ0ID0gTlVMTDsN
Ci0Jc3RydWN0IHNvY2thZGRyX2luNiAqZHN0LCBzcmNfc2EsIGRzdF9zYTsN
CisJc3RydWN0IHNvY2thZGRyX2luNiAqZHN0LCBzcmNfc2EsIGRzdF9zYSwg
ZHN0X2xvb2t1cDsNCiAJc3RydWN0IGluNl9hZGRyIG9kc3Q7DQogCWludCBl
cnJvciA9IDA7DQogCXN0cnVjdCBpbjZfaWZhZGRyICppYSA9IE5VTEw7DQpA
QCAtMjEzLDYgKzIxMyw3IEBADQogCXN0cnVjdCByb3V0ZV9pbjYgKnJvX3Bt
dHUgPSBOVUxMOw0KIAlpbnQgaGRyc3BsaXQgPSAwOw0KIAlpbnQgbmVlZGlw
c2VjID0gMDsNCisJc3RydWN0IHJ0bG9va3VwIHJ0bDsNCiAjaWZkZWYgU0NU
UA0KIAlpbnQgc3dfY3N1bTsNCiAjZW5kaWYNCkBAIC01NzIsMTEgKzU3Mywx
MSBAQA0KIAkvKiBhZGp1c3QgcG9pbnRlciAqLw0KIAlpcDYgPSBtdG9kKG0s
IHN0cnVjdCBpcDZfaGRyICopOw0KIA0KLQliemVybygmZHN0X3NhLCBzaXpl
b2YoZHN0X3NhKSk7DQotCWRzdF9zYS5zaW42X2ZhbWlseSA9IEFGX0lORVQ2
Ow0KLQlkc3Rfc2Euc2luNl9sZW4gPSBzaXplb2YoZHN0X3NhKTsNCi0JZHN0
X3NhLnNpbjZfYWRkciA9IGlwNi0+aXA2X2RzdDsNCi0JaWYgKChlcnJvciA9
IGluNl9zZWxlY3Ryb3V0ZSgmZHN0X3NhLCBvcHQsIGltNm8sIHJvLA0KKwli
emVybygmZHN0X2xvb2t1cCwgc2l6ZW9mKGRzdF9sb29rdXApKTsNCisJZHN0
X2xvb2t1cC5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Ow0KKwlkc3RfbG9va3Vw
LnNpbjZfbGVuID0gc2l6ZW9mKGRzdF9sb29rdXApOw0KKwlkc3RfbG9va3Vw
LnNpbjZfYWRkciA9IGlwNi0+aXA2X2RzdDsNCisJaWYgKChlcnJvciA9IGlu
Nl9zZWxlY3Ryb3V0ZSgmZHN0X2xvb2t1cCwgb3B0LCBpbTZvLCBybywgJnJ0
bCwNCiAJICAgICZpZnAsICZydCkpICE9IDApIHsNCiAJCXN3aXRjaCAoZXJy
b3IpIHsNCiAJCWNhc2UgRUhPU1RVTlJFQUNIOg0KQEAgLTU5NSw3ICs1OTYs
NyBAQA0KIAkJICogSWYgaW42X3NlbGVjdHJvdXRlKCkgZG9lcyBub3QgcmV0
dXJuIGEgcm91dGUgZW50cnksDQogCQkgKiBkc3QgbWF5IG5vdCBoYXZlIGJl
ZW4gdXBkYXRlZC4NCiAJCSAqLw0KLQkJKmRzdCA9IGRzdF9zYTsJLyogWFhY
ICovDQorCQkqZHN0ID0gZHN0X2xvb2t1cDsgICAgICAvKiBYWFggKi8NCiAJ
fQ0KIA0KIAkvKg0KQEAgLTEwNzEsMTEgKzEwNzIsNiBAQA0KIAkJVl9pcDZz
dGF0LmlwNnNfZnJhZ21lbnRlZCsrOw0KIA0KIGRvbmU6DQotCWlmIChybyA9
PSAmaXA2cm91dGUgJiYgcm8tPnJvX3J0KSB7IC8qIGJyYWNlIG5lY2Vzc2Fy
eSBmb3IgUlRGUkVFICovDQotCQlSVEZSRUUocm8tPnJvX3J0KTsNCi0JfSBl
bHNlIGlmIChyb19wbXR1ID09ICZpcDZyb3V0ZSAmJiByb19wbXR1LT5yb19y
dCkgew0KLQkJUlRGUkVFKHJvX3BtdHUtPnJvX3J0KTsNCi0JfQ0KICNpZmRl
ZiBJUFNFQw0KIAlpZiAoc3AgIT0gTlVMTCkNCiAJCUtFWV9GUkVFU1AoJnNw
KTsNCmRpZmYgLXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25l
dGluZXQ2L2lwNl92YXIuaCAuL3N5cy9uZXRpbmV0Ni9pcDZfdmFyLmgNCi0t
LSAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvbmV0aW5ldDYvaXA2X3Zh
ci5oCTIwMTAtMDktMDkgMDY6NDM6MTguMDAwMDAwMDAwICswMDAwDQorKysg
Li9zeXMvbmV0aW5ldDYvaXA2X3Zhci5oCTIwMTEtMDQtMDMgMTY6MDc6NTcu
MDAwMDAwMDAwICswMDAwDQpAQCAtNDMxLDEyICs0MzEsMTMgQEANCiBpbnQJ
ZGVzdDZfaW5wdXQgX19QKChzdHJ1Y3QgbWJ1ZiAqKiwgaW50ICosIGludCkp
Ow0KIGludAlub25lX2lucHV0IF9fUCgoc3RydWN0IG1idWYgKiosIGludCAq
LCBpbnQpKTsNCiANCisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+DQogaW50CWlu
Nl9zZWxlY3RzcmMoc3RydWN0IHNvY2thZGRyX2luNiAqLCBzdHJ1Y3QgaXA2
X3BrdG9wdHMgKiwNCiAJc3RydWN0IGlucGNiICppbnAsIHN0cnVjdCByb3V0
ZV9pbjYgKiwgc3RydWN0IHVjcmVkICpjcmVkLA0KIAlzdHJ1Y3QgaWZuZXQg
KiosIHN0cnVjdCBpbjZfYWRkciAqKTsNCiBpbnQgaW42X3NlbGVjdHJvdXRl
IF9fUCgoc3RydWN0IHNvY2thZGRyX2luNiAqLCBzdHJ1Y3QgaXA2X3BrdG9w
dHMgKiwNCi0Jc3RydWN0IGlwNl9tb3B0aW9ucyAqLCBzdHJ1Y3Qgcm91dGVf
aW42ICosIHN0cnVjdCBpZm5ldCAqKiwNCi0Jc3RydWN0IHJ0ZW50cnkgKiop
KTsNCisJc3RydWN0IGlwNl9tb3B0aW9ucyAqLCBzdHJ1Y3Qgcm91dGVfaW42
ICosIHN0cnVjdCBydGxvb2t1cCAqLA0KKwlzdHJ1Y3QgaWZuZXQgKiosIHN0
cnVjdCBydGVudHJ5ICoqKSk7DQogdV9pbnQzMl90IGlwNl9yYW5kb21pZCBf
X1AoKHZvaWQpKTsNCiB1X2ludDMyX3QgaXA2X3JhbmRvbWZsb3dsYWJlbCBf
X1AoKHZvaWQpKTsNCiAjZW5kaWYgLyogX0tFUk5FTCAqLw0KZGlmZiAtdSAt
ciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvbmV0aW5ldDYvbmQ2X3J0
ci5jIC4vc3lzL25ldGluZXQ2L25kNl9ydHIuYw0KLS0tIC4uL3NyY19vcmdf
OC4yXzIwMTEwMzI5L3N5cy9uZXRpbmV0Ni9uZDZfcnRyLmMJMjAxMC0wNS0w
NiAwNjo0NDoxOS4wMDAwMDAwMDAgKzAwMDANCisrKyAuL3N5cy9uZXRpbmV0
Ni9uZDZfcnRyLmMJMjAxMS0wNC0wMyAxNjowNzo1Ny4wMDAwMDAwMDAgKzAw
MDANCkBAIC00OCw2ICs0OCw4IEBADQogI2luY2x1ZGUgPHN5cy9yd2xvY2su
aD4NCiAjaW5jbHVkZSA8c3lzL3N5c2xvZy5oPg0KICNpbmNsdWRlIDxzeXMv
cXVldWUuaD4NCisjaW5jbHVkZSA8c3lzL2xvY2suaD4NCisjaW5jbHVkZSA8
c3lzL3JtbG9jay5oPg0KIA0KICNpbmNsdWRlIDxuZXQvaWYuaD4NCiAjaW5j
bHVkZSA8bmV0L2lmX3R5cGVzLmg+DQo=

--168430090-939355638-1301965804=:2152--



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